diff --git a/.gitignore b/.gitignore index e61c3af33..cb8206bc1 100644 --- a/.gitignore +++ b/.gitignore @@ -325,3 +325,10 @@ Installer Project Files/Krypton Toolkit Suite/Krypton Toolkit Suite-cache/part1/ Source\Miscellaneous Toolkit Items\Krypton Toolkit Documentation\Help *.bak Source/Krypton Components/Temp.txt + +# Don't ignore these files +!Source/Krypton Components/TestForm/invoices.xml + +# Log files +/Logs +Source/Krypton Components/Krypton.Ribbon/Temp.txt diff --git a/Assets/PDN/New Logo Green.pdn b/Assets/PDN/New Logo Green.pdn deleted file mode 100644 index 8070481a6..000000000 Binary files a/Assets/PDN/New Logo Green.pdn and /dev/null differ diff --git a/Assets/PDN/New Logo.pdn b/Assets/PDN/New Logo.pdn deleted file mode 100644 index 85a300cf2..000000000 Binary files a/Assets/PDN/New Logo.pdn and /dev/null differ diff --git a/Assets/PNG/Main Icon/128 x 128/Main Icon 128 x 128 Canary.png b/Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/128 x 128/Main Icon 128 x 128 Canary.png rename to Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 Canary.png diff --git a/Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 LTS.png b/Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 LTS.png new file mode 100644 index 000000000..4f410ad94 Binary files /dev/null and b/Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 LTS.png differ diff --git a/Assets/PNG/Main Icon/128 x 128/Main Icon 128 x 128 Nightly.png b/Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/128 x 128/Main Icon 128 x 128 Nightly.png rename to Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 Nightly.png diff --git a/Assets/PNG/Main Icon/128 x 128/Square Design 128 x 128 Green.png b/Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/128 x 128/Square Design 128 x 128 Green.png rename to Assets/PNG/Main Icon/128 x 128/Krypton 128 x 128 Stable.png diff --git a/Assets/PNG/Main Icon/16 x 16/Main Icon 16 x 16 Canary.png b/Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/16 x 16/Main Icon 16 x 16 Canary.png rename to Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 Canary.png diff --git a/Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 LTS.png b/Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 LTS.png new file mode 100644 index 000000000..a96a84014 Binary files /dev/null and b/Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 LTS.png differ diff --git a/Assets/PNG/Main Icon/16 x 16/Main Icon 16 x 16 Nightly.png b/Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/16 x 16/Main Icon 16 x 16 Nightly.png rename to Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 Nightly.png diff --git a/Assets/PNG/Main Icon/16 x 16/Square Design 16 x 16 Green.png b/Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/16 x 16/Square Design 16 x 16 Green.png rename to Assets/PNG/Main Icon/16 x 16/Krypton 16 x 16 Stable.png diff --git a/Assets/PNG/Main Icon/24 x 24/Main Icon 24 x 24 Canary.png b/Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/24 x 24/Main Icon 24 x 24 Canary.png rename to Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 Canary.png diff --git a/Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 LTS.png b/Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 LTS.png new file mode 100644 index 000000000..28379d00f Binary files /dev/null and b/Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 LTS.png differ diff --git a/Assets/PNG/Main Icon/24 x 24/Main Icon 24 x 24 Nightly.png b/Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/24 x 24/Main Icon 24 x 24 Nightly.png rename to Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 Nightly.png diff --git a/Assets/PNG/Main Icon/24 x 24/Square Design 24 x 24 Green.png b/Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/24 x 24/Square Design 24 x 24 Green.png rename to Assets/PNG/Main Icon/24 x 24/Krypton 24 x 24 Stable.png diff --git a/Assets/PNG/Main Icon/256 x 256/Main Icon 256 x 256 Canary.png b/Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/256 x 256/Main Icon 256 x 256 Canary.png rename to Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 Canary.png diff --git a/Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 LTS.png b/Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 LTS.png new file mode 100644 index 000000000..5f713cb67 Binary files /dev/null and b/Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 LTS.png differ diff --git a/Assets/PNG/Main Icon/256 x 256/Main Icon 256 x 256 Nightly.png b/Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/256 x 256/Main Icon 256 x 256 Nightly.png rename to Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 Nightly.png diff --git a/Assets/PNG/Main Icon/256 x 256/Square Design 256 x 256 Green.png b/Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/256 x 256/Square Design 256 x 256 Green.png rename to Assets/PNG/Main Icon/256 x 256/Krypton 256 x 256 Stable.png diff --git a/Assets/PNG/Main Icon/32 x 32/Main Icon 32 x 32 Canary.png b/Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/32 x 32/Main Icon 32 x 32 Canary.png rename to Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 Canary.png diff --git a/Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 LTS.png b/Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 LTS.png new file mode 100644 index 000000000..c84b0c075 Binary files /dev/null and b/Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 LTS.png differ diff --git a/Assets/PNG/Main Icon/32 x 32/Main Icon 32 x 32 Nightly.png b/Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/32 x 32/Main Icon 32 x 32 Nightly.png rename to Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 Nightly.png diff --git a/Assets/PNG/Main Icon/32 x 32/Square Design 32 x 32 Green.png b/Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/32 x 32/Square Design 32 x 32 Green.png rename to Assets/PNG/Main Icon/32 x 32/Krypton 32 x 32 Stable.png diff --git a/Assets/PNG/Main Icon/48 x 48/Main Icon 48 x 48 Canary.png b/Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/48 x 48/Main Icon 48 x 48 Canary.png rename to Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 Canary.png diff --git a/Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 LTS.png b/Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 LTS.png new file mode 100644 index 000000000..7dd0c6f95 Binary files /dev/null and b/Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 LTS.png differ diff --git a/Assets/PNG/Main Icon/48 x 48/Main Icon 48 x 48 Nightly.png b/Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/48 x 48/Main Icon 48 x 48 Nightly.png rename to Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 Nightly.png diff --git a/Assets/PNG/Main Icon/48 x 48/Square Design 48 x 48 Green.png b/Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/48 x 48/Square Design 48 x 48 Green.png rename to Assets/PNG/Main Icon/48 x 48/Krypton 48 x 48 Stable.png diff --git a/Assets/PNG/Main Icon/512 x 512/Main Icon 512 x 512 Canary.png b/Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/512 x 512/Main Icon 512 x 512 Canary.png rename to Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 Canary.png diff --git a/Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 LTS.png b/Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 LTS.png new file mode 100644 index 000000000..2a2599cb0 Binary files /dev/null and b/Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 LTS.png differ diff --git a/Assets/PNG/Main Icon/512 x 512/Main Icon 512 x 512 Nightly.png b/Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/512 x 512/Main Icon 512 x 512 Nightly.png rename to Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 Nightly.png diff --git a/Assets/PNG/Main Icon/512 x 512/Square Design 512 x 512 Green.png b/Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/512 x 512/Square Design 512 x 512 Green.png rename to Assets/PNG/Main Icon/512 x 512/Krypton 512 x 512 Stable.png diff --git a/Assets/PNG/Main Icon/64 x 64/Main Icon 64 x 64 Canary.png b/Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 Canary.png similarity index 100% rename from Assets/PNG/Main Icon/64 x 64/Main Icon 64 x 64 Canary.png rename to Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 Canary.png diff --git a/Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 LTS.png b/Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 LTS.png new file mode 100644 index 000000000..6fdf65776 Binary files /dev/null and b/Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 LTS.png differ diff --git a/Assets/PNG/Main Icon/64 x 64/Main Icon 64 x 64 Nightly.png b/Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 Nightly.png similarity index 100% rename from Assets/PNG/Main Icon/64 x 64/Main Icon 64 x 64 Nightly.png rename to Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 Nightly.png diff --git a/Assets/PNG/Main Icon/64 x 64/Main Icon 64 x 64.png b/Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 Stable.png similarity index 100% rename from Assets/PNG/Main Icon/64 x 64/Main Icon 64 x 64.png rename to Assets/PNG/Main Icon/64 x 64/Krypton 64 x 64 Stable.png diff --git a/Assets/PNG/NuGet Package Icons/Krypton LTS.png b/Assets/PNG/NuGet Package Icons/Krypton LTS.png new file mode 100644 index 000000000..6fdf65776 Binary files /dev/null and b/Assets/PNG/NuGet Package Icons/Krypton LTS.png differ diff --git a/Assets/PSD/Main Icon/New Logo Canary.psd b/Assets/PSD/Main Icon/New Logo Canary.psd deleted file mode 100644 index 485e343ff..000000000 Binary files a/Assets/PSD/Main Icon/New Logo Canary.psd and /dev/null differ diff --git a/Assets/PSD/Main Icon/New Logo Green.psd b/Assets/PSD/Main Icon/New Logo Green.psd deleted file mode 100644 index f559e479a..000000000 Binary files a/Assets/PSD/Main Icon/New Logo Green.psd and /dev/null differ diff --git a/Assets/PSD/Main Icon/New Logo Template.psd b/Assets/PSD/Main Icon/New Logo Template.psd deleted file mode 100644 index 8021e5913..000000000 Binary files a/Assets/PSD/Main Icon/New Logo Template.psd and /dev/null differ diff --git a/Directory.Build.props b/Directory.Build.props index af4a64269..98a0e89d9 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -7,16 +7,16 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision)-beta + 90.$(Minor).$(Build).$(Revision)-beta @@ -27,17 +27,17 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision)-alpha + 90.$(Minor).$(Build).$(Revision)-alpha @@ -48,8 +48,8 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) @@ -57,9 +57,9 @@ - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) @@ -69,16 +69,16 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) diff --git a/Documents/Help/Changelog.md b/Documents/Changelog/Changelog.md similarity index 61% rename from Documents/Help/Changelog.md rename to Documents/Changelog/Changelog.md index be737c6fb..f575898a1 100644 --- a/Documents/Help/Changelog.md +++ b/Documents/Changelog/Changelog.md @@ -2,16 +2,232 @@ ======= -## 2023-11-17 - Build 2311 (Patch 1) - November 2023 +## 2024-11-12 - Build 2411 - November 2024 +* Resolved [#1820](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1820), When KryptonDataGridView.AutoGenerate is set Winforms columns are used. See the issue for full text. +* Resolved [#1787](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1787), Office 2007 & 2010 Silver Darkmode themes ribbon buttton tracking colors adjusted. +* Resolved [#1800](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1800), `KryptonDataGridViewComboBoxEditingControl.EditingControlFormattedValue` property is differently implemented. +* Resolved [#66](https://github.com/Krypton-Suite/Standard-Toolkit/issues/66), Cannot Add Ribbon-Buttons-Container (KryptonRibbonGroupTripple) when using .netcore onwards [Returns error due to abstract class] +* Resolved [#1757](https://github.com/Krypton-Suite/Standard-Toolkit/issues1757), KForm has a thin magenta border after the fix of #1749 +* Implemented [#1765](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1765), Colours for `KryptonRibbon` contexts need sorting out +* Resolved [#1715](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1715), Not Implemented Exception thrown for `GetRibbonBackColorStyle` `PaletteOffice2010Base.cs` +* Resolved [#1299](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1299), Ribbon context colours not implemented +* Resolved [#1749](https://github.com/Krypton-Suite/Standard-Toolkit/issues1749), Rounded Form borders have "Triangles" in corners. +* Resolved [#1692](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1692), Resolves `KryptonMessageBoxes` incompatibility between message text and dark themes. +* Implemented [#1734](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1734), Add `ForceDesignerDPIUnaware` option +* Resolved [#1729](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1729), `KryptonCustomPaletteBase` does not implement ##Tracking states +* Resolved [#1693](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1693), `KryptonCustomPaletteBase` Illegal characters in path +* Resolved [#1552](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1552), `KryptonMessageBox` throws an error when using custom theme `Asphalt_v19.xml`. +* Resolved [#1708](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1708). `KryptonButton` crashes program on invalid type cast. +* Resolved [#1706](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1706), Restore: `KryptonComboBox` (On Form) does not respect designers `DropDownWidth` setting +* Resolved [#1704](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1704), Remove properties from `KryptonRichtTextBox` +* Implemented [#1700](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1700), Adds a method to `CommonHelper` which normalizes line breaks within a string, `CommonHelper.NormalizeLineBreaks`. +* Resolved [#1685](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1685), Theme Selectors `KryptonManagerGlobalPaletteChanged` event sometimes gets fired while the control is not fully initialized. +* Resolved [#1689](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1689), MessageBox text is "Hard to read" when using "MS 365 dark theme" +* Resolved [#1672](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1672), `KryptonContextMenuItemBase`: does not have a "Text" access AP +* Resolved [#1686](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1686), `TestForm`: MessageBox "No Close button" is not respected anymore +* Resolved [#1683](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1683), After #1657 `TestForm` forms still have Toolkit Image strings in the designer files +* Resolved [#1657](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1657), What is/does "GenericToolkitImages" supposed to do +* Resolved [#1661](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1661), Office 2007 Dark Blue theme: Form Text is hard to read when app loses focus +* Implemented [#1650](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1650), EditorConfig null masking needs to be "Unhidden" +* Resolved [#822](https://github.com/Krypton-Suite/Standard-Toolkit/issues/822), Unable to make closed auto hidden docked page visible after config reloading (fix courtesy of [dyurshevich](https://github.com/dyurshevich)) +* Resolved [#1646](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1646), `KryptonRibbonGroupThemeComboBox` does not react to index changes anymore. +* Resolved [#1633](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1633), `KryptonRibbon` - Clicking the Mini QAT Menu Button causes an exception. +* Resolved [#1624](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1624), Theme Selector controls default to Professional System theme when set to `PaletteMode.Global`. Instead those shoud default to `ThemeManager.DefaultGlobalPalette`. +* Resolved [#1628](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1628), Some themes do not render the "ToolStrip" Correctly +* Implemented [#632](https://github.com/Krypton-Suite/Standard-Toolkit/issues/632), **[Breaking Change]** `KryptonPropertyGrid` should have a customisable back colour. +* Resolved [#1564](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1564), Disabled Button Text in Ribbons is not visible in some themes +* Resolved [#1607](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1607), "MS365 - Black" theme is unreadable +* Resolved [#1581](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1581), **Enhancement** KListview has background problems for disabled view on each "Item" [now with added List and Details Views] +* Resolved/Implemented [#1597](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1597), Use `KryptonUseRTLLayout` to prevent LTR/RTL issues +* Resolved/Implemented [#1601](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1601), Rollback `KryptonPaletteCustomBase` ability to use a single schema +* Resolved [#1593](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1593), KInputBox is stuck in RTL mode +* RollBack [#1584](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1584), Disable the FadeValues property in VisualForm and move the FadeValues class to Extended. It was a V90 feature but is up for further development in V100. +* Resolved [#1573](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1573), KCheckedListbox & KListBox do not respect 'disabled' back colours +* Resolved [#1522](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1522), Declare `ThemeManager.SetTheme()` Obsolete from V100 +* Resolved [#371](https://github.com/Krypton-Suite/Standard-Toolkit/issues/371), Office 365 Black theme ribbon needs better colours for disabled etc. +* Resolved [#1522](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1522), Declare `ThemeManager.SetTheme()` Obsolete from V100 +* Resolved [#1092](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1092), `KryptonManager.GlobalPaletteMode` property is not updated when a custom theme is assigned. +* Resolved [#1561](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1561), KryptonRibbonGroup Controls remain enabled at runtime when set to disabled in the designer. +* Resolved [#1536](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1536), Build script does not follow same behaviour when 'rebuilding' +* Resolved [#1381](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1508), Update `ButtonSpecAny` `ShowDrop` property description. +* Resolved [#1381](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1502), Docking Persistence broken since build `##.23.10.303` +* Resolved [#1522](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1522), **[Breaking Change]** Check `ThemeManager` & `KryptonManager` for the use of hard coded theme indexes. See issue for full details. +* Resolved [#239](https://github.com/Krypton-Suite/Standard-Toolkit/issues/239), Toolstrip combo boxes do not have the theme background applied +* Implemented [#1507](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1507), **[Breaking Change]** `KryptonThemeComboBox`, `KryptonThemeListBox` & `KryptonRibbonGroupThemeComboBox`: + - All controls had their code base updated to one standard. + - The assignment of themes via an index has been removed from all. + - The previous has been replaced by assignment per PaletteMode identifier. + - All controls do now react to theme changes propagated via the KryptonManager. The control will then synchronize the selected item in the list with the newly activated theme. + - Form designer files or your code using a theme selector control might hold references to these properties: `KryptonManager`, `ReportSelectedThemeIndex`, `ThemeSelectedIndex` & `SynchronizeDropDownWidth`. These can, safely, be removed. + - The DefaultPalette property is now stored in the designer file and if set, the selected palette wil be loaded when the selector control is instantiated. + - The DefaultPalette property can also be used to switch palettes from code. +* Resolved [#1502](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1502), Fixes some problems creating workspaces introduced through warnings removal. +* Resolved [#1497](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1497), When pressing ALT to show the Ribbon KeyTips a null reference exception is thrown. +* Resolved [#1462](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1462), TestForm app: KCombobox from main.cs causes a crash +* Resolved [#1414](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1414), `SetDate` API is missing from `KryptonMonthCalendar` +* Resolved [#1138](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1138), BinaryFormatter is deprecated due to possible security risks and will be removed with .NET 9. +* Resolved [#1490](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1490), **[Regression]** Clean get of alpha branches results in multiple build errors +* Resolved [#1489](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1489), **[Regression]** KMessageBox (and "Deprecated") using Error Icon plays the wrong sound +* Resolved [#1461](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1461), Remove designer visibility of MouseDoubleClick and DoubleClick Events for the KryptonComboxBox +* Resolved [#1478](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1478), Wrongly assigned designers to `KryptonListview` and `KryptonProgressBar` corrected. DesignerActionLists code updated. +* Resolved [#1475](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1475), Build Scripts will run when no suitable environment is detected. Add 'BinLog' option to `build-*.cmd` +* Implemented [#1435](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1435), **[Breaking Change]** Take KMB back to the Winform override (Remove Checkbox etc) +* Implemented [#1432](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1432), Copy `KryptonMessageBox` to `KryptonMessageBoxDep` +* Resolved [#1424](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1424), **[Breaking Change]** `KryptonMessageBox` does not obey tab characters like `MessageBox` +* Resolved [#1381](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1381), **[Regression]** Docking Persistence broken since build ##.23.10.303 +* Resolved [#1356](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1356), **[Breaking Change]** AppButton colours don't change while switching themes + - See https://github.com/Krypton-Suite/Standard-Toolkit/issues/1356#issuecomment-2039412890 + - `RibbonAppButton` has become `RibbonFileAppButton` + - Addition `RibbonFileAppTab` to hold the tab text (Defaults to `File`) + - Colours for the `FileAppTab` have been moved into the `StateCommon` area +* Resolved [#1301](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1301), **[Regression]** When Maximised - intergrated KryptonRibbon has titlebar issues +* Resolved [#1383](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1383), Closing last Page in undocked page group prevents addition of further Pages via `KryptonDockingManager.AddToWorkspace` (fix courtesy of [stizler](https://github.com/stigzler)) +* Resolved [#1336](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1336), **[Regression]** KryptonForm has "Black Line" under Titlebar when maximised +* Resolved [#1370](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1370), **[Regression]** KryptonForm background colour +* **[Breaking Change]:** The `RibbonStrings` options, usually located in `KryptonRibbon` has been moved to `KryptonManager` -> `ToolkitStrings` -> `RibbonStrings` +* Resolved [#1363](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1363), Incorrect usage of storage objects +* Resolved [#1362](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1362), Using today's Alpha and todays alpha Demos: cannot open Outlook Mail Clone Form in the designer +* Tested [#1188](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1188), Duplicate window titles when window maximized +* Resolved [#1362](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1362), **[Regression]** Using todays Alpha and todays alpha Demos: cannot open Outlook Mail Clone Form in the designer +* Tested [#1188](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1188), **[Regression]** Duplicate window titles when window maximized +* Resolved [#1361](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1361), Opening an existing (Or creating a new) RibbonBar creates incorrect designer code for new `ToolBarImages` object(s) +* Implemented [#1355](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1355), Ability to merge `KryptonRibbon`s + - **Note:** This feature is activated via the `KryptonRibbonMerger` API +* Resolved issue whereby `CustomFormatMinimumColorButtonText` was assigned `null`, therefore flagging `KryptonOutlookGridStrings` as 'modified' +* Resolved [#1351](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1351), **[Regression]** KryptonFolderBrowserDialog display and runtime errors +* Implemented [#1343](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1343), Extend palette to accept `AppButton` colours +* Resolved [#1337](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1337), ViewManager is visible in the designer as a readonly field, when it should be invisible! +* Resolved [#1244](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1244), Should `IsDefault` set to be `internal` +* Implemented [#1329](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1329), Adjust Ribbon colours for tab row +* Resolved [#1322](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1322), Exception at design time When Assigning CustomPalette to PropertyGrid / TreeGrid +* Resolved [#1340](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1340), `KryptonPropertyGrid` Category header text colours +* Resolved [#1331](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1331), Fix white menu text in White themes (2010, 2013, 365); fixes to `KryptonPropertyGrid` and `KryptonThemeComboBox` with regard to theme switching +* Resolved [#1313](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1313), White background in tabs area +* Implement [#1309](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1309), Is it time to bring over `KryptonOutlookGrid` +* Resolved [#1316](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1316), `KryptonCustomPaletteBase` Import fails if XML contains images (fix courtesy of [tobitege](https://github.com/tobitege)) +* Resolved [#876](https://github.com/Krypton-Suite/Standard-Toolkit/issues/876), **[Regression]** `Office 365 - Black` does not display text correctly +* Resolved [#1308](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1308), `RibbonAppButton.cs` - **FormCloseBoxVisible**: null reference exception +* Resolved [#1266](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1266), **[Regression]** **[Breaking Change]** Since V 5.400, the QAT button is supposed to perform the close, therefore the Close Form button should not be visible +* Resolved [#313](https://github.com/Krypton-Suite/Standard-Toolkit/issues/313), **[Regression]** `KryptonMessagebox` is not RTL compliant +* Resolved [#1269](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1269), **[Breaking Change]** Remove AllowFormIntegrate to give consistent experience on all supported OS's +* Resolved [#1268](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1268), **[Breaking Change]** Many Krypton Controls have a CornerRoundingRadius that overrides the State#### Node Rounding values. Please remove! +* Resolved [#1245](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1245), Visual Studio do not open Form after Nuget-Package-Update +* Resolved [#1243](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1243), Krypton Navigator - Outlook Full Nav Mode +* Resolved / Implemented [#215](https://github.com/Krypton-Suite/Standard-Toolkit/issues/215), **[Breaking Change]** `KryptonTreeView` Multi Node Select +* Resolved [#1249](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1249), Ribbon Form Bars are no longer Drawn with the theme colouring +* Resolved [#1255](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1255), **[Breaking Change]** Why does `CornerRoundingRadius` override the KRyptonForm StateCommon.Border.Rounding value +* Resolved [#1252](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1252),Using V80, Setting a "Fat" Form border leads to poor layout +* Implemented [#327](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1220), (Name) and other Standard-Properties in KryptonContextMenu Items Editor +* Resolved [#1247](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1247),`VisualMessageBoxForm` Throws Exception when run from Example Code +* Implemented [#1220](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1220), Is it time to bring over `KryptonToast`s + - [#1237](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1237), Core 'Toast' UI + - [#1238](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1238), New `KryptonToastManager` + - [#1239](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1239), Toasts should behave like a `KryptonMessageBox` + - [#1240](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1240), New fade in/out ability for `KryptonForm`s + - **Note:** The developer must explicitly enable this feature, as it is turned off by default + - [#1281](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1281), Implement User Input Types + - [#1291](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1291), Make `KryptonToastNotification` RTL Aware + - [#1292](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1292), `KryptonToastNotification`: Add support for border colouring +* Resolved [#238](https://github.com/Krypton-Suite/Standard-Toolkit/issues/238), Dark / light Mode themes do not modify the calendar control background +* Implemented [#139](https://github.com/Krypton-Suite/Standard-Toolkit/issues/139), Themes (via KryptonManager design option) should have option to respect Current Metrics for Form Border widths +* Implemented [#124](https://github.com/Krypton-Suite/Standard-Toolkit/issues/124), **[Breaking Change]** When setting AllowFormChrome = false, then the Form Bar should still be Theme rendered +* Implemented [#1224](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1224), **[Breaking Change]** Move `GlobalPaletteMode` into `GlobalPalette` and rename +* Implemented [#1223](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1223), Move `UseKryptonFileDialogs` to a better designer location +* Implemented [#1222](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1222), Remove `CustomPalette` (Should be part of the palette definition) +* Implemented [#1204](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1204), Build on `KryptonCommandLinkButtons` + - [#1218](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1218), Default 'arrow' images, depending on OS version + - [#1217](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1217), Add support for text alignment + - [#1216](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1216), Add support for fonts +* Resolved [#996](https://github.com/Krypton-Suite/Standard-Toolkit/issues/996), DataGridView ComboBox Adding list over and over +* Resolved [#1207](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1207), Microsoft 365 - Black (Dark Mode) Drop button is not visible +* Resolved [#1206](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1206), **[Breaking Change]** Remove the Font Size (as it is already covered by the actual font !) +* Resolved [#1197](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1197), `KryptonTaskDialog` Footer Images +* Resolved [#1189](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1189), The Context and Next/Previous buttons of the `KryptonDockableNavigator` cannot be used +* Implemented [#1187](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1187), Bring over the `KryptonCommandLinkButtons` +* Resolved [#1176](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1176), KryptonProgressBar: small values escape drawing area +* Resolved [#1169](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1169), Button Spec Krypton Context Menu (Canary) +* Implemented [#1166](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1166), Use a struct to contain `KryptonMessageBox` data +* Implemented [#1161](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1161), A proper about box +* Resolved [#1091](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1091), Krypton File Dialogs Missing Buttons +* Implemented [#1009](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1009), Powered by Krypton Toolkit button + - Use `KryptonAboutToolkit.Show();` to invoke +* New `KryptonLanguageManager` is now integrated into `KryptonManager` as `ToolkitStrings` +* Removed support for .NET 6 and 7, in accordance with their official release cadences +* Support for .NET 9 +* Version bump `85.xx.xx.xx` -> `90.xx.xx.xx` + +======= + +# 2024-10-14 - Build 2410 (Patch 3) - October 2024 +* Implemented [#1792](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1792), Enable 'SourceLink' for NuGet packages +* Resolved [#66](https://github.com/Krypton-Suite/Standard-Toolkit/issues/66), Cannot Add Ribbon-Buttons-Container (KryptonRibbonGroupTripple) when using .netcore onwards [Returns error due to abstract class] +* Resolved [#297](https://github.com/Krypton-Suite/Standard-Toolkit/issues/297), Office 2k7 colour usages are wrong +* Resolved [#1772](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1772), `KryptonDataGridViewComboBoxCell` properties, `AutoCompleteMode` and `AutoCompleteSource` have incorrect default values. + +======= + +## 2024-08-26 - Build 2408 (Patch 2) - August 2024 +* Resolved [#1697](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1697), `KryptonComboBox` change in DropDownStyle cripples the control while the control is disabled en reenabled again. +* Resolved [#1755](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1755), Ribbon `GalleryButtonController` timer component causes an exception on mouse movements. +* Resolved [#1548](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1548), KComboBox DropDown arrow is illegible in certain themes +* Resolved [#1659](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1659), Solves `KryptonMessageBox` selected text issue, usage of diverse line breaks and sizing issues. +* Resolved [#1675](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1675), Catastrophic failure wherever `KryptonGroupPanel` is used. +* Resolved [#1677](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1677), `KryptonComboBox` cuts of text on high DPI. + +======= + +## 2024-07-22 - Build 2407 (Version 85 - Patch 1) - July 2024 +* Resolved [#1373](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1373), `KT.CommonHelper.CheckContextMenuForShortcut()` handles direct type casts differently from .NET 8.0 onward. Solution courtesy of @Tape-Worm +* Resolved [#1583](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1583), `KryptonThemeComboBox` and `KrpytonThemeListBox` have the wrong designer assigned. Adds the `KryptonStubDesigner` internal class. +* Resolved [#1614](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1614), `KryptonMessageBox` throws an exception after Esc key is pressed. +* Resolved [#1613](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1613), `KryptonMessageBox` text is not centered vertically. +* Resolved [#1599](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1599), `KryptonMessageBox` cuts off the last line. +* Resolved [#1600](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1600), `KryptonMessageBox` stays on top of other windows. +* Resolved [#1580](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1580), Changing to certain modes in `KryptonNavigator` can cause a System.NullReferenceException + +======= + +## 2024-06-24 - Build 2406 - June 2024 +* Resolved [#1561](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1561), KryptonRibbonGroup Controls remain enabled at runtime when set to disabled in the designer. +* Resolved [#1302](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1302), **[Breaking Change]** Font being used by "Professional" theme is pants ! +* Resolved [#1528](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1528), Tracking colours need reviewing +* Resolved [#982](https://github.com/Krypton-Suite/Standard-Toolkit/issues/982), Double click on the Form1 file in the Krypton toolkit test project results in a designer error +* Resolved [#1455](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1455), **[Regression]** KryptonComboBox text is clipped; as height is incorrect. +* Resolved [#1381](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1502), Docking Persistence broken since build `##.23.10.303` +* Resolved [#1508](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1508), **[Breaking Change]** ButtonSpec does not open assigned context menu when clicked. + - Added property `ShowDrop`, which displays a drop down arrow on the button. + - When a `KryptonContextMenu` is connected the menu is shown when the button is clicked. + - When a WinForms `ContextMenuStrip` is connected the menu is shown when the button is clicked. + - When both type of the above ContextMenus are connected the `KryptonContextMenu` takes precedence. + - The ButtonSpec's `Type` property does not need setting to "Context" to display the menu. +* Resolved [#619](https://github.com/Krypton-Suite/Standard-Toolkit/issues/619), KButton and KListbox unclear text color in certain scenarios +* Resolved [#1516](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1516), Theme Office 2010 Black Dark Mode causes a crash +* Resolved [#1328](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1328), Tentative adjustment to bring PaletteMode and the theme dictionary in line. +* Resolved [#1388](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1388), `KryptonButton` and `KryptonDropButton` Dropdown arrow color does not react to theme changes and is not visible. +* Resolved [#1424](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1424), **[Breaking Change]** `KryptonMessageBox` does not obey tab characters like `MessageBox` +* Resolved [#1383](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1383), Closing last Page in undocked page group prevents addition of further Pages via `KryptonDockingManager.AddToWorkspace` +* Resolved [#1381](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1381), **[Regression]** Docking Persistence broken since build ##.23.10.303 +* Version bump `80.xx.xx.xxx` -> `85.xx.xx.xx` + +======= + +## 2024-03-04 - Build 2403 (Version 80 - Patch 2) - March 2024 +* Resolved [#1314](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1314), **[Regression]** CheckedListBox CheckedIndices NullRef + +======= + +## 2023-11-17 - Build 2311 (Version 80 - Patch 1) - November 2023 * Resolved issue where an assertion is made when using `KryptonThemeComboBox` or `KryptonRibbonGroupThemeComboBox` * Resolved issue where `Sparkle` themes would crash when using certain `ButtonSpecs` * Resolved [#1174](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1174), Unable to adjust height of `KryptonForm` when `KryptonRibbon` is added - - _Note:_ This disables features from [#1117](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1117), until further testing is completed + - _Note:_ This disables features from [#1117](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1117), until further testing is completed + * Backed-out [#1117](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1117), Is it possible to have the KForm back colour as the KPanel colour ======= ## 2023-11-14 - Build 2311 - November 2023 -* Implemented [#1117](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1117), Is it possible to have the KForm back colour as the KPanel colour +* Resolved [#1093](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1093), `KryptonManager` - Setting the `GlobalPaletteMode` to 'Global' throws a error +* Implemented [#1117](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1117), Is it possible to have the KForm back colour as the KPanel colour * Resolved [#1153](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1153), Whilst investigating #1152 found that "Start drag" in certain application causes an exception. * Resolved [#1152](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1152), Unable to resize control dragged from Navigator via KryptonDockingManager.FloatingWindowAdding event. * Resolved [#1146](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1146), Krypton.Navigator throws exception in Initialise when attempting to EndInit(). @@ -21,7 +237,7 @@ * Resolved [#1037](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1037), Borderless Krypton Form, Maximized, Top Most = True > Fullscreen does not overlap on task bar. * Implemented [#956](https://github.com/Krypton-Suite/Standard-Toolkit/issues/956), Update `Readme.md` images to reflect the toolkit * Added the ability to specify the message text alignment in a `KryptonMessagebox` - - Default value is `MiddleLeft` + - Default value is `MiddleLeft` * Implemented [#1126](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1126), `KryptonRibbonGroupThemeComboBox` needs to be part of the ribbon designer * Resolved [#1125](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1072), KryptonThemeCombox displays extra string (Todays alpha) * Implemented [#1089](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1089), `KryptonProgressBar` in StatusStrips @@ -50,15 +266,15 @@ * Implemented [#1023](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1023), Please remove "sealed" from `KryptonWrapLabel` and `KryptonLinkWrapLabel` * Resolved [#1020](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1020), Cannot add a `KryptonPage` to a `KryptonNavigator` * Added ability to embed links into the `KryptonMessageBox` content. The new options are:- - - `ContentAreaType` - Defines content area type of a `KryptonMessageBox`, default is normal - - `LinkLabelCommand` - Specifies a `KryptonCommand` if using the `MessageBoxContentAreaType.LinkLabel` type. - - `LinkLaunchArgument` - Specifies the `ProcessStartInfo` if a `LinkLabelCommand` has not been defined. - - `ContentLinkArea` - Specifies the area of a link, if using the `MessageBoxContentAreaType.LinkLabel` type. + - `ContentAreaType` - Defines content area type of a `KryptonMessageBox`, default is normal + - `LinkLabelCommand` - Specifies a `KryptonCommand` if using the `MessageBoxContentAreaType.LinkLabel` type. + - `LinkLaunchArgument` - Specifies the `ProcessStartInfo` if a `LinkLabelCommand` has not been defined. + - `ContentLinkArea` - Specifies the area of a link, if using the `MessageBoxContentAreaType.LinkLabel` type. * Added `KryptonLanguageManager` to the `KryptonManager` action list * Resolved [#1008](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1008), Krypton Save/Open file dialogs are not accessible from the toolbox * Implemented [#1007](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1007), A way to alter all of the strings in the toolkit to language specific strings * Implemented [#1006](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1006), Make converter strings localisable - - **Note:** Components that use these strings may need to be 'refreshed' once changes have been made + - **Note:** Components that use these strings may need to be 'refreshed' once changes have been made * Implemented [#602](https://github.com/Krypton-Suite/Standard-Toolkit/issues/602), ToolStrip embedded into the non client area * Implemented [#894](https://github.com/Krypton-Suite/Standard-Toolkit/issues/894), `KryptonPropertyGrid` needs to have full Krypton support * Resolved [#999](https://github.com/Krypton-Suite/Standard-Toolkit/issues/999), Incorrect project file names while building @@ -73,7 +289,7 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Add action list options to `KryptonCommand` * Implemented [#686](https://github.com/Krypton-Suite/Standard-Toolkit/issues/686), Extend ToolTipManager designer to also allow "open/close" interval properties. * Implemented [#950](https://github.com/Krypton-Suite/Standard-Toolkit/issues/950), Please add `-t:rebuild` to the msbuild command line - - **Note:** This option is _only_ available for building `nightly` binaries + - **Note:** This option is _only_ available for building `nightly` binaries * Removed .NET Core 3.1 and .NET 5 references from NuGet package descriptions * Add `AllowFormIntegrate` option to `KryptonRibbon`s action list, for easier access * Resolved [#929](https://github.com/Krypton-Suite/Standard-Toolkit/issues/929), `KryptonRibbon` 'disappears' while running the application @@ -85,7 +301,7 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Implemented [#904](https://github.com/Krypton-Suite/Standard-Toolkit/issues/904), `*.Nightly` builds are no longer visible in Visual Studio * Resolved [#905](https://github.com/Krypton-Suite/Standard-Toolkit/issues/905), NuGet description for `Lite` versions is incorrect * Implemented [#813](https://github.com/Krypton-Suite/Standard-Toolkit/issues/813), Border colours need to match the themes -* Complete [#827](https://github.com/Krypton-Suite/Standard-Toolkit/issues/827), Expose IPalette / PaletteBase as a public interface in KryptonManager +* Complete [#827](https://github.com/Krypton-Suite/Standard-Toolkit/issues/827), **[Breaking Change]** Expose IPalette / PaletteBase as a public interface in KryptonManager * Resolved [#891](https://github.com/Krypton-Suite/Standard-Toolkit/issues/891), `LabelStyle` does not appear to have a default designer value * Implemented [#887](https://github.com/Krypton-Suite/Standard-Toolkit/issues/887), A 'LinkLabel' version of the `KryptonWrapLabel` * Fixed the display of the initial selected theme in the "ThemeSelection ComboBox" @@ -132,8 +348,8 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Resolved [#764](https://github.com/Krypton-Suite/Standard-Toolkit/issues/764), `Development-Workflow.md` needs to state what the builds are (i.e. nightly) * Implemented [#761](https://github.com/Krypton-Suite/Standard-Toolkit/issues/761), Can TFM also include .NET Framework 4.8.1? * Resolved `ArgumentNullException` when saving `palette.xml` files with serialized Image objects (thanks to [hopla](https://github.com/hopla)) - - When the deserialized Image class is of type Bitmap, keep this bitmap, as opposed to painting it on a new in-memory bitmap. This keeps the original Format (as opposed, changing it to MemoryBMP. - - When the format of an Image is of Format MemoryBMP, save the image as format BMP. + - When the deserialized Image class is of type Bitmap, keep this bitmap, as opposed to painting it on a new in-memory bitmap. This keeps the original Format (as opposed, changing it to MemoryBMP. + - When the format of an Image is of Format MemoryBMP, save the image as format BMP. * Implemented [#756](https://github.com/Krypton-Suite/Standard-Toolkit/issues/756), Add `[AllowNull]` to a controls `Text` field * Resolved [#738](https://github.com/Krypton-Suite/Standard-Toolkit/issues/738), "Office 2010 - Blue (Dark Mode)": Form title text cannot be read * Implemented [#728](https://github.com/Krypton-Suite/Standard-Toolkit/issues/728), Bring MessageBox `States` inline with latest .Net 6 @@ -163,8 +379,8 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Improvements to all 'Black/Blue (Dark Mode)' themes * Silver dark/light mode themes are now implemented * Full/Lite NuGet packages - as support for .NET 5 ended in May, there are now 2 types of NuGet package. - - Full - Supports every framework from .NET Framework 4.6.2 to .NET 6 - - Lite - Supports .NET Framework 4.8, .NET Core 3.1 and .NET 6 + - Full - Supports every framework from .NET Framework 4.6.2 to .NET 6 + - Lite - Supports .NET Framework 4.8, .NET Core 3.1 and .NET 6 * Fixed grid cell selection colours for dark/light mode themes * Blue dark mode themes now have a darker alternate colour * Added new `GetPaletteModeManager()` method to the `ThemeManager` API, to return the current `PaletteModeManager` of the selected `KryptonManager` @@ -191,7 +407,7 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Resolved [#611](https://github.com/Krypton-Suite/Standard-Toolkit/issues/611), `KryptonContextMenu`: Cannot add `ComboBoxItem` * Implemented [#610](https://github.com/Krypton-Suite/Standard-Toolkit/issues/610), `KryptonContextMenuRadioButton` - no way to assign a method/event through the item editor * Resolved [#609](https://github.com/Krypton-Suite/Standard-Toolkit/issues/609), `KryptonContextMenu`: Item text unreadable with certain themes - - At the moment, only the 'Black/Blue (Dark Mode)' themes are being worked on + - At the moment, only the 'Black/Blue (Dark Mode)' themes are being worked on * Resolved [#607](https://github.com/Krypton-Suite/Standard-Toolkit/issues/607), `KryptonMessageBox` Certain length of the first line of text can push the text on the following out of the visible area (thanks to [giduac](https://github.com/giduac)) * Some fixes for [#603](https://github.com/Krypton-Suite/Standard-Toolkit/issues/603), Title Bar Images Stretched/Cropped * Resolved [#596](https://github.com/Krypton-Suite/Standard-Toolkit/issues/596), ActionLists do not reflect the recommended or possible settings in the designer properties @@ -306,14 +522,14 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Resolved [#320](https://github.com/Krypton-Suite/Standard-Toolkit/issues/320), `KryptonColorButton` "SelectedRect" will not do anything but a "Square" * Implemented [#304](https://github.com/Krypton-Suite/Standard-Toolkit/issues/304), [Feature Request]: Track Bar "Back Color" needed in State#### Designer control(s) * Implemented [#304](https://github.com/Krypton-Suite/Standard-Toolkit/issues/304),[Feature Request]: Track Bar "Back Color" needed in State#### Designer control(s) - - Add "DrawBackground" as a visible Designer element + - Add "DrawBackground" as a visible Designer element * Implemented [#227](https://github.com/Krypton-Suite/Standard-Toolkit/issues/227), [Bug]: OverrideFocus Designer settings do not work or Prevent Ribbon MouseOver Highlighting - - The Fix works in "All Themes" apart from `Office2k7` and `Sparkle`, where it is diminished but still highlights with white! + - The Fix works in "All Themes" apart from `Office2k7` and `Sparkle`, where it is diminished but still highlights with white! * Implemented [#291](https://github.com/Krypton-Suite/Standard-Toolkit/issues/291), Build: can the echo time have a time zone, so that when used for PR's it can be checked against the user locale * Implemented [#290](https://github.com/Krypton-Suite/Standard-Toolkit/issues/290), Should V6 only support "MS Supported" Net Frameworks? - - The toolkit will only work with projects using .NET Framework 4.6.2 or higher - - `lite` NuGet packages are no longer being supported or maintained for the forseeable future - - For more information, please visit [here](https://dotnet.microsoft.com/platform/support/policy/dotnet-framework) + - The toolkit will only work with projects using .NET Framework 4.6.2 or higher + - `lite` NuGet packages are no longer being supported or maintained for the forseeable future + - For more information, please visit [here](https://dotnet.microsoft.com/platform/support/policy/dotnet-framework) * Implemented [#282](https://github.com/Krypton-Suite/Standard-Toolkit/issues/282), `KryptonScrollbars` need to have smart tags * Resolved [#245](https://github.com/Krypton-Suite/Standard-Toolkit/issues/245), `TableLayoutPanel` should be "Kryptonised" * Implemented [#269](https://github.com/Krypton-Suite/Standard-Toolkit/issues/269), "Print Dialog" is in the Main Forms elements - Where is Kryptons' Standard themed equivalent @@ -336,8 +552,8 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Resolved [#159](https://github.com/Krypton-Suite/Standard-Toolkit/issues/159), Office 365 tracking colours are wrong * Resolved [#120](https://github.com/Krypton-Suite/Standard-Toolkit/issues/120), `ButtonSpec` thinks that the default of `inherit` on Style is not the default * Resolved [#92](https://github.com/Krypton-Suite/Standard-Toolkit/issues/92), **Many** Items cannot be Dragged and dropped onto a Form in Designer (Second patch) - - As the "Designers" use text based references, then only need to include dlls derived from `ParentControlDesigner` - - Resolves [Bug]: **Many** Items cannot be Dragged and dropped onto a Form in Designer + - As the "Designers" use text based references, then only need to include dlls derived from `ParentControlDesigner` + - Resolves [Bug]: **Many** Items cannot be Dragged and dropped onto a Form in Designer * Resolved [#64](https://github.com/Krypton-Suite/Standard-Toolkit/issues/64), `KryptonContextMenu` Designer has layout issues * Resolved [#51](https://github.com/Krypton-Suite/Standard-Toolkit/issues/51), Minimize icon in form titlebar is not disabled * Remove the `Typeof` in the designer attributes and use text to prevent "Pre-Loading" of the wrong `System.Designer.dll` in Multi-Target projects @@ -359,20 +575,20 @@ Cannot add items to KryptonGroupBox in WinForms Designer ## 2021-08-02 Build 2108 - August 2021 (Canary) * Implement [#207](https://github.com/Krypton-Suite/Standard-Toolkit/issues/207), 'DarkMode' for `KryptonRichTextBox`/`KryptonTextBox` (Sparkle theme updates to come) * Resolved [#150](https://github.com/Krypton-Suite/Standard-Toolkit/issues/150), Change the Default type of Theme for A KryptonLabel to be "Normal- Panel" - - Make sure that the `NormalPanel` is the default style - - Also Resolved the WrapLabel Style not being set correctly + - Make sure that the `NormalPanel` is the default style + - Also Resolved the WrapLabel Style not being set correctly * Resolved [#202](https://github.com/Krypton-Suite/Standard-Toolkit/issues/202), `KryptonGroup` transparency * Remove the internal class Called `KryptonDataGridViewIconColumn` from design use [#27](https://github.com/Krypton-Suite/Standard-Toolkit/issues/27) - - Put back the removed `CLSCompliant` and `ComVisible` assembly flags for backwards compatibility - - Update the projects to comply/use the latest analysers + - Put back the removed `CLSCompliant` and `ComVisible` assembly flags for backwards compatibility + - Update the projects to comply/use the latest analysers * RichTextBox now allows CueHint Text * ComboBox now allows CueHint Text * Implement [#197](https://github.com/Krypton-Suite/Standard-Toolkit/issues/197), Rounding should use `float` or `double` instead of `int`. Rounding now accepts `float` values * New logo for both canary and stable builds * Resolved [#138](https://github.com/Krypton-Suite/Standard-Toolkit/issues/138), `KryptonListView` throws a `System.Resources.MissingManifestResourceException` - - If you want a standard List then use ListBox or CheckedListBox - - If you want a Details view then use a `DataGrid` - - This implements LargeIcons / Small Icons / Tiles with and without checkboxes as allowed + - If you want a standard List then use ListBox or CheckedListBox + - If you want a Details view then use a `DataGrid` + - This implements LargeIcons / Small Icons / Tiles with and without checkboxes as allowed * New `KryptonMessageBoxIcon` to replace the default `MessageBoxIcon` option * Updated `KryptonMessageBox` icons * Implement [#162](https://github.com/Krypton-Suite/Standard-Toolkit/issues/162), Default rounding of control corners @@ -467,7 +683,7 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Implemented [#8](https://github.com/Krypton-Suite/Standard-Toolkit/issues/8), Is it possible to only minimize FloatingWindow in DockingManager? * Resolved [#9](https://github.com/Krypton-Suite/Standard-Toolkit/issues/9), Cannot place `KryptonStatusStrip` on a Form * Resolved [#12](https://github.com/Krypton-Suite/Standard-Toolkit/issues/12), AllowButtonSpecToolTipPriority - - If the parent Item has tooltips, and the button spec has tooltips, then the default is show both when hovering over the button spec. This can be disabled by setting AllowButtonSpecTooltipPriority to true, so that only 1 tooltip is displayed when hovering over any part of the control. + - If the parent Item has tooltips, and the button spec has tooltips, then the default is show both when hovering over the button spec. This can be disabled by setting AllowButtonSpecTooltipPriority to true, so that only 1 tooltip is displayed when hovering over any part of the control. ======= @@ -492,3 +708,4 @@ Cannot add items to KryptonGroupBox in WinForms Designer * Support for .NET Core LTS (currently 3.1) * Changed `490` to `500` * Builds from now on will be labelled as `YYMM` + diff --git a/Documents/Help/Designer-Fix.md b/Documents/Help/Designer-Fix.md deleted file mode 100644 index cfc76c400..000000000 --- a/Documents/Help/Designer-Fix.md +++ /dev/null @@ -1,7 +0,0 @@ -# How To: Fix the components in the designer - -If you are experiencing issues while using the components in the designer, you might need to replace `net[##Current-Version##]-windows` with `net48;net[##Current-Version##]-windows` in your project configuration files. - -To learn more about the `TargetFrameworks` attribute, [click here](https://docs.microsoft.com/en-us/dotnet/standard/frameworks). - -## N.B: This action will produce binaries for multiple frameworks. \ No newline at end of file diff --git a/Documents/License/License.md b/Documents/License/License.md index a598afcb9..ece1d298c 100644 --- a/Documents/License/License.md +++ b/Documents/License/License.md @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2017 - 2023, Krypton Suite +Copyright (c) 2017 - 2024, Krypton Suite All rights reserved. diff --git a/LICENSE b/LICENSE index a598afcb9..ece1d298c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ BSD 3-Clause License -Copyright (c) 2017 - 2023, Krypton Suite +Copyright (c) 2017 - 2024, Krypton Suite All rights reserved. diff --git a/README.md b/README.md index ab354015c..e62168007 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ - # Standard Toolkit - * [NuGet Information](#nuget-information) * [Nightly](#nightly) * [Canary](#canary) * [Stable](#stable) * [Documentation](#documentation) + * [Contributing to the Standard Toolkit](#contributing-to-the-standard-toolkit) * [Package Support Information](#package-support-information) * [Release Cadence](#release-cadence) * [Package Descriptions](#package-descriptions) @@ -19,22 +18,22 @@ * [Discord Server](#discord-server) * [Version History](#version-history) * [Breaking Changes](#breaking-changes) - * [V80.## (2023-11-14 - Build 2311 - November 2023)](#v80-2023-11-14---build-2311---november-2023) + * [V90.00 (2024-11-12 - Build 2411 - November 2024)](v90-24-11-12--build-2411---november-2024) + * [Support for .NET 6/7](#support-for-net-67) + * [`KryptonButton` Properties](#kryptonbutton-properties) + * [API Changes](#api-changes) + * [`KryptonInputBox`](#kryptoninputbox) + * [Building the Toolkit](#building-the-toolkit) + * [V85.00 (2024-06-24 - Build 2406 - June 2024)](#v85-2024-06-24---build-2406---june-2024) + * [V80.00 (2023-11-14 - Build 2311 - November 2023)](#v80-2023-11-14---build-2311---november-2023) * [Support for .NET Core 3.1 and .NET 5](#support-for-net-core-31-and-net-5) * [KryptonMessageBoxButtons](#kryptonmessageboxbuttons) * [Palette usages](#palette-usages) * [Depreciation of `KryptonManager.Strings`](#depreciation-of-kryptonmanagerstrings) - * [V70.## (2022-11-08 - Build 2211 - November 2022)](#v70-2022-11-08---build-2211---november-2022) - * [Ribbon Tooltips](#ribbon-tooltips) - * [`dpiAware`](#dpiaware) - * [`KryptonTaskDialog`](#kryptontaskdialog) - * [`KryptonPalette`](#kryptonpalette) - * [`KryptonMessageBox`](#kryptonmessagebox) - * [Strong Named Assemblies](#strong-named-assemblies) - * [Management of `using` Statements](#management-of-using-statements) * [Known Issues & Workarounds](#known-issues--workarounds) * [Introduction](#introduction) * [What is this Repository About?](#what-is-this-repository-about) + * [Contributing to this project](#contributing-to-this-project) * [Individual Components](#individual-components) * [Krypton Toolkit](#krypton-toolkit) * [Krypton Ribbon](#krypton-ribbon) @@ -98,23 +97,27 @@ If you require the full API reference, you can download the latest version by cl API Reference +#### Contributing to the Standard Toolkit + +If you are interested in contributing to the Standard Toolkit, please read this [article](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Contributing/Contributing-Guidelines.html) first. + ======= ## Package Support Information -Full information about support can be found [here](https://github.com/Krypton-Suite/Documentation/blob/main/Documents/Development/Package-Support-Information.md) +Full information about support can be found [here](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Support/Package%20Support%20Information.html) ### Release Cadence -See [Krypton Toolkit release cadence](https://github.com/Krypton-Suite/Documentation/blob/main/Documents/Packages/Package-Version-Descriptions.md) +See [Krypton Toolkit release cadence](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Support/Package%20Version%20Descriptions.html) ### Package Descriptions -To find out more about the differences between `Nightly`, `Canary` and `Stable` packages, please read this [article](https://github.com/Krypton-Suite/Documentation/blob/main/Documents/Packages/Package-Version-Descriptions.md). +To find out more about the differences between `Nightly`, `Canary` and `Stable` packages, please read this [article](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Support/Package%20Version%20Descriptions.html). ### Installing Pre-Release Versions -To find out how to install either `Canary` or `Nightly` versions, please check out this [article](https://github.com/Krypton-Suite/Documentation/blob/main/Documents/Packages/How-to-Install-Pre-Release-Packages.md). +To find out how to install either `Canary` or `Nightly` versions, please check out this [article](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Support/How%20to%20Install%20Pre%20Release%20Packages.html). ======= @@ -166,17 +169,83 @@ Follow the links to see the different objects and layouts that this framework al # Version History - + ======= # Breaking Changes -## V80.## (2023-11-14 - Build 2311 - November 2023) -There are list of changes that have occurred during the development of the V80.## version +## V90.00 (2024-11-12 - Build 2411 - November 2024) +There are list of changes that have occurred during the development of the V90.00 version +- [#632](https://github.com/Krypton-Suite/Standard-Toolkit/issues/632), **[Breaking Change]** `KryptonPropertyGrid` should have a customisable back colour. + - `KryptonPropertyGrid` now uses the State### sets like the rest of the controls. + - Any build breaks in the designers can just be deleted, as the the colouring will be done by the `State####` equivalents +- [#1435](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1435), **Breaking Change** Take KMB back to the Winform override (Remove Checkbox etc) +- and [#1432](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1432), **Breaking Change placeholder** Copy `KryptonMessageBox` to `KryptonMessageBoxDep` + - The introduction of new Parameters elements to the `KryptonMessageBox` is now supported in the `KryptonMessageBoxDep` class + - This is so that the `KryptonMessageBox` gets back to being a drop in replacement for the WinForm `MessageBox` + - And a start of the introduction of the `KryptonMessageDialog` implementation of the UWP `MessageDialog` +- [#1424](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1424), **Breaking Change** `KryptonMessageBox` does not obey tab characters like `MessageBox` + - The optional `ContentAlignment` for a `KryptonMessageBox.Show` command is no longer possible. +- [#1356](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1356), AppButton colours don't change while switching themes + - See https://github.com/Krypton-Suite/Standard-Toolkit/issues/1356#issuecomment-2039412890 + - `RibbonAppButton` has become `RibbonFileAppButton` + - Addition `RibbonFileAppTab` to hold the tab text (Defaults to `File`) + - Colours for the `FileAppTab` have been moved into the `StateCommon` area +- [#1206](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1206), Remove the `Font Size` (as it is already covered by the actual font !) +- [#1224](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1224), Move `GlobalPaletteMode` into `GlobalPalette` and rename + - BaseFont is now part of the KryptonManager class, and will override the applied palette font(s) + - `CustomPalette` must be derived from the `KryptonCustomPaletteBase` class + - `BasePaletteMode` has been removed from `KryptonCustomPaletteBase` class +- [#124](https://github.com/Krypton-Suite/Standard-Toolkit/issues/124), When setting AllowFormChrome = false, then the Form Bar should still be Theme rendered + - `AllowFormChrome` has been removed and replaced with `UseThemeFormChromeBorderWidth` to better explain what it is doing + - It means that a theme can get closer to "Material Design", and that the Title bar can still be themed (And rounded) +- [#215](https://github.com/Krypton-Suite/Standard-Toolkit/issues/215), `KryptonTreeView` Multi Node Select + - Designer values named `State####Pressed` have changed to `State#####MultiSelect` to reflect usage + - New ReeView Designer value `MultiSelect` allows drawing of selected items and retrieval via `CheckedNodes` +- [#1268](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1268), Many Krypton Controls have a `CornerRoundingRadius` that overrides the State#### Node Rounding values. Please remove! + - `CornerRoundingRadius` overrides **ONLY** the `StateCommon.Border.Rounding` which is incorrect. + - All `CornerRoundingRadius` have been removed +- [#1269](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1269), Remove AllowFormIntegrate to give consistent experience on all supported OS's + - Please check the images in the issue. + - To fix: just remove `AllowFormIntegrate` from your deisgner files +- [#1266](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1266), Since V 5.400, the QAT button is supposed to perform the close, therefore the Close Form button should not be visible + - The RibbonAppButton has a new Designer field for setting the "Form Close Visible" to off by default + +### Support for .NET 6/7 +As of V90.00, support for .NET 6 and 7 has been removed due to their release cadences. + + +### `KryptonButton` Properties +Some properties previously found in the root such as, `ShowSplitOption`, `UseAsADialogButton`, `UseAsUACElevationButton` and `UACShieldIconSize` are now located in the `Values` section. + +### API Changes +If using `KryptonAboutToolkit`, please note that this has been superceded by `KryptonAboutBox`. Or if you use `KryptonThemeBrowserForm`, it has now been moved to `KryptonThemeBrowser` as the public facing API. + +### `KryptonInputBox` +The `KryptonInputBox` now uses the new `KryptonInputBoxData` API, to handle data. + +### Building the Toolkit +As of V90.00 support for longer path names **will** need to be enabled if you want to build the toolkit yourself. For more details on how to do this, please follow the instructions [here](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Contributing/Allowing-for-Longer-Path-and-File-Names.html). + +## V85.00 (2024-06-24 - Build 2406 - June 2024) +There are a list of changes that have occurred during the development of the V85.00 version + +* [#1302](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1302), **[Breaking Change]** Font being used by "Professional" theme is pants ! + - The Option to use `SystemDefault` no longer exists a font rendering hint +* [#1508](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1508), **[Breaking Change]** ButtonSpec does not open assigned context menu when clicked. + - Added property `ShowDrop`, which displays a drop down arrow on the button. + - When a `KryptonContextMenu` is connected the menu is shown when the button is clicked. + - When a WinForms `ContextMenuStrip` is connected the menu is shown when the button is clicked. + - When both type of the above ContextMenus are connected the `KryptonContextMenu` takes precedence. + - The ButtonSpec's `Type` property does not need setting to "Context" to display the menu. +* [#1424](https://github.com/Krypton-Suite/Standard-Toolkit/issues/1424), **[Breaking Change]** `KryptonMessageBox` does not obey tab characters like `MessageBox` + +## V80.00 (2023-11-14 - Build 2311 - November 2023) +There are list of changes that have occurred during the development of the V80.00 version ### Support for .NET Core 3.1 and .NET 5 -As of V80.##, support for .NET Core 3.1 and .NET 5 has been removed due to their release cadences. It is strongly advised that you migrate your application to .NET 8, as the latest LTS version, or the slightly older .NET 6, if you require a more supported version. If you do not make these mitigations, the packages **will** fail to install when upgrading, if your project is configured to use either .NET Core 3.1 and .NET 5. +As of V80.00, support for .NET Core 3.1 and .NET 5 has been removed due to their release cadences. It is strongly advised that you migrate your application to .NET 8, as the latest LTS version, or the slightly older .NET 6, if you require a more supported version. If you do not make these mitigations, the packages **will** fail to install when upgrading, if your project is configured to use either .NET Core 3.1 and .NET 5. ### KryptonMessageBoxButtons - https://github.com/Krypton-Suite/Standard-Toolkit/issues/728: @@ -189,33 +258,6 @@ Bring MessageBox States inline with latest .Net 6 by using a new `KryptonMessage ### Depreciation of `KryptonManager.Strings` In a effort to support translations, `KryptonManager.Strings` is now obsolete. As such, the new `KryptonLanguageManager` will handle such strings. -## V70.## (2022-11-08 - Build 2211 - November 2022) -There are list of changes that have occurred during the development of the V70.## version - -### Ribbon Tooltips -- https://github.com/Krypton-Suite/Standard-Toolkit/issues/382 -- https://github.com/Krypton-Suite/Standard-Toolkit/issues/511 -![][image_ref_tnqwpvc0]### Ribbon Tooltips - -### `dpiAware` -If you are getting scaling problems in high dpi monitors, then please add an application manifest to your MainForm application, and uncomment the section that covers the `dpiAware` setting. - -## `KryptonTaskDialog` -As of v70.xx, the `KryptonTaskDialog` now uses the built-in `KryptonMessageBoxIcon` instead of the standard `System.Windows.Forms.MessageBoxIcon`. This will cause errors within your project. To resolve, simply replace `MessageBoxIcon` with the `KryptonMessageBoxIcon` equivalent. - -## `KryptonPalette` -Both ***Font1*** & ***Font2*** have been removed from `Cargo`, as they were not used. - -## `KryptonMessageBox` -The standard `MessageBoxIcon` option has been removed in favour of the built-in `KryptonMessageBoxIcon`. In addition, the `MessageBoxDefaultButton` has also been removed in favour of the built-in `KryptonMessageBoxDefaultButton`. - -## Strong Named Assemblies -After updating to v70, you may need to sign your assemblies for a successful build. To find out how to do this, click [here](https://learn.microsoft.com/en-us/dotnet/standard/assembly/strong-named). - -## Management of `using` Statements - -As of version 60, all `using` statements are contained in one file per project unless otherwise. For details, please read this [article](https://github.com/Krypton-Suite/Documentation/blob/main/Documents/Development/How-to-Manage-Using-Statements.md). - ======= # Known Issues & Workarounds @@ -225,7 +267,7 @@ As of version 60, all `using` statements are contained in one file per project u - [#665](https://github.com/Krypton-Suite/Standard-Toolkit/issues/665) - Workaround add `net48` or `net481` to your `` if using .NET 6 or 7 -- .NET 6/7 Designer issues - If you are experiencing designer issues with your project, please refer to [this](https://github.com/Krypton-Suite/Documentation/blob/main/Documents/Development/Designer-Fix.md) for more information +- .NET 6/7 Designer issues - If you are experiencing designer issues with your project, please refer to [this](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Support/Designer%20Fix.html) for more information - ***URGENT:*** If anyone experiences "Double events" such as the one found [here](https://github.com/Krypton-Suite/Standard-Toolkit/issues/666), please can you report it ASAP, so that they can be investigated. Thanks! @@ -235,12 +277,17 @@ As of version 60, all `using` statements are contained in one file per project u The Krypton Suite contains user interface components designed to make it quick and easy for developers to create professional looking applications. It provides the essential building blocks needed to create a consistent look and feel across all your products. You can use the built-in palettes to achieve the same appearance as industry standard applications such as Microsoft Office `2007/2010/2013` & Microsoft 365, Visual Studio 2010. Alternatively you can create your own custom palettes to create a completely unique user interface. The Krypton Suite consists of five products called ***Krypton Toolkit***, ***Krypton Ribbon***, ***Krypton Navigator***, ***Krypton Workspace*** and ***Krypton Docking***. ## What is this Repository About? -- Modifications by Peter Wagner (aka Wagnerp) & Simon Coghlan (aka Smurf-IV) have been fixing and adding more capabilities to this toolkit. +- Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & +Ahmed-Abdelhameed have been fixing and adding more capabilities to this toolkit. - There is also an Extensions project, which takes these base controls and add more useful complete controls (Currently outside the scope of this help). To find out more, please head to this [link](https://github.com/Krypton-Suite/Extended-Toolkit) - All .Net Versions from 4.6.2 are catered for (interim releases, i.e. releases in-between Long Term Support (LTS) versions of .NET will **only** be supported for the duration of that particular version, usually 24 months.) - New versions of NuGet packages can be obtained via this [link](https://www.nuget.org/profiles/Krypton_Suite), or via your package manager by searching `Krypton.`. -- New, major versions are released annually, with patches if needed released throughout that period. Version 80 is expected to release in November 2023. -- For tips on how to build the toolkit for yourself, please read the following [article](https://github.com/Krypton-Suite/Documentation/blob/main/Documents/Development/How-to-Build.md). +- New, major versions are released annually, with patches if needed released throughout that period. Version 90 is expected to release in November 2024. +- For tips on how to build the toolkit for yourself, please read the following [article](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Contributing/How-to-Build.html). + +## Contributing to this project + +If you want to contribute to this project, please follow [these](https://krypton-suite.github.io/Standard-Toolkit-Online-Help/Source/Help/Output/articles/Contributing.html) guidelines. All contributions are welcome! ## Individual Components @@ -271,6 +318,4 @@ The Krypton Workspace allows a document area to be created that the user can cus ### Krypton Docking The Krypton Docking set of components allow the user to drag and drop docking pages into new locations in order to customise the organisation of the application content. It allows this in a way similar to that of Visual Studio 2008/2010. Each docking area uses an instance of the Krypton Workspace allowing a wide range of options for organising and displaying pages. It integrates with the Krypton Toolkit architecture to ensure a consistent look and feel. -
- -[image_ref_tnqwpvc0]: data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABQBvYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0Dxdf3Ol+E9SvbOXyriGLdG+0Ng5HY5FW01qxOqLpQmZ74RCV40jZhGp6F2A2pnBxuIz2rD8QyXuufDO6kGnXNve3VmG+x7S0iMcHbjGSR9PwqPwzbXfh3UrrRru3nuY7p2uoNUERYyk9UnYDCuvQE4BGAMEYrBq10em5aprY0Lbxt4euzEbe/MkcriITLbyeUrk4CM+3ajE/wsQeR6itGDWtPuLW9uY7geTZO8dyzIy+WyctkEA8DnPftWJ4H0zZ4E0+y1Kx2spdnguYcEHzWYEqw69CPwNZHiGzli8UyaNboxtvEwRpiOkflEecTz/FHtX602teVf1/WoczUeZ7f1/wDppfF2iQ/ZQ125ku4FuLeFLeRpJUPQqgUsT3IAyByRiqOv8AjO1sPCkmsabvuS0bNARaSugZTgiTaPkwcjDFeRjtVXUL210v4j28k0NwyjSGRBbWkk7L+9HaNWIHHXpUDaLqNx8PdehFq6XeoS3F1DasRuUO25VPOAxA6diaWlr+v52C8r8vX/gX/M6e116xubOa6Y3FtDAoaWS8tZbZVHrmVVyPpTdP8R6Zqdz9mt5ZlnMfmrHcW0kDOn95RIq7h7jOMj1FY2tTN4m8JzRWFnfCeFoJntrm1lt2kCOrlAZFUEkKRwSM4pZJG8Q+J9FurSzvYYNOEss811aPBy6bRGBIoLZzkkZA2jnkUNbgpOyNC18ZaDevbrb3zSLcOI45RBJ5W8/wGTbtV+Pukg9OORWffeLdRtpdbkt9Ht57PR3Andr0pK48tXJVPLI4DdCwzism30y8j+HGg2gsZ1uI7+2kkh8kh1AuAzMRjI45J/Go9U8LXepy+LLiJLtLr7XHNbRPJILe6CRRnY0ZOyRWIK5IP14p2Wvz/T/Ng3LS39b/AOSOi8Ra7HH4ehuINSudLN0iSx3i6a9ysakqcOApVcg4+Yjr7VJ4q1iTRYdJnF0sEMl/HFcyMBgxlWLZz06DpzWX4s1H7d4EMEWm6kt1eW6MltHp8ztGQykq21CFIweDjpU/iWddR0/Rb+Czvpbe21SKWVDYzCRVUMC3lFd5AJHRaLar1/VC5m0/T9GT6t4ogl8K65d6TcSR3tjau+2a3eKSNthKkpIoOD2JGDg1d0rxNpmoywWkdyzXMkRdS0Loku3G4o5UK+CedpNczrFld64vifVLSxulhm0c2VuksLRy3DjexIjYBgBuAGQM84q2VbXtR8PpZWd5BDpm6Wee4tJLcJmJkVFDqpYknPAwAvUZFHT+vP8Ar8Acnf8AryNz/hK9F+2C2+1tzL5Am8iTyPM/uedt8vdnjG7OeOvFJe+LNFsLu5tJrqRrm1AaeGG3kleNSu7cQikhcH73TtnNcl9nuZPACeDv7NvhqgVbVnNs/kjD5M3nEbCMDd1znjGa3LGxnj13xZK1vJidIVikMZHm4hwdp74Pp3pS0Tf9MqMm2l/SL994jAurSx0i3TUby7h+0RgTBIkhyB5jvgkA54wpJP4mpZdbXStMN54hWDTlWVYy6TGWLLEBTu2qQMnBJUY57c1yGi2F3oY0TUruxvmtZtDisLpYInaa2kXkEovz4OSMqCQQM461DNZ393oF/HFBq09sddtntUvFneQQgxFjiX5woIY8+9Vyrmt5/rb8tSOeVrvt+l/z0O3svEmlahLNFDcsjxRecwuIXhzH/fG9RuTj7wyPem2XijSNQu4ra3uZPMmUtAZbeSNJwOpjZlCyDHPyk8c9Ki8VaKdY8P6lDbQxfb5rR4IpCAGIPOzd1AJH0rJuZn8RXWgQ2mn39s1ldJdXL3No8IgVUYbAzgByS235CRjJzjFSrNlycl/X4G+3iDS10u41M3X+h28jRSyeW3ysrbCMYyfm44FQXvivRtPvZrKe6c3UCh5IIbeSV1UjO7aik7cdW6DgE81xd+L+DwfrWgx6PqM9/JfzSAR2zeX5TTbw4kxtb5SPlUls9uDjWi1S30zxx4lL2l5cTSQ2oRbazkl3YRvlLKpVck/xECi2l/66C53e39dTXvfEdx/aWmWejWlpffb7aS5SaW7MSbF2dCsb5zvFPsPFFvNp8lxqEf2KWG9+wSxhjKvnbgoCsByDuXBIHXnFcguiyaXJ4Vh1aDVPKttPuEmfTRcMY5GaMhC1v82Oo9Dip/7M1BPCc4hsbo2cGsRXdpC8X+kG3WRHZmX7zNnecN8575NVZX/r+a35f5k80t/6+G/5/wCR29zrNla3ctrI8rXEUAuGiigeRvLLbcgKCTz2HNYvhnxgmtxus9vdpP8AapokK6dcLHsR2C7nK7Q2AMgkc8YB4qPTJ7jUfH9xqC6dewWP9mrDFPcwNF5jCQk/KwDL16MAT1xjBK+FrhtLkvNHvLS+juDqFxJHJ9kkaF0dy6sJQpQcHHJByMVKWmv9alOTvptf9P8AMS18bwzeItRsZLa/+zwRwmIppV0ZMtu3bhs4HAwSBnnrWzqHiHTdMnFvcSzNOY/NMVvbSTuif3mWNWKj3OBwfSshp20XxvqV1dWl89rfWsAimtrSSdQyFwyt5asVPzA8gA/hTUnbw/4o1m6vLO/mh1ARSwTWtpJP9xNpjIQEqQeRnAO72NAJtN3Ne58T6LaQWc8t/GY70E2rRgv52BnC7Qcn0A5PQZNLF4gs7vTpryxS5uzFJ5TW8cDLMJOPlKOFKnkHLYGDknHNcrpOh31ld+FftNm4Mdxe3Eihdy23mBmVSRwMbsfXpWvpTPpeqeKLy6trpYHvY3jMdtJIZF8mNcqqglhnI4B6H0p2X9eqBSk/68maHhzW5Nds7qaW0FrJb3cts0Yl8wEocZzgVY1z/kDXH0H8xXO+BbraNTtpbTUIJJtRuLmP7RYTRK0bNkHcyAZPpnPtVu81e8u7jXNOm0i4trazWIw3rn5Ljdgnbx29iffFTNe78v0NsNL95G/836nOtq+sW+oWWnDSNPdrmN3ic37gbUxnd+54JyOBn61p3OsWlgYor3Iu3TeYLWJ7hgO5wi7tueNxAFUp4Jn8T6FOsUjQx2s4eQKSqkhMAntnBqN3bR/FV/e3Ntdy297BEIpbe3ebaU3AoQgJH3gQcY61irWR3ylJSlr1/wAjSfWtLTTob/7TG9vOQsJjUu0hP8KqoLMevAGeD6Utve2us2s62NzJE6nY5EWyWFvdJF4P+8tcvZ6deaZLpurXNpcGFbq6lkt4kMjwLMflO1ck47gAkbj6GtXT3I1jVtee3uorOWOGKNDbP5smzdl/LC7/AOLAyM8Z6YpuKJjVm2k/68yXw7c3tzpV4ZpRd3EF3PDG0wWPcFYhQxRcD6hfwpltq+sXGsXGnHSNPV7ZY3lcX7kbXzjb+55PB64qPwjdDZe27217DJJeTzr59nLEpRnyDuZQMnPTOatWMEyeMNYnaKRYZILcJIVIViN+QD3xkU7d+wKUmlZ9X+oXV8p8T2Nml/Lb43h7ZrBilyduRiUjA29eD7VZvdc0vT7xbO4mIumQSJBHC8juuSMqqgluhzjp1NZGtX6DxRpEgtdQeOzebznj0+d1XdHgYKoQ3Ppmm3WoW9n48E8sVy+7SwF8m0klYZkJ5CqSv44pJXt/XcHUa5teq/Rdy9eeIF8rS30qCC9/tGUxxmSUxKuFZjn5GIPykYxkGpbDWllOoR6jBDZS6ew88+cHiCldwYOQvGPUDFcxPpk8VrpMt7a3yRPqlxdSpaLKZIUdXK5MPzA8jOPXFPbSbu503WU0+2ujYPNBcQR3Sss07IwaQEv85BCgDfz6cYp8q/r5Ee1qX/T5M6qx1vTdQuPs8DyLMU8xUnt5IS6/3l3qNw9xnqPWsrWPEsCm1i02WVne/igeVLV2iKlwHUSFdmeo4Oc+9Jcl/EGtabLZ293BHZrK8s1xbPDguhUIA4BPJySOBt68ispPtjeHdC0lNKvRcWV1bi7LQMqR7HALBiMOD1yuRjkkU4xXMvVfmE6s+VpPo9fl+f8AkdjBqVjcpdvHKCtpI0c+5CuxlGTnI9CDnpWj4QuYb3RjdW7FoZZN6MVIyCBg4PNcL4gtpYfELafbq3l+IkWOUqeEMePMb8YzjjuBXfeF0WPTZEQAKspAA7DAqYpXT/rz/wCAXUnJ05xfS3/A/Dc26Kytf0f+2bOODytMk2Sb8ajY/ak6EcLvXB5659areH/D39iTTP5GiR+YoGdO0v7Kxx/ePmNuHtxWqPPbd9Eb1c5AniX7XbmaX9z9vm80Yj/498fu+nPXHTnnmujopW1uWpWVrBRRRTJM3V9Tm04WawWyTy3VwIFEkpjUEqxySFb+76VHZ6y76hc2F/bLa3MEQnJWXfG0Z/iDEA8EEEEDp3qDxJa3F3JpC25nQpfqzSwoGMY2P83IIA5HUd6kmsJtMsr++svMvtVeL5ZLggs2B8q4UAAD0AGT71N2rv8ArY2SjypdX/n/AJFq11mxu7oW0bypMVLqk0EkRcDqV3gbvwzSLrdg921sssjMsnlM6wuYw/8AdMmNuc8Yz1461ztqt5c+IdGnZ9VuUiWTzZLqzWFI2KdAAinr65Hoc5qV0uLHUgNFOoo8t3vuLOe2Jt8E/OwkIwvduHIzxjmi7uhunH8P66F6fxKkPiJbAw3JgEDuxWymZ94YDjC8rgnkAjpzWlcaraWsUDzPIDP/AKuNYXaRuMn5AN3HfjjvWdqJey8UWeoPBcSWxtZIGaCFpSjFlYZVQTg4POKq6tFOdds9USXUIrR7Vot9rbCSSNiQw3IyMwBHouQQM4ou7f15hyRbR0NneW9/bLcW0gkjYkZwQQRwQQeQR6HmnXFwlrA00iyMq9RFE0jfgqgk/lVDQrWC3tp5IZryX7RM0rtdxeU5YgA/LsXA49K1KroZNJSsYXh/xCNWtYzLFOs7vIvy2kqx4ViB8xG0HA9evHtVfRvE1vJbsl9dFrgXUkJYQnYn7wqisyjapxjqQTx61J4blaxtjpVzb3Udwk82GNu5jZS7MGDgbeQfX2rONjdDwTdwC1m89713EYjO4j7RnOOvTnPpUpvR+X+Rs4xu1br/AJ/gdHe6zY6fL5U8knmBPMZYoXlKL/ebYDtHucdD6VciljmiSWJ1eN1DK6nIYHoQa5ae3uLLxFqU8t1qkEN35bxPZ2qzqQqhSrfu3KkHnsOfXNb+j2kFhpFtbWzTNDGmEMy7Xx15GBg+2BTi2zOcFFJoszzw2sDz3EqRRIMs7nAUe5qtaaraXqM0TSqqrvJmgeLK+o3gZHuKq+JbW4utIxbRGZ4popjCCMyKjhivPsKjv5Tr2hahZ2cV1HJLbsoNxA8I3EcL8wGfwyKTb1CMU0r/APDFm217Tbu4jginbdLnymeJ0SXHXYzAK/r8pPHNRt4l0hXdftRPlymGVhC5WJ923DsBhee5IrNmd9XGj2sFldwPbXEc0zTQNGsIQHIDMMMSTj5Se56VVlsbn/hDtfhW0l86a7uGRBGdzgycEDqcii7v/XkWqcdL6bfqauoeIlstcs7HyZ2jkEnmlbOZzkAEbCFw3XnGfwrQm1W0t7SO5meRElIWNGhfzGPoI8bifbHTms7VxJb6to+oeRPLBB5scvkxNIyblGDtUEkZHYd6r63HNc3uk6pA9/HbRCRZDBb5lTdgBvLdCexB+XPPpmi7QoxjJR9DVOvaYLBr57oR26SCKRpEZTG+QMMpGV5I6gdc9KIdcsLjzhG8xeJBI0ZtpA5U8BlUrlhx1ANc/eacs2k3U1s2o3k1zeWzTfarUxsdrqMhdi8bRycdq2DDL/wmaz+U/k/2eU8zadu7zM4z0zjtQm/69Lg4RSItE8RrqZlSWG4WQXMkSFbOYLtViBuYrgHHXJHPYVek1qwju2tjLI0iELIUhdkjJ6BnAKr+JFZ2hytYXF9YXNvdJJJfSyxuLd2jdXO4HeAVHXHJFVNRSezvrmbRTqMV/NKrPatbF7ac9NxcjamR1IcdORmhPRDcIubS+X9djrKrXuoW2nxq9zIV3ttRVUu7n0VVBLH6CrIzjnrWHqySW+uabqZhmmt4ElikEKF2QvjDbVySOMcDvTZlBJvUuJrmmNavctexQxI/lubg+UUb+6wfBB9jWR4Z1YawsdzLrkclxJvc6fE0W1FyQOMb+BjnNW9Iikm1fVNT8mWGC5EaRLKhRn2AgsVPIznAyAePpUnhaGW38NWUU8TxSKp3I6lSPmPUGkr3NHyqLS8jYrnv+EnjHiCaxaC6+zpbq4K2M5feWYHgL93AGDjHXmuhrAunbT/FhvZbe5e2nsliEkEDy7XVycEICRkN1x2oe6/roTBJ3TQXGurZ+JhazzOLd7JZI4VhLOzlznCgFjwOR2xWidYsBp0d/wDaAbaQgIwUksScBQuNxbPbGappC7+Mjd+S/lHTlRZWQgZ8wnGT3xjisAadfJp2n3Gy8hW11G4klEMQaVVZnAcIyndjI6AnBJFCbS/ruXyRf4fkdZDfw6lbT/YZmEsfykPGUdGxkblYAj8RU9pP9ptY5e7Dkeh7isvRbaD7Xd3yXWozzSqiSNeW3k8LnGB5aZ6nnmrtv/o+oTQdFl/fJ/Jh+fP41vBKVNrqtf8AP/MxmkpaDl1K0fBWXIJxu2nAPoTjA/GlWV01B4ZGyjqHi4HGOCP61FpkGNMjimi7klXX3PY0/UVKxJcqPmt23/Vf4h+X8q2cKftHTj5r/InWxLLdwQyCN3IkIyFCkkj2AqSGaOeMSRNuU98VV2l9WjmVSY/s5w+OOvrS6cjpFMHVlJmcjIxkZqJ04KF1vp+NwuXKCQBk8AUVHPF59vJETjehXPpkYrmd7aFLcyrLV7zUlF1Z6fG2ns+ElkuNskijgsqbSMemWGfamapNd2mt6UYr2XyLq4MUluUQpgRseDt3ZyB3qDQLyXTtLttJvbK7W7tgIf3du7xyAdGEgG3BHqRjnNJr12v9saSFt72QWt0ZJmjs5XVVMbDIIUg8kdM0aaamyj7zSXR/loXfEN99j05gt9LYSNgi5SzadUwRnIAIGenOOtXL3UrPTLeOa+uUhjdggd+BuI/TpWT4ruRN4dnt4be7lluIwY1jtJWPUHnC/KfY4qHxBeQTWWkXHlz+WuoxZV7aQPwD0QruP4Cle34CULpadyzqWvRPoGqT6dM6XVrAXxJCyOhxlTtcA4/DFW7DW7G9kjt452adk3LuiZVkxjcUYgBsH+6TWFqltc6qmu3tta3Aik077NEskTI8zAsxIQgN3xyOe1WWR9Xv9IFrb3MMdiGeWaaB4dpKFQqhgCeTnjgY96Lv+vmNwjy/f+S/XQ1P+Eg0z7QIftJ5k8oS+U/lF/7vmY2Z7Yz1461Je6zZaezLcPKNi7nZIJJFQerFVIX8cVzPkzyeEIvDgsbpb4BIGYwN5a7WBMnmEbSMDI5z2xmrOqT6nJeajayNqUcQjCWsdnaq6zgr8xZ2RgDnIwSvA75pOTSGqUXKxuXet6bYvAlxdKGuFLQhVLmQDH3doOTyMAcntQmt6c9jLefaNsMT+W+9GV1f+6UI3buRgYycjFYOm2Vyl34VZ7aVRBp7pKWjI8ttqDDeh69a0NetPLaxvLe1LrDfJPcrDHl3G0ruwOWIyPU4HtVO6f8AXcnljoh2m6u9/wCI763RphaxW8TIk1u0RDEtk4ZQ3Ye1blc9pbT3PinUbxrS4ht3toUieWMrvwXycHkdeh56etaGm6jc3t1fRT6dNapbS+XHJIeJh/eHHT86E9F/XUmpH3nby/JGa6eJTdvtlxD/AGku3iP/AI9dvPv1/GujlnuooUEEIdSzZO0n0oolgupYUMEwRQzZG4j0qoprRGVWSa96xB9s1H/n1H/fB/xo+2aj/wA+o/74P+NH2PUf+fof99n/AAo+x6j/AM/Q/wC+z/hV+95mP7r+7+IfbNR/59R/3wf8a1T1NZX2PUf+fof99n/CtU9TVwv1Oevy6ctvkJXPeNf+Ram/30/nXQ1z3jX/AJFqb/fT+dWc5paN/wAgLT/+vaP/ANBFXqo6N/yAtP8A+vaP/wBBFXqQg71sVj962KQwooooAKKKKAMiTWnTWbWx+xSLHOzoJpG25KjJwuMke5x7ZFOuNTuxrB060tIZWWATM8twYxgsRjhG9Kz9VugfEWlyrb3rR2rS+a6WcrAZXAwQvPPpmrmqjSZjuvNLe7lMXykWDyNg9Bu2/KfYkY9q0stHY5+d3kubZl6WTURDEYrW1aQj94r3LKFPsfLOfyFVdM1OfUHvo5baOIW0nlb4pjIrtjJAyq9OKqwnU9K8IojRSz6gFKIi5kKlj8oJGc7QRk9OK0dN09NM0qK0U7ii/O/d2PLH8TmhpJMqLk2vTX+v62PnrwZ/yOmj/wDX0n86+iLr/Wj/AHa+d/Bn/I6aP/19J/Ovoi6/1o/3a8vCfw36nJl3wP1IKKKK6D0Armtd8VrpGt6ZYCC5dZ52SdlsZ5Pl8tmHllVwxyBkDdgZ4GOOlrnPFMc0V5oWpJbTzw2V6XnWCMyOqNG6bgq5JwWGQATiuvBRpyq8tRXun5a2dvx28xSvZ2Idc8SrZDQrtLiS1srm+MVx9ot2iYoI5Dja6hgSyjGBk8Yzmti01ywvra5nt2nYWpxNE1tKsqHAbHllQ+SCCOOe1ZGsE6td+Gbq2tbl4Y9SMj+ZbSRmMCKQbmVlBUZxgkDqPUVJZiSx8UeJL6eC4Fu0dsUdIHffhGztCgliPQZrpnRoyorRqSV+n89rPS97P8Nibvm/rzLPhq9a+tr2VtUkvwLyRV8yyNs0A4xEVYAnbnqRzmp4PEWmXN6bSGaV2Ehi80W8nklx1US7dhOeMbuvHWsfwheKbvV4XtdQha41CW4iM9hNErRkLg7mQAdDwTn2qlbx3Wm6xbw6A2rrDLelrvTryzb7PEjf6xkmZQBg5YBXYEngYNVPCQlWqJ3VldbJbdbK34Jd2hczSv5s7mueudWnt/HMNjJcLHp/9ly3MisFADLIo3FjyAAT3xVjUtZvbLxDpOnQaNc3VtemTzr2M/Ja7RkbuO/Tkj2z0rlvG3hnUPEPimAWjSRpHprkF0Jt53EyMIZjjlWxyAQfqOK8lbr5/kzW2jXp+aOlbxloEekwarNf+RYTzCGK4nheNHYgkEFlHykA4b7p9aT/AITPQha3VxJdTQpa7DOs9pNE6BzhWKMgbaT/ABYxweeKwdWnu/EOleGZho17azW+tW5urWS3b9xsDbjnGCg4w446V1mpaLYaraXkFxbRE3lubaWUIN5Q543dcAkke9Nqyb8/0Qluv66skudUsrS+srKabbcXpYW6BSd+1dzdBwAO5xWVb+OPDt3LClvqBkEsohWVYJPKEhOBG0m3ark/wsQeRxyM4fgU3er30uoaijebpEP9kRs38ciN++kHs2Ix/wABNYujudX+Hll4f0+yvGu5bzc8ps5EhiVbku0nmsoRsAdFJJJ+uHZXt/X9W1Dp/X9b6HU3XjeK18YrpLW18bUWskjsml3TyeYrqo27UO5ME/MAR05rZvPEWm2CWxnkn8y5XfFbx2ssk7LjJPlKpcAcZJHGQDisjWHk0vxzp+ry2l5NYtYS2ryWts85jcujLlUBbBAPOMZHvTJ5zpvjM67NaX82n32nRwRvBZyyvC6uzbWjVS67gw5K8FcHBxSWy+f6/wDAB7v5foa0nizQodKttTl1KJLK5l8mOVgQN+D8rcZVvlIIbBBGOvFVrrxjp6aDq+pWayzS6ZC0strPFJbScLuGVkUMAR0bBHX0rmF0a+kSyvH0+dUvPE41AW7RZaCLYQGcD7ucBjnoWwean8S6dfT3Xjgw2VxILnRIYoCkTHzXAmyq4HzHkcD1FFvdv/Wyf/AGrc1v63a/LU3LLxNf/wBu2Ol6tpcFs+oQPNbS2t2Z1OwAsr7o0KnBGOop9nqv2zxpcW0eq3AjitDnTJtNeL5g+DMsrqNw7YGR3rHsNFm8PeMtNu4oL28sr+z+zPJO0ly9lIvzDDuWZI35BGcZAp/9rRH4kLefYtX+zf2cbTzf7KudvmeaDjPl9Mc7unvVWXMkvP8AX/gEXfK36fp/wf8AhidfGEGneJ/EFnql1KYbVomgihtXlaNPKDOxEaltuTyzcDIGak1XxTHYeKNGX7aDpd5ZTyhYY/NMzhotmwKCzHDHAXrn2qot0dF8WeKJptL1Cd70QG2+z2MsizbYtu3zFUqvzZHzMMdelZ2n6bceFrzwg2oWd1KllplxBK9payXIilYxkL+7ViBgMAcY4qY20/ro/wCvUt/1+B2aeJtHfR21X7aq2aOY2Z0ZXDg42FCA2/PG3GSccc0238UaRc297MtxLH9hjMtzHcW0kMsaYzuMbqHxgHBAwcHHSuN/sjUAx8RHT7kQNrw1I2SoTN5Hk+UH8vrvz8+z72OMZ4qzq0Fxr97rWrWVjepbpoU9innWrxSXMr5bCxuofC464wS3GcGk9Ff+tr/noNJN2/re35anT2Pi3RNSvIbW0vGke4UtA5gkWKYAZPlyFQjkdwpJGD6Gqln4j1LWPMutG0eG40tJGRbm4vPKefaSGMSBGBHHBZkyfQc1n3Gm3B/4QaNLSYR2zEThYyBCPsrr8393kgc9656eC90v4fyeHWtdei1vT0kjsZdOS68ufJOx/Mh+XBBGRIRg5yO5txSlZERd0r9TvL3xXo2n6i2m3FzIb9Y1kNrDbyTSlWzghUUlh8pyRnHGcZFOfxToyadaX4vPNhvP+PZYInlkm9QsaguSOcgDjBzjFZml2dzH8RtXu5beUQvptrGszIdrMGk3AN0JGRn6io9Ss00PxZpmrRafK2mx2s9s6WNs0hgd3V9/lxgkhtpBIB5xnrU6af13/Ma/r8DYTxRo8mm/2gt5/o4uFtm3ROHSUsECMhG5WyRwQMZz0qxc6zp9pdy2s9xsmitmu3XYxxEpwWyBjr26+1cJqOl6he2Gv6xBYXSxXWpWdzDbGIrM8UBj3v5eNwZgpwpG7AHGTiptRuLjVNf1fUE02/g09fD00Mdxc27RCR92SNrAMv8AwIAnBIGOaUtFf1/9Jv8AnoNK7+787fkdRYeMNC1S6t7ezvjK1yCYJPJkEU2BkhJCuxmAzlQSRg5HBrG/4TbUU0661eTRLb+yba8e2kkS/JnAWUxlxGYgp55xv6Vn6W513S/Blnp1leImnmC5uJ5rOSCONUhK4UuqhyxbA25GMk8dcVdLY6RqNvBYa8fEH9p3E1nG8Nz9k3eezRuRIPs+3GDk89x82K0cUpW/rdf8ElO8b/11/wCAeqRalaTalcafHLm6t40llj2n5VfO05xg52np6VzXiDx3a2GhWeo6as1yt1NCI3FjO8ZjaUI3Krw2M4BOScYB7slnudF8a6nez6dfXS31hbR25tLZpFeVDJuQsOI/vry5UYPXg1lx6XqQ+D+nQHT7j7daSQ3EloE/ekRzh2UDucA4HftUJK6fS6/PUfl/Wx1N54ptIdEudRit9R/dhlVZNLuQ24KSMoUDbfVsY96b4X8URa/pNnNJDdRXMlqk0xexnhhBIGdruoUjJ4wx49ati8i17RrxLSO6jLxvEBdWktuclfSRVJHPUcVzujtNqnw//wCEcFtf2OqJpZtX+0WcsaI4TZxIVCMM9NrHI5pbKWnb9Rqza/rsblp4t0S+vIbaC7ctOxWCVreRIZyOojlZQkh4P3WOcEiop/G3h+2muIpL5i1tKYrkpbyutuwOP3jKpEY54ZiAecHg1z8zTa5pGg6JbaVqFpdWlzbSXBntHjjtlhILYkYBHzjaNhOc56Zps+mXn/CF+PIVsZ/tF3dXbQoITumBjUKVGMtnGBiqaSb+f6f5v7hLW3nb5b/5G/4n8UyeH7fzodLmu0UxeZKX8uJQ7hBhiDubnOADwOSMjPR1wnju4ZvCEelxWWoz3jfZpAlvYTyjCyIWyyoVBAU8E5rprjWSPD1zqthYXl08UTvHavBJBLKy/wAIV1DDP0+maT0T9QV3bzMHxIbtfF2nmyt7e4n8g4juJjEh+9nLBWP6VH4f1fU9aeSSbRtPtrWG4lt5HS9aR9yEqSFMKggkf3hx+VAvZ9S1/Qb25spbGeey8yS2l+9ESGJU8DkfQfQVFoGnXR8Pa1aOkltNcXt55bSKVOHdtrD25yDXNtKd1t/wBKzXz/zL0PibQbi7jt4rgHzpDFFMbdxDK/8AdSUrsY8HgMehpb3xHoen3MtvcTHdDjz2jtpJEgz08x1UrHxz8xHHPSuZKXGo+E9J8NRaXfW9/bvbJMZLZ1igELqWcSkbH+7xtJJyPfFmCSXRbXXdLuNMv7q5u7qea3MNq8kdwJfugyAFEx907yMYz0q3FK9vP57Al3/4bcv+L5Lmz0qHU9O1CSALNAnlxxxPHKryqpJ3IT0JxtIrU1me+sbVriw06yuUjRnlE9y0JAAz8uI3z364rldchl0vwHpmgvBfXd9AlpuNtZTTKRHIhb5kUgYCngnP511txcLqXh66lto7jEkEioksDxOTgjGxwG/TmlNcsXbo2OOrVylouqXd/pCarf6Xa21rLbrcRi1me5kIIzgoIlOcdl3Zo8MXC39rezNqLagBeSKvm2BtWtxxiIqwBJXPUjJzUmgM2m+C9LN1DOjQWMQkjWF3kUhACNigsT7AZrL8HXqm51iF7TUIWuNQmuYjcWE8StGQuDudAAeOhOfaqmkpSS6f5kK/Kn/WxetfF3hu9kt1trtZFncRxyi3k8reeiGTbtV/9kkHpxyKfo+u2+pWepS3FqlpJp1zLBcRlg23ZyGzgcFcHp3rjdEf+1/AOj6HYWd2bg3EUkkrWkkcMapNvZ/MZQrHjgKSST9au+KdN1NfEdxZ6fZ3Eln4ihigupokJW3KNh2Y/wAOYiQPcChwV+Ven5a/mW7L5HQ2PiS0n0Kw1K8spYHvU8yO3ggkuZAnZiI0Jxgrk4wCQM1b8y113RFutK1B4Y5BuS4t40LcdVIkRgDnggjIxjg1la/d6laazZWkL6jZaR9mY/aNNshcyGUEARkbH2Lt5zt59Riq3hSSXRfCt02pWuppJJf3JCNZtJMdzsQzLCpHPqo2+napkk02v61Ela1zQ8Pash8B2et6xKpxaefcz+UOgySdqj9AK15L7T4rqztnZBNehjbr5Z+faNx7cceuK43S4bjUfhNPokNnex6immtCYbm1kgy5U4ALqA34E1YS6uNW8S+GXt9L1KO1tY5hPcXFq8IRzFgLhwD/AMCxt7Ak1Uormf8AXcXRf12N0+I9DW/+xmb5/O8jzfs7+T5v9zzduzdnjG7OeOvFSX2uaTp159kn8x7gIJGS3tJJzGp6F/LU7QcHlsdD6VxGm6M66Mvh7WdR8SRMsxV4YNOWSB/3m5XEywNwTg5L5BznFbPiaD7NqdxfaZPrdlrD24jVrSya5guccoHGxkGDkZJQjJ5xg0uVaDtq0diqQuiuixsrDIIAIIrI1/U5NJ/s+O00+C6nvboWyLLN5SqSrNksEY/w+nek1LVtU0rwkNSOjyX2ppFGZLG1PJc4DBSAxwMnpnpVHxTJMR4cvjZ3bJDfpNOkMDzPEvlODlUBPBIHApcuvzEtr+T/ACLVhre7VZ9K1awhsb2KH7SpSXzYZYuhZXKqcqeCCoxkdRU9h4g0XU7pLa1kJkkQvF5ls8azKOrRsygSDkHKk8EHpXLa5pOo+LrvUr2ytri1gTSZbK0e5QwvcSOQW+RgGVRtAywGc8cc1b0m1h1DUdKa7v8AxI1xZEyR295pqwxRvsKkGRIFU4BI4fB7ZqlFNa/1v/wBvy/rY3hr+jNqD2Ss7yJL5LyJayNCsnHyGULsDZIGC2cnHWpNQ1nStMuY7W4LNcyKXWC3tnnk2jjcUjVmC54yRjNcvcR3Wm6yR4cfWI5574SXOn3Fkz2jhj+8cTFcJkZf5ZMZ425OK0TNJoXjLVLy8s72W0v4YfJuLa2kuNhjBDRssYLL97cCRg5PNLlVkDWrNO/8QaHpgtDeXMcf2xSbYeUzGXAHCgAktyML1JOACaWHW9KutPuLu3EzrA/lyxrZSmaNuODFt355B+7056VnapBPeeMfCt4lpP5Ma3TSM0Z/dboxjcRwpPSty4ks9KjnvTbODIwMrW1q0skh6AlY1LNgYGccCk0rf13AzPD13C3hZL+61MakiCR5LxrL7OSFZs5jxkbcY6ZOKfY+J9A1G5ggtLkSG4BMEn2dxHNgZISQrtZgOqgkjB44Nc/oNxj4falYy2t9b3EcN3Iy3NlLCNrM5GGdQDwRwDmm6Y51rTPCFpYWd2iWBhuJ55bSSGNFSIrhS6jeWLYG3Ixk9Otcqbfy/G/+QPRff+H+ZftPGVpN4i1Gxksr37PBHCYimkXJky27duGzgcDBIGeetXfEN/Fb3em2seoS6dJJdRbnGmPNHOpOPKL7dqFj3zkVWM7aL431K6urS+e1vraDypra0knXchcMreWrFT8wPOAfwpnjW9BXTraO01CaSK/trh/IsJ5VEavkncqEZAHTOfakkrx9QfX0/Q39S1HTdJjje8YKZW2RRxxNJJIfRUUFmOOeAcDmqv8AwkegjSpdTe6jjtIZRDM0sTI0LkgbXVgGQ5I+8Bwc9OaztSlZfEWj+IVtb2awW2mt3VLWUyws5Uq5i278HYVPy5GR2rE1TTbvUrLXtRisLkQ6heWQht3gIkdI3QNIyEblB54YA4XJojFPf+tbf8ENDWvdb0zUtX0u3s3cTR3CSFJLd4iyFsBl3qNy5B+ZcivQq818RQTf8LH0G4ET+QIdhk2nbu81TjPTOO1elUqVrths2FFcVd+BPtV7PcfY/CDebIz5m8OeY5yc/M3njcfU4Ga7KJPLhSPCDaoGEXavHoOw9q26De5n6wNVMmnf2Y21ftafauFP7nB3fe98dOaNCXVF09xq77rnz5Np+X/V7js+7x0x71p0Uki3P3eWy/Xr/n+QUUUUyDmG8TX62moX66TE9jYzyxSlbs+aVjbDMEKBegzjdWtNrljBBDMzTss0YlUQ20kpCkcEhFJUfX3rC0rw/LeQapFfXN/FaTahcM1nhUSVC5IOdu/afZsEe1T6ncahDrX2VG1C109LdfIOn2iymWTOCrFkYIAAMZ2jnk1Cb5Vfrb8jslTpynyx6X77fjqbEutadFp0N+blWt5yohaNS5kJ6BVUEsfYDPB9KhuNdtY9KmvYluG2ZXZ9klLq2Mjcm3co6HJAGCPUVz2naag8FadFqMGp280E7yJJbxEzwPvbB2qDnIOPukc+nNa2jHVL3StQivnllRndLWeeDyZJIyOrJgYIOR0GQM45obdnYTpU469nb8emn9difw/ryazp1pI8U6XElussmbSWOPJAztZhtIyeME1NB4h0u5ukt4rhi0jFI3MTiORh1CSEbWPB4BPQ+lZmhSST+FotGaG8tL6Ky8hvNtpEVWC7chyu088jBPFZmk2Als9L0/ULrXYprR4z9mNkohWSPp+9WHBXjrv5B61TfvaA6MLyb0t/V9tv6udzXP6v4lXTNa0+yEM7LNIyzEWcz8BCw2FVwxzjOM456V0FYHiJJY7/AEXUFgmmhtLljMIYzIyq0bLu2jJIBI6A0MyoqLlaSvo/vtoR6x4gWzfRrlZpLezuLlkm86BkZlCOQNrLuB3AYwMnjHWtW21iwura4uEn2R25In89GiMXGfmDgEcHPNZeqZ1K/wDD1zb29w0KXjO/mW7oUAjcZZWAK845I9KzdW0m/vm8UR28UoaZrVojgAShACwUtwehHpnrUttX/rsbKnTkop6f/tW187HR2OuWGozmC3kkEuwSBJoJIiyf3lDqNw9xnqPWtGuY0yGC91e1u5L7W5ri2jfy0vbHyEUMAGBIhQE8DjJ6V09WjCrBRlZf1+C/Iz7vW7Cyuvssskj3G3eY4IHmZF9WCA7R7nFLd6zY2RhWWVneYbo44Inmdl/vBUBOPfGKybWZ9G13V/tlpdul5Ms8E8Fu8wYbFXYdgO0gjvjg06Zn07xVJqdxa3T211ZxxK0MDTGJlZiVZUBIzu69ODUp6I09lG/Xb79tv6ZoP4i0mKwt7576Nba4fy45CDgvgnaeODweDjnjrRFr9hNDPJGbljbsFli+yS+apPI/d7d+D64xXNJpd2Vsbh7OVVuNeN75JTJhjKsAWA+7ngnPQt61uWNvMvjDWJ2ikWGS3t1SQqdrEb8gHvjI/OhNtf12THOlTinbW3n52GeG/EY1rT7Z5oZ0uZAxbbZyrFwT0dht6D1q3/wkOl/bBa/aG3GXyRJ5T+V5n9zzMbN3bGc5461n+FZWtNLi0e5t7uG7gMiEtbP5ZG4kMJMbOQfWsTTtLZdJi0TVb3XY2SQK8UVkHhYh9wYSrCeCcHJbI5zihN6FujTc5dEn+Guu239XOoufE2k2k9zBLcuZbb/XrHBI5iGA25tqnC4P3jx78VW1rxNHps+mpCksq3Nwiu62ssimNlY5RlGC3A4GTjPFV4bOdZfFrG2kBuG/dHYf3g8gD5fXnI471FdW1zF4a8NzfZZ3axlt5Z4kjJkVQhU/L1JG7oBnild/l+Io06Skuvz629O501pdx3kAmiWZVJxiaF4m/wC+XAP6UUWl3HeQCaJZlUnGJoXib/vlwD+lFWcjVnYqUVgeNrie08F6rPbTSQzJDlJI2KspyOhHIqxba9BdavJpltBcXDW6j7TcIF8qFiMhGYkEtjsoOMjOKD1nJJ2Nesy00SK21SbUprq5vLt1MaPcFf3MZOdiBVUAZxknJOBknArItPHtheWcF/Hp2prp0sqwteSRIscbltoBBbcRnA3KGXnrwcaUXiWxkstWupFmhXSpJI7lZQNw2LuyME5BBBH1p6rX+v61FdN2/r+tC0dKgOujV98n2gWxttuRs2lt2cYznI9avVzsni+3S6srNNM1KW+vLQXcVskSbwhOCGJYKpGeckDsCTgVn+IPF048FXWq6PZ3nmqrqzlYgbSRG2sJFduTnI+UN+WKLPb+t/8AMXNHf+tv8jsqKx118QabcX2qafeabBAoJa4MTl88fKInck5wMdTkYptn4kjuNRisLvTr7TrieMyW63Yj/fAfe2lHYAgYJDYPPTrgsPmVrm1RXL2fjqwvYLO7jsNRSwuphbreSRosayk7QpG7d97jcFK5PXrihqfiTXLf/hJLuCfS47PRpABDPbvvmHlo5HmCQBSd2B8p7UW/r+vUOZdP6/qx29Fcp4o1TPhWK4nt9atreZI5ZZ9NmijltuVOCWYHknB2g8ZqTxlqMmlwaLOs1wiHU4kkEO4tIpV/lwvLZOOO5xRbWz72Fzqza7XOnorj9c8Sm48MeIoY4b3TNTs7F5fLmZVkVSp2yK0bMMZBGQcgjtV/TPFEFxPYWc9pe25u4ibW4uFUJcFQCdvzFgcZI3BcgEiiw+dHQ0Vzh8Z2SoLo2d9/ZRl8r+09ieRnO3ON2/bu43bNvfOOaddeLreDUdQsLfTdRvbmwVXuFt40wqMu4MGd1B9MZ3egI5pD5kdDRXNTeJJtSvbGw8Pm3eS6tRetdXKsY4oSQFOwEFmbnAyuMZJ7Gxfa1L4b0f7ZrrJOBOkQksYGGd7AA+WWYjBPQFiccDnFO3f+uguZf195u0Vgw+K7Tz7iG/tLvTGhtjeZvFQB4QcFhsZsY4yDhuRxRbeKYJry0gudOv7Fb0kWk10iBJjjOPlYspIyQHCng9+KLMOZG9VG20qC11a+1FHkM16IxIrEbRsBAxx7+pqi3iqxTQLzWTFcfZ7WZ4XXau8sknlnAzjGffpUd14sgg1a80y303Ub68tEWWVLaNMBGGQdzMq9sYzuPYHBIQXR0FFcrceIb3UdT0a30K5s47bUbOW68+5tXlOFKYAUOmPvnOfSnaf4rYaQ9zqcSu8epf2d5loP3crFwgdQx4XJ5GTjB60+V/162/MXOv69L/kdRRWXc63HDqkumxWlzc3cdqLoJFsG9SxXALMBnI74HvWN4S8RarqlvKLzSb9v9MuI/tJNuEjVZGCqQsm4kABchTz3PWhK5Tkk7f13OtorjbLxPq8virVbR9B1OSCGKAxwBrUNEW3ZYnzRkHA7np0FbN74hS2v5LG106+1G6hjEk8doqfuVP3dxd1GTg4AJPHTpRYSkmbNFc9L4z0xYNLlgS6u/wC0y62qQRZZnUZKkEjaeo5wBg5IHNT2uvPqNldtZadP9vtZvIls7l0jKOcH5mUsu3awbK7uOgJ4osw5kbVZ+uf8ga4+g/8AQhVLwrq97rFjevfLAJra+mtv3ClVIRsA8knNXdc/5A1x9B/MVM/h+Rth3erH1/U5yK9kWFFFrIQFAyO/6U/7dJ/z6Sfr/hWHJd6/Bq2n6dHe6Zsu4pJFZrGQlAgXAP77n73Xjp0rTn1k2twtittPqF+sQkmS0RVCg8bjvcAZIOBuJ/nWHK7bnqOtDmacdiz9uk/59JP1/wAKPt0n/PpJ+v8AhVP/AISaxewtrm3Se4kunMUNtGmJWdc7lIYgLtwckkAY69KltNQt9aS7s3iurW4hws8Dv5cqA8gho26EdCrUcsgVak9l+JP9uk/59JP1/wAKPt0n/PpJ+v8AhWX4XNw+k30a3MjyRXtxFE9y7TFQGIUElskD6/jUdpd+IJ9fvNOe90zZapFIzrYSAuH3cD99xjb1560+V9yfbwsnyfibH26T/n0k/X/CqexRrB1T7NceebcW+3Py7d27PTOcn1qG9ugfFmmwSrqsB/eCExyxi2n+TJ3qGLHHbIHNWL7xBDZ6sulpZ3d1ePD56RwIvK5IPzMwAxjuR2xk8Ucr0sxurTd7x29fItfbpP8An0k/X/Cj7dJ/z6Sfr/hWLqHi2NNN0+4tDFb/AGy4Nu018MJasudwkAI5ypAG4AnvitXz9StLCR7iFb+YH5fsSCPcPXbI+Bj/AHjmk4tK7YKtTbsokv26T/n0k/X/AAo+3Sf8+kn6/wCFZHhfXNQ1HQ7We8028Z2hLtckwhZCOwCvnJ91FXB4lsm0K01ZEneK6dI4olUeYXZtu3GcZBznnsabhJO1xRr0nHm5fPqRQW/lanJqEy3l1cFSkZm24hQnJVAqgenJyTgc1raVqbafbyRvaTOWkL5A9h/hWHrEbW/ibQ54bi6Q3Fy0csYuZPLZRE5A8vdt6gHpWnf6vHY3MNrHbXF3dzKXSC3C7to6sSzKoHIHJ78UWejuJzptSi46erOi0/V1v7h4RA8bIu47q0a5PwpqMOqX91cQrImF2PHIuHjdSAysPUH8PTIrp7m5gs7eS4up44IIxueWVwqqPUk8CtYt21OHERhGfubWRLUc8ogt5JiCRGhYgd8DNZ1p4n0C/uktbPXNMubh87IobuN3bAzwAcnirmo/8gy6/wCuLfyNU7pGVO0pJGYPEasMrZTkHuKX/hIh/wA+M/5VxUPiS6T7fYwwRS3qXC29lEMjeTGrln5+6u4kkY4wOprTvNeGlXFjYXcM91f3UbMgs4fldlxkYLfL97qTgY5IrFObS13/AMrnfKOHTa5dvN97HRf8JEP+fGf8qP8AhIh/z4z/AJVzaeKbRvKEttdQu959ikSRVzDKRkBiGIwRjBUnqKnvNftbO5voHinc2Vp9qmZFBULzheT947ScfrRefcFHDv7P4s3f+EiH/PjP+VH/AAkQ/wCfGf8AKuctPE9vdz2qCyvYo7xSbWaaNVWcgbsAbtwOMkbgM44qhp3iDU59e1S3k0fUHiiaIJHutwYcpk7j5nOevBP9Kfv7XJ/2bS0b39Tsv+EiH/PjP+VH/CRD/nxn/KsG715ILua2trC8vpLdQ04tlTEWRkAl2XJI5wuT+YzDL4qsF/s/7OlxdnUY2e1EEeS+3GQckbTz3wBg5IpXmU44dbr8WdJ/wkQ/58Z/yo/4SIf8+M/5Vk6XqkWqwyukUsMkMrQzQzAB43HY4JB4IOQSOatTiZoHFvJHHMR8jyIXUH3AIz+YobkupSp0GrqP4suf8JEP+fGf8qP+EiH/AD4z/lXJ6Zea9d6xf2s15pvlWMqI5SycNIGUMcEzHaecdDU8/iq1hWacWl5JYW8hjmvkRfKQg4bgtvYA9SqkdeeDT97uRaha7jb5nS/8JEP+fGf8qP8AhIh/z4z/AJVg3Wuxw3bWtpZ3WoTxxiSVbUJiNT93JdlGTzgAk8dKpa3c22r+DrrU7O5uVEdvJLC8M8kLKwU/eCkHgjofSk3JK9x8lBuyjr6s6v8A4SIf8+M/5Uf8JEP+fGf8q5PXbq4h8GwTxTypMTbZkVyGOXQHn3ya0rXWYb3UrmztYJ5ltvlluVC+UH/uAk5LDvgEDuQab5lfUSVB293e3V9b/wCRtf8ACRD/AJ8Z/wAqP+EiH/PjP+Vcxolytxrer7l1SG4HlGS2vJY2jiBU48sIzAZxk89aqQeIdUbxPf2p0bUJIIoIWSBWtgUJL5YnzBkHA7np0Hc97uK1C1+Xrbqdl/wkQ/58Z/yo/wCEiH/PjP8AlVccjOMe1ZOt6pPpsulpCsbC7vUt5N4JwpDHIwevFJOTdrlyp0IrmcfxZvf8JEP+fGf8qP8AhIh/z4z/AJVUmk8mF5CjvtGdqLlj7AVlQa4txdy2E1nd2N4IDMkdxsO9OhKlGYcHGRnPIpc0rbj9nQTScfxZ0H/CRD/nxn/Kj/hIh/z4z/lXD+GvE6/2Bo/22G+ZZ1SE38oBjaUjoSW3nJ43YxnvWtd+JLe1luglneXMNmQLqeBFKQ8ZOcsGbAOTtDY+vFW1NO1zOH1eUVLl/FnRf8JEP+fGf8qP+EiH/PjP+Vcl4twdFi1K2urlJElh8t4LmRFZWkUHKqwVsg9was+I9bfR0skRreFrufyftN1nyYeCSW5GemAMjJPWl73cbVBXvHRK+7Ok/wCEiH/PjP8AlR/wkQ/58Z/yrF8/UrSwke4hW/mB+X7Egj3D12yPgY/3jmszwzruoX+gW1xeaZeu5gMjXGYAspGeFCvnJ7ZUfhSvKzd9h8tC6jyb+p1v/CRD/nxn/Kj/AISIf8+M/wCVc/8A8JHZHRrHU0SaSK9eOOGNVG8s5xgjOOOc88YNVNVjNt4q0SWK4ul+0zSJNH9pkMbARMR8mdo5APAp+/ezYmqFrqN9ur6nV/8ACRD/AJ8Z/wAqP+EiH/PjP+VY1/q8dldRWkdtcXl3IpkEFuF3BBwWJdlUDJA5OT271NpuowapZrcwb1G4o6SLho2BwysOxBpXla9yuShfl5fxZp/8JEP+fGf8qadfRmVjp8xZfukjkVla3qX9j6Jeaj5LTfZ4i/lqcZx79h6n0qDRrjULqCO6nvtNvLaVMq9nGyhT6Al2DDqM/L0/JqU97g4UFLl5fxN7/hIh/wA+M/5Uh8QqQQbCcg9QRWAPEdmdEi1by5/IkmEIXaN24yeX0zjGffpUVx4ogivr6zh0+/u5rEBpxBGuFUruByzAH6D5uDxRefcXLh/5fxf9dDpF8QIihV0+ZVAwABgCl/4SIf8APjP+VYMviC1EdkbSKe+lvY/Ngitwu5kwCWJYqFHI6kdcVDN4q0+30kahLHcqguBbSRCLMkUhONpUHnHtnPbNF5hbDW2/F+v5HSf8JEP+fGf8qP8AhIh/z4z/AJVz0OsyX881hFbzadfiITRi9iV1ZCcbsI/4YJBGRxVXR7zXL7Ub6K4u9O8myufIcR2Tq0g2K2QTKdv3sdD0o97uJqhpaP4nV/8ACRD/AJ8Z/wAqP+EiH/PjP+VcxFdCTxl5Uq6rBKLRtkUksZtpFDj5wqsTu5HJxxUlz4lhh1O606Cwvru6tkWSRIEXAVgSDuZgO2MZyewPNF5W3Hy0Nbx8t2djp2orqMbusbJsbaQxp17p8V+bbzWcfZ51nTaRyy5xnjpzXLad4n0/TPCN34gkE81kHVwIY8uQxAHBx3POa7NGDorjOGGRkYNXG7V2clbljVahsLRRRVGIUUUUAFFFFABRRRQAVHcSXEcUYhlRAWYkMyjsPWpKbNFayQxm4kKsGbHOPSmiZNLdX+Vyr9ovf+fmH/vtKPtF7/z8w/8AfaU/7Ppv/Pc/99f/AFqPs+m/89z/AN9f/WqrPv8AiTzU/wCX/wAlGfaL3/n5h/77Stk9TWT9n03/AJ7n/vr/AOtWsepq4X6nNiXF2srfKwVz3jX/AJFqb/fT+ddDXPeNf+Ram/30/nWhymlo3/IC0/8A69o//QRV6qOjf8gLT/8Ar2j/APQRV6kIO9bFY/etikMKKKKACiiigAorFm1S/i16xtHt4Y7a5eRQWO6Q7Vzu4OAD6c/h0qLUtaltdc+w/btPsofs4lEl2hO5ixGB86+lUoN28zN1Yq/kb9I33D9KyNQ1K4sk0+IS23mXcmw3ToREvGfu7u/QDd+NO0vULm7l1C3uPJkNrIEE8ClUfIyRgk4I78mjkdrh7RX5TwTwaoHjPRzvU/6UnAz619DXX+tH+7Xzv4M/5HTR/wDr6T+dfRF1/rR/u15uE/hv1OLLvgfqQUUUV0HoBRRXK+Ide1LTtf0a0tdNvZIJrlkkMZgxcDynbau5wQQQDzt+6eT0O1ChKvPkjbZvV22VxN2VzqqK5HxHrVxaHw7dPb39oJdRKS2oIaSQeVJhSI2ZWyQp646E4xxs2OuLfJfIun3cV5ZECSzkMfmHK7lwQ5Q5HQ7uxzitJ4OpGmqnR/52/p7aoOZXsatFYHhSeOe31FkfVC638qyx6jKjtE/BKIUJAQZ4GT3qax8QpqNxi206+ez81ohe7U8ospIPG7fjIIztx745qZ4acZSS15f6/ruHMjZoorlNT1ddM8dRveXrQabFo808wZyIwRKg3EdM4JHrziufrb+trj6f13sdXVa/tZby0aCG+uLJ2/5bW4QuPpvVh+lYdz40tLHRrPVL3TdUtoby5W3hjeANKxYEq2xWLYOOmN3+zTJ/HFrZ22oSX2l6laTWMUc81vIsTP5TttEgKuVKgg55yMHinYDc0zTLXR9OisbNCsMYONzFmYk5LMTyWJJJJ6k0zRtJg0PSodOtnkeGIsVaUgt8zFjnAHcmmXOt21tq2nabsllnv1keMxAFURACWY54HKjjPJFYtr4/0+8t4byPT9TXTpJxbNevCqxRyltgU/NuI3YG5VK5PXg4NWw6HWUVxl34n1iDx3Hp0eh6lLafYpJPJRrXMrCRQJAWlBC4OMEg8/d9Nm88RJa3FvZx6bfXWozReebKDy98SdCXZnEY54+9yemcGlbRPv8A1+gdbG1RXMy+OdJh0m21B47zbNefYWgWHdLFPzlGUHqCMcZ6gjI5qLUPGLRaFr80VhPZ6ppVqbg2t8qHIKko2Y3YFSVI4bPB6UW0uNK7sdXRXI2Wvazb+KNN0jUpNPvF1C0e4V7SB4Xg24+8rSPlTnAPHIqazvFn8fzxSprVrcLYkpbzzRG0kjEmPMVUdiHJPU4OO1O2tvX8P+GJvpf+tTqKK4eLxJcWHi/xPb/Y9T1MQGCRYLbawhTyQWI3sqjJ/hByTnAODRf+J1Pirw7dae93e2V9p9xJFbWv/Ldt0W0kMQoIBbliMc8ihK9v66XG9P6/rudxRXPJ4x05tKkvHiuo5o7k2bWJjBn+0do8KSCSMEHO3BznHNCeLrVU1FbyxvbG7sLY3clpOIzI8IBO9CjsjDII+9weuOKXmNK50NFc5YeMrO/udPT7Df29vqKFrK6njVY5yF3EAbi6nbkjcoBwcE8Zr6Vq2v8AiO3/ALV01tNtdMd2FtFcwSSS3CKxG4sHURhscDa+Byc9KdmnqI6uiufu/FkNvrs2iQaZqN7qEUKTtHbRptKNu53uyqMbf4iM5GM84anjKwuLHT57K2vLu4vw5gsoo1E3yHEm7cwVdp4JLAZ4BORSsB0VQXtql9Y3FnKWEc8TRMVPIDDBx781if8ACZaeNOmupILuKS3vI7K4tXRfNhldlVd3zbSPmU5UkEHjNXL3xDaWGoz2Msc5lhsXv2KqMGNTggc/e/T3oa01/rS/5DV76f1rb8y9YWcenadbWULM0VvEsSFzkkKABn34qxXNad41stRl04rYajBaalxZ3dxEqxzNt3bcbt4OAcFlAOOCcjOIfFfiCPRrrXGk0p7WDUZLQWItpFlkVZzEAsnmkbz1xs5PFU03LUlWS0/r+rHoFFZ8Gr28+t3mkqkouLSGKaRiBtIk3Ywc5z8hzx6Vyuv+NLs+FrDVtE0+/Md3cQATYg+VTMqMhDPncwyAQCBkcjqEld2Gd1RXP3+uajFoF3eJ4f1OKeNWCxM9sXX5SfM/1pXaD2zn2qHwr4gvNQ8PWd3qmnXlsPsSTy307QCOQ7QSwCOSM8nlRx6dKXfy/r9A7eZ01Fc5b+MrSaWzaXT9QtbK+cR2l9PGixTMfujAYuu4dN6rn6kVBP48sYf7SdNO1OaDTJmhvp44k2QbcZY5YFhg5wgYgDkDIy7PYDqqK5Xxd4h1XRdO+26daWzWyNDuuLhiQ/mSBNqopByAc7iQBxgNk46qi2lwOM8SXT2ni2xmS3edltziNOrZ3Cj/AISO7/6Al3+R/wDiaXxGl4/i/T1sZ4ILjyDteeEyqPv5+UMpP51X8NajrupLcXWoXumC1trqe3dIrJ0ZvLYru3mYgdM4wf61ycrcpWdv6RNnuT/8JHd/9AS7/I//ABNH/CR3f/QEu/yP/wATTYvGNnJ9lnayv4tOu5Fit9QkjUQyM3C8bt6hjwCygHjnkVJd+K7e2luxDp9/eW9kdt3c26IY4SBlh8zBnIHJ2BsdOvFPkn3CzG/8JHd/9AS7/I//ABNH/CR3f/QEu/yP/wATVLxk8c3h+21ixvbpGE1t5MlvdyRo6PKgOVVgrZB7g9a2tcfVIbKS5026s4fJjeR1ubVpt+BkAbZE29Pek4ySu5Ald6FL/hI7v/oCXf5H/wCJo/4SO7/6Al3+R/8Aiad4fvtZu9Bh1W/e1uvtFqk8dtZWxicErnbueUg9cc7ab4SuI57XUmR9VLrfyrLHqUqSPE/BKIUJAQZ4GTTdOSunLYXS5R0e/k0TSbfTrbRr94YFKq0nLHknnCgd/Sr3/CR3f/QEu/yP/wATVey8d2F9b2t5HYaimn3EogF5JEqxpITtCn5t33sDcFK5PXriXSPEkslnrbassUM+k3EqTeWCqmIDcj4JPVSPxzQ4T1bf9f0yrO9h/wDwkd3/ANAS7/I//E0f8JHd/wDQEu/yP/xNLp2t6m/h/T7y70i4uL66j817ezVVESnkZMrqMgEDGck5wMA4ngu7HxToJnia7ijLMrqkz28sUiEhkYowIIIIODg+4pShON7vYS1K/wDwkd3/ANAS7/I//E0f8JHd/wDQEu/yP/xNVfD2s/YfhpZ6xqElxceRZefMxbfI4AJPLHk8dzW1LrNvDfabaMkpk1AOYiAMLtXcd3Pp6ZpunNNq4amf/wAJHd/9AS7/ACP/AMTR/wAJHd/9AS7/ACP/AMTQfGFmH8z7HenTRP8AZzqQVPID52/3t+N3y7tu3PfHNWLzxCkGpyafa6dfX9xDGsk4thGBErZ25LuuScHhcnj6UuSfcLMr/wDCR3f/AEBLv8j/APE0f8JHd/8AQEu/yP8A8TXQKwdFYAgMMjIIP5HpWH4s1a80bR47ixEH2iS6htwZ0LqodwpOAyk4z6ijkne1wI/+Eju/+gJd/kf/AImj/hI7v/oCXf5H/wCJqw11qOjabfahrN3a3UFvCZdtnZtCwCgk/elYH26VFY+K7W9vbKD7FfW8d+jPZ3E8aqk+BuIADFlOOfmVc4OKfJPow1Gf8JHd/wDQEu/yP/xNH/CR3f8A0BLv8j/8TUt94mj02cfa9N1CKyMywm+Kp5QYnaMjf5gG7jOzHfOOayF1+4svGWv2wtdR1ERx28iW9ttIiXYdx+dlUZOOAcnsDg4XJPuFmaX/AAkd3/0BLv8AI/8AxNH/AAkd3/0BLv8AI/8AxNU/FN1bat8P7vWtPvLtAllJc20ttcywEHbkZCsM49Gzitu41W30rQ4r28dyuyNQFUs8jtgKqjuxJA/GnyT7h2Mq81q4vbKe0k0W9Ec8bRsVByARg4+WksdYn0/T7azi0W+aO3iWJC+ckKMDPy9eKvW2tyajLc6elvNpmqJEJUjv41kBQnAceXIQwzwQGBHfGRnO0e+8R3uualZ3F9pXk6fPHG/l6fIGlDIrnBM52nnHQ/0oUJ/zAWv+Eju/+gJd/kf/AImj/hI7v/oCXf5H/wCJps/jKzgSe5Flfy6bbyGKfUY418mNgdrcFg7BTwWVSOvPBqzeeI4oL17OzsL3U7iKMSzLZhMRKfu5Z3UEnnABJ46dKXJPuFnsQf8ACR3f/QEu/wAj/wDE0f8ACR3f/QEu/wAj/wDE1Drl1aa54Hu9Vsbu6VEtZZ4JLe4lt2V1VvvbSp4I5Vu46VoWv9o3PhzT2s7uCK5aCNnluoGnDfKM8B1Oc980+SWuuwdvP9P+HMfUNSvL64spP7Iu0FtMJSNhO7BHHT2rb/4S2X/oCX//AHwf8KzfCmoa7q9p9uv7rTjAJpoTDb2bo5KSMgO9pWHO3ONvfrS6Ddrc+JNa3rrEFyFhaS0vpo3iiBDBTEEZgM4JPPpQoSi3aQbXNH/hLZf+gJf/APfB/wAKP+Etl/6Al/8A98H/AArLk8c2Ki+dNP1KW30+doL24SJdkBU4LHLAsMc/IGIHUCtC+8QR2t/FYWtjd6hdyQ/aDFa+WNsecBiZHVeT0AOeOlV+87j1NPRtdTWJbiMW0sDwbdwk685/wrXrlPCcon1bWZQjoHaNtsi7WXO7gjsa6O9v7PTbVrq/u4LW3TG6WeQIi5OBknjrV023G7Baliquo3q6dp8126F1iXJUHk1VsPEug6rc/ZtO1vTbyfaW8q3ukkbA6nCknFM8Uf8AIt3v+4P/AEIVc7qLYzPXxe7orpot8ysMghcgj8qX/hLZf+gJf/8AfB/wrndH8Qap/apsv7H1Ca3i062ZIUa3BBO8F8mQcMAMDOeOg77t74jhs9XTSlsb25vntxcJFAikFdxU5YsFXGP4iB0AJJxWksFiYyUbpuyejTsrJ69t/T5EcxL/AMJbL/0BL/8A74P+FH/CWy/9AS//AO+D/hUVt4lsrn7AFiuFe8uJLYIygGKSMMWV+e2wjjPbtzUsmv2ML6oJ2eJdN2ee7LkHcoYbcZJ6gYxnPSoeFxSly2d/Tz5fz0DmEPjHy2QTaVdxB2ChnGBk/WunrzrXNbW7exs57C8sbh5lljS5CfvFGQSCjMMjIyDg8jiuvsfEFpqGv6po0UdwtzpojMzPHhG3gkbTnnp7fjUqFSE3Cfr/AFYadzWoooqigooooAKKKKACiiigAooooAKKKKACiiigAooooA4bWbPWNb+Hc9rc2kaavc2gElvFIAokOMgMTj9fxNM8P6TqHhnUJNKgt2uNCm3TQTeYu+1kJyyPuO51JOQ3J5weOa6qim3e/metybeRgeCdNu9I8I2NjfReVcxb96bg2MuxHIJHQisHxDp0kvja3022VTa63Gsl+M/dW3YEnHfeCqH8K72qFno9jYXdxdwRubm4/wBZLLM8rkAkhQXJIUEnCjAGelF/e5mJx93lRzuo3c9l8R4Wt9Nur5jpDDy7ZolKjzRyfMdRj6Gg+Gr+fwPrFhJ5SajqTz3Plh8pG7tuVN2OcYAJ+tdR/Z9r/aY1Lyv9LEPkCTcfuZ3YxnHXvjNWaS+G3r+dx8vvNv8ArSxy2pW+peJPDUtq+kz6feRNDNGl3JEySOjh9uY3bjK4yQOvSnfZ9R1zX9LvbnS59Nt9O8yQi4ljZ5ZHXYAojZhtAJJJIOccda6eim2LkOHh8P6ovgLRdMNri8try3llj8xflVZwzHOcHC88Gor/AMENqVz4kvGtIYdSkuo7jS77CmRWSNNvzDkLvUgg+9d7RRd6/wBdv8h8ie/9b/5nH+JjrWq+DfsKaDdPf3cCGVY5oNkLhgSpLSDPQ4xmrGux6jqdhpN3Bo92s1pqMdxJaPJCJSihgSCJNncfxV1FFF9b+dxcmm/SxxGpaHqmuReIb97I2k13pZsLS1lkQyH7xJcqxUZLAAZPA5x0qyLHUdc1DRzdaZPp1rpm6RzcSRM8rmMoAgjdsAbiSSR24POOuoovpYfJrf8Ar+tDgho+st4PTwcdLdEVRbNqPnR+SYQ2d4AbzN5Xttxu745ras9KvIdX8SzNDiK8WIW7bwd+2Lae/HPriujopSfMnfqEYqLTXQ4LTPD+p6LHo99/ZgvWGkR6dqFiske8bcEFSxCNglgQWHByM9Kqp4Xv/wCxb+K00UWCT63b3cNmGiXy4UMW44Rig+6xwDXo9FVzvm5v63v+ZPsla39bW/Iy/EelNrnhzUNMR1R7mFkVmGQG7Z9s9ax5bfVteudGiu9Jl06KwuFup5JJo2DsqkBY9jEkEnJLBeB0yeOsopJ2ZUopnnV/o/iEeGtW0C10jzWnvZZ1u2uI1iaN5fMwozu384wQBwTu6ZvxX17aeNvEq2WkXN9I8VrgxyRIiHY2N5dwcf7oau2qtDp9rb311exRbbi6CCZ9xO7aCF4zgYBPSjpYXJrdf1ucJJ4SlsW8ORXehLr1tY2U0U6KsLASuyEELMyjHDYPWrB8OasPDVxHFa+Xt1OK9s9M85T5MKOjeUGztUnaxCg7RnAOOa7yinzP+vW4ezX9eljltMt9XufGs+r3mmmys2sFt4leZHk3CQk7wpIHXjBIx3zwHeHYtS0a4u9Mn0q4e3kvp54r2KWIx7JGLjcC4cEEkYCmunopX/r53Hy9f62scxJDqWleL77UYdKnv7S+t4UzbSxBonjLD5hI68EMOQT0NJ5Oo6J4h1S9ttJn1G31IRyj7PLErxSIu0q3mMo2kAEEZ78dK6iii4cpxem+GdQ0+68OM6pIbea7nvHjf5Y2mDHC5wSMtjp2zWjp9tfaVqHiO9bT5rhbm8SW3jhePdKoiRSRuYAYIPUjpXR0UXBQS/r5HJ+DItTsv7Qt7/Rbu0FxfT3aSySQMu12yFOyRju/DHvUt5ca7Jca5DfWVvFpMaxfYZ0fLyk437hnsfYfjXT1n65/yBrj6D/0IVMn7vyNcPG1WOvVfmchLZXEviDRbxI828FtMsj7h8pYJjjqehqOWC90vxFeahb6fLfwXsMasIHjV43TI53soKkHsc5HStCKW9ESBYEK7Rg57fnTvOv/APn3T8//AK9YKWh60sPeTd+t9/kc5b6FqOmvY6oLcXN0lxcS3FrFIMgTHOELEAlcL1IB59q0bKC9j1HUtcn0+ZZJ444YrJZIzLtQnlju2ZJY/wAXQdc8Vpedf/8APun5/wD16POv/wDn3T8//r0+chYWz3/Fb9zL8Lrf2y3cF5pV1aiW6muFkkkiZcM2QPlcnOD6Y96tWdlcReKdUvHjxbzwwLG+4fMV3Z469xVrzr//AJ90/P8A+vR51/8A8+6fn/8AXo5/Iaw9la/W+6MfVzqMniLTLmDRL2aCxeUu6SQAOGTaNoaQHr6gVFdXk9t478yHTbq6ZtLXMcLRAp+8PXe6j8ia3fOv/wDn3T8//r1B9nn/ALQN/wDY0+0mLyS+4/cznGM460Ke39dyZYZu9pbtdV5f5FCzsLnT9Ekhu9LGom7nlmuLaJkYLvYttxIVVgOh569j2PDWkT6fcai4tmsNOuGU29g0gYxHne2FJVdxP3VJHHbpWt51/wD8+6fn/wDXo86//wCfdPz/APr0c+41htU77eaM3wwl/p2nwaTeabMn2YMgulkjaJwCdpHzb+RjqtZemWEn/CY3WnhVOnadKb2PHaWZeEx2wfMb/gQrpJGvpYmjaABWBUlXKnn0IOQfcVXsLSXTYGitbNVVmLuzSF2dj1LMzEsfcmnz63E8K7KN1Zef4FHXf7Rm1rS5LbRbyeGxuGleRJIAHBjZflDSA9W7gdDUer6TcT63bauLO+nja18iW3tb0280ZzuByJFVhyQRu9CM1uedf/8APun5/wD16POv/wDn3T8//r0lO1hvDc17vfzXQTwXZw2d5eCGyubTzP3jx3U3myFjjJLb3znH96utuYnnt5Io7iS3dhgSxBSye43Aj8wa5/QGlbV7gyqFYxcgduldLWkHdHHi4KFTlXZGVaaTe210ksviHU7pFzmGaO2CNx32RK35EVc1H/kGXX/XFv5GrNQXsbS2NxGgyzxsqj1JFXLY56dlNHllv4fv0vdS1myjSLUPPV7ZmYbbiIRqGjbHQEg4z0IBrXe1vrzxLoupvZvBHFazrOryITEzbMLwTnoeRmtmKz1WKJYxZAhR1Lj/ABp/2fVv+fEf99j/ABrFSdlpt/lY9KVGm5NqS1d913v/AF5Gf4iskv8AQLyFnEbKnmRyH+B1+ZW/AgVz0KzXHgDWNXu4hHdanbSXDr12L5eEXP8AugH8TXS6hol3qkaxXmntJEpyYxcFUf2ZQwDD2bIqa503ULuzltJ9OVoJUMbp5gGVIwRweKV3ytW3/r/L7gdNOalzLTzX9aa/ec/aQ3usPobyafNZ21gBOzzvGTK3llVChGbj5iSTjt+FlYr/AEzxLqFymmzXlrfCJg8EkYMbKNpDB2XjGDxnvW1FZ6pDEkUdgAiKFUbxwB070/7Pq3/PiP8Avsf41Up3d7ExoxUUnNX9UYCRaho2q6pLb6ZLfRX0gnRopI1KPsClX3svHyggjPU8esGmeH7zTb3QtwWRLWC4+0SK3yq8hVsAHkjOccdq6b7Pq3/PiP8Avsf40fZ9W/58R/32P8aSk+39bD9jC9+Zfeu9/wAzK0ayurOfWpJYgv2i9aaHLD5l2KAeOnIPWp9Bm1a40qOTW7WG1vizb4oWyoGeO57e/wDhV77Pq3/PiP8Avsf40fZ9W/58R/32P8aV3bbt+BShFbSXXqupl6XY3Fvret3E0e2K5mjaJtwO4CMA/Tkd6xhp2q23h+88ORacziUyxxX3moIhHIxO5hu37gGIwFOSOuDx1v2fVv8AnxH/AH2P8aPs+rf8+I/77H+NF32E6Uekl16rqc7b2d74f1O8ktdOm1C3uo4trRSRq6OiBMNvZeCACCM9+OlQS6ZqFh4LuNLjsZby8vEnL/Z5ECRvIWOMuy/KC2OAenSup+z6t/z4j/vsf40fZ9W/58R/32P8abk3uhKjCO0l96Oa1GyvtX8HCw/s64t7hWgQxySxgsFZCzBkcgDAPcHirGh2N9oMs2lLbtPpSAyWkysoaPJJMTAkEnPRuc55Nbv2fVv+fEf99j/Gj7Pq3/PiP++x/jQ5N303BUYJp8yutN0c7pR1FfE2o3c+iXsNveiFVd5IDs2AglgshPftmpZ4r/T/ABTcajBp017bXVrHE3kSRh43Rm6h2UYIbsT0rd+z6t/z4j/vsf40fZ9W/wCfEf8AfY/xo5n2BUo2tzrvujP1qfWIbe2bRrOC4ladFmWZ9uyI/eI5HI49foaqeJ7S8uP7Kms7SS6NrfJPJHG6K20KwON7Adx3rb+z6t/z4j/vsf40fZ9W/wCfEf8AfY/xpJtdCpU4yTTktVbdGLqk2sajoF4lhY3Vhe4AQTSRBnGfmCMrsFOMgE4wSKzdP0e8HiaO9Fhe29qLKWEm91A3Em8shHBdwo4PQn3xxXWfZ9W/58R/32P8aPs+rf8APiP++x/jTu+39WsS6UW03Naea6O5x1lpeq3Ph/SNCuNMltVtHhe4uJZI2VhGwbCBHLEkgdQOM/Sg6BJaXupJPpuq31vdzvOj2WpGJcP1V0MqDIOeQDkEV2P2fVv+fEf99j/Gj7Pq3/PiP++x/jTc3e9v6/pE/V6dkuZaW6rpf/M5zxHa3TaFDpWmaRczIvklCkkQVFR1O0l3BJwvv9a07q4muNNHnaDPcRy5WWzdoS4HbIL7CD/venHpofZ9W/58R/32P8aPs+rf8+I/77H+NLmbWqLVOKd1JbW3Rz/hrSJ9PuNRcWzWGnXDKbewaQMYjzvbCkqu4n7qkjjt0qTwwl/p2nwaReabMn2YMgulkjaJwCdpHzb+Rjqtbn2fVv8AnxH/AH2P8aZLZ6pNE8bWRCuCpKS7Tz6EHIPuKHJvoKNKEbWktPNdTktHsJP+EturHap07S5WuYe+JJhnb7bcv/32Kva0dRl17S5rfRbyeGxmd3kSSABw0ZUbQ0gPU9wK2LDR7zTbcwWmmhEZi7Fpd7Ox6szMxLH3JNWvs+rf8+I/77H+NHM9NCVRjytOS1d90czq2kTy69Fqws7+4iltRBJBaXxt5YyCWB4kVWHJB+bg4xmtLT7U6foc507T5re4fzJVgvJ/MZpT3Z97dSB/FWp9n1b/AJ8R/wB9j/Gj7Pq3/PiP++x/jSu7WsWqUFLm5l96KNhcaqdBhnv7GMalszLbQyDGc8hSSRnHqcZ4z3rEsdHl/wCEng1Gx0h9Ft1RheIzRgXROdvyRsy5BJO44PPft1P2fVv+fEf99j/Gj7Pq3/PiP++x/jT5ne9hOlFpJzWnmjiW0vXBoFvokel58i9WV7lp0CPGJ9+UGd2cdQwXoevGbUF1ew+IPEsNnpk11JJLEFkEkaxo3lKBu3MGx3+VTXWfZ9W/58R/32P8arwaVfW1zc3EWmhZblg0zebncQMDvxwO1HNdNNf1p/kT7FJpxmtPNdL/AOZyz+Fp9PfSJEiu76O1sfscyWd41vJnIIcHegIyCCCw6g84qe70J5NFgTT9NureVtThuZ47q5EkhCuu5yxkbPA6bs8dK6r7Pq3/AD4j/vsf40fZ9W/58R/32P8AGnzyvf8Are4fV6dmuZbW3Xa35ElY+i2NxaahrUs8exLm882I7gdy+Wgzx05B61qfZ9W/58R/32P8aPs+rf8APiP++x/jUptdDVxi7e8tPNf11OblfUj4vhv10K+NtHbPbFxLb8kupDAebnbgfX2qGO8u7bxfr62mmT3jvFb4MbxqqHa2NxZgcfQGuq+z6t/z4j/vsf41Xi0q+gvLi7j00LPcBRK/m/e2ggcZwOp6U76Wt/V7mbpLmupre+67WMnTpr7wd8M9Qntvs015YrvPnEiMtwW9CepwOM8V3mnXEt3plrczwGCaWFHeI9UYgEj8Ky9K0dCm/UbGB5Yp/OgMqK5jbH3lPOD7it2tYP3dTixCSqvleiCiiimZBRRRQAUUUUAFFFFABUN0jFY2CRuMsMOwHp61NTZ4LWWGMzzFGDNgbgPSmlcTly6lLa//AD72/wD32v8AjRtf/n3t/wDvtf8AGpvsen/8/R/77H+FH2PT/wDn6P8A32P8KfKyfax/pP8AzIWRypHkQDIxkOvH61uHrWT9j0//AJ+j/wB9j/Ctc9TWkFY5cTNStb8hK57xr/yLU3++n866Gue8a/8AItTf76fzrQ5TS0b/AJAWn/8AXtH/AOgir1UdG/5AWn/9e0f/AKCKvUhB3rYrH71sUhhRRRQAUUUUAc9qQvpdd0+5i0q6eG0aTewkiG/cuAVBf+eK0ru7uFQpHpVxcb0/vxBQT/C2Xz9cA/jV+iq5rpKxChZtp7nKtol9a6VpVmU+2W0Ds13axOFEgOSANxAKqT0JGcCr2h2V1ZtfloGtbJ2BtrV5Axj4O48EhQT2B/Ktykb7h+lN1G00+pCoxi010Pm3wZ/yOmj/APX0n86+iLr/AFo/3a+evBoi/wCEz0ja7k/ak4KAd/rX0Ldf60f7teZhP4b9Tky74H6kFFFFdB6AVgeJLK9luNH1CxtjdSafd+a9urqrOjIyHaWIGRuzgkdK36K1o1XSnzpX3/FWf4A1dWOd1K3vtWufD12unzW/2a/Ms8Uzx7o08qRcnaxBySOhPX60+2tbyx8Q6/qJs5Jop0t/IWN03SlFIYDcwA5Pcit+itfrcuXksrWt125ubv3/AA+8XLrc5fwsNRt7rVEvNGvLVLu9luklkkgZQrBcA7JGO7g9se9Uv7GvI9dgn0nS73SXN4Jb1xeIbOdMYfEQckswAwdiHPJIrtaK0+vz55TUV7ys1rb7r6/O4uRNWMbUrnX4vEOkw6dY202kymT+0J5Hw8WB8m0ZGcn2P4dawPFfg2fxL4otrndJBHb2LeRdq4IiuRKjoSmfnHB4II/HFdxRXCtGn2LucVf2viDXNN8Pte6ULe+stXhlu1SZChRAwMiHdnacjAPze3euvu7WG+s57S4QPDPG0cikcFSMEVNVa/sYdStGtbhp1jfr5Fw8Lf8AfSEN+tD1Vv6/rQS0af8AX9anF/D22urg3V/fEObFTpFpJnd5kcLENJn1Y4B/3KzNBg1LX/AVjocOlzw2z3RaW/mki8vy0uC52Krlyx24AKgd8+vpNpZ29hZxWlpCkNvCoSONBhVA7Cmadp1ppNjHZWUXlW8ZYqm4tjJJPJJPUmqctbisYWsWuo2ni6w1uz02XUIFs5bSaKCSNZEyysrDzGVSPlIPOeRTJ4NRsfFH/CQW+kXF5HeWMdvPbRyQrNAyMzD7zhCDvIOGPIGMiuqopJ2S8v8Ag/5j/r+vuOCTw1qpWyu5LcC5uPEA1O5hWUEW8ewqBknBIAXO3PJOMjmpdf8AD+qX1x4wa3td66hpEVta/vFHmSAS5Xk8feXk4HNdxRRfS39bJfoO+t/63ucZYeGJPDniewvdE06GGwvLf7PqdvBsjVHUZSULwCc7lOOeQaPM1c+PV1T/AIRrUhZiyNnv861+95obfjzs7cfj7V2dFF9b+v4/8OTbS3p+Bxxj1rSvEniC4tdDnvU1HyWt5kmhWNSsYQ+ZucMBkdlbjpnpVO18P6l4ZuvDL29hNqken6fPaz/ZHiRvMdo2yBI6jblW7+nFd7RQnb+vJr9RnAHwxq2P7dNrG2pHVxqf9niRc+X5XleXuzt8wLznO3dxnHNT6jpGq6/catqb6bLZMdHm0+0tZpYzJK78lm2MyAZCgfN65xxXcUUnqrf1tb8hptO/9b3/ADOTuNFvpX8Hj7PldPc/a/nX92Ps7p68/MQOM1zWoeFtRXwPP4Uk8NDU5LdZI9N1BGtyiKxJVj5jK6OAcHaD0yCeg9RoqnJt3FHRK3Q5rTdKvbfx1qeoyQ4tJrC2hjk3A7nQvuGM543DqO9GsWV9beKLDX7Kxe/WO2ktJ7eJ0WQKzKwdN7KpwVwQWHB46V0tFK+t/wCv61BLp/Wn/DHAX3hvV7/T9a1L7II769vrW6isWmXcI4ChClgdgdgp6HaMgZ70ahb6zearrGs3mlGxsf7CmtolkmR5d2dx3hCQM9sFuByQTiu/qK4t4ru1ltp13wyoY3XJGVIwRxUyu1Zf1pYpPXXy/O5w2j2+o6/pfhONtLnsbLT1hupLi4kiPnFYiqiNUdjyWyS23AHqeMlfCd79g1G1h8K/Z9bnvriW31zfbp5IaVmR/MVzLwp+7t56HjNen2ttDZWkNrbpshhjWONck4UDAGTz0qWtJS95tf1/ViIpqKT/AK3/AMzkZ7XWdL8WX2oWemNqKX1lBAkizRxrFJGX5k3EEKd4OUDHg8dM0I/DesL8K7HSjbxnVrRop/I80BXaOYSbQ3TkDAPuM4rvaKm4/wCv0MyOW41jSrqK4026055EaIJctExOVxkeW7jHPc59qwdJsNSvPBR8L6npVzYyLpxs2u/MheFyF2ZTa5fnr8yiuxopPZrv/X6jTaafY4h7HWtZ0/R9Gu9GewSynglubszxtE4hIIEQVi53FRjcq4Ge+BSTeH9Ufwl4ysVtc3Oo3F09qnmL+8DoApznAyR3xXcUU2738/1t/kJaWt0/S/8AmcV40ttWvvDMej2GiXd3Kfs7mWOWBY12SKzKd8inOF7Ajkc10Fxe6pL4eubqx0t4tTETmC0vHj5cfdDFHK4P+9+VatFDd0wWlvI4gS6hNr+gy6tBFb6g9lm4iibKo+GyAcnjPufqaXRNFuE0LVrC9Qwm8u7tlIYMdkjNtbg+hzin+JZLqLxbYvZwrLOLc7FY8H72e47Un2/xN/0C4P8Avof/ABVccprmlpv/AMAlNoyf7N1m/wDD2neG7jSmtVtngW4vfOjMLJCwOYwGL5baMBlGMnJ45nitNY0aHV9NtNIe8W8uJZ7a7WaNY183kiUMwcbST91WyMY54q/9v8Tf9AuD/vof/FUfb/E3/QLg/wC+h/8AFVTrXvdb+Xp/kCdtuhla1pOo2ng7T/DunaXd6g1ultm4jkhVP3bqSDvkU5IU4wMcjmumla41HQrkGymtp5YZEEE7JvBwQMlWZefr3rO+3+Jv+gXB/wB9D/4qj7f4m/6BcH/fQ/8AiqUqvMmmnr5Ana1uha0WK60nwjp8EtpJLdW1nGj28TJuLBQCASwX9cVmeFF1K2udVjvdEvLRLu9luklkkgZQrBcKdkjHdwe2PerP2/xN/wBAuD/vof8AxVH27xN/0C4P++v/ALKnKrdt238hKySXY5fw/BqGu+BdH0iPTJ4LYSxyS3s0kWwoku87ArlyxwAMqB1P10PFHhzVb3xGDp8CvpuqxRQao5kVfLWN92cE5bcpZOKv6eNc0uwisrLRoIreIYRPMLYGc9S5NWft/ib/AKBcH/fQ/wDiqftlzXS69ht7lbxFZ6rNrdo0dtqF1pC27KYNOvRayLNkYZ23oSu3IwG4PY8VH4btNT8P+GbiGfSbme5kvZ3EEF0krBXYkN5krruHuTu55FXft/ib/oFwf99D/wCKo+3+Jv8AoFwf99D/AOKqfaq1rMLmVpmk6rdfDWfw5c6bNY3i2DW6vPJE0bsQRwY3Y4HHUDrUsVvrmo+IPD9zPoz2NnYRypMZriNpN7R7cgIxG3PGc59gOTofb/E3/QLg/wC+h/8AFUfb/E3/AEC4P++h/wDFU3Wu27b+QXOd03wp9isk0bUtF1q+hSUr59vq7C2dN2VYxNOuMcZUIeRxmtTxRpD3l3JPaaNqP9pGAx2+padepAVBwQJMupIDDptcY6cnFXvt/ib/AKBcH/fQ/wDiqPt/ib/oFwf99D/4qh1r9/xC+tybUpPEVl4SDadDbX+vRxRgrIdscj8Bz1X3I5H9KpeMtMvtZ8LQW6WC3U4uLeWa1Vkwyq6s6jeQp4B6nmp/t/ib/oFwf99D/wCKo+3+Jv8AoFwf99D/AOKo9qr3t1vsCdlYoSaTFN4a1yz0rwl/Y9xc2jxqNltH57FWAGYnPTP8WOtXbnSr2TUPC0qw5SxL/aDuHyZhKjvzzxxmnfb/ABN/0C4P++h/8VR9v8Tf9AuD/vof/FUe28mF/wCvU5TUdA8Rahp1zBdWGo3OotdiQ3J1XZatEJQVCQiTGQoHDIOhOScZ6Fk1bS/E+tXdtotxex30cHkSRTQqisisCH3OGAyRyFPH5Va+3+Jv+gXB/wB9D/4qj7f4m/6BcH/fQ/8AiqPaq1rBfW5lXui6jpvw3Phy00+bULuazlhaS3aJI0kbJJPmOp25Y4wDwOgqxrOmX/iDwvaoNOurW7sriKdbaW5WJptnULJE7bcgnByOcdOtXft/ib/oFwf99D/4qj7f4m/6BcH/AH0P/iqPba3t57Bf+vUZoGmW8epSXp0bWLO5WHylm1HUPtOVJBKr+/kxyAegqxo2n3Vrr3iC5ni2Q3dxE8Dbgd6iJVJwDxyD1qL7f4m/6BcH/fQ/+KqG61nX7O3ae4063SNcZbOev0ak6q6phczBpWs23he98KQ6UzrMZootR82MQiKRidzDdv3AMQQFIJHXByL1tY6h4Z1a/ls9KuNTtb2OIq0MsSvG8aBMP5jLwQAQRk9cjpWgl34lkjV10eIqwBB8wc/+PU77R4m/6A0X/f0f/FVXtPJ/cx3MdtK1LSvAdxpMenzX99ex3PmfZpIwkUkpZusjL8oLY4yeOlb3h57r+xraG7064spYIkiKTtG27CgZGx2GPrg+1Q/aPE3/AEBov+/o/wDiqPtHib/oDRf9/R/8VR7TfR6+TE3e39bjPClhd6VoLwXcBSb7VcyhAyklWmdl5BxyCO/fms/SW1VfGGpX0/h7UILa+jgjWR5bY+XsDZLBZScfMOgNaf2jxN/0Bov+/o/+Ko+0eJv+gNF/39H/AMVR7TXZ/cwbvc5OzGo6jpHibRbLS5m+2aldw/bXkjEEYZsEkb95IGeAvJxz3rb1/RYpRaqui6jdTwW/lQX2m3iW88XGCCxkTjoQPmGc5HrPZQa5p6zra6DFGJ5mnk/f53Oxyx5bv6dKtfaPE3/QGi/7+j/4qj2miVn06PsO+rfm/wAWVfh9Df27ahDqkyzXyCJZ5FOQzfNk5wM/XArr723lurVoYb2ezkbGJoFQuvPberL+YrD8M2WoW97qVzf23kG4KMoDA9N2eh966StKV+XXz/MI6Iy7DSryzufNn8QalfJtI8m4jtwv1/dxK2fxpnij/kWr3/cH8xWvWdr1tNeaHdW8CF5XUBVBAzyPWqqaxYM5Gzhv9P1O31ODTpr62udLghYQSRq8boSRkOyggh+oJ6dK0VsLo+OTqZhItDpgg3lh/rPNLbcZz0PXpUds3iW2tYYF0iMrEgQEyrzgY/vVL9o8Tf8AQGi/7+j/AOKq1jp8tuXXl5W7PbTzt0IsJr9pdyXmkX9pbNdfYblpJIEdVdlaNk+XcQuQWB5IrEn0DVtXt/ELXNslpJfTW81snn9owvysy8qflwSM4J4Jxk7n2jxN/wBAaL/v6P8A4qj7R4m/6A0X/f0f/FVrRzOrRilCOqtZ2d7KXN3tv5A1d3OZ1CxjE1hcS6Pq9rPHKAst9qH2hVz1VR5z9cDnA6V1tj4g1G4+IWqaDLawfYLW0iniuI2JYM3G1+cAnkgY6Dvms2+tfEOpiCObS1jSOVZCVkXt+PvXYWdhZ6fG8dlaQWyO5kZYYwgZj1YgdSfWsXXnWqOc+1uvn3bZUVZNFiiiigoKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOK8ff8iJrH/XD+oqbTNek1XUZIbC0WXTbcbJb9pcK0g6rGuDvweCcgA5Azg1DqOjarqvgKTSL25tpdUmtRHNNgrG0nGTwOn4fgKTSdAu9A1aSPTWg/sK4BdrRmKm1l7mIAEbG7rxg8jrim1a6PUd200U9L8Yapqml22rReHH+wSyiJ9tzvmHz7C6RqnzID1JZTweMAZvL4rjjsdenu7byJNHkdZIhJu8xQoZGBwPvAjjHX1qx4S0i40HwzZ6bdPE80O/c0RJU5dmGMgHofSsHXNON98QbG0tnUw3ECzapGOTshfdDn03MSPcA+lOycuVf1/VmF5KPN+BoyeJtS/tOx0uDQw9/c2Iu3D3W2KDkBldtpPGcAhTk9gMkZfiHxHql54C1C90+1S1ng8yG6zeMklvIjBTsKod/wBcrwR9KtajJqMfxIhOm2trcSHSW3Lc3LQgDzRyCqPk+2BVr/hFJJPB+paRNdJ9s1EzTTTqh2LLId3C5+6Dge+KWnLf1/N/oHvXcb/1b/Msy63e6To8+oa3ZW8SRhBElndNO0rMdoX5kQAkkAcnr2pLfXr6LVrXT9Y0yK0e9RjbSW90Z1LKMsj5RdrY5GMg4PPHMV1pmsa5oEthqcdjZ3K+VJBNbTvMvmIwYFlZEwNyjjJ4J5pY9L1XUtasNQ1iKxt009XaGK1mabfI67SxZkTaAM4ABzu68UPqC5rIo2Xja7utN0/VZdE8jTbu4S2LtdZlV2bYGCbcFN2BksD1O31yNX8SXcOo+JI08TtbXtlMiafpixwOZyY0YLsKGR9zEj5T39q2YvCt8ngzSdHMtv8AaLO6hmkYM2wqkwc4OM5x7dafd+EG1CDxJDcyRqNSuEuLWRCd0LrGiqx44IZM8dqemvz/AE/4INSdv67/APAGeMJpX8HLLqei215amOOS9t3vXgZG3KQF2od2G9SvTvT/ABxK1tDoEkUDzumrQ7IoyMudr4AJ4/E0uvab4j1bwoulCHTHupoVW5me7kRVcEElQIjuBx3xjNT6vp2s6rYabL9nsIr6yvkufI+1O0TqoYY8zywQfm/uUdV6/qhatP0/RmV4i1y4ufDfifSdRso7S+g0x5wsM5mjkjZWGQxVTkEEEY9Oua0bDxHdW9xpVrqWmLaW1/GVtZvtG99yruxIm0BCVBIwzdMHFQ3nhnUtXt9cuL6S1hvtQsDYwRRO0kUKYYjLlVLEs2T8owMdetTxaNquo3+my6xHZ29vpoLRw2tw0xmkKFNzFkTaACeADknqMcnT+vMHzXv/AF0/r0IT4yuP7MXXBpIOgFwPtP2n9/5ZO3zPK24255+/nbzjtU1x4n1BtV1aw07RkuDpqo7zTXflI4ZN2AQjHd7Yx3yOlUh4Z1hvD6+FpGsf7IXERuxKxmaAHOzy9m0Nj5d2/wB8dq17XRLi31PX7gvF5eoCMQgE5XbFsO7jjn0zSlZJ2KjzNq5lt4km16+srTTLz+zbaTTl1K5unRDIkbH5VXdlQeGySCABx6iWbxPBpHh039rqK+JIxdx24eGWHfl2UYJQBCw3ZAwvGMnvUVh4X1TRo9GvLF7OW/tNOSwuoJXZYplGCCrhSVIbOCVOQccdahl8Kateaff+ebKG6vNXgvzGkzuiInl5G4oCSQh/hHWqtHmstr/r/kRedr9bfp/maj+JLvThdya5pJs7aC0N0J4JjOhAOCjHaoWTpgDIPY8UR+Ir+C809NV0hLS21F/KgkjuvNZHI3Ksq7QFJAP3WYZGM961Na0uPWtFvNNldo1uYjHvUZKk9D+B5rH/ALJ1rVbnSxrK6fFb6fMLjNrK8jXEqqQpwyL5YBJbGW7DPcyrXLlzLYc/i3Z4W1DW/sOfslxLB5Pm/f2S+XndjjPXGKJ/EepPrmoaVpmircyWUccjzTXXlRsHUkKCEY7uOBjHqRwDk33hTxBLompaHaTaclnc3clytzI7mRg8nmGMptwvJI3bjwPu88SxPrA8beJE0q3sZC0VqGkubh08s7GwQqo2/wCmV6daOmn9bE80r2f9bkGoeK47y98PyjXm0PTdQs5p3dzAp3qUAUtKrDIy3A9Kt6b4nvLfw6t9df8AEwjfU1s7a5wIjPC8gRZeBg9T0ADYyMZpY/DGpaNc6FJpK2l2unWcttILq4aAuzlDuG1H7qePemt4Rvm0a9AmtU1C51JNSEKbvIR0ZDszjODs5faCSSdvaq92/l/9t9+39XF7/wA//tfu3/qxt3Gs3A16bSLSzilnSyF0jSzmNWJcrtOFYjpnOD9KxfBd/wCILq0mN3bWkkAv7lHmbUJHkTErDaqmLBUdB8w47DpV7TNK1j/hK59b1N7JEksxbJbWzM/lYct99lG7Oc5wuOmOMldE03V9Fu7q0EVjPpk13LcJN9odJkEhLFTHsIbDE87xxUrb+u/+RTu3fpf9P8zLsNR8Tv4y1mD7FYOscNufJfU5fLjzv5X9yeTjngdBya2bnXb2XVbrTtH06G8ms0Vrl57ryUVmGVRSEcs2OeQAMjnmo59N1ey8T3Wq6ZFY3MN5BHFNFc3DwsjIWwylUfIIboQOlJLpusadrV/f6RFY3EeoKjTRXU7xeXKq7QylUfcCMZGBjHXngBXTZXPjQzxaOdP0ua4m1N5olikkEZhkjB3Bzg8AggkZ6cA9KuWGsajqttqNvFa21pqllcC3kWSVpYRkK28EBSw2tnGF54yOtU7HwnNp9zoLpcRSixkuZrpyCpkeYHJVecDcTwTwPWrtnpmo6Zea9eW6Ws8l9dJNBHJM0YwI0Q7mCNg/KTwD2p6f16oFzdf60ZF4Ov76/sNQ+33RuZbfUZ7dZCiqdiNgcKAK09c/5A1x9B/MVkeE9M1vSGvYdQt9PENzdzXfmW928jKXbO3aYlBA9c/hReW+ux3GuTX17by6TIsX2GBEw8RGN+447n3P4VM/h+X6G2Gf7yP+L9Tlpo9Tj13S7GPX79ILuGWRgIrclNoXAUmLp83fJrTl1W7S/bStOt1vrq3hV7iW5nEKjdnbkqhyxwTgKB9OlOfTZp9Z0nUFaMQ21vIjgk7iXC4xx7Go57DUbPW7jUdMS1nF3EiTQ3MzRbWTO1lYK2eCQRgdBzWKasjvkpKUmu/4afqRJ4pW5trRbWydtQupZIRayyBBG0f+s3tg4UY6gHORxzxZs75dWkvtK1OwiS4gC+dAW86KRGztIJUbgcEcgcis+Lw1d2C2d5aS282pQzTTTCXMcc3mnLjIDFccYOD93nrVyz0/UYLm/wBWljtH1G5VI0gWZhEiJnA8zZkk5Jzt9BjjNU7ExdS6v/S8/MreErdI9H1G2t/9GRb+5SPyVUeWN5xtBBHH0xUdlFqcviW/sZPEF+0FrHDIoMVvlt27IYiLp8o6Yq34csdW077TFfQWSxTXEtwHguXdgXbO3aY14Hrn8KtWumzQeItR1BmjMNzFCiKCdwKbs54/2hRf8hKLaSXd+XcoagV/4THSPtemwuT5q2l0t0+9Pky2Y9oXnGOpqxfa3dxa8ukWWmi5ma2Fx5jz+XGo3FSGO0kdOMA5z261Bqlnrlzrtje21pp7Q2TSFPMvHVpAy7eQIiFx9TVa6k1FPHebK1tZZjpa71muGjVf3h6EI2efYUlrZev6sJNx5n5rp6ItfbbjWdCkvre7utNnt/NSWKIROPMTIIJdGyMjgjGQaf4e/tGTQLfUJdQmvrm5tUkEVx5ccYcrngpGCB9d1Tafo8lloVxZtMslzcGWSWQDapkkJJwOwGcfhU2m2l1pnh20s1WGW6t7dI8GQqjMAB97aSB74/Ci6s/l+tykpOUW+z/Sxn+GCgtNV+zabDaXK30oljW6eRJJcAltxXIBz2Xj0qpoN7r82q6ukttaPGl8FYNfyHyR5aEhB5XI5z/DyT9au+H7LV7C5vvttvYrDdXL3O6G6d2QkAbcGNc9Oufwp9vYapp2t381rHZz2V9Mkz+ZO0ckTbQrYARg3Cgjkdx701a/yX6EJS5Vvo306a+XoVdcsrSPxV4evEtYVupLt1eYRgOwEL4BbqRWnf6rNDqMOnWFqlzeSRmZhLN5UccYOMswVjkngAD16YqjrNlrV3q+n3Fra6e0NjOZVMt46tJlCuCBEQv3vU9Kj1jw62oanbao2naXezLB5E1re8x9cgo+xiCDkfd5B7Ul0uU+ZOXKtdP+CbPg/Uv7Tv72RoTBPFmGaItu2OpAIB7juDxwRwK6u5uEtbeSeRZGRBkiKJpGP0VQSfoBXK+D7NbK8uYhp9lYHbkw2ZzGDxznavP4V1VzbpdW8kEjSKjjBMUrRsPoykEfUGqjtoYYm/OubsjPtPENle3SW8UGpq75wZtMuYk6Z5Z4wo/E1q1lWnh6ysrpLiKfU2dM4E2p3MqdMcq8hU/iK1a0duhzK/U53VvCkeqz6lK115f22GKIjy87Njbs9ec8VJdNeTeJY9Oh1Ce0t1svNIhSMktvx/Grdq3qxrzQYdQ8QJfXlta3Nstr5QjmQOQ+7OcEY6VFrNW/rc2U7/F/W3+RFomp6hd6XcMUjvJobl4Ipg3lpOqnG8kA475wD04FTQa4wbUYr608mexjEzrDJ5iuhBIKkhTngjBA6Umu6RLf2Ftb2qweXBMjtaykrFMi/wABwDgdD0I46VX0jQ7nTtQv7tIdOtRcQoscNqh2Iy7uvA3dRyMZ9BRrt/Ww/cab/rf/AC8i5pepXuo20dybO3WCaLzIniuvM57BvlGPw3dDWZpV5rcmt6vG9vauqTxgo165EQManCfu+fXtz+dT6foc0OurqP2Sy08CNkkjs5WYTknILfKoGOecEnNWEsdRstbvbq1jtZre8MbuJZmjeNlXacYVgwwB6Ua3TH7qul/X4jrjV7pry6t9OsUuvsgHntJP5fzEZCr8pyceuByOfS9YXsOo2EF7BnypkDruGDg+tYd14bH9r3d6ml6VqCXRV2W9G1o2AA4bY+QcZxxg+tb9rEsFpFEsEUAVQPKh+4nsOBx+ApxvbUiajZcpFql8umaVdXrjcIImfb/eIHA/E1lKzeHPDF1qNxme9ZPPnZj/AKyUgAD2A4UegFaOtWJ1PRbyyU4eaJlUns3b9cVSiaDxT4Zlt5C0TSIYZ0xhoZB1BHqDz+VJ31sONrK+19f6+8sWVpqSLHPc6nJNKw3PAYkWIE9lwu4Y6ZLH8azNNvNck17Vo2trV1R4gUa+fbECg+5+75z17c/nWpYDWYxFDeJZMiDDTxyuWkx0OwqApPGfmNQ/YtRs9cu7yzS1mgvBGZFlmaNkZRjIwrZBGPSm99AT3TtcSXWrxtbudLstOWaSCNJDLJceWmGzwcKTnjjAPfp3p+IBDq3gm6vLvThHOlrI6x3EYLwtg5xkcdOo9q0rXTZofEWoagzRmG4iiRFBO4Fc5zx70niC1v7/AEq4sbKK2b7RE0bvNMybMjAIARs/pUyTcWVBxVSNvL/gl+0/484P+ua/yqaquni7W0VLyKGORAFAhlMgIA65Kr+WKmmgiuYWhniSWJxhkkUMrD3BrST1ujBK2jKtnqP2vUNQtPK2fY5ETduzv3IGzjHHXFXqwNO8LWFnqt9dtp9hsklR7bZCuYsKAccfL8wJ4rfqVe2pc+W/umJZajcRa9qtjfS5jjVbm3YgDERGCOPRgetV7OC71/w2Li6maO4mka5s3AAMAyfL6deMZz1yRS+JdBvNWlt5bCeKGQI9vOZCRuhfG4DA68cVq3t3b6PpbTMMRwoFjRerHoqgdyTgCp6a/wBf1oXdacu7/r8TPhLeKPB5SUiCS7gaKQgZ2Pyp4zzgg96m0zQk03Urm8WbeZ4YYtuzGPLXGc55zUnh6xl07QrW3nx5+C8mOgZiWI/M1p1dtbkOW8Vt/X+SMvTtUurzVtUs5tLntYbN0WG5kPy3IZckrx2PHf8ApWpXKaBq2p6n4w1sLdQ3egRpELSaJBtWTHzoHH38d+Tg4HHIrq6fRGUXe4UUUUigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKhuUYrGwiVxlhyQPSpqbPb280MZmmEZDMANwHp600riclHVlPY//PrH/wB9ijY//PrH/wB9ipfsNj/z9j/vtaPsNj/z9j/vtafKyfax/pP/ADIWjcqQLaMEjrvHFbh61k/YbH/n7H/fa1rnqa0grHLiZqVrCVz3jX/kWpv99P510Nc941/5Fqb/AH0/nWhymlo3/IC0/wD69o//AEEVeqjo3/IC0/8A69o//QRV6kIO9bFY/etikMKKKKACiiigDBubrUoPEenQyTxrbXLyjyY0z8qrkEsec/TA7c9abql3dQ60Ue6v7awFsH32tp5o37jnJ8tscfSn39nq1zrNleRW9l5dozlQ9y4Lhlxz+7OP1q/cvqmNtrbWZynLS3DDa30CHI/EZ9q07HPq3JXe/mZ8+oSSSaVaWmoHyrwM323CMzbRnC8bdx+nY8VLpV9NLd6np884uGs2ULNgBmVgThsADIwRwBSJo5s9Fg05LW01BUJZxdtsUsSSSBtbuTx2qbStJXTYrhyIhNOQzrCmyNABgKo9Bzz3yTx0ptxs7f1r/kCU+ZX+f3f5ngHgz/kdNH/6+k/nX0Rdf60f7tfO/gz/AJHTR/8Ar6T+dfRF1/rR/u15WE/hv1ObLvgfqQUUUV0HoBXI+Jr7XLfxJoMVlBbGCS6dVDXzx+d+5clZFEZAAIyOW5A4HbrqxfEGl3l9Jpt5p5g+16fdeekc7FUkUqyMpYAleGJBweR0rrwU4Rq++k001rtdp2/EUtnYxvFFzfxSeGJ5rBHvRqZAtrafepJhlA+dlXjoSccc9e+zp2sXl5JqVlLYwQ6lY7f3S3JaJw67kPmbAQOoPy8Y71He6bqOpzaHczx2tvLZXhnnjjmaRdvlug2sUXJ+YHkDv+L4dNvrPWta1KFbeU3iQiCN5WTlFIO4hTgc9ga6ZyoyoqDS5ktNXvz7b2tZt/qTrzX/AK6lbwf5H2fVRFp0djMuoyi4SO5adXlwpZwzAHnPTA6VJo/iG71qaSW1sLc6fHcPbtJ9r/fqykglotuByM435wQcdqZ4bsNa0661D7fbaesN5dSXW+C7eRkLAALtMSg9OuR9KqXPhq8vtftNQex0uynt7hZX1G1kfz50AwUZNg4YYBy7YHrVTjQnVqc7Wq0d7209bv7212Ytbad2ddXEa7q1ponxBt769crGmjyhVUZeRjMgVFH8TE8ACt7UrbX5fEOkzadfW0OkxGT+0IJEy8uR8m04OMH3H49Ky/EPguLxJ4hivLvYLeKxeGORGIngmMisskZx8pG3rn26E15K3T9fyZrpZr0/NDtQ8V6lpOjadeX2gMLq+vEtUsobpXdd4JUkkKu7jBGcD+9SXvinWNK0/U59Q8PBZLGFLnNvdNJDLGSQ+JDGvzqASVx6c80y40LxBqem6JFqc9g95p2pxXEs8bsBPEmRu27flc55Xke9dZMkckEiSgGNlIcN0I75pvRP+uiEt1f+tWZM2vqNc0rTbWAXH26GS5eUSYEMSgYbGDnLMoA47ntWFa+O7240qDWpdB8jSGuBbyzPdgyqTJ5e9UC4ZN2OSynr8pwMx/DewmWxutRmkEsOfsOnSc/NZxMwjbnruyTnuAprO8M6Zq2v+CbDTJYrK30k3LSSTrcO80ipOz7PL2ALkgDO84Hbnh2V/wCv62F0/r+tzSvNR8Tp8RYrW3s7F4Tp8rpA+pyJG4EigOwEJAftjB6n5vXautevl1OHSLHTre51T7OLm4SS7McECEkD59hZiWBx8nQEnHdmr6Vqg8SWWuaStnNJFbSWs1vdTNEGRirBg6o+CCvTbyD1plzpmsQa6mu6dDYyXM9olteWk9y6J8pLKySCNjwWYYKDIIPGOUtkn5/r/wAAb3b9P0/4JUl8dGLTLaYaPPJevqQ0yezWVd0U2CeGPDLwCDxwc8dKi1XxVqcOieJ4ZLWKw1bS7H7TG8E32iMhlYowLIvIKNkFew65pyeEL0RWUzz2zXrayNVvSuQn3SuxOMnA2gE4zgnjOKk1rwrfajP4oeGW3UarpkdnBvZhtdRJktgcD5x0z34o05fP/gL9bjVuby/4L/Qo6Brt1c+J7G0sPEJ8QWEto0l9IVhYWjjGz54UUAscja2TxmtCzZT8SZ/tmj28OoHTiY72G9eTfAJcBWjKKqnJzxn0zVhvDt1b+KNM1mweBGFt9k1FGJHnRgZRlwOWVvXHBPNVvsHiY+M11k2GkeQLU2ez+0ZN23zA2/8A1GM4H3c/jVXXMref62/QnXlfy/S/6mfb3+qWnjXxaNL0pL11NvI5mufIQAQDCghWJY9hgD1I4zFca8+qeK/C2q6PZtdG80y6aKKWTygmWhzvbB2gYIOATnoDWvJpXiGy17WrvS49NeLU/KKy3Fw6PAVj2Z2CMh/XG5c9OOtQJ4V1HRLnQJdGFpeLpllLaOl5O0BfeUO8FY35yh4x361MbaX/AK0f/AKf9fgTp42H2KRJNPI1hL/+zhYpMCrT43DEhA+Qr827bkDPBPFPk8WXVi2p22q6XHBfWdi9/EkFyZYp4lHOHKKQwPBBXjIPNVP+EQvxb/2gLm3bXf7S/tMg7vI3bPL8rON23Z8u7Gc/NjtUl14b1XWX1S/1EWVvez6ZJp9pBBK0kcYfJZmkKKSSdvAXgL3zSe39dv8AMatfy/4P+RLZeLruW50g32jizs9WVjbObnfKrBPMxIm0BQVDYIZugyBnjNsdfl1LS4PEGpeLIdCtbx2Njan7OsbIrHHmNKCzsRgkIy4HAwea2JvD11K/hY+ZBjSWzcAk/MPIaP5eOeWHXHFY1z4U1+DwnfeFLD+zZ9NmWSO3ubi4kilgjck7SgjYPtyQDuXIxwOpt8vNoRG9lf5mvceJtQbxPc6Dpujx3U0FtFcG4lu/Jiw5YYOFZgfl4wGzk5xjlF8WXU66baW+jSLrF7HJK1ndy+SsCxsFdnfaTtyQFIU7sg4AyRZsdDubXxhqGrvJEbe4soLdFBO8NGXJJGMY+YY5o1fSr867Z65pItpLqCF7aW3upGjSWNiG4dVYqwZR/CcgkVOmn9d/+ANf1+F/1KT+NGt7C6a500x39nfQWVxbCfKjzXUK6Pt+Zdrg8qDwQQKv6l4k/s/V7mw+yeZ5GmPqG/zMbtrY2Yx39f0rHuvCGoXumarcTTWiaxf3cF3tUsYU8kqY4t2AxHycttB+Ynb2qLUNI1trrWNe1R7CONtFmtUtbZ3cxnO7O9lXdnnsuOBg9aUnaN/X/wBJ/wAyoq7+78/8i7p/jC9uP7Gub3RPsWn6uVS3ka6Dyo7IWUOgXChsHBDE9MgZIHMJ4rvmtrmaDxX5+tpqklvBom23YSIJygUoqCUDYM7t3GMnitvQdL1bWdK8LvqMVla2GnxQ3MYguHlkncRbU3ZRQgG4kgFsnA+sLeE9fn0DUfDssWlLZXt3PN9t+0SPJGrymQEReWBvGRg7+DzzjFaNJTt5/qv+CZp3gv67/wDAOqttZ+0eJNQ0f7Pt+x28M3m787/MLjGMcY2eveuQ17xNrWpeCtM1fTLSG2jurm23k37pIpNwq7PljOVboTkcE8HvuXOja1aeI7rUtIaxdb20itpGu5HDQGMthwFU+Zw5+UlOR154qJ4Qv1+HFr4f+1W51G18uSOYg+U0kcokXPfBIAPpnvUK10/NfnqV5f1t/maWpXfiJPDl7KdO06O7VHwI9SkKqmw/MG8kHcD0GPxFU/C2r6rH4Qs9Q1uG0js49OSdrtb15pXwgJZ1aNcEjJPzHn161uQJqF/p1xBq1ra2zyq0YFrctMCpGM5ZEwevGD9axtJ0TVv+EYPhrWYbE2S2RsxdW1y5kkXG0ExmMBTt54Y80apStvp+o1ZtX/rYSPxbfRrp15qGjLa6XqMqRQTLdeZNGZP9X5sewBQeB8rtgkfUV7jxvfRwa1eQ6EHsdGuJIrqWS72M6oASYl2HcQDkhio6AE84eNB17UbbTNM1f+zhY2E0Urz28rtJdGIgoDGUAjyQCcM3TA65DpfC19J4Z8VaaJbfztWnuJIGLNtUSKAN3GR05wDTdrv52/C36iXS/lf8b/oN8baprVhov9pabdw2tqrW+CIw8sheVVIO4bVXaewJJPVcc9hXI+LNG13V9Bj0fT7fTjHiFmnuLx4yGR1YgKImyDt65HXpWzcDW7nw9crELOx1h4nWEpKZ4o3/AISSUUnt/D+dJ2Sdu4K7tcwvEdvLdeL9PihvJ7NzAcTQBCw+/wD31Zf0qh4Xl1CW3vdR1LxBezQ2d3cwtHJFbrGUjYgFtsQbOBngirQi1CHX9Bi1aeK41BLLFxLEuFd8NkgYHGfYfQVY0fQntNJ1KwvWR1vLq5kPlMfuSsSByBzg1zaqU0v62ErNa9/8ykni67FnZarcaQIdGvJI0jn+07pkEhAR3j24CkkdHJGRx1xLN4mvZTqE2l6Sl5ZafI0U8rXXlu7Ly4iTaQ2OnzMuTx71UXw9rV1pNjoOoNYf2baPFvuYpGMtwkTAopjKAITtXJDN3wOeJf7G1zT11Ox0v7A1lfTPMk9xK6yWxk+/8gQiTBywyy9cds1o7a287fhb9QXn/W//AACn4yXTNY8JWetx2sErtLaSW1w8QMiI8yHgnkZB5xXRa/Bdvp01xaard2LwRO+IEiYOQMjd5iN6dsdaxdZ8PamfDVnoGjW9i1rbrBia6unjb906tjasbZzt65HXpXQPHe3uizw3UNvBdTROhSKZpEUkED5iqk9v4fzqZ/C+Xu7DjuuYy/DX9qS+G7XUptTn1G6urSOVYbryoo1crngxxAgZPfd9KZ4MNuLXVhDpsdhKuozC5SK5edXl4LOGYA856YFaOl2d5pPheyskSCa8tbWOLa0pSNmVQD820kDjrt/Cs7w1p+uabc6iNQtdPWC8upLrfb3jyMhYDC7TEoI465H0qptc0rbf8EhX5Vf+tCnZeN7y50uy1ibQ/s+lXEywPK10DKhZtgYIFwU3YGSwPU7fWXTfEVzY2niRNam8yfR5pJA5VVLwMN8ZwAB0+X6isbwvpuqa54K0exnjs7fS0kWZpUnZ5pQkm4Ls2AJkgZO48D341fEfhK91fxHa3lpcQRWMyRxanFJndLHHIJEC4GM5yDnsabSvy7f0tfzLdv6/I0NOn8Rp4e04y2sF5qUsfmXLXE4t0jJ52/IjEkZx93scnPV1ldWXi3w9I1/pkRCSPFPa3KLKqSxkqcZGGAI4OPyqp4i8O3Wqa5a3wtNN1Ozit2iNjqLlY0csCJVARwWxkcgex60aDomreHPDktjbwaZPcPdyyBEke2hVHYkbQEcjHHy4I96mVmm/63EtLFbw7qQ0X4S2mpCHzRaaeZvK3bd20E4zg4/Kt2fW/I1PR7P7Pn+0hId+/Hl7U3dMc56dqxtM8O6qfAk3hnUlsoP9DNtHcW07S7sggkqyJjGRxk/hToNF1+61zRb7UTpsNvpySRtBbyPIXLR7d+5lXv8Aw4465PQVKzk3/XUXRf12HHxhP9k/tcaYp0Hz/KN19p/e7d2zzBFtwU3f7ecc47VauvEN0fEU2i6ZY21xcW8Czy/abzyCVYkDYAjFunJOAMjnmsXTfA6aUVtT4a8N6hbxykpezjZcbCc/MvksGZc4zuGcDpWn4p0G415Ht20nR7yMoVhubqV45bYnqV2oxPIB4ZM9O2aWmlv6/r5D6s6dSWRWKlSRkqcZHtxXPeKtabRJNFla8itLWa/WK5klKhfLKOcEt05A54qbUrDXE8JCx0bU411eOKONLy6XIYjG5mGG5IB7HrS6ppN5qD6HJ5sJksbtbicnI34jZTtGDzluhpWV/mJba9n+RiyeNrH/AISqb7Pq9rdaRbaTJdTi2dJQrq47rznHbNalt4hvlv8AT4NU0pLOLUcrbOlz5rBwpcJIu0BWKg9CwyCM9M1te8Jvr2s3M0s0aWdxpUli2Ml1dnDBgMYIGPWm6F4bOn3lu8/hfw1bvCuPt1l8spOMbgnkjbn03nGepprlsv66v/gDfl/Wi/4Jb1bX9R0Y/a7nSYv7KEyxPMt1mZQzBQ/l7NuMkfx5wc4zxUeqa3e3Mup2Gk2EFyLOLbdTXFyYVVmTcFXajliFIJzgDI5POOcuvAGo3NrcQPa6HNdtd/aBq8+57mRfNDBT8nyELxkMwwMYGcjfn0TWYNR1j+zZbIW2rbXeaZm8y3cIEJVApDghVxllwc9alpcv9eX/AASlZSMd3KfBuwaXTLfULFdKje6hlu3gJRUB+UqjEnj1H1rpNX1tfD/h+1vIrGS4VpIIEt4nG75yFABPUjPfGfUVmXeg60Ph9b+G7SOwlmbT/sc80ty8aodgXKgRtuHXrtq3faTq2raFZ2tzFZW1xb3lvMRHcPKjJG6seTGp3HB4xjpzWkrObfS/4XIWkV6Mkg8STQ319aaxYx2clrZ/bd0FwZlaLLA5JVSGG3pgj3rm9f8AFWqzadpsc2i28Vpq2HhlF8WdFADjegjwGK9gxHbNbHiW0lsZ9Z8QNP5dsuitb5iXdKrBmbcFOARgjvXIXVsfD2haS9xo9qouRFawSJrE108W4BjsjkTaoO0Z2N09QKzaTg/67/8AAHJdv60X/BPZ7P8A48bf/rkv8qo33iGy0+6NvPBqbuACTb6ZczJz/tJGV/Wr1n/x42//AFyX+VUb7w9ZahdG4nn1NHIAIt9TuYU4/wBlJAv6VqtkNF6zu4761S5hWZY3zgTwPC/XHKOAw/EVV13ShreiXWmmXyvtCbfM27tvIOcZGenrVqztI7G1S2haZo0zgzzvM/XPLuSx/E1PTaT0HCUotSW6Obm0s6Da+IdWtrj99Pb+Yn7sfuzHEQOuc8jPNVhe6np8ugudUlvv7RdUltp44wQCu4uhRVI2985HPauh1a1kvtHvbOIqJJ4HiUseAWUgZ9uag0fRLHSLWIW9jaQXHlKkskESqXIHOSACefWpSd/u/U6FVjyXlq/TySWvkQarrN7pMcl3LpsbafEwEkguP3oUkAsE24I5z94HHbtRea3MmtR6TY20E1y1v9oP2i5MI25wNuFYseDngAcc81z994Nvru31CFrfSZ7i4maVNRuNzThSQQuNvy4HAIYjA+7zW7rulTanALdtL0y/h8sqpu5GjaJiMEqQje3TaRj8leVi+Wimlvv+lnv69UVfFl7q0Gk28tpAkO+eDeTdFHVjIo2fKpBB6E56E8GtG41W503TJLvUrSJJA6pFDazmUyMxAUZZUwSTVa70G6m8Jw6Wt4JbyARMk8wOHdGDDdyTg4x3/Gl1TSrzX9EktL+CzgnWRJIgshnjYqQRuBVeDyCPQ03dXJXs3GKdrX1/AsWmrXJ1QabqNnHbXEkJmiMM5lR1BAYZKqQRkcY79a1qw9H0kWdy0raDo1g2zAlsm3Mfb/VLgfia3KpbGNVRUvd/r8X+Zz9xnV/FIsnJ+x6ciTyIOkkzElAfZQN2PUj0pZLq91TxDd6ba3j2VvYohmliRGkkdwSFG8EBQMHpkk9RTGkXSfGLvN8tvq0aIkh6CZMjaT2ypGPXBqWbTNQs9en1TS/s8ou41S4t7iRoxlchXVgrc4OCMfjUrb+v6/pG+i+5W7X0v+pT8Uzavp+hRi3lWUiaJXuWnMMhzKoAwqYORwSCOp47Vf1DWL3SNCu9Sv7CDdBgrFb3LPvBIHUouDz6Gnatpt5q/h+S1doIbxisibSWjV1YMoJ4JHABOB647VDq1hqut+G7ywnhs7e5lChClw0iHBBJJKKR09DQ76hBwaipJb6+mhYtNT1CS+hhu9JaCGdGeOVJfM2Yx8smFAUkHjBYcHms7RrO1sfGmsxWdtDbxm2t22QxhBkmTJwO9dKAVjAGCwHrXP2VnrcXiO51Ge009YrqOKJ1S8dmQIW5GYhnO7px060+qIhK8JW0ul180+p0VZ+san/ZNitz5Pm7p4otu7b99wueh6ZzWhWB4j8MWmtQhlsrE3fnRM000Q3FFcFl3YJ5UEYod+hnSUHNc+xv1jeKLu+0/RHv7FyGtZEllQKD5kQPzjnpxk8c8VpWljaafD5NlawW0Wd2yGMIufXAqSaJJ4JIZFDRyKVYHuDwaHe2goSjGab1RjXepXE+uaTZWEuI5Ua6uGCg5hAwo56ZZh054NRQ7tH8VrZxk/YdTSSZUJ4jnXBbHswOceoPrUfhTw/e6N9ofUbiGeXYlvA0ZJ2wJnaDkdeTmpGb+1PGMJhOYNKjcSuBwZpABsz6hRk/7wpdV/X9f5m75U3FapLfz6fjp6EWseEI9XuNTla68v7dDDER5W7Z5bbs9ec9O1aGv6ndaLpSXFlpVxqcnmxxeRAcMFZgC3Q8Ac/4DmtauU+IGr6hpnhxk0S8ih1uZ1FnAUEkk+GG5UQ5zweTjgc8dapJJpLuYyqSmrN7f5Jfojq6KZCZDBGZgolKjeF6Bsc4p9DM1qgooooAKKKKACiiigBf7KX/AJ7H/vmj+yl/57H/AL5rRorblRt7ep3M7+yl/wCex/75qtaeGbDTzMbKCC2Mz+ZL5MCpvb+82Op9zW1RRyoPb1O5lf2DbfavtWE+0BPL83yxv25ztz1xnnFSf2Uv/PY/981o0UcqD29TuZ39lL/z2P8A3zR/ZS/89j/3zWjRRyoPb1O5nf2Uv/PY/wDfNH9lL/z2P/fNaNFHKg9vU7md/ZS/89j/AN80f2Uv/PY/981o0UcqD29TuZ39lL/z2P8A3zR/ZS/89j/3zWjRRyoPb1O5nf2Uv/PY/wDfNH9lL/z2P/fNaNFHKg9vU7md/ZS/89j/AN80f2Uv/PY/981o0UcqD29TuZ39lL/z2P8A3zR/ZS/89j/3zWjRRyoPb1O5nf2Uv/PY/wDfNRpoNtHPLOgRZpceZIsYDPjpk98Vq0UcqD29TuZ39lL/AM9j/wB80f2Uv/PY/wDfNaNFHKg9vU7md/ZS/wDPY/8AfNH9lL/z2P8A3zWjRRyoPb1O5nf2Uv8Az2P/AHzR/ZS/89j/AN81o0UcqD29TuZ39lL/AM9j/wB80f2Uv/PY/wDfNaNFHKg9vU7md/ZS/wDPY/8AfNVNT0F7vTpoIZl8xwNu8YHUema3KKHCLVio4mrGSknscMvhPW0RVFzZYAwPmb/4ml/4RXXP+fmy/Nv/AImu4orP2ETr/tWv5fccP/wiuuf8/Nl+bf8AxNH/AAiuuf8APzZfm3/xNdxRR7CIf2rX7L7jh/8AhFdc/wCfmy/Nv/iaP+EV1z/n5svzb/4mu4oo9hEP7Vr9l9xw/wDwiuuf8/Nl+bf/ABNR/wDCG6t9o+0eZp3n7NnmYO7bnOM7c4z2rvKKPYRD+1K/ZfccP/wiuuf8/Nl+bf8AxNH/AAiuuf8APzZfm3/xNdxRR7CIf2rX7L7jh/8AhFdc/wCfmy/Nv/iaP+EV1z/n5svzb/4mu4oo9hEP7Vr9l9xw/wDwiuuf8/Nl+bf/ABNH/CK65/z82X5t/wDE13FFHsIh/atfsvuOT0fwve2l7NPeTwEOm0eUSTnj1Arb/spf+ex/75rRoq404xVkc9XGVasuaTM7+yl/57H/AL5o/spf+ex/75rRop8qMvb1O5nf2Uv/AD2P/fNH9lL/AM9j/wB81o0UcqD29TuZ39lL/wA9j/3zR/ZS/wDPY/8AfNaNFHKg9vU7md/ZS/8APY/980f2Uv8Az2P/AHzWjRRyoPb1O5nf2Uv/AD2P/fNH9lL/AM9j/wB81o0UcqD29TuZ39lL/wA9j/3zTE0SGN5HQqryHc7KgBY4xk+vAArUoo5UP29TuZ39lL/z2P8A3zR/ZS/89j/3zWjRRyoXt6nczv7KX/nsf++aP7KX/nsf++a0aKOVB7ep3M7+yl/57H/vmj+yl/57H/vmtGijlQe3qdzO/spf+ex/75o/spf+ex/75rRoo5UHt6nczv7KX/nsf++aZJokMpQyFXMbbkLIDtb1Hoea1KKOVD9vU7md/ZS/89j/AN80f2Uv/PY/981o0UcqF7ep3M7+yl/57H/vmj+yl/57H/vmtGijlQe3qdzO/spf+ex/75o/spf+ex/75rRoo5UHt6nczv7KX/nsf++aP7KX/nsf++a0aKOVB7ep3M7+yl/57H/vmj+yl/57H/vmtGijlQe3qdzO/spf+ex/75o/spf+ex/75rRoo5UHt6nczv7KX/nsf++aP7KX/nsf++a0aKOVB7ep3M7+yl/57H/vmj+yl/57H/vmtGijlQe3qdzO/spf+ex/75o/spf+ex/75rRoo5UHt6nczv7KX/nsf++aP7KX/nsf++a0aKOVB7ep3M7+yl/57H/vmj+yl/57H/vmtGijlQe3qdzO/spf+ex/75o/spf+ex/75rRoo5UHt6nczv7KX/nsf++aP7KX/nsf++a0aKOVB7ep3M7+yl/57H/vmj+yl/57H/vmtGijlQe3qdzO/spf+ex/75o/spf+ex/75rRoo5UHt6nczv7KX/nsf++aP7KX/nsf++a0aKOVB7ep3M7+yl/57H/vmsrWYYbVoUdWkyCchtvp7GumqhqMMUhjLxoxGfvKD6UOC6F08RJSvLVHKb7b/ng//fz/AOtRvtv+eD/9/P8A61b32W3/AOeEX/fAo+y2/wDzwi/74FT7NnR9ch2f3mDvtv8Ang//AH8/+tXRnrUX2W3/AOeEX/fAqY9T9auEXE569aNS1kJXPeNf+Ram/wB9P510Nc941/5Fqb/fT+dWc5paN/yAtP8A+vaP/wBBFXqo6N/yAtP/AOvaP/0EVepCDvWxWP3rYpDCiiigAooooAKK568+1weKNK330zpO82YlO2MKEyBtHU+5z+HSmX17PdeIJrBYr2S3told47NxGzs2eS5ZcADsDznuBVqF7GTq2vps7HSUjfcP0rlbnV7addMgiu7i2sXWR52aRhL8hA8stktnccHByegPNWtCubj7dqNlKLgQoqTQLcyF5FVt3BJ5/hyASSM8+gbptK4lVTdv62ueIeDTF/wmekbUcH7UnJcHv9K+i5YBI2d2OMdK+cfBn/I6aP8A9fSfzr6TrzcErwdzky74H6lf7IP75/Kj7IP75/KrFFdnKj0Sv9kH98/lR9kH98/lVisnxHey2Wiy/ZT/AKZcEW9uOf8AWOcA/h1/ClJJK9hNpK7LMCQXMQlt7hJYySA8ZDDIODyPehEgklkijuEaSLAkRSCUyMjI7ZFNt4rbQNBSMti3soPmY9SFHJ+p61U8L200Wkfa7oEXd/IbuYH+Et0X8FCj8KOVc1v6/rf7iVJ6J7s0vsg/vn8qPsg/vn8qsUU+VFlf7IP75/Kj7IP75/KrFFHKgK/2Qf3z+VVr7RbHU7VrW/toLu3YgtFcRLIhI6cHitGijkQFVbJERUQhVUYChcAD0plvpdvZwLBbRxwQrnbHEgVRk5OAPck1doo5UFiv9kH98/lR9kH98/lViijlQFf7IP75/Kj7IP75/KrFFHKgK/2Qf3z+VH2Qf3z+VWKKOVAV/sg/vn8qPsg/vn8qsUUcqAr/AGQf3z+VH2Qf3z+VWKKOVAV/sg/vn8qPsg/vn8qsUUcqAr/ZB/fP5UfZB/fP5VYoo5UBX+yD++fypklhHNE8UuHjdSrIyghgeoI7irdFHJECpFp8UEKQwhY4o1CoiKAFA6ADsKf9kH98/lViijlQWK/2Qf3z+VH2Qf3z+VWKKOVAV/sg/vn8qPsg/vn8qsUUcqAr/ZB/fP5UfZB/fP5VYoo5UBX+yD++fyo+yD++fyqxRRyoDk9d8Oand6xbX+mz2yNDEU/fE9TnsAexqv8A2J4t/wCf7Tf/AB7/AOIrtKKyeHg3fUVji/7E8W/8/wBpv/j3/wARR/Yni3/n+03/AMe/+IrtKKX1aHd/eHKcX/Yni3/n+03/AMe/+Io/sTxb/wA/2m/+Pf8AxFdpRR9Wh3f3hynF/wBieLf+f7Tf/Hv/AIik/sPxb/z/AGm/+Pf/ABFdrRR9Wh3f3hynDW/hvxNaQJBbXGkwwoMLHGhVV+gCYFS/2J4t/wCf7Tf/AB7/AOIrtKKPq8e7+8OU4v8AsTxb/wA/2m/+Pf8AxFH9ieLf+f7Tf/Hv/iK7Sij6tDu/vDlOL/sTxb/z/ab/AOPf/EUf2J4t/wCf7Tf/AB7/AOIrtKKPq0O7+8OU4v8AsTxb/wA/2m/+Pf8AxFH9ieLf+f7Tf/Hv/iK7Sij6tDu/vDlOL/sTxb/z/ab/AOPf/EUf2J4t/wCf7Tf/AB7/AOIrtKKPq0O7+8OU4v8AsTxb/wA/2m/+Pf8AxFH9ieLf+f7Tf/Hv/iK7Sij6tDu/vDlOL/sTxb/z/ab/AOPf/EUf2J4t/wCf7Tf/AB7/AOIrtKKPq0O7+8OU4v8AsTxb/wA/2m/+Pf8AxFH9ieLf+f7Tf/Hv/iK7Sij6tDu/vDlOKOheLGBBvdNIPBBDf/EVjr8N72JX+zWnh61ZxtaS2thExGQcZWMHGQK9Noo+rQ7v7w5Slb2Jitoo2f5kQKcDjIFS/ZB/fP5VYorbkiMr/ZB/fP5UfZB/fP5VYoo5UBX+yD++fyo+yD++fyqxRRyoCv8AZB/fP5UfZB/fP5VYoo5UBX+yD++fyo+yD++fyqxRRyoCv9kH98/lR9kH98/lViijlQFOXToZ0CTKkihgwDoCAQcg89weak+yD++fyqxRRyoCv9kH98/lR9kH98/lViijlQFf7IP75/Kj7IP75/KrFFHKgK/2Qf3z+VH2Qf3z+VWKKOVAV/sg/vn8qPsg/vn8qsUUcqAr/ZB/fP5VHFp0MClYVSNWYsQiAAknJPHcmrlFHIgK/wBkH98/lR9kH98/lViijlQFf7IP75/Kj7IP75/KrFFHKgK/2Qf3z+VH2Qf3z+VWKKOVAV/sg/vn8qPsg/vn8qsUUcqAr/ZB/fP5UVYoo5UB/9k= +
\ No newline at end of file diff --git a/Scripts/Batch Files/build-canary.cmd b/Scripts/Batch Files/build-canary.cmd new file mode 100644 index 000000000..6a06e0229 --- /dev/null +++ b/Scripts/Batch Files/build-canary.cmd @@ -0,0 +1,63 @@ +@echo off + +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build + +echo "Unable to detect suitable environment. Check if VS 2022 is installed." + +pause +goto exitbatch + +:vs17prev +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin +goto build + +:vs17ent +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin +goto build + +:vs17pro +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin +goto build + +:vs17com +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin +goto build + +:vs17build +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin +goto build + +:build +for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( + set "zone=%%A" +) + +@echo Started: %date% %time% %zone% +@echo +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" /t:%targets% canary.proj /fl /flp:logfile=../Logs/build-log.log /bl:../Logs/build-log.binlog + +@echo Build Completed: %date% %time% %zone% + +pause + +@echo Do you want to return to complete another task? (Y/N) +set /p answer="Enter input: " +if %answer%==Y (goto run) +if %answer%==y (goto run) +if %answer%==N exit +if %answer%==n exit + +@echo Invalid input, please try again. + +:run +cd .. + +run.cmd + +:exitbatch \ No newline at end of file diff --git a/Scripts/Batch Files/build-installer.cmd b/Scripts/Batch Files/build-installer.cmd new file mode 100644 index 000000000..73469c7e5 --- /dev/null +++ b/Scripts/Batch Files/build-installer.cmd @@ -0,0 +1,63 @@ +@echo off + +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build + +echo "Unable to detect suitable environment. Check if VS 2022 is installed." + +pause +goto exitbatch + +:vs17prev +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin +goto build + +:vs17ent +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin +goto build + +:vs17pro +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin +goto build + +:vs17com +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin +goto build + +:vs17build +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin +goto build + +:build +for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( + set "zone=%%A" +) + +@echo Started: %date% %time% %zone% +@echo +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" /t:%targets% ../Project Files/installer.proj /fl /flp:logfile=build.log + +@echo Build Completed: %date% %time% %zone% + +pause + +@echo Do you want to return to complete another task? (Y/N) +set /p answer="Enter input: " +if %answer%==Y (goto run) +if %answer%==y (goto run) +if %answer%==N exit +if %answer%==n exit + +@echo Invalid input, please try again. + +:run +cd .. + +run.cmd + +:exitbatch \ No newline at end of file diff --git a/Scripts/Batch Files/build-nightly-custom.cmd b/Scripts/Batch Files/build-nightly-custom.cmd new file mode 100644 index 000000000..4321af705 --- /dev/null +++ b/Scripts/Batch Files/build-nightly-custom.cmd @@ -0,0 +1,47 @@ +@echo off + +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build + +echo "Unable to detect suitable environment. Check if VS 2022 is installed." + +pause +goto exitbatch + +:vs17prev +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin +goto build + +:vs17ent +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin +goto build + +:vs17pro +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin +goto build + +:vs17com +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin +goto build + +:vs17build +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin +goto build + +:build +for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( + set "zone=%%A" +) + +@echo Started: %date% %time% %zone% +@echo +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" /t:%targets% nightly.proj /fl /flp:logfile=build.log + +@echo Build Completed: %date% %time% %zone% + +:exitbatch \ No newline at end of file diff --git a/Scripts/Batch Files/build-nightly.cmd b/Scripts/Batch Files/build-nightly.cmd new file mode 100644 index 000000000..c57aea853 --- /dev/null +++ b/Scripts/Batch Files/build-nightly.cmd @@ -0,0 +1,67 @@ +@echo off + +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build + +echo "Unable to detect suitable environment. Check if VS 2022 is installed." + +pause +goto exitbatch + +:vs17prev +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin +goto build + +:vs17ent +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin +goto build + +:vs17pro +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin +goto build + +:vs17com +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin +goto build + +:vs17build +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin +goto build + +:build +for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( + set "zone=%%A" +) + +@echo Started: %date% %time% %zone% +@echo +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" -t:%targets% ../Project-Files/nightly.proj /fl /flp:logfile=../../Logs/build-log.log /bl:../../Logs/build-log.binlog + +:: -t:rebuild + +::-graphBuild:True + +@echo Build Completed: %date% %time% %zone% + +pause + +@echo Do you want to return to complete another task? (Y/N) +set /p answer="Enter input: " +if %answer%==Y (goto run) +if %answer%==y (goto run) +if %answer%==N exit +if %answer%==n exit + +@echo Invalid input, please try again. + +:run +cd .. + +run.cmd + +:exitbatch \ No newline at end of file diff --git a/Scripts/Batch Files/build-stable.cmd b/Scripts/Batch Files/build-stable.cmd new file mode 100644 index 000000000..bea7049f8 --- /dev/null +++ b/Scripts/Batch Files/build-stable.cmd @@ -0,0 +1,66 @@ +@echo off + +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build + +echo "Unable to detect suitable environment. Check if VS 2022 is installed." +goto exitbatch + +goto end + +:vs17prev +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin +goto build + +:vs17ent +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin +goto build + +:vs17pro +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin +goto build + +:vs17com +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin +goto build + +:vs17build +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin +goto build + +:build +for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( + set "zone=%%A" +) + +echo Started: %date% %time% %zone% +echo +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=../Logs/build-log.log /bl:../Logs/build-log.binlog + +echo Build Completed: %date% %time% %zone% + +pause + +@echo Do you want to return to complete another task? (Y/N) +set /p answer="Enter input: " +if %answer%==Y (goto run) +if %answer%==y (goto run) +if %answer%==N exit +if %answer%==n exit + +@echo Invalid input, please try again. + +:run +cd .. + +run.cmd + +:end +pause + +:exitbatch \ No newline at end of file diff --git a/Scripts/Batch Files/buildsolution.cmd b/Scripts/Batch Files/buildsolution.cmd new file mode 100644 index 000000000..45f76b461 --- /dev/null +++ b/Scripts/Batch Files/buildsolution.cmd @@ -0,0 +1,111 @@ +echo off + +echo Do you want to build using Visual Studio 2019 or 2022? (2019/2022) +set INPUT= +set /P INPUT=Type 2019 or 2022: %=% +if /I "%INPUT%"=="2019" goto vs2019build +if /I "%INPUT%"=="2022" goto vs2022build + +:vs2019build +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin" goto vs16prev +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin" goto vs16ent +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin" goto vs16pro +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin" goto vs16com +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin" goto vs16build + +echo "Unable to detect suitable environment. Check if VS 2019 is installed." +goto exitbatch + +pause + +:vs16prev +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin +goto build2019 + +:vs16ent +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin +goto build2019 + +:vs16pro +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin +goto build2019 + +:vs16com +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin +goto build2019 + +:vs16build +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin +goto build2019 + +:build2019 +@echo Started: %date% %time% +@echo +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=build.log + +:vs2022build +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build + +echo "Unable to detect suitable environment. Check if VS 2022 is installed." +goto exitbatch +pause + +:vs17prev +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin +goto build2022 + +:vs17ent +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin +goto build2022 + +:vs17pro +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin +goto build2022 + +:vs17com +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin +goto build2022 + +:vs17build +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin +goto build2022 + +:build2022 +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=build.log + +echo Do you now want to create NuGet packages? (y/n) +set INPUT= +set /PINPUT=Type input: %=% +if /I "%INPUT%"=="y" goto createpackages +if /I "%INPUT%"=="n" goto break + +:createpackages +echo Do you want to pack using Visual Studio 2019 or 2022? (2019/2022) +set INPUT= +set /P INPUT=Type 2019 or 2022: %=% +if /I "%INPUT%"=="2019" goto vs2019pack +if /I "%INPUT%"=="2022" goto vs2022pack + +:vs2019pack +build-2019.cmd Pack + +@echo Build Completed: %date% %time% + +:vs2022pack +build-2022.cmd Pack + +@echo Build Completed: %date% %time% + +:break +pause +@echo Build Completed: %date% %time% + +:exitbatch \ No newline at end of file diff --git a/Scripts/Batch Files/createnightlyzip.cmd b/Scripts/Batch Files/createnightlyzip.cmd new file mode 100644 index 000000000..b1365ee0e --- /dev/null +++ b/Scripts/Batch Files/createnightlyzip.cmd @@ -0,0 +1 @@ +build.cmd CreateNightlyZip \ No newline at end of file diff --git a/Scripts/Batch Files/debug.cmd b/Scripts/Batch Files/debug.cmd new file mode 100644 index 000000000..199738931 --- /dev/null +++ b/Scripts/Batch Files/debug.cmd @@ -0,0 +1,47 @@ +@echo off + +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin" goto vs16prev +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin" goto vs16ent +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin" goto vs16pro +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin" goto vs16com +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin" goto vs16build + +echo "Unable to detect suitable environment. Check if VS 2019 is installed." +goto exitbatch + +pause + +:vs16prev +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin +goto build + +:vs16ent +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin +goto build + +:vs16pro +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin +goto build + +:vs16com +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin +goto build + +:vs16build +set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin +goto build + +:build +@echo Started: %date% %time% +@echo +set targets=Build +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=../Logs/debug-log.log + +@echo Build Completed: %date% %time% +@echo +echo Plese alter file '{Path}\Directory.Build.props' before executing 'publish.cmd' script! + +pause + +:exitbatch \ No newline at end of file diff --git a/publish-to-github.cmd b/Scripts/Batch Files/publish-to-github.cmd similarity index 100% rename from publish-to-github.cmd rename to Scripts/Batch Files/publish-to-github.cmd diff --git a/publish.cmd b/Scripts/Batch Files/publish.cmd similarity index 100% rename from publish.cmd rename to Scripts/Batch Files/publish.cmd diff --git a/purge.cmd b/Scripts/Batch Files/purge.cmd similarity index 78% rename from purge.cmd rename to Scripts/Batch Files/purge.cmd index 471b15510..4abc81735 100644 --- a/purge.cmd +++ b/Scripts/Batch Files/purge.cmd @@ -25,13 +25,17 @@ echo Deleted the 'Krypton.Toolkit\obj' folder echo Deleting the 'Krypton.Workspace\obj' folder rd /s /q "Source\Krypton Components\Krypton.Workspace\obj" echo Deleted the 'Krypton.Workspace\obj' folder -if exist "Scripts\build.log" ( goto deletebuildfile ) +if exist "Logs\build-log.log" ( goto deletebuildfile ) +if exist "Logs\build-log.binlog" ( goto deletebuildfile) if exist "Scripts\debug.log" ( goto deletedebugfile ) :deletebuildfile -echo Deleting the 'build.log' file -del /f "Scripts\build.log" -echo Deleted the 'build.log' file +echo Deleting the 'build-log.log' file +del /f "Logs\build-log.log" +echo Deleted the 'build-log.log' file +echo Deleting the 'build-log.binlog' file +del /f "Logs\build-log.binlog" +echo Deleted the 'build-log.binlog' file :deletedebugfile echo Deleting the 'debug.log' file diff --git a/Scripts/Batch Files/rebuild-build-nightly.cmd b/Scripts/Batch Files/rebuild-build-nightly.cmd new file mode 100644 index 000000000..ed138f0ee --- /dev/null +++ b/Scripts/Batch Files/rebuild-build-nightly.cmd @@ -0,0 +1,65 @@ +@echo off + +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin" goto vs17ent +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin" goto vs17pro +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin" goto vs17com +if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build + +echo "Unable to detect suitable environment. Check if VS 2022 is installed." + +pause +goto exitbatch + +:vs17prev +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin +goto build + +:vs17ent +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin +goto build + +:vs17pro +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin +goto build + +:vs17com +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin +goto build + +:vs17build +set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin +goto build + +:build +for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( + set "zone=%%A" +) + +@echo Rebuild Started: %date% %time% %zone% +@echo +set targets=Rebuild +if not "%~1" == "" set targets=%~1 +"%msbuildpath%\msbuild.exe" -t:%targets% nightly.proj /fl /flp:logfile=build.log -graphBuild:True + +:: -t:rebuild + +@echo Build Completed: %date% %time% %zone% + +pause + +@echo Do you want to return to complete another task? (Y/N) +set /p answer="Enter input: " +if %answer%==Y (goto run) +if %answer%==y (goto run) +if %answer%==N exit +if %answer%==n exit + +@echo Invalid input, please try again. + +:run +cd .. + +run.cmd + +:exitbatch \ No newline at end of file diff --git a/Scripts/Batch Files/update-nuget.cmd b/Scripts/Batch Files/update-nuget.cmd new file mode 100644 index 000000000..d64ec95d1 --- /dev/null +++ b/Scripts/Batch Files/update-nuget.cmd @@ -0,0 +1,71 @@ +@echo off + +cls + +echo 1. Update NuGet client +echo 2. Update NuGet client (use 'Self' switch) +echo 3. Go back to main menu +echo 4. End + +set /p answer="Enter number (1 - 4): " +if %answer%==1 (goto updatenuget) +if %answer%==2 (goto updatenugetself) +if %answer%==3 (goto backtorun) +if %answer%==4 (goto end) + +@echo Invalid input, please try again. + +pause + +goto setmenu + +:setmenu + +cls + +echo 1. Update NuGet client +echo 2. Update NuGet client (use 'Self' switch) +echo 3. Go back to main menu +echo 4. End + +set /p answer="Enter number (1 - 4): " +if %answer%==1 (goto updatenuget) +if %answer%==2 (goto updatenugetself) +if %answer%==3 (goto backtorun) +if %answer%==4 (goto end) + +@echo Invalid input, please try again. + +pause + +goto setmenu + +:backtorun +cd .. + +run.cmd + +:updatenuget +cls + +nuget update + +pause + +goto setmenu + +:updatenugetself +cls + +nuget update -Self + +pause + +goto setmenu + +:end +@echo Exiting the build system, have a good day. Bye! + +pause + +exit \ No newline at end of file diff --git a/Scripts/Project-Files/build.proj b/Scripts/Project-Files/build.proj new file mode 100644 index 000000000..370450156 --- /dev/null +++ b/Scripts/Project-Files/build.proj @@ -0,0 +1,77 @@ + + + + + $(MSBuildProjectDirectory) + Release + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Scripts/Project-Files/canary.proj b/Scripts/Project-Files/canary.proj new file mode 100644 index 000000000..804bae8ef --- /dev/null +++ b/Scripts/Project-Files/canary.proj @@ -0,0 +1,75 @@ + + + + + $(MSBuildProjectDirectory) + Canary + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([System.DateTime]::Now.ToString('yyyyMMdd')) + + + + + + + + \ No newline at end of file diff --git a/Scripts/Project-Files/debug.proj b/Scripts/Project-Files/debug.proj new file mode 100644 index 000000000..9a6a430d1 --- /dev/null +++ b/Scripts/Project-Files/debug.proj @@ -0,0 +1,29 @@ + + + + + $(MSBuildProjectDirectory) + Debug + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Scripts/Project-Files/installer.proj b/Scripts/Project-Files/installer.proj new file mode 100644 index 000000000..c8f70dbbb --- /dev/null +++ b/Scripts/Project-Files/installer.proj @@ -0,0 +1,75 @@ + + + + + $(MSBuildProjectDirectory) + Installer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([System.DateTime]::Now.ToString('yyyyMMdd')) + + + + + + + + \ No newline at end of file diff --git a/Scripts/Project-Files/nightly.proj b/Scripts/Project-Files/nightly.proj new file mode 100644 index 000000000..821f6c7a8 --- /dev/null +++ b/Scripts/Project-Files/nightly.proj @@ -0,0 +1,77 @@ + + + + + $(MSBuildProjectDirectory) + Nightly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $([System.DateTime]::Now.ToString('yyyyMMdd')) + + + + + + + + \ No newline at end of file diff --git a/Scripts/build-canary.cmd b/Scripts/build-canary.cmd index 758a120ce..6733ce509 100644 --- a/Scripts/build-canary.cmd +++ b/Scripts/build-canary.cmd @@ -9,6 +9,7 @@ if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current echo "Unable to detect suitable environment. Check if VS 2022 is installed." pause +goto exitbatch :vs17prev set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin @@ -35,17 +36,22 @@ for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( set "zone=%%A" ) +@echo Started to build Canary release +@echo: @echo Started: %date% %time% %zone% -@echo +@echo: set targets=Build if not "%~1" == "" set targets=%~1 -"%msbuildpath%\msbuild.exe" /t:%targets% canary.proj /fl /flp:logfile=build.log - -@echo Build Completed: %date% %time% %zone% - +"%msbuildpath%\msbuild.exe" /t:%targets% canary.proj /fl /flp:logfile=../Logs/canary-build-log.log /bl:../Logs/canary-build-log.binlog /clp:Summary;ShowTimestamp /v:quiet +@echo: +@echo Canary release build completed: %date% %time% %zone% +@echo: +@echo You can find the build Logs in ../Logs +@echo: pause @echo Do you want to return to complete another task? (Y/N) +@echo: set /p answer="Enter input: " if %answer%==Y (goto run) if %answer%==y (goto run) @@ -55,6 +61,4 @@ if %answer%==n exit @echo Invalid input, please try again. :run -cd .. - -run.cmd \ No newline at end of file +main-menu.cmd \ No newline at end of file diff --git a/Scripts/build-installer.cmd b/Scripts/build-installer.cmd index a61724fe6..7ebb5a553 100644 --- a/Scripts/build-installer.cmd +++ b/Scripts/build-installer.cmd @@ -9,6 +9,7 @@ if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current echo "Unable to detect suitable environment. Check if VS 2022 is installed." pause +goto exitbatch :vs17prev set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin @@ -39,7 +40,7 @@ for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( @echo set targets=Build if not "%~1" == "" set targets=%~1 -"%msbuildpath%\msbuild.exe" /t:%targets% installer.proj /fl /flp:logfile=build.log +"%msbuildpath%\msbuild.exe" /t:%targets% ../Project Files/installer.proj /fl /flp:logfile=../Logs/installer-build-log.log /bl:../Logs/installer-build-log.binlog /clp:Summary;ShowTimestamp /v:quiet @echo Build Completed: %date% %time% %zone% @@ -55,6 +56,4 @@ if %answer%==n exit @echo Invalid input, please try again. :run -cd .. - -run.cmd \ No newline at end of file +main-menu.cmd \ No newline at end of file diff --git a/Scripts/build-nightly-custom.cmd b/Scripts/build-nightly-custom.cmd index 17ce9bb01..673601fa4 100644 --- a/Scripts/build-nightly-custom.cmd +++ b/Scripts/build-nightly-custom.cmd @@ -9,6 +9,7 @@ if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current echo "Unable to detect suitable environment. Check if VS 2022 is installed." pause +goto exitbatch :vs17prev set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin @@ -41,4 +42,7 @@ set targets=Build if not "%~1" == "" set targets=%~1 "%msbuildpath%\msbuild.exe" /t:%targets% nightly.proj /fl /flp:logfile=build.log -@echo Build Completed: %date% %time% %zone% \ No newline at end of file +@echo Build Completed: %date% %time% %zone% + +:exitbatch +main-menu.cmd \ No newline at end of file diff --git a/Scripts/build-nightly.cmd b/Scripts/build-nightly.cmd index 1e768f5c9..e1f4d6533 100644 --- a/Scripts/build-nightly.cmd +++ b/Scripts/build-nightly.cmd @@ -9,6 +9,7 @@ if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current echo "Unable to detect suitable environment. Check if VS 2022 is installed." pause +goto exitbatch :vs17prev set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin @@ -35,21 +36,26 @@ for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( set "zone=%%A" ) +@echo Started to build Nightly release +@echo: @echo Started: %date% %time% %zone% -@echo +@echo: set targets=Build if not "%~1" == "" set targets=%~1 -"%msbuildpath%\msbuild.exe" -t:%targets% nightly.proj /fl /flp:logfile=build.log - +"%msbuildpath%\msbuild.exe" -t:%targets% nightly.proj /fl /flp:logfile=../Logs/nightly-build-log.log /bl:../Logs/nightly-build-log.binlog /clp:Summary;ShowTimestamp /v:quiet +@echo: :: -t:rebuild ::-graphBuild:True -@echo Build Completed: %date% %time% %zone% - +@echo Nightly release build completed: %date% %time% %zone% +@echo: +@echo You can find the build Logs in ../Logs +@echo: pause @echo Do you want to return to complete another task? (Y/N) +@echo: set /p answer="Enter input: " if %answer%==Y (goto run) if %answer%==y (goto run) @@ -59,6 +65,4 @@ if %answer%==n exit @echo Invalid input, please try again. :run -cd .. - -run.cmd \ No newline at end of file +main-menu.cmd \ No newline at end of file diff --git a/Scripts/build-stable.cmd b/Scripts/build-stable.cmd index 653b1971b..db95a384f 100644 --- a/Scripts/build-stable.cmd +++ b/Scripts/build-stable.cmd @@ -35,17 +35,22 @@ for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( set "zone=%%A" ) -echo Started: %date% %time% %zone% -echo +@echo Started to build Stable release +@echo: +@echo Started: %date% %time% %zone% +@echo: set targets=Build if not "%~1" == "" set targets=%~1 -"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=build.log - -echo Build Completed: %date% %time% %zone% - +"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=../Logs/stable-build-log.log /bl:../Logs/stable-build-log.binlog /clp:Summary;ShowTimestamp /v:quiet +@echo: +@echo Stable release build completed: %date% %time% %zone% +@echo: +@echo You can find the build Logs in ../Logs +@echo: pause @echo Do you want to return to complete another task? (Y/N) +@echo: set /p answer="Enter input: " if %answer%==Y (goto run) if %answer%==y (goto run) @@ -55,9 +60,7 @@ if %answer%==n exit @echo Invalid input, please try again. :run -cd .. - -run.cmd +main-menu.cmd :end pause \ No newline at end of file diff --git a/Scripts/buildsolution.cmd b/Scripts/buildsolution.cmd index 609e59267..85150f7cb 100644 --- a/Scripts/buildsolution.cmd +++ b/Scripts/buildsolution.cmd @@ -17,6 +17,8 @@ echo "Unable to detect suitable environment. Check if VS 2019 is installed." pause +goto exitbatch + :vs16prev set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin goto build2019 @@ -42,7 +44,7 @@ goto build2019 @echo set targets=Build if not "%~1" == "" set targets=%~1 -"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=build.log +"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=../Logs/solution-build-log.log /bl:solution-build-log.binlog /clp:Summary;ShowTimestamp /v:quiet :vs2022build if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin" goto vs17prev @@ -52,7 +54,7 @@ if exist "%ProgramFiles%\Microsoft Visual Studio\2022\Community\MSBuild\Current\ if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin" goto vs17build echo "Unable to detect suitable environment. Check if VS 2022 is installed." - +goto exitbatch pause :vs17prev @@ -105,4 +107,6 @@ build-2022.cmd Pack :break pause -@echo Build Completed: %date% %time% \ No newline at end of file +@echo Build Completed: %date% %time% + +:exitbatch \ No newline at end of file diff --git a/Scripts/debug.cmd b/Scripts/debug.cmd index 0b7ca5444..d7b3995f5 100644 --- a/Scripts/debug.cmd +++ b/Scripts/debug.cmd @@ -9,6 +9,7 @@ if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools\MSBuild\Cu echo "Unable to detect suitable environment. Check if VS 2019 is installed." pause +goto exitbatch :vs16prev set msbuildpath=%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Preview\MSBuild\Current\Bin @@ -35,10 +36,12 @@ goto build @echo set targets=Build if not "%~1" == "" set targets=%~1 -"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=build.log +"%msbuildpath%\msbuild.exe" /t:%targets% build.proj /fl /flp:logfile=../Logs/debug-build-log.log /bl:../Logs/debug-build-log.binlog /clp:Summary;ShowTimestamp /v:quiet @echo Build Completed: %date% %time% @echo echo Plese alter file '{Path}\Directory.Build.props' before executing 'publish.cmd' script! -pause \ No newline at end of file +pause + +:exitbatch \ No newline at end of file diff --git a/Scripts/main-menu.cmd b/Scripts/main-menu.cmd new file mode 100644 index 000000000..e5bb59c79 --- /dev/null +++ b/Scripts/main-menu.cmd @@ -0,0 +1,5 @@ +@echo off + +cd .. + +run.cmd \ No newline at end of file diff --git a/Scripts/publish-to-github.cmd b/Scripts/publish-to-github.cmd new file mode 100644 index 000000000..7855b0267 --- /dev/null +++ b/Scripts/publish-to-github.cmd @@ -0,0 +1,3 @@ +@echo off + +dotnet nuget push "../bin/Release/*.nupkg" --source "github" \ No newline at end of file diff --git a/Scripts/publish.cmd b/Scripts/publish.cmd new file mode 100644 index 000000000..557f9ab00 --- /dev/null +++ b/Scripts/publish.cmd @@ -0,0 +1,4 @@ +@REM This command build the toolkit, create nuget packages and tries to upload them on nuget.org +@REM It requires that you have a valid NUGET API key saved on your environment +build.cmd Pack +build.cmd Push \ No newline at end of file diff --git a/Scripts/purge.cmd b/Scripts/purge.cmd new file mode 100644 index 000000000..393a8fef0 --- /dev/null +++ b/Scripts/purge.cmd @@ -0,0 +1,35 @@ +@echo off + +echo You are about to delete the Bin folder; do you want to continue? (Y/N) +set INPUT= +set /P INPUT=Type input: %=% +if /I "%INPUT%"=="y" goto yes +if /I "%INPUT%"=="n" goto no + +:yes +echo Deleting the 'Bin' folder +rd /s /q "..\Bin" +echo Deleted the 'Bin' folder +echo Deleting the 'Krypton.Docking\obj' folder +rd /s /q "..\Source\Krypton Components\Krypton.Docking\obj" +echo Deleted the 'Krypton.Docking\obj' folder +echo Deleting the 'Krypton.Navigator\obj' folder +rd /s /q "..\Source\Krypton Components\Krypton.Navigator\obj" +echo Deleted the 'Krypton.Navigator\obj' folder +echo Deleting the 'Krypton.Ribbon\obj' folder +rd /s /q "..\Source\Krypton Components\Krypton.Ribbon\obj" +echo Deleted the 'Krypton.Ribbon\obj' folder +echo Deleting the 'Krypton.Toolkit\obj' folder +rd /s /q "..\Source\Krypton Components\Krypton.Toolkit\obj" +echo Deleted the 'Krypton.Toolkit\obj' folder +echo Deleting the 'Krypton.Workspace\obj' folder +rd /s /q "..\Source\Krypton Components\Krypton.Workspace\obj" +echo Deleted the 'Krypton.Workspace\obj' folder +if exist "..\Logs" ( goto deletelogsdirectory ) else echo Directory 'Logs' not found + +:deletelogsdirectory +echo Deleting the 'Logs' directory +del /f "..\Logs" + +:no +pause \ No newline at end of file diff --git a/Scripts/rebuild-build-nightly.cmd b/Scripts/rebuild-build-nightly.cmd index 6c21f8e40..010454136 100644 --- a/Scripts/rebuild-build-nightly.cmd +++ b/Scripts/rebuild-build-nightly.cmd @@ -9,6 +9,7 @@ if exist "%ProgramFiles%\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current echo "Unable to detect suitable environment. Check if VS 2022 is installed." pause +goto exitbatch :vs17prev set msbuildpath=%ProgramFiles%\Microsoft Visual Studio\2022\Preview\MSBuild\Current\Bin @@ -39,7 +40,7 @@ for /f "tokens=* usebackq" %%A in (`tzutil /g`) do ( @echo set targets=Rebuild if not "%~1" == "" set targets=%~1 -"%msbuildpath%\msbuild.exe" -t:%targets% nightly.proj /fl /flp:logfile=build.log -graphBuild:True +"%msbuildpath%\msbuild.exe" -t:%targets% nightly.proj /fl /flp:logfile=../Logs/nightly-build-log.log /bl:../Logs/nightly-build-log.binlog /clp:Summary;ShowTimestamp /v:quiet :: -t:rebuild @@ -59,4 +60,6 @@ if %answer%==n exit :run cd .. -run.cmd \ No newline at end of file +run.cmd + +:exitbatch \ No newline at end of file diff --git a/Source/.editorconfig b/Source/.editorconfig index 9707c8228..a4bcaec46 100644 --- a/Source/.editorconfig +++ b/Source/.editorconfig @@ -46,8 +46,106 @@ dotnet_diagnostic.CA1822.severity = None dotnet_diagnostic.CS8073.severity = None #Warning CS8618 Non-nullable field '_panelMessage' must contain a non-null value when exiting constructor. Consider declaring the field as nullable. -dotnet_diagnostic.CS8618.severity = None +dotnet_diagnostic.CS8618.severity = suggestion #Warning CS8622 Nullability of reference types in type of parameter 'sender' of #### -dotnet_diagnostic.CS8622.severity = None - +dotnet_diagnostic.CS8622.severity = Warning +csharp_indent_labels = one_less_than_current +csharp_using_directive_placement = outside_namespace:silent +csharp_prefer_simple_using_statement = true:suggestion +csharp_prefer_braces = true:silent +csharp_style_namespace_declarations = block_scoped:silent +csharp_style_prefer_method_group_conversion = true:silent +csharp_style_prefer_top_level_statements = true:silent +csharp_style_prefer_primary_constructors = true:suggestion +csharp_prefer_system_threading_lock = true:suggestion +csharp_style_expression_bodied_methods = false:silent +csharp_style_expression_bodied_constructors = false:silent +csharp_style_expression_bodied_operators = false:silent +csharp_style_expression_bodied_properties = true:silent +csharp_style_expression_bodied_indexers = true:silent +csharp_style_expression_bodied_accessors = true:silent +csharp_style_expression_bodied_lambdas = true:silent +csharp_style_expression_bodied_local_functions = false:silent +csharp_style_throw_expression = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_allow_embedded_statements_on_same_line_experimental = true:silent +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = true:silent +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:silent +csharp_style_prefer_switch_expression = true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +dotnet_diagnostic.WFO1000.severity = suggestion + + +[*.{cs,vb}] +#### Naming styles #### + +# Naming rules + +dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion +dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface +dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i + +dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.types_should_be_pascal_case.symbols = types +dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case + +dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion +dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members +dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case + +# Symbol specifications + +dotnet_naming_symbols.interface.applicable_kinds = interface +dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.interface.required_modifiers = + +dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum +dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.types.required_modifiers = + +dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method +dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected +dotnet_naming_symbols.non_field_members.required_modifiers = + +# Naming styles + +dotnet_naming_style.begins_with_i.required_prefix = I +dotnet_naming_style.begins_with_i.required_suffix = +dotnet_naming_style.begins_with_i.word_separator = +dotnet_naming_style.begins_with_i.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.pascal_case.required_prefix = +dotnet_naming_style.pascal_case.required_suffix = +dotnet_naming_style.pascal_case.word_separator = +dotnet_naming_style.pascal_case.capitalization = pascal_case +dotnet_style_operator_placement_when_wrapping = beginning_of_line +tab_width = 4 +indent_size = 4 +end_of_line = crlf +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion +dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion +dotnet_style_prefer_auto_properties = true:silent +dotnet_style_object_initializer = true:suggestion +dotnet_style_prefer_conditional_expression_over_assignment = true:silent +dotnet_style_prefer_conditional_expression_over_return = true:silent +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_predefined_type_for_member_access = true:silent +dotnet_style_allow_multiple_blank_lines_experimental = true:silent +dotnet_style_allow_statement_immediately_after_block_experimental = true:silent +dotnet_style_qualification_for_field = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_collection_initializer = true:suggestion +dotnet_style_prefer_simplified_boolean_expressions = true:suggestion +dotnet_style_qualification_for_event = false:silent diff --git a/Source/Krypton Components/Directory.Build.props b/Source/Krypton Components/Directory.Build.props index e1a3ad266..48fd53e8b 100644 --- a/Source/Krypton Components/Directory.Build.props +++ b/Source/Krypton Components/Directory.Build.props @@ -1,12 +1,18 @@ + + + + preview + + true en Phil Wright (A.K.A ComponentFactory), Peter Wagner (A.K.A Wagnerp) and Simon Coghlan (A.K.A Smurf-IV) - © Component Factory Pty Ltd, 2006 - 2016. Then modifications by Peter Wagner (aka Wagnerp) and Simon Coghlan (aka Smurf-IV) 2017 - 2023. All rights reserved. + © Component Factory Pty Ltd, 2006 - 2016. Then modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac and Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. @@ -36,12 +42,14 @@ https://github.com/Krypton-Suite/Standard-Toolkit Krypton Canary.png - Peter William Wagner & Simon Coghlan & Thomas Bolon + Peter William Wagner & Simon Coghlan & Giduac & Ahmed Abdelhameed & Thomas Bolon License.md True Krypton ComponentFactory WinForms Themes Controls DataGrid Ribbon Workspace Tabs .NET Toolkit Get updates here: https://github.com/Krypton-Suite/Standard-Toolkit https://github.com/Krypton-Suite/Standard-Toolkit + true + true @@ -66,12 +74,14 @@ https://github.com/Krypton-Suite/Standard-Toolkit Krypton Nightly.png - Peter William Wagner & Simon Coghlan & Thomas Bolon + Peter William Wagner & Simon Coghlan & Giduac & Ahmed Abdelhameed & Thomas Bolon License.md True Krypton ComponentFactory WinForms Themes Controls DataGrid Ribbon Workspace Tabs .Net Toolkit Get updates here: https://github.com/Krypton-Suite/Standard-Toolkit https://github.com/Krypton-Suite/Standard-Toolkit + true + true @@ -99,13 +109,15 @@ https://github.com/Krypton-Suite/Standard-Toolkit Krypton Stable.png - Peter William Wagner & Simon Coghlan & Thomas Bolon + Peter William Wagner & Simon Coghlan & Giduac & Ahmed Abdelhameed & Thomas Bolon License.md README.md True Krypton ComponentFactory WinForms Themes Controls DataGrid Ribbon Workspace Tabs .NET Toolkit Get updates here: https://github.com/Krypton-Suite/Standard-Toolkit https://github.com/Krypton-Suite/Standard-Toolkit + true + true diff --git a/Source/Krypton Components/Directory.Build.targets b/Source/Krypton Components/Directory.Build.targets index 6321644e4..64ab48f97 100644 --- a/Source/Krypton Components/Directory.Build.targets +++ b/Source/Krypton Components/Directory.Build.targets @@ -11,21 +11,21 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision)-beta + 90.$(Minor).$(Build).$(Revision)-beta - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) preview @@ -44,21 +44,21 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision)-alpha + 90.$(Minor).$(Build).$(Revision)-alpha - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) preview @@ -77,19 +77,19 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) preview @@ -103,20 +103,20 @@ $([System.DateTime]::Now.get_DayOfYear().ToString()) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) - 80.$(Minor).$(Build).$(Revision) + 90.$(Minor).$(Build).$(Revision) preview @@ -130,7 +130,7 @@ true en Peter Wagner (A.K.A Wagnerp) and Simon Coghlan (A.K.A Smurf-IV), Phil Wright (A.K.A ComponentFactory) - © Krypton Suite (Peter Wagner (Wagnerp) and Simon Coghlan (Smurf-IV)), 2017 - 2023. Component Factory Pty Ltd (Phil Wright), 2006 - 2016. All rights reserved. + © Krypton Suite (Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac and Ahmed Abdelhameed) 2017 - 2024. Component Factory Pty Ltd (Phil Wright), 2006 - 2016. All rights reserved. @@ -139,7 +139,7 @@ $(PackageId).Canary - An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 8. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/canary/Documents/Help/Changelog.md This package is for those who want to try out the latest features before deployment. + An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/canary/Documents/Help/Changelog.md This package is for those who want to try out the latest features before deployment. @@ -147,7 +147,7 @@ $(PackageId).Nightly - An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 8. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/alpha/Documents/Help/Changelog.md This package is for those who want to try out the latest cutting edge features before deployment. + An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/alpha/Documents/Help/Changelog.md This package is for those who want to try out the latest cutting edge features before deployment. @@ -155,17 +155,17 @@ $(PackageId).Installer - An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 8. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/Documents/Help/Changelog.md FOR USE WITH DEMO INSTALLERS ONLY! + An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/Documents/Help/Changelog.md FOR USE WITH DEMO INSTALLERS ONLY! $(PackageId).Lite - An update to Component factory's krypton toolkit to support .NET Framework 4.8 - 4.8.1 and .NET 6 - 8. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.8 - 4.8.1, .NET 6 - 8. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/Documents/Help/Changelog.md + An update to Component factory's krypton toolkit to support .NET Framework 4.8 - 4.8.1 and .NET 8 - 9. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.8 - 4.8.1, .NET 6 - 8. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md To find out what's new, please visit: https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/Documents/Help/Changelog.md $(PackageId) - An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 8. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 6 - 7. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md + An update to Component factory's krypton toolkit to support .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. $(Description) This package supports all .NET Framework versions starting .NET Framework 4.6.2 - 4.8.1 and .NET 8 - 9. Also, all libraries are included targeting each specific framework version for performance purposes. To view all of the standard toolkit package latest version information, please visit: https://github.com/Krypton-Suite/Krypton-Toolkit-Suite-Version-Dashboard/blob/main/Documents/Modules/Standard/Krypton-Toolkit-Suite-Standard-Modules.md diff --git a/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln b/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln index ccbb273b7..6fc7a0ea0 100644 --- a/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln +++ b/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln @@ -6,6 +6,9 @@ MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{56F1A41E-584B-4F91-9E98-7D8BF678210C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build System", "Build System", "{511519DD-C887-40E5-8961-658AE4CA5D46}" + ProjectSection(SolutionItems) = preProject + ..\.editorconfig = ..\.editorconfig + EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{405E4318-4C8A-4DC7-B624-8F7097CDFF60}" ProjectSection(SolutionItems) = preProject @@ -21,7 +24,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Development", "Development" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Help", "Help", "{C2B58A1A-4451-4A21-8487-14DBA720672D}" ProjectSection(SolutionItems) = preProject - ..\..\Documents\Help\Changelog.md = ..\..\Documents\Help\Changelog.md ..\..\Documents\Help\Designer-Fix.md = ..\..\Documents\Help\Designer-Fix.md EndProjectSection EndProject @@ -30,6 +32,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Configuration", "Configurat ..\.editorconfig = ..\.editorconfig ..\..\.gitattributes = ..\..\.gitattributes ..\..\.gitignore = ..\..\.gitignore + Krypton Toolkit Suite 2022 - VS2022.sln.DotSettings = Krypton Toolkit Suite 2022 - VS2022.sln.DotSettings EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{950EE50E-C0E8-4A28-96D3-4735F5313610}" @@ -111,6 +114,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Issue Templates", "Issue Te ..\..\.github\ISSUE_TEMPLATE\post-a-question.md = ..\..\.github\ISSUE_TEMPLATE\post-a-question.md EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ChangeLog", "ChangeLog", "{F0BC3940-BAC0-40B9-AECB-2FC752486AD5}" + ProjectSection(SolutionItems) = preProject + ..\..\Documents\Changelog\Changelog.md = ..\..\Documents\Changelog\Changelog.md + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Canary|Any CPU = Canary|Any CPU @@ -204,6 +212,7 @@ Global {CAB40818-55B1-4E1D-AD8E-C94642EA5124} = {56F1A41E-584B-4F91-9E98-7D8BF678210C} {FB5BC976-FCC7-4729-9331-C2420DE7ADB6} = {405E4318-4C8A-4DC7-B624-8F7097CDFF60} {40B83627-BD68-488E-ACB0-5B83D0A8B69C} = {FB5BC976-FCC7-4729-9331-C2420DE7ADB6} + {F0BC3940-BAC0-40B9-AECB-2FC752486AD5} = {405E4318-4C8A-4DC7-B624-8F7097CDFF60} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C8204ACC-48AA-49AC-8236-6E9C162EC2FA} diff --git a/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln.DotSettings b/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln.DotSettings index 5eac504b5..0cffb121a 100644 --- a/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln.DotSettings +++ b/Source/Krypton Components/Krypton Toolkit Suite 2022 - VS2022.sln.DotSettings @@ -1,10 +1,20 @@  DC + DTP MI PI QAT + UAC <Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /> <Policy Inspect="False" Prefix="" Suffix="" Style="AaBb" /> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Instance fields (not private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="False" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Static fields (not private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="False" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Local constants"><ElementKinds><Kind Name="LOCAL_CONSTANT" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AA_BB" /></Policy> + True + True + True + True + True True True True diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenGroup.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenGroup.cs index 620981d59..10c31f907 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenGroup.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenPanel.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenPanel.cs index aefd1b022..a721ae5ff 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenPanel.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenProxyPage.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenProxyPage.cs index 64aed4199..61205d3d5 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenProxyPage.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenProxyPage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,6 +32,10 @@ public KryptonAutoHiddenProxyPage(KryptonPage page) // Text property was updated by the base class constructor, so now we update the actual referenced class Page.Text = Text; + + // Fix for 822: https://github.com/Krypton-Suite/Standard-Toolkit/issues/822#issuecomment-2228211126 + + Visible = page.Visible; } /// diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenSlidePanel.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenSlidePanel.cs index 1adc10190..a36ed0002 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenSlidePanel.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonAutoHiddenSlidePanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -121,21 +121,21 @@ public KryptonAutoHiddenSlidePanel(Control control, DockingEdge edge, KryptonAut _edge = edge; _panel = panel; _state = DockingAutoHiddenShowState.Hidden; - _checkMakeHidden = OnCheckMakeHidden!; + _checkMakeHidden = OnCheckMakeHidden; // We need to a timer to automate sliding in and out _slideTimer = new Timer { Interval = SLIDE_INTERVAL }; - _slideTimer.Tick += OnSlideTimerTick!; + _slideTimer.Tick += OnSlideTimerTick; // Timer used to delay between notification of need to slide inwards and performing actual slide _dismissTimer = new Timer { Interval = DISMISS_INTERVAL }; - _dismissTimer.Tick += OnDismissTimerTick!; + _dismissTimer.Tick += OnDismissTimerTick; _dismissRunning = false; // Create inner panel that holds the actual dockspace and separator @@ -144,14 +144,14 @@ public KryptonAutoHiddenSlidePanel(Control control, DockingEdge edge, KryptonAut Dock = DockStyle.Fill, AutoHiddenHost = true }; - _dockspaceSlide.PageCloseClicked += OnDockspacePageCloseClicked!; - _dockspaceSlide.PageAutoHiddenClicked += OnDockspacePageAutoHiddenClicked!; - _dockspaceSlide.PageDropDownClicked += OnDockspacePageDropDownClicked!; + _dockspaceSlide.PageCloseClicked += OnDockspacePageCloseClicked; + _dockspaceSlide.PageAutoHiddenClicked += OnDockspacePageAutoHiddenClicked; + _dockspaceSlide.PageDropDownClicked += OnDockspacePageDropDownClicked; SeparatorControl = new KryptonDockspaceSeparator(edge, true); - SeparatorControl.SplitterMoving += OnDockspaceSeparatorMoving!; - SeparatorControl.SplitterMoved += OnDockspaceSeparatorMoved!; - SeparatorControl.SplitterMoveRect += OnDockspaceSeparatorMoveRect!; + SeparatorControl.SplitterMoving += OnDockspaceSeparatorMoving; + SeparatorControl.SplitterMoved += OnDockspaceSeparatorMoved; + SeparatorControl.SplitterMoveRect += OnDockspaceSeparatorMoveRect; _inner = new KryptonPanel(); _inner.Controls.AddRange(new Control[] { _dockspaceSlide, SeparatorControl }); @@ -169,7 +169,7 @@ public KryptonAutoHiddenSlidePanel(Control control, DockingEdge edge, KryptonAut Controls.Add(_dummyTarget); // Add ourselves into the target control for docking - control.SizeChanged += OnControlSizeChanged!; + control.SizeChanged += OnControlSizeChanged; control.Controls.Add(this); // Need to peek at windows messages, so we can determine if mouse is over the slide out panel @@ -211,13 +211,13 @@ protected override void Dispose(bool disposing) _dockspaceSlide.ClearAllPages(); // Unhook from events/static references to allow garbage collection - SeparatorControl.SplitterMoving -= OnDockspaceSeparatorMoving!; - SeparatorControl.SplitterMoved -= OnDockspaceSeparatorMoved!; - SeparatorControl.SplitterMoveRect -= OnDockspaceSeparatorMoveRect!; - _dockspaceSlide.CellLosesFocus -= OnDockspaceCellLosesFocus!; - _dockspaceSlide.PageCloseClicked -= OnDockspacePageCloseClicked!; - _dockspaceSlide.PageAutoHiddenClicked -= OnDockspacePageAutoHiddenClicked!; - _dockspaceSlide.PageDropDownClicked -= OnDockspacePageDropDownClicked!; + SeparatorControl.SplitterMoving -= OnDockspaceSeparatorMoving; + SeparatorControl.SplitterMoved -= OnDockspaceSeparatorMoved; + SeparatorControl.SplitterMoveRect -= OnDockspaceSeparatorMoveRect; + _dockspaceSlide.CellLosesFocus -= OnDockspaceCellLosesFocus; + _dockspaceSlide.PageCloseClicked -= OnDockspacePageCloseClicked; + _dockspaceSlide.PageAutoHiddenClicked -= OnDockspacePageAutoHiddenClicked; + _dockspaceSlide.PageDropDownClicked -= OnDockspacePageDropDownClicked; Application.RemoveMessageFilter(this); } @@ -246,7 +246,7 @@ protected override void Dispose(bool disposing) /// /// Gets and sets the drag page notify interface associated with the embedded dockspace. /// - public IDragPageNotify DragPageNotify + public IDragPageNotify? DragPageNotify { get => _dockspaceSlide.DragPageNotify; set => _dockspaceSlide.DragPageNotify = value; @@ -308,7 +308,7 @@ public void SlideOut(KryptonPage? page, KryptonAutoHiddenGroup group, bool selec if (select) { DockspaceControl.Select(); - DockspaceControl.CellLosesFocus += OnDockspaceCellLosesFocus!; + DockspaceControl.CellLosesFocus += OnDockspaceCellLosesFocus; } return; } @@ -328,7 +328,7 @@ public void SlideOut(KryptonPage? page, KryptonAutoHiddenGroup group, bool selec if (select) { DockspaceControl.Select(); - DockspaceControl.CellLosesFocus += OnDockspaceCellLosesFocus!; + DockspaceControl.CellLosesFocus += OnDockspaceCellLosesFocus; } return; } @@ -365,7 +365,7 @@ public void SlideOut(KryptonPage? page, KryptonAutoHiddenGroup group, bool selec CalculateStartAndEnd(); // Set initial positions of ourselves and the contained inner panel - _inner.SetBounds(0, 0, _endRect.Width, _endRect.Height); + _inner!.SetBounds(0, 0, _endRect.Width, _endRect.Height); SetBounds(_startRect.X, _startRect.Y, _startRect.Width, _startRect.Height); // Make sure we are at the top of the z-order and visible @@ -381,7 +381,7 @@ public void SlideOut(KryptonPage? page, KryptonAutoHiddenGroup group, bool selec if (select) { DockspaceControl.Select(); - DockspaceControl.CellLosesFocus += OnDockspaceCellLosesFocus!; + DockspaceControl.CellLosesFocus += OnDockspaceCellLosesFocus; } // Raises event to indicate change in auto hidden showing state @@ -432,7 +432,7 @@ public void UpdateSize(int width, int height) { case DockingEdge.Left: _endRect.Width += width; - _inner.SetBounds(0, 0, _inner.Width + width, _inner.Height); + _inner!.SetBounds(0, 0, _inner.Width + width, _inner.Height); SetBounds(Left, Top, Width + width, Height); // Update the page with the new size to use in the future @@ -448,7 +448,7 @@ public void UpdateSize(int width, int height) case DockingEdge.Right: _endRect.X += width; _endRect.Width -= width; - _inner.SetBounds(0, 0, _inner.Width - width, _inner.Height); + _inner!.SetBounds(0, 0, _inner.Width - width, _inner.Height); SetBounds(Left + width, Top, Width - width, Height); // Update the page with the new size to use in the future @@ -463,7 +463,7 @@ public void UpdateSize(int width, int height) break; case DockingEdge.Top: _endRect.Height += width; - _inner.SetBounds(0, 0, _inner.Width, _inner.Height + height); + _inner!.SetBounds(0, 0, _inner.Width, _inner.Height + height); SetBounds(Left, Top, Width, Height + height); // Update the page with the new size to use in the future @@ -479,7 +479,7 @@ public void UpdateSize(int width, int height) case DockingEdge.Bottom: _endRect.Y += height; _endRect.Height -= height; - _inner.SetBounds(0, 0, _inner.Width, _inner.Height - height); + _inner!.SetBounds(0, 0, _inner.Width, _inner.Height - height); SetBounds(Left, Top + height, Width, Height - height); // Update the page with the new size to use in the future @@ -653,7 +653,7 @@ private void MakeHidden() // If the dockspace has the focus we need to push focus elsewhere if (DockspaceControl.ContainsFocus) { - DockspaceControl.CellLosesFocus -= OnDockspaceCellLosesFocus!; + DockspaceControl.CellLosesFocus -= OnDockspaceCellLosesFocus; _dummyTarget.Select(); } @@ -679,7 +679,7 @@ private void MakeSlideIn() // If the dockspace has the focus we need to push focus elsewhere if (DockspaceControl.ContainsFocus) { - DockspaceControl.CellLosesFocus -= OnDockspaceCellLosesFocus!; + DockspaceControl.CellLosesFocus -= OnDockspaceCellLosesFocus; _dummyTarget.Select(); } @@ -691,7 +691,7 @@ private void MakeSlideIn() private void CalculateStartAndEnd() { // Find the preferred size of the slider area by combining the separator and dockspace - Size dockspacePreferred = Page.AutoHiddenSlideSize; + Size dockspacePreferred = Page!.AutoHiddenSlideSize; Size separatorPreferred = SeparatorControl.GetPreferredSize(_control.Size); var slideSize = new Size(separatorPreferred.Width + dockspacePreferred.Width, separatorPreferred.Height + dockspacePreferred.Height); @@ -758,7 +758,7 @@ private void ResetChildIndex() _control.Controls.SetChildIndex(this, panelIndex); } - private void OnCheckMakeHidden(object sender, EventArgs e) + private void OnCheckMakeHidden(object? sender, EventArgs e) { // Do we still need to make ourselves hidden? if (!ContainsFocus) @@ -767,7 +767,7 @@ private void OnCheckMakeHidden(object sender, EventArgs e) } } - private void OnSlideTimerTick(object sender, EventArgs e) + private void OnSlideTimerTick(object? sender, EventArgs e) { // Check to see if we allowed to perform operations if (Disposing || IsDisposed) @@ -796,7 +796,7 @@ private void OnSlideTimerTick(object sender, EventArgs e) var finished = true; Size newSlideSize = Size; Point newSlideLocation = Location; - Point newInnerLocation = _inner.Location; + Point newInnerLocation = _inner!.Location; // Find the new size and location when sliding out from the edge switch (_edge) @@ -842,7 +842,7 @@ private void OnSlideTimerTick(object sender, EventArgs e) var finished = true; Size newSlideSize = Size; Point newSlideLocation = Location; - Point newInnerLocation = _inner.Location; + Point newInnerLocation = _inner!.Location; // Find the new size and location when sliding inwards to the edge switch (_edge) @@ -882,7 +882,7 @@ private void OnSlideTimerTick(object sender, EventArgs e) } } - private void OnDismissTimerTick(object sender, EventArgs e) + private void OnDismissTimerTick(object? sender, EventArgs e) { // Check to see if we allowed to perform operations if (Disposing || IsDisposed) @@ -923,7 +923,7 @@ private void OnDismissTimerTick(object sender, EventArgs e) } } - private void OnDockspaceCellLosesFocus(object sender, WorkspaceCellEventArgs e) + private void OnDockspaceCellLosesFocus(object? sender, WorkspaceCellEventArgs e) { // Check to see if we allowed to perform operations if (Disposing || IsDisposed) @@ -932,7 +932,7 @@ private void OnDockspaceCellLosesFocus(object sender, WorkspaceCellEventArgs e) } // No longer need the lost focus because we have been notified - DockspaceControl.CellLosesFocus -= OnDockspaceCellLosesFocus!; + DockspaceControl.CellLosesFocus -= OnDockspaceCellLosesFocus; // Action depends on the current state switch (_state) @@ -949,15 +949,15 @@ private void OnDockspaceCellLosesFocus(object sender, WorkspaceCellEventArgs e) } } - private void OnControlSizeChanged(object sender, EventArgs e) => + private void OnControlSizeChanged(object? sender, EventArgs e) => // Change in parent control size means we always hide MakeHidden(); - private void OnDockspaceSeparatorMoving(object sender, SplitterCancelEventArgs e) => SplitterMoving?.Invoke(sender, e); + private void OnDockspaceSeparatorMoving(object? sender, SplitterCancelEventArgs e) => SplitterMoving?.Invoke(sender, e); - private void OnDockspaceSeparatorMoved(object sender, SplitterEventArgs e) => SplitterMoved?.Invoke(sender, e); + private void OnDockspaceSeparatorMoved(object? sender, SplitterEventArgs e) => SplitterMoved?.Invoke(sender, e); - private void OnDockspaceSeparatorMoveRect(object sender, SplitterMoveRectMenuArgs e) + private void OnDockspaceSeparatorMoveRect(object? sender, SplitterMoveRectMenuArgs e) { if (!_dockspaceSlide.ContainsFocus) { @@ -968,11 +968,11 @@ private void OnDockspaceSeparatorMoveRect(object sender, SplitterMoveRectMenuArg SplitterMoveRect?.Invoke(sender, e); } - private void OnDockspacePageCloseClicked(object sender, UniqueNameEventArgs e) => PageCloseClicked?.Invoke(sender, e); + private void OnDockspacePageCloseClicked(object? sender, UniqueNameEventArgs e) => PageCloseClicked?.Invoke(sender, e); - private void OnDockspacePageAutoHiddenClicked(object sender, UniqueNameEventArgs e) => PageAutoHiddenClicked?.Invoke(sender, e); + private void OnDockspacePageAutoHiddenClicked(object? sender, UniqueNameEventArgs e) => PageAutoHiddenClicked?.Invoke(sender, e); - private void OnDockspacePageDropDownClicked(object sender, CancelDropDownEventArgs e) + private void OnDockspacePageDropDownClicked(object? sender, CancelDropDownEventArgs e) { // Click the drop-down button should cause the slide out to be focused so that it // does not slide back again if you move the mouse away from the slide out area diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonDockableNavigator.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonDockableNavigator.cs index cdea7f9cc..cbe15eafa 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonDockableNavigator.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonDockableNavigator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -65,7 +65,7 @@ private void OnPagesInserting(object sender, TypedCollectionEventArgs UpdateCellSettings(); + private void OnFloatspaceCellVisibleCountChanged(object? sender, EventArgs e) => UpdateCellSettings(); - private void OnTabVisibleCountChanged(object sender, EventArgs e) => UpdateCellSettings(); + private void OnTabVisibleCountChanged(object? sender, EventArgs e) => UpdateCellSettings(); - private void OnFloatspaceCellAdding(object sender, WorkspaceCellEventArgs e) + private void OnFloatspaceCellAdding(object? sender, WorkspaceCellEventArgs e) { e.Cell.TabVisibleCountChanged += OnTabVisibleCountChanged; var childMinSize = e.Cell.GetMinSize(); @@ -229,9 +229,9 @@ private void OnFloatspaceCellAdding(object sender, WorkspaceCellEventArgs e) Math.Max(MinimumSize.Height, childMinSize.Height) + 20); } - private void OnFloatspaceCellRemoved(object sender, WorkspaceCellEventArgs e) => e.Cell.TabVisibleCountChanged -= OnTabVisibleCountChanged; + private void OnFloatspaceCellRemoved(object? sender, WorkspaceCellEventArgs e) => e.Cell.TabVisibleCountChanged -= OnTabVisibleCountChanged; - private void OnLayoutWorkspace(object sender, EventArgs e) => FloatspaceControl?.PerformNeedPaint(true); + private void OnLayoutWorkspace(object? sender, EventArgs e) => FloatspaceControl?.PerformNeedPaint(true); private void UpdateCellSettings() { diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonFloatspace.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonFloatspace.cs index 7f46e6de9..d08c222e8 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonFloatspace.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonFloatspace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonSpace.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonSpace.cs index 8f11c7922..b92a268d1 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonSpace.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonSpace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -294,9 +294,9 @@ public override void WritePageElement(XmlWriter xmlWriter, KryptonPage page) // Add recreated page to the looking dictionary if (!string.IsNullOrWhiteSpace(page?.UniqueName) - && !existingPages.ContainsKey(page.UniqueName)) + && !existingPages.ContainsKey(page?.UniqueName!)) { - existingPages.Add(page.UniqueName, page); + existingPages.Add(page?.UniqueName!, page!); } } } @@ -319,7 +319,7 @@ public override void WritePageElement(XmlWriter xmlWriter, KryptonPage page) // Read past the page start element if (!xmlReader.Read()) { - throw new ArgumentException(@"An element was expected but could not be read in.", nameof(xmlReader)); + throw new ArgumentException(@"An element was expected, but could not be read in.", nameof(xmlReader)); } return page; @@ -505,7 +505,7 @@ protected virtual void UpdateCellActions(KryptonWorkspaceCell cell, CachedCellSt KryptonContextMenu = new KryptonContextMenu() }; cellState.DropDownButtonSpec.KryptonContextMenu.Opening += OnCellDropDownOpening; - cell.Button.ButtonSpecs.Add(cellState.DropDownButtonSpec); + cell.Button.ButtonSpecs?.Add(cellState.DropDownButtonSpec); } cellState.DropDownButtonSpec.Visible = cell.SelectedPage != null && @@ -524,7 +524,7 @@ protected virtual void UpdateCellActions(KryptonWorkspaceCell cell, CachedCellSt ToolTipTitle = PinTooltip }; cellState.PinButtonSpec.Click += OnCellAutoHiddenAction; - cell.Button.ButtonSpecs.Add(cellState.PinButtonSpec); + cell.Button.ButtonSpecs?.Add(cellState.PinButtonSpec); } if (cell.SelectedPage == null) @@ -550,7 +550,7 @@ protected virtual void UpdateCellActions(KryptonWorkspaceCell cell, CachedCellSt ToolTipTitle = CloseTooltip }; cellState.CloseButtonSpec.Click += OnCellCloseAction; - cell.Button.ButtonSpecs.Add(cellState.CloseButtonSpec); + cell.Button.ButtonSpecs?.Add(cellState.CloseButtonSpec); } cellState.CloseButtonSpec.Visible = cell.SelectedPage != null && @@ -560,19 +560,19 @@ protected virtual void UpdateCellActions(KryptonWorkspaceCell cell, CachedCellSt #endregion #region Implementation - private void FocusMonitorControl(Control c, bool adding) + private void FocusMonitorControl(Control? c, bool adding) { // Hook/Unhook this control if (adding) { - c.GotFocus += OnFocusChanged; + c!.GotFocus += OnFocusChanged; c.LostFocus += OnFocusChanged; c.ControlAdded += OnFocusControlAdded; c.ControlRemoved += OnFocusControlRemoved; } else { - c.GotFocus -= OnFocusChanged; + c!.GotFocus -= OnFocusChanged; c.LostFocus -= OnFocusChanged; c.ControlAdded -= OnFocusControlAdded; c.ControlRemoved -= OnFocusControlRemoved; @@ -585,15 +585,15 @@ private void FocusMonitorControl(Control c, bool adding) } } - private void OnFocusControlAdded(object sender, ControlEventArgs e) => + private void OnFocusControlAdded(object? sender, ControlEventArgs e) => // Add focus monitoring to the control FocusMonitorControl(e.Control, true); - private void OnFocusControlRemoved(object sender, ControlEventArgs e) => + private void OnFocusControlRemoved(object? sender, ControlEventArgs e) => // Remove focus monitoring from the control FocusMonitorControl(e.Control, true); - private void OnFocusChanged(object sender, EventArgs e) + private void OnFocusChanged(object? sender, EventArgs e) { // No point requesting the update more than once if (!_awaitingFocusUpdate && IsHandleCreated) @@ -606,7 +606,7 @@ private void OnFocusChanged(object sender, EventArgs e) } } - private void OnFocusUpdate(object sender, EventArgs e) + private void OnFocusUpdate(object? sender, EventArgs e) { // Should we apply docking specific appearance changes to reflect changes in focus? if (ApplyDockingAppearance) @@ -645,7 +645,7 @@ private void OnFocusUpdate(object sender, EventArgs e) _awaitingFocusUpdate = false; } - private void OnVisibleUpdate(object sender, EventArgs e) + private void OnVisibleUpdate(object? sender, EventArgs e) { if (ApplyDockingVisibility) { @@ -698,7 +698,7 @@ private void OnVisibleUpdate(object sender, EventArgs e) } } - private void OnCellShowContextMenu(object sender, ShowContextMenuArgs e) + private void OnCellShowContextMenu(object? sender, ShowContextMenuArgs e) { // Make sure we have a menu for displaying e.KryptonContextMenu ??= new KryptonContextMenu(); @@ -712,18 +712,20 @@ private void OnCellShowContextMenu(object sender, ShowContextMenuArgs e) e.Cancel = args.Cancel; } - private void OnCellPrimaryHeaderLeftClicked(object sender, EventArgs e) + private void OnCellPrimaryHeaderLeftClicked(object? sender, EventArgs e) { // Should we apply docking specific change of focus when the primary header is clicked? if (ApplyDockingAppearance) { // Set the focus into the active page - var cell = (KryptonWorkspaceCell)sender; - cell.SelectedPage?.SelectNextControl(cell.SelectedPage, true, true, true, false); + if (sender is KryptonWorkspaceCell cell) + { + cell.SelectedPage?.SelectNextControl(cell.SelectedPage, true, true, true, false); + } } } - private void OnCellPrimaryHeaderRightClicked(object sender, EventArgs e) + private void OnCellPrimaryHeaderRightClicked(object? sender, EventArgs e) { // Should we apply docking specific change of focus when the primary header is clicked? if (ApplyDockingAppearance) @@ -748,7 +750,7 @@ private void OnCellPrimaryHeaderRightClicked(object sender, EventArgs e) } } - private void OnCellPrimaryHeaderDoubleClicked(object sender, EventArgs e) + private void OnCellPrimaryHeaderDoubleClicked(object? sender, EventArgs e) { // Should we apply docking specific change of focus when the primary header is clicked? if (ApplyDockingAppearance) @@ -756,12 +758,14 @@ private void OnCellPrimaryHeaderDoubleClicked(object sender, EventArgs e) var uniqueNames = new List(); // Create list of visible pages that are not placeholders - var cell = (KryptonWorkspaceCell)sender; - foreach (KryptonPage page in cell.Pages) + if (sender is KryptonWorkspaceCell cell) { - if (page.LastVisibleSet && page is not KryptonStorePage) + foreach (KryptonPage page in cell.Pages) { - uniqueNames.Add(page.UniqueName); + if (page.LastVisibleSet && page is not KryptonStorePage) + { + uniqueNames.Add(page.UniqueName); + } } } @@ -772,7 +776,7 @@ private void OnCellPrimaryHeaderDoubleClicked(object sender, EventArgs e) } } - private void OnCellTabDoubleClicked(object sender, KryptonPageEventArgs e) + private void OnCellTabDoubleClicked(object? sender, KryptonPageEventArgs e) { if (e.Item != null) { @@ -780,7 +784,7 @@ private void OnCellTabDoubleClicked(object sender, KryptonPageEventArgs e) } } - private void OnCellTabVisibleCountChanged(object sender, EventArgs e) + private void OnCellTabVisibleCountChanged(object? sender, EventArgs e) { if (ApplyDockingAppearance) { @@ -810,13 +814,12 @@ private void OnCellTabVisibleCountChanged(object sender, EventArgs e) UpdateVisible(_setFocus); } - private void OnCellSelectedPageChanged(object sender, EventArgs e) + private void OnCellSelectedPageChanged(object? sender, EventArgs e) { if (ApplyDockingCloseAction || ApplyDockingPinAction) { // Get access to the cached state for this cell - var cell = sender as KryptonWorkspaceCell; - if (cell != null) + if (sender is KryptonWorkspaceCell cell) { CachedCellState cellState = _lookupCellState[cell]; @@ -853,12 +856,13 @@ private void OnCellSelectedPageFlagsChanged(object sender, KryptonPageFlagsEvent } } - private void OnCellCloseAction(object sender, EventArgs e) + private void OnCellCloseAction(object? sender, EventArgs e) { if (ApplyDockingCloseAction) { // Find the page associated with the cell that fired this button spec - var buttonSpec = (ButtonSpec)sender; + var buttonSpec = sender as ButtonSpec ?? throw new ArgumentNullException(nameof(sender)); + foreach (CachedCellState cellState in _lookupCellState.Values.Where(cellState => cellState.CloseButtonSpec == buttonSpec)) { if (cellState.Cell?.SelectedPage != null) @@ -871,12 +875,13 @@ private void OnCellCloseAction(object sender, EventArgs e) } } - private void OnCellAutoHiddenAction(object sender, EventArgs e) + private void OnCellAutoHiddenAction(object? sender, EventArgs e) { if (ApplyDockingPinAction) { // Find the page associated with the cell that fired this button spec - var buttonSpec = (ButtonSpec)sender; + var buttonSpec = sender as ButtonSpec ?? throw new ArgumentNullException(nameof(sender)); + foreach (CachedCellState cellState in _lookupCellState.Values.Where(cellState => cellState.PinButtonSpec == buttonSpec)) { if (cellState.Cell?.SelectedPage != null) @@ -889,12 +894,12 @@ private void OnCellAutoHiddenAction(object sender, EventArgs e) } } - private void OnCellDropDownOpening(object sender, CancelEventArgs e) + private void OnCellDropDownOpening(object? sender, CancelEventArgs e) { if (ApplyDockingDropDownAction) { // Search for the cell that contains the button spec that has this context menu - var kcm = (KryptonContextMenu)sender; + var kcm = sender as KryptonContextMenu ?? throw new ArgumentNullException(nameof(sender)); foreach (CachedCellState cellState in _lookupCellState.Values.Where(cellState => (cellState.DropDownButtonSpec != null) && (cellState.DropDownButtonSpec.KryptonContextMenu == kcm)) ) diff --git a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonStorePage.cs b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonStorePage.cs index 00d5bc41e..cc91a7c28 100644 --- a/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonStorePage.cs +++ b/Source/Krypton Components/Krypton.Docking/Control Docking/KryptonStorePage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -47,7 +47,7 @@ public override bool LastVisibleSet } /// - /// Gets the storgate name associated with this page. + /// Gets the storage name associated with this page. /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] diff --git a/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragManager.cs b/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragManager.cs index c60b0f8f5..1c7f1a199 100644 --- a/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragManager.cs +++ b/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -116,7 +116,7 @@ public override void DragMove(Point screenPt) base.DragMove(screenPt); } - private void OnFloatingWindowMove(object sender, EventArgs e) + private void OnFloatingWindowMove(object? sender, EventArgs e) { _moveTimer.Stop(); diff --git a/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragTargetProvider.cs b/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragTargetProvider.cs index 3a446b4bf..01b44af86 100644 --- a/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragTargetProvider.cs +++ b/Source/Krypton Components/Krypton.Docking/Dragging/DockingDragTargetProvider.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetControlEdge.cs b/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetControlEdge.cs index 39ef634de..7db485c6b 100644 --- a/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetControlEdge.cs +++ b/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetControlEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetNull.cs b/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetNull.cs index 074647c0e..504a128e0 100644 --- a/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetNull.cs +++ b/Source/Krypton Components/Krypton.Docking/Dragging/DragTargetNull.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElement.cs b/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElement.cs index 855c705b2..7c2110fad 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElement.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElement.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -149,11 +149,13 @@ public virtual IDockingElement? Parent /// public virtual void PropogateAction(DockingPropogateAction action, string[]? uniqueNames) { - // Propagate the action request to all the child elements + // Propagate the action request to all the child elements (Even the null ones !!) // (use reverse order so if element removes itself we still have a valid loop) for (var i = Count - 1; i >= 0; i--) { - this[i]?.PropogateAction(action, uniqueNames); + { + this[i]!.PropogateAction(action, uniqueNames); + } } } @@ -539,11 +541,8 @@ public virtual void LoadElementFromXml(XmlReader xmlReader, KryptonPageCollectio // Find a child docking element with the matching name IDockingElement? child = this[xmlReader.GetAttribute(@"N")!]; - if (child != null) - { - // Let derived class perform child element specific processing - LoadChildDockingElement(xmlReader, pages, child); - } + // Let derived class perform child element specific processing + LoadChildDockingElement(xmlReader, pages, child); } } diff --git a/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementClosedCollection.cs b/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementClosedCollection.cs index 24fc8c5a5..27170db9a 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementClosedCollection.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementClosedCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementOpenCollection.cs b/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementOpenCollection.cs index 3f25dc371..3eeddc66a 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementOpenCollection.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Base/DockingElementOpenCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingAutoHiddenGroup.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingAutoHiddenGroup.cs index 056d7bd85..c4b8a7cea 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingAutoHiddenGroup.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingAutoHiddenGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -121,7 +121,7 @@ public void Append(KryptonPage[]? pages) /// /// Action that is requested to be performed. /// Array of unique names of the pages the action relates to. - public override void PropogateAction(DockingPropogateAction action, string[] uniqueNames) + public override void PropogateAction(DockingPropogateAction action, string[]? uniqueNames) { switch (action) { @@ -643,33 +643,31 @@ private void AppendPagesToControl(KryptonPage[] pages) AutoHiddenGroupControl.Pages.AddRange(pages); } - private void OnAutoHiddenGroupStoringPage(object sender, UniqueNameEventArgs e) => + private void OnAutoHiddenGroupStoringPage(object? sender, UniqueNameEventArgs e) => // We only allow a single 'store' page in this docking location at a time DockingManager?.PropogateAction(DockingPropogateAction.ClearAutoHiddenStoredPages, new[] { e.UniqueName }); - private void OnAutoHiddenGroupTabClicked(object sender, KryptonPageEventArgs e) + private void OnAutoHiddenGroupTabClicked(object? sender, KryptonPageEventArgs e) { // The auto hidden group contains proxy pages and not the real pages - var proxyPage = e.Item as KryptonAutoHiddenProxyPage; - if (proxyPage != null) + if (e.Item is KryptonAutoHiddenProxyPage proxyPage) { OnPageClicked(new KryptonPageEventArgs(proxyPage.Page, e.Index)); } } - private void OnAutoHiddenGroupHoverStart(object sender, KryptonPageEventArgs e) + private void OnAutoHiddenGroupHoverStart(object? sender, KryptonPageEventArgs e) { // The auto hidden group contains proxy pages and not the real pages - var proxyPage = e.Item as KryptonAutoHiddenProxyPage; - if (proxyPage != null) + if (e.Item is KryptonAutoHiddenProxyPage proxyPage) { OnPageHoverStart(new KryptonPageEventArgs(proxyPage.Page, e.Index)); } } - private void OnAutoHiddenGroupHoverEnd(object sender, EventArgs e) => OnPageHoverEnd(e); + private void OnAutoHiddenGroupHoverEnd(object? sender, EventArgs e) => OnPageHoverEnd(e); - private void OnAutoHiddenGroupTabVisibleCountChanged(object sender, EventArgs e) + private void OnAutoHiddenGroupTabVisibleCountChanged(object? sender, EventArgs e) { if (AutoHiddenGroupControl.Pages.VisibleCount == 0) { @@ -688,7 +686,7 @@ private void OnAutoHiddenGroupTabVisibleCountChanged(object sender, EventArgs e) } } } - private void OnAutoHiddenGroupDisposed(object sender, EventArgs e) + private void OnAutoHiddenGroupDisposed(object? sender, EventArgs e) { // Unhook from events so the control can be garbage collected AutoHiddenGroupControl.StoringPage -= OnAutoHiddenGroupStoringPage; diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingControl.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingControl.cs index 8a84f48e1..47443051b 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingControl.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -367,14 +367,14 @@ private void Construct(Control control, IDockingElement? innerElement) Add(new KryptonDockingEdge(@"Right", control, DockingEdge.Right)); } - private void OnControlDisposed(object sender, EventArgs e) + private void OnControlDisposed(object? sender, EventArgs e) { // Unhook events to allow garbage collection Control.SizeChanged -= OnControlSizeChanged; Control.Disposed -= OnControlDisposed; } - private void OnControlSizeChanged(object sender, EventArgs e) + private void OnControlSizeChanged(object? sender, EventArgs e) { if (!Control.Size.IsEmpty) { diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingDockspace.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingDockspace.cs index 55ba6cad3..e7f83f359 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingDockspace.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingDockspace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -312,13 +312,13 @@ protected override void RaiseCellRemoved(KryptonWorkspaceCell cell) /// /// Source of the event. /// A PageDropEventArgs containing the event data. - protected override void RaiseSpacePageDrop(object sender, PageDropEventArgs e) + protected override void RaiseSpacePageDrop(object? sender, PageDropEventArgs e) { // Use event to indicate the page is moving to a workspace and allow it to be cancelled KryptonDockingManager? dockingManager = DockingManager; if (dockingManager != null) { - var args = new CancelUniqueNameEventArgs(e.Page.UniqueName, false); + var args = new CancelUniqueNameEventArgs(e.Page?.UniqueName!, false); dockingManager.RaisePageDockedRequest(args); // Pass back the result of the event @@ -419,13 +419,13 @@ public override void LoadElementFromXml(XmlReader xmlReader, KryptonPageCollecti { DockspaceControl.Dispose(); // TODO: Is this safe ?. It means that whatever uses this afterwards could be accessing null things ! - SpaceControl = null; + SpaceControl = null!; } } #endregion #region Implementation - private void OnDockspaceCellVisibleCountChanged(object sender, EventArgs e) + private void OnDockspaceCellVisibleCountChanged(object? sender, EventArgs e) { if (DockspaceControl.CellVisibleCount == 0) { @@ -445,7 +445,7 @@ private void OnDockspaceCellVisibleCountChanged(object sender, EventArgs e) } } - private void OnDockspaceCellCountChanged(object sender, EventArgs e) + private void OnDockspaceCellCountChanged(object? sender, EventArgs e) { // When all the cells (and so pages) have been removed we kill ourself if (DockspaceControl.CellCount == 0) @@ -454,38 +454,38 @@ private void OnDockspaceCellCountChanged(object sender, EventArgs e) } } - private void OnDockspacePageCloseClicked(object sender, UniqueNameEventArgs e) + private void OnDockspacePageCloseClicked(object? sender, UniqueNameEventArgs e) { // Generate event so that the close action is handled for the named page KryptonDockingManager? dockingManager = DockingManager; dockingManager?.CloseRequest(new[] { e.UniqueName }); } - private void OnDockspacePageAutoHiddenClicked(object sender, UniqueNameEventArgs e) + private void OnDockspacePageAutoHiddenClicked(object? sender, UniqueNameEventArgs e) { // Generate event so that the switch from docked to auto hidden is handled for cell that contains the named page KryptonDockingManager? dockingManager = DockingManager; dockingManager?.SwitchDockedCellToAutoHiddenGroupRequest(e.UniqueName); } - private void OnDockspacePagesDoubleClicked(object sender, UniqueNamesEventArgs e) + private void OnDockspacePagesDoubleClicked(object? sender, UniqueNamesEventArgs e) { // Generate event so that the switch from docked to floating is handled for the provided list of named pages KryptonDockingManager? dockingManager = DockingManager; dockingManager?.SwitchDockedToFloatingWindowRequest(e.UniqueNames); } - private void OnDockspaceDropDownClicked(object sender, CancelDropDownEventArgs e) + private void OnDockspaceDropDownClicked(object? sender, CancelDropDownEventArgs e) { // Generate event so that the appropriate context menu options are presented and actioned KryptonDockingManager? dockingManager = DockingManager; if (dockingManager != null) { - e.Cancel = !dockingManager.ShowPageContextMenuRequest(e.Page, e.KryptonContextMenu); + e.Cancel = !dockingManager.ShowPageContextMenuRequest(e.Page!, e.KryptonContextMenu!); } } - private void OnDockspaceBeforePageDrag(object sender, PageDragCancelEventArgs e) + private void OnDockspaceBeforePageDrag(object? sender, PageDragCancelEventArgs e) { // Validate the list of names to those that are still present in the dockspace var pages = new List(); diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdge.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdge.cs index 10361f24a..162b9a0c8 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdge.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeAutoHidden.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeAutoHidden.cs index f2755a427..2a7645782 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeAutoHidden.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeAutoHidden.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -297,10 +297,10 @@ private KryptonDockingAutoHiddenGroup CreateAndInsertAutoHiddenGroup(int index, return groupElement; } - private void OnDockingAutoHiddenGroupDisposed(object sender, EventArgs e) + private void OnDockingAutoHiddenGroupDisposed(object? sender, EventArgs e) { // Cast to correct type and unhook event handlers so garbage collection can occur - var groupElement = (KryptonDockingAutoHiddenGroup)sender; + var groupElement = sender as KryptonDockingAutoHiddenGroup ?? throw new ArgumentNullException(nameof(sender)); groupElement.PageClicked -= OnDockingAutoHiddenGroupClicked; groupElement.PageHoverStart -= OnDockingAutoHiddenGroupHoverStart; groupElement.PageHoverEnd -= OnDockingAutoHiddenGroupHoverEnd; @@ -310,7 +310,7 @@ private void OnDockingAutoHiddenGroupDisposed(object sender, EventArgs e) InternalRemove(groupElement); } - private void OnPanelDisposed(object sender, EventArgs e) + private void OnPanelDisposed(object? sender, EventArgs e) { // Unhook from events so the control can be garbage collected _panel.Disposed -= OnPanelDisposed; @@ -334,7 +334,7 @@ private void OnPanelDisposed(object sender, EventArgs e) } } - private void OnSlidePanelDisposed(object sender, EventArgs e) + private void OnSlidePanelDisposed(object? sender, EventArgs e) { // Unhook from events so the control can be garbage collected _slidePanel.SplitterMoveRect -= OnSlidePanelSeparatorMoveRect; @@ -366,36 +366,36 @@ private void OnSlidePanelDisposed(object sender, EventArgs e) } } - private void OnDockingAutoHiddenGroupClicked(object sender, KryptonPageEventArgs e) + private void OnDockingAutoHiddenGroupClicked(object? sender, KryptonPageEventArgs e) { // Request the sliding panel slide itself into view with the provided page - var dockingGroup = (KryptonDockingAutoHiddenGroup)sender; + var dockingGroup = sender as KryptonDockingAutoHiddenGroup ?? throw new ArgumentNullException(nameof(sender)); _slidePanel.SlideOut(e.Item, dockingGroup.AutoHiddenGroupControl, true); } - private void OnDockingAutoHiddenGroupHoverStart(object sender, KryptonPageEventArgs e) + private void OnDockingAutoHiddenGroupHoverStart(object? sender, KryptonPageEventArgs e) { // Request the sliding panel slide itself into view with the provided page - var dockingGroup = (KryptonDockingAutoHiddenGroup)sender; + var dockingGroup = sender as KryptonDockingAutoHiddenGroup ?? throw new ArgumentNullException(nameof(sender)); _slidePanel.SlideOut(e.Item, dockingGroup.AutoHiddenGroupControl, false); } - private void OnDockingAutoHiddenGroupHoverEnd(object sender, EventArgs e) => + private void OnDockingAutoHiddenGroupHoverEnd(object? sender, EventArgs e) => // Request the sliding panel slide itself out of view when appropriate // (will not retract whilst the mouse is over the slide out dockspace) // (will not retract whilst slide out dockspace has the focus) _slidePanel.SlideIn(); - private void OnSlidePanelSeparatorMoved(object sender, SplitterEventArgs e) => _slidePanel.UpdateSize(e.SplitX, e.SplitY); + private void OnSlidePanelSeparatorMoved(object? sender, SplitterEventArgs e) => _slidePanel.UpdateSize(e.SplitX, e.SplitY); - private void OnSlidePanelSeparatorMoving(object sender, SplitterCancelEventArgs e) + private void OnSlidePanelSeparatorMoving(object? sender, SplitterCancelEventArgs e) { } - private void OnSlidePanelSeparatorMoveRect(object sender, SplitterMoveRectMenuArgs e) + private void OnSlidePanelSeparatorMoveRect(object? sender, SplitterMoveRectMenuArgs e) { // Cast to correct type and grab associated dockspace control - var separatorControl = (KryptonDockspaceSeparator)sender; + var separatorControl = sender as KryptonDockspaceSeparator ?? throw new ArgumentNullException(nameof(sender)); KryptonDockspace dockspaceControl = _slidePanel.DockspaceControl; KryptonPage? page = _slidePanel.Page; @@ -411,21 +411,21 @@ private void OnSlidePanelSeparatorMoveRect(object sender, SplitterMoveRectMenuAr } } - private void OnSlidePanelPageCloseClicked(object sender, UniqueNameEventArgs e) + private void OnSlidePanelPageCloseClicked(object? sender, UniqueNameEventArgs e) { // Generate event so that the close action is handled for the named page KryptonDockingManager? dockingManager = DockingManager; dockingManager?.CloseRequest(new[] { e.UniqueName }); } - private void OnSlidePanelPageAutoHiddenClicked(object sender, UniqueNameEventArgs e) + private void OnSlidePanelPageAutoHiddenClicked(object? sender, UniqueNameEventArgs e) { // Generate event so that the auto hidden is switched to docked is handled for the group that contains the named page KryptonDockingManager? dockingManager = DockingManager; dockingManager?.SwitchAutoHiddenGroupToDockedCellRequest(e.UniqueName); } - private void OnSlidePanelPageDropDownClicked(object sender, CancelDropDownEventArgs e) + private void OnSlidePanelPageDropDownClicked(object? sender, CancelDropDownEventArgs e) { // Generate event so that the appropriate context menu options are presented and actioned KryptonDockingManager? dockingManager = DockingManager; @@ -437,7 +437,7 @@ private void OnSlidePanelPageDropDownClicked(object sender, CancelDropDownEventA } } - private void OnSlidePanelAutoHiddenShowingStateChanged(object sender, AutoHiddenShowingStateEventArgs e) + private void OnSlidePanelAutoHiddenShowingStateChanged(object? sender, AutoHiddenShowingStateEventArgs e) { // Generate event so that the appropriate context menu options are presented and actioned KryptonDockingManager? dockingManager = DockingManager; diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeDocked.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeDocked.cs index bb1a96e58..e52c5c258 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeDocked.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingEdgeDocked.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -214,10 +214,10 @@ private KryptonDockingDockspace CreateAndInsertDockspace(int index, string name, return dockspaceElement; } - private void OnDockingDockspaceHasNoVisibleCells(object sender, EventArgs e) + private void OnDockingDockspaceHasNoVisibleCells(object? sender, EventArgs e) { // Cast to correct type and grab associated separator control - var dockspaceElement = (KryptonDockingDockspace)sender; + var dockspaceElement = sender as KryptonDockingDockspace ?? throw new ArgumentNullException(nameof(sender)); KryptonDockspaceSeparator separatorControl = _lookupDockspace[dockspaceElement]; // No more visible cells so we hide the controls @@ -225,10 +225,10 @@ private void OnDockingDockspaceHasNoVisibleCells(object sender, EventArgs e) separatorControl.Visible = false; } - private void OnDockspaceSeparatorMoveRect(object sender, SplitterMoveRectMenuArgs e) + private void OnDockspaceSeparatorMoveRect(object? sender, SplitterMoveRectMenuArgs e) { // Cast to correct type and grab associated dockspace element - var separatorControl = (KryptonDockspaceSeparator)sender; + var separatorControl = sender as KryptonDockspaceSeparator ?? throw new ArgumentNullException(nameof(sender)); KryptonDockingDockspace dockspaceElement = _lookupSeparator[separatorControl]; // Events are generated from the parent docking manager @@ -250,10 +250,10 @@ private void OnDockspaceSeparatorMoveRect(object sender, SplitterMoveRectMenuArg } } - private void OnDockspaceSeparatorMoved(object sender, SplitterEventArgs e) + private void OnDockspaceSeparatorMoved(object? sender, SplitterEventArgs e) { // Cast to correct type and grab associated dockspace element - var separatorControl = (KryptonDockspaceSeparator)sender; + var separatorControl = sender as KryptonDockspaceSeparator ?? throw new ArgumentNullException(nameof(sender)); KryptonDockingDockspace dockspaceElement = _lookupSeparator[separatorControl]; // Update with delta change @@ -282,7 +282,7 @@ private void OnDockspaceSeparatorMoved(object sender, SplitterEventArgs e) } } - private void OnDockspaceSeparatorNotMoved(object sender, EventArgs e) + private void OnDockspaceSeparatorNotMoved(object? sender, EventArgs e) { if (_update) { @@ -293,10 +293,10 @@ private void OnDockspaceSeparatorNotMoved(object sender, EventArgs e) } } - private void OnDockingDockspaceHasVisibleCells(object sender, EventArgs e) + private void OnDockingDockspaceHasVisibleCells(object? sender, EventArgs e) { // Cast to correct type and grab associated separator control - var dockspaceElement = (KryptonDockingDockspace)sender; + var dockspaceElement = sender as KryptonDockingDockspace ?? throw new ArgumentNullException(nameof(sender)); KryptonDockspaceSeparator separatorControl = _lookupDockspace[dockspaceElement]; // Now have a visible cell so we show the controls @@ -304,10 +304,10 @@ private void OnDockingDockspaceHasVisibleCells(object sender, EventArgs e) separatorControl.Visible = true; } - private void OnDockingDockspaceDisposed(object sender, EventArgs e) + private void OnDockingDockspaceDisposed(object? sender, EventArgs e) { // Cast to correct type and unhook event handlers so garbage collection can occur - var dockspaceElement = (KryptonDockingDockspace)sender; + var dockspaceElement = sender as KryptonDockingDockspace ?? throw new ArgumentNullException(nameof(sender)); dockspaceElement.HasVisibleCells -= OnDockingDockspaceHasVisibleCells; dockspaceElement.HasNoVisibleCells -= OnDockingDockspaceHasNoVisibleCells; dockspaceElement.Disposed -= OnDockingDockspaceDisposed; @@ -326,10 +326,10 @@ private void OnDockingDockspaceDisposed(object sender, EventArgs e) _lookupDockspace.Remove(dockspaceElement); } - private void OnDockspaceSeparatorDisposed(object sender, EventArgs e) + private void OnDockspaceSeparatorDisposed(object? sender, EventArgs e) { // Unhook from events so the control can be garbage collected - var separatorControl = (KryptonDockspaceSeparator)sender; + var separatorControl = sender as KryptonDockspaceSeparator ?? throw new ArgumentNullException(nameof(sender)); separatorControl.SplitterMoveRect -= OnDockspaceSeparatorMoveRect; separatorControl.SplitterMoved -= OnDockspaceSeparatorMoved; separatorControl.SplitterNotMoved -= OnDockspaceSeparatorNotMoved; diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloating.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloating.cs index 3dbf38bc1..c76b8bea0 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloating.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloating.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -142,10 +142,10 @@ private KryptonDockingFloatingWindow CreateFloatingWindow(string? name) return floatingWindowElement; } - private void OnDockingFloatingWindowDisposed(object sender, EventArgs e) + private void OnDockingFloatingWindowDisposed(object? sender, EventArgs e) { // Cast to correct type and unhook event handlers so garbage collection can occur - var floatingWindowElement = (KryptonDockingFloatingWindow)sender; + var floatingWindowElement = sender as KryptonDockingFloatingWindow ?? throw new ArgumentNullException(nameof(sender)); floatingWindowElement.Disposed -= OnDockingFloatingWindowDisposed; // Remove the element from our child collection as it is no longer valid diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatingWindow.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatingWindow.cs index 8acc943a7..351bdc122 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatingWindow.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatingWindow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -185,7 +185,7 @@ public override void SaveElementToXml(XmlWriter xmlWriter) xmlWriter.WriteStartElement(XmlElementName); xmlWriter.WriteAttributeString(@"N", Name); xmlWriter.WriteAttributeString(@"C", Count.ToString()); - xmlWriter.WriteAttributeString(@"L", CommonHelper.PointToString(FloatingWindow.Location)!); + xmlWriter.WriteAttributeString(@"L", CommonHelper.PointToString(FloatingWindow.Location)); xmlWriter.WriteAttributeString(@"S", CommonHelper.SizeToString(FloatingWindow.ClientSize)); // Output an element per child @@ -214,7 +214,7 @@ protected override void LoadDockingElement(XmlReader xmlReader, KryptonPageColle { // Grab the requested size and location Point location = CommonHelper.StringToPoint(xmlReader.GetAttribute(@"L")); - Size clientSize = CommonHelper.StringToSize(xmlReader.GetAttribute(@"S")!); + Size clientSize = CommonHelper.StringToSize(xmlReader.GetAttribute(@"S")); // Find the size of the floating window borders var hBorders = FloatingWindow.Width - FloatingWindow.ClientSize.Width; @@ -260,24 +260,24 @@ protected override void LoadDockingElement(XmlReader xmlReader, KryptonPageColle #endregion #region Implementation - private void OnFloatingWindowCloseClicked(object sender, UniqueNamesEventArgs e) + private void OnFloatingWindowCloseClicked(object? sender, UniqueNamesEventArgs e) { // Events are generated from the parent docking manager KryptonDockingManager? dockingManager = DockingManager; dockingManager?.CloseRequest(e.UniqueNames); } - private void OnFloatingWindowCaptionDragging(object sender, ScreenAndOffsetEventArgs e) + private void OnFloatingWindowCaptionDragging(object? sender, ScreenAndOffsetEventArgs e) { // Events are generated from the parent docking manager KryptonDockingManager? dockingManager = DockingManager; dockingManager?.DoDragDrop(e.ScreenPoint, e.ElementOffset, null, this); } - private void OnDockingFloatspaceDisposed(object sender, EventArgs e) + private void OnDockingFloatspaceDisposed(object? sender, EventArgs e) { // Cast to correct type and unhook event handlers so garbage collection can occur - var floatspaceElement = (KryptonDockingFloatspace)sender; + var floatspaceElement = sender as KryptonDockingFloatspace ?? throw new ArgumentNullException(nameof(sender)); floatspaceElement.Disposed -= OnDockingFloatspaceDisposed; // Kill the floatspace window @@ -287,7 +287,7 @@ private void OnDockingFloatspaceDisposed(object sender, EventArgs e) } } - private void OnFloatingWindowDisposed(object sender, EventArgs e) + private void OnFloatingWindowDisposed(object? sender, EventArgs e) { // Unhook from events so the control can be garbage collected FloatingWindow.Disposed -= OnFloatingWindowDisposed; diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatspace.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatspace.cs index eb8bf00e1..d53d82e5f 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatspace.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingFloatspace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -147,7 +147,7 @@ public override DockingLocation FindPageLocation(string uniqueName) /// /// Source of the event. /// A KryptonPageEventArgs containing the event data. - protected override void OnSpaceCellPageInserting(object sender, KryptonPageEventArgs e) + protected override void OnSpaceCellPageInserting(object? sender, KryptonPageEventArgs e) { // Remove any store page for the unique name of this page being added. In either case of adding a store // page or a regular page we want to ensure there does not exist a store page for that same unique name. @@ -225,7 +225,7 @@ protected override void RaiseCellRemoved(KryptonWorkspaceCell cell) /// /// Source of the event. /// A PageDropEventArgs containing the event data. - protected override void RaiseSpacePageDrop(object sender, PageDropEventArgs e) + protected override void RaiseSpacePageDrop(object? sender, PageDropEventArgs e) { // Use event to indicate the page is moving to a workspace and allow it to be cancelled KryptonDockingManager? dockingManager = DockingManager; @@ -266,14 +266,14 @@ public override void LoadElementFromXml(XmlReader xmlReader, KryptonPageCollecti #endregion #region Implementation - private void OnFloatspacePageCloseClicked(object sender, UniqueNameEventArgs e) + private void OnFloatspacePageCloseClicked(object? sender, UniqueNameEventArgs e) { // Generate event so that the close action is handled for the named page KryptonDockingManager? dockingManager = DockingManager; dockingManager?.CloseRequest(new[] { e.UniqueName }); } - private void OnFloatspacePagesDoubleClicked(object sender, UniqueNamesEventArgs e) + private void OnFloatspacePagesDoubleClicked(object? sender, UniqueNamesEventArgs e) { // If the number of pages to be converted into a separate floating window is less than the // total number of visible pages then we allow the change to occur. Otherwise it would cause @@ -285,7 +285,7 @@ private void OnFloatspacePagesDoubleClicked(object sender, UniqueNamesEventArgs } } - private void OnFloatspaceDropDownClicked(object sender, CancelDropDownEventArgs e) + private void OnFloatspaceDropDownClicked(object? sender, CancelDropDownEventArgs e) { // Generate event so that the appropriate context menu options are presented and actioned KryptonDockingManager? dockingManager = DockingManager; @@ -298,7 +298,7 @@ private void OnFloatspaceDropDownClicked(object sender, CancelDropDownEventArgs } } - private void OnFloatspaceBeforePageDrag(object sender, PageDragCancelEventArgs e) + private void OnFloatspaceBeforePageDrag(object? sender, PageDragCancelEventArgs e) { // Validate the list of names to those that are still present in the floatspace var pages = e.Pages.Where(page => page is not KryptonStorePage && (FloatspaceControl.CellForPage(page) != null)).ToList(); diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingManager.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingManager.cs index 26889edff..05d7dc779 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingManager.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -1836,7 +1836,7 @@ public virtual bool ShowPageContextMenuRequest([DisallowNull] KryptonPage? page, throw new ArgumentNullException(nameof(kcm)); } - // By default there is nothing to display + // By default, there is nothing to display var retDisplay = false; // If the page is not located in the hierarchy then there are no options we can provide @@ -4093,13 +4093,19 @@ private static void RemoveControlStorePages(DockingElement element, string[] uni } } - private void OnStringPropertyChanged(object sender, PropertyChangedEventArgs e) => - // Piggy back the name of the changed property in the unique name parameter - PropogateAction(DockingPropogateAction.StringChanged, new[] { e.PropertyName }); + private void OnStringPropertyChanged(object? sender, PropertyChangedEventArgs e) + { + // Piggyback the name of the changed property in the unique name parameter + string[]? uniqueNames = e.PropertyName is null + ? null + : new string[] { e.PropertyName }; + + PropogateAction(DockingPropogateAction.StringChanged, uniqueNames); + } - private void OnDropDownWorkspaceClicked(object sender, EventArgs e) + private void OnDropDownWorkspaceClicked(object? sender, EventArgs e) { - var workspaceItem = (KryptonContextMenuItem)sender; + var workspaceItem = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); // Action depends on the current location if (workspaceItem.Tag is string uniqueName) @@ -4120,9 +4126,9 @@ private void OnDropDownWorkspaceClicked(object sender, EventArgs e) } } - private void OnDropDownNavigatorClicked(object sender, EventArgs e) + private void OnDropDownNavigatorClicked(object? sender, EventArgs e) { - var workspaceItem = (KryptonContextMenuItem)sender; + var workspaceItem = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); if (workspaceItem.Tag is string uniqueName) { @@ -4143,9 +4149,9 @@ private void OnDropDownNavigatorClicked(object sender, EventArgs e) } } - private void OnDropDownAutoHiddenClicked(object sender, EventArgs e) + private void OnDropDownAutoHiddenClicked(object? sender, EventArgs e) { - var autoHiddenItem = (KryptonContextMenuItem)sender; + var autoHiddenItem = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); if (autoHiddenItem.Tag is string uniqueName) { @@ -4166,9 +4172,9 @@ private void OnDropDownAutoHiddenClicked(object sender, EventArgs e) } } - private void OnDropDownDockedClicked(object sender, EventArgs e) + private void OnDropDownDockedClicked(object? sender, EventArgs e) { - var dockedItem = (KryptonContextMenuItem)sender; + var dockedItem = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); if (dockedItem.Tag is string uniqueName) { @@ -4189,10 +4195,10 @@ private void OnDropDownDockedClicked(object sender, EventArgs e) } } - private void OnDropDownFloatingClicked(object sender, EventArgs e) + private void OnDropDownFloatingClicked(object? sender, EventArgs e) { // Get the unique name of the page that needs to be converted to floating - var floatingItem = (KryptonContextMenuItem)sender; + var floatingItem = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); if (floatingItem.Tag is string uniqueName) { @@ -4213,10 +4219,10 @@ private void OnDropDownFloatingClicked(object sender, EventArgs e) } } - private void OnDropDownCloseClicked(object sender, EventArgs e) + private void OnDropDownCloseClicked(object? sender, EventArgs e) { - var closeItem = (KryptonContextMenuItem)sender; - CloseRequest(new[] { (string)closeItem.Tag! }); + var closeItem = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); + CloseRequest(new[] { (closeItem.Tag as string) ?? string.Empty}); } private static KryptonPage[] ArrayFromCollection(KryptonPageCollection pages) diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingNavigator.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingNavigator.cs index 301d0fb51..5397155bd 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingNavigator.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingNavigator.cs @@ -5,13 +5,14 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion // ReSharper disable MemberCanBeInternal +// ReSharper disable RedundantNullableFlowAttribute namespace Krypton.Docking { /// @@ -79,7 +80,7 @@ public override IDockingElement? Parent if (dockingManager != null) { var args = new DockableNavigatorEventArgs(DockableNavigatorControl, this); - dockingManager?.RaiseDockableNavigatorAdded(args); + dockingManager.RaiseDockableNavigatorAdded(args); } } } @@ -446,7 +447,7 @@ public void RemoveAllPages(bool disposePage) /// /// Action that is requested to be performed. /// Array of unique names of the pages the action relates to. - public override void PropogateAction(DockingPropogateAction action, string[] uniqueNames) + public override void PropogateAction(DockingPropogateAction action, string[]? uniqueNames) { KryptonPageCollection pageCollection = DockableNavigatorControl.Pages; switch (action) @@ -926,7 +927,7 @@ public override void LoadElementFromXml(XmlReader xmlReader, KryptonPageCollecti #endregion #region Implementation - private void OnDockableNavigatorDisposed(object sender, EventArgs e) + private void OnDockableNavigatorDisposed(object? sender, EventArgs e) { // Unhook from events to prevent memory leaking DockableNavigatorControl.Disposed -= OnDockableNavigatorDisposed; @@ -943,7 +944,7 @@ private void OnDockableNavigatorDisposed(object sender, EventArgs e) } } - private void OnDockableNavigatorPageInserting(object sender, KryptonPageEventArgs e) + private void OnDockableNavigatorPageInserting(object? sender, KryptonPageEventArgs e) { // Remove any store page for the unique name of this page being added. In either case of adding a store // page or a regular page we want to ensure there does not exist a store page for that same unique name. @@ -955,7 +956,7 @@ private void OnDockableNavigatorPageInserting(object sender, KryptonPageEventArg } } - private void OnDockableNavigatorBeforePageDrag(object sender, PageDragCancelEventArgs e) + private void OnDockableNavigatorBeforePageDrag(object? sender, PageDragCancelEventArgs e) { // Validate the list of names to those that are still present in the navigator var pages = e.Pages.Where(page => page is not KryptonStorePage && DockableNavigatorControl.Pages.Contains(page)).ToList(); @@ -972,7 +973,7 @@ private void OnDockableNavigatorBeforePageDrag(object sender, PageDragCancelEven e.Cancel = true; } - private void OnDockableNavigatorPageDrop(object sender, PageDropEventArgs e) + private void OnDockableNavigatorPageDrop(object? sender, PageDropEventArgs e) { // Use event to indicate the page is moving to a navigator and allow it to be cancelled KryptonDockingManager? dockingManager = DockingManager; diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingSpace.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingSpace.cs index 29597df51..8d518ab4a 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingSpace.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingSpace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -63,10 +63,16 @@ public void Append(KryptonPage[]? pages) if (pages != null) { ObserveAutoHiddenSlideSize(pages); - // If there is no active cell... + // If there is no active cell, or cell is page-less... KryptonWorkspaceCell? cell = SpaceControl?.ActiveCell; - if (cell == null) + if (cell == null || cell.Pages.Count == 0) { + // Remove the page-less cell if exists... + if (cell?.Pages.Count == 0) + { + SpaceControl!.Root.Children!.Remove(cell); + } + // ...create a new cell and place at the end of the root collection cell = new KryptonWorkspaceCell(); SpaceControl!.Root.Children!.Add(cell); @@ -811,7 +817,7 @@ protected KryptonSpace? SpaceControl /// /// Source of the event. /// A KryptonPageEventArgs containing the event data. - protected virtual void OnSpaceCellPageInserting(object sender, KryptonPageEventArgs e) + protected virtual void OnSpaceCellPageInserting(object? sender, KryptonPageEventArgs e) { KryptonDockingManager? dockingManager = DockingManager; if (dockingManager != null) @@ -871,7 +877,7 @@ protected virtual void OnSpaceCellPageInserting(object sender, KryptonPageEventA /// /// Source of the event. /// A PageDropEventArgs containing the event data. - protected abstract void RaiseSpacePageDrop(object sender, PageDropEventArgs e); + protected abstract void RaiseSpacePageDrop(object? sender, PageDropEventArgs e); /// /// Perform docking element specific actions based on the loading xml. @@ -899,7 +905,7 @@ protected override void LoadDockingElement(XmlReader xmlReader, KryptonPageColle #endregion #region Implementation - private void OnSpaceDisposed(object sender, EventArgs e) + private void OnSpaceDisposed(object? sender, EventArgs e) { // Unhook from events to prevent memory leaking if (SpaceControl != null) @@ -913,7 +919,7 @@ private void OnSpaceDisposed(object sender, EventArgs e) RaiseRemoved(); } - private void OnSpaceCellAdding(object sender, WorkspaceCellEventArgs e) + private void OnSpaceCellAdding(object? sender, WorkspaceCellEventArgs e) { var childMinSize = e.Cell.GetMinSize(); if (SpaceControl != null) @@ -928,16 +934,17 @@ private void OnSpaceCellAdding(object sender, WorkspaceCellEventArgs e) e.Cell.Disposed += OnSpaceCellRemoved; } - private void OnSpaceCellRemoved(object sender, EventArgs e) + private void OnSpaceCellRemoved(object? sender, EventArgs e) { // Remove event hooks so cell can be garbage collected - var cell = (KryptonWorkspaceCell)sender; - cell.Disposed -= OnSpaceCellRemoved; - - RaiseCellRemoved(cell); + if (sender is KryptonWorkspaceCell cell) + { + cell.Disposed -= OnSpaceCellRemoved; + RaiseCellRemoved(cell); + } } - private void OnSpaceControlPageLoading(object sender, PageLoadingEventArgs e) + private void OnSpaceControlPageLoading(object? sender, PageLoadingEventArgs e) { KryptonDockingManager? dockingManager = DockingManager; if (dockingManager != null) @@ -947,7 +954,7 @@ private void OnSpaceControlPageLoading(object sender, PageLoadingEventArgs e) } } - private void OnSpaceControlPageSaving(object sender, PageSavingEventArgs e) + private void OnSpaceControlPageSaving(object? sender, PageSavingEventArgs e) { KryptonDockingManager? dockingManager = DockingManager; if (dockingManager != null) @@ -957,7 +964,7 @@ private void OnSpaceControlPageSaving(object sender, PageSavingEventArgs e) } } - private void OnSpaceControlRecreateLoadingPage(object sender, RecreateLoadingPageEventArgs e) + private void OnSpaceControlRecreateLoadingPage(object? sender, RecreateLoadingPageEventArgs e) { KryptonDockingManager? dockingManager = DockingManager; dockingManager?.RaiseRecreateLoadingPage(e); diff --git a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingWorkspace.cs b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingWorkspace.cs index eca36952a..9d92f7619 100644 --- a/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingWorkspace.cs +++ b/Source/Krypton Components/Krypton.Docking/Elements Impl/KryptonDockingWorkspace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -567,7 +567,7 @@ protected override void RaiseCellRemoved(KryptonWorkspaceCell cell) /// /// Source of the event. /// A PageDropEventArgs containing the event data. - protected override void RaiseSpacePageDrop(object sender, PageDropEventArgs e) + protected override void RaiseSpacePageDrop(object? sender, PageDropEventArgs e) { // Use event to indicate the page is moving to a workspace and allow it to be cancelled KryptonDockingManager? dockingManager = DockingManager; @@ -592,7 +592,7 @@ protected override void RaiseSpacePageDrop(object sender, PageDropEventArgs e) #endregion #region Implementation - private void OnDockableWorkspaceBeforePageDrag(object sender, PageDragCancelEventArgs e) + private void OnDockableWorkspaceBeforePageDrag(object? sender, PageDragCancelEventArgs e) { // Validate the list of names to those that are still present in the dockspace var pages = new List(); diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupEventArgs.cs index 08e234066..8661894c6 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupPanelEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupPanelEventArgs.cs index 6a16ab8c2..d9f3b6f85 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupPanelEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenGroupPanelEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenSeparatorResizeEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenSeparatorResizeEventArgs.cs index 50100aef9..15129af4f 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenSeparatorResizeEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenSeparatorResizeEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenShowingStateEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenShowingStateEventArgs.cs index d6083e227..8aea5dcbc 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenShowingStateEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/AutoHiddenShowingStateEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/CancelDropDownEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/CancelDropDownEventArgs.cs index ab7095786..9380ec2e9 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/CancelDropDownEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/CancelDropDownEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/CancelUniqueNameEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/CancelUniqueNameEventArgs.cs index 445206b7c..1f82f4e2d 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/CancelUniqueNameEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/CancelUniqueNameEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/CloseRequestEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/CloseRequestEventArgs.cs index 23b9e0d1d..7511386c3 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/CloseRequestEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/CloseRequestEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/ContextPageEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/ContextPageEventArgs.cs index a5139dfbf..6eb018388 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/ContextPageEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/ContextPageEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalLoadingEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalLoadingEventArgs.cs index 19033cada..62f4aee07 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalLoadingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalLoadingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalSavingEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalSavingEventArgs.cs index e83aae093..6c9d77137 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalSavingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockGlobalSavingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockPageLoadingEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockPageLoadingEventArgs.cs index 6253c7096..a7365f6e8 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockPageLoadingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockPageLoadingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockPageSavingEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockPageSavingEventArgs.cs index c6a18c6f7..2cad29fb2 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockPageSavingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockPageSavingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockableNavigatorEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockableNavigatorEventArgs.cs index 78ab03f33..1cc00b59a 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockableNavigatorEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockableNavigatorEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceCellEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceCellEventArgs.cs index 0c35de172..f3edd913a 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceCellEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceCellEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceEventArgs.cs index 5c95ace3d..ddf3026ae 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockableWorkspaceEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceCellEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceCellEventArgs.cs index 5928c4d92..eec7daf90 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceCellEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceCellEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceEventArgs.cs index 7a482a40f..e0beb3c69 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorEventArgs.cs index bd20c5e8a..a57ba34b5 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorResizeEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorResizeEventArgs.cs index 568caa46a..da7f2e8ee 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorResizeEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/DockspaceSeparatorResizeEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/FloatingWindowEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/FloatingWindowEventArgs.cs index aea62eee4..aa3d45660 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/FloatingWindowEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/FloatingWindowEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceCellEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceCellEventArgs.cs index f36ef7c4e..29c275c6f 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceCellEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceCellEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceEventArgs.cs index 62ea9f462..3346532c7 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/FloatspaceEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/PagesEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/PagesEventArgs.cs index db38e1e88..926abb7f0 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/PagesEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/PagesEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/ScreenAndOffsetEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/ScreenAndOffsetEventArgs.cs index df4c8e9b1..ab5b35e94 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/ScreenAndOffsetEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/ScreenAndOffsetEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/StorePageEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/StorePageEventArgs.cs index a5e2e83be..0ce4e7b92 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/StorePageEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/StorePageEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNameEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNameEventArgs.cs index 1ccbcf775..b7667795d 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNameEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNameEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNamesEventArgs.cs b/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNamesEventArgs.cs index 3833640a5..4f328fdad 100644 --- a/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNamesEventArgs.cs +++ b/Source/Krypton Components/Krypton.Docking/Event Args/UniqueNamesEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/General/Definitions.cs b/Source/Krypton Components/Krypton.Docking/General/Definitions.cs index 4e086be22..46942a04e 100644 --- a/Source/Krypton Components/Krypton.Docking/General/Definitions.cs +++ b/Source/Krypton Components/Krypton.Docking/General/Definitions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/General/DockingHelper.cs b/Source/Krypton Components/Krypton.Docking/General/DockingHelper.cs index d717f5cb3..b64dea714 100644 --- a/Source/Krypton Components/Krypton.Docking/General/DockingHelper.cs +++ b/Source/Krypton Components/Krypton.Docking/General/DockingHelper.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,8 +37,9 @@ public static DockStyle DockStyleFromDockEdge(DockingEdge edge, bool opposite) case DockingEdge.Right: return (opposite ? DockStyle.Left : DockStyle.Right); default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(edge.ToString()); return DockStyle.Top; } } diff --git a/Source/Krypton Components/Krypton.Docking/General/DockingMultiUpdate.cs b/Source/Krypton Components/Krypton.Docking/General/DockingMultiUpdate.cs index 7425f103f..70977f618 100644 --- a/Source/Krypton Components/Krypton.Docking/General/DockingMultiUpdate.cs +++ b/Source/Krypton Components/Krypton.Docking/General/DockingMultiUpdate.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/General/ObscureControl.cs b/Source/Krypton Components/Krypton.Docking/General/ObscureControl.cs index b34345ce8..297369c65 100644 --- a/Source/Krypton Components/Krypton.Docking/General/ObscureControl.cs +++ b/Source/Krypton Components/Krypton.Docking/General/ObscureControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Global/GlobalDeclarations.cs b/Source/Krypton Components/Krypton.Docking/Global/GlobalDeclarations.cs index 3beadadbb..be26716ac 100644 --- a/Source/Krypton Components/Krypton.Docking/Global/GlobalDeclarations.cs +++ b/Source/Krypton Components/Krypton.Docking/Global/GlobalDeclarations.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Krypton.Docking 2022.csproj b/Source/Krypton Components/Krypton.Docking/Krypton.Docking 2022.csproj index 7bb865a3a..4083dd575 100644 --- a/Source/Krypton Components/Krypton.Docking/Krypton.Docking 2022.csproj +++ b/Source/Krypton Components/Krypton.Docking/Krypton.Docking 2022.csproj @@ -1,126 +1,120 @@  - - - - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - - - - - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - - - net48;net481;net6.0-windows;net7.0-windows + + + + net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows + + + + + net48;net481;net8.0-windows;net9.0-windows - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - - - + net462;net47;net471;net472;net48;net481;net8.0-windows + + + - - Library - Krypton.Docking - Krypton.Docking - - false - Krypton.ico - false - true - AnyCPU - true - en - true - Debug;Release;Installer;Nightly;Canary - preview - enable - 6 - true - + + Library + Krypton.Docking + Krypton.Docking + + false + Krypton.ico + false + true + AnyCPU + true + en + true + Debug;Release;Installer;Nightly;Canary + enable + + 8 + latest + true + + true + - - Krypton.Docking - This is the docking module. - + + Krypton.Docking + This is the docking module. + - - - True - 4.0.0.0 - - - + + + True + 4.0.0.0 + + + - - True - + + True + - - build$([System.DateTime]::UtcNow.ToString("yyyy-MM-ddTHH:mm:ss:fffZ")) - + + build$([System.DateTime]::UtcNow.ToString("yyyy-MM-ddTHH:mm:ss:fffZ")) + - - - - General\PlatformInvoke.cs - - - - Component - - - Component - - - Component - - - Component - - - True - True - GenericImageResources.resx - - - - - - - - + + + + General\PlatformInvoke.cs + + + + Component + + + Component + + + Component + + + Component + + + True + True + GenericImageResources.resx + + + + + + + + - - - - - - - - ResXFileCodeGenerator - GenericImageResources.Designer.cs - - - - ..\..\..\Bin\$(Configuration)\Krypton.Docking.xml - ..\..\..\Bin\$(Configuration)\ - - - 1701;1702 - True - StrongKrypton.snk - License.md - True - + + + + + + + + ResXFileCodeGenerator + GenericImageResources.Designer.cs + + + + true + ..\..\..\Bin\$(Configuration)\ + + + 1701;1702 + True + StrongKrypton.snk + License.md + True + - - True - + + True + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Docking/Krypton.Docking.licenseheader b/Source/Krypton Components/Krypton.Docking/Krypton.Docking.licenseheader index 2be35dedf..4a5f245b6 100644 --- a/Source/Krypton Components/Krypton.Docking/Krypton.Docking.licenseheader +++ b/Source/Krypton Components/Krypton.Docking/Krypton.Docking.licenseheader @@ -6,7 +6,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Docking/Palette/DockingManagerStrings.cs b/Source/Krypton Components/Krypton.Docking/Palette/DockingManagerStrings.cs index 6423860f5..78f22a9cc 100644 --- a/Source/Krypton Components/Krypton.Docking/Palette/DockingManagerStrings.cs +++ b/Source/Krypton Components/Krypton.Docking/Palette/DockingManagerStrings.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -72,13 +72,14 @@ public DockingManagerStrings(KryptonDockingManager docking) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_textAutoHide.Equals(DEFAULT_TEXT_AUTO_HIDE) && - _textClose.Equals(DEFAULT_TEXT_CLOSE) && - _textDock.Equals(DEFAULT_TEXT_DOCK) && - _textFloat.Equals(DEFAULT_TEXT_FLOAT) && - _textHide.Equals(DEFAULT_TEXT_HIDE) && - _textTabbedDocument.Equals(DEFAULT_TEXT_TABBED_DOCUMENT) && - _textWindowLocation.Equals(DEFAULT_TEXT_WINDOW_LOCATION)); + _textClose.Equals(DEFAULT_TEXT_CLOSE) && + _textDock.Equals(DEFAULT_TEXT_DOCK) && + _textFloat.Equals(DEFAULT_TEXT_FLOAT) && + _textHide.Equals(DEFAULT_TEXT_HIDE) && + _textTabbedDocument.Equals(DEFAULT_TEXT_TABBED_DOCUMENT) && + _textWindowLocation.Equals(DEFAULT_TEXT_WINDOW_LOCATION)); #endregion diff --git a/Source/Krypton Components/Krypton.Docking/ViewDraw/ViewDrawAutoHiddenTab.cs b/Source/Krypton Components/Krypton.Docking/ViewDraw/ViewDrawAutoHiddenTab.cs index c9a672260..599b092a8 100644 --- a/Source/Krypton Components/Krypton.Docking/ViewDraw/ViewDrawAutoHiddenTab.cs +++ b/Source/Krypton Components/Krypton.Docking/ViewDraw/ViewDrawAutoHiddenTab.cs @@ -5,11 +5,12 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion +// ReSharper disable RedundantNullableFlowAttribute namespace Krypton.Docking { /// @@ -31,9 +32,9 @@ internal class ViewDrawAutoHiddenTab : ViewDrawButton, /// Visual orientation used for drawing the tab. public ViewDrawAutoHiddenTab([DisallowNull] KryptonPage page, VisualOrientation orientation) - : base(page.StateDisabled.CheckButton, + : base(page.StateDisabled.CheckButton, page.StateNormal.CheckButton, - page.StateTracking.CheckButton, + page.StateTracking.CheckButton, page.StatePressed.CheckButton, null, null, orientation, false) { diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavClose.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavClose.cs index f67174e5f..417329791 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavClose.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavClose.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,7 +34,7 @@ public ButtonSpecNavClose(KryptonNavigator navigator) /// /// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { switch (Navigator.Button.CloseButtonDisplay) { @@ -48,8 +48,9 @@ public override bool GetVisible(PaletteBase? palette) case ButtonDisplay.Logic: return true; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.CloseButtonDisplay.ToString()); return false; } } @@ -59,7 +60,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) + public override ButtonEnabled GetEnabled(PaletteBase palette) { switch (Navigator.Button.CloseButtonDisplay) { @@ -74,8 +75,9 @@ public override ButtonEnabled GetEnabled(PaletteBase? palette) // Only enabled if a page is selected return (Navigator.SelectedPage != null) ? ButtonEnabled.True : ButtonEnabled.False; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.CloseButtonDisplay.ToString()); return ButtonEnabled.False; } } diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavContext.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavContext.cs index f5e8a895b..694771b71 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavContext.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavContext.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,7 +38,7 @@ public ButtonSpecNavContext(KryptonNavigator navigator) /// /// Palette to use for inheriting values. /// Button visibiliy. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { switch (Navigator.Button.ContextButtonDisplay) { @@ -49,6 +49,7 @@ public override bool GetVisible(PaletteBase? palette) case ButtonDisplay.ShowEnabled: // Always show return true; + case ButtonDisplay.Logic: // Use button display logic to determine actual operation switch (Navigator.Button.ButtonDisplayLogic) @@ -60,13 +61,16 @@ public override bool GetVisible(PaletteBase? palette) case ButtonDisplayLogic.ContextNextPrevious: return true; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.ButtonDisplayLogic.ToString()); return false; } + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.ContextButtonDisplay.ToString()); return false; } } @@ -76,7 +80,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) + public override ButtonEnabled GetEnabled(PaletteBase palette) { switch (Navigator.Button.ContextButtonDisplay) { @@ -91,8 +95,9 @@ public override ButtonEnabled GetEnabled(PaletteBase? palette) // Only enabled if there is a selected page return (Navigator.SelectedPage != null ? ButtonEnabled.True : ButtonEnabled.False); default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.ContextButtonDisplay.ToString()); return ButtonEnabled.False; } diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixed.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixed.cs index 9895250a4..b8c4421a0 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixed.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixed.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ protected ButtonSpecNavFixed([DisallowNull] KryptonNavigator navigator, Debug.Assert(navigator != null); // Remember back reference to owning navigator. - Navigator = navigator; + Navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Fix the type ProtectedType = fixedStyle; @@ -50,8 +50,9 @@ protected ButtonSpecNavFixed([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (base.IsDefault && - (HeaderLocation == HeaderLocation.PrimaryHeader)); + (HeaderLocation == HeaderLocation.PrimaryHeader)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixedConverter.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixedConverter.cs index c1d1cb7ea..a196e12ed 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixedConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFixedConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormClose.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormClose.cs index 744253fa1..01532bbef 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormClose.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormClose.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -15,7 +15,7 @@ public class ButtonSpecNavFormClose : ButtonSpecNavFixed private bool _enabled = true; - private KryptonNavigator _navigator; + private readonly KryptonNavigator _navigator; #endregion @@ -59,22 +59,15 @@ public bool Enabled #region ButtonSpecNavFixed Implementation - public override bool GetVisible(PaletteBase? palette) - { - // We do not show if the custom chrome is combined with composition, - // in which case the form buttons are handled by the composition - if (_navigator.Owner!.ApplyComposition && _navigator.Owner.ApplyCustomChrome) - { - return false; - } - + /// + public override bool GetVisible(PaletteBase palette) => // Have all buttons been turned off? - return _navigator.Owner.ControlBox && _navigator.Owner.CloseBox; - } + _navigator.Owner!.ControlBox && _navigator.Owner.CloseBox; + public override ButtonCheckState GetChecked(PaletteBase? palette) => ButtonCheckState.NotCheckButton; - public override ButtonEnabled GetEnabled(PaletteBase? palette) => _navigator.Owner!.CloseBox && Enabled ? ButtonEnabled.True : ButtonEnabled.False; + public override ButtonEnabled GetEnabled(PaletteBase palette) => _navigator.Owner!.CloseBox && Enabled ? ButtonEnabled.True : ButtonEnabled.False; #endregion @@ -88,7 +81,7 @@ protected override void OnClick(EventArgs e) { var mea = (MouseEventArgs)e; - if (GetView()!.ClientRectangle.Contains(mea.Location)) + if (GetView().ClientRectangle.Contains(mea.Location)) { PropertyInfo? propertyInfo = typeof(Form).GetProperty(nameof(CloseReason), BindingFlags.Instance | BindingFlags.SetProperty | BindingFlags.NonPublic); diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMaximize.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMaximize.cs index 5b08f8429..6b7fd4537 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMaximize.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMaximize.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -13,7 +13,7 @@ public class ButtonSpecNavFormMaximize : ButtonSpecNavFixed { #region Instance Fields - private KryptonNavigator _navigator; + private readonly KryptonNavigator _navigator; #endregion @@ -30,15 +30,8 @@ public ButtonSpecNavFormMaximize(KryptonNavigator navigator) : base(navigator, P #region ButtonSpecNavFixed Implementation - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { - // We do not show if the custom chrome is combined with composition, - // in which case the form buttons are handled by the composition - if (_navigator.Owner!.ApplyComposition && _navigator.Owner!.ApplyCustomChrome) - { - return false; - } - // The maximize button is never present on tool windows switch (_navigator.Owner!.FormBorderStyle) { @@ -59,7 +52,7 @@ public override bool GetVisible(PaletteBase? palette) public override ButtonCheckState GetChecked(PaletteBase? palette) => ButtonCheckState.NotCheckButton; - public override ButtonEnabled GetEnabled(PaletteBase? palette) => + public override ButtonEnabled GetEnabled(PaletteBase palette) => // Has the maximize buttons been turned off? _navigator.Owner!.MaximizeBox ? ButtonEnabled.True : ButtonEnabled.False; @@ -77,7 +70,7 @@ protected override void OnClick(EventArgs e) { // Only if the mouse is still within the button bounds do we perform action var mea = (MouseEventArgs)e; - if (GetView()!.ClientRectangle.Contains(mea.Location)) + if (GetView().ClientRectangle.Contains(mea.Location)) { // Toggle between maximized and restored /*_navigator.Owner!.SendSysCommand(_navigator.Owner!.WindowState == FormWindowState.Maximized diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMinimize.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMinimize.cs index 9bd624fe4..a2f48b6ca 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMinimize.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavFormMinimize.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -15,10 +15,10 @@ public ButtonSpecNavFormMinimize(KryptonNavigator navigator) : base(navigator, P { } - public override bool GetVisible(PaletteBase? palette) => throw new NotImplementedException(); + public override bool GetVisible(PaletteBase palette) => throw new NotImplementedException(); public override ButtonCheckState GetChecked(PaletteBase? palette) => throw new NotImplementedException(); - public override ButtonEnabled GetEnabled(PaletteBase? palette) => throw new NotImplementedException(); + public override ButtonEnabled GetEnabled(PaletteBase palette) => throw new NotImplementedException(); } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutBar.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutBar.cs index 61a10a304..765c75409 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutBar.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,15 +32,15 @@ internal class ButtonSpecNavManagerLayoutBar : ButtonSpecManagerLayout /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. public ButtonSpecNavManagerLayoutBar(Control control, - PaletteRedirect? redirector, - ButtonSpecCollectionBase variableSpecs, + PaletteRedirect redirector, + ButtonSpecCollectionBase? variableSpecs, ViewLayoutDocker[] viewDockers, IPaletteMetric[] viewMetrics, PaletteMetricInt[] viewMetricIntOutside, PaletteMetricInt[] viewMetricIntInside, PaletteMetricPadding[] viewMetricPaddings, GetToolStripRenderer getRenderer, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : this(control, redirector, variableSpecs, null, viewDockers, viewMetrics, viewMetricIntOutside, viewMetricIntInside, @@ -63,8 +63,8 @@ public ButtonSpecNavManagerLayoutBar(Control control, /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. public ButtonSpecNavManagerLayoutBar(Control control, - PaletteRedirect? redirector, - ButtonSpecCollectionBase variableSpecs, + PaletteRedirect redirector, + ButtonSpecCollectionBase? variableSpecs, ButtonSpecCollectionBase? fixedSpecs, ViewLayoutDocker[] viewDockers, IPaletteMetric[] viewMetrics, @@ -72,11 +72,11 @@ public ButtonSpecNavManagerLayoutBar(Control control, PaletteMetricInt[] viewMetricIntInside, PaletteMetricPadding[] viewMetricPaddings, GetToolStripRenderer getRenderer, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : base(control, redirector, variableSpecs, fixedSpecs, viewDockers, viewMetrics, viewMetricIntOutside, viewMetricIntInside, viewMetricPaddings, getRenderer, - needPaint) => + needPaint!) => RemapTarget = ButtonSpecNavRemap.ButtonSpecRemapTarget.LabelPanel; #endregion @@ -205,7 +205,7 @@ public void SetRemapTarget(ButtonStyle style) /// Base palette class. /// ButtonSpec instance. /// Palette redirector for the button spec instance. - public override PaletteRedirect CreateButtonSpecRemap(PaletteRedirect? redirector, + public override PaletteRedirect CreateButtonSpecRemap(PaletteRedirect redirector, ButtonSpec buttonSpec) => new ButtonSpecNavRemap(redirector, buttonSpec, RemapTarget); diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutHeaderBar.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutHeaderBar.cs index ed8ac85e4..6ea965582 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutHeaderBar.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavManagerLayoutHeaderBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,8 +40,8 @@ internal class ButtonSpecNavManagerLayoutHeaderBar : ButtonSpecManagerLayout /// Palette source for color remapping. /// Palette state for color remapping. public ButtonSpecNavManagerLayoutHeaderBar(Control control, - PaletteRedirect? redirector, - ButtonSpecCollectionBase variableSpecs, + PaletteRedirect redirector, + ButtonSpecCollectionBase? variableSpecs, ButtonSpecCollectionBase? fixedSpecs, ViewLayoutDocker[] viewDockers, IPaletteMetric[] viewMetrics, @@ -80,7 +80,7 @@ public void UpdateRemapping(IPaletteContent? paletteContent, foreach (ButtonSpecView view in ButtonSpecViews) { // Cast the remapping palette to the correct type - var remapPalette = (ButtonSpecRemapByContentCache)view.RemapPalette!; + var remapPalette = (ButtonSpecRemapByContentCache)view.RemapPalette; remapPalette.SetPaletteContent(_paletteContent); remapPalette.SetPaletteState(_paletteState); } @@ -92,7 +92,7 @@ public void UpdateRemapping(IPaletteContent? paletteContent, /// Base palette class. /// ButtonSpec instance. /// Palette redirector for the button spec instance. - public override PaletteRedirect CreateButtonSpecRemap(PaletteRedirect? redirector, + public override PaletteRedirect CreateButtonSpecRemap(PaletteRedirect redirector, ButtonSpec buttonSpec) => new ButtonSpecRemapByContentCache(redirector, buttonSpec); @@ -111,11 +111,11 @@ public override PaletteRedirect CreateButtonSpecRemap(PaletteRedirect? redirecto /// Associated ButtonSpecView instance. /// Index of view docker button is placed onto. protected override void ButtonSpecCreated(ButtonSpec buttonSpec, - ButtonSpecView buttonView, + ButtonSpecView? buttonView, int viewDockerIndex) { // Cast the remapping palette to the correct type - var remapPalette = (ButtonSpecRemapByContentCache)buttonView.RemapPalette!; + var remapPalette = (ButtonSpecRemapByContentCache)buttonView?.RemapPalette!; // Update button with the foreground used for color mapping remapPalette.SetPaletteContent(_paletteContent); diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavNext.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavNext.cs index 8557d41a6..c2e10a8b0 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavNext.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavNext.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,7 +34,7 @@ public ButtonSpecNavNext(KryptonNavigator navigator) /// /// Palette to use for inheriting values. /// Button visibiliy. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { switch (Navigator.Button.NextButtonDisplay) { @@ -56,13 +56,15 @@ public override bool GetVisible(PaletteBase? palette) case ButtonDisplayLogic.ContextNextPrevious: return true; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.ButtonDisplayLogic.ToString()); return false; } default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.NextButtonDisplay.ToString()); return false; } } @@ -72,7 +74,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) + public override ButtonEnabled GetEnabled(PaletteBase palette) { switch (Navigator.Button.NextButtonDisplay) { @@ -86,8 +88,9 @@ public override ButtonEnabled GetEnabled(PaletteBase? palette) case ButtonDisplay.Logic: return Navigator.ViewBuilder!.NextActionEnabled(Navigator.Button.NextButtonAction); default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.NextButtonDisplay.ToString()); return ButtonEnabled.False; } diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavPrevious.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavPrevious.cs index 9a6dd1c78..3bcbba8ab 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavPrevious.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavPrevious.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,18 +33,20 @@ public ButtonSpecNavPrevious(KryptonNavigator navigator) /// Gets the button visible value. /// /// Palette to use for inheriting values. - /// Button visibiliy. - public override bool GetVisible(PaletteBase? palette) + /// Button visibility. + public override bool GetVisible(PaletteBase palette) { switch (Navigator.Button.PreviousButtonDisplay) { case ButtonDisplay.Hide: // Always hide return false; + case ButtonDisplay.ShowDisabled: case ButtonDisplay.ShowEnabled: // Always show return true; + case ButtonDisplay.Logic: // Use button display logic to determine actual operation switch (Navigator.Button.ButtonDisplayLogic) @@ -56,13 +58,16 @@ public override bool GetVisible(PaletteBase? palette) case ButtonDisplayLogic.ContextNextPrevious: return true; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.ButtonDisplayLogic.ToString()); return false; } + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.PreviousButtonDisplay.ToString()); return false; } } @@ -72,7 +77,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) + public override ButtonEnabled GetEnabled(PaletteBase palette) { switch (Navigator.Button.PreviousButtonDisplay) { @@ -86,8 +91,9 @@ public override ButtonEnabled GetEnabled(PaletteBase? palette) case ButtonDisplay.Logic: return Navigator.ViewBuilder!.PreviousActionEnabled(Navigator.Button.PreviousButtonAction); default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Button.PreviousButtonDisplay.ToString()); return ButtonEnabled.False; } } diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavRemap.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavRemap.cs index f06ed1843..0971eeb40 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavRemap.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavRemap.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -127,14 +127,14 @@ public enum ButtonSpecRemapTarget /// Initial palette target for redirection. /// Reference to button specification. /// Target for remapping the color onto. - public ButtonSpecNavRemap(PaletteBase? target, - [DisallowNull] ButtonSpec buttonSpec, + public ButtonSpecNavRemap(PaletteBase target, + [DisallowNull] ButtonSpec buttonSpec, ButtonSpecRemapTarget remapTarget) : base(target) { Debug.Assert(buttonSpec != null); - _buttonSpec = buttonSpec; + _buttonSpec = buttonSpec!; _remapTarget = remapTarget; } #endregion @@ -319,8 +319,9 @@ private Color GetRemapTarget(PaletteState state) case ButtonSpecRemapTarget.TabCustom3: return base.GetContentShortTextColor1(PaletteContentStyle.TabCustom3, state); default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_remapTarget.ToString()); return Color.Black; } } diff --git a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavigator.cs b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavigator.cs index 6993b7589..fced334fb 100644 --- a/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavigator.cs +++ b/Source/Krypton Components/Krypton.Navigator/ButtonSpecs/ButtonSpecNavigator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -110,8 +110,9 @@ private PaletteButtonSpecStyle NavigatorToPaletteType(PaletteNavButtonSpecStyle case PaletteNavButtonSpecStyle.RibbonExpand: return PaletteButtonSpecStyle.RibbonExpand; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(type.ToString()); return PaletteButtonSpecStyle.Generic; } } @@ -161,8 +162,9 @@ private PaletteNavButtonSpecStyle PaletteTypeToNavigator(PaletteButtonSpecStyle case PaletteButtonSpecStyle.RibbonExpand: return PaletteNavButtonSpecStyle.RibbonExpand; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(type.ToString()); return PaletteNavButtonSpecStyle.Generic; } } diff --git a/Source/Krypton Components/Krypton.Navigator/Controller/DragViewController.cs b/Source/Krypton Components/Krypton.Navigator/Controller/DragViewController.cs index 0b610fca9..42cf60f1a 100644 --- a/Source/Krypton Components/Krypton.Navigator/Controller/DragViewController.cs +++ b/Source/Krypton Components/Krypton.Navigator/Controller/DragViewController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -77,7 +77,7 @@ public DragViewController([DisallowNull] ViewBase target) MousePoint = CommonHelper.NullPoint; AllowDragging = true; _dragging = false; - Target = target; + Target = target ?? throw new ArgumentNullException(nameof(target)); _lastClick = DateTime.Now.AddDays(-1); } #endregion @@ -301,7 +301,7 @@ public virtual bool KeyUp([DisallowNull] Control c, [DisallowNull] KeyEventArgs // Recalculate if the mouse is over the button area // TODO: What is this doing ? i.e. should the return value be used ? - Target.ClientRectangle.Contains(c.PointToClient(Control.MousePosition)); + return Target.ClientRectangle.Contains(c.PointToClient(Control.MousePosition)); } } @@ -412,7 +412,7 @@ protected virtual void OnLeftMouseDown(EventArgs e) protected virtual void OnDragStart(Point mousePt, Point offset, Control c) { // Convert point from client to screen coordinates - mousePt = Target.OwningControl.PointToScreen(mousePt); + mousePt = Target.OwningControl!.PointToScreen(mousePt); var ce = new DragStartEventCancelArgs(mousePt, offset, c); DragStart?.Invoke(this, ce); @@ -430,7 +430,7 @@ protected virtual void OnDragMove(Point mousePt) if (DragMove != null) { // Convert point from client to screen coordinates - mousePt = Target.OwningControl.PointToScreen(mousePt); + mousePt = Target.OwningControl!.PointToScreen(mousePt); DragMove(this, new PointEventArgs(mousePt)); } } @@ -445,7 +445,7 @@ protected virtual void OnDragEnd(Point mousePt) if (DragEnd != null) { // Convert point from client to screen coordinates - mousePt = Target.OwningControl.PointToScreen(mousePt); + mousePt = Target.OwningControl!.PointToScreen(mousePt); DragEnd(this, new PointEventArgs(mousePt)); } } diff --git a/Source/Krypton Components/Krypton.Navigator/Controller/OutlookMiniController.cs b/Source/Krypton Components/Krypton.Navigator/Controller/OutlookMiniController.cs index 73ee78421..df4e647d4 100644 --- a/Source/Krypton Components/Krypton.Navigator/Controller/OutlookMiniController.cs +++ b/Source/Krypton Components/Krypton.Navigator/Controller/OutlookMiniController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -352,7 +352,7 @@ protected void UpdateTargetState(Control? c) /// Mouse point. protected void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // When disabled the button itself is shown as normal, the diff --git a/Source/Krypton Components/Krypton.Navigator/Controller/PageButtonController.cs b/Source/Krypton Components/Krypton.Navigator/Controller/PageButtonController.cs index 969505c93..f82e5737c 100644 --- a/Source/Krypton Components/Krypton.Navigator/Controller/PageButtonController.cs +++ b/Source/Krypton Components/Krypton.Navigator/Controller/PageButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigator.cs b/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigator.cs index a300935c2..95afdaaeb 100644 --- a/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigator.cs +++ b/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -638,9 +638,9 @@ public bool ControlKryptonFormFeatures [Category(@"Visuals")] [Description(@"Overrides for defining disabled navigator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteNavigator? StateDisabled { get; private set; } + public PaletteNavigator StateDisabled { get; private set; } - private bool ShouldSerializeStateDisabled() => !StateDisabled!.IsDefault; + private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; /// /// Gets access to the normal navigator appearance entries. @@ -648,9 +648,9 @@ public bool ControlKryptonFormFeatures [Category(@"Visuals")] [Description(@"Overrides for defining normal navigator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteNavigator? StateNormal { get; private set; } + public PaletteNavigator StateNormal { get; private set; } - private bool ShouldSerializeStateNormal() => !StateNormal!.IsDefault; + private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; /// /// Gets access to the tracking navigator appearance entries. @@ -716,7 +716,7 @@ public NavigatorMode NavigatorMode // Ask the view builder to create new view based on new mode ViewBuilder = ViewBuilderBase.CreateViewBuilder(_mode); - ViewBuilder.Construct(this, ViewManager!, Redirector!); + ViewBuilder.Construct(this, ViewManager!, Redirector); // Need to layout the new view if (!IsInitializing) @@ -860,7 +860,7 @@ public bool AllowTabSelect /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public ToolTipManager ToolTipManager { get; private set; } + public ToolTipManager? ToolTipManager { get; private set; } #endregion @@ -1125,7 +1125,7 @@ protected override void OnInitialized(EventArgs e) // Ask the view builder to create new view based on new mode ViewBuilder = ViewBuilderBase.CreateViewBuilder(_mode); - ViewBuilder.Construct(this, ViewManager!, Redirector!); + ViewBuilder.Construct(this, ViewManager!, Redirector); if (LayoutOnInitialized) { @@ -1619,14 +1619,15 @@ protected virtual CloseButtonAction OnCloseAction(KryptonPage? page) case CloseButtonAction.None: // Do nothing break; + case CloseButtonAction.RemovePage: // If the page still exists after the event then remove it if (Pages.Contains(e.Item)) { Pages.Remove(e.Item); } - break; + case CloseButtonAction.RemovePageAndDispose: // If the page still exists after the event if (Pages.Contains(e.Item)) @@ -1637,19 +1638,20 @@ protected virtual CloseButtonAction OnCloseAction(KryptonPage? page) // Dispose of its resources e.Item.Dispose(); } - break; + case CloseButtonAction.HidePage: // If the page still exists after the event then hide it if (Pages.Contains(e.Item)) { e.Item.Hide(); } - break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(e.Action.ToString()); break; } } @@ -1830,11 +1832,11 @@ protected virtual void OnNeedPagePaint(object sender, NeedLayoutEventArgs e) internal ButtonSpecCollectionBase? FixedSpecs => Button.FixedSpecs; - internal PaletteRedirect? InternalRedirector => Redirector; + internal PaletteRedirect InternalRedirector => Redirector; internal void InternalForceViewLayout() => ForceViewLayout(); - internal ToolTipManager HoverManager { get; private set; } + internal ToolTipManager? HoverManager { get; private set; } internal bool InternalDesignMode => DesignMode; @@ -1906,41 +1908,48 @@ internal bool NextActionValid internal KryptonPage? PreviousActionPage([DisallowNull] KryptonPage page) { - Debug.Assert(page != null); - - // Get the index of the page - var pos = Pages.IndexOf(page); + Debug.Assert(page is not null); - // Search backwards towards start of pages collection - for (var i = pos - 1; i >= 0; i--) + if (page is not null) { - if (Pages[i].LastVisibleSet && Pages[i].Enabled) + // Get the index of the page + var pos = Pages.IndexOf(page); + + // Search backwards towards start of pages collection + for (var i = pos - 1; i >= 0; i--) { - return Pages[i]; + if (Pages[i].LastVisibleSet && Pages[i].Enabled) + { + return Pages[i]; + } } } - // Nothing visible before provided page + // Nothing visible before provided page, or page is null return null; } internal KryptonPage? NextActionPage([DisallowNull] KryptonPage page) { - Debug.Assert(page != null); + Debug.Assert(page is not null); - // Get the index of the page - var pos = Pages.IndexOf(page); - - // Search towards end of pages collection - for (var i = pos + 1; i < Pages.Count; i++) + if (page is not null) { - if (Pages[i].LastVisibleSet && Pages[i].Enabled) + // Get the index of the page + var pos = Pages.IndexOf(page); + + // Search towards end of pages collection + for (var i = pos + 1; i < Pages.Count; i++) { - return Pages[i]; + if (Pages[i].LastVisibleSet && Pages[i].Enabled) + { + return Pages[i]; + } } + } - // Nothing visible after provided page + // Nothing visible before provided page, or page is null return null; } @@ -2024,7 +2033,7 @@ internal void ReturnChildPanel() { // Must cast to the correct type in order to access the // internal method that allows a child control to be added - ((KryptonReadOnlyControls)Controls).AddInternal(ChildPanel); + ((KryptonReadOnlyControls)Controls).AddInternal(ChildPanel!); IsChildPanelBorrowed = false; } } @@ -2327,7 +2336,7 @@ private void OnPageRemoved(object sender, TypedCollectionEventArgs } } - private void OnPageClearing(object sender, EventArgs e) + private void OnPageClearing(object? sender, EventArgs e) { // If there is a page currently selected if (SelectedPage != null) @@ -2358,7 +2367,7 @@ private void OnPageClearing(object sender, EventArgs e) } } - private void OnPageCleared(object sender, EventArgs e) + private void OnPageCleared(object? sender, EventArgs e) { // Ignore call as view builder is already destructed if (!IsDisposed @@ -2375,7 +2384,7 @@ private void OnPageCleared(object sender, EventArgs e) } } - private void OnPageVisibleChanged(object sender, EventArgs e) + private void OnPageVisibleChanged(object? sender, EventArgs e) { // Ignore call as view builder is already destructed if (!IsDisposed @@ -2423,7 +2432,7 @@ private void OnPageVisibleChanged(object sender, EventArgs e) } } - private void OnPageEnabledChanged(object sender, EventArgs e) + private void OnPageEnabledChanged(object? sender, EventArgs e) { // Ignore call as view builder is already destructed if (!IsDisposed @@ -2442,7 +2451,7 @@ private void OnPageEnabledChanged(object sender, EventArgs e) } } - private void OnPageAppearanceChanged(object sender, PropertyChangedEventArgs e) + private void OnPageAppearanceChanged(object? sender, PropertyChangedEventArgs e) { // Ignore call as view builder is already destructed if (!IsDisposed @@ -2456,7 +2465,7 @@ private void OnPageAppearanceChanged(object sender, PropertyChangedEventArgs e) if (SelectedPage == page) { // And a change in a palette setting has occurred... - if (e.PropertyName == nameof(Palette)) + if (e.PropertyName == @"Palette") { // ...then need to repaint and layout to effect change if (page != null) @@ -2467,7 +2476,7 @@ private void OnPageAppearanceChanged(object sender, PropertyChangedEventArgs e) } // Inform the current view builder of possible appearance change - ViewBuilder.PageAppearanceChanged(page, e.PropertyName); + ViewBuilder.PageAppearanceChanged(page!, e?.PropertyName!); } } @@ -2755,7 +2764,7 @@ private void UpdateAllPagesVisible(bool visible, Type? excludeType) #endregion #region Private - private void OnOpeningContextMenu(object sender, CancelEventArgs e) + private void OnOpeningContextMenu(object? sender, CancelEventArgs e) { // Ignore call as view builder is already destructed if (!IsDisposed && (ViewBuilder != null)) @@ -2768,7 +2777,7 @@ private void OnOpeningContextMenu(object sender, CancelEventArgs e) else { // Get access to the menu items for selecting a page - var contextMenu = (KryptonContextMenu)sender; + var contextMenu = sender as KryptonContextMenu ?? throw new ArgumentNullException(nameof(sender)); // Kill any existing contents and add a items collection for the page entries contextMenu.Items.Clear(); @@ -2786,7 +2795,7 @@ private void OnOpeningContextMenu(object sender, CancelEventArgs e) || page is { LastVisibleSet: true, Enabled: true }) { // Add a vertical break after every 20 items - if ((menuItems > 0) + if ((menuItems > 0) && ((menuItems % 20) == 0) ) { @@ -2842,7 +2851,7 @@ private void OnOpeningContextMenu(object sender, CancelEventArgs e) } } - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed && (ViewBuilder != null)) { @@ -2919,7 +2928,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) _visualPopupToolTip?.Dispose(); // Create the actual tooltip popup object - _visualPopupToolTip = new VisualPopupToolTip(Redirector, + _visualPopupToolTip = new VisualPopupToolTip(Redirector!, sourceContent, Renderer, PaletteBackStyle.ControlToolTip, @@ -2936,11 +2945,11 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnStartHover(object sender, ToolTipEventArgs e) + private void OnStartHover(object? sender, ToolTipEventArgs e) { if (!IsDisposed && (ViewBuilder != null) @@ -2967,7 +2976,7 @@ private void OnStartHover(object sender, ToolTipEventArgs e) } } - private void OnEndHover(object sender, EventArgs e) + private void OnEndHover(object? sender, EventArgs e) { // Only notify the end of the hover if we have generated a start if (_tabHoverStarted) @@ -2977,27 +2986,27 @@ private void OnEndHover(object sender, EventArgs e) } } - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - private void OnVisualPopupPageDisposed(object sender, EventArgs e) + private void OnVisualPopupPageDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupPage = (VisualPopupPage)sender; + var popupPage = sender as VisualPopupPage ?? throw new ArgumentNullException(nameof(sender)); popupPage.Disposed -= OnVisualPopupPageDisposed; // Not showing a popup page any more _visualPopupPage = null; } - private void OnChildPanelControlRemoved(object sender, ControlEventArgs e) + private void OnChildPanelControlRemoved(object? sender, ControlEventArgs e) { // Cast to correct type // If a krypton page is being removed @@ -3179,11 +3188,11 @@ private bool NextOnUnselectedKryptonPage(Control? next) return false; } - private void OnViewManagerLayoutBefore(object sender, EventArgs e) => + private void OnViewManagerLayoutBefore(object? sender, EventArgs e) => // Tell the view to perform pre layout actions ViewBuilder?.PreLayout(); - private void OnViewManagerLayoutAfter(object sender, EventArgs e) => + private void OnViewManagerLayoutAfter(object? sender, EventArgs e) => // Tell the view to perform post layout actions ViewBuilder?.PostLayout(); @@ -3196,7 +3205,7 @@ private void ResetCachedKryptonContextMenu() _kcm.Items.Clear(); } - private void OnContextMenuClick(object sender, EventArgs e) + private void OnContextMenuClick(object? sender, EventArgs e) { // Cast to correct type var menuItem = sender as KryptonContextMenuItem; diff --git a/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigatorControlCollection.cs b/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigatorControlCollection.cs index 2b5133b3e..bfdde795c 100644 --- a/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigatorControlCollection.cs +++ b/Source/Krypton Components/Krypton.Navigator/Controls Navigator/KryptonNavigatorControlCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,17 +35,15 @@ public KryptonNavigatorControlCollection([DisallowNull] KryptonNavigator owner) /// Adds the specified control to the control collection. /// /// The KryptonPage to add to the control collection. - public override void Add([DisallowNull] Control value) + public override void Add(Control? value) { - Debug.Assert(value != null); + Debug.Assert(value is not null); - if (value == null) + if (value is null) { throw new ArgumentNullException(nameof(value)); } - // Cast to correct type - // We only allow KryptonPage controls to be added if (value is not KryptonPage) { diff --git a/Source/Krypton Components/Krypton.Navigator/Controls Visuals/VisualPopupPage.cs b/Source/Krypton Components/Krypton.Navigator/Controls Visuals/VisualPopupPage.cs index 0b665313f..8076d0bd5 100644 --- a/Source/Krypton Components/Krypton.Navigator/Controls Visuals/VisualPopupPage.cs +++ b/Source/Krypton Components/Krypton.Navigator/Controls Visuals/VisualPopupPage.cs @@ -5,12 +5,13 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion // ReSharper disable RedundantNullableFlowAttribute + namespace Krypton.Navigator { internal class VisualPopupPage : VisualPopup @@ -38,19 +39,19 @@ static VisualPopupPage() => /// Reference to page for display. /// Drawing renderer. public VisualPopupPage([DisallowNull] KryptonNavigator navigator, - [DisallowNull] KryptonPage page, - IRenderer? renderer) + [DisallowNull] KryptonPage page, + IRenderer renderer) : base(renderer, true) { Debug.Assert(navigator != null); Debug.Assert(page != null); // Remember references needed later - _navigator = navigator; - _page = page; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); + _page = page ?? throw new ArgumentNullException(nameof(page)); // Always var the layout that positions the actual page - var layoutPage = new ViewLayoutPopupPage(_navigator, _page); + var layoutPage = new ViewLayoutPopupPage(_navigator, _page!); // Create the internal panel used for containing content if (_navigator.StateNormal?.HeaderGroup != null) @@ -141,20 +142,19 @@ protected override void OnLayout(LayoutEventArgs levent) Rectangle borderRect = ClientRectangle; if (_navigator.StateNormal?.HeaderGroup != null) { - if (Renderer != null) - { - GraphicsPath borderPath1 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top, PaletteState.Normal); - borderRect.Inflate(-1, -1); - GraphicsPath borderPath2 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top, PaletteState.Normal); - borderRect.Inflate(-1, -1); - GraphicsPath borderPath3 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top, PaletteState.Normal); - - // Update the region of the popup to be the border path - Region = new Region(borderPath1); - - // Inform the shadow to use the same paths for drawing the shadow - DefineShadowPaths(borderPath1, borderPath2, borderPath3); - } + using var gh = new GraphicsHint(context.Graphics, + _navigator.StateNormal.HeaderGroup.Border.GetBorderGraphicsHint(PaletteState.Normal)); + GraphicsPath borderPath1 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top, PaletteState.Normal); + borderRect.Inflate(-1, -1); + GraphicsPath borderPath2 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top, PaletteState.Normal); + borderRect.Inflate(-1, -1); + GraphicsPath borderPath3 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top, PaletteState.Normal); + + // Update the region of the popup to be the border path + Region = new Region(borderPath1); + + // Inform the shadow to use the same paths for drawing the shadow + DefineShadowPaths(borderPath1, borderPath2, borderPath3); } } #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/BarItemSizingConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/BarItemSizingConverter.cs index 68402ae86..e88bc74b0 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/BarItemSizingConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/BarItemSizingConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,21 +18,21 @@ namespace Krypton.Navigator public class BarItemSizingConverter : StringLookupConverter { [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {BarItemSizing.Individual, "Individual Sizing"}, - {BarItemSizing.SameHeight, "All Same Height"}, - {BarItemSizing.SameWidth, "All Same Width"}, - {BarItemSizing.SameWidthAndHeight, "All Same Width & Height"} - }; + {BarItemSizing.Individual, @"Individual Sizing"}, + {BarItemSizing.SameHeight, @"All Same Height"}, + {BarItemSizing.SameWidth, @"All Same Width"}, + {BarItemSizing.SameWidthAndHeight, @"All Same Width & Height"} + }); #region Protected - /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; - + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayConverter.cs index f30e31927..3b36536f3 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,20 +17,21 @@ namespace Krypton.Navigator /// public class ButtonDisplayConverter : StringLookupConverter { - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {ButtonDisplay.Hide, "Hide"}, - {ButtonDisplay.ShowDisabled, "Show Disabled"}, - {ButtonDisplay.ShowEnabled, "Show Enabled"}, - {ButtonDisplay.Logic, "Logic"} - }; + {ButtonDisplay.Hide, @"Hide"}, + {ButtonDisplay.ShowDisabled, @"Show Disabled"}, + {ButtonDisplay.ShowEnabled, @"Show Enabled"}, + {ButtonDisplay.Logic, @"Logic"} + }); #region Protected /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; - + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayLogicConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayLogicConverter.cs index 98f064934..b529dab87 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayLogicConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/ButtonDisplayLogicConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,20 +17,21 @@ namespace Krypton.Navigator /// public class ButtonDisplayLogicConverter : StringLookupConverter { - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {ButtonDisplayLogic.None, "None"}, - {ButtonDisplayLogic.Context, "Context"}, - {ButtonDisplayLogic.NextPrevious, "Next/Previous"}, - {ButtonDisplayLogic.ContextNextPrevious, "Context & Next/Previous"} - }; + {ButtonDisplayLogic.None, @"None"}, + {ButtonDisplayLogic.Context, @"Context"}, + {ButtonDisplayLogic.NextPrevious, @"Next/Previous"}, + {ButtonDisplayLogic.ContextNextPrevious, @"Context & Next/Previous"} + }); #region Protected /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; - + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/CloseButtonActionConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/CloseButtonActionConverter.cs index 49485312a..8b569545d 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/CloseButtonActionConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/CloseButtonActionConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,21 +20,22 @@ public class CloseButtonActionConverter : StringLookupConverter _pairs = new Dictionary - { - {CloseButtonAction.None, "None (Do nothing)"}, - {CloseButtonAction.RemovePage, "RemovePage"}, - {CloseButtonAction.RemovePageAndDispose, "RemovePage & Dispose"}, - { CloseButtonAction.HidePage, "Hide Page"} - }; + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary + { + {CloseButtonAction.None, @"None (Do nothing)"}, + {CloseButtonAction.RemovePage, @"Remove Page"}, + {CloseButtonAction.RemovePageAndDispose, @"Remove Page & Dispose"}, + { CloseButtonAction.HidePage, @"Hide Page"} + }); #endregion #region Protected /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; - + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/ContextButtonActionConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/ContextButtonActionConverter.cs index 8141c8ab2..d0d3834f4 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/ContextButtonActionConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/ContextButtonActionConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,19 +19,21 @@ public class ContextButtonActionConverter : StringLookupConverter _pairs = + [Localizable(true)] + private static readonly BiDictionary _pairs = new BiDictionary( new Dictionary { - { ContextButtonAction.None, "None (Do nothing)" }, - { ContextButtonAction.SelectPage, "Select Page" } - }; + { ContextButtonAction.None, @"None (Do nothing)" }, + { ContextButtonAction.SelectPage, @"Select Page" } + }); #endregion #region Protected /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/DirectionButtonActionConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/DirectionButtonActionConverter.cs index 61030b988..5eb2cc6b0 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/DirectionButtonActionConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/DirectionButtonActionConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,20 +20,22 @@ public class DirectionButtonActionConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {DirectionButtonAction.None, "None (Do nothing)"}, - {DirectionButtonAction.SelectPage, "Select Page"}, - {DirectionButtonAction.MoveBar, "Move Bar"}, - {DirectionButtonAction.ModeAppropriateAction, "Mode Appropriate Action"} - }; + {DirectionButtonAction.None, @"None (Do nothing)"}, + {DirectionButtonAction.SelectPage, @"Select Page"}, + {DirectionButtonAction.MoveBar, @"Move Bar"}, + {DirectionButtonAction.ModeAppropriateAction, @"Mode Appropriate Action"} + }); #endregion + #region Protected /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; - + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageImageConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageImageConverter.cs index 9385c8a1c..07178da2e 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageImageConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageImageConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,23 +20,29 @@ public class MapKryptonPageImageConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {MapKryptonPageImage.None, "None (Null image)"}, - {MapKryptonPageImage.Small, "Small"}, - {MapKryptonPageImage.SmallMedium, "Small - Medium"}, - {MapKryptonPageImage.SmallMediumLarge, "Small - Medium - Large"}, - {MapKryptonPageImage.Medium, "Medium"}, - {MapKryptonPageImage.MediumSmall, "Medium - Small"}, - {MapKryptonPageImage.MediumLarge, "Medium - Large"}, - {MapKryptonPageImage.Large, "Large"}, - {MapKryptonPageImage.LargeMedium, "Large - Medium"}, - {MapKryptonPageImage.LargeMediumSmall, "Large - Medium - Small"}, + {MapKryptonPageImage.None, @"None (Null image)"}, + {MapKryptonPageImage.Small, @"Small"}, + {MapKryptonPageImage.SmallMedium, @"Small - Medium"}, + {MapKryptonPageImage.SmallMediumLarge, @"Small - Medium - Large"}, + {MapKryptonPageImage.Medium, @"Medium"}, + {MapKryptonPageImage.MediumSmall, @"Medium - Small"}, + {MapKryptonPageImage.MediumLarge, @"Medium - Large"}, + {MapKryptonPageImage.Large, @"Large"}, + {MapKryptonPageImage.LargeMedium, @"Large - Medium"}, + {MapKryptonPageImage.LargeMediumSmall, @"Large - Medium - Small"}, {MapKryptonPageImage.ToolTip, nameof(ToolTip)} - }; + }); #endregion - protected override IReadOnlyDictionary Pairs => _pairs; - + #region Protected + /// + /// Gets an array of lookup pairs. + /// + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageTextConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageTextConverter.cs index afad34da9..916b4b4e0 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageTextConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/MapKryptonPageTextConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,26 +20,33 @@ public class MapKryptonPageTextConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {MapKryptonPageText.None, "None (Empty string)"}, - {MapKryptonPageText.Text, "Text"}, - {MapKryptonPageText.TextTitle, "Text - Title"}, - {MapKryptonPageText.TextTitleDescription, "Text - Title - Description"}, - {MapKryptonPageText.TextDescription, "Text - Description"}, - {MapKryptonPageText.Title, "Title"}, - {MapKryptonPageText.TitleText, "Title - Text"}, - {MapKryptonPageText.TitleDescription, "Title - Description"}, - {MapKryptonPageText.Description, "Description"}, - {MapKryptonPageText.DescriptionText, "Description - Text"}, - {MapKryptonPageText.DescriptionTitle, "Description - Title"}, - {MapKryptonPageText.DescriptionTitleText, "Description - Title - Text"}, - {MapKryptonPageText.ToolTipTitle, "ToolTipTitle"}, - {MapKryptonPageText.ToolTipBody, "ToolTipBody"} - }; + {MapKryptonPageText.None, @"None (Empty string)"}, + {MapKryptonPageText.Text, @"Text"}, + {MapKryptonPageText.TextTitle, @"Text - Title"}, + {MapKryptonPageText.TextTitleDescription, @"Text - Title - Description"}, + {MapKryptonPageText.TextDescription, @"Text - Description"}, + {MapKryptonPageText.Title, @"Title"}, + {MapKryptonPageText.TitleText, @"Title - Text"}, + {MapKryptonPageText.TitleDescription, @"Title - Description"}, + {MapKryptonPageText.Description, @"Description"}, + {MapKryptonPageText.DescriptionText, @"Description - Text"}, + {MapKryptonPageText.DescriptionTitle, @"Description - Title"}, + {MapKryptonPageText.DescriptionTitleText, @"Description - Title - Text"}, + {MapKryptonPageText.ToolTipTitle, @"ToolTipTitle"}, + {MapKryptonPageText.ToolTipBody, @"ToolTipBody"} + }); #endregion - protected override IReadOnlyDictionary Pairs => _pairs; + #region Protected + /// + /// Gets an array of lookup pairs. + /// + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/NavigatorModeConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/NavigatorModeConverter.cs index e8bc8a531..e5b6a5f6e 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/NavigatorModeConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/NavigatorModeConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,31 +20,38 @@ public class NavigatorModeConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {NavigatorMode.BarTabGroup, "Bar - Tab - Group"}, - {NavigatorMode.BarTabOnly, "Bar - Tab - Only"}, - {NavigatorMode.BarRibbonTabGroup, "Bar - RibbonTab - Group"}, - {NavigatorMode.BarRibbonTabOnly, "Bar - RibbonTab - Only"}, - {NavigatorMode.BarCheckButtonGroupOutside, "Bar - CheckButton - Group - Outside"}, - {NavigatorMode.BarCheckButtonGroupInside, "Bar - CheckButton - Group - Inside"}, - {NavigatorMode.BarCheckButtonGroupOnly, "Bar - CheckButton - Group - Only"}, - {NavigatorMode.BarCheckButtonOnly, "Bar - CheckButton - Only"}, - {NavigatorMode.HeaderBarCheckButtonGroup, "HeaderBar - CheckButton - Group"}, - {NavigatorMode.HeaderBarCheckButtonHeaderGroup, "HeaderBar - CheckButton - HeaderGroup"}, - {NavigatorMode.HeaderBarCheckButtonOnly, "HeaderBar - CheckButton - Only"}, - {NavigatorMode.StackCheckButtonGroup, "Stack - CheckButton - Group"}, - {NavigatorMode.StackCheckButtonHeaderGroup, "Stack - CheckButton - HeaderGroup"}, - {NavigatorMode.OutlookFull, "Outlook - Full"}, - {NavigatorMode.OutlookMini, "Outlook - Mini"}, + {NavigatorMode.BarTabGroup, @"Bar - Tab - Group"}, + {NavigatorMode.BarTabOnly, @"Bar - Tab - Only"}, + {NavigatorMode.BarRibbonTabGroup, @"Bar - RibbonTab - Group"}, + {NavigatorMode.BarRibbonTabOnly, @"Bar - RibbonTab - Only"}, + {NavigatorMode.BarCheckButtonGroupOutside, @"Bar - CheckButton - Group - Outside"}, + {NavigatorMode.BarCheckButtonGroupInside, @"Bar - CheckButton - Group - Inside"}, + {NavigatorMode.BarCheckButtonGroupOnly, @"Bar - CheckButton - Group - Only"}, + {NavigatorMode.BarCheckButtonOnly, @"Bar - CheckButton - Only"}, + {NavigatorMode.HeaderBarCheckButtonGroup, @"HeaderBar - CheckButton - Group"}, + {NavigatorMode.HeaderBarCheckButtonHeaderGroup, @"HeaderBar - CheckButton - HeaderGroup"}, + {NavigatorMode.HeaderBarCheckButtonOnly, @"HeaderBar - CheckButton - Only"}, + {NavigatorMode.StackCheckButtonGroup, @"Stack - CheckButton - Group"}, + {NavigatorMode.StackCheckButtonHeaderGroup, @"Stack - CheckButton - HeaderGroup"}, + {NavigatorMode.OutlookFull, @"Outlook - Full"}, + {NavigatorMode.OutlookMini, @"Outlook - Mini"}, {NavigatorMode.Panel, nameof(Panel)}, - {NavigatorMode.Group, "Group"}, - {NavigatorMode.HeaderGroup, "HeaderGroup"}, - {NavigatorMode.HeaderGroupTab, "HeaderGroup - Tab"} - }; + {NavigatorMode.Group, @"Group"}, + {NavigatorMode.HeaderGroup, @"HeaderGroup"}, + {NavigatorMode.HeaderGroupTab, @"HeaderGroup - Tab"} + }); #endregion - protected override IReadOnlyDictionary Pairs => _pairs; + #region Protected + /// + /// Gets an array of lookup pairs. + /// + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/PaletteButtonSpecStyleConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/PaletteButtonSpecStyleConverter.cs index 1dfd3c6a9..35710c14b 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/PaletteButtonSpecStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/PaletteButtonSpecStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,33 +20,40 @@ internal class PaletteNavButtonSpecStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {PaletteNavButtonSpecStyle.Generic, "Generic"}, - {PaletteNavButtonSpecStyle.ArrowLeft, "Arrow Left"}, - {PaletteNavButtonSpecStyle.ArrowRight, "Arrow Right"}, - {PaletteNavButtonSpecStyle.ArrowUp, "Arrow Up"}, - {PaletteNavButtonSpecStyle.ArrowDown, "Arrow Down"}, - {PaletteNavButtonSpecStyle.DropDown, "Drop Down"}, - {PaletteNavButtonSpecStyle.PinVertical, "Pin Vertical"}, - {PaletteNavButtonSpecStyle.PinHorizontal, "Pin Horizontal"}, - {PaletteNavButtonSpecStyle.FormClose, "Form Close"}, - {PaletteNavButtonSpecStyle.FormMax, "Form Max"}, - {PaletteNavButtonSpecStyle.FormMin, "Form Min"}, - {PaletteNavButtonSpecStyle.FormRestore, "Form Restore"}, - {PaletteNavButtonSpecStyle.FormHelp, "Form Help"}, - {PaletteNavButtonSpecStyle.PendantClose, "Pendant Close"}, - {PaletteNavButtonSpecStyle.PendantMin, "Pendant Min"}, - {PaletteNavButtonSpecStyle.PendantRestore, "Pendant Restore"}, - {PaletteNavButtonSpecStyle.WorkspaceMaximize, "Workspace Maximize"}, - {PaletteNavButtonSpecStyle.WorkspaceRestore, "Workspace Restore"}, - {PaletteNavButtonSpecStyle.RibbonMinimize, "Ribbon Minimize"}, - {PaletteNavButtonSpecStyle.RibbonExpand, "Ribbon Expand" } - }; + {PaletteNavButtonSpecStyle.Generic, @"Generic"}, + {PaletteNavButtonSpecStyle.ArrowLeft, @"Arrow Left"}, + {PaletteNavButtonSpecStyle.ArrowRight, @"Arrow Right"}, + {PaletteNavButtonSpecStyle.ArrowUp, @"Arrow Up"}, + {PaletteNavButtonSpecStyle.ArrowDown, @"Arrow Down"}, + {PaletteNavButtonSpecStyle.DropDown, @"Drop Down"}, + {PaletteNavButtonSpecStyle.PinVertical, @"Pin Vertical"}, + {PaletteNavButtonSpecStyle.PinHorizontal, @"Pin Horizontal"}, + {PaletteNavButtonSpecStyle.FormClose, @"Form Close"}, + {PaletteNavButtonSpecStyle.FormMax, @"Form Max"}, + {PaletteNavButtonSpecStyle.FormMin, @"Form Min"}, + {PaletteNavButtonSpecStyle.FormRestore, @"Form Restore"}, + {PaletteNavButtonSpecStyle.FormHelp, @"Form Help"}, + {PaletteNavButtonSpecStyle.PendantClose, @"Pendant Close"}, + {PaletteNavButtonSpecStyle.PendantMin, @"Pendant Min"}, + {PaletteNavButtonSpecStyle.PendantRestore, @"Pendant Restore"}, + {PaletteNavButtonSpecStyle.WorkspaceMaximize, @"Workspace Maximize"}, + {PaletteNavButtonSpecStyle.WorkspaceRestore, @"Workspace Restore"}, + {PaletteNavButtonSpecStyle.RibbonMinimize, @"Ribbon Minimize"}, + {PaletteNavButtonSpecStyle.RibbonExpand, @"Ribbon Expand" } + }); #endregion - protected override IReadOnlyDictionary Pairs => _pairs; + #region Protected + /// + /// Gets an array of lookup pairs. + /// + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/PopupPageAllowConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/PopupPageAllowConverter.cs index 71bcf78a8..cf56d4fe5 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/PopupPageAllowConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/PopupPageAllowConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,16 +20,22 @@ public class PopupPageAllowConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {PopupPageAllow.Never, "Never"}, - {PopupPageAllow.OnlyCompatibleModes, "Only Compatible Modes"}, - {PopupPageAllow.OnlyOutlookMiniMode, "Only Outlook Mini Mode"} - }; + {PopupPageAllow.Never, @"Never"}, + {PopupPageAllow.OnlyCompatibleModes, @"Only Compatible Modes"}, + {PopupPageAllow.OnlyOutlookMiniMode, @"Only Outlook Mini Mode"} + }); #endregion - protected override IReadOnlyDictionary Pairs => _pairs; - + #region Protected + /// + /// Gets an array of lookup pairs. + /// + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Converters/PopupPagePositionConverter.cs b/Source/Krypton Components/Krypton.Navigator/Converters/PopupPagePositionConverter.cs index 7571960b2..d9968718b 100644 --- a/Source/Krypton Components/Krypton.Navigator/Converters/PopupPagePositionConverter.cs +++ b/Source/Krypton Components/Krypton.Navigator/Converters/PopupPagePositionConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,26 +20,31 @@ public class PopupPagePositionConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { - {PopupPagePosition.ModeAppropriate, "Mode Appropriate"}, - {PopupPagePosition.AboveFar, "Above Element - Far Aligned"}, - {PopupPagePosition.AboveMatch, "Above Element - Element Width"}, - {PopupPagePosition.AboveNear, "Above Element - Near Aligned"}, - {PopupPagePosition.BelowFar, "Below Element - Far Aligned"}, - {PopupPagePosition.BelowMatch, "Below Element - Element Width"}, - {PopupPagePosition.BelowNear, "Below Element - Near Aligned"}, - {PopupPagePosition.FarBottom, "Far Side of Element - Bottom Aligned"}, - {PopupPagePosition.FarMatch, "Far Side of Element - Element Height"}, - {PopupPagePosition.FarTop, "Far Side of Element - Top Aligned"}, - {PopupPagePosition.NearBottom, "Near Side of Element - Bottom Aligned"}, - {PopupPagePosition.NearMatch, "Near Side of Element - Element Height"}, - {PopupPagePosition.NearTop, "Near Side of Element - Top Aligned"} - }; + {PopupPagePosition.ModeAppropriate, @"Mode Appropriate"}, + {PopupPagePosition.AboveFar, @"Above Element - Far Aligned"}, + {PopupPagePosition.AboveMatch, @"Above Element - Element Width"}, + {PopupPagePosition.AboveNear, @"Above Element - Near Aligned"}, + {PopupPagePosition.BelowFar, @"Below Element - Far Aligned"}, + {PopupPagePosition.BelowMatch, @"Below Element - Element Width"}, + {PopupPagePosition.BelowNear, @"Below Element - Near Aligned"}, + {PopupPagePosition.FarBottom, @"Far Side of Element - Bottom Aligned"}, + {PopupPagePosition.FarMatch, @"Far Side of Element - Element Height"}, + {PopupPagePosition.FarTop, @"Far Side of Element - Top Aligned"}, + {PopupPagePosition.NearBottom, @"Near Side of Element - Bottom Aligned"}, + {PopupPagePosition.NearMatch, @"Near Side of Element - Element Height"}, + {PopupPagePosition.NearTop, @"Near Side of Element - Top Aligned"} + }); #endregion - protected override IReadOnlyDictionary Pairs => _pairs; - - + #region Protected + /// + /// Gets an array of lookup pairs. + /// + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedback.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedback.cs index f95992647..fd9d89e7f 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedback.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedback.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -77,20 +77,20 @@ protected virtual void Dispose(bool disposing) /// Drawing renderer. /// Drag data associated with drag operation. /// List of all drag targets. - public virtual void Start([DisallowNull] IPaletteDragDrop paletteDragDrop, - [DisallowNull] IRenderer renderer, - [DisallowNull] PageDragEndData pageDragEndData, - [DisallowNull] DragTargetList dragTargets) + public virtual void Start([DisallowNull] IPaletteDragDrop? paletteDragDrop, + [DisallowNull] IRenderer? renderer, + [DisallowNull] PageDragEndData? pageDragEndData, + [DisallowNull] DragTargetList? dragTargets) { - Debug.Assert(paletteDragDrop != null); - Debug.Assert(renderer != null); - Debug.Assert(pageDragEndData != null); - Debug.Assert(dragTargets != null); + Debug.Assert(paletteDragDrop is not null); + Debug.Assert(renderer is not null); + Debug.Assert(pageDragEndData is not null); + Debug.Assert(dragTargets is not null); - PaletteDragDrop = paletteDragDrop; - Renderer = renderer; - PageDragEndData = pageDragEndData; - DragTargets = dragTargets; + PaletteDragDrop = paletteDragDrop ?? throw new ArgumentNullException(nameof(paletteDragDrop)); + Renderer = renderer ?? throw new ArgumentNullException(nameof(renderer)); + PageDragEndData = pageDragEndData ?? throw new ArgumentNullException(nameof(pageDragEndData)); + DragTargets = dragTargets ?? throw new ArgumentNullException(nameof(dragTargets)); } /// @@ -120,7 +120,7 @@ public virtual void Quit() /// /// Gets access to the cached drawing renderer. /// - protected IRenderer? Renderer { get; private set; } + protected IRenderer Renderer { get; private set; } /// /// Gets access to the cached drag data. diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackDocking.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackDocking.cs index e9c8a2778..00a3499a3 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackDocking.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackDocking.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ private class HintToTarget : Dictionary { } #region Instance Fields private readonly IPaletteDragDrop _paletteDragDrop; - private readonly IRenderer? _renderer; + private readonly IRenderer _renderer; private HintToTarget? _hintToTarget; private IDropDockingIndicator? _indicators; #endregion @@ -39,7 +39,7 @@ private class HintToTarget : Dictionary { } /// Drawing renderer. /// Initial target for the cluster. public DockCluster(IPaletteDragDrop paletteDragDrop, - IRenderer? renderer, + IRenderer renderer, DragTarget target) { _paletteDragDrop = paletteDragDrop; diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackSolid.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackSolid.cs index 573dbb024..553645fcd 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackSolid.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DragFeedbackSolid.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DragManager.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DragManager.cs index 8dd04e546..95af1b401 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DragManager.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DragManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,9 +29,9 @@ public class DragManager : IDragPageNotify, #endregion #region Instance Fields - private PaletteBase? _dragPalette; - private PaletteBase? _localPalette; - private IRenderer? _dragRenderer; + private PaletteBase _dragPalette; + private PaletteBase _localPalette; + private IRenderer _dragRenderer; private PaletteMode _paletteMode; private readonly PaletteRedirect _redirector; private PageDragEndData? _pageDragEndData; @@ -62,10 +62,10 @@ static DragManager() /// /// Initialize a new instance of the DragManager class. /// - public DragManager() + public DragManager(PaletteBase? target = null) { - _redirector = new PaletteRedirect(); - StateCommon = new PaletteDragDrop(null, null); + _redirector = new PaletteRedirect(target); + StateCommon = new PaletteDragDrop(target!, null); _paletteMode = PaletteMode.Global; DragTargetProviders = new DragTargetProviderCollection(); _dragTargets = new DragTargetList(); @@ -158,7 +158,7 @@ public PaletteMode PaletteMode /// /// Gets and sets the custom palette implementation. /// - public PaletteBase? Palette + public PaletteBase Palette { get => _localPalette; @@ -247,7 +247,7 @@ public virtual bool DragStart(Point screenPt, PageDragEndData? dragEndData) // Create correct drag feedback class and start it up ResolveDragFeedback(); - _dragFeedback?.Start(StateCommon, _dragRenderer!, _pageDragEndData, _dragTargets!); + _dragFeedback?.Start(StateCommon, _dragRenderer, _pageDragEndData, _dragTargets!); } else { @@ -427,7 +427,7 @@ private void ResolvePaletteRenderer() StateCommon.SetInherit(_dragPalette); // Get the renderer associated with the palette - _dragRenderer = _dragPalette?.GetRenderer(); + _dragRenderer = _dragPalette?.GetRenderer()!; } private void ResolveDragFeedback() @@ -488,8 +488,8 @@ private void ClearTargets() private void EndDragging() { - _dragPalette = null; - _dragRenderer = null; + _dragPalette = null!; + _dragRenderer = null!; _pageDragEndData = null; IsDragging = false; } diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DragTarget.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DragTarget.cs index 9b9bb03a8..000803f1b 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DragTarget.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DragTarget.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -171,11 +171,11 @@ public virtual bool IsMatch(Point screenPt, PageDragEndData? dragEndData) => // Use event to allow decision on if the page should be dropped // (or even swap the page for a different page to be dropped) var e = new PageDropEventArgs(page); - target.OnPageDrop(e); + target?.OnPageDrop(e); if (e is { Cancel: false, Page: not null }) { - target.Pages.Add(e.Page); + target?.Pages.Add(e.Page); ret = e.Page; } } diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DragTargetNavigatorTransfer.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DragTargetNavigatorTransfer.cs index 77e6a0a14..2e7184e02 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DragTargetNavigatorTransfer.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DragTargetNavigatorTransfer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsRounded.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsRounded.cs index b85eec416..80f67d374 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsRounded.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsRounded.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,7 +21,7 @@ public class DropDockingIndicatorsRounded : NativeWindow, IDropDockingIndicator { #region Instance Fields - private readonly IRenderer? _renderer; + private readonly IRenderer _renderer; private readonly IPaletteDragDrop _paletteDragDrop; private readonly RenderDragDockingData _dragData; private Rectangle _showRect; @@ -39,7 +39,7 @@ public class DropDockingIndicatorsRounded : NativeWindow, /// Show bottom hot area. /// Show middle hot area. public DropDockingIndicatorsRounded(IPaletteDragDrop paletteDragDrop, - IRenderer? renderer, + IRenderer renderer, bool showLeft, bool showRight, bool showTop, bool showBottom, bool showMiddle) diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsSquare.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsSquare.cs index 8086dea05..f67f5c252 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsSquare.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DropDockingIndicatorsSquare.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,7 @@ public class DropDockingIndicatorsSquare : KryptonForm, IDropDockingIndicator { #region Instance Fields - private readonly IRenderer? _renderer; + private readonly IRenderer _renderer; private readonly IPaletteDragDrop _paletteDragDrop; private readonly RenderDragDockingData _dragData; #endregion @@ -37,7 +37,7 @@ public class DropDockingIndicatorsSquare : KryptonForm, /// Show bottom hot area. /// Show middle hot area. public DropDockingIndicatorsSquare(IPaletteDragDrop paletteDragDrop, - IRenderer? renderer, + IRenderer renderer, bool showLeft, bool showRight, bool showTop, bool showBottom, bool showMiddle) @@ -173,7 +173,7 @@ public void MouseReset() #endregion #region Implementation - private void DropIndicators_Paint(object sender, PaintEventArgs e) + private void DropIndicators_Paint(object? sender, PaintEventArgs e) { using var context = new RenderContext(this, e.Graphics, e.ClipRectangle, _renderer); _renderer?.RenderGlyph.DrawDragDropDockingGlyph(context, _dragData, _paletteDragDrop, PaletteDragFeedback.Square); diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/DropSolidWindow.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/DropSolidWindow.cs index 41feb570a..882a995ae 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/DropSolidWindow.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/DropSolidWindow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class DropSolidWindow : KryptonForm { #region Instance Fields private readonly IPaletteDragDrop _paletteDragDrop; - private readonly IRenderer? _renderer; + private readonly IRenderer _renderer; private Rectangle _solidRect; #endregion @@ -29,7 +29,7 @@ public class DropSolidWindow : KryptonForm /// /// Drawing palette. /// Drawing renderer. - public DropSolidWindow(IPaletteDragDrop paletteDragDrop, IRenderer? renderer) + public DropSolidWindow(IPaletteDragDrop paletteDragDrop, IRenderer renderer) { _paletteDragDrop = paletteDragDrop; _renderer = renderer; diff --git a/Source/Krypton Components/Krypton.Navigator/Dragging/PageDragEndData.cs b/Source/Krypton Components/Krypton.Navigator/Dragging/PageDragEndData.cs index 7de6cdb7e..1798f8d18 100644 --- a/Source/Krypton Components/Krypton.Navigator/Dragging/PageDragEndData.cs +++ b/Source/Krypton Components/Krypton.Navigator/Dragging/PageDragEndData.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/CloseActionEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/CloseActionEventArgs.cs index 03c654dbb..eb7699417 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/CloseActionEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/CloseActionEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/ContextActionEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/ContextActionEventArgs.cs index 06c29ba18..3ff9aad5b 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/ContextActionEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/ContextActionEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/CtrlTabCancelEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/CtrlTabCancelEventArgs.cs index 7bb362c4e..9ee5117e5 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/CtrlTabCancelEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/CtrlTabCancelEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/DirectionActionEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/DirectionActionEventArgs.cs index 45c3096bf..9af41ea1f 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/DirectionActionEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/DirectionActionEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonContextMenuStripEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonContextMenuStripEventArgs.cs index 64a824bcf..e6aeef1e4 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonContextMenuStripEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonContextMenuStripEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageCancelEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageCancelEventArgs.cs index ad60b75fe..eb97f8e2d 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageCancelEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageCancelEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageFlagsEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageFlagsEventArgs.cs index 5303a78f6..071736704 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageFlagsEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/KryptonPageFlagsEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragCancelEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragCancelEventArgs.cs index 4354fe7c2..3be55679f 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragCancelEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragCancelEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEndEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEndEventArgs.cs index a143978dc..afa15efff 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEndEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEndEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEventArgs.cs index 88c37ef2d..6370dea88 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDragEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDropEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDropEventArgs.cs index 75c4e6ec5..0208773ef 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDropEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageDropEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageMovedEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageMovedEventArgs.cs index 1f8b09174..335d64d80 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageMovedEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageMovedEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageReorderEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageReorderEventArgs.cs index d429590e7..ba0c9d73a 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/PageReorderEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/PageReorderEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/PopupPageEventArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/PopupPageEventArgs.cs index d8aff74ed..2f4ae803a 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/PopupPageEventArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/PopupPageEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/EventArgs/ShowContextMenuArgs.cs b/Source/Krypton Components/Krypton.Navigator/EventArgs/ShowContextMenuArgs.cs index 92a749a0a..9e55558f5 100644 --- a/Source/Krypton Components/Krypton.Navigator/EventArgs/ShowContextMenuArgs.cs +++ b/Source/Krypton Components/Krypton.Navigator/EventArgs/ShowContextMenuArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/General/Definitions.cs b/Source/Krypton Components/Krypton.Navigator/General/Definitions.cs index d51219455..b607e0fc8 100644 --- a/Source/Krypton Components/Krypton.Navigator/General/Definitions.cs +++ b/Source/Krypton Components/Krypton.Navigator/General/Definitions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/General/PageToToolTipMapping.cs b/Source/Krypton Components/Krypton.Navigator/General/PageToToolTipMapping.cs index d8452e07f..b7a564714 100644 --- a/Source/Krypton Components/Krypton.Navigator/General/PageToToolTipMapping.cs +++ b/Source/Krypton Components/Krypton.Navigator/General/PageToToolTipMapping.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -39,7 +39,7 @@ public PageToToolTipMapping([DisallowNull] KryptonPage page, { Debug.Assert(page != null); - _page = page; + _page = page ?? throw new ArgumentNullException(nameof(page)); _mapImage = mapImage; _mapText = mapText; _mapExtraText = mapExtraText; diff --git a/Source/Krypton Components/Krypton.Navigator/Global/GlobalDeclarations.cs b/Source/Krypton Components/Krypton.Navigator/Global/GlobalDeclarations.cs index 4a099e832..02529a623 100644 --- a/Source/Krypton Components/Krypton.Navigator/Global/GlobalDeclarations.cs +++ b/Source/Krypton Components/Krypton.Navigator/Global/GlobalDeclarations.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator 2022.csproj b/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator 2022.csproj index 22acab150..9a7a80969 100644 --- a/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator 2022.csproj +++ b/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator 2022.csproj @@ -1,26 +1,17 @@  - + - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows + net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows - - - - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - - - net48;net481;net6.0-windows;net7.0-windows + + net48;net481;net8.0-windows;net9.0-windows - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - + net462;net47;net471;net472;net48;net481;net8.0-windows + @@ -40,10 +31,13 @@ en true Debug;Release;Installer;Nightly;Canary - preview enable - 6 + + 8 + latest true + + true @@ -106,7 +100,7 @@ - ..\..\..\Bin\$(Configuration)\Krypton.Navigator.xml + true ..\..\..\Bin\$(Configuration)\ diff --git a/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator.licenseheader b/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator.licenseheader index 93ab4f9da..eca455ed4 100644 --- a/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator.licenseheader +++ b/Source/Krypton Components/Krypton.Navigator/Krypton.Navigator.licenseheader @@ -6,7 +6,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorActionList.cs b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorActionList.cs index e6f0d4e6b..fe7a854b3 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorActionList.cs +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,8 +20,8 @@ public class KryptonNavigatorActionList : DesignerActionList #region Instance Fields private readonly KryptonNavigator _navigator; private readonly KryptonNavigatorDesigner _designer; - private readonly IComponentChangeService _serviceComponentChange; - private readonly DesignerActionUIService _serviceDesignerAction; + private readonly IComponentChangeService? _serviceComponentChange; + private readonly DesignerActionUIService? _serviceDesignerAction; private DesignerVerb _headerBarVisible; private DesignerVerb _headerPrimaryVisible; private DesignerVerb _headerSecondaryVisible; @@ -40,11 +40,11 @@ public KryptonNavigatorActionList(KryptonNavigatorDesigner owner) { // Remember designer and actual component instance being designed _designer = owner; - _navigator = (KryptonNavigator)owner.Component; + _navigator = (owner.Component as KryptonNavigator)!; // Cache service used to notify when a property has changed - _serviceComponentChange = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _serviceDesignerAction = (DesignerActionUIService)GetService(typeof(DesignerActionUIService)); + _serviceComponentChange = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _serviceDesignerAction = GetService(typeof(DesignerActionUIService)) as DesignerActionUIService; } #endregion @@ -60,9 +60,9 @@ public NavigatorMode NavigatorMode { if (_navigator.NavigatorMode != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.NavigatorMode, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.NavigatorMode, value); _navigator.NavigatorMode = value; - _serviceDesignerAction.Refresh(_navigator); + _serviceDesignerAction?.Refresh(_navigator); } } } @@ -78,7 +78,7 @@ public PaletteBackStyle PageBackStyle { if (_navigator.PageBackStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.PageBackStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.PageBackStyle, value); _navigator.PageBackStyle = value; } } @@ -95,7 +95,7 @@ public VisualOrientation BarOrientation { if (_navigator.Bar.BarOrientation != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Bar.BarOrientation, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Bar.BarOrientation, value); _navigator.Bar.BarOrientation = value; } } @@ -112,7 +112,7 @@ public ButtonOrientation ItemOrientationBar { if (_navigator.Bar.ItemOrientation != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Bar.ItemOrientation, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Bar.ItemOrientation, value); _navigator.Bar.ItemOrientation = value; } } @@ -129,7 +129,7 @@ public ButtonOrientation ItemOrientationStack { if (_navigator.Stack.ItemOrientation != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Stack.ItemOrientation, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Stack.ItemOrientation, value); _navigator.Stack.ItemOrientation = value; } } @@ -146,7 +146,7 @@ public ButtonOrientation ItemOrientationOutlook { if (_navigator.Outlook.ItemOrientation != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Outlook.ItemOrientation, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Outlook.ItemOrientation, value); _navigator.Outlook.ItemOrientation = value; } } @@ -163,7 +163,7 @@ public RelativePositionAlign ItemAlignment { if (_navigator.Bar.ItemAlignment != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Bar.ItemAlignment, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Bar.ItemAlignment, value); _navigator.Bar.ItemAlignment = value; } } @@ -180,7 +180,7 @@ public BarItemSizing ItemSizing { if (_navigator.Bar.ItemSizing != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Bar.ItemSizing, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Bar.ItemSizing, value); _navigator.Bar.ItemSizing = value; } } @@ -197,7 +197,7 @@ public TabBorderStyle TabBorderStyle { if (_navigator.Bar.TabBorderStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Bar.TabBorderStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Bar.TabBorderStyle, value); _navigator.Bar.TabBorderStyle = value; } } @@ -214,7 +214,7 @@ public TabStyle TabStyle { if (_navigator.Bar.TabStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Bar.TabStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Bar.TabStyle, value); _navigator.Bar.TabStyle = value; } } @@ -231,7 +231,7 @@ public ButtonStyle CheckButtonStyleBar { if (_navigator.Bar.CheckButtonStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Bar.CheckButtonStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Bar.CheckButtonStyle, value); _navigator.Bar.CheckButtonStyle = value; } } @@ -248,7 +248,7 @@ public ButtonStyle CheckButtonStyleStack { if (_navigator.Stack.CheckButtonStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Stack.CheckButtonStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Stack.CheckButtonStyle, value); _navigator.Stack.CheckButtonStyle = value; } } @@ -265,7 +265,7 @@ public ButtonStyle CheckButtonStyleOutlook { if (_navigator.Outlook.CheckButtonStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Outlook.CheckButtonStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Outlook.CheckButtonStyle, value); _navigator.Outlook.CheckButtonStyle = value; } } @@ -282,7 +282,7 @@ public ButtonDisplayLogic ButtonDisplayLogic { if (_navigator.Button.ButtonDisplayLogic != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Button.ButtonDisplayLogic, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Button.ButtonDisplayLogic, value); _navigator.Button.ButtonDisplayLogic = value; } } @@ -299,7 +299,7 @@ public ButtonDisplay CloseButtonDisplay { if (_navigator.Button.CloseButtonDisplay != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Button.CloseButtonDisplay, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Button.CloseButtonDisplay, value); _navigator.Button.CloseButtonDisplay = value; } } @@ -316,7 +316,7 @@ public CloseButtonAction CloseButtonAction { if (_navigator.Button.CloseButtonAction != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Button.CloseButtonAction, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Button.CloseButtonAction, value); _navigator.Button.CloseButtonAction = value; } } @@ -333,7 +333,7 @@ public PaletteBackStyle GroupBackStyle { if (_navigator.Group.GroupBackStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Group.GroupBackStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Group.GroupBackStyle, value); _navigator.Group.GroupBackStyle = value; } } @@ -350,7 +350,7 @@ public PaletteBorderStyle GroupBorderStyle { if (_navigator.Group.GroupBorderStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Group.GroupBorderStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Group.GroupBorderStyle, value); _navigator.Group.GroupBorderStyle = value; } } @@ -367,7 +367,7 @@ public HeaderStyle BarHeaderStyle { if (_navigator.Header.HeaderStyleBar != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Header.HeaderStyleBar, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Header.HeaderStyleBar, value); _navigator.Header.HeaderStyleBar = value; } } @@ -384,7 +384,7 @@ public VisualOrientation BarHeaderPosition { if (_navigator.Header.HeaderPositionBar != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Header.HeaderPositionBar, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Header.HeaderPositionBar, value); _navigator.Header.HeaderPositionBar = value; } } @@ -401,7 +401,7 @@ public HeaderStyle PrimaryHeaderStyle { if (_navigator.Header.HeaderStylePrimary != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Header.HeaderStylePrimary, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Header.HeaderStylePrimary, value); _navigator.Header.HeaderStylePrimary = value; } } @@ -418,7 +418,7 @@ public VisualOrientation PrimaryHeaderPosition { if (_navigator.Header.HeaderPositionPrimary != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Header.HeaderPositionPrimary, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Header.HeaderPositionPrimary, value); _navigator.Header.HeaderPositionPrimary = value; } } @@ -435,7 +435,7 @@ public HeaderStyle SecondaryHeaderStyle { if (_navigator.Header.HeaderStyleSecondary != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Header.HeaderStyleSecondary, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Header.HeaderStyleSecondary, value); _navigator.Header.HeaderStyleSecondary = value; } } @@ -452,7 +452,7 @@ public VisualOrientation SecondaryHeaderPosition { if (_navigator.Header.HeaderPositionSecondary != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Header.HeaderPositionSecondary, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Header.HeaderPositionSecondary, value); _navigator.Header.HeaderPositionSecondary = value; } } @@ -469,7 +469,7 @@ public InheritBool SecondaryHeaderOutlookVisible { if (_navigator.Outlook.HeaderSecondaryVisible != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Outlook.HeaderSecondaryVisible, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Outlook.HeaderSecondaryVisible, value); _navigator.Outlook.HeaderSecondaryVisible = value; } } @@ -486,7 +486,7 @@ public Orientation OutlookOrientation { if (_navigator.Outlook.Orientation != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Outlook.Orientation, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Outlook.Orientation, value); _navigator.Outlook.Orientation = value; } } @@ -503,7 +503,7 @@ public PaletteBackStyle PanelBackStyle { if (_navigator.Panel.PanelBackStyle != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Panel.PanelBackStyle, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Panel.PanelBackStyle, value); _navigator.Panel.PanelBackStyle = value; } } @@ -520,7 +520,7 @@ public Orientation StackOrientation { if (_navigator.Stack.StackOrientation != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Stack.StackOrientation, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Stack.StackOrientation, value); _navigator.Stack.StackOrientation = value; } } @@ -537,7 +537,7 @@ public RelativePositionAlign StackAlignment { if (_navigator.Stack.StackAlignment != value) { - _serviceComponentChange.OnComponentChanged(_navigator, null, _navigator.Stack.StackAlignment, value); + _serviceComponentChange?.OnComponentChanged(_navigator, null, _navigator.Stack.StackAlignment, value); _navigator.Stack.StackAlignment = value; } } @@ -657,7 +657,7 @@ public override DesignerActionItemCollection GetSortedActionItems() public void AddPage() { _designer.AddPage(); - _serviceDesignerAction.Refresh(_navigator); + _serviceDesignerAction?.Refresh(_navigator); } /// @@ -666,7 +666,7 @@ public void AddPage() public void RemovePage() { _designer.RemovePage(); - _serviceDesignerAction.Refresh(_navigator); + _serviceDesignerAction?.Refresh(_navigator); } /// @@ -675,7 +675,7 @@ public void RemovePage() public void ClearPages() { _designer.ClearPages(); - _serviceDesignerAction.Refresh(_navigator); + _serviceDesignerAction?.Refresh(_navigator); } #endregion @@ -811,7 +811,7 @@ private void AddConstantActions(DesignerActionItemCollection actions) } } - private void OnVisibleClick(object sender, EventArgs e) + private void OnVisibleClick(object? sender, EventArgs e) { // Cast to the correct type var verb = sender as DesignerVerb; @@ -844,7 +844,7 @@ private void OnVisibleClick(object sender, EventArgs e) } // Refersh view to reflect the change - _serviceDesignerAction.Refresh(_navigator); + _serviceDesignerAction?.Refresh(_navigator); } #endregion } diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorDesigner.cs b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorDesigner.cs index db98ba625..d7056f46c 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorDesigner.cs +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonNavigatorDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -54,7 +54,7 @@ public override void Initialize([DisallowNull] IComponent component) // Must enable the child panel so that copy and paste of navigator // correctly copies across copies of the child pages. Also allows the // child panel to be viewed in the document outline and modified. - EnableDesignMode(Navigator.ChildPanel, "PageContainer"); + EnableDesignMode(Navigator.ChildPanel!, "PageContainer"); // Make sure that all the pages in control can be designed foreach (KryptonPage page in Navigator.Pages) @@ -72,9 +72,9 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); + _selectionService = (ISelectionService?)GetService(typeof(ISelectionService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_selectionService))); // We need to know when we are being removed _changeService.ComponentRemoving += OnComponentRemoving; @@ -162,7 +162,7 @@ public override ICollection AssociatedComponents // Add all the navigator components if (Navigator != null) { - compound.AddRange(Navigator.Button.ButtonSpecs); + compound.AddRange(Navigator.Button.ButtonSpecs!); compound.AddRange(Navigator.Pages); } @@ -312,18 +312,18 @@ protected override void OnMouseLeave() /// /// Source of the event. /// A ComponentEventArgs containing event data. - protected virtual void OnComponentRemoving(object sender, ComponentEventArgs e) + protected virtual void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed if (e.Component == Navigator) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost)GetService(typeof(IDesignerHost))!; // We need to remove all the button spec instances if (Navigator != null) { - for (var i = Navigator.Button.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = Navigator.Button.ButtonSpecs!.Count - 1; i >= 0; i--) { ButtonSpec spec = Navigator.Button.ButtonSpecs[i]; _changeService.OnComponentChanging(Navigator, null); @@ -348,7 +348,7 @@ protected virtual void OnComponentRemoving(object sender, ComponentEventArgs e) #endregion #region Implementation - private void OnAddPage(object sender, EventArgs e) + private void OnAddPage(object? sender, EventArgs e) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonNavigator AddPage"); @@ -405,7 +405,7 @@ private void OnAddPage(object sender, EventArgs e) } } - private void OnRemovePage(object sender, EventArgs e) + private void OnRemovePage(object? sender, EventArgs e) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonNavigator RemovePage"); @@ -439,7 +439,7 @@ private void OnRemovePage(object sender, EventArgs e) } } - private void OnClearPages(object sender, EventArgs e) + private void OnClearPages(object? sender, EventArgs e) { if (KryptonMessageBox.Show(@"Are you sure that all pages should be removed?", @"Clear Pages", @@ -488,15 +488,15 @@ private void OnPageInserted(object sender, TypedCollectionEventArgs private void OnPageRemoved(object sender, TypedCollectionEventArgs e) => UpdateVerbStatus(); - private void OnPagesCleared(object sender, EventArgs e) => UpdateVerbStatus(); + private void OnPagesCleared(object? sender, EventArgs e) => UpdateVerbStatus(); - private void OnSelectedPageChanged(object sender, EventArgs e) + private void OnSelectedPageChanged(object? sender, EventArgs e) { MarkSelectionAsChanged(); UpdateVerbStatus(); } - private void OnNavigatorMouseUp(object sender, MouseEventArgs e) + private void OnNavigatorMouseUp(object? sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { @@ -506,7 +506,7 @@ private void OnNavigatorMouseUp(object sender, MouseEventArgs e) if (component != null) { // Force the layout to be update for any change in selection - Navigator.PerformLayout(); + Navigator?.PerformLayout(); // Select the component var selectionList = new ArrayList diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageActionList.cs b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageActionList.cs index 6d7f14b14..1a166539f 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageActionList.cs +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonPageActionList : DesignerActionList { #region Instance Fields private readonly KryptonPage _page; - private readonly IComponentChangeService _serviceComponentChange; + private readonly IComponentChangeService? _serviceComponentChange; private DesignerActionItemCollection _actions; #endregion @@ -29,10 +29,10 @@ public KryptonPageActionList(KryptonPageDesigner owner) : base(owner.Component) { // Remember designer and actual component instance being designed - _page = (KryptonPage)owner.Component; + _page = (owner.Component as KryptonPage)!; // Cache service used to notify when a property has changed - _serviceComponentChange = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _serviceComponentChange = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -48,7 +48,7 @@ public string TextShort { if (!_page.Text.Equals(value)) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.Text, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.Text, value); _page.Text = value; } } @@ -65,7 +65,7 @@ public string TextTitle { if (!_page.TextTitle.Equals(value)) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.TextTitle, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.TextTitle, value); _page.TextTitle = value; } } @@ -82,7 +82,7 @@ public string TextDescription { if (!_page.TextDescription.Equals(value)) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.TextDescription, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.TextDescription, value); _page.TextDescription = value; } } @@ -99,7 +99,7 @@ public string ToolTipTitle { if (!_page.ToolTipTitle.Equals(value)) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.ToolTipTitle, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.ToolTipTitle, value); _page.ToolTipTitle = value; } } @@ -116,7 +116,7 @@ public string ToolTipBody { if (!_page.ToolTipBody.Equals(value)) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.ToolTipBody, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.ToolTipBody, value); _page.ToolTipBody = value; } } @@ -133,7 +133,7 @@ public Bitmap? ToolTipImage { if (_page.ToolTipImage != value) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.ToolTipImage, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.ToolTipImage, value); _page.ToolTipImage = value; } } @@ -150,7 +150,7 @@ public Bitmap? ImageSmall { if (_page.ImageSmall != value) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.ImageSmall, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.ImageSmall, value); _page.ImageSmall = value; } } @@ -167,7 +167,7 @@ public Bitmap? ImageMedium { if (_page.ImageMedium != value) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.ImageMedium, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.ImageMedium, value); _page.ImageMedium = value; } } @@ -184,7 +184,7 @@ public Bitmap? ImageLarge { if (_page.ImageLarge != value) { - _serviceComponentChange.OnComponentChanged(_page, null, _page.ImageLarge, value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.ImageLarge, value); _page.ImageLarge = value; } } @@ -199,7 +199,7 @@ public bool PageInOverflowBarForOutlookMode set { - _serviceComponentChange.OnComponentChanged(_page, null, _page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode), value); + _serviceComponentChange?.OnComponentChanged(_page, null, _page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode), value); if (value) { diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageDesigner.cs b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageDesigner.cs index 351c6cc9e..d742ba009 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageDesigner.cs +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -50,8 +50,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Acquire service interfaces - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _selectionService = (ISelectionService?)GetService(typeof(ISelectionService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_selectionService))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed _changeService.ComponentRemoving += OnComponentRemoving; @@ -210,7 +210,7 @@ protected override void OnPaintAdornments(PaintEventArgs pe) #endregion #region Implementation - private void OnEditFlags(object sender, EventArgs e) + private void OnEditFlags(object? sender, EventArgs e) { var editFlags = new KryptonPageFormEditFlags(_page); editFlags.ShowDialog(); @@ -274,16 +274,16 @@ private void DrawBorder(Graphics graphics) graphics.DrawRectangle(borderPen, clientRect); } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed if ((_page != null) && (e.Component == _page)) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost)GetService(typeof(IDesignerHost))!; // We need to remove all the button spec instances - for (var i = _page.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = _page.ButtonSpecs!.Count - 1; i >= 0; i--) { // Get access to the indexed button spec ButtonSpec spec = _page.ButtonSpecs[i]; diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.Designer.cs b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.Designer.cs index 2113e4f92..5f0aa82db 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.Designer.cs +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.Designer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -53,158 +53,188 @@ private void InitializeComponent() this.checkBoxDockingAllowDropDown = new Krypton.Toolkit.KryptonCheckBox(); this.checkBoxAllowPageReorder = new Krypton.Toolkit.KryptonCheckBox(); this.checkBoxAllowConfigSave = new Krypton.Toolkit.KryptonCheckBox(); + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); this.SuspendLayout(); // // buttonOK // - this.buttonOK.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right))); - this.buttonOK.DialogResult = DialogResult.OK; - this.buttonOK.Location = new System.Drawing.Point(261, 203); + this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point(261, 15); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(75, 23); this.buttonOK.TabIndex = 12; - this.buttonOK.Text = "OK"; + this.buttonOK.Values.Text = "OK"; this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); // // buttonCancel // - this.buttonCancel.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right))); - this.buttonCancel.DialogResult = DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(342, 203); + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Location = new System.Drawing.Point(342, 15); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); this.buttonCancel.TabIndex = 0; - this.buttonCancel.Text = "Cancel"; + this.buttonCancel.Values.Text = "Cancel"; // // checkBoxPageInOverflowBarForOutlookMode // - this.checkBoxPageInOverflowBarForOutlookMode.AutoSize = true; - this.checkBoxPageInOverflowBarForOutlookMode.Location = new System.Drawing.Point(15, 18); + this.checkBoxPageInOverflowBarForOutlookMode.Location = new System.Drawing.Point(12, 12); this.checkBoxPageInOverflowBarForOutlookMode.Name = "checkBoxPageInOverflowBarForOutlookMode"; - this.checkBoxPageInOverflowBarForOutlookMode.Size = new System.Drawing.Size(210, 17); + this.checkBoxPageInOverflowBarForOutlookMode.Size = new System.Drawing.Size(239, 20); this.checkBoxPageInOverflowBarForOutlookMode.TabIndex = 0; - this.checkBoxPageInOverflowBarForOutlookMode.Text = "Page in Overflow Bar for Outlook mode"; + this.checkBoxPageInOverflowBarForOutlookMode.Values.Text = "Page in Overflow Bar for Outlook mode"; // // checkBoxAllowPageDrag // - this.checkBoxAllowPageDrag.AutoSize = true; - this.checkBoxAllowPageDrag.Location = new System.Drawing.Point(15, 41); + this.checkBoxAllowPageDrag.Location = new System.Drawing.Point(12, 35); this.checkBoxAllowPageDrag.Name = "checkBoxAllowPageDrag"; - this.checkBoxAllowPageDrag.Size = new System.Drawing.Size(105, 17); + this.checkBoxAllowPageDrag.Size = new System.Drawing.Size(114, 20); this.checkBoxAllowPageDrag.TabIndex = 1; - this.checkBoxAllowPageDrag.Text = "Allow Page Drag"; + this.checkBoxAllowPageDrag.Values.Text = "Allow Page Drag"; // // checkBoxDockingAllowClose // - this.checkBoxDockingAllowClose.AutoSize = true; - this.checkBoxDockingAllowClose.Location = new System.Drawing.Point(256, 18); + this.checkBoxDockingAllowClose.Location = new System.Drawing.Point(253, 12); this.checkBoxDockingAllowClose.Name = "checkBoxDockingAllowClose"; - this.checkBoxDockingAllowClose.Size = new System.Drawing.Size(123, 17); + this.checkBoxDockingAllowClose.Size = new System.Drawing.Size(135, 20); this.checkBoxDockingAllowClose.TabIndex = 4; - this.checkBoxDockingAllowClose.Text = "Docking Allow Close"; + this.checkBoxDockingAllowClose.Values.Text = "Docking Allow Close"; // // checkBoxDockingAllowAutoHidden // - this.checkBoxDockingAllowAutoHidden.AutoSize = true; - this.checkBoxDockingAllowAutoHidden.Location = new System.Drawing.Point(256, 64); + this.checkBoxDockingAllowAutoHidden.Location = new System.Drawing.Point(253, 58); this.checkBoxDockingAllowAutoHidden.Name = "checkBoxDockingAllowAutoHidden"; - this.checkBoxDockingAllowAutoHidden.Size = new System.Drawing.Size(153, 17); + this.checkBoxDockingAllowAutoHidden.Size = new System.Drawing.Size(172, 20); this.checkBoxDockingAllowAutoHidden.TabIndex = 6; - this.checkBoxDockingAllowAutoHidden.Text = "Docking Allow AutoHidden"; + this.checkBoxDockingAllowAutoHidden.Values.Text = "Docking Allow AutoHidden"; // // checkBoxDockingAllowDocked // - this.checkBoxDockingAllowDocked.AutoSize = true; - this.checkBoxDockingAllowDocked.Location = new System.Drawing.Point(256, 87); + this.checkBoxDockingAllowDocked.Location = new System.Drawing.Point(253, 81); this.checkBoxDockingAllowDocked.Name = "checkBoxDockingAllowDocked"; - this.checkBoxDockingAllowDocked.Size = new System.Drawing.Size(135, 17); + this.checkBoxDockingAllowDocked.Size = new System.Drawing.Size(147, 20); this.checkBoxDockingAllowDocked.TabIndex = 7; - this.checkBoxDockingAllowDocked.Text = "Docking Allow Docked"; + this.checkBoxDockingAllowDocked.Values.Text = "Docking Allow Docked"; // // checkBoxDockingAllowFloating // - this.checkBoxDockingAllowFloating.AutoSize = true; - this.checkBoxDockingAllowFloating.Location = new System.Drawing.Point(256, 110); + this.checkBoxDockingAllowFloating.Location = new System.Drawing.Point(253, 104); this.checkBoxDockingAllowFloating.Name = "checkBoxDockingAllowFloating"; - this.checkBoxDockingAllowFloating.Size = new System.Drawing.Size(134, 17); + this.checkBoxDockingAllowFloating.Size = new System.Drawing.Size(149, 20); this.checkBoxDockingAllowFloating.TabIndex = 8; - this.checkBoxDockingAllowFloating.Text = "Docking Allow Floating"; + this.checkBoxDockingAllowFloating.Values.Text = "Docking Allow Floating"; // // checkBoxDockingAllowWorkspace // - this.checkBoxDockingAllowWorkspace.AutoSize = true; - this.checkBoxDockingAllowWorkspace.Location = new System.Drawing.Point(256, 133); + this.checkBoxDockingAllowWorkspace.Location = new System.Drawing.Point(253, 127); this.checkBoxDockingAllowWorkspace.Name = "checkBoxDockingAllowWorkspace"; - this.checkBoxDockingAllowWorkspace.Size = new System.Drawing.Size(152, 17); + this.checkBoxDockingAllowWorkspace.Size = new System.Drawing.Size(166, 20); this.checkBoxDockingAllowWorkspace.TabIndex = 9; - this.checkBoxDockingAllowWorkspace.Text = "Docking Allow Workspace"; + this.checkBoxDockingAllowWorkspace.Values.Text = "Docking Allow Workspace"; // // checkBoxDockingAllowNavigator // - this.checkBoxDockingAllowNavigator.AutoSize = true; - this.checkBoxDockingAllowNavigator.Location = new System.Drawing.Point(256, 156); + this.checkBoxDockingAllowNavigator.Location = new System.Drawing.Point(253, 150); this.checkBoxDockingAllowNavigator.Name = "checkBoxDockingAllowNavigator"; - this.checkBoxDockingAllowNavigator.Size = new System.Drawing.Size(143, 17); + this.checkBoxDockingAllowNavigator.Size = new System.Drawing.Size(159, 20); this.checkBoxDockingAllowNavigator.TabIndex = 10; - this.checkBoxDockingAllowNavigator.Text = "Docking Allow Navigator"; + this.checkBoxDockingAllowNavigator.Values.Text = "Docking Allow Navigator"; // // checkBoxDockingAllowDropDown // - this.checkBoxDockingAllowDropDown.AutoSize = true; - this.checkBoxDockingAllowDropDown.Location = new System.Drawing.Point(256, 41); + this.checkBoxDockingAllowDropDown.Location = new System.Drawing.Point(253, 35); this.checkBoxDockingAllowDropDown.Name = "checkBoxDockingAllowDropDown"; - this.checkBoxDockingAllowDropDown.Size = new System.Drawing.Size(148, 17); + this.checkBoxDockingAllowDropDown.Size = new System.Drawing.Size(165, 20); this.checkBoxDockingAllowDropDown.TabIndex = 5; - this.checkBoxDockingAllowDropDown.Text = "Docking Allow DropDown"; + this.checkBoxDockingAllowDropDown.Values.Text = "Docking Allow DropDown"; // // checkBoxAllowPageReorder // - this.checkBoxAllowPageReorder.AutoSize = true; - this.checkBoxAllowPageReorder.Location = new System.Drawing.Point(15, 64); + this.checkBoxAllowPageReorder.Location = new System.Drawing.Point(12, 58); this.checkBoxAllowPageReorder.Name = "checkBoxAllowPageReorder"; - this.checkBoxAllowPageReorder.Size = new System.Drawing.Size(120, 17); + this.checkBoxAllowPageReorder.Size = new System.Drawing.Size(131, 20); this.checkBoxAllowPageReorder.TabIndex = 2; - this.checkBoxAllowPageReorder.Text = "Allow Page Reorder"; + this.checkBoxAllowPageReorder.Values.Text = "Allow Page Reorder"; // // checkBoxAllowConfigSave // - this.checkBoxAllowConfigSave.AutoSize = true; - this.checkBoxAllowConfigSave.Location = new System.Drawing.Point(15, 87); + this.checkBoxAllowConfigSave.Location = new System.Drawing.Point(12, 81); this.checkBoxAllowConfigSave.Name = "checkBoxAllowConfigSave"; - this.checkBoxAllowConfigSave.Size = new System.Drawing.Size(112, 17); + this.checkBoxAllowConfigSave.Size = new System.Drawing.Size(122, 20); this.checkBoxAllowConfigSave.TabIndex = 3; - this.checkBoxAllowConfigSave.Text = "Allow Config Save"; + this.checkBoxAllowConfigSave.Values.Text = "Allow Config Save"; + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Controls.Add(this.buttonOK); + this.kpnlButtons.Controls.Add(this.buttonCancel); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 188); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(429, 50); + this.kpnlButtons.TabIndex = 13; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(429, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.checkBoxPageInOverflowBarForOutlookMode); + this.kryptonPanel1.Controls.Add(this.checkBoxAllowPageDrag); + this.kryptonPanel1.Controls.Add(this.checkBoxAllowConfigSave); + this.kryptonPanel1.Controls.Add(this.checkBoxDockingAllowClose); + this.kryptonPanel1.Controls.Add(this.checkBoxAllowPageReorder); + this.kryptonPanel1.Controls.Add(this.checkBoxDockingAllowAutoHidden); + this.kryptonPanel1.Controls.Add(this.checkBoxDockingAllowDropDown); + this.kryptonPanel1.Controls.Add(this.checkBoxDockingAllowDocked); + this.kryptonPanel1.Controls.Add(this.checkBoxDockingAllowNavigator); + this.kryptonPanel1.Controls.Add(this.checkBoxDockingAllowFloating); + this.kryptonPanel1.Controls.Add(this.checkBoxDockingAllowWorkspace); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(429, 188); + this.kryptonPanel1.TabIndex = 14; // // KryptonPageFormEditFlags // this.AcceptButton = this.buttonOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.buttonCancel; this.ClientSize = new System.Drawing.Size(429, 238); this.ControlBox = false; - this.Controls.Add(this.checkBoxAllowConfigSave); - this.Controls.Add(this.checkBoxAllowPageReorder); - this.Controls.Add(this.checkBoxDockingAllowDropDown); - this.Controls.Add(this.checkBoxDockingAllowNavigator); - this.Controls.Add(this.checkBoxDockingAllowWorkspace); - this.Controls.Add(this.checkBoxDockingAllowFloating); - this.Controls.Add(this.checkBoxDockingAllowDocked); - this.Controls.Add(this.checkBoxDockingAllowAutoHidden); - this.Controls.Add(this.checkBoxDockingAllowClose); - this.Controls.Add(this.checkBoxAllowPageDrag); - this.Controls.Add(this.checkBoxPageInOverflowBarForOutlookMode); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.buttonOK); - this.FormBorderStyle = FormBorderStyle.FixedDialog; + this.Controls.Add(this.kryptonPanel1); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "KryptonPageFormEditFlags"; - this.StartPosition = FormStartPosition.CenterParent; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Krypton Page - Edit Flags"; this.Load += new System.EventHandler(this.OnLoad); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); this.ResumeLayout(false); - this.PerformLayout(); } @@ -223,5 +253,8 @@ private void InitializeComponent() private Krypton.Toolkit.KryptonCheckBox checkBoxDockingAllowDropDown; private Krypton.Toolkit.KryptonCheckBox checkBoxAllowPageReorder; private Krypton.Toolkit.KryptonCheckBox checkBoxAllowConfigSave; + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kryptonPanel1; } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.cs b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.cs index 95b592c76..3115bd3c2 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.cs +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -41,118 +41,122 @@ public KryptonPageFormEditFlags(KryptonPage? page) #region Implementation private void OnLoad(object sender, EventArgs e) { - checkBoxPageInOverflowBarForOutlookMode.Checked = _page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode); - checkBoxAllowPageDrag.Checked = _page.AreFlagsSet(KryptonPageFlags.AllowPageDrag); - checkBoxAllowPageReorder.Checked = _page.AreFlagsSet(KryptonPageFlags.AllowPageReorder); - checkBoxAllowConfigSave.Checked = _page.AreFlagsSet(KryptonPageFlags.AllowConfigSave); - checkBoxDockingAllowClose.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowClose); - checkBoxDockingAllowDropDown.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowDropDown); - checkBoxDockingAllowAutoHidden.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowAutoHidden); - checkBoxDockingAllowDocked.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowDocked); - checkBoxDockingAllowFloating.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowFloating); - checkBoxDockingAllowWorkspace.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowWorkspace); - checkBoxDockingAllowNavigator.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowNavigator); + if (_page != null) + { + checkBoxPageInOverflowBarForOutlookMode.Checked = + _page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode); + checkBoxAllowPageDrag.Checked = _page.AreFlagsSet(KryptonPageFlags.AllowPageDrag); + checkBoxAllowPageReorder.Checked = _page.AreFlagsSet(KryptonPageFlags.AllowPageReorder); + checkBoxAllowConfigSave.Checked = _page.AreFlagsSet(KryptonPageFlags.AllowConfigSave); + checkBoxDockingAllowClose.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowClose); + checkBoxDockingAllowDropDown.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowDropDown); + checkBoxDockingAllowAutoHidden.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowAutoHidden); + checkBoxDockingAllowDocked.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowDocked); + checkBoxDockingAllowFloating.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowFloating); + checkBoxDockingAllowWorkspace.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowWorkspace); + checkBoxDockingAllowNavigator.Checked = _page.AreFlagsSet(KryptonPageFlags.DockingAllowNavigator); + } } - + private void buttonOK_Click(object sender, EventArgs e) { if (checkBoxPageInOverflowBarForOutlookMode.Checked) { - _page.SetFlags(KryptonPageFlags.PageInOverflowBarForOutlookMode); + _page?.SetFlags(KryptonPageFlags.PageInOverflowBarForOutlookMode); } else { - _page.ClearFlags(KryptonPageFlags.PageInOverflowBarForOutlookMode); + _page?.ClearFlags(KryptonPageFlags.PageInOverflowBarForOutlookMode); } if (checkBoxAllowPageDrag.Checked) { - _page.SetFlags(KryptonPageFlags.AllowPageDrag); + _page?.SetFlags(KryptonPageFlags.AllowPageDrag); } else { - _page.ClearFlags(KryptonPageFlags.AllowPageDrag); + _page?.ClearFlags(KryptonPageFlags.AllowPageDrag); } if (checkBoxAllowPageReorder.Checked) { - _page.SetFlags(KryptonPageFlags.AllowPageReorder); + _page?.SetFlags(KryptonPageFlags.AllowPageReorder); } else { - _page.ClearFlags(KryptonPageFlags.AllowPageReorder); + _page?.ClearFlags(KryptonPageFlags.AllowPageReorder); } if (checkBoxAllowConfigSave.Checked) { - _page.SetFlags(KryptonPageFlags.AllowConfigSave); + _page?.SetFlags(KryptonPageFlags.AllowConfigSave); } else { - _page.ClearFlags(KryptonPageFlags.AllowConfigSave); + _page?.ClearFlags(KryptonPageFlags.AllowConfigSave); } if (checkBoxDockingAllowClose.Checked) { - _page.SetFlags(KryptonPageFlags.DockingAllowClose); + _page?.SetFlags(KryptonPageFlags.DockingAllowClose); } else { - _page.ClearFlags(KryptonPageFlags.DockingAllowClose); + _page?.ClearFlags(KryptonPageFlags.DockingAllowClose); } if (checkBoxDockingAllowDropDown.Checked) { - _page.SetFlags(KryptonPageFlags.DockingAllowDropDown); + _page?.SetFlags(KryptonPageFlags.DockingAllowDropDown); } else { - _page.ClearFlags(KryptonPageFlags.DockingAllowDropDown); + _page?.ClearFlags(KryptonPageFlags.DockingAllowDropDown); } if (checkBoxDockingAllowAutoHidden.Checked) { - _page.SetFlags(KryptonPageFlags.DockingAllowAutoHidden); + _page?.SetFlags(KryptonPageFlags.DockingAllowAutoHidden); } else { - _page.ClearFlags(KryptonPageFlags.DockingAllowAutoHidden); + _page?.ClearFlags(KryptonPageFlags.DockingAllowAutoHidden); } if (checkBoxDockingAllowDocked.Checked) { - _page.SetFlags(KryptonPageFlags.DockingAllowDocked); + _page?.SetFlags(KryptonPageFlags.DockingAllowDocked); } else { - _page.ClearFlags(KryptonPageFlags.DockingAllowDocked); + _page?.ClearFlags(KryptonPageFlags.DockingAllowDocked); } if (checkBoxDockingAllowFloating.Checked) { - _page.SetFlags(KryptonPageFlags.DockingAllowFloating); + _page?.SetFlags(KryptonPageFlags.DockingAllowFloating); } else { - _page.ClearFlags(KryptonPageFlags.DockingAllowFloating); + _page?.ClearFlags(KryptonPageFlags.DockingAllowFloating); } if (checkBoxDockingAllowWorkspace.Checked) { - _page.SetFlags(KryptonPageFlags.DockingAllowWorkspace); + _page?.SetFlags(KryptonPageFlags.DockingAllowWorkspace); } else { - _page.ClearFlags(KryptonPageFlags.DockingAllowWorkspace); + _page?.ClearFlags(KryptonPageFlags.DockingAllowWorkspace); } if (checkBoxDockingAllowNavigator.Checked) { - _page.SetFlags(KryptonPageFlags.DockingAllowNavigator); + _page?.SetFlags(KryptonPageFlags.DockingAllowNavigator); } else { - _page.ClearFlags(KryptonPageFlags.DockingAllowNavigator); + _page?.ClearFlags(KryptonPageFlags.DockingAllowNavigator); } } #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.resx b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.resx index 19dc0dd8b..d58980a38 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.resx +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/KryptonPageFormEditFlags.resx @@ -112,9 +112,9 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Navigator/Navigator/NavigatorPageCollectionEditor.cs b/Source/Krypton Components/Krypton.Navigator/Navigator/NavigatorPageCollectionEditor.cs index 063339ec6..b7a9aea20 100644 --- a/Source/Krypton Components/Krypton.Navigator/Navigator/NavigatorPageCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Navigator/Navigator/NavigatorPageCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,10 +34,10 @@ public NavigatorPageCollectionEditor() /// The collection to edit. /// An array of objects to set as the collection items. /// The newly created collection object. - protected override object SetItems(object editValue, object[] value) + protected override object? SetItems(object? editValue, object[]? value) { // Cast the context into the expected control type - var navigator = (KryptonNavigator)Context.Instance; + var navigator = Context!.Instance as KryptonNavigator; // Suspend changes until collection has been updated navigator?.SuspendLayout(); diff --git a/Source/Krypton Components/Krypton.Navigator/Page/KryptonPage.cs b/Source/Krypton Components/Krypton.Navigator/Page/KryptonPage.cs index d27a76e05..392715950 100644 --- a/Source/Krypton Components/Krypton.Navigator/Page/KryptonPage.cs +++ b/Source/Krypton Components/Krypton.Navigator/Page/KryptonPage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,23 +27,23 @@ public class KryptonPage : VisualPanel { #region Instance Fields private readonly ViewDrawPanel _drawPanel; - private readonly PaletteRedirectDoubleMetric? _redirectNavigator; - private readonly PaletteRedirectDoubleMetric? _redirectNavigatorHeaderGroup; - private readonly PaletteRedirectTripleMetric? _redirectNavigatorHeaderPrimary; - private readonly PaletteRedirectTripleMetric? _redirectNavigatorHeaderSecondary; - private readonly PaletteRedirectTripleMetric? _redirectNavigatorHeaderBar; - private readonly PaletteRedirectTripleMetric? _redirectNavigatorHeaderOverflow; - private readonly PaletteRedirectTriple? _redirectNavigatorCheckButton; - private readonly PaletteRedirectTriple? _redirectNavigatorOverflowButton; - private readonly PaletteRedirectTriple? _redirectNavigatorMiniButton; - private readonly PaletteRedirectTriple? _redirectNavigatorTab; - private readonly PaletteRedirectRibbonTabContent? _redirectNavigatorRibbonTab; - private readonly PaletteRedirectMetric? _redirectNavigatorBar; - private readonly PaletteRedirectDouble? _redirectNavigatorPage; - private readonly PaletteRedirectDoubleMetric? _redirectNavigatorSeparator; + private readonly PaletteRedirectDoubleMetric _redirectNavigator; + private readonly PaletteRedirectDoubleMetric _redirectNavigatorHeaderGroup; + private readonly PaletteRedirectTripleMetric _redirectNavigatorHeaderPrimary; + private readonly PaletteRedirectTripleMetric _redirectNavigatorHeaderSecondary; + private readonly PaletteRedirectTripleMetric _redirectNavigatorHeaderBar; + private readonly PaletteRedirectTripleMetric _redirectNavigatorHeaderOverflow; + private readonly PaletteRedirectTriple _redirectNavigatorCheckButton; + private readonly PaletteRedirectTriple _redirectNavigatorOverflowButton; + private readonly PaletteRedirectTriple _redirectNavigatorMiniButton; + private readonly PaletteRedirectTriple _redirectNavigatorTab; + private readonly PaletteRedirectRibbonTabContent _redirectNavigatorRibbonTab; + private readonly PaletteRedirectMetric _redirectNavigatorBar; + private readonly PaletteRedirectDouble _redirectNavigatorPage; + private readonly PaletteRedirectDoubleMetric _redirectNavigatorSeparator; private readonly PaletteNavigatorRedirect? _stateCommon; - private readonly PaletteNavigator? _stateDisabled; - private readonly PaletteNavigator? _stateNormal; + private readonly PaletteNavigator _stateDisabled; + private readonly PaletteNavigator _stateNormal; private readonly NeedPaintHandler? _needDisabledPaint; private readonly NeedPaintHandler? _needNormalPaint; private BoolFlags31 _flags; @@ -150,8 +150,8 @@ public KryptonPage(string text) /// /// Initial text. /// Initial unique name. - public KryptonPage(string text, string uniqueName) - : this(text, null, uniqueName) + public KryptonPage(string text, string? uniqueName) + : this(text, null, uniqueName ?? string.Empty) { } @@ -165,7 +165,7 @@ public KryptonPage(string text, string uniqueName) /// /// If Min Size not set in the Embedded control, then will default to 150, 50 /// - public KryptonPage(string text, Bitmap? imageSmall, string uniqueName) + public KryptonPage(string text, Bitmap? imageSmall, string? uniqueName) : this(text, imageSmall, uniqueName, new Size(150, 50)) { @@ -178,7 +178,7 @@ public KryptonPage(string text, Bitmap? imageSmall, string uniqueName) /// Initial small image. /// Initial unique name. /// Min Size of dragged docked control, if not set by Embedded - public KryptonPage(string text, Bitmap? imageSmall, string uniqueName, Size minSize) + public KryptonPage(string text, Bitmap? imageSmall, string? uniqueName, Size minSize) { // Default properties Text = text; @@ -193,7 +193,7 @@ public KryptonPage(string text, Bitmap? imageSmall, string uniqueName, Size minS _imageSmall = imageSmall; _setVisible = true; _autoHiddenSlideSize = new Size(200, 200); - _uniqueName = string.IsNullOrEmpty(uniqueName) ? CommonHelper.UniqueString : uniqueName; + _uniqueName = string.IsNullOrEmpty(uniqueName) ? CommonHelper.UniqueString : uniqueName ?? string.Empty; _flags.Flags = (int)KryptonPageFlags.All; _flags.ClearFlags((int)KryptonPageFlags.PageInOverflowBarForOutlookMode); @@ -201,6 +201,11 @@ public KryptonPage(string text, Bitmap? imageSmall, string uniqueName, Size minS _needDisabledPaint = OnNeedDisabledPaint!; _needNormalPaint = OnNeedNormalPaint!; + if (Redirector is null) + { + throw new ArgumentNullException(nameof(Redirector)); + } + // Create redirector for inheriting from owning navigator _redirectNavigator = new PaletteRedirectDoubleMetric(Redirector); _redirectNavigatorPage = new PaletteRedirectDouble(Redirector); @@ -300,7 +305,7 @@ public KryptonPage(string text, Bitmap? imageSmall, string uniqueName, Size minS [Category(@"Visuals")] [Description(@"Collection of button specifications.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public virtual PageButtonSpecCollection ButtonSpecs { get; } + public virtual PageButtonSpecCollection? ButtonSpecs { get; } /// /// Gets access to the common page appearance entries. @@ -322,13 +327,13 @@ public virtual PaletteNavigatorRedirect? StateCommon [Category(@"Visuals")] [Description(@"Overrides for defining disabled page appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public virtual PaletteNavigator? StateDisabled + public virtual PaletteNavigator StateDisabled { [DebuggerStepThrough] get => _stateDisabled; } - private bool ShouldSerializeStateDisabled() => !StateDisabled!.IsDefault; + private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; /// /// Gets access to the normal page appearance entries. @@ -336,13 +341,13 @@ public virtual PaletteNavigator? StateDisabled [Category(@"Visuals")] [Description(@"Overrides for defining normal page appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public virtual PaletteNavigator? StateNormal + public virtual PaletteNavigator StateNormal { [DebuggerStepThrough] get => _stateNormal; } - private bool ShouldSerializeStateNormal() => !StateNormal!.IsDefault; + private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; /// /// Gets access to the tracking page appearance entries. @@ -781,8 +786,8 @@ public virtual Size AutoHiddenSlideSize /// State palette for inheriting focus values. public virtual void SetInherit(Control alignControl, PaletteNavigatorRedirect? common, - PaletteNavigator? disabled, - PaletteNavigator? normal, + PaletteNavigator disabled, + PaletteNavigator normal, PaletteNavigatorOtherEx tracking, PaletteNavigatorOtherEx pressed, PaletteNavigatorOther selected, @@ -796,53 +801,52 @@ public virtual void SetInherit(Control alignControl, // Setup the redirection states _redirectNavigator?.SetRedirectStates(disabled, disabled, normal, normal); - _redirectNavigatorPage?.SetRedirectStates(disabled!.PalettePage, normal!.PalettePage); + _redirectNavigatorPage?.SetRedirectStates(disabled.PalettePage, normal.PalettePage); - _redirectNavigatorHeaderGroup?.SetRedirectStates(disabled!.HeaderGroup, disabled.HeaderGroup, - normal!.HeaderGroup, normal.HeaderGroup); + _redirectNavigatorHeaderGroup?.SetRedirectStates(disabled.HeaderGroup, disabled.HeaderGroup, + normal.HeaderGroup, normal.HeaderGroup); - _redirectNavigatorHeaderPrimary?.SetRedirectStates(disabled!.HeaderGroup!.HeaderPrimary, - disabled.HeaderGroup.HeaderPrimary, normal!.HeaderGroup!.HeaderPrimary, + _redirectNavigatorHeaderPrimary?.SetRedirectStates(disabled.HeaderGroup.HeaderPrimary, + disabled.HeaderGroup.HeaderPrimary, normal.HeaderGroup.HeaderPrimary, normal.HeaderGroup.HeaderPrimary); - _redirectNavigatorHeaderSecondary?.SetRedirectStates(disabled!.HeaderGroup!.HeaderSecondary, - disabled.HeaderGroup.HeaderSecondary, normal!.HeaderGroup!.HeaderSecondary, + _redirectNavigatorHeaderSecondary?.SetRedirectStates(disabled.HeaderGroup.HeaderSecondary, + disabled.HeaderGroup.HeaderSecondary, normal.HeaderGroup.HeaderSecondary, normal.HeaderGroup.HeaderSecondary); - _redirectNavigatorHeaderBar?.SetRedirectStates(disabled!.HeaderGroup!.HeaderBar, - disabled.HeaderGroup.HeaderBar, normal!.HeaderGroup!.HeaderBar, normal.HeaderGroup.HeaderBar); + _redirectNavigatorHeaderBar?.SetRedirectStates(disabled.HeaderGroup.HeaderBar, + disabled.HeaderGroup.HeaderBar, normal.HeaderGroup.HeaderBar, normal.HeaderGroup.HeaderBar); - _redirectNavigatorHeaderOverflow?.SetRedirectStates(disabled!.HeaderGroup!.HeaderOverflow, - disabled.HeaderGroup.HeaderOverflow, normal!.HeaderGroup!.HeaderOverflow, + _redirectNavigatorHeaderOverflow?.SetRedirectStates(disabled.HeaderGroup.HeaderOverflow, + disabled.HeaderGroup.HeaderOverflow, normal.HeaderGroup.HeaderOverflow, normal.HeaderGroup.HeaderOverflow); - _redirectNavigatorCheckButton?.SetRedirectStates(disabled!.CheckButton, normal!.CheckButton, + _redirectNavigatorCheckButton?.SetRedirectStates(disabled.CheckButton, normal.CheckButton, pressed.CheckButton, tracking.CheckButton, selected.CheckButton, selected.CheckButton, - selected.CheckButton, focus.CheckButton, null); + selected.CheckButton, focus.CheckButton, null!); - _redirectNavigatorOverflowButton?.SetRedirectStates(disabled!.OverflowButton, normal!.OverflowButton, + _redirectNavigatorOverflowButton?.SetRedirectStates(disabled.OverflowButton, normal.OverflowButton, pressed.OverflowButton, tracking.OverflowButton, selected.OverflowButton, selected.OverflowButton, - selected.OverflowButton, focus.OverflowButton, null); + selected.OverflowButton, focus.OverflowButton, null!); - _redirectNavigatorMiniButton?.SetRedirectStates(disabled!.MiniButton, normal!.MiniButton, + _redirectNavigatorMiniButton?.SetRedirectStates(disabled.MiniButton, normal.MiniButton, pressed.MiniButton, tracking.MiniButton, selected.MiniButton, selected.MiniButton, - selected.MiniButton, focus.MiniButton, null); + selected.MiniButton, focus.MiniButton, null!); _redirectNavigatorBar?.SetRedirectStates(common!.Bar, common.Bar); - _redirectNavigatorSeparator?.SetRedirectStates(disabled!.Separator, disabled.Separator, normal!.Separator, + _redirectNavigatorSeparator?.SetRedirectStates(disabled.Separator, disabled.Separator, normal.Separator, normal.Separator, pressed.Separator, pressed.Separator, tracking.Separator, tracking.Separator); - _redirectNavigatorTab?.SetRedirectStates(disabled!.Tab, normal!.Tab, pressed.Tab, tracking.Tab, - selected.Tab, selected.Tab, selected.Tab, focus.Tab, null); + _redirectNavigatorTab?.SetRedirectStates(disabled.Tab, normal.Tab, pressed.Tab, tracking.Tab, + selected.Tab, selected.Tab, selected.Tab, focus.Tab, null!); - _redirectNavigatorRibbonTab?.SetRedirectStates(disabled!.RibbonTab, normal!.RibbonTab, pressed.RibbonTab, + _redirectNavigatorRibbonTab?.SetRedirectStates(disabled.RibbonTab, normal.RibbonTab, pressed.RibbonTab, tracking.RibbonTab, selected.RibbonTab, focus.RibbonTab); - if (_stateCommon != null) + if (_stateCommon is not null && Redirector is not null) { - _stateCommon.RedirectBorderEdge = - new PaletteRedirectBorderEdge(Redirector, disabled!.BorderEdge, normal!.BorderEdge); + _stateCommon.RedirectBorderEdge = new PaletteRedirectBorderEdge(Redirector, disabled.BorderEdge, normal.BorderEdge); _stateCommon.RedirectRibbonGeneral = new PaletteRedirectRibbonGeneral(Redirector); } } @@ -886,7 +890,7 @@ public virtual void ResetInherit(Control alignControl) _redirectNavigatorRibbonTab?.ResetRedirectStates(); - if (_stateCommon != null) + if (_stateCommon is not null && Redirector is not null) { _stateCommon.RedirectBorderEdge = new PaletteRedirectBorder(Redirector); _stateCommon.RedirectRibbonGeneral = new PaletteRedirectRibbonGeneral(Redirector); diff --git a/Source/Krypton Components/Krypton.Navigator/Page/KryptonPageCollection.cs b/Source/Krypton Components/Krypton.Navigator/Page/KryptonPageCollection.cs index 11114face..1a6dca893 100644 --- a/Source/Krypton Components/Krypton.Navigator/Page/KryptonPageCollection.cs +++ b/Source/Krypton Components/Krypton.Navigator/Page/KryptonPageCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingBase.cs b/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingBase.cs index 62525080d..9dd0b9d0c 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,12 @@ protected HeaderGroupMappingBase([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) : base(needPaint) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); + + if (navigator is null) + { + throw new ArgumentNullException(nameof(navigator)); + } // Remember back reference to owning control _navigator = navigator; @@ -78,10 +83,11 @@ protected HeaderGroupMappingBase([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (base.IsDefault && - (MapImage == GetMapImageDefault()) && - (MapHeading == GetMapHeadingDefault()) && - (MapDescription == GetMapDescriptionDefault())); + (MapImage == GetMapImageDefault()) && + (MapHeading == GetMapHeadingDefault()) && + (MapDescription == GetMapDescriptionDefault())); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingPrimary.cs b/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingPrimary.cs index 3b870075b..93b16d8bd 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingPrimary.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingPrimary.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingSecondary.cs b/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingSecondary.cs index 053576874..a5fb04fdc 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingSecondary.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/HeaderGroupMappingSecondary.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorBar.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorBar.cs index 11bc2fd27..f22497df1 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorBar.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -56,7 +56,12 @@ public class NavigatorBar : Storage public NavigatorBar([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); + + if (navigator is null) + { + throw new ArgumentNullException(nameof(navigator)); + } // Remember back reference _navigator = navigator; @@ -90,23 +95,24 @@ public NavigatorBar([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((CheckButtonStyle == ButtonStyle.Standalone) && - (TabStyle == TabStyle.HighProfile) && - (TabBorderStyle == TabBorderStyle.RoundedOutsizeMedium) && - (BarFirstItemInset == DEFAULT_BAR_FIRST_ITEM_INSET) && - (BarLastItemInset == DEFAULT_BAR_LAST_ITEM_INSET) && - (BarMapImage == MapKryptonPageImage.Small) && - (BarMapText == MapKryptonPageText.TextTitle) && - (BarMapExtraText == MapKryptonPageText.None) && - (BarOrientation == VisualOrientation.Top) && - (ItemSizing == BarItemSizing.SameHeight) && - (ItemMinimumSize == _defaultItemMinimumSize) && - (ItemMaximumSize == _defaultItemMaximumSize) && - (ItemOrientation == ButtonOrientation.Auto) && - (ItemAlignment == RelativePositionAlign.Near) && - (BarMinimumHeight == DEFAULT_BAR_MINIMUM_HEIGHT) && - BarAnimation && - (BarMultiline == BarMultiline.Singleline)); + (TabStyle == TabStyle.HighProfile) && + (TabBorderStyle == TabBorderStyle.RoundedOutsizeMedium) && + (BarFirstItemInset == DEFAULT_BAR_FIRST_ITEM_INSET) && + (BarLastItemInset == DEFAULT_BAR_LAST_ITEM_INSET) && + (BarMapImage == MapKryptonPageImage.Small) && + (BarMapText == MapKryptonPageText.TextTitle) && + (BarMapExtraText == MapKryptonPageText.None) && + (BarOrientation == VisualOrientation.Top) && + (ItemSizing == BarItemSizing.SameHeight) && + (ItemMinimumSize == _defaultItemMinimumSize) && + (ItemMaximumSize == _defaultItemMaximumSize) && + (ItemOrientation == ButtonOrientation.Auto) && + (ItemAlignment == RelativePositionAlign.Near) && + (BarMinimumHeight == DEFAULT_BAR_MINIMUM_HEIGHT) && + BarAnimation && + (BarMultiline == BarMultiline.Singleline)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorButton.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorButton.cs index 9ee4d62ba..0700262e7 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorButton.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -49,10 +49,10 @@ public class NavigatorButton : Storage public NavigatorButton([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -109,25 +109,26 @@ public NavigatorButton([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => ((ButtonSpecs.Count == 0) && - PreviousButton.IsDefault && - (PreviousButtonAction == DirectionButtonAction.ModeAppropriateAction) && - (PreviousButtonDisplay == ButtonDisplay.Logic) && - (PreviousButtonShortcut == DEFAULT_SHORTCUT_PREVIOUS) && - NextButton.IsDefault && - (NextButtonAction == DirectionButtonAction.ModeAppropriateAction) && - (NextButtonDisplay == ButtonDisplay.Logic) && - (NextButtonShortcut == DEFAULT_SHORTCUT_NEXT) && - ContextButton.IsDefault && - (ContextButtonDisplay == ButtonDisplay.Logic) && - (ContextButtonShortcut == DEFAULT_SHORTCUT_CONTEXT) && - (ContextMenuMapText == MapKryptonPageText.TextTitle) && - (ContextMenuMapImage == MapKryptonPageImage.Small) && - CloseButton.IsDefault && - (CloseButtonAction == CloseButtonAction.RemovePageAndDispose) && - (CloseButtonDisplay == ButtonDisplay.Logic) && - (CloseButtonShortcut == DEFAULT_SHORTCUT_CLOSE) && - (ButtonDisplayLogic == ButtonDisplayLogic.Context)); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => ((ButtonSpecs!.Count == 0) && + PreviousButton.IsDefault && + (PreviousButtonAction == DirectionButtonAction.ModeAppropriateAction) && + (PreviousButtonDisplay == ButtonDisplay.Logic) && + (PreviousButtonShortcut == DEFAULT_SHORTCUT_PREVIOUS) && + NextButton.IsDefault && + (NextButtonAction == DirectionButtonAction.ModeAppropriateAction) && + (NextButtonDisplay == ButtonDisplay.Logic) && + (NextButtonShortcut == DEFAULT_SHORTCUT_NEXT) && + ContextButton.IsDefault && + (ContextButtonDisplay == ButtonDisplay.Logic) && + (ContextButtonShortcut == DEFAULT_SHORTCUT_CONTEXT) && + (ContextMenuMapText == MapKryptonPageText.TextTitle) && + (ContextMenuMapImage == MapKryptonPageImage.Small) && + CloseButton.IsDefault && + (CloseButtonAction == CloseButtonAction.RemovePageAndDispose) && + (CloseButtonDisplay == ButtonDisplay.Logic) && + (CloseButtonShortcut == DEFAULT_SHORTCUT_CLOSE) && + (ButtonDisplayLogic == ButtonDisplayLogic.Context)); #endregion @@ -139,7 +140,7 @@ public NavigatorButton([DisallowNull] KryptonNavigator navigator, [Description(@"Collection of button specifications.")] [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public NavigatorButtonSpecCollection ButtonSpecs { get; } + public NavigatorButtonSpecCollection? ButtonSpecs { get; } #endregion @@ -540,19 +541,19 @@ public ButtonDisplayLogic ButtonDisplayLogic #endregion #region Implementation - private void OnPreviousClick(object sender, EventArgs e) => _navigator.PerformPreviousAction(); + private void OnPreviousClick(object? sender, EventArgs e) => _navigator.PerformPreviousAction(); - private void OnNextClick(object sender, EventArgs e) => _navigator.PerformNextAction(); + private void OnNextClick(object? sender, EventArgs e) => _navigator.PerformNextAction(); - private void OnContextClick(object sender, EventArgs e) => _navigator.PerformContextAction(); + private void OnContextClick(object? sender, EventArgs e) => _navigator.PerformContextAction(); - private void OnCloseClick(object sender, EventArgs e) => _navigator.PerformCloseAction(); + private void OnCloseClick(object? sender, EventArgs e) => _navigator.PerformCloseAction(); - private void OnMaximizeButtonClick(object sender, EventArgs e) => throw new NotImplementedException(); + private void OnMaximizeButtonClick(object? sender, EventArgs e) => throw new NotImplementedException(); - private void OnMinimizeButtonClick(object sender, EventArgs e) => throw new NotImplementedException(); + private void OnMinimizeButtonClick(object? sender, EventArgs e) => throw new NotImplementedException(); - private void OnCloseButtonClick(object sender, EventArgs e) => throw new NotImplementedException(); + private void OnCloseButtonClick(object? sender, EventArgs e) => throw new NotImplementedException(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorGroup.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorGroup.cs index 740461c30..ee3a771fa 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,10 +33,10 @@ public class NavigatorGroup : Storage public NavigatorGroup([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -52,8 +52,9 @@ public NavigatorGroup([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((GroupBackStyle == PaletteBackStyle.ControlClient) && - (GroupBorderStyle == PaletteBorderStyle.ControlClient)); + (GroupBorderStyle == PaletteBorderStyle.ControlClient)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorHeader.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorHeader.cs index 8e9498347..9c22a8cd1 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorHeader.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorHeader.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -41,10 +41,10 @@ public class NavigatorHeader : Storage public NavigatorHeader([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); - + Debug.Assert(navigator is not null); + // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -69,17 +69,18 @@ public NavigatorHeader([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((HeaderStylePrimary == HeaderStyle.Primary) && - (HeaderStyleSecondary == HeaderStyle.Secondary) && - (HeaderStyleBar == HeaderStyle.Secondary) && - (HeaderPositionPrimary == VisualOrientation.Top) && - (HeaderPositionSecondary == VisualOrientation.Bottom) && - (HeaderPositionBar == VisualOrientation.Top) && - HeaderVisiblePrimary && - HeaderVisibleSecondary && - HeaderVisibleBar && - HeaderValuesPrimary.IsDefault && - HeaderValuesSecondary.IsDefault); + (HeaderStyleSecondary == HeaderStyle.Secondary) && + (HeaderStyleBar == HeaderStyle.Secondary) && + (HeaderPositionPrimary == VisualOrientation.Top) && + (HeaderPositionSecondary == VisualOrientation.Bottom) && + (HeaderPositionBar == VisualOrientation.Top) && + HeaderVisiblePrimary && + HeaderVisibleSecondary && + HeaderVisibleBar && + HeaderValuesPrimary.IsDefault && + HeaderValuesSecondary.IsDefault); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlook.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlook.cs index a151b2511..d92b73068 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlook.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlook.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -46,10 +46,10 @@ public class NavigatorOutlook : Storage public NavigatorOutlook([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); - + Debug.Assert(navigator is not null); + // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -77,18 +77,19 @@ public NavigatorOutlook([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Full.IsDefault && - Mini.IsDefault && - (CheckButtonStyle == ButtonStyle.NavigatorStack) && - (OverflowButtonStyle == ButtonStyle.NavigatorOverflow) && - (BorderEdgeStyle == PaletteBorderStyle.ControlClient) && - (Orientation == Orientation.Vertical) && - (ItemOrientation == ButtonOrientation.Auto) && - (HeaderSecondaryVisible == InheritBool.False) && - (TextMoreButtons.Equals(DEFAULT_MORE_BUTTONS)) && - (TextFewerButtons.Equals(DEFAULT_FEWER_BUTTONS)) && - (TextAddRemoveButtons.Equals(DEFAULT_ADD_REMOVE_BUTTONS)) && - ShowDropDownButton); + Mini.IsDefault && + (CheckButtonStyle == ButtonStyle.NavigatorStack) && + (OverflowButtonStyle == ButtonStyle.NavigatorOverflow) && + (BorderEdgeStyle == PaletteBorderStyle.ControlClient) && + (Orientation == Orientation.Vertical) && + (ItemOrientation == ButtonOrientation.Auto) && + (HeaderSecondaryVisible == InheritBool.False) && + (TextMoreButtons.Equals(DEFAULT_MORE_BUTTONS)) && + (TextFewerButtons.Equals(DEFAULT_FEWER_BUTTONS)) && + (TextAddRemoveButtons.Equals(DEFAULT_ADD_REMOVE_BUTTONS)) && + ShowDropDownButton); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookFull.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookFull.cs index f9bb9910a..9ab2e2eb2 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookFull.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookFull.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,10 +37,10 @@ public class NavigatorOutlookFull : Storage public NavigatorOutlookFull([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); - + Debug.Assert(navigator is not null); + // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -60,12 +60,13 @@ public NavigatorOutlookFull([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((OverflowMapImage == MapKryptonPageImage.Small) && - (OverflowMapText == MapKryptonPageText.None) && - (OverflowMapExtraText == MapKryptonPageText.None) && - (StackMapImage == MapKryptonPageImage.MediumSmall) && - (StackMapText == MapKryptonPageText.TextTitle) && - (StackMapExtraText == MapKryptonPageText.None)); + (OverflowMapText == MapKryptonPageText.None) && + (OverflowMapExtraText == MapKryptonPageText.None) && + (StackMapImage == MapKryptonPageImage.MediumSmall) && + (StackMapText == MapKryptonPageText.TextTitle) && + (StackMapExtraText == MapKryptonPageText.None)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookMini.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookMini.cs index b38a42b74..a32953b39 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookMini.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorOutlookMini.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,10 +38,10 @@ public class NavigatorOutlookMini : Storage public NavigatorOutlookMini([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -62,13 +62,14 @@ public NavigatorOutlookMini([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((MiniButtonStyle == ButtonStyle.NavigatorMini) && - (MiniMapImage == MapKryptonPageImage.None) && - (MiniMapText == MapKryptonPageText.TextTitle) && - (MiniMapExtraText == MapKryptonPageText.None) && - (StackMapImage == MapKryptonPageImage.MediumSmall) && - (StackMapText == MapKryptonPageText.None) && - (StackMapExtraText == MapKryptonPageText.None)); + (MiniMapImage == MapKryptonPageImage.None) && + (MiniMapText == MapKryptonPageText.TextTitle) && + (MiniMapExtraText == MapKryptonPageText.None) && + (StackMapImage == MapKryptonPageImage.MediumSmall) && + (StackMapText == MapKryptonPageText.None) && + (StackMapExtraText == MapKryptonPageText.None)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPanel.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPanel.cs index 53913d8ee..6c369a544 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPanel.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,10 +32,10 @@ public class NavigatorPanel : Storage public NavigatorPanel([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -50,6 +50,7 @@ public NavigatorPanel([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (PanelBackStyle == PaletteBackStyle.PanelClient); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPopupPages.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPopupPages.cs index a18abb489..c6d753d0e 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPopupPages.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorPopupPages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,13 +38,13 @@ public class NavigatorPopupPages : Storage /// Reference to owning navigator instance. /// Delegate for notifying paint requests. public NavigatorPopupPages([DisallowNull] KryptonNavigator navigator, - [DisallowNull] NeedPaintHandler needPaint) + [DisallowNull] NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); - Debug.Assert(needPaint != null); - + Debug.Assert(navigator is not null); + Debug.Assert(needPaint is not null); + // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -63,11 +63,12 @@ public NavigatorPopupPages([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((AllowPopupPages == PopupPageAllow.OnlyOutlookMiniMode) && - (Border == DEFAULT_BORDER) && - (Element == DEFAULT_ELEMENT) && - (Gap == DEFAULT_GAP) && - (Position == DEFAULT_POSITION)); + (Border == DEFAULT_BORDER) && + (Element == DEFAULT_ELEMENT) && + (Gap == DEFAULT_GAP) && + (Position == DEFAULT_POSITION)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorStack.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorStack.cs index dfa8f1835..e820320ac 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorStack.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorStack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -39,10 +39,10 @@ public class NavigatorStack : Storage public NavigatorStack([DisallowNull] KryptonNavigator navigator, NeedPaintHandler needPaint) { - Debug.Assert(navigator != null); - + Debug.Assert(navigator is not null); + // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -65,15 +65,16 @@ public NavigatorStack([DisallowNull] KryptonNavigator navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((CheckButtonStyle == ButtonStyle.NavigatorStack) && - (BorderEdgeStyle == PaletteBorderStyle.ControlClient) && - StackAnimation && - (StackOrientation == Orientation.Vertical) && - (StackAlignment == RelativePositionAlign.Center) && - (ItemOrientation == ButtonOrientation.Auto) && - (StackMapImage == MapKryptonPageImage.Small) && - (StackMapText == MapKryptonPageText.TextTitle) && - (StackMapExtraText == MapKryptonPageText.None)); + (BorderEdgeStyle == PaletteBorderStyle.ControlClient) && + StackAnimation && + (StackOrientation == Orientation.Vertical) && + (StackAlignment == RelativePositionAlign.Center) && + (ItemOrientation == ButtonOrientation.Auto) && + (StackMapImage == MapKryptonPageImage.Small) && + (StackMapText == MapKryptonPageText.TextTitle) && + (StackMapExtraText == MapKryptonPageText.None)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorToolTips.cs b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorToolTips.cs index 29a0047a9..3b37926e0 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorToolTips.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/NavigatorToolTips.cs @@ -5,108 +5,109 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion namespace Krypton.Navigator { - /// - /// Storage for tooltip related properties. - /// - public class NavigatorToolTips : Storage - { - #region Instance Fields - private readonly KryptonNavigator _navigator; - private MapKryptonPageImage _mapImage; - #endregion - - #region Identity - /// - /// Initialize a new instance of the NavigatorPopupPage class. - /// - /// Reference to owning navigator instance. - /// Delegate for notifying paint requests. - public NavigatorToolTips([DisallowNull] KryptonNavigator navigator, + /// + /// Storage for tooltip related properties. + /// + public class NavigatorToolTips : Storage + { + #region Instance Fields + private readonly KryptonNavigator _navigator; + private MapKryptonPageImage _mapImage; + #endregion + + #region Identity + /// + /// Initialize a new instance of the NavigatorPopupPage class. + /// + /// Reference to owning navigator instance. + /// Delegate for notifying paint requests. + public NavigatorToolTips([DisallowNull] KryptonNavigator navigator, [DisallowNull] NeedPaintHandler needPaint) - { - Debug.Assert(navigator != null); - Debug.Assert(needPaint != null); - - // Remember back reference - _navigator = navigator; - - // Store the provided paint notification delegate - NeedPaint = needPaint; - - // Default values - AllowPageToolTips = false; - AllowButtonSpecToolTips = false; - AllowButtonSpecToolTipPriority = false; - _mapImage = MapKryptonPageImage.ToolTip; - MapText = MapKryptonPageText.ToolTipTitle; - MapExtraText = MapKryptonPageText.ToolTipBody; - } - #endregion - - #region IsDefault - /// - /// Gets a value indicating if all values are default. - /// - [Browsable(false)] - public override bool IsDefault => (!AllowPageToolTips && - !AllowButtonSpecToolTips && - !AllowButtonSpecToolTipPriority && - (MapImage == MapKryptonPageImage.ToolTip) && - (MapText == MapKryptonPageText.ToolTipTitle) && - (MapExtraText == MapKryptonPageText.ToolTipBody)); - - #endregion - - #region AllowPageToolTips - /// - /// Gets and sets a value indicating if tooltips should be Displayed for page headers. - /// - [Category(@"Visuals")] - [Description(@"Should tooltips be Displayed for page headers.")] - [DefaultValue(false)] - public bool AllowPageToolTips { get; set; } - - #endregion - - #region AllowButtonSpecToolTips - /// - /// Gets and sets a value indicating if tooltips should be Displayed for button specs. - /// - [Category(@"Visuals")] - [Description(@"Should tooltips be Displayed for button specs.")] - [DefaultValue(false)] - public bool AllowButtonSpecToolTips { get; set; } - - /// - /// Gets and sets a value indicating if button spec tooltips should remove the parent tooltip. - /// - [Category(@"Visuals")] - [Description(@"Should button spec tooltips should remove the parent tooltip")] - [DefaultValue(false)] - public bool AllowButtonSpecToolTipPriority { get; set; } - #endregion - - #region MapImage - /// - /// Gets and sets the mapping used for the tooltip image. - /// - [Localizable(true)] - [Category(@"Visuals")] - [Description(@"Mapping used for the tooltip image.")] - [RefreshProperties(RefreshProperties.All)] - //[DefaultValue(typeof(MapKryptonPageImage), "ToolTip")] - public virtual MapKryptonPageImage MapImage - { - get => _mapImage; - set => _mapImage = value; - } + { + Debug.Assert(navigator is not null); + Debug.Assert(needPaint is not null); + + // Remember back reference + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); + + // Store the provided paint notification delegate + NeedPaint = needPaint; + + // Default values + AllowPageToolTips = false; + AllowButtonSpecToolTips = false; + AllowButtonSpecToolTipPriority = false; + _mapImage = MapKryptonPageImage.ToolTip; + MapText = MapKryptonPageText.ToolTipTitle; + MapExtraText = MapKryptonPageText.ToolTipBody; + } + #endregion + + #region IsDefault + /// + /// Gets a value indicating if all values are default. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (!AllowPageToolTips && + !AllowButtonSpecToolTips && + !AllowButtonSpecToolTipPriority && + (MapImage == MapKryptonPageImage.ToolTip) && + (MapText == MapKryptonPageText.ToolTipTitle) && + (MapExtraText == MapKryptonPageText.ToolTipBody)); + + #endregion + + #region AllowPageToolTips + /// + /// Gets and sets a value indicating if tooltips should be Displayed for page headers. + /// + [Category(@"Visuals")] + [Description(@"Should tooltips be Displayed for page headers.")] + [DefaultValue(false)] + public bool AllowPageToolTips { get; set; } + + #endregion + + #region AllowButtonSpecToolTips + /// + /// Gets and sets a value indicating if tooltips should be Displayed for button specs. + /// + [Category(@"Visuals")] + [Description(@"Should tooltips be Displayed for button specs.")] + [DefaultValue(false)] + public bool AllowButtonSpecToolTips { get; set; } + + /// + /// Gets and sets a value indicating if button spec tooltips should remove the parent tooltip. + /// + [Category(@"Visuals")] + [Description(@"Should button spec tooltips should remove the parent tooltip")] + [DefaultValue(false)] + public bool AllowButtonSpecToolTipPriority { get; set; } + #endregion + + #region MapImage + /// + /// Gets and sets the mapping used for the tooltip image. + /// + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Mapping used for the tooltip image.")] + [RefreshProperties(RefreshProperties.All)] + //[DefaultValue(typeof(MapKryptonPageImage), "ToolTip")] + public virtual MapKryptonPageImage MapImage + { + get => _mapImage; + set => _mapImage = value; + } /// /// Resets the MapImage property to its default value. @@ -119,10 +120,10 @@ public virtual MapKryptonPageImage MapImage /// Gets and sets the mapping used for the tooltip text. /// [Category(@"Visuals")] - [Description(@"Mapping used for the tooltip text.")] - [RefreshProperties(RefreshProperties.All)] - //[DefaultValue(typeof(MapKryptonPageText), "ToolTipTitle")] - public MapKryptonPageText MapText { get; set; } + [Description(@"Mapping used for the tooltip text.")] + [RefreshProperties(RefreshProperties.All)] + //[DefaultValue(typeof(MapKryptonPageText), "ToolTipTitle")] + public MapKryptonPageText MapText { get; set; } /// /// Resets the MapText property to its default value. @@ -135,10 +136,10 @@ public virtual MapKryptonPageImage MapImage /// Gets and sets the mapping used for the tooltip description. /// [Category(@"Visuals")] - [Description(@"Mapping used for the tooltip description.")] - [RefreshProperties(RefreshProperties.All)] - //[DefaultValue(typeof(MapKryptonPageText), "ToolTipBody")] - public MapKryptonPageText MapExtraText { get; set; } + [Description(@"Mapping used for the tooltip description.")] + [RefreshProperties(RefreshProperties.All)] + //[DefaultValue(typeof(MapKryptonPageText), "ToolTipBody")] + public MapKryptonPageText MapExtraText { get; set; } /// /// Resets the MapExtraText property to its default value. diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteBarRedirect.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteBarRedirect.cs index 07d4784f8..8e47f2b6b 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteBarRedirect.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteBarRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -66,16 +66,17 @@ public PaletteBarRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (base.IsDefault && - BarPaddingTabs.Equals(CommonHelper.InheritPadding) && - BarPaddingInside.Equals(CommonHelper.InheritPadding) && - BarPaddingOutside.Equals(CommonHelper.InheritPadding) && - BarPaddingOnly.Equals(CommonHelper.InheritPadding) && - ButtonPadding.Equals(CommonHelper.InheritPadding) && - (ButtonEdgeOutside == -1) && - (ButtonEdgeInside == -1) && - (CheckButtonGap == -1) && - (RibbonTabGap == -1)); + BarPaddingTabs.Equals(CommonHelper.InheritPadding) && + BarPaddingInside.Equals(CommonHelper.InheritPadding) && + BarPaddingOutside.Equals(CommonHelper.InheritPadding) && + BarPaddingOnly.Equals(CommonHelper.InheritPadding) && + ButtonPadding.Equals(CommonHelper.InheritPadding) && + (ButtonEdgeOutside == -1) && + (ButtonEdgeInside == -1) && + (CheckButtonGap == -1) && + (RibbonTabGap == -1)); #endregion @@ -370,7 +371,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) } // Pass onto the inheritance - return _redirect.GetMetricInt(state, metric); + return _redirect!.GetMetricInt(state, metric); } /// @@ -381,7 +382,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) /// InheritBool value. public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) => // Always pass onto the inheritance - _redirect.GetMetricBool(state, metric); + _redirect!.GetMetricBool(state, metric); /// /// Gets a padding metric value. @@ -426,7 +427,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin } // Pass onto the inheritance - return _redirect.GetMetricPadding(state, metric); + return _redirect!.GetMetricPadding(state, metric); } #endregion } diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteMetrics.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteMetrics.cs index c8b429a79..2d090d2b0 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteMetrics.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteMetrics.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -48,8 +48,9 @@ public PaletteMetrics(KryptonNavigator? navigator, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ((PageButtonSpecInset == -1) && - PageButtonSpecPadding.Equals(CommonHelper.InheritPadding)); + PageButtonSpecPadding.Equals(CommonHelper.InheritPadding)); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContent.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContent.cs index 6c9ead960..241e03a55 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContent.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -83,6 +83,7 @@ public PaletteNavContent([DisallowNull] IPaletteContent inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Image!.IsDefault && ShortText.IsDefault && LongText.IsDefault && @@ -300,7 +301,7 @@ public Color GetContentImageColorTo(PaletteState state) => Image!.ImageColorTo ! /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextFont(PaletteState state) => + public Font? GetContentShortTextFont(PaletteState state) => ShortText.Font ?? _inherit!.GetContentShortTextFont(state); /// @@ -308,7 +309,7 @@ public Font GetContentShortTextFont(PaletteState state) => /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextNewFont(PaletteState state) => + public Font? GetContentShortTextNewFont(PaletteState state) => ShortText.Font ?? _inherit!.GetContentShortTextNewFont(state); /// @@ -469,7 +470,7 @@ public PaletteRectangleAlign GetContentShortTextImageAlign(PaletteState state) = /// /// Font value. /// Palette value should be applicable to this state. - public Font GetContentLongTextFont(PaletteState state) => + public Font? GetContentLongTextFont(PaletteState state) => LongText.Font ?? _inherit!.GetContentLongTextFont(state); /// @@ -477,7 +478,7 @@ public Font GetContentLongTextFont(PaletteState state) => /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentLongTextNewFont(PaletteState state) => + public Font? GetContentLongTextNewFont(PaletteState state) => LongText.Font ?? _inherit!.GetContentLongTextNewFont(state); /// diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContentText.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContentText.cs index 809abfec7..4429b5825 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContentText.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavContentText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigator.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigator.cs index 4f513d456..4f7a699a9 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigator.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,22 +19,22 @@ public class PaletteNavigator : PaletteDoubleMetric { #region Identity /// - /// Initialize a new instance of the PaletteNavigatorNormabled class. + /// Initialize a new instance of the PaletteNavigator class. /// /// inheritance redirection instance. /// Delegate for notifying paint requests. public PaletteNavigator(PaletteNavigatorRedirect? redirect, NeedPaintHandler needPaint) - : base(redirect, needPaint) + : base(redirect!, needPaint) { // Create the palette storage - PalettePage = new PalettePage(redirect.PalettePage, needPaint); + PalettePage = new PalettePage(redirect!.PalettePage, needPaint); HeaderGroup = new PaletteNavigatorHeaderGroup(redirect.HeaderGroup, redirect.HeaderGroup.HeaderPrimary, redirect.HeaderGroup.HeaderSecondary, redirect.HeaderGroup.HeaderBar, redirect.HeaderGroup.HeaderOverflow, needPaint); CheckButton = new PaletteTriple(redirect.CheckButton, needPaint); OverflowButton = new PaletteTriple(redirect.OverflowButton, needPaint); MiniButton = new PaletteTriple(redirect.MiniButton, needPaint); BorderEdge = new PaletteBorderEdge(redirect.BorderEdge, needPaint); - Separator = new PaletteSeparatorPadding(redirect.Separator, redirect.Separator, needPaint); + Separator = new PaletteSeparatorPadding(redirect.Separator!, redirect.Separator!, needPaint); Tab = new PaletteTabTriple(redirect.Tab, needPaint); RibbonTab = new PaletteRibbonTabContent(redirect.RibbonTab.TabDraw, redirect.RibbonTab.TabDraw, redirect.RibbonTab.Content, needPaint); } @@ -45,16 +45,17 @@ public PaletteNavigator(PaletteNavigatorRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (base.IsDefault && - PalettePage.IsDefault && - HeaderGroup.IsDefault && - CheckButton.IsDefault && - OverflowButton.IsDefault && - MiniButton.IsDefault && - BorderEdge.IsDefault && - Separator.IsDefault && - Tab.IsDefault && - RibbonTab.IsDefault); + PalettePage.IsDefault && + HeaderGroup.IsDefault && + CheckButton.IsDefault && + OverflowButton.IsDefault && + MiniButton.IsDefault && + BorderEdge.IsDefault && + Separator.IsDefault && + Tab.IsDefault && + RibbonTab.IsDefault); #endregion @@ -63,17 +64,21 @@ public PaletteNavigator(PaletteNavigatorRedirect? redirect, /// Sets the inheritance parent. /// /// Source for inheriting. - public void SetInherit(PaletteNavigator? inheritNavigator) + public void SetInherit(PaletteNavigator inheritNavigator) { + if ( inheritNavigator is null) + { + throw new ArgumentNullException(nameof(inheritNavigator)); + } // Setup inheritance references for storage objects base.SetInherit(inheritNavigator); - PalettePage.SetInherit(inheritNavigator.PalettePage); - HeaderGroup.SetInherit(inheritNavigator.HeaderGroup); + PalettePage?.SetInherit(inheritNavigator.PalettePage); + HeaderGroup?.SetInherit(inheritNavigator.HeaderGroup); CheckButton.SetInherit(inheritNavigator.CheckButton); OverflowButton.SetInherit(inheritNavigator.OverflowButton); MiniButton.SetInherit(inheritNavigator.MiniButton); BorderEdge.SetInherit(inheritNavigator.BorderEdge); - Separator.SetInherit(inheritNavigator.Separator); + Separator?.SetInherit(inheritNavigator.Separator); Tab.SetInherit(inheritNavigator.Tab); RibbonTab.SetInherit(inheritNavigator.RibbonTab.TabDraw, inheritNavigator.RibbonTab.TabDraw, inheritNavigator.RibbonTab.Content); } @@ -177,7 +182,7 @@ public void SetInherit(PaletteNavigator? inheritNavigator) [Category(@"Visuals")] [Description(@"Overrides for defining header group appearance entries.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteNavigatorHeaderGroup? HeaderGroup { get; } + public PaletteNavigatorHeaderGroup HeaderGroup { get; } private bool ShouldSerializeHeaderGroup() => !HeaderGroup.IsDefault; @@ -216,7 +221,7 @@ public void SetInherit(PaletteNavigator? inheritNavigator) [Category(@"Visuals")] [Description(@"Overrides for defining separator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSeparatorPadding? Separator { get; } + public PaletteSeparatorPadding Separator { get; } private bool ShouldSerializeSeparator() => !Separator.IsDefault; @@ -249,7 +254,7 @@ public void SetInherit(PaletteNavigator? inheritNavigator) #endregion #region Internal - internal PalettePage? PalettePage { get; } + internal PalettePage PalettePage { get; } #endregion } diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroup.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroup.cs index cfde78f5f..ba865fa9a 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public class PaletteNavigatorHeaderGroup : PaletteHeaderGroup /// Source for inheriting bar header defaulted values. /// Source for inheriting overflow header defaulted values. /// Delegate for notifying paint requests. - public PaletteNavigatorHeaderGroup(PaletteHeaderGroupRedirect? inheritHeaderGroup, + public PaletteNavigatorHeaderGroup(PaletteHeaderGroupRedirect inheritHeaderGroup, PaletteHeaderPaddingRedirect inheritHeaderPrimary, PaletteHeaderPaddingRedirect inheritHeaderSecondary, [DisallowNull] PaletteHeaderPaddingRedirect inheritHeaderBar, @@ -36,8 +36,13 @@ public PaletteNavigatorHeaderGroup(PaletteHeaderGroupRedirect? inheritHeaderGrou : base(inheritHeaderGroup, inheritHeaderPrimary, inheritHeaderSecondary, needPaint) { - Debug.Assert(inheritHeaderBar != null); + Debug.Assert(inheritHeaderBar is not null); + if (inheritHeaderBar is null) + { + throw new ArgumentNullException(nameof(inheritHeaderBar)); + } + // Create the palette storage HeaderBar = new PaletteTripleMetric(inheritHeaderBar, needPaint); HeaderOverflow = new PaletteTripleMetric(inheritHeaderOverflow, needPaint); @@ -49,9 +54,10 @@ public PaletteNavigatorHeaderGroup(PaletteHeaderGroupRedirect? inheritHeaderGrou /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (base.IsDefault && - HeaderBar.IsDefault && - HeaderOverflow.IsDefault); + HeaderBar.IsDefault && + HeaderOverflow.IsDefault); #endregion @@ -60,7 +66,7 @@ public PaletteNavigatorHeaderGroup(PaletteHeaderGroupRedirect? inheritHeaderGrou /// Sets the inheritance parent. /// /// Source for inheriting. - public void SetInherit(PaletteNavigatorHeaderGroup? inheritHeaderGroup) + public void SetInherit(PaletteNavigatorHeaderGroup inheritHeaderGroup) { base.SetInherit(inheritHeaderGroup); HeaderBar.SetInherit(inheritHeaderGroup.HeaderBar); diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroupRedirect.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroupRedirect.cs index c8ea9c798..0ffd921ff 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroupRedirect.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorHeaderGroupRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PaletteNavigatorHeaderGroupRedirect : PaletteHeaderGroupRedirect /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteNavigatorHeaderGroupRedirect(PaletteRedirect? redirect, + public PaletteNavigatorHeaderGroupRedirect(PaletteRedirect redirect, NeedPaintHandler needPaint) : this(redirect, redirect, redirect, redirect, redirect, needPaint) { @@ -38,17 +38,27 @@ public PaletteNavigatorHeaderGroupRedirect(PaletteRedirect? redirect, /// inheritance redirection for bar header. /// inheritance redirection for overflow header. /// Delegate for notifying paint requests. - public PaletteNavigatorHeaderGroupRedirect(PaletteRedirect? redirectHeaderGroup, - PaletteRedirect? redirectHeaderPrimary, - PaletteRedirect? redirectHeaderSecondary, + public PaletteNavigatorHeaderGroupRedirect(PaletteRedirect redirectHeaderGroup, + PaletteRedirect redirectHeaderPrimary, + PaletteRedirect redirectHeaderSecondary, [DisallowNull] PaletteRedirect redirectHeaderBar, [DisallowNull] PaletteRedirect redirectHeaderOverflow, NeedPaintHandler needPaint) : base(redirectHeaderGroup, redirectHeaderPrimary, redirectHeaderSecondary, needPaint) { - Debug.Assert(redirectHeaderBar != null); - Debug.Assert(redirectHeaderOverflow != null); + Debug.Assert(redirectHeaderBar is not null); + Debug.Assert(redirectHeaderOverflow is not null); + + if (redirectHeaderBar is null) + { + throw new ArgumentNullException(nameof(redirectHeaderBar)); + } + + if (redirectHeaderOverflow is null) + { + throw new ArgumentNullException(nameof(redirectHeaderOverflow)); + } // Create the palette storage HeaderBar = new PaletteHeaderPaddingRedirect(redirectHeaderBar, PaletteBackStyle.HeaderSecondary, PaletteBorderStyle.HeaderSecondary, PaletteContentStyle.HeaderSecondary, needPaint); @@ -61,9 +71,10 @@ public PaletteNavigatorHeaderGroupRedirect(PaletteRedirect? redirectHeaderGroup, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (base.IsDefault && - HeaderBar.IsDefault && - HeaderOverflow.IsDefault); + HeaderBar.IsDefault && + HeaderOverflow.IsDefault); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOther.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOther.cs index db2fea4bb..aa58117e7 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOther.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOther.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,10 +24,10 @@ public class PaletteNavigatorOther : Storage /// inheritance redirection instance. /// Delegate for notifying paint requests. public PaletteNavigatorOther(PaletteNavigatorRedirect? redirect, - NeedPaintHandler needPaint) + NeedPaintHandler needPaint) { // Create the palette storage - CheckButton = new PaletteTriple(redirect.CheckButton, needPaint); + CheckButton = new PaletteTriple(redirect!.CheckButton, needPaint); OverflowButton = new PaletteTriple(redirect.OverflowButton, needPaint); MiniButton = new PaletteTriple(redirect.MiniButton, needPaint); Tab = new PaletteTabTriple(redirect.Tab, needPaint); @@ -40,11 +40,12 @@ public PaletteNavigatorOther(PaletteNavigatorRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (CheckButton.IsDefault && - OverflowButton.IsDefault && - MiniButton.IsDefault && - Tab.IsDefault && - RibbonTab.IsDefault); + OverflowButton.IsDefault && + MiniButton.IsDefault && + Tab.IsDefault && + RibbonTab.IsDefault); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherEx.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherEx.cs index db73656b2..afd715dd0 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherEx.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherEx.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public PaletteNavigatorOtherEx(PaletteNavigatorRedirect? redirect, NeedPaintHandler needPaint) : base(redirect, needPaint) => // Create the palette storage - Separator = new PaletteSeparatorPadding(redirect.Separator, redirect.Separator, needPaint); + Separator = new PaletteSeparatorPadding(redirect!.Separator!, redirect.Separator!, needPaint); #endregion @@ -36,8 +36,9 @@ public PaletteNavigatorOtherEx(PaletteNavigatorRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => base.IsDefault && - Separator.IsDefault; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => base.IsDefault && + Separator.IsDefault; #endregion @@ -48,7 +49,7 @@ public PaletteNavigatorOtherEx(PaletteNavigatorRedirect? redirect, /// Source for inheriting. public override void SetInherit(PaletteNavigator inheritNavigator) { - Separator.SetInherit(inheritNavigator.Separator); + Separator?.SetInherit(inheritNavigator.Separator); base.SetInherit(inheritNavigator); } #endregion @@ -60,7 +61,7 @@ public override void SetInherit(PaletteNavigator inheritNavigator) [Category(@"Visuals")] [Description(@"Overrides for defining separator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSeparatorPadding? Separator { get; } + public PaletteSeparatorPadding Separator { get; } private bool ShouldSerializeSeparator() => !Separator.IsDefault; diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherRedirect.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherRedirect.cs index 1c1c01075..f71ac524c 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherRedirect.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorOtherRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,15 +27,15 @@ public class PaletteNavigatorOtherRedirect : Storage /// inheritance redirection instance for the tab. /// inheritance redirection instance for the ribbon tab. /// Delegate for notifying paint requests. - public PaletteNavigatorOtherRedirect(PaletteRedirect? redirectCheckButton, - PaletteRedirect? redirectOverflowButton, - PaletteRedirect? redirectMiniButton, - PaletteRedirect? redirectTab, - PaletteRedirect? redirectRibbonTab, - NeedPaintHandler needPaint) + public PaletteNavigatorOtherRedirect(PaletteRedirect redirectCheckButton, + PaletteRedirect redirectOverflowButton, + PaletteRedirect redirectMiniButton, + PaletteRedirect redirectTab, + PaletteRedirect redirectRibbonTab, + NeedPaintHandler needPaint) { // Create the palette storage - CheckButton = new PaletteTripleRedirect(redirectCheckButton, + CheckButton = new PaletteTripleRedirect(redirectCheckButton, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, @@ -68,11 +68,12 @@ public PaletteNavigatorOtherRedirect(PaletteRedirect? redirectCheckButton, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (CheckButton.IsDefault && - OverflowButton.IsDefault && - MiniButton.IsDefault && - RibbonTab.IsDefault && - Tab.IsDefault); + OverflowButton.IsDefault && + MiniButton.IsDefault && + RibbonTab.IsDefault && + Tab.IsDefault); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorRedirect.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorRedirect.cs index bd5161247..c1ce13be8 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorRedirect.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteNavigatorRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,9 +31,9 @@ public class PaletteNavigatorRedirect : PaletteDoubleMetricRedirect /// inheritance redirection instance. /// Delegate for notifying paint requests. public PaletteNavigatorRedirect(KryptonNavigator navigator, - PaletteRedirect? redirect, + PaletteRedirect redirect, NeedPaintHandler needPaint) - : this(navigator, redirect, redirect, redirect, + : this(navigator, redirect, redirect, redirect, redirect, redirect, redirect, redirect, redirect, redirect, redirect, redirect, redirect, @@ -64,22 +64,22 @@ public PaletteNavigatorRedirect(KryptonNavigator navigator, /// inheritance redirection for ribbon general. /// Delegate for notifying paint requests. public PaletteNavigatorRedirect(KryptonNavigator? navigator, - PaletteRedirect? redirectNavigator, - PaletteRedirect? redirectNavigatorPage, - PaletteRedirect? redirectNavigatorHeaderGroup, - PaletteRedirect? redirectNavigatorHeaderPrimary, - PaletteRedirect? redirectNavigatorHeaderSecondary, - PaletteRedirect? redirectNavigatorHeaderBar, - PaletteRedirect? redirectNavigatorHeaderOverflow, - PaletteRedirect? redirectNavigatorCheckButton, - PaletteRedirect? redirectNavigatorOverflowButton, - PaletteRedirect? redirectNavigatorMiniButton, - PaletteRedirect? redirectNavigatorBar, - PaletteRedirect? redirectNavigatorBorderEdge, - PaletteRedirect? redirectNavigatorSeparator, - PaletteRedirect? redirectNavigatorTab, - PaletteRedirect? redirectNavigatorRibbonTab, - PaletteRedirect? redirectNavigatorRibbonGeneral, + PaletteRedirect redirectNavigator, + PaletteRedirect redirectNavigatorPage, + PaletteRedirect redirectNavigatorHeaderGroup, + PaletteRedirect redirectNavigatorHeaderPrimary, + PaletteRedirect redirectNavigatorHeaderSecondary, + PaletteRedirect redirectNavigatorHeaderBar, + PaletteRedirect redirectNavigatorHeaderOverflow, + PaletteRedirect redirectNavigatorCheckButton, + PaletteRedirect redirectNavigatorOverflowButton, + PaletteRedirect redirectNavigatorMiniButton, + PaletteRedirect redirectNavigatorBar, + PaletteRedirect redirectNavigatorBorderEdge, + PaletteRedirect redirectNavigatorSeparator, + PaletteRedirect redirectNavigatorTab, + PaletteRedirect redirectNavigatorRibbonTab, + PaletteRedirect redirectNavigatorRibbonGeneral, NeedPaintHandler needPaint) : base(redirectNavigator, PaletteBackStyle.PanelClient, PaletteBorderStyle.ControlClient, needPaint) @@ -105,7 +105,7 @@ public PaletteNavigatorRedirect(KryptonNavigator? navigator, /// /// Update the redirector for the border edge. /// - public PaletteRedirect? RedirectBorderEdge + public PaletteRedirect RedirectBorderEdge { set => _paletteBorderEdgeInheritRedirect.SetRedirector(value); } @@ -115,7 +115,7 @@ public PaletteRedirect? RedirectBorderEdge /// /// Update the redirector for the ribbon general. /// - public PaletteRedirect? RedirectRibbonGeneral + public PaletteRedirect RedirectRibbonGeneral { set => RibbonGeneral.SetRedirector(value); } @@ -126,19 +126,20 @@ public PaletteRedirect? RedirectRibbonGeneral /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (base.IsDefault && - PalettePage.IsDefault && - HeaderGroup.IsDefault && - CheckButton.IsDefault && - OverflowButton.IsDefault && - MiniButton.IsDefault && - Bar.IsDefault && - BorderEdge.IsDefault && - Separator.IsDefault && - Tab.IsDefault && - RibbonTab.IsDefault && - RibbonGeneral.IsDefault && - Metrics.IsDefault); + PalettePage.IsDefault && + HeaderGroup.IsDefault && + CheckButton.IsDefault && + OverflowButton.IsDefault && + MiniButton.IsDefault && + Bar.IsDefault && + BorderEdge.IsDefault && + Separator!.IsDefault && + Tab.IsDefault && + RibbonTab.IsDefault && + RibbonGeneral.IsDefault && + Metrics.IsDefault); #endregion @@ -253,7 +254,7 @@ public PaletteRedirect? RedirectRibbonGeneral [Category(@"Visuals")] [Description(@"Overrides for defining header group appearance entries.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteNavigatorHeaderGroupRedirect? HeaderGroup { get; } + public PaletteNavigatorHeaderGroupRedirect HeaderGroup { get; } private bool ShouldSerializeHeaderGroup() => !HeaderGroup.IsDefault; @@ -307,7 +308,7 @@ public PaletteRedirect? RedirectRibbonGeneral [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteSeparatorPaddingRedirect? Separator { get; } - private bool ShouldSerializeSeparator() => !Separator.IsDefault; + private bool ShouldSerializeSeparator() => !Separator!.IsDefault; #endregion @@ -397,7 +398,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin #endregion #region Internal - internal PalettePageRedirect? PalettePage { get; } + internal PalettePageRedirect PalettePage { get; } internal PaletteBorderStyle BorderEdgeStyle { diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PalettePage.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PalettePage.cs index 614350b45..92beafa04 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PalettePage.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PalettePage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PalettePage : PaletteDouble /// /// Source for inheriting values. /// Delegate for notifying paint requests. - public PalettePage(IPaletteDouble? inherit, + public PalettePage(IPaletteDouble inherit, NeedPaintHandler needPaint) : base(inherit, needPaint) { diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PalettePageRedirect.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PalettePageRedirect.cs index b853e0a2e..d6cb58c58 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PalettePageRedirect.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PalettePageRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PalettePageRedirect : PaletteDoubleRedirect /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PalettePageRedirect(PaletteRedirect? redirect, + public PalettePageRedirect(PaletteRedirect redirect, NeedPaintHandler needPaint) : base(redirect, PaletteBackStyle.ControlClient, PaletteBorderStyle.ControlClient, needPaint) diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRedirectRibbonTabContent.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRedirectRibbonTabContent.cs index 80bf312fb..f170c0538 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRedirectRibbonTabContent.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRedirectRibbonTabContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,24 +18,24 @@ namespace Krypton.Navigator public class PaletteRedirectRibbonTabContent : PaletteRedirect { #region Instance Fields - private IPaletteRibbonBack _disabledBack; - private IPaletteRibbonBack _normalBack; - private IPaletteRibbonBack _pressedBack; - private IPaletteRibbonBack _trackingBack; - private IPaletteRibbonBack _selectedBack; - private IPaletteRibbonBack _focusOverrideBack; - private IPaletteRibbonText _disabledText; - private IPaletteRibbonText _normalText; - private IPaletteRibbonText _pressedText; - private IPaletteRibbonText _trackingText; - private IPaletteRibbonText _selectedText; - private IPaletteRibbonText _focusOverrideText; - private IPaletteContent _disabledContent; - private IPaletteContent _normalContent; - private IPaletteContent _pressedContent; - private IPaletteContent _trackingContent; - private IPaletteContent _selectedContent; - private IPaletteContent _focusOverrideContent; + private IPaletteRibbonBack? _disabledBack; + private IPaletteRibbonBack? _normalBack; + private IPaletteRibbonBack? _pressedBack; + private IPaletteRibbonBack? _trackingBack; + private IPaletteRibbonBack? _selectedBack; + private IPaletteRibbonBack? _focusOverrideBack; + private IPaletteRibbonText? _disabledText; + private IPaletteRibbonText? _normalText; + private IPaletteRibbonText? _pressedText; + private IPaletteRibbonText? _trackingText; + private IPaletteRibbonText? _selectedText; + private IPaletteRibbonText? _focusOverrideText; + private IPaletteContent? _disabledContent; + private IPaletteContent? _normalContent; + private IPaletteContent? _pressedContent; + private IPaletteContent? _trackingContent; + private IPaletteContent? _selectedContent; + private IPaletteContent? _focusOverrideContent; #endregion #region Identity @@ -43,7 +43,7 @@ public class PaletteRedirectRibbonTabContent : PaletteRedirect /// Initialize a new instance of the PaletteRedirectRibbonDouble class. /// /// Initial palette target for redirection. - public PaletteRedirectRibbonTabContent(PaletteBase? target) + public PaletteRedirectRibbonTabContent(PaletteBase target) : this(target, null, null, null, null, null, null, null, null, null, null, null, null, @@ -73,25 +73,25 @@ public PaletteRedirectRibbonTabContent(PaletteBase? target) /// Redirection for content tracking state requests. /// Redirection for content selected states requests. /// Redirection for content focus override state requests. - public PaletteRedirectRibbonTabContent(PaletteBase? target, - IPaletteRibbonBack disabledBack, - IPaletteRibbonBack normalBack, - IPaletteRibbonBack pressedBack, - IPaletteRibbonBack trackingBack, - IPaletteRibbonBack selectedBack, - IPaletteRibbonBack focusOverrideBack, - IPaletteRibbonText disabledText, - IPaletteRibbonText normalText, - IPaletteRibbonText pressedText, - IPaletteRibbonText trackingText, - IPaletteRibbonText selectedText, - IPaletteRibbonText focusOverrideText, - IPaletteContent disabledContent, - IPaletteContent normalContent, - IPaletteContent pressedContent, - IPaletteContent trackingContent, - IPaletteContent selectedContent, - IPaletteContent focusOverrideContent) + public PaletteRedirectRibbonTabContent(PaletteBase target, + IPaletteRibbonBack? disabledBack, + IPaletteRibbonBack? normalBack, + IPaletteRibbonBack? pressedBack, + IPaletteRibbonBack? trackingBack, + IPaletteRibbonBack? selectedBack, + IPaletteRibbonBack? focusOverrideBack, + IPaletteRibbonText? disabledText, + IPaletteRibbonText? normalText, + IPaletteRibbonText? pressedText, + IPaletteRibbonText? trackingText, + IPaletteRibbonText? selectedText, + IPaletteRibbonText? focusOverrideText, + IPaletteContent? disabledContent, + IPaletteContent? normalContent, + IPaletteContent? pressedContent, + IPaletteContent? trackingContent, + IPaletteContent? selectedContent, + IPaletteContent? focusOverrideContent) : base(target) { // Remember state specific inheritance @@ -190,9 +190,9 @@ public virtual void ResetRedirectStates() /// Color value. public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColorStyle(state) ?? Target.GetRibbonBackColorStyle(style, state); + return inherit?.GetRibbonBackColorStyle(state) ?? Target!.GetRibbonBackColorStyle(style, state); } /// @@ -203,9 +203,9 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac /// Color value. public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor1(state) ?? Target.GetRibbonBackColor1(style, state); + return inherit?.GetRibbonBackColor1(state) ?? Target!.GetRibbonBackColor1(style, state); } /// @@ -216,9 +216,9 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor2(state) ?? Target.GetRibbonBackColor2(style, state); + return inherit?.GetRibbonBackColor2(state) ?? Target!.GetRibbonBackColor2(style, state); } /// @@ -229,9 +229,9 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor3(state) ?? Target.GetRibbonBackColor3(style, state); + return inherit?.GetRibbonBackColor3(state) ?? Target!.GetRibbonBackColor3(style, state); } /// @@ -242,9 +242,9 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor4(state) ?? Target.GetRibbonBackColor4(style, state); + return inherit?.GetRibbonBackColor4(state) ?? Target!.GetRibbonBackColor4(style, state); } /// @@ -255,9 +255,9 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor5(state) ?? Target.GetRibbonBackColor5(style, state); + return inherit?.GetRibbonBackColor5(state) ?? Target!.GetRibbonBackColor5(style, state); } #endregion @@ -270,9 +270,9 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) { - IPaletteRibbonText inherit = GetTextInherit(state); + IPaletteRibbonText? inherit = GetTextInherit(state); - return inherit?.GetRibbonTextColor(state) ?? Target.GetRibbonTextColor(style, state); + return inherit?.GetRibbonTextColor(state) ?? Target!.GetRibbonTextColor(style, state); } #endregion @@ -285,9 +285,9 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt /// InheritBool value. public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentDraw(state) ?? Target.GetContentDraw(style, state); + return inherit?.GetContentDraw(state) ?? Target!.GetContentDraw(style, state); } /// @@ -298,9 +298,9 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentDrawFocus(state) ?? Target.GetContentDrawFocus(style, state); + return inherit?.GetContentDrawFocus(state) ?? Target!.GetContentDrawFocus(style, state); } /// @@ -311,9 +311,9 @@ public override InheritBool GetContentDrawFocus(PaletteContentStyle style, Palet /// RelativeAlignment value. public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentImageH(state) ?? Target.GetContentImageH(style, state); + return inherit?.GetContentImageH(state) ?? Target!.GetContentImageH(style, state); } /// @@ -324,9 +324,9 @@ public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, /// RelativeAlignment value. public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentImageV(state) ?? Target.GetContentImageV(style, state); + return inherit?.GetContentImageV(state) ?? Target!.GetContentImageV(style, state); } /// @@ -337,9 +337,9 @@ public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, /// PaletteImageEffect value. public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentImageEffect(state) ?? Target.GetContentImageEffect(style, state); + return inherit?.GetContentImageEffect(state) ?? Target!.GetContentImageEffect(style, state); } /// @@ -350,9 +350,9 @@ public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle sty /// Font value. public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextFont(state) ?? Target.GetContentShortTextFont(style, state); + return inherit?.GetContentShortTextFont(state) ?? Target!.GetContentShortTextFont(style, state) ?? throw new NullReferenceException("The result of GetContentShortTextFont() cannot be null."); } /// @@ -363,9 +363,9 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// PaletteTextHint value. public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextHint(state) ?? Target.GetContentShortTextHint(style, state); + return inherit?.GetContentShortTextHint(state) ?? Target!.GetContentShortTextHint(style, state); } /// @@ -376,9 +376,9 @@ public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle styl /// PaletteTextPrefix value. public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextPrefix(state) ?? Target.GetContentShortTextPrefix(style, state); + return inherit?.GetContentShortTextPrefix(state) ?? Target!.GetContentShortTextPrefix(style, state); } /// @@ -389,9 +389,9 @@ public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContent /// InheritBool value. public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextMultiLine(state) ?? Target.GetContentShortTextMultiLine(style, state); + return inherit?.GetContentShortTextMultiLine(state) ?? Target!.GetContentShortTextMultiLine(style, state); } /// @@ -402,9 +402,9 @@ public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle sty /// PaletteTextTrim value. public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextTrim(state) ?? Target.GetContentShortTextTrim(style, state); + return inherit?.GetContentShortTextTrim(state) ?? Target!.GetContentShortTextTrim(style, state); } /// @@ -415,9 +415,9 @@ public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle styl /// RelativeAlignment value. public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextH(state) ?? Target.GetContentShortTextH(style, state); + return inherit?.GetContentShortTextH(state) ?? Target!.GetContentShortTextH(style, state); } /// @@ -428,9 +428,9 @@ public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle st /// RelativeAlignment value. public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextV(state) ?? Target.GetContentShortTextV(style, state); + return inherit?.GetContentShortTextV(state) ?? Target!.GetContentShortTextV(style, state); } /// @@ -441,9 +441,9 @@ public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle st /// RelativeAlignment value. public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextMultiLineH(state) ?? Target.GetContentShortTextMultiLineH(style, state); + return inherit?.GetContentShortTextMultiLineH(state) ?? Target!.GetContentShortTextMultiLineH(style, state); } /// @@ -454,9 +454,9 @@ public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteConten /// Color value. public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextColor1(state) ?? Target.GetContentShortTextColor1(style, state); + return inherit?.GetContentShortTextColor1(state) ?? Target!.GetContentShortTextColor1(style, state); } /// @@ -467,9 +467,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet /// Color value. public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextColor2(state) ?? Target.GetContentShortTextColor2(style, state); + return inherit?.GetContentShortTextColor2(state) ?? Target!.GetContentShortTextColor2(style, state); } /// @@ -480,9 +480,9 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet /// Color drawing style. public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextColorStyle(state) ?? Target.GetContentShortTextColorStyle(style, state); + return inherit?.GetContentShortTextColorStyle(state) ?? Target!.GetContentShortTextColorStyle(style, state); } /// @@ -493,9 +493,9 @@ public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentSt /// Color alignment style. public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextColorAlign(state) ?? Target.GetContentShortTextColorAlign(style, state); + return inherit?.GetContentShortTextColorAlign(state) ?? Target!.GetContentShortTextColorAlign(style, state); } /// @@ -506,9 +506,9 @@ public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteConte /// Angle used for color drawing. public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextColorAngle(state) ?? Target.GetContentShortTextColorAngle(style, state); + return inherit?.GetContentShortTextColorAngle(state) ?? Target!.GetContentShortTextColorAngle(style, state); } /// @@ -519,9 +519,9 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P /// Image instance. public override Image? GetContentShortTextImage(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextImage(state) ?? Target.GetContentShortTextImage(style, state); + return inherit?.GetContentShortTextImage(state) ?? Target!.GetContentShortTextImage(style, state); } /// @@ -532,9 +532,9 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P /// Image style value. public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextImageStyle(state) ?? Target.GetContentShortTextImageStyle(style, state); + return inherit?.GetContentShortTextImageStyle(state) ?? Target!.GetContentShortTextImageStyle(style, state); } /// @@ -545,9 +545,9 @@ public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentSt /// Image alignment style. public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentShortTextImageAlign(state) ?? Target.GetContentShortTextImageAlign(style, state); + return inherit?.GetContentShortTextImageAlign(state) ?? Target!.GetContentShortTextImageAlign(style, state); } /// @@ -558,9 +558,9 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Font value. public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextFont(state) ?? Target.GetContentLongTextFont(style, state); + return inherit?.GetContentLongTextFont(state) ?? Target!.GetContentLongTextFont(style, state) ?? throw new NullReferenceException("The result of GetContentLongTextFont() cannot be null."); } /// @@ -571,9 +571,9 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// PaletteTextHint value. public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextHint(state) ?? Target.GetContentLongTextHint(style, state); + return inherit?.GetContentLongTextHint(state) ?? Target!.GetContentLongTextHint(style, state); } /// @@ -584,9 +584,9 @@ public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style /// InheritBool value. public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextMultiLine(state) ?? Target.GetContentLongTextMultiLine(style, state); + return inherit?.GetContentLongTextMultiLine(state) ?? Target!.GetContentLongTextMultiLine(style, state); } /// @@ -597,9 +597,9 @@ public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle styl /// PaletteTextTrim value. public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextTrim(state) ?? Target.GetContentLongTextTrim(style, state); + return inherit?.GetContentLongTextTrim(state) ?? Target!.GetContentLongTextTrim(style, state); } /// @@ -610,9 +610,9 @@ public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style /// PaletteTextPrefix value. public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextPrefix(state) ?? Target.GetContentLongTextPrefix(style, state); + return inherit?.GetContentLongTextPrefix(state) ?? Target!.GetContentLongTextPrefix(style, state); } /// @@ -623,9 +623,9 @@ public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentS /// RelativeAlignment value. public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextH(state) ?? Target.GetContentLongTextH(style, state); + return inherit?.GetContentLongTextH(state) ?? Target!.GetContentLongTextH(style, state); } /// @@ -636,9 +636,9 @@ public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle sty /// RelativeAlignment value. public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextV(state) ?? Target.GetContentLongTextV(style, state); + return inherit?.GetContentLongTextV(state) ?? Target!.GetContentLongTextV(style, state); } /// @@ -649,9 +649,9 @@ public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle sty /// RelativeAlignment value. public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextMultiLineH(state) ?? Target.GetContentLongTextMultiLineH(style, state); + return inherit?.GetContentLongTextMultiLineH(state) ?? Target!.GetContentLongTextMultiLineH(style, state); } /// @@ -662,9 +662,9 @@ public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContent /// Color value. public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextColor1(state) ?? Target.GetContentLongTextColor1(style, state); + return inherit?.GetContentLongTextColor1(state) ?? Target!.GetContentLongTextColor1(style, state); } /// @@ -675,9 +675,9 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett /// Color value. public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextColor2(state) ?? Target.GetContentLongTextColor2(style, state); + return inherit?.GetContentLongTextColor2(state) ?? Target!.GetContentLongTextColor2(style, state); } /// @@ -688,9 +688,9 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett /// Color drawing style. public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextColorStyle(state) ?? Target.GetContentLongTextColorStyle(style, state); + return inherit?.GetContentLongTextColorStyle(state) ?? Target!.GetContentLongTextColorStyle(style, state); } /// @@ -701,9 +701,9 @@ public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentSty /// Color alignment style. public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextColorAlign(state) ?? Target.GetContentLongTextColorAlign(style, state); + return inherit?.GetContentLongTextColorAlign(state) ?? Target!.GetContentLongTextColorAlign(style, state); } /// @@ -714,9 +714,9 @@ public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteConten /// Image instance. public override Image? GetContentLongTextImage(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextImage(state) ?? Target.GetContentLongTextImage(style, state); + return inherit?.GetContentLongTextImage(state) ?? Target!.GetContentLongTextImage(style, state); } /// @@ -727,9 +727,9 @@ public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteConten /// Image style value. public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextImageStyle(state) ?? Target.GetContentLongTextImageStyle(style, state); + return inherit?.GetContentLongTextImageStyle(state) ?? Target!.GetContentLongTextImageStyle(style, state); } /// @@ -740,9 +740,9 @@ public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentSty /// Image alignment style. public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentLongTextImageAlign(state) ?? Target.GetContentLongTextImageAlign(style, state); + return inherit?.GetContentLongTextImageAlign(state) ?? Target!.GetContentLongTextImageAlign(style, state); } /// @@ -753,9 +753,9 @@ public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteConten /// Padding value. public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentPadding(state) ?? Target.GetContentPadding(style, state); + return inherit?.GetContentPadding(state) ?? Target!.GetContentPadding(style, state); } /// @@ -766,9 +766,9 @@ public override Padding GetContentPadding(PaletteContentStyle style, PaletteStat /// Integer value. public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) { - IPaletteContent inherit = GetContentInherit(state); + IPaletteContent? inherit = GetContentInherit(state); - return inherit?.GetContentAdjacentGap(state) ?? Target.GetContentAdjacentGap(style, state); + return inherit?.GetContentAdjacentGap(state) ?? Target!.GetContentAdjacentGap(style, state); } #endregion @@ -794,7 +794,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } @@ -819,7 +819,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } @@ -844,7 +844,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonGeneralRedirect.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonGeneralRedirect.cs index 37ea20e86..901a8e137 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonGeneralRedirect.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonGeneralRedirect.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -39,7 +37,7 @@ public PaletteRibbonGeneralNavRedirect([DisallowNull] PaletteRedirect redirect, NeedPaint = needPaint; // Store the inherit instances - _inherit = new PaletteRibbonGeneralInheritRedirect(redirect); + _inherit = new PaletteRibbonGeneralInheritRedirect(redirect!); // Set default values _textFont = null; @@ -52,7 +50,7 @@ public PaletteRibbonGeneralNavRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _inherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _inherit.SetRedirector(redirect); #endregion #region IsDefault @@ -60,6 +58,7 @@ public PaletteRibbonGeneralNavRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (TextFont == null) && (TextHint == PaletteTextHint.Inherit); #endregion @@ -194,6 +193,45 @@ public PaletteRibbonGeneralNavRedirect([DisallowNull] PaletteRedirect redirect, #endregion + #region RibbonTabRowBackgroundGradientRaftingDark + + /// + public Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _inherit.GetRibbonTabRowBackgroundGradientRaftingDark(state); + + #endregion + + #region RibbonTabRowBackgroundGradientRaftingLight + + /// + public Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _inherit.GetRibbonTabRowBackgroundGradientRaftingLight(state); + + #endregion + + #region RibbonTabRowBackgroundSolidColor + + /// + public Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => + _inherit.GetRibbonTabRowBackgroundSolidColor(state); + + #endregion + + #region RibbonTabRowGradientRaftingAngle + + /// + public float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => + _inherit.GetRibbonTabRowGradientRaftingAngle(state); + + #endregion + + #region RibbonTabRowGradientColor1 + + /// + public Color GetRibbonTabRowGradientColor1(PaletteState state) => _inherit.GetRibbonTabRowGradientColor1(state); + + #endregion + #region GetRibbonShape /// /// Gets the ribbon shape. diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContent.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContent.cs index 44c1fd3c2..e37d41e84 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContent.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,13 +31,28 @@ public class PaletteRibbonTabContent : Storage /// Source for inheriting palette content. /// Delegate for notifying paint requests. public PaletteRibbonTabContent([DisallowNull] IPaletteRibbonBack paletteBack, - [DisallowNull] IPaletteRibbonText paletteText, + [DisallowNull] IPaletteRibbonText paletteText, [DisallowNull] IPaletteContent paletteContent, NeedPaintHandler needPaint) { - Debug.Assert(paletteBack != null); - Debug.Assert(paletteText != null); - Debug.Assert(paletteContent != null); + Debug.Assert(paletteBack is not null); + Debug.Assert(paletteText is not null); + Debug.Assert(paletteContent is not null); + + if (paletteBack is null) + { + throw new ArgumentNullException(nameof(paletteBack)); + } + + if (paletteText is null) + { + throw new ArgumentNullException(nameof(paletteText)); + } + + if (paletteContent is null) + { + throw new ArgumentNullException(nameof(paletteContent)); + } // Store the provided paint notification delegate NeedPaint = needPaint; @@ -53,6 +68,7 @@ public PaletteRibbonTabContent([DisallowNull] IPaletteRibbonBack paletteBack, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (TabDraw.IsDefault && Content.IsDefault); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentInheritOverride.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentInheritOverride.cs index 7c8ea47ca..4f870d4d2 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentInheritOverride.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentInheritOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -55,12 +55,12 @@ public PaletteRibbonTabContentInheritOverride([DisallowNull] IPaletteRibbonBack Debug.Assert(backupContent != null); // Remember values - _primaryBack = primaryBack; - _primaryText = primaryText; - _primaryContent = primaryContent; - _backupBack = backupBack; - _backupText = backupText; - _backupContent = backupContent; + _primaryBack = primaryBack ?? throw new ArgumentNullException(nameof(primaryBack)); + _primaryText = primaryText ?? throw new ArgumentNullException(nameof(primaryText)); + _primaryContent = primaryContent ?? throw new ArgumentNullException(nameof(primaryContent)); + _backupBack = backupBack ?? throw new ArgumentNullException(nameof(backupBack)); + _backupText = backupText ?? throw new ArgumentNullException(nameof(backupText)); + _backupContent = backupContent ?? throw new ArgumentNullException(nameof(backupContent)); // Default state Apply = false; @@ -443,13 +443,14 @@ public virtual Font GetContentShortTextFont(PaletteState state) { if (Apply) { - Font ret = _primaryContent.GetContentShortTextFont(Override ? OverrideState : state) ?? _backupContent.GetContentShortTextFont(state); + Font ret = _primaryContent.GetContentShortTextFont(Override ? OverrideState : state) ?? _backupContent.GetContentShortTextFont(state) + ?? throw new NullReferenceException("The result of GetContentShortTextFont() cannot be null."); return ret; } else { - return _backupContent.GetContentShortTextFont(state); + return _backupContent.GetContentShortTextFont(state) ?? throw new NullReferenceException("The result of GetContentShortTextFont() cannot be null."); } } @@ -462,14 +463,14 @@ public virtual Font GetContentShortTextNewFont(PaletteState state) { if (Apply) { - Font ret = _primaryContent.GetContentShortTextNewFont(Override ? OverrideState : state) ?? - _backupContent.GetContentShortTextNewFont(state); + Font ret = _primaryContent.GetContentShortTextNewFont(Override ? OverrideState : state) ?? _backupContent.GetContentShortTextNewFont(state) + ?? throw new NullReferenceException("The result of GetContentShortTextNewFont() cannot be null."); return ret; } else { - return _backupContent.GetContentShortTextNewFont(state); + return _backupContent.GetContentShortTextNewFont(state) ?? throw new NullReferenceException("The result of GetContentShortTextNewFont() cannot be null."); } } @@ -770,7 +771,7 @@ public virtual float GetContentShortTextColorAngle(PaletteState state) { if (Apply) { - Image ret = _primaryContent.GetContentShortTextImage(Override ? OverrideState : state) ?? _backupContent.GetContentShortTextImage(state); + Image? ret = _primaryContent.GetContentShortTextImage(Override ? OverrideState : state) ?? _backupContent.GetContentShortTextImage(state); return ret; } @@ -837,13 +838,15 @@ public virtual Font GetContentLongTextFont(PaletteState state) { if (Apply) { - Font ret = _primaryContent.GetContentLongTextFont(Override ? OverrideState : state) ?? _backupContent.GetContentLongTextFont(state); + Font ret = _primaryContent.GetContentLongTextFont(Override ? OverrideState : state) ?? _backupContent.GetContentLongTextFont(state) + ?? throw new NullReferenceException("The result of GetContentLongTextFont() cannot be null."); return ret; } else { - return _backupContent.GetContentLongTextFont(state); + return _backupContent.GetContentLongTextFont(state) + ?? throw new NullReferenceException("The result of GetContentLongTextFont() cannot be null."); } } @@ -856,13 +859,15 @@ public virtual Font GetContentLongTextNewFont(PaletteState state) { if (Apply) { - Font ret = _primaryContent.GetContentLongTextNewFont(Override ? OverrideState : state) ?? _backupContent.GetContentLongTextNewFont(state); + Font ret = _primaryContent.GetContentLongTextNewFont(Override ? OverrideState : state) ?? _backupContent.GetContentLongTextNewFont(state) + ?? throw new NullReferenceException("The result of GetContentLongTextNewFont() cannot be null."); return ret; } else { - return _backupContent.GetContentLongTextNewFont(state); + return _backupContent.GetContentLongTextNewFont(state) ?? throw new NullReferenceException("The result of GetContentLongTextNewFont() cannot be null."); + } } @@ -1163,7 +1168,7 @@ public virtual float GetContentLongTextColorAngle(PaletteState state) { if (Apply) { - Image ret = _primaryContent.GetContentLongTextImage(Override ? OverrideState : state) ?? _backupContent.GetContentLongTextImage(state); + Image? ret = _primaryContent.GetContentLongTextImage(Override ? OverrideState : state) ?? _backupContent.GetContentLongTextImage(state); return ret; } diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentRedirect.cs b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentRedirect.cs index 6cc0cb1a7..c9db2e269 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentRedirect.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/PaletteRibbonTabContentRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,8 +32,12 @@ public class PaletteRibbonTabContentRedirect : Storage public PaletteRibbonTabContentRedirect([DisallowNull] PaletteRedirect redirect, NeedPaintHandler needPaint) { - Debug.Assert(redirect != null); + Debug.Assert(redirect is not null); + if (redirect is null) + { + throw new ArgumentNullException(nameof(redirect)); + } // Store the provided paint notification delegate NeedPaint = needPaint; @@ -52,7 +56,7 @@ public PaletteRibbonTabContentRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { _drawRedirect.SetRedirector(redirect); _contentInherit.SetRedirector(redirect); @@ -64,6 +68,7 @@ public void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (TabDraw.IsDefault && Content.IsDefault); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/Palette/RibbonTabToContent.cs b/Source/Krypton Components/Krypton.Navigator/Palette/RibbonTabToContent.cs index ce80d5901..7b6199fd8 100644 --- a/Source/Krypton Components/Krypton.Navigator/Palette/RibbonTabToContent.cs +++ b/Source/Krypton Components/Krypton.Navigator/Palette/RibbonTabToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,9 +34,9 @@ public RibbonTabToContent([DisallowNull] IPaletteRibbonGeneral ribbonGeneral, Debug.Assert(ribbonTabText != null); Debug.Assert(content != null); - _ribbonGeneral = ribbonGeneral; - PaletteRibbonText = ribbonTabText; - PaletteContent = content; + _ribbonGeneral = ribbonGeneral ?? throw new ArgumentNullException(nameof(ribbonGeneral)); + PaletteRibbonText = ribbonTabText ?? throw new ArgumentNullException(nameof(ribbonTabText)); + PaletteContent = content ?? throw new ArgumentNullException(nameof(content)); } #endregion @@ -62,49 +62,49 @@ public RibbonTabToContent([DisallowNull] IPaletteRibbonGeneral ribbonGeneral, /// /// Palette value should be applicable to this state. /// InheritBool value. - public InheritBool GetContentDraw(PaletteState state) => PaletteContent.GetContentDraw(state); + public InheritBool GetContentDraw(PaletteState state) => PaletteContent!.GetContentDraw(state); /// /// Gets a value indicating if content should be drawn with focus indication. /// /// Palette value should be applicable to this state. /// InheritBool value. - public InheritBool GetContentDrawFocus(PaletteState state) => PaletteContent.GetContentDrawFocus(state); + public InheritBool GetContentDrawFocus(PaletteState state) => PaletteContent!.GetContentDrawFocus(state); /// /// Gets the horizontal relative alignment of the image. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentImageH(PaletteState state) => PaletteContent.GetContentImageH(state); + public PaletteRelativeAlign GetContentImageH(PaletteState state) => PaletteContent!.GetContentImageH(state); /// /// Gets the vertical relative alignment of the image. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentImageV(PaletteState state) => PaletteContent.GetContentImageV(state); + public PaletteRelativeAlign GetContentImageV(PaletteState state) => PaletteContent!.GetContentImageV(state); /// /// Gets the effect applied to drawing of the image. /// /// Palette value should be applicable to this state. /// PaletteImageEffect value. - public PaletteImageEffect GetContentImageEffect(PaletteState state) => PaletteContent.GetContentImageEffect(state); + public PaletteImageEffect GetContentImageEffect(PaletteState state) => PaletteContent!.GetContentImageEffect(state); /// /// Gets the image color to remap into another color. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentImageColorMap(PaletteState state) => PaletteContent.GetContentImageColorMap(state); + public Color GetContentImageColorMap(PaletteState state) => PaletteContent!.GetContentImageColorMap(state); /// /// Gets the color to use in place of the image map color. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentImageColorTo(PaletteState state) => PaletteContent.GetContentImageColorTo(state); + public Color GetContentImageColorTo(PaletteState state) => PaletteContent!.GetContentImageColorTo(state); /// /// Gets the font for the short text. @@ -132,42 +132,42 @@ public RibbonTabToContent([DisallowNull] IPaletteRibbonGeneral ribbonGeneral, /// /// Palette value should be applicable to this state. /// PaletteTextPrefix value. - public PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteState state) => PaletteContent.GetContentShortTextPrefix(state); + public PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteState state) => PaletteContent!.GetContentShortTextPrefix(state); /// /// Gets the flag indicating if multiline text is allowed for short text. /// /// Palette value should be applicable to this state. /// InheritBool value. - public InheritBool GetContentShortTextMultiLine(PaletteState state) => PaletteContent.GetContentShortTextMultiLine(state); + public InheritBool GetContentShortTextMultiLine(PaletteState state) => PaletteContent!.GetContentShortTextMultiLine(state); /// /// Gets the text trimming to use for short text. /// /// Palette value should be applicable to this state. /// PaletteTextTrim value. - public virtual PaletteTextTrim GetContentShortTextTrim(PaletteState state) => PaletteContent.GetContentShortTextTrim(state); + public virtual PaletteTextTrim GetContentShortTextTrim(PaletteState state) => PaletteContent!.GetContentShortTextTrim(state); /// /// Gets the horizontal relative alignment of the short text. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public virtual PaletteRelativeAlign GetContentShortTextH(PaletteState state) => PaletteContent.GetContentShortTextH(state); + public virtual PaletteRelativeAlign GetContentShortTextH(PaletteState state) => PaletteContent!.GetContentShortTextH(state); /// /// Gets the vertical relative alignment of the short text. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentShortTextV(PaletteState state) => PaletteContent.GetContentShortTextV(state); + public PaletteRelativeAlign GetContentShortTextV(PaletteState state) => PaletteContent!.GetContentShortTextV(state); /// /// Gets the horizontal relative alignment of multiline short text. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteState state) => PaletteContent.GetContentShortTextMultiLineH(state); + public PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteState state) => PaletteContent!.GetContentShortTextMultiLineH(state); /// /// Gets the first back color for the short text. @@ -251,42 +251,42 @@ public RibbonTabToContent([DisallowNull] IPaletteRibbonGeneral ribbonGeneral, /// /// Palette value should be applicable to this state. /// InheritBool value. - public InheritBool GetContentLongTextMultiLine(PaletteState state) => PaletteContent.GetContentLongTextMultiLine(state); + public InheritBool GetContentLongTextMultiLine(PaletteState state) => PaletteContent!.GetContentLongTextMultiLine(state); /// /// Gets the text trimming to use for long text. /// /// Palette value should be applicable to this state. /// PaletteTextTrim value. - public virtual PaletteTextTrim GetContentLongTextTrim(PaletteState state) => PaletteContent.GetContentLongTextTrim(state); + public virtual PaletteTextTrim GetContentLongTextTrim(PaletteState state) => PaletteContent!.GetContentLongTextTrim(state); /// /// Gets the prefix drawing setting for long text. /// /// Palette value should be applicable to this state. /// PaletteTextPrefix value. - public PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteState state) => PaletteContent.GetContentLongTextPrefix(state); + public PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteState state) => PaletteContent!.GetContentLongTextPrefix(state); /// /// Gets the horizontal relative alignment of the long text. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentLongTextH(PaletteState state) => PaletteContent.GetContentLongTextH(state); + public PaletteRelativeAlign GetContentLongTextH(PaletteState state) => PaletteContent!.GetContentLongTextH(state); /// /// Gets the vertical relative alignment of the long text. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentLongTextV(PaletteState state) => PaletteContent.GetContentLongTextV(state); + public PaletteRelativeAlign GetContentLongTextV(PaletteState state) => PaletteContent!.GetContentLongTextV(state); /// /// Gets the horizontal relative alignment of multiline long text. /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteState state) => PaletteContent.GetContentLongTextMultiLineH(state); + public PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteState state) => PaletteContent!.GetContentLongTextMultiLineH(state); /// /// Gets the first back color for the long text. @@ -349,14 +349,14 @@ public RibbonTabToContent([DisallowNull] IPaletteRibbonGeneral ribbonGeneral, /// /// Palette value should be applicable to this state. /// Padding value. - public Padding GetContentPadding(PaletteState state) => PaletteContent.GetContentPadding(state); + public Padding GetContentPadding(PaletteState state) => PaletteContent!.GetContentPadding(state); /// /// Gets the padding between adjacent content items. /// /// Palette value should be applicable to this state. /// Integer value. - public int GetContentAdjacentGap(PaletteState state) => PaletteContent.GetContentAdjacentGap(state); + public int GetContentAdjacentGap(PaletteState state) => PaletteContent!.GetContentAdjacentGap(state); /// /// Gets the style appropriate for this content. diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupInside.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupInside.cs index a5bd4c289..ed36bcd9d 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupInside.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupInside.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ internal class ViewBuilderBarCheckButtonGroupInside : ViewBuilderBarItemBase /// Palette redirector. public override void Construct(KryptonNavigator navigator, ViewManager manager, - PaletteRedirect? redirector) => + PaletteRedirect redirector) => // Let base class perform common operations base.Construct(navigator, manager, redirector); @@ -50,7 +50,7 @@ public override void Destruct() => protected override void CreateCheckItemView() { // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.CheckButtonGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, @@ -91,11 +91,15 @@ protected override void CreateCheckItemView() }; // Create a canvas for containing the selected page and put old root inside it - _drawGroup = new ViewDrawCanvas(Navigator.StateNormal.HeaderGroup.Back, Navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top) + if (Navigator.StateNormal != null) { - _layoutPanelDocker - }; - _newRoot = _drawGroup; + _drawGroup = new ViewDrawCanvas(Navigator.StateNormal.HeaderGroup.Back, + Navigator.StateNormal.HeaderGroup.Border, VisualOrientation.Top) + { + _layoutPanelDocker + }; + } + _newRoot = _drawGroup!; // Must call the base class to perform common actions base.CreateCheckItemView(); @@ -110,10 +114,10 @@ protected override void CreateButtonSpecManager() base.CreateButtonSpecManager(); // Modify the way that button specs are remapped - var barManager = (ButtonSpecNavManagerLayoutBar)_buttonManager; + var barManager = _buttonManager as ButtonSpecNavManagerLayoutBar; // Remap the normal color onto the button text - barManager.RemapTarget = ButtonSpecNavRemap.ButtonSpecRemapTarget.ButtonStandalone; + barManager!.RemapTarget = ButtonSpecNavRemap.ButtonSpecRemapTarget.ButtonStandalone; } #endregion } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOnly.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOnly.cs index 30637c8ba..198eebbe5 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOnly.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOnly.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ internal class ViewBuilderBarCheckButtonGroupOnly : ViewBuilderBarItemBase /// Palette redirector. public override void Construct(KryptonNavigator navigator, ViewManager manager, - PaletteRedirect? redirector) => + PaletteRedirect redirector) => // Let base class perform common operations base.Construct(navigator, manager, redirector); @@ -44,7 +44,7 @@ public override void KeyPressedPageView() if (Navigator.SelectedPage != null) { // Grab the view for the page - INavCheckItem checkItem = _pageLookup[Navigator.SelectedPage]; + INavCheckItem? checkItem = _pageLookup![Navigator.SelectedPage]; // If the item also has the focus if (checkItem.HasFocus) @@ -70,7 +70,7 @@ public override void Destruct() => protected override void CreateCheckItemView() { // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.CheckButtonGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, @@ -130,10 +130,10 @@ protected override void CreateButtonSpecManager() base.CreateButtonSpecManager(); // Modify the way that button specs are remapped - var barManager = (ButtonSpecNavManagerLayoutBar)_buttonManager; + var barManager = _buttonManager as ButtonSpecNavManagerLayoutBar; // Remap the normal color onto the button text - barManager.RemapTarget = ButtonSpecNavRemap.ButtonSpecRemapTarget.ButtonStandalone; + barManager!.RemapTarget = ButtonSpecNavRemap.ButtonSpecRemapTarget.ButtonStandalone; } #endregion } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOutside.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOutside.cs index a2b361e06..b6e9d8ca3 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOutside.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonGroupOutside.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ internal class ViewBuilderBarCheckButtonGroupOutside : ViewBuilderBarItemBase /// Palette redirector. public override void Construct(KryptonNavigator navigator, ViewManager manager, - PaletteRedirect? redirector) => + PaletteRedirect redirector) => // Let base class perform common operations base.Construct(navigator, manager, redirector); @@ -56,7 +56,7 @@ protected override void CreateCheckItemView() }; // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.CheckButtonGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, @@ -113,11 +113,11 @@ protected override void CreateCheckItemView() protected override void DestructCheckItemView() { // Remove the old root from the canvas - _drawPanel.Clear(); + _drawPanel?.Clear(); // Must call the base class to perform common actions base.CreateCheckItemView(); - } + } #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonOnly.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonOnly.cs index 56a31d05c..7cd9adcda 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonOnly.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarCheckButtonOnly.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ internal class ViewBuilderBarCheckButtonOnly : ViewBuilderBarItemBase /// Palette redirector. public override void Construct(KryptonNavigator navigator, ViewManager manager, - PaletteRedirect? redirector) => + PaletteRedirect redirector) => // Let base class perform common operations base.Construct(navigator, manager, redirector); @@ -44,7 +44,7 @@ public override void KeyPressedPageView() if (Navigator.SelectedPage != null) { // Grab the view for the page - INavCheckItem checkItem = _pageLookup[Navigator.SelectedPage]; + INavCheckItem? checkItem = _pageLookup![Navigator.SelectedPage]; // If the item also has the focus if (checkItem.HasFocus) @@ -70,7 +70,7 @@ public override void Destruct() => protected override void CreateCheckItemView() { // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.CheckButtonGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, @@ -119,7 +119,7 @@ protected override void CreateCheckItemView() // Must call the base class to perform common actions base.CreateCheckItemView(); - } + } #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarItemBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarItemBase.cs index 4ba9ee8ad..47124f393 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarItemBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarItemBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,14 +43,14 @@ internal abstract class ViewBuilderBarItemBase : ViewBuilderItemBase /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case @"BarOrientation": UpdateOrientation(); UpdateItemOrientation(); - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); Navigator.PerformNeedPaint(true); break; case @"BarFirstItemInset": diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabBase.cs index 7ad31a3b8..5cc614b5a 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ protected override INavCheckItem CreateCheckItem(KryptonPage? page, VisualOrientation orientation) { // Create a check button view element - var ribbonTab = new ViewDrawNavRibbonTab(Navigator, page); + var ribbonTab = new ViewDrawNavRibbonTab(Navigator, page!); // Convert the button orientation to the appropriate visual orientations VisualOrientation orientBackBorder = ConvertButtonBorderBackOrientation(); @@ -40,7 +40,7 @@ protected override INavCheckItem CreateCheckItem(KryptonPage? page, } /// - /// Gets the visual orientation of the check buttton. + /// Gets the visual orientation of the check button. /// /// Visual orientation. protected override VisualOrientation ConvertButtonBorderBackOrientation() @@ -49,8 +49,10 @@ protected override VisualOrientation ConvertButtonBorderBackOrientation() { case VisualOrientation.Top: return VisualOrientation.Top; + case VisualOrientation.Bottom: return VisualOrientation.Bottom; + case VisualOrientation.Left: if (CommonHelper.GetRightToLeftLayout(Navigator) && (Navigator.RightToLeft == RightToLeft.Yes)) @@ -61,6 +63,7 @@ protected override VisualOrientation ConvertButtonBorderBackOrientation() { return VisualOrientation.Left; } + case VisualOrientation.Right: if (CommonHelper.GetRightToLeftLayout(Navigator) && (Navigator.RightToLeft == RightToLeft.Yes)) @@ -71,9 +74,11 @@ protected override VisualOrientation ConvertButtonBorderBackOrientation() { return VisualOrientation.Right; } + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Bar.BarOrientation.ToString()); return VisualOrientation.Top; } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabGroup.cs index 1fe42e47a..00810e4f2 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,7 +44,7 @@ protected override void CreateCheckItemView() }; // Create the view element that lays out the check buttons - var layoutBar = new ViewLayoutBarForTabs(Navigator.StateCommon.Bar, + var layoutBar = new ViewLayoutBarForTabs(Navigator.StateCommon!.Bar, PaletteMetricInt.RibbonTabGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, Navigator.Bar.BarMultiline, Navigator.Bar.ItemMinimumSize, Navigator.Bar.ItemMaximumSize, Navigator.Bar.BarMinimumHeight, Navigator.Bar.TabBorderStyle, true); diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabOnly.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabOnly.cs index d51190ca9..feb596fd2 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabOnly.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarRibbonTabOnly.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,7 @@ public override void KeyPressedPageView() if (Navigator.SelectedPage != null) { // Grab the view for the page - INavCheckItem checkItem = _pageLookup[Navigator.SelectedPage]; + INavCheckItem checkItem = _pageLookup![Navigator.SelectedPage]; // If the item also has the focus if (checkItem.HasFocus) @@ -51,7 +51,7 @@ public override void KeyPressedPageView() protected override void CreateCheckItemView() { // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.RibbonTabGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabBase.cs index 7830a2f42..5ed9773c8 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -70,8 +70,10 @@ protected override VisualOrientation ConvertButtonBorderBackOrientation() { case VisualOrientation.Top: return VisualOrientation.Top; + case VisualOrientation.Bottom: return VisualOrientation.Bottom; + case VisualOrientation.Left: if (CommonHelper.GetRightToLeftLayout(Navigator) && (Navigator.RightToLeft == RightToLeft.Yes)) @@ -82,6 +84,7 @@ protected override VisualOrientation ConvertButtonBorderBackOrientation() { return VisualOrientation.Left; } + case VisualOrientation.Right: if (CommonHelper.GetRightToLeftLayout(Navigator) && (Navigator.RightToLeft == RightToLeft.Yes)) @@ -92,9 +95,11 @@ protected override VisualOrientation ConvertButtonBorderBackOrientation() { return VisualOrientation.Right; } + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Bar.BarOrientation.ToString()); return VisualOrientation.Top; } } @@ -110,7 +115,7 @@ protected override VisualOrientation ConvertButtonBorderBackOrientation() /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -134,7 +139,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan /// protected void UpdateTabStyle() { - Navigator.StateCommon.Tab.SetStyles(Navigator.Bar.TabStyle); + Navigator.StateCommon!.Tab.SetStyles(Navigator.Bar.TabStyle); Navigator.OverrideFocus.Tab.SetStyles(Navigator.Bar.TabStyle); // Update each individual tab with the new style for remapping page level button specs @@ -142,8 +147,8 @@ protected void UpdateTabStyle() { foreach (var pair in PageLookup) { - var tabHeader = (ViewDrawNavCheckButtonTab)pair.Value; - tabHeader.ButtonSpecManager?.SetRemapTarget(Navigator.Bar.TabStyle); + var tabHeader = pair.Value as ViewDrawNavCheckButtonTab; + tabHeader!.ButtonSpecManager!.SetRemapTarget(Navigator.Bar.TabStyle); } } } @@ -156,7 +161,7 @@ private void UpdateTabBorderStyle() TabBorderStyle tabBorderStyle = Navigator.Bar.TabBorderStyle; // Update the border style of each check button - foreach (ViewDrawNavCheckButtonTab tab in _pageLookup.Values) + foreach (ViewDrawNavCheckButtonTab tab in _pageLookup!.Values) { tab.TabBorderStyle = tabBorderStyle; } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabGroup.cs index c70ba13c3..3a6fa4fb9 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -50,7 +50,7 @@ protected override void CreateCheckItemView() _layoutBar = layoutBar; // Create the scroll spacer that restricts display - _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon.Bar, + _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon!.Bar, PaletteMetricPadding.BarPaddingTabs, PaletteMetricInt.CheckButtonGap, Navigator.Bar.BarOrientation, diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabOnly.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabOnly.cs index 0c3dcad28..4b41e97b3 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabOnly.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBarTabOnly.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,7 @@ public override void KeyPressedPageView() if (Navigator.SelectedPage != null) { // Grab the view for the page - INavCheckItem checkItem = _pageLookup[Navigator.SelectedPage]; + INavCheckItem checkItem = _pageLookup![Navigator.SelectedPage]; // If the item also has the focus if (checkItem.HasFocus) @@ -61,7 +61,7 @@ protected override void CreateCheckItemView() true); // Create the scroll spacer that restricts display - _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon.Bar, + _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon!.Bar, PaletteMetricPadding.BarPaddingTabs, PaletteMetricInt.CheckButtonGap, Navigator.Bar.BarOrientation, diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBase.cs index fe99ba579..d2ad25fe2 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -49,7 +49,7 @@ public KryptonNavigator Navigator /// /// Gets access to the view manager instance. /// - public ViewManager ViewManager + public ViewManager? ViewManager { [DebuggerStepThrough] get; @@ -79,19 +79,19 @@ public PaletteRedirect Redirector /// Reference to navigator instance. /// Reference to current manager. /// Palette redirector. - public virtual void Construct([DisallowNull] KryptonNavigator navigator, - [DisallowNull] ViewManager manager, - [DisallowNull] PaletteRedirect redirector) + public virtual void Construct([DisallowNull] KryptonNavigator navigator, + [DisallowNull] ViewManager manager, + [DisallowNull] PaletteRedirect redirector) { - Debug.Assert(navigator != null, $"{nameof(navigator)} != null"); - Debug.Assert(manager != null); - Debug.Assert(redirector != null); + Debug.Assert(navigator is not null, $"{nameof(navigator)} != null"); + Debug.Assert(manager is not null); + Debug.Assert(redirector is not null); Debug.Assert(_constructed == false); // Save provided references - Navigator = navigator; - ViewManager = manager; - Redirector = redirector; + Navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); + ViewManager = manager ?? throw new ArgumentNullException(nameof(manager)); + Redirector = redirector ?? throw new ArgumentNullException(nameof(redirector)); _constructed = true; // Hook into the navigator events @@ -104,10 +104,10 @@ public virtual void Construct([DisallowNull] KryptonNavigator navigator, public virtual void Destruct() { Debug.Assert(_constructed); - Debug.Assert(Navigator != null, $"{nameof(Navigator)} != null"); + Debug.Assert(Navigator is not null, $"{nameof(Navigator)} != null"); // Unhook from the navigator events - Navigator.ViewBuilderPropertyChanged -= OnViewBuilderPropertyChanged; + Navigator!.ViewBuilderPropertyChanged -= OnViewBuilderPropertyChanged; // No longer constructed _constructed = false; @@ -467,7 +467,7 @@ public virtual bool SelectNextPage(bool wrap) => /// Wrap around end of collection to the start. /// Associated with a Ctrl+Tab action. /// True if new page selected; otherwise false. - public virtual bool SelectNextPage(KryptonPage? page, + public virtual bool SelectNextPage(KryptonPage? page, bool wrap, bool ctrlTab) { @@ -566,7 +566,7 @@ public virtual bool SelectPreviousPage(bool wrap) => /// Wrap around end of collection to the start. /// Associated with a Ctrl+Tab action. /// True if new page selected; otherwise false. - public virtual bool SelectPreviousPage(KryptonPage? page, + public virtual bool SelectPreviousPage(KryptonPage? page, bool wrap, bool ctrlTab) { @@ -697,7 +697,7 @@ protected void OnNeedPagePaint(object sender, NeedLayoutEventArgs e) => /// /// Source of the event. /// Property changed details. - protected virtual void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { if (Navigator.StateCommon == null) { @@ -725,11 +725,11 @@ protected virtual void OnViewBuilderPropertyChanged(object sender, PropertyChang } Debug.Assert(Navigator.StateCommon.HeaderGroup != null, "Navigator.StateCommon.HeaderGroup != null"); - Navigator.StateCommon.HeaderGroup.BackStyle = Navigator.Group.GroupBackStyle; + Navigator.StateCommon!.HeaderGroup!.BackStyle = Navigator.Group.GroupBackStyle; Navigator.PerformNeedPaint(true); break; case @"GroupBorderStyle": - Navigator.StateCommon.HeaderGroup.BorderStyle = Navigator.Group.GroupBorderStyle; + Navigator.StateCommon!.HeaderGroup.BorderStyle = Navigator.Group.GroupBorderStyle; Navigator.PerformNeedPaint(true); break; } @@ -775,10 +775,10 @@ public static ViewBuilderBase CreateViewBuilder(NavigatorMode mode) case NavigatorMode.HeaderBarCheckButtonHeaderGroup: return new ViewBuilderHeaderBarCheckButtonHeaderGroup(); case NavigatorMode.OutlookFull: - return new ViewBuilderOutlookFull(); - case NavigatorMode.OutlookMini: - return new ViewBuilderOutlookMini(); - case NavigatorMode.HeaderGroup: + return new ViewBuilderOutlookFull(); + case NavigatorMode.OutlookMini: + return new ViewBuilderOutlookMini(); + case NavigatorMode.HeaderGroup: return new ViewBuilderHeaderGroup(); case NavigatorMode.Group: return new ViewBuilderGroup(); @@ -787,7 +787,7 @@ public static ViewBuilderBase CreateViewBuilder(NavigatorMode mode) default: // Should never happen! Debug.Assert(false); - throw new ArgumentOutOfRangeException(nameof(mode)); + throw DebugTools.NotImplemented(mode.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderGroup.cs index a88a190cc..d118993e6 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,15 +29,15 @@ internal class ViewBuilderGroup : ViewBuilderBase /// Reference to navigator instance. /// Reference to current manager. /// Palette redirector. - public override void Construct(KryptonNavigator navigator, + public override void Construct(KryptonNavigator navigator, [DisallowNull] ViewManager manager, - [DisallowNull] PaletteRedirect redirector) + PaletteRedirect redirector) { // Let base class perform common operations base.Construct(navigator, manager, redirector); // Get the current root element - _oldRoot = ViewManager.Root; + _oldRoot = ViewManager!.Root; // Create a canvas for the border and background using current enabled state _drawCanvas = new ViewDrawCanvas(Navigator.StateNormal.HeaderGroup.Back, @@ -45,7 +45,7 @@ public override void Construct(KryptonNavigator navigator, VisualOrientation.Top) { - // Put the exising root into the canvas + // Put the existing root into the canvas _oldRoot }; @@ -145,12 +145,12 @@ public override void UpdateStatePalettes() // Use states defined in the selected page if (Navigator.SelectedPage.Enabled) { - back = Navigator.SelectedPage.StateNormal.HeaderGroup.Back; + back = Navigator.SelectedPage!.StateNormal.HeaderGroup.Back; border = Navigator.SelectedPage.StateNormal.HeaderGroup.Border; } else { - back = Navigator.SelectedPage.StateDisabled.HeaderGroup.Back; + back = Navigator.SelectedPage!.StateDisabled.HeaderGroup.Back; border = Navigator.SelectedPage.StateDisabled.HeaderGroup.Border; // If page is disabled then all of view should look disabled @@ -188,7 +188,7 @@ public override void Destruct() _drawCanvas.Dispose(); // Put the old root back again - ViewManager.Root = _oldRoot; + ViewManager!.Root = _oldRoot; // Let base class perform common operations base.Destruct(); @@ -196,7 +196,7 @@ public override void Destruct() #endregion #region Implementation - private void OnEnabledChanged(object sender, EventArgs e) => UpdateStatePalettes(); + private void OnEnabledChanged(object? sender, EventArgs e) => UpdateStatePalettes(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonBase.cs index ae1c1ac96..6c7803917 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,7 @@ internal abstract class ViewBuilderHeaderBarCheckButtonBase : ViewBuilderItemBas /// Palette redirector. public override void Construct(KryptonNavigator navigator, ViewManager manager, - PaletteRedirect? redirector) + PaletteRedirect redirector) { // Let base class perform common operations base.Construct(navigator, manager, redirector); @@ -59,7 +59,7 @@ protected override void CreateButtonSpecManager() => // Create button specification collection manager _buttonManager = new ButtonSpecNavManagerLayoutHeaderBar(Navigator, Redirector, Navigator.Button.ButtonSpecs, Navigator.FixedSpecs, new[] { _layoutBarDocker }, - new IPaletteMetric[] { Navigator.StateCommon.Bar }, + new IPaletteMetric[] { Navigator.StateCommon!.Bar }, new[] { PaletteMetricInt.BarButtonEdgeInside }, new[] { PaletteMetricInt.BarButtonEdgeOutside }, new[] { PaletteMetricPadding.BarButtonPadding }, @@ -78,7 +78,7 @@ protected override void CreateButtonSpecManager() => /// protected override void PostCreate() { - SetHeaderStyle(_viewHeadingBar, Navigator.StateCommon.HeaderGroup.HeaderBar, Navigator.Header.HeaderStyleBar); + SetHeaderStyle(_viewHeadingBar, Navigator.StateCommon!.HeaderGroup.HeaderBar, Navigator.Header.HeaderStyleBar); _viewHeadingBar.Visible = Navigator.Header.HeaderVisibleBar; base.PostCreate(); } @@ -88,7 +88,7 @@ protected override void PostCreate() /// public override void UpdateStatePalettes() { - PaletteNavigator? paletteState; + PaletteNavigator paletteState; // If whole navigator is disabled then all views are disabled var enabled = Navigator.Enabled; @@ -132,12 +132,12 @@ public override void UpdateStatePalettes() /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case @"HeaderStyleBar": - SetHeaderStyle(_viewHeadingBar, Navigator.StateCommon.HeaderGroup.HeaderBar, Navigator.Header.HeaderStyleBar); + SetHeaderStyle(_viewHeadingBar, Navigator.StateCommon!.HeaderGroup.HeaderBar, Navigator.Header.HeaderStyleBar); UpdateStatePalettes(); Navigator.PerformNeedPaint(true); break; @@ -148,7 +148,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan case @"HeaderPositionBar": UpdateOrientation(); UpdateItemOrientation(); - _buttonManager.RecreateButtons(); + _buttonManager!.RecreateButtons(); Navigator.PerformNeedPaint(true); break; default: @@ -239,15 +239,15 @@ private IPaletteContent GetRemappingPaletteContent() => Navigator.Enabled private PaletteState GetRemappingPaletteState() => Navigator.Enabled ? PaletteState.Normal : PaletteState.Disabled; - private void OnEnabledChanged(object sender, EventArgs e) + private void OnEnabledChanged(object? sender, EventArgs e) { if (_buttonManager != null) { // Cast button manager to correct type - var headerBarBM = (ButtonSpecNavManagerLayoutHeaderBar)_buttonManager; + var headerBarBM = _buttonManager as ButtonSpecNavManagerLayoutHeaderBar; // Update with newly calculated values - headerBarBM.UpdateRemapping(GetRemappingPaletteContent(), + headerBarBM?.UpdateRemapping(GetRemappingPaletteContent(), GetRemappingPaletteState()); } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonGroup.cs index 153145ce2..686d9b7e6 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,7 @@ internal class ViewBuilderHeaderBarCheckButtonGroup : ViewBuilderHeaderBarCheckB protected override void CreateCheckItemView() { // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.CheckButtonGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonHeaderGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonHeaderGroup.cs index 9d0007ead..3062931ad 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,10 +33,10 @@ internal class ViewBuilderHeaderBarCheckButtonHeaderGroup : ViewBuilderHeaderBar /// /// Element to search against. /// Reference to ButtonSpec; otherwise null. - public override ButtonSpec? ButtonSpecFromView(ViewBase element) + public override ButtonSpec ButtonSpecFromView(ViewBase element) { // Always check base class first - ButtonSpec bs = base.ButtonSpecFromView(element) ?? _headerGroup.ButtonSpecFromView(element); + ButtonSpec bs = base.ButtonSpecFromView(element) ?? _headerGroup!.ButtonSpecFromView(element)!; // Call onto the contained header group implementation @@ -51,7 +51,7 @@ internal class ViewBuilderHeaderBarCheckButtonHeaderGroup : ViewBuilderHeaderBar protected override void CreateCheckItemView() { // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.CheckButtonGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, @@ -99,7 +99,7 @@ protected override void CreateCheckItemView() _viewGroup.Insert(0, _viewHeadingBar); _viewGroup.SetDock(_viewHeadingBar, ViewDockStyle.Top); - // Define the new root for the view hieararchy + // Define the new root for the view hierarchy _newRoot = _viewGroup; // Must call the base class to perform common actions @@ -112,7 +112,7 @@ protected override void CreateCheckItemView() protected override void PostCreate() { // Ask the header group to finish the create phase - _headerGroup.PostCreate(); + _headerGroup!.PostCreate(); // Let base class perform standard actions base.PostCreate(); @@ -124,7 +124,7 @@ protected override void PostCreate() protected override void DestructCheckItemView() { // Must remember to get the header group to destruct itself - _headerGroup.Destruct(); + _headerGroup!.Destruct(); // Must call the base class to perform common actions base.DestructCheckItemView(); @@ -145,10 +145,10 @@ protected override void CreateButtonSpecManager() /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { // Let the header group process the property - _headerGroup.ViewBuilderPropertyChanged(e); + _headerGroup!.ViewBuilderPropertyChanged(e); // Let the base process it as well base.OnViewBuilderPropertyChanged(sender, e); @@ -202,7 +202,7 @@ public override void SelectedPageChanged() base.SelectedPageChanged(); // Ask the header group to update the - _headerGroup.UpdateButtons(); + _headerGroup!.UpdateButtons(); } /// @@ -211,7 +211,7 @@ public override void SelectedPageChanged() public override void PageCollectionChanged() { UpdateStatePalettes(); - _headerGroup.UpdateButtons(); + _headerGroup!.UpdateButtons(); // Let base class do standard work base.PageCollectionChanged(); diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonOnly.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonOnly.cs index 6509c6edf..0d32e46a4 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonOnly.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarCheckButtonOnly.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,7 +36,7 @@ public override void KeyPressedPageView() if (Navigator.SelectedPage != null) { // Grab the view for the page - INavCheckItem checkItem = _pageLookup[Navigator.SelectedPage]; + INavCheckItem checkItem = _pageLookup![Navigator.SelectedPage]; // If the item also has the focus if (checkItem.HasFocus) @@ -55,7 +55,7 @@ public override void KeyPressedPageView() protected override void CreateCheckItemView() { // Create the view element that lays out the check buttons - _layoutBar = new ViewLayoutBar(Navigator.StateCommon.Bar, + _layoutBar = new ViewLayoutBar(Navigator.StateCommon!.Bar, PaletteMetricInt.CheckButtonGap, Navigator.Bar.ItemSizing, Navigator.Bar.ItemAlignment, @@ -121,7 +121,7 @@ protected override void DestructCheckItemView() // Must call the base class to perform common actions base.CreateCheckItemView(); - } + } /// /// Update the bar orientation. diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarTabGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarTabGroup.cs index cb7998645..9550828e4 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarTabGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderBarTabGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ internal class ViewBuilderHeaderBarTabGroup : ViewBuilderBarTabBase /// Palette redirector. public override void Construct(KryptonNavigator navigator, ViewManager manager, - PaletteRedirect? redirector) + PaletteRedirect redirector) { // Let base class perform common operations base.Construct(navigator, manager, redirector); @@ -56,7 +56,7 @@ public override void Construct(KryptonNavigator navigator, /// Reference to ButtonSpec; otherwise null. public override ButtonSpec? ButtonSpecFromView(ViewBase element) => // Ask the button manager for the button spec for this element - _buttonManager.ButtonSpecFromView(element); + _buttonManager!.ButtonSpecFromView(element); /// /// Process a change in the selected page @@ -116,7 +116,7 @@ public override void PageEnabledStateChanged(KryptonPage? page) public override Point GetContextShowPoint() { // Get the display rectangle of the context button - Rectangle rect = _buttonManager.GetButtonRectangle(Navigator.Button.ContextButton); + Rectangle rect = _buttonManager!.GetButtonRectangle(Navigator.Button.ContextButton); // We want the context menu to show just below the button var pt = new Point(rect.Left, rect.Bottom + 3); @@ -198,7 +198,7 @@ public override void PerformPreviousAction(DirectionButtonAction action, Krypton /// public void UpdateButtons() => // Ensure buttons are recreated to reflect different page - _buttonManager.RecreateButtons(); + _buttonManager!.RecreateButtons(); #endregion #region Protected @@ -207,9 +207,9 @@ public void UpdateButtons() => /// protected override void PostCreate() { - // Let base class perform standard actions + // Let base class perform standard actions base.PostCreate(); - + UpdateStatePalettes(); UpdateHeaders(); UpdateButtons(); @@ -263,7 +263,7 @@ protected override void CreateCheckItemView() _layoutBar = layoutBar; // Create the scroll spacer that restricts display - _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon.Bar, + _layoutBarViewport = new ViewLayoutViewport(Navigator.StateCommon!.Bar, PaletteMetricPadding.BarPaddingTabs, PaletteMetricInt.CheckButtonGap, Navigator.Bar.BarOrientation, @@ -342,20 +342,20 @@ public override void UpdateStatePalettes() if (Navigator.SelectedPage == null) { // Then use the states defined in the navigator itself - SetPalettes(Navigator.Enabled + SetPalettes((Navigator.Enabled ? Navigator.StateNormal.HeaderGroup - : Navigator.StateDisabled.HeaderGroup); + : Navigator.StateDisabled.HeaderGroup)); } else { // Use states defined in the selected page if (Navigator.SelectedPage.Enabled) { - SetPalettes(Navigator.SelectedPage.StateNormal.HeaderGroup); + SetPalettes(Navigator.SelectedPage!.StateNormal.HeaderGroup); } else { - SetPalettes(Navigator.SelectedPage.StateDisabled.HeaderGroup); + SetPalettes(Navigator.SelectedPage!.StateDisabled.HeaderGroup); // If page is disabled then all of view should look disabled enabled = false; @@ -379,7 +379,7 @@ protected override void UpdateOrientation() base.UpdateOrientation(); // The view group should always include the bar orientation edge when drawing - _drawGroup.IncludeBorderEdge = Navigator.Bar.BarOrientation; + _drawGroup!.IncludeBorderEdge = Navigator.Bar.BarOrientation; switch (Navigator.Bar.BarOrientation) { @@ -410,28 +410,28 @@ protected override void UpdateOrientation() /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case @"HeaderStylePrimary": - SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); + SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon!.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); UpdateStatePalettes(); Navigator.PerformNeedPaint(true); break; case @"HeaderStyleSecondary": - SetHeaderStyle(_viewHeadingSecondary, Navigator.StateCommon.HeaderGroup.HeaderSecondary, Navigator.Header.HeaderStyleSecondary); + SetHeaderStyle(_viewHeadingSecondary, Navigator.StateCommon!.HeaderGroup.HeaderSecondary, Navigator.Header.HeaderStyleSecondary); UpdateStatePalettes(); Navigator.PerformNeedPaint(true); break; case @"HeaderPositionPrimary": SetHeaderPosition(_viewHeadingPrimary, _viewContentPrimary, Navigator.Header.HeaderPositionPrimary); - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); Navigator.PerformNeedPaint(true); break; case @"HeaderPositionSecondary": SetHeaderPosition(_viewHeadingSecondary, _viewContentSecondary, Navigator.Header.HeaderPositionSecondary); - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); Navigator.PerformNeedPaint(true); break; case @"HeaderVisiblePrimary": @@ -449,12 +449,12 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan case @"ContextButtonDisplay": case @"CloseButtonDisplay": case nameof(ButtonDisplayLogic): - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); break; } base.OnViewBuilderPropertyChanged(sender, e); - } + } #endregion #region Implementation @@ -480,7 +480,7 @@ protected override void CreateButtonSpecManager() => // Create button specification collection manager _buttonManager = new ButtonSpecManagerDraw(Navigator, Redirector, Navigator.Button.ButtonSpecs, Navigator.FixedSpecs, new[] { _viewHeadingPrimary, _viewHeadingSecondary }, - new IPaletteMetric[] { Navigator.StateCommon.HeaderGroup.HeaderPrimary, Navigator.StateCommon.HeaderGroup.HeaderSecondary }, + new IPaletteMetric[] { Navigator.StateCommon!.HeaderGroup.HeaderPrimary, Navigator.StateCommon.HeaderGroup.HeaderSecondary }, new[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary, PaletteMetricInt.HeaderButtonEdgeInsetSecondary }, new[] { PaletteMetricPadding.HeaderButtonPaddingPrimary, PaletteMetricPadding.HeaderButtonPaddingSecondary }, Navigator.CreateToolStripRenderer, @@ -493,7 +493,7 @@ protected override void CreateButtonSpecManager() => private void UpdateHeaders() { - SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); + SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon!.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); SetHeaderStyle(_viewHeadingSecondary, Navigator.StateCommon.HeaderGroup.HeaderSecondary, Navigator.Header.HeaderStyleSecondary); SetHeaderPosition(_viewHeadingPrimary, _viewContentPrimary, Navigator.Header.HeaderPositionPrimary); SetHeaderPosition(_viewHeadingSecondary, _viewContentSecondary, Navigator.Header.HeaderPositionSecondary); @@ -508,53 +508,55 @@ private void SetHeaderStyle(ViewDrawDocker drawDocker, switch (style) { case HeaderStyle.Primary: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetPrimary, PaletteMetricPadding.HeaderButtonPaddingPrimary); break; + case HeaderStyle.Secondary: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetSecondary, PaletteMetricPadding.HeaderButtonPaddingSecondary); break; + case HeaderStyle.DockActive: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetDockActive, PaletteMetricPadding.HeaderButtonPaddingDockActive); break; + case HeaderStyle.DockInactive: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetDockInactive, PaletteMetricPadding.HeaderButtonPaddingDockInactive); break; + case HeaderStyle.Form: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetForm, PaletteMetricPadding.HeaderButtonPaddingForm); break; + case HeaderStyle.Calendar: - _buttonManager.SetDockerMetrics(drawDocker, palette, - PaletteMetricInt.HeaderButtonEdgeInsetCalendar, - PaletteMetricPadding.HeaderButtonPaddingCalendar); + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCalendar, PaletteMetricPadding.HeaderButtonPaddingCalendar); break; + case HeaderStyle.Custom1: - _buttonManager.SetDockerMetrics(drawDocker, palette, - PaletteMetricInt.HeaderButtonEdgeInsetCustom1, - PaletteMetricPadding.HeaderButtonPaddingCustom1); + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom1, PaletteMetricPadding.HeaderButtonPaddingCustom1); break; + case HeaderStyle.Custom2: - _buttonManager.SetDockerMetrics(drawDocker, palette, - PaletteMetricInt.HeaderButtonEdgeInsetCustom2, - PaletteMetricPadding.HeaderButtonPaddingCustom2); + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom2, PaletteMetricPadding.HeaderButtonPaddingCustom2); break; + case HeaderStyle.Custom3: - _buttonManager.SetDockerMetrics(drawDocker, palette, - PaletteMetricInt.HeaderButtonEdgeInsetCustom3, - PaletteMetricPadding.HeaderButtonPaddingCustom3); + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom3, PaletteMetricPadding.HeaderButtonPaddingCustom3); break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } } @@ -593,8 +595,8 @@ private void SetPalettes([DisallowNull] PaletteHeaderGroup palette) _viewHeadingPrimary.SetPalettes(palette.HeaderPrimary.Back, palette.HeaderPrimary.Border, palette.HeaderPrimary); _viewHeadingSecondary.SetPalettes(palette.HeaderSecondary.Back, palette.HeaderSecondary.Border, palette.HeaderSecondary); - _buttonManager.SetDockerMetrics(_viewHeadingPrimary, palette.HeaderPrimary); - _buttonManager.SetDockerMetrics(_viewHeadingSecondary, palette.HeaderSecondary); + _buttonManager?.SetDockerMetrics(_viewHeadingPrimary, palette.HeaderPrimary); + _buttonManager?.SetDockerMetrics(_viewHeadingSecondary, palette.HeaderSecondary); _viewContentPrimary.SetPalette(palette.HeaderPrimary.Content); _viewContentSecondary.SetPalette(palette.HeaderSecondary.Content); @@ -607,22 +609,22 @@ private void SetEnabled(bool enabled) _viewHeadingSecondary.Enabled = enabled; _viewContentPrimary.Enabled = enabled; _viewContentSecondary.Enabled = enabled; - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); } - private void OnDragStart(object sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, null); + private void OnDragStart(object? sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, null); - private void OnDragMove(object sender, PointEventArgs e) => Navigator.InternalDragMove(e); + private void OnDragMove(object? sender, PointEventArgs e) => Navigator.InternalDragMove(e); - private void OnDragEnd(object sender, PointEventArgs e) => Navigator.InternalDragEnd(e); + private void OnDragEnd(object? sender, PointEventArgs e) => Navigator.InternalDragEnd(e); - private void OnDragQuit(object sender, EventArgs e) => Navigator.InternalDragQuit(); + private void OnDragQuit(object? sender, EventArgs e) => Navigator.InternalDragQuit(); - private void OnLeftMouseDown(object sender, EventArgs e) => Navigator.OnPrimaryHeaderLeftClicked(e); + private void OnLeftMouseDown(object? sender, EventArgs e) => Navigator.OnPrimaryHeaderLeftClicked(e); - private void OnRightMouseDown(object sender, EventArgs e) => Navigator.OnPrimaryHeaderRightClicked(e); + private void OnRightMouseDown(object? sender, EventArgs e) => Navigator.OnPrimaryHeaderRightClicked(e); - private void OnLeftDoubleClick(object sender, EventArgs e) => Navigator.OnPrimaryHeaderDoubleClicked(e); + private void OnLeftDoubleClick(object? sender, EventArgs e) => Navigator.OnPrimaryHeaderDoubleClicked(e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderGroup.cs index a04919071..cbcd8cf43 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,23 +31,23 @@ internal class ViewBuilderHeaderGroup : ViewBuilderBase /// Palette redirector. public override void Construct([DisallowNull] KryptonNavigator navigator, [DisallowNull] ViewManager manager, - [DisallowNull] PaletteRedirect redirector) + PaletteRedirect redirector) { // Let base class perform common operations base.Construct(navigator, manager, redirector); // Get the current root element - _oldRoot = ViewManager.Root; + _oldRoot = ViewManager?.Root!; // Construct the viewlet instance _headerGroup = new ViewletHeaderGroup(navigator, redirector, NeedPaintDelegate); // Create and initialize all objects ViewBase newRoot = _headerGroup.Construct(_oldRoot); - _headerGroup.PostCreate(); + _headerGroup?.PostCreate(); // Assign the new root - ViewManager.Root = newRoot; + ViewManager!.Root = newRoot; // Need to monitor changes in the enabled state Navigator.EnabledChanged += OnEnabledChanged; @@ -62,10 +62,10 @@ public override void Destruct() Navigator.EnabledChanged -= OnEnabledChanged; // Pull down the header group view hierarchy - _headerGroup.Destruct(); + _headerGroup?.Destruct(); // Put the old root back again - ViewManager.Root = _oldRoot; + ViewManager!.Root = _oldRoot; // Let base class do standard work base.Destruct(); @@ -92,7 +92,7 @@ public override void Destruct() /// Reference to ButtonSpec; otherwise null. public override ButtonSpec? ButtonSpecFromView(ViewBase element) => // Delegate lookup to the viewlet that has the button spec manager - _headerGroup.ButtonSpecFromView(element); + _headerGroup?.ButtonSpecFromView(element); /// /// Process a change in the selected page @@ -100,7 +100,7 @@ public override void Destruct() public override void SelectedPageChanged() { UpdateStatePalettes(); - _headerGroup.UpdateButtons(); + _headerGroup?.UpdateButtons(); // Let base class do standard work base.SelectedPageChanged(); @@ -112,7 +112,7 @@ public override void SelectedPageChanged() public override void PageCollectionChanged() { UpdateStatePalettes(); - _headerGroup.UpdateButtons(); + _headerGroup?.UpdateButtons(); // Let base class do standard work base.PageCollectionChanged(); @@ -145,7 +145,7 @@ public override void PageEnabledStateChanged(KryptonPage? page) { // Update to use the correct enabled/disabled palette UpdateStatePalettes(); - _headerGroup.UpdateButtons(); + _headerGroup?.UpdateButtons(); // Need to repaint to show the change Navigator.PerformNeedPaint(true); @@ -161,10 +161,21 @@ public override void PageEnabledStateChanged(KryptonPage? page) /// /// Page that has changed. /// Name of property that has changed. - public override void PageAppearanceChanged([DisallowNull] KryptonPage page, [DisallowNull] string property) + public override void PageAppearanceChanged([DisallowNull] KryptonPage page, + [DisallowNull] string property) { - Debug.Assert(page != null); - Debug.Assert(property != null); + Debug.Assert(page is not null); + Debug.Assert(property is not null); + + if (page is null) + { + throw new ArgumentNullException(nameof(page)); + } + + if (property is null) + { + throw new ArgumentNullException(nameof(property)); + } // We are only interested if the selected page has changed if (page == Navigator.SelectedPage) @@ -214,7 +225,7 @@ public override Point GetContextShowPoint() => /// True if the view wants the mouse position; otherwise false. public override bool DesignerGetHitTest(Point pt) => // Check if the header group wants the mouse - _headerGroup.DesignerGetHitTest(pt); + _headerGroup!.DesignerGetHitTest(pt); /// /// Calculate the enabled state of the next button based on the required action. @@ -224,7 +235,7 @@ public override bool DesignerGetHitTest(Point pt) => public override ButtonEnabled NextActionEnabled(DirectionButtonAction action) { // Ask the header group to update the action - action = _headerGroup.NextActionEnabled(action); + action = _headerGroup!.NextActionEnabled(action); // Let base class perform basic action calculations return base.NextActionEnabled(action); @@ -238,7 +249,7 @@ public override ButtonEnabled NextActionEnabled(DirectionButtonAction action) public override void PerformNextAction(DirectionButtonAction action, KryptonPage? page) { // Ask the header group to update the action - action = _headerGroup.NextActionEnabled(action); + action = _headerGroup!.NextActionEnabled(action); // Let base class perform basic actions base.PerformNextAction(action, page); @@ -252,7 +263,7 @@ public override void PerformNextAction(DirectionButtonAction action, KryptonPage public override ButtonEnabled PreviousActionEnabled(DirectionButtonAction action) { // Ask the header group to update the action - action = _headerGroup.PreviousActionEnabled(action); + action = _headerGroup!.PreviousActionEnabled(action); // Let base class perform basic action calculations return base.PreviousActionEnabled(action); @@ -266,7 +277,7 @@ public override ButtonEnabled PreviousActionEnabled(DirectionButtonAction action public override void PerformPreviousAction(DirectionButtonAction action, KryptonPage? page) { // Ask the header group to update the action - action = _headerGroup.PreviousActionEnabled(action); + action = _headerGroup!.PreviousActionEnabled(action); // Let base class perform basic actions base.PerformPreviousAction(action, page); @@ -337,10 +348,10 @@ public override bool ProcessMnemonic(char charCode) => /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { // Let the header group process the property - _headerGroup.ViewBuilderPropertyChanged(e); + _headerGroup?.ViewBuilderPropertyChanged(e); // Let the base process it as well base.OnViewBuilderPropertyChanged(sender, e); @@ -348,7 +359,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan #endregion #region Implementation - private void OnEnabledChanged(object sender, EventArgs e) => UpdateStatePalettes(); + private void OnEnabledChanged(object? sender, EventArgs e) => UpdateStatePalettes(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderItemBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderItemBase.cs index 02c474f53..367150a9a 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderItemBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderItemBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,13 +40,13 @@ internal abstract class ViewBuilderItemBase : ViewBuilderBase /// Palette redirector. public override void Construct([DisallowNull] KryptonNavigator navigator, [DisallowNull] ViewManager manager, - [DisallowNull] PaletteRedirect redirector) + PaletteRedirect redirector) { // Let base class perform common operations base.Construct(navigator, manager, redirector); // Get the current root element - _oldRoot = ViewManager.Root; + _oldRoot = ViewManager?.Root!; // Create and initialize all objects CreateCheckItemView(); @@ -61,7 +61,7 @@ public override void Construct([DisallowNull] KryptonNavigator navigator, _buttonManager?.RecreateButtons(); // Canvas becomes the new root - ViewManager.Root = _newRoot; + ViewManager!.Root = _newRoot; // Need to monitor changes in the enabled state Navigator.EnabledChanged += OnNavigatorEnabledChanged; @@ -82,7 +82,7 @@ public override void Destruct() Navigator.RightToLeftChanged -= OnNavigatorRightToLeftChanged; // Put the old root back again - ViewManager.Root = _oldRoot; + ViewManager!.Root = _oldRoot; // Let base class perform common operations base.Destruct(); @@ -118,11 +118,11 @@ public override void SelectedPageChanged() // If we found a selected page if (selected != null) { - // Make sure the layout is upto date + // Make sure the layout is up-to date Navigator.CheckPerformLayout(); // Get the client rectangle of the check button - Rectangle buttonRect = selected.ClientRectangle; + var buttonRect = selected.ClientRectangle; // Ask the viewport to bring this rectangle into view _layoutBarViewport.BringIntoView(buttonRect); @@ -152,10 +152,10 @@ public override void PageVisibleStateChanged(KryptonPage? page) { // Sometimes the page is noticed as changed in visibility before the // page has been processed and has a view added, so need to check lookup - if (_pageLookup.ContainsKey(page)) + if (_pageLookup.ContainsKey(page!)) { // Reflect new state in the check button - _pageLookup[page].View.Visible = page.LastVisibleSet; + _pageLookup[page!].View.Visible = page!.LastVisibleSet; // Need to repaint to show the change Navigator.PerformNeedPaint(true); @@ -176,10 +176,10 @@ public override void PageEnabledStateChanged(KryptonPage? page) { // Sometimes the page is noticed as changed in enabled state before the // page has been processed and has a view added, so need to check lookup - if (_pageLookup.ContainsKey(page)) + if (_pageLookup.ContainsKey(page!)) { // Reflect new state in the check button - _pageLookup[page].View.Enabled = page.Enabled; + _pageLookup[page!].View.Enabled = page!.Enabled; // Need to repaint to show the change Navigator.PerformNeedPaint(true); @@ -211,7 +211,7 @@ public override void PageEnabledStateChanged(KryptonPage? page) ButtonSpec? bs = (_buttonManager?.ButtonSpecFromView(element)); // Check each page level button spec - if ((bs == null) && (_pageLookup != null)) + if (bs == null && _pageLookup != null) { foreach (var pair in _pageLookup) { @@ -231,10 +231,21 @@ public override void PageEnabledStateChanged(KryptonPage? page) /// /// Page that has changed. /// Name of property that has changed. - public override void PageAppearanceChanged([DisallowNull] KryptonPage page, [DisallowNull] string property) + public override void PageAppearanceChanged([DisallowNull] KryptonPage page, + [DisallowNull] string property) { - Debug.Assert(page != null); - Debug.Assert(property != null); + Debug.Assert(page is not null); + Debug.Assert(property is not null); + + if (page is null) + { + throw new ArgumentNullException(nameof(page)); + } + + if (property is null) + { + throw new ArgumentNullException(nameof(property)); + } switch (property) { @@ -257,7 +268,7 @@ public override void PageAppearanceChanged([DisallowNull] KryptonPage page, [Dis /// public override void UpdateStatePalettes() { - PaletteNavigator? paletteState; + PaletteNavigator paletteState; PaletteNavigatorRedirect? paletteCommon; // If whole navigator is disabled then all views are disabled @@ -307,8 +318,8 @@ public override void UpdateStatePalettes() } // Update metrics from state common - _layoutBar.SetMetrics(paletteCommon.Bar); - _layoutBarViewport.SetMetrics(paletteCommon.Bar); + _layoutBar.SetMetrics(paletteCommon?.Bar); + _layoutBarViewport.SetMetrics(paletteCommon!.Bar); _buttonManager?.SetDockerMetrics(_layoutBarDocker, paletteCommon.Bar); @@ -696,7 +707,7 @@ protected virtual void CreateButtonSpecManager() => // Create button specification collection manager _buttonManager = new ButtonSpecNavManagerLayoutBar(Navigator, Redirector, Navigator.Button.ButtonSpecs, Navigator.FixedSpecs, new[] { _layoutBarDocker }, - new IPaletteMetric[] { Navigator.StateCommon.Bar }, + new IPaletteMetric[] { Navigator.StateCommon!.Bar }, new[] { PaletteMetricInt.BarButtonEdgeInside }, new[] { PaletteMetricInt.BarButtonEdgeOutside }, new[] { PaletteMetricPadding.BarButtonPadding }, @@ -763,7 +774,7 @@ protected virtual INavCheckItem CreateCheckItem(KryptonPage? page, /// /// Gets access to the collection of pages. /// - protected PageToNavCheckItem PageLookup => _pageLookup; + protected PageToNavCheckItem? PageLookup => _pageLookup; /// /// Update the bar orientation. @@ -817,6 +828,7 @@ protected VisualOrientation ResolveButtonContentOrientation(VisualOrientation or case VisualOrientation.Top: case VisualOrientation.Bottom: return VisualOrientation.Top; + case VisualOrientation.Left: if (CommonHelper.GetRightToLeftLayout(Navigator) && (Navigator.RightToLeft == RightToLeft.Yes)) @@ -827,6 +839,7 @@ protected VisualOrientation ResolveButtonContentOrientation(VisualOrientation or { return VisualOrientation.Left; } + case VisualOrientation.Right: if (CommonHelper.GetRightToLeftLayout(Navigator) && (Navigator.RightToLeft == RightToLeft.Yes)) @@ -837,22 +850,30 @@ protected VisualOrientation ResolveButtonContentOrientation(VisualOrientation or { return VisualOrientation.Right; } + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); return VisualOrientation.Top; } + case ButtonOrientation.FixedTop: return VisualOrientation.Top; + case ButtonOrientation.FixedBottom: return VisualOrientation.Bottom; + case ButtonOrientation.FixedLeft: return VisualOrientation.Left; + case ButtonOrientation.FixedRight: return VisualOrientation.Right; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Bar.ItemOrientation.ToString()); return VisualOrientation.Top; } } @@ -862,7 +883,7 @@ protected VisualOrientation ResolveButtonContentOrientation(VisualOrientation or /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -980,7 +1001,7 @@ private void DestructNavCheckItems() private void UpdateCheckItemStyle() { - Navigator.StateCommon.CheckButton.SetStyles(Navigator.Bar.CheckButtonStyle); + Navigator.StateCommon!.CheckButton.SetStyles(Navigator.Bar.CheckButtonStyle); Navigator.OverrideFocus.CheckButton.SetStyles(Navigator.Bar.CheckButtonStyle); // Update each individual button with the new style for remapping page level button specs @@ -1016,7 +1037,7 @@ private void UpdateSelectedPageFocus() if (Navigator.SelectedPage != null) { // We should have a view for representing the page - if (_pageLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the associated view element for the page INavCheckItem checkItem = _pageLookup[Navigator.SelectedPage]; @@ -1033,7 +1054,7 @@ private void UpdateSelectedPageFocus() private void DestructCheckButtons() { // Must tell each check button it is no longer required - foreach (ViewBase child in _layoutBar) + foreach (var child in _layoutBar) { var checkItem = (INavCheckItem)child; @@ -1050,7 +1071,7 @@ private void DestructCheckButtons() _layoutBar.Clear(); // Remove all associations from the lookup dictionary - _pageLookup.Clear(); + _pageLookup?.Clear(); } private void RefreshButtons() @@ -1072,7 +1093,7 @@ private void BringPageIntoView() ViewBase? viewPage = null; // Make sure only the selected page is checked - foreach (ViewBase child in _layoutBar) + foreach (var child in _layoutBar) { var checkItem = (INavCheckItem)child; @@ -1094,7 +1115,7 @@ private void BringPageIntoView() private bool BarHorizontal => Navigator.Bar.BarOrientation is VisualOrientation.Top or VisualOrientation.Bottom; - private void OnItemPagesCleared(object sender, EventArgs e) + private void OnItemPagesCleared(object? sender, EventArgs e) { if (!Navigator.IsDisposed && (_events > 0)) { @@ -1111,7 +1132,7 @@ private void OnItemPageRemoved(object sender, TypedCollectionEventArgs 0)) { // Get the associated check button view element - INavCheckItem checkItem = _pageLookup[e.Item]; + INavCheckItem? checkItem = _pageLookup![e.Item!]; // Must unhook from events checkItem.ButtonDragRectangle -= OnCheckButtonDragRect; @@ -1125,14 +1146,14 @@ private void OnItemPageRemoved(object sender, TypedCollectionEventArgs e) + private void OnItemPageInserted(object? sender, TypedCollectionEventArgs e) { if (!Navigator.IsDisposed && (_events > 0)) { @@ -1147,12 +1168,15 @@ private void OnItemPageInserted(object sender, TypedCollectionEventArgs UpdateStatePalettes(); + private void OnNavigatorEnabledChanged(object? sender, EventArgs e) => UpdateStatePalettes(); - private void OnNavigatorRightToLeftChanged(object sender, EventArgs e) => UpdateItemOrientation(); + private void OnNavigatorRightToLeftChanged(object? sender, EventArgs e) => UpdateItemOrientation(); - private void OnViewportAnimation(object sender, EventArgs e) => Navigator.PerformNeedPaint(true); + private void OnViewportAnimation(object? sender, EventArgs e) => Navigator.PerformNeedPaint(true); - private void OnCheckButtonDragRect(object sender, ButtonDragRectangleEventArgs e) + private void OnCheckButtonDragRect(object? sender, ButtonDragRectangleEventArgs e) { // Cast incoming reference to the actual button view - var reorderItem = (INavCheckItem)sender; + var reorderItem = sender as INavCheckItem; - e.PreDragOffset = (Navigator.AllowPageReorder && reorderItem.Page.AreFlagsSet(KryptonPageFlags.AllowPageReorder)); - Rectangle dragRect = Rectangle.Union(e.DragRect, _layoutBarViewport.ClientRectangle); + if (reorderItem!.Page != null) + { + e.PreDragOffset = (Navigator.AllowPageReorder && + reorderItem.Page.AreFlagsSet(KryptonPageFlags.AllowPageReorder)); + } + var dragRect = Rectangle.Union(e.DragRect, _layoutBarViewport.ClientRectangle); dragRect.Inflate(new Size(10, 10)); e.DragRect = dragRect; } - private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) + private void OnCheckButtonDragOffset(object? sender, ButtonDragOffsetEventArgs e) { // Cast incoming reference to the actual button view - var reorderItem = (INavCheckItem)sender; - ViewBase reorderView = reorderItem.View; + var reorderItem = sender as INavCheckItem ?? throw new ArgumentNullException(nameof(sender)); + var reorderView = reorderItem.View; // Scan the collection of children var foundReorderView = false; - VisualOrientation orientation = ConvertButtonBorderBackOrientation(); - foreach (ViewBase childView in Navigator.Pages.Select(page => (ViewBase)_pageLookup[page])) + var orientation = ConvertButtonBorderBackOrientation(); + foreach (var childView in Navigator.Pages.Select(page => _pageLookup![page] as ViewBase)) { - if (childView.ClientRectangle.Contains(e.PointOffset)) + if (childView!.ClientRectangle.Contains(e.PointOffset)) { // Only interested if mouse over a different check button if (childView != reorderView) { - Rectangle childRect = childView.ClientRectangle; + var childRect = childView.ClientRectangle; if (foundReorderView) { @@ -1216,19 +1244,19 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) // ourself as the moved button. Otherwise we just end up toggling back and forth. if (childRect.Contains(e.PointOffset)) { - KryptonPage movePage = PageFromView(reorderView); - KryptonPage targetPage = PageFromView(childView); - var reorder = new PageReorderEventArgs(movePage, targetPage, false); + KryptonPage? movePage = PageFromView(reorderView); + KryptonPage? targetPage = PageFromView(childView); + var reorder = new PageReorderEventArgs(movePage!, targetPage!, false); // Give event handlers a chance to cancel this reorder Navigator.OnBeforePageReorder(reorder); if (!reorder.Cancel) { - Navigator.Pages.MoveAfter(movePage, targetPage); + Navigator.Pages.MoveAfter(movePage!, targetPage!); RecreateView(); Navigator.PerformLayout(); Navigator.Refresh(); - Navigator.OnTabMoved(new TabMovedEventArgs(movePage, Navigator.Pages.IndexOf(movePage))); + Navigator.OnTabMoved(new TabMovedEventArgs(movePage!, Navigator.Pages.IndexOf(movePage!))); } } } @@ -1247,19 +1275,19 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) // ourself as the moved button. Otherwise we just end up toggling back and forth. if (childRect.Contains(e.PointOffset)) { - KryptonPage movePage = PageFromView(reorderView); - KryptonPage targetPage = PageFromView(childView); - var reorder = new PageReorderEventArgs(movePage, targetPage, true); + KryptonPage? movePage = PageFromView(reorderView); + KryptonPage? targetPage = PageFromView(childView); + var reorder = new PageReorderEventArgs(movePage!, targetPage!, true); // Give event handlers a chance to cancel this reorder Navigator.OnBeforePageReorder(reorder); if (!reorder.Cancel) { - Navigator.Pages.MoveBefore(movePage, PageFromView(childView)); + Navigator.Pages.MoveBefore(movePage!, PageFromView(childView)!); RecreateView(); Navigator.PerformLayout(); Navigator.Refresh(); - Navigator.OnTabMoved(new TabMovedEventArgs(movePage, Navigator.Pages.IndexOf(movePage))); + Navigator.OnTabMoved(new TabMovedEventArgs(movePage!, Navigator.Pages.IndexOf(movePage!))); } } } @@ -1278,7 +1306,7 @@ private void RecreateView() _layoutBar.Clear(); // Reorder the layout bar children to match the pages ordering - foreach (INavCheckItem checkItem in Navigator.Pages.Select(page => _pageLookup[page])) + foreach (var checkItem in Navigator.Pages.Select(page => _pageLookup![page])) { _layoutBar.Add(checkItem.View); } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookBase.cs index a2a3db4a2..caa33e58f 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -55,7 +55,7 @@ public OutlookButtonSpecCollection(KryptonNavigator owner) private ViewDrawBorderEdge _viewSeparatorEdge; private ViewDrawSeparator _viewSeparator; private ButtonSpecAny _specDropDown; - private OutlookButtonSpecCollection _buttons; + private OutlookButtonSpecCollection? _buttons; private ButtonSpecNavManagerLayoutBar? _buttonManager; private PageToButtonEdge? _buttonEdgeLookup; private SeparatorController _separatorController; @@ -78,7 +78,7 @@ static ViewBuilderOutlookBase() var myAssembly = Assembly.GetAssembly(typeof(ViewBuilderOutlookBase)); // Get the resource streams containing the images - Stream? streamBlueUp = myAssembly.GetManifestResourceStream(@"Krypton.Navigator.Resources.BlueUp.bmp"); + Stream? streamBlueUp = myAssembly!.GetManifestResourceStream(@"Krypton.Navigator.Resources.BlueUp.bmp"); Stream? streamBlueDown = myAssembly.GetManifestResourceStream(@"Krypton.Navigator.Resources.BlueDown.bmp"); // Load the bitmap from stream @@ -282,13 +282,13 @@ public void SeparatorNotMoved() /// Palette redirector. public override void Construct([DisallowNull] KryptonNavigator navigator, [DisallowNull] ViewManager manager, - [DisallowNull] PaletteRedirect redirector) + PaletteRedirect redirector) { // Let base class perform common operations base.Construct(navigator, manager, redirector); // Get the current root element - _oldRoot = ViewManager.Root as ViewLayoutPageShow; + _oldRoot = ViewManager?.Root as ViewLayoutPageShow; // Create and initialize all objects if (ViewManager != null) @@ -413,10 +413,10 @@ public override void PageCollectionChanged() public override void PageVisibleStateChanged(KryptonPage? page) { // Sometimes the routine is called before the views have been fully setup - if ((_pageStackLookup != null) && _pageStackLookup.ContainsKey(page) && - (_pageOverflowLookup != null) && _pageOverflowLookup.ContainsKey(page)) + if ((_pageStackLookup != null) && _pageStackLookup.ContainsKey(page!) && + (_pageOverflowLookup != null) && _pageOverflowLookup.ContainsKey(page!)) { - var showPageStack = page.LastVisibleSet && !page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode); + var showPageStack = page!.LastVisibleSet && !page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode); var showPageOverflow = page.LastVisibleSet && !showPageStack; // Reflect new state in the check button @@ -448,10 +448,10 @@ public override void PageEnabledStateChanged(KryptonPage? page) UpdateStatePalettes(); // Sometimes the routine is called before the views have been fully setup - if ((_pageStackLookup != null) && _pageStackLookup.ContainsKey(page) && - (_pageOverflowLookup != null) && _pageOverflowLookup.ContainsKey(page)) + if ((_pageStackLookup != null) && _pageStackLookup.ContainsKey(page!) && + (_pageOverflowLookup != null) && _pageOverflowLookup.ContainsKey(page!)) { - _pageStackLookup[page].Enabled = page.Enabled; + _pageStackLookup[page!].Enabled = page!.Enabled; _pageOverflowLookup[page].Enabled = page.Enabled; } @@ -470,10 +470,21 @@ public override void PageEnabledStateChanged(KryptonPage? page) /// /// Page that has changed. /// Name of property that has changed. - public override void PageAppearanceChanged([DisallowNull] KryptonPage page, [DisallowNull] string property) + public override void PageAppearanceChanged([DisallowNull] KryptonPage page, + [DisallowNull] string property) { - Debug.Assert(page != null); - Debug.Assert(property != null); + Debug.Assert(page is not null); + Debug.Assert(property is not null); + + if (page is null) + { + throw new ArgumentNullException(nameof(page)); + } + + if (property is null) + { + throw new ArgumentNullException(nameof(property)); + } // We are only interested if the page is visible if (page is { LastVisibleSet: true }) @@ -520,7 +531,7 @@ public override void UpdateStatePalettes() { if (_buttonEdgeLookup != null) { - PaletteBorderEdge buttonEdge; + PaletteBorderEdge? buttonEdge; // If whole navigator is disabled then all of view is disabled var enabled = Navigator.Enabled; @@ -530,10 +541,10 @@ public override void UpdateStatePalettes() if (Navigator.SelectedPage == null) { // Then use the states defined in the navigator itself - buttonEdge = Navigator.Enabled ? Navigator.StateNormal.BorderEdge : Navigator.StateDisabled.BorderEdge; + buttonEdge = Navigator.Enabled ? Navigator.StateNormal?.BorderEdge : Navigator.StateDisabled?.BorderEdge; // Update the separator view to use the navigator state objects - _viewSeparator.SetPalettes(Navigator.StateDisabled.Separator, Navigator.StateNormal.Separator, + _viewSeparator.SetPalettes(Navigator.StateDisabled!.Separator, Navigator.StateNormal!.Separator, Navigator.StateTracking.Separator, Navigator.StatePressed.Separator, Navigator.StateDisabled.Separator, Navigator.StateNormal.Separator, Navigator.StateTracking.Separator, Navigator.StatePressed.Separator); @@ -561,10 +572,10 @@ public override void UpdateStatePalettes() } // Update each of the border edge palettes - foreach (ViewDrawBorderEdge view in _buttonEdgeLookup.Values) + foreach (var view in _buttonEdgeLookup.Values) { view.Enabled = checkEnabled; - view.SetPalettes(buttonEdge); + view.SetPalettes(buttonEdge!); } // Update the main view elements @@ -573,7 +584,7 @@ public override void UpdateStatePalettes() // Update the fixed separator view elements _viewSeparatorEdge.Enabled = enabled; - _viewSeparatorEdge.SetPalettes(buttonEdge); + _viewSeparatorEdge.SetPalettes(buttonEdge!); _viewSeparator.Enabled = enabled; // Update palettes for the header group @@ -595,7 +606,7 @@ public override void Destruct() // Unhook from monitoring the pages collection _events = false; - Navigator.Pages.Inserted -= OnPageInserted!; + Navigator.Pages.Inserted -= OnPageInserted; Navigator.Pages.Removed -= OnPageRemoved; Navigator.Pages.Cleared -= OnPagesCleared; @@ -604,13 +615,13 @@ public override void Destruct() DestructOverflowCheckButtons(); // Reset the preferred direction handling to original setting - _oldRoot.SetMinimumAsPreferred(false); + _oldRoot?.SetMinimumAsPreferred(false); // Destruct the header group viewlet _headerGroup.Destruct(); // Put the old root back again - ViewManager.Root = _oldRoot; + ViewManager!.Root = _oldRoot!; // Dispose of the cached context menu if (_kcm != null) @@ -1042,7 +1053,7 @@ public string GetOverflowButtonStates() if (_pageOverflowLookup != null) { // There swill be an overflow button per krypton page - foreach (KryptonPage page in Navigator.Pages) + foreach (var page in Navigator.Pages) { // Double check that it exists in the lookup if (_pageOverflowLookup.ContainsKey(page)) @@ -1059,7 +1070,7 @@ public string GetOverflowButtonStates() /// /// Remove any shrinkage that has caused stacking items to be hidden from view. /// - public void UnshrinkAppropriatePages() + public void UnShrinkAppropriatePages() { // Sometimes the routine is called before the views have been fully setup if ((_pageStackLookup != null) && (_pageOverflowLookup != null)) @@ -1067,21 +1078,21 @@ public void UnshrinkAppropriatePages() // Make each visible krypton page have its check button and border edge visible unless // that page has the 'PageInOverflowBarForOutlookMode' flag set in which case it has // specifically requested to be placed on the overflow bar area. - foreach (KryptonPage page in Navigator.Pages) + foreach (var page in Navigator.Pages) { - if (_pageStackLookup.ContainsKey(page)) + if (_pageStackLookup.TryGetValue(page, out ViewDrawNavCheckButtonBase? value)) { var showPageStack = page.LastVisibleSet && !page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode); - _pageStackLookup[page].Visible = showPageStack; + value.Visible = showPageStack; if (_buttonEdgeLookup != null) { _buttonEdgeLookup[page].Visible = showPageStack; } - if (_pageOverflowLookup.ContainsKey(page)) + if (_pageOverflowLookup.TryGetValue(page, out ViewDrawNavCheckButtonBase? value1)) { var showPageOverflow = page.LastVisibleSet && !showPageStack; - _pageOverflowLookup[page].Visible = showPageOverflow; + value1.Visible = showPageOverflow; } } } @@ -1155,7 +1166,7 @@ public bool ShrinkVertical(int shrinkage) protected virtual ViewBase CreateView() { // Set the initial preferred direction for the selected page - _oldRoot.SetMinimumAsPreferred(!Navigator.AutoSize); + _oldRoot?.SetMinimumAsPreferred(!Navigator.AutoSize); // Create the header group and fill with the view layout _headerGroup = new ViewletHeaderGroupOutlook(Navigator, Redirector, NeedPaintDelegate); @@ -1212,7 +1223,7 @@ protected virtual ViewBase CreateView() /// ViewBase derived instance. protected virtual void SetLayoutFiller(ViewLayoutDocker viewLayout) => // Put the old root as the filler inside stack elements - viewLayout.Add(_oldRoot, ViewDockStyle.Fill); + viewLayout.Add(_oldRoot!, ViewDockStyle.Fill); /// /// Create an overflow check button. @@ -1234,7 +1245,7 @@ protected virtual ViewDrawNavOutlookOverflow CreateOverflowItem(KryptonPage? pag }; // Can we show the page as an overflow item? - var showPage = page.LastVisibleSet && _pageStackLookup?[page].Visible == false; + var showPage = page!.LastVisibleSet && _pageStackLookup?[page].Visible == false; // Set the initial state checkButton.Visible = showPage; @@ -1258,7 +1269,7 @@ protected virtual void ReorderCheckButtonsOverflow(KryptonPage page, ref int overflowInsertIndex) { // Check that an overflow view element exists for the page - if (_pageOverflowLookup.ContainsKey(page)) + if (_pageOverflowLookup!.ContainsKey(page)) { // Get the associated view element ViewDrawNavCheckButtonBase checkButton = _pageOverflowLookup[page]; @@ -1347,7 +1358,7 @@ protected virtual void BringPageIntoView(KryptonPage page) /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { // Let the header group process the property _headerGroup.ViewBuilderPropertyChanged(e); @@ -1359,7 +1370,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan Navigator.PerformNeedPaint(true); break; case @"BorderEdgeStyleOutlook": - Navigator.StateCommon.BorderEdgeStyle = Navigator.Outlook.BorderEdgeStyle; + Navigator.StateCommon!.BorderEdgeStyle = Navigator.Outlook.BorderEdgeStyle; Navigator.PerformNeedPaint(true); break; case @"CheckButtonStyleOutlook": @@ -1379,7 +1390,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan break; case @"OrientationOutlook": // We only use minimum values if not calculating based on auto sizing - _oldRoot.SetMinimumAsPreferred(!Navigator.AutoSize); + _oldRoot!.SetMinimumAsPreferred(!Navigator.AutoSize); _specDropDown.Orientation = (Navigator.Outlook.Orientation == Orientation.Vertical ? PaletteButtonOrientation.FixedTop : PaletteButtonOrientation.FixedLeft); _viewOverflowBar.Orientation = (Navigator.Outlook.Orientation == Orientation.Vertical ? VisualOrientation.Top : VisualOrientation.Left); _viewOverflowLayout.Orientation = (Navigator.Outlook.Orientation == Orientation.Vertical ? VisualOrientation.Top : VisualOrientation.Left); @@ -1415,7 +1426,7 @@ protected virtual void UpdateSelectedPageFocus() if (Navigator.SelectedPage != null) { // We should have a stack view for the page - if (_pageStackLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageStackLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the associated view element for the page ViewDrawNavCheckButtonBase checkButton = _pageStackLookup[Navigator.SelectedPage]; @@ -1428,7 +1439,7 @@ protected virtual void UpdateSelectedPageFocus() } // We should have an overflow view for the page - if (_pageOverflowLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageOverflowLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the associated view element for the page ViewDrawNavCheckButtonBase checkButton = _pageOverflowLookup[Navigator.SelectedPage]; @@ -1742,7 +1753,7 @@ private void CreateButtonManager() // Create button specification collection manager _buttonManager = new ButtonSpecNavManagerLayoutBar(Navigator, Redirector, _buttons, new[] { _viewOverflowLayout }, - new IPaletteMetric[] { Navigator.StateCommon.Bar }, + new IPaletteMetric[] { Navigator.StateCommon!.Bar }, new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, new[] { PaletteMetricPadding.None }, @@ -1864,7 +1875,7 @@ private void OnPageInserted(object sender, TypedCollectionEventArgs // Can we show the page as a stacking item? var showPageStack = e.Item is { LastVisibleSet: true } && !e.Item.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode); - var showPageOverflow = e.Item.LastVisibleSet && !showPageStack; + var showPageOverflow = e.Item!.LastVisibleSet && !showPageStack; // Set the initial state checkButtonStack.Visible = showPageStack; @@ -1905,17 +1916,17 @@ private void OnPageRemoved(object sender, TypedCollectionEventArgs ) { // Get the associated check button view element - ViewDrawNavCheckButtonBase? checkButtonStack = _pageStackLookup?[e.Item]; - ViewDrawNavCheckButtonBase? checkButtonOverflow = _pageOverflowLookup?[e.Item]; - ViewDrawBorderEdge? buttonEdge = _buttonEdgeLookup?[e.Item]; + var checkButtonStack = _pageStackLookup?[e.Item]; + var checkButtonOverflow = _pageOverflowLookup?[e.Item]; + var buttonEdge = _buttonEdgeLookup?[e.Item]; // Remove event hooks - checkButtonStack.ButtonDragRectangle -= OnCheckButtonDragRect; + checkButtonStack!.ButtonDragRectangle -= OnCheckButtonDragRect; checkButtonStack.ButtonDragOffset -= OnCheckButtonDragOffset; // Remove the paint delegate so objects can be garbage collected checkButtonStack.NeedPaint = null; - checkButtonOverflow.NeedPaint = null; + checkButtonOverflow!.NeedPaint = null; // Remove the overflow entry, if it exists if (_viewOverflowLayout.Contains(checkButtonOverflow)) @@ -1930,12 +1941,12 @@ private void OnPageRemoved(object sender, TypedCollectionEventArgs // Tell the views they are no longer required checkButtonStack.Dispose(); checkButtonOverflow.Dispose(); - buttonEdge.Dispose(); + buttonEdge?.Dispose(); - // Remove associations from the lookup dictionarys - _pageStackLookup.Remove(e.Item); - _pageOverflowLookup.Remove(e.Item); - _buttonEdgeLookup.Remove(e.Item); + // Remove associations from the lookup dictionaries + _pageStackLookup?.Remove(e.Item); + _pageOverflowLookup?.Remove(e.Item); + _buttonEdgeLookup?.Remove(e.Item); // Set correct ordering and dock setting ReorderCheckButtons(); @@ -1945,7 +1956,7 @@ private void OnPageRemoved(object sender, TypedCollectionEventArgs } } - private void OnPagesCleared(object sender, EventArgs e) + private void OnPagesCleared(object? sender, EventArgs e) { if (!Navigator.IsDisposed && _events) { @@ -1999,11 +2010,11 @@ private void ReorderCheckButtons() foreach (KryptonPage page in Navigator.Pages) { // Check that a stacking view element exists for the page - if (_pageStackLookup.ContainsKey(page)) + if (_pageStackLookup!.ContainsKey(page)) { // Get the associated view elements - ViewDrawNavCheckButtonBase checkButton = _pageStackLookup[page]; - ViewDrawBorderEdge buttonEdge = _buttonEdgeLookup[page]; + var checkButton = _pageStackLookup[page]; + var buttonEdge = _buttonEdgeLookup![page]; // Update checked state of the button checkButton.Checked = (Navigator.SelectedPage == page); @@ -2034,17 +2045,23 @@ private VisualOrientation ResolveStackButtonOrientation() return Navigator.Outlook.Orientation == Orientation.Vertical ? VisualOrientation.Top : VisualOrientation.Left; + case ButtonOrientation.FixedTop: return VisualOrientation.Top; + case ButtonOrientation.FixedBottom: return VisualOrientation.Bottom; + case ButtonOrientation.FixedLeft: return VisualOrientation.Left; + case ButtonOrientation.FixedRight: return VisualOrientation.Right; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Outlook.ItemOrientation.ToString()); return VisualOrientation.Top; } } @@ -2063,22 +2080,22 @@ private VisualOrientation ResolveOverflowButtonOrientation() => private bool PageInTheStack(KryptonPage page) { // Get the overflow check button for the page - var checkButton = (ViewDrawNavOutlookOverflow)_pageOverflowLookup[page]; + var checkButton = _pageOverflowLookup![page] as ViewDrawNavOutlookOverflow; // If not visible on the overflow bar then must be in the stack - return !checkButton.Visible; + return !checkButton!.Visible; } - private void OnEnabledChanged(object sender, EventArgs e) + private void OnEnabledChanged(object? sender, EventArgs e) { UpdateStatePalettes(); Navigator.PerformLayout(); Navigator.Invalidate(); } - private void OnAutoSizeChanged(object sender, EventArgs e) => + private void OnAutoSizeChanged(object? sender, EventArgs e) => // Only use minimum instead of preferred if not using AutoSize - _oldRoot.SetMinimumAsPreferred(!Navigator.AutoSize); + _oldRoot?.SetMinimumAsPreferred(!Navigator.AutoSize); private void OnViewportAnimation(object sender, EventArgs e) => Navigator.PerformNeedPaint(true); @@ -2088,7 +2105,7 @@ private bool AreFewerButtons() return _viewLayout.Any(child => child.Visible && (child is ViewDrawNavOutlookStack)); } - private void OnDropDownClick(object sender, EventArgs e) + private void OnDropDownClick(object? sender, EventArgs e) { if (!Navigator.InternalDesignMode) { @@ -2112,11 +2129,11 @@ private void OnDropDownClick(object sender, EventArgs e) fewerButtons.Enabled = AreFewerButtons(); // Add items into the context menu - _kcm.Items.Add(new KryptonContextMenuItems(new KryptonContextMenuItemBase[] { moreButtons, fewerButtons, addRemoveButtons })); + _kcm?.Items.Add(new KryptonContextMenuItems(new KryptonContextMenuItemBase[] { moreButtons, fewerButtons, addRemoveButtons })); // Add each page into the 'Add/Remove' item var visibleAddRemove = 0; - foreach (KryptonPage page in Navigator.Pages) + foreach (var page in Navigator.Pages) { // Create a menu item for the page var pageMenuItem = new KryptonContextMenuItem(page.GetTextMapping(Navigator.Button.ContextMenuMapText), @@ -2142,20 +2159,20 @@ private void OnDropDownClick(object sender, EventArgs e) addRemoveButtons.Enabled = (visibleAddRemove > 0); // Get the display rectangle of the drop down button - Rectangle rect = _buttonManager.GetButtonRectangle(_specDropDown); + Rectangle rect = _buttonManager!.GetButtonRectangle(_specDropDown); // Convert to screen coordinates Point pt = Navigator.PointToScreen(new Point(rect.Right + 3, rect.Top)); // Let user modify the context menu before it is shown - Navigator.OnOutlookDropDown(_kcm); + Navigator.OnOutlookDropDown(_kcm!); // Give user a chance to select an item - _kcm.Show(pt); + _kcm?.Show(pt); } } - private void OnShowMoreClick(object sender, EventArgs e) + private void OnShowMoreClick(object? sender, EventArgs e) { // Cast to correct type ViewDrawNavOutlookOverflow? checkButton = GetMoreOverflow(); @@ -2178,7 +2195,7 @@ private void OnShowMoreClick(object sender, EventArgs e) } } - private void OnShowFewerClick(object sender, EventArgs e) + private void OnShowFewerClick(object? sender, EventArgs e) { // Find the last visible button on the stack bar foreach (ViewBase child in _viewLayout.Reverse()) @@ -2206,7 +2223,7 @@ private void OnShowFewerClick(object sender, EventArgs e) PerformNeedPaint(true); } - private void OnPageAddRemoveClick(object sender, EventArgs e) + private void OnPageAddRemoveClick(object? sender, EventArgs e) { // Cast to correct type var menuItem = sender as KryptonContextMenuItem; @@ -2229,12 +2246,12 @@ private void ResetCachedKryptonContextMenu() _kcm.Items.Clear(); } - private void OnCheckButtonDragRect(object sender, ButtonDragRectangleEventArgs e) + private void OnCheckButtonDragRect(object? sender, ButtonDragRectangleEventArgs e) { // Cast incoming reference to the actual check button view - var reorderItem = (ViewDrawNavOutlookStack)sender; + var reorderItem = sender as ViewDrawNavOutlookStack ?? throw new ArgumentNullException(nameof(sender)); - e.PreDragOffset = (Navigator.AllowPageReorder && reorderItem.Page.AreFlagsSet(KryptonPageFlags.AllowPageReorder)); + e.PreDragOffset = (Navigator.AllowPageReorder && reorderItem.Page!.AreFlagsSet(KryptonPageFlags.AllowPageReorder)); Rectangle dragRect = Rectangle.Union(e.DragRect, _viewLayout.ClientRectangle); dragRect.Inflate(new Size(10, 10)); e.DragRect = dragRect; @@ -2252,18 +2269,18 @@ private void OnCheckButtonDragRect(object sender, ButtonDragRectangleEventArgs e } } - private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) + private void OnCheckButtonDragOffset(object? sender, ButtonDragOffsetEventArgs e) { // Cast incoming reference to the actual check button view - var reorderView = (ViewDrawNavOutlookStack)sender; + var reorderView = sender as ViewDrawNavOutlookStack; // Scan the collection of children var foundReorderView = false; foreach (KryptonPage page in Navigator.Pages) { // If the mouse is over this button - var childView = (ViewDrawNavOutlookStack)_pageStackLookup[page]; - if (childView.Visible && childView.ClientRectangle.Contains(e.PointOffset)) + var childView = _pageStackLookup![page] as ViewDrawNavOutlookStack; + if (childView!.Visible && childView.ClientRectangle.Contains(e.PointOffset)) { // Only interested if mouse over a different check button if (childView != reorderView) @@ -2274,13 +2291,13 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) { if (SeparatorOrientation == Orientation.Horizontal) { - var shrink = childRect.Height - Math.Min(childRect.Height, reorderView.ClientHeight); + var shrink = childRect.Height - Math.Min(childRect.Height, reorderView!.ClientHeight); childRect.Y += shrink; childRect.Height -= shrink; } else { - var shrink = childRect.Width - Math.Min(childRect.Width, reorderView.ClientWidth); + var shrink = childRect.Width - Math.Min(childRect.Width, reorderView!.ClientWidth); childRect.X += shrink; childRect.Width -= shrink; } @@ -2291,17 +2308,17 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) { KryptonPage? movePage = PageFromView(reorderView); KryptonPage? targetPage = PageFromView(childView); - var reorder = new PageReorderEventArgs(movePage, targetPage, false); + var reorder = new PageReorderEventArgs(movePage!, targetPage!, false); // Give event handlers a chance to cancel this reorder Navigator.OnBeforePageReorder(reorder); if (!reorder.Cancel) { - Navigator.Pages.MoveAfter(movePage, PageFromView(childView)); + Navigator.Pages.MoveAfter(movePage!, PageFromView(childView)!); RecreateView(); Navigator.PerformLayout(); Navigator.Refresh(); - Navigator.OnTabMoved(new TabMovedEventArgs(movePage, Navigator.Pages.IndexOf(movePage))); + Navigator.OnTabMoved(new TabMovedEventArgs(movePage!, Navigator.Pages.IndexOf(movePage!))); } } } @@ -2309,11 +2326,11 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) { if (SeparatorOrientation == Orientation.Horizontal) { - childRect.Height = Math.Min(childRect.Height, reorderView.ClientHeight); + childRect.Height = Math.Min(childRect.Height, reorderView!.ClientHeight); } else { - childRect.Width = Math.Min(childRect.Width, reorderView.ClientWidth); + childRect.Width = Math.Min(childRect.Width, reorderView!.ClientWidth); } // Ensure that when we are placed in the 'before' position the mouse is still over @@ -2322,17 +2339,17 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) { KryptonPage? movePage = PageFromView(reorderView); KryptonPage? targetPage = PageFromView(childView); - var reorder = new PageReorderEventArgs(movePage, targetPage, true); + var reorder = new PageReorderEventArgs(movePage!, targetPage!, true); // Give event handlers a chance to cancel this reorder Navigator.OnBeforePageReorder(reorder); if (!reorder.Cancel) { - Navigator.Pages.MoveBefore(movePage, PageFromView(childView)); + Navigator.Pages.MoveBefore(movePage!, PageFromView(childView)!); RecreateView(); Navigator.PerformLayout(); Navigator.Refresh(); - Navigator.OnTabMoved(new TabMovedEventArgs(movePage, Navigator.Pages.IndexOf(movePage))); + Navigator.OnTabMoved(new TabMovedEventArgs(movePage!, Navigator.Pages.IndexOf(movePage!))); } } } @@ -2364,8 +2381,15 @@ private void RecreateView() ViewDrawBorderEdge? buttonEdge = _buttonEdgeLookup?[page]; // Add to the end of the collection - if (buttonEdge != null) _viewLayout.Add(buttonEdge, dockFar); - if (checkButton != null) _viewLayout.Add(checkButton, dockFar); + if (buttonEdge != null) + { + _viewLayout.Add(buttonEdge, dockFar); + } + + if (checkButton != null) + { + _viewLayout.Add(checkButton, dockFar); + } } } #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookFull.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookFull.cs index 96a856905..95b30a4aa 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookFull.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookFull.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,12 +25,12 @@ internal class ViewBuilderOutlookFull : ViewBuilderOutlookBase /// /// Gets the top level control of the source. /// - public override Control SeparatorControl => _viewOutlook.ViewControl.ChildControl; + public override Control SeparatorControl => _viewOutlook.ViewControl.ChildControl!; /// /// Gets the box representing the minimum and maximum allowed splitter movement. /// - public override Rectangle SeparatorMoveBox => _viewOutlook.ViewControl.ChildControl.ClientRectangle; + public override Rectangle SeparatorMoveBox => _viewOutlook.ViewControl.ChildControl!.ClientRectangle; /// /// Gets a value indicating if the mode is a tab strip style mode. @@ -46,7 +46,7 @@ public override void SelectedPageChanged() if (Navigator.SelectedPage != null) { // We should have a view for representing the page - if (_pageStackLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageStackLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the check button used to represent the selected page ViewDrawNavCheckButtonBase selected = _pageStackLookup[Navigator.SelectedPage]; @@ -113,10 +113,10 @@ public override bool DesignerGetHitTest(Point pt) if (_viewOutlook.ClientRectangle.Contains(pt)) { // Get the control that owns the view layout - Control owningControl = _viewLayout.OwningControl; + Control? owningControl = _viewLayout.OwningControl; // Convert incoming point from navigator to owning control - pt = owningControl.PointToClient(Navigator.PointToScreen(pt)); + pt = owningControl!.PointToClient(Navigator.PointToScreen(pt)); // Check if any of the stack check buttons want the point foreach (ViewBase item in _viewLayout) @@ -155,7 +155,7 @@ public override void Destruct() _viewOutlook.AnimateStep -= OnViewportAnimation; // Put the child panel back into the navigator - _viewOutlook.RevertParent(Navigator, Navigator.ChildPanel); + _viewOutlook.RevertParent(Navigator, Navigator.ChildPanel!); // Let base class perform common operations base.Destruct(); @@ -164,7 +164,7 @@ public override void Destruct() #region Protected /// - /// Creates and returns the view element that laysout the main client area. + /// Creates and returns the view element that layout the main client area. /// /// protected override ViewBase CreateMainLayout() @@ -185,7 +185,7 @@ protected override ViewBase CreateMainLayout() (Navigator.Outlook.Orientation == Orientation.Vertical), NeedPaintDelegate); // Reparent the child panel that contains the actual pages, into the child control - _viewOutlook.MakeParent(Navigator.ChildPanel); + _viewOutlook.MakeParent(Navigator.ChildPanel!); return _viewOutlook; } @@ -197,7 +197,7 @@ protected override ViewBase CreateMainLayout() /// Orientation of the check button. /// Docking position of the check button. /// - protected override ViewDrawNavOutlookOverflow CreateOverflowItem(KryptonPage? page, + protected override ViewDrawNavOutlookOverflow CreateOverflowItem(KryptonPage? page, VisualOrientation checkButtonOrient, ViewDockStyle dockFar) { @@ -230,7 +230,7 @@ protected override void BringPageIntoView(KryptonPage page) ViewDrawNavCheckButtonBase? viewPage = null; // Make sure only the selected page is checked - foreach (ViewDrawNavCheckButtonBase child in _pageStackLookup.Values) + foreach (ViewDrawNavCheckButtonBase child in _pageStackLookup!.Values) { // Should this check button be selected if (Navigator.SelectedPage == child.Page) @@ -253,7 +253,7 @@ protected override void BringPageIntoView(KryptonPage page) /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -268,7 +268,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan #endregion #region Implementation - private void OnViewportAnimation(object sender, EventArgs e) => Navigator.PerformNeedPaint(true); + private void OnViewportAnimation(object? sender, EventArgs e) => Navigator.PerformNeedPaint(true); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookMini.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookMini.cs index 0457fe06f..e23395485 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookMini.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderOutlookMini.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -89,7 +89,7 @@ public override bool ProcessDialogKey(Keys keyData) _selectedButton.HasFocus = false; // We should have a stack view for the page - if (_pageStackLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageStackLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the associated view element for the page ViewDrawNavCheckButtonBase checkButton = _pageStackLookup[Navigator.SelectedPage]; @@ -118,7 +118,7 @@ public override bool ProcessDialogKey(Keys keyData) if (Navigator.SelectedPage != null) { // We should have a stack view for the page - if (_pageStackLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageStackLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the associated view element for the page ViewDrawNavCheckButtonBase checkButton = _pageStackLookup[Navigator.SelectedPage]; @@ -239,7 +239,7 @@ protected override bool AreMoreButtons() { if (page.LastVisibleSet && page.AreFlagsSet(KryptonPageFlags.PageInOverflowBarForOutlookMode)) { - return (ViewDrawNavOutlookOverflow)_pageOverflowLookup[page]; + return _pageOverflowLookup![page] as ViewDrawNavOutlookOverflow; } } @@ -277,7 +277,7 @@ protected override void UpdateSelectedPageFocus() if (Navigator.SelectedPage != null) { // We should have a stack view for the page - if (_pageStackLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageStackLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the associated view element for the page ViewDrawNavCheckButtonBase checkButton = _pageStackLookup[Navigator.SelectedPage]; @@ -298,7 +298,7 @@ protected override void UpdateSelectedPageFocus() /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderPanel.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderPanel.cs index 2dc774e38..c82bb2554 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderPanel.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Navigator internal class ViewBuilderPanel : ViewBuilderBase { #region Instance Fields - private ViewBase? _oldRoot; + private ViewBase _oldRoot; private ViewDrawPanel _drawPanel; #endregion @@ -31,7 +31,7 @@ internal class ViewBuilderPanel : ViewBuilderBase /// Palette redirector. public override void Construct([DisallowNull] KryptonNavigator navigator, [DisallowNull] ViewManager manager, - [DisallowNull] PaletteRedirect? redirector) + PaletteRedirect redirector) { // Let base class perform common operations if (redirector != null) @@ -40,14 +40,14 @@ public override void Construct([DisallowNull] KryptonNavigator navigator, } // Get the current root element - _oldRoot = ViewManager.Root; + _oldRoot = ViewManager!.Root; // Create a canvas for the background if (_oldRoot != null) { _drawPanel = new ViewDrawPanel(Navigator.StateNormal?.Back!) { - // Put the exisint root into the canvas + // Put the existing root into the canvas _oldRoot }; } @@ -119,18 +119,18 @@ public override void UpdateStatePalettes() if (Navigator.SelectedPage == null) { // Then use the state defined in the navigator itself - back = (Navigator.Enabled ? Navigator.StateNormal?.Back : Navigator.StateDisabled!.Back)!; + back = (Navigator.Enabled ? Navigator.StateNormal?.Back : Navigator.StateDisabled.Back)!; } else { // Use state defined in the selected page if (Navigator.SelectedPage.Enabled) { - back = Navigator.SelectedPage.StateNormal!.Back; + back = Navigator.SelectedPage.StateNormal.Back; } else { - back = Navigator.SelectedPage.StateDisabled!.Back; + back = Navigator.SelectedPage.StateDisabled.Back; // If page is disabled then all of view should look disabled enabled = false; @@ -169,7 +169,7 @@ public override void Destruct() _drawPanel.Clear(); // Put the old root back again - ViewManager.Root = _oldRoot; + ViewManager!.Root = _oldRoot; // Let base class perform common operations base.Destruct(); @@ -182,7 +182,7 @@ public override void Destruct() /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -194,7 +194,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan case @"GroupBackStyle": if (Navigator.StateCommon != null) { - Navigator.StateCommon.HeaderGroup!.BackStyle = Navigator.Group.GroupBackStyle; + Navigator.StateCommon.HeaderGroup.BackStyle = Navigator.Group.GroupBackStyle; } Navigator.PerformNeedPaint(true); break; @@ -207,7 +207,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan #endregion #region Implementation - private void OnEnabledChanged(object sender, EventArgs e) => UpdateStatePalettes(); + private void OnEnabledChanged(object? sender, EventArgs e) => UpdateStatePalettes(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonBase.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonBase.cs index 00f3d1be6..724a0f440 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,7 @@ internal abstract class ViewBuilderStackCheckButtonBase : ViewBuilderBase #region Type Definitons protected class PageToButtonEdge : Dictionary { } #endregion - + #region Instance Fields protected ViewLayoutPageShow _oldRoot; protected ViewLayoutDocker _viewLayout; @@ -38,18 +38,18 @@ protected class PageToButtonEdge : Dictionary { /// Reference to navigator instance. /// Reference to current manager. /// Palette redirector. - public override void Construct([DisallowNull] KryptonNavigator navigator, + public override void Construct([DisallowNull] KryptonNavigator navigator, [DisallowNull] ViewManager manager, - [DisallowNull] PaletteRedirect redirector) + PaletteRedirect redirector) { // Let base class perform common operations base.Construct(navigator, manager, redirector); // Get the current root element - _oldRoot = (ViewLayoutPageShow)ViewManager.Root; + _oldRoot = ViewManager!.Root as ViewLayoutPageShow ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ViewManager.Root))); // Create and initialize all objects - ViewManager.Root = CreateStackCheckButtonView(); + ViewManager.Root = CreateStackCheckButtonView()!; CreateNavCheckButtons(); UpdateCheckButtonStyle(); PostConstruct(); @@ -106,12 +106,12 @@ public override void SelectedPageChanged() if (Navigator.SelectedPage != null) { // We should have a view for representing the page - if (_pageLookup.ContainsKey(Navigator.SelectedPage)) + if (_pageLookup!.ContainsKey(Navigator.SelectedPage)) { // Get the check button used to represent the selected page ViewDrawNavCheckButtonBase selected = _pageLookup[Navigator.SelectedPage]; - // Make sure the layout is upto date + // Make sure the layout is up-to date Navigator.CheckPerformLayout(); // Get the client rectangle of the check button @@ -140,10 +140,10 @@ public override void PageVisibleStateChanged(KryptonPage? page) { // Sometimes the page is noticed as changed in visibility before the // page has been processed and has a view added, so need to check lookup - if (_pageLookup.ContainsKey(page)) + if (_pageLookup.ContainsKey(page!)) { // Reflect new state in the check button - _pageLookup[page].Visible = page.LastVisibleSet; + _pageLookup[page!].Visible = page!.LastVisibleSet; _buttonEdgeLookup[page].Visible = page.LastVisibleSet; // Need to repaint to show the change @@ -165,11 +165,11 @@ public override void PageEnabledStateChanged(KryptonPage? page) { // Sometimes the page is noticed as changed in enabled state before the // page has been processed and has a view added, so need to check lookup - if (_pageLookup.ContainsKey(page)) + if (_pageLookup.ContainsKey(page!)) { // Reflect new state in the check button UpdateStatePalettes(); - _pageLookup[page].Enabled = page.Enabled; + _pageLookup[page!].Enabled = page!.Enabled; // Need to repaint to show the change Navigator.PerformNeedPaint(true); @@ -185,10 +185,21 @@ public override void PageEnabledStateChanged(KryptonPage? page) /// /// Page that has changed. /// Name of property that has changed. - public override void PageAppearanceChanged([DisallowNull] KryptonPage page, [DisallowNull] string property) + public override void PageAppearanceChanged([DisallowNull] KryptonPage page, + [DisallowNull] string property) { - Debug.Assert(page != null); - Debug.Assert(property != null); + Debug.Assert(page is not null); + Debug.Assert(property is not null); + + if (page is null) + { + throw new ArgumentNullException(nameof(page)); + } + + if (property is null) + { + throw new ArgumentNullException(nameof(property)); + } // We are only interested if the page is visible if (page.LastVisibleSet) @@ -277,7 +288,7 @@ public override void Destruct() DestructStackCheckButtonView(); // Put the old root back again - ViewManager.Root = _oldRoot; + ViewManager!.Root = _oldRoot; // Let base class perform common operations base.Destruct(); @@ -484,10 +495,10 @@ public override bool DesignerGetHitTest(Point pt) if (_viewScrollViewport.ClientRectangle.Contains(pt)) { // Get the control that owns the view layout - Control owningControl = _viewLayout.OwningControl; + Control? owningControl = _viewLayout.OwningControl; // Convert incoming point from navigator to owning control - pt = owningControl.PointToClient(Navigator.PointToScreen(pt)); + pt = owningControl!.PointToClient(Navigator.PointToScreen(pt)); // Check if any of the stack check buttons want the point foreach (ViewBase item in _viewLayout) @@ -543,12 +554,12 @@ protected virtual void PostConstruct() /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case @"BorderEdgeStyleStack": - Navigator.StateCommon.BorderEdgeStyle = Navigator.Stack.BorderEdgeStyle; + Navigator.StateCommon!.BorderEdgeStyle = Navigator.Stack.BorderEdgeStyle; Navigator.PerformNeedPaint(true); break; case @"CheckButtonStyleStack": @@ -598,7 +609,7 @@ private void CreateNavCheckButtons() ViewDockStyle dockFar = (stackOrient == Orientation.Vertical ? ViewDockStyle.Bottom : ViewDockStyle.Right); // Cache the border edge palette to use - PaletteBorderEdge buttonEdgePalette = (Navigator.Enabled ? Navigator.StateNormal.BorderEdge : + PaletteBorderEdge buttonEdgePalette = (Navigator.Enabled ? Navigator.StateNormal.BorderEdge : Navigator.StateDisabled.BorderEdge); // Start stacking from the top/left if not explicitly set to be far aligned @@ -677,7 +688,7 @@ private void DestructNavCheckButtons() private void DestructCheckButtons() { // Must tell each check button it is no longer required - foreach (ViewDrawNavCheckButtonBase checkButton in _pageLookup.Values) + foreach (ViewDrawNavCheckButtonBase checkButton in _pageLookup!.Values) { // Must unhook from events checkButton.ButtonDragRectangle -= OnCheckButtonDragRect; @@ -701,14 +712,14 @@ private void DestructCheckButtons() _viewLayout.Remove(buttonEdge); } - // Remove all associations from the lookup dictionarys + // Remove all associations from the lookup dictionaries _pageLookup.Clear(); _buttonEdgeLookup.Clear(); } private void UpdateCheckButtonStyle() { - Navigator.StateCommon.CheckButton.SetStyles(Navigator.Stack.CheckButtonStyle); + Navigator.StateCommon!.CheckButton.SetStyles(Navigator.Stack.CheckButtonStyle); Navigator.OverrideFocus.CheckButton.SetStyles(Navigator.Stack.CheckButtonStyle); // Update each individual button with the new style for remapping page level button specs @@ -741,13 +752,14 @@ private void UpdateSelectedPageFocus() } } + // ToDo: What does 'page' do? private void BringPageIntoView(KryptonPage page) { // Remember the view for the requested page ViewDrawNavCheckButtonBase? viewPage = null; // Make sure only the selected page is checked - foreach (ViewDrawNavCheckButtonBase child in _pageLookup.Values) + foreach (ViewDrawNavCheckButtonBase child in _pageLookup!.Values) { // Should this check button be selected if (Navigator.SelectedPage == child.Page) @@ -780,7 +792,7 @@ private void OnPageInserted(object sender, TypedCollectionEventArgs checkButton.NeedPaint = NeedPaintDelegate; // Set the initial state - checkButton.Visible = e.Item.LastVisibleSet; + checkButton.Visible = e.Item!.LastVisibleSet; checkButton.Enabled = e.Item.Enabled; checkButton.Checked = (Navigator.SelectedPage == e.Item); @@ -795,7 +807,7 @@ private void OnPageInserted(object sender, TypedCollectionEventArgs }; // Add to lookup dictionary - _pageLookup.Add(e.Item, checkButton); + _pageLookup!.Add(e.Item, checkButton); _buttonEdgeLookup.Add(e.Item, buttonEdge); // Set correct ordering and dock setting @@ -811,8 +823,8 @@ private void OnPageRemoved(object sender, TypedCollectionEventArgs if (!Navigator.IsDisposed && _events) { // Get the associated check button view element - ViewDrawNavCheckButtonBase checkButton = _pageLookup[e.Item]; - ViewDrawBorderEdge buttonEdge = _buttonEdgeLookup[e.Item]; + ViewDrawNavCheckButtonBase checkButton = _pageLookup![e.Item!]; + ViewDrawBorderEdge buttonEdge = _buttonEdgeLookup[e.Item!]; // Must unhook from events checkButton.ButtonDragRectangle -= OnCheckButtonDragRect; @@ -827,9 +839,9 @@ private void OnPageRemoved(object sender, TypedCollectionEventArgs _viewLayout.Remove(checkButton); _viewLayout.Remove(buttonEdge); - // Remove associations from the lookup dictionarys - _pageLookup.Remove(e.Item); - _buttonEdgeLookup.Remove(e.Item); + // Remove associations from the lookup dictionaries + _pageLookup.Remove(e.Item!); + _buttonEdgeLookup.Remove(e.Item!); // Set correct ordering and dock setting ReorderCheckButtons(); @@ -839,7 +851,7 @@ private void OnPageRemoved(object sender, TypedCollectionEventArgs } } - private void OnPagesCleared(object sender, EventArgs e) + private void OnPagesCleared(object? sender, EventArgs e) { if (!Navigator.IsDisposed && _events) { @@ -873,7 +885,7 @@ private void ReorderCheckButtons() foreach (KryptonPage page in Navigator.Pages) { // Check that a view element exists for the page - if (_pageLookup.ContainsKey(page)) + if (_pageLookup!.ContainsKey(page)) { // Get the associated view elements ViewDrawNavCheckButtonBase checkButton = _pageLookup[page]; @@ -918,49 +930,55 @@ private VisualOrientation ResolveButtonOrientation() return Navigator.Stack.StackOrientation == Orientation.Vertical ? VisualOrientation.Top : VisualOrientation.Left; + case ButtonOrientation.FixedTop: return VisualOrientation.Top; + case ButtonOrientation.FixedBottom: return VisualOrientation.Bottom; + case ButtonOrientation.FixedLeft: return VisualOrientation.Left; + case ButtonOrientation.FixedRight: return VisualOrientation.Right; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Navigator.Stack.ItemOrientation.ToString()); return VisualOrientation.Top; } } - - private void OnEnabledChanged(object sender, EventArgs e) + + private void OnEnabledChanged(object? sender, EventArgs e) { UpdateStatePalettes(); Navigator.PerformLayout(); Navigator.Invalidate(); } - private void OnAutoSizeChanged(object sender, EventArgs e) => + private void OnAutoSizeChanged(object? sender, EventArgs e) => // Only use minimum instead of preferred if not using AutoSize _oldRoot.SetMinimumAsPreferred(!Navigator.AutoSize); - private void OnViewportAnimation(object sender, EventArgs e) => Navigator.PerformNeedPaint(true); + private void OnViewportAnimation(object? sender, EventArgs e) => Navigator.PerformNeedPaint(true); - private void OnCheckButtonDragRect(object sender, ButtonDragRectangleEventArgs e) + private void OnCheckButtonDragRect(object? sender, ButtonDragRectangleEventArgs e) { // Cast incoming reference to the actual check button view - var reorderItem = (ViewDrawNavCheckButtonStack)sender; + var reorderItem = sender as ViewDrawNavCheckButtonStack ?? throw new ArgumentNullException(nameof(sender)); - e.PreDragOffset = (Navigator.AllowPageReorder && reorderItem.Page.AreFlagsSet(KryptonPageFlags.AllowPageReorder)); + e.PreDragOffset = (Navigator.AllowPageReorder && reorderItem.Page!.AreFlagsSet(KryptonPageFlags.AllowPageReorder)); Rectangle dragRect = Rectangle.Union(e.DragRect, _viewScrollViewport.ClientRectangle); dragRect.Inflate(new Size(15, 15)); e.DragRect = dragRect; } - private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) + private void OnCheckButtonDragOffset(object? sender, ButtonDragOffsetEventArgs e) { // Cast incoming reference to the actual check button view - var reorderView = (ViewDrawNavCheckButtonStack)sender; + var reorderView = sender as ViewDrawNavCheckButtonStack ?? throw new ArgumentNullException(nameof(sender)); // Scan the collection of children var foundReorderView = false; @@ -968,8 +986,8 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) foreach (KryptonPage page in Navigator.Pages) { // If the mouse is over this button - var childView = (ViewDrawNavCheckButtonStack)_pageLookup[page]; - if (childView.ClientRectangle.Contains(e.PointOffset)) + var childView = _pageLookup![page] as ViewDrawNavCheckButtonStack; + if (childView!.ClientRectangle.Contains(e.PointOffset)) { // Only interested if mouse over a different check button if (childView != reorderView) @@ -995,19 +1013,19 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) // ourself as the moved button. Otherwise we just end up toggling back and forth. if (childRect.Contains(e.PointOffset)) { - KryptonPage movePage = PageFromView(reorderView); - KryptonPage targetPage = PageFromView(childView); - var reorder = new PageReorderEventArgs(movePage, targetPage, false); + KryptonPage? movePage = PageFromView(reorderView); + KryptonPage? targetPage = PageFromView(childView); + var reorder = new PageReorderEventArgs(movePage!, targetPage!, false); // Give event handlers a chance to cancel this reorder Navigator.OnBeforePageReorder(reorder); if (!reorder.Cancel) { - Navigator.Pages.MoveAfter(movePage, PageFromView(childView)); + Navigator.Pages.MoveAfter(movePage!, PageFromView(childView)!); RecreateView(); Navigator.PerformLayout(); Navigator.Refresh(); - Navigator.OnTabMoved(new TabMovedEventArgs(movePage, Navigator.Pages.IndexOf(movePage))); + Navigator.OnTabMoved(new TabMovedEventArgs(movePage!, Navigator.Pages.IndexOf(movePage!))); } } } @@ -1026,19 +1044,19 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) // ourself as the moved button. Otherwise we just end up toggling back and forth. if (childRect.Contains(e.PointOffset)) { - KryptonPage movePage = PageFromView(reorderView); - KryptonPage targetPage = PageFromView(childView); - var reorder = new PageReorderEventArgs(movePage, targetPage, true); + KryptonPage? movePage = PageFromView(reorderView); + KryptonPage? targetPage = PageFromView(childView); + var reorder = new PageReorderEventArgs(movePage!, targetPage!, true); // Give event handlers a chance to cancel this reorder Navigator.OnBeforePageReorder(reorder); if (!reorder.Cancel) { - Navigator.Pages.MoveBefore(movePage, PageFromView(childView)); + Navigator.Pages.MoveBefore(movePage!, PageFromView(childView)!); RecreateView(); Navigator.PerformLayout(); Navigator.Refresh(); - Navigator.OnTabMoved(new TabMovedEventArgs(movePage, Navigator.Pages.IndexOf(movePage))); + Navigator.OnTabMoved(new TabMovedEventArgs(movePage!, Navigator.Pages.IndexOf(movePage!))); } } } @@ -1053,8 +1071,8 @@ private void OnCheckButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) private void RecreateView() { - // Remove all the existing layout content except the old root at postiion 0 - ViewBase firstChild = _viewLayout[0]; + // Remove all the existing layout content except the old root at position 0 + ViewBase firstChild = _viewLayout[0]!; _viewLayout.Clear(); _viewLayout.Add(firstChild); @@ -1069,26 +1087,26 @@ private void RecreateView() foreach (KryptonPage page in Navigator.Pages) { // Grab the page associated view elements - var checkButton = (ViewDrawNavCheckButtonStack)_pageLookup[page]; + var checkButton = _pageLookup![page] as ViewDrawNavCheckButtonStack; ViewDrawBorderEdge buttonEdge = _buttonEdgeLookup[page]; // Add to the child collection with the correct docking style if (dockTopLeft) { - _viewLayout.Insert(1, checkButton); + _viewLayout.Insert(1, checkButton!); _viewLayout.Insert(1, buttonEdge); _viewLayout.SetDock(buttonEdge, dockNear); - _viewLayout.SetDock(checkButton, dockNear); + _viewLayout.SetDock(checkButton!, dockNear); } else { _viewLayout.Add(buttonEdge, dockFar); - _viewLayout.Add(checkButton, dockFar); + _viewLayout.Add(checkButton!, dockFar); } // All entries after the selected page are docked at the bottom/right unless // we have been set to stack near or far, in which case we do not change. - if (checkButton.Checked && (alignment == RelativePositionAlign.Center)) + if (checkButton!.Checked && (alignment == RelativePositionAlign.Center)) { dockTopLeft = false; } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonGroup.cs index 3cba7307e..16b490154 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -62,12 +62,12 @@ public override void UpdateStatePalettes() // Use states defined in the selected page if (Navigator.SelectedPage.Enabled) { - back = Navigator.SelectedPage.StateNormal.HeaderGroup.Back; + back = Navigator.SelectedPage!.StateNormal.HeaderGroup.Back; border = Navigator.SelectedPage.StateNormal.HeaderGroup.Border; } else { - back = Navigator.SelectedPage.StateDisabled.HeaderGroup.Back; + back = Navigator.SelectedPage!.StateDisabled.HeaderGroup.Back; border = Navigator.SelectedPage.StateDisabled.HeaderGroup.Border; // If page is disabled then all of view should look disabled @@ -102,15 +102,15 @@ public override void UpdateStatePalettes() Navigator.StateDisabled.BorderEdge); // Create the scrolling viewport and pass in the _viewLayout as the content to scroll - _viewScrollViewport = new ViewLayoutScrollViewport(Navigator, _viewLayout, buttonEdgePalette, null, + _viewScrollViewport = new ViewLayoutScrollViewport(Navigator, _viewLayout, buttonEdgePalette, null, PaletteMetricPadding.None, PaletteMetricInt.None, VisualOrientation.Top, RelativePositionAlign.Near, - Navigator.Stack.StackAnimation, + Navigator.Stack.StackAnimation, (Navigator.Stack.StackOrientation == Orientation.Vertical), NeedPaintDelegate); // Reparent the child panel that contains the actual pages, into the child control - _viewScrollViewport.MakeParent(Navigator.ChildPanel); + _viewScrollViewport.MakeParent(Navigator.ChildPanel!); // Create the top level group view _viewGroup = new ViewDrawDocker(Navigator.StateNormal.HeaderGroup.Back, @@ -134,7 +134,7 @@ public override void UpdateStatePalettes() protected override void DestructStackCheckButtonView() { // Put the child panel back into the navigator - _viewScrollViewport.RevertParent(Navigator, Navigator.ChildPanel); + _viewScrollViewport.RevertParent(Navigator, Navigator.ChildPanel!); // Dispose of resources _viewGroup.Dispose(); diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonHeaderGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonHeaderGroup.cs index 1c4c21229..48d18581c 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewBuilderStackCheckButtonHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Navigator internal class ViewBuilderStackCheckButtonHeaderGroup : ViewBuilderStackCheckButtonBase { #region Instance Fields - private ViewletHeaderGroup _headerGroup; + private ViewletHeaderGroup? _headerGroup; #endregion #region Public Overrides @@ -30,7 +30,7 @@ internal class ViewBuilderStackCheckButtonHeaderGroup : ViewBuilderStackCheckBut public override ButtonSpec? ButtonSpecFromView(ViewBase element) { // Check base class for page specific button specs - ButtonSpec bs = base.ButtonSpecFromView(element) ?? _headerGroup.ButtonSpecFromView(element); + ButtonSpec? bs = base.ButtonSpecFromView(element) ?? _headerGroup?.ButtonSpecFromView(element); // Delegate lookup to the viewlet that has the button spec manager @@ -43,7 +43,7 @@ internal class ViewBuilderStackCheckButtonHeaderGroup : ViewBuilderStackCheckBut public override void SelectedPageChanged() { // Ask the header group to update the - _headerGroup.UpdateButtons(); + _headerGroup?.UpdateButtons(); // Let base class perform common actions base.SelectedPageChanged(); @@ -55,7 +55,7 @@ public override void SelectedPageChanged() public override void PageCollectionChanged() { UpdateStatePalettes(); - _headerGroup.UpdateButtons(); + _headerGroup?.UpdateButtons(); // Let base class do standard work base.PageCollectionChanged(); @@ -69,13 +69,13 @@ public override void PageVisibleStateChanged(KryptonPage? page) { // If is possible the header group has not been created yet // Ensure buttons are recreated to reflect different previous/next visibility - _headerGroup.UpdateButtons(); + _headerGroup?.UpdateButtons(); // Let base class do standard work base.PageVisibleStateChanged(page); } - /// + /// /// Process a change in the enabled state for a page. /// /// Page that has changed enabled state. @@ -88,7 +88,7 @@ public override void PageEnabledStateChanged(KryptonPage? page) { // Update to use the correct enabled/disabled palette UpdateStatePalettes(); - _headerGroup.UpdateButtons(); + _headerGroup?.UpdateButtons(); // Need to repaint to show the change Navigator.PerformNeedPaint(true); @@ -105,7 +105,7 @@ public override void PageEnabledStateChanged(KryptonPage? page) public override void UpdateStatePalettes() { // Update palettes for the header group - _headerGroup.UpdateStatePalettes(); + _headerGroup?.UpdateStatePalettes(); // Let base class do standard work base.UpdateStatePalettes(); @@ -117,7 +117,7 @@ public override void UpdateStatePalettes() /// Point in screen coordinates. public override Point GetContextShowPoint() => // Ask the header group for screen point of context button - _headerGroup.GetContextShowPoint(); + _headerGroup!.GetContextShowPoint(); /// /// Is the provided over a part of the view that wants the mouse. @@ -126,7 +126,7 @@ public override Point GetContextShowPoint() => /// True if the view wants the mouse position; otherwise false. public override bool DesignerGetHitTest(Point pt) => // Check if any of the button specs want the point - _headerGroup.DesignerGetHitTest(pt) || base.DesignerGetHitTest(pt); + _headerGroup!.DesignerGetHitTest(pt) || base.DesignerGetHitTest(pt); // Let base class search individual stack items /// @@ -137,7 +137,7 @@ public override bool DesignerGetHitTest(Point pt) => public override ButtonEnabled NextActionEnabled(DirectionButtonAction action) { // Ask the header group to update the action - action = _headerGroup.NextActionEnabled(action); + action = _headerGroup!.NextActionEnabled(action); // Let base class perform basic action calculations return base.NextActionEnabled(action); @@ -151,7 +151,7 @@ public override ButtonEnabled NextActionEnabled(DirectionButtonAction action) public override void PerformNextAction(DirectionButtonAction action, KryptonPage? page) { // Ask the header group to update the action - action = _headerGroup.NextActionEnabled(action); + action = _headerGroup!.NextActionEnabled(action); // Let base class perform basic actions base.PerformNextAction(action, page); @@ -165,7 +165,7 @@ public override void PerformNextAction(DirectionButtonAction action, KryptonPage public override ButtonEnabled PreviousActionEnabled(DirectionButtonAction action) { // Ask the header group to update the action - action = _headerGroup.PreviousActionEnabled(action); + action = _headerGroup!.PreviousActionEnabled(action); // Let base class perform basic action calculations return base.PreviousActionEnabled(action); @@ -179,7 +179,7 @@ public override ButtonEnabled PreviousActionEnabled(DirectionButtonAction action public override void PerformPreviousAction(DirectionButtonAction action, KryptonPage? page) { // Ask the header group to update the action - action = _headerGroup.PreviousActionEnabled(action); + action = _headerGroup!.PreviousActionEnabled(action); // Let base class perform basic actions base.PerformPreviousAction(action, page); @@ -192,10 +192,10 @@ public override void PerformPreviousAction(DirectionButtonAction action, Krypton /// /// Source of the event. /// Property changed details. - protected override void OnViewBuilderPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnViewBuilderPropertyChanged(object? sender, PropertyChangedEventArgs e) { // Let the header group process the property - _headerGroup.ViewBuilderPropertyChanged(e); + _headerGroup?.ViewBuilderPropertyChanged(e); // Let the base process it as well base.OnViewBuilderPropertyChanged(sender, e); @@ -205,7 +205,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan /// Create the mode specific view hierarchy. /// /// View element to use as base of hierarchy. - protected override ViewBase? CreateStackCheckButtonView() + protected override ViewBase CreateStackCheckButtonView() { // Let base class do common stuff first base.CreateStackCheckButtonView(); @@ -221,12 +221,12 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan _viewScrollViewport = new ViewLayoutScrollViewport(Navigator, _viewLayout, buttonEdgePalette, null, PaletteMetricPadding.None, PaletteMetricInt.None, VisualOrientation.Top, RelativePositionAlign.Near, - Navigator.Stack.StackAnimation, + Navigator.Stack.StackAnimation, (Navigator.Stack.StackOrientation == Orientation.Vertical), NeedPaintDelegate); // Reparent the child panel that contains the actual pages, into the child control - _viewScrollViewport.MakeParent(Navigator.ChildPanel); + _viewScrollViewport.MakeParent(Navigator.ChildPanel!); // Create the header group and fill with the view layout _headerGroup = new ViewletHeaderGroup(Navigator, Redirector, NeedPaintDelegate); @@ -244,7 +244,7 @@ protected override void OnViewBuilderPropertyChanged(object sender, PropertyChan protected override void PostConstruct() { // Ask the header group to finish the create phase - _headerGroup.PostCreate(); + _headerGroup?.PostCreate(); // Let base class perform standard actions base.PostConstruct(); @@ -256,10 +256,10 @@ protected override void PostConstruct() protected override void DestructStackCheckButtonView() { // Put the child panel back into the navigator - _viewScrollViewport.RevertParent(Navigator, Navigator.ChildPanel); + _viewScrollViewport.RevertParent(Navigator, Navigator.ChildPanel!); // Destruct the header group viewlet - _headerGroup.Destruct(); + _headerGroup?.Destruct(); // Let base class do common stuff base.DestructStackCheckButtonView(); diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroup.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroup.cs index 56257d93f..2dce1255c 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ internal class ViewletHeaderGroup private ViewDrawContent _viewContentPrimary; private ViewDrawDocker _viewHeadingSecondary; private ViewDrawContent _viewContentSecondary; - private ButtonSpecManagerDraw _buttonManager; + private ButtonSpecManagerDraw? _buttonManager; // Can be null in the designer private readonly NeedPaintHandler _needPaintDelegate; #endregion @@ -44,9 +44,9 @@ public ViewletHeaderGroup([DisallowNull] KryptonNavigator navigator, Debug.Assert(needPaintDelegate != null); // Remember references - Navigator = navigator; - Redirector = redirector; - _needPaintDelegate = needPaintDelegate; + Navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); + Redirector = redirector ?? throw new ArgumentNullException(nameof(redirector)); + _needPaintDelegate = needPaintDelegate ?? throw new ArgumentNullException(nameof(needPaintDelegate)); } #endregion @@ -84,7 +84,7 @@ public void PostCreate() UpdateStatePalettes(); // Force buttons to be recreated in the headers - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); } /// @@ -92,11 +92,14 @@ public void PostCreate() /// public void Destruct() { - // Remove paint delegate so we can be garbage collected - _buttonManager.NeedPaint = null; + if (_buttonManager != null) + { + // Remove paint delegate so we can be garbage collected + _buttonManager.NeedPaint = null; - // Cleanup the button manager events and processing - _buttonManager.Destruct(); + // Cleanup the button manager events and processing + _buttonManager.Destruct(); + } // Remove the old root from the canvas _viewGroup.Dispose(); @@ -110,14 +113,14 @@ public void Destruct() /// Reference to ButtonSpec; otherwise null. public ButtonSpec? ButtonSpecFromView(ViewBase element) => // Ask the button manager for the button spec for this element - _buttonManager.ButtonSpecFromView(element); + _buttonManager?.ButtonSpecFromView(element); /// /// Recreate the buttons to reflect a change in selected page. /// public void UpdateButtons() => // Ensure buttons are recreated to reflect different page - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); /// /// Ensure the correct state palettes are being used. @@ -162,7 +165,7 @@ public void UpdateStatePalettes() public Point GetContextShowPoint() { // Get the display rectangle of the context button - Rectangle rect = _buttonManager.GetButtonRectangle(Navigator.Button.ContextButton); + Rectangle rect = _buttonManager!.GetButtonRectangle(Navigator.Button.ContextButton); // We want the context menu to show just below the button var pt = new Point(rect.Left, rect.Bottom + 3); @@ -178,7 +181,7 @@ public Point GetContextShowPoint() /// True if the view wants the mouse position; otherwise false. public bool DesignerGetHitTest(Point pt) => // Check if any of the buttons want the point - _buttonManager.DesignerGetHitTest(pt); + _buttonManager?.DesignerGetHitTest(pt) ?? false; /// /// Get the appropriate action for the header group next action. @@ -221,23 +224,23 @@ public virtual void ViewBuilderPropertyChanged(PropertyChangedEventArgs e) switch (e.PropertyName) { case @"HeaderStylePrimary": - SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); + SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon!.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); UpdateStatePalettes(); Navigator.PerformNeedPaint(true); break; case @"HeaderStyleSecondary": - SetHeaderStyle(_viewHeadingSecondary, Navigator.StateCommon.HeaderGroup.HeaderSecondary, Navigator.Header.HeaderStyleSecondary); + SetHeaderStyle(_viewHeadingSecondary, Navigator.StateCommon!.HeaderGroup.HeaderSecondary, Navigator.Header.HeaderStyleSecondary); UpdateStatePalettes(); Navigator.PerformNeedPaint(true); break; case @"HeaderPositionPrimary": SetHeaderPosition(_viewHeadingPrimary, _viewContentPrimary, Navigator.Header.HeaderPositionPrimary); - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); Navigator.PerformNeedPaint(true); break; case @"HeaderPositionSecondary": SetHeaderPosition(_viewHeadingSecondary, _viewContentSecondary, Navigator.Header.HeaderPositionSecondary); - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); Navigator.PerformNeedPaint(true); break; case @"HeaderVisiblePrimary": @@ -255,7 +258,7 @@ public virtual void ViewBuilderPropertyChanged(PropertyChangedEventArgs e) case @"ContextButtonDisplay": case @"CloseButtonDisplay": case nameof(ButtonDisplayLogic): - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); break; } } @@ -353,7 +356,7 @@ private void CreateButtonSpecManager() => // Create button specification collection manager _buttonManager = new ButtonSpecManagerDraw(Navigator, Redirector, Navigator.Button.ButtonSpecs, Navigator.FixedSpecs, new[] { _viewHeadingPrimary, _viewHeadingSecondary }, - new IPaletteMetric[] { Navigator.StateCommon.HeaderGroup.HeaderPrimary, Navigator.StateCommon.HeaderGroup.HeaderSecondary }, + new IPaletteMetric[] { Navigator.StateCommon!.HeaderGroup.HeaderPrimary, Navigator.StateCommon.HeaderGroup.HeaderSecondary }, new[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary, PaletteMetricInt.HeaderButtonEdgeInsetSecondary }, new[] { PaletteMetricPadding.HeaderButtonPaddingPrimary, PaletteMetricPadding.HeaderButtonPaddingSecondary }, Navigator.CreateToolStripRenderer, @@ -366,7 +369,7 @@ private void CreateButtonSpecManager() => private void UpdateHeaders() { - SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); + SetHeaderStyle(_viewHeadingPrimary, Navigator.StateCommon!.HeaderGroup.HeaderPrimary, Navigator.Header.HeaderStylePrimary); SetHeaderStyle(_viewHeadingSecondary, Navigator.StateCommon.HeaderGroup.HeaderSecondary, Navigator.Header.HeaderStyleSecondary); SetHeaderPosition(_viewHeadingPrimary, _viewContentPrimary, Navigator.Header.HeaderPositionPrimary); SetHeaderPosition(_viewHeadingSecondary, _viewContentSecondary, Navigator.Header.HeaderPositionSecondary); @@ -381,53 +384,63 @@ private void SetHeaderStyle(ViewDrawDocker drawDocker, switch (style) { case HeaderStyle.Primary: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetPrimary, PaletteMetricPadding.HeaderButtonPaddingPrimary); break; + case HeaderStyle.Secondary: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetSecondary, PaletteMetricPadding.HeaderButtonPaddingSecondary); break; + case HeaderStyle.DockActive: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetDockActive, PaletteMetricPadding.HeaderButtonPaddingDockActive); break; + case HeaderStyle.DockInactive: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetDockInactive, PaletteMetricPadding.HeaderButtonPaddingDockInactive); break; + case HeaderStyle.Form: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetForm, PaletteMetricPadding.HeaderButtonPaddingForm); break; + case HeaderStyle.Calendar: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCalendar, PaletteMetricPadding.HeaderButtonPaddingCalendar); break; + case HeaderStyle.Custom1: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom1, PaletteMetricPadding.HeaderButtonPaddingCustom1); break; + case HeaderStyle.Custom2: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom2, PaletteMetricPadding.HeaderButtonPaddingCustom2); break; + case HeaderStyle.Custom3: - _buttonManager.SetDockerMetrics(drawDocker, palette, + _buttonManager?.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom3, PaletteMetricPadding.HeaderButtonPaddingCustom3); break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } } @@ -461,15 +474,15 @@ private void SetHeaderPosition(ViewDrawCanvas canvas, } } - private void SetPalettes(PaletteHeaderGroup? palette) + private void SetPalettes(PaletteHeaderGroup palette) { _viewGroup.SetPalettes(palette.Back, palette.Border, palette); _viewHeadingPrimary.SetPalettes(palette.HeaderPrimary.Back, palette.HeaderPrimary.Border, palette.HeaderPrimary); _viewHeadingSecondary.SetPalettes(palette.HeaderSecondary.Back, palette.HeaderSecondary.Border, palette.HeaderSecondary); - _buttonManager.SetDockerMetrics(_viewHeadingPrimary, palette.HeaderPrimary); - _buttonManager.SetDockerMetrics(_viewHeadingSecondary, palette.HeaderSecondary); + _buttonManager?.SetDockerMetrics(_viewHeadingPrimary, palette.HeaderPrimary); + _buttonManager?.SetDockerMetrics(_viewHeadingSecondary, palette.HeaderSecondary); _viewContentPrimary.SetPalette(palette.HeaderPrimary.Content); _viewContentSecondary.SetPalette(palette.HeaderSecondary.Content); @@ -482,22 +495,22 @@ private void SetEnabled(bool enabled) _viewHeadingSecondary.Enabled = enabled; _viewContentPrimary.Enabled = enabled; _viewContentSecondary.Enabled = enabled; - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); } - private void OnDragStart(object sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, null); + private void OnDragStart(object? sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, null); - private void OnDragMove(object sender, PointEventArgs e) => Navigator.InternalDragMove(e); + private void OnDragMove(object? sender, PointEventArgs e) => Navigator.InternalDragMove(e); - private void OnDragEnd(object sender, PointEventArgs e) => Navigator.InternalDragEnd(e); + private void OnDragEnd(object? sender, PointEventArgs e) => Navigator.InternalDragEnd(e); - private void OnDragQuit(object sender, EventArgs e) => Navigator.InternalDragQuit(); + private void OnDragQuit(object? sender, EventArgs e) => Navigator.InternalDragQuit(); - private void OnLeftMouseDown(object sender, EventArgs e) => Navigator.OnPrimaryHeaderLeftClicked(e); + private void OnLeftMouseDown(object? sender, EventArgs e) => Navigator.OnPrimaryHeaderLeftClicked(e); - private void OnRightMouseDown(object sender, EventArgs e) => Navigator.OnPrimaryHeaderRightClicked(e); + private void OnRightMouseDown(object? sender, EventArgs e) => Navigator.OnPrimaryHeaderRightClicked(e); - private void OnLeftDoubleClick(object sender, EventArgs e) => Navigator.OnPrimaryHeaderDoubleClicked(e); + private void OnLeftDoubleClick(object? sender, EventArgs e) => Navigator.OnPrimaryHeaderDoubleClicked(e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroupOutlook.cs b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroupOutlook.cs index b42df2cc3..88e8584a7 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroupOutlook.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Builder/ViewletHeaderGroupOutlook.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ internal class ViewletHeaderGroupOutlook : ViewletHeaderGroup /// Palette redirector. /// Delegate for notifying paint requests. public ViewletHeaderGroupOutlook(KryptonNavigator navigator, - PaletteRedirect? redirector, + PaletteRedirect redirector, NeedPaintHandler needPaintDelegate) : base(navigator, redirector, needPaintDelegate) => // Are we using the full or mini outlook mode. diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBar.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBar.cs index 1a4f424d1..c8d5d10c5 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBar.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ internal class ViewDrawNavCheckButtonBar : ViewDrawNavCheckButtonBase, public ViewDrawNavCheckButtonBar(KryptonNavigator navigator, KryptonPage? page, VisualOrientation orientation) - : base(navigator, page, orientation) + : base(navigator, page!, orientation) { } @@ -53,8 +53,8 @@ public ViewDrawNavCheckButtonBar(KryptonNavigator navigator, IPaletteTriple statePressed, IPaletteTriple stateSelected, IPaletteTriple stateFocused) - : base(navigator, page, orientation, stateDisabled, - stateNormal, stateTracking, statePressed, + : base(navigator, page, orientation, stateDisabled, + stateNormal, stateTracking, statePressed, stateSelected, stateFocused) { } @@ -83,19 +83,19 @@ public override string ToString() => /// /// The state for which the image is needed. /// Image value. - public override Image? GetImage(PaletteState state) => Page.GetImageMapping(Navigator.Bar.BarMapImage); + public override Image? GetImage(PaletteState state) => Page?.GetImageMapping(Navigator.Bar.BarMapImage); /// /// Gets the content short text. /// /// String value. - public override string GetShortText() => Page.GetTextMapping(Navigator.Bar.BarMapText); + public override string GetShortText() => Page?.GetTextMapping(Navigator.Bar.BarMapText)!; /// /// Gets the content long text. /// /// String value. - public override string GetLongText() => Page.GetTextMapping(Navigator.Bar.BarMapExtraText); + public override string GetLongText() => Page?.GetTextMapping(Navigator.Bar.BarMapExtraText)!; #endregion @@ -105,7 +105,7 @@ public override string ToString() => /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnClick(object sender, EventArgs e) + protected override void OnClick(object? sender, EventArgs e) { base.OnClick(sender, e); @@ -120,7 +120,7 @@ protected override void OnClick(object sender, EventArgs e) case NavigatorMode.BarTabOnly: case NavigatorMode.HeaderBarCheckButtonOnly: // Show popup for this page - Navigator.ShowPopupPage(Page, this, null); + Navigator.ShowPopupPage(Page!, this, null); break; } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBase.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBase.cs index 6414682c6..74a7b6572 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBase.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -58,16 +58,16 @@ internal abstract class ViewDrawNavCheckButtonBase : ViewDrawButton, /// Orientation for the check button. /// Button is used on the overflow bar. public ViewDrawNavCheckButtonBase(KryptonNavigator navigator, - [DisallowNull] KryptonPage? page, + KryptonPage? page, VisualOrientation orientation, bool overflow) : this(navigator, page, orientation, - page.StateDisabled.OverflowButton, - page.StateNormal.OverflowButton, - page.StateTracking.OverflowButton, - page.StatePressed.OverflowButton, - page.StateSelected.OverflowButton, - page.OverrideFocus.OverflowButton) + page?.StateDisabled?.OverflowButton!, + page?.StateNormal?.OverflowButton!, + page?.StateTracking.OverflowButton!, + page?.StatePressed.OverflowButton!, + page?.StateSelected.OverflowButton!, + page?.OverrideFocus?.OverflowButton!) { } @@ -78,15 +78,15 @@ public ViewDrawNavCheckButtonBase(KryptonNavigator navigator, /// Page this check button represents. /// Orientation for the check button. public ViewDrawNavCheckButtonBase(KryptonNavigator navigator, - [DisallowNull] KryptonPage? page, + KryptonPage? page, VisualOrientation orientation) : this(navigator, page, orientation, - page.StateDisabled.CheckButton, - page.StateNormal.CheckButton, - page.StateTracking.CheckButton, - page.StatePressed.CheckButton, - page.StateSelected.CheckButton, - page.OverrideFocus.CheckButton) + page?.StateDisabled?.CheckButton!, + page?.StateNormal?.CheckButton!, + page?.StateTracking.CheckButton!, + page?.StatePressed.CheckButton!, + page?.StateSelected.CheckButton!, + page?.OverrideFocus.CheckButton!) { } @@ -111,19 +111,19 @@ public ViewDrawNavCheckButtonBase([DisallowNull] KryptonNavigator navigator, IPaletteTriple statePressed, IPaletteTriple stateSelected, IPaletteTriple stateFocused) - : base(stateDisabled, stateNormal, stateTracking, + : base(stateDisabled, stateNormal, stateTracking, statePressed, null, null, orientation, true) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); - Navigator = navigator; + Navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); _page = page; _lastClick = DateTime.Now.AddDays(-1); // Associate the page component with this view element Component = page; - // Prevent user from unchecking the selected check button + // Prevent user from un-checking the selected check button AllowUncheck = false; // Set the source for values to ourself @@ -148,9 +148,9 @@ public ViewDrawNavCheckButtonBase([DisallowNull] KryptonNavigator navigator, if (AllowButtonSpecs) { // Create button specification collection manager - ButtonSpecManager = new ButtonSpecNavManagerLayoutBar(Navigator, Navigator.InternalRedirector, Page.ButtonSpecs, null, + ButtonSpecManager = new ButtonSpecNavManagerLayoutBar(Navigator, Navigator.InternalRedirector, Page?.ButtonSpecs, null, new[] { LayoutDocker }, - new IPaletteMetric[] { Navigator.StateCommon }, + new IPaletteMetric[] { Navigator.StateCommon! }, new[] { PaletteMetricInt.PageButtonInset }, new[] { PaletteMetricInt.PageButtonInset }, new[] { PaletteMetricPadding.PageButtonPadding }, @@ -400,8 +400,9 @@ protected virtual IMouseController CreateMouseController() KeyController = _buttonController; // Create two decorators in order to support tooltips and hover events - var toolTipController = new ToolTipController(Navigator.ToolTipManager, this, _buttonController); - var hoverController = new ToolTipController(Navigator.HoverManager, this, toolTipController); + var toolTipController = new ToolTipController(Navigator.ToolTipManager!, this, _buttonController); + var hoverController = new ToolTipController(Navigator.HoverManager!, this, toolTipController); + return hoverController; } #endregion @@ -421,21 +422,21 @@ protected virtual IMouseController CreateMouseController() /// /// Source of the event. /// An EventArgs containing the event data. - protected virtual void OnClick(object sender, EventArgs e) + protected virtual void OnClick(object? sender, EventArgs e) { // Generate click event for the page header - Navigator.OnTabClicked(new KryptonPageEventArgs(_page, Navigator.Pages.IndexOf(_page))); + Navigator.OnTabClicked(new KryptonPageEventArgs(_page, Navigator.Pages.IndexOf(_page!))); // If this click is within the double click time of the last one, generate the double click event. DateTime now = DateTime.Now; if ((now - _lastClick).TotalMilliseconds < SystemInformation.DoubleClickTime) { // Tell button controller to abort any drag attempt - _buttonController.ClearDragRect(); + _buttonController!.ClearDragRect(); // Generate click event for the page header - Navigator.OnTabDoubleClicked(new KryptonPageEventArgs(_page, Navigator.Pages.IndexOf(_page))); - + Navigator.OnTabDoubleClicked(new KryptonPageEventArgs(_page, Navigator.Pages.IndexOf(_page!))); + // Prevent a third click causing another double click by resetting the now time backwards now = now.AddDays(-1); } @@ -446,7 +447,7 @@ protected virtual void OnClick(object sender, EventArgs e) if ((Navigator.SelectedPage != _page) && Navigator.AllowTabSelect) { // This event might have caused the page to be removed or hidden and so check the page is still present before selecting it - if (Navigator.ChildPanel?.Controls.Contains(_page) == true && _page.LastVisibleSet) + if (Navigator.ChildPanel?.Controls.Contains(_page) == true && _page!.LastVisibleSet) { Navigator.SelectedPage = _page; } @@ -458,7 +459,7 @@ protected virtual void OnClick(object sender, EventArgs e) /// /// Source of the event. /// An EventArgs containing the event data. - protected virtual void OnRightClick(object sender, MouseEventArgs e) + protected virtual void OnRightClick(object? sender, MouseEventArgs e) { // Can only select the page if not already selected and allowed to select a tab if ((Navigator.SelectedPage != _page) && Navigator.AllowTabSelect) @@ -467,7 +468,7 @@ protected virtual void OnRightClick(object sender, MouseEventArgs e) } // Generate event so user can decide what, if any, context menu to show - var scma = new ShowContextMenuArgs(_page, Navigator.Pages.IndexOf(_page)); + var scma = new ShowContextMenuArgs(_page, Navigator.Pages.IndexOf(_page!)); Navigator.OnShowContextMenu(scma); // Do we need to show a context menu @@ -475,13 +476,13 @@ protected virtual void OnRightClick(object sender, MouseEventArgs e) { if (CommonHelper.ValidKryptonContextMenu(scma.KryptonContextMenu)) { - scma.KryptonContextMenu.Show(Navigator, Navigator.PointToScreen(new Point(e.X, e.Y))); + scma.KryptonContextMenu!.Show(Navigator, Navigator.PointToScreen(new Point(e.X, e.Y))); } - else + else { if (CommonHelper.ValidContextMenuStrip(scma.ContextMenuStrip)) { - scma.ContextMenuStrip.Show(Navigator.PointToScreen(new Point(e.X, e.Y))); + scma.ContextMenuStrip!.Show(Navigator.PointToScreen(new Point(e.X, e.Y))); } } } @@ -489,17 +490,17 @@ protected virtual void OnRightClick(object sender, MouseEventArgs e) #endregion #region Implementation - private void OnDragStart(object sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, _page); + private void OnDragStart(object? sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, _page); - private void OnDragMove(object sender, PointEventArgs e) => Navigator.InternalDragMove(e); + private void OnDragMove(object? sender, PointEventArgs e) => Navigator.InternalDragMove(e); - private void OnDragEnd(object sender, PointEventArgs e) => Navigator.InternalDragEnd(e); + private void OnDragEnd(object? sender, PointEventArgs e) => Navigator.InternalDragEnd(e); - private void OnDragQuit(object sender, EventArgs e) => Navigator.InternalDragQuit(); + private void OnDragQuit(object? sender, EventArgs e) => Navigator.InternalDragQuit(); - private void OnButtonDragRectangle(object sender, ButtonDragRectangleEventArgs e) => ButtonDragRectangle?.Invoke(this, e); + private void OnButtonDragRectangle(object? sender, ButtonDragRectangleEventArgs e) => ButtonDragRectangle?.Invoke(this, e); - private void OnButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) => ButtonDragOffset?.Invoke(this, e); + private void OnButtonDragOffset(object? sender, ButtonDragOffsetEventArgs e) => ButtonDragOffset?.Invoke(this, e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonStack.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonStack.cs index 572d05824..abaf19378 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonStack.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonStack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -48,8 +48,8 @@ public override string ToString() => public override void UpdateButtonSpecMapping() { // Define a default mapping for text color and recreate to use that new setting - ButtonSpecManager.SetRemapTarget(Navigator.Stack.CheckButtonStyle); - ButtonSpecManager.RecreateButtons(); + ButtonSpecManager?.SetRemapTarget(Navigator.Stack.CheckButtonStyle); + ButtonSpecManager?.RecreateButtons(); } #endregion @@ -59,19 +59,19 @@ public override void UpdateButtonSpecMapping() /// /// The state for which the image is needed. /// Image value. - public override Image? GetImage(PaletteState state) => Page.GetImageMapping(Navigator.Stack.StackMapImage); + public override Image? GetImage(PaletteState state) => Page?.GetImageMapping(Navigator.Stack.StackMapImage); /// /// Gets the content short text. /// /// String value. - public override string GetShortText() => Page.GetTextMapping(Navigator.Stack.StackMapText); + public override string GetShortText() => Page?.GetTextMapping(Navigator.Stack.StackMapText)!; /// /// Gets the content long text. /// /// String value. - public override string GetLongText() => Page.GetTextMapping(Navigator.Stack.StackMapExtraText); + public override string GetLongText() => Page?.GetTextMapping(Navigator.Stack.StackMapExtraText)!; #endregion } diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonTab.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonTab.cs index 4006c5d17..e1b24cb7f 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonTab.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavCheckButtonTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,9 +28,9 @@ public ViewDrawNavCheckButtonTab(KryptonNavigator navigator, KryptonPage? page, VisualOrientation orientation) : base(navigator, page, orientation, - page.StateDisabled.Tab, + page!.StateDisabled.Tab, page.StateNormal.Tab, - page.StateTracking.Tab, + page.StateTracking.Tab, page.StatePressed.Tab, page.StateSelected.Tab, page.OverrideFocus.Tab) @@ -54,8 +54,8 @@ public override string ToString() => public override void UpdateButtonSpecMapping() { // Update the button spec manager for this tab to use a tab style for remapping - ButtonSpecManager.SetRemapTarget(Navigator.Bar.TabStyle); - ButtonSpecManager.RecreateButtons(); + ButtonSpecManager?.SetRemapTarget(Navigator.Bar.TabStyle); + ButtonSpecManager?.RecreateButtons(); } #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookMini.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookMini.cs index 6d4b7b9b9..575c3da92 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookMini.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookMini.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -48,7 +48,7 @@ public ViewDrawNavOutlookMini(KryptonNavigator navigator, /// User readable name of the instance. public override string ToString() => // Return the class name and instance identifier - $"ViewDrawNavOutlookMini:{Id} Text:{Page.Text}"; + $"ViewDrawNavOutlookMini:{Id} Text:{Page!.Text}"; #endregion @@ -64,11 +64,11 @@ public override KryptonPage? Page if (Page != null) { - _overrideDisabled.SetPalettes(Page.OverrideFocus.MiniButton, Page.StateDisabled.MiniButton); - _overrideNormal.SetPalettes(Page.OverrideFocus.MiniButton, Page.StateNormal.MiniButton); - _overrideTracking.SetPalettes(Page.OverrideFocus.MiniButton, Page.StateTracking.MiniButton); - _overridePressed.SetPalettes(Page.OverrideFocus.MiniButton, Page.StatePressed.MiniButton); - _overrideSelected.SetPalettes(Page.OverrideFocus.MiniButton, Page.StateSelected.MiniButton); + _overrideDisabled.SetPalettes(Page!.OverrideFocus.MiniButton, Page!.StateDisabled.MiniButton); + _overrideNormal.SetPalettes(Page!.OverrideFocus.MiniButton, Page!.StateNormal.MiniButton); + _overrideTracking.SetPalettes(Page!.OverrideFocus.MiniButton, Page!.StateTracking.MiniButton); + _overridePressed.SetPalettes(Page!.OverrideFocus.MiniButton, Page!.StatePressed.MiniButton); + _overrideSelected.SetPalettes(Page!.OverrideFocus.MiniButton, Page!.StateSelected.MiniButton); } else { @@ -126,13 +126,13 @@ protected override IMouseController CreateMouseController() #endregion #region Implementation - private void OnMiniClick(object sender, EventArgs e) => + private void OnMiniClick(object? sender, EventArgs e) => // Ask the navigator to show the specified page as a popup window // relative to our location as an element and firing the provided // delegate when the popup is dismissed. - Navigator.ShowPopupPage(Page, this, _finishDelegate); + Navigator.ShowPopupPage(Page!, this, _finishDelegate); - private void OnPopupFinished(object sender, EventArgs e) => + private void OnPopupFinished(object? sender, EventArgs e) => // Remove the fixed display of the button, now the associated popup has been removed _controller.RemoveFixed(); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookOverflow.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookOverflow.cs index a4c943688..fe3be0883 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookOverflow.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookOverflow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -55,20 +55,19 @@ public override string ToString() => /// /// The state for which the image is needed. /// Image value. - public override Image? GetImage(PaletteState state) => Page.GetImageMapping(Navigator.Outlook.Full.OverflowMapImage); + public override Image? GetImage(PaletteState state) => Page?.GetImageMapping(Navigator.Outlook.Full.OverflowMapImage); /// /// Gets the content short text. /// /// String value. - public override string GetShortText() => Page.GetTextMapping(Navigator.Outlook.Full.OverflowMapText); + public override string GetShortText() => Page?.GetTextMapping(Navigator.Outlook.Full.OverflowMapText)!; /// /// Gets the content long text. /// /// String value. - public override string GetLongText() => Page.GetTextMapping(Navigator.Outlook.Full.OverflowMapExtraText); - + public override string GetLongText() => Page?.GetTextMapping(Navigator.Outlook.Full.OverflowMapExtraText)!; #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookStack.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookStack.cs index 1a0d62bee..4d682b972 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookStack.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavOutlookStack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -41,7 +41,7 @@ public ViewDrawNavOutlookStack(KryptonNavigator navigator, /// User readable name of the instance. public override string ToString() => // Return the class name and instance identifier - $"ViewDrawNavOutlookStack:{Id} Text:{Page.Text}"; + $"ViewDrawNavOutlookStack:{Id} Text:{Page!.Text}"; #endregion @@ -52,8 +52,8 @@ public override string ToString() => public override void UpdateButtonSpecMapping() { // Define a default mapping for text color and recreate to use that new setting - ButtonSpecManager.SetRemapTarget(Navigator.Outlook.CheckButtonStyle); - ButtonSpecManager.RecreateButtons(); + ButtonSpecManager?.SetRemapTarget(Navigator.Outlook.CheckButtonStyle); + ButtonSpecManager?.RecreateButtons(); } #endregion @@ -72,7 +72,7 @@ public override void UpdateButtonSpecMapping() /// The state for which the image is needed. /// Image value. public override Image? GetImage(PaletteState state) => - Page.GetImageMapping(_full ? Navigator.Outlook.Full.StackMapImage : + Page?.GetImageMapping(_full ? Navigator.Outlook.Full.StackMapImage : Navigator.Outlook.Mini.StackMapImage); /// @@ -80,7 +80,7 @@ public override void UpdateButtonSpecMapping() /// /// String value. public override string GetShortText() => - Page.GetTextMapping(_full ? Navigator.Outlook.Full.StackMapText : + Page!.GetTextMapping(_full ? Navigator.Outlook.Full.StackMapText : Navigator.Outlook.Mini.StackMapText); /// @@ -88,7 +88,7 @@ public override string GetShortText() => /// /// String value. public override string GetLongText() => - Page.GetTextMapping(_full ? Navigator.Outlook.Full.StackMapExtraText : + Page!.GetTextMapping(_full ? Navigator.Outlook.Full.StackMapExtraText : Navigator.Outlook.Mini.StackMapExtraText); #endregion diff --git a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavRibbonTab.cs b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavRibbonTab.cs index edf339fff..d8422b04e 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavRibbonTab.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Draw/ViewDrawNavRibbonTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -68,11 +68,11 @@ internal class ViewDrawNavRibbonTab : ViewComposite, public ViewDrawNavRibbonTab([DisallowNull] KryptonNavigator navigator, [DisallowNull] KryptonPage page) { - Debug.Assert(navigator != null); - Debug.Assert(page != null); + Debug.Assert(navigator is not null); + Debug.Assert(page is not null); - Navigator = navigator; - Page = page; + Navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); + Page = page ?? throw new ArgumentNullException(nameof(page)); _lastClick = DateTime.Now.AddDays(-1); // Associate the page component with this view element @@ -103,15 +103,15 @@ public ViewDrawNavRibbonTab([DisallowNull] KryptonNavigator navigator, KeyController = _buttonController; // Create a decorator to interface with the tooltip manager - var toolTipController = new ToolTipController(Navigator.ToolTipManager, this, _buttonController); - var hoverController = new ToolTipController(Navigator.HoverManager, this, toolTipController); + var toolTipController = new ToolTipController(Navigator.ToolTipManager!, this, _buttonController); + var hoverController = new ToolTipController(Navigator.HoverManager!, this, toolTipController); // Assign controller for handing mouse input MouseController = hoverController; // Create overrides for handling a focus state - _paletteGeneral = Navigator.StateCommon.RibbonGeneral; - _overrideStateNormal = new PaletteRibbonTabContentInheritOverride(Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.Content, Page.StateNormal.RibbonTab.TabDraw, Page.StateNormal.RibbonTab.TabDraw, Page.StateNormal.RibbonTab.Content, PaletteState.FocusOverride); + _paletteGeneral = Navigator.StateCommon!.RibbonGeneral; + _overrideStateNormal = new PaletteRibbonTabContentInheritOverride(Page!.OverrideFocus.RibbonTab.TabDraw, Page!.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.Content, Page.StateNormal.RibbonTab.TabDraw, Page.StateNormal.RibbonTab.TabDraw, Page.StateNormal.RibbonTab.Content, PaletteState.FocusOverride); _overrideStateTracking = new PaletteRibbonTabContentInheritOverride(Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.Content, Page.StateTracking.RibbonTab.TabDraw, Page.StateTracking.RibbonTab.TabDraw, Page.StateTracking.RibbonTab.Content, PaletteState.FocusOverride); _overrideStatePressed = new PaletteRibbonTabContentInheritOverride(Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.Content, Page.StatePressed.RibbonTab.TabDraw, Page.StatePressed.RibbonTab.TabDraw, Page.StatePressed.RibbonTab.Content, PaletteState.FocusOverride); _overrideStateSelected = new PaletteRibbonTabContentInheritOverride(Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.TabDraw, Page.OverrideFocus.RibbonTab.Content, Page.StateSelected.RibbonTab.TabDraw, Page.StateSelected.RibbonTab.TabDraw, Page.StateSelected.RibbonTab.Content, PaletteState.FocusOverride); @@ -172,7 +172,7 @@ protected override void Dispose(bool disposing) { if (disposing) { - if (_mementos is not null) + if (_mementos != null) { // Dispose of all the mementos in the array foreach (IDisposable? memento in _mementos) @@ -184,7 +184,7 @@ protected override void Dispose(bool disposing) _mementos = null!; } - if (ButtonSpecManager is not null) + if (ButtonSpecManager != null) { ButtonSpecManager.Destruct(); ButtonSpecManager = null!; @@ -223,7 +223,7 @@ public bool HasFocus { get => _overrideStateNormal.Apply; - set + set { if (_overrideStateNormal.Apply != value) { @@ -304,10 +304,10 @@ public override void Layout(ViewLayoutContext context) { // Ensure we are using the correct palette CheckPaletteState(context); - + // Cache the ribbon shape - _lastRibbonShape = Navigator.Palette?.GetRibbonShape() ?? PaletteRibbonShape.Office2007; - + _lastRibbonShape = Navigator.GetResolvedPalette()?.GetRibbonShape() ?? PaletteRibbonShape.Office2007; + // We take on all the provided size ClientRectangle = context.DisplayRectangle; @@ -345,8 +345,13 @@ public override void Layout(ViewLayoutContext context) /// Perform a render of the elements. /// /// Rendering context. - public override void Render(RenderContext context) + public override void Render([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Ensure we are using the correct palette CheckPaletteState(context); @@ -358,7 +363,6 @@ public override void Render(RenderContext context) State, _currentBack, _borderBackOrient, - false, _mementos[mementoIndex]); // Let base class draw the child items @@ -371,14 +375,14 @@ public override void Render(RenderContext context) /// Gets the content short text. /// /// String value. - public string GetShortText() => Page.GetTextMapping(Navigator.Bar.BarMapText); + public string GetShortText() => Page!.GetTextMapping(Navigator.Bar.BarMapText); /// /// Gets the content image. /// /// The state for which the image is needed. /// Image value. - public Image? GetImage(PaletteState state) => Page.GetImageMapping(Navigator.Bar.BarMapImage); + public Image? GetImage(PaletteState state) => Page!.GetImageMapping(Navigator.Bar.BarMapImage); /// /// Gets the image color that should be transparent. @@ -391,7 +395,7 @@ public override void Render(RenderContext context) /// Gets the content long text. /// /// String value. - public string GetLongText() => Page.GetTextMapping(Navigator.Bar.BarMapExtraText); + public string GetLongText() => Page!.GetTextMapping(Navigator.Bar.BarMapExtraText); #endregion @@ -401,7 +405,7 @@ public override void Render(RenderContext context) /// /// Source of the event. /// An EventArgs containing the event data. - protected virtual void OnRightClick(object sender, MouseEventArgs e) + protected virtual void OnRightClick(object? sender, MouseEventArgs e) { // Can only select the page if not already selected and allowed to select a tab if ((Navigator.SelectedPage != Page) && Navigator.AllowTabSelect) @@ -410,7 +414,7 @@ protected virtual void OnRightClick(object sender, MouseEventArgs e) } // Generate event so user can decide what, if any, context menu to show - var scma = new ShowContextMenuArgs(Page, Navigator.Pages.IndexOf(Page)); + var scma = new ShowContextMenuArgs(Page, Navigator.Pages.IndexOf(Page!)); Navigator.OnShowContextMenu(scma); // Do we need to show a context menu @@ -418,11 +422,11 @@ protected virtual void OnRightClick(object sender, MouseEventArgs e) { if (CommonHelper.ValidKryptonContextMenu(scma.KryptonContextMenu)) { - scma.KryptonContextMenu.Show(Navigator, Navigator.PointToScreen(new Point(e.X, e.Y))); + scma.KryptonContextMenu!.Show(Navigator, Navigator.PointToScreen(new Point(e.X, e.Y))); } else if (scma.ContextMenuStrip != null) { - if (CommonHelper.ValidContextMenuStrip(scma.ContextMenuStrip) ) + if (CommonHelper.ValidContextMenuStrip(scma.ContextMenuStrip)) { scma.ContextMenuStrip.Show(Navigator.PointToScreen(new Point(e.X, e.Y))); } @@ -443,9 +447,13 @@ private int StateIndex(PaletteState state) { Array stateValues = Enum.GetValues(typeof(PaletteState)); + PaletteState? ps; + for (var i = 0; i < stateValues.Length; i++) { - if ((PaletteState)stateValues.GetValue(i) == state) + ps = stateValues.GetValue(i) as PaletteState?; + + if (ps is not null && ps == state) { return i; } @@ -460,7 +468,7 @@ private void CheckPaletteState(ViewContext context) PaletteState buttonState = State; // If the actual control is not enabled, force to disabled state - if (!IsFixed && !context.Control.Enabled) + if (!IsFixed && !context.Control!.Enabled) { buttonState = PaletteState.Disabled; } @@ -496,7 +504,7 @@ private void CheckPaletteState(ViewContext context) case PaletteState.Normal: case PaletteState.CheckedNormal: buttonState = PaletteState.Normal; - break; + break; case PaletteState.Tracking: case PaletteState.CheckedTracking: buttonState = PaletteState.Tracking; @@ -517,21 +525,25 @@ private void CheckPaletteState(ViewContext context) _currentBack = Navigator.StateDisabled.RibbonTab.TabDraw; _currentContent = Navigator.StateDisabled.RibbonTab.Content; break; + case PaletteState.Normal: _currentText = _overrideStateNormal; _currentBack = _overrideStateNormal; _currentContent = _overrideStateNormal; break; + case PaletteState.Tracking: _currentText = _overrideStateTracking; _currentBack = _overrideStateTracking; _currentContent = _overrideStateTracking; break; + case PaletteState.Pressed: _currentText = _overrideStatePressed; _currentBack = _overrideStatePressed; _currentContent = _overrideStatePressed; break; + case PaletteState.CheckedNormal: case PaletteState.CheckedTracking: case PaletteState.CheckedPressed: @@ -539,35 +551,37 @@ private void CheckPaletteState(ViewContext context) _currentBack = _overrideStateSelected; _currentContent = _overrideStateSelected; break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(buttonState.ToString()); break; } // Switch the child elements over to correct state ElementState = buttonState; - this[0][0].ElementState = buttonState; + this[0]![0]!.ElementState = buttonState; // Update content palette with the current ribbon text palette _contentProvider.PaletteRibbonText = _currentText; _contentProvider.PaletteContent = _currentContent; } - private void OnClick(object sender, EventArgs e) + private void OnClick(object? sender, EventArgs e) { // Generate click event for the page header - Navigator.OnTabClicked(new KryptonPageEventArgs(Page, Navigator.Pages.IndexOf(Page))); + Navigator.OnTabClicked(new KryptonPageEventArgs(Page, Navigator.Pages.IndexOf(Page!))); // If this click is within the double click time of the last one, generate the double click event. DateTime now = DateTime.Now; if ((now - _lastClick).TotalMilliseconds < SystemInformation.DoubleClickTime) { // Tell button controller to abort any drag attempt - _buttonController.ClearDragRect(); + _buttonController!.ClearDragRect(); // Generate click event for the page header - Navigator.OnTabDoubleClicked(new KryptonPageEventArgs(Page, Navigator.Pages.IndexOf(Page))); + Navigator.OnTabDoubleClicked(new KryptonPageEventArgs(Page, Navigator.Pages.IndexOf(Page!))); // Prevent a third click causing another double click by resetting the now time backwards now = now.AddDays(-1); @@ -587,22 +601,22 @@ private void OnClick(object sender, EventArgs e) // If in a tabs only mode then show the popup for the page if (Navigator.NavigatorMode == NavigatorMode.BarRibbonTabOnly) { - Navigator.ShowPopupPage(Page, this, null); + Navigator.ShowPopupPage(Page!, this, null); } } } - private void OnDragStart(object sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, Page); + private void OnDragStart(object? sender, DragStartEventCancelArgs e) => Navigator.InternalDragStart(e, Page); - private void OnDragMove(object sender, PointEventArgs e) => Navigator.InternalDragMove(e); + private void OnDragMove(object? sender, PointEventArgs e) => Navigator.InternalDragMove(e); - private void OnDragEnd(object sender, PointEventArgs e) => Navigator.InternalDragEnd(e); + private void OnDragEnd(object? sender, PointEventArgs e) => Navigator.InternalDragEnd(e); - private void OnDragQuit(object sender, EventArgs e) => Navigator.InternalDragQuit(); + private void OnDragQuit(object? sender, EventArgs e) => Navigator.InternalDragQuit(); - private void OnButtonDragRectangle(object sender, ButtonDragRectangleEventArgs e) => ButtonDragRectangle?.Invoke(this, e); + private void OnButtonDragRectangle(object? sender, ButtonDragRectangleEventArgs e) => ButtonDragRectangle?.Invoke(this, e); - private void OnButtonDragOffset(object sender, ButtonDragOffsetEventArgs e) => ButtonDragOffset?.Invoke(this, e); + private void OnButtonDragOffset(object? sender, ButtonDragOffsetEventArgs e) => ButtonDragOffset?.Invoke(this, e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBar.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBar.cs index 81d6a2dd3..31d760950 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBar.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -69,8 +69,8 @@ public ViewLayoutBar(BarItemSizing itemSizing, int barMinimumHeight, TabBorderStyle tabBorderStyle, bool reorderSelectedLine) - : this(null, PaletteMetricInt.None, itemSizing, - itemAlignment, barMultiline, itemMinimumSize, + : this(null, PaletteMetricInt.None, itemSizing, + itemAlignment, barMultiline, itemMinimumSize, itemMaximumSize, barMinimumHeight, tabBorderStyle, reorderSelectedLine) { @@ -88,7 +88,7 @@ public ViewLayoutBar(BarItemSizing itemSizing, /// Minimum allowed item size. /// Minimum height of the bar. /// Should line with selection be reordered. - public ViewLayoutBar(IPaletteMetric paletteMetric, + public ViewLayoutBar(IPaletteMetric? paletteMetric, PaletteMetricInt metricGap, BarItemSizing itemSizing, RelativePositionAlign itemAlignment, @@ -97,9 +97,9 @@ public ViewLayoutBar(IPaletteMetric paletteMetric, Size itemMaximumSize, int barMinimumHeight, bool reorderSelectedLine) - : this(paletteMetric, metricGap, itemSizing, - itemAlignment, barMultiline, itemMinimumSize, - itemMaximumSize, barMinimumHeight, + : this(paletteMetric, metricGap, itemSizing, + itemAlignment, barMultiline, itemMinimumSize, + itemMaximumSize, barMinimumHeight, TabBorderStyle.RoundedOutsizeMedium, reorderSelectedLine) { @@ -118,7 +118,7 @@ public ViewLayoutBar(IPaletteMetric paletteMetric, /// Minimum height of the bar. /// Tab border style. /// Should line with selection be reordered. - public ViewLayoutBar(IPaletteMetric paletteMetric, + public ViewLayoutBar(IPaletteMetric? paletteMetric, PaletteMetricInt metricGap, BarItemSizing itemSizing, RelativePositionAlign itemAlignment, @@ -296,9 +296,19 @@ public void SetMetrics(IPaletteMetric paletteMetric, /// Discover the preferred size of the element. /// /// Layout context. - public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) + public override Size GetPreferredSize([DisallowNull] ViewLayoutContext? context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Reset the largest child size to empty _maximumItem = Size.Empty; @@ -315,9 +325,9 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Line spacing gap can never be less than zero var lineGap = (gap < 0 ? 0 : gap); - + // Do we need to apply right to left by positioning children in reverse order? - var reversed = (IsOneLine && !BarVertical && (context.Control.RightToLeft == RightToLeft.Yes)); + var reversed = (IsOneLine && !BarVertical && (context.Control!.RightToLeft == RightToLeft.Yes)); // Allocate caching for size of each child element _childSizes = new Size[Count]; @@ -326,17 +336,17 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) var selectedChildIndex = -1; // Find the size of each child in turn - for(var i=0; i 0) ? gap : 0; - // Add on the heght of the child + // Add on the height of the child yAdd += _childSizes[i].Height; // Does this item extend beyond visible line? @@ -771,10 +785,10 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (selectedChildIndex >= 0) { // Find the line details that contains this child index - for(var i=0; i<_lineDetails.Count; i++) + for (var i = 0; i < _lineDetails.Count; i++) { // Is the selected item in the range of items for this line? - if ((selectedChildIndex >= _lineDetails[i].StartIndex) && + if ((selectedChildIndex >= _lineDetails[i].StartIndex) && (selectedChildIndex < (_lineDetails[i].StartIndex + _lineDetails[i].ItemCount))) { // Remove the line details @@ -816,7 +830,17 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area ClientRectangle = context.DisplayRectangle; @@ -837,7 +861,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) var reversePosition = false; // Do we need to apply right to left by positioning children in reverse order? - if (!BarVertical && (context.Control.RightToLeft == RightToLeft.Yes)) + if (!BarVertical && (context.Control!.RightToLeft == RightToLeft.Yes)) { if (IsOneLine) { @@ -879,7 +903,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (!_childSizes[itemIndex].IsEmpty) { // Get access to the indexed child - ViewBase child = this[(reverseAccess ? (lineDetails.StartIndex + lineDetails.ItemCount) - 1 - i : + ViewBase? child = this[(reverseAccess ? (lineDetails.StartIndex + lineDetails.ItemCount) - 1 - i : lineDetails.StartIndex + i)]; // Add on the height of the child @@ -898,7 +922,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(new Point(xPosition, yPosition), _childSizes[itemIndex]); // Ask the child to layout - child.Layout(context); + child?.Layout(context); // Move to next child position if (reversePosition) @@ -946,7 +970,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (!_childSizes[itemIndex].IsEmpty) { // Get access to the indexed child - ViewBase child = this[(reverseAccess ? (lineDetails.StartIndex + lineDetails.ItemCount) - 1 - i : + ViewBase? child = this[(reverseAccess ? (lineDetails.StartIndex + lineDetails.ItemCount) - 1 - i : lineDetails.StartIndex + i)]; // Add on the width of the child @@ -965,7 +989,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(new Point(xPosition, yPosition), _childSizes[itemIndex]); // Ask the child to layout - child.Layout(context); + child?.Layout(context); // Move to next child position if (reversePosition) @@ -997,14 +1021,14 @@ public override void Layout([DisallowNull] ViewLayoutContext context) private bool IsOneLine => BarMultiline is BarMultiline.Singleline or BarMultiline.Shrinkline or BarMultiline.Expandline or BarMultiline.Exactline; - private int FindStartingXPosition(ViewLayoutContext context, + private int FindStartingXPosition(ViewLayoutContext context, LineDetails lineDetails, bool reversePosition) { RelativePositionAlign align = ItemAlignment; // Do we need to apply right to left by aligning in opposite direction? - if (IsOneLine && !BarVertical && (context.Control.RightToLeft == RightToLeft.Yes)) + if (IsOneLine && !BarVertical && (context.Control!.RightToLeft == RightToLeft.Yes)) { switch (align) { @@ -1021,17 +1045,21 @@ private int FindStartingXPosition(ViewLayoutContext context, { case RelativePositionAlign.Near: return reversePosition ? ClientRectangle.Right : ClientLocation.X; + case RelativePositionAlign.Center: return reversePosition ? ClientRectangle.Right - ((ClientRectangle.Width - lineDetails.InlineLength) / 2) : ClientLocation.X + ((ClientRectangle.Width - lineDetails.InlineLength) / 2); + case RelativePositionAlign.Far: return reversePosition ? ClientRectangle.Right - (ClientRectangle.Width - lineDetails.InlineLength) : ClientLocation.X + (ClientRectangle.Width - lineDetails.InlineLength); + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(align.ToString()); return ClientLocation.X; } } @@ -1043,7 +1071,7 @@ private int FindStartingYPosition(ViewLayoutContext context, RelativePositionAlign align = ItemAlignment; // Do we need to apply right to left by aligning in opposite direction? - if (IsOneLine && !BarVertical && (context.Control.RightToLeft == RightToLeft.Yes)) + if (IsOneLine && !BarVertical && (context.Control!.RightToLeft == RightToLeft.Yes)) { switch (align) { @@ -1060,6 +1088,7 @@ private int FindStartingYPosition(ViewLayoutContext context, { case RelativePositionAlign.Near: return reversePosition ? ClientRectangle.Bottom : ClientLocation.Y; + case RelativePositionAlign.Center: if (reversePosition) { @@ -1069,6 +1098,7 @@ private int FindStartingYPosition(ViewLayoutContext context, { return ClientLocation.Y + ((ClientRectangle.Height - lineDetails.InlineLength) / 2); } + case RelativePositionAlign.Far: if (reversePosition) { @@ -1078,9 +1108,11 @@ private int FindStartingYPosition(ViewLayoutContext context, { return ClientLocation.Y + (ClientRectangle.Height - lineDetails.InlineLength); } + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(align.ToString()); return ClientLocation.Y; } } diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBarForTabs.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBarForTabs.cs index e1fbd8e07..20a43820e 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBarForTabs.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutBarForTabs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -69,7 +69,7 @@ public ViewLayoutBarForTabs(IPaletteMetric paletteMetric, int barMinimumHeight, TabBorderStyle tabBorderStyle, bool reorderSelectedLine) - : base(paletteMetric, metricGap, itemSizing, + : base(paletteMetric, metricGap, itemSizing, itemAlignment, barMultiline, itemMinimumSize, itemMaximumSize, barMinimumHeight, tabBorderStyle, reorderSelectedLine) @@ -115,8 +115,13 @@ public override void Render(RenderContext context) #endregion #region Implementation - private void RenderChildren(RenderContext context, bool drawChecked) + private void RenderChildren([DisallowNull] RenderContext context, bool drawChecked) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Use tab style to decide what order the children are drawn in var orderedChildren = context.Renderer.RenderTabBorder.GetTabBorderLeftDrawing(TabBorderStyle) ? this : Reverse(); @@ -132,7 +137,7 @@ private void RenderChildren(RenderContext context, bool drawChecked) if ((buttonBar != null) || (tab != null)) { - var itemChecked = buttonBar?.Checked ?? tab.Checked; + var itemChecked = buttonBar?.Checked ?? tab!.Checked; // Are we allowed to draw the checked item? if ((!itemChecked && !drawChecked) || diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutDockerOverlap.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutDockerOverlap.cs index 39fb02eaf..044d378dd 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutDockerOverlap.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutDockerOverlap.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,14 +34,14 @@ public ViewLayoutDockerOverlap([DisallowNull] ViewDrawCanvas drawCanvas, [DisallowNull] ViewLayoutInsetOverlap layoutOverlap, [DisallowNull] ViewLayoutBarForTabs layoutTabs) { - Debug.Assert(drawCanvas != null); - Debug.Assert(layoutOverlap != null); - Debug.Assert(layoutTabs != null); + Debug.Assert(drawCanvas is not null); + Debug.Assert(layoutOverlap is not null); + Debug.Assert(layoutTabs is not null); // Remember provided references - _drawCanvas = drawCanvas; - _layoutOverlap = layoutOverlap; - _layoutTabs = layoutTabs; + _drawCanvas = drawCanvas ?? throw new ArgumentNullException(nameof(_drawCanvas)); + _layoutOverlap = layoutOverlap ?? throw new ArgumentNullException(nameof(_layoutOverlap)); + _layoutTabs = layoutTabs ?? throw new ArgumentNullException(nameof(_layoutTabs)); } /// @@ -58,7 +58,7 @@ public override string ToString() => /// /// Gets the rounding value to apply on the edges. /// - public int BorderWidth => _drawCanvas.PaletteBorder.GetBorderWidth(_drawCanvas.State); + public int BorderWidth => _drawCanvas.PaletteBorder!.GetBorderWidth(_drawCanvas.State); #endregion @@ -67,7 +67,7 @@ public override string ToString() => /// Perform rendering after child elements are rendered. /// /// Rendering context. - public override void RenderAfter(RenderContext context) + public override void RenderAfter(RenderContext context) { // Ask for another draw of the child but this time only drawing the selected tab _layoutTabs.DrawChecked = true; @@ -112,7 +112,7 @@ protected override Size UpdatePreferredSize(Size preferredSize) /// Original filler rectangle. /// Owning control instance. /// Modified rectangle. - protected override Rectangle UpdateFillerRect(Rectangle fillerRect, + protected override Rectangle UpdateFillerRect(Rectangle fillerRect, Control control) { var borderWidth = BorderWidth; diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutInsetOverlap.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutInsetOverlap.cs index 5c7a06eaa..b5259d4d1 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutInsetOverlap.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutInsetOverlap.cs @@ -5,11 +5,12 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion +// ReSharper disable PossibleLossOfFraction namespace Krypton.Navigator { /// @@ -28,7 +29,12 @@ internal class ViewLayoutInsetOverlap : ViewComposite /// public ViewLayoutInsetOverlap([DisallowNull] ViewDrawCanvas drawCanvas) { - Debug.Assert(drawCanvas != null); + Debug.Assert(drawCanvas is not null); + + if (drawCanvas is null) + { + throw new ArgumentNullException(nameof(drawCanvas)); + } // Remember source of the rounding values _drawCanvas = drawCanvas; @@ -69,11 +75,11 @@ public float Rounding get { // Get the rounding and width values for the border - var rounding = _drawCanvas.PaletteBorder.GetBorderRounding(_drawCanvas.State); + var rounding = _drawCanvas.PaletteBorder!.GetBorderRounding(_drawCanvas.State); var width = _drawCanvas.PaletteBorder.GetBorderWidth(_drawCanvas.State); // We have to add half the width as that increases the rounding effect - return rounding + (width / 2); + return rounding + width / 2; } } #endregion @@ -82,7 +88,7 @@ public float Rounding /// /// Gets the rounding value to apply on the edges. /// - public int BorderWidth => _drawCanvas.PaletteBorder.GetBorderWidth(_drawCanvas.State); + public int BorderWidth => _drawCanvas.PaletteBorder!.GetBorderWidth(_drawCanvas.State); #endregion @@ -93,7 +99,12 @@ public float Rounding /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } // Get the preferred size requested by the children Size size = base.GetPreferredSize(context); @@ -101,12 +112,12 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Apply the rounding in the appropriate orientation if (Orientation is VisualOrientation.Top or VisualOrientation.Bottom) { - size.Width += Convert.ToInt32(Rounding) * 2; + size.Width += Convert.ToInt32(Rounding * 2); size.Height += BorderWidth; } else { - size.Height += Convert.ToInt32(Rounding) * 2; + size.Height += Convert.ToInt32(Rounding * 2); size.Width += BorderWidth; } @@ -119,7 +130,12 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } // We take on all the available display area ClientRectangle = context.DisplayRectangle; diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookFull.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookFull.cs index e7eedd7c6..5d272abde 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookFull.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookFull.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,7 +37,7 @@ public ViewLayoutOutlookFull([DisallowNull] ViewBuilderOutlookBase viewBuilder, VisualControl rootControl, ViewBase viewportFiller, PaletteBorderEdge paletteBorderEdge, - IPaletteMetric paletteMetrics, + IPaletteMetric? paletteMetrics, PaletteMetricPadding metricPadding, PaletteMetricInt metricOvers, VisualOrientation orientation, @@ -45,12 +45,12 @@ public ViewLayoutOutlookFull([DisallowNull] ViewBuilderOutlookBase viewBuilder, bool animateChange, bool vertical, NeedPaintHandler needPaintDelegate) - : base(rootControl, viewportFiller, paletteBorderEdge, paletteMetrics, - metricPadding, metricOvers, orientation, alignment, animateChange, + : base(rootControl, viewportFiller, paletteBorderEdge, paletteMetrics, + metricPadding, metricOvers, orientation, alignment, animateChange, vertical, needPaintDelegate) { - Debug.Assert(viewBuilder != null); - ViewBuilder = viewBuilder; + Debug.Assert(viewBuilder is not null); + ViewBuilder = viewBuilder ?? throw new ArgumentNullException(nameof(viewBuilder)); } /// @@ -106,10 +106,10 @@ public override void Layout(ViewLayoutContext context) var beforeOverflowState = ViewBuilder.GetOverflowButtonStates(); // Make all stacking items visible so all that can be shown will be - ViewBuilder.UnshrinkAppropriatePages(); + ViewBuilder.UnShrinkAppropriatePages(); // Do not actually change the layout of any child controls - context.ViewManager.DoNotLayoutControls = true; + context.ViewManager!.DoNotLayoutControls = true; do { diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookMini.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookMini.cs index 0a3c5a788..9e50281d3 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookMini.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutOutlookMini.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,8 +24,8 @@ internal class ViewLayoutOutlookMini : ViewLayoutDocker /// View builder reference. public ViewLayoutOutlookMini([DisallowNull] ViewBuilderOutlookBase viewBuilder) { - Debug.Assert(viewBuilder != null); - ViewBuilder = viewBuilder; + Debug.Assert(viewBuilder is not null); + ViewBuilder = viewBuilder ?? throw new ArgumentNullException(nameof(viewBuilder)); } /// @@ -58,7 +58,7 @@ public ViewBuilderOutlookBase ViewBuilder public override void Layout(ViewLayoutContext context) { // Make all stacking items that should be visible are visible - ViewBuilder.UnshrinkAppropriatePages(); + ViewBuilder.UnShrinkAppropriatePages(); // Let base class continue with standard layout base.Layout(context); diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageHide.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageHide.cs index 345618674..a60520da9 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageHide.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageHide.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,10 +33,10 @@ internal class ViewLayoutPageHide : ViewLayoutNull /// public ViewLayoutPageHide([DisallowNull] KryptonNavigator navigator) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); } /// @@ -66,20 +66,25 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } // We take on all the available display area ClientRectangle = context.DisplayRectangle; // Are we allowed to layout child controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // Are we allowed to actually layout the pages? if (_navigator is { InternalCanLayout: true, IsChildPanelBorrowed: false }) - // Do not position the child panel if it is borrowed + // Do not position the child panel if it is borrowed { // Position the child panel for showing page information - _navigator.ChildPanel.SetBounds(HIDDEN_OFFSET, + _navigator.ChildPanel!.SetBounds(HIDDEN_OFFSET, HIDDEN_OFFSET, ClientWidth, ClientHeight); diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageShow.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageShow.cs index 777c92463..4408cc0da 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageShow.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPageShow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,10 +28,10 @@ internal class ViewLayoutPageShow : ViewLayoutNull /// public ViewLayoutPageShow([DisallowNull] KryptonNavigator navigator) { - Debug.Assert(navigator != null); + Debug.Assert(navigator is not null); // Remember back reference - _navigator = navigator; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); _minimumAsPreferred = false; } @@ -93,20 +93,25 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } // We take on all the available display area ClientRectangle = context.DisplayRectangle; // Are we allowed to layout child controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // Are we allowed to actually layout the pages? if (_navigator is { InternalCanLayout: true, IsChildPanelBorrowed: false }) - // Do not position the child panel or pages if it is borrowed + // Do not position the child panel or pages if it is borrowed { // Position the child panel for showing page information - _navigator.ChildPanel.SetBounds(ClientLocation.X, + _navigator.ChildPanel!.SetBounds(ClientLocation.X, ClientLocation.Y, ClientWidth, ClientHeight); diff --git a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPopupPage.cs b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPopupPage.cs index 9d492c5d9..07147cef3 100644 --- a/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPopupPage.cs +++ b/Source/Krypton Components/Krypton.Navigator/View Layout/ViewLayoutPopupPage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,11 +31,11 @@ internal class ViewLayoutPopupPage : ViewLayoutNull public ViewLayoutPopupPage([DisallowNull] KryptonNavigator navigator, [DisallowNull] KryptonPage page) { - Debug.Assert(navigator != null); - Debug.Assert(page != null); + Debug.Assert(navigator is not null); + Debug.Assert(page is not null); - _navigator = navigator; - _page = page; + _navigator = navigator ?? throw new ArgumentNullException(nameof(navigator)); + _page = page ?? throw new ArgumentNullException(nameof(page)); } /// @@ -55,7 +55,13 @@ public override string ToString() => /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + return _page.GetPreferredSize(context.DisplayRectangle.Size); } @@ -65,13 +71,18 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + // We take on all the available display area ClientRectangle = context.DisplayRectangle; // Are we allowed to layout child controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // Are we allowed to actually layout the pages? if (_navigator.InternalCanLayout) @@ -85,7 +96,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Update position of child panel if not already in correct position - if ((_navigator.ChildPanel.Location != ClientLocation) || + if ((_navigator.ChildPanel!.Location != ClientLocation) || (_navigator.ChildPanel.Width != ClientWidth) || (_navigator.ChildPanel.Height != ClientHeight)) { diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecAppMenu.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecAppMenu.cs index 817c1052a..a5ce630ce 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecAppMenu.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecAppMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecExpandRibbon.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecExpandRibbon.cs index 3a4c9623f..70965802a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecExpandRibbon.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecExpandRibbon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,8 +30,9 @@ public class ButtonSpecExpandRibbon : ButtonSpec /// Reference to owning ribbon control. public ButtonSpecExpandRibbon([DisallowNull] KryptonRibbon ribbon) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); // Fix the type ProtectedType = PaletteButtonSpecStyle.RibbonExpand; @@ -65,14 +66,14 @@ public PaletteButtonSpecStyle ButtonSpecType /// /// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) => _ribbon is { ShowMinimizeButton: true, MinimizedMode: true }; + public override bool GetVisible(PaletteBase palette) => _ribbon is { ShowMinimizeButton: true, MinimizedMode: true }; /// /// Gets the button enabled state. /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => ButtonEnabled.True; + public override ButtonEnabled GetEnabled(PaletteBase palette) => ButtonEnabled.True; /// /// Gets the button checked state. diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutAppButton.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutAppButton.cs index 9cdfc8354..49bf8ce8f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutAppButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutAppButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -36,7 +36,7 @@ public class ButtonSpecManagerLayoutAppButton : ButtonSpecManagerLayout /// Delegate for notifying paint requests. public ButtonSpecManagerLayoutAppButton(ViewContextMenuManager viewManager, Control control, - [DisallowNull] PaletteRedirect? redirector, + [DisallowNull] PaletteRedirect redirector, ButtonSpecCollectionBase variableSpecs, ButtonSpecCollectionBase? fixedSpecs, ViewLayoutDocker[] viewDockers, @@ -70,7 +70,7 @@ public ButtonSpecManagerLayoutAppButton(ViewContextMenuManager viewManager, /// ButtonSpec instance. /// ButtonSpecView derived class. protected override ButtonSpecView CreateButtonSpecView(PaletteRedirect? redirector, - IPaletteMetric? viewPaletteMetric, + IPaletteMetric viewPaletteMetric, PaletteMetricPadding viewMetricPadding, ButtonSpec buttonSpec) => new ButtonSpecViewAppButton(redirector, viewPaletteMetric, diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutRibbon.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutRibbon.cs index 5a7339602..484ccdc40 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutRibbon.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecManagerLayoutRibbon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -34,7 +34,7 @@ public class ButtonSpecManagerLayoutRibbon : ButtonSpecManagerLayout /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. public ButtonSpecManagerLayoutRibbon(KryptonRibbon ribbon, - PaletteRedirect? redirector, + PaletteRedirect redirector, ButtonSpecCollectionBase variableSpecs, ButtonSpecCollectionBase fixedSpecs, ViewLayoutDocker[] viewDockers, @@ -59,11 +59,11 @@ public ButtonSpecManagerLayoutRibbon(KryptonRibbon ribbon, /// Target metric padding. /// ButtonSpec instance. /// ButtonSpecView derived class. - protected override ButtonSpecView CreateButtonSpecView(PaletteRedirect? redirector, - IPaletteMetric? viewPaletteMetric, - PaletteMetricPadding viewMetricPadding, + protected override ButtonSpecView CreateButtonSpecView(PaletteRedirect? redirector, + IPaletteMetric viewPaletteMetric, + PaletteMetricPadding viewMetricPadding, ButtonSpec buttonSpec) => - new ButtonSpecViewRibbon(redirector, viewPaletteMetric, + new ButtonSpecViewRibbon(redirector, viewPaletteMetric, viewMetricPadding, this, buttonSpec); #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildClose.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildClose.cs index 7039accc6..73bbfb13d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildClose.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildClose.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,8 +31,8 @@ public class ButtonSpecMdiChildClose : ButtonSpecMdiChildFixed public ButtonSpecMdiChildClose([DisallowNull] KryptonRibbon ribbon) : base(PaletteButtonSpecStyle.PendantClose) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); } #endregion @@ -42,7 +42,7 @@ public ButtonSpecMdiChildClose([DisallowNull] KryptonRibbon ribbon) /// /// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { // Cannot be seen if not attached to an mdi child window and cannot be seen // if the window is not maximized and so needing the pendant buttons @@ -60,7 +60,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => ButtonEnabled.True; + public override ButtonEnabled GetEnabled(PaletteBase palette) => ButtonEnabled.True; /// /// Gets the button checked state. @@ -85,7 +85,7 @@ protected override void OnClick(EventArgs e) { if (!_ribbon.InDesignMode) { - MdiChild.Close(); + MdiChild?.Close(); // Let base class fire any other attached events base.OnClick(e); diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildFixed.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildFixed.cs index dacf6695b..cdb4357c6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildFixed.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildFixed.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildMin.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildMin.cs index 48e2a9502..af76116c0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildMin.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildMin.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,8 +31,8 @@ public class ButtonSpecMdiChildMin : ButtonSpecMdiChildFixed public ButtonSpecMdiChildMin([DisallowNull] KryptonRibbon ribbon) : base(PaletteButtonSpecStyle.PendantMin) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); } #endregion @@ -42,7 +42,7 @@ public ButtonSpecMdiChildMin([DisallowNull] KryptonRibbon ribbon) /// /// Palette to use for inheriting values. /// Button visibiliy. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { // Cannot be seen if not attached to an mdi child window and cannot be seen // if the window is not maximized and so needing the pendant buttons @@ -74,7 +74,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) + public override ButtonEnabled GetEnabled(PaletteBase palette) { // Cannot be enabled if not attached to an mdi child window if (MdiChild == null || MdiChild.IsDisposed || !MdiChild.IsHandleCreated || MdiChild.Disposing) @@ -109,7 +109,7 @@ protected override void OnClick(EventArgs e) { if (!_ribbon.InDesignMode) { - MdiChild.WindowState = FormWindowState.Minimized; + MdiChild!.WindowState = FormWindowState.Minimized; // Let base class fire any other attached events base.OnClick(e); diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildRestore.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildRestore.cs index 82d2c0f0b..1291afe5e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildRestore.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMdiChildRestore.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,8 +31,8 @@ public class ButtonSpecMdiChildRestore : ButtonSpecMdiChildFixed public ButtonSpecMdiChildRestore([DisallowNull] KryptonRibbon ribbon) : base(PaletteButtonSpecStyle.PendantRestore) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); } #endregion @@ -42,7 +42,7 @@ public ButtonSpecMdiChildRestore([DisallowNull] KryptonRibbon ribbon) /// /// Palette to use for inheriting values. /// Button visibiliy. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { // Cannot be seen if not attached to an mdi child window and cannot be seen // if the window is not maximized and so needing the pendant buttons @@ -74,7 +74,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) + public override ButtonEnabled GetEnabled(PaletteBase palette) { // Cannot be enabled if not attached to an mdi child window if (MdiChild == null) @@ -109,7 +109,7 @@ protected override void OnClick(EventArgs e) { if (!_ribbon.InDesignMode) { - MdiChild.WindowState = FormWindowState.Normal; + MdiChild!.WindowState = FormWindowState.Normal; // Let base class fire any other attached events base.OnClick(e); diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMinimizeRibbon.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMinimizeRibbon.cs index 554a6d1b5..5479788fd 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMinimizeRibbon.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecMinimizeRibbon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,8 +30,8 @@ public class ButtonSpecMinimizeRibbon : ButtonSpec /// Reference to owning ribbon control. public ButtonSpecMinimizeRibbon([DisallowNull] KryptonRibbon ribbon) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); // Fix the type ProtectedType = PaletteButtonSpecStyle.RibbonMinimize; @@ -65,14 +65,14 @@ public PaletteButtonSpecStyle ButtonSpecType /// /// Palette to use for inheriting values. /// Button visibiliy. - public override bool GetVisible(PaletteBase? palette) => _ribbon is { ShowMinimizeButton: true, MinimizedMode: false }; + public override bool GetVisible(PaletteBase palette) => _ribbon is { ShowMinimizeButton: true, MinimizedMode: false }; /// /// Gets the button enabled state. /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => ButtonEnabled.True; + public override ButtonEnabled GetEnabled(PaletteBase palette) => ButtonEnabled.True; /// /// Gets the button checked state. diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewAppButton.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewAppButton.cs index 41e615b0e..04bd892a9 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewAppButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewAppButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -33,11 +33,11 @@ public class ButtonSpecViewAppButton : ButtonSpecView /// Reference to owning manager. /// Access public ButtonSpecViewAppButton(PaletteRedirect? redirector, - IPaletteMetric? paletteMetric, + IPaletteMetric paletteMetric, PaletteMetricPadding metricPadding, ButtonSpecManagerBase? manager, ButtonSpec buttonSpec) - : base(redirector, paletteMetric, metricPadding, manager, buttonSpec) + : base(redirector!, paletteMetric, metricPadding, manager!, buttonSpec) { } #endregion @@ -52,7 +52,7 @@ public ButtonSpecViewAppButton(PaletteRedirect? redirector, /// Controller instance. public override ButtonSpecViewControllers CreateController(ViewDrawButton viewButton, NeedPaintHandler needPaint, - MouseEventHandler clickHandler) + MouseEventHandler? clickHandler) { // Create a ribbon specific button controller var managerAppButton = (ButtonSpecManagerLayoutAppButton)Manager; @@ -78,9 +78,9 @@ public override ButtonSpecViewControllers CreateController(ViewDrawButton viewBu /// /// Source of the event. /// An EventArgs that contains the event data. - protected override void OnFinishDelegate(object sender, EventArgs e) => + protected override void OnFinishDelegate(object? sender, EventArgs? e) => // Ask the button to remove the fixed pressed appearance - _controller.RemoveFixed(); + _controller?.RemoveFixed(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewRibbon.cs b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewRibbon.cs index 51c8a01f0..327f2ae8b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewRibbon.cs +++ b/Source/Krypton Components/Krypton.Ribbon/ButtonSpec/ButtonSpecViewRibbon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -33,11 +33,11 @@ public class ButtonSpecViewRibbon : ButtonSpecView /// Reference to owning manager. /// Access public ButtonSpecViewRibbon(PaletteRedirect? redirector, - IPaletteMetric? paletteMetric, + IPaletteMetric paletteMetric, PaletteMetricPadding metricPadding, ButtonSpecManagerBase? manager, ButtonSpec buttonSpec) - : base(redirector, paletteMetric, metricPadding, manager, buttonSpec) + : base(redirector!, paletteMetric, metricPadding, manager!, buttonSpec) { } #endregion @@ -52,7 +52,7 @@ public ButtonSpecViewRibbon(PaletteRedirect? redirector, /// Controller instance. public override ButtonSpecViewControllers CreateController(ViewDrawButton viewButton, NeedPaintHandler needPaint, - MouseEventHandler clickHandler) + MouseEventHandler? clickHandler) { // Create a ribbon specific button controller _controller = new ButtonSpecRibbonController(viewButton, needPaint) @@ -77,9 +77,9 @@ public override ButtonSpecViewControllers CreateController(ViewDrawButton viewBu /// /// Source of the event. /// An EventArgs that contains the event data. - protected override void OnFinishDelegate(object sender, EventArgs e) => + protected override void OnFinishDelegate(object? sender, EventArgs? e) => // Ask the button to remove the fixed pressed appearance - _controller.RemoveFixed(); + _controller?.RemoveFixed(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/AppButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/AppButtonController.cs index 27d0049fe..86080e09b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/AppButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/AppButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -251,14 +251,24 @@ public virtual void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { ViewBase? newView = null; - var ribbon = (KryptonRibbon)c; + var ribbon = c as KryptonRibbon; + + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } switch (e.KeyData) { case Keys.Tab: case Keys.Right: // Ask the ribbon to get use the first view for the qat - newView = ribbon.GetFirstQATView() ?? ribbon.TabsArea.ButtonSpecManager.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Near); + newView = ribbon.GetFirstQATView() ?? ribbon.TabsArea.ButtonSpecManager?.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Near); // Get the first near edge button (the last near button is the leftmost one!) @@ -277,16 +287,16 @@ public void KeyDown(Control c, KeyEventArgs e) } // Move across to any far defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + newView ??= ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any inherit defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView ??= ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); break; case Keys.Tab | Keys.Shift: case Keys.Left: // Move across to any far defined buttons - newView = ribbon.TabsArea.ButtonSpecManager.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Far) ?? - ribbon.TabsArea.ButtonSpecManager.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = ribbon.TabsArea.ButtonSpecManager?.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Far) ?? + ribbon.TabsArea.ButtonSpecManager?.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any inherit defined buttons @@ -295,11 +305,11 @@ public void KeyDown(Control c, KeyEventArgs e) if (e.KeyData != Keys.Left) { // Get the last control on the selected tab - newView = ribbon.GroupsArea.ViewGroups.GetLastFocusItem() ?? + newView = ribbon.GroupsArea.ViewGroups.GetLastFocusItem() ?? (ribbon.SelectedTab != null // Get the currently selected tab page ? ribbon.TabsArea.LayoutTabs.GetViewForRibbonTab(ribbon.SelectedTab) : ribbon.TabsArea.LayoutTabs.GetViewForLastRibbonTab()); - + } else { @@ -309,7 +319,7 @@ public void KeyDown(Control c, KeyEventArgs e) } // Get the last near edge button (the first near button is the rightmost one!) - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near); + newView ??= ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near); // Get the last qat button newView ??= ribbon.GetLastQATView(); @@ -330,9 +340,9 @@ public void KeyDown(Control c, KeyEventArgs e) } // If we have a new view to focus and it is not ourself... - if ((newView != null) - && (newView != Target1) - && (newView != Target2) + if ((newView != null) + && (newView != Target1) + && (newView != Target2) && (newView != Target3) ) { @@ -371,8 +381,18 @@ public void KeyPress(Control c, KeyPressEventArgs e) /// Perform actual selection of the item. /// /// Reference to owning ribbon instance. - public void KeyTipSelect(KryptonRibbon ribbon) + public void KeyTipSelect(KryptonRibbon? ribbon) { + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + // We leave key tips usage whenever we use the application button ribbon.KillKeyboardKeyTips(); @@ -383,7 +403,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) UpdateTargetState(); // Switch focus to ourself - ribbon.FocusView = ribbon.TabsArea.LayoutAppButton.AppButton; + ribbon.FocusView = ribbon.TabsArea.LayoutAppButton.AppButton; // Generate a click event Keyboard = true; @@ -397,7 +417,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) /// protected void UpdateTargetState() { - // By default the button is in the normal state + // By default, the button is in the normal state var newState = PaletteState.Normal; // Only allow another state if the ribbon is enabled @@ -494,7 +514,7 @@ protected virtual void OnClick(MouseEventArgs e) #endregion #region Implementation - private void OnUpdateTimer(object sender, EventArgs e) + private void OnUpdateTimer(object? sender, EventArgs e) { _updateTimer.Stop(); UpdateTargetState(); diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/AppTabController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/AppTabController.cs index 2df145e33..ddb789edf 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/AppTabController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/AppTabController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -29,7 +29,6 @@ internal class AppTabController : GlobalId, private bool _mouseDown; private bool _fixedPressed; private bool _hasFocus; - #endregion #region Events @@ -70,7 +69,7 @@ public AppTabController(KryptonRibbon ribbon) /// Gets and sets the second target element. /// public ViewBase Target2 { get; set; } - + /// /// Gets and sets the third target element. /// @@ -246,14 +245,25 @@ public virtual void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { ViewBase? newView = null; - var ribbon = (KryptonRibbon)c; + + var ribbon = c as KryptonRibbon; + + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } switch (e.KeyData) { case Keys.Tab: case Keys.Right: // Ask the ribbon to get use the first view for the qat - newView = ribbon.GetFirstQATView() ?? ribbon.TabsArea.ButtonSpecManager.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Near); + newView = ribbon.GetFirstQATView() ?? ribbon.TabsArea.ButtonSpecManager?.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Near); // Get the first near edge button (the last near button is the leftmost one!) @@ -272,16 +282,16 @@ public void KeyDown(Control c, KeyEventArgs e) } // Move across to any far defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + newView ??= ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any inherit defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView ??= ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); break; case Keys.Tab | Keys.Shift: case Keys.Left: // Move across to any far defined buttons - newView = ribbon.TabsArea.ButtonSpecManager.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Far) ?? - ribbon.TabsArea.ButtonSpecManager.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = ribbon.TabsArea.ButtonSpecManager?.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Far) ?? + ribbon.TabsArea.ButtonSpecManager?.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any inherit defined buttons @@ -290,7 +300,7 @@ public void KeyDown(Control c, KeyEventArgs e) if (e.KeyData != Keys.Left) { // Get the last control on the selected tab - newView = ribbon.GroupsArea.ViewGroups.GetLastFocusItem() ?? + newView = ribbon.GroupsArea.ViewGroups.GetLastFocusItem() ?? (ribbon.SelectedTab != null // Get the currently selected tab page ? ribbon.TabsArea.LayoutTabs.GetViewForRibbonTab(ribbon.SelectedTab) : ribbon.TabsArea.LayoutTabs.GetViewForLastRibbonTab()); @@ -303,7 +313,7 @@ public void KeyDown(Control c, KeyEventArgs e) } // Get the last near edge button (the first near button is the rightmost one!) - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near); + newView ??= ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near); // Get the last qat button newView ??= ribbon.GetLastQATView(); @@ -324,7 +334,7 @@ public void KeyDown(Control c, KeyEventArgs e) } // If we have a new view to focus and it is not ourself... - if ((newView != null) && (newView != Target1) && + if ((newView != null) && (newView != Target1) && (newView != Target2) && (newView != Target3)) { // If the new view is a tab then select that tab unless in minimized mode @@ -362,8 +372,18 @@ public void KeyPress(Control c, KeyPressEventArgs e) /// Perform actual selection of the item. /// /// Reference to owning ribbon instance. - public void KeyTipSelect(KryptonRibbon ribbon) + public void KeyTipSelect(KryptonRibbon? ribbon) { + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull("ribbon")); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull("ribbon.TabsArea")); + } + // We leave key tips usage whenever we use the application button ribbon.KillKeyboardKeyTips(); @@ -374,7 +394,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) UpdateTargetState(); // Switch focus to ourself - ribbon.FocusView = ribbon.TabsArea.LayoutAppButton.AppButton; + ribbon.FocusView = ribbon.TabsArea.LayoutAppButton.AppButton; // Generate a click event Keyboard = true; @@ -388,7 +408,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) /// protected void UpdateTargetState() { - // By default the button is in the normal state + // By default, the button is in the normal state var newState = PaletteState.Normal; // Only allow another state if the ribbon is enabled diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecAppButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecAppButtonController.cs index 4a2f0f733..849a2af5e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecAppButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecAppButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -48,17 +48,18 @@ public ButtonSpecAppButtonController(ViewContextMenuManager viewManager, /// /// Reference to the source control instance. /// A KeyEventArgs that contains the event data. - public override void KeyDown([DisallowNull] Control c, [DisallowNull] KeyEventArgs e) + public override void KeyDown([DisallowNull] Control? c, [DisallowNull] KeyEventArgs? e) { - Debug.Assert(c != null); - Debug.Assert(e != null); + Debug.Assert(c is not null); + Debug.Assert(e is not null); // Validate incoming references - if (c == null) + if (c is null) { throw new ArgumentNullException(nameof(c)); } - if (e == null) + + if (e is null) { throw new ArgumentNullException(nameof(e)); } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecRibbonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecRibbonController.cs index 657e59921..319153264 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecRibbonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/ButtonSpecRibbonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -45,14 +45,30 @@ public ButtonSpecRibbonController(ViewBase target, public override void KeyDown(Control c, KeyEventArgs e) { ViewBase? newView = null; - var ribbon = (KryptonRibbon)c; + var ribbon = c as KryptonRibbon; + + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + + if (ribbon.TabsArea.ButtonSpecManager is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea.ButtonSpecManager))); + } // Get the button spec associated with this controller - var viewButton = (ViewDrawButton)Target; - ButtonSpec buttonSpec = ribbon.TabsArea.ButtonSpecManager.GetButtonSpecFromView(viewButton); + ViewDrawButton? viewButton = Target as ViewDrawButton ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(Target))); + + ButtonSpec? buttonSpec = ribbon.TabsArea.ButtonSpecManager.GetButtonSpecFromView(viewButton) ?? throw new NullReferenceException( "ribbon.TabsArea.ButtonSpecManager.GetButtonSpecFromView(viewButton) returned null."); - // Note if we are on the near edge - var isNear = buttonSpec.Edge == PaletteRelativeEdgeAlign.Near; + // Note If we are on the near edge + var isNear = buttonSpec.Edge is PaletteRelativeEdgeAlign.Near; switch (e.KeyData) { @@ -156,7 +172,7 @@ public override void KeyDown(Control c, KeyEventArgs e) if (e.KeyData != Keys.Left) { // Get the last control on the selected tab - newView = ribbon.GroupsArea.ViewGroups.GetLastFocusItem() ?? + newView = ribbon.GroupsArea.ViewGroups.GetLastFocusItem() ?? (ribbon.SelectedTab != null // Get the currently selected tab page ? ribbon.TabsArea.LayoutTabs.GetViewForRibbonTab(ribbon.SelectedTab) : ribbon.TabsArea.LayoutTabs.GetViewForLastRibbonTab()); diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/CollapsedGroupController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/CollapsedGroupController.cs index 501ff5270..4bc6f4d6c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/CollapsedGroupController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/CollapsedGroupController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -45,16 +45,16 @@ internal class CollapsedGroupController : GlobalId, /// View element that owns this controller. /// Paint delegate for notifying visual changes. public CollapsedGroupController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull]ViewLayoutDocker target, - [DisallowNull]NeedPaintHandler needPaint) + [DisallowNull] ViewLayoutDocker target, + [DisallowNull] NeedPaintHandler needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(target != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(target is not null); + Debug.Assert(needPaint is not null); - _ribbon = ribbon; - _target = target; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _target = target ?? throw new ArgumentNullException(nameof(target)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion @@ -145,7 +145,7 @@ public virtual void DoubleClick(Point pt) public virtual void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -242,10 +242,20 @@ protected virtual void OnNeedPaint(bool needLayout, #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -258,12 +268,12 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any far defined buttons // Move across to any inherit defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView ??= ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Rotate around to application button if (newView == null) diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/ComboBoxController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/ComboBoxController.cs index 861b5d707..1a8ec1b19 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/ComboBoxController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/ComboBoxController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -39,13 +39,9 @@ public ComboBoxController([DisallowNull] KryptonRibbon ribbon, [DisallowNull] KryptonRibbonGroupComboBox comboBox, [DisallowNull] ViewDrawRibbonGroupComboBox target) { - Debug.Assert(ribbon != null); - Debug.Assert(comboBox != null); - Debug.Assert(target != null); - - _ribbon = ribbon; - _comboBox = comboBox; - _target = target; + _ribbon = ribbon ?? throw new Exception( GlobalStaticValues.VariableCannotBeNull(nameof(_ribbon))); + _comboBox = comboBox ?? throw new Exception(GlobalStaticValues.VariableCannotBeNull(nameof(_comboBox))); + _target = target ?? throw new Exception(GlobalStaticValues.VariableCannotBeNull(nameof(_target))); } #endregion @@ -56,7 +52,7 @@ public ComboBoxController([DisallowNull] KryptonRibbon ribbon, /// Reference to the source control instance. public void GotFocus(Control c) { - if (_comboBox.LastComboBox.ComboBox is { CanFocus: true }) + if (_comboBox.LastComboBox!.ComboBox is { CanFocus: true }) { _ribbon.LostFocusLosesKeyboard = false; _comboBox.LastComboBox.ComboBox.Focus(); @@ -81,7 +77,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +120,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the combobox take the focus - if (_comboBox.LastComboBox.CanFocus) + if (_comboBox.LastComboBox!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -138,7 +134,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) ribbon.KillKeyboardMode(); // Push focus to the specified target control - _comboBox.LastComboBox.ComboBox.Focus(); + _comboBox.LastComboBox.ComboBox?.Focus(); // Ensure that the previous ribbon focus is restored when the popup window is dismissed // If the textbox is inside a popup window @@ -151,10 +147,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -167,12 +173,12 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any far defined buttons // Move across to any inherit defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView ??= ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Rotate around to application button if (newView == null) @@ -185,7 +191,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/ContextClickController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/ContextClickController.cs index 1a907f3bd..3ac57eea2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/ContextClickController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/ContextClickController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/ContextTitleController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/ContextTitleController.cs index ec99310bb..b5f1adc32 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/ContextTitleController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/ContextTitleController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,10 +30,10 @@ internal class ContextTitleController : GlobalId, /// Initialize a new instance of the ContextTitleController class. /// /// Reference to owning ribbon instance. - public ContextTitleController([DisallowNull] KryptonRibbon ribbon) + public ContextTitleController([DisallowNull] KryptonRibbon? ribbon) { Debug.Assert(ribbon != null); - _ribbon = ribbon; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); } #endregion @@ -41,7 +41,7 @@ public ContextTitleController([DisallowNull] KryptonRibbon ribbon) /// /// Gets and sets the associated context tab set. /// - public ContextTabSet ContextTabSet { get; set; } + public ContextTabSet? ContextTabSet { get; set; } #endregion @@ -84,7 +84,7 @@ public virtual bool MouseDown(Control c, Point pt, MouseButtons button) if (_ribbon is { InDesignMode: false, Enabled: true }) { // Select the first tab in the context - ContextTabSet.FirstTab.RibbonTab.Ribbon.SelectedTab = ContextTabSet.FirstTab.RibbonTab; + ContextTabSet.FirstTab.RibbonTab!.Ribbon!.SelectedTab = ContextTabSet.FirstTab.RibbonTab; } } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/CustomControlController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/CustomControlController.cs index 9a7fe1a84..856b86fec 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/CustomControlController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/CustomControlController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class CustomControlController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public CustomControlController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupCustomControl customControl, - [DisallowNull] ViewDrawRibbonGroupCustomControl target) + public CustomControlController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupCustomControl? customControl, + [DisallowNull] ViewDrawRibbonGroupCustomControl? target) { - Debug.Assert(ribbon != null); - Debug.Assert(customControl != null); - Debug.Assert(customControl != null); + Debug.Assert(ribbon is not null); + Debug.Assert(customControl is not null); + Debug.Assert(customControl is not null); - _ribbon = ribbon; - _customControl = customControl; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _customControl = customControl ?? throw new ArgumentNullException(nameof(customControl)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +124,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the custom control take the focus - if (_customControl.LastCustomControl.CanFocus) + if (_customControl.LastCustomControl!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -151,10 +151,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -167,12 +177,12 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any far defined buttons // Move across to any inherit defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView ??= ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Rotate around to application button if (newView == null) @@ -185,7 +195,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/DateTimePickerController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/DateTimePickerController.cs index 308b5e58b..2dddb7607 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/DateTimePickerController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/DateTimePickerController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -18,7 +18,7 @@ namespace Krypton.Ribbon /// Process mouse events for a ribbon group date time picker. /// internal class DateTimePickerController : GlobalId, - ISourceController, + ISourceController, IKeyController, IRibbonKeyTipTarget { @@ -35,17 +35,17 @@ internal class DateTimePickerController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public DateTimePickerController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupDateTimePicker dateTimePicker, - [DisallowNull] ViewDrawRibbonGroupDateTimePicker target) + public DateTimePickerController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupDateTimePicker? dateTimePicker, + [DisallowNull] ViewDrawRibbonGroupDateTimePicker? target) { - Debug.Assert(ribbon != null); - Debug.Assert(dateTimePicker != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(dateTimePicker is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _dateTimePicker = dateTimePicker; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _dateTimePicker = dateTimePicker ?? throw new ArgumentNullException(nameof(dateTimePicker)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +124,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the date time picker take the focus - if (_dateTimePicker.LastDateTimePicker.CanFocus) + if (_dateTimePicker.LastDateTimePicker!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -151,10 +151,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -167,12 +177,12 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + newView = ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any far defined buttons // Move across to any inherit defined buttons - newView ??= ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView ??= ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Rotate around to application button if (newView == null) @@ -185,7 +195,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/DialogLauncherButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/DialogLauncherButtonController.cs index a98a63bf1..9a37085c7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/DialogLauncherButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/DialogLauncherButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -25,7 +25,7 @@ internal class DialogLauncherButtonController : LeftUpButtonController, #region Instance Fields private bool _hasFocus; #endregion - + #region Identity /// /// Initialize a new instance of the DialogLauncherButtonController class. @@ -78,7 +78,7 @@ public virtual void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = Ribbon.GetControllerControl(c); + c = Ribbon.GetControllerControl(c)!; switch (c) { @@ -158,6 +158,11 @@ private void KeyDownRibbon(KeyEventArgs e) { ViewBase? newView = null; + if (Ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(Ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -170,12 +175,12 @@ private void KeyDownRibbon(KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = Ribbon.GroupsArea.ViewGroups.GetNextFocusItem(Target) ?? Ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + newView = Ribbon.GroupsArea.ViewGroups.GetNextFocusItem(Target) ?? Ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any far defined buttons // Move across to any inherit defined buttons - newView ??= Ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView ??= Ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Rotate around to application button if (newView == null) @@ -188,7 +193,7 @@ private void KeyDownRibbon(KeyEventArgs e) { newView = Ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Space: case Keys.Enter: diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/DomainUpDownController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/DomainUpDownController.cs index 92e3a471a..958726e41 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/DomainUpDownController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/DomainUpDownController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class DomainUpDownController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public DomainUpDownController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupDomainUpDown domainUpDown, - [DisallowNull] ViewDrawRibbonGroupDomainUpDown target) + public DomainUpDownController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupDomainUpDown? domainUpDown, + [DisallowNull] ViewDrawRibbonGroupDomainUpDown? target) { - Debug.Assert(ribbon != null); - Debug.Assert(domainUpDown != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(domainUpDown is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _domainUpDown = domainUpDown; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _domainUpDown = domainUpDown ?? throw new ArgumentNullException(nameof(domainUpDown)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -56,7 +56,7 @@ public DomainUpDownController([DisallowNull] KryptonRibbon ribbon, /// Reference to the source control instance. public void GotFocus(Control c) { - if (_domainUpDown.LastDomainUpDown.DomainUpDown is { CanFocus: true }) + if (_domainUpDown.LastDomainUpDown!.DomainUpDown is { CanFocus: true }) { _ribbon.LostFocusLosesKeyboard = false; _domainUpDown.LastDomainUpDown.DomainUpDown.Focus(); @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +124,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the numeric up-down take the focus - if (_domainUpDown.LastDomainUpDown.CanFocus) + if (_domainUpDown.LastDomainUpDown!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -151,10 +151,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -167,8 +177,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -185,7 +195,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryButtonController.cs index 33b880ea3..29d6bb08b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -25,7 +25,8 @@ internal class GalleryButtonController : GlobalId, private bool _pressed; private bool _mouseOver; private NeedPaintHandler? _needPaint; - private readonly Timer _repeatTimer; + private Timer? _repeatTimer; + #endregion #region Events @@ -48,7 +49,7 @@ public GalleryButtonController([DisallowNull] ViewBase target, { Debug.Assert(target != null); - Target = target; + Target = target!; NeedPaint = needPaint; if (repeatTimer) @@ -73,7 +74,7 @@ public void ForceLeave() _pressed = false; _mouseOver = false; UpdateTargetState(new Point(int.MaxValue, int.MaxValue)); - _repeatTimer.Stop(); + _repeatTimer?.Stop(); } } #endregion @@ -116,7 +117,7 @@ public virtual bool MouseDown(Control c, Point pt, MouseButtons button) if (Target.Enabled) { OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); - _repeatTimer.Start(); + _repeatTimer?.Start(); } } @@ -136,7 +137,7 @@ public virtual void MouseUp(Control c, Point pt, MouseButtons button) { _pressed = false; UpdateTargetState(pt); - _repeatTimer.Stop(); + _repeatTimer?.Stop(); } } @@ -153,7 +154,9 @@ public virtual void MouseLeave(Control c, ViewBase? next) _pressed = false; _mouseOver = false; UpdateTargetState(c); - _repeatTimer.Stop(); + // Have to check for null Because: + // when moving from a gallery to the Expand tooltip button it would throw an exception ! + _repeatTimer?.Stop(); } } @@ -219,7 +222,7 @@ protected void UpdateTargetState(Control c) if (c is { IsDisposed: false }) { // Ensure control is inside a visible top level form - Form f = c.FindForm(); + Form? f = c.FindForm(); if (f is { Visible: true }) { UpdateTargetState(c.PointToClient(Control.MousePosition)); @@ -236,14 +239,18 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected virtual void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled if (!Target.Enabled) { newState = PaletteState.Disabled; - _repeatTimer.Stop(); + _repeatTimer?.Stop(); + + // Repeats will crash the application, below should solve this + _repeatTimer?.Dispose(); + _repeatTimer = null; } else { @@ -275,7 +282,7 @@ protected virtual void UpdateTargetState(Point pt) #endregion #region Private - private void OnRepeatTick(object sender, EventArgs e) + private void OnRepeatTick(object? sender, EventArgs e) { if (Target.Enabled) { @@ -283,10 +290,10 @@ private void OnRepeatTick(object sender, EventArgs e) } else { - _repeatTimer.Stop(); + _repeatTimer?.Stop(); } } - + #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryController.cs index eb1b904ea..97ce572aa 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class GalleryController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public GalleryController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupGallery gallery, - [DisallowNull] ViewDrawRibbonGroupGallery target) + public GalleryController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupGallery? gallery, + [DisallowNull] ViewDrawRibbonGroupGallery? target) { - Debug.Assert(ribbon != null); - Debug.Assert(gallery != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(gallery is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _gallery = gallery; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _gallery = gallery ?? throw new ArgumentNullException(nameof(gallery)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -136,10 +136,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -152,8 +162,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -170,7 +180,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryItemController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryItemController.cs index a9c622eec..50d6d34fc 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryItemController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/GalleryItemController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -43,17 +43,17 @@ internal class GalleryItemController : GlobalId, /// Target for state changes. /// Reference to layout of the image items. /// Delegate for notifying paint requests. - public GalleryItemController([DisallowNull] ViewDrawRibbonGalleryItem target, - [DisallowNull] ViewLayoutRibbonGalleryItems layout, - NeedPaintHandler needPaint) + public GalleryItemController([DisallowNull] ViewDrawRibbonGalleryItem? target, + [DisallowNull] ViewLayoutRibbonGalleryItems? layout, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(target != null); - Debug.Assert(layout != null); + Debug.Assert(target is not null); + Debug.Assert(layout is not null); MousePoint = CommonHelper.NullPoint; - _target = target; - _layout = layout; - NeedPaint = needPaint; + _target = target ?? throw new ArgumentNullException(nameof(target)); + _layout = layout ?? throw new ArgumentNullException(nameof(layout)); + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion @@ -191,7 +191,7 @@ public virtual void MouseLeave(Control c, ViewBase? next) _mouseOver = false; // Not tracking the mouse means a null value - MousePoint = CommonHelper.NullPoint; + MousePoint = CommonHelper.NullPoint; // If leaving the view then cannot be capturing mouse input anymore Captured = false; @@ -379,7 +379,7 @@ protected void UpdateTargetState(Control c) if (c is { IsDisposed: false }) { // Ensure control is inside a visible top level form - Form f = c.FindForm(); + Form? f = c.FindForm(); if (f is { Visible: true }) { UpdateTargetState(c.PointToClient(Control.MousePosition)); @@ -396,7 +396,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected virtual void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/GroupButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/GroupButtonController.cs index 3041ff856..14fb9b293 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/GroupButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/GroupButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -59,17 +59,17 @@ internal class GroupButtonController : GlobalId, /// Source control instance. /// Target for state changes. /// Delegate for notifying paint requests. - public GroupButtonController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewDrawRibbonGroupButtonBackBorder target, - [DisallowNull] NeedPaintHandler needPaint) + public GroupButtonController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewDrawRibbonGroupButtonBackBorder? target, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(target != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(target is not null); + Debug.Assert(needPaint is not null); - _ribbon = ribbon; - _target = target; - NeedPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _target = target ?? throw new ArgumentNullException(nameof(target)); + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Default other fields ButtonType = GroupButtonType.Push; @@ -177,50 +177,50 @@ public virtual bool MouseDown(Control c, Point pt, MouseButtons button) // Only interested in left mouse pressing down // Can only click if enabled case MouseButtons.Left when ClickOnDown(pt) && _target.Enabled: - { - Captured = true; - - // If already in fixed mode, then ignore mouse down - if (!_fixedPressed) { - // Mouse is being pressed - UpdateTargetState(pt); + Captured = true; - // Show the button as pressed, until told otherwise - _fixedPressed = true; - - // Raise the appropriate event - switch (ButtonType) + // If already in fixed mode, then ignore mouse down + if (!_fixedPressed) { - case GroupButtonType.Split: - // Track if the mouse is inside the split area - if (ButtonType == GroupButtonType.Split) - { - MouseInSplit = _splitRectangle.Contains(pt); - } - - if (_splitRectangle.Contains(pt)) - { + // Mouse is being pressed + UpdateTargetState(pt); + + // Show the button as pressed, until told otherwise + _fixedPressed = true; + + // Raise the appropriate event + switch (ButtonType) + { + case GroupButtonType.Split: + // Track if the mouse is inside the split area + if (ButtonType == GroupButtonType.Split) + { + MouseInSplit = _splitRectangle.Contains(pt); + } + + if (_splitRectangle.Contains(pt)) + { + OnDropDown(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); + } + else + { + OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); + } + break; + case GroupButtonType.DropDown: OnDropDown(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); - } - else - { + break; + case GroupButtonType.Push: + case GroupButtonType.Check: + default: OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); - } - break; - case GroupButtonType.DropDown: - OnDropDown(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); - break; - case GroupButtonType.Push: - case GroupButtonType.Check: - default: - OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); - break; + break; + } } - } - break; - } + break; + } case MouseButtons.Left: // Capturing mouse input Captured = true; @@ -390,7 +390,7 @@ public virtual void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -507,7 +507,7 @@ public NeedPaintHandler? NeedPaint /// Owning control. protected void UpdateTargetState(Control c) { - if ((c == null) || c.IsDisposed) + if (c == null || c.IsDisposed) { UpdateTargetState(new Point(int.MaxValue, int.MaxValue)); } @@ -523,7 +523,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // When disabled the button itself is shown as normal, the @@ -552,7 +552,7 @@ protected void UpdateTargetState(Point pt) if (_mouseOver || _hasFocus) { newState = PaletteState.Tracking; - + // We always show the button as being in the split when it has focus if (_hasFocus) { @@ -604,10 +604,20 @@ protected void UpdateTargetState(Point pt) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -620,8 +630,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -638,7 +648,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Space: case Keys.Enter: diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/GroupCheckBoxController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/GroupCheckBoxController.cs index 17da05613..135ef8154 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/GroupCheckBoxController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/GroupCheckBoxController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -53,20 +53,20 @@ internal class GroupCheckBoxController : GlobalId, /// Target for main element changes. /// Target for image state changes. /// Delegate for notifying paint requests. - public GroupCheckBoxController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewBase targetMain, - [DisallowNull] ViewDrawRibbonGroupCheckBoxImage targetImage, - [DisallowNull] NeedPaintHandler needPaint) + public GroupCheckBoxController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewBase? targetMain, + [DisallowNull] ViewDrawRibbonGroupCheckBoxImage? targetImage, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(targetMain != null); - Debug.Assert(targetImage != null); - Debug.Assert(needPaint != null); - - _ribbon = ribbon; - TargetMain = targetMain; - _targetImage = targetImage; - NeedPaint = needPaint; + Debug.Assert(ribbon is not null); + Debug.Assert(targetMain is not null); + Debug.Assert(targetImage is not null); + Debug.Assert(needPaint is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + TargetMain = targetMain ?? throw new ArgumentNullException(nameof(targetMain)); + _targetImage = targetImage ?? throw new ArgumentNullException(nameof(targetImage)); + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion @@ -269,7 +269,7 @@ public virtual void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -365,7 +365,7 @@ public NeedPaintHandler? NeedPaint /// Owning control. protected void UpdateTargetState(Control c) { - if ((c == null) || c.IsDisposed) + if (c == null || c.IsDisposed) { UpdateTargetState(new Point(int.MaxValue, int.MaxValue)); } @@ -437,10 +437,20 @@ protected void UpdateTargetState(Point pt) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -453,8 +463,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(TargetMain) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(TargetMain) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -471,7 +481,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Space: case Keys.Enter: diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/GroupRadioButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/GroupRadioButtonController.cs index 1526ee1ef..82ef25a2b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/GroupRadioButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/GroupRadioButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -53,20 +53,20 @@ internal class GroupRadioButtonController : GlobalId, /// Target for main element changes. /// Target for image state changes. /// Delegate for notifying paint requests. - public GroupRadioButtonController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewBase targetMain, - [DisallowNull] ViewDrawRibbonGroupRadioButtonImage targetImage, - [DisallowNull] NeedPaintHandler needPaint) + public GroupRadioButtonController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewBase? targetMain, + [DisallowNull] ViewDrawRibbonGroupRadioButtonImage? targetImage, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(targetMain != null); - Debug.Assert(targetImage != null); - Debug.Assert(needPaint != null); - - _ribbon = ribbon; - TargetMain = targetMain; - _targetImage = targetImage; - NeedPaint = needPaint; + Debug.Assert(ribbon is not null); + Debug.Assert(targetMain is not null); + Debug.Assert(targetImage is not null); + Debug.Assert(needPaint is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + TargetMain = targetMain ?? throw new ArgumentNullException(nameof(targetMain)); + _targetImage = targetImage ?? throw new ArgumentNullException(nameof(targetImage)); + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion @@ -269,7 +269,7 @@ public virtual void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -441,6 +441,16 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -453,8 +463,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(TargetMain) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(TargetMain) ?? ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager!.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -471,7 +481,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Space: case Keys.Enter: diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/LeftDownButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/LeftDownButtonController.cs index c24ce68f2..af98f7af7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/LeftDownButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/LeftDownButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -43,17 +43,17 @@ internal class LeftDownButtonController : GlobalId, /// Reference to owning ribbon instance. /// Target for state changes. /// Delegate for notifying changes in display. - public LeftDownButtonController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewBase target, - [DisallowNull] NeedPaintHandler needPaint) + public LeftDownButtonController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewBase? target, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(target != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(target is not null); + Debug.Assert(needPaint is not null); - Ribbon = ribbon; - Target = target; - _needPaint = needPaint; + Ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + Target = target ?? throw new ArgumentNullException(nameof(target)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _updateTimer = new Timer { @@ -135,7 +135,7 @@ public virtual void MouseEnter(Control c) _mouseOver = true; // Get the form we are inside - KryptonForm ownerForm = Ribbon.FindKryptonForm(); + KryptonForm? ownerForm = Ribbon.FindKryptonForm(); _active = ownerForm is { WindowActive: true } || VisualPopupManager.Singleton.IsTracking || Ribbon.InDesignMode || @@ -246,7 +246,7 @@ public virtual void DoubleClick(Point pt) /// protected virtual void UpdateTargetState() { - // By default the button is in the normal state + // By default, the button is in the normal state var newState = PaletteState.Normal; // Only allow another state if the ribbon is enabled @@ -304,7 +304,7 @@ protected virtual void OnNeedPaint(bool needLayout, #endregion #region Implementation - private void OnUpdateTimer(object sender, EventArgs e) + private void OnUpdateTimer(object? sender, EventArgs e) { _updateTimer.Stop(); UpdateTargetState(); diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/LeftUpButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/LeftUpButtonController.cs index b0b85d554..11edded76 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/LeftUpButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/LeftUpButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -41,19 +41,19 @@ internal class LeftUpButtonController : GlobalId, /// Reference to owning ribbon instance. /// Target for state changes. /// Delegate for notifying paint requests. - public LeftUpButtonController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewBase target, - NeedPaintHandler needPaint) + public LeftUpButtonController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewBase? target, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(target is not null); // Remember target for state changes - Ribbon = ribbon; - Target = target; + Ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + Target = target ?? throw new ArgumentNullException(nameof(target)); // Store the provided paint notification delegate - NeedPaint = needPaint; + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion @@ -84,7 +84,7 @@ public virtual void MouseEnter(Control c) _mouseOver = true; // Get the form we are inside - KryptonForm ownerForm = Ribbon.FindKryptonForm(); + KryptonForm? ownerForm = Ribbon.FindKryptonForm(); _active = ownerForm is { WindowActive: true } || VisualPopupManager.Singleton.IsTracking || Ribbon.InDesignMode || @@ -194,7 +194,7 @@ public virtual void MouseLeave(Control c, ViewBase? next) UpdateTargetState(c); } } - + /// /// Left mouse button double click. /// @@ -266,7 +266,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected virtual void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/MaskedTextBoxController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/MaskedTextBoxController.cs index aa74b7fe9..cab5da605 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/MaskedTextBoxController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/MaskedTextBoxController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class MaskedTextBoxController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public MaskedTextBoxController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupMaskedTextBox maskedTextBox, - [DisallowNull] ViewDrawRibbonGroupMaskedTextBox target) + public MaskedTextBoxController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupMaskedTextBox? maskedTextBox, + [DisallowNull] ViewDrawRibbonGroupMaskedTextBox? target) { - Debug.Assert(ribbon != null); - Debug.Assert(maskedTextBox != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(maskedTextBox is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _maskedTextBox = maskedTextBox; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _maskedTextBox = maskedTextBox ?? throw new ArgumentNullException(nameof(maskedTextBox)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -56,7 +56,7 @@ public MaskedTextBoxController([DisallowNull] KryptonRibbon ribbon, /// Reference to the source control instance. public void GotFocus(Control c) { - if (_maskedTextBox.LastMaskedTextBox.MaskedTextBox is { CanFocus: true }) + if (_maskedTextBox.LastMaskedTextBox?.MaskedTextBox is { CanFocus: true }) { _ribbon.LostFocusLosesKeyboard = false; _maskedTextBox.LastMaskedTextBox.MaskedTextBox.Focus(); @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +124,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the masked textbox take the focus - if (_maskedTextBox.LastMaskedTextBox.CanFocus) + if (_maskedTextBox.LastMaskedTextBox!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -138,7 +138,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) ribbon.KillKeyboardMode(); // Push focus to the specified target control - _maskedTextBox.LastMaskedTextBox.MaskedTextBox.Focus(); + _maskedTextBox.LastMaskedTextBox.MaskedTextBox?.Focus(); // Ensure that the previous ribbon focus is restored when the popup window is dismissed // If the masked textbox is inside a popup window @@ -151,10 +151,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -167,8 +177,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -185,7 +195,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/NullController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/NullController.cs index b5657e816..a83572a1a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/NullController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/NullController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/NumericUpDownController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/NumericUpDownController.cs index 3e690b4ab..e2b252e10 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/NumericUpDownController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/NumericUpDownController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class NumericUpDownController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public NumericUpDownController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupNumericUpDown numericUpDown, - [DisallowNull] ViewDrawRibbonGroupNumericUpDown target) + public NumericUpDownController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupNumericUpDown? numericUpDown, + [DisallowNull] ViewDrawRibbonGroupNumericUpDown? target) { - Debug.Assert(ribbon != null); - Debug.Assert(numericUpDown != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(numericUpDown is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _numericUpDown = numericUpDown; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _numericUpDown = numericUpDown ?? throw new ArgumentNullException(nameof(numericUpDown)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -56,7 +56,7 @@ public NumericUpDownController([DisallowNull] KryptonRibbon ribbon, /// Reference to the source control instance. public void GotFocus(Control c) { - if (_numericUpDown.LastNumericUpDown.NumericUpDown is { CanFocus: true }) + if (_numericUpDown.LastNumericUpDown?.NumericUpDown is { CanFocus: true }) { _ribbon.LostFocusLosesKeyboard = false; _numericUpDown.LastNumericUpDown.NumericUpDown.Focus(); @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +124,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the numeric up-down take the focus - if (_numericUpDown.LastNumericUpDown.CanFocus) + if (_numericUpDown.LastNumericUpDown!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -138,7 +138,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) ribbon.KillKeyboardMode(); // Push focus to the specified target control - _numericUpDown.LastNumericUpDown.NumericUpDown.Focus(); + _numericUpDown.LastNumericUpDown.NumericUpDown?.Focus(); // Ensure that the previous ribbon focus is restored when the popup window is dismissed // If the numeric up-down is inside a popup window @@ -151,10 +151,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -167,8 +177,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -185,7 +195,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/QATButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/QATButtonController.cs index 03905c9c9..3bbeb8d48 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/QATButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/QATButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/QATExtraButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/QATExtraButtonController.cs index eee65ce63..a955c89a6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/QATExtraButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/QATExtraButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -143,13 +143,14 @@ public void KeyTipSelect(KryptonRibbon ribbon) OnClick(new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0)); // We should have a visual popup for showing the qat overflow group - if (VisualPopupManager.Singleton is { IsTracking: true, CurrentPopup: VisualPopupQATOverflow popupOverflow } - ) + if (VisualPopupManager.Singleton is { IsTracking: true, CurrentPopup: VisualPopupQATOverflow popupOverflow }) { // Grab the list of key tips from the popup group Ribbon.KeyTipMode = KeyTipMode.PopupQATOverflow; var keyTipList = new KeyTipInfoList(); - keyTipList.AddRange(popupOverflow.ViewQATContents.GetQATKeyTips(null)); + + // GetQATKeyTips() requires a valid reference to the KryptonForm the Ribbon belongs to. + keyTipList.AddRange(popupOverflow.ViewQATContents.GetQATKeyTips(ribbon.FindKryptonForm()!)); // Update key tips with those appropriate for this tab Ribbon.SetKeyTips(keyTipList, KeyTipMode.PopupQATOverflow); diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/RecentDocController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/RecentDocController.cs index f74538226..a09dd7ca6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/RecentDocController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/RecentDocController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -37,17 +37,17 @@ internal class RecentDocController : GlobalId, /// Owning view manager instance. /// Target menu item view element. /// Delegate for notifying paint requests. - public RecentDocController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewDrawRibbonAppMenuRecentDec menuItem, - [DisallowNull] NeedPaintHandler needPaint) + public RecentDocController([DisallowNull] ViewContextMenuManager? viewManager, + [DisallowNull] ViewDrawRibbonAppMenuRecentDec? menuItem, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(menuItem != null); - Debug.Assert(needPaint != null); + Debug.Assert(viewManager is not null); + Debug.Assert(menuItem is not null); + Debug.Assert(needPaint is not null); - ViewManager = viewManager; - _menuItem = menuItem; - NeedPaint = needPaint; + ViewManager = viewManager ?? throw new ArgumentNullException(nameof(viewManager)); + _menuItem = menuItem ?? throw new ArgumentNullException(nameof(menuItem)); + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/RepeatButtonController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/RepeatButtonController.cs index 6fc606bb0..1368b29ba 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/RepeatButtonController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/RepeatButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -43,19 +43,19 @@ internal class RepeatButtonController : GlobalId, /// Reference to owning control. /// Delegate for notifying paint requests. /// Target for state changes. - public RepeatButtonController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewBase target, - NeedPaintHandler needPaint) + public RepeatButtonController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewBase? target, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(target is not null); // Remember incoming references - _target = target; - _ribbon = ribbon; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _target = target ?? throw new ArgumentNullException(nameof(target)); // Store the provided paint notification delegate - NeedPaint = needPaint; + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _repeatTimer = new Timer { @@ -253,7 +253,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled @@ -323,9 +323,9 @@ private bool Active } else { - Form topForm = _ribbon.FindForm(); + Form? topForm = _ribbon.FindForm(); return (CommonHelper.ActiveFloatingWindow != null) || - ((topForm != null) && + ((topForm != null) && (topForm.ContainsFocus || ((topForm.Parent != null) && topForm is { Visible: true, Enabled: true }))); } @@ -333,7 +333,7 @@ private bool Active } } - private void OnRepeatTick(object sender, EventArgs e) => + private void OnRepeatTick(object? sender, EventArgs e) => // Keep generating clicks OnClick(new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0)); #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabController.cs index 2381372cb..2eb04c937 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -50,19 +50,19 @@ internal class RibbonTabController : GlobalId, /// Reference to owning control. /// Target for state changes. /// Delegate for notifying paint requests. - public RibbonTabController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewDrawRibbonTab target, - NeedPaintHandler needPaint) + public RibbonTabController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewDrawRibbonTab? target, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(target is not null); // Remember incoming references - _target = target; - _ribbon = ribbon; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _target = target ?? throw new ArgumentNullException(nameof(target)); // Store the provided paint notification delegate - NeedPaint = needPaint; + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion @@ -107,18 +107,18 @@ public virtual bool MouseDown(Control c, Point pt, MouseButtons button) { // Only interested in left mouse pressing down case MouseButtons.Left: - { - // Can only click if enabled - if (_target.Enabled) { - // Generate a click event - OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); + // Can only click if enabled + if (_target.Enabled) + { + // Generate a click event + OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); + } + + // Update the visual state + UpdateTargetState(c); + break; } - - // Update the visual state - UpdateTargetState(c); - break; - } case MouseButtons.Right: // Remember the user has pressed the right mouse button down _rightButtonDown = true; @@ -227,6 +227,11 @@ public void KeyDown(Control c, KeyEventArgs e) ViewBase? newView = null; Keys keyData = e.KeyData; + if (_ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(_ribbon.TabsArea))); + } + // When there is no selected tab then tab and shift+tab become right and left if (_ribbon.SelectedTab == null) { @@ -245,9 +250,9 @@ public void KeyDown(Control c, KeyEventArgs e) { case Keys.Right: // Get the next visible tab page - newView = (_target.ViewLayoutRibbonTabs.GetViewForNextRibbonTab(_target.RibbonTab) - ?? (ViewBase) _ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) - ?? _ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (_target.ViewLayoutRibbonTabs.GetViewForNextRibbonTab(_target.RibbonTab!) + ?? (ViewBase)_ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)!) + ?? _ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -264,12 +269,12 @@ public void KeyDown(Control c, KeyEventArgs e) { newView = _ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Left: // Get the previous visible tab page - newView = (_target.ViewLayoutRibbonTabs.GetViewForPreviousRibbonTab(_target.RibbonTab) - ?? (ViewBase) _ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near)) + newView = (_target.ViewLayoutRibbonTabs.GetViewForPreviousRibbonTab(_target.RibbonTab!) + ?? (ViewBase)_ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near)!) ?? _ribbon.GetLastQATView(); // Move across to any near defined buttons @@ -287,11 +292,11 @@ public void KeyDown(Control c, KeyEventArgs e) { newView = _ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Tab | Keys.Shift: // Move across to any near defined buttons - newView = _ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near) + newView = _ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near) ?? _ribbon.GetLastQATView(); // Get the last qat button @@ -307,7 +312,7 @@ public void KeyDown(Control c, KeyEventArgs e) { newView = _ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Down: // Get the first focus item for the currently selected page @@ -315,8 +320,8 @@ public void KeyDown(Control c, KeyEventArgs e) break; case Keys.Tab: // Get the first focus item for the currently selected page - newView = (_ribbon.GroupsArea.ViewGroups.GetFirstFocusItem() - ?? _ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near)) + newView = (_ribbon.GroupsArea.ViewGroups.GetFirstFocusItem() + ?? _ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Near)) ?? _ribbon.GetLastQATView(); // Move across to any near defined buttons @@ -334,12 +339,12 @@ public void KeyDown(Control c, KeyEventArgs e) { newView = _ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; case Keys.Enter: case Keys.Space: // When minimize, pressing enter will select the tab and pop it up - if (_ribbon.RealMinimizedMode + if (_ribbon.RealMinimizedMode && (_ribbon.SelectedTab != _target.RibbonTab) ) { @@ -417,12 +422,12 @@ public void KeyTipSelect(KryptonRibbon ribbon) /// public NeedPaintHandler NeedPaint { - get => _needPaint; + get => _needPaint!; set { // Warn if multiple sources want to hook their single delegate - Debug.Assert(((_needPaint == null) && (value != null)) + Debug.Assert(((_needPaint == null) && (value != null)) || ((_needPaint != null) && (value == null)) ); @@ -438,7 +443,7 @@ public NeedPaintHandler NeedPaint /// Owning control. protected void UpdateTargetState(Control c) { - if ((c == null) || c.IsDisposed) + if (c == null || c.IsDisposed) { UpdateTargetState(new Point(int.MaxValue, int.MaxValue)); } @@ -454,7 +459,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled @@ -502,7 +507,7 @@ protected void UpdateTargetState(Point pt) /// /// Does the palette change require a layout. /// Rectangle to invalidate. - protected virtual void OnNeedPaint(bool needLayout, + protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) { if (_needPaint != null) @@ -531,9 +536,9 @@ private bool Active } else { - Form topForm = _ribbon.FindForm(); + Form? topForm = _ribbon.FindForm(); return (CommonHelper.ActiveFloatingWindow != null) || - ((topForm != null) && + ((topForm != null) && (topForm.ContainsFocus || ((topForm.Parent != null) && topForm is { Visible: true, Enabled: true }))); } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabsController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabsController.cs index a794116ec..0770f9456 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabsController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/RibbonTabsController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -37,10 +37,10 @@ internal class RibbonTabsController : GlobalId, /// Initialize a new instance of the RibbonTabsController class. /// /// Reference to owning control. - public RibbonTabsController([DisallowNull] KryptonRibbon ribbon) + public RibbonTabsController([DisallowNull] KryptonRibbon? ribbon) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/RichTextBoxController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/RichTextBoxController.cs index 37d044906..d770b3646 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/RichTextBoxController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/RichTextBoxController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class RichTextBoxController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public RichTextBoxController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupRichTextBox richTextBox, - [DisallowNull] ViewDrawRibbonGroupRichTextBox target) + public RichTextBoxController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupRichTextBox? richTextBox, + [DisallowNull] ViewDrawRibbonGroupRichTextBox? target) { - Debug.Assert(ribbon != null); - Debug.Assert(richTextBox != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(richTextBox is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _richTextBox = richTextBox; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _richTextBox = richTextBox ?? throw new ArgumentNullException(nameof(richTextBox)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -56,10 +56,10 @@ public RichTextBoxController([DisallowNull] KryptonRibbon ribbon, /// Reference to the source control instance. public void GotFocus(Control c) { - if (_richTextBox.LastRichTextBox.RichTextBox is { CanFocus: true }) + if (_richTextBox.LastRichTextBox?.RichTextBox is { CanFocus: true }) { _ribbon.LostFocusLosesKeyboard = false; - _richTextBox.LastRichTextBox.RichTextBox.Focus(); + _richTextBox.LastRichTextBox.RichTextBox?.Focus(); } } @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +124,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the richtextbox take the focus - if (_richTextBox.LastRichTextBox.CanFocus) + if (_richTextBox.LastRichTextBox!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -138,7 +138,7 @@ public void KeyTipSelect(KryptonRibbon ribbon) ribbon.KillKeyboardMode(); // Push focus to the specified target control - _richTextBox.LastRichTextBox.RichTextBox.Focus(); + _richTextBox.LastRichTextBox.RichTextBox?.Focus(); // Ensure that the previous ribbon focus is restored when the popup window is dismissed // If the richtextbox is inside a popup window @@ -151,24 +151,34 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: case Keys.Left: // Get the previous focus item for the currently selected page - newView = ribbon.GroupsArea.ViewGroups.GetPreviousFocusItem(_target) ?? ribbon.TabsArea.LayoutTabs.GetViewForRibbonTab(ribbon.SelectedTab); + newView = ribbon.GroupsArea.ViewGroups?.GetPreviousFocusItem(_target) ?? ribbon.TabsArea.LayoutTabs?.GetViewForRibbonTab(ribbon.SelectedTab); // Got to the actual tab header break; case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups?.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -185,7 +195,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/TextBoxController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/TextBoxController.cs index 18d89d8c7..618f07f86 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/TextBoxController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/TextBoxController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class TextBoxController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public TextBoxController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupTextBox textBox, - [DisallowNull] ViewDrawRibbonGroupTextBox target) + public TextBoxController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupTextBox? textBox, + [DisallowNull] ViewDrawRibbonGroupTextBox? target) { - Debug.Assert(ribbon != null); - Debug.Assert(textBox != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(textBox is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _textBox = textBox; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _textBox = textBox ?? throw new ArgumentNullException(nameof(textBox)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -56,7 +56,7 @@ public TextBoxController([DisallowNull] KryptonRibbon ribbon, /// Reference to the source control instance. public void GotFocus(Control c) { - if (_textBox.LastTextBox.TextBox is { CanFocus: true }) + if (_textBox.LastTextBox?.TextBox is { CanFocus: true }) { _ribbon.LostFocusLosesKeyboard = false; _textBox.LastTextBox.TextBox.Focus(); @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -125,7 +125,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the textbox take the focus - if (_textBox.LastTextBox.CanFocus) + if (_textBox.LastTextBox!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -156,6 +156,16 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.ParameterCannotBeNull(nameof(ribbon))); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -168,8 +178,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -186,7 +196,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/TrackBarController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/TrackBarController.cs index abac0c23f..595d793c8 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/TrackBarController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/TrackBarController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,17 +35,17 @@ internal class TrackBarController : GlobalId, /// Reference to owning ribbon instance. /// Source definition. /// Target view element. - public TrackBarController([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupTrackBar trackBar, - [DisallowNull] ViewDrawRibbonGroupTrackBar target) + public TrackBarController([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupTrackBar? trackBar, + [DisallowNull] ViewDrawRibbonGroupTrackBar? target) { - Debug.Assert(ribbon != null); - Debug.Assert(trackBar != null); - Debug.Assert(target != null); + Debug.Assert(ribbon is not null); + Debug.Assert(trackBar is not null); + Debug.Assert(target is not null); - _ribbon = ribbon; - _trackBar = trackBar; - _target = target; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _trackBar = trackBar ?? throw new ArgumentNullException(nameof(trackBar)); + _target = target ?? throw new ArgumentNullException(nameof(target)); } #endregion @@ -81,7 +81,7 @@ public void LostFocus([DisallowNull] Control c) public void KeyDown(Control c, KeyEventArgs e) { // Get the root control that owns the provided control - c = _ribbon.GetControllerControl(c); + c = _ribbon.GetControllerControl(c)!; switch (c) { @@ -124,7 +124,7 @@ public void KeyPress(Control c, KeyPressEventArgs e) public void KeyTipSelect(KryptonRibbon ribbon) { // Can the trackbar take the focus - if (_trackBar.LastTrackBar.CanFocus) + if (_trackBar.LastTrackBar!.CanFocus) { // Prevent the ribbon from killing keyboard mode when it loses the focus, // as this causes the tracking windows to be killed and we want them kept @@ -151,10 +151,20 @@ public void KeyTipSelect(KryptonRibbon ribbon) #endregion #region Implementation - private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) + private void KeyDownRibbon(KryptonRibbon? ribbon, KeyEventArgs e) { ViewBase? newView = null; + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + + if (ribbon.TabsArea is null) + { + throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(ribbon.TabsArea))); + } + switch (e.KeyData) { case Keys.Tab | Keys.Shift: @@ -167,8 +177,8 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) case Keys.Tab: case Keys.Right: // Get the next focus item for the currently selected page - newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? - ribbon.TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + newView = (ribbon.GroupsArea.ViewGroups.GetNextFocusItem(_target) ?? ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far)) ?? + ribbon.TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move across to any far defined buttons @@ -185,7 +195,7 @@ private void KeyDownRibbon(KryptonRibbon ribbon, KeyEventArgs e) { newView = ribbon.TabsArea.LayoutAppTab.AppTab; } - } + } break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controller/ViewHighlightController.cs b/Source/Krypton Components/Krypton.Ribbon/Controller/ViewHighlightController.cs index 92948d1f3..a29fc5196 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controller/ViewHighlightController.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controller/ViewHighlightController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -44,14 +44,14 @@ internal class ViewHightlightController : GlobalId, /// /// Target for state changes. /// Delegate for notifying paint requests. - public ViewHightlightController([DisallowNull] ViewBase target, - [DisallowNull] NeedPaintHandler needPaint) + public ViewHightlightController([DisallowNull] ViewBase? target, + [DisallowNull] NeedPaintHandler? needPaint) { Debug.Assert(target != null); Debug.Assert(needPaint != null); - Target = target; - NeedPaint = needPaint; + Target = target ?? throw new ArgumentNullException(nameof(target)); + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); } #endregion @@ -87,7 +87,7 @@ public virtual void MouseMove(Control c, Point pt) /// True if capturing input; otherwise false. public virtual bool MouseDown(Control c, Point pt, MouseButtons button) { - if (_mouseOver + if (_mouseOver && (button == MouseButtons.Left)) { OnClick(EventArgs.Empty); diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGallery.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGallery.cs index c6e391f1b..6828daa86 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGallery.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGallery.cs @@ -5,10 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -107,7 +104,7 @@ public KryptonGallery() // Create content storage Images = new GalleryImages(NeedPaintDelegate); - DropButtonRanges = new KryptonGalleryRangeCollection(); + DropButtonRanges = []; // Create the palette storage StateCommon = new PaletteGalleryRedirect(Redirector, NeedPaintDelegate); @@ -623,13 +620,13 @@ protected override bool ProcessDialogKey(Keys keyData) // If inside a ribbon then we ignore the movement keys if (Ribbon is null or { InKeyboardMode: false }) { - _drawItems[_trackingIndex].KeyDown(new KeyEventArgs(keyData)); + _drawItems[_trackingIndex]?.KeyDown(new KeyEventArgs(keyData)); return true; } break; case Keys.Space: case Keys.Enter: - _drawItems[_trackingIndex].KeyDown(new KeyEventArgs(keyData)); + _drawItems[_trackingIndex]?.KeyDown(new KeyEventArgs(keyData)); return true; } } @@ -731,9 +728,9 @@ internal void SetTrackingIndex(int index, bool bringIntoView) internal bool DesignerGetHitTest(Point pt) => false; - internal Component DesignerComponentFromPoint(Point pt) => + internal Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision internal void DesignerMouseLeave() => @@ -830,7 +827,7 @@ internal void ShownGalleryDropDown(Rectangle screenRect, } // Need to know when the menu is dismissed - args.KryptonContextMenu.Closed += OnDropMenuClosed; + args.KryptonContextMenu!.Closed += OnDropMenuClosed; // Remember the delegate we need to fire when the menu is dismissed _finishDelegate = finishDelegate; @@ -845,7 +842,7 @@ internal void ShownGalleryDropDown(Rectangle screenRect, } } - private void OnDropMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) + private void OnDropMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) { if (_dropMenu != null) { @@ -881,13 +878,15 @@ private void OnDropMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) #endregion #region Implementation - private void OnDropImageSelect(object sender, EventArgs e) + private void OnDropImageSelect(object? sender, EventArgs e) { - var imageSelect = (KryptonContextMenuImageSelect)sender; - SelectedIndex = imageSelect.SelectedIndex; + if (sender is KryptonContextMenuImageSelect imageSelect && imageSelect is not null) + { + SelectedIndex = imageSelect.SelectedIndex; + } } - private void OnDropImageTracking(object sender, ImageSelectEventArgs e) => + private void OnDropImageTracking(object? sender, ImageSelectEventArgs e) => //KryptonContextMenuImageSelect imageSelect = (KryptonContextMenuImageSelect)sender; TrackingIndex = e.ImageIndex; @@ -900,15 +899,14 @@ private void UpdateStateAndPalettes() _drawDocker.Enabled = Enabled; // Find the new state of the main view element - PaletteState state; - state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDocker.ElementState = state; } private PaletteGalleryState GetGalleryState() => Enabled ? (IsActive ? StateActive : StateNormal) : StateDisabled; - private void OnTrackingTick(object sender, EventArgs e) + private void OnTrackingTick(object? sender, EventArgs e) { // If no change in tracking index over last interval if (_trackingIndex == _cacheTrackingIndex) @@ -919,7 +917,7 @@ private void OnTrackingTick(object sender, EventArgs e) // But only generate if actual event would yield a different value if (_eventTrackingIndex != _trackingIndex) { - OnTrackingImage(new ImageSelectEventArgs(_imageList, _trackingIndex)); + OnTrackingImage(new ImageSelectEventArgs(_imageList!, _trackingIndex)); } } else diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRange.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRange.cs index 3258aff51..6cf7d62df 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRange.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRange.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRangeCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRangeCollection.cs index d1d98fea7..6785824a6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRangeCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonGalleryRangeCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbon.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbon.cs index 52f624111..8a72d4a9a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbon.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbon.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. */ #endregion @@ -46,12 +44,10 @@ public RibbonButtonSpecAnyCollection(KryptonRibbon owner) #endregion #region Static Fields - private static readonly MethodInfo _containerSelect; #endregion #region Instance Fields - // Private private NeedPaintHandler _needPaintGroups; private VisualPopupMinimized? _minimizedPopup; private KryptonContextMenu? _kcm; @@ -68,13 +64,12 @@ public RibbonButtonSpecAnyCollection(KryptonRibbon owner) private KeyTipControl? _keyTipControlE; private KeyTipControl? _keyTipControlD; private KeyTipMode _keyTipMode; - private Button _hiddenFocusTarget; + private Button? _hiddenFocusTarget; // View Elements private ViewDrawPanel _drawMinimizedPanel; private ViewLayoutDocker? _rootDocker; private ViewLayoutDocker _ribbonDocker; - private ViewDrawRibbonComposition _compositionArea; private ViewDrawRibbonQATBorder _qatBelowRibbon; private ViewLayoutRibbonQATFromRibbon _qatBelowContents; private ViewDrawRibbonMinimizeBar _minimizeBar; @@ -83,10 +78,10 @@ public RibbonButtonSpecAnyCollection(KryptonRibbon owner) // Palettes private PaletteBackInheritRedirect _backPanelInherit; + private PaletteRibbonGeneralInheritRedirect _ribbonGeneralInherit; // Properties private bool _minimizedMode; - private bool _allowFormIntegrate; private bool _showMinimizeButton; private string _selectedContext; private Size _hideRibbonSize; @@ -101,7 +96,6 @@ public RibbonButtonSpecAnyCollection(KryptonRibbon owner) private PaletteBackStyle _backInactiveStyle; private KryptonRibbonTab? _minSelectedTab; private KryptonRibbonTab? _selectedTab; - #endregion #region Events @@ -183,7 +177,7 @@ static KryptonRibbon() => // Cache access to the internal 'Select' method of the ContainerControl _containerSelect = typeof(ContainerControl).GetMethod("Select", BindingFlags.Instance | - BindingFlags.NonPublic); + BindingFlags.NonPublic)!; /// /// Initialize a new instance of the KryptonRibbon class. @@ -194,6 +188,8 @@ public KryptonRibbon() SetStyle(ControlStyles.Selectable, false); SetStyle(ControlStyles.ResizeRedraw, false); + _selectedContext = string.Empty; + CreateRibbonCollections(); CreateButtonSpecs(); CreateStorageObjects(); @@ -204,8 +200,6 @@ public KryptonRibbon() // Snoop windows messages to handle command keys such as CTRL+F1 to // toggle minimized mode and also when to exit keyboard access mode Application.AddMessageFilter(this); - - _allowFormIntegrate = true; } /// @@ -223,11 +217,11 @@ protected override void Dispose(bool disposing) // layout that then causes the children to be added again! SuspendLayout(); - // Caption area must have chance to unintegrated from the custom chrome - CaptionArea.Dispose(); + // Caption area must have chance to un-integrated from the custom chrome + CaptionArea?.Dispose(); // Must get the tabs to dispose as it holds event hooks to other windows/controls - TabsArea.Dispose(); + TabsArea?.Dispose(); // Dispose of the cached krypton context menu if (_kcm != null) @@ -410,30 +404,6 @@ public override string Text #endregion #region Public Exposed Properties - /// - /// - [Category(@"Visuals")] - [Description(@"Integrate with operating system chrome instead of Krypton Palette")] - public bool AllowFormIntegrate - { - get => _allowFormIntegrate; - set - { - if (_allowFormIntegrate != value) - { - _allowFormIntegrate = value; - CaptionArea.PerformFormChromeCheck(); - } - } - } - - private bool ShouldSerializeAllowFormIntegrate() => _allowFormIntegrate; - - /// - /// Resets the AllowFormIntegrate property to its default value. - /// - public void ResetAllowFormIntegrate() => _allowFormIntegrate = true; // https://github.com/Krypton-Suite/Standard-Toolkit/issues/929 - /// /// Gets or sets if the user is allowed to change the minimized mode. @@ -661,6 +631,7 @@ public void ResetSelectedTab() => [Category(@"Values")] [Description(@"Common separated list of selected context names.")] [DefaultValue("")] + [AllowNull] public string SelectedContext { get => _selectedContext; @@ -683,12 +654,8 @@ public string SelectedContext } } - private bool ShouldSerializeSelectedContext() => !string.IsNullOrEmpty(_selectedContext); - - /// - /// Reset the SelectedContext to the default value. - /// private void ResetSelectedContext() => SelectedContext = string.Empty; + private bool ShouldSerializeSelectedContext() => !string.IsNullOrEmpty(_selectedContext); /// /// Gets the collection of ribbon context definitions. @@ -719,24 +686,24 @@ public string SelectedContext public RibbonShortcuts RibbonShortcuts { get; private set; } /// - /// Gets the set of ribbon display strings. + /// Gets the set of ribbon application button display strings. /// [Category(@"Values")] - [Description(@"Collection of ribbon strings.")] + [Description(@"Collection of ribbon app button settings.")] [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public RibbonStrings RibbonStrings { get; private set; } + public RibbonFileAppButton RibbonFileAppButton { get; private set; } /// /// Gets the set of ribbon application button display strings. /// [Category(@"Values")] - [Description(@"Collection of ribbon app button settings.")] + [Description(@"Collection of ribbon 'File app tab' settings.")] [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public RibbonAppButton RibbonAppButton { get; private set; } + public RibbonFileAppTab RibbonFileAppTab { get; private set; } /// /// Gets the styles for various ribbon elements. @@ -764,7 +731,7 @@ public Size HideRibbonSize if (_hideRibbonSize != value) { _hideRibbonSize = value; - TabsArea.CheckRibbonSize(); + TabsArea?.CheckRibbonSize(); } } } @@ -805,7 +772,7 @@ public bool MinimizedMode _drawMinimizedPanel.Add(GroupsArea); } - // Need to move any child controls out of the client area so they are not shown, + // Need to move any child controls out of the client area, so they are not shown, // this can have when the QAT is below the ribbon and then the child controls that // contain the per tab details will still be visible in that area. foreach (Control child in Controls) @@ -821,7 +788,7 @@ public bool MinimizedMode ValidateSelectedTab(); // Must layout to effect changes - TabsArea.RecreateButtons(); + TabsArea?.RecreateButtons(); PerformNeedPaint(true); } else @@ -859,7 +826,7 @@ public bool MinimizedMode ValidateSelectedTab(); // Must layout to effect changes - TabsArea.RecreateButtons(); + TabsArea?.RecreateButtons(); PerformNeedPaint(true); // Allow the ribbon to be laid out and painted before we @@ -900,11 +867,11 @@ public QATLocation QATLocation // and not showing the QAT below the ribbon _minimizeBar.Visible = RealMinimizedMode && (QATLocation != QATLocation.Below); - // Update the fullbar version of the QAT + // Update the full-bar version of the QAT _qatBelowRibbon.Visible = _qatLocation == QATLocation.Below; // Update the minibar versions of the QAT - CaptionArea.UpdateQAT(); + CaptionArea?.UpdateQAT(); // Must layout to effect changes PerformLayout(); @@ -946,7 +913,7 @@ public bool ShowMinimizeButton if (_showMinimizeButton != value) { _showMinimizeButton = value; - TabsArea.RecreateButtons(); + TabsArea?.RecreateButtons(); PerformNeedPaint(true); } } @@ -962,7 +929,7 @@ public bool ShowMinimizeButton /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public ToolTipManager ToolTipManager => TabsArea.ToolTipManager; + public ToolTipManager ToolTipManager => TabsArea!.ToolTipManager; /// /// Gets the collection of controls contained within the control. @@ -974,7 +941,10 @@ public bool ShowMinimizeButton /// Internal design time method. /// [EditorBrowsable(EditorBrowsableState.Never)] - public bool InDesignMode => DesignMode; + public new bool InDesignMode => + // Removed warning CS0108: "IndesignMode hides inherited member VisualControl.InDesignMode". + // By marking the property as new. + DesignMode; /// /// Internal design time method. @@ -1039,7 +1009,7 @@ public void ToggleKeyboardMode() } else { - // Remove keytips from display + // Remove key tips from display KillKeyboardKeyTips(); if (!IgnoreRestoreFocus) @@ -1071,7 +1041,7 @@ public void ToggleKeyboardMode() /// true to filter the message and stop it from being dispatched; false to allow the message to continue to the next filter or control. public bool PreFilterMessage(ref Message m) { - // Prevent interception of messages during design time or after we have died + // Prevent interception of messages during design time, or after we have died if (!IsDisposed && !DesignMode) { switch (m.Msg) @@ -1134,14 +1104,12 @@ public bool PreFilterMessage(ref Message m) if (ClientRectangle.Contains(PointToClient(pt))) { var delta = (short)PI.HIWORD((int)m.WParam.ToInt64()); - TabsArea.LayoutTabs.ProcessMouseWheel(delta < 0); + TabsArea?.LayoutTabs.ProcessMouseWheel(delta < 0); return true; } } } break; - default: - break; } } return false; @@ -1162,7 +1130,7 @@ public bool DesignerGetHitTest(Point pt) } // Get the view the mouse is currently over - ViewBase? mouseView = ViewManager.Root.ViewFromPoint(pt); + ViewBase? mouseView = ViewManager?.Root.ViewFromPoint(pt); // Do we match of the views we always allow? var matchView = (mouseView?.Parent != null) @@ -1191,9 +1159,9 @@ public void DesignerMouseLeave() => /// Mouse point. [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public Point ViewRectangleToPoint(ViewBase view) + public Point ViewRectangleToPoint(ViewBase? view) { - Rectangle screenRect = view.OwningControl.RectangleToScreen(view.ClientRectangle); + Rectangle screenRect = view!.OwningControl!.RectangleToScreen(view.ClientRectangle); return new Point(screenRect.Left, screenRect.Bottom); } @@ -1212,7 +1180,7 @@ public Point ViewRectangleToPoint(ViewBase view) } // Get the view the mouse is currently over - ViewBase? mouseView = ViewManager.Root.ViewFromPoint(pt); + ViewBase? mouseView = ViewManager?.Root.ViewFromPoint(pt); if (mouseView is ViewDrawRibbonGroupDateTimePicker picker) { @@ -1220,7 +1188,7 @@ public Point ViewRectangleToPoint(ViewBase view) } else { - return ViewManager.ComponentFromPoint(pt); + return ViewManager?.ComponentFromPoint(pt); } } #endregion @@ -1277,9 +1245,6 @@ protected override void OnLayout(LayoutEventArgs levent) CaptionArea?.AppButtonVisibleChanged(); } - // If we have a parent form then ask it to check for a change in composition height - CaptionArea?.KryptonForm?.RecalculateComposition(); - base.OnLayout(levent); } @@ -1298,23 +1263,11 @@ protected override void WndProc(ref Message m) // Convert to a client point Point clientPoint = PointToClient(screenPoint); - if (_compositionArea.Visible) - { - if (_compositionArea.ClientRectangle.Contains(clientPoint)) - { - // By returning transparent the hit test gets sent the window behind it which - // will be the form itself, and so the existing form level hit testing will - // occur that handles the min/max/close app button etc... - m.Result = (IntPtr)PI.HT.TRANSPARENT; - return; - } - } - - if (TabsArea.LayoutTabs.GetViewForSpare != null) + if (TabsArea?.LayoutTabs.GetViewForSpare != null) { // Convert the spare tabs area from child control coordinates to ribbon control coordinates Rectangle spareRect = TabsArea.LayoutTabs.GetViewForSpare.ClientRectangle; - spareRect.Offset(TabsArea.TabsContainerControl.ChildControl.Location); + spareRect.Offset(TabsArea.TabsContainerControl.ChildControl!.Location); // If the point is over the spare area of the tabs then treat that area transparent so // that the form processing can then treat it as a caption area of the actual owning form @@ -1324,7 +1277,6 @@ protected override void WndProc(ref Message m) return; } } - } base.WndProc(ref m); @@ -1351,13 +1303,11 @@ protected override bool ProcessDialogKey(Keys keyData) case Keys.Down: case Keys.Space: case Keys.Enter: - // Any navigation keys remove the keytips + // Any navigation keys remove the key-tips KillKeyboardKeyTips(); _focusView.KeyDown(new KeyEventArgs(keyData)); return true; - default: - break; } } else @@ -1375,8 +1325,6 @@ protected override bool ProcessDialogKey(Keys keyData) return true; } - break; - default: break; } } @@ -1466,7 +1414,7 @@ protected override bool ProcessCmdKey(ref Message msg, Keys keyData) } // Check if a shortcut is triggered on the application button context menu - if (RibbonAppButton.AppButtonMenuItems.ProcessShortcut(keyData)) + if (RibbonFileAppButton.AppButtonMenuItems.ProcessShortcut(keyData)) { ActionOccurred(); return true; @@ -1517,10 +1465,10 @@ where qatButton.GetVisible() && qatButton.GetEnabled() /// /// Source of notification. /// An EventArgs containing event data. - protected override void OnButtonSpecChanged(object sender, EventArgs e) + protected override void OnButtonSpecChanged(object? sender, EventArgs e) { // Recreate all the button specs with new values - TabsArea.RecreateButtons(); + TabsArea?.RecreateButtons(); // Let base class perform standard processing base.OnButtonSpecChanged(sender, e); @@ -1568,15 +1516,16 @@ protected override void OnGotFocus(EventArgs e) if (SelectedTab != null) { - newFocus = TabsArea.LayoutTabs.GetViewForRibbonTab(SelectedTab); + newFocus = TabsArea?.LayoutTabs.GetViewForRibbonTab(SelectedTab); } else if (!RealMinimizedMode) { - newFocus = TabsArea.LayoutTabs.GetViewForFirstRibbonTab(); + newFocus = TabsArea?.LayoutTabs.GetViewForFirstRibbonTab(); } // If no tab to select, then use the application button - if (newFocus == null) + if (newFocus == null + && TabsArea != null) { if (TabsArea.LayoutAppButton.Visible) { @@ -1655,58 +1604,13 @@ protected override void OnResize(EventArgs e) base.OnResize(e); } - /// - /// Raises the PaintBackground event. - /// - /// A PaintEventArgs that contains the event data. - protected override void OnPaintBackground(PaintEventArgs pevent) - { - // If we are using the composition area - if (_compositionArea.Visible) - { - // Cause an empty bitmap to be created and blited to the background, - // strange though it might sound this creates an empty area and gets - // rid of any drawing artifacts in that area. - AccurateText.DrawCompositionGlowingText(pevent.Graphics, string.Empty, Font, - ClientRectangle, PaletteState.Normal, - Color.Transparent, false); - - // Exclude the composition area from the rest of the background painting - pevent.Graphics.SetClip(new Rectangle(_compositionArea.ClientLocation, new Size(_compositionArea.ClientWidth, _compositionArea.CompHeight)), CombineMode.Exclude); - } - - base.OnPaintBackground(pevent); - } - /// /// Perform background painting with the provided default values. /// /// Graphics reference for drawing. /// Brush to use when painting. /// Client area to paint. - protected override void PaintBackground(Graphics g, Brush backBrush, Rectangle backRect) - { - // If we are using the composition area - if (_compositionArea.Visible) - { - // Copy the current clipping - Region oldClip = g.Clip.Clone(); - - // Exclude the composition area from the background painting - g.SetClip(new Rectangle(_compositionArea.ClientLocation, new Size(_compositionArea.ClientWidth, _compositionArea.CompHeight)), CombineMode.Exclude); - - // Fill background - g.FillRectangle(backBrush, backRect); - - // Dispose of the combined clip and use the old one again - g.Clip.Dispose(); - g.Clip = oldClip; - } - else - { - g.FillRectangle(backBrush, backRect); - } - } + protected override void PaintBackground(Graphics g, Brush backBrush, Rectangle backRect) => g.FillRectangle(backBrush, backRect); /// /// Processes a notification from palette storage of a paint and optional layout required. @@ -1806,11 +1710,11 @@ protected virtual void OnSelectedTabChanged(EventArgs e) internal bool RealMinimizedMode => MinimizedMode && !InDesignMode; - internal ViewRibbonManager ViewRibbonManager => ViewManager as ViewRibbonManager; + internal ViewRibbonManager? ViewRibbonManager => ViewManager as ViewRibbonManager; internal ViewDrawRibbonPanel MainPanel { get; private set; } - internal ViewLayoutRibbonTabsArea TabsArea { get; private set; } + internal ViewLayoutRibbonTabsArea? TabsArea { get; private set; } internal ViewLayoutRibbonGroupsArea GroupsArea { get; private set; } @@ -1844,7 +1748,7 @@ internal void UpdateBackStyle() // Default to using the BackStyle property PaletteBackStyle backStyle = BackStyle; - // Walk up the parnet chain looking for the owning form + // Walk up the parent chain looking for the owning form Form? f = null; Control? c = this; while (c.Parent != null) @@ -1876,7 +1780,7 @@ internal void UpdateBackStyle() { _backPanelInherit.Style = backStyle; GroupsArea.BackStyle = backStyle; - TabsArea.RecreateButtons(); + TabsArea?.RecreateButtons(); PerformNeedPaint(true); } } @@ -1956,28 +1860,9 @@ internal ButtonStyle GroupDialogButtonStyle } } - internal Rectangle ClientRectangleWithoutComposition - { - get - { - // Start with actual client rect - Rectangle rect = ClientRectangle; - - // If showing a composition area at top (represents area under the Aero caption bar chrome) - if (_compositionArea.Visible) - { - // Remove the composition area from client rect - rect.Y += _compositionArea.ClientHeight; - rect.Height -= _compositionArea.ClientHeight; - } - - return rect; - } - } - - internal void TestForAppButtonDoubleClick() => TabsArea.TestForAppButtonDoubleClick(); + internal void TestForAppButtonDoubleClick() => TabsArea?.TestForAppButtonDoubleClick(); - internal void HideFocus(Control c) + internal void HideFocus(Control? c) { // Keep going till be find a known parent control while (c != null) @@ -2005,11 +1890,11 @@ internal void HideFocus(Control c) // Last resort, use the hidden one in the ribbon if (c == null) { - _hiddenFocusTarget.Focus(); + _hiddenFocusTarget?.Focus(); } } - internal KryptonForm FindKryptonForm() + internal KryptonForm? FindKryptonForm() { Control? c = this; while (c != null) @@ -2051,23 +1936,24 @@ internal void DisplayQATCustomizeMenu(Rectangle screenRectangle, // Add heading at top of the context menu var heading = new KryptonContextMenuHeading { - Text = RibbonStrings.CustomizeQuickAccessToolbar + Text = KryptonManager.Strings.RibbonStrings.CustomizeQuickAccessToolbar }; - _kcm.Items.Add(heading); + _kcm?.Items.Add(heading); // Create a container for a set of individual menu items var menuItems = new KryptonContextMenuItems(); - _kcm.Items.Add(menuItems); + _kcm?.Items.Add(menuItems); // Is user allowed to change the QAT entries? if (QATUserChange) { // Add an entry for each quick access toolbar button - foreach (IQuickAccessToolbarButton qatButton in QATButtons) + foreach (var component in QATButtons) { + var qatButton = component as IQuickAccessToolbarButton; var menuItem = new KryptonContextMenuItem { - Text = qatButton.GetText(), + Text = qatButton!.GetText(), Checked = qatButton.GetVisible() }; menuItem.Click += OnQATCustomizeClick; @@ -2082,8 +1968,8 @@ internal void DisplayQATCustomizeMenu(Rectangle screenRectangle, var showQAT = new KryptonContextMenuItem { Text = QATLocation == QATLocation.Above - ? RibbonStrings.ShowBelowRibbon - : RibbonStrings.ShowAboveRibbon + ? KryptonManager.Strings.RibbonStrings.ShowBelowRibbon + : KryptonManager.Strings.RibbonStrings.ShowAboveRibbon }; showQAT.Click += OnInvertQATLocation; @@ -2101,7 +1987,7 @@ internal void DisplayQATCustomizeMenu(Rectangle screenRectangle, // Allow the ribbon to be minimized var minimize = new KryptonContextMenuItem { - Text = RibbonStrings.Minimize, + Text = KryptonManager.Strings.RibbonStrings.Minimize, Checked = MinimizedMode }; minimize.Click += OnInvertMinimizeMode; @@ -2116,7 +2002,7 @@ internal void DisplayQATCustomizeMenu(Rectangle screenRectangle, } // Give developers a change to modify the customize menu or even cancel it - var args = new ContextMenuArgs(_kcm); + var args = new ContextMenuArgs(_kcm!); OnShowQATCustomizeMenu(args); // If not cancelled, then show it @@ -2127,7 +2013,7 @@ internal void DisplayQATCustomizeMenu(Rectangle screenRectangle, // Show at the bottom of the button on the left hand side VisualPopupManager.Singleton.EndAllTracking(); - _kcm.Show(new Point(screenRectangle.X, screenRectangle.Bottom + 1)); + _kcm?.Show(new Point(screenRectangle.X, screenRectangle.Bottom + 1)); } else { @@ -2154,7 +2040,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) // Create a container for a set of individual menu items var menuItems = new KryptonContextMenuItems(); - _kcm.Items.Add(menuItems); + _kcm?.Items.Add(menuItems); // Do we need to allow the QAT location to be inverted? if (QATLocation != QATLocation.Hidden) @@ -2162,8 +2048,8 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) var showQAT = new KryptonContextMenuItem { Text = QATLocation == QATLocation.Above - ? RibbonStrings.ShowQATBelowRibbon - : RibbonStrings.ShowQATAboveRibbon + ? KryptonManager.Strings.RibbonStrings.ShowQATBelowRibbon + : KryptonManager.Strings.RibbonStrings.ShowQATAboveRibbon }; showQAT.Click += OnInvertQATLocation; @@ -2176,7 +2062,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) // Allow the ribbon to be minimized var minimize = new KryptonContextMenuItem { - Text = RibbonStrings.Minimize, + Text = KryptonManager.Strings.RibbonStrings.Minimize, Checked = MinimizedMode }; minimize.Click += OnInvertMinimizeMode; @@ -2187,7 +2073,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) } // Give developers a change to modify the context menu or even cancel it - var args = new ContextMenuArgs(_kcm); + var args = new ContextMenuArgs(_kcm!); OnShowRibbonContextMenu(args); // If not cancelled, then show it @@ -2195,7 +2081,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) { // Show at location we were provided, but need to convert to screen coordinates VisualPopupManager.Singleton.EndAllTracking(); - _kcm.Show(PointToScreen(new Point(e.X, e.Y))); + _kcm?.Show(PointToScreen(new Point(e.X, e.Y))); } } @@ -2204,7 +2090,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) switch (QATLocation) { case QATLocation.Above: - return CaptionArea.VisibleQAT.GetFirstQATView(); + return CaptionArea?.VisibleQAT.GetFirstQATView(); case QATLocation.Below: return _qatBelowContents.GetFirstQATView(); case QATLocation.Hidden: @@ -2212,6 +2098,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(QATLocation.ToString()); return null; } } @@ -2221,7 +2108,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) switch (QATLocation) { case QATLocation.Above: - return CaptionArea.VisibleQAT.GetLastQATView(); + return CaptionArea?.VisibleQAT.GetLastQATView(); case QATLocation.Below: return _qatBelowContents.GetLastQATView(); case QATLocation.Hidden: @@ -2229,6 +2116,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(QATLocation.ToString()); return null; } } @@ -2240,19 +2128,18 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) switch (QATLocation) { case QATLocation.Above: - view = CaptionArea.VisibleQAT.GetNextQATView(qatView); + view = CaptionArea?.VisibleQAT.GetNextQATView(qatView); break; case QATLocation.Below: view = _qatBelowContents.GetNextQATView(qatView); break; - default: - break; } // Get the first near edge button (the last near button is the leftmost one!) - view ??= TabsArea.ButtonSpecManager.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Near); + view ??= TabsArea?.ButtonSpecManager?.GetLastVisibleViewButton(PaletteRelativeEdgeAlign.Near); - if (view == null) + if (view == null + && TabsArea != null) { if (tab && (SelectedTab != null)) { @@ -2266,14 +2153,15 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) } } - // Move across to any far defined buttons - view ??= TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); + //// Move across to any far defined buttons + //view ??= TabsArea.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Far); // Move across to any inherit defined buttons - view ??= TabsArea.ButtonSpecManager.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); + view ??= TabsArea?.ButtonSpecManager?.GetFirstVisibleViewButton(PaletteRelativeEdgeAlign.Inherit); // Move back to the application button/tab - if (view == null) + if (view == null + && TabsArea != null) { if (TabsArea.LayoutAppButton.Visible) { @@ -2295,7 +2183,7 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) switch (QATLocation) { case QATLocation.Above: - view = CaptionArea.VisibleQAT.GetPreviousQATView(qatView); + view = CaptionArea?.VisibleQAT.GetPreviousQATView(qatView); break; case QATLocation.Below: view = _qatBelowContents.GetPreviousQATView(qatView); @@ -2303,7 +2191,8 @@ internal void DisplayRibbonContextMenu(MouseEventArgs e) } // Move back to the application button/tab - if (view == null) + if (view == null + && TabsArea != null) { if (TabsArea.LayoutAppButton.Visible) { @@ -2401,7 +2290,7 @@ internal void ActionOccurred() KillKeyboardMode(); } - internal void UpdateQAT() => CaptionArea.UpdateQAT(); + internal void UpdateQAT() => CaptionArea?.UpdateQAT(); internal KeyTipMode KeyTipMode { @@ -2458,7 +2347,7 @@ internal KeyTipInfoList GenerateKeyTipsAtTopLevel() var keyTipList = new KeyTipInfoList(); // Add the application button/tab - if (TabsArea.LayoutAppButton.Visible) + if (TabsArea!.LayoutAppButton.Visible) { keyTipList.Add(TabsArea.GetAppButtonKeyTip()); } @@ -2470,8 +2359,8 @@ internal KeyTipInfoList GenerateKeyTipsAtTopLevel() // Add the quick access toolbar buttons keyTipList.AddRange(QATLocation == QATLocation.Above - ? CaptionArea.VisibleQAT.GetQATKeyTips() - : _qatBelowContents.GetQATKeyTips(null)); + ? CaptionArea!.VisibleQAT.GetQATKeyTips() + : _qatBelowContents.GetQATKeyTips(this.FindKryptonForm()!)); // Add the tab headers keyTipList.AddRange(TabsArea.GetTabKeyTips()); @@ -2481,7 +2370,7 @@ internal KeyTipInfoList GenerateKeyTipsAtTopLevel() internal KeyTipInfoList GenerateKeyTipsForSelectedTab() { - // Make sure all the elements in current tab have been synched + // Make sure all the elements in current tab have been synced // and created so that the generated contents are accurate Refresh(); @@ -2529,9 +2418,9 @@ internal Point ViewPointToScreen(Point pt) => VisualPopupManager.Singleton.Curre ? VisualPopupManager.Singleton.CurrentPopup.PointToScreen(pt) : PointToScreen(pt); - internal Rectangle ViewRectangleToScreen(ViewBase view) => view.OwningControl.RectangleToScreen(view.ClientRectangle); + internal Rectangle ViewRectangleToScreen(ViewBase view) => view.OwningControl!.RectangleToScreen(view.ClientRectangle); - internal Rectangle KeyTipToScreen(ViewBase view) => view.OwningControl.RectangleToScreen(view.ClientRectangle); + internal Rectangle KeyTipToScreen(ViewBase? view) => view!.OwningControl!.RectangleToScreen(view.ClientRectangle); internal ViewBase? FocusView { @@ -2559,9 +2448,9 @@ internal ViewBase? FocusView internal PaletteRibbonShape RibbonShape => StateCommon.RibbonGeneral.GetRibbonShape(); - internal PaletteRedirect? GetRedirector() => Redirector; + internal PaletteRedirect GetRedirector() => Redirector; - internal Control? GetControllerControl(Control c) + internal Control? GetControllerControl(Control? c) { // Keep searching till we get to the top of the hierarchy while (c != null) @@ -2595,12 +2484,10 @@ internal void MinimizedKeyDown(Keys keyData) case Keys.Down: case Keys.Space: case Keys.Enter: - // Any navigation keys remove the keytips + // Any navigation keys remove the key-tips KillKeyboardKeyTips(); _focusView.KeyDown(new KeyEventArgs(keyData)); break; - default: - break; } } } @@ -2623,8 +2510,6 @@ private void AssignDefaultFields() ShowMinimizeButton = true; QATLocation = QATLocation.Above; QATUserChange = true; - _allowFormIntegrate = true; - //ResetAllowFormIntegrate(); LostFocusLosesKeyboard = true; BackStyle = PaletteBackStyle.PanelClient; @@ -2656,19 +2541,19 @@ private void CreateInternal() private void CreateRibbonCollections() { - RibbonContexts = new KryptonRibbonContextCollection(); + RibbonContexts = []; RibbonContexts.Clearing += OnRibbonContextsClearing; RibbonContexts.Cleared += OnRibbonContextsCleared; RibbonContexts.Inserted += OnRibbonContextsInserted; RibbonContexts.Removed += OnRibbonContextsRemoved; - RibbonTabs = new KryptonRibbonTabCollection(); + RibbonTabs = []; RibbonTabs.Clearing += OnRibbonTabsClearing; RibbonTabs.Cleared += OnRibbonTabsCleared; RibbonTabs.Inserted += OnRibbonTabsInserted; RibbonTabs.Removed += OnRibbonTabsRemoved; - QATButtons = new KryptonRibbonQATButtonCollection(); + QATButtons = []; QATButtons.Clearing += OnRibbonQATButtonsClearing; QATButtons.Cleared += OnRibbonQATButtonsCleared; QATButtons.Inserted += OnRibbonQATButtonsInserted; @@ -2680,8 +2565,15 @@ private void CreateRibbonCollections() private void CreateStorageObjects() { RibbonShortcuts = new RibbonShortcuts(); - RibbonStrings = new RibbonStrings(); - RibbonAppButton = new RibbonAppButton(this); + + // Create direct access to the redirector for panel background + _backPanelInherit = new PaletteBackInheritRedirect(Redirector, PaletteBackStyle.PanelClient); + + _ribbonGeneralInherit = new PaletteRibbonGeneralInheritRedirect(Redirector); + + RibbonFileAppButton = new RibbonFileAppButton(this); + RibbonFileAppTab = new RibbonFileAppTab(this); + RibbonStyles = new PaletteRibbonStyles(this, NeedPaintPaletteDelegate); StateCommon = new PaletteRibbonRedirect(Redirector, PaletteBackStyle.PanelClient, NeedPaintPaletteDelegate); StateDisabled = new PaletteRibbonDisabled(StateCommon, NeedPaintPaletteDelegate); @@ -2702,31 +2594,21 @@ private void CreateViewManager() // Setup the need paint delegate _needPaintGroups = OnNeedPaintMinimizedGroups; - // Create direct access to the redirector for panel background - _backPanelInherit = new PaletteBackInheritRedirect(Redirector, PaletteBackStyle.PanelClient); - // Create the background panel for the entire ribbon area and the groups area when minimized - MainPanel = new ViewDrawRibbonPanel(this, _backPanelInherit, NeedPaintDelegate); + MainPanel = new ViewDrawRibbonPanel(this, _backPanelInherit, NeedPaintDelegate, StateCommon.RibbonGeneral); _drawMinimizedPanel = new ViewDrawPanel(_backPanelInherit); // Create layout docker for the entire ribbon control _rootDocker = new ViewLayoutDocker(); - // Docker for the area below the composition element + // Docker for the area below the Form Bar _ribbonDocker = new ViewLayoutDocker(); - // Create the area used to host the caption of glass window - _compositionArea = new ViewDrawRibbonComposition(this, NeedPaintDelegate) - { - Visible = false - }; - // Create caption area which is used if custom chrome cannot perform task - CaptionArea = new ViewDrawRibbonCaptionArea(this, Redirector, _compositionArea, NeedPaintDelegate); + CaptionArea = new ViewDrawRibbonCaptionArea(this, Redirector, NeedPaintDelegate); // Create tabs area containing the tabs, pendant buttons etc... TabsArea = new ViewLayoutRibbonTabsArea(this, Redirector, CaptionArea, CaptionArea.ContextTitles, NeedPaintDelegate); - TabsArea.PaintBackground += OnTabsAreaPaintBackground; // Create groups area containing the groups of the selected tab GroupsArea = new ViewLayoutRibbonGroupsArea(this, Redirector, _needPaintGroups); @@ -2753,9 +2635,8 @@ private void CreateViewManager() _ribbonDocker.Add(TabsArea, ViewDockStyle.Top); _ribbonDocker.Add(CaptionArea, ViewDockStyle.Top); - // The root contains the composition at the top and fills out with the panel areas + // The root contains the top and fills out with the panel areas _rootDocker.Add(MainPanel, ViewDockStyle.Fill); - _rootDocker.Add(_compositionArea, ViewDockStyle.Top); // Final construction steps CaptionArea.HookToolTipHandling(); @@ -2832,10 +2713,10 @@ private bool TabIsContextValid(KryptonRibbonTab tab) if (!string.IsNullOrEmpty(SelectedContext)) { // Get list of all valid contexts - var contexts = SelectedContext.Split(','); + var contexts = SelectedContext?.Split(','); // If the tab context name is one of the selected contexts, then fine - foreach (var context in contexts) + foreach (var context in contexts!) { if (context == tab.ContextName) { @@ -2975,7 +2856,7 @@ private bool SelectNonRibbonControl(bool forward) { // We need to call the protected select method in order to have // it perform an internal select of the first/last ordered item - _containerSelect.Invoke(next, new object[] { true, forward }); + _containerSelect.Invoke(next, [true, forward]); return true; } } @@ -2996,7 +2877,7 @@ private bool SelectNonRibbonControl(bool forward) return false; } - private void OnRibbonContextsClearing(object sender, EventArgs e) + private void OnRibbonContextsClearing(object? sender, EventArgs e) { // Unhook from all the context instances foreach (KryptonRibbonContext context in RibbonContexts) @@ -3005,34 +2886,34 @@ private void OnRibbonContextsClearing(object sender, EventArgs e) } } - private void OnRibbonContextsCleared(object sender, EventArgs e) + private void OnRibbonContextsCleared(object? sender, EventArgs e) { // Layout now the collection has been cleared down - CaptionArea.UpdateVisible(); + CaptionArea?.UpdateVisible(); PerformNeedPaint(true); } private void OnRibbonContextsInserted(object sender, TypedCollectionEventArgs e) { // Hook into property changes for the context - e.Item.PropertyChanged += OnContextPropertyChanged; - CaptionArea.UpdateVisible(); + e.Item!.PropertyChanged += OnContextPropertyChanged; + CaptionArea!.UpdateVisible(); PerformNeedPaint(true); } private void OnRibbonContextsRemoved(object sender, TypedCollectionEventArgs e) { // Remove context instance hook - e.Item.PropertyChanged -= OnContextPropertyChanged; - CaptionArea.UpdateVisible(); + e.Item!.PropertyChanged -= OnContextPropertyChanged; + CaptionArea!.UpdateVisible(); PerformNeedPaint(true); } - private void OnContextPropertyChanged(object sender, PropertyChangedEventArgs e) => + private void OnContextPropertyChanged(object? sender, PropertyChangedEventArgs e) => // Layout to show the context change PerformNeedPaint(true); - private void OnRibbonTabsClearing(object sender, EventArgs e) + private void OnRibbonTabsClearing(object? sender, EventArgs e) { // Remove all the back references foreach (KryptonRibbonTab tab in RibbonTabs) @@ -3045,7 +2926,7 @@ private void OnRibbonTabsClearing(object sender, EventArgs e) } } - private void OnRibbonTabsCleared(object sender, EventArgs e) + private void OnRibbonTabsCleared(object? sender, EventArgs e) { // Do not remember a tab this is now removed _minSelectedTab = null; @@ -3060,7 +2941,7 @@ private void OnRibbonTabsCleared(object sender, EventArgs e) private void OnRibbonTabsInserted(object sender, TypedCollectionEventArgs e) { // Setup the back reference from tab to ribbon control - e.Item.Ribbon = this; + e.Item!.Ribbon = this; // Need to monitor tab in case its properties change e.Item.PropertyChanged += OnTabPropertyChanged; @@ -3075,9 +2956,9 @@ private void OnRibbonTabsInserted(object sender, TypedCollectionEventArgs e) { // Unhook from tab property change event - e.Item.PropertyChanged -= OnTabPropertyChanged; + e.Item!.PropertyChanged -= OnTabPropertyChanged; - // Remove the backreference + // Remove the back-reference e.Item.Ribbon = null; // Do not remember a tab this is now removed @@ -3093,7 +2974,7 @@ private void OnRibbonTabsRemoved(object sender, TypedCollectionEventArgs e) @@ -3144,7 +3024,7 @@ private void OnRibbonQATButtonsInserted(object sender, TypedCollectionEventArgs< PerformNeedPaint(true); // Inform the caption area it might need to repaint the integrated QAT - CaptionArea.QATButtonsChanged(); + CaptionArea?.QATButtonsChanged(); } private void OnRibbonQATButtonsRemoved(object sender, TypedCollectionEventArgs e) @@ -3153,16 +3033,19 @@ private void OnRibbonQATButtonsRemoved(object sender, TypedCollectionEventArgs // Update the screen location of popup to reflect a change in selected tab - _minimizedPopup?.Show(TabsArea, _drawMinimizedPanel); + _minimizedPopup?.Show(TabsArea!, _drawMinimizedPanel); - private void OnMinimizedPopupDisposed(object sender, EventArgs e) + private void OnMinimizedPopupDisposed(object? sender, EventArgs e) { // We no longer have a popup showing _minimizedPopup = null; @@ -3246,7 +3129,7 @@ private void OnMinimizedPopupDisposed(object sender, EventArgs e) PerformNeedPaint(true); } - private void OnQATCustomizeClick(object sender, EventArgs e) + private void OnQATCustomizeClick(object? sender, EventArgs e) { // Remove any popups, the customize context menu can appear because // the use selected the QAT overflow button causing a popup to show @@ -3256,7 +3139,7 @@ private void OnQATCustomizeClick(object sender, EventArgs e) KillKeyboardMode(); // Cast to correct type - var menuItem = (KryptonContextMenuItem)sender; + var menuItem = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); // Find index of the item to toggle var index = (int)(menuItem.Tag ?? -1); @@ -3271,7 +3154,7 @@ private void OnQATCustomizeClick(object sender, EventArgs e) qatButton.SetVisible(!qatButton.GetVisible()); // Need a layout to see the change - CaptionArea.UpdateQAT(); + CaptionArea?.UpdateQAT(); PerformNeedPaint(true); } } @@ -3289,7 +3172,7 @@ private void ResetCachedKryptonContextMenu() _kcm.Items.Clear(); } - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { // Fire any associated finish delegate if (_kcmFinishDelegate != null) @@ -3298,8 +3181,6 @@ private void OnKryptonContextMenuClosed(object sender, EventArgs e) _kcmFinishDelegate = null; } } - - private void OnTabsAreaPaintBackground(object sender, PaintEventArgs e) => MainPanel.PaintRectangle(e.Graphics, e.ClipRectangle, false, sender as Control); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContext.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContext.cs index 06ea3c4d6..9cee267e3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContext.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContext.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,7 +28,7 @@ public class KryptonRibbonContext : Component private string _contextName; private string _contextTitle; private Color _contextColor; - private object _tag; + private object? _tag; #endregion #region Events @@ -142,7 +142,7 @@ public Color ContextColor [Description(@"User-defined data associated with the object.")] [TypeConverter(typeof(StringConverter))] [Bindable(true)] - public object Tag + public object? Tag { get => _tag; diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContextCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContextCollection.cs index b548a6d58..4e2bbb056 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContextCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonContextCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroup.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroup.cs index 80433e527..e67f7f7da 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroup.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -116,7 +116,7 @@ public KryptonRibbonGroup() _maximumWidth = -1; // Create collection for holding child items - Items = new KryptonRibbonGroupContainerCollection(); + Items = []; Items.Clearing += OnRibbonGroupItemsClearing; Items.Cleared += OnRibbonGroupItemsCleared; Items.Inserted += OnRibbonGroupItemsInserted; @@ -432,7 +432,7 @@ public int MaximumWidth [Category(@"Visuals")] [Description(@"Collection of ribbon group items.")] [MergableProperty(false)] - [Editor(typeof(KryptonRibbonGroupContainerCollectionEditor), typeof(CollectionEditor))] + [Editor(typeof(KryptonRibbonGroupContainerCollectionEditor), typeof(UITypeEditor))] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public KryptonRibbonGroupContainerCollection Items { get; } @@ -525,7 +525,7 @@ internal bool ProcessCmdKey(ref Message msg, Keys keyData) #endregion #region Private - private void OnRibbonGroupItemsClearing(object sender, EventArgs e) + private void OnRibbonGroupItemsClearing(object? sender, EventArgs e) { // Remove the back references foreach (KryptonRibbonGroupContainer container in Items) @@ -536,7 +536,7 @@ private void OnRibbonGroupItemsClearing(object sender, EventArgs e) } } - private void OnRibbonGroupItemsCleared(object sender, EventArgs e) + private void OnRibbonGroupItemsCleared(object? sender, EventArgs e) { // Only need to update display if this tab is selected if ((_ribbon != null) @@ -551,7 +551,7 @@ private void OnRibbonGroupItemsCleared(object sender, EventArgs e) private void OnRibbonGroupItemsInserted(object sender, TypedCollectionEventArgs e) { // Setup the back references - e.Item.Ribbon = _ribbon; + e.Item!.Ribbon = _ribbon; e.Item.RibbonTab = _ribbonTab; e.Item.RibbonGroup = this; @@ -568,7 +568,7 @@ private void OnRibbonGroupItemsInserted(object sender, TypedCollectionEventArgs< private void OnRibbonGroupItemsRemoved(object sender, TypedCollectionEventArgs e) { // Remove the back references - e.Item.Ribbon = null; + e.Item!.Ribbon = null; e.Item.RibbonTab = null; e.Item.RibbonGroup = null; diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroupCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroupCollection.cs index cab2050d4..fd2352c8e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroupCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonGroupCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButton.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButton.cs index c1fc70049..c888cbb89 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -27,12 +27,12 @@ public class KryptonRibbonQATButton : Component, IQuickAccessToolbarButton { #region Static Fields - private static readonly Image _defaultImage = GenericImageResources.QATButtonDefault; + private static readonly Image? _defaultImage = GenericImageResources.QATButtonDefault; #endregion #region Instance Fields - private object _tag; - private Image _image; + private object? _tag; + private Image? _image; private bool _visible; private bool _enabled; private string _text; @@ -203,7 +203,7 @@ public string Text // We never allow an empty text value if (string.IsNullOrEmpty(value)) { - value = "QAT Button"; + value = @"QAT Button"; } if (value != _text) @@ -253,7 +253,7 @@ public string Text [Bindable(true)] [Category(@"Appearance")] [Description(@"Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [Localizable(true)] public Color ToolTipImageTransparentColor { get; set; } @@ -336,7 +336,7 @@ public KryptonCommand? KryptonCommand [Description(@"User-defined data associated with the object.")] [TypeConverter(typeof(StringConverter))] [Bindable(true)] - public object Tag + public object? Tag { get => _tag; @@ -415,7 +415,7 @@ public object Tag /// Gets and sets the image for the item ToolTip. /// [EditorBrowsable(EditorBrowsableState.Advanced)] - public Image GetToolTipImage() => ToolTipImage; + public Image? GetToolTipImage() => ToolTipImage!; /// /// Gets and sets the color to draw as transparent in the ToolTipImage. @@ -451,7 +451,7 @@ public object Tag /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { var refresh = false; diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButtonCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButtonCollection.cs index efa6c28e9..bb068ee82 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButtonCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonQATButtonCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,7 +20,7 @@ namespace Krypton.Ribbon public class KryptonRibbonQATButtonCollection : TypedRestrictCollection { #region Static Fields - private static readonly Type[] _types = { typeof(IQuickAccessToolbarButton) }; + private static readonly Type[] _types = [typeof(IQuickAccessToolbarButton)]; #endregion #region Restrict diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDoc.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDoc.cs index 28128bd5e..c90bbc825 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDoc.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDoc.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -29,7 +29,7 @@ public class KryptonRibbonRecentDoc : Component private Color _imageTransparentColor; private string _text; private string _extraText; - private object _tag; + private object? _tag; #endregion #region Events @@ -118,13 +118,7 @@ public Image? Image { get => _image; - set - { - if (_image != value) - { - _image = value; - } - } + set => _image = value; } /// @@ -155,7 +149,7 @@ public Color ImageTransparentColor [Description(@"User-defined data associated with the object.")] [TypeConverter(typeof(StringConverter))] [Bindable(true)] - public object Tag + public object? Tag { get => _tag; diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDocCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDocCollection.cs index f263d7fb4..49e63904f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDocCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonRecentDocCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTab.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTab.cs index e3dc58747..9665c464b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -69,7 +69,7 @@ public KryptonRibbonTab() _visible = true; // Create the collection for defining groups - Groups = new KryptonRibbonGroupCollection(); + Groups = []; Groups.Clearing += OnRibbonGroupsClearing; Groups.Cleared += OnRibbonGroupsCleared; Groups.Inserted += OnRibbonGroupsInserted; @@ -332,7 +332,7 @@ internal bool ProcessCmdKey(ref Message msg, Keys keyData) #endregion #region Private - private void OnRibbonGroupsClearing(object sender, EventArgs e) + private void OnRibbonGroupsClearing(object? sender, EventArgs e) { // Remove the back references foreach (KryptonRibbonGroup group in Groups) @@ -342,7 +342,7 @@ private void OnRibbonGroupsClearing(object sender, EventArgs e) } } - private void OnRibbonGroupsCleared(object sender, EventArgs e) + private void OnRibbonGroupsCleared(object? sender, EventArgs e) { // Only need to update display if this tab is selected if ((_ribbon != null) && (_ribbon.SelectedTab == this)) @@ -354,7 +354,7 @@ private void OnRibbonGroupsCleared(object sender, EventArgs e) private void OnRibbonGroupsInserted(object sender, TypedCollectionEventArgs e) { // Setup the back references - e.Item.Ribbon = _ribbon; + e.Item!.Ribbon = _ribbon; e.Item.RibbonTab = this; // Only need to update display if this tab is selected and the group is visible @@ -367,7 +367,7 @@ private void OnRibbonGroupsInserted(object sender, TypedCollectionEventArgs e) { // Remove the back references - e.Item.Ribbon = null; + e.Item!.Ribbon = null; e.Item.RibbonTab = null; // Only need to update display if this tab is selected and the group was visible diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTabCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTabCollection.cs index 129066598..778d99d30 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTabCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Ribbon/KryptonRibbonTabCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/KeyTipControl.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/KeyTipControl.cs index f558500ea..18b5ac6a4 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/KeyTipControl.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/KeyTipControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -68,7 +68,7 @@ public KeyTipControl(KryptonRibbon ribbon, public void SetKeyTips(KeyTipInfoList keyTips) { // Create a new list of key tip views - _viewList = new List(); + _viewList = []; var enclosingRect = Rectangle.Empty; @@ -278,9 +278,9 @@ private void StartTimer() _redrawTimer.Start(); } - private void OnRedrawTick(object sender, EventArgs e) + private void OnRedrawTick(object? sender, EventArgs e) { - _redrawTimer = (Timer)sender; + _redrawTimer = sender as Timer ?? throw new ArgumentNullException(nameof(sender)); _redrawTimer.Stop(); _redrawTimer.Dispose(); diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupAppMenu.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupAppMenu.cs index f90f15c6b..84de31ea3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupAppMenu.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupAppMenu.cs @@ -1,14 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,7 +14,7 @@ internal class VisualPopupAppMenu : VisualPopup { #region Instance Fields private readonly KryptonRibbon _ribbon; - private PaletteBase? _palette; + private PaletteBase _palette; private IPaletteBack _drawOutsideBack; private IPaletteBorder _drawOutsideBorder; private readonly AppButtonMenuProvider _provider; @@ -34,11 +30,11 @@ internal class VisualPopupAppMenu : VisualPopup #endregion #region Identity + /// /// Initialize a new instance of the VisualPopupAppMenu class. /// /// Owning ribbon instance. - /// Originating app button instance. /// Local palette setting to use initially. /// Palette mode setting to use initially. /// Redirector used for obtaining palette values. @@ -46,10 +42,9 @@ internal class VisualPopupAppMenu : VisualPopup /// Screen location of the lower half of the app button. /// Was the context menu activated by a keyboard action. public VisualPopupAppMenu(KryptonRibbon ribbon, - RibbonAppButton appButton, PaletteBase? palette, PaletteMode paletteMode, - PaletteRedirect? redirector, + PaletteRedirect redirector, Rectangle rectAppButtonTopHalf, Rectangle rectAppButtonBottomHalf, bool keyboardActivated) @@ -72,7 +67,7 @@ public VisualPopupAppMenu(KryptonRibbon ribbon, // Create provider instance _provider = new AppButtonMenuProvider((ViewContextMenuManager)ViewManager, - _ribbon.RibbonAppButton.AppButtonMenuItems, + _ribbon.RibbonFileAppButton.AppButtonMenuItems, _viewColumns, palette, paletteMode, redirector, NeedPaintDelegate); @@ -82,12 +77,12 @@ public VisualPopupAppMenu(KryptonRibbon ribbon, CreateAppButtonBottom(); CreateButtonSpecView(); - CreateContextMenuView(appButton); + CreateContextMenuView(_ribbon.RibbonFileAppButton); CreateRecentDocumentsView(); CreateInnerBacking(CreateInsideCanvas()); CreateOuterBacking(); CreateOutsideDocker(); - CreateButtonManager(appButton); + CreateButtonManager(_ribbon.RibbonFileAppButton); // With keyboard activate we select the first valid item if (keyboardActivated) @@ -100,7 +95,7 @@ private void CreateButtonSpecView() => // Layout docker used to contain the generated button specs _viewButtonSpecDocker = new ViewLayoutDocker(); - private void CreateContextMenuView(RibbonAppButton appButton) + private void CreateContextMenuView(RibbonFileAppButton fileAppButton) { // Ask the top level collection to generate the child view elements var topCollection = new KryptonContextMenuCollection(); @@ -109,7 +104,7 @@ private void CreateContextMenuView(RibbonAppButton appButton) ImageColumn = false }; topCollection.Add(topItems); - foreach (KryptonContextMenuItemBase item in appButton.AppButtonMenuItems) + foreach (KryptonContextMenuItemBase item in fileAppButton.AppButtonMenuItems) { topItems.Items.Add(item); } @@ -119,7 +114,7 @@ private void CreateContextMenuView(RibbonAppButton appButton) private void CreateRecentDocumentsView() { // Do we need to add the recent docs view? - if (_ribbon.RibbonAppButton.AppButtonShowRecentDocs) + if (_ribbon.RibbonFileAppButton.AppButtonShowRecentDocs) { // Create a dummy vertical menu separator for separating recent documents from menu items var dummySep1 = new KryptonContextMenuSeparator @@ -127,7 +122,7 @@ private void CreateRecentDocumentsView() Horizontal = false }; _viewColumns.Add(new ViewDrawMenuSeparator(dummySep1, _provider.ProviderStateCommon.Separator)); - _viewColumns.Add(new ViewLayoutSeparator(0, _ribbon.RibbonAppButton.AppButtonMinRecentSize.Height)); + _viewColumns.Add(new ViewLayoutSeparator(0, _ribbon.RibbonFileAppButton.AppButtonMinRecentSize.Height)); // Use a layout that draws the background color of the recent docs area var recentDocsBack = new ViewDrawRibbonAppMenuDocs(_ribbon); @@ -138,7 +133,7 @@ private void CreateRecentDocumentsView() recentDocsBack.Add(documentStack); // Use fixed width separator to enforce a minimum width to column - documentStack.Add(new ViewLayoutSeparator(_ribbon.RibbonAppButton.AppButtonMinRecentSize.Width, 0)); + documentStack.Add(new ViewLayoutSeparator(_ribbon.RibbonFileAppButton.AppButtonMinRecentSize.Width, 0)); // Add the recent document title documentStack.Add(new ViewDrawRibbonRecentDocs(_ribbon)); @@ -150,9 +145,9 @@ private void CreateRecentDocumentsView() // Then generate an item per recent document entry var index = 1; - foreach (KryptonRibbonRecentDoc recentDoc in _ribbon.RibbonAppButton.AppButtonRecentDocs) + foreach (KryptonRibbonRecentDoc recentDoc in _ribbon.RibbonFileAppButton.AppButtonRecentDocs) { - documentStack.Add(new ViewDrawRibbonAppMenuRecentDec(_ribbon, _provider, recentDoc, _ribbon.RibbonAppButton.AppButtonMaxRecentSize.Width, NeedPaintDelegate, index++)); + documentStack.Add(new ViewDrawRibbonAppMenuRecentDec(_ribbon, _provider, recentDoc, _ribbon.RibbonFileAppButton.AppButtonMaxRecentSize.Width, NeedPaintDelegate, index++)); } // Add separator entry which is then used to fill remained space @@ -170,7 +165,7 @@ private ViewDrawCanvas CreateInsideCanvas() { _viewColumns }; - mainBackground.KeyController = new ContextMenuController((ViewContextMenuManager)ViewManager); + mainBackground.KeyController = new ContextMenuController((ViewContextMenuManager)ViewManager!); return mainBackground; } @@ -206,21 +201,21 @@ private void CreateOutsideDocker() _drawOutsideBorder = new PaletteBorderToPalette(Redirector, PaletteBorderStyle.ControlRibbonAppMenu); _drawOutsideDocker = new ViewDrawRibbonAppMenu(_drawOutsideBack, _drawOutsideBorder, _appButtonBottom, _rectAppButtonBottomHalf) { - KeyController = new ContextMenuController((ViewContextMenuManager)ViewManager) + KeyController = new ContextMenuController((ViewContextMenuManager)ViewManager!) }; _drawOutsideDocker.Add(_drawOutsideBacking, ViewDockStyle.Fill); - ViewManager.Root = _drawOutsideDocker; + ViewManager!.Root = _drawOutsideDocker; } - private void CreateButtonManager(RibbonAppButton appButton) + private void CreateButtonManager(RibbonFileAppButton fileAppButton) { - _buttonManager = new ButtonSpecManagerLayoutAppButton((ViewContextMenuManager)ViewManager, - this, Redirector, appButton.AppButtonSpecs, null, - new[] { _viewButtonSpecDocker }, - new IPaletteMetric[] { _ribbon.StateCommon }, - new[] { PaletteMetricInt.None }, - new[] { PaletteMetricPadding.RibbonAppButton }, - CreateToolStripRenderer, + _buttonManager = new ButtonSpecManagerLayoutAppButton((ViewContextMenuManager)ViewManager!, + this, Redirector, fileAppButton.AppButtonSpecs, null, + [_viewButtonSpecDocker], + [_ribbon.StateCommon], + [PaletteMetricInt.None], + [PaletteMetricPadding.RibbonAppButton], + CreateToolStripRenderer!, OnButtonSpecPaint); _buttonManager.RecreateButtons(); @@ -235,11 +230,12 @@ protected override void Dispose(bool disposing) if (disposing) { // Must unhook from the palette paint event - if (_palette != null) + if (_palette != null!) { _palette.PalettePaint -= OnPaletteNeedPaint; _palette.BasePaletteChanged -= OnBaseChanged; _palette.BaseRendererChanged -= OnBaseChanged; + _palette = null!; } if (_buttonManager != null!) @@ -321,7 +317,7 @@ public KryptonContextMenuPositionV ShowVert /// /// Gets access to the view manager for the context menu. /// - public ViewContextMenuManager ViewContextMenuManager => (ViewContextMenuManager)ViewManager; + public ViewContextMenuManager ViewContextMenuManager => (ViewContextMenuManager)ViewManager!; /// /// Should a mouse down at the provided point cause an end to popup tracking. @@ -334,7 +330,7 @@ public override bool DoesCurrentMouseDownEndAllTracking(Message m, Point pt) if (_appButtonBottom.Visible) { // If mouse is over the top half of the button (which is in the non-client area of - // the owner ribbon) then we do not want to end all tracking from this method. Otherwise + // the owner ribbon) then we do not want to end all tracking from this method. Otherwise, // if the mouse is inside the bottom half of the button then we do end tracking! if (RectangleToClient(_rectAppButtonTopHalf).Contains(pt)) { @@ -393,7 +389,7 @@ public override bool DoesMouseDownGetEaten(Message m, Point pt) /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public override PaletteBase? GetResolvedPalette() => _palette; + public override PaletteBase GetResolvedPalette() => _palette; #endregion @@ -401,7 +397,7 @@ public override bool DoesMouseDownGetEaten(Message m, Point pt) /// /// Gets access to the palette redirector. /// - protected PaletteRedirect? Redirector + protected PaletteRedirect Redirector { [DebuggerStepThrough] get; @@ -439,6 +435,7 @@ protected override void OnLayout(LayoutEventArgs levent) // Need a render context for accessing the renderer using var context = new RenderContext(this, null, ClientRectangle, Renderer); + using var gh = new GraphicsHint(context.Graphics, _drawOutsideBorder.GetBorderGraphicsHint(PaletteState.Normal)); // Grab a path that is the outside edge of the border Rectangle borderRect = ClientRectangle; GraphicsPath borderPath1 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _drawOutsideBorder, VisualOrientation.Top, PaletteState.Normal); @@ -459,7 +456,7 @@ protected override void OnLayout(LayoutEventArgs levent) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected virtual void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => + protected virtual void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) => // Need to recalculate anything relying on the palette OnNeedPaint(sender, e); #endregion @@ -474,7 +471,7 @@ private Size CalculatePreferredSize() { // Find the preferred size which fits exactly the calculated contents size using var context = new ViewLayoutContext(this, Renderer); - return ViewManager.Root.GetPreferredSize(context); + return ViewManager!.Root.GetPreferredSize(context); } finally { @@ -483,12 +480,12 @@ private Size CalculatePreferredSize() } } - private void SetPalette(PaletteBase? palette) + private void SetPalette(PaletteBase palette) { if (palette != _palette) { // Unhook from current palette events - if (_palette != null) + if (_palette != null!) { _palette.PalettePaint -= OnPaletteNeedPaint; _palette.BasePaletteChanged -= OnBaseChanged; @@ -499,10 +496,13 @@ private void SetPalette(PaletteBase? palette) _palette = palette; // Update redirector to use palette as source for obtaining values - Redirector.Target = _palette; + if (Redirector != null!) + { + Redirector.Target = _palette; + } // Hook to new palette events - if (_palette != null) + if (_palette != null!) { // Get the renderer associated with the palette Renderer = _palette.GetRenderer(); @@ -513,19 +513,19 @@ private void SetPalette(PaletteBase? palette) } } - private void OnBaseChanged(object sender, EventArgs e) => + private void OnBaseChanged(object? sender, EventArgs e) => // Change in base renderer or base palette require we fetch the latest renderer - Renderer = _palette?.GetRenderer(); + Renderer = _palette.GetRenderer(); - private void OnButtonSpecPaint(object sender, NeedLayoutEventArgs e) => OnNeedPaint(sender, new NeedLayoutEventArgs(false)); + private void OnButtonSpecPaint(object? sender, NeedLayoutEventArgs e) => OnNeedPaint(sender, new NeedLayoutEventArgs(false)); - private void OnProviderClosing(object sender, CancelEventArgs e) => _ribbon.OnAppButtonMenuClosing(e); + private void OnProviderClosing(object? sender, CancelEventArgs e) => _ribbon.OnAppButtonMenuClosing(e); - private void OnProviderClose(object sender, CloseReasonEventArgs e) => + private void OnProviderClose(object? sender, CloseReasonEventArgs e) => // Remove ourself from being shown VisualPopupManager.Singleton.EndPopupTracking(this); - private void OnProviderClose(object sender, EventArgs e) + private void OnProviderClose(object? sender, EventArgs e) { // Unhook from event source //var provider = (IContextMenuProvider)sender; diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupGroup.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupGroup.cs index 974a12bd8..8f7ac5282 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupGroup.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -26,7 +26,7 @@ internal class VisualPopupGroup : VisualPopup private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroup _ribbonGroup; private readonly ViewDrawRibbonGroupsBorder _viewBackground; - private readonly Button _hiddenFocusTarget; + private readonly Button? _hiddenFocusTarget; #endregion #region Identity @@ -41,12 +41,12 @@ public VisualPopupGroup([DisallowNull] KryptonRibbon ribbon, IRenderer renderer) : base(renderer, true) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonGroup != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonGroup is not null); // Remember references needed later - _ribbon = ribbon; - _ribbonGroup = ribbonGroup; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonGroup = ribbonGroup ?? throw new ArgumentNullException(nameof(ribbonGroup)); // Create a view element for drawing the group ViewGroup = new ViewDrawRibbonGroup(ribbon, ribbonGroup, NeedPaintDelegate) @@ -81,7 +81,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Ensure the manager believes the mouse has left the area - ViewManager.MouseLeave(EventArgs.Empty); + ViewManager?.MouseLeave(EventArgs.Empty); // Do we need to restore the previous focus from the ribbon if (RestorePreviousFocus) @@ -135,7 +135,7 @@ protected override void Dispose(bool disposing) /// ViewBase of item; otherwise false. public void SetFirstFocusItem() { - ViewPopupManager.FocusView = ViewGroup.GetFirstFocusItem(); + ViewPopupManager!.FocusView = ViewGroup.GetFirstFocusItem(); PerformNeedPaint(false); } #endregion @@ -147,7 +147,7 @@ public void SetFirstFocusItem() /// ViewBase of item; otherwise false. public void SetLastFocusItem() { - ViewPopupManager.FocusView = ViewGroup.GetLastFocusItem(); + ViewPopupManager!.FocusView = ViewGroup.GetLastFocusItem(); PerformNeedPaint(false); } #endregion @@ -159,11 +159,11 @@ public void SetLastFocusItem() public void SetNextFocusItem() { // Find the next item in sequence - var matched = false; - ViewBase view = ViewGroup.GetNextFocusItem(ViewPopupManager.FocusView, ref matched); + bool matched = false; + ViewBase? view = ViewGroup.GetNextFocusItem(ViewPopupManager!.FocusView!, ref matched); // Rotate around to the first item - if (view == null) + if (view is null) { SetFirstFocusItem(); } @@ -182,8 +182,8 @@ public void SetNextFocusItem() public void SetPreviousFocusItem() { // Find the previous item in sequence - var matched = false; - ViewBase view = ViewGroup.GetPreviousFocusItem(ViewPopupManager.FocusView, ref matched); + bool matched = false; + ViewBase? view = ViewGroup.GetPreviousFocusItem(ViewPopupManager?.FocusView!, ref matched); // Rotate around to the last item if (view == null) @@ -192,7 +192,7 @@ public void SetPreviousFocusItem() } else { - ViewPopupManager.FocusView = view; + ViewPopupManager!.FocusView = view; PerformNeedPaint(false); } } @@ -246,7 +246,7 @@ public void ShowCalculatingSize(ViewDrawRibbonGroup parentGroup, /// /// Hide focus by giving it to the hidden control. /// - public void HideFocus() => _hiddenFocusTarget.Focus(); + public void HideFocus() => _hiddenFocusTarget?.Focus(); #endregion #region Implementation @@ -262,7 +262,7 @@ private Rectangle CalculateBelowPopupRect(Rectangle parentScreenRect, Size popup var popupLocation = new Point(parentScreenRect.X, parentScreenRect.Bottom); // Is there enough room below the parent for the entire popup height? - if ((parentScreenRect.Bottom + popupSize.Height) <= workingArea.Bottom) + if (parentScreenRect.Bottom + popupSize.Height <= workingArea.Bottom) { // Place the popup below the parent popupLocation.Y = parentScreenRect.Bottom; @@ -292,7 +292,7 @@ private Rectangle CalculateBelowPopupRect(Rectangle parentScreenRect, Size popup popupLocation.X = workingArea.Left; } - // Preven the popup from being off the right size of the screen + // Prevent the popup from being off the right size of the screen if ((popupLocation.X + popupSize.Width) > workingArea.Right) { popupLocation.X = workingArea.Right - popupSize.Width; @@ -306,7 +306,7 @@ private Rectangle CalculateBelowPopupRect(Rectangle parentScreenRect, Size popup /// /// Gets access to the popup group specific view manager. /// - protected ViewRibbonPopupGroupManager ViewPopupManager => ViewManager as ViewRibbonPopupGroupManager; + protected ViewRibbonPopupGroupManager? ViewPopupManager => ViewManager as ViewRibbonPopupGroupManager; /// /// Gets the creation parameters. @@ -316,7 +316,7 @@ protected override CreateParams CreateParams get { CreateParams cp = base.CreateParams; - cp.Style |= (int) PI.WS_.CLIPCHILDREN; + cp.Style |= (int)PI.WS_.CLIPCHILDREN; return cp; } } @@ -329,7 +329,7 @@ protected override void OnLayout(LayoutEventArgs levent) { // Let base class calculate fill rectangle base.OnLayout(levent); - var borderRounding = _ribbon.RibbonShape switch + var borderRounding = _ribbon.RibbonShape! switch { PaletteRibbonShape.Office2010 => 1, _ => 2 @@ -363,7 +363,7 @@ protected override void OnKeyPress(KeyPressEventArgs e) protected override bool ProcessDialogKey(Keys keyData) { // Grab the view manager handling the focus view - ViewBase focusView = ((ViewRibbonPopupGroupManager)GetViewManager()).FocusView; + ViewBase? focusView = ((GetViewManager() as ViewRibbonPopupGroupManager)!).FocusView; // When in keyboard mode... if (focusView != null) diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupMinimized.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupMinimized.cs index ebd99396d..5a7072f2e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupMinimized.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupMinimized.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -42,12 +42,12 @@ public VisualPopupMinimized([DisallowNull] KryptonRibbon ribbon, IRenderer renderer) : base(viewManager, renderer, true) { - Debug.Assert(ribbon != null); - Debug.Assert(captionArea != null); + Debug.Assert(ribbon is not null); + Debug.Assert(captionArea is not null); // Remember incoming references - _ribbon = ribbon; - _captionArea = captionArea; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _captionArea = captionArea ?? throw new ArgumentNullException(nameof(captionArea)); } /// @@ -59,7 +59,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Ensure the manager believes the mouse has left the area - ViewRibbonManager.MouseLeave(EventArgs.Empty); + ViewRibbonManager?.MouseLeave(EventArgs.Empty); // If this group is being dismissed with key tips showing if (_ribbon is { InKeyboardMode: true, KeyTipMode: KeyTipMode.PopupMinimized }) @@ -93,7 +93,7 @@ protected override void Dispose(bool disposing) /// /// Gets the view for the popup group. /// - public ViewRibbonMinimizedManager ViewRibbonManager => ViewManager as ViewRibbonMinimizedManager; + public ViewRibbonMinimizedManager? ViewRibbonManager => ViewManager as ViewRibbonMinimizedManager; /// /// Sets focus to the first focus item inside the selected tab. @@ -105,7 +105,7 @@ public void SetFirstFocusItem() // Make the item the new focus for the popup if (newView != null) { - ViewRibbonManager.FocusView = newView; + ViewRibbonManager!.FocusView = newView; PerformNeedPaint(false); } } @@ -121,7 +121,7 @@ public void SetLastFocusItem() // Make the item the new focus for the popup if (newView != null) { - ViewRibbonManager.FocusView = newView; + ViewRibbonManager!.FocusView = newView; PerformNeedPaint(false); } } @@ -132,7 +132,7 @@ public void SetLastFocusItem() public void SetNextFocusItem() { // Find the next item in sequence - ViewBase newView = _ribbon.GroupsArea.ViewGroups.GetNextFocusItem(ViewRibbonManager.FocusView); + ViewBase newView = _ribbon.GroupsArea.ViewGroups.GetNextFocusItem(ViewRibbonManager!.FocusView!); // Rotate around to the first item if (newView == null) @@ -152,7 +152,7 @@ public void SetNextFocusItem() public void SetPreviousFocusItem() { // Find the previous item in sequence - ViewBase newView = _ribbon.GroupsArea.ViewGroups.GetPreviousFocusItem(ViewRibbonManager.FocusView); + ViewBase newView = _ribbon.GroupsArea.ViewGroups.GetPreviousFocusItem(ViewRibbonManager!.FocusView!); // Rotate around to the last item if (newView == null) @@ -180,7 +180,7 @@ public override bool DoesCurrentMouseDownEndAllTracking(Message m, Point pt) // If the base class wants to end tracking and not inside the ribbon control return base.DoesCurrentMouseDownEndAllTracking(m, pt) && - !_ribbon.ClientRectangleWithoutComposition.Contains(ribbonPt) && + !_ribbon.ClientRectangle.Contains(ribbonPt) && _captionArea.DoesCurrentMouseDownEndAllTracking(screenPt); } @@ -222,7 +222,7 @@ public void Show(ViewLayoutRibbonTabsArea tabsArea, /// /// Tabs area of the /// - public void UpdatePosition(ViewLayoutRibbonTabsArea tabsArea, + public void UpdatePosition(ViewLayoutRibbonTabsArea tabsArea, ViewDrawPanel drawMinimizedPanel) { // Move to the newly calculated position @@ -240,7 +240,7 @@ protected override CreateParams CreateParams get { CreateParams cp = base.CreateParams; - cp.Style |= (int) PI.WS_.CLIPCHILDREN; + cp.Style |= (int)PI.WS_.CLIPCHILDREN; return cp; } } @@ -285,7 +285,7 @@ private Rectangle CalculatePopupRect(ViewLayoutRibbonTabsArea tabsArea, popupSize.Height); // Get the view element for the currently selected tab - ViewDrawRibbonTab viewTab = tabsArea.LayoutTabs.GetViewForRibbonTab(_ribbon.SelectedTab); + ViewDrawRibbonTab viewTab = (ViewDrawRibbonTab)tabsArea.LayoutTabs.GetViewForRibbonTab(_ribbon.SelectedTab)!; // Convert the view tab client area to screen coordinates Rectangle viewTabRect = _ribbon.RectangleToScreen(viewTab.ClientRectangle); diff --git a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupQATOverflow.cs b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupQATOverflow.cs index 563f11850..897cb9c65 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupQATOverflow.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Controls Visuals/VisualPopupQATOverflow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,22 +30,22 @@ internal class VisualPopupQATOverflow : VisualPopup /// Reference to original contents which has overflow items. /// Drawing renderer. public VisualPopupQATOverflow([DisallowNull] KryptonRibbon ribbon, - ViewLayoutRibbonQATContents contents, - IRenderer? renderer) + [DisallowNull] ViewLayoutRibbonQATContents? contents, + IRenderer renderer) : base(renderer, true) { - Debug.Assert(ribbon != null); + Debug.Assert(ribbon is not null); // Remember references needed later - _ribbon = ribbon; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); // Create a view element for drawing the group _viewQAT = new ViewDrawRibbonQATOverflow(ribbon, NeedPaintDelegate); // Create and add the element used to synch and draw the actual contents - ViewQATContents = new ViewLayoutRibbonQATFromOverflow(this, ribbon, - NeedPaintDelegate, - true, contents); + ViewQATContents = new ViewLayoutRibbonQATFromOverflow(this, ribbon, + NeedPaintDelegate, + true, contents); _viewQAT.Add(ViewQATContents); // Attach the root to the view manager instance @@ -85,7 +85,7 @@ protected override void Dispose(bool disposing) /// /// Gets the qat overflow manager. /// - public ViewRibbonQATOverflowManager ViewOverflowManager => ViewManager as ViewRibbonQATOverflowManager; + public ViewRibbonQATOverflowManager? ViewOverflowManager => ViewManager as ViewRibbonQATOverflowManager; #endregion @@ -104,7 +104,7 @@ protected override void Dispose(bool disposing) /// ViewBase of item; otherwise false. public void SetFirstFocusItem() { - ViewOverflowManager.FocusView = ViewQATContents.GetFirstQATView(); + ViewOverflowManager!.FocusView = ViewQATContents.GetFirstQATView(); PerformNeedPaint(false); } #endregion @@ -116,7 +116,7 @@ public void SetFirstFocusItem() /// ViewBase of item; otherwise false. public void SetLastFocusItem() { - ViewOverflowManager.FocusView = ViewQATContents.GetLastQATView(); + ViewOverflowManager!.FocusView = ViewQATContents.GetLastQATView(); PerformNeedPaint(false); } #endregion @@ -128,7 +128,7 @@ public void SetLastFocusItem() public void SetNextFocusItem() { // Find the next item in sequence - ViewBase? view = ViewQATContents.GetNextQATView(ViewOverflowManager.FocusView); + ViewBase view = ViewQATContents.GetNextQATView(ViewOverflowManager!.FocusView!); // Rotate around to the first item if (view == null) @@ -150,10 +150,10 @@ public void SetNextFocusItem() public void SetPreviousFocusItem() { // Find the previous item in sequence - ViewBase view = ViewQATContents.GetPreviousQATView(ViewOverflowManager.FocusView); + ViewBase view = ViewQATContents.GetPreviousQATView(ViewOverflowManager!.FocusView!); // Rotate around to the last item - if (view == null) + if (view is null) { SetLastFocusItem(); } @@ -198,7 +198,7 @@ protected override CreateParams CreateParams get { CreateParams cp = base.CreateParams; - cp.Style |= (int) PI.WS_.CLIPCHILDREN; + cp.Style |= (int)PI.WS_.CLIPCHILDREN; return cp; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonGalleryActionList.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonGalleryActionList.cs index f3b7d651e..d395eb271 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonGalleryActionList.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonGalleryActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -17,8 +17,8 @@ namespace Krypton.Ribbon internal class KryptonGalleryActionList : DesignerActionList { #region Instance Fields - private readonly KryptonGallery? _gallery; - private readonly IComponentChangeService _service; + private readonly KryptonGallery _gallery; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -26,17 +26,17 @@ internal class KryptonGalleryActionList : DesignerActionList /// Initialize a new instance of the KryptonGalleryActionList class. /// /// Designer that owns this action list instance. - public KryptonGalleryActionList(KryptonGalleryDesigner owner) + public KryptonGalleryActionList(KryptonGalleryDesigner owner) : base(owner.Component) { // Remember the gallery instance - _gallery = (KryptonGallery)owner.Component; + _gallery = (owner.Component as KryptonGallery)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion - + #region Public /// /// Gets and sets the palette mode. @@ -49,7 +49,7 @@ public PaletteMode PaletteMode { if (_gallery.PaletteMode != value) { - _service.OnComponentChanged(_gallery, null, _gallery.PaletteMode, value); + _service?.OnComponentChanged(_gallery, null, _gallery.PaletteMode, value); _gallery.PaletteMode = value; } } @@ -73,7 +73,7 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionHeaderItem("Visuals")); actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), "Palette", "Visuals", "Palette applied to drawing")); } - + return actions; } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonRibbonActionList.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonRibbonActionList.cs index 5d1638e76..a051042c1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonRibbonActionList.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Action Lists/KryptonRibbonActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -17,8 +17,8 @@ namespace Krypton.Ribbon internal class KryptonRibbonActionList : DesignerActionList { #region Instance Fields - private readonly KryptonRibbon? _ribbon; - private readonly IComponentChangeService _service; + private readonly KryptonRibbon _ribbon; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -30,23 +30,15 @@ public KryptonRibbonActionList(KryptonRibbonDesigner owner) : base(owner.Component) { // Remember the ribbon instance - _ribbon = (KryptonRibbon)owner.Component; + _ribbon = (owner.Component as KryptonRibbon)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion #region Public - /// Gets or sets a value indicating whether [allow form integrate]. - /// true if [allow form integrate]; otherwise, false. - public bool AllowFormIntegrate - { - get => _ribbon.AllowFormIntegrate; - set => _ribbon.AllowFormIntegrate = value; - } - /// /// Gets and sets use of design time helpers. /// @@ -67,7 +59,7 @@ public PaletteMode PaletteMode { if (_ribbon.PaletteMode != value) { - _service.OnComponentChanged(_ribbon, null, _ribbon.PaletteMode, value); + _service?.OnComponentChanged(_ribbon, null, _ribbon.PaletteMode, value); _ribbon.PaletteMode = value; } } @@ -91,7 +83,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionHeaderItem("Design")); actions.Add(new DesignerActionPropertyItem(nameof(InDesignHelperMode), "Design Helpers", "Design", "Show design time helpers for creating items.")); actions.Add(new DesignerActionHeaderItem("Visuals")); - actions.Add(new DesignerActionPropertyItem(nameof(AllowFormIntegrate), "Allow Form Integration", "Visuals", "Integrate with operating system chrome instead of Krypton Palette.")); actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), "Palette", "Visuals", "Palette applied to drawing")); } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupClusterCollectionEditor.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupClusterCollectionEditor.cs index 0cc24a41b..a473f8e89 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupClusterCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupClusterCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,7 +28,10 @@ public KryptonRibbonGroupClusterCollectionEditor() /// Gets the data types that this collection editor can contain. /// /// An array of data types that this collection can contain. - protected override Type[] CreateNewItemTypes() => new[] { typeof(KryptonRibbonGroupClusterButton), - typeof(KryptonRibbonGroupClusterColorButton)}; + protected override Type[] CreateNewItemTypes() => + [ + typeof(KryptonRibbonGroupClusterButton), + typeof(KryptonRibbonGroupClusterColorButton) + ]; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupContainerCollectionEditor.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupContainerCollectionEditor.cs index f57ecb7d7..02ce8b35b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupContainerCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupContainerCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,8 +29,10 @@ public KryptonRibbonGroupContainerCollectionEditor() protected override Type[] CreateNewItemTypes() => // Bug https://github.com/Krypton-Suite/Standard-Toolkit/issues/66 // For some reason in .Net5 onwards, the following function is not called - new[] { typeof(KryptonRibbonGroupLines), + [ + typeof(KryptonRibbonGroupLines), typeof(KryptonRibbonGroupTriple), - typeof(KryptonRibbonGroupSeparator) }; + typeof(KryptonRibbonGroupSeparator) + ]; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupLinesCollectionEditor.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupLinesCollectionEditor.cs index 13cf85aab..7ed0c5ad7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupLinesCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupLinesCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,7 +28,9 @@ public KryptonRibbonGroupLinesCollectionEditor() /// Gets the data types that this collection editor can contain. /// /// An array of data types that this collection can contain. - protected override Type[] CreateNewItemTypes() => new[] { typeof(KryptonRibbonGroupButton), + protected override Type[] CreateNewItemTypes() => + [ + typeof(KryptonRibbonGroupButton), typeof(KryptonRibbonGroupColorButton), typeof(KryptonRibbonGroupCheckBox), typeof(KryptonRibbonGroupComboBox), @@ -41,6 +43,7 @@ protected override Type[] CreateNewItemTypes() => new[] { typeof(KryptonRibbonGr typeof(KryptonRibbonGroupRadioButton), typeof(KryptonRibbonGroupRichTextBox), typeof(KryptonRibbonGroupTextBox), - typeof(KryptonRibbonGroupTrackBar)}; + typeof(KryptonRibbonGroupTrackBar) + ]; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupTripleCollectionEditor.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupTripleCollectionEditor.cs index ac038777c..40e356af0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupTripleCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonGroupTripleCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,8 +28,8 @@ public KryptonRibbonGroupTripleCollectionEditor() /// Gets the data types that this collection editor can contain. /// /// An array of data types that this collection can contain. - protected override Type[] CreateNewItemTypes() => new[] - { + protected override Type[] CreateNewItemTypes() => + [ typeof(KryptonRibbonGroupButton), typeof(KryptonRibbonGroupColorButton), typeof(KryptonRibbonGroupCheckBox), @@ -45,6 +45,6 @@ protected override Type[] CreateNewItemTypes() => new[] typeof(KryptonRibbonGroupTextBox), typeof(KryptonRibbonGroupTrackBar), typeof(KryptonRibbonGroupThemeComboBox) - }; + ]; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonQATButtonCollectionEditor.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonQATButtonCollectionEditor.cs index fadd307f1..1ab923d41 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonQATButtonCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonQATButtonCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,7 +28,7 @@ public KryptonRibbonQATButtonCollectionEditor() /// Gets the data types that this collection editor can contain. /// /// An array of data types that this collection can contain. - protected override Type[] CreateNewItemTypes() => new[] { typeof(KryptonRibbonQATButton) }; + protected override Type[] CreateNewItemTypes() => [typeof(KryptonRibbonQATButton)]; /// /// Sets the specified array as the items of the collection. @@ -36,18 +36,18 @@ public KryptonRibbonQATButtonCollectionEditor() /// The collection to edit. /// An array of objects to set as the collection items. /// The newly created collection object. - protected override object SetItems(object editValue, object[] value) + protected override object? SetItems(object? editValue, object[]? value) { // Cast the context into the expected control type - var ribbon = (KryptonRibbon)Context.Instance; + var ribbon = Context?.Instance as KryptonRibbon ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("ribbon")); // Suspend changes until collection has been updated - ribbon?.SuspendLayout(); + ribbon.SuspendLayout(); // Let base class update the collection var ret = base.SetItems(editValue, value); - ribbon?.ResumeLayout(true); + ribbon.ResumeLayout(true); return ret; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonRecentDocCollectionEditor.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonRecentDocCollectionEditor.cs index e3fa9d5b6..759c56743 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonRecentDocCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Collection Editors/KryptonRibbonRecentDocCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,6 +28,6 @@ public KryptonRibbonRecentDocCollectionEditor() /// Gets the data types that this collection editor can contain. /// /// An array of data types that this collection can contain. - protected override Type[] CreateNewItemTypes() => new[] { typeof(KryptonRibbonRecentDoc) }; + protected override Type[] CreateNewItemTypes() => [typeof(KryptonRibbonRecentDoc)]; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonGalleryDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonGalleryDesigner.cs index 977db15fe..26615bde1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonGalleryDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonGalleryDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -17,7 +17,7 @@ namespace Krypton.Ribbon internal class KryptonGalleryDesigner : ParentControlDesigner { #region Instance Fields - private KryptonGallery _gallery; + private KryptonGallery? _gallery; private IComponentChangeService _changeService; #endregion @@ -48,7 +48,7 @@ public override void Initialize([DisallowNull] IComponent component) _gallery = component as KryptonGallery; // We need to know when we are being removed - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); _changeService.ComponentRemoving += OnComponentRemoving; } @@ -63,7 +63,7 @@ public override ICollection AssociatedComponents var compound = new ArrayList(base.AssociatedComponents); // Add all the display ranges - foreach (KryptonGalleryRange dropRange in _gallery.DropButtonRanges) + foreach (KryptonGalleryRange dropRange in _gallery?.DropButtonRanges!) { compound.Add(dropRange); } @@ -124,16 +124,16 @@ protected override void Dispose(bool disposing) #endregion #region Implementation - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed if (e.Component == _gallery) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the range instances - for (var i = _gallery.DropButtonRanges.Count - 1; i >= 0; i--) + for (var i = _gallery!.DropButtonRanges.Count - 1; i >= 0; i--) { KryptonGalleryRange dropRange = _gallery.DropButtonRanges[i]; _gallery.DropButtonRanges.Remove(dropRange); diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonDesigner.cs index b878d053c..ff01bfc2a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonDesigner.cs @@ -1,14 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,10 +14,10 @@ internal class KryptonRibbonDesigner : ParentControlDesigner { #region Instance Fields private KryptonRibbon? _ribbon; - private IDesignerHost _designerHost; - private ISelectionService _selectionService; - private IComponentChangeService _changeService; - private DesignerVerbCollection _verbs; + private IDesignerHost? _designerHost; + private ISelectionService? _selectionService; + private IComponentChangeService? _changeService; + private DesignerVerbCollection _verbs = []; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _addTabVerb; private DesignerVerb _clearTabsVerb; @@ -50,23 +46,24 @@ public override void Initialize([DisallowNull] IComponent component) // Let base class do standard stuff base.Initialize(component); - Debug.Assert(component != null); + Debug.Assert(component is not null); // Cast to correct type - _ribbon = component as KryptonRibbon; - if (_ribbon?.GetViewManager() != null) + _ribbon = component as KryptonRibbon ?? throw new ArgumentNullException(nameof(_ribbon)); + + if (_ribbon.GetViewManager() is ViewManager viewManager && viewManager is not null) { // Hook into ribbon events - _ribbon.GetViewManager().MouseUpProcessed += OnRibbonMouseUp; - _ribbon.GetViewManager().DoubleClickProcessed += OnRibbonDoubleClick; + viewManager.MouseUpProcessed += OnRibbonMouseUp; + viewManager.DoubleClickProcessed += OnRibbonDoubleClick; _ribbon.SelectedTabChanged += OnSelectedTabChanged; _ribbon.DesignTimeAddTab += OnAddTab; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); + _selectionService = (ISelectionService?)GetService(typeof(ISelectionService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_selectionService))); // We need to know when we are being removed _changeService.ComponentRemoving += OnComponentRemoving; @@ -92,12 +89,12 @@ public override ICollection AssociatedComponents // Create a new collection for both values var compound = new ArrayList(base.AssociatedComponents); - compound.AddRange(_ribbon.ButtonSpecs); + compound.AddRange(_ribbon!.ButtonSpecs); compound.AddRange(_ribbon.QATButtons); compound.AddRange(_ribbon.RibbonContexts); - compound.AddRange(_ribbon.RibbonAppButton.AppButtonMenuItems); - compound.AddRange(_ribbon.RibbonAppButton.AppButtonRecentDocs); - compound.AddRange(_ribbon.RibbonAppButton.AppButtonSpecs); + compound.AddRange(_ribbon.RibbonFileAppButton.AppButtonMenuItems); + compound.AddRange(_ribbon.RibbonFileAppButton.AppButtonRecentDocs); + compound.AddRange(_ribbon.RibbonFileAppButton.AppButtonSpecs); // Add all the objects for each tab foreach (KryptonRibbonTab ribbonTab in _ribbon.RibbonTabs) @@ -135,9 +132,8 @@ public override DesignerVerbCollection Verbs get { // Create verbs first time around - if (_verbs == null) + if (_verbs.Count == 0) { - _verbs = new DesignerVerbCollection(); _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _addTabVerb = new DesignerVerb(@"Add Tab", OnAddTab); _clearTabsVerb = new DesignerVerb(@"Clear Tabs", OnClearTabs); @@ -161,15 +157,24 @@ protected override void Dispose(bool disposing) { if (disposing) { - // Unhook from navigator events - _ribbon.GetViewManager().MouseUpProcessed -= OnRibbonMouseUp; - _ribbon.GetViewManager().DoubleClickProcessed -= OnRibbonDoubleClick; - _ribbon.SelectedTabChanged -= OnSelectedTabChanged; - _ribbon.DesignTimeAddTab -= OnAddTab; - - // Unhook from events - _changeService.ComponentRemoving -= OnComponentRemoving; - _changeService.ComponentChanged -= OnComponentChanged; + if (_ribbon is not null) + { + if (_ribbon.GetViewManager() is ViewManager viewManager && viewManager is not null) + { + // Unhook from navigator events + viewManager.MouseUpProcessed -= OnRibbonMouseUp; + viewManager.DoubleClickProcessed -= OnRibbonDoubleClick; + _ribbon.SelectedTabChanged -= OnSelectedTabChanged; + _ribbon.DesignTimeAddTab -= OnAddTab; + } + } + + if (_changeService is not null) + { + // Unhook from events + _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService.ComponentChanged -= OnComponentChanged; + } } } finally @@ -187,7 +192,7 @@ protected override void Dispose(bool disposing) protected override bool GetHitTest(Point point) { // Ask the control if it wants to process the point - var ret = _ribbon.DesignerGetHitTest(_ribbon.PointToClient(point)); + var ret = _ribbon!.DesignerGetHitTest(_ribbon.PointToClient(point)); // If the ribbon does not want the mouse point then make sure the // tracking element is informed that the mouse has left the control @@ -207,7 +212,7 @@ protected override bool GetHitTest(Point point) /// protected override void OnMouseLeave() { - _ribbon.DesignerMouseLeave(); + _ribbon!.DesignerMouseLeave(); base.OnMouseLeave(); } @@ -231,35 +236,45 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnSelectedTabChanged(object sender, EventArgs e) + private void OnSelectedTabChanged(object? sender, EventArgs e) { // Notify a change in the selected tab value, marks the form as dirty - MemberDescriptor propertyTab = TypeDescriptor.GetProperties(_ribbon)[@"SelectedTab"]; + MemberDescriptor? propertyTab = TypeDescriptor.GetProperties(_ribbon!)[@"SelectedTab"]; RaiseComponentChanging(propertyTab); RaiseComponentChanged(propertyTab, null, null); } private void UpdateVerbStatus() { - if (_verbs != null) + if (_verbs.Count != 0 && _ribbon is not null) { _clearTabsVerb.Enabled = _ribbon.RibbonTabs.Count > 0; } } - private void OnToggleHelpers(object sender, EventArgs e) => + private void OnToggleHelpers(object? sender, EventArgs e) => // Invert the current toggle helper mode - _ribbon.InDesignHelperMode = !_ribbon.InDesignHelperMode; + _ribbon!.InDesignHelperMode = !_ribbon.InDesignHelperMode; - private void OnAddTab(object sender, EventArgs e) + private void OnAddTab(object? sender, EventArgs e) { + if (_designerHost is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + } + + if (_ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_ribbon))); + } + // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbon AddTab"); try { // Get access to the tabs property - MemberDescriptor propertyPages = TypeDescriptor.GetProperties(_ribbon)[@"RibbonTabs"]; + MemberDescriptor? propertyPages = TypeDescriptor.GetProperties(_ribbon)[@"RibbonTabs"]; RaiseComponentChanging(propertyPages); @@ -278,20 +293,30 @@ private void OnAddTab(object sender, EventArgs e) } } - private void OnClearTabs(object sender, EventArgs e) + private void OnClearTabs(object? sender, EventArgs e) { + if (_designerHost is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + } + + if (_ribbon is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_ribbon))); + } + // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbon ClearTabs"); try { // Get access to the tabs property - MemberDescriptor propertyPages = TypeDescriptor.GetProperties(_ribbon)[@"RibbonTabs"]; + MemberDescriptor? propertyPages = TypeDescriptor.GetProperties(_ribbon)[@"RibbonTabs"]; RaiseComponentChanging(propertyPages); // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the tabs from the ribbon for (var i = _ribbon.RibbonTabs.Count - 1; i >= 0; i--) @@ -312,21 +337,19 @@ private void OnClearTabs(object sender, EventArgs e) } } - private void OnRibbonMouseUp(object sender, MouseEventArgs e) + private void OnRibbonMouseUp(object? sender, MouseEventArgs e) { // Get any component associated with the current mouse position - Component component = _ribbon.DesignerComponentFromPoint(new Point(e.X, e.Y)); - - if (component != null) - { + if (_ribbon is not null + && _ribbon.DesignerComponentFromPoint(new Point(e.X, e.Y)) is Component component + && component is not null) + { // Select the component - var selectionList = new ArrayList - { - component - }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + ArrayList selectionList = [component]; + + _selectionService!.SetSelectedComponents(selectionList, SelectionTypes.Auto); - // Force the layout to be update for any change in selection + // Force the layout to be updated for any change in selection _ribbon.PerformLayout(); } } @@ -334,31 +357,33 @@ private void OnRibbonMouseUp(object sender, MouseEventArgs e) private void OnRibbonDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component component = _ribbon.DesignerComponentFromPoint(pt); // We are only interested in the contained components and not the ribbon control - if ((component != null) && component is not System.Windows.Forms.Control) + if ( _ribbon is not null + && _ribbon.DesignerComponentFromPoint(pt) is Component component + && component is not null + && component is not System.Windows.Forms.Control) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + IDesigner? designer = _designerHost!.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed if (e.Component == _ribbon) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the button spec instances - for (var i = _ribbon.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = _ribbon!.ButtonSpecs.Count - 1; i >= 0; i--) { ButtonSpec spec = _ribbon.ButtonSpecs[i]; _ribbon.ButtonSpecs.Remove(spec); diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupButtonDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupButtonDesigner.cs index 97884f224..53bf3935c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupButtonDesigner : ComponentDesigner #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupButton _ribbonButton; + private KryptonRibbonGroupButton? _ribbonButton; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -73,8 +73,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost))!; + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService))!; // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -105,7 +105,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonButton.DesignTimeContextMenu -= OnContextMenu; + _ribbonButton!.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentChanged -= OnComponentChanged; } } @@ -121,9 +121,9 @@ protected override void Dispose(bool disposing) private void UpdateVerbStatus() { // Create verbs first time around - if (_verbs == null) + if (_verbs is null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Button First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Button Previous", OnMovePrevious); @@ -139,9 +139,9 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonButton.Ribbon != null) + if (_ribbonButton is not null && _ribbonButton.Ribbon is not null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonButton) > 0; movePrev = items.IndexOf(_ribbonButton) > 0; moveNext = items.IndexOf(_ribbonButton) < (items.Count - 1); @@ -154,21 +154,23 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _ribbonButton.Ribbon.InDesignHelperMode = !_ribbonButton.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton is not null + && _ribbonButton.Ribbon is not null + && _ribbonButton.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupButton MoveFirst"); @@ -176,7 +178,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -190,17 +192,19 @@ private void OnMoveFirst(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton is not null + && _ribbonButton.Ribbon is not null + && _ribbonButton.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupButton MovePrevious"); @@ -208,7 +212,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -224,17 +228,19 @@ private void OnMovePrevious(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton is not null + && _ribbonButton.Ribbon is not null + && _ribbonButton.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupButton MoveNext"); @@ -242,7 +248,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -258,17 +264,19 @@ private void OnMoveNext(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton is not null + && _ribbonButton.RibbonContainer is not null + && _ribbonButton.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupButton MoveLast"); @@ -276,7 +284,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -290,17 +298,19 @@ private void OnMoveLast(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnDeleteButton(object sender, EventArgs e) + private void OnDeleteButton(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton is not null + && _ribbonButton.Ribbon is not null + && _ribbonButton.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupButton DeleteButton"); @@ -308,7 +318,7 @@ private void OnDeleteButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonButton.RibbonContainer)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); @@ -326,79 +336,79 @@ private void OnDeleteButton(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.Visible, !_ribbonButton.Visible); _ribbonButton.Visible = !_ribbonButton.Visible; } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.Enabled, !_ribbonButton.Enabled); _ribbonButton.Enabled = !_ribbonButton.Enabled; } } - private void OnChecked(object sender, EventArgs e) + private void OnChecked(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.Checked, !_ribbonButton.Checked); _ribbonButton.Checked = !_ribbonButton.Checked; } } - private void OnTypePush(object sender, EventArgs e) + private void OnTypePush(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.Push); _ribbonButton.ButtonType = GroupButtonType.Push; } } - private void OnTypeCheck(object sender, EventArgs e) + private void OnTypeCheck(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.Check); _ribbonButton.ButtonType = GroupButtonType.Check; } } - private void OnTypeDropDown(object sender, EventArgs e) + private void OnTypeDropDown(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.DropDown); _ribbonButton.ButtonType = GroupButtonType.DropDown; } } - private void OnTypeSplit(object sender, EventArgs e) + private void OnTypeSplit(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.Split); _ribbonButton.ButtonType = GroupButtonType.Split; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonButton.Ribbon != null) + if ( _ribbonButton is not null && _ribbonButton.Ribbon is not null) { // Create the menu strip the first time around if (_cms == null) @@ -445,7 +455,7 @@ private void OnContextMenu(object sender, MouseEventArgs e) // Show the context menu if (CommonHelper.ValidContextMenuStrip(_cms)) { - Point screenPt = _ribbonButton.Ribbon.ViewRectangleToPoint(_ribbonButton.ButtonView); + Point screenPt = _ribbonButton.Ribbon.ViewRectangleToPoint(_ribbonButton.ButtonView!); VisualPopupManager.Singleton.ShowContextMenuStrip(_cms, screenPt); } } @@ -455,7 +465,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonButton.RibbonContainer) + switch (_ribbonButton!.RibbonContainer) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -464,6 +474,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonButton.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCheckBoxDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCheckBoxDesigner.cs index 19776d494..42a93b0f3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCheckBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCheckBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupCheckBoxDesigner : ComponentDesigner #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupCheckBox _ribbonCheckBox; + private KryptonRibbonGroupCheckBox? _ribbonCheckBox; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -60,18 +60,18 @@ public override void Initialize([DisallowNull] IComponent component) // Let base class do standard stuff base.Initialize(component); - Debug.Assert(component != null); + Debug.Assert(component is not null); // Cast to correct type _ribbonCheckBox = component as KryptonRibbonGroupCheckBox; - if (_ribbonCheckBox != null) + if (_ribbonCheckBox is not null) { _ribbonCheckBox.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -102,7 +102,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonCheckBox.DesignTimeContextMenu -= OnContextMenu; + _ribbonCheckBox!.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentChanged -= OnComponentChanged; } } @@ -120,7 +120,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move CheckBox First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move CheckBox Previous", OnMovePrevious); @@ -136,10 +136,10 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox!.Ribbon != null) { var items = ParentItems; - moveFirst = items.IndexOf(_ribbonCheckBox) > 0; + moveFirst = items!.IndexOf(_ribbonCheckBox) > 0; movePrev = items.IndexOf(_ribbonCheckBox) > 0; moveNext = items.IndexOf(_ribbonCheckBox) < (items.Count - 1); moveLast = items.IndexOf(_ribbonCheckBox) < (items.Count - 1); @@ -151,21 +151,23 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox!.Ribbon != null) { _ribbonCheckBox.Ribbon.InDesignHelperMode = !_ribbonCheckBox.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null + && _ribbonCheckBox.Ribbon is not null + && _ribbonCheckBox.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCheckBox MoveFirst"); @@ -173,7 +175,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -187,17 +189,20 @@ private void OnMoveFirst(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null + && _ribbonCheckBox.Ribbon is not null + && _ribbonCheckBox.RibbonContainer is not null) + { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCheckBox MovePrevious"); @@ -205,12 +210,12 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - var index = items.IndexOf(_ribbonCheckBox) - 1; + var index = items!.IndexOf(_ribbonCheckBox) - 1; index = Math.Max(index, 0); items.Remove(_ribbonCheckBox); items.Insert(index, _ribbonCheckBox); @@ -221,17 +226,19 @@ private void OnMovePrevious(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null + && _ribbonCheckBox.Ribbon is not null + && _ribbonCheckBox.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCheckBox MoveNext"); @@ -239,7 +246,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -255,17 +262,19 @@ private void OnMoveNext(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null + && _ribbonCheckBox.Ribbon is not null + && _ribbonCheckBox.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCheckBox MoveLast"); @@ -273,7 +282,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -287,17 +296,19 @@ private void OnMoveLast(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnDeleteCheckBox(object sender, EventArgs e) + private void OnDeleteCheckBox(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null + && _ribbonCheckBox.Ribbon is not null + && _ribbonCheckBox.RibbonContainer is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCheckBox DeleteCheckBox"); @@ -305,7 +316,7 @@ private void OnDeleteCheckBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCheckBox.RibbonContainer)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); @@ -323,61 +334,62 @@ private void OnDeleteCheckBox(object sender, EventArgs e) finally { // If we managed to create the transaction, then do it - transaction?.Commit(); + transaction.Commit(); } } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null && _ribbonCheckBox.Ribbon is not null) + { _changeService.OnComponentChanged(_ribbonCheckBox, null, _ribbonCheckBox.Visible, !_ribbonCheckBox.Visible); _ribbonCheckBox.Visible = !_ribbonCheckBox.Visible; } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null && _ribbonCheckBox.Ribbon is not null) { _changeService.OnComponentChanged(_ribbonCheckBox, null, _ribbonCheckBox.Enabled, !_ribbonCheckBox.Enabled); _ribbonCheckBox.Enabled = !_ribbonCheckBox.Enabled; } } - private void OnAutoCheck(object sender, EventArgs e) + private void OnAutoCheck(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null && _ribbonCheckBox.Ribbon is not null) { _changeService.OnComponentChanged(_ribbonCheckBox, null, _ribbonCheckBox.AutoCheck, !_ribbonCheckBox.AutoCheck); _ribbonCheckBox.AutoCheck = !_ribbonCheckBox.AutoCheck; } } - private void OnThreeState(object sender, EventArgs e) + private void OnThreeState(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null && _ribbonCheckBox.Ribbon is not null) { _changeService.OnComponentChanged(_ribbonCheckBox, null, _ribbonCheckBox.ThreeState, !_ribbonCheckBox.ThreeState); _ribbonCheckBox.ThreeState = !_ribbonCheckBox.ThreeState; } } - private void OnChecked(object sender, EventArgs e) + private void OnChecked(object? sender, EventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox is not null && _ribbonCheckBox.Ribbon is not null) { _changeService.OnComponentChanged(_ribbonCheckBox, null, _ribbonCheckBox.Checked, !_ribbonCheckBox.Checked); _ribbonCheckBox.Checked = !_ribbonCheckBox.Checked; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonCheckBox.Ribbon != null) + if (_ribbonCheckBox!.Ribbon != null) { // Create the menu strip the first time around if (_cms == null) @@ -428,7 +440,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonCheckBox.RibbonContainer) + switch (_ribbonCheckBox!.RibbonContainer) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -437,6 +449,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonCheckBox.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterButtonDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterButtonDesigner.cs index 1c40fe46d..8fe702afb 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupClusterButtonDesigner : ComponentDesigner #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupClusterButton _ribbonButton; + private KryptonRibbonGroupClusterButton? _ribbonButton; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -73,8 +73,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -105,7 +105,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonButton.DesignTimeContextMenu -= OnContextMenu; + _ribbonButton!.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentChanged -= OnComponentChanged; } } @@ -123,7 +123,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Cluster Button First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Cluster Button Previous", OnMovePrevious); @@ -139,12 +139,12 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonButton.RibbonContainer; + var cluster = _ribbonButton.RibbonContainer as KryptonRibbonGroupCluster; - moveFirst = cluster.Items.IndexOf(_ribbonButton) > 0; + moveFirst = cluster!.Items.IndexOf(_ribbonButton) > 0; movePrev = cluster.Items.IndexOf(_ribbonButton) > 0; moveNext = cluster.Items.IndexOf(_ribbonButton) < (cluster.Items.Count - 1); moveLast = cluster.Items.IndexOf(_ribbonButton) < (cluster.Items.Count - 1); @@ -156,21 +156,21 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _ribbonButton.Ribbon.InDesignHelperMode = !_ribbonButton.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonButton.RibbonContainer; + var cluster = _ribbonButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupClusterButton MoveFirst"); @@ -178,13 +178,13 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the button - cluster.Items.Remove(_ribbonButton); - cluster.Items.Insert(0, _ribbonButton); + cluster?.Items.Remove(_ribbonButton); + cluster?.Items.Insert(0, _ribbonButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -197,12 +197,12 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonButton.RibbonContainer; + var cluster = _ribbonButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupClusterButton MovePrevious"); @@ -210,15 +210,15 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - var index = cluster.Items.IndexOf(_ribbonButton) - 1; + var index = cluster!.Items.IndexOf(_ribbonButton) - 1; index = Math.Max(index, 0); - cluster.Items.Remove(_ribbonButton); - cluster.Items.Insert(index, _ribbonButton); + cluster?.Items.Remove(_ribbonButton); + cluster?.Items.Insert(index, _ribbonButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -231,12 +231,12 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonButton.RibbonContainer; + var cluster = _ribbonButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupClusterButton MoveNext"); @@ -244,15 +244,15 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - var index = cluster.Items.IndexOf(_ribbonButton) + 1; + var index = cluster!.Items.IndexOf(_ribbonButton) + 1; index = Math.Min(index, cluster.Items.Count - 1); - cluster.Items.Remove(_ribbonButton); - cluster.Items.Insert(index, _ribbonButton); + cluster?.Items.Remove(_ribbonButton); + cluster?.Items.Insert(index, _ribbonButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -265,12 +265,12 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonButton.RibbonContainer; + var cluster = _ribbonButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupClusterButton MoveLast"); @@ -278,13 +278,13 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - cluster.Items.Remove(_ribbonButton); - cluster.Items.Insert(cluster.Items.Count, _ribbonButton); + cluster?.Items.Remove(_ribbonButton); + cluster?.Items.Insert(cluster.Items.Count, _ribbonButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -297,12 +297,12 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteButton(object sender, EventArgs e) + private void OnDeleteButton(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonButton.RibbonContainer; + var cluster = _ribbonButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupClusterButton DeleteButton"); @@ -310,14 +310,14 @@ private void OnDeleteButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); RaiseComponentChanging(propertyItems); // Remove the button from the group - cluster.Items.Remove(_ribbonButton); + cluster?.Items.Remove(_ribbonButton); // Get designer to destroy it _designerHost.DestroyComponent(_ribbonButton); @@ -333,74 +333,74 @@ private void OnDeleteButton(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.Visible, !_ribbonButton.Visible); _ribbonButton.Visible = !_ribbonButton.Visible; } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.Enabled, !_ribbonButton.Enabled); _ribbonButton.Enabled = !_ribbonButton.Enabled; } } - private void OnChecked(object sender, EventArgs e) + private void OnChecked(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.Checked, !_ribbonButton.Checked); _ribbonButton.Checked = !_ribbonButton.Checked; } } - private void OnTypePush(object sender, EventArgs e) + private void OnTypePush(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.Push); _ribbonButton.ButtonType = GroupButtonType.Push; } } - private void OnTypeCheck(object sender, EventArgs e) + private void OnTypeCheck(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.Check); _ribbonButton.ButtonType = GroupButtonType.Check; } } - private void OnTypeDropDown(object sender, EventArgs e) + private void OnTypeDropDown(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.DropDown); _ribbonButton.ButtonType = GroupButtonType.DropDown; } } - private void OnTypeSplit(object sender, EventArgs e) + private void OnTypeSplit(object? sender, EventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { _changeService.OnComponentChanged(_ribbonButton, null, _ribbonButton.ButtonType, GroupButtonType.Split); _ribbonButton.ButtonType = GroupButtonType.Split; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonButton.Ribbon != null) + if (_ribbonButton?.Ribbon != null) { // Create the menu strip the first time around if (_cms == null) @@ -430,7 +430,7 @@ private void OnContextMenu(object sender, MouseEventArgs e) // Update verbs to work out correct enable states UpdateVerbStatus(); - // Update menu items state from versb + // Update menu items state from verbs _toggleHelpersMenu.Checked = _ribbonButton.Ribbon.InDesignHelperMode; _visibleMenu.Checked = _ribbonButton.Visible; _enabledMenu.Checked = _ribbonButton.Enabled; diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterColorButtonDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterColorButtonDesigner.cs index e868166dd..d753ae62d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterColorButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterColorButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupClusterColorButtonDesigner : ComponentDesigner #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupClusterColorButton _ribbonColorButton; + private KryptonRibbonGroupClusterColorButton? _ribbonColorButton; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -73,8 +73,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -105,7 +105,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonColorButton.DesignTimeContextMenu -= OnContextMenu; + _ribbonColorButton!.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentChanged -= OnComponentChanged; } } @@ -123,7 +123,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Cluster Color Button First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Cluster Color Button Previous", OnMovePrevious); @@ -139,12 +139,12 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonColorButton.RibbonContainer; + var cluster = _ribbonColorButton.RibbonContainer as KryptonRibbonGroupCluster; - moveFirst = cluster.Items.IndexOf(_ribbonColorButton) > 0; + moveFirst = cluster!.Items.IndexOf(_ribbonColorButton) > 0; movePrev = cluster.Items.IndexOf(_ribbonColorButton) > 0; moveNext = cluster.Items.IndexOf(_ribbonColorButton) < (cluster.Items.Count - 1); moveLast = cluster.Items.IndexOf(_ribbonColorButton) < (cluster.Items.Count - 1); @@ -156,21 +156,21 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _ribbonColorButton.Ribbon.InDesignHelperMode = !_ribbonColorButton.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonColorButton.RibbonContainer; + var cluster = _ribbonColorButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupColorClusterButton MoveFirst"); @@ -178,13 +178,13 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the button - cluster.Items.Remove(_ribbonColorButton); - cluster.Items.Insert(0, _ribbonColorButton); + cluster?.Items.Remove(_ribbonColorButton); + cluster?.Items.Insert(0, _ribbonColorButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -197,12 +197,12 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonColorButton.RibbonContainer; + var cluster = _ribbonColorButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupColorClusterButton MovePrevious"); @@ -210,12 +210,12 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - var index = cluster.Items.IndexOf(_ribbonColorButton) - 1; + var index = cluster!.Items.IndexOf(_ribbonColorButton) - 1; index = Math.Max(index, 0); cluster.Items.Remove(_ribbonColorButton); cluster.Items.Insert(index, _ribbonColorButton); @@ -231,12 +231,12 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonColorButton.RibbonContainer; + var cluster = _ribbonColorButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupColorClusterButton MoveNext"); @@ -244,15 +244,15 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - var index = cluster.Items.IndexOf(_ribbonColorButton) + 1; + var index = cluster!.Items.IndexOf(_ribbonColorButton) + 1; index = Math.Min(index, cluster.Items.Count - 1); - cluster.Items.Remove(_ribbonColorButton); - cluster.Items.Insert(index, _ribbonColorButton); + cluster?.Items.Remove(_ribbonColorButton); + cluster?.Items.Insert(index, _ribbonColorButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -265,12 +265,12 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonColorButton.RibbonContainer; + var cluster = _ribbonColorButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupColorClusterButton MoveLast"); @@ -278,13 +278,13 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - cluster.Items.Remove(_ribbonColorButton); - cluster.Items.Insert(cluster.Items.Count, _ribbonColorButton); + cluster?.Items.Remove(_ribbonColorButton); + cluster?.Items.Insert(cluster.Items.Count, _ribbonColorButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -297,12 +297,12 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteButton(object sender, EventArgs e) + private void OnDeleteButton(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Cast container to the correct type - var cluster = (KryptonRibbonGroupCluster)_ribbonColorButton.RibbonContainer; + var cluster = _ribbonColorButton.RibbonContainer as KryptonRibbonGroupCluster; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupColorClusterButton DeleteButton"); @@ -310,14 +310,14 @@ private void OnDeleteButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(cluster!)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); RaiseComponentChanging(propertyItems); // Remove the button from the group - cluster.Items.Remove(_ribbonColorButton); + cluster?.Items.Remove(_ribbonColorButton); // Get designer to destroy it _designerHost.DestroyComponent(_ribbonColorButton); @@ -333,74 +333,74 @@ private void OnDeleteButton(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.Visible, !_ribbonColorButton.Visible); _ribbonColorButton.Visible = !_ribbonColorButton.Visible; } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.Enabled, !_ribbonColorButton.Enabled); _ribbonColorButton.Enabled = !_ribbonColorButton.Enabled; } } - private void OnChecked(object sender, EventArgs e) + private void OnChecked(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.Checked, !_ribbonColorButton.Checked); _ribbonColorButton.Checked = !_ribbonColorButton.Checked; } } - private void OnTypePush(object sender, EventArgs e) + private void OnTypePush(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.Push); _ribbonColorButton.ButtonType = GroupButtonType.Push; } } - private void OnTypeCheck(object sender, EventArgs e) + private void OnTypeCheck(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.Check); _ribbonColorButton.ButtonType = GroupButtonType.Check; } } - private void OnTypeDropDown(object sender, EventArgs e) + private void OnTypeDropDown(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.DropDown); _ribbonColorButton.ButtonType = GroupButtonType.DropDown; } } - private void OnTypeSplit(object sender, EventArgs e) + private void OnTypeSplit(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.Split); _ribbonColorButton.ButtonType = GroupButtonType.Split; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Create the menu strip the first time around if (_cms == null) diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterDesigner.cs index 1986a74f1..7b6ee1e67 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupClusterDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupClusterDesigner : ComponentDesigner #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupCluster _ribbonCluster; + private KryptonRibbonGroupCluster? _ribbonCluster; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -74,8 +74,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentRemoving += OnComponentRemoving; @@ -90,7 +90,7 @@ public override ICollection AssociatedComponents get { var compound = new ArrayList(base.AssociatedComponents); - compound.AddRange(_ribbonCluster.Items); + compound.AddRange(_ribbonCluster!.Items); return compound; } } @@ -120,7 +120,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonCluster.DesignTimeAddButton -= OnAddButton; + _ribbonCluster!.DesignTimeAddButton -= OnAddButton; _ribbonCluster.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentRemoving -= OnComponentRemoving; _changeService.ComponentChanged -= OnComponentChanged; @@ -140,7 +140,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Cluster First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Cluster Previous", OnMovePrevious); @@ -160,15 +160,15 @@ private void UpdateVerbStatus() var moveLast = false; var clearItems = false; - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Cast container to the correct type - var lines = (KryptonRibbonGroupLines)_ribbonCluster.RibbonContainer; + var lines = _ribbonCluster.RibbonContainer as KryptonRibbonGroupLines; - moveFirst = lines.Items.IndexOf(_ribbonCluster) > 0; - movePrev = lines.Items.IndexOf(_ribbonCluster) > 0; - moveNext = lines.Items.IndexOf(_ribbonCluster) < (lines.Items.Count - 1); - moveLast = lines.Items.IndexOf(_ribbonCluster) < (lines.Items.Count - 1); + moveFirst = lines!.Items!.IndexOf(_ribbonCluster) > 0; + movePrev = lines.Items!.IndexOf(_ribbonCluster) > 0; + moveNext = lines.Items!.IndexOf(_ribbonCluster) < (lines.Items.Count - 1); + moveLast = lines.Items!.IndexOf(_ribbonCluster) < (lines.Items.Count - 1); clearItems = _ribbonCluster.Items.Count > 0; } @@ -179,21 +179,21 @@ private void UpdateVerbStatus() _clearItemsVerb.Enabled = clearItems; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { _ribbonCluster.Ribbon.InDesignHelperMode = !_ribbonCluster.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Cast container to the correct type - var lines = (KryptonRibbonGroupLines)_ribbonCluster.RibbonContainer; + var lines = _ribbonCluster.RibbonContainer as KryptonRibbonGroupLines; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCluster MoveFirst"); @@ -201,13 +201,13 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(lines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(lines!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the cluster - lines.Items.Remove(_ribbonCluster); - lines.Items.Insert(0, _ribbonCluster); + lines!.Items!.Remove(_ribbonCluster); + lines.Items!.Insert(0, _ribbonCluster); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -220,12 +220,12 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Cast container to the correct type - var lines = (KryptonRibbonGroupLines)_ribbonCluster.RibbonContainer; + var lines = _ribbonCluster.RibbonContainer as KryptonRibbonGroupLines; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCluster MovePrevious"); @@ -233,15 +233,15 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(lines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(lines!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the cluster - var index = lines.Items.IndexOf(_ribbonCluster) - 1; + var index = lines!.Items!.IndexOf(_ribbonCluster) - 1; index = Math.Max(index, 0); - lines.Items.Remove(_ribbonCluster); - lines.Items.Insert(index, _ribbonCluster); + lines.Items!.Remove(_ribbonCluster); + lines.Items!.Insert(index, _ribbonCluster); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -254,12 +254,12 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Cast container to the correct type - var lines = (KryptonRibbonGroupLines)_ribbonCluster.RibbonContainer; + var lines = _ribbonCluster.RibbonContainer as KryptonRibbonGroupLines; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCluster MoveNext"); @@ -267,15 +267,15 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(lines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(lines!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the cluster - var index = lines.Items.IndexOf(_ribbonCluster) + 1; + var index = lines!.Items!.IndexOf(_ribbonCluster) + 1; index = Math.Min(index, lines.Items.Count - 1); - lines.Items.Remove(_ribbonCluster); - lines.Items.Insert(index, _ribbonCluster); + lines.Items!.Remove(_ribbonCluster); + lines.Items!.Insert(index, _ribbonCluster); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -288,12 +288,12 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Cast container to the correct type - var lines = (KryptonRibbonGroupLines)_ribbonCluster.RibbonContainer; + var lines = _ribbonCluster.RibbonContainer as KryptonRibbonGroupLines; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCluster MoveLast"); @@ -301,13 +301,13 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(lines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(lines!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the cluster - lines.Items.Remove(_ribbonCluster); - lines.Items.Insert(lines.Items.Count, _ribbonCluster); + lines!.Items!.Remove(_ribbonCluster); + lines.Items!.Insert(lines.Items!.Count, _ribbonCluster); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -320,9 +320,9 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnAddButton(object sender, EventArgs e) + private void OnAddButton(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCluster AddButton"); @@ -330,7 +330,7 @@ private void OnAddButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCluster)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -348,9 +348,9 @@ private void OnAddButton(object sender, EventArgs e) } } - private void OnAddColorButton(object sender, EventArgs e) + private void OnAddColorButton(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCluster AddColorButton"); @@ -358,7 +358,7 @@ private void OnAddColorButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCluster)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -376,9 +376,9 @@ private void OnAddColorButton(object sender, EventArgs e) } } - private void OnClearItems(object sender, EventArgs e) + private void OnClearItems(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupCluster ClearItems"); @@ -386,12 +386,12 @@ private void OnClearItems(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCluster)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCluster)[@"Items"]; RaiseComponentChanging(propertyItems); // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the buttons from the cluster group for (var i = _ribbonCluster.Items.Count - 1; i >= 0; i--) @@ -411,12 +411,12 @@ private void OnClearItems(object sender, EventArgs e) } } - private void OnDeleteCluster(object sender, EventArgs e) + private void OnDeleteCluster(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Cast container to the correct type - var lines = (KryptonRibbonGroupLines)_ribbonCluster.RibbonContainer; + var lines = _ribbonCluster.RibbonContainer as KryptonRibbonGroupLines; // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple DeleteTriple"); @@ -424,14 +424,14 @@ private void OnDeleteCluster(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(lines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(lines!)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); RaiseComponentChanging(propertyItems); // Remove the cluster from the lines - lines.Items.Remove(_ribbonCluster); + lines!.Items!.Remove(_ribbonCluster); // Get designer to destroy it _designerHost.DestroyComponent(_ribbonCluster); @@ -447,47 +447,47 @@ private void OnDeleteCluster(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonCluster, null, _ribbonCluster.Visible, !_ribbonCluster.Visible); _ribbonCluster.Visible = !_ribbonCluster.Visible; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our cluster is being removed if (e.Component == _ribbonCluster) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all items from the cluster - for (var j = _ribbonCluster.Items.Count - 1; j >= 0; j--) + for (var j = _ribbonCluster!.Items.Count - 1; j >= 0; j--) { if (_ribbonCluster.Items[j] is IRibbonGroupItem item) { _ribbonCluster.Items.Remove(item); - host.DestroyComponent(item as Component); + host.DestroyComponent((item as Component)!); } else { var container = _ribbonCluster.Items[j] as IRibbonGroupContainer; - _ribbonCluster.Items.Remove(container); - host.DestroyComponent(container as Component); + _ribbonCluster.Items.Remove(container!); + host.DestroyComponent((container as Component)!); } } } } - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonCluster.Ribbon != null) + if (_ribbonCluster!.Ribbon != null) { // Create the menu strip the first time around if (_cms == null) diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupColorButtonDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupColorButtonDesigner.cs index 82bc2a062..2399d76f3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupColorButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupColorButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupColorButtonDesigner : ComponentDesigner #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupColorButton _ribbonColorButton; + private KryptonRibbonGroupColorButton? _ribbonColorButton; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -73,8 +73,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -105,7 +105,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonColorButton.DesignTimeContextMenu -= OnContextMenu; + _ribbonColorButton!.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentChanged -= OnComponentChanged; } } @@ -123,7 +123,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Color Button First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Color Button Previous", OnMovePrevious); @@ -139,12 +139,12 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton?.Ribbon != null) { var items = ParentItems; - moveFirst = items.IndexOf(_ribbonColorButton) > 0; - movePrev = items.IndexOf(_ribbonColorButton) > 0; - moveNext = items.IndexOf(_ribbonColorButton) < (items.Count - 1); + moveFirst = items?.IndexOf(_ribbonColorButton) > 0; + movePrev = items?.IndexOf(_ribbonColorButton) > 0; + moveNext = items?.IndexOf(_ribbonColorButton) < (items!.Count - 1); moveLast = items.IndexOf(_ribbonColorButton) < (items.Count - 1); } @@ -154,18 +154,18 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _ribbonColorButton.Ribbon.InDesignHelperMode = !_ribbonColorButton.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -176,13 +176,13 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the button - items.Remove(_ribbonColorButton); - items.Insert(0, _ribbonColorButton); + items?.Remove(_ribbonColorButton); + items?.Insert(0, _ribbonColorButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -195,9 +195,9 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -208,12 +208,12 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - var index = items.IndexOf(_ribbonColorButton) - 1; + var index = items!.IndexOf(_ribbonColorButton) - 1; index = Math.Max(index, 0); items.Remove(_ribbonColorButton); items.Insert(index, _ribbonColorButton); @@ -229,9 +229,9 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -242,12 +242,12 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - var index = items.IndexOf(_ribbonColorButton) + 1; + var index = items!.IndexOf(_ribbonColorButton) + 1; index = Math.Min(index, items.Count - 1); items.Remove(_ribbonColorButton); items.Insert(index, _ribbonColorButton); @@ -263,9 +263,9 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -276,13 +276,13 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - items.Remove(_ribbonColorButton); - items.Insert(items.Count, _ribbonColorButton); + items?.Remove(_ribbonColorButton); + items?.Insert(items.Count, _ribbonColorButton); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -295,9 +295,9 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteButton(object sender, EventArgs e) + private void OnDeleteButton(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -308,14 +308,14 @@ private void OnDeleteButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonColorButton.RibbonContainer!)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); RaiseComponentChanging(propertyItems); // Remove the button from the group - items.Remove(_ribbonColorButton); + items?.Remove(_ribbonColorButton); // Get designer to destroy it _designerHost.DestroyComponent(_ribbonColorButton); @@ -331,74 +331,74 @@ private void OnDeleteButton(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.Visible, !_ribbonColorButton.Visible); _ribbonColorButton.Visible = !_ribbonColorButton.Visible; } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.Enabled, !_ribbonColorButton.Enabled); _ribbonColorButton.Enabled = !_ribbonColorButton.Enabled; } } - private void OnChecked(object sender, EventArgs e) + private void OnChecked(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.Checked, !_ribbonColorButton.Checked); _ribbonColorButton.Checked = !_ribbonColorButton.Checked; } } - private void OnTypePush(object sender, EventArgs e) + private void OnTypePush(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.Push); _ribbonColorButton.ButtonType = GroupButtonType.Push; } } - private void OnTypeCheck(object sender, EventArgs e) + private void OnTypeCheck(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.Check); _ribbonColorButton.ButtonType = GroupButtonType.Check; } } - private void OnTypeDropDown(object sender, EventArgs e) + private void OnTypeDropDown(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.DropDown); _ribbonColorButton.ButtonType = GroupButtonType.DropDown; } } - private void OnTypeSplit(object sender, EventArgs e) + private void OnTypeSplit(object? sender, EventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { _changeService.OnComponentChanged(_ribbonColorButton, null, _ribbonColorButton.ButtonType, GroupButtonType.Split); _ribbonColorButton.ButtonType = GroupButtonType.Split; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonColorButton.Ribbon != null) + if (_ribbonColorButton!.Ribbon != null) { // Create the menu strip the first time around if (_cms == null) @@ -455,7 +455,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonColorButton.RibbonContainer) + switch (_ribbonColorButton!.RibbonContainer) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -464,6 +464,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonColorButton.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupComboBoxDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupComboBoxDesigner.cs index 139cb0d88..724dfb001 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupComboBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupComboBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupComboBoxDesigner : ComponentDesigner, IKryptonD #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupComboBox _ribbonComboBox; + private KryptonRibbonGroupComboBox? _ribbonComboBox; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -81,8 +81,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -131,7 +131,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonComboBox.DesignTimeContextMenu -= OnContextMenu; + _ribbonComboBox!.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentChanged -= OnComponentChanged; } } @@ -152,13 +152,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; - if (descrip != null) + if (properties[strArray[i]] is PropertyDescriptor descrip) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupComboBoxDesigner), descrip, attributes); } @@ -187,7 +186,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move ComboBox First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move ComboBox Previous", OnMovePrevious); @@ -203,13 +202,13 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { var items = ParentItems; - moveFirst = items.IndexOf(_ribbonComboBox) > 0; - movePrev = items.IndexOf(_ribbonComboBox) > 0; - moveNext = items.IndexOf(_ribbonComboBox) < (items.Count - 1); - moveLast = items.IndexOf(_ribbonComboBox) < (items.Count - 1); + moveFirst = items?.IndexOf(_ribbonComboBox) > 0; + movePrev = items?.IndexOf(_ribbonComboBox) > 0; + moveNext = items?.IndexOf(_ribbonComboBox) < (items?.Count - 1); + moveLast = items?.IndexOf(_ribbonComboBox) < (items?.Count - 1); } _moveFirstVerb.Enabled = moveFirst; @@ -218,18 +217,18 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { _ribbonComboBox.Ribbon.InDesignHelperMode = !_ribbonComboBox.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -240,13 +239,13 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the combobox - items.Remove(_ribbonComboBox); - items.Insert(0, _ribbonComboBox); + items?.Remove(_ribbonComboBox); + items?.Insert(0, _ribbonComboBox); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -259,9 +258,9 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -272,15 +271,15 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the combotextbox - var index = items.IndexOf(_ribbonComboBox) - 1; + var index = items!.IndexOf(_ribbonComboBox) - 1; index = Math.Max(index, 0); - items.Remove(_ribbonComboBox); - items.Insert(index, _ribbonComboBox); + items?.Remove(_ribbonComboBox); + items?.Insert(index, _ribbonComboBox); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -293,9 +292,9 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -306,15 +305,15 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the combobox - var index = items.IndexOf(_ribbonComboBox) + 1; + var index = items!.IndexOf(_ribbonComboBox) + 1; index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonComboBox); - items.Insert(index, _ribbonComboBox); + items?.Remove(_ribbonComboBox); + items?.Insert(index, _ribbonComboBox); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -327,9 +326,9 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -340,13 +339,13 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the combobox - items.Remove(_ribbonComboBox); - items.Insert(items.Count, _ribbonComboBox); + items?.Remove(_ribbonComboBox); + items?.Insert(items.Count, _ribbonComboBox); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -359,9 +358,9 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteTextBox(object sender, EventArgs e) + private void OnDeleteTextBox(object? sender, EventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -372,13 +371,13 @@ private void OnDeleteTextBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonComboBox.RibbonContainer!)[@"Items"]; RaiseComponentChanging(null); RaiseComponentChanging(propertyItems); // Remove the combobox from the group - items.Remove(_ribbonComboBox); + items?.Remove(_ribbonComboBox); // Get designer to destroy it _designerHost.DestroyComponent(_ribbonComboBox); @@ -394,35 +393,35 @@ private void OnDeleteTextBox(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonComboBox)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonComboBox); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonComboBox)[nameof(Enabled)]; + var oldValue = (bool)propertyEnabled?.GetValue(_ribbonComboBox)!; var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonComboBox, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonComboBox, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonComboBox)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonComboBox); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonComboBox)[nameof(Visible)]; + var oldValue = (bool)propertyVisible?.GetValue(_ribbonComboBox)!; var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonComboBox, null, oldValue, newValue); propertyVisible.SetValue(_ribbonComboBox, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonComboBox.Ribbon != null) + if (_ribbonComboBox!.Ribbon != null) { // Create the menu strip the first time around if (_cms == null) @@ -465,7 +464,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonComboBox.RibbonContainer) + switch (_ribbonComboBox!.RibbonContainer) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -474,6 +473,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonComboBox.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCustomControlDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCustomControlDesigner.cs index 4cc06ca88..b5279bfab 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCustomControlDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupCustomControlDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,7 +19,7 @@ internal class KryptonRibbonGroupCustomControlDesigner : ComponentDesigner, IKry #region Instance Fields private IDesignerHost _designerHost; private IComponentChangeService _changeService; - private KryptonRibbonGroupCustomControl _ribbonCustomControl; + private KryptonRibbonGroupCustomControl? _ribbonCustomControl; private DesignerVerbCollection _verbs; private DesignerVerb _toggleHelpersVerb; private DesignerVerb _moveFirstVerb; @@ -78,8 +78,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -128,7 +128,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _ribbonCustomControl.DesignTimeContextMenu -= OnContextMenu; + _ribbonCustomControl!.DesignTimeContextMenu -= OnContextMenu; _changeService.ComponentChanged -= OnComponentChanged; } } @@ -149,13 +149,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; - if (descrip != null) + if (properties[strArray[i]] is PropertyDescriptor descrip) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupCustomControlDesigner), descrip, attributes); } @@ -184,7 +183,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Custom Control First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Custom Control Previous", OnMovePrevious); @@ -200,10 +199,10 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { var items = ParentItems; - moveFirst = items.IndexOf(_ribbonCustomControl) > 0; + moveFirst = items!.IndexOf(_ribbonCustomControl) > 0; movePrev = items.IndexOf(_ribbonCustomControl) > 0; moveNext = items.IndexOf(_ribbonCustomControl) < (items.Count - 1); moveLast = items.IndexOf(_ribbonCustomControl) < (items.Count - 1); @@ -215,18 +214,18 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { _ribbonCustomControl.Ribbon.InDesignHelperMode = !_ribbonCustomControl.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -237,13 +236,13 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl!.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the custom control - items.Remove(_ribbonCustomControl); - items.Insert(0, _ribbonCustomControl); + items?.Remove(_ribbonCustomControl); + items?.Insert(0, _ribbonCustomControl); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -256,9 +255,9 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -269,15 +268,15 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl!.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the custom control - var index = items.IndexOf(_ribbonCustomControl) - 1; + var index = items!.IndexOf(_ribbonCustomControl) - 1; index = Math.Max(index, 0); - items.Remove(_ribbonCustomControl); - items.Insert(index, _ribbonCustomControl); + items?.Remove(_ribbonCustomControl); + items?.Insert(index, _ribbonCustomControl); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -290,9 +289,9 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -303,15 +302,15 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl!.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the custom control - var index = items.IndexOf(_ribbonCustomControl) + 1; + var index = items!.IndexOf(_ribbonCustomControl) + 1; index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonCustomControl); - items.Insert(index, _ribbonCustomControl); + items?.Remove(_ribbonCustomControl); + items?.Insert(index, _ribbonCustomControl); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -324,9 +323,9 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -337,13 +336,13 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl!.RibbonContainer!)[@"Items"]; RaiseComponentChanging(propertyItems); // Move position of the triple - items.Remove(_ribbonCustomControl); - items.Insert(items.Count, _ribbonCustomControl); + items?.Remove(_ribbonCustomControl); + items?.Insert(items.Count, _ribbonCustomControl); UpdateVerbStatus(); RaiseComponentChanged(propertyItems, null, null); @@ -356,9 +355,9 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteCustomControl(object sender, EventArgs e) + private void OnDeleteCustomControl(object? sender, EventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { // Get access to the parent collection of items var items = ParentItems; @@ -369,14 +368,14 @@ private void OnDeleteCustomControl(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl.RibbonContainer)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonCustomControl!.RibbonContainer!)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); RaiseComponentChanging(propertyItems); // Remove the custom control from the group - items.Remove(_ribbonCustomControl); + items?.Remove(_ribbonCustomControl); // Get designer to destroy it _designerHost.DestroyComponent(_ribbonCustomControl); @@ -392,35 +391,35 @@ private void OnDeleteCustomControl(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonCustomControl)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonCustomControl); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonCustomControl)[nameof(Enabled)]; + var oldValue = (bool)propertyEnabled!.GetValue(_ribbonCustomControl)!; var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonCustomControl, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonCustomControl, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonCustomControl)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonCustomControl); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonCustomControl)[nameof(Visible)]; + var oldValue = (bool)propertyVisible?.GetValue(_ribbonCustomControl)!; var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonCustomControl, null, oldValue, newValue); propertyVisible.SetValue(_ribbonCustomControl, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonCustomControl.Ribbon != null) + if (_ribbonCustomControl!.Ribbon != null) { // Create the menu strip the first time around if (_cms == null) @@ -463,7 +462,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonCustomControl.RibbonContainer) + switch (_ribbonCustomControl!.RibbonContainer) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -472,6 +471,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonCustomControl.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDateTimePickerDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDateTimePickerDesigner.cs index 026c5b0be..d289824ec 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDateTimePickerDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDateTimePickerDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -57,11 +57,12 @@ public override void Initialize([DisallowNull] IComponent component) // Let base class do standard stuff base.Initialize(component); - Debug.Assert(component != null); + Debug.Assert(component is not null); // Cast to correct type - _ribbonDateTimePicker = component as KryptonRibbonGroupDateTimePicker; - if (_ribbonDateTimePicker != null) + _ribbonDateTimePicker = component as KryptonRibbonGroupDateTimePicker ?? throw new ArgumentNullException(nameof(component)); + + if (_ribbonDateTimePicker is not null && _ribbonDateTimePicker.DateTimePicker is not null) { _ribbonDateTimePicker.DateTimePickerDesigner = this; @@ -81,8 +82,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -152,12 +153,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupDateTimePickerDesigner), descrip, attributes); @@ -187,7 +188,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move DateTimePicker First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move DateTimePicker Previous", OnMovePrevious); @@ -205,7 +206,7 @@ private void UpdateVerbStatus() if (_ribbonDateTimePicker.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonDateTimePicker) > 0; movePrev = items.IndexOf(_ribbonDateTimePicker) > 0; moveNext = items.IndexOf(_ribbonDateTimePicker) < (items.Count - 1); @@ -218,7 +219,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonDateTimePicker.Ribbon != null) @@ -227,29 +228,32 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonDateTimePicker.Ribbon != null) + if (_ribbonDateTimePicker.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDateTimePicker MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]; + if (_ribbonDateTimePicker.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]!; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the date time picker - items.Remove(_ribbonDateTimePicker); - items.Insert(0, _ribbonDateTimePicker); - UpdateVerbStatus(); + // Move position of the date time picker + items.Remove(_ribbonDateTimePicker); + items.Insert(0, _ribbonDateTimePicker); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -259,31 +263,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { if (_ribbonDateTimePicker.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDateTimePicker MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the date time picker - var index = items.IndexOf(_ribbonDateTimePicker) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonDateTimePicker); - items.Insert(index, _ribbonDateTimePicker); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonDateTimePicker.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]!; + + RaiseComponentChanging(propertyItems); + + // Move position of the date time picker + var index = items.IndexOf(_ribbonDateTimePicker) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonDateTimePicker); + items.Insert(index, _ribbonDateTimePicker); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -293,31 +300,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { if (_ribbonDateTimePicker.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDateTimePicker MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the date time picker - var index = items.IndexOf(_ribbonDateTimePicker) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonDateTimePicker); - items.Insert(index, _ribbonDateTimePicker); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonDateTimePicker.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]!; + + RaiseComponentChanging(propertyItems); + + // Move position of the date time picker + var index = items.IndexOf(_ribbonDateTimePicker) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonDateTimePicker); + items.Insert(index, _ribbonDateTimePicker); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -327,29 +337,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { if (_ribbonDateTimePicker.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDateTimePicker MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]; + if (_ribbonDateTimePicker.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]!; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the date time picker - items.Remove(_ribbonDateTimePicker); - items.Insert(items.Count, _ribbonDateTimePicker); - UpdateVerbStatus(); + // Move position of the date time picker + items.Remove(_ribbonDateTimePicker); + items.Insert(items.Count, _ribbonDateTimePicker); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -359,32 +372,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteDateTimePicker(object sender, EventArgs e) + private void OnDeleteDateTimePicker(object? sender, EventArgs e) { - if (_ribbonDateTimePicker.Ribbon != null) + if (_ribbonDateTimePicker.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDateTimePicker DeleteDateTimePicker"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]; + if (_ribbonDateTimePicker.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDateTimePicker.RibbonContainer)[@"Items"]!; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the date time picker from the group - items.Remove(_ribbonDateTimePicker); + // Remove the date time picker from the group + items.Remove(_ribbonDateTimePicker); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonDateTimePicker); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonDateTimePicker); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -394,33 +410,33 @@ private void OnDeleteDateTimePicker(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { if (_ribbonDateTimePicker.Ribbon != null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonDateTimePicker)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonDateTimePicker); + PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonDateTimePicker)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonDateTimePicker); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonDateTimePicker, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonDateTimePicker, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { if (_ribbonDateTimePicker.Ribbon != null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonDateTimePicker)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonDateTimePicker); + PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonDateTimePicker)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonDateTimePicker); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonDateTimePicker, null, oldValue, newValue); propertyVisible.SetValue(_ribbonDateTimePicker, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if (_ribbonDateTimePicker.Ribbon != null) { @@ -474,6 +490,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonDateTimePicker.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDesigner.cs index 47c31f27a..ca5790084 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -70,8 +70,8 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonGroup = component as KryptonRibbonGroup; - if (_ribbonGroup != null) + _ribbonGroup = component as KryptonRibbonGroup ?? throw new ArgumentNullException(nameof(component)); + if (_ribbonGroup is not null) { _ribbonGroup.DesignTimeAddTriple += OnAddTriple; _ribbonGroup.DesignTimeAddLines += OnAddLines; @@ -81,8 +81,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentRemoving += OnComponentRemoving; @@ -150,7 +150,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Group First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Group Previous", OnMovePrevious); @@ -172,7 +172,9 @@ private void UpdateVerbStatus() var moveLast = false; var clearItems = false; - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { moveFirst = _ribbonGroup.RibbonTab.Groups.IndexOf(_ribbonGroup) > 0; movePrev = _ribbonGroup.RibbonTab.Groups.IndexOf(_ribbonGroup) > 0; @@ -188,7 +190,7 @@ private void UpdateVerbStatus() _clearItemsVerb.Enabled = clearItems; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonGroup.Ribbon != null) @@ -197,9 +199,11 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup MoveFirst"); @@ -207,7 +211,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Group property - MemberDescriptor propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; + MemberDescriptor? propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; RaiseComponentChanging(propertyGroups); @@ -227,9 +231,11 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup MovePrevious"); @@ -237,7 +243,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Group property - MemberDescriptor propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; + MemberDescriptor? propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; RaiseComponentChanging(propertyGroups); @@ -259,9 +265,11 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup MoveNext"); @@ -269,7 +277,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Group property - MemberDescriptor propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; + MemberDescriptor? propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; RaiseComponentChanging(propertyGroups); @@ -291,9 +299,11 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup MoveLast"); @@ -301,7 +311,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Group property - MemberDescriptor propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; + MemberDescriptor? propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; RaiseComponentChanging(propertyGroups); @@ -321,9 +331,11 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnAddTriple(object sender, EventArgs e) + private void OnAddTriple(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon != null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup AddTriple"); @@ -331,7 +343,7 @@ private void OnAddTriple(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -340,7 +352,7 @@ private void OnAddTriple(object sender, EventArgs e) _ribbonGroup.Items.Add(triple); // Get access to the Triple.Items property - MemberDescriptor propertyTripleItems = TypeDescriptor.GetProperties(triple)[@"Items"]; + MemberDescriptor? propertyTripleItems = TypeDescriptor.GetProperties(triple)[@"Items"]; RaiseComponentChanging(propertyTripleItems); @@ -348,7 +360,7 @@ private void OnAddTriple(object sender, EventArgs e) var button1 = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); var button2 = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); var button3 = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); - triple.Items.Add(button1); + triple.Items!.Add(button1); triple.Items.Add(button2); triple.Items.Add(button3); @@ -363,9 +375,11 @@ private void OnAddTriple(object sender, EventArgs e) } } - private void OnAddLines(object sender, EventArgs e) + private void OnAddLines(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup AddLines"); @@ -373,24 +387,27 @@ private void OnAddLines(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create the new lines component - var lines = (KryptonRibbonGroupLines)_designerHost.CreateComponent(typeof(KryptonRibbonGroupLines)); + var lines = (KryptonRibbonGroupLines)_designerHost.CreateComponent(typeof(KryptonRibbonGroupLines)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("lines")); _ribbonGroup.Items.Add(lines); // Get access to the Lines.Items property - MemberDescriptor propertyLinesItems = TypeDescriptor.GetProperties(lines)[@"Items"]; + MemberDescriptor? propertyLinesItems = TypeDescriptor.GetProperties(lines)[@"Items"]; RaiseComponentChanging(propertyLinesItems); // Get designer to create three new button components - var button1 = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); - var button2 = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); - lines.Items.Add(button1); - lines.Items.Add(button2); + if (lines.Items is not null) + { + var button1 = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); + var button2 = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); + lines.Items.Add(button1); + lines.Items.Add(button2); + } RaiseComponentChanged(propertyLinesItems, null, null); RaiseComponentChanged(propertyItems, null, null); @@ -403,9 +420,11 @@ private void OnAddLines(object sender, EventArgs e) } } - private void OnAddSep(object sender, EventArgs e) + private void OnAddSep(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup AddSep"); @@ -413,7 +432,7 @@ private void OnAddSep(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -431,9 +450,11 @@ private void OnAddSep(object sender, EventArgs e) } } - private void OnAddGallery(object sender, EventArgs e) + private void OnAddGallery(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup AddGallery"); @@ -441,7 +462,7 @@ private void OnAddGallery(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -459,9 +480,11 @@ private void OnAddGallery(object sender, EventArgs e) } } - private void OnClearItems(object sender, EventArgs e) + private void OnClearItems(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup ClearItems"); @@ -469,12 +492,12 @@ private void OnClearItems(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the items from the tab for (var i = _ribbonGroup.Items.Count - 1; i >= 0; i--) @@ -494,9 +517,11 @@ private void OnClearItems(object sender, EventArgs e) } } - private void OnDeleteGroup(object sender, EventArgs e) + private void OnDeleteGroup(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup DeleteGroup"); @@ -504,7 +529,7 @@ private void OnDeleteGroup(object sender, EventArgs e) try { // Get access to the Groups property - MemberDescriptor propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; + MemberDescriptor? propertyGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; // Remove the ribbon tab from the ribbon RaiseComponentChanging(null); @@ -527,42 +552,48 @@ private void OnDeleteGroup(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { _changeService.OnComponentChanged(_ribbonGroup, null, _ribbonGroup.Visible, !_ribbonGroup.Visible); _ribbonGroup.Visible = !_ribbonGroup.Visible; } } - private void OnCollapsable(object sender, EventArgs e) + private void OnCollapsable(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { _changeService.OnComponentChanged(_ribbonGroup, null, _ribbonGroup.AllowCollapsed, !_ribbonGroup.AllowCollapsed); _ribbonGroup.AllowCollapsed = !_ribbonGroup.AllowCollapsed; } } - private void OnDialogLauncher(object sender, EventArgs e) + private void OnDialogLauncher(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { _changeService.OnComponentChanged(_ribbonGroup, null, _ribbonGroup.DialogBoxLauncher, !_ribbonGroup.DialogBoxLauncher); _ribbonGroup.DialogBoxLauncher = !_ribbonGroup.DialogBoxLauncher; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our group is being removed if (e.Component == _ribbonGroup) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all containers from the group for (var j = _ribbonGroup.Items.Count - 1; j >= 0; j--) @@ -574,9 +605,11 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) } } - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Create the menu strip the first time around if (_cms == null) @@ -668,15 +701,17 @@ private void UpdateMoveToTab() } } - private void OnMoveToTab(object sender, EventArgs e) + private void OnMoveToTab(object? sender, EventArgs e) { - if ((_ribbonGroup.Ribbon != null) && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) + if ((_ribbonGroup.Ribbon is not null) + && _ribbonGroup.RibbonTab is not null + && _ribbonGroup.RibbonTab.Groups.Contains(_ribbonGroup)) { // Cast to correct type - var tabMenuItem = (ToolStripMenuItem)sender; + var tabMenuItem = sender as ToolStripMenuItem ?? throw new ArgumentNullException(nameof(sender)); // Get access to the destination tab - var destination = (KryptonRibbonTab)tabMenuItem.Tag; + var destination = tabMenuItem.Tag as KryptonRibbonTab ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(tabMenuItem.Tag))); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroup MoveTabTo"); @@ -684,9 +719,9 @@ private void OnMoveToTab(object sender, EventArgs e) try { // Get access to the Groups property - MemberDescriptor oldGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; - MemberDescriptor newGroups = TypeDescriptor.GetProperties(destination)[@"Groups"]; - MemberDescriptor newGroupsTab = TypeDescriptor.GetProperties(_ribbonGroup.Ribbon)[@"RibbonTabs"]; + MemberDescriptor? oldGroups = TypeDescriptor.GetProperties(_ribbonGroup.RibbonTab)[@"Groups"]; + MemberDescriptor? newGroups = TypeDescriptor.GetProperties(destination)[@"Groups"]; + MemberDescriptor? newGroupsTab = TypeDescriptor.GetProperties(_ribbonGroup.Ribbon)[@"RibbonTabs"]; // Remove the ribbon tab from the ribbon RaiseComponentChanging(null); diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDomainUpDownDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDomainUpDownDesigner.cs index f2cd88cb4..2871efdd2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDomainUpDownDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupDomainUpDownDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -57,11 +57,12 @@ public override void Initialize([DisallowNull] IComponent component) // Let base class do standard stuff base.Initialize(component); - Debug.Assert(component != null); + Debug.Assert(component is not null); // Cast to correct type - _ribbonDomainUpDown = component as KryptonRibbonGroupDomainUpDown; - if (_ribbonDomainUpDown != null) + _ribbonDomainUpDown = component as KryptonRibbonGroupDomainUpDown ?? throw new ArgumentNullException(nameof(component)); + + if (_ribbonDomainUpDown is not null) { _ribbonDomainUpDown.DomainUpDownDesigner = this; @@ -74,15 +75,15 @@ public override void Initialize([DisallowNull] IComponent component) _ribbonDomainUpDown.Enabled = true; // Tell the embedded domain up-down control it is in design mode - _ribbonDomainUpDown.DomainUpDown.InRibbonDesignMode = true; + _ribbonDomainUpDown.DomainUpDown!.InRibbonDesignMode = true; // Hook into events _ribbonDomainUpDown.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -152,12 +153,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupDomainUpDownDesigner), descrip, attributes); @@ -187,7 +188,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move DomainUpDown First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move DomainUpDown Previous", OnMovePrevious); @@ -203,9 +204,9 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonDomainUpDown) > 0; movePrev = items.IndexOf(_ribbonDomainUpDown) > 0; moveNext = items.IndexOf(_ribbonDomainUpDown) < (items.Count - 1); @@ -218,38 +219,41 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { _ribbonDomainUpDown.Ribbon.InDesignHelperMode = !_ribbonDomainUpDown.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDomainUpDown MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; + if (_ribbonDomainUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the numeric up-down - items.Remove(_ribbonDomainUpDown); - items.Insert(0, _ribbonDomainUpDown); - UpdateVerbStatus(); + // Move position of the numeric up-down + items.Remove(_ribbonDomainUpDown); + items.Insert(0, _ribbonDomainUpDown); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -259,31 +263,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDomainUpDown MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the numeric up-down - var index = items.IndexOf(_ribbonDomainUpDown) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonDomainUpDown); - items.Insert(index, _ribbonDomainUpDown); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonDomainUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the numeric up-down + var index = items.IndexOf(_ribbonDomainUpDown) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonDomainUpDown); + items.Insert(index, _ribbonDomainUpDown); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -293,31 +300,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDomainUpDown MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the numeric up-down - var index = items.IndexOf(_ribbonDomainUpDown) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonDomainUpDown); - items.Insert(index, _ribbonDomainUpDown); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonDomainUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the numeric up-down + var index = items.IndexOf(_ribbonDomainUpDown) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonDomainUpDown); + items.Insert(index, _ribbonDomainUpDown); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -327,29 +337,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDomainUpDown MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; + if (_ribbonDomainUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the numeric up-down - items.Remove(_ribbonDomainUpDown); - items.Insert(items.Count, _ribbonDomainUpDown); - UpdateVerbStatus(); + // Move position of the numeric up-down + items.Remove(_ribbonDomainUpDown); + items.Insert(items.Count, _ribbonDomainUpDown); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -359,32 +372,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteDomainUpDown(object sender, EventArgs e) + private void OnDeleteDomainUpDown(object? sender, EventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupDomainUpDown DeleteDomainUpDown"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; + if (_ribbonDomainUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonDomainUpDown.RibbonContainer)[@"Items"]; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the numeric up-down from the group - items.Remove(_ribbonDomainUpDown); + // Remove the numeric up-down from the group + items.Remove(_ribbonDomainUpDown); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonDomainUpDown); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonDomainUpDown); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -394,35 +410,35 @@ private void OnDeleteDomainUpDown(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonDomainUpDown)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonDomainUpDown); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonDomainUpDown)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonDomainUpDown); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonDomainUpDown, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonDomainUpDown, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonDomainUpDown)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonDomainUpDown); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonDomainUpDown)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonDomainUpDown); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonDomainUpDown, null, oldValue, newValue); propertyVisible.SetValue(_ribbonDomainUpDown, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonDomainUpDown.Ribbon != null) + if (_ribbonDomainUpDown.Ribbon is not null) { // Create the menu strip the first time around if (_cms == null) @@ -474,6 +490,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonDomainUpDown.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupGalleryDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupGalleryDesigner.cs index 1b862739c..9481ead14 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupGalleryDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupGalleryDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -69,7 +69,8 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonGallery = component as KryptonRibbonGroupGallery; + _ribbonGallery = component as KryptonRibbonGroupGallery ?? throw new ArgumentNullException(nameof(component)); + if (_ribbonGallery != null) { _ribbonGallery.GalleryDesigner = this; @@ -90,8 +91,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -161,12 +162,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupGalleryDesigner), descrip, attributes); @@ -196,7 +197,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Gallery First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Gallery Previous", OnMovePrevious); @@ -212,7 +213,9 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if ((_ribbonGallery.Ribbon != null) && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) + if ((_ribbonGallery.Ribbon is not null) + && _ribbonGallery.RibbonGroup is not null + && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) { moveFirst = _ribbonGallery.RibbonGroup.Items.IndexOf(_ribbonGallery) > 0; movePrev = _ribbonGallery.RibbonGroup.Items.IndexOf(_ribbonGallery) > 0; @@ -226,7 +229,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonGallery.Ribbon != null) @@ -235,9 +238,11 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if ((_ribbonGallery.Ribbon != null) && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) + if ((_ribbonGallery.Ribbon is not null) + && _ribbonGallery.RibbonGroup is not null + && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupGallery MoveFirst"); @@ -245,7 +250,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -265,9 +270,11 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if ((_ribbonGallery.Ribbon != null) && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) + if ((_ribbonGallery.Ribbon is not null) + && _ribbonGallery.RibbonGroup is not null + && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupGallery MovePrevious"); @@ -275,7 +282,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -297,9 +304,11 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if ((_ribbonGallery.Ribbon != null) && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) + if ((_ribbonGallery.Ribbon is not null) + && _ribbonGallery.RibbonGroup is not null + && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupGallery MoveNext"); @@ -307,7 +316,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -329,9 +338,11 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if ((_ribbonGallery.Ribbon != null) && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) + if ((_ribbonGallery.Ribbon is not null) + && _ribbonGallery.RibbonGroup is not null + && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupGallery MoveLast"); @@ -339,7 +350,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -359,9 +370,11 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteGallery(object sender, EventArgs e) + private void OnDeleteGallery(object? sender, EventArgs e) { - if ((_ribbonGallery.Ribbon != null) && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) + if ((_ribbonGallery.Ribbon is not null) + && _ribbonGallery.RibbonGroup is not null + && _ribbonGallery.RibbonGroup.Items.Contains(_ribbonGallery)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupGallery DeleteGallery"); @@ -369,7 +382,7 @@ private void OnDeleteGallery(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonGallery.RibbonGroup)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); @@ -392,31 +405,31 @@ private void OnDeleteGallery(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonGallery)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonGallery); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonGallery)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonGallery); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonGallery, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonGallery, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonGallery)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonGallery); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonGallery)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonGallery); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonGallery, null, oldValue, newValue); propertyVisible.SetValue(_ribbonGallery, newValue); } } - private void OnMaxLarge(object sender, EventArgs e) + private void OnMaxLarge(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { @@ -425,7 +438,7 @@ private void OnMaxLarge(object sender, EventArgs e) } } - private void OnMaxMedium(object sender, EventArgs e) + private void OnMaxMedium(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { @@ -434,7 +447,7 @@ private void OnMaxMedium(object sender, EventArgs e) } } - private void OnMaxSmall(object sender, EventArgs e) + private void OnMaxSmall(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { @@ -443,7 +456,7 @@ private void OnMaxSmall(object sender, EventArgs e) } } - private void OnMinLarge(object sender, EventArgs e) + private void OnMinLarge(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { @@ -452,7 +465,7 @@ private void OnMinLarge(object sender, EventArgs e) } } - private void OnMinMedium(object sender, EventArgs e) + private void OnMinMedium(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { @@ -461,7 +474,7 @@ private void OnMinMedium(object sender, EventArgs e) } } - private void OnMinSmall(object sender, EventArgs e) + private void OnMinSmall(object? sender, EventArgs e) { if (_ribbonGallery.Ribbon != null) { @@ -470,9 +483,9 @@ private void OnMinSmall(object sender, EventArgs e) } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if (_ribbonGallery.Ribbon != null) { diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLabelDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLabelDesigner.cs index 25294b4f9..88d9d5c76 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLabelDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLabelDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -60,15 +60,16 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonLabel = component as KryptonRibbonGroupLabel; + _ribbonLabel = component as KryptonRibbonGroupLabel ?? throw new ArgumentNullException(nameof(component)); + if (_ribbonLabel != null) { _ribbonLabel.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -117,7 +118,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Label First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Label Previous", OnMovePrevious); @@ -135,7 +136,8 @@ private void UpdateVerbStatus() if (_ribbonLabel.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); + moveFirst = items.IndexOf(_ribbonLabel) > 0; movePrev = items.IndexOf(_ribbonLabel) > 0; moveNext = items.IndexOf(_ribbonLabel) < (items.Count - 1); @@ -148,7 +150,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonLabel.Ribbon != null) @@ -157,29 +159,32 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLabel MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; + if (_ribbonLabel.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the label - items.Remove(_ribbonLabel); - items.Insert(0, _ribbonLabel); - UpdateVerbStatus(); + // Move position of the label + items.Remove(_ribbonLabel); + items.Insert(0, _ribbonLabel); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -189,31 +194,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLabel MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the triple - var index = items.IndexOf(_ribbonLabel) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonLabel); - items.Insert(index, _ribbonLabel); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonLabel.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the triple + var index = items.IndexOf(_ribbonLabel) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonLabel); + items.Insert(index, _ribbonLabel); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -223,31 +231,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLabel MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the triple - var index = items.IndexOf(_ribbonLabel) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonLabel); - items.Insert(index, _ribbonLabel); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonLabel.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the triple + var index = items.IndexOf(_ribbonLabel) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonLabel); + items.Insert(index, _ribbonLabel); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -257,29 +268,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLabel MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; + if (_ribbonLabel.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the triple - items.Remove(_ribbonLabel); - items.Insert(items.Count, _ribbonLabel); - UpdateVerbStatus(); + // Move position of the triple + items.Remove(_ribbonLabel); + items.Insert(items.Count, _ribbonLabel); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -289,33 +303,36 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteLabel(object sender, EventArgs e) + private void OnDeleteLabel(object? sender, EventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLabel DeleteLabel"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; + if (_ribbonLabel.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLabel.RibbonContainer)[@"Items"]; - // Remove the ribbon group from the ribbon tab - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + // Remove the ribbon group from the ribbon tab + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the label from the group - items.Remove(_ribbonLabel); + // Remove the label from the group + items.Remove(_ribbonLabel); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonLabel); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonLabel); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -325,29 +342,29 @@ private void OnDeleteLabel(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { _changeService.OnComponentChanged(_ribbonLabel, null, _ribbonLabel.Visible, !_ribbonLabel.Visible); _ribbonLabel.Visible = !_ribbonLabel.Visible; } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { _changeService.OnComponentChanged(_ribbonLabel, null, _ribbonLabel.Enabled, !_ribbonLabel.Enabled); _ribbonLabel.Enabled = !_ribbonLabel.Enabled; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonLabel.Ribbon != null) + if (_ribbonLabel.Ribbon is not null) { // Create the menu strip the first time around if (_cms == null) @@ -401,6 +418,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonLabel.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLinesDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLinesDesigner.cs index 6e70e8b1a..bc763c064 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLinesDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupLinesDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -41,6 +41,7 @@ internal class KryptonRibbonGroupLinesDesigner : ComponentDesigner private DesignerVerb _addDomainUpDownVerb; private DesignerVerb _addDateTimePickerVerb; private DesignerVerb _addTrackBarVerb; + private DesignerVerb _addThemeComboBoxVerb; private DesignerVerb _clearItemsVerb; private DesignerVerb _deleteLinesVerb; private ContextMenuStrip? _cms; @@ -74,6 +75,7 @@ internal class KryptonRibbonGroupLinesDesigner : ComponentDesigner private ToolStripMenuItem _addDomainUpDownMenu; private ToolStripMenuItem _addDateTimePickerMenu; private ToolStripMenuItem _addTrackBarMenu; + private ToolStripMenuItem _addThemeComboBoxMenu; private ToolStripMenuItem _clearItemsMenu; private ToolStripMenuItem _deleteLinesMenu; #endregion @@ -97,10 +99,10 @@ public override void Initialize([DisallowNull] IComponent component) // Let base class do standard stuff base.Initialize(component); - Debug.Assert(component != null); + Debug.Assert(component is not null); // Cast to correct type - _ribbonLines = component as KryptonRibbonGroupLines; + _ribbonLines = component as KryptonRibbonGroupLines ?? throw new ArgumentNullException(nameof(component)); if (_ribbonLines != null) { _ribbonLines.DesignTimeAddButton += OnAddButton; @@ -118,12 +120,13 @@ public override void Initialize([DisallowNull] IComponent component) _ribbonLines.DesignTimeAddDomainUpDown += OnAddDomainUpDown; _ribbonLines.DesignTimeAddDateTimePicker += OnAddDateTimePicker; _ribbonLines.DesignTimeAddTrackBar += OnAddTrackBar; + _ribbonLines.DesignTimeAddThemeComboBox += OnAddThemeComboBox; _ribbonLines.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentRemoving += OnComponentRemoving; @@ -138,7 +141,12 @@ public override ICollection AssociatedComponents get { var compound = new ArrayList(base.AssociatedComponents); - compound.AddRange(_ribbonLines.Items); + + if ( _ribbonLines.Items is not null && _ribbonLines.Items.Count > 0) + { + compound.AddRange(_ribbonLines.Items); + } + return compound; } } @@ -184,6 +192,7 @@ protected override void Dispose(bool disposing) _ribbonLines.DesignTimeAddDateTimePicker -= OnAddDateTimePicker; _ribbonLines.DesignTimeContextMenu -= OnContextMenu; _ribbonLines.DesignTimeAddTrackBar -= OnAddTrackBar; + _ribbonLines.DesignTimeAddThemeComboBox -= OnAddThemeComboBox; _changeService.ComponentRemoving -= OnComponentRemoving; _changeService.ComponentChanged -= OnComponentChanged; } @@ -202,7 +211,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Lines First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Lines Previous", OnMovePrevious); @@ -223,25 +232,35 @@ private void UpdateVerbStatus() _addDomainUpDownVerb = new DesignerVerb(@"Add DomainUpDown", OnAddDomainUpDown); _addDateTimePickerVerb = new DesignerVerb(@"Add DateTimePicker", OnAddDateTimePicker); _addTrackBarVerb = new DesignerVerb(@"Add TrackBar", OnAddTrackBar); + _addThemeComboBoxVerb = new DesignerVerb("Add Theme ComboBox", OnAddThemeComboBox); _clearItemsVerb = new DesignerVerb(@"Clear Items", OnClearItems); _deleteLinesVerb = new DesignerVerb(@"Delete Lines", OnDeleteLines); - _verbs.AddRange(new[] { _toggleHelpersVerb, _moveFirstVerb, _movePrevVerb, _moveNextVerb, _moveLastVerb, - _addButtonVerb, - _addCheckBoxVerb, - _addClusterVerb, - _addColorButtonVerb, - _addComboBoxVerb, - _addCustomControlVerb, - _addDateTimePickerVerb, - _addDomainUpDownVerb, - _addLabelVerb, - _addNumericUpDownVerb, - _addMaskedTextBoxVerb, - _addRadioButtonVerb, - _addRichTextBoxVerb, - _addTextBoxVerb, - _addTrackBarVerb, - _clearItemsVerb, _deleteLinesVerb }); + _verbs.AddRange(new[] + { + _toggleHelpersVerb, + _moveFirstVerb, + _movePrevVerb, + _moveNextVerb, + _moveLastVerb, + _addButtonVerb, + _addCheckBoxVerb, + _addClusterVerb, + _addColorButtonVerb, + _addComboBoxVerb, + _addCustomControlVerb, + _addDateTimePickerVerb, + _addDomainUpDownVerb, + _addLabelVerb, + _addNumericUpDownVerb, + _addMaskedTextBoxVerb, + _addRadioButtonVerb, + _addRichTextBoxVerb, + _addTextBoxVerb, + _addTrackBarVerb, + _addThemeComboBoxVerb, + _clearItemsVerb, + _deleteLinesVerb + }); } var moveFirst = false; @@ -250,7 +269,10 @@ private void UpdateVerbStatus() var moveLast = false; var clearItems = false; - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { moveFirst = _ribbonLines.RibbonGroup.Items.IndexOf(_ribbonLines) > 0; movePrev = _ribbonLines.RibbonGroup.Items.IndexOf(_ribbonLines) > 0; @@ -266,7 +288,7 @@ private void UpdateVerbStatus() _clearItemsVerb.Enabled = clearItems; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonLines.Ribbon != null) @@ -275,9 +297,11 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if ((_ribbonLines?.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines?.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines MoveFirst"); @@ -285,7 +309,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -305,9 +329,11 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon != null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines MovePrevious"); @@ -315,7 +341,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -337,9 +363,11 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines MoveNext"); @@ -347,7 +375,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -369,9 +397,11 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines MoveLast"); @@ -379,7 +409,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -399,9 +429,12 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnAddButton(object sender, EventArgs e) + private void OnAddButton(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddButton"); @@ -409,7 +442,7 @@ private void OnAddButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -427,9 +460,12 @@ private void OnAddButton(object sender, EventArgs e) } } - private void OnAddColorButton(object sender, EventArgs e) + private void OnAddColorButton(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddColorButton"); @@ -437,7 +473,7 @@ private void OnAddColorButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -455,9 +491,12 @@ private void OnAddColorButton(object sender, EventArgs e) } } - private void OnAddCheckBox(object sender, EventArgs e) + private void OnAddCheckBox(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddCheckBox"); @@ -465,7 +504,7 @@ private void OnAddCheckBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -483,9 +522,12 @@ private void OnAddCheckBox(object sender, EventArgs e) } } - private void OnAddRadioButton(object sender, EventArgs e) + private void OnAddRadioButton(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddRadioButton"); @@ -493,7 +535,7 @@ private void OnAddRadioButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -511,9 +553,12 @@ private void OnAddRadioButton(object sender, EventArgs e) } } - private void OnAddLabel(object sender, EventArgs e) + private void OnAddLabel(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddLabel"); @@ -521,7 +566,7 @@ private void OnAddLabel(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -539,9 +584,12 @@ private void OnAddLabel(object sender, EventArgs e) } } - private void OnAddCustomControl(object sender, EventArgs e) + private void OnAddCustomControl(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddCustomControl"); @@ -549,7 +597,7 @@ private void OnAddCustomControl(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -567,9 +615,12 @@ private void OnAddCustomControl(object sender, EventArgs e) } } - private void OnAddTextBox(object sender, EventArgs e) + private void OnAddTextBox(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddTextBox"); @@ -577,7 +628,7 @@ private void OnAddTextBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -595,9 +646,12 @@ private void OnAddTextBox(object sender, EventArgs e) } } - private void OnAddMaskedTextBox(object sender, EventArgs e) + private void OnAddMaskedTextBox(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddMaskedTextBox"); @@ -605,7 +659,7 @@ private void OnAddMaskedTextBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -623,9 +677,12 @@ private void OnAddMaskedTextBox(object sender, EventArgs e) } } - private void OnAddRichTextBox(object sender, EventArgs e) + private void OnAddRichTextBox(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + &&_ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddRichTextBox"); @@ -633,7 +690,7 @@ private void OnAddRichTextBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -651,9 +708,13 @@ private void OnAddRichTextBox(object sender, EventArgs e) } } - private void OnAddComboBox(object sender, EventArgs e) + private void OnAddComboBox(object? sender, EventArgs e) { - if (_ribbonLines != null && _ribbonLines.Ribbon != null && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if (_ribbonLines is not null + && _ribbonLines.Ribbon is not null + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddComboBox"); @@ -661,7 +722,7 @@ private void OnAddComboBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -679,9 +740,12 @@ private void OnAddComboBox(object sender, EventArgs e) } } - private void OnAddNumericUpDown(object sender, EventArgs e) + private void OnAddNumericUpDown(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddNumericUpDown"); @@ -689,7 +753,7 @@ private void OnAddNumericUpDown(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -707,9 +771,12 @@ private void OnAddNumericUpDown(object sender, EventArgs e) } } - private void OnAddDomainUpDown(object sender, EventArgs e) + private void OnAddDomainUpDown(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddDomainUpDown"); @@ -717,7 +784,7 @@ private void OnAddDomainUpDown(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -735,9 +802,12 @@ private void OnAddDomainUpDown(object sender, EventArgs e) } } - private void OnAddDateTimePicker(object sender, EventArgs e) + private void OnAddDateTimePicker(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddDateTimePicker"); @@ -745,7 +815,7 @@ private void OnAddDateTimePicker(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -763,9 +833,12 @@ private void OnAddDateTimePicker(object sender, EventArgs e) } } - private void OnAddTrackBar(object sender, EventArgs e) + private void OnAddTrackBar(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddTrackBar"); @@ -773,7 +846,7 @@ private void OnAddTrackBar(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -791,9 +864,41 @@ private void OnAddTrackBar(object sender, EventArgs e) } } - private void OnAddCluster(object sender, EventArgs e) + private void OnAddThemeComboBox(object? sender, EventArgs e) + { + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + { + DesignerTransaction transaction = _designerHost.CreateTransaction("KryptonRibbonGroupLines AddThemeComboBox"); + + try + { + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + var tcb = (KryptonRibbonGroupThemeComboBox)_designerHost.CreateComponent( + typeof(KryptonRibbonGroupThemeComboBox)); + + _ribbonLines.Items.Add(tcb); + + RaiseComponentChanged(propertyItems, null, null); + } + finally + { + transaction?.Commit(); + } + } + } + + private void OnAddCluster(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines AddCluster"); @@ -801,7 +906,7 @@ private void OnAddCluster(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -810,7 +915,7 @@ private void OnAddCluster(object sender, EventArgs e) _ribbonLines.Items.Add(cluster); // Get access to the Cluster.Items property - MemberDescriptor propertyClusterItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; + MemberDescriptor? propertyClusterItems = TypeDescriptor.GetProperties(cluster)[@"Items"]; RaiseComponentChanging(propertyClusterItems); @@ -831,9 +936,12 @@ private void OnAddCluster(object sender, EventArgs e) } } - private void OnClearItems(object sender, EventArgs e) + private void OnClearItems(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.Items is not null + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines ClearItems"); @@ -841,12 +949,12 @@ private void OnClearItems(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines)[@"Items"]; RaiseComponentChanging(propertyItems); // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the items from the lines group for (var i = _ribbonLines.Items.Count - 1; i >= 0; i--) @@ -866,9 +974,11 @@ private void OnClearItems(object sender, EventArgs e) } } - private void OnDeleteLines(object sender, EventArgs e) + private void OnDeleteLines(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines DeleteLines"); @@ -876,7 +986,7 @@ private void OnDeleteLines(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); @@ -899,92 +1009,111 @@ private void OnDeleteLines(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { _changeService.OnComponentChanged(_ribbonLines, null, _ribbonLines.Visible, !_ribbonLines.Visible); _ribbonLines.Visible = !_ribbonLines.Visible; } } - private void OnMaxLarge(object sender, EventArgs e) + private void OnMaxLarge(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { _changeService.OnComponentChanged(_ribbonLines, null, _ribbonLines.MaximumSize, GroupItemSize.Large); _ribbonLines.MaximumSize = GroupItemSize.Large; } } - private void OnMaxMedium(object sender, EventArgs e) + private void OnMaxMedium(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { _changeService.OnComponentChanged(_ribbonLines, null, _ribbonLines.MaximumSize, GroupItemSize.Medium); _ribbonLines.MaximumSize = GroupItemSize.Medium; } } - private void OnMaxSmall(object sender, EventArgs e) + private void OnMaxSmall(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { _changeService.OnComponentChanged(_ribbonLines, null, _ribbonLines.MaximumSize, GroupItemSize.Small); _ribbonLines.MaximumSize = GroupItemSize.Small; } } - private void OnMinLarge(object sender, EventArgs e) + private void OnMinLarge(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { _changeService.OnComponentChanged(_ribbonLines, null, _ribbonLines.MinimumSize, GroupItemSize.Large); _ribbonLines.MinimumSize = GroupItemSize.Large; } } - private void OnMinMedium(object sender, EventArgs e) + private void OnMinMedium(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { _changeService.OnComponentChanged(_ribbonLines, null, _ribbonLines.MinimumSize, GroupItemSize.Medium); _ribbonLines.MinimumSize = GroupItemSize.Medium; } } - private void OnMinSmall(object sender, EventArgs e) + private void OnMinSmall(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { _changeService.OnComponentChanged(_ribbonLines, null, _ribbonLines.MinimumSize, GroupItemSize.Small); _ribbonLines.MinimumSize = GroupItemSize.Small; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our component is being removed if (e.Component == _ribbonLines) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all items from the lines groups - for (var j = _ribbonLines.Items.Count - 1; j >= 0; j--) + if (_ribbonLines.Items is not null) { - var item = _ribbonLines.Items[j] as KryptonRibbonGroupItem; - _ribbonLines.Items.Remove(item); - host.DestroyComponent(item); + for (var j = _ribbonLines.Items.Count - 1 ; j >= 0 ; j--) + { + var item = _ribbonLines.Items[j] as KryptonRibbonGroupItem; + _ribbonLines.Items.Remove(item); + host.DestroyComponent(item); + } } } } - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Create the menu strip the first time around if (_cms == null) @@ -1022,30 +1151,40 @@ private void OnContextMenu(object sender, MouseEventArgs e) _addRichTextBoxMenu = new ToolStripMenuItem("Add RichTextBox", GenericImageResources.KryptonRibbonGroupRichTextBox, OnAddRichTextBox); _addTextBoxMenu = new ToolStripMenuItem("Add TextBox", GenericImageResources.KryptonRibbonGroupTextBox, OnAddTextBox); _addTrackBarMenu = new ToolStripMenuItem("Add TrackBar", GenericImageResources.KryptonRibbonGroupTrackBar, OnAddTrackBar); + _addThemeComboBoxMenu = new ToolStripMenuItem("Add ThemeComboBox", GenericImageResources.KryptonRibbonGroupComboBox, OnAddThemeComboBox); _clearItemsMenu = new ToolStripMenuItem("Clear Items", null, OnClearItems); _deleteLinesMenu = new ToolStripMenuItem("Delete Lines", GenericImageResources.Delete, OnDeleteLines); - _cms.Items.AddRange(new ToolStripItem[] { _toggleHelpersMenu, new ToolStripSeparator(), - _visibleMenu, _maximumSizeMenu, _minimumSizeMenu, new ToolStripSeparator(), - _moveFirstMenu, _movePreviousMenu, _moveNextMenu, _moveLastMenu, new ToolStripSeparator(), - _moveToGroupMenu, new ToolStripSeparator(), - _addButtonMenu, - _addCheckBoxMenu, - _addClusterMenu, - _addColorButtonMenu, - _addComboBoxMenu, - _addCustomControlMenu, - _addDateTimePickerMenu, - _addDomainUpDownMenu, - _addLabelMenu, - _addMaskedTextBoxMenu, - _addNumericUpDownMenu, - _addRadioButtonMenu, - _addRichTextBoxMenu, - _addTextBoxMenu, - _addTrackBarMenu, - new ToolStripSeparator(), - _clearItemsMenu, new ToolStripSeparator(), - _deleteLinesMenu }); + _cms.Items.AddRange(new ToolStripItem[] + { + _toggleHelpersMenu, new ToolStripSeparator(), + _visibleMenu, + _maximumSizeMenu, + _minimumSizeMenu, new ToolStripSeparator(), + _moveFirstMenu, + _movePreviousMenu, + _moveNextMenu, + _moveLastMenu, new ToolStripSeparator(), + _moveToGroupMenu, new ToolStripSeparator(), + _addButtonMenu, + _addCheckBoxMenu, + _addClusterMenu, + _addColorButtonMenu, + _addComboBoxMenu, + _addCustomControlMenu, + _addDateTimePickerMenu, + _addDomainUpDownMenu, + _addLabelMenu, + _addMaskedTextBoxMenu, + _addNumericUpDownMenu, + _addRadioButtonMenu, + _addRichTextBoxMenu, + _addTextBoxMenu, + _addTrackBarMenu, + _addThemeComboBoxMenu, + new ToolStripSeparator(), + _clearItemsMenu, new ToolStripSeparator(), + _deleteLinesMenu + }); // Ensure add images have correct transparent background _addButtonMenu.ImageTransparentColor = Color.Magenta; @@ -1063,6 +1202,7 @@ private void OnContextMenu(object sender, MouseEventArgs e) _addDomainUpDownMenu.ImageTransparentColor = Color.Magenta; _addDateTimePickerMenu.ImageTransparentColor = Color.Magenta; _addTrackBarMenu.ImageTransparentColor = Color.Magenta; + _addThemeComboBoxMenu.ImageTransparentColor = Color.Magenta; } // Update verbs to work out correct enable states @@ -1101,7 +1241,7 @@ private void UpdateMoveToGroup() // Remove any existing child items _moveToGroupMenu.DropDownItems.Clear(); - if (_ribbonLines.Ribbon != null) + if (_ribbonLines.Ribbon is not null && _ribbonLines.RibbonTab is not null) { // Create a new item per group in the same ribbon tab foreach (KryptonRibbonGroup group in _ribbonLines.RibbonTab.Groups) @@ -1126,15 +1266,17 @@ private void UpdateMoveToGroup() } } - private void OnMoveToGroup(object sender, EventArgs e) + private void OnMoveToGroup(object? sender, EventArgs e) { - if ((_ribbonLines.Ribbon != null) && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) + if ((_ribbonLines.Ribbon is not null) + && _ribbonLines.RibbonGroup is not null + && _ribbonLines.RibbonGroup.Items.Contains(_ribbonLines)) { // Cast to correct type - var groupMenuItem = (ToolStripMenuItem)sender; + var groupMenuItem = sender as ToolStripMenuItem ?? throw new ArgumentNullException(nameof(sender)); // Get access to the destination tab - var destination = (KryptonRibbonGroup)groupMenuItem.Tag; + var destination = groupMenuItem.Tag as KryptonRibbonGroup ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("destination")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupLines MoveLinesToGroup"); @@ -1142,8 +1284,8 @@ private void OnMoveToGroup(object sender, EventArgs e) try { // Get access to the Groups property - MemberDescriptor oldItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; - MemberDescriptor newItems = TypeDescriptor.GetProperties(destination)[@"Items"]; + MemberDescriptor? oldItems = TypeDescriptor.GetProperties(_ribbonLines.RibbonGroup)[@"Items"]; + MemberDescriptor? newItems = TypeDescriptor.GetProperties(destination)[@"Items"]; // Remove the ribbon tab from the ribbon RaiseComponentChanging(null); @@ -1169,4 +1311,4 @@ private void OnMoveToGroup(object sender, EventArgs e) } #endregion } -} +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupMaskedTextBoxDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupMaskedTextBoxDesigner.cs index 09766e66d..400d7f921 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupMaskedTextBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupMaskedTextBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -60,8 +60,9 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonMaskedTextBox = component as KryptonRibbonGroupMaskedTextBox; - if (_ribbonMaskedTextBox != null) + _ribbonMaskedTextBox = component as KryptonRibbonGroupMaskedTextBox ?? throw new ArgumentNullException(nameof(component)); + + if (_ribbonMaskedTextBox is not null) { _ribbonMaskedTextBox.MaskedTextBoxDesigner = this; @@ -81,8 +82,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("_designerHost")); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("_changeService")); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -152,12 +153,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupMaskedTextBoxDesigner), descrip, attributes); @@ -187,7 +188,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move TextBox First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move TextBox Previous", OnMovePrevious); @@ -205,7 +206,7 @@ private void UpdateVerbStatus() if (_ribbonMaskedTextBox.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonMaskedTextBox) > 0; movePrev = items.IndexOf(_ribbonMaskedTextBox) > 0; moveNext = items.IndexOf(_ribbonMaskedTextBox) < (items.Count - 1); @@ -218,7 +219,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonMaskedTextBox.Ribbon != null) @@ -227,29 +228,32 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonMaskedTextBox.Ribbon != null) + if (_ribbonMaskedTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupMaskedTextBox MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; + if (_ribbonMaskedTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the textbox - items.Remove(_ribbonMaskedTextBox); - items.Insert(0, _ribbonMaskedTextBox); - UpdateVerbStatus(); + // Move position of the textbox + items.Remove(_ribbonMaskedTextBox); + items.Insert(0, _ribbonMaskedTextBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -259,31 +263,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonMaskedTextBox.Ribbon != null) + if (_ribbonMaskedTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupMaskedTextBox MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the textbox - var index = items.IndexOf(_ribbonMaskedTextBox) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonMaskedTextBox); - items.Insert(index, _ribbonMaskedTextBox); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonMaskedTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the textbox + var index = items.IndexOf(_ribbonMaskedTextBox) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonMaskedTextBox); + items.Insert(index, _ribbonMaskedTextBox); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -293,31 +300,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonMaskedTextBox.Ribbon != null) + if (_ribbonMaskedTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupMaskedTextBox MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the textbox - var index = items.IndexOf(_ribbonMaskedTextBox) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonMaskedTextBox); - items.Insert(index, _ribbonMaskedTextBox); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonMaskedTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the textbox + var index = items.IndexOf(_ribbonMaskedTextBox) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonMaskedTextBox); + items.Insert(index, _ribbonMaskedTextBox); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -327,29 +337,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonMaskedTextBox.Ribbon != null) + if (_ribbonMaskedTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupMaskedTextBox MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; + if (_ribbonMaskedTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the textbox - items.Remove(_ribbonMaskedTextBox); - items.Insert(items.Count, _ribbonMaskedTextBox); - UpdateVerbStatus(); + // Move position of the textbox + items.Remove(_ribbonMaskedTextBox); + items.Insert(items.Count, _ribbonMaskedTextBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -359,32 +372,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteTextBox(object sender, EventArgs e) + private void OnDeleteTextBox(object? sender, EventArgs e) { - if (_ribbonMaskedTextBox.Ribbon != null) + if (_ribbonMaskedTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupMaskedTextBox DeleteTextBox"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; + if (_ribbonMaskedTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonMaskedTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the textbox from the group - items.Remove(_ribbonMaskedTextBox); + // Remove the textbox from the group + items.Remove(_ribbonMaskedTextBox); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonMaskedTextBox); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonMaskedTextBox); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -394,33 +410,33 @@ private void OnDeleteTextBox(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { if (_ribbonMaskedTextBox.Ribbon != null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonMaskedTextBox)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonMaskedTextBox); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonMaskedTextBox)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonMaskedTextBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonMaskedTextBox, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonMaskedTextBox, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { if (_ribbonMaskedTextBox.Ribbon != null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonMaskedTextBox)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonMaskedTextBox); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonMaskedTextBox)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonMaskedTextBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonMaskedTextBox, null, oldValue, newValue); propertyVisible.SetValue(_ribbonMaskedTextBox, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if (_ribbonMaskedTextBox.Ribbon != null) { @@ -474,6 +490,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonMaskedTextBox.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupNumericUpDownDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupNumericUpDownDesigner.cs index 6db93b721..a0243e751 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupNumericUpDownDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupNumericUpDownDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -60,7 +60,8 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonNumericUpDown = component as KryptonRibbonGroupNumericUpDown; + _ribbonNumericUpDown = component as KryptonRibbonGroupNumericUpDown ?? throw new ArgumentNullException(nameof(component)); + if (_ribbonNumericUpDown != null) { _ribbonNumericUpDown.NumericUpDownDesigner = this; @@ -74,15 +75,15 @@ public override void Initialize([DisallowNull] IComponent component) _ribbonNumericUpDown.Enabled = true; // Tell the embedded numeric up-down control it is in design mode - _ribbonNumericUpDown.NumericUpDown.InRibbonDesignMode = true; + _ribbonNumericUpDown.NumericUpDown!.InRibbonDesignMode = true; // Hook into events _ribbonNumericUpDown.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("_designerHost")); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("_changeService")); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -152,7 +153,7 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) @@ -186,7 +187,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move NumericUpDown First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move NumericUpDown Previous", OnMovePrevious); @@ -204,7 +205,7 @@ private void UpdateVerbStatus() if (_ribbonNumericUpDown.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonNumericUpDown) > 0; movePrev = items.IndexOf(_ribbonNumericUpDown) > 0; moveNext = items.IndexOf(_ribbonNumericUpDown) < (items.Count - 1); @@ -217,7 +218,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonNumericUpDown.Ribbon != null) @@ -226,29 +227,32 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonNumericUpDown.Ribbon != null) + if (_ribbonNumericUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupNumericUpDown MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; + if (_ribbonNumericUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the numeric up-down - items.Remove(_ribbonNumericUpDown); - items.Insert(0, _ribbonNumericUpDown); - UpdateVerbStatus(); + // Move position of the numeric up-down + items.Remove(_ribbonNumericUpDown); + items.Insert(0, _ribbonNumericUpDown); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -258,31 +262,33 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonNumericUpDown.Ribbon != null) + if (_ribbonNumericUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupNumericUpDown MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; + if (_ribbonNumericUpDown.RibbonContainer is not null) + {// Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the numeric up-down - var index = items.IndexOf(_ribbonNumericUpDown) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonNumericUpDown); - items.Insert(index, _ribbonNumericUpDown); - UpdateVerbStatus(); + // Move position of the numeric up-down + var index = items.IndexOf(_ribbonNumericUpDown) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonNumericUpDown); + items.Insert(index, _ribbonNumericUpDown); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -292,31 +298,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonNumericUpDown.Ribbon != null) + if (_ribbonNumericUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupNumericUpDown MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the numeric up-down - var index = items.IndexOf(_ribbonNumericUpDown) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonNumericUpDown); - items.Insert(index, _ribbonNumericUpDown); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonNumericUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the numeric up-down + var index = items.IndexOf(_ribbonNumericUpDown) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonNumericUpDown); + items.Insert(index, _ribbonNumericUpDown); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -326,29 +335,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonNumericUpDown.Ribbon != null) + if (_ribbonNumericUpDown.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupNumericUpDown MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; + if (_ribbonNumericUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the numeric up-down - items.Remove(_ribbonNumericUpDown); - items.Insert(items.Count, _ribbonNumericUpDown); - UpdateVerbStatus(); + // Move position of the numeric up-down + items.Remove(_ribbonNumericUpDown); + items.Insert(items.Count, _ribbonNumericUpDown); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -358,32 +370,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteNumericUpDown(object sender, EventArgs e) + private void OnDeleteNumericUpDown(object? sender, EventArgs e) { if (_ribbonNumericUpDown.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupNumericUpDown DeleteNumericUpDown"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; + if (_ribbonNumericUpDown.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonNumericUpDown.RibbonContainer)[@"Items"]; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the numeric up-down from the group - items.Remove(_ribbonNumericUpDown); + // Remove the numeric up-down from the group + items.Remove(_ribbonNumericUpDown); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonNumericUpDown); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonNumericUpDown); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -393,33 +408,33 @@ private void OnDeleteNumericUpDown(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { if (_ribbonNumericUpDown.Ribbon != null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonNumericUpDown)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonNumericUpDown); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonNumericUpDown)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonNumericUpDown); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonNumericUpDown, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonNumericUpDown, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { if (_ribbonNumericUpDown.Ribbon != null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonNumericUpDown)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonNumericUpDown); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonNumericUpDown)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonNumericUpDown); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonNumericUpDown, null, oldValue, newValue); propertyVisible.SetValue(_ribbonNumericUpDown, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if (_ribbonNumericUpDown.Ribbon != null) { @@ -473,6 +488,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonNumericUpDown.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRadioButtonDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRadioButtonDesigner.cs index 8b92aa438..5893a4ce3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRadioButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRadioButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -61,18 +61,18 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonRadioButton = component as KryptonRibbonGroupRadioButton; + _ribbonRadioButton = component as KryptonRibbonGroupRadioButton ?? throw new ArgumentNullException(nameof(component)); if (_ribbonRadioButton != null) { _ribbonRadioButton.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed - _changeService.ComponentChanged += OnComponentChanged; + _changeService!.ComponentChanged += OnComponentChanged; } /// @@ -118,7 +118,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move RadioButton First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move RadioButton Previous", OnMovePrevious); @@ -136,7 +136,7 @@ private void UpdateVerbStatus() if (_ribbonRadioButton.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ParentItems))); moveFirst = items.IndexOf(_ribbonRadioButton) > 0; movePrev = items.IndexOf(_ribbonRadioButton) > 0; moveNext = items.IndexOf(_ribbonRadioButton) < (items.Count - 1); @@ -149,7 +149,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonRadioButton.Ribbon != null) @@ -158,12 +158,12 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ParentItems))); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRadioButton MoveFirst"); @@ -171,7 +171,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer)[@"Items"]; + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer!)[@"Items"] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyItems")); RaiseComponentChanging(propertyItems); @@ -190,12 +190,12 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ParentItems))); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRadioButton MovePrevious"); @@ -203,7 +203,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer)[@"Items"]; + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer!)[@"Items"] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyItems")); RaiseComponentChanging(propertyItems); @@ -224,12 +224,12 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ParentItems))); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRadioButton MoveNext"); @@ -237,7 +237,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer)[@"Items"]; + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer!)[@"Items"] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyItems")); RaiseComponentChanging(propertyItems); @@ -258,12 +258,12 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ParentItems))); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRadioButton MoveLast"); @@ -271,7 +271,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer)[@"Items"]; + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer!)[@"Items"] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyItems")); RaiseComponentChanging(propertyItems); @@ -290,12 +290,12 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteRadioButton(object sender, EventArgs e) + private void OnDeleteRadioButton(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(ParentItems))); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRadioButton DeleteRadioButton"); @@ -303,7 +303,7 @@ private void OnDeleteRadioButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer)[@"Items"]; + MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRadioButton.RibbonContainer!)[@"Items"] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyItems")); // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); @@ -326,7 +326,7 @@ private void OnDeleteRadioButton(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { @@ -335,7 +335,7 @@ private void OnVisible(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { @@ -344,7 +344,7 @@ private void OnEnabled(object sender, EventArgs e) } } - private void OnChecked(object sender, EventArgs e) + private void OnChecked(object? sender, EventArgs e) { if (_ribbonRadioButton.Ribbon != null) { @@ -353,9 +353,9 @@ private void OnChecked(object sender, EventArgs e) } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if (_ribbonRadioButton.Ribbon != null) { @@ -413,6 +413,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonRadioButton.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRichTextBoxDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRichTextBoxDesigner.cs index ace33655a..6d2b76a95 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRichTextBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupRichTextBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -57,11 +57,12 @@ public override void Initialize([DisallowNull] IComponent component) // Let base class do standard stuff base.Initialize(component); - Debug.Assert(component != null); + Debug.Assert(component is not null); // Cast to correct type - _ribbonRichTextBox = component as KryptonRibbonGroupRichTextBox; - if (_ribbonRichTextBox != null) + _ribbonRichTextBox = component as KryptonRibbonGroupRichTextBox ?? throw new ArgumentNullException(nameof(component)); + + if (_ribbonRichTextBox is not null) { _ribbonRichTextBox.RichTextBoxDesigner = this; @@ -74,15 +75,15 @@ public override void Initialize([DisallowNull] IComponent component) _ribbonRichTextBox.Enabled = true; // Tell the embedded text box it is in design mode - _ribbonRichTextBox.RichTextBox.InRibbonDesignMode = true; + _ribbonRichTextBox.RichTextBox!.InRibbonDesignMode = true; // Hook into events _ribbonRichTextBox.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -152,12 +153,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupRichTextBoxDesigner), descrip, attributes); @@ -187,7 +188,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move RichTextBox First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move RichTextBox Previous", OnMovePrevious); @@ -205,7 +206,7 @@ private void UpdateVerbStatus() if (_ribbonRichTextBox.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonRichTextBox) > 0; movePrev = items.IndexOf(_ribbonRichTextBox) > 0; moveNext = items.IndexOf(_ribbonRichTextBox) < (items.Count - 1); @@ -218,7 +219,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonRichTextBox.Ribbon != null) @@ -227,29 +228,32 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { if (_ribbonRichTextBox.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRichTextBox MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; + if (_ribbonRichTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the richtextbox - items.Remove(_ribbonRichTextBox); - items.Insert(0, _ribbonRichTextBox); - UpdateVerbStatus(); + // Move position of the richtextbox + items.Remove(_ribbonRichTextBox); + items.Insert(0, _ribbonRichTextBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -259,31 +263,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { if (_ribbonRichTextBox.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRichTextBox MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the richtextbox - var index = items.IndexOf(_ribbonRichTextBox) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonRichTextBox); - items.Insert(index, _ribbonRichTextBox); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonRichTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the richtextbox + var index = items.IndexOf(_ribbonRichTextBox) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonRichTextBox); + items.Insert(index, _ribbonRichTextBox); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -293,31 +300,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { if (_ribbonRichTextBox.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRichTextBox MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the richtextbox - var index = items.IndexOf(_ribbonRichTextBox) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonRichTextBox); - items.Insert(index, _ribbonRichTextBox); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonRichTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the richtextbox + var index = items.IndexOf(_ribbonRichTextBox) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonRichTextBox); + items.Insert(index, _ribbonRichTextBox); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -327,29 +337,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { if (_ribbonRichTextBox.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRichTextBox MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; + if (_ribbonRichTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the richtextbox - items.Remove(_ribbonRichTextBox); - items.Insert(items.Count, _ribbonRichTextBox); - UpdateVerbStatus(); + // Move position of the richtextbox + items.Remove(_ribbonRichTextBox); + items.Insert(items.Count, _ribbonRichTextBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -359,32 +372,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteTextBox(object sender, EventArgs e) + private void OnDeleteTextBox(object? sender, EventArgs e) { if (_ribbonRichTextBox.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupRichTextBox DeleteRichTextBox"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; + if (_ribbonRichTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonRichTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the richtextbox from the group - items.Remove(_ribbonRichTextBox); + // Remove the richtextbox from the group + items.Remove(_ribbonRichTextBox); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonRichTextBox); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonRichTextBox); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -394,33 +410,33 @@ private void OnDeleteTextBox(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonRichTextBox.Ribbon != null) + if (_ribbonRichTextBox.Ribbon is not null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonRichTextBox)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonRichTextBox); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonRichTextBox)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonRichTextBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonRichTextBox, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonRichTextBox, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonRichTextBox.Ribbon != null) + if (_ribbonRichTextBox.Ribbon is not null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonRichTextBox)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonRichTextBox); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonRichTextBox)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonRichTextBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonRichTextBox, null, oldValue, newValue); propertyVisible.SetValue(_ribbonRichTextBox, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if (_ribbonRichTextBox.Ribbon != null) { @@ -465,7 +481,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonRichTextBox.RibbonContainer) + switch (_ribbonRichTextBox!.RibbonContainer) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -474,6 +490,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonRichTextBox.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupSeparatorDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupSeparatorDesigner.cs index 35972c0fe..457726dc5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupSeparatorDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupSeparatorDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -59,15 +59,16 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonSeparator = component as KryptonRibbonGroupSeparator; + _ribbonSeparator = component as KryptonRibbonGroupSeparator ?? throw new ArgumentNullException(nameof(component)); + if (_ribbonSeparator != null) { _ribbonSeparator.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -81,6 +82,12 @@ public override DesignerVerbCollection Verbs get { UpdateVerbStatus(); + + if (_verbs is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_verbs))); + } + return _verbs; } } @@ -116,7 +123,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Separator First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Separator Previous", OnMovePrevious); @@ -134,7 +141,9 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) { moveFirst = _ribbonSeparator.RibbonGroup.Items.IndexOf(_ribbonSeparator) > 0; movePrev = _ribbonSeparator.RibbonGroup.Items.IndexOf(_ribbonSeparator) > 0; @@ -149,7 +158,7 @@ private void UpdateVerbStatus() } } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonSeparator.Ribbon != null) @@ -158,9 +167,11 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupSeparator MoveFirst"); @@ -168,7 +179,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -188,9 +199,11 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupSeparator MovePrevious"); @@ -198,7 +211,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -220,9 +233,12 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupSeparator MoveNext"); @@ -230,7 +246,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -252,9 +268,11 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupSeparator MoveLast"); @@ -262,7 +280,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -282,9 +300,12 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteSeparator(object sender, EventArgs e) + private void OnDeleteSeparator(object? sender, EventArgs e) { - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupSeparator DeleteSeparator"); @@ -292,7 +313,7 @@ private void OnDeleteSeparator(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); @@ -315,11 +336,13 @@ private void OnDeleteSeparator(object sender, EventArgs e) } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) { // Create the menu strip the first time around if (_cms == null) @@ -366,7 +389,7 @@ private void UpdateMoveToGroup() // Remove any existing child items _moveToGroupMenu.DropDownItems.Clear(); - if (_ribbonSeparator.Ribbon != null) + if (_ribbonSeparator.Ribbon is not null && _ribbonSeparator.RibbonTab is not null) { // Create a new item per group in the same ribbon tab foreach (KryptonRibbonGroup group in _ribbonSeparator.RibbonTab.Groups) @@ -391,15 +414,17 @@ private void UpdateMoveToGroup() } } - private void OnMoveToGroup(object sender, EventArgs e) + private void OnMoveToGroup(object? sender, EventArgs e) { - if ((_ribbonSeparator.Ribbon != null) && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) + if ((_ribbonSeparator.Ribbon is not null) + && _ribbonSeparator.RibbonGroup is not null + && _ribbonSeparator.RibbonGroup.Items.Contains(_ribbonSeparator)) { // Cast to correct type - var groupMenuItem = (ToolStripMenuItem)sender; + var groupMenuItem = sender as ToolStripMenuItem ?? throw new ArgumentNullException(nameof(sender)); // Get access to the destination tab - var destination = (KryptonRibbonGroup)groupMenuItem.Tag; + var destination = groupMenuItem.Tag as KryptonRibbonGroup ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("destination")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupSeparator MoveSeparatorToGroup"); @@ -407,8 +432,8 @@ private void OnMoveToGroup(object sender, EventArgs e) try { // Get access to the Groups property - MemberDescriptor oldItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; - MemberDescriptor newItems = TypeDescriptor.GetProperties(destination)[@"Items"]; + MemberDescriptor? oldItems = TypeDescriptor.GetProperties(_ribbonSeparator.RibbonGroup)[@"Items"]; + MemberDescriptor? newItems = TypeDescriptor.GetProperties(destination)[@"Items"]; // Remove the ribbon tab from the ribbon RaiseComponentChanging(null); diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTextBoxDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTextBoxDesigner.cs index 2ca10f04c..284f2068f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTextBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTextBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -60,7 +60,8 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonTextBox = component as KryptonRibbonGroupTextBox; + _ribbonTextBox = component as KryptonRibbonGroupTextBox ?? throw new ArgumentNullException(nameof(component)); + if (_ribbonTextBox != null) { _ribbonTextBox.TextBoxDesigner = this; @@ -74,15 +75,15 @@ public override void Initialize([DisallowNull] IComponent component) _ribbonTextBox.Enabled = true; // Tell the embedded text box it is in design mode - _ribbonTextBox.TextBox.InRibbonDesignMode = true; + _ribbonTextBox.TextBox!.InRibbonDesignMode = true; // Hook into events _ribbonTextBox.DesignTimeContextMenu += OnContextMenu; } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -152,12 +153,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupTextBoxDesigner), descrip, attributes); @@ -187,7 +188,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move TextBox First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move TextBox Previous", OnMovePrevious); @@ -205,7 +206,7 @@ private void UpdateVerbStatus() if (_ribbonTextBox.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonTextBox) > 0; movePrev = items.IndexOf(_ribbonTextBox) > 0; moveNext = items.IndexOf(_ribbonTextBox) < (items.Count - 1); @@ -218,7 +219,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonTextBox.Ribbon != null) @@ -227,29 +228,32 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonTextBox.Ribbon != null) + if (_ribbonTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTextBox MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; + if (_ribbonTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the textbox - items.Remove(_ribbonTextBox); - items.Insert(0, _ribbonTextBox); - UpdateVerbStatus(); + // Move position of the textbox + items.Remove(_ribbonTextBox); + items.Insert(0, _ribbonTextBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -259,31 +263,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { if (_ribbonTextBox.Ribbon != null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTextBox MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the textbox - var index = items.IndexOf(_ribbonTextBox) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonTextBox); - items.Insert(index, _ribbonTextBox); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the textbox + var index = items.IndexOf(_ribbonTextBox) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonTextBox); + items.Insert(index, _ribbonTextBox); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -293,31 +300,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonTextBox.Ribbon != null) + if (_ribbonTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTextBox MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the textbox - var index = items.IndexOf(_ribbonTextBox) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonTextBox); - items.Insert(index, _ribbonTextBox); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the textbox + var index = items.IndexOf(_ribbonTextBox) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonTextBox); + items.Insert(index, _ribbonTextBox); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -327,29 +337,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonTextBox.Ribbon != null) + if (_ribbonTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTextBox MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; + if (_ribbonTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the textbox - items.Remove(_ribbonTextBox); - items.Insert(items.Count, _ribbonTextBox); - UpdateVerbStatus(); + // Move position of the textbox + items.Remove(_ribbonTextBox); + items.Insert(items.Count, _ribbonTextBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -359,32 +372,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteTextBox(object sender, EventArgs e) + private void OnDeleteTextBox(object? sender, EventArgs e) { - if (_ribbonTextBox.Ribbon != null) + if (_ribbonTextBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTextBox DeleteTextBox"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; + if (_ribbonTextBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTextBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the textbox from the group - items.Remove(_ribbonTextBox); + // Remove the textbox from the group + items.Remove(_ribbonTextBox); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonTextBox); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonTextBox); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -394,33 +410,33 @@ private void OnDeleteTextBox(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonTextBox.Ribbon != null) + if (_ribbonTextBox.Ribbon is not null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonTextBox)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonTextBox); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonTextBox)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonTextBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonTextBox, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonTextBox, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonTextBox.Ribbon != null) + if (_ribbonTextBox.Ribbon is not null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonTextBox)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonTextBox); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonTextBox)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonTextBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonTextBox, null, oldValue, newValue); propertyVisible.SetValue(_ribbonTextBox, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if (_ribbonTextBox.Ribbon != null) { @@ -465,7 +481,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonTextBox.RibbonContainer) + switch (_ribbonTextBox!.RibbonContainer) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -474,6 +490,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonTextBox.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupThemeComboBoxDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupThemeComboBoxDesigner.cs index 088cf0af2..539cb8e11 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupThemeComboBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupThemeComboBoxDesigner.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -55,7 +55,8 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonThemeComboBox = component as KryptonRibbonGroupThemeComboBox; + _ribbonThemeComboBox = component as KryptonRibbonGroupThemeComboBox ?? throw new ArgumentNullException(nameof(component)); + if (_ribbonThemeComboBox != null) { _ribbonThemeComboBox.ComboBoxDesigner = this; @@ -76,8 +77,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("_designerHost")); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("_changeService")); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -147,12 +148,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupThemeComboBoxDesigner), descrip, attributes); @@ -182,7 +183,7 @@ private void UpdateVerbStatus() // Create verbs first time around if (_verbs == null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move ComboBox First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move ComboBox Previous", OnMovePrevious); @@ -198,9 +199,9 @@ private void UpdateVerbStatus() var moveNext = false; var moveLast = false; - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonThemeComboBox) > 0; movePrev = items.IndexOf(_ribbonThemeComboBox) > 0; moveNext = items.IndexOf(_ribbonThemeComboBox) < (items.Count - 1); @@ -213,38 +214,41 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { _ribbonThemeComboBox.Ribbon.InDesignHelperMode = !_ribbonThemeComboBox.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupThemeComboBoxBox MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; + if (_ribbonThemeComboBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the combobox - items.Remove(_ribbonThemeComboBox); - items.Insert(0, _ribbonThemeComboBox); - UpdateVerbStatus(); + // Move position of the combobox + items.Remove(_ribbonThemeComboBox); + items.Insert(0, _ribbonThemeComboBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -254,31 +258,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupThemeComboBox MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; + if (_ribbonThemeComboBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the combotextbox - var index = items.IndexOf(_ribbonThemeComboBox) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonThemeComboBox); - items.Insert(index, _ribbonThemeComboBox); - UpdateVerbStatus(); + // Move position of the combotextbox + var index = items.IndexOf(_ribbonThemeComboBox) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonThemeComboBox); + items.Insert(index, _ribbonThemeComboBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -288,31 +295,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupThemeComboBox MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; + if (_ribbonThemeComboBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the combobox - var index = items.IndexOf(_ribbonThemeComboBox) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonThemeComboBox); - items.Insert(index, _ribbonThemeComboBox); - UpdateVerbStatus(); + // Move position of the combobox + var index = items.IndexOf(_ribbonThemeComboBox) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonThemeComboBox); + items.Insert(index, _ribbonThemeComboBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -322,29 +332,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupThemeComboBox MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; + if (_ribbonThemeComboBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the combobox - items.Remove(_ribbonThemeComboBox); - items.Insert(items.Count, _ribbonThemeComboBox); - UpdateVerbStatus(); + // Move position of the combobox + items.Remove(_ribbonThemeComboBox); + items.Insert(items.Count, _ribbonThemeComboBox); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -354,32 +367,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteThemeComboBox(object sender, EventArgs e) + private void OnDeleteThemeComboBox(object? sender, EventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupThemeComboBox DeleteThemeComboBox"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; + if (_ribbonThemeComboBox.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonThemeComboBox.RibbonContainer)[@"Items"]; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the combobox from the group - items.Remove(_ribbonThemeComboBox); + // Remove the combobox from the group + items.Remove(_ribbonThemeComboBox); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonThemeComboBox); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonThemeComboBox); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -389,35 +405,35 @@ private void OnDeleteThemeComboBox(object sender, EventArgs e) } } - private void OnEnabled(object sender, EventArgs e) + private void OnEnabled(object? sender, EventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonThemeComboBox)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonThemeComboBox); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonThemeComboBox)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonThemeComboBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonThemeComboBox, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonThemeComboBox, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonThemeComboBox)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonThemeComboBox); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonThemeComboBox)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonThemeComboBox); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonThemeComboBox, null, oldValue, newValue); propertyVisible.SetValue(_ribbonThemeComboBox, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonThemeComboBox.Ribbon != null) + if (_ribbonThemeComboBox.Ribbon is not null) { // Create the menu strip the first time around if (_cms == null) @@ -463,7 +479,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonThemeComboBox.RibbonContainer) + switch (_ribbonThemeComboBox!.RibbonContainer!) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -472,6 +488,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonThemeComboBox!.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTrackBarDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTrackBarDesigner.cs index 877ded90a..41fe14f0a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTrackBarDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTrackBarDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -60,8 +60,9 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonTrackBar = component as KryptonRibbonGroupTrackBar; - if (_ribbonTrackBar != null) + _ribbonTrackBar = component as KryptonRibbonGroupTrackBar ?? throw new ArgumentNullException(nameof(component)); + + if (_ribbonTrackBar is not null && _ribbonTrackBar.TrackBar is not null) { _ribbonTrackBar.TrackBarDesigner = this; @@ -81,8 +82,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentChanged += OnComponentChanged; @@ -152,12 +153,12 @@ protected override void PreFilterProperties(IDictionary properties) // Setup the array of properties we override var attributes = Array.Empty(); - string[] strArray = { nameof(Visible), nameof(Enabled) }; + string[] strArray = [nameof(Visible), nameof(Enabled)]; // Adjust our list of properties for (var i = 0; i < strArray.Length; i++) { - var descrip = (PropertyDescriptor)properties[strArray[i]]; + var descrip = (PropertyDescriptor?)properties[strArray[i]]; if (descrip != null) { properties[strArray[i]] = TypeDescriptor.CreateProperty(typeof(KryptonRibbonGroupTrackBarDesigner), descrip, attributes); @@ -185,9 +186,9 @@ protected override void PreFilterProperties(IDictionary properties) private void UpdateVerbStatus() { // Create verbs first time around - if (_verbs == null) + if (_verbs is null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move TrackBar First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move TrackBar Previous", OnMovePrevious); @@ -205,7 +206,7 @@ private void UpdateVerbStatus() if (_ribbonTrackBar.Ribbon != null) { - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); moveFirst = items.IndexOf(_ribbonTrackBar) > 0; movePrev = items.IndexOf(_ribbonTrackBar) > 0; moveNext = items.IndexOf(_ribbonTrackBar) < (items.Count - 1); @@ -218,7 +219,7 @@ private void UpdateVerbStatus() _moveLastVerb.Enabled = moveLast; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonTrackBar.Ribbon != null) @@ -227,29 +228,32 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTrackBar MoveFirst"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; + if (_ribbonTrackBar.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the trackbar - items.Remove(_ribbonTrackBar); - items.Insert(0, _ribbonTrackBar); - UpdateVerbStatus(); + // Move position of the trackbar + items.Remove(_ribbonTrackBar); + items.Insert(0, _ribbonTrackBar); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -259,31 +263,34 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTrackBar MovePrevious"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the trackbar - var index = items.IndexOf(_ribbonTrackBar) - 1; - index = Math.Max(index, 0); - items.Remove(_ribbonTrackBar); - items.Insert(index, _ribbonTrackBar); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonTrackBar.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the trackbar + var index = items.IndexOf(_ribbonTrackBar) - 1; + index = Math.Max(index, 0); + items.Remove(_ribbonTrackBar); + items.Insert(index, _ribbonTrackBar); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -293,31 +300,34 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTrackBar MoveNext"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; - - RaiseComponentChanging(propertyItems); - - // Move position of the trackbar - var index = items.IndexOf(_ribbonTrackBar) + 1; - index = Math.Min(index, items.Count - 1); - items.Remove(_ribbonTrackBar); - items.Insert(index, _ribbonTrackBar); - UpdateVerbStatus(); - - RaiseComponentChanged(propertyItems, null, null); + if (_ribbonTrackBar.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; + + RaiseComponentChanging(propertyItems); + + // Move position of the trackbar + var index = items.IndexOf(_ribbonTrackBar) + 1; + index = Math.Min(index, items.Count - 1); + items.Remove(_ribbonTrackBar); + items.Insert(index, _ribbonTrackBar); + UpdateVerbStatus(); + + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -327,29 +337,32 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTrackBar MoveLast"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; + if (_ribbonTrackBar.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Move position of the trackbar - items.Remove(_ribbonTrackBar); - items.Insert(items.Count, _ribbonTrackBar); - UpdateVerbStatus(); + // Move position of the trackbar + items.Remove(_ribbonTrackBar); + items.Insert(items.Count, _ribbonTrackBar); + UpdateVerbStatus(); - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -359,32 +372,35 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnDeleteTrackBar(object sender, EventArgs e) + private void OnDeleteTrackBar(object? sender, EventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { // Get access to the parent collection of items - var items = ParentItems; + var items = ParentItems ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("items")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTrackBar DeleteTrackBar"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; + if (_ribbonTrackBar.RibbonContainer is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTrackBar.RibbonContainer)[@"Items"]; - RaiseComponentChanging(null); - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(null); + RaiseComponentChanging(propertyItems); - // Remove the trackbar from the group - items.Remove(_ribbonTrackBar); + // Remove the trackbar from the group + items.Remove(_ribbonTrackBar); - // Get designer to destroy it - _designerHost.DestroyComponent(_ribbonTrackBar); + // Get designer to destroy it + _designerHost.DestroyComponent(_ribbonTrackBar); - RaiseComponentChanged(propertyItems, null, null); - RaiseComponentChanged(null, null, null); + RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(null, null, null); + } } finally { @@ -396,33 +412,33 @@ private void OnDeleteTrackBar(object sender, EventArgs e) private void OnEnabled(object sender, EventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { - PropertyDescriptor propertyEnabled = TypeDescriptor.GetProperties(_ribbonTrackBar)[nameof(Enabled)]; - var oldValue = (bool)propertyEnabled.GetValue(_ribbonTrackBar); + PropertyDescriptor? propertyEnabled = TypeDescriptor.GetProperties(_ribbonTrackBar)[nameof(Enabled)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyEnabled")); + var oldValue = (bool?)propertyEnabled.GetValue(_ribbonTrackBar); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonTrackBar, null, oldValue, newValue); propertyEnabled.SetValue(_ribbonTrackBar, newValue); } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { - PropertyDescriptor propertyVisible = TypeDescriptor.GetProperties(_ribbonTrackBar)[nameof(Visible)]; - var oldValue = (bool)propertyVisible.GetValue(_ribbonTrackBar); + PropertyDescriptor? propertyVisible = TypeDescriptor.GetProperties(_ribbonTrackBar)[nameof(Visible)] ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("propertyVisible")); + var oldValue = (bool?)propertyVisible.GetValue(_ribbonTrackBar); var newValue = !oldValue; _changeService.OnComponentChanged(_ribbonTrackBar, null, oldValue, newValue); propertyVisible.SetValue(_ribbonTrackBar, newValue); } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if (_ribbonTrackBar.Ribbon != null) + if (_ribbonTrackBar.Ribbon is not null) { // Create the menu strip the first time around if (_cms == null) @@ -465,7 +481,7 @@ private TypedRestrictCollection? ParentItems { get { - switch (_ribbonTrackBar.RibbonContainer) + switch (_ribbonTrackBar.RibbonContainer!) { case KryptonRibbonGroupTriple triple: return triple.Items; @@ -474,6 +490,7 @@ private TypedRestrictCollection? ParentItems default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_ribbonTrackBar.RibbonContainer!.ToString()); return null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTripleDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTripleDesigner.cs index d9a134892..cf5fd4ec6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTripleDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonGroupTripleDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -98,7 +98,7 @@ public override void Initialize([DisallowNull] IComponent component) Debug.Assert(component != null); // Cast to correct type - _ribbonTriple = component as KryptonRibbonGroupTriple; + _ribbonTriple = component as KryptonRibbonGroupTriple ?? throw new ArgumentNullException(nameof(component)); if (_ribbonTriple != null) { _ribbonTriple.DesignTimeAddButton += OnAddButton; @@ -120,8 +120,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentRemoving += OnComponentRemoving; @@ -136,7 +136,12 @@ public override ICollection AssociatedComponents get { var compound = new ArrayList(base.AssociatedComponents); - compound.AddRange(_ribbonTriple.Items); + + if (_ribbonTriple.Items is not null) + { + compound.AddRange(_ribbonTriple.Items); + } + return compound; } } @@ -149,7 +154,7 @@ public override DesignerVerbCollection Verbs get { UpdateVerbStatus(); - return _verbs; + return _verbs!; } } #endregion @@ -198,9 +203,9 @@ protected override void Dispose(bool disposing) private void UpdateVerbStatus() { // Create verbs first time around - if (_verbs == null) + if (_verbs is null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move Triple First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Triple Previous", OnMovePrevious); @@ -252,7 +257,9 @@ private void UpdateVerbStatus() var add = false; var clearItems = false; - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) + && _ribbonTriple.Items is not null + && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { moveFirst = _ribbonTriple.RibbonGroup.Items.IndexOf(_ribbonTriple) > 0; movePrev = _ribbonTriple.RibbonGroup.Items.IndexOf(_ribbonTriple) > 0; @@ -284,18 +291,18 @@ private void UpdateVerbStatus() _clearItemsVerb.Enabled = clearItems; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode - if (_ribbonTriple.Ribbon != null) + if (_ribbonTriple.Ribbon is not null) { _ribbonTriple.Ribbon.InDesignHelperMode = !_ribbonTriple.Ribbon.InDesignHelperMode; } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple MoveFirst"); @@ -303,7 +310,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -323,9 +330,9 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple MovePrevious"); @@ -333,7 +340,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -355,9 +362,9 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple MoveNext"); @@ -365,7 +372,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -387,9 +394,9 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple MoveLast"); @@ -397,7 +404,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; RaiseComponentChanging(propertyItems); @@ -417,9 +424,9 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnAddButton(object sender, EventArgs e) + private void OnAddButton(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddButton"); @@ -427,13 +434,13 @@ private void OnAddButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a button item var button = (KryptonRibbonGroupButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupButton)); - _ribbonTriple.Items.Add(button); + _ribbonTriple.Items!.Add(button); RaiseComponentChanged(propertyItems, null, null); } @@ -445,9 +452,9 @@ private void OnAddButton(object sender, EventArgs e) } } - private void OnAddColorButton(object sender, EventArgs e) + private void OnAddColorButton(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddColorButton"); @@ -455,13 +462,13 @@ private void OnAddColorButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a button item var button = (KryptonRibbonGroupColorButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupColorButton)); - _ribbonTriple.Items.Add(button); + _ribbonTriple.Items!.Add(button); RaiseComponentChanged(propertyItems, null, null); } @@ -473,9 +480,9 @@ private void OnAddColorButton(object sender, EventArgs e) } } - private void OnAddCheckBox(object sender, EventArgs e) + private void OnAddCheckBox(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddCheckBox"); @@ -483,13 +490,13 @@ private void OnAddCheckBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a check box item. var checkBox = (KryptonRibbonGroupCheckBox)_designerHost.CreateComponent(typeof(KryptonRibbonGroupCheckBox)); - _ribbonTriple.Items.Add(checkBox); + _ribbonTriple.Items!.Add(checkBox); RaiseComponentChanged(propertyItems, null, null); } @@ -501,9 +508,9 @@ private void OnAddCheckBox(object sender, EventArgs e) } } - private void OnAddRadioButton(object sender, EventArgs e) + private void OnAddRadioButton(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddRadioButton"); @@ -511,13 +518,13 @@ private void OnAddRadioButton(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a radio button item. var radioButton = (KryptonRibbonGroupRadioButton)_designerHost.CreateComponent(typeof(KryptonRibbonGroupRadioButton)); - _ribbonTriple.Items.Add(radioButton); + _ribbonTriple.Items!.Add(radioButton); RaiseComponentChanged(propertyItems, null, null); } @@ -529,9 +536,9 @@ private void OnAddRadioButton(object sender, EventArgs e) } } - private void OnAddLabel(object sender, EventArgs e) + private void OnAddLabel(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddLabel"); @@ -539,13 +546,13 @@ private void OnAddLabel(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a label item var label = (KryptonRibbonGroupLabel)_designerHost.CreateComponent(typeof(KryptonRibbonGroupLabel)); - _ribbonTriple.Items.Add(label); + _ribbonTriple.Items!.Add(label); RaiseComponentChanged(propertyItems, null, null); } @@ -557,7 +564,7 @@ private void OnAddLabel(object sender, EventArgs e) } } - private void OnAddCustomControl(object sender, EventArgs e) + private void OnAddCustomControl(object? sender, EventArgs e) { if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { @@ -567,13 +574,13 @@ private void OnAddCustomControl(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a custom control item var cc = (KryptonRibbonGroupCustomControl)_designerHost.CreateComponent(typeof(KryptonRibbonGroupCustomControl)); - _ribbonTriple.Items.Add(cc); + _ribbonTriple.Items!.Add(cc); RaiseComponentChanged(propertyItems, null, null); } @@ -585,9 +592,9 @@ private void OnAddCustomControl(object sender, EventArgs e) } } - private void OnAddTextBox(object sender, EventArgs e) + private void OnAddTextBox(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddTextBox"); @@ -595,13 +602,13 @@ private void OnAddTextBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a textbox item var tb = (KryptonRibbonGroupTextBox)_designerHost.CreateComponent(typeof(KryptonRibbonGroupTextBox)); - _ribbonTriple.Items.Add(tb); + _ribbonTriple.Items!.Add(tb); RaiseComponentChanged(propertyItems, null, null); } @@ -613,9 +620,9 @@ private void OnAddTextBox(object sender, EventArgs e) } } - private void OnAddTrackBar(object sender, EventArgs e) + private void OnAddTrackBar(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddTrackBar"); @@ -623,13 +630,13 @@ private void OnAddTrackBar(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a trackbar item var tb = (KryptonRibbonGroupTrackBar)_designerHost.CreateComponent(typeof(KryptonRibbonGroupTrackBar)); - _ribbonTriple.Items.Add(tb); + _ribbonTriple.Items!.Add(tb); RaiseComponentChanged(propertyItems, null, null); } @@ -641,9 +648,9 @@ private void OnAddTrackBar(object sender, EventArgs e) } } - private void OnAddThemeComboBox(object sender, EventArgs e) + private void OnAddThemeComboBox(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddThemeComboBox"); @@ -651,13 +658,13 @@ private void OnAddThemeComboBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a themecombobox item var tcb = (KryptonRibbonGroupThemeComboBox)_designerHost.CreateComponent(typeof(KryptonRibbonGroupThemeComboBox)); - _ribbonTriple.Items.Add(tcb); + _ribbonTriple.Items!.Add(tcb); RaiseComponentChanged(propertyItems, null, null); } @@ -669,9 +676,9 @@ private void OnAddThemeComboBox(object sender, EventArgs e) } } - private void OnAddMaskedTextBox(object sender, EventArgs e) + private void OnAddMaskedTextBox(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddMaskedTextBox"); @@ -679,13 +686,13 @@ private void OnAddMaskedTextBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a textbox item var mtb = (KryptonRibbonGroupMaskedTextBox)_designerHost.CreateComponent(typeof(KryptonRibbonGroupMaskedTextBox)); - _ribbonTriple.Items.Add(mtb); + _ribbonTriple.Items!.Add(mtb); RaiseComponentChanged(propertyItems, null, null); } @@ -697,9 +704,9 @@ private void OnAddMaskedTextBox(object sender, EventArgs e) } } - private void OnAddRichTextBox(object sender, EventArgs e) + private void OnAddRichTextBox(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddRichTextBox"); @@ -707,13 +714,13 @@ private void OnAddRichTextBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a richtextbox item var rtb = (KryptonRibbonGroupRichTextBox)_designerHost.CreateComponent(typeof(KryptonRibbonGroupRichTextBox)); - _ribbonTriple.Items.Add(rtb); + _ribbonTriple.Items!.Add(rtb); RaiseComponentChanged(propertyItems, null, null); } @@ -725,9 +732,9 @@ private void OnAddRichTextBox(object sender, EventArgs e) } } - private void OnAddComboBox(object sender, EventArgs e) + private void OnAddComboBox(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddComboBox"); @@ -735,13 +742,13 @@ private void OnAddComboBox(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a combobox item var cc = (KryptonRibbonGroupComboBox)_designerHost.CreateComponent(typeof(KryptonRibbonGroupComboBox)); - _ribbonTriple.Items.Add(cc); + _ribbonTriple.Items!.Add(cc); RaiseComponentChanged(propertyItems, null, null); } @@ -753,9 +760,9 @@ private void OnAddComboBox(object sender, EventArgs e) } } - private void OnAddNumericUpDown(object sender, EventArgs e) + private void OnAddNumericUpDown(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddNumericUpDown"); @@ -763,13 +770,13 @@ private void OnAddNumericUpDown(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a numeric up-down item var cc = (KryptonRibbonGroupNumericUpDown)_designerHost.CreateComponent(typeof(KryptonRibbonGroupNumericUpDown)); - _ribbonTriple.Items.Add(cc); + _ribbonTriple.Items!.Add(cc); RaiseComponentChanged(propertyItems, null, null); } @@ -781,9 +788,9 @@ private void OnAddNumericUpDown(object sender, EventArgs e) } } - private void OnAddDomainUpDown(object sender, EventArgs e) + private void OnAddDomainUpDown(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddDomainUpDown"); @@ -791,13 +798,13 @@ private void OnAddDomainUpDown(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a domain up-down item var cc = (KryptonRibbonGroupDomainUpDown)_designerHost.CreateComponent(typeof(KryptonRibbonGroupDomainUpDown)); - _ribbonTriple.Items.Add(cc); + _ribbonTriple.Items!.Add(cc); RaiseComponentChanged(propertyItems, null, null); } @@ -809,9 +816,9 @@ private void OnAddDomainUpDown(object sender, EventArgs e) } } - private void OnAddDateTimePicker(object sender, EventArgs e) + private void OnAddDateTimePicker(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple AddDateTimePicker"); @@ -819,13 +826,13 @@ private void OnAddDateTimePicker(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; RaiseComponentChanging(propertyItems); // Get designer to create a domain up-down item var cc = (KryptonRibbonGroupDateTimePicker)_designerHost.CreateComponent(typeof(KryptonRibbonGroupDateTimePicker)); - _ribbonTriple.Items.Add(cc); + _ribbonTriple.Items!.Add(cc); RaiseComponentChanged(propertyItems, null, null); } @@ -837,32 +844,35 @@ private void OnAddDateTimePicker(object sender, EventArgs e) } } - private void OnClearItems(object sender, EventArgs e) + private void OnClearItems(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple ClearItems"); try { - // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; + if (_ribbonTriple.Items is not null) + { + // Get access to the Items property + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple)[@"Items"]; - RaiseComponentChanging(propertyItems); + RaiseComponentChanging(propertyItems); - // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + // Need access to host in order to delete a component + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); - // We need to remove all the items from the triple group - for (var i = _ribbonTriple.Items.Count - 1; i >= 0; i--) - { - KryptonRibbonGroupItem item = _ribbonTriple.Items[i]; - _ribbonTriple.Items.Remove(item); - host.DestroyComponent(item); - } + // We need to remove all the items from the triple group + for (var i = _ribbonTriple.Items.Count - 1 ; i >= 0 ; i--) + { + KryptonRibbonGroupItem item = _ribbonTriple.Items[i]; + _ribbonTriple.Items.Remove(item); + host.DestroyComponent(item); + } - RaiseComponentChanged(propertyItems, null, null); + RaiseComponentChanged(propertyItems, null, null); + } } finally { @@ -872,9 +882,9 @@ private void OnClearItems(object sender, EventArgs e) } } - private void OnDeleteTriple(object sender, EventArgs e) + private void OnDeleteTriple(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple DeleteTriple"); @@ -882,7 +892,7 @@ private void OnDeleteTriple(object sender, EventArgs e) try { // Get access to the Items property - MemberDescriptor propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; + MemberDescriptor? propertyItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; // Remove the ribbon group from the ribbon tab RaiseComponentChanging(null); @@ -905,61 +915,61 @@ private void OnDeleteTriple(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { _changeService.OnComponentChanged(_ribbonTriple, null, _ribbonTriple.Visible, !_ribbonTriple.Visible); _ribbonTriple.Visible = !_ribbonTriple.Visible; } } - private void OnMaxLarge(object sender, EventArgs e) + private void OnMaxLarge(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { _changeService.OnComponentChanged(_ribbonTriple, null, _ribbonTriple.MaximumSize, GroupItemSize.Large); _ribbonTriple.MaximumSize = GroupItemSize.Large; } } - private void OnMaxMedium(object sender, EventArgs e) + private void OnMaxMedium(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { _changeService.OnComponentChanged(_ribbonTriple, null, _ribbonTriple.MaximumSize, GroupItemSize.Medium); _ribbonTriple.MaximumSize = GroupItemSize.Medium; } } - private void OnMaxSmall(object sender, EventArgs e) + private void OnMaxSmall(object? sender, EventArgs e) { - if ((_ribbonTriple?.Ribbon != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { _changeService.OnComponentChanged(_ribbonTriple, null, _ribbonTriple.MaximumSize, GroupItemSize.Small); _ribbonTriple.MaximumSize = GroupItemSize.Small; } } - private void OnMinLarge(object sender, EventArgs e) + private void OnMinLarge(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { _changeService.OnComponentChanged(_ribbonTriple, null, _ribbonTriple.MinimumSize, GroupItemSize.Large); _ribbonTriple.MinimumSize = GroupItemSize.Large; } } - private void OnMinMedium(object sender, EventArgs e) + private void OnMinMedium(object? sender, EventArgs e) { - if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) + if ((_ribbonTriple.RibbonGroup is not null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { _changeService.OnComponentChanged(_ribbonTriple, null, _ribbonTriple.MinimumSize, GroupItemSize.Medium); _ribbonTriple.MinimumSize = GroupItemSize.Medium; } } - private void OnMinSmall(object sender, EventArgs e) + private void OnMinSmall(object? sender, EventArgs e) { if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { @@ -968,15 +978,15 @@ private void OnMinSmall(object sender, EventArgs e) } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our triple is being removed - if (e.Component == _ribbonTriple) + if (e.Component == _ribbonTriple && _ribbonTriple.Items is not null) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all items from the triple group for (var j = _ribbonTriple.Items.Count - 1; j >= 0; j--) @@ -988,7 +998,7 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) } } - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { @@ -1081,7 +1091,7 @@ private void OnContextMenu(object sender, MouseEventArgs e) UpdateMoveToGroup(); // Update menu items state from verb - _toggleHelpersMenu.Checked = _ribbonTriple.Ribbon.InDesignHelperMode; + _toggleHelpersMenu.Checked = _ribbonTriple.Ribbon!.InDesignHelperMode; _visibleMenu.Checked = _ribbonTriple.Visible; _maximumLMenu.Checked = _ribbonTriple.MaximumSize == GroupItemSize.Large; _maximumMMenu.Checked = _ribbonTriple.MaximumSize == GroupItemSize.Medium; @@ -1125,7 +1135,7 @@ private void UpdateMoveToGroup() // Remove any existing child items _moveToGroupMenu.DropDownItems.Clear(); - if (_ribbonTriple.Ribbon != null) + if (_ribbonTriple.Ribbon is not null && _ribbonTriple.RibbonTab is not null) { // Create a new item per group in the same ribbon tab foreach (KryptonRibbonGroup group in _ribbonTriple.RibbonTab.Groups) @@ -1150,15 +1160,15 @@ private void UpdateMoveToGroup() } } - private void OnMoveToGroup(object sender, EventArgs e) + private void OnMoveToGroup(object? sender, EventArgs e) { if ((_ribbonTriple.RibbonGroup != null) && _ribbonTriple.RibbonGroup.Items.Contains(_ribbonTriple)) { // Cast to correct type - var groupMenuItem = (ToolStripMenuItem)sender; + var groupMenuItem = sender as ToolStripMenuItem ?? throw new ArgumentNullException(nameof(sender)); // Get access to the destination tab - var destination = (KryptonRibbonGroup)groupMenuItem.Tag; + var destination = groupMenuItem.Tag as KryptonRibbonGroup ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("destination")); // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonGroupTriple MoveTripleToGroup"); @@ -1166,8 +1176,8 @@ private void OnMoveToGroup(object sender, EventArgs e) try { // Get access to the Groups property - MemberDescriptor oldItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; - MemberDescriptor newItems = TypeDescriptor.GetProperties(destination)[@"Items"]; + MemberDescriptor? oldItems = TypeDescriptor.GetProperties(_ribbonTriple.RibbonGroup)[@"Items"]; + MemberDescriptor? newItems = TypeDescriptor.GetProperties(destination)[@"Items"]; // Remove the ribbon tab from the ribbon RaiseComponentChanging(null); diff --git a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonTabDesigner.cs b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonTabDesigner.cs index 3d8374e9d..7b9eccb9f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonTabDesigner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Designers/Designers/KryptonRibbonTabDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -69,8 +69,8 @@ public override void Initialize([DisallowNull] IComponent component) } // Get access to the services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _designerHost = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_designerHost))); + _changeService = (IComponentChangeService?)GetService(typeof(IComponentChangeService)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_changeService))); // We need to know when we are being removed/changed _changeService.ComponentRemoving += OnComponentRemoving; @@ -85,7 +85,12 @@ public override ICollection AssociatedComponents get { var compound = new ArrayList(base.AssociatedComponents); - compound.AddRange(_ribbonTab.Groups); + + if (_ribbonTab is not null) + { + compound.AddRange(_ribbonTab.Groups); + } + return compound; } } @@ -98,7 +103,7 @@ public override DesignerVerbCollection Verbs get { UpdateVerbStatus(); - return _verbs; + return _verbs!; } } #endregion @@ -122,8 +127,12 @@ protected override void Dispose(bool disposing) } // Unhook from events - _ribbonTab.DesignTimeAddGroup -= OnAddGroup; - _ribbonTab.DesignTimeContextMenu -= OnContextMenu; + if (_ribbonTab is not null) + { + _ribbonTab.DesignTimeAddGroup -= OnAddGroup; + _ribbonTab.DesignTimeContextMenu -= OnContextMenu; + } + _changeService.ComponentRemoving -= OnComponentRemoving; _changeService.ComponentChanged -= OnComponentChanged; } @@ -140,9 +149,9 @@ protected override void Dispose(bool disposing) private void UpdateVerbStatus() { // Create verbs first time around - if (_verbs == null) + if (_verbs is null) { - _verbs = new DesignerVerbCollection(); + _verbs = []; _toggleHelpersVerb = new DesignerVerb(@"Toggle Helpers", OnToggleHelpers); _moveFirstVerb = new DesignerVerb(@"Move First", OnMoveFirst); _movePrevVerb = new DesignerVerb(@"Move Previous", OnMovePrevious); @@ -160,7 +169,7 @@ private void UpdateVerbStatus() var moveLast = false; var clearGroups = false; - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab?.Ribbon is not null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { moveFirst = _ribbonTab.Ribbon.RibbonTabs.IndexOf(_ribbonTab) > 0; movePrev = _ribbonTab.Ribbon.RibbonTabs.IndexOf(_ribbonTab) > 0; @@ -176,7 +185,7 @@ private void UpdateVerbStatus() _clearGroupsVerb.Enabled = clearGroups; } - private void OnToggleHelpers(object sender, EventArgs e) + private void OnToggleHelpers(object? sender, EventArgs e) { // Invert the current toggle helper mode if (_ribbonTab?.Ribbon != null) @@ -185,7 +194,7 @@ private void OnToggleHelpers(object sender, EventArgs e) } } - private void OnMoveFirst(object sender, EventArgs e) + private void OnMoveFirst(object? sender, EventArgs e) { if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { @@ -195,7 +204,7 @@ private void OnMoveFirst(object sender, EventArgs e) try { // Get access to the RibbonTabs property - MemberDescriptor propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; + MemberDescriptor? propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; RaiseComponentChanging(propertyTabs); @@ -216,9 +225,11 @@ private void OnMoveFirst(object sender, EventArgs e) } } - private void OnMovePrevious(object sender, EventArgs e) + private void OnMovePrevious(object? sender, EventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonTab MoveNext"); @@ -226,7 +237,7 @@ private void OnMovePrevious(object sender, EventArgs e) try { // Get access to the RibbonTabs property - MemberDescriptor propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; + MemberDescriptor? propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; RaiseComponentChanging(propertyTabs); @@ -249,9 +260,12 @@ private void OnMovePrevious(object sender, EventArgs e) } } - private void OnMoveNext(object sender, EventArgs e) + private void OnMoveNext(object? sender, EventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonTab MovePrevious"); @@ -259,7 +273,7 @@ private void OnMoveNext(object sender, EventArgs e) try { // Get access to the RibbonTabs property - MemberDescriptor propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; + MemberDescriptor? propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; RaiseComponentChanging(propertyTabs); @@ -282,9 +296,11 @@ private void OnMoveNext(object sender, EventArgs e) } } - private void OnMoveLast(object sender, EventArgs e) + private void OnMoveLast(object? sender, EventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonTab MoveLast"); @@ -292,7 +308,7 @@ private void OnMoveLast(object sender, EventArgs e) try { // Get access to the RibbonTabs property - MemberDescriptor propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; + MemberDescriptor? propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; RaiseComponentChanging(propertyTabs); @@ -313,9 +329,11 @@ private void OnMoveLast(object sender, EventArgs e) } } - private void OnAddGroup(object sender, EventArgs e) + private void OnAddGroup(object? sender, EventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonTab AddGroup"); @@ -323,7 +341,7 @@ private void OnAddGroup(object sender, EventArgs e) try { // Get access to the Groups property - MemberDescriptor propertyGroups = TypeDescriptor.GetProperties(_ribbonTab)[@"Groups"]; + MemberDescriptor? propertyGroups = TypeDescriptor.GetProperties(_ribbonTab)[@"Groups"]; RaiseComponentChanging(propertyGroups); @@ -341,9 +359,11 @@ private void OnAddGroup(object sender, EventArgs e) } } - private void OnClearGroups(object sender, EventArgs e) + private void OnClearGroups(object? sender, EventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonTab ClearGroups"); @@ -351,12 +371,12 @@ private void OnClearGroups(object sender, EventArgs e) try { // Get access to the Groups property - MemberDescriptor propertyGroups = TypeDescriptor.GetProperties(_ribbonTab)[@"Groups"]; + MemberDescriptor? propertyGroups = TypeDescriptor.GetProperties(_ribbonTab)[@"Groups"]; RaiseComponentChanging(propertyGroups); // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the groups from the tab for (var i = _ribbonTab.Groups.Count - 1; i >= 0; i--) @@ -376,9 +396,11 @@ private void OnClearGroups(object sender, EventArgs e) } } - private void OnDeleteTab(object sender, EventArgs e) + private void OnDeleteTab(object? sender, EventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { // Use a transaction to support undo/redo actions DesignerTransaction transaction = _designerHost.CreateTransaction(@"KryptonRibbonTab DeleteTab"); @@ -386,7 +408,7 @@ private void OnDeleteTab(object sender, EventArgs e) try { // Get access to the RibbonTabs property - MemberDescriptor propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; + MemberDescriptor? propertyTabs = TypeDescriptor.GetProperties(_ribbonTab.Ribbon)[@"RibbonTabs"]; // Remove the ribbon tab from the ribbon RaiseComponentChanging(null); @@ -409,24 +431,26 @@ private void OnDeleteTab(object sender, EventArgs e) } } - private void OnVisible(object sender, EventArgs e) + private void OnVisible(object? sender, EventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { _changeService.OnComponentChanged(_ribbonTab, null, _ribbonTab.Visible, !_ribbonTab.Visible); _ribbonTab.Visible = !_ribbonTab.Visible; } } - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our tab is being removed - if (e.Component == _ribbonTab) + if ( _ribbonTab is not null && e.Component == _ribbonTab) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = (IDesignerHost?)GetService(typeof(IDesignerHost)) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("host")); // We need to remove all the groups from the tab for (var i = _ribbonTab.Groups.Count - 1; i >= 0; i--) @@ -438,12 +462,14 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) } } - private void OnContextMenu(object sender, MouseEventArgs e) + private void OnContextMenu(object? sender, MouseEventArgs e) { - if ((_ribbonTab?.Ribbon != null) && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) + if ((_ribbonTab is not null) + && _ribbonTab.Ribbon != null + && _ribbonTab.Ribbon.RibbonTabs.Contains(_ribbonTab)) { // Create the menu strip the first time around - if (_cms == null) + if (_cms is null) { _cms = new ContextMenuStrip(); _toggleHelpersMenu = new ToolStripMenuItem("Design Helpers", null, OnToggleHelpers); diff --git a/Source/Krypton Components/Krypton.Ribbon/EventArgs/GalleryDropMenuEventArgs.cs b/Source/Krypton Components/Krypton.Ribbon/EventArgs/GalleryDropMenuEventArgs.cs index 2022ec8fa..58b728710 100644 --- a/Source/Krypton Components/Krypton.Ribbon/EventArgs/GalleryDropMenuEventArgs.cs +++ b/Source/Krypton Components/Krypton.Ribbon/EventArgs/GalleryDropMenuEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/General/AppButtonMenuProvider.cs b/Source/Krypton Components/Krypton.Ribbon/General/AppButtonMenuProvider.cs index 8c5ada840..1bd8cd1ab 100644 --- a/Source/Krypton Components/Krypton.Ribbon/General/AppButtonMenuProvider.cs +++ b/Source/Krypton Components/Krypton.Ribbon/General/AppButtonMenuProvider.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -60,7 +60,7 @@ public AppButtonMenuProvider(ViewContextMenuManager viewManager, ViewLayoutStack viewColumns, PaletteBase? palette, PaletteMode paletteMode, - PaletteRedirect? redirector, + PaletteRedirect redirector, NeedPaintHandler needPaintDelegate) { // Store incoming state @@ -166,7 +166,7 @@ public Rectangle ProviderShowSubMenuFixedRect(KryptonContextMenuItem menuItem) { if (ProviderShowSubMenuFixed(menuItem)) { - Rectangle screenRect = FixedViewBase.OwningControl.RectangleToScreen(FixedViewBase.ClientRectangle); + Rectangle screenRect = FixedViewBase.OwningControl!.RectangleToScreen(FixedViewBase.ClientRectangle); screenRect.Y++; screenRect.Width -= 3; screenRect.Height -= 4; @@ -261,7 +261,7 @@ public ToolStripDropDownCloseReason? ProviderCloseReason /// /// Gets access to the context menu redirector. /// - public PaletteRedirect? ProviderRedirector { get; } + public PaletteRedirect ProviderRedirector { get; } /// /// Gets a delegate used to indicate a repaint is required. diff --git a/Source/Krypton Components/Krypton.Ribbon/General/CalculatedValues.cs b/Source/Krypton Components/Krypton.Ribbon/General/CalculatedValues.cs index 17a570a60..cc0692df5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/General/CalculatedValues.cs +++ b/Source/Krypton Components/Krypton.Ribbon/General/CalculatedValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -49,10 +49,10 @@ internal class CalculatedValues /// Initialize a new instance of the CalculatedValues class. /// /// Source control instance. - public CalculatedValues([DisallowNull] KryptonRibbon ribbon) + public CalculatedValues([DisallowNull] KryptonRibbon? ribbon) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); _lastShape = PaletteRibbonShape.Inherit; } @@ -221,21 +221,27 @@ public Point KeyTipRectToPoint(Rectangle viewRect, int groupLine) case 1: screenPt = new Point(viewRect.Left + KEYTIP_HOFFSET, viewRect.Top); break; + case 2: screenPt = new Point(viewRect.Left + KEYTIP_HOFFSET, viewRect.Top + (viewRect.Height / 2) + KEYTIP_VOFFSET_LINE2); break; + case 3: screenPt = new Point(viewRect.Left + KEYTIP_HOFFSET, viewRect.Bottom); break; + case 4: screenPt = new Point(viewRect.Left + KEYTIP_HOFFSET, viewRect.Top - KEYTIP_VOFFSET_LINE4); break; + case 5: screenPt = new Point(viewRect.Left + KEYTIP_HOFFSET, viewRect.Bottom + KEYTIP_VOFFSET_LINE5); break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(groupLine.ToString()); screenPt = new Point(viewRect.X, viewRect.Y); break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs b/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs index a91b4dd14..d28f31463 100644 --- a/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs +++ b/Source/Krypton Components/Krypton.Ribbon/General/Definitions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -80,7 +80,7 @@ public interface IQuickAccessToolbarButton /// /// Gets the image for the item ToolTip. /// - Image GetToolTipImage(); + Image? GetToolTipImage(); /// /// Gets the color to draw as transparent in the ToolTipImage. @@ -169,8 +169,8 @@ public interface IRibbonGroupItem /// /// Return base objects tooltip /// - ToolTipValues ToolTipValues - { + ToolTipValues ToolTipValues + { // Return base objects tooltip get; } @@ -209,13 +209,13 @@ internal interface IRibbonViewGroupItemView /// Gets the first focus item from the item. /// /// ViewBase of item; otherwise false. - ViewBase? GetFirstFocusItem(); + ViewBase GetFirstFocusItem(); /// /// Gets the last focus item from the item. /// /// ViewBase of item; otherwise false. - ViewBase? GetLastFocusItem(); + ViewBase GetLastFocusItem(); /// /// Gets the next focus item based on the current item as provided. @@ -223,7 +223,7 @@ internal interface IRibbonViewGroupItemView /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - ViewBase? GetNextFocusItem(ViewBase current, ref bool matched); + ViewBase GetNextFocusItem(ViewBase current, ref bool matched); /// /// Gets the previous focus item based on the current item as provided. @@ -231,7 +231,7 @@ internal interface IRibbonViewGroupItemView /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched); + ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched); /// /// Gets the array of group level key tips. @@ -267,13 +267,13 @@ internal interface IRibbonViewGroupContainerView /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - ViewBase? GetFirstFocusItem(); + ViewBase GetFirstFocusItem(); /// /// Gets the last focus item from the container. /// /// ViewBase of item; otherwise false. - ViewBase? GetLastFocusItem(); + ViewBase GetLastFocusItem(); /// /// Gets the next focus item based on the current item as provided. @@ -281,7 +281,7 @@ internal interface IRibbonViewGroupContainerView /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - ViewBase? GetNextFocusItem(ViewBase current, ref bool matched); + ViewBase GetNextFocusItem(ViewBase current, ref bool matched); /// /// Gets the previous focus item based on the current item as provided. @@ -289,7 +289,7 @@ internal interface IRibbonViewGroupContainerView /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched); + ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched); /// /// Gets the array of group level key tips. @@ -313,7 +313,7 @@ internal interface IRibbonViewGroupSize /// Update the group with the provided sizing solution. /// /// Array of values for the group containers. - void SetSolutionSize(ItemSizeWidth[] size); + void SetSolutionSize(ItemSizeWidth[]? size); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/General/DesignTimeDraw.cs b/Source/Krypton Components/Krypton.Ribbon/General/DesignTimeDraw.cs index 3c891f069..58b906c6e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/General/DesignTimeDraw.cs +++ b/Source/Krypton Components/Krypton.Ribbon/General/DesignTimeDraw.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/General/ItemGroupSizeWidth.cs b/Source/Krypton Components/Krypton.Ribbon/General/ItemGroupSizeWidth.cs index 3f68a8859..25bd3af65 100644 --- a/Source/Krypton Components/Krypton.Ribbon/General/ItemGroupSizeWidth.cs +++ b/Source/Krypton Components/Krypton.Ribbon/General/ItemGroupSizeWidth.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -70,7 +70,7 @@ internal class GroupSizeWidth /// /// Width available for sizing a group. /// Sizing information for applying to group. - public GroupSizeWidth(int width, ItemSizeWidth[] sizing) + public GroupSizeWidth(int width, ItemSizeWidth[]? sizing) { Width = width; Sizing = sizing; @@ -86,7 +86,7 @@ public GroupSizeWidth(int width, ItemSizeWidth[] sizing) /// /// Gets and sets the array of sizing information for group. /// - public ItemSizeWidth[] Sizing { get; set; } + public ItemSizeWidth[]? Sizing { get; set; } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/General/KeyTipInfo.cs b/Source/Krypton Components/Krypton.Ribbon/General/KeyTipInfo.cs index 0b3df46ee..672b4c1a5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/General/KeyTipInfo.cs +++ b/Source/Krypton Components/Krypton.Ribbon/General/KeyTipInfo.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -14,7 +14,7 @@ namespace Krypton.Ribbon { - internal class KeyTipInfoList : List {} + internal class KeyTipInfoList : List; internal class KeyTipInfo { diff --git a/Source/Krypton Components/Krypton.Ribbon/Global/GlobalDeclarations.cs b/Source/Krypton Components/Krypton.Ribbon/Global/GlobalDeclarations.cs index c39dea128..2825d6e4b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Global/GlobalDeclarations.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Global/GlobalDeclarations.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. */ #endregion @@ -40,4 +40,7 @@ [assembly: Dependency(@"System.Drawing", LoadHint.Always)] [assembly: Dependency(@"System.Windows.Forms", LoadHint.Always)] [assembly: Dependency(@"Krypton.Toolkit", LoadHint.Always)] -[assembly: InternalsVisibleTo(@"Krypton.Toolkit, PublicKey=a87e673e9ecb6e8e", AllInternalsVisible = true)] + +// Public key value needs to be the full key. Before, this was the PublicKeyToken value. +// See: https://stackoverflow.com/questions/106880/internalsvisibleto-attribute-isnt-working/107958#107958 +[assembly: InternalsVisibleTo( "Krypton.Toolkit, PublicKey=00240000048000009400000006020000002400005253413100040000010001001f208b6887f7b4f8fad6c30b9eca9849f09cbfbd37901e222f8e888331622c907dfa686c56389c95966b86b33f0dd0ab4cca46b1f1ed92efd7d5ddee2e2274f485867202c581f68c32bd3278ab1188e978a53ea6851be2c14d87efe9ed78c71df95e1a7f7d6923b6703c00dc56b76fd582f945cd0c1951844ebe478a911fcab4", AllInternalsVisible = true)] diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs index a5dbaeb45..f8b412fd1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -529,7 +529,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -562,7 +562,7 @@ protected virtual void OnClick(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -618,7 +618,7 @@ protected virtual void OnDropDown(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -729,13 +729,16 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) case GroupButtonType.Check: PerformClick(); return true; + case GroupButtonType.DropDown: case GroupButtonType.Split: PerformDropDown(); return true; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(ButtonType.ToString()); break; } @@ -769,16 +772,18 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) #endregion #region Implementation - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { - var kcm = (KryptonContextMenu)sender; - kcm.Closed -= OnKryptonContextMenuClosed; - - // Fire any associated finish delegate - if (_kcmFinishDelegate != null) + if (sender is KryptonContextMenu kcm) { - _kcmFinishDelegate(this, e); - _kcmFinishDelegate = null; + kcm.Closed -= OnKryptonContextMenuClosed; + + // Fire any associated finish delegate + if (_kcmFinishDelegate != null) + { + _kcmFinishDelegate(this, e); + _kcmFinishDelegate = null; + } } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs index 17602cfcd..78c62fbb4 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -485,7 +485,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -513,7 +513,7 @@ protected virtual void OnClick(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { if (Enabled) { diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs index 52d9dda4a..92e7fc68c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCluster.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -74,7 +74,7 @@ public KryptonRibbonGroupCluster() _visible = true; // Create collection for holding triple items - Items = new KryptonRibbonGroupClusterCollection(); + Items = []; Items.Clearing += OnRibbonGroupClusterClearing; Items.Cleared += OnRibbonGroupClusterCleared; Items.Inserted += OnRibbonGroupClusterInserted; @@ -315,7 +315,7 @@ public override Component[] GetChildComponents() [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase ClusterView { get; set; } + public ViewBase? ClusterView { get; set; } #endregion @@ -350,7 +350,7 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) #endregion #region Private - private void OnRibbonGroupClusterClearing(object sender, EventArgs e) + private void OnRibbonGroupClusterClearing(object? sender, EventArgs e) { // Remove the back references foreach (IRibbonGroupItem item in Items) @@ -361,7 +361,7 @@ private void OnRibbonGroupClusterClearing(object sender, EventArgs e) } } - private void OnRibbonGroupClusterCleared(object sender, EventArgs e) + private void OnRibbonGroupClusterCleared(object? sender, EventArgs e) { // Only need to update display if this tab is selected if ((Ribbon != null) && (RibbonTab != null) && (Ribbon.SelectedTab == RibbonTab)) @@ -373,7 +373,7 @@ private void OnRibbonGroupClusterCleared(object sender, EventArgs e) private void OnRibbonGroupClusterInserted(object sender, TypedCollectionEventArgs e) { // Setup the back references - e.Item.Ribbon = Ribbon; + e.Item!.Ribbon = Ribbon; e.Item.RibbonTab = RibbonTab; e.Item.RibbonContainer = this; @@ -392,7 +392,7 @@ private void OnRibbonGroupClusterInserted(object sender, TypedCollectionEventArg private void OnRibbonGroupClusterRemoved(object sender, TypedCollectionEventArgs e) { // Remove the back references - e.Item.Ribbon = null; + e.Item!.Ribbon = null; e.Item.RibbonTab = null; e.Item.RibbonContainer = null; diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs index 7e9b1a818..d24dd6eab 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -27,7 +27,7 @@ namespace Krypton.Ribbon public class KryptonRibbonGroupClusterButton : KryptonRibbonGroupItem { #region Static Fields - private static readonly Image _defaultButtonImageSmall = GenericImageResources.ButtonImageSmall; + private static readonly Image? _defaultButtonImageSmall = GenericImageResources.ButtonImageSmall; #endregion #region Instance Fields @@ -500,7 +500,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -516,8 +516,6 @@ protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEv case nameof(Checked): OnPropertyChanged(nameof(Checked)); break; - default: - break; } } @@ -529,7 +527,7 @@ protected virtual void OnClick(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -585,7 +583,7 @@ protected virtual void OnDropDown(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -696,13 +694,16 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) case GroupButtonType.Check: PerformClick(); return true; + case GroupButtonType.DropDown: case GroupButtonType.Split: PerformDropDown(); return true; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(ButtonType.ToString()); break; } @@ -737,16 +738,18 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) #endregion #region Implementation - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { - var kcm = (KryptonContextMenu)sender; - kcm.Closed -= OnKryptonContextMenuClosed; - - // Fire any associated finish delegate - if (_kcmFinishDelegate != null) + if (sender is KryptonContextMenu kcm) { - _kcmFinishDelegate(this, e); - _kcmFinishDelegate = null; + kcm.Closed -= OnKryptonContextMenuClosed; + + // Fire any associated finish delegate + if (_kcmFinishDelegate != null) + { + _kcmFinishDelegate(this, e); + _kcmFinishDelegate = null; + } } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterCollection.cs index 123cd924a..ff6b555a9 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,8 +20,11 @@ namespace Krypton.Ribbon public class KryptonRibbonGroupClusterCollection : TypedRestrictCollection { #region Static Fields - private static readonly Type[] _types = { typeof(KryptonRibbonGroupClusterButton), - typeof(KryptonRibbonGroupClusterColorButton)}; + private static readonly Type[] _types = + [ + typeof(KryptonRibbonGroupClusterButton), + typeof(KryptonRibbonGroupClusterColorButton) + ]; #endregion #region Restrict diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs index 861143e53..cbfaec629 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupClusterColorButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -27,7 +27,7 @@ namespace Krypton.Ribbon public class KryptonRibbonGroupClusterColorButton : KryptonRibbonGroupItem { #region Static Fields - private static readonly Image _defaultButtonImageSmall = GenericImageResources.ButtonColorImageSmall; + private static readonly Image? _defaultButtonImageSmall = GenericImageResources.ButtonColorImageSmall; #endregion #region Instance Fields @@ -157,7 +157,7 @@ public KryptonRibbonGroupClusterColorButton() _imageSmall = _defaultButtonImageSmall; _buttonType = GroupButtonType.Split; _maxRecentColors = 10; - _recentColors = new List(); + _recentColors = []; // Create the context menu items _kryptonContextMenu = new KryptonContextMenu(); @@ -178,11 +178,13 @@ public KryptonRibbonGroupClusterColorButton() _itemMoreColors = new KryptonContextMenuItem("&More Colors...", OnClickMoreColors); _itemsMoreColors = new KryptonContextMenuItems(); _itemsMoreColors.Items.Add(_itemMoreColors); - _kryptonContextMenu.Items.AddRange(new KryptonContextMenuItemBase[] { _separatorTheme, _headingTheme, _colorsTheme, + _kryptonContextMenu.Items.AddRange([ + _separatorTheme, _headingTheme, _colorsTheme, _separatorStandard, _headingStandard, _colorsStandard, _separatorRecent, _headingRecent, _colorsRecent, _separatorNoColor, _itemsNoColor, - _separatorMoreColors, _itemsMoreColors}); + _separatorMoreColors, _itemsMoreColors + ]); } #endregion @@ -809,7 +811,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -836,7 +838,7 @@ protected virtual void OnClick(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -892,7 +894,7 @@ protected virtual void OnDropDown(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -1002,13 +1004,16 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) case GroupButtonType.Check: PerformClick(); return true; + case GroupButtonType.DropDown: case GroupButtonType.Split: PerformDropDown(); return true; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(ButtonType.ToString()); break; } @@ -1061,13 +1066,13 @@ private void HookContextMenuEvents(KryptonContextMenuCollection collection, bool private void UpdateRecentColors([DisallowNull] Color color) { - // Do we need to update the recent colors collection? + // Do we need to update the recent colors' collection? if (AutoRecentColors) { // We do not add to recent colors if it is inside another color columns - foreach (KryptonContextMenuItemBase item in _kryptonContextMenu.Items) + foreach (var item in _kryptonContextMenu!.Items) { - // Only interested in the non-recent colors color columns + // Only interested in the non-recent colors' color columns if ((item != _colorsRecent) && (item is KryptonContextMenuColorColumns colors)) { // Cast to correct type @@ -1126,11 +1131,11 @@ private void UpdateContextMenu() _itemsMoreColors.Visible = _visibleMoreColors; // Define the display strings - _headingTheme.Text = Ribbon.RibbonStrings.ThemeColors; - _headingStandard.Text = Ribbon.RibbonStrings.StandardColors; - _headingRecent.Text = Ribbon.RibbonStrings.RecentColors; - _itemNoColor.Text = Ribbon.RibbonStrings.NoColor; - _itemMoreColors.Text = Ribbon.RibbonStrings.MoreColors; + _headingTheme.Text = KryptonManager.Strings.RibbonStrings.ThemeColors; + _headingStandard.Text = KryptonManager.Strings.RibbonStrings.StandardColors; + _headingRecent.Text = KryptonManager.Strings.RibbonStrings.RecentColors; + _itemNoColor.Text = KryptonManager.Strings.RibbonStrings.NoColor; + _itemMoreColors.Text = KryptonManager.Strings.RibbonStrings.MoreColors; // Define the colors used in the first two color schemes _colorsTheme.ColorScheme = SchemeThemes; @@ -1149,7 +1154,7 @@ private void UpdateContextMenu() // Each column is just a single color for (var i = 0; i < _recentColors.Count; i++) { - colors[i] = new[] { _recentColors[i] }; + colors[i] = [_recentColors[i]]; } _colorsRecent.SetCustomColors(colors); @@ -1167,7 +1172,7 @@ private void DecideOnVisible(KryptonContextMenuItemBase visible, KryptonContextM if (target.Visible) { // Check all items before the target - foreach (KryptonContextMenuItemBase item in _kryptonContextMenu.Items) + foreach (var item in _kryptonContextMenu!.Items) { // Finish when we reach the target if (item == target) @@ -1191,13 +1196,13 @@ private void DecideOnVisible(KryptonContextMenuItemBase visible, KryptonContextM visible.Visible = previous; } - private void OnColumnsTrackingColor(object sender, ColorEventArgs e) => OnTrackingColor(new ColorEventArgs(e.Color)); + private void OnColumnsTrackingColor(object? sender, ColorEventArgs e) => OnTrackingColor(new ColorEventArgs(e.Color)); - private void OnColumnsSelectedColorChanged(object sender, ColorEventArgs e) => SelectedColor = e.Color; + private void OnColumnsSelectedColorChanged(object? sender, ColorEventArgs e) => SelectedColor = e.Color; - private void OnClickNoColor(object sender, EventArgs e) => SelectedColor = Color.Empty; + private void OnClickNoColor(object? sender, EventArgs e) => SelectedColor = Color.Empty; - private void OnClickMoreColors(object sender, EventArgs e) + private void OnClickMoreColors(object? sender, EventArgs e) { // Give user a chance to cancel showing the standard more colors dialog var cea = new CancelEventArgs(); @@ -1221,10 +1226,10 @@ private void OnClickMoreColors(object sender, EventArgs e) } } - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { - var kcm = (KryptonContextMenu)sender; - kcm.Closed -= OnKryptonContextMenuClosed; + var kcm = sender as KryptonContextMenu; + kcm!.Closed -= OnKryptonContextMenuClosed; // Fire any associated finish delegate if (_kcmFinishDelegate != null) @@ -1234,7 +1239,7 @@ private void OnKryptonContextMenuClosed(object sender, EventArgs e) } // Unhook from item events - HookContextMenuEvents(_kryptonContextMenu.Items, false); + HookContextMenuEvents(_kryptonContextMenu?.Items!, false); } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs index a0b094c5f..472c4070e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupColorButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -27,8 +27,8 @@ namespace Krypton.Ribbon public class KryptonRibbonGroupColorButton : KryptonRibbonGroupItem { #region Static Fields - private static readonly Image _defaultButtonImageSmall = GenericImageResources.ButtonColorImageSmall; - private static readonly Image _defaultButtonImageLarge = GenericImageResources.ButtonColorImageLarge; + private static readonly Image? _defaultButtonImageSmall = GenericImageResources.ButtonColorImageSmall; + private static readonly Image? _defaultButtonImageLarge = GenericImageResources.ButtonColorImageLarge; #endregion #region Instance Fields @@ -164,7 +164,7 @@ public KryptonRibbonGroupColorButton() _itemSizeMin = GroupItemSize.Small; _itemSizeCurrent = GroupItemSize.Large; _maxRecentColors = 10; - _recentColors = new List(); + _recentColors = []; // Create the context menu items _kryptonContextMenu = new KryptonContextMenu(); @@ -185,11 +185,13 @@ public KryptonRibbonGroupColorButton() _itemMoreColors = new KryptonContextMenuItem("&More Colors...", OnClickMoreColors); _itemsMoreColors = new KryptonContextMenuItems(); _itemsMoreColors.Items.Add(_itemMoreColors); - _kryptonContextMenu.Items.AddRange(new KryptonContextMenuItemBase[] { _separatorTheme, _headingTheme, _colorsTheme, + _kryptonContextMenu.Items.AddRange([ + _separatorTheme, _headingTheme, _colorsTheme, _separatorStandard, _headingStandard, _colorsStandard, _separatorRecent, _headingRecent, _colorsRecent, _separatorNoColor, _itemsNoColor, - _separatorMoreColors, _itemsMoreColors}); + _separatorMoreColors, _itemsMoreColors + ]); } #endregion @@ -857,7 +859,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -879,8 +881,6 @@ protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEv case nameof(Checked): OnPropertyChanged(nameof(Checked)); break; - default: - break; } } @@ -892,7 +892,7 @@ protected virtual void OnClick(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -948,7 +948,7 @@ protected virtual void OnDropDown(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { // Events only occur when enabled if (Enabled) @@ -1058,13 +1058,16 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) case GroupButtonType.Check: PerformClick(); return true; + case GroupButtonType.DropDown: case GroupButtonType.Split: PerformDropDown(); return true; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(ButtonType.ToString()); break; } @@ -1094,7 +1097,7 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) private void HookContextMenuEvents(KryptonContextMenuCollection collection, bool hook) { // Search for items of interest - foreach (KryptonContextMenuItemBase item in collection) + foreach (var item in collection) { // Hook into color events if (item is KryptonContextMenuColorColumns columns) @@ -1121,7 +1124,7 @@ private void UpdateRecentColors(Color color) if (AutoRecentColors) { // We do not add to recent colors if it is inside another color columns - foreach (KryptonContextMenuItemBase item in _kryptonContextMenu.Items) + foreach (var item in _kryptonContextMenu?.Items!) { // Only interested in the non-recent colors color columns if ((item != _colorsRecent) && (item is KryptonContextMenuColorColumns colors)) @@ -1147,7 +1150,7 @@ private void UpdateRecentColors(Color color) if ((color != Color.Empty) && !color.Equals(Color.Empty)) { var found = false; - foreach (Color recentColor in _recentColors) + foreach (var recentColor in _recentColors) { if (recentColor.Equals(color)) { @@ -1182,11 +1185,11 @@ private void UpdateContextMenu() _itemsMoreColors.Visible = _visibleMoreColors; // Define the display strings - _headingTheme.Text = Ribbon.RibbonStrings.ThemeColors; - _headingStandard.Text = Ribbon.RibbonStrings.StandardColors; - _headingRecent.Text = Ribbon.RibbonStrings.RecentColors; - _itemNoColor.Text = Ribbon.RibbonStrings.NoColor; - _itemMoreColors.Text = Ribbon.RibbonStrings.MoreColors; + _headingTheme.Text = KryptonManager.Strings.RibbonStrings.ThemeColors; + _headingStandard.Text = KryptonManager.Strings.RibbonStrings.StandardColors; + _headingRecent.Text = KryptonManager.Strings.RibbonStrings.RecentColors; + _itemNoColor.Text = KryptonManager.Strings.RibbonStrings.NoColor; + _itemMoreColors.Text = KryptonManager.Strings.RibbonStrings.MoreColors; // Define the colors used in the first two color schemes _colorsTheme.ColorScheme = SchemeThemes; @@ -1205,7 +1208,7 @@ private void UpdateContextMenu() // Each column is just a single color for (var i = 0; i < _recentColors.Count; i++) { - colors[i] = new[] { _recentColors[i] }; + colors[i] = [_recentColors[i]]; } _colorsRecent.SetCustomColors(colors); @@ -1223,7 +1226,7 @@ private void DecideOnVisible(KryptonContextMenuItemBase visible, KryptonContextM if (target.Visible) { // Check all items before the target - foreach (KryptonContextMenuItemBase item in _kryptonContextMenu.Items) + foreach (var item in _kryptonContextMenu?.Items!) { // Finish when we reach the target if (item == target) @@ -1246,13 +1249,13 @@ private void DecideOnVisible(KryptonContextMenuItemBase visible, KryptonContextM visible.Visible = previous; } - private void OnColumnsTrackingColor(object sender, ColorEventArgs e) => OnTrackingColor(new ColorEventArgs(e.Color)); + private void OnColumnsTrackingColor(object? sender, ColorEventArgs e) => OnTrackingColor(new ColorEventArgs(e.Color)); - private void OnColumnsSelectedColorChanged(object sender, ColorEventArgs e) => SelectedColor = e.Color; + private void OnColumnsSelectedColorChanged(object? sender, ColorEventArgs e) => SelectedColor = e.Color; - private void OnClickNoColor(object sender, EventArgs e) => SelectedColor = Color.Empty; + private void OnClickNoColor(object? sender, EventArgs e) => SelectedColor = Color.Empty; - private void OnClickMoreColors(object sender, EventArgs e) + private void OnClickMoreColors(object? sender, EventArgs e) { // Give user a chance to cancel showing the standard more colors dialog var cea = new CancelEventArgs(); @@ -1276,10 +1279,10 @@ private void OnClickMoreColors(object sender, EventArgs e) } } - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { - var kcm = (KryptonContextMenu)sender; - kcm.Closed -= OnKryptonContextMenuClosed; + var kcm = sender as KryptonContextMenu; + kcm!.Closed -= OnKryptonContextMenuClosed; // Fire any associated finish delegate if (_kcmFinishDelegate != null) @@ -1289,7 +1292,7 @@ private void OnKryptonContextMenuClosed(object sender, EventArgs e) } // Unhook from item events - HookContextMenuEvents(_kryptonContextMenu.Items, false); + HookContextMenuEvents(_kryptonContextMenu?.Items!, false); } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs index b6acf9a9c..7d8e76f1c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupComboBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -246,11 +246,11 @@ protected override void Dispose(bool disposing) { if (disposing) { - if (ComboBox != null) + if (ComboBox != null!) { UnmonitorControl(ComboBox); ComboBox.Dispose(); - ComboBox = null; + ComboBox = null!; } } @@ -275,7 +275,8 @@ public override KryptonRibbon? Ribbon { // Use the same palette in the combo box as the ribbon, plus we need // to know when the ribbon palette changes so we can reflect that change - ComboBox.Palette = Ribbon!.GetResolvedPalette(); + ComboBox.PaletteMode = Ribbon!.PaletteMode; + ComboBox.LocalCustomPalette = Ribbon!.LocalCustomPalette; Ribbon!.PaletteChanged += OnRibbonPaletteChanged; } } @@ -311,7 +312,7 @@ public override KryptonRibbon? Ribbon [Localizable(true)] [Category(@"Appearance")] [Description(@"Ribbon group text box key tip.")] - [DefaultValue("X")] + [DefaultValue(@"X")] public string KeyTip { get => _keyTip; @@ -320,7 +321,7 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "X"; + value = @"X"; } _keyTip = value.ToUpper(); @@ -412,8 +413,7 @@ public Size MaximumSize [Category(@"Appearance")] [Description(@"Text associated with the control.")] [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] - [AllowNull] - public string Text + public virtual string Text { get => ComboBox.Text; set => ComboBox.Text = value; @@ -464,7 +464,7 @@ public string ValueMember [AttributeProvider(typeof(IListSource))] [RefreshProperties(RefreshProperties.Repaint)] [DefaultValue(null)] - public object DataSource + public object? DataSource { get => ComboBox.DataSource; set => ComboBox.DataSource = value; @@ -491,7 +491,7 @@ public string DisplayMember [Description(@"Controls the appearance and functionality of the KryptonComboBox.")] [DefaultValue(typeof(ComboBoxStyle), nameof(DropDown))] [RefreshProperties(RefreshProperties.Repaint)] - public ComboBoxStyle DropDownStyle + public virtual ComboBoxStyle DropDownStyle { get => ComboBox.DropDownStyle; set => ComboBox.DropDownStyle = value; @@ -589,7 +589,7 @@ public bool Sorted [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [MergableProperty(false)] [Localizable(true)] - public ComboBox.ObjectCollection Items => ComboBox.Items; + public virtual ComboBox.ObjectCollection Items => ComboBox.Items; /// /// Gets and sets a value indicating if tooltips should be Displayed for button specs. @@ -632,7 +632,7 @@ public bool AllowButtonSpecToolTipPriority [EditorBrowsable(EditorBrowsableState.Always)] [Localizable(true)] [Browsable(true)] - public AutoCompleteStringCollection AutoCompleteCustomSource + public virtual AutoCompleteStringCollection AutoCompleteCustomSource { get => ComboBox.AutoCompleteCustomSource; set => ComboBox.AutoCompleteCustomSource = value; @@ -645,7 +645,7 @@ public AutoCompleteStringCollection AutoCompleteCustomSource [DefaultValue(typeof(AutoCompleteMode), "None")] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] - public AutoCompleteMode AutoCompleteMode + public virtual AutoCompleteMode AutoCompleteMode { get => ComboBox.AutoCompleteMode; set => ComboBox.AutoCompleteMode = value; @@ -658,7 +658,7 @@ public AutoCompleteMode AutoCompleteMode [DefaultValue(typeof(AutoCompleteSource), "None")] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] - public AutoCompleteSource AutoCompleteSource + public virtual AutoCompleteSource AutoCompleteSource { get => ComboBox.AutoCompleteSource; set => ComboBox.AutoCompleteSource = value; @@ -671,7 +671,7 @@ public AutoCompleteSource AutoCompleteSource [Editor(@"System.Windows.Forms.Design.FormatStringEditor", typeof(UITypeEditor))] [MergableProperty(false)] [DefaultValue("")] - public string FormatString + public virtual string FormatString { get => ComboBox.FormatString; set => ComboBox.FormatString = value; @@ -728,7 +728,7 @@ public int SelectionStart [Bindable(true)] [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object SelectedItem + public object? SelectedItem { get => ComboBox.SelectedItem; set => ComboBox.SelectedItem = value; @@ -739,7 +739,7 @@ public object SelectedItem /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string SelectedText + public string? SelectedText { get => ComboBox.SelectedText; set => ComboBox.SelectedText = value; @@ -822,7 +822,7 @@ public bool DroppedDown /// /// The object from which to get the contents to display. /// If the DisplayMember property is not specified, the value returned by GetItemText is the value of the item's ToString method. Otherwise, the method returns the string value of the member specified in the DisplayMember property for the object specified in the item parameter. - public string GetItemText(object item) => ComboBox.GetItemText(item); + public string? GetItemText(object item) => ComboBox.GetItemText(item); /// /// Selects a range of text in the control. @@ -1041,9 +1041,9 @@ public override ViewBase CreateView(KryptonRibbon ribbon, #endregion #region Internal - internal Control LastParentControl { get; set; } + internal Control? LastParentControl { get; set; } - internal KryptonComboBox LastComboBox { get; set; } + internal KryptonComboBox? LastComboBox { get; set; } internal NeedPaintHandler? ViewPaintDelegate { get; set; } @@ -1093,55 +1093,60 @@ private void UnmonitorControl(KryptonComboBox c) c.TrackMouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnComboBoxGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnComboBoxGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnComboBoxLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnComboBoxLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnComboBoxTextUpdate(object sender, EventArgs e) => OnTextUpdate(e); + private void OnComboBoxTextUpdate(object? sender, EventArgs e) => OnTextUpdate(e); - private void OnComboBoxSelectionChangeCommitted(object sender, EventArgs e) => OnSelectionChangeCommitted(e); + private void OnComboBoxSelectionChangeCommitted(object? sender, EventArgs e) => OnSelectionChangeCommitted(e); - private void OnComboBoxSelectedIndexChanged(object sender, EventArgs e) => OnSelectedIndexChanged(e); + private protected void OnComboBoxSelectedIndexChanged(object? sender, EventArgs e) => OnSelectedIndexChanged(e); - private void OnComboBoxDropDownStyleChanged(object sender, EventArgs e) => OnDropDownStyleChanged(e); + private void OnComboBoxDropDownStyleChanged(object? sender, EventArgs e) => OnDropDownStyleChanged(e); - private void OnComboBoxDataSourceChanged(object sender, EventArgs e) => OnDataSourceChanged(e); + private void OnComboBoxDataSourceChanged(object? sender, EventArgs e) => OnDataSourceChanged(e); - private void OnComboBoxDisplayMemberChanged(object sender, EventArgs e) => OnDisplayMemberChanged(e); + private void OnComboBoxDisplayMemberChanged(object? sender, EventArgs e) => OnDisplayMemberChanged(e); - private void OnComboBoxDropDownClosed(object sender, EventArgs e) => OnDropDownClosed(e); + private void OnComboBoxDropDownClosed(object? sender, EventArgs e) => OnDropDownClosed(e); - private void OnComboBoxDropDown(object sender, EventArgs e) => OnDropDown(e); + private void OnComboBoxDropDown(object? sender, EventArgs e) => OnDropDown(e); - private void OnComboBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnComboBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnComboBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnComboBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnComboBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnComboBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnComboBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnComboBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnComboBoxFormat(object sender, ListControlConvertEventArgs e) => OnFormat(e); + private void OnComboBoxFormat(object? sender, ListControlConvertEventArgs e) => OnFormat(e); - private void OnComboBoxFormatInfoChanged(object sender, EventArgs e) => OnFormatInfoChanged(e); + private void OnComboBoxFormatInfoChanged(object? sender, EventArgs e) => OnFormatInfoChanged(e); - private void OnComboBoxFormatStringChanged(object sender, EventArgs e) => OnFormatStringChanged(e); + private void OnComboBoxFormatStringChanged(object? sender, EventArgs e) => OnFormatStringChanged(e); - private void OnComboBoxFormattingEnabledChanged(object sender, EventArgs e) => OnFormattingEnabledChanged(e); + private void OnComboBoxFormattingEnabledChanged(object? sender, EventArgs e) => OnFormattingEnabledChanged(e); - private void OnComboBoxSelectedValueChanged(object sender, EventArgs e) => OnSelectedValueChanged(e); + private void OnComboBoxSelectedValueChanged(object? sender, EventArgs e) => OnSelectedValueChanged(e); - private void OnComboBoxValueMemberChanged(object sender, EventArgs e) => OnValueMemberChanged(e); + private void OnComboBoxValueMemberChanged(object? sender, EventArgs e) => OnValueMemberChanged(e); + + private void OnRibbonPaletteChanged(object? sender, EventArgs e) + { + ComboBox.PaletteMode = Ribbon!.PaletteMode; + ComboBox.LocalCustomPalette = Ribbon!.LocalCustomPalette; + } - private void OnRibbonPaletteChanged(object sender, EventArgs e) => ComboBox.Palette = Ribbon.GetResolvedPalette(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs index b38a653e8..226a32ca3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainerCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainerCollection.cs index 048f42668..9da2bb938 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainerCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupContainerCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,10 +18,13 @@ namespace Krypton.Ribbon public class KryptonRibbonGroupContainerCollection : TypedRestrictCollection { #region Static Fields - private static readonly Type[] _types = { typeof(KryptonRibbonGroupLines), + private static readonly Type[] _types = + [ + typeof(KryptonRibbonGroupLines), typeof(KryptonRibbonGroupTriple), typeof(KryptonRibbonGroupSeparator), - typeof(KryptonRibbonGroupGallery)}; + typeof(KryptonRibbonGroupGallery) + ]; #endregion #region Restrict diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs index 16340dcd6..ac47f034b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupCustomControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,7 +30,7 @@ public class KryptonRibbonGroupCustomControl : KryptonRibbonGroupItem private bool _enabled; private string _keyTip; private GroupItemSize _itemSizeCurrent; - private Control _customControl; + private Control? _customControl; #endregion @@ -152,7 +152,7 @@ public override ToolTipValues ToolTipValues [Browsable(true)] [EditorBrowsable(EditorBrowsableState.Always)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - public Control CustomControl + public Control? CustomControl { get => _customControl; @@ -377,9 +377,9 @@ private void UnmonitorControl(Control c) } } - private void OnCustomControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnCustomControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnCustomControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnCustomControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs index 15b8a9df3..fb5d095ea 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDateTimePicker.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -183,11 +183,11 @@ protected override void Dispose(bool disposing) { if (disposing) { - if (DateTimePicker != null) + if (DateTimePicker != null!) { UnmonitorControl(DateTimePicker); DateTimePicker.Dispose(); - DateTimePicker = null; + DateTimePicker = null!; } } @@ -208,12 +208,13 @@ public override KryptonRibbon? Ribbon { base.Ribbon = value; - if (value != null) + if (value is not null) { // Use the same palette in the date time picker as the ribbon, plus we need - // to know when the ribbon palette changes so we can reflect that change - DateTimePicker.Palette = Ribbon!.GetResolvedPalette(); - Ribbon!.PaletteChanged += OnRibbonPaletteChanged; + // to know when the ribbon palette changes, so we can reflect that change + DateTimePicker.PaletteMode = Ribbon!.PaletteMode; + DateTimePicker.LocalCustomPalette = Ribbon.LocalCustomPalette; + Ribbon.PaletteChanged += OnRibbonPaletteChanged; } } } @@ -258,7 +259,7 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "X"; + value = @"X"; } _keyTip = value.ToUpper(); @@ -491,6 +492,7 @@ public bool CalendarShowWeekNumbers /// [Category(@"MonthCalendar")] [Description(@"Today's date.")] + [AllowNull] public DateTime CalendarTodayDate { get => DateTimePicker.CalendarTodayDate; @@ -507,7 +509,7 @@ public DateTime CalendarTodayDate [Category(@"MonthCalendar")] [Description(@"Indicates which annual dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarAnnuallyBoldedDates + public DateTime[]? CalendarAnnuallyBoldedDates { get => DateTimePicker.CalendarAnnuallyBoldedDates; set => DateTimePicker.CalendarAnnuallyBoldedDates = value; @@ -523,7 +525,7 @@ public DateTime[] CalendarAnnuallyBoldedDates [Category(@"MonthCalendar")] [Description(@"Indicates which monthly dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarMonthlyBoldedDates + public DateTime[]? CalendarMonthlyBoldedDates { get => DateTimePicker.CalendarMonthlyBoldedDates; set => DateTimePicker.CalendarMonthlyBoldedDates = value; @@ -539,7 +541,7 @@ public DateTime[] CalendarMonthlyBoldedDates [Category(@"MonthCalendar")] [Description(@"Indicates which dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarBoldedDates + public DateTime[]? CalendarBoldedDates { get => DateTimePicker.CalendarBoldedDates; set => DateTimePicker.CalendarBoldedDates = value; @@ -570,18 +572,21 @@ public LeftRightAlignment DropDownAlign [TypeConverter(typeof(DateTimeNullableConverter))] [RefreshProperties(RefreshProperties.All)] [Bindable(true)] - public object ValueNullable + public object? ValueNullable { get => DateTimePicker.ValueNullable; set => DateTimePicker.ValueNullable = value; } - private void ResetValueNullable() => DateTimePicker.ResetValueNullable(); - private bool ShouldSerializeValueNullable() => DateTimePicker.ShouldSerializeValueNullable(); /// - /// Gets or sets the date/time value assigned to the control.. + /// Sets date as the current selected date. + /// + public void SetDate(DateTime date) => DateTimePicker.SetDate( date); + + /// + /// Gets or sets the date/time value assigned to the control. /// [Category(@"Appearance")] [Description(@"Property for the date/time.")] @@ -592,9 +597,7 @@ public DateTime Value get => DateTimePicker.Value; set => DateTimePicker.Value = value; } - private void ResetValue() => DateTimePicker.ResetValue(); - private bool ShouldSerializeValue() => DateTimePicker.ShouldSerializeValue(); /// @@ -698,7 +701,7 @@ public bool Checked [DefaultValue("")] [RefreshProperties(RefreshProperties.Repaint)] [Localizable(true)] - public string CustomFormat + public string? CustomFormat { get => DateTimePicker.CustomFormat; set => DateTimePicker.CustomFormat = value; @@ -977,39 +980,44 @@ private void UnmonitorControl(KryptonDateTimePicker c) c.MouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnDateTimePickerGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnDateTimePickerGotFocus(object? sender, EventArgs e) => OnGotFocus(e); + + private void OnDateTimePickerLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnDateTimePickerLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnDateTimePickerFormatChanged(object? sender, EventArgs e) => OnFormatChanged(e); - private void OnDateTimePickerFormatChanged(object sender, EventArgs e) => OnFormatChanged(e); + private void OnDateTimePickerCheckedChanged(object? sender, EventArgs e) => OnCheckedChanged(e); - private void OnDateTimePickerCheckedChanged(object sender, EventArgs e) => OnCheckedChanged(e); + private void OnDateTimePickerCloseUp(object? sender, DateTimePickerCloseArgs e) => OnCloseUp(e); - private void OnDateTimePickerCloseUp(object sender, DateTimePickerCloseArgs e) => OnCloseUp(e); + private void OnDateTimePickerDropDown(object? sender, DateTimePickerDropArgs e) => OnDropDown(e); - private void OnDateTimePickerDropDown(object sender, DateTimePickerDropArgs e) => OnDropDown(e); + private void OnDateTimePickerValueNullableChanged(object? sender, EventArgs e) => OnValueNullableChanged(e); - private void OnDateTimePickerValueNullableChanged(object sender, EventArgs e) => OnValueNullableChanged(e); + private void OnDateTimePickerValueChanged(object? sender, EventArgs e) => OnValueChanged(e); - private void OnDateTimePickerValueChanged(object sender, EventArgs e) => OnValueChanged(e); + private void OnDateTimePickerKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnDateTimePickerKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnDateTimePickerKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnDateTimePickerKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnDateTimePickerKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnDateTimePickerKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnDateTimePickerKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnDateTimePickerKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnRibbonPaletteChanged(object? sender, EventArgs e) + { + DateTimePicker.PaletteMode = Ribbon!.PaletteMode; + DateTimePicker.LocalCustomPalette = Ribbon.LocalCustomPalette; + } - private void OnRibbonPaletteChanged(object sender, EventArgs e) => DateTimePicker.Palette = Ribbon.GetResolvedPalette(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs index fca875cc8..448124c86 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupDomainUpDown.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -187,8 +187,9 @@ public override KryptonRibbon? Ribbon { // Use the same palette in the domain up-down as the ribbon, plus we need // to know when the ribbon palette changes so we can reflect that change - DomainUpDown.Palette = Ribbon!.GetResolvedPalette(); - Ribbon!.PaletteChanged += OnRibbonPaletteChanged; + DomainUpDown!.PaletteMode = Ribbon!.PaletteMode; + DomainUpDown.LocalCustomPalette = Ribbon.LocalCustomPalette; + Ribbon.PaletteChanged += OnRibbonPaletteChanged; } } } @@ -200,8 +201,8 @@ public override KryptonRibbon? Ribbon [DefaultValue(-1)] public int SelectedIndex { - get => DomainUpDown.SelectedIndex; - set => DomainUpDown.SelectedIndex = value; + get => DomainUpDown!.SelectedIndex; + set => DomainUpDown!.SelectedIndex = value; } /// @@ -209,10 +210,10 @@ public int SelectedIndex /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object SelectedItem + public object? SelectedItem { - get => DomainUpDown.SelectedItem; - set => DomainUpDown.SelectedItem = value; + get => DomainUpDown!.SelectedItem; + set => DomainUpDown!.SelectedItem = value; } /// @@ -223,8 +224,8 @@ public object SelectedItem [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] public string Text { - get => DomainUpDown.Text; - set => DomainUpDown.Text = value; + get => DomainUpDown!.Text; + set => DomainUpDown!.Text = value; } /// @@ -250,7 +251,7 @@ public string Text [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Editor(@"System.Windows.Forms.Design.StringCollectionEditor", typeof(UITypeEditor))] [Localizable(true)] - public DomainUpDown.DomainUpDownItemCollection Items => DomainUpDown.Items; + public DomainUpDown.DomainUpDownItemCollection Items => DomainUpDown!.Items; /// /// Access to the actual embedded KryptonDomainUpDown instance. @@ -259,7 +260,7 @@ public string Text [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Always)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public KryptonDomainUpDown DomainUpDown { get; private set; } + public KryptonDomainUpDown? DomainUpDown { get; private set; } /// /// Gets or sets a value indicating whether the item collection is sorted. @@ -269,8 +270,8 @@ public string Text [DefaultValue(false)] public bool Sorted { - get => DomainUpDown.Sorted; - set => DomainUpDown.Sorted = value; + get => DomainUpDown!.Sorted; + set => DomainUpDown!.Sorted = value; } /// @@ -289,7 +290,7 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "X"; + value = @"X"; } _keyTip = value.ToUpper(); @@ -305,8 +306,8 @@ public string KeyTip [Localizable(true)] public HorizontalAlignment TextAlign { - get => DomainUpDown.TextAlign; - set => DomainUpDown.TextAlign = value; + get => DomainUpDown!.TextAlign; + set => DomainUpDown!.TextAlign = value; } @@ -319,8 +320,8 @@ public HorizontalAlignment TextAlign [Localizable(true)] public LeftRightAlignment UpDownAlign { - get => DomainUpDown.UpDownAlign; - set => DomainUpDown.UpDownAlign = value; + get => DomainUpDown!.UpDownAlign; + set => DomainUpDown!.UpDownAlign = value; } /// @@ -331,8 +332,8 @@ public LeftRightAlignment UpDownAlign [DefaultValue(true)] public bool InterceptArrowKeys { - get => DomainUpDown.InterceptArrowKeys; - set => DomainUpDown.InterceptArrowKeys = value; + get => DomainUpDown!.InterceptArrowKeys; + set => DomainUpDown!.InterceptArrowKeys = value; } /// @@ -344,8 +345,8 @@ public bool InterceptArrowKeys [DefaultValue(false)] public bool ReadOnly { - get => DomainUpDown.ReadOnly; - set => DomainUpDown.ReadOnly = value; + get => DomainUpDown!.ReadOnly; + set => DomainUpDown!.ReadOnly = value; } /// @@ -354,7 +355,7 @@ public bool ReadOnly [Category(@"Visuals")] [Description(@"Collection of button specifications.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonDomainUpDown.DomainUpDownButtonSpecCollection ButtonSpecs => DomainUpDown.ButtonSpecs; + public KryptonDomainUpDown.DomainUpDownButtonSpecCollection ButtonSpecs => DomainUpDown!.ButtonSpecs; /// /// Gets and sets the visible state of the domain up-down. @@ -419,8 +420,8 @@ public bool Enabled [DefaultValue(typeof(Size), "121, 0")] public Size MinimumSize { - get => DomainUpDown.MinimumSize; - set => DomainUpDown.MinimumSize = value; + get => DomainUpDown!.MinimumSize; + set => DomainUpDown!.MinimumSize = value; } /// @@ -431,8 +432,8 @@ public Size MinimumSize [DefaultValue(typeof(Size), "121, 0")] public Size MaximumSize { - get => DomainUpDown.MaximumSize; - set => DomainUpDown.MaximumSize = value; + get => DomainUpDown!.MaximumSize; + set => DomainUpDown!.MaximumSize = value; } /// @@ -443,8 +444,8 @@ public Size MaximumSize [DefaultValue(null)] public ContextMenuStrip? ContextMenuStrip { - get => DomainUpDown.ContextMenuStrip; - set => DomainUpDown.ContextMenuStrip = value; + get => DomainUpDown!.ContextMenuStrip; + set => DomainUpDown!.ContextMenuStrip = value; } /// @@ -455,14 +456,14 @@ public ContextMenuStrip? ContextMenuStrip [DefaultValue(null)] public KryptonContextMenu? KryptonContextMenu { - get => DomainUpDown.KryptonContextMenu; - set => DomainUpDown.KryptonContextMenu = value; + get => DomainUpDown!.KryptonContextMenu; + set => DomainUpDown!.KryptonContextMenu = value; } /// /// Gets access to the Wrapped Controls Tooltips. /// - public override ToolTipValues ToolTipValues => DomainUpDown.ToolTipValues; + public override ToolTipValues ToolTipValues => DomainUpDown!.ToolTipValues; /// @@ -473,8 +474,8 @@ public KryptonContextMenu? KryptonContextMenu [DefaultValue(false)] public bool AllowButtonSpecToolTips { - get => DomainUpDown.AllowButtonSpecToolTips; - set => DomainUpDown.AllowButtonSpecToolTips = value; + get => DomainUpDown!.AllowButtonSpecToolTips; + set => DomainUpDown!.AllowButtonSpecToolTips = value; } /// @@ -485,8 +486,8 @@ public bool AllowButtonSpecToolTips [DefaultValue(false)] public bool AllowButtonSpecToolTipPriority { - get => DomainUpDown.AllowButtonSpecToolTipPriority; - set => DomainUpDown.AllowButtonSpecToolTipPriority = value; + get => DomainUpDown!.AllowButtonSpecToolTipPriority; + set => DomainUpDown!.AllowButtonSpecToolTipPriority = value; } /// @@ -494,7 +495,7 @@ public bool AllowButtonSpecToolTipPriority /// /// The position of the first character in the current text selection within the text box. /// The number of characters to select. - public void Select(int start, int length) => DomainUpDown.Select(start, length); + public void Select(int start, int length) => DomainUpDown!.Select(start, length); /// /// Gets and sets the maximum allowed size of the item. @@ -565,7 +566,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase DomainUpDownView { get; set; } + public ViewBase? DomainUpDownView { get; set; } #endregion @@ -684,33 +685,38 @@ private void UnmonitorControl(KryptonDomainUpDown c) c.TrackMouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnDomainUpDownScroll(object sender, ScrollEventArgs e) => OnScroll(e); + private void OnDomainUpDownScroll(object? sender, ScrollEventArgs e) => OnScroll(e); - private void OnDomainUpDownSelectedItemChanged(object sender, EventArgs e) => OnSelectedItemChanged(e); + private void OnDomainUpDownSelectedItemChanged(object? sender, EventArgs e) => OnSelectedItemChanged(e); - private void OnDomainUpDownTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnDomainUpDownTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnDomainUpDownGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnDomainUpDownGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnDomainUpDownLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnDomainUpDownLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnDomainUpDownKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnDomainUpDownKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnDomainUpDownKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnDomainUpDownKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnDomainUpDownKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnDomainUpDownKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnDomainUpDownPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnDomainUpDownPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + + private void OnRibbonPaletteChanged(object? sender, EventArgs e) + { + DomainUpDown!.PaletteMode = Ribbon!.PaletteMode; + DomainUpDown.LocalCustomPalette = Ribbon.LocalCustomPalette; + } - private void OnRibbonPaletteChanged(object sender, EventArgs e) => DomainUpDown.Palette = Ribbon.GetResolvedPalette(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs index 63e71eaa9..e29b3beb6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupGallery.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -72,7 +72,7 @@ public class KryptonRibbonGroupGallery : KryptonRibbonGroupContainer /// [Category(@"Action")] [Description(@"Occurs when user invokes the drop down menu.")] - public event EventHandler GalleryDropMenu; + public event EventHandler? GalleryDropMenu; /// /// Occurs after the value of a property has changed. @@ -648,7 +648,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase GalleryView { get; set; } + public ViewBase? GalleryView { get; set; } #endregion @@ -657,7 +657,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, internal KryptonGallery? LastGallery { get; set; } - internal NeedPaintHandler ViewPaintDelegate { get; set; } + internal NeedPaintHandler? ViewPaintDelegate { get; set; } internal void OnDesignTimeContextMenu(MouseEventArgs e) => DesignTimeContextMenu?.Invoke(this, e); @@ -690,7 +690,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// Raises the GalleryDropMenu event. /// /// An GalleryDropMenuEventArgs containing the event data. - protected virtual void OnGalleryDropMenu(GalleryDropMenuEventArgs e) => GalleryDropMenu.Invoke(this, e); + protected virtual void OnGalleryDropMenu(GalleryDropMenuEventArgs e) => GalleryDropMenu?.Invoke(this, e); /// /// Raises the GotFocus event. @@ -724,21 +724,21 @@ private void UnmonitorControl(KryptonGallery c) c.MouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); - private void OnGalleryImageListChanged(object sender, EventArgs e) => OnImageListChanged(e); + private void OnGalleryImageListChanged(object? sender, EventArgs e) => OnImageListChanged(e); - private void OnGallerySelectedIndexChanged(object sender, EventArgs e) => OnSelectedIndexChanged(e); + private void OnGallerySelectedIndexChanged(object? sender, EventArgs e) => OnSelectedIndexChanged(e); - private void OnGalleryTrackingImage(object sender, ImageSelectEventArgs e) => OnTrackingImage(e); + private void OnGalleryTrackingImage(object? sender, ImageSelectEventArgs e) => OnTrackingImage(e); - private void OnGalleryGalleryDropMenu(object sender, GalleryDropMenuEventArgs e) => OnGalleryDropMenu(e); + private void OnGalleryGalleryDropMenu(object? sender, GalleryDropMenuEventArgs e) => OnGalleryDropMenu(e); - private void OnGalleryGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnGalleryGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnGalleryLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnGalleryLostFocus(object? sender, EventArgs e) => OnLostFocus(e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs index 5e75d99fe..8f0a8cb3f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -211,7 +211,7 @@ protected bool ChainVisible [AllowNull] public BindingContext BindingContext { - get => _bindingContext ??= new BindingContext(); + get => _bindingContext ??= []; set => _bindingContext = value; } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs index 9916ac129..1ee5c3e64 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,12 +28,12 @@ public class KryptonRibbonGroupLabel : KryptonRibbonGroupItem #region Instance Fields private bool _visible; private bool _enabled; - private Image _imageSmall; - private Image _imageLarge; + private Image? _imageSmall; + private Image? _imageLarge; private string _textLine1; private string _textLine2; private GroupItemSize _itemSizeCurrent; - private KryptonCommand _command; + private KryptonCommand? _command; private readonly NeedPaintHandler _needPaintDelegate; private readonly PaletteRibbonText _stateNormal; private readonly PaletteRibbonText _stateDisabled; @@ -359,7 +359,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase LabelView { get; set; } + public ViewBase? LabelView { get; set; } #endregion @@ -369,7 +369,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -410,7 +410,7 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) => #endregion #region Implementation - private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => + private void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs index 32b4c38e3..a4a27a41b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupLines.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -145,6 +145,13 @@ public class KryptonRibbonGroupLines : KryptonRibbonGroupContainer [Browsable(false)] public event EventHandler? DesignTimeAddTrackBar; + /// + /// Occurs when the design time wants to add a theme combobox. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + [Browsable(false)] + public event EventHandler? DesignTimeAddThemeComboBox; + /// /// Occurs when the design time context menu is requested. /// @@ -167,7 +174,7 @@ public KryptonRibbonGroupLines() _itemSizeCurrent = GroupItemSize.Large; // Create collection for holding triple items - Items = new KryptonRibbonGroupLinesCollection(); + Items = []; Items.Clearing += OnRibbonGroupLineClearing; Items.Cleared += OnRibbonGroupLineCleared; Items.Inserted += OnRibbonGroupLineInserted; @@ -183,7 +190,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Dispose of per-item resources - foreach (KryptonRibbonGroupItem item in Items) + foreach (var item in Items!) { item.Dispose(); } @@ -209,8 +216,8 @@ public override KryptonRibbon? Ribbon base.Ribbon = value; // Forward the reference to all children (just in case the children - // are added before the this object is added to the owner) - foreach (KryptonRibbonGroupItem item in Items) + // are added before this object is added to the owner) + foreach (var item in Items!) { item.Ribbon = value; } @@ -232,8 +239,8 @@ public override KryptonRibbonTab? RibbonTab base.RibbonTab = value; // Forward the reference to all children (just in case the children - // are added before the this object is added to the owner) - foreach (KryptonRibbonGroupItem item in Items) + // are added before this object is added to the owner) + foreach (var item in Items!) { item.RibbonTab = value; } @@ -337,8 +344,8 @@ public override GroupItemSize ItemSizeMaximum } // Update all contained elements to reflect the same sizing - GroupItemSize itemSize = LinesToItemSize(_itemSizeMax); - foreach (IRibbonGroupItem item in Items) + var itemSize = LinesToItemSize(_itemSizeMax); + foreach (IRibbonGroupItem item in Items!) { item.ItemSizeMaximum = itemSize; } @@ -380,7 +387,7 @@ public override GroupItemSize ItemSizeMinimum // Update all contained elements to reflect the same sizing _ = LinesToItemSize(_itemSizeMin); - foreach (IRibbonGroupItem item in Items) + foreach (IRibbonGroupItem item in Items!) { item.ItemSizeMinimum = value; } @@ -437,7 +444,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [MergableProperty(false)] [Editor(typeof(KryptonRibbonGroupLinesCollectionEditor), typeof(UITypeEditor))] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonRibbonGroupLinesCollection Items { get; } + public KryptonRibbonGroupLinesCollection? Items { get; } /// /// Gets an array of all the contained components. @@ -445,7 +452,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// Array of child components. public override Component[] GetChildComponents() { - var array = new Component[Items.Count]; + var array = new Component[Items!.Count]; Items.CopyTo(array, 0); return array; } @@ -499,12 +506,14 @@ public override Component[] GetChildComponents() internal void OnDesignTimeAddTrackBar() => DesignTimeAddTrackBar?.Invoke(this, EventArgs.Empty); + internal void OnDesignTimeAddThemeComboBox() => DesignTimeAddThemeComboBox?.Invoke(this, EventArgs.Empty); + internal void OnDesignTimeContextMenu(MouseEventArgs e) => DesignTimeContextMenu?.Invoke(this, e); internal override bool ProcessCmdKey(ref Message msg, Keys keyData) { // Ask the containers to check for command key processing - foreach (KryptonRibbonGroupItem item in Items) + foreach (var item in Items!) { if (item.ProcessCmdKey(ref msg, keyData)) { @@ -532,10 +541,10 @@ private GroupItemSize LinesToItemSize(GroupItemSize containerSize) } } - private void OnRibbonGroupLineClearing(object sender, EventArgs e) + private void OnRibbonGroupLineClearing(object? sender, EventArgs e) { // Remove the back references - foreach (IRibbonGroupItem item in Items) + foreach (var item in Items!) { item.Ribbon = null; item.RibbonTab = null; @@ -543,7 +552,7 @@ private void OnRibbonGroupLineClearing(object sender, EventArgs e) } } - private void OnRibbonGroupLineCleared(object sender, EventArgs e) + private void OnRibbonGroupLineCleared(object? sender, EventArgs e) { // Only need to update display if this tab is selected if ((Ribbon != null) && (RibbonTab != null) && (Ribbon.SelectedTab == RibbonTab)) @@ -555,7 +564,7 @@ private void OnRibbonGroupLineCleared(object sender, EventArgs e) private void OnRibbonGroupLineInserted(object sender, TypedCollectionEventArgs e) { // Setup the back references - e.Item.Ribbon = Ribbon; + e.Item!.Ribbon = Ribbon; e.Item.RibbonTab = RibbonTab; e.Item.RibbonContainer = this; @@ -574,7 +583,7 @@ private void OnRibbonGroupLineInserted(object sender, TypedCollectionEventArgs e) { // Remove the back references - e.Item.Ribbon = null; + e.Item!.Ribbon = null; e.Item.RibbonTab = null; e.Item.RibbonContainer = null; @@ -586,4 +595,4 @@ private void OnRibbonGroupLineRemoved(object sender, TypedCollectionEventArgs { #region Static Fields - private static readonly Type[] _types = { typeof(KryptonRibbonGroupButton), - typeof(KryptonRibbonGroupColorButton), - typeof(KryptonRibbonGroupCheckBox), - typeof(KryptonRibbonGroupComboBox), - typeof(KryptonRibbonGroupCluster), - typeof(KryptonRibbonGroupCustomControl), - typeof(KryptonRibbonGroupDateTimePicker), - typeof(KryptonRibbonGroupDomainUpDown), - typeof(KryptonRibbonGroupLabel), - typeof(KryptonRibbonGroupNumericUpDown), - typeof(KryptonRibbonGroupRadioButton), - typeof(KryptonRibbonGroupRichTextBox), - typeof(KryptonRibbonGroupTextBox), - typeof(KryptonRibbonGroupTrackBar), - typeof(KryptonRibbonGroupMaskedTextBox) - }; + + private static readonly Type[] _types = + [ + typeof(KryptonRibbonGroupButton), + typeof(KryptonRibbonGroupColorButton), + typeof(KryptonRibbonGroupCheckBox), + typeof(KryptonRibbonGroupComboBox), + typeof(KryptonRibbonGroupCluster), + typeof(KryptonRibbonGroupCustomControl), + typeof(KryptonRibbonGroupDateTimePicker), + typeof(KryptonRibbonGroupDomainUpDown), + typeof(KryptonRibbonGroupLabel), + typeof(KryptonRibbonGroupNumericUpDown), + typeof(KryptonRibbonGroupRadioButton), + typeof(KryptonRibbonGroupRichTextBox), + typeof(KryptonRibbonGroupTextBox), + typeof(KryptonRibbonGroupTrackBar), + typeof(KryptonRibbonGroupMaskedTextBox), + typeof(KryptonRibbonGroupThemeComboBox) + ]; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs index f660a5ffc..cb3613e3f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupMaskedTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public class KryptonRibbonGroupMaskedTextBox : KryptonRibbonGroupItem #region Instance Fields private bool _visible; private bool _enabled; - private string _keyTip; + private string? _keyTip; private GroupItemSize _itemSizeCurrent; #endregion @@ -165,7 +165,7 @@ public KryptonRibbonGroupMaskedTextBox() _enabled = true; _itemSizeCurrent = GroupItemSize.Medium; ShortcutKeys = Keys.None; - _keyTip = "X"; + _keyTip = @"X"; // Create the actual masked text box control and set initial settings MaskedTextBox = new KryptonMaskedTextBox @@ -206,11 +206,11 @@ protected override void Dispose(bool disposing) { if (disposing) { - if (MaskedTextBox != null) + if (MaskedTextBox != null!) { UnmonitorControl(MaskedTextBox); MaskedTextBox.Dispose(); - MaskedTextBox = null; + MaskedTextBox = null!; } } @@ -235,7 +235,8 @@ public override KryptonRibbon? Ribbon { // Use the same palette in the masked text box as the ribbon, plus we need // to know when the ribbon palette changes so we can reflect that change - MaskedTextBox.Palette = value.GetResolvedPalette(); + MaskedTextBox.PaletteMode = Ribbon!.PaletteMode; + MaskedTextBox.LocalCustomPalette = Ribbon!.LocalCustomPalette; value.PaletteChanged += OnRibbonPaletteChanged; } } @@ -263,7 +264,7 @@ public override KryptonRibbon? Ribbon [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Always)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public KryptonMaskedTextBox? MaskedTextBox { get; private set; } + public KryptonMaskedTextBox MaskedTextBox { get; private set; } /// /// Gets and sets the key tip for the ribbon group masked text box. @@ -274,7 +275,7 @@ public override KryptonRibbon? Ribbon [Description(@"Ribbon group masked text box key tip.")] [DefaultValue("X")] [AllowNull] - public string KeyTip + public string? KeyTip { get => _keyTip; @@ -285,7 +286,7 @@ public string KeyTip value = @"X"; } - _keyTip = value.ToUpper(); + _keyTip = value?.ToUpper(); } } @@ -352,8 +353,8 @@ public bool Enabled [DefaultValue(typeof(Size), "121, 0")] public Size MinimumSize { - get => MaskedTextBox!.MinimumSize; - set => MaskedTextBox!.MinimumSize = value; + get => MaskedTextBox.MinimumSize; + set => MaskedTextBox.MinimumSize = value; } /// @@ -364,8 +365,8 @@ public Size MinimumSize [DefaultValue(typeof(Size), "121, 0")] public Size MaximumSize { - get => MaskedTextBox!.MaximumSize; - set => MaskedTextBox!.MaximumSize = value; + get => MaskedTextBox.MaximumSize; + set => MaskedTextBox.MaximumSize = value; } /// @@ -418,10 +419,10 @@ public override GroupItemSize ItemSizeCurrent [Category(@"Appearance")] [Editor(@"System.Windows.Forms.Design.MaskedTextBoxTextEditor", typeof(UITypeEditor))] [AllowNull] - public string Text + public string? Text { - get => MaskedTextBox?.Text ?? string.Empty; - set => MaskedTextBox!.Text = value; + get => MaskedTextBox.Text; + set => MaskedTextBox.Text = value; } /// @@ -429,7 +430,7 @@ public string Text /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool Modified => MaskedTextBox!.Modified; + public bool Modified => MaskedTextBox.Modified; /// /// Gets and sets the selected text within the control. @@ -437,9 +438,9 @@ public string Text [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [AllowNull] - public string SelectedText + public string? SelectedText { - get => MaskedTextBox?.SelectedText ?? string.Empty; + get => MaskedTextBox.SelectedText; set => MaskedTextBox.SelectedText = value; } @@ -450,7 +451,7 @@ public string SelectedText [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionLength { - get => MaskedTextBox?.SelectionLength ?? 0; + get => MaskedTextBox.SelectionLength; set => MaskedTextBox.SelectionLength = value; } @@ -461,7 +462,7 @@ public int SelectionLength [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionStart { - get => MaskedTextBox?.SelectionStart ?? 0; + get => MaskedTextBox.SelectionStart; set => MaskedTextBox.SelectionStart = value; } @@ -470,32 +471,32 @@ public int SelectionStart /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int TextLength => MaskedTextBox?.TextLength ?? 0; + public int TextLength => MaskedTextBox.TextLength; /// /// Gets a value that specifies whether new user input overwrites existing input. /// [Browsable(false)] - public bool IsOverwriteMode => MaskedTextBox?.IsOverwriteMode ?? false; + public bool IsOverwriteMode => MaskedTextBox.IsOverwriteMode; /// /// Gets a value indicating whether all required inputs have been entered into the input mask. /// [Browsable(false)] - public bool MaskCompleted => MaskedTextBox?.MaskCompleted ?? false; + public bool MaskCompleted => MaskedTextBox.MaskCompleted; /// /// Gets a clone of the mask provider associated with this instance of the masked text box control. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public MaskedTextProvider? MaskedTextProvider => MaskedTextBox?.MaskedTextProvider; + public MaskedTextProvider? MaskedTextProvider => MaskedTextBox.MaskedTextProvider; /// /// Gets a value indicating whether all required and optional inputs have been entered into the input mask. /// [Browsable(false)] - public bool MaskFull => MaskedTextBox?.MaskFull ?? false; + public bool MaskFull => MaskedTextBox.MaskFull; /// /// Gets or sets the maximum number of characters that can be entered into the edit control. @@ -504,7 +505,7 @@ public int SelectionStart [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int MaxLength { - get => MaskedTextBox?.MaxLength ?? 0; + get => MaskedTextBox.MaxLength; set => MaskedTextBox.MaxLength = value; } @@ -515,7 +516,7 @@ public int MaxLength [DefaultValue(null)] public Type? ValidatingType { - get => MaskedTextBox?.ValidatingType; + get => MaskedTextBox.ValidatingType; set => MaskedTextBox.ValidatingType = value; } @@ -528,7 +529,7 @@ public Type? ValidatingType [Localizable(true)] public HorizontalAlignment TextAlign { - get => MaskedTextBox?.TextAlign ?? HorizontalAlignment.Left; + get => MaskedTextBox.TextAlign; set => MaskedTextBox.TextAlign = value; } @@ -542,7 +543,7 @@ public HorizontalAlignment TextAlign [Localizable(true)] public char PromptChar { - get => MaskedTextBox?.PromptChar ?? '_'; + get => MaskedTextBox.PromptChar; set => MaskedTextBox.PromptChar = value; } @@ -554,7 +555,7 @@ public char PromptChar [DefaultValue(true)] public bool AllowPromptAsInput { - get => MaskedTextBox?.AllowPromptAsInput ?? false; + get => MaskedTextBox.AllowPromptAsInput; set => MaskedTextBox.AllowPromptAsInput = value; } @@ -567,7 +568,7 @@ public bool AllowPromptAsInput [DefaultValue(false)] public bool AsciiOnly { - get => MaskedTextBox?.AsciiOnly ?? false; + get => MaskedTextBox.AsciiOnly; set => MaskedTextBox.AsciiOnly = value; } @@ -579,7 +580,7 @@ public bool AsciiOnly [DefaultValue(false)] public bool BeepOnError { - get => MaskedTextBox?.BeepOnError ?? false; + get => MaskedTextBox.BeepOnError; set => MaskedTextBox.BeepOnError = value; } @@ -591,7 +592,7 @@ public bool BeepOnError [RefreshProperties(RefreshProperties.All)] public CultureInfo Culture { - get => MaskedTextBox?.Culture ?? CultureInfo.InvariantCulture; + get => MaskedTextBox.Culture; set => MaskedTextBox.Culture = value; } @@ -606,7 +607,7 @@ public CultureInfo Culture [DefaultValue(typeof(MaskFormat), @"IncludeLiterals")] public MaskFormat CutCopyMaskFormat { - get => MaskedTextBox?.CutCopyMaskFormat ?? MaskFormat.IncludeLiterals; + get => MaskedTextBox.CutCopyMaskFormat; set => MaskedTextBox.CutCopyMaskFormat = value; } @@ -619,7 +620,7 @@ public MaskFormat CutCopyMaskFormat [DefaultValue(false)] public bool HidePromptOnLeave { - get => MaskedTextBox?.HidePromptOnLeave ?? false; + get => MaskedTextBox.HidePromptOnLeave; set => MaskedTextBox.HidePromptOnLeave = value; } @@ -631,7 +632,7 @@ public bool HidePromptOnLeave [DefaultValue(typeof(InsertKeyMode), @"Default")] public InsertKeyMode InsertKeyMode { - get => MaskedTextBox?.InsertKeyMode ?? InsertKeyMode.Default; + get => MaskedTextBox.InsertKeyMode; set => MaskedTextBox.InsertKeyMode = value; } @@ -647,7 +648,7 @@ public InsertKeyMode InsertKeyMode [AllowNull] public string Mask { - get => MaskedTextBox?.Mask ?? string.Empty; + get => MaskedTextBox.Mask; set => MaskedTextBox.Mask = value; } @@ -659,7 +660,7 @@ public string Mask [DefaultValue(true)] public bool HideSelection { - get => MaskedTextBox?.HideSelection ?? true; + get => MaskedTextBox.HideSelection; set => MaskedTextBox.HideSelection = value; } @@ -672,7 +673,7 @@ public bool HideSelection [DefaultValue(false)] public bool ReadOnly { - get => MaskedTextBox?.ReadOnly ?? false; + get => MaskedTextBox.ReadOnly; set => MaskedTextBox.ReadOnly = value; } @@ -684,7 +685,7 @@ public bool ReadOnly [DefaultValue(false)] public bool RejectInputOnFirstFailure { - get => MaskedTextBox?.RejectInputOnFirstFailure ?? false; + get => MaskedTextBox.RejectInputOnFirstFailure; set => MaskedTextBox.RejectInputOnFirstFailure = value; } @@ -696,7 +697,7 @@ public bool RejectInputOnFirstFailure [DefaultValue(true)] public bool ResetOnPrompt { - get => MaskedTextBox?.ResetOnPrompt ?? true; + get => MaskedTextBox.ResetOnPrompt; set => MaskedTextBox.ResetOnPrompt = value; } @@ -708,7 +709,7 @@ public bool ResetOnPrompt [DefaultValue(true)] public bool ResetOnSpace { - get => MaskedTextBox?.ResetOnSpace ?? true; + get => MaskedTextBox.ResetOnSpace; set => MaskedTextBox.ResetOnSpace = value; } @@ -720,7 +721,7 @@ public bool ResetOnSpace [DefaultValue(true)] public bool SkipLiterals { - get => MaskedTextBox?.SkipLiterals ?? true; + get => MaskedTextBox.SkipLiterals; set => MaskedTextBox.SkipLiterals = value; } @@ -733,7 +734,7 @@ public bool SkipLiterals [RefreshProperties(RefreshProperties.Repaint)] public MaskFormat TextMaskFormat { - get => MaskedTextBox?.TextMaskFormat ?? MaskFormat.IncludeLiterals; + get => MaskedTextBox.TextMaskFormat; set => MaskedTextBox.TextMaskFormat = value; } @@ -747,7 +748,7 @@ public MaskFormat TextMaskFormat [Localizable(true)] public char PasswordChar { - get => MaskedTextBox?.PasswordChar ?? '\0'; + get => MaskedTextBox.PasswordChar; set => MaskedTextBox.PasswordChar = value; } @@ -760,7 +761,7 @@ public char PasswordChar [DefaultValue(false)] public bool UseSystemPasswordChar { - get => MaskedTextBox?.UseSystemPasswordChar ?? false; + get => MaskedTextBox.UseSystemPasswordChar; set => MaskedTextBox.UseSystemPasswordChar = value; } @@ -772,7 +773,7 @@ public bool UseSystemPasswordChar [DefaultValue(null)] public ContextMenuStrip? ContextMenuStrip { - get => MaskedTextBox?.ContextMenuStrip; + get => MaskedTextBox.ContextMenuStrip; set => MaskedTextBox.ContextMenuStrip = value; } @@ -784,7 +785,7 @@ public ContextMenuStrip? ContextMenuStrip [DefaultValue(null)] public KryptonContextMenu? KryptonContextMenu { - get => MaskedTextBox?.KryptonContextMenu; + get => MaskedTextBox.KryptonContextMenu; set => MaskedTextBox.KryptonContextMenu = value; } @@ -801,7 +802,7 @@ public KryptonContextMenu? KryptonContextMenu [DefaultValue(false)] public bool AllowButtonSpecToolTips { - get => MaskedTextBox?.AllowButtonSpecToolTips ?? false; + get => MaskedTextBox.AllowButtonSpecToolTips; set => MaskedTextBox.AllowButtonSpecToolTips = value; } @@ -813,7 +814,7 @@ public bool AllowButtonSpecToolTips [DefaultValue(false)] public bool AllowButtonSpecToolTipPriority { - get => MaskedTextBox?.AllowButtonSpecToolTipPriority ?? false; + get => MaskedTextBox.AllowButtonSpecToolTipPriority; set => MaskedTextBox.AllowButtonSpecToolTipPriority = value; } @@ -850,7 +851,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase MaskedTextBoxView { get; set; } + public ViewBase? MaskedTextBoxView { get; set; } #endregion @@ -1005,50 +1006,48 @@ private void UnmonitorControl(KryptonMaskedTextBox c) c.TrackMouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnMaskedTextBoxTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnMaskedTextBoxTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnMaskedTextBoxTextAlignChanged(object sender, EventArgs e) => OnTextAlignChanged(e); + private void OnMaskedTextBoxTextAlignChanged(object? sender, EventArgs e) => OnTextAlignChanged(e); - private void OnMaskedMaskChanged(object sender, EventArgs e) => OnMaskChanged(e); + private void OnMaskedMaskChanged(object? sender, EventArgs e) => OnMaskChanged(e); - private void OnMaskedIsOverwriteModeChanged(object sender, EventArgs e) => OnIsOverwriteModeChanged(e); + private void OnMaskedIsOverwriteModeChanged(object? sender, EventArgs e) => OnIsOverwriteModeChanged(e); - private void OnMaskedMaskInputRejected(object sender, MaskInputRejectedEventArgs e) => OnMaskInputRejected(e); + private void OnMaskedMaskInputRejected(object? sender, MaskInputRejectedEventArgs e) => OnMaskInputRejected(e); - private void OnMaskedTypeValidationCompleted(object sender, TypeValidationEventArgs e) => OnTypeValidationCompleted(e); + private void OnMaskedTypeValidationCompleted(object? sender, TypeValidationEventArgs e) => OnTypeValidationCompleted(e); - private void OnMaskedTextBoxHideSelectionChanged(object sender, EventArgs e) => OnHideSelectionChanged(e); + private void OnMaskedTextBoxHideSelectionChanged(object? sender, EventArgs e) => OnHideSelectionChanged(e); - private void OnMaskedTextBoxModifiedChanged(object sender, EventArgs e) => OnModifiedChanged(e); + private void OnMaskedTextBoxModifiedChanged(object? sender, EventArgs e) => OnModifiedChanged(e); - private void OnMaskedTextBoxReadOnlyChanged(object sender, EventArgs e) => OnReadOnlyChanged(e); + private void OnMaskedTextBoxReadOnlyChanged(object? sender, EventArgs e) => OnReadOnlyChanged(e); - private void OnMaskedTextBoxGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnMaskedTextBoxGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnMaskedTextBoxLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnMaskedTextBoxLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnMaskedTextBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnMaskedTextBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnMaskedTextBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnMaskedTextBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnMaskedTextBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnMaskedTextBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnMaskedTextBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnMaskedTextBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnRibbonPaletteChanged(object sender, EventArgs e) + private void OnRibbonPaletteChanged(object? sender, EventArgs e) { - if (MaskedTextBox != null) - { - MaskedTextBox.Palette = Ribbon?.GetResolvedPalette(); - } + MaskedTextBox.PaletteMode = Ribbon!.PaletteMode; + MaskedTextBox.LocalCustomPalette = Ribbon!.LocalCustomPalette; } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs index 5fb1f264d..10e3efbee 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupNumericUpDown.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -124,7 +124,7 @@ public KryptonRibbonGroupNumericUpDown() }; // Hook into events to expose via this container - NumericUpDown.ValueChanged += OnNumericUpDownValueChanged; + NumericUpDown!.ValueChanged += OnNumericUpDownValueChanged; NumericUpDown.GotFocus += OnNumericUpDownGotFocus; NumericUpDown.LostFocus += OnNumericUpDownLostFocus; NumericUpDown.KeyDown += OnNumericUpDownKeyDown; @@ -161,7 +161,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the Wrapped Controls Tooltips. /// - public override ToolTipValues ToolTipValues => NumericUpDown.ToolTipValues; + public override ToolTipValues ToolTipValues => NumericUpDown!.ToolTipValues; /// /// Gets access to the owning ribbon control. @@ -175,11 +175,12 @@ public override KryptonRibbon? Ribbon { base.Ribbon = value; - if (Ribbon != null) + if (Ribbon is not null) { // Use the same palette in the numeric up-down as the ribbon, plus we need // to know when the ribbon palette changes so we can reflect that change - NumericUpDown.Palette = Ribbon.GetResolvedPalette(); + NumericUpDown!.PaletteMode = Ribbon.PaletteMode; + NumericUpDown.LocalCustomPalette = Ribbon.LocalCustomPalette; Ribbon.PaletteChanged += OnRibbonPaletteChanged; } } @@ -207,7 +208,7 @@ public override KryptonRibbon? Ribbon [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Always)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public KryptonNumericUpDown NumericUpDown { get; private set; } + public KryptonNumericUpDown? NumericUpDown { get; private set; } /// /// Gets and sets the key tip for the ribbon group numeric up-down. @@ -225,7 +226,7 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "X"; + value = @"X"; } _keyTip = value.ToUpper(); @@ -240,8 +241,8 @@ public string KeyTip [DefaultValue(0)] public int DecimalPlaces { - get => NumericUpDown.DecimalPlaces; - set => NumericUpDown.DecimalPlaces = value; + get => NumericUpDown!.DecimalPlaces; + set => NumericUpDown!.DecimalPlaces = value; } /// @@ -252,8 +253,8 @@ public int DecimalPlaces [DefaultValue(typeof(decimal), "1")] public decimal Increment { - get => NumericUpDown.Increment; - set => NumericUpDown.Increment = value; + get => NumericUpDown!.Increment; + set => NumericUpDown!.Increment = value; } /// @@ -265,8 +266,8 @@ public decimal Increment [DefaultValue(typeof(decimal), "100")] public decimal Maximum { - get => NumericUpDown.Maximum; - set => NumericUpDown.Maximum = value; + get => NumericUpDown!.Maximum; + set => NumericUpDown!.Maximum = value; } /// @@ -278,8 +279,8 @@ public decimal Maximum [DefaultValue(typeof(decimal), "0")] public decimal Minimum { - get => NumericUpDown.Minimum; - set => NumericUpDown.Minimum = value; + get => NumericUpDown!.Minimum; + set => NumericUpDown!.Minimum = value; } /// @@ -291,8 +292,8 @@ public decimal Minimum [Localizable(true)] public bool ThousandsSeparator { - get => NumericUpDown.ThousandsSeparator; - set => NumericUpDown.ThousandsSeparator = value; + get => NumericUpDown!.ThousandsSeparator; + set => NumericUpDown!.ThousandsSeparator = value; } /// @@ -304,8 +305,8 @@ public bool ThousandsSeparator [Bindable(true)] public decimal Value { - get => NumericUpDown.Value; - set => NumericUpDown.Value = value; + get => NumericUpDown!.Value; + set => NumericUpDown!.Value = value; } /// @@ -317,8 +318,8 @@ public decimal Value [Localizable(true)] public HorizontalAlignment TextAlign { - get => NumericUpDown.TextAlign; - set => NumericUpDown.TextAlign = value; + get => NumericUpDown!.TextAlign; + set => NumericUpDown!.TextAlign = value; } /// @@ -329,8 +330,8 @@ public HorizontalAlignment TextAlign [DefaultValue(false)] public bool Hexadecimal { - get => NumericUpDown.Hexadecimal; - set => NumericUpDown.Hexadecimal = value; + get => NumericUpDown!.Hexadecimal; + set => NumericUpDown!.Hexadecimal = value; } /// @@ -342,8 +343,8 @@ public bool Hexadecimal [Localizable(true)] public LeftRightAlignment UpDownAlign { - get => NumericUpDown.UpDownAlign; - set => NumericUpDown.UpDownAlign = value; + get => NumericUpDown!.UpDownAlign; + set => NumericUpDown!.UpDownAlign = value; } /// @@ -354,8 +355,8 @@ public LeftRightAlignment UpDownAlign [DefaultValue(true)] public bool InterceptArrowKeys { - get => NumericUpDown.InterceptArrowKeys; - set => NumericUpDown.InterceptArrowKeys = value; + get => NumericUpDown!.InterceptArrowKeys; + set => NumericUpDown!.InterceptArrowKeys = value; } /// @@ -367,8 +368,8 @@ public bool InterceptArrowKeys [DefaultValue(false)] public bool ReadOnly { - get => NumericUpDown.ReadOnly; - set => NumericUpDown.ReadOnly = value; + get => NumericUpDown!.ReadOnly; + set => NumericUpDown!.ReadOnly = value; } /// @@ -377,7 +378,7 @@ public bool ReadOnly [Category(@"Visuals")] [Description(@"Collection of button specifications.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonNumericUpDown.NumericUpDownButtonSpecCollection ButtonSpecs => NumericUpDown.ButtonSpecs; + public KryptonNumericUpDown.NumericUpDownButtonSpecCollection ButtonSpecs => NumericUpDown!.ButtonSpecs; /// /// Gets and sets the visible state of the numeric up-down. @@ -442,8 +443,8 @@ public bool Enabled [DefaultValue(typeof(Size), "121, 0")] public Size MinimumSize { - get => NumericUpDown.MinimumSize; - set => NumericUpDown.MinimumSize = value; + get => NumericUpDown!.MinimumSize; + set => NumericUpDown!.MinimumSize = value; } /// @@ -454,8 +455,8 @@ public Size MinimumSize [DefaultValue(typeof(Size), "121, 0")] public Size MaximumSize { - get => NumericUpDown.MaximumSize; - set => NumericUpDown.MaximumSize = value; + get => NumericUpDown!.MaximumSize; + set => NumericUpDown!.MaximumSize = value; } /// @@ -466,8 +467,8 @@ public Size MaximumSize [DefaultValue(null)] public ContextMenuStrip? ContextMenuStrip { - get => NumericUpDown.ContextMenuStrip; - set => NumericUpDown.ContextMenuStrip = value; + get => NumericUpDown!.ContextMenuStrip; + set => NumericUpDown!.ContextMenuStrip = value; } /// @@ -478,8 +479,8 @@ public ContextMenuStrip? ContextMenuStrip [DefaultValue(null)] public KryptonContextMenu? KryptonContextMenu { - get => NumericUpDown.KryptonContextMenu; - set => NumericUpDown.KryptonContextMenu = value; + get => NumericUpDown!.KryptonContextMenu; + set => NumericUpDown!.KryptonContextMenu = value; } /// @@ -490,8 +491,8 @@ public KryptonContextMenu? KryptonContextMenu [DefaultValue(false)] public bool AllowButtonSpecToolTips { - get => NumericUpDown.AllowButtonSpecToolTips; - set => NumericUpDown.AllowButtonSpecToolTips = value; + get => NumericUpDown!.AllowButtonSpecToolTips; + set => NumericUpDown!.AllowButtonSpecToolTips = value; } /// @@ -502,8 +503,8 @@ public bool AllowButtonSpecToolTips [DefaultValue(false)] public bool AllowButtonSpecToolTipPriority { - get => NumericUpDown.AllowButtonSpecToolTipPriority; - set => NumericUpDown.AllowButtonSpecToolTipPriority = value; + get => NumericUpDown!.AllowButtonSpecToolTipPriority; + set => NumericUpDown!.AllowButtonSpecToolTipPriority = value; } /// @@ -511,7 +512,7 @@ public bool AllowButtonSpecToolTipPriority /// /// The position of the first character in the current text selection within the text box. /// The number of characters to select. - public void Select(int start, int length) => NumericUpDown.Select(start, length); + public void Select(int start, int length) => NumericUpDown!.Select(start, length); /// /// Gets and sets the maximum allowed size of the item. @@ -574,7 +575,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public IKryptonDesignObject NumericUpDownDesigner { get; set; } + public IKryptonDesignObject? NumericUpDownDesigner { get; set; } /// /// Internal design time properties. @@ -582,7 +583,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase NumericUpDownView { get; set; } + public ViewBase? NumericUpDownView { get; set; } #endregion @@ -637,7 +638,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, #endregion #region Internal - internal Control LastParentControl { get; set; } + internal Control? LastParentControl { get; set; } internal KryptonNumericUpDown? LastNumericUpDown { get; set; } @@ -660,7 +661,7 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) // Can the numeric up-down take the focus if (LastNumericUpDown is { CanFocus: true }) { - LastNumericUpDown.NumericUpDown.Focus(); + LastNumericUpDown.NumericUpDown!.Focus(); } return true; @@ -690,29 +691,34 @@ private void UnmonitorControl(KryptonNumericUpDown c) c.TrackMouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnNumericUpDownValueChanged(object sender, EventArgs e) => OnValueChanged(e); + private void OnNumericUpDownValueChanged(object? sender, EventArgs e) => OnValueChanged(e); - private void OnNumericUpDownGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnNumericUpDownGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnNumericUpDownLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnNumericUpDownLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnNumericUpDownKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnNumericUpDownKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnNumericUpDownKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnNumericUpDownKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnNumericUpDownKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnNumericUpDownKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnNumericUpDownPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnNumericUpDownPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + + private void OnRibbonPaletteChanged(object? sender, EventArgs e) + { + NumericUpDown!.PaletteMode = Ribbon!.PaletteMode; + NumericUpDown.LocalCustomPalette = Ribbon.LocalCustomPalette; + } - private void OnRibbonPaletteChanged(object sender, EventArgs e) => NumericUpDown.Palette = Ribbon.GetResolvedPalette(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs index f126869d2..2493a66e1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -400,7 +400,7 @@ protected virtual void OnClick(EventHandler? finishDelegate) { var fireDelegate = true; - if (!Ribbon.InDesignMode) + if (!Ribbon!.InDesignMode) { if (Enabled) { diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs index f6f2008cb..a54dda08e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupRichTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -194,7 +194,7 @@ public KryptonRibbonGroupRichTextBox() }; // Hook into events to expose via our container - RichTextBox.AcceptsTabChanged += OnRichTextBoxAcceptsTabChanged; + RichTextBox!.AcceptsTabChanged += OnRichTextBoxAcceptsTabChanged; RichTextBox.TextChanged += OnRichTextBoxTextChanged; RichTextBox.HideSelectionChanged += OnRichTextBoxHideSelectionChanged; RichTextBox.ModifiedChanged += OnRichTextBoxModifiedChanged; @@ -227,7 +227,7 @@ protected override void Dispose(bool disposing) if (RichTextBox != null) { UnmonitorControl(RichTextBox); - RichTextBox.Dispose(); + RichTextBox!.Dispose(); RichTextBox = null; } } @@ -253,7 +253,8 @@ public override KryptonRibbon? Ribbon { // Use the same palette in the text box as the ribbon, plus we need // to know when the ribbon palette changes so we can reflect that change - RichTextBox.Palette = Ribbon.GetResolvedPalette(); + RichTextBox!.PaletteMode = Ribbon!.PaletteMode; + RichTextBox.LocalCustomPalette = Ribbon!.LocalCustomPalette; Ribbon.PaletteChanged += OnRibbonPaletteChanged; } } @@ -281,7 +282,7 @@ public override KryptonRibbon? Ribbon [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Always)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public KryptonRichTextBox RichTextBox { get; private set; } + public KryptonRichTextBox? RichTextBox { get; private set; } /// /// Gets and sets the key tip for the ribbon group rich text box. @@ -299,7 +300,7 @@ public string KeyTip { if (string.IsNullOrEmpty(value)) { - value = "X"; + value = @"X"; } _keyTip = value.ToUpper(); @@ -369,8 +370,8 @@ public bool Enabled [DefaultValue(typeof(Size), "121, 0")] public Size MinimumSize { - get => RichTextBox.MinimumSize; - set => RichTextBox.MinimumSize = value; + get => RichTextBox!.MinimumSize; + set => RichTextBox!.MinimumSize = value; } /// @@ -381,8 +382,8 @@ public Size MinimumSize [DefaultValue(typeof(Size), "121, 0")] public Size MaximumSize { - get => RichTextBox.MaximumSize; - set => RichTextBox.MaximumSize = value; + get => RichTextBox!.MaximumSize; + set => RichTextBox!.MaximumSize = value; } /// @@ -393,8 +394,8 @@ public Size MaximumSize [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] public string Text { - get => RichTextBox.Text; - set => RichTextBox.Text = value; + get => RichTextBox!.Text; + set => RichTextBox!.Text = value; } /// @@ -402,7 +403,7 @@ public string Text /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int TextLength => RichTextBox.TextLength; + public int TextLength => RichTextBox!.TextLength; /// /// Gets and sets the associated context menu strip. @@ -412,8 +413,8 @@ public string Text [DefaultValue(null)] public ContextMenuStrip? ContextMenuStrip { - get => RichTextBox.ContextMenuStrip; - set => RichTextBox.ContextMenuStrip = value; + get => RichTextBox!.ContextMenuStrip; + set => RichTextBox!.ContextMenuStrip = value; } /// @@ -424,8 +425,8 @@ public ContextMenuStrip? ContextMenuStrip [DefaultValue(null)] public KryptonContextMenu? KryptonContextMenu { - get => RichTextBox.KryptonContextMenu; - set => RichTextBox.KryptonContextMenu = value; + get => RichTextBox!.KryptonContextMenu; + set => RichTextBox!.KryptonContextMenu = value; } /// @@ -439,8 +440,8 @@ public KryptonContextMenu? KryptonContextMenu [Localizable(true)] public string[] Lines { - get => RichTextBox.Lines; - set => RichTextBox.Lines = value; + get => RichTextBox!.Lines; + set => RichTextBox!.Lines = value; } /// @@ -452,8 +453,8 @@ public string[] Lines [Localizable(true)] public RichTextBoxScrollBars ScrollBars { - get => RichTextBox.ScrollBars; - set => RichTextBox.ScrollBars = value; + get => RichTextBox!.ScrollBars; + set => RichTextBox!.ScrollBars = value; } /// @@ -465,8 +466,8 @@ public RichTextBoxScrollBars ScrollBars [Localizable(true)] public bool WordWrap { - get => RichTextBox.WordWrap; - set => RichTextBox.WordWrap = value; + get => RichTextBox!.WordWrap; + set => RichTextBox!.WordWrap = value; } /// @@ -478,8 +479,8 @@ public bool WordWrap [Localizable(true)] public int RightMargin { - get => RichTextBox.RightMargin; - set => RichTextBox.RightMargin = value; + get => RichTextBox!.RightMargin; + set => RichTextBox!.RightMargin = value; } /// @@ -490,8 +491,8 @@ public int RightMargin [DefaultValue(false)] public bool ShowSelectionMargin { - get => RichTextBox.ShowSelectionMargin; - set => RichTextBox.ShowSelectionMargin = value; + get => RichTextBox!.ShowSelectionMargin; + set => RichTextBox!.ShowSelectionMargin = value; } /// @@ -503,8 +504,8 @@ public bool ShowSelectionMargin [Localizable(true)] public float ZoomFactor { - get => RichTextBox.ZoomFactor; - set => RichTextBox.ZoomFactor = value; + get => RichTextBox!.ZoomFactor; + set => RichTextBox!.ZoomFactor = value; } /// @@ -517,8 +518,8 @@ public float ZoomFactor [Localizable(true)] public bool Multiline { - get => RichTextBox.Multiline; - set => RichTextBox.Multiline = value; + get => RichTextBox!.Multiline; + set => RichTextBox!.Multiline = value; } /// @@ -529,8 +530,8 @@ public bool Multiline [DefaultValue(false)] public bool AcceptsTab { - get => RichTextBox.AcceptsTab; - set => RichTextBox.AcceptsTab = value; + get => RichTextBox!.AcceptsTab; + set => RichTextBox!.AcceptsTab = value; } /// @@ -541,8 +542,8 @@ public bool AcceptsTab [DefaultValue(true)] public bool HideSelection { - get => RichTextBox.HideSelection; - set => RichTextBox.HideSelection = value; + get => RichTextBox!.HideSelection; + set => RichTextBox!.HideSelection = value; } /// @@ -554,8 +555,8 @@ public bool HideSelection [Localizable(true)] public int MaxLength { - get => RichTextBox.MaxLength; - set => RichTextBox.MaxLength = value; + get => RichTextBox!.MaxLength; + set => RichTextBox!.MaxLength = value; } /// @@ -566,8 +567,8 @@ public int MaxLength [DefaultValue(false)] public bool AutoWordSelection { - get => RichTextBox.AutoWordSelection; - set => RichTextBox.AutoWordSelection = value; + get => RichTextBox!.AutoWordSelection; + set => RichTextBox!.AutoWordSelection = value; } /// @@ -579,8 +580,8 @@ public bool AutoWordSelection [Localizable(true)] public int BulletIndent { - get => RichTextBox.BulletIndent; - set => RichTextBox.BulletIndent = value; + get => RichTextBox!.BulletIndent; + set => RichTextBox!.BulletIndent = value; } /// @@ -591,8 +592,8 @@ public int BulletIndent [DefaultValue(true)] public bool DetectUrls { - get => RichTextBox.DetectUrls; - set => RichTextBox.DetectUrls = value; + get => RichTextBox!.DetectUrls; + set => RichTextBox!.DetectUrls = value; } /// @@ -603,8 +604,8 @@ public bool DetectUrls [DefaultValue(false)] public bool EnableAutoDragDrop { - get => RichTextBox.EnableAutoDragDrop; - set => RichTextBox.EnableAutoDragDrop = value; + get => RichTextBox!.EnableAutoDragDrop; + set => RichTextBox!.EnableAutoDragDrop = value; } /// @@ -616,8 +617,8 @@ public bool EnableAutoDragDrop [DefaultValue(false)] public bool ReadOnly { - get => RichTextBox.ReadOnly; - set => RichTextBox.ReadOnly = value; + get => RichTextBox!.ReadOnly; + set => RichTextBox!.ReadOnly = value; } /// @@ -628,14 +629,14 @@ public bool ReadOnly [DefaultValue(true)] public bool ShortcutsEnabled { - get => RichTextBox.ShortcutsEnabled; - set => RichTextBox.ShortcutsEnabled = value; + get => RichTextBox!.ShortcutsEnabled; + set => RichTextBox!.ShortcutsEnabled = value; } /// /// Gets access to the Wrapped Controls Tooltips. /// - public override ToolTipValues ToolTipValues => RichTextBox.ToolTipValues; + public override ToolTipValues ToolTipValues => RichTextBox!.ToolTipValues; /// /// Gets and sets a value indicating if tooltips should be Displayed for button specs. @@ -645,8 +646,8 @@ public bool ShortcutsEnabled [DefaultValue(false)] public bool AllowButtonSpecToolTips { - get => RichTextBox.AllowButtonSpecToolTips; - set => RichTextBox.AllowButtonSpecToolTips = value; + get => RichTextBox!.AllowButtonSpecToolTips; + set => RichTextBox!.AllowButtonSpecToolTips = value; } /// @@ -657,8 +658,8 @@ public bool AllowButtonSpecToolTips [DefaultValue(false)] public bool AllowButtonSpecToolTipPriority { - get => RichTextBox.AllowButtonSpecToolTipPriority; - set => RichTextBox.AllowButtonSpecToolTipPriority = value; + get => RichTextBox!.AllowButtonSpecToolTipPriority; + set => RichTextBox!.AllowButtonSpecToolTipPriority = value; } /// @@ -667,28 +668,28 @@ public bool AllowButtonSpecToolTipPriority [Category(@"Visuals")] [Description(@"Collection of button specifications.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonRichTextBox.RichTextBoxButtonSpecCollection ButtonSpecs => RichTextBox.ButtonSpecs; + public KryptonRichTextBox.RichTextBoxButtonSpecCollection ButtonSpecs => RichTextBox!.ButtonSpecs; /// /// Gets and sets if the control can redo a previously undo operation. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool CanRedo => RichTextBox.CanRedo; + public bool CanRedo => RichTextBox!.CanRedo; /// /// Gets a value indicating whether the user can undo the previous operation in a rich text box control. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool CanUndo => RichTextBox.CanUndo; + public bool CanUndo => RichTextBox!.CanUndo; /// /// Gets a value indicating whether the contents have changed since last last. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool Modified => RichTextBox.Modified; + public bool Modified => RichTextBox!.Modified; /// /// Gets and sets the language option. @@ -697,8 +698,8 @@ public bool AllowButtonSpecToolTipPriority [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public RichTextBoxLanguageOptions LanguageOption { - get => RichTextBox.LanguageOption; - set => RichTextBox.LanguageOption = value; + get => RichTextBox!.LanguageOption; + set => RichTextBox!.LanguageOption = value; } /// @@ -706,14 +707,14 @@ public RichTextBoxLanguageOptions LanguageOption /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string RedoActionName => RichTextBox.RedoActionName; + public string? RedoActionName => RichTextBox!.RedoActionName; /// /// Gets and sets the name of the action to be undone. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string UndoActionName => RichTextBox.UndoActionName; + public string UndoActionName => RichTextBox!.UndoActionName!; /// /// Gets and sets if keyboard shortcuts are enabled. @@ -723,8 +724,8 @@ public RichTextBoxLanguageOptions LanguageOption [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool RichTextShortcutsEnabled { - get => RichTextBox.RichTextShortcutsEnabled; - set => RichTextBox.RichTextShortcutsEnabled = value; + get => RichTextBox!.RichTextShortcutsEnabled; + set => RichTextBox!.RichTextShortcutsEnabled = value; } /// @@ -735,8 +736,8 @@ public bool RichTextShortcutsEnabled [RefreshProperties(RefreshProperties.All)] public string Rtf { - get => RichTextBox.Rtf; - set => RichTextBox.Rtf = value; + get => RichTextBox!.Rtf; + set => RichTextBox!.Rtf = value; } /// @@ -747,8 +748,8 @@ public string Rtf [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string SelectedRtf { - get => RichTextBox.SelectedRtf; - set => RichTextBox.SelectedRtf = value; + get => RichTextBox!.SelectedRtf; + set => RichTextBox!.SelectedRtf = value; } /// @@ -758,8 +759,8 @@ public string SelectedRtf [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string SelectedText { - get => RichTextBox.SelectedText; - set => RichTextBox.SelectedText = value; + get => RichTextBox!.SelectedText; + set => RichTextBox!.SelectedText = value; } /// @@ -770,8 +771,8 @@ public string SelectedText [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public HorizontalAlignment SelectionAlignment { - get => RichTextBox.SelectionAlignment; - set => RichTextBox.SelectionAlignment = value; + get => RichTextBox!.SelectionAlignment; + set => RichTextBox!.SelectionAlignment = value; } /// @@ -781,8 +782,8 @@ public HorizontalAlignment SelectionAlignment [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Color SelectionBackColor { - get => RichTextBox.SelectionBackColor; - set => RichTextBox.SelectionBackColor = value; + get => RichTextBox!.SelectionBackColor; + set => RichTextBox!.SelectionBackColor = value; } /// @@ -792,8 +793,8 @@ public Color SelectionBackColor [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool SelectionBullet { - get => RichTextBox.SelectionBullet; - set => RichTextBox.SelectionBullet = value; + get => RichTextBox!.SelectionBullet; + set => RichTextBox!.SelectionBullet = value; } /// @@ -803,8 +804,8 @@ public bool SelectionBullet [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionCharOffset { - get => RichTextBox.SelectionCharOffset; - set => RichTextBox.SelectionCharOffset = value; + get => RichTextBox!.SelectionCharOffset; + set => RichTextBox!.SelectionCharOffset = value; } /// @@ -814,8 +815,8 @@ public int SelectionCharOffset [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Color SelectionColor { - get => RichTextBox.SelectionColor; - set => RichTextBox.SelectionColor = value; + get => RichTextBox!.SelectionColor; + set => RichTextBox!.SelectionColor = value; } /// @@ -825,8 +826,8 @@ public Color SelectionColor [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Font SelectionFont { - get => RichTextBox.SelectionFont; - set => RichTextBox.SelectionFont = value; + get => RichTextBox!.SelectionFont; + set => RichTextBox!.SelectionFont = value; } /// @@ -836,8 +837,8 @@ public Font SelectionFont [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionHangingIndent { - get => RichTextBox.SelectionHangingIndent; - set => RichTextBox.SelectionHangingIndent = value; + get => RichTextBox!.SelectionHangingIndent; + set => RichTextBox!.SelectionHangingIndent = value; } /// @@ -847,8 +848,8 @@ public int SelectionHangingIndent [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionIndent { - get => RichTextBox.SelectionIndent; - set => RichTextBox.SelectionIndent = value; + get => RichTextBox!.SelectionIndent; + set => RichTextBox!.SelectionIndent = value; } /// @@ -858,8 +859,8 @@ public int SelectionIndent [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionLength { - get => RichTextBox.SelectionLength; - set => RichTextBox.SelectionLength = value; + get => RichTextBox!.SelectionLength; + set => RichTextBox!.SelectionLength = value; } /// @@ -869,8 +870,8 @@ public int SelectionLength [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionProtected { - get => RichTextBox.SelectionLength; - set => RichTextBox.SelectionLength = value; + get => RichTextBox!.SelectionLength; + set => RichTextBox!.SelectionLength = value; } /// @@ -880,8 +881,8 @@ public int SelectionProtected [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionRightIndent { - get => RichTextBox.SelectionRightIndent; - set => RichTextBox.SelectionRightIndent = value; + get => RichTextBox!.SelectionRightIndent; + set => RichTextBox!.SelectionRightIndent = value; } /// @@ -891,8 +892,8 @@ public int SelectionRightIndent [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionStart { - get => RichTextBox.SelectionStart; - set => RichTextBox.SelectionStart = value; + get => RichTextBox!.SelectionStart; + set => RichTextBox!.SelectionStart = value; } /// @@ -902,8 +903,8 @@ public int SelectionStart [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int[] SelectionTabs { - get => RichTextBox.SelectionTabs; - set => RichTextBox.SelectionTabs = value; + get => RichTextBox!.SelectionTabs; + set => RichTextBox!.SelectionTabs = value; } /// @@ -911,59 +912,59 @@ public int[] SelectionTabs /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public RichTextBoxSelectionTypes SelectionType => RichTextBox.SelectionType; + public RichTextBoxSelectionTypes SelectionType => RichTextBox!.SelectionType; /// /// Appends text to the current text of a rich text box. /// /// The text to append to the current contents of the text box. - public void AppendText(string text) => RichTextBox.AppendText(text); + public void AppendText(string text) => RichTextBox!.AppendText(text); /// /// Clears all text from the text box control. /// - public void Clear() => RichTextBox.Clear(); + public void Clear() => RichTextBox!.Clear(); /// /// Clears information about the most recent operation from the undo buffer of the rich text box. /// - public void ClearUndo() => RichTextBox.ClearUndo(); + public void ClearUndo() => RichTextBox!.ClearUndo(); /// /// Copies the current selection in the text box to the Clipboard. /// - public void Copy() => RichTextBox.Copy(); + public void Copy() => RichTextBox!.Copy(); /// /// Moves the current selection in the text box to the Clipboard. /// - public void Cut() => RichTextBox.Cut(); + public void Cut() => RichTextBox!.Cut(); /// /// Specifies that the value of the SelectionLength property is zero so that no characters are selected in the control. /// - public void DeselectAll() => RichTextBox.DeselectAll(); + public void DeselectAll() => RichTextBox!.DeselectAll(); /// /// Determines whether you can paste information from the Clipboard in the specified data format. /// /// One of the System.Windows.Forms.DataFormats.Format values. /// true if you can paste data from the Clipboard in the specified data format; otherwise, false. - public bool CanPaste(DataFormats.Format clipFormat) => RichTextBox.CanPaste(clipFormat); + public bool CanPaste(DataFormats.Format clipFormat) => RichTextBox!.CanPaste(clipFormat); /// /// Searches the text in a RichTextBox control for a string. /// /// The text to locate in the control. /// The location within the control where the search text was found or -1 if the search string is not found or an empty search string is specified in the str parameter. - public int Find(string str) => RichTextBox.Find(str); + public int Find(string str) => RichTextBox!.Find(str); /// /// Searches the text of a RichTextBox control for the first instance of a character from a list of characters. /// /// The array of characters to search for. /// The location within the control where the search characters were found or -1 if the search characters are not found or an empty search character set is specified in the char parameter. - public int Find(char[] characterSet) => RichTextBox.Find(characterSet); + public int Find(char[] characterSet) => RichTextBox!.Find(characterSet); /// /// Searches the text of a RichTextBox control, at a specific starting point, for the first instance of a character from a list of characters. @@ -971,7 +972,7 @@ public int[] SelectionTabs /// The array of characters to search for. /// The location within the control's text at which to begin searching. /// The location within the control where the search characters are found. - public int Find(char[] characterSet, int start) => RichTextBox.Find(characterSet, start); + public int Find(char[] characterSet, int start) => RichTextBox!.Find(characterSet, start); /// /// Searches the text in a RichTextBox control for a string with specific options applied to the search. @@ -979,7 +980,7 @@ public int[] SelectionTabs /// The text to locate in the control. /// A bitwise combination of the RichTextBoxFinds values. /// The location within the control where the search text was found. - public int Find(string str, RichTextBoxFinds options) => RichTextBox.Find(str, options); + public int Find(string str, RichTextBoxFinds options) => RichTextBox!.Find(str, options); /// /// Searches a range of text in a RichTextBox control for the first instance of a character from a list of characters. @@ -988,7 +989,7 @@ public int[] SelectionTabs /// The location within the control's text at which to begin searching. /// The location within the control's text at which to end searching. /// The location within the control where the search characters are found. - public int Find(char[] characterSet, int start, int end) => RichTextBox.Find(characterSet, start, end); + public int Find(char[] characterSet, int start, int end) => RichTextBox!.Find(characterSet, start, end); /// /// Searches the text in a RichTextBox control for a string at a specific location within the control and with specific options applied to the search. @@ -997,7 +998,7 @@ public int[] SelectionTabs /// The location within the control's text at which to begin searching. /// A bitwise combination of the RichTextBoxFinds values. /// The location within the control where the search text was found. - public int Find(string str, int start, RichTextBoxFinds options) => RichTextBox.Find(str, start, options); + public int Find(string str, int start, RichTextBoxFinds options) => RichTextBox!.Find(str, start, options); /// /// Searches the text in a RichTextBox control for a string within a range of text within the control and with specific options applied to the search. @@ -1007,126 +1008,126 @@ public int[] SelectionTabs /// The location within the control's text at which to end searching. This value must be equal to negative one (-1) or greater than or equal to the start parameter. /// A bitwise combination of the RichTextBoxFinds values. /// - public int Find(string str, int start, int end, RichTextBoxFinds options) => RichTextBox.Find(str, start, end, options); + public int Find(string str, int start, int end, RichTextBoxFinds options) => RichTextBox!.Find(str, start, end, options); /// /// Retrieves the character that is closest to the specified location within the control. /// /// The location from which to seek the nearest character. /// The character at the specified location. - public int GetCharFromPosition(Point pt) => RichTextBox.GetCharFromPosition(pt); + public int GetCharFromPosition(Point pt) => RichTextBox!.GetCharFromPosition(pt); /// /// Retrieves the index of the character nearest to the specified location. /// /// The location to search. /// The zero-based character index at the specified location. - public int GetCharIndexFromPosition(Point pt) => RichTextBox.GetCharIndexFromPosition(pt); + public int GetCharIndexFromPosition(Point pt) => RichTextBox!.GetCharIndexFromPosition(pt); /// /// Retrieves the index of the first character of a given line. /// /// The line for which to get the index of its first character. /// The zero-based character index in the specified line. - public int GetFirstCharIndexFromLine(int lineNumber) => RichTextBox.GetFirstCharIndexFromLine(lineNumber); + public int GetFirstCharIndexFromLine(int lineNumber) => RichTextBox!.GetFirstCharIndexFromLine(lineNumber); /// /// Retrieves the index of the first character of the current line. /// /// The zero-based character index in the current line. - public int GetFirstCharIndexOfCurrentLine() => RichTextBox.GetFirstCharIndexOfCurrentLine(); + public int GetFirstCharIndexOfCurrentLine() => RichTextBox!.GetFirstCharIndexOfCurrentLine(); /// /// Retrieves the line number from the specified character position within the text of the RichTextBox control. /// /// The character index position to search. /// The zero-based line number in which the character index is located. - public int GetLineFromCharIndex(int index) => RichTextBox.GetLineFromCharIndex(index); + public int GetLineFromCharIndex(int index) => RichTextBox!.GetLineFromCharIndex(index); /// /// Retrieves the location within the control at the specified character index. /// /// The index of the character for which to retrieve the location. /// The location of the specified character. - public Point GetPositionFromCharIndex(int index) => RichTextBox.GetPositionFromCharIndex(index); + public Point GetPositionFromCharIndex(int index) => RichTextBox!.GetPositionFromCharIndex(index); /// /// Loads a rich text format (RTF) or standard ASCII text file into the RichTextBox control. /// /// The name and location of the file to load into the control. - public void LoadFile(string path) => RichTextBox.LoadFile(path); + public void LoadFile(string path) => RichTextBox!.LoadFile(path); /// /// Loads the contents of an existing data stream into the RichTextBox control. /// /// A stream of data to load into the RichTextBox control. /// One of the RichTextBoxStreamType values. - public void LoadFile(Stream data, RichTextBoxStreamType fileType) => RichTextBox.LoadFile(data, fileType); + public void LoadFile(Stream data, RichTextBoxStreamType fileType) => RichTextBox!.LoadFile(data, fileType); /// /// Loads a specific type of file into the RichTextBox control. /// /// The name and location of the file to load into the control. /// One of the RichTextBoxStreamType values. - public void LoadFile(string path, RichTextBoxStreamType fileType) => RichTextBox.LoadFile(path, fileType); + public void LoadFile(string path, RichTextBoxStreamType fileType) => RichTextBox!.LoadFile(path, fileType); /// /// Replaces the current selection in the text box with the contents of the Clipboard. /// - public void Paste() => RichTextBox.Paste(); + public void Paste() => RichTextBox!.Paste(); /// /// Undoes the last edit operation in the text box. /// - public void Undo() => RichTextBox.Undo(); + public void Undo() => RichTextBox!.Undo(); /// /// Pastes the contents of the Clipboard in the specified Clipboard format. /// /// The Clipboard format in which the data should be obtained from the Clipboard. - public void Paste(DataFormats.Format clipFormat) => RichTextBox.Paste(clipFormat); + public void Paste(DataFormats.Format clipFormat) => RichTextBox!.Paste(clipFormat); /// /// Reapplies the last operation that was undone in the control. /// - public void Redo() => RichTextBox.Redo(); + public void Redo() => RichTextBox!.Redo(); /// /// Saves the contents of the RichTextBox to a rich text format (RTF) file. /// /// The name and location of the file to save. - public void SaveFile(string path) => RichTextBox.SaveFile(path); + public void SaveFile(string path) => RichTextBox!.SaveFile(path); /// /// Saves the contents of a RichTextBox control to an open data stream. /// /// The data stream that contains the file to save to. /// One of the RichTextBoxStreamType values. - public void SaveFile(Stream data, RichTextBoxStreamType fileType) => RichTextBox.SaveFile(data, fileType); + public void SaveFile(Stream data, RichTextBoxStreamType fileType) => RichTextBox!.SaveFile(data, fileType); /// /// Saves the contents of the KryptonRichTextBox to a specific type of file. /// /// The name and location of the file to save. /// One of the RichTextBoxStreamType values. - public void SaveFile(string path, RichTextBoxStreamType fileType) => RichTextBox.SaveFile(path, fileType); + public void SaveFile(string path, RichTextBoxStreamType fileType) => RichTextBox!.SaveFile(path, fileType); /// /// Scrolls the contents of the control to the current caret position. /// - public void ScrollToCaret() => RichTextBox.ScrollToCaret(); + public void ScrollToCaret() => RichTextBox!.ScrollToCaret(); /// /// Selects a range of text in the control. /// /// The position of the first character in the current text selection within the text box. /// The number of characters to select. - public void Select(int start, int length) => RichTextBox.Select(start, length); + public void Select(int start, int length) => RichTextBox!.Select(start, length); /// /// Selects all text in the control. /// - public void SelectAll() => RichTextBox.SelectAll(); + public void SelectAll() => RichTextBox!.SelectAll(); /// /// Gets and sets the maximum allowed size of the item. @@ -1197,7 +1198,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase RichTextBoxView { get; set; } + public ViewBase? RichTextBoxView { get; set; } #endregion @@ -1364,49 +1365,57 @@ private void UnmonitorControl(KryptonRichTextBox c) c.TrackMouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnRichTextBoxAcceptsTabChanged(object sender, EventArgs e) => OnAcceptsTabChanged(e); + private void OnRichTextBoxAcceptsTabChanged(object? sender, EventArgs e) => OnAcceptsTabChanged(e); - private void OnRichTextBoxTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnRichTextBoxTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnRichTextBoxHideSelectionChanged(object sender, EventArgs e) => OnHideSelectionChanged(e); + private void OnRichTextBoxHideSelectionChanged(object? sender, EventArgs e) => OnHideSelectionChanged(e); - private void OnRichTextBoxModifiedChanged(object sender, EventArgs e) => OnModifiedChanged(e); + private void OnRichTextBoxModifiedChanged(object? sender, EventArgs e) => OnModifiedChanged(e); - private void OnRichTextBoxMultilineChanged(object sender, EventArgs e) => OnMultilineChanged(e); + private void OnRichTextBoxMultilineChanged(object? sender, EventArgs e) => OnMultilineChanged(e); - private void OnRichTextBoxReadOnlyChanged(object sender, EventArgs e) => OnReadOnlyChanged(e); + private void OnRichTextBoxReadOnlyChanged(object? sender, EventArgs e) => OnReadOnlyChanged(e); - private void OnRichTextBoxGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnRichTextBoxGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnRichTextBoxLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnRichTextBoxLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnRichTextBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnRichTextBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnRichTextBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnRichTextBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnRichTextBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnRichTextBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnRichTextBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnRichTextBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnRichTextBoxVScroll(object sender, EventArgs e) => OnVScroll(e); + private void OnRichTextBoxVScroll(object? sender, EventArgs e) => OnVScroll(e); - private void OnRichTextBoxHScroll(object sender, EventArgs e) => OnHScroll(e); + private void OnRichTextBoxHScroll(object? sender, EventArgs e) => OnHScroll(e); - private void OnRichTextBoxSelectionChanged(object sender, EventArgs e) => OnSelectionChanged(e); + private void OnRichTextBoxSelectionChanged(object? sender, EventArgs e) => OnSelectionChanged(e); - private void OnRichTextBoxProtected(object sender, EventArgs e) => OnProtected(e); + private void OnRichTextBoxProtected(object? sender, EventArgs e) => OnProtected(e); - private void OnRichTextBoxLinkClicked(object sender, LinkClickedEventArgs e) => OnLinkClicked(e); + private void OnRichTextBoxLinkClicked(object? sender, LinkClickedEventArgs e) => OnLinkClicked(e); + + private void OnRibbonPaletteChanged(object? sender, EventArgs e) + { + if (RichTextBox is not null && Ribbon is not null) + { + RichTextBox.PaletteMode = Ribbon.PaletteMode; + RichTextBox.LocalCustomPalette = Ribbon.LocalCustomPalette; + } + } - private void OnRibbonPaletteChanged(object sender, EventArgs e) => RichTextBox.Palette = Ribbon.GetResolvedPalette(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs index 47a900a3c..f943bf307 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -154,7 +154,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase SeparatorView { get; set; } + public ViewBase? SeparatorView { get; set; } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs index 4277ab554..27c8dbd32 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -164,7 +164,7 @@ public KryptonRibbonGroupTextBox() }; // Hook into events to expose via this container - TextBox.AcceptsTabChanged += OnTextBoxAcceptsTabChanged; + TextBox!.AcceptsTabChanged += OnTextBoxAcceptsTabChanged; TextBox.TextAlignChanged += OnTextBoxTextAlignChanged; TextBox.TextChanged += OnTextBoxTextChanged; TextBox.HideSelectionChanged += OnTextBoxHideSelectionChanged; @@ -193,7 +193,7 @@ protected override void Dispose(bool disposing) if (TextBox != null) { UnmonitorControl(TextBox); - TextBox.Dispose(); + TextBox!.Dispose(); TextBox = null; } } @@ -219,7 +219,8 @@ public override KryptonRibbon? Ribbon { // Use the same palette in the text box as the ribbon, plus we need // to know when the ribbon palette changes so we can reflect that change - TextBox.Palette = Ribbon.GetResolvedPalette(); + TextBox!.PaletteMode = Ribbon!.PaletteMode; + TextBox.LocalCustomPalette = Ribbon!.LocalCustomPalette; Ribbon.PaletteChanged += OnRibbonPaletteChanged; } } @@ -247,7 +248,7 @@ public override KryptonRibbon? Ribbon [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Always)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public KryptonTextBox TextBox { get; private set; } + public KryptonTextBox? TextBox { get; private set; } /// /// Gets and sets the key tip for the ribbon group text box. @@ -335,8 +336,8 @@ public bool Enabled [DefaultValue(typeof(Size), "121, 0")] public Size MinimumSize { - get => TextBox.MinimumSize; - set => TextBox.MinimumSize = value; + get => TextBox!.MinimumSize; + set => TextBox!.MinimumSize = value; } /// @@ -347,8 +348,8 @@ public Size MinimumSize [DefaultValue(typeof(Size), "121, 0")] public Size MaximumSize { - get => TextBox.MaximumSize; - set => TextBox.MaximumSize = value; + get => TextBox!.MaximumSize; + set => TextBox!.MaximumSize = value; } /// @@ -359,8 +360,8 @@ public Size MaximumSize [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] public string Text { - get => TextBox.Text; - set => TextBox.Text = value; + get => TextBox!.Text; + set => TextBox!.Text = value; } /// @@ -374,8 +375,8 @@ public string Text [Localizable(true)] public string[] Lines { - get => TextBox.Lines; - set => TextBox.Lines = value; + get => TextBox!.Lines; + set => TextBox!.Lines = value; } /// @@ -387,8 +388,8 @@ public string[] Lines [Localizable(true)] public ScrollBars ScrollBars { - get => TextBox.ScrollBars; - set => TextBox.ScrollBars = value; + get => TextBox!.ScrollBars; + set => TextBox!.ScrollBars = value; } /// @@ -400,8 +401,8 @@ public ScrollBars ScrollBars [Localizable(true)] public HorizontalAlignment TextAlign { - get => TextBox.TextAlign; - set => TextBox.TextAlign = value; + get => TextBox!.TextAlign; + set => TextBox!.TextAlign = value; } /// @@ -412,8 +413,8 @@ public HorizontalAlignment TextAlign [DefaultValue(null)] public ContextMenuStrip? ContextMenuStrip { - get => TextBox.ContextMenuStrip; - set => TextBox.ContextMenuStrip = value; + get => TextBox!.ContextMenuStrip; + set => TextBox!.ContextMenuStrip = value; } /// @@ -424,8 +425,8 @@ public ContextMenuStrip? ContextMenuStrip [DefaultValue(null)] public KryptonContextMenu? KryptonContextMenu { - get => TextBox.KryptonContextMenu; - set => TextBox.KryptonContextMenu = value; + get => TextBox!.KryptonContextMenu; + set => TextBox!.KryptonContextMenu = value; } /// @@ -437,8 +438,8 @@ public KryptonContextMenu? KryptonContextMenu [Localizable(true)] public bool WordWrap { - get => TextBox.WordWrap; - set => TextBox.WordWrap = value; + get => TextBox!.WordWrap; + set => TextBox!.WordWrap = value; } /// @@ -451,8 +452,8 @@ public bool WordWrap [Localizable(true)] public bool Multiline { - get => TextBox.Multiline; - set => TextBox.Multiline = value; + get => TextBox!.Multiline; + set => TextBox!.Multiline = value; } /// @@ -463,8 +464,8 @@ public bool Multiline [DefaultValue(false)] public bool AcceptsReturn { - get => TextBox.AcceptsReturn; - set => TextBox.AcceptsReturn = value; + get => TextBox!.AcceptsReturn; + set => TextBox!.AcceptsReturn = value; } /// @@ -475,8 +476,8 @@ public bool AcceptsReturn [DefaultValue(false)] public bool AcceptsTab { - get => TextBox.AcceptsTab; - set => TextBox.AcceptsTab = value; + get => TextBox!.AcceptsTab; + set => TextBox!.AcceptsTab = value; } /// @@ -487,8 +488,8 @@ public bool AcceptsTab [DefaultValue(typeof(CharacterCasing), "Normal")] public CharacterCasing CharacterCasing { - get => TextBox.CharacterCasing; - set => TextBox.CharacterCasing = value; + get => TextBox!.CharacterCasing; + set => TextBox!.CharacterCasing = value; } /// @@ -499,8 +500,8 @@ public CharacterCasing CharacterCasing [DefaultValue(true)] public bool HideSelection { - get => TextBox.HideSelection; - set => TextBox.HideSelection = value; + get => TextBox!.HideSelection; + set => TextBox!.HideSelection = value; } /// @@ -512,8 +513,8 @@ public bool HideSelection [Localizable(true)] public int MaxLength { - get => TextBox.MaxLength; - set => TextBox.MaxLength = value; + get => TextBox!.MaxLength; + set => TextBox!.MaxLength = value; } /// @@ -525,8 +526,8 @@ public int MaxLength [DefaultValue(false)] public bool ReadOnly { - get => TextBox.ReadOnly; - set => TextBox.ReadOnly = value; + get => TextBox!.ReadOnly; + set => TextBox!.ReadOnly = value; } /// @@ -537,8 +538,8 @@ public bool ReadOnly [DefaultValue(true)] public bool ShortcutsEnabled { - get => TextBox.ShortcutsEnabled; - set => TextBox.ShortcutsEnabled = value; + get => TextBox!.ShortcutsEnabled; + set => TextBox!.ShortcutsEnabled = value; } /// @@ -551,8 +552,8 @@ public bool ShortcutsEnabled [Localizable(true)] public char PasswordChar { - get => TextBox.PasswordChar; - set => TextBox.PasswordChar = value; + get => TextBox!.PasswordChar; + set => TextBox!.PasswordChar = value; } /// @@ -564,8 +565,8 @@ public char PasswordChar [DefaultValue(false)] public bool UseSystemPasswordChar { - get => TextBox.UseSystemPasswordChar; - set => TextBox.UseSystemPasswordChar = value; + get => TextBox!.UseSystemPasswordChar; + set => TextBox!.UseSystemPasswordChar = value; } /// @@ -579,21 +580,21 @@ public bool UseSystemPasswordChar [Browsable(true)] public AutoCompleteStringCollection AutoCompleteCustomSource { - get => TextBox.AutoCompleteCustomSource; - set => TextBox.AutoCompleteCustomSource = value; + get => TextBox!.AutoCompleteCustomSource; + set => TextBox!.AutoCompleteCustomSource = value; } /// - /// Gets or sets the text completion behavior of the textbox. + /// Gets or sets the text completion behavior of the TextBox!. /// - [Description(@"Indicates the text completion behavior of the textbox.")] + [Description(@"Indicates the text completion behavior of the TextBox.")] [DefaultValue(typeof(AutoCompleteMode), "None")] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(true)] public AutoCompleteMode AutoCompleteMode { - get => TextBox.AutoCompleteMode; - set => TextBox.AutoCompleteMode = value; + get => TextBox!.AutoCompleteMode; + set => TextBox!.AutoCompleteMode = value; } /// @@ -605,14 +606,14 @@ public AutoCompleteMode AutoCompleteMode [Browsable(true)] public AutoCompleteSource AutoCompleteSource { - get => TextBox.AutoCompleteSource; - set => TextBox.AutoCompleteSource = value; + get => TextBox!.AutoCompleteSource; + set => TextBox!.AutoCompleteSource = value; } /// /// Gets access to the Wrapped Controls Tooltips. /// - public override ToolTipValues ToolTipValues => TextBox.ToolTipValues; + public override ToolTipValues ToolTipValues => TextBox!.ToolTipValues; /// /// Gets and sets a value indicating if tooltips should be Displayed for button specs. @@ -622,8 +623,8 @@ public AutoCompleteSource AutoCompleteSource [DefaultValue(false)] public bool AllowButtonSpecToolTips { - get => TextBox.AllowButtonSpecToolTips; - set => TextBox.AllowButtonSpecToolTips = value; + get => TextBox!.AllowButtonSpecToolTips; + set => TextBox!.AllowButtonSpecToolTips = value; } /// @@ -634,8 +635,8 @@ public bool AllowButtonSpecToolTips [DefaultValue(false)] public bool AllowButtonSpecToolTipPriority { - get => TextBox.AllowButtonSpecToolTipPriority; - set => TextBox.AllowButtonSpecToolTipPriority = value; + get => TextBox!.AllowButtonSpecToolTipPriority; + set => TextBox!.AllowButtonSpecToolTipPriority = value; } /// @@ -644,21 +645,21 @@ public bool AllowButtonSpecToolTipPriority [Category(@"Visuals")] [Description(@"Collection of button specifications.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonTextBox.TextBoxButtonSpecCollection ButtonSpecs => TextBox.ButtonSpecs; + public KryptonTextBox.TextBoxButtonSpecCollection ButtonSpecs => TextBox!.ButtonSpecs; /// /// Gets a value indicating whether the user can undo the previous operation in a rich text box control. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool CanUndo => TextBox.CanUndo; + public bool CanUndo => TextBox!.CanUndo; /// /// Gets a value indicating whether the contents have changed since last last. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool Modified => TextBox.Modified; + public bool Modified => TextBox!.Modified; /// /// Gets and sets the selected text within the control. @@ -667,8 +668,8 @@ public bool AllowButtonSpecToolTipPriority [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public string SelectedText { - get => TextBox.SelectedText; - set => TextBox.SelectedText = value; + get => TextBox!.SelectedText; + set => TextBox!.SelectedText = value; } /// @@ -678,8 +679,8 @@ public string SelectedText [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionLength { - get => TextBox.SelectionLength; - set => TextBox.SelectionLength = value; + get => TextBox!.SelectionLength; + set => TextBox!.SelectionLength = value; } /// @@ -689,8 +690,8 @@ public int SelectionLength [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectionStart { - get => TextBox.SelectionStart; - set => TextBox.SelectionStart = value; + get => TextBox!.SelectionStart; + set => TextBox!.SelectionStart = value; } /// @@ -698,106 +699,106 @@ public int SelectionStart /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int TextLength => TextBox.TextLength; + public int TextLength => TextBox!.TextLength; /// /// Appends text to the current text of a rich text box. /// /// The text to append to the current contents of the text box. - public void AppendText(string text) => TextBox.AppendText(text); + public void AppendText(string text) => TextBox!.AppendText(text); /// /// Clears all text from the text box control. /// - public void Clear() => TextBox.Clear(); + public void Clear() => TextBox!.Clear(); /// /// Clears information about the most recent operation from the undo buffer of the rich text box. /// - public void ClearUndo() => TextBox.ClearUndo(); + public void ClearUndo() => TextBox!.ClearUndo(); /// /// Copies the current selection in the text box to the Clipboard. /// - public void Copy() => TextBox.Copy(); + public void Copy() => TextBox!.Copy(); /// /// Moves the current selection in the text box to the Clipboard. /// - public void Cut() => TextBox.Cut(); + public void Cut() => TextBox!.Cut(); /// /// Replaces the current selection in the text box with the contents of the Clipboard. /// - public void Paste() => TextBox.Paste(); + public void Paste() => TextBox!.Paste(); /// /// Scrolls the contents of the control to the current caret position. /// - public void ScrollToCaret() => TextBox.ScrollToCaret(); + public void ScrollToCaret() => TextBox!.ScrollToCaret(); /// /// Selects a range of text in the control. /// /// The position of the first character in the current text selection within the text box. /// The number of characters to select. - public void Select(int start, int length) => TextBox.Select(start, length); + public void Select(int start, int length) => TextBox!.Select(start, length); /// /// Selects all text in the control. /// - public void SelectAll() => TextBox.SelectAll(); + public void SelectAll() => TextBox!.SelectAll(); /// /// Undoes the last edit operation in the text box. /// - public void Undo() => TextBox.Undo(); + public void Undo() => TextBox!.Undo(); /// /// Specifies that the value of the SelectionLength property is zero so that no characters are selected in the control. /// - public void DeselectAll() => TextBox.DeselectAll(); + public void DeselectAll() => TextBox!.DeselectAll(); /// /// Retrieves the character that is closest to the specified location within the control. /// /// The location from which to seek the nearest character. /// The character at the specified location. - public int GetCharFromPosition(Point pt) => TextBox.GetCharFromPosition(pt); + public int GetCharFromPosition(Point pt) => TextBox!.GetCharFromPosition(pt); /// /// Retrieves the index of the character nearest to the specified location. /// /// The location to search. /// The zero-based character index at the specified location. - public int GetCharIndexFromPosition(Point pt) => TextBox.GetCharIndexFromPosition(pt); + public int GetCharIndexFromPosition(Point pt) => TextBox!.GetCharIndexFromPosition(pt); /// /// Retrieves the index of the first character of a given line. /// /// The line for which to get the index of its first character. /// The zero-based character index in the specified line. - public int GetFirstCharIndexFromLine(int lineNumber) => TextBox.GetFirstCharIndexFromLine(lineNumber); + public int GetFirstCharIndexFromLine(int lineNumber) => TextBox!.GetFirstCharIndexFromLine(lineNumber); /// /// Retrieves the index of the first character of the current line. /// /// The zero-based character index in the current line. - public int GetFirstCharIndexOfCurrentLine() => TextBox.GetFirstCharIndexOfCurrentLine(); + public int GetFirstCharIndexOfCurrentLine() => TextBox!.GetFirstCharIndexOfCurrentLine(); /// /// Retrieves the line number from the specified character position within the text of the RichTextBox control. /// /// The character index position to search. /// The zero-based line number in which the character index is located. - public int GetLineFromCharIndex(int index) => TextBox.GetLineFromCharIndex(index); + public int GetLineFromCharIndex(int index) => TextBox!.GetLineFromCharIndex(index); /// /// Retrieves the location within the control at the specified character index. /// /// The index of the character for which to retrieve the location. /// The location of the specified character. - public Point GetPositionFromCharIndex(int index) => TextBox.GetPositionFromCharIndex(index); + public Point GetPositionFromCharIndex(int index) => TextBox!.GetPositionFromCharIndex(index); /// /// Gets and sets the maximum allowed size of the item. @@ -868,7 +869,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase TextBoxView { get; set; } + public ViewBase? TextBoxView { get; set; } #endregion @@ -1011,41 +1012,46 @@ private void UnmonitorControl(KryptonTextBox c) c.TrackMouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnTextBoxAcceptsTabChanged(object sender, EventArgs e) => OnAcceptsTabChanged(e); + private void OnTextBoxAcceptsTabChanged(object? sender, EventArgs e) => OnAcceptsTabChanged(e); - private void OnTextBoxTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnTextBoxTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnTextBoxTextAlignChanged(object sender, EventArgs e) => OnTextAlignChanged(e); + private void OnTextBoxTextAlignChanged(object? sender, EventArgs e) => OnTextAlignChanged(e); - private void OnTextBoxHideSelectionChanged(object sender, EventArgs e) => OnHideSelectionChanged(e); + private void OnTextBoxHideSelectionChanged(object? sender, EventArgs e) => OnHideSelectionChanged(e); - private void OnTextBoxModifiedChanged(object sender, EventArgs e) => OnModifiedChanged(e); + private void OnTextBoxModifiedChanged(object? sender, EventArgs e) => OnModifiedChanged(e); - private void OnTextBoxMultilineChanged(object sender, EventArgs e) => OnMultilineChanged(e); + private void OnTextBoxMultilineChanged(object? sender, EventArgs e) => OnMultilineChanged(e); - private void OnTextBoxReadOnlyChanged(object sender, EventArgs e) => OnReadOnlyChanged(e); + private void OnTextBoxReadOnlyChanged(object? sender, EventArgs e) => OnReadOnlyChanged(e); - private void OnTextBoxGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnTextBoxGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnTextBoxLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnTextBoxLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnTextBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnTextBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnTextBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnTextBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnTextBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnTextBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnTextBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnTextBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + + private void OnRibbonPaletteChanged(object? sender, EventArgs e) + { + TextBox!.PaletteMode = Ribbon!.PaletteMode; + TextBox.LocalCustomPalette = Ribbon.LocalCustomPalette; + } - private void OnRibbonPaletteChanged(object sender, EventArgs e) => TextBox.Palette = Ribbon.GetResolvedPalette(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupThemeComboBox.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupThemeComboBox.cs index d8a80ddce..542d8090a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupThemeComboBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupThemeComboBox.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -20,119 +20,111 @@ namespace Krypton.Ribbon [DesignTimeVisible(false)] [DefaultEvent("SelectedTextChanged")] [DefaultProperty(nameof(Text))] - public class KryptonRibbonGroupThemeComboBox : KryptonRibbonGroupComboBox + public class KryptonRibbonGroupThemeComboBox : KryptonRibbonGroupComboBox, IKryptonThemeSelectorBase { + // TODO: grouped Ribbon controls do expose designers, needs a closer look + #region Instance Fields - private int _selectedIndex; + /// When we change the palette, Krypton Manager will notify us that there was a change. Since we are changing it that notification can be skipped. + private bool _isLocalUpdate = false; + /// Suppress code execution in the SelectedIndexChanged event handler, when a theme change via the KManager has been performed. + private bool _isExternalUpdate = false; + /// Backing var for the DefaultPalette property. + private PaletteMode _defaultPalette = PaletteMode.Global; + /// Local Krypton Manager instance. + private readonly KryptonManager _manager; + /// User defined palette. + private KryptonCustomPaletteBase? _kryptonCustomPalette = null; + + #endregion - private readonly int _defaultPaletteIndex = (int)PaletteMode.Microsoft365Blue; + #region Identity - private PaletteMode _defaultPalette; + /// Initializes a new instance of the class. + public KryptonRibbonGroupThemeComboBox() + { + _manager = new KryptonManager(); + DropDownStyle = ComboBoxStyle.DropDownList; + Items.Clear(); + Items.AddRange(CommonHelperThemeSelectors.GetThemesArray()); + + // Sets the intial palette from either global or DefaultPalette property + SelectedIndex = CommonHelperThemeSelectors.GetInitialSelectedIndex(DefaultPalette, _manager, Items); + + // React to theme changes from outside this control. + KryptonManager.GlobalPaletteChanged += KryptonManagerGlobalPaletteChanged; + } #endregion #region Public - /// Gets or sets the default palette mode. - /// The default palette mode. + /// [Category(@"Visuals")] - [Description(@"The default palette mode.")] - [DefaultValue(PaletteMode.Microsoft365Blue)] - public PaletteMode DefaultPalette + [Description(@"The custom assigned palette mode.")] + [DefaultValue(null)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public KryptonCustomPaletteBase? KryptonCustomPalette { - get => _defaultPalette; - set - { - _defaultPalette = value; - UpdateDefaultPaletteIndex(value); - } + get => _kryptonCustomPalette; + set => _kryptonCustomPalette = value; } - /// - /// Gets and sets the ThemeSelectedIndex. - /// + private void ResetKryptonCustomPalette() => _kryptonCustomPalette = null; + private bool ShouldSerializeKryptonCustomPalette() => _kryptonCustomPalette is not null; + + /// [Category(@"Visuals")] - [Description(@"Theme Selected Index. (Default = `Office 365 - Blue`)")] - [DefaultValue((int)PaletteMode.Microsoft365Blue)] - public int ThemeSelectedIndex + [Description(@"The default palette mode.")] + [DefaultValue(PaletteMode.Global)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public PaletteMode DefaultPalette { - get => _selectedIndex; - - private set => SelectedIndex = value; + get => _defaultPalette; + set => SelectedIndex = CommonHelperThemeSelectors.DefaultPaletteSetter(ref _defaultPalette, value, Items, SelectedIndex); } - private void ResetThemeSelectedIndex() => _selectedIndex = (int)PaletteMode.Microsoft365Blue; + private void ResetDefaultPalette() => DefaultPalette = PaletteMode.Global; + private bool ShouldSerializeDefaultPalette() => _defaultPalette != PaletteMode.Global; - private bool ShouldSerializeThemeSelectedIndex() => _selectedIndex != (int)PaletteMode.Microsoft365Blue; + #endregion + + #region Implementation /// - /// Gets and sets the ThemeSelectedIndex. + /// This method will run when the KryptonManager.GlobalPaletteChanged event is fired.
+ /// It will synchronize the SelectedIndex with the newly assigned Global Palette. ///
- [Category(@"Visuals")] - [Description(@"Custom Theme to use when `Custom` is selected")] - [DefaultValue(null)] - public KryptonCustomPaletteBase? KryptonCustomPalette { get; set; } - - [EditorBrowsable(EditorBrowsableState.Never)] - public KryptonManager Manager + /// Object that initiated the call. + /// Eventargs object data (not used). + private void KryptonManagerGlobalPaletteChanged(object? sender, EventArgs e) { - get; - } = new KryptonManager(); + /* + * Only executes when fully initialized. + * OnHandleCreated could not be used here since this control derives from Component. + */ - #endregion - - #region Identity - - /// Initializes a new instance of the class. - public KryptonRibbonGroupThemeComboBox() - { - DropDownStyle = ComboBoxStyle.DropDownList; - DisplayMember = "Key"; - ValueMember = "Value"; - foreach (var kvp in PaletteModeStrings.SupportedThemesMap) + if (ComboBox is not null) { - Items.Add(kvp); + SelectedIndex = CommonHelperThemeSelectors.KryptonManagerGlobalPaletteChanged(_isLocalUpdate, ref _isExternalUpdate, SelectedIndex, Items); } - var cnvtr = new PaletteModeConverter(); - Text = cnvtr.ConvertToString(PaletteMode.Microsoft365Blue)!; - - _selectedIndex = SelectedIndex = _defaultPaletteIndex; - _defaultPalette = PaletteMode.Microsoft365Blue; - Debug.Assert(_selectedIndex == _defaultPaletteIndex, $@"Microsoft365Blue needs to be at the index position of {_defaultPaletteIndex} for backward compatibility"); } #endregion - #region Implementation - - private void UpdateDefaultPaletteIndex(PaletteMode mode) => _selectedIndex = (int)mode; - - /// Returns the palette mode. - /// - ///
- ///
- public PaletteMode ReturnPaletteMode() => Manager.GlobalPaletteMode; - - #endregion - #region Protected Overrides - /// protected override void OnSelectedIndexChanged(EventArgs e) { - RibbonThemeManager.ApplyTheme(Text, Manager); - - ThemeSelectedIndex = SelectedIndex; - - base.OnSelectedIndexChanged(e); - if ((RibbonThemeManager.GetThemeManagerMode(Text) == PaletteMode.Custom) && (KryptonCustomPalette != null)) + if (!CommonHelperThemeSelectors.OnSelectedIndexChanged(ref _isLocalUpdate, _isExternalUpdate, ref _defaultPalette, Text, _manager, _kryptonCustomPalette)) { - Manager.GlobalPalette = KryptonCustomPalette; + //theme change went wrong, make the active theme the selected theme in the list. + SelectedIndex = CommonHelperThemeSelectors.GetPaletteIndex(Items, _manager.GlobalPaletteMode); } - } - + base.OnSelectedIndexChanged(e); + } #endregion #region Removed Designer @@ -140,17 +132,25 @@ protected override void OnSelectedIndexChanged(EventArgs e) /// Gets and sets the text associated with the control. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [AllowNull] - public new string Text + public override string Text { get => base.Text; set => base.Text = value; } + /// Gets or sets the format specifier characters that indicate how a value is to be Displayed. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override string FormatString + { + get => base.FormatString; + set => base.FormatString = value; + } + /// Gets and sets the appearance and functionality of the KryptonComboBox. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new ComboBoxStyle DropDownStyle + public override ComboBoxStyle DropDownStyle { get => base.DropDownStyle; set => base.DropDownStyle = value; @@ -159,12 +159,12 @@ protected override void OnSelectedIndexChanged(EventArgs e) /// Gets or sets the items in the KryptonComboBox. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new ComboBox.ObjectCollection Items => base.Items; + public override ComboBox.ObjectCollection Items => base.Items; /// Gets or sets the StringCollection to use when the AutoCompleteSource property is set to CustomSource. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new AutoCompleteStringCollection AutoCompleteCustomSource + public override AutoCompleteStringCollection AutoCompleteCustomSource { get => base.AutoCompleteCustomSource; set => base.AutoCompleteCustomSource = value; @@ -173,7 +173,7 @@ protected override void OnSelectedIndexChanged(EventArgs e) /// Gets or sets the text completion behavior of the combobox. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new AutoCompleteMode AutoCompleteMode + public override AutoCompleteMode AutoCompleteMode { get => base.AutoCompleteMode; set => base.AutoCompleteMode = value; @@ -182,12 +182,11 @@ protected override void OnSelectedIndexChanged(EventArgs e) /// Gets or sets the autocomplete source, which can be one of the values from AutoCompleteSource enumeration. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new AutoCompleteSource AutoCompleteSource + public override AutoCompleteSource AutoCompleteSource { get => base.AutoCompleteSource; set => base.AutoCompleteSource = value; } - #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs index 3e8dd55ad..a696949a7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTrackBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -144,7 +144,8 @@ public override KryptonRibbon? Ribbon { // Use the same palette in the track bar as the ribbon, plus we need // to know when the ribbon palette changes so we can reflect that change - TrackBar.Palette = Ribbon.GetResolvedPalette(); + TrackBar!.PaletteMode = Ribbon!.PaletteMode; + TrackBar.LocalCustomPalette = Ribbon!.LocalCustomPalette; Ribbon.PaletteChanged += OnRibbonPaletteChanged; } } @@ -157,12 +158,12 @@ public override KryptonRibbon? Ribbon [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Always)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public KryptonTrackBar TrackBar { get; private set; } + public KryptonTrackBar? TrackBar { get; private set; } /// /// Gets access to the Wrapped Controls Tooltips. /// - public override ToolTipValues ToolTipValues => TrackBar.ToolTipValues; + public override ToolTipValues ToolTipValues => TrackBar?.ToolTipValues!; /// /// Gets and sets the key tip for the ribbon group track bar. @@ -255,7 +256,7 @@ public int MinimumLength set { _minimumLength = value; - TrackBar.MinimumSize = Orientation == Orientation.Horizontal + TrackBar!.MinimumSize = Orientation == Orientation.Horizontal ? new Size(_minimumLength, 0) : new Size(0, _minimumLength); } @@ -274,7 +275,7 @@ public int MaximumLength set { _maximumLength = value; - TrackBar.MaximumSize = Orientation == Orientation.Horizontal + TrackBar!.MaximumSize = Orientation == Orientation.Horizontal ? new Size(_maximumLength, 0) : new Size(0, _maximumLength); } @@ -288,8 +289,8 @@ public int MaximumLength [DefaultValue(null)] public ContextMenuStrip? ContextMenuStrip { - get => TrackBar.ContextMenuStrip; - set => TrackBar.ContextMenuStrip = value; + get => TrackBar?.ContextMenuStrip; + set => TrackBar!.ContextMenuStrip = value; } /// @@ -300,8 +301,8 @@ public ContextMenuStrip? ContextMenuStrip [DefaultValue(null)] public KryptonContextMenu? KryptonContextMenu { - get => TrackBar.KryptonContextMenu; - set => TrackBar.KryptonContextMenu = value; + get => TrackBar?.KryptonContextMenu; + set => TrackBar!.KryptonContextMenu = value; } /// @@ -312,8 +313,8 @@ public KryptonContextMenu? KryptonContextMenu [DefaultValue(typeof(PaletteTrackBarSize), "Medium")] public PaletteTrackBarSize TrackBarSize { - get => TrackBar.TrackBarSize; - set => TrackBar.TrackBarSize = value; + get => TrackBar!.TrackBarSize; + set => TrackBar!.TrackBarSize = value; } /// @@ -325,8 +326,8 @@ public PaletteTrackBarSize TrackBarSize [RefreshProperties(RefreshProperties.All)] public TickStyle TickStyle { - get => TrackBar.TickStyle; - set => TrackBar.TickStyle = value; + get => TrackBar!.TickStyle; + set => TrackBar!.TickStyle = value; } /// @@ -337,8 +338,8 @@ public TickStyle TickStyle [DefaultValue(1)] public int TickFrequency { - get => TrackBar.TickFrequency; - set => TrackBar.TickFrequency = value; + get => TrackBar!.TickFrequency; + set => TrackBar!.TickFrequency = value; } /// @@ -349,8 +350,8 @@ public int TickFrequency [DefaultValue(false)] public bool VolumeControl { - get => TrackBar.VolumeControl; - set => TrackBar.VolumeControl = value; + get => TrackBar!.VolumeControl; + set => TrackBar!.VolumeControl = value; } /// @@ -362,11 +363,11 @@ public bool VolumeControl [RefreshProperties(RefreshProperties.All)] public Orientation Orientation { - get => TrackBar.Orientation; + get => TrackBar!.Orientation; set { - if (value != TrackBar.Orientation) + if (value != TrackBar!.Orientation) { TrackBar.Orientation = value; @@ -393,8 +394,8 @@ public Orientation Orientation [DefaultValue(10)] public int Maximum { - get => TrackBar.Maximum; - set => TrackBar.Maximum = value; + get => TrackBar!.Maximum; + set => TrackBar!.Maximum = value; } /// @@ -406,8 +407,8 @@ public int Maximum [DefaultValue(0)] public int Minimum { - get => TrackBar.Minimum; - set => TrackBar.Minimum = value; + get => TrackBar!.Minimum; + set => TrackBar!.Minimum = value; } /// @@ -418,8 +419,8 @@ public int Minimum [DefaultValue(0)] public int Value { - get => TrackBar.Value; - set => TrackBar.Value = value; + get => TrackBar!.Value; + set => TrackBar!.Value = value; } /// @@ -431,8 +432,8 @@ public int Value [DisallowNull] public int SmallChange { - get => TrackBar.SmallChange; - set => TrackBar.SmallChange = value; + get => TrackBar!.SmallChange; + set => TrackBar!.SmallChange = value; } /// @@ -444,8 +445,8 @@ public int SmallChange [DisallowNull] public int LargeChange { - get => TrackBar.LargeChange; - set => TrackBar.LargeChange = value; + get => TrackBar!.LargeChange; + set => TrackBar!.LargeChange = value; } /// @@ -453,7 +454,7 @@ public int LargeChange /// /// The lower limit of the range of the track bar. /// The upper limit of the range of the track bar. - public void SetRange(int minValue, int maxValue) => TrackBar.SetRange(minValue, maxValue); + public void SetRange(int minValue, int maxValue) => TrackBar?.SetRange(minValue, maxValue); /// /// Gets and sets the maximum allowed size of the item. @@ -524,7 +525,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public ViewBase TrackBarView { get; set; } + public ViewBase? TrackBarView { get; set; } #endregion @@ -549,7 +550,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, #endregion #region Internal - internal Control LastParentControl { get; set; } + internal Control? LastParentControl { get; set; } internal KryptonTrackBar? LastTrackBar { get; set; } @@ -562,33 +563,38 @@ public override ViewBase CreateView(KryptonRibbon ribbon, #endregion #region Implementation - private void MonitorControl(KryptonTrackBar c) + private void MonitorControl(KryptonTrackBar? c) { - c.MouseEnter += OnControlEnter; + c!.MouseEnter += OnControlEnter; c.MouseLeave += OnControlLeave; } - private void UnmonitorControl(KryptonTrackBar c) + private void UnmonitorControl(KryptonTrackBar? c) { - c.MouseEnter -= OnControlEnter; + c!.MouseEnter -= OnControlEnter; c.MouseLeave -= OnControlLeave; } - private void OnControlEnter(object sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); + private void OnControlEnter(object? sender, EventArgs e) => MouseEnterControl?.Invoke(this, e); - private void OnControlLeave(object sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); + private void OnControlLeave(object? sender, EventArgs e) => MouseLeaveControl?.Invoke(this, e); private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => // Pass request onto the view provided paint delegate ViewPaintDelegate?.Invoke(this, e); - private void OnTrackBarGotFocus(object sender, EventArgs e) => OnGotFocus(e); + private void OnTrackBarGotFocus(object? sender, EventArgs e) => OnGotFocus(e); - private void OnTrackBarLostFocus(object sender, EventArgs e) => OnLostFocus(e); + private void OnTrackBarLostFocus(object? sender, EventArgs e) => OnLostFocus(e); - private void OnTrackBarValueChanged(object sender, EventArgs e) => ValueChanged?.Invoke(this, e); + private void OnTrackBarValueChanged(object? sender, EventArgs e) => ValueChanged?.Invoke(this, e); + + private void OnRibbonPaletteChanged(object? sender, EventArgs e) + { + TrackBar!.PaletteMode = Ribbon!.PaletteMode; + TrackBar.LocalCustomPalette = Ribbon!.LocalCustomPalette; + } - private void OnRibbonPaletteChanged(object sender, EventArgs e) => TrackBar.Palette = Ribbon.GetResolvedPalette(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs index 536b84b32..f34eb16f5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTriple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -167,7 +167,7 @@ public KryptonRibbonGroupTriple() _itemAlignment = RibbonItemAlignment.Near; // Create collection for holding triple items - Items = new KryptonRibbonGroupTripleCollection(); + Items = []; Items.Clearing += OnRibbonGroupTripleClearing; Items.Cleared += OnRibbonGroupTripleCleared; Items.Inserted += OnRibbonGroupTripleInserted; @@ -183,7 +183,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Dispose of per-item resources - foreach (KryptonRibbonGroupItem item in Items) + foreach (var item in Items!) { item.Dispose(); } @@ -209,8 +209,8 @@ public override KryptonRibbon? Ribbon base.Ribbon = value; // Forward the reference to all children (just in case the children - // are added before the this object is added to the owner) - foreach (KryptonRibbonGroupItem item in Items) + // are added before this object is added to the owner) + foreach (var item in Items!) { item.Ribbon = value; } @@ -232,8 +232,8 @@ public override KryptonRibbonTab? RibbonTab base.RibbonTab = value; // Forward the reference to all children (just in case the children - // are added before the this object is added to the owner) - foreach (KryptonRibbonGroupItem item in Items) + // are added before this object is added to the owner) + foreach (var item in Items!) { item.RibbonTab = value; } @@ -357,7 +357,7 @@ public override GroupItemSize ItemSizeMaximum } // Update all contained elements to reflect the same sizing - foreach (IRibbonGroupItem item in Items) + foreach (IRibbonGroupItem item in Items!) { item.ItemSizeMaximum = value; } @@ -398,7 +398,7 @@ public override GroupItemSize ItemSizeMinimum } // Update all contained elements to reflect the same sizing - foreach (IRibbonGroupItem item in Items) + foreach (IRibbonGroupItem item in Items!) { item.ItemSizeMinimum = value; } @@ -425,7 +425,7 @@ public override GroupItemSize ItemSizeCurrent _itemSizeCurrent = value; // Update all contained elements to reflect the same sizing - foreach (IRibbonGroupItem item in Items) + foreach (IRibbonGroupItem item in Items!) { item.ItemSizeCurrent = value; } @@ -462,7 +462,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, [MergableProperty(false)] [Editor(typeof(KryptonRibbonGroupTripleCollectionEditor), typeof(UITypeEditor))] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonRibbonGroupTripleCollection Items { get; } + public KryptonRibbonGroupTripleCollection? Items { get; } /// /// Gets an array of all the contained components. @@ -470,7 +470,7 @@ public override ViewBase CreateView(KryptonRibbon ribbon, /// Array of child components. public override Component[] GetChildComponents() { - var array = new Component[Items.Count]; + var array = new Component[Items!.Count]; Items.CopyTo(array, 0); return array; } @@ -529,7 +529,7 @@ public override Component[] GetChildComponents() internal override bool ProcessCmdKey(ref Message msg, Keys keyData) { // Ask the containers to check for command key processing - foreach (KryptonRibbonGroupItem item in Items) + foreach (var item in Items!) { if (item.ProcessCmdKey(ref msg, keyData)) { @@ -542,10 +542,10 @@ internal override bool ProcessCmdKey(ref Message msg, Keys keyData) #endregion #region Private - private void OnRibbonGroupTripleClearing(object sender, EventArgs e) + private void OnRibbonGroupTripleClearing(object? sender, EventArgs e) { // Remove the back references - foreach (IRibbonGroupItem item in Items) + foreach (IRibbonGroupItem item in Items!) { item.Ribbon = null; item.RibbonTab = null; @@ -553,7 +553,7 @@ private void OnRibbonGroupTripleClearing(object sender, EventArgs e) } } - private void OnRibbonGroupTripleCleared(object sender, EventArgs e) + private void OnRibbonGroupTripleCleared(object? sender, EventArgs e) { // Only need to update display if this tab is selected if ((Ribbon != null) @@ -568,7 +568,7 @@ private void OnRibbonGroupTripleCleared(object sender, EventArgs e) private void OnRibbonGroupTripleInserted(object sender, TypedCollectionEventArgs e) { // Setup the back references - e.Item.Ribbon = Ribbon; + e.Item!.Ribbon = Ribbon; e.Item.RibbonTab = RibbonTab; e.Item.RibbonContainer = this; @@ -590,7 +590,7 @@ private void OnRibbonGroupTripleInserted(object sender, TypedCollectionEventArgs private void OnRibbonGroupTripleRemoved(object sender, TypedCollectionEventArgs e) { // Remove the back references - e.Item.Ribbon = null; + e.Item!.Ribbon = null; e.Item.RibbonTab = null; e.Item.RibbonContainer = null; diff --git a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTripleCollection.cs b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTripleCollection.cs index 046c4d398..5c72f48b6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTripleCollection.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Group Contents/KryptonRibbonGroupTripleCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,7 +20,9 @@ namespace Krypton.Ribbon public class KryptonRibbonGroupTripleCollection : TypedRestrictCollection { #region Static Fields - private static readonly Type[] _types = { typeof(KryptonRibbonGroupButton), + private static readonly Type[] _types = + [ + typeof(KryptonRibbonGroupButton), typeof(KryptonRibbonGroupColorButton), typeof(KryptonRibbonGroupCheckBox), typeof(KryptonRibbonGroupComboBox), @@ -34,7 +36,7 @@ public class KryptonRibbonGroupTripleCollection : TypedRestrictCollection /// Object reference. /// The position into which the new item was inserted. - public override int Add(object value) + public override int Add(object? value) { // Restrict contents to three items max if (Count == 3) @@ -67,7 +69,7 @@ public override int Add(object value) /// /// Insert index. /// Object reference. - public override void Insert(int index, object value) + public override void Insert(int index, object? value) { // Restrict contents to three items max if (Count == 3) @@ -85,7 +87,7 @@ public override void Insert(int index, object value) /// /// Insert index. /// Item reference. - public override void Insert(int index, KryptonRibbonGroupItem item) + public override void Insert(int index, KryptonRibbonGroupItem? item) { // Restrict contents to three items max if (Count == 3) @@ -102,7 +104,7 @@ public override void Insert(int index, KryptonRibbonGroupItem item) /// Append an item to the collection. /// /// Item reference. - public override void Add(KryptonRibbonGroupItem item) + public override void Add(KryptonRibbonGroupItem? item) { // Restrict contents to three items max if (Count == 3) diff --git a/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon 2022.csproj b/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon 2022.csproj index d149b8320..08c990e1b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon 2022.csproj +++ b/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon 2022.csproj @@ -1,26 +1,17 @@  - + - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows + net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows - - - - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - - - net48;net481;net6.0-windows;net7.0-windows + + net48;net481;net8.0-windows;net9.0-windows - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - + net462;net47;net471;net472;net48;net481;net8.0-windows + @@ -40,10 +31,13 @@ en true Debug;Release;Installer;Nightly;Canary - preview enable - 6 + + 8 + latest true + + true @@ -51,6 +45,12 @@ This is the ribbon module. + + + + + + True @@ -126,7 +126,7 @@ - ..\..\..\Bin\$(Configuration)\Krypton.Ribbon.xml + true ..\..\..\Bin\$(Configuration)\ diff --git a/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon.licenseheader b/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon.licenseheader index c733ea0c8..1c668a35f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon.licenseheader +++ b/Source/Krypton Components/Krypton.Ribbon/Krypton.Ribbon.licenseheader @@ -6,9 +6,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * */ #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/AppButtonToolTipToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/AppButtonToolTipToContent.cs index 55c57a18b..4c6bf3fb1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/AppButtonToolTipToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/AppButtonToolTipToContent.cs @@ -1,14 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -31,7 +27,7 @@ internal class AppButtonToolTipToContent : IContentValues public AppButtonToolTipToContent([DisallowNull] KryptonRibbon ribbon) { Debug.Assert(ribbon != null); - _ribbon = ribbon; + _ribbon = ribbon!; } #endregion @@ -51,26 +47,26 @@ public AppButtonToolTipToContent([DisallowNull] KryptonRibbon ribbon) /// /// The state for which the image is needed. /// Image value. - public Image? GetImage(PaletteState state) => _ribbon.RibbonAppButton.AppButtonToolTipImage; + public Image? GetImage(PaletteState state) => _ribbon.RibbonFileAppButton.AppButtonToolTipImage; /// /// Gets the image color that should be transparent. /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => _ribbon.RibbonAppButton.AppButtonToolTipImageTransparentColor; + public Color GetImageTransparentColor(PaletteState state) => _ribbon.RibbonFileAppButton.AppButtonToolTipImageTransparentColor; /// /// Gets the content short text. /// /// String value. - public string GetShortText() => _ribbon.RibbonAppButton.AppButtonToolTipTitle; + public string GetShortText() => _ribbon.RibbonFileAppButton.AppButtonToolTipTitle; /// /// Gets the content long text. /// /// String value. - public string GetLongText() => _ribbon.RibbonAppButton.AppButtonToolTipBody; + public string GetLongText() => _ribbon.RibbonFileAppButton.AppButtonToolTipBody; #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/ContextTabSet.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/ContextTabSet.cs index 72e5f9c54..2159439f6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/ContextTabSet.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/ContextTabSet.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,15 +31,16 @@ internal class ContextTabSet /// /// Reference to first tab of the set. /// Reference to owning context details. - public ContextTabSet([DisallowNull] ViewDrawRibbonTab tab, - [DisallowNull] KryptonRibbonContext context) + public ContextTabSet([DisallowNull] ViewDrawRibbonTab? tab, + [DisallowNull] KryptonRibbonContext? context) { - Debug.Assert(tab != null); - Debug.Assert(context != null); + Debug.Assert(tab is not null); + Debug.Assert(context is not null); - FirstTab = tab; + FirstTab = tab ?? throw new ArgumentNullException(nameof(tab)); _lastTab = tab; - Context = context; + + Context = context ?? throw new ArgumentNullException(nameof(context)); } #endregion @@ -76,8 +77,8 @@ public ContextTabSet([DisallowNull] ViewDrawRibbonTab tab, /// Reference to new last tab. public void UpdateLastTab([DisallowNull] ViewDrawRibbonTab tab) { - Debug.Assert(tab != null); - _lastTab = tab; + Debug.Assert(tab is not null); + _lastTab = tab ?? throw new ArgumentNullException(nameof(tab)); } /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/ContextToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/ContextToContent.cs index 662c13d7d..c6a0df2b9 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/ContextToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/ContextToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/DesignTextToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/DesignTextToContent.cs index 0f17a075c..bdcca3a49 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/DesignTextToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/DesignTextToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -17,7 +17,7 @@ namespace Krypton.Ribbon internal class DesignTextToContent : RibbonToContent { #region Instance Fields - private readonly KryptonRibbon _ribbon; + private readonly KryptonRibbon? _ribbon; #endregion #region Identity @@ -25,11 +25,12 @@ internal class DesignTextToContent : RibbonToContent /// Initialize a new instance of the DesignTextToContent class. /// /// Reference to the owning ribbon control. - public DesignTextToContent([DisallowNull] KryptonRibbon ribbon) + public DesignTextToContent([DisallowNull] KryptonRibbon? ribbon) : base(ribbon.StateCommon.RibbonGeneral) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); } #endregion @@ -54,8 +55,8 @@ public DesignTextToContent([DisallowNull] KryptonRibbon ribbon) /// Palette value should be applicable to this state. /// Color value. public override Color GetContentShortTextColor1(PaletteState state) => state == PaletteState.Normal - ? _ribbon.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) - : _ribbon.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); + ? _ribbon!.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) + : _ribbon!.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); /// /// Gets the second back color for the short text. @@ -63,8 +64,8 @@ public override Color GetContentShortTextColor1(PaletteState state) => state == /// Palette value should be applicable to this state. /// Color value. public override Color GetContentShortTextColor2(PaletteState state) => state == PaletteState.Normal - ? _ribbon.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) - : _ribbon.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); + ? _ribbon!.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) + : _ribbon!.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); /// /// Gets the text trimming to use for long text. @@ -79,8 +80,8 @@ public override Color GetContentShortTextColor2(PaletteState state) => state == /// Palette value should be applicable to this state. /// Color value. public override Color GetContentLongTextColor1(PaletteState state) => state == PaletteState.Normal - ? _ribbon.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) - : _ribbon.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); + ? _ribbon!.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) + : _ribbon!.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); /// /// Gets the second back color for the long text. @@ -88,8 +89,8 @@ public override Color GetContentLongTextColor1(PaletteState state) => state == P /// Palette value should be applicable to this state. /// Color value. public override Color GetContentLongTextColor2(PaletteState state) => state == PaletteState.Normal - ? _ribbon.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) - : _ribbon.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); + ? _ribbon!.StateCommon.RibbonGeneral.GetRibbonGroupSeparatorLight(state) + : _ribbon!.StateCommon.RibbonGroupButton.Content.GetContentShortTextColor1(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/ApplicationTabToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/FileApplicationTabToContent.cs similarity index 63% rename from Source/Krypton Components/Krypton.Ribbon/Palette/ApplicationTabToContent.cs rename to Source/Krypton Components/Krypton.Ribbon/Palette/FileApplicationTabToContent.cs index 9c8752e1e..ae76535c0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/ApplicationTabToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/FileApplicationTabToContent.cs @@ -1,20 +1,16 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion namespace Krypton.Ribbon { - internal class ApplicationTabToContent : RibbonToContent + internal class FileApplicationTabToContent : RibbonToContent { #region Instance Fields private readonly KryptonRibbon _ribbon; @@ -26,7 +22,7 @@ internal class ApplicationTabToContent : RibbonToContent /// /// Reference to owning ribbon control.. /// Source for general ribbon settings. - public ApplicationTabToContent(KryptonRibbon ribbon, + public FileApplicationTabToContent(KryptonRibbon ribbon, PaletteRibbonGeneral ribbonGeneral) : base(ribbonGeneral) => _ribbon = ribbon; @@ -39,28 +35,49 @@ public ApplicationTabToContent(KryptonRibbon ribbon, /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentShortTextColor1(PaletteState state) => _ribbon.RibbonAppButton.AppButtonTextColor; + public override Color GetContentShortTextColor1(PaletteState state) => RibbonFileAppTabTextColor(state); /// /// Gets the second color for the short text. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentShortTextColor2(PaletteState state) => _ribbon.RibbonAppButton.AppButtonTextColor; + public override Color GetContentShortTextColor2(PaletteState state) => RibbonFileAppTabTextColor(state); + + private Color RibbonFileAppTabTextColor(PaletteState state) + { + PaletteRibbonFileAppTab palette; + + // Find the correct palette to use that matches the button state + switch (state) + { + default: + case PaletteState.Normal: + palette = _ribbon.StateNormal.RibbonFileAppTab; + break; + case PaletteState.Tracking: + palette = _ribbon.StateNormal.RibbonFileAppTab; + break; + case PaletteState.Pressed: + palette = _ribbon.StateNormal.RibbonFileAppTab; + break; + } + return palette.GetRibbonFileAppTabTextColor(state); + } /// /// Gets the first color for the long text. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentLongTextColor1(PaletteState state) => _ribbon.RibbonAppButton.AppButtonTextColor; + public override Color GetContentLongTextColor1(PaletteState state) => RibbonFileAppTabTextColor(state); /// /// Gets the second color for the long text. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentLongTextColor2(PaletteState state) => _ribbon.RibbonAppButton.AppButtonTextColor; + public override Color GetContentLongTextColor2(PaletteState state) => RibbonFileAppTabTextColor(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteCaptionRedirect.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteCaptionRedirect.cs index cdb0e3447..29ce49b04 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteCaptionRedirect.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteCaptionRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class PaletteCaptionRedirect : PaletteRedirect /// Initialize a new instance of the PaletteCaptionRedirect class. /// /// Initial palette target for redirection. - public PaletteCaptionRedirect(PaletteBase? target) + public PaletteCaptionRedirect(PaletteBase target) : base(target) { } diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryBackBorder.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryBackBorder.cs index a0d77e360..4b42db849 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryBackBorder.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryBackBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -26,10 +26,10 @@ internal class PaletteGalleryBackBorder : IPaletteBack, /// Initialize a new instance of the PaletteGalleryBackBorder class. /// /// Initial state for background/border. - public PaletteGalleryBackBorder([DisallowNull] PaletteGalleryState state) + public PaletteGalleryBackBorder([DisallowNull] PaletteGalleryState? state) { - Debug.Assert(state != null); - _state = state; + Debug.Assert(state is not null); + _state = state ?? throw new ArgumentNullException(nameof(state)); } #endregion @@ -41,7 +41,7 @@ public PaletteGalleryBackBorder([DisallowNull] PaletteGalleryState state) public void SetState([DisallowNull] PaletteGalleryState state) { Debug.Assert(state != null); - _state = state; + _state = state ?? throw new ArgumentNullException(nameof(state)); } #endregion @@ -65,14 +65,14 @@ public void SetState([DisallowNull] PaletteGalleryState state) /// /// Palette value should be applicable to this state. /// Color value. - public Color GetBackColor1(PaletteState state) => _state.RibbonGalleryBack.GetRibbonBackColor1(state); + public Color GetBackColor1(PaletteState state) => _state!.RibbonGalleryBack.GetRibbonBackColor1(state); /// /// Gets the second back color. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetBackColor2(PaletteState state) => _state.RibbonGalleryBack.GetRibbonBackColor2(state); + public Color GetBackColor2(PaletteState state) => _state!.RibbonGalleryBack.GetRibbonBackColor2(state); /// /// Gets the color drawing style. @@ -145,14 +145,14 @@ public void SetState([DisallowNull] PaletteGalleryState state) /// /// Palette value should be applicable to this state. /// Color value. - public Color GetBorderColor1(PaletteState state) => _state.RibbonGalleryBorder.GetRibbonBackColor1(state); + public Color GetBorderColor1(PaletteState state) => _state!.RibbonGalleryBorder.GetRibbonBackColor1(state); /// /// Gets the second border color. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetBorderColor2(PaletteState state) => _state.RibbonGalleryBorder.GetRibbonBackColor2(state); + public Color GetBorderColor2(PaletteState state) => _state!.RibbonGalleryBorder.GetRibbonBackColor2(state); /// /// Gets the color drawing style. diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryRedirect.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryRedirect.cs index 50e2489ab..da5f675c7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryRedirect.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -36,10 +36,20 @@ public class PaletteGalleryRedirect : PaletteMetricRedirect /// inheritance redirection instance. /// Paint delegate. public PaletteGalleryRedirect([DisallowNull] PaletteRedirect redirect, - NeedPaintHandler needPaint) + [DisallowNull] NeedPaintHandler needPaint) : base(redirect) { - Debug.Assert(redirect != null); + Debug.Assert(redirect is not null); + + if (redirect is null) + { + throw new ArgumentNullException(nameof(redirect)); + } + + if (needPaint is null) + { + throw new ArgumentNullException(nameof(needPaint)); + } // Store the provided paint notification delegate NeedPaint = needPaint; @@ -59,7 +69,7 @@ public PaletteGalleryRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public override void SetRedirector(PaletteRedirect? redirect) + public override void SetRedirector(PaletteRedirect redirect) { base.SetRedirector(redirect); _ribbonBackInherit.SetRedirector(redirect); @@ -72,8 +82,9 @@ public override void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonGalleryBack.IsDefault & - RibbonGalleryBorder.IsDefault; + RibbonGalleryBorder.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryState.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryState.cs index e809d8aee..0653b6ae5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryState.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteGalleryState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -44,8 +44,9 @@ public PaletteGalleryState(PaletteGalleryRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonGalleryBack.IsDefault & - RibbonGalleryBorder.IsDefault; + RibbonGalleryBorder.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRedirectRibbonAeroOverride.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRedirectRibbonAeroOverride.cs index f45fa7058..c01dc2860 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRedirectRibbonAeroOverride.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRedirectRibbonAeroOverride.cs @@ -1,14 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -30,7 +26,7 @@ public class PaletteRedirectRibbonAeroOverride : PaletteRedirect /// Reference to owning Ribbon instance. /// Source for inheriting values. public PaletteRedirectRibbonAeroOverride(KryptonRibbon ribbon, - PaletteRedirect? redirect) + PaletteRedirect redirect) : base(redirect) => _ribbon = ribbon; @@ -49,8 +45,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet if ((style == PaletteContentStyle.ButtonButtonSpec) && (state == PaletteState.Normal)) { // If the ribbon is showing in office 2010 style and using glass - if (_ribbon.CaptionArea.DrawCaptionOnComposition - && RibbonShapeIs2010OrHigher()) + if (RibbonShapeIs2010OrHigher()) { return LightBackground(base.GetContentShortTextColor1(style, state)); } @@ -71,8 +66,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet if ((style == PaletteContentStyle.ButtonButtonSpec) && (state == PaletteState.Normal)) { // If the ribbon is showing in office 2010 style and using glass - if (_ribbon.CaptionArea.DrawCaptionOnComposition - && RibbonShapeIs2010OrHigher()) + if (RibbonShapeIs2010OrHigher()) { return LightBackground(base.GetContentShortTextColor2(style, state)); } @@ -95,8 +89,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett if ((style == PaletteContentStyle.ButtonButtonSpec) && (state == PaletteState.Normal)) { // If the ribbon is showing in office 2010 style and using glass - if (_ribbon.CaptionArea.DrawCaptionOnComposition - && RibbonShapeIs2010OrHigher()) + if ( RibbonShapeIs2010OrHigher()) { return LightBackground(base.GetContentLongTextColor1(style, state)); } @@ -117,8 +110,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett if ((style == PaletteContentStyle.ButtonButtonSpec) && (state == PaletteState.Normal)) { // If the ribbon is showing in office 2010 style and using glass - if (_ribbon.CaptionArea.DrawCaptionOnComposition - && RibbonShapeIs2010OrHigher()) + if ( RibbonShapeIs2010OrHigher()) { return LightBackground(base.GetContentLongTextColor2(style, state)); } @@ -135,8 +127,6 @@ private Color LightBackground(Color retColor) => Math.Min(retColor.G, (byte)60), Math.Min(retColor.B, (byte)60)); - - private bool RibbonShapeIs2010OrHigher() => _ribbon.RibbonShape is PaletteRibbonShape.Office2010 or PaletteRibbonShape.VisualStudio2010 or PaletteRibbonShape.VisualStudio2010 or PaletteRibbonShape.Office2013 or PaletteRibbonShape.Microsoft365 or PaletteRibbonShape.VisualStudio; #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppButton.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppButton.cs index f99370bd0..9a9517173 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -37,7 +37,12 @@ public class PaletteRibbonAppButton : Storage public PaletteRibbonAppButton([DisallowNull] PaletteRibbonRedirect inherit, NeedPaintHandler needPaint) { - Debug.Assert(inherit != null); + Debug.Assert(inherit is not null); + + if (inherit is null) + { + throw new ArgumentNullException(nameof(inherit)); + } // Store the provided paint notification delegate NeedPaint = needPaint; @@ -57,12 +62,13 @@ public PaletteRibbonAppButton([DisallowNull] PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonAppButton.IsDefault && - RibbonGroupCollapsedBorder.IsDefault && - RibbonGroupCollapsedBack.IsDefault && - RibbonGroupCollapsedFrameBorder.IsDefault && - RibbonGroupCollapsedFrameBack.IsDefault && - RibbonGroupCollapsedText.IsDefault; + RibbonGroupCollapsedBorder.IsDefault && + RibbonGroupCollapsedBack.IsDefault && + RibbonGroupCollapsedFrameBorder.IsDefault && + RibbonGroupCollapsedFrameBack.IsDefault && + RibbonGroupCollapsedText.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppGroupTab.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppGroupTab.cs index 63d349b10..664e36ed8 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppGroupTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonAppGroupTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -59,16 +59,17 @@ public PaletteRibbonAppGroupTab(PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - RibbonGroupArea.IsDefault && - RibbonAppButton.IsDefault && - RibbonGroupNormalBorder.IsDefault && - RibbonGroupNormalTitle.IsDefault && - RibbonGroupCollapsedBorder.IsDefault && - RibbonGroupCollapsedBack.IsDefault && - RibbonGroupCollapsedFrameBorder.IsDefault && - RibbonGroupCollapsedFrameBack.IsDefault && - RibbonGroupCollapsedText.IsDefault; + RibbonGroupArea.IsDefault && + RibbonAppButton.IsDefault && + RibbonGroupNormalBorder.IsDefault && + RibbonGroupNormalTitle.IsDefault && + RibbonGroupCollapsedBorder.IsDefault && + RibbonGroupCollapsedBack.IsDefault && + RibbonGroupCollapsedFrameBorder.IsDefault && + RibbonGroupCollapsedFrameBack.IsDefault && + RibbonGroupCollapsedText.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextBack.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextBack.cs index d5430e036..b673ef92d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextBack.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextBack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,7 +31,13 @@ public class PaletteRibbonContextBack : IPaletteRibbonBack /// Reference to ribbon control. public PaletteRibbonContextBack([DisallowNull] KryptonRibbon ribbon) { - Debug.Assert(ribbon != null); + Debug.Assert(ribbon is not null); + + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } + _ribbon = ribbon; } #endregion @@ -161,13 +167,12 @@ public Color GetRibbonBackColor5(PaletteState state) return retColor; } #endregion - #region Implementation private Color CheckForContextColor() { // We need an associated ribbon tab // Does the ribbon tab have a context setting? - if (_ribbon.SelectedTab != null) + if (_ribbon is not null && _ribbon.SelectedTab is not null) { KryptonRibbonTab selectedTab = _ribbon.SelectedTab; if (!string.IsNullOrEmpty(selectedTab?.ContextName)) diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextDouble.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextDouble.cs index e06c87558..4b00333a7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextDouble.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonContextDouble.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -33,8 +33,9 @@ public class PaletteRibbonContextDouble : IPaletteRibbonBack, /// Reference to ribbon control. public PaletteRibbonContextDouble([DisallowNull] KryptonRibbon ribbon) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); LightBackground = false; } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonDisabled.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonDisabled.cs index 4d00920d5..72fc04635 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonDisabled.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonDisabled.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -48,10 +48,11 @@ public PaletteRibbonDisabled(PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonGroupCheckBoxText.IsDefault && - RibbonGroupButtonText.IsDefault && - RibbonGroupLabelText.IsDefault && - RibbonGroupRadioButtonText.IsDefault; + RibbonGroupButtonText.IsDefault && + RibbonGroupLabelText.IsDefault && + RibbonGroupRadioButtonText.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonFocus.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonFocus.cs index be29cb597..87f4f8943 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonFocus.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonFocus.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,13 +31,18 @@ public class PaletteRibbonFocus : PaletteMetricRedirect /// Inheritence redirection instance. /// Paint delegate. public PaletteRibbonFocus([DisallowNull] PaletteRedirect redirect, - NeedPaintHandler needPaint) + [DisallowNull] NeedPaintHandler? needPaint) : base(redirect) { - Debug.Assert(redirect != null); + Debug.Assert(redirect is not null); + + if (redirect is null) + { + throw new ArgumentNullException(nameof(redirect)); + } // Store the provided paint notification delegate - NeedPaint = needPaint; + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Create the redirection instances _ribbonTabInherit = new PaletteRibbonDoubleInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonTab, PaletteRibbonTextStyle.RibbonTab); @@ -52,7 +57,7 @@ public PaletteRibbonFocus([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public override void SetRedirector(PaletteRedirect? redirect) + public override void SetRedirector(PaletteRedirect redirect) { base.SetRedirector(redirect); _ribbonTabInherit.SetRedirector(redirect); @@ -64,6 +69,7 @@ public override void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonTab.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupAreaTab.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupAreaTab.cs index 8f233cbf1..f59bc4520 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupAreaTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupAreaTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -42,8 +42,9 @@ public PaletteRibbonGroupAreaTab(PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - RibbonGroupArea.IsDefault; + RibbonGroupArea.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupTab.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupTab.cs index 29ece950c..c8334501d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonGroupTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -57,15 +57,16 @@ public PaletteRibbonGroupTab(PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - RibbonGroupArea.IsDefault && - RibbonGroupNormalBorder.IsDefault && - RibbonGroupNormalTitle.IsDefault && - RibbonGroupCollapsedBorder.IsDefault && - RibbonGroupCollapsedBack.IsDefault && - RibbonGroupCollapsedFrameBorder.IsDefault && - RibbonGroupCollapsedFrameBack.IsDefault && - RibbonGroupCollapsedText.IsDefault; + RibbonGroupArea.IsDefault && + RibbonGroupNormalBorder.IsDefault && + RibbonGroupNormalTitle.IsDefault && + RibbonGroupCollapsedBorder.IsDefault && + RibbonGroupCollapsedBack.IsDefault && + RibbonGroupCollapsedFrameBorder.IsDefault && + RibbonGroupCollapsedFrameBack.IsDefault && + RibbonGroupCollapsedText.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonImages.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonImages.cs index 2932383c4..17eb28924 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonImages.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -43,8 +43,9 @@ public PaletteRibbonImages([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => CheckBox.IsDefault && - RadioButton.IsDefault; + RadioButton.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustGroup.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustGroup.cs index d16e33fd0..06cbaa69b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustGroup.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -37,12 +37,17 @@ public class PaletteRibbonJustGroup : Storage /// Source for inheriting values. /// Delegate for notifying paint requests. public PaletteRibbonJustGroup([DisallowNull] PaletteRibbonRedirect inherit, - NeedPaintHandler needPaint) + [DisallowNull] NeedPaintHandler needPaint) { - Debug.Assert(inherit != null); + Debug.Assert(inherit is not null); + + if (inherit is null) + { + throw new ArgumentNullException(nameof(inherit)); + } // Store the provided paint notification delegate - NeedPaint = needPaint; + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Create storage that maps onto the inherit instances _ribbonGroupArea = new PaletteRibbonBack(inherit.RibbonGroupBackArea, needPaint); @@ -61,14 +66,15 @@ public PaletteRibbonJustGroup([DisallowNull] PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonGroupArea.IsDefault && - RibbonGroupNormalBorder.IsDefault && - RibbonGroupNormalTitle.IsDefault && - RibbonGroupCollapsedBorder.IsDefault && - RibbonGroupCollapsedBack.IsDefault && - RibbonGroupCollapsedFrameBorder.IsDefault && - RibbonGroupCollapsedFrameBack.IsDefault && - RibbonGroupCollapsedText.IsDefault; + RibbonGroupNormalBorder.IsDefault && + RibbonGroupNormalTitle.IsDefault && + RibbonGroupCollapsedBorder.IsDefault && + RibbonGroupCollapsedBack.IsDefault && + RibbonGroupCollapsedFrameBorder.IsDefault && + RibbonGroupCollapsedFrameBack.IsDefault && + RibbonGroupCollapsedText.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustTab.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustTab.cs index 7eb47c947..36c7fb23b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonJustTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,12 +30,17 @@ public class PaletteRibbonJustTab : Storage /// Source for inheriting values. /// Delegate for notifying paint requests. public PaletteRibbonJustTab([DisallowNull] PaletteRibbonRedirect inherit, - NeedPaintHandler needPaint) + [DisallowNull] NeedPaintHandler needPaint) { - Debug.Assert(inherit != null); + Debug.Assert(inherit is not null); + + if (inherit is null) + { + throw new ArgumentNullException(nameof(inherit)); + } // Store the provided paint notification delegate - NeedPaint = needPaint; + NeedPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Create storage that maps onto the inherit instances _ribbonTab = new PaletteRibbonDouble(inherit.RibbonTab, inherit.RibbonTab, needPaint); @@ -47,6 +52,7 @@ public PaletteRibbonJustTab([DisallowNull] PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonTab.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonNormal.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonNormal.cs index 63430505e..2463125dd 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonNormal.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonNormal.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -36,6 +36,7 @@ public PaletteRibbonNormal(PaletteRibbonRedirect inherit, NeedPaintHandler needPaint) : base(inherit, needPaint) { + RibbonFileAppTab = new PaletteRibbonFileAppTab(inherit.RibbonFileAppTab, needPaint); // Create storage that maps onto the inherit instances _ribbonGroupCheckBoxText = new PaletteRibbonText(inherit.RibbonGroupCheckBoxText, needPaint); _ribbonGroupButtonText = new PaletteRibbonText(inherit.RibbonGroupButtonText, needPaint); @@ -49,11 +50,12 @@ public PaletteRibbonNormal(PaletteRibbonRedirect inherit, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - RibbonGroupCheckBoxText.IsDefault && - RibbonGroupButtonText.IsDefault && - RibbonGroupLabelText.IsDefault && - RibbonGroupRadioButtonText.IsDefault; + RibbonGroupCheckBoxText.IsDefault && + RibbonGroupButtonText.IsDefault && + RibbonGroupLabelText.IsDefault && + RibbonGroupRadioButtonText.IsDefault; #endregion @@ -86,6 +88,17 @@ public override void SetInherit(PaletteRibbonRedirect inherit) } #endregion + + /// + /// Gets the set of ribbon application button display strings. + /// + [Category(@"Values")] + [Description(@"Collection of ribbon 'File app button' settings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public virtual PaletteRibbonFileAppTab RibbonFileAppTab { get; } + private bool ShouldSerializeRibbonFileAppTab() => !RibbonFileAppTab.IsDefault; + #region RibbonGroupCheckBoxText /// /// Gets access to the ribbon group check box label palette details. @@ -94,7 +107,6 @@ public override void SetInherit(PaletteRibbonRedirect inherit) [Description(@"Overrides for defining ribbon group check box label appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public virtual PaletteRibbonText RibbonGroupCheckBoxText => _ribbonGroupCheckBoxText; - private bool ShouldSerializeRibbonGroupCheckBoxText() => !_ribbonGroupCheckBoxText.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonRedirect.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonRedirect.cs index 378a5976c..6628f5f86 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonRedirect.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -49,6 +49,7 @@ public class PaletteRibbonRedirect : PaletteMetricRedirect // Redirection private readonly PaletteRibbonBackInheritRedirect _ribbonAppButtonInherit; + private readonly PaletteRibbonFileAppTabInheritRedirect _ribbonFileAppTabInherit; private readonly PaletteRibbonBackInheritRedirect _ribbonAppMenuOuterInherit; private readonly PaletteRibbonBackInheritRedirect _ribbonAppMenuInnerInherit; private readonly PaletteRibbonBackInheritRedirect _ribbonAppMenuDocsInherit; @@ -89,46 +90,48 @@ public PaletteRibbonRedirect([DisallowNull] PaletteRedirect redirect, : base(redirect) { Debug.Assert(redirect != null); - + var _redirect = redirect!; // Store the provided paint notification delegate NeedPaint = needPaint; // Create the style redirection instances - RibbonGroupButton = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); - RibbonGroupClusterButton = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); - RibbonGroupCollapsedButton = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); - RibbonGroupDialogButton = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); - RibbonKeyTip = new PaletteTripleRedirect(redirect, PaletteBackStyle.ControlToolTip, PaletteBorderStyle.ControlToolTip, PaletteContentStyle.LabelKeyTip, needPaint); - RibbonQATButton = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); - RibbonScroller = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); + RibbonGroupButton = new PaletteTripleRedirect(_redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); + RibbonGroupClusterButton = new PaletteTripleRedirect(_redirect, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); + RibbonGroupCollapsedButton = new PaletteTripleRedirect(_redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); + RibbonGroupDialogButton = new PaletteTripleRedirect(_redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); + RibbonKeyTip = new PaletteTripleRedirect(_redirect, PaletteBackStyle.ControlToolTip, PaletteBorderStyle.ControlToolTip, PaletteContentStyle.LabelKeyTip, needPaint); + RibbonQATButton = new PaletteTripleRedirect(_redirect, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); + RibbonScroller = new PaletteTripleRedirect(_redirect, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); // Create the redirection instances - _ribbonAppButtonInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonAppButton); - _ribbonAppMenuInnerInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonAppMenuInner); - _ribbonAppMenuOuterInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonAppMenuOuter); - _ribbonAppMenuDocsInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonAppMenuDocs); - _ribbonAppMenuDocsTitleInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonAppMenuDocsTitle); - _ribbonAppMenuDocsEntryInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonAppMenuDocsEntry); - _ribbonGeneralInherit = new PaletteRibbonGeneralInheritRedirect(redirect); - _ribbonGroupBackAreaInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGroupArea); - _ribbonGroupButtonTextInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonGroupButtonText); - _ribbonGroupCheckBoxTextInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonGroupCheckBoxText); - _ribbonGroupCollapsedBackInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedBack); - _ribbonGroupCollapsedBorderInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedBorder); - _ribbonGroupCollapsedFrameBackInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack); - _ribbonGroupCollapsedFrameBorderInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder); - _ribbonGroupCollapsedTextInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonGroupCollapsedText); - _ribbonGroupNormalBorderInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGroupNormalBorder); - _ribbonGroupNormalTitleInherit = new PaletteRibbonDoubleInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGroupNormalTitle, PaletteRibbonTextStyle.RibbonGroupNormalTitle); - _ribbonGroupRadioButtonTextInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonGroupRadioButtonText); - _ribbonGroupLabelTextInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonGroupLabelText); - _ribbonTabInherit = new PaletteRibbonDoubleInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonTab, PaletteRibbonTextStyle.RibbonTab); - _ribbonQATFullbarInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonQATFullbar); - _ribbonQATMinibarInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonQATMinibar); - _ribbonQATOverflowInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonQATOverflow); + _ribbonAppButtonInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonAppButton); + _ribbonFileAppTabInherit = new PaletteRibbonFileAppTabInheritRedirect(_redirect); + _ribbonAppMenuInnerInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonAppMenuInner); + _ribbonAppMenuOuterInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonAppMenuOuter); + _ribbonAppMenuDocsInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonAppMenuDocs); + _ribbonAppMenuDocsTitleInherit = new PaletteRibbonTextInheritRedirect(_redirect, PaletteRibbonTextStyle.RibbonAppMenuDocsTitle); + _ribbonAppMenuDocsEntryInherit = new PaletteRibbonTextInheritRedirect(_redirect, PaletteRibbonTextStyle.RibbonAppMenuDocsEntry); + _ribbonGeneralInherit = new PaletteRibbonGeneralInheritRedirect(_redirect); + _ribbonGroupBackAreaInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonGroupArea); + _ribbonGroupButtonTextInherit = new PaletteRibbonTextInheritRedirect(_redirect, PaletteRibbonTextStyle.RibbonGroupButtonText); + _ribbonGroupCheckBoxTextInherit = new PaletteRibbonTextInheritRedirect(_redirect, PaletteRibbonTextStyle.RibbonGroupCheckBoxText); + _ribbonGroupCollapsedBackInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedBack); + _ribbonGroupCollapsedBorderInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedBorder); + _ribbonGroupCollapsedFrameBackInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack); + _ribbonGroupCollapsedFrameBorderInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder); + _ribbonGroupCollapsedTextInherit = new PaletteRibbonTextInheritRedirect(_redirect, PaletteRibbonTextStyle.RibbonGroupCollapsedText); + _ribbonGroupNormalBorderInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonGroupNormalBorder); + _ribbonGroupNormalTitleInherit = new PaletteRibbonDoubleInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonGroupNormalTitle, PaletteRibbonTextStyle.RibbonGroupNormalTitle); + _ribbonGroupRadioButtonTextInherit = new PaletteRibbonTextInheritRedirect(_redirect, PaletteRibbonTextStyle.RibbonGroupRadioButtonText); + _ribbonGroupLabelTextInherit = new PaletteRibbonTextInheritRedirect(_redirect, PaletteRibbonTextStyle.RibbonGroupLabelText); + _ribbonTabInherit = new PaletteRibbonDoubleInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonTab, PaletteRibbonTextStyle.RibbonTab); + _ribbonQATFullbarInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonQATFullbar); + _ribbonQATMinibarInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonQATMinibar); + _ribbonQATOverflowInherit = new PaletteRibbonBackInheritRedirect(_redirect, PaletteRibbonBackStyle.RibbonQATOverflow); // Create storage that maps onto the inherit instances _ribbonAppButton = new PaletteRibbonBack(_ribbonAppButtonInherit, needPaint); + RibbonFileAppTab = new PaletteRibbonFileAppTab(_ribbonFileAppTabInherit, needPaint); _ribbonAppMenuInner = new PaletteRibbonBack(_ribbonAppMenuInnerInherit, needPaint); _ribbonAppMenuOuter = new PaletteRibbonBack(_ribbonAppMenuOuterInherit, needPaint); _ribbonAppMenuDocs = new PaletteRibbonBack(_ribbonAppMenuDocsInherit, needPaint); @@ -152,7 +155,7 @@ public PaletteRibbonRedirect([DisallowNull] PaletteRedirect redirect, _ribbonQATMinibarActive = new PaletteRibbonBack(_ribbonQATMinibarInherit, needPaint); _ribbonQATMinibarInactive = new PaletteRibbonBack(_ribbonQATMinibarInherit, needPaint); _ribbonQATOverflow = new PaletteRibbonBack(_ribbonQATOverflowInherit, needPaint); - _ribbonImages = new PaletteRibbonImages(redirect, NeedPaintDelegate); + _ribbonImages = new PaletteRibbonImages(_redirect, NeedPaintDelegate); } #endregion @@ -161,7 +164,7 @@ public PaletteRibbonRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public override void SetRedirector(PaletteRedirect? redirect) + public override void SetRedirector(PaletteRedirect redirect) { base.SetRedirector(redirect); RibbonGroupButton.SetRedirector(redirect); @@ -172,6 +175,7 @@ public override void SetRedirector(PaletteRedirect? redirect) RibbonQATButton.SetRedirector(redirect); RibbonScroller.SetRedirector(redirect); _ribbonAppButtonInherit.SetRedirector(redirect); + _ribbonFileAppTabInherit.SetRedirector(redirect); _ribbonAppMenuInnerInherit.SetRedirector(redirect); _ribbonAppMenuOuterInherit.SetRedirector(redirect); _ribbonAppMenuDocsInherit.SetRedirector(redirect); @@ -202,31 +206,32 @@ public override void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonAppButton.IsDefault && - RibbonAppMenuOuter.IsDefault && - RibbonAppMenuInner.IsDefault && - RibbonAppMenuDocs.IsDefault && - RibbonAppMenuDocsTitle.IsDefault && - RibbonAppMenuDocsEntry.IsDefault && - RibbonGeneral.IsDefault && - RibbonGroupBackArea.IsDefault && - RibbonGroupCheckBoxText.IsDefault && - RibbonGroupNormalBorder.IsDefault && - RibbonGroupNormalTitle.IsDefault && - RibbonGroupButtonText.IsDefault && - RibbonGroupCollapsedBorder.IsDefault && - RibbonGroupCollapsedBack.IsDefault && - RibbonGroupCollapsedFrameBorder.IsDefault && - RibbonGroupCollapsedFrameBack.IsDefault && - RibbonGroupCollapsedText.IsDefault && - RibbonGroupRadioButtonText.IsDefault && - RibbonGroupLabelText.IsDefault && - RibbonImages.IsDefault && - RibbonTab.IsDefault && - RibbonQATFullbar.IsDefault && - RibbonQATMinibarActive.IsDefault && - RibbonQATMinibarInactive.IsDefault && - RibbonQATOverflow.IsDefault; + RibbonAppMenuOuter.IsDefault && + RibbonAppMenuInner.IsDefault && + RibbonAppMenuDocs.IsDefault && + RibbonAppMenuDocsTitle.IsDefault && + RibbonAppMenuDocsEntry.IsDefault && + RibbonGeneral.IsDefault && + RibbonGroupBackArea.IsDefault && + RibbonGroupCheckBoxText.IsDefault && + RibbonGroupNormalBorder.IsDefault && + RibbonGroupNormalTitle.IsDefault && + RibbonGroupButtonText.IsDefault && + RibbonGroupCollapsedBorder.IsDefault && + RibbonGroupCollapsedBack.IsDefault && + RibbonGroupCollapsedFrameBorder.IsDefault && + RibbonGroupCollapsedFrameBack.IsDefault && + RibbonGroupCollapsedText.IsDefault && + RibbonGroupRadioButtonText.IsDefault && + RibbonGroupLabelText.IsDefault && + RibbonImages.IsDefault && + RibbonTab.IsDefault && + RibbonQATFullbar.IsDefault && + RibbonQATMinibarActive.IsDefault && + RibbonQATMinibarInactive.IsDefault && + RibbonQATOverflow.IsDefault; #endregion @@ -238,9 +243,18 @@ public override void SetRedirector(PaletteRedirect? redirect) [Description(@"Overrides for defining application button appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public virtual PaletteRibbonBack RibbonAppButton => _ribbonAppButton; - private bool ShouldSerializeRibbonAppButton() => !_ribbonAppButton.IsDefault; + #endregion + #region RibbonFileAppTab + /// + /// Gets access to the application button palette details. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining application button appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public virtual PaletteRibbonFileAppTab RibbonFileAppTab { get; } + private bool ShouldSerializeRibbonFileAppTab() => !RibbonFileAppTab.IsDefault; #endregion #region RibbonAppMenuOuter @@ -342,9 +356,7 @@ public override void SetRedirector(PaletteRedirect? redirect) [Description(@"Overrides for defining ribbon group check box label appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public virtual PaletteRibbonText RibbonGroupCheckBoxText => _ribbonGroupCheckBoxText; - private bool ShouldSerializeRibbonGroupCheckBoxText() => !_ribbonGroupCheckBoxText.IsDefault; - #endregion #region RibbonGroupButtonText diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonStyles.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonStyles.cs index 0fda5538b..18538b0b5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonStyles.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/PaletteRibbonStyles.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -29,11 +29,14 @@ public class PaletteRibbonStyles : Storage ///
/// Source ribbon control instance. /// Delegate for notifying paint requests. - public PaletteRibbonStyles([DisallowNull] KryptonRibbon ribbon, - NeedPaintHandler needPaint) + public PaletteRibbonStyles(KryptonRibbon ribbon, + NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(ribbon is not null); + + _ribbon = ribbon!; // Store the provided paint notification delegate NeedPaint = needPaint; @@ -45,13 +48,14 @@ public PaletteRibbonStyles([DisallowNull] KryptonRibbon ribbon, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (BackStyle == PaletteBackStyle.PanelClient) && - (GroupButtonStyle == ButtonStyle.ButtonSpec) && - (GroupClusterButtonStyle == ButtonStyle.Cluster) && - (GroupDialogButtonStyle == ButtonStyle.ButtonSpec) && - (GroupCollapsedButtonStyle == ButtonStyle.Alternate) && - (QATButtonStyle == ButtonStyle.ButtonSpec) && - (ScrollerStyle == ButtonStyle.Standalone); + (GroupButtonStyle == ButtonStyle.ButtonSpec) && + (GroupClusterButtonStyle == ButtonStyle.Cluster) && + (GroupDialogButtonStyle == ButtonStyle.ButtonSpec) && + (GroupCollapsedButtonStyle == ButtonStyle.Alternate) && + (QATButtonStyle == ButtonStyle.ButtonSpec) && + (ScrollerStyle == ButtonStyle.Standalone); #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToContent.cs index 6efc8d7a2..2f809bc84 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -27,8 +27,9 @@ internal class QATButtonToContent : IPaletteContent /// Source for button values. public QATButtonToContent([DisallowNull] IQuickAccessToolbarButton qatButton) { - Debug.Assert(qatButton != null); - _qatButton = qatButton; + Debug.Assert(qatButton is not null); + + _qatButton = qatButton ?? throw new ArgumentNullException(nameof(qatButton)); } #endregion @@ -89,21 +90,21 @@ public PaletteImageEffect GetContentImageEffect(PaletteState state) => state != ///
/// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextFont(PaletteState state) => null; + public Font? GetContentShortTextFont(PaletteState state) => null; /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextNewFont(PaletteState state) => null; + public Font? GetContentShortTextNewFont(PaletteState state) => null; /// /// Gets the rendering hint for the short text. /// /// Palette value should be applicable to this state. /// PaletteTextHint value. - public PaletteTextHint GetContentShortTextHint(PaletteState state) => PaletteTextHint.SystemDefault; + public PaletteTextHint GetContentShortTextHint(PaletteState state) => PaletteTextHint.ClearTypeGridFit; /// /// Gets the prefix drawing setting for short text. @@ -208,21 +209,21 @@ public PaletteImageEffect GetContentImageEffect(PaletteState state) => state != /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentLongTextFont(PaletteState state) => null; + public Font? GetContentLongTextFont(PaletteState state) => null; /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentLongTextNewFont(PaletteState state) => null; + public Font? GetContentLongTextNewFont(PaletteState state) => null; /// /// Gets the rendering hint for the long text. /// /// Palette value should be applicable to this state. /// PaletteTextHint value. - public PaletteTextHint GetContentLongTextHint(PaletteState state) => PaletteTextHint.SystemDefault; + public PaletteTextHint GetContentLongTextHint(PaletteState state) => PaletteTextHint.ClearTypeGridFit; /// /// Gets the flag indicating if multiline text is allowed for long text. diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToolTipToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToolTipToContent.cs index 2d017e8d0..f23ac70d2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToolTipToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/QATButtonToolTipToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,8 +30,9 @@ internal class QATButtonToolTipToContent : IContentValues /// Source quick access toolbar button. public QATButtonToolTipToContent([DisallowNull] IQuickAccessToolbarButton qatButton) { - Debug.Assert(qatButton != null); - _qatButton = qatButton; + Debug.Assert(qatButton is not null); + + _qatButton = qatButton ?? throw new ArgumentNullException(nameof(qatButton)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonAppButton.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonFileAppButton.cs similarity index 62% rename from Source/Krypton Components/Krypton.Ribbon/Palette/RibbonAppButton.cs rename to Source/Krypton Components/Krypton.Ribbon/Palette/RibbonFileAppButton.cs index 0bffb6605..204b7a6f9 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonAppButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonFileAppButton.cs @@ -1,27 +1,22 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion namespace Krypton.Ribbon { /// - /// Storage for application button related properties. + /// Storage for File application button related properties. /// - public class RibbonAppButton : Storage + public class RibbonFileAppButton : Storage { #region Static Fields - private static readonly Image _defaultAppImage = GenericImageResources.AppButtonDefault; - private const string DEFAULT_APP_TEXT = @"File"; - private static readonly Color _defaultAppBaseColorDark = Color.FromArgb(31, 72, 161); - private static readonly Color _defaultAppBaseColorLight = Color.FromArgb(84, 158, 243); + private static readonly Image? _defaultAppImage = GenericImageResources.AppButtonDefault; #endregion #region Type Definitions @@ -45,24 +40,21 @@ public AppMenuButtonSpecCollection(KryptonRibbon owner) #region Instance Fields private readonly KryptonRibbon _ribbon; - private Image _appButtonImage; + private Image? _appButtonImage; private readonly KryptonContextMenuItems _appButtonMenuItems; private bool _appButtonVisible; - private Color _appButtonBaseColorDark; - private Color _appButtonBaseColorLight; - private Color _appButtonTextColor; - private string _appButtonText; + private bool _formCloseBoxVisible; #endregion #region Identity /// - /// Initialize a new instance of the RibbonAppButton class. + /// Initialize a new instance of the RibbonFileAppButton class. /// /// Reference to owning ribbon instance. - public RibbonAppButton([DisallowNull] KryptonRibbon ribbon) + public RibbonFileAppButton([DisallowNull] KryptonRibbon ribbon) { Debug.Assert(ribbon != null); - _ribbon = ribbon; + _ribbon = ribbon!; // Default values _appButtonMenuItems = new KryptonContextMenuItems @@ -70,20 +62,16 @@ public RibbonAppButton([DisallowNull] KryptonRibbon ribbon) ImageColumn = false }; _appButtonImage = _defaultAppImage; - AppButtonSpecs = new AppMenuButtonSpecCollection(ribbon); - AppButtonRecentDocs = new KryptonRibbonRecentDocCollection(); + AppButtonSpecs = new AppMenuButtonSpecCollection(_ribbon); + AppButtonRecentDocs = []; AppButtonToolTipTitle = string.Empty; AppButtonToolTipBody = string.Empty; AppButtonToolTipImageTransparentColor = Color.Empty; - AppButtonToolTipStyle = LabelStyle.SuperTip; AppButtonMinRecentSize = new Size(250, 250); AppButtonMaxRecentSize = new Size(350, 350); AppButtonShowRecentDocs = true; _appButtonVisible = true; - _appButtonBaseColorDark = _defaultAppBaseColorDark; - _appButtonBaseColorLight = _defaultAppBaseColorLight; - _appButtonTextColor = Color.White; - _appButtonText = DEFAULT_APP_TEXT; + _formCloseBoxVisible = false; } #endregion @@ -92,24 +80,22 @@ public RibbonAppButton([DisallowNull] KryptonRibbon ribbon) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (AppButtonImage == _defaultAppImage) && - (AppButtonText == DEFAULT_APP_TEXT) && - (AppButtonBaseColorDark == _defaultAppBaseColorDark) && - (AppButtonBaseColorLight == _defaultAppBaseColorLight) && - (AppButtonTextColor == Color.White) && - (AppButtonMenuItems.Count == 0) && - (AppButtonRecentDocs.Count == 0) && - AppButtonMinRecentSize.Equals(new Size(250, 250)) && - AppButtonMaxRecentSize.Equals(new Size(350, 350)) && - AppButtonShowRecentDocs && - (AppButtonSpecs.Count == 0) && - string.IsNullOrEmpty(AppButtonToolTipBody) && - string.IsNullOrEmpty(AppButtonToolTipBody) && - (AppButtonToolTipImage == null) && - (AppButtonToolTipImageTransparentColor == Color.Empty) && - (AppButtonToolTipStyle == LabelStyle.SuperTip) && - AppButtonVisible - && !IgnoreDoubleClickClose; + (AppButtonMenuItems.Count == 0) && + (AppButtonRecentDocs.Count == 0) && + AppButtonMinRecentSize.Equals(new Size(250, 250)) && + AppButtonMaxRecentSize.Equals(new Size(350, 350)) && + AppButtonShowRecentDocs && + (AppButtonSpecs.Count == 0) && + string.IsNullOrEmpty(AppButtonToolTipBody) && + string.IsNullOrEmpty(AppButtonToolTipBody) && + (AppButtonToolTipImage == null) && + (AppButtonToolTipImageTransparentColor == Color.Empty) && + (AppButtonToolTipStyle == LabelStyle.SuperTip) && + AppButtonVisible + && !IgnoreDoubleClickClose + && !FormCloseBoxVisible; #endregion @@ -121,7 +107,7 @@ public RibbonAppButton([DisallowNull] KryptonRibbon ribbon) [Category(@"Values")] [Description(@"Application button image.")] [RefreshProperties(RefreshProperties.All)] - public Image AppButtonImage + public Image? AppButtonImage { get => _appButtonImage; @@ -141,103 +127,6 @@ public Image AppButtonImage #endregion - #region AppButtonBaseColorDark - /// - /// Gets and sets the darker base color used for drawing an Office 2010 style application button. - /// - [Bindable(true)] - [Category(@"Appearance")] - [Description(@"Darker base color used for drawing an Office 2010 style application button.")] - [KryptonDefaultColor()] - [DefaultValue(typeof(Color), "31, 72, 161")] - public Color AppButtonBaseColorDark - { - get => _appButtonBaseColorDark; - - set - { - if (_appButtonBaseColorDark != value) - { - _appButtonBaseColorDark = value; - _ribbon.PerformNeedPaint(true); - } - } - } - #endregion - - #region AppButtonBaseColorLight - /// - /// Gets and sets the lighter base color used for drawing an Office 2010 style application button. - /// - [Bindable(true)] - [Category(@"Appearance")] - [Description(@"Lighter base color used for drawing an Office 2010 style application button.")] - [KryptonDefaultColor()] - [DefaultValue(typeof(Color), "84, 158, 243")] - public Color AppButtonBaseColorLight - { - get => _appButtonBaseColorLight; - - set - { - if (_appButtonBaseColorLight != value) - { - _appButtonBaseColorLight = value; - _ribbon.PerformNeedPaint(true); - } - } - } - #endregion - - #region AppButtonTextColor - /// - /// Gets and sets the text color used for drawing an Office 2010 style application button. - /// - [Bindable(true)] - [Category(@"Appearance")] - [Description(@"Text color used for drawing an Office 2010 style application button.")] - [KryptonDefaultColor()] - [DefaultValue(typeof(Color), "White")] - public Color AppButtonTextColor - { - get => _appButtonTextColor; - - set - { - if (_appButtonTextColor != value) - { - _appButtonTextColor = value; - _ribbon.PerformNeedPaint(true); - } - } - } - #endregion - - #region AppButtonText - /// - /// Gets and sets the text used for drawing an Office 2010 style application button. - /// - [Bindable(true)] - [Category(@"Appearance")] - [Description(@"Text used for drawing an Office 2010 style application button.")] - [KryptonDefaultColor()] - [DefaultValue(nameof(File))] - [Localizable(true)] - public string AppButtonText - { - get => _appButtonText; - - set - { - if (_appButtonText != value) - { - _appButtonText = value; - _ribbon.PerformNeedPaint(true); - } - } - } - #endregion - #region AppButtonContextMenu /// /// Gets and sets the context menu items for the application button. @@ -307,6 +196,7 @@ public string AppButtonText #endregion #region AppButtonToolTipStyle + /// /// Gets and sets the tooltip label style for the application button. /// @@ -314,8 +204,9 @@ public string AppButtonText [Description(@"Tooltip style for the application button.")] [DefaultValue(typeof(LabelStyle), "SuperTip")] [Localizable(true)] - public LabelStyle AppButtonToolTipStyle { get; set; } - + public LabelStyle AppButtonToolTipStyle { get; set; } = LabelStyle.SuperTip; + private void ResetAppButtonToolTipStyle() => AppButtonToolTipStyle = LabelStyle.SuperTip; + private bool ShouldSerializeAppButtonToolTipStyle() => AppButtonToolTipStyle != LabelStyle.SuperTip; #endregion #region ToolTipShadow @@ -326,10 +217,8 @@ public string AppButtonText [Description(@"Button tooltip Shadow.")] [DefaultValue(true)] public bool ToolTipShadow { get; set; } = true; // Backward compatible -> "Material Design" suggests this to be false - - private bool ShouldSerializeToolTipShadow() => !ToolTipShadow; - private void ResetToolTipShadow() => ToolTipShadow = true; + private bool ShouldSerializeToolTipShadow() => !ToolTipShadow; #endregion #region AppButtonToolTipImage @@ -352,7 +241,7 @@ public string AppButtonText [Bindable(true)] [Category(@"Appearance")] [Description(@"Color to draw as transparent in the ToolTipImage.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [Localizable(true)] public Color AppButtonToolTipImageTransparentColor { get; set; } @@ -405,9 +294,41 @@ public bool AppButtonVisible if (_ribbon.CaptionArea != null) { - _ribbon.TabsArea.AppButtonVisibleChanged(); + _ribbon.TabsArea?.AppButtonVisibleChanged(); _ribbon.CaptionArea.AppButtonVisibleChanged(); _ribbon.CaptionArea.PerformFormChromeCheck(); + _ribbon.PerformNeedPaint(true); + } + } + } + } + #endregion + + #region FormCloseBoxVisible + /// + /// Gets and sets if the Form CloseBox button is shown. + /// + [Category(@"Visuals")] + [Description(@"Determine if the Form CloseBox button is shown.")] + [DefaultValue(false)] + public bool FormCloseBoxVisible + { + get => _formCloseBoxVisible; + + set + { + if (_formCloseBoxVisible != value) + { + _formCloseBoxVisible = value; + + if (_ribbon.CaptionArea != null) + { + if (_ribbon.CaptionArea.KryptonForm != null) + { + _ribbon.CaptionArea.KryptonForm.CloseBox = value; + } + + _ribbon.CaptionArea.PerformFormChromeCheck(); } } } diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonFileAppTab.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonFileAppTab.cs new file mode 100644 index 000000000..8516050f9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonFileAppTab.cs @@ -0,0 +1,71 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + */ +#endregion + +namespace Krypton.Ribbon +{ + /// + /// Storage for the "File application tab" related properties. + /// + public class RibbonFileAppTab : Storage + { + #region Instance Fields + private readonly KryptonRibbon _ribbon; + private string _fileAppTabText; + #endregion + + #region Identity + /// + /// Initialize a new instance of the RibbonFileAppButton class. + /// + /// Reference to owning ribbon instance. + public RibbonFileAppTab([DisallowNull] KryptonRibbon ribbon) + { + Debug.Assert(ribbon != null); + + _ribbon = ribbon!; + + ResetFileAppTabText(); + } + #endregion + + #region IsDefault + /// + /// Gets a value indicating if all values are default. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => !ShouldSerializeFileAppTabText(); + #endregion + + #region FileAppTabText + /// + /// Gets and sets the text used for drawing an Office 2010 style application button. + /// + [Bindable(true)] + [Category(@"Appearance")] + [Description(@"Text used for drawing an Office 2010 style application button.")] + [KryptonDefaultColor] + [DefaultValue(nameof(File))] + [Localizable(true)] + public string FileAppTabText + { + get => _fileAppTabText; + + set + { + if (_fileAppTabText != value) + { + _fileAppTabText = value; + _ribbon.PerformNeedPaint(true); + } + } + } + private void ResetFileAppTabText() => _fileAppTabText = KryptonManager.Strings.RibbonStrings.AppButtonText; + private bool ShouldSerializeFileAppTabText() => _fileAppTabText != KryptonManager.Strings.RibbonStrings.AppButtonText; + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupLabelTextToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupLabelTextToContent.cs index b6650ed0f..c668d3aa3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupLabelTextToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupLabelTextToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -40,15 +40,15 @@ public RibbonGroupLabelTextToContent([DisallowNull] PaletteRibbonGeneral ribbonG : base(ribbonGeneral) { - Debug.Assert(ribbonGroupTextNormal != null); - Debug.Assert(ribbonGroupTextDisabled != null); - Debug.Assert(ribbonLabelTextNormal != null); - Debug.Assert(ribbonLabelTextDisabled != null); + Debug.Assert(ribbonGroupTextNormal is not null); + Debug.Assert(ribbonGroupTextDisabled is not null); + Debug.Assert(ribbonLabelTextNormal is not null); + Debug.Assert(ribbonLabelTextDisabled is not null); - _ribbonGroupTextNormal = ribbonGroupTextNormal; - _ribbonGroupTextDisabled = ribbonGroupTextDisabled; - _ribbonLabelTextNormal = ribbonLabelTextNormal; - _ribbonLabelTextDisabled = ribbonLabelTextDisabled; + _ribbonGroupTextNormal = ribbonGroupTextNormal ?? throw new ArgumentNullException(nameof(ribbonGroupTextNormal)); + _ribbonGroupTextDisabled = ribbonGroupTextDisabled ?? throw new ArgumentNullException(nameof(ribbonGroupTextDisabled)); + _ribbonLabelTextNormal = ribbonLabelTextNormal ?? throw new ArgumentNullException(nameof(ribbonLabelTextNormal)); + _ribbonLabelTextDisabled = ribbonLabelTextDisabled ?? throw new ArgumentNullException(nameof(ribbonLabelTextDisabled)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupNormalDisabledTextToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupNormalDisabledTextToContent.cs index d276e2cac..3d1c43569 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupNormalDisabledTextToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupNormalDisabledTextToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -33,8 +33,18 @@ public RibbonGroupNormalDisabledTextToContent([DisallowNull] PaletteRibbonGenera [DisallowNull] IPaletteRibbonText ribbonGroupTextDisabled) : base(ribbonGeneral) { - Debug.Assert(ribbonGroupTextNormal != null); - Debug.Assert(ribbonGroupTextDisabled != null); + Debug.Assert(ribbonGroupTextNormal is not null); + Debug.Assert(ribbonGroupTextDisabled is not null); + + if (ribbonGroupTextNormal is null) + { + throw new ArgumentNullException(nameof(ribbonGroupTextNormal)); + } + + if (ribbonGroupTextDisabled is null) + { + throw new ArgumentNullException(nameof(ribbonGroupTextDisabled)); + } _ribbonGroupTextNormal = ribbonGroupTextNormal; _ribbonGroupTextDisabled = ribbonGroupTextDisabled; diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupTextToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupTextToContent.cs index 15fe1fdfe..4e9fd16b6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupTextToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonGroupTextToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -26,8 +26,9 @@ public RibbonGroupTextToContent([DisallowNull] PaletteRibbonGeneral ribbonGenera [DisallowNull] IPaletteRibbonText ribbonGroupText) : base(ribbonGeneral) { - Debug.Assert(ribbonGroupText != null); - PaletteRibbonGroup = ribbonGroupText; + Debug.Assert(ribbonGroupText is not null); + + PaletteRibbonGroup = ribbonGroupText ?? throw new ArgumentNullException(nameof(ribbonGroupText)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsEntryToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsEntryToContent.cs index 7a8e367fb..396d94bf0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsEntryToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsEntryToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,8 +30,9 @@ public RibbonRecentDocsEntryToContent([DisallowNull] PaletteRibbonGeneral ribbon [DisallowNull] IPaletteRibbonText ribbonRecentDocEntryText) : base(ribbonGeneral) { - Debug.Assert(ribbonRecentDocEntryText != null); - _ribbonRecentDocEntryText = ribbonRecentDocEntryText; + Debug.Assert(ribbonRecentDocEntryText is not null); + + _ribbonRecentDocEntryText = ribbonRecentDocEntryText ?? throw new ArgumentNullException(nameof(ribbonRecentDocEntryText)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsShortCutToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsShortCutToContent.cs index cdb8579c5..2b59db297 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsShortCutToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsShortCutToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsTitleToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsTitleToContent.cs index a1032bb62..5727198be 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsTitleToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonRecentDocsTitleToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -35,8 +35,9 @@ public RibbonRecentDocsTitleToContent([DisallowNull] PaletteRibbonGeneral ribbon [DisallowNull] IPaletteRibbonText ribbonRecentTitleText) : base(ribbonGeneral) { - Debug.Assert(ribbonRecentTitleText != null); - _ribbonRecentTitleText = ribbonRecentTitleText; + Debug.Assert(ribbonRecentTitleText is not null); + + _ribbonRecentTitleText = ribbonRecentTitleText ?? throw new ArgumentNullException(nameof(ribbonRecentTitleText)); } /// diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonShortcuts.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonShortcuts.cs index 14538fffe..e563295ef 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonShortcuts.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonShortcuts.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -45,9 +45,10 @@ public RibbonShortcuts() /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (ToggleMinimizeMode == DEFAULT_TOGGLE_MINIMIZE_MODE) && - (ToggleKeyboardAccess1 == DEFAULT_TOGGLE_KEYBOARD_ACCESS1) && - (ToggleKeyboardAccess2 == DEFAULT_TOGGLE_KEYBOARD_ACCESS2); + (ToggleKeyboardAccess1 == DEFAULT_TOGGLE_KEYBOARD_ACCESS1) && + (ToggleKeyboardAccess2 == DEFAULT_TOGGLE_KEYBOARD_ACCESS2); #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonTabToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonTabToContent.cs index b19a792a8..21a67b0b2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonTabToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonTabToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -26,8 +26,9 @@ public RibbonTabToContent([DisallowNull] PaletteRibbonGeneral ribbonGeneral, [DisallowNull] IPaletteRibbonText ribbonTabText) : base(ribbonGeneral) { - Debug.Assert(ribbonTabText != null); - PaletteRibbonText = ribbonTabText; + Debug.Assert(ribbonTabText is not null); + + PaletteRibbonText = ribbonTabText ?? throw new ArgumentNullException(nameof(ribbonTabText)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonThemeManager.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonThemeManager.cs deleted file mode 100644 index e8fc79fa1..000000000 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonThemeManager.cs +++ /dev/null @@ -1,193 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Ribbon -{ - /// - /// Allows the developer to easily access the entire array of supported themes for ribbon controls. - /// - public class RibbonThemeManager - { - #region Implementation - - /// - /// Applies the theme. - /// - /// The mode. - /// The manager. - private static void ApplyTheme(PaletteMode mode, KryptonManager manager) => manager.GlobalPaletteMode = mode; - - /// Gets the palette mode. - /// The manager. - /// The current . - public static PaletteMode GetPaletteMode(KryptonManager manager) => ReturnPaletteMode(manager.GlobalPaletteMode); - - private static PaletteMode ReturnPaletteMode(string themeName) - { - return PaletteModeStrings.SupportedThemesMap.TryGetValue(themeName, out var mode) - ? mode - : // Note: Needs to be filled out - PaletteMode.Custom; - } - - /// Returns the palette mode. - /// The palette mode manager. - /// The selected . - private static PaletteMode ReturnPaletteMode(PaletteMode paletteMode) => paletteMode; - - /// - /// Applies the theme. - /// - /// Name of the theme. - /// The manager. - public static void ApplyTheme(string themeName, KryptonManager manager) => ApplyTheme(PaletteModeStrings.SupportedThemesMap[themeName], manager); - - /// - /// Sets the theme. - /// - /// Name of the theme. - /// The manager. - public static void SetTheme(string themeName, KryptonManager manager) - { - try - { - ApplyTheme(themeName, manager); - - ApplyGlobalTheme(manager, GetPaletteMode(manager)); - } - catch (Exception exc) - { - ExceptionHandler.CaptureException(exc); - } - } - - /// - /// Returns the palette mode manager as string. - /// - /// The palette mode manager. - /// The manager. - /// The chosen theme as a string. - public static string? ReturnPaletteModeAsString(PaletteMode paletteMode, KryptonManager? manager) - { - var mode = manager?.GlobalPaletteMode ?? paletteMode; - var cnvtr = new PaletteModeConverter(); - return cnvtr.ConvertToString(mode); - } - - /// - /// Loads the custom theme. - /// - /// The palette. - /// The manager. - /// A custom theme file. - /// if set to true [silent]. - public static void LoadCustomTheme(KryptonCustomPaletteBase palette, KryptonManager manager, string themeFile = "", bool silent = false) - { - try - { - //throw new ApplicationException(@"Currently not implemented correctly"); - - // Declare new instances - palette = new KryptonCustomPaletteBase(); - - manager = new KryptonManager(); - - // Prompt user for palette definition - - // TODO: Add silent option - if (silent) - { - if (themeFile is not ("" and "")) - { - palette.Import(themeFile, silent); - } - } - else - { - palette.Import(); - } - - // Set manager - manager.GlobalPalette = palette; - - ApplyTheme(PaletteMode.Custom, manager); - } - catch (Exception exc) - { - ExceptionHandler.CaptureException(exc); - } - } - - /// - /// Returns the palette mode as string. - /// - /// The palette mode. - /// - public static string? ReturnPaletteModeAsString(PaletteMode paletteMode) - { - var modeConverter = new PaletteModeConverter(); - - return modeConverter.ConvertToString(paletteMode); - } - - /// - /// Applies the global theme. - /// - /// The manager. - /// The palette mode manager. - public static void ApplyGlobalTheme(KryptonManager manager, PaletteMode paletteMode) - { - try - { - manager.GlobalPaletteMode = paletteMode; - } - catch (Exception exc) - { - ExceptionHandler.CaptureException(exc); - } - } - - private static void AddToCollection(IList target, string[] excludes) - { - try - { - foreach (var theme in PaletteModeStrings.SupportedThemesMap.Keys) - { - if (!excludes.Any(t => theme.IndexOf(t, StringComparison.InvariantCultureIgnoreCase) > -1)) - { - target.Add(theme); - } - } - } - catch (Exception exc) - { - ExceptionHandler.CaptureException(exc); - } - } - - /// - /// Applies the theme manager mode. - /// - /// Name of the theme. - /// The equivalent. - public static PaletteMode GetThemeManagerMode(string themeName) => PaletteModeStrings.SupportedThemesMap[themeName]; - - /// - /// Propagates the theme selector. - /// - /// The target. - /// do not include any string containing - public static void PropagateThemeSelector(KryptonRibbonGroupThemeComboBox target, params string[] excludePartials) => AddToCollection(target.Items, excludePartials); - - #endregion - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonToContent.cs b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonToContent.cs index b02f7d979..114b8b823 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonToContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -23,8 +23,9 @@ internal class RibbonToContent : IPaletteContent /// Source for general ribbon settings. public RibbonToContent([DisallowNull] PaletteRibbonGeneral ribbonGeneral) { - Debug.Assert(ribbonGeneral != null); - RibbonGeneral = ribbonGeneral; + Debug.Assert(ribbonGeneral is not null); + + RibbonGeneral = ribbonGeneral ?? throw new ArgumentNullException(nameof(ribbonGeneral)); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/Utilities/BiDictionary.cs b/Source/Krypton Components/Krypton.Ribbon/Utilities/BiDictionary.cs index 18b7987fb..1b642fcca 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Utilities/BiDictionary.cs +++ b/Source/Krypton Components/Krypton.Ribbon/Utilities/BiDictionary.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2024. All rights reserved. * */ #endregion @@ -19,8 +19,10 @@ internal class BiDictionary private static readonly IList _emptyFirstList = Array.Empty(); private static readonly IList _emptySecondList = Array.Empty(); +#pragma warning disable CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn't match 'notnull' constraint. private readonly IDictionary _firstToSecond = new Dictionary(); private readonly IDictionary _secondToFirst = new Dictionary(); +#pragma warning restore CS8714 // The type cannot be used as type parameter in the generic type or method. Nullability of type argument doesn't match 'notnull' constraint. public BiDictionary(IDictionary dictionary) @@ -51,13 +53,13 @@ public void Add(TFirst first, TSecond second) public TSecond GetByFirst(TFirst first) { _firstToSecond.TryGetValue(first, out var second); - return second; + return second!; } public TFirst GetBySecond(TSecond second) { _secondToFirst.TryGetValue(second, out var first); - return first; + return first!; } public ICollection GetAllFirsts() => _firstToSecond.Keys; diff --git a/Source/Krypton Components/Krypton.Ribbon/Utilities/ExceptionHandler.cs b/Source/Krypton Components/Krypton.Ribbon/Utilities/ExceptionHandler.cs deleted file mode 100644 index e45773382..000000000 --- a/Source/Krypton Components/Krypton.Ribbon/Utilities/ExceptionHandler.cs +++ /dev/null @@ -1,105 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Ribbon -{ - /// - /// This class is designed to handle thrown exceptions. (FOR INTERNAL USE ONLY!) - /// - internal class ExceptionHandler - { - #region Constructor - /// Initializes a new instance of the class. - public ExceptionHandler() - { - - } - #endregion - - #region Methods - /// Captures the exception. - /// The exception. - /// The title. - /// The buttons. - /// The icon. - /// Name of the class. - /// The method signature. - public static void CaptureException(Exception exception, string title = @"Exception Caught", KryptonMessageBoxButtons buttons = KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon icon = KryptonMessageBoxIcon.Error, string className = "", string methodSignature = "") - { - if (className != "") - { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.\n\nError in class: '{className}.cs'.", title, buttons, icon); - } - else if (methodSignature != "") - { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.\n\nError in method: '{methodSignature}'.", title, buttons, icon); - } - else if (className != "" && methodSignature != "") - { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.\n\nError in class: '{className}.cs'.\n\nError in method: '{methodSignature}'.", title, buttons, icon); - } - else - { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.", title, buttons, icon); - } - } - - /// Captures a stack trace of the exception. - /// The incoming exception. - /// The file to write the exception stack trace to. - public static void PrintStackTrace(Exception exc, string fileName) - { - try - { - if (!File.Exists(fileName)) - { - File.Create(fileName); - } - - using var writer = new StreamWriter(fileName); - - writer.Write(exc.ToString()); - - writer.Close(); - } - catch (Exception e) - { - CaptureException(e); - } - } - - /// Captures a stack trace of the exception. - /// The incoming exception. - /// The file to write the exception stack trace to. - public static void PrintExceptionStackTrace(Exception exc, string fileName) - { - try - { - if (!File.Exists(fileName)) - { - File.Create(fileName); - } - - using var writer = new StreamWriter(fileName); - - writer.Write(exc.StackTrace); - - writer.Close(); - } - catch (Exception e) - { - CaptureException(e); - } - } - #endregion - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Ribbon/Utilities/KryptonRibbonMerger.cs b/Source/Krypton Components/Krypton.Ribbon/Utilities/KryptonRibbonMerger.cs new file mode 100644 index 000000000..6782b9092 --- /dev/null +++ b/Source/Krypton Components/Krypton.Ribbon/Utilities/KryptonRibbonMerger.cs @@ -0,0 +1,413 @@ +#region Original MIT License + +/* + * Copyright(C) 2018 Michael Winsor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Created: September 28, 2018 9:03:32 PM + */ + +#endregion + +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Ribbon +{ + /// Merges a krypton ribbon with another ribbon. + /// + /// To affect the order of the merged groups and tabs, set the Tag property to a value from 0 to n, where n is the count of the target group minus 1. + /// + public class KryptonRibbonMerger + { + #region Instance Fields + + private readonly HashSet _mergedItems = new HashSet(); + + #endregion + + #region Public + + /// + /// Property to return the target ribbon that will receive the merged items. + /// + public KryptonRibbon TargetRibbon + { + get; + } + + #endregion + + #region Identity + + /// + /// Merges a krypton ribbon with another ribbon. + /// + /// The ribbon to merge with. + /// Will be thrown if the parameter targetRibbon is null. + public KryptonRibbonMerger([DisallowNull ]KryptonRibbon targetRibbon) + { + TargetRibbon = targetRibbon ?? throw new ArgumentNullException(nameof(targetRibbon)); + } + + #endregion + + #region Implementation + + /// + /// Function to retrieve the sorting index from the items tag. + /// + /// The value for the tag. + /// The maximum value for the items. + /// The sorting index. + private int GetSortIndexFromTag(object tagValue, int maxValue) + { + if (maxValue < 0) + { + return 0; + } + + return tagValue switch + { + null => maxValue, + string when int.TryParse(tagValue.ToString(), NumberStyles.Integer, CultureInfo.CurrentCulture, + out int parsedValue) => parsedValue.Max(0).Min(maxValue), + _ => (int)Convert.ChangeType(tagValue, typeof(int)) + }; + } + + /// + /// Function to unmerge items for a group from an existing items list in the target ribbon group. + /// + /// The source items to unmerge. + /// The destination items to unmerge. + private void UnmergeGroupItems(KryptonRibbonGroupContainerCollection sourceItems, KryptonRibbonGroupContainerCollection targetItems) + { + IEnumerable items = targetItems.ToArray(); + + foreach (KryptonRibbonGroupContainer item in items) + { + if (!_mergedItems.Contains(item)) + { + continue; + } + + _mergedItems.Remove(item); + targetItems.Remove(item); + sourceItems.Add(item); + } + } + + /// + /// Function to merge items from a group into an existing items list in the target ribbon group. + /// + /// The source items to merge. + /// The destination items to merge. + private void MergeGroupItems(KryptonRibbonGroupContainerCollection sourceItems, KryptonRibbonGroupContainerCollection targetItems) + { + IEnumerable items = sourceItems.ToArray(); + + foreach (KryptonRibbonGroupContainer sourceItem in items) + { + if (targetItems.Contains(sourceItem)) + { + continue; + } + + sourceItems.Remove(sourceItem); + int index = GetSortIndexFromTag(sourceItem.Tag!, targetItems.Count); + targetItems.Insert(index, sourceItem); + + if (!_mergedItems.Contains(sourceItem)) + { + _mergedItems.Add(sourceItem); + } + } + } + + /// + /// Function to unmerge the groups for a tab from an existing tab in the target ribbon tab. + /// + /// The source groups to unmerge. + /// The destination groups to unmerge. + private void UnmergeGroups(KryptonRibbonGroupCollection sourceGroups, KryptonRibbonGroupCollection targetGroups) + { + IEnumerable groups = targetGroups.ToArray(); + + foreach (KryptonRibbonGroup grp in groups) + { + if (!_mergedItems.Contains(grp)) + { + KryptonRibbonGroup? existingGroup = sourceGroups.FirstOrDefault(item => (string.Equals(item.TextLine1, grp.TextLine1, StringComparison.CurrentCulture)) + && (string.Equals(item.TextLine2, grp.TextLine2, StringComparison.CurrentCulture))); + + if (existingGroup is not null) + { + UnmergeGroupItems(existingGroup.Items, grp.Items); + } + + continue; + } + + _mergedItems.Remove(grp); + targetGroups.Remove(grp); + sourceGroups.Add(grp); + } + } + + /// + /// Function to merge the groups from a tab into an existing tab in the target ribbon tab. + /// + /// The source groups to merge. + /// The destination groups to merge. + private void MergeGroups(KryptonRibbonGroupCollection sourceGroups, KryptonRibbonGroupCollection targetGroups) + { + IEnumerable groups = sourceGroups.ToArray(); + + foreach (KryptonRibbonGroup sourceGroup in groups) + { + KryptonRibbonGroup? existingGroup = targetGroups.FirstOrDefault(item => (string.Equals(item.TextLine1, sourceGroup.TextLine1, StringComparison.CurrentCulture)) + && (string.Equals(item.TextLine2, sourceGroup.TextLine2, StringComparison.CurrentCulture))); + + if ((existingGroup is null) && (!targetGroups.Contains(sourceGroup))) + { + sourceGroups.Remove(sourceGroup); + + int index = GetSortIndexFromTag(sourceGroup.Tag!, targetGroups.Count); + targetGroups.Insert(index, sourceGroup); + if (!_mergedItems.Contains(sourceGroup)) + { + _mergedItems.Add(sourceGroup); + } + continue; + } + + // We'll need to merge the group items. + MergeGroupItems(sourceGroup.Items, existingGroup!.Items); + } + } + + /// + /// Function to merge the tabs for a source ribbon into a target ribbon. + /// + /// The ribbon to merge. + /// The ribbon to be merged into. + private void MergeTabs(KryptonRibbon? sourceRibbon, KryptonRibbon targetRibbon) + { + IEnumerable sourceTabs = sourceRibbon!.RibbonTabs.ToArray(); + + foreach (KryptonRibbonTab tab in sourceTabs) + { + KryptonRibbonTab? existingTab = targetRibbon.RibbonTabs.FirstOrDefault(item => string.Equals(item.Text, tab.Text, StringComparison.CurrentCulture)); + + // The tab doesn't exist, so just add it + if ((existingTab is null) && (!targetRibbon.RibbonTabs.Contains(tab))) + { + sourceRibbon.RibbonTabs.Remove(tab); + + int index = GetSortIndexFromTag(tab.Tag!, targetRibbon.RibbonTabs.Count); + + targetRibbon.RibbonTabs.Insert(index, tab); + if (!_mergedItems.Contains(tab)) + { + _mergedItems.Add(tab); + } + continue; + } + + // We'll need to merge the groups. + MergeGroups(tab.Groups, existingTab!.Groups); + } + } + + /// + /// Function to unmerge the contexts for a source ribbon from a target ribbon. + /// + /// The ribbon to unmerge. + /// The ribbon to be unmerged from. + private void UnmergeContexts(KryptonRibbon sourceRibbon, KryptonRibbon targetRibbon) + { + IEnumerable contexts = targetRibbon.RibbonContexts.ToArray(); + + foreach (KryptonRibbonContext context in contexts) + { + if (!_mergedItems.Contains(context)) + { + continue; + } + + KryptonRibbonContext? existing = sourceRibbon.RibbonContexts.FirstOrDefault(item => string.Equals(item.ContextTitle, context.ContextTitle, StringComparison.CurrentCulture)); + + // The tab doesn't exist, so just add it + if ((existing is not null) || (sourceRibbon.RibbonContexts.Contains(context))) + { + continue; + } + + _mergedItems.Remove(context); + targetRibbon.RibbonContexts.Remove(context); + sourceRibbon.RibbonContexts.Add(context); + } + } + + /// + /// Function to merge the contexts for a source ribbon into a target ribbon. + /// + /// The ribbon to merge. + /// The ribbon to be merged into. + private void MergeContexts(KryptonRibbon? sourceRibbon, KryptonRibbon targetRibbon) + { + IEnumerable contexts = sourceRibbon!.RibbonContexts.ToArray(); + + foreach (KryptonRibbonContext context in contexts) + { + KryptonRibbonContext? existing = targetRibbon.RibbonContexts.FirstOrDefault(item => string.Equals(item.ContextTitle, context.ContextTitle, StringComparison.CurrentCulture)); + + // The tab doesn't exist, so just add it + if ((existing is not null) || (targetRibbon.RibbonContexts.Contains(context))) + { + continue; + } + + sourceRibbon.RibbonContexts.Remove(context); + + int index = GetSortIndexFromTag(context.Tag!, targetRibbon.RibbonContexts.Count); + + targetRibbon.RibbonContexts.Insert(index, context); + if (!_mergedItems.Contains(context)) + { + _mergedItems.Add(context); + } + } + } + + /// + /// Function to unmerge the tabs for a source ribbon from a target ribbon. + /// + /// The ribbon to merge into. + /// The ribbon to be unmerged from. + private void UnmergeTabs(KryptonRibbon sourceRibbon, KryptonRibbon targetRibbon) + { + IEnumerable tabs = targetRibbon.RibbonTabs.ToArray(); + + foreach (KryptonRibbonTab tab in tabs) + { + if (!_mergedItems.Contains(tab)) + { + KryptonRibbonTab? existingTab = sourceRibbon.RibbonTabs.FirstOrDefault(item => string.Equals(item.Text, tab.Text, StringComparison.CurrentCulture)); + + if (existingTab is not null) + { + UnmergeGroups(existingTab.Groups, tab.Groups); + } + continue; + } + + _mergedItems.Remove(tab); + targetRibbon.RibbonTabs.Remove(tab); + sourceRibbon.RibbonTabs.Add(tab); + } + } + + /// + /// Function to merge a ribbon with the target ribbon + /// + /// The ribbon to merge. + public void Merge(KryptonRibbon? ribbon) + { + if (ribbon is null) + { + return; + } + + string selectedContext = TargetRibbon.SelectedContext; + KryptonRibbonTab? selectedTab = TargetRibbon.SelectedTab; + + MergeTabs(ribbon, TargetRibbon); + MergeContexts(ribbon, TargetRibbon); + + // Ensure that the layout is refreshed. + TargetRibbon.CheckPerformLayout(); + ribbon.CheckPerformLayout(); + + // Restore the selected tab. + TargetRibbon.SelectedContext = selectedContext; + TargetRibbon.SelectedTab = selectedTab; + + FixGroupWidths(); + } + + /// + /// Function to unmerge the specified ribbon from the target ribbon. + /// + /// The ribbon to unmerge. + public void UnMerge(KryptonRibbon? ribbon) + { + if (ribbon is null) + { + return; + } + + KryptonRibbonTab? selected = TargetRibbon.SelectedTab; + + UnmergeContexts(ribbon, TargetRibbon); + UnmergeTabs(ribbon, TargetRibbon); + + // Ensure that the layout is refreshed. + TargetRibbon.CheckPerformLayout(); + ribbon.CheckPerformLayout(); + + // Restore the selected tab. + if (TargetRibbon.RibbonTabs.Contains(selected)) + { + TargetRibbon.SelectedTab = selected; + } + else + { + TargetRibbon.ResetSelectedTab(); + } + } + + /// + /// Function to correct the clipping for groups that have long names, but little content. + /// + public void FixGroupWidths() + { + using var g = Graphics.FromHwnd(TargetRibbon.Parent!.Handle); + double dpi = g.DpiY / 96.0; + + foreach (KryptonRibbonTab tab in TargetRibbon.RibbonTabs) + { + foreach (KryptonRibbonGroup grp in tab.Groups) + { + Size size = TextRenderer.MeasureText(g, grp.TextLine1 + (string.IsNullOrWhiteSpace(grp.TextLine2) ? " " + grp.TextLine2 : string.Empty), TargetRibbon.Parent.Font); + grp.MinimumWidth = size.Width + (int)(8 * dpi); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Ribbon/Utilities/MathExtensions.cs b/Source/Krypton Components/Krypton.Ribbon/Utilities/MathExtensions.cs new file mode 100644 index 000000000..a6023d83a --- /dev/null +++ b/Source/Krypton Components/Krypton.Ribbon/Utilities/MathExtensions.cs @@ -0,0 +1,1372 @@ +#region Original MIT License + +/* + * Copyright(C) 2018 Michael Winsor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * Created: September 28, 2018 9:03:32 PM + */ + +#endregion + +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Ribbon +{ + /// + /// Fluent extensions for mathematical operations on various numeric types. + /// + /// + /// + /// This provides a fluent interface to numeric types (e.g. , , , etc...) that will expose common mathematical functions without relying on + /// methods from . This makes it easy to chain together several functions to retrieve a result, for example: + /// + /// + /// + /// + /// + /// Other mathematical functions are included, such as , , , etc... + /// + /// + /// CS3002 Warning
+ /// Extensions handling NON CLS-compliant data types have been disabled.
+ /// This goes for all unsigned types, except byte.
+ /// The attribute [System.CLSCompliant(true)] has been added to the class header
+ /// See: + ///
+ ///
+ [System.CLSCompliant(true)] + public static class MathExtensions + { + #region Constants. + // Constant containing the value used to convert degrees to radians. + private const float DEG_CONVERT = ((float)Math.PI / 180.0f); + // Constant containing the value used to convert radians to degrees. + private const float RAD_CONVERT = (180.0f / (float)Math.PI); + + /// + /// Constant value for π. + /// + public const float PI = 3.141593f; + #endregion + + #region Implementation + /// + /// Function to perform an approximation of a sine calculation. + /// + /// The angle, in radians. + /// The sine value for the angle. + /// + /// + /// This method will produce an approximation of the value returned by . Because this is an approximation, this method should not be used when accuracy is important. + /// + /// + /// This version of the sine function has better performance than the method, and as such, should be used in performance intensive situations. + /// + /// + /// This code was adapted from the GameDev.Net post by L.Spiro found here: + /// http://www.gamedev.net/topic/681723-faster-sin-and-cos/. + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float FastSin(this float rads) + { + int i32I = (int)(rads * 0.31830988618379067153776752674503); // 1 / PI. + double radians = rads - ((i32I) * 3.1415926535897932384626433832795); + + double fX2 = radians * radians; + + return (float)(((i32I & 1) == 1) + ? -radians * ((1.00000000000000000000e+00) + + (fX2 * ((-1.66666671633720397949e-01) + + (fX2 * ((8.33333376795053482056e-03) + + (fX2 * ((-1.98412497411482036114e-04) + + (fX2 * ((2.75565571428160183132e-06) + + (fX2 * ((-2.50368472620721149724e-08) + + (fX2 * ((1.58849267073435385100e-10) + + (fX2 * (-6.58925550841432672300e-13))))))))))))))) + : radians * ((1.00000000000000000000e+00) + + (fX2 * ((-1.66666671633720397949e-01) + + (fX2 * ((8.33333376795053482056e-03) + + (fX2 * ((-1.98412497411482036114e-04) + + (fX2 * ((2.75565571428160183132e-06) + + (fX2 * ((-2.50368472620721149724e-08) + + (fX2 * ((1.58849267073435385100e-10) + + (fX2 * (-6.58925550841432672300e-13)))))))))))))))); + } + + /// + /// Function to perform an approximation of a cosine calculation. + /// + /// The angle, in radians. + /// The cosine value for the angle. + /// + /// + /// This method will produce an approximation of the value returned by . Because this is an approximation, this method should not be used when accuracy is important. + /// + /// + /// This version of the cosine function has better performance than the method, and as such, should be used in performance intensive situations. + /// + /// + /// This code was adapted from the GameDev.Net post by L.Spiro found here: + /// http://www.gamedev.net/topic/681723-faster-sin-and-cos/. + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float FastCos(this float rads) + { + int i32I = (int)(rads * 0.31830988618379067153776752674503); // 1 / PI. + double radians = rads - ((i32I) * 3.1415926535897932384626433832795); + + double fX2 = radians * radians; + + return (float)(((i32I & 1) == 1) + ? -(1.00000000000000000000e+00) - + (fX2 * ((-5.00000000000000000000e-01) + + (fX2 * ((4.16666641831398010254e-02) + + (fX2 * ((-1.38888671062886714935e-03) + + (fX2 * ((2.48006890615215525031e-05) + + (fX2 * ((-2.75369927749125054106e-07) + + (fX2 * ((2.06207229069832465029e-09) + + (fX2 * (-9.77507137733812925262e-12)))))))))))))) + : (1.00000000000000000000e+00) + + (fX2 * ((-5.00000000000000000000e-01) + + (fX2 * ((4.16666641831398010254e-02) + + (fX2 * ((-1.38888671062886714935e-03) + + (fX2 * ((2.48006890615215525031e-05) + + (fX2 * ((-2.75369927749125054106e-07) + + (fX2 * ((2.06207229069832465029e-09) + + (fX2 * (-9.77507137733812925262e-12))))))))))))))); + } + + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static byte Max(this byte value1, byte value2) => (value1 > value2) ? value1 : value2; + + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static byte Min(this byte value1, byte value2) => (value1 < value2) ? value1 : value2; + + /* Disabled CLS Non Compliant + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ushort Max(this ushort value1, ushort value2) => (value1 > value2) ? value1 : value2; + */ + + /* Disabled CLS Non Compliant + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ushort Min(this ushort value1, ushort value2) => (value1 < value2) ? value1 : value2; + */ + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static short Max(this short value1, short value2) => (value1 > value2) ? value1 : value2; + + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static short Min(this short value1, short value2) => (value1 < value2) ? value1 : value2; + + /* Disabled CLS Non Compliant + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint Max(this uint value1, uint value2) => (value1 > value2) ? value1 : value2; + */ + + /* Disabled CLS Non Compliant + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint Min(this uint value1, uint value2) => (value1 < value2) ? value1 : value2; + */ + + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Max(this int value1, int value2) => (value1 > value2) ? value1 : value2; + + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Min(this int value1, int value2) => (value1 < value2) ? value1 : value2; + + /* Disabled CLS Non Compliant + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ulong Max(this ulong value1, ulong value2) => (value1 > value2) ? value1 : value2; + */ + + /* Disabled CLS Non Compliant + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ulong Min(this ulong value1, ulong value2) => (value1 < value2) ? value1 : value2; + */ + + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static long Max(this long value1, long value2) => (value1 > value2) ? value1 : value2; + + /// + /// Function to return the minimum value between two values.. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static long Min(this long value1, long value2) => (value1 < value2) ? value1 : value2; + + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Max(this float value1, float value2) => (value1 > value2) ? value1 : value2; + + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Min(this float value1, float value2) => (value1 < value2) ? value1 : value2; + + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Max(this double value1, double value2) => (value1 > value2) ? value1 : value2; + + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Min(this double value1, double value2) => (value1 < value2) ? value1 : value2; + + /// + /// Function to return the maximum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The larger of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Max(this decimal value1, decimal value2) => (value1 > value2) ? value1 : value2; + + /// + /// Function to return the minimum value between two values. + /// + /// The first value to test. + /// The second value to test. + /// The smaller of the two values. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Min(this decimal value1, decimal value2) => (value1 < value2) ? value1 : value2; + + /// + /// Function to return the absolute value of a value. + /// + /// Value to evaluate. + /// The absolute value of . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static short Abs(this short value) => Math.Abs(value); + + /// + /// Function to return the absolute value of an value. + /// + /// Value to evaluate. + /// The absolute value of . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Abs(this int value) => Math.Abs(value); + + /// + /// Function to return the absolute value of a value. + /// + /// Value to evaluate. + /// The absolute value of . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static long Abs(this long value) => Math.Abs(value); + + /// + /// Function to return the absolute value of a value. + /// + /// Value to evaluate. + /// The absolute value of . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Abs(this double value) => Math.Abs(value); + + /// + /// Function to return the absolute value of a value. + /// + /// Value to evaluate. + /// The absolute value of . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Abs(this decimal value) => Math.Abs(value); + + /// + /// Function to return the absolute value of a value. + /// + /// Value to evaluate. + /// The absolute value of . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Abs(this float value) => Math.Abs(value); + + /// + /// Function to round a value to the nearest whole or fractional number. + /// + /// The value to round. + /// [Optional] The number of decimal places to round to. + /// [Optional] The type of rounding to perform. + /// The value rounded to the nearest whole number. + /// + /// See for more information. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Round(this float value, int decimalCount = 0, MidpointRounding rounding = MidpointRounding.ToEven) => (float)(Math.Round(value, decimalCount, rounding)); + + /// + /// Function to round a value to the nearest whole or fractional number. + /// + /// The value to round. + /// [Optional] The number of decimal places to round to. + /// [Optional] The type of rounding to perform. + /// The value rounded to the nearest whole number. + /// + /// See for more information. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Round(this decimal value, int decimalCount = 0, MidpointRounding rounding = MidpointRounding.ToEven) => Math.Round(value, decimalCount, rounding); + + /// + /// Function to round a value to the nearest whole or fractional number. + /// + /// The value to round. + /// [Optional] The number of decimal places to round to. + /// [Optional] The type of rounding to perform. + /// The value rounded to the nearest whole number. + /// + /// See for more information. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Round(this double value, int decimalCount = 0, MidpointRounding rounding = MidpointRounding.ToEven) => Math.Round(value, decimalCount, rounding); + + /// + /// Function to convert a value representing a radian into an angle in degrees. + /// + /// The value to convert. + /// The angle in degrees. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float ToDegrees(this float radians) => radians * RAD_CONVERT; + + /// + /// Function to convert a value representing an angle in degrees into a radian value. + /// + /// The angle value to convert. + /// The angle in radians. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float ToRadians(this float degrees) => degrees * DEG_CONVERT; + + /// + /// Function to convert a value representing a radian into an angle in degrees. + /// + /// The value to convert. + /// The angle in degrees. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal ToDegrees(this decimal radians) => radians * (decimal)RAD_CONVERT; + + /// + /// Function to convert a value representing an angle in degrees into a radian value. + /// + /// The angle value to convert. + /// The angle in radians. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal ToRadians(this decimal degrees) => degrees * (decimal)DEG_CONVERT; + + + /// + /// Function to convert a value representing a radian into an angle in degrees. + /// + /// The value to convert. + /// The angle in degrees. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double ToDegrees(this double radians) => radians * RAD_CONVERT; + + /// + /// Function to convert a value representing an angle in degrees into a radian value. + /// + /// The angle value to convert. + /// The angle in radians. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double ToRadians(this double degrees) => degrees * DEG_CONVERT; + + /// + /// Function to determine if a value is equal to another within a given tolerance. + /// + /// The left value to compare. + /// The right value to compare. + /// [Optional] The epsilon representing the error tolerance. + /// true if equal, false if not. + /// + /// + /// Floating point values are prone to error buildup due to their limited precision. Therefore, when performing a comparison between two floating point values: 4.23212f == 4.23212f may + /// actually be 4.232120000005422f == 4.232120000005433f. Obviously, the result will not be true when the values are actually considered equal. This method ensures that the comparison will + /// return true by removing the error through the parameter. + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool EqualsEpsilon(this float left, float right, float epsilon = 1e-06f) => Abs(right - left) <= epsilon; + + /// + /// Function to determine if a value is equal to another within a given tolerance. + /// + /// The left value to compare. + /// The right value to compare. + /// [Optional] The epsilon representing the error tolerance. + /// true if equal, false if not. + /// + /// + /// Floating point values are prone to error buildup due to their limited precision. Therefore, when performing a comparison between two floating point values: 4.23212f == 4.23212f may + /// actually be 4.232120000005422f == 4.232120000005433f. Obviously, the result will not be true when the values are actually considered equal. This method ensures that the comparison will + /// return true by removing the error through the parameter. + /// + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static bool EqualsEpsilon(this double left, double right, double epsilon = 1e-12) => Abs(right - left) <= epsilon; + + /// + /// Function to return the inverse of the square root for a value. + /// + /// The value to get the inverse square root of. + /// The inverted square root of the value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double InverseSqrt(this double value) => 1.0 / Math.Sqrt(value); + + /// + /// Function to return the inverse of the square root for a value. + /// + /// The value to get the inverse square root of. + /// The inverted square root of the value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float InverseSqrt(this float value) => 1.0f / (float)Math.Sqrt(value); + + /// + /// Function to return the square root for a value. + /// + /// The value to get the square root of. + /// The square root of the value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Sqrt(this double value) => Math.Sqrt(value); + + /// + /// Function to return the square root for a value. + /// + /// The value to get the square root of. + /// The square root of the value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Sqrt(this float value) => (float)Math.Sqrt(value); + + /// + /// Function to return the sine value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Sin(this float angle) => (float)Math.Sin(angle); + + /// + /// Function to return the sine value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Sin(this decimal angle) => (decimal)Math.Sin((double)angle); + + /// + /// Function to return the sine value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Sin(this double angle) => Math.Sin(angle); + + /// + /// Function to return the cosine value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The cosine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Cos(this float angle) => (float)Math.Cos(angle); + + /// + /// Function to return the cosine value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The cosine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Cos(this decimal angle) => (decimal)Math.Cos((double)angle); + + /// + /// Function to return the cosine value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The cosine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Cos(this double angle) => Math.Cos(angle); + + /// + /// Function to return the tangent value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The tangent value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Tan(this float angle) => (float)Math.Tan(angle); + + /// + /// Function to return the tangent value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The tangent value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Tan(this decimal angle) => (decimal)Math.Tan((double)angle); + + /// + /// Function to return the tangent value of a value representing an angle, in radians. + /// + /// The angle, in radians. + /// The tangent value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Tan(this double angle) => Math.Tan(angle); + + /// + /// Function to return the inverse sine value of a value representing an angle, in radians. + /// + /// The sine value. + /// The inverse sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float ASin(this float sine) => (float)Math.Asin(sine); + + /// + /// Function to return the inverse sine value of a value representing an angle, in radians. + /// + /// The sine value. + /// The inverse sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal ASin(this decimal sine) => (decimal)Math.Asin((double)sine); + + /// + /// Function to return the inverse sine value of a value representing an angle, in radians. + /// + /// The sine value. + /// The inverse sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double ASin(this double sine) => Math.Asin(sine); + + /// + /// Function to return the inverse cosine value of a value representing an angle, in radians. + /// + /// The cosine value. + /// The inverse cosine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float ACos(this float cosine) => (float)Math.Acos(cosine); + + /// + /// Function to return the inverse cosine value of a value representing an angle, in radians. + /// + /// The cosine value. + /// The inverse cosine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal ACos(this decimal cosine) => (decimal)Math.Acos((double)cosine); + + /// + /// Function to return the inverse cosine value of a value representing an angle, in radians. + /// + /// The cosine value. + /// The inverse cosine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double ACos(this double cosine) => Math.Acos(cosine); + + /// + /// Function to return the inverse tangent value of a value representing an angle, in radians. + /// + /// The tangent value. + /// The tangent sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float ATan(this float tangent) => (float)Math.Atan(tangent); + + /// + /// Function to return the inverse tangent value of a value representing an angle, in radians. + /// + /// The tangent value. + /// The tangent sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal ATan(this decimal tangent) => (decimal)Math.Atan((double)tangent); + + /// + /// Function to return the inverse tangent value of a value representing an angle, in radians. + /// + /// The tangent value. + /// The tangent sine value of the . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double ATan(this double tangent) => Math.Atan(tangent); + + /// + /// Function to return the inverse tangent of two values representing the horizontal and vertical offset of a slope. + /// + /// Vertical slope value to retrieve the inverse tangent from. + /// Horizontal slope value to retrieve the inverse tangent from. + /// The inverse tangent of the slope. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float ATan(this float y, float x) => (float)Math.Atan2(y, x); + + /// + /// Function to return the inverse tangent of two values representing the horizontal and vertical offset of a slope. + /// + /// Vertical slope value to retrieve the inverse tangent from. + /// Horizontal slope value to retrieve the inverse tangent from. + /// The inverse tangent of the slope. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal ATan(this decimal y, decimal x) => (decimal)Math.Atan2((double)y, (double)x); + + /// + /// Function to return the inverse tangent of two values representing the horizontal and vertical offset of a slope. + /// + /// Vertical slope value to retrieve the inverse tangent from. + /// Horizontal slope value to retrieve the inverse tangent from. + /// The inverse tangent of the slope. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double ATan(this double y, double x) => Math.Atan2(y, x); + + /// + /// Function to return e raised to a value as the power. + /// + /// The value representing a power to raise to. + /// e raised to the specified. + /// + /// e is a constant value of ~2.71828. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Exp(this double power) => Math.Exp(power); + + /// + /// Function to return e raised to a value as the power. + /// + /// The value representing a power to raise to. + /// e raised to the specified. + /// + /// e is a constant value of ~2.71828. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Exp(this decimal power) => (decimal)Math.Exp((double)power); + /// + /// Function to return e raised to a value as the power. + /// + /// The value representing a power to raise to. + /// e raised to the specified. + /// + /// e is a constant value of ~2.71828. + /// + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Exp(this float power) => (float)Math.Exp(power); + + /// + /// Function to raise a to a specified power. + /// + /// The value to raise. + /// The value representing a power to raise to. + /// The raised to the specified . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Pow(this double value, double power) => Math.Pow(value, power); + + /// + /// Function to raise a to a specified power. + /// + /// The value to raise. + /// The value representing a power to raise to. + /// The raised to the specified . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Pow(this decimal value, decimal power) => (decimal)Math.Pow((double)value, (double)power); + + /// + /// Function to raise a to a specified power. + /// + /// The value to raise. + /// The value representing a power to raise to. + /// The raised to the specified . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Pow(this float value, float power) => (float)Math.Pow(value, power); + + /// + /// Function to compute the logarithim of a value. + /// + /// The value to compute the logarithim from. + /// The new base for the logarithm. + /// The logarithim value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Log(this float value, float power) => (float)Math.Log(value, power); + + /// + /// Function to compute the logarithim of a value. + /// + /// The value to compute the logarithim from. + /// The new base for the logarithm. + /// The logarithim value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Log(this double value, double power) => Math.Log(value, power); + + /// + /// Function to compute the logarithim of a value. + /// + /// The value to compute the logarithim from. + /// The new base for the logarithm. + /// The logarithim value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Log(this decimal value, decimal power) => (decimal)Math.Log((double)value, (double)power); + + /// + /// Function to return the largest integer less than or equal to the specified value. + /// + /// The value to find the floor for. + /// The largest integer less than or equal to . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float FastFloor(this float value) + { + int result = (int)value; + + return (value < result) ? result - 1 : result; + } + + /// + /// Function to return the largest integer less than or equal to the specified value. + /// + /// The value to find the floor for. + /// The largest integer less than or equal to . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float FastFloor(this double value) + { + int result = (int)value; + + return (value < result) ? result - 1 : result; + } + + /// + /// Function to return the largest integer greater than or equal to the specified value. + /// + /// The value to find the ceiling for. + /// The largest integer greater than or equal to . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float FastCeiling(this float value) + { + int result = (int)value; + + return (value > result) ? result + 1 : result; + } + + /// + /// Function to return the largest integer greater than or equal to the specified value. + /// + /// The value to find the ceiling for. + /// The largest integer greater than or equal to . + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float FastCeiling(this double value) + { + int result = (int)value; + + return (value > result) ? result + 1 : result; + } + + /// + /// Function to return the sign of an value. + /// + /// The value to evaluate. + /// 0 if the value is 0, -1 if the value is less than 0, and 1 if the value is greater than 0. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Sign(this int value) + { +#pragma warning disable IDE0046 // Convert to conditional expression + if (value == 0) + { + return 0; + } + + return value < 0 ? -1 : 1; +#pragma warning restore IDE0046 // Convert to conditional expression + } + + /// + /// Function to return the sign of a value. + /// + /// The value to evaluate. + /// 0 if the value is 0, -1 if the value is less than 0, and 1 if the value is greater than 0. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Sign(this long value) + { +#pragma warning disable IDE0046 // Convert to conditional expression + if (value == 0) + { + return 0; + } + + return value < 0 ? -1 : 1; +#pragma warning restore IDE0046 // Convert to conditional expression + } + + /* Disabled CLS Non Compliant + /// + /// Function to return the sign of a value. + /// + /// The value to evaluate. + /// 0 if the value is 0, -1 if the value is less than 0, and 1 if the value is greater than 0. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Sign(this sbyte value) + { +#pragma warning disable IDE0046 // Convert to conditional expression + if (value == 0) + { + return 0; + } + + return value < 0 ? -1 : 1; +#pragma warning restore IDE0046 // Convert to conditional expression + } + */ + + /// + /// Function to return the sign of a value. + /// + /// The value to evaluate. + /// 0 if the value is 0, -1 if the value is less than 0, and 1 if the value is greater than 0. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Sign(this short value) + { +#pragma warning disable IDE0046 // Convert to conditional expression + if (value == 0) + { + return 0; + } + + return value < 0 ? -1 : 1; +#pragma warning restore IDE0046 // Convert to conditional expression + } + + /// + /// Function to return the sign of a value. + /// + /// The value to evaluate. + /// 0 if the value is 0, -1 if the value is less than 0, and 1 if the value is greater than 0. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Sign(this decimal value) + { +#pragma warning disable IDE0046 // Convert to conditional expression + if (value == 0) + { + return 0; + } + + return value < 0 ? -1 : 1; +#pragma warning restore IDE0046 // Convert to conditional expression + } + + /// + /// Function to return the sign of a value. + /// + /// The value to evaluate. + /// 0 if the value is 0, -1 if the value is less than 0, and 1 if the value is greater than 0. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Sign(this float value) + { +#pragma warning disable IDE0046 // Convert to conditional expression + if (value.EqualsEpsilon(0)) + { + return 0; + } + + return value < 0 ? -1 : 1; +#pragma warning restore IDE0046 // Convert to conditional expression + } + + /// + /// Function to return the sign of a value. + /// + /// The value to evaluate. + /// 0 if the value is 0, -1 if the value is less than 0, and 1 if the value is greater than 0. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Sign(this double value) + { +#pragma warning disable IDE0046 // Convert to conditional expression + if (value.EqualsEpsilon(0)) + { + return 0; + } + + return value < 0 ? -1 : 1; +#pragma warning restore IDE0046 // Convert to conditional expression + } + + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static byte Clamp(this byte value, byte minValue, byte maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static short Clamp(this short value, short minValue, short maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + + /* Disabled CLS Non Compliant + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static ushort Clamp(this ushort value, ushort minValue, ushort maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + */ + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int Clamp(this int value, int minValue, int maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + + /* Disabled CLS Non Compliant + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static uint Clamp(this uint value, uint minValue, uint maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + */ + + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static long Clamp(this long value, long minValue, long maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + + /* Disabled CLS Non Compliant + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [methodimpl(methodimploptions.aggressiveinlining)] + public static ulong clamp(this ulong value, ulong minvalue, ulong maxvalue) + { + value = value.min(maxvalue); + return value.max(minvalue); + } + */ + + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Clamp(this float value, float minValue, float maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Clamp(this double value, double minValue, double maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + + /// + /// Function to clamp a value to the range specified by the minimum and maximum value. + /// + /// The value to clamp. + /// The minimum value. + /// The maximum value. + /// The clamped value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Clamp(this decimal value, decimal minValue, decimal maxValue) + { + value = value.Min(maxValue); + return value.Max(minValue); + } + + /// + /// Function to limit an angle to the specified minimum and maximum. + /// + /// The angle to limit. + /// [Optional] The minimum value for the angle. + /// [Optional] The maxmum value for the angle. + /// The limited angle value. + public static float LimitAngle(this float angle, float min = 0, float max = 360) + { + if (min.EqualsEpsilon(max)) + { + return angle.Max(min).Min(max); + } + + if (min > max) + { + (min, max) = (max, min); + } + + if (angle > max) + { + angle = max - angle; + } + + if (angle < min) + { + angle -= min; + } + + return angle; + } + + /// + /// Function to limit an angle to the specified minimum and maximum. + /// + /// The angle to limit. + /// [Optional] The minimum value for the angle. + /// [Optional] The maxmum value for the angle. + /// The limited angle value. + public static double LimitAngle(this double angle, double min = 0, double max = 360) + { + if (min.EqualsEpsilon(max)) + { + return angle.Max(min).Min(max); + } + + if (min > max) + { + (min, max) = (max, min); + } + + if (angle > max) + { + angle = max - angle; + } + + if (angle < min) + { + angle -= min; + } + + return angle; + } + + /// + /// Function to limit an angle to the specified minimum and maximum. + /// + /// The angle to limit. + /// [Optional] The minimum value for the angle. + /// [Optional] The maxmum value for the angle. + /// The limited angle value. + public static decimal LimitAngle(this decimal angle, decimal min = 0, decimal max = 360) + { + if (min == max) + { + return angle.Max(min).Min(max); + } + + if (min > max) + { + (min, max) = (max, min); + } + + if (angle > max) + { + angle = max - angle; + } + + if (angle < min) + { + angle -= min; + } + + return angle; + } + + /// + /// Function to limit an angle to the specified minimum and maximum. + /// + /// The angle to limit. + /// [Optional] The minimum value for the angle. + /// [Optional] The maxmum value for the angle. + /// The limited angle value. + public static short LimitAngle(this short angle, short min = 0, short max = 360) + { + if (min == max) + { + return angle.Max(min).Min(max); + } + + if (min > max) + { + (min, max) = (max, min); + } + + if (angle > max) + { + angle = (short)(max - angle); + } + + if (angle < min) + { + angle -= min; + } + + return angle; + } + + /// + /// Function to limit an angle to the specified minimum and maximum. + /// + /// The angle to limit. + /// [Optional] The minimum value for the angle. + /// [Optional] The maxmum value for the angle. + /// The limited angle value. + public static int LimitAngle(this int angle, int min = 0, int max = 360) + { + if (min == max) + { + return angle.Max(min).Min(max); + } + + if (min > max) + { + (min, max) = (max, min); + } + + + if (angle > max) + { + angle = max - angle; + } + + if (angle < min) + { + angle -= min; + } + + return angle; + } + + /// + /// Function to limit an angle to the specified minimum and maximum. + /// + /// The angle to limit. + /// [Optional] The minimum value for the angle. + /// [Optional] The maxmum value for the angle. + /// The limited angle value. + public static long LimitAngle(this long angle, long min = 0, long max = 360) + { + if (min == max) + { + return angle.Max(min).Min(max); + } + + if (min > max) + { + (min, max) = (max, min); + } + + if (angle > max) + { + angle = max - angle; + } + + if (angle < min) + { + angle -= min; + } + + return angle; + } + + /// + /// Function to linearly interpolate between two values given a weight amount. + /// + /// The value to start from. + /// The ending value. + /// The weighting amount. + /// The linearly interpolated value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static float Lerp(this float from, float to, float amount) => ((1.0f - amount) * from) + (amount * to); + + /// + /// Function to linearly interpolate between two values given a weight amount. + /// + /// The value to start from. + /// The ending value. + /// The weighting amount. + /// The linearly interpolated value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static double Lerp(this double from, double to, double amount) => ((1.0 - amount) * from) + (amount * to); + + /// + /// Function to linearly interpolate between two values given a weight amount. + /// + /// The value to start from. + /// The ending value. + /// The weighting amount. + /// The linearly interpolated value. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static decimal Lerp(this decimal from, decimal to, decimal amount) => ((1.0M - amount) * from) + (amount * to); + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonManager.cs b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonManager.cs index 2070a0107..b5499d9c4 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonManager.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -18,8 +18,8 @@ internal class ViewRibbonManager : ViewManager { #region Instance Fields private readonly KryptonRibbon _ribbon; - private readonly ViewDrawRibbonGroupsBorderSynch _viewGroups; - private ViewDrawRibbonGroup _activeGroup; + private readonly ViewDrawRibbonGroupsBorderSynch? _viewGroups; + private ViewDrawRibbonGroup? _activeGroup; private readonly NeedPaintHandler? _needPaintDelegate; private readonly bool _minimizedMode; private bool _active; @@ -105,7 +105,7 @@ public override void Layout(ViewLayoutContext context) // Prevent reentrancy if (!_layingOut) { - Form ownerForm = _ribbon.FindForm(); + Form? ownerForm = _ribbon.FindForm(); // We do not need to layout if inside a control that is minimized or if we are not inside a form at all if ((ownerForm == null) || (ownerForm.WindowState == FormWindowState.Minimized)) @@ -151,7 +151,7 @@ public override void MouseMove([DisallowNull] MouseEventArgs e, Point rawPt) if (_minimizedMode == _ribbon.RealMinimizedMode) { // Get the view group instance that matches this point - ViewDrawRibbonGroup viewGroup = _viewGroups.ViewGroupFromPoint(new Point(e.X, e.Y)); + ViewDrawRibbonGroup? viewGroup = _viewGroups!.ViewGroupFromPoint(new Point(e.X, e.Y)); // Is there a change in active group? if (viewGroup != _activeGroup) @@ -227,7 +227,7 @@ protected override void UpdateViewFromPoint(Control control, Point pt) if (!MouseCaptured) { // Then get the view under the mouse - ViewBase mouseView = Root.ViewFromPoint(pt); + ViewBase? mouseView = Root.ViewFromPoint(pt); // We only allow application button views to be interacted with ActiveView = mouseView is ViewDrawRibbonAppButton ? mouseView : null; diff --git a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonMinimizedManager.cs b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonMinimizedManager.cs index 521c3d447..f4d65808c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonMinimizedManager.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonMinimizedManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -18,8 +18,8 @@ internal class ViewRibbonMinimizedManager : ViewManager { #region Instance Fields private readonly KryptonRibbon _ribbon; - private readonly ViewDrawRibbonGroupsBorderSynch _viewGroups; - private ViewDrawRibbonGroup _activeGroup; + private readonly ViewDrawRibbonGroupsBorderSynch? _viewGroups; + private ViewDrawRibbonGroup? _activeGroup; private readonly NeedPaintHandler? _needPaintDelegate; private readonly bool _minimizedMode; private bool _active; @@ -36,20 +36,20 @@ internal class ViewRibbonMinimizedManager : ViewManager /// Root of the view hierarchy. /// Is this manager for handling the minimized mode popup. /// Delegate for requesting paint changes. - public ViewRibbonMinimizedManager(KryptonRibbon control, - [DisallowNull] ViewDrawRibbonGroupsBorderSynch viewGroups, - [DisallowNull] ViewBase root, + public ViewRibbonMinimizedManager([DisallowNull] KryptonRibbon control, + [DisallowNull] ViewDrawRibbonGroupsBorderSynch viewGroups, + [DisallowNull] ViewBase root, bool minimizedMode, [DisallowNull] NeedPaintHandler needPaintDelegate) : base(control, root) { - Debug.Assert(viewGroups != null); - Debug.Assert(root != null); - Debug.Assert(needPaintDelegate != null); + Debug.Assert(viewGroups is not null); + Debug.Assert(root is not null); + Debug.Assert(needPaintDelegate is not null); - _ribbon = control; - _viewGroups = viewGroups; - _needPaintDelegate = needPaintDelegate; + _ribbon = control ?? throw new ArgumentNullException(nameof(_ribbon)); + _viewGroups = viewGroups ?? throw new ArgumentNullException(nameof(_viewGroups)); + _needPaintDelegate = needPaintDelegate ?? throw new ArgumentNullException(nameof(needPaintDelegate)); _active = true; _minimizedMode = minimizedMode; } @@ -119,7 +119,7 @@ public override void Layout(ViewLayoutContext context) { _layingOut = true; - Form ownerForm = _ribbon.FindForm(); + Form? ownerForm = _ribbon.FindForm(); // We do not need to layout if inside a control that is minimized if (ownerForm is { WindowState: FormWindowState.Minimized }) @@ -161,7 +161,7 @@ public override void MouseMove([DisallowNull] MouseEventArgs e, Point rawPt) if (_minimizedMode == _ribbon.RealMinimizedMode) { // Get the view group instance that matches this point - ViewDrawRibbonGroup viewGroup = _viewGroups.ViewGroupFromPoint(new Point(e.X, e.Y)); + ViewDrawRibbonGroup? viewGroup = _viewGroups!.ViewGroupFromPoint(new Point(e.X, e.Y)); // Is there a change in active group? if (viewGroup != _activeGroup) @@ -274,7 +274,7 @@ protected override void UpdateViewFromPoint(Control control, Point pt) if (!MouseCaptured) { // Then get the view under the mouse - ViewBase mouseView = Root.ViewFromPoint(pt); + ViewBase? mouseView = Root.ViewFromPoint(pt); // We only allow application button views to be interacted with ActiveView = mouseView is ViewDrawRibbonAppButton ? mouseView : null; @@ -301,12 +301,12 @@ public ViewBase? FocusView if (_focusView != value) { // Remove focus from existing view - _focusView?.LostFocus(Root.OwningControl); + _focusView?.LostFocus(Root.OwningControl!); _focusView = value; // Add focus to the new view - _focusView?.GotFocus(Root.OwningControl); + _focusView?.GotFocus(Root.OwningControl!); } } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonPopupGroupManager.cs b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonPopupGroupManager.cs index 8b8e23fe2..3c3436a75 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonPopupGroupManager.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonPopupGroupManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -34,19 +34,19 @@ internal class ViewRibbonPopupGroupManager : ViewManager /// Group to track. /// Delegate for performing painting. public ViewRibbonPopupGroupManager(Control control, - [DisallowNull] KryptonRibbon ribbon, + [DisallowNull] KryptonRibbon ribbon, ViewBase root, [DisallowNull] ViewDrawRibbonGroup viewGroup, [DisallowNull] NeedPaintHandler needPaintDelegate) : base(control, root) { - Debug.Assert(ribbon != null); - Debug.Assert(viewGroup != null); - Debug.Assert(needPaintDelegate != null); + Debug.Assert(ribbon is not null); + Debug.Assert(viewGroup is not null); + Debug.Assert(needPaintDelegate is not null); - _ribbon = ribbon; - _viewGroup = viewGroup; - _needPaintDelegate = needPaintDelegate; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _viewGroup = viewGroup ?? throw new ArgumentNullException(nameof(viewGroup)); + _needPaintDelegate = needPaintDelegate ?? throw new ArgumentNullException(nameof(needPaintDelegate)); } /// @@ -118,7 +118,7 @@ public override void MouseMove([DisallowNull] MouseEventArgs e, Point rawPt) } // Should the group be active - var tracking = _viewGroup.ClientRectangle.Contains(new Point(e.X, e.Y)); + var tracking = _viewGroup!.ClientRectangle.Contains(new Point(e.X, e.Y)); // Is there a change in active group? if (tracking != _viewGroup.Tracking) @@ -146,7 +146,7 @@ public override void MouseLeave([DisallowNull] EventArgs e) } // Do we need to remove tracking - if (_viewGroup.Tracking) + if (_viewGroup!.Tracking) { _viewGroup.Tracking = false; _viewGroup.PerformNeedPaint(false, _viewGroup.ClientRectangle); @@ -202,12 +202,12 @@ public ViewBase? FocusView if (_focusView != value) { // Remove focus from existing view - _focusView?.LostFocus(Root?.OwningControl); + _focusView?.LostFocus(Root?.OwningControl!); _focusView = value; // Add focus to the new view - _focusView?.GotFocus(Root.OwningControl); + _focusView?.GotFocus(Root?.OwningControl!); } } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonQATOverflowManager.cs b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonQATOverflowManager.cs index 230e8eb74..72abc3792 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonQATOverflowManager.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Base/ViewRibbonQATOverflowManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -36,11 +36,11 @@ public ViewRibbonQATOverflowManager([DisallowNull] KryptonRibbon ribbon, ViewBase root) : base(control, root) { - Debug.Assert(ribbon != null); - Debug.Assert(qatContents != null); + Debug.Assert(ribbon is not null); + Debug.Assert(qatContents is not null); - _ribbon = ribbon; - QATContents = qatContents; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + QATContents = qatContents ?? throw new ArgumentNullException(nameof(qatContents)); } /// @@ -59,7 +59,7 @@ public override void Dispose() /// /// Gets a the view that handles the overflow items. /// - public ViewLayoutRibbonQATContents QATContents { get; } + public ViewLayoutRibbonQATContents? QATContents { get; } #endregion @@ -73,7 +73,7 @@ public override Size GetPreferredSize(IRenderer renderer, Size proposedSize) { // Update the calculated values used during layout calls - _ribbon.CalculatedValues.Recalculate(); + _ribbon!.CalculatedValues.Recalculate(); // Let base class perform standard preferred sizing actions return base.GetPreferredSize(renderer, proposedSize); @@ -93,7 +93,7 @@ public override void Layout(ViewLayoutContext context) _layingOut = true; // Update the calculated values used during layout calls - _ribbon.CalculatedValues.Recalculate(); + _ribbon!.CalculatedValues.Recalculate(); // Let base class perform standard layout actions base.Layout(context); @@ -148,12 +148,12 @@ public ViewBase? FocusView if (_focusView != value) { // Remove focus from existing view - _focusView?.LostFocus(Root.OwningControl); + _focusView?.LostFocus(Root.OwningControl!); _focusView = value; // Add focus to the new view - _focusView?.GotFocus(Root.OwningControl); + _focusView?.GotFocus(Root.OwningControl!); } } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppButton.cs index 711cd5b2e..64bf0d698 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -26,9 +26,8 @@ internal class ViewDrawRibbonAppButton : ViewLeaf private readonly bool _bottomHalf; private Rectangle _clipRect; private readonly Size _size; - private readonly Size SIZE_FULL; // = new(39, 39); - private readonly Size SIZE_TOP; // = new(39, 22); - private readonly Size SIZE_BOTTOM; // = new(39, 17); + private readonly Size _sizeFull; // = new(39, 39); + private readonly Size _sizeBottom; // = new(39, 17); #endregion #region Identity @@ -41,13 +40,13 @@ public ViewDrawRibbonAppButton([DisallowNull] KryptonRibbon ribbon, bool bottomH { Debug.Assert(ribbon != null); - SIZE_FULL = new Size((int)(39 * FactorDpiX), (int)(39 * FactorDpiY)); - SIZE_TOP = new Size((int)(39 * FactorDpiX), (int)(22 * FactorDpiY)); - SIZE_BOTTOM = new Size((int)(39 * FactorDpiX), (int)(17 * FactorDpiY)); + _sizeFull = new Size((int)(39 * FactorDpiX), (int)(39 * FactorDpiY)); + var sizeTop = new Size((int)(39 * FactorDpiX), (int)(22 * FactorDpiY)); + _sizeBottom = new Size((int)(39 * FactorDpiX), (int)(17 * FactorDpiY)); _ribbon = ribbon!; _bottomHalf = bottomHalf; - _size = _bottomHalf ? SIZE_BOTTOM : SIZE_TOP; + _size = _bottomHalf ? _sizeBottom : sizeTop; _mementos = new IDisposable[3]; } @@ -109,18 +108,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; _clipRect = ClientRectangle; // Update to reflect full size of actual button if (_bottomHalf) { Rectangle client = ClientRectangle; - client.Y -= SIZE_FULL.Height - SIZE_BOTTOM.Height; + client.Y -= _sizeFull.Height - _sizeBottom.Height; ClientRectangle = client; } - ClientHeight = SIZE_FULL.Height; + ClientHeight = _sizeFull.Height; } #endregion @@ -129,8 +128,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // New clipping region is at most our own client size using var combineRegion = new Region(_clipRect); // Remember the current clipping region @@ -166,32 +170,35 @@ public override void RenderBefore(RenderContext context) // Draw the background _mementos[memento] = context.Renderer.RenderRibbon.DrawRibbonApplicationButton(_ribbon.RibbonShape, context, ClientRectangle, State, palette, _mementos[memento]); - // If there is an application button to be drawn - if (_ribbon.RibbonAppButton.AppButtonImage != null) + // If there is an application button image to be drawn + Image? localImage = _ribbon.RibbonFileAppButton.AppButtonImage; + if (localImage != null) { // We always draw the image a 24x24 image (if dpi = 1!) - var localImage = _ribbon.RibbonAppButton.AppButtonImage; localImage = CommonHelper.ScaleImageForSizedDisplay(localImage, localImage.Width * FactorDpiX, localImage.Height * FactorDpiY); - var imageRect = new Rectangle(ClientLocation.X + (int)(7 * FactorDpiX), - ClientLocation.Y + (int)(6 * FactorDpiY), (int)(24 * FactorDpiX), (int)(24 * FactorDpiY)); - - if (_ribbon.Enabled) - { - context.Graphics.DrawImage(localImage, imageRect); - } - else + if (localImage != null) { - // Use a color matrix to convert to black and white - using var attribs = new ImageAttributes(); - attribs.SetColorMatrix(CommonHelper.MatrixDisabled); - - context.Graphics.DrawImage(localImage, - imageRect, 0, 0, - localImage.Width, - localImage.Height, - GraphicsUnit.Pixel, attribs); + var imageRect = new Rectangle(ClientLocation.X + (int)(7 * FactorDpiX), + ClientLocation.Y + (int)(6 * FactorDpiY), (int)(24 * FactorDpiX), (int)(24 * FactorDpiY)); + + if (_ribbon.Enabled) + { + context.Graphics.DrawImage(localImage, imageRect); + } + else + { + // Use a color matrix to convert to black and white + using var attribs = new ImageAttributes(); + attribs.SetColorMatrix(CommonHelper.MatrixDisabled); + + context.Graphics.DrawImage(localImage, + imageRect, 0, 0, + localImage.Width, + localImage.Height, + GraphicsUnit.Pixel, attribs); + } } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenu.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenu.cs index 2d79ab04a..f37b4a0ea 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenu.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -57,8 +57,18 @@ public override string ToString() => /// Perform rendering after child elements are rendered. /// /// Rendering context. - public override void RenderAfter(RenderContext renderContext) + public override void RenderAfter([DisallowNull] RenderContext renderContext) { + if (renderContext.Renderer is null) + { + throw new ArgumentNullException(nameof(renderContext.Renderer)); + } + + if (renderContext.TopControl is null) + { + throw new ArgumentNullException(nameof(renderContext.TopControl)); + } + base.RenderAfter(renderContext); // Convert our rectangle to the screen @@ -69,7 +79,7 @@ public override void RenderAfter(RenderContext renderContext) { // Position the element appropriately using (var layoutContext = - new ViewLayoutContext(renderContext.Control, renderContext.Renderer)) + new ViewLayoutContext(renderContext.Control!, renderContext.Renderer)) { layoutContext.DisplayRectangle = renderContext.TopControl.RectangleToClient(_fixedScreenRect); _fixedElement.Layout(layoutContext); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuDocs.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuDocs.cs index deae02caf..645e144f5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuDocs.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuDocs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,7 +21,7 @@ internal class ViewDrawRibbonAppMenuDocs : ViewLayoutDocker { #region Instance Fields private readonly KryptonRibbon _ribbon; - private IDisposable _memento; + private IDisposable? _memento; #endregion #region Identity @@ -63,11 +63,18 @@ protected override void Dispose(bool disposing) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) => + public override void RenderBefore(RenderContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Draw the application menu outer background _memento = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, ClientRectangle, State, _ribbon.StateCommon.RibbonAppMenuDocs, - VisualOrientation.Top, false, _memento); + VisualOrientation.Top, _memento); + } #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuInner.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuInner.cs index 40aa3d2f8..5898a1857 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuInner.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuInner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,7 +21,7 @@ internal class ViewDrawRibbonAppMenuInner : ViewLayoutDocker { #region Instance Fields private readonly KryptonRibbon _ribbon; - private IDisposable _memento; + private IDisposable? _memento; #endregion #region Identity @@ -63,11 +63,18 @@ protected override void Dispose(bool disposing) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) => + public override void RenderBefore([DisallowNull] RenderContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Draw the application menu outer background _memento = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, ClientRectangle, State, _ribbon.StateCommon.RibbonAppMenuInner, - VisualOrientation.Top, false, _memento); + VisualOrientation.Top, _memento); + } #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuOuter.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuOuter.cs index b014db9e7..b78c08713 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuOuter.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuOuter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,7 +21,7 @@ internal class ViewDrawRibbonAppMenuOuter : ViewLayoutDocker { #region Instance Fields private readonly KryptonRibbon _ribbon; - private IDisposable _memento; + private IDisposable? _memento; #endregion #region Identity @@ -63,14 +63,19 @@ protected override void Dispose(bool disposing) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + base.RenderBefore(context); // Draw the application menu outer background _memento = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, ClientRectangle, State, _ribbon.StateCommon.RibbonAppMenuOuter, - VisualOrientation.Top, false, _memento); + VisualOrientation.Top, _memento); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuRecentDoc.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuRecentDoc.cs index e94b512ff..07a7fbcee 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuRecentDoc.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppMenuRecentDoc.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCaptionArea.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCaptionArea.cs index 6ae48668c..c16eacdf6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCaptionArea.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCaptionArea.cs @@ -5,675 +5,13 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion // ReSharper disable InconsistentNaming namespace Krypton.Ribbon { - #region Old Class - /* - /// - /// Ribbon area that contains the context titles, minibar and top half of application button. - /// - internal class ViewDrawRibbonCaptionArea : ViewDrawDocker - { - #region Static Fields - - private const int MIN_INTEGRATED_HEIGHT = 26; // MiniBar, 16 image + 2 * (2 gap + 1 border + 2 border) - private const int CAPTION_TEXT_GAPS = 10; // 4 below and 6 above - private const int MIN_SELF_HEIGHT = 28; // Min height to show application button and the mini bar and context tabs - - #endregion - - #region Instance Fields - private readonly KryptonRibbon _ribbon; - private readonly NeedPaintHandler _needIntegratedDelegate; - private readonly PaletteCaptionRedirect _redirect; - private PaletteDoubleRedirect _redirectCaption; - private readonly ViewDrawRibbonComposition _compositionArea; - private ViewLayoutRibbonAppButton _captionAppButton; - private ViewLayoutRibbonAppButton _otherAppButton; - private ViewLayoutSeparator _spaceInsteadOfAppButton; - private ViewLayoutRibbonQATMini _captionQAT; - private ViewLayoutRibbonQATMini _nonCaptionQAT; - private ViewDrawRibbonCompoRightBorder _compRightBorder; - private bool _preventIntegration; - private bool _compoRightInjected; - private int _calculatedHeight; - private Font _cacheRibbonFont; - private int _cacheRibbonFontHeight; - #endregion - - #region Identity - /// - /// Initialize a new instance of the ViewDrawRibbonCaptionArea class. - /// - /// Reference to owning ribbon control. - /// Reference to redirector for palette settings. - /// Reference to the composition element. - /// Delegate for notifying paint/layout changes. - public ViewDrawRibbonCaptionArea(KryptonRibbon ribbon, - PaletteRedirect redirect, - ViewDrawRibbonComposition compositionArea, - NeedPaintHandler needPaintDelegate) - { - Debug.Assert(ribbon != null); - Debug.Assert(redirect != null); - Debug.Assert(compositionArea != null); - Debug.Assert(needPaintDelegate != null); - - // Remember incoming references - _ribbon = ribbon; - _compositionArea = compositionArea; - NeedPaintDelegate = needPaintDelegate; - _needIntegratedDelegate = OnIntegratedNeedPaint; - - // Create a special redirector for overriding the border setting - _redirect = new PaletteCaptionRedirect(redirect); - - CreateViewElements(); - SetupParentMonitoring(); - } - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing) - { - // Unhook from any current krypton form monitoring - if (KryptonForm != null) - { - // Remove our elements from the custom chrome - if (UsingCustomChrome) - { - _captionAppButton.OwnerForm = null; - KryptonForm.AllowIconDisplay = true; - KryptonForm.RevokeViewElement(ContextTitles, ViewDockStyle.Fill); - KryptonForm.RevokeViewElement(_captionAppButton, ViewDockStyle.Left); - KryptonForm.RevokeViewElement(_captionQAT, ViewDockStyle.Left); - UsingCustomChrome = false; - } - - KryptonForm.ApplyCustomChromeChanged -= OnFormChromeCheck; - KryptonForm.ClientSizeChanged -= OnFormChromeCheck; - KryptonForm.WindowActiveChanged -= OnWindowActiveChanged; - KryptonForm = null; - } - } - - base.Dispose(disposing); - } - - /// - /// Obtains the String representation of this instance. - /// - /// User readable name of the instance. - public override string ToString() - { - // Return the class name and instance identifier - return "ViewDrawRibbonCaptionArea:" + Id; - } - #endregion - - #region AppButtonController - /// - /// Gets the single reference to the application button controller. - /// - public AppButtonController AppButtonController { get; private set; } - - #endregion - - #region AppTabController - /// - /// Gets the single reference to the application tab controller. - /// - public AppTabController AppTabController { get; private set; } - - #endregion - - #region HookToolTipHandling - /// - /// Perform steps to generate a tooltip event when mouse is over the application button. - /// - public void HookToolTipHandling() - { - _captionAppButton.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, _captionAppButton, _captionAppButton.MouseController); - _otherAppButton.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, _otherAppButton, _otherAppButton.MouseController); - } - #endregion - - #region PreventIntegration - /// - /// Gets and sets the integration override value. - /// - public bool PreventIntegration - { - get => _preventIntegration; - - set - { - if (_preventIntegration != value) - { - // Store new override value - _preventIntegration = value; - - // Request the integration check be reapplied - OnFormChromeCheck(this, EventArgs.Empty); - } - } - } - #endregion - - #region DrawBorderLast - /// - /// Gets the drawing of the border before or after children. - /// - public override bool DrawBorderLast => false; - - #endregion - - #region AppButtonChanged - /// - /// Notify a change in the application button image. - /// - public void AppButtonChanged() - { - // Requests a repaint to show the change. - OnAppButtonNeedPaint(this, new NeedLayoutEventArgs(false)); - } - #endregion - - #region AppButtonChanged - /// - /// Update the visible state of the caption area based on integration, app button, contexts and qat location. - /// - public void UpdateVisible() - { - Visible = !UsingCustomChrome && - (_ribbon.RibbonAppButton.AppButtonVisible || - (_ribbon.QATLocation == QATLocation.Above) || - (_ribbon.RibbonContexts.Count > 0)); - } - #endregion - - #region VisibleQAT - /// - /// Get the quick access toolbar view that is currently visible - /// - public ViewLayoutRibbonQATMini VisibleQAT => UsingCustomChrome ? _captionQAT : _nonCaptionQAT; - - #endregion - - #region UpdateQAT - /// - /// Update display elements to reflect latest QAT setting. - /// - public void UpdateQAT() - { - bool before = _captionQAT.Visible; - _captionQAT.Visible = _ribbon.Visible && (_ribbon.QATLocation == QATLocation.Above); - _nonCaptionQAT.Visible = _ribbon.Visible && (_ribbon.QATLocation == QATLocation.Above); - UpdateVisible(); - - // A change in integrated caption visibility - if (before != _captionQAT.Visible) - { - QATButtonsChanged(); - } - } - #endregion - - #region AppButtonVisibleChanged - /// - /// A change in the app button visibility needs to be processed. - /// - public void AppButtonVisibleChanged() - { - bool appButtonVisible = (_ribbon.RibbonAppButton.AppButtonVisible && (_ribbon.RibbonShape == PaletteRibbonShape.Office2007)); - if (_captionAppButton.Visible != appButtonVisible) - { - // Update visible state of the app button to reflect current state - _captionAppButton.Visible = appButtonVisible; - _spaceInsteadOfAppButton.Visible = !_captionAppButton.Visible; - _otherAppButton.Visible = _captionAppButton.Visible; - _captionQAT.OverlapAppButton = _captionAppButton.Visible; - _nonCaptionQAT.OverlapAppButton = _captionAppButton.Visible; - UpdateVisible(); - - // Relayout and redraw to show the change - OnAppButtonNeedPaint(this, new NeedLayoutEventArgs(true)); - } - } - #endregion - - #region QATButtonsChanged - /// - /// Notification that the collection of QAT buttons has changed. - /// - public void QATButtonsChanged() - { - // Do we need to layout and paint the custom chrome? - if (UsingCustomChrome) - { - OnIntegratedNeedPaint(this, new NeedLayoutEventArgs(true)); - } - } - #endregion - - #region UsingCustomChrome - /// - /// Gets a value indicating if the ribbon is integrated into the custom chrome. - /// - public bool UsingCustomChrome { get; private set; } - - #endregion - - #region RedrawCustomChrome - /// - /// Causes the custom chrome to be repainted. - /// - /// Is a layout required. - public void RedrawCustomChrome(bool layout) - { - if (UsingCustomChrome) - { - KryptonForm.PerformNeedPaint(layout); - } - } - #endregion - - #region DrawCaptionOnComposition - /// - /// Gets a value indicating if drawing on the composition element. - /// - public bool DrawCaptionOnComposition => UsingCustomChrome && KryptonForm.ApplyComposition; - - #endregion - - #region KryptonForm - /// - /// Gets access to the integration form. - /// - public KryptonForm KryptonForm { get; private set; } - - #endregion - - #region RealWindowBorders - /// - /// Gets the window borders of the krypton form. - /// - public Padding RealWindowBorders => KryptonForm?.RealWindowBorders ?? Padding.Empty; - - #endregion - - #region ContextTitles - /// - /// Gets access to the layout view used for the context titles. - /// - public ViewLayoutRibbonContextTitles ContextTitles { get; private set; } - - #endregion - - #region PerformFormChromeCheck - /// - /// Redecide if the custom chrome and integration can occur. - /// - public void PerformFormChromeCheck() - { - // Update decision about integrating or providing caption functionality - OnFormChromeCheck(null, EventArgs.Empty); - } - #endregion - - #region DoesClientMouseDownEndAllTracking - /// - /// Should a mouse down at the provided point cause an end to popup tracking. - /// - /// Client coordinates point. - /// True to end tracking; otherwise false. - public bool DoesCurrentMouseDownEndAllTracking(Point pt) - { - // If integrated into custom chrome... - if (UsingCustomChrome) - { - // Convert point to the form coordinates - Point formPt = KryptonForm.PointToClient(pt); - Padding formPadding =KryptonForm.RealWindowBorders; - formPt.X += formPadding.Left; - formPt.Y += formPadding.Top; - - if (ContextTitles != null) - { - // Search the context title elements for a match - foreach (ViewBase child in ContextTitles) - { - if ((child is ViewDrawRibbonContextTitle) && child.ClientRectangle.Contains(formPt)) - { - return false; - } - } - } - } - - return true; - } - #endregion - - #region Layout - /// - /// Discover the preferred size of the element. - /// - /// Layout context. - public override Size GetPreferredSize(ViewLayoutContext context) - { - Debug.Assert(context != null); - - // Enforce the minimum height - Size preferredSize = base.GetPreferredSize(context); - preferredSize.Height = Math.Max(_calculatedHeight, preferredSize.Height); - - return preferredSize; - } - #endregion - - #region Protected - /// - /// Gets access to the need paint delegate. - /// - protected NeedPaintHandler NeedPaintDelegate - { - [DebuggerStepThrough] - get; - } - - /// - /// Fires a request to have painting/layout performed. - /// - /// Does the palette change require a layout. - protected void PerformNeedPaint(bool needLayout) - { - NeedPaintDelegate(this, new NeedLayoutEventArgs(needLayout)); - } - #endregion - - #region Implementation - private void CreateViewElements() - { - // Create redirector for the accessing the background palette - _redirectCaption = new PaletteDoubleRedirect(_redirect, PaletteBackStyle.HeaderForm, PaletteBorderStyle.HeaderForm, NeedPaintDelegate); - - // Create a top half for use in KryptonForm and another for use inside this caption area - _captionAppButton = new ViewLayoutRibbonAppButton(_ribbon, false); - _otherAppButton = new ViewLayoutRibbonAppButton(_ribbon, false); - - // Connect up the application button controller to the two button elements - AppButtonController = new AppButtonController(_ribbon) - { - Target1 = _captionAppButton.AppButton, - Target2 = _otherAppButton.AppButton - }; - AppButtonController.NeedPaint += OnAppButtonNeedPaint; - _captionAppButton.MouseController = AppButtonController; - _otherAppButton.MouseController = AppButtonController; - AppTabController = new AppTabController(_ribbon); - AppTabController.NeedPaint += OnAppButtonNeedPaint; - - // When not showing the app button we show this spacer instead - _spaceInsteadOfAppButton = new ViewLayoutSeparator(0) - { - Visible = false - }; - - // Quick access toolbar, minibar versions - _captionQAT = new ViewLayoutRibbonQATMini(_ribbon, _needIntegratedDelegate); - _nonCaptionQAT = new ViewLayoutRibbonQATMini(_ribbon, NeedPaintDelegate); - - // Layout needed to position and draw the context titles - ContextTitles = new ViewLayoutRibbonContextTitles(_ribbon, this) - { - ReverseRenderOrder = true - }; - - // Create composition right border and attach to composition area - _compRightBorder = new ViewDrawRibbonCompoRightBorder(); - _compositionArea.CompRightBorder = _compRightBorder; - - // Place app button on left side and fill remainder with context titles - Add(ContextTitles, ViewDockStyle.Fill); - Add(_nonCaptionQAT, ViewDockStyle.Left); - Add(_otherAppButton, ViewDockStyle.Left); - - // ReSharper disable RedundantBaseQualifier - // Update base class to use correct palette interface - base.SetPalettes(_redirectCaption.PaletteBack, _redirectCaption.PaletteBorder); - // ReSharper restore RedundantBaseQualifier - } - - private void SetupParentMonitoring() - { - // We have to know when the parent of the ribbon changes so we can then hook - // into monitoring the top level custom chrome control. We need information this - // decide if we integrate with top chrome or show this control instead. - _ribbon.ParentChanged += OnRibbonParentChanged; - } - - private void OnRibbonParentChanged(object sender, EventArgs e) - { - // Unhook from any current krypton form monitoring - if (KryptonForm != null) - { - KryptonForm.ApplyCustomChromeChanged -= OnFormChromeCheck; - KryptonForm.ClientSizeChanged -= OnFormChromeCheck; - KryptonForm.WindowActiveChanged -= OnWindowActiveChanged; - KryptonForm = null; - } - - if (!_ribbon.IsDisposed && !_ribbon.Disposing) - { - // Find the new owning level form we are hosted inside - - // Should always be inside a form, but you never know! - if (_ribbon.Parent is Form ownerForm) - { - // We only care if the owner form is a KryptonForm instance - if (ownerForm is KryptonForm) - { - KryptonForm = ownerForm as KryptonForm; - KryptonForm.Composition = _compositionArea; - KryptonForm.ApplyCustomChromeChanged += OnFormChromeCheck; - KryptonForm.ClientSizeChanged += OnFormChromeCheck; - KryptonForm.WindowActiveChanged += OnWindowActiveChanged; - } - } - - // Update decision about integrating or providing caption functionality - OnFormChromeCheck(null, EventArgs.Empty); - } - } - - private void OnFormChromeCheck(object sender, EventArgs e) - { - bool needLayout = false; - bool integrated = false; - - // Are we inside a KryptonForm instance that is using custom chrome? - if ((KryptonForm != null) && KryptonForm.ApplyCustomChrome) - { - // Ribbon must be placed at the top left of the forms client area - if (_ribbon.Location == Point.Empty) - { - // Find the height of the top caption area for the form - int height = KryptonForm.RealWindowBorders.Top; - - // Must be at least the minimum for the application button and spacing gap above it - if (height >= MIN_INTEGRATED_HEIGHT) - { - integrated = true; - } - - // Update width of the separator used in place of the app button when app button not visible - _spaceInsteadOfAppButton.SeparatorSize = new Size(KryptonForm.RealWindowBorders.Left, 0); - } - } - - if (KryptonForm != null) - { - bool overrideIntegrated = integrated; - - // If told to prevent the integration, then prevent it now - if (PreventIntegration && overrideIntegrated) - { - overrideIntegrated = false; - } - - // Is there a change in integrated requirements? - if (overrideIntegrated != UsingCustomChrome) - { - // Do we need to inject our application button into the caption? - if (!UsingCustomChrome) - { - _captionAppButton.OwnerForm = KryptonForm; - _captionQAT.OwnerForm = KryptonForm; - KryptonForm.InjectViewElement(_captionQAT, ViewDockStyle.Left); - KryptonForm.InjectViewElement(_spaceInsteadOfAppButton, ViewDockStyle.Left); - KryptonForm.InjectViewElement(_captionAppButton, ViewDockStyle.Left); - - // Only inject if not already present - if (!_compoRightInjected) - { - KryptonForm.InjectViewElement(_compRightBorder, ViewDockStyle.Right); - _compoRightInjected = true; - } - - KryptonForm.InjectViewElement(ContextTitles, ViewDockStyle.Fill); - } - else - { - _captionAppButton.OwnerForm = null; - _captionQAT.OwnerForm = null; - KryptonForm.RevokeViewElement(ContextTitles, ViewDockStyle.Fill); - - // At runtime under vista we do not remove the compo right border - if (_ribbon.InDesignMode || - (Environment.OSVersion.Version.Major < 6) || - !DWM.IsCompositionEnabled) - { - KryptonForm.RevokeViewElement(_compRightBorder, ViewDockStyle.Right); - _compoRightInjected = true; - } - - KryptonForm.RevokeViewElement(_captionAppButton, ViewDockStyle.Left); - KryptonForm.RevokeViewElement(_spaceInsteadOfAppButton, ViewDockStyle.Left); - KryptonForm.RevokeViewElement(_captionQAT, ViewDockStyle.Left); - } - - UsingCustomChrome = overrideIntegrated; - UpdateVisible(); - needLayout = true; - } - - KryptonForm.AllowComposition = _ribbon.AllowFormIntegrate && !_ribbon.InDesignMode; - - //TODO call this function when palette is changing - /*bool newAllowIconDisplay = (!UsingCustomChrome || !_ribbon.RibbonAppButton.AppButtonVisible - || (_ribbon.RibbonAppButton.AppButtonVisible && (_ribbon.RibbonShape == PaletteRibbonShape.Office2010 || _ribbon.RibbonShape == PaletteRibbonShape.Office2013))); - if (KryptonForm.AllowIconDisplay != newAllowIconDisplay) - { - KryptonForm.AllowIconDisplay = newAllowIconDisplay; - needLayout = true; - }* - - bool newAllowIconDisplay = (!_integrated || !_ribbon.RibbonAppButton.AppButtonVisible || (_ribbon.RibbonAppButton.AppButtonVisible && (_ribbon.RibbonShape == PaletteRibbonShape.Office2010 || _ribbon.RibbonShape == PaletteRibbonShape.Office2013))); - if (_kryptonForm.AllowIconDisplay != newAllowIconDisplay) - { - _kryptonForm.AllowIconDisplay = newAllowIconDisplay; - needLayout = true; - } - } - - // If not integrated - if (!UsingCustomChrome) - { - // Get the font we used to draw the context tab text - Font ribbonFont = _ribbon.StateCommon.RibbonGeneral.GetRibbonTextFont(PaletteState.Normal); - - // Can we use the cached font height? - if (ribbonFont != _cacheRibbonFont) - { - _cacheRibbonFont = ribbonFont; - _cacheRibbonFontHeight = ribbonFont.Height; - } - - // Calculate the desired height of our own area - int calculatedHeight = Math.Max(_cacheRibbonFontHeight + CAPTION_TEXT_GAPS, MIN_SELF_HEIGHT); - - // If a change in desired height then request layout to effect change - if (_calculatedHeight != calculatedHeight) - { - _calculatedHeight = calculatedHeight; - needLayout = true; - } - } - - if (needLayout) - { - PerformNeedPaint(true); - - if (KryptonForm != null) - { - KryptonForm.RecreateMinMaxCloseButtons(); - KryptonForm.PerformNeedPaint(true); - } - } - } - - private void OnWindowActiveChanged(object sender, EventArgs e) - { - if (KryptonForm != null) - { - // When integrated into composition we need to repaint whenever the - // owning form changes active status, as we are drawing the caption - if (KryptonForm.ApplyCustomChrome && KryptonForm.ApplyComposition) - { - PerformNeedPaint(true); - } - } - } - - private void OnAppButtonNeedPaint(object sender, NeedLayoutEventArgs e) - { - // Redraw the ribbon control to show change - PerformNeedPaint(e.NeedLayout); - _ribbon.Refresh(); - - // If we have integrated the button into the custom chrome caption area - if (UsingCustomChrome) - { - KryptonForm.PerformNeedPaint(e.NeedLayout); - } - } - - private void OnIntegratedNeedPaint(object sender, NeedLayoutEventArgs e) - { - // If we have integrated the button into the custom chrome caption area - if (UsingCustomChrome) - { - KryptonForm.PerformNeedPaint(e.NeedLayout); - } -} - #endregion - }*/ - #endregion - - #region New Class /// /// Ribbon area that contains the context titles, minibar and top half of application button. /// @@ -690,13 +28,12 @@ internal class ViewDrawRibbonCaptionArea : ViewDrawDocker private readonly NeedPaintHandler _needIntegratedDelegate; private readonly PaletteCaptionRedirect _redirect; private PaletteDoubleRedirect _redirectCaption; - private readonly ViewDrawRibbonComposition _compositionArea; private ViewLayoutRibbonAppButton _captionAppButton; private ViewLayoutRibbonAppButton _otherAppButton; private ViewLayoutSeparator _spaceInsteadOfAppButton; private ViewLayoutRibbonQATMini _captionQAT; private ViewLayoutRibbonQATMini _nonCaptionQAT; - private ViewLayoutRibbonContextTitles? _contextTiles; + private ViewLayoutRibbonContextTitles _contextTiles; private ViewDrawRibbonCompoRightBorder _compRightBorder; private AppButtonController? _appButtonController; private AppTabController? _appTabController; @@ -710,34 +47,31 @@ internal class ViewDrawRibbonCaptionArea : ViewDrawDocker #endregion #region Identity + /// /// Initialize a new instance of the ViewDrawRibbonCaptionArea class. /// /// Reference to owning ribbon control. /// Reference to redirector for palette settings. - /// Reference to the composition element. /// Delegate for notifying paint/layout changes. public ViewDrawRibbonCaptionArea([DisallowNull] KryptonRibbon ribbon, [DisallowNull] PaletteRedirect redirect, - [DisallowNull] ViewDrawRibbonComposition compositionArea, [DisallowNull] NeedPaintHandler needPaintDelegate) { Debug.Assert(ribbon != null); Debug.Assert(redirect != null); - Debug.Assert(compositionArea != null); Debug.Assert(needPaintDelegate != null); MIN_INTEGRATED_HEIGHT = (int)(FactorDpiY * 26); // MiniBar, 16 image + 2 * (2 gap + 1 border + 2 border) CAPTION_TEXT_GAPS = (int)(FactorDpiX * 10); // 4 below and 6 above MIN_SELF_HEIGHT = (int)(FactorDpiY * 28); // Min height to show application button and the mini bar and context tabs // Remember incoming references - _ribbon = ribbon; - _compositionArea = compositionArea; - _needPaintDelegate = needPaintDelegate; + _ribbon = ribbon!; + _needPaintDelegate = needPaintDelegate!; _needIntegratedDelegate = OnIntegratedNeedPaint; // Create a special redirector for overriding the border setting - _redirect = new PaletteCaptionRedirect(redirect); + _redirect = new PaletteCaptionRedirect(redirect!); CreateViewElements(); SetupParentMonitoring(); @@ -765,9 +99,8 @@ protected override void Dispose(bool disposing) _integrated = false; } - _kryptonForm.ApplyCustomChromeChanged -= OnFormChromeCheck; + _kryptonForm.ApplyUseThemeFormChromeBorderWidthChanged -= OnFormChromeCheck; _kryptonForm.ClientSizeChanged -= OnFormChromeCheck; - _kryptonForm.WindowActiveChanged -= OnWindowActiveChanged; _kryptonForm = null; } } @@ -807,8 +140,8 @@ public override string ToString() => /// public void HookToolTipHandling() { - _captionAppButton.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager!, _captionAppButton, _captionAppButton.MouseController!); - _otherAppButton.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager!, _otherAppButton, _otherAppButton.MouseController!); + _captionAppButton.MouseController = new ToolTipController(_ribbon.TabsArea?.ButtonSpecManager?.ToolTipManager!, _captionAppButton, _captionAppButton.MouseController!); + _otherAppButton.MouseController = new ToolTipController(_ribbon.TabsArea?.ButtonSpecManager?.ToolTipManager!, _otherAppButton, _otherAppButton.MouseController!); } #endregion @@ -859,7 +192,7 @@ public void AppButtonChanged() => /// Update the visible state of the caption area based on integration, app button, contexts and qat location. ///
public void UpdateVisible() => Visible = !_integrated && - (_ribbon.RibbonAppButton.AppButtonVisible || + (_ribbon.RibbonFileAppButton.AppButtonVisible || (_ribbon.QATLocation == QATLocation.Above) || (_ribbon.RibbonContexts.Count > 0)); #endregion @@ -909,7 +242,7 @@ public void UpdateQAT() ///
public void AppButtonVisibleChanged() { - var appButtonVisible = _ribbon.RibbonAppButton.AppButtonVisible && (_ribbon.RibbonShape == PaletteRibbonShape.Office2007); + var appButtonVisible = _ribbon.RibbonFileAppButton.AppButtonVisible && (_ribbon.RibbonShape == PaletteRibbonShape.Office2007); if (_captionAppButton.Visible != appButtonVisible) { // Update visible state of the app button to reflect current state @@ -962,14 +295,6 @@ public void RedrawCustomChrome(bool layout) } #endregion - #region DrawCaptionOnComposition - /// - /// Gets a value indicating if drawing on the composition element. - /// - public bool DrawCaptionOnComposition => UsingCustomChrome && KryptonForm is { ApplyComposition: true }; - - #endregion - #region KryptonForm /// /// Gets access to the integration form. @@ -1003,7 +328,7 @@ public Padding RealWindowBorders /// /// Gets access to the layout view used for the context titles. /// - public ViewLayoutRibbonContextTitles? ContextTitles => _contextTiles; + public ViewLayoutRibbonContextTitles ContextTitles => _contextTiles; #endregion @@ -1062,7 +387,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Enforce the minimum height - Size preferredSize = base.GetPreferredSize(context); + Size preferredSize = base.GetPreferredSize(context!); preferredSize.Height = Math.Max(_calculatedHeight, preferredSize.Height); return preferredSize; @@ -1126,7 +451,6 @@ private void CreateViewElements() // Create composition right border and attach to composition area _compRightBorder = new ViewDrawRibbonCompoRightBorder(); - _compositionArea.CompRightBorder = _compRightBorder; // Place app button on left side and fill remainder with context titles Add(_contextTiles, ViewDockStyle.Fill); @@ -1138,19 +462,18 @@ private void CreateViewElements() } private void SetupParentMonitoring() => - // We have to know when the parent of the ribbon changes so we can then hook + // We have to know when the parent of the ribbon changes, so we can then hook // into monitoring the top level custom chrome control. We need information this // decide if we integrate with top chrome or show this control instead. _ribbon.ParentChanged += OnRibbonParentChanged; - private void OnRibbonParentChanged(object sender, EventArgs e) + private void OnRibbonParentChanged(object? sender, EventArgs e) { // Unhook from any current krypton form monitoring if (_kryptonForm != null) { - _kryptonForm.ApplyCustomChromeChanged -= OnFormChromeCheck; + _kryptonForm.ApplyUseThemeFormChromeBorderWidthChanged -= OnFormChromeCheck; _kryptonForm.ClientSizeChanged -= OnFormChromeCheck; - _kryptonForm.WindowActiveChanged -= OnWindowActiveChanged; _kryptonForm = null; } @@ -1164,10 +487,8 @@ private void OnRibbonParentChanged(object sender, EventArgs e) if (ownerForm is KryptonForm form) { _kryptonForm = form; - _kryptonForm.Composition = _compositionArea; - _kryptonForm.ApplyCustomChromeChanged += OnFormChromeCheck; + _kryptonForm.ApplyUseThemeFormChromeBorderWidthChanged += OnFormChromeCheck; _kryptonForm.ClientSizeChanged += OnFormChromeCheck; - _kryptonForm.WindowActiveChanged += OnWindowActiveChanged; } // Update decision about integrating or providing caption functionality @@ -1181,7 +502,7 @@ private void OnFormChromeCheck(object? sender, EventArgs e) var integrated = false; // Are we inside a KryptonForm instance that is using custom chrome? - if (_kryptonForm is { ApplyCustomChrome: true }) + if (_kryptonForm != null) { // Ribbon must be placed at the top left of the forms client area if (_ribbon.Location == Point.Empty) @@ -1198,10 +519,7 @@ private void OnFormChromeCheck(object? sender, EventArgs e) // Update width of the separator used in place of the app button when app button not visible _spaceInsteadOfAppButton.SeparatorSize = new Size(_kryptonForm.RealWindowBorders.Left, 0); } - } - if (_kryptonForm != null) - { var overrideIntegrated = integrated; // If told to prevent the integration, then prevent it now @@ -1238,9 +556,7 @@ private void OnFormChromeCheck(object? sender, EventArgs e) _kryptonForm.RevokeViewElement(_contextTiles, ViewDockStyle.Fill); // At runtime under vista we do not remove the compo right border - if (_ribbon.InDesignMode || - (Environment.OSVersion.Version.Major < 6) || - !DWM.IsCompositionEnabled) + if (_ribbon.InDesignMode) { _kryptonForm.RevokeViewElement(_compRightBorder, ViewDockStyle.Right); _compoRightInjected = true; @@ -1256,12 +572,10 @@ private void OnFormChromeCheck(object? sender, EventArgs e) needLayout = true; } - _kryptonForm.AllowComposition = _ribbon is { AllowFormIntegrate: true, InDesignMode: false }; - //TODO: call this function when palette is changing var newAllowIconDisplay = !_integrated - || !_ribbon.RibbonAppButton.AppButtonVisible - || (_ribbon.RibbonAppButton.AppButtonVisible + || !_ribbon.RibbonFileAppButton.AppButtonVisible + || (_ribbon.RibbonFileAppButton.AppButtonVisible && _ribbon.RibbonShape is PaletteRibbonShape.Office2010 or PaletteRibbonShape.VisualStudio2010 or PaletteRibbonShape.Office2013 or PaletteRibbonShape.Microsoft365 or PaletteRibbonShape.VisualStudio ) ; @@ -1279,7 +593,7 @@ private void OnFormChromeCheck(object? sender, EventArgs e) Font ribbonFont = _ribbon.StateCommon.RibbonGeneral.GetRibbonTextFont(PaletteState.Normal); // Can we use the cached font height? - if (ribbonFont != _cacheRibbonFont) + if (!Equals(ribbonFont, _cacheRibbonFont)) { _cacheRibbonFont = ribbonFont; _cacheRibbonFontHeight = ribbonFont.Height; @@ -1308,16 +622,6 @@ private void OnFormChromeCheck(object? sender, EventArgs e) } } - private void OnWindowActiveChanged(object sender, EventArgs e) - { - if (_kryptonForm is { ApplyCustomChrome: true, ApplyComposition: true }) - // When integrated into composition we need to repaint whenever the - // owning form changes active status, as we are drawing the caption - { - PerformNeedPaint(true); - } - } - private void OnAppButtonNeedPaint(object sender, NeedLayoutEventArgs e) { // Redraw the ribbon control to show change @@ -1331,7 +635,7 @@ private void OnAppButtonNeedPaint(object sender, NeedLayoutEventArgs e) } } - private void OnIntegratedNeedPaint(object sender, NeedLayoutEventArgs e) + private void OnIntegratedNeedPaint(object? sender, NeedLayoutEventArgs e) { // If we have integrated the button into the custom chrome caption area if (_integrated) @@ -1341,5 +645,4 @@ private void OnIntegratedNeedPaint(object sender, NeedLayoutEventArgs e) } #endregion } - #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCompoRightBorder.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCompoRightBorder.cs index 92214b836..aecc4ee7b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCompoRightBorder.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonCompoRightBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,15 +21,16 @@ internal class ViewDrawRibbonCompoRightBorder : ViewLeaf { #region Instance Fields - private int _width; - private readonly int SPACING_GAP; // = 10; + // Note: Do we need _width? + // private int _width; + private readonly int _spacingGap; // = 10; #endregion #region Identity /// /// Initialize a new instance of the ViewDrawRibbonCompoRightBorder class. /// - public ViewDrawRibbonCompoRightBorder() => SPACING_GAP = (int)(10 * FactorDpiX); + public ViewDrawRibbonCompoRightBorder() => _spacingGap = (int)(10 * FactorDpiX); /// /// Obtains the String representation of this instance. @@ -58,64 +59,6 @@ public override Size GetPreferredSize(ViewLayoutContext context) { var preferredSize = Size.Empty; - // We need an owning form to perform calculations - if (CompOwnerForm is { ApplyCustomChrome: true, ApplyComposition: true }) - // We only have size if custom chrome is being used with composition - { - try - { - // Create structure that will be populated by call to WM_GETTITLEBARINFOEX - var tbi = new PI.TITLEBARINFOEX(); - tbi.cbSize = (uint) Marshal.SizeOf(tbi); - - // Ask the window for the title bar information - PI.SendMessage(CompOwnerForm.Handle, PI.WM_.GETTITLEBARINFOEX, IntPtr.Zero, ref tbi); - - // Find width of the button rectangle - var closeWidth = tbi.rcCloseButton.right - tbi.rcCloseButton.left; - var helpWidth = tbi.rcHelpButton.right - tbi.rcHelpButton.left; - var minWidth = tbi.rcMinimizeButton.right - tbi.rcMinimizeButton.left; - var maxWidth = tbi.rcMaximizeButton.right - tbi.rcMaximizeButton.left; - - var clientWidth = CompOwnerForm.ClientSize.Width; - var clientScreenRight = CompOwnerForm.RectangleToScreen(CompOwnerForm.ClientRectangle).Right; - var leftMost = clientScreenRight; - - // Find the left most button edge (start with right side of client area) - if ((closeWidth > 0) && (closeWidth < clientWidth)) - { - leftMost = Math.Min(leftMost, tbi.rcCloseButton.left); - } - - if ((helpWidth > 0) && (helpWidth < clientWidth)) - { - leftMost = Math.Min(leftMost, tbi.rcHelpButton.left); - } - - if ((minWidth > 0) && (minWidth < clientWidth)) - { - leftMost = Math.Min(leftMost, tbi.rcMinimizeButton.left); - } - - if ((maxWidth > 0) && (maxWidth < clientWidth)) - { - leftMost = Math.Min(leftMost, tbi.rcMaximizeButton.left); - } - - // Our width is the distance between the left most button edge and the right - // side of the client area (this space the buttons are taking up). Plus a small - // extra gap between the first button and the caption elements to its left. - _width = clientScreenRight - leftMost + SPACING_GAP; - - preferredSize.Width = _width; - } - catch(ObjectDisposedException) - { - // Asking for the WM_GETTITLEBARINFOEX can cause exception if the form level - // Icon has already been disposed. This happens in rare circumstances. - } - } - return preferredSize; } @@ -128,7 +71,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Start with all the provided space - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonComposition.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonComposition.cs deleted file mode 100644 index c85ae2cbd..000000000 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonComposition.cs +++ /dev/null @@ -1,191 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * - */ -#endregion - -namespace Krypton.Ribbon -{ - /// - /// Allocate space for the location of the composition caption area. - /// - internal class ViewDrawRibbonComposition : ViewLeaf, - IKryptonComposition - { - #region Instance Fields - private readonly int CONSTANT_COMPOSITION_HEIGHT; - private readonly KryptonRibbon _ribbon; - private VisualForm _ownerForm; - private readonly NeedPaintHandler _needPaint; - private readonly Blend _compBlend; - #endregion - - #region Identity - /// - /// Initialize a new instance of the ViewDrawRibbonComposition class. - /// - /// Owning control instance. - /// Delegate for requested a paint. - public ViewDrawRibbonComposition([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] NeedPaintHandler needPaint) - { - Debug.Assert(ribbon != null); - Debug.Assert(needPaint != null); - - CONSTANT_COMPOSITION_HEIGHT = (int)(30 * FactorDpiY); - - _ribbon = ribbon; - _needPaint = needPaint; - - _compBlend = new Blend - { - Positions = new[] { 0.0f, 0.25f, 1.0f }, - Factors = new[] { 0.0f, 0.0f, 0.40f } - }; - } - - /// - /// Obtains the String representation of this instance. - /// - /// User readable name of the instance. - public override string ToString() => - // Return the class name and instance identifier - $@"ViewDrawRibbonComposition:{Id}"; - - #endregion - - #region CompHeight - /// - /// Gets the pixel height of the composition extension into the client area. - /// - public int CompHeight - { - get - { - if (_ribbon is { RibbonShape: PaletteRibbonShape.Office2010, MainPanel.Visible: true }) - { - return _ribbon.TabsArea.ClientHeight + CONSTANT_COMPOSITION_HEIGHT; - } - else - { - return CONSTANT_COMPOSITION_HEIGHT; - } - } - } - #endregion - - #region CompRightBorder - /// - /// Gets and sets the associated right border for composition layout. - /// - public ViewDrawRibbonCompoRightBorder CompRightBorder { get; set; } - - #endregion - - #region CompHandle - /// - /// Gets the handle of the composition element control. - /// - public IntPtr CompHandle => _ribbon.Handle; - - #endregion - - #region CompVisible - /// - /// Gets and sets the visible state. - /// - public bool CompVisible - { - get => Visible; - set => Visible = value; - } - #endregion - - #region CompOwnerForm - /// - /// Gets and sets the owner form to use when compositing. - /// - public VisualForm CompOwnerForm - { - get => _ownerForm; - - set - { - _ownerForm = value; - CompRightBorder.CompOwnerForm = value; - } - } - #endregion - - #region CompNeedPaint - /// - /// Request a repaint and optional layout. - /// - /// Is a layout required. - public void CompNeedPaint(bool needLayout) => - // Pass request onto the ribbon instance - _needPaint(this, new NeedLayoutEventArgs(needLayout)); - #endregion - - #region Layout - /// - /// Discover the preferred size of the element. - /// - /// Layout context. - public override Size GetPreferredSize(ViewLayoutContext context) => new Size(0, CONSTANT_COMPOSITION_HEIGHT); - - /// - /// Perform a layout of the elements. - /// - /// Layout context. - public override void Layout([DisallowNull] ViewLayoutContext context) - { - Debug.Assert(context != null); - - // We take on all the available display area - ClientRectangle = context.DisplayRectangle; - - Rectangle contextRect = ClientRectangle; - - // Use the entire height of the control and not just the composition height - contextRect.Height = context.TopControl.Height; - - // Make bigger by the left and right borders, so that the application button is shifted - // to match up with the client area of the actual ribbon control in the client area - Padding realBorders = _ownerForm.RealWindowBorders; - contextRect.X -= realBorders.Left; - contextRect.Width += realBorders.Horizontal; - - context.DisplayRectangle = contextRect; - - // Ask the integrated form to perform layout in our area - _ownerForm.WindowChromeCompositionLayout(context, ClientRectangle); - - // Put back the original display rectangle - context.DisplayRectangle = ClientRectangle; - } - #endregion - - #region Paint - /// - /// Perform rendering before child elements are rendered. - /// - /// Rendering context. - public override void RenderBefore([DisallowNull] RenderContext context) - { - Debug.Assert(_ownerForm != null); - - // Ask the owning form to perform rendering in this element - _ownerForm.WindowChromeCompositionPaint(context); - } - #endregion - } -} diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonContextTitle.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonContextTitle.cs index bda94fcbc..a22f9a1f0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonContextTitle.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonContextTitle.cs @@ -5,10 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -32,9 +29,8 @@ internal class ViewDrawRibbonContextTitle : ViewLeaf, private IDisposable? _mementoContentShadow1; private IDisposable? _mementoContentShadow2; private Rectangle _textRect; - private readonly int TEXT_SIDE_GAP; // = 4; - private readonly int TEXT_SIDE_GAP_COMPOSITION; // = 2; - private readonly int TEXT_BOTTOM_GAP; // = 3; + private readonly int _textSideGap; // = 4; + private readonly int _textBottomGap; // = 3; #endregion #region Identity @@ -42,23 +38,22 @@ internal class ViewDrawRibbonContextTitle : ViewLeaf, /// Initialize a new instance of the ViewDrawRibbonContextTitle class. /// /// Source ribbon control. - /// Source for inheriting the ribbon bacgkground colors. + /// Source for inheriting the ribbon background colors. public ViewDrawRibbonContextTitle([DisallowNull] KryptonRibbon ribbon, [DisallowNull] IPaletteRibbonBack inherit) { Debug.Assert(ribbon != null); Debug.Assert(inherit != null); - TEXT_SIDE_GAP = (int)(4 * FactorDpiX); - TEXT_SIDE_GAP_COMPOSITION = (int)(2 * FactorDpiX); - TEXT_BOTTOM_GAP = (int)(3 * FactorDpiY); + _textSideGap = (int)(4 * FactorDpiX); + _textBottomGap = (int)(3 * FactorDpiY); // Remember incoming references - _inherit = inherit; - _ribbon = ribbon; + _inherit = inherit!; + _ribbon = ribbon!; // Use a class to convert from ribbon tab to content interface - _contentProvider = new ContextToContent(ribbon.StateCommon.RibbonGeneral); + _contentProvider = new ContextToContent(_ribbon.StateCommon.RibbonGeneral); } /// @@ -110,7 +105,7 @@ protected override void Dispose(bool disposing) /// /// Gets and sets the context to display. /// - public ContextTabSet ContextTabSet + public ContextTabSet? ContextTabSet { get => _context; @@ -150,15 +145,25 @@ public override Size GetPreferredSize(ViewLayoutContext context) => /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); - ClientRectangle = context.DisplayRectangle; + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + ClientRectangle = context!.DisplayRectangle; // We always extend an extra pixel downwards to draw over the containers border var adjustRect = new Rectangle(ClientRectangle.X, ClientRectangle.Y, ClientWidth, ClientHeight + 1); // Get the client rect of the parent - Rectangle parentRect = Parent.ClientRectangle; + Rectangle parentRect = Parent!.ClientRectangle; // If we are only partially visible on the right hand side if ((adjustRect.X < parentRect.Right) && (adjustRect.Right >= parentRect.Right)) @@ -180,9 +185,9 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Use the font height to decide on the text rectangle var fontHeight = _ribbon.CalculatedValues.DrawFontHeight; - _textRect = new Rectangle(ClientLocation.X + TEXT_SIDE_GAP, - ClientLocation.Y + (ClientHeight - fontHeight - TEXT_BOTTOM_GAP), - ClientWidth - (TEXT_SIDE_GAP * 2), + _textRect = new Rectangle(ClientLocation.X + _textSideGap, + ClientLocation.Y + (ClientHeight - fontHeight - _textBottomGap), + ClientWidth - (_textSideGap * 2), fontHeight); // Remember to dispose of old memento @@ -212,20 +217,17 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _contentProvider.OverrideTextColor = Color.FromArgb(128, ControlPaint.Dark(GetRibbonBackColor1(PaletteState.Normal))); - if (DrawOnComposition) - { - _contentProvider.OverrideTextHint = PaletteTextHint.SingleBitPerPixelGridFit; - } + _contentProvider.OverrideTextHint = PaletteTextHint.SingleBitPerPixelGridFit; _mementoContentShadow1 = context.Renderer.RenderStandardContent.LayoutContent(context, shadowTextRect1, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); _mementoContentShadow2 = context.Renderer.RenderStandardContent.LayoutContent(context, shadowTextRect2, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); _contentProvider.OverrideTextColor = Color.Empty; } @@ -233,7 +235,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _mementoContentText = context.Renderer.RenderStandardContent.LayoutContent(context, _textRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); _contentProvider.OverrideTextHint = PaletteTextHint.Inherit; } @@ -246,33 +248,40 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Office 2010 draws a shadow effect of the text if ((_ribbon.RibbonShape == PaletteRibbonShape.Office2010) && (_mementoContentShadow1 != null)) { PaletteState state = _ribbon.Enabled ? PaletteState.Normal : PaletteState.Disabled; // Use renderer to draw the tab background - _mementoBack = context.Renderer.RenderRibbon.DrawRibbonTabContextTitle(_ribbon.RibbonShape, context, ClientRectangle, _ribbon.StateCommon.RibbonGeneral, this, _mementoBack); + _mementoBack = context.Renderer.RenderRibbon.DrawRibbonTabContextTitle(_ribbon.RibbonShape, context, ClientRectangle, _ribbon.StateCommon.RibbonGeneral, this, _mementoBack!); var shadowTextRect1 = _textRect with { X = _textRect.X - 1, Y = _textRect.Y + 1 }; var shadowTextRect2 = _textRect with { X = _textRect.X + 1, Y = _textRect.Y + 1 }; _contentProvider.OverrideTextColor = Color.FromArgb(128, ControlPaint.Dark(GetRibbonBackColor1(PaletteState.Normal))); - if (DrawOnComposition) - { - _contentProvider.OverrideTextHint = PaletteTextHint.SingleBitPerPixelGridFit; - } + _contentProvider.OverrideTextHint = PaletteTextHint.SingleBitPerPixelGridFit; context.Renderer.RenderStandardContent.DrawContent(context, shadowTextRect1, _contentProvider, _mementoContentShadow1, VisualOrientation.Top, - state, false, false, true); + state, true); context.Renderer.RenderStandardContent.DrawContent(context, shadowTextRect2, - _contentProvider, _mementoContentShadow2, + _contentProvider, _mementoContentShadow2!, VisualOrientation.Top, - state, false, false, true); + state, true); _contentProvider.OverrideTextColor = Color.Empty; @@ -282,32 +291,25 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, _textRect, _contentProvider, _mementoContentText, VisualOrientation.Top, - state, false, false, true); + state, true); } _contentProvider.OverrideTextHint = PaletteTextHint.Inherit; } else { - if (DrawOnComposition) - { - RenderOnComposition(context); - } - else + PaletteState state = _ribbon.Enabled ? PaletteState.Normal : PaletteState.Disabled; + + // Use renderer to draw the tab background + _mementoBack = context.Renderer.RenderRibbon.DrawRibbonTabContextTitle(_ribbon.RibbonShape, context, ClientRectangle, _ribbon.StateCommon.RibbonGeneral, this, _mementoBack!); + + // Use renderer to draw the text content + if (_mementoContentText != null) { - PaletteState state = _ribbon.Enabled ? PaletteState.Normal : PaletteState.Disabled; - - // Use renderer to draw the tab background - _mementoBack = context.Renderer.RenderRibbon.DrawRibbonTabContextTitle(_ribbon.RibbonShape, context, ClientRectangle, _ribbon.StateCommon.RibbonGeneral, this, _mementoBack); - - // Use renderer to draw the text content - if (_mementoContentText != null) - { - context.Renderer.RenderStandardContent.DrawContent(context, _textRect, - _contentProvider, _mementoContentText, - VisualOrientation.Top, - state, DrawOnComposition, DrawOnComposition, true); - } + context.Renderer.RenderStandardContent.DrawContent(context, _textRect, + _contentProvider, _mementoContentText, + VisualOrientation.Top, + state, true); } } } @@ -413,98 +415,6 @@ public Color GetRibbonBackColor5(PaletteState state) #endregion #region Implementation - private void RenderOnComposition(RenderContext context) - { - // Convert the clipping rectangle from floating to int version - RectangleF rectClipF = context.Graphics.ClipBounds; - var rectClip = new Rectangle((int)rectClipF.X, (int)rectClipF.Y, (int)rectClipF.Width, - (int)rectClipF.Height); - - // No point drawing unless some of the client fits into the clipping area - if (rectClip.IntersectsWith(ClientRectangle)) - { - // Get the hDC for the graphics instance and create a memory DC - var gDC = context.Graphics.GetHdc(); - var mDC = PI.CreateCompatibleDC(gDC); - - var bmi = new PI.BITMAPINFO(); - bmi.biSize = (uint)Marshal.SizeOf(bmi); - bmi.biWidth = ClientWidth; - bmi.biHeight = -ClientHeight; - bmi.biCompression = 0; - bmi.biBitCount = 32; - bmi.biPlanes = 1; - - // Create a device independant bitmp and select into the memory DC - var hDIB = PI.CreateDIBSection(gDC, ref bmi, 0, out _, IntPtr.Zero, 0); - PI.SelectObject(mDC, hDIB); - - // To call the renderer we need to convert from Win32 HDC to Graphics object - using (Graphics bitmapG = Graphics.FromHdc(mDC)) - { - var renderClientRect = new Rectangle(0, 0, ClientWidth, ClientHeight); - - // Create new render context that uses the bitmap graphics instance - using (var bitmapContext = new RenderContext(context.Control, - bitmapG, renderClientRect, context.Renderer)) - { - // Finally we get the renderer to draw the background for the bitmap - _mementoBack = context.Renderer.RenderRibbon.DrawRibbonTabContextTitle(_ribbon.RibbonShape, bitmapContext, renderClientRect, _ribbon.StateCommon.RibbonGeneral, this, _mementoBack); - } - } - - // Select the font for use when drawing - var hFont = _contentProvider.GetContentShortTextFont(State).ToHfont(); - PI.SelectObject(mDC, hFont); - - // Get renderer for the correct state - var renderer = new VisualStyleRenderer(VisualStyleElement.Window.Caption.Active); - - // Create structures needed for theme drawing call - var textBounds = new PI.RECT - { - left = TEXT_SIDE_GAP_COMPOSITION, - top = 0, - right = ClientWidth - (TEXT_SIDE_GAP_COMPOSITION * 2), - bottom = ClientHeight - }; - var dttOpts = new PI.DTTOPTS - { - dwSize = Marshal.SizeOf(typeof(PI.DTTOPTS)), - dwFlags = PI.DTT_COMPOSITED | PI.DTT_GLOWSIZE | PI.DTT_TEXTCOLOR, - crText = ColorTranslator.ToWin32(SystemColors.ActiveCaptionText), - iGlowSize = _ribbon.Enabled ? 12 : 2 - }; - - // Always draw text centered - const TextFormatFlags TEXT_FORMAT = TextFormatFlags.SingleLine | - TextFormatFlags.HorizontalCenter | - TextFormatFlags.VerticalCenter | - TextFormatFlags.EndEllipsis; - - // Perform actual drawing - PI.DrawThemeTextEx(renderer.Handle, - mDC, 0, 0, - GetShortText(), -1, (int)TEXT_FORMAT, - ref textBounds, ref dttOpts); - - // Copy to foreground - PI.BitBlt(gDC, - ClientLocation.X, ClientLocation.Y, - ClientWidth, ClientHeight, - mDC, 0, 0, 0x00CC0020); - - // Dispose of allocated objects - PI.DeleteObject(hFont); - PI.DeleteObject(hDIB); - PI.DeleteDC(mDC); - - // Must remember to release the hDC - context.Graphics.ReleaseHdc(gDC); - } - } - - private bool DrawOnComposition => _ribbon is { CaptionArea.DrawCaptionOnComposition: true }; private Color CheckForContextColor() => // We need an associated context diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignBase.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignBase.cs index 9045e35e4..8137006e9 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignBase.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -39,15 +39,15 @@ public ViewDrawRibbonDesignBase([DisallowNull] KryptonRibbon ribbon, Debug.Assert(needPaint != null); // Cache incoming values - Ribbon = ribbon; - _needPaint = needPaint; + Ribbon = ribbon!; + _needPaint = needPaint!; // Create and add the draw content for display inside the tab - _contentProvider = new DesignTextToContent(ribbon); + _contentProvider = new DesignTextToContent(ribbon!); Add(new ViewDrawContent(_contentProvider, this, VisualOrientation.Top)); // Use a controller to change state because of mouse movement - var controller = new ViewHightlightController(this, needPaint); + var controller = new ViewHightlightController(this, needPaint!); controller.Click += OnClick; MouseController = controller; } @@ -94,7 +94,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Reduce our size by a padding around the element ClientRectangle = new Rectangle(ClientLocation.X + OuterPadding.Left, @@ -124,7 +124,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) public override void RenderBefore(RenderContext context) { // Ensure the child text view has same state as us - this[0].ElementState = ElementState; + this[0]!.ElementState = ElementState; // Draw background using the design time colors DesignTimeDraw.DrawArea(Ribbon, context, ClientRectangle, State); @@ -183,7 +183,7 @@ public override void RenderBefore(RenderContext context) /// /// Source of the event. /// An EventArgs containing the event data. - protected virtual void OnClick(object sender, EventArgs e) + protected virtual void OnClick(object? sender, EventArgs e) { } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignCluster.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignCluster.cs index e8d2b2fb9..0b1d7b465 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignCluster.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignCluster.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -37,11 +37,10 @@ static ViewDrawRibbonDesignCluster() { TransparentColor = Color.Magenta }; - _imageList.Images.AddRange(new Image[] - { + _imageList.Images.AddRange([ GenericImageResources.KryptonRibbonGroupClusterButton, GenericImageResources.KryptonRibbonGroupClusterColorButton - }); + ]); } /// @@ -56,7 +55,7 @@ public ViewDrawRibbonDesignCluster(KryptonRibbon ribbon, : base(ribbon, needPaint) { Debug.Assert(ribbonCluster != null); - _ribbonCluster = ribbonCluster; + _ribbonCluster = ribbonCluster!; _padding = new Padding((int)(1 * FactorDpiX), (int)(2 * FactorDpiY), 0, (int)(2 * FactorDpiY)); } @@ -97,7 +96,7 @@ public override string ToString() => /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnClick(object sender, EventArgs e) + protected override void OnClick(object? sender, EventArgs e) { // Create the context strip the first time around if (_cms == null) @@ -131,9 +130,9 @@ protected override void OnClick(object sender, EventArgs e) #endregion #region Implementation - private void OnAddButton(object sender, EventArgs e) => _ribbonCluster.OnDesignTimeAddButton(); + private void OnAddButton(object? sender, EventArgs e) => _ribbonCluster.OnDesignTimeAddButton(); - private void OnAddColorButton(object sender, EventArgs e) => _ribbonCluster.OnDesignTimeAddColorButton(); + private void OnAddColorButton(object? sender, EventArgs e) => _ribbonCluster.OnDesignTimeAddColorButton(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroup.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroup.cs index 207f4fade..30a1148c3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroup.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -69,7 +69,7 @@ public override string ToString() => /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnClick(object sender, EventArgs e) => Ribbon.SelectedTab.OnDesignTimeAddGroup(); + protected override void OnClick(object? sender, EventArgs e) => Ribbon.SelectedTab?.OnDesignTimeAddGroup(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupContainer.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupContainer.cs index af5f43633..0aae5eb75 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupContainer.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupContainer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -37,13 +37,12 @@ static ViewDrawRibbonDesignGroupContainer() { TransparentColor = Color.Magenta }; - _imageList.Images.AddRange(new Image[] - { + _imageList.Images.AddRange([ GenericImageResources.KryptonRibbonGroupTriple, GenericImageResources.KryptonRibbonGroupLines, GenericImageResources.KryptonRibbonGroupSeparator, GenericImageResources.KryptonGallery - }); + ]); } /// @@ -58,7 +57,7 @@ public ViewDrawRibbonDesignGroupContainer(KryptonRibbon ribbon, : base(ribbon, needPaint) { Debug.Assert(ribbonGroup != null); - _ribbonGroup = ribbonGroup; + _ribbonGroup = ribbonGroup!; _padding = new Padding((int)(1 * FactorDpiX), 0, 0, 0); } @@ -99,7 +98,7 @@ public override string ToString() => /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnClick(object sender, EventArgs e) + protected override void OnClick(object? sender, EventArgs e) { // Create the context strip the first time around if (_cms == null) @@ -137,13 +136,13 @@ protected override void OnClick(object sender, EventArgs e) #endregion #region Implementation - private void OnAddTriple(object sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddTriple(); + private void OnAddTriple(object? sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddTriple(); - private void OnAddLines(object sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddLines(); + private void OnAddLines(object? sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddLines(); - private void OnAddSeparator(object sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddSeparator(); + private void OnAddSeparator(object? sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddSeparator(); - private void OnAddGallery(object sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddGallery(); + private void OnAddGallery(object? sender, EventArgs e) => _ribbonGroup.OnDesignTimeAddGallery(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupLines.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupLines.cs index 98a3e7581..8ce623c19 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupLines.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupLines.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -15,7 +15,7 @@ namespace Krypton.Ribbon { /// - /// Draws an design time only for adding a new item to a lines container. + /// Draws a design time only for adding a new item to a lines' container. /// internal class ViewDrawRibbonDesignGroupLines : ViewDrawRibbonDesignBase { @@ -37,8 +37,7 @@ static ViewDrawRibbonDesignGroupLines() { TransparentColor = Color.Magenta }; - _imageList.Images.AddRange(new Image[] - { + _imageList.Images.AddRange([ GenericImageResources.KryptonRibbonGroupButton, GenericImageResources.KryptonRibbonGroupColorButton, GenericImageResources.KryptonRibbonGroupCheckBox, @@ -54,7 +53,7 @@ static ViewDrawRibbonDesignGroupLines() GenericImageResources.KryptonRibbonGroupDomainUpDown, GenericImageResources.KryptonRibbonGroupDateTimePicker, GenericImageResources.KryptonRibbonGroupTrackBar - }); + ]); } /// @@ -72,7 +71,7 @@ public ViewDrawRibbonDesignGroupLines(KryptonRibbon ribbon, { Debug.Assert(ribbonLines != null); - _ribbonLines = ribbonLines; + _ribbonLines = ribbonLines!; CurrentSize = currentSize; _padding = new Padding(0, (int)(2 * FactorDpiY), (int)(2 * FactorDpiX), (int)(4 * FactorDpiY)); } @@ -122,7 +121,7 @@ public override string ToString() => /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnClick(object sender, EventArgs e) + protected override void OnClick(object? sender, EventArgs e) { // Create the context strip the first time around if (_cms == null) @@ -148,6 +147,7 @@ protected override void OnClick(object sender, EventArgs e) var menuDomainUpDown = new ToolStripMenuItem("Add DomainUpDown", null, OnAddDomainUpDown); var menuDateTimePicker = new ToolStripMenuItem("Add DateTimePicker", null, OnAddDateTimePicker); var menuTrackBar = new ToolStripMenuItem("Add TrackBar", null, OnAddTrackBar); + var menuThemeComboBox = new ToolStripMenuItem("Add Theme ComboBox", null, OnAddThemeComboBox); // Assign correct images menuButton.ImageIndex = 0; @@ -165,9 +165,10 @@ protected override void OnClick(object sender, EventArgs e) menuDomainUpDown.ImageIndex = 12; menuDateTimePicker.ImageIndex = 13; menuTrackBar.ImageIndex = 13; + menuThemeComboBox.ImageIndex = 14; // Finally, add all items to the strip - _cms.Items.AddRange(new ToolStripItem[] { menuButton, menuColorButton, menuCheckBox, menuCluster, menuComboBox, menuCustomControl, menuDateTimePicker, menuDomainUpDown, menuLabel, menuNumericUpDown, menuRadioButton, menuRichTextBox, menuTextBox, menuTrackBar, menuMaskedTextBox }); + _cms.Items.AddRange(new ToolStripItem[] { menuButton, menuColorButton, menuCheckBox, menuCluster, menuComboBox, menuCustomControl, menuDateTimePicker, menuDomainUpDown, menuLabel, menuNumericUpDown, menuRadioButton, menuRichTextBox, menuTextBox, menuTrackBar, menuMaskedTextBox, menuThemeComboBox }); } if (CommonHelper.ValidContextMenuStrip(_cms)) @@ -182,35 +183,38 @@ protected override void OnClick(object sender, EventArgs e) #endregion #region Implementation - private void OnAddButton(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddButton(); + private void OnAddButton(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddButton(); + + private void OnAddColorButton(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddColorButton(); + + private void OnAddCheckBox(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddCheckBox(); - private void OnAddColorButton(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddColorButton(); + private void OnAddRadioButton(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddRadioButton(); - private void OnAddCheckBox(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddCheckBox(); + private void OnAddCluster(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddCluster(); - private void OnAddRadioButton(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddRadioButton(); + private void OnAddLabel(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddLabel(); - private void OnAddCluster(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddCluster(); + private void OnAddCustomControl(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddCustomControl(); - private void OnAddLabel(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddLabel(); + private void OnAddTextBox(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddTextBox(); - private void OnAddCustomControl(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddCustomControl(); + private void OnAddMaskedTextBox(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddMaskedTextBox(); - private void OnAddTextBox(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddTextBox(); + private void OnAddRichTextBox(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddRichTextBox(); - private void OnAddMaskedTextBox(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddMaskedTextBox(); + private void OnAddComboBox(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddComboBox(); - private void OnAddRichTextBox(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddRichTextBox(); + private void OnAddNumericUpDown(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddNumericUpDown(); - private void OnAddComboBox(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddComboBox(); + private void OnAddDomainUpDown(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddDomainUpDown(); - private void OnAddNumericUpDown(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddNumericUpDown(); + private void OnAddDateTimePicker(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddDateTimePicker(); - private void OnAddDomainUpDown(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddDomainUpDown(); + private void OnAddTrackBar(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddTrackBar(); - private void OnAddDateTimePicker(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddDateTimePicker(); + private void OnAddThemeComboBox(object? sender, EventArgs e) => _ribbonLines.OnDesignTimeAddThemeComboBox(); - private void OnAddTrackBar(object sender, EventArgs e) => _ribbonLines.OnDesignTimeAddTrackBar(); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupTriple.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupTriple.cs index 7d3a597f7..fbccd7e96 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupTriple.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignGroupTriple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -29,7 +29,7 @@ internal class ViewDrawRibbonDesignGroupTriple : ViewDrawRibbonDesignBase private readonly Padding _preferredPaddingL; // = new(1, 3, 1, 3); private readonly Padding _layoutPaddingL; // = new(1); private readonly Padding _outerPaddingL; // = new(0, 2, 0, 2); - private readonly Padding _paddingMS; // = new(0, 2, 0, 2); + private readonly Padding _paddingMs; // = new(0, 2, 0, 2); #endregion #region Identity @@ -40,8 +40,7 @@ static ViewDrawRibbonDesignGroupTriple() { TransparentColor = Color.Magenta }; - _imageList.Images.AddRange(new Image[] - { + _imageList.Images.AddRange([ GenericImageResources.KryptonRibbonGroupButton, GenericImageResources.KryptonRibbonGroupColorButton, GenericImageResources.KryptonRibbonGroupCheckBox, @@ -56,7 +55,7 @@ static ViewDrawRibbonDesignGroupTriple() GenericImageResources.KryptonRibbonGroupDomainUpDown, GenericImageResources.KryptonRibbonGroupDateTimePicker, GenericImageResources.KryptonRibbonGroupTrackBar - }); + ]); } /// @@ -74,12 +73,12 @@ public ViewDrawRibbonDesignGroupTriple(KryptonRibbon ribbon, { Debug.Assert(ribbonTriple != null); - _ribbonTriple = ribbonTriple; + _ribbonTriple = ribbonTriple!; CurrentSize = currentSize; _preferredPaddingL = new Padding((int)(1 * FactorDpiX), (int)(3 * FactorDpiY), (int)(1 * FactorDpiX), (int)(3 * FactorDpiY)); _layoutPaddingL = new Padding((int)(1 * FactorDpiX), (int)(1 * FactorDpiY), (int)(1 * FactorDpiX), (int)(1 * FactorDpiY)); _outerPaddingL = new Padding(0, (int)(2 * FactorDpiY), 0, (int)(2 * FactorDpiY)); - _paddingMS = new Padding(0, (int)(2 * FactorDpiY), 0, (int)(2 * FactorDpiY)); + _paddingMs = new Padding(0, (int)(2 * FactorDpiY), 0, (int)(2 * FactorDpiY)); } /// @@ -110,7 +109,7 @@ public override string ToString() => /// /// Gets the padding to use when calculating the preferred size. /// - protected override Padding PreferredPadding => CurrentSize == GroupItemSize.Large ? _preferredPaddingL : _paddingMS; + protected override Padding PreferredPadding => CurrentSize == GroupItemSize.Large ? _preferredPaddingL : _paddingMs; /// /// Gets the padding to use when laying out the view. @@ -120,14 +119,14 @@ public override string ToString() => /// /// Gets the padding to shrink the client area by when laying out. /// - protected override Padding OuterPadding => CurrentSize == GroupItemSize.Large ? _outerPaddingL : _paddingMS; + protected override Padding OuterPadding => CurrentSize == GroupItemSize.Large ? _outerPaddingL : _paddingMs; /// /// Raises the Click event. /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnClick(object sender, EventArgs e) + protected override void OnClick(object? sender, EventArgs e) { // Create the context strip the first time around if (_cms == null) @@ -187,35 +186,35 @@ protected override void OnClick(object sender, EventArgs e) #endregion #region Implementation - private void OnAddButton(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddButton(); + private void OnAddButton(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddButton(); - private void OnAddColorButton(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddColorButton(); + private void OnAddColorButton(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddColorButton(); - private void OnAddCheckBox(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddCheckBox(); + private void OnAddCheckBox(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddCheckBox(); - private void OnAddRadioButton(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddRadioButton(); + private void OnAddRadioButton(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddRadioButton(); - private void OnAddLabel(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddLabel(); + private void OnAddLabel(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddLabel(); - private void OnAddCustomControl(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddCustomControl(); + private void OnAddCustomControl(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddCustomControl(); - private void OnAddTextBox(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddTextBox(); + private void OnAddTextBox(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddTextBox(); - private void OnAddMaskedTextBox(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddMaskedTextBox(); + private void OnAddMaskedTextBox(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddMaskedTextBox(); - private void OnAddRichTextBox(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddRichTextBox(); + private void OnAddRichTextBox(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddRichTextBox(); - private void OnAddComboBox(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddComboBox(); + private void OnAddComboBox(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddComboBox(); - private void OnAddNumericUpDown(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddNumericUpDown(); + private void OnAddNumericUpDown(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddNumericUpDown(); - private void OnAddDomainUpDown(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddDomainUpDown(); + private void OnAddDomainUpDown(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddDomainUpDown(); - private void OnAddDateTimePicker(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddDateTimePicker(); + private void OnAddDateTimePicker(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddDateTimePicker(); - private void OnAddTrackBar(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddTrackBar(); + private void OnAddTrackBar(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddTrackBar(); - private void OnAddThemeComboBox(object sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddThemeComboBox(); + private void OnAddThemeComboBox(object? sender, EventArgs e) => _ribbonTriple.OnDesignTimeAddThemeComboBox(); #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignTab.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignTab.cs index 9c00284b4..340f733f1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDesignTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -69,7 +69,7 @@ public override string ToString() => /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnClick(object sender, EventArgs e) => + protected override void OnClick(object? sender, EventArgs e) => // Ask the ribbon to add a new tab at design time Ribbon.OnDesignTimeAddTab(); #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDropArrow.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDropArrow.cs index abb1ff580..2913c2959 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDropArrow.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonDropArrow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -32,7 +32,7 @@ internal class ViewDrawRibbonDropArrow : ViewLeaf public ViewDrawRibbonDropArrow([DisallowNull] KryptonRibbon ribbon) { Debug.Assert(ribbon != null); - _ribbon = ribbon; + _ribbon = ribbon!; _arrowSize = new Size((int)(5 * FactorDpiX), (int)(4 * FactorDpiY)); } @@ -62,7 +62,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion @@ -71,13 +71,21 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) => + public override void RenderBefore([DisallowNull] RenderContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + // Use renderer to draw the drop arrow in the provided space context.Renderer.RenderGlyph.DrawRibbonDropArrow(_ribbon.RibbonShape, context, ClientRectangle, _ribbon.StateCommon.RibbonGeneral, State); + } #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppTab.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonFileAppTab.cs similarity index 71% rename from Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppTab.cs rename to Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonFileAppTab.cs index cc0aaf212..e5447c79b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonAppTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonFileAppTab.cs @@ -1,30 +1,26 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion namespace Krypton.Ribbon { /// - /// Draws half of an application tab. + /// Draws the "File Application tab" /// - internal class ViewDrawRibbonAppTab : ViewComposite, + internal class ViewDrawRibbonFileAppTab : ViewComposite, IContentValues { #region Instance Fields private readonly KryptonRibbon _ribbon; private IDisposable?[] _mementos; private readonly PaletteRibbonGeneral _paletteGeneral; - private readonly ApplicationTabToContent _contentProvider; + private readonly FileApplicationTabToContent _contentProvider; private readonly Padding _preferredBorder; // = new(17, 4, 17, 3); #endregion @@ -33,7 +29,7 @@ internal class ViewDrawRibbonAppTab : ViewComposite, /// Initialize a new instance of the ViewDrawRibbonAppTab class. /// /// Owning control instance. - public ViewDrawRibbonAppTab([DisallowNull] KryptonRibbon ribbon) + public ViewDrawRibbonFileAppTab([DisallowNull] KryptonRibbon ribbon) { Debug.Assert(ribbon != null); @@ -43,7 +39,7 @@ public ViewDrawRibbonAppTab([DisallowNull] KryptonRibbon ribbon) // Use a class to convert from application tab to content interface _paletteGeneral = _ribbon.StateCommon.RibbonGeneral; - _contentProvider = new ApplicationTabToContent(_ribbon, _paletteGeneral); + _contentProvider = new FileApplicationTabToContent(_ribbon, _paletteGeneral); // Create and add the draw content for display inside the tab Add(new ViewDrawContent(_contentProvider, this, VisualOrientation.Top)); @@ -120,19 +116,46 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore([DisallowNull] RenderContext context) { - var memento = State switch + if (context.Renderer is null) { - PaletteState.Tracking => 1, - PaletteState.Tracking | PaletteState.FocusOverride => 2, - PaletteState.Pressed => 3, - _ => 0 - }; + throw new ArgumentNullException(nameof(context.Renderer)); + } + + IPaletteRibbonFileAppTab palette; + int memento; + var localState = State; + // Find the correct palette to use that matches the button state + switch (State) + { + default: + case PaletteState.Normal: + if (_ribbon.Enabled) + { + palette = _ribbon.StateNormal.RibbonFileAppTab; + memento = 0; + } + else + { + localState = PaletteState.Disabled; + palette = _ribbon.StateNormal.RibbonFileAppTab; + memento = 3; + } + break; + case PaletteState.Tracking: + palette = _ribbon.StateNormal.RibbonFileAppTab; + memento = 1; + break; + case PaletteState.Pressed: + palette = _ribbon.StateNormal.RibbonFileAppTab; + memento = 2; + break; + } // Draw the background - _mementos[memento] = context.Renderer.RenderRibbon.DrawRibbonApplicationTab(_ribbon.RibbonShape, context, ClientRectangle, State, - _ribbon.RibbonAppButton.AppButtonBaseColorDark, - _ribbon.RibbonAppButton.AppButtonBaseColorLight, - _mementos[memento]!); + _mementos[memento] = context.Renderer.RenderRibbon.DrawRibbonFileApplicationTab(_ribbon.RibbonShape, context, ClientRectangle, + localState, + palette, + _mementos[memento]); } #endregion @@ -156,8 +179,8 @@ public override void RenderBefore([DisallowNull] RenderContext context) ///
/// Title string. public string GetShortText() => _ribbon.RibbonShape == PaletteRibbonShape.Office2013 - ? _ribbon.RibbonAppButton.AppButtonText.ToUpper() - : _ribbon.RibbonAppButton.AppButtonText; + ? _ribbon.RibbonFileAppTab.FileAppTabText.ToUpper() + : _ribbon.RibbonFileAppTab.FileAppTabText; /// /// Gets the long text used as the secondary ribbon title. diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryButton.cs index ac7c56ca2..43175457f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,7 +20,7 @@ namespace Krypton.Ribbon internal class ViewDrawRibbonGalleryButton : ViewLeaf, IContentValues { #region Instance Fields - private readonly PaletteBase? _palette; + private readonly PaletteBase _palette; private readonly GalleryImages _images; private readonly GalleryButtonController _controller; private readonly PaletteRibbonGalleryButton _button; @@ -29,7 +29,7 @@ internal class ViewDrawRibbonGalleryButton : ViewLeaf, IContentValues private readonly PaletteContentToPalette _paletteContent; private readonly PaletteRelativeAlign _alignment; private IDisposable? _mementoBack; - private IDisposable _mementoContent; + private IDisposable? _mementoContent; private readonly NeedPaintHandler _needPaint; #endregion @@ -49,7 +49,7 @@ internal class ViewDrawRibbonGalleryButton : ViewLeaf, IContentValues /// Button content to display. /// Button images. /// Paint event delegate. - public ViewDrawRibbonGalleryButton(PaletteBase? palette, + public ViewDrawRibbonGalleryButton(PaletteBase palette, PaletteRelativeAlign alignment, PaletteRibbonGalleryButton button, GalleryImages images, @@ -106,11 +106,18 @@ protected override void Dispose(bool disposing) /// Discover the preferred size of the element. /// /// Layout context. - public override Size GetPreferredSize(ViewLayoutContext context) => + public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Grab the required size for the content images - context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _paletteContent, + return context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _paletteContent, this, VisualOrientation.Top, - State, false, false); + State); + } /// /// Perform a layout of the elements. @@ -118,13 +125,24 @@ public override Size GetPreferredSize(ViewLayoutContext context) => /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Dispose of any current memento - if (_mementoContent != null) + if (_mementoContent is not null) { _mementoContent.Dispose(); _mementoContent = null; @@ -134,7 +152,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _mementoContent = context.Renderer.RenderStandardContent.LayoutContent(context, ClientRectangle, _paletteContent, this, VisualOrientation.Top, - State, false, false); + State); } #endregion @@ -143,8 +161,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Reduce background to fit inside the border Rectangle backRect = ClientRectangle; backRect.Inflate(-1, -1); @@ -172,8 +195,8 @@ public override void RenderBefore(RenderContext context) if (_paletteContent.GetContentDraw(State) == InheritBool.True) { context.Renderer.RenderStandardContent.DrawContent(context, ClientRectangle, _paletteContent, - _mementoContent, VisualOrientation.Top, - State, false, false, false); + _mementoContent!, VisualOrientation.Top, + State, false); } // Are we allowed to draw border? @@ -302,7 +325,7 @@ private GraphicsPath CreateBorderPath(Rectangle rect) #endregion #region Private - private void OnButtonClick(object sender, MouseEventArgs e) => Click?.Invoke(this, e); + private void OnButtonClick(object? sender, MouseEventArgs e) => Click?.Invoke(this, e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryItem.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryItem.cs index 73de4c304..1c2a4239f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryItem.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGalleryItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -23,8 +23,8 @@ internal class ViewDrawRibbonGalleryItem : ViewDrawButton, #region Instance Fields private readonly KryptonGallery _gallery; private readonly GalleryItemController _controller; - private ImageList _imageList; - private Image _image; + private ImageList? _imageList; + private Image? _image; private int _imageIndex; #endregion @@ -119,7 +119,7 @@ public ImageList? ImageList { if (_imageList != value) { - if (_image != null) + if (_image is not null) { _image.Dispose(); _image = null; @@ -158,9 +158,14 @@ public int ImageIndex /// Perform a render of the elements. ///
/// Rendering context. - public override void Render([DisallowNull] RenderContext context) + public override void Render([DisallowNull] RenderContext? context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if ( context is null) + { + throw new ArgumentNullException(nameof(context)); + } // If this item is being tracked, then show as tracking PaletteState tempState = ElementState; @@ -220,7 +225,7 @@ public override void Render([DisallowNull] RenderContext context) #endregion #region Private - private void OnItemClick(object sender, MouseEventArgs e) => _gallery.SelectedIndex = _imageIndex; + private void OnItemClick(object? sender, MouseEventArgs e) => _gallery.SelectedIndex = _imageIndex; #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroup.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroup.cs index 73e96c499..159be39d4 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroup.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,22 +21,22 @@ internal class ViewDrawRibbonGroup : ViewComposite, IRibbonViewGroupSize { #region Instance Fields - private readonly int MINIMUM_GROUP_WIDTH; // = 32; - private readonly int NORMAL_BORDER_TOPLEFT2007; // = 2; - private readonly int NORMAL_BORDER_RIGHT2007; // = 4; - private readonly int NORMAL_BORDER_TOP2010; // = 3; - private readonly int NORMAL_BORDER_LEFT2010; // = 3; - private readonly int NORMAL_BORDER_RIGHT2010; // = 6; - private readonly int TOTAL_LEFT_RIGHT_BORDERS_2007; // = 7; - private readonly int TOTAL_LEFT_RIGHT_BORDERS_2010; // = 10; - private readonly int VERT_OFFSET_2007; // = 0; - private readonly int VERT_OFFSET_2010; // = 2; - private readonly Padding COLLAPSED_PADDING; // = new(2); - private readonly Padding COLLAPSED_IMAGE_PADDING_2007; // = new(3, 3, 3, 4); - private readonly Padding COLLAPSED_IMAGE_PADDING_2010; // = new(3, 1, 5, 5); + private readonly int _minimumGroupWidth; // = 32; + private readonly int _normalBorderTopleft2007; // = 2; + private readonly int _normalBorderRight2007; // = 4; + private readonly int _normalBorderTop2010; // = 3; + private readonly int _normalBorderLeft2010; // = 3; + private readonly int _normalBorderRight2010; // = 6; + private readonly int _totalLeftRightBorders2007; // = 7; + private readonly int _totalLeftRightBorders2010; // = 10; + private readonly int _vertOffset2007; // = 0; + private readonly int _vertOffset2010; // = 2; + private readonly Padding _collapsedPadding; // = new(2); + private readonly Padding _collapsedImagePadding2007; // = new(3, 3, 3, 4); + private readonly Padding _collapsedImagePadding2010; // = new(3, 1, 5, 5); private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroup _ribbonGroup; - private VisualPopupGroup _popupGroup; + private VisualPopupGroup? _popupGroup; private ViewLayoutDocker _layoutCollapsedMain; private ViewDrawRibbonGroupText _viewCollapsedText1; private ViewDrawRibbonGroupText _viewCollapsedText2; @@ -54,9 +54,9 @@ internal class ViewDrawRibbonGroup : ViewComposite, private PaletteRibbonContextBack _paletteContextBorder; private PaletteRibbonShape _lastRibbonShape; private readonly NeedPaintHandler _needPaint; - private IDisposable _mementoRibbonBackArea; - private IDisposable _mementoRibbonBackBorder; - private IDisposable _mementoRibbonBack2; + private IDisposable? _mementoRibbonBackArea; + private IDisposable? _mementoRibbonBackBorder; + private IDisposable? _mementoRibbonBack2; private IDisposable? _mementoStandardBack; private Control _container; private bool _collapsed; @@ -74,14 +74,14 @@ public ViewDrawRibbonGroup([DisallowNull] KryptonRibbon ribbon, [DisallowNull] KryptonRibbonGroup ribbonGroup, [DisallowNull] NeedPaintHandler needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonGroup != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonGroup is not null); + Debug.Assert(needPaint is not null); // Cache source of state specific settings - _ribbon = ribbon; - _ribbonGroup = ribbonGroup; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonGroup = ribbonGroup ?? throw new ArgumentNullException(nameof(ribbonGroup)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Associate this view with the source component (required for design time selection) Component = _ribbonGroup; @@ -97,19 +97,19 @@ public ViewDrawRibbonGroup([DisallowNull] KryptonRibbon ribbon, // Hook into changes in the ribbon button definition _ribbonGroup.PropertyChanged += OnGroupPropertyChanged; - MINIMUM_GROUP_WIDTH = (int)(32 * FactorDpiX); - NORMAL_BORDER_TOPLEFT2007 = (int)(2 * FactorDpiY); - NORMAL_BORDER_RIGHT2007 = (int)(4 * FactorDpiX); - NORMAL_BORDER_TOP2010 = (int)(3 * FactorDpiY); - NORMAL_BORDER_LEFT2010 = (int)(3 * FactorDpiX); - NORMAL_BORDER_RIGHT2010 = (int)(6 * FactorDpiX); - TOTAL_LEFT_RIGHT_BORDERS_2007 = (int)(7 * FactorDpiX); - TOTAL_LEFT_RIGHT_BORDERS_2010 = (int)(10 * FactorDpiX); - VERT_OFFSET_2007 = (int)(0 * FactorDpiY); - VERT_OFFSET_2010 = (int)(2 * FactorDpiY); - COLLAPSED_PADDING = new Padding((int)(2 * FactorDpiX), (int)(2 * FactorDpiY), (int)(2 * FactorDpiX), (int)(2 * FactorDpiY)); - COLLAPSED_IMAGE_PADDING_2007 = new Padding((int)(3 * FactorDpiX), (int)(3 * FactorDpiY), (int)(3 * FactorDpiX), (int)(4 * FactorDpiY)); - COLLAPSED_IMAGE_PADDING_2010 = new Padding((int)(3 * FactorDpiX), (int)(1 * FactorDpiY), (int)(5 * FactorDpiX), (int)(5 * FactorDpiY)); + _minimumGroupWidth = (int)(32 * FactorDpiX); + _normalBorderTopleft2007 = (int)(2 * FactorDpiY); + _normalBorderRight2007 = (int)(4 * FactorDpiX); + _normalBorderTop2010 = (int)(3 * FactorDpiY); + _normalBorderLeft2010 = (int)(3 * FactorDpiX); + _normalBorderRight2010 = (int)(6 * FactorDpiX); + _totalLeftRightBorders2007 = (int)(7 * FactorDpiX); + _totalLeftRightBorders2010 = (int)(10 * FactorDpiX); + _vertOffset2007 = (int)(0 * FactorDpiY); + _vertOffset2010 = (int)(2 * FactorDpiY); + _collapsedPadding = new Padding((int)(2 * FactorDpiX), (int)(2 * FactorDpiY), (int)(2 * FactorDpiX), (int)(2 * FactorDpiY)); + _collapsedImagePadding2007 = new Padding((int)(3 * FactorDpiX), (int)(3 * FactorDpiY), (int)(3 * FactorDpiX), (int)(4 * FactorDpiY)); + _collapsedImagePadding2010 = new Padding((int)(3 * FactorDpiX), (int)(1 * FactorDpiY), (int)(5 * FactorDpiX), (int)(5 * FactorDpiY)); } /// @@ -221,9 +221,9 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) /// Gets the first focus item from the group. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { - ViewBase? view = Collapsed ? _layoutCollapsedMain : _layoutNormalContent.GetFirstFocusItem(); + ViewBase view = Collapsed ? _layoutCollapsedMain : _layoutNormalContent.GetFirstFocusItem(); return view; } @@ -234,9 +234,9 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) /// Gets the last focus item from the group. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { - ViewBase? view = Collapsed ? _layoutCollapsedMain : _layoutNormalContent.GetLastFocusItem(); + ViewBase view = Collapsed ? _layoutCollapsedMain : _layoutNormalContent.GetLastFocusItem(); return view; } @@ -249,10 +249,15 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase? GetNextFocusItem(ViewBase? current, ref bool matched) { ViewBase? view = null; + if (current is null) + { + throw new ArgumentNullException(nameof(current)); + } + if (Collapsed) { if (matched) @@ -284,6 +289,11 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) { ViewBase? view = null; + if (current is null) + { + throw new ArgumentNullException(nameof(current)); + } + if (Collapsed) { if (matched) @@ -442,7 +452,7 @@ public GroupSizeWidth[] GetPossibleSizes(ViewLayoutContext context) if (_ribbonGroup.AllowCollapsed && !_ribbon.InDesignHelperMode) { // We never allow a collapsed state if that is bigger than the smallest valid permutation - if (smallestWidth > MINIMUM_GROUP_WIDTH) + if (smallestWidth > _minimumGroupWidth) { // Find the size of the group when collapsed var collapsed = Collapsed; @@ -465,7 +475,7 @@ public GroupSizeWidth[] GetPossibleSizes(ViewLayoutContext context) /// Update the group with the provided sizing solution. ///
/// Solution size. - public void SetSolutionSize(ItemSizeWidth[] size) + public void SetSolutionSize(ItemSizeWidth[]? size) { // Should we become collapsed? Collapsed = size == null; @@ -482,7 +492,7 @@ public void SetSolutionSize(ItemSizeWidth[] size) public override Size GetPreferredSize(ViewLayoutContext context) { Size preferredSize = base.GetPreferredSize(context); - preferredSize.Width = Math.Max(preferredSize.Width, MINIMUM_GROUP_WIDTH); + preferredSize.Width = Math.Max(preferredSize.Width, _minimumGroupWidth); preferredSize.Height = _ribbon.CalculatedValues.GroupHeight; return preferredSize; } @@ -493,10 +503,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Update the title element with the height of the group title area _viewNormalTitle.Height = _ribbon.CalculatedValues.GroupTitleHeight; @@ -520,7 +530,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) public override void RenderBefore(RenderContext context) { // Cache the control that we are showing inside - _container = context.Control; + _container = context.Control!; if (Collapsed) { @@ -577,21 +587,21 @@ private void UpdateShapeValues() { default: case PaletteRibbonShape.Office2007: - _totalBorders = TOTAL_LEFT_RIGHT_BORDERS_2007; - _layoutNormalMain.VertOffset = VERT_OFFSET_2007; - _layoutNormalSepTop.SeparatorSize = new Size(NORMAL_BORDER_TOPLEFT2007, NORMAL_BORDER_TOPLEFT2007); - _layoutNormalSepLeft.SeparatorSize = new Size(NORMAL_BORDER_TOPLEFT2007, NORMAL_BORDER_TOPLEFT2007); - _layoutNormalSepRight.SeparatorSize = new Size(NORMAL_BORDER_RIGHT2007, NORMAL_BORDER_RIGHT2007); - _layoutCollapsedImagePadding.PreferredPadding = COLLAPSED_IMAGE_PADDING_2007; + _totalBorders = _totalLeftRightBorders2007; + _layoutNormalMain.VertOffset = _vertOffset2007; + _layoutNormalSepTop.SeparatorSize = new Size(_normalBorderTopleft2007, _normalBorderTopleft2007); + _layoutNormalSepLeft.SeparatorSize = new Size(_normalBorderTopleft2007, _normalBorderTopleft2007); + _layoutNormalSepRight.SeparatorSize = new Size(_normalBorderRight2007, _normalBorderRight2007); + _layoutCollapsedImagePadding.PreferredPadding = _collapsedImagePadding2007; _lastRibbonShape = PaletteRibbonShape.Office2007; break; case PaletteRibbonShape.Office2010: - _totalBorders = TOTAL_LEFT_RIGHT_BORDERS_2010; - _layoutNormalMain.VertOffset = VERT_OFFSET_2010; - _layoutNormalSepTop.SeparatorSize = new Size(NORMAL_BORDER_TOP2010, NORMAL_BORDER_TOP2010); - _layoutNormalSepLeft.SeparatorSize = new Size(NORMAL_BORDER_LEFT2010, NORMAL_BORDER_LEFT2010); - _layoutNormalSepRight.SeparatorSize = new Size(NORMAL_BORDER_RIGHT2010, NORMAL_BORDER_RIGHT2010); - _layoutCollapsedImagePadding.PreferredPadding = COLLAPSED_IMAGE_PADDING_2010; + _totalBorders = _totalLeftRightBorders2010; + _layoutNormalMain.VertOffset = _vertOffset2010; + _layoutNormalSepTop.SeparatorSize = new Size(_normalBorderTop2010, _normalBorderTop2010); + _layoutNormalSepLeft.SeparatorSize = new Size(_normalBorderLeft2010, _normalBorderLeft2010); + _layoutNormalSepRight.SeparatorSize = new Size(_normalBorderRight2010, _normalBorderRight2010); + _layoutCollapsedImagePadding.PreferredPadding = _collapsedImagePadding2010; _lastRibbonShape = PaletteRibbonShape.Office2010; break; } @@ -615,9 +625,9 @@ private void CreateNormalView() // Create layout elements _layoutNormalTitle = new ViewLayoutDocker(); _layoutNormalContent = new ViewLayoutRibbonGroupContent(_ribbon, _ribbonGroup, _needPaint); - _layoutNormalSepTop = new ViewLayoutRibbonSeparator(NORMAL_BORDER_TOPLEFT2007, true); - _layoutNormalSepLeft = new ViewLayoutRibbonSeparator(NORMAL_BORDER_TOPLEFT2007, true); - _layoutNormalSepRight = new ViewLayoutRibbonSeparator(NORMAL_BORDER_RIGHT2007, true); + _layoutNormalSepTop = new ViewLayoutRibbonSeparator(_normalBorderTopleft2007, true); + _layoutNormalSepLeft = new ViewLayoutRibbonSeparator(_normalBorderTopleft2007, true); + _layoutNormalSepRight = new ViewLayoutRibbonSeparator(_normalBorderRight2007, true); // Add layout elements to correct areas of the normal group _layoutNormalMain.Add(_layoutNormalTitle, ViewDockStyle.Bottom); @@ -641,7 +651,7 @@ private void CreateNormalView() // All values are equal to a default of Office 2007 shape _lastRibbonShape = PaletteRibbonShape.Office2007; - _totalBorders = TOTAL_LEFT_RIGHT_BORDERS_2007; + _totalBorders = _totalLeftRightBorders2007; } private void CreateCollapsedView() @@ -657,7 +667,7 @@ private void CreateCollapsedView() _layoutCollapsedMain.KeyController = _collapsedController; // Reduce layout area to remove the group border - var layoutCollapsedInsidePadding = new ViewLayoutRibbonPadding(COLLAPSED_PADDING); + var layoutCollapsedInsidePadding = new ViewLayoutRibbonPadding(_collapsedPadding); _layoutCollapsedMain.Add(layoutCollapsedInsidePadding, ViewDockStyle.Fill); // Position at top an area that is padded for containing the image @@ -678,7 +688,7 @@ private void CreateCollapsedView() layoutCollapsedInside.Add(_viewCollapsedText1, ViewDockStyle.Top); // Add group image frame - _layoutCollapsedImagePadding = new ViewLayoutRibbonCenterPadding(COLLAPSED_IMAGE_PADDING_2007); + _layoutCollapsedImagePadding = new ViewLayoutRibbonCenterPadding(_collapsedImagePadding2007); layoutCollapsedInside.Add(_layoutCollapsedImagePadding, ViewDockStyle.Top); // Finally we add the actual drawing element for the collapsed group image @@ -686,8 +696,13 @@ private void CreateCollapsedView() _layoutCollapsedImagePadding.Add(drawCollapsedImage); } - private void RenderNormalBefore(RenderContext context) + private void RenderNormalBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; IPaletteRibbonBack paletteBackArea; @@ -743,13 +758,13 @@ private void RenderNormalBefore(RenderContext context) { _paletteContextBackArea.SetInherit(paletteBackArea); _mementoRibbonBackArea = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, - drawRect, elementState, _paletteContextBackArea, VisualOrientation.Top, false, + drawRect, elementState, _paletteContextBackArea, VisualOrientation.Top, _mementoRibbonBackArea); } // Draw the group border _paletteContextBorder.SetInherit(paletteBorder); - _mementoRibbonBackBorder = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, elementState, _paletteContextBorder, VisualOrientation.Top, false, _mementoRibbonBackBorder); + _mementoRibbonBackBorder = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, elementState, _paletteContextBorder, VisualOrientation.Top, _mementoRibbonBackBorder); // Reduce the drawing rectangle to just the title area Rectangle titleRect = drawRect; @@ -767,17 +782,22 @@ private void RenderNormalBefore(RenderContext context) } // Draw the group title - _mementoRibbonBack2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, titleRect, State, paletteTitle, VisualOrientation.Top, false, _mementoRibbonBack2); + _mementoRibbonBack2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, titleRect, State, paletteTitle, VisualOrientation.Top, _mementoRibbonBack2); } - private void RenderCollapsedBefore(RenderContext context) + private void RenderCollapsedBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; IPaletteRibbonBack paletteBack; IPaletteRibbonBack paletteBorder; - if (_collapsedController.HasFocus) + if (_collapsedController!.HasFocus) { ElementState = PaletteState.Tracking; } @@ -818,44 +838,50 @@ private void RenderCollapsedBefore(RenderContext context) // Draw the group border _paletteContextBorder.SetInherit(paletteBorder); - _mementoRibbonBackBorder = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, State, _paletteContextBorder, VisualOrientation.Top, false, _mementoRibbonBackBorder); + _mementoRibbonBackBorder = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, State, _paletteContextBorder, VisualOrientation.Top, _mementoRibbonBackBorder); //_mementoRibbonBackArea = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, State, _paletteContextBorder, VisualOrientation.Top, false, _mementoRibbonBackArea); Rectangle backRect = drawRect; backRect.Inflate(-2, -2); // Draw the inside background - _mementoRibbonBack2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, backRect, State, paletteBack, VisualOrientation.Top, false, _mementoRibbonBack2); + _mementoRibbonBack2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, backRect, State, paletteBack, VisualOrientation.Top, _mementoRibbonBack2); } - private void RenderCollapsedPressedBefore(RenderContext context) + private void RenderCollapsedPressedBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + switch (_lastRibbonShape) { default: case PaletteRibbonShape.Office2007: { - IPaletteBack paletteBack = _ribbon.StateCommon.RibbonGroupCollapsedButton.PaletteBack; - IPaletteBorder paletteBorder = _ribbon.StateCommon.RibbonGroupCollapsedButton.PaletteBorder; + IPaletteBack? paletteBack = _ribbon.StateCommon.RibbonGroupCollapsedButton.PaletteBack; + IPaletteBorder? paletteBorder = _ribbon.StateCommon.RibbonGroupCollapsedButton.PaletteBorder; // Do we need to draw the background? if (paletteBack.GetBackDraw(PaletteState.Pressed) == InheritBool.True) { // Get the border path which the background is clipped to drawing within - using GraphicsPath borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, paletteBorder, VisualOrientation.Top, PaletteState.Pressed); - Padding borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(paletteBorder, PaletteState.Pressed, VisualOrientation.Top); + using GraphicsPath borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, paletteBorder!, VisualOrientation.Top, PaletteState.Pressed); + Padding borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(paletteBorder!, PaletteState.Pressed, VisualOrientation.Top); // Apply the padding depending on the orientation Rectangle enclosingRect = CommonHelper.ApplyPadding(VisualOrientation.Top, ClientRectangle, borderPadding); // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, paletteBorder!.GetBorderGraphicsHint(PaletteState.Normal)); _mementoStandardBack = context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, paletteBack, VisualOrientation.Top, PaletteState.Pressed, _mementoStandardBack); } // Do we need to draw the border? - if (paletteBorder.GetBorderDraw(PaletteState.Pressed) == InheritBool.True) + if (paletteBorder!.GetBorderDraw(PaletteState.Pressed) == InheritBool.True) { context.Renderer.RenderStandardBorder.DrawBorder(context, ClientRectangle, paletteBorder, VisualOrientation.Top, PaletteState.Pressed); @@ -879,13 +905,13 @@ private void RenderCollapsedPressedBefore(RenderContext context) // Draw the group border _paletteContextBorder.SetInherit(paletteBorder); - _mementoRibbonBackBorder = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, state, _paletteContextBorder, VisualOrientation.Top, false, _mementoRibbonBackBorder); + _mementoRibbonBackBorder = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, state, _paletteContextBorder, VisualOrientation.Top, _mementoRibbonBackBorder); Rectangle backRect = drawRect; backRect.Inflate(-2, -2); // Draw the inside background - _mementoRibbonBack2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, backRect, state, paletteBack, VisualOrientation.Top, false, _mementoRibbonBack2); + _mementoRibbonBack2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, backRect, state, paletteBack, VisualOrientation.Top, _mementoRibbonBack2); } break; } @@ -918,7 +944,7 @@ private void DisposeMementos() } } - private void OnCollapsedClick(object sender, MouseEventArgs e) + private void OnCollapsedClick(object? sender, MouseEventArgs e) { // We do not operate the collapsed button at design time if (!_ribbon.InDesignMode) @@ -938,7 +964,7 @@ private void OnCollapsedClick(object sender, MouseEventArgs e) } } - private void OnVisualPopupGroupDisposed(object sender, EventArgs e) + private void OnVisualPopupGroupDisposed(object? sender, EventArgs e) { // Not pressed any more _popupGroup = null; @@ -947,7 +973,7 @@ private void OnVisualPopupGroupDisposed(object sender, EventArgs e) _container.Refresh(); } - private void OnGroupPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnGroupPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; @@ -1003,7 +1029,7 @@ private void OnGroupPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnContextClick(object sender, MouseEventArgs e) => _ribbonGroup.OnDesignTimeContextMenu(new MouseEventArgs(MouseButtons.Right, 1, e.X, e.Y, 0)); + private void OnContextClick(object? sender, MouseEventArgs e) => _ribbonGroup.OnDesignTimeContextMenu(new MouseEventArgs(MouseButtons.Right, 1, e.X, e.Y, 0)); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButton.cs index 2ba80ea71..d7aae87d7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -51,18 +51,18 @@ internal class ViewDrawRibbonGroupButton : ViewComposite, /// Reference to owning ribbon control. /// Reference to source button definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupButton([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupButton ribbonButton, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupButton([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupButton? ribbonButton, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonButton != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonButton is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupButton = ribbonButton; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupButton = ribbonButton ?? throw new ArgumentNullException(nameof(ribbonButton)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupButton.ItemSizeCurrent; _largeImagePadding = new Padding((int)(3 * FactorDpiX), (int)(2 * FactorDpiY), (int)(3 * FactorDpiX), (int)(3 * FactorDpiY)); @@ -121,7 +121,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the connected button definition. /// - public KryptonRibbonGroupButton GroupButton { get; private set; } + public KryptonRibbonGroupButton? GroupButton { get; private set; } #endregion @@ -130,7 +130,7 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { // Only take focus if we are visible and enabled if (GroupButton is { Visible: true, Enabled: true }) @@ -139,7 +139,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -149,7 +149,7 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { // Only take focus if we are visible and enabled if (GroupButton is { Visible: true, Enabled: true }) @@ -158,7 +158,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -170,11 +170,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -185,11 +185,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -205,7 +205,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) if (Visible) { // Get the screen location of the button - Rectangle viewRect = _ribbon.KeyTipToScreen(this[0]); + Rectangle viewRect = _ribbon!.KeyTipToScreen(this[0]); var screenPt = Point.Empty; GroupButtonController? controller = null; @@ -224,8 +224,8 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupButton.Enabled, GroupButton.KeyTip, - screenPt, this[0].ClientRectangle, controller)); + keyTipList.Add(new KeyTipInfo(GroupButton!.Enabled, GroupButton.KeyTip, + screenPt, this[0]!.ClientRectangle, controller)); } } #endregion @@ -248,10 +248,10 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// Layout context. public override Size GetPreferredSize(ViewLayoutContext context) { - var drawNonTrackingAreas = _ribbon.RibbonShape is not PaletteRibbonShape.Office2010 or PaletteRibbonShape.Office2013 or PaletteRibbonShape.Microsoft365 or PaletteRibbonShape.VisualStudio; + var drawNonTrackingAreas = _ribbon!.RibbonShape is not PaletteRibbonShape.Office2010 or PaletteRibbonShape.Office2013 or PaletteRibbonShape.Microsoft365 or PaletteRibbonShape.VisualStudio; // Update the views with the type of button being used - _viewLarge.ButtonType = GroupButton.ButtonType; + _viewLarge.ButtonType = GroupButton!.ButtonType; _viewLarge.DrawNonTrackingAreas = drawNonTrackingAreas; _viewMediumSmall.ButtonType = GroupButton.ButtonType; _viewMediumSmall.DrawNonTrackingAreas = drawNonTrackingAreas; @@ -270,9 +270,9 @@ public override Size GetPreferredSize(ViewLayoutContext context) /// Perform a layout of the elements. ///
/// Layout context. - public override void Layout([DisallowNull] ViewLayoutContext context) + public override void Layout([DisallowNull] ViewLayoutContext? context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Update our enabled and checked state UpdateEnabledState(); @@ -280,13 +280,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) UpdateDropDownState(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); // For split buttons we need to calculate the split button areas - if (GroupButton.ButtonType == GroupButtonType.Split) + if (GroupButton!.ButtonType == GroupButtonType.Split) { // Find the start positions of the split areas for both views var largeSplitTop = _viewLargeImage.ClientRectangle.Bottom + 1; @@ -318,13 +318,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rectangle to invalidate. protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) { - if (_needPaint != null) + if (_needPaint is not null) { _needPaint(this, new NeedLayoutEventArgs(needLayout, invalidRect)); if (needLayout) { - _ribbon.PerformLayout(); + _ribbon!.PerformLayout(); } } } @@ -334,9 +334,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) private void CreateLargeButtonView() { // Create the background and border view - _viewLarge = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupButton, - _ribbon.StateCommon.RibbonGroupButton.PaletteBack, - _ribbon.StateCommon.RibbonGroupButton.PaletteBorder, + _viewLarge = new ViewDrawRibbonGroupButtonBackBorder(_ribbon!, GroupButton!, + _ribbon!.StateCommon.RibbonGroupButton.PaletteBack, + _ribbon.StateCommon.RibbonGroupButton.PaletteBorder!, false, _needPaint) { SplitVertical = true @@ -353,7 +353,7 @@ private void CreateLargeButtonView() var contentLayout = new ViewLayoutDocker(); // Add the large button at the top - _viewLargeImage = new ViewDrawRibbonGroupButtonImage(_ribbon, GroupButton, true); + _viewLargeImage = new ViewDrawRibbonGroupButtonImage(_ribbon, GroupButton!, true); var largeImagePadding = new ViewLayoutRibbonCenterPadding(_largeImagePadding) { _viewLargeImage @@ -361,12 +361,12 @@ private void CreateLargeButtonView() contentLayout.Add(largeImagePadding, ViewDockStyle.Top); // Add the first line of text - _viewLargeText1 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton, true); + _viewLargeText1 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton!, true); contentLayout.Add(_viewLargeText1, ViewDockStyle.Bottom); // Add the second line of text _viewLargeCenter = new ViewLayoutRibbonRowCenter(); - _viewLargeText2 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton, false); + _viewLargeText2 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton!, false); _viewLargeDropArrow = new ViewDrawRibbonDropArrow(_ribbon); _viewLargeText2Sep1 = new ViewLayoutRibbonSeparator(4, false); _viewLargeText2Sep2 = new ViewLayoutRibbonSeparator(4, false); @@ -383,16 +383,16 @@ private void CreateLargeButtonView() _viewLarge.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling - _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewLarge, _viewLarge.MouseController); } private void CreateMediumSmallButtonView() { // Create the background and border view - _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupButton, - _ribbon.StateCommon.RibbonGroupButton.PaletteBack, - _ribbon.StateCommon.RibbonGroupButton.PaletteBorder, + _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon!, GroupButton!, + _ribbon!.StateCommon.RibbonGroupButton.PaletteBack, + _ribbon.StateCommon.RibbonGroupButton.PaletteBorder!, false, _needPaint) { SplitVertical = false @@ -409,9 +409,9 @@ private void CreateMediumSmallButtonView() var contentLayout = new ViewLayoutDocker(); // Create the image and drop down content - _viewMediumSmallImage = new ViewDrawRibbonGroupButtonImage(_ribbon, GroupButton, false); - _viewMediumSmallText1 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton, true); - _viewMediumSmallText2 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton, false); + _viewMediumSmallImage = new ViewDrawRibbonGroupButtonImage(_ribbon, GroupButton!, false); + _viewMediumSmallText1 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton!, true); + _viewMediumSmallText2 = new ViewDrawRibbonGroupButtonText(_ribbon, GroupButton!, false); _viewMediumSmallDropArrow = new ViewDrawRibbonDropArrow(_ribbon); _viewMediumSmallText2Sep2 = new ViewLayoutRibbonSeparator(3, false); _viewMediumSmallText2Sep3 = new ViewLayoutRibbonSeparator(3, false); @@ -438,7 +438,7 @@ private void CreateMediumSmallButtonView() _viewMediumSmall.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling - _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewMediumSmall, _viewMediumSmall.MouseController); } @@ -451,20 +451,20 @@ private void DefineRootView(ViewBase view) Add(view); // Provide back reference to the button definition - GroupButton.ButtonView = view; + GroupButton!.ButtonView = view; } private void UpdateEnabledState() { // Get the correct enabled state from the button definition - var buttonEnabled = GroupButton.Enabled; + var buttonEnabled = GroupButton!.Enabled; if (GroupButton.KryptonCommand != null) { buttonEnabled = GroupButton.KryptonCommand.Enabled; } // Take into account the ribbon state and mode - var enabled = _ribbon.InDesignHelperMode || (buttonEnabled && _ribbon.Enabled); + var enabled = _ribbon!.InDesignHelperMode || (buttonEnabled && _ribbon.Enabled); // Update enabled for the large button view _viewLarge.Enabled = enabled; @@ -486,7 +486,7 @@ private void UpdateCheckedState() var checkedState = false; // Only show as checked if also a check type button - if (GroupButton.ButtonType == GroupButtonType.Check) + if (GroupButton!.ButtonType == GroupButtonType.Check) { checkedState = GroupButton.KryptonCommand?.Checked ?? GroupButton.Checked; } @@ -497,7 +497,7 @@ private void UpdateCheckedState() private void UpdateDropDownState() { - var dropDown = GroupButton.ButtonType == GroupButtonType.DropDown; + var dropDown = GroupButton!.ButtonType == GroupButtonType.DropDown; var splitButton = GroupButton.ButtonType == GroupButtonType.Split; // Only show text line 2 separators is a drop down is showing with no text @@ -514,7 +514,7 @@ private void UpdateDropDownState() _viewMediumSmallText2Sep3.Visible = dropDown || splitButton; } - private void UpdateItemSizeState() => UpdateItemSizeState(GroupButton.ItemSizeCurrent); + private void UpdateItemSizeState() => UpdateItemSizeState(GroupButton!.ItemSizeCurrent); private void UpdateItemSizeState(GroupItemSize size) { @@ -537,17 +537,17 @@ private void UpdateItemSizeState(GroupItemSize size) } } - private void OnLargeButtonClick(object sender, EventArgs e) => GroupButton.PerformClick(_viewLarge.FinishDelegate); + private void OnLargeButtonClick(object? sender, EventArgs e) => GroupButton!.PerformClick(_viewLarge.FinishDelegate); - private void OnLargeButtonDropDown(object sender, EventArgs e) => GroupButton.PerformDropDown(_viewLarge.FinishDelegate); + private void OnLargeButtonDropDown(object? sender, EventArgs e) => GroupButton!.PerformDropDown(_viewLarge.FinishDelegate); - private void OnMediumSmallButtonClick(object sender, EventArgs e) => GroupButton.PerformClick(_viewMediumSmall.FinishDelegate); + private void OnMediumSmallButtonClick(object? sender, EventArgs e) => GroupButton!.PerformClick(_viewMediumSmall.FinishDelegate); - private void OnMediumSmallButtonDropDown(object sender, EventArgs e) => GroupButton.PerformDropDown(_viewMediumSmall.FinishDelegate); + private void OnMediumSmallButtonDropDown(object? sender, EventArgs e) => GroupButton!.PerformDropDown(_viewMediumSmall.FinishDelegate); - private void OnContextClick(object sender, MouseEventArgs e) => GroupButton.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupButton!.OnDesignTimeContextMenu(e); - private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnButtonPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; @@ -604,8 +604,8 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupButton.RibbonTab != null) && - (_ribbon.SelectedTab == GroupButton.RibbonTab)) + if ((GroupButton!.RibbonTab != null) && + (_ribbon!.SelectedTab == GroupButton.RibbonTab)) { // ...layout so the visible change is made OnNeedPaint(true); @@ -615,11 +615,11 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updatePaint) { // If this button is actually defined as visible... - if (GroupButton.Visible || _ribbon.InDesignMode) + if (GroupButton!.Visible || _ribbon!.InDesignMode) { // ...and on the currently selected tab then... if ((GroupButton.RibbonTab != null) && - (_ribbon.SelectedTab == GroupButton.RibbonTab)) + (_ribbon!.SelectedTab == GroupButton.RibbonTab)) { // ...repaint it right now OnNeedPaint(false, ClientRectangle); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonBackBorder.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonBackBorder.cs index ac3c6b403..436b35320 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonBackBorder.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonBackBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -58,10 +58,10 @@ internal class ViewDrawRibbonGroupButtonBackBorder : ViewComposite /// Palette to use for the border. /// Should the border be a constant normal state. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupButtonBackBorder([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupItem groupItem, - [DisallowNull] IPaletteBack paletteBack, - [DisallowNull] IPaletteBorder paletteBorder, + public ViewDrawRibbonGroupButtonBackBorder([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupItem? groupItem, + [DisallowNull] IPaletteBack? paletteBack, + [DisallowNull] IPaletteBorder? paletteBorder, bool constantBorder, NeedPaintHandler needPaint) { @@ -71,17 +71,20 @@ public ViewDrawRibbonGroupButtonBackBorder([DisallowNull] KryptonRibbon ribbon, Debug.Assert(paletteBorder != null); // Remember incoming references - _ribbon = ribbon; - GroupItem = groupItem; - _paletteBack = paletteBack; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupItem = groupItem ?? throw new ArgumentNullException(nameof(groupItem)); + _paletteBack = paletteBack ?? throw new ArgumentNullException(nameof(paletteBack)); + _paletteBackDraw = new PaletteBackInheritForced(paletteBack) { ForceDraw = InheritBool.True }; + _paletteBackLight = new PaletteBackLightenColors(paletteBack); _paletteBorderAll = new PaletteBorderInheritForced(paletteBorder); _paletteBorderAll.ForceBorderEdges(PaletteDrawBorders.All); - _paletteBorder = paletteBorder; + + _paletteBorder = paletteBorder ?? throw new ArgumentNullException(nameof(paletteBorder)); ConstantBorder = constantBorder; // Default other fields @@ -159,8 +162,8 @@ protected override void Dispose(bool disposing) ///
public Rectangle SplitRectangle { - get => Controller.SplitRectangle; - set => Controller.SplitRectangle = value; + get => Controller!.SplitRectangle; + set => Controller!.SplitRectangle = value; } #endregion @@ -170,8 +173,8 @@ public Rectangle SplitRectangle ///
public GroupButtonType ButtonType { - get => Controller.ButtonType; - set => Controller.ButtonType = value; + get => Controller!.ButtonType; + set => Controller!.ButtonType = value; } #endregion @@ -212,12 +215,12 @@ public GroupButtonType ButtonType /// Perform a layout of the elements. ///
/// Layout context. - public override void Layout([DisallowNull] ViewLayoutContext context) + public override void Layout([DisallowNull] ViewLayoutContext? context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); @@ -292,7 +295,7 @@ private void DrawVerticalSplit(RenderContext context, PaletteState drawState) // We need the rectangle that represents just the split area var partialHeight = ClientHeight / 3 * 2; var partialRect = new Rectangle(ClientLocation, new Size(ClientWidth, partialHeight)); - var splitRectangle = Controller.SplitRectangle; + var splitRectangle = Controller!.SplitRectangle; var aboveSplitRect = new Rectangle(ClientLocation, new Size(ClientWidth, splitRectangle.Y - ClientLocation.Y)); var splitterRect = new Rectangle(splitRectangle.Location, new Size(ClientWidth, 1)); var belowSplitRect = splitRectangle with { X = ClientLocation.X, Width = ClientWidth }; @@ -308,6 +311,7 @@ private void DrawVerticalSplit(RenderContext context, PaletteState drawState) DrawBorder(_paletteBorder, context, ClientRectangle, PaletteState.Normal); } break; + case PaletteState.Tracking: // Draw the background for the click and split areas if (Controller.MouseInSplit) @@ -380,6 +384,7 @@ private void DrawVerticalSplit(RenderContext context, PaletteState drawState) // Draw the entire border around the button DrawBorder(_paletteBorder, context, ClientRectangle, PaletteState.Tracking); break; + case PaletteState.Pressed: // Draw the background for the click and split areas if (Controller.MouseInSplit) @@ -464,9 +469,11 @@ private void DrawVerticalSplit(RenderContext context, PaletteState drawState) DrawBorder(_paletteBorder, context, ClientRectangle, PaletteState.Pressed); } break; + default: // Should never happen Debug.Assert(false); + DebugTools.NotImplemented(drawState.ToString()); break; } } @@ -474,7 +481,7 @@ private void DrawVerticalSplit(RenderContext context, PaletteState drawState) private void DrawHorizontalSplit(RenderContext context, PaletteState drawState) { // We need the rectangle that represents just the split area - var splitRectangle = Controller.SplitRectangle; + var splitRectangle = Controller!.SplitRectangle; var beforeSplitRect = new Rectangle(ClientLocation, new Size(splitRectangle.X - ClientLocation.X, ClientHeight)); var splitterRect = new Rectangle(splitRectangle.Location, new Size(1, ClientHeight)); var afterSplitRect = splitRectangle with { Y = ClientLocation.Y, Height = ClientHeight }; @@ -490,6 +497,7 @@ private void DrawHorizontalSplit(RenderContext context, PaletteState drawState) DrawBorder(_paletteBorder, context, ClientRectangle, PaletteState.Normal); } break; + case PaletteState.Tracking: // Draw the background for the click and split areas if (Controller.MouseInSplit) @@ -572,6 +580,7 @@ private void DrawHorizontalSplit(RenderContext context, PaletteState drawState) DrawBorder(_paletteBorder, context, ClientRectangle, PaletteState.Tracking); } break; + case PaletteState.Pressed: // Draw the background for the click and split areas if (Controller.MouseInSplit) @@ -666,18 +675,25 @@ private void DrawHorizontalSplit(RenderContext context, PaletteState drawState) } } break; + default: // Should never happen Debug.Assert(false); + DebugTools.NotImplemented(drawState.ToString()); break; } } private void DrawBackground(IPaletteBack paletteBack, - RenderContext context, + [DisallowNull] RenderContext context, Rectangle rect, PaletteState state) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Do we need to draw the background? if (paletteBack.GetBackDraw(state) == InheritBool.True) { @@ -689,6 +705,7 @@ private void DrawBackground(IPaletteBack paletteBack, Rectangle enclosingRect = CommonHelper.ApplyPadding(VisualOrientation.Top, rect, borderPadding); // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, _paletteBorder.GetBorderGraphicsHint(PaletteState.Normal)); _mementoBack = context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, paletteBack, VisualOrientation.Top, state, _mementoBack); @@ -696,10 +713,15 @@ private void DrawBackground(IPaletteBack paletteBack, } private void DrawBorder(IPaletteBorder paletteBorder, - RenderContext context, + [DisallowNull] RenderContext context, Rectangle rect, PaletteState state) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Do we need to draw the border? if (paletteBorder.GetBorderDraw(state) == InheritBool.True) { @@ -714,7 +736,7 @@ private bool SplitWithFading(PaletteState drawState) return palette.GetMetricBool(drawState, PaletteMetricBool.SplitWithFading) == InheritBool.True; } - private void ActionFinished(object sender, EventArgs e) + private void ActionFinished(object? sender, EventArgs e) { var fireAction = true; @@ -733,14 +755,14 @@ private void ActionFinished(object sender, EventArgs e) } // Remove the fixed pressed appearance - Controller.RemoveFixed(); + Controller!.RemoveFixed(); } - private void OnClick(object sender, EventArgs e) => Click?.Invoke(this, e); + private void OnClick(object? sender, EventArgs e) => Click?.Invoke(this, e); - private void OnContextClick(object sender, MouseEventArgs e) => ContextClick?.Invoke(this, e); + private void OnContextClick(object? sender, MouseEventArgs e) => ContextClick?.Invoke(this, e); - private void OnDropDown(object sender, EventArgs e) => DropDown?.Invoke(this, e); + private void OnDropDown(object? sender, EventArgs e) => DropDown?.Invoke(this, e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonImage.cs index 67e2794c4..c24d52d84 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -33,14 +33,14 @@ internal class ViewDrawRibbonGroupButtonImage : ViewDrawRibbonGroupImageBase /// Reference to owning ribbon control. /// Reference to ribbon group button definition. /// Show the large image. - public ViewDrawRibbonGroupButtonImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupButton ribbonButton, + public ViewDrawRibbonGroupButtonImage([DisallowNull] KryptonRibbon ribbon, + [DisallowNull] KryptonRibbonGroupButton ribbonButton, bool large) : base(ribbon) { - Debug.Assert(ribbonButton != null); + Debug.Assert(ribbonButton is not null); - _ribbonButton = ribbonButton; + _ribbonButton = ribbonButton ?? throw new ArgumentNullException(nameof(ribbonButton)); _large = large; _smallSize = new Size((int)(16 * FactorDpiX), (int)(16 * FactorDpiY)); _largeSize = new Size((int)(32 * FactorDpiX), (int)(32 * FactorDpiY)); @@ -65,7 +65,7 @@ public override string ToString() => /// /// Gets the image to be drawn. /// - protected override Image DrawImage + protected override Image? DrawImage { get { diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonText.cs index 6e1f6d585..18cf8339a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupButtonText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupButtonText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupButton _ribbonButton; private readonly RibbonGroupNormalDisabledTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _firstText; private int _heightExtra; private Size _preferredSize; @@ -48,8 +48,8 @@ public ViewDrawRibbonGroupButtonText([DisallowNull] KryptonRibbon ribbon, Debug.Assert(ribbon != null); Debug.Assert(ribbonButton != null); - _ribbon = ribbon; - _ribbonButton = ribbonButton; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonButton = ribbonButton ?? throw new ArgumentNullException(nameof(ribbonButton)); _firstText = firstText; // Use a class to convert from ribbon group to content interface @@ -74,7 +74,7 @@ protected override void Dispose(bool disposing) { if (disposing) { - if (_memento != null) + if (_memento is not null) { _memento.Dispose(); _memento = null; @@ -103,7 +103,7 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference if (context == null) @@ -111,6 +111,11 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // A change in state always causes a size and layout calculation if (_cacheState != State) { @@ -124,7 +129,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -152,10 +157,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -188,7 +203,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if relayout is needed _displayRect = ClientRectangle; @@ -202,8 +217,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -216,7 +236,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBox.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBox.cs index fc298c46b..7addd1ce2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -49,18 +49,18 @@ internal class ViewDrawRibbonGroupCheckBox : ViewComposite, /// Reference to owning ribbon control. /// Reference to source check box definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupCheckBox([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupCheckBox ribbonCheckBox, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupCheckBox([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupCheckBox? ribbonCheckBox, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonCheckBox != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonCheckBox is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupCheckBox = ribbonCheckBox; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupCheckBox = ribbonCheckBox ?? throw new ArgumentNullException(nameof(ribbonCheckBox)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupCheckBox.ItemSizeCurrent; // Create delegate used to process end of click action @@ -129,7 +129,7 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { // Only take focus if we are visible and enabled if (GroupCheckBox is { Visible: true, Enabled: true }) @@ -138,7 +138,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -148,7 +148,7 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { // Only take focus if we are visible and enabled if (GroupCheckBox is { Visible: true, Enabled: true }) @@ -157,7 +157,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -169,11 +169,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -184,11 +184,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -224,7 +224,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) } keyTipList.Add(new KeyTipInfo(GroupCheckBox.Enabled, GroupCheckBox.KeyTip, - screenPt, this[0].ClientRectangle, controller)); + screenPt, this[0]!.ClientRectangle, controller)); } } #endregion @@ -271,7 +271,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) UpdateItemSizeState(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); @@ -330,7 +330,7 @@ private void CreateLargeCheckBoxView() _viewLarge.Add(new ViewLayoutRibbonSeparator(1, false), ViewDockStyle.Bottom); // Create controller for handling mouse, keyboard and focus - _viewLargeController = new GroupCheckBoxController(_ribbon, _viewLarge, _viewLargeImage, _needPaint); + _viewLargeController = new GroupCheckBoxController(_ribbon, _viewLarge, _viewLargeImage, _needPaint!); _viewLargeController.Click += OnLargeCheckBoxClick; _viewLargeController.ContextClick += OnContextClick; _viewLarge.MouseController = _viewLargeController; @@ -338,7 +338,7 @@ private void CreateLargeCheckBoxView() _viewLarge.KeyController = _viewLargeController; // Create controller for intercepting events to determine tool tip handling - _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewLarge, _viewLarge.MouseController); } @@ -368,7 +368,7 @@ private void CreateMediumSmallCheckBoxView() _viewMediumSmall.Add(_viewMediumSmallCenter, ViewDockStyle.Fill); // Create controller for handling mouse, keyboard and focus - _viewMediumSmallController = new GroupCheckBoxController(_ribbon, _viewMediumSmall, _viewMediumSmallImage, _needPaint); + _viewMediumSmallController = new GroupCheckBoxController(_ribbon, _viewMediumSmall, _viewMediumSmallImage, _needPaint!); _viewMediumSmallController.Click += OnMediumSmallCheckBoxClick; _viewMediumSmallController.ContextClick += OnContextClick; _viewMediumSmall.MouseController = _viewMediumSmallController; @@ -376,7 +376,7 @@ private void CreateMediumSmallCheckBoxView() _viewMediumSmall.KeyController = _viewMediumSmallController; // Create controller for intercepting events to determine tool tip handling - _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewMediumSmall, _viewMediumSmall.MouseController); } @@ -443,13 +443,13 @@ private void UpdateItemSizeState(GroupItemSize size) } } - private void OnLargeCheckBoxClick(object sender, EventArgs e) => GroupCheckBox.PerformClick(_finishDelegateLarge); + private void OnLargeCheckBoxClick(object? sender, EventArgs e) => GroupCheckBox.PerformClick(_finishDelegateLarge); - private void OnMediumSmallCheckBoxClick(object sender, EventArgs e) => GroupCheckBox.PerformClick(_finishDelegateMediumSmall); + private void OnMediumSmallCheckBoxClick(object? sender, EventArgs e) => GroupCheckBox.PerformClick(_finishDelegateMediumSmall); - private void OnContextClick(object sender, MouseEventArgs e) => GroupCheckBox.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupCheckBox.OnDesignTimeContextMenu(e); - private void ActionFinishedLarge(object sender, EventArgs e) + private void ActionFinishedLarge(object? sender, EventArgs e) { // Remove any popups that result from an action occurring _ribbon.ActionOccurred(); @@ -458,7 +458,7 @@ private void ActionFinishedLarge(object sender, EventArgs e) _viewLargeController?.RemoveFixed(); } - private void ActionFinishedMediumSmall(object sender, EventArgs e) + private void ActionFinishedMediumSmall(object? sender, EventArgs e) { // Remove any popups that result from an action occurring _ribbon.ActionOccurred(); @@ -467,7 +467,7 @@ private void ActionFinishedMediumSmall(object sender, EventArgs e) _viewMediumSmallController?.RemoveFixed(); } - private void OnCheckBoxPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnCheckBoxPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxImage.cs index 3843dc413..6d79f798b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -34,14 +34,19 @@ internal class ViewDrawRibbonGroupCheckBoxImage : ViewComposite /// Reference to owning ribbon control. /// Reference to ribbon group check box definition. /// Show the large image. - public ViewDrawRibbonGroupCheckBoxImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupCheckBox ribbonCheckBox, + public ViewDrawRibbonGroupCheckBoxImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupCheckBox? ribbonCheckBox, bool large) { - Debug.Assert(ribbonCheckBox != null); + Debug.Assert(ribbonCheckBox is not null); + + if (ribbon is null) + { + throw new ArgumentNullException(nameof(ribbon)); + } // Remember incoming parameters - _ribbonCheckBox = ribbonCheckBox; + _ribbonCheckBox = ribbonCheckBox ?? throw new ArgumentNullException(nameof(ribbonCheckBox)); _large = large; // Use redirector to get the check box images and redirect to parent palette diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxText.cs index 5062f1866..caea6b2d4 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCheckBoxText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupCheckBoxText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupCheckBox _ribbonCheckBox; private readonly RibbonGroupNormalDisabledTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _firstText; private int _heightExtra; private Size _preferredSize; @@ -45,11 +45,11 @@ public ViewDrawRibbonGroupCheckBoxText([DisallowNull] KryptonRibbon ribbon, [DisallowNull] KryptonRibbonGroupCheckBox ribbonCheckBox, bool firstText) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonCheckBox != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonCheckBox is not null); - _ribbon = ribbon; - _ribbonCheckBox = ribbonCheckBox; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonCheckBox = ribbonCheckBox ?? throw new ArgumentNullException(nameof(ribbonCheckBox )); _firstText = firstText; // Use a class to convert from ribbon group to content interface @@ -103,14 +103,19 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // A change in state always causes a size and layout calculation if (_cacheState != State) { @@ -124,7 +129,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -147,12 +152,22 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Perform a layout of the elements. ///
/// Layout context. - public override void Layout([DisallowNull] ViewLayoutContext context) + public override void Layout([DisallowNull] ViewLayoutContext? context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -182,7 +197,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -196,8 +211,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -210,7 +230,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButton.cs index 45c1f17c9..896bb2c4c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -43,18 +43,18 @@ internal class ViewDrawRibbonGroupClusterButton : ViewComposite, /// Reference to owning ribbon control. /// Reference to source button definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupClusterButton([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupClusterButton ribbonButton, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupClusterButton([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupClusterButton? ribbonButton, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonButton != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonButton is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupClusterButton = ribbonButton; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon )); + GroupClusterButton = ribbonButton ?? throw new ArgumentNullException(nameof(ribbonButton)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupClusterButton.ItemSizeCurrent; // Associate this view with the source component (required for design time selection) @@ -109,7 +109,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the connected button definition. /// - public KryptonRibbonGroupClusterButton GroupClusterButton { get; private set; } + public KryptonRibbonGroupClusterButton? GroupClusterButton { get; private set; } #endregion @@ -167,7 +167,7 @@ public bool DrawNonTrackingAreas /// Gets the first focus item from the container. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { // Only take focus if we are visible and enabled if (GroupClusterButton is { Visible: true, Enabled: true }) @@ -176,7 +176,7 @@ public bool DrawNonTrackingAreas } else { - return null; + return null!; } } #endregion @@ -186,7 +186,7 @@ public bool DrawNonTrackingAreas /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { // Only take focus if we are visible and enabled if (GroupClusterButton is { Visible: true, Enabled: true }) @@ -195,7 +195,7 @@ public bool DrawNonTrackingAreas } else { - return null; + return null!; } } #endregion @@ -207,11 +207,11 @@ public bool DrawNonTrackingAreas /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == _viewMediumSmall; - return null; + return null!; } #endregion @@ -222,11 +222,11 @@ public bool DrawNonTrackingAreas /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == _viewMediumSmall; - return null; + return null!; } #endregion @@ -247,8 +247,8 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) // Determine the screen position of the key tip dependant on item location Point screenPt = _ribbon.CalculatedValues.KeyTipRectToPoint(viewRect, lineHint); - keyTipList.Add(new KeyTipInfo(GroupClusterButton.Enabled, GroupClusterButton.KeyTip, screenPt, - this[0].ClientRectangle, _viewMediumSmall.Controller)); + keyTipList.Add(new KeyTipInfo(GroupClusterButton!.Enabled, GroupClusterButton.KeyTip, screenPt, + this[0]!.ClientRectangle, _viewMediumSmall.Controller)); } } #endregion @@ -283,7 +283,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Update our enabled and checked state UpdateEnabledState(); @@ -291,13 +291,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) UpdateDropDownState(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); // For split buttons we need to calculate the split button areas - if (GroupClusterButton.ButtonType == GroupButtonType.Split) + if (GroupClusterButton!.ButtonType == GroupButtonType.Split) { // Find the position of the split area var smallSplitRight = _viewMediumSmallText2Sep1.ClientLocation.X; @@ -344,7 +344,7 @@ private void CreateView() _borderForced = new PaletteBorderInheritForced(_ribbon.StateCommon.RibbonGroupClusterButton.PaletteBorder); // Create the background and border view - _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupClusterButton, _backForced, _borderForced, true, _needPaint) + _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupClusterButton!, _backForced, _borderForced, true, _needPaint) { SplitVertical = false }; @@ -360,8 +360,8 @@ private void CreateView() var contentLayout = new ViewLayoutDocker(); // Create the image and drop down content - _viewMediumSmallImage = new ViewDrawRibbonGroupClusterButtonImage(_ribbon, GroupClusterButton); - _viewMediumSmallText1 = new ViewDrawRibbonGroupClusterButtonText(_ribbon, GroupClusterButton) + _viewMediumSmallImage = new ViewDrawRibbonGroupClusterButtonImage(_ribbon, GroupClusterButton!); + _viewMediumSmallText1 = new ViewDrawRibbonGroupClusterButtonText(_ribbon, GroupClusterButton!) { Visible = _currentSize != GroupItemSize.Small }; @@ -390,17 +390,17 @@ private void CreateView() _viewMediumSmall.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling - _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewMediumSmall, _viewMediumSmall.MouseController); // Provide back reference to the button definition - GroupClusterButton.ClusterButtonView = _viewMediumSmall; + GroupClusterButton!.ClusterButtonView = _viewMediumSmall; // Define the actual view Add(_viewMediumSmall); } - private void UpdateItemSizeState() => UpdateItemSizeState(GroupClusterButton.ItemSizeCurrent); + private void UpdateItemSizeState() => UpdateItemSizeState(GroupClusterButton!.ItemSizeCurrent); private void UpdateItemSizeState(GroupItemSize size) { @@ -412,7 +412,7 @@ private void UpdateItemSizeState(GroupItemSize size) private void UpdateEnabledState() { // Get the correct enabled state from the button definition - var buttonEnabled = GroupClusterButton.Enabled; + var buttonEnabled = GroupClusterButton!.Enabled; if (GroupClusterButton.KryptonCommand != null) { buttonEnabled = GroupClusterButton.KryptonCommand.Enabled; @@ -432,7 +432,7 @@ private void UpdateCheckedState() var checkedState = false; // Only show as checked if also a check type button - if (GroupClusterButton.ButtonType == GroupButtonType.Check) + if (GroupClusterButton!.ButtonType == GroupButtonType.Check) { checkedState = GroupClusterButton.KryptonCommand?.Checked ?? GroupClusterButton.Checked; } @@ -442,7 +442,7 @@ private void UpdateCheckedState() private void UpdateDropDownState() { - var dropDown = GroupClusterButton.ButtonType is GroupButtonType.DropDown or GroupButtonType.Split; + var dropDown = GroupClusterButton!.ButtonType is GroupButtonType.DropDown or GroupButtonType.Split; var splitDown = GroupClusterButton.ButtonType == GroupButtonType.Split; @@ -454,13 +454,13 @@ private void UpdateDropDownState() _viewMediumSmall.ButtonType = GroupClusterButton.ButtonType; } - private void OnSmallButtonClick(object sender, EventArgs e) => GroupClusterButton.PerformClick(_viewMediumSmall.FinishDelegate); + private void OnSmallButtonClick(object? sender, EventArgs e) => GroupClusterButton!.PerformClick(_viewMediumSmall.FinishDelegate); - private void OnSmallButtonDropDown(object sender, EventArgs e) => GroupClusterButton.PerformDropDown(_viewMediumSmall.FinishDelegate); + private void OnSmallButtonDropDown(object? sender, EventArgs e) => GroupClusterButton!.PerformDropDown(_viewMediumSmall.FinishDelegate); - private void OnContextClick(object sender, MouseEventArgs e) => GroupClusterButton.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupClusterButton!.OnDesignTimeContextMenu(e); - private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnButtonPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; @@ -506,7 +506,7 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupClusterButton.RibbonTab != null) && + if ((GroupClusterButton!.RibbonTab != null) && (_ribbon.SelectedTab == GroupClusterButton.RibbonTab)) { // ...layout so the visible change is made @@ -517,7 +517,7 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updatePaint) { // If this button is actually defined as visible... - if (GroupClusterButton.Visible || _ribbon.InDesignMode) + if (GroupClusterButton!.Visible || _ribbon.InDesignMode) { // ...and on the currently selected tab then... if ((GroupClusterButton.RibbonTab != null) && diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonImage.cs index 7de7671f4..a5b03adc4 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,13 +31,13 @@ internal class ViewDrawRibbonGroupClusterButtonImage : ViewDrawRibbonGroupImageB ///
/// Reference to owning ribbon control. /// Reference to ribbon group button definition. - public ViewDrawRibbonGroupClusterButtonImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupClusterButton ribbonButton) + public ViewDrawRibbonGroupClusterButtonImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupClusterButton? ribbonButton) : base(ribbon) { - Debug.Assert(ribbonButton != null); + Debug.Assert(ribbonButton is not null); - _ribbonButton = ribbonButton; + _ribbonButton = ribbonButton ?? throw new ArgumentNullException(nameof(ribbonButton)); _smallSize = new Size((int)(16 * FactorDpiX), (int)(16 * FactorDpiY)); } @@ -60,7 +60,7 @@ public override string ToString() => /// /// Gets the image to be drawn. /// - protected override Image DrawImage => _ribbonButton.KryptonCommand != null ? _ribbonButton.KryptonCommand.ImageSmall : _ribbonButton.ImageSmall; + protected override Image? DrawImage => _ribbonButton.KryptonCommand != null ? _ribbonButton.KryptonCommand.ImageSmall : _ribbonButton.ImageSmall; #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonText.cs index 80ecc3907..400610875 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterButtonText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupClusterButtonText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupClusterButton _ribbonButton; private readonly RibbonGroupNormalDisabledTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private int _heightExtra; private Size _preferredSize; private Rectangle _displayRect; @@ -39,15 +39,15 @@ internal class ViewDrawRibbonGroupClusterButtonText : ViewLeaf, ///
/// Source ribbon control. /// Group cluster button to display title for. - public ViewDrawRibbonGroupClusterButtonText([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupClusterButton ribbonButton) + public ViewDrawRibbonGroupClusterButtonText([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupClusterButton? ribbonButton) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonButton != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonButton is not null); - _ribbon = ribbon; - _ribbonButton = ribbonButton; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonButton = ribbonButton ?? throw new ArgumentNullException(nameof(ribbonButton)); // Use a class to convert from ribbon group to content interface _contentProvider = new RibbonGroupNormalDisabledTextToContent(ribbon.StateCommon.RibbonGeneral, @@ -100,7 +100,17 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Validate incoming reference if (context == null) @@ -121,7 +131,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -144,12 +154,22 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Perform a layout of the elements. ///
/// Layout context. - public override void Layout([DisallowNull] ViewLayoutContext context) + public override void Layout([DisallowNull] ViewLayoutContext? context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -179,7 +199,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -193,8 +213,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -207,7 +232,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButton.cs index fe0dde65b..d101a0ce2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -43,18 +43,18 @@ internal class ViewDrawRibbonGroupClusterColorButton : ViewComposite, /// Reference to owning ribbon control. /// Reference to source button definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupClusterColorButton([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupClusterColorButton ribbonButton, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupClusterColorButton([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupClusterColorButton? ribbonButton, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonButton != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonButton is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupClusterColorButton = ribbonButton; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon )); + GroupClusterColorButton = ribbonButton ?? throw new ArgumentNullException(nameof(ribbonButton)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupClusterColorButton.ItemSizeCurrent; // Associate this view with the source component (required for design time selection) @@ -109,7 +109,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the connected button definition. /// - public KryptonRibbonGroupClusterColorButton GroupClusterColorButton { get; private set; } + public KryptonRibbonGroupClusterColorButton? GroupClusterColorButton { get; private set; } #endregion @@ -167,7 +167,7 @@ public bool DrawNonTrackingAreas /// Gets the first focus item from the container. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { // Only take focus if we are visible and enabled if (GroupClusterColorButton is { Visible: true, Enabled: true }) @@ -176,7 +176,7 @@ public bool DrawNonTrackingAreas } else { - return null; + return null!; } } #endregion @@ -186,7 +186,7 @@ public bool DrawNonTrackingAreas /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { // Only take focus if we are visible and enabled if (GroupClusterColorButton is { Visible: true, Enabled: true }) @@ -195,7 +195,7 @@ public bool DrawNonTrackingAreas } else { - return null; + return null!; } } #endregion @@ -207,11 +207,11 @@ public bool DrawNonTrackingAreas /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == _viewMediumSmall; - return null; + return null!; } #endregion @@ -222,11 +222,11 @@ public bool DrawNonTrackingAreas /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == _viewMediumSmall; - return null; + return null!; } #endregion @@ -247,8 +247,8 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) // Determine the screen position of the key tip dependant on item location Point screenPt = _ribbon.CalculatedValues.KeyTipRectToPoint(viewRect, lineHint); - keyTipList.Add(new KeyTipInfo(GroupClusterColorButton.Enabled, GroupClusterColorButton.KeyTip, screenPt, - this[0].ClientRectangle, _viewMediumSmall.Controller)); + keyTipList.Add(new KeyTipInfo(GroupClusterColorButton!.Enabled, GroupClusterColorButton.KeyTip, screenPt, + this[0]!.ClientRectangle, _viewMediumSmall.Controller)); } } #endregion @@ -283,7 +283,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Update our enabled and checked state UpdateEnabledState(); @@ -291,13 +291,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) UpdateDropDownState(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); // For split buttons we need to calculate the split button areas - if (GroupClusterColorButton.ButtonType == GroupButtonType.Split) + if (GroupClusterColorButton!.ButtonType == GroupButtonType.Split) { // Find the position of the split area var smallSplitRight = _viewMediumSmallText2Sep1.ClientLocation.X; @@ -344,7 +344,7 @@ private void CreateView() _borderForced = new PaletteBorderInheritForced(_ribbon.StateCommon.RibbonGroupClusterButton.PaletteBorder); // Create the background and border view - _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupClusterColorButton, _backForced, _borderForced, true, _needPaint) + _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupClusterColorButton!, _backForced, _borderForced, true, _needPaint) { SplitVertical = false }; @@ -360,8 +360,8 @@ private void CreateView() var contentLayout = new ViewLayoutDocker(); // Create the image and drop down content - _viewMediumSmallImage = new ViewDrawRibbonGroupClusterColorButtonImage(_ribbon, GroupClusterColorButton); - _viewMediumSmallText1 = new ViewDrawRibbonGroupClusterColorButtonText(_ribbon, GroupClusterColorButton) + _viewMediumSmallImage = new ViewDrawRibbonGroupClusterColorButtonImage(_ribbon, GroupClusterColorButton!); + _viewMediumSmallText1 = new ViewDrawRibbonGroupClusterColorButtonText(_ribbon, GroupClusterColorButton!) { Visible = _currentSize != GroupItemSize.Small }; @@ -390,17 +390,17 @@ private void CreateView() _viewMediumSmall.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling - _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewMediumSmall, _viewMediumSmall.MouseController); // Provide back reference to the button definition - GroupClusterColorButton.ClusterColorButtonView = _viewMediumSmall; + GroupClusterColorButton!.ClusterColorButtonView = _viewMediumSmall; // Define the actual view Add(_viewMediumSmall); } - private void UpdateItemSizeState() => UpdateItemSizeState(GroupClusterColorButton.ItemSizeCurrent); + private void UpdateItemSizeState() => UpdateItemSizeState(GroupClusterColorButton!.ItemSizeCurrent); private void UpdateItemSizeState(GroupItemSize size) { @@ -412,7 +412,7 @@ private void UpdateItemSizeState(GroupItemSize size) private void UpdateEnabledState() { // Get the correct enabled state from the button definition - var buttonEnabled = GroupClusterColorButton.Enabled; + var buttonEnabled = GroupClusterColorButton!.Enabled; if (GroupClusterColorButton.KryptonCommand != null) { buttonEnabled = GroupClusterColorButton.KryptonCommand.Enabled; @@ -431,7 +431,7 @@ private void UpdateCheckedState() var checkedState = false; // Only show as checked if also a check type button - if (GroupClusterColorButton.ButtonType == GroupButtonType.Check) + if (GroupClusterColorButton!.ButtonType == GroupButtonType.Check) { checkedState = GroupClusterColorButton.KryptonCommand?.Checked ?? GroupClusterColorButton.Checked; } @@ -442,7 +442,7 @@ private void UpdateCheckedState() private void UpdateDropDownState() { // Only show the drop down if the button is the correct type - var dropDown = GroupClusterColorButton.ButtonType is GroupButtonType.DropDown or GroupButtonType.Split; + var dropDown = GroupClusterColorButton!.ButtonType is GroupButtonType.DropDown or GroupButtonType.Split; _viewMediumSmallDropArrow.Visible = dropDown; _viewMediumSmallText2Sep2.Visible = dropDown; @@ -452,13 +452,13 @@ private void UpdateDropDownState() } - private void OnSmallButtonClick(object sender, EventArgs e) => GroupClusterColorButton.PerformClick(_viewMediumSmall.FinishDelegate); + private void OnSmallButtonClick(object? sender, EventArgs e) => GroupClusterColorButton!.PerformClick(_viewMediumSmall.FinishDelegate); - private void OnSmallButtonDropDown(object sender, EventArgs e) => GroupClusterColorButton.PerformDropDown(_viewMediumSmall.FinishDelegate); + private void OnSmallButtonDropDown(object? sender, EventArgs e) => GroupClusterColorButton!.PerformDropDown(_viewMediumSmall.FinishDelegate); - private void OnContextClick(object sender, MouseEventArgs e) => GroupClusterColorButton.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupClusterColorButton!.OnDesignTimeContextMenu(e); - private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnButtonPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; @@ -512,7 +512,7 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupClusterColorButton.RibbonTab != null) && + if ((GroupClusterColorButton!.RibbonTab != null) && (_ribbon.SelectedTab == GroupClusterColorButton.RibbonTab)) { // ...layout so the visible change is made @@ -523,7 +523,7 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updatePaint) { // If this button is actually defined as visible... - if (GroupClusterColorButton.Visible || _ribbon.InDesignMode) + if (GroupClusterColorButton!.Visible || _ribbon.InDesignMode) { // ...and on the currently selected tab then... if ((GroupClusterColorButton.RibbonTab != null) && diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonImage.cs index ca86116ac..22fcf40f5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -23,7 +23,7 @@ internal class ViewDrawRibbonGroupClusterColorButtonImage : ViewDrawRibbonGroupI #region Instance Fields private readonly Size _smallSize;// = new Size(16, 16); private readonly KryptonRibbonGroupClusterColorButton _ribbonColorButton; - private Image _compositeImage; + private Image? _compositeImage; private Color _selectedColor; private Color _emptyBorderColor; private Rectangle _selectedRect; @@ -35,12 +35,12 @@ internal class ViewDrawRibbonGroupClusterColorButtonImage : ViewDrawRibbonGroupI ///
/// Reference to owning ribbon control. /// Reference to ribbon group color button definition. - public ViewDrawRibbonGroupClusterColorButtonImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupClusterColorButton ribbonColorButton) + public ViewDrawRibbonGroupClusterColorButtonImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupClusterColorButton? ribbonColorButton) : base(ribbon) { - Debug.Assert(ribbonColorButton != null); - _ribbonColorButton = ribbonColorButton; + Debug.Assert(ribbonColorButton is not null); + _ribbonColorButton = ribbonColorButton ?? throw new ArgumentNullException(nameof(ribbonColorButton)); _selectedColor = ribbonColorButton.SelectedColor; _emptyBorderColor = ribbonColorButton.EmptyBorderColor; _selectedRect = ribbonColorButton.SelectedRect; @@ -95,7 +95,7 @@ public void SelectedColorRectChanged() /// /// Gets the image to be drawn. /// - protected override Image DrawImage + protected override Image? DrawImage { get { diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonText.cs index b71b1c14a..13b7892a7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterColorButtonText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupClusterColorButtonText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupClusterColorButton _ribbonColorButton; private readonly RibbonGroupNormalDisabledTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private int _heightExtra; private Size _preferredSize; private Rectangle _displayRect; @@ -39,15 +39,15 @@ internal class ViewDrawRibbonGroupClusterColorButtonText : ViewLeaf, ///
/// Source ribbon control. /// Group cluster color button to display title for. - public ViewDrawRibbonGroupClusterColorButtonText([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupClusterColorButton ribbonColorButton) + public ViewDrawRibbonGroupClusterColorButtonText([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupClusterColorButton? ribbonColorButton) { Debug.Assert(ribbon != null); Debug.Assert(ribbonColorButton != null); - _ribbon = ribbon; - _ribbonColorButton = ribbonColorButton; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonColorButton = ribbonColorButton ?? throw new ArgumentNullException(nameof(ribbonColorButton)); // Use a class to convert from ribbon group to content interface _contentProvider = new RibbonGroupNormalDisabledTextToContent(ribbon.StateCommon.RibbonGeneral, @@ -100,12 +100,14 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context!.Renderer is null) { - throw new ArgumentNullException(nameof(context)); + throw new ArgumentNullException(nameof(context.Renderer)); } // A change in state always causes a size and layout calculation @@ -121,7 +123,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -146,10 +148,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -179,7 +191,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -193,8 +205,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -207,7 +224,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterEdge.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterEdge.cs index bba6da71e..5653fdc9f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterEdge.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -30,15 +30,15 @@ internal class ViewDrawRibbonGroupClusterEdge : ViewDrawBorderEdge ///
/// Reference to owning ribbon.. /// Palette source for drawing details. - public ViewDrawRibbonGroupClusterEdge([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] PaletteBorderEdge palette) + public ViewDrawRibbonGroupClusterEdge([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] PaletteBorderEdge? palette) : base(palette, Orientation.Vertical) { Debug.Assert(ribbon != null); Debug.Assert(palette != null); - _ribbon = ribbon; - _palette = palette; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon )); + _palette = palette ?? throw new ArgumentNullException(nameof(palette)); } #endregion @@ -47,8 +47,13 @@ public ViewDrawRibbonGroupClusterEdge([DisallowNull] KryptonRibbon ribbon, /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull]RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Let base class perform standard drawing first base.RenderBefore(context); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterSeparator.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterSeparator.cs index 77fad61ed..e03d2be23 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterSeparator.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupClusterSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,10 +31,11 @@ internal class ViewDrawRibbonGroupClusterSeparator : ViewLeaf ///
/// Reference to owning ribbon control. /// Is this is cluster start separator. - public ViewDrawRibbonGroupClusterSeparator([DisallowNull] KryptonRibbon ribbon, bool start) + public ViewDrawRibbonGroupClusterSeparator([DisallowNull] KryptonRibbon? ribbon, bool start) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon )); _start = start; _preferredSize = new Size((int)(1 * FactorDpiX), (int)(4 * FactorDpiY)); } @@ -62,10 +63,10 @@ public override string ToString() => /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion @@ -74,8 +75,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; if (_start) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButton.cs index b943d7ff3..3d628959e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -51,18 +51,18 @@ internal class ViewDrawRibbonGroupColorButton : ViewComposite, /// Reference to owning ribbon control. /// Reference to source color button definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupColorButton([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupColorButton ribbonColorButton, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupColorButton([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupColorButton? ribbonColorButton, + [DisallowNull] NeedPaintHandler? needPaint) { Debug.Assert(ribbon != null); Debug.Assert(ribbonColorButton != null); Debug.Assert(needPaint != null); // Remember incoming references - _ribbon = ribbon; - GroupColorButton = ribbonColorButton; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon )); + GroupColorButton = ribbonColorButton ?? throw new ArgumentNullException(nameof(ribbonColorButton)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupColorButton.ItemSizeCurrent; // Associate this view with the source component (required for design time selection) @@ -119,7 +119,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the connected color button definition. /// - public KryptonRibbonGroupColorButton GroupColorButton { get; private set; } + public KryptonRibbonGroupColorButton? GroupColorButton { get; private set; } #endregion @@ -128,7 +128,7 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { // Only take focus if we are visible and enabled if (GroupColorButton is { Visible: true, Enabled: true }) @@ -137,7 +137,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -147,7 +147,7 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { // Only take focus if we are visible and enabled if (GroupColorButton is { Visible: true, Enabled: true }) @@ -156,7 +156,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -168,11 +168,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -183,11 +183,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -222,8 +222,8 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupColorButton.Enabled, GroupColorButton.KeyTip, - screenPt, this[0].ClientRectangle, controller)); + keyTipList.Add(new KeyTipInfo(GroupColorButton!.Enabled, GroupColorButton.KeyTip, + screenPt, this[0]!.ClientRectangle, controller)); } } #endregion @@ -249,9 +249,9 @@ public override Size GetPreferredSize(ViewLayoutContext context) var drawNonTrackingAreas = _ribbon.RibbonShape is not PaletteRibbonShape.Office2010 or PaletteRibbonShape.VisualStudio2010 or PaletteRibbonShape.Office2013 or PaletteRibbonShape.VisualStudio2010 or PaletteRibbonShape.Microsoft365 or PaletteRibbonShape.VisualStudio; // Update the views with the type of button being used - _viewLarge.ButtonType = GroupColorButton.ButtonType; + _viewLarge.ButtonType = GroupColorButton!.ButtonType; _viewLarge.DrawNonTrackingAreas = drawNonTrackingAreas; - _viewMediumSmall.ButtonType = GroupColorButton.ButtonType; + _viewMediumSmall.ButtonType = GroupColorButton!.ButtonType; _viewMediumSmall.DrawNonTrackingAreas = drawNonTrackingAreas; // Get the preferred size of button view @@ -270,7 +270,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Update our enabled and checked state UpdateEnabledState(); @@ -278,13 +278,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) UpdateDropDownState(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); // For split buttons we need to calculate the split button areas - if (GroupColorButton.ButtonType == GroupButtonType.Split) + if (GroupColorButton!.ButtonType == GroupButtonType.Split) { // Find the start positions of the split areas for both views var largeSplitTop = _viewLargeImage.ClientRectangle.Bottom + 2; @@ -332,9 +332,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) private void CreateLargeButtonView() { // Create the background and border view - _viewLarge = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupColorButton, + _viewLarge = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupColorButton!, _ribbon.StateCommon.RibbonGroupButton.PaletteBack, - _ribbon.StateCommon.RibbonGroupButton.PaletteBorder, + _ribbon.StateCommon.RibbonGroupButton.PaletteBorder!, false, _needPaint) { SplitVertical = true @@ -351,7 +351,7 @@ private void CreateLargeButtonView() var contentLayout = new ViewLayoutDocker(); // Add the large button at the top - _viewLargeImage = new ViewDrawRibbonGroupColorButtonImage(_ribbon, GroupColorButton, true); + _viewLargeImage = new ViewDrawRibbonGroupColorButtonImage(_ribbon, GroupColorButton!, true); var largeImagePadding = new ViewLayoutRibbonCenterPadding(_largeImagePadding) { _viewLargeImage @@ -359,12 +359,12 @@ private void CreateLargeButtonView() contentLayout.Add(largeImagePadding, ViewDockStyle.Top); // Add the first line of text - _viewLargeText1 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton, true); + _viewLargeText1 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton!, true); contentLayout.Add(_viewLargeText1, ViewDockStyle.Bottom); // Add the second line of text _viewLargeCenter = new ViewLayoutRibbonRowCenter(); - _viewLargeText2 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton, false); + _viewLargeText2 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton!, false); _viewLargeDropArrow = new ViewDrawRibbonDropArrow(_ribbon); _viewLargeText2Sep1 = new ViewLayoutRibbonSeparator(4, false); _viewLargeText2Sep2 = new ViewLayoutRibbonSeparator(4, false); @@ -381,16 +381,16 @@ private void CreateLargeButtonView() _viewLarge.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling - _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewLarge, _viewLarge.MouseController); } private void CreateMediumSmallButtonView() { // Create the background and border view - _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupColorButton, + _viewMediumSmall = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupColorButton!, _ribbon.StateCommon.RibbonGroupButton.PaletteBack, - _ribbon.StateCommon.RibbonGroupButton.PaletteBorder, + _ribbon.StateCommon.RibbonGroupButton.PaletteBorder!, false, _needPaint) { SplitVertical = false @@ -407,9 +407,9 @@ private void CreateMediumSmallButtonView() var contentLayout = new ViewLayoutDocker(); // Create the image and drop down content - _viewMediumSmallImage = new ViewDrawRibbonGroupColorButtonImage(_ribbon, GroupColorButton, false); - _viewMediumSmallText1 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton, true); - _viewMediumSmallText2 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton, false); + _viewMediumSmallImage = new ViewDrawRibbonGroupColorButtonImage(_ribbon, GroupColorButton!, false); + _viewMediumSmallText1 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton!, true); + _viewMediumSmallText2 = new ViewDrawRibbonGroupColorButtonText(_ribbon, GroupColorButton!, false); _viewMediumSmallDropArrow = new ViewDrawRibbonDropArrow(_ribbon); _viewMediumSmallText2Sep2 = new ViewLayoutRibbonSeparator(3, false); _viewMediumSmallText2Sep3 = new ViewLayoutRibbonSeparator(3, false); @@ -436,7 +436,7 @@ private void CreateMediumSmallButtonView() _viewMediumSmall.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling - _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewMediumSmall, _viewMediumSmall.MouseController); } @@ -449,13 +449,13 @@ private void DefineRootView(ViewBase view) Add(view); // Provide back reference to the button definition - GroupColorButton.ColorButtonView = view; + GroupColorButton!.ColorButtonView = view; } private void UpdateEnabledState() { // Get the correct enabled state from the button definition - var buttonEnabled = GroupColorButton.Enabled; + var buttonEnabled = GroupColorButton!.Enabled; if (GroupColorButton.KryptonCommand != null) { buttonEnabled = GroupColorButton.KryptonCommand.Enabled; @@ -483,7 +483,7 @@ private void UpdateCheckedState() var checkedState = false; // Only show as checked if also a check type button - if (GroupColorButton.ButtonType == GroupButtonType.Check) + if (GroupColorButton!.ButtonType == GroupButtonType.Check) { checkedState = GroupColorButton.KryptonCommand?.Checked ?? GroupColorButton.Checked; } @@ -495,7 +495,7 @@ private void UpdateCheckedState() private void UpdateDropDownState() { // Only show the drop down if the button is the correct type - var dropDown = GroupColorButton.ButtonType is GroupButtonType.DropDown or GroupButtonType.Split; + var dropDown = GroupColorButton!.ButtonType is GroupButtonType.DropDown or GroupButtonType.Split; // Only show text line 2 separators is a drop down is showing with no text var separators = dropDown && (!string.IsNullOrEmpty(GroupColorButton.TextLine2)); @@ -511,7 +511,7 @@ private void UpdateDropDownState() _viewMediumSmallText2Sep3.Visible = dropDown; } - private void UpdateItemSizeState() => UpdateItemSizeState(GroupColorButton.ItemSizeCurrent); + private void UpdateItemSizeState() => UpdateItemSizeState(GroupColorButton!.ItemSizeCurrent); private void UpdateItemSizeState(GroupItemSize size) { @@ -534,17 +534,17 @@ private void UpdateItemSizeState(GroupItemSize size) } } - private void OnLargeButtonClick(object sender, EventArgs e) => GroupColorButton.PerformClick(_viewLarge.FinishDelegate); + private void OnLargeButtonClick(object? sender, EventArgs e) => GroupColorButton!.PerformClick(_viewLarge.FinishDelegate); - private void OnLargeButtonDropDown(object sender, EventArgs e) => GroupColorButton.PerformDropDown(_viewLarge.FinishDelegate); + private void OnLargeButtonDropDown(object? sender, EventArgs e) => GroupColorButton!.PerformDropDown(_viewLarge.FinishDelegate); - private void OnMediumSmallButtonClick(object sender, EventArgs e) => GroupColorButton.PerformClick(_viewMediumSmall.FinishDelegate); + private void OnMediumSmallButtonClick(object? sender, EventArgs e) => GroupColorButton!.PerformClick(_viewMediumSmall.FinishDelegate); - private void OnMediumSmallButtonDropDown(object sender, EventArgs e) => GroupColorButton.PerformDropDown(_viewMediumSmall.FinishDelegate); + private void OnMediumSmallButtonDropDown(object? sender, EventArgs e) => GroupColorButton!.PerformDropDown(_viewMediumSmall.FinishDelegate); - private void OnContextClick(object sender, MouseEventArgs e) => GroupColorButton.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupColorButton!.OnDesignTimeContextMenu(e); - private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnButtonPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; @@ -613,7 +613,7 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupColorButton.RibbonTab != null) && + if ((GroupColorButton!.RibbonTab != null) && (_ribbon.SelectedTab == GroupColorButton.RibbonTab)) { // ...layout so the visible change is made @@ -624,7 +624,7 @@ private void OnButtonPropertyChanged(object sender, PropertyChangedEventArgs e) if (updatePaint) { // If this button is actually defined as visible... - if (GroupColorButton.Visible || _ribbon.InDesignMode) + if (GroupColorButton!.Visible || _ribbon.InDesignMode) { // ...and on the currently selected tab then... if ((GroupColorButton.RibbonTab != null) && diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonImage.cs index 04bb30ec7..d1aba79a2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -25,7 +25,7 @@ internal class ViewDrawRibbonGroupColorButtonImage : ViewDrawRibbonGroupImageBas private readonly Size _largeSize;//new Size(32, 32); private readonly KryptonRibbonGroupColorButton _ribbonColorButton; private readonly bool _large; - private Image _compositeImage; + private Image? _compositeImage; private Color _selectedColor; private Color _emptyBorderColor; private Rectangle _selectedRectSmall; @@ -39,14 +39,14 @@ internal class ViewDrawRibbonGroupColorButtonImage : ViewDrawRibbonGroupImageBas /// Reference to owning ribbon control. /// Reference to ribbon group color button definition. /// Show the large image. - public ViewDrawRibbonGroupColorButtonImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupColorButton ribbonColorButton, + public ViewDrawRibbonGroupColorButtonImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupColorButton? ribbonColorButton, bool large) : base(ribbon) { - Debug.Assert(ribbonColorButton != null); + Debug.Assert(ribbonColorButton is not null); - _ribbonColorButton = ribbonColorButton; + _ribbonColorButton = ribbonColorButton ?? throw new ArgumentNullException(nameof(ribbonColorButton)); _selectedColor = ribbonColorButton.SelectedColor; _emptyBorderColor = ribbonColorButton.EmptyBorderColor; _selectedRectSmall = ribbonColorButton.SelectedRectSmall; @@ -96,7 +96,7 @@ public void SelectedColorRectChanged() /// /// Gets the image to be drawn. /// - protected override Image DrawImage + protected override Image? DrawImage { get { diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonText.cs index 0721bd5fd..758ca466e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupColorButtonText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupColorButtonText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupColorButton _ribbonColorButton; private readonly RibbonGroupNormalDisabledTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _firstText; private int _heightExtra; private Size _preferredSize; @@ -41,15 +41,15 @@ internal class ViewDrawRibbonGroupColorButtonText : ViewLeaf, /// Source ribbon control. /// Group color button to display title for. /// Should show the first button text. - public ViewDrawRibbonGroupColorButtonText([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupColorButton ribbonColorButton, + public ViewDrawRibbonGroupColorButtonText([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupColorButton? ribbonColorButton, bool firstText) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonColorButton != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonColorButton is not null); - _ribbon = ribbon; - _ribbonColorButton = ribbonColorButton; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonColorButton = ribbonColorButton ?? throw new ArgumentNullException(nameof(ribbonColorButton)); _firstText = firstText; // Use a class to convert from ribbon group to content interface @@ -103,14 +103,19 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // A change in state always causes a size and layout calculation if (_cacheState != State) { @@ -124,7 +129,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -149,10 +154,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -182,7 +197,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -196,8 +211,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -210,7 +230,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupComboBox.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupComboBox.cs index 11877372f..41738557f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupComboBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupComboBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,11 +21,11 @@ internal class ViewDrawRibbonGroupComboBox : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; private ViewDrawRibbonGroup? _activeGroup; private readonly ComboBoxController? _controller; - private readonly NeedPaintHandler _needPaint; + private readonly NeedPaintHandler? _needPaint; private GroupItemSize _currentSize; #endregion @@ -36,18 +36,18 @@ internal class ViewDrawRibbonGroupComboBox : ViewComposite, /// Reference to owning ribbon control. /// Reference to source combobox. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupComboBox([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupComboBox ribbonComboBox, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupComboBox([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupComboBox? ribbonComboBox, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonComboBox != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonComboBox is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupComboBox = ribbonComboBox; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupComboBox = ribbonComboBox ?? throw new ArgumentNullException(nameof(ribbonComboBox)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupComboBox.ItemSizeCurrent; // Hook into the combobox events @@ -59,7 +59,7 @@ public ViewDrawRibbonGroupComboBox([DisallowNull] KryptonRibbon ribbon, if (_ribbon.InDesignMode) { - // At design time we need to know when the user right clicks the combobox + // At design time we need to know when the user right-clicks the combobox var controller = new ContextClickController(); controller.ContextClick += OnContextClick; MouseController = controller; @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupComboBox([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the combobox for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the combo box definition @@ -80,10 +80,14 @@ public ViewDrawRibbonGroupComboBox([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to combobox so its palette changes are redrawn GroupComboBox.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupComboBox.ComboBox); + UpdateVisible(GroupComboBox.ComboBox); + // Hook into changes in the ribbon custom definition GroupComboBox.PropertyChanged += OnComboBoxPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -109,7 +113,7 @@ protected override void Dispose(bool disposing) GroupComboBox.MouseLeaveControl -= OnMouseLeaveControl; GroupComboBox.ViewPaintDelegate = null; GroupComboBox.PropertyChanged -= OnComboBoxPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -138,7 +142,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupComboBox.ComboBox); + _ribbon.HideFocus(GroupComboBox?.ComboBox); base.LostFocus(c); } #endregion @@ -148,7 +152,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupComboBox is { Visible: true, LastComboBox.ComboBox.CanSelect: true }) { @@ -156,7 +160,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -166,7 +170,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (GroupComboBox is { Visible: true, LastComboBox.ComboBox.CanSelect: true }) { @@ -174,7 +178,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -186,11 +190,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -201,11 +205,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -218,7 +222,7 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastComboBox.CanFocus) + if (Visible && LastComboBox!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -226,7 +230,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) // Determine the screen position of the key tip var screenPt = Point.Empty; - // Determine the screen position of the key tip dependant on item location/size + // Determine the screen position of the key tip dependent on item location/size switch (_currentSize) { case GroupItemSize.Large: @@ -238,7 +242,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupComboBox.Enabled, + keyTipList.Add(new KeyTipInfo(GroupComboBox!.Enabled, GroupComboBox.KeyTip, screenPt, ClientRectangle, @@ -257,7 +261,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupComboBox.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupComboBox!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -268,7 +272,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a combobox associated then ask for its requested size if (LastComboBox != null) @@ -283,7 +287,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -302,10 +306,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastComboBox?.SetBounds(ClientLocation.X + 1, @@ -329,7 +333,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a combobox - if (GroupComboBox.ComboBox == null) + if (GroupComboBox?.ComboBox == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -340,7 +344,7 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the combobox will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context!.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); context.Graphics.DrawRectangle(Pens.Gold, drawRect); } } @@ -374,9 +378,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupComboBox.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupComboBox?.OnDesignTimeContextMenu(e); - private void OnComboBoxPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnComboBoxPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -398,7 +402,7 @@ private void OnComboBoxPropertyChanged(object sender, PropertyChangedEventArgs e if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupComboBox.RibbonTab != null) && + if ((GroupComboBox?.RibbonTab != null) && (_ribbon.SelectedTab == GroupComboBox.RibbonTab)) { // ...layout so the visible change is made @@ -410,7 +414,7 @@ private void OnComboBoxPropertyChanged(object sender, PropertyChangedEventArgs e #pragma warning disable 162 { // If this button is actually defined as visible... - if (GroupComboBox.Visible || _ribbon.InDesignMode) + if (GroupComboBox!.Visible || _ribbon.InDesignMode) { // ...and on the currently selected tab then... if ((GroupComboBox.RibbonTab != null) && @@ -427,13 +431,13 @@ private void OnComboBoxPropertyChanged(object sender, PropertyChangedEventArgs e private Control? LastParentControl { get => GroupComboBox?.LastParentControl; - set => GroupComboBox.LastParentControl = value; + set => GroupComboBox!.LastParentControl = value; } private KryptonComboBox? LastComboBox { get => GroupComboBox?.LastComboBox; - set => GroupComboBox.LastComboBox = value; + set => GroupComboBox!.LastComboBox = value; } private void UpdateParent(Control parentControl) @@ -444,7 +448,7 @@ private void UpdateParent(Control parentControl) (LastComboBox != GroupComboBox?.ComboBox)) { // We only modify the parent and visible state if processing for correct container - if ((GroupComboBox.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupComboBox!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupComboBox.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custom control to a parent before @@ -484,10 +488,10 @@ private void UpdateEnabled(Control? c) if (c != null) { // Start with the enabled state of the group element - var enabled = GroupComboBox.Enabled; + var enabled = GroupComboBox!.Enabled; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupComboBox.ComboBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupComboBox?.ComboBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value enabled = GroupComboBox.ComboBoxDesigner.DesignEnabled; @@ -502,10 +506,10 @@ private bool ActualVisible(Control? c) if (c != null) { // Start with the visible state of the group element - var visible = GroupComboBox.Visible; + var visible = GroupComboBox!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupComboBox.ComboBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupComboBox?.ComboBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupComboBox.ComboBoxDesigner.DesignVisible; @@ -522,10 +526,10 @@ private void UpdateVisible(Control? c) if (c != null) { // Start with the visible state of the group element - var visible = GroupComboBox.Visible; + var visible = GroupComboBox!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupComboBox.ComboBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupComboBox?.ComboBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupComboBox.ComboBoxDesigner.DesignVisible; @@ -534,7 +538,7 @@ private void UpdateVisible(Control? c) if (visible) { // Only visible if on the currently selected page - if ((GroupComboBox.RibbonTab == null) || + if ((GroupComboBox?.RibbonTab == null) || (_ribbon.SelectedTab != GroupComboBox.RibbonTab)) { visible = false; @@ -551,7 +555,7 @@ private void UpdateVisible(Control? c) else { // Check that the group is not collapsed - if (GroupComboBox.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupComboBox.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupComboBox.ComboBox) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupComboBox.ComboBox) is VisualPopupMinimized))) { @@ -573,7 +577,7 @@ private void UpdateVisible(Control? c) } // Move up a level - container = container.RibbonContainer; + container = container.RibbonContainer!; } } } @@ -584,7 +588,7 @@ private void UpdateVisible(Control? c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupComboBox != null) @@ -594,7 +598,7 @@ private void OnLayoutAction(object sender, EventArgs e) } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; @@ -619,17 +623,17 @@ private void OnMouseEnterControl(object sender, EventArgs e) if (_activeGroup != null) { _activeGroup.Tracking = true; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint?.Invoke(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) { _activeGroup.Tracking = false; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint?.Invoke(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); _activeGroup = null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCustomControl.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCustomControl.cs index 6361a29d0..990a98859 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCustomControl.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupCustomControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,9 +21,9 @@ internal class ViewDrawRibbonGroupCustomControl : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; + private ViewDrawRibbonGroup? _activeGroup; private readonly CustomControlController? _controller; private readonly NeedPaintHandler _needPaint; private GroupItemSize _currentSize; @@ -36,18 +36,18 @@ internal class ViewDrawRibbonGroupCustomControl : ViewComposite, /// Reference to owning ribbon control. /// Reference to source custom definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupCustomControl([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupCustomControl ribbonCustom, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupCustomControl([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupCustomControl? ribbonCustom, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonCustom != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonCustom is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupCustomControl = ribbonCustom; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupCustomControl = ribbonCustom ?? throw new ArgumentNullException(nameof(ribbonCustom)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupCustomControl.ItemSizeCurrent; // Hook into the custom control events @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupCustomControl([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the custom control for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Provide back reference to the custom control definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupCustomControl([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to label so its palette changes are redrawn GroupCustomControl.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupCustomControl.CustomControl); + UpdateVisible(GroupCustomControl.CustomControl); + // Hook into changes in the ribbon custom definition GroupCustomControl.PropertyChanged += OnCustomPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -108,11 +112,11 @@ protected override void Dispose(bool disposing) GroupCustomControl.MouseLeaveControl -= OnMouseLeaveControl; GroupCustomControl.ViewPaintDelegate = null; GroupCustomControl.PropertyChanged -= OnCustomPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition - GroupCustomControl.CustomControlView = null; + GroupCustomControl.CustomControlView = null!; GroupCustomControl = null; } } @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group custom instance. /// - public KryptonRibbonGroupCustomControl GroupCustomControl { get; private set; } + public KryptonRibbonGroupCustomControl? GroupCustomControl { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupCustomControl.CustomControl); + _ribbon.HideFocus(GroupCustomControl!.CustomControl); base.LostFocus(c); } #endregion @@ -147,7 +151,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupCustomControl is { Visible: true, LastCustomControl: { CanSelect: true } }) { @@ -155,7 +159,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -165,7 +169,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. /// /// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (GroupCustomControl is { Visible: true, LastCustomControl: { CanSelect: true } }) { @@ -173,7 +177,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -185,11 +189,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -200,11 +204,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -237,7 +241,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupCustomControl.Enabled, + keyTipList.Add(new KeyTipInfo(GroupCustomControl!.Enabled, GroupCustomControl.KeyTip, screenPt, ClientRectangle, @@ -256,7 +260,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupCustomControl.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupCustomControl!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -267,7 +271,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a custom control associated then ask for its requested size if (LastCustomControl != null) @@ -282,7 +286,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -301,10 +305,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastCustomControl?.SetBounds(ClientLocation.X + 1, @@ -328,7 +332,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a custom control - if (GroupCustomControl.CustomControl == null) + if (GroupCustomControl!.CustomControl == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -339,7 +343,7 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the custom control will be - context.Graphics.FillRectangle(Brushes.Salmon, drawRect); + context!.Graphics.FillRectangle(Brushes.Salmon, drawRect); context.Graphics.DrawRectangle(Pens.Red, drawRect); } } @@ -373,9 +377,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupCustomControl.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupCustomControl!.OnDesignTimeContextMenu(e); - private void OnCustomPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnCustomPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -383,10 +387,10 @@ private void OnCustomPropertyChanged(object sender, PropertyChangedEventArgs e) switch (e.PropertyName) { case nameof(Enabled): - UpdateEnabled(LastCustomControl); + UpdateEnabled(LastCustomControl!); break; case nameof(Visible): - UpdateVisible(LastCustomControl); + UpdateVisible(LastCustomControl!); updateLayout = true; break; case "CustomControl": @@ -397,7 +401,7 @@ private void OnCustomPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupCustomControl.RibbonTab != null) && + if ((GroupCustomControl!.RibbonTab != null) && (_ribbon.SelectedTab == GroupCustomControl.RibbonTab)) { // ...layout so the visible change is made @@ -425,14 +429,14 @@ private void OnCustomPropertyChanged(object sender, PropertyChangedEventArgs e) private Control LastParentControl { - get => GroupCustomControl.LastParentControl; - set => GroupCustomControl.LastParentControl = value; + get => GroupCustomControl!.LastParentControl; + set => GroupCustomControl!.LastParentControl = value; } private Control? LastCustomControl { - get => GroupCustomControl.LastCustomControl; - set => GroupCustomControl.LastCustomControl = value; + get => GroupCustomControl!.LastCustomControl; + set => GroupCustomControl!.LastCustomControl = value; } private void UpdateParent(Control parentControl) @@ -440,10 +444,10 @@ private void UpdateParent(Control parentControl) // Is there a change in the custom control or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastCustomControl != GroupCustomControl.CustomControl)) + (LastCustomControl != GroupCustomControl!.CustomControl)) { // We only modify the parent and visible state if processing for correct container - if ((GroupCustomControl.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupCustomControl!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupCustomControl.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custrom control to a parent before @@ -478,15 +482,15 @@ private void UpdateParent(Control parentControl) } } - private void UpdateEnabled(Control c) + private void UpdateEnabled(Control? c) { if (c != null) { // Start with the enabled state of the group element - var enabled = GroupCustomControl.Enabled; + var enabled = GroupCustomControl!.Enabled; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupCustomControl.CustomControlDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupCustomControl?.CustomControlDesigner != null)) { // And we are not using the design helpers, then use the design specified value enabled = GroupCustomControl.CustomControlDesigner.DesignEnabled; @@ -496,15 +500,15 @@ private void UpdateEnabled(Control c) } } - private bool ActualVisible(Control c) + private bool ActualVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupCustomControl.Visible; + var visible = GroupCustomControl!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupCustomControl.CustomControlDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupCustomControl?.CustomControlDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupCustomControl.CustomControlDesigner.DesignVisible; @@ -516,15 +520,15 @@ private bool ActualVisible(Control c) return false; } - private void UpdateVisible(Control c) + private void UpdateVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupCustomControl.Visible; + var visible = GroupCustomControl!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupCustomControl.CustomControlDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupCustomControl?.CustomControlDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupCustomControl.CustomControlDesigner.DesignVisible; @@ -533,7 +537,7 @@ private void UpdateVisible(Control c) if (visible) { // Only visible if on the currently selected page - if ((GroupCustomControl.RibbonTab == null) || + if ((GroupCustomControl?.RibbonTab == null) || (_ribbon.SelectedTab != GroupCustomControl.RibbonTab)) { visible = false; @@ -548,7 +552,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupCustomControl.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupCustomControl.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupCustomControl.LastCustomControl) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupCustomControl.LastCustomControl) is VisualPopupMinimized))) { @@ -570,7 +574,7 @@ private void UpdateVisible(Control c) } // Move up a level - container = container.RibbonContainer; + container = container.RibbonContainer!; } } } @@ -581,27 +585,27 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupCustomControl != null) { // Change in selected tab requires a retest of the control visibility/enabled - UpdateVisible(LastCustomControl); - UpdateEnabled(LastCustomControl); + UpdateVisible(LastCustomControl!); + UpdateEnabled(LastCustomControl!); } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + ViewBase? parent = Parent; // Keep going till we get to the top or find a group - while (parent != null) + while (parent is not null) { if (parent is ViewDrawRibbonGroup popGroup) { @@ -621,7 +625,7 @@ private void OnMouseEnterControl(object sender, EventArgs e) } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDateTimePicker.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDateTimePicker.cs index ff670285a..a28922056 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDateTimePicker.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDateTimePicker.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,9 +21,9 @@ internal class ViewDrawRibbonGroupDateTimePicker : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; + private ViewDrawRibbonGroup? _activeGroup; private readonly DateTimePickerController? _controller; private readonly NeedPaintHandler _needPaint; private GroupItemSize _currentSize; @@ -36,18 +36,18 @@ internal class ViewDrawRibbonGroupDateTimePicker : ViewComposite, /// Reference to owning ribbon control. /// Reference to source date time picker. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupDateTimePicker([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupDateTimePicker ribbonDateTimePicker, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupDateTimePicker([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupDateTimePicker? ribbonDateTimePicker, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonDateTimePicker != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonDateTimePicker is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupDateTimePicker = ribbonDateTimePicker; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupDateTimePicker = ribbonDateTimePicker ?? throw new (nameof(ribbonDateTimePicker)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupDateTimePicker.ItemSizeCurrent; // Hook into the date time picker events @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupDateTimePicker([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the date time picker for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the text box definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupDateTimePicker([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to date time picker so its palette changes are redrawn GroupDateTimePicker.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupDateTimePicker.DateTimePicker); + UpdateVisible(GroupDateTimePicker.DateTimePicker); + // Hook into changes in the ribbon custom definition GroupDateTimePicker.PropertyChanged += OnDateTimePickerPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -101,18 +105,18 @@ protected override void Dispose(bool disposing) { if (disposing) { - if (GroupDateTimePicker != null) + if (GroupDateTimePicker is not null) { // Must unhook to prevent memory leaks GroupDateTimePicker.MouseEnterControl -= OnMouseEnterControl; GroupDateTimePicker.MouseLeaveControl -= OnMouseLeaveControl; GroupDateTimePicker.ViewPaintDelegate = null; GroupDateTimePicker.PropertyChanged -= OnDateTimePickerPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition - GroupDateTimePicker.DateTimePickerView = null; + GroupDateTimePicker.DateTimePickerView = null!; GroupDateTimePicker = null; } } @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group date time picker instance. /// - public KryptonRibbonGroupDateTimePicker GroupDateTimePicker { get; private set; } + public KryptonRibbonGroupDateTimePicker? GroupDateTimePicker { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupDateTimePicker.DateTimePicker); + _ribbon.HideFocus(GroupDateTimePicker!.DateTimePicker); base.LostFocus(c); } #endregion @@ -147,7 +151,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupDateTimePicker is { Visible: true, LastDateTimePicker: { CanSelect: true } }) { @@ -155,7 +159,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -165,7 +169,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. /// /// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (GroupDateTimePicker is { Visible: true, LastDateTimePicker: { CanSelect: true } }) { @@ -173,7 +177,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -185,11 +189,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -200,11 +204,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -217,7 +221,7 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastDateTimePicker.CanFocus) + if (Visible && LastDateTimePicker!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -237,7 +241,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupDateTimePicker.Enabled, + keyTipList.Add(new KeyTipInfo(GroupDateTimePicker!.Enabled, GroupDateTimePicker.KeyTip, screenPt, ClientRectangle, @@ -256,7 +260,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupDateTimePicker.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupDateTimePicker!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -267,7 +271,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a date time picker associated then ask for its requested size if (LastDateTimePicker != null) @@ -282,7 +286,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -301,10 +305,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastDateTimePicker?.SetBounds(ClientLocation.X + 1, @@ -328,7 +332,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a date time picker - if (GroupDateTimePicker.DateTimePicker == null) + if (GroupDateTimePicker!.DateTimePicker == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -339,7 +343,7 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the date time picker will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context!.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); context.Graphics.DrawRectangle(Pens.Gold, drawRect); } } @@ -373,9 +377,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupDateTimePicker.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupDateTimePicker!.OnDesignTimeContextMenu(e); - private void OnDateTimePickerPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnDateTimePickerPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -383,10 +387,10 @@ private void OnDateTimePickerPropertyChanged(object sender, PropertyChangedEvent switch (e.PropertyName) { case nameof(Enabled): - UpdateEnabled(LastDateTimePicker); + UpdateEnabled(LastDateTimePicker!); break; case nameof(Visible): - UpdateVisible(LastDateTimePicker); + UpdateVisible(LastDateTimePicker!); updateLayout = true; break; case "CustomControl": @@ -397,8 +401,8 @@ private void OnDateTimePickerPropertyChanged(object sender, PropertyChangedEvent if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupDateTimePicker.RibbonTab != null) && - (_ribbon.SelectedTab == GroupDateTimePicker.RibbonTab)) + if ((GroupDateTimePicker!.RibbonTab != null) && + (_ribbon.SelectedTab == GroupDateTimePicker!.RibbonTab)) { // ...layout so the visible change is made OnNeedPaint(true); @@ -425,14 +429,14 @@ private void OnDateTimePickerPropertyChanged(object sender, PropertyChangedEvent private Control LastParentControl { - get => GroupDateTimePicker.LastParentControl; - set => GroupDateTimePicker.LastParentControl = value; + get => GroupDateTimePicker!.LastParentControl; + set => GroupDateTimePicker!.LastParentControl = value; } private KryptonDateTimePicker? LastDateTimePicker { - get => GroupDateTimePicker.LastDateTimePicker; - set => GroupDateTimePicker.LastDateTimePicker = value; + get => GroupDateTimePicker!.LastDateTimePicker; + set => GroupDateTimePicker!.LastDateTimePicker = value; } private void UpdateParent(Control parentControl) @@ -440,10 +444,10 @@ private void UpdateParent(Control parentControl) // Is there a change in the date time picker or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastDateTimePicker != GroupDateTimePicker.DateTimePicker)) + (LastDateTimePicker != GroupDateTimePicker!.DateTimePicker)) { // We only modify the parent and visible state if processing for correct container - if ((GroupDateTimePicker.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupDateTimePicker!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupDateTimePicker.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custrom control to a parent before @@ -477,15 +481,15 @@ private void UpdateParent(Control parentControl) } } - private void UpdateEnabled(Control c) + private void UpdateEnabled(Control? c) { if (c != null) { // Start with the enabled state of the group element - var enabled = GroupDateTimePicker.Enabled; + var enabled = GroupDateTimePicker!.Enabled; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupDateTimePicker.DateTimePickerDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupDateTimePicker?.DateTimePickerDesigner != null)) { // And we are not using the design helpers, then use the design specified value enabled = GroupDateTimePicker.DateTimePickerDesigner.DesignEnabled; @@ -495,15 +499,15 @@ private void UpdateEnabled(Control c) } } - private bool ActualVisible(Control c) + private bool ActualVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupDateTimePicker.Visible; + var visible = GroupDateTimePicker!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupDateTimePicker.DateTimePickerDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupDateTimePicker?.DateTimePickerDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupDateTimePicker.DateTimePickerDesigner.DesignVisible; @@ -520,7 +524,7 @@ private void UpdateVisible(Control c) if (c != null) { // Start with the visible state of the group element - var visible = GroupDateTimePicker.Visible; + var visible = GroupDateTimePicker!.Visible; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupDateTimePicker.DateTimePickerDesigner != null)) @@ -547,7 +551,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupDateTimePicker.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupDateTimePicker.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupDateTimePicker.DateTimePicker) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupDateTimePicker.DateTimePicker) is VisualPopupMinimized))) { @@ -569,7 +573,7 @@ private void UpdateVisible(Control c) } // Move up a level - container = container.RibbonContainer; + container = container.RibbonContainer!; } } } @@ -580,26 +584,26 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupDateTimePicker != null) { // Change in selected tab requires a retest of the control visibility - UpdateVisible(LastDateTimePicker); + UpdateVisible(LastDateTimePicker!); } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + ViewBase? parent = Parent; // Keep going till we get to the top or find a group - while (parent != null) + while (parent is not null) { if (parent is ViewDrawRibbonGroup popGroup) { @@ -619,7 +623,7 @@ private void OnMouseEnterControl(object sender, EventArgs e) } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDialogButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDialogButton.cs index 25a1a3dcc..53c296e0f 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDialogButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDialogButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -36,19 +36,19 @@ internal class ViewDrawRibbonGroupDialogButton : ViewLeaf /// Reference to owning ribbon control. /// Reference to ribbon group this represents. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupDialogButton([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroup ribbonGroup, - NeedPaintHandler needPaint) + public ViewDrawRibbonGroupDialogButton([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroup? ribbonGroup, + NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonGroup != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonGroup is not null); // Remember incoming references - _ribbon = ribbon; - _ribbonGroup = ribbonGroup; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonGroup = ribbonGroup ?? throw new ArgumentNullException(nameof(ribbonGroup)); // Attach a controller to this element for the pressing of the button - var controller = new DialogLauncherButtonController(ribbon, this, needPaint); + var controller = new DialogLauncherButtonController(ribbon, this, needPaint!); controller.Click += OnClick; MouseController = controller; SourceController = controller; @@ -110,7 +110,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion @@ -119,10 +119,15 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + IPaletteBack paletteBack = _ribbon.StateCommon.RibbonGroupDialogButton.PaletteBack; - IPaletteBorder paletteBorder = _ribbon.StateCommon.RibbonGroupDialogButton.PaletteBorder; + IPaletteBorder paletteBorder = _ribbon.StateCommon.RibbonGroupDialogButton.PaletteBorder!; IPaletteRibbonGeneral paletteGeneral = _ribbon.StateCommon.RibbonGeneral; // Do we need to draw the background? @@ -136,6 +141,7 @@ public override void RenderBefore(RenderContext context) Rectangle enclosingRect = CommonHelper.ApplyPadding(VisualOrientation.Top, ClientRectangle, borderPadding); // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, paletteBorder.GetBorderGraphicsHint(PaletteState.Normal)); _mementoBack = context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, paletteBack, VisualOrientation.Top, State, _mementoBack); @@ -158,7 +164,7 @@ public override void RenderBefore(RenderContext context) #endregion #region Implementation - private void OnClick(object sender, MouseEventArgs e) + private void OnClick(object? sender, MouseEventArgs e) { // We do not operate the dialog launcher at design time if (!_ribbon.InDesignMode) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDomainUpDown.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDomainUpDown.cs index cf74ad162..8af75b9af 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDomainUpDown.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupDomainUpDown.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,10 +21,10 @@ internal class ViewDrawRibbonGroupDomainUpDown : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; - private readonly DomainUpDownController? _controller; + private ViewDrawRibbonGroup? _activeGroup; + private readonly DomainUpDownController _controller; private readonly NeedPaintHandler _needPaint; private GroupItemSize _currentSize; #endregion @@ -36,18 +36,18 @@ internal class ViewDrawRibbonGroupDomainUpDown : ViewComposite, /// Reference to owning ribbon control. /// Reference to source domain up-down. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupDomainUpDown([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupDomainUpDown ribbonDomainUpDown, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupDomainUpDown([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupDomainUpDown? ribbonDomainUpDown, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonDomainUpDown != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonDomainUpDown is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupDomainUpDown = ribbonDomainUpDown; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupDomainUpDown = ribbonDomainUpDown ?? throw new ArgumentNullException(nameof(ribbonDomainUpDown)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupDomainUpDown.ItemSizeCurrent; // Hook into the domain up-down events @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupDomainUpDown([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the domain up-down for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the domain up-down definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupDomainUpDown([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to domain up-down so its palette changes are redrawn GroupDomainUpDown.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupDomainUpDown.DomainUpDown); + UpdateVisible(GroupDomainUpDown.DomainUpDown); + // Hook into changes in the ribbon custom definition GroupDomainUpDown.PropertyChanged += OnDomainUpDownPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -108,7 +112,7 @@ protected override void Dispose(bool disposing) GroupDomainUpDown.MouseLeaveControl -= OnMouseLeaveControl; GroupDomainUpDown.ViewPaintDelegate = null; GroupDomainUpDown.PropertyChanged -= OnDomainUpDownPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group domain up-down instance. /// - public KryptonRibbonGroupDomainUpDown GroupDomainUpDown { get; private set; } + public KryptonRibbonGroupDomainUpDown? GroupDomainUpDown { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupDomainUpDown.DomainUpDown); + _ribbon.HideFocus(GroupDomainUpDown!.DomainUpDown); base.LostFocus(c); } #endregion @@ -147,7 +151,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupDomainUpDown is { Visible: true, LastDomainUpDown.DomainUpDown.CanSelect: true }) { @@ -155,7 +159,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -165,9 +169,9 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() => GroupDomainUpDown is { Visible: true, LastDomainUpDown.DomainUpDown.CanSelect: true } + public ViewBase GetLastFocusItem() => GroupDomainUpDown is { Visible: true, LastDomainUpDown.DomainUpDown.CanSelect: true } ? this - : null; + : null!; #endregion #region GetNextFocusItem @@ -177,11 +181,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -192,11 +196,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -209,7 +213,7 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastDomainUpDown.CanFocus) + if (Visible && LastDomainUpDown!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -229,7 +233,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupDomainUpDown.Enabled, + keyTipList.Add(new KeyTipInfo(GroupDomainUpDown!.Enabled, GroupDomainUpDown.KeyTip, screenPt, ClientRectangle, @@ -248,7 +252,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupDomainUpDown.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupDomainUpDown!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -259,7 +263,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a domain up-down associated then ask for its requested size if (LastDomainUpDown != null) @@ -274,7 +278,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -293,10 +297,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastDomainUpDown?.SetBounds(ClientLocation.X + 1, @@ -320,7 +324,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a domain up-down - if (GroupDomainUpDown.DomainUpDown == null) + if (GroupDomainUpDown!.DomainUpDown == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -331,7 +335,7 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the domain up-down will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context!.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); context.Graphics.DrawRectangle(Pens.Gold, drawRect); } } @@ -365,9 +369,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupDomainUpDown.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupDomainUpDown!.OnDesignTimeContextMenu(e); - private void OnDomainUpDownPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnDomainUpDownPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -375,10 +379,10 @@ private void OnDomainUpDownPropertyChanged(object sender, PropertyChangedEventAr switch (e.PropertyName) { case nameof(Enabled): - UpdateEnabled(LastDomainUpDown); + UpdateEnabled(LastDomainUpDown!); break; case nameof(Visible): - UpdateVisible(LastDomainUpDown); + UpdateVisible(LastDomainUpDown!); updateLayout = true; break; case "CustomControl": @@ -389,7 +393,7 @@ private void OnDomainUpDownPropertyChanged(object sender, PropertyChangedEventAr if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupDomainUpDown.RibbonTab != null) && + if ((GroupDomainUpDown!.RibbonTab != null) && (_ribbon.SelectedTab == GroupDomainUpDown.RibbonTab)) { // ...layout so the visible change is made @@ -417,14 +421,14 @@ private void OnDomainUpDownPropertyChanged(object sender, PropertyChangedEventAr private Control LastParentControl { - get => GroupDomainUpDown.LastParentControl; - set => GroupDomainUpDown.LastParentControl = value; + get => GroupDomainUpDown!.LastParentControl; + set => GroupDomainUpDown!.LastParentControl = value; } private KryptonDomainUpDown? LastDomainUpDown { - get => GroupDomainUpDown.LastDomainUpDown; - set => GroupDomainUpDown.LastDomainUpDown = value; + get => GroupDomainUpDown!.LastDomainUpDown; + set => GroupDomainUpDown!.LastDomainUpDown = value; } private void UpdateParent(Control parentControl) @@ -432,10 +436,10 @@ private void UpdateParent(Control parentControl) // Is there a change in the domain up-down or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastDomainUpDown != GroupDomainUpDown.DomainUpDown)) + (LastDomainUpDown != GroupDomainUpDown!.DomainUpDown)) { // We only modify the parent and visible state if processing for correct container - if ((GroupDomainUpDown.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupDomainUpDown!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupDomainUpDown.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custrom control to a parent before @@ -469,15 +473,15 @@ private void UpdateParent(Control parentControl) } } - private void UpdateEnabled(Control c) + private void UpdateEnabled(Control? c) { if (c != null) { // Start with the enabled state of the group element - var enabled = GroupDomainUpDown.Enabled; + var enabled = GroupDomainUpDown!.Enabled; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupDomainUpDown.DomainUpDownDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupDomainUpDown?.DomainUpDownDesigner != null)) { // And we are not using the design helpers, then use the design specified value enabled = GroupDomainUpDown.DomainUpDownDesigner.DesignEnabled; @@ -487,15 +491,15 @@ private void UpdateEnabled(Control c) } } - private bool ActualVisible(Control c) + private bool ActualVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupDomainUpDown.Visible; + var visible = GroupDomainUpDown!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupDomainUpDown.DomainUpDownDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupDomainUpDown?.DomainUpDownDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupDomainUpDown.DomainUpDownDesigner.DesignVisible; @@ -507,15 +511,15 @@ private bool ActualVisible(Control c) return false; } - private void UpdateVisible(Control c) + private void UpdateVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupDomainUpDown.Visible; + var visible = GroupDomainUpDown!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupDomainUpDown.DomainUpDownDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupDomainUpDown?.DomainUpDownDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupDomainUpDown.DomainUpDownDesigner.DesignVisible; @@ -524,7 +528,7 @@ private void UpdateVisible(Control c) if (visible) { // Only visible if on the currently selected page - if ((GroupDomainUpDown.RibbonTab == null) || + if ((GroupDomainUpDown?.RibbonTab == null) || (_ribbon.SelectedTab != GroupDomainUpDown.RibbonTab)) { visible = false; @@ -539,7 +543,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupDomainUpDown.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupDomainUpDown.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupDomainUpDown.DomainUpDown) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupDomainUpDown.DomainUpDown) is VisualPopupMinimized))) { @@ -561,7 +565,7 @@ private void UpdateVisible(Control c) } // Move up a level - container = container.RibbonContainer; + container = container.RibbonContainer!; } } } @@ -572,26 +576,26 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupDomainUpDown != null) { // Change in selected tab requires a retest of the control visibility - UpdateVisible(LastDomainUpDown); + UpdateVisible(LastDomainUpDown!); } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + ViewBase? parent = Parent; // Keep going till we get to the top or find a group - while (parent != null) + while (parent is not null) { if (parent is ViewDrawRibbonGroup ribGroup) { @@ -604,14 +608,14 @@ private void OnMouseEnterControl(object sender, EventArgs e) } // If we found a group we are inside - if (_activeGroup != null) + if (_activeGroup is not null) { _activeGroup.Tracking = true; _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGallery.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGallery.cs index 3c2c3ed1b..1c7aaa87a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGallery.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGallery.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -22,12 +22,12 @@ internal class ViewDrawRibbonGroupGallery : ViewComposite, { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly Padding _largeImagePadding; // = new(3, 2, 3, 3); private readonly KryptonRibbon _ribbon; private ViewDrawRibbonGroup? _activeGroup; private readonly GalleryController? _controller; - private readonly NeedPaintHandler _needPaint; + private readonly NeedPaintHandler? _needPaint; private GroupItemSize _currentSize; private ViewDrawRibbonGroupButtonBackBorder _viewLarge; private ViewLayoutRibbonRowCenter _viewLargeCenter; @@ -46,18 +46,18 @@ internal class ViewDrawRibbonGroupGallery : ViewComposite, /// Reference to owning ribbon control. /// Reference to source gallery. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupGallery([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupGallery ribbonGallery, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupGallery([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupGallery? ribbonGallery, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonGallery != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonGallery is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupGallery = ribbonGallery; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupGallery = ribbonGallery ?? throw new ArgumentNullException(nameof(ribbonGallery)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupGallery.ItemSizeCurrent; // Create the button view used in small setting @@ -72,7 +72,7 @@ public ViewDrawRibbonGroupGallery([DisallowNull] KryptonRibbon ribbon, if (_ribbon.InDesignMode) { - // At design time we need to know when the user right clicks the gallery + // At design time we need to know when the user right-clicks the gallery var controller = new ContextClickController(); controller.ContextClick += OnContextClick; MouseController = controller; @@ -84,7 +84,7 @@ public ViewDrawRibbonGroupGallery([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the gallery for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the gallery definition @@ -93,9 +93,13 @@ public ViewDrawRibbonGroupGallery([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to gallery so its palette changes are redrawn GroupGallery.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupGallery.Gallery); + UpdateVisible(GroupGallery.Gallery); + // Hook into changes in the ribbon custom definition GroupGallery.PropertyChanged += OnGalleryPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); _largeImagePadding = new Padding((int)(3 * FactorDpiX), (int)(2 * FactorDpiY), (int)(3 * FactorDpiX), (int)(3 * FactorDpiY)); } @@ -127,7 +131,7 @@ protected override void Dispose(bool disposing) GroupGallery.MouseLeaveControl -= OnMouseLeaveControl; GroupGallery.ViewPaintDelegate = null; GroupGallery.PropertyChanged -= OnGalleryPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -144,7 +148,7 @@ protected override void Dispose(bool disposing) /// /// Perform action expected when a key tip is used to select the item. /// - public void KeyTipSelect() => GroupGallery.LastGallery?.ShownGalleryDropDown(GroupGallery.LastGallery.RectangleToScreen(GroupGallery.LastGallery.ClientRectangle), + public void KeyTipSelect() => GroupGallery?.LastGallery?.ShownGalleryDropDown(GroupGallery.LastGallery.RectangleToScreen(GroupGallery.LastGallery.ClientRectangle), KryptonContextMenuPositionH.Left, KryptonContextMenuPositionV.Top, null, @@ -177,7 +181,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (_viewLarge.Visible) { @@ -194,7 +198,7 @@ public override void LostFocus(Control c) } } - return null; + return null!; } #endregion @@ -203,7 +207,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (_viewLarge.Visible) { @@ -220,7 +224,7 @@ public override void LostFocus(Control c) } } - return null; + return null!; } #endregion @@ -231,10 +235,10 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { matched = (current == this) || (current == _viewLarge); - return null; + return null!; } #endregion @@ -245,10 +249,10 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { matched = (current == this) || (current == _viewLarge); - return null; + return null!; } #endregion @@ -271,7 +275,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) ClientRectangle, _viewLarge.Controller)); } - else if (LastGallery.CanFocus) + else if (LastGallery!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -294,9 +298,9 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) public ItemSizeWidth[] GetPossibleSizes(ViewLayoutContext context) { // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); - if (LastGallery != null) + if (LastGallery is not null) { Size originalItemSize = LastGallery.PreferredItemSize; GroupItemSize originalSize = _currentSize; @@ -305,7 +309,7 @@ public ItemSizeWidth[] GetPossibleSizes(ViewLayoutContext context) var results = new List(); // Are we allowed to be in the large size? - if (GroupGallery.ItemSizeMaximum == GroupItemSize.Large) + if (GroupGallery!.ItemSizeMaximum == GroupItemSize.Large) { // Allow a maximum of 39 steps between the large and medium values (with a minimum of 1) var step = Math.Max(1, (GroupGallery.LargeItemCount - GroupGallery.MediumItemCount) / 20); @@ -385,7 +389,7 @@ public ItemSizeWidth[] GetPossibleSizes(ViewLayoutContext context) } else { - return new ItemSizeWidth[] { new ItemSizeWidth(GroupItemSize.Large, NULL_CONTROL_WIDTH) }; + return [new ItemSizeWidth(GroupItemSize.Large, _nullControlWidth)]; } } @@ -396,7 +400,7 @@ public ItemSizeWidth[] GetPossibleSizes(ViewLayoutContext context) public void SetSolutionSize(ItemSizeWidth size) { // Update the container definition - GroupGallery.ItemSizeCurrent = size.GroupItemSize; + GroupGallery!.ItemSizeCurrent = size.GroupItemSize; GroupGallery.InternalItemCount = size.Tag; _viewLarge.Visible = size.GroupItemSize == GroupItemSize.Small; } @@ -407,7 +411,7 @@ public void SetSolutionSize(ItemSizeWidth size) public void ResetSolutionSize() { // Restore the container back to the defined size - GroupGallery.ItemSizeCurrent = GroupGallery.ItemSizeMaximum; + GroupGallery!.ItemSizeCurrent = GroupGallery.ItemSizeMaximum; GroupGallery.InternalItemCount = GroupGallery.LargeItemCount; _viewLarge.Visible = GroupGallery.ItemSizeCurrent == GroupItemSize.Small; } @@ -421,7 +425,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); if (_currentSize == GroupItemSize.Small) { @@ -442,7 +446,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } } @@ -462,10 +466,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastGallery?.SetBounds(ClientLocation.X + 1, @@ -489,7 +493,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a gallery - if (GroupGallery.Gallery == null) + if (GroupGallery?.Gallery == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -500,12 +504,12 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the gallery will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context!.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); context.Graphics.DrawRectangle(Pens.Gold, drawRect); } } - base.Render(context); + base.Render(context!); } #endregion @@ -539,10 +543,10 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) private void CreateLargeButtonView() { // Create the background and border view - _viewLarge = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupGallery, + _viewLarge = new ViewDrawRibbonGroupButtonBackBorder(_ribbon, GroupGallery!, _ribbon.StateCommon.RibbonGroupButton.PaletteBack, - _ribbon.StateCommon.RibbonGroupButton.PaletteBorder, - false, _needPaint) + _ribbon.StateCommon.RibbonGroupButton.PaletteBorder!, + false, _needPaint!) { ButtonType = GroupButtonType.DropDown }; @@ -557,7 +561,7 @@ private void CreateLargeButtonView() var contentLayout = new ViewLayoutDocker(); // Add the large button at the top - _viewLargeImage = new ViewDrawRibbonGroupGalleryImage(_ribbon, GroupGallery); + _viewLargeImage = new ViewDrawRibbonGroupGalleryImage(_ribbon, GroupGallery!); var largeImagePadding = new ViewLayoutRibbonCenterPadding(_largeImagePadding) { _viewLargeImage @@ -565,12 +569,12 @@ private void CreateLargeButtonView() contentLayout.Add(largeImagePadding, ViewDockStyle.Top); // Add the first line of text - _viewLargeText1 = new ViewDrawRibbonGroupGalleryText(_ribbon, GroupGallery, true); + _viewLargeText1 = new ViewDrawRibbonGroupGalleryText(_ribbon, GroupGallery!, true); contentLayout.Add(_viewLargeText1, ViewDockStyle.Bottom); // Add the second line of text _viewLargeCenter = new ViewLayoutRibbonRowCenter(); - _viewLargeText2 = new ViewDrawRibbonGroupGalleryText(_ribbon, GroupGallery, false); + _viewLargeText2 = new ViewDrawRibbonGroupGalleryText(_ribbon, GroupGallery!, false); _viewLargeDropArrow = new ViewDrawRibbonDropArrow(_ribbon); _viewLargeText2Sep1 = new ViewLayoutRibbonSeparator(4, false); _viewLargeText2Sep2 = new ViewLayoutRibbonSeparator(4, false); @@ -587,7 +591,7 @@ private void CreateLargeButtonView() _viewLarge.Add(contentLayout); // Create controller for intercepting events to determine tool tip handling - _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager?.ToolTipManager!, _viewLarge, _viewLarge.MouseController); // Add as a child view but as hidden, will become visible only in small mode @@ -595,15 +599,15 @@ private void CreateLargeButtonView() Add(_viewLarge); } - private void OnLargeButtonDropDown(object sender, EventArgs e) => GroupGallery.LastGallery.ShownGalleryDropDown(_ribbon.ViewRectangleToScreen(_viewLarge), + private void OnLargeButtonDropDown(object? sender, EventArgs e) => GroupGallery?.LastGallery?.ShownGalleryDropDown(_ribbon.ViewRectangleToScreen(_viewLarge), KryptonContextMenuPositionH.Left, KryptonContextMenuPositionV.Below, _viewLarge.FinishDelegate, GroupGallery.DropButtonItemWidth); - private void OnContextClick(object sender, MouseEventArgs e) => GroupGallery.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupGallery?.OnDesignTimeContextMenu(e); - private void OnGalleryPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnGalleryPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -643,7 +647,7 @@ private void OnGalleryPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupGallery.RibbonTab != null) && + if ((GroupGallery?.RibbonTab != null) && (_ribbon.SelectedTab == GroupGallery.RibbonTab)) { // ...layout so the visible change is made @@ -671,14 +675,14 @@ private void OnGalleryPropertyChanged(object sender, PropertyChangedEventArgs e) private Control? LastParentControl { - get => GroupGallery.LastParentControl; - set => GroupGallery.LastParentControl = value; + get => GroupGallery?.LastParentControl; + set => GroupGallery!.LastParentControl = value; } private KryptonGallery? LastGallery { - get => GroupGallery.LastGallery; - set => GroupGallery.LastGallery = value; + get => GroupGallery?.LastGallery; + set => GroupGallery!.LastGallery = value; } private void UpdateParent(Control parentControl) @@ -686,10 +690,10 @@ private void UpdateParent(Control parentControl) // Is there a change in the gallery or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastGallery != GroupGallery.Gallery)) + (LastGallery != GroupGallery?.Gallery)) { // We only modify the parent and visible state if processing for correct container - if ((GroupGallery.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupGallery!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupGallery.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custom control to a parent before @@ -741,7 +745,7 @@ private void UpdateEnabled(Control? c) if (c != null) { // Start with the enabled state of the group element - var enabled = GroupGallery.Enabled; + var enabled = GroupGallery!.Enabled; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupGallery.GalleryDesigner != null)) @@ -759,7 +763,7 @@ private bool ActualVisible(Control? c) if (c != null) { // Start with the visible state of the group element - var visible = GroupGallery.Visible; + var visible = GroupGallery!.Visible; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupGallery.GalleryDesigner != null)) @@ -779,7 +783,7 @@ private void UpdateVisible(Control? c) if (c != null) { // Start with the visible state of the group element - var visible = GroupGallery.Visible; + var visible = GroupGallery!.Visible; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupGallery.GalleryDesigner != null)) @@ -806,7 +810,7 @@ private void UpdateVisible(Control? c) else { // Check that the group is not collapsed - if (GroupGallery.RibbonGroup.IsCollapsed && + if (GroupGallery.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupGallery.Gallery) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupGallery.Gallery) is VisualPopupMinimized))) { @@ -820,7 +824,7 @@ private void UpdateVisible(Control? c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupGallery != null) @@ -831,7 +835,7 @@ private void OnLayoutAction(object sender, EventArgs e) } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; @@ -856,17 +860,17 @@ private void OnMouseEnterControl(object sender, EventArgs e) if (_activeGroup != null) { _activeGroup.Tracking = true; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint?.Invoke(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) { _activeGroup.Tracking = false; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint?.Invoke(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); _activeGroup = null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryImage.cs index ff9f9af05..cad339ae8 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,13 +31,13 @@ internal class ViewDrawRibbonGroupGalleryImage : ViewDrawRibbonGroupImageBase ///
/// Reference to owning ribbon control. /// Reference to ribbon group gallery definition. - public ViewDrawRibbonGroupGalleryImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupGallery ribbonGallery) + public ViewDrawRibbonGroupGalleryImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupGallery? ribbonGallery) : base(ribbon) { - Debug.Assert(ribbonGallery != null); + Debug.Assert(ribbonGallery is not null); - _ribbonGallery = ribbonGallery; + _ribbonGallery = ribbonGallery ?? throw new ArgumentNullException(nameof(ribbonGallery)); _largeSize = new Size((int)(32 * FactorDpiX), (int)(32 * FactorDpiY)); } @@ -60,7 +60,7 @@ public override string ToString() => /// /// Gets the image to be drawn. /// - protected override Image DrawImage => _ribbonGallery.ImageLarge; + protected override Image? DrawImage => _ribbonGallery.ImageLarge; #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryText.cs index b314d0917..66937f7a7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupGalleryText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupGalleryText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupGallery _ribbonGallery; private readonly RibbonGroupNormalDisabledTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _firstText; private int _heightExtra; private Size _preferredSize; @@ -41,15 +41,15 @@ internal class ViewDrawRibbonGroupGalleryText : ViewLeaf, /// Source ribbon control. /// Group gallery button to display title for. /// Should show the first button text. - public ViewDrawRibbonGroupGalleryText([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupGallery ribbonGallery, + public ViewDrawRibbonGroupGalleryText([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupGallery? ribbonGallery, bool firstText) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonGallery != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonGallery is not null); - _ribbon = ribbon; - _ribbonGallery = ribbonGallery; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonGallery = ribbonGallery ?? throw new ArgumentNullException(nameof(ribbonGallery)); _firstText = firstText; // Use a class to convert from ribbon group to content interface @@ -103,14 +103,19 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // A change in state always causes a size and layout calculation if (_cacheState != State) { @@ -124,7 +129,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -149,10 +154,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -182,7 +197,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -196,8 +211,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -210,7 +230,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImage.cs index 92c7ab2d0..b1266cbd2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,17 +21,17 @@ internal class ViewDrawRibbonGroupImage : ViewLeaf { #region Instance Fields - private readonly Size _viewSize_2007; // = new(30, 31); - private readonly Size _viewSize_2010; // = new(31, 31); + private readonly Size _viewSize2007; // = new(30, 31); + private readonly Size _viewSize2010; // = new(31, 31); private readonly Size _imageSize; // = new(16, 16); - private readonly int IMAGE_OFFSET_X; // = 7; - private readonly int IMAGE_OFFSET_Y_2007; // = 4; - private readonly int IMAGE_OFFSET_Y_2010; // = 7; + private readonly int _imageOffsetX; // = 7; + private readonly int _imageOffsetY2007; // = 4; + private readonly int _imageOffsetY2010; // = 7; private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroup _ribbonGroup; private readonly ViewDrawRibbonGroup _viewGroup; - private IDisposable _memento1; - private IDisposable _memento2; + private IDisposable? _memento1; + private IDisposable? _memento2; private Size _viewSize; private int _offsetY; #endregion @@ -43,23 +43,23 @@ internal class ViewDrawRibbonGroupImage : ViewLeaf /// Reference to owning ribbon control. /// Reference to ribbon group definition. /// Reference to top level group element. - public ViewDrawRibbonGroupImage([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroup ribbonGroup, - [DisallowNull] ViewDrawRibbonGroup viewGroup) + public ViewDrawRibbonGroupImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroup? ribbonGroup, + [DisallowNull] ViewDrawRibbonGroup? viewGroup) { Debug.Assert(ribbon != null); Debug.Assert(ribbonGroup != null); Debug.Assert(viewGroup != null); - _ribbon = ribbon; - _ribbonGroup = ribbonGroup; - _viewGroup = viewGroup; - _viewSize_2007 = new Size((int)(30 * FactorDpiX), (int)(31 * FactorDpiY)); - _viewSize_2010 = new Size((int)(31 * FactorDpiX), (int)(31 * FactorDpiY)); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonGroup = ribbonGroup ?? throw new ArgumentNullException(nameof(ribbonGroup)); + _viewGroup = viewGroup ?? throw new ArgumentNullException(nameof(viewGroup)); + _viewSize2007 = new Size((int)(30 * FactorDpiX), (int)(31 * FactorDpiY)); + _viewSize2010 = new Size((int)(31 * FactorDpiX), (int)(31 * FactorDpiY)); _imageSize = new Size((int)(16 * FactorDpiX), (int)(16 * FactorDpiY)); - IMAGE_OFFSET_X = (int)(7 * FactorDpiX); - IMAGE_OFFSET_Y_2007 = (int)(4 * FactorDpiY); - IMAGE_OFFSET_Y_2010 = (int)(7 * FactorDpiY); + _imageOffsetX = (int)(7 * FactorDpiX); + _imageOffsetY2007 = (int)(4 * FactorDpiY); + _imageOffsetY2010 = (int)(7 * FactorDpiY); } /// @@ -106,12 +106,12 @@ public override Size GetPreferredSize(ViewLayoutContext context) { default: case PaletteRibbonShape.Office2007: - _viewSize = _viewSize_2007; - _offsetY = IMAGE_OFFSET_Y_2007; + _viewSize = _viewSize2007; + _offsetY = _imageOffsetY2007; break; case PaletteRibbonShape.Office2010: - _viewSize = _viewSize_2010; - _offsetY = IMAGE_OFFSET_Y_2010; + _viewSize = _viewSize2010; + _offsetY = _imageOffsetY2010; break; } @@ -132,8 +132,18 @@ public override void Layout(ViewLayoutContext context) => /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + IPaletteRibbonBack paletteBorder; IPaletteRibbonBack paletteBack; @@ -178,16 +188,16 @@ public override void RenderBefore(RenderContext context) backRect.Inflate(-1, -1); // Draw the background for the group image area - _memento1 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, backRect, State, paletteBack, VisualOrientation.Top, false, _memento1); + _memento1 = context!.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, backRect, State, paletteBack, VisualOrientation.Top, _memento1); // Draw the border around the group image area - _memento2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, ClientRectangle, State, paletteBorder, VisualOrientation.Top, false, _memento2); + _memento2 = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, ClientRectangle, State, paletteBorder, VisualOrientation.Top, _memento2); // If we have an image for drawing if (_ribbonGroup.Image != null) { // Determine the rectangle for the fixed size of image drawing - var drawRect = new Rectangle(new Point(ClientLocation.X + IMAGE_OFFSET_X, ClientLocation.Y + _offsetY), _imageSize); + var drawRect = new Rectangle(new Point(ClientLocation.X + _imageOffsetX, ClientLocation.Y + _offsetY), _imageSize); context.Graphics.DrawImage(_ribbonGroup.Image, drawRect); } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImageBase.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImageBase.cs index 85ec39019..7d3f60e58 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImageBase.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupImageBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -25,10 +25,10 @@ internal abstract class ViewDrawRibbonGroupImageBase : ViewLeaf /// Initialize a new instance of the ViewDrawRibbonGroupImageBase class. ///
/// Reference to owning ribbon control. - public ViewDrawRibbonGroupImageBase([DisallowNull] KryptonRibbon ribbon) + public ViewDrawRibbonGroupImageBase([DisallowNull] KryptonRibbon? ribbon) { - Debug.Assert(ribbon != null); - Ribbon = ribbon; + Debug.Assert(ribbon is not null); + Ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); } /// @@ -100,7 +100,7 @@ public override void RenderBefore(RenderContext context) /// /// Gets the image to be drawn. /// - protected abstract Image DrawImage { get; } + protected abstract Image? DrawImage { get; } #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabel.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabel.cs index 0882855a0..f31319691 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabel.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -46,18 +46,18 @@ internal class ViewDrawRibbonGroupLabel : ViewComposite, /// Reference to owning ribbon control. /// Reference to source label definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupLabel([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupLabel ribbonLabel, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupLabel([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupLabel? ribbonLabel, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonLabel != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonLabel is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupLabel = ribbonLabel; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupLabel = ribbonLabel ?? throw new ArgumentNullException(nameof(ribbonLabel)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Associate this view with the source component (required for design time selection) Component = GroupLabel; @@ -118,7 +118,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group label instance. /// - public KryptonRibbonGroupLabel GroupLabel { get; private set; } + public KryptonRibbonGroupLabel? GroupLabel { get; private set; } #endregion @@ -127,9 +127,9 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() => + public ViewBase GetFirstFocusItem() => // A label can never have the focus - null; + null!; #endregion @@ -138,9 +138,9 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() => + public ViewBase GetLastFocusItem() => // A label can never have the focus - null; + null!; #endregion @@ -151,9 +151,9 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) => + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) => // We have nothing to provide even if we are the selected item - null; + null!; #endregion @@ -164,9 +164,9 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) => + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) => // We have nothing to provide even if we are the selected item - null; + null!; #endregion @@ -223,7 +223,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) UpdateImageSmallState(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); @@ -271,7 +271,7 @@ private void CreateLargeLabelView() } // Add the large button at the top - _viewLargeLabelImage = new ViewDrawRibbonGroupLabelImage(_ribbon, GroupLabel, true); + _viewLargeLabelImage = new ViewDrawRibbonGroupLabelImage(_ribbon, GroupLabel!, true); _viewLargeImage = new ViewLayoutRibbonCenterPadding(_largeImagePadding) { _viewLargeLabelImage @@ -279,18 +279,18 @@ private void CreateLargeLabelView() _viewLarge.Add(_viewLargeImage, ViewDockStyle.Top); // Add the first line of text - _viewLargeText1 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel, true); + _viewLargeText1 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel!, true); _viewLarge.Add(_viewLargeText1, ViewDockStyle.Bottom); // Add the second line of text - _viewLargeText2 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel, false); + _viewLargeText2 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel!, false); _viewLarge.Add(_viewLargeText2, ViewDockStyle.Bottom); // Add a 1 pixel separator at bottom of button before the text _viewLarge.Add(new ViewLayoutRibbonSeparator(1, false), ViewDockStyle.Bottom); // Create controller for intercepting events to determine tool tip handling - _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewLarge, _viewLarge.MouseController); } @@ -308,9 +308,9 @@ private void CreateMediumSmallLabelView() } // Create the image and drop down content - _viewMediumSmallLabelImage = new ViewDrawRibbonGroupLabelImage(_ribbon, GroupLabel, false); - _viewMediumSmallText1 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel, true); - _viewMediumSmallText2 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel, false); + _viewMediumSmallLabelImage = new ViewDrawRibbonGroupLabelImage(_ribbon, GroupLabel!, false); + _viewMediumSmallText1 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel!, true); + _viewMediumSmallText2 = new ViewDrawRibbonGroupLabelText(_ribbon, GroupLabel!, false); _viewMediumSmallImage = new ViewLayoutRibbonCenterPadding(_smallImagePadding) { _viewMediumSmallLabelImage @@ -328,7 +328,7 @@ private void CreateMediumSmallLabelView() _viewMediumSmall.Add(_viewMediumSmallCenter, ViewDockStyle.Fill); // Create controller for intercepting events to determine tool tip handling - _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewMediumSmall, _viewMediumSmall.MouseController); } @@ -341,14 +341,14 @@ private void DefineRootView(ViewBase view) Add(view); // Provide back reference to the button definition - GroupLabel.LabelView = view; + GroupLabel!.LabelView = view; } private void UpdateEnabledState() { // Get the correct enabled state from the button definition - var buttonEnabled = GroupLabel.Enabled; - if (GroupLabel.KryptonCommand != null) + var buttonEnabled = GroupLabel!.Enabled; + if (GroupLabel.KryptonCommand is not null) { buttonEnabled = GroupLabel.KryptonCommand.Enabled; } @@ -371,9 +371,9 @@ private void UpdateEnabledState() _viewMediumSmallText2.Enabled = enabled; } - private void UpdateImageSmallState() => _viewMediumSmallImage.Visible = GroupLabel.ImageSmall != null; + private void UpdateImageSmallState() => _viewMediumSmallImage.Visible = GroupLabel!.ImageSmall != null; - private void UpdateItemSizeState() => UpdateItemSizeState(GroupLabel.ItemSizeCurrent); + private void UpdateItemSizeState() => UpdateItemSizeState(GroupLabel!.ItemSizeCurrent); private void UpdateItemSizeState(GroupItemSize size) { @@ -395,9 +395,9 @@ private void UpdateItemSizeState(GroupItemSize size) } } - private void OnContextClick(object sender, MouseEventArgs e) => GroupLabel.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupLabel!.OnDesignTimeContextMenu(e); - private void OnLabelPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnLabelPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; @@ -446,7 +446,7 @@ private void OnLabelPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupLabel.RibbonTab != null) && + if ((GroupLabel!.RibbonTab != null) && (_ribbon.SelectedTab == GroupLabel.RibbonTab)) { // ...layout so the visible change is made @@ -457,7 +457,7 @@ private void OnLabelPropertyChanged(object sender, PropertyChangedEventArgs e) if (updatePaint) { // If this button is actually defined as visible... - if (GroupLabel.Visible || _ribbon.InDesignMode) + if (GroupLabel!.Visible || _ribbon.InDesignMode) { // ...and on the currently selected tab then... if ((GroupLabel.RibbonTab != null) && diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelImage.cs index bcc3c94e5..82e91463c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -34,14 +34,14 @@ internal class ViewDrawRibbonGroupLabelImage : ViewDrawRibbonGroupImageBase /// Reference to owning ribbon control. /// Reference to ribbon group label definition. /// Show the large image. - public ViewDrawRibbonGroupLabelImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupLabel ribbonLabel, + public ViewDrawRibbonGroupLabelImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupLabel? ribbonLabel, bool large) : base(ribbon) { - Debug.Assert(ribbonLabel != null); + Debug.Assert(ribbonLabel is not null); - _ribbonLabel = ribbonLabel; + _ribbonLabel = ribbonLabel ?? throw new ArgumentNullException(nameof(ribbonLabel)); _large = large; _smallSize = new Size((int)(16 * FactorDpiX), (int)(16 * FactorDpiY)); _largeSize = new Size((int)(32 * FactorDpiX), (int)(32 * FactorDpiY)); @@ -66,7 +66,7 @@ public override string ToString() => /// /// Gets the image to be drawn. /// - protected override Image DrawImage => _large ? _ribbonLabel.ImageLarge : _ribbonLabel.ImageSmall; + protected override Image? DrawImage => _large ? _ribbonLabel.ImageLarge : _ribbonLabel.ImageSmall; #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelText.cs index bafaba12c..dc1ed5833 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupLabelText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupLabelText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupLabel _ribbonLabel; private readonly RibbonGroupLabelTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _firstText; private int _heightExtra; private Size _preferredSize; @@ -41,15 +41,15 @@ internal class ViewDrawRibbonGroupLabelText : ViewLeaf, /// Source ribbon control. /// Group label to display title for. /// Should show the first button text. - public ViewDrawRibbonGroupLabelText([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupLabel ribbonLabel, + public ViewDrawRibbonGroupLabelText([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupLabel? ribbonLabel, bool firstText) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonLabel != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonLabel is not null); - _ribbon = ribbon; - _ribbonLabel = ribbonLabel; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonLabel = ribbonLabel ?? throw new ArgumentNullException(nameof(ribbonLabel)); _firstText = firstText; // Use a class to convert from ribbon group to content interface @@ -105,14 +105,19 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // A change in state always causes a size and layout calculation if (_cacheState != State) { @@ -126,7 +131,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -151,10 +156,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -184,7 +199,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -198,8 +213,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. ///
/// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -212,7 +232,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupMaskedTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupMaskedTextBox.cs index 52b441da4..98c8b432a 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupMaskedTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupMaskedTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,10 +21,10 @@ internal class ViewDrawRibbonGroupMaskedTextBox : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; - private readonly MaskedTextBoxController? _controller; + private ViewDrawRibbonGroup? _activeGroup; + private readonly MaskedTextBoxController _controller; private readonly NeedPaintHandler _needPaint; private GroupItemSize _currentSize; #endregion @@ -36,18 +36,18 @@ internal class ViewDrawRibbonGroupMaskedTextBox : ViewComposite, /// Reference to owning ribbon control. /// Reference to source masked textbox. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupMaskedTextBox([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupMaskedTextBox ribbonMaskedTextBox, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupMaskedTextBox([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupMaskedTextBox? ribbonMaskedTextBox, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonMaskedTextBox != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonMaskedTextBox is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupMaskedTextBox = ribbonMaskedTextBox; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupMaskedTextBox = ribbonMaskedTextBox ?? throw new (nameof(ribbonMaskedTextBox)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupMaskedTextBox.ItemSizeCurrent; // Hook into the masked textbox events @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupMaskedTextBox([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the masked textbox for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the masked text box definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupMaskedTextBox([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to masked textbox so its palette changes are redrawn GroupMaskedTextBox.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupMaskedTextBox.MaskedTextBox); + UpdateVisible(GroupMaskedTextBox.MaskedTextBox); + // Hook into changes in the ribbon custom definition GroupMaskedTextBox.PropertyChanged += OnMaskedTextBoxPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -108,7 +112,7 @@ protected override void Dispose(bool disposing) GroupMaskedTextBox.MouseLeaveControl -= OnMouseLeaveControl; GroupMaskedTextBox.ViewPaintDelegate = null; GroupMaskedTextBox.PropertyChanged -= OnMaskedTextBoxPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group masked textbox instance. /// - public KryptonRibbonGroupMaskedTextBox GroupMaskedTextBox { get; private set; } + public KryptonRibbonGroupMaskedTextBox? GroupMaskedTextBox { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupMaskedTextBox.MaskedTextBox); + _ribbon.HideFocus(GroupMaskedTextBox!.MaskedTextBox); base.LostFocus(c); } #endregion @@ -147,7 +151,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupMaskedTextBox is { Visible: true, LastMaskedTextBox.MaskedTextBox.CanSelect: true }) { @@ -155,7 +159,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -165,7 +169,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (GroupMaskedTextBox is { Visible: true, LastMaskedTextBox.MaskedTextBox.CanSelect: true }) { @@ -173,7 +177,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -185,11 +189,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -200,11 +204,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -217,7 +221,7 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastMaskedTextBox.CanFocus) + if (Visible && LastMaskedTextBox!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -237,8 +241,8 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupMaskedTextBox.Enabled, - GroupMaskedTextBox.KeyTip, + keyTipList.Add(new KeyTipInfo(GroupMaskedTextBox!.Enabled, + GroupMaskedTextBox.KeyTip!, screenPt, ClientRectangle, _controller)); @@ -256,7 +260,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupMaskedTextBox.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupMaskedTextBox!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -267,7 +271,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a masked textbox associated then ask for its requested size if (LastMaskedTextBox != null) @@ -282,7 +286,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -301,10 +305,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastMaskedTextBox?.SetBounds(ClientLocation.X + 1, @@ -328,7 +332,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a masked textbox - if (GroupMaskedTextBox.MaskedTextBox == null) + if (GroupMaskedTextBox!.MaskedTextBox == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -339,7 +343,7 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the masked textbox will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context!.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); context.Graphics.DrawRectangle(Pens.Gold, drawRect); } } @@ -373,9 +377,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupMaskedTextBox.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupMaskedTextBox!.OnDesignTimeContextMenu(e); - private void OnMaskedTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnMaskedTextBoxPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -383,10 +387,10 @@ private void OnMaskedTextBoxPropertyChanged(object sender, PropertyChangedEventA switch (e.PropertyName) { case nameof(Enabled): - UpdateEnabled(LastMaskedTextBox); + UpdateEnabled(LastMaskedTextBox!); break; case nameof(Visible): - UpdateVisible(LastMaskedTextBox); + UpdateVisible(LastMaskedTextBox!); updateLayout = true; break; case "CustomControl": @@ -397,7 +401,7 @@ private void OnMaskedTextBoxPropertyChanged(object sender, PropertyChangedEventA if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupMaskedTextBox.RibbonTab != null) && + if ((GroupMaskedTextBox!.RibbonTab != null) && (_ribbon.SelectedTab == GroupMaskedTextBox.RibbonTab)) { // ...layout so the visible change is made @@ -425,14 +429,14 @@ private void OnMaskedTextBoxPropertyChanged(object sender, PropertyChangedEventA private Control LastParentControl { - get => GroupMaskedTextBox.LastParentControl; - set => GroupMaskedTextBox.LastParentControl = value; + get => GroupMaskedTextBox!.LastParentControl; + set => GroupMaskedTextBox!.LastParentControl = value; } private KryptonMaskedTextBox? LastMaskedTextBox { - get => GroupMaskedTextBox.LastMaskedTextBox; - set => GroupMaskedTextBox.LastMaskedTextBox = value; + get => GroupMaskedTextBox!.LastMaskedTextBox; + set => GroupMaskedTextBox!.LastMaskedTextBox = value; } private void UpdateParent(Control parentControl) @@ -440,10 +444,10 @@ private void UpdateParent(Control parentControl) // Is there a change in the masked textbox or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastMaskedTextBox != GroupMaskedTextBox.MaskedTextBox)) + (LastMaskedTextBox != GroupMaskedTextBox!.MaskedTextBox)) { // We only modify the parent and visible state if processing for correct container - if ((GroupMaskedTextBox.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupMaskedTextBox!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupMaskedTextBox.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custrom control to a parent before @@ -483,7 +487,7 @@ private void UpdateEnabled(Control c) if (c != null) { // Start with the enabled state of the group element - var enabled = GroupMaskedTextBox.Enabled; + var enabled = GroupMaskedTextBox!.Enabled; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupMaskedTextBox.MaskedTextBoxDesigner != null)) @@ -501,7 +505,7 @@ private bool ActualVisible(Control c) if (c != null) { // Start with the visible state of the group element - var visible = GroupMaskedTextBox.Visible; + var visible = GroupMaskedTextBox!.Visible; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupMaskedTextBox.MaskedTextBoxDesigner != null)) @@ -521,7 +525,7 @@ private void UpdateVisible(Control c) if (c != null) { // Start with the visible state of the group element - var visible = GroupMaskedTextBox.Visible; + var visible = GroupMaskedTextBox!.Visible; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupMaskedTextBox.MaskedTextBoxDesigner != null)) @@ -548,7 +552,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupMaskedTextBox.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupMaskedTextBox.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupMaskedTextBox.MaskedTextBox) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupMaskedTextBox.MaskedTextBox) is VisualPopupMinimized))) { @@ -570,7 +574,7 @@ private void UpdateVisible(Control c) } // Move up a level - container = container.RibbonContainer; + container = container.RibbonContainer!; } } } @@ -581,26 +585,26 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupMaskedTextBox != null) { // Change in selected tab requires a retest of the control visibility - UpdateVisible(LastMaskedTextBox); + UpdateVisible(LastMaskedTextBox!); } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + ViewBase? parent = Parent; // Keep going till we get to the top or find a group - while (parent != null) + while (parent is not null) { if (parent is ViewDrawRibbonGroup ribGroup) { @@ -620,7 +624,7 @@ private void OnMouseEnterControl(object sender, EventArgs e) } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupNumericUpDown.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupNumericUpDown.cs index 3f9873b68..a33a1674b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupNumericUpDown.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupNumericUpDown.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,11 +21,11 @@ internal class ViewDrawRibbonGroupNumericUpDown : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; + private ViewDrawRibbonGroup? _activeGroup; private readonly NumericUpDownController? _controller; - private readonly NeedPaintHandler _needPaint; + private readonly NeedPaintHandler? _needPaint; private GroupItemSize _currentSize; #endregion @@ -36,18 +36,18 @@ internal class ViewDrawRibbonGroupNumericUpDown : ViewComposite, /// Reference to owning ribbon control. /// Reference to source numeric up-down. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupNumericUpDown([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupNumericUpDown ribbonNumericUpDown, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupNumericUpDown([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupNumericUpDown? ribbonNumericUpDown, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonNumericUpDown != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonNumericUpDown is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupNumericUpDown = ribbonNumericUpDown; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupNumericUpDown = ribbonNumericUpDown ?? throw new (nameof(ribbonNumericUpDown)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupNumericUpDown.ItemSizeCurrent; // Hook into the numeric up-down events @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupNumericUpDown([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the numeric up-down for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the numeric up-down definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupNumericUpDown([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to numeric up-down so its palette changes are redrawn GroupNumericUpDown.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupNumericUpDown.NumericUpDown); + UpdateVisible(GroupNumericUpDown.NumericUpDown); + // Hook into changes in the ribbon custom definition GroupNumericUpDown.PropertyChanged += OnNumericUpDownPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -108,7 +112,7 @@ protected override void Dispose(bool disposing) GroupNumericUpDown.MouseLeaveControl -= OnMouseLeaveControl; GroupNumericUpDown.ViewPaintDelegate = null; GroupNumericUpDown.PropertyChanged -= OnNumericUpDownPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group numeric up-down instance. /// - public KryptonRibbonGroupNumericUpDown GroupNumericUpDown { get; private set; } + public KryptonRibbonGroupNumericUpDown? GroupNumericUpDown { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupNumericUpDown.NumericUpDown); + _ribbon.HideFocus(GroupNumericUpDown?.NumericUpDown); base.LostFocus(c); } #endregion @@ -147,7 +151,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupNumericUpDown is { Visible: true, LastNumericUpDown.NumericUpDown.CanSelect: true }) { @@ -155,7 +159,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -165,7 +169,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. /// /// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (GroupNumericUpDown is { Visible: true, LastNumericUpDown.NumericUpDown.CanSelect: true }) { @@ -173,7 +177,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -185,11 +189,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -200,11 +204,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -217,7 +221,7 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastNumericUpDown.CanFocus) + if (Visible && LastNumericUpDown!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -225,7 +229,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) // Determine the screen position of the key tip var screenPt = Point.Empty; - // Determine the screen position of the key tip dependant on item location/size + // Determine the screen position of the key tip dependent on item location/size switch (_currentSize) { case GroupItemSize.Large: @@ -237,7 +241,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupNumericUpDown.Enabled, + keyTipList.Add(new KeyTipInfo(GroupNumericUpDown!.Enabled, GroupNumericUpDown.KeyTip, screenPt, ClientRectangle, @@ -256,7 +260,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupNumericUpDown.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupNumericUpDown!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -267,7 +271,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a numeric up-down associated then ask for its requested size if (LastNumericUpDown != null) @@ -282,7 +286,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -301,10 +305,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastNumericUpDown?.SetBounds(ClientLocation.X + 1, @@ -328,7 +332,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a numeric up-down - if (GroupNumericUpDown.NumericUpDown == null) + if (GroupNumericUpDown?.NumericUpDown == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -339,8 +343,8 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the numeric up-down will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); - context.Graphics.DrawRectangle(Pens.Gold, drawRect); + context?.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context?.Graphics.DrawRectangle(Pens.Gold, drawRect); } } } @@ -373,9 +377,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupNumericUpDown.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupNumericUpDown?.OnDesignTimeContextMenu(e); - private void OnNumericUpDownPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnNumericUpDownPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -383,10 +387,10 @@ private void OnNumericUpDownPropertyChanged(object sender, PropertyChangedEventA switch (e.PropertyName) { case nameof(Enabled): - UpdateEnabled(LastNumericUpDown); + UpdateEnabled(LastNumericUpDown!); break; case nameof(Visible): - UpdateVisible(LastNumericUpDown); + UpdateVisible(LastNumericUpDown!); updateLayout = true; break; case "CustomControl": @@ -397,7 +401,7 @@ private void OnNumericUpDownPropertyChanged(object sender, PropertyChangedEventA if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupNumericUpDown.RibbonTab != null) && + if ((GroupNumericUpDown?.RibbonTab != null) && (_ribbon.SelectedTab == GroupNumericUpDown.RibbonTab)) { // ...layout so the visible change is made @@ -423,16 +427,16 @@ private void OnNumericUpDownPropertyChanged(object sender, PropertyChangedEventA #pragma warning restore 162 } - private Control LastParentControl + private Control? LastParentControl { - get => GroupNumericUpDown.LastParentControl; - set => GroupNumericUpDown.LastParentControl = value; + get => GroupNumericUpDown!.LastParentControl; + set => GroupNumericUpDown!.LastParentControl = value; } private KryptonNumericUpDown? LastNumericUpDown { - get => GroupNumericUpDown.LastNumericUpDown; - set => GroupNumericUpDown.LastNumericUpDown = value; + get => GroupNumericUpDown!.LastNumericUpDown; + set => GroupNumericUpDown!.LastNumericUpDown = value; } private void UpdateParent(Control parentControl) @@ -440,13 +444,13 @@ private void UpdateParent(Control parentControl) // Is there a change in the numeric up-down or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastNumericUpDown != GroupNumericUpDown.NumericUpDown)) + (LastNumericUpDown != GroupNumericUpDown!.NumericUpDown)) { // We only modify the parent and visible state if processing for correct container - if ((GroupNumericUpDown.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupNumericUpDown!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupNumericUpDown.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { - // If we have added the custrom control to a parent before + // If we have added the custom control to a parent before if ((LastNumericUpDown != null) && (LastParentControl != null)) { // If that control is still a child of the old parent @@ -477,12 +481,12 @@ private void UpdateParent(Control parentControl) } } - private void UpdateEnabled(Control c) + private void UpdateEnabled(Control? c) { if (c != null) { // Start with the enabled state of the group element - var enabled = GroupNumericUpDown.Enabled; + var enabled = GroupNumericUpDown!.Enabled; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupNumericUpDown.NumericUpDownDesigner != null)) @@ -495,12 +499,12 @@ private void UpdateEnabled(Control c) } } - private bool ActualVisible(Control c) + private bool ActualVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupNumericUpDown.Visible; + var visible = GroupNumericUpDown!.Visible; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupNumericUpDown.NumericUpDownDesigner != null)) @@ -515,12 +519,12 @@ private bool ActualVisible(Control c) return false; } - private void UpdateVisible(Control c) + private void UpdateVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupNumericUpDown.Visible; + var visible = GroupNumericUpDown!.Visible; // If we have an associated designer setup... if (!_ribbon.InDesignHelperMode && (GroupNumericUpDown.NumericUpDownDesigner != null)) @@ -549,7 +553,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupNumericUpDown.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupNumericUpDown!.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupNumericUpDown.NumericUpDown) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupNumericUpDown.NumericUpDown) is VisualPopupMinimized)) ) @@ -572,7 +576,7 @@ private void UpdateVisible(Control c) } // Move up a level - container = container.RibbonContainer; + container = container.RibbonContainer!; } } } @@ -583,7 +587,7 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupNumericUpDown != null) @@ -593,13 +597,13 @@ private void OnLayoutAction(object sender, EventArgs e) } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + ViewBase? parent = Parent; // Keep going till we get to the top or find a group while (parent != null) @@ -618,17 +622,17 @@ private void OnMouseEnterControl(object sender, EventArgs e) if (_activeGroup != null) { _activeGroup.Tracking = true; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint!(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) { _activeGroup.Tracking = false; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint!(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); _activeGroup = null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButton.cs index 670ed9c1f..25c7f4655 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -49,18 +49,18 @@ internal class ViewDrawRibbonGroupRadioButton : ViewComposite, /// Reference to owning ribbon control. /// Reference to source radio button definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupRadioButton([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupRadioButton ribbonRadioButton, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupRadioButton([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupRadioButton? ribbonRadioButton, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonRadioButton != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonRadioButton is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupRadioButton = ribbonRadioButton; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupRadioButton = ribbonRadioButton ?? throw new ArgumentNullException(nameof(ribbonRadioButton)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupRadioButton.ItemSizeCurrent; // Create delegate used to process end of click action @@ -129,7 +129,7 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the item. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { // Only take focus if we are visible and enabled if (GroupRadioButton is { Visible: true, Enabled: true }) @@ -138,7 +138,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -148,7 +148,7 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { // Only take focus if we are visible and enabled if (GroupRadioButton is { Visible: true, Enabled: true }) @@ -157,7 +157,7 @@ protected override void Dispose(bool disposing) } else { - return null; + return null!; } } #endregion @@ -169,11 +169,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -184,11 +184,11 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = (current == _viewLarge) || (current == _viewMediumSmall); - return null; + return null!; } #endregion @@ -224,7 +224,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) } keyTipList.Add(new KeyTipInfo(GroupRadioButton.Enabled, GroupRadioButton.KeyTip, - screenPt, this[0].ClientRectangle, controller)); + screenPt, this[0]!.ClientRectangle, controller)); } } #endregion @@ -271,7 +271,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) UpdateItemSizeState(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); @@ -330,7 +330,7 @@ private void CreateLargeRadioButtonView() _viewLarge.Add(new ViewLayoutRibbonSeparator(1, false), ViewDockStyle.Bottom); // Create controller for handling mouse, keyboard and focus - _viewLargeController = new GroupRadioButtonController(_ribbon, _viewLarge, _viewLargeImage, _needPaint); + _viewLargeController = new GroupRadioButtonController(_ribbon, _viewLarge, _viewLargeImage, _needPaint!); _viewLargeController.Click += OnLargeRadioButtonClick; _viewLargeController.ContextClick += OnContextClick; _viewLarge.MouseController = _viewLargeController; @@ -338,7 +338,7 @@ private void CreateLargeRadioButtonView() _viewLarge.KeyController = _viewLargeController; // Create controller for intercepting events to determine tool tip handling - _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewLarge.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewLarge, _viewLarge.MouseController); } @@ -368,7 +368,7 @@ private void CreateMediumSmallRadioButtonView() _viewMediumSmall.Add(_viewMediumSmallCenter, ViewDockStyle.Fill); // Create controller for handling mouse, keyboard and focus - _viewMediumSmallController = new GroupRadioButtonController(_ribbon, _viewMediumSmall, _viewMediumSmallImage, _needPaint); + _viewMediumSmallController = new GroupRadioButtonController(_ribbon, _viewMediumSmall, _viewMediumSmallImage, _needPaint!); _viewMediumSmallController.Click += OnMediumSmallRadioButtonClick; _viewMediumSmallController.ContextClick += OnContextClick; _viewMediumSmall.MouseController = _viewMediumSmallController; @@ -376,7 +376,7 @@ private void CreateMediumSmallRadioButtonView() _viewMediumSmall.KeyController = _viewMediumSmallController; // Create controller for intercepting events to determine tool tip handling - _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + _viewMediumSmall.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager!.ToolTipManager!, _viewMediumSmall, _viewMediumSmall.MouseController); } @@ -433,13 +433,13 @@ private void UpdateItemSizeState(GroupItemSize size) } } - private void OnLargeRadioButtonClick(object sender, EventArgs e) => GroupRadioButton.PerformClick(_finishDelegateLarge); + private void OnLargeRadioButtonClick(object? sender, EventArgs e) => GroupRadioButton.PerformClick(_finishDelegateLarge); - private void OnMediumSmallRadioButtonClick(object sender, EventArgs e) => GroupRadioButton.PerformClick(_finishDelegateMediumSmall); + private void OnMediumSmallRadioButtonClick(object? sender, EventArgs e) => GroupRadioButton.PerformClick(_finishDelegateMediumSmall); - private void OnContextClick(object sender, MouseEventArgs e) => GroupRadioButton.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupRadioButton.OnDesignTimeContextMenu(e); - private void ActionFinishedLarge(object sender, EventArgs e) + private void ActionFinishedLarge(object? sender, EventArgs e) { // Remove any popups that result from an action occurring _ribbon.ActionOccurred(); @@ -448,7 +448,7 @@ private void ActionFinishedLarge(object sender, EventArgs e) _viewLargeController?.RemoveFixed(); } - private void ActionFinishedMediumSmall(object sender, EventArgs e) + private void ActionFinishedMediumSmall(object? sender, EventArgs e) { // Remove any popups that result from an action occurring _ribbon.ActionOccurred(); @@ -457,7 +457,7 @@ private void ActionFinishedMediumSmall(object sender, EventArgs e) _viewMediumSmallController?.RemoveFixed(); } - private void OnRadioButtonPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnRadioButtonPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; var updatePaint = false; diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonImage.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonImage.cs index 16af7f422..7812b7ccc 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonImage.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -34,14 +34,14 @@ internal class ViewDrawRibbonGroupRadioButtonImage : ViewComposite /// Reference to owning ribbon control. /// Reference to ribbon group radio button definition. /// Show the large image. - public ViewDrawRibbonGroupRadioButtonImage(KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupRadioButton ribbonRadioButton, + public ViewDrawRibbonGroupRadioButtonImage([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupRadioButton? ribbonRadioButton, bool large) { - Debug.Assert(ribbonRadioButton != null); + Debug.Assert(ribbonRadioButton is not null); // Remember incoming parameters - _ribbonRadioButton = ribbonRadioButton; + _ribbonRadioButton = ribbonRadioButton ?? throw new ArgumentNullException(nameof(ribbonRadioButton)); _large = large; // Use redirector to get the radio button images and redirect to parent palette diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonText.cs index 5eb97a75c..3c51b6e60 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRadioButtonText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupRadioButtonText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupRadioButton _ribbonRadioButton; private readonly RibbonGroupNormalDisabledTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _firstText; private int _heightExtra; private Size _preferredSize; @@ -41,15 +41,15 @@ internal class ViewDrawRibbonGroupRadioButtonText : ViewLeaf, /// Source ribbon control. /// Group radio button to display title for. /// Should show the first button text. - public ViewDrawRibbonGroupRadioButtonText([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupRadioButton ribbonRadioButton, + public ViewDrawRibbonGroupRadioButtonText([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupRadioButton? ribbonRadioButton, bool firstText) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonRadioButton != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonRadioButton is not null); - _ribbon = ribbon; - _ribbonRadioButton = ribbonRadioButton; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonRadioButton = ribbonRadioButton ?? throw new ArgumentNullException(nameof(ribbonRadioButton)); _firstText = firstText; // Use a class to convert from ribbon group to content interface @@ -103,7 +103,17 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Validate incoming reference if (context == null) @@ -124,7 +134,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - State, false, false); + State); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -150,10 +160,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -183,7 +203,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -199,6 +219,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -211,7 +236,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - State, false, false, true); + State, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRichTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRichTextBox.cs index cae0ce6f7..596935dff 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRichTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupRichTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,9 +21,9 @@ internal class ViewDrawRibbonGroupRichTextBox : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; + private ViewDrawRibbonGroup? _activeGroup; private readonly RichTextBoxController? _controller; private readonly NeedPaintHandler _needPaint; private GroupItemSize _currentSize; @@ -36,18 +36,18 @@ internal class ViewDrawRibbonGroupRichTextBox : ViewComposite, /// Reference to owning ribbon control. /// Reference to source richtextbox. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupRichTextBox([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupRichTextBox ribbonRichTextBox, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupRichTextBox([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupRichTextBox? ribbonRichTextBox, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonRichTextBox != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonRichTextBox is not null); + Debug.Assert(needPaint is not null); // Remember incoming references - _ribbon = ribbon; - GroupRichTextBox = ribbonRichTextBox; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + GroupRichTextBox = ribbonRichTextBox ?? throw new ArgumentNullException(nameof(ribbonRichTextBox)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupRichTextBox.ItemSizeCurrent; // Hook into the richtextbox events @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupRichTextBox([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the richtextbox for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the rich text box definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupRichTextBox([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to richtextbox so its palette changes are redrawn GroupRichTextBox.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupRichTextBox.RichTextBox); + UpdateVisible(GroupRichTextBox.RichTextBox); + // Hook into changes in the ribbon custom definition GroupRichTextBox.PropertyChanged += OnRichTextBoxPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -108,7 +112,7 @@ protected override void Dispose(bool disposing) GroupRichTextBox.MouseLeaveControl -= OnMouseLeaveControl; GroupRichTextBox.ViewPaintDelegate = null; GroupRichTextBox.PropertyChanged -= OnRichTextBoxPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group richtextbox instance. /// - public KryptonRibbonGroupRichTextBox GroupRichTextBox { get; private set; } + public KryptonRibbonGroupRichTextBox? GroupRichTextBox { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupRichTextBox.RichTextBox); + _ribbon.HideFocus(GroupRichTextBox!.RichTextBox); base.LostFocus(c); } #endregion @@ -147,7 +151,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupRichTextBox is { Visible: true, LastRichTextBox.RichTextBox.CanSelect: true }) { @@ -155,7 +159,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -165,7 +169,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (GroupRichTextBox is { Visible: true, LastRichTextBox.RichTextBox.CanSelect: true }) { @@ -173,7 +177,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -185,11 +189,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -200,11 +204,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -217,10 +221,10 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastRichTextBox.CanFocus) + if (Visible && LastRichTextBox!.CanFocus) { // Get the screen location of the button - Rectangle viewRect = LastRichTextBox.Parent.RectangleToScreen(ClientRectangle); + Rectangle viewRect = LastRichTextBox.Parent!.RectangleToScreen(ClientRectangle); // Determine the screen position of the key tip var screenPt = Point.Empty; @@ -237,7 +241,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupRichTextBox.Enabled, + keyTipList.Add(new KeyTipInfo(GroupRichTextBox!.Enabled, GroupRichTextBox.KeyTip, screenPt, ClientRectangle, @@ -256,7 +260,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupRichTextBox.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupRichTextBox!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -267,7 +271,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a richtextbox associated then ask for its requested size if (LastRichTextBox != null) @@ -282,7 +286,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -301,10 +305,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastRichTextBox?.SetBounds(ClientLocation.X + 1, @@ -328,7 +332,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a richtextbox - if (GroupRichTextBox.RichTextBox == null) + if (GroupRichTextBox!.RichTextBox == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -339,7 +343,7 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the richtextbox will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context!.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); context.Graphics.DrawRectangle(Pens.Gold, drawRect); } } @@ -373,9 +377,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupRichTextBox.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupRichTextBox!.OnDesignTimeContextMenu(e); - private void OnRichTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnRichTextBoxPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -383,10 +387,10 @@ private void OnRichTextBoxPropertyChanged(object sender, PropertyChangedEventArg switch (e.PropertyName) { case nameof(Enabled): - UpdateEnabled(LastRichTextBox); + UpdateEnabled(LastRichTextBox!); break; case nameof(Visible): - UpdateVisible(LastRichTextBox); + UpdateVisible(LastRichTextBox!); updateLayout = true; break; case "CustomControl": @@ -397,7 +401,7 @@ private void OnRichTextBoxPropertyChanged(object sender, PropertyChangedEventArg if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupRichTextBox.RibbonTab != null) && + if ((GroupRichTextBox!.RibbonTab != null) && (_ribbon.SelectedTab == GroupRichTextBox.RibbonTab)) { // ...layout so the visible change is made @@ -425,14 +429,14 @@ private void OnRichTextBoxPropertyChanged(object sender, PropertyChangedEventArg private Control LastParentControl { - get => GroupRichTextBox.LastParentControl; - set => GroupRichTextBox.LastParentControl = value; + get => GroupRichTextBox!.LastParentControl; + set => GroupRichTextBox!.LastParentControl = value; } private KryptonRichTextBox? LastRichTextBox { - get => GroupRichTextBox.LastRichTextBox; - set => GroupRichTextBox.LastRichTextBox = value; + get => GroupRichTextBox!.LastRichTextBox; + set => GroupRichTextBox!.LastRichTextBox = value; } private void UpdateParent(Control parentControl) @@ -440,10 +444,10 @@ private void UpdateParent(Control parentControl) // Is there a change in the richtextbox or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastRichTextBox != GroupRichTextBox.RichTextBox)) + (LastRichTextBox != GroupRichTextBox!.RichTextBox)) { // We only modify the parent and visible state if processing for correct container - if ((GroupRichTextBox.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupRichTextBox!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupRichTextBox.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custrom control to a parent before @@ -478,15 +482,15 @@ private void UpdateParent(Control parentControl) } } - private void UpdateEnabled(Control c) + private void UpdateEnabled(Control? c) { if (c != null) { // Start with the enabled state of the group element - var enabled = GroupRichTextBox.Enabled; + var enabled = GroupRichTextBox!.Enabled; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupRichTextBox.RichTextBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupRichTextBox?.RichTextBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value enabled = GroupRichTextBox.RichTextBoxDesigner.DesignEnabled; @@ -496,15 +500,15 @@ private void UpdateEnabled(Control c) } } - private bool ActualVisible(Control c) + private bool ActualVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupRichTextBox.Visible; + var visible = GroupRichTextBox!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupRichTextBox.RichTextBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupRichTextBox?.RichTextBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupRichTextBox.RichTextBoxDesigner.DesignVisible; @@ -516,15 +520,15 @@ private bool ActualVisible(Control c) return false; } - private void UpdateVisible(Control c) + private void UpdateVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupRichTextBox.Visible; + var visible = GroupRichTextBox!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupRichTextBox.RichTextBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupRichTextBox?.RichTextBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupRichTextBox.RichTextBoxDesigner.DesignVisible; @@ -533,7 +537,7 @@ private void UpdateVisible(Control c) if (visible) { // Only visible if on the currently selected page - if ((GroupRichTextBox.RibbonTab == null) || + if ((GroupRichTextBox?.RibbonTab == null) || (_ribbon.SelectedTab != GroupRichTextBox.RibbonTab)) { visible = false; @@ -550,7 +554,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupRichTextBox.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupRichTextBox.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupRichTextBox.RichTextBox) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupRichTextBox.RichTextBox) is VisualPopupMinimized)) ) @@ -560,10 +564,10 @@ private void UpdateVisible(Control c) else { // Check that the hierarchy of containers are all visible - KryptonRibbonGroupContainer container = GroupRichTextBox.RibbonContainer; + KryptonRibbonGroupContainer? container = GroupRichTextBox.RibbonContainer; // Keep going until we have searched the entire parent chain of containers - while (container != null) + while (container is not null) { // If any parent container is not visible, then we are not visible if (!container.Visible) @@ -584,23 +588,23 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupRichTextBox != null) { // Change in selected tab requires a retest of the control visibility - UpdateVisible(LastRichTextBox); + UpdateVisible(LastRichTextBox!); } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + ViewBase? parent = Parent; // Keep going till we get to the top or find a group while (parent != null) @@ -623,7 +627,7 @@ private void OnMouseEnterControl(object sender, EventArgs e) } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupSeparator.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupSeparator.cs index 046bf9bb1..2f5349678 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupSeparator.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupSeparator : ViewLeaf, private readonly Size _preferredSize2007; // = new(4, 4); private readonly Size _preferredSize2010; // = new(7, 4); private readonly KryptonRibbon _ribbon; - private KryptonRibbonGroupSeparator _ribbonSeparator; + private KryptonRibbonGroupSeparator? _ribbonSeparator; private readonly NeedPaintHandler _needPaint; private Size _preferredSize; private PaletteRibbonShape _lastShape; @@ -37,17 +37,17 @@ internal class ViewDrawRibbonGroupSeparator : ViewLeaf, /// Reference to owning ribbon control. /// Reference to group separator definition. /// Delegate for notifying paint requests. - public ViewDrawRibbonGroupSeparator([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupSeparator ribbonSeparator, - [DisallowNull] NeedPaintHandler needPaint) + public ViewDrawRibbonGroupSeparator([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupSeparator? ribbonSeparator, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonSeparator != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonSeparator is not null); + Debug.Assert(needPaint is not null); - _ribbon = ribbon; - _ribbonSeparator = ribbonSeparator; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonSeparator = ribbonSeparator ?? throw new ArgumentNullException(nameof(ribbonSeparator)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Associate this view with the source component (required for design time selection) Component = _ribbonSeparator; @@ -91,7 +91,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Must unhook to prevent memory leaks - _ribbonSeparator.PropertyChanged -= OnSeparatorPropertyChanged; + _ribbonSeparator!.PropertyChanged -= OnSeparatorPropertyChanged; // Remove association with definition _ribbonSeparator.SeparatorView = null; @@ -107,9 +107,9 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() => + public ViewBase GetFirstFocusItem() => // We never have any child items that can take focus - null; + null!; #endregion @@ -118,9 +118,9 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() => + public ViewBase GetLastFocusItem() => // We never have any child items that can take focus - null; + null!; #endregion @@ -131,9 +131,9 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) => + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) => // We never have any child items that can take focus - null; + null!; #endregion @@ -144,9 +144,9 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) => + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) => // We never have any child items that can take focus - null; + null!; #endregion @@ -186,7 +186,7 @@ public ItemSizeWidth[] GetPossibleSizes(ViewLayoutContext context) } // Return the one possible size allowed - return new ItemSizeWidth[] { new ItemSizeWidth(GroupItemSize.Large, _preferredSize.Width) }; + return [new ItemSizeWidth(GroupItemSize.Large, _preferredSize.Width)]; } /// @@ -219,7 +219,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion @@ -228,11 +228,19 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) => context.Renderer.RenderGlyph.DrawRibbonGroupSeparator(_ribbon.RibbonShape, + public override void RenderBefore(RenderContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + context.Renderer.RenderGlyph.DrawRibbonGroupSeparator(_ribbon.RibbonShape, context, ClientRectangle, _ribbon.StateCommon.RibbonGeneral, State); + } #endregion #region Protected @@ -255,15 +263,15 @@ protected virtual void OnNeedPaint(bool needLayout) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => _ribbonSeparator.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => _ribbonSeparator!.OnDesignTimeContextMenu(e); - private void OnSeparatorPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnSeparatorPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(Visible): // If we are on the currently selected tab then... - if ((_ribbonSeparator.RibbonTab != null) && + if ((_ribbonSeparator!.RibbonTab != null) && (_ribbon.SelectedTab == _ribbonSeparator.RibbonTab)) { // ...layout so the visible change is made diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupText.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupText.cs index 78d31ce58..900f6758b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupText.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupText : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroup _ribbonGroup; private readonly RibbonGroupTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _firstText; private int _heightExtra; private Size _preferredSize; @@ -41,15 +41,15 @@ internal class ViewDrawRibbonGroupText : ViewLeaf, /// Source ribbon control. /// Ribbon group to display title for. /// Should show the first group text. - public ViewDrawRibbonGroupText([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroup ribbonGroup, + public ViewDrawRibbonGroupText([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroup? ribbonGroup, bool firstText) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonGroup != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonGroup is not null); - _ribbon = ribbon; - _ribbonGroup = ribbonGroup; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonGroup = ribbonGroup ?? throw new ArgumentNullException(nameof(ribbonGroup)); _firstText = firstText; // Use a class to convert from ribbon group to content interface @@ -102,14 +102,19 @@ public void MakeDirty() /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // A change in state always causes a size and layout calculation if (_cacheState != State) { @@ -123,7 +128,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Ask the renderer for the contents preferred size _preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Subtract the extra space used to ensure it draws _heightExtra = (_ribbon.CalculatedValues.DrawFontHeight - _ribbon.CalculatedValues.RawFontHeight) * 2; @@ -142,10 +147,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -175,7 +190,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, drawRect, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; _dirtyPaletteLayout = _ribbon.DirtyPaletteCounter; @@ -190,6 +205,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + Rectangle drawRect = ClientRectangle; // Adjust the client rect so the text has enough room to be drawn @@ -202,7 +222,7 @@ public override void RenderBefore(RenderContext context) context.Renderer.RenderStandardContent.DrawContent(context, drawRect, _contentProvider, _memento, VisualOrientation.Top, - PaletteState.Normal, false, false, true); + PaletteState.Normal, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTextBox.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTextBox.cs index 46efa4ccc..174f956a3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTextBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,9 +21,9 @@ internal class ViewDrawRibbonGroupTextBox : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; + private ViewDrawRibbonGroup? _activeGroup; private readonly TextBoxController? _controller; private readonly NeedPaintHandler _needPaint; private GroupItemSize _currentSize; @@ -45,9 +45,9 @@ public ViewDrawRibbonGroupTextBox([DisallowNull] KryptonRibbon ribbon, Debug.Assert(needPaint != null); // Remember incoming references - _ribbon = ribbon; - GroupTextBox = ribbonTextBox; - _needPaint = needPaint; + _ribbon = ribbon!; + GroupTextBox = ribbonTextBox!; + _needPaint = needPaint!; _currentSize = GroupTextBox.ItemSizeCurrent; // Hook into the textbox events @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupTextBox([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the textbox for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the text box definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupTextBox([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to textbox so its palette changes are redrawn GroupTextBox.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupTextBox.TextBox); + UpdateVisible(GroupTextBox.TextBox); + // Hook into changes in the ribbon custom definition GroupTextBox.PropertyChanged += OnTextBoxPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -108,7 +112,7 @@ protected override void Dispose(bool disposing) GroupTextBox.MouseLeaveControl -= OnMouseLeaveControl; GroupTextBox.ViewPaintDelegate = null; GroupTextBox.PropertyChanged -= OnTextBoxPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group textbox instance. /// - public KryptonRibbonGroupTextBox GroupTextBox { get; private set; } + public KryptonRibbonGroupTextBox? GroupTextBox { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupTextBox.TextBox); + _ribbon.HideFocus(GroupTextBox?.TextBox); base.LostFocus(c); } #endregion @@ -147,7 +151,7 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if (GroupTextBox is { Visible: true, LastTextBox.TextBox.CanSelect: true }) { @@ -155,7 +159,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -165,7 +169,7 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if (GroupTextBox is { Visible: true, LastTextBox.TextBox.CanSelect: true }) { @@ -173,7 +177,7 @@ public override void LostFocus(Control c) } else { - return null; + return null!; } } #endregion @@ -185,11 +189,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -200,11 +204,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -217,7 +221,7 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastTextBox.CanFocus) + if (Visible && LastTextBox!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -237,7 +241,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupTextBox.Enabled, + keyTipList.Add(new KeyTipInfo(GroupTextBox!.Enabled, GroupTextBox.KeyTip, screenPt, ClientRectangle, @@ -256,7 +260,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupTextBox.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupTextBox!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -267,7 +271,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a textbox associated then ask for its requested size if (LastTextBox != null) @@ -282,7 +286,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -301,10 +305,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastTextBox?.SetBounds(ClientLocation.X + 1, @@ -325,10 +329,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void Render([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // If we do not have a textbox - if (GroupTextBox.TextBox == null) + if (GroupTextBox!.TextBox is null) { // And we are in design time if (_ribbon.InDesignMode) @@ -339,7 +343,7 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the textbox will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context!.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); context.Graphics.DrawRectangle(Pens.Gold, drawRect); } } @@ -373,9 +377,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupTextBox.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupTextBox!.OnDesignTimeContextMenu(e); - private void OnTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnTextBoxPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -397,7 +401,7 @@ private void OnTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupTextBox.RibbonTab != null) && + if ((GroupTextBox!.RibbonTab != null) && (_ribbon.SelectedTab == GroupTextBox.RibbonTab)) { // ...layout so the visible change is made @@ -425,14 +429,14 @@ private void OnTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) private Control LastParentControl { - get => GroupTextBox.LastParentControl; - set => GroupTextBox.LastParentControl = value; + get => GroupTextBox!.LastParentControl; + set => GroupTextBox!.LastParentControl = value; } private KryptonTextBox? LastTextBox { - get => GroupTextBox.LastTextBox; - set => GroupTextBox.LastTextBox = value; + get => GroupTextBox!.LastTextBox; + set => GroupTextBox!.LastTextBox = value; } private void UpdateParent(Control parentControl) @@ -440,10 +444,10 @@ private void UpdateParent(Control parentControl) // Is there a change in the textbox or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastTextBox != GroupTextBox.TextBox)) + (LastTextBox != GroupTextBox!.TextBox)) { // We only modify the parent and visible state if processing for correct container - if ((GroupTextBox.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupTextBox!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupTextBox.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { // If we have added the custrom control to a parent before @@ -477,15 +481,15 @@ private void UpdateParent(Control parentControl) } } - private void UpdateEnabled(Control c) + private void UpdateEnabled(Control? c) { if (c != null) { // Start with the enabled state of the group element - var enabled = GroupTextBox.Enabled; + var enabled = GroupTextBox!.Enabled; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupTextBox.TextBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupTextBox?.TextBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value enabled = GroupTextBox.TextBoxDesigner.DesignEnabled; @@ -495,15 +499,15 @@ private void UpdateEnabled(Control c) } } - private bool ActualVisible(Control c) + private bool ActualVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupTextBox.Visible; + var visible = GroupTextBox!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupTextBox.TextBoxDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupTextBox?.TextBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupTextBox.TextBoxDesigner.DesignVisible; @@ -515,24 +519,25 @@ private bool ActualVisible(Control c) return false; } - private void UpdateVisible(Control c) + private void UpdateVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupTextBox.Visible; + var visible = GroupTextBox!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupTextBox.TextBoxDesigner != null)) + var textBoxDesigner = GroupTextBox.TextBoxDesigner; + if (!_ribbon.InDesignHelperMode && (GroupTextBox?.TextBoxDesigner != null)) { // And we are not using the design helpers, then use the design specified value - visible = GroupTextBox.TextBoxDesigner.DesignVisible; + visible = textBoxDesigner.DesignVisible; } if (visible) { // Only visible if on the currently selected page - if ((GroupTextBox.RibbonTab == null) || + if ((GroupTextBox!.RibbonTab == null) || (_ribbon.SelectedTab != GroupTextBox.RibbonTab)) { visible = false; @@ -549,7 +554,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupTextBox.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupTextBox.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupTextBox.TextBox) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupTextBox.TextBox) is VisualPopupMinimized)) ) @@ -559,7 +564,7 @@ private void UpdateVisible(Control c) else { // Check that the hierarchy of containers are all visible - KryptonRibbonGroupContainer container = GroupTextBox.RibbonContainer; + var container = GroupTextBox.RibbonContainer; // Keep going until we have searched the entire parent chain of containers while (container != null) @@ -583,23 +588,23 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupTextBox != null) { // Change in selected tab requires a retest of the control visibility - UpdateVisible(LastTextBox); + UpdateVisible(LastTextBox!); } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + var parent = Parent; // Keep going till we get to the top or find a group while (parent != null) @@ -622,7 +627,7 @@ private void OnMouseEnterControl(object sender, EventArgs e) } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTitle.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTitle.cs index df16f84ad..60741a48d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTitle.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTitle.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ internal class ViewDrawRibbonGroupTitle : ViewLeaf, private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroup _ribbonGroup; private readonly RibbonGroupTextToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; private Rectangle _displayRect; private int _dirtyPaletteLayout; private PaletteState _cacheState; @@ -42,11 +42,11 @@ public ViewDrawRibbonGroupTitle([DisallowNull] KryptonRibbon ribbon, Debug.Assert(ribbon != null); Debug.Assert(ribbonGroup != null); - _ribbon = ribbon; - _ribbonGroup = ribbonGroup; + _ribbon = ribbon!; + _ribbonGroup = ribbonGroup!; // Use a class to convert from ribbon group to content interface - _contentProvider = new RibbonGroupTextToContent(ribbon.StateCommon.RibbonGeneral, + _contentProvider = new RibbonGroupTextToContent(ribbon!.StateCommon.RibbonGeneral, ribbon.StateNormal.RibbonGroupNormalTitle); } @@ -116,10 +116,20 @@ public IPaletteRibbonText PaletteRibbonGroup /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // A change in state always causes a size and layout calculation if (_cacheState != State) @@ -143,7 +153,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, ClientRectangle, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); // Cache values that are needed to decide if layout is needed _displayRect = ClientRectangle; @@ -159,13 +169,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Use renderer to draw the text content if (_memento != null) { context.Renderer.RenderStandardContent.DrawContent(context, ClientRectangle, _contentProvider, _memento, VisualOrientation.Top, - PaletteState.Normal, false, false, true); + PaletteState.Normal, true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTrackBar.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTrackBar.cs index f8ff9148b..d78c51b85 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTrackBar.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupTrackBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,11 +21,11 @@ internal class ViewDrawRibbonGroupTrackBar : ViewComposite, IRibbonViewGroupItemView { #region Instance Fields - private readonly int NULL_CONTROL_WIDTH; // = 50; + private readonly int _nullControlWidth; // = 50; private readonly KryptonRibbon _ribbon; - private ViewDrawRibbonGroup _activeGroup; + private ViewDrawRibbonGroup? _activeGroup; private readonly TrackBarController? _controller; - private readonly NeedPaintHandler _needPaint; + private readonly NeedPaintHandler? _needPaint; private GroupItemSize _currentSize; #endregion @@ -45,10 +45,10 @@ public ViewDrawRibbonGroupTrackBar([DisallowNull] KryptonRibbon ribbon, Debug.Assert(needPaint != null); // Remember incoming references - _ribbon = ribbon; + _ribbon = ribbon!; GroupTrackBar = ribbonTrackBar; _needPaint = needPaint; - _currentSize = GroupTrackBar.ItemSizeCurrent; + _currentSize = GroupTrackBar!.ItemSizeCurrent; // Hook into the textbox events GroupTrackBar.MouseEnterControl += OnMouseEnterControl; @@ -71,7 +71,7 @@ public ViewDrawRibbonGroupTrackBar([DisallowNull] KryptonRibbon ribbon, KeyController = _controller; // We need to rest visibility of the textbox for each layout cycle - _ribbon.ViewRibbonManager.LayoutBefore += OnLayoutAction; + _ribbon.ViewRibbonManager!.LayoutBefore += OnLayoutAction; _ribbon.ViewRibbonManager.LayoutAfter += OnLayoutAction; // Define back reference to view for the text box definition @@ -80,9 +80,13 @@ public ViewDrawRibbonGroupTrackBar([DisallowNull] KryptonRibbon ribbon, // Give paint delegate to textbox so its palette changes are redrawn GroupTrackBar.ViewPaintDelegate = needPaint; + // Update all views to reflect current state + UpdateEnabled(GroupTrackBar.TrackBar); + UpdateVisible(GroupTrackBar.TrackBar); + // Hook into changes in the ribbon custom definition - GroupTrackBar.PropertyChanged += OnTextBoxPropertyChanged; - NULL_CONTROL_WIDTH = (int)(50 * FactorDpiX); + GroupTrackBar.PropertyChanged += OnTrackBarPropertyChanged; + _nullControlWidth = (int)(50 * FactorDpiX); } /// @@ -107,8 +111,8 @@ protected override void Dispose(bool disposing) GroupTrackBar.MouseEnterControl -= OnMouseEnterControl; GroupTrackBar.MouseLeaveControl -= OnMouseLeaveControl; GroupTrackBar.ViewPaintDelegate = null; - GroupTrackBar.PropertyChanged -= OnTextBoxPropertyChanged; - _ribbon.ViewRibbonManager.LayoutAfter -= OnLayoutAction; + GroupTrackBar.PropertyChanged -= OnTrackBarPropertyChanged; + _ribbon.ViewRibbonManager!.LayoutAfter -= OnLayoutAction; _ribbon.ViewRibbonManager.LayoutBefore -= OnLayoutAction; // Remove association with definition @@ -125,7 +129,7 @@ protected override void Dispose(bool disposing) /// /// Gets access to the owning group track bar instance. /// - public KryptonRibbonGroupTrackBar GroupTrackBar { get; private set; } + public KryptonRibbonGroupTrackBar? GroupTrackBar { get; private set; } #endregion @@ -137,7 +141,7 @@ protected override void Dispose(bool disposing) public override void LostFocus(Control c) { // Ask ribbon to shift focus to the hidden control - _ribbon.HideFocus(GroupTrackBar.TrackBar); + _ribbon.HideFocus(GroupTrackBar?.TrackBar); base.LostFocus(c); } #endregion @@ -147,17 +151,8 @@ public override void LostFocus(Control c) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() - { - if (GroupTrackBar is { Visible: true, LastTrackBar: { CanSelect: true } }) - { - return this; - } - else - { - return null; - } - } + public ViewBase GetFirstFocusItem() => GroupTrackBar is { Visible: true, LastTrackBar: { CanSelect: true } } ? this : null!; + #endregion #region GetLastFocusItem @@ -165,17 +160,8 @@ public override void LostFocus(Control c) /// Gets the last focus item from the item. /// /// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() - { - if (GroupTrackBar is { Visible: true, LastTrackBar: { CanSelect: true } }) - { - return this; - } - else - { - return null; - } - } + public ViewBase GetLastFocusItem() => GroupTrackBar is { Visible: true, LastTrackBar: { CanSelect: true } } ? this : null!; + #endregion #region GetNextFocusItem @@ -185,11 +171,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -200,11 +186,11 @@ public override void LostFocus(Control c) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { // Do we match the current item? matched = current == this; - return null; + return null!; } #endregion @@ -217,7 +203,7 @@ public override void LostFocus(Control c) public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) { // Only provide a key tip if we are visible and the target control can accept focus - if (Visible && LastTrackBar.CanFocus) + if (Visible && LastTrackBar!.CanFocus) { // Get the screen location of the button Rectangle viewRect = _ribbon.KeyTipToScreen(this); @@ -225,7 +211,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) // Determine the screen position of the key tip var screenPt = Point.Empty; - // Determine the screen position of the key tip dependant on item location/size + // Determine the screen position of the key tip dependent on item location/size switch (_currentSize) { case GroupItemSize.Large: @@ -237,7 +223,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) break; } - keyTipList.Add(new KeyTipInfo(GroupTrackBar.Enabled, + keyTipList.Add(new KeyTipInfo(GroupTrackBar!.Enabled, GroupTrackBar.KeyTip, screenPt, ClientRectangle, @@ -256,7 +242,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList, int lineHint) /// /// Reset the group item size to the item definition. /// - public void ResetGroupItemSize() => _currentSize = GroupTrackBar.ItemSizeCurrent; + public void ResetGroupItemSize() => _currentSize = GroupTrackBar!.ItemSizeCurrent; /// /// Discover the preferred size of the element. @@ -267,7 +253,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) var preferredSize = Size.Empty; // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // If there is a textbox associated then ask for its requested size if (LastTrackBar != null) @@ -282,7 +268,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) } else { - preferredSize.Width = NULL_CONTROL_WIDTH; + preferredSize.Width = _nullControlWidth; } preferredSize.Height = _currentSize == GroupItemSize.Large @@ -301,10 +287,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to change the layout of controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // If we have an actual control, position it with a pixel padding all around LastTrackBar?.SetBounds(ClientLocation.X + 1, @@ -328,7 +314,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // If we do not have a textbox - if (GroupTrackBar.TrackBar == null) + if (GroupTrackBar?.TrackBar == null) { // And we are in design time if (_ribbon.InDesignMode) @@ -339,8 +325,8 @@ public override void Render([DisallowNull] RenderContext context) drawRect.Height--; // Draw an indication of where the textbox will be - context.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); - context.Graphics.DrawRectangle(Pens.Gold, drawRect); + context?.Graphics.FillRectangle(Brushes.Goldenrod, drawRect); + context?.Graphics.DrawRectangle(Pens.Gold, drawRect); } } } @@ -373,9 +359,9 @@ protected virtual void OnNeedPaint(bool needLayout, Rectangle invalidRect) #endregion #region Implementation - private void OnContextClick(object sender, MouseEventArgs e) => GroupTrackBar.OnDesignTimeContextMenu(e); + private void OnContextClick(object? sender, MouseEventArgs e) => GroupTrackBar?.OnDesignTimeContextMenu(e); - private void OnTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnTrackBarPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; const bool UPDATE_PAINT = false; @@ -397,7 +383,7 @@ private void OnTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) if (updateLayout) { // If we are on the currently selected tab then... - if ((GroupTrackBar.RibbonTab != null) && + if ((GroupTrackBar?.RibbonTab != null) && (_ribbon.SelectedTab == GroupTrackBar.RibbonTab)) { // ...layout so the visible change is made @@ -423,16 +409,16 @@ private void OnTextBoxPropertyChanged(object sender, PropertyChangedEventArgs e) #pragma warning restore 162 } - private Control LastParentControl + private Control? LastParentControl { - get => GroupTrackBar.LastParentControl; - set => GroupTrackBar.LastParentControl = value; + get => GroupTrackBar?.LastParentControl; + set => GroupTrackBar!.LastParentControl = value; } private KryptonTrackBar? LastTrackBar { - get => GroupTrackBar.LastTrackBar; - set => GroupTrackBar.LastTrackBar = value; + get => GroupTrackBar?.LastTrackBar; + set => GroupTrackBar!.LastTrackBar = value; } private void UpdateParent(Control parentControl) @@ -440,13 +426,13 @@ private void UpdateParent(Control parentControl) // Is there a change in the textbox or a change in // the parent control that is hosting the control... if ((parentControl != LastParentControl) || - (LastTrackBar != GroupTrackBar.TrackBar)) + (LastTrackBar != GroupTrackBar?.TrackBar)) { // We only modify the parent and visible state if processing for correct container - if ((GroupTrackBar.RibbonContainer.RibbonGroup.ShowingAsPopup && (parentControl is VisualPopupGroup)) || + if ((GroupTrackBar!.RibbonContainer!.RibbonGroup!.ShowingAsPopup && (parentControl is VisualPopupGroup)) || (!GroupTrackBar.RibbonContainer.RibbonGroup.ShowingAsPopup && parentControl is not VisualPopupGroup)) { - // If we have added the custrom control to a parent before + // If we have added the custom control to a parent before if ((LastTrackBar != null) && (LastParentControl != null)) { // If that control is still a child of the old parent @@ -477,15 +463,15 @@ private void UpdateParent(Control parentControl) } } - private void UpdateEnabled(Control c) + private void UpdateEnabled(Control? c) { if (c != null) { // Start with the enabled state of the group element - var enabled = GroupTrackBar.Enabled; + var enabled = GroupTrackBar!.Enabled; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupTrackBar.TrackBarDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupTrackBar?.TrackBarDesigner != null)) { // And we are not using the design helpers, then use the design specified value enabled = GroupTrackBar.TrackBarDesigner.DesignEnabled; @@ -495,15 +481,15 @@ private void UpdateEnabled(Control c) } } - private bool ActualVisible(Control c) + private bool ActualVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupTrackBar.Visible; + var visible = GroupTrackBar!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupTrackBar.TrackBarDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupTrackBar?.TrackBarDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupTrackBar.TrackBarDesigner.DesignVisible; @@ -515,15 +501,15 @@ private bool ActualVisible(Control c) return false; } - private void UpdateVisible(Control c) + private void UpdateVisible(Control? c) { if (c != null) { // Start with the visible state of the group element - var visible = GroupTrackBar.Visible; + var visible = GroupTrackBar!.Visible; // If we have an associated designer setup... - if (!_ribbon.InDesignHelperMode && (GroupTrackBar.TrackBarDesigner != null)) + if (!_ribbon.InDesignHelperMode && (GroupTrackBar?.TrackBarDesigner != null)) { // And we are not using the design helpers, then use the design specified value visible = GroupTrackBar.TrackBarDesigner.DesignVisible; @@ -532,7 +518,7 @@ private void UpdateVisible(Control c) if (visible) { // Only visible if on the currently selected page - if ((GroupTrackBar.RibbonTab == null) || + if ((GroupTrackBar?.RibbonTab == null) || (_ribbon.SelectedTab != GroupTrackBar.RibbonTab)) { visible = false; @@ -549,7 +535,7 @@ private void UpdateVisible(Control c) else { // Check that the group is not collapsed - if (GroupTrackBar.RibbonContainer.RibbonGroup.IsCollapsed && + if (GroupTrackBar.RibbonContainer!.RibbonGroup!.IsCollapsed && ((_ribbon.GetControllerControl(GroupTrackBar.TrackBar) is KryptonRibbon) || (_ribbon.GetControllerControl(GroupTrackBar.TrackBar) is VisualPopupMinimized)) ) @@ -559,7 +545,7 @@ private void UpdateVisible(Control c) else { // Check that the hierarchy of containers are all visible - KryptonRibbonGroupContainer container = GroupTrackBar.RibbonContainer; + KryptonRibbonGroupContainer? container = GroupTrackBar.RibbonContainer; // Keep going until we have searched the entire parent chain of containers while (container != null) @@ -583,7 +569,7 @@ private void UpdateVisible(Control c) } } - private void OnLayoutAction(object sender, EventArgs e) + private void OnLayoutAction(object? sender, EventArgs e) { // If not disposed then we still have a element reference if (GroupTrackBar != null) @@ -593,13 +579,13 @@ private void OnLayoutAction(object sender, EventArgs e) } } - private void OnMouseEnterControl(object sender, EventArgs e) + private void OnMouseEnterControl(object? sender, EventArgs e) { // Reset the active group setting _activeGroup = null; // Find the parent group instance - ViewBase parent = Parent; + ViewBase? parent = Parent; // Keep going till we get to the top or find a group while (parent != null) @@ -618,17 +604,17 @@ private void OnMouseEnterControl(object sender, EventArgs e) if (_activeGroup != null) { _activeGroup.Tracking = true; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint?.Invoke(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); } } - private void OnMouseLeaveControl(object sender, EventArgs e) + private void OnMouseLeaveControl(object? sender, EventArgs e) { // If we have a cached group we made active if (_activeGroup != null) { _activeGroup.Tracking = false; - _needPaint(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); + _needPaint?.Invoke(this, new NeedLayoutEventArgs(false, _activeGroup.ClientRectangle)); _activeGroup = null; } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorder.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorder.cs index 55beae98f..14be6e1c8 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorder.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -28,7 +28,7 @@ internal class ViewDrawRibbonGroupsBorder : ViewComposite, private readonly Padding _borderPaddingVisualStudio2010; private readonly Padding _borderPaddingVisualStudio; private IPaletteRibbonBack _inherit; - private IDisposable _memento; + private IDisposable? _memento; private readonly bool _borderOutside; #endregion @@ -39,16 +39,16 @@ internal class ViewDrawRibbonGroupsBorder : ViewComposite, /// Reference to owning ribbon control. /// Should border be placed outside the contents. /// Delegate for notifying paint/layout changes. - public ViewDrawRibbonGroupsBorder([DisallowNull] KryptonRibbon ribbon, + public ViewDrawRibbonGroupsBorder([DisallowNull] KryptonRibbon? ribbon, bool borderOutside, - [DisallowNull] NeedPaintHandler needPaintDelegate) + [DisallowNull] NeedPaintHandler? needPaintDelegate) { - Debug.Assert(ribbon != null); - Debug.Assert(needPaintDelegate != null); + Debug.Assert(ribbon is not null); + Debug.Assert(needPaintDelegate is not null); // Remember incoming references - Ribbon = ribbon; - NeedPaintDelegate = needPaintDelegate; + Ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + NeedPaintDelegate = needPaintDelegate ?? throw new ArgumentNullException(nameof(needPaintDelegate)); _borderOutside = borderOutside; _borderPadding2007 = new Padding((int)(3 * FactorDpiX), (int)(3 * FactorDpiY), (int)(3 * FactorDpiX), (int)(2 * FactorDpiY)); _borderPadding2010 = new Padding((int)(1 * FactorDpiX), (int)(1 * FactorDpiY), (int)(1 * FactorDpiX), (int)(3 * FactorDpiY)); @@ -145,7 +145,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Do we need to add on our own border size if (!_borderOutside) @@ -169,6 +169,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // If there is a selected tab and it is a context tab use the context specific palette if (!string.IsNullOrEmpty(Ribbon.SelectedTab?.ContextName)) { @@ -192,8 +197,7 @@ public override void RenderBefore(RenderContext context) drawRect.Width += borderPadding.Horizontal; drawRect.Height += borderPadding.Vertical; } - else if (Ribbon.CaptionArea.DrawCaptionOnComposition && - (Ribbon.RibbonShape == PaletteRibbonShape.Office2010)) + else if (Ribbon.RibbonShape == PaletteRibbonShape.Office2010) { // Prevent the left and right edges from being drawn drawRect.X -= 1; @@ -201,7 +205,7 @@ public override void RenderBefore(RenderContext context) } // Use renderer to draw the tab background - _memento = context.Renderer.RenderRibbon.DrawRibbonBack(Ribbon.RibbonShape, context, drawRect, State, this, VisualOrientation.Top, false, _memento); + _memento = context.Renderer.RenderRibbon.DrawRibbonBack(Ribbon.RibbonShape, context, drawRect, State, this, VisualOrientation.Top, _memento); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorderSynch.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorderSynch.cs index ae06ade5f..0ba599932 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorderSynch.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonGroupsBorderSynch.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,7 +20,7 @@ namespace Krypton.Ribbon internal class ViewDrawRibbonGroupsBorderSynch : ViewDrawRibbonGroupsBorder { #region Classes - private class TabToView : Dictionary { } + private class TabToView : Dictionary; #endregion #region Static Fields @@ -64,10 +64,9 @@ public override string ToString() => public ViewDrawRibbonGroup? ViewGroupFromPoint(Point pt) { // There can only be groups showing for the currently selected tab - if (Ribbon.SelectedTab != null && _tabToView.ContainsKey(Ribbon.SelectedTab)) + if (Ribbon.SelectedTab != null && _tabToView.TryGetValue(Ribbon.SelectedTab, out ViewLayoutRibbonScrollPort? viewScrollPort)) { // Get the scroll port for this tab - ViewLayoutRibbonScrollPort viewScrollPort = _tabToView[Ribbon.SelectedTab]; // The first child of the scroll port is always the view control var viewControl = viewScrollPort[0] as ViewLayoutControl; @@ -100,7 +99,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains /// Gets the first focus item within the currently selected tab. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { if ((Ribbon.SelectedTab != null) && _tabToView.ContainsKey(Ribbon.SelectedTab)) @@ -109,7 +108,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains } else { - return null; + return null!; } } #endregion @@ -119,7 +118,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains /// Gets the last focus item within the currently selected tab. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { if ((Ribbon.SelectedTab != null) && _tabToView.ContainsKey(Ribbon.SelectedTab)) @@ -128,7 +127,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains } else { - return null; + return null!; } } #endregion @@ -139,7 +138,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains ///
/// The view that is currently focused. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current) + public ViewBase GetNextFocusItem(ViewBase current) { if ((Ribbon.SelectedTab != null) && _tabToView.ContainsKey(Ribbon.SelectedTab)) @@ -148,7 +147,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains } else { - return null; + return null!; } } #endregion @@ -159,7 +158,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains ///
/// The view that is currently focused. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current) + public ViewBase GetPreviousFocusItem(ViewBase current) { if ((Ribbon.SelectedTab != null) && _tabToView.ContainsKey(Ribbon.SelectedTab)) @@ -168,7 +167,7 @@ public KeyTipInfo[] GetGroupKeyTips(KryptonRibbonTab tab) => _tabToView.Contains } else { - return null; + return null!; } } #endregion @@ -212,9 +211,9 @@ private void SyncChildrenToRibbonTabs() ViewLayoutRibbonScrollPort? view = null; // Get the currently cached view for the tab - if (_tabToView.ContainsKey(tab)) + if (_tabToView.TryGetValue(tab, out ViewLayoutRibbonScrollPort? value)) { - view = _tabToView[tab]; + view = value; } // If a new tab, create a view for it now diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonKeyTip.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonKeyTip.cs index 971422897..54cfa92fc 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonKeyTip.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonKeyTip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonMinimizeBar.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonMinimizeBar.cs index 01ffe7071..76142d459 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonMinimizeBar.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonMinimizeBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -36,7 +36,7 @@ public ViewDrawRibbonMinimizeBar([DisallowNull] IPaletteRibbonGeneral palette) : base(SEP_WIDTH, true) { Debug.Assert(palette != null); - _palette = palette; + _palette = palette!; } /// diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonPanel.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonPanel.cs index c7c0b391e..a0aeb93f0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonPanel.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -29,6 +29,9 @@ internal class ViewDrawRibbonPanel : ViewDrawPanel private readonly KryptonRibbon _ribbon; private readonly NeedPaintHandler _paintDelegate; private readonly Blend _compBlend; + + private readonly IPaletteRibbonGeneral _palette; + #endregion #region Identity @@ -38,121 +41,26 @@ internal class ViewDrawRibbonPanel : ViewDrawPanel /// Reference to owning ribbon instance. /// Reference to palette for obtaining background colors. /// Delegate for generating repaints. + /// Source for palette values. public ViewDrawRibbonPanel(KryptonRibbon ribbon, IPaletteBack paletteBack, - NeedPaintHandler paintDelegate) + NeedPaintHandler paintDelegate, + IPaletteRibbonGeneral palette) : base(paletteBack) { _ribbon = ribbon; _paintDelegate = paintDelegate; + _palette = palette; _compBlend = new Blend { //_compBlend.Positions = new float[] { 0.0f, 0.4f, 1.0f }; //_compBlend.Factors = new float[] { 0.0f, 0.87f, 1.0f }; - Positions = new[] { 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f }, - Factors = new[] { 0.0f, 0.10f, 0.25f, 0.50f, 0.70f, 0.80f } + Positions = [0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f], + Factors = [0.0f, 0.10f, 0.25f, 0.50f, 0.70f, 0.80f] }; } #endregion - #region Paint - /// - /// Perform rendering before child elements are rendered. - /// - /// Rendering context. - public override void RenderBefore(RenderContext context) - { - // If we are rendering using desktop window composition and using the Office 2010 shape - // of ribbon then we need to draw the tabs area as part of the window chromw - if (DrawOnComposition && _ribbon.RibbonShape is PaletteRibbonShape.Office2010 or PaletteRibbonShape.Office2013 or PaletteRibbonShape.Microsoft365 or PaletteRibbonShape.VisualStudio) - { - var tabsHeight = _ribbon.TabsArea.ClientHeight; - - // Clip to prevent drawing over the tabs area - using (var clip = new Clipping(context.Graphics, - new Rectangle(ClientLocation.X, ClientLocation.Y + tabsHeight, ClientWidth, - ClientHeight - tabsHeight))) - { - base.RenderBefore(context); - } - - //context.Graphics.DrawRectangle(new Pen(Color.Blue), new Rectangle(ClientLocation.X, ClientLocation.Y, ClientWidth, tabsHeight)); - PaintRectangle(context.Graphics, new Rectangle(ClientLocation.X, ClientLocation.Y, ClientWidth, tabsHeight), true, null); - } - else - { - base.RenderBefore(context); - } - } - - /// - /// Paint the provided rectangle. - /// - /// Graphics to use for drawing. - /// Rectangle to be drawn. - /// True if the edges needs to be drawn. - /// Sender of the message.. - public void PaintRectangle(Graphics? g, Rectangle rect, bool edges, Control? sender) - { - // If we are rendering using desktop window composition and using the Office 2010 shape - // of ribbon then we need to draw the tabs area as part of the window chrome - // Not for 2007 - if (DrawOnComposition - && _ribbon.RibbonShape is PaletteRibbonShape.Office2010 or PaletteRibbonShape.VisualStudio2010 or PaletteRibbonShape.Office2013 or PaletteRibbonShape.Microsoft365 or PaletteRibbonShape.VisualStudio - ) - { - if (edges) - { - rect.X += EDGE_GAP; - rect.Width -= EDGE_GAP * 2; - } - else if ((sender != null) && !_ribbon.MinimizedMode) - { - using var border = new ViewDrawRibbonGroupsBorder(_ribbon, false, _paintDelegate); - border.ClientRectangle = new Rectangle(-sender.Location.X, rect.Bottom - 1, _ribbon.Width, 10); - using var context = new RenderContext(_ribbon, g, rect, _ribbon.Renderer); - border.Render(context); - } - - if (g == null) - { - return; - } - - switch (_ribbon.RibbonShape) - { - case PaletteRibbonShape.Office2010: - case PaletteRibbonShape.VisualStudio2010: - { - //Adjust Color of the gradient - Color gradientColor = KryptonManager.CurrentGlobalPalette == KryptonManager.PaletteOffice2010Black - ? Color.FromArgb(39, 39, 39) - : Color.White; - - using var backBrush = new LinearGradientBrush( - rect with { Y = rect.Y - 1, Height = rect.Height + 1 }, Color.Transparent, - gradientColor, 90f); - backBrush.Blend = _compBlend; - g.FillRectangle(backBrush, rect with { Height = rect.Height - 1 }); - break; - } - case PaletteRibbonShape.Office2013: - case PaletteRibbonShape.Microsoft365: - case PaletteRibbonShape.VisualStudio: - { - using var backBrush = new SolidBrush(Color.White); - g.FillRectangle(backBrush, rect with { Height = rect.Height - 1 }); - break; - } - } - } - } - #endregion - - #region Implementation - private bool DrawOnComposition => _ribbon is { CaptionArea.DrawCaptionOnComposition: true }; - - #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATBorder.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATBorder.cs index d3c170366..0e19264f3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATBorder.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATBorder.cs @@ -5,10 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -31,7 +28,6 @@ internal class ViewDrawRibbonQATBorder : ViewComposite private readonly Padding _fullbarBorderPadding_2010; // = new(2); private readonly Padding _noBorderPadding; // = new(1, 0, 1, 0); private readonly KryptonRibbon _ribbon; - private readonly NeedPaintHandler _needPaintDelegate; private IDisposable? _memento; private readonly bool _minibar; #endregion @@ -60,8 +56,7 @@ public ViewDrawRibbonQATBorder([DisallowNull] KryptonRibbon ribbon, _fullbarBorderPadding_2010 = new Padding((int)(2 * FactorDpiX), (int)(2 * FactorDpiY), (int)(2 * FactorDpiX), (int)(2 * FactorDpiY)); _noBorderPadding = new Padding((int)(1 * FactorDpiX), 0, (int)(1 * FactorDpiX), 0); // Remember incoming references - _ribbon = ribbon; - _needPaintDelegate = needPaintDelegate; + _ribbon = ribbon!; _minibar = minibar; OverlapAppButton = true; } @@ -158,7 +153,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - Rectangle clientRect = context.DisplayRectangle; + Rectangle clientRect = context!.DisplayRectangle; // For the minibar we have to position ourself at bottom of available area if (_minibar) @@ -187,6 +182,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // We never draw the background/border for Office 2010 shape QAT if (_minibar && (_ribbon.RibbonShape == PaletteRibbonShape.Office2010)) { @@ -232,11 +232,8 @@ public override void RenderBefore(RenderContext context) palette = _ribbon.StateCommon.RibbonQATFullbar; } - // Decide if we need to draw onto a composition area - var composition = OwnerForm is { ApplyComposition: true, ApplyCustomChrome: true }; - // Perform actual drawing - _memento = context.Renderer?.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, state, palette, VisualOrientation.Top, composition, _memento); + _memento = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, drawRect, state, palette, VisualOrientation.Top, _memento); } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATButton.cs index 043d9dfa0..9f7b8872c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -44,8 +44,8 @@ public ViewDrawRibbonQATButton([DisallowNull] KryptonRibbon ribbon, Debug.Assert(qatButton != null); // Remember incoming references - _ribbon = ribbon; - QATButton = qatButton; + _ribbon = ribbon!; + QATButton = qatButton!; _viewSize = new Size((int)(22 * FactorDpiX), (int)(22*FactorDpiY)); @@ -54,18 +54,18 @@ public ViewDrawRibbonQATButton([DisallowNull] KryptonRibbon ribbon, Component = qatButton as Component; // Attach a controller to this element for the pressing of the button - var controller = new QATButtonController(ribbon, this, needPaint); + var controller = new QATButtonController(ribbon!, this, needPaint); controller.Click += OnClick; SourceController = controller; KeyController = controller; // Create controller for intercepting events to determine tool tip handling - MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, + MouseController = new ToolTipController(_ribbon.TabsArea?.ButtonSpecManager?.ToolTipManager!, this, controller); // Use a class to convert from ribbon tab to content interface - _contentProvider = new QATButtonToContent(qatButton); + _contentProvider = new QATButtonToContent(qatButton!); // Create and add the draw content for display inside the button _drawContent = new ViewDrawContent(_contentProvider, this, VisualOrientation.Top); @@ -153,7 +153,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let child elements layout in given space base.Layout(context); @@ -167,6 +167,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Make sure we reflect the current enabled state if (!Enabled && _ribbon.InDesignHelperMode) { @@ -174,26 +179,27 @@ public override void RenderBefore(RenderContext context) } IPaletteBack paletteBack = _ribbon.StateCommon.RibbonQATButton.PaletteBack; - IPaletteBorder paletteBorder = _ribbon.StateCommon.RibbonQATButton.PaletteBorder; + IPaletteBorder? paletteBorder = _ribbon.StateCommon.RibbonQATButton.PaletteBorder; // Do we need to draw the background? if (paletteBack.GetBackDraw(State) == InheritBool.True) { // Get the border path which the background is clipped to drawing within - using GraphicsPath borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, paletteBorder, VisualOrientation.Top, State); - Padding borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(paletteBorder, State, VisualOrientation.Top); + using GraphicsPath borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, paletteBorder!, VisualOrientation.Top, State); + Padding borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(paletteBorder!, State, VisualOrientation.Top); // Apply the padding depending on the orientation Rectangle enclosingRect = CommonHelper.ApplyPadding(VisualOrientation.Top, ClientRectangle, borderPadding); // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, paletteBorder!.GetBorderGraphicsHint(PaletteState.Normal)); _mementoBack = context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, paletteBack, VisualOrientation.Top, State, _mementoBack); } // Do we need to draw the border? - if (paletteBorder.GetBorderDraw(State) == InheritBool.True) + if (paletteBorder?.GetBorderDraw(State) == InheritBool.True) { context.Renderer.RenderStandardBorder.DrawBorder(context, ClientRectangle, paletteBorder, VisualOrientation.Top, State); @@ -204,19 +210,19 @@ public override void RenderBefore(RenderContext context) #endregion #region Implementation - private void OnRibbonEnableChanged(object sender, EventArgs e) => UpdateEnabled(); + private void OnRibbonEnableChanged(object? sender, EventArgs e) => UpdateEnabled(); private void UpdateEnabled() => // Content is only enabled if the QAT button is enabled // and the owning ribbon control is also enabled _drawContent.Enabled = base.Enabled && _ribbon.Enabled; - private void OnClick(object sender, MouseEventArgs e) + private void OnClick(object? sender, MouseEventArgs e) { // We do not operate the qat button at design time if (!_ribbon.InDesignMode) { - Form ownerForm = _ribbon.FindForm(); + Form? ownerForm = _ribbon.FindForm(); // Ensure the form we are inside is active ownerForm?.Activate(); @@ -229,7 +235,7 @@ private void OnClick(object sender, MouseEventArgs e) #region IContentValues - private Image _cachedImage; + private Image? _cachedImage; /// /// Gets the image used for the ribbon tab. /// @@ -240,11 +246,11 @@ private void OnClick(object sender, MouseEventArgs e) if (_cachedImage == null) { var sourceImage = QATButton.GetImage(); - var currentWidth = sourceImage.Width * FactorDpiX; + var currentWidth = sourceImage!.Width * FactorDpiX; var currentHeight = sourceImage.Height * FactorDpiY; /*if ((int)currentHeight == sourceImage.Height) { - // Need to workaround the image drawing off the bottom of the form title bar when scaling @ 100% + // Need to work around the image drawing off the bottom of the form title bar when scaling @ 100% currentHeight -= 2; // Has to be even to ensure that horizontal lines are still drawn. } */ diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButton.cs index d1275f1e1..a8ad7e550 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -49,13 +49,13 @@ public ViewDrawRibbonQATExtraButton([DisallowNull] KryptonRibbon ribbon, Debug.Assert(ribbon != null); // Remember incoming references - _ribbon = ribbon; + _ribbon = ribbon!; // Create delegate used to process end of click action _finishDelegate = ClickFinished; // Attach a controller to this element for the pressing of the button - var controller = new QATExtraButtonController(ribbon, this, needPaint); + var controller = new QATExtraButtonController(ribbon!, this, needPaint); controller.Click += OnClick; MouseController = controller; SourceController = controller; @@ -133,7 +133,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion @@ -144,31 +144,37 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Update the enabled state of the button Enabled = _ribbon.Enabled; IPaletteBack paletteBack = _ribbon.StateCommon.RibbonGroupDialogButton.PaletteBack; - IPaletteBorder paletteBorder = _ribbon.StateCommon.RibbonGroupDialogButton.PaletteBorder; + IPaletteBorder? paletteBorder = _ribbon.StateCommon.RibbonGroupDialogButton.PaletteBorder; IPaletteRibbonGeneral paletteGeneral = _ribbon.StateCommon.RibbonGeneral; // Do we need to draw the background? if (paletteBack.GetBackDraw(State) == InheritBool.True) { // Get the border path which the background is clipped to drawing within - using GraphicsPath borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, paletteBorder, VisualOrientation.Top, State); - Padding borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(paletteBorder, State, VisualOrientation.Top); + using GraphicsPath borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, paletteBorder!, VisualOrientation.Top, State); + Padding borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(paletteBorder!, State, VisualOrientation.Top); // Apply the padding depending on the orientation Rectangle enclosingRect = CommonHelper.ApplyPadding(VisualOrientation.Top, ClientRectangle, borderPadding); // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, paletteBorder!.GetBorderGraphicsHint(PaletteState.Normal)); _mementoBack = context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, paletteBack, VisualOrientation.Top, State, _mementoBack); } // Do we need to draw the border? - if (paletteBorder.GetBorderDraw(State) == InheritBool.True) + if (paletteBorder?.GetBorderDraw(State) == InheritBool.True) { context.Renderer.RenderStandardBorder.DrawBorder(context, ClientRectangle, paletteBorder, VisualOrientation.Top, State); @@ -191,16 +197,16 @@ public override void RenderBefore(RenderContext context) #endregion #region Implementation - private void ClickFinished(object sender, EventArgs e) + private void ClickFinished(object? sender, EventArgs e) { // Get access to our mouse controller - var controller = (LeftDownButtonController)MouseController; + var controller = MouseController as LeftDownButtonController; // Remove the fixed pressed appearance controller?.RemoveFixed(); } - private void OnClick(object sender, MouseEventArgs e) + private void OnClick(object? sender, MouseEventArgs e) { Form? ownerForm = _ribbon.FindForm(); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButtonMini.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButtonMini.cs index 9259b9ccf..38d83878c 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButtonMini.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATExtraButtonMini.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -19,8 +19,8 @@ namespace Krypton.Ribbon /// internal class ViewDrawRibbonQATExtraButtonMini : ViewDrawRibbonQATExtraButton { - private readonly int MINI_BUTTON_HEIGHT; // = 22; - private readonly int MINI_BUTTON_OFFSET; // = 24; + private readonly int _miniButtonHeight; // = 22; + private readonly int _miniButtonOffset; // = 24; #region Identity /// /// Initialize a new instance of the ViewDrawRibbonQATExtraButtonMini class. @@ -31,8 +31,8 @@ public ViewDrawRibbonQATExtraButtonMini(KryptonRibbon ribbon, NeedPaintHandler needPaint) : base(ribbon, needPaint) { - MINI_BUTTON_HEIGHT = (int)(22 * FactorDpiY); - MINI_BUTTON_OFFSET = (int)(24 * FactorDpiX); + _miniButtonHeight = (int)(22 * FactorDpiY); + _miniButtonOffset = (int)(24 * FactorDpiX); } /// @@ -54,11 +54,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - Rectangle clientRect = context.DisplayRectangle; + Rectangle clientRect = context!.DisplayRectangle; // For the minibar we have to position ourself at bottom of available area - clientRect.Y = clientRect.Bottom - 1 - MINI_BUTTON_OFFSET; - clientRect.Height = MINI_BUTTON_HEIGHT; + clientRect.Y = clientRect.Bottom - 1 - _miniButtonOffset; + clientRect.Height = _miniButtonHeight; // Use modified size to position base class and children context.DisplayRectangle = clientRect; diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATOverflow.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATOverflow.cs index 27abfa427..4bafffeef 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATOverflow.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonQATOverflow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -17,14 +17,14 @@ namespace Krypton.Ribbon /// /// Draws the border around the overflow popup of the quick access toolbar. /// - internal class ViewDrawRibbonQATOverflow : ViewComposite + internal class ViewDrawRibbonQATOverflow : ViewComposite { #region Instance Fields private readonly Padding _borderPadding; // = new(3); - private readonly int QAT_HEIGHT_FULL; // = 28; + private readonly int _qatHeightFull; // = 28; private readonly KryptonRibbon _ribbon; private readonly NeedPaintHandler _needPaintDelegate; - private IDisposable _memento; + private IDisposable? _memento; #endregion #region Identity @@ -40,10 +40,10 @@ public ViewDrawRibbonQATOverflow([DisallowNull] KryptonRibbon ribbon, Debug.Assert(needPaintDelegate != null); // Remember incoming references - _ribbon = ribbon; - _needPaintDelegate = needPaintDelegate; + _ribbon = ribbon!; + _needPaintDelegate = needPaintDelegate!; _borderPadding = new Padding((int)(3 * FactorDpiX), (int)(3 * FactorDpiY), (int)(3 * FactorDpiX), (int)(3 * FactorDpiY)); - QAT_HEIGHT_FULL = (int)(28 * FactorDpiY); + _qatHeightFull = (int)(28 * FactorDpiY); } /// @@ -85,11 +85,11 @@ public override Size GetPreferredSize(ViewLayoutContext context) // Add on the border padding preferredSize = CommonHelper.ApplyPadding(Orientation.Horizontal, preferredSize, _borderPadding); - preferredSize.Height = Math.Max(preferredSize.Height, QAT_HEIGHT_FULL); + preferredSize.Height = Math.Max(preferredSize.Height, _qatHeightFull); return preferredSize; } - + /// /// Perform a layout of the elements. /// @@ -98,7 +98,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - Rectangle clientRect = context.DisplayRectangle; + Rectangle clientRect = context!.DisplayRectangle; ClientRectangle = clientRect; @@ -118,14 +118,21 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) => _memento = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, + public override void RenderBefore(RenderContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + _memento = context.Renderer.RenderRibbon.DrawRibbonBack(_ribbon.RibbonShape, context, ClientRectangle, PaletteState.Normal, _ribbon.StateCommon.RibbonQATOverflow, VisualOrientation.Top, - false, _memento); + } #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentDocs.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentDocs.cs index 72146070d..9b78aa064 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentDocs.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentDocs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -23,7 +23,7 @@ internal class ViewDrawRibbonRecentDocs : ViewLeaf, #region Instance Fields private readonly KryptonRibbon _ribbon; private readonly RibbonRecentDocsTitleToContent _contentProvider; - private IDisposable _memento; + private IDisposable? _memento; #endregion #region Identity @@ -34,10 +34,10 @@ internal class ViewDrawRibbonRecentDocs : ViewLeaf, public ViewDrawRibbonRecentDocs([DisallowNull] KryptonRibbon ribbon) { Debug.Assert(ribbon != null); - _ribbon = ribbon; + _ribbon = ribbon!; // Use a class to convert from ribbon recent docs to content interface - _contentProvider = new RibbonRecentDocsTitleToContent(ribbon.StateCommon.RibbonGeneral, + _contentProvider = new RibbonRecentDocsTitleToContent(ribbon!.StateCommon.RibbonGeneral, ribbon.StateCommon.RibbonAppMenuDocsTitle); } @@ -75,10 +75,17 @@ protected override void Dispose(bool disposing) /// Discover the preferred size of the element. /// /// Layout context. - public override Size GetPreferredSize(ViewLayoutContext context) => - context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, + public override Size GetPreferredSize(ViewLayoutContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + return context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); + } /// /// Perform a layout of the elements. @@ -86,10 +93,20 @@ public override Size GetPreferredSize(ViewLayoutContext context) => /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Remember to dispose of old memento if (_memento != null) @@ -102,7 +119,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, ClientRectangle, _contentProvider, this, VisualOrientation.Top, - PaletteState.Normal, false, false); + PaletteState.Normal); } #endregion @@ -113,13 +130,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Use renderer to draw the text content if (_memento != null) { context.Renderer.RenderStandardContent.DrawContent(context, ClientRectangle, _contentProvider, _memento, VisualOrientation.Top, - PaletteState.Normal, false, false, true); + PaletteState.Normal, true); } } #endregion @@ -143,8 +165,8 @@ public override void RenderBefore(RenderContext context) /// Gets the short text used as the main ribbon title. /// /// Title string. - public string GetShortText() => !string.IsNullOrEmpty(_ribbon.RibbonStrings.RecentDocuments) - ? _ribbon.RibbonStrings.RecentDocuments + public string GetShortText() => !string.IsNullOrEmpty(KryptonManager.Strings.RibbonStrings.RecentDocuments) + ? KryptonManager.Strings.RibbonStrings.RecentDocuments : string.Empty; /// diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentShortcut.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentShortcut.cs index 30c33f3d0..0dca38513 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentShortcut.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonRecentShortcut.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -57,11 +57,11 @@ public override void RenderBefore([DisallowNull] RenderContext context) } // Only draw the shortcut text if there is some defined - var shortcut = Values.GetShortText(); + var shortcut = Values?.GetShortText(); if (!string.IsNullOrEmpty(shortcut)) { // Only draw shortcut if the shortcut is not equal to the fixed string 'A' - if (!shortcut.Equals("A")) + if (!shortcut!.Equals("A")) { base.RenderBefore(context); } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonScrollButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonScrollButton.cs index c070ec80e..e3190f051 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonScrollButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonScrollButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -88,7 +88,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion @@ -99,6 +99,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Create a border offset down and right for drawing a shadow Rectangle shadowRect = ClientRectangle; shadowRect.X++; @@ -112,7 +117,7 @@ public override void RenderBefore(RenderContext context) using GraphicsPath borderPath = CreateBorderPath(ClientRectangle), shadowPath = CreateBorderPath(shadowRect); // Are we allowed to draw a border? - if (_ribbon.StateCommon.RibbonScroller.PaletteBorder.GetBorderDraw(State) == InheritBool.True) + if (_ribbon.StateCommon.RibbonScroller.PaletteBorder!.GetBorderDraw(State) == InheritBool.True) { // Draw the border shadow using var aa = new AntiAlias(context.Graphics); @@ -129,7 +134,7 @@ public override void RenderBefore(RenderContext context) } // Are we allowed to draw the content? - if (_ribbon.StateCommon.RibbonScroller.PaletteContent.GetContentDraw(State) == InheritBool.True) + if (_ribbon.StateCommon.RibbonScroller.PaletteContent!.GetContentDraw(State) == InheritBool.True) { // Get the text color from palette Color textColor = _ribbon.StateCommon.RibbonScroller.PaletteContent.GetContentShortTextColor1(State); @@ -201,7 +206,7 @@ private void DrawArrow(Graphics? g, Color textColor, Rectangle rect) // Create path that describes the arrow in orientation needed using GraphicsPath arrowPath = CreateArrowPath(rect); using var arrowBrush = new SolidBrush(textColor); - g.FillPath(arrowBrush, arrowPath); + g?.FillPath(arrowBrush, arrowPath); } private GraphicsPath CreateArrowPath(Rectangle rect) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTab.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTab.cs index 58f48673b..3f282d915 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -57,14 +57,14 @@ static ViewDrawRibbonTab() { _contextBlend2007 = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.41f, 0.7f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.41f, 0.7f, 1.0f] }; _contextBlend2010 = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.6f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.6f, 1.0f] }; } @@ -117,7 +117,7 @@ public ViewDrawRibbonTab([DisallowNull] KryptonRibbon ribbon, Component = _ribbonTab; // Create and add the draw content for display inside the tab - Add(new ViewDrawContent(_contentProvider, this, VisualOrientation.Top, true, false)); + Add(new ViewDrawContent(_contentProvider, this, VisualOrientation.Top)); // Create the state specific memento array _mementos = new IDisposable[Enum.GetValues(typeof(PaletteState)).Length]; @@ -366,7 +366,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _cacheState = State; } - // Do we need to actually perform the relayout? + // Do we need to actually perform the re-layout? if ((_displayRect != ClientRectangle) || (Ribbon.DirtyPaletteCounter != _dirtyPaletteLayout)) { @@ -397,11 +397,16 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore(RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Ensure that child elements have correct palette state CheckPaletteState(context); // Grab the context tab set that relates to this tab - ContextTabSet? cts = ViewLayoutRibbonTabs.ContextTabSets[RibbonTab?.ContextName]; + ContextTabSet? cts = ViewLayoutRibbonTabs.ContextTabSets[RibbonTab!.ContextName]; switch (Ribbon.RibbonShape) { @@ -423,15 +428,14 @@ public override void RenderBefore(RenderContext context) RenderBefore2010ContextTab(context, cts); } - //_paletteContextCurrent.LightBackground = _ribbon.CaptionArea.DrawCaptionOnComposition; - _paletteContextCurrent.LightBackground = Ribbon.CaptionArea.DrawCaptionOnComposition - && (KryptonManager.CurrentGlobalPalette != KryptonManager.PaletteOffice2010Black); + _paletteContextCurrent.LightBackground = KryptonManager.CurrentGlobalPaletteMode.ToString() + .StartsWith(PaletteMode.Office2010Black.ToString()); break; } // Use renderer to draw the tab background var mementoIndex = StateIndex(State); - _mementos[mementoIndex] = context.Renderer.RenderRibbon.DrawRibbonBack(Ribbon.RibbonShape, context, ClientRectangle, State, _paletteContextCurrent, VisualOrientation.Top, false, _mementos[mementoIndex]); + _mementos[mementoIndex] = context.Renderer.RenderRibbon.DrawRibbonBack(Ribbon.RibbonShape, context, ClientRectangle, State, _paletteContextCurrent, VisualOrientation.Top, _mementos[mementoIndex]); } /// @@ -441,7 +445,7 @@ public override void RenderBefore(RenderContext context) public override void RenderAfter(RenderContext context) { // Grab the context tab set that relates to this tab - ContextTabSet cts = ViewLayoutRibbonTabs.ContextTabSets[RibbonTab.ContextName]; + ContextTabSet? cts = ViewLayoutRibbonTabs.ContextTabSets[RibbonTab!.ContextName]; // Is this tab part of a context? if (cts != null) @@ -505,7 +509,7 @@ private void RenderBefore2007ContextTab(RenderContext context, ContextTabSet cts // Grab the color we draw the context separator in Color sepColor = _paletteGeneral.GetRibbonTabSeparatorContextColor(PaletteState.Normal); - Rectangle parentRect = Parent.ClientRectangle; + Rectangle parentRect = Parent!.ClientRectangle; var contextRect = parentRect with { X = ClientRectangle.X - 1, Width = ClientRectangle.Width + 2 }; var gradientRect = new Rectangle(ClientRectangle.X - 1, parentRect.Y - 1, ClientRectangle.Width + 2, parentRect.Height + 2); @@ -592,7 +596,7 @@ private int StateIndex(PaletteState state) for (var i = 0; i < stateValues.Length; i++) { - if ((PaletteState)stateValues.GetValue(i) == state) + if ((PaletteState?)stateValues.GetValue(i) == state) { return i; } @@ -604,7 +608,7 @@ private int StateIndex(PaletteState state) private void CheckPaletteState(ViewContext context) { // Should control be enabled or disabled - var enabled = IsFixed || context.Control.Enabled; + var enabled = IsFixed || context.Control!.Enabled; // Ensure we and child and in correct enabled state Enabled = enabled; @@ -612,7 +616,7 @@ private void CheckPaletteState(ViewContext context) // Better check we have a child! if (Count > 0) { - this[0].Enabled = enabled; + this[0]!.Enabled = enabled; } // If disabled... @@ -630,7 +634,7 @@ private void CheckPaletteState(ViewContext context) Checked = Ribbon.SelectedTab == RibbonTab; // Is this tab a context tab? - var contextTab = !string.IsNullOrEmpty(RibbonTab.ContextName); + var contextTab = !string.IsNullOrEmpty(RibbonTab!.ContextName); // Apply the checked state if not fixed if (!IsFixed) @@ -675,27 +679,35 @@ private void CheckPaletteState(ViewContext context) case PaletteState.Normal: _overrideCurrent = _overrideStateNormal; break; + case PaletteState.Tracking: _overrideCurrent = _overrideStateTracking; break; + case PaletteState.CheckedNormal: _overrideCurrent = _overrideStateCheckedNormal; break; + case PaletteState.CheckedTracking: _overrideCurrent = _overrideStateCheckedTracking; break; + case PaletteState.ContextTracking: _overrideCurrent = _overrideStateContextTracking; break; + case PaletteState.ContextCheckedNormal: _overrideCurrent = _overrideStateContextCheckedNormal; break; + case PaletteState.ContextCheckedTracking: _overrideCurrent = _overrideStateContextCheckedTracking; break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(buttonState.ToString()); break; } @@ -705,7 +717,7 @@ private void CheckPaletteState(ViewContext context) // Better check we have a child! if (Count > 0) { - this[0].ElementState = buttonState; + this[0]!.ElementState = buttonState; } // Update the actual source palette @@ -713,9 +725,9 @@ private void CheckPaletteState(ViewContext context) } } - private void OnTabPropertyChanged(object sender, PropertyChangedEventArgs e) => MakeDirty(); + private void OnTabPropertyChanged(object? sender, PropertyChangedEventArgs e) => MakeDirty(); - private void OnTabClicked(object sender, MouseEventArgs e) + private void OnTabClicked(object? sender, MouseEventArgs e) { // We never click to become unchecked if (!Checked) @@ -729,16 +741,16 @@ private void OnTabClicked(object sender, MouseEventArgs e) } } - private void OnTabContextClicked(object sender, MouseEventArgs e) + private void OnTabContextClicked(object? sender, MouseEventArgs e) { if (Ribbon.InDesignMode) { - _ribbonTab.OnDesignTimeContextMenu(new MouseEventArgs(MouseButtons.Right, 1, e.X, e.Y, 0)); + _ribbonTab?.OnDesignTimeContextMenu(new MouseEventArgs(MouseButtons.Right, 1, e.X, e.Y, 0)); } else { // Convert the mouse point to screen coords from the containing control - Point screenPt = Ribbon.TabsArea.TabsContainerControl.ChildControl.PointToScreen(new Point(e.X, e.Y)); + Point screenPt = Ribbon.TabsArea!.TabsContainerControl.ChildControl!.PointToScreen(new Point(e.X, e.Y)); // Convert back to ribbon client coords, needed for the show context menu call Point clientPt = Ribbon.PointToClient(screenPt); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTabSep.cs b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTabSep.cs index 65b9c78d6..52a1dbabf 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTabSep.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Draw/ViewDrawRibbonTabSep.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -36,8 +36,8 @@ static ViewDrawRibbonTabSep() { _fadeBlend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.33f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.33f, 1.0f] }; } @@ -49,7 +49,7 @@ public ViewDrawRibbonTabSep([DisallowNull] IPaletteRibbonGeneral palette) : base(SEP_WIDTH, true) { Debug.Assert(palette != null); - _palette = palette; + _palette = palette!; } /// diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppButton.cs index c6911fd87..a2cd58569 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -38,11 +38,11 @@ internal class ViewLayoutRibbonAppButton : ViewLayoutDocker /// /// Owning control instance. /// Scroller orientation. - public ViewLayoutRibbonAppButton([DisallowNull] KryptonRibbon ribbon, + public ViewLayoutRibbonAppButton([DisallowNull] KryptonRibbon? ribbon, bool bottomHalf) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); AppButton = new ViewDrawRibbonAppButton(ribbon, bottomHalf); _separator = new ViewLayoutRibbonSeparator(APPBUTTON_GAP, true); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppTab.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppTab.cs index a7ce453ab..3ee4bdfd1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppTab.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonAppTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -31,10 +31,10 @@ internal class ViewLayoutRibbonAppTab : ViewLayoutDocker /// Owning control instance. public ViewLayoutRibbonAppTab([DisallowNull] KryptonRibbon ribbon) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); - AppTab = new ViewDrawRibbonAppTab(ribbon); + AppTab = new ViewDrawRibbonFileAppTab(ribbon); // Dock it against the appropriate edge Add(AppTab, ViewDockStyle.Bottom); @@ -55,7 +55,7 @@ public override string ToString() => /// /// Gets the view element that represents the button. /// - public ViewDrawRibbonAppTab AppTab { get; } + public ViewDrawRibbonFileAppTab AppTab { get; } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenter.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenter.cs index e6b8fe42e..cdca4f6e3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenter.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenterPadding.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenterPadding.cs index fe1628c31..76c3bc625 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenterPadding.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCenterPadding.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCheckBox.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCheckBox.cs index eed1b0b9e..b51d97783 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCheckBox.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -17,7 +17,5 @@ namespace Krypton.Ribbon /// /// Position the contenst of the ribbon check box. /// - internal class ViewLayoutRibbonCheckBox : ViewLayoutDocker - { - } + internal class ViewLayoutRibbonCheckBox : ViewLayoutDocker; } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonContextTitles.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonContextTitles.cs index 2d7fd9add..38798b55e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonContextTitles.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonContextTitles.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,9 +21,7 @@ internal class ViewLayoutRibbonContextTitles : ViewLayoutDocker { #region Classes - private class ViewDrawRibbonContextTitleList : List - { - }; + private class ViewDrawRibbonContextTitleList : List; #endregion @@ -39,16 +37,17 @@ private class ViewDrawRibbonContextTitleList : List /// /// Reference to source ribbon control. /// Reference to view element that tracks the top level form. - public ViewLayoutRibbonContextTitles([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] ViewDrawRibbonCaptionArea captionArea) + public ViewLayoutRibbonContextTitles([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] ViewDrawRibbonCaptionArea? captionArea) { - Debug.Assert(captionArea != null); - Debug.Assert(ribbon != null); - _ribbon = ribbon; - _captionArea = captionArea; + Debug.Assert(captionArea is not null); + Debug.Assert(ribbon is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _captionArea = captionArea ?? throw new ArgumentNullException(nameof(captionArea)); // Create cache of draw elements - _contextTitlesCache = new ViewDrawRibbonContextTitleList(); + _contextTitlesCache = []; } /// @@ -102,10 +101,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) SyncChildrenToContexts(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Find any filler child - ViewBase filler = this.FirstOrDefault(child => GetDock(child) == ViewDockStyle.Fill); + ViewBase? filler = this.FirstOrDefault(child => GetDock(child) == ViewDockStyle.Fill); var xLeftMost = ClientRectangle.Right; var xRightMost = ClientRectangle.Left; @@ -115,14 +114,14 @@ public override void Layout([DisallowNull] ViewLayoutContext context) foreach (ViewDrawRibbonContextTitle childContextTitle in this.Where(static child => child.Visible).OfType()) { // Get the context set it is representing - ContextTabSet tabContext = childContextTitle.ContextTabSet; + ContextTabSet tabContext = childContextTitle.ContextTabSet!; // Get the screen position of the left and right hand positions Point leftTab = tabContext.GetLeftScreenPosition(); Point rightTab = tabContext.GetRightScreenPosition(); // If our position is above the ribbon control we must be in the chrome - if (_captionArea is { UsingCustomChrome: true, KryptonForm.ApplyComposition: false }) + if (_captionArea is { UsingCustomChrome: true}) { var leftPadding = _captionArea.RealWindowBorders.Left; leftTab.X += leftPadding; @@ -130,7 +129,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Convert the screen to our own coordinates - leftTab = context.TopControl.PointToClient(leftTab); + leftTab = context.TopControl!.PointToClient(leftTab); rightTab = context.TopControl.PointToClient(rightTab); // Calculate the position of the child and layout @@ -214,9 +213,9 @@ private void SyncChildrenToContexts() for (var i = 0; i < ViewLayoutRibbonTabs.ContextTabSets.Count; i++) { ViewDrawRibbonContextTitle viewContext = _contextTitlesCache[i]; - var viewController = (ContextTitleController)viewContext.MouseController; + var viewController = viewContext.MouseController as ContextTitleController; viewContext.ContextTabSet = ViewLayoutRibbonTabs.ContextTabSets[i]; - viewController.ContextTabSet = viewContext.ContextTabSet; + viewController!.ContextTabSet = viewContext.ContextTabSet; Add(viewContext); } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryButtons.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryButtons.cs index ea028a52d..d5e7111c2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryButtons.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryButtons.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryItems.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryItems.cs index 79862cb3a..f924138e4 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryItems.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGalleryItems.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -56,25 +56,30 @@ internal class ViewLayoutRibbonGalleryItems : ViewComposite /// Reference to the up button. /// Reference to the down button. /// Reference to the context button. - public ViewLayoutRibbonGalleryItems([DisallowNull] PaletteBase palette, - [DisallowNull] KryptonGallery gallery, - [DisallowNull] NeedPaintHandler needPaint, - [DisallowNull] ViewDrawRibbonGalleryButton buttonUp, - [DisallowNull] ViewDrawRibbonGalleryButton buttonDown, - [DisallowNull] ViewDrawRibbonGalleryButton buttonContext) + public ViewLayoutRibbonGalleryItems([DisallowNull] PaletteBase? palette, + [DisallowNull] KryptonGallery? gallery, + [DisallowNull] NeedPaintHandler? needPaint, + [DisallowNull] ViewDrawRibbonGalleryButton? buttonUp, + [DisallowNull] ViewDrawRibbonGalleryButton? buttonDown, + [DisallowNull] ViewDrawRibbonGalleryButton? buttonContext) { - Debug.Assert(palette != null); - Debug.Assert(gallery != null); - Debug.Assert(needPaint != null); - Debug.Assert(buttonUp != null); - Debug.Assert(buttonDown != null); - Debug.Assert(buttonContext != null); - - _gallery = gallery; - _needPaint = needPaint; - _buttonUp = buttonUp; - _buttonDown = buttonDown; - _buttonContext = buttonContext; + Debug.Assert(palette is not null); + Debug.Assert(gallery is not null); + Debug.Assert(needPaint is not null); + Debug.Assert(buttonUp is not null); + Debug.Assert(buttonDown is not null); + Debug.Assert(buttonContext is not null); + + if (palette is null) + { + throw new ArgumentNullException(nameof(palette)); + } + + _gallery = gallery ?? throw new ArgumentNullException(nameof(gallery)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); + _buttonUp = buttonUp ?? throw new ArgumentNullException(nameof(buttonUp)); + _buttonDown = buttonDown ?? throw new ArgumentNullException(nameof(buttonDown)); + _buttonContext = buttonContext ?? throw new ArgumentNullException(nameof(buttonContext)); _bringIntoView = -1; ScrollIntoView = true; @@ -370,8 +375,8 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Find size of the first item, if there is one if (Count > 0) { - // Ask child for it's own preferred size - preferredSize = this[0].GetPreferredSize(context); + // Ask child for its own preferred size + preferredSize = this[0]!.GetPreferredSize(context!); // Find preferred size from the preferred item size preferredSize.Width *= _gallery.PreferredItemSize.Width; @@ -412,7 +417,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Rectangle displayRect = CommonHelper.ApplyPadding(Orientation.Horizontal, ClientRectangle, _gallery.Padding); // Get size of the first child, assume all others are same size - _itemSize = this[0].GetPreferredSize(context); + _itemSize = this[0]!.GetPreferredSize(context); // Number of items that can be placed on a single line _lineItems = Math.Max(1, displayRect.Width / _itemSize.Width); @@ -426,7 +431,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Index of last line that can be the top line _endLine = _layoutLines - _displayLines; - // Update topline and offset to reflect any outstanding bring into view request + // Update top-line and offset to reflect any outstanding bring into view request ProcessBringIntoView(); // Limit check the top line is within the valid range @@ -489,16 +494,16 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Position all children on single line from left to right for (var i = 0; i < Count; i++) { - ViewBase childItem = this[i]; + ViewBase? childItem = this[i]; // Should this item be visible if ((i < start) || (i >= end)) { - childItem.Visible = false; + childItem!.Visible = false; } else { - childItem.Visible = true; + childItem!.Visible = true; // Find rectangle for the child context.DisplayRectangle = new Rectangle(nextPoint, _itemSize); @@ -537,12 +542,12 @@ public void SyncChildren() { var required = 0; var selectedIndex = _gallery.SelectedIndex; - ImageList imageList = _gallery.ImageList; + ImageList? imageList = _gallery.ImageList; // Find out how many children we need if (imageList != null) { - required = _gallery.ImageList.Images.Count; + required = _gallery.ImageList!.Images.Count; } // If we do not have enough already @@ -568,32 +573,32 @@ public void SyncChildren() // Tell each item the image it should be displaying for (var i = 0; i < required; i++) { - var item = (ViewDrawRibbonGalleryItem)this[i]; - item.ImageList = imageList; + var item = this[i] as ViewDrawRibbonGalleryItem; + item!.ImageList = imageList; item.ImageIndex = i; item.Checked = selectedIndex == i; } } - private void OnButtonUp(object sender, MouseEventArgs e) + private void OnButtonUp(object? sender, MouseEventArgs e) { PrevLine(); _gallery.PerformNeedPaint(true); } - private void OnButtonDown(object sender, MouseEventArgs e) + private void OnButtonDown(object? sender, MouseEventArgs e) { NextLine(); _gallery.PerformNeedPaint(true); } - private void OnButtonContext(object sender, MouseEventArgs e) + private void OnButtonContext(object? sender, MouseEventArgs e) { _buttonContext.ForceLeave(); _gallery.OnDropButton(); } - private void OnScrollTick(object sender, EventArgs e) + private void OnScrollTick(object? sender, EventArgs e) { // Update the offset by scroll move amount if (_offset != 0) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupButton.cs index 890587026..e80e76960 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -68,7 +68,7 @@ public override string ToString() => /// Gets the view to use for the group dialog button. /// /// ViewBase if valid as a focus item; otherwise false. - public ViewBase? GetFocusView() + public ViewBase GetFocusView() { if (Visible && Enabled && _groupButton is { Visible: true, Enabled: true }) { @@ -76,7 +76,7 @@ public override string ToString() => } else { - return null; + return null!; } } #endregion diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupCluster.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupCluster.cs index 93e15bdba..b162f76fe 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupCluster.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupCluster.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -22,15 +22,15 @@ internal class ViewLayoutRibbonGroupCluster : ViewComposite, { #region Type Definitions - private class ItemToView : Dictionary { } - private class ViewToEdge : Dictionary { } - private class ViewToSize : Dictionary { } + private class ItemToView : Dictionary; + private class ViewToEdge : Dictionary; + private class ViewToSize : Dictionary; #endregion #region Instance Fields private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupCluster _ribbonCluster; - private ViewDrawRibbonDesignCluster? _viewAddItem; + private ViewDrawRibbonDesignCluster _viewAddItem; private readonly ViewDrawRibbonGroupClusterSeparator _startSep; private readonly ViewDrawRibbonGroupClusterSeparator _endSep; private readonly PaletteBorderEdge _paletteBorderEdge; @@ -52,18 +52,18 @@ private class ViewToSize : Dictionary { } /// Owning ribbon control instance. /// Reference to cluster definition. /// Delegate for notifying paint requests. - public ViewLayoutRibbonGroupCluster([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupCluster ribbonCluster, - [DisallowNull] NeedPaintHandler needPaint) + public ViewLayoutRibbonGroupCluster([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupCluster? ribbonCluster, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonCluster != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonCluster is not null); + Debug.Assert(needPaint is not null); // Cache references - _ribbon = ribbon; - _ribbonCluster = ribbonCluster; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonCluster = ribbonCluster ?? throw new ArgumentNullException(nameof(ribbonCluster)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); _currentSize = GroupItemSize.Medium; // Associate the component with this view element for design time selection @@ -129,7 +129,7 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { ViewBase? view = null; @@ -153,7 +153,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -162,7 +162,7 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the container. /// /// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { ViewBase? view = null; @@ -186,7 +186,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -197,7 +197,7 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; @@ -222,7 +222,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -233,12 +233,12 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; // Scan all the children, which must be containers - foreach (ViewBase child in Reverse()) + foreach (ViewBase? child in Reverse()) { // Only interested in visible children! if (child.Visible) @@ -258,7 +258,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -336,8 +336,8 @@ public void ResetGroupItemSize() } // Our current size is based on the parent one - var viewLines = (ViewLayoutRibbonGroupLines)Parent; - _currentSize = viewLines.CurrentSize == GroupItemSize.Small ? GroupItemSize.Small : GroupItemSize.Medium; + var viewLines = Parent as ViewLayoutRibbonGroupLines; + _currentSize = viewLines?.CurrentSize == GroupItemSize.Small ? GroupItemSize.Small : GroupItemSize.Medium; } /// @@ -360,10 +360,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) // Find total width and maximum height across all child elements for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // Only interested in visible items - if (child.Visible) + if (child!.Visible) { // Cache preferred size of the child Size childSize = child.GetPreferredSize(context); @@ -397,7 +397,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Store the provided client area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Define visible state of the separators _startSep.Visible = _startSepVisible && (_lastShape == PaletteRibbonShape.Office2010); @@ -422,10 +422,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Position each item from left/top to right/bottom for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // We only position visible items - if (child.Visible) + if (child!.Visible) { // Cache preferred size of the child Size childSize = viewToSize[child]; @@ -434,7 +434,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(x, y, childSize.Width, ClientHeight); // Position the element - this[i].Layout(context); + this[i]?.Layout(context); // Move across to next position x += childSize.Width; @@ -528,7 +528,7 @@ private void SyncChildrenToRibbonGroupItems() else { // Ask the item definition to return an appropriate view - itemView = item.CreateView(_ribbon, _needPaint); + itemView = item.CreateView(_ribbon, _needPaint!); // Create a border edge to go with the item view itemEdge = new ViewDrawRibbonGroupClusterEdge(_ribbon, _paletteBorderEdge); @@ -621,12 +621,12 @@ private void SyncChildrenToRibbonGroupItems() view.Dispose(); } - foreach (ViewBase view in _viewToEdge.Values) + foreach (var view in _viewToEdge.Values) { view.Dispose(); } - // Always add the end separator as the last view element (excluding any desing time additions) + // Always add the end separator as the last view element (excluding any design time additions) Add(_endSep); // Define visible state of the separators @@ -639,7 +639,7 @@ private void SyncChildrenToRibbonGroupItems() // Create the design time 'Item' first time it is needed _viewAddItem ??= new ViewDrawRibbonDesignCluster(_ribbon, _ribbonCluster, - _needPaint); + _needPaint!); // Always add at end of the list of items Add(_viewAddItem); @@ -650,7 +650,7 @@ private void SyncChildrenToRibbonGroupItems() _viewToEdge = regenEdge; } - private void OnClusterPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnClusterPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; @@ -673,7 +673,7 @@ private void OnClusterPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnContextClick(object sender, MouseEventArgs e) + private void OnContextClick(object? sender, MouseEventArgs e) { if (_ribbon.InDesignMode) { diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupContent.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupContent.cs index 18715c226..f6f4625c1 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupContent.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,7 +21,7 @@ internal class ViewLayoutRibbonGroupContent : ViewComposite, IRibbonViewGroupSize { #region Type Definitions - private class ContainerToView : Dictionary { } + private class ContainerToView : Dictionary; #endregion #region Static Fields @@ -37,7 +37,7 @@ private class ContainerToView : Dictionary { } private readonly NeedPaintHandler _needPaint; private ContainerToView _containerToView; private List _listWidths; - private int[] _containerWidths; + private int[]? _containerWidths; #endregion #region Identity @@ -47,18 +47,18 @@ private class ContainerToView : Dictionary { } /// Owning ribbon control instance. /// The ribbon group this layout is used to display. /// Delegate for notifying paint requests. - public ViewLayoutRibbonGroupContent([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroup ribbonGroup, - [DisallowNull] NeedPaintHandler needPaint) + public ViewLayoutRibbonGroupContent([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroup? ribbonGroup, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonGroup != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonGroup is not null); + Debug.Assert(needPaint is not null); // Cache references - _ribbon = ribbon; - _ribbonGroup = ribbonGroup; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonGroup = ribbonGroup ?? throw new ArgumentNullException(nameof(ribbonGroup)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Use hashtable to store relationships _containerToView = new ContainerToView(); @@ -125,7 +125,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) /// Gets the first focus item from the group content. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { ViewBase? view = null; @@ -156,7 +156,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) view = DialogView.GetFocusView(); } - return view; + return view!; } #endregion @@ -165,7 +165,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) /// Gets the last focus item from the group. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { ViewBase? view = null; @@ -209,7 +209,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) } } - return view; + return view!; } #endregion @@ -220,7 +220,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; @@ -276,7 +276,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) } } - return view; + return view!; } #endregion @@ -287,7 +287,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; @@ -339,7 +339,7 @@ public void GetGroupKeyTips(KeyTipInfoList keyTipList) } } - return view; + return view!; } #endregion @@ -355,14 +355,14 @@ public GroupSizeWidth[] GetPossibleSizes(ViewLayoutContext context) SyncChildrenToRibbonGroupItems(); // Get the permutations available for each child container - _listWidths = new List(); + _listWidths = []; // Scan all child containers var pixelGaps = 0; var maxEntries = 0; for (var i = 0; i < Count; i++) { - if (this[i].Visible + if (this[i]!.Visible && (this[i] is IRibbonViewGroupContainerView container) ) { @@ -526,7 +526,7 @@ public GroupSizeWidth[] GetPossibleSizes(ViewLayoutContext context) /// Update the group with the provided sizing solution. ///
/// Solution size. - public void SetSolutionSize(ItemSizeWidth[] size) + public void SetSolutionSize(ItemSizeWidth[]? size) { // Do we need to restore each container to its default size? if ((size == null) || (size.Length == 0)) @@ -534,7 +534,7 @@ public void SetSolutionSize(ItemSizeWidth[] size) // Look for visible child containers for (var i = 0; i < Count; i++) { - if (this[i].Visible + if (this[i]!.Visible && (this[i] is IRibbonViewGroupContainerView container) ) { @@ -552,7 +552,7 @@ public void SetSolutionSize(ItemSizeWidth[] size) // Look for visible child containers for (int i = 0, j = 0; i < Count; i++) { - if (this[i].Visible + if (this[i]!.Visible && (this[i] is IRibbonViewGroupContainerView container) ) { @@ -580,10 +580,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) // Find total width and maximum height across all child elements for (int i = 0, j = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // Only interested in visible items - if (child.Visible) + if (child!.Visible) { Size childSize; @@ -628,7 +628,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area and then remove our constant padding - ClientRectangle = CommonHelper.ApplyPadding(Orientation.Horizontal, context.DisplayRectangle, _padding); + ClientRectangle = CommonHelper.ApplyPadding(Orientation.Horizontal, context!.DisplayRectangle, _padding); var x = ClientLocation.X; @@ -641,10 +641,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Position each item from left to right taking up entire height for (int i = 0, j = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // We only position visible items - if (child.Visible) + if (child!.Visible) { Size childSize; @@ -664,7 +664,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(x, y, childSize.Width, height); // Position the element - this[i].Layout(context); + this[i]!.Layout(context); // Move across to next position (add 1 extra as the spacing gap) x += childSize.Width + 1; @@ -690,8 +690,8 @@ private void SyncChildrenToRibbonGroupItems() foreach (KryptonRibbonGroupContainer container in _ribbonGroup.Items) { // Do we already have a view for this container definition - ViewBase containerView = _containerToView.ContainsKey(container) - ? _containerToView[container] + ViewBase containerView = _containerToView.TryGetValue(container, out ViewBase? value) + ? value : container.CreateView(_ribbon, _needPaint); // Update the visible state of the item diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupLines.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupLines.cs index 82ac9d331..4a942fe14 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupLines.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupLines.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -27,18 +27,18 @@ internal class ViewLayoutRibbonGroupLines : ViewComposite, #endregion #region Type Definitions - private class ItemToView : Dictionary { } - private class ViewToItem : Dictionary { } - private class ViewToGap : Dictionary { } - private class SizeList : List { } - private class ViewList : List { } + private class ItemToView : Dictionary; + private class ViewToItem : Dictionary; + private class ViewToGap : Dictionary; + private class SizeList : List; + private class ViewList : List; #endregion #region Instance Fields private readonly KryptonRibbon _ribbon; private readonly KryptonRibbonGroupLines _ribbonLines; - private ViewDrawRibbonDesignGroupLines? _viewAddItem; - private readonly NeedPaintHandler _needPaint; + private ViewDrawRibbonDesignGroupLines _viewAddItem; + private readonly NeedPaintHandler? _needPaint; private GroupItemSize _currentSize; private ItemToView _itemToView; private ViewToItem _viewToItem; @@ -67,18 +67,18 @@ private class ViewList : List { } /// Owning ribbon control instance. /// Reference to lines definition. /// Delegate for notifying paint requests. - public ViewLayoutRibbonGroupLines([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupLines ribbonLines, - [DisallowNull] NeedPaintHandler needPaint) + public ViewLayoutRibbonGroupLines([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupLines? ribbonLines, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonLines != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonLines is not null); + Debug.Assert(needPaint is not null); // Cache references - _ribbon = ribbon; - _ribbonLines = ribbonLines; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonLines = ribbonLines ?? throw new ArgumentNullException(nameof(ribbonLines)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Associate the component with this view element for design time selection Component = _ribbonLines; @@ -86,12 +86,12 @@ public ViewLayoutRibbonGroupLines([DisallowNull] KryptonRibbon ribbon, // Use hashtable to store relationships _itemToView = new ItemToView(); _viewToItem = new ViewToItem(); - _sizeLargeList = new SizeList(); - _sizeMediumList = new SizeList(); - _sizeSmallList = new SizeList(); - _viewLargeList = new ViewList(); - _viewMediumList = new ViewList(); - _viewSmallList = new ViewList(); + _sizeLargeList = []; + _sizeMediumList = []; + _sizeSmallList = []; + _viewLargeList = []; + _viewMediumList = []; + _viewSmallList = []; _viewToLargeGap = new ViewToGap(); _viewToMediumGap = new ViewToGap(); _viewToSmallGap = new ViewToGap(); @@ -161,7 +161,7 @@ public GroupItemSize CurrentSize /// Gets the first focus item from the container. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { ViewBase? view = null; @@ -196,7 +196,7 @@ public GroupItemSize CurrentSize } } - return view; + return view!; } #endregion @@ -205,7 +205,7 @@ public GroupItemSize CurrentSize /// Gets the last focus item from the container. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { ViewBase? view = null; @@ -240,7 +240,7 @@ public GroupItemSize CurrentSize } } - return view; + return view!; } #endregion @@ -251,7 +251,7 @@ public GroupItemSize CurrentSize /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; @@ -290,7 +290,7 @@ public GroupItemSize CurrentSize } } - return view; + return view!; } #endregion @@ -301,7 +301,7 @@ public GroupItemSize CurrentSize /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; @@ -340,7 +340,7 @@ public GroupItemSize CurrentSize } } - return view; + return view!; } #endregion @@ -529,10 +529,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) // Find the size of each individual visible child item for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // Only interested in visible items - if (child.Visible) + if (child!.Visible) { // Inform cluster if it is immediately after another cluster (and so potentially needs a separator) // Are we positioning a cluster? @@ -546,11 +546,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) if (previousChild != null) { if (_viewToItem.ContainsKey(child) && - _viewToItem.ContainsKey(previousChild)) + _viewToItem.TryGetValue(previousChild, out IRibbonGroupItem? previousItem)) { // Cast to correct type IRibbonGroupItem childItem = _viewToItem[child]; - IRibbonGroupItem previousItem = _viewToItem[previousChild]; // Find the requested gap between them _viewToGap.Add(child, childItem.ItemGap(previousItem)); @@ -587,8 +586,9 @@ public override Size GetPreferredSize(ViewLayoutContext context) case GroupItemSize.Small: return SmallPreferredSize(totalWidth); default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_currentSize.ToString()); return Size.Empty; } } @@ -602,7 +602,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Store the provided client area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are there any children to layout? if (Count > 0) @@ -613,15 +613,19 @@ public override void Layout([DisallowNull] ViewLayoutContext context) case GroupItemSize.Large: LargeMediumLayout(context, ref _split1Large); break; + case GroupItemSize.Medium: LargeMediumLayout(context, ref _split1Medium); break; + case GroupItemSize.Small: SmallLayout(context); break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_currentSize.ToString()); break; } } @@ -682,21 +686,25 @@ private void ApplySize(GroupItemSize size) _viewToGap = _viewToLargeGap; itemSize = GroupItemSize.Medium; break; + case GroupItemSize.Medium: _sizeList = _sizeMediumList; _viewList = _viewMediumList; _viewToGap = _viewToMediumGap; itemSize = GroupItemSize.Small; break; + case GroupItemSize.Small: _sizeList = _sizeSmallList; _viewList = _viewSmallList; _viewToGap = _viewToSmallGap; itemSize = GroupItemSize.Small; break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(size.ToString()); break; } @@ -731,7 +739,7 @@ private void SyncChildrenToRibbonGroupItems() var regenViewToItem = new ViewToItem(); // Add a view element for each group item - foreach (IRibbonGroupItem item in _ribbonLines.Items) + foreach (IRibbonGroupItem item in _ribbonLines.Items!) { ViewBase? itemView; @@ -746,7 +754,7 @@ private void SyncChildrenToRibbonGroupItems() else { // Ask the item definition to return an appropriate view - itemView = item.CreateView(_ribbon, _needPaint); + itemView = item.CreateView(_ribbon, _needPaint!); } // Update the visible state of the item @@ -766,14 +774,14 @@ private void SyncChildrenToRibbonGroupItems() _viewAddItem ??= new ViewDrawRibbonDesignGroupLines(_ribbon, _ribbonLines, _currentSize, - _needPaint); + _needPaint!); // Always add at end of the list of items Add(_viewAddItem); } // Dispose of all the items no longer needed - foreach (ViewBase view in _itemToView.Values) + foreach (var view in _itemToView.Values) { view.Dispose(); } @@ -977,10 +985,10 @@ private void LargeMediumLayout(ViewLayoutContext context, ref int split1) // Position the visible items in turn for (int i = 0, visibleIndex = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // We only position visible items - if (child.Visible) + if (child!.Visible) { // Are we positioning a cluster? if (child is ViewLayoutRibbonGroupCluster clusterChild1) @@ -1001,9 +1009,9 @@ private void LargeMediumLayout(ViewLayoutContext context, ref int split1) } // If not the first item on the line, then get the pixel gap between them - if ((previousChild != null) && _viewToGap.ContainsKey(child)) + if ((previousChild != null) && _viewToGap.TryGetValue(child, out var value)) { - x += _viewToGap[child]; + x += value; } // Get the size of the child item @@ -1013,7 +1021,7 @@ private void LargeMediumLayout(ViewLayoutContext context, ref int split1) context.DisplayRectangle = new Rectangle(x, y, childSize.Width, childSize.Height); // Position the element - this[i].Layout(context); + this[i]?.Layout(context); // Do we need to split after this item if (split1 == visibleIndex) @@ -1064,10 +1072,10 @@ private void SmallLayout(ViewLayoutContext context) // Position the visible items in turn for (int i = 0, visibleIndex = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // We only position visible items - if (child.Visible) + if (child!.Visible) { // Are we positioning a cluster? if (child is ViewLayoutRibbonGroupCluster clusterChild1) @@ -1088,9 +1096,9 @@ private void SmallLayout(ViewLayoutContext context) } // If not the first item on the line, then get the pixel gap between them - if ((previousChild != null) && _viewToGap.ContainsKey(child)) + if ((previousChild != null) && _viewToGap.TryGetValue(child, out var value)) { - x += _viewToGap[child]; + x += value; } // Get the size of the child item @@ -1100,7 +1108,7 @@ private void SmallLayout(ViewLayoutContext context) context.DisplayRectangle = new Rectangle(x, y, childSize.Width, childSize.Height); // Position the element - this[i].Layout(context); + this[i]?.Layout(context); // Do we need to split after this item if ((_split1Small == visibleIndex) || (_split2Small == visibleIndex)) @@ -1147,7 +1155,7 @@ private int GetItemSpacingGap(int start, int end) return gapTotal; } - private void OnLinesPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnLinesPropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; @@ -1177,7 +1185,7 @@ private void OnLinesPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnContextClick(object sender, MouseEventArgs e) + private void OnContextClick(object? sender, MouseEventArgs e) { if (_ribbon.InDesignMode) { diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupTriple.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupTriple.cs index 7954cff61..d374af58e 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupTriple.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupTriple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -21,8 +21,8 @@ internal class ViewLayoutRibbonGroupTriple : ViewComposite, IRibbonViewGroupContainerView { #region Type Definitions - private class ItemToView : Dictionary { } - private class ViewToSize : Dictionary { } + private class ItemToView : Dictionary; + private class ViewToSize : Dictionary; #endregion #region Instance Fields @@ -46,18 +46,18 @@ private class ViewToSize : Dictionary { } /// Owning ribbon control instance. /// Reference to triple definition. /// Delegate for notifying paint requests. - public ViewLayoutRibbonGroupTriple([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonGroupTriple ribbonTriple, - [DisallowNull] NeedPaintHandler needPaint) + public ViewLayoutRibbonGroupTriple([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonGroupTriple? ribbonTriple, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonTriple != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonTriple is not null); + Debug.Assert(needPaint is not null); // Cache references - _ribbon = ribbon; - _ribbonTriple = ribbonTriple; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonTriple = ribbonTriple ?? throw new ArgumentNullException(nameof(ribbonTriple)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Associate the component with this view element for design time selection Component = _ribbonTriple; @@ -69,16 +69,16 @@ public ViewLayoutRibbonGroupTriple([DisallowNull] KryptonRibbon ribbon, _largeCache = new ViewToSize(); // Get the initial size used for sizing and positioning - SetCurrentSize(ribbonTriple.ItemSizeCurrent); + SetCurrentSize(ribbonTriple!.ItemSizeCurrent); // Hook into changes in the ribbon triple definition - _ribbonTriple.PropertyChanged += OnTriplePropertyChanged; + _ribbonTriple!.PropertyChanged += OnTriplePropertyChanged; _ribbonTriple.TripleView = this; // At design time we want to track the mouse and show feedback - if (_ribbon.InDesignMode) + if (_ribbon!.InDesignMode) { - var controller = new ViewHightlightController(this, needPaint); + var controller = new ViewHightlightController(this, needPaint!); controller.ContextClick += OnContextClick; MouseController = controller; } @@ -113,7 +113,7 @@ protected override void Dispose(bool disposing) /// Gets the first focus item from the container. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { ViewBase? view = null; @@ -137,7 +137,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -146,7 +146,7 @@ protected override void Dispose(bool disposing) /// Gets the last focus item from the container. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { ViewBase? view = null; @@ -170,7 +170,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -181,7 +181,7 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current, ref bool matched) + public ViewBase GetNextFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; @@ -206,7 +206,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -217,7 +217,7 @@ protected override void Dispose(bool disposing) /// The view that is currently focused. /// Has the current focus item been matched yet. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current, ref bool matched) + public ViewBase GetPreviousFocusItem(ViewBase current, ref bool matched) { ViewBase? view = null; @@ -242,7 +242,7 @@ protected override void Dispose(bool disposing) } } - return view; + return view!; } #endregion @@ -400,10 +400,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) // Find total width and maximum height across all child elements for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // Only interested in visible items - if (child.Visible) + if (child!.Visible) { // Cache preferred size of the child Size childSize = child.GetPreferredSize(context); @@ -468,7 +468,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Store the provided client area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we sizing horizontal or vertical? var horizontal = _currentSize == GroupItemSize.Large; @@ -489,10 +489,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Position each item from left/top to right/bottom for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // We only position visible items - if (child.Visible) + if (child!.Visible) { // Get the cached size of this view var childSize = Size.Empty; @@ -515,7 +515,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(x, y, childSize.Width, ClientHeight); // Position the element - this[i].Layout(context); + this[i]?.Layout(context); // Move across to next position (add 1 extra as the spacing gap) x += childSize.Width + 1; @@ -537,7 +537,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Position the element - this[i].Layout(context); + this[i]?.Layout(context); // Move down to next position y += childSize.Height; @@ -633,7 +633,7 @@ private void SyncChildrenToRibbonGroupItems() var regenerate = new ItemToView(); // Add a view element for each group item - foreach (IRibbonGroupItem item in _ribbonTriple.Items) + foreach (IRibbonGroupItem item in _ribbonTriple.Items!) { ViewBase itemView; @@ -683,7 +683,7 @@ private void SyncChildrenToRibbonGroupItems() _itemToView = regenerate; } - private void OnTriplePropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnTriplePropertyChanged(object? sender, PropertyChangedEventArgs e) { var updateLayout = false; @@ -714,7 +714,7 @@ private void OnTriplePropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnContextClick(object sender, MouseEventArgs e) + private void OnContextClick(object? sender, MouseEventArgs e) { if (_ribbon.InDesignMode) { @@ -723,4 +723,4 @@ private void OnContextClick(object sender, MouseEventArgs e) } #endregion } -} +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroups.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroups.cs index f1bf4aa57..a646df849 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroups.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroups.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,8 +20,8 @@ namespace Krypton.Ribbon internal class ViewLayoutRibbonGroups : ViewComposite { #region Classes - private class GroupToView : Dictionary { } - private class ViewDrawRibbonGroupSepList : List { } + private class GroupToView : Dictionary; + private class ViewDrawRibbonGroupSepList : List; #endregion #region Statis Fields @@ -48,24 +48,24 @@ private class ViewDrawRibbonGroupSepList : List { } /// Owning ribbon control instance. /// RibbonTab to organize groups. /// Delegate for notifying paint requests. - public ViewLayoutRibbonGroups([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] KryptonRibbonTab ribbonTab, - [DisallowNull] NeedPaintHandler needPaint) + public ViewLayoutRibbonGroups([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] KryptonRibbonTab? ribbonTab, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(ribbonTab != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(ribbonTab is not null); + Debug.Assert(needPaint is not null); // Cache references - _ribbon = ribbon; - _ribbonTab = ribbonTab; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _ribbonTab = ribbonTab ?? throw new ArgumentNullException(nameof(ribbonTab)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Create initial lookup table _groupToView = new GroupToView(); // Create cache of group separator elements - _groupSepCache = new ViewDrawRibbonGroupSepList(); + _groupSepCache = []; } /// @@ -123,10 +123,10 @@ public NeedPaintHandler NeedPaintDelegate public ViewDrawRibbonGroup? ViewGroupFromPoint(Point pt) { // Parent element should be a view layout - var layoutControl = (ViewLayoutControl)Parent; + var layoutControl = Parent as ViewLayoutControl; // Get the location of the child control it contains - Point layoutLocation = layoutControl.ChildControl.Location; + Point layoutLocation = layoutControl!.ChildControl!.Location; // Adjust the incoming point for the location of the child control pt.X -= layoutLocation.X; @@ -182,7 +182,7 @@ public KeyTipInfo[] GetGroupKeyTips() /// Gets the first focus item from the groups. /// /// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { ViewBase? view = null; @@ -196,7 +196,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -205,7 +205,7 @@ public KeyTipInfo[] GetGroupKeyTips() /// Gets the last focus item from the groups. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { ViewBase? view = null; @@ -222,7 +222,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -232,7 +232,7 @@ public KeyTipInfo[] GetGroupKeyTips() ///
/// The view that is currently focused. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current) + public ViewBase GetNextFocusItem(ViewBase current) { ViewBase? view = null; var matched = false; @@ -250,7 +250,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -260,7 +260,7 @@ public KeyTipInfo[] GetGroupKeyTips() ///
/// The view that is currently focused. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current) + public ViewBase GetPreviousFocusItem(ViewBase current) { ViewBase? view = null; var matched = false; @@ -273,7 +273,9 @@ public KeyTipInfo[] GetGroupKeyTips() { // Already matched means we need the next item we come across, // otherwise we continue with the attempt to find previous - view = matched ? groups[i].GetLastFocusItem() : groups[i].GetPreviousFocusItem(current, ref matched); + view = matched + ? groups[i].GetLastFocusItem() + : groups[i].GetPreviousFocusItem(current, ref matched); if (view != null) { @@ -281,7 +283,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -296,7 +298,7 @@ public override Size GetPreferredSize(ViewLayoutContext context) SyncChildrenToRibbonGroups(); // Find best size for groups to fill available space - return new Size(AdjustGroupStateToMatchSpace(context), _ribbon.CalculatedValues.GroupHeight); + return new Size(AdjustGroupStateToMatchSpace(context), _ribbon!.CalculatedValues.GroupHeight); } /// @@ -308,7 +310,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; var x = ClientLocation.X; @@ -321,17 +323,17 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Position each item from left to right taking up entire height for (int i = 0, j = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // We only position visible items - if (child.Visible) + if (child!.Visible) { // Cache preferred size of the child // If a group then pull in the cached value Size childSize = child is ViewDrawRibbonGroup - ? new Size(_groupWidths[j++], _ribbon.CalculatedValues.GroupHeight) - : this[i].GetPreferredSize(context); + ? new Size(_groupWidths[j++], _ribbon!.CalculatedValues.GroupHeight) + : this[i]!.GetPreferredSize(context); // Only interested in items with some width if (childSize.Width > 0) @@ -340,7 +342,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(x, y, childSize.Width, height); // Position the element - this[i].Layout(context); + this[i]?.Layout(context); // Move across to next position x += childSize.Width; @@ -391,13 +393,13 @@ private void SyncChildrenToRibbonGroups() ViewDrawRibbonGroup? view = null; // Get the currently cached view for the group - if (_groupToView.ContainsKey(ribGroup)) + if (_groupToView.TryGetValue(ribGroup, out ViewDrawRibbonGroup? value)) { - view = _groupToView[ribGroup]; + view = value; } // If a new group, create a view for it now - view ??= new ViewDrawRibbonGroup(_ribbon, ribGroup, _needPaint); + view ??= new ViewDrawRibbonGroup(_ribbon!, ribGroup, _needPaint); // Add to the lookup for future reference regenerate.Add(ribGroup, view); @@ -427,7 +429,7 @@ private void SyncChildrenToRibbonGroups() KryptonRibbonGroup ribbonGroup = _ribbonTab.Groups[i]; // Only make the separator visible if the group is and not the first sep - var groupVisible = _ribbon.InDesignHelperMode || ribbonGroup.Visible; + var groupVisible = _ribbon!.InDesignHelperMode || ribbonGroup.Visible; _groupSepCache[i].Visible = groupVisible && !ignoreSep; regenerate[ribbonGroup].Visible = groupVisible; @@ -553,7 +555,7 @@ private int AdjustGroupStateToMatchSpace(ViewLayoutContext context) _groupWidths = new int[listGroups.Count]; for (var i = 0; i < listGroups.Count; i++) { - _groupWidths[i] = listWidths[i][bestIndexes[i]].Width; + _groupWidths[i] = listWidths[i][bestIndexes![i]].Width; listGroups[i].SetSolutionSize(listWidths[i][bestIndexes[i]].Sizing); } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupsArea.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupsArea.cs index 00ffe8ca5..c72c0555d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupsArea.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonGroupsArea.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -38,16 +38,27 @@ internal class ViewLayoutRibbonGroupsArea : ViewDrawPanel /// Reference to owning ribbon control. /// Reference to redirector for palette settings. /// Delegate for notifying paint/layout changes. - public ViewLayoutRibbonGroupsArea([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] PaletteRedirect redirect, - [DisallowNull] NeedPaintHandler needPaintDelegate) + public ViewLayoutRibbonGroupsArea([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] PaletteRedirect? redirect, + [DisallowNull] NeedPaintHandler? needPaintDelegate) { - Debug.Assert(ribbon != null); - Debug.Assert(redirect != null); - Debug.Assert(needPaintDelegate != null); + Debug.Assert(ribbon is not null); + Debug.Assert(redirect is not null); + Debug.Assert(needPaintDelegate is not null); // Remember the incoming reference - _ribbon = ribbon; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + + if (redirect is null) + { + throw new ArgumentNullException(nameof(redirect)); + } + + if (needPaintDelegate is null) + { + throw new ArgumentNullException(nameof(needPaintDelegate)); + } + // Create access to the redirector and use as our palette source _backInherit = new PaletteBackInheritRedirect(redirect, PaletteBackStyle.PanelClient); @@ -119,7 +130,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Find the correct padding to use Padding padding = _ribbon.RealMinimizedMode ? _layoutMinimizedPadding : _layoutNormalPadding; diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonPadding.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonPadding.cs index d89fdb6ec..27be732c0 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonPadding.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonPadding.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATContents.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATContents.cs index b66bd82fd..e8e9e4db5 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATContents.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATContents.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,7 +20,7 @@ namespace Krypton.Ribbon internal abstract class ViewLayoutRibbonQATContents : ViewComposite { #region Classes - private class QATButtonToView : Dictionary { } + private class QATButtonToView : Dictionary; #endregion #region Instance Fields @@ -38,19 +38,19 @@ private class QATButtonToView : DictionaryOwning ribbon control instance. /// Delegate for notifying paint requests. /// Should the extra button be shown. - public ViewLayoutRibbonQATContents([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] NeedPaintHandler needPaint, + public ViewLayoutRibbonQATContents([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] NeedPaintHandler? needPaint, bool showExtraButton) { - Debug.Assert(ribbon != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(needPaint is not null); - Ribbon = ribbon; - _needPaint = needPaint; + Ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Create initial lookup table _qatButtonToView = new QATButtonToView(); - + // Create the extra button for customization/overflow if (showExtraButton) { @@ -109,8 +109,14 @@ protected override void Dispose(bool disposing) /// /// KryptonForm instance that owns this view. /// Array of KeyTipInfo instances. - public KeyTipInfo[] GetQATKeyTips(KryptonForm? ownerForm) + public KeyTipInfo[] GetQATKeyTips(KryptonForm ownerForm) { + // ownerForm cannot be null + if (ownerForm is null) + { + throw new ArgumentNullException(nameof(ownerForm)); + } + // Create all the list of all possible QAT key tip strings var keyTipsPool = new Stack(); @@ -133,19 +139,15 @@ public KeyTipInfo[] GetQATKeyTips(KryptonForm? ownerForm) } // If integrated into the caption area then get the caption area height - var borders = Padding.Empty; - if (ownerForm is { ApplyComposition: false }) - { - borders = ownerForm.RealWindowBorders; - } + var borders = ownerForm.RealWindowBorders; var keyTipList = new KeyTipInfoList(); foreach (ViewBase child in this) { // If visible and we have another key tip available on stack - if (child.Visible - && (keyTipsPool.Count > 0) + if (child.Visible + && (keyTipsPool.Count > 0) && (child is ViewDrawRibbonQATButton viewQAT) ) { @@ -157,7 +159,7 @@ public KeyTipInfo[] GetQATKeyTips(KryptonForm? ownerForm) viewRect.Bottom - 2 - borders.Top); // Create new key tip that invokes the qat controller - keyTipList.Add(new KeyTipInfo(viewQAT.Enabled, keyTipsPool.Pop(), screenPt, + keyTipList.Add(new KeyTipInfo(viewQAT.Enabled, keyTipsPool.Pop(), screenPt, viewQAT.ClientRectangle, viewQAT.KeyTipTarget)); } } @@ -203,19 +205,19 @@ public override Size GetPreferredSize(ViewLayoutContext context) // Find total width and maximum height across all child elements for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // Only interested in visible items that are not the extra button if (child != _extraButton) { // Cast child to correct type - var view = (ViewDrawRibbonQATButton)child; + var view = child as ViewDrawRibbonQATButton; // If the quick access toolbar button wants to be visible - if (view.QATButton.GetVisible() || Ribbon.InDesignHelperMode) + if (view!.QATButton.GetVisible() || Ribbon.InDesignHelperMode) { // Cache preferred size of the child - Size childSize = child.GetPreferredSize(context); + Size childSize = child!.GetPreferredSize(context); // Only need extra processing for children that have some width if (childSize.Width > 0) @@ -261,7 +263,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) SyncChildren(true); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; var x = ClientLocation.X; var right = ClientRectangle.Right; @@ -286,15 +288,15 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Position each item from left to right taking up entire height for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; - // We only position visible items and we always ignore the extra button + // We only position visible items, and we always ignore the extra button if (child != _extraButton) { - if (child.Visible) + if (child!.Visible) { // Cache preferred size of the child - Size childSize = this[i].GetPreferredSize(context); + Size childSize = this[i]!.GetPreferredSize(context); // Is there enough width for this item to be displayed if ((childSize.Width + x) <= right) @@ -303,7 +305,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(x, y, childSize.Width, height); // Position the element - this[i].Layout(context); + this[i]!.Layout(context); // Move across to next position x += childSize.Width; @@ -386,7 +388,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Gets the view element for the first visible and enabled quick access toolbar button. ///
/// ViewBase if found; otherwise false. - public ViewBase? GetFirstQATView() + public ViewBase GetFirstQATView() { // Scan all the buttons looking for one that is enabled and visible foreach (ViewBase qatView in _qatButtonToView.Values) @@ -398,7 +400,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // If showing the extra button, then use that - return _extraButton; + return _extraButton!; } #endregion @@ -407,7 +409,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Gets the view element for the first visible and enabled quick access toolbar button. ///
/// - public ViewBase? GetLastQATView() + public ViewBase GetLastQATView() { // If showing the extra button, then use that if (_extraButton != null) @@ -432,7 +434,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } } - return null; + return null!; } #endregion @@ -442,7 +444,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) ///
/// Search for entry after this view. /// ViewBase if found; otherwise false. - public ViewBase? GetNextQATView(ViewBase qatButton) + public ViewBase GetNextQATView(ViewBase qatButton) { var found = false; @@ -465,7 +467,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) return _extraButton; } - return null; + return null!; } #endregion @@ -475,7 +477,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) ///
/// Search for entry after this view. /// ViewBase if found; otherwise false. - public ViewBase? GetPreviousQATView(ViewBase? qatButton) + public ViewBase GetPreviousQATView(ViewBase qatButton) { // If the provided view is the extra button, then implicitly already found previous entry var found = (qatButton != null) && (qatButton == _extraButton); @@ -483,13 +485,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Extract the set of views into an array var qatViews = new ViewDrawRibbonQATButton[_qatButtonToView.Count]; _qatButtonToView.Values.CopyTo(qatViews, 0); - + // Search the list in reverse order for (var i = qatViews.Length - 1; i >= 0; i--) { // Extract the correct view to test ViewDrawRibbonQATButton qatView = qatViews[i]; - + if (!found) { found = qatView == qatButton; @@ -500,7 +502,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } } - return null; + return null!; } #endregion @@ -529,7 +531,7 @@ private void SyncChildren(bool layout) foreach (IQuickAccessToolbarButton qatButton in qatButtons) { // Get the currently cached view for the button - if (!_qatButtonToView.TryGetValue(qatButton, out ViewDrawRibbonQATButton view)) + if (!_qatButtonToView.TryGetValue(qatButton, out var view)) { // If a new button, create a view for it now view = new ViewDrawRibbonQATButton(Ribbon, qatButton, _needPaint); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromOverflow.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromOverflow.cs index 8cf1de472..87278663b 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromOverflow.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromOverflow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -33,18 +33,18 @@ internal class ViewLayoutRibbonQATFromOverflow : ViewLayoutRibbonQATContents /// Delegate for notifying paint requests. /// Should the extra button be shown. /// Source for finding buttons that are overflowing. - public ViewLayoutRibbonQATFromOverflow([DisallowNull] Control parentControl, - KryptonRibbon ribbon, - NeedPaintHandler needPaint, + public ViewLayoutRibbonQATFromOverflow([DisallowNull] Control? parentControl, + [DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] NeedPaintHandler? needPaint, bool showExtraButton, - [DisallowNull] ViewLayoutRibbonQATContents contents) + [DisallowNull] ViewLayoutRibbonQATContents? contents) : base(ribbon, needPaint, showExtraButton) { - Debug.Assert(parentControl != null); - Debug.Assert(contents != null); + Debug.Assert(parentControl is not null); + Debug.Assert(contents is not null); - _contents = contents; - ParentControl = parentControl; + _contents = contents ?? throw new ArgumentNullException(nameof(contents)); + ParentControl = parentControl ?? throw new ArgumentNullException(nameof(parentControl)); } #endregion @@ -64,7 +64,7 @@ public override IQuickAccessToolbarButton[] QATButtons // If the button requests to be shown... if (qatButton.GetVisible()) { - ViewBase qatView = _contents.ViewForButton(qatButton); + ViewBase? qatView = _contents.ViewForButton(qatButton); //...but the view is not displayed, then show on overflow if (qatView is { Visible: false }) diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromRibbon.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromRibbon.cs index 3211c5c9c..3991d5d27 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromRibbon.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATFromRibbon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATMini.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATMini.cs index 62e725b6d..8230b4df2 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATMini.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonQATMini.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -26,7 +26,7 @@ internal class ViewLayoutRibbonQATMini : ViewLayoutDocker private readonly KryptonRibbon _ribbon; private readonly ViewDrawRibbonQATBorder _border; private readonly ViewLayoutRibbonQATFromRibbon _borderContents; - private readonly ViewDrawRibbonQATExtraButtonMini? _extraButton; + private readonly ViewDrawRibbonQATExtraButtonMini _extraButton; private readonly ViewLayoutSeparator _extraSeparator; #endregion @@ -37,10 +37,17 @@ internal class ViewLayoutRibbonQATMini : ViewLayoutDocker /// Owning control instance. /// Delegate for notifying paint/layout changes. public ViewLayoutRibbonQATMini([DisallowNull] KryptonRibbon ribbon, - NeedPaintHandler needPaintDelegate) + [DisallowNull] NeedPaintHandler needPaintDelegate) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + + if (needPaintDelegate is null) + { + throw new ArgumentNullException(nameof(needPaintDelegate)); + } + SEP_GAP = (int)(2 * FactorDpiX); // Create the minibar border suitable for a caption area _border = new ViewDrawRibbonQATBorder(_ribbon, needPaintDelegate, true); @@ -60,6 +67,9 @@ public ViewLayoutRibbonQATMini([DisallowNull] KryptonRibbon ribbon, Add(_border, ViewDockStyle.Fill); Add(_extraSeparator, ViewDockStyle.Right); Add(_extraButton, ViewDockStyle.Right); + + // OwnerForm property can be intialized after _ribbon has been assigned. + OwnerForm ??= _ribbon.FindKryptonForm(); } /// @@ -131,17 +141,13 @@ public KeyTipInfo[] GetQATKeyTips() var keyTipList = new KeyTipInfoList(); // Add all the entries for the contents - keyTipList.AddRange(_borderContents.GetQATKeyTips(OwnerForm)); + keyTipList.AddRange(_borderContents.GetQATKeyTips(_ribbon.FindKryptonForm()!)); // If we have the extra button and it is in overflow appearance if (_extraButton is {Overflow : true }) { // If integrated into the caption area then get the caption area height - var borders = Padding.Empty; - if (OwnerForm is { ApplyComposition: false }) - { - borders = OwnerForm.RealWindowBorders; - } + var borders = OwnerForm!.RealWindowBorders; // Get the screen location of the extra button Rectangle viewRect = _borderContents.ParentControl.RectangleToScreen(_extraButton.ClientRectangle); @@ -165,10 +171,10 @@ public KeyTipInfo[] GetQATKeyTips() /// Gets the view element for the first visible and enabled quick access toolbar button. /// /// - public ViewBase? GetFirstQATView() + public ViewBase GetFirstQATView() { // Find the first qat button - ViewBase? view = _borderContents.GetFirstQATView() ?? _extraButton; + ViewBase view = _borderContents.GetFirstQATView() ?? _extraButton; // If defined then use the extra button @@ -181,7 +187,7 @@ public KeyTipInfo[] GetQATKeyTips() /// Gets the view element for the first visible and enabled quick access toolbar button. ///
/// - public ViewBase? GetLastQATView() => + public ViewBase GetLastQATView() => // Last view is the extra button if defined _extraButton ?? _borderContents.GetLastQATView(); @@ -195,9 +201,9 @@ public KeyTipInfo[] GetQATKeyTips() ///
/// Search for entry after this view. /// ViewBase if found; otherwise false. - public ViewBase? GetNextQATView(ViewBase qatButton) + public ViewBase GetNextQATView(ViewBase qatButton) { - ViewBase? view = _borderContents.GetNextQATView(qatButton); + ViewBase view = _borderContents.GetNextQATView(qatButton); // If no qat button is found and not already at the extra button if ((view == null) && (_extraButton != qatButton)) @@ -205,7 +211,7 @@ public KeyTipInfo[] GetQATKeyTips() view = _extraButton; } - return view; + return view!; } #endregion @@ -215,7 +221,7 @@ public KeyTipInfo[] GetQATKeyTips() ///
/// Search for entry after this view. /// ViewBase if found; otherwise false. - public ViewBase? GetPreviousQATView(ViewBase qatButton) => + public ViewBase GetPreviousQATView(ViewBase qatButton) => // If on the extra button then find the right most qat button instead qatButton == _extraButton ? _borderContents.GetLastQATView() : _borderContents.GetPreviousQATView(qatButton); @@ -245,7 +251,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) } } - return base.GetPreferredSize(context); + return base.GetPreferredSize(context!); } /// @@ -286,11 +292,12 @@ private void OnExtraButtonClick(object sender, EventHandler? finishDelegate) // Convert the button rectangle to screen coordinates Rectangle screenRect = _ribbon.RectangleToScreen(button.ClientRectangle); - // If integrated into the caption area - if (OwnerForm is { ApplyComposition: false }) + // Only if the ribbon is on a KForm this adjustment is needed. + if (OwnerForm is not null) { + // If integrated into the caption area // Adjust for the height/width of borders - Padding borders = OwnerForm.RealWindowBorders; + Padding borders = OwnerForm!.RealWindowBorders; screenRect.X -= borders.Left; screenRect.Y -= borders.Top; } @@ -303,6 +310,7 @@ private void OnExtraButtonClick(object sender, EventHandler? finishDelegate) { _ribbon.DisplayQATCustomizeMenu(screenRect, _borderContents, finishDelegate); } + } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRadioButton.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRadioButton.cs index 21550e0d6..43f93a5da 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRadioButton.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -17,7 +17,5 @@ namespace Krypton.Ribbon /// /// Position the contenst of the ribbon radio button. /// - internal class ViewLayoutRibbonRadioButton : ViewLayoutDocker - { - } + internal class ViewLayoutRibbonRadioButton : ViewLayoutDocker; } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRowCenter.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRowCenter.cs index 3769f2cf3..85ec889a6 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRowCenter.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonRowCenter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,8 +20,8 @@ namespace Krypton.Ribbon internal class ViewLayoutRibbonRowCenter : ViewComposite { #region Type Definitions - private class ItemToView : Dictionary { } - private class ViewToSize : Dictionary { } + private class ItemToView : Dictionary; + private class ViewToSize : Dictionary; #endregion #region Instance Fields @@ -78,15 +78,19 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) case GroupItemSize.Small: _viewToSmall.Clear(); break; + case GroupItemSize.Medium: _viewToMedium.Clear(); break; + case GroupItemSize.Large: _viewToLarge.Clear(); break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(CurrentSize.ToString()); break; } @@ -98,7 +102,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (child.Visible) { // Ask child for it's own preferred size - Size childPreferred = child.GetPreferredSize(context); + Size childPreferred = child.GetPreferredSize(context!); // Cache the child preferred size for use in layout switch (CurrentSize) @@ -187,18 +191,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) switch (CurrentSize) { case GroupItemSize.Small: - childPreferred = _viewToSmall.ContainsKey(child) - ? _viewToSmall[child] + childPreferred = _viewToSmall.TryGetValue(child, out Size value) + ? value : child.GetPreferredSize(context); break; case GroupItemSize.Medium: - childPreferred = _viewToMedium.ContainsKey(child) - ? _viewToMedium[child] + childPreferred = _viewToMedium.TryGetValue(child, out Size value1) + ? value1 : child.GetPreferredSize(context); break; case GroupItemSize.Large: - childPreferred = _viewToLarge.ContainsKey(child) - ? _viewToLarge[child] + childPreferred = _viewToLarge.TryGetValue(child, out Size value2) + ? value2 : child.GetPreferredSize(context); break; } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScrollPort.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScrollPort.cs index c81279275..6fb4f6971 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScrollPort.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScrollPort.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -24,7 +24,7 @@ public class RibbonViewControl : ViewControl { #region Instance Fields private readonly KryptonRibbon _ribbon; - private readonly Button _hiddenFocusTarget; + private readonly Button? _hiddenFocusTarget; #endregion #region Identity @@ -32,11 +32,12 @@ public class RibbonViewControl : ViewControl /// Initialize a new instance of the ViewControl class. /// /// Top level ribbon control. - public RibbonViewControl([DisallowNull] KryptonRibbon ribbon) + public RibbonViewControl([DisallowNull] KryptonRibbon? ribbon) : base(ribbon) { - Debug.Assert(ribbon != null); - _ribbon = ribbon; + Debug.Assert(ribbon is not null); + + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); // Create and add a hidden button to act as the focus target _hiddenFocusTarget = new Button @@ -52,7 +53,7 @@ public RibbonViewControl([DisallowNull] KryptonRibbon ribbon) /// /// Hide focus by giving it to the hidden control. /// - public void HideFocus() => _hiddenFocusTarget.Focus(); + public void HideFocus() => _hiddenFocusTarget!.Focus(); #endregion #region Protected @@ -65,7 +66,7 @@ public RibbonViewControl([DisallowNull] KryptonRibbon ribbon) protected override bool ProcessDialogKey(Keys keyData) { // Grab the controlling control that is a parent - Control c = _ribbon.GetControllerControl(this); + Control? c = _ribbon.GetControllerControl(this); // Grab the view manager handling the focus view ViewBase? focusView = null; @@ -73,14 +74,14 @@ protected override bool ProcessDialogKey(Keys keyData) { case VisualPopupGroup popGroup: { - var manager = (ViewRibbonPopupGroupManager)popGroup.GetViewManager(); - focusView = manager.FocusView; + var manager = popGroup.GetViewManager() as ViewRibbonPopupGroupManager; + focusView = manager?.FocusView; break; } case VisualPopupMinimized minimized: { - var manager = (ViewRibbonMinimizedManager)minimized.GetViewManager(); - focusView = manager.FocusView; + var manager = minimized.GetViewManager() as ViewRibbonMinimizedManager; + focusView = manager?.FocusView; break; } } @@ -124,7 +125,7 @@ protected override bool ProcessDialogKey(Keys keyData) private readonly ViewBase _viewFiller; private readonly ViewLayoutRibbonScroller _nearScroller; private readonly ViewLayoutRibbonScroller _farScroller; - private readonly ViewLayoutRibbonTabs _ribbonTabs; + private readonly ViewLayoutRibbonTabs? _ribbonTabs; private readonly RibbonViewControl _viewControlContent; private Rectangle _viewClipRect; private int _scrollOffset; @@ -148,35 +149,35 @@ protected override bool ProcessDialogKey(Keys keyData) /// Should scoller be inset for use in tabs area. /// Scrolling speed. /// Delegate for notifying paint/layout requests. - public ViewLayoutRibbonScrollPort([DisallowNull] KryptonRibbon ribbon, + public ViewLayoutRibbonScrollPort([DisallowNull] KryptonRibbon? ribbon, Orientation orientation, - [DisallowNull] ViewBase viewFiller, + [DisallowNull] ViewBase? viewFiller, bool insetForTabs, int scrollSpeed, - [DisallowNull] NeedPaintHandler needPaintDelegate) + [DisallowNull] NeedPaintHandler? needPaintDelegate) { Debug.Assert(ribbon != null); Debug.Assert(viewFiller != null); Debug.Assert(needPaintDelegate != null); // Remember initial settings - _ribbon = ribbon; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); _orientation = orientation; - _viewFiller = viewFiller; - _needPaintDelegate = needPaintDelegate; + _viewFiller = viewFiller ?? throw new ArgumentNullException(nameof(viewFiller)); + _needPaintDelegate = needPaintDelegate ?? throw new ArgumentNullException(nameof(needPaintDelegate)); _scrollSpeed = scrollSpeed; _ribbonTabs = viewFiller as ViewLayoutRibbonTabs; // Default to left hand scroll position _scrollOffset = 0; - // Place the child view inside a actual control, so that the contents of the + // Place the child view inside an actual control, so that the contents of the // filler are clipped to the control size. This is needed if the child view // contains controls and need clipping inside this area and so prevent them // from drawing over the end scrollers. - _viewControlContent = new RibbonViewControl(ribbon); + _viewControlContent = new RibbonViewControl(ribbon!); _viewControlContent.PaintBackground += OnViewControlPaintBackground; - ViewLayoutControl = new ViewLayoutControl(_viewControlContent, ribbon, _viewFiller); + ViewLayoutControl = new ViewLayoutControl(_viewControlContent, ribbon!, _viewFiller!); // Removed because of this // https://github.com/Krypton-Suite/Standard-Toolkit/issues/372 @@ -189,8 +190,8 @@ public ViewLayoutRibbonScrollPort([DisallowNull] KryptonRibbon ribbon, //} // Create the two scrollers used when not enough space for filler - _nearScroller = new ViewLayoutRibbonScroller(ribbon, NearOrientation, insetForTabs, needPaintDelegate); - _farScroller = new ViewLayoutRibbonScroller(ribbon, FarOrientation, insetForTabs, needPaintDelegate); + _nearScroller = new ViewLayoutRibbonScroller(ribbon!, NearOrientation, insetForTabs, needPaintDelegate!); + _farScroller = new ViewLayoutRibbonScroller(ribbon!, FarOrientation, insetForTabs, needPaintDelegate!); // Hook into scroller events _nearScroller.Click += OnNearClick; @@ -216,7 +217,7 @@ public override string ToString() => /// /// Gets access to the paint delegate to redraw the owning control. /// - public NeedPaintHandler ViewControlPaintDelegate => ViewLayoutControl.ChildPaintDelegate; + public NeedPaintHandler ViewControlPaintDelegate => ViewLayoutControl.ChildPaintDelegate!; #endregion @@ -337,7 +338,7 @@ public KeyTipInfo[] GetGroupKeyTips() /// Gets the first focus item within the scroll port. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetFirstFocusItem() + public ViewBase GetFirstFocusItem() { ViewBase? view = null; @@ -354,7 +355,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -363,7 +364,7 @@ public KeyTipInfo[] GetGroupKeyTips() /// Gets the last focus item within the scroll port. ///
/// ViewBase of item; otherwise false. - public ViewBase? GetLastFocusItem() + public ViewBase GetLastFocusItem() { ViewBase? view = null; @@ -380,7 +381,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -390,7 +391,7 @@ public KeyTipInfo[] GetGroupKeyTips() ///
/// The view that is currently focused. /// ViewBase of item; otherwise false. - public ViewBase? GetNextFocusItem(ViewBase current) + public ViewBase GetNextFocusItem(ViewBase current) { ViewBase? view = null; @@ -407,7 +408,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -417,7 +418,7 @@ public KeyTipInfo[] GetGroupKeyTips() ///
/// The view that is currently focused. /// ViewBase of item; otherwise false. - public ViewBase? GetPreviousFocusItem(ViewBase current) + public ViewBase GetPreviousFocusItem(ViewBase current) { ViewBase? view = null; @@ -434,7 +435,7 @@ public KeyTipInfo[] GetGroupKeyTips() } } - return view; + return view!; } #endregion @@ -459,18 +460,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Enabled = _ribbon.Enabled; // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; Rectangle layoutRect = ClientRectangle; var controlRect = new Rectangle(Point.Empty, ClientSize); - // Reset the the view control layout offset to be zero again + // Reset the view control layout offset to be zero again ViewLayoutControl.LayoutOffset = Point.Empty; // Ask the view control the size it would like to be, this is the requested filler // size of the control. If it wants more than we can give then scroll buttons are // needed, otherwise we can give it the requested size and any extra available. - _ribbon.GetViewManager().DoNotLayoutControls = true; + _ribbon.GetViewManager()!.DoNotLayoutControls = true; ViewLayoutControl.GetPreferredSize(context); // Ensure context has the correct control @@ -480,7 +481,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _viewFiller.Layout(context); } - _ribbon.GetViewManager().DoNotLayoutControls = false; + _ribbon.GetViewManager()!.DoNotLayoutControls = false; Size fillerSize = _viewFiller.ClientSize; // Limit check the scroll offset @@ -611,7 +612,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (_ribbon.SelectedTab != null) { // Cast to correct type - ViewBase viewTab = layoutTabs.GetViewForRibbonTab(_ribbon.SelectedTab); + ViewBase viewTab = layoutTabs.GetViewForRibbonTab(_ribbon.SelectedTab)!; // If a scroll change is required to bring it into view if (ScrollIntoView(viewTab.ClientRectangle, false)) @@ -645,13 +646,13 @@ public override void Render([DisallowNull] RenderContext context) // New clipping region is at most our own client size using var combineRegion = new Region(_viewClipRect); // Remember the current clipping region - Region clipRegion = context.Graphics.Clip.Clone(); + Region clipRegion = context?.Graphics.Clip.Clone()!; // Reduce clipping region down by the existing clipping region combineRegion.Intersect(clipRegion); // Use new region that restricts drawing to our client size only - context.Graphics.Clip = combineRegion; + context!.Graphics.Clip = combineRegion; child.Render(context); @@ -660,7 +661,7 @@ public override void Render([DisallowNull] RenderContext context) } else { - child.Render(context); + child.Render(context!); } } } @@ -721,11 +722,14 @@ private VisualOrientation NearOrientation { case Orientation.Horizontal: return VisualOrientation.Left; + case Orientation.Vertical: return VisualOrientation.Top; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Orientation.ToString()); return VisualOrientation.Left; } } @@ -739,17 +743,20 @@ private VisualOrientation FarOrientation { case Orientation.Horizontal: return VisualOrientation.Right; + case Orientation.Vertical: return VisualOrientation.Bottom; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Orientation.ToString()); return VisualOrientation.Right; } } } - private void OnNearClick(object sender, EventArgs e) + private void OnNearClick(object? sender, EventArgs e) { // Scroll left/up _scrollOffset -= _scrollSpeed; @@ -758,7 +765,7 @@ private void OnNearClick(object sender, EventArgs e) _needPaintDelegate(this, new NeedLayoutEventArgs(true)); } - private void OnFarClick(object sender, EventArgs e) + private void OnFarClick(object? sender, EventArgs e) { // Scroll down/right _scrollOffset += _scrollSpeed; @@ -767,7 +774,7 @@ private void OnFarClick(object sender, EventArgs e) _needPaintDelegate(this, new NeedLayoutEventArgs(true)); } - private void OnViewControlPaintBackground(object sender, PaintEventArgs e) => PaintBackground?.Invoke(sender, e); + private void OnViewControlPaintBackground(object? sender, PaintEventArgs e) => PaintBackground?.Invoke(sender, e); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScroller.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScroller.cs index 37792602f..9d8a38734 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScroller.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonScroller.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -115,7 +115,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Layout depends on orientation switch (Orientation) @@ -169,7 +169,7 @@ private Rectangle AdjustRectForTabs(Rectangle rect) return rect; } - private void OnButtonClick(object sender, MouseEventArgs e) => Click?.Invoke(this, EventArgs.Empty); + private void OnButtonClick(object? sender, MouseEventArgs e) => Click?.Invoke(this, EventArgs.Empty); #endregion } } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonSeparator.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonSeparator.cs index 986cd782c..4cd7c00f7 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonSeparator.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -98,7 +98,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabs.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabs.cs index 17ea64e6c..da5168fcd 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabs.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * @@ -20,9 +20,9 @@ namespace Krypton.Ribbon internal class ViewLayoutRibbonTabs : ViewComposite { #region Type Definitions - private class ViewDrawRibbonTabList : List { } - private class ViewDrawRibbonTabSepList : List { } - private class ContextNameList : List { } + private class ViewDrawRibbonTabList : List; + private class ViewDrawRibbonTabSepList : List; + private class ContextNameList : List; #endregion #region Static Fields @@ -36,7 +36,7 @@ private class ContextNameList : List { } private readonly KryptonRibbon _ribbon; private readonly ViewDrawRibbonTabList _tabCache; private readonly ViewDrawRibbonTabSepList _tabSepCache; - private ViewDrawRibbonDesignTab? _viewAddTab; + private ViewDrawRibbonDesignTab _viewAddTab; private NeedPaintHandler _needPaint; private ContextNameList _cachedSelectedContext; private Size[] _cachedSizes; @@ -48,26 +48,26 @@ private class ContextNameList : List { } #endregion #region Identity - static ViewLayoutRibbonTabs() => ContextTabSets = new ContextTabSetCollection(); + static ViewLayoutRibbonTabs() => ContextTabSets = []; /// /// Initialize a new instance of the ViewLayoutRibbonTabs class. /// /// Owning ribbon control instance. /// Delegate for notifying paint requests. - public ViewLayoutRibbonTabs([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] NeedPaintHandler needPaint) + public ViewLayoutRibbonTabs([DisallowNull] KryptonRibbon? ribbon, + [DisallowNull] NeedPaintHandler? needPaint) { - Debug.Assert(ribbon != null); - Debug.Assert(needPaint != null); + Debug.Assert(ribbon is not null); + Debug.Assert(needPaint is not null); // Cache references - _ribbon = ribbon; - _needPaint = needPaint; + _ribbon = ribbon ?? throw new ArgumentNullException(nameof(ribbon)); + _needPaint = needPaint ?? throw new ArgumentNullException(nameof(needPaint)); // Create cache of draw elements - _tabCache = new ViewDrawRibbonTabList(); - _tabSepCache = new ViewDrawRibbonTabSepList(); + _tabCache = []; + _tabSepCache = []; } /// @@ -120,7 +120,7 @@ public NeedPaintHandler NeedPaintDelegate /// /// Gets and sets the parent control. /// - public Control ParentControl { get; set; } + public Control? ParentControl { get; set; } #endregion @@ -128,7 +128,7 @@ public NeedPaintHandler NeedPaintDelegate /// /// Gets access to the tabs spare area. /// - public ViewLayoutRibbonTabsSpare? GetViewForSpare { get; private set; } + public ViewLayoutRibbonTabsSpare GetViewForSpare { get; private set; } #endregion @@ -138,7 +138,7 @@ public NeedPaintHandler NeedPaintDelegate /// /// Tab for which view element is needed. /// View element for tab; otherwise null. - public ViewDrawRibbonTab? GetViewForRibbonTab(KryptonRibbonTab? ribbonTab) => ribbonTab == null + public ViewDrawRibbonTab? GetViewForRibbonTab(KryptonRibbonTab? ribbonTab) => ribbonTab is null ? null : _tabCache.FirstOrDefault(viewTab => viewTab.RibbonTab == ribbonTab); @@ -146,7 +146,7 @@ public NeedPaintHandler NeedPaintDelegate /// Gets the view element for drawing the first visible ribbon tab. ///
/// View element for a tab; otherwise null. - public ViewDrawRibbonTab? GetViewForFirstRibbonTab() + public ViewDrawRibbonTab GetViewForFirstRibbonTab() { foreach (ViewBase child in this) { @@ -156,7 +156,7 @@ public NeedPaintHandler NeedPaintDelegate } } - return null; + return null!; } /// @@ -164,7 +164,7 @@ public NeedPaintHandler NeedPaintDelegate /// /// Current ribbon tab to use when searching. /// View element for a tab; otherwise null. - public ViewDrawRibbonTab? GetViewForNextRibbonTab(KryptonRibbonTab ribbonTab) + public ViewDrawRibbonTab GetViewForNextRibbonTab(KryptonRibbonTab ribbonTab) { var found = false; foreach (ViewBase child in this) @@ -186,7 +186,7 @@ public NeedPaintHandler NeedPaintDelegate } } - return null; + return null!; } /// @@ -194,7 +194,7 @@ public NeedPaintHandler NeedPaintDelegate /// /// Current ribbon tab to use when searching. /// View element for a tab; otherwise null. - public ViewDrawRibbonTab? GetViewForPreviousRibbonTab(KryptonRibbonTab ribbonTab) + public ViewDrawRibbonTab GetViewForPreviousRibbonTab(KryptonRibbonTab ribbonTab) { var found = false; foreach (ViewBase child in Reverse()) @@ -216,14 +216,14 @@ public NeedPaintHandler NeedPaintDelegate } } - return null; + return null!; } /// /// Gets the view element for drawing the last visible ribbon tab. /// /// View element for a tab; otherwise null. - public ViewDrawRibbonTab? GetViewForLastRibbonTab() + public ViewDrawRibbonTab GetViewForLastRibbonTab() { foreach (ViewBase child in Reverse()) { @@ -233,7 +233,7 @@ public NeedPaintHandler NeedPaintDelegate } } - return null; + return null!; } #endregion @@ -254,13 +254,13 @@ public KeyTipInfo[] GetTabKeyTips() { // Get the screen location of the view tab - Rectangle tabRect = viewTab.OwningControl.RectangleToScreen(viewTab.ClientRectangle); + Rectangle tabRect = viewTab.OwningControl!.RectangleToScreen(viewTab.ClientRectangle); // The keytip should be centered on the bottom center of the view var screenPt = new Point(tabRect.Left + (tabRect.Width / 2), tabRect.Bottom + 2); // Create new key tip that invokes the tab controller when selected - keyTipList.Add(new KeyTipInfo(true, viewTab.RibbonTab.KeyTip, + keyTipList.Add(new KeyTipInfo(true, viewTab.RibbonTab!.KeyTip, screenPt, viewTab.ClientRectangle, viewTab.KeyTipTarget)); } @@ -357,10 +357,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) // Find total width and maximum height across all child elements for (var i = 0; i < Count; i++) { - ViewBase child = this[i]; + ViewBase? child = this[i]; // Only interested in visible items - if (child.Visible) + if (child!.Visible) { // Cache preferred size of the child _cachedSizes[i] = child.GetPreferredSize(context); @@ -443,7 +443,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) SyncChildrenToRibbonTabs(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; var x = ClientLocation.X; @@ -484,7 +484,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Position the element - this[i].Layout(context); + this[i]?.Layout(context); // Move across to next position x += layoutSizes[i].Width; @@ -511,12 +511,12 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // We have an owning form we need to update the custom area it treats as a caption - if (_ribbon.CaptionArea.KryptonForm != null) + if (_ribbon.CaptionArea?.KryptonForm != null) { if (!customCaptionRect.IsEmpty) { // Convert the rectangle to the owning form coordinates - customCaptionRect = ParentControl.RectangleToScreen(customCaptionRect); + customCaptionRect = ParentControl!.RectangleToScreen(customCaptionRect); customCaptionRect = _ribbon.CaptionArea.KryptonForm.RectangleToClient(customCaptionRect); } @@ -627,7 +627,7 @@ private void AddTabsWithContextName(string contextName) // Create tab set when first needed, otherwise this tab must be the last one if (cts == null) { - cts = new ContextTabSet(drawTab, _ribbon.RibbonContexts[ribbonTab.ContextName]); + cts = new ContextTabSet(drawTab, _ribbon.RibbonContexts[ribbonTab.ContextName]!); } else { @@ -774,7 +774,7 @@ private void UpdateContextNameCache() // Create list first time around, otherwise clear it down if (_cachedSelectedContext == null) { - _cachedSelectedContext = new ContextNameList(); + _cachedSelectedContext = []; } else { @@ -784,7 +784,7 @@ private void UpdateContextNameCache() // In design mode if (_ribbon.InDesignHelperMode) { - // All all the defined ribbon contexts + // All the defined ribbon contexts foreach (KryptonRibbonContext context in _ribbon.RibbonContexts) { _cachedSelectedContext.Add(context.ContextName); diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs index 963dffebb..528753031 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsArea.cs @@ -1,14 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -94,7 +90,7 @@ public RibbonButtonSpecFixedCollection(KryptonRibbon owner) /// Reference to layout of the context area. /// Delegate for notifying paint/layout changes. public ViewLayoutRibbonTabsArea([DisallowNull] KryptonRibbon ribbon, - [DisallowNull] PaletteRedirect? redirect, + [DisallowNull] PaletteRedirect redirect, [DisallowNull] ViewDrawRibbonCaptionArea captionArea, [DisallowNull] ViewLayoutRibbonContextTitles layoutContexts, [DisallowNull] NeedPaintHandler needPaintDelegate) @@ -119,7 +115,7 @@ public ViewLayoutRibbonTabsArea([DisallowNull] KryptonRibbon ribbon, CreateController(); CreateButtonSpecs(); - CreateViewElements(redirect); + CreateViewElements(redirect!); SetupParentMonitoring(); } @@ -181,8 +177,8 @@ public override string ToString() => ///
public void HookToolTipHandling() { - LayoutAppButton.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, LayoutAppButton, _appButtonController); - LayoutAppTab.MouseController = new ToolTipController(_ribbon.TabsArea.ButtonSpecManager.ToolTipManager, LayoutAppTab, _appTabController); + LayoutAppButton.MouseController = new ToolTipController(_ribbon.TabsArea!.ButtonSpecManager?.ToolTipManager!, LayoutAppButton, _appButtonController); + LayoutAppTab.MouseController = new ToolTipController(_ribbon.TabsArea?.ButtonSpecManager!.ToolTipManager!, LayoutAppTab, _appTabController); } #endregion @@ -216,9 +212,6 @@ public void CheckRibbonSize() { _ribbon.MainPanel.Visible = show; _captionArea.PreventIntegration = !show; - - // Need to recalcualte the composition and so the client area that is turned into glass - _captionArea.KryptonForm?.RecalculateComposition(); } } else @@ -232,7 +225,7 @@ public void CheckRibbonSize() // If using custom chrome if (_captionArea.UsingCustomChrome) { - _paintCount = _captionArea.KryptonForm.PaintCount; + _paintCount = _captionArea.KryptonForm!.PaintCount; _invalidateTimer.Start(); } } @@ -250,12 +243,21 @@ public void CheckRibbonSize() public void AppButtonVisibleChanged() { // Update visible state of the app button/tab to reflect current state - LayoutAppButton.Visible = _ribbon.RibbonAppButton.AppButtonVisible && (_ribbon.RibbonShape == PaletteRibbonShape.Office2007); - LayoutAppTab.Visible = _ribbon.RibbonAppButton.AppButtonVisible && (_ribbon.RibbonShape != PaletteRibbonShape.Office2007); + LayoutAppButton.Visible = _ribbon.RibbonFileAppButton.AppButtonVisible && (_ribbon.RibbonShape == PaletteRibbonShape.Office2007); + LayoutAppTab.Visible = _ribbon.RibbonFileAppButton.AppButtonVisible && (_ribbon.RibbonShape != PaletteRibbonShape.Office2007); _leftSeparator.SeparatorSize = (_ribbon.RibbonShape == PaletteRibbonShape.Office2007) ? new Size(BUTTON_TAB_GAP_2007, BUTTON_TAB_GAP_2007) : new Size(BUTTON_TAB_GAP_2010, BUTTON_TAB_GAP_2010); // If no app button then need separator to stop first tab being to close to the left edge _layoutAppButtonSep.Visible = !LayoutAppButton.Visible; + ViewDrawRibbonCaptionArea? viewDrawRibbonCaptionArea = _ribbon.CaptionArea; + if (viewDrawRibbonCaptionArea?.KryptonForm != null) + { + if (viewDrawRibbonCaptionArea.KryptonForm.CloseBox != _ribbon.RibbonFileAppButton.FormCloseBoxVisible) + { + viewDrawRibbonCaptionArea.KryptonForm.CloseBox = _ribbon.RibbonFileAppButton.FormCloseBoxVisible; + viewDrawRibbonCaptionArea.PerformFormChromeCheck(); + } + } } #endregion @@ -305,7 +307,7 @@ public KeyTipInfo GetAppButtonKeyTip() var screenPt = new Point(buttonRect.Left + (buttonRect.Width / 2), buttonRect.Top); // Return key tip details - return new KeyTipInfo(true, _ribbon.RibbonStrings.AppButtonKeyTip, screenPt, + return new KeyTipInfo(true, KryptonManager.Strings.RibbonStrings.AppButtonKeyTip, screenPt, LayoutAppButton.ClientRectangle, _appButtonController); } @@ -321,7 +323,7 @@ public KeyTipInfo GetAppTabKeyTip() var screenPt = new Point(buttonRect.Left + (buttonRect.Width / 2), buttonRect.Bottom + 2); // Return key tip details - return new KeyTipInfo(true, _ribbon.RibbonStrings.AppButtonKeyTip, screenPt, + return new KeyTipInfo(true, KryptonManager.Strings.RibbonStrings.AppButtonKeyTip, screenPt, LayoutAppTab.ClientRectangle, _appTabController); } @@ -367,10 +369,10 @@ public override void Layout(ViewLayoutContext context) _layoutContexts.Layout(context); context.DisplayRectangle = temp; - // If using custom chrome but not using the composition (which does not need an extra draw) - if (_captionArea is { UsingCustomChrome: true, KryptonForm.ApplyComposition: false }) + // If using custom chrome + if (_captionArea is { UsingCustomChrome: true }) { - _paintCount = _captionArea.KryptonForm.PaintCount; + _paintCount = _captionArea.KryptonForm!.PaintCount; _invalidateTimer.Start(); } } @@ -460,7 +462,7 @@ private void CreateButtonSpecs() _buttonSpecsFixed.AddRange(new ButtonSpec[] { _buttonSpecMinimize, _buttonSpecExpand, _buttonSpecMin, _buttonSpecRestore, _buttonSpecClose }); } - private void CreateViewElements(PaletteRedirect? redirect) + private void CreateViewElements(PaletteRedirect redirect) { // Layout for individual tabs inside the header LayoutTabs = new ViewLayoutRibbonTabs(_ribbon, NeedPaintDelegate); @@ -529,12 +531,12 @@ private void CreateViewElements(PaletteRedirect? redirect) // Create button specification collection manager PaletteRedirect aeroOverrideText = new PaletteRedirectRibbonAeroOverride(_ribbon, redirect); ButtonSpecManager = new ButtonSpecManagerLayoutRibbon(_ribbon, aeroOverrideText, _ribbon.ButtonSpecs, _buttonSpecsFixed, - new[] { tabsDocker }, - new IPaletteMetric[] { _ribbon.StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary }, - new[] { PaletteMetricPadding.RibbonButtonPadding }, - _ribbon.CreateToolStripRenderer, - NeedPaintDelegate); + [tabsDocker], + [_ribbon.StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetPrimary], + [PaletteMetricPadding.RibbonButtonPadding], + _ribbon.CreateToolStripRenderer, + NeedPaintDelegate); // Create the manager for handling tooltips ToolTipManager = new ToolTipManager(new ToolTipValues(null)); // use default, as each button "could" have different values ??!!?? @@ -545,7 +547,7 @@ private void CreateViewElements(PaletteRedirect? redirect) private void SetupParentMonitoring() { - // We have to know when the parent of the ribbon changes so we can then hook + // We have to know when the parent of the ribbon changes, so we can then hook // into monitoring the mdi active child status of the top level form, this is // required to get the pendant buttons to operate as needed. _ribbon.ParentChanged += OnRibbonParentChanged; @@ -557,7 +559,7 @@ private void SetupParentMonitoring() _invalidateTimer.Tick += OnRedrawTick; } - private void OnRibbonParentChanged(object sender, EventArgs e) + private void OnRibbonParentChanged(object? sender, EventArgs e) { // Unhook from watching any top level window if (_formContainer != null) @@ -568,7 +570,7 @@ private void OnRibbonParentChanged(object sender, EventArgs e) _formContainer.MdiChildActivate -= OnRibbonMdiChildActivate; } - // Find the new top level form (which might be an mdi container) + // Find the new top level form (which might be a mdi container) _formContainer = _ribbon.FindForm(); // Monitor changes in active mdi child @@ -582,21 +584,21 @@ private void OnRibbonParentChanged(object sender, EventArgs e) } } - private void OnRibbonFormActivated(object sender, EventArgs e) + private void OnRibbonFormActivated(object? sender, EventArgs e) { - _ribbon.ViewRibbonManager.Active(); + _ribbon.ViewRibbonManager?.Active(); _ribbon.UpdateBackStyle(); } - private void OnRibbonFormDeactivate(object sender, EventArgs e) + private void OnRibbonFormDeactivate(object? sender, EventArgs e) { - _ribbon.ViewRibbonManager.Inactive(); + _ribbon.ViewRibbonManager?.Inactive(); _ribbon.UpdateBackStyle(); } - private void OnRibbonFormSizeChanged(object sender, EventArgs e) => CheckRibbonSize(); + private void OnRibbonFormSizeChanged(object? sender, EventArgs e) => CheckRibbonSize(); - private void OnRibbonMdiChildActivate(object sender, EventArgs e) + private void OnRibbonMdiChildActivate(object? sender, EventArgs e) { // Cast to correct type var topForm = sender as Form; @@ -624,7 +626,7 @@ private void OnRibbonMdiChildActivate(object sender, EventArgs e) // We never want the mdi child window to have a system menu, we provide the // pendant buttons as part of the ribbon and so replace the need for it. - PI.SetMenu(new HandleRef(_ribbon, topForm.Handle), NullHandleRef); + PI.SetMenu(new HandleRef(_ribbon, topForm!.Handle), NullHandleRef); if (_activeMdiChild != null) { @@ -634,14 +636,14 @@ private void OnRibbonMdiChildActivate(object sender, EventArgs e) } } - private void OnRibbonMdiChildSizeChanged(object sender, EventArgs e) + private void OnRibbonMdiChildSizeChanged(object? sender, EventArgs e) { // Update pendant buttons to reflect new child state ButtonSpecManager?.RecreateButtons(); PerformNeedPaint(true); } - private void OnRedrawTick(object sender, EventArgs e) + private void OnRedrawTick(object? sender, EventArgs e) { _invalidateTimer.Stop(); @@ -654,7 +656,7 @@ private void OnRedrawTick(object sender, EventArgs e) } } - private void OnAppButtonReleased(object sender, EventArgs e) + private void OnAppButtonReleased(object? sender, EventArgs e) { // We do not operate the application button at design time if (!_ribbon.InDesignMode) @@ -663,7 +665,7 @@ private void OnAppButtonReleased(object sender, EventArgs e) } } - private void OnAppButtonClicked(object sender, EventArgs e) + private void OnAppButtonClicked(object? sender, EventArgs e) { // We do not operate the application button at design time if (_ribbon.InDesignMode) @@ -716,16 +718,16 @@ private void OnAppButtonClicked(object sender, EventArgs e) } // Create the actual control used to show the context menu - _appMenu = new VisualPopupAppMenu(_ribbon, _ribbon.RibbonAppButton, - _ribbon.Palette, _ribbon.PaletteMode, + _appMenu = new VisualPopupAppMenu(_ribbon, + _ribbon.LocalCustomPalette, _ribbon.PaletteMode, _ribbon.GetRedirector(), appRectTop, appRectBottom, - _appButtonController.Keyboard); + _appButtonController!.Keyboard); // Need to know when the visual control is removed _appMenu.Disposed += OnAppMenuDisposed; - // Adjust the screen rect of the app button/tab, so we show half way down the button + // Adjust the screen rect of the app button/tab, so we show half-way down the button appRectShow.X -= 3; appRectShow.Height = 0; @@ -739,7 +741,7 @@ private void OnAppButtonClicked(object sender, EventArgs e) } } - private void OnAppMenuDisposed(object sender, EventArgs e) + private void OnAppMenuDisposed(object? sender, EventArgs e) { // We always kill keyboard mode when the app button menu is removed _ribbon.KillKeyboardMode(); @@ -770,7 +772,7 @@ private void OnAppMenuDisposed(object sender, EventArgs e) } } - private void OnContextClicked(object sender, MouseEventArgs e) + private void OnContextClicked(object? sender, MouseEventArgs e) { if (!_ribbon.InDesignMode) { @@ -778,7 +780,7 @@ private void OnContextClicked(object sender, MouseEventArgs e) } } - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!_ribbon.IsDisposed) { @@ -802,45 +804,45 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) { case ViewLayoutRibbonAppButton: case ViewLayoutRibbonAppTab: - { - // Create a content that recovers values from a the ribbon for the app button/tab - var appButtonContent = new AppButtonToolTipToContent(_ribbon); - - // Is there actually anything to show for the tooltip - if (appButtonContent.HasContent) { - sourceContent = appButtonContent; + // Create a content that recovers values from the ribbon for the app button/tab + var appButtonContent = new AppButtonToolTipToContent(_ribbon); + + // Is there actually anything to show for the tooltip + if (appButtonContent.HasContent) + { + sourceContent = appButtonContent; - // Grab the style from the app button settings - toolTipStyle = _ribbon.RibbonAppButton.AppButtonToolTipStyle; - shadow = _ribbon.RibbonAppButton.ToolTipShadow; + // Grab the style from the app button settings + toolTipStyle = _ribbon.RibbonFileAppButton.AppButtonToolTipStyle; + shadow = _ribbon.RibbonFileAppButton.ToolTipShadow; - // Display below the mouse cursor - screenRect.Height += SystemInformation.CursorSize.Height / 3 * 2; + // Display below the mouse cursor + screenRect.Height += SystemInformation.CursorSize.Height / 3 * 2; + } } - } break; case ViewDrawRibbonQATButton viewElement1: - { - // If the target is a QAT button - // Cast to correct type + { + // If the target is a QAT button + // Cast to correct type - // Create a content that recovers values from a IQuickAccessToolbarButton - var qatButtonContent = new QATButtonToolTipToContent(viewElement1.QATButton); + // Create a content that recovers values from a IQuickAccessToolbarButton + var qatButtonContent = new QATButtonToolTipToContent(viewElement1.QATButton); - // Is there actually anything to show for the tooltip - if (qatButtonContent.HasContent) - { - sourceContent = qatButtonContent; + // Is there actually anything to show for the tooltip + if (qatButtonContent.HasContent) + { + sourceContent = qatButtonContent; - // Grab the style from the QAT button settings - toolTipStyle = viewElement1.QATButton.GetToolTipStyle(); - shadow = viewElement1.QATButton.GetToolTipShadow(); + // Grab the style from the QAT button settings + toolTipStyle = viewElement1.QATButton.GetToolTipStyle(); + shadow = viewElement1.QATButton.GetToolTipShadow(); - // Display below the mouse cursor - screenRect.Height += SystemInformation.CursorSize.Height / 3 * 2; + // Display below the mouse cursor + screenRect.Height += SystemInformation.CursorSize.Height / 3 * 2; + } } - } break; default: { @@ -878,7 +880,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) { sourceContent = groupItem.ToolTipValues; - // Grab the style from the group radio button button settings + // Grab the style from the group radio button settings toolTipStyle = groupItem.ToolTipValues.ToolTipStyle; shadow = groupItem.ToolTipValues.ToolTipShadow; @@ -911,7 +913,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) _visualPopupToolTip.Disposed += OnVisualPopupToolTipDisposed; - // The popup tooltip control always adds on a border above/below so we negate that here. + // The popup tooltip control always adds on a border above/below, so we negate that here. screenRect.Height -= 20; _visualPopupToolTip.ShowRelativeTo(e.Target, screenRect.Location); } @@ -919,21 +921,23 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; - popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; + if (sender is VisualPopupToolTip popupToolTip && popupToolTip is not null) + { + popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; - // Not showing a popup page any more - _visualPopupToolTip = null; + // Not showing a popup page anymore + _visualPopupToolTip = null; + } } - private void OnTabsPaintBackground(object sender, PaintEventArgs e) => PaintBackground?.Invoke(sender, e); + private void OnTabsPaintBackground(object? sender, PaintEventArgs e) => PaintBackground?.Invoke(sender, e); #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsSpare.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsSpare.cs index ab4bd2148..6154bd23d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsSpare.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTabsSpare.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTitle.cs b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTitle.cs index 3d0f1ab66..29899fff3 100644 --- a/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTitle.cs +++ b/Source/Krypton Components/Krypton.Ribbon/View Layout/ViewLayoutRibbonTitle.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * * Modified: Monday 12th April, 2021 @ 18:00 GMT * diff --git a/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateText.cs b/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateText.cs index d32341e7c..1d0570d75 100644 --- a/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,21 +42,17 @@ public class AccurateText : GlobalId /// How to align multi-line text. /// How to process prefix characters. /// Rendering hint. - /// Should draw on a composition element. - /// When on composition draw with glowing. /// Dispose of font when finished with it. /// /// A memento used to draw the text. public static AccurateTextMemento MeasureString([DisallowNull] Graphics g, RightToLeft rtl, [DisallowNull] string text, - [DisallowNull] Font font, + [DisallowNull] Font? font, PaletteTextTrim trim, PaletteRelativeAlign align, PaletteTextHotkeyPrefix prefix, TextRenderingHint hint, - bool composition, - bool glowing, bool disposeFont) { Debug.Assert(g != null); @@ -99,15 +95,19 @@ public static AccurateTextMemento MeasureString([DisallowNull] Graphics g, case PaletteRelativeAlign.Near: format.Alignment = (rtl == RightToLeft.Yes) ? StringAlignment.Far : StringAlignment.Near; break; + case PaletteRelativeAlign.Center: format.Alignment = StringAlignment.Center; break; + case PaletteRelativeAlign.Far: format.Alignment = (rtl == RightToLeft.Yes) ? StringAlignment.Near : StringAlignment.Far; break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(align.ToString()); break; } @@ -117,24 +117,31 @@ public static AccurateTextMemento MeasureString([DisallowNull] Graphics g, case PaletteTextTrim.Character: format.Trimming = StringTrimming.Character; break; + case PaletteTextTrim.EllipsisCharacter: format.Trimming = StringTrimming.EllipsisCharacter; break; + case PaletteTextTrim.EllipsisPath: format.Trimming = StringTrimming.EllipsisPath; break; + case PaletteTextTrim.EllipsisWord: format.Trimming = StringTrimming.EllipsisWord; break; + case PaletteTextTrim.Word: format.Trimming = StringTrimming.Word; break; + case PaletteTextTrim.Hide: format.Trimming = StringTrimming.None; break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(trim.ToString()); break; } @@ -144,15 +151,19 @@ public static AccurateTextMemento MeasureString([DisallowNull] Graphics g, case PaletteTextHotkeyPrefix.None: format.HotkeyPrefix = HotkeyPrefix.None; break; + case PaletteTextHotkeyPrefix.Hide: format.HotkeyPrefix = HotkeyPrefix.Hide; break; + case PaletteTextHotkeyPrefix.Show: format.HotkeyPrefix = HotkeyPrefix.Show; break; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(prefix.ToString()); break; } @@ -174,11 +185,6 @@ public static AccurateTextMemento MeasureString([DisallowNull] Graphics g, // Declare a proposed size with dimensions set to the maximum integer value. var proposedSize = new Size(int.MaxValue, int.MaxValue); textSize = g.MeasureString(text, font, proposedSize, format); - - if (composition && glowing) //Seb - { - textSize.Width += GLOW_EXTRA_WIDTH; - } } catch { @@ -200,10 +206,8 @@ public static AccurateTextMemento MeasureString([DisallowNull] Graphics g, /// Rectangle to draw text inside. /// Right to left setting for control. /// Orientation for drawing text. - /// Memento containing text context. /// State of the source element. - /// Should draw on a composition element. - /// When on composition draw with glowing. + /// Memento containing text context. /// /// True if draw succeeded; False is draw produced an error. public static bool DrawString([DisallowNull] Graphics g, @@ -211,8 +215,6 @@ public static bool DrawString([DisallowNull] Graphics g, Rectangle rect, RightToLeft rtl, VisualOrientation orientation, - bool composition, - bool glowing, PaletteState state, [DisallowNull] AccurateTextMemento memento) { @@ -287,26 +289,8 @@ public static bool DrawString([DisallowNull] Graphics g, try { - switch (Application.RenderWithVisualStyles) - { - case true when composition && glowing: - DrawCompositionGlowingText(g, memento.Text, memento.Font, rect, state, - SystemColors.ActiveCaptionText, true); - break; - case true when composition: - { - //Check if correct in all cases - var tmpBrush = brush as SolidBrush; - Color tmpColor = tmpBrush?.Color ?? SystemColors.ActiveCaptionText; - - DrawCompositionText(g, memento.Text, memento.Font, rect, state, - tmpColor, true, memento.Format); - break; - } - default: - g.DrawString(memento.Text, memento.Font, brush, rect, memento.Format); - break; - } + + g.DrawString(memento.Text, memento.Font!, brush, rect, memento.Format); } catch { @@ -350,221 +334,6 @@ private static Color ContrastColor(Color color) #endregion #region Implementation - /// - /// Draw text with a glowing background, for use on a composition element. - /// - /// Graphics reference. - /// Text to be drawn. - /// Font to use for text. - /// Bounding area for the text. - /// State of the source element. - /// of the text. - /// Should existing background be copied into the bitmap. - public static void DrawCompositionGlowingText(Graphics? g, - string text, - Font font, - Rectangle bounds, - PaletteState state, - Color color, - bool copyBackground) - { - // Get the hDC for the graphics instance and create a memory DC - var gDC = g?.GetHdc() ?? IntPtr.Zero; - try - { - var mDC = PI.CreateCompatibleDC(gDC); - - var bmi = new PI.BITMAPINFO - { - biWidth = bounds.Width, - biHeight = -(bounds.Height + (GLOW_EXTRA_HEIGHT * 2)), - biCompression = 0, - biBitCount = 32, - biPlanes = 1 - }; - bmi.biSize = (uint) Marshal.SizeOf(bmi); - - - // Create a device independent bitmap and select into the memory DC - var hDIB = PI.CreateDIBSection(gDC, ref bmi, 0, out _, IntPtr.Zero, 0); - PI.SelectObject(mDC, hDIB); - - if (copyBackground) - { - // Copy existing background into the bitmap - PI.BitBlt(mDC, 0, 0, bounds.Width, bounds.Height + (GLOW_EXTRA_HEIGHT * 2), - gDC, bounds.X, bounds.Y - GLOW_EXTRA_HEIGHT, 0x00CC0020); - } - - // Select the font for use when drawing - var hFont = font.ToHfont(); - PI.SelectObject(mDC, hFont); - - // Get renderer for the correct state - var renderer = new VisualStyleRenderer(state == PaletteState.Normal - ? VisualStyleElement.Window.Caption.Active - : VisualStyleElement.Window.Caption.Inactive); - - // Create structures needed for theme drawing call - var textBounds = new PI.RECT - { - left = 0, - top = 0, - right = bounds.Right - bounds.Left, - bottom = bounds.Bottom - bounds.Top + (GLOW_EXTRA_HEIGHT * 2) - }; - var dttOpts = new PI.DTTOPTS - { - dwSize = Marshal.SizeOf(typeof(PI.DTTOPTS)), - dwFlags = PI.DTT_COMPOSITED | PI.DTT_GLOWSIZE | PI.DTT_TEXTCOLOR, - crText = ColorTranslator.ToWin32(color), - iGlowSize = 11 - }; - - // Always draw text centered - const TextFormatFlags TEXT_FORMAT = TextFormatFlags.SingleLine | - TextFormatFlags.HorizontalCenter | - TextFormatFlags.VerticalCenter | - TextFormatFlags.EndEllipsis; - - // Perform actual drawing - PI.DrawThemeTextEx(renderer.Handle, - mDC, 0, 0, - text, -1, (int)TEXT_FORMAT, - ref textBounds, ref dttOpts); - - // Copy to foreground - PI.BitBlt(gDC, - bounds.Left, bounds.Top - GLOW_EXTRA_HEIGHT, - bounds.Width, bounds.Height + (GLOW_EXTRA_HEIGHT * 2), - mDC, 0, 0, 0x00CC0020); - - // Dispose of allocated objects - PI.DeleteObject(hFont); - PI.DeleteObject(hDIB); - PI.DeleteDC(mDC); - } - catch - { - // ignored - } - finally - { - // Must remember to release the hDC - g?.ReleaseHdc(gDC); - } - } - - /// - /// Draw text without a glowing background, for use on a composition element. - /// - /// Graphics reference. - /// Text to be drawn. - /// Font to use for text. - /// Bounding area for the text. - /// State of the source element. - /// of the text. - /// Should existing background be copied into the bitmap. - /// StringFormat of the memento. - public static void DrawCompositionText(Graphics? g, - string text, - Font font, - Rectangle bounds, - PaletteState state, - Color color, - bool copyBackground, - StringFormat sf) - { - // Get the hDC for the graphics instance and create a memory DC - var gDC = g?.GetHdc() ?? IntPtr.Zero; - try - { - var mDC = PI.CreateCompatibleDC(gDC); - - var bmi = new PI.BITMAPINFO - { - biWidth = bounds.Width, - biHeight = -bounds.Height, - biCompression = 0, - biBitCount = 32, - biPlanes = 1 - }; - bmi.biSize = (uint)Marshal.SizeOf(bmi); - - // Create a device independent bitmap and select into the memory DC - var hDIB = PI.CreateDIBSection(gDC, ref bmi, 0, out _, IntPtr.Zero, 0); - PI.SelectObject(mDC, hDIB); - - if (copyBackground) - { - // Copy existing background into the bitmap - PI.BitBlt(mDC, 0, 0, bounds.Width, bounds.Height, - gDC, bounds.X, bounds.Y, 0x00CC0020); - } - - // Select the font for use when drawing - var hFont = font.ToHfont(); - PI.SelectObject(mDC, hFont); - - // Get renderer for the correct state - var renderer = new VisualStyleRenderer(state == PaletteState.Normal - ? VisualStyleElement.Window.Caption.Active - : VisualStyleElement.Window.Caption.Inactive); - - // Create structures needed for theme drawing call - var textBounds = new PI.RECT - { - left = 0, - top = 0, - right = bounds.Right - bounds.Left, - bottom = bounds.Bottom - bounds.Top - }; - var dttOpts = new PI.DTTOPTS - { - dwSize = Marshal.SizeOf(typeof(PI.DTTOPTS)), - dwFlags = PI.DTT_COMPOSITED | PI.DTT_TEXTCOLOR, - crText = ColorTranslator.ToWin32(color) - }; - - // Always draw text centered - TextFormatFlags textFormat = TextFormatFlags.SingleLine | - TextFormatFlags.HorizontalCenter | - TextFormatFlags.VerticalCenter; - ////Seb | TextFormatFlags.EndEllipsis; - - - // Perform actual drawing - //PI.DrawThemeTextEx(renderer.Handle, - // mDC, 0, 0, - // text, -1, (int)StringFormatToFlags(sf), - // ref textBounds, ref dttOpts); - PI.DrawThemeTextEx(renderer.Handle, - mDC, 0, 0, - text, -1, (int)textFormat, - ref textBounds, ref dttOpts); - - // Copy to foreground - PI.BitBlt(gDC, - bounds.Left, bounds.Top, - bounds.Width, bounds.Height, - mDC, 0, 0, 0x00CC0020); - - // Dispose of allocated objects - PI.DeleteObject(hFont); - PI.DeleteObject(hDIB); - PI.DeleteDC(mDC); - } - catch - { - // ignored - } - finally - { - // Must remember to release the hDC - g?.ReleaseHdc(gDC); - } - } - private static StringFormat FlagsToStringFormat(TextFormatFlags flags) { var sf = new StringFormat(); diff --git a/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateTextMemento.cs b/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateTextMemento.cs index ae8e28fa9..b53414e8d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateTextMemento.cs +++ b/Source/Krypton Components/Krypton.Toolkit/AccurateText/AccurateTextMemento.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,7 +37,7 @@ public class AccurateTextMemento : GlobalId, /// Drawing hint. /// Should the font be disposed. internal AccurateTextMemento(string text, - [DisallowNull] Font font, + [DisallowNull] Font? font, SizeF sizeF, StringFormat format, TextRenderingHint hint, // TODO: What was this supposed to be used for ? @@ -57,7 +57,7 @@ public void Dispose() { if (_disposeFont) { - Font.Dispose(); + Font?.Dispose(); } GC.SuppressFinalize(this); } @@ -73,7 +73,7 @@ public void Dispose() /// Gets the drawing font. ///
[DisallowNull] - public Font Font { get; set; } + public Font? Font { get; set; } /// /// Gets the pixel size of the text area. diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpec.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpec.cs index 6adfe2906..d045a18e6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpec.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpec.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -74,9 +74,9 @@ protected ButtonSpec() { _image = null; _toolTipImage = null; - _colorMap = Color.Empty; - _imageTransparentColor = Color.Empty; - _toolTipImageTransparentColor = Color.Empty; + _colorMap = GlobalStaticValues.EMPTY_COLOR; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; + _toolTipImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _text = string.Empty; _extraText = string.Empty; UniqueName = CommonHelper.UniqueString; @@ -147,25 +147,27 @@ public virtual object Clone() /// Gets a value indicating if all values are default. /// [Browsable(false)] - public virtual bool IsDefault => _imageStates.IsDefault && - (Image == null) && - (ToolTipImage == null) && - (ColorMap == Color.Empty) && - (ImageTransparentColor == Color.Empty) && - (ToolTipImageTransparentColor == Color.Empty) && - (Text == string.Empty) && - (ExtraText == string.Empty) && - (ToolTipTitle == string.Empty) && - (ToolTipBody == string.Empty) && - (ToolTipStyle == LabelStyle.ToolTip) && - (Style == PaletteButtonStyle.Inherit) && - (Orientation == PaletteButtonOrientation.Inherit) && - (Edge == PaletteRelativeEdgeAlign.Inherit) && - (ContextMenuStrip == null) && - AllowInheritImage && - AllowInheritText && - AllowInheritExtraText && - AllowInheritToolTipTitle; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public virtual bool IsDefault => !ShouldSerializeImageStates() && + !ShouldSerializeImage() && + !ShouldSerializeColorMap() && + !ShouldSerializeImageTransparentColor() && + !ShouldSerializeText() && + !ShouldSerializeExtraText() && + !ShouldSerializeToolTipImage() && + !ShouldSerializeToolTipImageTransparentColor() && + !ShouldSerializeToolTipTitle() && + !ShouldSerializeToolTipBody() && + !ShouldSerializeToolTipStyle() && + !ShouldSerializeToolTipShadow() && + !ShouldSerializeStyle() && + !ShouldSerializeOrientation() && + !ShouldSerializeEdge() && + (ContextMenuStrip == null) && + AllowInheritImage && + AllowInheritText && + AllowInheritExtraText && + AllowInheritToolTipTitle; #endregion @@ -189,9 +191,7 @@ public Image? Image } } } - private bool ShouldSerializeImage() => Image != null; - private void ResetImage() => Image = null; #endregion @@ -203,7 +203,7 @@ public Image? Image [Localizable(true)] [Category(@"Appearance")] [Description(@"Button image transparent color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageTransparentColor { get => _imageTransparentColor; @@ -217,11 +217,8 @@ public Color ImageTransparentColor } } } - - private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != Color.Empty; - - private void ResetImageTransparentColor() => ImageTransparentColor = Color.Empty; - + private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != GlobalStaticValues.EMPTY_COLOR; + private void ResetImageTransparentColor() => ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; #endregion #region ImageStates @@ -232,9 +229,7 @@ public Color ImageTransparentColor [Description(@"State specific images for the button.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ButtonImageStates ImageStates => _imageStates; - private bool ShouldSerializeImageStates() => !_imageStates.IsDefault; - #endregion #region Text @@ -258,9 +253,7 @@ public string Text } } } - private bool ShouldSerializeText() => Text != string.Empty; - private void ResetText() => Text = string.Empty; #endregion @@ -285,11 +278,8 @@ public string ExtraText } } } - private bool ShouldSerializeExtraText() => ExtraText != string.Empty; - private void ResetExtraText() => ExtraText = string.Empty; - #endregion #region ToolTipImage @@ -313,11 +303,8 @@ public Image? ToolTipImage } } } - private bool ShouldSerializeToolTipImage() => ToolTipImage != null; - private void ResetToolTipImage() => ToolTipImage = null; - #endregion #region ToolTipImageTransparentColor @@ -327,7 +314,7 @@ public Image? ToolTipImage [Localizable(true)] [Category(@"ToolTip")] [Description(@"Button image transparent color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolTipImageTransparentColor { get => _toolTipImageTransparentColor; @@ -341,11 +328,8 @@ public Color ToolTipImageTransparentColor } } } - - private bool ShouldSerializeToolTipImageTransparentColor() => ToolTipImageTransparentColor != Color.Empty; - - private void ResetToolTipImageTransparentColor() => ToolTipImageTransparentColor = Color.Empty; - + private bool ShouldSerializeToolTipImageTransparentColor() => ToolTipImageTransparentColor != GlobalStaticValues.EMPTY_COLOR; + private void ResetToolTipImageTransparentColor() => ToolTipImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolTipTitle @@ -370,11 +354,8 @@ public string ToolTipTitle } } } - private bool ShouldSerializeToolTipTitle() => ToolTipTitle != string.Empty; - private void ResetToolTipTitle() => ToolTipTitle = string.Empty; - #endregion #region ToolTipBody @@ -399,11 +380,8 @@ public string ToolTipBody } } } - private bool ShouldSerializeToolTipBody() => ToolTipBody != string.Empty; - private void ResetToolTipBody() => ToolTipBody = string.Empty; - #endregion #region ToolTipStyle @@ -414,15 +392,11 @@ public string ToolTipBody [Description(@"Button tooltip label style.")] [DefaultValue(LabelStyle.ToolTip)] public LabelStyle ToolTipStyle { get; set; } - private bool ShouldSerializeToolTipStyle() => ToolTipStyle != LabelStyle.ToolTip; - private void ResetToolTipStyle() => ToolTipStyle = LabelStyle.ToolTip; - #endregion #region ToolTipShadow - /// /// Gets and sets the tooltip label style. /// @@ -430,11 +404,8 @@ public string ToolTipBody [Description(@"Button tooltip Shadow.")] [DefaultValue(true)] public bool ToolTipShadow { get; set; } = true; - private bool ShouldSerializeToolTipShadow() => !ToolTipShadow; - private void ResetToolTipShadow() => ToolTipShadow = true; - #endregion #region UniqueName @@ -444,12 +415,7 @@ public string ToolTipBody [Category(@"Data")] [Description(@"The unique name of the ButtonSpec.")] public string? UniqueName { get; set; } - - /// - /// Resets the UniqueName property to its default value. - /// - public void ResetUniqueName() => UniqueName = CommonHelper.UniqueString; - + private void ResetUniqueName() => UniqueName = CommonHelper.UniqueString; #endregion #region AllowInheritImage @@ -473,12 +439,7 @@ public bool AllowInheritImage } } } - - /// - /// Resets the AllowInheritImage property to its default value. - /// - public void ResetAllowInheritImage() => AllowInheritImage = true; - + private void ResetAllowInheritImage() => AllowInheritImage = true; #endregion #region AllowInheritText @@ -502,12 +463,7 @@ public bool AllowInheritText } } } - - /// - /// Resets the AllowInheritText property to its default value. - /// - public void ResetAllowInheritText() => AllowInheritText = true; - + private void ResetAllowInheritText() => AllowInheritText = true; #endregion #region AllowInheritExtraText @@ -531,12 +487,7 @@ public bool AllowInheritExtraText } } } - - /// - /// Resets the AllowInheritExtraText property to its default value. - /// - public void ResetAllowInheritExtraText() => AllowInheritExtraText = true; - + private void ResetAllowInheritExtraText() => AllowInheritExtraText = true; #endregion #region AllowInheritToolTipTitle @@ -560,12 +511,7 @@ public bool AllowInheritToolTipTitle } } } - - /// - /// Resets the AllowInheritToolTipTitle property to its default value. - /// - public void ResetAllowInheritToolTipTitle() => AllowInheritToolTipTitle = true; - + private void ResetAllowInheritToolTipTitle() => AllowInheritToolTipTitle = true; #endregion #region AllowComponent @@ -575,7 +521,6 @@ public bool AllowInheritToolTipTitle [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] public virtual bool AllowComponent => true; - #endregion #region ColorMap @@ -585,7 +530,7 @@ public bool AllowInheritToolTipTitle [Localizable(true)] [Category(@"Appearance")] [Description(@"Image color to remap to container foreground.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ColorMap { get => _colorMap; @@ -599,14 +544,8 @@ public Color ColorMap } } } - - private bool ShouldSerializeColorMap() => ColorMap != Color.Empty; - - /// - /// Resets the ColorMap property to its default value. - /// - public void ResetColorMap() => ColorMap = Color.Empty; - + private bool ShouldSerializeColorMap() => ColorMap != GlobalStaticValues.EMPTY_COLOR; + private void ResetColorMap() => ColorMap = GlobalStaticValues.EMPTY_COLOR; #endregion #region Style @@ -630,12 +569,7 @@ public PaletteButtonStyle Style } } } - private bool ShouldSerializeStyle() => Style != PaletteButtonStyle.Inherit; - - /// - /// Resets the Style property to its default value. - /// private void ResetStyle() => Style = PaletteButtonStyle.Inherit; #endregion @@ -660,14 +594,8 @@ public PaletteButtonOrientation Orientation } } } - private bool ShouldSerializeOrientation() => Orientation != PaletteButtonOrientation.Inherit; - - /// - /// Resets the Orientation property to its default value. - /// - public void ResetOrientation() => Orientation = PaletteButtonOrientation.Inherit; - + private void ResetOrientation() => Orientation = PaletteButtonOrientation.Inherit; #endregion #region Edge @@ -691,11 +619,8 @@ public PaletteRelativeEdgeAlign Edge } } } - private bool ShouldSerializeEdge() => Edge != PaletteRelativeEdgeAlign.Inherit; - private void ResetEdge() => Edge = PaletteRelativeEdgeAlign.Inherit; - #endregion #region ContextMenuStrip @@ -708,7 +633,6 @@ public PaletteRelativeEdgeAlign Edge [RefreshProperties(RefreshProperties.All)] [DefaultValue(null)] public ContextMenuStrip? ContextMenuStrip { get; set; } - #endregion #region KryptonContextMenu @@ -721,7 +645,6 @@ public PaletteRelativeEdgeAlign Edge [RefreshProperties(RefreshProperties.All)] [DefaultValue(null)] public KryptonContextMenu? KryptonContextMenu { get; set; } - #endregion #region KryptonCommand @@ -767,7 +690,6 @@ public virtual KryptonCommand? KryptonCommand [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public object? Owner { get; set; } - #endregion #region Tag @@ -779,7 +701,6 @@ public virtual KryptonCommand? KryptonCommand [TypeConverter(typeof(StringConverter))] [DefaultValue(null)] public object? Tag { get; set; } - #endregion #region CopyFrom @@ -817,7 +738,6 @@ public virtual void CopyFrom(ButtonSpec source) ///
/// An EventArgs containing the event data. public void PerformClick(EventArgs e) => OnClick(e); - #endregion #region IButtonSpecValues @@ -867,9 +787,9 @@ public virtual Color GetImageTransparentColor(PaletteBase? palette) return KryptonCommand.ImageTransparentColor; } - return ImageTransparentColor != Color.Empty + return ImageTransparentColor != GlobalStaticValues.EMPTY_COLOR ? ImageTransparentColor - : palette?.GetButtonSpecImageTransparentColor(ProtectedType) ?? Color.Empty; + : palette?.GetButtonSpecImageTransparentColor(ProtectedType) ?? GlobalStaticValues.EMPTY_COLOR; } /// @@ -912,19 +832,19 @@ public virtual string GetLongText(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Tooltip title string. - public virtual string GetToolTipTitle(PaletteBase? palette) => !string.IsNullOrEmpty(ToolTipTitle) - || !AllowInheritToolTipTitle + public virtual string GetToolTipTitle(PaletteBase palette) => !string.IsNullOrEmpty(ToolTipTitle) + || !AllowInheritToolTipTitle ? ToolTipTitle - : palette?.GetButtonSpecToolTipTitle(ProtectedType) ?? string.Empty; + : palette.GetButtonSpecToolTipTitle(ProtectedType) ?? string.Empty; /// /// Gets the color to remap from the image to the container foreground. /// /// Palette to use for inheriting values. /// Color value. - public virtual Color GetColorMap(PaletteBase? palette) => ColorMap != Color.Empty - ? ColorMap - : palette?.GetButtonSpecColorMap(ProtectedType) ?? Color.Empty; + public virtual Color GetColorMap(PaletteBase? palette) => ColorMap != GlobalStaticValues.EMPTY_COLOR + ? ColorMap + : palette!.GetButtonSpecColorMap(ProtectedType); /// /// Gets the button style. @@ -967,19 +887,19 @@ public virtual RelativeEdgeAlign GetEdge(PaletteBase? palette) => /// /// Palette to use for inheriting values. /// Button enabled state. - public abstract ButtonEnabled GetEnabled(PaletteBase? palette); + public abstract ButtonEnabled GetEnabled(PaletteBase palette); /// /// Sets the current view associated with the button spec. /// /// View element reference. - public virtual void SetView(ViewBase? view) => _buttonSpecView = view; + public virtual void SetView(ViewBase view) => _buttonSpecView = view; /// /// Get the current view associated with the button spec. /// /// View element reference. - public virtual ViewBase? GetView() => _buttonSpecView; + public virtual ViewBase GetView() => _buttonSpecView!; /// /// Gets a value indicating if the associated view is enabled. @@ -992,7 +912,7 @@ public virtual RelativeEdgeAlign GetEdge(PaletteBase? palette) => /// /// Palette to use for inheriting values. /// Button visibility. - public abstract bool GetVisible(PaletteBase? palette); + public abstract bool GetVisible(PaletteBase palette); /// /// Gets the button checked state. @@ -1042,7 +962,7 @@ protected virtual void OnClick(EventArgs e) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -1071,11 +991,14 @@ protected RelativeEdgeAlign ConvertToRelativeEdgeAlign(PaletteRelativeEdgeAlign { case PaletteRelativeEdgeAlign.Near: return RelativeEdgeAlign.Near; + case PaletteRelativeEdgeAlign.Far: return RelativeEdgeAlign.Far; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(paletteRelativeEdgeAlign.ToString()); return RelativeEdgeAlign.Far; } } @@ -1091,17 +1014,23 @@ protected ButtonOrientation ConvertToButtonOrientation(PaletteButtonOrientation { case PaletteButtonOrientation.Auto: return ButtonOrientation.Auto; + case PaletteButtonOrientation.FixedBottom: return ButtonOrientation.FixedBottom; + case PaletteButtonOrientation.FixedLeft: return ButtonOrientation.FixedLeft; + case PaletteButtonOrientation.FixedRight: return ButtonOrientation.FixedRight; + case PaletteButtonOrientation.FixedTop: return ButtonOrientation.FixedTop; + default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(paletteButtonOrientation.ToString()); return ButtonOrientation.Auto; } } @@ -1150,8 +1079,9 @@ protected ButtonStyle ConvertToButtonStyle(PaletteButtonStyle? paletteButtonStyl case PaletteButtonStyle.Custom3: return ButtonStyle.Custom3; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(paletteButtonStyle.ToString()); return ButtonStyle.Standalone; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecAny.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecAny.cs index 68dc9de45..f5d33c866 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecAny.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecAny.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -61,10 +61,11 @@ public override object Clone() /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Visible && - (Enabled == ButtonEnabled.Container) && - (Checked == ButtonCheckState.NotCheckButton); + Visible && + (Enabled == ButtonEnabled.Container) && + (Checked == ButtonCheckState.NotCheckButton); #endregion @@ -167,7 +168,7 @@ public ButtonCheckState Checked ///
[Localizable(true)] [Category(@"Behavior")] - [Description(@"Defines if the button is checked or capable of being checked.")] + [Description(@"Displays a drop down arrow on the button.")] [RefreshProperties(RefreshProperties.All)] [DefaultValue(false)] public bool ShowDrop @@ -279,14 +280,14 @@ public void CopyFrom(ButtonSpecAny source) ///
/// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) => Visible; + public override bool GetVisible(PaletteBase palette) => Visible; /// /// Gets the button enabled state. /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => Enabled; + public override ButtonEnabled GetEnabled(PaletteBase palette) => Enabled; /// /// Gets the button checked state. @@ -330,7 +331,7 @@ protected override void OnButtonSpecPropertyChanged(string propertyName) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected override void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { base.OnCommandPropertyChanged(sender, e); diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCalendar.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCalendar.cs index acdbec895..db9ae10b3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCalendar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCalendar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -65,14 +65,14 @@ public ButtonSpecCalendar(ViewDrawMonth month, ///
/// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) => Visible; + public override bool GetVisible(PaletteBase palette) => Visible; /// /// Gets the button enabled state. /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => Enabled ? ButtonEnabled.Container : ButtonEnabled.False; + public override ButtonEnabled GetEnabled(PaletteBase palette) => Enabled ? ButtonEnabled.Container : ButtonEnabled.False; /// /// Gets the button checked state. diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCollection.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCollection.cs index 42fc0feb0..d59a2774f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCollection.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -210,7 +210,7 @@ public void Remove(object? value) => /// /// Object index. /// Object at specified index. - object IList.this[int index] + object? IList.this[int index] { get => _specs[index]; @@ -300,7 +300,7 @@ public T this[int index] /// T at specified index. public T? this[string uniqueName] { - get + get { // First priority is the UniqueName foreach (T bs in this.Where(bs => bs.UniqueName == uniqueName)) @@ -391,16 +391,16 @@ public bool Remove([DisallowNull] T item) Debug.Assert(item != null, nameof(item) + " != null"); // Cache the index of the button spec - var index = IndexOf(item); + var index = IndexOf(item!); // Generate before event - OnRemoving(new ButtonSpecEventArgs(item, index)); + OnRemoving(new ButtonSpecEventArgs(item!, index)); // Remove from the internal list - var ret = _specs.Remove(item); + var ret = _specs.Remove(item!); // Generate after event - OnRemoved(new ButtonSpecEventArgs(item, index)); + OnRemoved(new ButtonSpecEventArgs(item!, index)); return ret; } diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormFixed.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormFixed.cs index 5034c6c65..4096e7e4d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormFixed.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormFixed.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowClose.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowClose.cs index 40b5aa23b..afc9c6efc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowClose.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowClose.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -60,15 +60,8 @@ public bool Enabled ///
/// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { - // We do not show if the custom chrome is combined with composition, - // in which case the form buttons are handled by the composition - if (KryptonForm is { ApplyComposition: true, ApplyCustomChrome: true }) - { - return false; - } - // Have all buttons been turned off? return KryptonForm is { ControlBox: true, CloseBox: true }; } @@ -78,7 +71,7 @@ public override bool GetVisible(PaletteBase? palette) ///
/// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => KryptonForm.CloseBox && Enabled ? ButtonEnabled.True : ButtonEnabled.False; + public override ButtonEnabled GetEnabled(PaletteBase palette) => KryptonForm.CloseBox && Enabled ? ButtonEnabled.True : ButtonEnabled.False; /// /// Gets the button checked state. @@ -106,7 +99,7 @@ protected override void OnClick(EventArgs e) { // Only if the mouse is still within the button bounds do we perform action var mea = (MouseEventArgs)e; - if (GetView()!.ClientRectangle.Contains(mea.Location)) + if (GetView().ClientRectangle.Contains(mea.Location)) { PropertyInfo pi = typeof(Form).GetProperty(nameof(CloseReason), BindingFlags.Instance | diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMax.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMax.cs index 537e643ee..de99f008d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMax.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMax.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,15 +34,8 @@ public ButtonSpecFormWindowMax(KryptonForm form) /// /// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { - // We do not show if the custom chrome is combined with composition, - // in which case the form buttons are handled by the composition - if (KryptonForm is { ApplyComposition: true, ApplyCustomChrome: true }) - { - return false; - } - // The maximize button is never present on tool windows switch (KryptonForm.FormBorderStyle) { @@ -58,7 +51,7 @@ public override bool GetVisible(PaletteBase? palette) } // Has the minimize/maximize buttons been turned off? - return KryptonForm.MinimizeBox || KryptonForm.MaximizeBox; + return KryptonForm.MaximizeBox || KryptonForm.MinimizeBox; } /// @@ -66,7 +59,7 @@ public override bool GetVisible(PaletteBase? palette) /// /// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => + public override ButtonEnabled GetEnabled(PaletteBase palette) => // Has the maximize buttons been turned off? KryptonForm.MaximizeBox ? ButtonEnabled.True : ButtonEnabled.False; @@ -96,7 +89,7 @@ protected override void OnClick(EventArgs e) { // Only if the mouse is still within the button bounds do we perform action var mea = (MouseEventArgs)e; - if (GetView()!.ClientRectangle.Contains(mea.Location)) + if (GetView().ClientRectangle.Contains(mea.Location)) { // Toggle between maximized and restored KryptonForm.SendSysCommand(KryptonForm.WindowState == FormWindowState.Maximized diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMin.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMin.cs index 45b10e897..0e337a875 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMin.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecFormWindowMin.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,15 +34,8 @@ public ButtonSpecFormWindowMin(KryptonForm form) ///
/// Palette to use for inheriting values. /// Button visibility. - public override bool GetVisible(PaletteBase? palette) + public override bool GetVisible(PaletteBase palette) { - // We do not show if the custom chrome is combined with composition, - // in which case the form buttons are handled by the composition - if (KryptonForm is { ApplyComposition: true, ApplyCustomChrome: true }) - { - return false; - } - // The minimize button is never present on tool windows switch (KryptonForm.FormBorderStyle) { @@ -66,7 +59,7 @@ public override bool GetVisible(PaletteBase? palette) ///
/// Palette to use for inheriting values. /// Button enabled state. - public override ButtonEnabled GetEnabled(PaletteBase? palette) => + public override ButtonEnabled GetEnabled(PaletteBase palette) => // Has the minimize buttons been turned off? !KryptonForm.MinimizeBox ? ButtonEnabled.False : ButtonEnabled.True; @@ -96,7 +89,7 @@ protected override void OnClick(EventArgs e) { // Only if the mouse is still within the button bounds do we perform action var mea = (MouseEventArgs)e; - if (GetView()!.ClientRectangle.Contains(mea.Location)) + if (GetView().ClientRectangle.Contains(mea.Location)) { // Toggle between minimized and restored KryptonForm.SendSysCommand(KryptonForm.WindowState == FormWindowState.Minimized diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecHeaderGroup.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecHeaderGroup.cs index 9859678b3..fa3426bcd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,8 +34,9 @@ public class ButtonSpecHeaderGroup : ButtonSpecAny /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - (HeaderLocation == HeaderLocation.PrimaryHeader); + (HeaderLocation == HeaderLocation.PrimaryHeader); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerBase.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerBase.cs index 020f67d0b..ef0a624ae 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerBase.cs @@ -5,11 +5,12 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion +// ReSharper disable RedundantNullableFlowAttribute namespace Krypton.Toolkit { /// @@ -18,8 +19,8 @@ namespace Krypton.Toolkit public abstract class ButtonSpecManagerBase : GlobalId { #region Type Definitions - internal class ButtonSpecLookup : Dictionary { } - internal class ListSpacers : List { } + internal class ButtonSpecLookup : Dictionary; + internal class ListSpacers : List; #endregion #region Instance Fields @@ -33,7 +34,7 @@ internal class ListSpacers : List { } private readonly PaletteMetricPadding[] _viewMetricPaddings; private readonly ListSpacers[] _viewSpacers; private readonly ButtonSpecLookup _specLookup; - private readonly GetToolStripRenderer _getRenderer; + private readonly GetToolStripRenderer? _getRenderer; #endregion @@ -51,34 +52,33 @@ internal class ListSpacers : List { } /// Array of target metrics for button padding. /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. - protected ButtonSpecManagerBase([DisallowNull] Control control, - [DisallowNull] PaletteRedirect? redirector, - ButtonSpecCollectionBase? variableSpecs, - ButtonSpecCollectionBase? fixedSpecs, - IPaletteMetric[] viewMetrics, - PaletteMetricInt[] viewMetricIntOutside, - PaletteMetricInt[] viewMetricIntInside, - PaletteMetricPadding[] viewMetricPaddings, - [DisallowNull] GetToolStripRenderer getRenderer, - NeedPaintHandler needPaint) + protected ButtonSpecManagerBase(Control control, + PaletteRedirect redirector, + ButtonSpecCollectionBase? variableSpecs, + ButtonSpecCollectionBase? fixedSpecs, + IPaletteMetric[] viewMetrics, + PaletteMetricInt[] viewMetricIntOutside, + PaletteMetricInt[] viewMetricIntInside, + PaletteMetricPadding[] viewMetricPaddings, + GetToolStripRenderer? getRenderer, + NeedPaintHandler needPaint) { - Debug.Assert(control != null); - Debug.Assert(redirector != null); - Debug.Assert(getRenderer != null); - - // Store the provided paint notification delegate - NeedPaint = needPaint; + Debug.Assert(control is not null); + // Disabled to remove the warning + //Debug.Assert(redirector is not null); + Debug.Assert(getRenderer is not null); // Remember references Control = control; - _redirector = redirector!; + _redirector = redirector; _variableSpecs = variableSpecs; _fixedSpecs = fixedSpecs; _viewMetrics = viewMetrics; _viewMetricIntOutside = viewMetricIntOutside; _viewMetricIntInside = viewMetricIntInside; _viewMetricPaddings = viewMetricPaddings; - _getRenderer = getRenderer!; + _getRenderer = getRenderer; + NeedPaint = needPaint; if (_viewMetrics != null) { @@ -153,7 +153,7 @@ public void Construct() PaletteMetricInt viewMetricIntOutside = _viewMetricIntOutside[i]; // Create storage for the spacers - _viewSpacers[i] = new ListSpacers(); + _viewSpacers[i] = []; // Always create the outside edge spacers var spacerL1 = new ViewLayoutMetricSpacer(viewMetric, viewMetricIntOutside); @@ -220,14 +220,7 @@ public void RecreateButtons() /// Requests that all the buttons have state refreshed. /// /// True if a state change was made. - public bool RefreshButtons() => RefreshButtons(false); - - /// - /// Requests that all the buttons have state refreshed. - /// - /// Composition value for the spec view. - /// True if a state change was made. - public bool RefreshButtons(bool composition) + public bool RefreshButtons() { var changed = false; @@ -239,7 +232,6 @@ public bool RefreshButtons(bool composition) changed |= buttonView.UpdateEnabled(); changed |= buttonView.UpdateChecked(); buttonView.UpdateShowDrop(); - buttonView.DrawButtonSpecOnComposition = composition; } return changed; @@ -413,7 +405,7 @@ public bool DesignerGetHitTest(Point pt) => /// Get a tool strip renderer appropriate for the hosting control. ///
/// - public ToolStripRenderer RenderToolStrip() => _getRenderer(); + public ToolStripRenderer? RenderToolStrip() => _getRenderer?.Invoke(); /// /// Requests a repaint and optional layout be performed. @@ -446,11 +438,10 @@ select specView.ButtonSpec /// /// Edge of buttons caller is interested in searching. /// ViewDrawButton reference; otherwise false. - public virtual ViewDrawButton? GetFirstVisibleViewButton(PaletteRelativeEdgeAlign align) => (from specView in _specLookup.Values - where specView.ViewCenter.Visible && specView.ViewButton.Enabled - where specView.ButtonSpec.Edge == align - select specView.ViewButton - ) + public virtual ViewDrawButton? GetFirstVisibleViewButton(PaletteRelativeEdgeAlign align) => (_specLookup.Values + .Where(specView => specView.ViewButton != null && specView.ViewCenter.Visible && specView.ViewButton.Enabled) + .Where(specView => specView.ButtonSpec.Edge == align) + .Select(specView => specView.ViewButton)) .FirstOrDefault(); /// @@ -561,7 +552,7 @@ select specView.ViewButton /// Base palette class. /// ButtonSpec instance. /// Palette redirector for the button spec instance. - public virtual PaletteRedirect CreateButtonSpecRemap(PaletteRedirect? redirector, + public virtual PaletteRedirect CreateButtonSpecRemap(PaletteRedirect redirector, [DisallowNull] ButtonSpec buttonSpec) => new ButtonSpecRemapByContentView(redirector, buttonSpec); @@ -652,7 +643,7 @@ protected virtual void ButtonSpecCreated(ButtonSpec buttonSpec, /// ButtonSpec instance. /// ButtonSpecView derived class. protected virtual ButtonSpecView CreateButtonSpecView([DisallowNull] PaletteRedirect redirector, - IPaletteMetric? viewPaletteMetric, + IPaletteMetric viewPaletteMetric, PaletteMetricPadding viewMetricPadding, ButtonSpec buttonSpec) => new ButtonSpecView(redirector, viewPaletteMetric, viewMetricPadding, this, buttonSpec); @@ -766,7 +757,7 @@ private void CreateFromCollection(ButtonSpecCollectionBase? specs, (_viewMetrics.Length > viewDockerIndex) && (_viewMetricPaddings.Length > viewDockerIndex)) { - IPaletteMetric? viewPaletteMetric = _viewMetrics[viewDockerIndex]; + IPaletteMetric viewPaletteMetric = _viewMetrics[viewDockerIndex]; PaletteMetricPadding viewMetricPadding = _viewMetricPaddings[viewDockerIndex]; // Create an instance to manage the individual button spec @@ -818,19 +809,19 @@ private void RemoveButtonSpec(ButtonSpec buttonSpec) } } - private void OnButtonSpecInserted(object sender, ButtonSpecEventArgs e) + private void OnButtonSpecInserted(object? sender, ButtonSpecEventArgs e) { RecreateAll(); PerformNeedPaint(true); } - private void OnButtonSpecRemoved(object sender, ButtonSpecEventArgs e) + private void OnButtonSpecRemoved(object? sender, ButtonSpecEventArgs e) { RecreateAll(); PerformNeedPaint(true); } - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -853,8 +844,9 @@ private int GetTargetDockerIndex(HeaderLocation location) case HeaderLocation.SecondaryHeader: return 1; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(location.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerDraw.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerDraw.cs index 6bb56ba88..4a94239da 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerDraw.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerDraw.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,10 +36,10 @@ public class ButtonSpecManagerDraw : ButtonSpecManagerBase /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. public ButtonSpecManagerDraw(Control control, - [DisallowNull] PaletteRedirect? redirector, + [DisallowNull] PaletteRedirect redirector, ButtonSpecCollectionBase? variableSpecs, ButtonSpecCollectionBase? fixedSpecs, - ViewDrawDocker[] viewDockers, + [DisallowNull] ViewDrawDocker[] viewDockers, IPaletteMetric[] viewMetrics, PaletteMetricInt[] viewMetricInt, PaletteMetricPadding[] viewMetricPaddings, @@ -66,7 +66,7 @@ public ButtonSpecManagerDraw(Control control, /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. public ButtonSpecManagerDraw(Control control, - [DisallowNull] PaletteRedirect? redirector, + [DisallowNull] PaletteRedirect redirector, ButtonSpecCollectionBase? variableSpecs, ButtonSpecCollectionBase? fixedSpecs, [DisallowNull] ViewDrawDocker[] viewDockers, @@ -81,7 +81,7 @@ public ButtonSpecManagerDraw(Control control, viewMetricPaddings, getRenderer, needPaint) { Debug.Assert(viewDockers != null); - Debug.Assert(viewDockers.Length == viewMetrics.Length); + Debug.Assert(viewDockers!.Length == viewMetrics.Length); Debug.Assert(viewDockers.Length == viewMetricPaddings.Length); // Remember references @@ -121,7 +121,7 @@ protected override int DockerIndex(ViewBase viewDocker) /// /// Index. /// View docker reference; otherwise null. - protected override ViewBase? IndexDocker(int i) => _viewDockers[i]; + protected override ViewBase IndexDocker(int i) => _viewDockers[i]; /// /// Gets the orientation of the docker at the specified index. @@ -141,15 +141,7 @@ protected override int DockerIndex(ViewBase viewDocker) ViewDrawDocker viewDocker = _viewDockers[i]; // Find the child that is used to fill docker - foreach (ViewBase child in viewDocker) - { - if (viewDocker.GetDock(child) == ViewDockStyle.Fill) - { - return child as ViewDrawContent; - } - } - - return null; + return (from child in viewDocker where viewDocker.GetDock(child) == ViewDockStyle.Fill select child as ViewDrawContent).FirstOrDefault(); } /// @@ -167,7 +159,7 @@ protected override void AddViewToDocker(int i, // Get the indexed docker ViewDrawDocker viewDocker = _viewDockers[i]; - // By default add to the end of the children + // By default, add to the end of the children var insertIndex = viewDocker.Count; // If using spacers, then insert before the first spacer diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerLayout.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerLayout.cs index b8019a3bc..b05e973d1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerLayout.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecManagerLayout.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,7 +36,7 @@ public class ButtonSpecManagerLayout : ButtonSpecManagerBase /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. public ButtonSpecManagerLayout(Control control, - [DisallowNull] PaletteRedirect? redirector, + PaletteRedirect redirector, ButtonSpecCollectionBase? variableSpecs, ButtonSpecCollectionBase? fixedSpecs, ViewLayoutDocker[] viewDockers, @@ -66,7 +66,7 @@ public ButtonSpecManagerLayout(Control control, /// Delegate for returning a tool strip renderer. /// Delegate for notifying paint requests. public ButtonSpecManagerLayout(Control control, - [DisallowNull] PaletteRedirect? redirector, + PaletteRedirect redirector, ButtonSpecCollectionBase? variableSpecs, ButtonSpecCollectionBase? fixedSpecs, ViewLayoutDocker[] viewDockers, diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentBase.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentBase.cs index 1c0d66f9e..be0fe0b8d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,12 +27,12 @@ public abstract class ButtonSpecRemapByContentBase : PaletteRedirect /// /// Initial palette target for redirection. /// Reference to button specification. - protected ButtonSpecRemapByContentBase(PaletteBase? target, + protected ButtonSpecRemapByContentBase(PaletteBase target, [DisallowNull] ButtonSpec buttonSpec) : base(target) { Debug.Assert(buttonSpec != null); - _buttonSpec = buttonSpec; + _buttonSpec = buttonSpec!; } #endregion @@ -63,7 +63,7 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette Color mapColor = OverrideImageColor(state); // If a map color provided then return is - return (mapColor != Color.Empty) && (PaletteContent != null) ? mapColor : base.GetContentImageColorMap(style, state); + return (mapColor != GlobalStaticValues.EMPTY_COLOR) && (PaletteContent != null) ? mapColor : base.GetContentImageColorMap(style, state); } #endregion @@ -80,7 +80,7 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS Color mapColor = OverrideImageColor(state); // If mapping occurring then return the target remap color - if ((mapColor != Color.Empty) && (PaletteContent != null)) + if ((mapColor != GlobalStaticValues.EMPTY_COLOR) && (PaletteContent != null)) { PaletteState getState = PaletteState; @@ -144,7 +144,7 @@ private Color OverrideImageColor(PaletteState state) // ReSharper restore RedundantBaseQualifier // If we are supposed to remap a color - if (mapColor != Color.Empty) + if (mapColor != GlobalStaticValues.EMPTY_COLOR) { // ReSharper disable RedundantBaseQualifier // Get the button style requested @@ -160,7 +160,7 @@ private Color OverrideImageColor(PaletteState state) } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } private bool OverrideTextColor(PaletteState state) diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentCache.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentCache.cs index 1c13452d0..710b8d2d2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentCache.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentCache.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class ButtonSpecRemapByContentCache : ButtonSpecRemapByContentBase /// /// Initial palette target for redirection. /// Reference to button specification. - public ButtonSpecRemapByContentCache(PaletteBase? target, + public ButtonSpecRemapByContentCache(PaletteBase target, ButtonSpec buttonSpec) : base(target, buttonSpec) { diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentView.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentView.cs index 7b64966dd..dd2807604 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentView.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecRemapByContentView.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class ButtonSpecRemapByContentView : ButtonSpecRemapByContentBase ///
/// Initial palette target for redirection. /// Reference to button specification. - public ButtonSpecRemapByContentView(PaletteBase? target, + public ButtonSpecRemapByContentView(PaletteBase target, [DisallowNull] ButtonSpec buttonSpec) : base(target, buttonSpec) { diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecToContent.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecToContent.cs index 34eb0f087..08257297f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecToContent.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecToContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class ButtonSpecToContent : IContentValues { #region Instance Fields private readonly ButtonSpec _buttonSpec; - private readonly PaletteBase? _palette; + private readonly PaletteBase _palette; #endregion #region Identity @@ -28,13 +28,13 @@ public class ButtonSpecToContent : IContentValues ///
/// Palette for sourcing information. /// Source button spec instance. - public ButtonSpecToContent([DisallowNull] PaletteBase? palette, + public ButtonSpecToContent([DisallowNull] PaletteBase palette, [DisallowNull] ButtonSpec buttonSpec) { Debug.Assert(palette != null); Debug.Assert(buttonSpec != null); - _palette = palette; - _buttonSpec = buttonSpec; + _palette = palette!; + _buttonSpec = buttonSpec!; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecView.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecView.cs index 4f5c7f14a..a39d47475 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecView.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecView.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ public class ButtonSpecView : GlobalId, /// Reference to owning manager. /// Access public ButtonSpecView([DisallowNull] PaletteRedirect redirector, - IPaletteMetric? paletteMetric, + IPaletteMetric paletteMetric, PaletteMetricPadding metricPadding, [DisallowNull] ButtonSpecManagerBase manager, [DisallowNull] ButtonSpec buttonSpec) @@ -55,7 +55,7 @@ public ButtonSpecView([DisallowNull] PaletteRedirect redirector, // Intercept calls from the button for color remapping and instead use // the button spec defined map and the container foreground color - RemapPalette = Manager.CreateButtonSpecRemap(redirector, ButtonSpec); + RemapPalette = Manager.CreateButtonSpecRemap(redirector!, ButtonSpec); // Use a redirector to get button values directly from palette _palette = new PaletteTripleRedirect(RemapPalette, @@ -126,21 +126,12 @@ public ButtonSpecView([DisallowNull] PaletteRedirect redirector, /// /// Gets access to the view centering that contains the button. /// - public ViewDrawButton? ViewButton { get; } + public ViewDrawButton ViewButton { get; } /// /// Gets access to the remapping palette. /// - public PaletteRedirect? RemapPalette { get; } - - /// - /// Gets and sets the composition setting for the button. - /// - public bool DrawButtonSpecOnComposition - { - get => ViewButton?.DrawButtonComposition ?? false; - set => ViewButton!.DrawButtonComposition = value; - } + public PaletteRedirect RemapPalette { get; } /// /// Requests a repaint and optional layout be performed. @@ -197,23 +188,21 @@ public bool UpdateEnabled() Debug.Assert(false); newDependent = null; newEnabled = false; + DebugTools.NotImplemented(ButtonSpec.GetEnabled(_redirector).ToString()); break; } // Only make change if the values have changed - if (ViewButton != null) + if (newEnabled != ViewButton.Enabled) { - if (newEnabled != ViewButton.Enabled) - { - ViewButton.Enabled = newEnabled; - changed = true; - } + ViewButton.Enabled = newEnabled; + changed = true; + } - if (newDependent != ViewButton.DependantEnabledState) - { - ViewButton.DependantEnabledState = newDependent; - changed = true; - } + if (newDependent != ViewButton.DependantEnabledState) + { + ViewButton.DependantEnabledState = newDependent; + changed = true; } return changed; @@ -241,11 +230,12 @@ public bool UpdateChecked() // Should never happen! Debug.Assert(false); newChecked = false; + DebugTools.NotImplemented(ButtonSpec.GetChecked(_redirector).ToString()); break; } // Only make change if the value has changed - if (ViewButton != null && newChecked != ViewButton.Checked) + if (newChecked != ViewButton.Checked) { ViewButton.Checked = newChecked; return true; @@ -261,8 +251,7 @@ public bool UpdateChecked() /// public void UpdateShowDrop() { - if (ButtonSpec is ButtonSpecAny buttonSpecAny - && ViewButton != null) + if (ButtonSpec is ButtonSpecAny buttonSpecAny) { ViewButton.DropDown = buttonSpecAny.ShowDrop; ViewButton.Splitter = buttonSpecAny.ShowDrop; @@ -278,7 +267,7 @@ public void Destruct() ButtonSpec.ButtonSpecPropertyChanged -= OnPropertyChanged; // Remove ButtonSpec/view association - ButtonSpec.SetView(null); + ButtonSpec.SetView(null!); // Remove all view element resources ViewCenter.Dispose(); @@ -320,7 +309,7 @@ public virtual ButtonSpecViewControllers CreateController(ViewDrawButton viewBut ///
/// Source of the event. /// An EventArgs that contains the event data. - protected virtual void OnFinishDelegate(object sender, EventArgs? e) => + protected virtual void OnFinishDelegate(object? sender, EventArgs? e) => // Ask the button to remove the fixed pressed appearance _controller?.RemoveFixed(); @@ -373,19 +362,16 @@ public string GetLongText() => #region Implementation - private void OnClick(object sender, MouseEventArgs e) + private void OnClick(object? sender, MouseEventArgs e) { var performFinishDelegate = true; // Never show a context menu in design mode if (!CommonHelper.DesignMode(Manager.Control)) { - var showMenu = false; - var performDefaultClick = true; - if (ButtonSpec is ButtonSpecAny { ShowDrop: true }) - { - showMenu = ViewButton?.SplitRectangle.Contains(e.Location) ?? false; - performDefaultClick = !showMenu; - } + // ButtonSpec's used to drop menu's if they had a context menu; + // BUT; Disable default action, if this is a drop button and it is clicked + bool performDefaultClick = !(ButtonSpec is ButtonSpecAny { ShowDrop: true } + && ViewButton.SplitRectangle.Contains(e.Location)); if (performDefaultClick) { @@ -393,45 +379,42 @@ private void OnClick(object sender, MouseEventArgs e) ButtonSpec.PerformClick(e); } - if (showMenu) + // Does the button spec define a krypton context menu? + if (ButtonSpec.KryptonContextMenu != null) { - // Does the button spec define a krypton context menu? - if ((ButtonSpec.KryptonContextMenu != null) && (ViewButton != null)) + performFinishDelegate = false; + // Convert from control coordinates to screen coordinates + Rectangle rect = ViewButton.ClientRectangle; + + // If the button spec is on the chrome titlebar then find position manually + Point pt = Manager.Control is Form form + ? new Point(form.Left + rect.Left, form.Top + rect.Bottom + 3) + : Manager.Control!.PointToScreen(new Point(rect.Left, rect.Bottom + 3)); + + // Show the context menu just below the view itself + ButtonSpec.KryptonContextMenu.Closed += OnKryptonContextMenuClosed; + if (!ButtonSpec.KryptonContextMenu.Show(ButtonSpec, pt)) { - performFinishDelegate = false; - // Convert from control coordinates to screen coordinates - Rectangle rect = ViewButton.ClientRectangle; - - // If the button spec is on the chrome titlebar then find position manually - Point pt = Manager.Control is Form - ? new Point(Manager.Control.Left + rect.Left, Manager.Control.Top + rect.Bottom + 3) - : Manager.Control!.PointToScreen(new Point(rect.Left, rect.Bottom + 3)); - - // Show the context menu just below the view itself - ButtonSpec.KryptonContextMenu.Closed += OnKryptonContextMenuClosed; - if (!ButtonSpec.KryptonContextMenu.Show(ButtonSpec, pt)) - { - // Menu not being shown, so clean up - ButtonSpec.KryptonContextMenu.Closed -= OnKryptonContextMenuClosed; - - // Not showing a context menu, so remove the fixed view immediately - _finishDelegate?.Invoke(this, EventArgs.Empty); - } + // Menu not being shown, so clean up + ButtonSpec.KryptonContextMenu.Closed -= OnKryptonContextMenuClosed; + + // Not showing a context menu, so remove the fixed view immediately + _finishDelegate?.Invoke(this, EventArgs.Empty); } - else if ((ButtonSpec.ContextMenuStrip != null) && (ViewButton != null)) - { - performFinishDelegate = false; - // Set the correct renderer for the menu strip - ButtonSpec.ContextMenuStrip.Renderer = Manager.RenderToolStrip(); + } + else if (ButtonSpec.ContextMenuStrip != null) + { + performFinishDelegate = false; + // Set the correct renderer for the menu strip + ButtonSpec.ContextMenuStrip.Renderer = Manager.RenderToolStrip(); - // Convert from control coordinates to screen coordinates - Rectangle rect = ViewButton.ClientRectangle; - Point pt = Manager.Control!.PointToScreen(new Point(rect.Left, rect.Bottom + 3)); + // Convert from control coordinates to screen coordinates + Rectangle rect = ViewButton.ClientRectangle; + Point pt = Manager.Control!.PointToScreen(new Point(rect.Left, rect.Bottom + 3)); - // Show the context menu just below the view itself - VisualPopupManager.Singleton.ShowContextMenuStrip(ButtonSpec.ContextMenuStrip, pt, - _finishDelegate); - } + // Show the context menu just below the view itself + VisualPopupManager.Singleton.ShowContextMenuStrip(ButtonSpec.ContextMenuStrip, pt, + _finishDelegate); } } @@ -442,10 +425,10 @@ private void OnClick(object sender, MouseEventArgs e) } } - private void OnKryptonContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) + private void OnKryptonContextMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) { - // Unhook from context menu event so it could garbage collected in the future - var kcm = (KryptonContextMenu)sender; + // Unhook from context menu event, so that it can garbage collected in the future + var kcm = sender as KryptonContextMenu ?? throw new ArgumentNullException(nameof(sender)); kcm.Closed -= OnKryptonContextMenuClosed; // Remove the fixed button appearance @@ -454,7 +437,7 @@ private void OnKryptonContextMenuClosed(object sender, ToolStripDropDownClosedEv private void OnNeedPaint(object? sender, NeedLayoutEventArgs e) => PerformNeedPaint(e.NeedLayout); - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { diff --git a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecViewControllers.cs b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecViewControllers.cs index 173e36e11..0c538f0ee 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecViewControllers.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ButtonSpec/ButtonSpecViewControllers.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckBox.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckBox.cs index 8a0528975..7073feda3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,6 @@ public class KryptonContextMenuCheckBox : KryptonContextMenuItemBase private bool _autoClose; private bool _checked; private bool _enabled; - private string _text; private string? _extraText; private Image? _image; private Color _imageTransparentColor; @@ -83,7 +82,7 @@ public KryptonContextMenuCheckBox(string initialText) _text = initialText; _extraText = string.Empty; _image = null; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _checkState = CheckState.Unchecked; _checked = false; _threeState = false; @@ -167,7 +166,7 @@ public bool AutoClose { get => _autoClose; - set + set { if (_autoClose != value) { @@ -185,18 +184,10 @@ public bool AutoClose [Description(@"Main check box text.")] [DefaultValue(nameof(CheckBox))] [Localizable(true)] - public string Text + public override string Text { - get => _text; - - set - { - if (_text != value) - { - _text = value; - OnPropertyChanged(new PropertyChangedEventArgs(nameof(Text))); - } - } + get => base.Text; + set => base.Text = value; } /// @@ -212,7 +203,7 @@ public string ExtraText { get => _extraText ?? string.Empty; - set + set { if (_extraText != value) { @@ -234,7 +225,7 @@ public Image? Image { get => _image; - set + set { if (_image != value) { @@ -251,12 +242,11 @@ public Image? Image [Category(@"Appearance")] [Description(@"Check box image color to make transparent.")] [Localizable(true)] - [DisallowNull] public Color ImageTransparentColor { get => _imageTransparentColor; - set + set { if (_imageTransparentColor != value) { @@ -266,7 +256,7 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(Color.Empty); + private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(GlobalStaticValues.EMPTY_COLOR); /// /// Gets and sets the check box label style. @@ -316,7 +306,7 @@ public bool Enabled { get => _enabled; - set + set { if (_enabled != value) { @@ -399,7 +389,7 @@ public bool AutoCheck { get => _autoCheck; - set + set { if (_autoCheck != value) { @@ -420,7 +410,7 @@ public bool ThreeState { get => _threeState; - set + set { if (_threeState != value) { @@ -536,10 +526,10 @@ protected virtual void OnClick(EventArgs e) internal PaletteRedirectCheckBox? StateCheckBoxImages { get; } - internal void SetPaletteRedirect(PaletteRedirect? redirector) + internal void SetPaletteRedirect(PaletteRedirect redirector) { _stateCommonRedirect.SetRedirector(redirector); - StateCheckBoxImages.Target = redirector; + StateCheckBoxImages!.Target = redirector; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckButton.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckButton.cs index c39bbd1f5..9fd72c11e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCheckButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,6 @@ public class KryptonContextMenuCheckButton : KryptonContextMenuItemBase private bool _autoClose; private bool _checked; private bool _enabled; - private string _text; private string _extraText; private Image? _image; private Color _imageTransparentColor; @@ -73,7 +72,7 @@ public KryptonContextMenuCheckButton(string initialText) _text = initialText; _extraText = string.Empty; _image = null; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _checked = false; _autoCheck = false; _style = ButtonStyle.Standalone; @@ -179,18 +178,10 @@ public bool AutoClose [Description(@"Main check box text.")] [DefaultValue(nameof(CheckBox))] [Localizable(true)] - public string Text + public override string Text { - get => _text; - - set - { - if (_text != value) - { - _text = value; - OnPropertyChanged(new PropertyChangedEventArgs(nameof(Text))); - } - } + get => base.Text; + set => base.Text = value; } /// @@ -258,7 +249,7 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => (_imageTransparentColor == null) || !_imageTransparentColor.Equals(Color.Empty); + private bool ShouldSerializeImageTransparentColor() => (_imageTransparentColor == null) || !_imageTransparentColor.Equals(GlobalStaticValues.EMPTY_COLOR); /// /// Gets and sets the check button style. @@ -511,7 +502,7 @@ protected virtual void OnClick(EventArgs e) internal PaletteTripleOverride OverridePressed { get; } - internal void SetPaletteRedirect(PaletteRedirect? redirector) + internal void SetPaletteRedirect(PaletteRedirect redirector) { StateCommon.SetRedirector(redirector); OverrideFocus.SetRedirector(redirector); diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCollections.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCollections.cs index c38ca3672..cffa02799 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCollections.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuCollections.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,16 +19,19 @@ namespace Krypton.Toolkit public class KryptonContextMenuCollection : TypedRestrictCollection { #region Static Fields - private static readonly Type[] _types = { typeof(KryptonContextMenuItems), - typeof(KryptonContextMenuSeparator), - typeof(KryptonContextMenuHeading), - typeof(KryptonContextMenuLinkLabel), - typeof(KryptonContextMenuCheckBox), - typeof(KryptonContextMenuCheckButton), - typeof(KryptonContextMenuRadioButton), - typeof(KryptonContextMenuColorColumns), - typeof(KryptonContextMenuMonthCalendar), - typeof(KryptonContextMenuImageSelect)}; + private static readonly Type[] _types = [ + typeof(KryptonContextMenuItems), + typeof(KryptonContextMenuItem), + typeof(KryptonContextMenuSeparator), + typeof(KryptonContextMenuHeading), + typeof(KryptonContextMenuLinkLabel), + typeof(KryptonContextMenuCheckBox), + typeof(KryptonContextMenuCheckButton), + typeof(KryptonContextMenuRadioButton), + typeof(KryptonContextMenuColorColumns), + typeof(KryptonContextMenuMonthCalendar), + typeof(KryptonContextMenuImageSelect) + ]; #endregion #region Restrict @@ -137,7 +140,7 @@ protected override void OnRemoving(TypedCollectionEventArgs { #region Static Fields - private static readonly Type[] _types = { typeof(KryptonContextMenuItem), - typeof(KryptonContextMenuSeparator), - typeof(KryptonContextMenuHeading) }; + private static readonly Type[] _types = + [ + typeof(KryptonContextMenuItems), + typeof(KryptonContextMenuItem), + typeof(KryptonContextMenuSeparator), + typeof(KryptonContextMenuHeading), + typeof(KryptonContextMenuLinkLabel), + typeof(KryptonContextMenuCheckBox), + typeof(KryptonContextMenuCheckButton), + typeof(KryptonContextMenuRadioButton), + typeof(KryptonContextMenuColorColumns), + typeof(KryptonContextMenuMonthCalendar), + typeof(KryptonContextMenuImageSelect) + ]; #endregion #region Restrict diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuColorColumns.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuColorColumns.cs index c0cdad971..3f159b362 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuColorColumns.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuColorColumns.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,48 +27,73 @@ public class KryptonContextMenuColorColumns : KryptonContextMenuItemBase private static readonly Color[][] _noneScheme = Array.Empty(); - private static readonly Color[][] _mono2Scheme = { new[] { Color.White }, - new[] { Color.Black } }; - - private static readonly Color[][] _mono8Scheme = { new[] { Color.White }, - new[] { Color.Silver }, - new[] { Color.FromArgb(160, 160, 160) }, - new[] { Color.Gray }, - new[] { Color.FromArgb( 96, 96, 96) }, - new[] { Color.FromArgb( 64, 64, 64) }, - new[] { Color.FromArgb( 32, 32, 32) }, - new[] { Color.Black }}; - - private static readonly Color[][] _basic16Scheme = { new[] { Color.White, Color.Black }, - new[] { Color.Silver, Color.Gray }, - new[] { Color.Red, Color.Maroon }, - new[] { Color.Yellow, Color.Olive }, - new[] { Color.Lime, Color.Green }, - new[] { Color.Cyan, Color.Teal }, - new[] { Color.Blue, Color.Navy }, - new[] { Color.Fuchsia, Color.Purple } }; - - private static readonly Color[][] _officeStandardScheme = { new[] { Color.FromArgb(192, 0, 0) }, - new[] { Color.Red }, - new[] { Color.FromArgb(255, 192, 0) }, - new[] { Color.Yellow }, - new[] { Color.FromArgb(146, 208, 80) }, - new[] { Color.FromArgb( 0, 176, 80) }, - new[] { Color.FromArgb( 0, 176, 240) }, - new[] { Color.FromArgb( 0, 112, 192) }, - new[] { Color.FromArgb( 0, 32, 96) }, - new[] { Color.FromArgb(112, 48, 160) } }; + private static readonly Color[][] _mono2Scheme = + [ + [Color.White], + [Color.Black] + ]; + + private static readonly Color[][] _mono8Scheme = + [ + [Color.White], + [Color.Silver], + [Color.FromArgb(160, 160, 160)], + [Color.Gray], + [Color.FromArgb( 96, 96, 96)], + [Color.FromArgb( 64, 64, 64)], + [Color.FromArgb( 32, 32, 32)], + [Color.Black] + ]; + + private static readonly Color[][] _basic16Scheme = + [ + [Color.White, Color.Black], + [Color.Silver, Color.Gray], + [Color.Red, Color.Maroon], + [Color.Yellow, Color.Olive], + [Color.Lime, Color.Green], + [Color.Cyan, Color.Teal], + [Color.Blue, Color.Navy], + [Color.Fuchsia, Color.Purple] + ]; + + private static readonly Color[][] _officeStandardScheme = + [ + [Color.FromArgb(192, 0, 0)], + [Color.Red], + [Color.FromArgb(255, 192, 0)], + [Color.Yellow], + [Color.FromArgb(146, 208, 80)], + [Color.FromArgb( 0, 176, 80)], + [Color.FromArgb( 0, 176, 240)], + [Color.FromArgb( 0, 112, 192)], + [Color.FromArgb( 0, 32, 96)], + [Color.FromArgb(112, 48, 160)] + ]; - private static readonly Color[][] _officeThemeScheme = { new[] { Color.White, Color.FromArgb(242, 242, 242), Color.FromArgb(216, 216, 216), Color.FromArgb(191, 191, 191), Color.FromArgb(165, 165, 165), Color.Gray }, - new[] { Color.Black, Color.FromArgb(127, 127, 127), Color.FromArgb( 89, 89, 89), Color.FromArgb( 63, 63, 63), Color.FromArgb( 38, 38, 38), Color.FromArgb( 12, 12, 12) }, - new[] { Color.FromArgb(238, 236, 225), Color.FromArgb(221, 217, 195), Color.FromArgb(196, 189, 151), Color.FromArgb(147, 137, 83), Color.FromArgb( 73, 68, 41), Color.FromArgb( 29, 27, 16) }, - new[] { Color.FromArgb( 31, 73, 125), Color.FromArgb(198, 217, 240), Color.FromArgb(141, 179, 226), Color.FromArgb( 84, 141, 212), Color.FromArgb( 23, 54, 93), Color.FromArgb( 15, 36, 62) }, - new[] { Color.FromArgb( 79, 129, 189), Color.FromArgb(219, 229, 241), Color.FromArgb(184, 204, 228), Color.FromArgb(149, 179, 215), Color.FromArgb( 54, 96, 146), Color.FromArgb( 36, 64, 97) }, - new[] { Color.FromArgb(192, 80, 77), Color.FromArgb(242, 220, 219), Color.FromArgb(229, 185, 183), Color.FromArgb(217, 150, 148), Color.FromArgb(149, 55, 52), Color.FromArgb( 99, 36, 35) }, - new[] { Color.FromArgb(155, 187, 89), Color.FromArgb(235, 241, 221), Color.FromArgb(215, 227, 188), Color.FromArgb(195, 214, 155), Color.FromArgb(118, 146, 60), Color.FromArgb( 79, 97, 40) }, - new[] { Color.FromArgb(128, 100, 162), Color.FromArgb(229, 224, 236), Color.FromArgb(204, 193, 217), Color.FromArgb(178, 162, 199), Color.FromArgb( 95, 73, 122), Color.FromArgb( 63, 49, 81) }, - new[] { Color.FromArgb( 75, 172, 198), Color.FromArgb(219, 238, 243), Color.FromArgb(183, 221, 232), Color.FromArgb(146, 205, 220), Color.FromArgb( 49, 133, 155), Color.FromArgb( 32, 88, 103) }, - new[] { Color.FromArgb(247, 150, 70), Color.FromArgb(253, 234, 218), Color.FromArgb(251, 213, 181), Color.FromArgb(250, 192, 143), Color.FromArgb(227, 108, 9), Color.FromArgb(151, 72, 6) } }; + private static readonly Color[][] _officeThemeScheme = + [ + [Color.White, Color.FromArgb(242, 242, 242), Color.FromArgb(216, 216, 216), Color.FromArgb(191, 191, 191), Color.FromArgb(165, 165, 165), Color.Gray + ], + [Color.Black, Color.FromArgb(127, 127, 127), Color.FromArgb( 89, 89, 89), Color.FromArgb( 63, 63, 63), Color.FromArgb( 38, 38, 38), Color.FromArgb( 12, 12, 12) + ], + [Color.FromArgb(238, 236, 225), Color.FromArgb(221, 217, 195), Color.FromArgb(196, 189, 151), Color.FromArgb(147, 137, 83), Color.FromArgb( 73, 68, 41), Color.FromArgb( 29, 27, 16) + ], + [Color.FromArgb( 31, 73, 125), Color.FromArgb(198, 217, 240), Color.FromArgb(141, 179, 226), Color.FromArgb( 84, 141, 212), Color.FromArgb( 23, 54, 93), Color.FromArgb( 15, 36, 62) + ], + [Color.FromArgb( 79, 129, 189), Color.FromArgb(219, 229, 241), Color.FromArgb(184, 204, 228), Color.FromArgb(149, 179, 215), Color.FromArgb( 54, 96, 146), Color.FromArgb( 36, 64, 97) + ], + [Color.FromArgb(192, 80, 77), Color.FromArgb(242, 220, 219), Color.FromArgb(229, 185, 183), Color.FromArgb(217, 150, 148), Color.FromArgb(149, 55, 52), Color.FromArgb( 99, 36, 35) + ], + [Color.FromArgb(155, 187, 89), Color.FromArgb(235, 241, 221), Color.FromArgb(215, 227, 188), Color.FromArgb(195, 214, 155), Color.FromArgb(118, 146, 60), Color.FromArgb( 79, 97, 40) + ], + [Color.FromArgb(128, 100, 162), Color.FromArgb(229, 224, 236), Color.FromArgb(204, 193, 217), Color.FromArgb(178, 162, 199), Color.FromArgb( 95, 73, 122), Color.FromArgb( 63, 49, 81) + ], + [Color.FromArgb( 75, 172, 198), Color.FromArgb(219, 238, 243), Color.FromArgb(183, 221, 232), Color.FromArgb(146, 205, 220), Color.FromArgb( 49, 133, 155), Color.FromArgb( 32, 88, 103) + ], + [Color.FromArgb(247, 150, 70), Color.FromArgb(253, 234, 218), Color.FromArgb(251, 213, 181), Color.FromArgb(250, 192, 143), Color.FromArgb(227, 108, 9), Color.FromArgb(151, 72, 6) + ] + ]; #endregion #region Instance Fields @@ -112,7 +137,7 @@ public KryptonContextMenuColorColumns(ColorScheme scheme) { // Default fields _autoClose = true; - _selectedColor = Color.Empty; + _selectedColor = GlobalStaticValues.EMPTY_COLOR; _groupNonFirstRows = true; _blockSize = new Size(13, 13); SetColorScheme(scheme); diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuComboBox.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuComboBox.cs index 6225d2a9c..74b5215a4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuComboBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuComboBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuHeading.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuHeading.cs index f997b9170..f3a05308f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuHeading.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuHeading.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,11 +24,10 @@ namespace Krypton.Toolkit public class KryptonContextMenuHeading : KryptonContextMenuItemBase { #region Instance Fields - private string _text; private string? _extraText; private Image? _image; private Color _imageTransparentColor; - private readonly PaletteRedirectTriple? _redirectHeading; + private readonly PaletteRedirectTriple _redirectHeading; #endregion /// @@ -55,10 +54,9 @@ public KryptonContextMenuHeading() public KryptonContextMenuHeading(string initialText) { // Default fields - _text = initialText; _extraText = string.Empty; _image = null; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; // Create the redirector that can get values from the krypton context menu _redirectHeading = new PaletteRedirectTriple(); @@ -141,18 +139,10 @@ public override ViewBase GenerateView(IContextMenuProvider provider, [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] [Localizable(true)] [DefaultValue(@"Heading")] - public string Text + public override string Text { - get => _text; - - set - { - if (_text != value) - { - _text = value; - OnPropertyChanged(new PropertyChangedEventArgs(nameof(Text))); - } - } + get => base.Text; + set => base.Text = value; } /// @@ -222,7 +212,7 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => (_imageTransparentColor == null) || !_imageTransparentColor.Equals(Color.Empty); + private bool ShouldSerializeImageTransparentColor() => (_imageTransparentColor == null) || !_imageTransparentColor.Equals(GlobalStaticValues.EMPTY_COLOR); /// /// Gets access to the header instance specific appearance values. diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuImageSelect.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuImageSelect.cs index 44f840504..d5bf6c021 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuImageSelect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuImageSelect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -146,7 +146,7 @@ public Padding Padding { get => _padding; - set + set { if (_padding != value) { @@ -336,8 +336,8 @@ internal int TrackingIndex { get => _trackingIndex; - set - { + set + { if (_trackingIndex != value) { _trackingIndex = value; @@ -352,7 +352,7 @@ internal int TrackingIndex #endregion #region Implementation - private void OnTrackingTick(object sender, EventArgs e) + private void OnTrackingTick(object? sender, EventArgs e) { // If no change in tracking index over last interval if (_trackingIndex == _cacheTrackingIndex) diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItem.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItem.cs index c43497fce..216ec9bb2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,6 @@ public class KryptonContextMenuItem : KryptonContextMenuItemBase private bool _showShortcutKeys; private bool _autoClose; private bool _largeKryptonCommandImage; - private string _text; private string _extraText; private string _shortcutKeyDisplayString; private Image? _image; @@ -150,11 +149,11 @@ public KryptonContextMenuItem(string initialText, _showShortcutKeys = true; _largeKryptonCommandImage = false; _extraText = string.Empty; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _shortcutKeys = shortcut; _shortcutKeyDisplayString = string.Empty; _checkState = CheckState.Unchecked; - Items = new KryptonContextMenuCollection(); + Items = []; // Create the common storage for palette override values _stateRedirect = new PaletteContextMenuItemStateRedirect(); @@ -231,18 +230,10 @@ public override ViewBase GenerateView(IContextMenuProvider provider, [DefaultValue(@"MenuItem")] [Localizable(true)] [Bindable(true)] - public string Text + public override string Text { - get => _text; - - set - { - if (_text != value) - { - _text = value; - OnPropertyChanged(new PropertyChangedEventArgs(nameof(Text))); - } - } + get => base.Text; + set => base.Text = value; } /// @@ -314,8 +305,8 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(Color.Empty); - private void ResetImageTransparentColor() => _imageTransparentColor = Color.Empty; + private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(GlobalStaticValues.EMPTY_COLOR); + private void ResetImageTransparentColor() => _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets and sets the shortcut key combination associated with the menu item. diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItemBase.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItemBase.cs index 1b9675bab..7465e78d5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItemBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItemBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,10 +20,11 @@ public abstract class KryptonContextMenuItemBase : Component, INotifyPropertyCha { #region Instance Fields + private protected string _text; private bool _visible; - private ToolTipValues _toolTipValues = new ToolTipValues(null); + private ToolTipValues _toolTipValues = new(null); private VisualPopupToolTip? _visualPopupToolTip; - private IContextMenuProvider _provider; + private IContextMenuProvider? _provider; #endregion #region Events @@ -48,6 +49,7 @@ public abstract class KryptonContextMenuItemBase : Component, INotifyPropertyCha /// protected KryptonContextMenuItemBase() { + _text = string.Empty; _visible = true; ToolTipManager = new ToolTipManager(_toolTipValues); ToolTipManager.ShowToolTip += OnShowToolTip; @@ -138,6 +140,25 @@ public bool Visible } } + /// + /// Gets and sets the standard menu item text. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual string Text + { + get => _text; + + set + { + if (_text != value) + { + _text = value; + OnPropertyChanged(new PropertyChangedEventArgs(nameof(Text))); + } + } + } + /// /// Gets access to the ToolTipValues content. /// @@ -181,9 +202,9 @@ public ToolTipValues ToolTipValues /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - internal ToolTipManager ToolTipManager { get; } + internal ToolTipManager? ToolTipManager { get; } - internal void OnShowToolTip(object sender, ToolTipEventArgs e) + internal void OnShowToolTip(object? sender, ToolTipEventArgs e) { //if (!IsDisposed) { @@ -219,29 +240,31 @@ internal void OnShowToolTip(object sender, ToolTipEventArgs e) _toolTipValues.Image = args.Icon; // Create the actual tooltip popup object - var renderer = _provider.ProviderRedirector.Target?.GetRenderer(); - _visualPopupToolTip = new VisualPopupToolTip(_provider.ProviderRedirector, - _toolTipValues, - renderer, - PaletteBackStyle.ControlToolTip, - PaletteBorderStyle.ControlToolTip, - CommonHelper.ContentStyleFromLabelStyle(_toolTipValues.ToolTipStyle), - _toolTipValues.ToolTipShadow); - - _visualPopupToolTip.Disposed += OnVisualPopupToolTipDisposed; - _visualPopupToolTip.ShowRelativeTo(e.Target, e.ControlMousePosition); + if (_provider != null) + { + var renderer = _provider.ProviderRedirector.Target!.GetRenderer(); + _visualPopupToolTip = new VisualPopupToolTip(_provider.ProviderRedirector, + _toolTipValues, + renderer, + PaletteBackStyle.ControlToolTip, + PaletteBorderStyle.ControlToolTip, + CommonHelper.ContentStyleFromLabelStyle(_toolTipValues.ToolTipStyle), + _toolTipValues.ToolTipShadow); + _visualPopupToolTip.Disposed += OnVisualPopupToolTipDisposed; + _visualPopupToolTip.ShowRelativeTo(e.Target, e.ControlMousePosition); + } } } } - internal void OnCancelToolTip(object sender, EventArgs e) => + internal void OnCancelToolTip(object? _, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - internal void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + internal void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItems.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItems.cs index 4267df9a2..7371500db 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItems.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuItems.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ public class KryptonContextMenuItems : KryptonContextMenuItemBase #region Instance Fields private bool _standardStyle; private bool _imageColumn; - private readonly PaletteRedirectDouble? _redirectImageColumn; + private readonly PaletteRedirectDouble _redirectImageColumn; #endregion #region Identity @@ -47,7 +47,7 @@ public KryptonContextMenuItems(KryptonContextMenuItemBase[]? children) // Default fields _standardStyle = true; _imageColumn = true; - Items = new KryptonContextMenuItemCollection(); + Items = []; // Add any initial set of item if (children != null) @@ -122,7 +122,7 @@ public override ViewBase GenerateView(IContextMenuProvider provider, [Category(@"Data")] [Description(@"Collection of standard menu items.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Editor(typeof(KryptonContextMenuItemCollectionEditor), typeof(UITypeEditor))] + [Editor(typeof(KryptonContextMenuCollectionEditor), typeof(UITypeEditor))] public KryptonContextMenuItemCollection Items { get; } /// @@ -147,7 +147,7 @@ public bool StandardStyle } /// - /// Gets and sets if the an image column is provided for background of images. + /// Gets and sets if the image column is provided for background of images. /// [KryptonPersist] [Category(@"Appearance")] @@ -181,7 +181,7 @@ public bool ImageColumn #endregion #region Internal - internal void SetPaletteRedirect(PaletteDoubleRedirect? redirector) => _redirectImageColumn?.SetRedirectStates(redirector, redirector); + internal void SetPaletteRedirect(PaletteDoubleRedirect redirector) => _redirectImageColumn?.SetRedirectStates(redirector, redirector); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuLinkLabel.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuLinkLabel.cs index 89c919ea1..a93d2d4d4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuLinkLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuLinkLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,7 +25,6 @@ public class KryptonContextMenuLinkLabel : KryptonContextMenuItemBase { #region Instance Fields private bool _autoClose; - private string _text; private string? _extraText; private Image? _image; private Color _imageTransparentColor; @@ -69,7 +68,7 @@ public KryptonContextMenuLinkLabel(string initialText) _text = initialText; _extraText = string.Empty; _image = null; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _style = LabelStyle.NormalPanel; _autoClose = true; @@ -240,18 +239,10 @@ public bool AutoClose [Description(@"Main link label text.")] [DefaultValue(nameof(LinkLabel))] [Localizable(true)] - public string Text + public override string Text { - get => _text; - - set - { - if (_text != value) - { - _text = value; - OnPropertyChanged(new PropertyChangedEventArgs(nameof(Text))); - } - } + get => base.Text; + set => base.Text = value; } /// @@ -320,7 +311,7 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(Color.Empty); + private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(GlobalStaticValues.EMPTY_COLOR); /// /// Gets access to the link label normal instance specific appearance values. @@ -426,7 +417,7 @@ protected virtual void OnClick(EventArgs e) internal PaletteContentInheritOverride OverridePressedFocus { get; } - internal void SetPaletteRedirect(PaletteRedirect? redirector) + internal void SetPaletteRedirect(PaletteRedirect redirector) { _stateNormalRedirect.SetRedirector(redirector); _stateVisitedRedirect.SetRedirector(redirector); diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuMonthCalendar.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuMonthCalendar.cs index acebf2186..502f80b2e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuMonthCalendar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuMonthCalendar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -116,9 +116,9 @@ public KryptonContextMenuMonthCalendar() _maxDate = DateTimePicker.MaximumDateTime; _maxSelectionCount = 7; AnnuallyBoldedDatesMask = new int[12]; - _annualDates = new DateTimeList(); - _monthlyDates = new DateTimeList(); - BoldedDatesList = new DateTimeList(); + _annualDates = []; + _monthlyDates = []; + BoldedDatesList = []; _today = DEFAULT_TODAY; _todayFormat = "d"; @@ -307,18 +307,14 @@ public int ScrollChange [KryptonPersist] [Category(@"Behavior")] [Description(@"Today's date.")] + [AllowNull] public DateTime TodayDate { get => _todayDate; set { - if (value == null) - { - value = DateTime.Now.Date; - } - - _todayDate = value; + _todayDate = value == null ? DateTime.Now.Date : value; OnPropertyChanged(new PropertyChangedEventArgs(nameof(TodayDate))); } } @@ -334,7 +330,7 @@ public DateTime TodayDate [Localizable(true)] [Description(@"Indicates which annual dates should be boldface.")] [AllowNull] - public DateTime[] AnnuallyBoldedDates + public DateTime[]? AnnuallyBoldedDates { get => _annualDates.ToArray(); @@ -371,7 +367,7 @@ public DateTime[] AnnuallyBoldedDates [Localizable(true)] [Description(@"Indicates which monthly dates should be boldface.")] [AllowNull] - public DateTime[] MonthlyBoldedDates + public DateTime[]? MonthlyBoldedDates { get => _monthlyDates.ToArray(); @@ -404,7 +400,7 @@ public DateTime[] MonthlyBoldedDates [Localizable(true)] [Description(@"Indicates which dates should be boldface.")] [AllowNull] - public DateTime[] BoldedDates + public DateTime[]? BoldedDates { get => BoldedDatesList.ToArray(); @@ -676,6 +672,7 @@ public string TodayFormat [Description(@"Text used as label for todays date.")] [DefaultValue(@"Today:")] [Localizable(true)] + [AllowNull] public string TodayText { get => _today; @@ -930,7 +927,7 @@ public ButtonStyle DayOfWeekStyle [Category(@"Visuals")] [Description(@"Overrides for defining common month calendar appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteMonthCalendarRedirect? StateCommon { get; } + public PaletteMonthCalendarRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -1295,7 +1292,7 @@ public void SetFocusOverride(bool focus) #endregion #region Internal - internal void SetPaletteRedirect(PaletteRedirect? redirector) + internal void SetPaletteRedirect(PaletteRedirect redirector) { StateCommon.SetRedirector(redirector); OverrideFocus.SetRedirector(redirector); diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuProgressBar.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuProgressBar.cs index 72706feca..ca17e8f62 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuProgressBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuProgressBar.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuRadioButton.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuRadioButton.cs index 4b4d8022f..8a6bdf2dc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuRadioButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,6 @@ public class KryptonContextMenuRadioButton : KryptonContextMenuItemBase private bool _autoClose; private bool _checked; private bool _enabled; - private string _text; private string? _extraText; private Image? _image; private Color _imageTransparentColor; @@ -74,7 +73,7 @@ public KryptonContextMenuRadioButton(string initialText) _text = initialText; _extraText = string.Empty; _image = null; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _checked = false; _autoCheck = true; _style = LabelStyle.NormalPanel; @@ -173,18 +172,10 @@ public bool AutoClose [Description(@"Main radio button text.")] [DefaultValue(nameof(RadioButton))] [Localizable(true)] - public string Text + public override string Text { - get => _text; - - set - { - if (_text != value) - { - _text = value; - OnPropertyChanged(new PropertyChangedEventArgs(nameof(Text))); - } - } + get => base.Text; + set => base.Text = value; } /// @@ -238,7 +229,6 @@ public Image? Image [Category(@"Appearance")] [Description(@"Radio button image color to make transparent.")] [Localizable(true)] - [DisallowNull] public Color ImageTransparentColor { get => _imageTransparentColor; @@ -253,7 +243,7 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(Color.Empty); + private bool ShouldSerializeImageTransparentColor() => !_imageTransparentColor.Equals(GlobalStaticValues.EMPTY_COLOR); /// /// Gets and sets the radio button label style. @@ -456,7 +446,7 @@ protected virtual void OnClick(EventArgs e) internal PaletteRedirectRadioButton StateRadioButtonImages { get; } - internal void SetPaletteRedirect(PaletteRedirect? redirector) + internal void SetPaletteRedirect(PaletteRedirect redirector) { _stateCommonRedirect.SetRedirector(redirector); StateRadioButtonImages.Target = redirector; diff --git a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuSeparator.cs b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuSeparator.cs index ad7fc2e53..c7907d576 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuSeparator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ContextMenu/KryptonContextMenuSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public class KryptonContextMenuSeparator : KryptonContextMenuItemBase { #region Instance Fields private bool _horizontal; - private readonly PaletteRedirectDouble? _redirectSeparator; + private readonly PaletteRedirectDouble _redirectSeparator; #endregion #region Identity @@ -98,7 +98,7 @@ public override ViewBase GenerateView(IContextMenuProvider provider, // Take up same space as the image column, so separator starts close to actual text var imageContent = new ViewDrawContent(provider.ProviderStateCommon.ItemImage.Content, - new FixedContentValue(null, null, null, Color.Empty), VisualOrientation.Top); + new FixedContentValue(null, null, null, GlobalStaticValues.EMPTY_COLOR), VisualOrientation.Top); var imageCanvas = new ViewDrawMenuImageCanvas(provider.ProviderStateCommon.ItemImage.Back, provider.ProviderStateCommon.ItemImage.Border, 0, true) { @@ -138,7 +138,7 @@ public bool Horizontal { get => _horizontal; - set + set { if (_horizontal != value) { @@ -162,7 +162,7 @@ public bool Horizontal #endregion #region Internal - internal void SetPaletteRedirect(PaletteDoubleRedirect? redirector) => _redirectSeparator.SetRedirectStates(redirector, redirector); + internal void SetPaletteRedirect(PaletteDoubleRedirect redirector) => _redirectSeparator?.SetRedirectStates(redirector, redirector); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/ButtonController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/ButtonController.cs index fd3c034e7..901d155d5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/ButtonController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/ButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,7 +44,7 @@ public class ButtonController : GlobalId, /// Occurs when the mouse is used to right click the target. /// public event MouseEventHandler? RightClick; - + /// /// Occurs when the mouse is used to left select the target. /// @@ -87,10 +87,13 @@ public class ButtonController : GlobalId, /// /// Target for state changes. /// Delegate for notifying paint requests. - public ButtonController([DisallowNull] ViewBase target, + public ButtonController(ViewBase target, NeedPaintHandler needPaint) { - Debug.Assert(target != null); + + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(target is not null); MousePoint = CommonHelper.NullPoint; SplitRectangle = CommonHelper.NullRectangle; @@ -98,7 +101,7 @@ public ButtonController([DisallowNull] ViewBase target, AllowDragging = false; _dragging = false; ClickOnDown = false; - Target = target; + Target = target!; Repeat = false; NeedPaint = needPaint; } @@ -286,67 +289,67 @@ public virtual bool MouseDown(Control c, Point pt, MouseButtons button) { // Only interested in left mouse pressing down case MouseButtons.Left: - { - // Capturing mouse input - Captured = true; - _draggingAttempt = false; + { + // Capturing mouse input + Captured = true; + _draggingAttempt = false; // Use event to discover the rectangle that causes dragging to begin var args = new ButtonDragRectangleEventArgs(pt); - OnButtonDragRectangle(args); - _dragRect = args.DragRect; - _preDragOffset = args.PreDragOffset; + OnButtonDragRectangle(args); + _dragRect = args.DragRect; + _preDragOffset = args.PreDragOffset; - if (!_fixedPressed) - { - // Update the visual state - UpdateTargetState(pt); - - // Do we become fixed in the pressed state until RemoveFixed is called? - if (BecomesFixed) + if (!_fixedPressed) { - _fixedPressed = true; - } + // Update the visual state + UpdateTargetState(pt); - // Indicate that the mouse wants to select the elment - OnMouseSelect(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); + // Do we become fixed in the pressed state until RemoveFixed is called? + if (BecomesFixed) + { + _fixedPressed = true; + } - // Generate a click event if we generate click on mouse down - if (ClickOnDown) - { - OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); + // Indicate that the mouse wants to select the elment + OnMouseSelect(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); - // If we need to perform click repeats then use a timer... - if (Repeat) + // Generate a click event if we generate click on mouse down + if (ClickOnDown) { - _repeatTimer = new System.Windows.Forms.Timer + OnClick(new MouseEventArgs(MouseButtons.Left, 1, pt.X, pt.Y, 0)); + + // If we need to perform click repeats then use a timer... + if (Repeat) { - Interval = SystemInformation.DoubleClickTime - }; - _repeatTimer.Tick += OnRepeatTimer; - _repeatTimer.Start(); + _repeatTimer = new System.Windows.Forms.Timer + { + Interval = SystemInformation.DoubleClickTime + }; + _repeatTimer.Tick += OnRepeatTimer; + _repeatTimer.Start(); + } } } - } - break; - } + break; + } case MouseButtons.Right: - { - if (!_fixedPressed) { - // Do we become fixed in the pressed state until RemoveFixed is called? - if (BecomesRightFixed) + if (!_fixedPressed) { - _fixedPressed = true; + // Do we become fixed in the pressed state until RemoveFixed is called? + if (BecomesRightFixed) + { + _fixedPressed = true; + } + + // Indicate the right mouse was used on the button + OnRightClick(new MouseEventArgs(MouseButtons.Right, 1, pt.X, pt.Y, 0)); } - // Indicate the right mouse was used on the button - OnRightClick(new MouseEventArgs(MouseButtons.Right, 1, pt.X, pt.Y, 0)); + break; } - - break; - } } } } @@ -457,7 +460,7 @@ public virtual void MouseLeave(Control c, ViewBase? next) if (!_fixedPressed) { // Not tracking the mouse means a null value - MousePoint = CommonHelper.NullPoint; + MousePoint = CommonHelper.NullPoint; // If leaving the view then cannot be capturing mouse input anymore Captured = false; @@ -600,7 +603,7 @@ public virtual bool KeyUp([DisallowNull] Control c, [DisallowNull] KeyEventArgs UpdateTargetState(c); } } - + return Captured; } #endregion @@ -633,7 +636,7 @@ public virtual void LostFocus([DisallowNull] Control c) if (Captured) { // Quit out of any dragging operation - if (_dragging) + if (_dragging) { // Do not release capture! OnDragQuit(); @@ -748,7 +751,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected virtual void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled @@ -829,7 +832,10 @@ protected virtual void UpdateTargetState(Point pt) protected virtual void OnDragStart(Point mousePt, Point offset, Control c) { // Convert point from client to screen coordinates - mousePt = Target.OwningControl.PointToScreen(mousePt); + if (Target.OwningControl != null) + { + mousePt = Target.OwningControl.PointToScreen(mousePt); + } var ce = new DragStartEventCancelArgs(mousePt, offset, c); DragStart?.Invoke(this, ce); @@ -847,7 +853,10 @@ protected virtual void OnDragMove(Point mousePt) if (DragMove != null) { // Convert point from client to screen coordinates - mousePt = Target.OwningControl.PointToScreen(mousePt); + if (Target.OwningControl != null) + { + mousePt = Target.OwningControl.PointToScreen(mousePt); + } DragMove(this, new PointEventArgs(mousePt)); } } @@ -862,7 +871,10 @@ protected virtual void OnDragEnd(Point mousePt) if (DragEnd != null) { // Convert point from client to screen coordinates - mousePt = Target.OwningControl.PointToScreen(mousePt); + if (Target.OwningControl != null) + { + mousePt = Target.OwningControl.PointToScreen(mousePt); + } DragEnd(this, new PointEventArgs(mousePt)); } } @@ -903,10 +915,10 @@ protected virtual void OnDragQuit() #endregion #region Implementation - private void OnRepeatTimer(object sender, EventArgs e) + private void OnRepeatTimer(object? sender, EventArgs e) { // Modify subsequent repeat timing - _t = (System.Windows.Forms.Timer)sender; + _t = sender as System.Windows.Forms.Timer ?? throw new ArgumentNullException(nameof(sender)); _t.Interval = Math.Max(SystemInformation.DoubleClickTime / 4, 100); OnClick(new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0)); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/CheckBoxController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/CheckBoxController.cs index b7f14a976..f75eafc70 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/CheckBoxController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/CheckBoxController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,19 +40,19 @@ public class CheckBoxController : GlobalId, /// Target for state changes. /// Top element for the check box control. /// Delegate for notifying paint requests. - public CheckBoxController([DisallowNull] ViewDrawCheckBox target, - [DisallowNull] ViewBase top, + public CheckBoxController(ViewDrawCheckBox target, + ViewBase top, NeedPaintHandler needPaint) { - Debug.Assert(target != null); - Debug.Assert(top != null); - - // Store the provided paint notification delegate - NeedPaint = needPaint; + Debug.Assert(target is not null); + Debug.Assert(top is not null); // Remember target for state changes - _target = target; - _top = top; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + _target = target!; + _top = top!; + NeedPaint = needPaint; } #endregion @@ -148,7 +148,7 @@ public virtual void MouseUp(Control c, Point pt, MouseButtons button) { // Only if check box is still pressed if (_target is { Pressed: true, Enabled: true }) - // Can only click if enabled + // Can only click if enabled { OnClick(EventArgs.Empty); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/ContextMenuController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/ContextMenuController.cs index bce466f68..2e4d5a559 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/ContextMenuController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/ContextMenuController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class ContextMenuController : GlobalId, IKeyController { #region Instance Fields - private readonly ViewContextMenuManager _viewManager; + private readonly ViewContextMenuManager? _viewManager; #endregion #region Identity @@ -27,7 +27,7 @@ public class ContextMenuController : GlobalId, /// Initialize a new instance of the ContextMenuController class. /// /// Owning view manager instance. - public ContextMenuController(ViewContextMenuManager viewManager) => _viewManager = viewManager; + public ContextMenuController(ViewContextMenuManager? viewManager) => _viewManager = viewManager; #endregion @@ -58,25 +58,25 @@ public virtual void KeyDown([DisallowNull] Control c, [DisallowNull] KeyEventArg switch (e.KeyCode) { case Keys.Tab: - _viewManager.KeyTab(e.Shift); + _viewManager?.KeyTab(e.Shift); break; case Keys.Home: - _viewManager.KeyHome(); + _viewManager?.KeyHome(); break; case Keys.End: - _viewManager.KeyEnd(); + _viewManager?.KeyEnd(); break; case Keys.Up: - _viewManager.KeyUp(); + _viewManager?.KeyUp(); break; case Keys.Down: - _viewManager.KeyDown(); + _viewManager?.KeyDown(); break; case Keys.Left: - _viewManager.KeyLeft(false); + _viewManager?.KeyLeft(false); break; case Keys.Right: - _viewManager.KeyRight(); + _viewManager?.KeyRight(); break; } } @@ -103,7 +103,7 @@ public virtual void KeyPress([DisallowNull] Control c, [DisallowNull] KeyPressEv throw new ArgumentNullException(nameof(e)); } - _viewManager.KeyMnemonic(e.KeyChar); + _viewManager?.KeyMnemonic(e.KeyChar); } /// diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/ControllerDefinitions.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/ControllerDefinitions.cs index 933b8dbce..16af639a4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/ControllerDefinitions.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/ControllerDefinitions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/LinkLabelController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/LinkLabelController.cs index 8766a20d8..7d4b7ad7f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/LinkLabelController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/LinkLabelController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -51,26 +51,27 @@ public class LinkLabelController : GlobalId, /// Palette to use in the pressed state. /// Override to update with the pressed state. /// Delegate for notifying paint requests. - public LinkLabelController([DisallowNull] ViewDrawContent target, + public LinkLabelController(ViewDrawContent target, IPaletteContent paletteDisabled, IPaletteContent paletteNormal, IPaletteContent paletteTracking, IPaletteContent palettePressed, PaletteContentInheritOverride pressed, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { - Debug.Assert(target != null); - - // Store the provided paint notification delegate - NeedPaint = needPaint; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(target is not null); // Remember target for state changes - _target = target; + _target = target!; _paletteDisabled = paletteDisabled; _paletteNormal = paletteNormal; _paletteTracking = paletteTracking; _palettePressed = palettePressed; _pressed = pressed; + // Store the provided paint notification delegate + NeedPaint = needPaint; // Default other properties _clickTime = new DateTime(); @@ -411,7 +412,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled @@ -466,8 +467,9 @@ protected virtual void UpdateTargetPalette() _target.SetPalette(_palettePressed); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_target.State.ToString()); break; } @@ -482,7 +484,7 @@ protected virtual void UpdateTargetPalette() protected virtual void OnClick(MouseEventArgs e) { // Find how long since the last click occurred - TimeSpan clickInterval = DateTime.Now - _clickTime; + TimeSpan clickInterval = DateTime.Now - _clickTime; // If less than the double click interval then ignore if (SystemInformation.DoubleClickTime < clickInterval.TotalMilliseconds) diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckBoxController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckBoxController.cs index c9db91080..6d647b634 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckBoxController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckBoxController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,19 +44,21 @@ internal class MenuCheckBoxController : GlobalId, /// Target for state changes. /// Drawing element that owns check box display. /// Delegate for notifying paint requests. - public MenuCheckBoxController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewBase target, - [DisallowNull] ViewDrawMenuCheckBox checkBox, - [DisallowNull] NeedPaintHandler needPaint) + public MenuCheckBoxController(ViewContextMenuManager viewManager, + ViewBase target, + ViewDrawMenuCheckBox checkBox, + NeedPaintHandler? needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(target != null); - Debug.Assert(checkBox != null); - Debug.Assert(needPaint != null); - - ViewManager = viewManager; - _target = target; - _menuCheckBox = checkBox; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(viewManager is not null); + Debug.Assert(target is not null); + Debug.Assert(checkBox is not null); + Debug.Assert(needPaint is not null); + + ViewManager = viewManager!; + _target = target!; + _menuCheckBox = checkBox!; NeedPaint = needPaint; } #endregion @@ -131,7 +133,7 @@ public void MnemonicActivate() public bool DoesStackedClientMouseDownBecomeCurrent(Point pt) => true; #endregion - + #region Mouse Notifications /// /// Mouse has entered the view. diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckButtonController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckButtonController.cs index a782d3e1c..4002cf3a5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckButtonController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuCheckButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,19 +44,21 @@ internal class MenuCheckButtonController : GlobalId, /// Target for state changes. /// Drawing element that owns check button display. /// Delegate for notifying paint requests. - public MenuCheckButtonController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewBase target, - [DisallowNull] ViewDrawMenuCheckButton checkButton, - [DisallowNull] NeedPaintHandler needPaint) + public MenuCheckButtonController(ViewContextMenuManager viewManager, + ViewBase target, + ViewDrawMenuCheckButton checkButton, + NeedPaintHandler? needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(target != null); - Debug.Assert(checkButton != null); - Debug.Assert(needPaint != null); - - ViewManager = viewManager; - _target = target; - _menuCheckButton = checkButton; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(viewManager is not null); + Debug.Assert(target is not null); + Debug.Assert(checkButton is not null); + Debug.Assert(needPaint is not null); + + ViewManager = viewManager!; + _target = target!; + _menuCheckButton = checkButton!; NeedPaint = needPaint; // Set initial display state @@ -134,7 +136,7 @@ public void MnemonicActivate() public bool DoesStackedClientMouseDownBecomeCurrent(Point pt) => true; #endregion - + #region Mouse Notifications /// /// Mouse has entered the view. diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuColorBlockController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuColorBlockController.cs index 431bd6943..5873af6e1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuColorBlockController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuColorBlockController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,19 +43,21 @@ internal class MenuColorBlockController : GlobalId, /// Target for state changes. /// Drawing element that owns color block display. /// Delegate for notifying paint requests. - public MenuColorBlockController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewBase target, - [DisallowNull] ViewDrawMenuColorBlock colorBlock, - [DisallowNull] NeedPaintHandler needPaint) + public MenuColorBlockController(ViewContextMenuManager viewManager, + ViewBase target, + ViewDrawMenuColorBlock colorBlock, + NeedPaintHandler needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(target != null); - Debug.Assert(colorBlock != null); - Debug.Assert(needPaint != null); - - ViewManager = viewManager; - _target = target; - _menuColorBlock = colorBlock; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(viewManager is not null); + Debug.Assert(target is not null); + Debug.Assert(colorBlock is not null); + Debug.Assert(needPaint is not null); + + ViewManager = viewManager!; + _target = target!; + _menuColorBlock = colorBlock!; NeedPaint = needPaint; // Set initial display state @@ -126,7 +128,7 @@ public void MnemonicActivate() public bool DoesStackedClientMouseDownBecomeCurrent(Point pt) => true; #endregion - + #region Mouse Notifications /// /// Mouse has entered the view. @@ -411,7 +413,7 @@ private void HighlightState() private void NormalState() { _highlight = false; - _menuColorBlock.KryptonContextMenuColorColumns.OnTrackingColor(new ColorEventArgs(Color.Empty)); + _menuColorBlock.KryptonContextMenuColorColumns.OnTrackingColor(new ColorEventArgs(GlobalStaticValues.EMPTY_COLOR)); UpdateTarget(); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuImageSelectController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuImageSelectController.cs index b0265a478..16cb92899 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuImageSelectController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuImageSelectController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -45,21 +45,23 @@ internal class MenuImageSelectController : GlobalId, /// Target for state changes. /// Reference to layout of the image items. /// Delegate for notifying paint requests. - public MenuImageSelectController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewDrawMenuImageSelectItem target, - [DisallowNull] ViewLayoutMenuItemSelect layout, - [DisallowNull] NeedPaintHandler needPaint) + public MenuImageSelectController(ViewContextMenuManager viewManager, + ViewDrawMenuImageSelectItem target, + ViewLayoutMenuItemSelect layout, + NeedPaintHandler? needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(target != null); - Debug.Assert(layout != null); - Debug.Assert(needPaint != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(viewManager is not null); + Debug.Assert(target is not null); + Debug.Assert(layout is not null); + Debug.Assert(needPaint is not null); MousePoint = CommonHelper.NullPoint; - _viewManager = viewManager; - _target = target; - _layout = layout; - NeedPaint = needPaint; + _viewManager = viewManager!; + _target = target!; + _layout = layout!; + NeedPaint = needPaint!; } #endregion @@ -259,7 +261,7 @@ public virtual void MouseLeave(Control c, ViewBase? next) _mouseOver = false; // Not tracking the mouse means a null value - MousePoint = CommonHelper.NullPoint; + MousePoint = CommonHelper.NullPoint; // If leaving the view then cannot be capturing mouse input anymore Captured = false; @@ -478,7 +480,7 @@ protected void UpdateTargetState(Control c) /// Mouse point. protected virtual void UpdateTargetState(Point pt) { - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState newState; // If the button is disabled then show as disabled diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuItemController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuItemController.cs index 20c12f207..edcfe6c65 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuItemController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuItemController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,16 +32,18 @@ internal class MenuItemController : GlobalId, /// Owning view manager instance. /// Target menu item view element. /// Delegate for notifying paint requests. - public MenuItemController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewDrawMenuItem menuItem, - [DisallowNull] NeedPaintHandler needPaint) + public MenuItemController(ViewContextMenuManager viewManager, + ViewDrawMenuItem menuItem, + NeedPaintHandler? needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(menuItem != null); - Debug.Assert(needPaint != null); - - ViewManager = viewManager; - _menuItem = menuItem; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(viewManager is not null); + Debug.Assert(menuItem is not null); + Debug.Assert(needPaint is not null); + + ViewManager = viewManager!; + _menuItem = menuItem!; NeedPaint = needPaint; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuLinkLabelController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuLinkLabelController.cs index 12519e265..11eb607ed 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuLinkLabelController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuLinkLabelController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,19 +44,21 @@ internal class MenuLinkLabelController : GlobalId, /// Target for state changes. /// Drawing element that owns link label display. /// Delegate for notifying paint requests. - public MenuLinkLabelController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewDrawContent target, - [DisallowNull] ViewDrawMenuLinkLabel linkLabel, - [DisallowNull] NeedPaintHandler needPaint) + public MenuLinkLabelController(ViewContextMenuManager viewManager, + ViewDrawContent target, + ViewDrawMenuLinkLabel linkLabel, + NeedPaintHandler? needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(target != null); - Debug.Assert(linkLabel != null); - Debug.Assert(needPaint != null); - - ViewManager = viewManager; - _target = target; - _menuLinkLabel = linkLabel; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(viewManager is not null); + Debug.Assert(target is not null); + Debug.Assert(linkLabel is not null); + Debug.Assert(needPaint is not null); + + ViewManager = viewManager!; + _target = target!; + _menuLinkLabel = linkLabel!; NeedPaint = needPaint; } #endregion @@ -128,7 +130,7 @@ public void MnemonicActivate() public bool DoesStackedClientMouseDownBecomeCurrent(Point pt) => true; #endregion - + #region Mouse Notifications /// /// Mouse has entered the view. @@ -382,7 +384,7 @@ private void PressMenuLinkLabel(bool keyboard) { if (keyboard) { - _target.ElementState = PaletteState.Pressed; + _target.ElementState = PaletteState.Pressed; _menuLinkLabel.Pressed = true; PerformNeedPaint(); Application.DoEvents(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuRadioButtonController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuRadioButtonController.cs index a7113b209..82f5e80e8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MenuRadioButtonController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MenuRadioButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,19 +44,21 @@ internal class MenuRadioButtonController : GlobalId, /// Target for state changes. /// Drawing element that owns radio button display. /// Delegate for notifying paint requests. - public MenuRadioButtonController([DisallowNull] ViewContextMenuManager viewManager, - [DisallowNull] ViewBase target, - [DisallowNull] ViewDrawMenuRadioButton radioButton, - [DisallowNull] NeedPaintHandler needPaint) + public MenuRadioButtonController(ViewContextMenuManager viewManager, + ViewBase target, + ViewDrawMenuRadioButton radioButton, + NeedPaintHandler? needPaint) { - Debug.Assert(viewManager != null); - Debug.Assert(target != null); - Debug.Assert(radioButton != null); - Debug.Assert(needPaint != null); - - ViewManager = viewManager; - _target = target; - _menuRadioButton = radioButton; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(viewManager is not null); + Debug.Assert(target is not null); + Debug.Assert(radioButton is not null); + Debug.Assert(needPaint is not null); + + ViewManager = viewManager!; + _target = target!; + _menuRadioButton = radioButton!; NeedPaint = needPaint; } #endregion @@ -131,7 +133,7 @@ public void MnemonicActivate() public bool DoesStackedClientMouseDownBecomeCurrent(Point pt) => true; #endregion - + #region Mouse Notifications /// /// Mouse has entered the view. @@ -410,7 +412,7 @@ private void PressMenuRadioButton(bool keyboard) // Do we need to automatically change the checked state? if (_menuRadioButton.KryptonContextMenuRadioButton is { AutoCheck: true, Checked: false }) - // We only alter state if it is currently not checked + // We only alter state if it is currently not checked { _menuRadioButton.KryptonContextMenuRadioButton.Checked = true; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/MonthCalendarController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/MonthCalendarController.cs index 21e7c3e4e..3dfbfc3c6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/MonthCalendarController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/MonthCalendarController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,7 +40,7 @@ public class MonthCalendarController : GlobalId, /// Delegate for handling repainting requests. public MonthCalendarController(KryptonContextMenuMonthCalendar monthCalendar, ViewContextMenuManager viewManager, - ViewLayoutMonths months, + ViewLayoutMonths months, NeedPaintHandler needPaint) { _monthCalendar = monthCalendar; @@ -63,7 +63,7 @@ public MonthCalendarController(KryptonContextMenuMonthCalendar monthCalendar, /// public virtual void ShowTarget() { - _months.FocusDay = _monthCalendar.SelectionStart; + _months.FocusDay = _monthCalendar?.SelectionStart; _needPaint(this, new NeedLayoutEventArgs(false)); } @@ -400,7 +400,7 @@ public virtual void KeyDown([DisallowNull] Control c, [DisallowNull] KeyEventArg { ProviderCanCloseMenu: true }) - // Is the menu capable of being closed? + // Is the menu capable of being closed? { // Ask the original context menu definition, if we can close var cea = new CancelEventArgs(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/RadioButtonController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/RadioButtonController.cs index 6d15a2ed2..c1e887d59 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/RadioButtonController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/RadioButtonController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,19 +37,19 @@ internal class RadioButtonController : GlobalId, /// Target for state changes. /// Top element for the radio button control. /// Delegate for notifying paint requests. - public RadioButtonController([DisallowNull] ViewDrawRadioButton target, - [DisallowNull] ViewBase top, - NeedPaintHandler needPaint) + public RadioButtonController(ViewDrawRadioButton target, + ViewBase top, + NeedPaintHandler? needPaint) { - Debug.Assert(target != null); - Debug.Assert(top != null); - - // Store the provided paint notification delegate - NeedPaint = needPaint; + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(target is not null); + Debug.Assert(top is not null); // Remember target for state changes - _target = target; - _top = top; + _target = target!; + _top = top!; + NeedPaint = needPaint; } #endregion @@ -145,7 +145,7 @@ public virtual void MouseUp(Control c, Point pt, MouseButtons button) { // Only if radio button is still pressed if (_target is { Pressed: true, Enabled: true }) - // Can only click if enabled + // Can only click if enabled { OnClick(EventArgs.Empty); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/SeparatorController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/SeparatorController.cs index d948d8dd7..e8dd90c50 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/SeparatorController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/SeparatorController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -70,7 +70,6 @@ public interface ISeparatorSource /// public class SeparatorController : ButtonController, IDisposable - { #region Types /// @@ -179,9 +178,9 @@ protected override void WndProc(ref Message m) private int _separatorIncrements; private Rectangle _separatorBox; private Orientation _separatorOrientation; - private SeparatorMessageFilter _filter; + private SeparatorMessageFilter? _filter; private readonly ISeparatorSource _source; - private SeparatorIndicator _indicator; + private SeparatorIndicator? _indicator; #endregion @@ -201,9 +200,9 @@ public SeparatorController([DisallowNull] ISeparatorSource source, NeedPaintHandler needPaint) : base(target, needPaint) { - Debug.Assert(source != null); + Debug.Assert(source is not null); - _source = source; + _source = source ?? throw new ArgumentNullException(nameof(source)); _splitCursors = splitCursors; _drawIndicator = drawIndicator; } @@ -213,7 +212,7 @@ public SeparatorController([DisallowNull] ISeparatorSource source, /// public void Dispose() { - UnregisterFilter(); + UnRegisterFilter(); GC.SuppressFinalize(this); } #endregion @@ -315,7 +314,7 @@ public override bool MouseDown(Control c, Point pt, MouseButtons button) // Remove the message filter, as long as it is registered // it will prevent the class from being garbage collected. - UnregisterFilter(); + UnRegisterFilter(); // Callback to the source to show movement has finished Point splitPt = RecalcClient(pt); @@ -345,7 +344,7 @@ public override void MouseUp(Control c, Point pt, MouseButtons button) // Remove the message filter, as long as it is registered // it will prevent the class from being garbage collected. - UnregisterFilter(); + UnRegisterFilter(); // Remove any showing separator indicator DrawSeparatorRemoved(); @@ -459,7 +458,7 @@ public void AbortMoving() // Remove the message filter, as long as it is registered // it will prevent the class from being garbage collected. - UnregisterFilter(); + UnRegisterFilter(); // Remove any showing separator indicator DrawSeparatorRemoved(); @@ -649,7 +648,7 @@ private void RegisterFilter() } } - private void UnregisterFilter() + private void UnRegisterFilter() { if (_filter != null) { @@ -680,9 +679,9 @@ internal class SeparatorMessageFilter : IMessageFilter /// Owning class instance. public SeparatorMessageFilter([DisallowNull] SeparatorController controller) { - Debug.Assert(controller != null); + Debug.Assert(controller is not null); - _controller = controller; + _controller = controller ?? throw new ArgumentNullException(nameof(controller)); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/TooltipController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/TooltipController.cs index 0173b5f54..a465c652c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/TooltipController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/TooltipController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class ToolTipController : GlobalId, IMouseController { #region Instance Fields - private readonly ToolTipManager _manager; + private readonly ToolTipManager? _manager; private readonly ViewBase _targetElement; private readonly IMouseController? _targetController; #endregion @@ -40,7 +40,7 @@ public ToolTipController([DisallowNull] ToolTipManager manager, // Remember incoming references _manager = manager; - _targetElement = targetElement; + _targetElement = targetElement!; _targetController = targetController; } #endregion @@ -52,7 +52,7 @@ public ToolTipController([DisallowNull] ToolTipManager manager, /// Reference to the source control instance. public void MouseEnter(Control c) { - _manager.MouseEnter(_targetElement, c); + _manager?.MouseEnter(_targetElement, c); _targetController?.MouseEnter(c); } @@ -64,7 +64,7 @@ public void MouseEnter(Control c) /// Mouse position relative to control. public void MouseMove(Control c, Point pt) { - _manager.MouseMove(_targetElement, c, pt); + _manager?.MouseMove(_targetElement, c, pt); _targetController?.MouseMove(c, pt); } @@ -78,7 +78,7 @@ public void MouseMove(Control c, Point pt) /// True if capturing input; otherwise false. public bool MouseDown(Control c, Point pt, MouseButtons button) { - _manager.MouseDown(_targetElement, c, pt, button); + _manager?.MouseDown(_targetElement, c, pt, button); return _targetController != null && _targetController.MouseDown(c, pt, button); } @@ -91,7 +91,7 @@ public bool MouseDown(Control c, Point pt, MouseButtons button) /// Mouse button released. public void MouseUp(Control c, Point pt, MouseButtons button) { - _manager.MouseUp(_targetElement, c, pt, button); + _manager?.MouseUp(_targetElement, c, pt, button); _targetController?.MouseUp(c, pt, button); } @@ -103,7 +103,7 @@ public void MouseUp(Control c, Point pt, MouseButtons button) /// Reference to view that is next to have the mouse. public void MouseLeave(Control c, ViewBase? next) { - _manager.MouseLeave(_targetElement, c, next); + _manager?.MouseLeave(_targetElement, c, next); _targetController?.MouseLeave(c, next); } @@ -114,7 +114,7 @@ public void MouseLeave(Control c, ViewBase? next) /// Mouse position relative to control. public void DoubleClick(Point pt) { - _manager.DoubleClick(_targetElement, pt); + _manager?.DoubleClick(_targetElement, pt); _targetController?.DoubleClick(pt); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/TrackBarController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/TrackBarController.cs index e84dacb41..448fe1a27 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/TrackBarController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/TrackBarController.cs @@ -5,11 +5,13 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion +using Timer = System.Windows.Forms.Timer; + namespace Krypton.Toolkit { /// @@ -22,7 +24,7 @@ public class TrackBarController : GlobalId, { #region Instance Fields private readonly ViewDrawTP _drawTB; - private System.Windows.Forms.Timer _repeatTimer; + private Timer? _repeatTimer; private bool _captured; private int _targetValue; private Point _lastMovePt; @@ -307,7 +309,7 @@ public virtual void LostFocus([DisallowNull] Control c) #endregion #region Implementation - private void OnRepeatTimer(object sender, EventArgs e) + private void OnRepeatTimer(object? sender, EventArgs e) { var current = _drawTB.ViewDrawTrackBar.Value; if (current != _targetValue) diff --git a/Source/Krypton Components/Krypton.Toolkit/Controller/TrackPositionController.cs b/Source/Krypton Components/Krypton.Toolkit/Controller/TrackPositionController.cs index 943cd3ca2..f7cb5d394 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controller/TrackPositionController.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controller/TrackPositionController.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonAboutBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonAboutBox.cs new file mode 100644 index 000000000..ac4268a37 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonAboutBox.cs @@ -0,0 +1,52 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// The public interface to the class. + [ToolboxItem(false)] + [DesignerCategory(@"code")] + public static class KryptonAboutBox + { + #region Public + + /// Shows a new . + /// The data to pass through. + /// A new with the specified data. + public static DialogResult Show(KryptonAboutBoxData aboutBoxData) + => ShowCore(aboutBoxData); + + /// Shows a new + /// The about box data. + /// The about toolkit data. + /// A new with the specified data. + public static DialogResult Show(KryptonAboutBoxData aboutBoxData, KryptonAboutToolkitData aboutToolkitData) => + ShowCore(aboutBoxData, aboutToolkitData); + + #endregion + + #region Implementation + + private static DialogResult ShowCore(KryptonAboutBoxData aboutBoxData) + { + using var kab = new VisualAboutBoxForm(aboutBoxData); + + return kab.ShowDialog(); + } + + private static DialogResult ShowCore(KryptonAboutBoxData aboutBoxData, KryptonAboutToolkitData aboutToolkitData) + { + using var kab = new VisualAboutBoxForm(aboutBoxData, aboutToolkitData); + + return kab.ShowDialog(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonAlternateCommandLinkButton.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonAlternateCommandLinkButton.cs new file mode 100644 index 000000000..16e68907d --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonAlternateCommandLinkButton.cs @@ -0,0 +1,144 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// A KryptonCommandLink button. + /// Boilerplate code from (https://blogs.msdn.microsoft.com/knom/2007/03/12/vista-command-link-control-with-c-windows-forms/) + /// + /// If used on Windows Vista or higher, the button will be a CommandLink: Basically the same functionality as a Button but looks different. + [DesignerCategory("Code")] + [DisplayName("Krypton Command Link")] + [Description("A Krypton Command Link Button.")] + [ToolboxItem(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [ToolboxBitmap(typeof(KryptonAlternateCommandLinkButton), @"ToolboxBitmaps.KryptonCommandLinkButton.bmp")] + public class KryptonAlternateCommandLinkButton : KryptonButton + { + #region Static Fields + + private const int BS_COMMANDLINK = 0x0000000E; + + private const int BCM_SETNOTE = 0x00001609; + + private const int BCM_GETNOTE = 0x0000160A; + + private const int BCM_GETNOTELENGTH = 0x0000160B; + + private const int BCM_SETSHIELD = 0x0000160C; + + #endregion + + #region Instance Fields + + private bool _showUACShield; + + #endregion + + #region Public + + /// + /// Gets or sets the shield icon visibility of the command link. + /// + [Category("Command Link"), Description("Gets or sets the shield icon visibility of the command link."), DefaultValue(false)] + public bool ShowUACShield + { + get => _showUACShield; + + set + { + _showUACShield = value; + + SendMessage(new HandleRef(this, Handle), BCM_SETSHIELD, IntPtr.Zero, _showUACShield); + } + } + + /// + /// Gets or sets the note text of the command link. + /// + [Category("Command Link"), Description("Gets or sets the note text of the command link."), DefaultValue("")] + public string NoteText + { + get => GetNoteText(); + + set => SetNoteText(value); + } + #endregion + + #region WIN32 Calls + + [DllImport(Libraries.User32, CharSet = CharSet.Unicode)] + static extern int SendMessage(HandleRef hWnd, uint msg, ref int wParam, StringBuilder lParam); + + [DllImport(Libraries.User32, CharSet = CharSet.Unicode)] + static extern int SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, string lParam); + + [DllImport(Libraries.User32, CharSet = CharSet.Unicode)] + static extern int SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, bool lParam); + + [DllImport(Libraries.User32, CharSet = CharSet.Unicode)] + static extern int SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, IntPtr lParam); + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonAlternateCommandLinkButton() + { + + } + + #endregion + + #region Protected + + /// + protected override Size DefaultSize => new Size(160, 60); + + /// + protected override CreateParams CreateParams + { + get + { + CreateParams createParams = base.CreateParams; + + createParams.Style |= BS_COMMANDLINK; + + return createParams; + } + } + + #endregion + + #region Implementation + + /// Sets the NoteText to the value of value. + /// The desired value of NoteText. + private void SetNoteText(string value) => SendMessage(new HandleRef(this, Handle), BCM_SETNOTE, IntPtr.Zero, value); + + /// + /// Returns the value of the NoteText. + /// + /// The value of the NoteText. + private string GetNoteText() + { + int length = SendMessage(new HandleRef(this, Handle), BCM_GETNOTELENGTH, IntPtr.Zero, IntPtr.Zero) + 1; + + StringBuilder stringBuilder = new StringBuilder(length); + + SendMessage(new HandleRef(this, Handle), BCM_GETNOTE, ref length, stringBuilder); + + return stringBuilder.ToString(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBorderEdge.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBorderEdge.cs index 21ac682bb..d1a9d2a7f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBorderEdge.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBorderEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumb.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumb.cs index 7ddf423e4..57632bd47 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumb.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumb.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -46,8 +46,7 @@ public BreadCrumbButtonSpecCollection(KryptonBreadCrumb owner) #region Instance Fields - private bool _dropDownNavigaton; - private float _cornerRoundingRadius; + private bool _dropDownNavigation; private readonly ViewDrawDocker _drawDocker; private readonly ButtonSpecManagerDraw? _buttonManager; private VisualPopupToolTip? _visualPopupToolTip; @@ -97,7 +96,7 @@ public KryptonBreadCrumb() // Set default values _selectedItem = null; - _dropDownNavigaton = true; + _dropDownNavigation = true; _buttonStyle = ButtonStyle.BreadCrumb; RootItem = new KryptonBreadCrumbItem("Root"); RootItem.PropertyChanged += OnCrumbItemChanged; @@ -116,7 +115,7 @@ public KryptonBreadCrumb() // Our view contains background and border with crumbs inside _layoutCrumbs = new ViewLayoutCrumbs(this, NeedPaintDelegate); - _drawDocker = new ViewDrawDocker(StateNormal.Back, StateNormal.Border, null) + _drawDocker = new ViewDrawDocker(StateNormal.Back, StateNormal.Border, null!) { { _layoutCrumbs, ViewDockStyle.Fill } }; @@ -126,10 +125,10 @@ public KryptonBreadCrumb() // Create button specification collection manager _buttonManager = new ButtonSpecManagerDraw(this, Redirector, ButtonSpecs, null, - new[] { _drawDocker }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary }, - new[] { PaletteMetricPadding.None }, + [_drawDocker], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetPrimary], + [PaletteMetricPadding.None], CreateToolStripRenderer, NeedPaintDelegate); @@ -138,8 +137,6 @@ public KryptonBreadCrumb() ToolTipManager.ShowToolTip += OnShowToolTip; ToolTipManager.CancelToolTip += OnCancelToolTip; _buttonManager.ToolTipManager = ToolTipManager; - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -154,7 +151,7 @@ protected override void Dispose(bool disposing) OnCancelToolTip(this, EventArgs.Empty); // Remember to pull down the manager instance - _buttonManager.Destruct(); + _buttonManager?.Destruct(); } base.Dispose(disposing); @@ -188,18 +185,6 @@ public virtual void EndInit() OnInitialized(EventArgs.Empty); } - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets a value indicating if the control is initialized. /// @@ -262,13 +247,13 @@ public override bool AutoSize [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager?.UseMnemonic?? true; + get => _buttonManager?.UseMnemonic ?? true; set { if (_buttonManager?.UseMnemonic != value) { - _buttonManager.UseMnemonic = value; + _buttonManager!.UseMnemonic = value; PerformNeedPaint(true); } } @@ -290,13 +275,13 @@ public bool UseMnemonic [DefaultValue(true)] public bool DropDownNavigation { - get => _dropDownNavigaton; + get => _dropDownNavigation; set { - if (_dropDownNavigaton != value) + if (_dropDownNavigation != value) { - _dropDownNavigaton = value; + _dropDownNavigation = value; PerformNeedPaint(true); } } @@ -437,7 +422,7 @@ public KryptonBreadCrumbItem? SelectedItem [Category(@"Visuals")] [Description(@"Overrides for defining common bread crumb appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteBreadCrumbRedirect? StateCommon { get; } + public PaletteBreadCrumbRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -556,7 +541,7 @@ protected override bool ProcessMnemonic(char charCode) if (UseMnemonic && CanProcessMnemonic()) { // Pass request onto the button spec manager - if (_buttonManager.ProcessMnemonic(charCode)) + if (_buttonManager!.ProcessMnemonic(charCode)) { return true; } @@ -604,7 +589,7 @@ protected override void OnEnabledChanged(EventArgs e) /// /// Source of notification. /// An EventArgs containing event data. - protected override void OnButtonSpecChanged(object sender, EventArgs e) + protected override void OnButtonSpecChanged(object? sender, EventArgs e) { // Recreate all the button specs with new values _buttonManager?.RecreateButtons(); @@ -642,14 +627,14 @@ protected override void OnButtonSpecChanged(object sender, EventArgs e) #endregion #region Internal - internal PaletteBreadCrumbRedirect? GetStateCommon() => StateCommon; + internal PaletteBreadCrumbRedirect GetStateCommon() => StateCommon; - internal PaletteRedirect? GetRedirector() => Redirector; + internal PaletteRedirect GetRedirector() => Redirector; #endregion #region Implementation - private void OnCrumbItemChanged(object sender, PropertyChangedEventArgs e) + private void OnCrumbItemChanged(object? sender, PropertyChangedEventArgs e) { // A change in the selected item hierarchy... if (e.PropertyName == "Items") @@ -676,7 +661,7 @@ private void OnCrumbItemChanged(object sender, PropertyChangedEventArgs e) PerformNeedPaint(true); } - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed) { @@ -743,27 +728,19 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumbItem.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumbItem.cs index a695b8b4c..b88d8f5ac 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumbItem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonBreadCrumbItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -82,7 +82,7 @@ public override KryptonBreadCrumbItem? this[string name] protected override void OnInserting(TypedCollectionEventArgs e) { // Setup parent relationship - e.Item.Parent = _owner; + e.Item!.Parent = _owner; base.OnInserting(e); } @@ -96,7 +96,7 @@ protected override void OnInserted(TypedCollectionEventArgs @@ -108,10 +108,10 @@ protected override void OnRemoved(TypedCollectionEventArgs @@ -138,7 +138,7 @@ protected override void OnCleared(EventArgs e) base.OnCleared(e); // Notify a change in the owners items property - _owner.OnPropertyChanged(new PropertyChangedEventArgs(nameof(Items))); + _owner?.OnPropertyChanged(new PropertyChangedEventArgs(nameof(Items))); } #endregion } @@ -149,7 +149,7 @@ protected override void OnCleared(EventArgs e) /// Initialize a new instance of the KryptonBreadCrumbItem class. /// public KryptonBreadCrumbItem() - : this("ListItem", null, null, Color.Empty) + : this("ListItem", null, null, GlobalStaticValues.EMPTY_COLOR) { } @@ -158,7 +158,7 @@ public KryptonBreadCrumbItem() /// /// Initial short text value. public KryptonBreadCrumbItem(string shortText) - : this(shortText, null, null, Color.Empty) + : this(shortText, null, null, GlobalStaticValues.EMPTY_COLOR) { } @@ -168,7 +168,7 @@ public KryptonBreadCrumbItem(string shortText) /// Initial short text value. /// Initial long text value. public KryptonBreadCrumbItem(string shortText, string longText) - : this(shortText, longText, null, Color.Empty) + : this(shortText, longText, null, GlobalStaticValues.EMPTY_COLOR) { } @@ -180,8 +180,8 @@ public KryptonBreadCrumbItem(string shortText, string longText) /// Initial image value. public KryptonBreadCrumbItem(string shortText, string longText, - Image image) - : this(shortText, longText, image, Color.Empty) + Image? image) + : this(shortText, longText, image, GlobalStaticValues.EMPTY_COLOR) { } @@ -193,8 +193,8 @@ public KryptonBreadCrumbItem(string shortText, /// Initial image value. /// Initial transparent image color. public KryptonBreadCrumbItem(string shortText, - string longText, - Image image, + string? longText, + Image? image, Color imageTransparentColor) : base(shortText, longText, image, imageTransparentColor) => // Create child collection diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButton.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButton.cs index 151e01106..cfc37dc17 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -45,15 +45,12 @@ public class KryptonButton : VisualSimpleBase, IButtonControl, IContentValues private readonly PaletteTripleOverride _overrideTracking; private readonly PaletteTripleOverride _overridePressed; private IKryptonCommand? _command; - private bool _useAsDialogButton; private bool _isDefault; private bool _useMnemonic; private bool _wasEnabled; - private bool _useAsUACElevationButton; private bool _skipNextOpen; - private bool _showSplitOption; + //private bool _showSplitOption; //private bool _useOSUACShieldIcon; - private float _cornerRoundingRadius; private Size _customUACShieldSize; private UACShieldIconSize _uacShieldIconSize; private Rectangle _dropDownRectangle; @@ -135,22 +132,12 @@ public KryptonButton() // Create the view manager instance ViewManager = new ViewManager(this, _drawButton); - _useAsDialogButton = false; - - _useAsUACElevationButton = false; - _uacShieldIconSize = GlobalStaticValues.DEFAULT_UAC_SHIELD_ICON_SIZE; //_useOSUACShieldIcon = false; _customUACShieldSize = GlobalStaticValues.DEFAULT_UAC_SHIELD_ICON_CUSTOM_SIZE; - // Set `CornerRoundingRadius' to 'GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE' (-1) - CornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - // Split settings - _showSplitOption = false; - _skipNextOpen = false; _dropDownRectangle = new Rectangle(); @@ -158,18 +145,6 @@ public KryptonButton() #endregion #region Public - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets and sets the automatic resize of the control to fit contents. /// @@ -268,65 +243,7 @@ public ButtonStyle ButtonStyle private void ResetButtonStyle() => ButtonStyle = ButtonStyle.Standalone; - [DefaultValue(false), - Description(@"If set to true, the text will pair up with the equivalent KryptonManager's dialog button text result. (Note: You'll lose any previous text)")] - public bool UseAsADialogButton - { - get => _useAsDialogButton; - set => _useAsDialogButton = value; - } - [DefaultValue(false), - Description(@"Transforms the button into a UAC elevated button.")] - public bool UseAsUACElevationButton - { - get => _useAsUACElevationButton; - set - { - _useAsUACElevationButton = value; - - switch (_uacShieldIconSize) - { - //if (_customUACShieldSize.Height > 0 && _customUACShieldSize.Width > 0) - //{ - // ShowUACShield(value, UACShieldIconSize.Custom, _customUACShieldSize.Width, _customUACShieldSize.Height); - //} - //else if (_uacShieldIconSize != UACShieldIconSize.Custom) - //{ - // ShowUACShield(value, _uacShieldIconSize); - //} - case UACShieldIconSize.ExtraSmall: - ShowUACShield(value, UACShieldIconSize.ExtraSmall); - break; - case UACShieldIconSize.Small: - ShowUACShield(value, UACShieldIconSize.Small); - break; - case UACShieldIconSize.Medium: - ShowUACShield(value, UACShieldIconSize.Medium); - break; - case UACShieldIconSize.Large: - ShowUACShield(value, UACShieldIconSize.Large); - break; - case UACShieldIconSize.ExtraLarge: - ShowUACShield(value, UACShieldIconSize.ExtraLarge); - break; - default: - ShowUACShield(value, UACShieldIconSize.ExtraSmall); - break; - } - } - } - - /* - [DefaultValue(false), Description(@"Use the operating system UAC shield icon image.")] - public bool UseOSUACShieldIcon { get => _useOSUACShieldIcon; set { _useOSUACShieldIcon = value; UpdateOSUACShieldIcon(); } } - - [DefaultValue(null), Description(@"")] - public Size CustomUACShieldSize { get => _customUACShieldSize; set { _customUACShieldSize = value; ShowUACShield(_useAsUACElevationButton, UACShieldIconSize.Custom, value.Width, value.Height); } } - */ - - [DefaultValue(UACShieldIconSize.ExtraSmall), Description(@"")] - public UACShieldIconSize UACShieldIconSize { get => _uacShieldIconSize; set { _uacShieldIconSize = value; ShowUACShield(_useAsUACElevationButton, value); } } /// /// Gets access to the button content. @@ -340,7 +257,7 @@ public bool UseAsUACElevationButton //[Category(@"Visuals"), Description(@"UAC Shield Values"), DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] //public UACShieldValues UACShieldValues { get; } - + //private bool ShouldSerializeUACShieldValues() => !UACShieldValues.IsDefault; /// @@ -543,7 +460,7 @@ public virtual void SetFixedState(PaletteState state) set => base.ImeMode = value; } - /// Gets or sets a value indicating whether [show split option]. + /*/// Gets or sets a value indicating whether [show split option]. /// true if [show split option]; otherwise, false. [Category(@"Visuals")] [DefaultValue(false)] @@ -563,7 +480,7 @@ public bool ShowSplitOption Parent?.PerformLayout(); } } - } + }*/ #endregion @@ -598,11 +515,12 @@ public Color GetImageTransparentColor(PaletteState state) => #region Public Overrides + /// public override Size GetPreferredSize(Size proposedSize) { Size preferredSize = base.GetPreferredSize(proposedSize); - if (_showSplitOption && !string.IsNullOrWhiteSpace(Text) && TextRenderer.MeasureText(Text, Font).Width + DEFAULT_PUSH_BUTTON_WIDTH > preferredSize.Width) + if (Values.ShowSplitOption && !string.IsNullOrWhiteSpace(Text) && TextRenderer.MeasureText(Text, Font).Width + DEFAULT_PUSH_BUTTON_WIDTH > preferredSize.Width) { return preferredSize + new Size(DEFAULT_PUSH_BUTTON_WIDTH + BORDER_SIZE * 2, 0); } @@ -698,7 +616,10 @@ protected override void OnClick(EventArgs e) catch (InvalidEnumArgumentException) { // Is it https://github.com/Krypton-Suite/Standard-Toolkit/issues/728 - if (owner is KryptonMessageBoxForm) + if (owner is VisualMessageBoxForm + or VisualMessageBoxFormDep + or VisualMessageBoxRtlAwareForm + or VisualMessageBoxRtlAwareFormDep) { // need to gain access to `dialogResult` and set it forcefully FieldInfo? fi = typeof(Form).GetField("dialogResult", BindingFlags.NonPublic | BindingFlags.Instance); @@ -720,7 +641,7 @@ protected override void OnClick(EventArgs e) // If we have an attached command then execute it KryptonCommand?.PerformExecute(); - if (_useAsUACElevationButton) + if (Values.UseAsUACElevationButton) { var rawUACShield = SystemIcons.Shield.ToBitmap(); @@ -766,43 +687,40 @@ protected override bool ProcessMnemonic(char charCode) /// protected override void ContextMenuClosed() => _buttonController.RemoveFixed(); - protected override void OnPaint(PaintEventArgs e) + /// + protected override void OnPaint(PaintEventArgs? e) { - if (_useAsDialogButton) + if (Values.UseAsADialogButton) { - if (DialogResult == DialogResult.Abort) + Text = DialogResult switch { - Text = KryptonLanguageManager.GeneralToolkitStrings.Abort; - } - - if (DialogResult == DialogResult.Cancel) - { - Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; - } - - if (DialogResult == DialogResult.OK) - { - Text = KryptonLanguageManager.GeneralToolkitStrings.OK; - } - - if (DialogResult == DialogResult.Yes) - { - Text = KryptonLanguageManager.GeneralToolkitStrings.Yes; - } - - if (DialogResult == DialogResult.No) - { - Text = KryptonLanguageManager.GeneralToolkitStrings.No; - } - - if (DialogResult == DialogResult.Retry) - { - Text = KryptonLanguageManager.GeneralToolkitStrings.Retry; - } + DialogResult.Abort => KryptonManager.Strings.GeneralStrings.Abort, + DialogResult.Cancel => KryptonManager.Strings.GeneralStrings.Cancel, + DialogResult.OK => KryptonManager.Strings.GeneralStrings.OK, + DialogResult.Yes => KryptonManager.Strings.GeneralStrings.Yes, + DialogResult.No => KryptonManager.Strings.GeneralStrings.No, + DialogResult.Retry => KryptonManager.Strings.GeneralStrings.Retry, + DialogResult.Ignore => KryptonManager.Strings.GeneralStrings.Ignore, + _ => Text + }; + } - if (DialogResult == DialogResult.Ignore) + if (Values.UseAsUACElevationButton) + { + switch (Values.UACShieldIconSize) { - Text = KryptonLanguageManager.GeneralToolkitStrings.Ignore; + case UACShieldIconSize.ExtraSmall: + break; + case UACShieldIconSize.Small: + break; + case UACShieldIconSize.Medium: + break; + case UACShieldIconSize.Large: + break; + case UACShieldIconSize.ExtraLarge: + break; + default: + throw new ArgumentOutOfRangeException(); } } @@ -810,12 +728,12 @@ protected override void OnPaint(PaintEventArgs e) #region Split Code - if (!_showSplitOption) + if (!Values.ShowSplitOption) { return; } - Graphics g = e.Graphics; + Graphics g = e?.Graphics!; Rectangle bounds = ClientRectangle; @@ -826,16 +744,11 @@ protected override void OnPaint(PaintEventArgs e) var focusRectangle = new Rectangle(internalBorder, internalBorder, bounds.Width - _dropDownRectangle.Width - internalBorder, bounds.Height - (internalBorder * 2)); - PaletteBase? palette = KryptonManager.CurrentGlobalPalette; + PaletteBase palette = KryptonManager.CurrentGlobalPalette; - Pen shadow = SystemPens.ButtonShadow, face = SystemPens.ButtonFace; + var shadow = new Pen(palette.ColorTable.GripDark); - if (palette != null) - { - shadow = new Pen(palette.ColorTable.GripDark); - - face = new Pen(palette.ColorTable.GripLight); - } + var face = new Pen(palette.ColorTable.GripLight); if (RightToLeft == RightToLeft.Yes) { @@ -856,14 +769,15 @@ protected override void OnPaint(PaintEventArgs e) } // Draw an arrow in the correct location - PaintArrow(g, _dropDownRectangle); + PaintArrow(Values.DropDownArrowColor, g, _dropDownRectangle); #endregion } + /// protected override bool IsInputKey(Keys keyData) { - if (keyData.Equals(Keys.Down) && _showSplitOption) + if (keyData.Equals(Keys.Down) && Values.ShowSplitOption) { return true; } @@ -873,9 +787,10 @@ protected override bool IsInputKey(Keys keyData) } } + /// protected override void OnKeyDown(KeyEventArgs e) { - if (_showSplitOption && e.KeyCode.Equals(Keys.Down)) + if (Values.ShowSplitOption && e.KeyCode.Equals(Keys.Down)) { ShowContextMenuStrip(); } @@ -883,9 +798,10 @@ protected override void OnKeyDown(KeyEventArgs e) base.OnKeyDown(e); } + /// protected override void OnMouseDown(MouseEventArgs e) { - if (!_showSplitOption) + if (!Values.ShowSplitOption) { base.OnMouseDown(e); return; @@ -901,16 +817,10 @@ protected override void OnMouseDown(MouseEventArgs e) } } + /// protected override void OnMouseUp(MouseEventArgs e) { - if (!_showSplitOption) - { - base.OnMouseUp(e); - - return; - } - - if (ContextMenuStrip == null || !ContextMenuStrip.Visible) + if (!Values.ShowSplitOption || ContextMenuStrip == null || !ContextMenuStrip.Visible) { base.OnMouseUp(e); } @@ -961,12 +871,12 @@ protected virtual void OnKryptonCommandChanged(EventArgs e) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(Enabled): - Enabled = KryptonCommand.Enabled; + Enabled = KryptonCommand!.Enabled; break; case nameof(Text): case @"ExtraText": @@ -985,9 +895,9 @@ protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEv #endregion #region Implementation - private void OnButtonTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnButtonTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); - private void OnButtonClick(object sender, MouseEventArgs e) + private void OnButtonClick(object? sender, MouseEventArgs e) { // Raise the standard click event OnClick(EventArgs.Empty); @@ -996,7 +906,7 @@ private void OnButtonClick(object sender, MouseEventArgs e) OnMouseClick(e); } - private void OnButtonSelect(object sender, MouseEventArgs e) + private void OnButtonSelect(object? sender, MouseEventArgs e) { // Take the focus if allowed if (CanFocus) @@ -1005,126 +915,35 @@ private void OnButtonSelect(object sender, MouseEventArgs e) } } - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - #region UAC Stuff - - /// Shows the uac shield. - /// if set to true [show uac shield]. - /// Size of the shield icon. - /// The width. - /// The height. - private void ShowUACShield(bool showUACShield, UACShieldIconSize? shieldIconSize = null, int? width = null, int? height = null) - { - if (showUACShield) - { - int h = height ?? 16, w = width ?? 16; - - Image shield = SystemIcons.Shield.ToBitmap(); - - switch (shieldIconSize) - { - //case UACShieldIconSize.Custom: - // Values.Image = GraphicsExtensions.ScaleImage(shield, w, h); - // break; - case UACShieldIconSize.ExtraSmall: - Values.Image = GraphicsExtensions.ScaleImage(shield, 16, 16); - break; - case UACShieldIconSize.Small: - Values.Image = GraphicsExtensions.ScaleImage(shield, 32, 32); - break; - case UACShieldIconSize.Medium: - Values.Image = GraphicsExtensions.ScaleImage(shield, 64, 64); - break; - case UACShieldIconSize.Large: - Values.Image = GraphicsExtensions.ScaleImage(shield, 128, 128); - break; - case UACShieldIconSize.ExtraLarge: - Values.Image = GraphicsExtensions.ScaleImage(shield, 256, 256); - break; - case null: - Values.Image = GraphicsExtensions.ScaleImage(shield, 16, 16); - break; - } - - Invalidate(); - } - else - { - Values.Image = null; - } - } - - /// Updates the UAC shield icon. - /// Size of the icon. - /// Size of the custom. - private void UpdateOSUACShieldIcon(UACShieldIconSize? iconSize = null, Size? customSize = null) - { - //if (OSUtilities.IsWindowsEleven) - //{ - // Image windowsElevenUacShieldImage = UACShieldIconResources.UACShieldWindows11; - - // if (iconSize == UACShieldIconSize.Custom) - // { - // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsElevenUacShieldImage); - // } - // else - // { - // UpdateShieldSize(iconSize, null, windowsElevenUacShieldImage); - // } - //} - //else if (OSUtilities.IsWindowsTen) - //{ - // Image windowsTenUacShieldImage = UACShieldIconResources.UACShieldWindows10; - - // if (iconSize == UACShieldIconSize.Custom) - // { - // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsTenUacShieldImage); - // } - // else - // { - // UpdateShieldSize(iconSize, null, windowsTenUacShieldImage); - // } - //} - //else if (OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsEight || OSUtilities.IsWindowsSeven) - //{ - // Image windowsEightUacShieldImage = UACShieldIconResources.UACShieldWindows7881; - - // if (iconSize == UACShieldIconSize.Custom) - // { - // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsEightUacShieldImage); - // } - // else - // { - // UpdateShieldSize(iconSize, null, windowsEightUacShieldImage); - // } - //} - } - - #endregion - #region Splitter Stuff - private static void PaintArrow(Graphics graphics, Rectangle rectangle) + /// Paints the drop-down arrow. + /// The drop-down arrow graphics. + /// The drop-down rectangle area. + /// The color of the drop-down arrow. + private static void PaintArrow(Color? dropDownArrowColor, Graphics graphics, Rectangle rectangle) { var midPoint = new Point(Convert.ToInt32(rectangle.Left + rectangle.Width / 2), Convert.ToInt32(rectangle.Top + rectangle.Height / 2)); midPoint.X += (rectangle.Width % 2); - var arrow = new Point[] - { + // Testing for null and EMPTY_COLOR, makes the arrow color react to theme changes, + // otherwise a custom color is in effect. + Color? color = dropDownArrowColor is not null && dropDownArrowColor != GlobalStaticValues.EMPTY_COLOR + ? dropDownArrowColor + : KryptonManager.CurrentGlobalPalette.GetContentShortTextColor1(PaletteContentStyle.ButtonStandalone, PaletteState.Normal); + + SolidBrush dropDownBrush = new SolidBrush(color.Value); + + var arrow = new Point[] + { new Point(midPoint.X - 2, midPoint.Y - 1), - new Point(midPoint.X + 3, midPoint.Y - 1), + new Point(midPoint.X + 3, midPoint.Y - 1), midPoint with { Y = midPoint.Y + 2 } }; - graphics.FillPolygon(SystemBrushes.ControlText, arrow); + graphics.FillPolygon(dropDownBrush, arrow); } private void ShowContextMenuStrip() @@ -1158,10 +977,9 @@ private void ShowContextMenuStrip() #region Event Handlers - private void KryptonContextMenu_Closed(object sender, ToolStripDropDownClosedEventArgs e) + private void KryptonContextMenu_Closed(object? sender, ToolStripDropDownClosedEventArgs e) { - var kcm = sender as KryptonContextMenu; - if (kcm != null) + if (sender is KryptonContextMenu kcm) { kcm.Closed -= KryptonContextMenu_Closed; } @@ -1172,10 +990,9 @@ private void KryptonContextMenu_Closed(object sender, ToolStripDropDownClosedEve //} } - private void ContextMenuStrip_Closing(object sender, ToolStripDropDownClosingEventArgs e) + private void ContextMenuStrip_Closing(object? sender, ToolStripDropDownClosingEventArgs e) { - var cms = sender as ContextMenuStrip; - if (cms != null) + if (sender is ContextMenuStrip cms) { cms.Closing -= ContextMenuStrip_Closing; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButtonPanel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButtonPanel.cs index 95f32dc9d..f2ddea73f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButtonPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonButtonPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckBox.cs index c2982ec45..eeae51064 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -669,15 +669,15 @@ protected virtual void OnKryptonCommandChanged(EventArgs e) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(Enabled): - Enabled = KryptonCommand.Enabled; + Enabled = KryptonCommand!.Enabled; break; case nameof(CheckState): - CheckState = KryptonCommand.CheckState; + CheckState = KryptonCommand!.CheckState; break; case nameof(Text): case @"ExtraText": @@ -819,9 +819,9 @@ protected override bool EvalTransparentPaint() => #endregion #region Implementation - private void OnCheckBoxTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnCheckBoxTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); - private void OnControllerClick(object sender, EventArgs e) => OnClick(e); + private void OnControllerClick(object? sender, EventArgs e) => OnClick(e); private void UpdateForOrientation() { diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckButton.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckButton.cs index aaa4c8318..3d751747e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -256,11 +256,11 @@ protected override void OnKryptonCommandChanged(EventArgs e) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected override void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected override void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { Checked = e.PropertyName switch { - nameof(CheckState) => KryptonCommand.Checked, + nameof(CheckState) => KryptonCommand!.Checked, _ => Checked }; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckSet.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckSet.cs index d7a418f78..062dd5d6e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckSet.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckSet.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,7 +43,7 @@ public class KryptonCheckButtonCollection : CollectionBase public KryptonCheckButtonCollection([DisallowNull] KryptonCheckSet owner) { Debug.Assert(owner != null); - _owner = owner; + _owner = owner!; } #endregion @@ -81,7 +81,7 @@ public int Add([DisallowNull] KryptonCheckButton checkButton) /// /// The KryptonCheckButton to locate in the collection. /// True if found in collection; otherwise false. - public bool Contains(KryptonCheckButton checkButton) => + public bool Contains(KryptonCheckButton? checkButton) => // ReSharper disable RedundantBaseQualifier base.List.Contains(checkButton); // ReSharper restore RedundantBaseQualifier @@ -91,7 +91,7 @@ public bool Contains(KryptonCheckButton checkButton) => /// /// The KryptonCheckButton to locate. /// Index of reference; otherwise -1. - public int IndexOf(KryptonCheckButton checkButton) => + public int IndexOf(KryptonCheckButton? checkButton) => // ReSharper disable RedundantBaseQualifier base.List.IndexOf(checkButton); // ReSharper restore RedundantBaseQualifier @@ -157,7 +157,7 @@ public void Remove([DisallowNull] KryptonCheckButton checkButton) /// /// Index of entry to return. /// Reference of KryptonCheckButton instance. - public KryptonCheckButton this[int index] + public KryptonCheckButton? this[int index] { get { @@ -167,7 +167,7 @@ public KryptonCheckButton this[int index] } // ReSharper disable RedundantBaseQualifier - return (KryptonCheckButton)base.List[index]; + return base.List[index] as KryptonCheckButton; // ReSharper restore RedundantBaseQualifier } } @@ -426,7 +426,7 @@ private void CheckButtonAdded(KryptonCheckButton? checkButton) } // If the incoming button is already checked - if (checkButton.Checked) + if (checkButton.Checked) { // If we already have a button checked if (_checkedButton != null) @@ -469,26 +469,26 @@ private void CheckButtonRemoved(KryptonCheckButton? checkButton) } } - private void OnCheckedChanging(object sender, CancelEventArgs e) + private void OnCheckedChanging(object? sender, CancelEventArgs e) { // Are we allowed to process the event? if (!_ignoreEvents) { // Cast to the correct type - var checkedButton = (KryptonCheckButton)sender; + var checkedButton = sender as KryptonCheckButton ?? throw new ArgumentNullException(nameof(sender)); // Prevent the checked button becoming unchecked unless AllowUncheck is defined e.Cancel = checkedButton.Checked && !AllowUncheck; } } - private void OnCheckedChanged(object sender, EventArgs e) + private void OnCheckedChanged(object? sender, EventArgs e) { // Are we allowed to process the event? if (!_ignoreEvents) { // Cast to the correct type - var checkedButton = (KryptonCheckButton)sender; + var checkedButton = sender as KryptonCheckButton ?? throw new ArgumentNullException(nameof(sender)); if (checkedButton.Checked) { diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckedListBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckedListBox.cs index ad7a981ad..2fe82509a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckedListBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCheckedListBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -45,7 +45,7 @@ public class CheckedIndexCollection : IList internal CheckedIndexCollection(KryptonCheckedListBox owner) { _owner = owner; - _internalListBox = (InternalCheckedListBox)owner.ListBox!; + _internalListBox = (InternalCheckedListBox)owner.ListBox; } #endregion @@ -119,7 +119,7 @@ public int IndexOf(int index) /// /// Item index. /// Item at specified index. - public object this[int index] + public object? this[int index] { get { @@ -132,13 +132,13 @@ public object this[int index] #endregion #region Private - int IList.Add(object value) => throw new NotSupportedException(@"Read Only Collection"); + int IList.Add(object? value) => throw new NotSupportedException(@"Read Only Collection"); void IList.Clear() => throw new NotSupportedException(@"Read Only Collection"); - void IList.Insert(int index, object value) => throw new NotSupportedException(@"Read Only Collection"); + void IList.Insert(int index, object? value) => throw new NotSupportedException(@"Read Only Collection"); - void IList.Remove(object value) => throw new NotSupportedException(@"Read Only Collection"); + void IList.Remove(object? value) => throw new NotSupportedException(@"Read Only Collection"); void IList.RemoveAt(int index) => throw new NotSupportedException(@"Read Only Collection"); @@ -150,7 +150,15 @@ public object this[int index] private object InnerArrayGetEntryObject(int index, int stateMask) => _internalListBox.InnerArrayGetEntryObject(index, stateMask); - private int InnerArrayIndexOfIdentifier(object identifier, int stateMask) => _internalListBox.InnerArrayIndexOfIdentifier(identifier, stateMask); + private int InnerArrayIndexOfIdentifier(object? identifier, int stateMask) + { +#if NET6_0_OR_GREATER +// https://github.com/dotnet/winforms/commit/1f4a593a6de32e75ff0f5fa97d35191c1facbc93#diff-c4db2c84a2a605af84487ad4386f94c42193826e71b7cf8d297c610c034245f9 + return _internalListBox.InnerArrayIndexOf(identifier, stateMask); +#else + return _internalListBox.InnerArrayIndexOfIdentifier(identifier, stateMask); +#endif + } #endregion } @@ -183,7 +191,7 @@ static CheckedItemCollection() /// Initialize a new instance of the CheckedItemCollection class. /// /// Reference to owning control. - internal CheckedItemCollection(KryptonCheckedListBox owner) => _internalListBox = (InternalCheckedListBox)owner.ListBox!; + internal CheckedItemCollection(KryptonCheckedListBox owner) => _internalListBox = (InternalCheckedListBox)owner.ListBox; #endregion @@ -193,7 +201,7 @@ static CheckedItemCollection() /// /// Object reference. /// True if button spec found; otherwise false. - public bool Contains(object item) => IndexOf(item) != -1; + public bool Contains(object? item) => IndexOf(item) != -1; /// /// Copies all the elements of the current collection to the specified Array. @@ -220,14 +228,14 @@ public void CopyTo(Array array, int index) /// /// Object reference. /// -1 if not found; otherwise index position. - public int IndexOf(object item) => InnerArrayIndexOf(item, _anyItemMask); + public int IndexOf(object? item) => InnerArrayIndexOf(item, _anyItemMask); /// /// Determines the index of the specified spec in the collection. /// /// Object reference. /// -1 if not found; otherwise index position. - public int IndexOfIdentifier(object item) => InnerArrayIndexOfIdentifier(item, _anyItemMask); + public int IndexOfIdentifier(object? item) => InnerArrayIndexOfIdentifier(item, _anyItemMask); /// /// Gets the number of items in collection. @@ -244,7 +252,7 @@ public void CopyTo(Array array, int index) /// /// Item index. /// Item at specified index. - public object this[int index] + public object? this[int index] { get => InnerArrayGetItem(index, _anyItemMask); set => throw new NotSupportedException(@"Read Only Collection"); @@ -291,9 +299,9 @@ internal void SetCheckedState(int index, CheckState value) void IList.Clear() => throw new NotSupportedException(@"Read Only Collection"); - void IList.Insert(int index, object value) => throw new NotSupportedException(@"Read Only Collection"); + void IList.Insert(int index, object? value) => throw new NotSupportedException(@"Read Only Collection"); - void IList.Remove(object value) => throw new NotSupportedException(@"Read Only Collection"); + void IList.Remove(object? value) => throw new NotSupportedException(@"Read Only Collection"); void IList.RemoveAt(int index) => throw new NotSupportedException(@"Read Only Collection"); @@ -305,9 +313,9 @@ internal void SetCheckedState(int index, CheckState value) private int InnerArrayGetCount(int stateMask) => _internalListBox.InnerArrayGetCount(stateMask); - private int InnerArrayIndexOf(object item, int stateMask) => _internalListBox.InnerArrayIndexOf(item, stateMask); + private int InnerArrayIndexOf(object? item, int stateMask) => _internalListBox.InnerArrayIndexOf(item, stateMask); - private int InnerArrayIndexOfIdentifier(object identifier, int stateMask) => _internalListBox.InnerArrayIndexOfIdentifier(identifier, stateMask); + private int InnerArrayIndexOfIdentifier(object? identifier, int stateMask) => _internalListBox.InnerArrayIndexOfIdentifier(identifier, stateMask); private object InnerArrayGetItem(int index, int stateMask) => _internalListBox.InnerArrayGetItem(index, stateMask); @@ -347,7 +355,7 @@ public ObjectCollection(KryptonCheckedListBox owner) /// An object representing the item to add to the collection. /// true to check the item; otherwise, false /// The index of the newly added item. - public int Add(object item, bool isChecked) => Add(item, isChecked ? CheckState.Checked : CheckState.Unchecked); + public int Add(object? item, bool isChecked) => Add(item, isChecked ? CheckState.Checked : CheckState.Unchecked); /// /// Adds an item to the list of items for a CheckedListBox, specifying the object to add and the initial checked value. @@ -355,9 +363,9 @@ public ObjectCollection(KryptonCheckedListBox owner) /// An object representing the item to add to the collection. /// The initial CheckState for the checked portion of the item. /// The index of the newly added item. - public int Add(object item, CheckState check) + public int Add(object? item, CheckState check) { - var index = base.Add(item); + var index = base.Add(item!); _owner.SetItemCheckState(index, check); return index; } @@ -507,7 +515,7 @@ public override DrawMode DrawMode } /// - /// Force the remeasure of items so they are sized correctly. + /// Force the remeasure of items, so they are sized correctly. /// public void RefreshItemSizes() { @@ -733,40 +741,41 @@ internal int InnerArrayGetCount(int stateMask) { if (_miGetCount == null) { - _miGetCount = InnerArray?.GetType().GetMethod(@"GetCount", new[] { typeof(int) }, null); + _miGetCount = InnerArray?.GetType().GetMethod(@"GetCount", [typeof(int)], null); } - return (int)_miGetCount.Invoke(InnerArray, new object[] { stateMask }); + return (int)_miGetCount?.Invoke(InnerArray, [stateMask])!; } - internal int InnerArrayIndexOf(object item, int stateMask) + internal int InnerArrayIndexOf(object? item, int stateMask) { if (_miIndexOf == null) { - _miIndexOf = InnerArray?.GetType().GetMethod(@"IndexOf", new[] { typeof(object), typeof(int) }, null); + _miIndexOf = InnerArray?.GetType().GetMethod(@"IndexOf", [typeof(object), typeof(int)], null); } - return (int)_miIndexOf.Invoke(InnerArray, new[] { item, stateMask }); + return (int)_miIndexOf?.Invoke(InnerArray, [item, stateMask])!; } - internal int InnerArrayIndexOfIdentifier(object identifier, int stateMask) + internal int InnerArrayIndexOfIdentifier(object? identifier, int stateMask) { if (_miIndexOfIdentifier == null) { - _miIndexOfIdentifier = InnerArray?.GetType().GetMethod(@"IndexOfIdentifier", new[] { typeof(object), typeof(int) }, null); + _miIndexOfIdentifier = InnerArray?.GetType().GetMethod(@"IndexOfIdentifier", [typeof(object), typeof(int) + ], null); } - return (int)_miIndexOfIdentifier.Invoke(InnerArray, new[] { identifier, stateMask }); + return (int)_miIndexOfIdentifier?.Invoke(InnerArray, [identifier, stateMask])!; } internal object InnerArrayGetItem(int index, int stateMask) { if (_miGetItem == null) { - _miGetItem = InnerArray?.GetType().GetMethod(@"GetItem", new[] { typeof(int), typeof(int) }, null); + _miGetItem = InnerArray?.GetType().GetMethod(@"GetItem", [typeof(int), typeof(int)], null); } - return _miGetItem.Invoke(InnerArray, new object[] { index, stateMask }); + return _miGetItem?.Invoke(InnerArray, [index, stateMask])!; } internal object InnerArrayGetEntryObject(int index, int stateMask) @@ -776,37 +785,37 @@ internal object InnerArrayGetEntryObject(int index, int stateMask) _miGetEntryObject = InnerArray?.GetType().GetMethod(@"GetEntryObject", BindingFlags.NonPublic | BindingFlags.Instance); } - return _miGetEntryObject.Invoke(InnerArray, new object[] { index, stateMask }); + return _miGetEntryObject?.Invoke(InnerArray, [index, stateMask])!; } internal bool InnerArrayGetState(int index, int stateMask) { if (_miGetState == null) { - _miGetState = InnerArray?.GetType().GetMethod(@"GetState", new[] { typeof(int), typeof(int) }, null); + _miGetState = InnerArray?.GetType().GetMethod(@"GetState", [typeof(int), typeof(int)], null); } - return (bool)_miGetState.Invoke(InnerArray, new object[] { index, stateMask }); + return (bool)_miGetState?.Invoke(InnerArray, [index, stateMask])!; } internal void InnerArraySetState(int index, int stateMask, bool value) { if (_miSetState == null) { - _miSetState = InnerArray?.GetType().GetMethod(@"SetState", new[] { typeof(int), typeof(int), typeof(bool) }, null); + _miSetState = InnerArray?.GetType().GetMethod(@"SetState", [typeof(int), typeof(int), typeof(bool)], null); } - _miSetState.Invoke(InnerArray, new object[] { index, stateMask, value }); + _miSetState?.Invoke(InnerArray, [index, stateMask, value]); } internal IEnumerator InnerArrayGetEnumerator(int stateMask, bool anyBit) { if (_miGetEnumerator == null) { - _miGetEnumerator = InnerArray?.GetType().GetMethod(@"GetEnumerator", new[] { typeof(int), typeof(bool) }, null); + _miGetEnumerator = InnerArray?.GetType().GetMethod(@"GetEnumerator", [typeof(int), typeof(bool)], null); } - return (IEnumerator)_miGetEnumerator.Invoke(InnerArray, new object[] { stateMask, anyBit }); + return (IEnumerator)_miGetEnumerator?.Invoke(InnerArray, [stateMask, anyBit])!; } #endregion @@ -868,7 +877,7 @@ private void WmPaint(ref Message m) // Now blit from the bitmap from the screen to the real dc PI.BitBlt(hdc, 0, 0, realRect.Width, realRect.Height, _screenDC, 0, 0, PI.SRCCOPY); - // When disabled with no items the above code does not draw the background! Strange but true and + // When disabled with no items the above code does not draw the background! Strange but true, and // so we need to draw the background instead directly, without using a bit blitting of bitmap if (Items.Count == 0) { @@ -952,7 +961,7 @@ private void LbnSelChange() private readonly ViewDrawCheckBox _drawCheckBox; private readonly ViewLayoutFill _layoutFill; private readonly ViewDrawButton _drawButton; - private readonly InternalCheckedListBox? _listBox; + private readonly InternalCheckedListBox _listBox; private readonly FixedContentValue? _contentValues; private bool? _fixedActive; private ButtonStyle _style; @@ -962,9 +971,6 @@ private void LbnSelChange() private bool _alwaysActive; private bool _forcedLayout; private bool _trackingMouseEnter; - private float _cornerRoundingRadius; - private float _itemCornerRoundingRadius; - #endregion #region Events @@ -1200,13 +1206,9 @@ public KryptonCheckedListBox() // Add text box to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(_listBox); - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - _itemCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; } - private void OnCheckedListClick(object sender, EventArgs e) => + private void OnCheckedListClick(object? sender, EventArgs e) => // ReSharper disable RedundantBaseQualifier base.OnClick(e); // ReSharper restore RedundantBaseQualifier @@ -1226,37 +1228,13 @@ protected override void Dispose(bool disposing) #endregion #region Public - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - - /// Gets or sets the item corner rounding radius. - /// The item corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the item corner rounding radius.")] - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float ItemCornerRoundingRadius - { - get => _itemCornerRoundingRadius; - - set => SetItemCornerRoundingRadius(value); - } - /// /// Gets access to the contained CheckedListBox instance. /// [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)] - public ListBox? ListBox => _listBox; + public ListBox ListBox => _listBox; /// /// Gets access to the contained input control. @@ -1264,7 +1242,7 @@ public float ItemCornerRoundingRadius [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)] - public Control ContainedControl => ListBox!; + public Control ContainedControl => ListBox; /// /// Gets or sets the text for the control. @@ -1305,7 +1283,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -1345,7 +1323,7 @@ public override Color ForeColor [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int SelectedIndex { - get => _listBox?.SelectedIndex ?? -1; + get => _listBox.SelectedIndex; set => _listBox.SelectedIndex = value; } @@ -1359,8 +1337,8 @@ public int SelectedIndex [DefaultValue(null)] public object? SelectedValue { - get => _listBox?.SelectedValue; - set => _listBox.SelectedValue = value; + get => _listBox.SelectedValue; + set => _listBox.SelectedValue = value!; } /// @@ -1368,7 +1346,7 @@ public object? SelectedValue /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public ListBox.SelectedIndexCollection SelectedIndices => _listBox.SelectedIndices ?? new ListBox.SelectedIndexCollection(null); + public ListBox.SelectedIndexCollection SelectedIndices => _listBox.SelectedIndices; /// /// Gets or sets the currently selected item in the KryptonCheckedListBox. @@ -1378,7 +1356,7 @@ public object? SelectedValue [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public object? SelectedItem { - get => _listBox?.SelectedItem; + get => _listBox.SelectedItem; set => _listBox.SelectedItem = value; } @@ -1387,7 +1365,7 @@ public object? SelectedItem /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public ListBox.SelectedObjectCollection SelectedItems => _listBox?.SelectedItems ?? new ListBox.SelectedObjectCollection(null); + public ListBox.SelectedObjectCollection SelectedItems => _listBox.SelectedItems; /// /// Gets or sets the index of the first visible item in the KryptonCheckedListBox. @@ -1396,7 +1374,7 @@ public object? SelectedItem [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int TopIndex { - get => _listBox?.TopIndex ?? -1; + get => _listBox.TopIndex; set => _listBox.TopIndex = value; } @@ -1435,7 +1413,7 @@ public ButtonStyle ItemStyle [DefaultValue(0)] public virtual int HorizontalExtent { - get => _listBox?.HorizontalExtent ?? -1; + get => _listBox.HorizontalExtent; set => _listBox.HorizontalExtent = value; } @@ -1448,7 +1426,7 @@ public virtual int HorizontalExtent [DefaultValue(false)] public virtual bool HorizontalScrollbar { - get => _listBox?.HorizontalScrollbar ?? false; + get => _listBox.HorizontalScrollbar; set => _listBox.HorizontalScrollbar = value; } @@ -1461,7 +1439,7 @@ public virtual bool HorizontalScrollbar [DefaultValue(false)] public virtual bool ScrollAlwaysVisible { - get => _listBox?.ScrollAlwaysVisible ?? false; + get => _listBox.ScrollAlwaysVisible; set => _listBox.ScrollAlwaysVisible = value; } @@ -1481,7 +1459,7 @@ public virtual bool ScrollAlwaysVisible [DefaultValue(CheckedSelectionMode.One)] public virtual CheckedSelectionMode SelectionMode { - get => _listBox?.SelectionMode == System.Windows.Forms.SelectionMode.One + get => _listBox.SelectionMode == System.Windows.Forms.SelectionMode.One ? CheckedSelectionMode.One : CheckedSelectionMode.None; @@ -1498,7 +1476,7 @@ public virtual CheckedSelectionMode SelectionMode [DefaultValue(false)] public virtual bool Sorted { - get => _listBox?.Sorted ?? false; + get => _listBox.Sorted; set => _listBox.Sorted = value; } @@ -1512,7 +1490,7 @@ public virtual bool Sorted [MergableProperty(false)] [Localizable(true)] // ReSharper disable once MemberCanBeProtected.Global - public virtual ListBox.ObjectCollection Items => _listBox?.Items ?? new ListBox.ObjectCollection(null); + public virtual ListBox.ObjectCollection Items => _listBox.Items; /// /// Collection of checked items in this KryptonCheckedListBox. @@ -1537,7 +1515,7 @@ public virtual bool Sorted [DefaultValue(@"")] public string FormatString { - get => _listBox?.FormatString ?? string.Empty; + get => _listBox.FormatString; set => _listBox.FormatString = value; } @@ -1548,7 +1526,7 @@ public string FormatString [DefaultValue(false)] public bool FormattingEnabled { - get => _listBox?.FormattingEnabled ?? false; + get => _listBox.FormattingEnabled; set => _listBox.FormattingEnabled = value; } @@ -1611,7 +1589,7 @@ public PaletteBorderStyle BorderStyle private bool ShouldSerializeOverrideFocus() => !OverrideFocus.IsDefault; /// - /// Gets access to the check box image value overrides. + /// Gets access to the checkbox image value overrides. /// [Category(@"Visuals")] [Description(@"CheckBox image value overrides.")] @@ -1626,7 +1604,7 @@ public PaletteBorderStyle BorderStyle [Category(@"Visuals")] [Description(@"Overrides for defining common appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListStateRedirect? StateCommon { get; } + public PaletteListStateRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -1733,7 +1711,7 @@ public bool AlwaysActive /// /// Unselects all items in the KryptonCheckedListBox. /// - public void ClearSelected() => _listBox?.ClearSelected(); + public void ClearSelected() => _listBox.ClearSelected(); /// /// Returns a value indicating whether the specified item is checked. @@ -1787,7 +1765,7 @@ public void SetItemCheckState(int index, CheckState value) if (ice.NewValue != checkedState) { CheckedItems.SetCheckedState(index, ice.NewValue); - _listBox?.Invalidate(); + _listBox.Invalidate(); } } } @@ -1797,7 +1775,7 @@ public void SetItemCheckState(int index, CheckState value) /// /// The String to search for. /// The zero-based index of the first item found; returns -1 if no match is found. - public int FindString(string str) => _listBox?.FindString(str) ?? -1; + public int FindString(string str) => _listBox.FindString(str); /// /// Finds the first item after the given index which starts with the given string. The search is not case sensitive. @@ -1805,14 +1783,14 @@ public void SetItemCheckState(int index, CheckState value) /// The String to search for. /// The zero-based index of the item before the first item to be searched. Set to -1 to search from the beginning of the control. /// The zero-based index of the first item found; returns -1 if no match is found, or 0 if the s parameter specifies Empty. - public int FindString(string str, int startIndex) => _listBox?.FindString(str, startIndex) ?? -1; + public int FindString(string str, int startIndex) => _listBox.FindString(str, startIndex); /// /// Finds the first item in the list box that matches the specified string. /// /// The String to search for. /// The zero-based index of the first item found; returns -1 if no match is found. - public int FindStringExact(string str) => _listBox?.FindStringExact(str) ?? -1; + public int FindStringExact(string str) => _listBox.FindStringExact(str); /// /// Finds the first item after the specified index that matches the specified string. @@ -1820,35 +1798,35 @@ public void SetItemCheckState(int index, CheckState value) /// The String to search for. /// The zero-based index of the item before the first item to be searched. Set to -1 to search from the beginning of the control. /// The zero-based index of the first item found; returns -1 if no match is found, or 0 if the s parameter specifies Empty. - public int FindStringExact(string str, int startIndex) => _listBox?.FindStringExact(str, startIndex) ?? -1; + public int FindStringExact(string str, int startIndex) => _listBox.FindStringExact(str, startIndex); /// /// Returns the height of an item in the KryptonCheckedListBox. /// /// The index of the item to return the height of. /// The height, in pixels, of the item at the specified index. - public int GetItemHeight(int index) => _listBox?.GetItemHeight(index) ?? 0; + public int GetItemHeight(int index) => _listBox.GetItemHeight(index); /// /// Returns the bounding rectangle for an item in the KryptonCheckedListBox. /// /// The zero-based index of item whose bounding rectangle you want to return. /// A Rectangle that represents the bounding rectangle for the specified item. - public Rectangle GetItemRectangle(int index) => _listBox?.GetItemRectangle(index) ?? Rectangle.Empty; + public Rectangle GetItemRectangle(int index) => _listBox.GetItemRectangle(index); /// /// Returns a value indicating whether the specified item is selected. /// /// The zero-based index of the item that determines whether it is selected. /// true if the specified item is currently selected in the KryptonCheckedListBox; otherwise, false. - public bool GetSelected(int index) => _listBox?.GetSelected(index) ?? false; + public bool GetSelected(int index) => _listBox.GetSelected(index); /// /// Returns the zero-based index of the item at the specified coordinates. /// /// A Point object containing the coordinates used to obtain the item index. /// The zero-based index of the item found at the specified coordinates; returns ListBox.NoMatches if no match is found. - public int IndexFromPoint(Point p) => _listBox?.IndexFromPoint(p) ?? ListBox.NoMatches; + public int IndexFromPoint(Point p) => _listBox.IndexFromPoint(p); /// /// Returns the zero-based index of the item at the specified coordinates. @@ -1856,14 +1834,14 @@ public void SetItemCheckState(int index, CheckState value) /// The x-coordinate of the location to search. /// The y-coordinate of the location to search. /// The zero-based index of the item found at the specified coordinates; returns ListBox.NoMatches if no match is found. - public int IndexFromPoint(int x, int y) => _listBox?.IndexFromPoint(x, y) ?? ListBox.NoMatches; + public int IndexFromPoint(int x, int y) => _listBox.IndexFromPoint(x, y); /// /// Selects or clears the selection for the specified item in a KryptonCheckedListBox. /// /// The zero-based index of the item in a KryptonCheckedListBox to select or clear the selection for. /// true to select the specified item; otherwise, false. - public void SetSelected(int index, bool value) => _listBox?.SetSelected(index, value); + public void SetSelected(int index, bool value) => _listBox.SetSelected(index, value); /// /// Returns the text representation of the specified item. @@ -1872,17 +1850,17 @@ public void SetItemCheckState(int index, CheckState value) /// If the DisplayMember property is not specified, /// the value returned by GetItemText is the value of the item's ToString method. /// Otherwise, the method returns the string value of the member specified in the DisplayMember property for the object specified in the item parameter. - public string GetItemText(object item) => _listBox?.GetItemText(item) ?? string.Empty; + public string? GetItemText(object? item) => _listBox.GetItemText(item); /// /// Maintains performance while items are added to the ListBox one at a time by preventing the control from drawing until the EndUpdate method is called. /// - public void BeginUpdate() => _listBox?.BeginUpdate(); + public void BeginUpdate() => _listBox.BeginUpdate(); /// /// Resumes painting the ListBox control after painting is suspended by the BeginUpdate method. /// - public void EndUpdate() => _listBox?.EndUpdate(); + public void EndUpdate() => _listBox.EndUpdate(); /// /// Sets the fixed state of the control. @@ -1895,18 +1873,18 @@ public void SetItemCheckState(int index, CheckState value) /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public bool IsActive => _fixedActive ?? DesignMode || AlwaysActive || ContainsFocus || _mouseOver || (_listBox?.MouseOver ?? false); + public bool IsActive => _fixedActive ?? DesignMode || AlwaysActive || ContainsFocus || _mouseOver || (_listBox.MouseOver); /// /// Sets input focus to the control. /// /// true if the input focus request was successful; otherwise, false. - public new bool Focus() => ListBox?.Focus() == true; + public new bool Focus() => ListBox.Focus(); /// /// Activates the control. /// - public new void Select() => ListBox?.Select(); + public new void Select() => ListBox.Select(); #endregion #region Protected @@ -1982,12 +1960,9 @@ protected void ForceControlLayout() /// An EventArgs that contains the event data. protected override void OnPaletteChanged(EventArgs e) { - if (_listBox != null) - { - _listBox.Recreate(); - _listBox.RefreshItemSizes(); - _listBox.Invalidate(); - } + _listBox.Recreate(); + _listBox.RefreshItemSizes(); + _listBox.Invalidate(); base.OnPaletteChanged(e); } @@ -1997,9 +1972,9 @@ protected override void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected override void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected override void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { - _listBox?.RefreshItemSizes(); + _listBox.RefreshItemSizes(); base.OnPaletteChanged(e); } @@ -2071,9 +2046,9 @@ protected override void OnCausesValidationChanged(EventArgs e) /// Raises the Paint event. /// /// An PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { - Paint?.Invoke(this, e); + Paint?.Invoke(this, e!); base.OnPaint(e); } @@ -2121,7 +2096,7 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) { if (IsHandleCreated && !e.NeedLayout) { - _listBox?.Invalidate(); + _listBox.Invalidate(); } else { @@ -2143,10 +2118,10 @@ protected override void OnLayout(LayoutEventArgs levent) // Only use layout logic if control is fully initialized or if being forced // to allow a relayout or if in design mode. - if (IsHandleCreated || _forcedLayout || (DesignMode && (_listBox != null))) + if (IsHandleCreated || _forcedLayout || (DesignMode)) { Rectangle fillRect = _layoutFill.FillRect; - _listBox?.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); + _listBox.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); } } @@ -2158,7 +2133,7 @@ protected override void OnMouseEnter(EventArgs e) { _mouseOver = true; PerformNeedPaint(true); - _listBox?.Invalidate(); + _listBox.Invalidate(); base.OnMouseEnter(e); } @@ -2170,7 +2145,7 @@ protected override void OnMouseLeave(EventArgs e) { _mouseOver = false; PerformNeedPaint(true); - _listBox?.Invalidate(); + _listBox.Invalidate(); base.OnMouseLeave(e); } @@ -2189,28 +2164,20 @@ private void UpdateStateAndPalettes() // Get the correct palette settings to use IPaletteDouble doubleState = GetDoubleState(); _listBox.ViewDrawPanel.SetPalettes(doubleState.PaletteBack); - _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder); + _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder!); _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state; - if (IsActive) - { - state = PaletteState.Tracking; - } - else - { - state = Enabled ? PaletteState.Normal : PaletteState.Disabled; - } + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _listBox.ViewDrawPanel.ElementState = state; _drawDockerOuter.ElementState = state; } } - private IPaletteDouble GetDoubleState() => Enabled ? IsActive ? StateActive : StateNormal : StateDisabled; + private IPaletteDouble GetDoubleState() => Enabled ? (IsActive ? StateActive : StateNormal) : StateDisabled; - private void OnListBoxDrawItem(object sender, DrawItemEventArgs e) + private void OnListBoxDrawItem(object? sender, DrawItemEventArgs e) { // We cannot do anything with an invalid index if (e.Index < 0) @@ -2221,7 +2188,7 @@ private void OnListBoxDrawItem(object sender, DrawItemEventArgs e) // Update our content object with values from the list item UpdateContentFromItemIndex(e.Index); - // By default the button is in the normal state + // By default, the button is in the normal state var buttonState = PaletteState.Normal; // Is this item disabled @@ -2325,7 +2292,7 @@ private void OnListBoxDrawItem(object sender, DrawItemEventArgs e) } } - private void OnListBoxMeasureItem(object sender, MeasureItemEventArgs e) + private void OnListBoxMeasureItem(object? sender, MeasureItemEventArgs e) { UpdateContentFromItemIndex(e.Index); @@ -2342,7 +2309,7 @@ private void UpdateContentFromItemIndex(int index) // If the object exposes the rich interface then use is... if (Items[index] is IContentValues itemValues) { - _contentValues.ShortText = itemValues.GetShortText(); + _contentValues!.ShortText = itemValues.GetShortText(); _contentValues.LongText = itemValues.GetLongText(); _contentValues.Image = itemValues.GetImage(PaletteState.Normal); _contentValues.ImageTransparentColor = itemValues.GetImageTransparentColor(PaletteState.Normal); @@ -2350,14 +2317,14 @@ private void UpdateContentFromItemIndex(int index) else { // Get the text string for the item - _contentValues.ShortText = _listBox?.GetItemText(Items[index]); + _contentValues!.ShortText = _listBox.GetItemText(Items[index]); _contentValues.LongText = null; _contentValues.Image = null; - _contentValues.ImageTransparentColor = Color.Empty; + _contentValues.ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; } } - private void OnListBoxSelectedIndexChanged(object sender, EventArgs e) + private void OnListBoxSelectedIndexChanged(object? sender, EventArgs e) { // Only interested in changes of selected index if (_lastSelectedIndex != _listBox.SelectedIndex) @@ -2369,52 +2336,52 @@ private void OnListBoxSelectedIndexChanged(object sender, EventArgs e) } } - private void OnListBoxSelectedValueChanged(object sender, EventArgs e) + private void OnListBoxSelectedValueChanged(object? sender, EventArgs e) { UpdateStateAndPalettes(); - _listBox?.Invalidate(); + _listBox.Invalidate(); OnSelectedValueChanged(e); } - private void OnListBoxItemCheck(object sender, ItemCheckEventArgs e) => OnItemCheck(e); + private void OnListBoxItemCheck(object? sender, ItemCheckEventArgs e) => OnItemCheck(e); - private void OnListBoxFormat(object sender, ListControlConvertEventArgs e) => OnFormat(e); + private void OnListBoxFormat(object? sender, ListControlConvertEventArgs e) => OnFormat(e); - private void OnListBoxFormatInfoChanged(object sender, EventArgs e) => OnFormatInfoChanged(e); + private void OnListBoxFormatInfoChanged(object? sender, EventArgs e) => OnFormatInfoChanged(e); - private void OnListBoxFormatStringChanged(object sender, EventArgs e) => OnFormatStringChanged(e); + private void OnListBoxFormatStringChanged(object? sender, EventArgs e) => OnFormatStringChanged(e); - private void OnListBoxFormattingEnabledChanged(object sender, EventArgs e) => OnFormattingEnabledChanged(e); + private void OnListBoxFormattingEnabledChanged(object? sender, EventArgs e) => OnFormattingEnabledChanged(e); - private void OnListBoxGotFocus(object sender, EventArgs e) + private void OnListBoxGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); - _listBox?.Invalidate(); + _listBox.Invalidate(); PerformNeedPaint(true); OnGotFocus(e); } - private void OnListBoxLostFocus(object sender, EventArgs e) + private void OnListBoxLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); - _listBox?.Invalidate(); + _listBox.Invalidate(); PerformNeedPaint(true); OnLostFocus(e); } - private void OnListBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnListBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnListBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnListBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnListBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnListBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnListBoxValidated(object sender, EventArgs e) => OnValidated(e); + private void OnListBoxValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnListBoxValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnListBoxValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnListBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnListBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnListBoxMouseChange(object sender, EventArgs e) + private void OnListBoxMouseChange(object? sender, EventArgs e) { // Change in tracking state? if (_listBox.MouseOver != _trackingMouseEnter) @@ -2434,21 +2401,6 @@ private void OnListBoxMouseChange(object sender, EventArgs e) } } } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void SetItemCornerRoundingRadius(float? radius) - { - _itemCornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Item.Border.Rounding = _itemCornerRoundingRadius; - } - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorButton.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorButton.cs index c284324df..b57d48e00 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,7 +38,7 @@ public class KryptonColorButton : VisualSimpleBase, IButtonControl, IContentValu private Color _selectedColor; private Color _emptyBorderColor; private readonly List _recentColors; - private Image _wasImage; + private Image? _wasImage; private bool _wasEnabled; private bool _isDefault; private bool _useMnemonic; @@ -47,7 +47,7 @@ public class KryptonColorButton : VisualSimpleBase, IButtonControl, IContentValu private KryptonColorButtonCustomColorPreviewShape _customColorPreviewShape; // Context menu items - private readonly KryptonContextMenu _kryptonContextMenu; + private readonly KryptonContextMenu? _kryptonContextMenu; private readonly KryptonContextMenuSeparator _separatorTheme; private readonly KryptonContextMenuSeparator _separatorStandard; private readonly KryptonContextMenuSeparator _separatorRecent; @@ -129,33 +129,35 @@ public KryptonColorButton() DialogResult = DialogResult.None; _useMnemonic = true; MaxRecentColors = 10; - _recentColors = new List(); + _recentColors = []; _allowFullOpen = true; // Create the context menu items _kryptonContextMenu = new KryptonContextMenu(); _separatorTheme = new KryptonContextMenuSeparator(); - _headingTheme = new KryptonContextMenuHeading(KryptonLanguageManager.ColorStrings.ThemeColors); //@"Theme Colors"); + _headingTheme = new KryptonContextMenuHeading(KryptonManager.Strings.ColorStrings.ThemeColors); //@"Theme Colors"); _colorsTheme = new KryptonContextMenuColorColumns(ColorScheme.OfficeThemes); _separatorStandard = new KryptonContextMenuSeparator(); - _headingStandard = new KryptonContextMenuHeading(KryptonLanguageManager.ColorStrings.StandardColors); //@"Standard Colors"); + _headingStandard = new KryptonContextMenuHeading(KryptonManager.Strings.ColorStrings.StandardColors); //@"Standard Colors"); _colorsStandard = new KryptonContextMenuColorColumns(ColorScheme.OfficeStandard); _separatorRecent = new KryptonContextMenuSeparator(); - _headingRecent = new KryptonContextMenuHeading(KryptonLanguageManager.ColorStrings.RecentColors); //@"Recent Colors"); + _headingRecent = new KryptonContextMenuHeading(KryptonManager.Strings.ColorStrings.RecentColors); //@"Recent Colors"); _colorsRecent = new KryptonContextMenuColorColumns(ColorScheme.None); _separatorNoColor = new KryptonContextMenuSeparator(); - _itemNoColor = new KryptonContextMenuItem(/*@"&No Color"*/ KryptonLanguageManager.ColorStrings.NoColor, GenericImageResources.ButtonNoColor, OnClickNoColor); + _itemNoColor = new KryptonContextMenuItem(/*@"&No Color"*/ KryptonManager.Strings.ColorStrings.NoColor, GenericImageResources.ButtonNoColor, OnClickNoColor); _itemsNoColor = new KryptonContextMenuItems(); _itemsNoColor.Items.Add(_itemNoColor); _separatorMoreColors = new KryptonContextMenuSeparator(); - _itemMoreColors = new KryptonContextMenuItem(/*@"&More Colors..."*/ KryptonLanguageManager.ColorStrings.MoreColors, OnClickMoreColors); + _itemMoreColors = new KryptonContextMenuItem(/*@"&More Colors..."*/ KryptonManager.Strings.ColorStrings.MoreColors, OnClickMoreColors); _itemsMoreColors = new KryptonContextMenuItems(); _itemsMoreColors.Items.Add(_itemMoreColors); - _kryptonContextMenu.Items.AddRange(new KryptonContextMenuItemBase[] { _separatorTheme, _headingTheme, _colorsTheme, - _separatorStandard, _headingStandard, _colorsStandard, - _separatorRecent, _headingRecent, _colorsRecent, - _separatorNoColor, _itemsNoColor, - _separatorMoreColors, _itemsMoreColors}); + _kryptonContextMenu.Items.AddRange([ + _separatorTheme, _headingTheme, _colorsTheme, + _separatorStandard, _headingStandard, _colorsStandard, + _separatorRecent, _headingRecent, _colorsRecent, + _separatorNoColor, _itemsNoColor, + _separatorMoreColors, _itemsMoreColors + ]); // Create content storage Values = CreateButtonValues(NeedPaintDelegate); @@ -955,7 +957,7 @@ protected override void OnLostFocus(EventArgs e) protected override void OnClick(EventArgs e) { // Find the form this color button is on - Form owner = FindForm(); + Form? owner = FindForm(); // If we find a valid owner if (owner != null) @@ -1094,15 +1096,15 @@ protected virtual void OnKryptonCommandChanged(EventArgs e) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(Enabled): - Enabled = KryptonCommand.Enabled; + Enabled = KryptonCommand!.Enabled; break; case @"ImageSmall": - Values.Image = KryptonCommand.ImageSmall; + Values.Image = KryptonCommand!.ImageSmall; PerformNeedPaint(true); break; case nameof(Text): @@ -1139,9 +1141,9 @@ protected virtual ColorButtonValues CreateButtonValues(NeedPaintHandler needPain #endregion #region Implementation - private void OnButtonTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnButtonTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); - private void OnButtonClick(object sender, MouseEventArgs e) + private void OnButtonClick(object? sender, MouseEventArgs e) { var showingContextMenu = false; @@ -1184,7 +1186,7 @@ private bool ShowDropDown() } else { - _kryptonContextMenu.Palette = Palette; + _kryptonContextMenu.LocalCustomPalette = LocalCustomPalette; } } @@ -1233,7 +1235,7 @@ private bool ShowDropDown() DecideOnVisible(_separatorMoreColors, _itemsMoreColors); // Monitor relevant events inside the context menu - HookContextMenuEvents(_kryptonContextMenu.Items, true); + HookContextMenuEvents(_kryptonContextMenu!.Items, true); // Show relative to the screen rectangle cpma.KryptonContextMenu.Closed += OnKryptonContextMenuClosed; @@ -1264,17 +1266,17 @@ private bool ShowDropDown() private void OnContextMenuClosed(object sender, EventArgs e) => ContextMenuClosed(); - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { - var kcm = (KryptonContextMenu)sender; + var kcm = sender as KryptonContextMenu ?? throw new ArgumentNullException(nameof(sender)); kcm.Closed -= OnKryptonContextMenuClosed; ContextMenuClosed(); // Unhook from item events - HookContextMenuEvents(_kryptonContextMenu.Items, false); + HookContextMenuEvents(_kryptonContextMenu!.Items, false); } - private void OnButtonSelect(object sender, MouseEventArgs e) + private void OnButtonSelect(object? sender, MouseEventArgs e) { // Take the focus if allowed if (CanFocus) @@ -1317,7 +1319,7 @@ private void HookContextMenuEvents(KryptonContextMenuCollection collection, bool public void AddUpdateRecentColors(IList colors) { foreach (Color color in colors - .Where(static color => (color != null) && !color.Equals(Color.Empty)) + .Where(static color => (color != null) && !color.Equals(GlobalStaticValues.EMPTY_COLOR)) .Where(color => !Enumerable.Contains(_recentColors, color))) { // Add to start of the list @@ -1337,9 +1339,9 @@ private void UpdateRecentColors(Color color) if (AutoRecentColors) { // We do not add to recent colors if it is inside another color columns - foreach (KryptonContextMenuItemBase item in _kryptonContextMenu.Items) + foreach (KryptonContextMenuItemBase item in _kryptonContextMenu!.Items) { - // Only interested in the non-recent colors color columns + // Only interested in the non-recent colors, color columns if ((item != _colorsRecent) && (item is KryptonContextMenuColorColumns colors)) { // Cast to correct type @@ -1360,7 +1362,7 @@ private void UpdateRecentColors(Color color) } // If this color valid and so possible to become a recent color - if ((color != null) && !color.Equals(Color.Empty)) + if ((color != null) && !color.Equals(GlobalStaticValues.EMPTY_COLOR)) { var found = false; foreach (Color recentColor in _recentColors) @@ -1421,14 +1423,14 @@ private void UpdateContextMenu() // Each column is just a single color for (var i = 0; i < _recentColors.Count; i++) { - colors[i] = new[] { _recentColors[i] }; + colors[i] = [_recentColors[i]]; } _colorsRecent.SetCustomColors(colors); } // Should the no color entry be checked? - _itemNoColor.Checked = _selectedColor.Equals(Color.Empty); + _itemNoColor.Checked = _selectedColor.Equals(GlobalStaticValues.EMPTY_COLOR); } private void DecideOnVisible(KryptonContextMenuItemBase visible, KryptonContextMenuItemBase target) @@ -1439,7 +1441,7 @@ private void DecideOnVisible(KryptonContextMenuItemBase visible, KryptonContextM if (target.Visible) { // Check all items before the target - foreach (KryptonContextMenuItemBase item in _kryptonContextMenu.Items) + foreach (KryptonContextMenuItemBase item in _kryptonContextMenu!.Items) { // Finish when we reach the target if (item == target) @@ -1463,13 +1465,13 @@ private void DecideOnVisible(KryptonContextMenuItemBase visible, KryptonContextM visible.Visible = previous; } - private void OnColumnsTrackingColor(object sender, ColorEventArgs e) => OnTrackingColor(new ColorEventArgs(e.Color)); + private void OnColumnsTrackingColor(object? sender, ColorEventArgs e) => OnTrackingColor(new ColorEventArgs(e.Color)); - private void OnColumnsSelectedColorChanged(object sender, ColorEventArgs e) => SelectedColor = e.Color; + private void OnColumnsSelectedColorChanged(object? sender, ColorEventArgs e) => SelectedColor = e.Color; - private void OnClickNoColor(object sender, EventArgs e) => SelectedColor = Color.Empty; + private void OnClickNoColor(object? sender, EventArgs e) => SelectedColor = GlobalStaticValues.EMPTY_COLOR; - private void OnClickMoreColors(object sender, EventArgs e) + private void OnClickMoreColors(object? sender, EventArgs e) { // Give user a chance to cancel showing the Krypton more colors dialog var cea = new CancelEventArgs(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorDialog.cs index 650a4424a..ed785b14f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonColorDialog.cs @@ -1,11 +1,14 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. * */ #endregion +// Used only for this class +using Timer = System.Windows.Forms.Timer; + namespace Krypton.Toolkit { /// @@ -25,7 +28,7 @@ public class KryptonColorDialog : ColorDialog private CommonDialogHandler.Attributes _redEdit; private CommonDialogHandler.Attributes _greenEdit; private CommonDialogHandler.Attributes _blueEdit; - private System.Windows.Forms.Timer _alphaUpdateTimer; + private readonly Timer _alphaUpdateTimer; #endregion /// @@ -126,8 +129,8 @@ public bool ShowIcon public bool ShowAlphaSlider { get => _showAlphaSlider; - set - { + set + { _showAlphaSlider = value; if (value) { @@ -161,10 +164,10 @@ public bool ShowAlphaSlider } } - private void Timer1OnTick(object sender, EventArgs e) + private void Timer1OnTick(object? sender, EventArgs e) { var text = new StringBuilder(6); - if ( PI.GetWindowText(_redEdit.hWnd, text, 4) <= 0) + if (PI.GetWindowText(_redEdit.hWnd, text, 4) <= 0) { // Probably Closing, or in transition return; @@ -179,7 +182,7 @@ private void Timer1OnTick(object sender, EventArgs e) _alphaPanel.StateCommon.Color1 = Color.FromArgb(_alphaSlider.Value, red, green, blue); } - private void AlphaSlider_ValueChanged(object sender, EventArgs e) + private void AlphaSlider_ValueChanged(object? sender, EventArgs e) { _alphaSlider.ToolTipValues.Description = _alphaSlider.Value.ToString(CultureInfo.InvariantCulture); _alphaLabel.Text = _alphaSlider.ToolTipValues.Description; @@ -192,10 +195,10 @@ private void ClickCallback(CommonDialogHandler.Attributes originalControl) // - Enable Add custom colour if (originalControl.DlgCtrlId == 0x000002CF) { - originalControl.Button.Enabled = false; + originalControl.Button!.Enabled = false; foreach (CommonDialogHandler.Attributes control in _commonDialogHandler.Controls.Where(static control => control.DlgCtrlId == 0x000002C8)) { - control.Button.Enabled = true; + control.Button!.Enabled = true; break; } } @@ -210,29 +213,29 @@ private void ClickCallback(CommonDialogHandler.Attributes originalControl) protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam) { var (handled, retValue) = _commonDialogHandler.HookProc(hWnd, msg, wparam, lparam); - if (msg == PI.WM_.INITDIALOG ) + if (msg == PI.WM_.INITDIALOG) { if (!FullOpen) { // Find the Static colour set 000002D0 - var _clrColourBox = _commonDialogHandler.Controls.FirstOrDefault(ctl => ctl.DlgCtrlId == 0x000002D0); - if (_clrColourBox != null) + var clrColourBox = _commonDialogHandler.Controls.FirstOrDefault(ctl => ctl.DlgCtrlId == 0x000002D0); + if (clrColourBox != null) { - var rcClient = _clrColourBox.WinInfo.rcClient; + var rcClient = clrColourBox.WinInfo.rcClient; var lpPoint = new PI.POINT(rcClient.left, rcClient.top); PI.ScreenToClient(hWnd, ref lpPoint); - _clrColourBox.ClientLocation = new Point(lpPoint.X, lpPoint.Y); - _clrColourBox.Size = new Size(rcClient.right - rcClient.left, rcClient.bottom - rcClient.top); + clrColourBox.ClientLocation = new Point(lpPoint.X, lpPoint.Y); + clrColourBox.Size = new Size(rcClient.right - rcClient.left, rcClient.bottom - rcClient.top); } // Find the bottom of the OK button (Might not have OK text !!) 00000001 var btnOk = _commonDialogHandler.Controls.First(static ctl => ctl.DlgCtrlId == 0x00000001); // Now adjust the size so that it the correct display on "All" supported OS's // https://github.com/Krypton-Suite/Standard-Toolkit/issues/415 - Size toolBoxSize = _commonDialogHandler._wrapperForm.ClientSize; - if (_clrColourBox != null) + Size toolBoxSize = _commonDialogHandler._wrapperForm!.ClientSize; + if (clrColourBox != null) { - toolBoxSize.Width = _clrColourBox.Size.Width + 2 * _clrColourBox.ClientLocation.X; + toolBoxSize.Width = clrColourBox.Size.Width + 2 * clrColourBox.ClientLocation.X; } if (btnOk != null) @@ -247,31 +250,31 @@ protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wparam, IntPtr l if (_showAlphaSlider) { // Find the Static colour set 000002C5 - var _clrSolidColourBox = _commonDialogHandler.Controls.FirstOrDefault(ctl => ctl.DlgCtrlId == 0x000002C5); - if (_clrSolidColourBox != null) + var clrSolidColourBox = _commonDialogHandler.Controls.FirstOrDefault(ctl => ctl.DlgCtrlId == 0x000002C5); + if (clrSolidColourBox != null) { - var rcClient = _clrSolidColourBox.WinInfo.rcClient; + var rcClient = clrSolidColourBox.WinInfo.rcClient; var lpPoint = new PI.POINT(rcClient.left, rcClient.top); PI.ScreenToClient(hWnd, ref lpPoint); _alphaPanel.Location = new Point(lpPoint.X, lpPoint.Y); - _alphaPanel.Size = new Size((rcClient.right - rcClient.left)/2, rcClient.bottom - rcClient.top); + _alphaPanel.Size = new Size((rcClient.right - rcClient.left) / 2, rcClient.bottom - rcClient.top); } - _commonDialogHandler._wrapperForm.Controls[0].Controls.Add(_alphaPanel); + _commonDialogHandler._wrapperForm!.Controls[0].Controls.Add(_alphaPanel); // find the colour edit box's _redEdit = _commonDialogHandler.Controls.First(ctl => ctl.DlgCtrlId == 0x000002C2); _greenEdit = _commonDialogHandler.Controls.First(ctl => ctl.DlgCtrlId == 0x000002C3); _blueEdit = _commonDialogHandler.Controls.First(ctl => ctl.DlgCtrlId == 0x000002C4); // Add a slider - _alphaSlider.Location = _redEdit.ClientLocation with { X = _redEdit.ClientLocation.X + _redEdit.Size.Width+4 }; + _alphaSlider.Location = _redEdit.ClientLocation with { X = _redEdit.ClientLocation.X + _redEdit.Size.Width + 4 }; //_commonDialogHandler._wrapperForm.ClientSize - _alphaSlider.Size = new Size(_commonDialogHandler._wrapperForm.ClientSize.Width- _alphaSlider.Location.X+4, _blueEdit.ClientLocation.Y - _redEdit.ClientLocation.Y + _blueEdit.Size.Height); + _alphaSlider.Size = new Size(_commonDialogHandler._wrapperForm.ClientSize.Width - _alphaSlider.Location.X + 4, _blueEdit.ClientLocation.Y - _redEdit.ClientLocation.Y + _blueEdit.Size.Height); _commonDialogHandler._wrapperForm.Controls[0].Controls.Add(_alphaSlider); // Find the Add button var btnAdd = _commonDialogHandler.Controls.First(static ctl => ctl.DlgCtrlId == 0x00002C8); - btnAdd.Button.Parent.Width -= 16; + btnAdd.Button!.Parent!.Width -= 16; - _alphaLabel.Location = Point.Add(_blueEdit.ClientLocation, new Size(_blueEdit.Size.Width+2, _blueEdit.Size.Height) ); + _alphaLabel.Location = Point.Add(_blueEdit.ClientLocation, new Size(_blueEdit.Size.Width + 2, _blueEdit.Size.Height)); _commonDialogHandler._wrapperForm.Controls[0].Controls.Add(_alphaLabel); _alphaUpdateTimer.Enabled = true; } @@ -290,7 +293,7 @@ protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wparam, IntPtr l { var newSize = new Size(pos.cx, pos.cy); if (!FullOpen - && newSize.Width > _commonDialogHandler._wrapperForm.Size.Width + && newSize.Width > _commonDialogHandler._wrapperForm!.Size.Width ) { // Need to fiddle the width and height to workaround the Magic hidden "&d" button diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonComboBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonComboBox.cs index dbcb0bf59..2a18b0090 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonComboBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonComboBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -137,7 +137,7 @@ public InternalComboBox(KryptonComboBox kryptonComboBox) _kryptonComboBox = kryptonComboBox; // Remove from view until size for the first time by the Krypton control - ItemHeight = 15; + UpdateItemHeight(); // Ensure ItemHeight is set properly; see #1677 DropDownHeight = 200; //DrawMode = DrawMode.OwnerDrawFixed; // #20 fix, but this causes other problems; see #578 DrawMode = DrawMode.OwnerDrawVariable; @@ -201,7 +201,7 @@ public bool MouseOver /// /// The state for which the image is needed. /// Color value. - public virtual Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public virtual Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content long text. @@ -224,28 +224,7 @@ protected override void OnEnabledChanged(EventArgs e) /// Contains the event data. protected override void OnFontChanged(EventArgs e) { - // Working on Windows XP or earlier systems? - if (_osMajorVersion < 6) - { - // Fudge by adding one to the font height, this gives the actual space used by the - // combo box control to draw an individual item in the main part of the control - ItemHeight = Font.Height + 1; - } - else - { - // Vista performs differently depending of the use of themes... - if (IsAppThemed) - { - // Fudge by subtracting 1, which ensure correct sizing of combo box main area - ItemHeight = Font.Height - 1; - } - else - { - // On under Vista without themes is the font height the actual height used - // by the combo box for the space required for drawing the actual item - ItemHeight = Font.Height; - } - } + UpdateItemHeight(); base.OnFontChanged(e); } @@ -386,7 +365,7 @@ protected override void WndProc(ref Message m) } // Exclude border from being drawn, we need to take off another 2 pixels from all edges - PI.IntersectClipRect(hdc, rect.left + 2, rect.top + 2, rect.right - 2, rect.bottom - 2); + PI.IntersectClipRect(hdc, rect.left + 2, rect.top, rect.right - 2, rect.bottom); var displayText = _kryptonComboBox.Text; if (!string.IsNullOrWhiteSpace(_kryptonComboBox.CueHint.CueHintText) && string.IsNullOrEmpty(displayText) @@ -435,7 +414,7 @@ protected override void WndProc(ref Message m) rectangle = CommonHelper.ApplyPadding(VisualOrientation.Top, rectangle, states.Content.GetContentPadding(state)); // Find correct text color Color textColor = states.Content.GetContentShortTextColor1(state); - Font contentShortTextFont = states.Content.GetContentShortTextFont(state); + Font? contentShortTextFont = states.Content.GetContentShortTextFont(state); // Find correct background color Color backColor = states.PaletteBack.GetBackColor1(state); @@ -568,7 +547,7 @@ private void DrawDropButton(Graphics? g, Rectangle drawRect) // Fill background with the solid background color using (var backBrush = new SolidBrush(BackColor)) { - g.FillRectangle(backBrush, drawRect); + g?.FillRectangle(backBrush, drawRect); } // Ask the element to draw now @@ -578,13 +557,49 @@ private void DrawDropButton(Graphics? g, Rectangle drawRect) _viewButton.Render(renderContext); // Call the renderer directly to draw the drop down glyph - renderContext.Renderer.RenderGlyph.DrawInputControlDropDownGlyph(renderContext, + renderContext.Renderer!.RenderGlyph.DrawInputControlDropDownGlyph(renderContext, _viewButton.ClientRectangle, _palette.PaletteContent, state); } } + private void UpdateItemHeight() + { + // Working on Windows XP or earlier systems? + //if (_osMajorVersion < 6) + //{ + // // Fudge by adding one to the font height, this gives the actual space used by the + // // combo box control to draw an individual item in the main part of the control + // ItemHeight = Font.Height + 1; + //} + //else + //{ + // // Vista performs differently depending of the use of themes... + // if (IsAppThemed) + // { + // // Fudge by subtracting 1, which ensure correct sizing of combo box main area + // //ItemHeight = Font.Height - 1; + + // // #1455 - The lower part of the text can become clipped with chars like g, y, p, etc. + // // when subtracting one from the font height. + // ItemHeight = Font.Height; + // } + // else + // { + // // On under Vista without themes is the font height the actual height used + // // by the combo box for the space required for drawing the actual item + // ItemHeight = Font.Height; + // } + //} + + // #1455 - The lower part of the text can become clipped with chars like g, y, p, etc. + // when subtracting one from the font height. + ItemHeight = _osMajorVersion < 6 + ? Font.Height + 1 + : Font.Height; + } + private bool IsAppThemed { get @@ -714,9 +729,8 @@ protected override void WndProc(ref Message m) { var tme = new PI.TRACKMOUSEEVENTS { - // This structure needs to know its own size in bytes - cbSize = (uint)Marshal.SizeOf(typeof(PI.TRACKMOUSEEVENTS)), + cbSize = (uint)Marshal.SizeOf(), dwHoverTime = 100, // We need to know then the mouse leaves the client window area @@ -810,7 +824,7 @@ public ComboBoxButtonSpecCollection(KryptonComboBox owner) #region Instance Fields private VisualPopupToolTip? _visualPopupToolTip; - private readonly ButtonSpecManagerLayout _buttonManager; + private readonly ButtonSpecManagerLayout? _buttonManager; private readonly ViewLayoutDocker _drawDockerInner; private readonly ViewDrawDocker _drawDockerOuter; private readonly ViewLayoutFill _layoutFill; @@ -836,10 +850,32 @@ public ComboBoxButtonSpecCollection(KryptonComboBox owner) private bool _alwaysActive; private int _cachedHeight; private int _hoverIndex; - private float _cornerRoundingRadius; + + // #1697 Work-around + // When changing DropDownStyle while the control is disabled the newly selected style was not applied. + // _deferredComboBoxStyle caches the selected change which is applied when the control is enabled again. + private ComboBoxStyle? _deferredComboBoxStyle; #endregion #region Events + /// This event is not relevant for this class. + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler DoubleClick + { + add => base.DoubleClick += value; + remove => base.DoubleClick -= value; + } + + /// This event is not relevant for this class. + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event MouseEventHandler MouseDoubleClick + { + add => base.MouseDoubleClick += value; + remove => base.MouseDoubleClick -= value; + } + /// /// Occurs when [draw item]. /// @@ -1134,10 +1170,10 @@ public KryptonComboBox() // Create button specification collection manager _buttonManager = new ButtonSpecManagerLayout(this, Redirector, ButtonSpecs, null, - new[] { _drawDockerInner }, - new IPaletteMetric[] { StateCommon.ComboBox }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, - new[] { PaletteMetricPadding.HeaderButtonPaddingInputControl }, + [_drawDockerInner], + [StateCommon.ComboBox], + [PaletteMetricInt.HeaderButtonEdgeInsetInputControl], + [PaletteMetricPadding.HeaderButtonPaddingInputControl], CreateToolStripRenderer, NeedPaintDelegate); @@ -1155,15 +1191,17 @@ public KryptonComboBox() // Must set the initial font otherwise the Form level font setting will cause the control // to not work correctly. Happens on Vista when the Form has non-default Font setting. - IPaletteTriple triple = StateActive.ComboBox; + var triple = StateActive.ComboBox; _comboBox.BackColor = triple.PaletteBack.GetBackColor1(PaletteState.Tracking); - _comboBox.ForeColor = triple.PaletteContent.GetContentShortTextColor1(PaletteState.Tracking); - _comboBox.Font = triple.PaletteContent.GetContentShortTextFont(PaletteState.Tracking); + _comboBox.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(PaletteState.Tracking); + _comboBox.Font = triple.PaletteContent.GetContentShortTextFont(PaletteState.Tracking)!; AutoCompleteMode = AutoCompleteMode.None; AutoCompleteSource = AutoCompleteSource.None; - // Set `CornerRoundingRadius' to 'GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE' (-1) - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + // #1697 Work-around + // When changing DropDownStyle while the control is disabled the newly selected style was not applied. + // _deferredComboBoxStyle caches the selected change which is applied when the control is enabled again. + _deferredComboBoxStyle = null; } /// @@ -1181,7 +1219,7 @@ protected override void Dispose(bool disposing) OnCancelToolTip(this, EventArgs.Empty); // Remember to pull down the manager instance - _buttonManager.Destruct(); + _buttonManager?.Destruct(); } base.Dispose(disposing); @@ -1195,20 +1233,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - - private bool ShouldSerializeCornerRoundingRadius() => _cornerRoundingRadius != GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - /// /// Gets access to the common textbox appearance entries that other states can override. /// @@ -1308,7 +1332,7 @@ public DrawMode DrawMode [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)] - public ComboBox? ComboBox => _comboBox; + public ComboBox ComboBox => _comboBox; /// /// Gets access to the contained input control. @@ -1345,7 +1369,7 @@ public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -1373,7 +1397,7 @@ public override Color ForeColor } /// - /// Gets and sets the text associated associated with the control. + /// Gets and sets the text associated with the control. /// [AllowNull] public override string Text @@ -1388,7 +1412,7 @@ public override string Text [Bindable(true)] [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public object SelectedItem + public object? SelectedItem { get => _comboBox.SelectedItem; set => _comboBox.SelectedItem = value; @@ -1399,7 +1423,7 @@ public object SelectedItem /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string SelectedText + public string? SelectedText { get => _comboBox.SelectedText; set => _comboBox.SelectedText = value; @@ -1426,7 +1450,8 @@ public int SelectedIndex public object? SelectedValue { get => _comboBox.SelectedValue; - set => _comboBox.SelectedValue = value; + //null forgiving operator used, to remove the warning + set => _comboBox.SelectedValue = value!; } /// @@ -1538,11 +1563,11 @@ public int SelectionStart [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager.UseMnemonic; + get => _buttonManager!.UseMnemonic; set { - if (_buttonManager.UseMnemonic != value) + if (_buttonManager!.UseMnemonic != value) { _buttonManager.UseMnemonic = value; PerformNeedPaint(true); @@ -1580,19 +1605,38 @@ public bool AlwaysActive [RefreshProperties(RefreshProperties.Repaint)] public ComboBoxStyle DropDownStyle { - get => _comboBox.DropDownStyle; + // #1697 Work-around + // When _deferredComboBoxStyle has been set this value takes precedence over _comboBox.DropDownStyle + get => _deferredComboBoxStyle.HasValue + ? _deferredComboBoxStyle.Value + : _comboBox.DropDownStyle; set { - if (_comboBox.DropDownStyle != value) + // #1697 Work-around + // If the _deferredComboBoxStyle has been set and DropDownStyle is changed again while the control is disabled this change has to be recorded. + if (_comboBox.DropDownStyle != value || (_deferredComboBoxStyle.HasValue && _deferredComboBoxStyle.Value != value)) { if (value == ComboBoxStyle.Simple) { throw new ArgumentOutOfRangeException(nameof(_comboBox.DropDownStyle), @"KryptonComboBox does not support the DropDownStyle.Simple style."); } - _comboBox.DropDownStyle = value; - UpdateEditControl(); + // #1697 Work-around + // When changing DropDownStyle while the control is disabled the newly selected style was not applied. + // _deferredComboBoxStyle caches the selected change which is applied when the control is enabled again. + if (Enabled) + { + _comboBox.DropDownStyle = value; + UpdateEditControl(); + } + else + { + + // #1697 Work-around + // If the controls is disabled, record the change in DropDownStyle + _deferredComboBoxStyle = value; + } } } } @@ -1846,7 +1890,6 @@ public AutoCompleteStringCollection AutoCompleteCustomSource public AutoCompleteMode AutoCompleteMode { get => _comboBox.AutoCompleteMode; - set => _comboBox.AutoCompleteMode = value; } @@ -1860,7 +1903,6 @@ public AutoCompleteMode AutoCompleteMode public AutoCompleteSource AutoCompleteSource { get => _comboBox.AutoCompleteSource; - set => _comboBox.AutoCompleteSource = value; } @@ -2034,12 +2076,12 @@ public bool FormattingEnabled /// Sets input focus to the control. /// /// true if the input focus request was successful; otherwise, false. - public new bool Focus() => ComboBox != null && ComboBox.Focus(); + public new bool Focus() => ComboBox.Focus(); /// /// Activates the control. /// - public new void Select() => ComboBox?.Select(); + public new void Select() => ComboBox.Select(); /// /// Get the preferred size of the control based on a proposed size. @@ -2138,9 +2180,9 @@ public bool DesignerGetHitTest(Point pt) /// Internal designing mode method. /// /// Mouse location. - public Component DesignerComponentFromPoint(Point pt) => + public Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision /// @@ -2343,13 +2385,22 @@ protected override void OnEnabledChanged(EventArgs e) _drawDockerOuter.Enabled = Enabled; // Update state to reflect change in enabled state - _buttonManager.RefreshButtons(); + _buttonManager?.RefreshButtons(); // Change in enabled state requires a layout and repaint PerformNeedPaint(true); // Let base class fire standard event base.OnEnabledChanged(e); + + // #1697 Work-around + // When changing DropDownStyle while the control is disabled the newly selected style was not applied. + if (Enabled && _deferredComboBoxStyle.HasValue) + { + DropDownStyle = _deferredComboBoxStyle.Value; + _deferredComboBoxStyle = null; + } + } /// @@ -2406,7 +2457,7 @@ protected override void OnCausesValidationChanged(EventArgs e) /// Raises the Paint event. /// /// An PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { // First time we paint we perform a layout to ensure drawing works correctly if (_firstTimePaint) @@ -2415,8 +2466,14 @@ protected override void OnPaint(PaintEventArgs e) ForceControlLayout(); } + // ToDo: Create a new API for this in a later version + //if (StateCommon.ComboBox.Content.SynchronizeDropDownWidth) + //{ + // DropDownWidth = Size.Width; + //} + base.OnPaint(e); - Paint?.Invoke(this, e); + Paint?.Invoke(this, e!); } /// @@ -2473,17 +2530,14 @@ protected override void OnGotFocus(EventArgs e) /// Event details. protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { - if (_comboBox != null) - { - UpdateStateAndPalettes(); - IPaletteTriple triple = GetComboBoxTripleState(); - PaletteState state = _drawDockerOuter.State; - _comboBox.BackColor = triple.PaletteBack.GetBackColor1(state); - _comboBox.ForeColor = triple.PaletteContent.GetContentShortTextColor1(state); - _comboBox.Font = triple.PaletteContent.GetContentShortTextFont(state); - _comboBox.ClearAppThemed(); - _comboHolder.BackColor = _comboBox.BackColor; - } + UpdateStateAndPalettes(); + var triple = GetComboBoxTripleState(); + PaletteState state = _drawDockerOuter.State; + _comboBox.BackColor = triple.PaletteBack.GetBackColor1(state); + _comboBox.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(state); + _comboBox.Font = triple.PaletteContent.GetContentShortTextFont(state)!; + _comboBox.ClearAppThemed(); + _comboHolder.BackColor = _comboBox.BackColor; base.OnUserPreferenceChanged(sender, e); } @@ -2504,25 +2558,30 @@ protected override void OnLayout(LayoutEventArgs levent) // Let base class calculate fill rectangle base.OnLayout(levent); - // Only use layout logic if control is fully initialized or if being forced - // to allow a relayout or if in design mode. - if (_forcedLayout || (DesignMode && (_comboHolder != null))) + try { - // Only need to relayout if there is something that would be visible - if (_layoutFill.FillRect is { Height: > 0, Width: > 0 }) + // Only use layout logic if control is fully initialized or if being forced + // to allow a relayout or if in design mode. + if (_forcedLayout || (DesignMode && (_comboHolder != null))) { - // Only update the bounds if they have changed - Rectangle fillRect = _layoutFill.FillRect; - if (fillRect != _comboHolder.Bounds) + // Only need to relayout if there is something that would be visible + if (_layoutFill.FillRect is { Height: > 0, Width: > 0 }) { - _comboHolder.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); - _comboBox.SetBounds(-(1 + _layoutPadding.Left), - -(1 + _layoutPadding.Top), - fillRect.Width + 2 + _layoutPadding.Right, - fillRect.Height + 2 + _layoutPadding.Bottom); + // Only update the bounds if they have changed + Rectangle fillRect = _layoutFill.FillRect; + if (fillRect != _comboHolder.Bounds) + { + _comboHolder.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); + _comboBox.SetBounds(-(1 + _layoutPadding.Left), -(1 + _layoutPadding.Top), fillRect.Width + 2 + _layoutPadding.Right, fillRect.Height + 2 + _layoutPadding.Bottom); + } } } } + catch + { + // Probably creation order in the designer is a bit wonky... + // Ignore for now + } } } @@ -2584,11 +2643,11 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) if (!IsDisposed && !Disposing) { UpdateStateAndPalettes(); - IPaletteTriple triple = GetComboBoxTripleState(); + var triple = GetComboBoxTripleState(); PaletteState state = _drawDockerOuter.State; _comboBox.BackColor = triple.PaletteBack.GetBackColor1(state); - _comboBox.ForeColor = triple.PaletteContent.GetContentShortTextColor1(state); - _comboBox.Font = triple.PaletteContent.GetContentShortTextFont(state); + _comboBox.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(state); + _comboBox.Font = triple.PaletteContent.GetContentShortTextFont(state)!; _comboHolder.BackColor = _comboBox.BackColor; } @@ -2610,7 +2669,7 @@ protected override void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected override void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected override void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { base.OnPaletteChanged(e); _comboBox.Invalidate(); @@ -2688,7 +2747,7 @@ private void AttachEditControl() } } - private void UpdateEditControl() + internal void UpdateEditControl() { AttachEditControl(); @@ -2704,14 +2763,14 @@ private void UpdateEditControl() private void UpdateStateAndPalettes() { // Get the correct palette settings to use - IPaletteTriple tripleState = GetComboBoxTripleState(); - _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder); + var tripleState = GetComboBoxTripleState(); + _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder!); // Update enabled state _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDockerOuter.ElementState = state; } @@ -2730,7 +2789,7 @@ private int PreferredHeight } } - private void OnComboBoxDrawItem(object sender, DrawItemEventArgs e) + private void OnComboBoxDrawItem(object? sender, DrawItemEventArgs e) { Rectangle drawBounds = e.Bounds; @@ -2761,7 +2820,7 @@ private void OnComboBoxDrawItem(object sender, DrawItemEventArgs e) // Set the correct text rendering hint for the text drawing. We only draw if the edit text is enabled so we // just always grab the normal state value. Without this line the wrong hint can occur because it inherits // it from the device context. Resulting in blurred text. - e.Graphics.TextRenderingHint = CommonHelper.PaletteTextHintToRenderingHint(StateNormal.Item.PaletteContent.GetContentShortTextHint(PaletteState.Normal)); + e.Graphics.TextRenderingHint = CommonHelper.PaletteTextHintToRenderingHint(StateNormal.Item.PaletteContent!.GetContentShortTextHint(PaletteState.Normal)); TextFormatFlags flags = TextFormatFlags.TextBoxControl | TextFormatFlags.NoPadding; @@ -2790,7 +2849,7 @@ private void OnComboBoxDrawItem(object sender, DrawItemEventArgs e) // Update our content object with values from the list item UpdateContentFromItemIndex(e.Index); - // By default the button is in the normal state + // By default, the button is in the normal state var buttonState = PaletteState.Normal; // Is this item disabled @@ -2808,7 +2867,7 @@ private void OnComboBoxDrawItem(object sender, DrawItemEventArgs e) { _hoverIndex = e.Index; // Raise the Hover event - var ev = new HoveredSelectionChangedEventArgs(e.Bounds, e.Index, Items[e.Index]); + var ev = new HoveredSelectionChangedEventArgs(e.Bounds, e.Index, Items[e.Index]!); OnHoverSelectionChanged(ev); } } @@ -2870,7 +2929,7 @@ private void OnComboBoxDrawItem(object sender, DrawItemEventArgs e) } } - private void OnComboBoxMeasureItem(object sender, MeasureItemEventArgs e) + private void OnComboBoxMeasureItem(object? sender, MeasureItemEventArgs e) { UpdateContentFromItemIndex(e.Index); @@ -2886,7 +2945,7 @@ private void UpdateContentFromItemIndex(int index) // If the object exposes the rich interface then use is... if (Items[index] is IContentValues itemValues) { - _contentValues.ShortText = itemValues.GetShortText(); + _contentValues!.ShortText = itemValues.GetShortText(); _contentValues.LongText = itemValues.GetLongText(); _contentValues.Image = itemValues.GetImage(PaletteState.Normal); _contentValues.ImageTransparentColor = itemValues.GetImageTransparentColor(PaletteState.Normal); @@ -2894,10 +2953,10 @@ private void UpdateContentFromItemIndex(int index) else { // Get the text string for the item - _contentValues.ShortText = _comboBox.GetItemText(Items[index]); + _contentValues!.ShortText = _comboBox.GetItemText(Items[index]); _contentValues.LongText = null; _contentValues.Image = null; - _contentValues.ImageTransparentColor = Color.Empty; + _contentValues.ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; } // Always ensure there is some text that can be measured, if only a single space. The height of @@ -2909,7 +2968,7 @@ private void UpdateContentFromItemIndex(int index) } } - private void OnComboBoxMouseChange(object sender, EventArgs e) + private void OnComboBoxMouseChange(object? sender, EventArgs e) { // Find new tracking mouse change state var tracking = _comboBox.MouseOver || _subclassEdit is { MouseOver: true }; @@ -2936,17 +2995,17 @@ private void OnComboBoxMouseChange(object sender, EventArgs e) _comboBox.Invalidate(); } - private void OnComboBoxGotFocus(object sender, EventArgs e) + private void OnComboBoxGotFocus(object? sender, EventArgs e) { if (DropDownStyle == ComboBoxStyle.DropDown) { - _subclassEdit.Visible = true; + _subclassEdit!.Visible = true; PaletteState state = Enabled ? IsActive ? PaletteState.Tracking : PaletteState.Normal : PaletteState.Disabled; - _comboBox.Font = GetComboBoxTripleState().Content.GetContentShortTextFont(state); + _comboBox.Font = GetComboBoxTripleState().Content.GetContentShortTextFont(state)!; } base.OnGotFocus(e); @@ -2954,12 +3013,12 @@ private void OnComboBoxGotFocus(object sender, EventArgs e) _comboBox.Invalidate(); } - private void OnComboBoxLostFocus(object sender, EventArgs e) + private void OnComboBoxLostFocus(object? sender, EventArgs e) { if (DropDownStyle == ComboBoxStyle.DropDown) { - _subclassEdit.Visible = false; - _comboBox.Font = GetComboBoxTripleState().Content.GetContentShortTextFont(PaletteState.Normal); + _subclassEdit!.Visible = false; + _comboBox.Font = GetComboBoxTripleState().Content.GetContentShortTextFont(PaletteState.Normal)!; } // ReSharper disable RedundantBaseQualifier @@ -2969,28 +3028,28 @@ private void OnComboBoxLostFocus(object sender, EventArgs e) _comboBox.Invalidate(); } - private void OnComboBoxTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnComboBoxTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnComboBoxTextUpdate(object sender, EventArgs e) => OnTextUpdate(e); + private void OnComboBoxTextUpdate(object? sender, EventArgs e) => OnTextUpdate(e); - private void OnComboBoxSelectionChangeCommitted(object sender, EventArgs e) => OnSelectionChangeCommitted(e); + private void OnComboBoxSelectionChangeCommitted(object? sender, EventArgs e) => OnSelectionChangeCommitted(e); - private void OnComboBoxSelectedIndexChanged(object sender, EventArgs e) => OnSelectedIndexChanged(e); + private void OnComboBoxSelectedIndexChanged(object? sender, EventArgs e) => OnSelectedIndexChanged(e); - private void OnComboBoxDropDownStyleChanged(object sender, EventArgs e) => OnDropDownStyleChanged(e); + private void OnComboBoxDropDownStyleChanged(object? sender, EventArgs e) => OnDropDownStyleChanged(e); - private void OnComboBoxDataSourceChanged(object sender, EventArgs e) => OnDataSourceChanged(e); + private void OnComboBoxDataSourceChanged(object? sender, EventArgs e) => OnDataSourceChanged(e); - private void OnComboBoxDisplayMemberChanged(object sender, EventArgs e) => OnDisplayMemberChanged(e); + private void OnComboBoxDisplayMemberChanged(object? sender, EventArgs e) => OnDisplayMemberChanged(e); - private void OnComboBoxDropDownClosed(object sender, EventArgs e) + private void OnComboBoxDropDownClosed(object? sender, EventArgs e) { _comboBox.Dropped = false; Refresh(); OnDropDownClosed(e); } - private void OnComboBoxDropDown(object sender, EventArgs e) + private void OnComboBoxDropDown(object? sender, EventArgs e) { _comboBox.Dropped = true; _hoverIndex = -1; @@ -2998,27 +3057,27 @@ private void OnComboBoxDropDown(object sender, EventArgs e) OnDropDown(e); } - private void OnComboBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnComboBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnComboBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnComboBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnComboBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnComboBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnComboBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnComboBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnComboBoxValidated(object sender, EventArgs e) => OnValidated(e); + private void OnComboBoxValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnComboBoxValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnComboBoxValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnComboBoxFormat(object sender, ListControlConvertEventArgs e) => OnFormat(e); + private void OnComboBoxFormat(object? sender, ListControlConvertEventArgs e) => OnFormat(e); - private void OnComboBoxFormatInfoChanged(object sender, EventArgs e) => OnFormatInfoChanged(e); + private void OnComboBoxFormatInfoChanged(object? sender, EventArgs e) => OnFormatInfoChanged(e); - private void OnComboBoxFormatStringChanged(object sender, EventArgs e) => OnFormatStringChanged(e); + private void OnComboBoxFormatStringChanged(object? sender, EventArgs e) => OnFormatStringChanged(e); - private void OnComboBoxFormattingEnabledChanged(object sender, EventArgs e) => OnFormattingEnabledChanged(e); + private void OnComboBoxFormattingEnabledChanged(object? sender, EventArgs e) => OnFormattingEnabledChanged(e); - private void OnComboBoxSelectedValueChanged(object sender, EventArgs e) + private void OnComboBoxSelectedValueChanged(object? sender, EventArgs e) { UpdateEditControl(); PerformNeedPaint(false); @@ -3026,9 +3085,9 @@ private void OnComboBoxSelectedValueChanged(object sender, EventArgs e) OnSelectedValueChanged(e); } - private void OnComboBoxValueMemberChanged(object sender, EventArgs e) => OnValueMemberChanged(e); + private void OnComboBoxValueMemberChanged(object? sender, EventArgs e) => OnValueMemberChanged(e); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed && !Disposing) { @@ -3048,7 +3107,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) var shadow = true; // Find the button spec associated with the tooltip request - ButtonSpec? buttonSpec = _buttonManager.ButtonSpecFromView(e.Target); + ButtonSpec? buttonSpec = _buttonManager!.ButtonSpecFromView(e.Target); // If the tooltip is for a button spec if (buttonSpec != null) @@ -3088,7 +3147,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) CommonHelper.ContentStyleFromLabelStyle(toolTipStyle), shadow); - _visualPopupToolTip.Disposed += OnVisualPopupToolTipDisposed!; + _visualPopupToolTip.Disposed += OnVisualPopupToolTipDisposed; _visualPopupToolTip.ShowRelativeTo(e.Target, e.ControlMousePosition); } } @@ -3096,15 +3155,15 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } // Remove any currently showing tooltip - private void OnCancelToolTip(object sender, EventArgs e) => _visualPopupToolTip?.Dispose(); + private void OnCancelToolTip(object? sender, EventArgs e) => _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; - popupToolTip.Disposed -= OnVisualPopupToolTipDisposed!; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); + popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; - // Not showing a popup page any more + // Not showing a popup page anymore _visualPopupToolTip = null; } @@ -3136,16 +3195,9 @@ private void ShowToolTip(ToolTipNeededEventArgs e, Point location) tip.ShowCalculatingSize(PointToScreen(point)); } - private void OnDoubleClick(object sender, EventArgs e) => base.OnDoubleClick(e); - - private void OnMouseDoubleClick(object sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); + private void OnDoubleClick(object? sender, EventArgs e) => base.OnDoubleClick(e); - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.ComboBox.Border.Rounding = _cornerRoundingRadius; - } + private void OnMouseDoubleClick(object? sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCommand.cs index 940472c46..fdc7f04b8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCommand.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -72,7 +72,7 @@ public KryptonCommand() _textLine2 = string.Empty; _imageSmall = null; _imageLarge = null; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _commandType = KryptonCommandType.General; _assignedButtonSpec = null; } @@ -335,7 +335,7 @@ public Image? ImageLarge [Localizable(true)] [Category(@"Appearance")] [Description(@"Command image transparent color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageTransparentColor { get => _imageTransparentColor; @@ -407,49 +407,49 @@ private void UpdateCommandType(KryptonCommandType commandType) case KryptonCommandType.General: break; case KryptonCommandType.HelpCommand: - SwitchToHelpCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToHelpCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarCopyCommand: - SwitchToCopyCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToCopyCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarCutCommand: - SwitchToCutCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToCutCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarNewCommand: - SwitchToNewCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToNewCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarOpenCommand: - SwitchToOpenCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToOpenCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarPageSetupCommand: - SwitchToPageSetupCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToPageSetupCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarPasteCommand: - SwitchToPasteCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToPasteCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarPrintCommand: - SwitchToPrintCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToPrintCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarPrintPreviewCommand: - SwitchToPrintPreviewCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToPrintPreviewCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarQuickPrintCommand: - SwitchToQuickPrintCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToQuickPrintCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarRedoCommand: - SwitchToRedoCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToRedoCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarSaveAllCommand: - SwitchToSaveAllCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToSaveAllCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarSaveAsCommand: - SwitchToSaveAsCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToSaveAsCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarSaveCommand: - SwitchToSaveCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToSaveCommand(KryptonManager.CurrentGlobalPaletteMode); break; case KryptonCommandType.IntegratedToolBarUndoCommand: - SwitchToUndoCommand(KryptonManager.InternalGlobalPaletteMode); + SwitchToUndoCommand(KryptonManager.CurrentGlobalPaletteMode); break; default: throw new ArgumentOutOfRangeException(nameof(commandType), commandType, null); @@ -468,7 +468,8 @@ private void SwitchToUndoCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -480,7 +481,8 @@ private void SwitchToUndoCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -502,12 +504,14 @@ private void SwitchToUndoCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -536,7 +540,8 @@ private void SwitchToSaveCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -548,7 +553,8 @@ private void SwitchToSaveCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -570,12 +576,14 @@ private void SwitchToSaveCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -604,7 +612,8 @@ private void SwitchToSaveAsCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -616,7 +625,8 @@ private void SwitchToSaveAsCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -638,12 +648,14 @@ private void SwitchToSaveAsCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -672,7 +684,8 @@ private void SwitchToSaveAllCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -684,7 +697,8 @@ private void SwitchToSaveAllCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -706,12 +720,14 @@ private void SwitchToSaveAllCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -740,7 +756,8 @@ private void SwitchToRedoCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -752,7 +769,8 @@ private void SwitchToRedoCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -774,12 +792,14 @@ private void SwitchToRedoCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -806,7 +826,8 @@ private void SwitchToQuickPrintCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(GenericToolbarImageResources.GenericQuickPrint); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -818,7 +839,8 @@ private void SwitchToQuickPrintCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -840,12 +862,14 @@ private void SwitchToQuickPrintCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarQuickPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -874,7 +898,8 @@ private void SwitchToPrintPreviewCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -886,7 +911,8 @@ private void SwitchToPrintPreviewCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -908,12 +934,14 @@ private void SwitchToPrintPreviewCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPrintPreviewNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -942,7 +970,8 @@ private void SwitchToPrintCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPrintNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -954,7 +983,8 @@ private void SwitchToPrintCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -976,12 +1006,14 @@ private void SwitchToPrintCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1010,7 +1042,8 @@ private void SwitchToPasteCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -1022,7 +1055,8 @@ private void SwitchToPasteCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -1044,12 +1078,14 @@ private void SwitchToPasteCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1078,7 +1114,8 @@ private void SwitchToPageSetupCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPageSetupNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -1090,7 +1127,8 @@ private void SwitchToPageSetupCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -1112,12 +1150,14 @@ private void SwitchToPageSetupCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPageSetupNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1146,7 +1186,8 @@ private void SwitchToOpenCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarOpenNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -1158,7 +1199,8 @@ private void SwitchToOpenCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -1180,12 +1222,14 @@ private void SwitchToOpenCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarOpenNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1214,7 +1258,8 @@ private void SwitchToNewCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarNewNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -1226,7 +1271,8 @@ private void SwitchToNewCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -1248,12 +1294,14 @@ private void SwitchToNewCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarNewNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1282,7 +1330,8 @@ private void SwitchToCutCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarCutNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -1294,7 +1343,8 @@ private void SwitchToCutCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -1316,12 +1366,14 @@ private void SwitchToCutCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarCutNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1350,7 +1402,8 @@ private void SwitchToCopyCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -1362,7 +1415,8 @@ private void SwitchToCopyCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -1384,12 +1438,14 @@ private void SwitchToCopyCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1418,7 +1474,8 @@ private void SwitchToHelpCommand(PaletteMode paletteMode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ControlBoxResources.Office2003HelpIconNormal); break; - case PaletteMode.Office2007DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: case PaletteMode.Office2007BlueDarkMode: case PaletteMode.Office2007BlueLightMode: @@ -1430,7 +1487,8 @@ private void SwitchToHelpCommand(PaletteMode paletteMode) case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarHelpNormal); break; - case PaletteMode.Office2010DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: case PaletteMode.Office2010BlueDarkMode: case PaletteMode.Office2010BlueLightMode: @@ -1452,12 +1510,14 @@ private void SwitchToHelpCommand(PaletteMode paletteMode) case PaletteMode.Custom: UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ControlBoxResources.Office2013HelpNormal); break; - case PaletteMode.Microsoft365DarkGray: + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: case PaletteMode.Microsoft365BlackDarkMode: case PaletteMode.Microsoft365Blue: @@ -1476,7 +1536,7 @@ private void SwitchToHelpCommand(PaletteMode paletteMode) /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Sets the text. /// The value. diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCommandLinkButton.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCommandLinkButton.cs new file mode 100644 index 000000000..24394a98b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCommandLinkButton.cs @@ -0,0 +1,732 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Combines button functionality with the styling features of the Krypton Toolkit. + /// Main code taken from KryptonButton, then trimmed out to force the CommandLink layout. + [ToolboxBitmap(typeof(KryptonCommandLinkButton), @"ToolboxBitmaps.KryptonCommandLinkButton.bmp")] + [ToolboxItem(true)] + [DefaultEvent("Click")] + [DefaultProperty("Heading")] + [Designer(typeof(KryptonCommandLinkButtonDesigner))] + [DesignerCategory("code")] +#if NET6_0 +#pragma warning disable CS0618 +#endif + [ClassInterface(ClassInterfaceType.AutoDispatch)] +#if NET6_0 +#pragma warning restore CS0618 +#endif + [DisplayName("Krypton Command Link")] + [Description("A Krypton Command Link Button.")] + [ComVisible(true)] + public class KryptonCommandLinkButton : VisualSimpleBase, IButtonControl + { + // [ClassInterface(ClassInterfaceType.AutoDispatch)] + // generates warning CS0618: + // 'ClassInterfaceType.AutoDispatch' is obsolete: 'Support for IDispatch may be unavailable in future releases.' + // Krypton.Toolkit 2022 (net6.0-windows) + // + // Only for net6.0 and not for newer releases. + // + // Therefore the warning has been disabled for NET 6.0, since it has only been marked as obsolete in future releases + // but does seems to remain supported in contrast to the warning + // + // May it become marked obsolete in future releases new warnings will appear. + + #region Static Fields + + private const int BCM_SETSHIELD = 0x0000160C; + + #endregion + + #region Instance Fields + + private bool _isDefault; + private bool _useMnemonic; + private bool _wasEnabled; + private ButtonStyle _buttonStyle; + private IKryptonCommand? _command; + private readonly ButtonController _buttonController; + private readonly PaletteTripleOverride _overrideFocus; + private readonly PaletteTripleOverride _overrideNormal; + private readonly PaletteTripleOverride _overridePressed; + private readonly PaletteTripleOverride _overrideTracking; + private readonly ViewDrawCommandLinkButton _drawCommandLinkButton; + private VisualOrientation _orientation; + + #endregion + + #region Events + + /// + /// Occurs when the value of the KryptonCommand property changes. + /// + [Category("Property Changed")] + [Description("Occurs when the value of the KryptonCommand property changes.")] + public event EventHandler KryptonCommandChanged; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonCommandLinkButton() + { + // We generate click events manually, suppress default + // production of them by the base Control class + SetStyle(ControlStyles.StandardClick | + ControlStyles.StandardDoubleClick, false); + + // Set default button properties + base.AutoSize = false; + DialogResult = DialogResult.None; + _orientation = VisualOrientation.Top; + _useMnemonic = true; + + // Create content storage + CommandLinkImageValues = new CommandLinkImageValues(NeedPaintDelegate); + CommandLinkImageValues.Image = CommandLinkImageResources.Windows_11_CommandLink_Arrow; + CommandLinkTextValues = new CommandLinkTextValues(NeedPaintDelegate); + + // Create the palette storage + StateCommon = new PaletteTripleRedirect(Redirector, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, NeedPaintDelegate); + PaletteContentText contentShortText = StateCommon.Content.ShortText; + contentShortText.Font = KryptonManager.CurrentGlobalPalette.BaseFont; //new Font(@"Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); + contentShortText.TextH = PaletteRelativeAlign.Near; + contentShortText.TextV = PaletteRelativeAlign.Center; + StateCommon.Content.LongText.TextH = PaletteRelativeAlign.Near; + StateCommon.Content.LongText.TextV = PaletteRelativeAlign.Far; + + StateDisabled = new PaletteTriple(StateCommon, NeedPaintDelegate); + StateNormal = new PaletteTriple(StateCommon, NeedPaintDelegate); + StateTracking = new PaletteTriple(StateCommon, NeedPaintDelegate); + StatePressed = new PaletteTriple(StateCommon, NeedPaintDelegate); + OverrideDefault = new PaletteTripleRedirect(Redirector, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, NeedPaintDelegate); + OverrideFocus = new PaletteTripleRedirect(Redirector, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, NeedPaintDelegate); + OverrideFocus.Border.Draw = InheritBool.True; + OverrideFocus.Border.DrawBorders = PaletteDrawBorders.All; + OverrideFocus.Border.GraphicsHint = PaletteGraphicsHint.AntiAlias; + // Force style update + ButtonStyle = ButtonStyle.Command; + + // Create the override handling classes + _overrideFocus = new PaletteTripleOverride(OverrideFocus, StateNormal, PaletteState.FocusOverride); + _overrideNormal = new PaletteTripleOverride(OverrideDefault, _overrideFocus, PaletteState.NormalDefaultOverride); + _overrideTracking = new PaletteTripleOverride(OverrideFocus, StateTracking, PaletteState.FocusOverride); + _overridePressed = new PaletteTripleOverride(OverrideFocus, StatePressed, PaletteState.FocusOverride); + + // Create the view button instance + _drawCommandLinkButton = new ViewDrawCommandLinkButton(StateDisabled, + _overrideNormal, + _overrideTracking, + _overridePressed, + new PaletteMetricRedirect(Redirector), + CommandLinkImageValues, CommandLinkTextValues, + Orientation, + UseMnemonic) + { + // Only draw a focus rectangle when focus cues are needed in the top level form + TestForFocusCues = true + }; + + // Create a button controller to handle button style behaviour + _buttonController = new ButtonController(_drawCommandLinkButton, NeedPaintDelegate); + + // Assign the controller to the view element to treat as a button + _drawCommandLinkButton.MouseController = _buttonController; + _drawCommandLinkButton.KeyController = _buttonController; + _drawCommandLinkButton.SourceController = _buttonController; + + // Need to know when user clicks the button view or mouse selects it + _buttonController.Click += OnButtonClick; + _buttonController.MouseSelect += OnButtonSelect; + + // Create the view manager instance + ViewManager = new ViewManager(this, _drawCommandLinkButton); + } + + #endregion + + #region Public + + /// + /// Gets and sets the automatic resize of the control to fit contents. + /// + [Browsable(false)] + [Localizable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool AutoSize + { + get => base.AutoSize; + set + { + // Do nothing } + } + } + + /// + /// Gets and sets the internal padding space. + /// + [Browsable(false)] + [Localizable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new Padding Padding + { + get => base.Padding; + set => base.Padding = value; + } + + /// + /// Gets or sets the text associated with this control. + /// + [Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))] + [Browsable(false)] + [Localizable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new string Text + { + get => CommandLinkTextValues.Heading; + set => CommandLinkTextValues.Heading = value; + } + + private bool ShouldSerializeText() => + // Never serialize, let the button values serialize instead + false; + + /// + /// Resets the Text property to its default value. + /// + public override void ResetText() => CommandLinkTextValues.ResetText(); + + /// + /// Gets and sets the visual orientation of the control. + /// + [Category("Visuals")] + [Description("Visual orientation of the control.")] + [DefaultValue(typeof(VisualOrientation), "Top")] + public virtual VisualOrientation Orientation + { + get => _orientation; + + set + { + if (_orientation != value) + { + _orientation = value; + + // Update the associated visual elements that are effected + _drawCommandLinkButton.Orientation = value; + + PerformNeedPaint(true); + } + } + } + + /// + /// Gets and sets the button style. + /// + [Category("Visuals")] + [Description("Button style.")] + public ButtonStyle ButtonStyle + { + get => _buttonStyle; + + set + { + if (_buttonStyle != value) + { + _buttonStyle = value; + SetStyles(_buttonStyle); + PerformNeedPaint(true); + } + } + } + + private bool ShouldSerializeButtonStyle() => (ButtonStyle != ButtonStyle.Command); + + private void ResetButtonStyle() => ButtonStyle = ButtonStyle.Command; + + /// + /// Gets access to the button content. + /// + [Category("CommandLink")] + [Description("CommandLink Button Text")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public CommandLinkTextValues CommandLinkTextValues { get; } + + /// + /// Gets access to the button content. + /// + [Category("CommandLink")] + [Description("CommandLink Button Image")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public CommandLinkImageValues CommandLinkImageValues { get; } + + private bool ShouldSerializeValues() => false; + + /// + /// Gets access to the common button appearance that other states can override. + /// + [Category("Visuals")] + [Description("Overrides for defining common button appearance that other states can override.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTripleRedirect StateCommon { get; } + + private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; + + /// + /// Gets access to the disabled button appearance entries. + /// + [Category("Visuals")] + [Description("Overrides for defining disabled button appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTriple StateDisabled { get; } + + private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; + + /// + /// Gets access to the normal button appearance entries. + /// + [Category("Visuals")] + [Description("Overrides for defining normal button appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTriple StateNormal { get; } + + private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; + + /// + /// Gets access to the hot tracking button appearance entries. + /// + [Category("Visuals")] + [Description("Overrides for defining hot tracking button appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTriple StateTracking { get; } + + private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; + + /// + /// Gets access to the pressed button appearance entries. + /// + [Category("Visuals")] + [Description("Overrides for defining pressed button appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTriple StatePressed { get; } + + private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; + + /// + /// Gets access to the normal button appearance when default. + /// + [Category("Visuals")] + [Description("Overrides for defining normal button appearance when default.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTripleRedirect OverrideDefault { get; } + + private bool ShouldSerializeOverrideDefault() => !OverrideDefault.IsDefault; + + /// + /// Gets access to the button appearance when it has focus. + /// + [Category("Visuals")] + [Description("Overrides for defining button appearance when it has focus.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTripleRedirect OverrideFocus { get; } + + private bool ShouldSerializeOverrideFocus() => !OverrideFocus.IsDefault; + + /// + /// Gets or sets the value returned to the parent form when the button is clicked. + /// + [Category("Behavior")] + [Description("The dialog-box result produced in a modal form by clicking the button.")] + [DefaultValue(typeof(DialogResult), "None")] + public DialogResult DialogResult { get; set; } + + /// + /// Gets and sets the associated KryptonCommand. + /// + [Category("Behavior")] + [Description("Command associated with the button.")] + [DefaultValue(null)] + public virtual IKryptonCommand? KryptonCommand + { + get => _command; + + set + { + if (_command == value) + { + return; + } + + if (_command != null) + { + _command.PropertyChanged -= OnCommandPropertyChanged; + } + else + { + _wasEnabled = Enabled; + } + + _command = value; + OnKryptonCommandChanged(EventArgs.Empty); + + if (_command != null) + { + _command.PropertyChanged += OnCommandPropertyChanged; + } + else + { + Enabled = _wasEnabled; + } + } + } + + /// + /// Notifies a control that it is the default button so that its appearance and behavior is adjusted accordingly. + /// + /// true if the control should behave as a default button; otherwise false. + public void NotifyDefault(bool value) + { + if (!ViewDrawButton.IsFixed && (_isDefault != value)) + { + // Remember new default status + _isDefault = value; + + // Decide if the default overrides should be applied + _overrideNormal.Apply = value; + + // Change in default state requires a layout and repaint + PerformNeedPaint(true); + } + } + + /// + /// Generates a Click event for the control. + /// + public void PerformClick() + { + if (CanSelect) + { + OnClick(EventArgs.Empty); + } + } + + /// + /// Gets or sets a value indicating whether an ampersand is included in the text of the control. + /// + [Category("Appearance")] + [Description("When true the first character after an ampersand will be used as a mnemonic.")] + [DefaultValue(true)] + public bool UseMnemonic + { + get => _useMnemonic; + + set + { + if (_useMnemonic != value) + { + _useMnemonic = value; + _drawCommandLinkButton.UseMnemonic = value; + PerformNeedPaint(true); + } + } + } + + /// + /// Fix the control to a particular palette state. + /// + /// Palette state to fix. + public virtual void SetFixedState(PaletteState state) + { + if (state == PaletteState.NormalDefaultOverride) + { + // Set up the overrides correctly to match state + _overrideFocus.Apply = true; + _overrideNormal.Apply = true; + + // Must pass a proper drawing state to the view + state = PaletteState.Normal; + } + + // Request fixed state from the view + _drawCommandLinkButton.FixedState = state; + } + + /// + /// Determines the IME status of the object when selected. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new ImeMode ImeMode + { + get => base.ImeMode; + set => base.ImeMode = value; + } + + #endregion + + #region Protected Overrides + + /// + /// Gets the default size of the control. + /// + protected override Size DefaultSize => new Size(319, 61); + + /// + /// Gets the default Input Method Editor (IME) mode supported by this control. + /// + protected override ImeMode DefaultImeMode => ImeMode.Disable; + + /// + /// Raises the EnabledChanged event. + /// + /// An EventArgs that contains the event data. + protected override void OnEnabledChanged(EventArgs e) + { + // Change in enabled state requires a layout and repaint + PerformNeedPaint(true); + + // Let base class fire standard event + base.OnEnabledChanged(e); + } + + /// + /// Raises the GotFocus event. + /// + /// An EventArgs that contains the event data. + protected override void OnGotFocus(EventArgs e) + { + if (!ViewDrawButton.IsFixed) + { + // Apply the focus overrides + _overrideFocus.Apply = true; + _overrideTracking.Apply = true; + _overridePressed.Apply = true; + + // Change in focus requires a repaint + PerformNeedPaint(false); + } + + // Let base class fire standard event + base.OnGotFocus(e); + } + + /// + /// Raises the LostFocus event. + /// + /// An EventArgs that contains the event data. + protected override void OnLostFocus(EventArgs e) + { + if (!ViewDrawButton.IsFixed) + { + // Apply the focus overrides + _overrideFocus.Apply = false; + _overrideTracking.Apply = false; + _overridePressed.Apply = false; + + // Change in focus requires a repaint + PerformNeedPaint(false); + } + + // Let base class fire standard event + base.OnLostFocus(e); + } + + /// + /// Raises the Click event. + /// + /// An EventArgs that contains the event data. + protected override void OnClick(EventArgs e) + { + // Find the form this button is on + Form? owner = FindForm(); + + // If we find a valid owner + if (owner != null) + { + // Update owner with our dialog result setting + owner.DialogResult = DialogResult; + } + + // Let base class fire standard event + base.OnClick(e); + + // If we have an attached command then execute it + KryptonCommand?.PerformExecute(); + } + + /// + /// Processes a mnemonic character. + /// + /// The mnemonic character entered. + /// true if the mnemonic was processed; otherwise, false. + protected override bool ProcessMnemonic(char charCode) + { + // Are we allowed to process mnemonics? + if (UseMnemonic && CanProcessMnemonic()) + { + // Does the button primary text contain the mnemonic? + if (IsMnemonic(charCode, CommandLinkTextValues.Heading)) + { + // Perform default action for a button, click it! + PerformClick(); + return true; + } + } + + // No match found, let base class do standard processing + return base.ProcessMnemonic(charCode); + } + + /// + /// Called when a context menu has just been closed. + /// + protected override void ContextMenuClosed() + { + _buttonController.RemoveFixed(); + } + + /// + protected override void OnPaint(PaintEventArgs? e) + { + StateCommon.Content.LongText.Font = CommandLinkTextValues.DescriptionFont != null + ? CommandLinkTextValues.DescriptionFont + : null; + + StateCommon.Content.ShortText.Font = + CommandLinkTextValues.HeadingFont != null + ? CommandLinkTextValues.HeadingFont + : null; + + StateCommon.Content.LongText.TextH = CommandLinkTextValues.DescriptionTextHAlignment != null + ? CommandLinkTextValues.DescriptionTextHAlignment ?? PaletteRelativeAlign.Near + : PaletteRelativeAlign.Near; + + StateCommon.Content.LongText.TextV = CommandLinkTextValues.DescriptionTextVAlignment != null + ? CommandLinkTextValues.DescriptionTextVAlignment ?? PaletteRelativeAlign.Far + : PaletteRelativeAlign.Far; + + StateCommon.Content.ShortText.TextH = CommandLinkTextValues.HeadingTextHAlignment != null + ? CommandLinkTextValues.HeadingTextHAlignment ?? PaletteRelativeAlign.Near + : PaletteRelativeAlign.Near; + + StateCommon.Content.ShortText.TextV = CommandLinkTextValues.HeadingTextVAlignment != null + ? CommandLinkTextValues.HeadingTextVAlignment ?? PaletteRelativeAlign.Center + : PaletteRelativeAlign.Center; + + base.OnPaint(e); + } + + #endregion + + #region WIN32 Calls + + + [DllImport(Libraries.User32, CharSet = CharSet.Unicode)] + static extern int SendMessage(HandleRef hWnd, uint msg, IntPtr wParam, bool lParam); + + #endregion + + #region Protected Virtual + + /// + /// Update the state objects to reflect the new button style. + /// + /// New button style. + protected virtual void SetStyles(ButtonStyle buttonStyle) + { + StateCommon.SetStyles(buttonStyle); + OverrideDefault.SetStyles(buttonStyle); + OverrideFocus.SetStyles(buttonStyle); + } + + /// + /// Creates a values storage object appropriate for control. + /// + /// Set of button values. + /// Delegate for notifying paint requests. + protected virtual ButtonValues CreateButtonValues(NeedPaintHandler needPaint) => new ButtonValues(needPaint); + + /// + /// Raises the KryptonCommandChanged event. + /// + /// An EventArgs containing the event data. + protected virtual void OnKryptonCommandChanged(EventArgs e) + { + KryptonCommandChanged.Invoke(this, e); + + // Use the values from the new command + if (KryptonCommand != null) + { + Enabled = KryptonCommand.Enabled; + } + + // Redraw to update the text/extratext/image properties + PerformNeedPaint(true); + } + + /// + /// Handles a change in the property of an attached command. + /// + /// Source of the event. + /// A PropertyChangedEventArgs that contains the event data. + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) + { + switch (e.PropertyName) + { + case "Enabled": + Enabled = KryptonCommand!.Enabled; + break; + case "Text": + case "ExtraText": + case "ImageSmall": + case "ImageTransparentColor": + PerformNeedPaint(true); + break; + } + } + + /// + /// Gets access to the view element for the color button. + /// + protected virtual ViewDrawCommandLinkButton ViewDrawButton => _drawCommandLinkButton; + + #endregion + + #region Implementation + + private void OnButtonTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + + private void OnButtonClick(object? sender, MouseEventArgs e) + { + // Raise the standard click event + OnClick(EventArgs.Empty); + + // Raise event to indicate it was a mouse activated click + OnMouseClick(e); + } + + private void OnButtonSelect(object? sender, MouseEventArgs e) + { + // Take the focus if allowed + if (CanFocus) + { + Focus(); + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonContextMenu.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonContextMenu.cs index 2ff667cbe..978b4d5d5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonContextMenu.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonContextMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -71,7 +71,7 @@ public KryptonContextMenu() NeedPaintHandler needPaintDelegate = OnNeedPaint; // Set default settings - Palette = null; + LocalCustomPalette = null; PaletteMode = PaletteMode.Global; Images = new ContextMenuImages(needPaintDelegate); _redirector = new PaletteRedirect(null); @@ -86,7 +86,7 @@ public KryptonContextMenu() StateChecked = new PaletteContextMenuItemStateChecked(StateCommon); // Create the top level collection for menu items - Items = new KryptonContextMenuCollection(); + Items = []; } /// @@ -205,17 +205,11 @@ protected override void Dispose(bool disposing) [Description(@"Palette applied to drawing.")] public PaletteMode PaletteMode { - [DebuggerStepThrough] - get; + [DebuggerStepThrough] get; set; } - private bool ShouldSerializePaletteMode() => PaletteMode != PaletteMode.Global; - - /// - /// Resets the PaletteMode property to its default value. - /// - public void ResetPaletteMode() => PaletteMode = PaletteMode.Global; + private void ResetPaletteMode() => PaletteMode = PaletteMode.Global; /// /// Gets and sets the custom palette implementation. @@ -223,17 +217,16 @@ public PaletteMode PaletteMode [Category(@"Visuals")] [Description(@"Custom palette applied to drawing.")] [DefaultValue(null)] - public PaletteBase? Palette + public KryptonCustomPaletteBase? LocalCustomPalette { [DebuggerStepThrough] get; set; } - /// /// Resets the Palette property to its default value. /// - public void ResetPalette() => PaletteMode = PaletteMode.Global; + private void ResetLocalCustomPalette() => PaletteMode = PaletteMode.Global; /// /// Gets a reference to the caller that caused the context menu to be shown. @@ -354,7 +347,7 @@ public bool Show(object caller, CloseReason = ToolStripDropDownCloseReason.AppFocusChange; // Create the actual control used to show the context menu - VisualContextMenu = CreateContextMenu(this, Palette, PaletteMode, + VisualContextMenu = CreateContextMenu(this, LocalCustomPalette, PaletteMode, _redirector, _redirectorImages, Items, Enabled, keyboardActivated); @@ -424,7 +417,7 @@ public void Close(ToolStripDropDownCloseReason reason) protected virtual VisualContextMenu CreateContextMenu(KryptonContextMenu kcm, PaletteBase? palette, PaletteMode paletteMode, - PaletteRedirect? redirector, + PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, KryptonContextMenuCollection items, bool enabled, @@ -482,7 +475,7 @@ private void OnNeedPaint(object? sender, [DisallowNull] NeedLayoutEventArgs e) VisualContextMenu?.PerformNeedPaint(e.NeedLayout); } - private void OnContextMenuDisposed(object sender, EventArgs e) + private void OnContextMenuDisposed(object? sender, EventArgs e) { // Should still be caching a reference to actual display control if (VisualContextMenu != null) diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCustomPaletteBase.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCustomPaletteBase.cs index 3b1165113..7b8bc8de0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCustomPaletteBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCustomPaletteBase.cs @@ -5,16 +5,14 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion // These are "Only" used here, So will not put into global usings -using System.Xml.Xsl; - -using Krypton.Toolkit.Properties; +using XmlTransformer = System.Xml.Xsl.XslCompiledTransform; namespace Krypton.Toolkit { @@ -24,21 +22,15 @@ namespace Krypton.Toolkit [ToolboxItem(true)] [ToolboxBitmap(typeof(KryptonCustomPaletteBase), "ToolboxBitmaps.KryptonPalette.bmp")] [DefaultEvent(nameof(PalettePaint))] - [DefaultProperty(nameof(BasePaletteMode))] + //[DefaultProperty(nameof(BasePaletteMode))] [DesignerCategory(@"code")] - [Designer(typeof(KryptonPaletteDesigner))] + [Designer(typeof(KryptonCustomPaletteBaseDesigner))] [Description(@"A customisable palette component.")] public class KryptonCustomPaletteBase : PaletteBase { #region Type Definitions - private class ImageDictionary : Dictionary { } - private class ImageReverseDictionary : Dictionary { } - #endregion - - #region Constants - - private const int CURRENT_PALETTE_VERSION = 19; - + private class ImageDictionary : Dictionary; + private class ImageReverseDictionary : Dictionary; #endregion #region Instance Fields @@ -47,11 +39,9 @@ private class ImageReverseDictionary : Dictionary { } private IRenderer? _baseRenderer; private RendererMode _baseRenderMode; private PaletteBase? _basePalette; - private PaletteMode _basePaletteMode; - private InheritBool _allowFormChrome; + //private PaletteMode _basePaletteMode; private readonly PaletteRedirect _redirector; private readonly NeedPaintHandler _needPaintDelegate; - private string _themeName; #endregion @@ -66,7 +56,6 @@ public KryptonCustomPaletteBase() // Set the default palette/palette mode _basePalette = KryptonManager.GetPaletteForMode(PaletteMode.Microsoft365Blue); - _basePaletteMode = PaletteMode.Microsoft365Blue; // Set the default renderer _baseRenderer = null; @@ -75,9 +64,6 @@ public KryptonCustomPaletteBase() // Create the redirector for passing requests onto the inherited palette _redirector = new PaletteRedirect(_basePalette); - // Set default value of properties - _allowFormChrome = InheritBool.Inherit; - // Create the storage for the common states Common = new KryptonPaletteCommon(_redirector, _needPaintDelegate); @@ -112,16 +98,11 @@ public KryptonCustomPaletteBase() ButtonSpecs.ButtonSpecChanged += OnButtonSpecChanged; // Hook to palette events - if (_basePalette != null) - { - ToolMenuStatus = new KryptonPaletteTMS(this, _basePalette.ColorTable, OnMenuToolStatusPaint); - _basePalette.PalettePaint += OnPalettePaint; - _basePalette.ButtonSpecChanged += OnButtonSpecChanged; - _basePalette.BasePaletteChanged += OnBasePaletteChanged; - _basePalette.BaseRendererChanged += OnBaseRendererChanged; - } - - _themeName = string.Empty; + ToolMenuStatus = new KryptonPaletteTMS(this, _basePalette.ColorTable, OnMenuToolStatusPaint); + _basePalette.PalettePaint += OnPalettePaint; + _basePalette.ButtonSpecChanged += OnButtonSpecChanged; + _basePalette.BasePaletteChanged += OnBasePaletteChanged; + _basePalette.BaseRendererChanged += OnBaseRendererChanged; } /// @@ -151,7 +132,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Must unhook from the palette paint event - if (_basePalette != null) + if (_basePalette is not null) { _basePalette.PalettePaint -= OnPalettePaint; _basePalette.ButtonSpecChanged -= OnButtonSpecChanged; @@ -164,30 +145,20 @@ protected override void Dispose(bool disposing) } #endregion - #region AllowFormChrome + #region UseThemeFormChromeBorderWidth /// - /// Gets or sets a value indicating if KryptonForm instances should show custom chrome. + /// Gets or sets a value indicating if KryptonForm instances should UseThemeFormChromeBorderWidth. /// [KryptonPersist(false)] [Category(@"Visuals")] - [Description(@"Should KryptonForm instances show custom chrome.")] + [Description(@"Should KryptonForm instances UseThemeFormChromeBorderWidth.")] [DefaultValue(InheritBool.Inherit)] - public InheritBool AllowFormChrome + public new InheritBool UseThemeFormChromeBorderWidth { - get => _allowFormChrome; + get => _basePalette!.UseThemeFormChromeBorderWidth; - set - { - if (_allowFormChrome != value) - { - _allowFormChrome = value; - OnAllowFormChromeChanged(this, EventArgs.Empty); - } - } + set => _basePalette!.UseThemeFormChromeBorderWidth = value; } - - private bool ShouldSerializeAllowFormChrome() => AllowFormChrome != InheritBool.Inherit; - #endregion #region ButtonSpecs @@ -544,20 +515,12 @@ public KryptonPaletteCheckButtons ButtonStyles public override IRenderer GetRenderer() => _baseRenderMode switch { - RendererMode.Inherit => _basePalette.GetRenderer(), - RendererMode.Custom => _baseRenderer, + RendererMode.Inherit => _basePalette!.GetRenderer(), + RendererMode.Custom => _baseRenderer!, _ => KryptonManager.GetRendererForMode(_baseRenderMode) }; #endregion - #region IPalette - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => AllowFormChrome == InheritBool.Inherit ? _basePalette.GetAllowFormChrome() : AllowFormChrome; - #endregion - #region PaletteBase Back /// /// Gets a value indicating if background should be drawn. @@ -587,7 +550,7 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, /// Color value. public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) => // Find the correct destination in the palette and pass on request - GetPaletteBack(style, state)?.GetBackColor1(state) ?? Color.Empty; + GetPaletteBack(style, state)?.GetBackColor1(state) ?? GlobalStaticValues.EMPTY_COLOR; /// /// Gets the second back color. @@ -597,7 +560,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) /// Color value. public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) => // Find the correct destination in the palette and pass on request - GetPaletteBack(style, state)?.GetBackColor2(state) ?? Color.Empty; + GetPaletteBack(style, state)?.GetBackColor2(state) ?? GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color background drawing style. @@ -635,7 +598,7 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta /// Palette value should be applicable to this state. /// Image instance. public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) - => GetPaletteBack(style, state).GetBackImage(state); + => GetPaletteBack(style, state)?.GetBackImage(state); /// /// Gets the background image style. @@ -839,6 +802,7 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) => GetPaletteContent(style, state).GetContentImageColorTo(state); + /// public override Color GetContentImageColorTransparent(PaletteContentStyle style, PaletteState state) => throw new NotImplementedException(); /// @@ -847,7 +811,7 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) => GetPaletteContent(style, state).GetContentShortTextFont(state); /// @@ -856,7 +820,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) => GetPaletteContent(style, state).GetContentShortTextFont(state); /// @@ -1000,7 +964,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) => GetPaletteContent(style, state).GetContentLongTextFont(state); /// @@ -1009,7 +973,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) => GetPaletteContent(style, state).GetContentLongTextFont(state); /// @@ -1467,13 +1431,13 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin } /// - /// Gets a drop down button image appropriate for the provided state. + /// Gets a drop-down button image appropriate for the provided state. /// /// PaletteState for which image is required. public override Image? GetDropDownButtonImage(PaletteState state) { // Grab state specific image - Image? retImage = state switch + var retImage = state switch { PaletteState.Disabled => Images.DropDownButton.Disabled, PaletteState.Normal => Images.DropDownButton.Normal, @@ -1495,7 +1459,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Appropriate image for drawing; otherwise null. public override Image? GetContextMenuCheckedImage() { - Image? retImage = Images.ContextMenu.Checked; + var retImage = Images.ContextMenu.Checked; // If nothing found then use the base palette return retImage ?? _redirector.GetContextMenuCheckedImage(); @@ -1507,7 +1471,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Appropriate image for drawing; otherwise null. public override Image? GetContextMenuIndeterminateImage() { - Image? retImage = Images.ContextMenu.Indeterminate; + var retImage = Images.ContextMenu.Indeterminate; // If nothing found then use the base palette return retImage ?? _redirector.GetContextMenuIndeterminateImage(); @@ -1519,7 +1483,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Appropriate image for drawing; otherwise null. public override Image? GetContextMenuSubMenuImage() { - Image? retImage = Images.ContextMenu.SubMenu; + var retImage = Images.ContextMenu.SubMenu; // If nothing found then use the base palette return retImage ?? _redirector.GetContextMenuSubMenuImage(); @@ -1534,7 +1498,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin public override Image? GetGalleryButtonImage(PaletteRibbonGalleryButton button, PaletteState state) { Image? retImage = null; - KryptonPaletteImagesGalleryButton images = button switch + var images = button switch { PaletteRibbonGalleryButton.Up => Images.GalleryButtons.Up, PaletteRibbonGalleryButton.Down => Images.GalleryButtons.Down, @@ -1555,7 +1519,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin retImage ??= images.Common; // If nothing found then use the base palette - return retImage ?? _redirector?.GetGalleryButtonImage(button, state); + return retImage ?? _redirector.GetGalleryButtonImage(button, state); } #endregion @@ -1590,7 +1554,7 @@ public override Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle /// /// Style of button spec. /// String value. - public override string? GetButtonSpecShortText(PaletteButtonSpecStyle style) + public override string GetButtonSpecShortText(PaletteButtonSpecStyle style) => GetPaletteButtonSpec(style).GetButtonSpecShortText(style); /// @@ -1598,7 +1562,7 @@ public override Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle /// /// Style of button spec. /// String value. - public override string? GetButtonSpecLongText(PaletteButtonSpecStyle style) + public override string GetButtonSpecLongText(PaletteButtonSpecStyle style) => GetPaletteButtonSpec(style).GetButtonSpecLongText(style); /// @@ -1606,7 +1570,7 @@ public override Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle /// /// Style of button spec. /// String value. - public override string? GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) + public override string GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) => GetPaletteButtonSpec(style).GetButtonSpecToolTipTitle(style); /// @@ -1617,6 +1581,7 @@ public override Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle public override Color GetButtonSpecColorMap(PaletteButtonSpecStyle style) => GetPaletteButtonSpec(style).GetButtonSpecColorMap(style); + /// public override Color GetButtonSpecColorTransparent(PaletteButtonSpecStyle style) => throw new NotImplementedException(); /// @@ -1763,6 +1728,43 @@ public override Color GetRibbonMinimizeBarDark(PaletteState state) public override Color GetRibbonMinimizeBarLight(PaletteState state) => GetPaletteRibbonGeneral(state).GetRibbonMinimizeBarLight(state); + /// + /// Gets the dark rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => GetPaletteRibbonGeneral(state).GetRibbonTabRowBackgroundGradientRaftingDark(state); + + /// + /// Gets the light rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => GetPaletteRibbonGeneral(state).GetRibbonTabRowBackgroundGradientRaftingLight(state); + + /// + /// Gets the solid color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GetPaletteRibbonGeneral(state).GetRibbonTabRowBackgroundSolidColor(state); + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GetPaletteRibbonGeneral(state).GetRibbonTabRowGradientColor1(state); + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => + GetPaletteRibbonFileAppTab(state).GetRibbonFileAppTabBottomColor(state); + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => + GetPaletteRibbonFileAppTab(state).GetRibbonFileAppTabTopColor(state); + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => + GetPaletteRibbonFileAppTab(state).GetRibbonFileAppTabTextColor(state); + /// /// Gets the font for the ribbon text. /// @@ -1771,6 +1773,10 @@ public override Color GetRibbonMinimizeBarLight(PaletteState state) public override Font GetRibbonTextFont(PaletteState state) => GetPaletteRibbonGeneral(state).GetRibbonTextFont(state); + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => + GetPaletteRibbonGeneral(state).GetRibbonTabRowGradientRaftingAngle(state); + /// /// Gets the rendering hint for the ribbon font. /// @@ -1982,7 +1988,7 @@ public void ResetToDefaults(bool silent) else { // Perform the reset operation on a separate worker thread - CommonHelper.PerformOperation(ResetOperation, null); + CommonHelper.PerformOperation(ResetOperation!, null); KryptonMessageBox.Show("Reset of palette is completed.", "Palette Reset", @@ -2024,7 +2030,7 @@ public void PopulateFromBase(bool silent) else { // Perform the reset operation on a separate worker thread - CommonHelper.PerformOperation(PopulateFromBaseOperation, null); + CommonHelper.PerformOperation(PopulateFromBaseOperation!, null); KryptonMessageBox.Show("Relevant values have been populated.", "Populate Values", @@ -2051,20 +2057,18 @@ public void PopulateFromBase(bool silent) /// /// Import palette settings from an xml file. /// - /// Fullpath of imported filename; otherwise empty string. + /// Full path of imported filename; otherwise empty string. public string Import(bool silent = false) { - string paletteFileName = string.Empty; - if (UseKryptonFileDialogs) + var paletteFileName = string.Empty; + if (KryptonManager._globalUseKryptonFileDialogs) { - using var kofd = new KryptonOpenFileDialog - { - CheckFileExists = true, - CheckPathExists = true, - DefaultExt = @"xml", - Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)", - Title = @"Load Custom Palette" - }; + using var kofd = new KryptonOpenFileDialog(); + kofd.CheckFileExists = true; + kofd.CheckPathExists = true; + kofd.DefaultExt = @"xml"; + kofd.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + kofd.Title = @"Load Custom Palette"; if (kofd.ShowDialog() == DialogResult.OK) { @@ -2076,15 +2080,13 @@ public string Import(bool silent = false) } else { - using var dialog = new OpenFileDialog - { - // Palette files are just XML documents - CheckFileExists = true, - CheckPathExists = true, - DefaultExt = @"xml", - Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)", - Title = @"Load Palette" - }; + using var dialog = new OpenFileDialog(); + // Palette files are just XML documents + dialog.CheckFileExists = true; + dialog.CheckPathExists = true; + dialog.DefaultExt = @"xml"; + dialog.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + dialog.Title = @"Load Palette"; // Get the actual file selected by the user if (dialog.ShowDialog() == DialogResult.OK) @@ -2103,11 +2105,43 @@ public string Import(bool silent = false) return paletteFileName; } + /// Import palette settings from a xml file. For use with action list. + /// Full path of imported filename; otherwise empty string. + internal string ActionListImport(bool silent = false) + { + var paletteFileName = string.Empty; + + using var dialog = new OpenFileDialog(); + // Palette files are just XML documents + dialog.CheckFileExists = true; + dialog.CheckPathExists = true; + dialog.DefaultExt = @"xml"; + dialog.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + dialog.Title = @"Load Palette"; + + // Get the actual file selected by the user + if (dialog.ShowDialog() == DialogResult.OK) + { + paletteFileName = dialog.FileName; + + // Set the theme name to the file name + PaletteName = paletteFileName; + } + + if (!string.IsNullOrWhiteSpace(paletteFileName)) + { + // Use the existing import overload that takes the target name + paletteFileName = Import(paletteFileName, silent); + } + + return paletteFileName; + } + /// /// Silent Import of palette settings from the specified xml file. /// /// Filename to load. - /// Fullpath of imported filename; otherwise empty string. + /// Full path of imported filename; otherwise empty string. public string Import(string filename) => Import(filename, true); /// @@ -2115,7 +2149,7 @@ public string Import(bool silent = false) /// /// Filename to load. /// Silent mode provides no user interface feedback. - /// Fullpath of imported filename; otherwise empty string. + /// Full path of imported filename; otherwise empty string. /// Thrown if failure to import public string Import(string filename, bool silent) { @@ -2133,7 +2167,7 @@ public string Import(string filename, bool silent) else { // Perform the import operation on a separate worker thread - ret = CommonHelper.PerformOperation(ImportFromFile, filename) as string; + ret = CommonHelper.PerformOperation(ImportFromFile!, filename) as string; KryptonMessageBox.Show($"Import from file '{filename}' completed.", @"Palette Import", @@ -2166,6 +2200,7 @@ public string Import(string filename, bool silent) // Set the palette name // TODO: Get paletteName from the paletteBase + SetPaletteName(Path.GetFileName(ret)); return ret; @@ -2176,7 +2211,7 @@ public string Import(string filename, bool silent) /// /// Stream that contains an XmlDocument. public void Import(Stream stream) => - // By default the import is silent + // By default, the import is silent Import(stream, true); /// @@ -2213,35 +2248,71 @@ public void ImportWithUpgrade(Stream stream) } } - private void PerformUpgrade(Stream stream) + /// Upgrades the specified palette and upgrades it if needed. + /// The theme file path. + public void ImportWithUpgrade(string themeFilePath) { - using var reader = new StreamReader(stream); - string end = reader.ReadToEnd(); - reader.Close(); + FileStream? stream = null; + + try + { + stream = new FileStream(path: themeFilePath, mode: FileMode.Open); + + ImportWithUpgrade(stream); + } + catch (Exception e) + { + ExceptionHandler.CaptureException(e); + } + finally + { + + stream?.Close(); + + stream?.Dispose(); + } + } - using (var streamReader = new StringReader(Resources.v6to19)) + private void PerformUpgrade(Stream stream) + { + try { - using (var xmlTextReader = XmlReader.Create(streamReader)) + using var reader = new StreamReader(stream); + + var end = reader.ReadToEnd(); + reader.Close(); + + using (var currentSupportedPaletteSchemaReader = + new StreamReader(PaletteSchemaResources.CurrentSupportedPaletteSchema)) { - var xslCompiledTransform1 = new XslCompiledTransform(); - xslCompiledTransform1.Load(xmlTextReader); - end = TransformXml(xslCompiledTransform1, end); + using (var xslTextReader = XmlReader.Create(currentSupportedPaletteSchemaReader)) + { + var xslToXmlTransformer = new XmlTransformer(); + + xslToXmlTransformer.Load(xslTextReader); + + end = TransformXml(xslToXmlTransformer, end); + } } - } - using var ms = new MemoryStream(); - using (var writer = new StreamWriter(ms, - /*StreamWriter.UTF8NoBOM*/ new UTF8Encoding(false, true), - 1024, true)) + using var ms = new MemoryStream(); + using (var writer = new StreamWriter(ms, + /*StreamWriter.UTF8NoBOM*/ new UTF8Encoding(false, true), + 1024, true)) + { + writer.WriteLine(""); + writer.Write(end); + writer.Flush(); + writer.Close(); + } + ms.Position = 0; + // If this goes boom, then something more needs to be done ! + ImportFromStream(ms); + } + catch (Exception e) { - writer.WriteLine(""); - writer.Write(end); - writer.Flush(); - writer.Close(); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } - ms.Position = 0; - // If this goes boom, then something more needs to be done ! - ImportFromStream(ms); } /// @@ -2250,16 +2321,14 @@ private void PerformUpgrade(Stream stream) /// The transform. /// The XML. /// - private string TransformXml(XslCompiledTransform transform, string xml) + private string TransformXml(XmlTransformer transform, string xml) { using var reader = new StringReader(xml); using var writer = new StringWriter(); using var xmlTextReader = new XmlTextReader(reader); - using var xmlTextWriter = new XmlTextWriter(writer) - { - Formatting = Formatting.Indented, - Indentation = 4 - }; + using var xmlTextWriter = new XmlTextWriter(writer); + xmlTextWriter.Formatting = Formatting.Indented; + xmlTextWriter.Indentation = 4; transform.Transform(xmlTextReader, xmlTextWriter); @@ -2285,7 +2354,7 @@ public void Import(Stream stream, bool silent) else { // Perform the import operation on a separate worker thread - CommonHelper.PerformOperation(ImportFromStream, stream); + CommonHelper.PerformOperation(ImportFromStream!, stream); KryptonMessageBox.Show(@"Import completed with success.", @"Palette Import", @@ -2317,7 +2386,7 @@ public void Import(Stream stream, bool silent) /// /// ByteArray that was returning from exporting palette. public void Import(byte[] byteArray) => - // By default the import is silent + // By default, the import is silent Import(byteArray, true); /// @@ -2339,7 +2408,7 @@ public void Import(byte[] byteArray, bool silent) else { // Perform the import operation on a separate worker thread - CommonHelper.PerformOperation(ImportFromByteArray, byteArray); + CommonHelper.PerformOperation(ImportFromByteArray!, byteArray); KryptonMessageBox.Show(@"Import completed with success.", @"Palette Import", @@ -2369,18 +2438,16 @@ public void Import(byte[] byteArray, bool silent) /// /// Export palette settings to a user specified xml file. /// - /// Fullpath of exported filename; otherwise empty string. + /// Full path of exported filename; otherwise empty string. public string? Export() { - if (UseKryptonFileDialogs) + if (KryptonManager._globalUseKryptonFileDialogs) { - using var ksfd = new KryptonSaveFileDialog - { - OverwritePrompt = true, - DefaultExt = @"xml", - Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)", - Title = @"Save Palette As" - }; + using var ksfd = new KryptonSaveFileDialog(); + ksfd.OverwritePrompt = true; + ksfd.DefaultExt = @"xml"; + ksfd.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + ksfd.Title = @"Save Palette As"; if (ksfd.ShowDialog() == DialogResult.OK) { @@ -2394,14 +2461,12 @@ public void Import(byte[] byteArray, bool silent) } else { - using var dialog = new SaveFileDialog - { - // Palette files are just xml documents - OverwritePrompt = true, - DefaultExt = @"xml", - Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)", - Title = @"Save Palette As" - }; + using var dialog = new SaveFileDialog(); + // Palette files are just xml documents + dialog.OverwritePrompt = true; + dialog.DefaultExt = @"xml"; + dialog.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + dialog.Title = @"Save Palette As"; // Get the actual file selected by the user if (dialog.ShowDialog() == DialogResult.OK) @@ -2419,12 +2484,38 @@ public void Import(byte[] byteArray, bool silent) return string.Empty; } + /// Export palette settings to a user specified xml file. For use with action list. + /// Full path of exported filename; otherwise empty string. + internal string? ActionListExport() + { + using var dialog = new SaveFileDialog(); + // Palette files are just xml documents + dialog.OverwritePrompt = true; + dialog.DefaultExt = @"xml"; + dialog.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + dialog.Title = @"Save Palette As"; + + // Get the actual file selected by the user + if (dialog.ShowDialog() == DialogResult.OK) + { + SetCustomisedKryptonPaletteFilePath(Path.GetFullPath(dialog.FileName)); + + // Set the theme name to the file name + PaletteName = dialog.FileName; + + // Use the existing export overload that takes the target name + return Export(dialog.FileName, true, false); + } + + return string.Empty; + } + /// /// Export palette settings to the specified xml file. /// /// Filename to create or overwrite. /// Should default values be exported. - /// Fullpath of exported filename; otherwise empty string. + /// Full path of exported filename; otherwise empty string. public string? Export(string filename, bool ignoreDefaults) => Export(filename, ignoreDefaults, true); @@ -2434,7 +2525,7 @@ public void Import(byte[] byteArray, bool silent) /// Filename to create or overwrite. /// Should default values be exported. /// Silent mode provides no user interface feedback. - /// Fullpath of exported filename; otherwise empty string. + /// Full path of exported filename; otherwise empty string. public string? Export(string filename, bool ignoreDefaults, bool silent) { string? ret; @@ -2451,7 +2542,7 @@ public void Import(byte[] byteArray, bool silent) else { // Perform the import operation on a separate worker thread - ret = CommonHelper.PerformOperation(ExportToFile, + ret = CommonHelper.PerformOperation(ExportToFile!, new object[] { filename, ignoreDefaults }) as string; KryptonMessageBox.Show($"Export to file '{filename}' completed.", @@ -2487,7 +2578,7 @@ public void Import(byte[] byteArray, bool silent) /// Destination stream for exporting. /// Should default values be exported. public void Export(Stream stream, bool ignoreDefaults) => - // By default the export is silent + // By default, the export is silent Export(stream, ignoreDefaults, true); /// @@ -2510,7 +2601,7 @@ public void Export(Stream stream, bool ignoreDefaults, bool silent) else { // Perform the import operation on a separate worker thread - CommonHelper.PerformOperation(ExportToStream, + CommonHelper.PerformOperation(ExportToStream!, new object[] { stream, ignoreDefaults }); KryptonMessageBox.Show(@"Export completed with success.", @@ -2566,7 +2657,7 @@ public void Export(Stream stream, bool ignoreDefaults, bool silent) else { // Perform the import operation on a separate worker thread - ret = CommonHelper.PerformOperation(ExportToByteArray, + ret = CommonHelper.PerformOperation(ExportToByteArray!, new object[] { ignoreDefaults }) as byte[]; KryptonMessageBox.Show(@"Export completed with success.", @@ -2606,7 +2697,7 @@ public void Export(Stream stream, bool ignoreDefaults, bool silent) [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public bool IsDefault => !(ShouldSerializeCustomisedKryptonPaletteFilePath() || ShouldSerializePaletteName() - || ShouldSerializeBasePaletteMode() + //|| ShouldSerializeBasePaletteMode() || ShouldSerializeBasePalette() || ShouldSerializeBaseRendererMode() || ShouldSerializeBaseRenderer() @@ -2619,7 +2710,7 @@ public void Reset() { ResetCustomisedKryptonPaletteFilePath(); ResetPaletteName(); - ResetBasePaletteMode(); + //ResetBasePaletteMode(); ResetBasePalette(); ResetBaseRendererMode(); ResetBaseRenderer(); @@ -2647,71 +2738,69 @@ public void Reset() private bool ShouldSerializePaletteName() => !string.IsNullOrWhiteSpace(PaletteName); private void ResetPaletteName() => PaletteName = string.Empty; - /// - /// Gets or sets the base palette used to inherit from. - /// - [KryptonPersist(false, false)] - [Category(@"Visuals")] - [Description(@"Base palette used to inherit from.")] - [DefaultValue(PaletteMode.Microsoft365Blue)] - public PaletteMode BasePaletteMode - { - get => _basePaletteMode; - - set - { - if (_basePaletteMode != value) - { - // Action depends on new value - switch (value) - { - case PaletteMode.Custom: - // Do nothing, you must assign a palette to the - // 'BasePalette' property in order to get the custom mode - break; - default: - // Cache the original values - PaletteMode tempMode = _basePaletteMode; - PaletteBase? tempPalette = _basePalette; - - // Use the new value - _basePaletteMode = value; - _basePalette = KryptonManager.GetPaletteForMode(_basePaletteMode); - - // If the new value creates a circular reference - if (HasCircularReference()) - { - // Restore the original values - _basePaletteMode = tempMode; - _basePalette = tempPalette; - - throw new ArgumentOutOfRangeException(nameof(value), @"Cannot use palette that would create a circular reference"); - } - else - { - // Restore the original base palette as 'SetPalette' will not - // work correctly unless it still has the old value in place - _basePalette = tempPalette; - } - - // Get a reference to the standard palette from its name - SetPalette(KryptonManager.GetPaletteForMode(_basePaletteMode)); - - // Fire events to indicate a change in palette values - OnBasePaletteChanged(this, EventArgs.Empty); - OnBaseRendererChanged(this, EventArgs.Empty); - OnAllowFormChromeChanged(this, EventArgs.Empty); - OnButtonSpecChanged(this, EventArgs.Empty); - OnPalettePaint(this, new PaletteLayoutEventArgs(true, true)); - break; - } - } - } - } - - private bool ShouldSerializeBasePaletteMode() => BasePaletteMode != PaletteMode.Microsoft365Blue; - - private void ResetBasePaletteMode() => BasePaletteMode = PaletteMode.Microsoft365Blue; + ///// + ///// Gets or sets the base palette used to inherit from. + ///// + //[KryptonPersist(false, false)] + //[Category(@"Visuals")] + //[Description(@"Base palette used to inherit from.")] + //[DefaultValue(PaletteMode.Microsoft365Blue)] + //public PaletteMode BasePaletteMode + //{ + // get => _basePaletteMode; + + // set + // { + // if (_basePaletteMode != value) + // { + // // Action depends on new value + // switch (value) + // { + // case PaletteMode.Custom: + // // Do nothing, you must assign a palette to the + // // 'BasePalette' property in order to get the custom mode + // break; + // default: + // // Cache the original values + // PaletteMode tempMode = _basePaletteMode; + // PaletteBase? tempPalette = _basePalette; + + // // Use the new value + // _basePaletteMode = value; + // _basePalette = KryptonManager.GetPaletteForMode(_basePaletteMode); + + // // If the new value creates a circular reference + // if (HasCircularReference()) + // { + // // Restore the original values + // _basePaletteMode = tempMode; + // _basePalette = tempPalette; + + // throw new ArgumentOutOfRangeException(nameof(value), @"Cannot use palette that would create a circular reference"); + // } + // else + // { + // // Restore the original base palette as 'SetPalette' will not + // // work correctly unless it still has the old value in place + // _basePalette = tempPalette; + // } + + // // Get a reference to the standard palette from its name + // SetPalette(KryptonManager.GetPaletteForMode(_basePaletteMode)); + + // // Fire events to indicate a change in palette values + // OnBasePaletteChanged(this, EventArgs.Empty); + // OnBaseRendererChanged(this, EventArgs.Empty); + // OnUseThemeFormChromeBorderWidthChanged(this, EventArgs.Empty); + // OnButtonSpecChanged(this, EventArgs.Empty); + // OnPalettePaint(this, new PaletteLayoutEventArgs(true, true)); + // break; + // } + // } + // } + //} + //private bool ShouldSerializeBasePaletteMode() => BasePaletteMode != PaletteMode.Microsoft365Blue; + //private void ResetBasePaletteMode() => BasePaletteMode = PaletteMode.Microsoft365Blue; /// /// Gets and sets the KryptonPalette used to inherit from. @@ -2729,43 +2818,45 @@ public PaletteBase? BasePalette if (_basePalette != value) { // Store the original values - PaletteMode tempMode = _basePaletteMode; - PaletteBase? tempPalette = _basePalette; + //PaletteMode tempMode = _basePaletteMode; + var tempPalette = _basePalette; // Find the new palette mode based on the incoming value - _basePaletteMode = value == null ? PaletteMode.Microsoft365Blue : PaletteMode.Custom; + //_basePaletteMode = value == null ? PaletteMode.Microsoft365Blue : PaletteMode.Custom; _basePalette = value; // If the new value creates a circular reference - if (HasCircularReference()) - { - // Put back the original palette details - _basePaletteMode = tempMode; - _basePalette = tempPalette; - - throw new ArgumentOutOfRangeException(nameof(value), @"Cannot use palette that would create a circular reference"); - } - else + //if (HasCircularReference()) + //{ + // // Put back the original palette details + // //_basePaletteMode = tempMode; + // _basePalette = tempPalette; + + // throw new ArgumentOutOfRangeException(nameof(value), @"Cannot use palette that would create a circular reference"); + //} + //else { // Restore the original base palette as 'SetPalette' will not // work correctly unless it still has the old value in place _basePalette = tempPalette; } - // Use the provided palette value - SetPalette(value); - // If no custom palette is required if (value == null) { // Get the appropriate palette for the global mode - SetPalette(KryptonManager.GetPaletteForMode(_basePaletteMode)); + SetPalette(KryptonManager.GetPaletteForMode(PaletteMode.Microsoft365Blue/*_basePaletteMode*/)); + } + else + { + // Use the provided palette value + SetPalette(value); } // Indicate the palette values have changed OnBasePaletteChanged(this, EventArgs.Empty); OnBaseRendererChanged(this, EventArgs.Empty); - OnAllowFormChromeChanged(this, EventArgs.Empty); + OnUseThemeFormChromeBorderWidthChanged(this, EventArgs.Empty); OnButtonSpecChanged(this, EventArgs.Empty); OnPalettePaint(this, new PaletteLayoutEventArgs(true, true)); } @@ -2802,14 +2893,9 @@ public RendererMode BaseRenderMode _baseRenderMode = value; // If inheriting then we do not need a base renderer - if (value == RendererMode.Inherit) - { - _baseRenderer = null; - } - else - { - _baseRenderer = KryptonManager.GetRendererForMode(_baseRenderMode); - } + _baseRenderer = value == RendererMode.Inherit + ? null + : KryptonManager.GetRendererForMode(_baseRenderMode); // Fire events to indicate a change in palette values // (because renderer has changed the palette need redrawing) @@ -2852,42 +2938,44 @@ public IRenderer? BaseRenderer } } } - private bool ShouldSerializeBaseRenderer() => BaseRenderer != null; private void ResetBaseRenderer() => BaseRenderer = null; - //protected override void DefineFonts() - //{ - // // This class has no font fields - //} - /// /// Gets access to the color table instance. /// [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] public override KryptonColorTable ColorTable => ToolMenuStatus.InternalKCT; - [Browsable(false)] - public new bool UseKryptonFileDialogs - { get => _basePalette!.UseKryptonFileDialogs; set => _basePalette!.UseKryptonFileDialogs = value; } - - [Browsable(false)] - public new float BaseFontSize - { get => _basePalette!.BaseFontSize; set => _basePalette!.BaseFontSize = value; } - + /// [Browsable(false)] [DisallowNull] public new Font BaseFont - { get => _basePalette!.BaseFont; set => _basePalette!.BaseFont = value; } + { + get => _basePalette!.BaseFont; + set => _basePalette!.BaseFont = value; + } + + private new void ResetBaseFont() => _basePalette!.ResetBaseFont(); + private new bool ShouldSerializeBaseFont() => _basePalette!.ShouldSerializeBaseFont(); + /// [Browsable(false)] [DisallowNull] public new string ThemeName - { get => _basePalette!.ThemeName; set => _basePalette!.ThemeName = value; } + { + get => _basePalette!.ThemeName; + set => _basePalette!.ThemeName = value; + } + /// [Browsable(false)] public new BasePaletteType BasePaletteType - { get => _basePalette!.BasePaletteType; set => _basePalette!.BasePaletteType = value; } + { + get => _basePalette!.BasePaletteType; + set => _basePalette!.BasePaletteType = value; + } #endregion #region Protected @@ -2901,7 +2989,7 @@ public IRenderer? BaseRenderer /// /// Source of the event. /// An PaintLayoutEventArgs containing event data. - protected override void OnPalettePaint(object sender, PaletteLayoutEventArgs e) + protected override void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) { // Can only generate change events if not suspended if (_suspendCount == 0) @@ -2911,16 +2999,16 @@ protected override void OnPalettePaint(object sender, PaletteLayoutEventArgs e) } /// - /// Raises the AllowFormChromeChanged event. + /// Raises the UseThemeFormChromeBorderWidthChanged event. /// /// Source of the event. /// An EventArgs containing event data. - protected override void OnAllowFormChromeChanged(object sender, EventArgs e) + protected override void OnUseThemeFormChromeBorderWidthChanged(object sender, EventArgs e) { // Can only generate change events if not suspended if (_suspendCount == 0) { - base.OnAllowFormChromeChanged(this, e); + base.OnUseThemeFormChromeBorderWidthChanged(this, e); } } @@ -2929,7 +3017,7 @@ protected override void OnAllowFormChromeChanged(object sender, EventArgs e) /// /// Source of the event. /// An EventArgs containing event data. - protected override void OnBasePaletteChanged(object sender, EventArgs e) + protected override void OnBasePaletteChanged(object? sender, EventArgs e) { // Can only generate change events if not suspended if (_suspendCount == 0) @@ -2943,7 +3031,7 @@ protected override void OnBasePaletteChanged(object sender, EventArgs e) /// /// Source of the event. /// An EventArgs containing event data. - protected override void OnBaseRendererChanged(object sender, EventArgs e) + protected override void OnBaseRendererChanged(object? sender, EventArgs e) { // Can only generate change events if not suspended if (_suspendCount == 0) @@ -2957,7 +3045,7 @@ protected override void OnBaseRendererChanged(object sender, EventArgs e) /// /// Source of the event. /// An EventArgs containing event data. - protected override void OnButtonSpecChanged(object sender, EventArgs e) + protected override void OnButtonSpecChanged(object? sender, EventArgs e) { // Can only generate change events if not suspended if (_suspendCount == 0) @@ -2968,49 +3056,49 @@ protected override void OnButtonSpecChanged(object sender, EventArgs e) #endregion #region Internal - internal bool HasCircularReference() - { - // Use a dictionary as a set to check for existence - var paletteSet = new Dictionary(); - - // Start processing from ourself upwards - PaletteBase? palette = this; - - // Keep searching until no more palettes found - while (palette != null) - { - // If the palette has already been encountered then it is a circular reference - if (paletteSet.ContainsKey(palette)) - { - return true; - } - else - { - // Otherwise, add to the set - paletteSet.Add(palette, true); - // Cast to correct type - - // If this is a KryptonPalette instance - if (palette is KryptonCustomPaletteBase owner) - { - // Get the next palette up in hierarchy - palette = owner.BasePaletteMode switch - { - PaletteMode.Custom => owner.BasePalette, - PaletteMode.Global => KryptonManager.InternalGlobalPalette, - _ => null - }; - } - else - { - palette = null; - } - } - } - - // No circular reference encountered - return false; - } + //internal bool HasCircularReference() + //{ + // // Use a dictionary as a set to check for existence + // var paletteSet = new Dictionary(); + + // // Start processing from ourself upwards + // PaletteBase? palette = this; + + // // Keep searching until no more palettes found + // while (palette != null) + // { + // // If the palette has already been encountered then it is a circular reference + // if (paletteSet.ContainsKey(palette)) + // { + // return true; + // } + // else + // { + // // Otherwise, add to the set + // paletteSet.Add(palette, true); + // // Cast to correct type + + // // If this is a KryptonPalette instance + // if (palette is KryptonCustomPaletteBase owner) + // { + // // Get the next palette up in hierarchy + // palette = owner.BasePaletteMode switch + // { + // PaletteMode.Custom => owner.BasePalette, + // PaletteMode.Global => KryptonManager.InternalGlobalPalette, + // _ => null + // }; + // } + // else + // { + // palette = null; + // } + // } + // } + + // // No circular reference encountered + // return false; + //} #endregion #region Implementation Persistence, Used by threading @@ -3027,10 +3115,6 @@ internal bool HasCircularReference() ResetObjectToDefault(this, true); // Ask each part of the palette to populate itself - if (_basePalette != null) - { - _allowFormChrome = _basePalette.GetAllowFormChrome(); - } ButtonStyles.PopulateFromBase(Common); CalendarDay.PopulateFromBase(); ButtonSpecs.PopulateFromBase(); @@ -3125,7 +3209,7 @@ internal bool HasCircularReference() private void ImportFromXmlDocument([DisallowNull] XmlDocument doc) { // Remember the current culture setting - CultureInfo culture = Thread.CurrentThread.CurrentCulture; + var culture = Thread.CurrentThread.CurrentCulture; try { @@ -3156,9 +3240,10 @@ private void ImportFromXmlDocument([DisallowNull] XmlDocument doc) // Grab the version number of the format being loaded var version = int.Parse(root.GetAttribute(nameof(Version))); - if (version < CURRENT_PALETTE_VERSION) + if (version < GlobalStaticValues.CURRENT_SUPPORTED_PALETTE_VERSION) { - throw new ArgumentException($"Version '{version}' number is incompatible, only version {CURRENT_PALETTE_VERSION} or above can be imported.\nUse the PaletteUpgradeTool from the Application tab of the KryptonExplorer to upgrade."); + throw new ArgumentException( + $"Version '{version}' number is incompatible, only version {GlobalStaticValues.CURRENT_SUPPORTED_PALETTE_VERSION} or above can be imported.\nUse the PaletteUpgradeTool from the Application tab of the KryptonExplorer to upgrade."); } // Grab the properties and images elements @@ -3187,6 +3272,10 @@ private void ImportFromXmlDocument([DisallowNull] XmlDocument doc) // TODO: Get paletteName from the paletteBase //SetPaletteName(root.SelectSingleNode(Name)); } + catch (Exception e) + { + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } finally { // Put back the old culture before existing routine @@ -3215,7 +3304,7 @@ private void ImportFromXmlDocument([DisallowNull] XmlDocument doc) } // Create an XmlDocument containing the saved palette details - XmlDocument doc = ExportToXmlDocument(ignoreDefaults); + var doc = ExportToXmlDocument(ignoreDefaults); // Save to the provided filename doc.Save(filename); @@ -3240,7 +3329,7 @@ private void ImportFromXmlDocument([DisallowNull] XmlDocument doc) var ignoreDefaults = (bool)parameters[1]; // Create an XmlDocument containing palette settings - XmlDocument doc = ExportToXmlDocument(ignoreDefaults); + var doc = ExportToXmlDocument(ignoreDefaults); // Save to the parameter provided stream object doc.Save(stream); @@ -3275,7 +3364,7 @@ private void ImportFromXmlDocument([DisallowNull] XmlDocument doc) private XmlDocument ExportToXmlDocument(bool ignoreDefaults) { // Remember the current culture setting - CultureInfo culture = Thread.CurrentThread.CurrentCulture; + var culture = Thread.CurrentThread.CurrentCulture; try { @@ -3289,21 +3378,28 @@ private XmlDocument ExportToXmlDocument(bool ignoreDefaults) doc.AppendChild(doc.CreateProcessingInstruction("xml", @"version=""1.0""")); // Add a comment about the source of the document - doc.AppendChild(doc.CreateComment("Created by exporting the settings of a KryptonPalette instance.")); - doc.AppendChild(doc.CreateComment("For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit")); + doc.AppendChild( + doc.CreateComment("Created by exporting the settings of a KryptonCustomPaletteBase instance.")); + doc.AppendChild(doc.CreateComment( + "For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit")); + doc.AppendChild(doc.CreateComment( + "New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE)")); + doc.AppendChild(doc.CreateComment( + $"Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - {DateTime.Now.Year}. All rights reserved.")); doc.AppendChild(doc.CreateComment("WARNING: Modifying this file may render it invalid for importing.")); + doc.AppendChild(doc.CreateComment($@"Date created: {DateTime.Now.ToLongDateString()}")); // Create a root node with version and the date information, by // having a version number the loading of older version is easier - XmlElement root = doc.CreateElement("KryptonPalette"); - root.SetAttribute(nameof(Version), CURRENT_PALETTE_VERSION.ToString()); + var root = doc.CreateElement("KryptonPalette"); + root.SetAttribute(nameof(Version), GlobalStaticValues.CURRENT_SUPPORTED_PALETTE_VERSION.ToString()); root.SetAttribute("Generated", $"{DateTime.Now.ToLongDateString()}, @{DateTime.Now.ToShortTimeString()}"); doc.AppendChild(root); // Add two children, one for storing actual palette values the other for cached images - XmlElement props = doc.CreateElement(nameof(Properties)); - XmlElement images = doc.CreateElement(nameof(Images)); + var props = doc.CreateElement(nameof(Properties)); + var images = doc.CreateElement(nameof(Images)); root.AppendChild(props); root.AppendChild(images); @@ -3316,6 +3412,12 @@ private XmlDocument ExportToXmlDocument(bool ignoreDefaults) return doc; } + catch (Exception e) + { + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + + return new XmlDocument(); + } finally { // Put back the old culture before existing routine @@ -3331,10 +3433,10 @@ private void ImportObjectFromElement(XmlElement? element, if (obj != null) { // Grab the type information for the object instance - Type t = obj.GetType(); + var t = obj.GetType(); // We are only interested in looking at the properties - foreach (PropertyInfo prop in t.GetProperties()) + foreach (var prop in t.GetProperties()) { // Search each of the attributes applied to the property foreach (var attrib in prop.GetCustomAttributes(false)) @@ -3345,10 +3447,9 @@ private void ImportObjectFromElement(XmlElement? element, // Cast attribute to the correct type // Check if there is an element matching the property - var childElement = element?.SelectSingleNode(prop.Name) as XmlElement; // Can only import if a matching XML element is found - if (childElement != null) + if (element?.SelectSingleNode(prop.Name) is XmlElement childElement) { // Should we navigate down inside the property? if (persistAttribute.Navigate) @@ -3372,7 +3473,7 @@ private void ImportObjectFromElement(XmlElement? element, var valueValue = childElement.GetAttribute(@"Value"); // We special case the loading of images - if (prop.PropertyType.Equals(typeof(Image))) + if (prop.PropertyType == typeof(Image)) { if (valueValue.Length == 0) { @@ -3381,17 +3482,20 @@ private void ImportObjectFromElement(XmlElement? element, } else { - // Have we already encountered the image? - if (imageCache.ContainsKey(valueValue)) - { - // Push the image from the cache into the property - prop.SetValue(obj, valueValue, null); - } - else - { - // Cannot find image to set to empty - prop.SetValue(obj, null, null); - } + /*// Have we already encountered the image? + if (imageCache.ContainsKey(valueValue)) + { + // Push the image from the cache into the property + prop.SetValue(obj, valueValue, null); + } + else + { + // Cannot find image to set to empty + prop.SetValue(obj, null, null); + }*/ + + // If image exists in dictionary, push the image from the cache into the property, else null. + prop.SetValue(obj, imageCache.TryGetValue(valueValue, out var imageValue) ? imageValue : null, null); } } else @@ -3403,7 +3507,7 @@ private void ImportObjectFromElement(XmlElement? element, if (valueType != nameof(Font) || valueValue != @"(none)") { // We need the type converter to create a string representation - TypeConverter converter = TypeDescriptor.GetConverter(StringToType(valueType)); + var converter = TypeDescriptor.GetConverter(StringToType(valueType)); // Recreate the value using the converter setValue = converter.ConvertFromInvariantString(valueValue); @@ -3424,7 +3528,7 @@ private void ImportObjectFromElement(XmlElement? element, private void ImportImagesFromElement(XmlElement element, ImageReverseDictionary imageCache) { // Get all nodes storing images - XmlNodeList? images = element.SelectNodes(nameof(Image)); + var images = element.SelectNodes(nameof(Image)); // Load each image node entry in turn if (images != null) @@ -3435,21 +3539,21 @@ private void ImportImagesFromElement(XmlElement element, ImageReverseDictionary var imageElement = (XmlElement)image; // Check the element is the expected type and has the required data - if (imageElement != null && + if (imageElement is not null && imageElement.HasAttribute(@"Name") && imageElement.ChildNodes.Count == 1 && - imageElement.ChildNodes[0].NodeType == XmlNodeType.CDATA) + imageElement.ChildNodes[0]!.NodeType == XmlNodeType.CDATA) { try { // Extract the image name - var name = imageElement.GetAttribute(@"Name"); + string name = imageElement.GetAttribute(@"Name"); // Grab the CDATA section that contains the base64 value - var cdata = imageElement.ChildNodes[0] as XmlCDataSection; + XmlCDataSection cdata = (imageElement.ChildNodes[0] as XmlCDataSection)!; // Convert to back from a string to bytes - var bytes = Convert.FromBase64String(cdata.Value); + byte[] bytes = Convert.FromBase64String(cdata.Value!); // Convert the bytes back into an Image using var memory = new MemoryStream(bytes); @@ -3460,13 +3564,14 @@ private void ImportImagesFromElement(XmlElement element, ImageReverseDictionary } catch { + // ToDo: Remove BinaryFormatter, as it's now considered obsolete and a security risk in >= .NET 9 // Do the old way // SYSLIB0011: BinaryFormatter serialization is obsolete #pragma warning disable SYSLIB0011 var formatter = new BinaryFormatter(); - var old = (Image)formatter.Deserialize(memory); + var old = formatter.Deserialize(memory) as Image; #pragma warning restore SYSLIB0011 - resurrect = old is Bitmap bitmap ? bitmap : new Bitmap(old); + resurrect = old as Bitmap ?? new Bitmap(old!); } // Add into the lookup dictionary @@ -3494,10 +3599,10 @@ private void ExportObjectToElement(XmlDocument doc, } // Grab the type information for the object instance - Type t = obj.GetType(); + var t = obj.GetType(); // We are only interested in looking at the properties - foreach (PropertyInfo prop in t.GetProperties()) + foreach (var prop in t.GetProperties()) { // Search each of the attributes applied to the property foreach (var attrib in prop.GetCustomAttributes(false)) @@ -3514,16 +3619,16 @@ private void ExportObjectToElement(XmlDocument doc, // Grab the property object var childObj = prop.GetValue(obj, null); - // Should be test if the object contains only default values? + // Test if the object contains only default values? if (ignoreDefaults) { - PropertyDescriptor propertyIsDefault = TypeDescriptor.GetProperties(childObj)[nameof(IsDefault)]; + PropertyDescriptor propertyIsDefault = TypeDescriptor.GetProperties(childObj!)[nameof(IsDefault)]!; // All compound objects are expected to have an 'IsDefault' returning a boolean if (propertyIsDefault != null && propertyIsDefault.PropertyType == typeof(bool)) { // If the object 'IsDefault' then no need to persist it - if ((bool)propertyIsDefault.GetValue(childObj)) + if ((bool)propertyIsDefault.GetValue(childObj)!) { childObj = null; } @@ -3534,7 +3639,7 @@ private void ExportObjectToElement(XmlDocument doc, if (childObj != null) { // Create and add a new xml element - XmlElement childElement = doc.CreateElement(prop.Name); + var childElement = doc.CreateElement(prop.Name); element.AppendChild(childElement); // Recurse into the object instance @@ -3558,10 +3663,10 @@ private void ExportObjectToElement(XmlDocument doc, if (defaultAttribs.Length == 1) { // Cast to correct type - var defaultAttrib = (DefaultValueAttribute)defaultAttribs[0]; + var defaultAttrib = defaultAttribs[0] as DefaultValueAttribute; // Decide if the property value matches the default described by the attribute - if (defaultAttrib.Value == null) + if (defaultAttrib!.Value == null) { ignore = childObj == null; } @@ -3576,14 +3681,14 @@ private void ExportObjectToElement(XmlDocument doc, if (!ignore) { // Create and add a new xml element - XmlElement childElement = doc.CreateElement(prop.Name); + var childElement = doc.CreateElement(prop.Name); element.AppendChild(childElement); // Save the type of the property childElement.SetAttribute(nameof(Type), TypeToString(prop.PropertyType)); // We special case the saving of images - if (prop.PropertyType.Equals(typeof(Image))) + if (prop.PropertyType == typeof(Image)) { if (childObj == null) { @@ -3599,31 +3704,34 @@ private void ExportObjectToElement(XmlDocument doc, } // Have we already encountered the image? - if (imageCache != null && imageCache.ContainsKey(image)) + if (imageCache != null) { - // Save reference to the existing cached image - childElement.SetAttribute(@"Value", imageCache[image]); - } - else - { - // Generate a placeholder string - var imageName = $@"ImageCache{(imageCache.Count + 1)}"; + if (imageCache.TryGetValue(image, out var value)) + { + // Save reference to the existing cached image + childElement.SetAttribute(@"Value", value); + } + else + { + // Generate a placeholder string + var imageName = $@"ImageCache{(imageCache.Count + 1)}"; - // Add the actual image instance into the cache - imageCache.Add(image, imageName); + // Add the actual image instance into the cache + imageCache.Add(image, imageName); - // Save the placeholder name instead of the actual image - childElement.SetAttribute(@"Value", imageName); + // Save the placeholder name instead of the actual image + childElement.SetAttribute(@"Value", imageName); + } } } } else { // We need the type converter to create a string representation - TypeConverter converter = TypeDescriptor.GetConverter(prop.PropertyType); + var converter = TypeDescriptor.GetConverter(prop.PropertyType); // Save to an invariant string so that load is not affected by culture - childElement.SetAttribute(@"Value", converter.ConvertToInvariantString(childObj)); + childElement.SetAttribute(@"Value", converter.ConvertToInvariantString(childObj!)); } } } @@ -3639,7 +3747,7 @@ private void ExportImagesToElement(XmlDocument doc, XmlElement element, ImageDic { try { - // Convert the Image into base64 so it can be used in xml + // Convert the Image into base64, so it can be used in xml using var memory = new MemoryStream(); var imageFormat = entry.Key.RawFormat; @@ -3654,12 +3762,12 @@ private void ExportImagesToElement(XmlDocument doc, XmlElement element, ImageDic var base64 = Convert.ToBase64String(memory.ToArray()); // Create and add a new xml element - XmlElement imageElement = doc.CreateElement(nameof(Image)); + var imageElement = doc.CreateElement(nameof(Image)); imageElement.SetAttribute(@"Name", entry.Value); element.AppendChild(imageElement); // Set the image data into a CDATA section - XmlCDataSection cdata = doc.CreateCDataSection(base64); + var cdata = doc.CreateCDataSection(base64); imageElement.AppendChild(cdata); } catch (SerializationException) @@ -3675,10 +3783,10 @@ private void ResetObjectToDefault(object? obj, bool populate) if (obj != null) { // Grab the type information for the object instance - Type t = obj.GetType(); + var t = obj.GetType(); // We are only interested in looking at the properties - foreach (PropertyInfo prop in t.GetProperties()) + foreach (var prop in t.GetProperties()) { // Search each of the attributes applied to the property foreach (var attrib in prop.GetCustomAttributes(false)) @@ -3693,9 +3801,9 @@ private void ResetObjectToDefault(object? obj, bool populate) if (prop.CanRead) { // Grab the property object - var childObj = prop.GetValue(obj, null); + object? childObj = prop.GetValue(obj, null); - PropertyDescriptor propertyIsDefault = TypeDescriptor.GetProperties(childObj)[nameof(IsDefault)]; + var propertyIsDefault = TypeDescriptor.GetProperties(childObj!)[nameof(IsDefault)]; // All compound objects are expected to have an 'IsDefault' returning a boolean if (propertyIsDefault != null && propertyIsDefault.PropertyType == typeof(bool)) @@ -3717,7 +3825,7 @@ private void ResetObjectToDefault(object? obj, bool populate) } else { - // Only default value if not part of a populate operation or we are part of a populate + // Only default value if not part of a populate operation, or we are part of a populate // operation and the persist property indicates it can be reset in a populate scenario if (!populate || persist.Populate) { @@ -3814,7 +3922,7 @@ private static Type StringToType(string s) #endregion #region Implementation GetPalette - private PaletteElementColor? GetTrackBar(PaletteElement element, PaletteState state) + private PaletteElementColor GetTrackBar(PaletteElement element, PaletteState state) { switch (element) { @@ -3830,9 +3938,9 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - DebugTools.NotImplemented("GetTrackBar(PaletteElement element, PaletteState state)", "KryptonPalette.cs"); - return null; + throw DebugTools.NotImplemented(state.ToString()); } + case PaletteElement.TrackBarTrack: switch (state) { @@ -3845,9 +3953,9 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - DebugTools.NotImplemented("GetTrackBar(PaletteElement element, PaletteState state)", "KryptonPalette.cs"); - return null; + throw DebugTools.NotImplemented(state.ToString()); } + case PaletteElement.TrackBarPosition: switch (state) { @@ -3864,22 +3972,23 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - DebugTools.NotImplemented("GetTrackBar(PaletteElement element, PaletteState state)", "KryptonPalette.cs"); - return null; + throw DebugTools.NotImplemented(state.ToString()); } + default: // Should never happen! Debug.Assert(false); - DebugTools.NotImplemented("GetTrackBar(PaletteElement element, PaletteState state)", "KryptonPalette.cs"); - return null; + throw DebugTools.NotImplemented(element.ToString()); } } private IPaletteRibbonGeneral GetPaletteRibbonGeneral() => Ribbon.RibbonGeneral; - private IPaletteRibbonGeneral GetPaletteRibbonGeneral(PaletteState state) => Ribbon.RibbonGeneral; + private IPaletteRibbonGeneral GetPaletteRibbonGeneral(PaletteState _ /*state*/) => Ribbon.RibbonGeneral; - private IPaletteRibbonBack? GetPaletteRibbonBack(PaletteRibbonBackStyle style, PaletteState state) + private IPaletteRibbonFileAppTab GetPaletteRibbonFileAppTab(PaletteState _ /*state*/) => Ribbon.RibbonFileAppTab; + + private IPaletteRibbonBack GetPaletteRibbonBack(PaletteRibbonBackStyle style, PaletteState state) { switch (style) { @@ -3920,11 +4029,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonTab ribbonTab, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonTab ribbonTab, PaletteState state) { switch (state) @@ -3951,11 +4060,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonAppButton ribbonAppButton, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonAppButton ribbonAppButton, PaletteState state) { switch (state) @@ -3969,11 +4078,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonGroupArea ribbonGroupArea, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonGroupArea ribbonGroupArea, PaletteState state) { switch (state) @@ -3994,11 +4103,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonGroupNormalBorder ribbonGroupNormalBorder, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonGroupNormalBorder ribbonGroupNormalBorder, PaletteState state) { switch (state) @@ -4014,11 +4123,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonGroupNormalTitle ribbonGroupNormalTitle, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonGroupNormalTitle ribbonGroupNormalTitle, PaletteState state) { switch (state) @@ -4034,11 +4143,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedBorder ribbonGroupCollapsedBorder, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedBorder ribbonGroupCollapsedBorder, PaletteState state) { switch (state) @@ -4056,11 +4165,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedBack ribbonGroupCollapsedBack, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedBack ribbonGroupCollapsedBack, PaletteState state) { switch (state) @@ -4078,11 +4187,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedFrameBorder ribbonGroupCollapsedFrameBorder, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedFrameBorder ribbonGroupCollapsedFrameBorder, PaletteState state) { switch (state) @@ -4100,11 +4209,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedFrameBack ribbonGroupCollapsedFrameBack, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonGroupCollapsedFrameBack ribbonGroupCollapsedFrameBack, PaletteState state) { switch (state) @@ -4122,11 +4231,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonBack? GetPaletteRibbonBack(KryptonPaletteRibbonQATMinibar ribbonQATMinibar, + private IPaletteRibbonBack GetPaletteRibbonBack(KryptonPaletteRibbonQATMinibar ribbonQATMinibar, PaletteState state) { switch (state) @@ -4139,11 +4248,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonText? GetPaletteRibbonText(PaletteRibbonTextStyle style, + private IPaletteRibbonText GetPaletteRibbonText(PaletteRibbonTextStyle style, PaletteState state) { switch (style) @@ -4169,11 +4278,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonText? GetPaletteRibbonText(KryptonPaletteRibbonTab ribbonTab, + private IPaletteRibbonText GetPaletteRibbonText(KryptonPaletteRibbonTab ribbonTab, PaletteState state) { switch (state) @@ -4197,11 +4306,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonText? GetPaletteRibbonText(KryptonPaletteRibbonGroupNormalTitle ribbonGroupNormalTitle, + private IPaletteRibbonText GetPaletteRibbonText(KryptonPaletteRibbonGroupNormalTitle ribbonGroupNormalTitle, PaletteState state) { switch (state) @@ -4213,11 +4322,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonText? GetPaletteRibbonText(KryptonPaletteRibbonGroupCollapsedText ribbonGroupCollapsedText, + private IPaletteRibbonText GetPaletteRibbonText(KryptonPaletteRibbonGroupCollapsedText ribbonGroupCollapsedText, PaletteState state) { switch (state) @@ -4229,11 +4338,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteRibbonText? GetPaletteRibbonText(KryptonPaletteRibbonGroupBaseText ribbonGroupButtonText, + private IPaletteRibbonText GetPaletteRibbonText(KryptonPaletteRibbonGroupBaseText ribbonGroupButtonText, PaletteState state) { switch (state) @@ -4245,11 +4354,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteButtonSpec? GetPaletteButtonSpec(PaletteButtonSpecStyle style) + private IPaletteButtonSpec GetPaletteButtonSpec(PaletteButtonSpecStyle style) { switch (style) { @@ -4304,11 +4413,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } - private IPaletteBack? GetPaletteBack(PaletteBackStyle style, PaletteState state) + private IPaletteBack GetPaletteBack(PaletteBackStyle style, PaletteState state) { // Update the redirectors Common.StateCommon.BackStyle = style; @@ -4508,11 +4617,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } - private PaletteBorder? GetPaletteBorder(PaletteBorderStyle style, PaletteState state) + private PaletteBorder GetPaletteBorder(PaletteBorderStyle style, PaletteState state) { // Must update the redirector values used if the palette source is used Common.StateCommon.BorderStyle = style; @@ -4689,12 +4798,11 @@ private static Type StringToType(string s) return ContextMenu.StateCommon.Separator.Border; default: // Should never happen! - Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } - private IPaletteContent? GetPaletteContent(PaletteContentStyle style, PaletteState state) + private IPaletteContent GetPaletteContent(PaletteContentStyle style, PaletteState state) { // Must update the redirector values used if the palette source is used Common.StateCommon.ContentStyle = style; @@ -4858,11 +4966,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } - private IPaletteBack? GetPaletteBackButton(KryptonPaletteCheckButton button, PaletteState state) + private IPaletteBack GetPaletteBackButton(KryptonPaletteCheckButton button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -4877,7 +4985,7 @@ private static Type StringToType(string s) return CalendarDay.OverrideToday.Back; default: { - PaletteTriple? buttonState = GetPaletteButton(button, state); + var buttonState = GetPaletteButton(button, state); if (buttonState != null) { return buttonState.Back; @@ -4886,13 +4994,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteBorder? GetPaletteBorderButton(KryptonPaletteCheckButton button, PaletteState state) + private PaletteBorder GetPaletteBorderButton(KryptonPaletteCheckButton button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -4907,7 +5015,7 @@ private static Type StringToType(string s) return CalendarDay.OverrideToday.Border; default: { - PaletteTriple? buttonState = GetPaletteButton(button, state); + var buttonState = GetPaletteButton(button, state); if (buttonState != null) { return buttonState.Border; @@ -4916,13 +5024,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteContent? GetPaletteContentButton(KryptonPaletteCheckButton button, PaletteState state) + private PaletteContent GetPaletteContentButton(KryptonPaletteCheckButton button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -4937,7 +5045,7 @@ private static Type StringToType(string s) return CalendarDay.OverrideToday.Content; default: { - PaletteTriple? buttonState = GetPaletteButton(button, state); + var buttonState = GetPaletteButton(button, state); if (buttonState != null) { return buttonState.Content; @@ -4946,13 +5054,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteTriple? GetPaletteButton(KryptonPaletteCheckButton button, PaletteState state) + private PaletteTriple GetPaletteButton(KryptonPaletteCheckButton button, PaletteState state) { switch (state) { @@ -4973,11 +5081,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteBack? GetPaletteBackCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) + private IPaletteBack GetPaletteBackCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -4990,7 +5098,7 @@ private static Type StringToType(string s) return button.OverrideToday.Back; default: { - PaletteTriple? buttonState = GetPaletteCalendarDay(button, state); + var buttonState = GetPaletteCalendarDay(button, state); if (buttonState != null) { return buttonState.Back; @@ -4999,13 +5107,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteBorder? GetPaletteBorderCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) + private PaletteBorder GetPaletteBorderCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -5018,7 +5126,7 @@ private static Type StringToType(string s) return button.OverrideToday.Border; default: { - PaletteTriple? buttonState = GetPaletteCalendarDay(button, state); + var buttonState = GetPaletteCalendarDay(button, state); if (buttonState != null) { return buttonState.Border; @@ -5027,13 +5135,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteContent? GetPaletteContentCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) + private PaletteContent GetPaletteContentCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -5046,7 +5154,7 @@ private static Type StringToType(string s) return button.OverrideToday.Content; default: { - PaletteTriple? buttonState = GetPaletteCalendarDay(button, state); + var buttonState = GetPaletteCalendarDay(button, state); if (buttonState != null) { return buttonState.Content; @@ -5055,13 +5163,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteTriple? GetPaletteCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) + private PaletteTriple GetPaletteCalendarDay(KryptonPaletteCalendarDay button, PaletteState state) { switch (state) { @@ -5083,11 +5191,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteTriple? GetPaletteInputControl(KryptonPaletteInputControl inputControl, PaletteState state) + private PaletteTriple GetPaletteInputControl(KryptonPaletteInputControl inputControl, PaletteState state) { switch (state) { @@ -5106,11 +5214,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteBack? GetPaletteBackTab(KryptonPaletteTabButton button, PaletteState state) + private IPaletteBack GetPaletteBackTab(KryptonPaletteTabButton button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -5119,7 +5227,7 @@ private static Type StringToType(string s) return button.OverrideFocus.Back; default: { - PaletteTabTriple? buttonState = GetPaletteTab(button, state); + var buttonState = GetPaletteTab(button, state); if (buttonState != null) { return buttonState.Back; @@ -5128,13 +5236,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteBorder? GetPaletteBorderTab(KryptonPaletteTabButton button, PaletteState state) + private PaletteBorder GetPaletteBorderTab(KryptonPaletteTabButton button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -5143,7 +5251,7 @@ private static Type StringToType(string s) return button.OverrideFocus.Border; default: { - PaletteTabTriple? buttonState = GetPaletteTab(button, state); + var buttonState = GetPaletteTab(button, state); if (buttonState != null) { return buttonState.Border; @@ -5152,13 +5260,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteContent? GetPaletteContentTab(KryptonPaletteTabButton button, PaletteState state) + private PaletteContent GetPaletteContentTab(KryptonPaletteTabButton button, PaletteState state) { // Have to special case states that do not derive from PaletteTriple switch (state) @@ -5167,7 +5275,7 @@ private static Type StringToType(string s) return button.OverrideFocus.Content; default: { - PaletteTabTriple? buttonState = GetPaletteTab(button, state); + var buttonState = GetPaletteTab(button, state); if (buttonState != null) { return buttonState.Content; @@ -5176,13 +5284,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } } } - private PaletteTabTriple? GetPaletteTab(KryptonPaletteTabButton button, PaletteState state) + private PaletteTabTriple GetPaletteTab(KryptonPaletteTabButton button, PaletteState state) { switch (state) { @@ -5201,13 +5309,13 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackSeparator(KryptonPaletteSeparator separator, PaletteState state) + private PaletteBack GetPaletteBackSeparator(KryptonPaletteSeparator separator, PaletteState state) { - PaletteSeparatorPadding? separatorState = GetPaletteSeparator(separator, state); + var separatorState = GetPaletteSeparator(separator, state); if (separatorState != null) { @@ -5217,13 +5325,13 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented("separatorState == null"); } } - private PaletteBorder? GetPaletteBorderSeparator(KryptonPaletteSeparator separator, PaletteState state) + private PaletteBorder GetPaletteBorderSeparator(KryptonPaletteSeparator separator, PaletteState state) { - PaletteSeparatorPadding? separatorState = GetPaletteSeparator(separator, state); + var separatorState = GetPaletteSeparator(separator, state); if (separatorState != null) { @@ -5233,11 +5341,11 @@ private static Type StringToType(string s) { // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented("separatorState == null"); } } - private PaletteSeparatorPadding? GetPaletteSeparator(KryptonPaletteSeparator separator, PaletteState state) + private PaletteSeparatorPadding GetPaletteSeparator(KryptonPaletteSeparator separator, PaletteState state) { switch (state) { @@ -5252,43 +5360,25 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackControl(KryptonPaletteControl control, PaletteState state) + private PaletteBack GetPaletteBackControl(KryptonPaletteControl control, PaletteState state) { - PaletteDouble? controlState = GetPaletteControl(control, state); + var controlState = GetPaletteControl(control, state); - if (controlState != null) - { - return controlState.Back; - } - else - { - // Should never happen! - Debug.Assert(false); - return null; - } + return controlState.Back; } - private PaletteBorder? GetPaletteBorderControl(KryptonPaletteControl control, PaletteState state) + private PaletteBorder GetPaletteBorderControl(KryptonPaletteControl control, PaletteState state) { - PaletteDouble? controlState = GetPaletteControl(control, state); + var controlState = GetPaletteControl(control, state); - if (controlState != null) - { - return controlState.Border; - } - else - { - // Should never happen! - Debug.Assert(false); - return null; - } + return controlState.Border; } - private PaletteDouble? GetPaletteControl(KryptonPaletteControl control, PaletteState state) + private PaletteDouble GetPaletteControl(KryptonPaletteControl control, PaletteState state) { switch (state) { @@ -5299,27 +5389,18 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackForm(KryptonPaletteForm form, PaletteState state) + private PaletteBack GetPaletteBackForm(KryptonPaletteForm form, PaletteState state) { - PaletteDouble? controlState = GetPaletteForm(form, state); + var controlState = GetPaletteForm(form, state); - if (controlState != null) - { - return controlState.Back; - } - else - { - // Should never happen! - Debug.Assert(false); - return null; - } + return controlState.Back; } - private PaletteBack? GetPaletteBackGridBackground(KryptonPaletteGrid grid, PaletteState state) + private PaletteBack GetPaletteBackGridBackground(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5330,11 +5411,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackGridHeaderColumn(KryptonPaletteGrid grid, PaletteState state) + private PaletteBack GetPaletteBackGridHeaderColumn(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5351,11 +5432,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackGridHeaderRow(KryptonPaletteGrid grid, PaletteState state) + private PaletteBack GetPaletteBackGridHeaderRow(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5372,11 +5453,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackGridDataCell(KryptonPaletteGrid grid, PaletteState state) + private PaletteBack GetPaletteBackGridDataCell(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5389,11 +5470,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBorder? GetPaletteBorderGridHeaderColumn(KryptonPaletteGrid grid, PaletteState state) + private PaletteBorder GetPaletteBorderGridHeaderColumn(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5410,11 +5491,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBorder? GetPaletteBorderGridHeaderRow(KryptonPaletteGrid grid, PaletteState state) + private PaletteBorder GetPaletteBorderGridHeaderRow(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5431,11 +5512,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBorder? GetPaletteBorderGridDataCell(KryptonPaletteGrid grid, PaletteState state) + private PaletteBorder GetPaletteBorderGridDataCell(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5448,12 +5529,12 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteContent? GetPaletteContentGridHeaderColumn(KryptonPaletteGrid grid, PaletteState state) + private IPaletteContent GetPaletteContentGridHeaderColumn(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5470,11 +5551,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteContent? GetPaletteContentGridHeaderRow(KryptonPaletteGrid grid, PaletteState state) + private IPaletteContent GetPaletteContentGridHeaderRow(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5491,11 +5572,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteContent? GetPaletteContentGridDataCell(KryptonPaletteGrid grid, PaletteState state) + private IPaletteContent GetPaletteContentGridDataCell(KryptonPaletteGrid grid, PaletteState state) { switch (state) { @@ -5508,27 +5589,18 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBorder? GetPaletteBorderForm(KryptonPaletteForm form, PaletteState state) + private PaletteBorder GetPaletteBorderForm(KryptonPaletteForm form, PaletteState state) { - PaletteDouble? controlState = GetPaletteForm(form, state); + var controlState = GetPaletteForm(form, state); - if (controlState != null) - { - return controlState.Border; - } - else - { - // Should never happen! - Debug.Assert(false); - return null; - } + return controlState.Border; } - private PaletteDouble? GetPaletteForm(KryptonPaletteForm form, PaletteState state) + private PaletteDouble GetPaletteForm(KryptonPaletteForm form, PaletteState state) { switch (state) { @@ -5539,95 +5611,73 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackHeader(KryptonPaletteHeader header, PaletteState state) + private PaletteBack GetPaletteBackHeader(KryptonPaletteHeader header, PaletteState state) { - PaletteTriple? headerState = GetPaletteHeader(header, state); + var headerState = GetPaletteHeader(header, state); - if (headerState != null) - { - return headerState.Back; - } - else - { - // Should never happen! - Debug.Assert(false); - return null; - } + return headerState.Back; } - private PaletteBorder? GetPaletteBorderHeader(KryptonPaletteHeader header, PaletteState state) + private PaletteBorder GetPaletteBorderHeader(KryptonPaletteHeader header, PaletteState state) { - PaletteTriple? headerState = GetPaletteHeader(header, state); + var headerState = GetPaletteHeader(header, state); - if (headerState != null) - { - return headerState.Border; - } - else - { - // Should never happen! - Debug.Assert(false); - return null; - } + return headerState.Border; } - private PaletteContent? GetPaletteContentHeader(KryptonPaletteHeader header, PaletteState state) + private PaletteContent GetPaletteContentHeader(KryptonPaletteHeader header, PaletteState state) { - PaletteTriple? headerState = GetPaletteHeader(header, state); + var headerState = GetPaletteHeader(header, state); - if (headerState != null) - { - return headerState.Content; - } - else - { - // Should never happen! - Debug.Assert(false); - return null; - } + return headerState.Content; } - private PaletteTriple? GetPaletteHeader(KryptonPaletteHeader header, PaletteState state) + private PaletteTriple GetPaletteHeader(KryptonPaletteHeader header, PaletteState state) { switch (state) { case PaletteState.Disabled: return header.StateDisabled; + case PaletteState.Tracking: // #1729 KHeader does not implement the tracking state, default to normal case PaletteState.Normal: return header.StateNormal; default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPalettePanel(KryptonPalettePanel panel, PaletteState state) + private PaletteBack GetPalettePanel(KryptonPalettePanel panel, PaletteState state) { switch (state) { case PaletteState.Disabled: return panel.StateDisabled; + + case PaletteState.Tracking: // #1552 KPanel does not implement the tracking state, default to normal case PaletteState.Normal: return panel.StateNormal; + default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteContent? GetPaletteLabel(KryptonPaletteLabel label, PaletteState state) + private PaletteContent GetPaletteLabel(KryptonPaletteLabel label, PaletteState state) { switch (state) { case PaletteState.Disabled: return label.StateDisabled; case PaletteState.Normal: + case PaletteState.ContextNormal: // Occurs from the TreeGrid case PaletteState.Tracking: case PaletteState.Pressed: return label.StateNormal; @@ -5642,11 +5692,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackContextMenuItemSplit(PaletteState state) + private PaletteBack GetPaletteBackContextMenuItemSplit(PaletteState state) { switch (state) { @@ -5659,11 +5709,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackContextMenuItemHighlight(PaletteState state) + private PaletteBack GetPaletteBackContextMenuItemHighlight(PaletteState state) { switch (state) { @@ -5676,11 +5726,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBack? GetPaletteBackContextMenuItemImage(PaletteState state) + private PaletteBack GetPaletteBackContextMenuItemImage(PaletteState state) { switch (state) { @@ -5690,14 +5740,16 @@ private static Type StringToType(string s) return ContextMenu.StateNormal.ItemImage.Back; case PaletteState.CheckedNormal: return ContextMenu.StateChecked.ItemImage.Back; + case PaletteState.CheckedTracking: + return ContextMenu.StateHighlight.ItemHighlight.Back; default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBorder? GetPaletteBorderContextMenuItemHighlight(PaletteState state) + private PaletteBorder GetPaletteBorderContextMenuItemHighlight(PaletteState state) { switch (state) { @@ -5710,11 +5762,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBorder? GetPaletteBorderContextMenuItemSplit(PaletteState state) + private PaletteBorder GetPaletteBorderContextMenuItemSplit(PaletteState state) { switch (state) { @@ -5727,11 +5779,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteBorder? GetPaletteBorderContextMenuItemImage(PaletteState state) + private PaletteBorder GetPaletteBorderContextMenuItemImage(PaletteState state) { switch (state) { @@ -5741,14 +5793,16 @@ private static Type StringToType(string s) return ContextMenu.StateNormal.ItemImage.Border; case PaletteState.CheckedNormal: return ContextMenu.StateChecked.ItemImage.Border; + case PaletteState.CheckedTracking: + return ContextMenu.StateHighlight.ItemHighlight.Border; default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteContent? GetPaletteContentContextMenuItemImage(PaletteState state) + private PaletteContent GetPaletteContentContextMenuItemImage(PaletteState state) { switch (state) { @@ -5761,11 +5815,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private PaletteContent? GetPaletteContentContextMenuItemShortcutText(PaletteState state) + private PaletteContent GetPaletteContentContextMenuItemShortcutText(PaletteState state) { switch (state) { @@ -5776,11 +5830,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteContent? GetPaletteContentContextMenuTextAlternate(PaletteState state) + private IPaletteContent GetPaletteContentContextMenuTextAlternate(PaletteState state) { switch (state) { @@ -5791,11 +5845,11 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } - private IPaletteContent? GetPaletteContentContextMenuItemTextStandard(PaletteState state) + private IPaletteContent GetPaletteContentContextMenuItemTextStandard(PaletteState state) { switch (state) { @@ -5806,13 +5860,13 @@ private static Type StringToType(string s) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion #region Implementation - private void OnMenuToolStatusPaint(object sender, NeedLayoutEventArgs e) + private void OnMenuToolStatusPaint(object? sender, NeedLayoutEventArgs e) { // Only raise the need to paint if painting has not been suspended if (_suspendCount == 0) @@ -5828,19 +5882,19 @@ private void OnNeedPaint(object? sender, NeedLayoutEventArgs e) // Only raise the need to paint if updates have not been suspended if (_suspendCount == 0) { - // Changing the krypton control colors does not effect the menu/tool/status areas + // Changing the krypton control colors does not affect the menu/tool/status areas OnPalettePaint(this, new PaletteLayoutEventArgs(e.NeedLayout, false)); } } - private void SetPalette(PaletteBase? basePalette) + private void SetPalette(PaletteBase basePalette) { if (basePalette != _basePalette) { - Debug.Assert(_basePalette != null); + Debug.Assert(_basePalette is not null); // Unhook from current palette events - if (_basePalette != null) + if (_basePalette is not null) { _basePalette.PalettePaint -= OnPalettePaint; _basePalette.ButtonSpecChanged -= OnButtonSpecChanged; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCustomPaletteManager.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCustomPaletteManager.cs deleted file mode 100644 index 30a479a59..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonCustomPaletteManager.cs +++ /dev/null @@ -1,70 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - [ToolboxItem(false)] //, System.ComponentModel.DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public partial class KryptonCustomPaletteManager : Component - { - #region Instance Fields - - private BasePaletteType _paletteType; - - private string _themeName; - - private PaletteBase _basePalette; - - #endregion - - #region Public - - public BasePaletteType PaletteType { get => _paletteType; set => _paletteType = value; } - - public string ThemeName { get => _themeName; private set => _themeName = value; } - - public PaletteBase BasePalette { get => _basePalette; set => _basePalette = value; } - - #endregion - - #region Identity - - /// Initializes a new instance of the class. - public KryptonCustomPaletteManager() - { - _paletteType = BasePaletteType.Office2007; - - _themeName = null; - - _basePalette = null; - } - - #endregion - - #region Implementation - - public static void LoadExternalPalette(PaletteBase palette) - { - var pm = new KryptonCustomPaletteManager(); - - try - { - pm.BasePalette = palette; - } - catch (Exception e) - { - ExceptionHandler.CaptureException(e); - } - } - - #endregion - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridView.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridView.cs index bd654248a..d94765489 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridView.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridView.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,8 +23,8 @@ namespace Krypton.Toolkit public class KryptonDataGridView : DataGridView { #region Type Declaractions - private class ColumnHeaderCache : Dictionary { } - private class RowHeaderCache : Dictionary { } + private class ColumnHeaderCache : Dictionary; + private class RowHeaderCache : Dictionary; #endregion #region Classes @@ -56,7 +56,7 @@ private class ToolTipContent : IContentValues /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. @@ -106,9 +106,9 @@ private class ToolTipContent : IContentValues // States and redirector // Cached values for determining cell style overrides - private Font _columnFont; - private Font _rowFont; - private Font _dataCellFont; + private Font? _columnFont; + private Font? _rowFont; + private Font? _dataCellFont; private Padding _columnPadding; private Padding _rowPadding; private Padding _dataCellPadding; @@ -134,7 +134,7 @@ private class ToolTipContent : IContentValues private bool _hideOuterBorders; private string _toolTipText; private byte _oldLocation; - private DataGridViewCell _oldCell; + private DataGridViewCell? _oldCell; private KryptonContextMenu? _kryptonContextMenu; //Seb @@ -213,7 +213,7 @@ protected override void Dispose(bool disposing) SystemEvents.UserPreferenceChanged -= OnUserPreferenceChanged; // Dispose of view manager related resources - ViewManager.Dispose(); + ViewManager?.Dispose(); } base.Dispose(disposing); @@ -227,8 +227,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new Color BackgroundColor - { + public new Color BackgroundColor { get => base.BackgroundColor; set => base.BackgroundColor = value; } @@ -252,7 +251,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new DataGridViewCellBorderStyle CellBorderStyle + public new DataGridViewCellBorderStyle CellBorderStyle { get => base.CellBorderStyle; set => base.CellBorderStyle = value; @@ -264,7 +263,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new DataGridViewHeaderBorderStyle ColumnHeadersBorderStyle + public new DataGridViewHeaderBorderStyle ColumnHeadersBorderStyle { get => base.ColumnHeadersBorderStyle; set => base.ColumnHeadersBorderStyle = value; @@ -276,7 +275,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new DataGridViewCellStyle ColumnHeadersDefaultCellStyle + public new DataGridViewCellStyle ColumnHeadersDefaultCellStyle { get => base.ColumnHeadersDefaultCellStyle; set => base.ColumnHeadersDefaultCellStyle = value; @@ -288,7 +287,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new DataGridViewCellStyle DefaultCellStyle + public new DataGridViewCellStyle DefaultCellStyle { get => base.DefaultCellStyle; set => base.DefaultCellStyle = value; @@ -300,7 +299,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new bool EnableHeadersVisualStyles + public new bool EnableHeadersVisualStyles { get => base.EnableHeadersVisualStyles; set => base.EnableHeadersVisualStyles = value; @@ -312,7 +311,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new Color GridColor + public new Color GridColor { get => base.GridColor; set => base.GridColor = value; @@ -324,7 +323,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new DataGridViewHeaderBorderStyle RowHeadersBorderStyle + public new DataGridViewHeaderBorderStyle RowHeadersBorderStyle { get => base.RowHeadersBorderStyle; set => base.RowHeadersBorderStyle = value; @@ -336,7 +335,7 @@ protected override void Dispose(bool disposing) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new DataGridViewCellStyle RowHeadersDefaultCellStyle + public new DataGridViewCellStyle RowHeadersDefaultCellStyle { get => base.RowHeadersDefaultCellStyle; set => base.RowHeadersDefaultCellStyle = value; @@ -350,12 +349,21 @@ protected override void Dispose(bool disposing) #endregion #region Public + [Browsable(false)] + [Description(@"When true and AutoGenerateColumns is true the KryptonDataGridView will use Krypton column types, when false the standard WinForms column types.")] + [DefaultValue(true)] + public bool AutoGenerateKryptonColumns + { + get; + set; + } = true; + /// Gets or sets the associated with this control. /// The for this control, or if there is no . The default is . [Category(@"Behavior")] [Description(@"Consider using KryptonContextMenu within the behaviors section.\nThe Winforms shortcut menu to show when the user right-clicks the page.\nNote: The ContextMenu will be rendered.")] [DefaultValue(null)] - public override ContextMenuStrip? ContextMenuStrip + public override ContextMenuStrip? ContextMenuStrip { [DebuggerStepThrough] get => base.ContextMenuStrip; @@ -388,7 +396,7 @@ public override ContextMenuStrip? ContextMenuStrip [Category(@"Behavior")] [Description(@"The KryptonContextMenu to show when the user right-clicks the Control.")] [DefaultValue(null)] - public virtual KryptonContextMenu? KryptonContextMenu + public virtual KryptonContextMenu? KryptonContextMenu { get => _kryptonContextMenu; @@ -419,7 +427,7 @@ public virtual KryptonContextMenu? KryptonContextMenu [Category(@"Visuals")] [Description(@"Determine if the outer borders of the grid cells are drawn.")] [DefaultValue(false)] - public bool HideOuterBorders + public bool HideOuterBorders { get => _hideOuterBorders; @@ -438,7 +446,7 @@ public bool HideOuterBorders /// [Category(@"Visuals")] [Description(@"Palette applied to drawing.")] - public PaletteMode PaletteMode + public PaletteMode PaletteMode { [DebuggerStepThrough] get => _paletteMode; @@ -486,7 +494,7 @@ public PaletteMode PaletteMode [Category(@"Visuals")] [Description(@"Custom palette applied to drawing.")] [DefaultValue(null)] - public PaletteBase? Palette + public PaletteBase? Palette { [DebuggerStepThrough] get => _localPalette; @@ -543,7 +551,7 @@ public PaletteBase? Palette [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IRenderer? Renderer + public IRenderer? Renderer { [DebuggerStepThrough] get; @@ -639,7 +647,7 @@ public virtual PaletteState GetCellTriple(DataGridViewElementStates state, int columnIndex, out IPaletteBack paletteBack, out IPaletteBorder paletteBorder, - out IPaletteContent? paletteContent) + out IPaletteContent paletteContent) { PaletteState retState; @@ -801,7 +809,7 @@ public virtual PaletteState GetCellTriple(DataGridViewElementStates state, /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Point CellOver + public Point CellOver { get => _cellOver; set => _cellOver = value; @@ -812,7 +820,7 @@ public Point CellOver /// Highlight search strings in the DataGridView /// /// The string to search. - public void HighlightSearch(string s) => HighlightSearch(s, new List()); + public void HighlightSearch(string s) => HighlightSearch(s, []); /// /// Highlight search strings in the DataGridView @@ -847,8 +855,7 @@ public void HighlightSearch(string s, List columnsIndex) /// /// Gets and sets the ViewManager instance. /// - protected ViewManager ViewManager - { + protected ViewManager? ViewManager { [DebuggerStepThrough] get; set; @@ -857,8 +864,7 @@ protected ViewManager ViewManager /// /// Gets access to the need paint delegate. /// - protected NeedPaintHandler NeedPaintDelegate - { + protected NeedPaintHandler NeedPaintDelegate { [DebuggerStepThrough] get; private set; @@ -869,7 +875,7 @@ protected NeedPaintHandler NeedPaintDelegate /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected void OnNeedResyncPaint(object sender, NeedLayoutEventArgs e) + protected void OnNeedResyncPaint(object? sender, NeedLayoutEventArgs e) { // Ensure the current cell style values are in sync with the new // palette setting and any state overrides that are defined @@ -931,8 +937,7 @@ protected void OnNeedPaint(object? sender, [DisallowNull] NeedLayoutEventArgs e) /// /// Gets a value indicating if transparent paint is needed /// - protected bool NeedTransparentPaint - { + protected bool NeedTransparentPaint { get { // Do we need to evaluate the need for a tranparent paint @@ -960,7 +965,7 @@ protected virtual void OnPaletteChanged(EventArgs e) Redirector.Target = _palette; // A new palette source means we need to layout and redraw - OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); + OnNeedPaint(Palette!, new NeedLayoutEventArgs(true)); PaletteChanged?.Invoke(this, e); } @@ -971,7 +976,7 @@ protected virtual void OnPaletteChanged(EventArgs e) /// True if paint required; otherwise false. protected virtual bool EvalTransparentPaint() => // Do we have a manager to use for asking about painting? - ViewManager != null && ViewManager.EvalTransparentPaint(Renderer); + ViewManager != null && ViewManager.EvalTransparentPaint(Renderer!); /// /// Work out if this control needs to use Invoke to force a repaint. @@ -989,7 +994,7 @@ protected virtual bool EvalTransparentPaint() => /// Source of notification. /// An EventArgs containing event data. /// - protected virtual void OnButtonSpecChanged(object sender, [DisallowNull] EventArgs e) + protected virtual void OnButtonSpecChanged(object? sender, [DisallowNull] EventArgs e) { Debug.Assert(e != null); @@ -1001,7 +1006,62 @@ protected virtual void OnButtonSpecChanged(object sender, [DisallowNull] EventAr } #endregion + #region Protected Override + /// + protected override void OnDataMemberChanged(EventArgs e) + { + base.OnDataMemberChanged(e); + + if (AutoGenerateColumns + && AutoGenerateKryptonColumns + && DataSource is not null) + { + ReplaceDefaultColumsWithKryptonColumns(); + } + } + + /// + protected override void OnDataSourceChanged(EventArgs e) + { + base.OnDataSourceChanged(e); + + if (AutoGenerateColumns + && AutoGenerateKryptonColumns + && DataSource is not null) + { + ReplaceDefaultColumsWithKryptonColumns(); + } + } + + /// + protected override void OnAutoGenerateColumnsChanged(EventArgs e) + { + // First handle the base the event + base.OnAutoGenerateColumnsChanged(e); + + // If needed convert the winforms columns to Krypton columns + if (AutoGenerateColumns + && AutoGenerateKryptonColumns + && DataSource is not null) + { + ReplaceDefaultColumsWithKryptonColumns(); + } + } + + /// + protected override void OnDataBindingComplete(DataGridViewBindingCompleteEventArgs e) + { + base.OnDataBindingComplete(e); + + if (AutoGenerateColumns + && AutoGenerateKryptonColumns + && DataSource is not null) + { + ReplaceDefaultColumsWithKryptonColumns(); + } + } + /// /// Raises the PaintBackground event. /// @@ -1028,7 +1088,7 @@ protected override void OnCellMouseEnter(DataGridViewCellEventArgs e) protected override void OnCellMouseMove(DataGridViewCellMouseEventArgs e) { // Cache mouse location before calling base class - DataGridViewCell cell = GetCellInternal(e.ColumnIndex, e.RowIndex); + DataGridViewCell? cell = GetCellInternal(e.ColumnIndex, e.RowIndex); var oldLocation = CurrentMouseLocation(cell); if ((cell is DataGridViewRowHeaderCell) && (_oldCell == cell)) @@ -1149,6 +1209,10 @@ protected override void OnEditingControlShowing(DataGridViewEditingControlShowin /// A DataGridViewCellPaintingEventArgs that contains the event data. protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) { + if (e is null) + { + throw new ArgumentNullException(nameof(e)); + } // Get the palette and state values for this cell PaletteState state = GetCellTriple(e.State, @@ -1156,12 +1220,12 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) e.ColumnIndex, out IPaletteBack paletteBack, out IPaletteBorder paletteBorder, - out IPaletteContent? paletteContent); + out IPaletteContent paletteContent); try { // If the font we get from the base palette is a system font that is invalid this will throw exception - var hContent = _contentInherit.GetContentShortTextFont(state).Height; + var hContent = _contentInherit.GetContentShortTextFont(state)!.Height; } catch { @@ -1173,18 +1237,18 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) // Use an offscreen bitmap to draw onto before blitting it to the screen var tempCellBounds = e.CellBounds with { X = 0, Y = 0 }; - using (var tempBitmap = new Bitmap(e.CellBounds.Width, e.CellBounds.Height, e.Graphics)) + using (var tempBitmap = new Bitmap(e.CellBounds.Width, e.CellBounds.Height, e.Graphics!)) { using (Graphics tempG = Graphics.FromImage(tempBitmap)) { - using (var renderContext = new RenderContext(this, tempG, tempCellBounds, Renderer)) + using (var renderContext = new RenderContext(this, tempG, tempCellBounds, Renderer!)) { // Force the border to have a specified maximum border edge _borderForced.SetInherit(paletteBorder); _borderForced.MaxBorderEdges = GetCellMaxBorderEdges(e.CellBounds, e.ColumnIndex, e.RowIndex); // Get the padding used to decide how to draw the background - Padding borderPadding = Renderer.RenderStandardBorder.GetBorderRawPadding(_borderForced, state, VisualOrientation.Top); + Padding borderPadding = Renderer!.RenderStandardBorder.GetBorderRawPadding(_borderForced, state, VisualOrientation.Top); // Get the border path used to limit drawing of the background GraphicsPath borderPath = Renderer.RenderStandardBorder.GetBackPath(renderContext, tempCellBounds, _borderForced, VisualOrientation.Top, state); @@ -1193,8 +1257,8 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) Rectangle tempCellBackBounds = CommonHelper.ApplyPadding(VisualOrientation.Top, tempCellBounds, borderPadding); // Update the back interceptor class - _backInherit.SetInherit(paletteBack, e.CellStyle); - + _backInherit.SetInherit(paletteBack, e.CellStyle!); + using var gh = new GraphicsHint(renderContext.Graphics, _borderForced.GetBorderGraphicsHint(PaletteState.Normal)); IDisposable? unused = Renderer.RenderStandardBack.DrawBack(renderContext, tempCellBackBounds, borderPath, _backInherit, VisualOrientation.Top, state, null); // We never save the memento for reuse later @@ -1203,6 +1267,7 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) Renderer.RenderStandardBorder.DrawBorder(renderContext, tempCellBounds, _borderForced, VisualOrientation.Top, state); // Must remember to release resources! + gh.Dispose(); borderPath.Dispose(); switch (e) @@ -1234,8 +1299,12 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) ? 5 : width), tempCellBounds.Y + 3, spec.Icon.Width, spec.Icon.Height); renderContext.Graphics.DrawImage(spec.Icon, iconBounds); - tempCellBounds = tempCellBounds with { X = tempCellBounds.X + - (spec.Alignment == IconSpec.IconAlignment.Left ? iconWidth : 0), Width = width }; + tempCellBounds = tempCellBounds with + { + X = tempCellBounds.X + + (spec.Alignment == IconSpec.IconAlignment.Left ? iconWidth : 0), + Width = width + }; } } @@ -1244,7 +1313,7 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) // If this is a row header cell case { RowIndex: >= 0, ColumnIndex: -1 }: { - // By default there is no glyph needed for the row + // By default, there is no glyph needed for the row var glyph = GridRowGlyph.None; // Find the correct glyph that should be drawn @@ -1297,9 +1366,9 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) Rectangle beforeCellBounds = tempCellBounds; tempCellBounds = Renderer.RenderGlyph.DrawGridErrorGlyph(renderContext, tempCellBounds, state, rtl); - // Calculate the icon rectangle - var iconBounds = new Rectangle(tempCellBounds.Right + 1, tempCellBounds.Top, - beforeCellBounds.Width - tempCellBounds.Width, tempCellBounds.Height); + // Calculate the icon rectangle + var iconBounds = new Rectangle(tempCellBounds.Right + 1, tempCellBounds.Top, + beforeCellBounds.Width - tempCellBounds.Width, tempCellBounds.Height); // Cache the icon area if (_rowCache.ContainsKey(e.RowIndex)) @@ -1343,8 +1412,12 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) ? 5 : width), tempCellBounds.Y + 3, spec.Icon.Width, spec.Icon.Height); renderContext.Graphics.DrawImage(spec.Icon, iconBounds); - tempCellBounds = tempCellBounds with { X = tempCellBounds.X + - (spec.Alignment == IconSpec.IconAlignment.Left ? iconWidth : 0), Width = width }; + tempCellBounds = tempCellBounds with + { + X = tempCellBounds.X + + (spec.Alignment == IconSpec.IconAlignment.Left ? iconWidth : 0), + Width = width + }; } } @@ -1366,11 +1439,14 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) if (e is { ColumnIndex: >= 0, RowIndex: >= 0 }) { // Blit the image onto the screen - e.Graphics.DrawImage(tempBitmap, e.CellBounds.Location); + e.Graphics?.DrawImage(tempBitmap, e.CellBounds.Location); //Seb Search highlight //Empty _restrictColumnsSearch means highlight everywhere - if (!string.IsNullOrEmpty(_searchString) && (_restrictColumnsSearch.Count == 0 || (_restrictColumnsSearch.Count != 0 && _restrictColumnsSearch.Contains(e.ColumnIndex))) && e.FormattedValue.GetType().Name != nameof(Bitmap)) + if (!string.IsNullOrEmpty(_searchString) + && (_restrictColumnsSearch.Count == 0 || (_restrictColumnsSearch.Count != 0 + && _restrictColumnsSearch.Contains(e.ColumnIndex))) + && e.FormattedValue!.GetType().Name != nameof(Bitmap)) { var val = (string)e.FormattedValue; var sindx = val.ToLower().IndexOf(_searchString.ToLower()); @@ -1385,8 +1461,8 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) var sBefore = val.Substring(0, sindx); var sWord = val.Substring(sindx, _searchString.Length); - Size s1 = TextRenderer.MeasureText(e.Graphics, sBefore, e.CellStyle.Font, e.CellBounds.Size); - Size s2 = TextRenderer.MeasureText(e.Graphics, sWord, e.CellStyle.Font, e.CellBounds.Size); + Size s1 = TextRenderer.MeasureText(e.Graphics!, sBefore, e.CellStyle!.Font, e.CellBounds.Size); + Size s2 = TextRenderer.MeasureText(e.Graphics!, sWord, e.CellStyle.Font, e.CellBounds.Size); if (s1.Width > 5) { @@ -1417,7 +1493,7 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) ? new SolidBrush(Color.DarkGoldenrod) : new SolidBrush(Color.Yellow); - e.Graphics.FillRectangle(hl_brush, hl_rect); + e.Graphics!.FillRectangle(hl_brush, hl_rect); hl_brush.Dispose(); sindx = val.ToLower().IndexOf(_searchString.ToLower(), sCount++); @@ -1429,7 +1505,7 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) else { // Update the content interceptor class - _contentInherit.SetInherit(paletteContent, e.CellStyle); + _contentInherit.SetInherit(paletteContent!, e.CellStyle!); // Is there any text to be Displayed? if (e.FormattedValue != null) @@ -1442,8 +1518,9 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) if ((e.RowIndex == -1) && (e.ColumnIndex != -1)) { // Find size needed to show header text fully - Size prefSize = Renderer.RenderStandardContent.GetContentPreferredSize(layoutContext, _contentInherit, _shortTextValue, - VisualOrientation.Top, state, false, false); + Size prefSize = Renderer.RenderStandardContent.GetContentPreferredSize( + layoutContext, _contentInherit, _shortTextValue, + VisualOrientation.Top, state); var contentsFit = (prefSize.Width <= tempCellBounds.Width) && (prefSize.Height <= tempCellBounds.Height); @@ -1460,30 +1537,31 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) } // Find the correct layout for the header content - using IDisposable memento = Renderer.RenderStandardContent.LayoutContent(layoutContext, tempCellBounds, + using IDisposable memento = Renderer.RenderStandardContent.LayoutContent( + layoutContext, tempCellBounds, _contentInherit, _shortTextValue, - VisualOrientation.Top, state, false, false); + VisualOrientation.Top, state); // Perform actual drawing of the content Renderer.RenderStandardContent.DrawContent(renderContext, tempCellBounds, _contentInherit, memento, VisualOrientation.Top, - state, false, false, true); + state, true); } // Blit the image onto the screen - e.Graphics.DrawImage(tempBitmap, e.CellBounds.Location); + e.Graphics?.DrawImage(tempBitmap, e.CellBounds.Location); } } else { // Blit the image onto the screen - e.Graphics.DrawImage(tempBitmap, e.CellBounds.Location); + e.Graphics?.DrawImage(tempBitmap, e.CellBounds.Location); } } } } - if ((e.PaintParts & DataGridViewPaintParts.Focus) == DataGridViewPaintParts.Focus) + if (e != null && (e.PaintParts & DataGridViewPaintParts.Focus) == DataGridViewPaintParts.Focus) { // Only consider drawing the focus rectangle if the control has focus wants to show the cues if (ShowFocusCues && Focused) @@ -1505,14 +1583,14 @@ protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) focusCellBounds.X++; } - ControlPaint.DrawFocusRectangle(e.Graphics, focusCellBounds, Color.Empty, paletteContent.GetContentShortTextColor1(state)); + ControlPaint.DrawFocusRectangle(e.Graphics!, focusCellBounds, GlobalStaticValues.EMPTY_COLOR, paletteContent!.GetContentShortTextColor1(state)); } } } } // Prevent base class from doing the standard drawing - e.Handled = true; + e!.Handled = true; base.OnCellPainting(e); } @@ -1547,7 +1625,7 @@ protected override void PaintBackground(Graphics graphics, PaintTransparentBackground(graphics, clipBounds); // Use the view manager to paint the view panel that fills the entire areas as the background - using var context = new RenderContext(this, graphics, clipBounds, Renderer); + using var context = new RenderContext(this, graphics, clipBounds, Renderer!); ViewManager.Paint(context); } @@ -1592,8 +1670,7 @@ protected override void OnLayout(LayoutEventArgs levent) #endregion #region Internal - internal PaletteRedirect Redirector - { + internal PaletteRedirect Redirector { [DebuggerStepThrough] get; private set; @@ -1612,7 +1689,7 @@ internal void SyncStyles() SyncCellStylesWithPalette(); } - internal bool RightToLeftInternal + internal bool RightToLeftInternal { get { @@ -1621,18 +1698,65 @@ internal bool RightToLeftInternal { // Cache access to the internal get property 'RightToLeftInternal' _piRTL = typeof(DataGridView).GetProperty(nameof(RightToLeftInternal), BindingFlags.Instance | - BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.NonPublic | + BindingFlags.GetField)!; } // Grab the internal calculated value of the right to left setting - return (bool)_piRTL.GetValue(this, null); + return (bool)_piRTL.GetValue(this, null)!; } } #endregion #region Implementation + + /// + /// Handles the auto generation of Krypton columns
+ ///
+ private void ReplaceDefaultColumsWithKryptonColumns() + { + DataGridViewColumn currentColumn; + KryptonDataGridViewTextBoxColumn newColumn; + List columnsProcessed = []; + int index; + + for (int i = 0 ; i < ColumnCount ; i++) + { + currentColumn = Columns[i]; + + /* + * Auto generated columns are always of type System.Windows.Forms.DataGridViewTextBoxColumn. + * Only columns that are of type DataGridViewTextBoxColumn and have the DataPropertyName set will be converted to krypton Columns. + */ + if (currentColumn is DataGridViewTextBoxColumn && currentColumn.DataPropertyName.Length > 0) + { + index = currentColumn.Index; + columnsProcessed.Add(index); + + newColumn = new KryptonDataGridViewTextBoxColumn + { + Name = currentColumn.Name, + DataPropertyName = currentColumn.DataPropertyName, + HeaderText = currentColumn.HeaderText, + Width = currentColumn.Width + }; + + Columns.RemoveAt(index); + Columns.Insert(index, newColumn); + } + } + + /* + * After the columns have been replaced they need a little help so they have the same width as when only Winforms columns would've been auto added. + * Setting this value in the above for loop does not work. + */ + for (int i = 0 ; i < columnsProcessed.Count ; i++) + { + Columns[columnsProcessed[i]].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; + } + } + private void SetupVisuals() { // Setup the invoke used to refresh display @@ -1914,12 +2038,12 @@ private void SyncBackColorCellStylesWithPalette() { PaletteState state = Enabled ? PaletteState.Normal : PaletteState.Disabled; - if ((ColumnHeadersDefaultCellStyle.BackColor == Color.Empty) || + if ((ColumnHeadersDefaultCellStyle.BackColor == GlobalStaticValues.EMPTY_COLOR) || (ColumnHeadersDefaultCellStyle.BackColor == _columnBackColor)) { _columnBackColor = StateNormal.HeaderColumn.Back.Color1; - if (_columnBackColor == Color.Empty) + if (_columnBackColor == GlobalStaticValues.EMPTY_COLOR) { _columnBackColor = StateNormal.HeaderColumn.Back.GetBackColor1(state); } @@ -1927,12 +2051,12 @@ private void SyncBackColorCellStylesWithPalette() ColumnHeadersDefaultCellStyle.BackColor = _columnBackColor; } - if ((RowHeadersDefaultCellStyle.BackColor == Color.Empty) || + if ((RowHeadersDefaultCellStyle.BackColor == GlobalStaticValues.EMPTY_COLOR) || (RowHeadersDefaultCellStyle.BackColor == _rowBackColor)) { _rowBackColor = StateNormal.HeaderRow.Back.Color1; - if (_rowBackColor == Color.Empty) + if (_rowBackColor == GlobalStaticValues.EMPTY_COLOR) { _rowBackColor = StateNormal.HeaderRow.Back.GetBackColor1(state); } @@ -1940,12 +2064,12 @@ private void SyncBackColorCellStylesWithPalette() RowHeadersDefaultCellStyle.BackColor = _rowBackColor; } - if ((DefaultCellStyle.BackColor == Color.Empty) || + if ((DefaultCellStyle.BackColor == GlobalStaticValues.EMPTY_COLOR) || (DefaultCellStyle.BackColor == _dataCellBackColor)) { _dataCellBackColor = StateNormal.DataCell.Back.Color1; - if (_dataCellBackColor == Color.Empty) + if (_dataCellBackColor == GlobalStaticValues.EMPTY_COLOR) { _dataCellBackColor = StateNormal.DataCell.Back.GetBackColor1(state); } @@ -1958,12 +2082,12 @@ private void SyncSelBackColorCellStylesWithPalette() { PaletteState state = Enabled ? PaletteState.CheckedNormal : PaletteState.Disabled; - if ((ColumnHeadersDefaultCellStyle.SelectionBackColor == Color.Empty) || + if ((ColumnHeadersDefaultCellStyle.SelectionBackColor == GlobalStaticValues.EMPTY_COLOR) || (ColumnHeadersDefaultCellStyle.SelectionBackColor == _columnSelBackColor)) { _columnSelBackColor = StateSelected.HeaderColumn.Back.Color1; - if (_columnSelBackColor == Color.Empty) + if (_columnSelBackColor == GlobalStaticValues.EMPTY_COLOR) { _columnSelBackColor = StateSelected.HeaderColumn.Back.GetBackColor1(state); } @@ -1971,12 +2095,12 @@ private void SyncSelBackColorCellStylesWithPalette() ColumnHeadersDefaultCellStyle.SelectionBackColor = _columnSelBackColor; } - if ((RowHeadersDefaultCellStyle.SelectionBackColor == Color.Empty) || + if ((RowHeadersDefaultCellStyle.SelectionBackColor == GlobalStaticValues.EMPTY_COLOR) || (RowHeadersDefaultCellStyle.SelectionBackColor == _rowSelBackColor)) { _rowSelBackColor = StateSelected.HeaderRow.Back.Color1; - if (_rowSelBackColor == Color.Empty) + if (_rowSelBackColor == GlobalStaticValues.EMPTY_COLOR) { _rowSelBackColor = StateSelected.HeaderRow.Back.GetBackColor1(state); } @@ -1984,12 +2108,12 @@ private void SyncSelBackColorCellStylesWithPalette() RowHeadersDefaultCellStyle.SelectionBackColor = _rowSelBackColor; } - if ((DefaultCellStyle.SelectionBackColor == Color.Empty) || + if ((DefaultCellStyle.SelectionBackColor == GlobalStaticValues.EMPTY_COLOR) || (DefaultCellStyle.SelectionBackColor == _dataCellSelBackColor)) { _dataCellSelBackColor = StateSelected.DataCell.Back.Color1; - if (_dataCellSelBackColor == Color.Empty) + if (_dataCellSelBackColor == GlobalStaticValues.EMPTY_COLOR) { _dataCellSelBackColor = StateSelected.DataCell.Back.GetBackColor1(state); } @@ -2002,12 +2126,12 @@ private void SyncForeColorCellStylesWithPalette() { PaletteState state = Enabled ? PaletteState.Normal : PaletteState.Disabled; - if ((ColumnHeadersDefaultCellStyle.ForeColor == Color.Empty) || + if ((ColumnHeadersDefaultCellStyle.ForeColor == GlobalStaticValues.EMPTY_COLOR) || (ColumnHeadersDefaultCellStyle.ForeColor == _columnForeColor)) { _columnForeColor = StateNormal.HeaderColumn.Content.Color1; - if (_columnForeColor == Color.Empty) + if (_columnForeColor == GlobalStaticValues.EMPTY_COLOR) { _columnForeColor = StateNormal.HeaderColumn.Content.GetContentShortTextColor1(state); } @@ -2015,12 +2139,12 @@ private void SyncForeColorCellStylesWithPalette() ColumnHeadersDefaultCellStyle.ForeColor = _columnForeColor; } - if ((RowHeadersDefaultCellStyle.ForeColor == Color.Empty) || + if ((RowHeadersDefaultCellStyle.ForeColor == GlobalStaticValues.EMPTY_COLOR) || (RowHeadersDefaultCellStyle.ForeColor == _rowForeColor)) { _rowForeColor = StateNormal.HeaderRow.Content.Color1; - if (_rowForeColor == Color.Empty) + if (_rowForeColor == GlobalStaticValues.EMPTY_COLOR) { _rowForeColor = StateNormal.HeaderRow.Content.GetContentShortTextColor1(state); } @@ -2028,12 +2152,12 @@ private void SyncForeColorCellStylesWithPalette() RowHeadersDefaultCellStyle.ForeColor = _rowForeColor; } - if ((DefaultCellStyle.ForeColor == Color.Empty) || + if ((DefaultCellStyle.ForeColor == GlobalStaticValues.EMPTY_COLOR) || (DefaultCellStyle.ForeColor == _dataCellForeColor)) { _dataCellForeColor = StateNormal.DataCell.Content.Color1; - if (_dataCellForeColor == Color.Empty) + if (_dataCellForeColor == GlobalStaticValues.EMPTY_COLOR) { _dataCellForeColor = StateNormal.DataCell.Content.GetContentShortTextColor1(state); } @@ -2046,12 +2170,12 @@ private void SyncSelForeColorCellStylesWithPalette() { PaletteState state = Enabled ? PaletteState.CheckedNormal : PaletteState.Disabled; - if ((ColumnHeadersDefaultCellStyle.SelectionForeColor == Color.Empty) || + if ((ColumnHeadersDefaultCellStyle.SelectionForeColor == GlobalStaticValues.EMPTY_COLOR) || (ColumnHeadersDefaultCellStyle.SelectionForeColor == _columnSelForeColor)) { _columnSelForeColor = StateSelected.HeaderColumn.Content.Color1; - if (_columnSelForeColor == Color.Empty) + if (_columnSelForeColor == GlobalStaticValues.EMPTY_COLOR) { _columnSelForeColor = StateSelected.HeaderColumn.Content.GetContentShortTextColor1(state); } @@ -2059,12 +2183,12 @@ private void SyncSelForeColorCellStylesWithPalette() ColumnHeadersDefaultCellStyle.SelectionForeColor = _columnSelForeColor; } - if ((RowHeadersDefaultCellStyle.SelectionForeColor == Color.Empty) || + if ((RowHeadersDefaultCellStyle.SelectionForeColor == GlobalStaticValues.EMPTY_COLOR) || (RowHeadersDefaultCellStyle.SelectionForeColor == _rowSelForeColor)) { _rowSelForeColor = StateSelected.HeaderRow.Content.Color1; - if (_rowSelForeColor == Color.Empty) + if (_rowSelForeColor == GlobalStaticValues.EMPTY_COLOR) { _rowSelForeColor = StateSelected.HeaderRow.Content.GetContentShortTextColor1(state); } @@ -2072,12 +2196,12 @@ private void SyncSelForeColorCellStylesWithPalette() RowHeadersDefaultCellStyle.SelectionForeColor = _rowSelForeColor; } - if ((DefaultCellStyle.SelectionForeColor == Color.Empty) || + if ((DefaultCellStyle.SelectionForeColor == GlobalStaticValues.EMPTY_COLOR) || (DefaultCellStyle.SelectionForeColor == _dataCellSelForeColor)) { _dataCellSelForeColor = StateSelected.DataCell.Content.Color1; - if (_dataCellSelForeColor == Color.Empty) + if (_dataCellSelForeColor == GlobalStaticValues.EMPTY_COLOR) { _dataCellSelForeColor = StateSelected.DataCell.Content.GetContentShortTextColor1(state); } @@ -2087,7 +2211,7 @@ private void SyncSelForeColorCellStylesWithPalette() } private byte UpdateLocationForRowErrors(DataGridViewCellMouseEventArgs e, - DataGridViewCell cell, + DataGridViewCell? cell, byte location) { // If over the main area of a row header cell... @@ -2149,6 +2273,7 @@ private DataGridViewContentAlignment RelativeToAlign(PaletteRelativeAlign textH, // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(textH.ToString()); return DataGridViewContentAlignment.MiddleLeft; } @@ -2222,7 +2347,7 @@ private void ViewManagerLayout() _layoutDirty = false; // Ask the view to perform a layout - ViewManager.Layout(Renderer); + ViewManager.Layout(Renderer!); } while (_layoutDirty && (max-- > 0)); @@ -2232,7 +2357,7 @@ private void ViewManagerLayout() } } - private void CellDataAreaMouseEnterInternal(DataGridViewCell cell) + private void CellDataAreaMouseEnterInternal(DataGridViewCell? cell) { Point currentCellAddress = CurrentCellAddress; @@ -2240,11 +2365,11 @@ private void CellDataAreaMouseEnterInternal(DataGridViewCell cell) { // Are we allowed to show a tooltip? if (ShowCellToolTips && - ((currentCellAddress.X == -1) || (currentCellAddress.X != cell.ColumnIndex) || + ((currentCellAddress.X == -1) || (currentCellAddress.X != cell!.ColumnIndex) || (currentCellAddress.Y != cell.RowIndex) || (EditingControl == null))) { // Grab the correct tooltip text for the cell - _toolTipText = GetToolTipText(cell, cell.RowIndex); + _toolTipText = GetToolTipText(cell, cell!.RowIndex); // No explicit text provided? if (string.IsNullOrEmpty(_toolTipText)) @@ -2256,12 +2381,12 @@ private void CellDataAreaMouseEnterInternal(DataGridViewCell cell) if ((cell.RowIndex != -1) && (cell.OwningColumn != null)) { if ((cell.OwningColumn.Width < GetCellPreferredWidth(cell)) || - (cell.OwningRow.Height < GetCellPreferredHeight(cell))) + (cell.OwningRow!.Height < GetCellPreferredHeight(cell))) { var editedValue = cell.GetEditedFormattedValue(cell.RowIndex, DataGridViewDataErrorContexts.Display) as string; if (!string.IsNullOrEmpty(editedValue)) { - _toolTipText = TruncateToolTipText(editedValue); + _toolTipText = TruncateToolTipText(editedValue ?? string.Empty); } } } @@ -2275,7 +2400,7 @@ private void CellDataAreaMouseEnterInternal(DataGridViewCell cell) var editedValue = cell.GetEditedFormattedValue(cell.RowIndex, DataGridViewDataErrorContexts.Display) as string; if (!string.IsNullOrEmpty(editedValue)) { - _toolTipText = TruncateToolTipText(editedValue); + _toolTipText = TruncateToolTipText(editedValue ?? string.Empty); } } catch @@ -2301,10 +2426,10 @@ private void CellDataAreaMouseEnterInternal(DataGridViewCell cell) } } - private void CellErrorAreaMouseEnterInternal(DataGridViewCell cell) + private void CellErrorAreaMouseEnterInternal(DataGridViewCell? cell) { // Grab the correct error text for the cell - _toolTipText = GetErrorText(cell, cell.RowIndex); + _toolTipText = GetErrorText(cell, cell!.RowIndex); // Restart the timer for showing the error tooltip if (_showTimer != null) @@ -2326,17 +2451,17 @@ private void CellAreaMouseLeaveInternal() } } - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - private void OnTimerTick(object sender, EventArgs e) + private void OnTimerTick(object? sender, EventArgs e) { // Only need a one tick timer if (_showTimer != null) @@ -2354,7 +2479,7 @@ private void OnTimerTick(object sender, EventArgs e) // Create the actual tooltip popup object _visualPopupToolTip = new VisualPopupToolTip(Redirector, new ToolTipContent(_toolTipText), - Renderer, + Renderer!, PaletteBackStyle.ControlToolTip, PaletteBorderStyle.ControlToolTip, PaletteContentStyle.LabelToolTip, @@ -2368,7 +2493,7 @@ private void OnTimerTick(object sender, EventArgs e) } } - private DataGridViewCell GetCellInternal(int column, int row) + private DataGridViewCell? GetCellInternal(int column, int row) { // Only need to cache reflection info the first time around if (_miGCI == null) @@ -2376,13 +2501,13 @@ private DataGridViewCell GetCellInternal(int column, int row) // Cache access to the internal method 'GetCellInternal' _miGCI = typeof(DataGridView).GetMethod(nameof(GetCellInternal), BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } - return (DataGridViewCell)_miGCI.Invoke(this, new object[] { column, row }); + return _miGCI.Invoke(this, [column, row]) as DataGridViewCell; } - private string GetToolTipText(DataGridViewCell cell, int row) + private string GetToolTipText(DataGridViewCell? cell, int row) { // Only need to cache reflection info the first time around if (_miGTTT == null) @@ -2390,12 +2515,12 @@ private string GetToolTipText(DataGridViewCell cell, int row) // Cache access to the internal get property 'GetToolTipText' _miGTTT = typeof(DataGridViewCell).GetMethod(nameof(GetToolTipText), BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } try { - return (string)_miGTTT.Invoke(cell, new object[] { row }); + return _miGTTT.Invoke(cell, [row]) as string ?? string.Empty; } catch { @@ -2403,7 +2528,7 @@ private string GetToolTipText(DataGridViewCell cell, int row) } } - private string GetErrorText(DataGridViewCell cell, int row) + private string GetErrorText(DataGridViewCell? cell, int row) { // Only need to cache reflection info the first time around if (_miGET == null) @@ -2411,12 +2536,12 @@ private string GetErrorText(DataGridViewCell cell, int row) // Cache access to the internal get property 'GetErrorText' _miGET = typeof(DataGridViewCell).GetMethod(nameof(GetErrorText), BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } try { - return (string)_miGET.Invoke(cell, new object[] { row }); + return _miGET.Invoke(cell, [row]) as string ?? string.Empty; } catch { @@ -2424,7 +2549,7 @@ private string GetErrorText(DataGridViewCell cell, int row) } } - private byte CurrentMouseLocation(DataGridViewCell cell) + private byte CurrentMouseLocation(DataGridViewCell? cell) { // Only need to cache reflection info the first time around if (_piCML == null) @@ -2432,39 +2557,49 @@ private byte CurrentMouseLocation(DataGridViewCell cell) // Cache access to the internal get property 'CurrentMouseLocation' _piCML = typeof(DataGridViewCell).GetProperty(nameof(CurrentMouseLocation), BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } // Grab the internal calculated value of the right to left setting - return (byte)_piCML.GetValue(cell, null); + return (byte)_piCML.GetValue(cell, null)!; } - private int GetCellPreferredWidth(DataGridViewCell cell) + private int GetCellPreferredWidth([DisallowNull] DataGridViewCell? cell) { + if (cell is null) + { + throw new ArgumentNullException(nameof(cell)); + } + // Only need to cache reflection info the first time around if (_miGPW == null) { // Cache access to the internal method 'GetPreferredWidth' of cells _miGPW = typeof(DataGridViewCell).GetMethod(@"GetPreferredWidth", BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } - return (int)_miGPW.Invoke(cell, new object[] { cell.RowIndex, cell.OwningRow.Height }); + return (int)_miGPW.Invoke(cell, [cell.RowIndex!, cell.OwningRow!.Height!])!; } - private int GetCellPreferredHeight(DataGridViewCell cell) + private int GetCellPreferredHeight(DataGridViewCell? cell) { + if (cell is null) + { + throw new ArgumentNullException(nameof(cell)); + } + // Only need to cache reflection info the first time around if (_miGPH == null) { // Cache access to the internal method 'GetPreferredHeight' of cells _miGPH = typeof(DataGridViewCell).GetMethod(@"GetPreferredHeight", BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } - return (int)_miGPH.Invoke(cell, new object[] { cell.RowIndex, cell.OwningColumn.Width }); + return (int)_miGPH.Invoke(cell, [cell.RowIndex, cell.OwningColumn!.Width])!; } private string DismissBaseToolTips() @@ -2475,10 +2610,10 @@ private string DismissBaseToolTips() // Cache access to the internal get property 'ActivateToolTip' _miATT = typeof(DataGridView).GetMethod(@"ActivateToolTip", BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } - return (string)_miATT.Invoke(this, new object[] { false, string.Empty, -1, -1 }); + return _miATT.Invoke(this, [false, string.Empty, -1, -1]) as string ?? string.Empty; } private string TruncateToolTipText(string toolTipText) @@ -2507,7 +2642,7 @@ private void SetPalette(PaletteBase? palette) _palette = palette; // Get the renderer associated with the palette - Renderer = _palette.GetRenderer(); + Renderer = _palette?.GetRenderer(); // Hook to new palette events if (_palette != null) @@ -2537,11 +2672,11 @@ private void PaintTransparentBackground(Graphics g, Rectangle clipRect) _miPTB = typeof(Control).GetMethod(nameof(PaintTransparentBackground), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, CallingConventions.HasThis, - new[] { typeof(PaintEventArgs), typeof(Rectangle), typeof(Region) }, - null); + [typeof(PaintEventArgs), typeof(Rectangle), typeof(Region)], + null)!; } - _miPTB.Invoke(this, new object[] { new PaintEventArgs(g, clipRect), ClientRectangle, null }); + _miPTB.Invoke(this, [new PaintEventArgs(g, clipRect), ClientRectangle, null!]); } } @@ -2570,7 +2705,7 @@ private void OnPerformRefresh() } } - private void OnGlobalPaletteChanged(object sender, EventArgs e) + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) @@ -2582,18 +2717,18 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e) SyncCellStylesWithPalette(); // A new palette source means we need to layout and redraw - OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); + OnNeedPaint(Palette!, new NeedLayoutEventArgs(true)); } } - private void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => OnNeedResyncPaint(Palette, new NeedLayoutEventArgs(true)); + private void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => OnNeedResyncPaint(Palette!, new NeedLayoutEventArgs(true)); - private void OnSyncPropertyChanged(object sender, EventArgs e) => + private void OnSyncPropertyChanged(object? sender, EventArgs e) => // Ensure the current cell style values are in sync with the new palette // setting and any state overrides that are defined. SyncCellStylesWithPalette(); - private void OnSyncBackPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnSyncBackPropertyChanged(object? sender, PropertyChangedEventArgs e) { // Only interested in the first color from the background palettes if (e.PropertyName == "Color1") @@ -2605,14 +2740,17 @@ private void OnSyncBackPropertyChanged(object sender, PropertyChangedEventArgs e } #endregion - #region menus - private void OnContextMenuStripOpening(object sender, CancelEventArgs e) + #region Menus + private void OnContextMenuStripOpening(object? sender, CancelEventArgs e) { // Get the actual strip instance - ContextMenuStrip cms = base.ContextMenuStrip; + ContextMenuStrip? cms = base.ContextMenuStrip; // Make sure it has the correct renderer - cms.Renderer = CreateToolStripRenderer(); + if (cms != null) + { + cms.Renderer = CreateToolStripRenderer(); + } } /// @@ -2620,15 +2758,15 @@ private void OnContextMenuStripOpening(object sender, CancelEventArgs e) /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] - public ToolStripRenderer CreateToolStripRenderer() => Renderer.RenderToolStrip(GetResolvedPalette()); + public ToolStripRenderer CreateToolStripRenderer() => Renderer?.RenderToolStrip(GetResolvedPalette()!)!; - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => + private void OnKryptonContextMenuDisposed(object? sender, EventArgs e) => // When the current krypton context menu is disposed, we should remove // it to prevent it being used again, as that would just throw an exception // because it has been disposed. KryptonContextMenu = null; - private void OnContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); + private void OnContextMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); /// /// Called when a context menu has just been closed. diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonCell.cs index 4919ae444..4e65c2850 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,9 +18,9 @@ namespace Krypton.Toolkit public class KryptonDataGridViewButtonCell : DataGridViewButtonCell { #region Static Fields - private static PropertyInfo _piButtonState; - private static PropertyInfo _piMouseEnteredCellAddress; - private static FieldInfo _fiMouseInContentBounds; + private static PropertyInfo? _piButtonState; + private static PropertyInfo? _piMouseEnteredCellAddress; + private static FieldInfo? _fiMouseInContentBounds; #endregion #region Instance Fields @@ -47,13 +47,12 @@ public class KryptonDataGridViewButtonCell : DataGridViewButtonCell /// New object instance. public override object Clone() { - var dataGridViewCell = base.Clone() as KryptonDataGridViewButtonCell; - if (dataGridViewCell != null) - { - dataGridViewCell._styleSet = _styleSet; - dataGridViewCell._shortTextValue = _shortTextValue; - dataGridViewCell._buttonStyle = _buttonStyle; - } + var dataGridViewCell = base.Clone() as KryptonDataGridViewButtonCell ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("dataGridViewCell")); + + dataGridViewCell._styleSet = _styleSet; + dataGridViewCell._shortTextValue = _shortTextValue; + dataGridViewCell._buttonStyle = _buttonStyle; + return dataGridViewCell; } @@ -70,7 +69,7 @@ public ButtonStyle ButtonStyle { _buttonStyle = value; _styleSet = true; - DataGridView.InvalidateCell(this); + DataGridView?.InvalidateCell(this); } } #endregion @@ -104,13 +103,13 @@ protected override Size GetPreferredSize(Graphics graphics, { try { - var kDGV = (KryptonDataGridView)DataGridView; + var kDGV = DataGridView as KryptonDataGridView; // Create the view elements and palette structure - CreateViewAndPalettes(kDGV); + CreateViewAndPalettes(kDGV!); // Is this cell the currently active cell - var currentCell = (rowIndex == DataGridView.CurrentCellAddress.Y) && + var currentCell = (rowIndex == DataGridView!.CurrentCellAddress.Y) && (ColumnIndex == DataGridView.CurrentCellAddress.X); // Is this cell the same as the one with the mouse inside it @@ -141,21 +140,21 @@ protected override Size GetPreferredSize(Graphics graphics, } // Update the display text - if ((kDGV.Columns[ColumnIndex] is KryptonDataGridViewButtonColumn { UseColumnTextForButtonValue: true } col) && !kDGV.Rows[rowIndex].IsNewRow) + if ((kDGV!.Columns[ColumnIndex] is KryptonDataGridViewButtonColumn { UseColumnTextForButtonValue: true } col) && !kDGV.Rows[rowIndex].IsNewRow) { - _shortTextValue.ShortText = col.Text; + _shortTextValue!.ShortText = col.Text; } else if (!string.IsNullOrEmpty(FormattedValue?.ToString())) { - _shortTextValue.ShortText = FormattedValue.ToString(); + _shortTextValue!.ShortText = FormattedValue!.ToString(); } else { - _shortTextValue.ShortText = string.Empty; + _shortTextValue!.ShortText = string.Empty; } // Position the button element inside the available cell area - using var layoutContext = new ViewLayoutContext(kDGV, kDGV.Renderer); + using var layoutContext = new ViewLayoutContext(kDGV, kDGV.Renderer!); // Define the available area for layout layoutContext.DisplayRectangle = new Rectangle(0, 0, int.MaxValue, int.MaxValue); @@ -190,23 +189,23 @@ protected override Size GetPreferredSize(Graphics graphics, /// A DataGridViewAdvancedBorderStyle that contains border styles for the cell that is being painted. /// A bitwise combination of the DataGridViewPaintParts values that specifies which parts of the cell need to be painted. protected override void Paint(Graphics graphics, - Rectangle clipBounds, - Rectangle cellBounds, - int rowIndex, - DataGridViewElementStates cellState, - object value, - object formattedValue, - string errorText, - DataGridViewCellStyle cellStyle, - DataGridViewAdvancedBorderStyle advancedBorderStyle, - DataGridViewPaintParts paintParts) + Rectangle clipBounds, + Rectangle cellBounds, + int rowIndex, + DataGridViewElementStates cellState, + object? value, + object? formattedValue, + string? errorText, + DataGridViewCellStyle cellStyle, + DataGridViewAdvancedBorderStyle advancedBorderStyle, + DataGridViewPaintParts paintParts) { if (DataGridView is KryptonDataGridView kDgv) { // Should we draw the content foreground? if ((paintParts & DataGridViewPaintParts.ContentForeground) == DataGridViewPaintParts.ContentForeground) { - using var renderContext = new RenderContext(kDgv, graphics, cellBounds, kDgv.Renderer); + using var renderContext = new RenderContext(kDgv, graphics, cellBounds, kDgv.Renderer!); // Create the view elements and palette structure CreateViewAndPalettes(kDgv); @@ -250,15 +249,15 @@ protected override void Paint(Graphics graphics, UseColumnTextForButtonValue: true } col) && !kDgv.Rows[rowIndex].IsNewRow) { - _shortTextValue.ShortText = col.Text; + _shortTextValue!.ShortText = col.Text; } else if (!string.IsNullOrEmpty(FormattedValue?.ToString())) { - _shortTextValue.ShortText = FormattedValue.ToString(); + _shortTextValue!.ShortText = FormattedValue!.ToString(); } else { - _shortTextValue.ShortText = string.Empty; + _shortTextValue!.ShortText = string.Empty; } // Prevent button overlapping the bottom/right border @@ -279,7 +278,7 @@ protected override void Paint(Graphics graphics, cellBounds.Height -= cellStyle.Padding.Vertical; // Position the button element inside the available cell area - using (var layoutContext = new ViewLayoutContext(kDgv, kDgv.Renderer)) + using (var layoutContext = new ViewLayoutContext(kDgv, kDgv.Renderer!)) { // Define the available area for layout layoutContext.DisplayRectangle = cellBounds; @@ -352,11 +351,10 @@ private ButtonState ButtonStateInternal _piButtonState = typeof(DataGridViewButtonCell).GetProperty(nameof(ButtonState), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); - } // Grab the internal property implemented by base class - return (ButtonState)_piButtonState.GetValue(this, null); + return _piButtonState != null ? (ButtonState)(_piButtonState.GetValue(this, null) ?? ButtonState.Normal) : ButtonState.Normal; } } @@ -371,10 +369,18 @@ private bool MouseInContentBoundsInternal _fiMouseInContentBounds = typeof(DataGridViewButtonCell).GetField(@"mouseInContentBounds", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetField); + if (_fiMouseInContentBounds == null) + { + // https://github.com/dotnet/winforms/commit/27e010d21c78457113f5be67eeea842499ab5f74#diff-bb5ad249080118c559367691ad27b9a93f8d5324b814f65113ff2e4bd15c9b39 + // This was changed in netCore8 P1 but when running netcore7 it still wants this new name ?? + _fiMouseInContentBounds = typeof(DataGridViewButtonCell).GetField(@"s_mouseInContentBounds", BindingFlags.Static | + BindingFlags.NonPublic | + BindingFlags.GetField); + } } // Grab the internal property implemented by base class - return (bool)_fiMouseInContentBounds.GetValue(this); + return _fiMouseInContentBounds != null && (bool)(_fiMouseInContentBounds.GetValue(this) ?? false); } } @@ -389,12 +395,11 @@ private Point MouseEnteredCellAddressInternal _piMouseEnteredCellAddress = typeof(DataGridView).GetProperty(@"MouseEnteredCellAddress", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField); - } // Grab the internal property implemented by base class // ReSharper disable RedundantBaseQualifier - return (Point)_piMouseEnteredCellAddress.GetValue(base.DataGridView, null); + return _piMouseEnteredCellAddress != null ? (Point)(_piMouseEnteredCellAddress.GetValue(base.DataGridView, null) ?? Point.Empty) : Point.Empty; // ReSharper restore RedundantBaseQualifier } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonColumn.cs index 2ca0262a1..5a959502d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewButtonColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ namespace Krypton.Toolkit public class KryptonDataGridViewButtonColumn : KryptonDataGridViewIconColumn { #region Static Fields - private MethodInfo _miColumnCommonChange; + private MethodInfo? _miColumnCommonChange; private PropertyInfo _piUseColumnTextForButtonValueInternal; #endregion @@ -65,8 +65,9 @@ public override string ToString() public override object Clone() { // Create a new instance - var clone = base.Clone() as KryptonDataGridViewButtonColumn; + var clone = base.Clone() as KryptonDataGridViewButtonColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("clone")); clone.Text = Text; + return clone; } #endregion @@ -77,9 +78,19 @@ public override object Clone() /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [DisallowNull] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { + /* + Text from the base property, shows that it can be null + // + // Summary: + // Gets or sets the template used to create new cells. + // + // Returns: + // A System.Windows.Forms.DataGridViewCell that all other cells in the column are + // modeled after. The default is null. + */ + get => base.CellTemplate; set @@ -98,12 +109,16 @@ public override DataGridViewCell CellTemplate ///
[Browsable(true)] [Category(@"Appearance")] + [AllowNull] public override DataGridViewCellStyle DefaultCellStyle { + // Data type made non-nullable again to keep it inline with the underlying virtual base method + // Added [AllowNull] attribute since the base can take null as a value + get => base.DefaultCellStyle; set => base.DefaultCellStyle = value; } - + /// /// Gets or sets the default text Displayed on the button cell. /// @@ -153,13 +168,13 @@ public string? Text public bool UseColumnTextForButtonValue { get => - ((KryptonDataGridViewButtonCell)CellTemplate)?.UseColumnTextForButtonValue ?? throw new InvalidOperationException(@"KryptonDataGridViewButtonColumn cell template required"); + (CellTemplate as KryptonDataGridViewButtonCell)?.UseColumnTextForButtonValue ?? throw new InvalidOperationException(@"KryptonDataGridViewButtonColumn cell template required"); set { if (UseColumnTextForButtonValue != value) { - SetUseColumnTextForButtonValueInternal(CellTemplate, value); + SetUseColumnTextForButtonValueInternal(CellTemplate!, value); if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -186,13 +201,14 @@ public bool UseColumnTextForButtonValue public ButtonStyle ButtonStyle { get => - ((KryptonDataGridViewButtonCell)CellTemplate)?.ButtonStyle ?? throw new InvalidOperationException(@"KryptonDataGridViewButtonColumn cell template required"); + (CellTemplate as KryptonDataGridViewButtonCell)?.ButtonStyle ?? throw new InvalidOperationException(@"KryptonDataGridViewButtonColumn cell template required"); set { if (ButtonStyle != value) { - ((KryptonDataGridViewButtonCell)CellTemplate).ButtonStyleInternal = value; + (CellTemplate as KryptonDataGridViewButtonCell)!.ButtonStyleInternal = value; + if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -219,14 +235,21 @@ private bool ShouldSerializeDefaultCellStyle() return false; } - DataGridViewCellStyle defaultCellStyle = DefaultCellStyle; - return !defaultCellStyle.BackColor.IsEmpty || !defaultCellStyle.ForeColor.IsEmpty || -!defaultCellStyle.SelectionBackColor.IsEmpty || !defaultCellStyle.SelectionForeColor.IsEmpty || - defaultCellStyle.Font != null || !defaultCellStyle.IsNullValueDefault || -!defaultCellStyle.IsDataSourceNullValueDefault || !string.IsNullOrEmpty(defaultCellStyle.Format) || -!defaultCellStyle.FormatProvider.Equals(CultureInfo.CurrentCulture) || defaultCellStyle.Alignment != DataGridViewContentAlignment.MiddleCenter || - defaultCellStyle.WrapMode != DataGridViewTriState.NotSet || defaultCellStyle.Tag != null -|| !defaultCellStyle.Padding.Equals(Padding.Empty); + DataGridViewCellStyle defaultCellStyle = DefaultCellStyle!; + + return !defaultCellStyle.BackColor.IsEmpty + || !defaultCellStyle.ForeColor.IsEmpty + || !defaultCellStyle.SelectionBackColor.IsEmpty + || !defaultCellStyle.SelectionForeColor.IsEmpty + || defaultCellStyle.Font != null + || !defaultCellStyle.IsNullValueDefault + || !defaultCellStyle.IsDataSourceNullValueDefault + || !string.IsNullOrEmpty(defaultCellStyle.Format) + || !defaultCellStyle.FormatProvider.Equals(CultureInfo.CurrentCulture) + || defaultCellStyle.Alignment != DataGridViewContentAlignment.MiddleCenter + || defaultCellStyle.WrapMode != DataGridViewTriState.NotSet + || defaultCellStyle.Tag != null + || !defaultCellStyle.Padding.Equals(Padding.Empty); } private void ColumnCommonChange(int columnIndex) @@ -241,7 +264,7 @@ private void ColumnCommonChange(int columnIndex) } - _miColumnCommonChange.Invoke(DataGridView, new object[] { columnIndex }); + _miColumnCommonChange?.Invoke(DataGridView, [columnIndex]); } private void SetUseColumnTextForButtonValueInternal(object instance, bool value) @@ -252,11 +275,11 @@ private void SetUseColumnTextForButtonValueInternal(object instance, bool value) // Cache access to the internal property sette 'UseColumnTextForButtonValueInternal' _piUseColumnTextForButtonValueInternal = typeof(DataGridViewButtonCell).GetProperty(@"UseColumnTextForButtonValueInternal", BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.SetProperty); + BindingFlags.SetProperty)!; } - _piUseColumnTextForButtonValueInternal.SetValue(instance, value, null); + _piUseColumnTextForButtonValueInternal?.SetValue(instance, value, null); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxCell.cs index ce83c2a40..1a0aecc7a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,9 +18,9 @@ namespace Krypton.Toolkit public class KryptonDataGridViewCheckBoxCell : DataGridViewCheckBoxCell { #region Static Fields - private static PropertyInfo _piButtonState; - private static PropertyInfo _piMouseEnteredCellAddress; - private static FieldInfo _fiMouseInContentBounds; + private static PropertyInfo? _piButtonState; + private static PropertyInfo? _piMouseEnteredCellAddress; + private static FieldInfo? _fiMouseInContentBounds; #endregion #region Instance Fields @@ -75,10 +75,10 @@ protected override Size GetPreferredSize(Graphics graphics, { try { - var kDGV = (KryptonDataGridView)DataGridView; + var kDGV = DataGridView as KryptonDataGridView; // Is this cell the currently active cell - var currentCell = (rowIndex == DataGridView.CurrentCellAddress.Y) && + var currentCell = (rowIndex == DataGridView!.CurrentCellAddress.Y) && (ColumnIndex == DataGridView.CurrentCellAddress.X); // Is this cell the same as the one with the mouse inside it @@ -91,8 +91,8 @@ protected override Size GetPreferredSize(Graphics graphics, var pressed = currentCell && ((ButtonStateInternal & ButtonState.Pushed) == ButtonState.Pushed); // Find out the requested size of the check box drawing - using var viewContent = new ViewLayoutContext(kDGV, kDGV.Renderer); - Size checkBoxSize = kDGV.Renderer.RenderGlyph.GetCheckBoxPreferredSize(viewContent, + using var viewContent = new ViewLayoutContext(kDGV!, kDGV!.Renderer!); + Size checkBoxSize = kDGV.Renderer!.RenderGlyph.GetCheckBoxPreferredSize(viewContent, kDGV.Redirector, kDGV.Enabled, CheckState.Unchecked, @@ -131,9 +131,9 @@ protected override void Paint(Graphics graphics, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, - object value, - object formattedValue, - string errorText, + object? value, + object? formattedValue, + string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) @@ -171,13 +171,13 @@ protected override void Paint(Graphics graphics, var tracking = mouseCell && MouseInContentBoundsInternal; var pressed = currentCell && ((ButtonStateInternal & ButtonState.Pushed) == ButtonState.Pushed); - using var renderContext = new RenderContext(kDgv, graphics, cellBounds, kDgv.Renderer); + using var renderContext = new RenderContext(kDgv, graphics, cellBounds, kDgv.Renderer!); Size checkBoxSize; // Find out the requested size of the check box drawing - using (var viewContent = new ViewLayoutContext(kDgv, kDgv.Renderer)) + using (var viewContent = new ViewLayoutContext(kDgv, kDgv.Renderer!)) { - checkBoxSize = renderContext.Renderer.RenderGlyph.GetCheckBoxPreferredSize(viewContent, + checkBoxSize = renderContext.Renderer!.RenderGlyph.GetCheckBoxPreferredSize(viewContent, kDgv.Redirector, kDgv.Enabled && !base.ReadOnly, checkState, @@ -265,7 +265,7 @@ private ButtonState ButtonStateInternal } // Grab the internal property implemented by base class - return (ButtonState)_piButtonState.GetValue(this, null); + return _piButtonState != null ? (ButtonState)_piButtonState!.GetValue(this, null)! : ButtonState.Normal; } } @@ -280,10 +280,18 @@ private bool MouseInContentBoundsInternal _fiMouseInContentBounds = typeof(DataGridViewCheckBoxCell).GetField(@"mouseInContentBounds", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.GetField); + if (_fiMouseInContentBounds == null) + { + // https://github.com/dotnet/winforms/commit/7ab46c6e6ae1c39143a7638d694fb6e130ab4edc#diff-2684515ec95bea4ec16a0bf7c9e6ff09dc33d31aafabd2c35f016994c800fc84 + // This was changed in netCore8 P1 but when running netcore7 it still wants this new name ?? + _fiMouseInContentBounds = typeof(DataGridViewCheckBoxCell).GetField(@"s_mouseInContentBounds", BindingFlags.Static | + BindingFlags.NonPublic | + BindingFlags.GetField); + } } // Grab the internal property implemented by base class - return (bool)_fiMouseInContentBounds.GetValue(this); + return (bool)_fiMouseInContentBounds!.GetValue(this)!; } } @@ -303,7 +311,7 @@ private Point MouseEnteredCellAddressInternal // Grab the internal property implemented by base class // ReSharper disable RedundantBaseQualifier - return (Point)_piMouseEnteredCellAddress.GetValue(base.DataGridView, null); + return (Point)_piMouseEnteredCellAddress!.GetValue(base.DataGridView, null)!; // ReSharper restore RedundantBaseQualifier } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxColumn.cs index bc769631e..d3f3fe6e1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCheckBoxColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -77,7 +77,7 @@ public override string ToString() ///
[Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { get => base.CellTemplate; @@ -98,7 +98,7 @@ public override DataGridViewCell CellTemplate [Category(@"Data")] [DefaultValue(@"")] [TypeConverter(typeof(StringConverter))] - public object FalseValue + public object? FalseValue { get => CheckBoxCellTemplate == null @@ -108,7 +108,8 @@ public object FalseValue { if (FalseValue != value) { - CheckBoxCellTemplate.FalseValue = value; + CheckBoxCellTemplate!.FalseValue = value; + if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -133,7 +134,7 @@ public object FalseValue [Category(@"Data")] [DefaultValue(@"")] [TypeConverter(typeof(StringConverter))] - public object IndeterminateValue + public object? IndeterminateValue { get => CheckBoxCellTemplate == null @@ -143,7 +144,7 @@ public object IndeterminateValue { if (IndeterminateValue != value) { - CheckBoxCellTemplate.IndeterminateValue = value; + CheckBoxCellTemplate!.IndeterminateValue = value; if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -168,7 +169,7 @@ public object IndeterminateValue [Category(@"Data")] [DefaultValue(@"")] [TypeConverter(typeof(StringConverter))] - public object TrueValue + public object? TrueValue { get => CheckBoxCellTemplate == null @@ -178,7 +179,7 @@ public object TrueValue { if (TrueValue != value) { - CheckBoxCellTemplate.TrueValue = value; + CheckBoxCellTemplate!.TrueValue = value; if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -210,7 +211,7 @@ public bool ThreeState { if (ThreeState != value) { - CheckBoxCellTemplate.ThreeState = value; + CheckBoxCellTemplate!.ThreeState = value; if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -243,7 +244,7 @@ public bool ThreeState #endregion #region Private - private KryptonDataGridViewCheckBoxCell? CheckBoxCellTemplate => (KryptonDataGridViewCheckBoxCell)CellTemplate; + private KryptonDataGridViewCheckBoxCell? CheckBoxCellTemplate => CellTemplate as KryptonDataGridViewCheckBoxCell; private bool ShouldSerializeCellTemplate() { @@ -268,7 +269,17 @@ private bool ShouldSerializeCellTemplate() // ReSharper restore RedundantBaseQualifier DataGridViewCellStyle defaultCellStyle = DefaultCellStyle; - if (defaultCellStyle.BackColor.IsEmpty && defaultCellStyle.ForeColor.IsEmpty && defaultCellStyle.SelectionBackColor.IsEmpty && defaultCellStyle.SelectionForeColor.IsEmpty && (defaultCellStyle.Font == null) && defaultCellStyle.NullValue.Equals(indeterminate) && defaultCellStyle.IsDataSourceNullValueDefault && string.IsNullOrEmpty(defaultCellStyle.Format) && defaultCellStyle.FormatProvider.Equals(CultureInfo.CurrentCulture) && (defaultCellStyle.Alignment == DataGridViewContentAlignment.MiddleCenter) && defaultCellStyle is { WrapMode: DataGridViewTriState.NotSet, Tag: null }) + if (defaultCellStyle.BackColor.IsEmpty + && defaultCellStyle.ForeColor.IsEmpty + && defaultCellStyle.SelectionBackColor.IsEmpty + && defaultCellStyle.SelectionForeColor.IsEmpty + && (defaultCellStyle.Font is null) + && defaultCellStyle.NullValue!.Equals(indeterminate) + && defaultCellStyle.IsDataSourceNullValueDefault + && string.IsNullOrEmpty(defaultCellStyle.Format) + && defaultCellStyle.FormatProvider.Equals(CultureInfo.CurrentCulture) + && (defaultCellStyle.Alignment == DataGridViewContentAlignment.MiddleCenter) + && defaultCellStyle is { WrapMode: DataGridViewTriState.NotSet, Tag: null }) { return !defaultCellStyle.Padding.Equals(Padding.Empty); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxCell.cs index 1b6d2dec8..7c7c336f3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,7 +21,7 @@ public class KryptonDataGridViewComboBoxCell : DataGridViewTextBoxCell { #region Static Fields [ThreadStatic] - private static KryptonComboBox _paintingComboBox; + private static KryptonComboBox? _paintingComboBox; private static readonly Type _defaultEditType = typeof(KryptonDataGridViewComboBoxEditingControl); private static readonly Type _defaultValueType = typeof(string); private static readonly Size _sizeLarge = new Size(10000, 10000); @@ -86,27 +86,26 @@ public override string ToString() => /// Gets the items in the combobox. /// The items. - public ComboBox.ObjectCollection Items => _paintingComboBox.ComboBox.Items; + public ComboBox.ObjectCollection Items => _paintingComboBox!.ComboBox.Items; /// /// Clones a DataGridViewComboBoxCell cell, copies all the custom properties. /// public override object Clone() { - var dataGridViewCell = base.Clone() as KryptonDataGridViewComboBoxCell; - if (dataGridViewCell != null) - { - dataGridViewCell.DropDownStyle = DropDownStyle; - dataGridViewCell.DropDownHeight = DropDownHeight; - dataGridViewCell.DropDownWidth = DropDownWidth; - dataGridViewCell.MaxDropDownItems = MaxDropDownItems; - dataGridViewCell.AutoCompleteMode = AutoCompleteMode; - dataGridViewCell.AutoCompleteSource = AutoCompleteSource; - dataGridViewCell.DisplayMember = DisplayMember; - dataGridViewCell.ValueMember = ValueMember; - dataGridViewCell.DataSource = DataSource; - } - return dataGridViewCell; + var dataGridViewCell = base.Clone() as KryptonDataGridViewComboBoxCell ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("dataGridViewCell")); + + dataGridViewCell.DropDownStyle = DropDownStyle; + dataGridViewCell.DropDownHeight = DropDownHeight; + dataGridViewCell.DropDownWidth = DropDownWidth; + dataGridViewCell.MaxDropDownItems = MaxDropDownItems; + dataGridViewCell.AutoCompleteMode = AutoCompleteMode; + dataGridViewCell.AutoCompleteSource = AutoCompleteSource; + dataGridViewCell.DisplayMember = DisplayMember; + dataGridViewCell.ValueMember = ValueMember; + dataGridViewCell.DataSource = DataSource; + + return dataGridViewCell!; } /// /// The DropDownStyle property replicates the one from the KryptonComboBox control @@ -188,7 +187,7 @@ public int DropDownWidth /// /// The AutoCompleteMode property replicates the one from the KryptonComboBox control /// - [DefaultValue(121)] + [DefaultValue(AutoCompleteMode.None)] public AutoCompleteMode AutoCompleteMode { get => _autoCompleteMode; @@ -206,7 +205,7 @@ public AutoCompleteMode AutoCompleteMode /// /// The AutoCompleteSource property replicates the one from the KryptonComboBox control /// - [DefaultValue(121)] + [DefaultValue(AutoCompleteSource.None)] public AutoCompleteSource AutoCompleteSource { get => _autoCompleteSource; @@ -284,10 +283,11 @@ public object? DataSource [EditorBrowsable(EditorBrowsableState.Advanced)] public override void DetachEditingControl() { - DataGridView dataGridView = DataGridView; - if (dataGridView?.EditingControl == null) + DataGridView? dataGridView = DataGridView; + switch (dataGridView?.EditingControl) { - throw new InvalidOperationException(@"Cell is detached or its grid has no editing control."); + case null: + throw new InvalidOperationException(@"Cell is detached or its grid has no editing control."); } if (dataGridView.EditingControl is KryptonComboBox comboBox) @@ -304,12 +304,12 @@ public override void DetachEditingControl() /// set according to the cell properties. /// public override void InitializeEditingControl(int rowIndex, - object initialFormattedValue, - DataGridViewCellStyle dataGridViewCellStyle) + object? initialFormattedValue, + DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); - if (DataGridView.EditingControl is KryptonComboBox comboBox) + if (DataGridView!.EditingControl is KryptonComboBox comboBox) { if (OwningColumn is KryptonDataGridViewComboBoxColumn { DataSource: null } comboColumn) { @@ -319,7 +319,7 @@ public override void InitializeEditingControl(int rowIndex, { strings[i] = comboColumn.Items[i]; } - + comboBox.Items.Clear(); comboBox.Items.AddRange(strings); var autoAppend = new string[comboColumn.AutoCompleteCustomSource.Count]; @@ -342,14 +342,7 @@ public override void InitializeEditingControl(int rowIndex, comboBox.ValueMember = ValueMember; comboBox.DataSource = DataSource; - if (initialFormattedValue is not string initialFormattedValueStr) - { - comboBox.Text = string.Empty; - } - else - { - comboBox.Text = initialFormattedValueStr; - } + comboBox.Text = initialFormattedValue as string ?? string.Empty; } } @@ -372,7 +365,7 @@ public override void PositionEditingControl(bool setLocation, isFirstDisplayedColumn, isFirstDisplayedRow); editingControlBounds = GetAdjustedEditingControlBounds(editingControlBounds, cellStyle); - DataGridView.EditingControl.Location = new Point(editingControlBounds.X, editingControlBounds.Y); + DataGridView!.EditingControl!.Location = new Point(editingControlBounds.X, editingControlBounds.Y); DataGridView.EditingControl.Size = new Size(editingControlBounds.Width, editingControlBounds.Height); } @@ -385,17 +378,8 @@ public override void PositionEditingControl(bool setLocation, ///
protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex) { - const int BUTTONS_WIDTH = 16; - Rectangle errorIconBounds = base.GetErrorIconBounds(graphics, cellStyle, rowIndex); - if (DataGridView.RightToLeft == RightToLeft.Yes) - { - errorIconBounds.X = errorIconBounds.Left + BUTTONS_WIDTH; - } - else - { - errorIconBounds.X = errorIconBounds.Left - BUTTONS_WIDTH; - } + errorIconBounds.X = errorIconBounds.Left; return errorIconBounds; } @@ -405,32 +389,21 @@ protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewC ///
protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) { - if (DataGridView == null) - { - return new Size(-1, -1); - } - - Size preferredSize = base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); - if (constraintSize.Width == 0) - { - const int BUTTONS_WIDTH = 16; // Account for the width of the up/down buttons. - const int BUTTON_MARGIN = 8; // Account for some blank pixels between the text and buttons. - preferredSize.Width += BUTTONS_WIDTH + BUTTON_MARGIN; - } - - return preferredSize; + return DataGridView == null + ? new Size(-1, -1) + : base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); } #endregion #region Private - private KryptonDataGridViewComboBoxEditingControl EditingComboBox => DataGridView.EditingControl as KryptonDataGridViewComboBoxEditingControl; + private KryptonDataGridViewComboBoxEditingControl? EditingComboBox => DataGridView!.EditingControl as KryptonDataGridViewComboBoxEditingControl; private static Rectangle GetAdjustedEditingControlBounds(Rectangle editingControlBounds, DataGridViewCellStyle cellStyle) { // Adjust the vertical location of the editing control: - var preferredHeight = _paintingComboBox.GetPreferredSize(_sizeLarge).Height + 2; + var preferredHeight = _paintingComboBox!.GetPreferredSize(_sizeLarge).Height + 2; if (preferredHeight < editingControlBounds.Height) { switch (cellStyle.Alignment) @@ -467,8 +440,8 @@ private void OnCommonChange() } private bool OwnsEditingComboBox(int rowIndex) => - rowIndex != -1 - && DataGridView is { EditingControl: KryptonDataGridViewComboBoxEditingControl control } + rowIndex != -1 + && DataGridView is { EditingControl: KryptonDataGridViewComboBoxEditingControl control } && (rowIndex == ((IDataGridViewEditingControl)control).EditingControlRowIndex); private static bool PartPainted(DataGridViewPaintParts paintParts, DataGridViewPaintParts paintPart) => (paintParts & paintPart) != 0; @@ -481,7 +454,7 @@ internal void SetDropDownStyle(int rowIndex, ComboBoxStyle value) _dropDownStyle = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.DropDownStyle = value; + EditingComboBox!.DropDownStyle = value; } } @@ -490,7 +463,7 @@ internal void SetMaxDropDownItems(int rowIndex, int value) _maxDropDownItems = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.MaxDropDownItems = value; + EditingComboBox!.MaxDropDownItems = value; } } @@ -499,7 +472,7 @@ internal void SetDropDownHeight(int rowIndex, int value) _dropDownHeight = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.DropDownHeight = value; + EditingComboBox!.DropDownHeight = value; } } @@ -508,7 +481,7 @@ internal void SetDropDownWidth(int rowIndex, int value) _dropDownWidth = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.DropDownWidth = value; + EditingComboBox!.DropDownWidth = value; } } @@ -517,7 +490,7 @@ internal void SetAutoCompleteMode(int rowIndex, AutoCompleteMode value) _autoCompleteMode = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.AutoCompleteMode = value; + EditingComboBox!.AutoCompleteMode = value; } } @@ -526,7 +499,7 @@ internal void SetAutoCompleteSource(int rowIndex, AutoCompleteSource value) _autoCompleteSource = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.AutoCompleteSource = value; + EditingComboBox!.AutoCompleteSource = value; } } @@ -535,7 +508,7 @@ internal void SetDisplayMember(int rowIndex, string value) _displayMember = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.DisplayMember = value; + EditingComboBox!.DisplayMember = value; } } @@ -544,16 +517,16 @@ internal void SetValueMember(int rowIndex, string value) _valueMember = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.ValueMember = value; + EditingComboBox!.ValueMember = value; } } - internal void SetDataSource(int rowIndex, object value) + internal void SetDataSource(int rowIndex, object? value) { _dataSource = value; if (OwnsEditingComboBox(rowIndex)) { - EditingComboBox.DataSource = value; + EditingComboBox!.DataSource = value; } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxColumn.cs index 69e8d4cc3..df7ae92a0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,8 +28,8 @@ public class KryptonDataGridViewComboBoxColumn : KryptonDataGridViewIconColumn public KryptonDataGridViewComboBoxColumn() : base(new KryptonDataGridViewComboBoxCell()) { - Items = new List(); - AutoCompleteCustomSource = new AutoCompleteStringCollection(); + Items = []; + AutoCompleteCustomSource = []; } /// @@ -54,7 +54,7 @@ public override string ToString() /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewComboBoxColumn; + var cloned = base.Clone() as KryptonDataGridViewComboBoxColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("clone")); cloned.Items.AddRange(Items); @@ -77,7 +77,7 @@ public override object Clone() /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { get => base.CellTemplate; @@ -468,7 +468,7 @@ public string ValueMember [Description(@"Indicates the Datasource for the items in this control.")] [TypeConverter(@"System.Windows.Forms.Design.DataSourceConverter")] [Editor(@"System.Windows.Forms.Design.DataSourceListEditor", typeof(UITypeEditor))] - public object DataSource + public object? DataSource { get => @@ -493,7 +493,7 @@ public object DataSource /// /// Small utility function that returns the template cell as a KryptonDataGridViewComboBoxCell /// - private KryptonDataGridViewComboBoxCell? ComboBoxCellTemplate => (KryptonDataGridViewComboBoxCell)CellTemplate; + private KryptonDataGridViewComboBoxCell? ComboBoxCellTemplate => CellTemplate as KryptonDataGridViewComboBoxCell; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxEditingControl.cs index 33a9c6d09..562b2c6c8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxEditingControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewComboBoxEditingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,14 +20,14 @@ public class KryptonDataGridViewComboBoxEditingControl : KryptonComboBox, IDataGridViewEditingControl { #region Instance Fields - private DataGridView _dataGridView; + private DataGridView? _dataGridView; private bool _valueChanged; #endregion #region Identity /// - /// Initalize a new instance of the KryptonDataGridViewComboBoxEditingControl class. + /// Initialize a new instance of the KryptonDataGridViewComboBoxEditingControl class. /// public KryptonDataGridViewComboBoxEditingControl() { @@ -42,7 +42,7 @@ public KryptonDataGridViewComboBoxEditingControl() /// /// Property which caches the grid that uses this editing control /// - public virtual DataGridView EditingControlDataGridView + public virtual DataGridView? EditingControlDataGridView { get => _dataGridView; set => _dataGridView = value; @@ -50,11 +50,26 @@ public virtual DataGridView EditingControlDataGridView /// /// Property which represents the current formatted value of the editing control + /// Allows null as input, but null will saved as an empty string. /// - public virtual object? EditingControlFormattedValue + [AllowNull] + public virtual object EditingControlFormattedValue { + // [AllowNull] removes warning CS8767, but allows for null input, which is undesired. + // The Text property is a non-nullable string and therefore null input + // will be converted to String.Empty. + get => GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); - set => Text = (string)value; + + set + { + // #1800 correct to the standard of the Winforms counterpart + // Text is only set if the cast is correct. null value will also be rejected. + if (value is string str) + { + Text = str; + } + } } /// @@ -82,7 +97,7 @@ public virtual bool EditingControlValueChanged public virtual bool RepositionEditingControlOnValueChange => false; /// - /// Method called by the grid before the editing control is shown so it can adapt to the provided cell style. + /// Method called by the grid before the editing control is shown, so it can adapt to the provided cell style. /// public virtual void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle) { @@ -103,7 +118,7 @@ public virtual void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGri /// /// Returns the current value of the editing control. /// - public virtual object? GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) => Text; + public virtual object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) => Text!; /// /// Called by the grid to give the editing control a chance to prepare itself for the editing session. @@ -153,7 +168,7 @@ private void NotifyDataGridViewOfValueChange() if (!_valueChanged) { _valueChanged = true; - _dataGridView.NotifyCurrentCellDirty(true); + _dataGridView?.NotifyCurrentCellDirty(true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCustomEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCustomEditingControl.cs index bcc37f69f..85b3a49aa 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCustomEditingControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewCustomEditingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,7 @@ public class KryptonDataGridViewCustomEditingControl : KryptonTextBox, IDataGridViewEditingControl { #region Instance Fields - private DataGridView _dataGridView; + private DataGridView? _dataGridView; private bool _valueChanged; private int _rowIndex; #endregion @@ -42,7 +42,7 @@ public KryptonDataGridViewCustomEditingControl() /// /// Property which caches the grid that uses this editing control /// - public virtual DataGridView EditingControlDataGridView + public virtual DataGridView? EditingControlDataGridView { get => _dataGridView; set => _dataGridView = value; @@ -50,11 +50,19 @@ public virtual DataGridView EditingControlDataGridView /// /// Property which represents the current formatted value of the editing control + /// Allows null as input, but null will saved as an empty string. /// - public virtual object EditingControlFormattedValue + [AllowNull] + public virtual object EditingControlFormattedValue { + // [AllowNull] removes warning CS8767, but allows for null input, which is undesired. + // The Text property is a non-nullable string and therefore null input + // will be converted to String.Empty. + get => GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); - set => Text = (string)value; + set => Text = value is string str && str is not null + ? str + : string.Empty; } /// @@ -222,7 +230,7 @@ private void NotifyDataGridViewOfValueChange() if (!_valueChanged) { _valueChanged = true; - _dataGridView.NotifyCurrentCellDirty(true); + _dataGridView?.NotifyCurrentCellDirty(true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerCell.cs index 39e1a0d24..7c76e08ad 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -73,7 +73,7 @@ public KryptonDataGridViewDateTimePickerCell() _maxDate = DateTime.MaxValue; _minDate = DateTime.MinValue; _format = DateTimePickerFormat.Long; - _calendarDimensions = new Size(1,1); + _calendarDimensions = new Size(1, 1); _calendarTodayText = "Today:"; _calendarFirstDayOfWeek = Day.Default; _calendarShowToday = true; @@ -106,27 +106,26 @@ public KryptonDataGridViewDateTimePickerCell() /// public override object Clone() { - var dateTimeCell = base.Clone() as KryptonDataGridViewDateTimePickerCell; - if (dateTimeCell != null) - { - dateTimeCell.AutoShift = AutoShift; - dateTimeCell.Checked = Checked; - dateTimeCell.ShowCheckBox = ShowCheckBox; - dateTimeCell.ShowUpDown = ShowUpDown; - dateTimeCell.CustomFormat = CustomFormat; - dateTimeCell.CustomNullText = CustomNullText; - dateTimeCell.MaxDate = MaxDate; - dateTimeCell.MinDate = MinDate; - dateTimeCell.Format = Format; - dateTimeCell.CalendarDimensions = CalendarDimensions; - dateTimeCell.CalendarTodayText = CalendarTodayText; - dateTimeCell.CalendarFirstDayOfWeek = CalendarFirstDayOfWeek; - dateTimeCell.CalendarShowToday = CalendarShowToday; - dateTimeCell.CalendarCloseOnTodayClick = CalendarCloseOnTodayClick; - dateTimeCell.CalendarShowTodayCircle = CalendarShowTodayCircle; - dateTimeCell.CalendarShowWeekNumbers = CalendarShowWeekNumbers; - dateTimeCell.CalendarTodayDate = CalendarTodayDate; - } + var dateTimeCell = base.Clone() as KryptonDataGridViewDateTimePickerCell ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("dateTimeCell")); + + dateTimeCell.AutoShift = AutoShift; + dateTimeCell.Checked = Checked; + dateTimeCell.ShowCheckBox = ShowCheckBox; + dateTimeCell.ShowUpDown = ShowUpDown; + dateTimeCell.CustomFormat = CustomFormat; + dateTimeCell.CustomNullText = CustomNullText; + dateTimeCell.MaxDate = MaxDate; + dateTimeCell.MinDate = MinDate; + dateTimeCell.Format = Format; + dateTimeCell.CalendarDimensions = CalendarDimensions; + dateTimeCell.CalendarTodayText = CalendarTodayText; + dateTimeCell.CalendarFirstDayOfWeek = CalendarFirstDayOfWeek; + dateTimeCell.CalendarShowToday = CalendarShowToday; + dateTimeCell.CalendarCloseOnTodayClick = CalendarCloseOnTodayClick; + dateTimeCell.CalendarShowTodayCircle = CalendarShowTodayCircle; + dateTimeCell.CalendarShowWeekNumbers = CalendarShowWeekNumbers; + dateTimeCell.CalendarTodayDate = CalendarTodayDate; + return dateTimeCell; } @@ -396,7 +395,7 @@ public bool CalendarCloseOnTodayClick } } - + /// /// The CalendarShowTodayCircle property replicates the one from the KryptonDateTimePicker control /// @@ -462,7 +461,7 @@ public DateTime CalendarTodayDate [EditorBrowsable(EditorBrowsableState.Advanced)] public override void DetachEditingControl() { - DataGridView dataGridView = DataGridView; + DataGridView? dataGridView = DataGridView; if (dataGridView?.EditingControl == null) { throw new InvalidOperationException("Cell is detached or its grid has no editing control."); @@ -477,12 +476,12 @@ public override void DetachEditingControl() /// set according to the cell properties. /// public override void InitializeEditingControl(int rowIndex, - object initialFormattedValue, - DataGridViewCellStyle dataGridViewCellStyle) + object? initialFormattedValue, + DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); - if (DataGridView.EditingControl is KryptonDateTimePicker dateTime) + if (DataGridView!.EditingControl is KryptonDateTimePicker dateTime) { if (OwningColumn is KryptonDataGridViewDateTimePickerColumn dateTimeColumn) { @@ -514,7 +513,8 @@ public override void InitializeEditingControl(int rowIndex, } else { - var dt = (DateTime)_dtc.ConvertFromInvariantString(initialFormattedValueStr); + var dt = (DateTime)_dtc.ConvertFromInvariantString(initialFormattedValueStr)!; + if (dt != null) { dateTime.Value = dt; @@ -537,11 +537,12 @@ public override void InitializeEditingControl(int rowIndex, /// A TypeConverter associated with the formatted value type that provides custom conversion from the value type, or null if no such custom conversion is needed. /// A bitwise combination of DataGridViewDataErrorContexts values describing the context in which the formatted value is needed. /// - protected override object GetFormattedValue(object value, int rowIndex, - ref DataGridViewCellStyle cellStyle, - TypeConverter valueTypeConverter, - TypeConverter formattedValueTypeConverter, - DataGridViewDataErrorContexts context) + protected override object? GetFormattedValue(object? value, + int rowIndex, + ref DataGridViewCellStyle cellStyle, + TypeConverter? valueTypeConverter, + TypeConverter? formattedValueTypeConverter, + DataGridViewDataErrorContexts context) { if ((value == null) || (value == DBNull.Value)) { @@ -567,10 +568,10 @@ protected override object GetFormattedValue(object value, int rowIndex, /// A TypeConverter for the display value type, or null to use the default converter. /// A TypeConverter for the cell value type, or null to use the default converter. /// - public override object ParseFormattedValue(object formattedValue, - DataGridViewCellStyle cellStyle, - TypeConverter formattedValueTypeConverter, - TypeConverter valueTypeConverter) + public override object ParseFormattedValue(object? formattedValue, + DataGridViewCellStyle cellStyle, + TypeConverter? formattedValueTypeConverter, + TypeConverter? valueTypeConverter) { if (formattedValue == null) { @@ -578,8 +579,8 @@ public override object ParseFormattedValue(object formattedValue, } else { - var stringValue = (string)formattedValue; - return string.IsNullOrEmpty(stringValue) ? DBNull.Value : _dtc.ConvertFromInvariantString(stringValue); + string stringValue = (string)formattedValue; + return string.IsNullOrEmpty(stringValue) ? DBNull.Value : _dtc.ConvertFromInvariantString(stringValue)!; } } @@ -602,7 +603,7 @@ public override void PositionEditingControl(bool setLocation, isFirstDisplayedColumn, isFirstDisplayedRow); editingControlBounds = GetAdjustedEditingControlBounds(editingControlBounds, cellStyle); - DataGridView.EditingControl.Location = new Point(editingControlBounds.X, editingControlBounds.Y); + DataGridView!.EditingControl!.Location = new Point(editingControlBounds.X, editingControlBounds.Y); DataGridView.EditingControl.Size = new Size(editingControlBounds.Width, editingControlBounds.Height); } #endregion @@ -617,7 +618,7 @@ protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewC const int ButtonsWidth = 16; Rectangle errorIconBounds = base.GetErrorIconBounds(graphics, cellStyle, rowIndex); - if (DataGridView.RightToLeft == RightToLeft.Yes) + if (DataGridView!.RightToLeft == RightToLeft.Yes) { errorIconBounds.X = errorIconBounds.Left + ButtonsWidth; } @@ -658,17 +659,17 @@ protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyl /// the KryptonDateTimePicker control piece by piece (text and up/down buttons). /// protected override void Paint(Graphics graphics, - Rectangle clipBounds, - Rectangle cellBounds, - int rowIndex, - DataGridViewElementStates cellState, - object value, - object formattedValue, - string errorText, - DataGridViewCellStyle cellStyle, - DataGridViewAdvancedBorderStyle advancedBorderStyle, - DataGridViewPaintParts paintParts) - { + Rectangle clipBounds, + Rectangle cellBounds, + int rowIndex, + DataGridViewElementStates cellState, + object? value, + object? formattedValue, + string? errorText, + DataGridViewCellStyle cellStyle, + DataGridViewAdvancedBorderStyle advancedBorderStyle, + DataGridViewPaintParts paintParts) + { if (DataGridView == null) { return; @@ -702,8 +703,8 @@ protected override void Paint(Graphics graphics, #region Private - private KryptonDataGridViewDateTimePickerEditingControl EditingDateTimePicker => - DataGridView.EditingControl as KryptonDataGridViewDateTimePickerEditingControl; + private KryptonDataGridViewDateTimePickerEditingControl EditingDateTimePicker => + DataGridView!.EditingControl as KryptonDataGridViewDateTimePickerEditingControl ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(DataGridView.EditingControl))); private Rectangle GetAdjustedEditingControlBounds(Rectangle editingControlBounds, DataGridViewCellStyle cellStyle) @@ -746,7 +747,7 @@ private void OnCommonChange() } private bool OwnsEditingDateTimePicker(int rowIndex) => - rowIndex != -1 && DataGridView is { EditingControl: KryptonDataGridViewDateTimePickerEditingControl control } + rowIndex != -1 && DataGridView is { EditingControl: KryptonDataGridViewDateTimePickerEditingControl control } && (rowIndex == ((IDataGridViewEditingControl)control).EditingControlRowIndex); private static bool PartPainted(DataGridViewPaintParts paintParts, DataGridViewPaintParts paintPart) => (paintParts & paintPart) != 0; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerColumn.cs index 20036323d..6c9d8f76d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,9 +33,9 @@ public class KryptonDataGridViewDateTimePickerColumn : KryptonDataGridViewIconCo public KryptonDataGridViewDateTimePickerColumn() : base(new KryptonDataGridViewDateTimePickerCell()) { - _annualDates = new DateTimeList(); - _monthlyDates = new DateTimeList(); - _dates = new DateTimeList(); + _annualDates = []; + _monthlyDates = []; + _dates = []; } /// @@ -60,7 +60,8 @@ public override string ToString() /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewDateTimePickerColumn; + var cloned = base.Clone() as KryptonDataGridViewDateTimePickerColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("cloned")); + cloned.CalendarAnnuallyBoldedDates = CalendarAnnuallyBoldedDates; cloned.CalendarMonthlyBoldedDates = CalendarMonthlyBoldedDates; @@ -76,7 +77,7 @@ public override object Clone() /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { get => base.CellTemplate; @@ -808,7 +809,8 @@ public DateTime CalendarTodayDate [Category(@"MonthCalendar")] [Description(@"Indicates which annual dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarAnnuallyBoldedDates + [AllowNull] + public DateTime[]? CalendarAnnuallyBoldedDates { get => _annualDates.ToArray(); @@ -835,7 +837,8 @@ public DateTime[] CalendarAnnuallyBoldedDates [Category(@"MonthCalendar")] [Description(@"Indicates which monthly dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarMonthlyBoldedDates + [AllowNull] + public DateTime[]? CalendarMonthlyBoldedDates { get => _monthlyDates.ToArray(); @@ -862,7 +865,8 @@ public DateTime[] CalendarMonthlyBoldedDates [Category(@"MonthCalendar")] [Description(@"Indicates which dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarBoldedDates + [AllowNull] + public DateTime[]? CalendarBoldedDates { get => _dates.ToArray(); @@ -889,7 +893,7 @@ public DateTime[] CalendarBoldedDates /// /// Small utility function that returns the template cell as a KryptonDataGridViewDateTimePickerCell /// - private KryptonDataGridViewDateTimePickerCell? DateTimePickerCellTemplate => (KryptonDataGridViewDateTimePickerCell)CellTemplate; + private KryptonDataGridViewDateTimePickerCell? DateTimePickerCellTemplate => CellTemplate as KryptonDataGridViewDateTimePickerCell; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerEditingControl.cs index 633e1f5e0..5500d42a3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerEditingControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDateTimePickerEditingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -46,20 +46,24 @@ public KryptonDataGridViewDateTimePickerEditingControl() /// /// Property which caches the grid that uses this editing control /// - public virtual DataGridView EditingControlDataGridView + public virtual DataGridView? EditingControlDataGridView { get => _dataGridView; - set => _dataGridView = value; + set => _dataGridView = value!; } /// /// Property which represents the current formatted value of the editing control /// + [AllowNull] public virtual object EditingControlFormattedValue { + // [AllowNull] removes warning CS8767 and allows to write null + // although the interface defines the property as non-nullable + get => GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); - set + set { if ((value == null) || (value == DBNull.Value)) { @@ -68,13 +72,14 @@ public virtual object EditingControlFormattedValue else { var formattedValue = value as string; + if (string.IsNullOrEmpty(formattedValue)) { ValueNullable = (formattedValue == string.Empty) ? null : value; } else { - Value = (DateTime)_dtc.ConvertFromInvariantString(formattedValue); + Value = (DateTime)_dtc.ConvertFromInvariantString(formattedValue!)!; } } } @@ -133,7 +138,8 @@ public virtual void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGri /// /// Returns the current value of the editing control. /// - public virtual object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) => (ValueNullable == null) || (ValueNullable == DBNull.Value) ? string.Empty : _dtc.ConvertToInvariantString(Value); + public virtual object GetEditingControlFormattedValue(DataGridViewDataErrorContexts context) => + (ValueNullable is null) || (ValueNullable == DBNull.Value) ? string.Empty : _dtc.ConvertToInvariantString(Value)!; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownCell.cs index b4258a9bb..27ae18002 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -70,7 +70,7 @@ public override string ToString() => [EditorBrowsable(EditorBrowsableState.Advanced)] public override void DetachEditingControl() { - DataGridView dataGridView = DataGridView; + DataGridView? dataGridView = DataGridView; if (dataGridView?.EditingControl == null) { throw new InvalidOperationException(@"Cell is detached or its grid has no editing control."); @@ -98,12 +98,12 @@ public override void DetachEditingControl() /// set according to the cell properties. /// public override void InitializeEditingControl(int rowIndex, - object initialFormattedValue, - DataGridViewCellStyle dataGridViewCellStyle) + object? initialFormattedValue, + DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); - if (DataGridView.EditingControl is KryptonDomainUpDown domainUpDown) + if (DataGridView!.EditingControl is KryptonDomainUpDown domainUpDown) { domainUpDown.Items.Clear(); domainUpDown.ButtonSpecs.Clear(); @@ -113,7 +113,7 @@ public override void InitializeEditingControl(int rowIndex, domainUpDown.Items.InsertRange(0, domainColumn.Items); } - domainUpDown.Text = initialFormattedValue is string initialFormattedValueStr ? initialFormattedValueStr : string.Empty; + domainUpDown.Text = initialFormattedValue as string ?? string.Empty; } } @@ -136,7 +136,7 @@ public override void PositionEditingControl(bool setLocation, isFirstDisplayedColumn, isFirstDisplayedRow); editingControlBounds = GetAdjustedEditingControlBounds(editingControlBounds, cellStyle); - DataGridView.EditingControl.Location = new Point(editingControlBounds.X, editingControlBounds.Y); + DataGridView!.EditingControl!.Location = new Point(editingControlBounds.X, editingControlBounds.Y); DataGridView.EditingControl.Size = new Size(editingControlBounds.Width, editingControlBounds.Height); } #endregion @@ -148,17 +148,8 @@ public override void PositionEditingControl(bool setLocation, /// protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex) { - const int BUTTONS_WIDTH = 16; - Rectangle errorIconBounds = base.GetErrorIconBounds(graphics, cellStyle, rowIndex); - if (DataGridView.RightToLeft == RightToLeft.Yes) - { - errorIconBounds.X = errorIconBounds.Left + BUTTONS_WIDTH; - } - else - { - errorIconBounds.X = errorIconBounds.Left - BUTTONS_WIDTH; - } + errorIconBounds.X = errorIconBounds.Left; return errorIconBounds; } @@ -168,26 +159,16 @@ protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewC /// protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) { - if (DataGridView == null) - { - return new Size(-1, -1); - } - - Size preferredSize = base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); - if (constraintSize.Width == 0) - { - const int BUTTONS_WIDTH = 16; // Account for the width of the up/down buttons. - const int BUTTON_MARGIN = 8; // Account for some blank pixels between the text and buttons. - preferredSize.Width += BUTTONS_WIDTH + BUTTON_MARGIN; - } - - return preferredSize; + return DataGridView == null + ? new Size(-1, -1) + : base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); } #endregion #region Private - private KryptonDataGridViewDomainUpDownEditingControl EditingDomainUpDown => DataGridView.EditingControl as KryptonDataGridViewDomainUpDownEditingControl; + private KryptonDataGridViewDomainUpDownEditingControl EditingDomainUpDown => DataGridView!.EditingControl as KryptonDataGridViewDomainUpDownEditingControl + ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(DataGridView.EditingControl))); private Rectangle GetAdjustedEditingControlBounds(Rectangle editingControlBounds, DataGridViewCellStyle cellStyle) @@ -230,7 +211,7 @@ private void OnCommonChange() } private bool OwnsEditingDomainUpDown(int rowIndex) => - rowIndex != -1 && DataGridView is { EditingControl: KryptonDataGridViewDomainUpDownEditingControl control } + rowIndex != -1 && DataGridView is { EditingControl: KryptonDataGridViewDomainUpDownEditingControl control } && (rowIndex == ((IDataGridViewEditingControl)control).EditingControlRowIndex); private static bool PartPainted(DataGridViewPaintParts paintParts, DataGridViewPaintParts paintPart) => (paintParts & paintPart) != 0; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownColumn.cs index bcadf70d5..f5b74b1ee 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,7 +25,7 @@ public class KryptonDataGridViewDomainUpDownColumn : KryptonDataGridViewIconColu /// public KryptonDataGridViewDomainUpDownColumn() : base(new KryptonDataGridViewDomainUpDownCell()) => - Items = new StringCollection(); + Items = []; /// /// Returns a standard compact string representation of the column. @@ -49,13 +49,13 @@ public override string ToString() /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewDomainUpDownColumn; + var cloned = base.Clone() as KryptonDataGridViewDomainUpDownColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("cloned")); // Convert collection of strings to an array var strings = new string[Items.Count]; for (var i = 0; i < strings.Length; i++) { - strings[i] = Items[i]; + strings[i] = Items[i]!; } cloned.Items.AddRange(strings); @@ -70,7 +70,7 @@ public override object Clone() /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { get => base.CellTemplate; set @@ -99,7 +99,7 @@ public override DataGridViewCell CellTemplate /// /// Small utility function that returns the template cell as a KryptonDataGridViewDomainUpDownCell /// - private KryptonDataGridViewDomainUpDownCell DomainUpDownCellTemplate => (KryptonDataGridViewDomainUpDownCell)CellTemplate; + private KryptonDataGridViewDomainUpDownCell DomainUpDownCellTemplate => CellTemplate as KryptonDataGridViewDomainUpDownCell ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(CellTemplate))); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownEditingControl.cs index 67e77f9dc..ec210d543 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownEditingControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewDomainUpDownEditingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,19 +42,27 @@ public KryptonDataGridViewDomainUpDownEditingControl() /// /// Property which caches the grid that uses this editing control /// - public virtual DataGridView EditingControlDataGridView + public virtual DataGridView? EditingControlDataGridView { get => _dataGridView; - set => _dataGridView = value; + set => _dataGridView = value!; } /// /// Property which represents the current formatted value of the editing control + /// Allows null as input, but null will saved as an empty string. /// - public virtual object EditingControlFormattedValue + [AllowNull] + public virtual object EditingControlFormattedValue { + // [AllowNull] removes warning CS8767, but allows for null input, which is undesired. + // The Text property is a non-nullable string and therefore null input + // will be converted to String.Empty. + get => GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); - set => Text = (string)value; + set => Text = value is string str && str is not null + ? str + : string.Empty; } /// diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewIconColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewIconColumn.cs index 7879e5cc8..893eac938 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewIconColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewIconColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -96,7 +96,7 @@ public abstract class KryptonDataGridViewIconColumn : DataGridViewColumn, IIconC /// protected KryptonDataGridViewIconColumn(DataGridViewCell cellTemplate) : base(cellTemplate) => - IconSpecs = new List(); + IconSpecs = []; #endregion @@ -106,11 +106,11 @@ protected KryptonDataGridViewIconColumn(DataGridViewCell cellTemplate) /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewIconColumn; + var cloned = base.Clone() as KryptonDataGridViewIconColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("cloned")); foreach (IconSpec sp in IconSpecs) { - cloned.IconSpecs.Add(sp.Clone() as IconSpec); + cloned.IconSpecs.Add((sp.Clone() as IconSpec)!); } return cloned; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkCell.cs index 8542ae912..185eb45a1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkCell.cs @@ -5,11 +5,12 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion +// ReSharper disable InconsistentNaming namespace Krypton.Toolkit { /// @@ -80,7 +81,7 @@ public LabelStyle LabelStyle { _labelStyle = value; _labelStyleDefined = true; - DataGridView.InvalidateCell(this); + DataGridView!.InvalidateCell(this); } } } @@ -115,7 +116,7 @@ protected override Size GetPreferredSize(Graphics graphics, { try { - var kDGV = (KryptonDataGridView)DataGridView; + var kDGV = DataGridView as KryptonDataGridView; // Ensure the view classes are created and hooked up CreateViewAndPalettes(kDGV); @@ -126,16 +127,16 @@ protected override Size GetPreferredSize(Graphics graphics, // Update the display text if ((rowIndex >= 0) && !string.IsNullOrEmpty(FormattedValue?.ToString())) { - _shortTextValue.ShortText = FormattedValue.ToString(); + _shortTextValue.ShortText = FormattedValue!.ToString(); } else { - if ((kDGV.Columns[ColumnIndex] is KryptonDataGridViewButtonColumn + if ((kDGV?.Columns[ColumnIndex] is KryptonDataGridViewButtonColumn { UseColumnTextForButtonValue: true } col) && !kDGV.Rows[rowIndex].IsNewRow) { - _shortTextValue.ShortText = col.Text; + _shortTextValue.ShortText = col.Text!; } else { @@ -144,7 +145,7 @@ protected override Size GetPreferredSize(Graphics graphics, } // Position the button element inside the available cell area - using var layoutContext = new ViewLayoutContext(kDGV, kDGV.Renderer); + using var layoutContext = new ViewLayoutContext(kDGV!, kDGV?.Renderer!); // Define the available area for layout layoutContext.DisplayRectangle = new Rectangle(0, 0, int.MaxValue, int.MaxValue); @@ -179,23 +180,23 @@ protected override Size GetPreferredSize(Graphics graphics, /// A DataGridViewAdvancedBorderStyle that contains border styles for the cell that is being painted. /// A bitwise combination of the DataGridViewPaintParts values that specifies which parts of the cell need to be painted. protected override void Paint(Graphics graphics, - Rectangle clipBounds, - Rectangle cellBounds, - int rowIndex, - DataGridViewElementStates cellState, - object value, - object? formattedValue, - string errorText, - DataGridViewCellStyle cellStyle, - DataGridViewAdvancedBorderStyle advancedBorderStyle, - DataGridViewPaintParts paintParts) + Rectangle clipBounds, + Rectangle cellBounds, + int rowIndex, + DataGridViewElementStates cellState, + object? value, + object? formattedValue, + string? errorText, + DataGridViewCellStyle cellStyle, + DataGridViewAdvancedBorderStyle advancedBorderStyle, + DataGridViewPaintParts paintParts) { if (DataGridView is KryptonDataGridView kDgv) { // Should we draw the content foreground? if ((paintParts & DataGridViewPaintParts.ContentForeground) == DataGridViewPaintParts.ContentForeground) { - using var renderContext = new RenderContext(kDgv, graphics, cellBounds, kDgv.Renderer); + using var renderContext = new RenderContext(kDgv, graphics, cellBounds, kDgv.Renderer!); // Cache the starting cell bounds Rectangle startBounds = cellBounds; @@ -206,9 +207,9 @@ protected override void Paint(Graphics graphics, SetElementStateAndPalette(); // Update the display text - if (!string.IsNullOrEmpty(formattedValue?.ToString())) + if (!string.IsNullOrEmpty(formattedValue?.ToString())!) { - _shortTextValue.ShortText = formattedValue.ToString(); + _shortTextValue.ShortText = formattedValue!.ToString(); } else { @@ -217,7 +218,7 @@ protected override void Paint(Graphics graphics, UseColumnTextForButtonValue: true } col) && !kDgv.Rows[rowIndex].IsNewRow) { - _shortTextValue.ShortText = col.Text; + _shortTextValue.ShortText = col.Text!; } else { @@ -243,7 +244,7 @@ protected override void Paint(Graphics graphics, cellBounds.Height -= cellStyle.Padding.Vertical; // Position the button element inside the available cell area - using (var layoutContext = new ViewLayoutContext(kDgv, kDgv.Renderer)) + using (var layoutContext = new ViewLayoutContext(kDgv, kDgv.Renderer!)) { // Define the available area for calculating layout layoutContext.DisplayRectangle = cellBounds; @@ -333,13 +334,13 @@ internal LabelStyle LabelStyleInternal #endregion #region Private - private void CreateViewAndPalettes(KryptonDataGridView kDGV) + private void CreateViewAndPalettes(KryptonDataGridView? kDGV) { // Create the view element when first needed - if (_viewLabel == null) + if (_viewLabel is null) { // Create helper object to get all values from the DGV redirector - _palette = new PaletteContentToPalette(kDGV.Redirector, PaletteContentStyle.LabelNormalPanel); + _palette = new PaletteContentToPalette(kDGV!.Redirector, PaletteContentStyle.LabelNormalPanel); _inheritBehavior = new LinkLabelBehaviorInherit(_palette, KryptonLinkBehavior.AlwaysUnderline); _overrideVisited = new PaletteContentInheritOverride(_palette, _inheritBehavior, PaletteState.LinkNotVisitedOverride, true); _overridePressed = new PaletteContentInheritOverride(_palette, _overrideVisited, PaletteState.LinkPressedOverride, false); @@ -354,7 +355,7 @@ private void CreateViewAndPalettes(KryptonDataGridView kDGV) private void SetElementStateAndPalette() { - LinkState linkState = LinkStateInternal; + LinkState? linkState = LinkStateInternal; // Has the item been visited _overrideVisited.OverrideState = LinkVisited ? PaletteState.LinkVisitedOverride : PaletteState.LinkNotVisitedOverride; @@ -378,22 +379,21 @@ private void SetElementStateAndPalette() _palette.ContentStyle = CommonHelper.ContentStyleFromLabelStyle(_labelStyle); } - private LinkState LinkStateInternal + private LinkState? LinkStateInternal { get { // Only need to cache reflection info the first time around - if (_piLinkState == null) + if (_piLinkState is null) { // Cache access to the internal get property 'LinkState' _piLinkState = typeof(DataGridViewLinkCell).GetProperty(nameof(LinkState), BindingFlags.Instance | - BindingFlags.NonPublic | - BindingFlags.GetField); - + BindingFlags.NonPublic | + BindingFlags.GetField)!; } // Grab the internal property implemented by base class - return (LinkState)_piLinkState.GetValue(this, null); + return (LinkState?)_piLinkState!.GetValue(this, null); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkColumn.cs index a7192fa21..d7ab9e107 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewLinkColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -62,9 +62,10 @@ public override string ToString() public override object Clone() { // Create a new instance - var clone = base.Clone() as KryptonDataGridViewLinkColumn; + var clone = base.Clone() as KryptonDataGridViewLinkColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("clone")); clone.Text = Text; clone.LabelStyle = LabelStyle; + return clone; } #endregion @@ -75,18 +76,18 @@ public override object Clone() /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { get => base.CellTemplate; set { - if ((value != null) && value is not KryptonDataGridViewLinkCell) + if ((value is not null) && value is not KryptonDataGridViewLinkCell) { throw new InvalidCastException("Can only assign a object of type KryptonDataGridViewLinkCell"); } - base.CellTemplate = value; + base.CellTemplate = value as KryptonDataGridViewLinkCell; } } @@ -144,7 +145,7 @@ public LabelStyle LabelStyle if (_labelStyle != value) { _labelStyle = value; - ((KryptonDataGridViewLinkCell)CellTemplate).LabelStyleInternal = value; + ((KryptonDataGridViewLinkCell)CellTemplate!).LabelStyleInternal = value; // ReSharper disable RedundantBaseQualifier if (base.DataGridView != null) // ReSharper restore RedundantBaseQualifier @@ -172,12 +173,12 @@ public LabelStyle LabelStyle public LinkBehavior LinkBehavior { get => - ((KryptonDataGridViewLinkCell)CellTemplate)?.LinkBehavior ?? throw new InvalidOperationException("KryptonDataGridViewLinkCell cell template required"); + ((KryptonDataGridViewLinkCell)CellTemplate!)?.LinkBehavior ?? throw new InvalidOperationException("KryptonDataGridViewLinkCell cell template required"); set { if (!LinkBehavior.Equals(value)) { - ((KryptonDataGridViewLinkCell)CellTemplate).LinkBehaviorInternal = value; + ((KryptonDataGridViewLinkCell)CellTemplate!).LinkBehaviorInternal = value; // ReSharper disable RedundantBaseQualifier if (base.DataGridView != null) // ReSharper restore RedundantBaseQualifier @@ -205,12 +206,12 @@ public LinkBehavior LinkBehavior public bool TrackVisitedState { get => - ((KryptonDataGridViewLinkCell)CellTemplate)?.TrackVisitedState ?? throw new InvalidOperationException("KryptonDataGridViewLinkCell cell template required"); + ((KryptonDataGridViewLinkCell)CellTemplate!)?.TrackVisitedState ?? throw new InvalidOperationException("KryptonDataGridViewLinkCell cell template required"); set { if (TrackVisitedState != value) { - TrackVisitedStateInternal(CellTemplate, value); + TrackVisitedStateInternal(CellTemplate!, value); if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -236,13 +237,13 @@ public bool TrackVisitedState public bool UseColumnTextForLinkValue { get => - ((KryptonDataGridViewLinkCell)CellTemplate)?.UseColumnTextForLinkValue ?? throw new InvalidOperationException("KryptonDataGridViewLinkCell cell template required"); + ((KryptonDataGridViewLinkCell)CellTemplate!)?.UseColumnTextForLinkValue ?? throw new InvalidOperationException("KryptonDataGridViewLinkCell cell template required"); set { if (UseColumnTextForLinkValue != value) { - SetUseColumnTextForLinkValueInternal(CellTemplate, value); + SetUseColumnTextForLinkValueInternal(CellTemplate!, value); if (DataGridView != null) { DataGridViewRowCollection rows = DataGridView.Rows; @@ -265,27 +266,27 @@ public bool UseColumnTextForLinkValue private void ColumnCommonChange(int columnIndex) { // Only need to cache reflection info the first time around - if (_miColumnCommonChange == null) + if (_miColumnCommonChange is null) { // Cache access to the internal method 'OnColumnCommonChange' _miColumnCommonChange = typeof(DataGridView).GetMethod("OnColumnCommonChange", BindingFlags.Instance | BindingFlags.NonPublic | - BindingFlags.GetField); + BindingFlags.GetField)!; } - _miColumnCommonChange.Invoke(DataGridView, new object[] { columnIndex }); + _miColumnCommonChange.Invoke(DataGridView, [columnIndex]); } private void SetUseColumnTextForLinkValueInternal(object instance, bool value) { // Only need to cache reflection info the first time around - if (_piUseColumnTextForLinkValueInternal == null) + if (_piUseColumnTextForLinkValueInternal is null) { // Cache access to the internal property sette 'UseColumnTextForLinkValueInternal' _piUseColumnTextForLinkValueInternal = typeof(DataGridViewLinkCell).GetProperty(@"UseColumnTextForLinkValueInternal", BindingFlags.Instance | - BindingFlags.NonPublic | - BindingFlags.SetProperty); + BindingFlags.NonPublic | + BindingFlags.SetProperty)!; } @@ -295,12 +296,12 @@ private void SetUseColumnTextForLinkValueInternal(object instance, bool value) private void TrackVisitedStateInternal(object instance, bool value) { // Only need to cache reflection info the first time around - if (_piTrackVisitedStateInternal == null) + if (_piTrackVisitedStateInternal is null) { // Cache access to the internal property sette 'TrackVisitedStateInternal' _piTrackVisitedStateInternal = typeof(DataGridViewLinkCell).GetProperty(nameof(TrackVisitedStateInternal), BindingFlags.Instance | - BindingFlags.NonPublic | - BindingFlags.SetProperty); + BindingFlags.NonPublic | + BindingFlags.SetProperty)!; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxCell.cs index 9902556e2..9f270990f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -60,7 +60,7 @@ public KryptonDataGridViewMaskedTextBoxCell() _paintingMaskedTextBox.SetLayoutDisplayPadding(new Padding(0, 0, 1, -1)); _paintingMaskedTextBox.StateCommon.Border.Width = 0; _paintingMaskedTextBox.StateCommon.Border.Draw = InheritBool.False; - _paintingMaskedTextBox.StateCommon.Back.Color1 = Color.Empty; + _paintingMaskedTextBox.StateCommon.Back.Color1 = GlobalStaticValues.EMPTY_COLOR; } // Set the default values of the properties: @@ -414,7 +414,7 @@ public override object Clone() dataGridViewCell.TextMaskFormat = TextMaskFormat; dataGridViewCell.UseSystemPasswordChar = UseSystemPasswordChar; } - return dataGridViewCell; + return dataGridViewCell!; } /// @@ -424,7 +424,7 @@ public override object Clone() [EditorBrowsable(EditorBrowsableState.Advanced)] public override void DetachEditingControl() { - DataGridView dataGridView = DataGridView; + DataGridView? dataGridView = DataGridView; if (dataGridView?.EditingControl == null) { throw new InvalidOperationException("Cell is detached or its grid has no editing control."); @@ -450,12 +450,12 @@ public override void DetachEditingControl() /// set according to the cell properties. /// public override void InitializeEditingControl(int rowIndex, - object initialFormattedValue, + object? initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); - if (DataGridView.EditingControl is KryptonMaskedTextBox maskedTextBox) + if (DataGridView!.EditingControl is KryptonMaskedTextBox maskedTextBox) { maskedTextBox.PromptChar = PromptChar; maskedTextBox.AllowPromptAsInput = AllowPromptAsInput; @@ -473,7 +473,7 @@ public override void InitializeEditingControl(int rowIndex, maskedTextBox.SkipLiterals = SkipLiterals; maskedTextBox.TextMaskFormat = TextMaskFormat; maskedTextBox.UseSystemPasswordChar = UseSystemPasswordChar; - maskedTextBox.Text = initialFormattedValue is string initialFormattedValueStr ? initialFormattedValueStr : string.Empty; + maskedTextBox.Text = initialFormattedValue as string ?? string.Empty; } } @@ -496,7 +496,7 @@ public override void PositionEditingControl(bool setLocation, isFirstDisplayedColumn, isFirstDisplayedRow); editingControlBounds = GetAdjustedEditingControlBounds(editingControlBounds, cellStyle); - DataGridView.EditingControl.Location = new Point(editingControlBounds.X, editingControlBounds.Y); + DataGridView!.EditingControl!.Location = new Point(editingControlBounds.X, editingControlBounds.Y); DataGridView.EditingControl.Size = new Size(editingControlBounds.Width, editingControlBounds.Height); } #endregion @@ -508,17 +508,8 @@ public override void PositionEditingControl(bool setLocation, /// protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex) { - const int BUTTONS_WIDTH = 16; - Rectangle errorIconBounds = base.GetErrorIconBounds(graphics, cellStyle, rowIndex); - if (DataGridView.RightToLeft == RightToLeft.Yes) - { - errorIconBounds.X = errorIconBounds.Left + BUTTONS_WIDTH; - } - else - { - errorIconBounds.X = errorIconBounds.Left - BUTTONS_WIDTH; - } + errorIconBounds.X = errorIconBounds.Left; return errorIconBounds; } @@ -528,27 +519,16 @@ protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewC /// protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) { - if (DataGridView == null) - { - return new Size(-1, -1); - } - - Size preferredSize = base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); - if (constraintSize.Width == 0) - { - const int BUTTONS_WIDTH = 16; // Account for the width of the up/down buttons. - const int BUTTON_MARGIN = 8; // Account for some blank pixels between the text and buttons. - preferredSize.Width += BUTTONS_WIDTH + BUTTON_MARGIN; - } - - return preferredSize; + return DataGridView == null + ? new Size(-1, -1) + : base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); } #endregion #region Private - private KryptonDataGridViewMaskedTextBoxEditingControl EditingMaskedTextBox => DataGridView.EditingControl as KryptonDataGridViewMaskedTextBoxEditingControl; + private KryptonDataGridViewMaskedTextBoxEditingControl? EditingMaskedTextBox => DataGridView!.EditingControl as KryptonDataGridViewMaskedTextBoxEditingControl; private Rectangle GetAdjustedEditingControlBounds(Rectangle editingControlBounds, DataGridViewCellStyle cellStyle) @@ -591,8 +571,8 @@ private void OnCommonChange() } private bool OwnsEditingMaskedTextBox(int rowIndex) => - rowIndex != -1 - && DataGridView is { EditingControl: KryptonDataGridViewMaskedTextBoxEditingControl control } + rowIndex != -1 + && DataGridView is { EditingControl: KryptonDataGridViewMaskedTextBoxEditingControl control } && (rowIndex == ((IDataGridViewEditingControl)control).EditingControlRowIndex); private static bool PartPainted(DataGridViewPaintParts paintParts, DataGridViewPaintParts paintPart) => (paintParts & paintPart) != 0; @@ -605,7 +585,7 @@ internal void SetPromptChar(int rowIndex, char value) _promptChar = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.PromptChar = value; + EditingMaskedTextBox!.PromptChar = value; } } @@ -614,7 +594,7 @@ internal void SetAllowPromptAsInput(int rowIndex, bool value) _allowPromptAsInput = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.AllowPromptAsInput = value; + EditingMaskedTextBox!.AllowPromptAsInput = value; } } @@ -623,7 +603,7 @@ internal void SetAsciiOnly(int rowIndex, bool value) _asciiOnly = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.AsciiOnly = value; + EditingMaskedTextBox!.AsciiOnly = value; } } @@ -632,7 +612,7 @@ internal void SetBeepOnError(int rowIndex, bool value) _beepOnError = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.BeepOnError = value; + EditingMaskedTextBox!.BeepOnError = value; } } @@ -641,7 +621,7 @@ internal void SetCutCopyMaskFormat(int rowIndex, MaskFormat value) _cutCopyMaskFormat = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.CutCopyMaskFormat = value; + EditingMaskedTextBox!.CutCopyMaskFormat = value; } } @@ -650,7 +630,7 @@ internal void SetHidePromptOnLeave(int rowIndex, bool value) _hidePromptOnLeave = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.HidePromptOnLeave = value; + EditingMaskedTextBox!.HidePromptOnLeave = value; } } @@ -659,7 +639,7 @@ internal void SetHideSelection(int rowIndex, bool value) _hideSelection = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.HideSelection = value; + EditingMaskedTextBox!.HideSelection = value; } } @@ -668,7 +648,7 @@ internal void SetInsertKeyMode(int rowIndex, InsertKeyMode value) _insertKeyMode = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.InsertKeyMode = value; + EditingMaskedTextBox!.InsertKeyMode = value; } } @@ -677,7 +657,7 @@ internal void SetMask(int rowIndex, string value) _mask = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.Mask = value; + EditingMaskedTextBox!.Mask = value; } } @@ -686,7 +666,7 @@ internal void SetPasswordChar(int rowIndex, char value) _passwordChar = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.PasswordChar = value; + EditingMaskedTextBox!.PasswordChar = value; } } @@ -695,7 +675,7 @@ internal void SetRejectInputOnFirstFailure(int rowIndex, bool value) _rejectInputOnFirstFailure = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.RejectInputOnFirstFailure = value; + EditingMaskedTextBox!.RejectInputOnFirstFailure = value; } } @@ -704,7 +684,7 @@ internal void SetResetOnPrompt(int rowIndex, bool value) _resetOnPrompt = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.ResetOnPrompt = value; + EditingMaskedTextBox!.ResetOnPrompt = value; } } @@ -713,7 +693,7 @@ internal void SetResetOnSpace(int rowIndex, bool value) _resetOnSpace = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.ResetOnSpace = value; + EditingMaskedTextBox!.ResetOnSpace = value; } } @@ -722,7 +702,7 @@ internal void SetSkipLiterals(int rowIndex, bool value) _skipLiterals = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.SkipLiterals = value; + EditingMaskedTextBox!.SkipLiterals = value; } } @@ -731,7 +711,7 @@ internal void SetTextMaskFormat(int rowIndex, MaskFormat value) _textMaskFormat = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.TextMaskFormat = value; + EditingMaskedTextBox!.TextMaskFormat = value; } } @@ -740,7 +720,7 @@ internal void SetUseSystemPasswordChar(int rowIndex, bool value) _useSystemPasswordChar = value; if (OwnsEditingMaskedTextBox(rowIndex)) { - EditingMaskedTextBox.UseSystemPasswordChar = value; + EditingMaskedTextBox!.UseSystemPasswordChar = value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxColumn.cs index e83e8f331..c9b8bac72 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -51,7 +51,7 @@ public override string ToString() /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewMaskedTextBoxColumn; + var cloned = base.Clone() as KryptonDataGridViewMaskedTextBoxColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("cloned")); return cloned; } @@ -63,7 +63,7 @@ public override object Clone() /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { get => base.CellTemplate; set @@ -724,7 +724,7 @@ public bool UseSystemPasswordChar /// /// Small utility function that returns the template cell as a KryptonDataGridViewMaskedTextBoxCell /// - private KryptonDataGridViewMaskedTextBoxCell? MaskedTextBoxCellTemplate => (KryptonDataGridViewMaskedTextBoxCell)CellTemplate; + private KryptonDataGridViewMaskedTextBoxCell? MaskedTextBoxCellTemplate => CellTemplate as KryptonDataGridViewMaskedTextBoxCell; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxEditingControl.cs index 49f28a55a..98d0679e1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxEditingControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewMaskedTextBoxEditingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,7 @@ public class KryptonDataGridViewMaskedTextBoxEditingControl : KryptonMaskedTextB IDataGridViewEditingControl { #region Instance Fields - private DataGridView _dataGridView; + private DataGridView? _dataGridView; private bool _valueChanged; #endregion @@ -42,7 +42,7 @@ public KryptonDataGridViewMaskedTextBoxEditingControl() /// /// Property which caches the grid that uses this editing control /// - public virtual DataGridView EditingControlDataGridView + public virtual DataGridView? EditingControlDataGridView { get => _dataGridView; set => _dataGridView = value; @@ -50,11 +50,19 @@ public virtual DataGridView EditingControlDataGridView /// /// Property which represents the current formatted value of the editing control + /// Allows null as input, but null will saved as an empty string. /// - public virtual object EditingControlFormattedValue + [AllowNull] + public virtual object EditingControlFormattedValue { + // [AllowNull] removes warning CS8767, but allows for null input, which is undesired. + // The Text property is a non-nullable string and therefore null input + // will be converted to String.Empty. + get => GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); - set => Text = (string)value; + set => Text = value is string str && str is not null + ? str + : string.Empty; } /// @@ -220,7 +228,7 @@ private void NotifyDataGridViewOfValueChange() if (!_valueChanged) { _valueChanged = true; - _dataGridView.NotifyCurrentCellDirty(true); + _dataGridView?.NotifyCurrentCellDirty(true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownCell.cs index 0aa4e8870..34739a669 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -249,7 +249,7 @@ public override object Clone() dataGridViewCell.AllowDecimals = AllowDecimals; dataGridViewCell.TrailingZeroes = TrailingZeroes; } - return dataGridViewCell; + return dataGridViewCell!; } /// @@ -259,8 +259,9 @@ public override object Clone() [EditorBrowsable(EditorBrowsableState.Advanced)] public override void DetachEditingControl() { - DataGridView dataGridView = DataGridView; - if (dataGridView?.EditingControl == null) + DataGridView dataGridView = DataGridView!; + + if (dataGridView?.EditingControl is null) { throw new InvalidOperationException("Cell is detached or its grid has no editing control."); } @@ -285,12 +286,12 @@ public override void DetachEditingControl() /// set according to the cell properties. /// public override void InitializeEditingControl(int rowIndex, - object initialFormattedValue, + object? initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); - if (DataGridView.EditingControl is KryptonNumericUpDown numericUpDown) + if (DataGridView!.EditingControl is KryptonNumericUpDown numericUpDown) { numericUpDown.DecimalPlaces = DecimalPlaces; numericUpDown.Increment = Increment; @@ -298,7 +299,7 @@ public override void InitializeEditingControl(int rowIndex, numericUpDown.Minimum = Minimum; numericUpDown.ThousandsSeparator = ThousandsSeparator; numericUpDown.Hexadecimal = Hexadecimal; - numericUpDown.Text = initialFormattedValue is string initialFormattedValueStr ? initialFormattedValueStr : string.Empty; + numericUpDown.Text = initialFormattedValue as string ?? string.Empty; } } @@ -343,7 +344,7 @@ public override void PositionEditingControl(bool setLocation, isFirstDisplayedColumn, isFirstDisplayedRow); editingControlBounds = GetAdjustedEditingControlBounds(editingControlBounds, cellStyle); - DataGridView.EditingControl.Location = new Point(editingControlBounds.X, editingControlBounds.Y); + DataGridView!.EditingControl!.Location = new Point(editingControlBounds.X, editingControlBounds.Y); DataGridView.EditingControl.Size = new Size(editingControlBounds.Width, editingControlBounds.Height); } #endregion @@ -355,12 +356,8 @@ public override void PositionEditingControl(bool setLocation, /// protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex) { - const int BUTTONS_WIDTH = 16; - Rectangle errorIconBounds = base.GetErrorIconBounds(graphics, cellStyle, rowIndex); - errorIconBounds.X = DataGridView.RightToLeft == RightToLeft.Yes - ? errorIconBounds.Left + BUTTONS_WIDTH - : errorIconBounds.Left - BUTTONS_WIDTH; + errorIconBounds.X = errorIconBounds.Left; return errorIconBounds; } @@ -369,11 +366,11 @@ protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewC /// Customized implementation of the GetFormattedValue function in order to include the decimal and thousand separator /// characters in the formatted representation of the cell value. /// - protected override object GetFormattedValue(object value, + protected override object GetFormattedValue(object? value, int rowIndex, ref DataGridViewCellStyle cellStyle, - TypeConverter valueTypeConverter, - TypeConverter formattedValueTypeConverter, + TypeConverter? valueTypeConverter, + TypeConverter? formattedValueTypeConverter, DataGridViewDataErrorContexts context) { // By default, the base implementation converts the Decimal 1234.5 into the string "1234.5" @@ -398,7 +395,7 @@ protected override object GetFormattedValue(object value, return formattedDecimal.ToString((ThousandsSeparator ? "N" : "F") + DecimalPlaces.ToString()); } } - return formattedValue; + return formattedValue!; } /// @@ -406,25 +403,14 @@ protected override object GetFormattedValue(object value, /// protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) { - if (DataGridView == null) - { - return new Size(-1, -1); - } - - Size preferredSize = base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); - if (constraintSize.Width == 0) - { - const int BUTTONS_WIDTH = 16; // Account for the width of the up/down buttons. - const int BUTTON_MARGIN = 8; // Account for some blank pixels between the text and buttons. - preferredSize.Width += BUTTONS_WIDTH + BUTTON_MARGIN; - } - - return preferredSize; + return DataGridView == null + ? new Size(-1, -1) + : base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); } #endregion #region Private - private KryptonDataGridViewNumericUpDownEditingControl EditingNumericUpDown => DataGridView.EditingControl as KryptonDataGridViewNumericUpDownEditingControl; + private KryptonDataGridViewNumericUpDownEditingControl? EditingNumericUpDown => DataGridView!.EditingControl as KryptonDataGridViewNumericUpDownEditingControl; private decimal Constrain(decimal value) { @@ -482,7 +468,7 @@ private void OnCommonChange() } private bool OwnsEditingNumericUpDown(int rowIndex) => - rowIndex != -1 && DataGridView is { EditingControl: KryptonDataGridViewNumericUpDownEditingControl control } + rowIndex != -1 && DataGridView is { EditingControl: KryptonDataGridViewNumericUpDownEditingControl control } && (rowIndex == ((IDataGridViewEditingControl)control).EditingControlRowIndex); private static bool PartPainted(DataGridViewPaintParts paintParts, DataGridViewPaintParts paintPart) => (paintParts & paintPart) != 0; @@ -495,7 +481,7 @@ internal void SetAllowDecimals(int rowIndex, bool value) _allowDecimals = value; if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.AllowDecimals = value; + EditingNumericUpDown!.AllowDecimals = value; } } @@ -504,7 +490,7 @@ internal void SetTrailingZeroes(int rowIndex, bool value) _trailingZeroes = value; if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.TrailingZeroes = value; + EditingNumericUpDown!.TrailingZeroes = value; } } @@ -513,7 +499,7 @@ internal void SetDecimalPlaces(int rowIndex, int value) _decimalPlaces = value; if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.DecimalPlaces = value; + EditingNumericUpDown!.DecimalPlaces = value; } } @@ -522,7 +508,7 @@ internal void SetHexadecimal(int rowIndex, bool value) _hexadecimal = value; if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.Hexadecimal = value; + EditingNumericUpDown!.Hexadecimal = value; } } @@ -531,7 +517,7 @@ internal void SetIncrement(int rowIndex, decimal value) _increment = value; if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.Increment = value; + EditingNumericUpDown!.Increment = value; } } @@ -556,7 +542,7 @@ internal void SetMaximum(int rowIndex, decimal value) if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.Maximum = value; + EditingNumericUpDown!.Maximum = value; } } @@ -581,7 +567,7 @@ internal void SetMinimum(int rowIndex, decimal value) if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.Minimum = value; + EditingNumericUpDown!.Minimum = value; } } @@ -590,7 +576,7 @@ internal void SetThousandsSeparator(int rowIndex, bool value) _thousandsSeparator = value; if (OwnsEditingNumericUpDown(rowIndex)) { - EditingNumericUpDown.ThousandsSeparator = value; + EditingNumericUpDown!.ThousandsSeparator = value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownColumn.cs index b63e6262c..cb5db311e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -51,7 +51,7 @@ public override string ToString() /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewNumericUpDownColumn; + var cloned = base.Clone() as KryptonDataGridViewNumericUpDownColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("cloned")); return cloned; } @@ -63,7 +63,7 @@ public override object Clone() /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public override DataGridViewCell CellTemplate + public override DataGridViewCell? CellTemplate { get => base.CellTemplate; set @@ -393,7 +393,7 @@ public bool ThousandsSeparator /// /// Small utility function that returns the template cell as a KryptonDataGridViewNumericUpDownCell /// - private KryptonDataGridViewNumericUpDownCell? NumericUpDownCellTemplate => (KryptonDataGridViewNumericUpDownCell)CellTemplate; + private KryptonDataGridViewNumericUpDownCell? NumericUpDownCellTemplate => CellTemplate as KryptonDataGridViewNumericUpDownCell; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownEditingControl.cs index f6f20a870..793a5b5dd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownEditingControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewNumericUpDownEditingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,7 @@ public class KryptonDataGridViewNumericUpDownEditingControl : KryptonNumericUpDo IDataGridViewEditingControl { #region Instance Fields - private DataGridView _dataGridView; + private DataGridView? _dataGridView; private bool _valueChanged; #endregion @@ -42,19 +42,27 @@ public KryptonDataGridViewNumericUpDownEditingControl() /// /// Property which caches the grid that uses this editing control /// - public virtual DataGridView EditingControlDataGridView + public virtual DataGridView? EditingControlDataGridView { get => _dataGridView; - set => _dataGridView = value; + set => _dataGridView = value!; } /// /// Property which represents the current formatted value of the editing control + /// Allows null as input, but null will saved as an empty string. /// - public virtual object EditingControlFormattedValue + [AllowNull] + public virtual object EditingControlFormattedValue { + // [AllowNull] removes warning CS8767, but allows for null input, which is undesired. + // The Text property is a non-nullable string and therefore null input + // will be converted to String.Empty. + get => GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); - set => Text = (string)value; + set => Text = value is string str && str is not null + ? str + : string.Empty; } /// @@ -285,7 +293,7 @@ private void NotifyDataGridViewOfValueChange() if (!_valueChanged) { _valueChanged = true; - _dataGridView.NotifyCurrentCellDirty(true); + _dataGridView?.NotifyCurrentCellDirty(true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxCell.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxCell.cs index 5c8d6ec8f..965ccc0d9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxCell.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -76,10 +76,10 @@ public override string ToString() => /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewTextBoxCell; + var cloned = (KryptonDataGridViewTextBoxCell)base.Clone(); foreach (IconSpec sp in IconSpecs) { - cloned.IconSpecs.Add(sp.Clone() as IconSpec); + cloned.IconSpecs.Add((IconSpec)sp.Clone()); } cloned.Multiline = Multiline; @@ -119,7 +119,7 @@ protected override void Dispose(bool disposing) [EditorBrowsable(EditorBrowsableState.Advanced)] public override void DetachEditingControl() { - DataGridView dataGridView = DataGridView; + DataGridView? dataGridView = DataGridView; if (dataGridView?.EditingControl == null) { throw new InvalidOperationException("Cell is detached or its grid has no editing control."); @@ -145,19 +145,19 @@ public override void DetachEditingControl() /// set according to the cell properties. /// public override void InitializeEditingControl(int rowIndex, - object initialFormattedValue, + object? initialFormattedValue, DataGridViewCellStyle dataGridViewCellStyle) { base.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle); - if (DataGridView.EditingControl is KryptonTextBox textBox) + if (DataGridView!.EditingControl is KryptonTextBox textBox) { - textBox.Text = initialFormattedValue is not string initialFormattedValueStr ? string.Empty : initialFormattedValueStr; + textBox.Text = initialFormattedValue as string ?? string.Empty; DataGridViewTriState wrapMode = Style.WrapMode; if (wrapMode == DataGridViewTriState.NotSet) { - wrapMode = OwningColumn.DefaultCellStyle.WrapMode; + wrapMode = OwningColumn!.DefaultCellStyle.WrapMode; } textBox.WordWrap = textBox.Multiline = wrapMode == DataGridViewTriState.True; @@ -198,7 +198,7 @@ public override void PositionEditingControl(bool setLocation, isFirstDisplayedColumn, isFirstDisplayedRow); editingControlBounds = GetAdjustedEditingControlBounds(editingControlBounds, cellStyle); - DataGridView.EditingControl.Location = new Point(editingControlBounds.X, editingControlBounds.Y); + DataGridView!.EditingControl!.Location = new Point(editingControlBounds.X, editingControlBounds.Y); DataGridView.EditingControl.Size = new Size(editingControlBounds.Width, editingControlBounds.Height); } #endregion @@ -211,17 +211,8 @@ public override void PositionEditingControl(bool setLocation, /// protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex) { - const int BUTTONS_WIDTH = 16; - Rectangle errorIconBounds = base.GetErrorIconBounds(graphics, cellStyle, rowIndex); - if (DataGridView.RightToLeft == RightToLeft.Yes) - { - errorIconBounds.X = errorIconBounds.Left + BUTTONS_WIDTH; - } - else - { - errorIconBounds.X = errorIconBounds.Left - BUTTONS_WIDTH; - } + errorIconBounds.X = errorIconBounds.Left; return errorIconBounds; } @@ -231,33 +222,22 @@ protected override Rectangle GetErrorIconBounds(Graphics graphics, DataGridViewC /// protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) { - if (DataGridView == null) - { - return new Size(-1, -1); - } - - Size preferredSize = base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); - - if (constraintSize.Width == 0) - { - const int BUTTONS_WIDTH = 16; // Account for the width of the up/down buttons. - const int BUTTON_MARGIN = 8; // Account for some blank pixels between the text and buttons. - preferredSize.Width += BUTTONS_WIDTH + BUTTON_MARGIN; - } - return preferredSize; + return DataGridView == null + ? new Size(-1, -1) + : base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); } #endregion #region Private - private KryptonDataGridViewTextBoxEditingControl EditingTextBox => DataGridView.EditingControl as KryptonDataGridViewTextBoxEditingControl; + private KryptonDataGridViewTextBoxEditingControl? EditingTextBox => DataGridView!.EditingControl as KryptonDataGridViewTextBoxEditingControl; private Rectangle GetAdjustedEditingControlBounds(Rectangle editingControlBounds, DataGridViewCellStyle cellStyle) { // Adjust the vertical location of the editing control: - var preferredHeight = DataGridView.EditingControl.GetPreferredSize(new Size(editingControlBounds.Width, 10000)).Height; + var preferredHeight = DataGridView!.EditingControl!.GetPreferredSize(new Size(editingControlBounds.Width, 10000)).Height; if (preferredHeight < editingControlBounds.Height) { switch (cellStyle.Alignment) @@ -308,7 +288,7 @@ internal void SetMultiline(int rowIndex, bool value) _multiline = value; if (OwnsEditingTextBox(rowIndex)) { - EditingTextBox.Multiline = value; + EditingTextBox!.Multiline = value; } } @@ -317,7 +297,7 @@ internal void SetMultilineStringEditor(int rowIndex, bool value) _multilineStringEditor = value; if (OwnsEditingTextBox(rowIndex)) { - EditingTextBox.MultilineStringEditor = value; + EditingTextBox!.MultilineStringEditor = value; } } #endregion @@ -328,6 +308,6 @@ internal void SetMultilineStringEditor(int rowIndex, bool value) [Category(@"Data")] [Description(@"Set of extra icons to appear with control.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public List IconSpecs { get; } = new List(); + public List IconSpecs { get; } = []; } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxColumn.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxColumn.cs index b989bae4d..0baa7add2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxColumn.cs @@ -1,11 +1,11 @@ -#region BSD License + #region BSD License /* * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -53,10 +53,11 @@ public override string ToString() /// public override object Clone() { - var cloned = base.Clone() as KryptonDataGridViewTextBoxColumn; + var cloned = base.Clone() as KryptonDataGridViewTextBoxColumn ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("coned")); cloned.Multiline = Multiline; cloned.MultilineStringEditor = MultilineStringEditor; + return cloned; } @@ -90,8 +91,9 @@ public int MaxInputLength { if (MaxInputLength != value) { - TextBoxCellTemplate.MaxInputLength = value; - if (DataGridView != null) + TextBoxCellTemplate!.MaxInputLength = value; + + if (DataGridView is not null) { DataGridViewRowCollection rows = DataGridView.Rows; var count = rows.Count; @@ -122,18 +124,21 @@ public int MaxInputLength /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [AllowNull, MaybeNull] public override DataGridViewCell CellTemplate { + // base.CellTemplate can be null for getter and setter + get => base.CellTemplate; set { - if ((value != null) && value is not KryptonDataGridViewTextBoxCell) + if ((value is not null) && value is not KryptonDataGridViewTextBoxCell) { throw new InvalidCastException("Can only assign a object of type KryptonDataGridViewTextBoxCell"); } - base.CellTemplate = value; + base.CellTemplate = (KryptonDataGridViewTextBoxCell)value!; } } @@ -143,18 +148,25 @@ public override DataGridViewCell CellTemplate [Browsable(true)] [Category(@"Appearance")] [Description(@"DataGridView Column DefaultCell Style\r\nIf you set wrap mode, then this will ensure the DataRows are set to display the wrapped text!")] + [AllowNull] public override DataGridViewCellStyle DefaultCellStyle { + // base.DefaultCellStyle will take a null value and handle it. + // [NotNull] if the base getter encounters a null value it will always return a DefaultCellStyle + get => base.DefaultCellStyle; set { base.DefaultCellStyle = value; - if ((value.WrapMode != DataGridViewTriState.True) + + if (value is null + || value.WrapMode != DataGridViewTriState.True || DataGridView == null) { return; } + // https://stackoverflow.com/questions/16514352/multiple-lines-in-a-datagridview-cell/16514393 switch (DataGridView.AutoSizeRowsMode) { @@ -252,7 +264,7 @@ public bool MultilineStringEditor #endregion #region Private - private KryptonDataGridViewTextBoxCell? TextBoxCellTemplate => (KryptonDataGridViewTextBoxCell)CellTemplate; + private KryptonDataGridViewTextBoxCell? TextBoxCellTemplate => CellTemplate as KryptonDataGridViewTextBoxCell; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxEditingControl.cs index 4bf74044f..559c44b5b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxEditingControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDataGridViewTextBoxEditingControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -50,11 +50,19 @@ public virtual DataGridView? EditingControlDataGridView /// /// Property which represents the current formatted value of the editing control + /// Allows null as input, but null will saved as an empty string. /// - public virtual object EditingControlFormattedValue + [AllowNull] + public virtual object EditingControlFormattedValue { + // [AllowNull] removes warning CS8767, but allows for null input, which is undesired. + // The Text property is a non-nullable string and therefore null input + // will be converted to String.Empty. + get => GetEditingControlFormattedValue(DataGridViewDataErrorContexts.Formatting); - set => Text = (string)value; + set => Text = value is string str && str is not null + ? str + : string.Empty; } /// @@ -193,7 +201,7 @@ protected override void OnTextChanged(EventArgs e) base.OnTextChanged(e); //if (Focused) - NotifyDataGridViewOfValueChange(); + NotifyDataGridViewOfValueChange(); } /// @@ -218,7 +226,7 @@ private void NotifyDataGridViewOfValueChange() if (!_valueChanged) { _valueChanged = true; - _dataGridView.NotifyCurrentCellDirty(true); + _dataGridView?.NotifyCurrentCellDirty(true); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDateTimePicker.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDateTimePicker.cs index 0ec63d6b2..7e830754e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDateTimePicker.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDateTimePicker.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -63,7 +63,7 @@ public DateTimePickerButtonSpecCollection(KryptonDateTimePicker owner) private readonly ViewDrawDateTimeButton _buttonDown; private readonly ViewDrawDateTimeText _drawText; private readonly ViewLayoutCenter _layoutCheckBox; - private readonly ButtonSpecManagerDraw _buttonManager; + private readonly ButtonSpecManagerDraw? _buttonManager; private VisualPopupToolTip? _visualPopupToolTip; private KryptonContextMenuMonthCalendar? _kmc; private InputControlStyle _inputControlStyle; @@ -88,7 +88,6 @@ public DateTimePickerButtonSpecCollection(KryptonDateTimePicker owner) private bool _alwaysActive; private bool _userSetDateTime; private bool _dropDownMonthChanged; - private float _cornerRoundingRadius; private object? _rawDateTime; private int _cachedHeight; #endregion @@ -208,9 +207,9 @@ public KryptonDateTimePicker() CalendarDimensions = new Size(1, 1); _today = DEFAULT_TODAY; CalendarFirstDayOfWeek = Day.Default; - _annualDates = new DateTimeList(); - _monthlyDates = new DateTimeList(); - _dates = new DateTimeList(); + _annualDates = []; + _monthlyDates = []; + _dates = []; // Create storage objects ButtonSpecs = new DateTimePickerButtonSpecCollection(this); @@ -291,10 +290,10 @@ public KryptonDateTimePicker() // Create button specification collection manager _buttonManager = new ButtonSpecManagerDraw(this, Redirector, ButtonSpecs, null, - new[] { _drawDockerOuter }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary }, - new[] { PaletteMetricPadding.HeaderButtonPaddingPrimary }, + [_drawDockerOuter], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetPrimary], + [PaletteMetricPadding.HeaderButtonPaddingPrimary], CreateToolStripRenderer, NeedPaintDelegate); @@ -306,9 +305,6 @@ public KryptonDateTimePicker() // Update alignment to match current RightToLeft settings UpdateForRightToLeft(); - - // Set `CornerRoundingRadius' to 'GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE' (-1) - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -323,7 +319,7 @@ protected override void Dispose(bool disposing) OnCancelToolTip(this, EventArgs.Empty); // Remember to pull down the manager instance - _buttonManager.Destruct(); + _buttonManager?.Destruct(); } base.Dispose(disposing); @@ -331,18 +327,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets or sets the background color for the control. /// @@ -364,7 +348,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -423,6 +407,7 @@ public override string Text [Description(@"Text used as label for todays date.")] [DefaultValue("Today:")] [Localizable(true)] + [AllowNull] public string CalendarTodayText { get => _today; @@ -486,19 +471,12 @@ public string CalendarTodayText /// [Category(@"MonthCalendar")] [Description(@"Today's date.")] + [AllowNull] public DateTime CalendarTodayDate { get => _todayDate; - set - { - if (value == null) - { - value = DateTime.Now.Date; - } - - _todayDate = value; - } + set => _todayDate = value == null ? DateTime.Now.Date : value; } private void ResetCalendarTodayDate() => CalendarTodayDate = DateTime.Now.Date; @@ -511,7 +489,8 @@ public DateTime CalendarTodayDate [Category(@"MonthCalendar")] [Description(@"Indicates which annual dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarAnnuallyBoldedDates + [AllowNull] + public DateTime[]? CalendarAnnuallyBoldedDates { get => _annualDates.ToArray(); @@ -538,7 +517,8 @@ public DateTime[] CalendarAnnuallyBoldedDates [Category(@"MonthCalendar")] [Description(@"Indicates which monthly dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarMonthlyBoldedDates + [AllowNull] + public DateTime[]? CalendarMonthlyBoldedDates { get => _monthlyDates.ToArray(); @@ -565,7 +545,8 @@ public DateTime[] CalendarMonthlyBoldedDates [Category(@"MonthCalendar")] [Description(@"Indicates which dates should be boldface.")] [Localizable(true)] - public DateTime[] CalendarBoldedDates + [AllowNull] + public DateTime[]? CalendarBoldedDates { get => _dates.ToArray(); @@ -673,7 +654,12 @@ public void ResetValueNullable() } /// - /// Gets or sets the date/time value assigned to the control.. + /// Sets date as the current selected date. + /// + public void SetDate(DateTime date) => Value = date; + + /// + /// Gets or sets the date/time value assigned to the control. /// [Category(@"Appearance")] [Description(@"Property for the date/time.")] @@ -704,17 +690,8 @@ public DateTime Value } } } - - /// - /// Should the Value property be serialized. - /// - /// True if property needs to be serialized. - public bool ShouldSerializeValue() => false; - - /// - /// Reset value of the Value property. - /// - public void ResetValue() + internal bool ShouldSerializeValue() => false; + internal void ResetValue() { // Setting an explicit value means the check box should be set InternalViewDrawCheckBox.CheckState = CheckState.Checked; @@ -834,11 +811,11 @@ public bool ShowCheckBox [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager.UseMnemonic; + get => _buttonManager!.UseMnemonic; set { - if (_buttonManager.UseMnemonic != value) + if (_buttonManager!.UseMnemonic != value) { _buttonManager.UseMnemonic = value; PerformNeedPaint(true); @@ -989,7 +966,7 @@ public bool Checked [DefaultValue("")] [RefreshProperties(RefreshProperties.Repaint)] [Localizable(true)] - public string CustomFormat + public string? CustomFormat { get => _customFormat; @@ -1086,10 +1063,10 @@ public string CustomNullText [Category(@"Visuals - DateTimePicker")] [Description(@"Custom palette applied to drawing.")] [DefaultValue(null)] - public new PaletteBase? Palette + public new KryptonCustomPaletteBase? LocalCustomPalette { - get => base.Palette; - set => base.Palette = value; + get => base.LocalCustomPalette; + set => base.LocalCustomPalette = value; } /// @@ -1367,7 +1344,7 @@ public void SelectLastFragment() /// /// Tab state. /// Transparent Color. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the short text used as the main ribbon title. @@ -1489,9 +1466,9 @@ public bool DesignerGetHitTest(Point pt) /// Mouse location. [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public Component DesignerComponentFromPoint(Point pt) => + public Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision /// @@ -1621,7 +1598,7 @@ protected override bool ProcessMnemonic(char charCode) if (UseMnemonic && CanProcessMnemonic()) { // Pass request onto the button spec manager - if (_buttonManager.ProcessMnemonic(charCode)) + if (_buttonManager!.ProcessMnemonic(charCode)) { return true; } @@ -1718,7 +1695,7 @@ protected override void OnEnabledChanged(EventArgs e) _drawDockerOuter.Enabled = Enabled; // Update state to reflect change in enabled state - _buttonManager.RefreshButtons(); + _buttonManager?.RefreshButtons(); // Change in enabled state requires a layout and repaint PerformNeedPaint(true); @@ -1929,22 +1906,14 @@ protected override void OnRightToLeftChanged(EventArgs e) /// /// Source of notification. /// An EventArgs containing event data. - protected override void OnButtonSpecChanged(object sender, EventArgs e) + protected override void OnButtonSpecChanged(object? sender, EventArgs e) { // Recreate all the button specs with new values - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); // Let base class perform standard processing base.OnButtonSpecChanged(sender, e); } - - /// - /// Raises the Paint event. - /// - /// A PaintEventArgs that contains the event data. - /// - protected override void OnPaint(PaintEventArgs e) => base.OnPaint(e); - #endregion #region Internal @@ -1986,13 +1955,13 @@ private void UpdateStateAndPalettes() { // Get the correct palette settings to use IPaletteTriple tripleState = GetTripleState(); - _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder); + _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder!); // Update enabled state _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDockerOuter.ElementState = state; } @@ -2024,7 +1993,7 @@ private void UpdateForRightToLeft() } } - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed) { @@ -2044,7 +2013,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) var shadow = true; // Find the button spec associated with the tooltip request - ButtonSpec? buttonSpec = _buttonManager.ButtonSpecFromView(e.Target); + ButtonSpec? buttonSpec = _buttonManager?.ButtonSpecFromView(e.Target); // If the tooltip is for a button spec if (buttonSpec != null) @@ -2091,11 +2060,11 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCheckBoxClick(object sender, EventArgs e) => + private void OnCheckBoxClick(object? sender, EventArgs e) => // Invert the current checked state Checked = !Checked; - private void OnDropDownClick(object sender, EventArgs e) + private void OnDropDownClick(object? sender, EventArgs e) { // Never shown the calendar at design time if (!InRibbonDesignMode) @@ -2103,7 +2072,7 @@ private void OnDropDownClick(object sender, EventArgs e) // Just in case the user is inputting characters, end it _drawText.EndInputDigits(); - // Reset the cacheed value indicating if a date is selected in the month calendar + // Reset the cached value indicating if a date is selected in the month calendar _dropDownMonthChanged = false; // Create a new krypton context menu each time we drop the menu @@ -2142,7 +2111,7 @@ private void OnDropDownClick(object sender, EventArgs e) } else { - kcm.Palette = Palette; + kcm.LocalCustomPalette = LocalCustomPalette; } // Give user a change to modify the context menu or even cancel the menu entirely @@ -2199,7 +2168,7 @@ private void OnDropDownClick(object sender, EventArgs e) _buttonDropDown.RemoveFixed(); } - private void OnMonthCalendarDateChanged(object sender, DateRangeEventArgs e) + private void OnMonthCalendarDateChanged(object? sender, DateRangeEventArgs e) { // Use the newly selected date but the existing time var newDt = new DateTime(e.Start.Year, e.Start.Month, e.Start.Day, _dateTime.Hour, _dateTime.Minute, @@ -2223,10 +2192,10 @@ private void OnMonthCalendarDateChanged(object sender, DateRangeEventArgs e) _dropDownMonthChanged = true; } - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { // Must unhook from menu so it can be garbage collected - var kcm = (KryptonContextMenu)sender; + var kcm = sender as KryptonContextMenu ?? throw new ArgumentNullException(nameof(sender)); kcm.Closed -= OnKryptonContextMenuClosed; // Unhook from month calendar events @@ -2251,7 +2220,7 @@ private void OnKryptonContextMenuClosed(object sender, EventArgs e) kcm.Dispose(); } - private void OnUpClick(object sender, EventArgs e) + private void OnUpClick(object? sender, EventArgs e) { // Never operate the control at design time if (!InRibbonDesignMode) @@ -2263,7 +2232,7 @@ private void OnUpClick(object sender, EventArgs e) _buttonUp.RemoveFixed(); } - private void OnDownClick(object sender, EventArgs e) + private void OnDownClick(object? sender, EventArgs e) { // Never operate the control at design time if (!InRibbonDesignMode) @@ -2275,27 +2244,19 @@ private void OnDownClick(object sender, EventArgs e) _buttonDown.RemoveFixed(); } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; - popupToolTip.Disposed -= OnVisualPopupToolTipDisposed!; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); + popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } @@ -2335,7 +2296,7 @@ public class DTPContextMenu : KryptonContextMenu protected override VisualContextMenu CreateContextMenu(KryptonContextMenu kcm, PaletteBase? palette, PaletteMode paletteMode, - PaletteRedirect? redirector, + PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, KryptonContextMenuCollection items, bool enabled, diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDomainUpDown.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDomainUpDown.cs index 82452ef54..20ecaef01 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDomainUpDown.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDomainUpDown.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -497,7 +497,7 @@ public void Dispose() /// /// The state for which the image is needed. /// Color value. - public virtual Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public virtual Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content long text. @@ -632,7 +632,7 @@ private void DrawUpDownButtons(Graphics g, Rectangle clientRect) _viewButton.ElementState = ButtonElementState(upRect); _viewButton.Layout(layoutContext); _viewButton.Render(renderContext); - renderContext.Renderer.RenderGlyph.DrawInputControlNumericUpGlyph(renderContext, _viewButton.ClientRectangle, _palette.PaletteContent, _viewButton.ElementState); + renderContext.Renderer!.RenderGlyph.DrawInputControlNumericUpGlyph(renderContext, _viewButton.ClientRectangle, _palette.PaletteContent, _viewButton.ElementState); // Down button layoutContext.DisplayRectangle = downRect; @@ -707,7 +707,6 @@ public DomainUpDownButtonSpecCollection(KryptonDomainUpDown owner) private bool _mouseOver; private bool _alwaysActive; private bool _trackingMouseEnter; - private float _cornerRoundingRadius; private int _cachedHeight; #endregion @@ -849,10 +848,10 @@ public KryptonDomainUpDown() // Create button specification collection manager _buttonManager = new ButtonSpecManagerLayout(this, Redirector, ButtonSpecs, null, - new[] { _drawDockerInner }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, - new[] { PaletteMetricPadding.HeaderButtonPaddingInputControl }, + [_drawDockerInner], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetInputControl], + [PaletteMetricPadding.HeaderButtonPaddingInputControl], CreateToolStripRenderer, NeedPaintDelegate); @@ -864,9 +863,6 @@ public KryptonDomainUpDown() // Add text box to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(_domainUpDown); - - // Set `CornerRoundingRadius' to 'GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE' (-1) - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -892,18 +888,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets and sets if the control is in the tab chain. /// @@ -1557,7 +1541,7 @@ protected override void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected override void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected override void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { InvalidateChildren(); base.OnPaletteChanged(e); @@ -1724,10 +1708,10 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) IPaletteTriple triple = GetTripleState(); PaletteState state = _drawDockerOuter.State; _domainUpDown.BackColor = triple.PaletteBack.GetBackColor1(state); - _domainUpDown.ForeColor = triple.PaletteContent.GetContentShortTextColor1(state); + _domainUpDown.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(state); // Only set the font if the domain up down has been created - Font font = triple.PaletteContent.GetContentShortTextFont(state); + Font? font = triple.PaletteContent.GetContentShortTextFont(state); if ((_domainUpDown.Handle != IntPtr.Zero) && !_domainUpDown.Font.Equals(font)) { _domainUpDown.Font = font; @@ -1865,13 +1849,13 @@ private void UpdateStateAndPalettes() { // Get the correct palette settings to use IPaletteTriple tripleState = GetTripleState(); - _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder); + _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder!); // Update enabled state _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDockerOuter.ElementState = state; } @@ -1890,13 +1874,13 @@ private int PreferredHeight } } - private void OnDomainUpDownTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnDomainUpDownTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnDomainUpDownScroll(object sender, ScrollEventArgs e) => OnScroll(e); + private void OnDomainUpDownScroll(object? sender, ScrollEventArgs e) => OnScroll(e); - private void OnDomainUpDownSelectedItemChanged(object sender, EventArgs e) => OnSelectedItemChanged(e); + private void OnDomainUpDownSelectedItemChanged(object? sender, EventArgs e) => OnSelectedItemChanged(e); - private void OnDomainUpDownGotFocus(object sender, EventArgs e) + private void OnDomainUpDownGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); @@ -1904,7 +1888,7 @@ private void OnDomainUpDownGotFocus(object sender, EventArgs e) base.OnGotFocus(e); } - private void OnDomainUpDownLostFocus(object sender, EventArgs e) + private void OnDomainUpDownLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); @@ -1914,19 +1898,19 @@ private void OnDomainUpDownLostFocus(object sender, EventArgs e) // ReSharper restore RedundantBaseQualifier } - private void OnDomainUpDownKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnDomainUpDownKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnDomainUpDownKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnDomainUpDownKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnDomainUpDownKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnDomainUpDownKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnDomainUpDownPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnDomainUpDownPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnDomainUpDownValidated(object sender, EventArgs e) => OnValidated(e); + private void OnDomainUpDownValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnDomainUpDownValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnDomainUpDownValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed && !Disposing) { @@ -1993,21 +1977,21 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - private void OnDomainUpDownMouseChange(object sender, EventArgs e) + private void OnDomainUpDownMouseChange(object? sender, EventArgs e) { // Find new tracking mouse change state var tracking = _domainUpDown.MouseOver || @@ -2033,14 +2017,6 @@ private void OnDomainUpDownMouseChange(object sender, EventArgs e) } } } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDropButton.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDropButton.cs index d865b3106..efdf5091e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDropButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonDropButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -637,10 +637,10 @@ protected override void OnLostFocus(EventArgs e) protected override void OnClick(EventArgs e) { // Find the form this button is on - Form owner = FindForm(); + Form? owner = FindForm(); // If we find a valid owner - if (owner != null) + if (owner is not null) { // Update owner with our dialog result setting owner.DialogResult = DialogResult; @@ -732,12 +732,12 @@ protected virtual void OnKryptonCommandChanged(EventArgs e) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { case nameof(Enabled): - Enabled = KryptonCommand.Enabled; + Enabled = KryptonCommand!.Enabled; break; case nameof(Text): case @"ExtraText": @@ -773,9 +773,9 @@ protected virtual void SetStyles(ButtonStyle buttonStyle) #endregion #region Implementation - private void OnButtonTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnButtonTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); - private void OnButtonClick(object sender, MouseEventArgs e) + private void OnButtonClick(object? sender, MouseEventArgs e) { var showingContextMenu = false; @@ -813,7 +813,7 @@ private bool ShowDropDown() } else { - KryptonContextMenu.Palette = Palette; + KryptonContextMenu.LocalCustomPalette = LocalCustomPalette; } } @@ -895,16 +895,16 @@ private bool ShowDropDown() _ => KryptonContextMenuPositionV.Below }; - private void OnContextMenuClosed(object sender, EventArgs e) => ContextMenuClosed(); + private void OnContextMenuClosed(object? sender, EventArgs e) => ContextMenuClosed(); - private void OnKryptonContextMenuClosed(object sender, EventArgs e) + private void OnKryptonContextMenuClosed(object? sender, EventArgs e) { - var kcm = (KryptonContextMenu)sender; + var kcm = sender as KryptonContextMenu ?? throw new ArgumentNullException(nameof(sender)); kcm.Closed -= OnKryptonContextMenuClosed; ContextMenuClosed(); } - private void OnButtonSelect(object sender, MouseEventArgs e) + private void OnButtonSelect(object? sender, MouseEventArgs e) { // Take the focus if allowed if (CanFocus) diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFolderBrowserDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFolderBrowserDialog.cs index af09db820..27485fd9c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFolderBrowserDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFolderBrowserDialog.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,7 @@ namespace Krypton.Toolkit [ToolboxItem(true)] public class KryptonFolderBrowserDialog : ShellDialogWrapper, IDisposable { -#if NET60_OR_GREATER +#if NET6_0_OR_GREATER private readonly FolderBrowserDialog _internalOpenFileDialog = new();// { AutoUpgradeEnabled = true }; #else private readonly ShellBrowserDialogTFM _internalOpenFileDialog = new ShellBrowserDialogTFM(); @@ -45,7 +45,7 @@ public class KryptonFolderBrowserDialog : ShellDialogWrapper, IDisposable // return true; //} -#if NET60_OR_GREATER +#if NET6_0_OR_GREATER /// public override Guid? ClientGuid { @@ -67,22 +67,22 @@ public override Guid? ClientGuid public string SelectedPath { get => _internalOpenFileDialog.SelectedPath; - set => _internalOpenFileDialog.SelectedPath = value; + set => _internalOpenFileDialog.SelectedPath = value!; } -#if NET60_OR_GREATER +#if NET6_0_OR_GREATER /// /// Gets or sets the initial directory displayed by the folder browser dialog. /// [Category(@"FolderBrowsing")] [DefaultValue("")] - [Editor(typeof(InitialDirectoryEditor), typeof(UITypeEditor))] + [Editor(typeof(KryptonInitialDirectoryEditor), typeof(UITypeEditor))] [Description(@"Gets or sets the initial directory displayed by the folder browser dialog")] [AllowNull] public string InitialDirectory { get => _internalOpenFileDialog.InitialDirectory; - set => _internalOpenFileDialog.InitialDirectory = value; + set => _internalOpenFileDialog.InitialDirectory = value!; } #endif diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFontDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFontDialog.cs index 370173c73..f36eea546 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFontDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonFontDialog.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -87,13 +87,13 @@ public bool DisplayIsPrinterFontDescription { // internal bool GetOption(int option) => (uint) (this.options & option) > 0U; var funcSetOption = typeof(FontDialog).GetMethod(@"GetOption", BindingFlags.NonPublic | BindingFlags.Instance); - return (bool)funcSetOption!.Invoke(this, new object[] { 0x02 }); + return (bool)funcSetOption!.Invoke(this, [0x02])!; } set { //internal void SetOption(int option, bool value) var funcSetOption = typeof(FontDialog).GetMethod(@"SetOption", BindingFlags.NonPublic | BindingFlags.Instance); - funcSetOption!.Invoke(this, new object[] { 0x02, value }); + funcSetOption!.Invoke(this, [0x02, value]); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonForm.cs index bcca89211..e716ec76b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonForm.cs @@ -5,12 +5,14 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion // ReSharper disable InconsistentNaming + +// ReSharper disable UnusedMember.Global namespace Krypton.Toolkit { /// @@ -70,7 +72,6 @@ public FormFixedButtonSpecCollection(KryptonForm owner) #region Instance Fields - private readonly FormFixedButtonSpecCollection? _buttonSpecsFixed; private readonly ButtonSpecManagerDraw _buttonManager; private VisualPopupToolTip? _visualPopupToolTip; private readonly ViewDrawForm _drawDocker; @@ -95,12 +96,8 @@ public FormFixedButtonSpecCollection(KryptonForm owner) private StatusStrip? _statusStrip; private Bitmap? _cacheBitmap; private Icon? _cacheIcon; - private float _cornerRoundingRadius; private Control? _activeControl; private KryptonFormTitleStyle _titleStyle; - //private IntegratedToolBarValues _integratedToolBarValues; - //private IntegratedToolbarManager _integratedToolbarManager; - #endregion #region Identity @@ -121,16 +118,18 @@ public KryptonForm() _recreateButtons = true; _firstCheckView = true; _lastNotNormal = false; + // Yes, we want to be drawn double buffered by default + base.DoubleBuffered = true; // Create storage objects ButtonSpecs = new FormButtonSpecCollection(this); - _buttonSpecsFixed = new FormFixedButtonSpecCollection(this); + var buttonSpecsFixed = new FormFixedButtonSpecCollection(this); // Add the fixed set of window form buttons ButtonSpecMin = new ButtonSpecFormWindowMin(this); ButtonSpecMax = new ButtonSpecFormWindowMax(this); ButtonSpecClose = new ButtonSpecFormWindowClose(this); - _buttonSpecsFixed.AddRange(new ButtonSpecFormFixed[] { ButtonSpecMin, ButtonSpecMax, ButtonSpecClose }); + buttonSpecsFixed.AddRange([ButtonSpecMin, ButtonSpecMax, ButtonSpecClose]); // Create the palette storage StateCommon = new PaletteFormRedirect(Redirector, NeedPaintDelegate); @@ -145,7 +144,6 @@ public KryptonForm() PaletteMetricPadding.None, VisualOrientation.Top) { - // We need the border drawn before content to allow any injected elements // such as the application button for the ribbon to draw over borders. ForceBorderFirst = true @@ -160,6 +158,13 @@ public KryptonForm() // Create a null element that takes up all remaining space _layoutNull = new ViewLayoutNull(); + //// Create the internal panel used for containing content + //Panel = new KryptonPanel(this, StateCommon, StateDisabled, StateNormal, OnPanelPaint!) + //{ + // // Make sure the panel back style always mimics our back style + // PanelBackStyle = PaletteBackStyle.ControlClient + //}; + //_layoutFill = new ViewLayoutFill(Panel); // TODO For the Panel in a form // Create the root element that contains the title bar and null filler _drawDocker = new ViewDrawForm(StateActive.Back, StateActive.Border) @@ -169,11 +174,11 @@ public KryptonForm() }; // Create button specification collection manager - _buttonManager = new ButtonSpecManagerDraw(this, Redirector, ButtonSpecs, _buttonSpecsFixed, - new[] { _drawHeading }, - new IPaletteMetric[] { StateCommon.Header }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetForm }, - new[] { PaletteMetricPadding.HeaderButtonPaddingForm }, + _buttonManager = new ButtonSpecManagerDraw(this, Redirector, ButtonSpecs, buttonSpecsFixed, + [_drawHeading], + [StateCommon.Header], + [PaletteMetricInt.HeaderButtonEdgeInsetForm], + [PaletteMetricPadding.HeaderButtonPaddingForm], CreateToolStripRenderer, OnButtonManagerNeedPaint!); @@ -184,21 +189,19 @@ public KryptonForm() _buttonManager.ToolTipManager = ToolTipManager; // Hook into global static events - KryptonManager.GlobalAllowFormChromeChanged += OnGlobalAllowFormChromeChanged; + KryptonManager.GlobalUseThemeFormChromeBorderWidthChanged += OnGlobalUseThemeFormChromeBorderWidthChanged; KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; // Create the view manager instance ViewManager = new ViewManager(this, _drawDocker); - // Set the CornerRoundingRadius to 'GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE', default value - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - _titleStyle = KryptonFormTitleStyle.Inherit; // Disable 'UseDropShadow' on creation #pragma warning disable CS0618 _useDropShadow = false; #pragma warning restore CS0618 + TransparencyKey = Color.Magenta; // Bug #1749 } /// @@ -217,7 +220,7 @@ protected override void Dispose(bool disposing) // Unhook from the global static events KryptonManager.GlobalPaletteChanged -= OnGlobalPaletteChanged; - KryptonManager.GlobalAllowFormChromeChanged -= OnGlobalAllowFormChromeChanged; + KryptonManager.GlobalUseThemeFormChromeBorderWidthChanged -= OnGlobalUseThemeFormChromeBorderWidthChanged; // Clear down the cached bitmap if (_cacheBitmap != null) @@ -268,7 +271,7 @@ public string? TextExtra [Category(@"Visuals")] [Description(@"Should custom chrome be allowed for this KryptonForm instance.")] [DefaultValue(true)] - public bool AllowFormChrome + public new bool UseThemeFormChromeBorderWidth { get => _allowFormChrome; set @@ -276,9 +279,14 @@ public bool AllowFormChrome if (_allowFormChrome != value) { _allowFormChrome = value; + if (StateCommon!.Border is PaletteFormBorder formBorder) + { + formBorder.UseThemeFormChromeBorderWidth = value; + } // Do we want to switch on/off the custom chrome? - UpdateCustomChromeDecision(); + UpdateUseThemeFormChromeBorderWidthDecision(); + RecalcNonClient(); } } } @@ -345,9 +353,7 @@ public PaletteRelativeAlign FormTitleAlign } } } - private bool ShouldSerializeFormTitleAlign() => _formTitleAlign != PaletteRelativeAlign.Near; - private void ResetFormTitleAlign() => _formTitleAlign = PaletteRelativeAlign.Near; /// @@ -524,7 +530,7 @@ public void InjectViewElement([DisallowNull] ViewBase element, ViewDockStyle sty else { // Just add to the docking edge requested - _drawHeading.Add(element, style); + _drawHeading.Add(element!, style); } } } @@ -605,16 +611,6 @@ public FormWindowState GetWindowState() } } - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE), - Description(@"Defines the corner roundness on the current window (-1 is the default look).")] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - set => SetCornerRoundingRadius(value); - } - /// Gets or sets the active control on the container control. [DefaultValue(null), Description(@"Defines an active control for this window.")] @@ -639,79 +635,9 @@ public float CornerRoundingRadius Description(@"Arranges the current window title alignment.")] public KryptonFormTitleStyle TitleStyle { get => _titleStyle; set { _titleStyle = value; UpdateTitleStyle(value); } } - /*/// Gets or sets the integrated tool bar values. - /// The integrated tool bar values. - [Category(@"Visuals")] - [Description(@"Handles the integrated toolbar.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public IntegratedToolBarValues IntegratedToolBarValues - { - [DebuggerStepThrough] - get => _integratedToolBarValues; - - set - { - _integratedToolBarValues = value; - - _integratedToolbarManager = new IntegratedToolbarManager(this, _integratedToolBarValues); - } - } - - private bool ShouldSerializeIntegratedToolBarValues() => !_integratedToolBarValues.IsDefault; - - /// Resets the integrated tool bar values. - public void ResetIntegratedToolBarValues() => _integratedToolBarValues.Reset();*/ - #endregion #region Public Chrome - /// - /// Perform layout on behalf of the composition element using our root element. - /// - /// Layout context. - /// Rectangle for composition element. - public override void WindowChromeCompositionLayout(ViewLayoutContext context, - Rectangle compRect) - { - // Update buttons so the min/max/close and custom button - // specs have visible states set to the correct values. For - // the form level buttons this means they are hidden. - _buttonManager.RefreshButtons(true); - - // Tell the content to draw itself on a composition surface - _drawContent.DrawContentOnComposition = true; - _drawContent.Glowing = true; - - // Update the fixed header area to that provided - _headingFixedSize.FixedSize = new Size(compRect.Height, compRect.Height); - - // Perform actual layout of the element tree - ViewManager?.Layout(context); - } - - /// - /// Perform painting on behalf of the composition element using our root element. - /// - /// Rendering context. - public override void WindowChromeCompositionPaint(RenderContext context) - { - // We do not draw background of form or header - _drawDocker.DrawCanvas = false; - _drawHeading.DrawCanvas = false; - - ViewManager?.Paint(context); - } - - /// - /// Raises the event. - /// - /// A that contains the event data. - protected override void OnPaint(PaintEventArgs e) - { - StateCommon.Border.Rounding = CornerRoundingRadius; - - base.OnPaint(e); - } /// /// Gets a value indicating if the provided point is inside the minimize button. @@ -820,7 +746,7 @@ protected override void OnPaint(PaintEventArgs e) /// Transparent Color. public Color GetImageTransparentColor(PaletteState state) => // We never mark any color as transparent - Color.Empty; + GlobalStaticValues.EMPTY_COLOR; /// /// Gets the short text used as the main caption title. @@ -849,7 +775,7 @@ internal class FormPaletteRedirect : PaletteRedirect { private readonly KryptonForm _kryptonForm; - public FormPaletteRedirect(PaletteBase? palette, KryptonForm kryptonForm) + public FormPaletteRedirect(PaletteBase palette, KryptonForm kryptonForm) : base(palette) => _kryptonForm = kryptonForm; @@ -898,7 +824,7 @@ protected override void OnControlRemoved(ControlEventArgs e) if (_statusStrip == e.Control) { // Unhook from status strip events - UnmonitorStatusStrip(); + UnMonitorStatusStrip(); // Recalc to test if status strip should be unintegrated RecalcNonClient(); @@ -916,7 +842,7 @@ protected override void OnLoad(EventArgs e) base.OnLoad(e); // We only apply custom chrome when control is already created and positioned - UpdateCustomChromeDecision(); + UpdateUseThemeFormChromeBorderWidthDecision(); } /// @@ -935,7 +861,7 @@ protected override void OnTextChanged(EventArgs e) /// Source of notification. /// An EventArgs containing event data. /// - protected override void OnButtonSpecChanged(object sender, [DisallowNull] EventArgs e) + protected override void OnButtonSpecChanged(object? sender, [DisallowNull] EventArgs e) { Debug.Assert(e != null); @@ -972,11 +898,7 @@ protected override void OnWindowActiveChanged() _drawHeading.Enabled = WindowActive; _drawContent.Enabled = WindowActive; - // Only need to redraw if showing custom chrome - if (ApplyCustomChrome) - { - PerformNeedPaint(false); - } + PerformNeedPaint(false); base.OnWindowActiveChanged(); } @@ -991,17 +913,17 @@ protected override void OnPaletteChanged(EventArgs e) base.OnPaletteChanged(e); // Test if we need to change the custom chrome usage - UpdateCustomChromeDecision(); + UpdateUseThemeFormChromeBorderWidthDecision(); } /// - /// Occurs when the AllowFormChromeChanged event is fired for the current palette. + /// Occurs when the UseThemeFormChromeBorderWidthChanged event is fired for the current palette. /// /// Source of the event. /// An EventArgs containing the event data. - protected override void OnAllowFormChromeChanged(object sender, EventArgs e) => + protected override void OnUseThemeFormChromeBorderWidthChanged(object? sender, EventArgs e) => // Test if we need to change the custom chrome usage - UpdateCustomChromeDecision(); + UpdateUseThemeFormChromeBorderWidthDecision(); #endregion @@ -1039,9 +961,8 @@ protected override void WindowChromeEnd() /// Perform hit testing. /// /// Point in window coordinates. - /// Are we performing composition. /// - protected override IntPtr WindowChromeHitTest(Point pt, bool composition) + protected override IntPtr WindowChromeHitTest(Point pt) { Point originalPt = pt; if (CustomCaptionArea.Contains(pt)) @@ -1049,22 +970,19 @@ protected override IntPtr WindowChromeHitTest(Point pt, bool composition) return new IntPtr(PI.HT.CAPTION); } - if (!composition) + // Is the mouse over any of the min/max/close buttons? + if (_buttonManager.GetButtonRectangle(ButtonSpecMin).Contains(pt) + || _buttonManager.GetButtonRectangle(ButtonSpecMax).Contains(pt) + || _buttonManager.GetButtonRectangle(ButtonSpecClose).Contains(pt)) { - // Is the mouse over any of the min/max/close buttons? - if (_buttonManager.GetButtonRectangle(ButtonSpecMin).Contains(pt) - || _buttonManager.GetButtonRectangle(ButtonSpecMax).Contains(pt) - || _buttonManager.GetButtonRectangle(ButtonSpecClose).Contains(pt)) - { - // Get the mouse controller for this button - ViewBase? viewBase = ViewManager?.Root?.ViewFromPoint(pt); - IMouseController? controller = viewBase?.FindMouseController(); + // Get the mouse controller for this button + ViewBase? viewBase = ViewManager?.Root.ViewFromPoint(pt); + IMouseController? controller = viewBase?.FindMouseController(); - // Ensure the button shows as 'normal' state when mouse not over and pressed - if (controller is ButtonController buttonController) - { - buttonController.NonClientAsNormal = true; - } + // Ensure the button shows as 'normal' state when mouse not over and pressed + if (controller is ButtonController buttonController) + { + buttonController.NonClientAsNormal = true; } } @@ -1087,19 +1005,7 @@ protected override IntPtr WindowChromeHitTest(Point pt, bool composition) } } - var borders = FormBorderStyle switch - { - FormBorderStyle.None - or FormBorderStyle.Fixed3D - or FormBorderStyle.FixedDialog - or FormBorderStyle.FixedSingle - or FormBorderStyle.FixedToolWindow => Padding.Empty, - - _ => WindowState == FormWindowState.Maximized - ? Padding.Empty - : RealWindowBorders // When maximized we do not have any borders around the client - }; - + Padding borders = RealWindowBorders; // Restrict the top border to the same size as the left as we are using // the values for the size of the border hit testing for resizing the window // and not the size of the border for drawing purposes. @@ -1109,7 +1015,7 @@ or FormBorderStyle.FixedSingle } // Get the elements that contains the mouse point - ViewBase? mouseView = ViewManager?.Root?.ViewFromPoint(pt); + ViewBase? mouseView = ViewManager?.Root.ViewFromPoint(pt); // Scan up the view hierarchy until a recognized element is found while (mouseView != null) @@ -1179,7 +1085,7 @@ or FormBorderStyle.FixedSingle mouseView = mouseView.Parent; } - return base.WindowChromeHitTest(originalPt, composition); + return base.WindowChromeHitTest(originalPt); } /// @@ -1210,12 +1116,6 @@ protected override bool OnWM_NCLBUTTONDOWN(ref Message m) // Convert to window coordinates Point windowPoint = ScreenToWindow(screenPoint); - // In composition we need to adjust for the left window border - if (ApplyComposition) - { - windowPoint.X -= RealWindowBorders.Left; - } - // Is the mouse over the Application icon image area if (_drawContent.ImageRectangle(context).Contains(windowPoint)) { @@ -1304,34 +1204,41 @@ private void SetHeaderStyle(ViewDrawDocker drawDocker, PaletteMetricInt.HeaderButtonEdgeInsetDockInactive, PaletteMetricPadding.HeaderButtonPaddingDockInactive); break; + case HeaderStyle.Form: _buttonManager.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetForm, PaletteMetricPadding.HeaderButtonPaddingForm); break; + case HeaderStyle.Calendar: _buttonManager.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCalendar, PaletteMetricPadding.HeaderButtonPaddingCalendar); break; + case HeaderStyle.Custom1: _buttonManager.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom1, PaletteMetricPadding.HeaderButtonPaddingCustom1); break; + case HeaderStyle.Custom2: _buttonManager.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom2, PaletteMetricPadding.HeaderButtonPaddingCustom2); break; + case HeaderStyle.Custom3: _buttonManager.SetDockerMetrics(drawDocker, palette, PaletteMetricInt.HeaderButtonEdgeInsetCustom3, PaletteMetricPadding.HeaderButtonPaddingCustom3); break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } } @@ -1370,7 +1277,7 @@ private bool CheckViewLayout() if (_headerStyle != _headerStylePrev) { // Ensure the header style matches the form border style - SetHeaderStyle(_drawHeading, StateCommon.Header, _headerStyle); + SetHeaderStyle(_drawHeading, StateCommon!.Header, _headerStyle); // Remember last header style set _headerStylePrev = _headerStyle; @@ -1380,10 +1287,6 @@ private bool CheckViewLayout() Padding windowBorders = RealWindowBorders; _headingFixedSize.FixedSize = new Size(windowBorders.Top, windowBorders.Top); - // The content is definitely not being drawn on a composition - _drawContent.DrawContentOnComposition = false; - _drawContent.Glowing = false; - // A change in window state since last time requires a layout if (_lastWindowState != GetWindowState()) { @@ -1445,7 +1348,7 @@ private bool CheckViewLayout() // Track the window state at the time the region is created _regionWindowState = WindowState; - // Get the path for the border so we can shape the form using it + // Get the path for the border, so we can shape the form using it using var context = new RenderContext(this, null, Bounds, Renderer); using GraphicsPath? path = _drawDocker.GetOuterBorderPath(context); if (!_firstCheckView) @@ -1478,10 +1381,16 @@ private void PerformViewPaint(Graphics g, Rectangle rect) { // If we notice we have become maximized but the layout has not updated for // the maximized state then we need to update the region ourself right now - if ((GetWindowState() == FormWindowState.Maximized) && - (_regionWindowState != FormWindowState.Maximized)) + if (GetWindowState() == FormWindowState.Maximized) + { + if (_regionWindowState != FormWindowState.Maximized) + { + UpdateRegionForMaximized(); + } + } + else { - UpdateRegionForMaximized(); + g.FillRectangle(Brushes.Magenta, rect); // Bug #1749 } // We draw the main form and header background @@ -1536,22 +1445,26 @@ private void UpdateBorderRegion(Region? newRegion) oldRegion?.Dispose(); } - private void UpdateCustomChromeDecision() + private bool _hasUseThemeFormChromeBorderWidthFirstRun; + private void UpdateUseThemeFormChromeBorderWidthDecision() { if (IsHandleCreated) { // Decide if we should have custom chrome applied - var needChrome = AllowFormChrome && - KryptonManager.AllowFormChrome && - (GetResolvedPalette().GetAllowFormChrome() == InheritBool.True); + var needChrome = UseThemeFormChromeBorderWidth && + KryptonManager.UseThemeFormChromeBorderWidth && + (GetResolvedPalette().UseThemeFormChromeBorderWidth == InheritBool.True); // Is there a change in custom chrome requirement? - if (ApplyCustomChrome != needChrome) + if (UseThemeFormChromeBorderWidth != needChrome + || !_hasUseThemeFormChromeBorderWidthFirstRun) { + _hasUseThemeFormChromeBorderWidthFirstRun = true; _recreateButtons = true; _firstCheckView = true; - ApplyCustomChrome = needChrome; - PerformNeedPaint(needChrome); + UseThemeFormChromeBorderWidth = needChrome; + base.UseThemeFormChromeBorderWidth = true; // make sure "Form" buttons are drawn correctly + PerformNeedPaint(true); // Force Layout size change } } } @@ -1567,7 +1480,7 @@ private void MonitorStatusStrip(StatusStrip statusStrip) { if (_statusStrip != null) { - UnmonitorStatusStrip(); + UnMonitorStatusStrip(); } // Hook into event handlers @@ -1576,7 +1489,7 @@ private void MonitorStatusStrip(StatusStrip statusStrip) _statusStrip.DockChanged += OnStatusDockChanged; } - private void UnmonitorStatusStrip() + private void UnMonitorStatusStrip() { if (_statusStrip != null) { @@ -1587,7 +1500,7 @@ private void UnmonitorStatusStrip() } } - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed) { @@ -1615,7 +1528,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) if (AllowButtonSpecToolTips) { // Create a helper object to provide tooltip values - var buttonSpecMapping = new ButtonSpecToContent(Redirector!, buttonSpec); + var buttonSpecMapping = new ButtonSpecToContent(Redirector, buttonSpec); // Is there actually anything to show for the tooltip if (buttonSpecMapping.HasContent) @@ -1650,17 +1563,17 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; - // Not showing a popup page any more + // Not showing a popup page anymore _visualPopupToolTip = null; } @@ -1692,7 +1605,7 @@ private void OnButtonManagerNeedPaint(object sender, NeedLayoutEventArgs e) OnNeedPaint(sender, e); } - private void OnStatusDockChanged(object sender, EventArgs e) + private void OnStatusDockChanged(object? sender, EventArgs e) { if (StatusStripMerging) { @@ -1700,7 +1613,7 @@ private void OnStatusDockChanged(object sender, EventArgs e) } } - private void OnStatusVisibleChanged(object sender, EventArgs e) + private void OnStatusVisibleChanged(object? sender, EventArgs e) { if (StatusStripMerging) { @@ -1708,14 +1621,14 @@ private void OnStatusVisibleChanged(object sender, EventArgs e) } } - private void OnGlobalAllowFormChromeChanged(object sender, EventArgs e) => UpdateCustomChromeDecision(); + private void OnGlobalUseThemeFormChromeBorderWidthChanged(object? sender, EventArgs e) => UpdateUseThemeFormChromeBorderWidthDecision(); - private void OnGlobalPaletteChanged(object sender, EventArgs e) + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) { - UpdateCustomChromeDecision(); + UpdateUseThemeFormChromeBorderWidthDecision(); } } @@ -1736,21 +1649,13 @@ private void UpdateTitleStyle(KryptonFormTitleStyle titleStyle) break; } } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion #region Drop Shadow Methods /// /// Calls the method that draws the drop shadow around the form. /// - /// Use dropshadow user input value. + /// Use drop shadow user input value. public void UpdateDropShadowDraw(bool useDropShadow) { if (useDropShadow) @@ -1849,8 +1754,8 @@ public static bool GetHasCurrentInstanceGotAdministrativeRights() /// if set to true [value]. public static void SetIsInAdministratorMode(bool value) { - // TODO: @wagnerp: what is this supposed to be doing ? - var form = new KryptonForm(); + //// TODO: @wagnerp: what is this supposed to be doing ? + //var form = new KryptonForm(); //form.IsInAdministratorMode = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroup.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroup.cs index 38d5da514..f695f554a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroup.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,6 @@ public class KryptonGroup : VisualControlContainment private readonly ViewLayoutFill _layoutFill; private bool _forcedLayout; private bool _layingOut; - private float _cornerRoundingRadius; #endregion @@ -73,25 +72,10 @@ public KryptonGroup() // Add panel to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(Panel); - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets and sets the name of the control. /// @@ -226,7 +210,7 @@ public PaletteBackStyle GroupBackStyle [Category(@"Visuals")] [Description(@"Overrides for defining common group appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDoubleRedirect? StateCommon { get; } + public PaletteDoubleRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -238,7 +222,7 @@ public PaletteBackStyle GroupBackStyle [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteDouble? StateDisabled { get; } - private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; + private bool ShouldSerializeStateDisabled() => !StateDisabled!.IsDefault; /// /// Gets access to the normal group appearance entries. @@ -248,7 +232,7 @@ public PaletteBackStyle GroupBackStyle [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteDouble? StateNormal { get; } - private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; + private bool ShouldSerializeStateNormal() => !StateNormal!.IsDefault; /// /// Get the preferred size of the control based on a proposed size. @@ -317,7 +301,7 @@ public virtual void SetFixedState(PaletteState state) { // Request fixed state from the view _drawDocker.FixedState = state; - Panel.SetFixedState(state); + Panel?.SetFixedState(state); } #endregion @@ -384,11 +368,11 @@ protected override void OnEnabledChanged(EventArgs e) // Push correct palettes into the view if (Enabled) { - _drawDocker.SetPalettes(StateNormal.Back, StateNormal.Border); + _drawDocker.SetPalettes(StateNormal!.Back, StateNormal.Border); } else { - _drawDocker.SetPalettes(StateDisabled.Back, StateDisabled.Border); + _drawDocker.SetPalettes(StateDisabled!.Back, StateDisabled.Border); } _drawDocker.Enabled = Enabled; @@ -430,7 +414,7 @@ protected override void OnLayout(LayoutEventArgs levent) if (IsInitialized || _forcedLayout || (DesignMode && (Panel != null))) { Rectangle fillRect = _layoutFill.FillRect; - Panel.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); + Panel?.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); } _layingOut = false; @@ -447,7 +431,7 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) { // As the contained group panel is using our palette storage // we also need to pass on any paint request to it as well - Panel.PerformNeedPaint(e.NeedLayout); + Panel?.PerformNeedPaint(e.NeedLayout); } else { @@ -459,7 +443,7 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) #endregion #region Implementation - private void OnGroupPanelPaint(object sender, NeedLayoutEventArgs e) + private void OnGroupPanelPaint(object? sender, NeedLayoutEventArgs e) { // If the child panel is layout out but not because we are, then it must be // laying out because a child has changed visibility/size/etc. If we are an @@ -469,14 +453,6 @@ private void OnGroupPanelPaint(object sender, NeedLayoutEventArgs e) PerformNeedPaint(true); } } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBox.cs index 7878c5c2d..590a60fe4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,13 +32,12 @@ public class KryptonGroupBox : VisualControlContainment private readonly ViewDrawGroupBoxDocker _drawDocker; private readonly ViewDrawContent _drawContent; private readonly ViewLayoutFill _layoutFill; - private ScreenObscurer _obscurer; + private ScreenObscurer? _obscurer; private readonly EventHandler? _removeObscurer; private bool _forcedLayout; private bool _captionVisible; private readonly bool _ignoreLayout; private bool _layingOut; - private float _cornerRoundingRadius; #endregion #region Identity @@ -67,7 +66,6 @@ public KryptonGroupBox() // Create the internal panel used for containing content Panel = new KryptonGroupBoxPanel(this, StateCommon, StateDisabled, StateNormal, OnGroupPanelPaint!) { - // Make sure the panel back style always mimics our back style PanelBackStyle = PaletteBackStyle.ControlGroupBox }; @@ -104,8 +102,6 @@ public KryptonGroupBox() ((KryptonReadOnlyControls)Controls).AddInternal(Panel); _ignoreLayout = false; - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -125,7 +121,10 @@ protected override void Dispose(bool disposing) _obscurer.Dispose(); _obscurer = null!; } - catch { } + catch + { + // Ignored + } } } @@ -134,19 +133,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets and sets the name of the control. /// @@ -247,7 +233,7 @@ public override string Text [Category(@"Appearance")] [Description(@"The internal panel that contains group content.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonGroupBoxPanel? Panel { get; } + public KryptonGroupBoxPanel Panel { get; } /// /// Gets and the sets the percentage of overlap for the caption and group area. @@ -262,9 +248,8 @@ public double CaptionOverlap set { - if (_drawDocker.CaptionOverlap != value) + if ( _drawDocker.CaptionOverlap != value) { - // Enforce limits on the value between 0 and 1 (0% and 100%) value = Math.Max(Math.Min(value, 1.0), 0.0); _drawDocker.CaptionOverlap = value; @@ -481,7 +466,7 @@ public bool CaptionVisible [Category(@"Visuals")] [Description(@"Overrides for defining common header group appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteGroupBoxRedirect? StateCommon { get; } + public PaletteGroupBoxRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -493,7 +478,7 @@ public bool CaptionVisible [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteGroupBox? StateDisabled { get; } - private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; + private bool ShouldSerializeStateDisabled() => !StateDisabled!.IsDefault; /// /// Gets access to the normal header group appearance entries. @@ -503,7 +488,7 @@ public bool CaptionVisible [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteGroupBox? StateNormal { get; } - private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; + private bool ShouldSerializeStateNormal() => !StateNormal!.IsDefault; /// /// Gets access to the caption content. @@ -686,13 +671,13 @@ protected override void OnEnabledChanged(EventArgs e) // Push correct palettes into the view if (Enabled) { - _drawContent.SetPalette(StateNormal.Content); + _drawContent.SetPalette(StateNormal!.Content); _drawDocker.SetPalettes(StateNormal.Back, StateNormal.Border); } else { - _drawContent.SetPalette(StateDisabled.Content); - _drawDocker.SetPalettes(StateDisabled.Back, StateNormal.Border); + _drawContent.SetPalette(StateDisabled!.Content); + _drawDocker.SetPalettes(StateDisabled.Back, StateNormal!.Border); } _drawContent.Enabled = Enabled; @@ -769,7 +754,7 @@ protected override void WndProc(ref Message m) } case PI.WM_.WINDOWPOSCHANGED: // Uncover from the covered area - _obscurer.Uncover(); + _obscurer?.Uncover(); break; } @@ -790,9 +775,9 @@ protected override void WndProc(ref Message m) #endregion #region Implementation - private void OnRemoveObscurer(object sender, EventArgs e) => _obscurer.Uncover(); + private void OnRemoveObscurer(object? sender, EventArgs e) => _obscurer?.Uncover(); - private void OnValuesTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnValuesTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); private void OnGroupPanelPaint(object sender, NeedLayoutEventArgs e) { @@ -806,14 +791,6 @@ private void OnGroupPanelPaint(object sender, NeedLayoutEventArgs e) } private void ReapplyVisible() => _drawContent.Visible = _captionVisible; - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion #region Implementation Static diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBoxPanel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBoxPanel.cs index c4fcd950a..b2030f208 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBoxPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupBoxPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupPanel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupPanel.cs index 439723ad6..9b654b32c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonGroupPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -110,7 +110,7 @@ public KryptonGroupPanel(Control alignControl, ViewDrawPanel.SetPalettes(Enabled ? _forcedNormal : _forcedDisabled); // Make sure the alignment of the group panel is as that of the parent - ViewManager.AlignControl = alignControl; + ViewManager!.AlignControl = alignControl; } #endregion @@ -315,7 +315,7 @@ public override DockStyle Dock [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new PaletteBase Palette + public new PaletteBase? Palette { get => base.Palette; set => base.Palette = value; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeader.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeader.cs index fb0b983ba..abffc144e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeader.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeader.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -49,8 +49,7 @@ public HeaderButtonSpecCollection(KryptonHeader owner) private VisualOrientation _orientation; private readonly ViewDrawDocker _drawDocker; private readonly ViewDrawContent _drawContent; - private readonly ButtonSpecManagerDraw _buttonManager; - private float _cornerRoundingRadius; + private readonly ButtonSpecManagerDraw? _buttonManager; private VisualPopupToolTip? _visualPopupToolTip; #endregion @@ -90,10 +89,10 @@ public KryptonHeader() // Create button specification collection manager _buttonManager = new ButtonSpecManagerDraw(this, Redirector, ButtonSpecs, null, - new[] { _drawDocker }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary }, - new[] { PaletteMetricPadding.HeaderButtonPaddingPrimary }, + [_drawDocker], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetPrimary], + [PaletteMetricPadding.HeaderButtonPaddingPrimary], CreateToolStripRenderer, NeedPaintDelegate); @@ -106,8 +105,6 @@ public KryptonHeader() // We want to be auto sized by default, but not the property default! AutoSize = true; AutoSizeMode = AutoSizeMode.GrowAndShrink; - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -122,7 +119,7 @@ protected override void Dispose(bool disposing) OnCancelToolTip(this, EventArgs.Empty); // Remember to pull down the manager instance - _buttonManager.Destruct(); + _buttonManager?.Destruct(); } base.Dispose(disposing); @@ -130,19 +127,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets and sets the automatic resize of the control to fit contents. /// @@ -223,7 +207,7 @@ public virtual VisualOrientation Orientation // Update the associated visual elements that are effected _drawDocker.Orientation = value; _drawContent.Orientation = value; - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); PerformNeedPaint(true); } @@ -238,11 +222,11 @@ public virtual VisualOrientation Orientation [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager.UseMnemonic; + get => _buttonManager!.UseMnemonic; set { - if (_buttonManager.UseMnemonic != value) + if (_buttonManager!.UseMnemonic != value) { _buttonManager.UseMnemonic = value; PerformNeedPaint(true); @@ -295,53 +279,38 @@ public HeaderStyle HeaderStyle switch (_style) { case HeaderStyle.Primary: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetPrimary, PaletteMetricPadding.HeaderButtonPaddingPrimary); break; case HeaderStyle.Secondary: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetSecondary, - PaletteMetricPadding.HeaderButtonPaddingSecondary); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetSecondary, PaletteMetricPadding.HeaderButtonPaddingSecondary); break; case HeaderStyle.DockActive: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetDockActive, - PaletteMetricPadding.HeaderButtonPaddingDockActive); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetDockActive, PaletteMetricPadding.HeaderButtonPaddingDockActive); break; case HeaderStyle.DockInactive: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetDockInactive, - PaletteMetricPadding.HeaderButtonPaddingDockInactive); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetDockInactive, PaletteMetricPadding.HeaderButtonPaddingDockInactive); break; case HeaderStyle.Form: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetForm, - PaletteMetricPadding.HeaderButtonPaddingForm); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetForm, PaletteMetricPadding.HeaderButtonPaddingForm); break; case HeaderStyle.Calendar: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetCalendar, - PaletteMetricPadding.HeaderButtonPaddingCalendar); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetCalendar, PaletteMetricPadding.HeaderButtonPaddingCalendar); break; case HeaderStyle.Custom1: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetCustom1, - PaletteMetricPadding.HeaderButtonPaddingCustom1); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetCustom1, PaletteMetricPadding.HeaderButtonPaddingCustom1); break; case HeaderStyle.Custom2: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetCustom2, - PaletteMetricPadding.HeaderButtonPaddingCustom2); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetCustom2, PaletteMetricPadding.HeaderButtonPaddingCustom2); break; case HeaderStyle.Custom3: - _buttonManager.SetDockerMetrics(_drawDocker, StateCommon, - PaletteMetricInt.HeaderButtonEdgeInsetCustom3, - PaletteMetricPadding.HeaderButtonPaddingCustom3); + _buttonManager?.SetDockerMetrics(_drawDocker, StateCommon, PaletteMetricInt.HeaderButtonEdgeInsetCustom3, PaletteMetricPadding.HeaderButtonPaddingCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(_style.ToString()); break; } @@ -433,9 +402,9 @@ public bool DesignerGetHitTest(Point pt) /// Mouse location. [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public Component DesignerComponentFromPoint(Point pt) => + public Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision /// @@ -463,7 +432,7 @@ protected override bool ProcessMnemonic(char charCode) if (UseMnemonic && CanProcessMnemonic()) { // Pass request onto the button spec manager - if (_buttonManager.ProcessMnemonic(charCode)) + if (_buttonManager!.ProcessMnemonic(charCode)) { return true; } @@ -483,19 +452,19 @@ protected override void OnEnabledChanged(EventArgs e) if (Enabled) { _drawDocker.SetPalettes(StateNormal.Back, StateNormal.Border); - _drawContent.SetPalette(StateNormal.Content); + _drawContent?.SetPalette(StateNormal.Content); } else { _drawDocker.SetPalettes(StateDisabled.Back, StateDisabled.Border); - _drawContent.SetPalette(StateDisabled.Content); + _drawContent?.SetPalette(StateDisabled.Content); } _drawDocker.Enabled = Enabled; - _drawContent.Enabled = Enabled; + _drawContent!.Enabled = Enabled; // Update state to reflect change in enabled state - _buttonManager.RefreshButtons(); + _buttonManager?.RefreshButtons(); // Change in enabled state requires a layout and repaint PerformNeedPaint(true); @@ -514,10 +483,10 @@ protected override void OnEnabledChanged(EventArgs e) /// /// Source of notification. /// An EventArgs containing event data. - protected override void OnButtonSpecChanged(object sender, EventArgs e) + protected override void OnButtonSpecChanged(object? sender, EventArgs e) { // Recreate all the button specs with new values - _buttonManager.RecreateButtons(); + _buttonManager?.RecreateButtons(); // Let base class perform standard processing base.OnButtonSpecChanged(sender, e); @@ -525,14 +494,14 @@ protected override void OnButtonSpecChanged(object sender, EventArgs e) #endregion #region Implementation - private void OnHeaderTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnHeaderTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed) { // Do not show tooltips when the form we are in does not have focus - Form topForm = FindForm(); + Form? topForm = FindForm(); if (topForm is { ContainsFocus: false }) { return; @@ -547,7 +516,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) var shadow = true; // Find the button spec associated with the tooltip request - ButtonSpec buttonSpec = _buttonManager.ButtonSpecFromView(e.Target); + ButtonSpec? buttonSpec = _buttonManager?.ButtonSpecFromView(e.Target); // If the tooltip is for a button spec if (buttonSpec != null) @@ -587,34 +556,26 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) CommonHelper.ContentStyleFromLabelStyle(toolTipStyle), shadow); - _visualPopupToolTip.Disposed += OnVisualPopupToolTipDisposed!; - _visualPopupToolTip.ShowRelativeTo(e.Target, e.ControlMousePosition); + _visualPopupToolTip.Disposed += OnVisualPopupToolTipDisposed; + _visualPopupToolTip?.ShowRelativeTo(e.Target, e.ControlMousePosition); } } } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; - popupToolTip.Disposed -= OnVisualPopupToolTipDisposed!; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); + popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeaderGroup.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeaderGroup.cs index 660fe465c..d9d670957 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -67,10 +67,6 @@ public HeaderGroupButtonSpecCollection(KryptonHeaderGroup owner) private bool _collapsed; private readonly bool _ignoreLayout; private bool _layingOut; - private float _cornerRoundingRadius; - private float _headerPrimaryCornerRoundingRadius; - private float _headerSecondaryCornerRoundingRadius; - #endregion #region Events @@ -119,7 +115,6 @@ public KryptonHeaderGroup() // Create the internal panel used for containing content Panel = new KryptonGroupPanel(this, StateCommon, StateDisabled, StateNormal, OnGroupPanelPaint!) { - // Make sure the panel back style always mimics our back style PanelBackStyle = PaletteBackStyle.ControlClient }; @@ -150,7 +145,6 @@ public KryptonHeaderGroup() _drawDocker = new ViewDrawDocker(StateNormal.Back, StateNormal.Border, StateNormal, PaletteMetricBool.HeaderGroupOverlay) { - // Layout child view on top of the border space IgnoreBorderSpace = true, @@ -171,10 +165,10 @@ public KryptonHeaderGroup() // Create button specification collection manager _buttonManager = new ButtonSpecManagerDraw(this, Redirector, ButtonSpecs, null, - new[] { _drawHeading1, _drawHeading2 }, - new IPaletteMetric[] { StateCommon.HeaderPrimary, StateCommon.HeaderSecondary }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetPrimary, PaletteMetricInt.HeaderButtonEdgeInsetSecondary }, - new[] { PaletteMetricPadding.HeaderButtonPaddingPrimary, PaletteMetricPadding.HeaderButtonPaddingSecondary }, + [_drawHeading1, _drawHeading2], + [StateCommon.HeaderPrimary, StateCommon.HeaderSecondary], + [PaletteMetricInt.HeaderButtonEdgeInsetPrimary, PaletteMetricInt.HeaderButtonEdgeInsetSecondary], + [PaletteMetricPadding.HeaderButtonPaddingPrimary, PaletteMetricPadding.HeaderButtonPaddingSecondary], CreateToolStripRenderer, NeedPaintDelegate); @@ -201,12 +195,6 @@ public KryptonHeaderGroup() ((KryptonReadOnlyControls)Controls).AddInternal(Panel); _ignoreLayout = false; - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - _headerPrimaryCornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - _headerSecondaryCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; } /// @@ -244,43 +232,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - - /// Gets or sets the header primary corner rounding radius. - /// The header primary corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the header primary corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float HeaderPrimaryCornerRoundingRadius - { - get => _headerPrimaryCornerRoundingRadius; - - set => SetHeaderPrimaryCornerRoundingRadius(value); - } - - /// Gets or sets the header secondary corner rounding radius. - /// The header secondary corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float HeaderSecondaryCornerRoundingRadius - { - get => _headerSecondaryCornerRoundingRadius; - - set => SetHeaderSecondaryCornerRoundingRadius(value); - } - /// /// Gets and sets the name of the control. /// @@ -401,7 +352,7 @@ public bool UseMnemonic [Category(@"Appearance")] [Description(@"The internal panel that contains group content.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public KryptonGroupPanel? Panel { get; } + public KryptonGroupPanel Panel { get; } /// /// Gets or sets a value indicating if collapsed mode is auto toggled by arrow button specs. @@ -849,7 +800,7 @@ public void DesignerMouseLeave() => /// protected void ForceControlLayout() { - // Usually the layout will not occur if currently initializing but + // Usually the layout will not occur if currently initializing, but // we need to force the layout processing because otherwise the size // of the panel controls will not have been calculated when controls // are added to the panels. That would then cause problems with @@ -925,17 +876,14 @@ protected override void OnLayout(LayoutEventArgs levent) // Only use layout logic if control is fully initialized or if being forced // to allow a relayout or if in design mode. - if (Panel != null) + if (IsInitialized || _forcedLayout || DesignMode ) { - if (IsInitialized || _forcedLayout || DesignMode ) - { - Rectangle fillRect = _layoutFill.FillRect; + Rectangle fillRect = _layoutFill.FillRect; - Panel.SetBounds(fillRect.X, - fillRect.Y, - fillRect.Width, - fillRect.Height); - } + Panel.SetBounds(fillRect.X, + fillRect.Y, + fillRect.Width, + fillRect.Height); } } @@ -1079,7 +1027,7 @@ protected override void WndProc(ref Message m) // Just in case the WM_WINDOWPOSCHANGED does not occur we can // ensure the obscurer is removed using this async delegate call - BeginInvoke(_removeObscurer); + BeginInvoke(_removeObscurer!); break; } case PI.WM_.WINDOWPOSCHANGED: @@ -1096,7 +1044,7 @@ protected override void WndProc(ref Message m) /// /// Source of notification. /// An EventArgs containing event data. - protected override void OnButtonSpecChanged(object sender, EventArgs e) + protected override void OnButtonSpecChanged(object? sender, EventArgs e) { // Recreate all the button specs with new values _buttonManager.RecreateButtons(); @@ -1107,11 +1055,11 @@ protected override void OnButtonSpecChanged(object sender, EventArgs e) #endregion #region Implementation - private void OnRemoveObscurer(object sender, EventArgs e) => _obscurer?.Uncover(); + private void OnRemoveObscurer(object? sender, EventArgs e) => _obscurer?.Uncover(); - private void OnHeaderGroupTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnHeaderGroupTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed) { @@ -1179,32 +1127,29 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } // Remove any currently showing tooltip - private void OnCancelToolTip(object sender, EventArgs e) => _visualPopupToolTip?.Dispose(); + private void OnCancelToolTip(object? sender, EventArgs e) => _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; - // Not showing a popup page any more + // Not showing a popup page anymore _visualPopupToolTip = null; } // Monitor the button spec being clicked - private void OnButtonSpecInserted(object sender, ButtonSpecEventArgs e) => e.ButtonSpec.Click += OnButtonSpecClicked; + private void OnButtonSpecInserted(object? sender, ButtonSpecEventArgs e) => e.ButtonSpec.Click += OnButtonSpecClicked; // Unhook from monitoring the button spec - private void OnButtonSpecRemoved(object sender, ButtonSpecEventArgs e) => e.ButtonSpec.Click -= OnButtonSpecClicked; + private void OnButtonSpecRemoved(object? sender, ButtonSpecEventArgs e) => e.ButtonSpec.Click -= OnButtonSpecClicked; - private void OnButtonSpecClicked(object sender, EventArgs e) + private void OnButtonSpecClicked(object? sender, EventArgs e) { // Do we need to automatically switch collapsed modes? - if (AutoCollapseArrow) + if (AutoCollapseArrow && sender is ButtonSpecHeaderGroup buttonSpec) { - // Cast to correct type - var buttonSpec = (ButtonSpecHeaderGroup)sender; - // Action depends on the arrow switch (buttonSpec.Type) { @@ -1322,8 +1267,9 @@ private void SetHeaderStyle(ViewDrawDocker drawDocker, PaletteMetricPadding.HeaderButtonPaddingCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } } @@ -1353,8 +1299,9 @@ private void ReapplyVisible() secondaryVisible = true; break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(CollapseTarget.ToString()); break; } } @@ -1362,28 +1309,6 @@ private void ReapplyVisible() _drawHeading1.Visible = primaryVisible; _drawHeading2.Visible = secondaryVisible; } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void SetHeaderPrimaryCornerRoundingRadius(float? radius) - { - _headerPrimaryCornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _headerPrimaryCornerRoundingRadius; - } - - private void SetHeaderSecondaryCornerRoundingRadius(float? radius) - { - _headerSecondaryCornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _headerSecondaryCornerRoundingRadius; - } - #endregion #region Implementation Static diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHelpCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHelpCommand.cs index 5dc2e54e4..bc6530c75 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHelpCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonHelpCommand.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,7 +40,7 @@ public class KryptonHelpCommand : KryptonCommand public ButtonSpecAny? HelpButton { get => _helpButtonSpec ?? new ButtonSpecAny(); - set { _helpButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _helpButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /* /// @@ -66,7 +66,7 @@ public KryptonHelpCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ButtonSpecStyles.FormHelp; + Text = KryptonManager.Strings.ButtonSpecStyleStrings.FormHelp; } #endregion @@ -75,24 +75,24 @@ public KryptonHelpCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_helpButtonSpec != null) { _helpButtonSpec.ImageStates.ImageDisabled = disabledImage; - _helpButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _helpButtonSpec.ImageStates.ImageTracking = activeImage; _helpButtonSpec.ImageStates.ImageNormal = normalImage; - _helpButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _helpButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -110,7 +110,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -122,7 +122,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -134,7 +134,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -160,128 +160,60 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ControlBoxResources.Office2003HelpIconNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ControlBoxResources.Office2007HelpIconNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ControlBoxResources.Office2013HelpNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Microsoft365ControlBoxResources.Microsoft365HelpIconNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); - break; case PaletteMode.Custom: UpdateImage(Office2010ControlBoxResources.Office2010HelpIconNormal); break; @@ -313,125 +245,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(ProfessionalControlBoxResources.ProfessionalHelpIconNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ControlBoxResources.Office2007HelpIconHover); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ControlBoxResources.Office2013HelpActive); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Microsoft365ControlBoxResources.Microsoft365HelpIconHover); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ControlBoxResources.Office2010HelpIconHover); break; @@ -455,8 +321,9 @@ private void UpdateDisabledImage(PaletteMode mode) break; case PaletteMode.ProfessionalOffice2003: break; - case PaletteMode.Office2007DarkGray: - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: + // break; case PaletteMode.Office2007Blue: break; case PaletteMode.Office2007BlueDarkMode: @@ -475,8 +342,9 @@ private void UpdateDisabledImage(PaletteMode mode) break; case PaletteMode.Office2007BlackDarkMode: break; - case PaletteMode.Office2010DarkGray: - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: + // break; case PaletteMode.Office2010Blue: break; case PaletteMode.Office2010BlueDarkMode: @@ -495,12 +363,14 @@ private void UpdateDisabledImage(PaletteMode mode) break; case PaletteMode.Office2010BlackDarkMode: break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: break; - case PaletteMode.Microsoft365DarkGray: - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + // break; case PaletteMode.Microsoft365Black: break; case PaletteMode.Microsoft365BlackDarkMode: @@ -557,8 +427,9 @@ private void UpdateNormalImage(PaletteMode mode) break; case PaletteMode.ProfessionalOffice2003: break; - case PaletteMode.Office2007DarkGray: - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + // break; case PaletteMode.Office2007Blue: break; case PaletteMode.Office2007BlueDarkMode: @@ -577,8 +448,9 @@ private void UpdateNormalImage(PaletteMode mode) break; case PaletteMode.Office2007BlackDarkMode: break; - case PaletteMode.Office2010DarkGray: - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + // break; case PaletteMode.Office2010Blue: break; case PaletteMode.Office2010BlueDarkMode: @@ -597,12 +469,14 @@ private void UpdateNormalImage(PaletteMode mode) break; case PaletteMode.Office2010BlackDarkMode: break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: break; - case PaletteMode.Microsoft365DarkGray: - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + // break; case PaletteMode.Microsoft365Black: break; case PaletteMode.Microsoft365BlackDarkMode: @@ -659,8 +533,9 @@ private void UpdatePressedImage(PaletteMode mode) break; case PaletteMode.ProfessionalOffice2003: break; - case PaletteMode.Office2007DarkGray: - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + // break; case PaletteMode.Office2007Blue: break; case PaletteMode.Office2007BlueDarkMode: @@ -679,8 +554,9 @@ private void UpdatePressedImage(PaletteMode mode) break; case PaletteMode.Office2007BlackDarkMode: break; - case PaletteMode.Office2010DarkGray: - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + // break; case PaletteMode.Office2010Blue: break; case PaletteMode.Office2010BlueDarkMode: @@ -699,12 +575,14 @@ private void UpdatePressedImage(PaletteMode mode) break; case PaletteMode.Office2010BlackDarkMode: break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: break; - case PaletteMode.Microsoft365DarkGray: - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + // break; case PaletteMode.Microsoft365Black: break; case PaletteMode.Microsoft365BlackDarkMode: @@ -753,7 +631,7 @@ private void UpdatePressedImage(PaletteMode mode) /// mode - null private void UpdateImageStates(PaletteMode mode) { - if (_helpButtonSpec != null) + if (_helpButtonSpec is not null) { switch (mode) { @@ -765,125 +643,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, ProfessionalControlBoxResources.ProfessionalHelpIconDisabled, ProfessionalControlBoxResources.ProfessionalHelpIconNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ControlBoxResources.Office2007HelpIconHover, Office2007ControlBoxResources.Office2007HelpIconDisabled, Office2007ControlBoxResources.Office2007HelpIconNormal, Office2007ControlBoxResources.Office2007HelpIconPressed); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); - break; case PaletteMode.Microsoft365White: AddImageStates(Microsoft365ControlBoxResources.Microsoft365HelpIconHover, Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled, Microsoft365ControlBoxResources.Microsoft365HelpIconNormal, Microsoft365ControlBoxResources.Microsoft365HelpIconPressed); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ControlBoxResources.Office2010HelpIconHover, Office2010ControlBoxResources.Office2010HelpIconDisabled, Office2010ControlBoxResources.Office2010HelpIconNormal, Office2010ControlBoxResources.Office2010HelpIconPressed); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInformationBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInformationBox.cs new file mode 100644 index 000000000..b9e029509 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInformationBox.cs @@ -0,0 +1,20 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Provides a public facing API to the . + public class KryptonInformationBox + { + public KryptonInformationBox() + { + DebugTools.NotImplemented(GlobalStaticValues.DEFAULT_NOT_IMPLEMENTED_YET_MESSAGE); + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBox.cs index 86091cbe6..ee940870a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBox.cs @@ -1,4 +1,13 @@ -namespace Krypton.Toolkit +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit { /// /// @@ -12,58 +21,16 @@ public static class KryptonInputBox /// /// Displays an input box with provided prompt and caption and defaulted response string. /// - /// The text to display as an input prompt. - /// The text to display in the title bar of the input box. - /// Default response text.. - /// The cue text. - /// The colour of the cue. - /// The cue font. - /// Enables the password option. - /// Input string. - public static string Show(string prompt, - string caption = @"", - string defaultResponse = @"", - string cueText = @"", - Color cueColour = new Color(), // Color.Empty - Font? cueTypeface = null, - bool usePasswordOption = false) - => InternalShow(null, prompt, caption, defaultResponse, cueText, cueColour, cueTypeface, usePasswordOption); - - /// - /// DDisplays an input box in front of the specified object and with the provided prompt and caption and defaulted response string. - /// - /// Owner of the modal dialog box. - /// The text to display as an input prompt. - /// The text to display in the title bar of the input box. - /// Default response text.. - /// The cue text. - /// The colour of the cue. - /// The cue font. - /// Enables the password option. + /// The data to feed through to . /// Input string. - public static string Show(IWin32Window owner, string prompt, - string caption = @"", - string defaultResponse = @"", - string cueText = @"", - Color cueColour = new Color(), // Color.Empty - Font? cueTypeface = null, - bool usePasswordOption = false) - => InternalShow(owner, prompt, caption, defaultResponse, cueText, cueColour, cueTypeface, usePasswordOption); + public static string Show(KryptonInputBoxData inputBoxData) + => InternalShow(inputBoxData); #endregion #region Implementation - private static string InternalShow(IWin32Window? owner, - string prompt, - string caption, - string defaultResponse, - string cueText, - Color cueColour, - Font? cueTypeface, - bool usePasswordOption) => - KryptonInputBoxForm.InternalShow(owner, prompt, caption, defaultResponse, cueText, cueColour, - cueTypeface, usePasswordOption); + internal static string InternalShow(KryptonInputBoxData inputBoxData) => inputBoxData.UseRTLLayout == KryptonUseRTLLayout.Yes ? VisualInputBoxRtlAwareForm.InternalShow(inputBoxData) : VisualInputBoxForm.InternalShow(inputBoxData); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBoxManager.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBoxManager.cs index aaa2547fc..c421b631d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBoxManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonInputBoxManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,97 +17,39 @@ namespace Krypton.Toolkit public class KryptonInputBoxManager : Component { #region Variables - private bool _usePasswordOption; - private Color _cueColour; + private KryptonInputBoxData _inputBoxData; - private Font _cueTypeface; - - private string _caption, _cueText, _defaultResponse, _prompt; - - private IWin32Window? _owner; #endregion #region Properties - /// Gets or sets a value indicating whether [use password option]. - /// true if [use password option]; otherwise, false. - [DefaultValue(false), Description(@"Triggers the password feature of the response textbox.")] - public bool UsePasswordOption { get => _usePasswordOption; set => _usePasswordOption = value; } - - /// Gets or sets the cue colour. - /// The cue colour. - [DefaultValue(typeof(Color), "Color.Gray"), Description(@"Modifies the cue text colour.")] - public Color CueColour { get => _cueColour; set => _cueColour = value; } - - /// Gets or sets the cue typeface. - /// The cue typeface. - [DefaultValue(typeof(Font), "Segoe UI, 9pt"), Description(@"The cue text typeface.")] - public Font CueTypeface { get => _cueTypeface; set => _cueTypeface = value; } - /// Gets or sets the caption. - /// The caption. - [DefaultValue(""), Description(@"The krypton input box caption.")] - public string Caption { get => _caption; set => _caption = value; } + public KryptonInputBoxData InputBoxData { get => _inputBoxData; set => _inputBoxData = value; } - /// Gets or sets the cue text. - /// The cue text. - [DefaultValue(""), Description(@"The krypton input box cue text.")] - public string CueText { get => _cueText; set => _cueText = value; } - - /// Gets or sets the default response. - /// The default response. - [DefaultValue(""), Description(@"The krypton input box default response.")] - public string DefaultResponse { get => _defaultResponse; set => _defaultResponse = value; } - - /// Gets or sets the prompt. - /// The prompt. - [DefaultValue(""), Description(@"The krypton input box prompt text.")] - public string Prompt { get => _prompt; set => _prompt = value; } #endregion #region Constructor /// Initializes a new instance of the class. public KryptonInputBoxManager() { - _usePasswordOption = false; - - _cueColour = Color.Gray; - - _cueTypeface = new Font("Segoe UI", 9f); - - _caption = string.Empty; - - _cueText = string.Empty; - - _defaultResponse = string.Empty; - - _prompt = string.Empty; + _inputBoxData = new KryptonInputBoxData(); } #endregion #region Setters and Getters /// Sets the Owner to the value of value. /// The desired value of Owner. - public void SetOwner(IWin32Window value) => _owner = value; + public void SetOwner(IWin32Window value) => _inputBoxData.Owner = value; /// Returns the value of the Owner. /// The value of the Owner. - public IWin32Window? GetOwner() => _owner; + public IWin32Window? GetOwner() => _inputBoxData.Owner; #endregion #region Methods /// Displays the krypton input box. - public void DisplayKryptonInputBox() - { - if (GetOwner() != null) - { - KryptonInputBox.Show(_owner!, _prompt, _caption, _defaultResponse, _cueText, _cueColour, _cueTypeface, _usePasswordOption); - } - else - { - KryptonInputBox.Show(_prompt, _caption, _defaultResponse, _cueText, _cueColour, _cueTypeface, _usePasswordOption); - } - } + public void DisplayKryptonInputBox() => KryptonInputBox.Show(_inputBoxData); + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolBarManager.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolBarManager.cs index 4ad907cfd..5d29802c7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolBarManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolBarManager.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -40,8 +40,6 @@ public class KryptonIntegratedToolBarManager : Component private bool _flipButtonArray; - private bool _allowFormIntegration; - private ButtonSpecAny[] _integratedToolBarButtons; private PaletteButtonOrientation _integratedToolBarButtonOrientation; @@ -90,36 +88,6 @@ public class KryptonIntegratedToolBarManager : Component #region Public - /// Gets or sets a value indicating whether [allow form integration]. - /// true if [allow form integration]; otherwise, false. - /// @"The 'ParentForm' property cannot be null. - [Category(@"Visuals"), DefaultValue(false), Description(@"Add/remove the integrated tool bar buttons to the parent form. (Note: Existing buttonspecs will not be affected.)")] - public bool AllowFormIntegration - { - get => _allowFormIntegration; - - set - { - _allowFormIntegration = value; - - if (_parentForm != null) - { - if (value) - { - AttachIntegratedToolBarToParent(_parentForm); - } - else - { - DetachIntegratedToolBarFromParent(_parentForm); - } - } - else - { - throw new ArgumentNullException($@"The 'ParentForm' property cannot be null."); - } - } - } - /// Gets the integrated tool bar buttons. /// The integrated tool bar buttons. [Category(@"Visuals"), DefaultValue(null), Description(@"Contains all the integrated tool bar buttons.")] @@ -266,8 +234,6 @@ public void Reset() { _flipButtonArray = false; - _allowFormIntegration = false; - SetupToolBar(); _integratedToolBarButtonOrientation = PaletteButtonOrientation.FixedTop; @@ -412,7 +378,7 @@ public void ShowIntegrateToolBar(bool showIntegratedToolBar, KryptonForm parentF } catch (Exception e) { - ExceptionHandler.CaptureException(e, className: @"KryptonIntegratedToolBarManager.cs", methodSignature: @"IntegrateToolBarIntoParentForm(bool showIntegratedToolBar, KryptonForm parentForm)"); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } @@ -438,7 +404,7 @@ public void AttachIntegratedToolBarToParent(KryptonForm? parentForm) } catch (Exception e) { - ExceptionHandler.CaptureException(e, className: @"KryptonIntegratedToolBarManager.cs", methodSignature: @"AttachIntegratedToolBarToParent(KryptonForm parentForm)"); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } @@ -465,7 +431,7 @@ public void DetachIntegratedToolBarFromParent(KryptonForm? parentForm) } catch (Exception e) { - ExceptionHandler.CaptureException(e, className: @"KryptonIntegratedToolBarManager.cs", methodSignature: @"AttachIntegratedToolBarToParent(KryptonForm parentForm)"); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } @@ -523,7 +489,7 @@ public void UpdateButtonOrientation(PaletteButtonOrientation buttonOrientation) } catch (Exception e) { - ExceptionHandler.CaptureException(e); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } @@ -563,7 +529,7 @@ public void UpdateButtonAlignment(PaletteRelativeEdgeAlign buttonAlignment) } catch (Exception e) { - ExceptionHandler.CaptureException(e); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCopyCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCopyCommand.cs index b520cdb58..9904e65a0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCopyCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCopyCommand.cs @@ -2,1030 +2,635 @@ /* * * Copy BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - /// A created specifically for the button spec. - [Category(@"code")] - [ToolboxItem(false)] - //[ToolboxBitmap(typeof(KryptonHelpCommand), @"ToolboxBitmaps.KryptonHelp.bmp")] - [Description(@"For use with the 'Copy' ButtonSpec style.")] - [DesignerCategory(@"code")] - public class KryptonIntegratedToolbarCopyCommand : KryptonCommand - { - #region Instance Fields + /// A created specifically for the button spec. + [Category(@"code")] + [ToolboxItem(false)] + //[ToolboxBitmap(typeof(KryptonHelpCommand), @"ToolboxBitmaps.KryptonHelp.bmp")] + [Description(@"For use with the 'Copy' ButtonSpec style.")] + [DesignerCategory(@"code")] + public class KryptonIntegratedToolbarCopyCommand : KryptonCommand + { + #region Instance Fields - private ButtonSpecAny? _copyButtonSpec; + private ButtonSpecAny? _copyButtonSpec; - private ButtonImageStates? _imageStates; + private ButtonImageStates? _imageStates; - private Image? _activeImage; + private Image? _activeImage; - private Image? _disabledImage; + private Image? _disabledImage; - private Image? _normalImage; + private Image? _normalImage; - private Image? _pressedImage; + private Image? _pressedImage; - #endregion - #region Public + #endregion - /// Gets or sets the copy button. - /// The copy button. - [DefaultValue(null), Description(@"Access to the copy button spec.")] - [AllowNull] - public ButtonSpecAny? ToolBarCopyButton - { - get => _copyButtonSpec ?? new ButtonSpecAny(); - set { _copyButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } - } + #region Public - /// Gets the active image. - /// The active image. - public Image? ActiveImage { get => _activeImage; private set => _activeImage = value; } - - /// Gets the disabled image. - /// The disabled image. - public Image? DisabledImage { get => _disabledImage; private set => _disabledImage = value; } - - /// Gets the normal image. - /// The normal image. - public Image? NormalImage { get => _normalImage; private set => _normalImage = value; } - - /// Gets the pressed image. - /// The pressed image. - public Image? PressedImage { get => _pressedImage; private set => _pressedImage = value; } - - #endregion - - #region Identity - - /// Initializes a new instance of the class. - public KryptonIntegratedToolbarCopyCommand() - { - _imageStates = new ButtonImageStates(); - - Text = KryptonLanguageManager.ToolBarStrings.Copy; - } - - #endregion - - #region Implementation - - /// Updates the image. - /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; - - /// Adds the image states. - /// The active image. - /// The disabled image. - /// The normal image. - /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) - { - if (_copyButtonSpec != null) - { - _copyButtonSpec.ImageStates.ImageDisabled = disabledImage; - - _copyButtonSpec.ImageStates.ImageTracking = activeImage ?? null; - - _copyButtonSpec.ImageStates.ImageNormal = normalImage; - - _copyButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; - } - } - - /// Updates the active image. - /// The active image. - private void UpdateActiveImage(Image activeImage) - { - _activeImage = activeImage; - - if (_copyButtonSpec != null) - { - _copyButtonSpec.ImageStates.ImageTracking = _activeImage; - } - } - - /// Updates the disabled image. - /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) - { - _disabledImage = disabledImage; - - if (_copyButtonSpec != null) - { - _copyButtonSpec.ImageStates.ImageDisabled = disabledImage; - } - } - - /// Updates the normal image. - /// The normal image. - private void UpdateNormalImage(Image normalImage) - { - _normalImage = normalImage; - - if (_copyButtonSpec != null) - { - _copyButtonSpec.ImageStates.ImageNormal = normalImage; - } - } - - /// Updates the pressed image. - /// The pressed image. - private void UpdatePressedImage(Image pressedImage) - { - _pressedImage = pressedImage; - - if (_copyButtonSpec != null) - { - _copyButtonSpec.ImageStates.ImagePressed = pressedImage; - } - } - - /// Updates the image. - /// The mode. - /// mode - null - private void UpdateImage(PaletteMode mode) - { - - switch (mode) - { - case PaletteMode.Global: - break; - case PaletteMode.ProfessionalSystem: - UpdateImage(SystemToolbarImageResources.SystemToolbarCopyNormal); - break; - case PaletteMode.ProfessionalOffice2003: - UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlackDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlackDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: - case PaletteMode.Office2013White: - UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365White: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Custom: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - default: - throw new ArgumentOutOfRangeException(nameof(mode), mode, null); - } - - UpdateActiveImage(mode); - - UpdateDisabledImage(mode); - - UpdateNormalImage(mode); - - UpdatePressedImage(mode); - } - - /// Updates the active image. - /// The mode. - /// mode - null - private void UpdateActiveImage(PaletteMode mode) - { - switch (mode) - { - case PaletteMode.Global: - break; - case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyNormal); - break; - case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: - case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Custom: - break; - default: - throw new ArgumentOutOfRangeException(nameof(mode), mode, null); - } - } - - /// Updates the disabled image. - /// The mode. - /// mode - null - private void UpdateDisabledImage(PaletteMode mode) - { - switch (mode) - { - case PaletteMode.Global: - break; - case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyDisabled); - break; - case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyDisabled); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: - case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); - break; - case PaletteMode.Custom: - break; - default: - throw new ArgumentOutOfRangeException(nameof(mode), mode, null); - } - } - - /// Updates the normal image. - /// The mode. - /// mode - null - private void UpdateNormalImage(PaletteMode mode) - { - switch (mode) - { - case PaletteMode.Global: - break; - case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyNormal); - break; - case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: - case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Custom: - break; - default: - throw new ArgumentOutOfRangeException(nameof(mode), mode, null); - } - } - - /// Updates the pressed image. - /// The mode. - /// mode - null - private void UpdatePressedImage(PaletteMode mode) - { - switch (mode) - { - case PaletteMode.Global: - break; - case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyNormal); - break; - case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: - case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Custom: - break; - default: - throw new ArgumentOutOfRangeException(nameof(mode), mode, null); - } - } - - /// Updates the image states. - /// The mode. - /// mode - null - private void UpdateImageStates(PaletteMode mode) - { - if (_copyButtonSpec != null) - { - switch (mode) - { - case PaletteMode.Global: - break; - case PaletteMode.ProfessionalSystem: - AddImageStates(null, SystemToolbarImageResources.SystemToolbarCopyDisabled, SystemToolbarImageResources.SystemToolbarCopyNormal, null); - break; - case PaletteMode.ProfessionalOffice2003: - AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarCopyDisabled, Office2003ToolbarImageResources.Office2003ToolbarCopyNormal, null); - break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2007BlackDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); - break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2010BlackDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: - case PaletteMode.Office2013White: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.Microsoft365White: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.SparklePurpleLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); - break; - case PaletteMode.Custom: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); - break; - default: - throw new ArgumentOutOfRangeException(nameof(mode), mode, null); - } - } - } - - #endregion - } + /// Gets or sets the copy button. + /// The copy button. + [DefaultValue(null), Description(@"Access to the copy button spec.")] + [AllowNull] + public ButtonSpecAny? ToolBarCopyButton + { + get => _copyButtonSpec ?? new ButtonSpecAny(); + set { _copyButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } + } + + /// Gets the active image. + /// The active image. + public Image? ActiveImage { get => _activeImage; private set => _activeImage = value; } + + /// Gets the disabled image. + /// The disabled image. + public Image? DisabledImage { get => _disabledImage; private set => _disabledImage = value; } + + /// Gets the normal image. + /// The normal image. + public Image? NormalImage { get => _normalImage; private set => _normalImage = value; } + + /// Gets the pressed image. + /// The pressed image. + public Image? PressedImage { get => _pressedImage; private set => _pressedImage = value; } + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonIntegratedToolbarCopyCommand() + { + _imageStates = new ButtonImageStates(); + + Text = KryptonManager.Strings.ToolBarStrings.Copy; + } + + #endregion + + #region Implementation + + /// Updates the image. + /// The help image. + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; + + /// Adds the image states. + /// The active image. + /// The disabled image. + /// The normal image. + /// The pressed image. + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) + { + if (_copyButtonSpec != null) + { + _copyButtonSpec.ImageStates.ImageDisabled = disabledImage; + + _copyButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + + _copyButtonSpec.ImageStates.ImageNormal = normalImage; + + _copyButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + } + } + + /// Updates the active image. + /// The active image. + private void UpdateActiveImage(Image activeImage) + { + _activeImage = activeImage; + + if (_copyButtonSpec != null) + { + _copyButtonSpec.ImageStates.ImageTracking = _activeImage; + } + } + + /// Updates the disabled image. + /// The disabled image. + private void UpdateDisabledImage(Image? disabledImage) + { + _disabledImage = disabledImage; + + if (_copyButtonSpec != null) + { + _copyButtonSpec.ImageStates.ImageDisabled = disabledImage; + } + } + + /// Updates the normal image. + /// The normal image. + private void UpdateNormalImage(Image? normalImage) + { + _normalImage = normalImage; + + if (_copyButtonSpec != null) + { + _copyButtonSpec.ImageStates.ImageNormal = normalImage; + } + } + + /// Updates the pressed image. + /// The pressed image. + private void UpdatePressedImage(Image? pressedImage) + { + _pressedImage = pressedImage; + + if (_copyButtonSpec != null) + { + _copyButtonSpec.ImageStates.ImagePressed = pressedImage; + } + } + + /// Updates the image. + /// The mode. + /// mode - null + private void UpdateImage(PaletteMode mode) + { + + switch (mode) + { + case PaletteMode.Global: + break; + case PaletteMode.ProfessionalSystem: + UpdateImage(SystemToolbarImageResources.SystemToolbarCopyNormal); + break; + case PaletteMode.ProfessionalOffice2003: + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + case PaletteMode.Office2007Blue: + case PaletteMode.Office2007BlueDarkMode: + case PaletteMode.Office2007BlueLightMode: + case PaletteMode.Office2007Silver: + case PaletteMode.Office2007SilverDarkMode: + case PaletteMode.Office2007SilverLightMode: + case PaletteMode.Office2007White: + case PaletteMode.Office2007Black: + case PaletteMode.Office2007BlackDarkMode: + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + case PaletteMode.Office2010Blue: + case PaletteMode.Office2010BlueDarkMode: + case PaletteMode.Office2010BlueLightMode: + case PaletteMode.Office2010Silver: + case PaletteMode.Office2010SilverDarkMode: + case PaletteMode.Office2010SilverLightMode: + case PaletteMode.Office2010White: + case PaletteMode.Office2010Black: + case PaletteMode.Office2010BlackDarkMode: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: + case PaletteMode.Office2013White: + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + case PaletteMode.Microsoft365Black: + case PaletteMode.Microsoft365BlackDarkMode: + case PaletteMode.Microsoft365Blue: + case PaletteMode.Microsoft365BlueDarkMode: + case PaletteMode.Microsoft365BlueLightMode: + case PaletteMode.Microsoft365Silver: + case PaletteMode.Microsoft365SilverDarkMode: + case PaletteMode.Microsoft365SilverLightMode: + case PaletteMode.Microsoft365White: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); + break; + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + + UpdateActiveImage(mode); + + UpdateDisabledImage(mode); + + UpdateNormalImage(mode); + + UpdatePressedImage(mode); + } + + /// Updates the active image. + /// The mode. + /// mode - null + private void UpdateActiveImage(PaletteMode mode) + { + switch (mode) + { + case PaletteMode.Global: + break; + case PaletteMode.ProfessionalSystem: + UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyNormal); + break; + case PaletteMode.ProfessionalOffice2003: + UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + case PaletteMode.Office2007Blue: + case PaletteMode.Office2007BlueDarkMode: + case PaletteMode.Office2007BlueLightMode: + case PaletteMode.Office2007Silver: + case PaletteMode.Office2007SilverDarkMode: + case PaletteMode.Office2007SilverLightMode: + case PaletteMode.Office2007White: + case PaletteMode.Office2007Black: + case PaletteMode.Office2007BlackDarkMode: + UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + case PaletteMode.Office2010Blue: + case PaletteMode.Office2010BlueDarkMode: + case PaletteMode.Office2010BlueLightMode: + case PaletteMode.Office2010Silver: + case PaletteMode.Office2010SilverDarkMode: + case PaletteMode.Office2010SilverLightMode: + case PaletteMode.Office2010White: + case PaletteMode.Office2010Black: + case PaletteMode.Office2010BlackDarkMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: + case PaletteMode.Office2013White: + UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + case PaletteMode.Microsoft365Black: + case PaletteMode.Microsoft365BlackDarkMode: + case PaletteMode.Microsoft365Blue: + case PaletteMode.Microsoft365BlueDarkMode: + case PaletteMode.Microsoft365BlueLightMode: + case PaletteMode.Microsoft365Silver: + case PaletteMode.Microsoft365SilverDarkMode: + case PaletteMode.Microsoft365SilverLightMode: + case PaletteMode.Microsoft365White: + UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); + break; + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + case PaletteMode.Custom: + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + } + + /// Updates the disabled image. + /// The mode. + /// mode - null + private void UpdateDisabledImage(PaletteMode mode) + { + switch (mode) + { + case PaletteMode.Global: + break; + case PaletteMode.ProfessionalSystem: + UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyDisabled); + break; + case PaletteMode.ProfessionalOffice2003: + UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyDisabled); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + case PaletteMode.Office2007Blue: + case PaletteMode.Office2007BlueDarkMode: + case PaletteMode.Office2007BlueLightMode: + case PaletteMode.Office2007Silver: + case PaletteMode.Office2007SilverDarkMode: + case PaletteMode.Office2007SilverLightMode: + case PaletteMode.Office2007White: + case PaletteMode.Office2007Black: + case PaletteMode.Office2007BlackDarkMode: + UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + case PaletteMode.Office2010Blue: + case PaletteMode.Office2010BlueDarkMode: + case PaletteMode.Office2010BlueLightMode: + case PaletteMode.Office2010Silver: + case PaletteMode.Office2010SilverDarkMode: + case PaletteMode.Office2010SilverLightMode: + case PaletteMode.Office2010White: + case PaletteMode.Office2010Black: + case PaletteMode.Office2010BlackDarkMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: + case PaletteMode.Office2013White: + UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyDisabled); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + case PaletteMode.Microsoft365Black: + case PaletteMode.Microsoft365BlackDarkMode: + case PaletteMode.Microsoft365Blue: + case PaletteMode.Microsoft365BlueDarkMode: + case PaletteMode.Microsoft365BlueLightMode: + case PaletteMode.Microsoft365Silver: + case PaletteMode.Microsoft365SilverDarkMode: + case PaletteMode.Microsoft365SilverLightMode: + case PaletteMode.Microsoft365White: + UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled); + break; + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled); + break; + case PaletteMode.Custom: + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + } + + /// Updates the normal image. + /// The mode. + /// mode - null + private void UpdateNormalImage(PaletteMode mode) + { + switch (mode) + { + case PaletteMode.Global: + break; + case PaletteMode.ProfessionalSystem: + UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyNormal); + break; + case PaletteMode.ProfessionalOffice2003: + UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + case PaletteMode.Office2007Blue: + case PaletteMode.Office2007BlueDarkMode: + case PaletteMode.Office2007BlueLightMode: + case PaletteMode.Office2007Silver: + case PaletteMode.Office2007SilverDarkMode: + case PaletteMode.Office2007SilverLightMode: + case PaletteMode.Office2007White: + case PaletteMode.Office2007Black: + case PaletteMode.Office2007BlackDarkMode: + UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + case PaletteMode.Office2010Blue: + case PaletteMode.Office2010BlueDarkMode: + case PaletteMode.Office2010BlueLightMode: + case PaletteMode.Office2010Silver: + case PaletteMode.Office2010SilverDarkMode: + case PaletteMode.Office2010SilverLightMode: + case PaletteMode.Office2010White: + case PaletteMode.Office2010Black: + case PaletteMode.Office2010BlackDarkMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: + case PaletteMode.Office2013White: + UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + case PaletteMode.Microsoft365Black: + case PaletteMode.Microsoft365BlackDarkMode: + case PaletteMode.Microsoft365Blue: + case PaletteMode.Microsoft365BlueDarkMode: + case PaletteMode.Microsoft365BlueLightMode: + case PaletteMode.Microsoft365Silver: + case PaletteMode.Microsoft365SilverDarkMode: + case PaletteMode.Microsoft365SilverLightMode: + case PaletteMode.Microsoft365White: + UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); + break; + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + case PaletteMode.Custom: + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + } + + /// Updates the pressed image. + /// The mode. + /// mode - null + private void UpdatePressedImage(PaletteMode mode) + { + switch (mode) + { + case PaletteMode.Global: + break; + case PaletteMode.ProfessionalSystem: + UpdateActiveImage(SystemToolbarImageResources.SystemToolbarCopyNormal); + break; + case PaletteMode.ProfessionalOffice2003: + UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + case PaletteMode.Office2007Blue: + case PaletteMode.Office2007BlueDarkMode: + case PaletteMode.Office2007BlueLightMode: + case PaletteMode.Office2007Silver: + case PaletteMode.Office2007SilverDarkMode: + case PaletteMode.Office2007SilverLightMode: + case PaletteMode.Office2007White: + case PaletteMode.Office2007Black: + case PaletteMode.Office2007BlackDarkMode: + UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + case PaletteMode.Office2010Blue: + case PaletteMode.Office2010BlueDarkMode: + case PaletteMode.Office2010BlueLightMode: + case PaletteMode.Office2010Silver: + case PaletteMode.Office2010SilverDarkMode: + case PaletteMode.Office2010SilverLightMode: + case PaletteMode.Office2010White: + case PaletteMode.Office2010Black: + case PaletteMode.Office2010BlackDarkMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: + case PaletteMode.Office2013White: + UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + case PaletteMode.Microsoft365Black: + case PaletteMode.Microsoft365BlackDarkMode: + case PaletteMode.Microsoft365Blue: + case PaletteMode.Microsoft365BlueDarkMode: + case PaletteMode.Microsoft365BlueLightMode: + case PaletteMode.Microsoft365Silver: + case PaletteMode.Microsoft365SilverDarkMode: + case PaletteMode.Microsoft365SilverLightMode: + case PaletteMode.Microsoft365White: + UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); + break; + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + case PaletteMode.Custom: + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + } + + /// Updates the image states. + /// The mode. + /// mode - null + private void UpdateImageStates(PaletteMode mode) + { + if (_copyButtonSpec != null) + { + switch (mode) + { + case PaletteMode.Global: + break; + case PaletteMode.ProfessionalSystem: + AddImageStates(null, SystemToolbarImageResources.SystemToolbarCopyDisabled, SystemToolbarImageResources.SystemToolbarCopyNormal, null); + break; + case PaletteMode.ProfessionalOffice2003: + AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarCopyDisabled, Office2003ToolbarImageResources.Office2003ToolbarCopyNormal, null); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: + case PaletteMode.Office2007Blue: + case PaletteMode.Office2007BlueDarkMode: + case PaletteMode.Office2007BlueLightMode: + case PaletteMode.Office2007Silver: + case PaletteMode.Office2007SilverDarkMode: + case PaletteMode.Office2007SilverLightMode: + case PaletteMode.Office2007White: + case PaletteMode.Office2007Black: + case PaletteMode.Office2007BlackDarkMode: + AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyDisabled, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, Office2007ToolbarImageResources.Office2007ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: + case PaletteMode.Office2010Blue: + case PaletteMode.Office2010BlueDarkMode: + case PaletteMode.Office2010BlueLightMode: + case PaletteMode.Office2010Silver: + case PaletteMode.Office2010SilverDarkMode: + case PaletteMode.Office2010SilverLightMode: + case PaletteMode.Office2010White: + case PaletteMode.Office2010Black: + case PaletteMode.Office2010BlackDarkMode: + AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: + case PaletteMode.Office2013White: + AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); + break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: + case PaletteMode.Microsoft365Black: + case PaletteMode.Microsoft365BlackDarkMode: + case PaletteMode.Microsoft365Blue: + case PaletteMode.Microsoft365BlueDarkMode: + case PaletteMode.Microsoft365BlueLightMode: + case PaletteMode.Microsoft365Silver: + case PaletteMode.Microsoft365SilverDarkMode: + case PaletteMode.Microsoft365SilverLightMode: + case PaletteMode.Microsoft365White: + AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); + break; + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyDisabled, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, Office2010ToolbarImageResources.Office2010ToolbarCopyNormal); + break; + case PaletteMode.Custom: + AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, Office2019ToolbarImageResources.Office2019ToolbarCopyNormal); + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + } + } + + #endregion + } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCutCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCutCommand.cs index af086a555..4aed89238 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCutCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarCutCommand.cs @@ -2,7 +2,7 @@ /* * * Cut BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarCutCommand : KryptonCommand public ButtonSpecAny? ToolBarCutButton { get => _cutButtonSpec ?? new ButtonSpecAny(); - set { _cutButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _cutButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarCutCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.Cut; + Text = KryptonManager.Strings.ToolBarStrings.Cut; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarCutCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_cutButtonSpec != null) { _cutButtonSpec.ImageStates.ImageDisabled = disabledImage; - _cutButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _cutButtonSpec.ImageStates.ImageTracking = activeImage; _cutButtonSpec.ImageStates.ImageNormal = normalImage; - _cutButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _cutButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,125 +164,59 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarCutNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarCutNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; @@ -317,125 +251,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCutNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCutNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; @@ -461,125 +329,59 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCutDisabled); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutDisabled); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCutDisabled); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutDisabled); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutDisabled); break; @@ -605,125 +407,59 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCutNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCutNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; @@ -749,125 +485,59 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarCutNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarCutNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarCutNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarCutNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; @@ -895,125 +565,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarCutDisabled, Office2003ToolbarImageResources.Office2003ToolbarCutNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutDisabled, Office2007ToolbarImageResources.Office2007ToolbarCutNormal, Office2007ToolbarImageResources.Office2007ToolbarCutNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutDisabled, Office2019ToolbarImageResources.Office2019ToolbarCutNormal, Office2019ToolbarImageResources.Office2019ToolbarCutNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutDisabled, Office2010ToolbarImageResources.Office2010ToolbarCutNormal, Office2010ToolbarImageResources.Office2010ToolbarCutNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarNewCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarNewCommand.cs index 9c565ab63..5784b0305 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarNewCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarNewCommand.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarNewCommand : KryptonCommand public ButtonSpecAny? ToolBarNewButton { get => _newButtonSpec ?? new ButtonSpecAny(); - set { _newButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _newButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarNewCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.New; + Text = KryptonManager.Strings.ToolBarStrings.New; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarNewCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_newButtonSpec != null) { _newButtonSpec.ImageStates.ImageDisabled = disabledImage; - _newButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _newButtonSpec.ImageStates.ImageTracking = activeImage; _newButtonSpec.ImageStates.ImageNormal = normalImage; - _newButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _newButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,125 +164,59 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarNewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarNewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; @@ -317,125 +251,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarNewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarNewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; @@ -461,125 +329,59 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarNewDisabled); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewDisabled); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarNewDisabled); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewDisabled); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewDisabled); break; @@ -605,125 +407,59 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarNewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarNewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; @@ -749,125 +485,59 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarNewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarNewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarNewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarNewNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; @@ -895,125 +565,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarNewDisabled, Office2003ToolbarImageResources.Office2003ToolbarNewNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewDisabled, Office2007ToolbarImageResources.Office2007ToolbarNewNormal, Office2007ToolbarImageResources.Office2007ToolbarNewNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewDisabled, Office2019ToolbarImageResources.Office2019ToolbarNewNormal, Office2019ToolbarImageResources.Office2019ToolbarNewNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewDisabled, Office2010ToolbarImageResources.Office2010ToolbarNewNormal, Office2010ToolbarImageResources.Office2010ToolbarNewNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarOpenCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarOpenCommand.cs index 23d5add71..61a93650f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarOpenCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarOpenCommand.cs @@ -2,7 +2,7 @@ /* * * Open BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarOpenCommand : KryptonCommand public ButtonSpecAny? ToolBarOpenButton { get => _openButtonSpec ?? new ButtonSpecAny(); - set { _openButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _openButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarOpenCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.Open; + Text = KryptonManager.Strings.ToolBarStrings.Open; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarOpenCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_openButtonSpec != null) { _openButtonSpec.ImageStates.ImageDisabled = disabledImage; - _openButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _openButtonSpec.ImageStates.ImageTracking = activeImage; _openButtonSpec.ImageStates.ImageNormal = normalImage; - _openButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _openButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,125 +164,59 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarOpenNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarOpenNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; @@ -317,125 +251,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarOpenNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarOpenNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; @@ -461,125 +329,59 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarOpenDisabled); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarOpenDisabled); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled); break; @@ -605,125 +407,59 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarOpenNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarOpenNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; @@ -749,125 +485,59 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarOpenNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarOpenNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; @@ -895,125 +565,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarOpenDisabled, Office2003ToolbarImageResources.Office2003ToolbarOpenNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenDisabled, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, Office2007ToolbarImageResources.Office2007ToolbarOpenNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, Office2019ToolbarImageResources.Office2019ToolbarOpenNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenDisabled, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, Office2010ToolbarImageResources.Office2010ToolbarOpenNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPageSetupCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPageSetupCommand.cs index ba75034a8..d4cc7c467 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPageSetupCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPageSetupCommand.cs @@ -2,7 +2,7 @@ /* * * PageSetup BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarPageSetupCommand : KryptonCommand public ButtonSpecAny? ToolBarPageSetupButton { get => _pageSetupButtonSpec ?? new ButtonSpecAny(); - set { _pageSetupButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _pageSetupButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarPageSetupCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.PageSetup; + Text = KryptonManager.Strings.ToolBarStrings.PageSetup; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarPageSetupCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_pageSetupButtonSpec != null) { _pageSetupButtonSpec.ImageStates.ImageDisabled = disabledImage; - _pageSetupButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _pageSetupButtonSpec.ImageStates.ImageTracking = activeImage; _pageSetupButtonSpec.ImageStates.ImageNormal = normalImage; - _pageSetupButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _pageSetupButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,125 +164,59 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPageSetupNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPageSetupNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; @@ -317,125 +251,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPageSetupNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPageSetupNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; @@ -461,125 +329,59 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPageSetupDisabled); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPageSetupDisabled); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled); break; @@ -605,125 +407,59 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPageSetupNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPageSetupNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; @@ -749,125 +485,59 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPageSetupNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPageSetupNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; @@ -895,125 +565,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarPageSetupDisabled, Office2003ToolbarImageResources.Office2003ToolbarPageSetupNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupDisabled, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupDisabled, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPasteCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPasteCommand.cs index 2c2357558..2ddb019ce 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPasteCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPasteCommand.cs @@ -2,7 +2,7 @@ /* * * Paste BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarPasteCommand : KryptonCommand public ButtonSpecAny? ToolBarPasteButton { get => _pasteButtonSpec ?? new ButtonSpecAny(); - set { _pasteButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _pasteButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarPasteCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.Paste; + Text = KryptonManager.Strings.ToolBarStrings.Paste; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarPasteCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_pasteButtonSpec != null) { _pasteButtonSpec.ImageStates.ImageDisabled = disabledImage; - _pasteButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _pasteButtonSpec.ImageStates.ImageTracking = activeImage; _pasteButtonSpec.ImageStates.ImageNormal = normalImage; - _pasteButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _pasteButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,131 +164,61 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlackDarkMode: + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); break; - case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.Custom: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } @@ -312,134 +242,65 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarPasteNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarPasteNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -456,134 +317,65 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarPasteDisabled); + UpdateImage(SystemToolbarImageResources.SystemToolbarPasteDisabled); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPasteDisabled); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPasteDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPasteDisabled); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPasteDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -600,134 +392,65 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarPasteNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarPasteNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -744,134 +467,65 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarPasteNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarPasteNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPasteNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -895,125 +549,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarPasteDisabled, Office2003ToolbarImageResources.Office2003ToolbarPasteNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteDisabled, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, Office2007ToolbarImageResources.Office2007ToolbarPasteNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, Office2019ToolbarImageResources.Office2019ToolbarPasteNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteDisabled, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, Office2010ToolbarImageResources.Office2010ToolbarPasteNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintCommand.cs index 02e86cab6..dab01b083 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintCommand.cs @@ -2,7 +2,7 @@ /* * * Print BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -48,7 +48,7 @@ public class KryptonIntegratedToolbarPrintCommand : KryptonCommand public ButtonSpecAny? ToolBarPrintButton { get => _printButtonSpec ?? new ButtonSpecAny(); - set { _printButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); UpdateButtonSpec(); } + set { _printButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); UpdateButtonSpec(); } } /// Gets the active image. @@ -80,7 +80,7 @@ public KryptonIntegratedToolbarPrintCommand() _printButtonSpec = null; - Text = KryptonLanguageManager.ToolBarStrings.Print; + Text = KryptonManager.Strings.ToolBarStrings.Print; } #endregion @@ -89,24 +89,24 @@ public KryptonIntegratedToolbarPrintCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_printButtonSpec != null) { _printButtonSpec.ImageStates.ImageDisabled = disabledImage; - _printButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _printButtonSpec.ImageStates.ImageTracking = activeImage; _printButtonSpec.ImageStates.ImageNormal = normalImage; - _printButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _printButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -124,7 +124,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -136,7 +136,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -148,7 +148,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -174,125 +174,59 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPrintNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; @@ -327,125 +261,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; @@ -471,125 +339,59 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintDisabled); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintDisabled); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled); break; @@ -615,125 +417,59 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; @@ -759,125 +495,59 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; @@ -905,125 +575,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarPrintDisabled, Office2003ToolbarImageResources.Office2003ToolbarPrintNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintPreviewCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintPreviewCommand.cs index 2c8fe98cf..0f1f690e5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintPreviewCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarPrintPreviewCommand.cs @@ -2,7 +2,7 @@ /* * * PrintPreview BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarPrintPreviewCommand : KryptonCommand public ButtonSpecAny? ToolBarPrintPreviewButton { get => _printPreviewButtonSpec ?? new ButtonSpecAny(); - set { _printPreviewButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _printPreviewButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarPrintPreviewCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.PrintPreview; + Text = KryptonManager.Strings.ToolBarStrings.PrintPreview; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarPrintPreviewCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_printPreviewButtonSpec != null) { _printPreviewButtonSpec.ImageStates.ImageDisabled = disabledImage; - _printPreviewButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _printPreviewButtonSpec.ImageStates.ImageTracking = activeImage; _printPreviewButtonSpec.ImageStates.ImageNormal = normalImage; - _printPreviewButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _printPreviewButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,125 +164,59 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarPrintPreviewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; @@ -317,125 +251,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintPreviewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; @@ -461,125 +329,59 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewDisabled); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintPreviewDisabled); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled); break; @@ -605,125 +407,59 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintPreviewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; @@ -749,125 +485,59 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarPrintPreviewNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; @@ -895,125 +565,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewDisabled, Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewDisabled, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewDisabled, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarQuickPrintCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarQuickPrintCommand.cs index 835ac1211..7420122c9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarQuickPrintCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarQuickPrintCommand.cs @@ -2,7 +2,7 @@ /* * * QuickPrint BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarQuickPrintCommand : KryptonCommand public ButtonSpecAny? ToolBarQuickPrintButton { get => _quickPrintButtonSpec ?? new ButtonSpecAny(); - set { _quickPrintButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _quickPrintButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarQuickPrintCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.QuickPrint; + Text = KryptonManager.Strings.ToolBarStrings.QuickPrint; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarQuickPrintCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_quickPrintButtonSpec != null) { _quickPrintButtonSpec.ImageStates.ImageDisabled = disabledImage; - _quickPrintButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _quickPrintButtonSpec.ImageStates.ImageTracking = activeImage; _quickPrintButtonSpec.ImageStates.ImageNormal = normalImage; - _quickPrintButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _quickPrintButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,125 +164,59 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(GenericToolbarImageResources.GenericQuickPrint); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarQuickPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); break; case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; @@ -317,125 +251,59 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(GenericToolbarImageResources.GenericQuickPrint); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarQuickPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; @@ -461,125 +329,59 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(GenericToolbarImageResources.GenericQuickPrint); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarQuickPrintDisabled); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled); break; @@ -605,125 +407,59 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(GenericToolbarImageResources.GenericQuickPrint); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarQuickPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365White: UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); break; case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; @@ -749,125 +485,59 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateActiveImage(GenericToolbarImageResources.GenericQuickPrint); break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarQuickPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; - case PaletteMode.SparkleBlue: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; + case PaletteMode.SparkleBlue: case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; @@ -895,125 +565,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, GenericToolbarImageResources.GenericQuickPrint, GenericToolbarImageResources.GenericQuickPrint, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintDisabled, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal, Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal, Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintDisabled, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal, Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarRedoCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarRedoCommand.cs index 955d64785..e180b50ee 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarRedoCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarRedoCommand.cs @@ -2,7 +2,7 @@ /* * * Redo BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarRedoCommand : KryptonCommand public ButtonSpecAny? ToolBarRedoButton { get => _redoButtonSpec ?? new ButtonSpecAny(); - set { _redoButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _redoButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarRedoCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.Redo; + Text = KryptonManager.Strings.ToolBarStrings.Redo; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarRedoCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_redoButtonSpec != null) { _redoButtonSpec.ImageStates.ImageDisabled = disabledImage; - _redoButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _redoButtonSpec.ImageStates.ImageTracking = activeImage; _redoButtonSpec.ImageStates.ImageNormal = normalImage; - _redoButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _redoButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,131 +164,61 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlackDarkMode: + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); break; - case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.Custom: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } @@ -312,134 +242,65 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarRedoNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarRedoNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -456,134 +317,65 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarRedoDisabled); + UpdateImage(SystemToolbarImageResources.SystemToolbarRedoDisabled); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarRedoDisabled); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarRedoDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarRedoDisabled); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarRedoDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -600,134 +392,65 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarRedoNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarRedoNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -744,134 +467,65 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarRedoNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarRedoNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarRedoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -895,127 +549,61 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarRedoDisabled, Office2003ToolbarImageResources.Office2003ToolbarRedoNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoDisabled, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, Office2007ToolbarImageResources.Office2007ToolbarRedoNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); - break; case PaletteMode.SparklePurpleLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); + AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoDisabled, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, Office2010ToolbarImageResources.Office2010ToolbarRedoNormal); break; case PaletteMode.Custom: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, Office2019ToolbarImageResources.Office2019ToolbarRedoNormal); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAllCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAllCommand.cs index 794b84ea7..a34dbc786 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAllCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAllCommand.cs @@ -2,7 +2,7 @@ /* * * SaveAll BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -48,7 +48,7 @@ public class KryptonIntegratedToolbarSaveAllCommand : KryptonCommand public ButtonSpecAny? ToolBarSaveAllButton { get => _saveAllButtonSpec ?? new ButtonSpecAny(); - set { _saveAllButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _saveAllButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -78,7 +78,7 @@ public KryptonIntegratedToolbarSaveAllCommand() _style = PaletteButtonSpecStyle.SaveAll; - Text = KryptonLanguageManager.ToolBarStrings.SaveAll; + Text = KryptonManager.Strings.ToolBarStrings.SaveAll; UpdateButtonSpec(); } @@ -89,24 +89,24 @@ public KryptonIntegratedToolbarSaveAllCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_saveAllButtonSpec != null) { _saveAllButtonSpec.ImageStates.ImageDisabled = disabledImage; - _saveAllButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _saveAllButtonSpec.ImageStates.ImageTracking = activeImage; _saveAllButtonSpec.ImageStates.ImageNormal = normalImage; - _saveAllButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _saveAllButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -124,7 +124,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -136,7 +136,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -148,7 +148,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -174,131 +174,61 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlackDarkMode: + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); break; - case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.Custom: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } @@ -322,134 +252,65 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarSaveAllNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveAllNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -466,134 +327,65 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarSaveAllDisabled); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveAllDisabled); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllDisabled); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllDisabled); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -610,134 +402,65 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarSaveAllNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveAllNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -754,134 +477,65 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarSaveAllNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveAllNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -905,125 +559,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarSaveAllDisabled, Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAsCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAsCommand.cs index db553cc64..e62f126e1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAsCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveAsCommand.cs @@ -2,7 +2,7 @@ /* * * SaveAs BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarSaveAsCommand : KryptonCommand public ButtonSpecAny? ToolBarSaveAsButton { get => _saveAsButtonSpec ?? new ButtonSpecAny(); - set { _saveAsButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _saveAsButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarSaveAsCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.SaveAs; + Text = KryptonManager.Strings.ToolBarStrings.SaveAs; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarSaveAsCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_saveAsButtonSpec != null) { _saveAsButtonSpec.ImageStates.ImageDisabled = disabledImage; - _saveAsButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _saveAsButtonSpec.ImageStates.ImageTracking = activeImage; _saveAsButtonSpec.ImageStates.ImageNormal = normalImage; - _saveAsButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _saveAsButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -162,133 +162,63 @@ private void UpdateImage(PaletteMode mode) UpdateImage(SystemToolbarImageResources.SystemToolbarSaveNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); - break; - case PaletteMode.Office2007DarkGray: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlackDarkMode: + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); break; - case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.Custom: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } @@ -312,134 +242,65 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSaveAs); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -456,134 +317,65 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSaveAs); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveDisabled); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveDisabled); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsDisabled); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -600,134 +392,65 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSaveAs); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -744,134 +467,65 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSaveAs); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -895,125 +549,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarSaveDisabled, Office2003ToolbarImageResources.Office2003ToolbarSaveNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveCommand.cs index ba59a3287..d0a7cb6bd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarSaveCommand.cs @@ -2,7 +2,7 @@ /* * * Save BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarSaveCommand : KryptonCommand public ButtonSpecAny? ToolBarSaveButton { get => _saveButtonSpec ?? new ButtonSpecAny(); - set { _saveButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _saveButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarSaveCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.Save; + Text = KryptonManager.Strings.ToolBarStrings.Save; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarSaveCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_saveButtonSpec != null) { _saveButtonSpec.ImageStates.ImageDisabled = disabledImage; - _saveButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _saveButtonSpec.ImageStates.ImageTracking = activeImage; _saveButtonSpec.ImageStates.ImageNormal = normalImage; - _saveButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _saveButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,131 +164,61 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlackDarkMode: + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); break; - case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.Custom: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } @@ -312,134 +242,65 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSave); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -456,134 +317,65 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSave); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveDisabled); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveDisabled); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveDisabled); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -600,134 +392,65 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSave); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -744,134 +467,65 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(GenericToolbarImageResources.GenericSave); + UpdateImage(SystemToolbarImageResources.SystemToolbarSaveNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarSaveNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -895,125 +549,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarSaveDisabled, Office2003ToolbarImageResources.Office2003ToolbarSaveNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveDisabled, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, Office2007ToolbarImageResources.Office2007ToolbarSaveNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, Office2019ToolbarImageResources.Office2019ToolbarSaveNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveDisabled, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, Office2010ToolbarImageResources.Office2010ToolbarSaveNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarUndoCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarUndoCommand.cs index cfa4d0e5b..966f3991c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarUndoCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonIntegratedToolbarUndoCommand.cs @@ -2,7 +2,7 @@ /* * * Undo BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public class KryptonIntegratedToolbarUndoCommand : KryptonCommand public ButtonSpecAny? ToolBarUndoButton { get => _undoButtonSpec ?? new ButtonSpecAny(); - set { _undoButtonSpec = value; UpdateImage(KryptonManager.InternalGlobalPaletteMode); } + set { _undoButtonSpec = value; UpdateImage(KryptonManager.CurrentGlobalPaletteMode); } } /// Gets the active image. @@ -70,7 +70,7 @@ public KryptonIntegratedToolbarUndoCommand() { _imageStates = new ButtonImageStates(); - Text = KryptonLanguageManager.ToolBarStrings.Undo; + Text = KryptonManager.Strings.ToolBarStrings.Undo; } #endregion @@ -79,24 +79,24 @@ public KryptonIntegratedToolbarUndoCommand() /// Updates the image. /// The help image. - private void UpdateImage(Image helpImage) => ImageSmall = helpImage; + private void UpdateImage(Image? helpImage) => ImageSmall = helpImage; /// Adds the image states. /// The active image. /// The disabled image. /// The normal image. /// The pressed image. - private void AddImageStates(Image? activeImage, Image disabledImage, Image normalImage, Image? pressedImage) + private void AddImageStates(Image? activeImage, Image? disabledImage, Image? normalImage, Image? pressedImage) { if (_undoButtonSpec != null) { _undoButtonSpec.ImageStates.ImageDisabled = disabledImage; - _undoButtonSpec.ImageStates.ImageTracking = activeImage ?? null; + _undoButtonSpec.ImageStates.ImageTracking = activeImage; _undoButtonSpec.ImageStates.ImageNormal = normalImage; - _undoButtonSpec.ImageStates.ImagePressed = pressedImage ?? null; + _undoButtonSpec.ImageStates.ImagePressed = pressedImage; } } @@ -114,7 +114,7 @@ private void UpdateActiveImage(Image activeImage) /// Updates the disabled image. /// The disabled image. - private void UpdateDisabledImage(Image disabledImage) + private void UpdateDisabledImage(Image? disabledImage) { _disabledImage = disabledImage; @@ -126,7 +126,7 @@ private void UpdateDisabledImage(Image disabledImage) /// Updates the normal image. /// The normal image. - private void UpdateNormalImage(Image normalImage) + private void UpdateNormalImage(Image? normalImage) { _normalImage = normalImage; @@ -138,7 +138,7 @@ private void UpdateNormalImage(Image normalImage) /// Updates the pressed image. /// The pressed image. - private void UpdatePressedImage(Image pressedImage) + private void UpdatePressedImage(Image? pressedImage) { _pressedImage = pressedImage; @@ -164,131 +164,61 @@ private void UpdateImage(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); break; - case PaletteMode.Office2007DarkGray: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Silver: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007White: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Black: - UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlackDarkMode: UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); break; - case PaletteMode.Office2010DarkGray: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Silver: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010White: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Black: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlackDarkMode: + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); break; - case PaletteMode.Microsoft365DarkGray: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365White: UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); break; - case PaletteMode.SparkleBlue: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurple: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.Custom: - UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); } @@ -312,134 +242,65 @@ private void UpdateActiveImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarUndoNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarUndoNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -456,134 +317,65 @@ private void UpdateDisabledImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarUndoDisabled); + UpdateImage(SystemToolbarImageResources.SystemToolbarUndoDisabled); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarUndoDisabled); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarUndoDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarUndoDisabled); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarUndoDisabled); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -600,134 +392,65 @@ private void UpdateNormalImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarUndoNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarUndoNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -744,134 +467,65 @@ private void UpdatePressedImage(PaletteMode mode) case PaletteMode.Global: break; case PaletteMode.ProfessionalSystem: - UpdateActiveImage(SystemToolbarImageResources.SystemToolbarUndoNormal); + UpdateImage(SystemToolbarImageResources.SystemToolbarUndoNormal); break; case PaletteMode.ProfessionalOffice2003: - UpdateActiveImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); - break; - case PaletteMode.Office2007DarkGray: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); + UpdateImage(Office2003ToolbarImageResources.Office2003ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Silver: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverLightMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007White: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Black: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlackDarkMode: - UpdateActiveImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; - case PaletteMode.Office2010DarkGray: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); + UpdateImage(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Silver: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010White: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Black: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlackDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.Custom: + UpdateImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: - UpdateActiveImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); - break; - case PaletteMode.Microsoft365DarkGray: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); + UpdateImage(Office2013ToolbarImageResources.Office2013ToolbarUndoNormal); break; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Blue: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Silver: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365White: - UpdateActiveImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlue: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleBlueLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrange: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparkleOrangeLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurple: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleDarkMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.SparklePurpleLightMode: - UpdateActiveImage(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; - case PaletteMode.Custom: + UpdateImage(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); break; default: throw new ArgumentOutOfRangeException(nameof(mode), mode, null); @@ -895,125 +549,59 @@ private void UpdateImageStates(PaletteMode mode) case PaletteMode.ProfessionalOffice2003: AddImageStates(null, Office2003ToolbarImageResources.Office2003ToolbarUndoDisabled, Office2003ToolbarImageResources.Office2003ToolbarUndoNormal, null); break; - case PaletteMode.Office2007DarkGray: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2007DarkGray: case PaletteMode.Office2007Blue: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlueLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Silver: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverDarkMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007SilverLightMode: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007White: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007Black: - AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); - break; case PaletteMode.Office2007BlackDarkMode: AddImageStates(Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoDisabled, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, Office2007ToolbarImageResources.Office2007ToolbarUndoNormal); break; - case PaletteMode.Office2010DarkGray: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Office2010DarkGray: case PaletteMode.Office2010Blue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Silver: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010SilverLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010White: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010Black: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.Office2010BlackDarkMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); break; - case PaletteMode.Office2013DarkGray: - case PaletteMode.Office2013LightGray: + // TODO: Re-enable this once completed + //case PaletteMode.Office2013DarkGray: + //case PaletteMode.Office2013LightGray: case PaletteMode.Office2013White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); break; - case PaletteMode.Microsoft365DarkGray: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; + // TODO: Re-enable this once completed + //case PaletteMode.Microsoft365DarkGray: case PaletteMode.Microsoft365Black: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlackDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Blue: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365BlueLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365Silver: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverDarkMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365SilverLightMode: - AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); - break; case PaletteMode.Microsoft365White: AddImageStates(Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, Office2019ToolbarImageResources.Office2019ToolbarUndoNormal); break; case PaletteMode.SparkleBlue: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparkleBlueDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparkleBlueLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparkleOrange: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparkleOrangeDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparkleOrangeLightMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparklePurple: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparklePurpleDarkMode: - AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); - break; case PaletteMode.SparklePurpleLightMode: AddImageStates(Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoDisabled, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, Office2010ToolbarImageResources.Office2010ToolbarUndoNormal); break; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLabel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLabel.cs index a327b4dee..eb30cc432 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -446,7 +446,7 @@ protected virtual void OnKryptonCommandChanged(EventArgs e) /// /// Source of the event. /// A PropertyChangedEventArgs that contains the event data. - protected virtual void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + protected virtual void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -496,7 +496,7 @@ protected override bool EvalTransparentPaint() => #endregion #region Implementation - private void OnLabelTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnLabelTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkLabel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkLabel.cs index a3c4910dc..5abf3e812 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -287,7 +287,7 @@ protected override void SetLabelStyle(LabelStyle style) #endregion #region Implementation - private void OnControllerClick(object sender, MouseEventArgs e) => OnLinkClicked(new LinkClickedEventArgs(Text)); + private void OnControllerClick(object? sender, MouseEventArgs e) => OnLinkClicked(new LinkClickedEventArgs(Text)); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkWrapLabel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkWrapLabel.cs index fc6781710..0216cf558 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkWrapLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLinkWrapLabel.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -168,7 +168,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -406,7 +406,7 @@ public KryptonContextMenu? KryptonContextMenu /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public PaletteBase? GetResolvedPalette() => _palette; + public PaletteBase GetResolvedPalette() => _palette!; /// /// Gets access to the current renderer. @@ -459,10 +459,10 @@ public void UpdateFont() font ??= StateCommon.Font ?? _redirector.GetContentShortTextFont(_labelContentStyle, ps); // Recover text color from state common or as last resort the inherited palette - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = StateCommon.TextColor; - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = _redirector.GetContentShortTextColor1(_labelContentStyle, ps); } @@ -560,10 +560,10 @@ protected override void OnPaint(PaintEventArgs e) font ??= StateCommon.Font ?? _redirector.GetContentShortTextFont(_labelContentStyle, ps); // Recover text color from state common or as last resort the inherited palette - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = StateCommon.TextColor; - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = _redirector.GetContentShortTextColor1(_labelContentStyle, ps); } @@ -607,13 +607,13 @@ protected override void OnPaintBackground(PaintEventArgs? pEvent) _miPtb = typeof(Control).GetMethod("PaintTransparentBackground", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, CallingConventions.HasThis, - new[] { typeof(PaintEventArgs), typeof(Rectangle), typeof(Region) }, + [typeof(PaintEventArgs), typeof(Rectangle), typeof(Region)], null); } if (pEvent != null) { - _miPtb?.Invoke(this, new object[] { pEvent, ClientRectangle, null }); + _miPtb?.Invoke(this, [pEvent, ClientRectangle, null!]); } } else @@ -810,15 +810,15 @@ private void SetPalette(PaletteBase? palette) } } - private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => NeedPaint(e); + private void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) => NeedPaint(e); // Change in base renderer or base palette require we fetch the latest renderer - private void OnBaseChanged(object sender, EventArgs e) => Renderer = _palette?.GetRenderer(); + private void OnBaseChanged(object? sender, EventArgs e) => Renderer = _palette?.GetRenderer(); /// Called when [global palette changed]. /// The sender. /// The instance containing the event data. - private void OnGlobalPaletteChanged(object sender, EventArgs e) + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) @@ -852,13 +852,13 @@ private void OnContextMenuStripOpening(object sender, CancelEventArgs e) } } - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => + private void OnKryptonContextMenuDisposed(object? sender, EventArgs e) => // When the current krypton context menu is disposed, we should remove // it to prevent it being used again, as that would just throw an exception // because it has been disposed. KryptonContextMenu = null; - private void OnContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); + private void OnContextMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); private void NeedPaint(bool layout) => NeedPaint(new NeedLayoutEventArgs(layout)); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListBox.cs index b5f74dced..944f62434 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -147,7 +147,7 @@ public override DrawMode DrawMode } /// - /// Force the remeasure of items so they are sized correctly. + /// Force the remeasure of items, so they are sized correctly. /// public void RefreshItemSizes() { @@ -360,9 +360,6 @@ private void WmPaint(ref Message m) private bool _alwaysActive; private bool _forcedLayout; private bool _trackingMouseEnter; - private float _cornerRoundingRadius; - private float _itemCornerRoundingRadius; - #endregion #region Events @@ -602,13 +599,9 @@ public KryptonListBox() // Add list box to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(_listBox); - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - _itemCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; } - private void OnListBoxClick(object sender, EventArgs e) => + private void OnListBoxClick(object? sender, EventArgs e) => // ReSharper disable RedundantBaseQualifier base.OnClick(e); // ReSharper restore RedundantBaseQualifier @@ -628,31 +621,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - - /// Gets or sets the item corner rounding radius. - /// The item corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the item corner rounding radius.")] - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float ItemCornerRoundingRadius - { - get => _itemCornerRoundingRadius; - - set => SetItemCornerRoundingRadius(value); - } - /// /// Gets access to the contained ListBox instance. /// @@ -676,9 +644,10 @@ public float ItemCornerRoundingRadius [Bindable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [DisallowNull] + [AllowNull] public override string Text { + // Control.Text can take null but will always return an empty string when the input was null get => base.Text; set => base.Text = value; } @@ -703,9 +672,12 @@ public override Color BackColor [Bindable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [DisallowNull] + [AllowNull] public override Font Font { + // base.Font will always return a Font + // base can take null as a value + get => base.Font; set => base.Font = value; } @@ -762,7 +734,7 @@ public int SelectedIndex public object? SelectedValue { get => _listBox.SelectedValue; - set => _listBox.SelectedValue = value; + set => _listBox.SelectedValue = value!; } /// @@ -1031,7 +1003,7 @@ public PaletteBorderStyle BorderStyle [Category(@"Visuals")] [Description(@"Overrides for defining common appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListStateRedirect? StateCommon { get; } + public PaletteListStateRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -1247,12 +1219,12 @@ public bool AlwaysActive /// Sets input focus to the control. /// /// true if the input focus request was successful; otherwise, false. - public new bool Focus() => ListBox != null && ListBox.Focus(); + public new bool Focus() => ListBox.Focus(); /// /// Activates the control. /// - public new void Select() => ListBox?.Select(); + public new void Select() => ListBox.Select(); #endregion #region Protected @@ -1351,7 +1323,7 @@ protected override void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected override void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected override void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { _listBox.RefreshItemSizes(); base.OnPaletteChanged(e); @@ -1425,9 +1397,9 @@ protected override void OnCausesValidationChanged(EventArgs e) /// Raises the Paint event. /// /// An PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { - Paint?.Invoke(this, e); + Paint?.Invoke(this, e!); base.OnPaint(e); } @@ -1497,7 +1469,7 @@ protected override void OnLayout(LayoutEventArgs levent) // Only use layout logic if control is fully initialized or if being forced // to allow a relayout or if in design mode. - if (IsHandleCreated || _forcedLayout || (DesignMode && (_listBox != null))) + if (IsHandleCreated || _forcedLayout || (DesignMode)) { Rectangle fillRect = _layoutFill.FillRect; _listBox.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); @@ -1543,19 +1515,11 @@ private void UpdateStateAndPalettes() // Get the correct palette settings to use IPaletteDouble doubleState = GetDoubleState(); _listBox.ViewDrawPanel.SetPalettes(doubleState.PaletteBack); - _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder); + _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder!); _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state; - if (IsActive) - { - state = PaletteState.Tracking; - } - else - { - state = Enabled ? PaletteState.Normal : PaletteState.Disabled; - } + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _listBox.ViewDrawPanel.ElementState = state; _drawDockerOuter.ElementState = state; @@ -1564,7 +1528,7 @@ private void UpdateStateAndPalettes() private IPaletteDouble GetDoubleState() => Enabled ? (IsActive ? StateActive : StateNormal) : StateDisabled; - private void OnListBoxDrawItem(object sender, DrawItemEventArgs e) + private void OnListBoxDrawItem(object? sender, DrawItemEventArgs e) { // We cannot do anything with an invalid index if (e.Index < 0) @@ -1575,7 +1539,7 @@ private void OnListBoxDrawItem(object sender, DrawItemEventArgs e) // Update our content object with values from the list item UpdateContentFromItemIndex(e.Index); - // By default the button is in the normal state + // By default, the button is in the normal state var buttonState = PaletteState.Normal; // Is this item disabled @@ -1670,7 +1634,7 @@ private void OnListBoxDrawItem(object sender, DrawItemEventArgs e) } } - private void OnListBoxMeasureItem(object sender, MeasureItemEventArgs e) + private void OnListBoxMeasureItem(object? sender, MeasureItemEventArgs e) { UpdateContentFromItemIndex(e.Index); @@ -1687,7 +1651,7 @@ private void UpdateContentFromItemIndex(int index) // If the object exposes the rich interface then use is... if (Items[index] is IContentValues itemValues) { - _contentValues.ShortText = itemValues.GetShortText(); + _contentValues!.ShortText = itemValues.GetShortText(); _contentValues.LongText = itemValues.GetLongText(); _contentValues.Image = itemValues.GetImage(PaletteState.Normal); _contentValues.ImageTransparentColor = itemValues.GetImageTransparentColor(PaletteState.Normal); @@ -1695,20 +1659,20 @@ private void UpdateContentFromItemIndex(int index) else { // Get the text string for the item - _contentValues.ShortText = _listBox.GetItemText(Items[index]); + _contentValues!.ShortText = _listBox.GetItemText(Items[index]); _contentValues.LongText = null; _contentValues.Image = null; - _contentValues.ImageTransparentColor = Color.Empty; + _contentValues.ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; } } - private void OnListBoxDataSourceChanged(object sender, EventArgs e) => OnDataSourceChanged(e); + private void OnListBoxDataSourceChanged(object? sender, EventArgs e) => OnDataSourceChanged(e); - private void OnListBoxDisplayMemberChanged(object sender, EventArgs e) => OnDisplayMemberChanged(e); + private void OnListBoxDisplayMemberChanged(object? sender, EventArgs e) => OnDisplayMemberChanged(e); - private void OnListBoxValueMemberChanged(object sender, EventArgs e) => OnValueMemberChanged(e); + private void OnListBoxValueMemberChanged(object? sender, EventArgs e) => OnValueMemberChanged(e); - private void OnListBoxSelectedIndexChanged(object sender, EventArgs e) + private void OnListBoxSelectedIndexChanged(object? sender, EventArgs e) { switch (_listBox.SelectionMode) { @@ -1737,8 +1701,8 @@ private void OnListBoxSelectedIndexChanged(object sender, EventArgs e) } } - private bool SelectedIndicesChanged(int[] left, - ListBox.SelectedIndexCollection right) + private bool SelectedIndicesChanged(int[]? left, + ListBox.SelectedIndexCollection? right) { // First time around the left can be null if ((left == null) && (right != null)) @@ -1747,7 +1711,7 @@ private bool SelectedIndicesChanged(int[] left, } // Quickest check is to see if they have different number of entries - if (left.Length != right.Count) + if (left!.Length != right!.Count) { return true; } @@ -1756,22 +1720,22 @@ private bool SelectedIndicesChanged(int[] left, return left.Where((t, i) => t != right[i]).Any(); } - private void OnListBoxSelectedValueChanged(object sender, EventArgs e) + private void OnListBoxSelectedValueChanged(object? sender, EventArgs e) { UpdateStateAndPalettes(); _listBox.Invalidate(); OnSelectedValueChanged(e); } - private void OnListBoxFormat(object sender, ListControlConvertEventArgs e) => OnFormat(e); + private void OnListBoxFormat(object? sender, ListControlConvertEventArgs e) => OnFormat(e); - private void OnListBoxFormatInfoChanged(object sender, EventArgs e) => OnFormatInfoChanged(e); + private void OnListBoxFormatInfoChanged(object? sender, EventArgs e) => OnFormatInfoChanged(e); - private void OnListBoxFormatStringChanged(object sender, EventArgs e) => OnFormatStringChanged(e); + private void OnListBoxFormatStringChanged(object? sender, EventArgs e) => OnFormatStringChanged(e); - private void OnListBoxFormattingEnabledChanged(object sender, EventArgs e) => OnFormattingEnabledChanged(e); + private void OnListBoxFormattingEnabledChanged(object? sender, EventArgs e) => OnFormattingEnabledChanged(e); - private void OnListBoxGotFocus(object sender, EventArgs e) + private void OnListBoxGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); _listBox.Invalidate(); @@ -1779,7 +1743,7 @@ private void OnListBoxGotFocus(object sender, EventArgs e) OnGotFocus(e); } - private void OnListBoxLostFocus(object sender, EventArgs e) + private void OnListBoxLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); _listBox.Invalidate(); @@ -1787,19 +1751,19 @@ private void OnListBoxLostFocus(object sender, EventArgs e) OnLostFocus(e); } - private void OnListBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnListBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnListBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnListBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnListBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnListBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnListBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnListBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnListBoxValidated(object sender, EventArgs e) => OnValidated(e); + private void OnListBoxValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnListBoxValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnListBoxValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnListBoxMouseChange(object sender, EventArgs e) + private void OnListBoxMouseChange(object? sender, EventArgs e) { // Change in tracking state? if (_listBox.MouseOver != _trackingMouseEnter) @@ -1820,23 +1784,9 @@ private void OnListBoxMouseChange(object sender, EventArgs e) } } - private void OnDoubleClick(object sender, EventArgs e) => base.OnDoubleClick(e); - - private void OnMouseDoubleClick(object sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void SetItemCornerRoundingRadius(float? radius) - { - _itemCornerRoundingRadius = radius ?? GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; + private void OnDoubleClick(object? sender, EventArgs e) => base.OnDoubleClick(e); - StateCommon.Item.Border.Rounding = _itemCornerRoundingRadius; - } + private void OnMouseDoubleClick(object? sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListItem.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListItem.cs index cea9dba93..51c7bb9b7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListItem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -22,8 +22,8 @@ public class KryptonListItem : Component, { #region Instance Fields private string _shortText; - private string _longText; - private Image _image; + private string? _longText; + private Image? _image; private Color _imageTransparentColor; #endregion @@ -42,7 +42,7 @@ public class KryptonListItem : Component, /// Initialize a new instance of the KryptonListItem class. /// public KryptonListItem() - : this("ListItem", null, null, Color.Empty) + : this("ListItem", null, null, GlobalStaticValues.EMPTY_COLOR) { } @@ -51,7 +51,7 @@ public KryptonListItem() /// /// Initial short text value. public KryptonListItem(string shortText) - : this(shortText, null, null, Color.Empty) + : this(shortText, null, null, GlobalStaticValues.EMPTY_COLOR) { } @@ -61,7 +61,7 @@ public KryptonListItem(string shortText) /// Initial short text value. /// Initial long text value. public KryptonListItem(string shortText, string longText) - : this(shortText, longText, null, Color.Empty) + : this(shortText, longText, null, GlobalStaticValues.EMPTY_COLOR) { } @@ -73,8 +73,8 @@ public KryptonListItem(string shortText, string longText) /// Initial image value. public KryptonListItem(string shortText, string longText, - Image image) - : this(shortText, longText, image, Color.Empty) + Image? image) + : this(shortText, longText, image, GlobalStaticValues.EMPTY_COLOR) { } @@ -86,8 +86,8 @@ public KryptonListItem(string shortText, /// Initial image value. /// Initial transparent image color. public KryptonListItem(string shortText, - string longText, - Image image, + string? longText, + Image? image, Color imageTransparentColor) { _shortText = shortText; @@ -138,7 +138,7 @@ public string ShortText [Localizable(true)] public string LongText { - get => _longText; + get => _longText!; set { @@ -200,7 +200,7 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => _imageTransparentColor != Color.Empty; + private bool ShouldSerializeImageTransparentColor() => _imageTransparentColor != GlobalStaticValues.EMPTY_COLOR; #endregion @@ -241,7 +241,7 @@ public Color ImageTransparentColor /// Gets the content long text. /// /// String value. - public string GetLongText() => _longText; + public string GetLongText() => _longText!; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListView.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListView.cs index 9dab7e8b5..2174adad4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListView.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonListView.cs @@ -1,16 +1,13 @@ #region BSD License /* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. */ #endregion -// ReSharper disable MemberCanBeProtected.Global +using ListView = System.Windows.Forms.ListView; +// ReSharper disable UnusedMember.Global + namespace Krypton.Toolkit { /// @@ -19,178 +16,365 @@ namespace Krypton.Toolkit /// [ToolboxItem(true)] [ToolboxBitmap(typeof(ListView))] - [DefaultEvent("AfterSelect")] - [DefaultProperty("Nodes")] - [Designer(typeof(KryptonTreeViewDesigner))] + [Designer(typeof(KryptonListViewDesigner))] [DesignerCategory(@"code")] - [Description(@"A Kryptonised listview. Does not support the `List or Details View` types")] - public class KryptonListView : ListView + [Description(@"A Kryptonised listview.")] + public class KryptonListView : VisualControlBase, + IContainedInputControl { - #region Variables - private PaletteBase? _localPalette; - private PaletteBase? _palette; - private PaletteMode _paletteMode; - private bool _layoutDirty; - private bool _refreshAll; - private float _cornerRoundingRadius; - private float _itemCornerRoundingRadius; - private readonly IntPtr _screenDC; + #region Classes + private class InternalListView : ListView + { + #region Instance Fields + + private readonly ViewManager? _viewManager; + private readonly KryptonListView _kryptonListView; + private readonly IntPtr _screenDC; + private bool _mouseOver; + + #endregion + + #region Events + + /// + /// Occurs when the mouse enters the InternalListView. + /// + public event EventHandler? TrackMouseEnter; + + /// + /// Occurs when the mouse leaves the InternalListView. + /// + public event EventHandler? TrackMouseLeave; + + #endregion + + #region Identity + + /// + /// Initialize a new instance of the InternalListView class. + /// + /// Reference to owning control. + public InternalListView(KryptonListView kryptonListView) + { + SetStyle(ControlStyles.ResizeRedraw + | ControlStyles.AllPaintingInWmPaint + | ControlStyles.OptimizedDoubleBuffer, true); + + _kryptonListView = kryptonListView; + + // Create manager and view for drawing the background + ViewDrawPanel = new ViewDrawPanel(); + _viewManager = new ViewManager(this, ViewDrawPanel); + + // ReSharper disable RedundantBaseQualifier + // Set required properties to act as an owner draw list box + base.Size = Size.Empty; + base.BorderStyle = BorderStyle.None; + // ReSharper restore RedundantBaseQualifier + + // We need to create and cache a device context compatible with the display + _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); + } + + /// + /// Releases all resources used by the Control. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (_screenDC != IntPtr.Zero) + { + PI.DeleteDC(_screenDC); + } + } + + #endregion + + #region Public + + /// + /// Recreate the window handle. + /// + public void Recreate() => RecreateHandle(); + + /// + /// Gets access to the contained view draw panel instance. + /// + public ViewDrawPanel ViewDrawPanel { get; } + + /// + /// Gets and sets if the mouse is currently over the combo box. + /// + public bool MouseOver + { + get => _mouseOver; + set + { + // Only interested in changes + if (_mouseOver != value) + { + _mouseOver = value; + + // Generate appropriate change event + if (_mouseOver) + { + OnTrackMouseEnter(EventArgs.Empty); + } + else + { + OnTrackMouseLeave(EventArgs.Empty); + } + } + } + } + + #endregion + + #region Protected + + /// Raises the event. + /// An that contains the event data. + protected override void OnSystemColorsChanged(EventArgs e) + { + // DO nothing, It's Krypton Colours that are in use ! + } + + /// + /// Raises the Layout event. + /// + /// A LayoutEventArgs containing the event data. + protected override void OnLayout(LayoutEventArgs levent) + { + base.OnLayout(levent); + + // Ask the panel to layout given our available size + using var context = + new ViewLayoutContext(_viewManager, this, _kryptonListView, _kryptonListView.Renderer); + ViewDrawPanel.Layout(context); + } + + /// + /// Process Windows-based messages. + /// + /// A Windows-based message. + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case PI.WM_.ERASEBKGND: + // Do not draw the background here, always do it in the paint + // instead to prevent flicker because of a two stage drawing process + break; + case PI.WM_.PRINTCLIENT: + case PI.WM_.PAINT: + WmPaint(ref m); + break; + case PI.WM_.VSCROLL: + case PI.WM_.HSCROLL: + case PI.WM_.MOUSEWHEEL: + Invalidate(); + base.WndProc(ref m); + break; + case PI.WM_.MOUSELEAVE: + if (MouseOver) + { + MouseOver = false; + _kryptonListView.PerformNeedPaint(true); + Invalidate(); + } + + base.WndProc(ref m); + break; + case PI.WM_.MOUSEMOVE: + if (!MouseOver) + { + MouseOver = true; + _kryptonListView.PerformNeedPaint(true); + Invalidate(); + } + + base.WndProc(ref m); + break; + default: + base.WndProc(ref m); + break; + } + } + + #endregion + + #region Private + + /// + /// Raises the TrackMouseEnter event. + /// + /// An EventArgs containing the event data. + private void OnTrackMouseEnter(EventArgs e) => TrackMouseEnter?.Invoke(this, e); + + /// + /// Raises the TrackMouseLeave event. + /// + /// An EventArgs containing the event data. + private void OnTrackMouseLeave(EventArgs e) => TrackMouseLeave?.Invoke(this, e); + + private void WmPaint(ref Message m) + { + var ps = new PI.PAINTSTRUCT(); + + // Do we need to BeginPaint or just take the given HDC? + IntPtr hdc = m.WParam == IntPtr.Zero ? PI.BeginPaint(Handle, ref ps) : m.WParam; + + // Create bitmap that all drawing occurs onto, then we can blit it later to remove flicker + Rectangle realRect = CommonHelper.RealClientRectangle(Handle); + + // No point drawing when one of the dimensions is zero + if (realRect is { Width: > 0, Height: > 0 }) + { + IntPtr hBitmap = PI.CreateCompatibleBitmap(hdc, realRect.Width, realRect.Height); + + // If we managed to get a compatible bitmap + if (hBitmap != IntPtr.Zero) + { + try + { + // Must use the screen device context for the bitmap when drawing into the + // bitmap otherwise the Opacity and RightToLeftLayout will not work correctly. + PI.SelectObject(_screenDC, hBitmap); + + // Easier to draw using a graphics instance than a DC! + using (Graphics g = Graphics.FromHdc(_screenDC)) + { + // Ask the view element to layout in given space, needs this before a render call + using (var context = new ViewLayoutContext(this, _kryptonListView.Renderer)) + { + context.DisplayRectangle = realRect; + ViewDrawPanel.Layout(context); + } + + using (var context = new RenderContext(this, _kryptonListView, g, realRect, + _kryptonListView.Renderer)) + { + ViewDrawPanel.Render(context); + } + + // We can only control the background color by using the built in property and not + // by overriding the drawing directly, therefore we can only provide a single color. + Color color1 = ViewDrawPanel.GetPalette().GetBackColor1(ViewDrawPanel.State); + if (color1 != BackColor) + { + BackColor = color1; + } + + // Replace given DC with the screen DC for base window proc drawing + IntPtr beforeDC = m.WParam; + m.WParam = _screenDC; + DefWndProc(ref m); + m.WParam = beforeDC; + } + + // Now blit from the bitmap from the screen to the real dc + PI.BitBlt(hdc, 0, 0, realRect.Width, realRect.Height, _screenDC, 0, 0, PI.SRCCOPY); + } + finally + { + // Delete the temporary bitmap + PI.DeleteObject(hBitmap); + } + } + } + + // Do we need to match the original BeginPaint? + if (m.WParam == IntPtr.Zero) + { + PI.EndPaint(Handle, ref ps); + } + } + + #endregion + } + + #endregion + + #region Instance Fields private readonly PaletteTripleOverride _overrideNormal; + private readonly PaletteTripleOverride _overrideDisabled; private readonly PaletteTripleOverride _overrideTracking; - private readonly PaletteTripleOverride _overridePressed; private readonly PaletteTripleOverride _overrideCheckedNormal; private readonly PaletteTripleOverride _overrideCheckedTracking; - private readonly PaletteTripleOverride _overrideCheckedPressed; - private readonly PaletteRedirectCheckBox? _paletteCheckBoxImages; - private readonly ViewLayoutDocker _drawDockerInner; private readonly ViewDrawDocker _drawDockerOuter; - private readonly ViewLayoutCenter _layoutCheckBox; - private readonly ViewLayoutSeparator _layoutCheckBoxAfter; - private readonly ViewLayoutStack _layoutCheckBoxStack; - private readonly ViewLayoutDocker _layoutDockerTile; - private readonly ViewLayoutDocker _layoutDockerSmall; - private readonly ViewLayoutDocker _layoutDockerCheckLarge; - private readonly ViewLayoutStack _layoutImageStack; - private readonly ViewLayoutCenter _layoutImageCenter; - private readonly ViewLayoutCenter _layoutImageCenterState; - private readonly ViewLayoutSeparator _layoutImage; - private readonly ViewLayoutSeparator _layoutImageState; - private readonly ViewLayoutSeparator _layoutImageAfter; - private readonly ViewDrawCheckBox _drawCheckBox; private readonly ViewLayoutFill _layoutFill; - private readonly ViewDrawButton _drawButton; - private readonly ShortTextValue? _contentValues; + private readonly InternalListView _listView; + private bool? _fixedActive; + private readonly IntPtr _screenDC; private bool _mouseOver; private bool _alwaysActive; - private ButtonStyle _style; - private bool? _fixedActive; - private KryptonContextMenu? _kryptonContextMenu; + private bool _forcedLayout; + #endregion + + #region Events + + // TODO: #endregion - #region Identity public KryptonListView() { - SetStyle(ControlStyles.AllPaintingInWmPaint - | ControlStyles.OptimizedDoubleBuffer - | ControlStyles.SupportsTransparentBackColor // Cannot get thi sto work (Code removed)!! - | ControlStyles.EnableNotifyMessage - , true); - - base.OwnerDraw = true; - // We need to repaint entire control whenever resized - SetStyle(ControlStyles.ResizeRedraw, true); - // Yes, we want to be drawn double buffered by default - DoubleBuffered = true; + // Contains another control and needs marking as such for validation to work + SetStyle(ControlStyles.ContainerControl, true); + // Cannot select this control, only the child tree view and does not generate a + SetStyle(ControlStyles.Selectable | ControlStyles.StandardClick, false); // Default fields - _alwaysActive = true; - _style = ButtonStyle.ListItem; - Padding = new Padding(1); - base.BorderStyle = System.Windows.Forms.BorderStyle.None; - - // We need to create and cache a device context compatible with the display - _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); - - // Set the palette and renderer to the defaults as specified by the manager - Redirector = new PaletteRedirect(null); - CacheNewPalette(KryptonManager.CurrentGlobalPalette); - - KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; - - NeedPaintDelegate = OnNeedPaint; + base.Padding = new Padding(1); // Create the palette storage - Images = new CheckBoxImages(NeedPaintDelegate); - _paletteCheckBoxImages = new PaletteRedirectCheckBox(Redirector, Images); - StateCommon = new PaletteListStateRedirect(Redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, NeedPaintDelegate); - OverrideFocus = new PaletteListItemTripleRedirect(Redirector, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, NeedPaintDelegate); - StateDisabled = new PaletteListState(StateCommon, NeedPaintDelegate); - StateActive = new PaletteDouble(StateCommon, NeedPaintDelegate); - StateNormal = new PaletteListState(StateCommon, NeedPaintDelegate); - StateTracking = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); - StatePressed = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); - StateCheckedNormal = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); - StateCheckedTracking = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); - StateCheckedPressed = new PaletteListItemTriple(StateCommon.Item, NeedPaintDelegate); - // Create manager and view for drawing the background - ViewDrawPanel = new ViewDrawPanel(StateNormal.Back); + var backInherit = new PaletteBackInheritRedirect(Redirector, PaletteBackStyle.InputControlStandalone); + var borderInherit = new PaletteBorderInheritRedirect(Redirector, PaletteBorderStyle.InputControlStandalone); + var commonBack = new PaletteBackColor1(backInherit, NeedPaintDelegate); + var commonBorder = new PaletteBorder(borderInherit, NeedPaintDelegate); + StateCommon = new PaletteTreeStateRedirect(Redirector, commonBack, backInherit, commonBorder, borderInherit, + NeedPaintDelegate); + StateCommon.Node.BackStyle = PaletteBackStyle.InputControlStandalone; + var disabledBack = new PaletteBackColor1(StateCommon.PaletteBack, NeedPaintDelegate); + var disabledBorder = new PaletteBorder(StateCommon.PaletteBorder!, NeedPaintDelegate); + StateDisabled = new PaletteTreeState(StateCommon, disabledBack, disabledBorder, NeedPaintDelegate); + + var normalBack = new PaletteBackColor1(StateCommon.PaletteBack, NeedPaintDelegate); + var normalBorder = new PaletteBorder(StateCommon.PaletteBorder!, NeedPaintDelegate); + StateNormal = new PaletteTreeState(StateCommon, normalBack, normalBorder, NeedPaintDelegate); + + var activeBack = new PaletteBackColor1(StateCommon.PaletteBack, NeedPaintDelegate); + var activeBorder = new PaletteBorder(StateCommon.PaletteBorder!, NeedPaintDelegate); + StateActive = new PaletteDouble(StateCommon, activeBack, activeBorder, NeedPaintDelegate); + + StateTracking = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); + StateCheckedNormal = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); + StateCheckedTracking = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); // Create the override handling classes - _overrideNormal = new PaletteTripleOverride(OverrideFocus.Item, StateNormal.Item, PaletteState.FocusOverride); - _overrideTracking = new PaletteTripleOverride(OverrideFocus.Item, StateTracking.Item, PaletteState.FocusOverride); - _overridePressed = new PaletteTripleOverride(OverrideFocus.Item, StatePressed.Item, PaletteState.FocusOverride); - _overrideCheckedNormal = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedNormal.Item, PaletteState.FocusOverride); - _overrideCheckedTracking = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedTracking.Item, PaletteState.FocusOverride); - _overrideCheckedPressed = new PaletteTripleOverride(OverrideFocus.Item, StateCheckedPressed.Item, PaletteState.FocusOverride); - - // Create the check box image drawer and place inside element so it is always centered - _drawCheckBox = new ViewDrawCheckBox(_paletteCheckBoxImages); - _layoutCheckBox = new ViewLayoutCenter - { - _drawCheckBox - }; - _layoutCheckBoxAfter = new ViewLayoutSeparator(3, 0); - _layoutCheckBoxStack = new ViewLayoutStack(true) - { - _layoutCheckBox, - _layoutCheckBoxAfter - }; - // Stack used to layout the location of the node image - _layoutImage = new ViewLayoutSeparator(0, 0); - _layoutImageAfter = new ViewLayoutSeparator(3, 0); - _layoutImageCenter = new ViewLayoutCenter(_layoutImage); - _layoutImageStack = new ViewLayoutStack(true) - { - _layoutImageCenter, - _layoutImageAfter - }; - _layoutImageState = new ViewLayoutSeparator(16, 16); - _layoutImageCenterState = new ViewLayoutCenter(_layoutImageState); - // Create the draw element for owner drawing individual items - _contentValues = new ShortTextValue(); - _drawButton = new ViewDrawButton(StateDisabled.Item, _overrideNormal, - _overrideTracking, _overridePressed, - _overrideCheckedNormal, _overrideCheckedTracking, - _overrideCheckedPressed, - new PaletteMetricRedirect(Redirector), - _contentValues, VisualOrientation.Top, false); - - // Place check box on the left and the label in the remainder - _layoutDockerTile = new ViewLayoutDocker - { - { _layoutImageStack, ViewDockStyle.Left }, - { _layoutImageCenterState, ViewDockStyle.Left }, - { _layoutCheckBoxStack, ViewDockStyle.Left }, - { _drawButton, ViewDockStyle.Fill } - }; - - _layoutDockerSmall = new ViewLayoutDocker - { - { _drawButton, ViewDockStyle.Left }, - { _layoutImageStack, ViewDockStyle.Left }, - { _layoutImageCenterState, ViewDockStyle.Left }, - { _layoutCheckBoxStack, ViewDockStyle.Left } - }; - - // Place check box on the left and the text to match the width - _layoutDockerCheckLarge = new ViewLayoutDocker - { - { _layoutImageStack, ViewDockStyle.Left }, - { _layoutImageCenterState, ViewDockStyle.Left }, - { _layoutCheckBoxStack, ViewDockStyle.Left }, - { _drawButton, ViewDockStyle.Bottom } - }; - - // Create the element that fills the remainder space and remembers fill rectangle - _layoutFill = new ViewLayoutFill(this) + OverrideFocus = new PaletteTreeNodeTripleRedirect(Redirector, PaletteBackStyle.ButtonListItem, + PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, NeedPaintDelegate); + _overrideNormal = new PaletteTripleOverride(OverrideFocus.Node, StateNormal.Node, PaletteState.FocusOverride); + _overrideDisabled = new PaletteTripleOverride(StateNormal.Node, StateDisabled.Node, PaletteState.Disabled); + _overrideTracking = new PaletteTripleOverride(OverrideFocus.Node, StateTracking.Node, PaletteState.FocusOverride); + _overrideCheckedNormal = new PaletteTripleOverride(OverrideFocus.Node, StateCheckedNormal.Node, PaletteState.FocusOverride); + _overrideCheckedTracking = new PaletteTripleOverride(OverrideFocus.Node, StateCheckedTracking.Node, PaletteState.FocusOverride); + + // Create the internal list box used for containing content + _listView = new InternalListView(this); + _listView.Click += OnListBoxClick; // SKC: make sure that the default click is also routed. + _listView.GotFocus += OnListViewGotFocus; + _listView.LostFocus += OnListViewLostFocus; + + _layoutFill = new ViewLayoutFill(_listView) { DisplayPadding = new Padding(1) }; // Create inner view for placing inside the drawing docker - _drawDockerInner = new ViewLayoutDocker + var drawDockerInner = new ViewLayoutDocker { { _layoutFill, ViewDockStyle.Fill } }; @@ -198,479 +382,900 @@ public KryptonListView() // Create view for the control border and background _drawDockerOuter = new ViewDrawDocker(StateNormal.Back, StateNormal.Border) { - { _drawDockerInner, ViewDockStyle.Fill } + { drawDockerInner, ViewDockStyle.Fill } }; - + // Create the view manager instance ViewManager = new ViewManager(this, _drawDockerOuter); + // We need to create and cache a device context compatible with the display _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); - StateCommon.Item.Content.ShortText.MultiLine = InheritBool.True; - StateCommon.Item.Content.ShortText.MultiLineH = PaletteRelativeAlign.Center; - StateCommon.Item.Content.ShortText.TextH = PaletteRelativeAlign.Center; - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - _itemCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; + // Add tree view to the controls collection + ((KryptonReadOnlyControls)Controls).AddInternal(_listView); } - /// - /// Gets access to the contained view draw panel instance. - /// - public ViewDrawPanel ViewDrawPanel { get; } + private void OnListBoxClick(object? sender, EventArgs e) => OnClick(e); /// - /// Gets access to the palette redirector. + /// Clean up any resources being used. /// - protected PaletteRedirect? Redirector + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { - [DebuggerStepThrough] - get; + base.Dispose(disposing); + if (_screenDC != IntPtr.Zero) + { + PI.DeleteDC(_screenDC); + } } + + #region Public + /// - /// Gets and sets the ViewManager instance. + /// Gets access to the contained TreeView instance. /// - public ViewManager ViewManager - { - [DebuggerStepThrough] - get; - } + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [EditorBrowsable(EditorBrowsableState.Always)] + [Browsable(false)] + public ListView ListView => _listView; + /// - /// Gets access to the current renderer. + /// Gets access to the contained input control. /// - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IRenderer? Renderer + [EditorBrowsable(EditorBrowsableState.Always)] + [Browsable(false)] + public Control ContainedControl => _listView; + + /// Gets or sets the type of action the user must take to activate an item. + /// One of the values. The default is . + /// The value specified is not one of the members. + [Category("Behavior")] + [DefaultValue(ItemActivation.Standard)] + [Description("ListViewActivationDescr")] + public ItemActivation Activation { - [DebuggerStepThrough] - get; - private set; + get => _listView.Activation; + set => _listView.Activation = value; } - #endregion - - #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius + /// Gets or sets the alignment of items in the control. + /// One of the values. The default is . + /// The value specified is not one of the values. + [Category("Behavior")] + [DefaultValue(ListViewAlignment.Top)] + [Localizable(true)] + [Description("ListViewAlignmentDescr")] + public ListViewAlignment Alignment { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); + get => _listView.Alignment; + set => _listView.Alignment = value; } - /// Gets or sets the item corner rounding radius. - /// The item corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the item corner rounding radius.")] - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float ItemCornerRoundingRadius + /// Gets or sets a value indicating whether the user can drag column headers to reorder columns in the control. + /// + /// if drag-and-drop column reordering is allowed; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(false)] + [Description("ListViewAllowColumnReorderDescr")] + public bool AllowColumnReorder { - get => _itemCornerRoundingRadius; + get => _listView.AllowColumnReorder; + set => _listView.AllowColumnReorder = value; + } - set => SetItemCornerRoundingRadius(value); + /// Gets or sets whether icons are automatically kept arranged. + /// + /// if icons are automatically kept arranged and snapped to the grid; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(true)] + [Description("ListViewAutoArrangeDescr")] + public bool AutoArrange + { + get => _listView.AutoArrange; + set => _listView.AutoArrange = value; } - /// Gets and sets the custom palette implementation. - [Category(@"Visuals")] - [Description(@"Custom palette applied to drawing.")] - [DefaultValue(null)] - public PaletteBase? Palette + /// Gets or sets a value indicating whether the background image of the should be tiled. + /// + /// if the background image of the should be tiled; otherwise, . The default is . + [Category("Appearance")] + [DefaultValue(false)] + [Description("ListViewBackgroundImageTiledDescr")] + public bool BackgroundImageTiled { - [DebuggerStepThrough] - get => _localPalette; - set - { - if (_localPalette == value) - { - return; - } + get => _listView.BackgroundImageTiled; + set => _listView.BackgroundImageTiled = value; + } - CacheNewPalette(value); - if (value == null) - { - _paletteMode = PaletteMode.Global; - _localPalette = null; - CacheNewPalette(KryptonManager.GetPaletteForMode(_paletteMode)); - } - else - { - _localPalette = value; - _paletteMode = PaletteMode.Custom; - } - PerformLayout(); - } + + /// Gets or sets a value indicating whether a check box appears next to each item in the control. + /// + /// if a check box appears next to each item in the control; otherwise, . The default is . + [Category("Appearance")] + [DefaultValue(false)] + [Description("ListViewCheckBoxesDescr")] + public bool CheckBoxes + { + get => _listView.CheckBoxes; + set => _listView.CheckBoxes = value; } - /// Resets the Palette property to its default value. - public void ResetPalette() => PaletteMode = PaletteMode.Global; /// - /// Gets and sets Determines if the control is always active or only when the mouse is over the control or has focus. + /// Gets or sets the text for the control. /// - [Category(@"Visuals")] - [Description(@"Determines if the control is always active or only when the mouse is over the control or has focus.")] - [DefaultValue(true)] - public bool AlwaysActive + [Browsable(false)] + [Bindable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [AllowNull] + public override string Text { - get => _alwaysActive; - - set - { - if (_alwaysActive != value) - { - _alwaysActive = value; - Invalidate(); - } - } + get => base.Text; + set => base.Text = value; } /// - /// Sets the fixed state of the control. + /// Gets or sets the background color for the control. /// - /// Should the control be fixed as active. - public void SetFixedState(bool active) => _fixedActive = active; + [Browsable(false)] + [Bindable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Color BackColor + { + get => base.BackColor; + set => base.BackColor = value; + } /// - /// Gets a value indicating if the input control is active. + /// Gets or sets the font of the text Displayed by the control. /// [Browsable(false)] + [Bindable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public bool IsActive => _fixedActive ?? DesignMode || AlwaysActive || ContainsFocus || _mouseOver; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [AmbientValue(null)] + [AllowNull] + public override Font Font + { + get => base.Font; + set => base.Font = value!; + } - public new bool OwnerDraw + /// + /// Gets or sets the foreground color for the control. + /// + [Browsable(false)] + [Bindable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Color ForeColor { - get => base.OwnerDraw; // Should be true! - // ReSharper disable once ValueParameterNotUsed - set { /*Do nothing*/} + get => base.ForeColor; + set => base.ForeColor = value; } - /// Gets or sets the associated with this control. - /// The for this control, or if there is no . The default is . - [Category(@"Behavior")] - [Description(@"Consider using KryptonContextMenu within the behaviors section.\nThe Winforms shortcut menu to show when the user right-clicks the page.\nNote: The ContextMenu will be rendered.")] - [DefaultValue(null)] - public override ContextMenuStrip? ContextMenuStrip + /// + /// Gets and sets the internal padding space. + /// + [DefaultValue(typeof(Padding), "1,1,1,1")] + public new Padding Padding { - [DebuggerStepThrough] - get => base.ContextMenuStrip; + get => base.Padding; set { - // Unhook from any current menu strip - if (base.ContextMenuStrip != null) - { - base.ContextMenuStrip.Opening -= OnContextMenuStripOpening; - base.ContextMenuStrip.Closed -= OnContextMenuClosed; - } - - // Let parent handle actual storage - base.ContextMenuStrip = value; - - // Hook into the strip being shown (so we can set the correct renderer) - if (base.ContextMenuStrip != null) - { - base.ContextMenuStrip.Opening += OnContextMenuStripOpening; - base.ContextMenuStrip.Closed += OnContextMenuClosed; - } + base.Padding = value; + _layoutFill.DisplayPadding = value; + PerformNeedPaint(true); } } + /// Gets the indexes of the currently checked items in the control. + /// A that contains the indexes of the currently checked items. If no items are currently checked, an empty is returned. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListView.CheckedIndexCollection CheckedIndices => _listView.CheckedIndices; - /// - /// Gets and sets the KryptonContextMenu to show when right clicked. - /// - [Category(@"Behavior")] - [Description(@"The KryptonContextMenu to show when the user right-clicks the Control.")] - [DefaultValue(null)] - public virtual KryptonContextMenu? KryptonContextMenu - { - get => _kryptonContextMenu; + /// Gets the currently checked items in the control. + /// A that contains the currently checked items. If no items are currently checked, an empty is returned. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListView.CheckedListViewItemCollection CheckedItems => _listView.CheckedItems; - set - { - if (_kryptonContextMenu != value) - { - if (_kryptonContextMenu != null) - { - _kryptonContextMenu.Closed -= OnContextMenuClosed; - _kryptonContextMenu.Disposed -= OnKryptonContextMenuDisposed; - } + /// Gets the collection of all column headers that appear in the control. + /// A that represents the column headers that appear when the property is set to . + [Category("CatBehavior")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Editor("System.Windows.Forms.Design.ColumnHeaderCollectionEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))] + [Description("collection of all column headers that appear in the control")] + [Localizable(true)] + [MergableProperty(false)] + public ListView.ColumnHeaderCollection Columns => _listView.Columns; - _kryptonContextMenu = value; - if (_kryptonContextMenu != null) - { - _kryptonContextMenu.Closed += OnContextMenuClosed; - _kryptonContextMenu.Disposed += OnKryptonContextMenuDisposed; - } - } - } + /// Gets or sets the item in the control that currently has focus. + /// A that represents the item that has focus, or if no item has the focus in the . + [Category("Appearance")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("ListViewFocusedItemDescr")] + public ListViewItem? FocusedItem + { + get => _listView.FocusedItem; + set => _listView.FocusedItem = value; } - #endregion public - #region DrawItem and SubItem - private void UpdateStateAndPalettes() + /// Gets or sets a value indicating whether clicking an item selects all its subitems. + /// + /// if clicking an item selects the item and all its subitems; if clicking an item selects only the item itself. The default is . + [Category("Appearance")] + [DefaultValue(false)] + [Description("if clicking an item selects the item and all its subitems")] + public bool FullRowSelect { - if (!IsDisposed) - { - // Get the correct palette settings to use - IPaletteDouble doubleState = GetDoubleState(); - ViewDrawPanel.SetPalettes(doubleState.PaletteBack); - _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder); - _drawDockerOuter.Enabled = Enabled; + get => _listView.FullRowSelect; + set => _listView.FullRowSelect = value; + } - // Find the new state of the main view element - PaletteState state; - if (IsActive) - { - state = PaletteState.Tracking; - } - else - { - state = Enabled ? PaletteState.Normal : PaletteState.Disabled; - } + /// Gets or sets a value indicating whether grid lines appear between the rows and columns containing the items and subitems in the control. + /// + /// if grid lines are drawn around items and subitems; otherwise, . The default is . + [Category("Appearance")] + [DefaultValue(false)] + [Description("if grid lines are drawn around items and subitems")] + public bool GridLines + { + get => _listView.GridLines; + set => _listView.GridLines = value; + } - ViewDrawPanel.ElementState = state; - _drawDockerOuter.ElementState = state; - } + /// Gets the collection of objects assigned to the control. + /// A that contains all the groups in the control. + [Category("Behavior")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + [Editor("System.Windows.Forms.Design.ListViewGroupCollectionEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + typeof(UITypeEditor))] + [Description("ListViewGroupsDescr")] + [MergableProperty(false)] + public ListViewGroupCollection Groups => _listView.Groups; + + /// Gets or sets the column header style. + /// One of the values. The default is . + /// The value specified is not one of the values. + [Category("Behavior")] + [DefaultValue(ColumnHeaderStyle.Clickable)] + [Description("ListViewHeaderStyleDescr")] + public ColumnHeaderStyle HeaderStyle + { + get => _listView.HeaderStyle; + set => _listView.HeaderStyle = value; } - private IPaletteDouble GetDoubleState() => Enabled ? IsActive ? StateActive : StateNormal : StateDisabled; + /// Gets or sets a value indicating whether the selected item in the control remains highlighted when the control loses focus. + /// + /// if the selected item does not appear highlighted when the control loses focus; if the selected item still appears highlighted when the control loses focus. The default is . + [Category("Behavior")] + [DefaultValue(true)] + [Description("if the selected item does not appear highlighted when the control loses focus")] + public bool HideSelection + { + get => _listView.HideSelection; + set => _listView.HideSelection = value; + } - /// Raises the DrawItem event. - /// A DrawListViewItemEventArgs that contains the event data. - protected override void OnDrawItem(DrawListViewItemEventArgs e) + /// Gets or sets a value indicating whether the text of an item or subitem has the appearance of a hyperlink when the mouse pointer passes over it. + /// + /// if the item text has the appearance of a hyperlink when the mouse passes over it; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(false)] + [Description("if the item text has the appearance of a hyperlink when the mouse passes over it")] + public bool HotTracking { - // We cannot do anything without a valid node - if (e.Item == null) - { - return; - } + get => _listView.HotTracking; + set => _listView.HotTracking = value; + } - // Do we need an image? - ImageList imgList = View switch - { - View.LargeIcon => LargeImageList, - View.Tile => LargeImageList, - View.SmallIcon => SmallImageList, - _ => null - }; - if (imgList != null) - { - _layoutImageStack.Visible = true; - _layoutImage.SeparatorSize = imgList.ImageSize; - } - else - { - _layoutImageStack.Visible = false; - } + /// Gets or sets a value indicating whether an item is automatically selected when the mouse pointer remains over the item for a few seconds. + /// + /// if an item is automatically selected when the mouse pointer hovers over it; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(false)] + [Description("if an item is automatically selected when the mouse pointer hovers over ")] + public bool HoverSelection + { + get => _listView.HoverSelection; + set => _listView.HoverSelection = value; + } - // Work out if we need to draw a state image - Image? drawStateImage = null; - if (StateImageList != null) - { - try - { - // If showing check boxes then used fixed entries from the state image list - if (CheckBoxes) - { - drawStateImage = e.Item.Checked ? StateImageList.Images[1] : StateImageList.Images[0]; - } - else - { - // Check node values - if ((e.Item.StateImageIndex >= 0) - && (e.Item.StateImageIndex < StateImageList.Images.Count) - ) - { - drawStateImage = StateImageList.Images[e.Item.StateImageIndex]; - } - } - } - catch - { - // ignored - } - } - _layoutImageCenterState.Visible = drawStateImage != null; - _layoutCheckBoxStack.Visible = (drawStateImage == null) && CheckBoxes && (View != View.Tile); - if (_layoutCheckBoxStack.Visible) - { - _drawCheckBox.CheckState = e.Item.Checked ? CheckState.Checked : CheckState.Unchecked; - } - _contentValues.ShortText = View switch - { - View.LargeIcon => e.Item.Text, - View.Tile => e.Item.Text, - View.SmallIcon => $@"{e.Item.Text} ", // Hack to get the button to "Surround" the text - _ => null - }; + /// Gets a collection containing all items in the control. + /// A that contains all the items in the control. + [Category("Behavior")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + [Editor( + "System.Windows.Forms.Design.ListViewItemCollectionEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", + typeof(UITypeEditor))] + [Description("Gets a collection containing all items in the control")] + [MergableProperty(false)] + public ListView.ListViewItemCollection Items => _listView.Items; + + + /// Gets or sets a value indicating whether the user can edit the labels of items in the control. + /// + /// if the user can edit the labels of items at run time; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(false)] + [Description("ListViewLabelEditDescr")] + public bool LabelEdit + { + get => _listView.LabelEdit; + set => _listView.LabelEdit = value; + } - // By default the button is in the normal state - PaletteState buttonState; + /// Gets or sets a value indicating whether item labels wrap when items are displayed in the control as icons. + /// + /// if item labels wrap when items are displayed as icons; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(true)] + [Localizable(true)] + [Description("if item labels wrap when items are displayed as icons")] + public bool LabelWrap + { + get => _listView.LabelWrap; + set => _listView.LabelWrap = value; + } - if (e.State.HasFlag(ListViewItemStates.Grayed)) - { - buttonState = PaletteState.Disabled; - } - else - { - // If selected then show as a checked item - if (e.Item.Selected) - { - _drawButton.Checked = true; + /// Gets or sets the to use when displaying items as large icons in the control. + /// An that contains the icons to use when the property is set to . The default is . + [Category("Behavior")] + [DefaultValue(null)] + [Description("contains the icons to use")] + public ImageList? LargeImageList + { + get => _listView.LargeImageList; + set => _listView.LargeImageList = value; + } - buttonState = e.State.HasFlag(ListViewItemStates.Hot) - ? PaletteState.CheckedTracking - : PaletteState.CheckedNormal; - } - else - { - _drawButton.Checked = false; + /// Gets or sets the sorting comparer for the control. + /// An that represents the sorting comparer for the control. + [Category("Behavior")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("sorting comparer for the control")] + public IComparer? ListViewItemSorter + { + get => _listView.ListViewItemSorter; + set => _listView.ListViewItemSorter = value; + } - buttonState = e.State.HasFlag(ListViewItemStates.Hot) - ? PaletteState.Tracking - : PaletteState.Normal; - } + /// Gets or sets a value indicating whether multiple items can be selected. + /// + /// if multiple items in the control can be selected at one time; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(true)] + [Description("if multiple items in the control can be selected at one time")] + public bool MultiSelect + { + get => _listView.MultiSelect; + set => _listView.MultiSelect = value; + } - // Do we need to show item as having the focus - var hasFocus = e.Item.Focused; + /// Gets or sets a value indicating whether the control is laid out from right to left. + /// + /// to indicate the control is laid out from right to left; otherwise, . + [Category("Appearance")] + [Localizable(true)] + [DefaultValue(false)] + [Description("control is laid out from right to left")] + public bool RightToLeftLayout + { + get => _listView.RightToLeftLayout; + set => _listView.RightToLeftLayout = value; + } - _overrideNormal.Apply = hasFocus; - _overrideTracking.Apply = hasFocus; - _overridePressed.Apply = hasFocus; - _overrideCheckedTracking.Apply = hasFocus; - _overrideCheckedNormal.Apply = hasFocus; - _overrideCheckedPressed.Apply = hasFocus; - } + /// Gets or sets a value indicating whether a scroll bar is added to the control when there is not enough room to display all items. + /// + /// if scroll bars are added to the control when necessary to allow the user to see all the items; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(true)] + [Description("if scroll bars are added to the control when necessary to allow the user to see all the items")] + public bool Scrollable + { + get => _listView.Scrollable; + set => _listView.Scrollable = value; + } + + /// Gets the indexes of the selected items in the control. + /// A that contains the indexes of the selected items. If no items are currently selected, an empty is returned. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public ListView.SelectedIndexCollection SelectedIndices => _listView.SelectedIndices; + + /// Gets the items that are selected in the control. + /// A that contains the items that are selected in the control. If no items are currently selected, an empty is returned. + [Category("Appearance")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("Gets the items that are selected in the control")] + public ListView.SelectedListViewItemCollection SelectedItems => _listView.SelectedItems; + + /// Gets or sets a value indicating whether items are displayed in groups. + /// + /// to display items in groups; otherwise, . The default value is . + [Category("Behavior")] + [DefaultValue(true)] + [Description("to display items in groups")] + public bool ShowGroups + { + get => _listView.ShowGroups; + set => _listView.ShowGroups = value; + } + + /// Gets or sets the to use when displaying items as small icons in the control. + /// An that contains the icons to use when the property is set to . The default is . + [Category("Behavior")] + [DefaultValue(null)] + [Description("use when displaying items as small icons in the control")] + public ImageList? SmallImageList + { + get => _listView.SmallImageList; + set => _listView.SmallImageList = value; + } + + /// Gets or sets a value indicating whether ToolTips are shown for the objects contained in the . + /// + /// if ToolTips should be shown; otherwise, . The default is . + [Category("Behavior")] + [DefaultValue(false)] + [Description("ToolTips should be shown")] + public bool ShowItemToolTips + { + get => _listView.ShowItemToolTips; + set => _listView.ShowItemToolTips = value; + } - // Update the view with the calculated state - _drawButton.ElementState = buttonState; + /// Gets or sets the sort order for items in the control. + /// One of the values. The default is . + /// The value specified is not one of the values. + [Category("Behavior")] + [DefaultValue(SortOrder.None)] + [Description("ListViewSortingDescr")] + public SortOrder Sorting + { + get => _listView.Sorting; + set => _listView.Sorting = value; + } + + /// Gets or sets the associated with application-defined states in the control. + /// An that contains a set of state images that can be used to indicate an application-defined state of an item. The default is . + [Category("CatBehavior")] + [DefaultValue(null)] + [Description("ListViewStateImageListDescr")] + public ImageList? StateImageList + { + get => _listView.StateImageList; + set => _listView.StateImageList = value; + } + + /// Gets or sets the size of the tiles shown in tile view. + /// A that contains the new tile size. + [Category("Appearance")] + [Browsable(true)] + [Description("contains the new tile size")] + public Size TileSize + { + get => _listView.TileSize; + set => _listView.TileSize = value; + } + private bool ShouldSerializeTileSize() => !TileSize.Equals(Size.Empty); + + /// Gets or sets the first visible item in the control. + /// A that represents the first visible item in the control. + /// The property is set to , , or . + [Category("Appearance")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Description("ListViewTopItemDescr")] + public ListViewItem? TopItem + { + get => _listView.TopItem; + set => _listView.TopItem = value; + } + + /// Gets or sets how items are displayed in the control. + /// One of the values. The default is . + /// The value specified is not one of the values. + [Category("Appearance")] + [DefaultValue(View.LargeIcon)] + [Description("ListViewViewDescr")] + public View View + { + get => _listView.View; + set => _listView.View = value; + } + + /* TODO: Need to wire up the virtual events as well + /// Gets or sets the number of objects contained in the list when in virtual mode. + /// The number of objects contained in the when in virtual mode. + /// + /// is set to a value less than 0. + /// + /// is set to , is greater than 0, and is not handled. + [Category("Behavior")] + [DefaultValue(0)] + [RefreshProperties(RefreshProperties.Repaint)] + [Description("ListViewVirtualListSizeDescr")] + public int VirtualListSize + { + get => _listView.VirtualListSize; + set => _listView.VirtualListSize = value; + } + + /// Gets or sets a value indicating whether you have provided your own data-management operations for the control. + /// + /// if uses data-management operations that you provide; otherwise, . The default is . + /// + /// is set to and one of the following conditions exist: + /// + /// is greater than 0 and is not handled. + /// -or- + /// + /// , , or contains items. + /// -or- + /// + /// Edits are made to . + [Category("Behavior")] + [DefaultValue(false)] + [RefreshProperties(RefreshProperties.Repaint)] + [Description("ListViewVirtualModeDescr")] + public bool VirtualMode + { + get => _listView.VirtualMode; + set => _listView.VirtualMode = value; + } + */ + + /// Arranges items in the control when they are displayed as icons with a specified alignment setting. + /// One of the values. + /// The value specified in the parameter is not a member of the enumeration. + public void ArrangeIcons(ListViewAlignment value) => _listView.ArrangeIcons(value); + /// Arranges items in the control when they are displayed as icons based on the value of the property. + public void ArrangeIcons() => _listView.ArrangeIcons(ListViewAlignment.Default); + + /// Resizes the width of the columns as indicated by the resize style. + /// One of the values. + /// + /// is called with a value other than when is not set to . + public void AutoResizeColumns(ColumnHeaderAutoResizeStyle headerAutoResize) => + _listView.AutoResizeColumns(headerAutoResize); + + /// Resizes the width of the given column as indicated by the resize style. + /// The zero-based index of the column to resize. + /// One of the values. + /// + /// is greater than 0 when is + /// -or- + /// is less than 0 or greater than the number of columns set. + /// + /// is not a member of the enumeration. + public void AutoResizeColumn(int columnIndex, ColumnHeaderAutoResizeStyle headerAutoResize) => _listView.AutoResizeColumn(columnIndex, headerAutoResize); + + /// Removes all items and columns from the control. + public void Clear() => _listView.Clear(); + + /// Finds the first that begins with the specified text value. + /// The text to search for. + /// The first that begins with the specified text value. + public ListViewItem? FindItemWithText(string text) => _listView.FindItemWithText(text); + + /// Finds the first or , if indicated, that begins with the specified text value. The search starts at the specified index. + /// The text to search for. + /// + /// to include subitems in the search; otherwise, . + /// The index of the item at which to start the search. + /// The first that begins with the specified text value. + /// + /// is less 0 or more than the number items in the . + public ListViewItem? FindItemWithText(string text, bool includeSubItemsInSearch, int startIndex) => + _listView.FindItemWithText(text, includeSubItemsInSearch, startIndex); + + /// Finds the first or , if indicated, that begins with the specified text value. The search starts at the specified index. + /// The text to search for. + /// + /// to include subitems in the search; otherwise, . + /// The index of the item at which to start the search. + /// + /// to allow partial matches; otherwise, . + /// The first that begins with the specified text value. + /// + /// is less than 0 or more than the number of items in the . + public ListViewItem? FindItemWithText( + string text, + bool includeSubItemsInSearch, + int startIndex, + bool isPrefixSearch) => + _listView.FindItemWithText(text, includeSubItemsInSearch, startIndex, isPrefixSearch); + + /// Finds the next item from the given point, searching in the specified direction + /// One of the values. + /// The point at which to begin searching. + /// The that is closest to the given point, searching in the specified direction. + /// + /// is set to a value other than or . + public ListViewItem? FindNearestItem(SearchDirectionHint dir, Point point) => + _listView.FindNearestItem(dir, point); + + /// Finds the next item from the given x- and y-coordinates, searching in the specified direction. + /// One of the values. + /// The x-coordinate for the point at which to begin searching. + /// The y-coordinate for the point at which to begin searching. + /// The that is closest to the given coordinates, searching in the specified direction. + /// + /// is set to a value other than or . + public ListViewItem? FindNearestItem(SearchDirectionHint searchDirection, int x, int y) => + _listView.FindNearestItem(searchDirection, x, y); + + /// Retrieves the item at the specified location. + /// The x-coordinate of the location to search for an item (expressed in client coordinates). + /// The y-coordinate of the location to search for an item (expressed in client coordinates). + /// A that represents the item at the specified position. If there is no item at the specified location, the method returns . + public ListViewItem? GetItemAt(int x, int y) => _listView.GetItemAt(x, y); + + /// Retrieves the bounding rectangle for a specific item within the list view control. + /// The zero-based index of the item within the whose bounding rectangle you want to return. + /// A that represents the bounding rectangle of the specified . + public Rectangle GetItemRect(int index) => this.GetItemRect(index, ItemBoundsPortion.Entire); + + /// Retrieves the specified portion of the bounding rectangle for a specific item within the list view control. + /// The zero-based index of the item within the whose bounding rectangle you want to return. + /// One of the values that represents a portion of the for which to retrieve the bounding rectangle. + /// A that represents the bounding rectangle for the specified portion of the specified . + public Rectangle GetItemRect(int index, ItemBoundsPortion portion) => _listView.GetItemRect(index, portion); + + /// Provides item information, given a point. + /// The at which to retrieve the item information. The coordinates are relative to the upper-left corner of the control. + /// The item information, given a point. + /// The point contains coordinates that are less than 0. + public ListViewHitTestInfo HitTest(Point point) => this.HitTest(point.X, point.Y); + + /// Provides item information, given x- and y-coordinates. + /// The x-coordinate at which to retrieve the item information. The coordinate is relative to the upper-left corner of the control. + /// The y-coordinate at which to retrieve the item information. The coordinate is relative to the upper-left corner of the control. + /// The item information, given x- and y- coordinates. + /// The x- or y-coordinate is less than 0. + public ListViewHitTestInfo HitTest(int x, int y) => _listView.HitTest(x, y); + + /// Forces a range of objects to be redrawn. + /// The index for the first item in the range to be redrawn. + /// The index for the last item of the range to be redrawn. + /// + /// to invalidate the range of items; to invalidate and repaint the items. + /// + /// or is less than 0, greater than or equal to the number of items in the or, if in virtual mode, greater than the value of . + /// -or- + /// The given is greater than the + [EditorBrowsable(EditorBrowsableState.Advanced)] + public void RedrawItems(int startIndex, int endIndex, bool invalidateOnly) => + _listView.RedrawItems(startIndex, endIndex, invalidateOnly); + + /// Sorts the items of the list view. + public void Sort() => _listView.Sort(); + + /// Returns a string representation of the control. + /// A string that states the control type, the count of items in the control, and the type of the first item in the , if the count is not 0. + public override string ToString() => _listView.ToString(); + + /// + /// Maintains performance while items are added to the ListBox one at a time by preventing the control from drawing until the EndUpdate method is called. + /// + public void BeginUpdate() => _listView.BeginUpdate(); + + /// + /// Resumes painting the ListBox control after painting is suspended by the BeginUpdate method. + /// + public void EndUpdate() => _listView.EndUpdate(); + + /// Ensures that the specified item is visible within the control, scrolling the contents of the control if necessary. + /// The zero-based index of the item to scroll into view. + public void EnsureVisible(int index) => _listView.EnsureVisible(index); + + /// + /// Gets access to the common appearance entries that other states can override. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining common appearance that other states can override.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTreeStateRedirect StateCommon { get; } + + private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; + + /// + /// Gets access to the disabled appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining disabled appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTreeState StateDisabled { get; } + + private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; + + /// + /// Gets access to the normal appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining normal appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTreeState StateNormal { get; } + + private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; + + /// + /// Gets access to the active appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining active appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteDouble StateActive { get; } + + private bool ShouldSerializeStateActive() => !StateActive.IsDefault; + + /// + /// Gets access to the hot tracking item appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining hot tracking item appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTreeNodeTriple StateTracking { get; } + + private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; + + /// + /// Gets access to the normal checked item appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining normal checked item appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTreeNodeTriple StateCheckedNormal { get; } + + private bool ShouldSerializeStateCheckedNormal() => !StateCheckedNormal.IsDefault; + + /// + /// Gets access to the hot tracking checked item appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining hot tracking checked item appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTreeNodeTriple StateCheckedTracking { get; } + + private bool ShouldSerializeStateCheckedTracking() => !StateCheckedTracking.IsDefault; - // Grab the raw device context for the graphics instance - var hdc = e.Graphics.GetHdc(); + /// + /// Gets and sets Determines if the control is always active or only when the mouse is over the control or has focus. + /// + [Category(@"Visuals")] + [Description( + @"Determines if the control is always active or only when the mouse is over the control or has focus.")] + [DefaultValue(false)] + public bool AlwaysActive + { + get => _alwaysActive; - try + set { - Rectangle bounds = e.Bounds; - ViewLayoutDocker layoutDocker = View switch - { - View.LargeIcon => _layoutDockerCheckLarge, - View.SmallIcon => _layoutDockerSmall, - View.Tile => _layoutDockerTile, -#pragma warning disable CA2208 // Instantiate argument exceptions correctly - _ => throw new ArgumentOutOfRangeException(nameof(View)) -#pragma warning restore CA2208 // Instantiate argument exceptions correctly - }; - - using (var context = new ViewLayoutContext(this, Renderer)) + if (_alwaysActive != value) { - context.DisplayRectangle = e.Bounds; - ViewDrawPanel.Layout(context); - layoutDocker.Layout(context); + _alwaysActive = value; + Invalidate(); } + } + } - // Create bitmap that all drawing occurs onto, then we can blit it later to remove flicker - var hBitmap = PI.CreateCompatibleBitmap(hdc, bounds.Right, bounds.Bottom); + /// + /// Sets the fixed state of the control. + /// + /// Should the control be fixed as active. + public void SetFixedState(bool active) => _fixedActive = active; - // If we managed to get a compatible bitmap - if (hBitmap != IntPtr.Zero) - { - try - { - // Must use the screen device context for the bitmap when drawing into the - // bitmap otherwise the Opacity and RightToLeftLayout will not work correctly. - PI.SelectObject(_screenDC, hBitmap); + /// + /// Gets a value indicating if the input control is active. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public bool IsActive => _fixedActive ?? DesignMode || AlwaysActive || ContainsFocus || _mouseOver; - // Easier to draw using a graphics instance than a DC! - using Graphics g = Graphics.FromHdc(_screenDC); - using (var context = new RenderContext(this, g, e.Bounds, Renderer)) - { - ViewDrawPanel.Render(context); - } + /// + /// Sets input focus to the control. + /// + /// true if the input focus request was successful; otherwise, false. + public new bool Focus() => _listView.Focus(); - using (var context = new RenderContext(this, g, bounds, Renderer)) - { - layoutDocker.Render(context); - } + /// + /// Activates the control. + /// + public new void Select() => _listView.Select(); - // Do we draw an image for the node? - if (imgList != null) - { - Image? drawImage = null; - var imageCount = imgList.Images.Count; + #endregion public - try - { - // Check node values before tree level values - if (!string.IsNullOrEmpty(e.Item.ImageKey)) - { - drawImage = imgList.Images[e.Item.ImageKey]; - } - else if ((e.Item.ImageIndex >= 0) && (e.Item.ImageIndex < imageCount)) - { - drawImage = imgList.Images[e.Item.ImageIndex]; - } + #region DrawItem and SubItem - if (drawImage != null) - { - g.DrawImage(drawImage, _layoutImage.ClientRectangle); - } - } - catch - { - // ignored - } - } + private void UpdateStateAndPalettes() + { + if (!IsDisposed) + { + // Find the new state of the main view element + PaletteState state = Enabled + ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) + : PaletteState.Disabled; + // Get the correct palette settings to use + var doubleState = GetDoubleState(); + _listView.ViewDrawPanel.SetPalettes(doubleState.PaletteBack); + _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder!); + _drawDockerOuter.Enabled = Enabled; + _listView.ViewDrawPanel.ElementState = state; + _drawDockerOuter.ElementState = state; - // Draw a node state image? - if (_layoutImageCenterState.Visible) - { - if (drawStateImage != null) - { - g.DrawImage(drawStateImage, _layoutImageState.ClientRectangle); - } - } + _listView.BackColor = doubleState.PaletteBack.GetBackColor1(state); + foreach (ListViewItem li in Items) + { + SetItemState(li); + } + } + } + + private IPaletteDouble GetDoubleState() => Enabled ? (IsActive ? StateActive : StateNormal) : StateDisabled; + + private void SetItemState(ListViewItem li) + { + // e.State == ListViewItemStates.Default + IPaletteTriple nodeState = _overrideDisabled; + PaletteState state = PaletteState.Disabled; + + if (Enabled) + { + nodeState = _overrideNormal; + state = PaletteState.Normal; + + // Do we need to show item as having the focus + var hasFocus = li.Focused; - // Now blit from the bitmap from the screen to the real dc - PI.BitBlt(hdc, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height, _screenDC, - e.Bounds.X, e.Bounds.Y, PI.SRCCOPY); + _overrideNormal.Apply = hasFocus; + _overrideTracking.Apply = hasFocus; + _overrideCheckedTracking.Apply = hasFocus; + _overrideCheckedNormal.Apply = hasFocus; + if (li.Selected) + { + if (li.Checked) + { + nodeState = _overrideCheckedTracking; + state = PaletteState.CheckedTracking; } - finally + else { - // Delete the temporary bitmap - PI.DeleteObject(hBitmap); + nodeState = _overrideTracking; + state = PaletteState.Tracking; } } - } - catch - { - e.DrawDefault = true; - } - finally - { - // Must reserve the GetHdc() call before - e.Graphics.ReleaseHdc(); + else if (li.Checked) + { + nodeState = _overrideCheckedNormal; + state = PaletteState.CheckedNormal; + } } + li.BackColor = nodeState.PaletteBack.GetBackColor1(state); + li.ForeColor = nodeState.PaletteContent!.GetContentShortTextColor1(state); + li.Font = nodeState.PaletteContent.GetContentShortTextFont(state) ?? Font; } #endregion #region Others Overrides - protected override void OnSelectedIndexChanged(EventArgs e) - { - UpdateStateAndPalettes(); - Invalidate(); - base.OnSelectedIndexChanged(e); - } /// /// Process Windows-based messages. @@ -684,7 +1289,7 @@ protected override void WndProc(ref Message m) // Do not draw the background here, always do it in the paint // instead to prevent flicker because of a two stage drawing process break; - case PI.WM_.PRINTCLIENT: + //case PI.WM_.PRINTCLIENT: //case PI.WM_.PAINT: // WmPaint(ref m); // break; @@ -716,544 +1321,280 @@ protected override void WndProc(ref Message m) mousePt = new Point(Width / 2, Height / 2); } else - { - mousePt = PointToClient(mousePt); - - // Mouse point up and left 1 pixel so that the mouse overlaps the top left corner - // of the showing context menu just like it happens for a ContextMenuStrip. - mousePt.X -= 1; - mousePt.Y -= 1; - } - - // If the mouse position is within our client area - if (ClientRectangle.Contains(mousePt)) - { - // Show the context menu - KryptonContextMenu.Show(this, PointToScreen(mousePt)); - } - } - - break; - default: - base.WndProc(ref m); - break; - } - } - - protected override void OnGotFocus(EventArgs e) - { - UpdateStateAndPalettes(); - PerformNeedPaint(true); - base.OnGotFocus(e); - } - - protected override void OnLostFocus(EventArgs e) - { - UpdateStateAndPalettes(); - PerformNeedPaint(true); - base.OnLostFocus(e); - } - - protected override void OnEnabledChanged(EventArgs e) - { - UpdateStateAndPalettes(); - PerformNeedPaint(true); - base.OnEnabledChanged(e); - } - - protected override void OnMouseEnter(EventArgs e) - { - if (!_mouseOver) - { - _mouseOver = true; - PerformNeedPaint(true); - Invalidate(); - } - base.OnMouseEnter(e); - } - - protected override void OnMouseLeave(EventArgs e) - { - if (_mouseOver) - { - _mouseOver = false; - PerformNeedPaint(true); - Invalidate(); - } - base.OnMouseLeave(e); - } - - /// - /// Releases all resources used by the Control. - /// - /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - protected override void Dispose(bool disposing) - { - if (disposing) - { - if (_screenDC != IntPtr.Zero) - { - PI.DeleteDC(_screenDC); - } - // Unhook from the palette events - if (_palette != null) - { - _palette.PalettePaint -= OnPalettePaint; - _palette = null; - } - - // Unhook from the static events, otherwise we cannot be garbage collected - KryptonManager.GlobalPaletteChanged -= OnGlobalPaletteChanged; - _localPalette = null; - } - - base.Dispose(disposing); - } - - protected override void OnNotifyMessage(Message m) - { - if (m.Msg != 0x14) - { - base.OnNotifyMessage(m); - } - } - #endregion - - #region Krypton - - /// - /// Gets and sets the background style. - /// - [Category(@"Visuals")] - [Description(@"Style used to draw the background.")] - public PaletteBackStyle BackStyle - { - get => StateCommon.BackStyle; - - set - { - if (StateCommon.BackStyle != value) - { - StateCommon.BackStyle = value; - PerformNeedPaint(true); - } - } - } - - private void ResetBackStyle() => BackStyle = PaletteBackStyle.InputControlStandalone; + { + mousePt = PointToClient(mousePt); - private bool ShouldSerializeBackStyle() => BackStyle != PaletteBackStyle.InputControlStandalone; + // Mouse point up and left 1 pixel so that the mouse overlaps the top left corner + // of the showing context menu just like it happens for a ContextMenuStrip. + mousePt.X -= 1; + mousePt.Y -= 1; + } - /// - /// Gets and sets the border style. - /// - [Category(@"Visuals")] - [Description(@"Style used to draw the border.")] - public new PaletteBorderStyle BorderStyle - { - get => StateCommon.BorderStyle; + // If the mouse position is within our client area + if (ClientRectangle.Contains(mousePt)) + { + // Show the context menu + KryptonContextMenu.Show(this, PointToScreen(mousePt)); + } + } - set - { - if (StateCommon.BorderStyle != value) - { - StateCommon.BorderStyle = value; - PerformNeedPaint(true); - } + break; + default: + base.WndProc(ref m); + break; } } - private void ResetBorderStyle() => BorderStyle = PaletteBorderStyle.InputControlStandalone; - - private bool ShouldSerializeBorderStyle() => BorderStyle != PaletteBorderStyle.InputControlStandalone; - - /// - /// Gets access to the item appearance when it has focus. - /// - [Category(@"Visuals")] - [Description(@"Overrides for defining item appearance when it has focus.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListItemTripleRedirect OverrideFocus { get; } - - private bool ShouldSerializeOverrideFocus() => !OverrideFocus.IsDefault; - - /// - /// Gets access to the check box image value overrides. - /// - [Category(@"Visuals")] - [Description(@"CheckBox image value overrides.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public CheckBoxImages Images { get; } + private void OnListViewGotFocus(object? sender, EventArgs e) + { + UpdateStateAndPalettes(); + _listView.Invalidate(); + PerformNeedPaint(true); + OnGotFocus(e); + } - [Category(@"Appearance")] - [DefaultValue(View.LargeIcon)] - [Description(@"Selects a subset of the view types that can be shown.")] - public new View View + private void OnListViewLostFocus(object? sender, EventArgs e) { - get => base.View; - set - { - if (DesignMode) - { - if (value is not (View.Details or View.List)) - { - base.View = value; - } - return; - } + UpdateStateAndPalettes(); + _listView.Invalidate(); + PerformNeedPaint(true); + OnLostFocus(e); + } - switch (value) - { - case View.Details: - throw new NotSupportedException(@"Use the Krypton DataGrid for this view type"); - case View.List: - throw new NotSupportedException(@"Use the Krypton ListBox for this view type"); - case View.LargeIcon: - StateCommon.Item.Content.ShortText.MultiLineH = PaletteRelativeAlign.Center; - StateCommon.Item.Content.ShortText.TextH = PaletteRelativeAlign.Center; - break; - case View.SmallIcon: - case View.Tile: - StateCommon.Item.Content.ShortText.MultiLineH = PaletteRelativeAlign.Inherit; - StateCommon.Item.Content.ShortText.TextH = PaletteRelativeAlign.Inherit; - break; - } - base.View = value; - } + /// + protected override void OnEnabledChanged(EventArgs e) + { + UpdateStateAndPalettes(); + PerformNeedPaint(true); + base.OnEnabledChanged(e); } - private bool ShouldSerializeImages() => !Images.IsDefault; /// - /// Gets access to the common appearance entries that other states can override. + /// Creates a new instance of the control collection for the KryptonTreeView. /// - [Category(@"Visuals")] - [Description(@"Overrides for defining common appearance that other states can override.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListStateRedirect? StateCommon { get; } - - private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; + /// A new instance of Control.ControlCollection assigned to the control. + [EditorBrowsable(EditorBrowsableState.Advanced)] + protected override ControlCollection CreateControlsInstance() => new KryptonReadOnlyControls(this); /// - /// Gets access to the disabled appearance entries. + /// Raises the PaletteChanged event. /// - [Category(@"Visuals")] - [Description(@"Overrides for defining disabled appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListState StateDisabled { get; } - - private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; + /// An EventArgs that contains the event data. + protected override void OnPaletteChanged(EventArgs e) + { + _listView.Recreate(); + UpdateStateAndPalettes(); + _listView.Invalidate(); + base.OnPaletteChanged(e); + } /// - /// Gets access to the normal appearance entries. + /// Raises the TabStop event. /// - [Category(@"Visuals")] - [Description(@"Overrides for defining normal appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListState StateNormal { get; } - - private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; + /// An EventArgs that contains the event data. + protected override void OnTabStopChanged(EventArgs e) + { + _listView.TabStop = TabStop; + base.OnTabStopChanged(e); + } /// - /// Gets access to the active appearance entries. + /// Raises the CausesValidationChanged event. /// - [Category(@"Visuals")] - [Description(@"Overrides for defining active appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDouble StateActive { get; } - - private bool ShouldSerializeStateActive() => !StateActive.IsDefault; + /// An EventArgs that contains the event data. + protected override void OnCausesValidationChanged(EventArgs e) + { + _listView.CausesValidation = CausesValidation; + base.OnCausesValidationChanged(e); + } /// - /// Gets access to the hot tracking item appearance entries. + /// Raises the HandleCreated event. /// - [Category(@"Visuals")] - [Description(@"Overrides for defining hot tracking item appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListItemTriple StateTracking { get; } + /// An EventArgs containing the event data. + protected override void OnHandleCreated(EventArgs e) + { + // Let base class do standard stuff + base.OnHandleCreated(e); - private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; + // Force the font to be set into the text box child control + PerformNeedPaint(false); - /// - /// Gets access to the pressed item appearance entries. - /// - [Category(@"Visuals")] - [Description(@"Overrides for defining pressed item appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListItemTriple StatePressed { get; } + // We need a layout to occur before any painting + InvokeLayout(); + } - private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; /// - /// Gets access to the normal checked item appearance entries. + /// Raises the MouseDown event. /// - [Category(@"Visuals")] - [Description(@"Overrides for defining normal checked item appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListItemTriple StateCheckedNormal { get; } + /// A MouseEventArgs that contains the event data. + protected override void OnMouseDown(MouseEventArgs e) + { + _mouseOver = false; - private bool ShouldSerializeStateCheckedNormal() => !StateCheckedNormal.IsDefault; + PerformNeedPaint(true); - /// - /// Gets access to the hot tracking checked item appearance entries. - /// - [Category(@"Visuals")] - [Description(@"Overrides for defining hot tracking checked item appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListItemTriple StateCheckedTracking { get; } + _listView.Invalidate(); - private bool ShouldSerializeStateCheckedTracking() => !StateCheckedTracking.IsDefault; + base.OnMouseDown(e); + } /// - /// Gets access to the pressed checked item appearance entries. + /// Gets the default size of the control. /// - [Category(@"Visuals")] - [Description(@"Overrides for defining pressed checked item appearance.")] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteListItemTriple StateCheckedPressed { get; } - - private bool ShouldSerializeStateCheckedPressed() => !StateCheckedPressed.IsDefault; + protected override Size DefaultSize => new Size(120, 96); - /// - /// Gets access to the need paint delegate. - /// - protected NeedPaintHandler NeedPaintDelegate { get; } + /// > + protected override void CreateHandle() + { + base.CreateHandle(); - /// - /// Fires the NeedPaint event. - /// - /// Does the palette change require a layout. - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Advanced)] - protected virtual void PerformNeedPaint(bool needLayout) => OnNeedPaint(this, new NeedLayoutEventArgs(needLayout)); + PI.SetWindowTheme(Handle, @"DarkMode_Explorer", null); + } /// - /// Gets or sets the palette to be applied. + /// Force the layout logic to size and position the controls. /// - [Category(@"Visuals")] - [Description(@"Palette applied to drawing.")] - public PaletteMode PaletteMode + protected void ForceControlLayout() { - [DebuggerStepThrough] - get => _paletteMode; - - set + if (!IsHandleCreated) { - if (_paletteMode != value) - { - // Action depends on new value - switch (value) - { - case PaletteMode.Custom: - // Do nothing, you must assign a palette to the - // 'Palette' property in order to get the custom mode - break; - default: - // Use the new value - _paletteMode = value; - - // Get a reference to the standard palette from its name - CacheNewPalette(KryptonManager.GetPaletteForMode(_paletteMode)); - - // Need to layout again use new palette - PerformNeedPaint(true); - Invalidate(); - break; - } - } + _forcedLayout = true; + OnLayout(new LayoutEventArgs(null, null)); + _forcedLayout = false; } } - private bool ShouldSerializePaletteMode() => PaletteMode != PaletteMode.Global; - + /// /// - /// Resets the PaletteMode property to its default value. + /// Processes a notification from palette storage of a paint and optional layout required. /// - public void ResetPaletteMode() => PaletteMode = PaletteMode.Global; - - private void OnGlobalPaletteChanged(object sender, EventArgs e) + /// Source of notification. + /// An NeedLayoutEventArgs containing event data. + protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) { - if (PaletteMode != PaletteMode.Global) + if (IsHandleCreated && !e.NeedLayout) { - return; + _listView.Invalidate(); } - // Unhook events from old palette - if (_palette != null) + else { - _palette.PalettePaint -= OnPalettePaint; + ForceControlLayout(); } - CacheNewPalette(KryptonManager.CurrentGlobalPalette); - - // Change of palette means we should repaint to show any changes - Invalidate(); + // Update palette to reflect latest state + UpdateStateAndPalettes(); + base.OnNeedPaint(sender, e); } - private void CacheNewPalette(PaletteBase? palette) + /// + /// Raises the Layout event. + /// + /// An EventArgs that contains the event data. + protected override void OnLayout(LayoutEventArgs levent) { - if (palette != _palette) - { - // Unhook from current palette events - if (_palette != null) - { - _palette.PalettePaint -= OnPalettePaint; - } - - // Remember the new palette - _palette = palette; - } + base.OnLayout(levent); - // Hook into events for the new palette - if (_palette != null) + // Only use layout logic if control is fully initialized or if being forced + // to allow a relayout or if in design mode. + if (IsHandleCreated || _forcedLayout || (DesignMode)) { - // Get the renderer associated with the palette - Renderer = _palette.GetRenderer(); - Redirector.Target = _palette; - _palette.PalettePaint += OnPalettePaint; + Rectangle fillRect = _layoutFill.FillRect; + _listView.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); } } - private void OnPalettePaint(object sender, PaletteLayoutEventArgs e) => Invalidate(); - /// - /// Processes a notification from palette storage of a paint and optional layout required. + /// Raises the MouseEnter event. /// - /// Source of notification. - /// An NeedLayoutEventArgs containing event data. - /// - protected virtual void OnNeedPaint(object? sender, [DisallowNull] NeedLayoutEventArgs e) + /// An EventArgs that contains the event data. + protected override void OnMouseEnter(EventArgs e) { - Debug.Assert(e != null); + _mouseOver = true; + PerformNeedPaint(true); + _listView.Invalidate(); + base.OnMouseEnter(e); + } - // Validate incoming reference - if (e == null) - { - throw new ArgumentNullException(nameof(e)); - } + /// + /// Raises the MouseLeave event. + /// + /// An EventArgs that contains the event data. + protected override void OnMouseLeave(EventArgs e) + { + _mouseOver = false; + PerformNeedPaint(true); + _listView.Invalidate(); + base.OnMouseLeave(e); + } - // Never try and redraw or layout when disposed are trying to dispose - if (!IsDisposed && !Disposing) + /// + protected override void OnNotifyMessage(Message m) + { + if (m.Msg != 0x14) { - - // If required, layout the control - if (e.NeedLayout && !_layoutDirty) - { - _layoutDirty = true; - } - - if (IsHandleCreated && (!_refreshAll || !e.InvalidRect.IsEmpty)) - { - // Always request the repaint immediately - if (e.InvalidRect.IsEmpty) - { - _refreshAll = true; - Invalidate(); - } - else - { - Invalidate(e.InvalidRect); - } - - } - // Update palette to reflect latest state - UpdateStateAndPalettes(); + base.OnNotifyMessage(m); } } + #endregion + /// - /// Raises the Layout event. + /// Gets and sets the background style. /// - /// A LayoutEventArgs that contains the event data. - protected override void OnLayout(LayoutEventArgs levent) + [Category(@"Visuals")] + [Description(@"Style used to draw the background.")] + public PaletteBackStyle BackStyle { - // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing) + get => StateCommon.BackStyle; + + set { - // Do we have a manager to use for laying out? - if (ViewManager != null) + if (StateCommon.BackStyle != value) { - // Prevent infinite loop by looping a maximum number of times - var max = 5; - - do - { - // Layout cannot now be dirty - _layoutDirty = false; - - // Ask the view to perform a layout - ViewManager.Layout(Renderer); - - } while (_layoutDirty && (max-- > 0)); + StateCommon.BackStyle = value; + PerformNeedPaint(true); } } - - // Let base class layout child controls - base.OnLayout(levent); } + private void ResetBackStyle() => BackStyle = PaletteBackStyle.InputControlStandalone; + + private bool ShouldSerializeBackStyle() => BackStyle != PaletteBackStyle.InputControlStandalone; /// - /// Gets and sets the button style. + /// Gets and sets the border style. /// [Category(@"Visuals")] - [Description(@"Item style.")] - public ButtonStyle ItemStyle + [Description(@"Style used to draw the border.")] + public PaletteBorderStyle BorderStyle { - get => _style; + get => StateCommon.BorderStyle; set { - if (_style != value) + if (StateCommon.BorderStyle != value) { - _style = value; - StateCommon.Item.SetStyles(_style); - OverrideFocus.Item.SetStyles(_style); + StateCommon.BorderStyle = value; PerformNeedPaint(true); } } } - private void OnContextMenuStripOpening(object sender, CancelEventArgs e) - { - // Get the actual strip instance - ContextMenuStrip cms = base.ContextMenuStrip; - - // Make sure it has the correct renderer - cms.Renderer = Renderer.RenderToolStrip(_palette); - } - - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => - // When the current krypton context menu is disposed, we should remove - // it to prevent it being used again, as that would just throw an exception - // because it has been disposed. - KryptonContextMenu = null; + private void ResetBorderStyle() => BorderStyle = PaletteBorderStyle.InputControlStandalone; - private void OnContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); + private bool ShouldSerializeBorderStyle() => BorderStyle != PaletteBorderStyle.InputControlStandalone; /// - /// Called when a context menu has just been closed. + /// Gets access to the item appearance when it has focus. /// - protected virtual void ContextMenuClosed() - { - } - - #endregion - - #region Implementation - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void SetItemCornerRoundingRadius(float? radius) - { - _itemCornerRoundingRadius = radius ?? GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; + [Category(@"Visuals")] + [Description(@"Overrides for defining item appearance when it has focus.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteTreeNodeTripleRedirect OverrideFocus { get; } - StateCommon.Item.Border.Rounding = _itemCornerRoundingRadius; - } + private bool ShouldSerializeOverrideFocus() => !OverrideFocus.IsDefault; - #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonManager.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonManager.cs index e4c7cf458..1cc60cfd6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonManager.cs @@ -1,12 +1,12 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion @@ -25,7 +25,9 @@ public sealed class KryptonManager : Component #region Static Fields // Initialize the global state private static bool _globalApplyToolstrips = true; - private static bool _globalAllowFormChrome = true; + private static bool _globalUseThemeFormChromeBorderWidth = true; + internal static bool _globalUseKryptonFileDialogs = true; + private static Font? _baseFont; // Initialize the default modes @@ -35,10 +37,6 @@ public sealed class KryptonManager : Component private static PaletteProfessionalOffice2003? _paletteProfessionalOffice2003; private static PaletteProfessionalSystem? _paletteProfessionalSystem; - private static PaletteBase? _customPalette; - - private static KryptonLanguageManager? _languageManager; - #region Office 2007 Themes private static PaletteOffice2007DarkGray? _paletteOffice2007DarkGray; @@ -96,6 +94,7 @@ public sealed class KryptonManager : Component private static PaletteMicrosoft365DarkGray? _paletteMicrosoft365DarkGray; private static PaletteMicrosoft365Black? _paletteMicrosoft365Black; private static PaletteMicrosoft365BlackDarkMode? _paletteMicrosoft365BlackDarkMode; + private static PaletteMicrosoft365BlackDarkModeAlternate? _paletteMicrosoft365BlackDarkModeAlternate; private static PaletteMicrosoft365Blue? _paletteMicrosoft365Blue; private static PaletteMicrosoft365BlueDarkMode? _paletteMicrosoft365BlueDarkMode; private static PaletteMicrosoft365BlueLightMode? _paletteMicrosoft365BlueLightMode; @@ -132,7 +131,6 @@ public sealed class KryptonManager : Component private static RenderVisualStudio2010WithMicrosoft365? _renderVisualStudio2010WithMicrosoft365; private static RenderVisualStudio? _renderVisualStudio; - private static KryptonCustomPaletteManager? _customPaletteManager; #endregion #region Static Events @@ -144,11 +142,11 @@ public sealed class KryptonManager : Component public static event EventHandler? GlobalPaletteChanged; /// - /// Occurs when the AllowFormChrome property changes. + /// Occurs when the UseThemeFormChromeBorderWidth property changes. /// [Category(@"Property Changed")] - [Description(@"Occurs when the value of the GlobalAllowFormChrome property is changed.")] - public static event EventHandler? GlobalAllowFormChromeChanged; + [Description(@"Occurs when the value of the GlobalUseThemeFormChromeBorderWidth property is changed.")] + public static event EventHandler? GlobalUseThemeFormChromeBorderWidthChanged; #endregion #region Identity @@ -164,9 +162,9 @@ static KryptonManager() /// /// Initialize a new instance of the KryptonManager class. /// - public KryptonManager() => - // This may not be the first form / object to init, so set to the global static - GlobalPaletteMode = InternalGlobalPaletteMode; + public KryptonManager() + { + } /// /// Initialize a new instance of the KryptonManager class. @@ -187,7 +185,7 @@ public KryptonManager([DisallowNull] IContainer container) container.Add(this); } - /// + /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. @@ -206,156 +204,137 @@ protected override void Dispose(bool disposing) /// /// Have any of the global values been modified /// + [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool IsDefault => !(ShouldSerializeGlobalPaletteMode() || - ShouldSerializeGlobalPalette() || + public bool IsDefault => !(ShouldSerializeGlobalCustomPalette() || ShouldSerializeGlobalApplyToolstrips() || - ShouldSerializeGlobalAllowFormChrome() /*|| - ShouldSerializeToolkitStringValues() */); + ShouldSerializeGlobalUseThemeFormChromeBorderWidth() || + ShouldSerializeToolkitStrings() || + ShouldSerializeUseKryptonFileDialogs() || + ShouldSerializeBaseFont() || + ShouldSerializeGlobalPaletteMode()); /// /// Reset All values /// public void Reset() { - ResetGlobalPaletteMode(); - ResetGlobalPalette(); + ResetGlobalCustomPalette(); ResetGlobalApplyToolstrips(); - ResetGlobalAllowFormChrome(); - //ResetToolkitStringValues(); - - _customPalette = null; - - _languageManager = null; + ResetGlobalUseThemeFormChromeBorderWidth(); + ResetToolkitStrings(); + ResetUseKryptonFileDialogs(); + ResetBaseFont(); + ResetGlobalPaletteMode(); } /// /// Gets or sets the global palette used for drawing. /// - [Category(@"Visuals")] - [Description(@"Global palette applied to drawing.")] + [Category(@"GlobalPalette")] + [Description(@"Easy Set for the theme palette")] [DefaultValue(PaletteMode.Microsoft365Blue)] public PaletteMode GlobalPaletteMode { - get => InternalGlobalPaletteMode; - + get => CurrentGlobalPaletteMode; set { - // Only interested in changes of value - if (InternalGlobalPaletteMode != value) + if (value != CurrentGlobalPaletteMode) { - // Action depends on the value - switch (value) + if (value != PaletteMode.Custom) + { + // Get a reference to the standard palette from its name + SetPalette(GetPaletteForMode(value)); + } + CurrentGlobalPaletteMode = value; + if (_baseFont != null) + { + CurrentGlobalPalette.BaseFont = _baseFont; + } + + if (value != PaletteMode.Custom) { - case PaletteMode.Custom: - // Do nothing, you must assign a palette to the - // 'GlobalPalette' property in order to get the custom mode - break; - default: - // Cache the new values - PaletteMode tempMode = InternalGlobalPaletteMode; - PaletteBase? tempPalette = InternalGlobalPalette; - - // Use the new value - InternalGlobalPaletteMode = value; - InternalGlobalPalette = null; - - // If the new value creates a circular reference - if (HasCircularReference()) - { - // Restore the original values before throwing - InternalGlobalPaletteMode = tempMode; - InternalGlobalPalette = tempPalette; - - throw new ArgumentOutOfRangeException(nameof(value), - @"Cannot use palette that would create a circular reference"); - } - else - { - // Restore the original global palette as 'SetPalette' will not - // work correctly unless it still has the old value in place - InternalGlobalPalette = tempPalette; - } - - // Get a reference to the standard palette from its name - SetPalette(CurrentGlobalPalette); - - // Raise the palette changed event - OnGlobalPaletteChanged(EventArgs.Empty); - break; + // Raise the palette changed event + OnGlobalPaletteChanged(EventArgs.Empty); } } } } - - private bool ShouldSerializeGlobalPaletteMode() => GlobalPaletteMode != PaletteMode.Microsoft365Blue; - - private void ResetGlobalPaletteMode() => GlobalPaletteMode = PaletteMode.Microsoft365Blue; + private bool ShouldSerializeGlobalPaletteMode() => GlobalPaletteMode != ThemeManager.DefaultGlobalPalette; + private void ResetGlobalPaletteMode() => GlobalPaletteMode = ThemeManager.DefaultGlobalPalette; /// /// Gets and sets the global custom applied to drawing. /// - [Category(@"Visuals")] + [Category(@"GlobalPalette")] [Description(@"Global custom palette applied to drawing.")] [DefaultValue(null)] - public PaletteBase? GlobalPalette + public KryptonCustomPaletteBase? GlobalCustomPalette { - get => InternalGlobalPalette; + get => CurrentGlobalPalette as KryptonCustomPaletteBase; set { // Only interested in changes of value - if (InternalGlobalPalette != value) + if (CurrentGlobalPalette != value) { - // Cache the current values - PaletteMode tempMode = InternalGlobalPaletteMode; - PaletteBase? tempPalette = InternalGlobalPalette; - - // Use the new values - InternalGlobalPaletteMode = (value == null) ? PaletteMode.Microsoft365Blue : PaletteMode.Custom; - InternalGlobalPalette = value; - - // If the new value creates a circular reference - if (HasCircularReference()) + if (value != null) { - // Restore the original values - InternalGlobalPaletteMode = tempMode; - InternalGlobalPalette = tempPalette; - - throw new ArgumentOutOfRangeException(nameof(value), @"Cannot use palette that would create a circular reference"); + // If no custom palette is required + CurrentGlobalPalette = value; + // Use the provided palette value + SetPalette(value); + CurrentGlobalPaletteMode = GetModeForPalette(value); + // Notify the KryptonManager that there is a custom palette assigned to it + // Fixes bug: https://github.com/Krypton-Suite/Standard-Toolkit/issues/1092 + GlobalPaletteMode = PaletteMode.Custom; } else { - // Restore the original global palette as 'SetPalette' will not - // work correctly unless it still has the old value in place - InternalGlobalPalette = tempPalette; + ResetGlobalPaletteMode(); + CurrentGlobalPalette = GetPaletteForMode(GlobalPaletteMode); } - - // Use the provided palette value - SetPalette(value); - - // If no custom palette is required - if (value == null) - { - // Get a reference to current global palette defined by the mode - SetPalette(CurrentGlobalPalette); - } - else - { - // No longer using a standard palette - InternalGlobalPaletteMode = PaletteMode.Custom; - } - // Raise the palette changed event OnGlobalPaletteChanged(EventArgs.Empty); } } } + private void ResetGlobalCustomPalette() + { + GlobalCustomPalette = null; + ResetGlobalPaletteMode(); + } + private bool ShouldSerializeGlobalCustomPalette() => GlobalCustomPalette != null; - private bool ShouldSerializeGlobalPalette() => GlobalPalette != null; + /// Override the Current global palette font. + [Category(@"GlobalPalette")] + [Description(@"Override the Current global palette font.")] + [AllowNull] + public Font BaseFont + { + get => _baseFont ?? CurrentGlobalPalette.BaseFont; - private void ResetGlobalPalette() => GlobalPaletteMode = PaletteMode.Microsoft365Blue; + set + { + if (value != null) + { + _baseFont = value; + CurrentGlobalPalette.BaseFont = value; + } + else + { + ResetBaseFont(); + } + } + } + + private void ResetBaseFont() + { + _baseFont = null; + CurrentGlobalPalette.ResetBaseFont(); + } + private bool ShouldSerializeBaseFont() => _baseFont != null; /// /// Gets or sets a value indicating if the palette colors are applied to the tool-strips. @@ -368,67 +347,58 @@ public bool GlobalApplyToolstrips get => ApplyToolstrips; set => ApplyToolstrips = value; } - private bool ShouldSerializeGlobalApplyToolstrips() => !GlobalApplyToolstrips; - private void ResetGlobalApplyToolstrips() => GlobalApplyToolstrips = true; - /// - /// Gets or sets a value indicating if KryptonForm instances are allowed to show custom chrome. - /// + /// Gets or sets a value indicating whether [use krypton file dialogs for internal openings like CustomPalette Import]. + /// true if [use krypton file dialogs]; otherwise, false. [Category(@"Visuals")] - [Description(@"Should KryptonForm instances be allowed to show custom chrome.")] + [Description(@"Should use krypton file dialogs for internal openings like CustomPalette Import")] [DefaultValue(true)] - public bool GlobalAllowFormChrome + public bool UseKryptonFileDialogs { - get => AllowFormChrome; - set => AllowFormChrome = value; + get => _globalUseKryptonFileDialogs; + set => _globalUseKryptonFileDialogs = value; } + private bool ShouldSerializeUseKryptonFileDialogs() => !UseKryptonFileDialogs; + private void ResetUseKryptonFileDialogs() => UseKryptonFileDialogs = true; - private bool ShouldSerializeGlobalAllowFormChrome() => !GlobalAllowFormChrome; - private void ResetGlobalAllowFormChrome() => GlobalAllowFormChrome = true; - - [Category(@"Visuals")] - [Description(@"")] - [DefaultValue(null)] - public KryptonCustomPaletteManager? CustomPaletteManager - { - get => _customPaletteManager; - set => _customPaletteManager = value; - } - - /// Specify a custom palette outside the existing palettes. - /// A custom palette. + /// + /// Gets or sets a value indicating if KryptonForm instances are allowed to UseThemeFormChromeBorderWidth. + /// [Category(@"Visuals")] - [Description(@"Specify a custom palette outside the existing palettes.")] - [DefaultValue(null)] - public PaletteBase? CustomPalette + [Description(@"Should KryptonForm instances be allowed to UseThemeFormChromeBorderWidth.")] + [DefaultValue(true)] + public bool GlobalUseThemeFormChromeBorderWidth { - get => _customPalette; - set => _customPalette = value; + get => UseThemeFormChromeBorderWidth; + set => UseThemeFormChromeBorderWidth = value; } + private bool ShouldSerializeGlobalUseThemeFormChromeBorderWidth() => !GlobalUseThemeFormChromeBorderWidth; + private void ResetGlobalUseThemeFormChromeBorderWidth() => GlobalUseThemeFormChromeBorderWidth = true; - /// Gets or sets the language manager. - /// The language manager. - [Category(@"Visuals")] - [Description(@"")] - [DefaultValue(null)] - public KryptonLanguageManager? LanguageManager { get => _languageManager; set => _languageManager = value; } - - /*/// Gets the global toolkit strings. - /// The global toolkit strings. - [Category(@"Visuals")] - [Description(@"Collection of toolkit strings.")] + /// Gets the toolkit strings that can be localised. + [Category(@"Data")] + [Description(@"A collection of global toolkit strings that can be localised.")] [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public ToolkitStringValues ToolkitStringValues => _toolkitStringValues; + public KryptonGlobalToolkitStrings ToolkitStrings => Strings; + private bool ShouldSerializeToolkitStrings() => !Strings.IsDefault; + private void ResetToolkitStrings() => Strings.Reset(); + + #endregion - private bool ShouldSerializeToolkitStringValues() => !_toolkitStringValues.IsDefault; + #region Static Properties - /// Resets the toolkit string values. - public void ResetToolkitStringValues() => _toolkitStringValues.Reset();*/ + /// Gets the strings. + /// The strings. + public static KryptonGlobalToolkitStrings Strings { get; } = new KryptonGlobalToolkitStrings(); + + /// Gets the images. + /// The images. + public static KryptonImageStorage Images { get; } = new KryptonImageStorage(); #endregion @@ -462,151 +432,36 @@ public static bool ApplyToolstrips } #endregion - #region Static AllowFormChrome + #region Static UseThemeFormChromeBorderWidth /// /// Gets and sets the global flag that decides if form chrome should be customized. /// - public static bool AllowFormChrome + public static bool UseThemeFormChromeBorderWidth { - get => _globalAllowFormChrome; + get => _globalUseThemeFormChromeBorderWidth; set { // Only interested if the value changes - if (_globalAllowFormChrome != value) + if (_globalUseThemeFormChromeBorderWidth != value) { // Use new value - _globalAllowFormChrome = value; + _globalUseThemeFormChromeBorderWidth = value; // Fire change event - OnGlobalAllowFormChromeChanged(EventArgs.Empty); + OnGlobalUseThemeFormChromeBorderWidthChanged(EventArgs.Empty); } } } #endregion #region Static Palette - /// - /// Gets the current global palette instance given the manager settings. - /// - public static PaletteBase? CurrentGlobalPalette - { - get - { - switch (InternalGlobalPaletteMode) - { - case PaletteMode.ProfessionalSystem: - return PaletteProfessionalSystem; - case PaletteMode.ProfessionalOffice2003: - return PaletteProfessionalOffice2003; - case PaletteMode.Office2007DarkGray: - return PaletteOffice2007DarkGray; - case PaletteMode.Office2007Blue: - return PaletteOffice2007Blue; - case PaletteMode.Office2007BlueDarkMode: - return PaletteOffice2007BlueDarkMode; - case PaletteMode.Office2007BlueLightMode: - return PaletteOffice2007BlueLightMode; - case PaletteMode.Office2007Silver: - return PaletteOffice2007Silver; - case PaletteMode.Office2007SilverDarkMode: - return PaletteOffice2007SilverDarkMode; - case PaletteMode.Office2007SilverLightMode: - return PaletteOffice2007SilverLightMode; - case PaletteMode.Office2007White: - return PaletteOffice2007White; - case PaletteMode.Office2007Black: - return PaletteOffice2007Black; - case PaletteMode.Office2007BlackDarkMode: - return PaletteOffice2007BlackDarkMode; - case PaletteMode.Office2010DarkGray: - return PaletteOffice2010DarkGray; - case PaletteMode.Office2010Blue: - return PaletteOffice2010Blue; - case PaletteMode.Office2010BlueDarkMode: - return PaletteOffice2010BlueDarkMode; - case PaletteMode.Office2010BlueLightMode: - return PaletteOffice2010BlueLightMode; - case PaletteMode.Office2010Silver: - return PaletteOffice2010Silver; - case PaletteMode.Office2010SilverDarkMode: - return PaletteOffice2010SilverDarkMode; - case PaletteMode.Office2010SilverLightMode: - return PaletteOffice2010SilverLightMode; - case PaletteMode.Office2010White: - return PaletteOffice2010White; - case PaletteMode.Office2010Black: - return PaletteOffice2010Black; - case PaletteMode.Office2010BlackDarkMode: - return PaletteOffice2010BlackDarkMode; - case PaletteMode.Office2013DarkGray: - return PaletteOffice2013DarkGray; - case PaletteMode.Office2013LightGray: - return PaletteOffice2013LightGray; - case PaletteMode.Office2013White: - return PaletteOffice2013White; - case PaletteMode.SparkleBlue: - return PaletteSparkleBlue; - case PaletteMode.SparkleBlueDarkMode: - return PaletteSparkleBlueDarkMode; - case PaletteMode.SparkleBlueLightMode: - return PaletteSparkleBlueLightMode; - case PaletteMode.SparkleOrange: - return PaletteSparkleOrange; - case PaletteMode.SparkleOrangeDarkMode: - return PaletteSparkleOrangeDarkMode; - case PaletteMode.SparkleOrangeLightMode: - return PaletteSparkleOrangeLightMode; - case PaletteMode.SparklePurple: - return PaletteSparklePurple; - case PaletteMode.SparklePurpleDarkMode: - return PaletteSparklePurpleDarkMode; - case PaletteMode.SparklePurpleLightMode: - return PaletteSparklePurpleLightMode; - case PaletteMode.Microsoft365Black: - return PaletteMicrosoft365Black; - case PaletteMode.Microsoft365BlackDarkMode: - return PaletteMicrosoft365BlackDarkMode; - case PaletteMode.Microsoft365Blue: - return PaletteMicrosoft365Blue; - case PaletteMode.Microsoft365BlueDarkMode: - return PaletteMicrosoft365BlueDarkMode; - case PaletteMode.Microsoft365BlueLightMode: - return PaletteMicrosoft365BlueLightMode; - case PaletteMode.Microsoft365DarkGray: - return PaletteMicrosoft365DarkGray; - case PaletteMode.Microsoft365Silver: - return PaletteMicrosoft365Silver; - case PaletteMode.Microsoft365SilverDarkMode: - return PaletteMicrosoft365SilverDarkMode; - case PaletteMode.Microsoft365SilverLightMode: - return PaletteMicrosoft365SilverLightMode; - case PaletteMode.Microsoft365White: - return PaletteMicrosoft365White; - case PaletteMode.VisualStudio2010Render2007: - return PaletteVisualStudio2010Office2007Variation; - case PaletteMode.VisualStudio2010Render2010: - return PaletteVisualStudio2010Office2010Variation; - case PaletteMode.VisualStudio2010Render2013: - return PaletteVisualStudio2010Office2013Variation; - case PaletteMode.VisualStudio2010Render365: - return PaletteVisualStudio2010Microsoft365Variation; - case PaletteMode.Custom: - case PaletteMode.Global: - return InternalGlobalPalette; - default: - Debug.Assert(false); - return null; - } - } - } - /// /// Gets the implementation for the requested palette mode. /// /// Requested palette mode. - /// PaletteBase reference is available; otherwise false. - public static PaletteBase? GetPaletteForMode(PaletteMode mode) + /// PaletteBase reference is available; otherwise null exception. + public static PaletteBase GetPaletteForMode(PaletteMode mode) { switch (mode) { @@ -616,8 +471,9 @@ public static PaletteBase? CurrentGlobalPalette return PaletteProfessionalOffice2003; case PaletteMode.Office2007Blue: return PaletteOffice2007Blue; - case PaletteMode.Office2007DarkGray: - return PaletteOffice2007DarkGray; + // TODO: Re-enable this once completed + // case PaletteMode.Office2007DarkGray: + // return PaletteOffice2007DarkGray; case PaletteMode.Office2007BlueDarkMode: return PaletteOffice2007BlueDarkMode; case PaletteMode.Office2007BlueLightMode: @@ -632,8 +488,9 @@ public static PaletteBase? CurrentGlobalPalette return PaletteOffice2007White; case PaletteMode.Office2007Black: return PaletteOffice2007Black; - case PaletteMode.Office2010DarkGray: - return PaletteOffice2010DarkGray; + // TODO: Re-enable this once completed + // case PaletteMode.Office2010DarkGray: + // return PaletteOffice2010DarkGray; case PaletteMode.Office2007BlackDarkMode: return PaletteOffice2007BlackDarkMode; case PaletteMode.Office2010Blue: @@ -654,10 +511,11 @@ public static PaletteBase? CurrentGlobalPalette return PaletteOffice2010Black; case PaletteMode.Office2010BlackDarkMode: return PaletteOffice2010BlackDarkMode; - case PaletteMode.Office2013DarkGray: - return PaletteOffice2013DarkGray; - case PaletteMode.Office2013LightGray: - return PaletteOffice2013LightGray; + // TODO: Re-enable this once completed + // case PaletteMode.Office2013DarkGray: + // return PaletteOffice2013DarkGray; + // case PaletteMode.Office2013LightGray: + // return PaletteOffice2013LightGray; case PaletteMode.Office2013White: return PaletteOffice2013White; case PaletteMode.SparkleBlue: @@ -682,14 +540,17 @@ public static PaletteBase? CurrentGlobalPalette return PaletteMicrosoft365Black; case PaletteMode.Microsoft365BlackDarkMode: return PaletteMicrosoft365BlackDarkMode; + case PaletteMode.Microsoft365BlackDarkModeAlternate: + return PaletteMicrosoft365BlackDarkModeAlternate; case PaletteMode.Microsoft365BlueDarkMode: return PaletteMicrosoft365BlueDarkMode; case PaletteMode.Microsoft365BlueLightMode: return PaletteMicrosoft365BlueLightMode; case PaletteMode.Microsoft365Blue: return PaletteMicrosoft365Blue; - case PaletteMode.Microsoft365DarkGray: - return PaletteMicrosoft365DarkGray; + // TODO: Re-enable this once completed + // case PaletteMode.Microsoft365DarkGray: + // return PaletteMicrosoft365DarkGray; case PaletteMode.Microsoft365Silver: return PaletteMicrosoft365Silver; case PaletteMode.Microsoft365SilverDarkMode: @@ -698,8 +559,6 @@ public static PaletteBase? CurrentGlobalPalette return PaletteMicrosoft365SilverLightMode; case PaletteMode.Microsoft365White: return PaletteMicrosoft365White; - case PaletteMode.Global: - return CurrentGlobalPalette; case PaletteMode.VisualStudio2010Render2007: return PaletteVisualStudio2010Office2007Variation; case PaletteMode.VisualStudio2010Render2010: @@ -708,13 +567,44 @@ public static PaletteBase? CurrentGlobalPalette return PaletteVisualStudio2010Office2013Variation; case PaletteMode.VisualStudio2010Render365: return PaletteVisualStudio2010Microsoft365Variation; + case PaletteMode.Custom: + case PaletteMode.Global: + return CurrentGlobalPalette; default: Debug.Assert(false); - return null; + throw new ArgumentOutOfRangeException(nameof(mode), @"mode must be PaletteMode value."); } } + /// + /// Gets the implementation for the requested palette mode. + /// + /// Requested palette to mode. + /// PaletteMode is available; otherwise Custom. + public static PaletteMode GetModeForPalette(PaletteBase? palette) + { + if (palette is KryptonCustomPaletteBase) + { + return PaletteMode.Custom; + } + + object? mode = null; + if (palette != null) + { + var modeConverter = new Krypton.Toolkit.Converters.PaletteClassTypeConverter(); + + mode = modeConverter.ConvertFrom(palette.GetType()); + } + + if (mode == null) + { + return PaletteMode.Global; + } + + return (PaletteMode)mode; + } + /// /// Gets the single instance of the professional system palette. /// @@ -843,22 +733,21 @@ public static PaletteBase? CurrentGlobalPalette /// /// Gets the palette Microsoft365 black. /// - /// - /// The palette Microsoft365 black. - /// public static PaletteMicrosoft365Black PaletteMicrosoft365Black => _paletteMicrosoft365Black ??= new PaletteMicrosoft365Black(); /// - /// Gets the single instance of the ### palette. + /// Gets the palette Microsft 365 black dark mode. /// public static PaletteMicrosoft365BlackDarkMode PaletteMicrosoft365BlackDarkMode => _paletteMicrosoft365BlackDarkMode ??= new PaletteMicrosoft365BlackDarkMode(); + /// + /// Gets the palette Microsft 365 black dark mode alternate. + /// + public static PaletteMicrosoft365BlackDarkModeAlternate PaletteMicrosoft365BlackDarkModeAlternate => _paletteMicrosoft365BlackDarkModeAlternate ??= new PaletteMicrosoft365BlackDarkModeAlternate(); + /// /// Gets the palette Microsoft365 blue. /// - /// - /// The palette Microsoft365 blue. - /// public static PaletteMicrosoft365Blue PaletteMicrosoft365Blue => _paletteMicrosoft365Blue ??= new PaletteMicrosoft365Blue(); /// @@ -879,9 +768,6 @@ public static PaletteBase? CurrentGlobalPalette /// /// Gets the palette Microsoft365 silver. /// - /// - /// The palette Microsoft365 silver. - /// public static PaletteMicrosoft365Silver PaletteMicrosoft365Silver => _paletteMicrosoft365Silver ??= new PaletteMicrosoft365Silver(); /// @@ -935,21 +821,33 @@ public static PaletteBase? CurrentGlobalPalette public static PaletteSparklePurple PaletteSparklePurple => _paletteSparklePurple ??= new PaletteSparklePurple(); /// - /// Gets the single instance of the ### palette. + /// Gets palette Sparkle Purpke dark moode. /// public static PaletteSparklePurpleDarkMode PaletteSparklePurpleDarkMode => _paletteSparklePurpleDarkMode ??= new PaletteSparklePurpleDarkMode(); /// - /// Gets the single instance of the ### palette. + /// Gets palette Sparkle Purpke light moode. /// public static PaletteSparklePurpleLightMode PaletteSparklePurpleLightMode => _paletteSparklePurpleLightMode ??= new PaletteSparklePurpleLightMode(); + /// + /// Gets palette Visual Studio 2010 Office 2007 variant. + /// public static PaletteVisualStudio2010Office2007Variation PaletteVisualStudio2010Office2007Variation => _paletteVisualStudio2010Office2007Variation ??= new PaletteVisualStudio2010Office2007Variation(); + /// + /// Gets palette Visual Studio 2010 Office 2010 variant. + /// public static PaletteVisualStudio2010Office2010Variation PaletteVisualStudio2010Office2010Variation => _paletteVisualStudio2010Office2010Variation ??= new PaletteVisualStudio2010Office2010Variation(); + /// + /// Gets palette Visual Studio 2010 Office 2013 variant. + /// public static PaletteVisualStudio2010Office2013Variation PaletteVisualStudio2010Office2013Variation => _paletteVisualStudio2010Office2013Variation ??= new PaletteVisualStudio2010Office2013Variation(); + /// + /// Gets palette Visual Studio 2010 Office 365 variant. + /// public static PaletteVisualStudio2010Microsoft365Variation PaletteVisualStudio2010Microsoft365Variation => _paletteVisualStudio2010Microsoft365Variation ??= new PaletteVisualStudio2010Microsoft365Variation(); //public static PaletteBase CustomPaletteBase => _customPalette ??= new PaletteBase (); @@ -959,7 +857,7 @@ public static PaletteBase? CurrentGlobalPalette /// /// Requested renderer mode. /// IRenderer reference is available; otherwise false. - public static IRenderer? GetRendererForMode(RendererMode mode) + public static IRenderer GetRendererForMode(RendererMode mode) { switch (mode) { @@ -992,7 +890,7 @@ public static PaletteBase? CurrentGlobalPalette default: // Should never be passed Debug.Assert(false); - return null; + throw new ArgumentOutOfRangeException(nameof(mode), @"mode must be RendererMode value."); } } @@ -1026,16 +924,29 @@ public static PaletteBase? CurrentGlobalPalette /// public static RenderProfessional RenderProfessional => _renderProfessional ??= new RenderProfessional(); - /// Gets the render visual studio. - /// The render visual studio. + /// + /// Gets the single instance of the Visual Studio renderer. + /// public static RenderVisualStudio RenderVisualStudio => _renderVisualStudio ??= new RenderVisualStudio(); + /// + /// Gets the single instance of the Visual Studio 2010 Office 2007 renderer. + /// public static RenderVisualStudio2010With2007 RenderVisualStudio2010With2007 => _renderVisualStudio2010With2007 ??= new RenderVisualStudio2010With2007(); + /// + /// Gets the single instance of the Visual Studio 2010 Office 2010 renderer. + /// public static RenderVisualStudio2010With2010 RenderVisualStudio2010With2010 => _renderVisualStudio2010With2010 ??= new RenderVisualStudio2010With2010(); + /// + /// Gets the single instance of the Visual Studio 2010 Office 2013 renderer. + /// public static RenderVisualStudio2010With2013 RenderVisualStudio2010With2013 => _renderVisualStudio2010With2013 ??= new RenderVisualStudio2010With2013(); + /// + /// Gets the single instance of the Visual Studio 2010 Office 365 renderer. + /// public static RenderVisualStudio2010WithMicrosoft365 RenderVisualStudio2010WithMicrosoft365 => _renderVisualStudio2010WithMicrosoft365 ??= new RenderVisualStudio2010WithMicrosoft365(); /// @@ -1046,58 +957,16 @@ public static PaletteBase? CurrentGlobalPalette #endregion #region Static Internal - internal static PaletteMode InternalGlobalPaletteMode { get; private set; } = PaletteMode.Microsoft365Blue; - - internal static PaletteBase? InternalGlobalPalette { get; private set; } = CurrentGlobalPalette; - - internal static bool HasCircularReference() - { - // Use a dictionary as a set to check for existence - var paletteSet = new Dictionary(); - - PaletteBase? palette = null; - - // Get the next palette up in hierarchy - if (InternalGlobalPaletteMode == PaletteMode.Custom) - { - palette = InternalGlobalPalette; - } - - // Keep searching until no more palettes found - while (palette != null) - { - // If the palette has already been encountered then it is a circular reference - if (paletteSet.ContainsKey(palette)) - { - return true; - } - else - { - // Otherwise, add to the set - paletteSet.Add(palette, true); - // Cast to correct type + /// + /// What is the CurrentGlobalPaletteMode in use + /// + public static PaletteMode CurrentGlobalPaletteMode { get; private set; } = ThemeManager.DefaultGlobalPalette; - // If this is a KryptonPalette instance - if (palette is KryptonCustomPaletteBase owner) - { - // Get the next palette up in hierarchy - palette = owner.BasePaletteMode switch - { - PaletteMode.Custom => owner.BasePalette, - PaletteMode.Global => InternalGlobalPalette, - _ => null - }; - } - else - { - palette = null; - } - } - } + /// + /// Access the Current Palette + /// + public static PaletteBase CurrentGlobalPalette { get; private set; } = GetPaletteForMode(CurrentGlobalPaletteMode); - // No circular reference encountered - return false; - } #endregion #region Static Implementation @@ -1138,7 +1007,7 @@ private static void OnUserPreferenceChanged(object sender, UserPreferenceChanged UpdateToolStripManager(); } - private static void OnPalettePaint(object sender, PaletteLayoutEventArgs e) + private static void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) { // If the color table has changed then need to update tool strip immediately if (e.NeedColorTable) @@ -1147,41 +1016,118 @@ private static void OnPalettePaint(object sender, PaletteLayoutEventArgs e) } } - private static void SetPalette(PaletteBase? globalPalette) + private static void SetPalette(PaletteBase globalPalette) { - if (globalPalette != InternalGlobalPalette) + if (globalPalette != CurrentGlobalPalette) { // Unhook from current palette events - if (InternalGlobalPalette != null) + if (CurrentGlobalPalette != null) { - InternalGlobalPalette.PalettePaint -= OnPalettePaint; + CurrentGlobalPalette.PalettePaint -= OnPalettePaint; } // Remember the new palette - InternalGlobalPalette = globalPalette; + CurrentGlobalPalette = globalPalette; // Hook to new palette events - if (InternalGlobalPalette != null) + if (CurrentGlobalPalette != null) { - InternalGlobalPalette.PalettePaint += OnPalettePaint; + CurrentGlobalPalette.PalettePaint += OnPalettePaint; } } } - private static void OnGlobalAllowFormChromeChanged(EventArgs e) => GlobalAllowFormChromeChanged?.Invoke(null, e); + private static void OnGlobalUseThemeFormChromeBorderWidthChanged(EventArgs e) => GlobalUseThemeFormChromeBorderWidthChanged?.Invoke(null, e); private static void OnGlobalPaletteChanged(EventArgs e) { UpdateToolStripManager(); + UpdatePaletteImages(CurrentGlobalPaletteMode); + GlobalPaletteChanged?.Invoke(null, e); } + private static void UpdatePaletteImages(PaletteMode paletteMode) + { + switch (paletteMode) + { + case PaletteMode.Global: + case PaletteMode.Custom: + Images.ToolbarImages.SetToolBarImages(GlobalStaticValues.GenericToolBarImages); + break; + case PaletteMode.ProfessionalSystem: + Images.ToolbarImages.SetToolBarImages(GlobalStaticValues.SystemToolBarImages); + break; + case PaletteMode.ProfessionalOffice2003: + Images.ToolbarImages.SetToolBarImages(GlobalStaticValues.Office2003ToolBarImages); + break; + case PaletteMode.Office2007Blue: + case PaletteMode.Office2007BlueDarkMode: + case PaletteMode.Office2007BlueLightMode: + case PaletteMode.Office2007Silver: + case PaletteMode.Office2007SilverDarkMode: + case PaletteMode.Office2007SilverLightMode: + case PaletteMode.Office2007White: + case PaletteMode.Office2007Black: + case PaletteMode.Office2007BlackDarkMode: + case PaletteMode.VisualStudio2010Render2007: + Images.ToolbarImages.SetToolBarImages(GlobalStaticValues.Office2007ToolBarImages); + break; + case PaletteMode.Office2010Blue: + case PaletteMode.Office2010BlueDarkMode: + case PaletteMode.Office2010BlueLightMode: + case PaletteMode.Office2010Silver: + case PaletteMode.Office2010SilverDarkMode: + case PaletteMode.Office2010SilverLightMode: + case PaletteMode.Office2010White: + case PaletteMode.Office2010Black: + case PaletteMode.Office2010BlackDarkMode: + case PaletteMode.SparkleBlue: + case PaletteMode.SparkleBlueDarkMode: + case PaletteMode.SparkleBlueLightMode: + case PaletteMode.SparkleOrange: + case PaletteMode.SparkleOrangeDarkMode: + case PaletteMode.SparkleOrangeLightMode: + case PaletteMode.SparklePurple: + case PaletteMode.SparklePurpleDarkMode: + case PaletteMode.SparklePurpleLightMode: + case PaletteMode.VisualStudio2010Render2010: + Images.ToolbarImages.SetToolBarImages(GlobalStaticValues.Office2010ToolBarImages); + break; + case PaletteMode.Office2013White: + case PaletteMode.VisualStudio2010Render2013: + Images.ToolbarImages.SetToolBarImages(GlobalStaticValues.Office2013ToolBarImages); + break; + case PaletteMode.Microsoft365Black: + case PaletteMode.Microsoft365BlackDarkMode: + case PaletteMode.Microsoft365BlackDarkModeAlternate: + case PaletteMode.Microsoft365Blue: + case PaletteMode.Microsoft365BlueDarkMode: + case PaletteMode.Microsoft365BlueLightMode: + case PaletteMode.Microsoft365Silver: + case PaletteMode.Microsoft365SilverDarkMode: + case PaletteMode.Microsoft365SilverLightMode: + case PaletteMode.Microsoft365White: + case PaletteMode.VisualStudio2010Render365: + Images.ToolbarImages.SetToolBarImages(GlobalStaticValues.Microsoft365ToolBarImages); + break; + default: + // Should not happen! + + // Disable since palette mode is an enum and is not nullable + //Debug.Assert(paletteMode is not null); + + DebugTools.NotImplemented(paletteMode.ToString()); + break; + } + } + private static void UpdateToolStripManager() { if (_globalApplyToolstrips) { - ToolStripManager.Renderer = InternalGlobalPalette?.GetRenderer()?.RenderToolStrip(InternalGlobalPalette); + ToolStripManager.Renderer = CurrentGlobalPalette?.GetRenderer()?.RenderToolStrip(CurrentGlobalPalette); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMaskedTextBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMaskedTextBox.cs index 4837d663e..9c806bab1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMaskedTextBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMaskedTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -46,7 +46,7 @@ public string? Hint if (string.IsNullOrEmpty(Text) && !string.IsNullOrWhiteSpace(Hint)) { - PI.SendMessage(Handle, PI.EM_SETCUEBANNER, (IntPtr)1, Hint); + PI.SendMessage(Handle, PI.EM_SETCUEBANNER, (IntPtr)1, Hint!); } Refresh(); @@ -193,7 +193,7 @@ protected override void WndProc(ref Message m) // Set the correct text rendering hint for the text drawing. We only draw if the edit text is disabled so we // just always grab the disable state value. Without this line the wrong hint can occur because it inherits // it from the device context. Resulting in blurred text. - g.TextRenderingHint = CommonHelper.PaletteTextHintToRenderingHint(_kryptonMaskedTextBox.StateDisabled.PaletteContent.GetContentShortTextHint(PaletteState.Disabled)); + g.TextRenderingHint = CommonHelper.PaletteTextHintToRenderingHint(_kryptonMaskedTextBox.StateDisabled.PaletteContent!.GetContentShortTextHint(PaletteState.Disabled)); // Define the string formatting requirements var stringFormat = new StringFormat @@ -230,7 +230,7 @@ protected override void WndProc(ref Message m) catch (ArgumentException) { using var foreBrush = new SolidBrush(ForeColor); - g.DrawString(drawText, _kryptonMaskedTextBox.GetTripleState().PaletteContent.GetContentShortTextFont(PaletteState.Disabled), foreBrush, + g.DrawString(drawText, _kryptonMaskedTextBox.GetTripleState().PaletteContent?.GetContentShortTextFont(PaletteState.Disabled)!, foreBrush, new RectangleF(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top), stringFormat); } @@ -324,7 +324,6 @@ public MaskedTextBoxButtonSpecCollection(KryptonMaskedTextBox owner) private bool _mouseOver; private bool _alwaysActive; private bool _trackingMouseEnter; - private float _cornerRoundingRadius; private int _cachedHeight; #endregion @@ -505,10 +504,10 @@ public KryptonMaskedTextBox() // Create button specification collection manager _buttonManager = new ButtonSpecManagerLayout(this, Redirector, ButtonSpecs, null, - new[] { _drawDockerInner }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, - new[] { PaletteMetricPadding.HeaderButtonPaddingInputControl }, + [_drawDockerInner], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetInputControl], + [PaletteMetricPadding.HeaderButtonPaddingInputControl], CreateToolStripRenderer, NeedPaintDelegate); @@ -520,8 +519,6 @@ public KryptonMaskedTextBox() // Add text box to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(_maskedTextBox); - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -536,7 +533,7 @@ protected override void Dispose(bool disposing) OnCancelToolTip(this, EventArgs.Empty); // Remember to pull down the manager instance - _buttonManager.Destruct(); + _buttonManager?.Destruct(); } base.Dispose(disposing); @@ -544,18 +541,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - set => SetCornerRoundingRadius(value); - } - /// /// Hint text placed into empty control /// @@ -601,7 +586,7 @@ public string? Hint [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)] - public MaskedTextBox? MaskedTextBox => _maskedTextBox; + public MaskedTextBox MaskedTextBox => _maskedTextBox; /// /// Gets access to the contained input control. @@ -662,7 +647,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -818,11 +803,11 @@ public Type? ValidatingType [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager.UseMnemonic; + get => _buttonManager!.UseMnemonic; set { - if (_buttonManager.UseMnemonic != value) + if (_buttonManager!.UseMnemonic != value) { _buttonManager.UseMnemonic = value; PerformNeedPaint(true); @@ -1520,7 +1505,7 @@ protected override void OnEnabledChanged(EventArgs e) _drawDockerOuter.Enabled = Enabled; // Update state to reflect change in enabled state - _buttonManager.RefreshButtons(); + _buttonManager?.RefreshButtons(); PerformNeedPaint(true); @@ -1574,7 +1559,7 @@ protected override void OnLayout(LayoutEventArgs levent) if (!IsDisposed && !Disposing) { // Update with latest content padding for placing around the contained text box control - Padding contentPadding = GetTripleState().PaletteContent.GetContentPadding(_drawDockerOuter.State); + Padding contentPadding = GetTripleState().PaletteContent!.GetContentPadding(_drawDockerOuter.State); _layoutFill.DisplayPadding = contentPadding; } @@ -1694,13 +1679,13 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) IPaletteTriple triple = GetTripleState(); PaletteState state = _drawDockerOuter.State; _maskedTextBox.BackColor = triple.PaletteBack.GetBackColor1(state); - _maskedTextBox.ForeColor = triple.PaletteContent.GetContentShortTextColor1(state); + _maskedTextBox.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(state); // Only set the font if the masked text box has been created - Font font = triple.PaletteContent.GetContentShortTextFont(state); + Font? font = triple.PaletteContent.GetContentShortTextFont(state); if ((_maskedTextBox.Handle != IntPtr.Zero) && !_maskedTextBox.Font.Equals(font)) { - _maskedTextBox.Font = font; + _maskedTextBox.Font = font!; } } @@ -1775,13 +1760,13 @@ private void UpdateStateAndPalettes() { // Get the correct palette settings to use IPaletteTriple tripleState = GetTripleState(); - _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder); + _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder!); // Update enabled state _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDockerOuter.ElementState = state; } @@ -1809,51 +1794,51 @@ private void AdjustHeight(bool ignoreAnchored) } } - private void OnMaskedTextBoxTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnMaskedTextBoxTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnMaskedTextBoxTextAlignChanged(object sender, EventArgs e) => OnTextAlignChanged(e); + private void OnMaskedTextBoxTextAlignChanged(object? sender, EventArgs e) => OnTextAlignChanged(e); - private void OnMaskedTextBoxHideSelectionChanged(object sender, EventArgs e) => OnHideSelectionChanged(e); + private void OnMaskedTextBoxHideSelectionChanged(object? sender, EventArgs e) => OnHideSelectionChanged(e); - private void OnMaskedTextBoxModifiedChanged(object sender, EventArgs e) => OnModifiedChanged(e); + private void OnMaskedTextBoxModifiedChanged(object? sender, EventArgs e) => OnModifiedChanged(e); - private void OnMaskedTextBoxReadOnlyChanged(object sender, EventArgs e) => OnReadOnlyChanged(e); + private void OnMaskedTextBoxReadOnlyChanged(object? sender, EventArgs e) => OnReadOnlyChanged(e); - private void OnMaskedMaskChanged(object sender, EventArgs e) => OnMaskChanged(e); + private void OnMaskedMaskChanged(object? sender, EventArgs e) => OnMaskChanged(e); - private void OnMaskedIsOverwriteModeChanged(object sender, EventArgs e) => OnIsOverwriteModeChanged(e); + private void OnMaskedIsOverwriteModeChanged(object? sender, EventArgs e) => OnIsOverwriteModeChanged(e); - private void OnMaskedMaskInputRejected(object sender, MaskInputRejectedEventArgs e) => OnMaskInputRejected(e); + private void OnMaskedMaskInputRejected(object? sender, MaskInputRejectedEventArgs e) => OnMaskInputRejected(e); - private void OnMaskedTypeValidationCompleted(object sender, TypeValidationEventArgs e) => OnTypeValidationCompleted(e); + private void OnMaskedTypeValidationCompleted(object? sender, TypeValidationEventArgs e) => OnTypeValidationCompleted(e); - private void OnMaskedTextBoxGotFocus(object sender, EventArgs e) + private void OnMaskedTextBoxGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); OnGotFocus(e); } - private void OnMaskedTextBoxLostFocus(object sender, EventArgs e) + private void OnMaskedTextBoxLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); OnLostFocus(e); } - private void OnMaskedTextBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnMaskedTextBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnMaskedTextBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnMaskedTextBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnMaskedTextBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnMaskedTextBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnMaskedTextBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnMaskedTextBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnMaskedTextBoxValidated(object sender, EventArgs e) => OnValidated(e); + private void OnMaskedTextBoxValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnMaskedTextBoxValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnMaskedTextBoxValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed && !Disposing) { @@ -1873,7 +1858,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) var shadow = true; // Find the button spec associated with the tooltip request - ButtonSpec? buttonSpec = _buttonManager.ButtonSpecFromView(e.Target); + ButtonSpec? buttonSpec = _buttonManager?.ButtonSpecFromView(e.Target); // If the tooltip is for a button spec if (buttonSpec != null) @@ -1920,24 +1905,24 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) + private void OnCancelToolTip(object? sender, EventArgs e) { // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); _visualPopupToolTip = null; } - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - private void OnMaskedTextBoxMouseChange(object sender, EventArgs e) + private void OnMaskedTextBoxMouseChange(object? sender, EventArgs e) { // Change in tracking state? if (_maskedTextBox.MouseOver != _trackingMouseEnter) @@ -1957,14 +1942,6 @@ private void OnMaskedTextBoxMouseChange(object sender, EventArgs e) } } } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMessageBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMessageBox.cs index bd9f6ed3d..5b73f042e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMessageBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMessageBox.cs @@ -5,13 +5,11 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion -using ContentAlignment = System.Drawing.ContentAlignment; - // ReSharper disable ClassNeverInstantiated.Global // ReSharper disable UnusedMethodReturnValue.Global @@ -19,6 +17,11 @@ namespace Krypton.Toolkit { /// /// Displays a message box that can contain text, buttons, and symbols that inform and instruct the user. + /// The API's mimic the "legacy ones" from WinForms, with the addition of optional params to + /// - force ShowCtrl + /// - Hide the close button + /// - "displayHelpButton" has been moved in order to not collide with the above options + /// "HelpInfo" is used instead of passing individual elements to the help location(s) /// [ToolboxItem(false)] [DesignerCategory(@"code")] @@ -26,101 +29,91 @@ public static class KryptonMessageBox { #region Public + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// The text to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(string text, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(null, text, string.Empty, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + /// /// Displays a message box in front+center of the application and with the specified text, caption and buttons. /// /// The text to display in the message box. /// The text to display in the title bar of the message box. default="string.Empty" - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. /// One of the System.Windows.Forms.DialogResult values. public static DialogResult Show(string text, string caption, bool? showCtrlCopy = null, - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) => - ShowCore(null, text, caption, KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, - KryptonMessageBoxDefaultButton.Button4, 0, null, showCtrlCopy, - null, null, @"", null, null, @"", - contentAreaType, linkAreaCommand, linkLaunchArgument, contentLinkArea, messageTextAlignment); + bool? showCloseButton = null) => + ShowCore(null, text, caption, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + /// /// Displays a message box in front+center of the application and with the specified text, caption and buttons. /// /// The text to display in the message box. - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. /// One of the System.Windows.Forms.DialogResult values. - public static DialogResult Show(string text, bool? showCtrlCopy = null, - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) => - ShowCore(null, text, @"", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, - KryptonMessageBoxDefaultButton.Button4, 0, - null, showCtrlCopy, false, null, @"", - null, null, @"", - contentAreaType, linkAreaCommand, linkLaunchArgument, - contentLinkArea, messageTextAlignment); + public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, buttons, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); /// - /// Displays a message box in front+center of the specified object and with the specified text, caption, buttons, icon, default button, and options. + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. /// - /// Owner of the modal dialog box. /// The text to display in the message box. - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. /// One of the System.Windows.Forms.DialogResult values. - public static DialogResult Show(IWin32Window? owner, string text, bool? showCtrlCopy = null, - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) => - ShowCore(owner, text, @"", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, - KryptonMessageBoxDefaultButton.Button4, 0, null, showCtrlCopy, - false, null, @"", null, - null, @"", - contentAreaType, linkAreaCommand, linkLaunchArgument, contentLinkArea, messageTextAlignment); + public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, KryptonMessageBoxIcon icon, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, buttons, icon, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); /// - /// Displays a message box in front+center of the specified object and with the specified text, caption, buttons, icon, default button, and options. + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. /// - /// Owner of the modal dialog box. /// The text to display in the message box. /// The text to display in the title bar of the message box. default="string.Empty" - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. /// One of the System.Windows.Forms.DialogResult values. - public static DialogResult Show(IWin32Window? owner, string text, string caption, bool? showCtrlCopy = null, - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) => - ShowCore(owner, text, caption, KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, - KryptonMessageBoxDefaultButton.Button4, 0, null, showCtrlCopy, - false, null, @"", null, - null, @"", - contentAreaType, linkAreaCommand, linkLaunchArgument, contentLinkArea, messageTextAlignment); + public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, buttons, icon, defaultButton, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); /// /// Displays a message box in front+center of the application and with the specified text, caption and buttons. @@ -128,209 +121,223 @@ public static DialogResult Show(IWin32Window? owner, string text, string caption /// The text to display in the message box. /// The text to display in the title bar of the message box. default="string.Empty" /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. /// One of the System.Windows.Forms.DialogResult values. public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, - bool? showCtrlCopy = null, - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) => - ShowCore(null, text, caption, buttons, KryptonMessageBoxIcon.None, - KryptonMessageBoxDefaultButton.Button1, 0, - new HelpInfo(@"", 0, null), showCtrlCopy, - null, null, @"", - null, null, @"", - contentAreaType, linkAreaCommand, linkLaunchArgument, - contentLinkArea, messageTextAlignment); + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, MessageBoxOptions options, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, buttons, icon, defaultButton, options, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); /// - /// Displays a message box in front+center of the application and with the specified text, caption, buttons, icon, default button, and options. + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. /// /// The text to display in the message box. /// The text to display in the title bar of the message box. default="string.Empty" /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. - /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. - /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. - /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. - /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button. - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Displays a 'Help' button, as seen in .NET 6 and higher. - /// Shows the optional action button. - /// The action button text. - /// The attached to the action button. - /// The image of the application. - /// The application path. To be used in conjunction with type. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// Contains the help data of the . /// One of the System.Windows.Forms.DialogResult values. public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, - KryptonMessageBoxIcon icon, - KryptonMessageBoxDefaultButton defaultButton = KryptonMessageBoxDefaultButton.Button4, - MessageBoxOptions options = 0, bool displayHelpButton = false, - bool? showCtrlCopy = null, bool? showHelpButton = null, bool? showActionButton = null, - string? actionButtonText = @"", KryptonCommand? actionButtonCommand = null, - ProcessStartInfo? linkLaunchArgument = null, Image? applicationImage = null, - string? applicationPath = @"", - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) - => - ShowCore(null, text, caption, buttons, icon, defaultButton, options, - displayHelpButton ? new HelpInfo() : null, showCtrlCopy, - showHelpButton, showActionButton, - actionButtonText, actionButtonCommand, applicationImage, applicationPath, - contentAreaType, linkAreaCommand, linkLaunchArgument, - contentLinkArea, messageTextAlignment); + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, MessageBoxOptions options, HelpInfo helpInfo, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, buttons, icon, defaultButton, options, helpInfo, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, bool displayHelpButton, + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, MessageBoxOptions options, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, buttons, icon, defaultButton, options, + showCtrlCopy: showCtrlCopy, + showHelpButton: displayHelpButton, + showCloseButton: showCloseButton); /// - /// Displays a message box in front+center of the specified object and with the specified text, caption, buttons, icon, default button, and options. + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. /// /// Owner of the modal dialog box. /// The text to display in the message box. - /// The text to display in the title bar of the message box. default="string.Empty" + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window owner, string text, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, string.Empty, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window owner, string? text, string? caption, bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + + + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window owner, string? text, string? caption, KryptonMessageBoxButtons buttons, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, buttons, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. - /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. - /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. - /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button. - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Displays a 'Help' button, as seen in .NET 6 and higher. - /// Shows the optional action button. - /// The action button text. - /// The attached to the action button. - /// The image of the application. - /// The application path. To be used in conjunction with type. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. /// One of the System.Windows.Forms.DialogResult values. - public static DialogResult Show(IWin32Window? owner, string text, string caption, - KryptonMessageBoxButtons buttons, KryptonMessageBoxIcon icon, - KryptonMessageBoxDefaultButton defaultButton = KryptonMessageBoxDefaultButton.Button4, - MessageBoxOptions options = 0, bool displayHelpButton = false, - bool? showCtrlCopy = null, bool? showHelpButton = null, - bool? showActionButton = null, string? actionButtonText = @"", - KryptonCommand? actionButtonCommand = null, Image? applicationImage = null, - string? applicationPath = @"", - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) - => - ShowCore(owner, text, caption, buttons, icon, defaultButton, options, - displayHelpButton ? new HelpInfo() : null, showCtrlCopy, - showHelpButton, showActionButton, actionButtonText, - actionButtonCommand, applicationImage, applicationPath, - contentAreaType, linkAreaCommand, linkLaunchArgument, - contentLinkArea, messageTextAlignment); + public static DialogResult Show(IWin32Window owner, string? text, string? caption, KryptonMessageBoxButtons buttons, KryptonMessageBoxIcon icon, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, buttons, icon, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// Owner of the modal dialog box. /// The text to display in the message box. - /// The text to display in the title bar of the message box. default="string.Empty" - /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. - /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. - /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. - /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. - /// The path and name of the Help file to display when the user clicks the Help button. - /// One of the System.Windows.Forms.HelpNavigator values. - /// The numeric ID of the Help topic to display when the user clicks the Help button. - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Displays a 'Help' button, as seen in .NET 6 and higher. - /// Shows the optional action button. - /// The action button text. - /// The attached to the action button. - /// The image of the application. - /// The application path. To be used in conjunction with type. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. /// One of the System.Windows.Forms.DialogResult values. - public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, - KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, - MessageBoxOptions options, string? helpFilePath, - HelpNavigator navigator, object? param, bool? showCtrlCopy = null, - bool? showHelpButton = null, bool? showActionButton = null, - string? actionButtonText = @"", KryptonCommand? actionButtonCommand = null, - Image? applicationImage = null, string? applicationPath = @"", - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) - => ShowCore(null, text, caption, buttons, icon, defaultButton, options, - new HelpInfo(helpFilePath, navigator, param), showCtrlCopy, - showHelpButton, showActionButton, actionButtonText, - actionButtonCommand, applicationImage, applicationPath, - contentAreaType, linkAreaCommand, linkLaunchArgument, - contentLinkArea, messageTextAlignment); + public static DialogResult Show(IWin32Window owner, string? text, string? caption, KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, buttons, icon, defaultButton, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); /// - /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file, HelpNavigator, and Help topic. + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. /// /// Owner of the modal dialog box. /// The text to display in the message box. - /// The text to display in the title bar of the message box. + /// The text to display in the title bar of the message box. default="string.Empty" /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. - /// The path and name of the Help file to display when the user clicks the Help button. - /// One of the System.Windows.Forms.HelpNavigator values. - /// The numeric ID of the Help topic to display when the user clicks the Help button. - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. - /// Displays a 'Help' button, as seen in .NET 6 and higher. - /// Shows the optional action button. - /// The action button text. - /// The attached to the action button. - /// The image of the application. - /// The application path. To be used in conjunction with type. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. /// One of the System.Windows.Forms.DialogResult values. - public static DialogResult Show(IWin32Window? owner, string text, string caption, - KryptonMessageBoxButtons buttons, - KryptonMessageBoxIcon icon, - KryptonMessageBoxDefaultButton defaultButton, - MessageBoxOptions options, - string? helpFilePath, HelpNavigator navigator, - object? param, bool? showCtrlCopy = null, - bool? showHelpButton = null, - bool? showActionButton = null, - string? actionButtonText = @"", - KryptonCommand? actionButtonCommand = null, - Image? applicationImage = null, - string? applicationPath = @"", - MessageBoxContentAreaType? contentAreaType = null, - KryptonCommand? linkAreaCommand = null, - ProcessStartInfo? linkLaunchArgument = null, - LinkArea? contentLinkArea = null, - ContentAlignment? messageTextAlignment = ContentAlignment.MiddleLeft) - => ShowCore(owner, text, caption, buttons, icon, defaultButton, options, - new HelpInfo(helpFilePath, navigator, param), - showCtrlCopy, showHelpButton, showActionButton, - actionButtonText, actionButtonCommand, applicationImage, - applicationPath, contentAreaType, linkAreaCommand, - linkLaunchArgument, contentLinkArea, messageTextAlignment); + public static DialogResult Show(IWin32Window owner, string? text, string? caption, KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, MessageBoxOptions options, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, buttons, icon, defaultButton, options, + showCtrlCopy: showCtrlCopy, + showHelpButton: false, + showCloseButton: showCloseButton); + + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// Contains the help data of the . + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window owner, string? text, string? caption, KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, MessageBoxOptions options, HelpInfo helpInfo, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, buttons, icon, defaultButton, options, + showCtrlCopy: showCtrlCopy, + helpInfo: helpInfo, + showCloseButton: showCloseButton); + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window owner, string? text, string? caption, KryptonMessageBoxButtons buttons, bool displayHelpButton, + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, MessageBoxOptions options, + bool? showCtrlCopy = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, buttons, icon, defaultButton, options, + showCtrlCopy: showCtrlCopy, + showHelpButton: displayHelpButton, + showCloseButton: showCloseButton); #endregion #region Implementation @@ -345,51 +352,45 @@ public static DialogResult Show(IWin32Window? owner, string text, string caption /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. /// Contains the help data of the . - /// Show extraText in title. If null(default) then only when Warning or Error icon is used. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. /// Displays a 'Help' button, as seen in .NET 6 and higher. - /// Shows the optional action button. - /// The action button text. - /// The attached to the action button. - /// The image of the application. - /// The application path. To be used in conjunction with type. - /// Specifies the . - /// Specifies a if using the type. - /// Specifies the if a has not been defined. - /// Specifies the area within the to be regarded as a link. See . - /// Specifies how the message text should be aligned. See for supported values. + /// Displays the close button. If null (default), then the close button will be displayed. /// One of the System.Windows.Forms.DialogResult values. private static DialogResult ShowCore(IWin32Window? owner, - string text, string caption, - KryptonMessageBoxButtons buttons, - KryptonMessageBoxIcon icon, - KryptonMessageBoxDefaultButton defaultButton, - MessageBoxOptions options, - HelpInfo? helpInfo, bool? showCtrlCopy, - bool? showHelpButton, - bool? showActionButton, string? actionButtonText, - KryptonCommand? actionButtonCommand, - Image? applicationImage, string? applicationPath, - MessageBoxContentAreaType? contentAreaType, - KryptonCommand? linkLabelCommand, - ProcessStartInfo? linkLaunchArgument, - LinkArea? contentLinkArea, - ContentAlignment? messageTextAlignment) + string? text, string? caption, + KryptonMessageBoxButtons buttons = KryptonMessageBoxButtons.OK, + KryptonMessageBoxIcon icon = KryptonMessageBoxIcon.None, + KryptonMessageBoxDefaultButton defaultButton = KryptonMessageBoxDefaultButton.Button4, + MessageBoxOptions options = 0, + HelpInfo? helpInfo = null, + bool? showCtrlCopy = null, + bool? showHelpButton = null, + bool? showCloseButton = null) { caption = string.IsNullOrEmpty(caption) ? @" " : caption; IWin32Window? showOwner = ValidateOptions(owner, options, helpInfo); - // Show message box window as a modal dialog and then dispose of it afterwards - using var kmb = new KryptonMessageBoxForm(showOwner, text, caption, buttons, icon, - defaultButton, options, helpInfo, showCtrlCopy, showHelpButton, - showActionButton, actionButtonText, - actionButtonCommand, applicationImage, applicationPath, - contentAreaType, linkLabelCommand, - linkLaunchArgument, contentLinkArea, messageTextAlignment); + // Show message box window as a modal dialog and then dispose of it after-wards + + if (options is MessageBoxOptions.RightAlign or MessageBoxOptions.RtlReading) + { + using var kmbRtl = new VisualMessageBoxRtlAwareForm(showOwner, text, caption, buttons, icon, + defaultButton, helpInfo, showCtrlCopy, showHelpButton, showCloseButton); + + kmbRtl.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; - kmb.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + return kmbRtl.ShowDialog(showOwner); + } + else + { + using var kmb = new VisualMessageBoxForm(showOwner, text, caption, buttons, icon, + defaultButton, helpInfo, showCtrlCopy, showHelpButton, showCloseButton); - return kmb.ShowDialog(showOwner); + kmb.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmb.ShowDialog(showOwner); + } } #region WinForm Compatibility @@ -420,16 +421,13 @@ private static DialogResult ShowCore(IWin32Window? owner, if ((helpInfo != null) || ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)) { - // If do not have an owner passed in then get the active window and use that instead + // If this does not have an owner passed in? then get the active window and use that instead showOwner = owner ?? Control.FromHandle(PI.GetActiveWindow()); } return showOwner; } - #endregion - - #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMessageBoxDep.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMessageBoxDep.cs new file mode 100644 index 000000000..e599ec050 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMessageBoxDep.cs @@ -0,0 +1,456 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +// ReSharper disable ClassNeverInstantiated.Global +// ReSharper disable UnusedMethodReturnValue.Global + +namespace Krypton.Toolkit +{ + /// + /// Displays a message box, that has extended controls. + /// + [ToolboxItem(false)] + [DesignerCategory(@"code")] + public static class KryptonMessageBoxDep + { + #region Public + + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(string text, string caption, bool? showCtrlCopy = null, + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, + KryptonMessageBoxDefaultButton.Button4, 0, null, showCtrlCopy, + null, null, @"", + contentAreaType, linkAreaCommand, linkLaunchArgument, contentLinkArea, null, + showCloseButton); + + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// The text to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(string text, bool? showCtrlCopy = null, + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? showCloseButton = null) => + ShowCore(null, text, @"", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, + KryptonMessageBoxDefaultButton.Button4, 0, + null, showCtrlCopy, false, null, @"", + contentAreaType, linkAreaCommand, linkLaunchArgument, + contentLinkArea, null, showCloseButton); + + /// + /// Displays a message box in front+center of the specified object and with the specified text, caption, buttons, icon, default button, and options. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window? owner, string text, bool? showCtrlCopy = null, + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? showCloseButton = null) => + ShowCore(owner, text, @"", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, + KryptonMessageBoxDefaultButton.Button4, 0, null, showCtrlCopy, + false, + null, @"", + contentAreaType, linkAreaCommand, linkLaunchArgument, contentLinkArea, + null, showCloseButton); + + /// + /// Displays a message box in front+center of the specified object and with the specified text, caption, buttons, icon, default button, and options. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window? owner, string? text, string caption, bool? showCtrlCopy = null, + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? showCloseButton = null) => + ShowCore(owner, text, caption, KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.None, + KryptonMessageBoxDefaultButton.Button4, 0, null, showCtrlCopy, + false, + null, @"", + contentAreaType, linkAreaCommand, linkLaunchArgument, contentLinkArea, + null, showCloseButton); + + /// + /// Displays a message box in front+center of the application and with the specified text, caption and buttons. + /// + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, + bool? showCtrlCopy = null, + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? showCloseButton = null) => + ShowCore(null, text, caption, buttons, KryptonMessageBoxIcon.None, + KryptonMessageBoxDefaultButton.Button1, 0, + new HelpInfo(@"", 0, null), showCtrlCopy, + null, null, @"", + contentAreaType, linkAreaCommand, linkLaunchArgument, + contentLinkArea, null, + showCloseButton); + + /// + /// Displays a message box in front+center of the application and with the specified text, caption, buttons, icon, default button, and options. + /// + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// The image of the application. + /// The application path. To be used in conjunction with type. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// If set to true, the will use standard operating system icons. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton = KryptonMessageBoxDefaultButton.Button4, + MessageBoxOptions options = 0, bool displayHelpButton = false, + bool? showCtrlCopy = null, bool? showHelpButton = null, + ProcessStartInfo? linkLaunchArgument = null, Image? applicationImage = null, + string applicationPath = @"", + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + LinkArea? contentLinkArea = null, + bool? forceUseOfOperatingSystemIcons = null, + bool? showCloseButton = null) + => + ShowCore(null, text, caption, buttons, icon, defaultButton, options, + displayHelpButton ? new HelpInfo() : null, showCtrlCopy, + showHelpButton, applicationImage, applicationPath, + contentAreaType, linkAreaCommand, linkLaunchArgument, + contentLinkArea, forceUseOfOperatingSystemIcons, showCloseButton); + + + /// + /// Displays a message box in front+center of the specified object and with the specified text, caption, buttons, icon, default button, and options. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// The image of the application. + /// The application path. To be used in conjunction with type. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// If set to true, the will use standard operating system icons. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window? owner, string text, string caption, + KryptonMessageBoxButtons buttons, KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton = KryptonMessageBoxDefaultButton.Button4, + MessageBoxOptions options = 0, bool displayHelpButton = false, + bool? showCtrlCopy = null, bool? showHelpButton = null, Image? applicationImage = null, + string applicationPath = @"", + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? forceUseOfOperatingSystemIcons = null, + bool? showCloseButton = null) + => + ShowCore(owner, text, caption, buttons, icon, defaultButton, options, + displayHelpButton ? new HelpInfo() : null, showCtrlCopy, + showHelpButton, applicationImage, applicationPath, + contentAreaType, linkAreaCommand, linkLaunchArgument, + contentLinkArea, forceUseOfOperatingSystemIcons, + showCloseButton); + + /// The text to display in the message box. + /// The text to display in the title bar of the message box. default="string.Empty" + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// The path and name of the Help file to display when the user clicks the Help button. + /// One of the System.Windows.Forms.HelpNavigator values. + /// The numeric ID of the Help topic to display when the user clicks the Help button. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// The image of the application. + /// The application path. To be used in conjunction with type. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// If set to true, the will use standard operating system icons. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(string text, string caption, KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, + MessageBoxOptions options, string helpFilePath, + HelpNavigator navigator, object? param, bool? showCtrlCopy = null, + bool? showHelpButton = null, + Image? applicationImage = null, string applicationPath = @"", + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? forceUseOfOperatingSystemIcons = null, + bool? showCloseButton = null) + => ShowCore(null, text, caption, buttons, icon, defaultButton, options, + new HelpInfo(helpFilePath, navigator, param), showCtrlCopy, + showHelpButton, applicationImage, applicationPath, + contentAreaType, linkAreaCommand, linkLaunchArgument, + contentLinkArea, forceUseOfOperatingSystemIcons, + showCloseButton); + + /// + /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file, HelpNavigator, and Help topic. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// The path and name of the Help file to display when the user clicks the Help button. + /// One of the System.Windows.Forms.HelpNavigator values. + /// The numeric ID of the Help topic to display when the user clicks the Help button. + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// The image of the application. + /// The application path. To be used in conjunction with type. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// If set to true, the will use standard operating system icons. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(IWin32Window? owner, string text, string caption, + KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton, + MessageBoxOptions options, + string helpFilePath, HelpNavigator navigator, + object? param, bool? showCtrlCopy = null, + bool? showHelpButton = null, + Image? applicationImage = null, + string applicationPath = @"", + MessageBoxContentAreaType? contentAreaType = null, + KryptonCommand? linkAreaCommand = null, + ProcessStartInfo? linkLaunchArgument = null, + LinkArea? contentLinkArea = null, + bool? forceUseOfOperatingSystemIcons = null, + bool? showCloseButton = null) + => ShowCore(owner, text, caption, buttons, icon, defaultButton, options, + new HelpInfo(helpFilePath, navigator, param), + showCtrlCopy, showHelpButton, applicationImage, + applicationPath, contentAreaType, linkAreaCommand, + linkLaunchArgument, contentLinkArea, forceUseOfOperatingSystemIcons, showCloseButton); + + /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file, HelpNavigator, and Help topic. + /// The message box data. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult Show(KryptonMessageBoxDataDep messageBoxData) => ShowCore(messageBoxData); + + #endregion + + #region Implementation + /// + /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file, HelpNavigator, and Help topic. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// Contains the help data of the . + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// The image of the application. + /// The application path. To be used in conjunction with type. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// If set to true, the will use standard operating system icons. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + private static DialogResult ShowCore(IWin32Window? owner, + string? text, string? caption, + KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton, + MessageBoxOptions options, + HelpInfo? helpInfo, bool? showCtrlCopy, + bool? showHelpButton, + Image? applicationImage, string? applicationPath, + MessageBoxContentAreaType? contentAreaType, + KryptonCommand? linkLabelCommand, + ProcessStartInfo? linkLaunchArgument, + LinkArea? contentLinkArea, + bool? forceUseOfOperatingSystemIcons, + bool? showCloseButton) + { + caption = string.IsNullOrEmpty(caption) ? @" " : caption; + + IWin32Window? showOwner = ValidateOptions(owner, options, helpInfo); + + // Show message box window as a modal dialog and then dispose of it after-wards + + if (options is MessageBoxOptions.RightAlign or MessageBoxOptions.RtlReading) + { + using var kmbrtl = new VisualMessageBoxRtlAwareFormDep(showOwner, text, caption, buttons, icon, + defaultButton, helpInfo, showCtrlCopy, showHelpButton, applicationImage, applicationPath, + contentAreaType, linkLabelCommand, + linkLaunchArgument, contentLinkArea, + forceUseOfOperatingSystemIcons, showCloseButton); + + kmbrtl.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmbrtl.ShowDialog(showOwner); + } + else + { + using var kmb = new VisualMessageBoxFormDep(showOwner, text, caption, buttons, icon, + defaultButton, helpInfo, showCtrlCopy, showHelpButton, applicationImage, applicationPath, + contentAreaType, linkLabelCommand, + linkLaunchArgument, contentLinkArea, + forceUseOfOperatingSystemIcons, showCloseButton); + + kmb.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmb.ShowDialog(showOwner); + } + } + + private static DialogResult ShowCore(KryptonMessageBoxDataDep messageBoxData) + { + messageBoxData.Caption = string.IsNullOrEmpty(messageBoxData.Caption) ? @" " : messageBoxData.Caption; + + IWin32Window? showOwner = ValidateOptions(messageBoxData.Owner, messageBoxData.Options, messageBoxData.HelpInfo); + + if (messageBoxData.Options is MessageBoxOptions.RightAlign or MessageBoxOptions.RtlReading) + { + using var kmbrtl = new VisualMessageBoxRtlAwareFormDep(messageBoxData); + + kmbrtl.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmbrtl.ShowDialog(showOwner); + } + else + { + using var kmb = new VisualMessageBoxFormDep(messageBoxData); + + kmb.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmb.ShowDialog(showOwner); + } + } + + #region WinForm Compatibility + private static IWin32Window? ValidateOptions(IWin32Window? owner, MessageBoxOptions options, HelpInfo? helpInfo) + { + // Check if trying to show a message box from a non-interactive process, this is not possible + if (!SystemInformation.UserInteractive && + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)) + { + throw new InvalidOperationException("Cannot show modal dialog when non-interactive"); + } + + // Check if trying to show a message box from a service and the owner has been specified, this is not possible + if ((owner != null) && + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)) + { + throw new ArgumentException(@"Cannot show message box from a service with an owner specified", nameof(options)); + } + + // Check if trying to show a message box from a service and help information is specified, this is not possible + if ((helpInfo != null) && + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)) + { + throw new ArgumentException(@"Cannot show message box from a service with help specified", nameof(options)); + } + + IWin32Window? showOwner = null; + if ((helpInfo != null) || + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)) + { + // If do not have an owner passed in? then get the active window and use that instead + showOwner = owner ?? Control.FromHandle(PI.GetActiveWindow()); + } + + return showOwner; + } + #endregion + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMonthCalendar.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMonthCalendar.cs index b386e6984..49c43730b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMonthCalendar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMonthCalendar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public class KryptonMonthCalendar : VisualSimpleBase, #region Instance Fields private readonly ViewDrawDocker _drawDocker; - private readonly ViewLayoutMonths _drawMonths; + private readonly ViewLayoutMonths? _drawMonths; private readonly PaletteTripleOverride _boldedDisabled; private readonly PaletteTripleOverride _boldedNormal; private readonly PaletteTripleOverride _boldedTracking; @@ -60,11 +60,6 @@ public class KryptonMonthCalendar : VisualSimpleBase, private int _maxSelectionCount; private int _scrollChange; private bool _hasFocus; - private float _cornerRoundingRadius; - private float _dayCornerRoundingRadius; - private float _dayOfWeekCornerRoundingRadius; - private float _headerCornerRoundingRadius; - #endregion #region Events @@ -75,6 +70,11 @@ public class KryptonMonthCalendar : VisualSimpleBase, [Description(@"Occurs when the selected date changes.")] public event DateRangeEventHandler? DateChanged; + /// Occurs when the date is selected. + [Category(@"Action")] + [Description(@"Occurs when the date is selected.")] + public event DateRangeEventHandler? DateSelected; + /// /// Occurs when the selected start date changes. /// @@ -235,70 +235,32 @@ public KryptonMonthCalendar() _maxDate = DateTimePicker.MaximumDateTime; _maxSelectionCount = 7; AnnuallyBoldedDatesMask = new int[12]; - _annualDates = new DateTimeList(); - _monthlyDates = new DateTimeList(); - BoldedDatesList = new DateTimeList(); + _annualDates = []; + _monthlyDates = []; + BoldedDatesList = []; _scrollChange = 0; _todayFormat = "d"; - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - _dayCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; - - _dayOfWeekCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; - - _headerCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; } #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - - /// Gets or sets the day corner rounding radius. - /// The day corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the day corner rounding radius.")] - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float DayCornerRoundingRadius - { - get => _dayCornerRoundingRadius; - - set => SetDayCornerRoundingRadius(value); - } - - /// Gets or sets the day of week corner rounding radius. - /// The day of week corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the day of week corner rounding radius.")] - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float DayOfWeekCornerRoundingRadius + /// + /// Sets date as the current selected date. The start and begin of + /// the selection range will both be equal to date. + /// + public void SetDate(DateTime date) { - get => _dayOfWeekCornerRoundingRadius; - - set => SetDayOfWeekCornerRoundingRadius(value); - } + if (date.Ticks < _minDate.Ticks) + { + throw new ArgumentOutOfRangeException(nameof(date), date, string.Format(@"Value of '{1}' is not valid for '{0}'. '{0}' must be greater than or equal to {2}.", nameof(date), FormatDate(date), nameof(MinDate))); + } - /// Gets or sets the header corner rounding radius. - /// The header corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the header corner rounding radius.")] - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float HeaderCornerRoundingRadius - { - get => _headerCornerRoundingRadius; + if (date.Ticks > _maxDate.Ticks) + { + throw new ArgumentOutOfRangeException(nameof(date), date, string.Format(@"Value of '{1}' is not valid for '{0}'. '{0}' must be less than or equal to {2}.", nameof(date), FormatDate(date), nameof(MaxDate))); + } - set => SetHeaderCornerRoundingRadius(value); + SetSelectionRange(date, date); } /// @@ -396,13 +358,14 @@ public DateTime MinDate [DefaultValue("d")] [RefreshProperties(RefreshProperties.Repaint)] [Localizable(true)] + [DisallowNull] public string TodayFormat { get => _todayFormat; set { - if ((_todayFormat != value) && (value != null)) + if (_todayFormat != value) { _todayFormat = value; PerformNeedPaint(true); @@ -437,17 +400,13 @@ public int ScrollChange /// [Category(@"Behavior")] [Description(@"Today's date.")] + [DisallowNull] public DateTime TodayDate { get => _todayDate; set { - if (value == null) - { - value = DateTime.Now.Date; - } - _todayDate = value; PerformNeedPaint(true); } @@ -462,7 +421,8 @@ public DateTime TodayDate /// [Localizable(true)] [Description(@"Indicates which annual dates should be boldface.")] - public DateTime[] AnnuallyBoldedDates + [AllowNull] + public DateTime[]? AnnuallyBoldedDates { get => _annualDates.ToArray(); @@ -497,7 +457,8 @@ public DateTime[] AnnuallyBoldedDates /// [Localizable(true)] [Description(@"Indicates which monthly dates should be boldface.")] - public DateTime[] MonthlyBoldedDates + [AllowNull] + public DateTime[]? MonthlyBoldedDates { get => _monthlyDates.ToArray(); @@ -528,7 +489,8 @@ public DateTime[] MonthlyBoldedDates /// [Localizable(true)] [Description(@"Indicates which dates should be boldface.")] - public DateTime[] BoldedDates + [AllowNull] + public DateTime[]? BoldedDates { get => BoldedDatesList.ToArray(); @@ -903,10 +865,7 @@ public ButtonStyle DayOfWeekStyle } } } - private bool ShouldSerializeDayOfWeekStyle() => _dayOfWeekStyle != ButtonStyle.CalendarDay; - - private void ResetDayOfWeekStyle() => DayOfWeekStyle = ButtonStyle.CalendarDay; /// @@ -917,11 +876,11 @@ public ButtonStyle DayOfWeekStyle [DefaultValue(true)] public bool ShowToday { - get => _drawMonths.ShowToday; + get => _drawMonths!.ShowToday; set { - if (_drawMonths.ShowToday != value) + if (_drawMonths!.ShowToday != value) { _drawMonths.ShowToday = value; PerformNeedPaint(true); @@ -937,11 +896,11 @@ public bool ShowToday [DefaultValue(true)] public bool ShowTodayCircle { - get => _drawMonths.ShowTodayCircle; + get => _drawMonths!.ShowTodayCircle; set { - if (_drawMonths.ShowTodayCircle != value) + if (_drawMonths!.ShowTodayCircle != value) { _drawMonths.ShowTodayCircle = value; PerformNeedPaint(true); @@ -957,11 +916,11 @@ public bool ShowTodayCircle [DefaultValue(false)] public bool ShowWeekNumbers { - get => _drawMonths.ShowWeekNumbers; + get => _drawMonths!.ShowWeekNumbers; set { - if (_drawMonths.ShowWeekNumbers != value) + if (_drawMonths!.ShowWeekNumbers != value) { _drawMonths.ShowWeekNumbers = value; PerformNeedPaint(true); @@ -976,7 +935,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining month calendar appearance when it has focus.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarStateRedirect OverrideFocus { get; } - private bool ShouldSerializeOverrideFocus() => !OverrideFocus.IsDefault; /// @@ -986,7 +944,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining month calendar appearance when it is bolded.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarStateRedirect OverrideBolded { get; } - private bool ShouldSerializeOverrideBolded() => !OverrideBolded.IsDefault; /// @@ -996,7 +953,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining month calendar appearance when it is today.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarStateRedirect OverrideToday { get; } - private bool ShouldSerializeOverrideToday() => !OverrideToday.IsDefault; /// @@ -1005,8 +961,7 @@ public bool ShowWeekNumbers [Category(@"Visuals")] [Description(@"Overrides for defining common month calendar appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteMonthCalendarRedirect? StateCommon { get; } - + public PaletteMonthCalendarRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; /// @@ -1016,7 +971,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining month calendar disabled appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarDoubleState StateDisabled { get; } - private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; /// @@ -1026,7 +980,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining month calendar normal appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarDoubleState StateNormal { get; } - private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; /// @@ -1036,7 +989,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining tracking month calendar appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarState StateTracking { get; } - private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; /// @@ -1046,7 +998,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining pressed month calendar appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarState StatePressed { get; } - private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; /// @@ -1056,7 +1007,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining checked normal month calendar appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarState StateCheckedNormal { get; } - private bool ShouldSerializeStateCheckedNormal() => !StateCheckedNormal.IsDefault; /// @@ -1066,7 +1016,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining checked tracking month calendar appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarState StateCheckedTracking { get; } - private bool ShouldSerializeStateCheckedTracking() => !StateCheckedTracking.IsDefault; /// @@ -1076,7 +1025,6 @@ public bool ShowWeekNumbers [Description(@"Overrides for defining checked pressed month calendar appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteMonthCalendarState StateCheckedPressed { get; } - private bool ShouldSerializeStateCheckedPressed() => !StateCheckedPressed.IsDefault; /// @@ -1085,7 +1033,7 @@ public bool ShowWeekNumbers [Category(@"Visuals")] [Description(@"Collection of button specifications.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public MonthCalendarButtonSpecCollection ButtonSpecs => _drawMonths.ButtonSpecs; + public MonthCalendarButtonSpecCollection ButtonSpecs => _drawMonths!.ButtonSpecs; /// /// Gets and sets a value indicating if tooltips should be Displayed for button specs. @@ -1095,8 +1043,8 @@ public bool ShowWeekNumbers [DefaultValue(false)] public bool AllowButtonSpecToolTips { - get => _drawMonths.AllowButtonSpecToolTips; - set => _drawMonths.AllowButtonSpecToolTips = value; + get => _drawMonths!.AllowButtonSpecToolTips; + set => _drawMonths!.AllowButtonSpecToolTips = value; } /// @@ -1173,7 +1121,6 @@ public void RemoveAllMonthlyBoldedDates() PerformNeedPaint(true); } - /// /// Gets access to the owning control /// @@ -1297,15 +1244,19 @@ public void SetSelectionRange(DateTime start, DateTime end) end = start; } + // If the range exceeds maxSelectionCount, compare with the previous range and adjust whichever + // limit hasn't changed. TimeSpan span = end - start; if (span.Days >= _maxSelectionCount) { if (start.Ticks == _selectionStart.Ticks) { + // Bring start date forward start = end.AddDays(1 - _maxSelectionCount); } else { + // Bring end date back end = start.AddDays(_maxSelectionCount - 1); } } @@ -1403,9 +1354,9 @@ public bool DesignerGetHitTest(Point pt) /// Mouse location. [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public Component DesignerComponentFromPoint(Point pt) => + public Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision /// @@ -1426,10 +1377,10 @@ public void DesignerMouseLeave() => /// /// Source of notification. /// An EventArgs containing event data. - protected override void OnButtonSpecChanged(object sender, EventArgs e) + protected override void OnButtonSpecChanged(object? sender, EventArgs e) { // Recreate all the button specs with new values - _drawMonths.RecreateButtons(); + _drawMonths?.RecreateButtons(); // Let base class perform standard processing base.OnButtonSpecChanged(sender, e); @@ -1464,7 +1415,7 @@ protected override void OnKeyDown(KeyEventArgs e) // Cannot process a message for a disposed control if (!IsDisposed && !Disposing) { - if (_drawMonths.ProcessKeyDown(this, e)) + if (_drawMonths!.ProcessKeyDown(this, e)) { return; } @@ -1480,6 +1431,8 @@ protected override void OnKeyDown(KeyEventArgs e) /// An EventArgs that contains the event data. protected virtual void OnDateChanged(DateRangeEventArgs e) => DateChanged?.Invoke(this, e); + protected virtual void OnDateSelected(DateRangeEventArgs e) => DateSelected?.Invoke(this, e); + /// /// Raises when the SelectionStartChanged event. /// @@ -1529,9 +1482,9 @@ protected override void OnLostFocus(EventArgs e) /// Raises the Paint event. /// /// An PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { - Paint?.Invoke(this, e); + Paint?.Invoke(this, e!); base.OnPaint(e); } @@ -1643,7 +1596,7 @@ protected override void OnEnabledChanged(EventArgs e) { // Update view elements _drawDocker.Enabled = Enabled; - _drawMonths.Enabled = Enabled; + _drawMonths!.Enabled = Enabled; // Change in enabled state requires a layout and repaint PerformNeedPaint(true); @@ -1693,6 +1646,13 @@ protected override void SetBoundsCore(int x, int y, int width, int height, Bound #endregion #region Private + /// + /// Return a localized string representation of the given DateTime value. + /// Used for throwing exceptions, etc. + /// + private static string FormatDate(DateTime value) + => value.ToString("d", CultureInfo.CurrentCulture); + private DateTime EffectiveMaxDate(DateTime maxDate) { DateTime maximumDateTime = DateTimePicker.MaximumDateTime; @@ -1712,7 +1672,7 @@ private void AdjustSize(ref int width, ref int height) Size backBorderSize = _drawDocker.GetNonChildSize(context); // Ask for the size needed to draw a single month - Size singleMonthSize = _drawMonths.GetSingleMonthSize(context); + Size singleMonthSize = _drawMonths!.GetSingleMonthSize(context); // How many full months can be fit in each dimension (with a minimum of 1 month showing) var gap = ViewLayoutMonths.GAP; @@ -1781,6 +1741,8 @@ private void SetRange() OnDateChanged(new DateRangeEventArgs(_selectionStart, _selectionEnd)); } + OnDateSelected(new DateRangeEventArgs(minDate, maxDate)); + SetFocusDay(); } @@ -1842,37 +1804,5 @@ private void SetFocusDay() private void UpdateFocusOverride(bool focus) => _hasFocus = focus; #endregion - - #region Implementation - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void SetDayCornerRoundingRadius(float? radius) - { - _dayCornerRoundingRadius = radius ?? GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; - - StateCommon.Day.Border.Rounding = _dayCornerRoundingRadius; - } - - private void SetDayOfWeekCornerRoundingRadius(float? radius) - { - _dayOfWeekCornerRoundingRadius = radius ?? GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; - - StateCommon.DayOfWeek.Border.Rounding = _dayOfWeekCornerRoundingRadius; - } - - private void SetHeaderCornerRoundingRadius(float? radius) - { - _headerCornerRoundingRadius = radius ?? GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; - - StateCommon.Header.Border.Rounding = _headerCornerRoundingRadius; - } - - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMultilineStringEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMultilineStringEditor.cs new file mode 100644 index 000000000..e387256c1 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonMultilineStringEditor.cs @@ -0,0 +1,72 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Public API to display the . + public class KryptonMultilineStringEditor + { + #region Public + + /// Shows a new with default options. + /// A new with default data. + public static DialogResult Show() => ShowCore(null, null, null, null, null); + + /// Shows a new with specified options. + /// The string contents array. + /// A new with specified data. + public static DialogResult Show(string[]? contents) => ShowCore(contents, null, null, null, null); + + /// Shows a new with specified options. + /// The string contents array. + /// The use rich text box. + /// A new with specified data. + public static DialogResult Show(string[]? contents, bool? useRichTextBox) => ShowCore(contents, null, useRichTextBox, null, null); + + /// Shows a new with specified options. + /// The string contents array. + /// The use rich text box. + /// The header text. + /// The window text. + /// A new with specified data. + public static DialogResult Show(string[]? contents, bool? useRichTextBox, string? headerText, string? windowText) => ShowCore(contents, null, useRichTextBox, headerText, windowText); + + /// Shows a new with specified options. + /// The string collection. + /// A new with specified data. + public static DialogResult Show(StringCollection? collection) => ShowCore(null, collection, null, null, null); + + /// Shows a new with specified options. + /// The string collection. + /// The use rich text box. + /// A new with specified data. + public static DialogResult Show(StringCollection? collection, bool? useRichTextBox) => ShowCore(null, collection, useRichTextBox, null, null); + + /// Shows a new with specified options. + /// The string collection. + /// The use rich text box. + /// The header text. + /// The window text. + /// A new with specified data. + public static DialogResult Show(StringCollection? collection, bool? useRichTextBox, string? headerText, string? windowText) => ShowCore(null, collection, useRichTextBox, headerText, windowText); + + #endregion + + #region Implementation + + private static DialogResult ShowCore(string[]? contents, StringCollection? collection, + bool? useRichTextBox, string? headerText, string? windowTitle) + { + using var kmse = new VisualMultilineStringEditorForm(contents, collection, useRichTextBox, headerText, windowTitle); + + return kmse.ShowDialog(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonNumericUpDown.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonNumericUpDown.cs index 8aa23b2e2..1890bdc1e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonNumericUpDown.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonNumericUpDown.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -521,7 +521,7 @@ public void Dispose() /// /// The state for which the image is needed. /// Color value. - public virtual Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public virtual Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content long text. @@ -655,7 +655,7 @@ private void DrawUpDownButtons(Graphics g, Rectangle clientRect) _viewButton.ElementState = ButtonElementState(upRect); _viewButton.Layout(layoutContext); _viewButton.Render(renderContext); - renderContext.Renderer.RenderGlyph.DrawInputControlNumericUpGlyph(renderContext, _viewButton.ClientRectangle, _palette.PaletteContent, _viewButton.ElementState); + renderContext.Renderer!.RenderGlyph.DrawInputControlNumericUpGlyph(renderContext, _viewButton.ClientRectangle, _palette.PaletteContent, _viewButton.ElementState); // Down button layoutContext.DisplayRectangle = downRect; @@ -719,22 +719,20 @@ public NumericUpDownButtonSpecCollection(KryptonNumericUpDown owner) #region Instance Fields private VisualPopupToolTip? _visualPopupToolTip; - private readonly ButtonSpecManagerLayout _buttonManager; + private readonly ButtonSpecManagerLayout? _buttonManager; private readonly ViewLayoutDocker _drawDockerInner; private readonly ViewDrawDocker _drawDockerOuter; private readonly ViewLayoutFill _layoutFill; private readonly InternalNumericUpDown _numericUpDown; private InputControlStyle _inputControlStyle; private ButtonStyle _upDownButtonStyle; - private SubclassEdit _subclassEdit; + private SubclassEdit? _subclassEdit; private SubclassButtons? _subclassButtons; private bool? _fixedActive; private bool _forcedLayout; private bool _mouseOver; private bool _alwaysActive; private bool _trackingMouseEnter; - private float _cornerRoundingRadius; - #endregion #region Events @@ -873,10 +871,10 @@ public KryptonNumericUpDown() // Create button specification collection manager _buttonManager = new ButtonSpecManagerLayout(this, Redirector, ButtonSpecs, null, - new[] { _drawDockerInner }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, - new[] { PaletteMetricPadding.HeaderButtonPaddingInputControl }, + [_drawDockerInner], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetInputControl], + [PaletteMetricPadding.HeaderButtonPaddingInputControl], CreateToolStripRenderer, NeedPaintDelegate); @@ -888,8 +886,6 @@ public KryptonNumericUpDown() // Add text box to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(_numericUpDown); - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -904,7 +900,7 @@ protected override void Dispose(bool disposing) OnCancelToolTip(this, EventArgs.Empty); // Remember to pull down the manager instance - _buttonManager.Destruct(); + _buttonManager?.Destruct(); // Tell the buttons class to cleanup resources _subclassButtons?.Dispose(); @@ -915,19 +911,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets and sets if the control is in the tab chain. /// @@ -951,7 +934,7 @@ public float CornerRoundingRadius [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)] - public NumericUpDown? NumericUpDown => _numericUpDown; + public NumericUpDown NumericUpDown => _numericUpDown; /// /// Gets access to the contained input control. @@ -988,7 +971,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -1102,11 +1085,11 @@ public bool TrailingZeroes [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager.UseMnemonic; + get => _buttonManager!.UseMnemonic; set { - if (_buttonManager.UseMnemonic != value) + if (_buttonManager!.UseMnemonic != value) { _buttonManager.UseMnemonic = value; PerformNeedPaint(true); @@ -1400,7 +1383,7 @@ public ButtonStyle UpDownButtonStyle /// /// The position of the first character in the current text selection within the text box. /// The number of characters to select. - public void Select(int start, int length) => _numericUpDown.Select(start, length); + public void Select(int start, int length) => _numericUpDown?.Select(start, length); /// /// Sets the fixed state of the control. @@ -1440,12 +1423,12 @@ public ButtonStyle UpDownButtonStyle /// /// Displays the previous item in the collection. /// - public void UpButton() => NumericUpDown.UpButton(); + public void UpButton() => NumericUpDown?.UpButton(); /// /// Displays the next item in the collection. /// - public void DownButton() => NumericUpDown.DownButton(); + public void DownButton() => NumericUpDown?.DownButton(); /// /// Get the preferred size of the control based on a proposed size. @@ -1550,9 +1533,9 @@ public bool DesignerGetHitTest(Point pt) /// Mouse location. [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public Component DesignerComponentFromPoint(Point pt) => + public Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision /// @@ -1661,7 +1644,7 @@ protected override void OnEnabledChanged(EventArgs e) _drawDockerOuter.Enabled = Enabled; // Update state to reflect change in enabled state - _buttonManager.RefreshButtons(); + _buttonManager?.RefreshButtons(); PerformNeedPaint(true); @@ -1684,7 +1667,7 @@ protected override void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected override void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected override void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { InvalidateChildren(); base.OnPaletteChanged(e); @@ -1750,7 +1733,7 @@ protected override void OnLayout(LayoutEventArgs levent) if (IsHandleCreated || _forcedLayout || (DesignMode && (_numericUpDown != null))) { Rectangle fillRect = _layoutFill.FillRect; - _numericUpDown.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); + _numericUpDown?.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); } } } @@ -1786,7 +1769,7 @@ protected override void OnMouseLeave(EventArgs e) protected override void OnGotFocus(EventArgs e) { base.OnGotFocus(e); - _numericUpDown.Focus(); + _numericUpDown?.Focus(); } /// @@ -1848,13 +1831,13 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) IPaletteTriple triple = GetTripleState(); PaletteState state = _drawDockerOuter.State; _numericUpDown.BackColor = triple.PaletteBack.GetBackColor1(state); - _numericUpDown.ForeColor = triple.PaletteContent.GetContentShortTextColor1(state); + _numericUpDown.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(state); // Only set the font if the numeric up down has been created - Font font = triple.PaletteContent.GetContentShortTextFont(state); + Font? font = triple.PaletteContent.GetContentShortTextFont(state); if ((_numericUpDown.Handle != IntPtr.Zero) && !_numericUpDown.Font.Equals(font)) { - _numericUpDown.Font = font; + _numericUpDown.Font = font!; } } @@ -1999,13 +1982,13 @@ private void UpdateStateAndPalettes() { // Get the correct palette settings to use IPaletteTriple tripleState = GetTripleState(); - _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder); + _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder!); // Update enabled state _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDockerOuter.ElementState = state; } @@ -2024,11 +2007,11 @@ private int PreferredHeight } } - private void OnNumericUpDownTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnNumericUpDownTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnNumericUpDownValueChanged(object sender, EventArgs e) => OnValueChanged(e); + private void OnNumericUpDownValueChanged(object? sender, EventArgs e) => OnValueChanged(e); - private void OnNumericUpDownGotFocus(object sender, EventArgs e) + private void OnNumericUpDownGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); @@ -2038,7 +2021,7 @@ private void OnNumericUpDownGotFocus(object sender, EventArgs e) // ReSharper restore RedundantBaseQualifier } - private void OnNumericUpDownLostFocus(object sender, EventArgs e) + private void OnNumericUpDownLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); @@ -2048,19 +2031,19 @@ private void OnNumericUpDownLostFocus(object sender, EventArgs e) // ReSharper restore RedundantBaseQualifier } - private void OnNumericUpDownKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnNumericUpDownKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnNumericUpDownKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnNumericUpDownKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnNumericUpDownKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnNumericUpDownKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnNumericUpDownPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnNumericUpDownPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnNumericUpDownValidated(object sender, EventArgs e) => OnValidated(e); + private void OnNumericUpDownValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnNumericUpDownValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnNumericUpDownValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed && !Disposing) { @@ -2080,7 +2063,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) var shadow = true; // Find the button spec associated with the tooltip request - ButtonSpec? buttonSpec = _buttonManager.ButtonSpecFromView(e.Target); + ButtonSpec? buttonSpec = _buttonManager?.ButtonSpecFromView(e.Target); // If the tooltip is for a button spec if (buttonSpec != null) @@ -2127,21 +2110,21 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; - // Not showing a popup page any more + // Not showing a popup page anymore _visualPopupToolTip = null; } - private void OnNumericUpDownMouseChange(object sender, EventArgs e) + private void OnNumericUpDownMouseChange(object? sender, EventArgs e) { // Find new tracking mouse change state var tracking = _numericUpDown.MouseOver || @@ -2167,14 +2150,6 @@ private void OnNumericUpDownMouseChange(object sender, EventArgs e) } } } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOpenFileDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOpenFileDialog.cs index 9d1bcc244..2852c4f36 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOpenFileDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOpenFileDialog.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -86,7 +86,7 @@ public override bool CheckPathExists set => _internalOpenFileDialog.CheckPathExists = value; } -#if NET60_OR_GREATER +#if NET6_0_OR_GREATER /// public override Guid? ClientGuid { diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOutlookGrid.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOutlookGrid.cs new file mode 100644 index 000000000..39e482099 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOutlookGrid.cs @@ -0,0 +1,3230 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Krypton DataGridView allowing nested grouping and unlimited sorting + /// + /// + public partial class KryptonOutlookGrid : KryptonDataGridView + { + #region Design Code + private IContainer? components; + + private void InitializeComponent() + { + components = new Container(); + + } + #endregion + + #region Variables + + private RightToLeftLayout _rightToLeftLayout; + + private KryptonOutlookGridGroupBox? _groupBox; + //Krypton + private PaletteBase? _palette; + private readonly PaletteRedirect _paletteRedirect; + private PaletteBackInheritRedirect _paletteBack; + private PaletteBorderInheritRedirect _paletteBorder; + //private PaletteContentInheritRedirect _paletteContent; + private IDisposable? _mementoBack; + + private OutlookGridGroupCollection _groupCollection; // List of Groups (of rows) + private List _internalRows; // List of Rows in order to keep them as is (without grouping,...) + private readonly OutlookGridColumnCollection _internalColumns; // List of columns in order to know if sorted, Grouped, types,... + private int _previousGroupRowSelected = -1; //Useful to allow the selection of a group row or not when on mouse down + + //Krypton ContextMenu for the columns header + private KryptonContextMenu? _contextMenu; + private KryptonContextMenuItems? _menuItems; + private KryptonContextMenuItem _menuSortAscending; + private KryptonContextMenuItem _menuSortDescending; + private KryptonContextMenuItem _menuClearSorting; + private KryptonContextMenuSeparator _menuSeparator1; + private KryptonContextMenuItem _menuGroupByThisColumn; + private KryptonContextMenuItem _menuUngroupByThisColumn; + private KryptonContextMenuItem _menuShowGroupBox; + private KryptonContextMenuItem _menuHideGroupBox; + private KryptonContextMenuSeparator _menuSeparator2; + private KryptonContextMenuItem _menuBestFitColumn; + private KryptonContextMenuItem _menuBestFitAllColumns; + private KryptonContextMenuSeparator _menuSeparator3; + private KryptonContextMenuItem _menuVisibleColumns; + private KryptonContextMenuItem _menuGroupInterval; + private KryptonContextMenuItem _menuSortBySummary; + private KryptonContextMenuItem _menuExpand; + private KryptonContextMenuItem _menuCollapse; + private KryptonContextMenuSeparator _menuSeparator4; + private KryptonContextMenuSeparator _menuSeparator5; + private KryptonContextMenuItem _menuConditionalFormatting; + private int _colSelected = 1; //for menu + private const int FORMATTING_BAR_SOLID_GRADIENT_SEP_INDEX = 3; + + //For the Drag and drop of columns + private Rectangle _dragDropRectangle; + private int _dragDropSourceIndex; + private int _dragDropTargetIndex; + private int _dragDropCurrentIndex = -1; + private int _dragDropType; //0=column, 1=row + + private bool _hideColumnOnGrouping; + + //Nodes + private bool _showLines; + internal bool InExpandCollapseMouseCapture; + private GridFillMode _fillMode; + + //Formatting + private List _formatConditions; + + private readonly float _factorX; + private readonly float _factorY; + + #endregion + + #region Events + + /// + /// Group Image Click Event + /// + public event EventHandler? GroupImageClick; + /// + /// Node expanding event + /// + public event EventHandler? NodeExpanding; + /// + /// Node Expanded event + /// + public event EventHandler? NodeExpanded; + /// + /// Node Collapsing Event + /// + public event EventHandler? NodeCollapsing; + /// + /// Node Collapsed event + /// + public event EventHandler? NodeCollapsed; + + #endregion + + #region Identity + + /// + /// Constructor + /// + public KryptonOutlookGrid() + { + InitializeComponent(); + + // very important, this indicates that a new default row class is going to be used to fill the grid + // in this case our custom OutlookGridRow class + base.RowTemplate = new OutlookGridRow(); + _groupCollection = new OutlookGridGroupCollection(null); + _internalRows = new List(); + _internalColumns = new OutlookGridColumnCollection(); + _fillMode = GridFillMode.GroupsOnly; + + // Cache the current global palette setting + _palette = KryptonManager.CurrentGlobalPalette; + + // Hook into palette events + if (_palette != null) + { + _palette.PalettePaint += OnPalettePaint; + } + + // (4) We want to be notified whenever the global palette changes + KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; + + // Create redirection object to the base palette + _paletteRedirect = new PaletteRedirect(_palette); + + // Create accessor objects for the back, border and content + _paletteBack = new PaletteBackInheritRedirect(_paletteRedirect); + _paletteBorder = new PaletteBorderInheritRedirect(_paletteRedirect); + //_paletteContent = new PaletteContentInheritRedirect(_paletteRedirect); + + AllowUserToOrderColumns = false; //we will handle it ourselves + _hideColumnOnGrouping = false; + _formatConditions = new List(); + + using (Graphics g = CreateGraphics()) + { + _factorX = g.DpiX > 96 ? 1f * g.DpiX / 96 : 1f; + _factorY = g.DpiY > 96 ? 1f * g.DpiY / 96 : 1f; + } + + //Update StaticValues + //ColumnHeadersHeight = (int)(ColumnHeadersHeight * factorY); //No need already done in KryptonDataGridView + GlobalStaticValues.DefaultGroupRowHeight = (int)(GlobalStaticValues.DefaultGroupRowHeight * _factorY); + GlobalStaticValues.Office2013GroupRowHeight = (int)(GlobalStaticValues.Office2013GroupRowHeight * _factorY); + GlobalStaticValues.DefaultOffsetHeight = (int)(GlobalStaticValues.DefaultOffsetHeight * _factorY); + GlobalStaticValues.Office2013OffsetHeight = (int)(GlobalStaticValues.DefaultOffsetHeight * _factorY); + GlobalStaticValues.ImageOffsetWidth = (int)(GlobalStaticValues.ImageOffsetWidth * _factorX); + GlobalStaticValues.GroupLevelMultiplier = (int)(GlobalStaticValues.GroupLevelMultiplier * _factorX); + GlobalStaticValues.GroupImageSide = (int)(GlobalStaticValues.GroupImageSide * _factorX); + + _rightToLeftLayout = RightToLeftLayout.LeftToRight; + } + + /// + /// Definitely removes flickering - may not work on some systems/can cause higher CPU usage. + /// + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED + return cp; + } + } + + + #endregion OutlookGrid constructor + + #region OutlookGrid Properties + + /// + /// Gets the RowTemplate of the grid. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new DataGridViewRow RowTemplate => base.RowTemplate; + + /// + /// Gets if the grid is grouped + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool IsGridGrouped => !(_groupCollection.Count == 0); + + /// + /// Gets or sets the OutlookGridGroupBox + /// + [Category("Behavior")] + [Description("Associate the OutlookGridGroupBox with the grid.")] + [DefaultValue(null)] + public KryptonOutlookGridGroupBox? GroupBox + { + get => _groupBox; + set => _groupBox = value; + } + + /// + /// Gets or sets the list of rows in the grid (without grouping,... for having a copy) + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public List InternalRows + { + get => _internalRows; + set => _internalRows = value; + } + + /// + /// Gets or sets the previous selected group row + /// + [Browsable(false)] + public int PreviousSelectedGroupRow + { + get => _previousGroupRowSelected; + + set => _previousGroupRowSelected = value; + } + + /// + /// Gets the Krypton Palette of the OutlookGrid + /// + [Browsable(false)] + public PaletteBase? GridPalette => _palette; + + /// + /// Gets or sets the group collection. + /// + /// OutlookGridGroupCollection. + [Browsable(false)] + public OutlookGridGroupCollection GroupCollection + { + get => _groupCollection; + set => _groupCollection = value; + } + + /// + /// Gets or sets the HideColumnOnGrouping property. + /// + /// True if the column should be hidden when it is grouped, false otherwise. + [Category("Behavior")] + [Description("Hide the column when it is grouped.")] + [DefaultValue(false)] + public bool HideColumnOnGrouping + { + get => _hideColumnOnGrouping; + set => _hideColumnOnGrouping = value; + } + + /// + /// Gets or sets the conditional formatting items list. + /// + /// + /// The conditional formatting items list. + /// + [Category("Behavior")] + [Description("Conditional formatting.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public List ConditionalFormatting + { + get => _formatConditions; + set => _formatConditions = value; + } + + + /// + /// Gets or sets a value indicating whether the lines are shown between nodes. + /// + /// + /// true if [show lines]; otherwise, false. + /// + [DefaultValue(true)] + public bool ShowLines + { + get => _showLines; + set + { + if (value != _showLines) + { + _showLines = value; + Invalidate(); + } + } + } + + /// + /// Gets or sets the fill mode. + /// + /// + /// The fill mode. + /// + public GridFillMode FillMode + { + get => _fillMode; + set + { + if (value != _fillMode) + { + _fillMode = value; + Invalidate(); + } + } + } + + public RightToLeftLayout RightToLeftLayout + { + get => _rightToLeftLayout; + + set => _rightToLeftLayout = value; + } + + #endregion OutlookGrid property definitions + + #region OutlookGrid Overrides + + /// + /// Releases unmanaged and - optionally - managed resources. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (_mementoBack != null) + { + _mementoBack.Dispose(); + _mementoBack = null; + } + + // (10) Unhook from the palette events + if (_palette != null) + { + _palette.PalettePaint -= OnPalettePaint; + _palette = null; + } + + // (11) Unhook from the static events, otherwise we cannot be garbage collected + KryptonManager.GlobalPaletteChanged -= OnGlobalPaletteChanged; + + //Unhook from specific events + if (_groupBox != null) + { + _groupBox.ColumnGroupAdded -= ColumnGroupAddedEvent; + _groupBox.ColumnSortChanged -= ColumnSortChangedEvent; + _groupBox.ColumnGroupRemoved -= ColumnGroupRemovedEvent; + _groupBox.ClearGrouping -= ClearGroupingEvent; + _groupBox.FullCollapse -= FullCollapseEvent; + _groupBox.FullExpand -= FullExpandEvent; + _groupBox.ColumnGroupOrderChanged -= ColumnGroupIndexChangedEvent; + _groupBox.GroupExpand -= GridGroupExpandEvent; + _groupBox.GroupCollapse -= GridGroupCollapseEvent; + _groupBox.GroupIntervalClick -= GroupIntervalClickEvent; + _groupBox.SortBySummaryCount -= SortBySummaryCountEvent; + } + } + + if (disposing && components != null) + { + components.Dispose(); + } + + base.Dispose(disposing); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnCellBeginEdit(DataGridViewCellCancelEventArgs e) + { + OutlookGridRow row = (OutlookGridRow)Rows[e.RowIndex]; + if (row.IsGroupRow) + { + e.Cancel = true; + } + else + { + base.OnCellBeginEdit(e); + } + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnCellDoubleClick(DataGridViewCellEventArgs e) + { + if (e.RowIndex >= 0) + { + OutlookGridRow row = (OutlookGridRow)Rows[e.RowIndex]; + if (row.IsGroupRow) + { + if (row.Group != null) + { + row.Group.Collapsed = !row.Group.Collapsed; + } + + //this is a workaround to make the grid re-calculate it's contents and background bounds + // so the background is updated correctly. + // this will also invalidate the control, so it will redraw itself + row.Visible = false; + row.Visible = true; + return; + } + } + base.OnCellDoubleClick(e); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnMouseUp(MouseEventArgs e) + { + // used to keep extra mouse moves from selecting more rows when collapsing + base.OnMouseUp(e); + InExpandCollapseMouseCapture = false; + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnMouseDown(MouseEventArgs e) + { + //stores values for drag/drop operations if necessary + if (AllowDrop) + { + if (HitTest(e.X, e.Y).ColumnIndex == -1 && HitTest(e.X, e.Y).RowIndex > -1) + { + //if this is a row header cell + if (Rows[HitTest(e.X, e.Y).RowIndex].Selected) + { + //if this row is selected + _dragDropType = 1; + Size dragSize = SystemInformation.DragSize; + _dragDropRectangle = new Rectangle(new Point(e.X - dragSize.Width / 2, e.Y - dragSize.Height / 2), dragSize); + _dragDropSourceIndex = HitTest(e.X, e.Y).RowIndex; + } + else + { + _dragDropRectangle = Rectangle.Empty; + } + } + else if (HitTest(e.X, e.Y).ColumnIndex > -1 && HitTest(e.X, e.Y).RowIndex == -1) + { + //if this is a column header cell + //if (this.Columns[this.HitTest(e.X, e.Y).ColumnIndex].Selected) + //{ + _dragDropType = 0; + _dragDropSourceIndex = HitTest(e.X, e.Y).ColumnIndex; + Size dragSize = SystemInformation.DragSize; + _dragDropRectangle = new Rectangle(new Point(e.X - dragSize.Width / 2, e.Y - dragSize.Height / 2), dragSize); + //} + //else + //{ + // DragDropRectangle = Rectangle.Empty; + //} //end if + } + else + { + _dragDropRectangle = Rectangle.Empty; + } + } + else + { + _dragDropRectangle = Rectangle.Empty; + } + base.OnMouseDown(e); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnMouseMove(MouseEventArgs e) + { + // while we are expanding and collapsing a node mouse moves are + // suppressed to keep selections from being messed up. + if (!InExpandCollapseMouseCapture) + { + bool dragDropDone = false; + //handles drag/drop operations + if (AllowDrop) + { + if ((e.Button & MouseButtons.Left) == MouseButtons.Left && Cursor.Current! != Cursors.SizeWE) + { + if (_dragDropRectangle != Rectangle.Empty && !_dragDropRectangle.Contains(e.X, e.Y)) + { + if (_dragDropType == 0) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_dragDropSourceIndex)!; + string groupInterval = ""; + string groupType = ""; + string? groupSortBySummaryCount = ""; + + if (col.GroupingType != null) + { + groupType = col.GroupingType.GetType().Name; + if (groupType == nameof(OutlookGridDateTimeGroup)) + { + groupInterval = ((OutlookGridDateTimeGroup)col.GroupingType).Interval.ToString(); + } + + groupSortBySummaryCount = CommonHelper.BoolToString(col.GroupingType.SortBySummaryCount); + } + //column drag/drop + string info = + $"{col.Name}|{col.DataGridViewColumn!.HeaderText}|{col.DataGridViewColumn.HeaderCell.SortGlyphDirection}|{col.DataGridViewColumn.SortMode.ToString()}|{groupType}|{groupInterval}|{groupSortBySummaryCount}"; + DragDropEffects dropEffect = DoDragDrop(info, DragDropEffects.Move); + dragDropDone = true; + } + else if (_dragDropType == 1) + { + //row drag/drop + DragDropEffects dropEffect = DoDragDrop(Rows[_dragDropSourceIndex], DragDropEffects.Move); + dragDropDone = true; + } + } + } + } + base.OnMouseMove(e); + if (dragDropDone) + { + CellOver = new Point(-2, -2);//To avoid that the column header appears in a pressed state - Modification of ToolKit + } + } + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnDragLeave(EventArgs e) + { + if (_dragDropCurrentIndex > -1 && _dragDropType == 0) + { + DataGridViewColumn col = Columns[_dragDropCurrentIndex]; + if (_groupBox != null && _groupBox.Contains(col.Name)) + { + _dragDropCurrentIndex = -1; + //this.InvalidateColumn(col.Index); + Invalidate(); + } + else + { + _dragDropCurrentIndex = -1; + } + } + + base.OnDragLeave(e); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnDragOver(DragEventArgs drgevent) + { + //runs while the drag/drop is in progress + if (AllowDrop) + { + drgevent.Effect = DragDropEffects.Move; + if (_dragDropType == 0) + { + //column drag/drop + int curCol = HitTest(PointToClient(new Point(drgevent.X, drgevent.Y)).X, PointToClient(new Point(drgevent.X, drgevent.Y)).Y).ColumnIndex; + if (_dragDropCurrentIndex != curCol) + { + _dragDropCurrentIndex = curCol; + Invalidate(); //repaint + } + } + else if (_dragDropType == 1) + { + //row drag/drop + int curRow = HitTest(PointToClient(new Point(drgevent.X, drgevent.Y)).X, PointToClient(new Point(drgevent.X, drgevent.Y)).Y).RowIndex; + if (_dragDropCurrentIndex != curRow) + { + _dragDropCurrentIndex = curRow; + Invalidate(); //repaint + } + } + } + base.OnDragOver(drgevent); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnDragDrop(DragEventArgs drgevent) + { + //runs after a drag/drop operation for column/row has completed + if (AllowDrop) + { + if (drgevent.Effect == DragDropEffects.Move) + { + Point clientPoint = PointToClient(new Point(drgevent.X, drgevent.Y)); + if (_dragDropType == 0) + { + //if this is a column drag/drop operation + _dragDropTargetIndex = HitTest(clientPoint.X, clientPoint.Y).ColumnIndex; + if (_dragDropTargetIndex > -1 && _dragDropCurrentIndex < ColumnCount - 1) + { + _dragDropCurrentIndex = -1; + //************************************************* + //'SourceColumn' is null after the line of code + //below executes... Why? This works fine for rows!! + if (drgevent.Data!.GetData(typeof(string)) is string r) + { + string[] res = r.Split('|'); + DataGridViewColumn? sourceColumn = Columns[res[0]]; + //int SourceDisplayIndex = SourceColumn.DisplayIndex; + DataGridViewColumn targetColumn = Columns[_dragDropTargetIndex]; + // int TargetDisplayIndex = TargetColumn.DisplayIndex; + if (sourceColumn != null) + { + sourceColumn.DisplayIndex = targetColumn.DisplayIndex; + + //Debug + List listcol = new(); + foreach (DataGridViewColumn col in Columns) + { + listcol.Add(col); + } + + foreach (DataGridViewColumn col in listcol.OrderBy(x => x.DisplayIndex)) + { + Console.WriteLine($@"{col.Name} {col.DisplayIndex}"); + } + + Console.WriteLine(@"-----------------"); + + //************************************************* + //this.Columns.RemoveAt(DragDropSourceIndex); + //this.Columns.Insert(DragDropTargetIndex, SourceColumn); + + sourceColumn.Selected = false; + } + + targetColumn.Selected = false; + } + + //this.Columns[DragDropTargetIndex].Selected = true; + CurrentCell = this[_dragDropTargetIndex, 0]; + } //end if + } + else if (_dragDropType == 1) + { + //if this is a row drag/drop operation + _dragDropTargetIndex = HitTest(clientPoint.X, clientPoint.Y).RowIndex; + if (_dragDropTargetIndex > -1 && _dragDropCurrentIndex < RowCount - 1) + { + _dragDropCurrentIndex = -1; + DataGridViewRow? sourceRow = drgevent.Data?.GetData(typeof(DataGridViewRow)) as DataGridViewRow; + Rows.RemoveAt(_dragDropSourceIndex); + if (sourceRow != null) + { + Rows.Insert(_dragDropTargetIndex, sourceRow); + } + Rows[_dragDropTargetIndex].Selected = true; + CurrentCell = this[0, _dragDropTargetIndex]; + } + } + } + } + _dragDropCurrentIndex = -1; + Invalidate(); + base.OnDragDrop(drgevent); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + /// Draws a line for drag and drop + protected override void OnCellPainting(DataGridViewCellPaintingEventArgs e) + { + //draws red drag/drop target indicator lines if necessary + if (_dragDropCurrentIndex > -1) + { + if (_dragDropType == 0) + { + //column drag/drop + if (e.ColumnIndex == _dragDropCurrentIndex)// && DragDropCurrentIndex < this.ColumnCount) + { + //if this cell is in the same column as the mouse cursor + using (Pen p = new(Color.Red, 1)) + { + e.Graphics?.DrawLine(p, e.CellBounds.Left - 1, e.CellBounds.Top, e.CellBounds.Left - 1, e.CellBounds.Bottom); + } + } //end if + } + else if (_dragDropType == 1) + { + //row drag/drop + if (e.RowIndex == _dragDropCurrentIndex && _dragDropCurrentIndex < RowCount - 1) + { + //if this cell is in the same row as the mouse cursor + + using (Pen p = new(Color.Red, 1)) + { + e.Graphics?.DrawLine(p, e.CellBounds.Left, e.CellBounds.Top - 1, e.CellBounds.Right, e.CellBounds.Top - 1); + } + } + } + } + base.OnCellPainting(e); + } + + /// + /// Overrides OnCellMouseEnter + /// + /// DataGridViewCellEventArgs + protected override void OnCellMouseEnter(DataGridViewCellEventArgs e) + { + base.OnCellMouseEnter(e); + } + + /// + /// Overrides OnCellMouseDown - Check if the user has clicked on +/- of a group row + /// + /// + protected override void OnCellMouseDown(DataGridViewCellMouseEventArgs e) + { + //base.OnCellMouseDown(e); //needed. + if (e.RowIndex < 0) + { + base.OnCellMouseDown(e); // To allow column resizing + return; + } + OutlookGridRow row = (OutlookGridRow)Rows[e.RowIndex]; + //DebugUtilities.WriteLine("OnCellMouseDown " + DateTime.Now.Ticks.ToString() + "IsIconHit" + row.IsIconHit(e).ToString()); + if (_previousGroupRowSelected != -1 && _previousGroupRowSelected != e.RowIndex) + { + InvalidateRow(PreviousSelectedGroupRow); + } + + PreviousSelectedGroupRow = -1; + if (row.IsGroupRow) + { + PreviousSelectedGroupRow = e.RowIndex; + ClearSelection(); //unselect + if (row.IsIconHit(e)) + { + if (row.Group != null) + { + row.Group.Collapsed = !row.Group.Collapsed; + } + + //this is a workaround to make the grid re-calculate it's contents and backgroun bounds + // so the background is updated correctly. + // this will also invalidate the control, so it will redraw itself + row.Visible = false; + row.Visible = true; + //When collapsing the first row still seeing it. + if (row.Index < FirstDisplayedScrollingRowIndex) + { + FirstDisplayedScrollingRowIndex = row.Index; + } + } + else if (row.IsGroupImageHit(e)) + { + OnGroupImageClick(new OutlookGridGroupImageEventArgs(row)); + } + else + { + InvalidateRow(e.RowIndex); + } + } + else + { + base.OnCellMouseDown(e); + } + } + + /// + /// Overrides OnColumnHeaderMouseClick + /// + /// DataGridViewCellMouseEventArgs + protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e) + { + _colSelected = e.ColumnIndex; //To keep a track on which column we have pressed + //runs when the mouse is clicked over a column header cell + if (e.ColumnIndex > -1) + { + if (e.Button == MouseButtons.Right) + { + ShowColumnHeaderContextMenu(e.ColumnIndex); + } + else if (e.Button == MouseButtons.Left) + { + OutlookGridColumn? col = _internalColumns.FindFromColumnIndex(e.ColumnIndex) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("col")); + if (col.DataGridViewColumn!.SortMode != DataGridViewColumnSortMode.NotSortable) + { + SortOrder previousSort = col.SortDirection; + //Reset all sorting column only if not Ctrl or Shift or the column is grouped + if (ModifierKeys != Keys.Shift && ModifierKeys != Keys.Control && !col.IsGrouped) + { + ResetAllSortingColumns(); + } + + //Remove this SortIndex + if (ModifierKeys == Keys.Control) + { + UnSortColumn(col); + } + //Add the first or a new SortIndex + else + { + if (previousSort == SortOrder.None) + { + SortColumn(col, SortOrder.Ascending); + } + else + { + SortColumn(col, previousSort == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending); + } + } + + // Note Can we remove this? + //#if DEBUG + // internalColumns.DebugOutput(); + //#endif + + //Refresh the groupBox if the column is grouped + if (col.IsGrouped) + { + ForceRefreshGroupBox(); + } + + //Apply the changes + Fill(); + } + } + } + base.OnColumnHeaderMouseClick(e); + } + + //protected override void OnColumnAdded(DataGridViewColumnEventArgs e) + //{ + // var header = new FilterColumnHeaderCell(); + // // header.FilterButtonClicked += new EventHandler(header_FilterButtonClicked); + // e.Column.HeaderCell = header; + + + // base.OnColumnAdded(e); + //} + + + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnCellFormatting(DataGridViewCellFormattingEventArgs e) + { + //Allows to have a picture in the first column + if (e.DesiredType?.Name == "Image" && e.Value != null && e.Value.GetType().Name != e.DesiredType.Name && e.Value.GetType().Name != "Bitmap") + { + e.Value = null; + } + + base.OnCellFormatting(e); + } + + #endregion + + #region OutlookGrid Events + + /// + /// Called when [palette paint]. + /// + /// The sender. + /// The instance containing the event data. + private void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) + { + Invalidate(); + } + + /// + /// Called when [global palette changed]. + /// + /// The sender. + /// The instance containing the event data. + private void OnGlobalPaletteChanged(object? sender, EventArgs e) + { + // (5) Unhook events from old palette + if (_palette != null) + { + _palette.PalettePaint -= OnPalettePaint; + } + + // (6) Cache the new IPalette that is the global palette + _palette = KryptonManager.CurrentGlobalPalette; + _paletteRedirect.Target = _palette; //!!!!!! important + + //Reflect changes for the grouped heights + int h = GlobalStaticValues.DefaultGroupRowHeight; // default height + if (KryptonManager.CurrentGlobalPalette != null && KryptonManager.CurrentGlobalPalette.GetRenderer() == + KryptonManager.RenderOffice2013) + { + h = GlobalStaticValues.Office2013GroupRowHeight; // special height for office 2013 + } + + //For each outlookgridcolumn + for (int j = 0; j < _internalColumns.Count; j++) + { + if (_internalColumns[j].GroupingType != null) + { + var outlookGridGroup = _internalColumns[j].GroupingType; + if (outlookGridGroup != null) + { + outlookGridGroup.Height = h; + } + } + } + + // (7) Hook into events for the new palette + if (_palette != null) + { + _palette.PalettePaint += OnPalettePaint; + } + + // (8) Change of palette means we should repaint to show any changes + Invalidate(); + } + + /// + /// Clear sorting for the column selected by the menu + /// + /// + /// + private void OnColumnClearSorting(object? sender, EventArgs e) + { + if (_colSelected > -1) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + UnSortColumn(col); + Fill(); + } + } + + /// + /// Ascending sort for the column selected by the menu + /// + /// + /// + private void OnColumnSortAscending(object? sender, EventArgs e) + { + if (_colSelected > -1) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + SortColumn(col, SortOrder.Ascending); + if (col.IsGrouped) + { + ForceRefreshGroupBox(); + } + Fill(); + } + } + + /// + /// Descending sort for the column selected by the menu + /// + /// + /// + private void OnColumnSortDescending(object? sender, EventArgs e) + { + if (_colSelected > -1) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + SortColumn(col, SortOrder.Descending); + if (col.IsGrouped) + { + ForceRefreshGroupBox(); + } + Fill(); + } + } + + /// + /// Grouping for the column selected by the menu + /// + /// + /// + private void OnGroupByThisColumn(object? sender, EventArgs e) + { + if (_colSelected > -1) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + GroupColumn(col, SortOrder.Ascending, null); + ForceRefreshGroupBox(); + Fill(); + } + } + + /// + /// Ungrouping for the column selected by the menu + /// + /// + /// + private void OnUnGroupByThisColumn(object? sender, EventArgs e) + { + if (_colSelected > -1) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + UnGroupColumn(col.Name!); + ForceRefreshGroupBox(); + Fill(); + } + } + + private void OnGroupCollapse(object? sender, EventArgs e) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + Collapse(col.Name); + } + + private void OnGroupExpand(object? sender, EventArgs e) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + Expand(col.Name); + } + + private void OnSortBySummary(object? sender, EventArgs e) + { + + var item = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + if (col.GroupingType != null) + { + col.GroupingType.SortBySummaryCount = item.Checked; + } + ForceRefreshGroupBox(); + Fill(); + } + + private void OnGroupIntervalClick(object? sender, EventArgs e) + { + var item = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + if (col.GroupingType != null) + { + if (item != null) + { + if (item.Tag != null) + { + ((OutlookGridDateTimeGroup)col.GroupingType).Interval = + (DateInterval)Enum.Parse(typeof(DateInterval), item.Tag.ToString()!); + } + } + } + ForceRefreshGroupBox(); + Fill(); + } + + private void OnConditionalFormattingClick(object? sender, EventArgs e) + { + var item = sender as KryptonContextMenuImageSelect ?? throw new ArgumentNullException(nameof(sender)); + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + ConditionalFormatting? format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name); + ConditionalFormatting newformat = (item.Tag as List)![item.SelectedIndex]; + if (format == null) + { + _formatConditions.Add(new ConditionalFormatting(col.DataGridViewColumn!.Name, newformat.FormatType, newformat.FormatParams)); + } + else + { + format.FormatType = newformat.FormatType; + format.FormatParams = newformat.FormatParams; + } + item.SelectedIndex = -1; //I'm unable to get only one imageselect checked between solid and gradient, so reset the selected image + Fill(); + } + + private void OnTwoColorsCustomClick(object? sender, EventArgs e) + { + if (_rightToLeftLayout == RightToLeftLayout.LeftToRight) + { + VisualCustomFormatRuleForm fm = new VisualCustomFormatRuleForm(EnumConditionalFormatType.TwoColorsRange); + fm.ShowDialog(); + if (fm.DialogResult == DialogResult.OK) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + ConditionalFormatting? format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name); + if (format == null) + { + ConditionalFormatting newformat = new(col.DataGridViewColumn!.Name, EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(fm.MinimumColor, fm.MaximumColor)); + _formatConditions.Add(newformat); + } + else + { + format.FormatType = EnumConditionalFormatType.TwoColorsRange; + format.FormatParams = new TwoColorsParams(fm.MinimumColor, fm.MaximumColor); + } + Fill(); + } + fm.Dispose(); + } + else + { + VisualCustomFormatRuleRtlAwareForm fm = new VisualCustomFormatRuleRtlAwareForm(EnumConditionalFormatType.TwoColorsRange); + fm.ShowDialog(); + if (fm.DialogResult == DialogResult.OK) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + ConditionalFormatting? format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name); + if (format == null) + { + ConditionalFormatting newformat = new(col.DataGridViewColumn!.Name, EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(fm.MinimumColor, fm.MaximumColor)); + _formatConditions.Add(newformat); + } + else + { + format.FormatType = EnumConditionalFormatType.TwoColorsRange; + format.FormatParams = new TwoColorsParams(fm.MinimumColor, fm.MaximumColor); + } + Fill(); + } + fm.Dispose(); + } + } + + + private void OnThreeColorsCustomClick(object? sender, EventArgs e) + { + if (_rightToLeftLayout == RightToLeftLayout.LeftToRight) + { + VisualCustomFormatRuleForm fm = new VisualCustomFormatRuleForm(EnumConditionalFormatType.ThreeColorsRange); + fm.ShowDialog(); + if (fm.DialogResult == DialogResult.OK) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + ConditionalFormatting? format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name); + if (format == null) + { + ConditionalFormatting newformat = new(col.DataGridViewColumn!.Name, EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(248, 105, 107), Color.FromArgb(255, 235, 132), Color.FromArgb(99, 190, 123))); + _formatConditions.Add(newformat); + } + else + { + format.FormatType = EnumConditionalFormatType.ThreeColorsRange; + format.FormatParams = new ThreeColorsParams(Color.FromArgb(248, 105, 107), Color.FromArgb(255, 235, 132), Color.FromArgb(99, 190, 123)); + } + Fill(); + } + fm.Dispose(); + } + else + { + VisualCustomFormatRuleRtlAwareForm fm = new VisualCustomFormatRuleRtlAwareForm(EnumConditionalFormatType.ThreeColorsRange); + fm.ShowDialog(); + if (fm.DialogResult == DialogResult.OK) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + ConditionalFormatting? format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name); + if (format == null) + { + ConditionalFormatting newformat = new(col.DataGridViewColumn!.Name, EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(248, 105, 107), Color.FromArgb(255, 235, 132), Color.FromArgb(99, 190, 123))); + _formatConditions.Add(newformat); + } + else + { + format.FormatType = EnumConditionalFormatType.ThreeColorsRange; + format.FormatParams = new ThreeColorsParams(Color.FromArgb(248, 105, 107), Color.FromArgb(255, 235, 132), Color.FromArgb(99, 190, 123)); + } + Fill(); + } + fm.Dispose(); + } + } + + private void OnBarCustomClick(object? sender, EventArgs e) + { + if (_rightToLeftLayout == RightToLeftLayout.LeftToRight) + { + VisualCustomFormatRuleForm fm = new VisualCustomFormatRuleForm(EnumConditionalFormatType.Bar); + fm.ShowDialog(); + if (fm.DialogResult == DialogResult.OK) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + ConditionalFormatting? format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name); + if (format == null) + { + ConditionalFormatting newformat = new(col.DataGridViewColumn!.Name, EnumConditionalFormatType.Bar, new BarParams(fm.MinimumColor, fm.Gradient)); + _formatConditions.Add(newformat); + } + else + { + format.FormatType = EnumConditionalFormatType.Bar; + format.FormatParams = new BarParams(fm.MinimumColor, fm.Gradient); + } + Fill(); + } + fm.Dispose(); + } + else + { + VisualCustomFormatRuleRtlAwareForm fm = new VisualCustomFormatRuleRtlAwareForm(EnumConditionalFormatType.Bar); + fm.ShowDialog(); + if (fm.DialogResult == DialogResult.OK) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + ConditionalFormatting? format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name); + if (format == null) + { + ConditionalFormatting newformat = new(col.DataGridViewColumn!.Name, EnumConditionalFormatType.Bar, new BarParams(fm.MinimumColor, fm.Gradient)); + _formatConditions.Add(newformat); + } + else + { + format.FormatType = EnumConditionalFormatType.Bar; + format.FormatParams = new BarParams(fm.MinimumColor, fm.Gradient); + } + Fill(); + } + fm.Dispose(); + } + } + + private void OnClearConditionalClick(object? sender, EventArgs e) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnIndex(_colSelected)!; + _formatConditions.RemoveAll(x => x.ColumnName == col.Name); + for (int i = 0; i < _internalRows.Count; i++) + { + FormattingCell fCell = (FormattingCell)_internalRows[i].Cells[_colSelected]; + //fCell.FormatType = formatConditions[i].FormatType; + fCell.FormatParams = null; + } + Fill(); + } + + + private void OnColumnVisibleCheckedChanged(object? sender, EventArgs e) + { + var item = sender as KryptonContextMenuCheckBox ?? throw new ArgumentNullException(nameof(sender)); + Columns[(int)item.Tag!].Visible = item.Checked; + } + + /// + /// Shows the groupbox + /// + /// + /// + private void OnShowGroupBox(object? sender, EventArgs e) + { + if (_groupBox != null) + { + _groupBox.Show(); + } + } + + /// + /// Hide the groupbox + /// + /// + /// + private void OnHideGroupBox(object? sender, EventArgs e) + { + if (_groupBox != null) + { + _groupBox.Hide(); + } + } + + /// + /// Resizes the selected column by the menu to best fit + /// + /// + /// + private void OnBestFitColumn(object? sender, EventArgs e) + { + if (_colSelected > -1) + { + Cursor.Current = Cursors.WaitCursor; + AutoResizeColumn(_colSelected, DataGridViewAutoSizeColumnMode.AllCells); + Cursor.Current = Cursors.Default; + } + } + + /// + /// Resizes all columns to best fit + /// + /// + /// + private void OnBestFitAllColumns(object? sender, EventArgs e) + { + Cursor.Current = Cursors.WaitCursor; + AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader); + Cursor.Current = Cursors.Default; + } + + /// + /// Handles the ColumnSortChangedEvent event. Update the header (glyph) and fill the grid too. + /// + /// Source of the event. + /// A OutlookGridColumnEventArgs that contains the event data. + private void ColumnSortChangedEvent(object? sender, OutlookGridColumnEventArgs e) + { + if (e is null) + { + throw new ArgumentNullException(nameof(e)); + } +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives ColumnSortChangedEvent : " + e.Column.Name + @" " + e.Column.SortDirection); +#endif + _internalColumns[e.Column.Name!]!.SortDirection = e.Column.SortDirection; + _internalColumns[e.Column.Name!]!.DataGridViewColumn!.HeaderCell.SortGlyphDirection = e.Column.SortDirection; + Fill(); + } + + /// + /// Handles the ColumnGroupAddedEvent event. Fill the grid too. + /// + /// Source of the event. + /// A OutlookGridColumnEventArgs that contains the event data. + private void ColumnGroupAddedEvent(object? sender, OutlookGridColumnEventArgs e) + { + GroupColumn(e.Column.Name!, e.Column.SortDirection, null); + //We fill again the grid with the new Grouping info + Fill(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives ColumnGroupAddedEvent : " + e.Column.Name); +#endif + } + + /// + /// Handles the ColumnGroupRemovedEvent event. Fill the grid too. + /// + /// Source of the event. + /// A OutlookGridColumnEventArgs that contains the event data. + private void ColumnGroupRemovedEvent(object? sender, OutlookGridColumnEventArgs e) + { + UnGroupColumn(e.Column.Name!); + //We fill again the grid with the new Grouping info + Fill(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives ColumnGroupRemovedEvent : " + e.Column.Name); +#endif + } + + /// + /// Handles the ClearGroupingEvent event. Fill the grid too. + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void ClearGroupingEvent(object? sender, EventArgs e) + { + ClearGroups(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives ClearGroupingEvent"); +#endif + } + + /// + /// Handles the FullCollapseEvent event. + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void FullCollapseEvent(object? sender, EventArgs e) + { + CollapseAll(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives FullCollapseEvent"); +#endif + } + + /// + /// Handles the FullExpandEvent event. + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void FullExpandEvent(object? sender, EventArgs e) + { + ExpandAll(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives FullExpandEvent"); +#endif + } + + /// + /// Handles the GroupExpandEvent event. + /// + /// + /// + private void GridGroupExpandEvent(object? sender, OutlookGridColumnEventArgs e) + { + Expand(e.Column.Name); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives GridGroupExpandEvent"); +#endif + } + + private void GridGroupCollapseEvent(object? sender, OutlookGridColumnEventArgs e) + { + Collapse(e.Column.Name); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives GridGroupCollapseEvent"); +#endif + } + + private void ColumnGroupIndexChangedEvent(object? sender, OutlookGridColumnEventArgs e) + { + //TODO 25/01/2014 + _internalColumns.ChangeGroupIndex(e.Column); + Fill(); //to reflect the changes + ForceRefreshGroupBox(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives ColumnGroupIndexChangedEvent"); +#endif + } + + private void GroupIntervalClickEvent(object? sender, OutlookGridColumnEventArgs e) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnName(e.Column.Name)!; + (col.GroupingType as OutlookGridDateTimeGroup)!.Interval = + (e.Column.GroupingType as OutlookGridDateTimeGroup)!.Interval; + Fill(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives GroupIntervalClickEvent"); +#endif + } + + private void SortBySummaryCountEvent(object? sender, OutlookGridColumnEventArgs e) + { + OutlookGridColumn col = (OutlookGridColumn)_internalColumns.FindFromColumnName(e.Column.Name)!; + if (col.GroupingType != null) + { + if (e.Column.GroupingType != null) + { + col.GroupingType.SortBySummaryCount = e.Column.GroupingType.SortBySummaryCount; + } + } + Fill(); +#if DEBUG + Console.WriteLine(@"OutlookGrid - Receives SortBySummaryCountEvent"); +#endif + } + + /// + /// Raises the GroupImageClick event. + /// + /// A OutlookGridGroupImageEventArgs that contains the event data. + protected virtual void OnGroupImageClick(OutlookGridGroupImageEventArgs e) + { + if (GroupImageClick != null) + { + GroupImageClick(this, e); + } + } + + /// + /// Raises the NodeExpanding event. + /// + /// A ExpandingEventArgs that contains the event data. + protected virtual void OnNodeExpanding(ExpandingEventArgs e) + { + if (NodeExpanding != null) + { + NodeExpanding(this, e); + } + } + + /// + /// Raises the NodeExpanded event. + /// + /// A ExpandedEventArgs that contains the event data. + protected virtual void OnNodeExpanded(ExpandedEventArgs e) + { + if (NodeExpanded != null) + { + NodeExpanded(this, e); + } + } + + /// + /// Raises the NodeCollapsing event. + /// + /// A CollapsingEventArgs that contains the event data. + protected virtual void OnNodeCollapsing(CollapsingEventArgs e) + { + if (NodeCollapsing != null) + { + NodeCollapsing(this, e); + } + + } + + /// + /// Raises the NodeCollapsed event. + /// + /// A CollapsedEventArgs that contains the event data. + protected virtual void OnNodeCollapsed(CollapsedEventArgs e) + { + if (NodeCollapsed != null) + { + NodeCollapsed(this, e); + } + } + + #endregion + + #region OutlookGrid methods + + /// + /// Add a column for internal uses of the OutlookGrid. The column must already exists in the datagridview. Do this *BEFORE* using the grid (sorting and grouping, filling,...) + /// + /// The DataGridViewColumn. + /// The group type for the column. + /// The sort direction. + /// The column's position in grouping and at which level. + /// the column's position among sorted columns. + /// The comparer if needed + public void AddInternalColumn(DataGridViewColumn col, IOutlookGridGroup group, SortOrder sortDirection, int groupIndex, int sortIndex, IComparer? comparer) + { + AddInternalColumn(new OutlookGridColumn(col, group, sortDirection, groupIndex, sortIndex, comparer)); + //internalColumns.Add(new OutlookGridColumn(col, group, sortDirection, groupIndex, sortIndex)); + ////Already reflect the SortOrder on the column + //col.HeaderCell.SortGlyphDirection = sortDirection; + //if (this._hideColumnOnGrouping && groupIndex > -1 && group.AllowHiddenWhenGrouped) + // col.Visible = false; + } + + /// + /// Add a column for internal uses of the OutlookGrid. The column must already exists in the datagridview. Do this *BEFORE* using the grid (sorting and grouping, filling,...) + /// + /// The DataGridViewColumn. + /// The group type for the column. + /// The sort direction. + /// The column's position in grouping and at which level. + /// the column's position among sorted columns. + public void AddInternalColumn(DataGridViewColumn col, IOutlookGridGroup group, SortOrder sortDirection, int groupIndex, int sortIndex) => + AddInternalColumn(new OutlookGridColumn(col, group, sortDirection, groupIndex, sortIndex, null)); + + /// + /// Add a column for internal uses of the OutlookGrid. The column must already exists in the datagridview. Do this *BEFORE* using the grid (sorting and grouping, filling,...) + /// + /// The configured OutlookGridColumn. + public void AddInternalColumn(OutlookGridColumn col) + { + Debug.Assert(col != null); + if (col != null) + { + _internalColumns.Add(col); + //Already reflect the SortOrder on the column + col.DataGridViewColumn!.HeaderCell.SortGlyphDirection = col.SortDirection; + if (col.GroupingType != null && _hideColumnOnGrouping && col.GroupIndex > -1 && col.GroupingType.AllowHiddenWhenGrouped) + { + col.DataGridViewColumn.Visible = false; + } + } + } + + /// + /// Add an array of OutlookGridColumns for internal use of OutlookGrid. The columns must already exist in the datagridview. Do this *BEFORE* using the grid (sorting and grouping, filling,...) + /// + /// The array of columns + public void AddRangeInternalColumns(params OutlookGridColumn[] cols) + { + Debug.Assert(cols != null); + // All columns with DisplayIndex != -1 are put into the initialColumns array + if (cols != null) + { + foreach (OutlookGridColumn col in cols) + { + AddInternalColumn(col); + } + } + } + + /// + /// Add an array of OutlookGridColumns for internal use of OutlookGrid. The columns must already exist in the datagridview. Do this *BEFORE* using the grid (sorting and grouping, filling,...) + /// + /// The list of columns. + public void AddRangeInternalColumns(List cols) + { + Debug.Assert(cols != null); + // All columns with DisplayIndex != -1 are put into the initialColumns array + if (cols != null) + { + foreach (OutlookGridColumn col in cols) + { + AddInternalColumn(col); + } + } + } + + /// + /// Group a column + /// + /// The name of the column. + /// The sort direction of the group./ + /// The IOutlookGridGroup object. + public void GroupColumn(string columnName, SortOrder sortDirection, IOutlookGridGroup? gr) => GroupColumn(_internalColumns[columnName]!, sortDirection, gr); + + /// + /// Group a column + /// + /// The name of the column. + /// The sort direction of the group./ + /// The IOutlookGridGroup object. + public void GroupColumn(OutlookGridColumn col, SortOrder sortDirection, IOutlookGridGroup? gr) + { + if (!col.IsGrouped) + { + col.GroupIndex = ++_internalColumns.MaxGroupIndex; + if (col.SortIndex > -1) + { + _internalColumns.RemoveSortIndex(col); + } + + col.SortDirection = sortDirection; + col.DataGridViewColumn!.HeaderCell.SortGlyphDirection = sortDirection; + if (gr != null) + { + col.GroupingType = gr; + } + + if (col.GroupingType != null && _hideColumnOnGrouping && col.GroupingType.AllowHiddenWhenGrouped) + { + col.DataGridViewColumn.Visible = false; + } + } + } + + /// + /// Ungroup a column + /// + /// The OutlookGridColumn. + public void UnGroupColumn(string columnName) + { + UnGroupColumn(_internalColumns[columnName]!); + } + + /// + /// Ungroup a column + /// + /// The OutlookGridColumn. + public void UnGroupColumn(OutlookGridColumn col) + { + if (col.IsGrouped) + { + _internalColumns.RemoveGroupIndex(col); + col.SortDirection = SortOrder.None; + col.DataGridViewColumn!.HeaderCell.SortGlyphDirection = SortOrder.None; + if (col.GroupingType != null) + { + col.GroupingType.Collapsed = false; + if (_hideColumnOnGrouping && col.GroupingType.AllowHiddenWhenGrouped) + { + col.DataGridViewColumn.Visible = true; + } + } + } +#if DEBUG + _internalColumns.DebugOutput(); +#endif + } + + /// + /// Sort the column. Call Fill after to make the changes + /// + /// The outlookGridColumn + /// The new SortOrder. + public void SortColumn(OutlookGridColumn col, SortOrder sort) + { + //Change the SortIndex and MaxSortIndex only if it is not a grouped column + if (!col.IsGrouped && col.SortIndex == -1) + { + col.SortIndex = ++_internalColumns.MaxSortIndex; + } + + //Change the order in all cases + col.SortDirection = sort; + col.DataGridViewColumn!.HeaderCell.SortGlyphDirection = sort; +#if DEBUG + _internalColumns.DebugOutput(); +#endif + } + + /// + /// UnSort the column. Call Fill after to make the changes + /// + /// The outlookGridColumn. + public void UnSortColumn(OutlookGridColumn col) + { + //Remove the SortIndex and rearrange the SortIndexes only if the column is not grouped + if (!col.IsGrouped) + { + _internalColumns.RemoveSortIndex(col); + col.SortDirection = SortOrder.None; + col.DataGridViewColumn!.HeaderCell.SortGlyphDirection = SortOrder.None; + } +#if DEBUG + _internalColumns.DebugOutput(); +#endif + } + + /// + /// Collapse all groups + /// + public void CollapseAll() + { + SetGroupCollapse(true); + } + + /// + /// Expand all groups + /// + public void ExpandAll() + { + SetGroupCollapse(false); + } + + /// + /// Expand all groups associated to a specific column + /// + /// The DataGridViewColumn + public void Expand(string? col) + { + SetGroupCollapse(col, false); + } + + /// + /// Collapse all groups associated to a specific column + /// + /// The DataGridViewColumn + public void Collapse(string? col) + { + SetGroupCollapse(col, true); + } + + /// + /// Expand a group row + /// + /// Index of the row + public void Expand(int row) + { + SetGroupCollapse(row, false); + } + + /// + /// Collapse a group row + /// + /// Index of the row + public void Collapse(int row) + { + SetGroupCollapse(row, true); + } + + /// + /// Clear all groups. Performs a fill grid too. + /// + public void ClearGroups() + { + ClearGroupsWithoutFilling(); + Fill(); + } + + /// + /// Clear all groups. No FillGrid calls. + /// + public void ClearGroupsWithoutFilling() + { + //TODO check that + //reset groups and collapsed statuses + _groupCollection.Clear(); + //reset groups in columns + _internalColumns.MaxGroupIndex = -1; + for (int i = 0; i < _internalColumns.Count; i++) + { + if (_internalColumns[i].IsGrouped) + { + _internalColumns[i].DataGridViewColumn!.Visible = true; + } + + _internalColumns[i].GroupIndex = -1; + } + } + + /// + /// Gets the index of the previous group row if any. + /// + /// Current row index + /// Index of the group row, -1 otherwise + public int PreviousGroupRowIndex(int currentRow) + { + for (int i = currentRow - 1; i >= 0; i--) + { + OutlookGridRow row = (OutlookGridRow)Rows[i]; + if (row.IsGroupRow) + { + return i; + } + } + return -1; + } + + /// + /// Gets all the subrows of a grouprow (recursive) + /// + /// The result list of OutlookGridRows + /// The IOutlookGridGroup that contains rows to inspect. + /// A list of OutlookGridRows + public List GetSubRows(ref List list, IOutlookGridGroup? groupRow) + { + list.AddRange(groupRow!.Rows); + for (int i = 0; i < groupRow.Children.Count; i++) + { + if (groupRow.Children.Count > 0) + { + GetSubRows(ref list, groupRow.Children[i]); + } + } + + return list; + } + + /// + /// Register for events concerning the groupbox + /// + public void RegisterGroupBoxEvents() + { + //Register for event of the associated KryptonGroupBox + if (GroupBox != null) + { + if (_groupBox != null) + { + _groupBox.ColumnGroupAdded += ColumnGroupAddedEvent; + _groupBox.ColumnSortChanged += ColumnSortChangedEvent; + _groupBox.ColumnGroupRemoved += ColumnGroupRemovedEvent; + _groupBox.ClearGrouping += ClearGroupingEvent; + _groupBox.FullCollapse += FullCollapseEvent; + _groupBox.FullExpand += FullExpandEvent; + _groupBox.ColumnGroupOrderChanged += ColumnGroupIndexChangedEvent; + _groupBox.GroupCollapse += GridGroupCollapseEvent; + _groupBox.GroupExpand += GridGroupExpandEvent; + _groupBox.GroupIntervalClick += GroupIntervalClickEvent; + _groupBox.SortBySummaryCount += SortBySummaryCountEvent; + } + } + } + + /// + /// Synchronize the OutlookGrid Group Box with the current status of the grid + /// + public void ForceRefreshGroupBox() + { + if (_groupBox != null) + { + _groupBox.UpdateGroupingColumns(_internalColumns.FindGroupedColumns()); + } + } + + /// + /// Show the context menu header + /// + /// The column used by the context menu. + private void ShowColumnHeaderContextMenu(int columnIndex) + { + OutlookGridColumn? col = _internalColumns.FindFromColumnIndex(columnIndex); + // Create menu items the first time they are needed + if (_menuItems == null) + { + // Create individual items + /*_menuSortAscending = new KryptonContextMenuItem(LanguageManager.Instance.GetString("SORTASCENDING"), Resources.OutlookGridImageResources.sort_az_ascending2, OnColumnSortAscending); + _menuSortDescending = new KryptonContextMenuItem(LanguageManager.Instance.GetString("SORTDESCENDING"), Resources.OutlookGridImageResources.sort_az_descending2, new EventHandler(OnColumnSortDescending)); + _menuClearSorting = new KryptonContextMenuItem(LanguageManager.Instance.GetString("CLEARSORTING"), Resources.OutlookGridImageResources.sort_up_down_delete_16, new EventHandler(OnColumnClearSorting)); + _menuSeparator1 = new KryptonContextMenuSeparator(); + _menuExpand = new KryptonContextMenuItem(LanguageManager.Instance.GetString("EXPAND"), Resources.OutlookGridImageResources.element_plus_16, new EventHandler(OnGroupExpand)); + _menuCollapse = new KryptonContextMenuItem(LanguageManager.Instance.GetString("COLLAPSE"), Resources.OutlookGridImageResources.element_minus_16, new EventHandler(OnGroupCollapse)); + _menuSeparator4 = new KryptonContextMenuSeparator(); + _menuGroupByThisColumn = new KryptonContextMenuItem(LanguageManager.Instance.GetString("GROUP"), Resources.OutlookGridImageResources.element, new EventHandler(OnGroupByThisColumn)); + _menuUngroupByThisColumn = new KryptonContextMenuItem(LanguageManager.Instance.GetString("UNGROUP"), Resources.OutlookGridImageResources.element_delete, new EventHandler(OnUnGroupByThisColumn)); + _menuShowGroupBox = new KryptonContextMenuItem(LanguageManager.Instance.GetString("SHOWGROUPBOX"), null, new EventHandler(OnShowGroupBox)); + _menuHideGroupBox = new KryptonContextMenuItem(LanguageManager.Instance.GetString("HIDEGROUPBOX"), null, new EventHandler(OnHideGroupBox)); + _menuSeparator2 = new KryptonContextMenuSeparator(); + _menuBestFitColumn = new KryptonContextMenuItem(LanguageManager.Instance.GetString("BESTFIT"), null, new EventHandler(OnBestFitColumn)); + _menuBestFitAllColumns = new KryptonContextMenuItem(LanguageManager.Instance.GetString("BESTFITALL"), Resources.OutlookGridImageResources.fit_to_size, new EventHandler(OnBestFitAllColumns)); + _menuSeparator3 = new KryptonContextMenuSeparator(); + _menuVisibleColumns = new KryptonContextMenuItem(LanguageManager.Instance.GetString("COLUMNS"), Resources.OutlookGridImageResources.table2_selection_column, null); + _menuGroupInterval = new KryptonContextMenuItem(LanguageManager.Instance.GetString("GROUPINTERVAL")); + _menuSortBySummary = new KryptonContextMenuItem(LanguageManager.Instance.GetString("SORTBYSUMMARYCOUNT"), null, new EventHandler(OnSortBySummary)); + _menuSortBySummary.CheckOnClick = true; + _menuSeparator5 = new KryptonContextMenuSeparator(); + _menuConditionalFormatting = new KryptonContextMenuItem(LanguageManager.Instance.GetString("CONDITIONALFORMATTING"), Resources.OutlookGridImageResources.table_conditional_16, null);*/ + + #region Localisation + + _menuSortAscending = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.SortAscending, SortingImageResources.sort_az_ascending2, OnColumnSortAscending); + _menuSortDescending = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.SortDescending, SortingImageResources.sort_az_descending2, OnColumnSortDescending); + _menuClearSorting = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.ClearSorting, SortingImageResources.sort_up_down_delete_16, OnColumnClearSorting); + _menuSeparator1 = new KryptonContextMenuSeparator(); + _menuExpand = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Expand, ElementsImageResources.element_plus_16, OnGroupExpand); + _menuCollapse = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Collapse, ElementsImageResources.element_minus_16, OnGroupCollapse); + _menuSeparator4 = new KryptonContextMenuSeparator(); + _menuGroupByThisColumn = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Group, ElementsImageResources.element, OnGroupByThisColumn); + _menuUngroupByThisColumn = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Ungroup, ElementsImageResources.element_delete, OnUnGroupByThisColumn); + _menuShowGroupBox = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.ShowGroupBox, null, OnShowGroupBox); + _menuHideGroupBox = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.HideGroupBox, null, OnHideGroupBox); + _menuSeparator2 = new KryptonContextMenuSeparator(); + _menuBestFitColumn = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.BestFit, null, OnBestFitColumn); + _menuBestFitAllColumns = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.BestFitAll, GenericImageResources.fit_to_size, OnBestFitAllColumns); + _menuSeparator3 = new KryptonContextMenuSeparator(); + _menuVisibleColumns = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Columns, GenericImageResources.table2_selection_column, null); + _menuGroupInterval = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.GroupInterval); + _menuSortBySummary = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.SortBySummaryCount, null, OnSortBySummary); + _menuSortBySummary.CheckOnClick = true; + _menuSeparator5 = new KryptonContextMenuSeparator(); + _menuConditionalFormatting = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.ConditionalFormatting, GenericImageResources.table_conditional_16, null); + + #endregion + + //Group Interval + KryptonContextMenuItems groupIntervalItems; + KryptonContextMenuItem? it; + string[] names = Enum.GetNames(typeof(DateInterval)); + KryptonContextMenuItemBase[] arrayOptions = new KryptonContextMenuItemBase[names.Length]; + for (int i = 0; i < names.Length; i++) + { + it = new KryptonContextMenuItem(OutlookGridLanguageManager.Instance.GetString(names[i])); + it.Tag = names[i]; + it.Click += OnGroupIntervalClick; + arrayOptions[i] = it; + } + groupIntervalItems = new KryptonContextMenuItems(arrayOptions); + _menuGroupInterval.Items.Add(groupIntervalItems); + + //Visible Columns + KryptonContextMenuCheckBox? itCheckbox; + KryptonContextMenuItemBase?[] arrayCols = new KryptonContextMenuItemBase?[Columns.Count]; + for (int i = 0; i < Columns.Count; i++) + { + itCheckbox = new KryptonContextMenuCheckBox(Columns[i].HeaderText); + itCheckbox.Checked = Columns[i].Visible; + itCheckbox.Tag = Columns[i].Index; + itCheckbox.CheckedChanged += OnColumnVisibleCheckedChanged; + arrayCols[i] = itCheckbox; + } + _menuVisibleColumns.Items.AddRange(arrayCols!); + + //Conditional formatting + ImageList imgListFormatting = new(); + imgListFormatting.ColorDepth = ColorDepth.Depth32Bit; + imgListFormatting.ImageSize = new Size(32, 32); + List tmpTag = new(); + imgListFormatting.Images.Add(DataBarImageResources.Databar_solid_blue_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(76, 118, 255), false))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_solid_green_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(95, 173, 123), false))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_solid_red_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(248, 108, 103), false))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_solid_yellow_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(255, 185, 56), false))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_solid_violet_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(185, 56, 255), false))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_solid_pink_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(255, 56, 185), false))); + + imgListFormatting.Images.Add(DataBarImageResources.Databar_gradient_blue_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(76, 118, 255), true))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_gradient_green_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(95, 173, 123), true))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_gradient_red_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(248, 108, 103), true))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_gradient_yellow_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(255, 185, 56), true))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_gradient_violet_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(185, 56, 255), true))); + imgListFormatting.Images.Add(DataBarImageResources.Databar_gradient_pink_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.Bar, new BarParams(Color.FromArgb(255, 56, 185), true))); + + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_white_blue_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.White, Color.FromArgb(76, 118, 255)))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_blue_white_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.FromArgb(76, 118, 255), Color.White))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_white_green_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.White, Color.FromArgb(95, 173, 123)))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_green_white_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.FromArgb(95, 173, 123), Color.White))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_white_red_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.White, Color.FromArgb(248, 108, 103)))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_red_white_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.FromArgb(248, 108, 103), Color.White))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_white_yellow_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.White, Color.FromArgb(255, 185, 56)))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_yellow_white_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.FromArgb(255, 185, 56), Color.White))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_white_violet_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.White, Color.FromArgb(185, 56, 255)))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_violet_white_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.FromArgb(185, 56, 255), Color.White))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_white_pink_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.White, Color.FromArgb(255, 56, 185)))); + imgListFormatting.Images.Add(OutlookGridImageResources.TwoColors_pink_white_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.TwoColorsRange, new TwoColorsParams(Color.FromArgb(255, 56, 185), Color.White))); + + imgListFormatting.Images.Add(OutlookGridImageResources.ThreeColors_green_yellow_red_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(84, 179, 112), Color.FromArgb(252, 229, 130), Color.FromArgb(243, 120, 97)))); + imgListFormatting.Images.Add(OutlookGridImageResources.ThreeColors_red_yellow_green_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(243, 120, 97), Color.FromArgb(252, 229, 130), Color.FromArgb(84, 179, 112)))); + imgListFormatting.Images.Add(OutlookGridImageResources.ThreeColors_green_white_red_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(84, 179, 112), Color.White, Color.FromArgb(243, 120, 97)))); + imgListFormatting.Images.Add(OutlookGridImageResources.ThreeColors_red_white_green_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(243, 120, 97), Color.White, Color.FromArgb(84, 179, 112)))); + imgListFormatting.Images.Add(OutlookGridImageResources.ThreeColors_blue_white_red_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(134, 166, 253), Color.White, Color.FromArgb(243, 120, 97)))); + imgListFormatting.Images.Add(OutlookGridImageResources.ThreeColors_red_white_blue_32); + tmpTag.Add(new ConditionalFormatting(EnumConditionalFormatType.ThreeColorsRange, new ThreeColorsParams(Color.FromArgb(243, 120, 97), Color.White, Color.FromArgb(134, 166, 253)))); + + + it = null; + names = Enum.GetNames(typeof(EnumConditionalFormatType)); + arrayOptions = new KryptonContextMenuItemBase[names.Length + 2]; + for (int i = 0; i < names.Length; i++) + { + it = new KryptonContextMenuItem(OutlookGridLanguageManager.Instance.GetString(names[i])); + it.Tag = names[i]; + + if (names[i] == EnumConditionalFormatType.Bar.ToString()) + { + it.Image = DataBarImageResources.databar_generic_16; + + //Solid + KryptonContextMenuHeading kFormattingBarHeadingSolid = new(); + kFormattingBarHeadingSolid.Text = KryptonManager.Strings.OutlookGridStrings.SolidFill; + KryptonContextMenuImageSelect kFormattingBarImgSelectSolid = new(); + kFormattingBarImgSelectSolid.ImageList = imgListFormatting; + kFormattingBarImgSelectSolid.ImageIndexStart = 0; + kFormattingBarImgSelectSolid.ImageIndexEnd = 5; + kFormattingBarImgSelectSolid.LineItems = 4; + kFormattingBarImgSelectSolid.Tag = tmpTag; + kFormattingBarImgSelectSolid.Click += OnConditionalFormattingClick; + + //Gradient + KryptonContextMenuHeading kFormattingBarHeadingGradient = new(); + kFormattingBarHeadingGradient.Text = KryptonManager.Strings.OutlookGridStrings.GradientFill; + KryptonContextMenuImageSelect kFormattingBarImgSelectGradient = new(); + kFormattingBarImgSelectGradient.ImageList = imgListFormatting; + kFormattingBarImgSelectGradient.ImageIndexStart = 6; + kFormattingBarImgSelectGradient.ImageIndexEnd = 11; + kFormattingBarImgSelectGradient.LineItems = 4; + kFormattingBarImgSelectGradient.Tag = tmpTag; + kFormattingBarImgSelectGradient.Click += OnConditionalFormattingClick; + + //Custom + KryptonContextMenuHeading kFormattingBarHeadingOther = new(); + kFormattingBarHeadingOther.Text = KryptonManager.Strings.OutlookGridStrings.Other; + KryptonContextMenuItem? it2; + it2 = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.CustomThreeDots); + it2.Tag = ""; + it2.Image = GenericImageResources.paint_bucket_green; + it2.Click += OnBarCustomClick; + + KryptonContextMenuItems bars = new(new KryptonContextMenuItemBase[] { it2 }); + + //Menu construction + it.Items.AddRange(new KryptonContextMenuItemBase[] { + kFormattingBarHeadingSolid, + kFormattingBarImgSelectSolid, + kFormattingBarHeadingGradient, + kFormattingBarImgSelectGradient, + kFormattingBarHeadingOther, + bars + }); + } + else if (names[i] == EnumConditionalFormatType.TwoColorsRange.ToString()) + { + it.Image = OutlookGridImageResources.color2scale_generic_16; + + KryptonContextMenuItems twoColors; + + KryptonContextMenuImageSelect kTwoColorsImgSelect = new(); + kTwoColorsImgSelect.ImageList = imgListFormatting; + kTwoColorsImgSelect.ImageIndexStart = 12; + kTwoColorsImgSelect.ImageIndexEnd = 23; + kTwoColorsImgSelect.LineItems = 4; + kTwoColorsImgSelect.Tag = tmpTag; + kTwoColorsImgSelect.Click += OnConditionalFormattingClick; + it.Items.Add(kTwoColorsImgSelect); + + KryptonContextMenuSeparator sep1 = new(); + sep1.Tag = ""; + + KryptonContextMenuItem? it2; + it2 = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.CustomThreeDots); + it2.Tag = ""; + it2.Image = GenericImageResources.paint_bucket_green; + it2.Click += OnTwoColorsCustomClick; + + twoColors = new KryptonContextMenuItems(new KryptonContextMenuItemBase[] { sep1, it2 }); + it.Items.Add(twoColors); + } + else if (names[i] == EnumConditionalFormatType.ThreeColorsRange.ToString()) + { + it.Image = OutlookGridImageResources.color3scale_generic_16; + + KryptonContextMenuItems threeColors; + + KryptonContextMenuImageSelect kThreeColorsImgSelect = new(); + kThreeColorsImgSelect.ImageList = imgListFormatting; + kThreeColorsImgSelect.ImageIndexStart = 24; + kThreeColorsImgSelect.ImageIndexEnd = 29; + kThreeColorsImgSelect.LineItems = 4; + kThreeColorsImgSelect.Tag = tmpTag; + kThreeColorsImgSelect.Click += OnConditionalFormattingClick; + it.Items.Add(kThreeColorsImgSelect); + + KryptonContextMenuSeparator sep1 = new(); + sep1.Tag = ""; + + KryptonContextMenuItem? it2; + it2 = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.CustomThreeDots); + it2.Tag = ""; + it2.Image = GenericImageResources.paint_bucket_green; + it2.Click += OnThreeColorsCustomClick; + + threeColors = new KryptonContextMenuItems(new KryptonContextMenuItemBase[] { sep1, it2 }); + it.Items.Add(threeColors); + } + + arrayOptions[i] = it; + KryptonContextMenuSeparator sep2 = new(); + sep2.Tag = ""; + arrayOptions[i + 1] = sep2; + KryptonContextMenuItem? it3; + it3 = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.ClearRules); + it3.Image = GenericImageResources.eraser; + it3.Tag = ""; + it3.Click += OnClearConditionalClick; + arrayOptions[i + 2] = it3; + } + KryptonContextMenuItems conditionalFormattingItems = new(arrayOptions); + _menuConditionalFormatting.Items.Add(conditionalFormattingItems); + + //Add items inside an items collection (apart from separator1 which is only added if required) + _menuItems = new KryptonContextMenuItems(new KryptonContextMenuItemBase[] { _menuSortAscending, + _menuSortDescending, + _menuSortBySummary, + _menuClearSorting, + _menuSeparator1, + _menuExpand, + _menuCollapse, + _menuSeparator4, + _menuGroupByThisColumn, + _menuGroupInterval, + _menuUngroupByThisColumn, + _menuShowGroupBox, + _menuHideGroupBox, + _menuSeparator2, + _menuBestFitColumn, + _menuBestFitAllColumns, + _menuSeparator3, + _menuVisibleColumns, + _menuSeparator5, + _menuConditionalFormatting}); + } + + // Ensure we have a krypton context menu if not already present + _contextMenu ??= new KryptonContextMenu(); + + // Update the individual menu options + if (col != null) + { + _menuSortAscending.Visible = col.DataGridViewColumn!.SortMode != DataGridViewColumnSortMode.NotSortable; + _menuSortAscending.Checked = col.SortDirection == SortOrder.Ascending ? true : false; + _menuSortDescending.Checked = col.SortDirection == SortOrder.Descending ? true : false; + _menuSortDescending.Visible = col.DataGridViewColumn.SortMode != DataGridViewColumnSortMode.NotSortable; + _menuSortBySummary.Visible = col.IsGrouped && col.GroupingType != null; + if (_menuSortBySummary.Visible) + { + _menuSortBySummary.Checked = col.GroupingType!.SortBySummaryCount; + } + + _menuClearSorting.Enabled = col.SortDirection != SortOrder.None && !col.IsGrouped; + _menuClearSorting.Visible = col.DataGridViewColumn.SortMode != DataGridViewColumnSortMode.NotSortable; + _menuSeparator1.Visible = _menuSortAscending.Visible || _menuSortDescending.Visible || _menuClearSorting.Visible; + _menuExpand.Visible = col.IsGrouped; + _menuCollapse.Visible = col.IsGrouped; + _menuSeparator4.Visible = _menuExpand.Visible || _menuCollapse.Visible; + _menuGroupByThisColumn.Visible = !col.IsGrouped && col.DataGridViewColumn.SortMode != DataGridViewColumnSortMode.NotSortable; + _menuGroupInterval.Visible = col.IsGrouped && col.DataGridViewColumn.SortMode != DataGridViewColumnSortMode.NotSortable && col.GroupingType?.GetType() == typeof(OutlookGridDateTimeGroup); + if (_menuGroupInterval.Visible) + { + string? currentInterval = Enum.GetName(typeof(DateInterval), ((col.GroupingType as OutlookGridDateTimeGroup)!).Interval); + foreach (KryptonContextMenuItem item in ((KryptonContextMenuItems)_menuGroupInterval.Items[0]).Items) + { + item.Checked = item.Tag!.ToString() == currentInterval; + } + } + _menuUngroupByThisColumn.Visible = col.IsGrouped && col.DataGridViewColumn.SortMode != DataGridViewColumnSortMode.NotSortable; + _menuShowGroupBox.Visible = _groupBox != null && !_groupBox.Visible; + _menuHideGroupBox.Visible = _groupBox != null && _groupBox.Visible; + _menuSeparator2.Visible = _menuGroupByThisColumn.Visible || _menuUngroupByThisColumn.Visible || _menuShowGroupBox.Visible || _menuHideGroupBox.Visible; + _menuBestFitColumn.Visible = true; + if (col.DataGridViewColumn.GetType() == typeof(KryptonDataGridViewFormattingColumn)) + { + _menuSeparator5.Visible = true; + _menuConditionalFormatting.Visible = true; + + //Get the format condition + ConditionalFormatting format = _formatConditions.FirstOrDefault(x => x.ColumnName == col.Name)!; + + for (int i = 0; i < _menuConditionalFormatting.Items[0].ItemChildCount; i++) + { + if (format != null + && (_menuConditionalFormatting.Items[0] as KryptonContextMenuItems)!.Items[i].Tag!.ToString()!.Equals(format.FormatType.ToString())) + { + ((KryptonContextMenuItem)((KryptonContextMenuItems)_menuConditionalFormatting.Items[0]).Items[i]).Checked = true; + } + else + { + if (((KryptonContextMenuItems)_menuConditionalFormatting.Items[0]).Items[i].GetType() != typeof(KryptonContextMenuSeparator)) + { + ((KryptonContextMenuItem)((KryptonContextMenuItems)_menuConditionalFormatting.Items[0]).Items[i]).Checked = false; + } + } + } + } + else + { + _menuSeparator5.Visible = false; + _menuConditionalFormatting.Visible = false; + } + } + else + { + _menuSortAscending.Visible = false; + _menuSortDescending.Visible = false; + _menuSortBySummary.Visible = false; + _menuClearSorting.Visible = false; + _menuSeparator1.Visible = _menuSortAscending.Visible || _menuSortDescending.Visible || _menuClearSorting.Visible; + _menuExpand.Visible = false; + _menuCollapse.Visible = false; + _menuSeparator4.Visible = _menuExpand.Visible || _menuCollapse.Visible; + _menuGroupByThisColumn.Visible = false; + _menuGroupInterval.Visible = false; + _menuUngroupByThisColumn.Visible = false; + _menuShowGroupBox.Visible = _groupBox != null && !_groupBox.Visible; + _menuHideGroupBox.Visible = _groupBox != null && _groupBox.Visible; + _menuSeparator2.Visible = _menuGroupByThisColumn.Visible || _menuUngroupByThisColumn.Visible || _menuShowGroupBox.Visible || _menuHideGroupBox.Visible; + _menuBestFitColumn.Visible = false; + _menuSeparator5.Visible = false; + _menuConditionalFormatting.Visible = false; + + } + + if (!_contextMenu.Items.Contains(_menuItems)) + { + _contextMenu.Items.Add(_menuItems); + } + + // Show the menu! + _contextMenu.Show(this); + } + + /// + /// Clear all sorting columns only (not the grouped ones) + /// + public void ResetAllSortingColumns() + { + _internalColumns.MaxSortIndex = -1; + foreach (OutlookGridColumn col in _internalColumns) + { + if (!col.IsGrouped && col.SortDirection != SortOrder.None) + { + col.DataGridViewColumn!.HeaderCell.SortGlyphDirection = SortOrder.None; + col.SortDirection = SortOrder.None; + col.SortIndex = -1; + } + } +#if DEBUG + _internalColumns.DebugOutput(); +#endif + } + + ///// + ///// Sort the grid + ///// + ///// The IComparer object. + //public void Sort(IComparer comparer) + //{ + // Fill(); + //} + + /// + /// Clears the internal rows. + /// + public void ClearInternalRows() + { + _internalRows.Clear(); + } + + /// + /// Assign the rows to the internal list. + /// + /// List of OutlookGridRows + public void AssignRows(List l) + { + _internalRows = l; + } + + /// + /// Assign the rows to the internal list. + /// + /// DataGridViewRowCollection + public void AssignRows(DataGridViewRowCollection col) + { + //dataSource.Rows = col.Cast().ToList(); + _internalRows = col.Cast().ToList(); + } + + /// + /// Collapse/Expand all group rows + /// + /// True if collapsed, false if expanded + private void SetGroupCollapse(bool collapsed) + { + if (!IsGridGrouped || _internalRows.Count == 0) + { + return; + } + + //// loop through all rows to find the GroupRows + //for (int i = 0; i < this.Rows.Count; i++) + //{ + // if (((OutlookGridRow)this.Rows[i]).IsGroupRow) + // ((OutlookGridRow)this.Rows[i]).Group.Collapsed = collapsed; + //} + RecursiveSetGroupCollapse(_groupCollection, collapsed); + + // workaround, make the grid refresh properly + Rows[0].Visible = !Rows[0].Visible; + Rows[0].Visible = !Rows[0].Visible; + + //When collapsing the first row still seeing it. + if (Rows[0].Index < FirstDisplayedScrollingRowIndex) + { + FirstDisplayedScrollingRowIndex = Rows[0].Index; + } + } + + private void RecursiveSetGroupCollapse(OutlookGridGroupCollection col, bool collapsed) + { + for (int i = 0; i < col.Count; i++) + { + col[i]!.Collapsed = collapsed; + RecursiveSetGroupCollapse(col[i]!.Children, collapsed); + } + } + + private void SetGroupCollapse(string? c, bool collapsed) + { + if (!IsGridGrouped || _internalRows.Count == 0) + { + return; + } + + // loop through all rows to find the GroupRows + //for (int i = 0; i < this.Rows.Count; i++) + //{ + // if (((OutlookGridRow)this.Rows[i]).IsGroupRow && ((OutlookGridRow)this.Rows[i]).Group.Column.DataGridViewColumn.Name == c.Name) + // ((OutlookGridRow)this.Rows[i]).Group.Collapsed = collapsed; + //} + RecursiveSetGroupCollapse(c, _groupCollection, collapsed); + + // workaround, make the grid refresh properly + Rows[0].Visible = !Rows[0].Visible; + Rows[0].Visible = !Rows[0].Visible; + + //When collapsing the first row still seeing it. + if (Rows[0].Index < FirstDisplayedScrollingRowIndex) + { + FirstDisplayedScrollingRowIndex = Rows[0].Index; + } + } + + private void RecursiveSetGroupCollapse(string? c, OutlookGridGroupCollection col, bool collapsed) + { + for (int i = 0; i < col.Count; i++) + { + if (col[i]!.Column.Name == c) + { + col[i]!.Collapsed = collapsed; + } + + RecursiveSetGroupCollapse(c, col[i]!.Children, collapsed); + } + } + + /// + /// Collapse/Expand a group row + /// + /// The index of the group row. + /// True if collapsed, false if expanded. + private void SetGroupCollapse(int rowindex, bool collapsed) + { + if (!IsGridGrouped || _internalRows.Count == 0 || rowindex < 0) + { + return; + } + + OutlookGridRow row = (OutlookGridRow)Rows[rowindex]; + if (row.IsGroupRow) + { + if (row.Group != null) + { + row.Group.Collapsed = collapsed; + } + + //this is a workaround to make the grid re-calculate it's contents and backgroun bounds + // so the background is updated correctly. + // this will also invalidate the control, so it will redraw itself + row.Visible = false; + row.Visible = true; + + //When collapsing the first row still seeing it. + if (row.Index < FirstDisplayedScrollingRowIndex) + { + FirstDisplayedScrollingRowIndex = row.Index; + } + } + } + + /// + /// Expand all nodes + /// + public void ExpandAllNodes() + { + if (Rows.Count > 0) + { + foreach (OutlookGridRow r in Rows) + { + RecursiveDescendantSetNodeCollapse(r, false); + } + Rows[0].Visible = !Rows[0].Visible; + Rows[0].Visible = !Rows[0].Visible; + + //When collapsing the first row still seeing it. + if (Rows[0].Index < FirstDisplayedScrollingRowIndex) + { + FirstDisplayedScrollingRowIndex = Rows[0].Index; + } + } + } + + /// + /// Collapse all nodes + /// + public void CollapseAllNodes() + { + if (Rows.Count > 0) + { + foreach (OutlookGridRow r in Rows) + { + RecursiveDescendantSetNodeCollapse(r, true); + } + Rows[0].Visible = !Rows[0].Visible; + Rows[0].Visible = !Rows[0].Visible; + + //When collapsing the first row still seeing it. + if (Rows[0].Index < FirstDisplayedScrollingRowIndex) + { + FirstDisplayedScrollingRowIndex = Rows[0].Index; + } + } + } + + private void RecursiveDescendantSetNodeCollapse(OutlookGridRow r, bool collapsed) + { + //No events - for speed + if (r.HasChildren) + { + r.Collapsed = collapsed; + foreach (OutlookGridRow r2 in r.Nodes.Nodes) + { + RecursiveDescendantSetNodeCollapse(r2, collapsed); + } + } + } + + //private void RecursiveUpwardSetNodeCollaspse(OutlookGridRow r, bool collasped) + //{ + // //No events - for speed + // if (r.ParentNode != null) + // { + // if (r.ParentNode.Collapsed) + // { + // r.ParentNode.Collapsed = collasped; + // RecursiveUpwardSetNodeCollaspse(r.ParentNode, collapsed); + // } + // } + // //sw.Stop(); + // //Console.WriteLine(sw.ElapsedMilliseconds.ToString() + " ms" + r.ToString()); + + //} + + private void RecursiveUpwardSetNodeCollapse(OutlookGridRow? r, bool collapsed) + { + //No events - for speed + if (r != null && r.ParentNode != null) + { + r.ParentNode.Collapsed = collapsed; + RecursiveUpwardSetNodeCollapse(r.ParentNode, collapsed); + } + } + + + /// + /// Ensure the node is visible (all parents exanded) + /// + /// The OutlookGridRow which needs to be visible. + public void EnsureVisibleNode(OutlookGridRow r) => RecursiveUpwardSetNodeCollapse(r, false); + + /// + /// Collapses the node. + /// + /// The OutlookGridRow node. + /// + public bool CollapseNode(OutlookGridRow node) + { + if (!node.Collapsed) + { + CollapsingEventArgs exp = new(node); + OnNodeCollapsing(exp); + + if (!exp.Cancel) + { + node.SetNodeCollapse(true); + + CollapsedEventArgs exped = new(node); + OnNodeCollapsed(exped); + } + + return !exp.Cancel; + } + else + { + // row isn't expanded, so we didn't do anything. + return false; + } + } + + /// + /// Expands the node. + /// + /// The OutlookGridRow node. + /// + public bool ExpandNode(OutlookGridRow node) + { + if (node.Collapsed) + { + ExpandingEventArgs exp = new(node); + OnNodeExpanding(exp); + + if (!exp.Cancel) + { + node.SetNodeCollapse(false); + + ExpandedEventArgs exped = new(node); + OnNodeExpanded(exped); + } + + return !exp.Cancel; + } + else + { + // row isn't expanded, so we didn't do anything. + return false; + } + } + + /// + /// Expand Node and all its subnodes (without events) + /// + public void ExpandNodeAndSubNodes(OutlookGridRow r) + { + RecursiveDescendantSetNodeCollapse(r, false); + r.Visible = !r.Visible; + r.Visible = !r.Visible; + + ////When collapsing the first row still seeing it. + //if (this.Rows[0].Index < this.FirstDisplayedScrollingRowIndex) + // this.FirstDisplayedScrollingRowIndex = this.Rows[0].Index; + } + + /// + /// Collapse Node and all its subnodes (without events) + /// + public void CollapseNodeAndSubNodes(OutlookGridRow r) + { + RecursiveDescendantSetNodeCollapse(r, true); + r.Visible = !r.Visible; + r.Visible = !r.Visible; + + ////When collapsing the first row still seeing it. + //if (this.Rows[0].Index < this.FirstDisplayedScrollingRowIndex) + // this.FirstDisplayedScrollingRowIndex = this.Rows[0].Index; + } + + #region Grid Fill functions + + + private void NonGroupedRecursiveFillOutlookGridRows(List l, List tmp) + { + for (int i = 0; i < l.Count; i++) + { + tmp.Add(l[i]); + + //Recusive call + if (l[i].HasChildren) + { + NonGroupedRecursiveFillOutlookGridRows(l[i].Nodes.Nodes, tmp); + } + } + } + + private void FillMinMaxFormatConditions(Type? typeColumn, int j, List list, int formatColumn) + { + if (typeColumn == typeof(TimeSpan)) + { + for (var i = 0; i < list.Count; i++) + { + if (list[i].Cells[formatColumn].Value != null) + { + + if (((TimeSpan)list[i].Cells[formatColumn].Value!).TotalMinutes < _formatConditions[j].MinValue) + { + _formatConditions[j].MinValue = ((TimeSpan)list[i].Cells[formatColumn].Value!).TotalMinutes; + } + + if (((TimeSpan)list[i].Cells[formatColumn].Value!).TotalMinutes > _formatConditions[j].MaxValue) + { + _formatConditions[j].MaxValue = ((TimeSpan)list[i].Cells[formatColumn].Value!).TotalMinutes; + } + } + if (list[i].HasChildren) + { + FillMinMaxFormatConditions(typeColumn, j, list[i].Nodes.Nodes, formatColumn); + } + } + } + else if (typeColumn == typeof(decimal)) + { + for (var i = 0; i < list.Count; i++) + { + if (list[i].Cells[formatColumn].Value != null) + { + if (Convert.ToDouble(list[i].Cells[formatColumn].Value) < _formatConditions[j].MinValue) + { + _formatConditions[j].MinValue = Convert.ToDouble(list[i].Cells[formatColumn].Value); + } + + if (Convert.ToDouble(list[i].Cells[formatColumn].Value) > _formatConditions[j].MaxValue) + { + _formatConditions[j].MaxValue = Convert.ToDouble(list[i].Cells[formatColumn].Value); + } + } + if (list[i].HasChildren) + { + FillMinMaxFormatConditions(typeColumn, j, list[i].Nodes.Nodes, formatColumn); + } + } + } + else + { + for (var i = 0; i < list.Count; i++) + { + if (list[i].Cells[formatColumn].Value != null) + { + if (Convert.ToDouble(list[i].Cells[formatColumn].Value) < _formatConditions[j].MinValue) + { + _formatConditions[j].MinValue = (double)list[i].Cells[formatColumn].Value!; + } + + if (Convert.ToDouble(list[i].Cells[formatColumn].Value) > _formatConditions[j].MaxValue) + { + _formatConditions[j].MaxValue = (double)list[i].Cells[formatColumn].Value!; + } + } + if (list[i].HasChildren) + { + FillMinMaxFormatConditions(typeColumn, j, list[i].Nodes.Nodes, formatColumn); + } + } + } + } + + private void FillValueFormatConditions(int formatColumn, Type? typeColumn, List list) + { + for (var i = 0; i < list.Count; i++) + { + for (var j = 0; j < _formatConditions.Count; j++) + { + formatColumn = Columns[_formatConditions[j].ColumnName]!.Index; + if (list[i].Cells[formatColumn].Value != null) + { + typeColumn = Columns[_formatConditions[j].ColumnName]!.ValueType; + FormattingCell fCell = new(list[i].Cells[formatColumn]) + { + FormatType = _formatConditions[j].FormatType, + FormatParams = _formatConditions[j].FormatParams?.Clone() as IFormatParams + }; + + switch (_formatConditions[j].FormatType) + { + case EnumConditionalFormatType.Bar: + if (typeColumn == typeof(TimeSpan)) + { + (fCell.FormatParams as BarParams)!.ProportionValue = + ColorFormatting.ConvertBar( + ((TimeSpan)list[i].Cells[formatColumn].Value!).TotalMinutes, + _formatConditions[j].MinValue, _formatConditions[j].MaxValue); + } + else if (typeColumn == typeof(decimal)) + { + (fCell.FormatParams as BarParams)!.ProportionValue = ColorFormatting.ConvertBar(Convert.ToDouble(list[i].Cells[formatColumn].Value), _formatConditions[j].MinValue, _formatConditions[j].MaxValue); + } + else + { + (fCell.FormatParams as BarParams)!.ProportionValue = ColorFormatting.ConvertBar((double)list[i].Cells[formatColumn].Value!, _formatConditions[j].MinValue, _formatConditions[j].MaxValue); + } + break; + case EnumConditionalFormatType.TwoColorsRange: + if (typeColumn == typeof(TimeSpan)) + { + (fCell.FormatParams as TwoColorsParams)!.ValueColor = ColorFormatting.ConvertTwoRange(((TimeSpan)list[i].Cells[formatColumn].Value!).TotalMinutes, _formatConditions[j].MinValue, _formatConditions[j].MaxValue, (TwoColorsParams)_formatConditions[j].FormatParams!); + } + else if (typeColumn == typeof(decimal)) + { + (fCell.FormatParams as TwoColorsParams)!.ValueColor = ColorFormatting.ConvertTwoRange(Convert.ToDouble(list[i].Cells[formatColumn].Value), _formatConditions[j].MinValue, _formatConditions[j].MaxValue, (TwoColorsParams)_formatConditions[j].FormatParams!); + } + else + { + (fCell.FormatParams as TwoColorsParams)!.ValueColor = + ColorFormatting.ConvertTwoRange( + Convert.ToDouble(list[i].Cells[formatColumn].Value), _formatConditions[j].MinValue, _formatConditions[j].MaxValue, (TwoColorsParams)_formatConditions[j].FormatParams!); + } + //list[i].Cells[formatColumn].Style.SelectionBackColor = list[i].Cells[formatColumn].Style.BackColor; + break; + case EnumConditionalFormatType.ThreeColorsRange: + if (typeColumn == typeof(TimeSpan)) + { + (fCell.FormatParams as ThreeColorsParams)!.ValueColor = ColorFormatting.ConvertThreeRange(((TimeSpan)list[i].Cells[formatColumn].Value!).TotalMinutes, _formatConditions[j].MinValue, _formatConditions[j].MaxValue, _formatConditions[j].FormatParams as ThreeColorsParams); + } + else if (typeColumn == typeof(decimal)) + { + (fCell.FormatParams as ThreeColorsParams)!.ValueColor = ColorFormatting.ConvertThreeRange(Convert.ToDouble(list[i].Cells[formatColumn].Value), _formatConditions[j].MinValue, _formatConditions[j].MaxValue, _formatConditions[j].FormatParams as ThreeColorsParams); + } + else + { + (fCell.FormatParams as ThreeColorsParams)!.ValueColor = ColorFormatting.ConvertThreeRange(Convert.ToDouble(list[i].Cells[formatColumn].Value), _formatConditions[j].MinValue, _formatConditions[j].MaxValue, _formatConditions[j].FormatParams as ThreeColorsParams); + } + //list[i].Cells[formatColumn].Style.SelectionBackColor = list[i].Cells[formatColumn].Style.BackColor; + break; + } + } + } + + if (list[i].HasChildren) + { + FillValueFormatConditions(formatColumn, typeColumn, list[i].Nodes.Nodes); + } + } + } + + + /// + /// Fill the grid (grouping, sorting,...) + /// + public void Fill() + { + Cursor.Current = Cursors.WaitCursor; +#if (DEBUG) + Stopwatch azer = new Stopwatch(); + azer.Start(); +#endif + List list; + List tmp; // = new List(); + IOutlookGridGroup? grParent = null; + Rows.Clear(); + _groupCollection.Clear(); + + if (_internalRows.Count == 0) + { + return; + } + + list = _internalRows; + + + //Apply Formatting + int formatColumn = 0; + Type? typeColumn = null; + + //Determine mix and max value + for (int j = 0; j < _formatConditions.Count; j++) + { + formatColumn = Columns[_formatConditions[j].ColumnName]!.Index; + typeColumn = Columns[_formatConditions[j].ColumnName]!.ValueType; + _formatConditions[j].MinValue = double.MaxValue; + _formatConditions[j].MaxValue = double.MinValue; + FillMinMaxFormatConditions(typeColumn, j, list, formatColumn); + } + + //Passing the necessary information to cells + FillValueFormatConditions(formatColumn, typeColumn, list); + + //End of Formatting +#if DEBUG + azer.Stop(); + Console.WriteLine(@"Formatting : " + azer.ElapsedMilliseconds + @" ms"); + azer.Start(); +#endif + // this block is used of grouping is turned off + // this will simply list all attributes of each object in the list + if (_internalColumns.CountGrouped() == 0) + { + //Applying sort + //try + //{ + list.Sort(new OutlookGridRowComparer2(_internalColumns.GetIndexAndSortSortedOnlyColumns())); + //} + //catch (Exception e) + //{ + // MessageBox.Show("Failed to sort.\n\n Error:" + e.Message, + // "Grid Sorting", + // MessageBoxButtons.OK, + // MessageBoxIcon.Error); + // } + + //Add rows to underlying DataGridView + if (_fillMode == GridFillMode.GroupsOnly) + { + if (list != null) + { + Rows.AddRange(list.ToArray()); + } + } + else + { + tmp = new List(); + NonGroupedRecursiveFillOutlookGridRows(list, tmp); + + //Add all the rows to the grid + if (tmp != null) + { + Rows.AddRange(tmp.ToArray()); + } + } + + } + // this block is used when grouping is used + // items in the list must be sorted, and then they will automatically be grouped + else + { + //Group part of the job + //try + //{ + //We get the columns that are grouped + List? groupedColumns = _internalColumns.FindGroupedColumns(); + + //For each outlookgrid row in the grid + for (int j = 0; j < list.Count; j++) + { + //Reload the groups collection for each rows !! + OutlookGridGroupCollection children = _groupCollection; + + //For each grouped column (ordered by GroupIndex) + if (groupedColumns != null) + { + for (int i = 0; i < groupedColumns.Count; i++) + { + if (i == 0) + { + grParent = null; + } + + //Gets the stored value + object? value = list[j].Cells[groupedColumns[i].DataGridViewColumn!.Index].Value; + object? formattedValue; + + //We get the formatting value according to the type of group (Alphabetic, DateTime,...) + var outlookGridGroup = groupedColumns[i].GroupingType; + if (outlookGridGroup != null) + { + outlookGridGroup.Value = value; + formattedValue = outlookGridGroup.Value; + + //We search the corresponding group. + IOutlookGridGroup? gr = children.FindGroup(formattedValue); + if (gr == null) + { + gr = (IOutlookGridGroup)outlookGridGroup.Clone(); + gr.ParentGroup = grParent; + gr.Column = groupedColumns[i]; + gr.Value = value; + gr.FormatStyle = + groupedColumns[i].DataGridViewColumn!.DefaultCellStyle + .Format; //We can the formatting applied to the cell to the group + if (value is TextAndImage) + { + gr.GroupImage = (value as TextAndImage)?.Image; + } + else if (value is Token) + { + Bitmap bmp = new(13, 13); + using (Graphics gfx = Graphics.FromImage(bmp)) + { + using (SolidBrush brush = new(((Token)value).BackColor)) + { + gfx.FillRectangle(brush, 0, 0, bmp.Width, bmp.Height); + } + } + + gr.GroupImage = bmp; + } + else if (value is Bitmap) + { + gr.GroupImage = (Bitmap)value; + } + //else if (groupedColumns[i].DataGridViewColumn.GetType() == typeof(KryptonDataGridViewRatingColumn)) + //{ + // gr.GroupImage = (Image)Resources.OutlookGridImageResources.ResourceManager.GetObject("star" + value.ToString()); + //} + + gr.Level = i; + children.Add(gr); + } + + //Go deeper in the groups, set current group as parent + grParent = gr; + children = gr.Children; + + //if we have browsed all the groups we are sure to be in the righr group: add rows and update counters ! + if (i == groupedColumns.Count - 1) + { + list[j].Group = gr; + gr.Rows.Add(list[j]); + RecursiveIncrementParentGroupCounters(gr); + } + } + } + } + } + + //reset local variable for GC + groupedColumns = null; + //} + //catch (Exception e) + //{ + // MessageBox.Show("Failed to add rows.\n\n Error:" + e.Message, + // "Grid Filling", + // MessageBoxButtons.OK, + // MessageBoxIcon.Error); + //} + + //Sorting part : sort the groups between them and sort the rows inside the groups + //try + //{ + //int index = internalColumns.FindSortedColumnNotgrouped(); + //RecursiveSort(this.groupCollection, index, (index == -1) ? SortOrder.None : internalColumns.FindFromColumnIndex(index).SortDirection); + List> sortList = _internalColumns.GetIndexAndSortSortedOnlyColumns(); + if (sortList.Count > 0) + { + RecursiveSort(_groupCollection, sortList); + } + else + { + RecursiveSort(_groupCollection, _internalColumns.GetIndexAndSortGroupedColumns()); + } + //} + //catch (Exception e) + //{ + // MessageBox.Show("Failed to sort.\n\n Error:" + e.Message, + // "Grid Sorting", + // MessageBoxButtons.OK, + // MessageBoxIcon.Error); + //} + + //Reinit! + tmp = new List(); + //Get a list of rows (grouprow and non-grouprow) + RecursiveFillOutlookGridRows(_groupCollection, tmp); + + //Finally add the rows to underlying datagridview after all the magic ! + Rows.AddRange(tmp.ToArray()); + } + Cursor.Current = Cursors.Default; +#if DEBUG + azer.Stop(); + Console.WriteLine(@"FillGrid : " + azer.ElapsedMilliseconds + @" ms"); +#endif + } + + /// + /// Sort recursively the OutlookGridRows within groups + /// + /// The OutlookGridGroupCollection. + /// The list of sorted columns + private void RecursiveSort(OutlookGridGroupCollection groupCollection, List> sortList) + { + //We sort the groups + if (groupCollection.Count > 0) + { + if (groupCollection[0]!.Column.GroupingType!.SortBySummaryCount) + { + groupCollection.Sort(new OutlookGridGroupCountComparer()); + } + else + { + groupCollection.Sort(); + } + } + + //Sort the rows inside each group + for (int i = 0; i < groupCollection.Count; i++) + { + //If there is no child group then we have only rows... + if (groupCollection[i]!.Children.Count == 0 && sortList.Count > 0) + { + //We sort the rows according to the sorted only columns + groupCollection[i]!.Rows.Sort(new OutlookGridRowComparer2(sortList)); + } + //else + //{ + // Console.WriteLine("groupCollection[i].Rows" + groupCollection[i].Rows.Count.ToString()); + // //We sort the rows according to the group sort (useful for alphbetics for example) + // groupCollection[i].Rows.Sort(new OutlookGridRowComparer(groupCollection[i].Column.DataGridViewColumn.Index, internalColumns[groupCollection[i].Column.DataGridViewColumn.Name].SortDirection)); + //} + + //Recursive call for children + RecursiveSort(groupCollection[i]!.Children, sortList); + } + } + + /// + /// Update all the parents counters of a group + /// + /// The group whic + private void RecursiveIncrementParentGroupCounters(IOutlookGridGroup? l) + { + //Add +1 to the counter + if (l != null) + { + l.ItemCount++; + if (l.ParentGroup != null) + { + //Recursive call for parent + RecursiveIncrementParentGroupCounters(l.ParentGroup); + } + } + } + + /// + /// Transform a group in a list of OutlookGridRows. Recursive call + /// + /// The OutlookGridGroupCollection that contains the groups and associated rows. + /// A List of OutlookGridRow + private void RecursiveFillOutlookGridRows(OutlookGridGroupCollection l, List tmp) + { + OutlookGridRow? gridRow; + IOutlookGridGroup? gridGroup; + + //for each group + for (var i = 0; i < l.List.Count; i++) + { + gridGroup = l.List[i]; + + //Create the group row + gridRow = RowTemplate.Clone() as OutlookGridRow; + gridRow!.Group = gridGroup; + gridRow.IsGroupRow = true; + if (gridGroup != null) + { + gridRow.Height = gridGroup.Height; + gridRow.MinimumHeight = gridRow.Height; //To handle auto resize rows correctly on high dpi + gridRow.CreateCells(this, gridGroup.Value!); + tmp.Add(gridRow); + + //Recursive call + if (gridGroup.Children.Count > 0) + { + RecursiveFillOutlookGridRows(gridGroup.Children, tmp); + } + + //We add the rows associated with the current group + if (_fillMode == GridFillMode.GroupsOnly) + { + tmp.AddRange(gridGroup.Rows); + } + else + { + NonGroupedRecursiveFillOutlookGridRows(gridGroup.Rows, tmp); + } + } + } + } + #endregion Grid Fill functions + + /// + /// Persist the configuration of the KryptonOutlookGrid + /// + /// The path where the .xml file will be saved. + /// The version of the config file. + public void PersistConfiguration(string path, string version) + { + OutlookGridColumn? col; + using (XmlWriter writer = XmlWriter.Create(path, new XmlWriterSettings { Indent = true })) + { + writer.WriteStartDocument(); + writer.WriteStartElement("OutlookGrid"); + writer.WriteAttributeString("V", version); + writer.WriteElementString("GroupBox", (_groupBox != null && _groupBox.Visible).ToString()); + writer.WriteElementString("HideColumnOnGrouping", CommonHelper.BoolToString(HideColumnOnGrouping)); + writer.WriteStartElement("Columns"); + for (int i = 0; i < _internalColumns.Count; i++) + { + col = _internalColumns[i]; + writer.WriteStartElement("Column"); + writer.WriteElementString("Name", col.Name); + writer.WriteStartElement("GroupingType"); + if (col.GroupingType != null) + { + writer.WriteElementString("Name", col.GroupingType.GetType().AssemblyQualifiedName); //.GetType().Name.ToString()); + writer.WriteElementString("OneItemText", col.GroupingType.OneItemText); + writer.WriteElementString("XXXItemsText", col.GroupingType.XxxItemsText); + writer.WriteElementString("SortBySummaryCount", CommonHelper.BoolToString(col.GroupingType.SortBySummaryCount)); + //writer.WriteElementString("ItemsComparer", (col.GroupingType.ItemsComparer == null) ? "" : col.GroupingType.ItemsComparer.GetType().AssemblyQualifiedName); + if (col.GroupingType.GetType() == typeof(OutlookGridDateTimeGroup)) + { + writer.WriteElementString("GroupDateInterval", ((OutlookGridDateTimeGroup)col.GroupingType).Interval.ToString()); + } + } + writer.WriteEndElement(); + writer.WriteElementString("SortDirection", col.SortDirection.ToString()); + writer.WriteElementString("GroupIndex", col.GroupIndex.ToString()); + writer.WriteElementString("SortIndex", col.SortIndex.ToString()); + writer.WriteElementString("Visible", col.DataGridViewColumn!.Visible.ToString()); + writer.WriteElementString("Width", col.DataGridViewColumn.Width.ToString()); + writer.WriteElementString("Index", col.DataGridViewColumn.Index.ToString()); + writer.WriteElementString("DisplayIndex", col.DataGridViewColumn.DisplayIndex.ToString()); + writer.WriteElementString("RowsComparer", col != null && col.RowsComparer == null ? "" : col?.RowsComparer!.GetType().AssemblyQualifiedName); + writer.WriteEndElement(); + } + writer.WriteEndElement(); + + //Conditional formatting + writer.WriteStartElement("ConditionalFormatting"); + for (int i = 0; i < _formatConditions.Count; i++) + { + _formatConditions[i].Persist(writer); + } + writer.WriteEndElement(); // End ConditionalFormatting + writer.WriteEndElement(); //End OutlookGrid + writer.WriteEndDocument(); + writer.Flush(); + } + } + + /// + /// Clears everything in the OutlookGrid (groups, rows, columns, DataGridViewColumns). Ready for a completely new start. + /// + public void ClearEverything() + { + _groupCollection.Clear(); + _internalRows.Clear(); + _internalColumns.Clear(); + Columns.Clear(); + ConditionalFormatting.Clear(); + //Snif everything is gone ! Be Ready for a new start ! + } + + /// + /// Finds the column from its name. + /// + /// The name. + /// + public OutlookGridColumn? FindFromColumnName(string name) => _internalColumns.FindFromColumnName(name); + + /// + /// Finds the column from its index. + /// + /// The index. + /// + public OutlookGridColumn? FindFromColumnIndex(int index) => _internalColumns.FindFromColumnIndex(index); + + #endregion OutlookGrid methods + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOutlookGridGroupBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOutlookGridGroupBox.cs new file mode 100644 index 000000000..686f6bf9a --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonOutlookGridGroupBox.cs @@ -0,0 +1,1125 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// GroupBox for the Krypton OutlookGrid + /// + [ToolboxBitmap(typeof(KryptonGroupBox))] + public partial class KryptonOutlookGridGroupBox : UserControl + { + #region Design Code + private IContainer? components = null; + + private void InitializeComponent() + { + SuspendLayout(); + // + // KryptonOutlookGridGroupBox + // + AllowDrop = true; + Name = "KryptonOutlookGridGroupBox"; + Size = new Size(744, 46); + DragDrop += KryptonOutlookGridGroupBox_DragDrop; + DragEnter += KryptonOutlookGridGroupBox_DragEnter; + ResumeLayout(false); + + } + #endregion + + #region Instance Fields + private List _columnsList; + private string _dragColumnToGroupText; + + //Krypton + private PaletteBase? _palette; + private PaletteRedirect _paletteRedirect; + private PaletteBackInheritRedirect _paletteBack; + private PaletteBorderInheritRedirect _paletteBorder; + private PaletteContentInheritRedirect? _paletteContent; + private PaletteDataGridViewRedirect? _paletteDataGridView; + private PaletteDataGridViewAll _paletteDataGridViewAll; + private IDisposable? _mementoBack; + private PaletteBorder _border; + + //Mouse + private Point _mouse; + private bool _isDragging; + private int _indexselected; + + //Dpi scaling + private float _factorX, _factorY; + + //Context menu + private KryptonContextMenu? _kCtxMenu; + private KryptonContextMenuItems? _menuItems; + private KryptonContextMenuItem _menuSortAscending; + private KryptonContextMenuItem _menuSortDescending; + private KryptonContextMenuSeparator _menuSeparator1; + private KryptonContextMenuItem _menuExpand; + private KryptonContextMenuItem _menuCollapse; + private KryptonContextMenuItem _menuUnGroup; + private KryptonContextMenuSeparator _menuSeparator2; + private KryptonContextMenuItem _menuFullExpand; + private KryptonContextMenuItem _menuFullCollapse; + private KryptonContextMenuSeparator _menuSeparator3; + private KryptonContextMenuItem _menuClearGrouping; + private KryptonContextMenuItem? _menuHideGroupBox; + private KryptonContextMenuItem _menuGroupInterval; + private KryptonContextMenuItem _menuSortBySummary; + #endregion + + #region Custom Events + /// + /// Column Sort Changed Event + /// + public event EventHandler? ColumnSortChanged; + /// + /// Column Group Added Event + /// + public event EventHandler? ColumnGroupAdded; + /// + /// Column Group removed Event + /// + public event EventHandler? ColumnGroupRemoved; + /// + /// Clear grouping event + /// + public event EventHandler? ClearGrouping; + /// + /// Full Expand event + /// + public event EventHandler? FullExpand; + /// + /// Full Collapse event + /// + public event EventHandler? FullCollapse; + /// + /// Group Expand event + /// + public event EventHandler? GroupExpand; + /// + /// Group Collapse event + /// + public event EventHandler? GroupCollapse; + /// + /// Column Group Order Changed Event + /// + public event EventHandler? ColumnGroupOrderChanged; + /// + /// Group Interval Click event + /// + public event EventHandler? GroupIntervalClick; + /// + /// Sort by Summary Count event + /// + public event EventHandler? SortBySummaryCount; + #endregion + + #region Constructor + + /// + /// Constructor + /// + public KryptonOutlookGridGroupBox() + { + // To remove flicker we use double buffering for drawing + SetStyle( + ControlStyles.AllPaintingInWmPaint | + ControlStyles.OptimizedDoubleBuffer | + ControlStyles.ResizeRedraw, true); + + InitializeComponent(); + + _columnsList = new List(); + + // Cache the current global palette setting + _palette = KryptonManager.CurrentGlobalPalette; + + // Hook into palette events + if (_palette != null) + { + _palette.PalettePaint += OnPalettePaint; + } + + // (4) We want to be notified whenever the global palette changes + KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; + + // Create redirection object to the base palette + _paletteRedirect = new PaletteRedirect(_palette); + + // Create accessor objects for the back, border and content + // Store the inherit instances + _paletteBack = new PaletteBackInheritRedirect(_paletteRedirect); + _paletteBorder = new PaletteBorderInheritRedirect(_paletteRedirect); + _paletteContent = new PaletteContentInheritRedirect(_paletteRedirect); + _paletteDataGridView = new PaletteDataGridViewRedirect(_paletteRedirect, null); + _paletteDataGridViewAll = new PaletteDataGridViewAll(_paletteDataGridView, null); + + // Create storage that maps onto the inherit instances + _border = new PaletteBorder(_paletteBorder, null); + _dragColumnToGroupText = KryptonManager.Strings.OutlookGridStrings.DragColumnToGroup; + + using (Graphics? g = CreateGraphics()) + { + _factorX = g.DpiX > 96 ? 1f * g.DpiX / 96 : 1f; + _factorY = g.DpiY > 96 ? 1f * g.DpiY / 96 : 1f; + } + } + + #endregion + + #region Properties + + /// + /// Gets access to the common textbox appearance entries that other states can override. + /// + [Category("Visuals")] + [Description("Overrides borders settings.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteBorder Border => _border; + + /// + /// Getsor sets the text that appears when no column is grouped. + /// + [Category("Text")] + [Description("The text that appears when no column is grouped.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public String DragColumnToGroupText + { + get => _dragColumnToGroupText; + set => _dragColumnToGroupText = value; + } + + #endregion + + #region Overrides + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (_mementoBack != null) + { + _mementoBack.Dispose(); + _mementoBack = null; + } + + // (10) Unhook from the palette events + if (_palette != null) + { + _palette.PalettePaint -= OnPalettePaint; + _palette = null; + } + + // (11) Unhook from the static events, otherwise we cannot be garbage collected + KryptonManager.GlobalPaletteChanged -= OnGlobalPaletteChanged; + } + + if (disposing && components != null) + { + components.Dispose(); + } + + base.Dispose(disposing); + } + + /// + /// Overrides the paint event + /// + /// PaintEventArgs + protected override void OnPaint(PaintEventArgs e) + { + int nextPosition = (int)(5 * _factorX); + if (_palette != null) + { + // (3) Get the renderer associated with this palette + IRenderer renderer = _palette.GetRenderer(); + + // (4) Create the rendering context that is passed into all renderer calls + using (RenderContext renderContext = new(this, e.Graphics, e.ClipRectangle, renderer)) + { + _paletteBack.Style = PaletteBackStyle.PanelClient; + _paletteBorder.Style = PaletteBorderStyle.HeaderPrimary; + using (GraphicsPath path = renderer.RenderStandardBorder.GetBackPath(renderContext, e.ClipRectangle, _paletteBorder, VisualOrientation.Top, PaletteState.Normal)) + { + _mementoBack = renderer.RenderStandardBack.DrawBack(renderContext, + ClientRectangle, + path, + _paletteBack, + VisualOrientation.Top, + PaletteState.Normal, + _mementoBack); + } + renderer.RenderStandardBorder.DrawBorder(renderContext, ClientRectangle, _border, VisualOrientation.Top, PaletteState.Normal); + + //If no grouped columns, draw to the indicating text + if (_columnsList.Count == 0) + { + TextRenderer.DrawText(e.Graphics, _dragColumnToGroupText, _palette.GetContentShortTextFont(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal), e.ClipRectangle, _palette.GetContentShortTextColor1(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal), + TextFormatFlags.EndEllipsis | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); + } + + PaletteState state; + _paletteBack.Style = PaletteBackStyle.GridHeaderColumnList; + _paletteBorder.Style = PaletteBorderStyle.GridHeaderColumnList; + // PaintGroupBox(e.Graphics, e.ClipRectangle, this.Font, "Drag a column here to group", columnsList.Count > 0); + + + + //Draw the column boxes + foreach (OutlookGridGroupBoxColumn? current in _columnsList) + { + Rectangle rectangle = default(Rectangle); + rectangle.Width = (int)(100 * _factorX); + rectangle.X = nextPosition; + rectangle.Y = (e.ClipRectangle.Height - (int)(25 * _factorY)) / 2; + rectangle.Height = (int)(25 * _factorY); + nextPosition += (int)(105 * _factorX); //next position + current!.Rect = rectangle; + + if (current.IsHovered) + { + state = PaletteState.Tracking; + } + else if (current.Pressed) + { + state = PaletteState.Pressed; + } + else + { + state = PaletteState.Normal; + } + + // Do we need to draw the background? + if (_paletteBack.GetBackDraw(PaletteState.Normal) == InheritBool.True) + { + //Back + using (GraphicsPath path = renderer.RenderStandardBorder.GetBackPath(renderContext, rectangle, _paletteBorder, VisualOrientation.Top, PaletteState.Normal)) + { + _mementoBack = renderer.RenderStandardBack.DrawBack(renderContext, + rectangle, + path, + _paletteBack, + VisualOrientation.Top, + state, + _mementoBack); + } + + //Border + renderer.RenderStandardBorder.DrawBorder(renderContext, rectangle, _paletteBorder, VisualOrientation.Top, state); + + //Text + TextRenderer.DrawText(e.Graphics, current.Text, _palette.GetContentShortTextFont(PaletteContentStyle.GridHeaderColumnList, state), rectangle, _palette.GetContentShortTextColor1(PaletteContentStyle.GridHeaderColumnList, state), + TextFormatFlags.EndEllipsis | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); + + //Sort Glyph + renderer.RenderGlyph.DrawGridSortGlyph(renderContext, current.SortDirection, rectangle, _paletteDataGridViewAll.HeaderColumn.Content, state, false); + } + + //Draw the column box while it is moving + if (current.IsMoving) + { + Rectangle rectangle1 = new(_mouse.X, _mouse.Y, current.Rect.Width, current.Rect.Height); + //this.Renderer.PaintMovingColumn(graphics, this.currentDragColumn, rectangle1); + using (SolidBrush solidBrush = new(Color.FromArgb(70, Color.Gray))) + { + e.Graphics.FillRectangle(solidBrush, rectangle1); + } + + TextRenderer.DrawText(e.Graphics, current.Text, _palette.GetContentShortTextFont(PaletteContentStyle.GridHeaderColumnList, PaletteState.Disabled), rectangle1, _palette.GetContentShortTextColor1(PaletteContentStyle.GridHeaderColumnList, PaletteState.Disabled), + TextFormatFlags.EndEllipsis | TextFormatFlags.VerticalCenter | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); + } + } + } + } + + base.OnPaint(e); + } + + /// + /// Overrides the MouseDown event. + /// + /// A MouseEventArgs that contains the event data. + protected override void OnMouseDown(MouseEventArgs e) + { + foreach (OutlookGridGroupBoxColumn? c in _columnsList) + { + if (c?.Rect != null) + { + if (c.Rect.Contains(e.X, e.Y) && e.Button == MouseButtons.Left) + { + c.Pressed = true; + } + } + } + Invalidate(); + base.OnMouseDown(e); + } + + /// + /// Overrides the MouseUp event. + /// + /// A MouseEventArgs that contains the event data. + protected override void OnMouseUp(MouseEventArgs e) + { + List l = new List(); + OutlookGridGroupBoxColumn? columnMovingInsideGroupBox = null; + + foreach (OutlookGridGroupBoxColumn? c in _columnsList) + { + if (c?.Rect != null) + { + if (c.IsMoving && !Bounds.Contains(e.Location)) + { + l.Add(c); + } + //We move an existing colum inside the groupbox + else if (c.IsMoving && Bounds.Contains(e.Location)) + { + columnMovingInsideGroupBox = c; + } + + //Stop moving and pressing + c.Pressed = false; + c.IsMoving = false; + } + } + + //no more dragging + _isDragging = false; + + //Ungroup columns dragged outside the box + if (l.Count > 0) + { + foreach (OutlookGridGroupBoxColumn? c in l) + { + //Warn the Grid + OnColumnGroupRemoved(new OutlookGridColumnEventArgs(new OutlookGridColumn(c?.ColumnName!, null, null, SortOrder.None, -1, -1, null))); + + _columnsList.Remove(c); + } + } + + + if (columnMovingInsideGroupBox != null) + { + if (e.Location.X != columnMovingInsideGroupBox.Rect.X && (e.Location.X < columnMovingInsideGroupBox.Rect.X || e.Location.X > columnMovingInsideGroupBox.Rect.X + columnMovingInsideGroupBox.Rect.Width)) + { + int i = 0; //first group order is 0 + + foreach (OutlookGridGroupBoxColumn? existingColumns in _columnsList) + { + if (e.Location.X > existingColumns!.Rect.X + existingColumns.Rect.Width / 2 && existingColumns != columnMovingInsideGroupBox) + { + i++; + } + } + OnColumnGroupOrderChanged(new OutlookGridColumnEventArgs(new OutlookGridColumn(columnMovingInsideGroupBox.ColumnName, null, null, SortOrder.None, i, -1, null))); + //MessageBox.Show("Changed order = " + i.ToString()); + } + } + + Invalidate(); + base.OnMouseDown(e); + } + + /// + /// Overrides the MouseClick event. + /// + /// A MouseEventArgs that contains the event data. + protected override void OnMouseClick(MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + _indexselected = -1; + for (int i = 0; i < _columnsList.Count; i++) + { + if (_columnsList[i]?.Rect != null && _columnsList[i]!.Rect.Contains(e.X, e.Y)) + { + _indexselected = i; + } + } + ShowColumnBoxContextMenu(); + } + else if (e.Button == MouseButtons.Left) + { + //On MouseClick is before OnMouseUp, so if it is moving, don't click... + bool somethingIsMoving = false; + foreach (OutlookGridGroupBoxColumn? c in _columnsList) + { + if (c!.IsMoving) + { + somethingIsMoving = true; + } + } + + if (!somethingIsMoving) + { + foreach (OutlookGridGroupBoxColumn? c in _columnsList) + { + if (c?.Rect != null && c.Rect.Contains(e.X, e.Y)) + { + c.SortDirection = c.SortDirection == SortOrder.Ascending ? SortOrder.Descending : SortOrder.Ascending; + //Warn the Grid + OnColumnSortChanged(new OutlookGridColumnEventArgs(new OutlookGridColumn(c.ColumnName, null, null, c.SortDirection, -1, -1, null))); + } + } + } + } + + base.OnMouseClick(e); + } + + /// + /// Overrides the MouseMove event. + /// + /// A MouseEventArgs that contains the event data. + protected override void OnMouseMove(MouseEventArgs e) + { + base.OnMouseMove(e); + _mouse = e.Location; + foreach (OutlookGridGroupBoxColumn? c in _columnsList) + { + if (c?.Rect != null) + { + //Update hovering + c.IsHovered = c.Rect.Contains(e.X, e.Y); + + //declare dragging + if (c.Rect.Contains(e.X, e.Y) && e.Button == MouseButtons.Left && !_isDragging) + { + _isDragging = true; + c.IsMoving = true; + //Console.WriteLine(_mouse.ToString()); + } + } + } + Invalidate(); + } + + #endregion + + #region Events + + /// + /// Handles OnPalettePaint Event + /// + /// Source of the event. + /// A PaletteLayoutEventArgs that contains the event data. + private void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) + { + Invalidate(); + } + + /// + /// Handles OnGlobalPaletteChanged event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnGlobalPaletteChanged(object? sender, EventArgs e) + { + // (5) Unhook events from old palette + if (_palette != null) + { + _palette.PalettePaint -= OnPalettePaint; + } + + // (6) Cache the new IPalette that is the global palette + _palette = KryptonManager.CurrentGlobalPalette; + _paletteRedirect.Target = _palette; //!!!!!! + + // (7) Hook into events for the new palette + if (_palette != null) + { + _palette.PalettePaint += OnPalettePaint; + } + + // (8) Change of palette means we should repaint to show any changes + Invalidate(); + } + + /// + /// Raises the ColumnSortChanged event. + /// + /// A OutlookGridColumnEventArgs that contains the event data. + protected virtual void OnColumnSortChanged(OutlookGridColumnEventArgs e) + { + if (ColumnSortChanged != null) + { + ColumnSortChanged(this, e); + } + } + + /// + /// Raises the ColumnGroupAdded event. + /// + /// A OutlookGridColumnEventArgs that contains the event data. + protected virtual void OnColumnGroupAdded(OutlookGridColumnEventArgs e) + { + if (ColumnGroupAdded != null) + { + ColumnGroupAdded(this, e); + } + } + + /// + /// Raises the ColumnGroupRemoved event. + /// + /// A OutlookGridColumnEventArgs that contains the event data. + protected virtual void OnColumnGroupRemoved(OutlookGridColumnEventArgs e) + { + if (ColumnGroupRemoved != null) + { + ColumnGroupRemoved(this, e); + } + } + + /// + /// Raises the ColumnGroupOrderChanged event. + /// + /// A OutlookGridColumnEventArgs that contains the event data. + protected virtual void OnColumnGroupOrderChanged(OutlookGridColumnEventArgs e) + { + if (ColumnGroupOrderChanged != null) + { + ColumnGroupOrderChanged(this, e); + } + } + + /// + /// Raises the ClearGrouping event. + /// + /// A EventArgs that contains the event data. + protected virtual void OnClearGrouping(EventArgs e) + { + if (ClearGrouping != null) + { + ClearGrouping(this, e); + } + } + + /// + /// Raises the FullExpand event. + /// + /// A EventArgs that contains the event data. + protected virtual void OnFullExpand(EventArgs e) + { + if (FullExpand != null) + { + FullExpand(this, e); + } + } + + /// + /// Raises the FullCollapse event. + /// + /// A EventArgs that contains the event data. + protected virtual void OnFullCollapse(EventArgs e) + { + if (FullCollapse != null) + { + FullCollapse(this, e); + } + } + + /// + /// Raises the Group Expand event. + /// + /// A EventArgs that contains the event data. + protected virtual void OnGroupExpand(OutlookGridColumnEventArgs e) + { + if (GroupExpand != null) + { + GroupExpand(this, e); + } + } + + /// + /// Raises the Group Collapse event. + /// + /// A EventArgs that contains the event data. + protected virtual void OnGroupCollapse(OutlookGridColumnEventArgs e) + { + if (GroupCollapse != null) + { + GroupCollapse(this, e); + } + } + + /// + /// Raises the GroupIntervalClick event. + /// + /// A EventArgs that contains the event data. + private void OnGroupIntervalClick(OutlookGridColumnEventArgs e) + { + if (GroupIntervalClick != null) + { + GroupIntervalClick(this, e); + } + } + + /// + /// Raises the OnSortBySummaryCount event. + /// + /// A EventArgs that contains the event data. + private void OnSortBySummaryCount(OutlookGridColumnEventArgs e) + { + if (SortBySummaryCount != null) + { + SortBySummaryCount(this, e); + } + } + + /// + /// Handles the HideGroupBox event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnHideGroupBox(object? sender, EventArgs e) + { + Hide(); + } + + /// + /// Handles the ClearGrouping event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnClearGrouping(object? sender, EventArgs e) + { + OnClearGrouping(new EventArgs()); + _columnsList.Clear(); + Invalidate(); + } + + /// + /// Handles the FullCollapse event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnFullCollapse(object? sender, EventArgs e) + { + OnFullCollapse(new EventArgs()); + } + + /// + /// Handles the FullExpand event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnFullExpand(object? sender, EventArgs e) + { + OnFullExpand(new EventArgs()); + } + + /// + /// Handles the GroupCollapse event + /// + /// Source of the event. + /// A OutlookGridColumnEventArgs that contains the event data. + private void OnGroupCollapse(object? sender, EventArgs e) + { + OnGroupCollapse(new OutlookGridColumnEventArgs(new OutlookGridColumn(_columnsList[_indexselected]?.ColumnName, null, null, SortOrder.None, -1, -1, null))); + } + + /// + /// Handles the GroupExpand event + /// + /// Source of the event. + /// A OutlookGridColumnEventArgs that contains the event data. + private void OnGroupExpand(object? sender, EventArgs e) + { + OnGroupExpand(new OutlookGridColumnEventArgs(new OutlookGridColumn(_columnsList[_indexselected]?.ColumnName, null, null, SortOrder.None, -1, -1, null))); + } + + /// + /// Handles the SortAscending event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnSortAscending(object? sender, EventArgs e) + { + //Change the sortOrder in the list + OutlookGridGroupBoxColumn? col = _columnsList[_indexselected]; + col!.SortDirection = SortOrder.Ascending; + //Raise event + OnColumnSortChanged(new OutlookGridColumnEventArgs(new OutlookGridColumn(col.ColumnName, null, null, SortOrder.Ascending, -1, -1, null))); + //Redraw + Invalidate(); + } + + /// + /// Handles the SortDescending event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnSortDescending(object? sender, EventArgs e) + { + //Change the sortOrder in the list + OutlookGridGroupBoxColumn? col = _columnsList[_indexselected]; + col!.SortDirection = SortOrder.Descending; + //Raise event + OnColumnSortChanged(new OutlookGridColumnEventArgs(new OutlookGridColumn(col.ColumnName, null, null, SortOrder.Descending, -1, -1, null))); + //Redraw + Invalidate(); + } + + /// + /// Handles the UnGroup event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnUngroup(object? sender, EventArgs e) + { + OutlookGridGroupBoxColumn? col = _columnsList[_indexselected]; + OnColumnGroupRemoved(new OutlookGridColumnEventArgs(new OutlookGridColumn(col!.ColumnName, null, null, SortOrder.None, -1, -1, null))); + _columnsList.Remove(col); + Invalidate(); + } + + /// + /// Handles the GroupIntervalClick event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnGroupIntervalClick(object? sender, EventArgs e) + { + var item = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); + OutlookGridGroupBoxColumn? col = _columnsList[_indexselected]; + OutlookGridColumn colEvent = new(col!.ColumnName, null, null, SortOrder.None, -1, -1, null) + { + GroupingType = new OutlookGridDateTimeGroup(null) { Interval = (DateInterval)Enum.Parse(typeof(DateInterval), item.Tag?.ToString()!) } + }; + col.GroupInterval = ((OutlookGridDateTimeGroup)colEvent.GroupingType).Interval.ToString(); + //Raise event + OnGroupIntervalClick(new OutlookGridColumnEventArgs(colEvent)); + } + + /// + /// Handles the OnSortBySummaryCount event + /// + /// Source of the event. + /// A EventArgs that contains the event data. + private void OnSortBySummaryCount(object? sender, EventArgs e) + { + var item = sender as KryptonContextMenuItem ?? throw new ArgumentNullException(nameof(sender)); + OutlookGridGroupBoxColumn? col = _columnsList[_indexselected]; + OutlookGridColumn colEvent = new(col!.ColumnName, null, null, SortOrder.None, -1, -1, null) + { + GroupingType = new OutlookGridDefaultGroup(null) { SortBySummaryCount = item.Checked } + }; + col.SortBySummaryCount = item.Checked; + //Raise event + OnSortBySummaryCount(new OutlookGridColumnEventArgs(colEvent)); + } + + /// + /// Handles the DragDrop event. Add a new grouping column following a drag drop from the grid + /// + /// Source of the event. + /// A DragEventArgs that contains the event data. + private void KryptonOutlookGridGroupBox_DragDrop(object? sender, DragEventArgs e) + { + string? columnToMove = e.Data?.GetData(typeof(string)) as string; + string? columnName; + string? columnText; + SortOrder sortOrder; + DataGridViewColumnSortMode? sortMode; + string[]? res = columnToMove?.Split('|'); + columnName = res![0]; + columnText = res[1]; + sortOrder = (SortOrder)Enum.Parse(typeof(SortOrder), res[2]);//SortOrder.Ascending; + if (sortOrder == SortOrder.None) + { + sortOrder = SortOrder.Ascending; + } + + sortMode = (DataGridViewColumnSortMode)Enum.Parse(typeof(DataGridViewColumnSortMode), res[3]); + OutlookGridGroupBoxColumn colToAdd = new(columnName, columnText, sortOrder, res[4]) + { + //if (res[4] == typeof(OutlookGridDateTimeGroup).Name) + GroupInterval = res[5], + SortBySummaryCount = CommonHelper.StringToBool(res[6]) + }; + if (!String.IsNullOrEmpty(columnToMove) && !_columnsList.Contains(colToAdd) && sortMode != DataGridViewColumnSortMode.NotSortable) + { + //Determine the position of the new Group amongst the others + int i = 0; //first group order is 0 + //We are sure that we are going to browse the columns from left to right + foreach (OutlookGridGroupBoxColumn? existingColumn in _columnsList) + { + if (e.X > existingColumn!.Rect.X + existingColumn.Rect.Width / 2) + { + i++; + } + } + _columnsList.Insert(i, colToAdd); + + //try + //{ + //Warns the grid of a new grouping + OnColumnGroupAdded(new OutlookGridColumnEventArgs(new OutlookGridColumn(columnName, null, null, sortOrder, i, -1, null))); + Invalidate(); + //} + //catch (Exception exc) + //{ + // MessageBox.Show("Failed to group.\n\n Error:" + exc.Message, + // "Grid GroupBox", + // MessageBoxButtons.OK, + // MessageBoxIcon.Error); + //} + } + } + + /// + /// Hnadles the DragEnter event. + /// + /// Source of the event. + /// A DragEventArgs that contains the event data. + private void KryptonOutlookGridGroupBox_DragEnter(object? sender, DragEventArgs e) + { + e.Effect = DragDropEffects.Move; + } + + #endregion + + #region Methods + + /// Creates the group box. + /// The column. + /// Type of the grouping. + /// The order. + /// if set to true [sort by summary]. + public void CreateGroupBox(DataGridViewColumn column, string groupingType, SortOrder order, bool sortBySummary) + { + var columnToMove = column.Name; + var columnName = column.Name; + var columnText = column.HeaderText; + SortOrder sortOrder; + DataGridViewColumnSortMode? sortMode; + var res = columnToMove.Split('|'); + sortOrder = order; + + if (sortOrder == SortOrder.None) + { + sortOrder = SortOrder.Ascending; + } + + sortMode = (DataGridViewColumnSortMode)Enum.Parse(typeof(DataGridViewColumnSortMode), column.SortMode.ToString()); + OutlookGridGroupBoxColumn colToAdd = new(columnName, columnText, sortOrder, groupingType) + { + GroupInterval = res[0], + SortBySummaryCount = sortBySummary + }; + + if (!string.IsNullOrEmpty(columnToMove) && !_columnsList.Contains(colToAdd) && + sortMode != DataGridViewColumnSortMode.NotSortable) + { + _columnsList.Insert(0, colToAdd); + + + //Warns the grid of a new grouping + OnColumnGroupAdded( + new OutlookGridColumnEventArgs(new OutlookGridColumn(columnName, null, null, sortOrder, 0, -1, null))); + + Invalidate(); + } + } + + /// + /// Show the context menu for column box + /// + private void ShowColumnBoxContextMenu() + { + if (_menuItems == null) + { + // Create individual items + /*_menuSortAscending = new KryptonContextMenuItem(LanguageManager.Instance.GetString("SORTASCENDING"), Resources.OutlookGridImageResources.sort_az_ascending2, new EventHandler(OnSortAscending)); + _menuSortDescending = new KryptonContextMenuItem(LanguageManager.Instance.GetString("SORTDESCENDING"), Resources.OutlookGridImageResources.sort_az_descending2, new EventHandler(OnSortDescending)); + _menuSeparator1 = new KryptonContextMenuSeparator(); + _menuExpand = new KryptonContextMenuItem(LanguageManager.Instance.GetString("EXPAND"), Resources.OutlookGridImageResources.element_plus_16, new EventHandler(OnGroupExpand)); + _menuCollapse = new KryptonContextMenuItem(LanguageManager.Instance.GetString("COLLAPSE"), Resources.OutlookGridImageResources.element_minus_16, new EventHandler(OnGroupCollapse)); + _menuUnGroup = new KryptonContextMenuItem(LanguageManager.Instance.GetString("UNGROUP"), Resources.OutlookGridImageResources.element_delete, new EventHandler(OnUngroup)); + _menuSeparator2 = new KryptonContextMenuSeparator(); + _menuFullExpand = new KryptonContextMenuItem(LanguageManager.Instance.GetString("FULLEXPAND"), Resources.OutlookGridImageResources.elements_plus_16, new EventHandler(OnFullExpand)); + _menuFullCollapse = new KryptonContextMenuItem(LanguageManager.Instance.GetString("FULLCOLLAPSE"), Resources.OutlookGridImageResources.elements_minus_16, new EventHandler(OnFullCollapse)); + _menuSeparator3 = new KryptonContextMenuSeparator(); + _menuClearGrouping = new KryptonContextMenuItem(LanguageManager.Instance.GetString("CLEARGROUPING"), Resources.OutlookGridImageResources.element_selection_delete, new EventHandler(OnClearGrouping)); + _menuHideGroupBox = new KryptonContextMenuItem(LanguageManager.Instance.GetString("HIDEGROUPBOX"), null, new EventHandler(OnHideGroupBox)); + _menuGroupInterval = new KryptonContextMenuItem(LanguageManager.Instance.GetString("GROUPINTERVAL")); + _menuSortBySummary = new KryptonContextMenuItem(LanguageManager.Instance.GetString("SORTBYSUMMARYCOUNT"), null, new EventHandler(OnSortBySummaryCount));*/ + + #region Localisation + + _menuSortAscending = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.SortAscending, SortingImageResources.sort_az_ascending2, OnSortAscending); + _menuSortDescending = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.SortDescending, SortingImageResources.sort_az_descending2, OnSortDescending); + _menuSeparator1 = new KryptonContextMenuSeparator(); + _menuExpand = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Expand, ElementsImageResources.element_plus_16, OnGroupExpand); + _menuCollapse = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Collapse, ElementsImageResources.element_minus_16, OnGroupCollapse); + _menuUnGroup = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.Ungroup, ElementsImageResources.element_delete, OnUngroup); + _menuSeparator2 = new KryptonContextMenuSeparator(); + _menuFullExpand = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.FullExpand, ElementsImageResources.elements_plus_16, OnFullExpand); + _menuFullCollapse = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.FullCollapse, ElementsImageResources.elements_minus_16, OnFullCollapse); + _menuSeparator3 = new KryptonContextMenuSeparator(); + _menuClearGrouping = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.ClearGrouping, ElementsImageResources.element_selection_delete, OnClearGrouping); + _menuHideGroupBox = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.HideGroupBox, null, OnHideGroupBox); + _menuGroupInterval = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.GroupInterval); + _menuSortBySummary = new KryptonContextMenuItem(KryptonManager.Strings.OutlookGridStrings.SortBySummaryCount, null, OnSortBySummaryCount); + + #endregion + + _menuSortBySummary.CheckOnClick = true; + + //Group Interval + KryptonContextMenuItems? groupIntervalItems; + KryptonContextMenuItem? it; + string[] names = Enum.GetNames(typeof(DateInterval)); + KryptonContextMenuItemBase[] arrayOptions = new KryptonContextMenuItemBase[names.Length]; + for (int i = 0; i < names.Length; i++) + { + it = new KryptonContextMenuItem(OutlookGridLanguageManager.Instance.GetString(names[i])); + it.Tag = names[i]; + it.Click += OnGroupIntervalClick; + arrayOptions[i] = it; + } + groupIntervalItems = new KryptonContextMenuItems(arrayOptions); + _menuGroupInterval.Items.Add(groupIntervalItems); + + // Add items inside an items collection (apart from separator1 which is only added if required) + _menuItems = new KryptonContextMenuItems(new KryptonContextMenuItemBase[] { _menuSortAscending, + _menuSortDescending, + _menuSortBySummary, + _menuSeparator1, + _menuGroupInterval, + _menuExpand, + _menuCollapse, + _menuUnGroup, + _menuSeparator2, + _menuFullExpand, + _menuFullCollapse, + _menuSeparator3, + _menuClearGrouping, + _menuHideGroupBox + }); + } + + // Ensure we have a krypton context menu if not already present + if (_kCtxMenu == null) + { + _kCtxMenu = new KryptonContextMenu(); + } + + + // Update the individual menu options + OutlookGridGroupBoxColumn? col = null; + if (_indexselected > -1) + { + col = _columnsList[_indexselected]; + } + + _menuSortAscending.Visible = col != null; + _menuSortDescending.Visible = col != null; + _menuSortAscending.Checked = col != null && col.SortDirection == SortOrder.Ascending; + _menuSortDescending.Checked = col != null && col.SortDirection == SortOrder.Descending; + _menuSortBySummary.Visible = col != null; + _menuSortBySummary.Checked = col != null && col.SortBySummaryCount; + _menuExpand.Visible = col != null; + _menuCollapse.Visible = col != null; + _menuGroupInterval.Visible = col != null && col.GroupingType == nameof(OutlookGridDateTimeGroup); + if (_menuGroupInterval.Visible) + { + foreach (var kryptonContextMenuItemBase in ((KryptonContextMenuItems)_menuGroupInterval.Items[0]).Items) + { + var item = kryptonContextMenuItemBase as KryptonContextMenuItem; + item!.Checked = item.Tag!.ToString() == col!.GroupInterval; + } + } + _menuUnGroup.Visible = col != null; + _menuFullExpand.Enabled = _columnsList.Count > 0; + _menuFullCollapse.Enabled = _columnsList.Count > 0; + _menuClearGrouping.Enabled = _columnsList.Count > 0; + + _menuSeparator1.Visible = _menuSortAscending.Visible || _menuSortDescending.Visible; + _menuSeparator2.Visible = _menuExpand.Visible || _menuCollapse.Visible || _menuUnGroup.Visible; + _menuSeparator3.Visible = _menuFullExpand.Visible || _menuFullCollapse.Visible; + + if (!_kCtxMenu.Items.Contains(_menuItems)) + { + _kCtxMenu.Items.Add(_menuItems); + } + + // Show the menu! + _kCtxMenu.Show(this); + } + + /// + /// DO NOT USE THIS FUNCTION YOURSELF, USE the corresponding function in OutlookGrid + /// Update the grouping columns. + /// + /// The list of OutlookGridColumn + public void UpdateGroupingColumns(List? list) + { + _columnsList.Clear(); + OutlookGridGroupBoxColumn? colToAdd; + for (int i = 0; i < list!.Count; i++) + { + if (list[i].IsGrouped) + { + colToAdd = new OutlookGridGroupBoxColumn(list[i].DataGridViewColumn?.Name, list[i].DataGridViewColumn?.HeaderText, list[i].SortDirection, list[i].GroupingType?.GetType().Name!); + + if (colToAdd.GroupingType == nameof(OutlookGridDateTimeGroup)) + { + colToAdd.GroupInterval = (list[i].GroupingType! as OutlookGridDateTimeGroup)?.Interval.ToString(); + } + + _columnsList.Add(colToAdd); + } + } + Invalidate(); + } + + + /// + /// Checks if the column exists in the GroupBox control + /// + /// The column name. + /// True if exists, otherwise false. + public bool Contains(string columnName) + { + for (int i = 0; i < _columnsList.Count; i++) + { + if (_columnsList[i]?.ColumnName == columnName) + { + return true; + } + } + return false; + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPanel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPanel.cs index 7c160024d..ac99c5b63 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public class KryptonPanel : VisualPanel { #region Instance Fields - private readonly PaletteDoubleRedirect? _stateCommon; + private readonly PaletteDoubleRedirect _stateCommon; private readonly PaletteDouble? _stateDisabled; private readonly PaletteDouble? _stateNormal; #endregion @@ -41,7 +41,7 @@ public KryptonPanel() SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.OptimizedDoubleBuffer, true); // Create the palette storage - _stateCommon = new PaletteDoubleRedirect(Redirector, PaletteBackStyle.PanelClient, PaletteBorderStyle.ControlClient, NeedPaintDelegate); + _stateCommon = new PaletteDoubleRedirect(Redirector!, PaletteBackStyle.PanelClient, PaletteBorderStyle.ControlClient, NeedPaintDelegate); _stateDisabled = new PaletteDouble(_stateCommon, NeedPaintDelegate); _stateNormal = new PaletteDouble(_stateCommon, NeedPaintDelegate); @@ -54,18 +54,20 @@ public KryptonPanel() /// Common appearance state to inherit from. /// Disabled appearance state. /// Normal appearance state. - public KryptonPanel([DisallowNull] PaletteDoubleRedirect stateCommon, - [DisallowNull] PaletteDouble stateDisabled, - [DisallowNull] PaletteDouble stateNormal) + public KryptonPanel(PaletteDoubleRedirect stateCommon, + PaletteDouble stateDisabled, + PaletteDouble stateNormal) { SetStyle(ControlStyles.SupportsTransparentBackColor | ControlStyles.OptimizedDoubleBuffer, true); - Debug.Assert(stateCommon != null); - Debug.Assert(stateDisabled != null); - Debug.Assert(stateNormal != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(stateCommon is not null); + Debug.Assert(stateDisabled is not null); + Debug.Assert(stateNormal is not null); // Remember the palette storage - _stateCommon = stateCommon; + _stateCommon = stateCommon!; _stateDisabled = stateDisabled; _stateNormal = stateNormal; @@ -113,9 +115,9 @@ public PaletteBackStyle PanelBackStyle [Category(@"Visuals")] [Description(@"Overrides for defining disabled panel appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteBack StateDisabled => _stateDisabled.Back; + public PaletteBack StateDisabled => _stateDisabled!.Back; - private bool ShouldSerializeStateDisabled() => !_stateDisabled.Back.IsDefault; + private bool ShouldSerializeStateDisabled() => !_stateDisabled!.Back.IsDefault; /// /// Gets access to the normal panel appearance. @@ -123,9 +125,9 @@ public PaletteBackStyle PanelBackStyle [Category(@"Visuals")] [Description(@"Overrides for defining normal panel appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteBack StateNormal => _stateNormal.Back; + public PaletteBack StateNormal => _stateNormal!.Back; - private bool ShouldSerializeStateNormal() => !_stateNormal.Back.IsDefault; + private bool ShouldSerializeStateNormal() => !_stateNormal!.Back.IsDefault; /// /// Fix the control to a particular palette state. @@ -149,7 +151,7 @@ public virtual void SetFixedState(PaletteState state) => protected override void OnEnabledChanged(EventArgs e) { // Push correct palettes into the view - ViewDrawPanel.SetPalettes(Enabled ? _stateNormal.Back : _stateDisabled.Back); + ViewDrawPanel.SetPalettes(Enabled ? _stateNormal!.Back : _stateDisabled!.Back); // Update with latest enabled state ViewDrawPanel.Enabled = Enabled; @@ -166,7 +168,7 @@ protected override void OnEnabledChanged(EventArgs e) private void Construct() { // Our view contains just a simple canvas that covers entire client area - ViewDrawPanel = new ViewDrawPanel(_stateNormal.Back); + ViewDrawPanel = new ViewDrawPanel(_stateNormal!.Back); // Create the view manager instance ViewManager = new ViewManager(this, ViewDrawPanel); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPictureBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPictureBox.cs index 78caf028e..122467e0f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPictureBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPictureBox.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPrintDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPrintDialog.cs index 6f69df16d..74b35949b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPrintDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPrintDialog.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBar.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBar.cs index 900fc69d2..f6d2dad01 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBar.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2024. All rights reserved. */ #endregion @@ -18,9 +18,14 @@ namespace Krypton.Toolkit [DefaultBindingProperty("Value")] [DesignerCategory(@"code")] [Description(@"Represents a Krypton progress bar control.")] - [Designer(typeof(KryptonButtonDesigner))] + //[Designer(typeof(KryptonButtonDesigner))] public class KryptonProgressBar : Control, IContentValues { + // Progressbar designer is incorrect. + // Disabled for now. + // Control works fine without it. + // Will discuss later if a specific designer is desired and what it should look like. + #region Instance Fields private ProgressBarStyle _style; @@ -33,7 +38,6 @@ public class KryptonProgressBar : Control, IContentValues private IDisposable? _mementoBackProgressBar; private IDisposable? _mementoBackProgressValue; private bool _useValueAsText; - private float _cornerRoundingRadius; private int _marqueeSpeed; private int _maximum; private int _minimum; @@ -74,7 +78,7 @@ public KryptonProgressBar() { Interval = _marqueeSpeed }; - _marqueeTimer.Tick += OnMarqueeTick!; + _marqueeTimer.Tick += OnMarqueeTick; // Cache the current global palette setting _palette = KryptonManager.CurrentGlobalPalette; @@ -82,7 +86,7 @@ public KryptonProgressBar() // Hook into palette events if (_palette != null) { - _palette.PalettePaint += OnPalettePaint!; + _palette.PalettePaint += OnPalettePaint; } // Create content storage @@ -90,10 +94,10 @@ public KryptonProgressBar() { Text = string.Empty }; - Values.TextChanged += OnLabelTextChanged!; + Values.TextChanged += OnLabelTextChanged; // We want to be notified whenever the global palette changes - KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged!; + KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; // Create redirection object to the base palette _paletteRedirect = new PaletteRedirect(_palette); @@ -111,7 +115,6 @@ public KryptonProgressBar() Color1 = Color.Green } }; - SetCornerRoundingRadius(null); StateDisabled = new PaletteTriple(StateCommon, OnNeedPaintHandler); ((PaletteBack)StateDisabled.PaletteBack).ColorStyle = PaletteColorStyle.OneNote; StateNormal = new PaletteTriple(StateCommon, OnNeedPaintHandler); @@ -152,12 +155,12 @@ protected override void Dispose(bool disposing) // Unhook from the palette events if (_palette != null) { - _palette.PalettePaint -= OnPalettePaint!; + _palette.PalettePaint -= OnPalettePaint; _palette = null; } // Unhook from the static events, otherwise we cannot be garbage collected - KryptonManager.GlobalPaletteChanged -= OnGlobalPaletteChanged!; + KryptonManager.GlobalPaletteChanged -= OnGlobalPaletteChanged; } base.Dispose(disposing); @@ -385,7 +388,6 @@ public int Value } } - /// /// Gets or sets the text associated with this control. /// @@ -395,6 +397,9 @@ public int Value [AllowNull] public override string Text { + // Values.Text can be set to null + // The getter will always return a string + get => Values.Text; set @@ -447,19 +452,6 @@ public void PerformStep() public override string ToString() => $"{base.ToString()}, Minimum: {Minimum.ToString(CultureInfo.CurrentCulture)}, Maximum: {Maximum.ToString(CultureInfo.CurrentCulture)}, Value: {Value.ToString(CultureInfo.CurrentCulture)}"; - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals")] - [Description(@"Gets or sets the corner rounding radius.")] - [RefreshProperties(RefreshProperties.Repaint)] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - - set => SetCornerRoundingRadius(value); - } - /// /// Gets and sets the visual orientation of the control. /// @@ -564,7 +556,7 @@ protected override void OnLayout(LayoutEventArgs e) var (barPaletteState, barState) = GetBarPaletteState(); // Get the renderer associated with this palette - IRenderer renderer = _palette.GetRenderer()!; + IRenderer renderer = _palette.GetRenderer(); // Create a layout context used to allow the renderer to layout the content using var viewContext = new ViewLayoutContext(this, renderer); @@ -574,8 +566,8 @@ protected override void OnLayout(LayoutEventArgs e) // Ask the renderer to work out how the Content values will be laid out and // return a memento object that we cache for use when actually performing painting - _mementoContent = renderer.RenderStandardContent.LayoutContent(viewContext, ClientRectangle, barPaletteState.PaletteContent, - this, Orientation, barState, false, true); + _mementoContent = renderer.RenderStandardContent.LayoutContent(viewContext, ClientRectangle, barPaletteState.PaletteContent!, + this, Orientation, barState); } base.OnLayout(e); @@ -584,144 +576,148 @@ protected override void OnLayout(LayoutEventArgs e) /// protected override void OnPaint(PaintEventArgs e) { - if (_palette != null) - { - // Get the renderer associated with this palette - IRenderer? renderer = _palette.GetRenderer(); + // Get the renderer associated with this palette + IRenderer renderer = _palette!.GetRenderer(); - // Create the rendering context that is passed into all renderer calls - using var renderContext = new RenderContext(this, e.Graphics, e.ClipRectangle, renderer); - // Set the style we want picked up from the base palette - var (barPaletteState, barState) = GetBarPaletteState(); + // Create the rendering context that is passed into all renderer calls + using var renderContext = new RenderContext(this, e.Graphics, e.ClipRectangle, renderer); + // Set the style we want picked up from the base palette + var (barPaletteState, barState) = GetBarPaletteState(); - // Draw the background of the entire control over the entire client area. - using (GraphicsPath path = CreateRectGraphicsPath(ClientRectangle)) - { - var panelState = !Parent.Enabled - ? PaletteState.Disabled - : PaletteState.Normal; - // Ask renderer to draw the background - _mementoBackClientPanel = renderer.RenderStandardBack.DrawBack(renderContext, ClientRectangle, path, _paletteBackClientPanel, Orientation, - panelState, _mementoBackClientPanel); - } + // Draw the background of the entire control over the entire client area. + using (GraphicsPath path = CreateRectGraphicsPath(ClientRectangle)) + { + var panelState = !Parent!.Enabled + ? PaletteState.Disabled + : PaletteState.Normal; + // Ask renderer to draw the background + _mementoBackClientPanel = renderer.RenderStandardBack.DrawBack(renderContext, ClientRectangle, path, _paletteBackClientPanel, Orientation, + panelState, _mementoBackClientPanel); + } - ////////////////////////////////////////////////////////////////////////////////// - // In case the border has a rounded effect we need to get the background path // - // to draw from the border part of the renderer. It will return a path that is // - // appropriate for use drawing within the border settings. // - ////////////////////////////////////////////////////////////////////////////////// - using (GraphicsPath path = renderer.RenderStandardBorder.GetBackPath(renderContext, - ClientRectangle, - barPaletteState.PaletteBorder, - Orientation, - barState)) - { - // Ask renderer to draw the background - _mementoBackProgressBar = renderer.RenderStandardBack.DrawBack(renderContext, ClientRectangle, path, barPaletteState.PaletteBack, - Orientation, barState, _mementoBackProgressBar); - } + ////////////////////////////////////////////////////////////////////////////////// + // In case the border has a rounded effect we need to get the background path // + // to draw from the border part of the renderer. It will return a path that is // + // appropriate for use drawing within the border settings. // + ////////////////////////////////////////////////////////////////////////////////// + using (GraphicsPath fullLozengePath = renderer.RenderStandardBorder.GetBackPath(renderContext, + ClientRectangle, + barPaletteState.PaletteBorder!, + Orientation, + barState)) + { + // Ask renderer to draw the background + using var gh = new GraphicsHint(renderContext.Graphics, barPaletteState.PaletteBorder!.GetBorderGraphicsHint(barState)); + _mementoBackProgressBar = renderer.RenderStandardBack.DrawBack(renderContext, ClientRectangle, + fullLozengePath, barPaletteState.PaletteBack, + Orientation, barState, _mementoBackProgressBar); + using var region = new Region(fullLozengePath); + // Set the clipping region, So that "Small" rounded values do not escape the draw area + e.Graphics.SetClip(region, CombineMode.Replace); + } - // Create a rectangle inset - Rectangle innerRect = ClientRectangle; - var maximumRange = (Maximum - Minimum); - if (_style == ProgressBarStyle.Marquee) + // Create a rectangle inset + Rectangle innerRect = ClientRectangle; + var maximumRange = (Maximum - Minimum); + if (_style == ProgressBarStyle.Marquee) + { + float ratio = 1.0f / maximumRange; + int half = (int)(3 * ratio); + int lower = Math.Max(_marqueeLocation - Minimum - half, Minimum); + int higher = Math.Min(lower + half, maximumRange); + switch (Orientation) { - float ratio = 1.0f / maximumRange; - int half = (int)(3 * ratio); - int lower = Math.Max(_marqueeLocation - Minimum - half, Minimum); - int higher = Math.Min(lower + half, maximumRange); - switch (Orientation) - { - case VisualOrientation.Top: - case VisualOrientation.Bottom: + case VisualOrientation.Top: + case VisualOrientation.Bottom: + { + int width = innerRect.Width; + + innerRect.X += (int)(ratio * width * lower); + innerRect.Width = (int)(ratio * width * higher); + // Now do special clipping handling for curved borders + if (innerRect.Right > ClientRectangle.Right) { - int width = innerRect.Width; - - innerRect.X += (int)(ratio * width * lower); - innerRect.Width = (int)(ratio * width * higher); - // Now do special clipping handling for curved borders - if (innerRect.Right > ClientRectangle.Right) - { - innerRect.Width -= (innerRect.Right - ClientRectangle.Right); - } - if (innerRect.X > ClientRectangle.Right) - { - innerRect.X = ClientRectangle.Right; - } + innerRect.Width -= (innerRect.Right - ClientRectangle.Right); } - break; - - case VisualOrientation.Left: - case VisualOrientation.Right: + if (innerRect.X > ClientRectangle.Right) { - int height = innerRect.Height; - - innerRect.Y += (int)(ratio * height * lower); - innerRect.Height = (int)(ratio * height * higher); - // Now do special clipping handling for curved borders - if (innerRect.Bottom > ClientRectangle.Bottom) - { - innerRect.Height -= (innerRect.Bottom - ClientRectangle.Bottom); - } - - if (innerRect.Y > ClientRectangle.Bottom) - { - innerRect.Y = ClientRectangle.Bottom; - } + innerRect.X = ClientRectangle.Right; } - break; - } - } - else - { - // Draw the value offset - float v = (Value - Minimum); - float ratio = v / maximumRange; - switch (Orientation) - { - case VisualOrientation.Top: - case VisualOrientation.Bottom: - innerRect.Width = (int)(ratio * innerRect.Width); - if (RightToLeft == RightToLeft.Yes) + } + break; + + case VisualOrientation.Left: + case VisualOrientation.Right: + { + int height = innerRect.Height; + + innerRect.Y += (int)(ratio * height * lower); + innerRect.Height = (int)(ratio * height * higher); + // Now do special clipping handling for curved borders + if (innerRect.Bottom > ClientRectangle.Bottom) { - innerRect.X = ClientRectangle.Right - innerRect.Width; + innerRect.Height -= (innerRect.Bottom - ClientRectangle.Bottom); } - break; - - case VisualOrientation.Left: - case VisualOrientation.Right: - innerRect.Height = (int)(ratio * innerRect.Height); - if (RightToLeft == RightToLeft.Yes) + if (innerRect.Y > ClientRectangle.Bottom) { - innerRect.Y = ClientRectangle.Bottom - innerRect.Height; + innerRect.Y = ClientRectangle.Bottom; } - - break; - } + } + break; } - - using (GraphicsPath path = renderer.RenderStandardBorder.GetBackPath(renderContext, - innerRect, - barPaletteState.PaletteBorder, - Orientation, - barState)) + } + else + { + // Draw the value offset + float v = (Value - Minimum); + float ratio = v / maximumRange; + switch (Orientation) { - // Ask renderer to draw the background - _mementoBackProgressValue = renderer.RenderStandardBack.DrawBack(renderContext, innerRect, path, _stateBackValue, - Orientation, barState, _mementoBackProgressValue); + case VisualOrientation.Top: + case VisualOrientation.Bottom: + innerRect.Width = (int)(ratio * innerRect.Width); + if (RightToLeft == RightToLeft.Yes) + { + innerRect.X = ClientRectangle.Right - innerRect.Width; + } + + break; + + case VisualOrientation.Left: + case VisualOrientation.Right: + innerRect.Height = (int)(ratio * innerRect.Height); + if (RightToLeft == RightToLeft.Yes) + { + innerRect.Y = ClientRectangle.Bottom - innerRect.Height; + } + + break; } + } - // Now we draw the border of the inner area - renderer.RenderStandardBorder.DrawBorder(renderContext, ClientRectangle, barPaletteState.PaletteBorder, - Orientation, barState); - - // Last of all we draw the content over the top of the border and background - renderer.RenderStandardContent.DrawContent(renderContext, ClientRectangle, - barPaletteState.PaletteContent, _mementoContent, - Orientation, barState, false, true, false); + using (GraphicsPath valueLozengePath = renderer.RenderStandardBorder.GetBackPath(renderContext, + innerRect, + barPaletteState.PaletteBorder!, + Orientation, + barState)) + { + using var gh = new GraphicsHint(renderContext.Graphics, + barPaletteState.PaletteBorder.GetBorderGraphicsHint(PaletteState.Normal)); + // Ask renderer to Fill the Progress lozenge + _mementoBackProgressValue = renderer.RenderStandardBack.DrawBack(renderContext, innerRect, valueLozengePath, _stateBackValue, + Orientation, barState, _mementoBackProgressValue); } + // Now we draw the border of the inner area + renderer.RenderStandardBorder.DrawBorder(renderContext, ClientRectangle, barPaletteState.PaletteBorder, + Orientation, barState); + + // Last of all we draw the content over the top of the border and background + renderer.RenderStandardContent.DrawContent(renderContext, ClientRectangle, + barPaletteState.PaletteContent!, _mementoContent!, + Orientation, barState, false); + base.OnPaint(e); } #endregion @@ -742,12 +738,12 @@ private GraphicsPath CreateRectGraphicsPath(Rectangle rect) return path; } - private void OnGlobalPaletteChanged(object sender, EventArgs e) + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { // Unhook events from old palette if (_palette != null) { - _palette.PalettePaint -= OnPalettePaint!; + _palette.PalettePaint -= OnPalettePaint; } // Cache the new PaletteBase that is the global palette @@ -757,7 +753,7 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e) // Hook into events for the new palette if (_palette != null) { - _palette.PalettePaint += OnPalettePaint!; + _palette.PalettePaint += OnPalettePaint; } // Change of palette means we should repaint to show any changes @@ -777,16 +773,8 @@ private void OnNeedPaintHandler(object? sender, NeedLayoutEventArgs e) } // Palette indicates we might need to repaint, so lets do it - private void OnPalettePaint(object sender, PaletteLayoutEventArgs e) => Invalidate(); - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void OnLabelTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) => Invalidate(); + private void OnLabelTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); private void StartMarquee() { @@ -796,7 +784,7 @@ private void StartMarquee() _marqueeTimer.Start(); } - private void OnMarqueeTick(object sender, EventArgs e) + private void OnMarqueeTick(object? sender, EventArgs e) { _marqueeLocation++; if (_marqueeLocation > Maximum) @@ -808,14 +796,9 @@ private void OnMarqueeTick(object sender, EventArgs e) private void UpdateTextWithValue(bool value) { - if (value) - { - Text = $@"{Value}%"; - } - else - { - Text = string.Empty; - } + Text = value + ? $@"{Value}%" + : string.Empty; } #endregion @@ -843,6 +826,7 @@ public override Color BackColor /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] + [AllowNull, MaybeNull] public override Image BackgroundImage { get => base.BackgroundImage; @@ -899,9 +883,10 @@ public override ImageLayout BackgroundImageLayout /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] + [AllowNull, MaybeNull] public override ContextMenuStrip ContextMenuStrip { - get => base.ContextMenuStrip; + get => base.ContextMenuStrip!; set => base.ContextMenuStrip = value; } @@ -917,8 +902,12 @@ protected override bool DoubleBuffered /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] + [AllowNull] public override Font Font { + // base.Font will always return a Font + // base can take null as a value + get => base.Font; set => base.Font = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBarToolStripItem.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBarToolStripItem.cs index 42b881109..606ff89b1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBarToolStripItem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonProgressBarToolStripItem.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion @@ -156,8 +156,12 @@ public int Value /// [DefaultValue("")] + [AllowNull] public override string Text { + // KryptonProgress.Values.Text can be set to null + // The getter will always return a string + get => KryptonProgressBarHost.Text; set => KryptonProgressBarHost.Text = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPropertyGrid.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPropertyGrid.cs index db82e9e0f..8a97ece76 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPropertyGrid.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonPropertyGrid.cs @@ -1,155 +1,997 @@ #region BSD License /* - * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. */ #endregion +// ReSharper disable UnusedMember.Global + +// ReSharper disable UnusedMember.Local +using System.ComponentModel; + namespace Krypton.Toolkit { - /// A property grid control that supports the Krypton render. + ///A property grid control that supports the Krypton render. + /// /// [Description(@"A property grid control that supports the Krypton render.")] [Designer(typeof(KryptonPropertyGridDesigner))] [ToolboxBitmap(typeof(PropertyGrid), "ToolboxBitmaps.KryptonPropertyGridVersion2.bmp")] [ToolboxItem(true)] - public class KryptonPropertyGrid : PropertyGrid + public class KryptonPropertyGrid : VisualControlBase, + IContainedInputControl { - #region Variables - private PaletteBase? _palette; + #region Classes + private class InternalPropertyGrid : PropertyGrid + { + #region Instance Fields + private readonly ViewManager? _viewManager; + private readonly KryptonPropertyGrid _kryptonPropertyGrid; + private readonly IntPtr _screenDC; + private bool _mouseOver; + #endregion + + #region Events + /// + /// Occurs when the mouse enters the InternalListView. + /// + public event EventHandler? TrackMouseEnter; + + /// + /// Occurs when the mouse leaves the InternalListView. + /// + public event EventHandler? TrackMouseLeave; + #endregion + + #region Identity + /// + /// Initialize a new instance of the InternalPropertyGrid class. + /// + /// Reference to owning control. + public InternalPropertyGrid(KryptonPropertyGrid kryptonPropertyGrid) + { + SetStyle(ControlStyles.ResizeRedraw + | ControlStyles.AllPaintingInWmPaint + | ControlStyles.OptimizedDoubleBuffer, true); + _kryptonPropertyGrid = kryptonPropertyGrid; + + // Create manager and view for drawing the background + ViewDrawPanel = new ViewDrawPanel(); + _viewManager = new ViewManager(this, ViewDrawPanel); + + // ReSharper disable RedundantBaseQualifier + base.Size = Size.Empty; + //base.BorderStyle = BorderStyle.None; + // ReSharper restore RedundantBaseQualifier + + // We need to create and cache a device context compatible with the display + _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); + ToolStripRenderer = ToolStripManager.Renderer; + UseCompatibleTextRendering = false; + } + + /// + /// Releases all resources used by the Control. + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (_screenDC != IntPtr.Zero) + { + PI.DeleteDC(_screenDC); + } + } + + #endregion + + #region Public - private readonly PaletteRedirect? _paletteRedirect; - private readonly PaletteInputControlTripleRedirect _stateCommon; - private readonly PaletteInputControlTripleStates _stateNormal; - private readonly PaletteInputControlTripleStates _stateDisabled; - private readonly PaletteInputControlTripleStates _stateActive; + /// + /// Recreate the window handle. + /// + public void Recreate() => RecreateHandle(); + /// + /// Gets access to the contained view draw panel instance. + /// + public ViewDrawPanel ViewDrawPanel { get; } + /// + /// Gets and sets if the mouse is currently over the combo box. + /// + public bool MouseOver + { + get => _mouseOver; + set + { + // Only interested in changes + if (_mouseOver != value) + { + _mouseOver = value; + + // Generate appropriate change event + if (_mouseOver) + { + OnTrackMouseEnter(EventArgs.Empty); + } + else + { + OnTrackMouseLeave(EventArgs.Empty); + } + } + } + } + #endregion + + #region Protected + /// Raises the event. + /// An that contains the event data. + protected override void OnSystemColorsChanged(EventArgs e) + { + // DO nothing, It's Krypton Colours that are in use ! + } + + /// + /// Raises the Layout event. + /// + /// A LayoutEventArgs containing the event data. + protected override void OnLayout(LayoutEventArgs levent) + { + if (!IsHandleCreated || !Visible) + { + return; + } + base.OnLayout(levent); + + // Ask the panel to layout given our available size + using var context = + new ViewLayoutContext(_viewManager, this, _kryptonPropertyGrid, _kryptonPropertyGrid.Renderer); + ViewDrawPanel.Layout(context); + } + + /// + /// Process Windows-based messages. + /// + /// A Windows-based message. + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case PI.WM_.ERASEBKGND: + // Do not draw the background here, always do it in the paint + // instead to prevent flicker because of a two stage drawing process + break; + + case PI.WM_.PRINTCLIENT: + case PI.WM_.PAINT: + WmPaint(ref m); + break; + + case PI.WM_.VSCROLL: + case PI.WM_.HSCROLL: + case PI.WM_.MOUSEWHEEL: + Invalidate(); + base.WndProc(ref m); + break; + + case PI.WM_.MOUSELEAVE: + if (MouseOver) + { + MouseOver = false; + _kryptonPropertyGrid.PerformNeedPaint(true); + Invalidate(); + } + base.WndProc(ref m); + break; + + case PI.WM_.MOUSEMOVE: + if (!MouseOver) + { + MouseOver = true; + _kryptonPropertyGrid.PerformNeedPaint(true); + Invalidate(); + } + base.WndProc(ref m); + break; + + default: + base.WndProc(ref m); + break; + } + } + + #endregion + + #region Private + + /// + /// Raises the TrackMouseEnter event. + /// + /// An EventArgs containing the event data. + private void OnTrackMouseEnter(EventArgs e) => TrackMouseEnter?.Invoke(this, e); + + /// + /// Raises the TrackMouseLeave event. + /// + /// An EventArgs containing the event data. + private void OnTrackMouseLeave(EventArgs e) => TrackMouseLeave?.Invoke(this, e); + + private void WmPaint(ref Message m) + { + var ps = new PI.PAINTSTRUCT(); + + // Do we need to BeginPaint or just take the given HDC? + IntPtr hdc = m.WParam == IntPtr.Zero ? PI.BeginPaint(Handle, ref ps) : m.WParam; + + // Create bitmap that all drawing occurs onto, then we can blit it later to remove flicker + Rectangle realRect = CommonHelper.RealClientRectangle(Handle); + + // No point drawing when one of the dimensions is zero + if (realRect is { Width: > 0, Height: > 0 }) + { + IntPtr hBitmap = PI.CreateCompatibleBitmap(hdc, realRect.Width, realRect.Height); + + // If we managed to get a compatible bitmap + if (hBitmap != IntPtr.Zero) + { + try + { + // Must use the screen device context for the bitmap when drawing into the + // bitmap otherwise the Opacity and RightToLeftLayout will not work correctly. + PI.SelectObject(_screenDC, hBitmap); + + // Easier to draw using a graphics instance than a DC! + using (Graphics g = Graphics.FromHdc(_screenDC)) + { + // Ask the view element to layout in given space, needs this before a render call + using (var context = new ViewLayoutContext(this, _kryptonPropertyGrid.Renderer)) + { + context.DisplayRectangle = realRect; + ViewDrawPanel.Layout(context); + } + + using (var context = new RenderContext(this, _kryptonPropertyGrid, g, realRect, + _kryptonPropertyGrid.Renderer)) + { + ViewDrawPanel.Render(context); + } + + // We can only control the background color by using the built in property and not + // by overriding the drawing directly, therefore we can only provide a single color. + Color color1 = ViewDrawPanel.GetPalette().GetBackColor1(ViewDrawPanel.State); + if (color1 != BackColor) + { + BackColor = color1; + } + + // Replace given DC with the screen DC for base window proc drawing + IntPtr beforeDC = m.WParam; + m.WParam = _screenDC; + DefWndProc(ref m); + m.WParam = beforeDC; + } + + // Now blit from the bitmap from the screen to the real dc + PI.BitBlt(hdc, 0, 0, realRect.Width, realRect.Height, _screenDC, 0, 0, PI.SRCCOPY); + } + finally + { + // Delete the temporary bitmap + PI.DeleteObject(hBitmap); + } + } + } + + // Do we need to match the original BeginPaint? + if (m.WParam == IntPtr.Zero) + { + PI.EndPaint(Handle, ref ps); + } + } + #endregion + } + + #endregion + + #region Instance Fields + + private readonly ViewDrawDocker _drawDockerOuter; + private readonly ViewLayoutFill _layoutFill; + private readonly InternalPropertyGrid _propertyGrid; + private bool? _fixedActive; + private readonly IntPtr _screenDC; + private bool _mouseOver; + private bool _alwaysActive; + private bool _forcedLayout; #endregion + #region Events + + // TODO: + + #endregion + + #region Constructor + + /// Initializes a new instance of the class. public KryptonPropertyGrid() { - SetStyle(ControlStyles.UserPaint - | ControlStyles.OptimizedDoubleBuffer - | ControlStyles.SupportsTransparentBackColor, - true); + // Contains another control and needs marking as such for validation to work + SetStyle(ControlStyles.ContainerControl, true); + // Cannot select this control, only the child tree view and does not generate a + SetStyle(ControlStyles.Selectable | ControlStyles.StandardClick, false); - UpdateStyles(); + // Default fields + base.Padding = new Padding(1); - // Add Palette Handler - if (_palette != null) + // Create the palette provider + StateCommon = new PaletteInputControlTripleRedirect(Redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.HeaderCalendar, PaletteContentStyle.LabelNormalPanel, null); + StateDisabled = new PaletteInputControlTripleStates(StateCommon, NeedPaintDelegate); + StateNormal = new PaletteInputControlTripleStates(StateCommon, NeedPaintDelegate); + StateActive = new PaletteInputControlTripleStates(StateCommon, NeedPaintDelegate); + + // Create the internal list box used for containing content + _propertyGrid = new InternalPropertyGrid(this); + _propertyGrid.Click += OnPropertyGridClick; // SKC: make sure that the default click is also routed. + _propertyGrid.GotFocus += OnPropertyGridGotFocus; + _propertyGrid.LostFocus += OnPropertyGridLostFocus; + + _layoutFill = new ViewLayoutFill(_propertyGrid) { - _palette.PalettePaint += OnPalettePaint; - } + DisplayPadding = new Padding(1) + }; + + // Create inner view for placing inside the drawing docker + var drawDockerInner = new ViewLayoutDocker + { + { _layoutFill, ViewDockStyle.Fill } + }; - KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; + // Create view for the control border and background + _drawDockerOuter = new ViewDrawDocker(StateNormal.Back, StateNormal.Border) + { + { drawDockerInner, ViewDockStyle.Fill } + }; - _palette = KryptonManager.CurrentGlobalPalette; + // Create the view manager instance + ViewManager = new ViewManager(this, _drawDockerOuter); - _paletteRedirect = new PaletteRedirect(_palette); - // Create the palette provider - _stateCommon = new PaletteInputControlTripleRedirect(_paletteRedirect, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.HeaderCalendar, PaletteContentStyle.LabelNormalPanel, null); - _stateDisabled = new PaletteInputControlTripleStates(_stateCommon, null); - _stateNormal = new PaletteInputControlTripleStates(_stateCommon, null); - _stateActive = new PaletteInputControlTripleStates(_stateCommon, null); + // We need to create and cache a device context compatible with the display + _screenDC = PI.CreateCompatibleDC(IntPtr.Zero); - InitColours(); + // Add tree view to the controls collection + ((KryptonReadOnlyControls)Controls).AddInternal(_propertyGrid); + } + private void OnPropertyGridClick(object? sender, EventArgs e) => OnClick(e); + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (_screenDC != IntPtr.Zero) + { + PI.DeleteDC(_screenDC); + } } #endregion #region Public + /// + /// Gets access to the contained TreeView instance. + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [EditorBrowsable(EditorBrowsableState.Always)] + [Browsable(false)] + public PropertyGrid PropertyGrid => _propertyGrid; + + /// + /// Gets access to the contained input control. + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [EditorBrowsable(EditorBrowsableState.Always)] + [Browsable(false)] + public Control ContainedControl => _propertyGrid; + + /// + /// Gets access to the common appearance entries that other states can override. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining common appearance that other states can override.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteInputControlTripleRedirect StateCommon { get; } + private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; + + /// + /// Gets access to the disabled appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining disabled appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteInputControlTripleStates StateDisabled { get; } + private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; + + /// + /// Gets access to the normal appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining normal appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteInputControlTripleStates StateNormal { get; } + private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; + + /// + /// Gets access to the active appearance entries. + /// + [Category(@"Visuals")] + [Description(@"Overrides for defining active appearance.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteInputControlTripleStates StateActive { get; } + private bool ShouldSerializeStateActive() => !StateActive.IsDefault; + + + /// + /// Gets and sets Determines if the control is always active or only when the mouse is over the control or has focus. + /// + [Category(@"Visuals")] + [Description( + @"Determines if the control is always active or only when the mouse is over the control or has focus.")] + [DefaultValue(false)] + public bool AlwaysActive + { + get => _alwaysActive; + set + { + if (_alwaysActive != value) + { + _alwaysActive = value; + Invalidate(); + } + } + } + + /// + /// Sets the fixed state of the control. + /// + /// Should the control be fixed as active. + public void SetFixedState(bool active) => _fixedActive = active; + + /// + /// Gets a value indicating if the input control is active. + /// + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public bool IsActive => _fixedActive ?? DesignMode || AlwaysActive || ContainsFocus || _mouseOver; + + /// + /// Sets input focus to the control. + /// + /// true if the input focus request was successful; otherwise, false. + public new bool Focus() => _propertyGrid.Focus(); + + /// + /// Activates the control. + /// + public new void Select() => _propertyGrid.Select(); + #endregion + + #region Expose Useful parts + + /// + /// Returns true if the commands pane will be shown for objects + /// that expose verbs. + /// + [Category("Appearance")] + [DefaultValue(true)] + [Description("the commands pane will be shown for objects")] + public bool CommandsVisibleIfAvailable + { + get => _propertyGrid.CommandsVisibleIfAvailable; + set => _propertyGrid.CommandsVisibleIfAvailable = value; + } + + /// + /// Sets or gets the visibility state of the help pane. + /// + [Category("Appearance")] + [DefaultValue(true)] + [Localizable(true)] + [Description("visibility state of the help pane")] + public virtual bool HelpVisible + { + get => _propertyGrid.HelpVisible; + set => _propertyGrid.HelpVisible = value; + } - /// Refreshes the colours. - public void RefreshColours() => InitColours(); + /// + /// Gets or sets a value that indicates whether OS-specific visual style glyphs are used for the expansion + /// nodes in the grid area. + /// + [Category("Appearance")] + [Description("indicates whether OS-specific visual style glyphs are used for the expansion nodes in the grid area")] + [DefaultValue(true)] + public bool CanShowVisualStyleGlyphs + { + get => _propertyGrid.CanShowVisualStyleGlyphs; + set => _propertyGrid.CanShowVisualStyleGlyphs = value; + } + /// + /// Sets or gets the current property sort type, which can be + /// PropertySort.Categorized or PropertySort.Alphabetical. + /// + [Category("Appearance")] + [DefaultValue(PropertySort.CategorizedAlphabetical)] + [Description("current property sort type")] + public PropertySort PropertySort + { + get => _propertyGrid.PropertySort; + set => _propertyGrid.PropertySort = value; + } + + internal class SelectedObjectConverter : ReferenceConverter + { + public SelectedObjectConverter() + : base(typeof(IComponent)) + { + } + } + + /// + /// Sets a single object into the grid to be browsed. If multiple objects are being browsed, this property + /// will return the first one in the list. If no objects are selected, null is returned. + /// + [Category("Behavior")] + [DefaultValue(null)] + [Description("")] + [TypeConverter(typeof(SelectedObjectConverter))] + public object? SelectedObject + { + get => _propertyGrid.SelectedObject; + set => _propertyGrid.SelectedObject = value; + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [AllowNull] + public object[] SelectedObjects + { + get => _propertyGrid.SelectedObjects; + set => _propertyGrid.SelectedObjects = value; + } + + /// Gets or sets the background color for the control. + /// A that represents the background color of the control. The default is the value of the property. + [Category("Appearance")] + [Description("ControlBackColorDescr")] + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Color BackColor + { + get => base.BackColor; + set => base.BackColor = value; + } + + /// Gets or sets the font of the text displayed by the control. + /// The to apply to the text displayed by the control. The default is the value of the property. + [Category("Appearance")] + [AmbientValue(null)] + [Description("ControlFontDescr")] + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [AllowNull] + public override Font Font + { + get => base.Font; + set => base.Font = value; + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public PropertyTab SelectedTab => _propertyGrid.SelectedTab; + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [DisallowNull] + public GridItem? SelectedGridItem => _propertyGrid.SelectedGridItem; + + [Category("Appearance")] + [Description("PropertyGridLargeButtonsDesc")] + [DefaultValue(false)] + public bool LargeButtons + { + get => _propertyGrid.LargeButtons; + set => _propertyGrid.LargeButtons = value; + } + + /// + /// Sets or gets the visibility state of the toolStrip. + /// + [Category("Appearance")] + [DefaultValue(true)] + [Description("the visibility state of the toolStrip")] + public virtual bool ToolbarVisible + { + get => _propertyGrid.ToolbarVisible; + set => _propertyGrid.ToolbarVisible = value; + } + + /// Collapses all the nodes in the PropertyGrid + public void CollapseAllGridItems() => _propertyGrid.CollapseAllGridItems(); + + /// Expands all the categories in the . + public void ExpandAllGridItems() => _propertyGrid.ExpandAllGridItems(); + + /// + /// Refreshes the tabs of the specified . + /// + /// + /// Either or . + /// + /// + /// + /// The method first deletes the property tabs of the specified + /// scope, it then requires the objects and documents to rebuild the tabs. + /// + /// + public void RefreshTabs(PropertyTabScope tabScope) => _propertyGrid.RefreshTabs(tabScope); + + /// Resets the selected property to its default value. + public void ResetSelectedProperty() => _propertyGrid.ResetSelectedProperty(); #endregion #region Krypton - // Krypton Palette Events - /// Called when [global palette changed]. - /// The sender. - /// The instance containing the event data. - private void OnGlobalPaletteChanged(object sender, EventArgs e) + + /// Initialises the colours. + private void UpdateStateAndPalettes() { - if (_palette != null) + if (!IsDisposed) { - _palette.PalettePaint -= OnPalettePaint; + // Attempt to stop Flickering + //PI.SendMessage(_propertyGrid.Handle, PI.WM_.SETREDRAW, IntPtr.Zero, IntPtr.Zero); + + var colorTable = KryptonManager.CurrentGlobalPalette.ColorTable; + _propertyGrid.LineColor = colorTable.ToolStripGradientMiddle; + + _propertyGrid.CategoryForeColor = KryptonManager.CurrentGlobalPalette.ToString().Contains("DarkMode") + ? colorTable.MenuStripText + : colorTable.ToolStripDropDownBackground; + + var gridState = GetTripleState(); + _propertyGrid.ViewDrawPanel.SetPalettes(gridState.PaletteBack); + _drawDockerOuter.SetPalettes(gridState.PaletteBack, gridState.PaletteBorder!); + _drawDockerOuter.Enabled = Enabled; + // Find the new state of the main view element + PaletteState pState = Enabled + ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) + : PaletteState.Disabled; + _propertyGrid.ViewDrawPanel.ElementState = pState; + _drawDockerOuter.ElementState = pState; + + var normalFont = gridState.PaletteContent?.GetContentShortTextFont(PaletteState.ContextNormal); + var disabledFont = gridState.PaletteContent?.GetContentShortTextFont(PaletteState.Disabled); + + _propertyGrid.Font = (Enabled ? normalFont : disabledFont)!; + _propertyGrid.BackColor = + gridState.PaletteBack.GetBackColor1(Enabled ? PaletteState.Normal : PaletteState.Disabled); + + var controlsCollection = _propertyGrid.Controls; + foreach (Control control in controlsCollection) + { + PaletteState state; + IPaletteTriple triple; + if (control.Focused) + { + state = PaletteState.FocusOverride; + triple = StateActive; + control.Font = StateActive.PaletteContent?.GetContentShortTextFont(PaletteState.FocusOverride)!; + } + else if (control.Enabled) + { + state = PaletteState.ContextNormal; + triple = StateNormal; + // Note: tobitege commented out to avoid unrecoverable exception in System.Drawing, when toggling theme back and forth + control.Font = normalFont!; + } + else + { + state = PaletteState.Disabled; + triple = StateDisabled; + control.Font = disabledFont!; + } + + control.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(state); + control.BackColor = triple.PaletteBack.GetBackColor1(state); + } + + // Original code caused several themes to have white-on-white text. + // This has been tested as working against all schemes and fixes all previously + // observed white-on-white/low-contrast colors! + // Needed to be moved below the loop! + _propertyGrid.HelpForeColor = ContrastColor(_propertyGrid.HelpBackColor); + _propertyGrid.ViewForeColor = ContrastColor(_propertyGrid.ViewBackColor); + //PI.SendMessage(_propertyGrid.Handle, PI.WM_.SETREDRAW, (IntPtr)PI.BOOL.TRUE, IntPtr.Zero); + Invalidate(); } + } - _palette = KryptonManager.CurrentGlobalPalette; - _paletteRedirect.Target = _palette; + private IPaletteTriple GetTripleState() => Enabled ? (IsActive ? StateActive : StateNormal) : StateDisabled; - if (_palette != null) - { - _palette.PalettePaint += OnPalettePaint; - //repaint with new values - InitColours(); + private static Color ContrastColor(Color color) + { + // Counting the perceptive luminance + var a = 1 + - (((0.299 * color.R) + + ((0.587 * color.G) + (0.114 * color.B))) + / 255); + var d = a < 0.5 ? 0 : 255; + + // dark colours - white font and vice versa + return Color.FromArgb(d, d, d); + } + + #endregion + + #region private + /// + /// Process Windows-based messages. + /// + /// A Windows-based message. + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case PI.WM_.ERASEBKGND: + // Do not draw the background here, always do it in the paint + // instead to prevent flicker because of a two stage drawing process + break; + //case PI.WM_.PRINTCLIENT: + //case PI.WM_.PAINT: + // WmPaint(ref m); + // break; + case PI.WM_.VSCROLL: + case PI.WM_.HSCROLL: + case PI.WM_.MOUSEWHEEL: + Invalidate(); + base.WndProc(ref m); + break; + //case PI.WM_.MOUSEMOVE:// TODO: On Mouse Enter ?? + // if (!_mouseOver) + // { + // _mouseOver = true; + // Invalidate(); + // } + // base.WndProc(ref m); + // break; + // We need to snoop the need to show a context menu + case PI.WM_.CONTEXTMENU: + // Only interested in overriding the behaviour when we have a krypton context menu... + if (KryptonContextMenu != null) + { + // Extract the screen mouse position (if might not actually be provided) + var mousePt = new Point(PI.LOWORD(m.LParam), PI.HIWORD(m.LParam)); + + // If keyboard activated, the menu position is centered + if (((int)(long)m.LParam) == -1) + { + mousePt = new Point(Width / 2, Height / 2); + } + else + { + mousePt = PointToClient(mousePt); + + // Mouse point up and left 1 pixel so that the mouse overlaps the top left corner + // of the showing context menu just like it happens for a ContextMenuStrip. + mousePt.X -= 1; + mousePt.Y -= 1; + } + + // If the mouse position is within our client area + if (ClientRectangle.Contains(mousePt)) + { + // Show the context menu + KryptonContextMenu.Show(this, PointToScreen(mousePt)); + } + } + + break; + default: + base.WndProc(ref m); + break; } + } - Invalidate(); + /// + /// Raises the TabStop event. + /// + /// An EventArgs that contains the event data. + protected override void OnTabStopChanged(EventArgs e) + { + _propertyGrid.TabStop = TabStop; + base.OnTabStopChanged(e); } - // Krypton Palette Events - /// Called when [palette paint]. - /// The sender. - /// The instance containing the event data. - private void OnPalettePaint(object sender, PaletteLayoutEventArgs e) => Invalidate(); + /// + /// Raises the CausesValidationChanged event. + /// + /// An EventArgs that contains the event data. + protected override void OnCausesValidationChanged(EventArgs e) + { + _propertyGrid.CausesValidation = CausesValidation; + base.OnCausesValidationChanged(e); + } - /// Initialises the colours. - private void InitColours() + /// + /// Raises the HandleCreated event. + /// + /// An EventArgs containing the event data. + protected override void OnHandleCreated(EventArgs e) + { + // Let base class do standard stuff + base.OnHandleCreated(e); + + // Force the font to be set into the text box child control + PerformNeedPaint(false); + + // We need a layout to occur before any painting + InvokeLayout(); + } + + + /// + /// Raises the MouseDown event. + /// + /// A MouseEventArgs that contains the event data. + protected override void OnMouseDown(MouseEventArgs e) { - ToolStripRenderer = ToolStripManager.Renderer; + _mouseOver = false; - HelpBackColor = _palette.ColorTable.MenuStripGradientBegin; + PerformNeedPaint(true); - HelpForeColor = _palette.ColorTable.ToolStripText; + _propertyGrid.Invalidate(); - LineColor = _palette.ColorTable.ToolStripGradientMiddle; + base.OnMouseDown(e); + } - CategoryForeColor = _palette.ColorTable.ToolStripDropDownBackground; + /// + /// Gets the default size of the control. + /// + protected override Size DefaultSize => new Size(120, 96); - var normalFont = _stateNormal.PaletteContent.GetContentShortTextFont(PaletteState.ContextNormal); - var disabledFont = _stateDisabled.PaletteContent.GetContentShortTextFont(PaletteState.Disabled); + /// > + protected override void CreateHandle() + { + base.CreateHandle(); - Font = Enabled ? normalFont : disabledFont; - BackColor = _stateNormal.PaletteBack.GetBackColor1(Enabled? PaletteState.Normal : PaletteState.Disabled); + PI.SetWindowTheme(Handle, @"DarkMode_Explorer", null); + } - ControlCollection controlsCollection = Controls; - foreach (Control control in controlsCollection) + /// + /// Force the layout logic to size and position the controls. + /// + protected void ForceControlLayout() + { + if (!IsHandleCreated) { - IPaletteTriple triple; - PaletteState state; - if (control.Focused) - { - state = PaletteState.FocusOverride; - triple = _stateActive; - control.Font = _stateActive.PaletteContent.GetContentShortTextFont(PaletteState.FocusOverride); - } - else if (control.Enabled) - { - state = PaletteState.ContextNormal; - triple = _stateNormal; - control.Font = normalFont; - } - else - { - state = PaletteState.Disabled; - triple = _stateDisabled; - control.Font = disabledFont; - } + _forcedLayout = true; + OnLayout(new LayoutEventArgs(null, null)); + _forcedLayout = false; + } + } + + /// + /// + /// Processes a notification from palette storage of a paint and optional layout required. + /// + /// Source of notification. + /// An NeedLayoutEventArgs containing event data. + protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) + { + if (IsHandleCreated && !e.NeedLayout) + { + _propertyGrid.Invalidate(); + } + else + { + ForceControlLayout(); + } + + // Update palette to reflect latest state + UpdateStateAndPalettes(); + base.OnNeedPaint(sender, e); + } - control.ForeColor = triple.PaletteContent.GetContentShortTextColor1(state); - control.BackColor = triple.PaletteBack.GetBackColor1(state); + /// + /// Raises the Layout event. + /// + /// An EventArgs that contains the event data. + protected override void OnLayout(LayoutEventArgs levent) + { + base.OnLayout(levent); + + // Only use layout logic if control is fully initialized or if being forced + // to allow a relayout or if in design mode. + if (IsHandleCreated || _forcedLayout || (DesignMode)) + { + Rectangle fillRect = _layoutFill.FillRect; + _propertyGrid.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); + } + } + + /// + /// Raises the MouseEnter event. + /// + /// An EventArgs that contains the event data. + protected override void OnMouseEnter(EventArgs e) + { + _mouseOver = true; + PerformNeedPaint(true); + _propertyGrid.Invalidate(); + base.OnMouseEnter(e); + } + + /// + /// Raises the MouseLeave event. + /// + /// An EventArgs that contains the event data. + protected override void OnMouseLeave(EventArgs e) + { + _mouseOver = false; + PerformNeedPaint(true); + _propertyGrid.Invalidate(); + base.OnMouseLeave(e); + } + + /// + protected override void OnNotifyMessage(Message m) + { + if (m.Msg != 0x14) + { + base.OnNotifyMessage(m); } + } - Invalidate(); + private void OnPropertyGridGotFocus(object? sender, EventArgs e) + { + UpdateStateAndPalettes(); + _propertyGrid.Invalidate(); + PerformNeedPaint(true); + OnGotFocus(e); + } + private void OnPropertyGridLostFocus(object? sender, EventArgs e) + { + UpdateStateAndPalettes(); + _propertyGrid.Invalidate(); + PerformNeedPaint(true); + OnLostFocus(e); } + /// + protected override void OnEnabledChanged(EventArgs e) + { + UpdateStateAndPalettes(); + PerformNeedPaint(true); + base.OnEnabledChanged(e); + } + + /// + /// Creates a new instance of the control collection for the KryptonTreeView. + /// + /// A new instance of Control.ControlCollection assigned to the control. + [EditorBrowsable(EditorBrowsableState.Advanced)] + protected override ControlCollection CreateControlsInstance() => new KryptonReadOnlyControls(this); + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRadioButton.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRadioButton.cs index 8216cbd78..33d466ba0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRadioButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -636,14 +636,14 @@ protected override bool EvalTransparentPaint() => #endregion #region Implementation - private void OnRadioButtonTextChanged(object sender, EventArgs e) => OnTextChanged(EventArgs.Empty); + private void OnRadioButtonTextChanged(object? sender, EventArgs e) => OnTextChanged(EventArgs.Empty); private void AutoUpdateOthers() { // Only uncheck others if we are checked and in auto check if (AutoCheck && Checked) { - Control parent = Parent; + Control? parent = Parent; if (parent != null) { // Search all sibling controls @@ -666,7 +666,7 @@ private void AutoUpdateOthers() } } - private void OnControllerClick(object sender, EventArgs e) => OnClick(e); + private void OnControllerClick(object? sender, EventArgs e) => OnClick(e); private void UpdateForOrientation() { diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRichTextBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRichTextBox.cs index 5a0413d19..168b0578f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRichTextBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonRichTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -303,7 +303,7 @@ public RichTextBoxButtonSpecCollection(KryptonRichTextBox owner) #region Instance Fields private VisualPopupToolTip? _visualPopupToolTip; - private readonly ButtonSpecManagerLayout _buttonManager; + private readonly ButtonSpecManagerLayout? _buttonManager; private readonly ViewLayoutDocker _drawDockerInner; private readonly ViewDrawDocker _drawDockerOuter; private readonly ViewLayoutFill _layoutFill; @@ -316,8 +316,6 @@ public RichTextBoxButtonSpecCollection(KryptonRichTextBox owner) private bool _alwaysActive; private bool _trackingMouseEnter; private bool _firstPaint; - private float _cornerRoundingRadius; - #endregion #region Events @@ -510,10 +508,10 @@ public KryptonRichTextBox() // Create button specification collection manager _buttonManager = new ButtonSpecManagerLayout(this, Redirector, ButtonSpecs, null, - new[] { _drawDockerInner }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, - new[] { PaletteMetricPadding.HeaderButtonPaddingInputControl }, + [_drawDockerInner], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetInputControl], + [PaletteMetricPadding.HeaderButtonPaddingInputControl], CreateToolStripRenderer, NeedPaintDelegate); @@ -529,15 +527,13 @@ public KryptonRichTextBox() // Update the back/fore/font from the palette settings UpdateStateAndPalettes(); _richTextBox.BackColor = StateActive.PaletteBack.GetBackColor1(PaletteState.Tracking); - _richTextBox.ForeColor = StateActive.PaletteContent.GetContentShortTextColor1(PaletteState.Tracking); + _richTextBox.ForeColor = StateActive.PaletteContent!.GetContentShortTextColor1(PaletteState.Tracking); // Only set the font if the rich text box has been created if (_richTextBox.Handle != IntPtr.Zero) { - _richTextBox.Font = StateActive.PaletteContent.GetContentShortTextFont(PaletteState.Tracking); + _richTextBox.Font = StateActive.PaletteContent.GetContentShortTextFont(PaletteState.Tracking)!; } - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; } /// @@ -552,7 +548,7 @@ protected override void Dispose(bool disposing) OnCancelToolTip(this, EventArgs.Empty); // Remember to pull down the manager instance - _buttonManager.Destruct(); + _buttonManager?.Destruct(); } base.Dispose(disposing); @@ -560,16 +556,6 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals"), DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE), Description(@"Defines the corner roundness on the current window (-1 is the default look).")] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - set => SetCornerRoundingRadius(value); - } - [Category(@"Visuals")] [Description(@"Set a watermark/prompt message for the user.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] @@ -600,7 +586,7 @@ public float CornerRoundingRadius [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)] - public RichTextBox? RichTextBox => _richTextBox; + public RichTextBox RichTextBox => _richTextBox; /// /// Gets access to the contained input control. @@ -661,7 +647,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -762,14 +748,14 @@ public RichTextBoxLanguageOptions LanguageOption /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string RedoActionName => _richTextBox.RedoActionName; + public string? RedoActionName => _richTextBox.RedoActionName; /// /// Gets and sets the name of the action to be undone. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public string UndoActionName => _richTextBox.UndoActionName; + public string? UndoActionName => _richTextBox.UndoActionName; /// /// Gets and sets if keyboard shortcuts are enabled. @@ -791,7 +777,7 @@ public bool RichTextShortcutsEnabled [RefreshProperties(RefreshProperties.All)] public string Rtf { - get => _richTextBox.Rtf; + get => _richTextBox.Rtf is null ? string.Empty : _richTextBox.Rtf; set { @@ -921,7 +907,9 @@ public Color SelectionColor [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Font SelectionFont { - get => _richTextBox.SelectionFont; + // Tested that: the System.WWindows.Forms.RichTextBox returns RichtTextBox.Font when no text has been selected. + // Null forgiving operator removes the warning. + get => _richTextBox.SelectionFont!; set { @@ -1057,11 +1045,11 @@ public int[] SelectionTabs [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager.UseMnemonic; + get => _buttonManager!.UseMnemonic; set { - if (_buttonManager.UseMnemonic != value) + if (_buttonManager!.UseMnemonic != value) { _buttonManager.UseMnemonic = value; PerformNeedPaint(true); @@ -1385,32 +1373,32 @@ public InputControlStyle InputControlStyle /// Appends text to the current text of a rich text box. /// /// The text to append to the current contents of the text box. - public void AppendText(string text) => _richTextBox.AppendText(text); + public void AppendText(string text) => _richTextBox?.AppendText(text); /// /// Clears all text from the text box control. /// - public void Clear() => _richTextBox.Clear(); + public void Clear() => _richTextBox?.Clear(); /// /// Clears information about the most recent operation from the undo buffer of the rich text box. /// - public void ClearUndo() => _richTextBox.ClearUndo(); + public void ClearUndo() => _richTextBox?.ClearUndo(); /// /// Copies the current selection in the text box to the Clipboard. /// - public void Copy() => _richTextBox.Copy(); + public void Copy() => _richTextBox?.Copy(); /// /// Moves the current selection in the text box to the Clipboard. /// - public void Cut() => _richTextBox.Cut(); + public void Cut() => _richTextBox?.Cut(); /// /// Specifies that the value of the SelectionLength property is zero so that no characters are selected in the control. /// - public void DeselectAll() => _richTextBox.DeselectAll(); + public void DeselectAll() => _richTextBox?.DeselectAll(); /// /// Determines whether you can paste information from the Clipboard in the specified data format. @@ -1541,60 +1529,60 @@ public InputControlStyle InputControlStyle /// /// Replaces the current selection in the text box with the contents of the Clipboard. /// - public void Paste() => _richTextBox.Paste(); + public void Paste() => _richTextBox?.Paste(); /// /// Undoes the last edit operation in the text box. /// - public void Undo() => _richTextBox.Undo(); + public void Undo() => _richTextBox?.Undo(); /// /// Pastes the contents of the Clipboard in the specified Clipboard format. /// /// The Clipboard format in which the data should be obtained from the Clipboard. - public void Paste(DataFormats.Format clipFormat) => _richTextBox.Paste(clipFormat); + public void Paste(DataFormats.Format clipFormat) => _richTextBox?.Paste(clipFormat); /// /// Reapplies the last operation that was undone in the control. /// - public void Redo() => _richTextBox.Redo(); + public void Redo() => _richTextBox?.Redo(); /// /// Saves the contents of the RichTextBox to a rich text format (RTF) file. /// /// The name and location of the file to save. - public void SaveFile(string path) => _richTextBox.SaveFile(path); + public void SaveFile(string path) => _richTextBox?.SaveFile(path); /// /// Saves the contents of a RichTextBox control to an open data stream. /// /// The data stream that contains the file to save to. /// One of the RichTextBoxStreamType values. - public void SaveFile(Stream data, RichTextBoxStreamType fileType) => _richTextBox.SaveFile(data, fileType); + public void SaveFile(Stream data, RichTextBoxStreamType fileType) => _richTextBox?.SaveFile(data, fileType); /// /// Saves the contents of the KryptonRichTextBox to a specific type of file. /// /// The name and location of the file to save. /// One of the RichTextBoxStreamType values. - public void SaveFile(string path, RichTextBoxStreamType fileType) => _richTextBox.SaveFile(path, fileType); + public void SaveFile(string path, RichTextBoxStreamType fileType) => _richTextBox?.SaveFile(path, fileType); /// /// Scrolls the contents of the control to the current caret position. /// - public void ScrollToCaret() => _richTextBox.ScrollToCaret(); + public void ScrollToCaret() => _richTextBox?.ScrollToCaret(); /// /// Selects a range of text in the control. /// /// The position of the first character in the current text selection within the text box. /// The number of characters to select. - public void Select(int start, int length) => _richTextBox.Select(start, length); + public void Select(int start, int length) => _richTextBox?.Select(start, length); /// /// Selects all text in the control. /// - public void SelectAll() => _richTextBox.SelectAll(); + public void SelectAll() => _richTextBox?.SelectAll(); /// /// Sets the fixed state of the control. @@ -1727,9 +1715,9 @@ public bool DesignerGetHitTest(Point pt) /// Mouse location. [EditorBrowsable(EditorBrowsableState.Never)] [Browsable(false)] - public Component DesignerComponentFromPoint(Point pt) => + public Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision /// @@ -1868,7 +1856,7 @@ protected override void OnEnabledChanged(EventArgs e) _drawDockerOuter.Enabled = Enabled; // Update state to reflect change in enabled state - _buttonManager.RefreshButtons(); + _buttonManager?.RefreshButtons(); PerformNeedPaint(true); @@ -1942,11 +1930,11 @@ protected override void OnLayout(LayoutEventArgs levent) if (!IsDisposed && !Disposing) { // Update with latest content padding for placing around the contained text box control - Padding contentPadding = GetTripleState().PaletteContent.GetContentPadding(_drawDockerOuter.State); + Padding contentPadding = GetTripleState().PaletteContent!.GetContentPadding(_drawDockerOuter.State); _layoutFill.DisplayPadding = contentPadding; } - // Let base class calulcate fill rectangle + // Let base class calculate fill rectangle base.OnLayout(levent); if (!IsDisposed && !Disposing) @@ -1956,7 +1944,7 @@ protected override void OnLayout(LayoutEventArgs levent) if (_forcedLayout || (DesignMode && (_richTextBox != null))) { Rectangle fillRect = _layoutFill.FillRect; - _richTextBox.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); + _richTextBox?.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); } } } @@ -1969,7 +1957,7 @@ protected override void OnMouseEnter(EventArgs e) { _mouseOver = true; PerformNeedPaint(true); - _richTextBox.Invalidate(); + _richTextBox?.Invalidate(); base.OnMouseEnter(e); } @@ -1981,7 +1969,7 @@ protected override void OnMouseLeave(EventArgs e) { _mouseOver = false; PerformNeedPaint(true); - _richTextBox.Invalidate(); + _richTextBox?.Invalidate(); base.OnMouseLeave(e); } @@ -1992,7 +1980,7 @@ protected override void OnMouseLeave(EventArgs e) protected override void OnGotFocus(EventArgs e) { base.OnGotFocus(e); - _richTextBox.Focus(); + _richTextBox?.Focus(); } /// @@ -2009,7 +1997,7 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) { if (!e.NeedLayout) { - _richTextBox.Invalidate(); + _richTextBox?.Invalidate(); } else { @@ -2024,22 +2012,22 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) PaletteState state = _drawDockerOuter.State; Color backColor = triple.PaletteBack.GetBackColor1(state); - if (_richTextBox.BackColor != backColor) + if (_richTextBox!.BackColor != backColor) { _richTextBox.BackColor = backColor; } - Color foreColor = triple.PaletteContent.GetContentShortTextColor1(state); + Color foreColor = triple.PaletteContent!.GetContentShortTextColor1(state); if (_richTextBox.ForeColor != foreColor) { _richTextBox.ForeColor = foreColor; } // Only set the font if the rich text box has been created - Font font = triple.PaletteContent.GetContentShortTextFont(state); + Font? font = triple.PaletteContent.GetContentShortTextFont(state); if ((_richTextBox.Handle != IntPtr.Zero) && !_richTextBox.Font.Equals(font)) { - _richTextBox.Font = font; + _richTextBox.Font = font!; } } @@ -2050,7 +2038,7 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) /// Raises the Paint event. /// /// A PaintEventArgs containing the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { if (_firstPaint) { @@ -2109,20 +2097,20 @@ private void UpdateStateAndPalettes() { // Get the correct palette settings to use IPaletteTriple tripleState = GetTripleState(); - _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder); + _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder!); // Update enabled state _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDockerOuter.ElementState = state; } private IPaletteTriple GetTripleState() => Enabled ? (IsActive ? StateActive : StateNormal) : StateDisabled; - private void OnRichTextBoxMouseChange(object sender, EventArgs e) + private void OnRichTextBoxMouseChange(object? sender, EventArgs e) { // Change in tracking state? if (_richTextBox.MouseOver != _trackingMouseEnter) @@ -2143,66 +2131,66 @@ private void OnRichTextBoxMouseChange(object sender, EventArgs e) } } - private void OnRichTextBoxAcceptsTabChanged(object sender, EventArgs e) => OnAcceptsTabChanged(e); + private void OnRichTextBoxAcceptsTabChanged(object? sender, EventArgs e) => OnAcceptsTabChanged(e); - private void OnRichTextBoxTextChanged(object sender, EventArgs e) + private void OnRichTextBoxTextChanged(object? sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(CueHint.CueHintText) && TextLength <= 1) { // Needed to prevent character turds being left behind // Oh, and to get rid of the initial cuetext drawing ;-) - _richTextBox.Invalidate(); + _richTextBox?.Invalidate(); } OnTextChanged(e); } - private void OnRichTextBoxHideSelectionChanged(object sender, EventArgs e) => OnHideSelectionChanged(e); + private void OnRichTextBoxHideSelectionChanged(object? sender, EventArgs e) => OnHideSelectionChanged(e); - private void OnRichTextBoxModifiedChanged(object sender, EventArgs e) => OnModifiedChanged(e); + private void OnRichTextBoxModifiedChanged(object? sender, EventArgs e) => OnModifiedChanged(e); - private void OnRichTextBoxMultilineChanged(object sender, EventArgs e) => OnMultilineChanged(e); + private void OnRichTextBoxMultilineChanged(object? sender, EventArgs e) => OnMultilineChanged(e); - private void OnRichTextBoxReadOnlyChanged(object sender, EventArgs e) => OnReadOnlyChanged(e); + private void OnRichTextBoxReadOnlyChanged(object? sender, EventArgs e) => OnReadOnlyChanged(e); - private void OnRichTextBoxGotFocus(object sender, EventArgs e) + private void OnRichTextBoxGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); OnGotFocus(e); } - private void OnRichTextBoxLostFocus(object sender, EventArgs e) + private void OnRichTextBoxLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); OnLostFocus(e); } - private void OnRichTextBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnRichTextBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnRichTextBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnRichTextBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnRichTextBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnRichTextBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnRichTextBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnRichTextBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnRichTextBoxVScroll(object sender, EventArgs e) => OnVScroll(e); + private void OnRichTextBoxVScroll(object? sender, EventArgs e) => OnVScroll(e); - private void OnRichTextBoxHScroll(object sender, EventArgs e) => OnHScroll(e); + private void OnRichTextBoxHScroll(object? sender, EventArgs e) => OnHScroll(e); - private void OnRichTextBoxSelectionChanged(object sender, EventArgs e) => OnSelectionChanged(e); + private void OnRichTextBoxSelectionChanged(object? sender, EventArgs e) => OnSelectionChanged(e); - private void OnRichTextBoxProtected(object sender, EventArgs e) => OnProtected(e); + private void OnRichTextBoxProtected(object? sender, EventArgs e) => OnProtected(e); - private void OnRichTextBoxLinkClicked(object sender, LinkClickedEventArgs e) => OnLinkClicked(e); + private void OnRichTextBoxLinkClicked(object? sender, LinkClickedEventArgs e) => OnLinkClicked(e); - private void OnRichTextBoxValidated(object sender, EventArgs e) => OnValidated(e); + private void OnRichTextBoxValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnRichTextBoxValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnRichTextBoxValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed && !Disposing) { @@ -2222,7 +2210,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) var shadow = true; // Find the button spec associated with the tooltip request - ButtonSpec? buttonSpec = _buttonManager.ButtonSpecFromView(e.Target); + ButtonSpec? buttonSpec = _buttonManager?.ButtonSpecFromView(e.Target); // If the tooltip is for a button spec if (buttonSpec != null) @@ -2269,27 +2257,19 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSaveFileDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSaveFileDialog.cs index 4cb49b1a2..7ec398618 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSaveFileDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSaveFileDialog.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -25,7 +25,7 @@ public class KryptonSaveFileDialog : FileSaveDialogWrapper, IDisposable /// protected override DialogResult ShowActualDialog(IWin32Window? owner) => _internalSaveFileDialog.ShowDialog(owner); -#if NET7_0 || NET8_0 +#if NET7_0 || NET8_0_OR_GREATER /// /// Gets or sets a value indicating whether the dialog box verifies if the creation of the specified file will be successful. /// If this flag is not set, the calling application must handle errors, such as denial of access, discovered when the item is created. @@ -104,7 +104,7 @@ public override bool CheckPathExists set => _internalSaveFileDialog.CheckPathExists = value; } -#if NET60_OR_GREATER +#if NET6_0_OR_GREATER /// public override Guid? ClientGuid { diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonScrollBar.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonScrollBar.cs index fb915c90c..66b16e29f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonScrollBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonScrollBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -56,7 +56,7 @@ public class KryptonScrollBar : Control private ScrollBarArrowButtonState _topButtonState = ScrollBarArrowButtonState.UpNormal; private ScrollBarArrowButtonState _bottomButtonState = ScrollBarArrowButtonState.DownNormal; private int _minimum; - private int _maximum = 100; + private int _maximum; private int _smallChange = 1; private int _largeChange = 10; private int _value; @@ -78,6 +78,14 @@ public class KryptonScrollBar : Control private Color _borderColor = Color.FromArgb(93, 140, 201); private Color _disabledBorderColor = Color.Gray; + private PaletteBase? _palette; + + private readonly PaletteRedirect? _paletteRedirect; + private readonly PaletteInputControlTripleRedirect _stateCommon; + private readonly PaletteInputControlTripleStates _stateNormal; + private readonly PaletteInputControlTripleStates _stateDisabled; + private readonly PaletteInputControlTripleStates _stateActive; + #region Context Menu Items private ContextMenuStrip _contextMenu; @@ -97,6 +105,24 @@ public class KryptonScrollBar : Control #endregion + #region Public + + /// Gets or sets the width of the scroll bar. + /// The width of the scroll bar. + public int ScrollBarWidth + { + get => Width; + set => Width = value; + } + + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [AllowNull] + public override string Text { get; set; } + + #endregion + #region Identity /// @@ -119,13 +145,30 @@ public KryptonScrollBar() // sets the scrollbar up SetUpScrollBar(); + if (_palette != null) + { + _palette.PalettePaint += OnPalettePaint; + } + + KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; + + _palette = KryptonManager.CurrentGlobalPalette; + + _paletteRedirect = new PaletteRedirect(_palette); + + // Create the palette provider + _stateCommon = new PaletteInputControlTripleRedirect(_paletteRedirect, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.HeaderCalendar, PaletteContentStyle.LabelNormalPanel, null); + _stateDisabled = new PaletteInputControlTripleStates(_stateCommon, null); + _stateNormal = new PaletteInputControlTripleStates(_stateCommon, null); + _stateActive = new PaletteInputControlTripleStates(_stateCommon, null); + // timer for clicking and holding the mouse button // over/below the thumb and on the arrow buttons _progressTimer.Interval = 20; _progressTimer.Tick += ProgressTimerTick; // no image margin in context menu - _contextMenu.ShowImageMargin = false; + _contextMenu!.ShowImageMargin = false; ContextMenuStrip = _contextMenu; _maximum = 100; @@ -461,7 +504,7 @@ public void EndUpdate() /// The that contains the event data. protected virtual void OnScroll(ScrollEventArgs e) => // if event handler is attached - raise scroll event - Scroll.Invoke(this, e); + Scroll?.Invoke(this, e); /// /// Paints the background of the control. @@ -479,7 +522,7 @@ protected override void OnPaintBackground(PaintEventArgs e) protected override void OnPaint(PaintEventArgs e) { // sets the smoothing mode to none - e.Graphics.SmoothingMode = SmoothingMode.None; + using var gh = new GraphicsHint(e.Graphics, PaletteGraphicsHint.None); // save client rectangle Rectangle rect = ClientRectangle; @@ -500,23 +543,23 @@ protected override void OnPaint(PaintEventArgs e) rect.Height -= 2; } - ScrollBarKryptonRenderer.InitColours(); + KryptonScrollBarRenderer.InitColors(); // draws the background - ScrollBarKryptonRenderer.DrawBackground( + KryptonScrollBarRenderer.DrawBackground( e.Graphics, ClientRectangle, _orientation); // draws the track - ScrollBarKryptonRenderer.DrawTrack( + KryptonScrollBarRenderer.DrawTrack( e.Graphics, rect, ScrollBarState.Normal, _orientation); // draw thumb and grip - ScrollBarKryptonRenderer.DrawThumb( + KryptonScrollBarRenderer.DrawThumb( e.Graphics, _thumbRectangle, _thumbState, @@ -524,21 +567,21 @@ protected override void OnPaint(PaintEventArgs e) if (Enabled) { - ScrollBarKryptonRenderer.DrawThumbGrip( + KryptonScrollBarRenderer.DrawThumbGrip( e.Graphics, _thumbRectangle, _orientation); } // draw arrows - ScrollBarKryptonRenderer.DrawArrowButton( + KryptonScrollBarRenderer.DrawArrowButton( e.Graphics, _topArrowRectangle, _topButtonState, true, _orientation); - ScrollBarKryptonRenderer.DrawArrowButton( + KryptonScrollBarRenderer.DrawArrowButton( e.Graphics, _bottomArrowRectangle, _bottomButtonState, @@ -561,7 +604,7 @@ protected override void OnPaint(PaintEventArgs e) _thumbRectangle.X - _thumbTopLimit; } - ScrollBarKryptonRenderer.DrawTrack( + KryptonScrollBarRenderer.DrawTrack( e.Graphics, _clickedBarRectangle, ScrollBarState.Pressed, @@ -582,7 +625,7 @@ protected override void OnPaint(PaintEventArgs e) _thumbBottomLimitBottom - _clickedBarRectangle.X + 1; } - ScrollBarKryptonRenderer.DrawTrack( + KryptonScrollBarRenderer.DrawTrack( e.Graphics, _clickedBarRectangle, ScrollBarState.Pressed, @@ -590,7 +633,7 @@ protected override void OnPaint(PaintEventArgs e) } // draw border - using var pen = new Pen(Enabled ? ScrollBarKryptonRenderer.borderColours[0] : _disabledBorderColor); + using var pen = new Pen(Enabled ? KryptonScrollBarRenderer.BorderColors[0] : _disabledBorderColor); e.Graphics.DrawRectangle(pen, 0, 0, Width - 1, Height - 1); } @@ -860,7 +903,7 @@ protected override void OnMouseMove(MouseEventArgs e) } } - /// + /*/// /// Performs the work of setting the specified bounds of this control. /// /// The new x value of the control. @@ -899,7 +942,7 @@ protected override void SetBoundsCore(int x, int y, int width, int height, Bound { SetUpScrollBar(); } - } + }*/ /// /// Raises the event. @@ -1125,7 +1168,7 @@ private void SetUpScrollBar() /// /// The sender. /// An object that contains the event data. - private void ProgressTimerTick(object sender, EventArgs e) => ProgressThumb(true); + private void ProgressTimerTick(object? sender, EventArgs e) => ProgressThumb(true); /// /// Resets the scroll status of the scrollbar. @@ -1384,24 +1427,48 @@ private void ChangeContextMenuItems() { _tsmiTop.Text = nameof(Top); _tsmiBottom.Text = nameof(Bottom); - _tsmiLargeDown.Text = KryptonLanguageManager.ScrollBarStrings.PageDown; - _tsmiLargeUp.Text = KryptonLanguageManager.ScrollBarStrings.PageUp; - _tsmiSmallDown.Text = KryptonLanguageManager.ScrollBarStrings.ScrollDown; - _tsmiSmallUp.Text = KryptonLanguageManager.ScrollBarStrings.ScrollUp; - _tsmiScrollHere.Text = KryptonLanguageManager.ScrollBarStrings.ScrollHere; + _tsmiLargeDown.Text = KryptonManager.Strings.ScrollBarStrings.PageDown; + _tsmiLargeUp.Text = KryptonManager.Strings.ScrollBarStrings.PageUp; + _tsmiSmallDown.Text = KryptonManager.Strings.ScrollBarStrings.ScrollDown; + _tsmiSmallUp.Text = KryptonManager.Strings.ScrollBarStrings.ScrollUp; + _tsmiScrollHere.Text = KryptonManager.Strings.ScrollBarStrings.ScrollHere; } else { _tsmiTop.Text = nameof(Left); _tsmiBottom.Text = nameof(Right); - _tsmiLargeDown.Text = KryptonLanguageManager.ScrollBarStrings.PageLeft; - _tsmiLargeUp.Text = KryptonLanguageManager.ScrollBarStrings.PageRight; - _tsmiSmallDown.Text = KryptonLanguageManager.ScrollBarStrings.ScrollRight; - _tsmiSmallUp.Text = KryptonLanguageManager.ScrollBarStrings.ScrollLeft; - _tsmiScrollHere.Text = KryptonLanguageManager.ScrollBarStrings.ScrollHere; + _tsmiLargeDown.Text = KryptonManager.Strings.ScrollBarStrings.PageLeft; + _tsmiLargeUp.Text = KryptonManager.Strings.ScrollBarStrings.PageRight; + _tsmiSmallDown.Text = KryptonManager.Strings.ScrollBarStrings.ScrollRight; + _tsmiSmallUp.Text = KryptonManager.Strings.ScrollBarStrings.ScrollLeft; + _tsmiScrollHere.Text = KryptonManager.Strings.ScrollBarStrings.ScrollHere; + } + } + + private void OnGlobalPaletteChanged(object? sender, EventArgs e) + { + if (_palette != null) + { + _palette.PalettePaint -= OnPalettePaint; + } + + _palette = KryptonManager.CurrentGlobalPalette; + + _paletteRedirect!.Target = _palette; + + if (_palette != null) + { + _palette.PalettePaint += OnPalettePaint; + + // Repaint + KryptonScrollBarRenderer.InitColors(); } + + Invalidate(); } + private void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) => Invalidate(); + #endregion #region Context Menu Methods @@ -1447,7 +1514,7 @@ private void InitializeComponent() _tsmiScrollHere.DisplayStyle = ToolStripItemDisplayStyle.Text; _tsmiScrollHere.Name = nameof(_tsmiScrollHere); _tsmiScrollHere.Size = new Size(150, 22); - _tsmiScrollHere.Text = KryptonLanguageManager.ScrollBarStrings.ScrollHere; + _tsmiScrollHere.Text = KryptonManager.Strings.ScrollBarStrings.ScrollHere; _tsmiScrollHere.Click += ScrollHereClick; // // toolStripSeparator1 @@ -1481,7 +1548,7 @@ private void InitializeComponent() _tsmiLargeUp.DisplayStyle = ToolStripItemDisplayStyle.Text; _tsmiLargeUp.Name = nameof(_tsmiLargeUp); _tsmiLargeUp.Size = new Size(150, 22); - _tsmiLargeUp.Text = KryptonLanguageManager.ScrollBarStrings.PageUp; + _tsmiLargeUp.Text = KryptonManager.Strings.ScrollBarStrings.PageUp; _tsmiLargeUp.Click += LargeUpClick; // // tsmiLargeDown @@ -1489,7 +1556,7 @@ private void InitializeComponent() _tsmiLargeDown.DisplayStyle = ToolStripItemDisplayStyle.Text; _tsmiLargeDown.Name = nameof(_tsmiLargeDown); _tsmiLargeDown.Size = new Size(150, 22); - _tsmiLargeDown.Text = KryptonLanguageManager.ScrollBarStrings.PageDown; + _tsmiLargeDown.Text = KryptonManager.Strings.ScrollBarStrings.PageDown; _tsmiLargeDown.Click += LargeDownClick; // // toolStripSeparator3 @@ -1502,7 +1569,7 @@ private void InitializeComponent() _tsmiSmallUp.DisplayStyle = ToolStripItemDisplayStyle.Text; _tsmiSmallUp.Name = nameof(_tsmiSmallUp); _tsmiSmallUp.Size = new Size(150, 22); - _tsmiSmallUp.Text = KryptonLanguageManager.ScrollBarStrings.ScrollUp; + _tsmiSmallUp.Text = KryptonManager.Strings.ScrollBarStrings.ScrollUp; _tsmiSmallUp.Click += SmallUpClick; // // tsmiSmallDown @@ -1510,7 +1577,7 @@ private void InitializeComponent() _tsmiSmallDown.DisplayStyle = ToolStripItemDisplayStyle.Text; _tsmiSmallDown.Name = nameof(_tsmiSmallDown); _tsmiSmallDown.Size = new Size(150, 22); - _tsmiSmallDown.Text = KryptonLanguageManager.ScrollBarStrings.ScrollDown; + _tsmiSmallDown.Text = KryptonManager.Strings.ScrollBarStrings.ScrollDown; _tsmiSmallDown.Click += SmallDownClick; _contextMenu.ResumeLayout(false); ResumeLayout(false); @@ -1521,7 +1588,7 @@ private void InitializeComponent() /// /// The sender. /// The event arguments. - private void ScrollHereClick(object sender, EventArgs e) + private void ScrollHereClick(object? sender, EventArgs e) { int thumbSize, thumbPos, arrowSize, size; @@ -1568,42 +1635,42 @@ private void ScrollHereClick(object sender, EventArgs e) /// /// The sender. /// The event arguments. - private void TopClick(object sender, EventArgs e) => Value = _minimum; + private void TopClick(object? sender, EventArgs e) => Value = _minimum; /// /// Context menu handler. /// /// The sender. /// The event arguments. - private void BottomClick(object sender, EventArgs e) => Value = _maximum; + private void BottomClick(object? sender, EventArgs e) => Value = _maximum; /// /// Context menu handler. /// /// The sender. /// The event arguments. - private void LargeUpClick(object sender, EventArgs e) => Value = GetValue(false, true); + private void LargeUpClick(object? sender, EventArgs e) => Value = GetValue(false, true); /// /// Context menu handler. /// /// The sender. /// The event arguments. - private void LargeDownClick(object sender, EventArgs e) => Value = GetValue(false, false); + private void LargeDownClick(object? sender, EventArgs e) => Value = GetValue(false, false); /// /// Context menu handler. /// /// The sender. /// The event arguments. - private void SmallUpClick(object sender, EventArgs e) => Value = GetValue(true, true); + private void SmallUpClick(object? sender, EventArgs e) => Value = GetValue(true, true); /// /// Context menu handler. /// /// The sender. /// The event arguments. - private void SmallDownClick(object sender, EventArgs e) => Value = GetValue(true, false); + private void SmallDownClick(object? sender, EventArgs e) => Value = GetValue(true, false); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSeparator.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSeparator.cs index 8039c9c7f..96cc271e6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSeparator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -132,8 +132,8 @@ public KryptonSeparator() StatePressed = new PaletteSeparatorPadding(StateCommon.Separator, StateCommon.Separator, NeedPaintDelegate); // Our view contains just a simple canvas that covers entire client area and a separator view - _drawSeparator = new ViewDrawSeparator(StateDisabled.Separator, StateNormal.Separator, StateTracking, StatePressed, - StateDisabled.Separator, StateNormal.Separator, StateTracking, StatePressed, + _drawSeparator = new ViewDrawSeparator(StateDisabled.Separator!, StateNormal.Separator!, StateTracking, StatePressed, + StateDisabled.Separator!, StateNormal.Separator!, StateTracking, StatePressed, PaletteMetricPadding.SeparatorPaddingLowProfile, Orientation.Vertical); // Get the separator to fill the entire client area @@ -228,7 +228,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -279,7 +279,7 @@ public SeparatorStyle SeparatorStyle if (_style != value) { _style = value; - StateCommon.Separator.SetStyles(_style); + StateCommon?.Separator.SetStyles(_style); _drawSeparator.MetricPadding = CommonHelper.SeparatorStyleToMetricPadding(_style); PerformNeedPaint(true); } @@ -296,7 +296,7 @@ public SeparatorStyle SeparatorStyle [Category(@"Visuals")] [Description(@"Overrides for defining common separator appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSplitContainerRedirect? StateCommon { get; } + public PaletteSplitContainerRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -328,7 +328,7 @@ public SeparatorStyle SeparatorStyle [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteSeparatorPadding? StateTracking { get; } - private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; + private bool ShouldSerializeStateTracking() => !StateTracking!.IsDefault; /// /// Gets access to the pressed separator appearance entries. @@ -338,7 +338,7 @@ public SeparatorStyle SeparatorStyle [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteSeparatorPadding? StatePressed { get; } - private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; + private bool ShouldSerializeStatePressed() => !StatePressed!.IsDefault; /// /// Gets and sets the thickness of the splitter. @@ -713,7 +713,7 @@ private void UpdateSize() } } - private void OnRedrawTick(object sender, EventArgs e) + private void OnRedrawTick(object? sender, EventArgs e) { _redrawTimer?.Stop(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitContainer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitContainer.cs index 23b01b9dd..733d3d043 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitContainer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitContainer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -119,8 +119,8 @@ public KryptonSplitContainer() StatePressed = new PaletteSeparatorPadding(StateCommon.Separator, StateCommon.Separator, NeedPaintDelegate); // Our view contains just a simple canvas that covers entire client area and a separator view - _drawSeparator = new ViewDrawSeparator(StateDisabled.Separator, StateNormal.Separator, StateTracking, StatePressed, - StateDisabled.Separator, StateNormal.Separator, StateTracking, StatePressed, + _drawSeparator = new ViewDrawSeparator(StateDisabled.Separator!, StateNormal.Separator!, StateTracking, StatePressed, + StateDisabled.Separator!, StateNormal.Separator!, StateTracking, StatePressed, PaletteMetricPadding.SeparatorPaddingLowProfile, Orientation.Vertical); _drawPanel = new ViewDrawPanel(StateNormal.Back) @@ -248,7 +248,7 @@ public SeparatorStyle SeparatorStyle [Category(@"Visuals")] [Description(@"Overrides for defining common split container appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSplitContainerRedirect? StateCommon { get; } + public PaletteSplitContainerRedirect StateCommon { get; } private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; @@ -280,7 +280,7 @@ public SeparatorStyle SeparatorStyle [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteSeparatorPadding? StateTracking { get; } - private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; + private bool ShouldSerializeStateTracking() => !StateTracking!.IsDefault; /// /// Gets access to the pressed separator appearance entries. @@ -290,7 +290,7 @@ public SeparatorStyle SeparatorStyle [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteSeparatorPadding? StatePressed { get; } - private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; + private bool ShouldSerializeStatePressed() => !StatePressed!.IsDefault; /// /// Gets access to the first krypton splitter panel. @@ -1137,7 +1137,7 @@ protected override void OnResize(EventArgs e) /// Raises the Paint event. /// /// A PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { // Do we have a manager to use for painting? if (ViewManager != null) @@ -1404,7 +1404,7 @@ protected override void OnLayout(LayoutEventArgs levent) #region Implementation private bool Collapsed => Panel1.Collapsed || Panel2.Collapsed; - private void SetStyles(SeparatorStyle separatorStyle) => StateCommon.Separator.SetStyles(separatorStyle); + private void SetStyles(SeparatorStyle separatorStyle) => StateCommon?.Separator.SetStyles(separatorStyle); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitterPanel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitterPanel.cs index f7a6ac001..125571c27 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitterPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonSplitterPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -80,9 +80,9 @@ public sealed class KryptonSplitterPanel : KryptonPanel /// Reference to owning container. public KryptonSplitterPanel([DisallowNull] KryptonSplitContainer container) { - Debug.Assert(container != null); + Debug.Assert(container is not null); - Owner = container; + Owner = container ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(container))); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStatusStrip.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStatusStrip.cs index a2f308119..f0bd8bc12 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStatusStrip.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStatusStrip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStringCollectionEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStringCollectionEditor.cs index b76b9c72a..380bda288 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStringCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonStringCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -30,7 +30,7 @@ public static string[] Show(string[] inputStrings, bool useRichTextBox = true, string windowText = @"String Collection Editor") => InternalShow(null, inputStrings, useRichTextBox, headerText, windowText); - public static string[] Show(IWin32Window owner, string[] inputStrings, bool useRichTextBox = true, + public static string[] Show(IWin32Window? owner, string[] inputStrings, bool useRichTextBox = true, string? headerText = @"Enter the strings in the collection (one per line):", string windowText = @"String Collection Editor") => InternalShow(owner, inputStrings, useRichTextBox, headerText, windowText); @@ -40,7 +40,7 @@ public static string[] Show(bool useRichTextBox = true, string windowText = @"String Collection Editor") => InternalShow(null, null, useRichTextBox, headerText, windowText); - public static string[] Show(IWin32Window owner, bool useRichTextBox = true, + public static string[] Show(IWin32Window? owner, bool useRichTextBox = true, string? headerText = @"Enter the strings in the collection (one per line):", string windowText = @"String Collection Editor") => InternalShow(owner, null, useRichTextBox, headerText, windowText); @@ -76,8 +76,8 @@ public static StringCollection ShowDialog(IWin32Window owner, bool useRichTextBo /// The header text. /// The window title. /// A collection of string items. - private static string[] InternalShow(IWin32Window owner, string[] input, bool? useRichTextBox, string? headerText, string windowTitle) - => KryptonMultilineStringEditorForm.InternalShow(owner, input, useRichTextBox, headerText, windowTitle); + private static string[] InternalShow(IWin32Window? owner, string[]? input, bool? useRichTextBox, string? headerText, string windowTitle) + => VisualMultilineStringEditorForm.InternalShow(owner, input!, useRichTextBox, headerText, windowTitle)!; /// Shows the string collection editor. /// The owner. @@ -86,8 +86,8 @@ private static string[] InternalShow(IWin32Window owner, string[] input, bool? u /// The header text. /// The window title. /// A collection of string items. - private static StringCollection InternalShowStringCollection(IWin32Window owner, StringCollection input, bool useRichTextBox, string? headerText, string windowTitle) - => KryptonMultilineStringEditorForm.InternalShowStringCollection(owner, input, useRichTextBox, headerText, windowTitle); + private static StringCollection InternalShowStringCollection(IWin32Window? owner, StringCollection? input, bool useRichTextBox, string? headerText, string windowTitle) + => VisualMultilineStringEditorForm.InternalShowStringCollection(owner, input!, useRichTextBox, headerText, windowTitle)!; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTableLayoutPanel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTableLayoutPanel.cs index 8fbbd8a5a..ff91fdcf4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTableLayoutPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTableLayoutPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -46,7 +46,7 @@ public KryptonTableLayoutPanel() base.BackgroundImageLayout = ImageLayout.None; } - private void State_PropertyChanged(object sender, PropertyChangedEventArgs e) => + private void State_PropertyChanged(object? sender, PropertyChangedEventArgs e) => // Handle explicit settings to the controls BackGroundPanel_Refreshed(); @@ -84,7 +84,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -166,10 +166,10 @@ public PaletteMode PaletteMode [Category(@"Visuals")] [Description(@"Custom palette applied to drawing.")] [DefaultValue(null)] - public PaletteBase? Palette + public PaletteBase Palette { [DebuggerStepThrough] - get => _backGroundPanel.Palette; + get => _backGroundPanel.Palette!; set { _backGroundPanel.Palette = value; @@ -341,7 +341,7 @@ protected override void WndProc(ref Message m) { // Do the move thing first base.WndProc(ref m); - PI.WINDOWPOS structure = (PI.WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(PI.WINDOWPOS)); + PI.WINDOWPOS structure = (PI.WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(PI.WINDOWPOS))!; if (!structure.flags.HasFlag(PI.SWP_.NOZORDER)) { if (_backGroundPanel.Parent != null diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialog.cs index 2e1276ed8..a901246ac 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialog.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,13 +23,13 @@ namespace Krypton.Toolkit public class KryptonTaskDialog : Component, INotifyPropertyChanged { #region Instance Fields - private VisualTaskDialog? _taskDialog; + private VisualTaskDialogForm? _taskDialog; private string _windowTitle; private string _mainInstruction; private string _content; private Image? _customIcon; private KryptonMessageBoxIcon _icon; - private KryptonTaskDialogCommand _defaultRadioButton; + private KryptonTaskDialogCommand? _defaultRadioButton; private TaskDialogButtons _commonButtons; private TaskDialogButtons _defaultButton; private KryptonMessageBoxIcon _footerIcon; @@ -39,6 +39,7 @@ public class KryptonTaskDialog : Component, INotifyPropertyChanged private string _checkboxText; private bool _checkboxState; private bool _allowDialogClose; + private bool _useNativeOSIcons; private string _textExtra; #endregion @@ -65,8 +66,8 @@ public class KryptonTaskDialog : Component, INotifyPropertyChanged /// public KryptonTaskDialog() { - RadioButtons = new KryptonTaskDialogCommandCollection(); - CommandButtons = new KryptonTaskDialogCommandCollection(); + RadioButtons = []; + CommandButtons = []; _commonButtons = TaskDialogButtons.OK; _textExtra = @"Ctrl+C to copy"; } @@ -245,7 +246,7 @@ public TaskDialogButtons CommonButtons [Category(@"Appearance")] [Description(@"Default radio button.")] [DefaultValue(TaskDialogButtons.None)] - public KryptonTaskDialogCommand DefaultRadioButton + public KryptonTaskDialogCommand? DefaultRadioButton { get => _defaultRadioButton; @@ -427,6 +428,26 @@ public bool AllowDialogClose } } + /// Gets or sets a value indicating whether [use native os icons]. + /// true if [use native os icons]; otherwise, false. + [Category(@"Appearance")] + [Description(@"Use the native OS icons.")] + [DefaultValue(true)] + public bool UseNativeOSIcons + { + get => _useNativeOSIcons; + + set + { + if (_useNativeOSIcons != value) + { + _useNativeOSIcons = value; + + OnPropertyChanged(new PropertyChangedEventArgs(nameof(UseNativeOSIcons))); + } + } + } + /// /// Gets and sets user-defined data associated with the object. /// @@ -434,7 +455,7 @@ public bool AllowDialogClose [Description(@"User-defined data associated with the object.")] [TypeConverter(typeof(StringConverter))] [Bindable(true)] - public object Tag { get; set; } + public object? Tag { get; set; } /// /// Allows user to override the default "Ctrl+c to copy" in window caption @@ -465,7 +486,7 @@ public string TextExtra /// Shows the task dialog as a modal dialog box with the currently active window set as its owner. /// /// One of the DialogResult values. - public DialogResult ShowDialog() => ShowDialog(Control.FromHandle(PI.GetActiveWindow())); + public DialogResult ShowDialog() => ShowDialog(Control.FromHandle(PI.GetActiveWindow())!); /// /// Shows the form as a modal dialog box with the specified owner. @@ -478,7 +499,7 @@ public DialogResult ShowDialog(IWin32Window owner) _taskDialog?.Dispose(); // Create visual form to show our defined task properties - _taskDialog = new VisualTaskDialog(this) + _taskDialog = new VisualTaskDialogForm(this) { StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent }; @@ -496,12 +517,14 @@ public DialogResult ShowDialog(IWin32Window owner) /// Extra text. /// Predefined icon. /// Common buttons. + /// Use the OS set of icons. /// One of the DialogResult values. public static DialogResult Show(string windowTitle, string mainInstruction, string content, KryptonMessageBoxIcon icon, - TaskDialogButtons commonButtons) + TaskDialogButtons commonButtons, + bool? useNativeOSIcons) { // Create a temporary task dialog for storing definition whilst showing using var taskDialog = new KryptonTaskDialog(); @@ -511,6 +534,7 @@ public static DialogResult Show(string windowTitle, taskDialog.Content = content; taskDialog.Icon = icon; taskDialog.CommonButtons = commonButtons; + taskDialog.UseNativeOSIcons = useNativeOSIcons ?? true; // Show as a modal dialog return taskDialog.ShowDialog(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialogCommand.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialogCommand.cs index 7df52c8fa..b36a76023 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialogCommand.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTaskDialogCommand.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -59,7 +59,7 @@ public KryptonTaskDialogCommand() _text = string.Empty; _extraText = string.Empty; _image = null; - _imageTransparentColor = Color.Empty; + _imageTransparentColor = GlobalStaticValues.EMPTY_COLOR; _dialogResult = DialogResult.OK; } @@ -204,7 +204,7 @@ public Image? Image [Localizable(true)] [Category(@"Appearance")] [Description(@"Command image transparent color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageTransparentColor { get => _imageTransparentColor; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTextBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTextBox.cs index 0a3443b91..b8609a8f0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTextBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTextBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -188,8 +188,7 @@ protected override void WndProc(ref Message m) // it from the device context. Resulting in blurred text. g.TextRenderingHint = CommonHelper.PaletteTextHintToRenderingHint( - _kryptonTextBox.StateDisabled.PaletteContent!.GetContentShortTextHint( - PaletteState.Disabled)); + _kryptonTextBox.StateDisabled.PaletteContent.GetContentShortTextHint(PaletteState.Disabled)); // Define the string formatting requirements var stringFormat = new StringFormat @@ -238,7 +237,7 @@ protected override void WndProc(ref Message m) using var foreBrush = new SolidBrush(ForeColor); g.DrawString(drawString, _kryptonTextBox.GetTripleState().PaletteContent? - .GetContentShortTextFont(PaletteState.Disabled), foreBrush, + .GetContentShortTextFont(PaletteState.Disabled)!, foreBrush, new RectangleF(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top), stringFormat); @@ -338,8 +337,6 @@ public TextBoxButtonSpecCollection(KryptonTextBox owner) private bool _showEllipsisButton; //private bool _isInAlphaNumericMode; private readonly ButtonSpecAny _editorButton; - private float _cornerRoundingRadius; - #endregion #region Events @@ -439,7 +436,7 @@ public KryptonTextBox() // Contains another control and needs marking as such for validation to work SetStyle(ControlStyles.ContainerControl, true); - // By default we are not multiline and so the height is fixed + // By default, we are not multiline and so the height is fixed SetStyle(ControlStyles.FixedHeight, true); // Cannot select this control, only the child TextBox, and does not generate a click event @@ -457,7 +454,7 @@ public KryptonTextBox() ButtonSpecs = new TextBoxButtonSpecCollection(this); // Create the palette storage - StateCommon = new PaletteInputControlTripleRedirect(Redirector!, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, PaletteContentStyle.InputControlStandalone, NeedPaintDelegate); + StateCommon = new PaletteInputControlTripleRedirect(Redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, PaletteContentStyle.InputControlStandalone, NeedPaintDelegate); StateDisabled = new PaletteInputControlTripleStates(StateCommon, NeedPaintDelegate); StateNormal = new PaletteInputControlTripleStates(StateCommon, NeedPaintDelegate); StateActive = new PaletteInputControlTripleStates(StateCommon, NeedPaintDelegate); @@ -506,10 +503,10 @@ public KryptonTextBox() // Create button specification collection manager _buttonManager = new ButtonSpecManagerLayout(this, Redirector, ButtonSpecs, null, - new[] { _drawDockerInner }, - new IPaletteMetric[] { StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetInputControl }, - new[] { PaletteMetricPadding.HeaderButtonPaddingInputControl }, + [_drawDockerInner], + [StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetInputControl], + [PaletteMetricPadding.HeaderButtonPaddingInputControl], CreateToolStripRenderer, NeedPaintDelegate); @@ -531,8 +528,6 @@ public KryptonTextBox() // Add text box to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(_textBox); - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - //_isInAlphaNumericMode = false; _showEllipsisButton = false; @@ -567,15 +562,6 @@ protected override void Dispose(bool disposing) public bool IsInAlphaNumericMode { get => _isInAlphaNumericMode; set { _isInAlphaNumericMode = value; SetIsInAlphaNumericMode(this); } } */ - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals"), DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE), Description(@"Defines the corner roundness on the current window (-1 is the default look).")] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - set => SetCornerRoundingRadius(value); - } - /// /// Gets access to the common textbox appearance entries that other states can override. /// @@ -715,7 +701,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -829,11 +815,11 @@ public int SelectionStart [DefaultValue(true)] public bool UseMnemonic { - get => _buttonManager.UseMnemonic; + get => _buttonManager!.UseMnemonic; set { - if (_buttonManager.UseMnemonic != value) + if (_buttonManager!.UseMnemonic != value) { _buttonManager.UseMnemonic = value; PerformNeedPaint(true); @@ -1029,7 +1015,7 @@ public bool ShortcutsEnabled } /// - /// Gets or sets a the character to display for password input for single-line edit controls. + /// Gets or sets the character to display for password input for single-line edit controls. /// [Category(@"Behavior")] [Description(@"Indicates the character to display for password input for single-line edit controls.")] @@ -1301,13 +1287,13 @@ public AutoCompleteSource AutoCompleteSource /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public bool IsActive => _fixedActive ?? DesignMode || AlwaysActive || ContainsFocus || _mouseOver || _textBox.MouseOver; + public bool IsActive => (_fixedActive ?? DesignMode || AlwaysActive || ContainsFocus || _mouseOver || _textBox.MouseOver); /// /// Sets input focus to the control. /// /// true if the input focus request was successful; otherwise, false. - public new bool Focus() => TextBox.Focus() == true; + public new bool Focus() => TextBox.Focus(); /// /// Activates the control. @@ -1399,7 +1385,7 @@ public bool DesignerGetHitTest(Point pt) [Browsable(false)] public Component? DesignerComponentFromPoint(Point pt) => // Ignore call as view builder is already destructed - IsDisposed ? null : ViewManager.ComponentFromPoint(pt); + IsDisposed ? null : ViewManager?.ComponentFromPoint(pt); // Ask the current view for a decision /// @@ -1731,13 +1717,13 @@ protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) IPaletteTriple triple = GetTripleState(); PaletteState state = _drawDockerOuter.State; _textBox.BackColor = triple.PaletteBack.GetBackColor1(state); - _textBox.ForeColor = triple.PaletteContent.GetContentShortTextColor1(state); + _textBox.ForeColor = triple.PaletteContent!.GetContentShortTextColor1(state); // Only set the font if the text box has been created - Font font = triple.PaletteContent.GetContentShortTextFont(state); + Font? font = triple.PaletteContent.GetContentShortTextFont(state); if ((_textBox.Handle != IntPtr.Zero) && !_textBox.Font.Equals(font)) { - _textBox.Font = font; + _textBox.Font = font!; } } @@ -1760,7 +1746,7 @@ protected override void OnPaddingChanged(EventArgs e) /// Raises the Paint event. /// /// A PaintEventArgs containing the event data. - protected override void OnPaint(PaintEventArgs e) => base.OnPaint(e); + protected override void OnPaint(PaintEventArgs? e) => base.OnPaint(e); /// /// Raises the TabStop event. @@ -1823,13 +1809,13 @@ private void UpdateStateAndPalettes() { // Get the correct palette settings to use IPaletteTriple tripleState = GetTripleState(); - _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder); + _drawDockerOuter.SetPalettes(tripleState.PaletteBack, tripleState.PaletteBorder!); // Update enabled state _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state = IsActive ? PaletteState.Tracking : PaletteState.Normal; + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _drawDockerOuter.ElementState = state; } @@ -1858,47 +1844,47 @@ private void AdjustHeight(bool ignoreAnchored) } } - private void OnTextBoxAcceptsTabChanged(object sender, EventArgs e) => OnAcceptsTabChanged(e); + private void OnTextBoxAcceptsTabChanged(object? sender, EventArgs e) => OnAcceptsTabChanged(e); - private void OnTextBoxTextChanged(object sender, EventArgs e) => OnTextChanged(e); + private void OnTextBoxTextChanged(object? sender, EventArgs e) => OnTextChanged(e); - private void OnTextBoxTextAlignChanged(object sender, EventArgs e) => OnTextAlignChanged(e); + private void OnTextBoxTextAlignChanged(object? sender, EventArgs e) => OnTextAlignChanged(e); - private void OnTextBoxHideSelectionChanged(object sender, EventArgs e) => OnHideSelectionChanged(e); + private void OnTextBoxHideSelectionChanged(object? sender, EventArgs e) => OnHideSelectionChanged(e); - private void OnTextBoxModifiedChanged(object sender, EventArgs e) => OnModifiedChanged(e); + private void OnTextBoxModifiedChanged(object? sender, EventArgs e) => OnModifiedChanged(e); - private void OnTextBoxMultilineChanged(object sender, EventArgs e) => OnMultilineChanged(e); + private void OnTextBoxMultilineChanged(object? sender, EventArgs e) => OnMultilineChanged(e); - private void OnTextBoxReadOnlyChanged(object sender, EventArgs e) => OnReadOnlyChanged(e); + private void OnTextBoxReadOnlyChanged(object? sender, EventArgs e) => OnReadOnlyChanged(e); - private void OnTextBoxGotFocus(object sender, EventArgs e) + private void OnTextBoxGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); OnGotFocus(e); } - private void OnTextBoxLostFocus(object sender, EventArgs e) + private void OnTextBoxLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); PerformNeedPaint(true); OnLostFocus(e); } - private void OnTextBoxKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnTextBoxKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnTextBoxKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnTextBoxKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnTextBoxKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnTextBoxKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnTextBoxPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnTextBoxPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnTextBoxValidated(object sender, EventArgs e) => OnValidated(e); + private void OnTextBoxValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnTextBoxValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnTextBoxValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed && !Disposing) { @@ -1951,12 +1937,12 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) if (AllowButtonSpecToolTipPriority) { - visualBasePopupToolTip.Dispose(); + visualBasePopupToolTip?.Dispose(); } } // Create the actual tooltip popup object - _visualPopupToolTip = new VisualPopupToolTip(Redirector, + _visualPopupToolTip = new VisualPopupToolTip(Redirector!, sourceContent, Renderer, PaletteBackStyle.ControlToolTip, @@ -1972,19 +1958,19 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } // Remove any currently showing tooltip - private void OnCancelToolTip(object sender, EventArgs e) => _visualPopupToolTip?.Dispose(); + private void OnCancelToolTip(object? sender, EventArgs e) => _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - private void OnTextBoxMouseChange(object sender, EventArgs e) + private void OnTextBoxMouseChange(object? sender, EventArgs e) { // Change in tracking state? if (_textBox.MouseOver != _trackingMouseEnter) @@ -2005,28 +1991,21 @@ private void OnTextBoxMouseChange(object sender, EventArgs e) } } - private void OnEditorButtonClicked(object sender, EventArgs e) => new MultilineStringEditor1(this).ShowEditor(); + private void OnEditorButtonClicked(object? sender, EventArgs e) => new MultilineStringEditor1(this).ShowEditor(); - private void OnMouseDoubleClick(object sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); + private void OnMouseDoubleClick(object? sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); - private void OnDoubleClick(object sender, EventArgs e) => base.OnDoubleClick(e); + private void OnDoubleClick(object? sender, EventArgs e) => base.OnDoubleClick(e); - private void OnTextBoxClick(object sender, EventArgs e) => + private void OnTextBoxClick(object? sender, EventArgs e) => // ReSharper disable RedundantBaseQualifier base.OnClick(e); // ReSharper restore RedundantBaseQualifier - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void SetIsInAlphaNumericMode(KryptonTextBox owner) - { - // TODO: Return to this... - } + //private void SetIsInAlphaNumericMode(KryptonTextBox owner) + //{ + // // TODO: Return to this... + //} private void ToggleEllipsisButtonVisibility(bool visible) { diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeBrowser.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeBrowser.cs index c51d4bd8a..c245769e6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeBrowser.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeBrowser.cs @@ -1,80 +1,39 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - /// Public API to display the . + /// Public API to display the . public class KryptonThemeBrowser { #region Public - public static void Show() => ShowCore(FormStartPosition.CenterScreen, 33, null, null, null); - - /// Shows the theme browser window. - /// The start position. - public static void Show(FormStartPosition startPosition) => ShowCore(startPosition, 33, null, null, null); - - /// Shows the theme browser window. - /// The start position. - /// The window title. - public static void Show(FormStartPosition startPosition, string windowTitle) => ShowCore(startPosition, 33, windowTitle, null, null); - - /// Shows the theme browser window. - /// The start position. - /// The start index. - public static void Show(FormStartPosition startPosition, int startIndex) => ShowCore(startPosition, startIndex, null, null, null); - - /// Shows the theme browser window. - /// The window title. - public static void Show(string windowTitle) => ShowCore(FormStartPosition.CenterScreen, 33, windowTitle, null, null); - - /// Shows the theme browser window. - /// The start index. - /// The window title. - public static void Show(int startIndex, string windowTitle) => ShowCore(FormStartPosition.CenterScreen, startIndex, windowTitle, null, null); - - /// Shows the theme browser window. - /// The window title. - /// if set to true [show import button]. - public static void Show(string windowTitle, bool showImportButton) => ShowCore(FormStartPosition.CenterScreen, 33, windowTitle, showImportButton, null); - - /// Shows the theme browser window. - /// The window title. - /// if set to true [show import button]. - /// if set to true [show silent option]. - public static void Show(string windowTitle, bool showImportButton, bool showSilentOption) => ShowCore(FormStartPosition.CenterScreen, 33, windowTitle, showImportButton, showSilentOption); - - /// Shows theme browser window. - /// if set to true [show import button]. - /// if set to true [show silent option]. - public static void Show(bool showImportButton, bool showSilentOption) => ShowCore(FormStartPosition.CenterScreen, 336, null, showImportButton, showSilentOption); - - /// Shows the theme browser window. - /// The start position. - /// The start index. - /// The window title. - /// if set to true [show import button]. - /// if set to true [show silent option]. - public static void Show(FormStartPosition startPosition, int startIndex, string windowTitle, bool showImportButton, bool showSilentOption) => ShowCore(startPosition, startIndex, windowTitle, showImportButton, showSilentOption); - + public static void Show(KryptonThemeBrowserData themeBrowserData, RightToLeftLayout? rightToLeftLayout = RightToLeftLayout.LeftToRight) => ShowCore(themeBrowserData, rightToLeftLayout); #endregion #region Implementation - private static void ShowCore(FormStartPosition startPosition, - int startIndex, string? windowTitle, - bool? showImportButton, bool? showSilentOption) + private static void ShowCore(KryptonThemeBrowserData themeBrowserData, + RightToLeftLayout? layout) { - //using var ktb = new KryptonThemeBrowserForm(startPosition, startIndex, windowTitle, showImportButton, - // showSilentOption); - - //ktb.ShowDialog(); + if (layout == RightToLeftLayout.LeftToRight) + { + using var ktb = new VisualThemeBrowserForm(themeBrowserData); + + ktb.ShowDialog(); + } + else + { + using var ktbRTL = new VisualThemeBrowserFormRtlAware(themeBrowserData); + + ktbRTL.ShowDialog(); + } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeComboBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeComboBox.cs index f4b7cf62f..19818290a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeComboBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeComboBox.cs @@ -1,11 +1,8 @@ #region BSD License /* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. * */ #endregion @@ -14,144 +11,138 @@ namespace Krypton.Toolkit { /// Allows the user to change themes using a . /// - public class KryptonThemeComboBox : KryptonComboBox + [Designer(typeof(KryptonStubDesigner))] + public class KryptonThemeComboBox : KryptonComboBox, IKryptonThemeSelectorBase { #region Instance Fields - private int _selectedIndex; - - private readonly int _defaultPaletteIndex = (int)PaletteMode.Microsoft365Blue; - - private PaletteMode _defaultPalette; + /// When we change the palette, Krypton Manager will notify us that there was a change. Since we are changing it that notification can be skipped. + private bool _isLocalUpdate = false; + /// Suppress code execution in the SelectedIndexChanged event handler, when a theme change via the KManager has been performed. + private bool _isExternalUpdate = false; + /// Backing var for the DefaultPalette property. + private PaletteMode _defaultPalette = PaletteMode.Global; + /// Local Krypton Manager instance. + private readonly KryptonManager _manager; + /// User defined palette. + private KryptonCustomPaletteBase? _kryptonCustomPalette = null; #endregion - #region Public + #region Identity - /// Gets or sets the default palette mode. - /// The default palette mode. - [Category(@"Visuals")] - [Description(@"The default palette mode.")] - [DefaultValue(PaletteMode.Microsoft365Blue)] - public PaletteMode DefaultPalette + /// Initializes a new instance of the class. + public KryptonThemeComboBox() { - get => _defaultPalette; - - set - { - _defaultPalette = value; + _manager = new KryptonManager(); + DropDownStyle = ComboBoxStyle.DropDownList; - UpdateDefaultPaletteIndex(value); - } - } + Items.Clear(); + Items.AddRange(CommonHelperThemeSelectors.GetThemesArray()); - /// - /// Gets and sets the ThemeSelectedIndex. - /// - [Category(@"Visuals")] - [Description(@"Theme Selected Index. (Default = `Office 365 - Blue`)")] - [DefaultValue((int)PaletteMode.Microsoft365Blue)] - public int ThemeSelectedIndex - { - get => _selectedIndex = _defaultPaletteIndex; + // Sets the intial palette from either global or DefaultPalette property + SelectedIndex = CommonHelperThemeSelectors.GetInitialSelectedIndex(DefaultPalette, _manager, Items); - private set => _selectedIndex = SelectedIndex = value; } + #endregion - private void ResetThemeSelectedIndex() => _selectedIndex = _defaultPaletteIndex; - - private bool ShouldSerializeThemeSelectedIndex() => _selectedIndex != _defaultPaletteIndex; + #region Public - /// - /// Gets and sets the ThemeSelectedIndex. - /// + /// [Category(@"Visuals")] - [Description(@"Custom Theme to use when `Custom` is selected")] + [Description(@"The custom assigned palette mode.")] [DefaultValue(null)] - public KryptonCustomPaletteBase? KryptonCustomPalette { get; set; } - - [EditorBrowsable(EditorBrowsableState.Never)] - public KryptonManager Manager + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public KryptonCustomPaletteBase? KryptonCustomPalette { - get; - - } = new KryptonManager(); - - #endregion + get => _kryptonCustomPalette; + set => _kryptonCustomPalette = value; + } - #region Identity + private void ResetKryptonCustomPalette() => _kryptonCustomPalette = null; + private bool ShouldSerializeKryptonCustomPalette() => _kryptonCustomPalette is not null; - /// Initializes a new instance of the class. - public KryptonThemeComboBox() + /// + [Category(@"Visuals")] + [Description(@"The default palette mode.")] + [DefaultValue(PaletteMode.Global)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public PaletteMode DefaultPalette { - DropDownStyle = ComboBoxStyle.DropDownList; - foreach (var kvp in PaletteModeStrings.SupportedThemesMap) - { - Items.Add(kvp.Key); - } - Text = ThemeManager.ReturnPaletteModeAsString(PaletteMode.Microsoft365Blue); - _selectedIndex = SelectedIndex = _defaultPaletteIndex; + get => _defaultPalette; + set => SelectedIndex = CommonHelperThemeSelectors.DefaultPaletteSetter(ref _defaultPalette, value, Items, SelectedIndex); + } - _defaultPalette = PaletteMode.Microsoft365Blue; + private void ResetDefaultPalette() => DefaultPalette = PaletteMode.Global; + private bool ShouldSerializeDefaultPalette() => _defaultPalette != PaletteMode.Global; - Debug.Assert(_selectedIndex == _defaultPaletteIndex, $@"Microsoft365Blue needs to be at the index position of {_defaultPaletteIndex} for backward compatibility"); - } #endregion #region Implementation - private void UpdateDefaultPaletteIndex(PaletteMode mode) => ThemeSelectedIndex = (int)mode + 1; - - /// Returns the palette mode. - /// - ///
- ///
- public PaletteMode ReturnPaletteMode() => Manager.GlobalPaletteMode; - - // TODO: Refresh the theme names if the values have been altered + /// + /// Routine that will be executed when the control is fully instantiated. + /// + /// EventArgs param. Not used in this implementation. + protected override void OnHandleCreated(EventArgs e) + { + // React to theme changes from outside this control. + KryptonManager.GlobalPaletteChanged += KryptonManagerGlobalPaletteChanged; + base.OnHandleCreated(e); + } + /// + /// This method will run when the KryptonManager.GlobalPaletteChanged event is fired.
+ /// It will synchronize the SelectedIndex with the newly assigned Global Palette. + ///
+ /// Object that intiated the call. + /// Eventargs object data (not used). + private void KryptonManagerGlobalPaletteChanged(object? sender, EventArgs e) + { + SelectedIndex = CommonHelperThemeSelectors.KryptonManagerGlobalPaletteChanged(_isLocalUpdate, ref _isExternalUpdate, SelectedIndex, Items); + } #endregion #region Protected Overrides - /// - protected override void OnCreateControl() - { - base.OnCreateControl(); - SelectedIndex = _selectedIndex; - } - /// protected override void OnSelectedIndexChanged(EventArgs e) { - ThemeManager.ApplyTheme(Text, Manager); - - ThemeSelectedIndex = SelectedIndex; - - base.OnSelectedIndexChanged(e); - if ((ThemeManager.GetThemeManagerMode(Text) == PaletteMode.Custom) - && (KryptonCustomPalette != null) - ) + if ( !CommonHelperThemeSelectors.OnSelectedIndexChanged(ref _isLocalUpdate, _isExternalUpdate, ref _defaultPalette, Text, _manager, _kryptonCustomPalette)) { - Manager.GlobalPalette = KryptonCustomPalette; + //theme change went wrong, make the active theme the selected theme in the list. + SelectedIndex = CommonHelperThemeSelectors.GetPaletteIndex(Items, _manager.GlobalPaletteMode); } + + base.OnSelectedIndexChanged(e); } #endregion #region Removed Designer Visibility + /// - /// Gets and sets the text associated associated with the control. + /// Gets and sets the text associated with the control. /// [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [AllowNull] public override string Text { + //nullable operator removed get => base.Text; set => base.Text = value; } + /// Gets or sets the format specifier characters that indicate how a value is to be Displayed. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new string FormatString + { + get => base.FormatString; + set => base.FormatString = value; + } + /// /// Gets and sets the appearance and functionality of the KryptonComboBox. /// @@ -191,11 +182,33 @@ public override string Text set => base.AutoCompleteCustomSource = value; } + /// Gets or sets the text completion behavior of the combobox. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public new int SelectedIndex { get => base.SelectedIndex; set => base.SelectedIndex = value; } + public new AutoCompleteMode AutoCompleteMode + { + get => base.AutoCompleteMode; + set => base.AutoCompleteMode = value; + } + + /// Gets or sets the autocomplete source, which can be one of the values from AutoCompleteSource enumeration. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new AutoCompleteSource AutoCompleteSource + { + get => base.AutoCompleteSource; + set => base.AutoCompleteSource = value; + } + + /// Gets and sets the selected index. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new int SelectedIndex + { + get => base.SelectedIndex; + set => base.SelectedIndex = value; + } #endregion } - } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeListBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeListBox.cs index dcf5e6f4d..9ff311f1c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeListBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonThemeListBox.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -12,117 +12,154 @@ namespace Krypton.Toolkit { /// Allows the user to change themes using a . /// - public class KryptonThemeListBox : KryptonListBox + [Designer(typeof(KryptonStubDesigner))] + public class KryptonThemeListBox : KryptonListBox, IKryptonThemeSelectorBase { #region Instance Fields - private int _selectedThemeIndex; + /// When we change the palette, Krypton Manager will notify us that there was a change. Since we are changing it that notification can be skipped. + private bool _isLocalUpdate = false; + /// Suppress code execution in the SelectedIndexChanged event handler, when a theme change via the KManager has been performed. + private bool _isExternalUpdate = false; + /// Backing var for the DefaultPalette property. + private PaletteMode _defaultPalette = PaletteMode.Global; + /// Local Krypton Manager instance. + private readonly KryptonManager _manager; + /// User defined palette. + private KryptonCustomPaletteBase? _kryptonCustomPalette = null; #endregion - #region Public + #region Identity - /// - /// Gets and sets the ThemeSelectedIndex. - /// - [Category(@"Visuals")] - [Description(@"Theme Selected Index. (Default = `Office 365 - Blue`)")] - [DefaultValue(33)] - public int ThemeSelectedIndex + /// Initializes a new instance of the class. + public KryptonThemeListBox() { - get => _selectedThemeIndex; + _manager = new KryptonManager(); - set => SelectedIndex = value; + Items.Clear(); + Items.AddRange(CommonHelperThemeSelectors.GetThemesArray()); + + // Sets the intial palette from either global or DefaultPalette property + SelectedIndex = CommonHelperThemeSelectors.GetInitialSelectedIndex(DefaultPalette, _manager, Items); } - private void ResetThemeSelectedIndex() => _selectedThemeIndex = 33; + #endregion - private bool ShouldSerializeThemeSelectedIndex() => _selectedThemeIndex != 33; + #region Public - /// - /// Gets and sets the ThemeSelectedIndex. - /// + /// [Category(@"Visuals")] - [Description(@"Custom Theme to use when `Custom` is selected")] + [Description(@"The custom assigned palette mode.")] [DefaultValue(null)] - public KryptonCustomPaletteBase? KryptonCustomPalette { get; set; } - - [EditorBrowsable(EditorBrowsableState.Never)] - public KryptonManager Manager + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public KryptonCustomPaletteBase? KryptonCustomPalette { - get; - - } = new KryptonManager(); - - #endregion + get => _kryptonCustomPalette; + set => _kryptonCustomPalette = value; + } - #region Identity + private void ResetKryptonCustomPalette() => _kryptonCustomPalette = null; + private bool ShouldSerializeKryptonCustomPalette() => _kryptonCustomPalette is not null; - /// Initializes a new instance of the class. - public KryptonThemeListBox() + /// + [Category(@"Visuals")] + [Description(@"The default palette mode.")] + [DefaultValue(PaletteMode.Global)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] + public PaletteMode DefaultPalette { - foreach (var kvp in PaletteModeStrings.SupportedThemesMap) - { - Items.Add(kvp.Key); - } - Text = ThemeManager.ReturnPaletteModeAsString(PaletteMode.Microsoft365Blue); - _selectedThemeIndex = SelectedIndex; - Debug.Assert(_selectedThemeIndex == 33, "Microsoft365Blue needs to be at the 33rd index for backward compatibility"); + get => _defaultPalette; + set => SelectedIndex = CommonHelperThemeSelectors.DefaultPaletteSetter(ref _defaultPalette, value, Items, SelectedIndex); } - #endregion - - #region Implementation - - /// Returns the palette mode. - public PaletteMode ReturnPaletteMode() => Manager.GlobalPaletteMode; + private void ResetDefaultPalette() => DefaultPalette = PaletteMode.Global; + private bool ShouldSerializeDefaultPalette() => _defaultPalette != PaletteMode.Global; #endregion - #region Protected + #region Implementation - /// - protected override void OnCreateControl() + /// + /// Routine that will be executed when the control is fully instantiated. + /// + /// EventArgs param. Not used in this implementation. + protected override void OnHandleCreated(EventArgs e) { - base.OnCreateControl(); + // React to theme changes from outside this control. + KryptonManager.GlobalPaletteChanged += KryptonManagerGlobalPaletteChanged; + base.OnHandleCreated(e); + } - SelectedIndex = _selectedThemeIndex; + /// + /// This method will run when the KryptonManager.GlobalPaletteChanged event is fired.
+ /// It will synchronize the SelectedIndex with the newly assigned Global Palette. + ///
+ /// Object that intiated the call. + /// Eventargs object data (not used). + private void KryptonManagerGlobalPaletteChanged(object? sender, EventArgs e) + { + SelectedIndex = CommonHelperThemeSelectors.KryptonManagerGlobalPaletteChanged(_isLocalUpdate, ref _isExternalUpdate, SelectedIndex, Items); } + #endregion + + #region Protected Overrides + /// protected override void OnSelectedIndexChanged(EventArgs e) { - ThemeManager.ApplyTheme(GetItemText(SelectedItem), Manager); - - ThemeSelectedIndex = SelectedIndex; - - base.OnSelectedIndexChanged(e); + // The theme listbox needs a check first since SelectedItem is of type: object? + string themeName = SelectedIndex > -1 && SelectedItem is string str && str.Length > 0 + ? str + : string.Empty; - if ((ThemeManager.GetThemeManagerMode(GetItemText(SelectedItem)) == PaletteMode.Custom) && (KryptonCustomPalette != null)) + if (!CommonHelperThemeSelectors.OnSelectedIndexChanged(ref _isLocalUpdate, _isExternalUpdate, ref _defaultPalette, themeName, _manager, _kryptonCustomPalette)) { - Manager.GlobalPalette = KryptonCustomPalette; + //theme change went wrong, make the active theme the selected theme in the list. + SelectedIndex = CommonHelperThemeSelectors.GetPaletteIndex(Items, _manager.GlobalPaletteMode); } + + base.OnSelectedIndexChanged(e); } #endregion #region Removed Designer Visibility - /// Gets and sets the text associated associated with the control. + /// Gets and sets the text associated with the control. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [DisallowNull] + [AllowNull] public override string Text { get => base.Text; set => base.Text = value; } + /// Gets or sets the format specifier characters that indicate how a value is to be Displayed. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new string FormatString + { + get => base.FormatString; + set => base.FormatString = value; + } + /// Gets the items of the KryptonListBox. [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public new ListBox.ObjectCollection Items => base.Items; + /// Gets and sets the selected index. + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new int SelectedIndex + { + get => base.SelectedIndex; + set => base.SelectedIndex = value; + } + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToastNotification.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToastNotification.cs new file mode 100644 index 000000000..57b69f4b0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToastNotification.cs @@ -0,0 +1,85 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +#pragma warning disable VSSpell001 + +namespace Krypton.Toolkit +{ + /// The public interface to the class. + [ToolboxItem(false)] + [DesignerCategory(@"code")] + public static class KryptonToastNotification + { + #region Public + + #region Basic Notification + + /// Shows the basic notification with a boolean return value. + /// The toast notification data. + /// A boolean value, based on the 'Do not show again' option. + public static bool ShowBasicNotificationWithBooleanReturnValue(KryptonBasicToastNotificationData toastNotificationData) + => KryptonToastNotificationController.ShowNotificationWithBooleanDoNotShowAgainReturnValue(toastNotificationData); + + /// Shows the basic notification with a return value. + /// The toast notification data. + /// A value, based on the 'Do not show again' option.b + public static CheckState ShowBasicNotificationWithCheckStateReturnValue(KryptonBasicToastNotificationData toastNotificationData) + => KryptonToastNotificationController.ShowNotificationWithCheckStateDoNotShowAgainReturnValue(toastNotificationData); + + /// Shows the basic notification. + /// The toast notification data. + public static void ShowBasicNotification(KryptonBasicToastNotificationData toastNotificationData) => + KryptonToastNotificationController.ShowBasicToastNotification(toastNotificationData); + + #endregion + + #region Basic Notification with Progress Bar + + /// Shows the basic progress bar notification with a boolean return value. + /// The toast notification data. + /// A boolean value, based on the 'Do not show again' option. + public static bool ShowBasicProgressBarNotificationWithBooleanReturnValue(KryptonBasicToastNotificationData toastNotificationData) => + KryptonToastNotificationController.ShowBasicProgressBarNotificationWithBooleanReturnValue(toastNotificationData); + + /// Shows the basic progress bar notification with a return value. + /// The toast notification data. + /// A value, based on the 'Do not show again' option. + public static CheckState ShowBasicProgressBarNotificationWithCheckStateReturnValue(KryptonBasicToastNotificationData toastNotificationData) => + KryptonToastNotificationController.ShowBasicProgressBarNotificationWithCheckStateReturnValue(toastNotificationData); + + /// Shows the basic progress bar notification. + /// The toast notification data. + public static void ShowBasicProgressBarNotification(KryptonBasicToastNotificationData toastNotificationData) => + KryptonToastNotificationController.ShowBasicProgressBarNotification(toastNotificationData); + + #endregion + + #region Notification with Return Values + + #region Left to Right Reading + + /// Shows the notification with ComboBox. + /// The data. + /// + public static object ShowNotification(KryptonUserInputToastNotificationData data) => + KryptonToastNotificationController.ShowToast(data); + + /// Shows the notification with progress bar. + /// The data. + /// + public static object ShowNotificationWithProgressBar(KryptonUserInputToastNotificationData data) => + KryptonToastNotificationController.ShowToastWithProgressBar(data); + + #endregion + + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToastNotificationManager.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToastNotificationManager.cs new file mode 100644 index 000000000..6dde406f4 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToastNotificationManager.cs @@ -0,0 +1,15 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [ToolboxItem(true)] + [ToolboxBitmap(typeof(KryptonToastNotificationManager), @"ToolboxBitmaps.KryptonInputBox.bmp")] + public class KryptonToastNotificationManager : Component; +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolStrip.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolStrip.cs index 732757976..8672077b1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolStrip.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolStrip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolStripComboBox.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolStripComboBox.cs new file mode 100644 index 000000000..f32e1edf0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolStripComboBox.cs @@ -0,0 +1,86 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [ToolboxBitmap(typeof(KryptonComboBox))] + [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All)] + //[DefaultEvent(nameof(SelectedIndexChanged))] + //[DefaultProperty(nameof(Text))] + public class KryptonToolStripComboBox : ToolStripControlHostFixed + { + #region Instance Fields + + + + #endregion + + #region Host Control + + /// Gets access to the krypton ComboBox control. + /// The krypton ComboBox control. + [RefreshProperties(RefreshProperties.All)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Description(@"Access to the hosted KryptonComboBox.")] + public KryptonComboBox? KryptonComboBoxControl => Control as KryptonComboBox; + + #endregion + + #region Public + + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Color BackColor { get; set; } + + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Color ForeColor { get; set; } + +#if NET8_0_OR_GREATER + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Image? BackgroundImage { get; set; } +#else + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override Image BackgroundImage { get; set; } +#endif + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonToolStripComboBox() : base(new KryptonComboBox()) + { + AutoSize = false; + } + + #endregion + + #region Protected Overrides + + /// + protected override void OnSubscribeControlEvents(Control? control) + { + base.OnSubscribeControlEvents(control); + } + + /// + protected override void OnUnsubscribeControlEvents(Control? control) + { + base.OnUnsubscribeControlEvents(control); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.Designer.cs index 0c59ceabf..c06fb779f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.Designer.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.cs index c680752b8..daab7d298 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonToolkitPoweredByControl.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion @@ -121,7 +121,7 @@ private void klwlblDetails_LinkClicked(object sender, LinkLabelLinkClickedEventA } catch (Exception exception) { - ExceptionHandler.CaptureException(exception); + ExceptionHandler.CaptureException(exception, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTrackBar.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTrackBar.cs index b74b9e852..6535f38c4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTrackBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTrackBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -743,9 +743,9 @@ private void AdjustSize() } } - private void OnDrawValueChanged(object sender, EventArgs e) => OnValueChanged(e); + private void OnDrawValueChanged(object? sender, EventArgs e) => OnValueChanged(e); - private void OnDrawScroll(object sender, EventArgs e) => OnScroll(e); + private void OnDrawScroll(object? sender, EventArgs e) => OnScroll(e); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeNode.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeNode.cs index 267b6a386..833d4f59f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeNode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeNode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,7 +21,7 @@ public class KryptonTreeNode : TreeNode #region Instance Fields private string _longText; private Color _longForeColor; - private Font _longNodeFont; + private Font? _longNodeFont; private bool _isCheckBoxVisible; #endregion @@ -92,7 +92,7 @@ public KryptonTreeNode(string text, int imageIndex, int selectedImageIndex, Tree private void Init() { _longText = string.Empty; - _longForeColor = Color.Empty; + _longForeColor = GlobalStaticValues.EMPTY_COLOR; _longNodeFont = null; _isCheckBoxVisible = true; } @@ -143,7 +143,7 @@ public Color LongForeColor } } - private bool ShouldSerializeLongForeColor() => _longForeColor != Color.Empty; + private bool ShouldSerializeLongForeColor() => _longForeColor != GlobalStaticValues.EMPTY_COLOR; #endregion @@ -153,7 +153,7 @@ public Color LongForeColor ///
[Category(@"Appearance")] [Description(@"Font of the long text")] - public Font LongNodeFont + public Font? LongNodeFont { get => _longNodeFont; @@ -194,7 +194,7 @@ public bool IsCheckBoxVisible // Have to do this as RowBounds is not accessible ! and the check box is on the left, normally ! Rectangle nodeWidth = Rectangle.FromLTRB(0, callOnce.Top, callOnce.Right + callOnce.Left, callOnce.Bottom); - TreeView.Invalidate(nodeWidth); + TreeView!.Invalidate(nodeWidth); TreeView.Update(); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeView.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeView.cs index 0197ae176..8760e8256 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeView.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonTreeView.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -30,7 +30,7 @@ public class KryptonTreeView : VisualControlBase, private class InternalTreeView : TreeView { #region Static Fields - private static MethodInfo _miRI; + private static MethodInfo? _miRI; #endregion #region Instance Fields @@ -132,7 +132,7 @@ public bool MouseOver public void ResetIndent() { // Only grab the required reference once - if (_miRI == null) + if (_miRI is null) { // Use reflection so we can call the TreeView private method _miRI = typeof(TreeView).GetMethod(nameof(ResetIndent), @@ -141,7 +141,7 @@ public void ResetIndent() Array.Empty(), null); } - _miRI.Invoke(this, Array.Empty()); + _miRI!.Invoke(this, Array.Empty()); } #endregion @@ -214,13 +214,13 @@ protected override void WndProc(ref Message m) /// Raises the TrackMouseEnter event. /// /// An EventArgs containing the event data. - protected virtual void OnTrackMouseEnter(EventArgs e) => TrackMouseEnter?.Invoke(this, e); + private void OnTrackMouseEnter(EventArgs e) => TrackMouseEnter?.Invoke(this, e); /// /// Raises the TrackMouseLeave event. /// /// An EventArgs containing the event data. - protected virtual void OnTrackMouseLeave(EventArgs e) => TrackMouseLeave?.Invoke(this, e); + private void OnTrackMouseLeave(EventArgs e) => TrackMouseLeave?.Invoke(this, e); #endregion #region Private @@ -229,7 +229,7 @@ private void WmPaint(ref Message m) var ps = new PI.PAINTSTRUCT(); // Do we need to BeginPaint or just take the given HDC? - var hdc = m.WParam == IntPtr.Zero ? PI.BeginPaint(Handle, ref ps) : m.WParam; + IntPtr hdc = m.WParam == IntPtr.Zero ? PI.BeginPaint(Handle, ref ps) : m.WParam; // Create bitmap that all drawing occurs onto, then we can blit it later to remove flicker Rectangle realRect = CommonHelper.RealClientRectangle(Handle); @@ -237,7 +237,7 @@ private void WmPaint(ref Message m) // No point drawing when one of the dimensions is zero if (realRect is { Width: > 0, Height: > 0 }) { - var hBitmap = PI.CreateCompatibleBitmap(hdc, realRect.Width, realRect.Height); + IntPtr hBitmap = PI.CreateCompatibleBitmap(hdc, realRect.Width, realRect.Height); // If we managed to get a compatible bitmap if (hBitmap != IntPtr.Zero) @@ -273,7 +273,7 @@ private void WmPaint(ref Message m) } // Replace given DC with the screen DC for base window proc drawing - var beforeDC = m.WParam; + IntPtr beforeDC = m.WParam; m.WParam = _screenDC; DefWndProc(ref m); m.WParam = beforeDC; @@ -304,10 +304,10 @@ private void WmPaint(ref Message m) private readonly PaletteTripleOverride _overrideNormal; private readonly PaletteTripleOverride _overrideTracking; - private readonly PaletteTripleOverride _overridePressed; + private readonly PaletteTripleOverride _overrideMultiSelect; private readonly PaletteTripleOverride _overrideCheckedNormal; private readonly PaletteTripleOverride _overrideCheckedTracking; - private readonly PaletteTripleOverride _overrideCheckedPressed; + private readonly PaletteTripleOverride _overrideCheckedMultiSelect; private readonly PaletteNodeOverride _overrideNormalNode; private readonly PaletteRedirectTreeView? _redirectImages; private readonly ViewDrawDocker _drawDockerOuter; @@ -331,9 +331,7 @@ private void WmPaint(ref Message m) private bool _forcedLayout; private bool _trackingMouseEnter; private bool _isRecreating; // https://github.com/Krypton-Suite/Standard-Toolkit/issues/777 - private float _cornerRoundingRadius; - private float _nodeCornerRoundingRadius; - + private bool _multiSelect; #endregion #region Events @@ -422,7 +420,7 @@ private void WmPaint(ref Message m) public event TreeNodeMouseClickEventHandler? NodeMouseClick; /// - /// Occurs when a node is double clicked with the mouse. + /// Occurs when a node is double-clicked with the mouse. /// [Category(@"Behavior")] [Description(@"Occurs when a node is double clicked with the mouse.")] @@ -537,34 +535,34 @@ public KryptonTreeView() StateCommon = new PaletteTreeStateRedirect(Redirector, commonBack, backInherit, commonBorder, borderInherit, NeedPaintDelegate); var disabledBack = new PaletteBackColor1(StateCommon.PaletteBack, NeedPaintDelegate); - var disabledBorder = new PaletteBorder(StateCommon.PaletteBorder, NeedPaintDelegate); + var disabledBorder = new PaletteBorder(StateCommon.PaletteBorder!, NeedPaintDelegate); StateDisabled = new PaletteTreeState(StateCommon, disabledBack, disabledBorder, NeedPaintDelegate); var normalBack = new PaletteBackColor1(StateCommon.PaletteBack, NeedPaintDelegate); - var normalBorder = new PaletteBorder(StateCommon.PaletteBorder, NeedPaintDelegate); + var normalBorder = new PaletteBorder(StateCommon.PaletteBorder!, NeedPaintDelegate); StateNormal = new PaletteTreeState(StateCommon, normalBack, normalBorder, NeedPaintDelegate); var activeBack = new PaletteBackColor1(StateCommon.PaletteBack, NeedPaintDelegate); - var activeBorder = new PaletteBorder(StateCommon.PaletteBorder, NeedPaintDelegate); + var activeBorder = new PaletteBorder(StateCommon.PaletteBorder!, NeedPaintDelegate); StateActive = new PaletteDouble(StateCommon, activeBack, activeBorder, NeedPaintDelegate); OverrideFocus = new PaletteTreeNodeTripleRedirect(Redirector, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, NeedPaintDelegate); StateTracking = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); - StatePressed = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); + StateMultiSelect = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); StateCheckedNormal = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); StateCheckedTracking = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); - StateCheckedPressed = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); + StateCheckedMultiSelect = new PaletteTreeNodeTriple(StateCommon.Node, NeedPaintDelegate); // Create the override handling classes _overrideNormal = new PaletteTripleOverride(OverrideFocus.Node, StateNormal.Node, PaletteState.FocusOverride); _overrideTracking = new PaletteTripleOverride(OverrideFocus.Node, StateTracking.Node, PaletteState.FocusOverride); - _overridePressed = new PaletteTripleOverride(OverrideFocus.Node, StatePressed.Node, PaletteState.FocusOverride); + _overrideMultiSelect = new PaletteTripleOverride(OverrideFocus.Node, StateMultiSelect.Node, PaletteState.FocusOverride); _overrideCheckedNormal = new PaletteTripleOverride(OverrideFocus.Node, StateCheckedNormal.Node, PaletteState.FocusOverride); _overrideCheckedTracking = new PaletteTripleOverride(OverrideFocus.Node, StateCheckedTracking.Node, PaletteState.FocusOverride); - _overrideCheckedPressed = new PaletteTripleOverride(OverrideFocus.Node, StateCheckedPressed.Node, PaletteState.FocusOverride); + _overrideCheckedMultiSelect = new PaletteTripleOverride(OverrideFocus.Node, StateCheckedMultiSelect.Node, PaletteState.FocusOverride); _overrideNormalNode = new PaletteNodeOverride(_overrideNormal); - // Create the check box image drawer and place inside element so it is always centered + // Create the checkbox image drawer and place inside element so it is always centered _drawCheckBox = new ViewDrawCheckBox(_redirectImages); var layoutCheckBox = new ViewLayoutCenter { @@ -592,9 +590,9 @@ public KryptonTreeView() // Create the draw element for owner drawing individual items _contentValues = new FixedContentValue(); _drawButton = new ViewDrawButton(StateDisabled.Node, _overrideNormalNode, - _overrideTracking, _overridePressed, + _overrideTracking, _overrideMultiSelect, _overrideCheckedNormal, _overrideCheckedTracking, - _overrideCheckedPressed, + _overrideCheckedMultiSelect, new PaletteMetricRedirect(Redirector), _contentValues, VisualOrientation.Top, false); @@ -665,13 +663,9 @@ public KryptonTreeView() // Add tree view to the controls collection ((KryptonReadOnlyControls)Controls).AddInternal(_treeView); - - _cornerRoundingRadius = GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - _nodeCornerRoundingRadius = GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; } - private void OnTreeClick(object sender, EventArgs e) => OnClick(e); + private void OnTreeClick(object? sender, EventArgs e) => OnClick(e); /// /// Releases all resources used by the Control. @@ -688,32 +682,13 @@ protected override void Dispose(bool disposing) #endregion #region Public - - /// Gets or sets the corner rounding radius. - /// The corner rounding radius. - [Category(@"Visuals"), DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE), Description(@"Defines the corner roundness on the current window (-1 is the default look).")] - public float CornerRoundingRadius - { - get => _cornerRoundingRadius; - set => SetCornerRoundingRadius(value); - } - - /// Gets or sets the node corner rounding radius. - /// The node corner rounding radius. - [Category(@"Visuals"), DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE), Description(@"Defines the node corner roundness on the current window (-1 is the default look).")] - public float NodeCornerRoundingRadius - { - get => _nodeCornerRoundingRadius; - set => SetNodeCornerRoundingRadius(value); - } - /// /// Gets access to the contained TreeView instance. /// [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [EditorBrowsable(EditorBrowsableState.Always)] [Browsable(false)] - public TreeView? TreeView => _treeView; + public TreeView TreeView => _treeView; /// /// Gets access to the contained input control. @@ -762,7 +737,7 @@ public override Color BackColor public override Font Font { get => base.Font; - set => base.Font = value; + set => base.Font = value!; } /// @@ -812,9 +787,7 @@ public int ItemHeight } } } - private bool ShouldSerializeItemHeight() => !_itemHeightDefault; - private void ResetItemHeight() { _itemHeightDefault = true; @@ -833,6 +806,27 @@ public bool CheckBoxes set => _treeView.CheckBoxes = value; } + /// + /// Gets or sets a value indicating whether check boxes are Displayed next to the tree nodes in the tree view control. + /// + [Category(@"Appearance")] + [Description(@"Indicates whether 'MultiSelect' is implemented on Selection")] + [DefaultValue(false)] + public bool MultiSelect + { + get => _multiSelect || CheckBoxes; + set + { + _multiSelect = value; + // Force redraw of current options + var checkedNodes = CheckedNodes; + CheckedNodes = checkedNodes; + } + } + + private bool ShouldSerializeMultiSelect() => _multiSelect; + private void ResetMultiSelect() => _multiSelect = false; + /// /// Gets or sets a value indicating whether the selection highlight spans the width of the tree view control. /// @@ -989,15 +983,45 @@ public string SelectedImageKey /// Gets or sets the tree node that is currently selected in the tree view control. /// [Category(@"Appearance")] - [Description(@"Note that is currently selected.")] + [Description(@"Node that is currently selected.")] [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public TreeNode SelectedNode + public TreeNode? SelectedNode { get => _treeView.SelectedNode; set => _treeView.SelectedNode = value; } + /// + /// Gets or sets the tree node that is currently selected in the tree view control. + /// + [Category(@"Appearance")] + [Description(@"Node(s) that have check set; Will used in MultiSelect as well.")] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public List CheckedNodes + { + get => TreeView.Nodes.Cast().Where(node => node.Checked).ToList(); + set + { + foreach (TreeNode node in TreeView.Nodes) + { + node.Checked = false; + } + + foreach (TreeNode node in value) + { + node.Checked = true; + if (!MultiSelect) + { + // Only do the first one ! + break; + } + } + PerformNeedPaint(false); + } + } + /// /// Gets or sets a value indicating whether lines are drawn between tree nodes in the tree view control. /// @@ -1065,7 +1089,7 @@ public ImageList? StateImageList [Description(@"First fully-visible node.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Browsable(false)] - public TreeNode TopNode + public TreeNode? TopNode { get => _treeView.TopNode; set => _treeView.TopNode = value; @@ -1078,7 +1102,7 @@ public TreeNode TopNode [Description(@"IComparer used to perform custom sorting.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [Browsable(false)] - public IComparer TreeViewNodeSorter + public IComparer? TreeViewNodeSorter { get => _treeView.TreeViewNodeSorter; set => _treeView.TreeViewNodeSorter = value; @@ -1214,7 +1238,7 @@ public PaletteBorderStyle BorderStyle private bool ShouldSerializePlusMinusImages() => !PlusMinusImages.IsDefault; /// - /// Gets access to the check box image value overrides. + /// Gets access to the checkbox image value overrides. /// [Category(@"Visuals")] [Description(@"CheckBox image value overrides.")] @@ -1287,11 +1311,11 @@ public PaletteBorderStyle BorderStyle /// Gets access to the pressed item appearance entries. /// [Category(@"Visuals")] - [Description(@"Overrides for defining pressed item appearance.")] + [Description(@"Overrides for defining (Multi) Select item appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteTreeNodeTriple StatePressed { get; } + public PaletteTreeNodeTriple StateMultiSelect { get; } - private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; + private bool ShouldSerializeStateMultiSelect() => !StateMultiSelect.IsDefault; /// /// Gets access to the normal checked item appearance entries. @@ -1317,11 +1341,11 @@ public PaletteBorderStyle BorderStyle /// Gets access to the pressed checked item appearance entries. /// [Category(@"Visuals")] - [Description(@"Overrides for defining pressed checked item appearance.")] + [Description(@"Overrides for defining (Multi) Select checked item appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteTreeNodeTriple StateCheckedPressed { get; } + public PaletteTreeNodeTriple StateCheckedMultiSelect { get; } - private bool ShouldSerializeStateCheckedPressed() => !StateCheckedPressed.IsDefault; + private bool ShouldSerializeStateCheckedMultiSelect() => !StateCheckedMultiSelect.IsDefault; /// /// Gets and sets Determines if the control is always active or only when the mouse is over the control or has focus. @@ -1373,7 +1397,7 @@ public bool AlwaysActive /// /// The Point to evaluate and retrieve the node from. /// The TreeNode at the specified point, in tree view (client) coordinates, or null if there is no node at that location. - public TreeNode GetNodeAt(Point pt) => _treeView.GetNodeAt(pt); + public TreeNode? GetNodeAt(Point pt) => _treeView.GetNodeAt(pt); /// /// Retrieves the tree node at the point with the specified coordinates. @@ -1381,7 +1405,7 @@ public bool AlwaysActive /// The X position to evaluate and retrieve the node from. /// The Y position to evaluate and retrieve the node from. /// The TreeNode at the specified location, in tree view (client) coordinates, or null if there is no node at that location. - public TreeNode GetNodeAt(int x, int y) => _treeView.GetNodeAt(x, y); + public TreeNode? GetNodeAt(int x, int y) => _treeView.GetNodeAt(x, y); /// /// Retrieves the number of tree nodes, optionally including those in all subtrees, assigned to the tree view control. @@ -1422,12 +1446,12 @@ public bool AlwaysActive /// Sets input focus to the control. /// /// true if the input focus request was successful; otherwise, false. - public new bool Focus() => TreeView != null && TreeView.Focus(); + public new bool Focus() => TreeView.Focus(); /// /// Activates the control. /// - public new void Select() => TreeView?.Select(); + public new void Select() => TreeView.Select(); #endregion #region Protected @@ -1508,6 +1532,11 @@ protected virtual void OnAfterSelect(TreeViewEventArgs e) { if (!_isRecreating) { + if (_multiSelect && e.Node is not null) + { + e.Node.Checked = !e.Node.Checked; + } + AfterSelect?.Invoke(this, e); } } @@ -1669,7 +1698,7 @@ protected override void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected override void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected override void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { UpdateItemHeight(); base.OnPaletteChanged(e); @@ -1752,9 +1781,12 @@ protected override void OnCausesValidationChanged(EventArgs e) /// Raises the Paint event. /// /// An PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { - Paint?.Invoke(this, e); + if ( Paint is not null && e is not null) + { + Paint.Invoke(this, e); + } base.OnPaint(e); } @@ -1825,7 +1857,7 @@ protected override void OnLayout(LayoutEventArgs levent) // Only use layout logic if control is fully initialized or if being forced // to allow a relayout or if in design mode. - if (IsHandleCreated || _forcedLayout || (DesignMode && (_treeView != null))) + if (IsHandleCreated || _forcedLayout || (DesignMode)) { Rectangle fillRect = _layoutFill.FillRect; _treeView.SetBounds(fillRect.X, fillRect.Y, fillRect.Width, fillRect.Height); @@ -1924,28 +1956,31 @@ private void UpdateContentFromNode(TreeNode? node) { _overrideNormalNode.TreeNode = node; - if (node != null) + if (_contentValues is not null) { - // Get information from the node - _contentValues.ShortText = node.Text; - _contentValues.LongText = string.Empty; - _contentValues.Image = null; - _contentValues.ImageTransparentColor = Color.Empty; + if (node is not null) + { + // Get information from the node + _contentValues.ShortText = node.Text; + _contentValues.LongText = string.Empty; + _contentValues.Image = null; + _contentValues.ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; - if (node is KryptonTreeNode kryptonNode) + if (node is KryptonTreeNode kryptonNode) + { + // Get long text from the Krypton extension + _contentValues.LongText = kryptonNode.LongText; + } + } + else { - // Get long text from the Krypton extension - _contentValues.LongText = kryptonNode.LongText; + // Get the text string for the item + _contentValues.ShortText = @"A"; + _contentValues.LongText = string.Empty; + _contentValues.Image = null; + _contentValues.ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; } } - else - { - // Get the text string for the item - _contentValues.ShortText = @"A"; - _contentValues.LongText = string.Empty; - _contentValues.Image = null; - _contentValues.ImageTransparentColor = Color.Empty; - } } private void UpdateStateAndPalettes() @@ -1955,24 +1990,15 @@ private void UpdateStateAndPalettes() // Get the correct palette settings to use IPaletteDouble doubleState = GetDoubleState(); _treeView.ViewDrawPanel.SetPalettes(doubleState.PaletteBack); - _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder); + _drawDockerOuter.SetPalettes(doubleState.PaletteBack, doubleState.PaletteBorder!); _drawDockerOuter.Enabled = Enabled; // Find the new state of the main view element - PaletteState state; - if (IsActive) - { - state = PaletteState.Tracking; - } - else - { - state = Enabled ? PaletteState.Normal : PaletteState.Disabled; - } + PaletteState state = Enabled ? (IsActive ? PaletteState.Tracking : PaletteState.Normal) : PaletteState.Disabled; _treeView.ViewDrawPanel.ElementState = state; _drawDockerOuter.ElementState = state; _treeView.Font = StateCommon.Node.Content.ShortText.Font; - } } @@ -1983,8 +2009,8 @@ private int NodeIndent(TreeNode node) var depth = 0; // Count depth of our node in tree - TreeNode current = node; - while (current != null) + TreeNode? current = node; + while (current is not null) { depth++; current = current.Parent; @@ -1999,7 +2025,7 @@ private int NodeIndent(TreeNode node) return depth * _treeView.Indent; } - private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) + private void OnTreeViewDrawNode(object? sender, DrawTreeNodeEventArgs e) { // We cannot do anything without a valid node if (e.Node == null) @@ -2058,7 +2084,7 @@ private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) _layoutImageCenterState.Visible = drawStateImage != null; - // Do we need the check box? + // Do we need the checkbox? _layoutCheckBoxStack.Visible = (StateImageList == null) && CheckBoxes && (kryptonNode?.IsCheckBoxVisible != false); @@ -2067,7 +2093,7 @@ private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) _drawCheckBox.CheckState = e.Node.Checked ? CheckState.Checked : CheckState.Unchecked; } - // By default the button is in the normal state + // By default, the button is in the normal state PaletteState buttonState; // Is this item disabled @@ -2082,17 +2108,39 @@ private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) { _drawButton.Checked = true; - buttonState = (e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot - ? PaletteState.CheckedTracking - : PaletteState.CheckedNormal; + if ((e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot) + { + buttonState = PaletteState.CheckedTracking; + } + else if (e.Node.Checked) + { + buttonState = _layoutCheckBoxStack.Visible + ? PaletteState.CheckedPressed + : PaletteState.Pressed; + } + else + { + buttonState = PaletteState.CheckedNormal; + } } else { _drawButton.Checked = false; - buttonState = (e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot - ? PaletteState.Tracking - : PaletteState.Normal; + if ((e.State & TreeNodeStates.Hot) == TreeNodeStates.Hot) + { + buttonState = PaletteState.Tracking; + } + else if (e.Node.Checked) + { + buttonState = _layoutCheckBoxStack.Visible + ? PaletteState.CheckedPressed + : PaletteState.Pressed; + } + else + { + buttonState = PaletteState.Normal; + } } // Do we need to show item as having the focus @@ -2100,10 +2148,10 @@ private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) _overrideNormal.Apply = hasFocus; _overrideTracking.Apply = hasFocus; - _overridePressed.Apply = hasFocus; + _overrideMultiSelect.Apply = hasFocus; _overrideCheckedTracking.Apply = hasFocus; _overrideCheckedNormal.Apply = hasFocus; - _overrideCheckedPressed.Apply = hasFocus; + _overrideCheckedMultiSelect.Apply = hasFocus; } // Update the view with the calculated state @@ -2169,7 +2217,7 @@ private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) _treeView.ViewDrawPanel.Render(context); } - // Do we have a indent area for drawing plus/minus/lines? + // Do we have an indent area for drawing plus/minus/lines? if (indentBounds.X >= 0) { // Do we draw lines between nodes? @@ -2220,7 +2268,7 @@ private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) // Do we draw any plus/minus images in indent bounds? if (ShowPlusMinus && (e.Node.Nodes.Count > 0)) { - Image? drawImage = _redirectImages.GetTreeViewImage(e.Node.IsExpanded); + Image? drawImage = _redirectImages!.GetTreeViewImage(e.Node.IsExpanded); if (drawImage != null) { g.DrawImage(drawImage, new Rectangle(indentBounds.X + ((indentBounds.Width - drawImage.Width) / 2) - 1, @@ -2321,7 +2369,7 @@ private void OnTreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) } } - private void OnTreeViewGotFocus(object sender, EventArgs e) + private void OnTreeViewGotFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); _treeView.Invalidate(); @@ -2329,7 +2377,7 @@ private void OnTreeViewGotFocus(object sender, EventArgs e) OnGotFocus(e); } - private void OnTreeViewLostFocus(object sender, EventArgs e) + private void OnTreeViewLostFocus(object? sender, EventArgs e) { UpdateStateAndPalettes(); _treeView.Invalidate(); @@ -2337,47 +2385,47 @@ private void OnTreeViewLostFocus(object sender, EventArgs e) OnLostFocus(e); } - private void OnTreeViewKeyPress(object sender, KeyPressEventArgs e) => OnKeyPress(e); + private void OnTreeViewKeyPress(object? sender, KeyPressEventArgs e) => OnKeyPress(e); - private void OnTreeViewKeyUp(object sender, KeyEventArgs e) => OnKeyUp(e); + private void OnTreeViewKeyUp(object? sender, KeyEventArgs e) => OnKeyUp(e); - private void OnTreeViewKeyDown(object sender, KeyEventArgs e) => OnKeyDown(e); + private void OnTreeViewKeyDown(object? sender, KeyEventArgs e) => OnKeyDown(e); - private void OnTreeViewPreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); + private void OnTreeViewPreviewKeyDown(object? sender, PreviewKeyDownEventArgs e) => OnPreviewKeyDown(e); - private void OnTreeViewValidated(object sender, EventArgs e) => OnValidated(e); + private void OnTreeViewValidated(object? sender, EventArgs e) => OnValidated(e); - private void OnTreeViewValidating(object sender, CancelEventArgs e) => OnValidating(e); + private void OnTreeViewValidating(object? sender, CancelEventArgs e) => OnValidating(e); - private void OnTreeViewNodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e) => OnNodeMouseHover(e); + private void OnTreeViewNodeMouseHover(object? sender, TreeNodeMouseHoverEventArgs e) => OnNodeMouseHover(e); - private void OnTreeViewNodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) => OnNodeMouseDoubleClick(e); + private void OnTreeViewNodeMouseDoubleClick(object? sender, TreeNodeMouseClickEventArgs e) => OnNodeMouseDoubleClick(e); - private void OnTreeViewNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) => OnNodeMouseClick(e); + private void OnTreeViewNodeMouseClick(object? sender, TreeNodeMouseClickEventArgs e) => OnNodeMouseClick(e); - private void OnTreeViewItemDrag(object sender, ItemDragEventArgs e) => OnItemDrag(e); + private void OnTreeViewItemDrag(object? sender, ItemDragEventArgs e) => OnItemDrag(e); - private void OnTreeViewBeforeSelect(object sender, TreeViewCancelEventArgs e) => OnBeforeSelect(e); + private void OnTreeViewBeforeSelect(object? sender, TreeViewCancelEventArgs e) => OnBeforeSelect(e); - private void OnTreeViewBeforeLabelEdit(object sender, NodeLabelEditEventArgs e) => OnBeforeLabelEdit(e); + private void OnTreeViewBeforeLabelEdit(object? sender, NodeLabelEditEventArgs e) => OnBeforeLabelEdit(e); - private void OnTreeViewBeforeExpand(object sender, TreeViewCancelEventArgs e) => OnBeforeExpand(e); + private void OnTreeViewBeforeExpand(object? sender, TreeViewCancelEventArgs e) => OnBeforeExpand(e); - private void OnTreeViewBeforeCollapse(object sender, TreeViewCancelEventArgs e) => OnBeforeCollapse(e); + private void OnTreeViewBeforeCollapse(object? sender, TreeViewCancelEventArgs e) => OnBeforeCollapse(e); - private void OnTreeViewBeforeCheck(object sender, TreeViewCancelEventArgs e) => OnBeforeCheck(e); + private void OnTreeViewBeforeCheck(object? sender, TreeViewCancelEventArgs e) => OnBeforeCheck(e); - private void OnTreeViewAfterSelect(object sender, TreeViewEventArgs e) => OnAfterSelect(e); + private void OnTreeViewAfterSelect(object? sender, TreeViewEventArgs e) => OnAfterSelect(e); - private void OnTreeViewAfterLabelEdit(object sender, NodeLabelEditEventArgs e) => OnAfterLabelEdit(e); + private void OnTreeViewAfterLabelEdit(object? sender, NodeLabelEditEventArgs e) => OnAfterLabelEdit(e); - private void OnTreeViewAfterExpand(object sender, TreeViewEventArgs e) => OnAfterExpand(e); + private void OnTreeViewAfterExpand(object? sender, TreeViewEventArgs e) => OnAfterExpand(e); - private void OnTreeViewAfterCollapse(object sender, TreeViewEventArgs e) => OnAfterCollapse(e); + private void OnTreeViewAfterCollapse(object? sender, TreeViewEventArgs e) => OnAfterCollapse(e); - private void OnTreeViewAfterCheck(object sender, TreeViewEventArgs e) => OnAfterCheck(e); + private void OnTreeViewAfterCheck(object? sender, TreeViewEventArgs e) => OnAfterCheck(e); - private void OnTreeViewMouseChange(object sender, EventArgs e) + private void OnTreeViewMouseChange(object? sender, EventArgs e) { // Change in tracking state? if (_treeView.MouseOver != _trackingMouseEnter) @@ -2398,23 +2446,9 @@ private void OnTreeViewMouseChange(object sender, EventArgs e) } } - private void OnDoubleClick(object sender, EventArgs e) => base.OnDoubleClick(e); - - private void OnMouseDoubleClick(object sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); - - private void SetCornerRoundingRadius(float? radius) - { - _cornerRoundingRadius = radius ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - - StateCommon.Border.Rounding = _cornerRoundingRadius; - } - - private void SetNodeCornerRoundingRadius(float? radius) - { - _nodeCornerRoundingRadius = radius ?? GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE; + private void OnDoubleClick(object? sender, EventArgs e) => base.OnDoubleClick(e); - StateCommon.Node.Border.Rounding = _nodeCornerRoundingRadius; - } + private void OnMouseDoubleClick(object? sender, MouseEventArgs e) => base.OnMouseDoubleClick(e); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWebBrowser.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWebBrowser.cs index fd7a3e097..4366040bc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWebBrowser.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWebBrowser.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ namespace Krypton.Toolkit public class KryptonWebBrowser : WebBrowser { #region Instance Fields - private PaletteBase? _palette; + private PaletteBase _palette; private readonly PaletteMode _paletteMode = PaletteMode.Global; private KryptonContextMenu? _kryptonContextMenu; private IRenderer _renderer; @@ -125,13 +125,13 @@ public KryptonContextMenu? KryptonContextMenu } } - private void OnContextMenuStripOpening(object sender, CancelEventArgs e) + private void OnContextMenuStripOpening(object? sender, CancelEventArgs e) { // Get the actual strip instance - ContextMenuStrip cms = base.ContextMenuStrip; + ContextMenuStrip? cms = base.ContextMenuStrip; // Make sure it has the correct renderer - cms.Renderer = CreateToolStripRenderer(); + cms!.Renderer = CreateToolStripRenderer(); } @@ -185,7 +185,7 @@ protected override void WndProc(ref Message m) } - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => + private void OnKryptonContextMenuDisposed(object? sender, EventArgs e) => // When the current krypton context menu is disposed, we should remove // it to prevent it being used again, as that would just throw an exception // because it has been disposed. @@ -197,7 +197,7 @@ private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => /// Sets the palette being used. /// The chosen palette. - private void SetPalette(PaletteBase? palette) + private void SetPalette(PaletteBase palette) { if (palette != _palette) { @@ -226,7 +226,7 @@ private void SetPalette(PaletteBase? palette) /// Called when there is a change in base renderer or base palette. /// The sender. /// The instance containing the event data. - private void OnBaseChanged(object sender, EventArgs e) => + private void OnBaseChanged(object? sender, EventArgs e) => // Change in base renderer or base palette require we fetch the latest renderer _renderer = _palette.GetRenderer(); @@ -258,7 +258,7 @@ protected virtual void OnGlobalPaletteChanged(object sender, EventArgs e) /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public PaletteBase? GetResolvedPalette() => _palette; + public PaletteBase GetResolvedPalette() => _palette; #endregion Palette Controls } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWrapLabel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWrapLabel.cs index 41a010b83..8762f76db 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWrapLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonWrapLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -428,7 +428,7 @@ public IRenderer? Renderer /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] - public ToolStripRenderer? CreateToolStripRenderer() => Renderer?.RenderToolStrip(GetResolvedPalette()); + public ToolStripRenderer? CreateToolStripRenderer() => Renderer?.RenderToolStrip(GetResolvedPalette()!); /// /// Update the font property. @@ -461,10 +461,10 @@ public void UpdateFont() font ??= StateCommon.Font ?? _redirector.GetContentShortTextFont(_labelContentStyle, ps); // Recover text color from state common or as last resort the inherited palette - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = StateCommon.TextColor; - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = _redirector.GetContentShortTextColor1(_labelContentStyle, ps); } @@ -562,10 +562,10 @@ protected override void OnPaint(PaintEventArgs e) font ??= StateCommon.Font ?? _redirector.GetContentShortTextFont(_labelContentStyle, ps); // Recover text color from state common or as last resort the inherited palette - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = StateCommon.TextColor; - if (textColor == Color.Empty) + if (textColor == GlobalStaticValues.EMPTY_COLOR) { textColor = _redirector.GetContentShortTextColor1(_labelContentStyle, ps); } @@ -609,13 +609,13 @@ protected override void OnPaintBackground(PaintEventArgs? pEvent) _miPtb = typeof(Control).GetMethod("PaintTransparentBackground", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, CallingConventions.HasThis, - new[] { typeof(PaintEventArgs), typeof(Rectangle), typeof(Region) }, + [typeof(PaintEventArgs), typeof(Rectangle), typeof(Region)], null); } if (pEvent != null) { - _miPtb?.Invoke(this, new object[] { pEvent, ClientRectangle, null }); + _miPtb?.Invoke(this, [pEvent, ClientRectangle, null]); } } else @@ -789,7 +789,7 @@ private void SetPalette(PaletteBase? palette) if (palette != _palette) { // Unhook from current palette events - if (_palette != null) + if (_palette is not null) { _palette.PalettePaint -= OnPaletteNeedPaint; _palette.BasePaletteChanged -= OnBaseChanged; @@ -797,13 +797,13 @@ private void SetPalette(PaletteBase? palette) } // Remember the new palette - _palette = palette; + _palette = palette!; // Get the renderer associated with the palette - Renderer = _palette?.GetRenderer(); + Renderer = _palette?.GetRenderer()!; // Hook to new palette events - if (_palette != null) + if (_palette is not null) { _palette.PalettePaint += OnPaletteNeedPaint; _palette.BasePaletteChanged += OnBaseChanged; @@ -812,15 +812,15 @@ private void SetPalette(PaletteBase? palette) } } - private void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => NeedPaint(e); + private void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) => NeedPaint(e); // Change in base renderer or base palette require we fetch the latest renderer - private void OnBaseChanged(object sender, EventArgs e) => Renderer = _palette?.GetRenderer(); + private void OnBaseChanged(object? sender, EventArgs e) => Renderer = _palette?.GetRenderer()!; /// Called when [global palette changed]. /// The sender. /// The instance containing the event data. - private void OnGlobalPaletteChanged(object sender, EventArgs e) + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) @@ -854,13 +854,13 @@ private void OnContextMenuStripOpening(object sender, CancelEventArgs e) } } - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => + private void OnKryptonContextMenuDisposed(object? sender, EventArgs e) => // When the current krypton context menu is disposed, we should remove // it to prevent it being used again, as that would just throw an exception // because it has been disposed. KryptonContextMenu = null; - private void OnContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); + private void OnContextMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); private void NeedPaint(bool layout) => NeedPaint(new NeedLayoutEventArgs(layout)); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/CommonDialogHandler.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/CommonDialogHandler.cs index adfab9218..5ee9f83e5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/CommonDialogHandler.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/CommonDialogHandler.cs @@ -2,14 +2,12 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. * */ #endregion -// To get around bug in .NET 8, Preview 7 -// TODO: Remove when .NET 8 is GA -#if NET8_0 +#if NET8_0_OR_GREATER using MethodInvoker = System.Windows.Forms.MethodInvoker; #endif @@ -20,7 +18,6 @@ namespace Krypton.Toolkit internal class CommonDialogHandler { private readonly bool _embed; - private readonly KryptonManager _kryptonManager; internal class Attributes { @@ -34,7 +31,7 @@ internal class Attributes public VisualControlBase? Button { get; set; } } - private readonly List _controls = new List(); + private readonly List _controls = []; internal readonly Color _backColour; private readonly Color _defaultFontColour; private readonly Color _inputFontColour; @@ -49,11 +46,11 @@ public CommonDialogHandler(bool embed) { _embed = embed; // Gain access to the global palette - _kryptonManager = new KryptonManager(); - _backColour = _kryptonManager.GlobalPalette!.GetBackColor1(PaletteBackStyle.PanelClient, PaletteState.Normal); - _defaultFontColour = _kryptonManager.GlobalPalette.GetContentShortTextColor1(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal); - _inputFontColour = _kryptonManager.GlobalPalette.GetContentShortTextColor1(PaletteContentStyle.InputControlStandalone, PaletteState.Normal); - _labelFont = _kryptonManager.GlobalPalette.GetContentShortTextFont(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal); + var igp = KryptonManager.CurrentGlobalPalette; + _backColour = igp.GetBackColor1(PaletteBackStyle.PanelClient, PaletteState.Normal); + _defaultFontColour = igp.GetContentShortTextColor1(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal); + _inputFontColour = igp.GetContentShortTextColor1(PaletteContentStyle.InputControlStandalone, PaletteState.Normal); + _labelFont = igp.GetContentShortTextFont(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal)!; } internal string Title { get; set; } @@ -113,8 +110,8 @@ public CommonDialogHandler(bool embed) var labelLogFont = _labelFont.ToHfont(); //var buttonFont = _kryptonManager.GlobalPalette.GetContentShortTextFont(PaletteContentStyle.ButtonStandalone, PaletteState.Normal); //var buttonLogFont = buttonFont.ToHfont(); - var editFont = _kryptonManager.GlobalPalette.GetContentShortTextFont(PaletteContentStyle.InputControlStandalone, PaletteState.Normal); - var editLogFont = editFont.ToHfont(); + var editFont = KryptonManager.CurrentGlobalPalette.GetContentShortTextFont(PaletteContentStyle.InputControlStandalone, PaletteState.Normal); + var editLogFont = editFont!.ToHfont(); foreach (Attributes control in _controls) { switch (control.ClassName) @@ -202,7 +199,7 @@ public CommonDialogHandler(bool embed) Text = control.Text, Dock = DockStyle.Fill, LabelStyle = LabelStyle.NormalPanel, - Enabled = (control.WinInfo.dwStyle & PI.WS_.DISABLED) == 0, + Enabled = (control.WinInfo.dwStyle & PI.WS_.DISABLED) == 0 }; panel.Controls.Add(button); control.Button = button; @@ -235,7 +232,7 @@ public CommonDialogHandler(bool embed) Text = control.Text, Dock = DockStyle.Fill, LabelStyle = LabelStyle.NormalPanel, - Enabled = (control.WinInfo.dwStyle & PI.WS_.DISABLED) == 0, + Enabled = (control.WinInfo.dwStyle & PI.WS_.DISABLED) == 0 }; panel.Controls.Add(button); control.Button = button; @@ -320,11 +317,11 @@ public CommonDialogHandler(bool embed) using (Graphics g = Graphics.FromHdc(hdc)) { - g.SmoothingMode = SmoothingMode.AntiAlias; - var lineColor = _kryptonManager.GlobalPalette.GetBorderColor1(PaletteBorderStyle.ControlGroupBox, PaletteState.Normal); + using var gh = new GraphicsHint(g, PaletteGraphicsHint.AntiAlias); + var lineColor = KryptonManager.CurrentGlobalPalette.GetBorderColor1(PaletteBorderStyle.ControlGroupBox, PaletteState.Normal); DrawRoundedRectangle(g, new Pen(lineColor), new Point(0, 10), control.Size - new Size(1, 11), 5); - var font = _kryptonManager.GlobalPalette.GetContentShortTextFont(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal); + var font = KryptonManager.CurrentGlobalPalette.GetContentShortTextFont(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal); TextRenderer.DrawText(g, control.Text, font, new Point(4, 0), _defaultFontColour, _backColour, TextFormatFlags.HidePrefix | TextFormatFlags.NoClipping); @@ -366,8 +363,8 @@ public CommonDialogHandler(bool embed) // Buttons with these styles are always drawn with the default system colors. // Drawing push buttons requires several different brushes-face, highlight, and shadow // but the WM_CTLCOLORBTN message allows only one brush to be returned. - var fontColour = _kryptonManager.GlobalPalette.GetContentShortTextColor1(PaletteContentStyle.ButtonStandalone, PaletteState.Normal); - var backColour = _kryptonManager.GlobalPalette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); + var fontColour = KryptonManager.CurrentGlobalPalette.GetContentShortTextColor1(PaletteContentStyle.ButtonStandalone, PaletteState.Normal); + var backColour = KryptonManager.CurrentGlobalPalette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); PI.SetTextColor(wParam, ColorTranslator.ToWin32(fontColour)); PI.SetDCBrushColor(wParam, ColorTranslator.ToWin32(backColour)); PI.SetBkMode(wParam, ColorTranslator.ToWin32(Color.Transparent)); @@ -427,6 +424,7 @@ private void PerformEmbedding(IntPtr hWnd) Padding = new Padding(0), TopMost = true }; + if (ShowIcon) { _wrapperForm.FormBorderStyle = _isResizable ? FormBorderStyle.Sizable : FormBorderStyle.Fixed3D; @@ -455,7 +453,7 @@ private void PerformEmbedding(IntPtr hWnd) else { _resizeHandle = hWnd; - _wrapperForm.Resize += FormResize!; + _wrapperForm.Resize += FormResize; } var wrapperParent = PI.GetParent(hWnd); @@ -477,7 +475,7 @@ private void PerformEmbedding(IntPtr hWnd) } } - private void OnResizeTimedEvent(object sender, ElapsedEventArgs e) + private void OnResizeTimedEvent(object? sender, ElapsedEventArgs e) { _resizeTimer.Dispose(); if (_wrapperForm != null) @@ -493,14 +491,16 @@ private void OnResizeTimedEvent(object sender, ElapsedEventArgs e) } } - private void FormResize(object sender, EventArgs e) + private void FormResize(object? sender, EventArgs e) { if (_resizeHandle != IntPtr.Zero) { if (_wrapperForm != null) { var clientSize = _wrapperForm.ClientSize; - PI.MoveWindow(_resizeHandle, 0, 0, clientSize.Width, clientSize.Height, false); + _wrapperForm.SuspendLayout(); + PI.MoveWindow(_resizeHandle, 0, 0, clientSize.Width, clientSize.Height, true); + _wrapperForm.ResumeLayout(false); } } } @@ -521,7 +521,7 @@ private static bool EnumerateChildWindow(IntPtr hWnd, IntPtr lParam) private static void DrawRoundedRectangle(Graphics g, Pen pen, Point location, Size size, int radius) { - g.SmoothingMode = SmoothingMode.AntiAlias; + using var gh = new GraphicsHint(g, PaletteGraphicsHint.AntiAlias); var roundRect = new RoundedRectangleF(size.Width, size.Height, radius, location.X, location.Y); g.DrawPath(pen, roundRect.Path); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.cs deleted file mode 100644 index dfdd4111c..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.cs +++ /dev/null @@ -1,158 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - /// - /// - /// - public partial class KryptonInputBoxForm : KryptonForm - { - #region Instance Fields - private bool _usePasswordOption; - private Color _cueColour; - private string _prompt; - private string _caption; - private string _defaultResponse; - private string _cueText; - private Font? _cueTypeface; - #endregion - - #region Identity - - /// - /// - /// - public KryptonInputBoxForm() - { - InitializeComponent(); - } - - /// Initializes a new instance of the class. - /// The prompt. - /// The caption. - /// The default response. - /// The cue text. - /// The cue colour. - /// The cue typeface. - /// if set to true [use password option]. - public KryptonInputBoxForm(string prompt, - string caption, - string defaultResponse, - string cueText, - Color cueColour, - Font? cueTypeface, - bool usePasswordOption) - { - InitializeComponent(); - - StoreValues(prompt, caption, defaultResponse, cueText, cueColour, cueTypeface, usePasswordOption); - - // Update contents to match requirements - UpdateText(); - - UpdateCue(); - - UpdateButtons(); - } - - #endregion - - #region Implementation - - private void StoreValues(string prompt, string caption, string defaultResponse, string cueText, Color cueColour, - Font? cueTypeface, bool usePasswordOption) - { - _prompt = prompt; - - _caption = caption; - - _defaultResponse = defaultResponse; - - _cueText = cueText; - - _cueColour = cueColour; - - _cueTypeface = cueTypeface; - - _usePasswordOption = usePasswordOption; - } - - internal static string InternalShow(IWin32Window? owner, - string prompt, - string caption, - string defaultResponse, - string cueText, - Color cueColour, - Font? cueTypeface, - bool usePasswordOption) - { - // If do not have an owner passed in then get the active window and use that instead - IWin32Window? showOwner = owner ?? FromHandle(PI.GetActiveWindow()); - - // Show input box window as a modal dialog and then dispose of it afterwards - using var ib = new KryptonInputBoxForm(prompt, caption, defaultResponse, cueText, cueColour, - cueTypeface, usePasswordOption); - ib.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; - - return ib.ShowDialog(showOwner) == DialogResult.OK - ? ib.InputResponse - : string.Empty; - } - - internal string InputResponse => _textBoxResponse.Text; - - private void UpdateText() - { - Text = _caption; - _labelPrompt.Text = _prompt; - _textBoxResponse.Text = _defaultResponse; - _textBoxResponse.UseSystemPasswordChar = _usePasswordOption; - } - - private void UpdateCue() - { - _textBoxResponse.CueHint.CueHintText = _cueText; - - if (!_cueColour.IsEmpty) - { - _textBoxResponse.CueHint.Color1 = _cueColour; - } - - if (_cueTypeface != null) - { - _textBoxResponse.CueHint.Font = _cueTypeface; - } - } - - private void UpdateButtons() - { - _buttonOk.Text = KryptonLanguageManager.GeneralToolkitStrings.OK; - _buttonCancel.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; - } - - private void Response_KeyDown(object sender, KeyEventArgs e) - { - switch (e.KeyCode) - { - case Keys.Enter: - _buttonOk.PerformClick(); - break; - case Keys.Escape: - _buttonCancel.PerformClick(); - break; - } - } - - #endregion - } -} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.Designer.cs deleted file mode 100644 index 7e8fb383b..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.Designer.cs +++ /dev/null @@ -1,200 +0,0 @@ -namespace Krypton.Toolkit -{ - partial class KryptonThemeBrowserForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.kcpbCustom = new Krypton.Toolkit.KryptonCustomPaletteBase(this.components); - this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); - this.klblSelectedIndex = new Krypton.Toolkit.KryptonLabel(); - this.kchkSilent = new Krypton.Toolkit.KryptonCheckBox(); - this.kbtnOK = new Krypton.Toolkit.KryptonButton(); - this.kbtnCancel = new Krypton.Toolkit.KryptonButton(); - this.kbtnImport = new Krypton.Toolkit.KryptonButton(); - this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); - this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); - this.klblDescription = new Krypton.Toolkit.KryptonLabel(); - this.klbThemeList = new Krypton.Toolkit.KryptonListBox(); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); - this.kryptonPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); - this.kryptonPanel2.SuspendLayout(); - this.SuspendLayout(); - // - // kcpbCustom - // - this.kcpbCustom.BaseFont = new System.Drawing.Font("Segoe UI", 9F); - this.kcpbCustom.BaseFontSize = 9F; - this.kcpbCustom.BasePaletteMode = Krypton.Toolkit.PaletteMode.Microsoft365Blue; - this.kcpbCustom.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom; - this.kcpbCustom.ThemeName = null; - this.kcpbCustom.UseKryptonFileDialogs = true; - // - // kryptonPanel1 - // - this.kryptonPanel1.Controls.Add(this.klblSelectedIndex); - this.kryptonPanel1.Controls.Add(this.kchkSilent); - this.kryptonPanel1.Controls.Add(this.kbtnOK); - this.kryptonPanel1.Controls.Add(this.kbtnCancel); - this.kryptonPanel1.Controls.Add(this.kbtnImport); - this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1); - this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.kryptonPanel1.Location = new System.Drawing.Point(0, 445); - this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; - this.kryptonPanel1.Size = new System.Drawing.Size(800, 50); - this.kryptonPanel1.TabIndex = 0; - // - // klblSelectedIndex - // - this.klblSelectedIndex.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; - this.klblSelectedIndex.Location = new System.Drawing.Point(170, 13); - this.klblSelectedIndex.Name = "klblSelectedIndex"; - this.klblSelectedIndex.Size = new System.Drawing.Size(6, 2); - this.klblSelectedIndex.TabIndex = 15; - this.klblSelectedIndex.Values.Text = ""; - this.klblSelectedIndex.Visible = false; - // - // kchkSilent - // - this.kchkSilent.Location = new System.Drawing.Point(109, 16); - this.kchkSilent.Name = "kchkSilent"; - this.kchkSilent.Size = new System.Drawing.Size(54, 20); - this.kchkSilent.TabIndex = 13; - this.kchkSilent.Values.Text = "&Silent"; - // - // kbtnOK - // - this.kbtnOK.DialogResult = System.Windows.Forms.DialogResult.OK; - this.kbtnOK.Location = new System.Drawing.Point(602, 13); - this.kbtnOK.Name = "kbtnOK"; - this.kbtnOK.Size = new System.Drawing.Size(90, 25); - this.kbtnOK.TabIndex = 3; - this.kbtnOK.UseAsADialogButton = true; - this.kbtnOK.Values.Text = "O&K"; - this.kbtnOK.Click += new System.EventHandler(this.kbtnOK_Click); - // - // kbtnCancel - // - this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.kbtnCancel.Location = new System.Drawing.Point(698, 13); - this.kbtnCancel.Name = "kbtnCancel"; - this.kbtnCancel.Size = new System.Drawing.Size(90, 25); - this.kbtnCancel.TabIndex = 2; - this.kbtnCancel.UseAsADialogButton = true; - this.kbtnCancel.Values.Text = "Cance&l"; - this.kbtnCancel.Click += new System.EventHandler(this.kbtnCancel_Click); - // - // kbtnImport - // - this.kbtnImport.Location = new System.Drawing.Point(13, 13); - this.kbtnImport.Name = "kbtnImport"; - this.kbtnImport.Size = new System.Drawing.Size(90, 25); - this.kbtnImport.TabIndex = 1; - this.kbtnImport.Values.Text = "&Import..."; - this.kbtnImport.Click += new System.EventHandler(this.kbtnImport_Click); - // - // kryptonBorderEdge1 - // - this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderSecondary; - this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; - this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); - this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; - this.kryptonBorderEdge1.Size = new System.Drawing.Size(800, 1); - this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; - // - // kryptonPanel2 - // - this.kryptonPanel2.Controls.Add(this.klblDescription); - this.kryptonPanel2.Controls.Add(this.klbThemeList); - this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; - this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); - this.kryptonPanel2.Name = "kryptonPanel2"; - this.kryptonPanel2.Size = new System.Drawing.Size(800, 445); - this.kryptonPanel2.TabIndex = 1; - // - // klblDescription - // - this.klblDescription.LabelStyle = Krypton.Toolkit.LabelStyle.NormalPanel; - this.klblDescription.Location = new System.Drawing.Point(13, 13); - this.klblDescription.Name = "klblDescription"; - this.klblDescription.Size = new System.Drawing.Size(88, 20); - this.klblDescription.TabIndex = 1; - this.klblDescription.Values.Text = "kryptonLabel1"; - // - // klbThemeList - // - this.klbThemeList.Location = new System.Drawing.Point(13, 39); - this.klbThemeList.Name = "klbThemeList"; - this.klbThemeList.Size = new System.Drawing.Size(775, 400); - this.klbThemeList.TabIndex = 0; - this.klbThemeList.SelectedIndexChanged += new System.EventHandler(this.klbThemeList_SelectedIndexChanged); - // - // KryptonThemeBrowserForm - // - this.AcceptButton = this.kbtnOK; - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.kbtnCancel; - this.ClientSize = new System.Drawing.Size(800, 495); - this.Controls.Add(this.kryptonPanel2); - this.Controls.Add(this.kryptonPanel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "KryptonThemeBrowserForm"; - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; - this.Text = "Select a Theme"; - this.Load += new System.EventHandler(this.KryptonThemeBrowserForm_Load); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); - this.kryptonPanel1.ResumeLayout(false); - this.kryptonPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); - this.kryptonPanel2.ResumeLayout(false); - this.kryptonPanel2.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - - private KryptonCustomPaletteBase kcpbCustom; - private KryptonPanel kryptonPanel1; - private KryptonPanel kryptonPanel2; - private KryptonBorderEdge kryptonBorderEdge1; - private KryptonButton kbtnImport; - private KryptonButton kbtnCancel; - private KryptonListBox klbThemeList; - private KryptonButton kbtnOK; - private KryptonCheckBox kchkSilent; - private KryptonLabel klblDescription; - private KryptonLabel klblSelectedIndex; - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.cs deleted file mode 100644 index dfca5cc17..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.cs +++ /dev/null @@ -1,103 +0,0 @@ -#region BSD License -/* - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - public partial class KryptonThemeBrowserForm : KryptonForm - { - #region Instance Fields - - private readonly bool _showImportButton; - private readonly bool _showSilentOption; - private readonly FormStartPosition _formStartPosition; - private readonly int _startIndex; - private readonly string _windowTitle; - - #endregion - - #region Identity - - /// Initializes a new instance of the class. - /// The start position. - /// The start index. - /// The window title. - /// The show import button. - /// The show silent option. - public KryptonThemeBrowserForm(FormStartPosition startPosition = FormStartPosition.CenterScreen, int startIndex = 34, string? windowTitle = null, bool? showImportButton = null, bool? showSilentOption = null) - { - InitializeComponent(); - - _showImportButton = showImportButton ?? false; - - _showSilentOption = showSilentOption ?? false; - - _formStartPosition = startPosition; - - _startIndex = startIndex; - - _windowTitle = windowTitle ?? KryptonLanguageManager.MiscellaneousThemeStrings.ThemeBrowserWindowTitle; - - AdjustUI(); - } - - #endregion - - #region Implementation - - private void AdjustUI() - { - Text = _windowTitle; - - kbtnImport.Visible = _showImportButton; - - kchkSilent.Visible = _showSilentOption; - - StartPosition = _formStartPosition; - - klblDescription.Text = KryptonLanguageManager.MiscellaneousThemeStrings.ThemeBrowserDescription; - - kbtnImport.Text = KryptonLanguageManager.MiscellaneousThemeStrings.Import; - - kchkSilent.Text = KryptonLanguageManager.MiscellaneousThemeStrings.Silent; - - kbtnCancel.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; - - kbtnOK.Text = KryptonLanguageManager.GeneralToolkitStrings.OK; - } - - private void kbtnImport_Click(object sender, EventArgs e) => kcpbCustom.Import(kchkSilent.Checked); - - private void KryptonThemeBrowserForm_Load(object sender, EventArgs e) - { - foreach (string? themeName in ThemeManager.SupportedInternalThemeNames) - { - if (themeName != null) - { - klbThemeList.Items.Add(themeName); - } - } - - klbThemeList.SelectedItem = _startIndex; - } - - private void kbtnOK_Click(object sender, EventArgs e) => DialogResult = DialogResult.OK; - - private void kbtnCancel_Click(object sender, EventArgs e) => DialogResult = DialogResult.Cancel; - - private void klbThemeList_SelectedIndexChanged(object sender, EventArgs e) - { - ThemeManager.ApplyTheme(klbThemeList.GetItemText(klbThemeList.SelectedItem), new()); - - SetIndexText($@"{klbThemeList.GetItemText(klbThemeList.SelectedItem)} - Index: {klbThemeList.SelectedIndex}"); - } - - private void SetIndexText(string v) => klblSelectedIndex.Text = v; - - #endregion - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.Designer.cs new file mode 100644 index 000000000..66a80bad7 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.Designer.cs @@ -0,0 +1,47 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationBaseForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // VisualToastNotificationBaseForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Name = "VisualToastNotificationBaseForm"; + this.Text = "VisualToastNotificationBaseForm"; + this.Load += new System.EventHandler(this.VisualToastNotificationBaseForm_Load); + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.cs new file mode 100644 index 000000000..d15eb70b8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.cs @@ -0,0 +1,116 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationBaseForm : KryptonForm + { + #region Instance Fields + + private KryptonToastNotificationResult _notificationResult; + + #endregion + + #region Public + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new DialogResult DialogResult + { + get => base.DialogResult; + + set => base.DialogResult = value; + } + + /// Gets or sets the notification result. + /// The notification result. + [Category(@"Behaviour")] + [Description(@"")] + [DefaultValue(KryptonToastNotificationResult.None)] + public KryptonToastNotificationResult NotificationResult + { + get => _notificationResult; + + set => _notificationResult = value; + } + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public VisualToastNotificationBaseForm() + { + InitializeComponent(); + + _notificationResult = KryptonToastNotificationResult.None; + + Text = string.Empty; + } + + #endregion + + #region Protected + + protected KryptonToastNotificationResult ShowToastNotificationResult(IWin32Window? owner) + { + var result = _notificationResult; + + switch (result) + { + case KryptonToastNotificationResult.None: + DialogResult = DialogResult.None; + break; + case KryptonToastNotificationResult.Ok: + break; + case KryptonToastNotificationResult.Cancel: + break; + case KryptonToastNotificationResult.Abort: + break; + case KryptonToastNotificationResult.Retry: + break; + case KryptonToastNotificationResult.Ignore: + break; + case KryptonToastNotificationResult.Yes: + break; + case KryptonToastNotificationResult.No: + break; + case KryptonToastNotificationResult.Close: + break; + case KryptonToastNotificationResult.Help: + break; + case KryptonToastNotificationResult.TryAgain: + break; + case KryptonToastNotificationResult.Continue: + break; + case KryptonToastNotificationResult.TimeOut: + break; + case KryptonToastNotificationResult.DoNotShowAgain: + break; + default: + throw new ArgumentOutOfRangeException(); + } + + return result; + } + + protected KryptonToastNotificationResult ShowToastNotificationResult() => ShowToastNotificationResult(null); + + #endregion + + #region Implementation + + private void VisualToastNotificationBaseForm_Load(object sender, EventArgs e) + { + + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.resx similarity index 100% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.resx rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Base/VisualToastNotificationBaseForm.resx diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.Designer.cs new file mode 100644 index 000000000..9bfde5d1f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.Designer.cs @@ -0,0 +1,258 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationBasicForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxIcon = new System.Windows.Forms.PictureBox(); + this.kwlblHeader = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlblContent = new Krypton.Toolkit.KryptonWrapLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxIcon)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 129); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(447, 50); + this.kpnlButtons.TabIndex = 0; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(447, 49); + this.tableLayoutPanel2.TabIndex = 3; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(321, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + this.kbtnDismiss.Click += new System.EventHandler(this.kbtnDismiss_Click); + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(389, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(447, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.tableLayoutPanel1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(447, 129); + this.kryptonPanel2.TabIndex = 1; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.pbxIcon, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kwlblHeader, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kwlblContent, 1, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(447, 129); + this.tableLayoutPanel1.TabIndex = 0; + // + // pbxIcon + // + this.pbxIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxIcon.Location = new System.Drawing.Point(3, 3); + this.pbxIcon.Name = "pbxIcon"; + this.tableLayoutPanel1.SetRowSpan(this.pbxIcon, 2); + this.pbxIcon.Size = new System.Drawing.Size(128, 123); + this.pbxIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxIcon.TabIndex = 0; + this.pbxIcon.TabStop = false; + // + // kwlblHeader + // + this.kwlblHeader.AutoSize = false; + this.kwlblHeader.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblHeader.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlblHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblHeader.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlblHeader.Location = new System.Drawing.Point(137, 0); + this.kwlblHeader.Name = "kwlblHeader"; + this.kwlblHeader.Padding = new System.Windows.Forms.Padding(5); + this.kwlblHeader.Size = new System.Drawing.Size(307, 50); + this.kwlblHeader.Text = "kryptonWrapLabel1"; + this.kwlblHeader.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kwlblContent + // + this.kwlblContent.AutoSize = false; + this.kwlblContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblContent.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlblContent.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblContent.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlblContent.Location = new System.Drawing.Point(137, 50); + this.kwlblContent.Name = "kwlblContent"; + this.kwlblContent.Padding = new System.Windows.Forms.Padding(5); + this.kwlblContent.Size = new System.Drawing.Size(307, 79); + this.kwlblContent.Text = "kryptonWrapLabel2"; + this.kwlblContent.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // VisualToastNotificationBasicForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(447, 179); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.FormTitleAlign = Krypton.Toolkit.PaletteRelativeAlign.Inherit; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationBasicForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.StateCommon.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.StateCommon.Border.Width = 2; + this.UseThemeFormChromeBorderWidth = false; + this.Load += new System.EventHandler(this.VisualToastNotificationBasicForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonPanel kryptonPanel2; + private TableLayoutPanel tableLayoutPanel1; + private PictureBox pbxIcon; + private KryptonWrapLabel kwlblHeader; + private KryptonWrapLabel kwlblContent; + private KryptonBorderEdge kryptonBorderEdge1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.cs new file mode 100644 index 000000000..1c6e97856 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.cs @@ -0,0 +1,429 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using ContentAlignment = System.Drawing.ContentAlignment; +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationBasicForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private SoundPlayer? _soundPlayer; + + private PaletteBase _palette; + + private readonly KryptonBasicToastNotificationData _basicToastNotificationData; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// The data. + public VisualToastNotificationBasicForm(KryptonBasicToastNotificationData data) + { + _basicToastNotificationData = data; + + InitializeComponent(); + + GotFocus += VisualToastNotificationBasicForm_GotFocus; + + Resize += VisualToastNotificationBasicForm_Resize; + + LocationChanged += VisualToastNotificationBasicForm_LocationChanged; + + DoubleBuffered = true; + + UpdateBorderColors(); + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + UpdateFadeValues(); + */ + + UpdateFonts(); + + ShowDoNotShowAgainOption(); + } + + #endregion + + #region Public + + internal bool ReturnValue => kchkDoNotShowAgain.Checked; + + internal CheckState ReturnCheckBoxStateValue => kchkDoNotShowAgain.CheckState; + + #endregion + + #region Implementation + + private void UpdateText() + { + kwlblContent.Text = _basicToastNotificationData.NotificationContent ?? string.Empty; + + kwlblHeader.Text = _basicToastNotificationData.NotificationTitle; + + kwlblHeader.TextAlign = + _basicToastNotificationData.NotificationTitleAlignment ?? ContentAlignment.MiddleCenter; + } + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _basicToastNotificationData.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon.Border.Color2 = _basicToastNotificationData.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + private void UpdateFadeValues() => FadeValues.FadingEnabled = _basicToastNotificationData.UseFade; + */ + + private void UpdateFonts() + { + kwlblContent.StateCommon.Font = _basicToastNotificationData.NotificationContentFont ?? + KryptonManager.CurrentGlobalPalette.BaseFont; + + if (_basicToastNotificationData.NotificationTitleFont != null) + { + kwlblContent.LabelStyle = LabelStyle.NormalControl; + + kwlblHeader.StateCommon.Font = + _basicToastNotificationData.NotificationTitleFont ?? _palette.Header1ShortFont; + } + else + { + kwlblHeader.LabelStyle = LabelStyle.TitleControl; + } + } + + private void UpdateIcon() + { + switch (_basicToastNotificationData.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: +#if NET8_0_OR_GREATER + //SetIcon(GraphicsExtensions.ScaleImage()); +#else + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); +#endif + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + break; + case KryptonToastNotificationIcon.Application: + break; + case KryptonToastNotificationIcon.SystemApplication: + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_basicToastNotificationData.CustomImage != null + ? new Bitmap(_basicToastNotificationData.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void UpdateDoNotShowAgainOptionChecked() => + kchkDoNotShowAgain.Checked = _basicToastNotificationData.IsDoNotShowAgainOptionChecked; + + private void UpdateDoNotShowAgainOptionCheckState() => kchkDoNotShowAgain.CheckState = + _basicToastNotificationData.DoNotShowAgainOptionCheckState ?? CheckState.Unchecked; + + private void SetIcon(Bitmap? image) => pbxIcon.Image = image; + + private void UpdateLocation() => + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _basicToastNotificationData.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + + private void ReportToastLocation() => klblToastLocation.Text = _basicToastNotificationData.ReportToastLocation ? $"Location: X: {Location.X}, Y: {Location.Y}" : string.Empty; + + private void VisualToastNotificationBasicForm_Load(object sender, EventArgs e) + { + UpdateSizing(); + + UpdateLocation(); + + ReportToastLocation(); + + ShowCloseButton(); + + _timer?.Start(); + + _soundPlayer?.Play(); + } + + private void UpdateSizing() + { + if (FormBorderStyle == FormBorderStyle.None) + { + // Add some height, if form border style equals 'None' + + var width = Size.Width; + + // ToDo: Use scaling here, to support larger screens + + var height = Size.Height + GlobalStaticValues.DEFAULT_PADDING; + + Size = new Size(width, height); + } + } + + private void VisualToastNotificationBasicForm_Resize(object? sender, EventArgs e) + { + WindowState = WindowState switch + { + FormWindowState.Maximized => FormWindowState.Normal, + _ => WindowState + }; + } + + private void VisualToastNotificationBasicForm_GotFocus(object? sender, EventArgs e) => kbtnDismiss.Focus(); + + private void VisualToastNotificationBasicForm_LocationChanged(object? sender, EventArgs e) + { + if (_basicToastNotificationData.ReportToastLocation) + { + ReportToastLocation(); + } + } + + private void kbtnDismiss_Click(object sender, EventArgs e) => Close(); + + private void ShowCloseButton() + { + CloseBox = _basicToastNotificationData.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _basicToastNotificationData.ShowCloseBox ?? false; + } + + private void ShowDoNotShowAgainOption() + { + kchkDoNotShowAgain.Visible = _basicToastNotificationData.ShowDoNotShowAgainOption ?? false; + + kchkDoNotShowAgain.Checked = _basicToastNotificationData.IsDoNotShowAgainOptionChecked; + + kchkDoNotShowAgain.CheckState = _basicToastNotificationData.DoNotShowAgainOptionCheckState ?? CheckState.Unchecked; + + kchkDoNotShowAgain.ThreeState = _basicToastNotificationData.UseDoNotShowAgainOptionThreeState ?? false; + + kchkDoNotShowAgain.Text = _basicToastNotificationData.OptionalCheckBoxText ?? KryptonManager.Strings.CustomStrings.DoNotShowAgain; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + #region Show + + public new void Show() + { + TopMost = _basicToastNotificationData.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + if (_basicToastNotificationData.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _basicToastNotificationData.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + if (_time == _basicToastNotificationData.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + + base.Show(); + } + + public new DialogResult ShowDialog() + { + TopMost = _basicToastNotificationData.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + if (_basicToastNotificationData.IsDoNotShowAgainOptionChecked) + { + UpdateDoNotShowAgainOptionChecked(); + } + + if (_basicToastNotificationData.DoNotShowAgainOptionCheckState != null) + { + UpdateDoNotShowAgainOptionCheckState(); + } + + if (_basicToastNotificationData.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _basicToastNotificationData.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + if (_time == _basicToastNotificationData.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + #endregion + + #region Internal Show Methods + + internal static bool InternalShowWithBooleanReturnValue(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicForm(toastNotificationData); + + if (toast.ShowDialog() == DialogResult.OK) + { + return toast.ReturnValue; + } + else + { + return false; + } + } + + internal static CheckState InternalShowWithCheckStateReturnValue( + KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicForm(toastNotificationData); + + return toast.ShowDialog() == DialogResult.OK + ? toast.ReturnCheckBoxStateValue + : CheckState.Unchecked; + } + + internal static void InternalShow(KryptonBasicToastNotificationData toastNotificationData) + { + var toast = new VisualToastNotificationBasicForm(toastNotificationData); + + toast.Show(); + } + + #endregion + + #endregion + + #region Protected Overrides + + protected override void OnLoad(EventArgs e) + { + if (_basicToastNotificationData.DoNotShowAgainOptionCheckState == CheckState.Checked || _basicToastNotificationData.IsDoNotShowAgainOptionChecked) + { + Hide(); + } + + base.OnLoad(e); + } + + protected override void OnFormClosing(FormClosingEventArgs e) + { + base.OnFormClosing(e); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.resx similarity index 100% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.resx rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicForm.resx diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.Designer.cs new file mode 100644 index 000000000..f2afd2a5c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.Designer.cs @@ -0,0 +1,267 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationBasicWithProgressBarForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxImage = new System.Windows.Forms.PictureBox(); + this.kwlblNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlblNotificationContent = new Krypton.Toolkit.KryptonWrapLabel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlFooter = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFooter)).BeginInit(); + this.kpnlFooter.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tableLayoutPanel1); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(589, 250); + this.kpnlMain.TabIndex = 2; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.kpbCountDown, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.pbxImage, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kwlblNotificationTitle, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kwlblNotificationContent, 1, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(589, 250); + this.tableLayoutPanel1.TabIndex = 0; + // + // kpbCountDown + // + this.tableLayoutPanel1.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 221); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(583, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 0; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxImage + // + this.pbxImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxImage.Location = new System.Drawing.Point(5, 5); + this.pbxImage.Margin = new System.Windows.Forms.Padding(5); + this.pbxImage.Name = "pbxImage"; + this.tableLayoutPanel1.SetRowSpan(this.pbxImage, 2); + this.pbxImage.Size = new System.Drawing.Size(128, 208); + this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxImage.TabIndex = 1; + this.pbxImage.TabStop = false; + // + // kwlblNotificationTitle + // + this.kwlblNotificationTitle.AutoSize = false; + this.kwlblNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlblNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlblNotificationTitle.Location = new System.Drawing.Point(141, 0); + this.kwlblNotificationTitle.Name = "kwlblNotificationTitle"; + this.kwlblNotificationTitle.Size = new System.Drawing.Size(445, 49); + this.kwlblNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlblNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kwlblNotificationContent + // + this.kwlblNotificationContent.AutoSize = false; + this.kwlblNotificationContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblNotificationContent.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlblNotificationContent.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblNotificationContent.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlblNotificationContent.Location = new System.Drawing.Point(141, 49); + this.kwlblNotificationContent.Name = "kwlblNotificationContent"; + this.kwlblNotificationContent.Size = new System.Drawing.Size(445, 169); + this.kwlblNotificationContent.Text = "kryptonWrapLabel2"; + this.kwlblNotificationContent.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(589, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlFooter + // + this.kpnlFooter.Controls.Add(this.tableLayoutPanel2); + this.kpnlFooter.Controls.Add(this.kryptonBorderEdge1); + this.kpnlFooter.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlFooter.Location = new System.Drawing.Point(0, 250); + this.kpnlFooter.Name = "kpnlFooter"; + this.kpnlFooter.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlFooter.Size = new System.Drawing.Size(589, 50); + this.kpnlFooter.TabIndex = 1; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(589, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(513, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(556, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // VisualToastNotificationBasicWithProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(589, 300); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlFooter); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationBasicWithProgressBarForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationBasicWithProgressBarForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFooter)).EndInit(); + this.kpnlFooter.ResumeLayout(false); + this.kpnlFooter.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + private KryptonPanel kpnlMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxImage; + private KryptonWrapLabel kwlblNotificationTitle; + private KryptonWrapLabel kwlblNotificationContent; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlFooter; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.cs new file mode 100644 index 000000000..bba558ef9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.cs @@ -0,0 +1,383 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using ContentAlignment = System.Drawing.ContentAlignment; +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationBasicWithProgressBarForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time, _countdownValue; + + private Timer _timer; + + private SoundPlayer? _soundPlayer; + + private PaletteBase _palette; + + private readonly KryptonBasicToastNotificationData _basicToastNotificationData; + + #endregion + + #region Identity + + public VisualToastNotificationBasicWithProgressBarForm(KryptonBasicToastNotificationData data) + { + _basicToastNotificationData = data; + + InitializeComponent(); + + GotFocus += VisualToastNotificationBasicWithProgressBarForm_GotFocus; + + Resize += VisualToastNotificationBasicWithProgressBarForm_Resize; + + LocationChanged += VisualToastNotificationBasicWithProgressBarForm_LocationChanged; + + DoubleBuffered = true; + + UpdateBorderColors(); + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + UpdateFadeValues(); + */ + + UpdateFonts(); + } + + #endregion + + #region Public + + internal bool ReturnValue => kchkDoNotShowAgain.Checked; + + internal CheckState ReturnCheckBoxStateValue => kchkDoNotShowAgain.CheckState; + + #endregion + + #region Implementation + + private void UpdateText() + { + kwlblNotificationContent.Text = _basicToastNotificationData.NotificationContent ?? string.Empty; + + kwlblNotificationTitle.Text = _basicToastNotificationData.NotificationTitle; + + kwlblNotificationTitle.TextAlign = + _basicToastNotificationData.NotificationTitleAlignment ?? ContentAlignment.MiddleCenter; + } + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _basicToastNotificationData.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon.Border.Color2 = _basicToastNotificationData.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + private void UpdateFadeValues() => FadeValues.FadingEnabled = _basicToastNotificationData.UseFade; + */ + + private void UpdateFonts() + { + kwlblNotificationContent.StateCommon.Font = _basicToastNotificationData.NotificationContentFont ?? + KryptonManager.CurrentGlobalPalette.BaseFont; + + if (_basicToastNotificationData.NotificationTitleFont != null) + { + kwlblNotificationContent.LabelStyle = LabelStyle.NormalControl; + + kwlblNotificationTitle.StateCommon.Font = + _basicToastNotificationData.NotificationTitleFont ?? _palette.Header1ShortFont; + } + else + { + kwlblNotificationTitle.LabelStyle = LabelStyle.TitleControl; + } + } + + private void UpdateIcon() + { + switch (_basicToastNotificationData.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: +#if NET8_0_OR_GREATER + //SetIcon(GraphicsExtensions.ScaleImage()); +#else + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); +#endif + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + break; + case KryptonToastNotificationIcon.Application: + break; + case KryptonToastNotificationIcon.SystemApplication: + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_basicToastNotificationData.CustomImage != null + ? new Bitmap(_basicToastNotificationData.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void UpdateDoNotShowAgainOptionChecked() => + kchkDoNotShowAgain.Checked = _basicToastNotificationData.IsDoNotShowAgainOptionChecked; + + private void UpdateDoNotShowAgainOptionCheckState() => + kchkDoNotShowAgain.CheckState = + _basicToastNotificationData.DoNotShowAgainOptionCheckState ?? CheckState.Unchecked; + + private void SetIcon(Bitmap? image) => pbxImage.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _basicToastNotificationData.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen!.WorkingArea.Height - Height - 5); + } + + private void VisualToastNotificationBasicWithProgressBarForm_Load(object sender, EventArgs e) + { + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + + _soundPlayer?.Play(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + } + + private void VisualToastNotificationBasicWithProgressBarForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationBasicWithProgressBarForm_GotFocus(object? sender, EventArgs e) + { + kbtnDismiss.Focus(); + } + + private void VisualToastNotificationBasicWithProgressBarForm_LocationChanged(object? sender, EventArgs e) + { + if (_basicToastNotificationData.ReportToastLocation) + { + ReportToastLocation(); + } + } + + private void ReportToastLocation() => klblToastLocation.Text = _basicToastNotificationData.ReportToastLocation ? $"Location: X: {Location.X}, Y: {Location.Y}" : string.Empty; + + private void kbtnDismiss_Click(object sender, EventArgs e) + { + Close(); + } + + private void ShowCloseButton() + { + CloseBox = _basicToastNotificationData.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _basicToastNotificationData.ShowCloseBox ?? false; + } + + private void UpdateProgressBarText() => kpbCountDown.Text = _basicToastNotificationData.ShowCountDownSecondsOnProgressBar ? $@"{_basicToastNotificationData.CountDownSeconds - _time}" : string.Empty; + + public new void Show() + { + TopMost = _basicToastNotificationData.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + if (_basicToastNotificationData.CountDownSeconds != 0) + { + _countdownValue = _basicToastNotificationData.CountDownSeconds ?? 60; + + kpbCountDown.Maximum = _countdownValue; + + kpbCountDown.Value = _countdownValue; + + UpdateProgressBarText(); + + _timer = new Timer(); + + _timer.Interval = _basicToastNotificationData.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + UpdateProgressBarText(); + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + + base.Show(); + } + + public new DialogResult ShowDialog() + { + TopMost = _basicToastNotificationData.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + if (_basicToastNotificationData.IsDoNotShowAgainOptionChecked) + { + UpdateDoNotShowAgainOptionChecked(); + } + + if (_basicToastNotificationData.DoNotShowAgainOptionCheckState != null) + { + UpdateDoNotShowAgainOptionCheckState(); + } + + if (_basicToastNotificationData.CountDownSeconds != 0) + { + _countdownValue = _basicToastNotificationData.CountDownSeconds ?? 60; + + kpbCountDown.Maximum = _countdownValue; + + kpbCountDown.Value = _countdownValue; + + UpdateProgressBarText(); + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss}"; + + _timer = new Timer(); + + _timer.Interval = _basicToastNotificationData.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + UpdateProgressBarText(); + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss}"; + + if (_time == _basicToastNotificationData.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + internal static bool InternalShowWithBooleanReturnValue(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicWithProgressBarForm(toastNotificationData); + + return toast.ShowDialog() == DialogResult.OK && toast.ReturnValue; + } + + internal static CheckState InternalShowWithCheckStateReturnValue(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicWithProgressBarForm(toastNotificationData); + + return toast.ShowDialog() == DialogResult.OK + ? toast.ReturnCheckBoxStateValue + : CheckState.Unchecked; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + internal static void InternalShow(KryptonBasicToastNotificationData toastNotificationData) + { + var kt = new VisualToastNotificationBasicWithProgressBarForm(toastNotificationData); + + kt.Show(); + } + + #endregion + } +} diff --git a/Source/Krypton Components/TestForm/Form2.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.resx similarity index 100% rename from Source/Krypton Components/TestForm/Form2.resx rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/LTR/VisualToastNotificationBasicWithProgressBarForm.resx diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.Designer.cs new file mode 100644 index 000000000..b8addb780 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.Designer.cs @@ -0,0 +1,267 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationBasicRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxImage = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlToastHeader = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlToastContent = new Krypton.Toolkit.KryptonWrapLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel3); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 219); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(577, 50); + this.kpnlButtons.TabIndex = 0; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 4; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel3.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(577, 49); + this.tableLayoutPanel3.TabIndex = 4; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(78, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(496, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(522, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(577, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(577, 219); + this.kryptonPanel1.TabIndex = 1; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.pbxImage, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(577, 219); + this.tableLayoutPanel1.TabIndex = 0; + // + // pbxImage + // + this.pbxImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxImage.Location = new System.Drawing.Point(444, 5); + this.pbxImage.Margin = new System.Windows.Forms.Padding(5); + this.pbxImage.Name = "pbxImage"; + this.pbxImage.Size = new System.Drawing.Size(128, 209); + this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxImage.TabIndex = 0; + this.pbxImage.TabStop = false; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.kwlToastHeader, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kwlToastContent, 0, 1); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(433, 213); + this.tableLayoutPanel2.TabIndex = 1; + // + // kwlToastHeader + // + this.kwlToastHeader.AutoSize = false; + this.kwlToastHeader.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlToastHeader.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlToastHeader.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlToastHeader.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlToastHeader.Location = new System.Drawing.Point(3, 0); + this.kwlToastHeader.Name = "kwlToastHeader"; + this.kwlToastHeader.Size = new System.Drawing.Size(427, 50); + this.kwlToastHeader.Text = "kryptonWrapLabel1"; + this.kwlToastHeader.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlToastContent + // + this.kwlToastContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlToastContent.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlToastContent.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlToastContent.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlToastContent.Location = new System.Drawing.Point(3, 50); + this.kwlToastContent.Name = "kwlToastContent"; + this.kwlToastContent.Size = new System.Drawing.Size(427, 163); + this.kwlToastContent.Text = "kryptonWrapLabel2"; + this.kwlToastContent.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // VisualToastNotificationBasicRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(577, 269); + this.Controls.Add(this.kryptonPanel1); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationBasicRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationBasicRtlAwareForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonPanel kryptonPanel1; + private KryptonBorderEdge kryptonBorderEdge1; + private TableLayoutPanel tableLayoutPanel1; + private PictureBox pbxImage; + private TableLayoutPanel tableLayoutPanel2; + private KryptonWrapLabel kwlToastHeader; + private KryptonWrapLabel kwlToastContent; + private TableLayoutPanel tableLayoutPanel3; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.cs new file mode 100644 index 000000000..2d086ab90 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.cs @@ -0,0 +1,313 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using ContentAlignment = System.Drawing.ContentAlignment; +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationBasicRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private SoundPlayer? _soundPlayer; + + private PaletteBase _palette; + + private readonly KryptonBasicToastNotificationData _basicToastNotificationData; + + #endregion + + #region Public + + internal bool ReturnValue => kchkDoNotShowAgain.Checked; + + internal CheckState ReturnCheckBoxStateValue => kchkDoNotShowAgain.CheckState; + + #endregion + + #region Identity + + public VisualToastNotificationBasicRtlAwareForm(KryptonBasicToastNotificationData toastNotificationData) + { + _basicToastNotificationData = toastNotificationData; + + InitializeComponent(); + + GotFocus += VisualToastNotificationBasicRtlAwareForm_GotFocus; + + Resize += VisualToastNotificationBasicRtlAwareForm_Resize; + + LocationChanged += VisualToastNotificationBasicRtlAwareForm_LocationChanged; + + DoubleBuffered = true; + + UpdateBorderColors(); + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + UpdateFadeValues(); + */ + + UpdateFonts(); + } + + #endregion + + #region Implementation + + private void UpdateText() + { + kwlToastContent.Text = _basicToastNotificationData.NotificationContent ?? string.Empty; + + kwlToastHeader.Text = _basicToastNotificationData.NotificationTitle; + + kwlToastContent.TextAlign = + _basicToastNotificationData.NotificationTitleAlignment ?? ContentAlignment.MiddleCenter; + } + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _basicToastNotificationData.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon.Border.Color2 = _basicToastNotificationData.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + private void UpdateFadeValues() => FadeValues.FadingEnabled = _basicToastNotificationData.UseFade; + */ + private void UpdateFonts() + { + kwlToastContent.StateCommon.Font = _basicToastNotificationData.NotificationContentFont ?? + KryptonManager.CurrentGlobalPalette.BaseFont; + + if (_basicToastNotificationData.NotificationTitleFont != null) + { + kwlToastContent.LabelStyle = LabelStyle.NormalControl; + + kwlToastHeader.StateCommon.Font = + _basicToastNotificationData.NotificationTitleFont ?? _palette.Header1ShortFont; + } + else + { + kwlToastContent.LabelStyle = LabelStyle.TitleControl; + } + } + + private void UpdateIcon() + { + switch (_basicToastNotificationData.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: +#if NET8_0_OR_GREATER + //SetIcon(GraphicsExtensions.ScaleImage()); +#else + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); +#endif + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + break; + case KryptonToastNotificationIcon.Application: + break; + case KryptonToastNotificationIcon.SystemApplication: + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_basicToastNotificationData.CustomImage != null + ? new Bitmap(_basicToastNotificationData.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void SetIcon(Bitmap? image) => pbxImage.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _basicToastNotificationData.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void ReportToastLocation() => klblToastLocation.Text = _basicToastNotificationData.ReportToastLocation ? $"Location: X: {Location.X}, Y: {Location.Y}" : string.Empty; + + private void ShowCloseButton() + { + CloseBox = _basicToastNotificationData.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _basicToastNotificationData.ShowCloseBox ?? false; + } + + private void VisualToastNotificationBasicRtlAwareForm_LocationChanged(object? sender, EventArgs e) + { + if (_basicToastNotificationData.ReportToastLocation) + { + ReportToastLocation(); + } + } + + private void VisualToastNotificationBasicRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationBasicRtlAwareForm_GotFocus(object? sender, EventArgs e) + { + kbtnDismiss.Focus(); + } + + private void VisualToastNotificationBasicRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateLocation(); + + ReportToastLocation(); + + ShowCloseButton(); + + _timer.Start(); + + _soundPlayer?.Play(); + } + + private void kbtnDismiss_Click(object sender, EventArgs e) + { + Close(); + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + public new void Show() + { + TopMost = _basicToastNotificationData.TopMost ?? true; + + //Opacity = 0; + + UpdateText(); + + UpdateIcon(); + + if (_basicToastNotificationData.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_basicToastNotificationData.CountDownSeconds - _time})"; + + if (_time == _basicToastNotificationData.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + + base.Show(); + } + + internal static bool InternalShowWithBooleanReturnValue(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicRtlAwareForm(toastNotificationData); + + return toast.ShowDialog() == DialogResult.OK && toast.ReturnValue; + } + + internal static CheckState InternalShowWithCheckStateReturnValue(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicRtlAwareForm(toastNotificationData); + + return toast.ShowDialog() == DialogResult.OK + ? toast.ReturnCheckBoxStateValue + : CheckState.Unchecked; + } + + internal static void InternalShow(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicRtlAwareForm(toastNotificationData); + + toast.Show(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form3.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.resx similarity index 100% rename from Source/Krypton Components/TestForm/Form3.resx rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicRtlAwareForm.resx diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.Designer.cs new file mode 100644 index 000000000..0c5d55173 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.Designer.cs @@ -0,0 +1,269 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationBasicWithProgressBarRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlFooter = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxImage = new System.Windows.Forms.PictureBox(); + this.kwlblNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlblNotificationContent = new Krypton.Toolkit.KryptonWrapLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFooter)).BeginInit(); + this.kpnlFooter.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).BeginInit(); + this.SuspendLayout(); + // + // kpnlFooter + // + this.kpnlFooter.Controls.Add(this.tableLayoutPanel2); + this.kpnlFooter.Controls.Add(this.kryptonBorderEdge1); + this.kpnlFooter.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlFooter.Location = new System.Drawing.Point(0, 250); + this.kpnlFooter.Name = "kpnlFooter"; + this.kpnlFooter.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlFooter.Size = new System.Drawing.Size(589, 50); + this.kpnlFooter.TabIndex = 2; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(589, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(53, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(508, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(534, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(589, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tableLayoutPanel1); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(589, 250); + this.kpnlMain.TabIndex = 3; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.kpbCountDown, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.pbxImage, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kwlblNotificationTitle, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kwlblNotificationContent, 1, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(589, 250); + this.tableLayoutPanel1.TabIndex = 0; + // + // kpbCountDown + // + this.tableLayoutPanel1.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 221); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(583, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 0; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxImage + // + this.pbxImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxImage.Location = new System.Drawing.Point(456, 5); + this.pbxImage.Margin = new System.Windows.Forms.Padding(5); + this.pbxImage.Name = "pbxImage"; + this.tableLayoutPanel1.SetRowSpan(this.pbxImage, 2); + this.pbxImage.Size = new System.Drawing.Size(128, 208); + this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxImage.TabIndex = 1; + this.pbxImage.TabStop = false; + // + // kwlblNotificationTitle + // + this.kwlblNotificationTitle.AutoSize = false; + this.kwlblNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlblNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlblNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlblNotificationTitle.Name = "kwlblNotificationTitle"; + this.kwlblNotificationTitle.Size = new System.Drawing.Size(445, 49); + this.kwlblNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlblNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kwlblNotificationContent + // + this.kwlblNotificationContent.AutoSize = false; + this.kwlblNotificationContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblNotificationContent.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlblNotificationContent.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblNotificationContent.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlblNotificationContent.Location = new System.Drawing.Point(3, 49); + this.kwlblNotificationContent.Name = "kwlblNotificationContent"; + this.kwlblNotificationContent.Size = new System.Drawing.Size(445, 169); + this.kwlblNotificationContent.Text = "kryptonWrapLabel2"; + this.kwlblNotificationContent.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // VisualToastNotificationBasicWithProgressBarRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(589, 300); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlFooter); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationBasicWithProgressBarRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationBasicWithProgressBarRtlAwareForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFooter)).EndInit(); + this.kpnlFooter.ResumeLayout(false); + this.kpnlFooter.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlFooter; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxImage; + private KryptonWrapLabel kwlblNotificationTitle; + private KryptonWrapLabel kwlblNotificationContent; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.cs new file mode 100644 index 000000000..f26a57c2a --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.cs @@ -0,0 +1,375 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using ContentAlignment = System.Drawing.ContentAlignment; +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationBasicWithProgressBarRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time, _countdownValue; + + private Timer _timer; + + private SoundPlayer? _soundPlayer; + + private PaletteBase _palette; + + private readonly KryptonBasicToastNotificationData _basicToastNotificationData; + + #endregion + + #region Public + + internal bool ReturnValue => kchkDoNotShowAgain.Checked; + + internal CheckState ReturnCheckBoxStateValue => kchkDoNotShowAgain.CheckState; + + #endregion + + #region Identity + + public VisualToastNotificationBasicWithProgressBarRtlAwareForm(KryptonBasicToastNotificationData data) + { + InitializeComponent(); + + _basicToastNotificationData = data; + + GotFocus += (sender, args) => kbtnDismiss.Focus(); + + LocationChanged += VisualToastNotificationBasicWithProgressBarRtlAwareForm_LocationChanged; + + Resize += VisualToastNotificationBasicWithProgressBarRtlAwareForm_Resize; + + DoubleBuffered = true; + + UpdateBorderColors(); + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + UpdateFadeValues(); + */ + + UpdateFonts(); + } + + #endregion + + #region Implementation + + private void UpdateText() + { + kwlblNotificationContent.Text = _basicToastNotificationData.NotificationContent ?? string.Empty; + + kwlblNotificationTitle.Text = _basicToastNotificationData.NotificationTitle; + + kwlblNotificationTitle.TextAlign = + _basicToastNotificationData.NotificationTitleAlignment ?? ContentAlignment.MiddleCenter; + } + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _basicToastNotificationData.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon.Border.Color2 = _basicToastNotificationData.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + private void UpdateFadeValues() => FadeValues.FadingEnabled = _basicToastNotificationData.UseFade; + */ + + private void UpdateFonts() + { + kwlblNotificationContent.StateCommon.Font = _basicToastNotificationData.NotificationContentFont ?? + KryptonManager.CurrentGlobalPalette.BaseFont; + + if (_basicToastNotificationData.NotificationTitleFont != null) + { + kwlblNotificationContent.LabelStyle = LabelStyle.NormalControl; + + kwlblNotificationTitle.StateCommon.Font = + _basicToastNotificationData.NotificationTitleFont ?? _palette.Header1ShortFont; + } + else + { + kwlblNotificationTitle.LabelStyle = LabelStyle.TitleControl; + } + } + + private void UpdateIcon() + { + switch (_basicToastNotificationData.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: +#if NET8_0_OR_GREATER + //SetIcon(GraphicsExtensions.ScaleImage()); +#else + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); +#endif + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + break; + case KryptonToastNotificationIcon.Application: + break; + case KryptonToastNotificationIcon.SystemApplication: + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_basicToastNotificationData.CustomImage != null + ? new Bitmap(_basicToastNotificationData.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void UpdateDoNotShowAgainOptionChecked() => + kchkDoNotShowAgain.Checked = _basicToastNotificationData.IsDoNotShowAgainOptionChecked; + + private void UpdateDoNotShowAgainOptionCheckState() => + kchkDoNotShowAgain.CheckState = + _basicToastNotificationData.DoNotShowAgainOptionCheckState ?? CheckState.Unchecked; + + private void SetIcon(Bitmap? image) => pbxImage.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _basicToastNotificationData.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void ReportToastLocation() => klblToastLocation.Text = _basicToastNotificationData.ReportToastLocation ? $"Location: X: {Location.X}, Y: {Location.Y}" : string.Empty; + + private void ShowCloseButton() + { + CloseBox = _basicToastNotificationData.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _basicToastNotificationData.ShowCloseBox ?? false; + } + + private void VisualToastNotificationBasicWithProgressBarRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationBasicWithProgressBarRtlAwareForm_LocationChanged(object? sender, EventArgs e) + { + if (_basicToastNotificationData.ReportToastLocation) + { + ReportToastLocation(); + } + } + + private void VisualToastNotificationBasicWithProgressBarRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + + _soundPlayer?.Play(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + } + + private void kbtnDismiss_Click(object sender, EventArgs e) => Close(); + + private void UpdateProgressBarText() => kpbCountDown.Text = _basicToastNotificationData.ShowCountDownSecondsOnProgressBar ? $@"{_basicToastNotificationData.CountDownSeconds - _time}" : string.Empty; + + public new void Show() + { + TopMost = _basicToastNotificationData.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + if (_basicToastNotificationData.CountDownSeconds != 0) + { + _countdownValue = _basicToastNotificationData.CountDownSeconds ?? 60; + + kpbCountDown.Maximum = _countdownValue; + + kpbCountDown.Value = _countdownValue; + + UpdateProgressBarText(); + + _timer = new Timer(); + + _timer.Interval = _basicToastNotificationData.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + UpdateProgressBarText(); + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + + base.Show(); + } + + public new DialogResult ShowDialog() + { + TopMost = _basicToastNotificationData.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + if (_basicToastNotificationData.IsDoNotShowAgainOptionChecked) + { + UpdateDoNotShowAgainOptionChecked(); + } + + if (_basicToastNotificationData.DoNotShowAgainOptionCheckState != null) + { + UpdateDoNotShowAgainOptionCheckState(); + } + + if (_basicToastNotificationData.CountDownSeconds != 0) + { + _countdownValue = _basicToastNotificationData.CountDownSeconds ?? 60; + + kpbCountDown.Maximum = _countdownValue; + + kpbCountDown.Value = _countdownValue; + + UpdateProgressBarText(); + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss}"; + + _timer = new Timer(); + + _timer.Interval = _basicToastNotificationData.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + UpdateProgressBarText(); + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss}"; + + if (_time == _basicToastNotificationData.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + internal static bool InternalShowWithBooleanReturnValue(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicWithProgressBarRtlAwareForm(toastNotificationData); + + return toast.ShowDialog() == DialogResult.OK && toast.ReturnValue; + } + + internal static CheckState InternalShowWithCheckStateReturnValue(KryptonBasicToastNotificationData toastNotificationData) + { + using var toast = new VisualToastNotificationBasicWithProgressBarRtlAwareForm(toastNotificationData); + + return toast.ShowDialog() == DialogResult.OK + ? toast.ReturnCheckBoxStateValue + : CheckState.Unchecked; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + internal static void ShowNotification(KryptonBasicToastNotificationData toastNotificationData) + { + var kt = new VisualToastNotificationBasicWithProgressBarRtlAwareForm(toastNotificationData); + + kt.Show(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form6.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.resx similarity index 100% rename from Source/Krypton Components/TestForm/Form6.resx rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/Basic/RTL/VisualToastNotificationBasicWithProgressBarRtlAwareForm.resx diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.Designer.cs new file mode 100644 index 000000000..aee6c30ff --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.Designer.cs @@ -0,0 +1,335 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationComboBoxUserInputForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kcmbUserInput = new Krypton.Toolkit.KryptonComboBox(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).BeginInit(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 3; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(488, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(556, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 4; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kcmbUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(141, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 269); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kcmbUserInput + // + this.kcmbUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kcmbUserInput.DropDownWidth = 464; + this.kcmbUserInput.IntegralHeight = false; + this.kcmbUserInput.Location = new System.Drawing.Point(3, 297); + this.kcmbUserInput.Name = "kcmbUserInput"; + this.kcmbUserInput.Size = new System.Drawing.Size(464, 21); + this.kcmbUserInput.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbUserInput.TabIndex = 3; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationComboBoxUserInputForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationComboBoxUserInputForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputForm_LocationChanged); + this.Resize += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputForm_Resize); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).EndInit(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonComboBox kcmbUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.cs new file mode 100644 index 000000000..6aabeb744 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.cs @@ -0,0 +1,344 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationComboBoxUserInputForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kcmbUserInput.Text ?? string.Empty; + + #endregion + + #region Identity + + public VisualToastNotificationComboBoxUserInputForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kcmbUserInput.Focus(); + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateComboBoxItems() + { + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kcmbUserInput.Items.Add(item); + } + + kcmbUserInput.SelectedIndex = _data.SelectedIndex ?? 1; + } + + kcmbUserInput.DropDownStyle = _data.UserInputComboBoxStyle ?? ComboBoxStyle.DropDown; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void VisualToastNotificationComboBoxUserInputForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + + _data.DisplayDebugData(_data); + } + + private void VisualToastNotificationComboBoxUserInputForm_Resize(object sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationComboBoxUserInputForm_LocationChanged(object sender, EventArgs e) + { + if (_data.ReportToastLocation) + { + ReportToastLocation(); + } + } + + private void ReportToastLocation() => klblToastLocation.Text = _data.ReportToastLocation ? $"Location: X: {Location.X}, Y: {Location.Y}" : string.Empty; + + private void UpdateInputBoxStyle() => + kcmbUserInput.DropDownStyle = _data.UserInputComboBoxStyle ?? ComboBoxStyle.DropDown; + + private void UpdateOwner(IWin32Window? owner) + { + //_data.o + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + public new KryptonToastNotificationResult ShowToastNotificationResult() + { + + return base.ShowToastNotificationResult(); + } + + public new KryptonToastNotificationResult ShowToastNotificationResult(IWin32Window owner) + { + + return base.ShowToastNotificationResult(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationComboBoxUserInputForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : string.Empty; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : string.Empty; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationComboBoxUserInputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.Designer.cs new file mode 100644 index 000000000..d6cbe08b0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.Designer.cs @@ -0,0 +1,328 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDateTimeUserInputForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdtpUserInput = new Krypton.Toolkit.KryptonDateTimePicker(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 4; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(488, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(556, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 5; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kdtpUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(141, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 269); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdtpUserInput + // + this.kdtpUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdtpUserInput.Location = new System.Drawing.Point(3, 297); + this.kdtpUserInput.Name = "kdtpUserInput"; + this.kdtpUserInput.Size = new System.Drawing.Size(464, 21); + this.kdtpUserInput.TabIndex = 2; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationDateTimeUserInputForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDateTimeUserInputForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDateTimeUserInputForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonDateTimePicker kdtpUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.cs new file mode 100644 index 000000000..b5a66d535 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.cs @@ -0,0 +1,303 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDateTimeUserInputForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal DateTime UserResponse => kdtpUserInput.Value; + + #endregion + + #region Identity + + public VisualToastNotificationDateTimeUserInputForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdtpUserInput.Focus(); + + UpdateBorderColors(); + } + + #endregion + + #region Impementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kdtpUserInput.Value = _data.InitialDateTimeValue ?? GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + + kdtpUserInput.Format = _data.DateTimeFormat ?? DateTimePickerFormat.Long; + + kdtpUserInput.CustomFormat = _data.CustomDateTimeFormat ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kdtpUserInput.MaxDate = _data.MaximumDateTimeValue ?? DateTime.MaxValue; + + kdtpUserInput.MinDate = _data.MinimumDateTimeValue ?? DateTime.MinValue; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationDateTimeUserInputForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static DateTime ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDateTimeUserInputForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDateTimeUserInputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.Designer.cs new file mode 100644 index 000000000..2abbf86fd --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.Designer.cs @@ -0,0 +1,328 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDomainUpDownUserInputForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdudUserInput = new Krypton.Toolkit.KryptonDomainUpDown(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 5; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(488, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(556, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 6; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kdudUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(141, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 268); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdudUserInput + // + this.kdudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdudUserInput.Location = new System.Drawing.Point(3, 296); + this.kdudUserInput.Name = "kdudUserInput"; + this.kdudUserInput.Size = new System.Drawing.Size(464, 22); + this.kdudUserInput.TabIndex = 2; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationDomainUpDownUserInputForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDomainUpDownUserInputForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDomainUpDownUserInputForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonDomainUpDown kdudUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.cs new file mode 100644 index 000000000..eacd019b6 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.cs @@ -0,0 +1,303 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDomainUpDownUserInputForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kdudUserInput.Text ?? string.Empty; + + #endregion + + #region Identity + + public VisualToastNotificationDomainUpDownUserInputForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdudUserInput.Focus(); + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kdudUserInput.Items.Add(item); + } + + kdudUserInput.SelectedIndex = _data.SelectedIndex ?? 1; + } + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void VisualToastNotificationDomainUpDownUserInputForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDomainUpDownUserInputForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : string.Empty; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : string.Empty; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationDomainUpDownUserInputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.Designer.cs new file mode 100644 index 000000000..fbe1766bc --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.Designer.cs @@ -0,0 +1,329 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationMaskedTextBoxUserInputForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kmtxtUserInput = new Krypton.Toolkit.KryptonMaskedTextBox(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 5; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(488, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(556, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 6; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kmtxtUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(141, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 267); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kmtxtUserInput + // + this.kmtxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kmtxtUserInput.Location = new System.Drawing.Point(3, 295); + this.kmtxtUserInput.Name = "kmtxtUserInput"; + this.kmtxtUserInput.Size = new System.Drawing.Size(464, 23); + this.kmtxtUserInput.TabIndex = 2; + this.kmtxtUserInput.Text = "kryptonMaskedTextBox1"; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationMaskedTextBoxUserInputForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationMaskedTextBoxUserInputForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationMaskedTextBoxUserInputForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonMaskedTextBox kmtxtUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.cs new file mode 100644 index 000000000..74b522c53 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.cs @@ -0,0 +1,295 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationMaskedTextBoxUserInputForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kmtxtUserInput.Text ?? string.Empty; + + #endregion + + #region Identity + + public VisualToastNotificationMaskedTextBoxUserInputForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kmtxtUserInput.Focus(); + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kmtxtUserInput.Text = GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationMaskedTextBoxUserInputForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationMaskedTextBoxUserInputForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationMaskedTextBoxUserInputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.Designer.cs new file mode 100644 index 000000000..c1f89e363 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.Designer.cs @@ -0,0 +1,348 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationNUDUserInputForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.knudUserInput = new Krypton.Toolkit.KryptonNumericUpDown(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 6; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(488, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(556, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 7; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.knudUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(141, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 268); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // knudUserInput + // + this.knudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.knudUserInput.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudUserInput.Location = new System.Drawing.Point(3, 296); + this.knudUserInput.Maximum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.knudUserInput.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.knudUserInput.Name = "knudUserInput"; + this.knudUserInput.Size = new System.Drawing.Size(464, 22); + this.knudUserInput.TabIndex = 2; + this.knudUserInput.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationNumericUpDownUserInputForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationNumericUpDownUserInputForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationNumericUpDownUserInputForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonNumericUpDown knudUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.cs new file mode 100644 index 000000000..7bc3e24c9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.cs @@ -0,0 +1,299 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationNUDUserInputForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal int UserResponse => Convert.ToInt32(knudUserInput.Value); + + #endregion + + #region Identity + + public VisualToastNotificationNUDUserInputForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => knudUserInput.Focus(); + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + knudUserInput.Value = _data.InitialNumericUpDownValue ?? 0; + + knudUserInput.Maximum = _data.MaximumNumericUpDownValue ?? 100; + + knudUserInput.Minimum = _data.MinimumNumericUpDownValue ?? 0; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationNumericUpDownUserInputForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static decimal ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationNUDUserInputForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : 0; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : 0; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationNUDUserInputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.Designer.cs new file mode 100644 index 000000000..4a6797ed9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.Designer.cs @@ -0,0 +1,328 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationTextBoxUserInputForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.ktxtUserInput = new Krypton.Toolkit.KryptonTextBox(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 7; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(488, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(556, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 8; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.ktxtUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(141, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 267); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ktxtUserInput + // + this.ktxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.ktxtUserInput.Location = new System.Drawing.Point(3, 295); + this.ktxtUserInput.Name = "ktxtUserInput"; + this.ktxtUserInput.Size = new System.Drawing.Size(464, 23); + this.ktxtUserInput.TabIndex = 2; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationTextBoxUserInputForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationTextBoxUserInputForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationTextBoxUserInputForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private KryptonTextBox ktxtUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.cs new file mode 100644 index 000000000..3d814fc81 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.cs @@ -0,0 +1,331 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationTextBoxUserInputForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #region Local Data + + private string _notificationContentText; + + private string _notificationTitleText; + + private KryptonToastNotificationIcon _toastNotificationIcon; + + #endregion + + #endregion + + #region Internal + + internal string UserResponse => ktxtUserInput.Text ?? string.Empty; + + #endregion + + #region Identity + + public VisualToastNotificationTextBoxUserInputForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + LoadData(); + + Resize += VisualToastNotificationTextBoxUserInputForm_Resize; + + GotFocus += VisualToastNotificationTextBoxUserInputForm_GotFocus; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void LoadData() + { + _notificationContentText = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + _notificationTitleText = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + _toastNotificationIcon = _data.NotificationIcon ?? KryptonToastNotificationIcon.None; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _notificationTitleText; + + kwlNotificationMessage.Text = _notificationContentText; + } + + private void UpdateCueValues() + { + // Set cue values + ktxtUserInput.CueHint.CueHintText = + _data.ToastNotificationCueText ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + ktxtUserInput.CueHint.Color1 = _data.ToastNotificationCueColor ?? Color.Gray; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_toastNotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationTextBoxUserInputForm_GotFocus(object? sender, EventArgs e) + { + ktxtUserInput.Focus(); + } + + private void VisualToastNotificationTextBoxUserInputForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationTextBoxUserInputForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateCueValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateCueValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationTextBoxUserInputForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/Normal/VisualToastNotificationTextBoxUserInputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.Designer.cs new file mode 100644 index 000000000..b71b4b699 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.Designer.cs @@ -0,0 +1,300 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationComboBoxUserInputWithProgressBarForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kcmbUserInput = new Krypton.Toolkit.KryptonComboBox(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 4; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 5; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kcmbUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(141, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 279); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kcmbUserInput + // + this.kcmbUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kcmbUserInput.DropDownWidth = 480; + this.kcmbUserInput.IntegralHeight = false; + this.kcmbUserInput.Location = new System.Drawing.Point(3, 307); + this.kcmbUserInput.Name = "kcmbUserInput"; + this.kcmbUserInput.Size = new System.Drawing.Size(480, 21); + this.kcmbUserInput.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbUserInput.TabIndex = 3; + this.kcmbUserInput.Text = "kryptonComboBox1"; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(554, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(597, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + // + // VisualToastNotificationComboBoxUserInputWithProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationComboBoxUserInputWithProgressBarForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputWithProgressBarForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private KryptonComboBox kcmbUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.cs new file mode 100644 index 000000000..12c176366 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.cs @@ -0,0 +1,320 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationComboBoxUserInputWithProgressBarForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kcmbUserInput.Text ?? string.Empty; + + #endregion + + #region Identity + + public VisualToastNotificationComboBoxUserInputWithProgressBarForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kcmbUserInput.Focus(); + + Resize += VisualToastNotificationComboBoxUserInputWithProgressBarForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateComboBoxItems() + { + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kcmbUserInput.Items.Add(item); + } + + kcmbUserInput.SelectedIndex = _data.SelectedIndex ?? 1; + } + + kcmbUserInput.DropDownStyle = _data.UserInputComboBoxStyle ?? ComboBoxStyle.DropDown; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void VisualToastNotificationComboBoxUserInputWithProgressBarForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationComboBoxUserInputWithProgressBarForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + + _data.DisplayDebugData(_data); + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationComboBoxUserInputWithProgressBarForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : string.Empty; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : string.Empty; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.Designer.cs new file mode 100644 index 000000000..28d19f642 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.Designer.cs @@ -0,0 +1,294 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDateTimeUserInputWithProgressBarForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdtpUserInput = new Krypton.Toolkit.KryptonDateTimePicker(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 5; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 6; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kdtpUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(141, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 279); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdtpUserInput + // + this.kdtpUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdtpUserInput.Location = new System.Drawing.Point(3, 307); + this.kdtpUserInput.Name = "kdtpUserInput"; + this.kdtpUserInput.Size = new System.Drawing.Size(480, 21); + this.kdtpUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(554, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(597, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + // + // VisualToastNotificationDateTimeUserInputWithProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDateTimeUserInputWithProgressBarForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDateTimeUserInputWithProgressBarForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private KryptonDateTimePicker kdtpUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.cs new file mode 100644 index 000000000..4d407bd8e --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.cs @@ -0,0 +1,317 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDateTimeUserInputWithProgressBarForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal DateTime UserResponse => kdtpUserInput.Value; + + #endregion + + #region Identity + + public VisualToastNotificationDateTimeUserInputWithProgressBarForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdtpUserInput.Focus(); + + Resize += VisualToastNotificationDateTimeUserInputWithProgressBarForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kdtpUserInput.Value = _data.InitialDateTimeValue ?? GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + + kdtpUserInput.Format = _data.DateTimeFormat ?? DateTimePickerFormat.Long; + + kdtpUserInput.CustomFormat = _data.CustomDateTimeFormat ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kdtpUserInput.MaxDate = _data.MaximumDateTimeValue ?? DateTime.MaxValue; + + kdtpUserInput.MinDate = _data.MinimumDateTimeValue ?? DateTime.MinValue; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationDateTimeUserInputWithProgressBarForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationDateTimeUserInputWithProgressBarForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static DateTime ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDateTimeUserInputWithProgressBarForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.Designer.cs new file mode 100644 index 000000000..301dac1bb --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.Designer.cs @@ -0,0 +1,294 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDomianUpDownInputWithProgressBarForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdudUserInput = new Krypton.Toolkit.KryptonDomainUpDown(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 6; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 7; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kdudUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(141, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 278); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdudUserInput + // + this.kdudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdudUserInput.Location = new System.Drawing.Point(3, 306); + this.kdudUserInput.Name = "kdudUserInput"; + this.kdudUserInput.Size = new System.Drawing.Size(480, 22); + this.kdudUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(554, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(597, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + // + // VisualToastNotificationDomianUpDownInputWithProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDomianUpDownInputWithProgressBarForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDomianUpDownInputWithProgressBarForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private KryptonDomainUpDown kdudUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.cs new file mode 100644 index 000000000..8b24932c5 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.cs @@ -0,0 +1,317 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDomianUpDownInputWithProgressBarForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kdudUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationDomianUpDownInputWithProgressBarForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdudUserInput.Focus(); + + Resize += VisualToastNotificationDomianUpDownInputWithProgressBarForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kdudUserInput.Items.Add(item); + } + + kdudUserInput.SelectedIndex = _data.SelectedIndex ?? 0; + } + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationDomianUpDownInputWithProgressBarForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationDomianUpDownInputWithProgressBarForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDomianUpDownInputWithProgressBarForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationDomianUpDownInputWithProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.Designer.cs new file mode 100644 index 000000000..88a1d97d0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.Designer.cs @@ -0,0 +1,294 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationMaskedTextBoxInputWithProgressBarForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kmtxtUserInput = new Krypton.Toolkit.KryptonMaskedTextBox(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 6; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 7; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kmtxtUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(141, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 277); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kmtxtUserInput + // + this.kmtxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kmtxtUserInput.Location = new System.Drawing.Point(3, 305); + this.kmtxtUserInput.Name = "kmtxtUserInput"; + this.kmtxtUserInput.Size = new System.Drawing.Size(480, 23); + this.kmtxtUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(554, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(597, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + // + // VisualToastNotificationMaskedTextBoxInputWithProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationMaskedTextBoxInputWithProgressBarForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationMaskedTextBoxInputWithProgressBarForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private KryptonMaskedTextBox kmtxtUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.cs new file mode 100644 index 000000000..31b22f6de --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.cs @@ -0,0 +1,309 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationMaskedTextBoxInputWithProgressBarForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kmtxtUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationMaskedTextBoxInputWithProgressBarForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kmtxtUserInput.Focus(); + + Resize += VisualToastNotificationMaskedTextBoxInputWithProgressBarForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kmtxtUserInput.Text = GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationMaskedTextBoxInputWithProgressBarForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationMaskedTextBoxInputWithProgressBarForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationMaskedTextBoxInputWithProgressBarForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.Designer.cs new file mode 100644 index 000000000..29441d3ab --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.Designer.cs @@ -0,0 +1,314 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationNUDUserInputWithProgressBarForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.knudUserInput = new Krypton.Toolkit.KryptonNumericUpDown(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 7; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 8; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.knudUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(141, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 278); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // knudUserInput + // + this.knudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.knudUserInput.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudUserInput.Location = new System.Drawing.Point(3, 306); + this.knudUserInput.Maximum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.knudUserInput.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.knudUserInput.Name = "knudUserInput"; + this.knudUserInput.Size = new System.Drawing.Size(480, 22); + this.knudUserInput.TabIndex = 2; + this.knudUserInput.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(554, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(597, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + // + // VisualToastNotificationNumericUpDownUserInputWithProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationNumericUpDownUserInputWithProgressBarForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationNumericUpDownUserInputWithProgressBarForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private KryptonNumericUpDown knudUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.cs new file mode 100644 index 000000000..70bc52999 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.cs @@ -0,0 +1,314 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationNUDUserInputWithProgressBarForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal int UserResponse => Convert.ToInt32(knudUserInput.Value); + + #endregion + + #region Identity + + public VisualToastNotificationNUDUserInputWithProgressBarForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => knudUserInput.Focus(); + + Resize += VisualToastNotificationNumericUpDownUserInputWithProgressBarForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + knudUserInput.Maximum = _data.MaximumNumericUpDownValue ?? 100; + + knudUserInput.Minimum = _data.MinimumNumericUpDownValue ?? 0; + + knudUserInput.Value = _data.InitialNumericUpDownValue ?? 0; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationNumericUpDownUserInputWithProgressBarForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationNumericUpDownUserInputWithProgressBarForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + + public static decimal ShowToastNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationNUDUserInputWithProgressBarForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : 0; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : 0; + } + } + } + + #endregion +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.Designer.cs new file mode 100644 index 000000000..cb0014226 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.Designer.cs @@ -0,0 +1,294 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationTextBoxUserInputWithProgressBarForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.ktxtUserInput = new Krypton.Toolkit.KryptonTextBox(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 7; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 8; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.ktxtUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(141, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 277); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ktxtUserInput + // + this.ktxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.ktxtUserInput.Location = new System.Drawing.Point(3, 305); + this.ktxtUserInput.Name = "ktxtUserInput"; + this.ktxtUserInput.Size = new System.Drawing.Size(480, 23); + this.ktxtUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(5, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(554, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(75, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(10, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(597, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + // + // VisualToastNotificationTextBoxUserInputWithProgressBarForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationTextBoxUserInputWithProgressBarForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationTextBoxUserInputWithProgressBarForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private KryptonTextBox ktxtUserInput; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.cs new file mode 100644 index 000000000..471de0086 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.cs @@ -0,0 +1,314 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationTextBoxUserInputWithProgressBarForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => ktxtUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationTextBoxUserInputWithProgressBarForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => ktxtUserInput.Focus(); + + Resize += VisualToastNotificationTextBoxUserInputWithProgressBarForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + ktxtUserInput.Text = GlobalStaticValues.DEFAULT_EMPTY_STRING; + + ktxtUserInput.CueHint.CueHintText = + _data.ToastNotificationCueText ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + ktxtUserInput.CueHint.Color1 = _data.ToastNotificationCueColor ?? Color.Gray; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void VisualToastNotificationTextBoxUserInputWithProgressBarForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationTextBoxUserInputWithProgressBarForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationTextBoxUserInputWithProgressBarForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/LTR/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.Designer.cs new file mode 100644 index 000000000..7b5fb8ca6 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.Designer.cs @@ -0,0 +1,336 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationComboBoxUserInputRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kcmbUserInput = new Krypton.Toolkit.KryptonComboBox(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).BeginInit(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 4; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(78, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(533, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(559, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 5; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(481, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kcmbUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 269); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kcmbUserInput + // + this.kcmbUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kcmbUserInput.DropDownWidth = 464; + this.kcmbUserInput.IntegralHeight = false; + this.kcmbUserInput.Location = new System.Drawing.Point(3, 297); + this.kcmbUserInput.Name = "kcmbUserInput"; + this.kcmbUserInput.Size = new System.Drawing.Size(464, 21); + this.kcmbUserInput.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbUserInput.TabIndex = 3; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationComboBoxUserInputRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationComboBoxUserInputRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputRtlAwareForm_LocationChanged); + this.Resize += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputRtlAwareForm_Resize); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).EndInit(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonComboBox kcmbUserInput; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.cs new file mode 100644 index 000000000..923774c8f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.cs @@ -0,0 +1,335 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationComboBoxUserInputRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kcmbUserInput.Text ?? string.Empty; + + #endregion + + #region Identity + + public VisualToastNotificationComboBoxUserInputRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kcmbUserInput.Focus(); + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateComboBoxItems() + { + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kcmbUserInput.Items.Add(item); + } + + kcmbUserInput.SelectedIndex = _data.SelectedIndex ?? 1; + } + + kcmbUserInput.DropDownStyle = _data.UserInputComboBoxStyle ?? ComboBoxStyle.DropDown; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationComboBoxUserInputRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void VisualToastNotificationComboBoxUserInputRtlAwareForm_LocationChanged(object sender, EventArgs e) + { + if (_data.ReportToastLocation) + { + ReportToastLocation(); + } + } + + private void VisualToastNotificationComboBoxUserInputRtlAwareForm_Resize(object sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void ReportToastLocation() => klblToastLocation.Text = + _data.ReportToastLocation ? $"Location: X: {Location.X}, Y: {Location.Y}" : string.Empty; + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + public new KryptonToastNotificationResult ShowToastNotificationResult() + { + + return base.ShowToastNotificationResult(); + } + + public new KryptonToastNotificationResult ShowToastNotificationResult(IWin32Window owner) + { + + return base.ShowToastNotificationResult(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationComboBoxUserInputRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : string.Empty; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : string.Empty; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationComboBoxUserInputRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.Designer.cs new file mode 100644 index 000000000..9e8784cf4 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.Designer.cs @@ -0,0 +1,330 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDateTimeUserInputRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdtpUserInput = new Krypton.Toolkit.KryptonDateTimePicker(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 5; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(78, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(533, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(559, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 6; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(481, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kdtpUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 269); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdtpUserInput + // + this.kdtpUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdtpUserInput.Location = new System.Drawing.Point(3, 297); + this.kdtpUserInput.Name = "kdtpUserInput"; + this.kdtpUserInput.Size = new System.Drawing.Size(464, 21); + this.kdtpUserInput.TabIndex = 2; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationDateTimeUserInputRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDateTimeUserInputRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDateTimeUserInputRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationDateTimeUserInputRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonDateTimePicker kdtpUserInput; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.cs new file mode 100644 index 000000000..022730803 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.cs @@ -0,0 +1,319 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDateTimeUserInputRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal DateTime UserResponse => kdtpUserInput.Value; + + #endregion + + public VisualToastNotificationDateTimeUserInputRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdtpUserInput.Focus(); + + Resize += VisualToastNotificationDateTimeUserInputRtlAwareForm_Resize; + + UpdateBorderColors(); + } + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kdtpUserInput.Value = _data.InitialDateTimeValue ?? GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + + kdtpUserInput.Format = _data.DateTimeFormat ?? DateTimePickerFormat.Long; + + kdtpUserInput.CustomFormat = _data.CustomDateTimeFormat ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kdtpUserInput.MaxDate = _data.MaximumDateTimeValue ?? DateTime.MaxValue; + + kdtpUserInput.MinDate = _data.MinimumDateTimeValue ?? DateTime.MinValue; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationDateTimeUserInputRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void ReportToastLocation() { } + + private void VisualToastNotificationDateTimeUserInputRtlAwareForm_LocationChanged(object sender, EventArgs e) + { + if (_data.ReportToastLocation) + { + ReportToastLocation(); + } + } + + private void VisualToastNotificationDateTimeUserInputRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static DateTime ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDateTimeUserInputRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDateTimeUserInputRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.Designer.cs new file mode 100644 index 000000000..30b392d61 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.Designer.cs @@ -0,0 +1,330 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDomainUpDownUserInputRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdudUserInput = new Krypton.Toolkit.KryptonDomainUpDown(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 6; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(78, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(533, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(559, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 7; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(481, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kdudUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 268); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdudUserInput + // + this.kdudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdudUserInput.Location = new System.Drawing.Point(3, 296); + this.kdudUserInput.Name = "kdudUserInput"; + this.kdudUserInput.Size = new System.Drawing.Size(464, 22); + this.kdudUserInput.TabIndex = 2; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationDomainUpDownUserInputRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDomainUpDownUserInputRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDomainUpDownUserInputRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationDomainUpDownUserInputRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonDomainUpDown kdudUserInput; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.cs new file mode 100644 index 000000000..fd7d5fef1 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.cs @@ -0,0 +1,318 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDomainUpDownUserInputRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kdudUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationDomainUpDownUserInputRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdudUserInput.Focus(); + + Resize += OnResize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kdudUserInput.Items.Add(item); + } + + kdudUserInput.SelectedIndex = _data.SelectedIndex ?? 1; + } + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void OnResize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationDomainUpDownUserInputRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void VisualToastNotificationDomainUpDownUserInputRtlAwareForm_LocationChanged(object sender, EventArgs e) + { + + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDomainUpDownUserInputRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : string.Empty; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : string.Empty; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationDomainUpDownUserInputRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.Designer.cs new file mode 100644 index 000000000..e866e6300 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.Designer.cs @@ -0,0 +1,331 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kmtxtUserInput = new Krypton.Toolkit.KryptonMaskedTextBox(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 6; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(78, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(533, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(559, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 7; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(481, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.kmtxtUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 267); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kmtxtUserInput + // + this.kmtxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kmtxtUserInput.Location = new System.Drawing.Point(3, 295); + this.kmtxtUserInput.Name = "kmtxtUserInput"; + this.kmtxtUserInput.Size = new System.Drawing.Size(464, 23); + this.kmtxtUserInput.TabIndex = 2; + this.kmtxtUserInput.Text = "kryptonMaskedTextBox1"; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonMaskedTextBox kmtxtUserInput; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.cs new file mode 100644 index 000000000..a13d23370 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.cs @@ -0,0 +1,310 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kmtxtUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kmtxtUserInput.Focus(); + + Resize += OnResize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kmtxtUserInput.Text = GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm_LocationChanged(object sender, EventArgs e) + { + + } + + private void OnResize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.Designer.cs new file mode 100644 index 000000000..0116f4d37 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.Designer.cs @@ -0,0 +1,350 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationNUDUserInputRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.knudUserInput = new Krypton.Toolkit.KryptonNumericUpDown(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 6; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(78, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(533, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(559, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 8; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(481, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.knudUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 268); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // knudUserInput + // + this.knudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.knudUserInput.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudUserInput.Location = new System.Drawing.Point(3, 296); + this.knudUserInput.Maximum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.knudUserInput.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.knudUserInput.Name = "knudUserInput"; + this.knudUserInput.Size = new System.Drawing.Size(464, 22); + this.knudUserInput.TabIndex = 2; + this.knudUserInput.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationNUDUserInputRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationNUDUserInputRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationNumericUpDownUserInputRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationNumericUpDownUserInputRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonNumericUpDown knudUserInput; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.cs new file mode 100644 index 000000000..bb52c445b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.cs @@ -0,0 +1,314 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationNUDUserInputRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal int UserResponse => Convert.ToInt32(knudUserInput.Value); + + #endregion + + #region Identity + + public VisualToastNotificationNUDUserInputRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => knudUserInput.Focus(); + + Resize += OnResize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle; + + kwlNotificationMessage.Text = _data.NotificationContent; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + knudUserInput.Value = _data.InitialNumericUpDownValue ?? 0; + + knudUserInput.Maximum = _data.MaximumNumericUpDownValue ?? 100; + + knudUserInput.Minimum = _data.MinimumNumericUpDownValue ?? 0; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationNumericUpDownUserInputRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void VisualToastNotificationNumericUpDownUserInputRtlAwareForm_LocationChanged(object sender, EventArgs e) + { + + } + + private void OnResize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static decimal ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationNUDUserInputRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : 0; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : 0; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationNUDUserInputRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.Designer.cs new file mode 100644 index 000000000..19e5bcfa8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.Designer.cs @@ -0,0 +1,330 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationTextBoxUserInputRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.ktxtUserInput = new Krypton.Toolkit.KryptonTextBox(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.tableLayoutPanel4.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 327); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(614, 50); + this.kpnlButtons.TabIndex = 6; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(614, 49); + this.tableLayoutPanel2.TabIndex = 5; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(78, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(48, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0} ({1})"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(533, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(559, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(48, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0} ({1})"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(614, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.kryptonPanel1); + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(614, 327); + this.kpnlMain.TabIndex = 9; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel3); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(614, 327); + this.kryptonPanel1.TabIndex = 4; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(614, 327); + this.tableLayoutPanel3.TabIndex = 0; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(481, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 317); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.ktxtUserInput, 0, 2); + this.tableLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel4.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 3; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel4.Size = new System.Drawing.Size(470, 321); + this.tableLayoutPanel4.TabIndex = 1; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(464, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(464, 267); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ktxtUserInput + // + this.ktxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.ktxtUserInput.Location = new System.Drawing.Point(3, 295); + this.ktxtUserInput.Name = "ktxtUserInput"; + this.ktxtUserInput.Size = new System.Drawing.Size(464, 23); + this.ktxtUserInput.TabIndex = 2; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tableLayoutPanel1, 1, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 1; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(614, 327); + this.tlpMain.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 3; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(608, 321); + this.tableLayoutPanel1.TabIndex = 1; + // + // VisualToastNotificationTextBoxUserInputRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(614, 377); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationTextBoxUserInputRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationTextBoxUserInputRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationTextBoxUserInputRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel4.PerformLayout(); + this.tlpMain.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel3; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel4; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonTextBox ktxtUserInput; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.cs new file mode 100644 index 000000000..498192ae0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.cs @@ -0,0 +1,329 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationTextBoxUserInputRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #region Local Data + + private string _notificationContentText; + + private string _notificationTitleText; + + private KryptonToastNotificationIcon _toastNotificationIcon; + + #endregion + + #endregion + + #region Internal + + internal string UserResponse => ktxtUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationTextBoxUserInputRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => ktxtUserInput.Focus(); + + Resize += OnResize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void LoadData() + { + _notificationContentText = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + _notificationTitleText = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + _toastNotificationIcon = _data.NotificationIcon ?? KryptonToastNotificationIcon.None; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _notificationTitleText; + + kwlNotificationMessage.Text = _notificationContentText; + } + + private void UpdateCueValues() + { + // Set cue values + ktxtUserInput.CueHint.CueHintText = + _data.ToastNotificationCueText ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + ktxtUserInput.CueHint.Color1 = _data.ToastNotificationCueColor ?? Color.Gray; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_toastNotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationTextBoxUserInputRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + _timer.Start(); + } + + private void VisualToastNotificationTextBoxUserInputRtlAwareForm_LocationChanged(object sender, EventArgs e) + { + + } + + private void OnResize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateCueValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateCueValues(); + + if (_data.CountDownSeconds != 0) + { + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kbtnDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + itbDismiss.Text = $@"{KryptonManager.Strings.ToastNotificationStrings.Dismiss} ({_data.CountDownSeconds - _time})"; + + if (_time == _data.CountDownSeconds) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationTextBoxUserInputRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/Normal/VisualToastNotificationTextBoxUserInputRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.Designer.cs new file mode 100644 index 000000000..08f8f1496 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.Designer.cs @@ -0,0 +1,303 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kcmbUserInput = new Krypton.Toolkit.KryptonComboBox(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 373); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(634, 50); + this.kpnlButtons.TabIndex = 5; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(634, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(53, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(553, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(579, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(634, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(634, 373); + this.kpnlMain.TabIndex = 6; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(634, 373); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kcmbUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(3, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(490, 335); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(484, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(484, 283); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kcmbUserInput + // + this.kcmbUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kcmbUserInput.DropDownWidth = 484; + this.kcmbUserInput.IntegralHeight = false; + this.kcmbUserInput.Location = new System.Drawing.Point(3, 311); + this.kcmbUserInput.Name = "kcmbUserInput"; + this.kcmbUserInput.Size = new System.Drawing.Size(484, 21); + this.kcmbUserInput.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbUserInput.TabIndex = 3; + this.kcmbUserInput.Text = "kryptonComboBox1"; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 344); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(628, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(501, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 331); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(634, 423); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInput)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonComboBox kcmbUserInput; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.cs new file mode 100644 index 000000000..91e2af080 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.cs @@ -0,0 +1,329 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kcmbUserInput.Text ?? string.Empty; + + #endregion + + #region Identity + + public VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kcmbUserInput.Focus(); + + Resize += VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateComboBoxItems() + { + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kcmbUserInput.Items.Add(item); + } + + kcmbUserInput.SelectedIndex = _data.SelectedIndex ?? 1; + } + + kcmbUserInput.DropDownStyle = _data.UserInputComboBoxStyle ?? ComboBoxStyle.DropDown; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + + _data.DisplayDebugData(_data); + } + + private void VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm_LocationChanged(object sender, EventArgs e) + { + + } + + private void VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateComboBoxItems(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : string.Empty; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : string.Empty; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.Designer.cs new file mode 100644 index 000000000..38a174bab --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.Designer.cs @@ -0,0 +1,297 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdtpUserInput = new Krypton.Toolkit.KryptonDateTimePicker(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 6; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(53, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(549, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(575, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 7; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kdtpUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(3, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 279); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdtpUserInput + // + this.kdtpUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdtpUserInput.Location = new System.Drawing.Point(3, 307); + this.kdtpUserInput.Name = "kdtpUserInput"; + this.kdtpUserInput.Size = new System.Drawing.Size(480, 21); + this.kdtpUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(497, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonDateTimePicker kdtpUserInput; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.cs new file mode 100644 index 000000000..5243e19ff --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.cs @@ -0,0 +1,323 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal DateTime UserResponse => kdtpUserInput.Value; + + #endregion + + #region Identity + + public VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdtpUserInput.Focus(); + + Resize += VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kdtpUserInput.Value = _data.InitialDateTimeValue ?? GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + + kdtpUserInput.Format = _data.DateTimeFormat ?? DateTimePickerFormat.Long; + + kdtpUserInput.CustomFormat = _data.CustomDateTimeFormat ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kdtpUserInput.MaxDate = _data.MaximumDateTimeValue ?? DateTime.MaxValue; + + kdtpUserInput.MinDate = _data.MinimumDateTimeValue ?? DateTime.MinValue; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm_LocationChanged(object sender, EventArgs e) => UpdateLocation(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static DateTime ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_DATE_TIME_VALUE; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.Designer.cs new file mode 100644 index 000000000..e57b1e301 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.Designer.cs @@ -0,0 +1,297 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kdudUserInput = new Krypton.Toolkit.KryptonDomainUpDown(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 7; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(53, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(549, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(575, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 8; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kdudUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(3, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 278); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kdudUserInput + // + this.kdudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdudUserInput.Location = new System.Drawing.Point(3, 306); + this.kdudUserInput.Name = "kdudUserInput"; + this.kdudUserInput.Size = new System.Drawing.Size(480, 22); + this.kdudUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(497, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonDomainUpDown kdudUserInput; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.cs new file mode 100644 index 000000000..127fd5185 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.cs @@ -0,0 +1,323 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kdudUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kdudUserInput.Focus(); + + Resize += VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + if (_data.UserInputList.Count > 0) + { + foreach (var item in _data.UserInputList) + { + kdudUserInput.Items.Add(item); + } + + kdudUserInput.SelectedIndex = _data.SelectedIndex ?? 0; + } + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm_LocationChanged(object sender, EventArgs e) => UpdateLocation(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.Designer.cs new file mode 100644 index 000000000..c79efa2ba --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.Designer.cs @@ -0,0 +1,297 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.kmtxtUserInput = new Krypton.Toolkit.KryptonMaskedTextBox(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 373); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(634, 50); + this.kpnlButtons.TabIndex = 7; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(634, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(53, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(553, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(579, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(634, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(634, 373); + this.kpnlMain.TabIndex = 8; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(634, 373); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.kmtxtUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(3, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(490, 335); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(484, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(484, 281); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kmtxtUserInput + // + this.kmtxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.kmtxtUserInput.Location = new System.Drawing.Point(3, 309); + this.kmtxtUserInput.Name = "kmtxtUserInput"; + this.kmtxtUserInput.Size = new System.Drawing.Size(484, 23); + this.kmtxtUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 344); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(628, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(501, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 331); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(634, 423); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonMaskedTextBox kmtxtUserInput; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.cs new file mode 100644 index 000000000..8e2a37dfe --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.cs @@ -0,0 +1,315 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => kmtxtUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => kmtxtUserInput.Focus(); + + Resize += VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + kmtxtUserInput.Text = GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm_LocationChanged(object sender, EventArgs e) => UpdateLocation(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.Designer.cs new file mode 100644 index 000000000..06e2e758d --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.Designer.cs @@ -0,0 +1,317 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.knudUserInput = new Krypton.Toolkit.KryptonNumericUpDown(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 8; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(53, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(549, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(575, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 9; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.knudUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(3, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 278); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // knudUserInput + // + this.knudUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.knudUserInput.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudUserInput.Location = new System.Drawing.Point(3, 306); + this.knudUserInput.Maximum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.knudUserInput.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.knudUserInput.Name = "knudUserInput"; + this.knudUserInput.Size = new System.Drawing.Size(480, 22); + this.knudUserInput.TabIndex = 2; + this.knudUserInput.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(497, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationNumericUpDownUserInputWithProgressBarRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationNumericUpDownUserInputWithProgressBarRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonNumericUpDown knudUserInput; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.cs new file mode 100644 index 000000000..dbf40d5e3 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.cs @@ -0,0 +1,320 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal int UserResponse => Convert.ToInt32(knudUserInput.Value); + + #endregion + + #region Identity + + public VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => knudUserInput.Focus(); + + Resize += VisualToastNotificationNumericUpDownUserInputWithProgressBarRtlAwareForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + knudUserInput.Maximum = _data.MaximumNumericUpDownValue ?? 100; + + knudUserInput.Minimum = _data.MinimumNumericUpDownValue ?? 0; + + knudUserInput.Value = _data.InitialNumericUpDownValue ?? 0; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationNumericUpDownUserInputWithProgressBarRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationNumericUpDownUserInputWithProgressBarRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void VisualToastNotificationNumericUpDownUserInputWithProgressBarRtlAwareForm_LocationChanged(object sender, EventArgs e) => UpdateLocation(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + + public static decimal ShowToastNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : 0; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : 0; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.Designer.cs new file mode 100644 index 000000000..e797c4d07 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.Designer.cs @@ -0,0 +1,297 @@ +namespace Krypton.Toolkit +{ + partial class VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnDismiss = new Krypton.Toolkit.KryptonButton(); + this.klblToastLocation = new Krypton.Toolkit.KryptonLabel(); + this.kchkDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.itbDismiss = new Krypton.Toolkit.InternalToastButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.kwlNotificationTitle = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlNotificationMessage = new Krypton.Toolkit.KryptonWrapLabel(); + this.ktxtUserInput = new Krypton.Toolkit.KryptonTextBox(); + this.kpbCountDown = new Krypton.Toolkit.KryptonProgressBar(); + this.pbxNotificationIcon = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + this.tlpMain.SuspendLayout(); + this.tlpContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel2); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 369); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(630, 50); + this.kpnlButtons.TabIndex = 8; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 4; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.Controls.Add(this.kbtnDismiss, 2, 0); + this.tableLayoutPanel2.Controls.Add(this.klblToastLocation, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.kchkDoNotShowAgain, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.itbDismiss, 3, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 1; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(630, 49); + this.tableLayoutPanel2.TabIndex = 6; + // + // kbtnDismiss + // + this.kbtnDismiss.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnDismiss.AutoSize = true; + this.kbtnDismiss.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnDismiss.Location = new System.Drawing.Point(53, 13); + this.kbtnDismiss.Margin = new System.Windows.Forms.Padding(10); + this.kbtnDismiss.Name = "kbtnDismiss"; + this.kbtnDismiss.Size = new System.Drawing.Size(23, 22); + this.kbtnDismiss.TabIndex = 2; + this.kbtnDismiss.Values.Text = "{0}"; + this.kbtnDismiss.Visible = false; + // + // klblToastLocation + // + this.klblToastLocation.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.klblToastLocation.Location = new System.Drawing.Point(549, 23); + this.klblToastLocation.Margin = new System.Windows.Forms.Padding(10); + this.klblToastLocation.Name = "klblToastLocation"; + this.klblToastLocation.Size = new System.Drawing.Size(6, 2); + this.klblToastLocation.TabIndex = 3; + this.klblToastLocation.Values.Text = ""; + // + // kchkDoNotShowAgain + // + this.kchkDoNotShowAgain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kchkDoNotShowAgain.Location = new System.Drawing.Point(575, 10); + this.kchkDoNotShowAgain.Margin = new System.Windows.Forms.Padding(10); + this.kchkDoNotShowAgain.Name = "kchkDoNotShowAgain"; + this.kchkDoNotShowAgain.Size = new System.Drawing.Size(45, 29); + this.kchkDoNotShowAgain.TabIndex = 4; + this.kchkDoNotShowAgain.Values.Text = "CB1"; + this.kchkDoNotShowAgain.Visible = false; + // + // itbDismiss + // + this.itbDismiss.AutoSize = true; + this.itbDismiss.IsActionButton = false; + this.itbDismiss.IsDismissButton = true; + this.itbDismiss.Location = new System.Drawing.Point(10, 13); + this.itbDismiss.Margin = new System.Windows.Forms.Padding(10); + this.itbDismiss.Name = "itbDismiss"; + this.itbDismiss.NotificationResult = Krypton.Toolkit.KryptonToastNotificationResult.None; + this.itbDismiss.Owner = null; + this.itbDismiss.ProcessPath = ""; + this.itbDismiss.Size = new System.Drawing.Size(23, 22); + this.itbDismiss.TabIndex = 5; + this.itbDismiss.Values.Text = "{0}"; + this.itbDismiss.Click += new System.EventHandler(this.itbDismiss_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(630, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.tlpMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(630, 369); + this.kpnlMain.TabIndex = 9; + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 2; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.tlpContent, 1, 0); + this.tlpMain.Controls.Add(this.kpbCountDown, 0, 1); + this.tlpMain.Controls.Add(this.pbxNotificationIcon, 0, 0); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 2; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.Size = new System.Drawing.Size(630, 369); + this.tlpMain.TabIndex = 0; + // + // tlpContent + // + this.tlpContent.ColumnCount = 1; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kwlNotificationTitle, 0, 0); + this.tlpContent.Controls.Add(this.kwlNotificationMessage, 0, 1); + this.tlpContent.Controls.Add(this.ktxtUserInput, 0, 2); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(3, 3); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 3; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpContent.Size = new System.Drawing.Size(486, 331); + this.tlpContent.TabIndex = 6; + // + // kwlNotificationTitle + // + this.kwlNotificationTitle.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationTitle.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this.kwlNotificationTitle.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationTitle.LabelStyle = Krypton.Toolkit.LabelStyle.TitleControl; + this.kwlNotificationTitle.Location = new System.Drawing.Point(3, 0); + this.kwlNotificationTitle.Name = "kwlNotificationTitle"; + this.kwlNotificationTitle.Size = new System.Drawing.Size(480, 25); + this.kwlNotificationTitle.Text = "kryptonWrapLabel1"; + this.kwlNotificationTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // kwlNotificationMessage + // + this.kwlNotificationMessage.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlNotificationMessage.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlNotificationMessage.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlNotificationMessage.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlNotificationMessage.Location = new System.Drawing.Point(3, 25); + this.kwlNotificationMessage.Name = "kwlNotificationMessage"; + this.kwlNotificationMessage.Size = new System.Drawing.Size(480, 277); + this.kwlNotificationMessage.Text = "kryptonWrapLabel2"; + this.kwlNotificationMessage.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // ktxtUserInput + // + this.ktxtUserInput.Dock = System.Windows.Forms.DockStyle.Fill; + this.ktxtUserInput.Location = new System.Drawing.Point(3, 305); + this.ktxtUserInput.Name = "ktxtUserInput"; + this.ktxtUserInput.Size = new System.Drawing.Size(480, 23); + this.ktxtUserInput.TabIndex = 2; + // + // kpbCountDown + // + this.tlpMain.SetColumnSpan(this.kpbCountDown, 2); + this.kpbCountDown.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpbCountDown.Location = new System.Drawing.Point(3, 340); + this.kpbCountDown.Name = "kpbCountDown"; + this.kpbCountDown.Size = new System.Drawing.Size(624, 26); + this.kpbCountDown.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbCountDown.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbCountDown.TabIndex = 5; + this.kpbCountDown.Text = "kryptonProgressBar1"; + this.kpbCountDown.Values.Text = "kryptonProgressBar1"; + // + // pbxNotificationIcon + // + this.pbxNotificationIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxNotificationIcon.Location = new System.Drawing.Point(497, 5); + this.pbxNotificationIcon.Margin = new System.Windows.Forms.Padding(5); + this.pbxNotificationIcon.Name = "pbxNotificationIcon"; + this.pbxNotificationIcon.Size = new System.Drawing.Size(128, 327); + this.pbxNotificationIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxNotificationIcon.TabIndex = 0; + this.pbxNotificationIcon.TabStop = false; + // + // VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 419); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Load += new System.EventHandler(this.VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm_Load); + this.LocationChanged += new System.EventHandler(this.VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm_LocationChanged); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + this.tlpMain.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tlpContent.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxNotificationIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kpnlMain; + private TableLayoutPanel tlpMain; + private TableLayoutPanel tlpContent; + private KryptonWrapLabel kwlNotificationTitle; + private KryptonWrapLabel kwlNotificationMessage; + private KryptonTextBox ktxtUserInput; + private KryptonProgressBar kpbCountDown; + private PictureBox pbxNotificationIcon; + private TableLayoutPanel tableLayoutPanel2; + private KryptonButton kbtnDismiss; + private KryptonLabel klblToastLocation; + private KryptonCheckBox kchkDoNotShowAgain; + private InternalToastButton itbDismiss; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.cs new file mode 100644 index 000000000..dfb197337 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.cs @@ -0,0 +1,320 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Timer = System.Windows.Forms.Timer; + +namespace Krypton.Toolkit +{ + internal partial class VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm : VisualToastNotificationBaseForm + { + #region Instance Fields + + private int _time; + + private Timer _timer; + + private readonly KryptonUserInputToastNotificationData _data; + + #endregion + + #region Internal + + internal string UserResponse => ktxtUserInput.Text; + + #endregion + + #region Identity + + public VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm(KryptonUserInputToastNotificationData data) + { + InitializeComponent(); + + _data = data; + + GotFocus += (sender, args) => ktxtUserInput.Focus(); + + Resize += VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm_Resize; + + UpdateBorderColors(); + } + + #endregion + + #region Implementation + + private void UpdateBorderColors() + { + StateCommon!.Border.Color1 = _data.BorderColor1 ?? GlobalStaticValues.EMPTY_COLOR; + + StateCommon!.Border.Color2 = _data.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; + } + + private void UpdateText() + { + kwlNotificationTitle.Text = _data.NotificationTitle ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + kwlNotificationMessage.Text = _data.NotificationContent ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + + private void UpdateInitialValues() + { + // Set initial date and time values + ktxtUserInput.Text = GlobalStaticValues.DEFAULT_EMPTY_STRING; + + ktxtUserInput.CueHint.CueHintText = + _data.ToastNotificationCueText ?? GlobalStaticValues.DEFAULT_EMPTY_STRING; + + ktxtUserInput.CueHint.Color1 = _data.ToastNotificationCueColor ?? Color.Gray; + } + + private void SetIcon(Bitmap? image) => pbxNotificationIcon.Image = image; + + private void UpdateLocation() + { + //Once loaded, position the form, or position it to the bottom left of the screen with added padding + Location = _data.NotificationLocation ?? new Point(Screen.PrimaryScreen!.WorkingArea.Width - Width - 5, + Screen.PrimaryScreen.WorkingArea.Height - Height - 5); + } + + private void UpdateIcon() + { + switch (_data.NotificationIcon) + { + case KryptonToastNotificationIcon.None: + SetIcon(null); + break; + case KryptonToastNotificationIcon.Hand: + SetIcon(ToastNotificationImageResources.Toast_Notification_Hand_128_x_128); + break; + case KryptonToastNotificationIcon.SystemHand: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Question: + SetIcon(ToastNotificationImageResources.Toast_Notification_Question_128_x_128); + break; + case KryptonToastNotificationIcon.SystemQuestion: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Exclamation: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.SystemExclamation: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Asterisk: + SetIcon(ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128); + break; + case KryptonToastNotificationIcon.SystemAsterisk: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Stop: + SetIcon(ToastNotificationImageResources.Toast_Notification_Stop_128_x_128); + break; + case KryptonToastNotificationIcon.Error: + SetIcon(ToastNotificationImageResources.Toast_Notification_Critical_128_x_128); + break; + case KryptonToastNotificationIcon.Warning: + SetIcon(ToastNotificationImageResources.Toast_Notification_Warning_128_x_115); + break; + case KryptonToastNotificationIcon.Information: + SetIcon(ToastNotificationImageResources.Toast_Notification_Information_128_x_128); + break; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128); + } + else if (OSUtilities.IsWindowsTen) + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128); + } + else + { + SetIcon(ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128); + } + break; + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + SetIcon(WindowsLogoImageResources.Windows_11_128_128); + } + else if (OSUtilities.IsWindowsEight || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsTen) + { + SetIcon(WindowsLogoImageResources.Windows_8_81_10_128_128); + } + else + { + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(128, 128))); + } + break; + case KryptonToastNotificationIcon.Application: + SetIcon(GraphicsExtensions.ScaleImage(_data.ApplicationIcon.ToBitmap(), new Size(128, 128))); + break; + case KryptonToastNotificationIcon.SystemApplication: + SetIcon(GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), 128, 128)); + break; + case KryptonToastNotificationIcon.Ok: + SetIcon(ToastNotificationImageResources.Toast_Notification_Ok_128_x_128); + break; + case KryptonToastNotificationIcon.Custom: + SetIcon(_data.CustomImage != null + ? new Bitmap(_data.CustomImage) + : null); + break; + case null: + SetIcon(null); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private void ShowCloseButton() + { + CloseBox = _data.ShowCloseBox ?? false; + + FormBorderStyle = CloseBox ? FormBorderStyle.Fixed3D : FormBorderStyle.FixedSingle; + + ControlBox = _data.ShowCloseBox ?? false; + } + + private void itbDismiss_Click(object sender, EventArgs e) => Close(); + + private void VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm_Resize(object? sender, EventArgs e) + { + if (WindowState == FormWindowState.Maximized) + { + WindowState = FormWindowState.Normal; + } + } + + private void VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm_Load(object sender, EventArgs e) + { + UpdateIcon(); + + UpdateLocation(); + + ShowCloseButton(); + + kbtnDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + itbDismiss.Text = KryptonManager.Strings.ToastNotificationStrings.Dismiss; + + _timer.Start(); + } + + private void VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm_LocationChanged(object sender, EventArgs e) => UpdateLocation(); + + public new DialogResult ShowDialog() + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + UpdateLocation(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(); + } + + public new DialogResult ShowDialog(IWin32Window owner) + { + TopMost = _data.TopMost ?? true; + + UpdateText(); + + UpdateIcon(); + + UpdateInitialValues(); + + if (_data.CountDownSeconds != 0) + { + kpbCountDown.Maximum = _data.CountDownSeconds ?? 100; + + kpbCountDown.Value = kpbCountDown.Maximum; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + _timer = new Timer(); + + _timer.Interval = _data.CountDownTimerInterval ?? 1000; + + _timer.Tick += (sender, args) => + { + _time++; + + kpbCountDown.Value -= 1; + + kpbCountDown.Text = $@"{_data.CountDownSeconds - _time}"; + + if (kpbCountDown.Value == kpbCountDown.Minimum) + { + _timer.Stop(); + + Close(); + } + }; + } + + return base.ShowDialog(owner); + } + + internal static string ShowNotification(KryptonUserInputToastNotificationData data) + { + var owner = data.ToastHost ?? FromHandle(PI.GetActiveWindow()); + + using var toast = new VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm(data); + + if (owner != null) + { + toast.StartPosition = owner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return toast.ShowDialog(owner!) == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + else + { + return toast.ShowDialog() == DialogResult.OK ? toast.UserResponse : GlobalStaticValues.DEFAULT_EMPTY_STRING; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Notification Toast/User Input/RTL/ProgressBar/VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.Designer.cs new file mode 100644 index 000000000..82403668e --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.Designer.cs @@ -0,0 +1,368 @@ +namespace Krypton.Toolkit +{ + partial class VisualCustomFormatRuleForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VisualCustomFormatRuleForm)); + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnCancel = new Krypton.Toolkit.KryptonButton(); + this.kbtnOk = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.klblFormat = new Krypton.Toolkit.KryptonLabel(); + this.klblPreview = new Krypton.Toolkit.KryptonLabel(); + this.klblFill = new Krypton.Toolkit.KryptonLabel(); + this.kryptonGroup1 = new Krypton.Toolkit.KryptonGroup(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.kcolbtnMinimumColor = new Krypton.Toolkit.KryptonColorButton(); + this.kcolbtnIntermediateColor = new Krypton.Toolkit.KryptonColorButton(); + this.kcolbtnMaximumColor = new Krypton.Toolkit.KryptonColorButton(); + this.kcmbFormatStyle = new Krypton.Toolkit.KryptonComboBox(); + this.kpbxPreview = new Krypton.Toolkit.KryptonPictureBox(); + this.kcmbFillMode = new Krypton.Toolkit.KryptonComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1.Panel)).BeginInit(); + this.kryptonGroup1.Panel.SuspendLayout(); + this.kryptonGroup1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFormatStyle)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpbxPreview)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFillMode)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel1); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 194); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(692, 50); + this.kpnlButtons.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.kbtnCancel, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnOk, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(692, 49); + this.tableLayoutPanel1.TabIndex = 1; + // + // kbtnCancel + // + this.kbtnCancel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnCancel.AutoSize = true; + this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnCancel.Location = new System.Drawing.Point(588, 13); + this.kbtnCancel.Margin = new System.Windows.Forms.Padding(10); + this.kbtnCancel.Name = "kbtnCancel"; + this.kbtnCancel.Size = new System.Drawing.Size(94, 22); + this.kbtnCancel.TabIndex = 0; + this.kbtnCancel.Values.Text = "kryptonButton1"; + this.kbtnCancel.Click += new System.EventHandler(this.kbtnCancel_Click); + // + // kbtnOk + // + this.kbtnOk.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnOk.AutoSize = true; + this.kbtnOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnOk.Enabled = false; + this.kbtnOk.Location = new System.Drawing.Point(474, 13); + this.kbtnOk.Margin = new System.Windows.Forms.Padding(10); + this.kbtnOk.Name = "kbtnOk"; + this.kbtnOk.Size = new System.Drawing.Size(94, 22); + this.kbtnOk.TabIndex = 1; + this.kbtnOk.Values.Text = "kryptonButton2"; + this.kbtnOk.Click += new System.EventHandler(this.kbtnOk_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderSecondary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(692, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel2); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(692, 194); + this.kryptonPanel1.TabIndex = 1; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.klblFormat, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.klblPreview, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.klblFill, 0, 3); + this.tableLayoutPanel2.Controls.Add(this.kryptonGroup1, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.kcmbFormatStyle, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.kpbxPreview, 1, 1); + this.tableLayoutPanel2.Controls.Add(this.kcmbFillMode, 1, 3); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 4; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(692, 194); + this.tableLayoutPanel2.TabIndex = 0; + // + // klblFormat + // + this.klblFormat.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblFormat.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblFormat.Location = new System.Drawing.Point(10, 10); + this.klblFormat.Margin = new System.Windows.Forms.Padding(10); + this.klblFormat.Name = "klblFormat"; + this.klblFormat.Size = new System.Drawing.Size(94, 21); + this.klblFormat.TabIndex = 0; + this.klblFormat.Values.Text = "kryptonLabel1"; + // + // klblPreview + // + this.klblPreview.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblPreview.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblPreview.Location = new System.Drawing.Point(10, 51); + this.klblPreview.Margin = new System.Windows.Forms.Padding(10); + this.klblPreview.Name = "klblPreview"; + this.klblPreview.Size = new System.Drawing.Size(94, 22); + this.klblPreview.TabIndex = 1; + this.klblPreview.Values.Text = "kryptonLabel2"; + // + // klblFill + // + this.klblFill.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblFill.Location = new System.Drawing.Point(10, 149); + this.klblFill.Margin = new System.Windows.Forms.Padding(10); + this.klblFill.Name = "klblFill"; + this.klblFill.Size = new System.Drawing.Size(94, 35); + this.klblFill.TabIndex = 2; + this.klblFill.Values.Text = "kryptonLabel3"; + // + // kryptonGroup1 + // + this.tableLayoutPanel2.SetColumnSpan(this.kryptonGroup1, 2); + this.kryptonGroup1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonGroup1.GroupBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonGroup1.Location = new System.Drawing.Point(10, 93); + this.kryptonGroup1.Margin = new System.Windows.Forms.Padding(10); + this.kryptonGroup1.Name = "kryptonGroup1"; + // + // kryptonGroup1.Panel + // + this.kryptonGroup1.Panel.Controls.Add(this.tableLayoutPanel3); + this.kryptonGroup1.Size = new System.Drawing.Size(672, 36); + this.kryptonGroup1.TabIndex = 3; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 3; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.kcolbtnMinimumColor, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.kcolbtnIntermediateColor, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.kcolbtnMaximumColor, 2, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(670, 34); + this.tableLayoutPanel3.TabIndex = 0; + // + // kcolbtnMinimumColor + // + this.kcolbtnMinimumColor.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kcolbtnMinimumColor.AutoSize = true; + this.kcolbtnMinimumColor.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcolbtnMinimumColor.Location = new System.Drawing.Point(5, 6); + this.kcolbtnMinimumColor.Margin = new System.Windows.Forms.Padding(5); + this.kcolbtnMinimumColor.Name = "kcolbtnMinimumColor"; + this.kcolbtnMinimumColor.SelectedColor = System.Drawing.Color.Transparent; + this.kcolbtnMinimumColor.Size = new System.Drawing.Size(152, 22); + this.kcolbtnMinimumColor.TabIndex = 0; + this.kcolbtnMinimumColor.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcolbtnMinimumColor.Values.Image"))); + this.kcolbtnMinimumColor.Values.RoundedCorners = 8; + this.kcolbtnMinimumColor.Values.Text = "kryptonColorButton1"; + this.kcolbtnMinimumColor.SelectedColorChanged += new System.EventHandler(this.kcolbtnMinimumColor_SelectedColorChanged); + // + // kcolbtnIntermediateColor + // + this.kcolbtnIntermediateColor.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kcolbtnIntermediateColor.AutoSize = true; + this.kcolbtnIntermediateColor.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcolbtnIntermediateColor.Location = new System.Drawing.Point(167, 6); + this.kcolbtnIntermediateColor.Margin = new System.Windows.Forms.Padding(5); + this.kcolbtnIntermediateColor.Name = "kcolbtnIntermediateColor"; + this.kcolbtnIntermediateColor.SelectedColor = System.Drawing.Color.Transparent; + this.kcolbtnIntermediateColor.Size = new System.Drawing.Size(152, 22); + this.kcolbtnIntermediateColor.TabIndex = 1; + this.kcolbtnIntermediateColor.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcolbtnIntermediateColor.Values.Image"))); + this.kcolbtnIntermediateColor.Values.RoundedCorners = 8; + this.kcolbtnIntermediateColor.Values.Text = "kryptonColorButton2"; + this.kcolbtnIntermediateColor.SelectedColorChanged += new System.EventHandler(this.kcolbtnIntermediateColor_SelectedColorChanged); + // + // kcolbtnMaximumColor + // + this.kcolbtnMaximumColor.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kcolbtnMaximumColor.AutoSize = true; + this.kcolbtnMaximumColor.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcolbtnMaximumColor.Location = new System.Drawing.Point(329, 6); + this.kcolbtnMaximumColor.Margin = new System.Windows.Forms.Padding(5); + this.kcolbtnMaximumColor.Name = "kcolbtnMaximumColor"; + this.kcolbtnMaximumColor.SelectedColor = System.Drawing.Color.Transparent; + this.kcolbtnMaximumColor.Size = new System.Drawing.Size(152, 22); + this.kcolbtnMaximumColor.TabIndex = 2; + this.kcolbtnMaximumColor.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcolbtnMaximumColor.Values.Image"))); + this.kcolbtnMaximumColor.Values.RoundedCorners = 8; + this.kcolbtnMaximumColor.Values.Text = "kryptonColorButton3"; + this.kcolbtnMaximumColor.SelectedColorChanged += new System.EventHandler(this.kcolbtnMaximumColor_SelectedColorChanged); + // + // kcmbFormatStyle + // + this.kcmbFormatStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbFormatStyle.DropDownWidth = 318; + this.kcmbFormatStyle.IntegralHeight = false; + this.kcmbFormatStyle.Location = new System.Drawing.Point(124, 10); + this.kcmbFormatStyle.Margin = new System.Windows.Forms.Padding(10); + this.kcmbFormatStyle.Name = "kcmbFormatStyle"; + this.kcmbFormatStyle.Size = new System.Drawing.Size(318, 21); + this.kcmbFormatStyle.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbFormatStyle.TabIndex = 4; + this.kcmbFormatStyle.SelectedIndexChanged += new System.EventHandler(this.kcmbFormatStyle_SelectedIndexChanged); + // + // kpbxPreview + // + this.kpbxPreview.Location = new System.Drawing.Point(124, 51); + this.kpbxPreview.Margin = new System.Windows.Forms.Padding(10); + this.kpbxPreview.Name = "kpbxPreview"; + this.kpbxPreview.Size = new System.Drawing.Size(318, 22); + this.kpbxPreview.TabIndex = 5; + this.kpbxPreview.TabStop = false; + this.kpbxPreview.Paint += new System.Windows.Forms.PaintEventHandler(this.kpbxPreview_Paint); + // + // kcmbFillMode + // + this.kcmbFillMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbFillMode.DropDownWidth = 208; + this.kcmbFillMode.IntegralHeight = false; + this.kcmbFillMode.Location = new System.Drawing.Point(124, 149); + this.kcmbFillMode.Margin = new System.Windows.Forms.Padding(10); + this.kcmbFillMode.Name = "kcmbFillMode"; + this.kcmbFillMode.Size = new System.Drawing.Size(208, 21); + this.kcmbFillMode.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbFillMode.TabIndex = 6; + this.kcmbFillMode.SelectedIndexChanged += new System.EventHandler(this.kcmbFillMode_SelectedIndexChanged); + // + // VisualCustomFormatRuleForm + // + this.AcceptButton = this.kbtnOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kbtnCancel; + this.ClientSize = new System.Drawing.Size(692, 244); + this.Controls.Add(this.kryptonPanel1); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "VisualCustomFormatRuleForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Load += new System.EventHandler(this.VisualCustomFormatRuleForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1.Panel)).EndInit(); + this.kryptonGroup1.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1)).EndInit(); + this.kryptonGroup1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFormatStyle)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpbxPreview)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFillMode)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonLabel klblFormat; + private KryptonLabel klblPreview; + private KryptonLabel klblFill; + private KryptonGroup kryptonGroup1; + private TableLayoutPanel tableLayoutPanel3; + private KryptonColorButton kcolbtnMinimumColor; + private KryptonColorButton kcolbtnIntermediateColor; + private KryptonColorButton kcolbtnMaximumColor; + private KryptonComboBox kcmbFormatStyle; + private KryptonPictureBox kpbxPreview; + private KryptonComboBox kcmbFillMode; + private KryptonButton kbtnCancel; + private KryptonButton kbtnOk; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.cs new file mode 100644 index 000000000..a08470e45 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.cs @@ -0,0 +1,269 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualCustomFormatRuleForm : KryptonForm + { + #region Instance Fields + + private bool _gradient; + + private Color _minimumColor; + + private Color _maximumColor; + + private Color _intermediateColor; + + private EnumConditionalFormatType _conditionalFormatType; + + #endregion + + #region Public + + public bool Gradient => _gradient; + + public Color MaximumColor => _maximumColor; + + public Color MinimumColor => _minimumColor; + + public Color IntermediateColor => _intermediateColor; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// Type of the conditional format. + public VisualCustomFormatRuleForm(EnumConditionalFormatType conditionalFormatType) + { + InitializeComponent(); + + _conditionalFormatType = conditionalFormatType; + + Initialize(); + } + + #endregion + + #region Implementation + + private void Initialize() + { + // Set up text + Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatWindowTitle; + + klblFill.Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatFillLabelText; + + klblFormat.Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatLabelText; + + klblPreview.Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatPreviewLabelText; + + kcolbtnIntermediateColor.Text = KryptonManager.Strings.OutlookGridStrings + .CustomFormatIntermediateColorButtonText; + + kcolbtnMaximumColor.Text = + KryptonManager.Strings.OutlookGridStrings.CustomFormatMaximumColorButtonText; + + kcolbtnMinimumColor.Text = + KryptonManager.Strings.OutlookGridStrings.CustomFormatMinimumColorButtonText; + + kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; + + kbtnOk.Text = KryptonManager.Strings.GeneralStrings.OK; + + kcmbFillMode.SelectedIndex = 0; + + kcmbFormatStyle.SelectedIndex = -1; + + _maximumColor = Color.FromArgb(243, 120, 97); + + _intermediateColor = Color.FromArgb(252, 229, 130); + + _minimumColor = Color.FromArgb(84, 179, 122); + } + + private void VisualCustomFormatRuleForm_Load(object sender, EventArgs e) + { + kcolbtnMinimumColor.SelectedColor = _minimumColor; + + kcolbtnIntermediateColor.SelectedColor = _intermediateColor; + + kcolbtnMaximumColor.SelectedColor = _maximumColor; + + int selected = -1; + + string[] names = Enum.GetNames(typeof(EnumConditionalFormatType)); + + for (int i = 0; i < names.Length; i++) + { + if (_conditionalFormatType.ToString().Equals(names[i])) + { + selected = i; + } + + kcmbFormatStyle.Items.Add(new KryptonListItem(OutlookGridLanguageManager.Instance.GetString(names[i]))); + } + + kcmbFormatStyle.SelectedIndex = selected; + } + + private void UpdateFormatType(EnumConditionalFormatType conditionalFormatType) + { + switch (conditionalFormatType) + { + case EnumConditionalFormatType.TwoColorsRange: + klblFill.Visible = false; + kcmbFillMode.Visible = false; + kcolbtnMinimumColor.Visible = true; + kcolbtnIntermediateColor.Visible = false; + kcolbtnMaximumColor.Visible = true; + break; + case EnumConditionalFormatType.ThreeColorsRange: + klblFill.Visible = false; + kcmbFillMode.Visible = false; + kcolbtnMinimumColor.Visible = true; + kcolbtnIntermediateColor.Visible = true; + kcolbtnMaximumColor.Visible = true; + break; + case EnumConditionalFormatType.Bar: + klblFill.Visible = true; + kcmbFillMode.Visible = true; + kcolbtnMinimumColor.Visible = true; + kcolbtnIntermediateColor.Visible = false; + kcolbtnMaximumColor.Visible = false; + break; + } + + kpbxPreview.Invalidate(); + } + + private void kpbxPreview_Paint(object sender, PaintEventArgs e) + { + e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; + switch (_conditionalFormatType) + { + case EnumConditionalFormatType.Bar: + if (_gradient) + { + using (LinearGradientBrush br = new LinearGradientBrush(e.ClipRectangle, _minimumColor, Color.White, LinearGradientMode.Horizontal)) + { + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + } + else + { + using (SolidBrush br = new SolidBrush(_minimumColor)) + { + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + } + using (Pen pen = new Pen(_minimumColor)) //Color.FromArgb(255, 140, 197, 66))) + { + Rectangle rect = e.ClipRectangle; + rect.Inflate(-1, -1); + e.Graphics.DrawRectangle(pen, rect); + } + break; + case EnumConditionalFormatType.TwoColorsRange: + // Draw the background gradient. + using (LinearGradientBrush br = new LinearGradientBrush(e.ClipRectangle, _minimumColor, _maximumColor, LinearGradientMode.Horizontal)) + { + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + break; + case EnumConditionalFormatType.ThreeColorsRange: + // Draw the background gradient. + using (LinearGradientBrush br = new LinearGradientBrush(e.ClipRectangle, _minimumColor, _maximumColor, LinearGradientMode.Horizontal)) + { + ColorBlend blend = new ColorBlend(); + blend.Colors = new[] { _minimumColor, _intermediateColor, _maximumColor }; + blend.Positions = new[] { 0f, 0.5f, 1.0f }; + br.InterpolationColors = blend; + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + break; + } + } + + private ArrayList GetEnumConditionalFormatTypeList() + { + ArrayList values = new ArrayList(); + + foreach (var value in Enum.GetValues(typeof(EnumConditionalFormatType))) + { + values.Add(value); + } + + return values; + } + + private void kbtnOk_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void kbtnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + + private void kcolbtnMinimumColor_SelectedColorChanged(object sender, ColorEventArgs e) + { + _minimumColor = e.Color; + + kpbxPreview.Invalidate(); + } + + private void kcolbtnIntermediateColor_SelectedColorChanged(object sender, ColorEventArgs e) + { + _intermediateColor = e.Color; + + kpbxPreview.Invalidate(); + } + + private void kcolbtnMaximumColor_SelectedColorChanged(object sender, ColorEventArgs e) + { + _maximumColor = e.Color; + + kpbxPreview.Invalidate(); + } + + private void kcmbFillMode_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void kcmbFormatStyle_SelectedIndexChanged(object sender, EventArgs e) + { + var tag = (kcmbFormatStyle.Items[kcmbFormatStyle.SelectedIndex] as KryptonListItem)?.Tag; + + if (tag is not null) + { + _conditionalFormatType = (EnumConditionalFormatType)Enum.Parse(typeof(EnumConditionalFormatType), tag.ToString()!); + } + + UpdateFormatType(_conditionalFormatType); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.resx new file mode 100644 index 000000000..ab0af0372 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleForm.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.Designer.cs new file mode 100644 index 000000000..b47c5a058 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.Designer.cs @@ -0,0 +1,368 @@ +namespace Krypton.Toolkit +{ + partial class VisualCustomFormatRuleRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VisualCustomFormatRuleRtlAwareForm)); + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnCancel = new Krypton.Toolkit.KryptonButton(); + this.kbtnOk = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.klblFormat = new Krypton.Toolkit.KryptonLabel(); + this.klblPreview = new Krypton.Toolkit.KryptonLabel(); + this.klblFill = new Krypton.Toolkit.KryptonLabel(); + this.kryptonGroup1 = new Krypton.Toolkit.KryptonGroup(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.kcolbtnMinimumColor = new Krypton.Toolkit.KryptonColorButton(); + this.kcolbtnIntermediateColor = new Krypton.Toolkit.KryptonColorButton(); + this.kcolbtnMaximumColor = new Krypton.Toolkit.KryptonColorButton(); + this.kcmbFormatStyle = new Krypton.Toolkit.KryptonComboBox(); + this.kpbxPreview = new Krypton.Toolkit.KryptonPictureBox(); + this.kcmbFillMode = new Krypton.Toolkit.KryptonComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1.Panel)).BeginInit(); + this.kryptonGroup1.Panel.SuspendLayout(); + this.kryptonGroup1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFormatStyle)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpbxPreview)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFillMode)).BeginInit(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel1); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 222); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(720, 50); + this.kpnlButtons.TabIndex = 1; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.kbtnCancel, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnOk, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(720, 49); + this.tableLayoutPanel1.TabIndex = 1; + // + // kbtnCancel + // + this.kbtnCancel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnCancel.AutoSize = true; + this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnCancel.Location = new System.Drawing.Point(10, 13); + this.kbtnCancel.Margin = new System.Windows.Forms.Padding(10); + this.kbtnCancel.Name = "kbtnCancel"; + this.kbtnCancel.Size = new System.Drawing.Size(94, 22); + this.kbtnCancel.TabIndex = 0; + this.kbtnCancel.Values.Text = "kryptonButton1"; + this.kbtnCancel.Click += new System.EventHandler(this.kbtnCancel_Click); + // + // kbtnOk + // + this.kbtnOk.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnOk.AutoSize = true; + this.kbtnOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnOk.Enabled = false; + this.kbtnOk.Location = new System.Drawing.Point(124, 13); + this.kbtnOk.Margin = new System.Windows.Forms.Padding(10); + this.kbtnOk.Name = "kbtnOk"; + this.kbtnOk.Size = new System.Drawing.Size(94, 22); + this.kbtnOk.TabIndex = 1; + this.kbtnOk.Values.Text = "kryptonButton2"; + this.kbtnOk.Click += new System.EventHandler(this.kbtnOk_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderSecondary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(720, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel2); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(720, 222); + this.kryptonPanel1.TabIndex = 2; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.klblFormat, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.klblPreview, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.klblFill, 0, 3); + this.tableLayoutPanel2.Controls.Add(this.kryptonGroup1, 0, 2); + this.tableLayoutPanel2.Controls.Add(this.kcmbFormatStyle, 1, 0); + this.tableLayoutPanel2.Controls.Add(this.kpbxPreview, 1, 1); + this.tableLayoutPanel2.Controls.Add(this.kcmbFillMode, 1, 3); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 4; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(720, 222); + this.tableLayoutPanel2.TabIndex = 0; + // + // klblFormat + // + this.klblFormat.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblFormat.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblFormat.Location = new System.Drawing.Point(615, 10); + this.klblFormat.Margin = new System.Windows.Forms.Padding(10); + this.klblFormat.Name = "klblFormat"; + this.klblFormat.Size = new System.Drawing.Size(95, 21); + this.klblFormat.TabIndex = 0; + this.klblFormat.Values.Text = "kryptonLabel1"; + // + // klblPreview + // + this.klblPreview.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblPreview.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblPreview.Location = new System.Drawing.Point(615, 51); + this.klblPreview.Margin = new System.Windows.Forms.Padding(10); + this.klblPreview.Name = "klblPreview"; + this.klblPreview.Size = new System.Drawing.Size(95, 22); + this.klblPreview.TabIndex = 1; + this.klblPreview.Values.Text = "kryptonLabel2"; + // + // klblFill + // + this.klblFill.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblFill.Location = new System.Drawing.Point(615, 149); + this.klblFill.Margin = new System.Windows.Forms.Padding(10); + this.klblFill.Name = "klblFill"; + this.klblFill.Size = new System.Drawing.Size(95, 63); + this.klblFill.TabIndex = 2; + this.klblFill.Values.Text = "kryptonLabel3"; + // + // kryptonGroup1 + // + this.tableLayoutPanel2.SetColumnSpan(this.kryptonGroup1, 2); + this.kryptonGroup1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonGroup1.GroupBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonGroup1.Location = new System.Drawing.Point(10, 93); + this.kryptonGroup1.Margin = new System.Windows.Forms.Padding(10); + this.kryptonGroup1.Name = "kryptonGroup1"; + // + // kryptonGroup1.Panel + // + this.kryptonGroup1.Panel.Controls.Add(this.tableLayoutPanel3); + this.kryptonGroup1.Size = new System.Drawing.Size(700, 36); + this.kryptonGroup1.TabIndex = 3; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 3; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Controls.Add(this.kcolbtnMinimumColor, 0, 0); + this.tableLayoutPanel3.Controls.Add(this.kcolbtnIntermediateColor, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.kcolbtnMaximumColor, 2, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(698, 34); + this.tableLayoutPanel3.TabIndex = 0; + // + // kcolbtnMinimumColor + // + this.kcolbtnMinimumColor.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kcolbtnMinimumColor.AutoSize = true; + this.kcolbtnMinimumColor.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcolbtnMinimumColor.Location = new System.Drawing.Point(541, 6); + this.kcolbtnMinimumColor.Margin = new System.Windows.Forms.Padding(5); + this.kcolbtnMinimumColor.Name = "kcolbtnMinimumColor"; + this.kcolbtnMinimumColor.SelectedColor = System.Drawing.Color.Transparent; + this.kcolbtnMinimumColor.Size = new System.Drawing.Size(152, 22); + this.kcolbtnMinimumColor.TabIndex = 0; + this.kcolbtnMinimumColor.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcolbtnMinimumColor.Values.Image"))); + this.kcolbtnMinimumColor.Values.RoundedCorners = 8; + this.kcolbtnMinimumColor.Values.Text = "kryptonColorButton1"; + this.kcolbtnMinimumColor.SelectedColorChanged += new System.EventHandler(this.kcolbtnMinimumColor_SelectedColorChanged); + // + // kcolbtnIntermediateColor + // + this.kcolbtnIntermediateColor.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kcolbtnIntermediateColor.AutoSize = true; + this.kcolbtnIntermediateColor.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcolbtnIntermediateColor.Location = new System.Drawing.Point(379, 6); + this.kcolbtnIntermediateColor.Margin = new System.Windows.Forms.Padding(5); + this.kcolbtnIntermediateColor.Name = "kcolbtnIntermediateColor"; + this.kcolbtnIntermediateColor.SelectedColor = System.Drawing.Color.Transparent; + this.kcolbtnIntermediateColor.Size = new System.Drawing.Size(152, 22); + this.kcolbtnIntermediateColor.TabIndex = 1; + this.kcolbtnIntermediateColor.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcolbtnIntermediateColor.Values.Image"))); + this.kcolbtnIntermediateColor.Values.RoundedCorners = 8; + this.kcolbtnIntermediateColor.Values.Text = "kryptonColorButton2"; + this.kcolbtnIntermediateColor.SelectedColorChanged += new System.EventHandler(this.kcolbtnIntermediateColor_SelectedColorChanged); + // + // kcolbtnMaximumColor + // + this.kcolbtnMaximumColor.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kcolbtnMaximumColor.AutoSize = true; + this.kcolbtnMaximumColor.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcolbtnMaximumColor.Location = new System.Drawing.Point(217, 6); + this.kcolbtnMaximumColor.Margin = new System.Windows.Forms.Padding(5); + this.kcolbtnMaximumColor.Name = "kcolbtnMaximumColor"; + this.kcolbtnMaximumColor.SelectedColor = System.Drawing.Color.Transparent; + this.kcolbtnMaximumColor.Size = new System.Drawing.Size(152, 22); + this.kcolbtnMaximumColor.TabIndex = 2; + this.kcolbtnMaximumColor.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcolbtnMaximumColor.Values.Image"))); + this.kcolbtnMaximumColor.Values.RoundedCorners = 8; + this.kcolbtnMaximumColor.Values.Text = "kryptonColorButton3"; + this.kcolbtnMaximumColor.SelectedColorChanged += new System.EventHandler(this.kcolbtnMaximumColor_SelectedColorChanged); + // + // kcmbFormatStyle + // + this.kcmbFormatStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbFormatStyle.DropDownWidth = 318; + this.kcmbFormatStyle.IntegralHeight = false; + this.kcmbFormatStyle.Location = new System.Drawing.Point(277, 10); + this.kcmbFormatStyle.Margin = new System.Windows.Forms.Padding(10); + this.kcmbFormatStyle.Name = "kcmbFormatStyle"; + this.kcmbFormatStyle.Size = new System.Drawing.Size(318, 21); + this.kcmbFormatStyle.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbFormatStyle.TabIndex = 4; + this.kcmbFormatStyle.SelectedIndexChanged += new System.EventHandler(this.kcmbFormatStyle_SelectedIndexChanged); + // + // kpbxPreview + // + this.kpbxPreview.Location = new System.Drawing.Point(277, 51); + this.kpbxPreview.Margin = new System.Windows.Forms.Padding(10); + this.kpbxPreview.Name = "kpbxPreview"; + this.kpbxPreview.Size = new System.Drawing.Size(318, 22); + this.kpbxPreview.TabIndex = 5; + this.kpbxPreview.TabStop = false; + this.kpbxPreview.Paint += new System.Windows.Forms.PaintEventHandler(this.kpbxPreview_Paint); + // + // kcmbFillMode + // + this.kcmbFillMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbFillMode.DropDownWidth = 208; + this.kcmbFillMode.IntegralHeight = false; + this.kcmbFillMode.Location = new System.Drawing.Point(387, 149); + this.kcmbFillMode.Margin = new System.Windows.Forms.Padding(10); + this.kcmbFillMode.Name = "kcmbFillMode"; + this.kcmbFillMode.Size = new System.Drawing.Size(208, 21); + this.kcmbFillMode.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbFillMode.TabIndex = 6; + // + // VisualCustomFormatRuleRtlAwareForm + // + this.AcceptButton = this.kbtnOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kbtnCancel; + this.ClientSize = new System.Drawing.Size(720, 272); + this.Controls.Add(this.kryptonPanel1); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "VisualCustomFormatRuleRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Load += new System.EventHandler(this.VisualCustomFormatRuleRtlAwareForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1.Panel)).EndInit(); + this.kryptonGroup1.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroup1)).EndInit(); + this.kryptonGroup1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel3.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFormatStyle)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpbxPreview)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbFillMode)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private TableLayoutPanel tableLayoutPanel1; + private KryptonButton kbtnCancel; + private KryptonButton kbtnOk; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel2; + private KryptonLabel klblFormat; + private KryptonLabel klblPreview; + private KryptonLabel klblFill; + private KryptonGroup kryptonGroup1; + private TableLayoutPanel tableLayoutPanel3; + private KryptonColorButton kcolbtnMinimumColor; + private KryptonColorButton kcolbtnIntermediateColor; + private KryptonColorButton kcolbtnMaximumColor; + private KryptonComboBox kcmbFormatStyle; + private KryptonPictureBox kpbxPreview; + private KryptonComboBox kcmbFillMode; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.cs new file mode 100644 index 000000000..b9b98c99d --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.cs @@ -0,0 +1,251 @@ +#region Licences +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualCustomFormatRuleRtlAwareForm : KryptonForm + { + #region Instance Fields + + private bool _gradient; + + private Color _minimumColor; + + private Color _maximumColor; + + private Color _intermediateColor; + + private EnumConditionalFormatType _conditionalFormatType; + + #endregion + + #region Public + + public bool Gradient => _gradient; + + public Color MaximumColor => _maximumColor; + + public Color MinimumColor => _minimumColor; + + public Color IntermediateColor => _intermediateColor; + + #endregion + + #region Identity + + public VisualCustomFormatRuleRtlAwareForm(EnumConditionalFormatType conditionalFormatType) + { + InitializeComponent(); + + _conditionalFormatType = conditionalFormatType; + + Initialize(); + } + + #endregion + + #region Implementation + + private void Initialize() + { + // Set up text + Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatWindowTitle; + + klblFill.Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatFillLabelText; + + klblFormat.Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatLabelText; + + klblPreview.Text = KryptonManager.Strings.OutlookGridStrings.CustomFormatPreviewLabelText; + + kcolbtnIntermediateColor.Text = KryptonManager.Strings.OutlookGridStrings + .CustomFormatIntermediateColorButtonText; + + kcolbtnMaximumColor.Text = + KryptonManager.Strings.OutlookGridStrings.CustomFormatMaximumColorButtonText; + + kcolbtnMinimumColor.Text = + KryptonManager.Strings.OutlookGridStrings.CustomFormatMinimumColorButtonText; + + kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; + + kbtnOk.Text = KryptonManager.Strings.GeneralStrings.OK; + + kcmbFillMode.SelectedIndex = 0; + + kcmbFormatStyle.SelectedIndex = -1; + + _maximumColor = Color.FromArgb(243, 120, 97); + + _intermediateColor = Color.FromArgb(252, 229, 130); + + _minimumColor = Color.FromArgb(84, 179, 122); + } + + private void VisualCustomFormatRuleRtlAwareForm_Load(object sender, EventArgs e) + { + kcolbtnMinimumColor.SelectedColor = _minimumColor; + + kcolbtnIntermediateColor.SelectedColor = _intermediateColor; + + kcolbtnMaximumColor.SelectedColor = _maximumColor; + + int selected = -1; + + string[] names = Enum.GetNames(typeof(EnumConditionalFormatType)); + + for (int i = 0; i < names.Length; i++) + { + if (_conditionalFormatType.ToString().Equals(names[i])) + { + selected = i; + } + + kcmbFormatStyle.Items.Add(new KryptonListItem(OutlookGridLanguageManager.Instance.GetString(names[i]))); + } + + kcmbFormatStyle.SelectedIndex = selected; + } + + private void UpdateFormatType(EnumConditionalFormatType conditionalFormatType) + { + switch (conditionalFormatType) + { + case EnumConditionalFormatType.TwoColorsRange: + klblFill.Visible = false; + kcmbFillMode.Visible = false; + kcolbtnMinimumColor.Visible = true; + kcolbtnIntermediateColor.Visible = false; + kcolbtnMaximumColor.Visible = true; + break; + case EnumConditionalFormatType.ThreeColorsRange: + klblFill.Visible = false; + kcmbFillMode.Visible = false; + kcolbtnMinimumColor.Visible = true; + kcolbtnIntermediateColor.Visible = true; + kcolbtnMaximumColor.Visible = true; + break; + case EnumConditionalFormatType.Bar: + klblFill.Visible = true; + kcmbFillMode.Visible = true; + kcolbtnMinimumColor.Visible = true; + kcolbtnIntermediateColor.Visible = false; + kcolbtnMaximumColor.Visible = false; + break; + } + + kpbxPreview.Invalidate(); + } + + private void kpbxPreview_Paint(object sender, PaintEventArgs e) + { + e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; + switch (_conditionalFormatType) + { + case EnumConditionalFormatType.Bar: + if (_gradient) + { + using (LinearGradientBrush br = new LinearGradientBrush(e.ClipRectangle, _minimumColor, Color.White, LinearGradientMode.Horizontal)) + { + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + } + else + { + using (SolidBrush br = new SolidBrush(_minimumColor)) + { + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + } + using (Pen pen = new Pen(_minimumColor)) //Color.FromArgb(255, 140, 197, 66))) + { + Rectangle rect = e.ClipRectangle; + rect.Inflate(-1, -1); + e.Graphics.DrawRectangle(pen, rect); + } + break; + case EnumConditionalFormatType.TwoColorsRange: + // Draw the background gradient. + using (LinearGradientBrush br = new LinearGradientBrush(e.ClipRectangle, _minimumColor, _maximumColor, LinearGradientMode.Horizontal)) + { + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + break; + case EnumConditionalFormatType.ThreeColorsRange: + // Draw the background gradient. + using (LinearGradientBrush br = new LinearGradientBrush(e.ClipRectangle, _minimumColor, _maximumColor, LinearGradientMode.Horizontal)) + { + ColorBlend blend = new ColorBlend(); + blend.Colors = new[] { _minimumColor, _intermediateColor, _maximumColor }; + blend.Positions = new[] { 0f, 0.5f, 1.0f }; + br.InterpolationColors = blend; + e.Graphics.FillRectangle(br, e.ClipRectangle); + } + break; + } + } + + private ArrayList GetEnumConditionalFormatTypeList() + { + ArrayList values = new ArrayList(); + + foreach (var value in Enum.GetValues(typeof(EnumConditionalFormatType))) + { + values.Add(value); + } + + return values; + } + + private void kbtnOk_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + } + + private void kbtnCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + } + + private void kcolbtnMinimumColor_SelectedColorChanged(object sender, ColorEventArgs e) + { + _minimumColor = e.Color; + + kpbxPreview.Invalidate(); + } + + private void kcolbtnIntermediateColor_SelectedColorChanged(object sender, ColorEventArgs e) + { + _intermediateColor = e.Color; + + kpbxPreview.Invalidate(); + } + + private void kcolbtnMaximumColor_SelectedColorChanged(object sender, ColorEventArgs e) + { + _maximumColor = e.Color; + + kpbxPreview.Invalidate(); + } + + private void kcmbFormatStyle_SelectedIndexChanged(object sender, EventArgs e) + { + var tag = (kcmbFormatStyle.Items[kcmbFormatStyle.SelectedIndex] as KryptonListItem)?.Tag; + + if (tag is not null) + { + _conditionalFormatType = + (EnumConditionalFormatType)Enum.Parse(typeof(EnumConditionalFormatType), tag.ToString()!); + } + + UpdateFormatType(_conditionalFormatType); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.resx new file mode 100644 index 000000000..ab0af0372 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/Outlook Grid/VisualCustomFormatRuleRtlAwareForm.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.Designer.cs new file mode 100644 index 000000000..72fc561df --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.Designer.cs @@ -0,0 +1,1130 @@ +namespace Krypton.Toolkit +{ + partial class VisualAboutBoxRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnOk = new Krypton.Toolkit.KryptonButton(); + this.kbtnSystemInformation = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.khgMain = new Krypton.Toolkit.KryptonHeaderGroup(); + this.tscMain = new System.Windows.Forms.ToolStripContainer(); + this.kpnlGeneralInformation = new Krypton.Toolkit.KryptonPanel(); + this.tlpnlGeneralInformation = new System.Windows.Forms.TableLayoutPanel(); + this.pbxImage = new System.Windows.Forms.PictureBox(); + this.kwlVersionLabel = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlBuiltOn = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlCopyright = new Krypton.Toolkit.KryptonWrapLabel(); + this.kryptonWrapLabel5 = new Krypton.Toolkit.KryptonWrapLabel(); + this.kpnlDescription = new Krypton.Toolkit.KryptonPanel(); + this.krtbDescription = new Krypton.Toolkit.KryptonRichTextBox(); + this.kpnlFileInformation = new Krypton.Toolkit.KryptonPanel(); + this.tscFileInformation = new System.Windows.Forms.ToolStripContainer(); + this.kpnlApplication = new Krypton.Toolkit.KryptonPanel(); + this.kdgvApplication = new Krypton.Toolkit.KryptonDataGridView(); + this.kpnlAssemblies = new Krypton.Toolkit.KryptonPanel(); + this.kdgvAssemblies = new Krypton.Toolkit.KryptonDataGridView(); + this.kpnlAssemblyDetails = new Krypton.Toolkit.KryptonPanel(); + this.kiadAssemblyDetails = new Krypton.Toolkit.InternalAssemblyDetails(); + this.tsFileInformation = new System.Windows.Forms.ToolStrip(); + this.tsbtnApplicationDetails = new System.Windows.Forms.ToolStripButton(); + this.tssAssembliesDetails = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnAssembliesDetails = new System.Windows.Forms.ToolStripButton(); + this.tssAssemblyDetails = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnAssemblyDetails = new System.Windows.Forms.ToolStripButton(); + this.kpnlTheme = new Krypton.Toolkit.KryptonPanel(); + this.tlpTheme = new System.Windows.Forms.TableLayoutPanel(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kwlCurrentTheme = new Krypton.Toolkit.KryptonWrapLabel(); + this.kpnlToolkitInformation = new Krypton.Toolkit.KryptonPanel(); + this.tscToolkitInformation = new System.Windows.Forms.ToolStripContainer(); + this.kpnlToolkitGeneralInformation = new Krypton.Toolkit.KryptonPanel(); + this.tlpGeneralInformation = new System.Windows.Forms.TableLayoutPanel(); + this.pbxLogo = new System.Windows.Forms.PictureBox(); + this.klwlblGeneralInformation = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.klblCurrentTheme = new Krypton.Toolkit.KryptonLabel(); + this.ktcmbCurrentTheme = new Krypton.Toolkit.KryptonThemeComboBox(); + this.klblBuiltOn = new Krypton.Toolkit.KryptonLabel(); + this.kpnlDiscord = new Krypton.Toolkit.KryptonPanel(); + this.klwlblDiscord = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.kpnlDeveloperInformation = new Krypton.Toolkit.KryptonPanel(); + this.tlpDeveloperInformation = new System.Windows.Forms.TableLayoutPanel(); + this.klwlblRepositories = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.klwlblDocumentation = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.klwlblDemos = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.kpnlVersions = new Krypton.Toolkit.KryptonPanel(); + this.kdgvVersions = new Krypton.Toolkit.KryptonDataGridView(); + this.tsToolkitInformation = new System.Windows.Forms.ToolStrip(); + this.tsbtnToolkitGeneralInformation = new System.Windows.Forms.ToolStripButton(); + this.tssDiscord = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnDiscord = new System.Windows.Forms.ToolStripButton(); + this.tssDeveloperInformation = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnDeveloperInformation = new System.Windows.Forms.ToolStripButton(); + this.tssVersions = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnVersions = new System.Windows.Forms.ToolStripButton(); + this.tsMain = new System.Windows.Forms.ToolStrip(); + this.tsbtnGeneralInformation = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnDescription = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnFileInformation = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnTheme = new System.Windows.Forms.ToolStripButton(); + this.tssToolkitInformation = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnToolkitInformation = new System.Windows.Forms.ToolStripButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.khgMain)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.khgMain.Panel)).BeginInit(); + this.khgMain.Panel.SuspendLayout(); + this.khgMain.SuspendLayout(); + this.tscMain.ContentPanel.SuspendLayout(); + this.tscMain.TopToolStripPanel.SuspendLayout(); + this.tscMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlGeneralInformation)).BeginInit(); + this.kpnlGeneralInformation.SuspendLayout(); + this.tlpnlGeneralInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDescription)).BeginInit(); + this.kpnlDescription.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFileInformation)).BeginInit(); + this.kpnlFileInformation.SuspendLayout(); + this.tscFileInformation.ContentPanel.SuspendLayout(); + this.tscFileInformation.TopToolStripPanel.SuspendLayout(); + this.tscFileInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlApplication)).BeginInit(); + this.kpnlApplication.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvApplication)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblies)).BeginInit(); + this.kpnlAssemblies.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvAssemblies)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblyDetails)).BeginInit(); + this.kpnlAssemblyDetails.SuspendLayout(); + this.tsFileInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlTheme)).BeginInit(); + this.kpnlTheme.SuspendLayout(); + this.tlpTheme.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitInformation)).BeginInit(); + this.kpnlToolkitInformation.SuspendLayout(); + this.tscToolkitInformation.ContentPanel.SuspendLayout(); + this.tscToolkitInformation.TopToolStripPanel.SuspendLayout(); + this.tscToolkitInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitGeneralInformation)).BeginInit(); + this.kpnlToolkitGeneralInformation.SuspendLayout(); + this.tlpGeneralInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxLogo)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ktcmbCurrentTheme)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDiscord)).BeginInit(); + this.kpnlDiscord.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDeveloperInformation)).BeginInit(); + this.kpnlDeveloperInformation.SuspendLayout(); + this.tlpDeveloperInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlVersions)).BeginInit(); + this.kpnlVersions.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvVersions)).BeginInit(); + this.tsToolkitInformation.SuspendLayout(); + this.tsMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel1); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 363); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(786, 50); + this.kpnlButtons.TabIndex = 1; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.kbtnOk, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnSystemInformation, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 49F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(786, 49); + this.tableLayoutPanel1.TabIndex = 3; + // + // kbtnOk + // + this.kbtnOk.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnOk.AutoSize = true; + this.kbtnOk.Location = new System.Drawing.Point(10, 12); + this.kbtnOk.Margin = new System.Windows.Forms.Padding(10); + this.kbtnOk.Name = "kbtnOk"; + this.kbtnOk.Size = new System.Drawing.Size(96, 24); + this.kbtnOk.TabIndex = 0; + this.kbtnOk.Values.Text = "kryptonButton1"; + // + // kbtnSystemInformation + // + this.kbtnSystemInformation.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnSystemInformation.AutoSize = true; + this.kbtnSystemInformation.Location = new System.Drawing.Point(126, 12); + this.kbtnSystemInformation.Margin = new System.Windows.Forms.Padding(10); + this.kbtnSystemInformation.Name = "kbtnSystemInformation"; + this.kbtnSystemInformation.Size = new System.Drawing.Size(96, 24); + this.kbtnSystemInformation.TabIndex = 1; + this.kbtnSystemInformation.Values.Text = "kryptonButton2"; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(786, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.khgMain); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(786, 363); + this.kryptonPanel1.TabIndex = 2; + // + // khgMain + // + this.khgMain.HeaderVisibleSecondary = false; + this.khgMain.Location = new System.Drawing.Point(12, 12); + this.khgMain.Name = "khgMain"; + // + // khgMain.Panel + // + this.khgMain.Panel.Controls.Add(this.tscMain); + this.khgMain.Size = new System.Drawing.Size(758, 341); + this.khgMain.TabIndex = 3; + this.khgMain.ValuesPrimary.Image = null; + // + // tscMain + // + // + // tscMain.ContentPanel + // + this.tscMain.ContentPanel.Controls.Add(this.kpnlGeneralInformation); + this.tscMain.ContentPanel.Controls.Add(this.kpnlDescription); + this.tscMain.ContentPanel.Controls.Add(this.kpnlFileInformation); + this.tscMain.ContentPanel.Controls.Add(this.kpnlTheme); + this.tscMain.ContentPanel.Controls.Add(this.kpnlToolkitInformation); + this.tscMain.ContentPanel.Size = new System.Drawing.Size(756, 282); + this.tscMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tscMain.Location = new System.Drawing.Point(0, 0); + this.tscMain.Name = "tscMain"; + this.tscMain.Size = new System.Drawing.Size(756, 307); + this.tscMain.TabIndex = 0; + this.tscMain.Text = "toolStripContainer1"; + // + // tscMain.TopToolStripPanel + // + this.tscMain.TopToolStripPanel.Controls.Add(this.tsMain); + // + // kpnlGeneralInformation + // + this.kpnlGeneralInformation.Controls.Add(this.tlpnlGeneralInformation); + this.kpnlGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlGeneralInformation.Name = "kpnlGeneralInformation"; + this.kpnlGeneralInformation.Size = new System.Drawing.Size(756, 282); + this.kpnlGeneralInformation.TabIndex = 3; + // + // tlpnlGeneralInformation + // + this.tlpnlGeneralInformation.BackColor = System.Drawing.Color.Transparent; + this.tlpnlGeneralInformation.ColumnCount = 2; + this.tlpnlGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpnlGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpnlGeneralInformation.Controls.Add(this.pbxImage, 0, 0); + this.tlpnlGeneralInformation.Controls.Add(this.kwlVersionLabel, 1, 0); + this.tlpnlGeneralInformation.Controls.Add(this.kwlBuiltOn, 1, 1); + this.tlpnlGeneralInformation.Controls.Add(this.kwlCopyright, 1, 2); + this.tlpnlGeneralInformation.Controls.Add(this.kryptonWrapLabel5, 1, 3); + this.tlpnlGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpnlGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.tlpnlGeneralInformation.Name = "tlpnlGeneralInformation"; + this.tlpnlGeneralInformation.RowCount = 4; + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.Size = new System.Drawing.Size(756, 282); + this.tlpnlGeneralInformation.TabIndex = 1; + // + // pbxImage + // + this.pbxImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxImage.Location = new System.Drawing.Point(687, 5); + this.pbxImage.Margin = new System.Windows.Forms.Padding(5); + this.pbxImage.Name = "pbxImage"; + this.tlpnlGeneralInformation.SetRowSpan(this.pbxImage, 4); + this.pbxImage.Size = new System.Drawing.Size(64, 272); + this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxImage.TabIndex = 0; + this.pbxImage.TabStop = false; + // + // kwlVersionLabel + // + this.kwlVersionLabel.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlVersionLabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlVersionLabel.ForeColor = System.Drawing.Color.Black; + this.kwlVersionLabel.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlVersionLabel.Location = new System.Drawing.Point(3, 0); + this.kwlVersionLabel.Name = "kwlVersionLabel"; + this.kwlVersionLabel.Size = new System.Drawing.Size(676, 70); + this.kwlVersionLabel.Text = "kryptonWrapLabel2"; + this.kwlVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kwlBuiltOn + // + this.kwlBuiltOn.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlBuiltOn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlBuiltOn.ForeColor = System.Drawing.Color.Black; + this.kwlBuiltOn.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlBuiltOn.Location = new System.Drawing.Point(3, 70); + this.kwlBuiltOn.Name = "kwlBuiltOn"; + this.kwlBuiltOn.Size = new System.Drawing.Size(676, 70); + this.kwlBuiltOn.Text = "kryptonWrapLabel3"; + this.kwlBuiltOn.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kwlCopyright + // + this.kwlCopyright.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlCopyright.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlCopyright.ForeColor = System.Drawing.Color.Black; + this.kwlCopyright.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlCopyright.Location = new System.Drawing.Point(3, 140); + this.kwlCopyright.Name = "kwlCopyright"; + this.kwlCopyright.Size = new System.Drawing.Size(676, 70); + this.kwlCopyright.Text = "kryptonWrapLabel4"; + this.kwlCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kryptonWrapLabel5 + // + this.kryptonWrapLabel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonWrapLabel5.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kryptonWrapLabel5.ForeColor = System.Drawing.Color.Black; + this.kryptonWrapLabel5.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kryptonWrapLabel5.Location = new System.Drawing.Point(3, 210); + this.kryptonWrapLabel5.Name = "kryptonWrapLabel5"; + this.kryptonWrapLabel5.Size = new System.Drawing.Size(676, 72); + this.kryptonWrapLabel5.Text = "kryptonWrapLabel5"; + this.kryptonWrapLabel5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kpnlDescription + // + this.kpnlDescription.Controls.Add(this.krtbDescription); + this.kpnlDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlDescription.Location = new System.Drawing.Point(0, 0); + this.kpnlDescription.Name = "kpnlDescription"; + this.kpnlDescription.Size = new System.Drawing.Size(756, 282); + this.kpnlDescription.TabIndex = 2; + // + // krtbDescription + // + this.krtbDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.krtbDescription.InputControlStyle = Krypton.Toolkit.InputControlStyle.PanelClient; + this.krtbDescription.Location = new System.Drawing.Point(0, 0); + this.krtbDescription.Name = "krtbDescription"; + this.krtbDescription.Size = new System.Drawing.Size(756, 282); + this.krtbDescription.TabIndex = 0; + this.krtbDescription.Text = ""; + // + // kpnlFileInformation + // + this.kpnlFileInformation.Controls.Add(this.tscFileInformation); + this.kpnlFileInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlFileInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlFileInformation.Name = "kpnlFileInformation"; + this.kpnlFileInformation.Size = new System.Drawing.Size(756, 282); + this.kpnlFileInformation.TabIndex = 1; + // + // tscFileInformation + // + // + // tscFileInformation.ContentPanel + // + this.tscFileInformation.ContentPanel.Controls.Add(this.kpnlApplication); + this.tscFileInformation.ContentPanel.Controls.Add(this.kpnlAssemblies); + this.tscFileInformation.ContentPanel.Controls.Add(this.kpnlAssemblyDetails); + this.tscFileInformation.ContentPanel.Size = new System.Drawing.Size(756, 257); + this.tscFileInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tscFileInformation.Location = new System.Drawing.Point(0, 0); + this.tscFileInformation.Name = "tscFileInformation"; + this.tscFileInformation.Size = new System.Drawing.Size(756, 282); + this.tscFileInformation.TabIndex = 1; + this.tscFileInformation.Text = "toolStripContainer2"; + // + // tscFileInformation.TopToolStripPanel + // + this.tscFileInformation.TopToolStripPanel.Controls.Add(this.tsFileInformation); + // + // kpnlApplication + // + this.kpnlApplication.Controls.Add(this.kdgvApplication); + this.kpnlApplication.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlApplication.Location = new System.Drawing.Point(0, 0); + this.kpnlApplication.Name = "kpnlApplication"; + this.kpnlApplication.Size = new System.Drawing.Size(756, 257); + this.kpnlApplication.TabIndex = 1; + // + // kdgvApplication + // + this.kdgvApplication.AllowUserToAddRows = false; + this.kdgvApplication.AllowUserToDeleteRows = false; + this.kdgvApplication.AllowUserToResizeColumns = false; + this.kdgvApplication.AllowUserToResizeRows = false; + this.kdgvApplication.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.kdgvApplication.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.kdgvApplication.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kdgvApplication.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdgvApplication.Location = new System.Drawing.Point(0, 0); + this.kdgvApplication.Name = "kdgvApplication"; + this.kdgvApplication.Size = new System.Drawing.Size(756, 257); + this.kdgvApplication.TabIndex = 0; + // + // kpnlAssemblies + // + this.kpnlAssemblies.Controls.Add(this.kdgvAssemblies); + this.kpnlAssemblies.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlAssemblies.Location = new System.Drawing.Point(0, 0); + this.kpnlAssemblies.Name = "kpnlAssemblies"; + this.kpnlAssemblies.Size = new System.Drawing.Size(756, 257); + this.kpnlAssemblies.TabIndex = 1; + // + // kdgvAssemblies + // + this.kdgvAssemblies.AllowUserToAddRows = false; + this.kdgvAssemblies.AllowUserToDeleteRows = false; + this.kdgvAssemblies.AllowUserToResizeColumns = false; + this.kdgvAssemblies.AllowUserToResizeRows = false; + this.kdgvAssemblies.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.kdgvAssemblies.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.kdgvAssemblies.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kdgvAssemblies.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdgvAssemblies.Location = new System.Drawing.Point(0, 0); + this.kdgvAssemblies.Name = "kdgvAssemblies"; + this.kdgvAssemblies.Size = new System.Drawing.Size(756, 257); + this.kdgvAssemblies.TabIndex = 0; + // + // kpnlAssemblyDetails + // + this.kpnlAssemblyDetails.Controls.Add(this.kiadAssemblyDetails); + this.kpnlAssemblyDetails.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlAssemblyDetails.Location = new System.Drawing.Point(0, 0); + this.kpnlAssemblyDetails.Name = "kpnlAssemblyDetails"; + this.kpnlAssemblyDetails.Size = new System.Drawing.Size(756, 257); + this.kpnlAssemblyDetails.TabIndex = 0; + // + // kiadAssemblyDetails + // + this.kiadAssemblyDetails.BackColor = System.Drawing.Color.Transparent; + this.kiadAssemblyDetails.Dock = System.Windows.Forms.DockStyle.Fill; + this.kiadAssemblyDetails.Location = new System.Drawing.Point(0, 0); + this.kiadAssemblyDetails.Name = "kiadAssemblyDetails"; + this.kiadAssemblyDetails.Size = new System.Drawing.Size(756, 257); + this.kiadAssemblyDetails.TabIndex = 0; + // + // tsFileInformation + // + this.tsFileInformation.Dock = System.Windows.Forms.DockStyle.None; + this.tsFileInformation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.tsFileInformation.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.tsFileInformation.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtnApplicationDetails, + this.tssAssembliesDetails, + this.tsbtnAssembliesDetails, + this.tssAssemblyDetails, + this.tsbtnAssemblyDetails}); + this.tsFileInformation.Location = new System.Drawing.Point(465, 0); + this.tsFileInformation.Name = "tsFileInformation"; + this.tsFileInformation.Size = new System.Drawing.Size(257, 25); + this.tsFileInformation.TabIndex = 0; + // + // tsbtnApplicationDetails + // + this.tsbtnApplicationDetails.CheckOnClick = true; + this.tsbtnApplicationDetails.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnApplicationDetails.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnApplicationDetails.Name = "tsbtnApplicationDetails"; + this.tsbtnApplicationDetails.Size = new System.Drawing.Size(72, 22); + this.tsbtnApplicationDetails.Text = "Application"; + // + // tssAssembliesDetails + // + this.tssAssembliesDetails.Name = "tssAssembliesDetails"; + this.tssAssembliesDetails.Size = new System.Drawing.Size(6, 25); + // + // tsbtnAssembliesDetails + // + this.tsbtnAssembliesDetails.CheckOnClick = true; + this.tsbtnAssembliesDetails.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnAssembliesDetails.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnAssembliesDetails.Name = "tsbtnAssembliesDetails"; + this.tsbtnAssembliesDetails.Size = new System.Drawing.Size(70, 22); + this.tsbtnAssembliesDetails.Text = "Assemblies"; + // + // tssAssemblyDetails + // + this.tssAssemblyDetails.Name = "tssAssemblyDetails"; + this.tssAssemblyDetails.Size = new System.Drawing.Size(6, 25); + // + // tsbtnAssemblyDetails + // + this.tsbtnAssemblyDetails.CheckOnClick = true; + this.tsbtnAssemblyDetails.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnAssemblyDetails.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnAssemblyDetails.Name = "tsbtnAssemblyDetails"; + this.tsbtnAssemblyDetails.Size = new System.Drawing.Size(100, 22); + this.tsbtnAssemblyDetails.Text = "Assembly Details"; + // + // kpnlTheme + // + this.kpnlTheme.Controls.Add(this.tlpTheme); + this.kpnlTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlTheme.Location = new System.Drawing.Point(0, 0); + this.kpnlTheme.Name = "kpnlTheme"; + this.kpnlTheme.Size = new System.Drawing.Size(756, 282); + this.kpnlTheme.TabIndex = 0; + // + // tlpTheme + // + this.tlpTheme.BackColor = System.Drawing.Color.Transparent; + this.tlpTheme.ColumnCount = 1; + this.tlpTheme.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpTheme.Controls.Add(this.kryptonThemeComboBox1, 0, 1); + this.tlpTheme.Controls.Add(this.kwlCurrentTheme, 0, 0); + this.tlpTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpTheme.Location = new System.Drawing.Point(0, 0); + this.tlpTheme.Name = "tlpTheme"; + this.tlpTheme.RowCount = 2; + this.tlpTheme.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpTheme.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpTheme.Size = new System.Drawing.Size(756, 282); + this.tlpTheme.TabIndex = 0; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonThemeComboBox1.DropDownWidth = 746; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(5, 256); + this.kryptonThemeComboBox1.Margin = new System.Windows.Forms.Padding(5); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(746, 21); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 0; + // + // kwlCurrentTheme + // + this.kwlCurrentTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlCurrentTheme.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlCurrentTheme.ForeColor = System.Drawing.Color.Black; + this.kwlCurrentTheme.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlCurrentTheme.Location = new System.Drawing.Point(3, 0); + this.kwlCurrentTheme.Name = "kwlCurrentTheme"; + this.kwlCurrentTheme.Padding = new System.Windows.Forms.Padding(5); + this.kwlCurrentTheme.Size = new System.Drawing.Size(750, 251); + this.kwlCurrentTheme.Text = "kryptonWrapLabel1"; + this.kwlCurrentTheme.TextAlign = System.Drawing.ContentAlignment.BottomLeft; + // + // kpnlToolkitInformation + // + this.kpnlToolkitInformation.Controls.Add(this.tscToolkitInformation); + this.kpnlToolkitInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlToolkitInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlToolkitInformation.Name = "kpnlToolkitInformation"; + this.kpnlToolkitInformation.Size = new System.Drawing.Size(756, 282); + this.kpnlToolkitInformation.TabIndex = 4; + // + // tscToolkitInformation + // + // + // tscToolkitInformation.ContentPanel + // + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlToolkitGeneralInformation); + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlDiscord); + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlDeveloperInformation); + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlVersions); + this.tscToolkitInformation.ContentPanel.Size = new System.Drawing.Size(756, 257); + this.tscToolkitInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tscToolkitInformation.Location = new System.Drawing.Point(0, 0); + this.tscToolkitInformation.Name = "tscToolkitInformation"; + this.tscToolkitInformation.Size = new System.Drawing.Size(756, 282); + this.tscToolkitInformation.TabIndex = 2; + this.tscToolkitInformation.Text = "toolStripContainer1"; + // + // tscToolkitInformation.TopToolStripPanel + // + this.tscToolkitInformation.TopToolStripPanel.Controls.Add(this.tsToolkitInformation); + // + // kpnlToolkitGeneralInformation + // + this.kpnlToolkitGeneralInformation.Controls.Add(this.tlpGeneralInformation); + this.kpnlToolkitGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlToolkitGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlToolkitGeneralInformation.Name = "kpnlToolkitGeneralInformation"; + this.kpnlToolkitGeneralInformation.Size = new System.Drawing.Size(756, 257); + this.kpnlToolkitGeneralInformation.TabIndex = 3; + // + // tlpGeneralInformation + // + this.tlpGeneralInformation.BackColor = System.Drawing.Color.Transparent; + this.tlpGeneralInformation.ColumnCount = 2; + this.tlpGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpGeneralInformation.Controls.Add(this.pbxLogo, 0, 0); + this.tlpGeneralInformation.Controls.Add(this.klwlblGeneralInformation, 1, 0); + this.tlpGeneralInformation.Controls.Add(this.klblCurrentTheme, 1, 2); + this.tlpGeneralInformation.Controls.Add(this.ktcmbCurrentTheme, 1, 3); + this.tlpGeneralInformation.Controls.Add(this.klblBuiltOn, 1, 1); + this.tlpGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.tlpGeneralInformation.Name = "tlpGeneralInformation"; + this.tlpGeneralInformation.RowCount = 3; + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGeneralInformation.Size = new System.Drawing.Size(756, 257); + this.tlpGeneralInformation.TabIndex = 0; + // + // pbxLogo + // + this.pbxLogo.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxLogo.Location = new System.Drawing.Point(687, 5); + this.pbxLogo.Margin = new System.Windows.Forms.Padding(5); + this.pbxLogo.Name = "pbxLogo"; + this.pbxLogo.Padding = new System.Windows.Forms.Padding(4, 4, 0, 0); + this.pbxLogo.Size = new System.Drawing.Size(64, 156); + this.pbxLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxLogo.TabIndex = 0; + this.pbxLogo.TabStop = false; + // + // klwlblGeneralInformation + // + this.klwlblGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblGeneralInformation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblGeneralInformation.ForeColor = System.Drawing.Color.White; + this.klwlblGeneralInformation.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblGeneralInformation.LinkArea = new System.Windows.Forms.LinkArea(133, 143); + this.klwlblGeneralInformation.Location = new System.Drawing.Point(5, 5); + this.klwlblGeneralInformation.Margin = new System.Windows.Forms.Padding(5); + this.klwlblGeneralInformation.Name = "klwlblGeneralInformation"; + this.klwlblGeneralInformation.Size = new System.Drawing.Size(672, 156); + this.klwlblGeneralInformation.Text = "Some of the components used in this application are part of the Krypton Standard " + + "Toolkit.\r\n\r\nLicense: BSD-3-Clause\r\n\r\nTo learn more, click here."; + this.klwlblGeneralInformation.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.klwlblGeneralInformation.UseCompatibleTextRendering = true; + // + // klblCurrentTheme + // + this.klblCurrentTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblCurrentTheme.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblCurrentTheme.Location = new System.Drawing.Point(5, 201); + this.klblCurrentTheme.Margin = new System.Windows.Forms.Padding(5); + this.klblCurrentTheme.Name = "klblCurrentTheme"; + this.klblCurrentTheme.Size = new System.Drawing.Size(672, 20); + this.klblCurrentTheme.TabIndex = 2; + this.klblCurrentTheme.Values.Text = "Current Theme:"; + // + // ktcmbCurrentTheme + // + this.ktcmbCurrentTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.ktcmbCurrentTheme.DropDownWidth = 672; + this.ktcmbCurrentTheme.IntegralHeight = false; + this.ktcmbCurrentTheme.Location = new System.Drawing.Point(5, 231); + this.ktcmbCurrentTheme.Margin = new System.Windows.Forms.Padding(5); + this.ktcmbCurrentTheme.Name = "ktcmbCurrentTheme"; + this.ktcmbCurrentTheme.Size = new System.Drawing.Size(672, 21); + this.ktcmbCurrentTheme.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.ktcmbCurrentTheme.TabIndex = 3; + // + // klblBuiltOn + // + this.klblBuiltOn.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblBuiltOn.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.klblBuiltOn.Location = new System.Drawing.Point(5, 171); + this.klblBuiltOn.Margin = new System.Windows.Forms.Padding(5); + this.klblBuiltOn.Name = "klblBuiltOn"; + this.klblBuiltOn.Size = new System.Drawing.Size(672, 20); + this.klblBuiltOn.TabIndex = 4; + this.klblBuiltOn.Values.Text = "Built On: {0}"; + // + // kpnlDiscord + // + this.kpnlDiscord.Controls.Add(this.klwlblDiscord); + this.kpnlDiscord.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlDiscord.Location = new System.Drawing.Point(0, 0); + this.kpnlDiscord.Name = "kpnlDiscord"; + this.kpnlDiscord.Size = new System.Drawing.Size(756, 257); + this.kpnlDiscord.TabIndex = 2; + // + // klwlblDiscord + // + this.klwlblDiscord.AutoSize = false; + this.klwlblDiscord.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblDiscord.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblDiscord.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblDiscord.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblDiscord.Location = new System.Drawing.Point(0, 0); + this.klwlblDiscord.Name = "klwlblDiscord"; + this.klwlblDiscord.Size = new System.Drawing.Size(756, 257); + this.klwlblDiscord.Text = "kryptonLinkWrapLabel1"; + this.klwlblDiscord.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kpnlDeveloperInformation + // + this.kpnlDeveloperInformation.Controls.Add(this.tlpDeveloperInformation); + this.kpnlDeveloperInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlDeveloperInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlDeveloperInformation.Name = "kpnlDeveloperInformation"; + this.kpnlDeveloperInformation.Size = new System.Drawing.Size(756, 257); + this.kpnlDeveloperInformation.TabIndex = 1; + // + // tlpDeveloperInformation + // + this.tlpDeveloperInformation.BackColor = System.Drawing.Color.Transparent; + this.tlpDeveloperInformation.ColumnCount = 1; + this.tlpDeveloperInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpDeveloperInformation.Controls.Add(this.klwlblRepositories, 0, 0); + this.tlpDeveloperInformation.Controls.Add(this.klwlblDocumentation, 0, 1); + this.tlpDeveloperInformation.Controls.Add(this.klwlblDemos, 0, 2); + this.tlpDeveloperInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpDeveloperInformation.Location = new System.Drawing.Point(0, 0); + this.tlpDeveloperInformation.Name = "tlpDeveloperInformation"; + this.tlpDeveloperInformation.RowCount = 3; + this.tlpDeveloperInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpDeveloperInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpDeveloperInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpDeveloperInformation.Size = new System.Drawing.Size(756, 257); + this.tlpDeveloperInformation.TabIndex = 0; + // + // klwlblRepositories + // + this.klwlblRepositories.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblRepositories.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblRepositories.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblRepositories.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblRepositories.Location = new System.Drawing.Point(5, 5); + this.klwlblRepositories.Margin = new System.Windows.Forms.Padding(5); + this.klwlblRepositories.Name = "klwlblRepositories"; + this.klwlblRepositories.Size = new System.Drawing.Size(746, 75); + this.klwlblRepositories.Text = "kryptonLinkWrapLabel1"; + this.klwlblRepositories.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // klwlblDocumentation + // + this.klwlblDocumentation.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblDocumentation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblDocumentation.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblDocumentation.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblDocumentation.Location = new System.Drawing.Point(5, 90); + this.klwlblDocumentation.Margin = new System.Windows.Forms.Padding(5); + this.klwlblDocumentation.Name = "klwlblDocumentation"; + this.klwlblDocumentation.Size = new System.Drawing.Size(746, 75); + this.klwlblDocumentation.Text = "kryptonLinkWrapLabel1"; + this.klwlblDocumentation.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // klwlblDemos + // + this.klwlblDemos.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblDemos.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblDemos.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblDemos.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblDemos.Location = new System.Drawing.Point(5, 175); + this.klwlblDemos.Margin = new System.Windows.Forms.Padding(5); + this.klwlblDemos.Name = "klwlblDemos"; + this.klwlblDemos.Size = new System.Drawing.Size(746, 77); + this.klwlblDemos.Text = "kryptonLinkWrapLabel1"; + this.klwlblDemos.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kpnlVersions + // + this.kpnlVersions.Controls.Add(this.kdgvVersions); + this.kpnlVersions.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlVersions.Location = new System.Drawing.Point(0, 0); + this.kpnlVersions.Name = "kpnlVersions"; + this.kpnlVersions.Size = new System.Drawing.Size(756, 257); + this.kpnlVersions.TabIndex = 0; + // + // kdgvVersions + // + this.kdgvVersions.AllowUserToAddRows = false; + this.kdgvVersions.AllowUserToDeleteRows = false; + this.kdgvVersions.AllowUserToOrderColumns = true; + this.kdgvVersions.AllowUserToResizeColumns = false; + this.kdgvVersions.AllowUserToResizeRows = false; + this.kdgvVersions.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.kdgvVersions.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.kdgvVersions.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kdgvVersions.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdgvVersions.Location = new System.Drawing.Point(0, 0); + this.kdgvVersions.Name = "kdgvVersions"; + this.kdgvVersions.Size = new System.Drawing.Size(756, 257); + this.kdgvVersions.TabIndex = 0; + // + // tsToolkitInformation + // + this.tsToolkitInformation.Dock = System.Windows.Forms.DockStyle.None; + this.tsToolkitInformation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.tsToolkitInformation.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.tsToolkitInformation.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtnToolkitGeneralInformation, + this.tssDiscord, + this.tsbtnDiscord, + this.tssDeveloperInformation, + this.tsbtnDeveloperInformation, + this.tssVersions, + this.tsbtnVersions}); + this.tsToolkitInformation.Location = new System.Drawing.Point(288, 0); + this.tsToolkitInformation.Name = "tsToolkitInformation"; + this.tsToolkitInformation.Size = new System.Drawing.Size(434, 25); + this.tsToolkitInformation.TabIndex = 0; + // + // tsbtnToolkitGeneralInformation + // + this.tsbtnToolkitGeneralInformation.Checked = true; + this.tsbtnToolkitGeneralInformation.CheckOnClick = true; + this.tsbtnToolkitGeneralInformation.CheckState = System.Windows.Forms.CheckState.Checked; + this.tsbtnToolkitGeneralInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnToolkitGeneralInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnToolkitGeneralInformation.Name = "tsbtnToolkitGeneralInformation"; + this.tsbtnToolkitGeneralInformation.Size = new System.Drawing.Size(117, 22); + this.tsbtnToolkitGeneralInformation.Text = "General Information"; + this.tsbtnToolkitGeneralInformation.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; + // + // tssDiscord + // + this.tssDiscord.Name = "tssDiscord"; + this.tssDiscord.Size = new System.Drawing.Size(6, 25); + // + // tsbtnDiscord + // + this.tsbtnDiscord.CheckOnClick = true; + this.tsbtnDiscord.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnDiscord.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnDiscord.Name = "tsbtnDiscord"; + this.tsbtnDiscord.Size = new System.Drawing.Size(51, 22); + this.tsbtnDiscord.Text = "Discord"; + // + // tssDeveloperInformation + // + this.tssDeveloperInformation.Name = "tssDeveloperInformation"; + this.tssDeveloperInformation.Size = new System.Drawing.Size(6, 25); + // + // tsbtnDeveloperInformation + // + this.tsbtnDeveloperInformation.CheckOnClick = true; + this.tsbtnDeveloperInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnDeveloperInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnDeveloperInformation.Name = "tsbtnDeveloperInformation"; + this.tsbtnDeveloperInformation.Size = new System.Drawing.Size(130, 22); + this.tsbtnDeveloperInformation.Text = "Developer Information"; + // + // tssVersions + // + this.tssVersions.Name = "tssVersions"; + this.tssVersions.Size = new System.Drawing.Size(6, 25); + // + // tsbtnVersions + // + this.tsbtnVersions.CheckOnClick = true; + this.tsbtnVersions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnVersions.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnVersions.Name = "tsbtnVersions"; + this.tsbtnVersions.Size = new System.Drawing.Size(115, 22); + this.tsbtnVersions.Text = "Version Information"; + // + // tsMain + // + this.tsMain.Dock = System.Windows.Forms.DockStyle.None; + this.tsMain.Font = new System.Drawing.Font("Segoe UI", 9F); + this.tsMain.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtnGeneralInformation, + this.toolStripSeparator1, + this.tsbtnDescription, + this.toolStripSeparator2, + this.tsbtnFileInformation, + this.toolStripSeparator3, + this.tsbtnTheme, + this.tssToolkitInformation, + this.tsbtnToolkitInformation}); + this.tsMain.Location = new System.Drawing.Point(253, 0); + this.tsMain.Name = "tsMain"; + this.tsMain.Size = new System.Drawing.Size(500, 25); + this.tsMain.TabIndex = 0; + // + // tsbtnGeneralInformation + // + this.tsbtnGeneralInformation.CheckOnClick = true; + this.tsbtnGeneralInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnGeneralInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnGeneralInformation.Name = "tsbtnGeneralInformation"; + this.tsbtnGeneralInformation.Size = new System.Drawing.Size(117, 22); + this.tsbtnGeneralInformation.Text = "General Information"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // tsbtnDescription + // + this.tsbtnDescription.CheckOnClick = true; + this.tsbtnDescription.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnDescription.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnDescription.Name = "tsbtnDescription"; + this.tsbtnDescription.Size = new System.Drawing.Size(71, 22); + this.tsbtnDescription.Text = "Description"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // tsbtnFileInformation + // + this.tsbtnFileInformation.CheckOnClick = true; + this.tsbtnFileInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnFileInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnFileInformation.Name = "tsbtnFileInformation"; + this.tsbtnFileInformation.Size = new System.Drawing.Size(95, 22); + this.tsbtnFileInformation.Text = "File Information"; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25); + // + // tsbtnTheme + // + this.tsbtnTheme.CheckOnClick = true; + this.tsbtnTheme.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnTheme.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnTheme.Name = "tsbtnTheme"; + this.tsbtnTheme.Size = new System.Drawing.Size(47, 22); + this.tsbtnTheme.Text = "Theme"; + // + // tssToolkitInformation + // + this.tssToolkitInformation.Name = "tssToolkitInformation"; + this.tssToolkitInformation.Size = new System.Drawing.Size(6, 25); + this.tssToolkitInformation.Visible = false; + // + // tsbtnToolkitInformation + // + this.tsbtnToolkitInformation.CheckOnClick = true; + this.tsbtnToolkitInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnToolkitInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnToolkitInformation.Name = "tsbtnToolkitInformation"; + this.tsbtnToolkitInformation.Size = new System.Drawing.Size(112, 22); + this.tsbtnToolkitInformation.Text = "Toolkit Information"; + this.tsbtnToolkitInformation.Visible = false; + // + // VisualAboutBoxRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(786, 413); + this.Controls.Add(this.kryptonPanel1); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualAboutBoxRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.khgMain.Panel)).EndInit(); + this.khgMain.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.khgMain)).EndInit(); + this.khgMain.ResumeLayout(false); + this.tscMain.ContentPanel.ResumeLayout(false); + this.tscMain.TopToolStripPanel.ResumeLayout(false); + this.tscMain.TopToolStripPanel.PerformLayout(); + this.tscMain.ResumeLayout(false); + this.tscMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlGeneralInformation)).EndInit(); + this.kpnlGeneralInformation.ResumeLayout(false); + this.tlpnlGeneralInformation.ResumeLayout(false); + this.tlpnlGeneralInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDescription)).EndInit(); + this.kpnlDescription.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFileInformation)).EndInit(); + this.kpnlFileInformation.ResumeLayout(false); + this.tscFileInformation.ContentPanel.ResumeLayout(false); + this.tscFileInformation.TopToolStripPanel.ResumeLayout(false); + this.tscFileInformation.TopToolStripPanel.PerformLayout(); + this.tscFileInformation.ResumeLayout(false); + this.tscFileInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlApplication)).EndInit(); + this.kpnlApplication.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kdgvApplication)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblies)).EndInit(); + this.kpnlAssemblies.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kdgvAssemblies)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblyDetails)).EndInit(); + this.kpnlAssemblyDetails.ResumeLayout(false); + this.tsFileInformation.ResumeLayout(false); + this.tsFileInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlTheme)).EndInit(); + this.kpnlTheme.ResumeLayout(false); + this.tlpTheme.ResumeLayout(false); + this.tlpTheme.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitInformation)).EndInit(); + this.kpnlToolkitInformation.ResumeLayout(false); + this.tscToolkitInformation.ContentPanel.ResumeLayout(false); + this.tscToolkitInformation.TopToolStripPanel.ResumeLayout(false); + this.tscToolkitInformation.TopToolStripPanel.PerformLayout(); + this.tscToolkitInformation.ResumeLayout(false); + this.tscToolkitInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitGeneralInformation)).EndInit(); + this.kpnlToolkitGeneralInformation.ResumeLayout(false); + this.tlpGeneralInformation.ResumeLayout(false); + this.tlpGeneralInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxLogo)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ktcmbCurrentTheme)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDiscord)).EndInit(); + this.kpnlDiscord.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDeveloperInformation)).EndInit(); + this.kpnlDeveloperInformation.ResumeLayout(false); + this.tlpDeveloperInformation.ResumeLayout(false); + this.tlpDeveloperInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlVersions)).EndInit(); + this.kpnlVersions.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kdgvVersions)).EndInit(); + this.tsToolkitInformation.ResumeLayout(false); + this.tsToolkitInformation.PerformLayout(); + this.tsMain.ResumeLayout(false); + this.tsMain.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private TableLayoutPanel tableLayoutPanel1; + private KryptonButton kbtnOk; + private KryptonButton kbtnSystemInformation; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kryptonPanel1; + private KryptonHeaderGroup khgMain; + private ToolStripContainer tscMain; + private KryptonPanel kpnlGeneralInformation; + private TableLayoutPanel tlpnlGeneralInformation; + private PictureBox pbxImage; + private KryptonWrapLabel kwlVersionLabel; + private KryptonWrapLabel kwlBuiltOn; + private KryptonWrapLabel kwlCopyright; + private KryptonWrapLabel kryptonWrapLabel5; + private KryptonPanel kpnlDescription; + private KryptonRichTextBox krtbDescription; + private KryptonPanel kpnlFileInformation; + private ToolStripContainer tscFileInformation; + private KryptonPanel kpnlApplication; + private KryptonDataGridView kdgvApplication; + private KryptonPanel kpnlAssemblies; + private KryptonDataGridView kdgvAssemblies; + private KryptonPanel kpnlAssemblyDetails; + private InternalAssemblyDetails kiadAssemblyDetails; + private ToolStrip tsFileInformation; + private ToolStripButton tsbtnApplicationDetails; + private ToolStripSeparator tssAssembliesDetails; + private ToolStripButton tsbtnAssembliesDetails; + private ToolStripSeparator tssAssemblyDetails; + private ToolStripButton tsbtnAssemblyDetails; + private KryptonPanel kpnlTheme; + private TableLayoutPanel tlpTheme; + private KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonWrapLabel kwlCurrentTheme; + private KryptonPanel kpnlToolkitInformation; + private ToolStripContainer tscToolkitInformation; + private KryptonPanel kpnlToolkitGeneralInformation; + private TableLayoutPanel tlpGeneralInformation; + private PictureBox pbxLogo; + private KryptonLinkWrapLabel klwlblGeneralInformation; + private KryptonLabel klblCurrentTheme; + private KryptonThemeComboBox ktcmbCurrentTheme; + private KryptonLabel klblBuiltOn; + private KryptonPanel kpnlDiscord; + private KryptonLinkWrapLabel klwlblDiscord; + private KryptonPanel kpnlDeveloperInformation; + private TableLayoutPanel tlpDeveloperInformation; + private KryptonLinkWrapLabel klwlblRepositories; + private KryptonLinkWrapLabel klwlblDocumentation; + private KryptonLinkWrapLabel klwlblDemos; + private KryptonPanel kpnlVersions; + private KryptonDataGridView kdgvVersions; + private ToolStrip tsToolkitInformation; + private ToolStripButton tsbtnToolkitGeneralInformation; + private ToolStripSeparator tssDiscord; + private ToolStripButton tsbtnDiscord; + private ToolStripSeparator tssDeveloperInformation; + private ToolStripButton tsbtnDeveloperInformation; + private ToolStripSeparator tssVersions; + private ToolStripButton tsbtnVersions; + private ToolStrip tsMain; + private ToolStripButton tsbtnGeneralInformation; + private ToolStripSeparator toolStripSeparator1; + private ToolStripButton tsbtnDescription; + private ToolStripSeparator toolStripSeparator2; + private ToolStripButton tsbtnFileInformation; + private ToolStripSeparator toolStripSeparator3; + private ToolStripButton tsbtnTheme; + private ToolStripSeparator tssToolkitInformation; + private ToolStripButton tsbtnToolkitInformation; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.cs new file mode 100644 index 000000000..a0bcc51c0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualAboutBoxRtlAwareForm : KryptonForm + { + public VisualAboutBoxRtlAwareForm() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.resx new file mode 100644 index 000000000..26d7e7339 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualAboutBoxRtlAwareForm.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 161, 17 + + + 322, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.Designer.cs new file mode 100644 index 000000000..f20bfb227 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.Designer.cs @@ -0,0 +1,196 @@ +namespace Krypton.Toolkit +{ + partial class VisualInputBoxRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tlpButtons = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnCancel = new Krypton.Toolkit.KryptonButton(); + this.kbtnOk = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.ktxtUserResponse = new Krypton.Toolkit.KryptonTextBox(); + this.kwlblPrompt = new Krypton.Toolkit.KryptonWrapLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tlpButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tlpButtons); + this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 129); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(378, 50); + this.kryptonPanel1.TabIndex = 0; + // + // tlpButtons + // + this.tlpButtons.BackColor = System.Drawing.Color.Transparent; + this.tlpButtons.ColumnCount = 2; + this.tlpButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpButtons.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpButtons.Controls.Add(this.kbtnCancel, 1, 0); + this.tlpButtons.Controls.Add(this.kbtnOk, 0, 0); + this.tlpButtons.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpButtons.Location = new System.Drawing.Point(0, 1); + this.tlpButtons.Name = "tlpButtons"; + this.tlpButtons.RowCount = 1; + this.tlpButtons.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpButtons.Size = new System.Drawing.Size(378, 49); + this.tlpButtons.TabIndex = 1; + // + // kbtnCancel + // + this.kbtnCancel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnCancel.AutoSize = true; + this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnCancel.Location = new System.Drawing.Point(10, 13); + this.kbtnCancel.Margin = new System.Windows.Forms.Padding(10); + this.kbtnCancel.Name = "kbtnCancel"; + this.kbtnCancel.Size = new System.Drawing.Size(94, 22); + this.kbtnCancel.TabIndex = 0; + this.kbtnCancel.Values.Text = "kryptonButton1"; + // + // kbtnOk + // + this.kbtnOk.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnOk.AutoSize = true; + this.kbtnOk.Location = new System.Drawing.Point(124, 13); + this.kbtnOk.Margin = new System.Windows.Forms.Padding(10); + this.kbtnOk.Name = "kbtnOk"; + this.kbtnOk.Size = new System.Drawing.Size(94, 22); + this.kbtnOk.TabIndex = 1; + this.kbtnOk.Values.Text = "kryptonButton1"; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(378, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.tableLayoutPanel2); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(378, 129); + this.kryptonPanel2.TabIndex = 1; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.ktxtUserResponse, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.kwlblPrompt, 0, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Margin = new System.Windows.Forms.Padding(5); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.Size = new System.Drawing.Size(378, 129); + this.tableLayoutPanel2.TabIndex = 0; + // + // ktxtUserResponse + // + this.ktxtUserResponse.Dock = System.Windows.Forms.DockStyle.Fill; + this.ktxtUserResponse.Location = new System.Drawing.Point(3, 103); + this.ktxtUserResponse.Name = "ktxtUserResponse"; + this.ktxtUserResponse.Size = new System.Drawing.Size(372, 23); + this.ktxtUserResponse.TabIndex = 0; + this.ktxtUserResponse.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ktxtUserResponse_KeyDown); + // + // kwlblPrompt + // + this.kwlblPrompt.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblPrompt.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlblPrompt.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblPrompt.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlblPrompt.Location = new System.Drawing.Point(3, 0); + this.kwlblPrompt.Name = "kwlblPrompt"; + this.kwlblPrompt.Size = new System.Drawing.Size(372, 100); + this.kwlblPrompt.Text = "kryptonWrapLabel1"; + this.kwlblPrompt.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // VisualInputBoxRtlAwareForm + // + this.AcceptButton = this.kbtnOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kbtnCancel; + this.ClientSize = new System.Drawing.Size(378, 179); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualInputBoxRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.tlpButtons.ResumeLayout(false); + this.tlpButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private KryptonPanel kryptonPanel2; + private KryptonBorderEdge kryptonBorderEdge1; + private TableLayoutPanel tlpButtons; + private TableLayoutPanel tableLayoutPanel2; + private KryptonTextBox ktxtUserResponse; + private KryptonWrapLabel kwlblPrompt; + private KryptonButton kbtnCancel; + private KryptonButton kbtnOk; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.cs new file mode 100644 index 000000000..e648cf75d --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.cs @@ -0,0 +1,105 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualInputBoxRtlAwareForm : KryptonForm + { + #region Instance Fields + + private readonly KryptonInputBoxData _inputBoxData; + + #endregion + + #region Identity + + public VisualInputBoxRtlAwareForm() + { + InitializeComponent(); + } + + public VisualInputBoxRtlAwareForm(KryptonInputBoxData inputBoxData) + { + _inputBoxData = inputBoxData; + + InitializeComponent(); + + // Update contents to match requirements + UpdateText(); + + UpdateCue(); + + UpdateButtons(); + } + + #endregion + + #region Implementation + + internal static string InternalShow(KryptonInputBoxData inputBoxData) + { + // If do not have an owner passed in then get the active window and use that instead + IWin32Window? showOwner = inputBoxData.Owner ?? FromHandle(PI.GetActiveWindow()); + + // Show input box window as a modal dialog and then dispose of it afterwards + using var ib = new VisualInputBoxRtlAwareForm(inputBoxData); + ib.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return ib.ShowDialog(showOwner) == DialogResult.OK + ? ib.InputResponse + : string.Empty; + } + + internal string InputResponse => ktxtUserResponse.Text; + + private void UpdateText() + { + Text = _inputBoxData.Caption; + kwlblPrompt.Text = _inputBoxData.Prompt; + ktxtUserResponse.Text = _inputBoxData.DefaultResponse; + ktxtUserResponse.UseSystemPasswordChar = _inputBoxData.UsePasswordOption ?? false; + } + + private void UpdateCue() + { + ktxtUserResponse.CueHint.CueHintText = _inputBoxData.CueText; + + if (_inputBoxData.CueColor != null || _inputBoxData.CueColor != Color.Transparent || _inputBoxData.CueColor != GlobalStaticValues.EMPTY_COLOR) + { + ktxtUserResponse.CueHint.Color1 = _inputBoxData.CueColor ?? Color.Gray; + } + + if (_inputBoxData.CueTypeface != null) + { + ktxtUserResponse.CueHint.Font = _inputBoxData.CueTypeface ?? KryptonManager.CurrentGlobalPalette.BaseFont; + } + } + + private void UpdateButtons() + { + kbtnOk.Text = KryptonManager.Strings.GeneralStrings.OK; + kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; + } + + private void ktxtUserResponse_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + kbtnOk.PerformClick(); + break; + case Keys.Escape: + kbtnCancel.PerformClick(); + break; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualInputBoxRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.Designer.cs new file mode 100644 index 000000000..69d76c97e --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.Designer.cs @@ -0,0 +1,255 @@ +namespace Krypton.Toolkit +{ + partial class VisualMessageBoxRtlAwareForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this._panelButtons = new Krypton.Toolkit.KryptonPanel(); + this._borderEdge = new Krypton.Toolkit.KryptonBorderEdge(); + this._button4 = new Krypton.Toolkit.MessageButton(); + this._button3 = new Krypton.Toolkit.MessageButton(); + this._button1 = new Krypton.Toolkit.MessageButton(); + this._button2 = new Krypton.Toolkit.MessageButton(); + this._messageIcon = new System.Windows.Forms.PictureBox(); + this.kpnlContentArea = new Krypton.Toolkit.KryptonPanel(); + this.krtbMessageText = new Krypton.Toolkit.KryptonRichTextBox(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).BeginInit(); + this._panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).BeginInit(); + this.kpnlContentArea.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(219, 64); + this.kryptonPanel1.TabIndex = 2; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this._panelButtons, 0, 1); + this.tableLayoutPanel1.Controls.Add(this._messageIcon, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kpnlContentArea, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(219, 64); + this.tableLayoutPanel1.TabIndex = 0; + // + // _panelButtons + // + this.tableLayoutPanel1.SetColumnSpan(this._panelButtons, 2); + this._panelButtons.Controls.Add(this._borderEdge); + this._panelButtons.Controls.Add(this._button4); + this._panelButtons.Controls.Add(this._button3); + this._panelButtons.Controls.Add(this._button1); + this._panelButtons.Controls.Add(this._button2); + this._panelButtons.Dock = System.Windows.Forms.DockStyle.Fill; + this._panelButtons.Location = new System.Drawing.Point(0, 43); + this._panelButtons.Margin = new System.Windows.Forms.Padding(0); + this._panelButtons.Name = "_panelButtons"; + this._panelButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelButtons.Size = new System.Drawing.Size(219, 21); + this._panelButtons.TabIndex = 0; + // + // _borderEdge + // + this._borderEdge.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._borderEdge.Dock = System.Windows.Forms.DockStyle.Top; + this._borderEdge.Location = new System.Drawing.Point(0, 0); + this._borderEdge.Margin = new System.Windows.Forms.Padding(2); + this._borderEdge.Name = "_borderEdge"; + this._borderEdge.Size = new System.Drawing.Size(219, 1); + this._borderEdge.Text = "kryptonBorderEdge1"; + // + // _button4 + // + this._button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button4.AutoSize = true; + this._button4.Enabled = false; + this._button4.IgnoreAltF4 = false; + this._button4.Location = new System.Drawing.Point(219, 0); + this._button4.Margin = new System.Windows.Forms.Padding(0); + this._button4.MinimumSize = new System.Drawing.Size(38, 21); + this._button4.Name = "_button4"; + this._button4.Size = new System.Drawing.Size(38, 23); + this._button4.TabIndex = 2; + this._button4.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button4.Values.Text = "B4"; + this._button4.Visible = false; + // + // _button3 + // + this._button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button3.AutoSize = true; + this._button3.Enabled = false; + this._button3.IgnoreAltF4 = false; + this._button3.Location = new System.Drawing.Point(182, 0); + this._button3.Margin = new System.Windows.Forms.Padding(0); + this._button3.MinimumSize = new System.Drawing.Size(38, 21); + this._button3.Name = "_button3"; + this._button3.Size = new System.Drawing.Size(38, 23); + this._button3.TabIndex = 2; + this._button3.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button3.Values.Text = "B3"; + this._button3.Visible = false; + // + // _button1 + // + this._button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button1.AutoSize = true; + this._button1.Enabled = false; + this._button1.IgnoreAltF4 = false; + this._button1.Location = new System.Drawing.Point(106, 0); + this._button1.Margin = new System.Windows.Forms.Padding(0); + this._button1.MinimumSize = new System.Drawing.Size(38, 21); + this._button1.Name = "_button1"; + this._button1.Size = new System.Drawing.Size(38, 23); + this._button1.TabIndex = 0; + this._button1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button1.Values.Text = "B1"; + this._button1.Visible = false; + // + // _button2 + // + this._button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button2.AutoSize = true; + this._button2.Enabled = false; + this._button2.IgnoreAltF4 = false; + this._button2.Location = new System.Drawing.Point(144, 0); + this._button2.Margin = new System.Windows.Forms.Padding(0); + this._button2.MinimumSize = new System.Drawing.Size(38, 21); + this._button2.Name = "_button2"; + this._button2.Size = new System.Drawing.Size(38, 23); + this._button2.TabIndex = 1; + this._button2.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button2.Values.Text = "B2"; + this._button2.Visible = false; + // + // _messageIcon + // + this._messageIcon.BackColor = System.Drawing.Color.Transparent; + this._messageIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this._messageIcon.Location = new System.Drawing.Point(178, 4); + this._messageIcon.Margin = new System.Windows.Forms.Padding(8, 4, 4, 4); + this._messageIcon.Name = "_messageIcon"; + this._messageIcon.Size = new System.Drawing.Size(33, 35); + this._messageIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this._messageIcon.TabIndex = 0; + this._messageIcon.TabStop = false; + // + // kpnlContentArea + // + this.kpnlContentArea.Controls.Add(this.krtbMessageText); + this.kpnlContentArea.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlContentArea.Location = new System.Drawing.Point(4, 12); + this.kpnlContentArea.Margin = new System.Windows.Forms.Padding(4, 12, 4, 12); + this.kpnlContentArea.Name = "kpnlContentArea"; + this.kpnlContentArea.Size = new System.Drawing.Size(166, 19); + this.kpnlContentArea.TabIndex = 1; + // + // krtbMessageText + // + this.krtbMessageText.DetectUrls = false; + this.krtbMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.krtbMessageText.InputControlStyle = Krypton.Toolkit.InputControlStyle.PanelClient; + this.krtbMessageText.Location = new System.Drawing.Point(0, 0); + this.krtbMessageText.Margin = new System.Windows.Forms.Padding(0); + this.krtbMessageText.Name = "krtbMessageText"; + this.krtbMessageText.ReadOnly = true; + this.krtbMessageText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; + this.krtbMessageText.Size = new System.Drawing.Size(150, 19); + this.krtbMessageText.StateCommon.Border.DrawBorders = Krypton.Toolkit.PaletteDrawBorders.None; + this.krtbMessageText.TabIndex = 0; + this.krtbMessageText.TabStop = false; + this.krtbMessageText.Text = "Message Text\n.\ttabbed"; + this.krtbMessageText.WordWrap = false; + // + // VisualMessageBoxRtlAwareForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(219, 64); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualMessageBoxRtlAwareForm"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).EndInit(); + this._panelButtons.ResumeLayout(false); + this._panelButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).EndInit(); + this.kpnlContentArea.ResumeLayout(false); + this.kpnlContentArea.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel1; + private KryptonPanel _panelButtons; + private KryptonBorderEdge _borderEdge; + private MessageButton _button4; + private MessageButton _button3; + private MessageButton _button1; + private MessageButton _button2; + private PictureBox _messageIcon; + private KryptonPanel kpnlContentArea; + private KryptonRichTextBox krtbMessageText; + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.cs new file mode 100644 index 000000000..f4469acd2 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.cs @@ -0,0 +1,616 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualMessageBoxRtlAwareForm : KryptonForm + { + #region Instance Fields + + private readonly bool _showHelpButton; + private readonly string? _text; + private readonly string? _caption; + private readonly KryptonMessageBoxButtons _buttons; + private readonly KryptonMessageBoxIcon _kryptonMessageBoxIcon; + private readonly KryptonMessageBoxDefaultButton _defaultButton; + //private readonly MessageBoxOptions _options; // https://github.com/Krypton-Suite/Standard-Toolkit/issues/313 + + // If help information provided, or we are not a service/default desktop application then grab an owner for showing the message box + private readonly IWin32Window? _showOwner; + private readonly HelpInfo? _helpInfo; + private readonly KryptonMessageBoxNativeWindow _krtbNativeWindow; + #endregion + + #region Public + + public KryptonMessageBoxResult MessageBoxResult { get; set; } + + #endregion + + #region Identity + + public VisualMessageBoxRtlAwareForm() + { + InitializeComponent(); + } + + public VisualMessageBoxRtlAwareForm(IWin32Window? showOwner, string? text, string? caption, + KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton, + HelpInfo? helpInfo, bool? showCtrlCopy, + bool? showHelpButton, + bool? showCloseButton) + { + // Store incoming values + _text = CommonHelper.NormalizeLineBreaks(text ?? string.Empty); + _caption = caption; + _buttons = buttons; + _kryptonMessageBoxIcon = icon; + _defaultButton = defaultButton; + _helpInfo = helpInfo; + _showOwner = showOwner; + _showHelpButton = showHelpButton ?? (helpInfo != null); + _krtbNativeWindow = new(); + + // Create the form contents + InitializeComponent(); + + // Hookup the native window on the KRTB, only after IntializeComponent(). + _krtbNativeWindow.AssignHandle(krtbMessageText.RichTextBox.Handle); + + // Default Cursor for the KRTB when the cursors hovers over it + krtbMessageText.RichTextBox.Cursor = Cursors.Arrow; + + // #1692 text font colour for input controls does not work correct on KMBees when using dark themes. + // Set the text colour to the one a control uses. + krtbMessageText.StateCommon.Content.Color1 = GlobalStaticValues.KryptonMessageBoxRichTextBoxTextColor; + + // Update contents to match requirements + UpdateText(); + UpdateIcon(); + UpdateButtons(); + UpdateDefault(); + UpdateHelp(); + UpdateTextExtra(showCtrlCopy); + // Finally calculate and set form sizing + UpdateSizing(showOwner); + + ShowCloseButton(showCloseButton); + } + #endregion + + #region Implementation + + private void UpdateText() + { + Text = string.IsNullOrEmpty(_caption) + ? string.Empty + : _caption!.Split(Environment.NewLine.ToCharArray())[0]; + krtbMessageText.Text = _text; + } + + private void UpdateTextExtra(bool? showCtrlCopy) + { + if (!showCtrlCopy.HasValue) + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.Error: + case KryptonMessageBoxIcon.Exclamation: + showCtrlCopy = true; + break; + } + } + + if (showCtrlCopy == true) + { + TextExtra = @"Ctrl+c to copy"; + } + } + + private void UpdateIcon() + { + if (OSUtilities.IsAtLeastWindowsEleven) + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.SystemHand: + //case KryptonMessageBoxIcon.SystemStop: + //case KryptonMessageBoxIcon.SystemError: + _messageIcon.Image = SystemIcons.Hand.ToBitmap(); + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.Question_Windows_11; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.SystemQuestion: + _messageIcon.Image = SystemIcons.Question.ToBitmap(); + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.SystemExclamation: + _messageIcon.Image = SystemIcons.Warning.ToBitmap(); + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = MessageBoxImageResources.Asterisk_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.SystemAsterisk: + _messageIcon.Image = SystemIcons.Asterisk.ToBitmap(); + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.Critical_Windows_11; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.Information_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Shield: + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + break; + case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on an image instead + _messageIcon.Image = MessageBoxImageResources.Windows11; + break; + case KryptonMessageBoxIcon.Application: + { + var applicationPath = Application.ExecutablePath; + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + _messageIcon.Image = scaledImage ?? + // Fall back to defaults + SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + else + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.SystemHand: + //case KryptonMessageBoxIcon.SystemStop: + //case KryptonMessageBoxIcon.SystemError: + _messageIcon.Image = SystemIcons.Hand.ToBitmap(); + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.GenericQuestion; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.SystemQuestion: + _messageIcon.Image = SystemIcons.Question.ToBitmap(); + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.SystemExclamation: + _messageIcon.Image = SystemIcons.Warning.ToBitmap(); + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = MessageBoxImageResources.GenericAsterisk; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.SystemAsterisk: + _messageIcon.Image = SystemIcons.Asterisk.ToBitmap(); + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.GenericCritical; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.GenericInformation; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Shield: + _messageIcon.Image = OSUtilities.IsWindowsTen + ? UACShieldIconResources.UAC_Shield_Windows_10 + : UACShieldIconResources.UAC_Shield_Windows_7; + break; + case KryptonMessageBoxIcon.WindowsLogo: + _messageIcon.Image = OSUtilities.IsWindowsTen + ? MessageBoxImageResources.Windows_8_and_10_Logo + : SystemIcons.WinLogo.ToBitmap(); + break; + case KryptonMessageBoxIcon.Application: + { + var applicationPath = Application.ExecutablePath; + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + _messageIcon.Image = scaledImage ?? + // Fall back to defaults + SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + _messageIcon.Visible = (_kryptonMessageBoxIcon != KryptonMessageBoxIcon.None); + } + + private void UpdateButtons() + { + switch (_buttons) + { + case KryptonMessageBoxButtons.OK: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button1.DialogResult = DialogResult.OK; + _button1.Visible = true; + _button1.Enabled = true; + break; + + case KryptonMessageBoxButtons.OKCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.OK; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + + case KryptonMessageBoxButtons.YesNo: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + ControlBox = false; + break; + + case KryptonMessageBoxButtons.YesNoCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button3.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + + case KryptonMessageBoxButtons.RetryCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Retry; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + + case KryptonMessageBoxButtons.AbortRetryIgnore: + _button1.Text = KryptonManager.Strings.GeneralStrings.Abort; + _button2.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore; + _button1.DialogResult = DialogResult.Abort; + _button2.DialogResult = DialogResult.Retry; + _button3.DialogResult = DialogResult.Ignore; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + ControlBox = false; + break; + + case KryptonMessageBoxButtons.CancelTryContinue: + _button1.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button2.Text = KryptonManager.Strings.GeneralStrings.TryAgain; + _button3.Text = KryptonManager.Strings.GeneralStrings.Continue; + _button1.DialogResult = DialogResult.Cancel; +#if NET6_0_OR_GREATER + _button2.DialogResult = DialogResult.TryAgain; + _button3.DialogResult = DialogResult.Continue; +#else + _button2.DialogResult = (DialogResult)10; + _button3.DialogResult = (DialogResult)11; +#endif + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + } + + // Do we ignore the Alt+F4 on the buttons? + if (!ControlBox) + { + _button1.IgnoreAltF4 = true; + _button2.IgnoreAltF4 = true; + _button3.IgnoreAltF4 = true; + _button4.IgnoreAltF4 = true; + } + } + + private void UpdateDefault() + { + AcceptButton = _defaultButton switch + { + KryptonMessageBoxDefaultButton.Button1 => + //_button1.Select(); + _button1, + KryptonMessageBoxDefaultButton.Button2 => + //_button2.Select(); + _button2, + KryptonMessageBoxDefaultButton.Button3 => + //_button3.Select(); + _button3, + KryptonMessageBoxDefaultButton.Button4 => _showHelpButton ? _button4 : _button1, + _ => _showHelpButton ? _button4 : _button1 + }; + } + + private void UpdateHelp() + { + if (!_showHelpButton) + { + return; + } + + MessageButton helpButton = _buttons switch + { + KryptonMessageBoxButtons.OK => _button2, + KryptonMessageBoxButtons.OKCancel + or KryptonMessageBoxButtons.YesNo + or KryptonMessageBoxButtons.RetryCancel => _button3, + KryptonMessageBoxButtons.AbortRetryIgnore + or KryptonMessageBoxButtons.YesNoCancel + or KryptonMessageBoxButtons.CancelTryContinue => _button4, + _ => throw new ArgumentOutOfRangeException() + }; + if (helpButton != null) + { + helpButton.Visible = true; + helpButton.Enabled = true; + helpButton.Text = KryptonManager.Strings.GeneralStrings.Help; + helpButton.KeyPress += (_, _) => LaunchHelp(); + helpButton.Click += (_, _) => LaunchHelp(); + } + } + + /// + /// When the user clicks the Help button, the Help file specified in the helpFilePath parameter + /// is opened and the Help keyword topic identified by the keyword parameter is Displayed. + /// The form that owns the message box (or the active form) also receives the HelpRequested event. + /// + private void LaunchHelp() + { + try + { + if (_showOwner != null) + { + Control? control = FromHandle(_showOwner.Handle); + + var mInfoMethod = control!.GetType().GetMethod(nameof(OnHelpRequested), BindingFlags.Instance | BindingFlags.NonPublic, + Type.DefaultBinder, [typeof(HelpEventArgs)], null); + mInfoMethod?.Invoke(control, [new HelpEventArgs(MousePosition)]); + if (_helpInfo != null) + { + if (string.IsNullOrWhiteSpace(_helpInfo.HelpFilePath)) + { + return; + } + + if (!string.IsNullOrWhiteSpace(_helpInfo.Keyword)) + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Keyword); + } + else + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Navigator, _helpInfo.Param); + } + } + } + } + catch + { + // Do nothing + } + } + + private void UpdateSizing(IWin32Window? showOwner) + { + Size messageSizing = UpdateMessageSizing(showOwner); + Size buttonsSizing = UpdateButtonsSizing(); + + // Size of window is calculated from the client area + ClientSize = new Size(Math.Max(messageSizing.Width, buttonsSizing.Width), + messageSizing.Height + buttonsSizing.Height); + } + + private Size UpdateMessageSizing(IWin32Window? showOwner) + { + // Update size of the message label but with a maximum width + Size textSize; + using (Graphics g = CreateGraphics()) + { + // Find size of the label, with a max of 2/3 screen width + Screen screen = showOwner is IWin32Window window + ? Screen.FromHandle(window.Handle) + : Screen.PrimaryScreen ?? throw new NullReferenceException("Screen.PrimaryScreen returned null"); + + Size scaledMonitorSize = screen.WorkingArea.Size; + scaledMonitorSize.Width = (int)(scaledMonitorSize.Width * 2 / 3.0f); + scaledMonitorSize.Height = (int)(scaledMonitorSize.Height * 0.95f); + + Font textFont = krtbMessageText.StateCommon.Content.GetContentShortTextFont(PaletteState.Normal) ?? KryptonManager.CurrentGlobalPalette!.BaseFont; + Font captionFont = KryptonManager.CurrentGlobalPalette.BaseFont; + + // Measure the string + SizeF messageSize = g.MeasureString(_text, textFont, new SizeF(scaledMonitorSize.Width, scaledMonitorSize.Height)); + + // SKC: Don't forget to add the TextExtra into the calculation + SizeF captionSize = TextRenderer.MeasureText($"{_caption} {TextExtra}", captionFont, scaledMonitorSize); + + var messageXSize = Math.Max(messageSize.Width, captionSize.Width); + // Work out DPI adjustment factor + var factorX = g.DpiX > 96 ? (1.0f * g.DpiX / 96) : 1.0f; + var factorY = g.DpiY > 96 ? (1.0f * g.DpiY / 96) : 1.0f; + + messageSize.Width = messageXSize * factorX; + messageSize.Height *= factorY; + + textSize = Size.Ceiling(messageSize); + } + + // Calculate the size of the icon area and text area including margins + Padding textPadding = krtbMessageText.StateCommon.Content.GetContentPadding(PaletteState.Normal); + Padding textAreaAllMargin = Padding.Add(textPadding, kpnlContentArea.Margin); + Size iconArea = new Size(_messageIcon.Width + _messageIcon.Margin.Left + _messageIcon.Margin.Right, + _messageIcon.Height + _messageIcon.Margin.Top + _messageIcon.Margin.Bottom); + Size textArea = new Size(textSize.Width + textAreaAllMargin.Left + textAreaAllMargin.Right, + textSize.Height + textAreaAllMargin.Top + textAreaAllMargin.Bottom); + return new Size(textArea.Width + iconArea.Width, + Math.Max(iconArea.Height, textArea.Height)); + } + + private Size UpdateButtonsSizing() + { + var numButtons = 1; + + // Button1 is always visible + Size button1Size = _button1.GetPreferredSize(Size.Empty); + var maxButtonSize = button1Size with { Width = button1Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING }; + + // If Button2 is visible + if (_button2.Enabled) + { + numButtons++; + Size button2Size = _button2.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button2Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button2Size.Height); + } + + // If Button3 is visible + if (_button3.Enabled) + { + numButtons++; + Size button3Size = _button3.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button3Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button3Size.Height); + } + // If Button4 is visible + if (_button4.Enabled) + { + numButtons++; + Size button4Size = _button4.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button4Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button4Size.Height); + } + + // Start positioning buttons 10 pixels from right edge + var right = _panelButtons.Right - GlobalStaticValues.GLOBAL_BUTTON_PADDING; + + //var left = _panelButtons.Left - GlobalStaticValues.GLOBAL_BUTTON_PADDING; + + // If Button4 is visible + if (_button4.Enabled) + { + _button4.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button4.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // If Button3 is visible + if (_button3.Enabled) + { + _button3.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button3.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // If Button2 is visible + if (_button2.Enabled) + { + _button2.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button2.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // Button1 is always visible + _button1.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button1.Size = maxButtonSize; + + // Size the panel for the buttons + _panelButtons.Size = new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + + // Button area is the number of buttons with gaps between them and 10 pixels around all edges + return new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + } + + private void ShowCloseButton(bool? showCloseButton) => CloseBox = showCloseButton ?? true; + + private void OnFormClosed(object sender, FormClosedEventArgs e) + { + _krtbNativeWindow.ReleaseHandle(); + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.Designer.cs new file mode 100644 index 000000000..b8d58920b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.Designer.cs @@ -0,0 +1,271 @@ +namespace Krypton.Toolkit +{ + partial class VisualMessageBoxRtlAwareFormDep + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this._panelButtons = new Krypton.Toolkit.KryptonPanel(); + this._borderEdge = new Krypton.Toolkit.KryptonBorderEdge(); + this._button4 = new Krypton.Toolkit.MessageButton(); + this._button3 = new Krypton.Toolkit.MessageButton(); + this._button1 = new Krypton.Toolkit.MessageButton(); + this._button2 = new Krypton.Toolkit.MessageButton(); + this._messageIcon = new System.Windows.Forms.PictureBox(); + this.kpnlContentArea = new Krypton.Toolkit.KryptonPanel(); + this.krtbMessageText = new Krypton.Toolkit.KryptonRichTextBox(); + this.klwlblMessageText = new Krypton.Toolkit.KryptonLinkWrapLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).BeginInit(); + this._panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).BeginInit(); + this.kpnlContentArea.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(219, 64); + this.kryptonPanel1.TabIndex = 2; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this._panelButtons, 0, 1); + this.tableLayoutPanel1.Controls.Add(this._messageIcon, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kpnlContentArea, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(219, 64); + this.tableLayoutPanel1.TabIndex = 0; + // + // _panelButtons + // + this.tableLayoutPanel1.SetColumnSpan(this._panelButtons, 2); + this._panelButtons.Controls.Add(this._borderEdge); + this._panelButtons.Controls.Add(this._button4); + this._panelButtons.Controls.Add(this._button3); + this._panelButtons.Controls.Add(this._button1); + this._panelButtons.Controls.Add(this._button2); + this._panelButtons.Dock = System.Windows.Forms.DockStyle.Fill; + this._panelButtons.Location = new System.Drawing.Point(0, 43); + this._panelButtons.Margin = new System.Windows.Forms.Padding(0); + this._panelButtons.Name = "_panelButtons"; + this._panelButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelButtons.Size = new System.Drawing.Size(219, 21); + this._panelButtons.TabIndex = 0; + // + // _borderEdge + // + this._borderEdge.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._borderEdge.Dock = System.Windows.Forms.DockStyle.Top; + this._borderEdge.Location = new System.Drawing.Point(0, 0); + this._borderEdge.Margin = new System.Windows.Forms.Padding(2); + this._borderEdge.Name = "_borderEdge"; + this._borderEdge.Size = new System.Drawing.Size(219, 1); + this._borderEdge.Text = "kryptonBorderEdge1"; + // + // _button4 + // + this._button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button4.AutoSize = true; + this._button4.Enabled = false; + this._button4.IgnoreAltF4 = false; + this._button4.Location = new System.Drawing.Point(219, 0); + this._button4.Margin = new System.Windows.Forms.Padding(0); + this._button4.MinimumSize = new System.Drawing.Size(38, 21); + this._button4.Name = "_button4"; + this._button4.Size = new System.Drawing.Size(38, 23); + this._button4.TabIndex = 2; + this._button4.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button4.Values.Text = "B4"; + this._button4.Visible = false; + // + // _button3 + // + this._button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button3.AutoSize = true; + this._button3.Enabled = false; + this._button3.IgnoreAltF4 = false; + this._button3.Location = new System.Drawing.Point(182, 0); + this._button3.Margin = new System.Windows.Forms.Padding(0); + this._button3.MinimumSize = new System.Drawing.Size(38, 21); + this._button3.Name = "_button3"; + this._button3.Size = new System.Drawing.Size(38, 23); + this._button3.TabIndex = 2; + this._button3.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button3.Values.Text = "B3"; + this._button3.Visible = false; + // + // _button1 + // + this._button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button1.AutoSize = true; + this._button1.Enabled = false; + this._button1.IgnoreAltF4 = false; + this._button1.Location = new System.Drawing.Point(106, 0); + this._button1.Margin = new System.Windows.Forms.Padding(0); + this._button1.MinimumSize = new System.Drawing.Size(38, 21); + this._button1.Name = "_button1"; + this._button1.Size = new System.Drawing.Size(38, 23); + this._button1.TabIndex = 0; + this._button1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button1.Values.Text = "B1"; + this._button1.Visible = false; + // + // _button2 + // + this._button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button2.AutoSize = true; + this._button2.Enabled = false; + this._button2.IgnoreAltF4 = false; + this._button2.Location = new System.Drawing.Point(144, 0); + this._button2.Margin = new System.Windows.Forms.Padding(0); + this._button2.MinimumSize = new System.Drawing.Size(38, 21); + this._button2.Name = "_button2"; + this._button2.Size = new System.Drawing.Size(38, 23); + this._button2.TabIndex = 1; + this._button2.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button2.Values.Text = "B2"; + this._button2.Visible = false; + // + // _messageIcon + // + this._messageIcon.BackColor = System.Drawing.Color.Transparent; + this._messageIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this._messageIcon.Location = new System.Drawing.Point(178, 4); + this._messageIcon.Margin = new System.Windows.Forms.Padding(8, 4, 4, 4); + this._messageIcon.Name = "_messageIcon"; + this._messageIcon.Size = new System.Drawing.Size(33, 35); + this._messageIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this._messageIcon.TabIndex = 0; + this._messageIcon.TabStop = false; + // + // kpnlContentArea + // + this.kpnlContentArea.Controls.Add(this.krtbMessageText); + this.kpnlContentArea.Controls.Add(this.klwlblMessageText); + this.kpnlContentArea.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlContentArea.Location = new System.Drawing.Point(4, 12); + this.kpnlContentArea.Margin = new System.Windows.Forms.Padding(4, 12, 4, 12); + this.kpnlContentArea.Name = "kpnlContentArea"; + this.kpnlContentArea.Size = new System.Drawing.Size(166, 19); + this.kpnlContentArea.TabIndex = 1; + // + // krtbMessageText + // + this.krtbMessageText.DetectUrls = false; + this.krtbMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.krtbMessageText.InputControlStyle = Krypton.Toolkit.InputControlStyle.PanelClient; + this.krtbMessageText.Location = new System.Drawing.Point(0, 0); + this.krtbMessageText.Margin = new System.Windows.Forms.Padding(0); + this.krtbMessageText.Name = "krtbMessageText"; + this.krtbMessageText.ReadOnly = true; + this.krtbMessageText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; + this.krtbMessageText.Size = new System.Drawing.Size(150, 19); + this.krtbMessageText.StateCommon.Border.DrawBorders = Krypton.Toolkit.PaletteDrawBorders.None; + this.krtbMessageText.TabIndex = 0; + this.krtbMessageText.TabStop = false; + this.krtbMessageText.Text = "Message Text\n.\ttabbed"; + this.krtbMessageText.WordWrap = false; + // + // klwlblMessageText + // + this.klwlblMessageText.AutoSize = false; + this.klwlblMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblMessageText.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblMessageText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblMessageText.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblMessageText.Location = new System.Drawing.Point(0, 0); + this.klwlblMessageText.Name = "klwlblMessageText"; + this.klwlblMessageText.Size = new System.Drawing.Size(166, 19); + this.klwlblMessageText.Text = "Message Text"; + this.klwlblMessageText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // VisualMessageBoxRtlAwareFormDep + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(219, 64); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.KeyPreview = true; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualMessageBoxRtlAwareFormDep"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).EndInit(); + this._panelButtons.ResumeLayout(false); + this._panelButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).EndInit(); + this.kpnlContentArea.ResumeLayout(false); + this.kpnlContentArea.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel1; + private KryptonPanel _panelButtons; + private KryptonBorderEdge _borderEdge; + private MessageButton _button4; + private MessageButton _button3; + private MessageButton _button1; + private MessageButton _button2; + private PictureBox _messageIcon; + private KryptonPanel kpnlContentArea; + private KryptonLinkWrapLabel klwlblMessageText; + private KryptonRichTextBox krtbMessageText; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.cs new file mode 100644 index 000000000..131a0dc67 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.cs @@ -0,0 +1,1258 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.Data; + +namespace Krypton.Toolkit +{ + internal partial class VisualMessageBoxRtlAwareFormDep : KryptonForm + { + #region Instance Fields + + private readonly bool _showHelpButton; + private readonly string? _text; + private readonly string? _caption; + private readonly string _applicationPath; + private readonly KryptonMessageBoxButtons _buttons; + private readonly KryptonMessageBoxIcon _kryptonMessageBoxIcon; + private readonly Image? _applicationImage; + private readonly bool? _forceUseOfOperatingSystemIcons; + private readonly KryptonMessageBoxDataDep _messageBoxData; + private readonly bool? _showCloseButton; + + private readonly KryptonMessageBoxDefaultButton _defaultButton; + //private readonly MessageBoxOptions _options; // https://github.com/Krypton-Suite/Standard-Toolkit/issues/313 + + // If help information provided, or we are not a service/default desktop application then grab an owner for showing the message box + private readonly IWin32Window? _showOwner; + private readonly HelpInfo? _helpInfo; + private readonly KryptonMessageBoxNativeWindow _krtbNativeWindow; + + // For the LinkLabel option + private readonly MessageBoxContentAreaType? _contentAreaType; + private readonly KryptonCommand? _linkLabelCommand; + private readonly ProcessStartInfo? _linkLaunchArgument; + private readonly LinkArea _contentLinkArea; + + private KryptonMessageBoxResult _messageBoxResult; + + #endregion + + #region Public + + public KryptonMessageBoxResult MessageBoxResult + { + get => _messageBoxResult; + set => _messageBoxResult = value; + } + + #endregion + + #region Identity + + public VisualMessageBoxRtlAwareFormDep() + { + InitializeComponent(); + } + + public VisualMessageBoxRtlAwareFormDep(IWin32Window? showOwner, string? text, string? caption, + KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton, + HelpInfo? helpInfo, bool? showCtrlCopy, + bool? showHelpButton, + Image? applicationImage, + string? applicationPath, + MessageBoxContentAreaType? contentAreaType, + KryptonCommand? linkLabelCommand, + ProcessStartInfo? linkLaunchArgument, + LinkArea? contentLinkArea, + bool? forceUseOfOperatingSystemIcons, + bool? showCloseButton) + { + // Store incoming values + _text = CommonHelper.NormalizeLineBreaks(text ?? string.Empty); + _caption = caption; + _buttons = buttons; + _kryptonMessageBoxIcon = icon; + _defaultButton = defaultButton; + _helpInfo = helpInfo; + _showOwner = showOwner; + _showHelpButton = showHelpButton ?? (helpInfo != null); + _applicationImage = applicationImage; + _applicationPath = applicationPath ?? string.Empty; + _contentAreaType = contentAreaType ?? MessageBoxContentAreaType.Normal; + _linkLabelCommand = linkLabelCommand ?? new KryptonCommand(); + _contentLinkArea = string.IsNullOrEmpty(text) + ? new LinkArea(0, 0) + : contentLinkArea ?? new LinkArea(0, text!.Length); + _linkLaunchArgument = linkLaunchArgument ?? new ProcessStartInfo(); + _forceUseOfOperatingSystemIcons = forceUseOfOperatingSystemIcons ?? false; + _showCloseButton = showCloseButton ?? true; + _krtbNativeWindow = new(); + + // Create the form contents + InitializeComponent(); + + // Hookup the native window on the KRTB, only after IntializeComponent(). + _krtbNativeWindow.AssignHandle(krtbMessageText.RichTextBox.Handle); + + // Default Cursor for the KRTB when the cursors hovers over it + krtbMessageText.RichTextBox.Cursor = Cursors.Arrow; + + // #1692 text font colour for input controls does not work correct on KMBees when using dark themes. + // Set the text colour to the one a control uses. + krtbMessageText.StateCommon.Content.Color1 = GlobalStaticValues.KryptonMessageBoxRichTextBoxTextColor; + + // Update contents to match requirements + UpdateText(); + UpdateIcon(); + UpdateButtons(); + UpdateDefault(); + UpdateHelp(); + UpdateTextExtra(showCtrlCopy); + UpdateContentAreaType(contentAreaType); + UpdateContentLinkArea(contentLinkArea); + + // Finally calculate and set form sizing + UpdateSizing(showOwner); + + ShowCloseButton(showCloseButton); + } + + public VisualMessageBoxRtlAwareFormDep(KryptonMessageBoxDataDep messageBoxData) + { + _messageBoxData = messageBoxData; + + InitializeComponent(); + + // Update contents to match requirements + UpdateText(_messageBoxData.Caption!, _messageBoxData.MessageText, _messageBoxData.MessageContentAreaType); + UpdateIcon(_messageBoxData.Icon); + UpdateButtons(_messageBoxData.Buttons); + UpdateDefault(_messageBoxData.DefaultButton); + UpdateHelp(_messageBoxData.ShowHelpButton); + UpdateTextExtra(_messageBoxData.ShowCtrlCopy); + UpdateContentAreaType(_messageBoxData.MessageContentAreaType); + UpdateContentLinkArea(_messageBoxData.ContentLinkArea); + + ShowCloseButton(_messageBoxData.ShowCloseButton); + + // Finally calculate and set form sizing + UpdateSizing(_messageBoxData.Owner); + } + + #endregion + + #region Implementation + + private void UpdateText(string? caption, string? text, MessageBoxContentAreaType? contentAreaType) + { + // Set the text of the form + Text = string.IsNullOrEmpty(caption) ? string.Empty : caption!.Split(Environment.NewLine.ToCharArray())[0]; + + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + krtbMessageText.Text = text; + break; + case MessageBoxContentAreaType.LinkLabel: + klwlblMessageText.Text = text; + break; + case null: + krtbMessageText.Text = text; + break; + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private void UpdateText() + { + Text = string.IsNullOrEmpty(_caption) ? string.Empty : _caption!.Split(Environment.NewLine.ToCharArray())[0]; + + if (_contentAreaType == MessageBoxContentAreaType.Normal) + { + krtbMessageText.Text = _text; + } + else + { + klwlblMessageText.Text = _text; + } + } + + private void UpdateTextExtra(bool? showCtrlCopy) + { + if (!showCtrlCopy.HasValue) + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.Error: + case KryptonMessageBoxIcon.Exclamation: + showCtrlCopy = true; + break; + } + } + + if (showCtrlCopy == true) + { + TextExtra = @"Ctrl+c to copy"; + } + } + + private void UpdateIcon(KryptonMessageBoxIcon icon) + { + if (OSUtilities.IsAtLeastWindowsEleven) + { + switch (icon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.Question_Windows_11; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = MessageBoxImageResources.Asterisk_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.Critical_Windows_11; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.Information_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Shield: + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + break; + case KryptonMessageBoxIcon.WindowsLogo: + _messageIcon.Image = MessageBoxImageResources.Windows11; + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + else + { + switch (icon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.SystemHand: + _messageIcon.Image = SystemIcons.Hand.ToBitmap(); + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.GenericQuestion; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.SystemQuestion: + _messageIcon.Image = SystemIcons.Question.ToBitmap(); + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.SystemExclamation: + _messageIcon.Image = SystemIcons.Warning.ToBitmap(); + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = OSUtilities.IsAtLeastWindowsEleven + ? MessageBoxImageResources.Asterisk_Windows_11 + : MessageBoxImageResources.GenericAsterisk; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.SystemAsterisk: + _messageIcon.Image = SystemIcons.Asterisk.ToBitmap(); + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.GenericCritical; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.GenericInformation; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + } + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_10; + } + else + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_7; + } + + break; + case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on an image instead + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = MessageBoxImageResources.Windows11; + } + // Windows 10 + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = MessageBoxImageResources.Windows_8_and_10_Logo; + } + else + { + _messageIcon.Image = SystemIcons.WinLogo.ToBitmap(); + } + + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath) + ?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + + _messageIcon.Visible = (_kryptonMessageBoxIcon != KryptonMessageBoxIcon.None); + } + + private void UpdateIcon() + { + if (OSUtilities.IsAtLeastWindowsEleven) + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.Question_Windows_11; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = MessageBoxImageResources.Asterisk_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.Critical_Windows_11; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.Information_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Shield: + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + break; + case KryptonMessageBoxIcon.WindowsLogo: + _messageIcon.Image = MessageBoxImageResources.Windows11; + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + else + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.SystemHand: + _messageIcon.Image = SystemIcons.Hand.ToBitmap(); + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.GenericQuestion; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.SystemQuestion: + _messageIcon.Image = SystemIcons.Question.ToBitmap(); + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.SystemExclamation: + _messageIcon.Image = SystemIcons.Warning.ToBitmap(); + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = OSUtilities.IsAtLeastWindowsEleven + ? MessageBoxImageResources.Asterisk_Windows_11 + : MessageBoxImageResources.GenericAsterisk; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.SystemAsterisk: + _messageIcon.Image = SystemIcons.Asterisk.ToBitmap(); + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.GenericCritical; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.GenericInformation; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + } + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_10; + } + else + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_7; + } + break; + case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on an image instead + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = MessageBoxImageResources.Windows11; + } + // Windows 10 + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = MessageBoxImageResources.Windows_8_and_10_Logo; + } + else + { + _messageIcon.Image = SystemIcons.WinLogo.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + + _messageIcon.Visible = (_kryptonMessageBoxIcon != KryptonMessageBoxIcon.None); + + } + + private void UpdateButtons() + { + switch (_buttons) + { + case KryptonMessageBoxButtons.OK: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button1.DialogResult = DialogResult.OK; + _button1.Visible = true; + _button1.Enabled = true; + break; + case KryptonMessageBoxButtons.OKCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.OK; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.YesNo: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.YesNoCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button3.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + case KryptonMessageBoxButtons.RetryCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Retry; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.AbortRetryIgnore: + _button1.Text = KryptonManager.Strings.GeneralStrings.Abort; + _button2.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore; + _button1.DialogResult = DialogResult.Abort; + _button2.DialogResult = DialogResult.Retry; + _button3.DialogResult = DialogResult.Ignore; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.CancelTryContinue: + _button1.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button2.Text = KryptonManager.Strings.GeneralStrings.TryAgain; + _button3.Text = KryptonManager.Strings.GeneralStrings.Continue; + _button1.DialogResult = DialogResult.Cancel; +#if NET6_0_OR_GREATER + _button2.DialogResult = DialogResult.TryAgain; + _button3.DialogResult = DialogResult.Continue; +#else + _button2.DialogResult = (DialogResult)10; + _button3.DialogResult = (DialogResult)11; +#endif + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + } + + // Do we ignore the Alt+F4 on the buttons? + if (!ControlBox) + { + _button1.IgnoreAltF4 = true; + _button2.IgnoreAltF4 = true; + _button3.IgnoreAltF4 = true; + _button4.IgnoreAltF4 = true; + } + } + + private void UpdateButtons(KryptonMessageBoxButtons buttons) + { + switch (buttons) + { + case KryptonMessageBoxButtons.OK: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button1.DialogResult = DialogResult.OK; + _button1.Visible = true; + _button1.Enabled = true; + break; + case KryptonMessageBoxButtons.OKCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.OK; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.YesNo: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.YesNoCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button3.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + case KryptonMessageBoxButtons.RetryCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Retry; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.AbortRetryIgnore: + _button1.Text = KryptonManager.Strings.GeneralStrings.Abort; + _button2.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore; + _button1.DialogResult = DialogResult.Abort; + _button2.DialogResult = DialogResult.Retry; + _button3.DialogResult = DialogResult.Ignore; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.CancelTryContinue: + _button1.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button2.Text = KryptonManager.Strings.GeneralStrings.TryAgain; + _button3.Text = KryptonManager.Strings.GeneralStrings.Continue; + _button1.DialogResult = DialogResult.Cancel; +#if NET6_0_OR_GREATER + _button2.DialogResult = DialogResult.TryAgain; + _button3.DialogResult = DialogResult.Continue; +#else + _button2.DialogResult = (DialogResult)10; + _button3.DialogResult = (DialogResult)11; +#endif + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + } + + // Do we ignore the Alt+F4 on the buttons? + if (!ControlBox) + { + _button1.IgnoreAltF4 = true; + _button2.IgnoreAltF4 = true; + _button3.IgnoreAltF4 = true; + _button4.IgnoreAltF4 = true; + } + } + + private void UpdateDefault(KryptonMessageBoxDefaultButton? defaultButton) + { + AcceptButton = defaultButton switch + { + KryptonMessageBoxDefaultButton.Button1 => + //_button1.Select(); + _button1, + KryptonMessageBoxDefaultButton.Button2 => + //_button2.Select(); + _button2, + KryptonMessageBoxDefaultButton.Button3 => + //_button3.Select(); + _button3, + KryptonMessageBoxDefaultButton.Button4 => _showHelpButton ? _button4 : _button1, + null => _button1, + _ => _showHelpButton ? _button4 : _button1 + }; + } + + private void UpdateDefault() + { + AcceptButton = _defaultButton switch + { + KryptonMessageBoxDefaultButton.Button1 => + //_button1.Select(); + _button1, + KryptonMessageBoxDefaultButton.Button2 => + //_button2.Select(); + _button2, + KryptonMessageBoxDefaultButton.Button3 => + //_button3.Select(); + _button3, + KryptonMessageBoxDefaultButton.Button4 => _showHelpButton ? _button4 : _button1, + _ => _showHelpButton ? _button4 : _button1 + }; + } + + private void UpdateHelp(bool? showHelpButton) + { + if (showHelpButton != null) + { + return; + } + + MessageButton helpButton = _buttons switch + { + KryptonMessageBoxButtons.OK => _button2, + KryptonMessageBoxButtons.OKCancel + or KryptonMessageBoxButtons.YesNo + or KryptonMessageBoxButtons.RetryCancel => _button3, + KryptonMessageBoxButtons.AbortRetryIgnore + or KryptonMessageBoxButtons.YesNoCancel + or KryptonMessageBoxButtons.CancelTryContinue => _button4, + _ => throw new EvaluateException("_buttons out of range") + }; + if (helpButton != null) + { + helpButton.Visible = true; + helpButton.Enabled = true; + helpButton.Text = KryptonManager.Strings.GeneralStrings.Help; + + helpButton.KeyPress += (_, _) => LaunchHelp(_messageBoxData.Owner); + + helpButton.Click += (_, _) => LaunchHelp(_messageBoxData.Owner); + } + } + + private void UpdateHelp() + { + if (!_showHelpButton) + { + return; + } + + MessageButton helpButton = _buttons switch + { + KryptonMessageBoxButtons.OK => _button2, + KryptonMessageBoxButtons.OKCancel or KryptonMessageBoxButtons.YesNo or KryptonMessageBoxButtons.RetryCancel => _button3, + KryptonMessageBoxButtons.AbortRetryIgnore or KryptonMessageBoxButtons.YesNoCancel => _button4, + _ => throw new ArgumentOutOfRangeException() + }; + if (helpButton != null) + { + helpButton.Visible = true; + helpButton.Enabled = true; + helpButton.Text = KryptonManager.Strings.GeneralStrings.Help; + helpButton.KeyPress += (_, _) => LaunchHelp(); + helpButton.Click += (_, _) => LaunchHelp(); + } + } + + /// + /// When the user clicks the Help button, the Help file specified in the helpFilePath parameter + /// is opened and the Help keyword topic identified by the keyword parameter is Displayed. + /// The form that owns the message box (or the active form) also receives the HelpRequested event. + /// + private void LaunchHelp(IWin32Window? owner) + { + try + { + if (owner != null) + { + Control? control = FromHandle(owner.Handle); + + var mInfoMethod = control!.GetType().GetMethod(nameof(OnHelpRequested), BindingFlags.Instance | BindingFlags.NonPublic, + Type.DefaultBinder, [typeof(HelpEventArgs)], null); + mInfoMethod?.Invoke(control, [new HelpEventArgs(MousePosition)]); + if (_helpInfo != null) + { + if (string.IsNullOrWhiteSpace(_helpInfo.HelpFilePath)) + { + return; + } + + if (!string.IsNullOrWhiteSpace(_helpInfo.Keyword)) + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Keyword); + } + else + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Navigator, _helpInfo.Param); + } + } + } + } + catch + { + // Do nothing + } + } + + /// + /// When the user clicks the Help button, the Help file specified in the helpFilePath parameter + /// is opened and the Help keyword topic identified by the keyword parameter is Displayed. + /// The form that owns the message box (or the active form) also receives the HelpRequested event. + /// + private void LaunchHelp() + { + try + { + if (_showOwner != null) + { + Control? control = FromHandle(_showOwner.Handle); + + var mInfoMethod = control!.GetType().GetMethod(nameof(OnHelpRequested), BindingFlags.Instance | BindingFlags.NonPublic, + Type.DefaultBinder, [typeof(HelpEventArgs)], null); + mInfoMethod?.Invoke(control, [new HelpEventArgs(MousePosition)]); + if (_helpInfo != null) + { + if (string.IsNullOrWhiteSpace(_helpInfo.HelpFilePath)) + { + return; + } + + if (!string.IsNullOrWhiteSpace(_helpInfo.Keyword)) + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Keyword); + } + else + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Navigator, _helpInfo.Param); + } + } + } + } + catch + { + // Do nothing + } + } + + private void UpdateSizing(IWin32Window? showOwner) + { + Size messageSizing = UpdateMessageSizing(showOwner); + Size buttonsSizing = UpdateButtonsSizing(); + + // Size of window is calculated from the client area + ClientSize = new Size(Math.Max(messageSizing.Width, buttonsSizing.Width), + messageSizing.Height + buttonsSizing.Height); + } + + private Size UpdateMessageSizing(IWin32Window? showOwner) + { + // Update size of the message label but with a maximum width + Size textSize; + using (Graphics g = CreateGraphics()) + { + // Find size of the label, with a max of 2/3 screen width + Screen screen = showOwner is IWin32Window window + ? Screen.FromHandle(window.Handle) + : Screen.PrimaryScreen ?? throw new NullReferenceException("Screen.PrimaryScreen returned null"); + + Size scaledMonitorSize = screen.WorkingArea.Size; + scaledMonitorSize.Width = (int)(scaledMonitorSize.Width * 2 / 3.0f); + scaledMonitorSize.Height = (int)(scaledMonitorSize.Height * 0.95f); + + Font textFont = GetMessageTextFont(_contentAreaType); + Font captionFont = KryptonManager.CurrentGlobalPalette.BaseFont; + + // Measure the string + SizeF messageSize = g.MeasureString(_text, textFont, new SizeF(scaledMonitorSize.Width, scaledMonitorSize.Height)); + + // SKC: Don't forget to add the TextExtra into the calculation + SizeF captionSize = TextRenderer.MeasureText($"{_caption} {TextExtra}", captionFont, scaledMonitorSize); + + var messageXSize = Math.Max(messageSize.Width, captionSize.Width); + // Work out DPI adjustment factor + var factorX = g.DpiX > 96 ? (1.0f * g.DpiX / 96) : 1.0f; + var factorY = g.DpiY > 96 ? (1.0f * g.DpiY / 96) : 1.0f; + + messageSize.Width = messageXSize * factorX; + messageSize.Height *= factorY; + + textSize = Size.Ceiling(messageSize); + } + + // Calculate the size of the icon area and text area including margins + Padding textPadding = GetMessageTextPadding(_contentAreaType); + Padding textAreaAllMargin = Padding.Add(textPadding, kpnlContentArea.Margin); + + Size iconArea = new Size(_messageIcon.Width + _messageIcon.Margin.Left + _messageIcon.Margin.Right, + _messageIcon.Height + _messageIcon.Margin.Top + _messageIcon.Margin.Bottom); + + Size textArea = new Size(textSize.Width + textAreaAllMargin.Left + textAreaAllMargin.Right, + textSize.Height + textAreaAllMargin.Top + textAreaAllMargin.Bottom); + + return new Size(textArea.Width + iconArea.Width, + Math.Max(iconArea.Height, textArea.Height)); + } + + private Font GetMessageTextFont(MessageBoxContentAreaType? contentAreaType) + { + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + return krtbMessageText.StateCommon.Content.GetContentShortTextFont(PaletteState.Normal) + ?? KryptonManager.CurrentGlobalPalette.BaseFont; + case MessageBoxContentAreaType.LinkLabel: + klwlblMessageText.UpdateFont(); + return klwlblMessageText.Font + ?? KryptonManager.CurrentGlobalPalette.BaseFont; + case null: + return KryptonManager.CurrentGlobalPalette.BaseFont; + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private Padding GetMessageTextPadding(MessageBoxContentAreaType? contentAreaType) + { + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + return krtbMessageText.StateCommon.Content.GetContentPadding(PaletteState.Normal); + case MessageBoxContentAreaType.LinkLabel: + return klwlblMessageText.Padding; + case null: + return new Padding(0); + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private Size UpdateButtonsSizing() + { + var numButtons = 1; + + // Button1 is always visible + Size button1Size = _button1.GetPreferredSize(Size.Empty); + var maxButtonSize = button1Size with { Width = button1Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING }; + + // If Button2 is visible + if (_button2.Enabled) + { + numButtons++; + Size button2Size = _button2.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button2Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button2Size.Height); + } + + // If Button3 is visible + if (_button3.Enabled) + { + numButtons++; + Size button3Size = _button3.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button3Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button3Size.Height); + } + // If Button4 is visible + if (_button4.Enabled) + { + numButtons++; + Size button4Size = _button4.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button4Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button4Size.Height); + } + + // Start positioning buttons 10 pixels from right edge + var right = _panelButtons.Right - GlobalStaticValues.GLOBAL_BUTTON_PADDING; + + //var left = _panelButtons.Left - GlobalStaticValues.GLOBAL_BUTTON_PADDING; + + // If Button4 is visible + if (_button4.Enabled) + { + _button4.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button4.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // If Button3 is visible + if (_button3.Enabled) + { + _button3.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button3.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // If Button2 is visible + if (_button2.Enabled) + { + _button2.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button2.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // Button1 is always visible + _button1.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button1.Size = maxButtonSize; + + // Size the panel for the buttons + _panelButtons.Size = new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + + // Button area is the number of buttons with gaps between them and 10 pixels around all edges + return new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + } + + private void AnyKeyDown(object sender, KeyEventArgs e) + { + // Escape key kills the dialog if we allow it to be closed + if (ControlBox + && (e.KeyCode == Keys.Escape) + ) + { + Close(); + } + else if (e.KeyData == (Keys.Control | Keys.C)) + { + const string DIVIDER = @"---------------------------"; + const string BUTTON_TEXT_SPACER = @" "; + // Pressing Ctrl+C should copy message text into the clipboard + var sb = new StringBuilder(); + + sb.AppendLine(DIVIDER); + sb.AppendLine(Text); + sb.AppendLine(DIVIDER); + sb.AppendLine(klwlblMessageText.Text); + sb.AppendLine(DIVIDER); + sb.Append(_button1.Text).Append(BUTTON_TEXT_SPACER); + if (_button2.Enabled) + { + sb.Append(_button2.Text).Append(BUTTON_TEXT_SPACER); + if (_button3.Enabled) + { + sb.Append(_button3.Text).Append(BUTTON_TEXT_SPACER); + } + + if (_button4.Enabled) + { + sb.Append(_button4.Text).Append(BUTTON_TEXT_SPACER); + } + } + + sb.AppendLine(string.Empty); + sb.AppendLine(DIVIDER); + + Clipboard.SetText(sb.ToString(), TextDataFormat.Text); + Clipboard.SetText(sb.ToString(), TextDataFormat.UnicodeText); + } + } + + private void LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + if (_linkLabelCommand != null) + { + _linkLabelCommand.PerformExecute(); + } + else if (_linkLaunchArgument != null) + { + Process.Start(_linkLaunchArgument); + } + } + catch (Exception exception) + { + ExceptionHandler.CaptureException(exception, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + } + + /// Updates the type of the content area. + /// Type of the content area. + private void UpdateContentAreaType(MessageBoxContentAreaType? contentAreaType) + { + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + klwlblMessageText.Visible = false; + + krtbMessageText.Visible = true; + break; + case MessageBoxContentAreaType.LinkLabel: + klwlblMessageText.Visible = true; + + krtbMessageText.Visible = false; + break; + case null: + klwlblMessageText.Visible = false; + + krtbMessageText.Visible = true; + break; + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private void UpdateContentLinkArea(LinkArea? contentLinkArea) + { + if (contentLinkArea != null) + { + klwlblMessageText.LinkArea = (LinkArea)contentLinkArea; + } + } + + private void ShowCloseButton(bool? showCloseButton) => CloseBox = showCloseButton ?? true; + + private void OnFormClosed(object sender, FormClosedEventArgs e) + { + _krtbNativeWindow.ReleaseHandle(); + } + + #region KryptonMessageBoxResult Methods + + public KryptonMessageBoxResult ShowMessageBox() => ShowMessageBox(null); + + // ToDo: Expand this method + public KryptonMessageBoxResult ShowMessageBox(IWin32Window? owner) + { + return KryptonMessageBoxResult.Ignore; + } + + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualMessageBoxRtlAwareFormDep.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.Designer.cs new file mode 100644 index 000000000..4755179e4 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.Designer.cs @@ -0,0 +1,393 @@ +namespace Krypton.Toolkit +{ + partial class VisualThemeBrowserFormRtlAware + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnImport = new Krypton.Toolkit.KryptonButton(); + this.kchkSilent = new Krypton.Toolkit.KryptonCheckBox(); + this.kbtnCancel = new Krypton.Toolkit.KryptonButton(); + this.kbtnOk = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.klblHeader = new Krypton.Toolkit.KryptonLabel(); + this.klbThemeList = new Krypton.Toolkit.KryptonListBox(); + this.kcpbCustom = new Krypton.Toolkit.KryptonCustomPaletteBase(this.components); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel1); + this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 481); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(836, 50); + this.kryptonPanel1.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.kbtnImport, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kchkSilent, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnCancel, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnOk, 2, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(836, 49); + this.tableLayoutPanel1.TabIndex = 1; + // + // kbtnImport + // + this.kbtnImport.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kbtnImport.Location = new System.Drawing.Point(736, 12); + this.kbtnImport.Margin = new System.Windows.Forms.Padding(10); + this.kbtnImport.Name = "kbtnImport"; + this.kbtnImport.Size = new System.Drawing.Size(90, 25); + this.kbtnImport.TabIndex = 0; + this.kbtnImport.Values.Text = "kryptonButton1"; + this.kbtnImport.Click += new System.EventHandler(this.kbtnImport_Click); + // + // kchkSilent + // + this.kchkSilent.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kchkSilent.Location = new System.Drawing.Point(591, 14); + this.kchkSilent.Margin = new System.Windows.Forms.Padding(10); + this.kchkSilent.Name = "kchkSilent"; + this.kchkSilent.Size = new System.Drawing.Size(125, 20); + this.kchkSilent.TabIndex = 1; + this.kchkSilent.Values.Text = "kryptonCheckBox1"; + // + // kbtnCancel + // + this.kbtnCancel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnCancel.Location = new System.Drawing.Point(10, 12); + this.kbtnCancel.Margin = new System.Windows.Forms.Padding(10); + this.kbtnCancel.Name = "kbtnCancel"; + this.kbtnCancel.Size = new System.Drawing.Size(90, 25); + this.kbtnCancel.TabIndex = 2; + this.kbtnCancel.Values.Text = "kryptonButton1"; + this.kbtnCancel.Click += new System.EventHandler(this.kbtnCancel_Click); + // + // kbtnOk + // + this.kbtnOk.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnOk.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnOk.Location = new System.Drawing.Point(120, 12); + this.kbtnOk.Margin = new System.Windows.Forms.Padding(10); + this.kbtnOk.Name = "kbtnOk"; + this.kbtnOk.Size = new System.Drawing.Size(90, 25); + this.kbtnOk.TabIndex = 3; + this.kbtnOk.Values.Text = "kryptonButton2"; + this.kbtnOk.Click += new System.EventHandler(this.kbtnOk_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderSecondary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(836, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.tableLayoutPanel2); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(836, 481); + this.kryptonPanel2.TabIndex = 1; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.klblHeader, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.klbThemeList, 0, 1); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(836, 481); + this.tableLayoutPanel2.TabIndex = 0; + // + // klblHeader + // + this.klblHeader.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblHeader.Location = new System.Drawing.Point(731, 10); + this.klblHeader.Margin = new System.Windows.Forms.Padding(10); + this.klblHeader.Name = "klblHeader"; + this.klblHeader.Size = new System.Drawing.Size(95, 20); + this.klblHeader.TabIndex = 0; + this.klblHeader.Values.Text = "kryptonLabel1"; + // + // klbThemeList + // + this.klbThemeList.Dock = System.Windows.Forms.DockStyle.Fill; + this.klbThemeList.Location = new System.Drawing.Point(10, 50); + this.klbThemeList.Margin = new System.Windows.Forms.Padding(10); + this.klbThemeList.Name = "klbThemeList"; + this.klbThemeList.Size = new System.Drawing.Size(816, 421); + this.klbThemeList.TabIndex = 1; + this.klbThemeList.SelectedIndexChanged += new System.EventHandler(this.klbThemeList_SelectedIndexChanged); + // + // kcpbCustom + // + this.kcpbCustom.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(245)))), ((int)(((byte)(248))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(206)))), ((int)(((byte)(213)))), ((int)(((byte)(225))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(227)))), ((int)(((byte)(196))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(136)))), ((int)(((byte)(9))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(251)))), ((int)(((byte)(230))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(201)))), ((int)(((byte)(41))))); + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor1 = System.Drawing.Color.White; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(195)))), ((int)(((byte)(212)))), ((int)(((byte)(235))))); + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(237)))), ((int)(((byte)(245)))), ((int)(((byte)(253))))); + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(177)))), ((int)(((byte)(192)))), ((int)(((byte)(214))))); + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(213)))), ((int)(((byte)(232)))), ((int)(((byte)(254))))); + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(154)))), ((int)(((byte)(179)))), ((int)(((byte)(213))))); + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(176)))), ((int)(((byte)(206))))); + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(236)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.ThemeName = null; + // + // VisualThemeBrowserFormRtlAware + // + this.AcceptButton = this.kbtnOk; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kbtnCancel; + this.ClientSize = new System.Drawing.Size(836, 531); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualThemeBrowserFormRtlAware"; + this.RightToLeft = System.Windows.Forms.RightToLeft.Yes; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "Select a Theme"; + this.Load += new System.EventHandler(this.VisualThemeBrowserFormRtlAware_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel1; + private KryptonButton kbtnImport; + private KryptonCheckBox kchkSilent; + private KryptonButton kbtnCancel; + private KryptonButton kbtnOk; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kryptonPanel2; + private TableLayoutPanel tableLayoutPanel2; + private KryptonLabel klblHeader; + private KryptonListBox klbThemeList; + private KryptonCustomPaletteBase kcpbCustom; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.cs new file mode 100644 index 000000000..5e1a8efb7 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.cs @@ -0,0 +1,89 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualThemeBrowserFormRtlAware : KryptonForm + { + #region Instance Fields + + private readonly KryptonThemeBrowserData _themeBrowserData; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// The data to create the UI. + public VisualThemeBrowserFormRtlAware(KryptonThemeBrowserData themeBrowserData) + { + InitializeComponent(); + + _themeBrowserData = themeBrowserData; + + AdjustUI(); + } + + #endregion + + #region Implementation + + private void AdjustUI() + { + Text = _themeBrowserData.WindowTitle ?? KryptonManager.Strings.MiscellaneousThemeStrings.ThemeBrowserWindowTitle; + + kbtnImport.Visible = _themeBrowserData.ShowImportButton ?? false; + + kchkSilent.Visible = _themeBrowserData.ShowSilentOption ?? false; + + StartPosition = _themeBrowserData.StartPosition ?? FormStartPosition.CenterScreen; + + klbThemeList.SelectedIndex = _themeBrowserData.StartIndex ?? GlobalStaticValues.GLOBAL_DEFAULT_THEME_INDEX; + + klblHeader.Text = KryptonManager.Strings.MiscellaneousThemeStrings.ThemeBrowserDescription; + + kbtnImport.Text = KryptonManager.Strings.MiscellaneousThemeStrings.Import; + + kchkSilent.Text = KryptonManager.Strings.MiscellaneousThemeStrings.Silent; + + kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; + + kbtnOk.Text = KryptonManager.Strings.GeneralStrings.OK; + } + + private void kbtnImport_Click(object sender, EventArgs e) => kcpbCustom.Import(kchkSilent.Checked); + + private void VisualThemeBrowserFormRtlAware_Load(object sender, EventArgs e) + { + foreach (var themeName in ThemeManager.SupportedInternalThemeNames) + { + if (themeName != null) + { + klbThemeList.Items.Add(themeName); + } + } + + klbThemeList.SelectedItem = _themeBrowserData.StartIndex; + } + + private void klbThemeList_SelectedIndexChanged(object sender, EventArgs e) + { + ThemeManager.ApplyTheme(klbThemeList.GetItemText(klbThemeList.SelectedItem)!, new KryptonManager()); + + SetIndexText($@"{klbThemeList.GetItemText(klbThemeList.SelectedItem)} - Index: {klbThemeList.SelectedIndex}"); + } + + private void SetIndexText(string value) => klblHeader.Text = value; + + private void kbtnCancel_Click(object sender, EventArgs e) => DialogResult = DialogResult.Cancel; + + private void kbtnOk_Click(object sender, EventArgs e) => DialogResult = DialogResult.OK; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.resx similarity index 100% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonThemeBrowserForm.resx rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/RTL Aware/VisualThemeBrowserFormRtlAware.resx diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.Designer.cs new file mode 100644 index 000000000..c51f78e39 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.Designer.cs @@ -0,0 +1,1221 @@ +namespace Krypton.Toolkit +{ + partial class VisualAboutBoxForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.kpnlButtons = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnOk = new Krypton.Toolkit.KryptonButton(); + this.kbtnSystemInformation = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlMain = new Krypton.Toolkit.KryptonPanel(); + this.khgMain = new Krypton.Toolkit.KryptonHeaderGroup(); + this.tscMain = new System.Windows.Forms.ToolStripContainer(); + this.kpnlGeneralInformation = new Krypton.Toolkit.KryptonPanel(); + this.tlpnlGeneralInformation = new System.Windows.Forms.TableLayoutPanel(); + this.pbxImage = new System.Windows.Forms.PictureBox(); + this.kwlVersionLabel = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlBuiltOn = new Krypton.Toolkit.KryptonWrapLabel(); + this.kwlCopyright = new Krypton.Toolkit.KryptonWrapLabel(); + this.kryptonWrapLabel5 = new Krypton.Toolkit.KryptonWrapLabel(); + this.kpnlDescription = new Krypton.Toolkit.KryptonPanel(); + this.krtbDescription = new Krypton.Toolkit.KryptonRichTextBox(); + this.kpnlFileInformation = new Krypton.Toolkit.KryptonPanel(); + this.tscFileInformation = new System.Windows.Forms.ToolStripContainer(); + this.kpnlApplication = new Krypton.Toolkit.KryptonPanel(); + this.kdgvApplication = new Krypton.Toolkit.KryptonDataGridView(); + this.clmnApplicationKey = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clmnValue = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.kpnlAssemblies = new Krypton.Toolkit.KryptonPanel(); + this.kdgvAssemblies = new Krypton.Toolkit.KryptonDataGridView(); + this.clmnAssembly = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clmnVersion = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clmnBuiltOn = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clmnCodeBase = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.kpnlAssemblyDetails = new Krypton.Toolkit.KryptonPanel(); + this.kiadAssemblyDetails = new Krypton.Toolkit.InternalAssemblyDetails(); + this.tsFileInformation = new System.Windows.Forms.ToolStrip(); + this.tsbtnApplicationDetails = new System.Windows.Forms.ToolStripButton(); + this.tssAssembliesDetails = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnAssembliesDetails = new System.Windows.Forms.ToolStripButton(); + this.tssAssemblyDetails = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnAssemblyDetails = new System.Windows.Forms.ToolStripButton(); + this.kpnlTheme = new Krypton.Toolkit.KryptonPanel(); + this.tlpTheme = new System.Windows.Forms.TableLayoutPanel(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kwlCurrentTheme = new Krypton.Toolkit.KryptonWrapLabel(); + this.kpnlToolkitInformation = new Krypton.Toolkit.KryptonPanel(); + this.tscToolkitInformation = new System.Windows.Forms.ToolStripContainer(); + this.kpnlToolkitGeneralInformation = new Krypton.Toolkit.KryptonPanel(); + this.tlpGeneralInformation = new System.Windows.Forms.TableLayoutPanel(); + this.pbxLogo = new System.Windows.Forms.PictureBox(); + this.klwlblGeneralInformation = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.klblCurrentTheme = new Krypton.Toolkit.KryptonLabel(); + this.ktcmbCurrentTheme = new Krypton.Toolkit.KryptonThemeComboBox(); + this.klblBuiltOn = new Krypton.Toolkit.KryptonLabel(); + this.kpnlDiscord = new Krypton.Toolkit.KryptonPanel(); + this.klwlblDiscord = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.kpnlDeveloperInformation = new Krypton.Toolkit.KryptonPanel(); + this.tlpDeveloperInformation = new System.Windows.Forms.TableLayoutPanel(); + this.klwlblRepositories = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.klwlblDocumentation = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.klwlblDemos = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.kpnlVersions = new Krypton.Toolkit.KryptonPanel(); + this.kdgvVersions = new Krypton.Toolkit.KryptonDataGridView(); + this.clmnFileName = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clmnFileVersion = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.tsToolkitInformation = new System.Windows.Forms.ToolStrip(); + this.tsbtnToolkitGeneralInformation = new System.Windows.Forms.ToolStripButton(); + this.tssDiscord = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnDiscord = new System.Windows.Forms.ToolStripButton(); + this.tssDeveloperInformation = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnDeveloperInformation = new System.Windows.Forms.ToolStripButton(); + this.tssVersions = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnVersions = new System.Windows.Forms.ToolStripButton(); + this.tsMain = new System.Windows.Forms.ToolStrip(); + this.tsbtnGeneralInformation = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnDescription = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnFileInformation = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnTheme = new System.Windows.Forms.ToolStripButton(); + this.tssToolkitInformation = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnToolkitInformation = new System.Windows.Forms.ToolStripButton(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).BeginInit(); + this.kpnlButtons.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).BeginInit(); + this.kpnlMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.khgMain)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.khgMain.Panel)).BeginInit(); + this.khgMain.Panel.SuspendLayout(); + this.khgMain.SuspendLayout(); + this.tscMain.ContentPanel.SuspendLayout(); + this.tscMain.TopToolStripPanel.SuspendLayout(); + this.tscMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlGeneralInformation)).BeginInit(); + this.kpnlGeneralInformation.SuspendLayout(); + this.tlpnlGeneralInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDescription)).BeginInit(); + this.kpnlDescription.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFileInformation)).BeginInit(); + this.kpnlFileInformation.SuspendLayout(); + this.tscFileInformation.ContentPanel.SuspendLayout(); + this.tscFileInformation.TopToolStripPanel.SuspendLayout(); + this.tscFileInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlApplication)).BeginInit(); + this.kpnlApplication.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvApplication)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblies)).BeginInit(); + this.kpnlAssemblies.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvAssemblies)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblyDetails)).BeginInit(); + this.kpnlAssemblyDetails.SuspendLayout(); + this.tsFileInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlTheme)).BeginInit(); + this.kpnlTheme.SuspendLayout(); + this.tlpTheme.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitInformation)).BeginInit(); + this.kpnlToolkitInformation.SuspendLayout(); + this.tscToolkitInformation.ContentPanel.SuspendLayout(); + this.tscToolkitInformation.TopToolStripPanel.SuspendLayout(); + this.tscToolkitInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitGeneralInformation)).BeginInit(); + this.kpnlToolkitGeneralInformation.SuspendLayout(); + this.tlpGeneralInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxLogo)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ktcmbCurrentTheme)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDiscord)).BeginInit(); + this.kpnlDiscord.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDeveloperInformation)).BeginInit(); + this.kpnlDeveloperInformation.SuspendLayout(); + this.tlpDeveloperInformation.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlVersions)).BeginInit(); + this.kpnlVersions.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvVersions)).BeginInit(); + this.tsToolkitInformation.SuspendLayout(); + this.tsMain.SuspendLayout(); + this.SuspendLayout(); + // + // kpnlButtons + // + this.kpnlButtons.Controls.Add(this.tableLayoutPanel1); + this.kpnlButtons.Controls.Add(this.kryptonBorderEdge1); + this.kpnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpnlButtons.Location = new System.Drawing.Point(0, 404); + this.kpnlButtons.Name = "kpnlButtons"; + this.kpnlButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kpnlButtons.Size = new System.Drawing.Size(804, 50); + this.kpnlButtons.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.kbtnOk, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnSystemInformation, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 49F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(804, 49); + this.tableLayoutPanel1.TabIndex = 3; + // + // kbtnOk + // + this.kbtnOk.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnOk.Location = new System.Drawing.Point(704, 12); + this.kbtnOk.Margin = new System.Windows.Forms.Padding(10); + this.kbtnOk.Name = "kbtnOk"; + this.kbtnOk.Size = new System.Drawing.Size(90, 25); + this.kbtnOk.TabIndex = 0; + this.kbtnOk.Values.Text = "kryptonButton1"; + this.kbtnOk.Click += new System.EventHandler(this.kbtnOk_Click); + // + // kbtnSystemInformation + // + this.kbtnSystemInformation.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnSystemInformation.Location = new System.Drawing.Point(523, 12); + this.kbtnSystemInformation.Margin = new System.Windows.Forms.Padding(10); + this.kbtnSystemInformation.Name = "kbtnSystemInformation"; + this.kbtnSystemInformation.Size = new System.Drawing.Size(161, 25); + this.kbtnSystemInformation.TabIndex = 1; + this.kbtnSystemInformation.Values.Text = "kryptonButton2"; + this.kbtnSystemInformation.Click += new System.EventHandler(this.kbtnSystemInformation_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(804, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kpnlMain + // + this.kpnlMain.Controls.Add(this.khgMain); + this.kpnlMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlMain.Location = new System.Drawing.Point(0, 0); + this.kpnlMain.Name = "kpnlMain"; + this.kpnlMain.Size = new System.Drawing.Size(804, 404); + this.kpnlMain.TabIndex = 1; + // + // khgMain + // + this.khgMain.HeaderVisibleSecondary = false; + this.khgMain.Location = new System.Drawing.Point(11, 8); + this.khgMain.Name = "khgMain"; + // + // khgMain.Panel + // + this.khgMain.Panel.Controls.Add(this.tscMain); + this.khgMain.Size = new System.Drawing.Size(779, 385); + this.khgMain.TabIndex = 2; + this.khgMain.ValuesPrimary.Image = null; + // + // tscMain + // + // + // tscMain.ContentPanel + // + this.tscMain.ContentPanel.Controls.Add(this.kpnlGeneralInformation); + this.tscMain.ContentPanel.Controls.Add(this.kpnlDescription); + this.tscMain.ContentPanel.Controls.Add(this.kpnlFileInformation); + this.tscMain.ContentPanel.Controls.Add(this.kpnlTheme); + this.tscMain.ContentPanel.Controls.Add(this.kpnlToolkitInformation); + this.tscMain.ContentPanel.Size = new System.Drawing.Size(777, 326); + this.tscMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tscMain.Location = new System.Drawing.Point(0, 0); + this.tscMain.Name = "tscMain"; + this.tscMain.Size = new System.Drawing.Size(777, 351); + this.tscMain.TabIndex = 0; + this.tscMain.Text = "toolStripContainer1"; + // + // tscMain.TopToolStripPanel + // + this.tscMain.TopToolStripPanel.Controls.Add(this.tsMain); + // + // kpnlGeneralInformation + // + this.kpnlGeneralInformation.Controls.Add(this.tlpnlGeneralInformation); + this.kpnlGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlGeneralInformation.Name = "kpnlGeneralInformation"; + this.kpnlGeneralInformation.Size = new System.Drawing.Size(777, 326); + this.kpnlGeneralInformation.TabIndex = 3; + // + // tlpnlGeneralInformation + // + this.tlpnlGeneralInformation.BackColor = System.Drawing.Color.Transparent; + this.tlpnlGeneralInformation.ColumnCount = 2; + this.tlpnlGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpnlGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpnlGeneralInformation.Controls.Add(this.pbxImage, 0, 0); + this.tlpnlGeneralInformation.Controls.Add(this.kwlVersionLabel, 1, 0); + this.tlpnlGeneralInformation.Controls.Add(this.kwlBuiltOn, 1, 1); + this.tlpnlGeneralInformation.Controls.Add(this.kwlCopyright, 1, 2); + this.tlpnlGeneralInformation.Controls.Add(this.kryptonWrapLabel5, 1, 3); + this.tlpnlGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpnlGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.tlpnlGeneralInformation.Name = "tlpnlGeneralInformation"; + this.tlpnlGeneralInformation.RowCount = 4; + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tlpnlGeneralInformation.Size = new System.Drawing.Size(777, 326); + this.tlpnlGeneralInformation.TabIndex = 1; + // + // pbxImage + // + this.pbxImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxImage.Location = new System.Drawing.Point(5, 5); + this.pbxImage.Margin = new System.Windows.Forms.Padding(5); + this.pbxImage.Name = "pbxImage"; + this.tlpnlGeneralInformation.SetRowSpan(this.pbxImage, 4); + this.pbxImage.Size = new System.Drawing.Size(64, 316); + this.pbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxImage.TabIndex = 0; + this.pbxImage.TabStop = false; + // + // kwlVersionLabel + // + this.kwlVersionLabel.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlVersionLabel.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlVersionLabel.ForeColor = System.Drawing.Color.Black; + this.kwlVersionLabel.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlVersionLabel.Location = new System.Drawing.Point(77, 0); + this.kwlVersionLabel.Name = "kwlVersionLabel"; + this.kwlVersionLabel.Size = new System.Drawing.Size(697, 81); + this.kwlVersionLabel.Text = "kryptonWrapLabel2"; + this.kwlVersionLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kwlBuiltOn + // + this.kwlBuiltOn.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlBuiltOn.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlBuiltOn.ForeColor = System.Drawing.Color.Black; + this.kwlBuiltOn.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlBuiltOn.Location = new System.Drawing.Point(77, 81); + this.kwlBuiltOn.Name = "kwlBuiltOn"; + this.kwlBuiltOn.Size = new System.Drawing.Size(697, 81); + this.kwlBuiltOn.Text = "kryptonWrapLabel3"; + this.kwlBuiltOn.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kwlCopyright + // + this.kwlCopyright.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlCopyright.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlCopyright.ForeColor = System.Drawing.Color.Black; + this.kwlCopyright.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlCopyright.Location = new System.Drawing.Point(77, 162); + this.kwlCopyright.Name = "kwlCopyright"; + this.kwlCopyright.Size = new System.Drawing.Size(697, 81); + this.kwlCopyright.Text = "kryptonWrapLabel4"; + this.kwlCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kryptonWrapLabel5 + // + this.kryptonWrapLabel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonWrapLabel5.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kryptonWrapLabel5.ForeColor = System.Drawing.Color.Black; + this.kryptonWrapLabel5.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kryptonWrapLabel5.Location = new System.Drawing.Point(77, 243); + this.kryptonWrapLabel5.Name = "kryptonWrapLabel5"; + this.kryptonWrapLabel5.Size = new System.Drawing.Size(697, 83); + this.kryptonWrapLabel5.Text = "kryptonWrapLabel5"; + this.kryptonWrapLabel5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // kpnlDescription + // + this.kpnlDescription.Controls.Add(this.krtbDescription); + this.kpnlDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlDescription.Location = new System.Drawing.Point(0, 0); + this.kpnlDescription.Name = "kpnlDescription"; + this.kpnlDescription.Size = new System.Drawing.Size(777, 326); + this.kpnlDescription.TabIndex = 2; + // + // krtbDescription + // + this.krtbDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.krtbDescription.InputControlStyle = Krypton.Toolkit.InputControlStyle.PanelClient; + this.krtbDescription.Location = new System.Drawing.Point(0, 0); + this.krtbDescription.Name = "krtbDescription"; + this.krtbDescription.Size = new System.Drawing.Size(777, 326); + this.krtbDescription.TabIndex = 0; + this.krtbDescription.Text = ""; + // + // kpnlFileInformation + // + this.kpnlFileInformation.Controls.Add(this.tscFileInformation); + this.kpnlFileInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlFileInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlFileInformation.Name = "kpnlFileInformation"; + this.kpnlFileInformation.Size = new System.Drawing.Size(777, 326); + this.kpnlFileInformation.TabIndex = 1; + // + // tscFileInformation + // + // + // tscFileInformation.ContentPanel + // + this.tscFileInformation.ContentPanel.Controls.Add(this.kpnlApplication); + this.tscFileInformation.ContentPanel.Controls.Add(this.kpnlAssemblies); + this.tscFileInformation.ContentPanel.Controls.Add(this.kpnlAssemblyDetails); + this.tscFileInformation.ContentPanel.Size = new System.Drawing.Size(777, 301); + this.tscFileInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tscFileInformation.Location = new System.Drawing.Point(0, 0); + this.tscFileInformation.Name = "tscFileInformation"; + this.tscFileInformation.Size = new System.Drawing.Size(777, 326); + this.tscFileInformation.TabIndex = 1; + this.tscFileInformation.Text = "toolStripContainer2"; + // + // tscFileInformation.TopToolStripPanel + // + this.tscFileInformation.TopToolStripPanel.Controls.Add(this.tsFileInformation); + // + // kpnlApplication + // + this.kpnlApplication.Controls.Add(this.kdgvApplication); + this.kpnlApplication.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlApplication.Location = new System.Drawing.Point(0, 0); + this.kpnlApplication.Name = "kpnlApplication"; + this.kpnlApplication.Size = new System.Drawing.Size(777, 301); + this.kpnlApplication.TabIndex = 1; + // + // kdgvApplication + // + this.kdgvApplication.AllowUserToAddRows = false; + this.kdgvApplication.AllowUserToDeleteRows = false; + this.kdgvApplication.AllowUserToResizeColumns = false; + this.kdgvApplication.AllowUserToResizeRows = false; + this.kdgvApplication.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.kdgvApplication.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.kdgvApplication.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kdgvApplication.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.clmnApplicationKey, + this.clmnValue}); + this.kdgvApplication.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdgvApplication.Location = new System.Drawing.Point(0, 0); + this.kdgvApplication.Name = "kdgvApplication"; + this.kdgvApplication.Size = new System.Drawing.Size(777, 301); + this.kdgvApplication.TabIndex = 0; + // + // clmnApplicationKey + // + this.clmnApplicationKey.HeaderText = "Application Key"; + this.clmnApplicationKey.Name = "clmnApplicationKey"; + this.clmnApplicationKey.Width = 119; + // + // clmnValue + // + this.clmnValue.HeaderText = "Value"; + this.clmnValue.Name = "clmnValue"; + this.clmnValue.Width = 64; + // + // kpnlAssemblies + // + this.kpnlAssemblies.Controls.Add(this.kdgvAssemblies); + this.kpnlAssemblies.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlAssemblies.Location = new System.Drawing.Point(0, 0); + this.kpnlAssemblies.Name = "kpnlAssemblies"; + this.kpnlAssemblies.Size = new System.Drawing.Size(777, 301); + this.kpnlAssemblies.TabIndex = 1; + // + // kdgvAssemblies + // + this.kdgvAssemblies.AllowUserToAddRows = false; + this.kdgvAssemblies.AllowUserToDeleteRows = false; + this.kdgvAssemblies.AllowUserToResizeColumns = false; + this.kdgvAssemblies.AllowUserToResizeRows = false; + this.kdgvAssemblies.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.kdgvAssemblies.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.kdgvAssemblies.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kdgvAssemblies.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.clmnAssembly, + this.clmnVersion, + this.clmnBuiltOn, + this.clmnCodeBase}); + this.kdgvAssemblies.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdgvAssemblies.Location = new System.Drawing.Point(0, 0); + this.kdgvAssemblies.Name = "kdgvAssemblies"; + this.kdgvAssemblies.Size = new System.Drawing.Size(777, 301); + this.kdgvAssemblies.TabIndex = 0; + // + // clmnAssembly + // + this.clmnAssembly.HeaderText = "Assembly"; + this.clmnAssembly.Name = "clmnAssembly"; + this.clmnAssembly.Width = 87; + // + // clmnVersion + // + this.clmnVersion.HeaderText = "Version"; + this.clmnVersion.Name = "clmnVersion"; + this.clmnVersion.Width = 74; + // + // clmnBuiltOn + // + this.clmnBuiltOn.HeaderText = "Built On"; + this.clmnBuiltOn.Name = "clmnBuiltOn"; + this.clmnBuiltOn.Width = 79; + // + // clmnCodeBase + // + this.clmnCodeBase.HeaderText = "Code Base"; + this.clmnCodeBase.Name = "clmnCodeBase"; + this.clmnCodeBase.Width = 91; + // + // kpnlAssemblyDetails + // + this.kpnlAssemblyDetails.Controls.Add(this.kiadAssemblyDetails); + this.kpnlAssemblyDetails.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlAssemblyDetails.Location = new System.Drawing.Point(0, 0); + this.kpnlAssemblyDetails.Name = "kpnlAssemblyDetails"; + this.kpnlAssemblyDetails.Size = new System.Drawing.Size(777, 301); + this.kpnlAssemblyDetails.TabIndex = 0; + // + // kiadAssemblyDetails + // + this.kiadAssemblyDetails.BackColor = System.Drawing.Color.Transparent; + this.kiadAssemblyDetails.Dock = System.Windows.Forms.DockStyle.Fill; + this.kiadAssemblyDetails.Location = new System.Drawing.Point(0, 0); + this.kiadAssemblyDetails.Name = "kiadAssemblyDetails"; + this.kiadAssemblyDetails.Size = new System.Drawing.Size(777, 301); + this.kiadAssemblyDetails.TabIndex = 0; + // + // tsFileInformation + // + this.tsFileInformation.Dock = System.Windows.Forms.DockStyle.None; + this.tsFileInformation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.tsFileInformation.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.tsFileInformation.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtnApplicationDetails, + this.tssAssembliesDetails, + this.tsbtnAssembliesDetails, + this.tssAssemblyDetails, + this.tsbtnAssemblyDetails}); + this.tsFileInformation.Location = new System.Drawing.Point(3, 0); + this.tsFileInformation.Name = "tsFileInformation"; + this.tsFileInformation.Size = new System.Drawing.Size(257, 25); + this.tsFileInformation.TabIndex = 0; + // + // tsbtnApplicationDetails + // + this.tsbtnApplicationDetails.CheckOnClick = true; + this.tsbtnApplicationDetails.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnApplicationDetails.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnApplicationDetails.Name = "tsbtnApplicationDetails"; + this.tsbtnApplicationDetails.Size = new System.Drawing.Size(72, 22); + this.tsbtnApplicationDetails.Text = "Application"; + this.tsbtnApplicationDetails.Click += new System.EventHandler(this.tsbtnApplicationDetails_Click); + // + // tssAssembliesDetails + // + this.tssAssembliesDetails.Name = "tssAssembliesDetails"; + this.tssAssembliesDetails.Size = new System.Drawing.Size(6, 25); + // + // tsbtnAssembliesDetails + // + this.tsbtnAssembliesDetails.CheckOnClick = true; + this.tsbtnAssembliesDetails.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnAssembliesDetails.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnAssembliesDetails.Name = "tsbtnAssembliesDetails"; + this.tsbtnAssembliesDetails.Size = new System.Drawing.Size(70, 22); + this.tsbtnAssembliesDetails.Text = "Assemblies"; + this.tsbtnAssembliesDetails.Click += new System.EventHandler(this.tsbtnAssembliesDetails_Click); + // + // tssAssemblyDetails + // + this.tssAssemblyDetails.Name = "tssAssemblyDetails"; + this.tssAssemblyDetails.Size = new System.Drawing.Size(6, 25); + // + // tsbtnAssemblyDetails + // + this.tsbtnAssemblyDetails.CheckOnClick = true; + this.tsbtnAssemblyDetails.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnAssemblyDetails.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnAssemblyDetails.Name = "tsbtnAssemblyDetails"; + this.tsbtnAssemblyDetails.Size = new System.Drawing.Size(100, 22); + this.tsbtnAssemblyDetails.Text = "Assembly Details"; + this.tsbtnAssemblyDetails.Click += new System.EventHandler(this.tsbtnAssemblyDetails_Click); + // + // kpnlTheme + // + this.kpnlTheme.Controls.Add(this.tlpTheme); + this.kpnlTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlTheme.Location = new System.Drawing.Point(0, 0); + this.kpnlTheme.Name = "kpnlTheme"; + this.kpnlTheme.Size = new System.Drawing.Size(777, 326); + this.kpnlTheme.TabIndex = 0; + // + // tlpTheme + // + this.tlpTheme.BackColor = System.Drawing.Color.Transparent; + this.tlpTheme.ColumnCount = 1; + this.tlpTheme.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpTheme.Controls.Add(this.kryptonThemeComboBox1, 0, 1); + this.tlpTheme.Controls.Add(this.kwlCurrentTheme, 0, 0); + this.tlpTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpTheme.Location = new System.Drawing.Point(0, 0); + this.tlpTheme.Name = "tlpTheme"; + this.tlpTheme.RowCount = 2; + this.tlpTheme.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpTheme.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpTheme.Size = new System.Drawing.Size(777, 326); + this.tlpTheme.TabIndex = 0; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonThemeComboBox1.DropDownWidth = 767; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(5, 300); + this.kryptonThemeComboBox1.Margin = new System.Windows.Forms.Padding(5); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(767, 21); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 0; + // + // kwlCurrentTheme + // + this.kwlCurrentTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlCurrentTheme.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.kwlCurrentTheme.ForeColor = System.Drawing.Color.Black; + this.kwlCurrentTheme.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kwlCurrentTheme.Location = new System.Drawing.Point(3, 0); + this.kwlCurrentTheme.Name = "kwlCurrentTheme"; + this.kwlCurrentTheme.Padding = new System.Windows.Forms.Padding(5); + this.kwlCurrentTheme.Size = new System.Drawing.Size(771, 295); + this.kwlCurrentTheme.Text = "kryptonWrapLabel1"; + this.kwlCurrentTheme.TextAlign = System.Drawing.ContentAlignment.BottomLeft; + // + // kpnlToolkitInformation + // + this.kpnlToolkitInformation.Controls.Add(this.tscToolkitInformation); + this.kpnlToolkitInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlToolkitInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlToolkitInformation.Name = "kpnlToolkitInformation"; + this.kpnlToolkitInformation.Size = new System.Drawing.Size(777, 326); + this.kpnlToolkitInformation.TabIndex = 4; + // + // tscToolkitInformation + // + // + // tscToolkitInformation.ContentPanel + // + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlToolkitGeneralInformation); + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlDiscord); + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlDeveloperInformation); + this.tscToolkitInformation.ContentPanel.Controls.Add(this.kpnlVersions); + this.tscToolkitInformation.ContentPanel.Size = new System.Drawing.Size(777, 301); + this.tscToolkitInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tscToolkitInformation.Location = new System.Drawing.Point(0, 0); + this.tscToolkitInformation.Name = "tscToolkitInformation"; + this.tscToolkitInformation.Size = new System.Drawing.Size(777, 326); + this.tscToolkitInformation.TabIndex = 2; + this.tscToolkitInformation.Text = "toolStripContainer1"; + // + // tscToolkitInformation.TopToolStripPanel + // + this.tscToolkitInformation.TopToolStripPanel.Controls.Add(this.tsToolkitInformation); + // + // kpnlToolkitGeneralInformation + // + this.kpnlToolkitGeneralInformation.Controls.Add(this.tlpGeneralInformation); + this.kpnlToolkitGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlToolkitGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlToolkitGeneralInformation.Name = "kpnlToolkitGeneralInformation"; + this.kpnlToolkitGeneralInformation.Size = new System.Drawing.Size(777, 301); + this.kpnlToolkitGeneralInformation.TabIndex = 3; + // + // tlpGeneralInformation + // + this.tlpGeneralInformation.BackColor = System.Drawing.Color.Transparent; + this.tlpGeneralInformation.ColumnCount = 2; + this.tlpGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpGeneralInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpGeneralInformation.Controls.Add(this.pbxLogo, 0, 0); + this.tlpGeneralInformation.Controls.Add(this.klwlblGeneralInformation, 1, 0); + this.tlpGeneralInformation.Controls.Add(this.klblCurrentTheme, 1, 2); + this.tlpGeneralInformation.Controls.Add(this.ktcmbCurrentTheme, 1, 3); + this.tlpGeneralInformation.Controls.Add(this.klblBuiltOn, 1, 1); + this.tlpGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpGeneralInformation.Location = new System.Drawing.Point(0, 0); + this.tlpGeneralInformation.Name = "tlpGeneralInformation"; + this.tlpGeneralInformation.RowCount = 3; + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGeneralInformation.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpGeneralInformation.Size = new System.Drawing.Size(777, 301); + this.tlpGeneralInformation.TabIndex = 0; + // + // pbxLogo + // + this.pbxLogo.Dock = System.Windows.Forms.DockStyle.Fill; + this.pbxLogo.Location = new System.Drawing.Point(5, 5); + this.pbxLogo.Margin = new System.Windows.Forms.Padding(5); + this.pbxLogo.Name = "pbxLogo"; + this.pbxLogo.Padding = new System.Windows.Forms.Padding(4, 4, 0, 0); + this.pbxLogo.Size = new System.Drawing.Size(64, 200); + this.pbxLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pbxLogo.TabIndex = 0; + this.pbxLogo.TabStop = false; + // + // klwlblGeneralInformation + // + this.klwlblGeneralInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblGeneralInformation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblGeneralInformation.ForeColor = System.Drawing.Color.White; + this.klwlblGeneralInformation.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblGeneralInformation.LinkArea = new System.Windows.Forms.LinkArea(133, 143); + this.klwlblGeneralInformation.Location = new System.Drawing.Point(79, 5); + this.klwlblGeneralInformation.Margin = new System.Windows.Forms.Padding(5); + this.klwlblGeneralInformation.Name = "klwlblGeneralInformation"; + this.klwlblGeneralInformation.Size = new System.Drawing.Size(693, 200); + this.klwlblGeneralInformation.Text = "Some of the components used in this application are part of the Krypton Standard " + + "Toolkit.\r\n\r\nLicense: BSD-3-Clause\r\n\r\nTo learn more, click here."; + this.klwlblGeneralInformation.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.klwlblGeneralInformation.UseCompatibleTextRendering = true; + this.klwlblGeneralInformation.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.klwlblGeneralInformation_LinkClicked); + // + // klblCurrentTheme + // + this.klblCurrentTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblCurrentTheme.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblCurrentTheme.Location = new System.Drawing.Point(79, 245); + this.klblCurrentTheme.Margin = new System.Windows.Forms.Padding(5); + this.klblCurrentTheme.Name = "klblCurrentTheme"; + this.klblCurrentTheme.Size = new System.Drawing.Size(693, 20); + this.klblCurrentTheme.TabIndex = 2; + this.klblCurrentTheme.Values.Text = "Current Theme:"; + // + // ktcmbCurrentTheme + // + this.ktcmbCurrentTheme.Dock = System.Windows.Forms.DockStyle.Fill; + this.ktcmbCurrentTheme.DropDownWidth = 693; + this.ktcmbCurrentTheme.IntegralHeight = false; + this.ktcmbCurrentTheme.Location = new System.Drawing.Point(79, 275); + this.ktcmbCurrentTheme.Margin = new System.Windows.Forms.Padding(5); + this.ktcmbCurrentTheme.Name = "ktcmbCurrentTheme"; + this.ktcmbCurrentTheme.Size = new System.Drawing.Size(693, 21); + this.ktcmbCurrentTheme.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.ktcmbCurrentTheme.TabIndex = 3; + // + // klblBuiltOn + // + this.klblBuiltOn.Dock = System.Windows.Forms.DockStyle.Fill; + this.klblBuiltOn.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.klblBuiltOn.Location = new System.Drawing.Point(79, 215); + this.klblBuiltOn.Margin = new System.Windows.Forms.Padding(5); + this.klblBuiltOn.Name = "klblBuiltOn"; + this.klblBuiltOn.Size = new System.Drawing.Size(693, 20); + this.klblBuiltOn.TabIndex = 4; + this.klblBuiltOn.Values.Text = "Built On: {0}"; + // + // kpnlDiscord + // + this.kpnlDiscord.Controls.Add(this.klwlblDiscord); + this.kpnlDiscord.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlDiscord.Location = new System.Drawing.Point(0, 0); + this.kpnlDiscord.Name = "kpnlDiscord"; + this.kpnlDiscord.Size = new System.Drawing.Size(777, 301); + this.kpnlDiscord.TabIndex = 2; + // + // klwlblDiscord + // + this.klwlblDiscord.AutoSize = false; + this.klwlblDiscord.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblDiscord.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblDiscord.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblDiscord.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblDiscord.Location = new System.Drawing.Point(0, 0); + this.klwlblDiscord.Name = "klwlblDiscord"; + this.klwlblDiscord.Size = new System.Drawing.Size(777, 301); + this.klwlblDiscord.Text = "kryptonLinkWrapLabel1"; + this.klwlblDiscord.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.klwlblDiscord.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.klwlblDiscord_LinkClicked); + // + // kpnlDeveloperInformation + // + this.kpnlDeveloperInformation.Controls.Add(this.tlpDeveloperInformation); + this.kpnlDeveloperInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlDeveloperInformation.Location = new System.Drawing.Point(0, 0); + this.kpnlDeveloperInformation.Name = "kpnlDeveloperInformation"; + this.kpnlDeveloperInformation.Size = new System.Drawing.Size(777, 301); + this.kpnlDeveloperInformation.TabIndex = 1; + // + // tlpDeveloperInformation + // + this.tlpDeveloperInformation.BackColor = System.Drawing.Color.Transparent; + this.tlpDeveloperInformation.ColumnCount = 1; + this.tlpDeveloperInformation.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpDeveloperInformation.Controls.Add(this.klwlblRepositories, 0, 0); + this.tlpDeveloperInformation.Controls.Add(this.klwlblDocumentation, 0, 1); + this.tlpDeveloperInformation.Controls.Add(this.klwlblDemos, 0, 2); + this.tlpDeveloperInformation.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpDeveloperInformation.Location = new System.Drawing.Point(0, 0); + this.tlpDeveloperInformation.Name = "tlpDeveloperInformation"; + this.tlpDeveloperInformation.RowCount = 3; + this.tlpDeveloperInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpDeveloperInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpDeveloperInformation.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); + this.tlpDeveloperInformation.Size = new System.Drawing.Size(777, 301); + this.tlpDeveloperInformation.TabIndex = 0; + // + // klwlblRepositories + // + this.klwlblRepositories.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblRepositories.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblRepositories.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblRepositories.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblRepositories.Location = new System.Drawing.Point(5, 5); + this.klwlblRepositories.Margin = new System.Windows.Forms.Padding(5); + this.klwlblRepositories.Name = "klwlblRepositories"; + this.klwlblRepositories.Size = new System.Drawing.Size(767, 90); + this.klwlblRepositories.Text = "kryptonLinkWrapLabel1"; + this.klwlblRepositories.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.klwlblRepositories.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.klwlblRepositories_LinkClicked); + // + // klwlblDocumentation + // + this.klwlblDocumentation.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblDocumentation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblDocumentation.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblDocumentation.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblDocumentation.Location = new System.Drawing.Point(5, 105); + this.klwlblDocumentation.Margin = new System.Windows.Forms.Padding(5); + this.klwlblDocumentation.Name = "klwlblDocumentation"; + this.klwlblDocumentation.Size = new System.Drawing.Size(767, 90); + this.klwlblDocumentation.Text = "kryptonLinkWrapLabel1"; + this.klwlblDocumentation.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.klwlblDocumentation.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.klwlblDocumentation_LinkClicked); + // + // klwlblDemos + // + this.klwlblDemos.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblDemos.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblDemos.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblDemos.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblDemos.Location = new System.Drawing.Point(5, 205); + this.klwlblDemos.Margin = new System.Windows.Forms.Padding(5); + this.klwlblDemos.Name = "klwlblDemos"; + this.klwlblDemos.Size = new System.Drawing.Size(767, 91); + this.klwlblDemos.Text = "kryptonLinkWrapLabel1"; + this.klwlblDemos.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.klwlblDemos.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.klwlblDemos_LinkClicked); + // + // kpnlVersions + // + this.kpnlVersions.Controls.Add(this.kdgvVersions); + this.kpnlVersions.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlVersions.Location = new System.Drawing.Point(0, 0); + this.kpnlVersions.Name = "kpnlVersions"; + this.kpnlVersions.Size = new System.Drawing.Size(777, 301); + this.kpnlVersions.TabIndex = 0; + // + // kdgvVersions + // + this.kdgvVersions.AllowUserToAddRows = false; + this.kdgvVersions.AllowUserToDeleteRows = false; + this.kdgvVersions.AllowUserToOrderColumns = true; + this.kdgvVersions.AllowUserToResizeColumns = false; + this.kdgvVersions.AllowUserToResizeRows = false; + this.kdgvVersions.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; + this.kdgvVersions.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells; + this.kdgvVersions.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kdgvVersions.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.clmnFileName, + this.clmnFileVersion}); + this.kdgvVersions.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdgvVersions.Location = new System.Drawing.Point(0, 0); + this.kdgvVersions.Name = "kdgvVersions"; + this.kdgvVersions.Size = new System.Drawing.Size(777, 301); + this.kdgvVersions.TabIndex = 0; + // + // clmnFileName + // + this.clmnFileName.HeaderText = "File Name"; + this.clmnFileName.Name = "clmnFileName"; + this.clmnFileName.Width = 89; + // + // clmnFileVersion + // + this.clmnFileVersion.HeaderText = "Version"; + this.clmnFileVersion.Name = "clmnFileVersion"; + this.clmnFileVersion.Width = 74; + // + // tsToolkitInformation + // + this.tsToolkitInformation.Dock = System.Windows.Forms.DockStyle.None; + this.tsToolkitInformation.Font = new System.Drawing.Font("Segoe UI", 9F); + this.tsToolkitInformation.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.tsToolkitInformation.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtnToolkitGeneralInformation, + this.tssDiscord, + this.tsbtnDiscord, + this.tssDeveloperInformation, + this.tsbtnDeveloperInformation, + this.tssVersions, + this.tsbtnVersions}); + this.tsToolkitInformation.Location = new System.Drawing.Point(3, 0); + this.tsToolkitInformation.Name = "tsToolkitInformation"; + this.tsToolkitInformation.Size = new System.Drawing.Size(434, 25); + this.tsToolkitInformation.TabIndex = 0; + // + // tsbtnToolkitGeneralInformation + // + this.tsbtnToolkitGeneralInformation.Checked = true; + this.tsbtnToolkitGeneralInformation.CheckOnClick = true; + this.tsbtnToolkitGeneralInformation.CheckState = System.Windows.Forms.CheckState.Checked; + this.tsbtnToolkitGeneralInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnToolkitGeneralInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnToolkitGeneralInformation.Name = "tsbtnToolkitGeneralInformation"; + this.tsbtnToolkitGeneralInformation.Size = new System.Drawing.Size(117, 22); + this.tsbtnToolkitGeneralInformation.Text = "General Information"; + this.tsbtnToolkitGeneralInformation.TextImageRelation = System.Windows.Forms.TextImageRelation.TextBeforeImage; + this.tsbtnToolkitGeneralInformation.Click += new System.EventHandler(this.tsbtnToolkitGeneralInformation_Click); + // + // tssDiscord + // + this.tssDiscord.Name = "tssDiscord"; + this.tssDiscord.Size = new System.Drawing.Size(6, 25); + // + // tsbtnDiscord + // + this.tsbtnDiscord.CheckOnClick = true; + this.tsbtnDiscord.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnDiscord.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnDiscord.Name = "tsbtnDiscord"; + this.tsbtnDiscord.Size = new System.Drawing.Size(51, 22); + this.tsbtnDiscord.Text = "Discord"; + this.tsbtnDiscord.Click += new System.EventHandler(this.tsbtnDiscord_Click); + // + // tssDeveloperInformation + // + this.tssDeveloperInformation.Name = "tssDeveloperInformation"; + this.tssDeveloperInformation.Size = new System.Drawing.Size(6, 25); + // + // tsbtnDeveloperInformation + // + this.tsbtnDeveloperInformation.CheckOnClick = true; + this.tsbtnDeveloperInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnDeveloperInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnDeveloperInformation.Name = "tsbtnDeveloperInformation"; + this.tsbtnDeveloperInformation.Size = new System.Drawing.Size(130, 22); + this.tsbtnDeveloperInformation.Text = "Developer Information"; + this.tsbtnDeveloperInformation.Click += new System.EventHandler(this.tsbtnDeveloperInformation_Click); + // + // tssVersions + // + this.tssVersions.Name = "tssVersions"; + this.tssVersions.Size = new System.Drawing.Size(6, 25); + // + // tsbtnVersions + // + this.tsbtnVersions.CheckOnClick = true; + this.tsbtnVersions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnVersions.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnVersions.Name = "tsbtnVersions"; + this.tsbtnVersions.Size = new System.Drawing.Size(115, 22); + this.tsbtnVersions.Text = "Version Information"; + this.tsbtnVersions.Click += new System.EventHandler(this.tsbtnVersions_Click); + // + // tsMain + // + this.tsMain.Dock = System.Windows.Forms.DockStyle.None; + this.tsMain.Font = new System.Drawing.Font("Segoe UI", 9F); + this.tsMain.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbtnGeneralInformation, + this.toolStripSeparator1, + this.tsbtnDescription, + this.toolStripSeparator2, + this.tsbtnFileInformation, + this.toolStripSeparator3, + this.tsbtnTheme, + this.tssToolkitInformation, + this.tsbtnToolkitInformation}); + this.tsMain.Location = new System.Drawing.Point(3, 0); + this.tsMain.Name = "tsMain"; + this.tsMain.Size = new System.Drawing.Size(351, 25); + this.tsMain.TabIndex = 0; + // + // tsbtnGeneralInformation + // + this.tsbtnGeneralInformation.CheckOnClick = true; + this.tsbtnGeneralInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnGeneralInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnGeneralInformation.Name = "tsbtnGeneralInformation"; + this.tsbtnGeneralInformation.Size = new System.Drawing.Size(117, 22); + this.tsbtnGeneralInformation.Text = "General Information"; + this.tsbtnGeneralInformation.Click += new System.EventHandler(this.tsbtnGeneralInformation_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // tsbtnDescription + // + this.tsbtnDescription.CheckOnClick = true; + this.tsbtnDescription.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnDescription.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnDescription.Name = "tsbtnDescription"; + this.tsbtnDescription.Size = new System.Drawing.Size(71, 22); + this.tsbtnDescription.Text = "Description"; + this.tsbtnDescription.Click += new System.EventHandler(this.tsbtnDescription_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // tsbtnFileInformation + // + this.tsbtnFileInformation.CheckOnClick = true; + this.tsbtnFileInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnFileInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnFileInformation.Name = "tsbtnFileInformation"; + this.tsbtnFileInformation.Size = new System.Drawing.Size(95, 22); + this.tsbtnFileInformation.Text = "File Information"; + this.tsbtnFileInformation.Click += new System.EventHandler(this.tsbtnFileInformation_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25); + // + // tsbtnTheme + // + this.tsbtnTheme.CheckOnClick = true; + this.tsbtnTheme.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnTheme.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnTheme.Name = "tsbtnTheme"; + this.tsbtnTheme.Size = new System.Drawing.Size(47, 22); + this.tsbtnTheme.Text = "Theme"; + this.tsbtnTheme.Click += new System.EventHandler(this.tsbtnTheme_Click); + // + // tssToolkitInformation + // + this.tssToolkitInformation.Name = "tssToolkitInformation"; + this.tssToolkitInformation.Size = new System.Drawing.Size(6, 25); + this.tssToolkitInformation.Visible = false; + // + // tsbtnToolkitInformation + // + this.tsbtnToolkitInformation.CheckOnClick = true; + this.tsbtnToolkitInformation.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.tsbtnToolkitInformation.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnToolkitInformation.Name = "tsbtnToolkitInformation"; + this.tsbtnToolkitInformation.Size = new System.Drawing.Size(112, 22); + this.tsbtnToolkitInformation.Text = "Toolkit Information"; + this.tsbtnToolkitInformation.Visible = false; + this.tsbtnToolkitInformation.Click += new System.EventHandler(this.tsbtnToolkitInformation_Click); + // + // VisualAboutBoxForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(804, 454); + this.Controls.Add(this.kpnlMain); + this.Controls.Add(this.kpnlButtons); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.FormTitleAlign = Krypton.Toolkit.PaletteRelativeAlign.Inherit; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualAboutBoxForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + ((System.ComponentModel.ISupportInitialize)(this.kpnlButtons)).EndInit(); + this.kpnlButtons.ResumeLayout(false); + this.kpnlButtons.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kpnlMain)).EndInit(); + this.kpnlMain.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.khgMain.Panel)).EndInit(); + this.khgMain.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.khgMain)).EndInit(); + this.khgMain.ResumeLayout(false); + this.tscMain.ContentPanel.ResumeLayout(false); + this.tscMain.TopToolStripPanel.ResumeLayout(false); + this.tscMain.TopToolStripPanel.PerformLayout(); + this.tscMain.ResumeLayout(false); + this.tscMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlGeneralInformation)).EndInit(); + this.kpnlGeneralInformation.ResumeLayout(false); + this.tlpnlGeneralInformation.ResumeLayout(false); + this.tlpnlGeneralInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxImage)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDescription)).EndInit(); + this.kpnlDescription.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kpnlFileInformation)).EndInit(); + this.kpnlFileInformation.ResumeLayout(false); + this.tscFileInformation.ContentPanel.ResumeLayout(false); + this.tscFileInformation.TopToolStripPanel.ResumeLayout(false); + this.tscFileInformation.TopToolStripPanel.PerformLayout(); + this.tscFileInformation.ResumeLayout(false); + this.tscFileInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlApplication)).EndInit(); + this.kpnlApplication.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kdgvApplication)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblies)).EndInit(); + this.kpnlAssemblies.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kdgvAssemblies)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlAssemblyDetails)).EndInit(); + this.kpnlAssemblyDetails.ResumeLayout(false); + this.tsFileInformation.ResumeLayout(false); + this.tsFileInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlTheme)).EndInit(); + this.kpnlTheme.ResumeLayout(false); + this.tlpTheme.ResumeLayout(false); + this.tlpTheme.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitInformation)).EndInit(); + this.kpnlToolkitInformation.ResumeLayout(false); + this.tscToolkitInformation.ContentPanel.ResumeLayout(false); + this.tscToolkitInformation.TopToolStripPanel.ResumeLayout(false); + this.tscToolkitInformation.TopToolStripPanel.PerformLayout(); + this.tscToolkitInformation.ResumeLayout(false); + this.tscToolkitInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlToolkitGeneralInformation)).EndInit(); + this.kpnlToolkitGeneralInformation.ResumeLayout(false); + this.tlpGeneralInformation.ResumeLayout(false); + this.tlpGeneralInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pbxLogo)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ktcmbCurrentTheme)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDiscord)).EndInit(); + this.kpnlDiscord.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kpnlDeveloperInformation)).EndInit(); + this.kpnlDeveloperInformation.ResumeLayout(false); + this.tlpDeveloperInformation.ResumeLayout(false); + this.tlpDeveloperInformation.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlVersions)).EndInit(); + this.kpnlVersions.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kdgvVersions)).EndInit(); + this.tsToolkitInformation.ResumeLayout(false); + this.tsToolkitInformation.PerformLayout(); + this.tsMain.ResumeLayout(false); + this.tsMain.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kpnlButtons; + private KryptonBorderEdge kryptonBorderEdge1; + private TableLayoutPanel tableLayoutPanel1; + private KryptonButton kbtnOk; + private KryptonButton kbtnSystemInformation; + private KryptonPanel kpnlMain; + private KryptonHeaderGroup khgMain; + private ToolStripContainer tscMain; + private ToolStrip tsMain; + private ToolStripButton tsbtnGeneralInformation; + private ToolStripSeparator toolStripSeparator1; + private ToolStripButton tsbtnDescription; + private ToolStripSeparator toolStripSeparator2; + private ToolStripButton tsbtnFileInformation; + private ToolStripSeparator toolStripSeparator3; + private ToolStripButton tsbtnTheme; + private KryptonPanel kpnlTheme; + private TableLayoutPanel tlpTheme; + private KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonWrapLabel kwlCurrentTheme; + private KryptonPanel kpnlFileInformation; + private ToolStripContainer tscFileInformation; + private ToolStrip tsFileInformation; + private ToolStripButton tsbtnApplicationDetails; + private ToolStripSeparator tssAssembliesDetails; + private ToolStripButton tsbtnAssembliesDetails; + private ToolStripSeparator tssAssemblyDetails; + private ToolStripButton tsbtnAssemblyDetails; + private KryptonPanel kpnlAssemblyDetails; + private InternalAssemblyDetails kiadAssemblyDetails; + private KryptonPanel kpnlAssemblies; + private KryptonDataGridView kdgvAssemblies; + private KryptonPanel kpnlApplication; + private KryptonDataGridView kdgvApplication; + private KryptonPanel kpnlDescription; + private KryptonRichTextBox krtbDescription; + private KryptonPanel kpnlGeneralInformation; + private TableLayoutPanel tlpnlGeneralInformation; + private PictureBox pbxImage; + private KryptonWrapLabel kwlVersionLabel; + private KryptonWrapLabel kwlBuiltOn; + private KryptonWrapLabel kwlCopyright; + private KryptonWrapLabel kryptonWrapLabel5; + private DataGridViewTextBoxColumn clmnApplicationKey; + private DataGridViewTextBoxColumn clmnValue; + private DataGridViewTextBoxColumn clmnAssembly; + private DataGridViewTextBoxColumn clmnVersion; + private DataGridViewTextBoxColumn clmnBuiltOn; + private DataGridViewTextBoxColumn clmnCodeBase; + private ToolStripSeparator tssToolkitInformation; + private ToolStripButton tsbtnToolkitInformation; + private KryptonPanel kpnlToolkitInformation; + private ToolStripContainer tscToolkitInformation; + private KryptonPanel kpnlToolkitGeneralInformation; + private TableLayoutPanel tlpGeneralInformation; + private PictureBox pbxLogo; + private KryptonLinkWrapLabel klwlblGeneralInformation; + private KryptonLabel klblCurrentTheme; + private KryptonThemeComboBox ktcmbCurrentTheme; + private KryptonLabel klblBuiltOn; + private KryptonPanel kpnlDiscord; + private KryptonLinkWrapLabel klwlblDiscord; + private KryptonPanel kpnlDeveloperInformation; + private TableLayoutPanel tlpDeveloperInformation; + private KryptonLinkWrapLabel klwlblRepositories; + private KryptonLinkWrapLabel klwlblDocumentation; + private KryptonLinkWrapLabel klwlblDemos; + private KryptonPanel kpnlVersions; + private KryptonDataGridView kdgvVersions; + private ToolStrip tsToolkitInformation; + private ToolStripButton tsbtnToolkitGeneralInformation; + private ToolStripSeparator tssDiscord; + private ToolStripButton tsbtnDiscord; + private ToolStripSeparator tssDeveloperInformation; + private ToolStripButton tsbtnDeveloperInformation; + private ToolStripSeparator tssVersions; + private ToolStripButton tsbtnVersions; + private DataGridViewTextBoxColumn clmnFileName; + private DataGridViewTextBoxColumn clmnFileVersion; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.cs new file mode 100644 index 000000000..db2c85a11 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.cs @@ -0,0 +1,625 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualAboutBoxForm : KryptonForm + { + #region Instance Fields + + private readonly bool _showToolkitButton; + + private readonly KryptonAboutBoxData _aboutBoxData; + + private readonly KryptonAboutToolkitData _aboutToolkitData; + + #endregion + + #region Identity + + public VisualAboutBoxForm(KryptonAboutBoxData aboutBoxData) + { + InitializeComponent(); + + _aboutBoxData = aboutBoxData; + + Startup(_aboutBoxData); + + kbtnOk.Text = KryptonManager.Strings.GeneralStrings.OK; + + kbtnSystemInformation.Text = KryptonManager.Strings.CustomStrings.SystemInformation; + } + + public VisualAboutBoxForm(KryptonAboutBoxData aboutBoxData, KryptonAboutToolkitData aboutToolkitData) + { + InitializeComponent(); + + _showToolkitButton = aboutBoxData.ShowToolkitInformation ?? false; + + _aboutBoxData = aboutBoxData; + + _aboutToolkitData = aboutToolkitData; + + Startup(_showToolkitButton, _aboutBoxData, _aboutToolkitData); + + kbtnOk.Text = KryptonManager.Strings.GeneralStrings.OK; + + kbtnSystemInformation.Text = KryptonManager.Strings.CustomStrings.SystemInformation; + } + + #endregion + + #region Implementation + + #region Basic Functionallity + + private void Startup(KryptonAboutBoxData aboutBoxData) + { + khgMain.ValuesPrimary.Image = + aboutBoxData.HeaderImage ?? GenericImageResources.InformationSmall; + + khgMain.ValuesPrimary.Heading = + $@"{KryptonManager.Strings.AboutBoxStrings.About} {aboutBoxData.ApplicationName}"; + + pbxImage.Image = aboutBoxData.MainImage ?? GenericImageResources.InformationMedium; + + kwlCurrentTheme.Text = $@"{KryptonManager.Strings.CustomStrings.CurrentTheme}:"; + + // ToDo: Review + UpdateVersionLabel($"{KryptonManager.Strings.AboutBoxStrings.Version}: {KryptonAboutBoxUtilities.GetFileVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion}"); + + if (aboutBoxData.UseFullBuiltOnDate != null || aboutBoxData.UseFullBuiltOnDate == false) + { + UpdateBuiltOnLabel($"{KryptonManager.Strings.AboutBoxStrings.BuildDate}: {KryptonAboutBoxUtilities.AssemblyBuildDate(Assembly.GetExecutingAssembly(), true).ToString("F")}"); + } + else + { + UpdateBuiltOnLabel($"{KryptonManager.Strings.AboutBoxStrings.BuildDate}: {KryptonAboutBoxUtilities.AssemblyBuildDate(Assembly.GetExecutingAssembly(), true)}"); + } + + UpdateCopyrightLabel($"{KryptonManager.Strings.AboutBoxStrings.Copyright}: {KryptonAboutBoxUtilities.GetFileVersionInfo(Assembly.GetExecutingAssembly().Location).LegalCopyright}"); + + UpdateDescription(KryptonAboutBoxUtilities.GetFileVersionInfo(Assembly.GetEntryAssembly()!.Location!).FileDescription!); + + kryptonWrapLabel5.Text = null; + } + + private void UpdateDescription(string fileDescription) => krtbDescription.Text = fileDescription; + + private void UpdateCopyrightLabel(string value) => kwlCopyright.Text = value; + + private void UpdateBuiltOnLabel(string value) => kwlBuiltOn.Text = value; + + private void UpdateVersionLabel(string value) => kwlVersionLabel.Text = value; + + private void kbtnOk_Click(object sender, EventArgs e) => Hide(); + + private void kbtnSystemInformation_Click(object sender, EventArgs e) => KryptonAboutBoxUtilities.LaunchSystemInformation(); + + private void tsbtnGeneralInformation_Click(object sender, EventArgs e) => SwitchAboutBoxPage(AboutBoxPage.GeneralInformation); + + private void tsbtnDescription_Click(object sender, EventArgs e) => SwitchAboutBoxPage(AboutBoxPage.Description); + + private void tsbtnFileInformation_Click(object sender, EventArgs e) => SwitchAboutBoxPage(AboutBoxPage.FileInformation); + + private void tsbtnTheme_Click(object sender, EventArgs e) => SwitchAboutBoxPage(AboutBoxPage.Theme); + + private void tsbtnApplicationDetails_Click(object sender, EventArgs e) => SwitchFileInformationPage(AboutBoxFileInformationPage.Application); + + private void tsbtnAssembliesDetails_Click(object sender, EventArgs e) => SwitchFileInformationPage(AboutBoxFileInformationPage.Assemblies); + + private void tsbtnAssemblyDetails_Click(object sender, EventArgs e) => SwitchFileInformationPage(AboutBoxFileInformationPage.AssemblyDetails); + + private void SwitchFileInformationPage(AboutBoxFileInformationPage page) + { + switch (page) + { + case AboutBoxFileInformationPage.Application: + tsbtnFileInformation.Checked = true; + + kpnlApplication.Visible = true; + + tsbtnAssembliesDetails.Checked = false; + + kpnlAssemblies.Visible = false; + + tsbtnAssemblyDetails.Checked = false; + + kpnlAssemblyDetails.Visible = false; + break; + case AboutBoxFileInformationPage.Assemblies: + tsbtnFileInformation.Checked = false; + + kpnlApplication.Visible = false; + + tsbtnAssembliesDetails.Checked = true; + + kpnlAssemblies.Visible = true; + + tsbtnAssemblyDetails.Checked = false; + + kpnlAssemblyDetails.Visible = false; + break; + case AboutBoxFileInformationPage.AssemblyDetails: + tsbtnFileInformation.Checked = false; + + kpnlApplication.Visible = false; + + tsbtnAssembliesDetails.Checked = false; + + kpnlAssemblies.Visible = false; + + tsbtnAssemblyDetails.Checked = true; + + kpnlAssemblyDetails.Visible = true; + break; + default: + throw new ArgumentOutOfRangeException(nameof(page), page, null); + } + } + + private void SwitchAboutBoxPage(AboutBoxPage page) + { + switch (page) + { + case AboutBoxPage.GeneralInformation: + tsbtnGeneralInformation.Checked = true; + + kpnlGeneralInformation.Visible = true; + + tsbtnDescription.Checked = false; + + kpnlDescription.Visible = false; + + tsbtnFileInformation.Checked = false; + + kpnlFileInformation.Visible = false; + + tsbtnTheme.Checked = false; + + kpnlTheme.Visible = false; + + tsbtnToolkitInformation.Checked = false; + + kpnlToolkitInformation.Visible = false; + break; + case AboutBoxPage.Description: + tsbtnGeneralInformation.Checked = false; + + kpnlGeneralInformation.Visible = false; + + tsbtnDescription.Checked = true; + + kpnlDescription.Visible = true; + + tsbtnFileInformation.Checked = false; + + kpnlFileInformation.Visible = false; + + tsbtnTheme.Checked = false; + + kpnlTheme.Visible = false; + + tsbtnToolkitInformation.Checked = false; + + kpnlToolkitInformation.Visible = false; + break; + case AboutBoxPage.FileInformation: + tsbtnGeneralInformation.Checked = false; + + kpnlGeneralInformation.Visible = false; + + tsbtnDescription.Checked = false; + + kpnlDescription.Visible = false; + + tsbtnFileInformation.Checked = true; + + kpnlFileInformation.Visible = true; + + tsbtnTheme.Checked = false; + + kpnlTheme.Visible = false; + + tsbtnToolkitInformation.Checked = false; + + kpnlToolkitInformation.Visible = false; + break; + case AboutBoxPage.Theme: + tsbtnGeneralInformation.Checked = false; + + kpnlGeneralInformation.Visible = false; + + tsbtnDescription.Checked = false; + + kpnlDescription.Visible = false; + + tsbtnFileInformation.Checked = false; + + kpnlFileInformation.Visible = false; + + tsbtnTheme.Checked = true; + + kpnlTheme.Visible = true; + + tsbtnToolkitInformation.Checked = false; + + kpnlToolkitInformation.Visible = false; + break; + case AboutBoxPage.ToolkitInformation: + tsbtnGeneralInformation.Checked = false; + + kpnlGeneralInformation.Visible = false; + + tsbtnDescription.Checked = false; + + kpnlDescription.Visible = false; + + tsbtnFileInformation.Checked = false; + + kpnlFileInformation.Visible = false; + + tsbtnTheme.Checked = false; + + kpnlTheme.Visible = false; + + tsbtnToolkitInformation.Checked = true; + + kpnlToolkitInformation.Visible = true; + break; + default: + throw new ArgumentOutOfRangeException(nameof(page), page, null); + } + } + + + #endregion + + #region Toolkit Information + + private void Startup(bool showToolkitButton, KryptonAboutBoxData aboutBoxData, KryptonAboutToolkitData aboutToolkitData) + { + UpdateShowToolkitButtonUI(showToolkitButton); + + #region Basic Details + + khgMain.ValuesPrimary.Image = + aboutBoxData.HeaderImage ?? GenericImageResources.InformationSmall; + + khgMain.ValuesPrimary.Heading = + $@"{KryptonManager.Strings.AboutBoxStrings.About} {aboutBoxData.ApplicationName}"; + + pbxImage.Image = aboutBoxData.MainImage ?? GenericImageResources.InformationMedium; + + kwlCurrentTheme.Text = $@"{KryptonManager.Strings.CustomStrings.CurrentTheme}:"; + + // ToDo: Review + UpdateVersionLabel($"{KryptonManager.Strings.AboutBoxStrings.Version}: {KryptonAboutBoxUtilities.GetFileVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion}"); + + if (aboutBoxData.UseFullBuiltOnDate != null || aboutBoxData.UseFullBuiltOnDate == false) + { + UpdateBuiltOnLabel($"{KryptonManager.Strings.AboutBoxStrings.BuildDate}: {KryptonAboutBoxUtilities.AssemblyBuildDate(Assembly.GetExecutingAssembly(), true).ToString("F")}"); + } + else + { + UpdateBuiltOnLabel($"{KryptonManager.Strings.AboutBoxStrings.BuildDate}: {KryptonAboutBoxUtilities.AssemblyBuildDate(Assembly.GetExecutingAssembly(), true)}"); + } + + UpdateCopyrightLabel($"{KryptonManager.Strings.AboutBoxStrings.Copyright}: {KryptonAboutBoxUtilities.GetFileVersionInfo(Assembly.GetExecutingAssembly().Location).LegalCopyright}"); + + UpdateDescription(KryptonAboutBoxUtilities.GetFileVersionInfo(Assembly.GetEntryAssembly()!.Location).FileDescription!); + + kryptonWrapLabel5.Text = null; + + #endregion + + #region Toolkit Details + + // Adjust UI elements + ShowDeveloperControls(aboutToolkitData.ShowDeveloperInformationButton); + + ShowDiscordControls(aboutToolkitData.ShowDiscordButton); + + ShowVersionControls(aboutToolkitData.ShowVersionInformationButton); + + ShowThemeControls(aboutToolkitData.ShowThemeOptions); + + ShowBuildDateLabel(aboutToolkitData.ShowBuildDate); + + UpdateBuiltOnText(string.Empty); + + // ToDo: Figure out why this does not work + // UpdateBuiltOnText($@"{aboutToolkitData.BuildOnText}: {KryptonAboutBoxUtilities.AssemblyBuildDate(Assembly.LoadFile($@"{Application.ExecutablePath}\Krypton.Toolkit.dll"), false)}"); + + UpdateCurrentThemeText($@"{aboutToolkitData.CurrentThemeText}:"); + + ShowSystemInformationButton(aboutToolkitData.ShowSystemInformationButton); + + SwitchIcon(aboutToolkitData.ToolkitType); + + ConcatanateGeneralInformationText(aboutToolkitData.GeneralInformationWelcomeText, aboutToolkitData.GeneralInformationLicenseText, aboutToolkitData.GeneralInformationLearnMoreText); + + UpdateDiscordText(aboutToolkitData.DiscordText); + + UpdateRepositoriesText(aboutToolkitData.RepositoryInformationText); + + UpdateDemosText(aboutToolkitData.DownloadDemosText); + + UpdateDocumentationText(aboutToolkitData.DownloadDocumentationText); + + UpdateColumnHeadings(aboutToolkitData.FileNameColumnHeaderText, aboutToolkitData.VersionColumnHeaderText); + + UpdateToolBarText(aboutToolkitData.ToolBarGeneralInformationText, aboutToolkitData.ToolBarDiscordText, aboutToolkitData.ToolBarDeveloperInformationText, aboutToolkitData.ToolBarVersionInformationText); + + UpdateGeneralInformationLinkArea(aboutToolkitData.LearnMoreLinkArea); + + UpdateDocumentationLinkArea(aboutToolkitData.DocumentationLinkArea); + + UpdateDiscordLinkArea(aboutToolkitData.DiscordLinkArea); + + UpdateDemosLinkArea(aboutToolkitData.DownloadDemosLinkArea); + + UpdateRepositoriesLinkArea(aboutToolkitData.RepositoryInformationLinkArea); + + GetReferenceAssemblyInformation(); + + #endregion + } + + private void UpdateShowToolkitButtonUI(bool showToolkitButton) + { + tssToolkitInformation.Visible = showToolkitButton; + + tsbtnToolkitInformation.Visible = showToolkitButton; + } + + private void UpdateCurrentThemeText(string value) => klblCurrentTheme.Text = value; + + private void UpdateToolBarText(string toolBarGeneralInformationText, string toolBarDiscordText, string toolBarDeveloperInformationText, string toolBarVersionInformationText) + { + tsbtnGeneralInformation.Text = toolBarGeneralInformationText; + + tsbtnDiscord.Text = toolBarDiscordText; + + tsbtnDeveloperInformation.Text = toolBarDeveloperInformationText; + + tsbtnVersions.Text = toolBarVersionInformationText; + } + + private void ShowBuildDateLabel(bool value) + { + klblBuiltOn.Visible = value; + + if (!value) + { + klblBuiltOn.Text = null; + } + } + + private void ShowDeveloperControls(bool value) + { + tssDeveloperInformation.Visible = value; + + tsbtnDeveloperInformation.Visible = value; + } + + private void ShowDiscordControls(bool value) + { + tssDiscord.Visible = value; + + tsbtnDiscord.Visible = value; + } + + private void ShowVersionControls(bool value) + { + tsbtnVersions.Visible = value; + + tssVersions.Visible = value; + } + + private void ShowThemeControls(bool value) + { + klblCurrentTheme.Visible = value; + + ktcmbCurrentTheme.Visible = value; + + SetLogoSpan(value); + } + + private void SwitchIcon(ToolkitType value) + { + switch (value) + { + case ToolkitType.Canary: + pbxLogo.Image = ToolkitLogoImageResources.Krypton_Canary; + break; + case ToolkitType.Nightly: + pbxLogo.Image = ToolkitLogoImageResources.Krypton_Nightly; + break; + case ToolkitType.Stable: + pbxLogo.Image = ToolkitLogoImageResources.Krypton_Stable; + break; + default: + throw new ArgumentOutOfRangeException(nameof(value), value, null); + } + } + + private void UpdateBuiltOnText(string value) => klblBuiltOn.Text = value; + + private void ConcatanateGeneralInformationText(string welcomeText, string licenseText, string learnMoreText) + { + // Note: Do not use verbatim string! + string output = $"{welcomeText}\r\n\r\n{licenseText}: BSD-3-Clause\r\n\r\n{learnMoreText}"; + + klwlblGeneralInformation.Text = output; + } + + private void UpdateDiscordText(string value) => klwlblDiscord.Text = value; + + private void UpdateRepositoriesText(string value) => klwlblRepositories.Text = value; + + private void UpdateDocumentationText(string value) => klwlblDocumentation.Text = value; + + private void UpdateDemosText(string value) => klwlblDemos.Text = value; + + private void UpdateColumnHeadings(string fileName, string version) + { + kdgvVersions.Columns[0].HeaderText = fileName; + + kdgvVersions.Columns[1].HeaderText = version; + } + + private void UpdateGeneralInformationLinkArea(LinkArea linkArea) => klwlblGeneralInformation.LinkArea = linkArea; + + private void UpdateDiscordLinkArea(LinkArea linkArea) => klwlblDiscord.LinkArea = linkArea; + + private void UpdateRepositoriesLinkArea(LinkArea linkArea) => klwlblRepositories.LinkArea = linkArea; + + private void UpdateDemosLinkArea(LinkArea linkArea) => klwlblDemos.LinkArea = linkArea; + + private void UpdateDocumentationLinkArea(LinkArea linkArea) => klwlblDocumentation.LinkArea = linkArea; + + private void SetLogoSpan(bool value) + { + if (value) + { + tlpGeneralInformation.SetRowSpan(pbxLogo, 3); + } + else + { + klblCurrentTheme.Text = null; + + ktcmbCurrentTheme.Visible = false; + + tlpGeneralInformation.SetRowSpan(pbxLogo, 1); + } + } + + private void SwitchToolkitInformationPage(AboutToolkitPage page) + { + switch (page) + { + case AboutToolkitPage.GeneralInformation: + kpnlToolkitGeneralInformation.Visible = true; + + kpnlDiscord.Visible = false; + + kpnlDeveloperInformation.Visible = false; + + kpnlVersions.Visible = false; + + tsbtnToolkitGeneralInformation.Checked = true; + + tsbtnDiscord.Checked = false; + + tsbtnDeveloperInformation.Checked = false; + + tsbtnVersions.Checked = false; + break; + case AboutToolkitPage.Discord: + kpnlToolkitGeneralInformation.Visible = false; + + kpnlDiscord.Visible = true; + + kpnlDeveloperInformation.Visible = false; + + kpnlVersions.Visible = false; + + tsbtnToolkitGeneralInformation.Checked = false; + + tsbtnDiscord.Checked = true; + + tsbtnDeveloperInformation.Checked = false; + + tsbtnVersions.Checked = false; + break; + case AboutToolkitPage.DeveloperInformation: + kpnlToolkitGeneralInformation.Visible = false; + + kpnlDiscord.Visible = false; + + kpnlDeveloperInformation.Visible = true; + + kpnlVersions.Visible = false; + + tsbtnToolkitGeneralInformation.Checked = false; + + tsbtnDiscord.Checked = false; + + tsbtnDeveloperInformation.Checked = true; + + tsbtnVersions.Checked = false; + break; + case AboutToolkitPage.Versions: + kpnlToolkitGeneralInformation.Visible = false; + + kpnlDiscord.Visible = false; + + kpnlDeveloperInformation.Visible = false; + + kpnlVersions.Visible = true; + + tsbtnToolkitGeneralInformation.Checked = false; + + tsbtnDiscord.Checked = false; + + tsbtnDeveloperInformation.Checked = false; + + tsbtnVersions.Checked = true; + break; + default: + throw new ArgumentOutOfRangeException(nameof(page), page, null); + } + } + + private void GetReferenceAssemblyInformation() + { + // Get the current assembly + Assembly currentAssembly = Assembly.GetExecutingAssembly(); + + // Place reference assemblies into an array + // Note: Can we use `FileVersionInfo`? + AssemblyName[] satelliteAssemblies = currentAssembly.GetReferencedAssemblies(); + + foreach (AssemblyName assembly in satelliteAssemblies) + { + //FileVersionInfo fileInfo = FileVersionInfo.GetVersionInfo(file); + + // Fill data grid view + kdgvVersions.Rows.Add(assembly.Name!, assembly.Version!.ToString()); + } + } + + private void ShowSystemInformationButton(bool? value) => kbtnSystemInformation.Visible = value ?? true; + + private void tsbtnToolkitInformation_Click(object sender, EventArgs e) => SwitchAboutBoxPage(AboutBoxPage.ToolkitInformation); + + private void tsbtnToolkitGeneralInformation_Click(object sender, EventArgs e) => SwitchToolkitInformationPage(AboutToolkitPage.GeneralInformation); + + private void tsbtnDiscord_Click(object sender, EventArgs e) => SwitchToolkitInformationPage(AboutToolkitPage.Discord); + + private void tsbtnDeveloperInformation_Click(object sender, EventArgs e) => SwitchToolkitInformationPage(AboutToolkitPage.DeveloperInformation); + + private void tsbtnVersions_Click(object sender, EventArgs e) => SwitchToolkitInformationPage(AboutToolkitPage.Versions); + + private void klwlblGeneralInformation_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => GlobalToolkitUtilities.LaunchProcess(@"https://github.com/Krypton-Suite/Standard-Toolkit"); + + private void klwlblDiscord_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => GlobalToolkitUtilities.LaunchProcess(@"https://discord.gg/CRjF6fY"); + + private void klwlblRepositories_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => GlobalToolkitUtilities.LaunchProcess(@"https://github.com/orgs/Krypton-Suite/repositories"); + + private void klwlblDocumentation_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => GlobalToolkitUtilities.LaunchProcess(@"https://github.com/Krypton-Suite/Help-Files/releases"); + + private void klwlblDemos_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) => GlobalToolkitUtilities.LaunchProcess(@"https://github.com/Krypton-Suite/Standard-Toolkit-Demos/releases"); + + #endregion + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.resx new file mode 100644 index 000000000..0d38a1f39 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualAboutBoxForm.resx @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + 107, 17 + + + True + + + True + + + 251, 17 + + + 17, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualBlur.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualBlur.cs index 8d0c88796..4d7b1c8ac 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualBlur.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualBlur.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControl.cs index bac04ffe0..7377d14cf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,7 +17,7 @@ namespace Krypton.Toolkit /// [ToolboxItem(false)] [DesignerCategory(@"code")] - public abstract class VisualContainerControl : VisualContainerControlBase, + public abstract class VisualContainerControl : VisualContainerControlBase, ISupportInitializeNotification { #region Events diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControlBase.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControlBase.cs index e06ea6b51..1b59e4edd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControlBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContainerControlBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -149,12 +149,12 @@ protected override void Dispose(bool disposing) SystemEvents.UserPreferenceChanged -= OnUserPreferenceChanged; // Dispose of view manager related resources - ViewManager.Dispose(); + ViewManager?.Dispose(); _palette = null; - Renderer = null; + Renderer = null!; _localPalette = null; - Redirector.Target = null; + Redirector.Target = null!; } base.Dispose(disposing); @@ -255,7 +255,7 @@ public void CheckPerformLayout(bool viewLayout) _layoutDirty = false; // Ask the view to perform a layout - ViewManager.Layout(Renderer); + ViewManager?.Layout(Renderer); } while (_layoutDirty && (max-- > 0)); } @@ -326,7 +326,7 @@ public PaletteBase? Palette if (_localPalette != value) { // Remember the starting palette - PaletteBase old = _localPalette; + PaletteBase? old = _localPalette; // Use the provided palette value SetPalette(value); @@ -372,7 +372,7 @@ public PaletteBase? Palette [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IRenderer? Renderer + public IRenderer Renderer { [DebuggerStepThrough] get; @@ -384,7 +384,7 @@ public IRenderer? Renderer /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] - public ToolStripRenderer CreateToolStripRenderer() => Renderer.RenderToolStrip(GetResolvedPalette()); + public ToolStripRenderer? CreateToolStripRenderer() => Renderer.RenderToolStrip(GetResolvedPalette()); /// /// Gets or sets the background image displayed in the control. @@ -420,7 +420,7 @@ public override ImageLayout BackgroundImageLayout /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public PaletteBase? GetResolvedPalette() => _palette; + public PaletteBase GetResolvedPalette() => _palette!; /// /// Gets and sets the dirty palette counter. @@ -437,7 +437,7 @@ public override ImageLayout BackgroundImageLayout /// Reset the internal counters. /// [EditorBrowsable(EditorBrowsableState.Never)] - public void KryptonResetCounters() => ViewManager.ResetCounters(); + public void KryptonResetCounters() => ViewManager?.ResetCounters(); /// /// Gets the number of layout cycles performed since last reset. @@ -445,7 +445,7 @@ public override ImageLayout BackgroundImageLayout [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int KryptonLayoutCounter => ViewManager.LayoutCounter; + public int KryptonLayoutCounter => ViewManager!.LayoutCounter; /// /// Gets the number of paint cycles performed since last reset. @@ -453,7 +453,7 @@ public override ImageLayout BackgroundImageLayout [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int KryptonPaintCounter => ViewManager.PaintCounter; + public int KryptonPaintCounter => ViewManager!.PaintCounter; #endregion @@ -471,7 +471,7 @@ protected ViewManager? ViewManager /// /// Gets access to the palette redirector. /// - protected PaletteRedirect? Redirector + protected PaletteRedirect Redirector { [DebuggerStepThrough] get; @@ -500,7 +500,7 @@ protected bool ForceViewLayout() if (ViewManager != null) { // Ask the view to perform a layout - ViewManager.Layout(Renderer); + ViewManager?.Layout(Renderer); return true; } @@ -575,7 +575,7 @@ protected bool CanProcessMnemonic() } // Move up one level - c = c.Parent; + c = c.Parent!; } // Evert control in chain is visible and enabled, so allow mnemonics @@ -609,7 +609,7 @@ protected virtual bool EvalTransparentPaint() => /// Source of notification. /// An EventArgs containing event data. /// - protected virtual void OnButtonSpecChanged(object sender, [DisallowNull] EventArgs e) + protected virtual void OnButtonSpecChanged(object? sender, [DisallowNull] EventArgs e) { Debug.Assert(e != null); @@ -627,7 +627,10 @@ protected virtual void OnButtonSpecChanged(object sender, [DisallowNull] EventAr protected virtual void OnPaletteChanged(EventArgs e) { // Update the redirector with latest palette - Redirector.Target = _palette; + if (Redirector != null) + { + Redirector.Target = _palette!; + } // Need to recalculate anything relying on the palette DirtyPaletteCounter++; @@ -643,7 +646,7 @@ protected virtual void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected virtual void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected virtual void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { // Need to recalculate anything relying on the palette DirtyPaletteCounter++; @@ -707,7 +710,7 @@ protected virtual void OnNeedPaint(object? sender, [DisallowNull] NeedLayoutEven /// Create the redirector instance. /// /// PaletteRedirect derived class. - protected virtual PaletteRedirect? CreateRedirector() => new PaletteRedirect(_palette); + protected virtual PaletteRedirect CreateRedirector() => new PaletteRedirect(_palette!); // ReSharper restore VirtualMemberNeverOverridden.Global #endregion @@ -721,7 +724,7 @@ protected override void OnRightToLeftChanged(EventArgs e) // Need to recalculate anything relying on the palette DirtyPaletteCounter++; - // Need relayout to reflect change of layout + // Need re-layout to reflect change of layout OnNeedPaint(null, new NeedLayoutEventArgs(true)); base.OnRightToLeftChanged(e); @@ -748,7 +751,7 @@ protected override void OnLayout(LayoutEventArgs levent) _layoutDirty = false; // Ask the view to perform a layout - ViewManager.Layout(Renderer); + ViewManager?.Layout(Renderer); } while (_layoutDirty && (max-- > 0)); } @@ -762,7 +765,7 @@ protected override void OnLayout(LayoutEventArgs levent) /// Raises the Paint event. /// /// A PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { // Cannot process a message for a disposed control if (!IsDisposed && !Disposing) @@ -795,7 +798,7 @@ protected override void OnPaint(PaintEventArgs e) // Ask the view to repaint the visual structure if (!IsDisposed && !Disposing) { - ViewManager.Paint(Renderer, e); + ViewManager?.Paint(Renderer, e); } // Request for a refresh has been serviced @@ -980,7 +983,7 @@ protected override void OnLostFocus(EventArgs e) /// /// Source of the event. /// An EventArgs that contains the event data. - protected virtual void OnGlobalPaletteChanged(object sender, EventArgs e) + protected virtual void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) @@ -988,7 +991,7 @@ protected virtual void OnGlobalPaletteChanged(object sender, EventArgs e) // Update ourself with the new global palette _localPalette = null; SetPalette(KryptonManager.CurrentGlobalPalette); - Redirector.Target = _palette; + Redirector.Target = _palette!; // Need to recalculate anything relying on the palette DirtyPaletteCounter++; @@ -1049,7 +1052,7 @@ protected override void WndProc(ref Message m) if (ClientRectangle.Contains(mousePt)) { // Show the context menu - KryptonContextMenu.Show(this, PointToScreen(mousePt)); + KryptonContextMenu?.Show(this, PointToScreen(mousePt)); // We eat the message! return; @@ -1089,7 +1092,7 @@ private void SetPalette(PaletteBase? palette) _palette = palette; // Get the renderer associated with the palette - Renderer = _palette.GetRenderer(); + Renderer = _palette?.GetRenderer()!; // Hook to new palette events if (_palette != null) @@ -1102,14 +1105,14 @@ private void SetPalette(PaletteBase? palette) } } - private void OnBaseChanged(object sender, EventArgs e) => + private void OnBaseChanged(object? sender, EventArgs e) => // Change in base renderer or base palette require we fetch the latest renderer - Renderer = _palette.GetRenderer(); + Renderer = _palette?.GetRenderer()!; - private void PaintTransparentBackground(PaintEventArgs e) + private void PaintTransparentBackground(PaintEventArgs? e) { // Get the parent control for transparent drawing purposes - Control parent = TransparentParent; + Control? parent = TransparentParent; // Do we have a parent control and we need to paint background? if ((parent != null) && NeedTransparentPaint) @@ -1121,16 +1124,16 @@ private void PaintTransparentBackground(PaintEventArgs e) _miPTB = typeof(Control).GetMethod(nameof(PaintTransparentBackground), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, CallingConventions.HasThis, - new[] { typeof(PaintEventArgs), typeof(Rectangle), typeof(Region) }, - null); + [typeof(PaintEventArgs), typeof(Rectangle), typeof(Region)], + null)!; } - _miPTB.Invoke(this, new object[] { e, ClientRectangle, null }); + _miPTB.Invoke(this, [e!, ClientRectangle, null!]); } else { // Request the background be painted in the system colors - PaintBackground(e.Graphics, SystemBrushes.Control, ClientRectangle); + PaintBackground(e?.Graphics!, SystemBrushes.Control, ClientRectangle); } } @@ -1169,22 +1172,22 @@ private void OnPerformLayout() BeginInvoke(_refreshCall); } - private void OnContextMenuStripOpening(object sender, CancelEventArgs e) + private void OnContextMenuStripOpening(object? sender, CancelEventArgs e) { // Get the actual strip instance - ContextMenuStrip cms = base.ContextMenuStrip; + ContextMenuStrip? cms = base.ContextMenuStrip; // Make sure it has the correct renderer - cms.Renderer = CreateToolStripRenderer(); + cms!.Renderer = CreateToolStripRenderer(); } - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => + private void OnKryptonContextMenuDisposed(object? sender, EventArgs e) => // When the current krypton context menu is disposed, we should remove // it to prevent it being used again, as that would just throw an exception // because it has been disposed. KryptonContextMenu = null; - private void OnContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); + private void OnContextMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenu.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenu.cs index 229f5f1f0..009f66598 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenu.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -72,7 +72,7 @@ public VisualContextMenu(IContextMenuProvider provider, public VisualContextMenu(KryptonContextMenu contextMenu, PaletteBase? palette, PaletteMode paletteMode, - PaletteRedirect? redirector, + PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, KryptonContextMenuCollection items, bool enabled, @@ -92,8 +92,8 @@ public VisualContextMenu(KryptonContextMenu contextMenu, _viewColumns = new ViewLayoutStack(true); // Create provider instance - _provider = new ContextMenuProvider(contextMenu, (ViewContextMenuManager)ViewManager, _viewColumns, - palette, paletteMode, redirector, redirectorImages, + _provider = new ContextMenuProvider(contextMenu, (ViewContextMenuManager)ViewManager, _viewColumns, + palette!, paletteMode, redirector, redirectorImages, NeedPaintDelegate, enabled); _provider.Closing += OnProviderClosing; @@ -227,7 +227,7 @@ public void Show(Rectangle screenRect, { // Then switch to positioning before horz = KryptonContextMenuPositionH.Before; - screenPt.X = screenRect.Left - preferredSize.Width; + screenPt.X = screenRect.Left - preferredSize.Width; } } @@ -332,7 +332,7 @@ public KryptonContextMenuPositionV ShowVert /// /// Gets access to the view manager for the context menu. /// - public ViewContextMenuManager ViewContextMenuManager => (ViewContextMenuManager)ViewManager; + public ViewContextMenuManager? ViewContextMenuManager => ViewManager as ViewContextMenuManager; /// /// Should a mouse down at the provided point cause it to become the current tracking popup. @@ -342,7 +342,7 @@ public KryptonContextMenuPositionV ShowVert /// True to become current; otherwise false. public override bool DoesStackedClientMouseDownBecomeCurrent(Message m, Point pt) => // Ask the manager if the mouse down should make the stacked menu the current one - ViewContextMenuManager.DoesStackedClientMouseDownBecomeCurrent(m, pt); + ViewContextMenuManager!.DoesStackedClientMouseDownBecomeCurrent(m, pt); #endregion @@ -350,7 +350,7 @@ public override bool DoesStackedClientMouseDownBecomeCurrent(Message m, Point pt /// /// Gets access to the palette redirector. /// - protected PaletteRedirect? Redirector + protected PaletteRedirect Redirector { [DebuggerStepThrough] get; @@ -369,7 +369,7 @@ protected override void OnKeyDown(KeyEventArgs e) if (e.KeyData == Keys.Escape) { // Using the escape key should give a close reason of keyboard - _provider.ProviderCloseReason = ToolStripDropDownCloseReason.Keyboard; + _provider.ProviderCloseReason = ToolStripDropDownCloseReason.Keyboard; } } @@ -388,6 +388,8 @@ protected override void OnLayout(LayoutEventArgs levent) // Need a render context for accessing the renderer using var context = new RenderContext(this, null, ClientRectangle, Renderer); + using var gh = new GraphicsHint(context.Graphics, + _provider.ProviderStateCommon.ControlOuter.Border.GetBorderGraphicsHint(PaletteState.Normal)); // Grab a path that is the outside edge of the border Rectangle borderRect = ClientRectangle; GraphicsPath borderPath1 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _provider.ProviderStateCommon.ControlOuter.Border, VisualOrientation.Top, PaletteState.Normal); @@ -408,7 +410,7 @@ protected override void OnLayout(LayoutEventArgs levent) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected virtual void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) => + protected virtual void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) => // Need to recalculate anything relying on the palette OnNeedPaint(sender, e); @@ -441,8 +443,8 @@ private void Construct(KryptonContextMenuCollection items, { { layoutDocker, ViewDockStyle.Fill } }; - _drawDocker.KeyController = new ContextMenuController((ViewContextMenuManager)ViewManager); - ViewManager.Root = _drawDocker; + _drawDocker.KeyController = new ContextMenuController(ViewManager as ViewContextMenuManager); + ViewManager!.Root = _drawDocker; // With keyboard activate we select the first valid item if (keyboardActivated) @@ -460,7 +462,7 @@ private Size CalculatePreferredSize() { // Find the preferred size which fits exactly the calculated contents size using var context = new ViewLayoutContext(this, Renderer); - return ViewManager.Root.GetPreferredSize(context); + return ViewManager!.Root.GetPreferredSize(context); } finally { @@ -469,12 +471,12 @@ private Size CalculatePreferredSize() } } - private void SetPalette(PaletteBase? palette) + private void SetPalette(PaletteBase palette) { if (palette != _palette) { // Unhook from current palette events - if (_palette != null) + if (_palette is not null) { _palette.PalettePaint -= OnPaletteNeedPaint; _palette.BasePaletteChanged -= OnBaseChanged; @@ -500,21 +502,21 @@ private void SetPalette(PaletteBase? palette) } } - private void OnBaseChanged(object sender, EventArgs e) => + private void OnBaseChanged(object? sender, EventArgs e) => // Change in base renderer or base palette require we fetch the latest renderer - Renderer = _palette.GetRenderer(); + Renderer = _palette!.GetRenderer(); - private void OnProviderClosing(object sender, CancelEventArgs e) => _contextMenu?.OnClosing(e); + private void OnProviderClosing(object? sender, CancelEventArgs e) => _contextMenu?.OnClosing(e); - private void OnProviderClose(object sender, CloseReasonEventArgs e) => _contextMenu?.Close(e.CloseReason); + private void OnProviderClose(object? sender, CloseReasonEventArgs e) => _contextMenu?.Close(e.CloseReason); - private void OnProviderClose(object sender, EventArgs e) + private void OnProviderClose(object? sender, EventArgs e) { // Unhook from event source - var provider = (ContextMenuProvider)sender; + var provider = sender as ContextMenuProvider; _provider.Dispose -= OnProviderClose; - // Kill this poup window + // Kill this pop-up window Dispose(); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenuDTP.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenuDTP.cs index 8c33d2870..175db85ff 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenuDTP.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualContextMenuDTP.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,13 +37,13 @@ public class VisualContextMenuDTP : VisualContextMenu public VisualContextMenuDTP(KryptonContextMenu contextMenu, PaletteBase? palette, PaletteMode paletteMode, - PaletteRedirect? redirector, + PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, KryptonContextMenuCollection items, bool enabled, bool keyboardActivated, Rectangle dropScreenRect) - : base(contextMenu, palette, paletteMode, redirector, redirectorImages, + : base(contextMenu, palette, paletteMode, redirector, redirectorImages, items, enabled, keyboardActivated) => _dropScreenRect = dropScreenRect; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControl.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControl.cs index 693f06e82..7231f4849 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,7 +17,7 @@ namespace Krypton.Toolkit /// [ToolboxItem(false)] [DesignerCategory(@"code")] - public abstract class VisualControl : VisualControlBase, + public abstract class VisualControl : VisualControlBase, ISupportInitializeNotification { #region Events diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlBase.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlBase.cs index a765e4d93..67624e183 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,7 @@ public abstract class VisualControlBase : Control, private bool _paintTransparent; private bool _evalTransparent; private bool _globalEvents; - private PaletteBase? _localPalette; + private KryptonCustomPaletteBase? _localCustomPalette; private PaletteBase? _palette; private PaletteMode _paletteMode; private readonly SimpleCall _refreshCall; @@ -108,7 +108,7 @@ protected VisualControlBase() DirtyPaletteCounter = 1; // Set the palette and renderer to the defaults as specified by the manager - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.CurrentGlobalPalette); _paletteMode = PaletteMode.Global; @@ -158,8 +158,8 @@ protected override void Dispose(bool disposing) ViewManager?.Dispose(); _palette = null; - Renderer = null; - _localPalette = null; + Renderer = null!; + _localCustomPalette = null; Redirector.Target = null; } @@ -200,7 +200,7 @@ public override ContextMenuStrip? ContextMenuStrip } /// - /// Gets and sets the KryptonContextMenu to show when right clicked. + /// Gets and sets the KryptonContextMenu to show when right-clicked. /// [Category(@"Behavior")] [Description(@"The KryptonContextMenu to show when the user right-clicks the Control.")] @@ -295,7 +295,7 @@ public PaletteMode PaletteMode _paletteMode = value; // Get a reference to the standard palette from its name - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.GetPaletteForMode(_paletteMode)); // Must raise event to change palette in redirector @@ -310,11 +310,7 @@ public PaletteMode PaletteMode } private bool ShouldSerializePaletteMode() => PaletteMode != PaletteMode.Global; - - /// - /// Resets the PaletteMode property to its default value. - /// - public void ResetPaletteMode() => PaletteMode = PaletteMode.Global; + private void ResetPaletteMode() => PaletteMode = PaletteMode.Global; /// /// Gets and sets the custom palette implementation. @@ -322,18 +318,18 @@ public PaletteMode PaletteMode [Category(@"Visuals")] [Description(@"Custom palette applied to drawing.")] [DefaultValue(null)] - public PaletteBase? Palette + public KryptonCustomPaletteBase? LocalCustomPalette { [DebuggerStepThrough] - get => _localPalette; + get => _localCustomPalette!; set { // Only interested in changes of value - if (_localPalette != value) + if (_localCustomPalette != value) { // Remember the starting palette - PaletteBase? old = _localPalette; + PaletteBase? old = _localCustomPalette; // Use the provided palette value SetPalette(value); @@ -345,18 +341,18 @@ public PaletteBase? Palette _paletteMode = PaletteMode.Global; // Get the appropriate palette for the global mode - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.GetPaletteForMode(_paletteMode)); } else { // No longer using a standard palette - _localPalette = value; + _localCustomPalette = value; _paletteMode = PaletteMode.Custom; } // If real change has occurred - if (old != _localPalette) + if (old != _localCustomPalette) { // Raise the change event OnPaletteChanged(EventArgs.Empty); @@ -371,7 +367,7 @@ public PaletteBase? Palette /// /// Resets the Palette property to its default value. /// - public void ResetPalette() => PaletteMode = PaletteMode.Global; + private void ResetLocalCustomPalette() => PaletteMode = PaletteMode.Global; /// /// Gets access to the current renderer. @@ -427,7 +423,7 @@ public override ImageLayout BackgroundImageLayout /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public PaletteBase? GetResolvedPalette() => _palette; + public PaletteBase GetResolvedPalette() => _palette!; /// /// Gets and sets the dirty palette counter. @@ -487,7 +483,7 @@ public void UnattachGlobalEvents() /// Reset the internal counters. /// [EditorBrowsable(EditorBrowsableState.Never)] - public void KryptonResetCounters() => ViewManager.ResetCounters(); + public void KryptonResetCounters() => ViewManager?.ResetCounters(); /// /// Gets the number of layout cycles performed since last reset. @@ -495,7 +491,7 @@ public void UnattachGlobalEvents() [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int KryptonLayoutCounter => ViewManager.LayoutCounter; + public int KryptonLayoutCounter => ViewManager!.LayoutCounter; /// /// Gets the number of paint cycles performed since last reset. @@ -503,14 +499,14 @@ public void UnattachGlobalEvents() [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int KryptonPaintCounter => ViewManager.PaintCounter; + public int KryptonPaintCounter => ViewManager!.PaintCounter; /// /// Gets the view associated with the provided client location. /// /// Point to lookup. /// ViewBase associated with the point. - public ViewBase? ViewFromPoint(Point pt) => ViewManager?.Root?.ViewFromPoint(pt); + public ViewBase? ViewFromPoint(Point pt) => ViewManager?.Root.ViewFromPoint(pt); #endregion @@ -518,8 +514,9 @@ public void UnattachGlobalEvents() /// /// Gets and sets the ViewManager instance. /// - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [EditorBrowsable(EditorBrowsableState.Never)] + [Browsable(false)] // Hides the property from the Property Grid in the Visual Studio designer + [EditorBrowsable(EditorBrowsableState.Never)] // Hides the property from IntelliSense and code completion. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] // Prevents the property from being serialized into the designer code. public ViewManager? ViewManager { [DebuggerStepThrough] @@ -617,7 +614,7 @@ protected bool NeedTransparentPaint /// True to allow; otherwise false. protected bool CanProcessMnemonic() { - Control c = this; + Control? c = this; // Test each control in parent chain while (c != null) @@ -663,7 +660,7 @@ protected virtual bool EvalTransparentPaint() => /// Source of notification. /// An EventArgs containing event data. /// - protected virtual void OnButtonSpecChanged(object sender, [DisallowNull] EventArgs e) + protected virtual void OnButtonSpecChanged(object? sender, [DisallowNull] EventArgs e) { Debug.Assert(e != null); @@ -687,7 +684,7 @@ protected virtual void OnPaletteChanged(EventArgs e) DirtyPaletteCounter++; // A new palette source means we need to layout and redraw - OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); + OnNeedPaint(LocalCustomPalette, new NeedLayoutEventArgs(true)); PaletteChanged?.Invoke(this, e); } @@ -697,7 +694,7 @@ protected virtual void OnPaletteChanged(EventArgs e) /// /// Source of notification. /// An NeedLayoutEventArgs containing event data. - protected virtual void OnPaletteNeedPaint(object sender, NeedLayoutEventArgs e) + protected virtual void OnPaletteNeedPaint(object? sender, NeedLayoutEventArgs e) { // Need to recalculate anything relying on the palette DirtyPaletteCounter++; @@ -834,7 +831,7 @@ protected override void OnLayout(LayoutEventArgs levent) /// Raises the Paint event. /// /// A PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { // Cannot process a message for a disposed control if (!IsDisposed && !Disposing) @@ -883,7 +880,7 @@ protected override void OnMouseEnter(EventArgs e) // Cannot process a message for a disposed control if (!IsDisposed && !Disposing) { - _toolTipManager.MouseEnter(ViewManager?.ActiveView ?? ViewManager?.Root, this); + _toolTipManager.MouseEnter(ViewManager?.ActiveView ?? ViewManager?.Root!, this); } // Let base class fire events @@ -899,7 +896,7 @@ protected override void OnMouseMove(MouseEventArgs e) // Cannot process a message for a disposed control if (!IsDisposed && !Disposing) { - _toolTipManager.MouseMove(ViewManager?.ActiveView ?? ViewManager?.Root, this, e.Location); + _toolTipManager.MouseMove(ViewManager?.ActiveView ?? ViewManager?.Root!, this, e.Location); // Do we have a manager for processing mouse messages? ViewManager?.MouseMove(e, e.Location); } @@ -917,7 +914,7 @@ protected override void OnMouseDown(MouseEventArgs e) // Cannot process a message for a disposed control if (!IsDisposed && !Disposing) { - _toolTipManager.MouseDown(ViewManager?.ActiveView ?? ViewManager?.Root, this, e.Location, e.Button); + _toolTipManager.MouseDown(ViewManager?.ActiveView ?? ViewManager?.Root!, this, e.Location, e.Button); // Do we have a manager for processing mouse messages? ViewManager?.MouseDown(e, e.Location); } @@ -935,7 +932,7 @@ protected override void OnMouseUp(MouseEventArgs e) // Cannot process a message for a disposed control if (!IsDisposed && !Disposing) { - _toolTipManager.MouseUp(ViewManager?.ActiveView ?? ViewManager?.Root, this, e.Location, e.Button); + _toolTipManager.MouseUp(ViewManager?.ActiveView ?? ViewManager?.Root!, this, e.Location, e.Button); // Do we have a manager for processing mouse messages? ViewManager?.MouseUp(e, e.Location); } @@ -1052,13 +1049,13 @@ protected override void OnLostFocus(EventArgs e) /// /// Source of the event. /// An EventArgs that contains the event data. - protected virtual void OnGlobalPaletteChanged(object sender, EventArgs e) + protected virtual void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) { // Update self with the new global palette - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.CurrentGlobalPalette); Redirector.Target = _palette; @@ -1066,7 +1063,7 @@ protected virtual void OnGlobalPaletteChanged(object sender, EventArgs e) DirtyPaletteCounter++; // A new palette source means we need to layout and redraw - OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); + OnNeedPaint(LocalCustomPalette, new NeedLayoutEventArgs(true)); // Must raise event to change palette in redirector OnPaletteChanged(EventArgs.Empty); @@ -1191,11 +1188,11 @@ private void SetPalette(PaletteBase? palette) } } - private void OnBaseChanged(object sender, EventArgs e) => + private void OnBaseChanged(object? sender, EventArgs e) => // Change in base renderer or base palette require we fetch the latest renderer - Renderer = _palette.GetRenderer(); + Renderer = _palette?.GetRenderer()!; - private void PaintTransparentBackground(PaintEventArgs e) + private void PaintTransparentBackground(PaintEventArgs? e) { // Get the parent control for transparent drawing purposes Control? parent = TransparentParent; @@ -1204,22 +1201,22 @@ private void PaintTransparentBackground(PaintEventArgs e) if ((parent != null) && NeedTransparentPaint) { // Only grab the required reference once - if (_miPTB == null) + if (_miPTB == null!) { // Use reflection so we can call the Windows Forms internal method for painting parent background _miPTB = typeof(Control).GetMethod(nameof(PaintTransparentBackground), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, CallingConventions.HasThis, - new[] { typeof(PaintEventArgs), typeof(Rectangle), typeof(Region) }, - null); + [typeof(PaintEventArgs), typeof(Rectangle), typeof(Region)], + null)!; } - _miPTB.Invoke(this, new object[] { e, ClientRectangle, null }); + _miPTB.Invoke(this, [e!, ClientRectangle, null!]); } else { // Request the background be painted in the system colors - PaintBackground(e.Graphics, SystemBrushes.Control, ClientRectangle); + PaintBackground(e!.Graphics, SystemBrushes.Control, ClientRectangle); } } @@ -1234,7 +1231,7 @@ private void OnPerformRefresh() // If the layout is still dirty after the refresh if (_layoutDirty) { - // Then non of the control is visible, so perform manual request + // Then none of the control is visible, so perform manual request // for a layout to ensure that child controls can be resized PerformLayout(); @@ -1250,7 +1247,7 @@ private void OnPerformRefresh() private void OnPerformLayout() { - // Then non of the control is visible, so perform manual request + // Then none of the control is visible, so perform manual request // for a layout to ensure that child controls can be resized PerformLayout(); @@ -1258,24 +1255,24 @@ private void OnPerformLayout() BeginInvoke(_refreshCall); } - private void OnContextMenuStripOpening(object sender, CancelEventArgs e) + private void OnContextMenuStripOpening(object? sender, CancelEventArgs e) { // Get the actual strip instance - ContextMenuStrip cms = base.ContextMenuStrip; + ContextMenuStrip? cms = base.ContextMenuStrip; // Make sure it has the correct renderer - cms.Renderer = CreateToolStripRenderer(); + cms!.Renderer = CreateToolStripRenderer(); } - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => + private void OnKryptonContextMenuDisposed(object? sender, EventArgs e) => // When the current krypton context menu is disposed, we should remove // it to prevent it being used again, as that would just throw an exception // because it has been disposed. KryptonContextMenu = null; - private void OnContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); + private void OnContextMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed) { @@ -1310,20 +1307,21 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip visualBasePopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; - // Not showing a popup page any more + // Not showing a popup page anymore visualBasePopupToolTip = null; } + /// protected override void OnHandleCreated(EventArgs e) { PI.SetWindowTheme(Handle, @"DarkMode_Explorer", null); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlContainment.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlContainment.cs index 25b318cbf..c818dd96d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlContainment.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualControlContainment.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualForm.cs index 8a0a1797b..6b52f4f00 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualForm.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,10 +24,10 @@ public abstract class VisualForm : Form, IKryptonDebug { #region Static Fields - - private const int DEFAULT_COMPOSITION_HEIGHT = 30; private static readonly bool _themedApp; - private readonly PaletteDoubleRedirect _stateCommon; + + // To avoid lag when Acrylic is in use + public const int WS_EX_NOREDIRECTIONBITMAP = 0x00200000; #endregion @@ -35,23 +35,19 @@ public abstract class VisualForm : Form, private bool _activated; private bool _windowActive; private bool _trackingMouse; - private bool _applyCustomChrome; - private bool _allowComposition; - private bool _insideUpdateComposition; + private bool _useThemeFormChromeBorderWidth; private bool _captured; private bool _disposing; - private int _compositionHeight; private int _ignoreCount; - private ViewBase? _capturedElement; - private PaletteBase? _localPalette; - private PaletteBase? _palette; + private KryptonCustomPaletteBase? _localCustomPalette; + private PaletteBase _palette; private PaletteMode _paletteMode; private readonly IntPtr _screenDC; private ShadowValues _shadowValues; private ShadowManager _shadowManager; private BlurValues _blurValues; private BlurManager _blurManager; - private readonly object lockObject = new object(); + private readonly object lockObject = new(); #endregion #region Events @@ -67,7 +63,7 @@ public abstract class VisualForm : Form, /// [Browsable(false)] // SKC: Probably a special case for not exposing this event in the designer.... [EditorBrowsable(EditorBrowsableState.Never)] - public event EventHandler? ApplyCustomChromeChanged; + public event EventHandler? ApplyUseThemeFormChromeBorderWidthChanged; /// /// Occurs when the active window setting changes. @@ -101,7 +97,7 @@ static VisualForm() /// /// Initialize a new instance of the VisualForm class. /// - public VisualForm() + protected VisualForm() { InitializeComponent(); @@ -115,23 +111,16 @@ public VisualForm() NeedPaintDelegate = OnNeedPaint; // Set the palette and renderer to the defaults as specified by the manager - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.CurrentGlobalPalette); _paletteMode = PaletteMode.Global; // We need to layout the view NeedLayout = true; - // Default the composition height - _compositionHeight = DEFAULT_COMPOSITION_HEIGHT; - CloseBox = true; - // Create constant target for resolving palette delegates Redirector = CreateRedirector(); - _stateCommon = new PaletteDoubleRedirect(Redirector, PaletteBackStyle.ButtonCustom1, - PaletteBorderStyle.ButtonCustom1, NeedPaintDelegate); - // Hook into global static events KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; SystemEvents.UserPreferenceChanged += OnUserPreferenceChanged; @@ -146,7 +135,6 @@ public VisualForm() UpdateDpiFactors(); } - /// /// Releases all resources used by the Control. /// @@ -158,13 +146,14 @@ protected override void Dispose(bool disposing) if (disposing) { // Must unhook from the palette paint events - if (_palette != null) + if (_palette != null!) { _palette.PalettePaint -= OnNeedPaint; _palette.ButtonSpecChanged -= OnButtonSpecChanged; - _palette.AllowFormChromeChanged -= OnAllowFormChromeChanged; + _palette.UseThemeFormChromeBorderWidthChanged -= OnUseThemeFormChromeBorderWidthChanged; _palette.BasePaletteChanged -= OnBaseChanged; _palette.BaseRendererChanged -= OnBaseChanged; + _palette = null!; } // Unhook from global static events @@ -185,6 +174,12 @@ protected override void Dispose(bool disposing) #region Public + /*public AcrylicValues AcrylicValues { get; } = new AcrylicValues(); + + private void ResetAcrylicValues() => AcrylicValues.Reset(); + + private bool ShouldSerializeAcrylicValues() => !AcrylicValues.IsDefault;*/ + /// /// Gets the DpiX of the view. /// @@ -217,51 +212,39 @@ public float FactorDpiY [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool ApplyCustomChrome + internal bool UseThemeFormChromeBorderWidth { [DebuggerStepThrough] - get => _applyCustomChrome; + get => _useThemeFormChromeBorderWidth; - internal set + set { // Only interested in changed values - if (_applyCustomChrome != value) + if (_useThemeFormChromeBorderWidth != value) { // Cache old setting - var oldApplyCustomChrome = _applyCustomChrome; + var oldUseThemeFormChromeBorderWidth = _useThemeFormChromeBorderWidth; // Store the new setting - _applyCustomChrome = value; + _useThemeFormChromeBorderWidth = value; // If we need custom chrome drawing... - if (_applyCustomChrome) + if (_useThemeFormChromeBorderWidth) { try { // Set back to false in case we decide that the operating system // is not capable of supporting our custom chrome implementation - _applyCustomChrome = false; + _useThemeFormChromeBorderWidth = false; // Only need to remove the window theme, if there is one if (PI.IsAppThemed() && PI.IsThemeActive()) { // Assume that we can apply custom chrome - _applyCustomChrome = true; + _useThemeFormChromeBorderWidth = true; - // Retest if composition should be applied - UpdateComposition(); - - // When using composition we do not remove the theme - if (!ApplyComposition) - { - // Remove any theme that is currently drawing chrome - PI.SetWindowTheme(Handle, string.Empty, string.Empty); - } - else - { - // Force a WM_NCCALCSIZE to update for composition - PI.SetWindowTheme(Handle, null, null); - } + // Remove any theme that is currently drawing chrome + PI.SetWindowTheme(Handle, string.Empty, string.Empty); // Call virtual method for initializing own chrome WindowChromeStart(); @@ -270,16 +253,13 @@ internal set catch { // Failed and so cannot provide custom chrome - _applyCustomChrome = false; + _useThemeFormChromeBorderWidth = false; } } else { try { - // Retest if composition should be applied - UpdateComposition(); - // Restore the application to previous theme setting PI.SetWindowTheme(Handle, null, null); @@ -293,10 +273,10 @@ internal set } // Raise event to notify a change in setting - if (_applyCustomChrome != oldApplyCustomChrome) + if (_useThemeFormChromeBorderWidth != oldUseThemeFormChromeBorderWidth) { // Generate change event - OnApplyCustomChromeChanged(EventArgs.Empty); + OnApplyUseThemeFormChromeBorderWidthChanged(EventArgs.Empty); } } } @@ -307,56 +287,9 @@ internal set /// to display a Close button for the form; otherwise, . The default is . [Category("Window Style")] [DefaultValue(true)] - [Description("Form Close Button Visiblity: This will also Hide the System Menu `Close` and disable the `Alt+F4` action")] - public bool CloseBox { [DebuggerStepThrough] get; set; } - - /// - /// Gets a value indicating if composition is being applied. - /// - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool ApplyComposition { get; private set; } - - /// - /// Gets a value indicating if composition is allowed to be applied to custom chrome. - /// - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool AllowComposition - { - get => _allowComposition; - - set - { - if (_allowComposition != value) - { - _allowComposition = value; - - // If custom chrome is not enabled, then no need to make changes - if (ApplyCustomChrome) - { - UpdateComposition(); - } - } - } - } - - /// - /// used to update the size of the composition area. - /// - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - public void RecalculateComposition() => UpdateComposition(); - - /// - /// Gets and sets the interface to the composition interface cooperating with the form. - /// - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IKryptonComposition? Composition { get; set; } + [Description( + "Form Close Button Visiblity: This will also Hide the System Menu `Close` and disable the `Alt+F4` action")] + public bool CloseBox { [DebuggerStepThrough] get; set; } = true; /// /// Gets or sets the palette to be applied. @@ -384,7 +317,7 @@ public PaletteMode PaletteMode _paletteMode = value; // Get a reference to the standard palette from its name - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.GetPaletteForMode(_paletteMode)); // Must raise event to change palette in redirector @@ -398,12 +331,22 @@ public PaletteMode PaletteMode } } + private void ResetPaletteMode() => PaletteMode = PaletteMode.Global; + private bool ShouldSerializePaletteMode() => PaletteMode != PaletteMode.Global; - /// - /// Resets the PaletteMode property to its default value. - /// - public void ResetPaletteMode() => PaletteMode = PaletteMode.Global; + /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + /// Gets access to the fade values. + [Category(@"Visuals")] + [Description(@"Form fading.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public FadeValues FadeValues { get; } = new FadeValues(); + + private bool ShouldSerializeFadeValues() => !FadeValues.IsDefault; + + /// Resets the fade values. + private void ResetFadeValues() => FadeValues.Reset(); + */ /// /// Gets access to the button content. @@ -459,21 +402,18 @@ public BlurValues BlurValues [Category(@"Visuals")] [Description(@"Custom palette applied to drawing.")] [DefaultValue(null)] - public PaletteBase? Palette + public KryptonCustomPaletteBase? LocalCustomPalette { [DebuggerStepThrough] - get => _localPalette; + get => _localCustomPalette; set { // Only interested in changes of value - if (_localPalette != value) + if (_localCustomPalette != value) { // Remember the starting palette - PaletteBase? old = _localPalette; - - // Use the provided palette value - SetPalette(value); + PaletteBase? old = _localCustomPalette; // If no custom palette is required if (value == null) @@ -482,18 +422,20 @@ public PaletteBase? Palette _paletteMode = PaletteMode.Global; // Get the appropriate palette for the global mode - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.GetPaletteForMode(_paletteMode)); } else { // No longer using a standard palette - _localPalette = value; + _localCustomPalette = value; _paletteMode = PaletteMode.Custom; + // Use the provided palette value + SetPalette(value); } // If real change has occurred - if (old != _localPalette) + if (old != _localCustomPalette) { // Raise the change event OnPaletteChanged(EventArgs.Empty); @@ -508,7 +450,7 @@ public PaletteBase? Palette /// /// Resets the Palette property to its default value. /// - public void ResetPalette() => _localPalette = null; + public void ResetPalette() => _localCustomPalette = null; /// /// Gets access to the current renderer. @@ -516,7 +458,7 @@ public PaletteBase? Palette [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IRenderer? Renderer + public IRenderer Renderer { [DebuggerStepThrough] get; @@ -536,7 +478,7 @@ public IRenderer? Renderer /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public PaletteBase? GetResolvedPalette() => _palette; + public PaletteBase GetResolvedPalette() => _palette; /// /// Create a tool strip renderer appropriate for the current renderer/palette pair. @@ -569,7 +511,7 @@ internal void SendSysCommand(PI.SC_ sysCommand, IntPtr lParam) => [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Padding RealWindowBorders => CommonHelper.GetWindowBorders(CreateParams); + public Padding RealWindowBorders => CommonHelper.GetWindowBorders(CreateParams, this as KryptonForm); /// /// Gets a count of the number of paints that have occurred. @@ -620,7 +562,6 @@ public bool WindowActive } } - /// /// Request the non-client area be repainted. /// @@ -658,33 +599,13 @@ public void RecalcNonClient() } #endif - /// Gets or sets the tool bar manager. - /// The tool bar manager. - [AllowNull, DefaultValue(null), Category(@"Visuals"), Description(@"Gets or sets the tool bar manager.")] + /// Gets or sets the toolbar manager. + /// The toolbar manager. + [DefaultValue(null), Category(@"Visuals"), Description(@"Gets or sets the tool bar manager.")] public KryptonIntegratedToolBarManager? ToolBarManager { get; set; } #endregion - #region Public Chrome - /// - /// Perform layout on behalf of the composition element using our root element. - /// - /// Layout context. - /// Rectangle for composition element. - public virtual void WindowChromeCompositionLayout(ViewLayoutContext context, - Rectangle compRect) - { - } - - /// - /// Perform painting on behalf of the composition element using our root element. - /// - /// Rendering context. - public virtual void WindowChromeCompositionPaint(RenderContext context) - { - } - #endregion - #region Public IKryptonDebug /// /// Reset the internal counters. @@ -724,7 +645,7 @@ protected ViewManager? ViewManager /// /// Gets access to the palette redirector. /// - protected PaletteRedirect? Redirector + protected PaletteRedirect Redirector { [DebuggerStepThrough] get; @@ -751,7 +672,7 @@ protected Point ScreenToWindow(Point screenPt) // Now adjust to take into account the top and left borders Padding borders = RealWindowBorders; - clientPt.Offset(borders.Left, ApplyComposition ? 0 : borders.Top); + clientPt.Offset(borders.Left, borders.Top); return clientPt; } @@ -845,6 +766,19 @@ protected Rectangle RealWindowRectangle #endregion #region Protected Override + + //protected override CreateParams CreateParams + //{ + // get + // { + // CreateParams cp = base.CreateParams; + + // cp.ExStyle |= WS_EX_NOREDIRECTIONBITMAP; + + // return cp; + // } + //} + /// /// Raises the HandleCreated event. /// @@ -863,6 +797,11 @@ protected override void OnHandleCreated(EventArgs e) // } + //if (AcrylicValues.EnableAcrylic) + //{ + // WindowUtilities.EnableAcrylic(this, AcrylicValues.AcrylicColor); + //} + base.OnHandleCreated(e); } @@ -872,12 +811,9 @@ protected override void OnHandleCreated(EventArgs e) /// Target element for the capture events. protected void StartCapture(ViewBase element) { - // Capture mouse input so we notice the WM_LBUTTONUP when the mouse is released + // Capture mouse input, so we notice the WM_LBUTTONUP when the mouse is released Capture = true; _captured = true; - - // Remember the view element that wants the mouse input during capture - _capturedElement = element; } /// @@ -891,8 +827,7 @@ protected override void OnResize(EventArgs e) base.OnResize(e); - if (ApplyCustomChrome - && !((MdiParent != null) + if (!((MdiParent != null) && CommonHelper.IsFormMaximized(this)) ) { @@ -903,28 +838,6 @@ protected override void OnResize(EventArgs e) SuspendPaint(); } - /// - /// Performs the work of setting the specified bounds of this control. - /// - /// The new Left property value of the control. - /// The new Top property value of the control. - /// The new Width property value of the control. - /// The new Height property value of the control. - /// A bitwise combination of the BoundsSpecified values. - protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified) - { - var updatedHeight = height; - - // With the Aero glass appearance we need to reduce height by the top border, - // otherwise each time the window is maximized and restored it grows in size - if (ApplyComposition && (FormBorderStyle != FormBorderStyle.None)) - { - updatedHeight = height - RealWindowBorders.Top; - } - - base.SetBoundsCore(x, y, width, updatedHeight, specified); - } - /// /// Raises the Activated event. /// @@ -945,28 +858,6 @@ protected override void OnDeactivate(EventArgs e) base.OnDeactivate(e); } - /// - /// Raises the PaintBackground event. - /// - /// A PaintEventArgs containing event data. - protected override void OnPaintBackground(PaintEventArgs e) - { - // If drawing with custom chrome and composition - if (ApplyCustomChrome && ApplyComposition) - { - var compositionRect = new Rectangle(0, 0, Width, _compositionHeight); - - // Draw the extended area inside the client in black, this ensures - // it is treated as transparent by the desktop window manager - e.Graphics.FillRectangle(Brushes.Black, compositionRect); - - // Exclude the composition area from the rest of the background painting - e.Graphics.SetClip(compositionRect, CombineMode.Exclude); - } - - base.OnPaintBackground(e); - } - /// /// Raises the Shown event. /// @@ -983,11 +874,51 @@ protected override void OnShown(EventArgs e) base.OnShown(e); } - protected override void OnPaint(PaintEventArgs e) - { - base.OnPaint(e); - } - + //protected override void OnPaint(PaintEventArgs e) + //{ + // base.OnPaint(e); + //} + + ///// + //protected override void OnPaintBackground(PaintEventArgs e) + //{ + // if (AcrylicValues.EnableAcrylic) + // { + // e.Graphics.Clear(Color.Transparent); + // } + //} + + ///// + //protected override void OnLoad(EventArgs e) + //{ + // /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + // if (FadeValues.FadingEnabled) + // { + // #if NETCOREAPP3_0_OR_GREATER + // KryptonFormFadeController.ModernFadeFormIn(FadeValues.Owner ?? this, FadeValues.FadeDuration); + // #else + // KryptonFormFadeController.FadeIn(FadeValues.Owner ?? this, FadeValues.FadeSpeed); + // #endif + // } + // */ + // base.OnLoad(e); + //} + + ///// + //protected override void OnClosing(CancelEventArgs e) + //{ + // /* FadeValues disabled and moved to extended until proven stable. Further development in V100 + // if (FadeValues is { FadingEnabled: true, ShouldCloseOnFadeOut: true }) + // { + // #if NETCOREAPP3_0_OR_GREATER + // KryptonFormFadeController.ModernFadeFormOut(FadeValues.Owner ?? this, FadeValues.FadeDuration); + // #else + // KryptonFormFadeController.FadeOut(FadeValues.Owner ?? this, FadeValues.FadeSpeed); + // #endif + // } + // */ + // base.OnClosing(e); + //} #endregion #region Protected Virtual @@ -1013,7 +944,7 @@ protected override void OnPaint(PaintEventArgs e) /// /// Source of notification. /// An EventArgs containing event data. - protected virtual void OnButtonSpecChanged(object sender, EventArgs e) + protected virtual void OnButtonSpecChanged(object? sender, EventArgs e) { } @@ -1027,23 +958,23 @@ protected virtual void OnPaletteChanged(EventArgs e) Redirector.Target = _palette; // A new palette source means we need to layout and redraw - OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); + OnNeedPaint(LocalCustomPalette!, new NeedLayoutEventArgs(true)); PaletteChanged?.Invoke(this, e); } /// - /// Raises the ApplyCustomChrome event. + /// Raises the ApplyUseThemeFormChromeBorderWidth event. /// /// An EventArgs containing the event data. - protected virtual void OnApplyCustomChromeChanged(EventArgs e) => ApplyCustomChromeChanged?.Invoke(this, e); + protected virtual void OnApplyUseThemeFormChromeBorderWidthChanged(EventArgs e) => ApplyUseThemeFormChromeBorderWidthChanged?.Invoke(this, e); /// - /// Occurs when the AllowFormChromeChanged event is fired for the current palette. + /// Occurs when the UseThemeFormChromeBorderWidthChanged event is fired for the current palette. /// /// Source of the event. /// An EventArgs containing the event data. - protected virtual void OnAllowFormChromeChanged(object sender, EventArgs e) + protected virtual void OnUseThemeFormChromeBorderWidthChanged(object? sender, EventArgs e) { } @@ -1063,27 +994,13 @@ protected virtual void OnNeedPaint(object? sender, [DisallowNull] NeedLayoutEven throw new ArgumentNullException(nameof(e)); } - // Do nothing unless we are applying custom chrome - if (ApplyCustomChrome) + // Do we need to recalc the border size as well as invalidate? + if (e.NeedLayout) { - // If using composition drawing - if (ApplyComposition - && Composition != null) - { - // Ask the composition element top handle need paint event - Composition.CompNeedPaint(e.NeedLayout); - } - else - { - // Do we need to recalc the border size as well as invalidate? - if (e.NeedLayout) - { - NeedLayout = true; - } - - InvalidateNonClient(); - } + NeedLayout = true; } + + InvalidateNonClient(); } /// @@ -1094,13 +1011,8 @@ protected override void WndProc(ref Message m) { var processed = false; - // We do not process the message if on an MDI child, because doing so prevents the - // LayoutMdi call on the parent from working and cascading/tiling the children - //if ((m.Msg == (int)PI.WM_NCCALCSIZE) && _themedApp && - // ((MdiParent == null) || ApplyCustomChrome)) if (!CommonHelper.IsFormMaximized(this) && _themedApp - && ((MdiParent == null) || ApplyCustomChrome) ) { switch (m.Msg) @@ -1110,42 +1022,44 @@ protected override void WndProc(ref Message m) break; case PI.WM_.GETMINMAXINFO: OnWM_GETMINMAXINFO(ref m); - /* Setting handled to false enables the application to process it's own Min/Max requirements, - * as mentioned by jason.bullard (comment from September 22, 2011) on http://gallery.expression.microsoft.com/ZuneWindowBehavior/ */ + /* Setting handled to false enables the application to process its own Min/Max requirements, + * as mentioned by jason.bullard (comment from September 22, 2011) on http://gallery.expression.microsoft.com/ZuneWindowBehavior/ */ // https://github.com/Krypton-Suite/Standard-Toolkit/issues/459 - // Still got to call - base - to allow the "application to process it's own Min/Max requirements" !! + // Still got to call - base - to allow the "application to process its own Min/Max requirements" !! base.WndProc(ref m); return; } } // Do we need to override message processing? - if (ApplyCustomChrome && !IsDisposed && !Disposing) + if (!IsDisposed && !Disposing) { switch (m.Msg) { case PI.WM_.NCPAINT: - if (!ApplyComposition) - { - processed = _ignoreCount > 0 || OnWM_NCPAINT(ref m); - } + processed = _ignoreCount > 0 || OnWM_NCPAINT(ref m); break; - case PI.WM_.NCHITTEST: - processed = ApplyComposition ? OnCompWM_NCHITTEST(ref m) : OnWM_NCHITTEST(ref m); + case PI.WM_.NCHITTEST: + processed = OnWM_NCHITTEST(ref m); break; + case PI.WM_.NCACTIVATE: processed = OnWM_NCACTIVATE(ref m); break; + case PI.WM_.NCMOUSEMOVE: processed = OnWM_NCMOUSEMOVE(ref m); break; + case PI.WM_.NCLBUTTONDOWN: processed = OnWM_NCLBUTTONDOWN(ref m); break; + case PI.WM_.NCLBUTTONUP: processed = OnWM_NCLBUTTONUP(ref m); break; + case PI.WM_.MOUSEMOVE: if (_captured) { @@ -1158,21 +1072,15 @@ protected override void WndProc(ref Message m) { processed = OnWM_LBUTTONUP(ref m); } - break; + case PI.WM_.NCMOUSELEAVE: if (!_captured) { processed = OnWM_NCMOUSELEAVE(ref m); } - - if (ApplyComposition - && Composition != null) - { - // Must repaint the composition area not that mouse has left - Composition.CompNeedPaint(true); - } break; + case PI.WM_.NCLBUTTONDBLCLK: processed = OnWM_NCLBUTTONDBLCLK(ref m); break; @@ -1239,7 +1147,7 @@ protected override void WndProc(ref Message m) /// A Windows-based message. protected virtual void OnWM_GETMINMAXINFO(ref Message m) { - PI.MINMAXINFO mmi = (PI.MINMAXINFO)Marshal.PtrToStructure(m.LParam, typeof(PI.MINMAXINFO)); + PI.MINMAXINFO mmi = (PI.MINMAXINFO)Marshal.PtrToStructure(m.LParam, typeof(PI.MINMAXINFO))!; // Adjust the maximized size and position to fit the work area of the correct monitor const int MONITOR_DEFAULT_TO_NEAREST = 0x00000002; @@ -1285,19 +1193,10 @@ protected virtual bool OnWM_NCCALCSIZE(ref Message m) if (m.WParam != IntPtr.Zero) { // Get the border sizing needed around the client area - Padding borders = FormBorderStyle == FormBorderStyle.None ? Padding.Empty : RealWindowBorders; + Padding borders = RealWindowBorders; // Extract the Win32 NCCALCSIZE_PARAMS structure from LPARAM - PI.NCCALCSIZE_PARAMS calcsize = (PI.NCCALCSIZE_PARAMS)m.GetLParam(typeof(PI.NCCALCSIZE_PARAMS)); - - // If using composition in the custom chrome - if (ApplyComposition) - { - // Do not provide any border at the top, instead we extend the glass - // at the top into the client area so that we can custom draw onto the - // extended glass area. - borders.Top = 0; - } + PI.NCCALCSIZE_PARAMS calcsize = (PI.NCCALCSIZE_PARAMS)m.GetLParam(typeof(PI.NCCALCSIZE_PARAMS))!; // Reduce provided RECT by the borders calcsize.rectProposed.left += borders.Left; @@ -1347,48 +1246,12 @@ protected virtual bool OnWM_NCHITTEST(ref Message m) Point windowPoint = ScreenToWindow(screenPoint); // Perform hit testing - m.Result = WindowChromeHitTest(windowPoint, false); + m.Result = WindowChromeHitTest(windowPoint); // Message processed, do not pass onto base class for processing return true; } - /// - /// Process the WM_NCHITTEST message when overriding window chrome. - /// - /// A Windows-based message. - /// True if the message was processed; otherwise false. - protected virtual bool OnCompWM_NCHITTEST(ref Message m) - { - // Let the desktop window manager process it first - PI.Dwm.DwmDefWindowProc(m.HWnd, m.Msg, m.WParam, m.LParam, out var result); - m.Result = result; - - // If no result returned then let the base window routine process it - if (m.Result == (IntPtr)PI.HT.NOWHERE) - { - DefWndProc(ref m); - } - - // If the window proc has decided it is in the CAPTION or CLIENT areas - // then we might have something of our own in that area that we want to - // override the return value for. So process it ourself. - if (m.Result == (IntPtr)PI.HT.CAPTION - || m.Result == (IntPtr)PI.HT.CLIENT) - { - // Extract the point in screen coordinates - var screenPoint = new Point((int)m.LParam.ToInt64()); - - // Convert to window coordinates - Point windowPoint = ScreenToWindow(screenPoint); - - // Perform hit testing - m.Result = WindowChromeHitTest(windowPoint, true); - } - - // Message processed, do not pass onto base class for processing - return true; - } /// /// Process the WM_NCACTIVATE message when overriding window chrome. @@ -1400,21 +1263,18 @@ protected virtual bool OnWM_NCACTIVATE(ref Message m) // Cache the new active state WindowActive = m.WParam == (IntPtr)1; - if (!ApplyComposition) + // The first time an MDI child gets an WM_NCACTIVATE, let it process as normal + if ((MdiParent != null) && !_activated) { - // The first time an MDI child gets an WM_NCACTIVATE, let it process as normal - if ((MdiParent != null) && !_activated) - { - _activated = true; - } - else - { - // Allow default processing of activation change - m.Result = (IntPtr)1; + _activated = true; + } + else + { + // Allow default processing of activation change + m.Result = (IntPtr)1; - // Message processed, do not pass onto base class for processing - return true; - } + // Message processed, do not pass onto base class for processing + return true; } return false; @@ -1450,12 +1310,6 @@ protected virtual bool OnWM_NCMOUSEMOVE(ref Message m) // Convert to window coordinates Point windowPoint = ScreenToWindow(screenPoint); - // In composition we need to adjust for the left window border - if (ApplyComposition) - { - windowPoint.X -= RealWindowBorders.Left; - } - // Perform actual mouse movement actions WindowChromeNonClientMouseMove(windowPoint); @@ -1502,12 +1356,6 @@ protected virtual bool OnWM_NCLBUTTONDOWN(ref Message m) // Convert to window coordinates Point windowPoint = ScreenToWindow(screenPoint); - // In composition we need to adjust for the left window border - if (ApplyComposition) - { - windowPoint.X -= RealWindowBorders.Left; - } - // Perform actual mouse down processing return WindowChromeLeftMouseDown(windowPoint); } @@ -1525,12 +1373,6 @@ protected virtual bool OnWM_NCLBUTTONUP(ref Message m) // Convert to window coordinates Point windowPoint = ScreenToWindow(screenPoint); - // In composition we need to adjust for the left window border - if (ApplyComposition) - { - windowPoint.X -= RealWindowBorders.Left; - } - // Perform actual mouse up processing return WindowChromeLeftMouseUp(windowPoint); } @@ -1592,9 +1434,6 @@ protected virtual bool OnWM_LBUTTONUP(ref Message m) _captured = false; Capture = false; - // No longer have a target element for events - _capturedElement = null; - // Next time the mouse enters the window we need to track it leaving _trackingMouse = false; @@ -1633,7 +1472,7 @@ protected virtual bool OnWM_NCLBUTTONDBLCLK(ref Message m) Point windowPoint = ScreenToWindow(screenPoint); // Find the view element under the mouse - ViewBase? pointView = ViewManager?.Root?.ViewFromPoint(windowPoint); + ViewBase? pointView = ViewManager?.Root.ViewFromPoint(windowPoint); // Try and find a mouse controller for the active view IMouseController? controller = pointView?.FindMouseController(); @@ -1664,6 +1503,7 @@ protected virtual void OnNonClientPaint(IntPtr hWnd) { // Find the rectangle that covers the client area of the form Padding borders = RealWindowBorders; + var clipClientRect = new Rectangle(borders.Left, borders.Top, windowBounds.Width - borders.Horizontal, windowBounds.Height - borders.Vertical); @@ -1758,9 +1598,8 @@ protected virtual void WindowChromeEnd() /// Perform hit testing. /// /// Point in window coordinates. - /// Are we performing composition. /// - protected virtual IntPtr WindowChromeHitTest(Point pt, bool composition) => (IntPtr)PI.HT.CLIENT; + protected virtual IntPtr WindowChromeHitTest(Point pt) => (IntPtr)PI.HT.CLIENT; /// /// Perform painting of the window chrome. @@ -1786,7 +1625,7 @@ protected virtual bool WindowChromeLeftMouseDown(Point windowPoint) { ViewManager?.MouseDown(new MouseEventArgs(MouseButtons.Left, 1, windowPoint.X, windowPoint.Y, 0), windowPoint); - // If we moused down on a active view element + // If we moused down on an active view element // Ask the controller if the mouse down should be ignored by wnd proc processing IMouseController? controller = ViewManager?.ActiveView?.FindMouseController(); return controller is { IgnoreVisualFormLeftButtonDown: true }; @@ -1815,81 +1654,18 @@ protected virtual void WindowChromeMouseLeave() => #endregion #region Implementation - private void UpdateComposition() - { - if (!_insideUpdateComposition) - { - // Prevent reentrancy - _insideUpdateComposition = true; - - // Are we allowed to apply composition to the window - var applyComposition = !DesignMode && - TopLevel && - ApplyCustomChrome && - AllowComposition && - DWM.IsCompositionEnabled; - - // Only need to process changes in value - if (ApplyComposition != applyComposition) - { - ApplyComposition = applyComposition; - - // If we are compositing then show the composition interface - if (Composition != null) - { - Composition.CompVisible = ApplyComposition; - Composition.CompOwnerForm = this; - _compositionHeight = Composition.CompHeight; - } - else - { - _compositionHeight = DEFAULT_COMPOSITION_HEIGHT; - } - - // With composition we extend the top into the client area - DWM.ExtendFrameIntoClientArea(Handle, new Padding(0, ApplyComposition ? _compositionHeight : 0, 0, 0)); - - // A change in composition when using custom chrome must turn custom chrome - // off and on again to have it reprocess correctly to the new composition state - if (ApplyCustomChrome) - { - ApplyCustomChrome = false; - ApplyCustomChrome = true; - } - } - else if (ApplyComposition) - { - var newCompHeight = DEFAULT_COMPOSITION_HEIGHT; - if (Composition != null) - { - newCompHeight = Composition.CompHeight; - } - - // Check if there is a change in the composition height - if (newCompHeight != _compositionHeight) - { - // Apply the new height requirement - _compositionHeight = newCompHeight; - DWM.ExtendFrameIntoClientArea(Handle, new Padding(0, ApplyComposition ? _compositionHeight : 0, 0, 0)); - } - } - - _insideUpdateComposition = false; - } - } - - private void OnGlobalPaletteChanged(object sender, EventArgs e) + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) { // Update ourself with the new global palette - _localPalette = null; + _localCustomPalette = null; SetPalette(KryptonManager.CurrentGlobalPalette); Redirector.Target = _palette; // A new palette source means we need to layout and redraw - OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); + OnNeedPaint(LocalCustomPalette!, new NeedLayoutEventArgs(true)); GlobalPaletteChanged?.Invoke(sender, e); } @@ -1897,7 +1673,7 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e) private void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { - // If a change has occurred that could effect the color table then it needs regenerating + // If a change has occurred that could affect the color table then it needs regenerating switch (e.Category) { case UserPreferenceCategory.Icon: @@ -1907,22 +1683,21 @@ private void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventAr case UserPreferenceCategory.General: case UserPreferenceCategory.Window: case UserPreferenceCategory.Desktop: - UpdateComposition(); PerformNeedPaint(true); break; } } - private void SetPalette(PaletteBase? palette) + private void SetPalette([DisallowNull] PaletteBase palette) { if (palette != _palette) { // Unhook from current palette events - if (_palette != null) + if (_palette != null!) // Will be null on first set ! { _palette.PalettePaint -= OnNeedPaint; _palette.ButtonSpecChanged -= OnButtonSpecChanged; - _palette.AllowFormChromeChanged -= OnAllowFormChromeChanged; + _palette.UseThemeFormChromeBorderWidthChanged -= OnUseThemeFormChromeBorderWidthChanged; _palette.BasePaletteChanged -= OnBaseChanged; _palette.BaseRendererChanged -= OnBaseChanged; } @@ -1931,27 +1706,24 @@ private void SetPalette(PaletteBase? palette) _palette = palette; // Get the renderer associated with the palette - Renderer = _palette?.GetRenderer(); + Renderer = _palette.GetRenderer(); // Hook to new palette events - if (_palette != null) - { - _palette.PalettePaint += OnNeedPaint; - _palette.ButtonSpecChanged += OnButtonSpecChanged; - _palette.AllowFormChromeChanged += OnAllowFormChromeChanged; - _palette.BasePaletteChanged += OnBaseChanged; - _palette.BaseRendererChanged += OnBaseChanged; - // PaletteImageScaler.ScalePalette(FactorDpiX, FactorDpiY, _palette); - } + _palette.PalettePaint += OnNeedPaint; + _palette.ButtonSpecChanged += OnButtonSpecChanged; + _palette.UseThemeFormChromeBorderWidthChanged += OnUseThemeFormChromeBorderWidthChanged; + _palette.BasePaletteChanged += OnBaseChanged; + _palette.BaseRendererChanged += OnBaseChanged; + // PaletteImageScaler.ScalePalette(FactorDpiX, FactorDpiY, _palette); } } - private void OnBaseChanged(object sender, EventArgs e) => + private void OnBaseChanged(object? sender, EventArgs e) => // Change in base renderer or base palette require we fetch the latest renderer - Renderer = _palette?.GetRenderer();// PaletteImageScaler.ScalePalette(FactorDpiX, FactorDpiY, _palette); + Renderer = _palette.GetRenderer();// PaletteImageScaler.ScalePalette(FactorDpiX, FactorDpiY, _palette); #if !NET462 - private void OnDpiChanged(object sender, DpiChangedEventArgs e) => UpdateDpiFactors(); + private void OnDpiChanged(object? sender, DpiChangedEventArgs e) => UpdateDpiFactors(); #endif #endregion @@ -1985,7 +1757,6 @@ private void InitializeComponent() ClientSize = new Size(284, 261); Name = "VisualForm"; ResumeLayout(false); - } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.Designer.cs new file mode 100644 index 000000000..6a3175f0f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.Designer.cs @@ -0,0 +1,251 @@ +namespace Krypton.Toolkit +{ + partial class VisualInformationBoxForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.tmrAutoClose = new System.Windows.Forms.Timer(this.components); + this.tlpBase = new System.Windows.Forms.TableLayoutPanel(); + this._panelContent = new Krypton.Toolkit.KryptonPanel(); + this._panelFooter = new Krypton.Toolkit.KryptonPanel(); + this.tlpContent = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this._checkBox = new Krypton.Toolkit.KryptonCheckBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this._panelButtons = new Krypton.Toolkit.KryptonPanel(); + this._borderEdge = new Krypton.Toolkit.KryptonBorderEdge(); + this.kpnlContentArea = new Krypton.Toolkit.KryptonPanel(); + this.kwlblMessageText = new Krypton.Toolkit.KryptonWrapLabel(); + this.klwlblMessageText = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.tlpBase.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelContent)).BeginInit(); + this._panelContent.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelFooter)).BeginInit(); + this._panelFooter.SuspendLayout(); + this.tlpContent.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).BeginInit(); + this._panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).BeginInit(); + this.kpnlContentArea.SuspendLayout(); + this.SuspendLayout(); + // + // tlpBase + // + this.tlpBase.BackColor = System.Drawing.Color.Transparent; + this.tlpBase.ColumnCount = 1; + this.tlpBase.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpBase.Controls.Add(this._panelContent, 0, 0); + this.tlpBase.Controls.Add(this._panelFooter, 0, 1); + this.tlpBase.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpBase.Location = new System.Drawing.Point(0, 0); + this.tlpBase.Name = "tlpBase"; + this.tlpBase.RowCount = 2; + this.tlpBase.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpBase.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpBase.Size = new System.Drawing.Size(267, 163); + this.tlpBase.TabIndex = 0; + // + // _panelContent + // + this._panelContent.Controls.Add(this.tlpContent); + this._panelContent.Dock = System.Windows.Forms.DockStyle.Fill; + this._panelContent.Location = new System.Drawing.Point(0, 0); + this._panelContent.Margin = new System.Windows.Forms.Padding(0); + this._panelContent.Name = "_panelContent"; + this._panelContent.Size = new System.Drawing.Size(267, 98); + this._panelContent.TabIndex = 3; + // + // _panelFooter + // + this._panelFooter.Controls.Add(this.tableLayoutPanel1); + this._panelFooter.Dock = System.Windows.Forms.DockStyle.Fill; + this._panelFooter.Location = new System.Drawing.Point(0, 98); + this._panelFooter.Margin = new System.Windows.Forms.Padding(0); + this._panelFooter.Name = "_panelFooter"; + this._panelFooter.Size = new System.Drawing.Size(267, 65); + this._panelFooter.TabIndex = 4; + // + // tlpContent + // + this.tlpContent.ColumnCount = 2; + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tlpContent.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Controls.Add(this.kpnlContentArea, 1, 0); + this.tlpContent.Controls.Add(this.pictureBox1, 0, 0); + this.tlpContent.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpContent.Location = new System.Drawing.Point(0, 0); + this.tlpContent.Name = "tlpContent"; + this.tlpContent.RowCount = 1; + this.tlpContent.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpContent.Size = new System.Drawing.Size(267, 98); + this.tlpContent.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this._panelButtons, 0, 1); + this.tableLayoutPanel1.Controls.Add(this._checkBox, 0, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(267, 65); + this.tableLayoutPanel1.TabIndex = 0; + // + // _checkBox + // + this._checkBox.Dock = System.Windows.Forms.DockStyle.Fill; + this._checkBox.Location = new System.Drawing.Point(3, 3); + this._checkBox.Name = "_checkBox"; + this._checkBox.Size = new System.Drawing.Size(261, 20); + this._checkBox.TabIndex = 1; + this._checkBox.Values.Text = "checkBox"; + // + // pictureBox1 + // + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.pictureBox1.Location = new System.Drawing.Point(5, 5); + this.pictureBox1.Margin = new System.Windows.Forms.Padding(5); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(48, 88); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // _panelButtons + // + this.tableLayoutPanel1.SetColumnSpan(this._panelButtons, 2); + this._panelButtons.Controls.Add(this._borderEdge); + this._panelButtons.Dock = System.Windows.Forms.DockStyle.Fill; + this._panelButtons.Location = new System.Drawing.Point(0, 26); + this._panelButtons.Margin = new System.Windows.Forms.Padding(0); + this._panelButtons.Name = "_panelButtons"; + this._panelButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelButtons.Size = new System.Drawing.Size(267, 39); + this._panelButtons.TabIndex = 2; + // + // _borderEdge + // + this._borderEdge.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._borderEdge.Dock = System.Windows.Forms.DockStyle.Top; + this._borderEdge.Location = new System.Drawing.Point(0, 0); + this._borderEdge.Margin = new System.Windows.Forms.Padding(2); + this._borderEdge.Name = "_borderEdge"; + this._borderEdge.Size = new System.Drawing.Size(267, 1); + this._borderEdge.Text = "kryptonBorderEdge1"; + // + // kpnlContentArea + // + this.kpnlContentArea.Controls.Add(this.kwlblMessageText); + this.kpnlContentArea.Controls.Add(this.klwlblMessageText); + this.kpnlContentArea.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlContentArea.Location = new System.Drawing.Point(61, 3); + this.kpnlContentArea.Name = "kpnlContentArea"; + this.kpnlContentArea.Size = new System.Drawing.Size(203, 92); + this.kpnlContentArea.TabIndex = 2; + // + // kwlblMessageText + // + this.kwlblMessageText.AutoSize = false; + this.kwlblMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.kwlblMessageText.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kwlblMessageText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kwlblMessageText.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kwlblMessageText.Location = new System.Drawing.Point(0, 0); + this.kwlblMessageText.Name = "kwlblMessageText"; + this.kwlblMessageText.Size = new System.Drawing.Size(203, 92); + this.kwlblMessageText.Text = "Message Text"; + this.kwlblMessageText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // klwlblMessageText + // + this.klwlblMessageText.AutoSize = false; + this.klwlblMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblMessageText.Font = new System.Drawing.Font("Segoe UI", 9F); + this.klwlblMessageText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.klwlblMessageText.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.klwlblMessageText.Location = new System.Drawing.Point(0, 0); + this.klwlblMessageText.Name = "klwlblMessageText"; + this.klwlblMessageText.Size = new System.Drawing.Size(203, 92); + this.klwlblMessageText.Text = "Message Text"; + this.klwlblMessageText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // VisualInformationBoxForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(267, 163); + this.Controls.Add(this.tlpBase); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.FormTitleAlign = Krypton.Toolkit.PaletteRelativeAlign.Inherit; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualInformationBoxForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.tlpBase.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this._panelContent)).EndInit(); + this._panelContent.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this._panelFooter)).EndInit(); + this._panelFooter.ResumeLayout(false); + this.tlpContent.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).EndInit(); + this._panelButtons.ResumeLayout(false); + this._panelButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).EndInit(); + this.kpnlContentArea.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Timer tmrAutoClose; + private TableLayoutPanel tlpBase; + private KryptonPanel _panelContent; + private KryptonPanel _panelFooter; + private TableLayoutPanel tlpContent; + private TableLayoutPanel tableLayoutPanel1; + private KryptonCheckBox _checkBox; + private PictureBox pictureBox1; + private KryptonPanel _panelButtons; + private KryptonBorderEdge _borderEdge; + private KryptonPanel kpnlContentArea; + private KryptonWrapLabel kwlblMessageText; + private KryptonLinkWrapLabel klwlblMessageText; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.cs new file mode 100644 index 000000000..6cdea3049 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualInformationBoxForm : KryptonForm + { + public VisualInformationBoxForm() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.resx new file mode 100644 index 000000000..4bcf66dfc --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInformationBoxForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.Designer.cs similarity index 96% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.Designer.cs rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.Designer.cs index 72dc179d3..42efca714 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonInputBoxForm.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.Designer.cs @@ -1,6 +1,6 @@ namespace Krypton.Toolkit { - partial class KryptonInputBoxForm + partial class VisualInputBoxForm { /// /// Required designer variable. @@ -49,7 +49,7 @@ private void InitializeComponent() this._panelMessage.Dock = System.Windows.Forms.DockStyle.Fill; this._panelMessage.Location = new System.Drawing.Point(0, 0); this._panelMessage.Name = "_panelMessage"; - this._panelMessage.Size = new System.Drawing.Size(350, 106); + this._panelMessage.Size = new System.Drawing.Size(362, 118); this._panelMessage.TabIndex = 1; // // _tableLayoutPanel1 @@ -122,7 +122,6 @@ private void InitializeComponent() // this._buttonOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._buttonOk.AutoSize = true; - this._buttonOk.CornerRoundingRadius = -1F; this._buttonOk.DialogResult = System.Windows.Forms.DialogResult.OK; this._buttonOk.Location = new System.Drawing.Point(213, 0); this._buttonOk.Margin = new System.Windows.Forms.Padding(0, 0, 0, 8); @@ -136,7 +135,6 @@ private void InitializeComponent() // this._buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._buttonCancel.AutoSize = true; - this._buttonCancel.CornerRoundingRadius = -1F; this._buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this._buttonCancel.Location = new System.Drawing.Point(285, 0); this._buttonCancel.Margin = new System.Windows.Forms.Padding(0); @@ -146,18 +144,18 @@ private void InitializeComponent() this._buttonCancel.TabIndex = 2; this._buttonCancel.Values.Text = "Cance&l"; // - // KryptonInputBoxForm + // VisualInputBoxForm // this.AcceptButton = this._buttonOk; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this._buttonCancel; - this.ClientSize = new System.Drawing.Size(350, 106); + this.ClientSize = new System.Drawing.Size(362, 118); this.Controls.Add(this._panelMessage); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "KryptonInputBoxForm"; + this.Name = "VisualInputBoxForm"; this.ShowIcon = false; this.ShowInTaskbar = false; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.cs new file mode 100644 index 000000000..aa4af6dc9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.cs @@ -0,0 +1,116 @@ +#region BSD License +/* + * + * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) + * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// + /// + public partial class VisualInputBoxForm : KryptonForm + { + #region Instance Fields + + private readonly KryptonInputBoxData _inputBoxData; + + #endregion + + #region Identity + + /// + /// + /// + public VisualInputBoxForm() + { + InitializeComponent(); + } + + /// Initializes a new instance of the class. + /// The input box data. + public VisualInputBoxForm(KryptonInputBoxData inputBoxData) + { + InitializeComponent(); + + _inputBoxData = inputBoxData; + + // Update contents to match requirements + UpdateText(); + + UpdateCue(); + + UpdateButtons(); + } + + #endregion + + #region Implementation + + internal static string InternalShow(KryptonInputBoxData inputBoxData) + { + // If do not have an owner passed in then get the active window and use that instead + IWin32Window? showOwner = inputBoxData.Owner ?? FromHandle(PI.GetActiveWindow()); + + // Show input box window as a modal dialog and then dispose of it afterwards + using var ib = new VisualInputBoxForm(inputBoxData); + ib.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return ib.ShowDialog(showOwner) == DialogResult.OK + ? ib.InputResponse + : string.Empty; + } + + internal string InputResponse => _textBoxResponse.Text; + + private void UpdateText() + { + Text = _inputBoxData.Caption; + _labelPrompt.Text = _inputBoxData.Prompt; + _textBoxResponse.Text = _inputBoxData.DefaultResponse; + _textBoxResponse.UseSystemPasswordChar = _inputBoxData.UsePasswordOption ?? false; + } + + private void UpdateCue() + { + _textBoxResponse.CueHint.CueHintText = _inputBoxData.CueText; + + if (_inputBoxData.CueColor != null || _inputBoxData.CueColor != Color.Transparent || _inputBoxData.CueColor != GlobalStaticValues.EMPTY_COLOR) + { + _textBoxResponse.CueHint.Color1 = _inputBoxData.CueColor ?? Color.Gray; + } + + if (_inputBoxData.CueTypeface != null) + { + _textBoxResponse.CueHint.Font = _inputBoxData.CueTypeface ?? KryptonManager.CurrentGlobalPalette.BaseFont; + } + } + + private void UpdateButtons() + { + _buttonOk.Text = KryptonManager.Strings.GeneralStrings.OK; + _buttonCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; + } + + private void Response_KeyDown(object sender, KeyEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Enter: + _buttonOk.PerformClick(); + break; + case Keys.Escape: + _buttonCancel.PerformClick(); + break; + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualInputBoxForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.Designer.cs new file mode 100644 index 000000000..967fdd3df --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.Designer.cs @@ -0,0 +1,267 @@ +#region BSD License +/* + * + * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) + * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + + +namespace Krypton.Toolkit +{ + partial class VisualMessageBoxForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this._messageIcon = new System.Windows.Forms.PictureBox(); + this._panelButtons = new Krypton.Toolkit.KryptonPanel(); + this._borderEdge = new Krypton.Toolkit.KryptonBorderEdge(); + this._button4 = new Krypton.Toolkit.MessageButton(); + this._button3 = new Krypton.Toolkit.MessageButton(); + this._button1 = new Krypton.Toolkit.MessageButton(); + this._button2 = new Krypton.Toolkit.MessageButton(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kpnlContentArea = new Krypton.Toolkit.KryptonPanel(); + this.krtbMessageText = new Krypton.Toolkit.KryptonRichTextBox(); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).BeginInit(); + this._panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).BeginInit(); + this.kpnlContentArea.SuspendLayout(); + this.SuspendLayout(); + // + // _messageIcon + // + this._messageIcon.BackColor = System.Drawing.Color.Transparent; + this._messageIcon.Dock = System.Windows.Forms.DockStyle.Fill; + this._messageIcon.Location = new System.Drawing.Point(8, 4); + this._messageIcon.Margin = new System.Windows.Forms.Padding(8, 4, 4, 4); + this._messageIcon.Name = "_messageIcon"; + this._messageIcon.Size = new System.Drawing.Size(33, 35); + this._messageIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this._messageIcon.TabIndex = 0; + this._messageIcon.TabStop = false; + // + // _panelButtons + // + this.tableLayoutPanel1.SetColumnSpan(this._panelButtons, 2); + this._panelButtons.Controls.Add(this._borderEdge); + this._panelButtons.Controls.Add(this._button4); + this._panelButtons.Controls.Add(this._button3); + this._panelButtons.Controls.Add(this._button1); + this._panelButtons.Controls.Add(this._button2); + this._panelButtons.Dock = System.Windows.Forms.DockStyle.Fill; + this._panelButtons.Location = new System.Drawing.Point(0, 43); + this._panelButtons.Margin = new System.Windows.Forms.Padding(0); + this._panelButtons.Name = "_panelButtons"; + this._panelButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelButtons.Size = new System.Drawing.Size(203, 21); + this._panelButtons.TabIndex = 0; + // + // _borderEdge + // + this._borderEdge.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._borderEdge.Dock = System.Windows.Forms.DockStyle.Top; + this._borderEdge.Location = new System.Drawing.Point(0, 0); + this._borderEdge.Margin = new System.Windows.Forms.Padding(2); + this._borderEdge.Name = "_borderEdge"; + this._borderEdge.Size = new System.Drawing.Size(203, 1); + this._borderEdge.Text = "kryptonBorderEdge1"; + // + // _button4 + // + this._button4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button4.AutoSize = true; + this._button4.Enabled = false; + this._button4.IgnoreAltF4 = false; + this._button4.Location = new System.Drawing.Point(203, 0); + this._button4.Margin = new System.Windows.Forms.Padding(0); + this._button4.MinimumSize = new System.Drawing.Size(38, 21); + this._button4.Name = "_button4"; + this._button4.Size = new System.Drawing.Size(38, 26); + this._button4.TabIndex = 2; + this._button4.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button4.Values.Text = "B4"; + this._button4.Visible = false; + // + // _button3 + // + this._button3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button3.AutoSize = true; + this._button3.Enabled = false; + this._button3.IgnoreAltF4 = false; + this._button3.Location = new System.Drawing.Point(166, 0); + this._button3.Margin = new System.Windows.Forms.Padding(0); + this._button3.MinimumSize = new System.Drawing.Size(38, 21); + this._button3.Name = "_button3"; + this._button3.Size = new System.Drawing.Size(38, 26); + this._button3.TabIndex = 2; + this._button3.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button3.Values.Text = "B3"; + this._button3.Visible = false; + // + // _button1 + // + this._button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button1.AutoSize = true; + this._button1.Enabled = false; + this._button1.IgnoreAltF4 = false; + this._button1.Location = new System.Drawing.Point(90, 0); + this._button1.Margin = new System.Windows.Forms.Padding(0); + this._button1.MinimumSize = new System.Drawing.Size(38, 21); + this._button1.Name = "_button1"; + this._button1.Size = new System.Drawing.Size(38, 26); + this._button1.TabIndex = 0; + this._button1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button1.Values.Text = "B1"; + this._button1.Visible = false; + // + // _button2 + // + this._button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._button2.AutoSize = true; + this._button2.Enabled = false; + this._button2.IgnoreAltF4 = false; + this._button2.Location = new System.Drawing.Point(128, 0); + this._button2.Margin = new System.Windows.Forms.Padding(0); + this._button2.MinimumSize = new System.Drawing.Size(38, 21); + this._button2.Name = "_button2"; + this._button2.Size = new System.Drawing.Size(38, 26); + this._button2.TabIndex = 1; + this._button2.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this._button2.Values.Text = "B2"; + this._button2.Visible = false; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(203, 64); + this.kryptonPanel1.TabIndex = 1; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this._panelButtons, 0, 1); + this.tableLayoutPanel1.Controls.Add(this._messageIcon, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kpnlContentArea, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel1.Size = new System.Drawing.Size(203, 64); + this.tableLayoutPanel1.TabIndex = 0; + // + // kpnlContentArea + // + this.kpnlContentArea.Controls.Add(this.krtbMessageText); + this.kpnlContentArea.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlContentArea.Location = new System.Drawing.Point(49, 12); + this.kpnlContentArea.Margin = new System.Windows.Forms.Padding(4, 12, 4, 12); + this.kpnlContentArea.Name = "kpnlContentArea"; + this.kpnlContentArea.Size = new System.Drawing.Size(150, 19); + this.kpnlContentArea.TabIndex = 1; + // + // krtbMessageText + // + this.krtbMessageText.DetectUrls = false; + this.krtbMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.krtbMessageText.InputControlStyle = Krypton.Toolkit.InputControlStyle.PanelClient; + this.krtbMessageText.Location = new System.Drawing.Point(0, 0); + this.krtbMessageText.Margin = new System.Windows.Forms.Padding(0); + this.krtbMessageText.Name = "krtbMessageText"; + this.krtbMessageText.ReadOnly = true; + this.krtbMessageText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; + this.krtbMessageText.Size = new System.Drawing.Size(150, 19); + this.krtbMessageText.StateCommon.Border.DrawBorders = Krypton.Toolkit.PaletteDrawBorders.None; + this.krtbMessageText.TabIndex = 0; + this.krtbMessageText.TabStop = false; + this.krtbMessageText.Text = "Message Text\n.\ttabbed"; + this.krtbMessageText.WordWrap = false; + // + // VisualMessageBoxForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(203, 64); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.KeyPreview = true; + this.Margin = new System.Windows.Forms.Padding(2); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualMessageBoxForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.AnyKeyDown); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).EndInit(); + this._panelButtons.ResumeLayout(false); + this._panelButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).EndInit(); + this.kpnlContentArea.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + private PictureBox _messageIcon; + private KryptonPanel _panelButtons; + private MessageButton _button1; + private MessageButton _button2; + private MessageButton _button3; + private MessageButton _button4; + private KryptonBorderEdge _borderEdge; + private KryptonPanel kryptonPanel1; + private TableLayoutPanel tableLayoutPanel1; + private KryptonPanel kpnlContentArea; + private KryptonRichTextBox krtbMessageText; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.cs similarity index 56% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.cs rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.cs index 110fd7c2a..0c8f8ffe6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.cs @@ -5,106 +5,79 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion // ReSharper disable InconsistentNaming // ReSharper disable UnusedParameter.Local -using ContentAlignment = System.Drawing.ContentAlignment; namespace Krypton.Toolkit { - internal partial class KryptonMessageBoxForm : KryptonForm + internal partial class VisualMessageBoxForm : KryptonForm { - #region Static Fields - private const int GAP = 10; - private static readonly int OS_MAJOR_VERSION; - #endregion #region Instance Fields private readonly bool _showHelpButton; - private readonly string _text; - private readonly string _caption; - private readonly string _applicationPath; + private readonly string? _text; + private readonly string? _caption; private readonly KryptonMessageBoxButtons _buttons; private readonly KryptonMessageBoxIcon _kryptonMessageBoxIcon; - private readonly Image? _applicationImage; - private readonly KryptonMessageBoxDefaultButton _defaultButton; - private readonly MessageBoxOptions _options; // https://github.com/Krypton-Suite/Standard-Toolkit/issues/313 - // If help information provided or we are not a service/default desktop application then grab an owner for showing the message box + // If help information provided, or we are not a service/default desktop application then grab an owner for showing the message box private readonly IWin32Window? _showOwner; private readonly HelpInfo? _helpInfo; + private readonly KryptonMessageBoxNativeWindow _krtbNativeWindow; + + #endregion - // Action button features (aka _button5) - private readonly bool _showActionButton; - private readonly string _actionButtonText; - private readonly KryptonCommand? _actionButtonCommand; + #region Public - // For the LinkLabel option - private readonly MessageBoxContentAreaType? _contentAreaType; - private readonly KryptonCommand? _linkLabelCommand; - private readonly ProcessStartInfo? _linkLaunchArgument; - private readonly ContentAlignment? _messageTextAlignment; - private readonly LinkArea _contentLinkArea; + public KryptonMessageBoxResult MessageBoxResult { get; set; } #endregion #region Identity - static KryptonMessageBoxForm() => OS_MAJOR_VERSION = Environment.OSVersion.Version.Major; - public KryptonMessageBoxForm() + public VisualMessageBoxForm() { InitializeComponent(); } - - internal KryptonMessageBoxForm(IWin32Window? showOwner, string text, string caption, + internal VisualMessageBoxForm(IWin32Window? showOwner, string? text, string? caption, KryptonMessageBoxButtons buttons, KryptonMessageBoxIcon icon, KryptonMessageBoxDefaultButton defaultButton, - MessageBoxOptions options, HelpInfo? helpInfo, bool? showCtrlCopy, bool? showHelpButton, - bool? showActionButton, string? actionButtonText, - KryptonCommand? actionButtonCommand, - Image? applicationImage, - string? applicationPath, - MessageBoxContentAreaType? contentAreaType, - KryptonCommand? linkLabelCommand, - ProcessStartInfo? linkLaunchArgument, - LinkArea? contentLinkArea, - ContentAlignment? messageTextAlignment) + bool? showCloseButton) { // Store incoming values - _text = text; + _text = CommonHelper.NormalizeLineBreaks(text ?? string.Empty); _caption = caption; _buttons = buttons; _kryptonMessageBoxIcon = icon; _defaultButton = defaultButton; - _options = options; _helpInfo = helpInfo; _showOwner = showOwner; _showHelpButton = showHelpButton ?? (helpInfo != null); - _showActionButton = showActionButton ?? false; - _actionButtonText = actionButtonText ?? string.Empty; - _actionButtonCommand = actionButtonCommand; - _applicationImage = applicationImage; - _applicationPath = applicationPath ?? string.Empty; - _contentAreaType = contentAreaType ?? MessageBoxContentAreaType.Normal; - _linkLabelCommand = linkLabelCommand ?? new KryptonCommand(); - _contentLinkArea = contentLinkArea ?? new LinkArea(0, text.Length); - _linkLaunchArgument = linkLaunchArgument ?? new ProcessStartInfo(); - _messageTextAlignment = messageTextAlignment ?? ContentAlignment.MiddleLeft; + _krtbNativeWindow = new(); // Create the form contents InitializeComponent(); - RightToLeftLayout = _options.HasFlag(MessageBoxOptions.RtlReading); + // Hookup the native window on the KRTB, only after IntializeComponent(). + _krtbNativeWindow.AssignHandle(krtbMessageText.RichTextBox.Handle); + + // Default Cursor for the KRTB when the cursors hovers over it + krtbMessageText.RichTextBox.Cursor = Cursors.Arrow; + + // #1692 text font colour for input controls does not work correct on KMBees when using dark themes. + // Set the text colour to the one a control uses. + krtbMessageText.StateCommon.Content.Color1 = GlobalStaticValues.KryptonMessageBoxRichTextBoxTextColor; // Update contents to match requirements UpdateText(); @@ -113,14 +86,10 @@ internal KryptonMessageBoxForm(IWin32Window? showOwner, string text, string capt UpdateDefault(); UpdateHelp(); UpdateTextExtra(showCtrlCopy); - UpdateContentAreaType(contentAreaType); - UpdateContentAreaTextAlignment(contentAreaType, messageTextAlignment); - UpdateContentLinkArea(contentLinkArea); - - SetupActionButtonUI(_showActionButton); - // Finally calculate and set form sizing UpdateSizing(showOwner); + + ShowCloseButton(showCloseButton); } #endregion Identity @@ -129,25 +98,11 @@ internal KryptonMessageBoxForm(IWin32Window? showOwner, string text, string capt private void UpdateText() { - Text = string.IsNullOrEmpty(_caption) ? string.Empty : _caption.Split(Environment.NewLine.ToCharArray())[0]; - - if (_contentAreaType == MessageBoxContentAreaType.Normal) - { - _messageText.Text = _text; - - _messageText.RightToLeft = _options.HasFlag(MessageBoxOptions.RightAlign) - ? RightToLeft.Yes - : _options.HasFlag(MessageBoxOptions.RtlReading) - ? RightToLeft.Inherit - : RightToLeft.No; - } - else - { - _linkLabelMessageText.Text = _text; + Text = string.IsNullOrEmpty(_caption) + ? string.Empty + : _caption!.Split(Environment.NewLine.ToCharArray())[0]; - _linkLabelMessageText.RightToLeft = _options.HasFlag(MessageBoxOptions.RightAlign) ? RightToLeft.Yes : - _options.HasFlag(MessageBoxOptions.RtlReading) ? RightToLeft.Inherit : RightToLeft.No; - } + krtbMessageText.Text = _text; } private void UpdateTextExtra(bool? showCtrlCopy) @@ -171,40 +126,54 @@ private void UpdateTextExtra(bool? showCtrlCopy) private void UpdateIcon() { - if (OSUtilities.IsWindowsEleven) + if (OSUtilities.IsAtLeastWindowsEleven) { switch (_kryptonMessageBoxIcon) { case KryptonMessageBoxIcon.None: // Windows XP and before will Beep, Vista and above do not! - if (OS_MAJOR_VERSION < 6) - { - SystemSounds.Beep.Play(); - } break; case KryptonMessageBoxIcon.Hand: _messageIcon.Image = MessageBoxImageResources.GenericHand; SystemSounds.Hand.Play(); break; + case KryptonMessageBoxIcon.SystemHand: + //case KryptonMessageBoxIcon.SystemStop: + //case KryptonMessageBoxIcon.SystemError: + _messageIcon.Image = SystemIcons.Hand.ToBitmap(); + SystemSounds.Hand.Play(); + break; case KryptonMessageBoxIcon.Question: _messageIcon.Image = MessageBoxImageResources.Question_Windows_11; SystemSounds.Question.Play(); break; + case KryptonMessageBoxIcon.SystemQuestion: + _messageIcon.Image = SystemIcons.Question.ToBitmap(); + SystemSounds.Question.Play(); + break; case KryptonMessageBoxIcon.Exclamation: _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; SystemSounds.Exclamation.Play(); break; + case KryptonMessageBoxIcon.SystemExclamation: + _messageIcon.Image = SystemIcons.Warning.ToBitmap(); + SystemSounds.Exclamation.Play(); + break; case KryptonMessageBoxIcon.Asterisk: _messageIcon.Image = MessageBoxImageResources.Asterisk_Windows_11; SystemSounds.Asterisk.Play(); break; + case KryptonMessageBoxIcon.SystemAsterisk: + _messageIcon.Image = SystemIcons.Asterisk.ToBitmap(); + SystemSounds.Asterisk.Play(); + break; case KryptonMessageBoxIcon.Stop: _messageIcon.Image = MessageBoxImageResources.GenericStop; - SystemSounds.Asterisk.Play(); + SystemSounds.Hand.Play(); break; case KryptonMessageBoxIcon.Error: _messageIcon.Image = MessageBoxImageResources.Critical_Windows_11; - SystemSounds.Asterisk.Play(); + SystemSounds.Hand.Play(); break; case KryptonMessageBoxIcon.Warning: _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; @@ -212,30 +181,24 @@ private void UpdateIcon() break; case KryptonMessageBoxIcon.Information: _messageIcon.Image = MessageBoxImageResources.Information_Windows_11; - SystemSounds.Asterisk.Play(); + SystemSounds.Exclamation.Play(); break; case KryptonMessageBoxIcon.Shield: _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; break; case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on an image instead _messageIcon.Image = MessageBoxImageResources.Windows11; break; case KryptonMessageBoxIcon.Application: - if (_applicationImage != null) - { - _messageIcon.Image = _applicationImage; - } - else if (!string.IsNullOrEmpty(_applicationPath)) { - Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + var applicationPath = Application.ExecutablePath; + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(applicationPath)?.ToBitmap(); Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); - - _messageIcon.Image = scaledImage; - } - else - { - // Fall back to defaults - _messageIcon.Image = SystemIcons.Application.ToBitmap(); + _messageIcon.Image = scaledImage ?? + // Fall back to defaults + SystemIcons.Application.ToBitmap(); } break; case KryptonMessageBoxIcon.SystemApplication: @@ -249,16 +212,14 @@ private void UpdateIcon() { case KryptonMessageBoxIcon.None: // Windows XP and before will Beep, Vista and above do not! - if (OS_MAJOR_VERSION < 6) - { - SystemSounds.Beep.Play(); - } break; case KryptonMessageBoxIcon.Hand: _messageIcon.Image = MessageBoxImageResources.GenericHand; SystemSounds.Hand.Play(); break; case KryptonMessageBoxIcon.SystemHand: + //case KryptonMessageBoxIcon.SystemStop: + //case KryptonMessageBoxIcon.SystemError: _messageIcon.Image = SystemIcons.Hand.ToBitmap(); SystemSounds.Hand.Play(); break; @@ -279,9 +240,7 @@ private void UpdateIcon() SystemSounds.Exclamation.Play(); break; case KryptonMessageBoxIcon.Asterisk: - _messageIcon.Image = OSUtilities.IsWindowsEleven - ? MessageBoxImageResources.Asterisk_Windows_11 - : MessageBoxImageResources.GenericAsterisk; + _messageIcon.Image = MessageBoxImageResources.GenericAsterisk; SystemSounds.Asterisk.Play(); break; case KryptonMessageBoxIcon.SystemAsterisk: @@ -290,11 +249,11 @@ private void UpdateIcon() break; case KryptonMessageBoxIcon.Stop: _messageIcon.Image = MessageBoxImageResources.GenericStop; - SystemSounds.Asterisk.Play(); + SystemSounds.Hand.Play(); break; case KryptonMessageBoxIcon.Error: _messageIcon.Image = MessageBoxImageResources.GenericCritical; - SystemSounds.Asterisk.Play(); + SystemSounds.Hand.Play(); break; case KryptonMessageBoxIcon.Warning: _messageIcon.Image = MessageBoxImageResources.GenericWarning; @@ -302,55 +261,26 @@ private void UpdateIcon() break; case KryptonMessageBoxIcon.Information: _messageIcon.Image = MessageBoxImageResources.GenericInformation; - SystemSounds.Asterisk.Play(); + SystemSounds.Exclamation.Play(); break; case KryptonMessageBoxIcon.Shield: - if (OSUtilities.IsWindowsEleven) - { - _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; - } - else if (OSUtilities.IsWindowsTen) - { - _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_10; - } - else - { - _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_7; - } + _messageIcon.Image = OSUtilities.IsWindowsTen + ? UACShieldIconResources.UAC_Shield_Windows_10 + : UACShieldIconResources.UAC_Shield_Windows_7; break; case KryptonMessageBoxIcon.WindowsLogo: - // Because Windows 11 displays a generic application icon, - // we need to rely on a image instead - if (OSUtilities.IsWindowsEleven) - { - _messageIcon.Image = MessageBoxImageResources.Windows11; - } - // Windows 10 - else if (OSUtilities.IsWindowsTen) - { - _messageIcon.Image = MessageBoxImageResources.Windows_8_and_10_Logo; - } - else - { - _messageIcon.Image = SystemIcons.WinLogo.ToBitmap(); - } + _messageIcon.Image = OSUtilities.IsWindowsTen + ? MessageBoxImageResources.Windows_8_and_10_Logo + : SystemIcons.WinLogo.ToBitmap(); break; case KryptonMessageBoxIcon.Application: - if (_applicationImage != null) { - _messageIcon.Image = _applicationImage; - } - else if (!string.IsNullOrEmpty(_applicationPath)) - { - Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + var applicationPath = Application.ExecutablePath; + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(applicationPath)?.ToBitmap(); Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); - - _messageIcon.Image = scaledImage; - } - else - { - // Fall back to defaults - _messageIcon.Image = SystemIcons.Application.ToBitmap(); + _messageIcon.Image = scaledImage ?? + // Fall back to defaults + SystemIcons.Application.ToBitmap(); } break; case KryptonMessageBoxIcon.SystemApplication: @@ -358,9 +288,7 @@ private void UpdateIcon() break; } } - _messageIcon.Visible = (_kryptonMessageBoxIcon != KryptonMessageBoxIcon.None); - } private void UpdateButtons() @@ -368,14 +296,15 @@ private void UpdateButtons() switch (_buttons) { case KryptonMessageBoxButtons.OK: - _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK; + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; _button1.DialogResult = DialogResult.OK; _button1.Visible = true; _button1.Enabled = true; break; + case KryptonMessageBoxButtons.OKCancel: - _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.OK; - _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; _button1.DialogResult = DialogResult.OK; _button2.DialogResult = DialogResult.Cancel; _button1.Visible = true; @@ -383,9 +312,10 @@ private void UpdateButtons() _button2.Visible = true; _button2.Enabled = true; break; + case KryptonMessageBoxButtons.YesNo: - _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes; - _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No; + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; _button1.DialogResult = DialogResult.Yes; _button2.DialogResult = DialogResult.No; _button1.Visible = true; @@ -394,10 +324,11 @@ private void UpdateButtons() _button2.Enabled = true; ControlBox = false; break; + case KryptonMessageBoxButtons.YesNoCancel: - _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes; - _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.No; - _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel; _button1.DialogResult = DialogResult.Yes; _button2.DialogResult = DialogResult.No; _button3.DialogResult = DialogResult.Cancel; @@ -408,9 +339,10 @@ private void UpdateButtons() _button3.Visible = true; _button3.Enabled = true; break; + case KryptonMessageBoxButtons.RetryCancel: - _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry; - _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; + _button1.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; _button1.DialogResult = DialogResult.Retry; _button2.DialogResult = DialogResult.Cancel; _button1.Visible = true; @@ -418,10 +350,11 @@ private void UpdateButtons() _button2.Visible = true; _button2.Enabled = true; break; + case KryptonMessageBoxButtons.AbortRetryIgnore: - _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Abort; - _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry; - _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Ignore; + _button1.Text = KryptonManager.Strings.GeneralStrings.Abort; + _button2.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore; _button1.DialogResult = DialogResult.Abort; _button2.DialogResult = DialogResult.Retry; _button3.DialogResult = DialogResult.Ignore; @@ -433,10 +366,11 @@ private void UpdateButtons() _button3.Enabled = true; ControlBox = false; break; + case KryptonMessageBoxButtons.CancelTryContinue: - _button1.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; - _button2.Text = KryptonLanguageManager.GeneralToolkitStrings.TryAgain; - _button3.Text = KryptonLanguageManager.GeneralToolkitStrings.Continue; + _button1.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button2.Text = KryptonManager.Strings.GeneralStrings.TryAgain; + _button3.Text = KryptonManager.Strings.GeneralStrings.Continue; _button1.DialogResult = DialogResult.Cancel; #if NET6_0_OR_GREATER _button2.DialogResult = DialogResult.TryAgain; @@ -454,14 +388,6 @@ private void UpdateButtons() break; } - if (_showActionButton) - { - _button5.Text = _actionButtonText; - _button5.Visible = true; - _button5.Enabled = true; - _button5.KryptonCommand = _actionButtonCommand; - } - // Do we ignore the Alt+F4 on the buttons? if (!ControlBox) { @@ -469,37 +395,25 @@ private void UpdateButtons() _button2.IgnoreAltF4 = true; _button3.IgnoreAltF4 = true; _button4.IgnoreAltF4 = true; - _button5.IgnoreAltF4 = true; } } private void UpdateDefault() { - switch (_defaultButton) + AcceptButton = _defaultButton switch { - case KryptonMessageBoxDefaultButton.Button1: + KryptonMessageBoxDefaultButton.Button1 => //_button1.Select(); - AcceptButton = _button1; - break; - case KryptonMessageBoxDefaultButton.Button2: + _button1, + KryptonMessageBoxDefaultButton.Button2 => //_button2.Select(); - AcceptButton = _button2; - break; - case KryptonMessageBoxDefaultButton.Button3: + _button2, + KryptonMessageBoxDefaultButton.Button3 => //_button3.Select(); - AcceptButton = _button3; - break; - case KryptonMessageBoxDefaultButton.Button4: - AcceptButton = _showHelpButton ? _button4 : _button1; - break; - case KryptonMessageBoxDefaultButton.Button5: - AcceptButton = _showActionButton ? _button5 : _button1; - - break; - default: - AcceptButton = _showHelpButton ? _button4 : _button1; - break; - } + _button3, + KryptonMessageBoxDefaultButton.Button4 => _showHelpButton ? _button4 : _button1, + _ => _showHelpButton ? _button4 : _button1 + }; } private void UpdateHelp() @@ -512,15 +426,19 @@ private void UpdateHelp() MessageButton helpButton = _buttons switch { KryptonMessageBoxButtons.OK => _button2, - KryptonMessageBoxButtons.OKCancel or KryptonMessageBoxButtons.YesNo or KryptonMessageBoxButtons.RetryCancel => _button3, - KryptonMessageBoxButtons.AbortRetryIgnore or KryptonMessageBoxButtons.YesNoCancel => _button4, + KryptonMessageBoxButtons.OKCancel + or KryptonMessageBoxButtons.YesNo + or KryptonMessageBoxButtons.RetryCancel => _button3, + KryptonMessageBoxButtons.AbortRetryIgnore + or KryptonMessageBoxButtons.YesNoCancel + or KryptonMessageBoxButtons.CancelTryContinue => _button4, _ => throw new ArgumentOutOfRangeException() }; if (helpButton != null) { helpButton.Visible = true; helpButton.Enabled = true; - helpButton.Text = KryptonLanguageManager.GeneralToolkitStrings.Help; + helpButton.Text = KryptonManager.Strings.GeneralStrings.Help; helpButton.KeyPress += (_, _) => LaunchHelp(); helpButton.Click += (_, _) => LaunchHelp(); } @@ -537,11 +455,11 @@ private void LaunchHelp() { if (_showOwner != null) { - Control control = FromHandle(_showOwner.Handle); + Control? control = FromHandle(_showOwner.Handle); - MethodInfo? mInfoMethod = control.GetType().GetMethod(nameof(OnHelpRequested), BindingFlags.Instance | BindingFlags.NonPublic, - Type.DefaultBinder, new[] { typeof(HelpEventArgs) }, null)!; - mInfoMethod?.Invoke(control, new object[] { new HelpEventArgs(MousePosition) }); + var mInfoMethod = control!.GetType().GetMethod(nameof(OnHelpRequested), BindingFlags.Instance | BindingFlags.NonPublic, + Type.DefaultBinder, [typeof(HelpEventArgs)], null); + mInfoMethod?.Invoke(control, [new HelpEventArgs(MousePosition)]); if (_helpInfo != null) { if (string.IsNullOrWhiteSpace(_helpInfo.HelpFilePath)) @@ -562,9 +480,8 @@ private void LaunchHelp() } catch { - // Do nothing if failure to send to Parent + // Do nothing } - } private void UpdateSizing(IWin32Window? showOwner) @@ -584,14 +501,22 @@ private Size UpdateMessageSizing(IWin32Window? showOwner) using (Graphics g = CreateGraphics()) { // Find size of the label, with a max of 2/3 screen width - Screen? screen = showOwner != null ? Screen.FromHandle(showOwner.Handle) : Screen.PrimaryScreen; - SizeF scaledMonitorSize = screen.Bounds.Size; - scaledMonitorSize.Width *= 2 / 3.0f; - scaledMonitorSize.Height *= 0.95f; - _messageText.UpdateFont(); - SizeF messageSize = g.MeasureString(_text, _messageText.Font, scaledMonitorSize); + Screen screen = showOwner is IWin32Window window + ? Screen.FromHandle(window.Handle) + : Screen.PrimaryScreen ?? throw new NullReferenceException("Screen.PrimaryScreen returned null"); + + Size scaledMonitorSize = screen.WorkingArea.Size; + scaledMonitorSize.Width = (int)(scaledMonitorSize.Width * 2 / 3.0f); + scaledMonitorSize.Height = (int)(scaledMonitorSize.Height * 0.95f); + + Font textFont = krtbMessageText.StateCommon.Content.GetContentShortTextFont(PaletteState.Normal) ?? KryptonManager.CurrentGlobalPalette!.BaseFont; + Font captionFont = KryptonManager.CurrentGlobalPalette.BaseFont; + + // Measure the string + SizeF messageSize = g.MeasureString(_text, textFont, new SizeF(scaledMonitorSize.Width, scaledMonitorSize.Height)); + // SKC: Don't forget to add the TextExtra into the calculation - SizeF captionSize = g.MeasureString($@"{_caption} {TextExtra}", _messageText.Font, scaledMonitorSize); + SizeF captionSize = TextRenderer.MeasureText($"{_caption} {TextExtra}", captionFont, scaledMonitorSize); var messageXSize = Math.Max(messageSize.Width, captionSize.Width); // Work out DPI adjustment factor @@ -600,15 +525,21 @@ private Size UpdateMessageSizing(IWin32Window? showOwner) messageSize.Width = messageXSize * factorX; messageSize.Height *= factorY; - // Always add on ad extra 5 pixels as sometimes the measure size does not draw the last - // character it contains, this ensures there is always definitely enough space for it all - messageSize.Width += 5; textSize = Size.Ceiling(messageSize); } - return new Size(textSize.Width + _messageIcon.Width + _messageIcon.Margin.Left + _messageIcon.Margin.Right + - _messageText.Margin.Left + _messageText.Margin.Right, - Math.Max(_messageIcon.Height + 10, textSize.Height)); + // Calculate the size of the icon area and text area including margins + Padding textPadding = krtbMessageText.StateCommon.Content.GetContentPadding(PaletteState.Normal); + Padding textAreaAllMargin = Padding.Add(textPadding, kpnlContentArea.Margin); + + Size iconArea = new Size(_messageIcon.Width + _messageIcon.Margin.Left + _messageIcon.Margin.Right, + _messageIcon.Height + _messageIcon.Margin.Top + _messageIcon.Margin.Bottom); + + Size textArea = new Size(textSize.Width + textAreaAllMargin.Left + textAreaAllMargin.Right, + textSize.Height + textAreaAllMargin.Top + textAreaAllMargin.Bottom); + + return new Size(textArea.Width + iconArea.Width, + Math.Max(iconArea.Height, textArea.Height)); } private Size UpdateButtonsSizing() @@ -617,14 +548,14 @@ private Size UpdateButtonsSizing() // Button1 is always visible Size button1Size = _button1.GetPreferredSize(Size.Empty); - var maxButtonSize = button1Size with { Width = button1Size.Width + GAP }; + var maxButtonSize = button1Size with { Width = button1Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING }; // If Button2 is visible if (_button2.Enabled) { numButtons++; Size button2Size = _button2.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, button2Size.Width + GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button2Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, button2Size.Height); } @@ -633,7 +564,7 @@ private Size UpdateButtonsSizing() { numButtons++; Size button3Size = _button3.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, button3Size.Width + GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button3Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, button3Size.Height); } // If Button4 is visible @@ -641,65 +572,53 @@ private Size UpdateButtonsSizing() { numButtons++; Size button4Size = _button4.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, button4Size.Width + GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button4Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, button4Size.Height); } - // If Action button is visible - if (_button5.Enabled) - { - numButtons++; - Size actionButtonSize = _button5.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, actionButtonSize.Width + GAP); - maxButtonSize.Height = Math.Max(maxButtonSize.Height, actionButtonSize.Height); - } - // Start positioning buttons 10 pixels from right edge - var right = _panelButtons.Right - GAP; + var right = _panelButtons.Right - GlobalStaticValues.GLOBAL_BUTTON_PADDING; - var left = _panelButtons.Left - GAP; - - // If Action button is visible - if (_button5.Enabled) - { - _button5.Location = new Point(left - maxButtonSize.Width, GAP); - _button5.Size = maxButtonSize; - left -= maxButtonSize.Width + GAP; - } + //var left = _panelButtons.Left - GlobalStaticValues.GLOBAL_BUTTON_PADDING; // If Button4 is visible if (_button4.Enabled) { - _button4.Location = new Point(right - maxButtonSize.Width, GAP); + _button4.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _button4.Size = maxButtonSize; - right -= maxButtonSize.Width + GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } // If Button3 is visible if (_button3.Enabled) { - _button3.Location = new Point(right - maxButtonSize.Width, GAP); + _button3.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _button3.Size = maxButtonSize; - right -= maxButtonSize.Width + GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } // If Button2 is visible if (_button2.Enabled) { - _button2.Location = new Point(right - maxButtonSize.Width, GAP); + _button2.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _button2.Size = maxButtonSize; - right -= maxButtonSize.Width + GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } // Button1 is always visible - _button1.Location = new Point(right - maxButtonSize.Width, GAP); + _button1.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _button1.Size = maxButtonSize; // Size the panel for the buttons - _panelButtons.Size = new Size((maxButtonSize.Width * numButtons) + (GAP * (numButtons + 1)), maxButtonSize.Height + (GAP * 2)); + _panelButtons.Size = new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); // Button area is the number of buttons with gaps between them and 10 pixels around all edges - return new Size((maxButtonSize.Width * numButtons) + (GAP * (numButtons + 1)), maxButtonSize.Height + (GAP * 2)); + return new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + } + + private void OnFormClosed(object sender, FormClosedEventArgs e) + { + _krtbNativeWindow.ReleaseHandle(); } private void AnyKeyDown(object sender, KeyEventArgs e) @@ -711,138 +630,51 @@ private void AnyKeyDown(object sender, KeyEventArgs e) { Close(); } - else if (!e.Control - || (e.KeyCode != Keys.C) - ) + else if (e.KeyData == (Keys.Control | Keys.C)) { - return; - } - - const string DIVIDER = @"---------------------------"; - const string BUTTON_TEXT_SPACER = @" "; + const string DIVIDER = @"---------------------------"; + const string BUTTON_TEXT_SPACER = @" "; + // Pressing Ctrl+C should copy message text into the clipboard + var sb = new StringBuilder(); - // Pressing Ctrl+C should copy message text into the clipboard - var sb = new StringBuilder(); - - sb.AppendLine(DIVIDER); - sb.AppendLine(Text); - sb.AppendLine(DIVIDER); - sb.AppendLine(_messageText.Text); - sb.AppendLine(DIVIDER); - sb.Append(_button1.Text).Append(BUTTON_TEXT_SPACER); - if (_button2.Enabled) - { - sb.Append(_button2.Text).Append(BUTTON_TEXT_SPACER); - if (_button3.Enabled) + sb.AppendLine(DIVIDER); + sb.AppendLine(Text); + sb.AppendLine(DIVIDER); + sb.AppendLine(krtbMessageText.Text); + sb.AppendLine(DIVIDER); + sb.Append(_button1.Text).Append(BUTTON_TEXT_SPACER); + if (_button2.Enabled) { - sb.Append(_button3.Text).Append(BUTTON_TEXT_SPACER); - } - - if (_button4.Enabled) - { - sb.Append(_button4.Text).Append(BUTTON_TEXT_SPACER); - } - } - - sb.AppendLine(string.Empty); - sb.AppendLine(DIVIDER); - - Clipboard.SetText(sb.ToString(), TextDataFormat.Text); - Clipboard.SetText(sb.ToString(), TextDataFormat.UnicodeText); - } - - /// Setups the action button UI. - /// if set to true [visible]. - private void SetupActionButtonUI(bool visible) - { - _button5.Visible = visible; - - _button5.Enabled = visible; - - _button5.Click += (sender, args) => - { - try - { - _actionButtonCommand?.PerformExecute(); - } - catch (Exception e) - { - Debug.Assert(true, e.StackTrace); - - DialogResult = DialogResult.None; - } - }; - } + sb.Append(_button2.Text).Append(BUTTON_TEXT_SPACER); + if (_button3.Enabled) + { + sb.Append(_button3.Text).Append(BUTTON_TEXT_SPACER); + } - private void LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - try - { - if (_linkLabelCommand != null) - { - _linkLabelCommand.PerformExecute(); - } - else if (_linkLaunchArgument != null) - { - Process.Start(_linkLaunchArgument); + if (_button4.Enabled) + { + sb.Append(_button4.Text).Append(BUTTON_TEXT_SPACER); + } } - } - catch (Exception exception) - { - ExceptionHandler.CaptureException(exception); - } - } - /// Updates the type of the content area. - /// Type of the content area. - private void UpdateContentAreaType(MessageBoxContentAreaType? contentAreaType) - { - switch (contentAreaType) - { - case MessageBoxContentAreaType.Normal: - _linkLabelMessageText.Visible = false; + sb.AppendLine(string.Empty); + sb.AppendLine(DIVIDER); - _messageText.Visible = true; - break; - case MessageBoxContentAreaType.LinkLabel: - _linkLabelMessageText.Visible = true; - - _messageText.Visible = false; - break; + Clipboard.SetText(sb.ToString(), TextDataFormat.Text); + Clipboard.SetText(sb.ToString(), TextDataFormat.UnicodeText); } } - private void UpdateContentAreaTextAlignment(MessageBoxContentAreaType? contentAreaType, ContentAlignment? messageTextAlignment) - { - switch (contentAreaType) - { - case MessageBoxContentAreaType.Normal: - _messageText.TextAlign = messageTextAlignment ?? ContentAlignment.MiddleLeft; - break; - case MessageBoxContentAreaType.LinkLabel: - _linkLabelMessageText.TextAlign = messageTextAlignment ?? ContentAlignment.MiddleLeft; - break; - case null: - _messageText.TextAlign = messageTextAlignment ?? ContentAlignment.MiddleLeft; - break; - default: - throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); - } - } - - private void UpdateContentLinkArea(LinkArea? contentLinkArea) - { - if (contentLinkArea != null) - { - _linkLabelMessageText.LinkArea = (LinkArea)contentLinkArea; - } - } + private void ShowCloseButton(bool? showCloseButton) => CloseBox = showCloseButton ?? true; #endregion } #region Types - internal class HelpInfo + /// + /// + /// + public class HelpInfo { #region Identity @@ -958,4 +790,4 @@ protected override void WndProc(ref Message m) } #endregion } -} +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.Designer.cs similarity index 69% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.Designer.cs rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.Designer.cs index b123d4350..c05a72cd5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMessageBoxForm.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.Designer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -13,7 +13,7 @@ namespace Krypton.Toolkit { - partial class KryptonMessageBoxForm + partial class VisualMessageBoxFormDep { /// /// Required designer variable. @@ -48,20 +48,19 @@ private void InitializeComponent() this._button3 = new Krypton.Toolkit.MessageButton(); this._button1 = new Krypton.Toolkit.MessageButton(); this._button2 = new Krypton.Toolkit.MessageButton(); - this._button5 = new Krypton.Toolkit.MessageButton(); this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this._panelContentArea = new Krypton.Toolkit.KryptonPanel(); - this._messageText = new Krypton.Toolkit.KryptonWrapLabel(); - this._linkLabelMessageText = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.kpnlContentArea = new Krypton.Toolkit.KryptonPanel(); + this.krtbMessageText = new Krypton.Toolkit.KryptonRichTextBox(); + this.klwlblMessageText = new Krypton.Toolkit.KryptonLinkWrapLabel(); ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).BeginInit(); this._panelButtons.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); this.kryptonPanel1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this._panelContentArea)).BeginInit(); - this._panelContentArea.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).BeginInit(); + this.kpnlContentArea.SuspendLayout(); this.SuspendLayout(); // // _messageIcon @@ -71,7 +70,7 @@ private void InitializeComponent() this._messageIcon.Location = new System.Drawing.Point(8, 4); this._messageIcon.Margin = new System.Windows.Forms.Padding(8, 4, 4, 4); this._messageIcon.Name = "_messageIcon"; - this._messageIcon.Size = new System.Drawing.Size(33, 34); + this._messageIcon.Size = new System.Drawing.Size(33, 35); this._messageIcon.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; this._messageIcon.TabIndex = 0; this._messageIcon.TabStop = false; @@ -84,13 +83,12 @@ private void InitializeComponent() this._panelButtons.Controls.Add(this._button3); this._panelButtons.Controls.Add(this._button1); this._panelButtons.Controls.Add(this._button2); - this._panelButtons.Controls.Add(this._button5); this._panelButtons.Dock = System.Windows.Forms.DockStyle.Fill; - this._panelButtons.Location = new System.Drawing.Point(0, 42); + this._panelButtons.Location = new System.Drawing.Point(0, 43); this._panelButtons.Margin = new System.Windows.Forms.Padding(0); this._panelButtons.Name = "_panelButtons"; this._panelButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; - this._panelButtons.Size = new System.Drawing.Size(183, 21); + this._panelButtons.Size = new System.Drawing.Size(203, 21); this._panelButtons.TabIndex = 0; // // _borderEdge @@ -100,7 +98,7 @@ private void InitializeComponent() this._borderEdge.Location = new System.Drawing.Point(0, 0); this._borderEdge.Margin = new System.Windows.Forms.Padding(2); this._borderEdge.Name = "_borderEdge"; - this._borderEdge.Size = new System.Drawing.Size(183, 1); + this._borderEdge.Size = new System.Drawing.Size(203, 1); this._borderEdge.Text = "kryptonBorderEdge1"; // // _button4 @@ -109,12 +107,13 @@ private void InitializeComponent() this._button4.AutoSize = true; this._button4.Enabled = false; this._button4.IgnoreAltF4 = false; - this._button4.Location = new System.Drawing.Point(183, 0); + this._button4.Location = new System.Drawing.Point(203, 0); this._button4.Margin = new System.Windows.Forms.Padding(0); this._button4.MinimumSize = new System.Drawing.Size(38, 21); this._button4.Name = "_button4"; this._button4.Size = new System.Drawing.Size(38, 23); this._button4.TabIndex = 2; + this._button4.Values.DropDownArrowColor = System.Drawing.Color.Empty; this._button4.Values.Text = "B4"; this._button4.Visible = false; // @@ -124,12 +123,13 @@ private void InitializeComponent() this._button3.AutoSize = true; this._button3.Enabled = false; this._button3.IgnoreAltF4 = false; - this._button3.Location = new System.Drawing.Point(146, 0); + this._button3.Location = new System.Drawing.Point(166, 0); this._button3.Margin = new System.Windows.Forms.Padding(0); this._button3.MinimumSize = new System.Drawing.Size(38, 21); this._button3.Name = "_button3"; this._button3.Size = new System.Drawing.Size(38, 23); this._button3.TabIndex = 2; + this._button3.Values.DropDownArrowColor = System.Drawing.Color.Empty; this._button3.Values.Text = "B3"; this._button3.Visible = false; // @@ -139,12 +139,13 @@ private void InitializeComponent() this._button1.AutoSize = true; this._button1.Enabled = false; this._button1.IgnoreAltF4 = false; - this._button1.Location = new System.Drawing.Point(70, 0); + this._button1.Location = new System.Drawing.Point(90, 0); this._button1.Margin = new System.Windows.Forms.Padding(0); this._button1.MinimumSize = new System.Drawing.Size(38, 21); this._button1.Name = "_button1"; this._button1.Size = new System.Drawing.Size(38, 23); this._button1.TabIndex = 0; + this._button1.Values.DropDownArrowColor = System.Drawing.Color.Empty; this._button1.Values.Text = "B1"; this._button1.Visible = false; // @@ -154,29 +155,16 @@ private void InitializeComponent() this._button2.AutoSize = true; this._button2.Enabled = false; this._button2.IgnoreAltF4 = false; - this._button2.Location = new System.Drawing.Point(108, 0); + this._button2.Location = new System.Drawing.Point(128, 0); this._button2.Margin = new System.Windows.Forms.Padding(0); this._button2.MinimumSize = new System.Drawing.Size(38, 21); this._button2.Name = "_button2"; this._button2.Size = new System.Drawing.Size(38, 23); this._button2.TabIndex = 1; + this._button2.Values.DropDownArrowColor = System.Drawing.Color.Empty; this._button2.Values.Text = "B2"; this._button2.Visible = false; // - // _button5 - // - this._button5.AutoSize = true; - this._button5.Enabled = false; - this._button5.IgnoreAltF4 = false; - this._button5.Location = new System.Drawing.Point(0, 0); - this._button5.Margin = new System.Windows.Forms.Padding(0); - this._button5.MinimumSize = new System.Drawing.Size(38, 21); - this._button5.Name = "_button5"; - this._button5.Size = new System.Drawing.Size(38, 23); - this._button5.TabIndex = 3; - this._button5.Values.Text = "B5"; - this._button5.Visible = false; - // // kryptonPanel1 // this.kryptonPanel1.Controls.Add(this.tableLayoutPanel1); @@ -184,7 +172,7 @@ private void InitializeComponent() this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(2); this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.Size = new System.Drawing.Size(183, 63); + this.kryptonPanel1.Size = new System.Drawing.Size(203, 64); this.kryptonPanel1.TabIndex = 1; // // tableLayoutPanel1 @@ -195,7 +183,7 @@ private void InitializeComponent() this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel1.Controls.Add(this._panelButtons, 0, 1); this.tableLayoutPanel1.Controls.Add(this._messageIcon, 0, 0); - this.tableLayoutPanel1.Controls.Add(this._panelContentArea, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.kpnlContentArea, 1, 0); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(2); @@ -203,65 +191,66 @@ private void InitializeComponent() this.tableLayoutPanel1.RowCount = 2; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle()); - this.tableLayoutPanel1.Size = new System.Drawing.Size(183, 63); + this.tableLayoutPanel1.Size = new System.Drawing.Size(203, 64); this.tableLayoutPanel1.TabIndex = 0; // - // _panelContentArea + // kpnlContentArea // - this._panelContentArea.Controls.Add(this._messageText); - this._panelContentArea.Controls.Add(this._linkLabelMessageText); - this._panelContentArea.Dock = System.Windows.Forms.DockStyle.Fill; - this._panelContentArea.Location = new System.Drawing.Point(48, 3); - this._panelContentArea.Name = "_panelContentArea"; - this._panelContentArea.Size = new System.Drawing.Size(132, 36); - this._panelContentArea.TabIndex = 1; + this.kpnlContentArea.Controls.Add(this.krtbMessageText); + this.kpnlContentArea.Controls.Add(this.klwlblMessageText); + this.kpnlContentArea.Dock = System.Windows.Forms.DockStyle.Fill; + this.kpnlContentArea.Location = new System.Drawing.Point(49, 12); + this.kpnlContentArea.Margin = new System.Windows.Forms.Padding(4, 12, 4, 12); + this.kpnlContentArea.Name = "kpnlContentArea"; + this.kpnlContentArea.Size = new System.Drawing.Size(150, 19); + this.kpnlContentArea.TabIndex = 1; // - // _messageText + // krtbMessageText // - this._messageText.AutoSize = false; - this._messageText.Dock = System.Windows.Forms.DockStyle.Fill; - this._messageText.Font = new System.Drawing.Font("Segoe UI", 9F); - this._messageText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - this._messageText.LabelStyle = Krypton.Toolkit.LabelStyle.NormalControl; - this._messageText.Location = new System.Drawing.Point(0, 0); - this._messageText.Margin = new System.Windows.Forms.Padding(4, 0, 0, 0); - this._messageText.Name = "_messageText"; - this._messageText.Size = new System.Drawing.Size(132, 36); - this._messageText.Text = "Message Text"; - this._messageText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.krtbMessageText.DetectUrls = false; + this.krtbMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.krtbMessageText.InputControlStyle = Krypton.Toolkit.InputControlStyle.PanelClient; + this.krtbMessageText.Location = new System.Drawing.Point(0, 0); + this.krtbMessageText.Margin = new System.Windows.Forms.Padding(0); + this.krtbMessageText.Name = "krtbMessageText"; + this.krtbMessageText.ReadOnly = true; + this.krtbMessageText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; + this.krtbMessageText.Size = new System.Drawing.Size(150, 19); + this.krtbMessageText.StateCommon.Border.DrawBorders = Krypton.Toolkit.PaletteDrawBorders.None; + this.krtbMessageText.TabIndex = 0; + this.krtbMessageText.TabStop = false; + this.krtbMessageText.Text = "Message Text\n.\ttabbed"; + this.krtbMessageText.WordWrap = false; // - // _linkLabelMessageText + // klwlblMessageText // - this._linkLabelMessageText.AutoSize = false; - this._linkLabelMessageText.Dock = System.Windows.Forms.DockStyle.Fill; - this._linkLabelMessageText.Font = new System.Drawing.Font("Segoe UI", 9F); - this._linkLabelMessageText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - this._linkLabelMessageText.LabelStyle = Krypton.Toolkit.LabelStyle.NormalControl; - this._linkLabelMessageText.Location = new System.Drawing.Point(0, 0); - this._linkLabelMessageText.Name = "_linkLabelMessageText"; - this._linkLabelMessageText.Size = new System.Drawing.Size(132, 36); - this._linkLabelMessageText.Text = "Message Text"; - this._linkLabelMessageText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - this._linkLabelMessageText.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.LinkClicked); + this.klwlblMessageText.AutoSize = false; + this.klwlblMessageText.Dock = System.Windows.Forms.DockStyle.Fill; + this.klwlblMessageText.LabelStyle = Krypton.Toolkit.LabelStyle.NormalControl; + this.klwlblMessageText.Location = new System.Drawing.Point(0, 0); + this.klwlblMessageText.Name = "klwlblMessageText"; + this.klwlblMessageText.Size = new System.Drawing.Size(150, 19); + this.klwlblMessageText.Text = "Message Text"; + this.klwlblMessageText.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // KryptonMessageBoxForm + // VisualMessageBoxFormDep // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(183, 63); + this.ClientSize = new System.Drawing.Size(203, 64); this.Controls.Add(this.kryptonPanel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.KeyPreview = true; this.Margin = new System.Windows.Forms.Padding(2); this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "KryptonMessageBoxForm"; + this.Name = "VisualMessageBoxFormDep"; this.ShowIcon = false; this.ShowInTaskbar = false; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.TopMost = true; this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.AnyKeyDown); + this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed); ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).EndInit(); this._panelButtons.ResumeLayout(false); @@ -269,8 +258,9 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); this.kryptonPanel1.ResumeLayout(false); this.tableLayoutPanel1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this._panelContentArea)).EndInit(); - this._panelContentArea.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kpnlContentArea)).EndInit(); + this.kpnlContentArea.ResumeLayout(false); + this.kpnlContentArea.PerformLayout(); this.ResumeLayout(false); } @@ -285,9 +275,8 @@ private void InitializeComponent() private KryptonBorderEdge _borderEdge; private KryptonPanel kryptonPanel1; private TableLayoutPanel tableLayoutPanel1; - private MessageButton _button5; - private KryptonPanel _panelContentArea; - private KryptonLinkWrapLabel _linkLabelMessageText; - private KryptonWrapLabel _messageText; + private KryptonPanel kpnlContentArea; + private KryptonLinkWrapLabel klwlblMessageText; + private KryptonRichTextBox krtbMessageText; } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.cs new file mode 100644 index 000000000..a9f16fae9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.cs @@ -0,0 +1,1290 @@ +#region BSD License +/* + * + * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) + * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +// ReSharper disable InconsistentNaming +// ReSharper disable UnusedParameter.Local + +namespace Krypton.Toolkit +{ + internal partial class VisualMessageBoxFormDep : KryptonForm + { + #region Instance Fields + + private readonly bool _showHelpButton; + private readonly string? _text; + private readonly string? _caption; + private readonly string _applicationPath; + private readonly KryptonMessageBoxButtons _buttons; + private readonly KryptonMessageBoxIcon _kryptonMessageBoxIcon; + private readonly Image? _applicationImage; + private readonly bool? _forceUseOfOperatingSystemIcons; + private readonly KryptonMessageBoxDataDep _messageBoxData; + private readonly bool? _showCloseButton; + + private readonly KryptonMessageBoxDefaultButton _defaultButton; + + // If help information provided, or we are not a service/default desktop application then grab an owner for showing the message box + private readonly IWin32Window? _showOwner; + private readonly HelpInfo? _helpInfo; + private readonly KryptonMessageBoxNativeWindow _krtbNativeWindow; + + // For the LinkLabel option + private readonly MessageBoxContentAreaType? _contentAreaType; + private readonly KryptonCommand? _linkLabelCommand; + private readonly ProcessStartInfo? _linkLaunchArgument; + private readonly LinkArea _contentLinkArea; + + private KryptonMessageBoxResult _messageBoxResult; + + #endregion + + #region Public + + public KryptonMessageBoxResult MessageBoxResult + { + get => _messageBoxResult; + set => _messageBoxResult = value; + } + + #endregion + + #region Identity + + public VisualMessageBoxFormDep() + { + InitializeComponent(); + } + + internal VisualMessageBoxFormDep(IWin32Window? showOwner, string? text, string? caption, + KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton, + HelpInfo? helpInfo, bool? showCtrlCopy, + bool? showHelpButton, + Image? applicationImage, + string? applicationPath, + MessageBoxContentAreaType? contentAreaType, + KryptonCommand? linkLabelCommand, + ProcessStartInfo? linkLaunchArgument, + LinkArea? contentLinkArea, + bool? forceUseOfOperatingSystemIcons, + bool? showCloseButton) + { + // Store incoming values + _text = CommonHelper.NormalizeLineBreaks(text ?? string.Empty); + _caption = caption; + _buttons = buttons; + _kryptonMessageBoxIcon = icon; + _defaultButton = defaultButton; + _helpInfo = helpInfo; + _showOwner = showOwner; + _showHelpButton = showHelpButton ?? (helpInfo != null); + _applicationImage = applicationImage; + _applicationPath = applicationPath ?? string.Empty; + _contentAreaType = contentAreaType ?? MessageBoxContentAreaType.Normal; + _linkLabelCommand = linkLabelCommand ?? new KryptonCommand(); + _contentLinkArea = string.IsNullOrEmpty(text) + ? new LinkArea(0, 0) + : contentLinkArea ?? new LinkArea(0, text!.Length); + _linkLaunchArgument = linkLaunchArgument ?? new ProcessStartInfo(); + _forceUseOfOperatingSystemIcons = forceUseOfOperatingSystemIcons ?? false; + _showCloseButton = showCloseButton ?? true; + _krtbNativeWindow = new(); + + // Create the form contents + InitializeComponent(); + + // Hookup the native window on the KRTB, only after IntializeComponent(). + _krtbNativeWindow.AssignHandle(krtbMessageText.RichTextBox.Handle); + + // Default Cursor for the KRTB when the cursors hovers over it + krtbMessageText.RichTextBox.Cursor = Cursors.Arrow; + + // #1692 text font colour for input controls does not work correct on KMBees when using dark themes. + // Set the text colour to the one a control uses. + krtbMessageText.StateCommon.Content.Color1 = GlobalStaticValues.KryptonMessageBoxRichTextBoxTextColor; + + // Update contents to match requirements + UpdateText(); + UpdateIcon(); + UpdateButtons(); + UpdateDefault(); + UpdateHelp(); + UpdateTextExtra(showCtrlCopy); + UpdateContentAreaType(contentAreaType); + UpdateContentLinkArea(contentLinkArea); + + // Finally calculate and set form sizing + UpdateSizing(showOwner); + + ShowCloseButton(showCloseButton); + } + + public VisualMessageBoxFormDep(KryptonMessageBoxDataDep messageBoxData) + { + // Store incoming values + _messageBoxData = messageBoxData; + + // Create the form contents + InitializeComponent(); + + RightToLeftLayout = _messageBoxData.Options.HasFlag(MessageBoxOptions.RtlReading); + + // Update contents to match requirements + UpdateText(_messageBoxData.Caption, _messageBoxData.MessageText, _messageBoxData.Options, _messageBoxData.MessageContentAreaType); + UpdateIcon(_messageBoxData.Icon); + UpdateButtons(_messageBoxData.Buttons); + UpdateDefault(_messageBoxData.DefaultButton); + UpdateHelp(_messageBoxData.ShowHelpButton); + UpdateTextExtra(_messageBoxData.ShowCtrlCopy); + UpdateContentAreaType(_messageBoxData.MessageContentAreaType); + UpdateContentLinkArea(_messageBoxData.ContentLinkArea); + + ShowCloseButton(_messageBoxData.ShowCloseButton); + + // Finally calculate and set form sizing + UpdateSizing(_messageBoxData.Owner); + } + + #endregion Identity + + #region Implementation + + private void UpdateText(string? caption, string? text, MessageBoxOptions options, MessageBoxContentAreaType? contentAreaType) + { + // Set the text of the form + Text = string.IsNullOrEmpty(caption) ? string.Empty : caption?.Split(Environment.NewLine.ToCharArray())[0]; + + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + krtbMessageText.Text = text; + + krtbMessageText.RightToLeft = options.HasFlag(MessageBoxOptions.RightAlign) ? RightToLeft.Yes : + options.HasFlag(MessageBoxOptions.RtlReading) ? RightToLeft.Inherit : RightToLeft.No; + break; + case MessageBoxContentAreaType.LinkLabel: + klwlblMessageText.Text = text; + + klwlblMessageText.RightToLeft = options.HasFlag(MessageBoxOptions.RightAlign) + ? + RightToLeft.Yes + : options.HasFlag(MessageBoxOptions.RtlReading) + ? RightToLeft.Inherit + : RightToLeft.No; + break; + case null: + krtbMessageText.Text = text; + + krtbMessageText.RightToLeft = options.HasFlag(MessageBoxOptions.RightAlign) ? RightToLeft.Yes : + options.HasFlag(MessageBoxOptions.RtlReading) ? RightToLeft.Inherit : RightToLeft.No; + break; + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private void UpdateText() + { + Text = string.IsNullOrEmpty(_caption) ? string.Empty : _caption?.Split(Environment.NewLine.ToCharArray())[0]; + + if (_contentAreaType == MessageBoxContentAreaType.Normal) + { + krtbMessageText.Text = _text; + } + else + { + klwlblMessageText.Text = _text; + } + } + + private void UpdateTextExtra(bool? showCtrlCopy) + { + if (!showCtrlCopy.HasValue) + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.Error: + case KryptonMessageBoxIcon.Exclamation: + showCtrlCopy = true; + break; + } + } + + if (showCtrlCopy == true) + { + TextExtra = @"Ctrl+c to copy"; + } + } + + private void UpdateIcon(KryptonMessageBoxIcon icon) + { + if (OSUtilities.IsAtLeastWindowsEleven) + { + switch (icon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.Question_Windows_11; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = MessageBoxImageResources.Asterisk_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.Critical_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.Information_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Shield: + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + break; + case KryptonMessageBoxIcon.WindowsLogo: + _messageIcon.Image = MessageBoxImageResources.Windows11; + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + else + { + switch (icon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.SystemHand: + _messageIcon.Image = SystemIcons.Hand.ToBitmap(); + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.GenericQuestion; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.SystemQuestion: + _messageIcon.Image = SystemIcons.Question.ToBitmap(); + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.SystemExclamation: + _messageIcon.Image = SystemIcons.Warning.ToBitmap(); + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = OSUtilities.IsAtLeastWindowsEleven + ? MessageBoxImageResources.Asterisk_Windows_11 + : MessageBoxImageResources.GenericAsterisk; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.SystemAsterisk: + _messageIcon.Image = SystemIcons.Asterisk.ToBitmap(); + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.GenericCritical; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.GenericInformation; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + } + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_10; + } + else + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_7; + } + + break; + case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on an image instead + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = MessageBoxImageResources.Windows11; + } + // Windows 10 + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = MessageBoxImageResources.Windows_8_and_10_Logo; + } + else + { + _messageIcon.Image = SystemIcons.WinLogo.ToBitmap(); + } + + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath) + ?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + + _messageIcon.Visible = (_kryptonMessageBoxIcon != KryptonMessageBoxIcon.None); + } + + private void UpdateIcon() + { + if (OSUtilities.IsAtLeastWindowsEleven) + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.Question_Windows_11; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = MessageBoxImageResources.Asterisk_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.Critical_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.Warning_Windows_11; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.Information_Windows_11; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Shield: + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + break; + case KryptonMessageBoxIcon.WindowsLogo: + _messageIcon.Image = MessageBoxImageResources.Windows11; + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + else + { + switch (_kryptonMessageBoxIcon) + { + case KryptonMessageBoxIcon.None: + // Windows XP and before will Beep, Vista and above do not! + if (GlobalStaticValues.OS_MAJOR_VERSION < 6) + { + SystemSounds.Beep.Play(); + } + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = MessageBoxImageResources.GenericHand; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.SystemHand: + _messageIcon.Image = SystemIcons.Hand.ToBitmap(); + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = MessageBoxImageResources.GenericQuestion; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.SystemQuestion: + _messageIcon.Image = SystemIcons.Question.ToBitmap(); + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.SystemExclamation: + _messageIcon.Image = SystemIcons.Warning.ToBitmap(); + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = OSUtilities.IsAtLeastWindowsEleven + ? MessageBoxImageResources.Asterisk_Windows_11 + : MessageBoxImageResources.GenericAsterisk; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.SystemAsterisk: + _messageIcon.Image = SystemIcons.Asterisk.ToBitmap(); + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = MessageBoxImageResources.GenericStop; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = MessageBoxImageResources.GenericCritical; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = MessageBoxImageResources.GenericWarning; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = MessageBoxImageResources.GenericInformation; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_11; + } + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_10; + } + else + { + _messageIcon.Image = UACShieldIconResources.UAC_Shield_Windows_7; + } + break; + case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on an image instead + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = MessageBoxImageResources.Windows11; + } + // Windows 10 + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = MessageBoxImageResources.Windows_8_and_10_Logo; + } + else + { + _messageIcon.Image = SystemIcons.WinLogo.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.Application: + if (_applicationImage != null) + { + _messageIcon.Image = _applicationImage; + } + else if (!string.IsNullOrEmpty(_applicationPath)) + { + Image? sourceImage = GraphicsExtensions.ExtractIconFromFilePath(_applicationPath)?.ToBitmap(); + Image? scaledImage = GraphicsExtensions.ScaleImage(sourceImage, new Size(32, 32)); + + _messageIcon.Image = scaledImage; + } + else + { + // Fall back to defaults + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + } + break; + case KryptonMessageBoxIcon.SystemApplication: + _messageIcon.Image = SystemIcons.Application.ToBitmap(); + break; + } + } + _messageIcon.Visible = (_kryptonMessageBoxIcon != KryptonMessageBoxIcon.None); + } + + private void UpdateButtons() + { + switch (_buttons) + { + case KryptonMessageBoxButtons.OK: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button1.DialogResult = DialogResult.OK; + _button1.Visible = true; + _button1.Enabled = true; + break; + case KryptonMessageBoxButtons.OKCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.OK; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.YesNo: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.YesNoCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button3.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + case KryptonMessageBoxButtons.RetryCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Retry; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.AbortRetryIgnore: + _button1.Text = KryptonManager.Strings.GeneralStrings.Abort; + _button2.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore; + _button1.DialogResult = DialogResult.Abort; + _button2.DialogResult = DialogResult.Retry; + _button3.DialogResult = DialogResult.Ignore; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.CancelTryContinue: + _button1.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button2.Text = KryptonManager.Strings.GeneralStrings.TryAgain; + _button3.Text = KryptonManager.Strings.GeneralStrings.Continue; + _button1.DialogResult = DialogResult.Cancel; +#if NET6_0_OR_GREATER + _button2.DialogResult = DialogResult.TryAgain; + _button3.DialogResult = DialogResult.Continue; +#else + _button2.DialogResult = (DialogResult)10; + _button3.DialogResult = (DialogResult)11; +#endif + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + } + + // Do we ignore the Alt+F4 on the buttons? + if (!ControlBox) + { + _button1.IgnoreAltF4 = true; + _button2.IgnoreAltF4 = true; + _button3.IgnoreAltF4 = true; + _button4.IgnoreAltF4 = true; + } + } + + private void UpdateButtons(KryptonMessageBoxButtons buttons) + { + switch (buttons) + { + case KryptonMessageBoxButtons.OK: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button1.DialogResult = DialogResult.OK; + _button1.Visible = true; + _button1.Enabled = true; + break; + case KryptonMessageBoxButtons.OKCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.OK; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.OK; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.YesNo: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.YesNoCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Yes; + _button2.Text = KryptonManager.Strings.GeneralStrings.No; + _button3.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Yes; + _button2.DialogResult = DialogResult.No; + _button3.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + case KryptonMessageBoxButtons.RetryCancel: + _button1.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button2.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button1.DialogResult = DialogResult.Retry; + _button2.DialogResult = DialogResult.Cancel; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + break; + case KryptonMessageBoxButtons.AbortRetryIgnore: + _button1.Text = KryptonManager.Strings.GeneralStrings.Abort; + _button2.Text = KryptonManager.Strings.GeneralStrings.Retry; + _button3.Text = KryptonManager.Strings.GeneralStrings.Ignore; + _button1.DialogResult = DialogResult.Abort; + _button2.DialogResult = DialogResult.Retry; + _button3.DialogResult = DialogResult.Ignore; + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + ControlBox = false; + break; + case KryptonMessageBoxButtons.CancelTryContinue: + _button1.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _button2.Text = KryptonManager.Strings.GeneralStrings.TryAgain; + _button3.Text = KryptonManager.Strings.GeneralStrings.Continue; + _button1.DialogResult = DialogResult.Cancel; +#if NET6_0_OR_GREATER + _button2.DialogResult = DialogResult.TryAgain; + _button3.DialogResult = DialogResult.Continue; +#else + _button2.DialogResult = (DialogResult)10; + _button3.DialogResult = (DialogResult)11; +#endif + _button1.Visible = true; + _button1.Enabled = true; + _button2.Visible = true; + _button2.Enabled = true; + _button3.Visible = true; + _button3.Enabled = true; + break; + } + + // Do we ignore the Alt+F4 on the buttons? + if (!ControlBox) + { + _button1.IgnoreAltF4 = true; + _button2.IgnoreAltF4 = true; + _button3.IgnoreAltF4 = true; + _button4.IgnoreAltF4 = true; + } + } + + private void UpdateDefault(KryptonMessageBoxDefaultButton? defaultButton) + { + switch (defaultButton) + { + case KryptonMessageBoxDefaultButton.Button1: + //_button1.Select(); + AcceptButton = _button1; + break; + case KryptonMessageBoxDefaultButton.Button2: + //_button2.Select(); + AcceptButton = _button2; + break; + case KryptonMessageBoxDefaultButton.Button3: + //_button3.Select(); + AcceptButton = _button3; + break; + case KryptonMessageBoxDefaultButton.Button4: + AcceptButton = _showHelpButton ? _button4 : _button1; + break; + case null: + AcceptButton = _button1; + break; + default: + AcceptButton = _showHelpButton ? _button4 : _button1; + break; + } + } + + private void UpdateDefault() + { + switch (_defaultButton) + { + case KryptonMessageBoxDefaultButton.Button1: + //_button1.Select(); + AcceptButton = _button1; + break; + case KryptonMessageBoxDefaultButton.Button2: + //_button2.Select(); + AcceptButton = _button2; + break; + case KryptonMessageBoxDefaultButton.Button3: + //_button3.Select(); + AcceptButton = _button3; + break; + case KryptonMessageBoxDefaultButton.Button4: + AcceptButton = _showHelpButton ? _button4 : _button1; + break; + default: + AcceptButton = _showHelpButton ? _button4 : _button1; + break; + } + } + + private void UpdateHelp(bool? showHelpButton) + { + if (showHelpButton != null) + { + return; + } + + MessageButton helpButton = _buttons switch + { + KryptonMessageBoxButtons.OK => _button2, + KryptonMessageBoxButtons.OKCancel or KryptonMessageBoxButtons.YesNo or KryptonMessageBoxButtons.RetryCancel => _button3, + KryptonMessageBoxButtons.AbortRetryIgnore or KryptonMessageBoxButtons.YesNoCancel => _button4, + _ => throw new ArgumentOutOfRangeException() + }; + if (helpButton != null) + { + helpButton.Visible = true; + helpButton.Enabled = true; + helpButton.Text = KryptonManager.Strings.GeneralStrings.Help; + + helpButton.KeyPress += (_, _) => LaunchHelp(_messageBoxData.Owner); + + helpButton.Click += (_, _) => LaunchHelp(_messageBoxData.Owner); + } + } + + private void UpdateHelp() + { + if (!_showHelpButton) + { + return; + } + + MessageButton helpButton = _buttons switch + { + KryptonMessageBoxButtons.OK => _button2, + KryptonMessageBoxButtons.OKCancel + or KryptonMessageBoxButtons.YesNo + or KryptonMessageBoxButtons.RetryCancel => _button3, + KryptonMessageBoxButtons.AbortRetryIgnore + or KryptonMessageBoxButtons.YesNoCancel + or KryptonMessageBoxButtons.CancelTryContinue => _button4, + _ => throw new ArgumentOutOfRangeException() + }; + if (helpButton != null) + { + helpButton.Visible = true; + helpButton.Enabled = true; + helpButton.Text = KryptonManager.Strings.GeneralStrings.Help; + helpButton.KeyPress += (_, _) => LaunchHelp(); + helpButton.Click += (_, _) => LaunchHelp(); + } + } + + /// + /// When the user clicks the Help button, the Help file specified in the helpFilePath parameter + /// is opened and the Help keyword topic identified by the keyword parameter is Displayed. + /// The form that owns the message box (or the active form) also receives the HelpRequested event. + /// + private void LaunchHelp(IWin32Window? owner) + { + try + { + if (owner != null) + { + Control? control = FromHandle(owner.Handle); + + var mInfoMethod = control!.GetType().GetMethod(nameof(OnHelpRequested), BindingFlags.Instance | BindingFlags.NonPublic, + Type.DefaultBinder, [typeof(HelpEventArgs)], null); + mInfoMethod?.Invoke(control, [new HelpEventArgs(MousePosition)]); + if (_helpInfo != null) + { + if (string.IsNullOrWhiteSpace(_helpInfo.HelpFilePath)) + { + return; + } + + if (!string.IsNullOrWhiteSpace(_helpInfo.Keyword)) + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Keyword); + } + else + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Navigator, _helpInfo.Param); + } + } + } + } + catch + { + // Do nothing + } + } + + /// + /// When the user clicks the Help button, the Help file specified in the helpFilePath parameter + /// is opened and the Help keyword topic identified by the keyword parameter is Displayed. + /// The form that owns the message box (or the active form) also receives the HelpRequested event. + /// + private void LaunchHelp() + { + try + { + if (_showOwner != null) + { + Control? control = FromHandle(_showOwner.Handle); + + var mInfoMethod = control!.GetType().GetMethod(nameof(OnHelpRequested), BindingFlags.Instance | BindingFlags.NonPublic, + Type.DefaultBinder, [typeof(HelpEventArgs)], null); + mInfoMethod?.Invoke(control, [new HelpEventArgs(MousePosition)]); + if (_helpInfo != null) + { + if (string.IsNullOrWhiteSpace(_helpInfo.HelpFilePath)) + { + return; + } + + if (!string.IsNullOrWhiteSpace(_helpInfo.Keyword)) + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Keyword); + } + else + { + Help.ShowHelp(control, _helpInfo.HelpFilePath, _helpInfo.Navigator, _helpInfo.Param); + } + } + } + } + catch + { + // Do nothing + } + } + + private void UpdateSizing(IWin32Window? showOwner) + { + Size messageSizing = UpdateMessageSizing(showOwner); + Size buttonsSizing = UpdateButtonsSizing(); + + // Size of window is calculated from the client area + ClientSize = new Size(Math.Max(messageSizing.Width, buttonsSizing.Width), + messageSizing.Height + buttonsSizing.Height); + } + + private Size UpdateMessageSizing(IWin32Window? showOwner) + { + // Update size of the message label but with a maximum width + Size textSize; + using (Graphics g = CreateGraphics()) + { + // Find size of the label, with a max of 2/3 screen width + Screen screen = showOwner is IWin32Window window + ? Screen.FromHandle(window.Handle) + : Screen.PrimaryScreen ?? throw new NullReferenceException("Screen.PrimaryScreen returned null"); + + Size scaledMonitorSize = screen.WorkingArea.Size; + scaledMonitorSize.Width = (int)(scaledMonitorSize.Width * 2 / 3.0f); + scaledMonitorSize.Height = (int)(scaledMonitorSize.Height * 0.95f); + + Font textFont = GetMessageTextFont(_contentAreaType); + Font captionFont = KryptonManager.CurrentGlobalPalette.BaseFont; + + // Measure the string + SizeF messageSize = g.MeasureString(_text, textFont, new SizeF(scaledMonitorSize.Width, scaledMonitorSize.Height)); + + // SKC: Don't forget to add the TextExtra into the calculation + SizeF captionSize = TextRenderer.MeasureText($"{_caption} {TextExtra}", captionFont, scaledMonitorSize); + + var messageXSize = Math.Max(messageSize.Width, captionSize.Width); + // Work out DPI adjustment factor + var factorX = g.DpiX > 96 ? (1.0f * g.DpiX / 96) : 1.0f; + var factorY = g.DpiY > 96 ? (1.0f * g.DpiY / 96) : 1.0f; + + messageSize.Width = messageXSize * factorX; + messageSize.Height *= factorY; + + textSize = Size.Ceiling(messageSize); + } + + // Calculate the size of the icon area and text area including margins + Padding textPadding = GetMessageTextPadding(_contentAreaType); + Padding textAreaAllMargin = Padding.Add(textPadding, kpnlContentArea.Margin); + Size iconArea = new Size(_messageIcon.Width + _messageIcon.Margin.Left + _messageIcon.Margin.Right, + _messageIcon.Height + _messageIcon.Margin.Top + _messageIcon.Margin.Bottom); + Size textArea = new Size(textSize.Width + textAreaAllMargin.Left + textAreaAllMargin.Right, + textSize.Height + textAreaAllMargin.Top + textAreaAllMargin.Bottom); + return new Size(textArea.Width + iconArea.Width, + Math.Max(iconArea.Height, textArea.Height)); + } + + private Font GetMessageTextFont(MessageBoxContentAreaType? contentAreaType) + { + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + return krtbMessageText.StateCommon.Content.GetContentShortTextFont(PaletteState.Normal) + ?? KryptonManager.CurrentGlobalPalette.BaseFont; + case MessageBoxContentAreaType.LinkLabel: + klwlblMessageText.UpdateFont(); + return klwlblMessageText.Font + ?? KryptonManager.CurrentGlobalPalette.BaseFont; + case null: + return KryptonManager.CurrentGlobalPalette.BaseFont; + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private Padding GetMessageTextPadding(MessageBoxContentAreaType? contentAreaType) + { + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + return krtbMessageText.StateCommon.Content.GetContentPadding(PaletteState.Normal); + case MessageBoxContentAreaType.LinkLabel: + return klwlblMessageText.Padding; + case null: + return new Padding(0); + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private Size UpdateButtonsSizing() + { + var numButtons = 1; + + // Button1 is always visible + Size button1Size = _button1.GetPreferredSize(Size.Empty); + var maxButtonSize = button1Size with { Width = button1Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING }; + + // If Button2 is visible + if (_button2.Enabled) + { + numButtons++; + Size button2Size = _button2.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button2Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button2Size.Height); + } + + // If Button3 is visible + if (_button3.Enabled) + { + numButtons++; + Size button3Size = _button3.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button3Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button3Size.Height); + } + // If Button4 is visible + if (_button4.Enabled) + { + numButtons++; + Size button4Size = _button4.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, button4Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, button4Size.Height); + } + + // Start positioning buttons 10 pixels from right edge + var right = _panelButtons.Right - GlobalStaticValues.GLOBAL_BUTTON_PADDING; + + //var left = _panelButtons.Left - GlobalStaticValues.GLOBAL_BUTTON_PADDING; + + // If Button4 is visible + if (_button4.Enabled) + { + _button4.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button4.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // If Button3 is visible + if (_button3.Enabled) + { + _button3.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button3.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // If Button2 is visible + if (_button2.Enabled) + { + _button2.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button2.Size = maxButtonSize; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; + } + + // Button1 is always visible + _button1.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + _button1.Size = maxButtonSize; + + // Size the panel for the buttons + _panelButtons.Size = new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + + // Button area is the number of buttons with gaps between them and 10 pixels around all edges + return new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + } + + private void OnFormClosed(object sender, FormClosedEventArgs e) + { + _krtbNativeWindow.ReleaseHandle(); + } + + private void AnyKeyDown(object sender, KeyEventArgs e) + { + // Escape key kills the dialog if we allow it to be closed + if (ControlBox + && (e.KeyCode == Keys.Escape) + ) + { + Close(); + } + else if (e.KeyData == (Keys.Control | Keys.C)) + { + const string DIVIDER = @"---------------------------"; + const string BUTTON_TEXT_SPACER = @" "; + // Pressing Ctrl+C should copy message text into the clipboard + var sb = new StringBuilder(); + + sb.AppendLine(DIVIDER); + sb.AppendLine(Text); + sb.AppendLine(DIVIDER); + sb.AppendLine(klwlblMessageText.Text); + sb.AppendLine(DIVIDER); + sb.Append(_button1.Text).Append(BUTTON_TEXT_SPACER); + if (_button2.Enabled) + { + sb.Append(_button2.Text).Append(BUTTON_TEXT_SPACER); + if (_button3.Enabled) + { + sb.Append(_button3.Text).Append(BUTTON_TEXT_SPACER); + } + + if (_button4.Enabled) + { + sb.Append(_button4.Text).Append(BUTTON_TEXT_SPACER); + } + } + + sb.AppendLine(string.Empty); + sb.AppendLine(DIVIDER); + + Clipboard.SetText(sb.ToString(), TextDataFormat.Text); + Clipboard.SetText(sb.ToString(), TextDataFormat.UnicodeText); + } + } + + private void LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + try + { + if (_linkLabelCommand != null) + { + _linkLabelCommand.PerformExecute(); + } + else if (_linkLaunchArgument != null) + { + Process.Start(_linkLaunchArgument); + } + } + catch (Exception exception) + { + ExceptionHandler.CaptureException(exception, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + } + + /// Updates the type of the content area. + /// Type of the content area. + private void UpdateContentAreaType(MessageBoxContentAreaType? contentAreaType) + { + switch (contentAreaType) + { + case MessageBoxContentAreaType.Normal: + klwlblMessageText.Visible = false; + + krtbMessageText.Visible = true; + break; + case MessageBoxContentAreaType.LinkLabel: + klwlblMessageText.Visible = true; + + krtbMessageText.Visible = false; + break; + case null: + klwlblMessageText.Visible = false; + + krtbMessageText.Visible = true; + break; + default: + throw new ArgumentOutOfRangeException(nameof(contentAreaType), contentAreaType, null); + } + } + + private void UpdateContentLinkArea(LinkArea? contentLinkArea) + { + if (contentLinkArea != null) + { + klwlblMessageText.LinkArea = (LinkArea)contentLinkArea; + } + } + + private void ShowCloseButton(bool? showCloseButton) => CloseBox = showCloseButton ?? true; + + #region KryptonMessageBoxResult Methods + + public KryptonMessageBoxResult ShowMessageBox() => ShowMessageBox(null); + + // ToDo: Expand this method + public KryptonMessageBoxResult ShowMessageBox(IWin32Window? owner) + { + return KryptonMessageBoxResult.Ignore; + } + + #endregion + + #endregion + } + +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMessageBoxFormDep.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/MultilineStringEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditor.cs similarity index 97% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/MultilineStringEditor.cs rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditor.cs index d41f1387f..bd40d9974 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/MultilineStringEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -160,7 +160,7 @@ private void CloseEditor() /// /// The control. /// The event arguments. - private void OnKeyDownTextBox(object sender, KeyEventArgs e) + private void OnKeyDownTextBox(object? sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { @@ -179,7 +179,7 @@ private void OnKeyDownTextBox(object sender, KeyEventArgs e) /// private bool OnGetMinMaxInfo(ref Message m) { - PI.MINMAXINFO minMax = (PI.MINMAXINFO)Marshal.PtrToStructure(m.LParam, typeof(PI.MINMAXINFO)); + var minMax = (PI.MINMAXINFO)Marshal.PtrToStructure(m.LParam, typeof(PI.MINMAXINFO))!; if (!MaximumSize.IsEmpty) { minMax.ptMaxTrackSize.X = MaximumSize.Width; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.Designer.cs similarity index 99% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.Designer.cs rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.Designer.cs index b334c6dcc..0cb366199 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.Designer.cs @@ -1,6 +1,6 @@ namespace Krypton.Toolkit { - partial class KryptonMultilineStringEditorForm + partial class VisualMultilineStringEditorForm { /// /// Required designer variable. @@ -83,7 +83,6 @@ private void InitializeComponent() // kbtnOk // this.kbtnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.kbtnOk.CornerRoundingRadius = -1F; this.kbtnOk.DialogResult = System.Windows.Forms.DialogResult.OK; this.kbtnOk.Location = new System.Drawing.Point(381, 13); this.kbtnOk.Name = "kbtnOk"; @@ -95,7 +94,6 @@ private void InitializeComponent() // kbtnCancel // this.kbtnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.kbtnCancel.CornerRoundingRadius = -1F; this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.kbtnCancel.Location = new System.Drawing.Point(477, 13); this.kbtnCancel.Name = "kbtnCancel"; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.cs similarity index 63% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.cs rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.cs index f20329813..d781446e8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.cs @@ -1,14 +1,14 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - public partial class KryptonMultilineStringEditorForm : KryptonForm + internal partial class VisualMultilineStringEditorForm : KryptonForm { #region Instance Fields @@ -16,40 +16,17 @@ public partial class KryptonMultilineStringEditorForm : KryptonForm private string _headerText; + private string _windowTitle; + private string[]? _contents; private StringCollection? _collection; #endregion - #region Public - - /// Gets or sets a value indicating whether to use a in place of a multiline . - /// true if [use rich text box]; otherwise, false. - [Category(@"Visuals"), DefaultValue(false), Description(@"Use a KryptonRichTextBox in place of a multiline KryptonTextBox.")] - public bool UseRichTextBox { get => _useRichTextBox; set { _useRichTextBox = value; Invalidate(); } } - - /// Gets or sets the header text. - /// The header text. - [Category(@"Visuals"), DefaultValue(@"Enter the strings in the collection (one per line):"), Description(@"The text of the header label.")] - public string HeaderText { get => _headerText; set { _headerText = value; Invalidate(); } } - - /// Gets the contents of the text field. - /// The contents of the text field. - [Category(@"Data"), - DefaultValue(null), - Description(@"The contents of the text field.")] - public string[]? Contents - { - get => _contents; - private set => _contents = value; - } - - #endregion - #region Identity - public KryptonMultilineStringEditorForm() + public VisualMultilineStringEditorForm() { InitializeComponent(); @@ -58,15 +35,27 @@ public KryptonMultilineStringEditorForm() SetupControlsText(); } - public KryptonMultilineStringEditorForm(string[]? contents, StringCollection? collection = null, bool? useRichTextBox = true, string? headerText = @"Enter the strings in the collection (one per line):", string windowTitle = @"String Collection Editor") + public VisualMultilineStringEditorForm(string[]? contents, StringCollection? collection, bool? useRichTextBox, string? headerText, string? windowTitle) { InitializeComponent(); - SetupVariables(contents, collection, useRichTextBox, headerText, windowTitle); + _contents = contents ?? [string.Empty]; + + _collection = collection ?? []; + + _useRichTextBox = useRichTextBox ?? true; + + _headerText = headerText ?? @"Enter the strings in the collection (one per line):"; + + _windowTitle = windowTitle ?? @"String Collection Editor"; + + klblHeader.Text = _headerText; + + Text = _windowTitle; SetupControlsText(); - UpdateInput(contents, collection); + UpdateInput(_contents, _collection); } #endregion @@ -75,25 +64,25 @@ public KryptonMultilineStringEditorForm(string[]? contents, StringCollection? co private void SetupControlsText() { - kbtnCancel.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; + kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; - kbtnOk.Text = KryptonLanguageManager.GeneralToolkitStrings.OK; + kbtnOk.Text = KryptonManager.Strings.GeneralStrings.OK; - kcRichTextBoxCopy.Text = KryptonLanguageManager.CustomToolkitStrings.Copy; + kcRichTextBoxCopy.Text = KryptonManager.Strings.ToolBarStrings.Copy; - kcRichTextBoxCut.Text = KryptonLanguageManager.CustomToolkitStrings.Cut; + kcRichTextBoxCut.Text = KryptonManager.Strings.ToolBarStrings.Cut; - kcRichTextBoxPaste.Text = KryptonLanguageManager.CustomToolkitStrings.Paste; + kcRichTextBoxPaste.Text = KryptonManager.Strings.ToolBarStrings.Paste; - kcRichTextBoxSelectAll.Text = KryptonLanguageManager.CustomToolkitStrings.SelectAll; + kcRichTextBoxSelectAll.Text = KryptonManager.Strings.CustomStrings.SelectAll; - kcTextBoxCopy.Text = KryptonLanguageManager.CustomToolkitStrings.Copy; + kcTextBoxCopy.Text = KryptonManager.Strings.ToolBarStrings.Copy; - kcTextBoxCut.Text = KryptonLanguageManager.CustomToolkitStrings.Cut; + kcTextBoxCut.Text = KryptonManager.Strings.ToolBarStrings.Cut; - kcTextBoxPaste.Text = KryptonLanguageManager.CustomToolkitStrings.Paste; + kcTextBoxPaste.Text = KryptonManager.Strings.ToolBarStrings.Paste; - kcTextBoxSelectAll.Text = KryptonLanguageManager.CustomToolkitStrings.SelectAll; + kcTextBoxSelectAll.Text = KryptonManager.Strings.CustomStrings.SelectAll; } private void SetupVariables(string[]? contents, StringCollection? collection, bool? useRichTextBox, string? headerText, string? windowTitle) @@ -124,7 +113,7 @@ private void InitialSetup() _collection = null; } - private void SetupIputCanvas() + private void SetupInputCanvas() { if (_useRichTextBox) { @@ -183,10 +172,10 @@ private void kbtnOk_Click(object sender, EventArgs e) foreach (var line in krtbContents.Lines) { // TODO: This is not right.. It will only have the last line it ! - Contents = new string[] - { + _contents = + [ line - }; + ]; } } else @@ -194,10 +183,10 @@ private void kbtnOk_Click(object sender, EventArgs e) foreach (var line in ktxtStringCollection.Lines) { // TODO: This is not right.. It will only have the last line it ! - Contents = new string[] - { + _contents = + [ line - }; + ]; } } } @@ -224,7 +213,7 @@ private void kbtnOk_Click(object sender, EventArgs e) IWin32Window? showOwner = owner ?? FromHandle(PI.GetActiveWindow()); - using var kmse = new KryptonMultilineStringEditorForm(input, null, useRichTextBox, headerText, windowTitle); + using var kmse = new VisualMultilineStringEditorForm(input, null, useRichTextBox, headerText, windowTitle); kmse.StartPosition = showOwner == null ? FormStartPosition.CenterParent : FormStartPosition.CenterScreen; @@ -237,15 +226,15 @@ private void kbtnOk_Click(object sender, EventArgs e) { StringCollection? collection; - IWin32Window showOwner = owner ?? FromHandle(PI.GetActiveWindow()); + IWin32Window? showOwner = owner ?? FromHandle(PI.GetActiveWindow()); - using var kmse = new KryptonMultilineStringEditorForm(null, input, useRichTextBox, headerText, windowTitle); + using var kmse = new VisualMultilineStringEditorForm(null, input, useRichTextBox, headerText, windowTitle); kmse.StartPosition = showOwner == null ? FormStartPosition.CenterParent : FormStartPosition.CenterScreen; if (kmse._useRichTextBox) { - collection = new StringCollection(); + collection = []; string[] tmp = kmse.krtbContents.Lines; @@ -253,7 +242,7 @@ private void kbtnOk_Click(object sender, EventArgs e) } else { - collection = new StringCollection(); + collection = []; string[] tmp = kmse.ktxtStringCollection.Lines; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.resx similarity index 100% rename from Source/Krypton Components/Krypton.Toolkit/Controls Visuals/KryptonMultilineStringEditorForm.resx rename to Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualMultilineStringEditorForm.resx diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPanel.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPanel.cs index a47d9dda3..e1fe9c4fc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -142,7 +142,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from any current menu strip - if (base.ContextMenuStrip != null) + if (base.ContextMenuStrip is not null) { base.ContextMenuStrip.Opening -= OnContextMenuStripOpening; base.ContextMenuStrip.Closed -= OnContextMenuClosed; @@ -150,19 +150,19 @@ protected override void Dispose(bool disposing) } // Must unhook from the palette paint event - if (_palette != null) + if (_palette is not null) { _palette.PalettePaint -= OnNeedPaint; _palette.ButtonSpecChanged -= OnButtonSpecChanged; } UnattachGlobalEvents(); - ViewManager.Dispose(); + ViewManager?.Dispose(); _palette = null; Renderer = null; _localPalette = null; - if (Redirector != null) + if (Redirector is not null) { Redirector.Target = null; } @@ -245,7 +245,7 @@ public override ContextMenuStrip? ContextMenuStrip set { // Unhook from any current menu strip - if (base.ContextMenuStrip != null) + if (base.ContextMenuStrip is not null) { base.ContextMenuStrip.Opening -= OnContextMenuStripOpening; base.ContextMenuStrip.Closed -= OnContextMenuClosed; @@ -255,7 +255,7 @@ public override ContextMenuStrip? ContextMenuStrip base.ContextMenuStrip = value; // Hook into the strip being shown (so we can set the correct renderer) - if (base.ContextMenuStrip != null) + if (base.ContextMenuStrip is not null) { base.ContextMenuStrip.Opening += OnContextMenuStripOpening; base.ContextMenuStrip.Closed += OnContextMenuClosed; @@ -277,7 +277,7 @@ public virtual KryptonContextMenu? KryptonContextMenu { if (_kryptonContextMenu != value) { - if (_kryptonContextMenu != null) + if (_kryptonContextMenu is not null) { _kryptonContextMenu.Closed -= OnContextMenuClosed; _kryptonContextMenu.Disposed -= OnKryptonContextMenuDisposed; @@ -285,7 +285,7 @@ public virtual KryptonContextMenu? KryptonContextMenu _kryptonContextMenu = value; - if (_kryptonContextMenu != null) + if (_kryptonContextMenu is not null) { _kryptonContextMenu.Closed += OnContextMenuClosed; _kryptonContextMenu.Disposed += OnKryptonContextMenuDisposed; @@ -484,7 +484,7 @@ protected override void WndProc(ref Message m) if (m.Msg == PI.WM_.CONTEXTMENU) { // Only interested in overriding the behaviour when we have a krypton context menu... - if (KryptonContextMenu != null) + if (KryptonContextMenu is not null) { // Extract the screen mouse position (if might not actually be provided) var mousePt = new Point(PI.LOWORD(m.LParam), PI.HIWORD(m.LParam)); @@ -508,7 +508,7 @@ protected override void WndProc(ref Message m) if (ClientRectangle.Contains(mousePt)) { // Show the context menu - KryptonContextMenu.Show(this, PointToScreen(mousePt)); + KryptonContextMenu?.Show(this, PointToScreen(mousePt)); // We eat the message! return; @@ -581,7 +581,7 @@ public override Color ForeColor /// Reset the internal counters. /// [EditorBrowsable(EditorBrowsableState.Never)] - public void KryptonResetCounters() => ViewManager.ResetCounters(); + public void KryptonResetCounters() => ViewManager?.ResetCounters(); /// /// Gets the number of layout cycles performed since last reset. @@ -589,7 +589,7 @@ public override Color ForeColor [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int KryptonLayoutCounter => ViewManager.LayoutCounter; + public int KryptonLayoutCounter => ViewManager!.LayoutCounter; /// /// Gets the number of paint cycles performed since last reset. @@ -597,7 +597,7 @@ public override Color ForeColor [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public int KryptonPaintCounter => ViewManager.PaintCounter; + public int KryptonPaintCounter => ViewManager!.PaintCounter; #endregion @@ -638,7 +638,7 @@ protected NeedPaintHandler NeedPaintDelegate /// protected void OnNeedPaint(object? sender, [DisallowNull] NeedLayoutEventArgs e) { - Debug.Assert(e != null); + Debug.Assert(e is not null); // Validate incoming reference if (e == null) @@ -704,7 +704,7 @@ protected bool NeedTransparentPaint /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] - public PaletteBase? GetResolvedPalette() => _palette; + public PaletteBase GetResolvedPalette() => _palette!; #endregion @@ -723,10 +723,10 @@ protected bool NeedTransparentPaint protected virtual void OnPaletteChanged(EventArgs e) { // Update the redirector with latest palette - Redirector.Target = _palette; + Redirector!.Target = _palette; // A new palette source means we need to layout and redraw - OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); + OnNeedPaint(Palette!, new NeedLayoutEventArgs(true)); PaletteChanged?.Invoke(this, e); } @@ -737,7 +737,7 @@ protected virtual void OnPaletteChanged(EventArgs e) /// True if paint required; otherwise false. protected virtual bool EvalTransparentPaint() => // Do we have a manager to use for asking about painting? - ViewManager != null && ViewManager.EvalTransparentPaint(Renderer); + ViewManager is not null && ViewManager.EvalTransparentPaint(Renderer!); /// /// Work out if this control needs to use Invoke to force a repaint. @@ -755,9 +755,9 @@ protected virtual bool EvalTransparentPaint() => /// Source of notification. /// An EventArgs containing event data. /// - protected virtual void OnButtonSpecChanged(object sender, [DisallowNull] EventArgs e) + protected virtual void OnButtonSpecChanged(object? sender, [DisallowNull] EventArgs e) { - Debug.Assert(e != null); + Debug.Assert(e is not null); // Validate incoming reference if (e == null) @@ -811,7 +811,7 @@ protected override void OnRightToLeftChanged(EventArgs e) protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { // If we have a defined context menu then need to check for matching shortcut - if (KryptonContextMenu != null) + if (KryptonContextMenu is not null) { if (KryptonContextMenu.ProcessShortcut(keyData)) { @@ -832,7 +832,7 @@ protected override void OnLayout(LayoutEventArgs levent) if (!IsDisposed) { // Do we have a manager to use for laying out? - if (ViewManager != null) + if (ViewManager is not null) { // Prevent infinite loop by looping a maximum number of times var max = 5; @@ -843,7 +843,7 @@ protected override void OnLayout(LayoutEventArgs levent) _layoutDirty = false; // Ask the view to perform a layout - ViewManager.Layout(Renderer); + ViewManager?.Layout(Renderer!); } while (_layoutDirty && (max-- > 0)); @@ -860,13 +860,13 @@ protected override void OnLayout(LayoutEventArgs levent) /// Raises the Paint event. /// /// A PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { // Cannot process a message for a disposed control if (!IsDisposed) { // Do we have a manager to use for painting? - if (ViewManager != null) + if (ViewManager is not null) { // If the layout is dirty, or the size of the control has changed // without a layout being performed, then perform a layout now @@ -879,7 +879,7 @@ protected override void OnPaint(PaintEventArgs e) PaintTransparentBackground(e); // Ask the view to repaint the visual structure - ViewManager.Paint(Renderer, e); + ViewManager?.Paint(Renderer!, e); // Request for a refresh has been serviced _refresh = false; @@ -1065,7 +1065,7 @@ private void SetPalette(PaletteBase? palette) if (palette != _palette) { // Unhook from current palette events - if (_palette != null) + if (_palette is not null) { _palette.PalettePaint -= OnNeedPaint; _palette.ButtonSpecChanged -= OnButtonSpecChanged; @@ -1075,10 +1075,10 @@ private void SetPalette(PaletteBase? palette) _palette = palette; // Get the renderer associated with the palette - Renderer = _palette.GetRenderer(); + Renderer = _palette?.GetRenderer(); // Hook to new palette events - if (_palette != null) + if (_palette is not null) { _palette.PalettePaint += OnNeedPaint; _palette.ButtonSpecChanged += OnButtonSpecChanged; @@ -1086,31 +1086,31 @@ private void SetPalette(PaletteBase? palette) } } - private void PaintTransparentBackground(PaintEventArgs e) + private void PaintTransparentBackground(PaintEventArgs? e) { // Get the parent control for transparent drawing purposes - Control parent = TransparentParent; + Control? parent = TransparentParent; // Do we have a parent control and we need to paint background? - if ((parent != null) && NeedTransparentPaint) + if ((parent is not null) && NeedTransparentPaint) { // Only grab the required reference once - if (_miPTB == null) + if (_miPTB.Equals(null) /*== null*/) { // Use reflection so we can call the Windows Forms internal method for painting parent background _miPTB = typeof(Control).GetMethod(nameof(PaintTransparentBackground), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, CallingConventions.HasThis, - new[] { typeof(PaintEventArgs), typeof(Rectangle), typeof(Region) }, - null); + [typeof(PaintEventArgs), typeof(Rectangle), typeof(Region)], + null)!; } - _miPTB.Invoke(this, new object[] { e, ClientRectangle, null }); + _miPTB.Invoke(this, [e!, ClientRectangle, null!]); } else { // No parent information available, so just use a standard brush - e.Graphics.FillRectangle(SystemBrushes.Control, ClientRectangle); + e?.Graphics.FillRectangle(SystemBrushes.Control, ClientRectangle); } } @@ -1139,7 +1139,7 @@ private void OnPerformRefresh() } } - private void OnGlobalPaletteChanged(object sender, EventArgs e) + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { // We only care if we are using the global palette if (PaletteMode == PaletteMode.Global) @@ -1147,7 +1147,7 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e) // Update ourself with the new global palette _localPalette = null; SetPalette(KryptonManager.CurrentGlobalPalette); - Redirector.Target = _palette; + Redirector!.Target = _palette; // A new palette source means we need to layout and redraw OnNeedPaint(Palette, new NeedLayoutEventArgs(true)); @@ -1158,25 +1158,25 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e) private void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => PerformNeedPaint(true); - private void OnContextMenuStripOpening(object sender, CancelEventArgs e) + private void OnContextMenuStripOpening(object? sender, CancelEventArgs e) { // Get the actual strip instance ContextMenuStrip? cms = base.ContextMenuStrip; // Make sure it has the correct renderer - if (cms != null) + if (cms is not null) { cms.Renderer = CreateToolStripRenderer(); } } - private void OnKryptonContextMenuDisposed(object sender, EventArgs e) => + private void OnKryptonContextMenuDisposed(object? sender, EventArgs e) => // When the current krypton context menu is disposed, we should remove // it to prevent it being used again, as that would just throw an exception // because it has been disposed. KryptonContextMenu = null; - private void OnContextMenuClosed(object sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); + private void OnContextMenuClosed(object? sender, ToolStripDropDownClosedEventArgs e) => ContextMenuClosed(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopup.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopup.cs index b6c2f017a..18661418a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopup.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public VisualPopup(bool shadow) /// /// Drawing renderer. /// Does the popup need a shadow effect. - public VisualPopup(IRenderer? renderer, + public VisualPopup(IRenderer renderer, bool shadow) : this(new ViewManager(), renderer, shadow) { @@ -90,7 +90,7 @@ public VisualPopup(ViewManager viewManager, SetStyle(ControlStyles.Selectable, false); // Cache incoming references - Renderer = renderer; + Renderer = renderer!; ViewManager = viewManager; // Setup the need paint delegate @@ -285,7 +285,7 @@ public virtual bool AllowMouseMove(Message m, Point pt) => /// [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] - public ToolStripRenderer CreateToolStripRenderer() => Renderer.RenderToolStrip(GetResolvedPalette()); + public ToolStripRenderer CreateToolStripRenderer() => Renderer.RenderToolStrip(GetResolvedPalette()!); /// /// Gets the resolved palette to actually use when drawing. @@ -300,7 +300,7 @@ public virtual bool AllowMouseMove(Message m, Point pt) => [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IRenderer? Renderer + public IRenderer Renderer { [DebuggerStepThrough] get; @@ -465,7 +465,7 @@ protected override void OnLayout(LayoutEventArgs lEvent) /// Raises the Paint event. /// /// A PaintEventArgs that contains the event data. - protected override void OnPaint(PaintEventArgs e) + protected override void OnPaint(PaintEventArgs? e) { // Cannot process a message for a disposed control if (!IsDisposed) diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupManager.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupManager.cs index 11e68e3e8..e4d34c3e8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class VisualPopupManager : IMessageFilter { #region Type Declarations - private class PopupStack : Stack {} + private class PopupStack : Stack; #endregion #region Static Fields @@ -60,7 +60,7 @@ public static VisualPopupManager Singleton public bool IsShowingCMS { get; private set; } #endregion - + #region IsTracking /// /// Gets a value indicating if currently tracking a popup. @@ -101,7 +101,7 @@ public VisualPopup? CurrentPopup if (IsTracking) { // Is the current popup matching the type? - if (CurrentPopup.GetType() == t) + if (CurrentPopup?.GetType() == t) { return CurrentPopup; } @@ -131,8 +131,8 @@ public VisualPopup? CurrentPopup /// Popup instance to track. public void StartTracking([DisallowNull] VisualPopup popup) { - Debug.Assert(popup != null); - Debug.Assert(!popup.IsDisposed); + Debug.Assert(popup is not null); + Debug.Assert(!popup!.IsDisposed); Debug.Assert(popup.IsHandleCreated); Debug.Assert(_suspended == 0); @@ -289,7 +289,7 @@ public void ShowContextMenuStrip(ContextMenuStrip cms, /// Reference to ContextMenuStrip. /// Screen position for showing the context menu strip. /// Delegate to call when strip dismissed. - public void ShowContextMenuStrip([DisallowNull] ContextMenuStrip cms, + public void ShowContextMenuStrip([DisallowNull] ContextMenuStrip cms, Point screenPt, EventHandler? cmsFinishDelegate) { @@ -463,7 +463,7 @@ public bool PreFilterMessage(ref Message m) private bool ProcessKeyboard(ref Message m) { // If focus is not inside the current popup... - if (!CurrentPopup.ContainsFocus) + if (!CurrentPopup!.ContainsFocus) { // ...then redirect the message to the popup so it can process all // keyboard input. We just send the message on by altering the handle @@ -481,12 +481,12 @@ private bool ProcessKeyboard(ref Message m) private bool ProcessClientMouseDown(ref Message m) { var processed = false; - + // Convert the client position to screen point Point screenPt = CommonHelper.ClientMouseMessageToScreenPt(m); // Is this message for the current popup? - if (m.HWnd == CurrentPopup.Handle) + if (m.HWnd == CurrentPopup!.Handle) { // Message is intended for the current popup which means we ask the popup if it // would like to kill the entire stack because it knows the mouse down should @@ -574,7 +574,7 @@ private bool ProcessNonClientMouseDown(ref Message m) var screenPt = new Point(PI.LOWORD((int)m.LParam), PI.HIWORD((int)m.LParam)); // Ask the popup if this message causes the entire stack to be killed - if (CurrentPopup.DoesCurrentMouseDownEndAllTracking(m, ScreenPtToClientPt(screenPt))) + if (CurrentPopup!.DoesCurrentMouseDownEndAllTracking(m, ScreenPtToClientPt(screenPt))) { EndAllTracking(); } @@ -608,7 +608,7 @@ private bool ProcessNonClientMouseDown(ref Message m) private bool ProcessMouseMove(ref Message m) { // Is this message for a different window? - if (m.HWnd != CurrentPopup.Handle) + if (m.HWnd != CurrentPopup!.Handle) { // Convert the client position to screen point Point screenPt = CommonHelper.ClientMouseMessageToScreenPt(m); @@ -676,7 +676,7 @@ private bool ProcessMouseMoveWithCMS(ref Message m) // Mouse move is not over a popup, so allow it } - private Point ScreenPtToClientPt(Point pt) => ScreenPtToClientPt(pt, CurrentPopup.Handle); + private Point ScreenPtToClientPt(Point pt) => ScreenPtToClientPt(pt, CurrentPopup!.Handle); private Point ScreenPtToClientPt(Point pt, IntPtr handle) { @@ -741,11 +741,11 @@ private void FilterMessages(bool filter) } } - private void OnCMSClosed(object sender, ToolStripDropDownClosedEventArgs e) + private void OnCMSClosed(object? sender, ToolStripDropDownClosedEventArgs e) { // Unhook event from object var cms = sender as ContextMenuStrip; - cms.Closed -= OnCMSClosed; + cms!.Closed -= OnCMSClosed; // Revoke the suspended state _suspended--; diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupShadow.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupShadow.cs index 0a933add2..ba0e3a009 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupShadow.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupShadow.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,9 +24,9 @@ public class VisualPopupShadow : Form #endregion #region Instance Fields - private GraphicsPath _path1; - private GraphicsPath _path2; - private GraphicsPath _path3; + private GraphicsPath? _path1; + private GraphicsPath? _path2; + private GraphicsPath? _path3; #endregion #region Identity @@ -177,9 +177,9 @@ private void ClearPaths() private void DrawPaths(Graphics g) { - g.FillPath(_brushes[2], _path1); - g.FillPath(_brushes[1],_path2); - g.FillPath(_brushes[0], _path3); + g.FillPath(_brushes[2], _path1!); + g.FillPath(_brushes[1], _path2!); + g.FillPath(_brushes[0], _path3!); } private void DrawShadow(Graphics g, Rectangle area) diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupShadow.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupShadow.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupShadow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupTooltip.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupTooltip.cs index f960a1308..c55ca5385 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupTooltip.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualPopupTooltip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,7 @@ public class VisualPopupToolTip : VisualPopup /// Source of content values. /// Drawing renderer. /// Does the Tooltip need a shadow effect. - public VisualPopupToolTip(PaletteRedirect? redirector, + public VisualPopupToolTip(PaletteRedirect redirector, IContentValues contentValues, IRenderer renderer, bool shadow) @@ -55,18 +55,18 @@ public VisualPopupToolTip(PaletteRedirect? redirector, /// Style for the tooltip content. /// Does the Tooltip need a shadow effect. public VisualPopupToolTip([DisallowNull] PaletteRedirect redirector, - [DisallowNull] IContentValues contentValues, - IRenderer? renderer, - PaletteBackStyle backStyle, - PaletteBorderStyle borderStyle, - PaletteContentStyle contentStyle, - bool shadow) + [DisallowNull] IContentValues contentValues, + IRenderer renderer, + PaletteBackStyle backStyle, + PaletteBorderStyle borderStyle, + PaletteContentStyle contentStyle, + bool shadow) : base(renderer, shadow) { - Debug.Assert(contentValues != null); + Debug.Assert(contentValues is not null); // Remember references needed later - _contentValues = contentValues; + _contentValues = contentValues ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(contentValues))); // Create the triple redirector needed by view elements _palette = new PaletteTripleMetricRedirect(redirector, backStyle, borderStyle, contentStyle, NeedPaintDelegate); @@ -154,7 +154,7 @@ public void ShowRelativeTo(ViewBase target, Point controlMousePosition) } // Get the size the popup would like to be - Size popupSize = ViewManager.GetPreferredSize(Renderer, new Size(100, 10)); + Size popupSize = ViewManager!.GetPreferredSize(Renderer, new Size(100, 10)); Point popupLocation; switch (position.PlacementMode) @@ -214,7 +214,7 @@ public void ShowRelativeTo(ViewBase target, Point controlMousePosition) public void ShowCalculatingSize(Point controlMousePosition) { // Get the size the popup would like to be - Size popupSize = ViewManager.GetPreferredSize(Renderer, Size.Empty); + Size popupSize = ViewManager!.GetPreferredSize(Renderer, Size.Empty); // Find the screen position the popup will be relative to Point currentCursorHotSpot = CommonHelper.CaptureCursor(); @@ -236,6 +236,7 @@ protected override void OnLayout(LayoutEventArgs lEvent) // Need a render context for accessing the renderer using var context = new RenderContext(this, null, ClientRectangle, Renderer); + using var gh = new GraphicsHint(context.Graphics, _palette.Border.GetBorderGraphicsHint(PaletteState.Normal)); // Grab a path that is the outside edge of the border Rectangle borderRect = ClientRectangle; GraphicsPath borderPath1 = Renderer.RenderStandardBorder.GetOutsideBorderPath(context, borderRect, _palette.Border, VisualOrientation.Top, PaletteState.Normal); diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualShadowBase.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualShadowBase.cs index aad2adf3c..0a7475d04 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualShadowBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualShadowBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimple.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimple.cs index d53687c94..02fe74349 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimpleBase.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimpleBase.cs index d21cf7fd6..eb4e33a21 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimpleBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualSimpleBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialog.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialog.cs index 5df2c185b..92eb2de1b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialog.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -66,12 +66,6 @@ protected override void WndProc(ref Message m) } #endregion - #region Static Fields - - private const int BUTTON_GAP = 10; - - #endregion - #region Instance Fields private KryptonTaskDialog? _taskDialog; private readonly string _windowTitle; @@ -81,7 +75,7 @@ protected override void WndProc(ref Message m) private readonly Image? _customMainIcon; private readonly KryptonTaskDialogCommandCollection _radioButtons; private readonly KryptonTaskDialogCommandCollection _commandButtons; - private KryptonTaskDialogCommand _defaultRadioButton; + private KryptonTaskDialogCommand? _defaultRadioButton; private readonly TaskDialogButtons _commonButtons; private readonly TaskDialogButtons _defaultButton; private readonly KryptonMessageBoxIcon _footerIcon; @@ -91,6 +85,7 @@ protected override void WndProc(ref Message m) private readonly string _checkboxText; private bool _checkboxState; private readonly bool _allowDialogClose; + private readonly bool _useNativeOSIcons; // User Interface private KryptonPanel _panelMain; @@ -150,6 +145,7 @@ public VisualTaskDialog(KryptonTaskDialog taskDialog) _checkboxText = taskDialog.CheckboxText; _checkboxState = taskDialog.CheckboxState; _allowDialogClose = taskDialog.AllowDialogClose; + _useNativeOSIcons = taskDialog.UseNativeOSIcons; InitializeComponent(); TextExtra = taskDialog.TextExtra; @@ -269,7 +265,7 @@ private void UpdateIcon() case KryptonMessageBoxIcon.WindowsLogo: // Because Windows 11 displays a generic application icon, // we need to rely on a image instead - if (OSUtilities.IsWindowsEleven) + if (OSUtilities.IsAtLeastWindowsEleven) { _messageIcon.Image = TaskDialogImageResources.TaskDialog_Windows_11_Logo; } @@ -330,7 +326,7 @@ private void UpdateRadioButtons() maxButtonSize.Width = Math.Min(Math.Max(maxButtonSize.Width, 150), 400); // Position the radio buttons in a vertical stack and size owning panel - var offset = new Point(BUTTON_GAP - 1, 2); + var offset = new Point(GlobalStaticValues.GLOBAL_BUTTON_PADDING - 1, 2); foreach (KryptonRadioButton button in _panelMainRadio.Controls) { button.Location = offset; @@ -362,7 +358,7 @@ private void UpdateCommandButtons() { ButtonStyle = ButtonStyle.Command }; - button.StateCommon.Content.Image.ImageH = PaletteRelativeAlign.Near; + button.StateCommon.Content.Image!.ImageH = PaletteRelativeAlign.Near; button.StateCommon.Content.ShortText.TextH = PaletteRelativeAlign.Near; button.StateCommon.Content.LongText.TextH = PaletteRelativeAlign.Near; button.Values.Text = command.Text; @@ -385,7 +381,7 @@ private void UpdateCommandButtons() maxButtonSize.Width = Math.Min(Math.Max(maxButtonSize.Width, 150), 400); // Position the buttons in a vertical stack and size owning panel - var offset = new Point(BUTTON_GAP - 1, 2); + var offset = new Point(GlobalStaticValues.GLOBAL_BUTTON_PADDING - 1, 2); foreach (KryptonButton button in _panelMainCommands.Controls) { button.Location = offset; @@ -411,7 +407,7 @@ private void UpdateButtons() } firstButton = _buttonOK; - _buttonOK.Text = KryptonLanguageManager.GeneralToolkitStrings.OK; + _buttonOK.Text = KryptonManager.Strings.GeneralStrings.OK; _buttonOK.Visible = true; } else @@ -428,7 +424,7 @@ private void UpdateButtons() firstButton ??= _buttonYes; - _buttonYes.Text = KryptonLanguageManager.GeneralToolkitStrings.Yes; + _buttonYes.Text = KryptonManager.Strings.GeneralStrings.Yes; _buttonYes.Visible = true; } else @@ -445,7 +441,7 @@ private void UpdateButtons() firstButton ??= _buttonNo; - _buttonNo.Text = KryptonLanguageManager.GeneralToolkitStrings.No; + _buttonNo.Text = KryptonManager.Strings.GeneralStrings.No; _buttonNo.Visible = true; } else @@ -462,7 +458,7 @@ private void UpdateButtons() firstButton ??= _buttonCancel; - _buttonCancel.Text = KryptonLanguageManager.GeneralToolkitStrings.Cancel; + _buttonCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; _buttonCancel.Visible = true; } else @@ -479,7 +475,7 @@ private void UpdateButtons() firstButton ??= _buttonRetry; - _buttonRetry.Text = KryptonLanguageManager.GeneralToolkitStrings.Retry; + _buttonRetry.Text = KryptonManager.Strings.GeneralStrings.Retry; _buttonRetry.Visible = true; } else @@ -496,7 +492,7 @@ private void UpdateButtons() firstButton ??= _buttonClose; - _buttonClose.Text = KryptonLanguageManager.GeneralToolkitStrings.Close; + _buttonClose.Text = KryptonManager.Strings.GeneralStrings.Close; _buttonClose.Visible = true; } else @@ -532,35 +528,34 @@ private void UpdateFooter() } else { - // TODO: These icons may need to be 16 x 16 switch (_footerIcon) { case KryptonMessageBoxIcon.None: _iconFooter.Visible = false; break; case KryptonMessageBoxIcon.Question: - _iconFooter.Image = MessageBoxImageResources.GenericQuestion; + ChangeFooterIcon(KryptonMessageBoxIcon.Question, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Information: - _iconFooter.Image = MessageBoxImageResources.GenericInformation; + ChangeFooterIcon(KryptonMessageBoxIcon.Information, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Warning: - _iconFooter.Image = MessageBoxImageResources.GenericWarning; + ChangeFooterIcon(KryptonMessageBoxIcon.Warning, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Error: - _iconFooter.Image = MessageBoxImageResources.GenericCritical; + ChangeFooterIcon(KryptonMessageBoxIcon.Error, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Hand: - _iconFooter.Image = MessageBoxImageResources.GenericHand; + ChangeFooterIcon(KryptonMessageBoxIcon.Hand, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Exclamation: - _iconFooter.Image = MessageBoxImageResources.GenericWarning; + ChangeFooterIcon(KryptonMessageBoxIcon.Exclamation, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Asterisk: - _iconFooter.Image = MessageBoxImageResources.GenericAsterisk; + ChangeFooterIcon(KryptonMessageBoxIcon.Asterisk, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Stop: - _iconFooter.Image = MessageBoxImageResources.GenericStop; + ChangeFooterIcon(KryptonMessageBoxIcon.Stop, _useNativeOSIcons); break; case KryptonMessageBoxIcon.Shield: _iconFooter.Image = GraphicsExtensions.ScaleImage(SystemIcons.Shield.ToBitmap(), new Size(16, 16)); @@ -568,18 +563,19 @@ private void UpdateFooter() case KryptonMessageBoxIcon.WindowsLogo: // Because Windows 11 displays a generic application icon, // we need to rely on a image instead - if (OSUtilities.IsWindowsEleven) + if (OSUtilities.IsAtLeastWindowsEleven) { - _iconFooter.Image = MessageBoxImageResources.Windows11; + _iconFooter.Image = TaskDialogImageResources.TaskDialog_Windows_11_Logo; } // Windows 10 else if (OSUtilities.IsWindowsTen) { - _iconFooter.Image = MessageBoxImageResources.Windows_8_and_10_Logo; + _iconFooter.Image = TaskDialogImageResources.TaskDialog_Windows_8_and_10_Logo; } else { - _iconFooter.Image = SystemIcons.WinLogo.ToBitmap(); + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(16, 16)); } break; @@ -590,6 +586,103 @@ private void UpdateFooter() _linkLabelFooter.Text = _footerHyperlink; } + private void ChangeFooterIcon(KryptonMessageBoxIcon icon, bool useNativeOsIcons) + { + switch (icon) + { + case KryptonMessageBoxIcon.Hand: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogHandGeneric; + } + break; + case KryptonMessageBoxIcon.Question: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogQuestionGeneric; + } + break; + case KryptonMessageBoxIcon.Exclamation: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogWarningGeneric; + } + break; + case KryptonMessageBoxIcon.Asterisk: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogAsteriskGeneric; + } + break; + case KryptonMessageBoxIcon.Stop: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogStopGeneric; + } + break; + case KryptonMessageBoxIcon.Error: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Error.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogAsteriskGeneric; + } + break; + case KryptonMessageBoxIcon.Warning: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Warning.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogWarningGeneric; + } + break; + case KryptonMessageBoxIcon.Information: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Information.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogInformationGeneric; + } + break; + default: + throw new ArgumentOutOfRangeException(nameof(icon), icon, null); + } + } + private void UpdateChrome() { if (((_commonButtons & TaskDialogButtons.Cancel) == TaskDialogButtons.Cancel) || _allowDialogClose) @@ -667,7 +760,7 @@ private Size UpdateMainTextSizing() // Resize panel containing the main text Padding panelMessagePadding = _panelMainText.Padding; _panelMainText.Width = Math.Max(_messageText.Size.Width, messageContentSize.Width) + panelMessagePadding.Horizontal; - _panelMainText.Height = _messageText.Size.Height + messageContentSize.Height + panelMessagePadding.Vertical + BUTTON_GAP; + _panelMainText.Height = _messageText.Size.Height + messageContentSize.Height + panelMessagePadding.Vertical + GlobalStaticValues.GLOBAL_BUTTON_PADDING; // Position the content label below the main label _messageContent.Location = new Point(_messageText.Left + 2, _messageText.Bottom); @@ -687,7 +780,7 @@ private Size UpdateRadioSizing() return Size.Empty; } - return _panelMainRadio.Size with { Width = _panelMainRadio.Size.Width + BUTTON_GAP + 2 }; + return _panelMainRadio.Size with { Width = _panelMainRadio.Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING + 2 }; } private Size UpdateCommandSizing() @@ -700,7 +793,7 @@ private Size UpdateCommandSizing() return Size.Empty; } - return _panelMainCommands.Size with { Width = _panelMainCommands.Size.Width + BUTTON_GAP + 2 }; + return _panelMainCommands.Size with { Width = _panelMainCommands.Size.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING + 2 }; } private Size UpdateSpacerSizing() @@ -719,7 +812,7 @@ private Size UpdateButtonsSizing() { numButtons++; Size buttonCancelSize = _buttonClose.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonCancelSize.Width + BUTTON_GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonCancelSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonCancelSize.Height); } @@ -727,7 +820,7 @@ private Size UpdateButtonsSizing() { numButtons++; Size buttonRetrySize = _buttonRetry.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonRetrySize.Width + BUTTON_GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonRetrySize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonRetrySize.Height); } @@ -735,7 +828,7 @@ private Size UpdateButtonsSizing() { numButtons++; Size buttonCancelSize = _buttonCancel.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonCancelSize.Width + BUTTON_GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonCancelSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonCancelSize.Height); } @@ -743,7 +836,7 @@ private Size UpdateButtonsSizing() { numButtons++; Size buttonNoSize = _buttonNo.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonNoSize.Width + BUTTON_GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonNoSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonNoSize.Height); } @@ -751,7 +844,7 @@ private Size UpdateButtonsSizing() { numButtons++; Size buttonYesSize = _buttonYes.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonYesSize.Width + BUTTON_GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonYesSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonYesSize.Height); } @@ -759,54 +852,54 @@ private Size UpdateButtonsSizing() { numButtons++; Size buttonOKSize = _buttonOK.GetPreferredSize(Size.Empty); - maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonOKSize.Width + BUTTON_GAP); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonOKSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING); maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonOKSize.Height); } // Start positioning buttons from right edge - var right = _panelButtons.Right - BUTTON_GAP; + var right = _panelButtons.Right - GlobalStaticValues.GLOBAL_BUTTON_PADDING; if ((_commonButtons & TaskDialogButtons.Close) == TaskDialogButtons.Close) { - _buttonClose.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonClose.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _buttonClose.Size = maxButtonSize; - right -= maxButtonSize.Width + BUTTON_GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } if ((_commonButtons & TaskDialogButtons.Retry) == TaskDialogButtons.Retry) { - _buttonRetry.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonRetry.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _buttonRetry.Size = maxButtonSize; - right -= maxButtonSize.Width + BUTTON_GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } if ((_commonButtons & TaskDialogButtons.Cancel) == TaskDialogButtons.Cancel) { - _buttonCancel.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonCancel.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _buttonCancel.Size = maxButtonSize; - right -= maxButtonSize.Width + BUTTON_GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } if ((_commonButtons & TaskDialogButtons.No) == TaskDialogButtons.No) { - _buttonNo.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonNo.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _buttonNo.Size = maxButtonSize; - right -= maxButtonSize.Width + BUTTON_GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } if ((_commonButtons & TaskDialogButtons.Yes) == TaskDialogButtons.Yes) { - _buttonYes.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonYes.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _buttonYes.Size = maxButtonSize; - right -= maxButtonSize.Width + BUTTON_GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } if ((_commonButtons & TaskDialogButtons.OK) == TaskDialogButtons.OK) { - _buttonOK.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonOK.Location = new Point(right - maxButtonSize.Width, GlobalStaticValues.GLOBAL_BUTTON_PADDING); _buttonOK.Size = maxButtonSize; - right -= maxButtonSize.Width + BUTTON_GAP; + right -= maxButtonSize.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; } var checkboxSize = Size.Empty; @@ -825,22 +918,22 @@ private Size UpdateButtonsSizing() else { _panelButtons.Visible = true; - _checkBox.Location = new Point(BUTTON_GAP, BUTTON_GAP); - return new Size(checkboxSize.Width + (BUTTON_GAP * 2), checkboxSize.Height + (BUTTON_GAP * 2)); + _checkBox.Location = new Point(GlobalStaticValues.GLOBAL_BUTTON_PADDING, GlobalStaticValues.GLOBAL_BUTTON_PADDING); + return new Size(checkboxSize.Width + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2), checkboxSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); } } else { _panelButtons.Visible = true; - var panelButtonSize = new Size((maxButtonSize.Width * numButtons) + (BUTTON_GAP * (numButtons + 1)), - maxButtonSize.Height + (BUTTON_GAP * 2)); + var panelButtonSize = new Size((maxButtonSize.Width * numButtons) + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * (numButtons + 1)), + maxButtonSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); if (!checkboxSize.IsEmpty) { panelButtonSize.Width += checkboxSize.Width; - panelButtonSize.Height = Math.Max(panelButtonSize.Height, checkboxSize.Height + (BUTTON_GAP * 2)); - _checkBox.Location = new Point(BUTTON_GAP, (panelButtonSize.Height - checkboxSize.Height) / 2); + panelButtonSize.Height = Math.Max(panelButtonSize.Height, checkboxSize.Height + (GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2)); + _checkBox.Location = new Point(GlobalStaticValues.GLOBAL_BUTTON_PADDING, (panelButtonSize.Height - checkboxSize.Height) / 2); } return panelButtonSize; @@ -880,14 +973,14 @@ private Size UpdateFooterSizing() if ((_footerIcon != KryptonMessageBoxIcon.None) || (_customFooterIcon != null)) { - requiredSize.Width += _iconFooter.Width + BUTTON_GAP; + requiredSize.Width += _iconFooter.Width + GlobalStaticValues.GLOBAL_BUTTON_PADDING; requiredSize.Height = Math.Max(requiredSize.Height, _iconFooter.Size.Height); } if (requiredSize.Width > 0) { - requiredSize.Width += BUTTON_GAP * 2; - requiredSize.Height += BUTTON_GAP * 2; + requiredSize.Width += GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2; + requiredSize.Height += GlobalStaticValues.GLOBAL_BUTTON_PADDING * 2; } // Do we have anything to show? @@ -897,12 +990,12 @@ private Size UpdateFooterSizing() if (requiredSize.Width > 0) { _panelFooter.Size = requiredSize; - var offset = BUTTON_GAP; + var offset = GlobalStaticValues.GLOBAL_BUTTON_PADDING; if ((_footerIcon != KryptonMessageBoxIcon.None) || (_customFooterIcon != null)) { _iconFooter.Location = new Point(offset, (requiredSize.Height - _iconFooter.Height) / 2); - offset += _iconFooter.Width + (BUTTON_GAP / 2); + offset += _iconFooter.Width + (GlobalStaticValues.GLOBAL_BUTTON_PADDING / 2); } if (!string.IsNullOrEmpty(_footerText)) @@ -924,7 +1017,7 @@ private Size UpdateFooterSizing() return requiredSize; } - private void OnRadioButtonCheckedChanged(object sender, EventArgs e) + private void OnRadioButtonCheckedChanged(object? sender, EventArgs e) { var button = sender as KryptonRadioButton; _defaultRadioButton = button?.Tag as KryptonTaskDialogCommand; @@ -934,17 +1027,17 @@ private void OnRadioButtonCheckedChanged(object sender, EventArgs e) } } - private void OnCommandClicked(object sender, EventArgs e) + private void OnCommandClicked(object? sender, EventArgs e) { Close(); // Update the result code from the command button - var button = (KryptonButton)sender; - DialogResult = button.DialogResult; + var button = sender as KryptonButton; + DialogResult = button!.DialogResult; // Invoke any event handlers from the command button - var command = (KryptonTaskDialogCommand)button.Tag; - command.PerformExecute(); + var command = button.Tag as KryptonTaskDialogCommand; + command?.PerformExecute(); } private void OnTaskDialogFormClosing(object sender, FormClosingEventArgs e) @@ -1036,368 +1129,364 @@ private void button_keyDown(object sender, KeyEventArgs e) private void InitializeComponent() { - _panelMain = new KryptonPanel(); - _panelMainSpacer = new KryptonPanel(); - _panelMainCommands = new KryptonPanel(); - _panelMainRadio = new KryptonPanel(); - _panelMainText = new KryptonPanel(); - _messageContent = new KryptonWrapLabel(); - _messageContentMultiline = new KryptonTextBox(); - _messageText = new KryptonWrapLabel(); - _panelIcon = new KryptonPanel(); - _messageIcon = new PictureBox(); - _panelButtons = new KryptonPanel(); - _checkBox = new KryptonCheckBox(); - _panelButtonsBorderTop = new KryptonBorderEdge(); - _buttonOK = new MessageButton(); - _buttonYes = new MessageButton(); - _buttonNo = new MessageButton(); - _buttonRetry = new MessageButton(); - _buttonCancel = new MessageButton(); - _buttonClose = new MessageButton(); - _panelFooter = new KryptonPanel(); - _linkLabelFooter = new KryptonLinkLabel(); - _iconFooter = new PictureBox(); - _footerLabel = new KryptonWrapLabel(); - _panelFooterBorderTop = new KryptonBorderEdge(); - ((ISupportInitialize)(_panelMain)).BeginInit(); - _panelMain.SuspendLayout(); - ((ISupportInitialize)(_panelMainSpacer)).BeginInit(); - ((ISupportInitialize)(_panelMainCommands)).BeginInit(); - ((ISupportInitialize)(_panelMainRadio)).BeginInit(); - ((ISupportInitialize)(_panelMainText)).BeginInit(); - _panelMainText.SuspendLayout(); - ((ISupportInitialize)(_panelIcon)).BeginInit(); - _panelIcon.SuspendLayout(); - ((ISupportInitialize)(_messageIcon)).BeginInit(); - ((ISupportInitialize)(_panelButtons)).BeginInit(); - _panelButtons.SuspendLayout(); - ((ISupportInitialize)(_panelFooter)).BeginInit(); - _panelFooter.SuspendLayout(); - ((ISupportInitialize)(_iconFooter)).BeginInit(); - SuspendLayout(); + this._panelMain = new Krypton.Toolkit.KryptonPanel(); + this._panelMainSpacer = new Krypton.Toolkit.KryptonPanel(); + this._panelMainCommands = new Krypton.Toolkit.KryptonPanel(); + this._panelMainRadio = new Krypton.Toolkit.KryptonPanel(); + this._panelMainText = new Krypton.Toolkit.KryptonPanel(); + this._messageContent = new Krypton.Toolkit.KryptonWrapLabel(); + this._messageContentMultiline = new Krypton.Toolkit.KryptonTextBox(); + this._messageText = new Krypton.Toolkit.KryptonWrapLabel(); + this._panelIcon = new Krypton.Toolkit.KryptonPanel(); + this._messageIcon = new System.Windows.Forms.PictureBox(); + this._panelButtons = new Krypton.Toolkit.KryptonPanel(); + this._checkBox = new Krypton.Toolkit.KryptonCheckBox(); + this._panelButtonsBorderTop = new Krypton.Toolkit.KryptonBorderEdge(); + this._buttonOK = new Krypton.Toolkit.VisualTaskDialog.MessageButton(); + this._buttonYes = new Krypton.Toolkit.VisualTaskDialog.MessageButton(); + this._buttonNo = new Krypton.Toolkit.VisualTaskDialog.MessageButton(); + this._buttonRetry = new Krypton.Toolkit.VisualTaskDialog.MessageButton(); + this._buttonCancel = new Krypton.Toolkit.VisualTaskDialog.MessageButton(); + this._buttonClose = new Krypton.Toolkit.VisualTaskDialog.MessageButton(); + this._panelFooter = new Krypton.Toolkit.KryptonPanel(); + this._linkLabelFooter = new Krypton.Toolkit.KryptonLinkLabel(); + this._iconFooter = new System.Windows.Forms.PictureBox(); + this._footerLabel = new Krypton.Toolkit.KryptonWrapLabel(); + this._panelFooterBorderTop = new Krypton.Toolkit.KryptonBorderEdge(); + ((System.ComponentModel.ISupportInitialize)(this._panelMain)).BeginInit(); + this._panelMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainSpacer)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainCommands)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainRadio)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainText)).BeginInit(); + this._panelMainText.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelIcon)).BeginInit(); + this._panelIcon.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).BeginInit(); + this._panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelFooter)).BeginInit(); + this._panelFooter.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._iconFooter)).BeginInit(); + this.SuspendLayout(); // // _panelMain // - _panelMain.AutoSize = true; - _panelMain.AutoSizeMode = AutoSizeMode.GrowAndShrink; - _panelMain.Controls.Add(_panelMainSpacer); - _panelMain.Controls.Add(_panelMainCommands); - _panelMain.Controls.Add(_panelMainRadio); - _panelMain.Controls.Add(_panelMainText); - _panelMain.Controls.Add(_panelIcon); - _panelMain.Dock = DockStyle.Top; - _panelMain.Location = new Point(0, 0); - _panelMain.Name = "_panelMain"; - _panelMain.Size = new Size(578, 72); - _panelMain.TabIndex = 0; + this._panelMain.AutoSize = true; + this._panelMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelMain.Controls.Add(this._panelMainSpacer); + this._panelMain.Controls.Add(this._panelMainCommands); + this._panelMain.Controls.Add(this._panelMainRadio); + this._panelMain.Controls.Add(this._panelMainText); + this._panelMain.Controls.Add(this._panelIcon); + this._panelMain.Dock = System.Windows.Forms.DockStyle.Top; + this._panelMain.Location = new System.Drawing.Point(0, 0); + this._panelMain.Name = "_panelMain"; + this._panelMain.Size = new System.Drawing.Size(790, 72); + this._panelMain.TabIndex = 0; // // _panelMainSpacer // - _panelMainSpacer.Location = new Point(42, 59); - _panelMainSpacer.Name = "_panelMainSpacer"; - _panelMainSpacer.Size = new Size(10, 10); - _panelMainSpacer.TabIndex = 3; + this._panelMainSpacer.Location = new System.Drawing.Point(42, 59); + this._panelMainSpacer.Name = "_panelMainSpacer"; + this._panelMainSpacer.Size = new System.Drawing.Size(10, 10); + this._panelMainSpacer.TabIndex = 3; // // _panelMainCommands // - _panelMainCommands.AutoSize = true; - _panelMainCommands.AutoSizeMode = AutoSizeMode.GrowAndShrink; - _panelMainCommands.Location = new Point(208, 10); - _panelMainCommands.Name = "_panelMainCommands"; - _panelMainCommands.Size = new Size(0, 0); - _panelMainCommands.TabIndex = 2; + this._panelMainCommands.AutoSize = true; + this._panelMainCommands.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelMainCommands.Location = new System.Drawing.Point(208, 10); + this._panelMainCommands.Name = "_panelMainCommands"; + this._panelMainCommands.Size = new System.Drawing.Size(0, 0); + this._panelMainCommands.TabIndex = 2; // // _panelMainRadio // - _panelMainRadio.AutoSize = true; - _panelMainRadio.AutoSizeMode = AutoSizeMode.GrowAndShrink; - _panelMainRadio.Location = new Point(208, 32); - _panelMainRadio.Name = "_panelMainRadio"; - _panelMainRadio.Size = new Size(0, 0); - _panelMainRadio.TabIndex = 1; + this._panelMainRadio.AutoSize = true; + this._panelMainRadio.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelMainRadio.Location = new System.Drawing.Point(208, 32); + this._panelMainRadio.Name = "_panelMainRadio"; + this._panelMainRadio.Size = new System.Drawing.Size(0, 0); + this._panelMainRadio.TabIndex = 1; // // _panelMainText // - _panelMainText.AutoSize = true; - _panelMainText.Controls.Add(_messageContent); - _panelMainText.Controls.Add(_messageContentMultiline); - _panelMainText.Controls.Add(_messageText); - _panelMainText.Location = new Point(42, 0); - _panelMainText.Margin = new Padding(0); - _panelMainText.Name = "_panelMainText"; - _panelMainText.Padding = new Padding(5, 5, 5, 0); - _panelMainText.Size = new Size(407, 60); - _panelMainText.TabIndex = 0; + this._panelMainText.AutoSize = true; + this._panelMainText.Controls.Add(this._messageContent); + this._panelMainText.Controls.Add(this._messageContentMultiline); + this._panelMainText.Controls.Add(this._messageText); + this._panelMainText.Location = new System.Drawing.Point(42, 0); + this._panelMainText.Margin = new System.Windows.Forms.Padding(0); + this._panelMainText.Name = "_panelMainText"; + this._panelMainText.Padding = new System.Windows.Forms.Padding(5, 5, 5, 0); + this._panelMainText.Size = new System.Drawing.Size(407, 60); + this._panelMainText.TabIndex = 0; // // _messageContent // - _messageContent.AutoSize = false; - _messageContent.Font = new Font("Segoe UI", 9F); - _messageContent.ForeColor = Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - _messageContent.Location = new Point(6, 34); - _messageContent.Margin = new Padding(0); - _messageContent.Name = "_messageContent"; - _messageContent.Size = new Size(78, 15); - _messageContent.Text = "Content"; + this._messageContent.AutoSize = false; + this._messageContent.Font = new System.Drawing.Font("Segoe UI", 9F); + this._messageContent.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this._messageContent.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this._messageContent.Location = new System.Drawing.Point(6, 34); + this._messageContent.Margin = new System.Windows.Forms.Padding(0); + this._messageContent.Name = "_messageContent"; + this._messageContent.Size = new System.Drawing.Size(78, 15); + this._messageContent.Text = "Content"; // // _messageContentMultiline // - _messageContentMultiline.Location = new Point(48, 45); - _messageContentMultiline.Multiline = true; - _messageContentMultiline.Name = "_messageContentMultiline"; - _messageContentMultiline.ReadOnly = true; - _messageContentMultiline.ScrollBars = ScrollBars.Both; - _messageContentMultiline.Size = new Size(351, 10); - _messageContentMultiline.TabIndex = 4; + this._messageContentMultiline.Location = new System.Drawing.Point(48, 45); + this._messageContentMultiline.Multiline = true; + this._messageContentMultiline.Name = "_messageContentMultiline"; + this._messageContentMultiline.ReadOnly = true; + this._messageContentMultiline.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this._messageContentMultiline.Size = new System.Drawing.Size(351, 10); + this._messageContentMultiline.TabIndex = 4; // // _messageText // - _messageText.AutoSize = false; - _messageText.Font = new Font("Segoe UI", 13.5F, FontStyle.Bold); - _messageText.ForeColor = Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - _messageText.LabelStyle = LabelStyle.TitlePanel; - _messageText.Location = new Point(5, 5); - _messageText.Margin = new Padding(0); - _messageText.Name = "_messageText"; - _messageText.Size = new Size(139, 27); - _messageText.Text = "Message Text"; + this._messageText.AutoSize = false; + this._messageText.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this._messageText.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this._messageText.LabelStyle = Krypton.Toolkit.LabelStyle.TitlePanel; + this._messageText.Location = new System.Drawing.Point(5, 5); + this._messageText.Margin = new System.Windows.Forms.Padding(0); + this._messageText.Name = "_messageText"; + this._messageText.Size = new System.Drawing.Size(139, 27); + this._messageText.Text = "Message Text"; // // _panelIcon // - _panelIcon.AutoSize = true; - _panelIcon.AutoSizeMode = AutoSizeMode.GrowAndShrink; - _panelIcon.Controls.Add(_messageIcon); - _panelIcon.Location = new Point(0, 0); - _panelIcon.Margin = new Padding(0); - _panelIcon.Name = "_panelIcon"; - _panelIcon.Padding = new Padding(10, 10, 0, 10); - _panelIcon.Size = new Size(42, 52); - _panelIcon.TabIndex = 0; + this._panelIcon.AutoSize = true; + this._panelIcon.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelIcon.Controls.Add(this._messageIcon); + this._panelIcon.Location = new System.Drawing.Point(0, 0); + this._panelIcon.Margin = new System.Windows.Forms.Padding(0); + this._panelIcon.Name = "_panelIcon"; + this._panelIcon.Padding = new System.Windows.Forms.Padding(10, 10, 0, 10); + this._panelIcon.Size = new System.Drawing.Size(42, 52); + this._panelIcon.TabIndex = 0; // // _messageIcon // - _messageIcon.BackColor = Color.Transparent; - _messageIcon.Location = new Point(10, 10); - _messageIcon.Margin = new Padding(0); - _messageIcon.Name = "_messageIcon"; - _messageIcon.Size = new Size(32, 32); - _messageIcon.TabIndex = 0; - _messageIcon.TabStop = false; + this._messageIcon.BackColor = System.Drawing.Color.Transparent; + this._messageIcon.Location = new System.Drawing.Point(10, 10); + this._messageIcon.Margin = new System.Windows.Forms.Padding(0); + this._messageIcon.Name = "_messageIcon"; + this._messageIcon.Size = new System.Drawing.Size(32, 32); + this._messageIcon.TabIndex = 0; + this._messageIcon.TabStop = false; // // _panelButtons // - _panelButtons.Controls.Add(_checkBox); - _panelButtons.Controls.Add(_panelButtonsBorderTop); - _panelButtons.Controls.Add(_buttonOK); - _panelButtons.Controls.Add(_buttonYes); - _panelButtons.Controls.Add(_buttonNo); - _panelButtons.Controls.Add(_buttonRetry); - _panelButtons.Controls.Add(_buttonCancel); - _panelButtons.Controls.Add(_buttonClose); - _panelButtons.Dock = DockStyle.Top; - _panelButtons.Location = new Point(0, 72); - _panelButtons.Margin = new Padding(0); - _panelButtons.Name = "_panelButtons"; - _panelButtons.PanelBackStyle = PaletteBackStyle.PanelAlternate; - _panelButtons.Size = new Size(578, 46); - _panelButtons.TabIndex = 1; + this._panelButtons.Controls.Add(this._checkBox); + this._panelButtons.Controls.Add(this._panelButtonsBorderTop); + this._panelButtons.Controls.Add(this._buttonOK); + this._panelButtons.Controls.Add(this._buttonYes); + this._panelButtons.Controls.Add(this._buttonNo); + this._panelButtons.Controls.Add(this._buttonRetry); + this._panelButtons.Controls.Add(this._buttonCancel); + this._panelButtons.Controls.Add(this._buttonClose); + this._panelButtons.Dock = System.Windows.Forms.DockStyle.Top; + this._panelButtons.Location = new System.Drawing.Point(0, 72); + this._panelButtons.Margin = new System.Windows.Forms.Padding(0); + this._panelButtons.Name = "_panelButtons"; + this._panelButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelButtons.Size = new System.Drawing.Size(790, 46); + this._panelButtons.TabIndex = 1; // // _checkBox // - _checkBox.Location = new Point(12, 12); - _checkBox.Name = "_checkBox"; - _checkBox.Size = new Size(75, 20); - _checkBox.TabIndex = 0; - _checkBox.Values.Text = "checkBox"; + this._checkBox.Location = new System.Drawing.Point(12, 12); + this._checkBox.Name = "_checkBox"; + this._checkBox.Size = new System.Drawing.Size(75, 20); + this._checkBox.TabIndex = 0; + this._checkBox.Values.Text = "checkBox"; // // _panelButtonsBorderTop // - _panelButtonsBorderTop.BorderStyle = PaletteBorderStyle.HeaderPrimary; - _panelButtonsBorderTop.Dock = DockStyle.Top; - _panelButtonsBorderTop.Location = new Point(0, 0); - _panelButtonsBorderTop.Name = "_panelButtonsBorderTop"; - _panelButtonsBorderTop.Size = new Size(578, 1); - _panelButtonsBorderTop.Text = "kryptonBorderEdge1"; + this._panelButtonsBorderTop.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._panelButtonsBorderTop.Dock = System.Windows.Forms.DockStyle.Top; + this._panelButtonsBorderTop.Location = new System.Drawing.Point(0, 0); + this._panelButtonsBorderTop.Name = "_panelButtonsBorderTop"; + this._panelButtonsBorderTop.Size = new System.Drawing.Size(790, 1); + this._panelButtonsBorderTop.Text = "kryptonBorderEdge1"; // // _buttonOK // - _buttonOK.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right))); - _buttonOK.AutoSize = true; - _buttonOK.CornerRoundingRadius = -1F; - _buttonOK.DialogResult = DialogResult.OK; - _buttonOK.IgnoreAltF4 = false; - _buttonOK.Location = new Point(469, 9); - _buttonOK.Margin = new Padding(0); - _buttonOK.MinimumSize = new Size(50, 26); - _buttonOK.Name = "_buttonOK"; - _buttonOK.Size = new Size(50, 26); - _buttonOK.TabIndex = 1; - _buttonOK.Values.Text = "OK"; + this._buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonOK.AutoSize = true; + this._buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this._buttonOK.IgnoreAltF4 = false; + this._buttonOK.Location = new System.Drawing.Point(681, 9); + this._buttonOK.Margin = new System.Windows.Forms.Padding(0); + this._buttonOK.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonOK.Name = "_buttonOK"; + this._buttonOK.Size = new System.Drawing.Size(50, 26); + this._buttonOK.TabIndex = 1; + this._buttonOK.Values.Text = "OK"; // // _buttonYes // - _buttonYes.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right))); - _buttonYes.AutoSize = true; - _buttonYes.CornerRoundingRadius = -1F; - _buttonYes.DialogResult = DialogResult.Yes; - _buttonYes.IgnoreAltF4 = false; - _buttonYes.Location = new Point(369, 9); - _buttonYes.Margin = new Padding(0); - _buttonYes.MinimumSize = new Size(50, 26); - _buttonYes.Name = "_buttonYes"; - _buttonYes.Size = new Size(50, 26); - _buttonYes.TabIndex = 2; - _buttonYes.Values.Text = "Yes"; + this._buttonYes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonYes.AutoSize = true; + this._buttonYes.DialogResult = System.Windows.Forms.DialogResult.Yes; + this._buttonYes.IgnoreAltF4 = false; + this._buttonYes.Location = new System.Drawing.Point(581, 9); + this._buttonYes.Margin = new System.Windows.Forms.Padding(0); + this._buttonYes.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonYes.Name = "_buttonYes"; + this._buttonYes.Size = new System.Drawing.Size(50, 26); + this._buttonYes.TabIndex = 2; + this._buttonYes.Values.Text = "Yes"; // // _buttonNo // - _buttonNo.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right))); - _buttonNo.AutoSize = true; - _buttonNo.CornerRoundingRadius = -1F; - _buttonNo.DialogResult = DialogResult.No; - _buttonNo.IgnoreAltF4 = false; - _buttonNo.Location = new Point(319, 9); - _buttonNo.Margin = new Padding(0); - _buttonNo.MinimumSize = new Size(50, 26); - _buttonNo.Name = "_buttonNo"; - _buttonNo.Size = new Size(50, 26); - _buttonNo.TabIndex = 3; - _buttonNo.Values.Text = "No"; + this._buttonNo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonNo.AutoSize = true; + this._buttonNo.DialogResult = System.Windows.Forms.DialogResult.No; + this._buttonNo.IgnoreAltF4 = false; + this._buttonNo.Location = new System.Drawing.Point(531, 9); + this._buttonNo.Margin = new System.Windows.Forms.Padding(0); + this._buttonNo.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonNo.Name = "_buttonNo"; + this._buttonNo.Size = new System.Drawing.Size(50, 26); + this._buttonNo.TabIndex = 3; + this._buttonNo.Values.Text = "No"; // // _buttonRetry // - _buttonRetry.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right))); - _buttonRetry.AutoSize = true; - _buttonRetry.CornerRoundingRadius = -1F; - _buttonRetry.DialogResult = DialogResult.Retry; - _buttonRetry.IgnoreAltF4 = false; - _buttonRetry.Location = new Point(419, 9); - _buttonRetry.Margin = new Padding(0); - _buttonRetry.MinimumSize = new Size(50, 26); - _buttonRetry.Name = "_buttonRetry"; - _buttonRetry.Size = new Size(50, 26); - _buttonRetry.TabIndex = 5; - _buttonRetry.Values.Text = "Retry"; + this._buttonRetry.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonRetry.AutoSize = true; + this._buttonRetry.DialogResult = System.Windows.Forms.DialogResult.Retry; + this._buttonRetry.IgnoreAltF4 = false; + this._buttonRetry.Location = new System.Drawing.Point(631, 9); + this._buttonRetry.Margin = new System.Windows.Forms.Padding(0); + this._buttonRetry.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonRetry.Name = "_buttonRetry"; + this._buttonRetry.Size = new System.Drawing.Size(50, 26); + this._buttonRetry.TabIndex = 5; + this._buttonRetry.Values.Text = "Retry"; // // _buttonCancel // - _buttonCancel.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right))); - _buttonCancel.AutoSize = true; - _buttonCancel.CornerRoundingRadius = -1F; - _buttonCancel.DialogResult = DialogResult.Cancel; - _buttonCancel.IgnoreAltF4 = false; - _buttonCancel.Location = new Point(262, 9); - _buttonCancel.Margin = new Padding(0); - _buttonCancel.MinimumSize = new Size(50, 26); - _buttonCancel.Name = "_buttonCancel"; - _buttonCancel.Size = new Size(57, 26); - _buttonCancel.TabIndex = 4; - _buttonCancel.Values.Text = "Cancel"; + this._buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonCancel.AutoSize = true; + this._buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this._buttonCancel.IgnoreAltF4 = false; + this._buttonCancel.Location = new System.Drawing.Point(474, 9); + this._buttonCancel.Margin = new System.Windows.Forms.Padding(0); + this._buttonCancel.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonCancel.Name = "_buttonCancel"; + this._buttonCancel.Size = new System.Drawing.Size(57, 26); + this._buttonCancel.TabIndex = 4; + this._buttonCancel.Values.Text = "Cancel"; // // _buttonClose // - _buttonClose.Anchor = ((AnchorStyles)((AnchorStyles.Top | AnchorStyles.Right))); - _buttonClose.AutoSize = true; - _buttonClose.CornerRoundingRadius = -1F; - _buttonClose.IgnoreAltF4 = false; - _buttonClose.Location = new Point(519, 9); - _buttonClose.Margin = new Padding(0); - _buttonClose.MinimumSize = new Size(50, 26); - _buttonClose.Name = "_buttonClose"; - _buttonClose.Size = new Size(50, 26); - _buttonClose.TabIndex = 6; - _buttonClose.Values.Text = "Close"; + this._buttonClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonClose.AutoSize = true; + this._buttonClose.IgnoreAltF4 = false; + this._buttonClose.Location = new System.Drawing.Point(731, 9); + this._buttonClose.Margin = new System.Windows.Forms.Padding(0); + this._buttonClose.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonClose.Name = "_buttonClose"; + this._buttonClose.Size = new System.Drawing.Size(50, 26); + this._buttonClose.TabIndex = 6; + this._buttonClose.Values.Text = "Close"; // // _panelFooter // - _panelFooter.Controls.Add(_linkLabelFooter); - _panelFooter.Controls.Add(_iconFooter); - _panelFooter.Controls.Add(_footerLabel); - _panelFooter.Controls.Add(_panelFooterBorderTop); - _panelFooter.Dock = DockStyle.Top; - _panelFooter.Location = new Point(0, 118); - _panelFooter.Name = "_panelFooter"; - _panelFooter.PanelBackStyle = PaletteBackStyle.PanelAlternate; - _panelFooter.Size = new Size(578, 49); - _panelFooter.TabIndex = 2; + this._panelFooter.Controls.Add(this._linkLabelFooter); + this._panelFooter.Controls.Add(this._iconFooter); + this._panelFooter.Controls.Add(this._footerLabel); + this._panelFooter.Controls.Add(this._panelFooterBorderTop); + this._panelFooter.Dock = System.Windows.Forms.DockStyle.Top; + this._panelFooter.Location = new System.Drawing.Point(0, 118); + this._panelFooter.Name = "_panelFooter"; + this._panelFooter.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelFooter.Size = new System.Drawing.Size(790, 49); + this._panelFooter.TabIndex = 2; // // _linkLabelFooter // - _linkLabelFooter.Location = new Point(127, 11); - _linkLabelFooter.Name = "_linkLabelFooter"; - _linkLabelFooter.Size = new Size(110, 20); - _linkLabelFooter.TabIndex = 0; - _linkLabelFooter.Values.Text = "kryptonLinkLabel1"; + this._linkLabelFooter.Location = new System.Drawing.Point(127, 11); + this._linkLabelFooter.Name = "_linkLabelFooter"; + this._linkLabelFooter.Size = new System.Drawing.Size(110, 20); + this._linkLabelFooter.TabIndex = 0; + this._linkLabelFooter.Values.Text = "kryptonLinkLabel1"; // // _iconFooter // - _iconFooter.BackColor = Color.Transparent; - _iconFooter.Location = new Point(10, 10); - _iconFooter.Margin = new Padding(0); - _iconFooter.Name = "_iconFooter"; - _iconFooter.Size = new Size(16, 16); - _iconFooter.TabIndex = 4; - _iconFooter.TabStop = false; + this._iconFooter.BackColor = System.Drawing.Color.Transparent; + this._iconFooter.Location = new System.Drawing.Point(10, 10); + this._iconFooter.Margin = new System.Windows.Forms.Padding(0); + this._iconFooter.Name = "_iconFooter"; + this._iconFooter.Size = new System.Drawing.Size(16, 16); + this._iconFooter.TabIndex = 4; + this._iconFooter.TabStop = false; // // _footerLabel // - _footerLabel.AutoSize = false; - _footerLabel.Font = new Font("Segoe UI", 9F); - _footerLabel.ForeColor = Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - _footerLabel.Location = new Point(36, 11); - _footerLabel.Margin = new Padding(0); - _footerLabel.Name = "_footerLabel"; - _footerLabel.Size = new Size(78, 15); - _footerLabel.Text = "Content"; + this._footerLabel.AutoSize = false; + this._footerLabel.Font = new System.Drawing.Font("Segoe UI", 9F); + this._footerLabel.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this._footerLabel.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this._footerLabel.Location = new System.Drawing.Point(36, 11); + this._footerLabel.Margin = new System.Windows.Forms.Padding(0); + this._footerLabel.Name = "_footerLabel"; + this._footerLabel.Size = new System.Drawing.Size(78, 15); + this._footerLabel.Text = "Content"; // // _panelFooterBorderTop // - _panelFooterBorderTop.BorderStyle = PaletteBorderStyle.HeaderPrimary; - _panelFooterBorderTop.Dock = DockStyle.Top; - _panelFooterBorderTop.Location = new Point(0, 0); - _panelFooterBorderTop.Name = "_panelFooterBorderTop"; - _panelFooterBorderTop.Size = new Size(578, 1); - _panelFooterBorderTop.Text = "kryptonBorderEdge1"; + this._panelFooterBorderTop.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._panelFooterBorderTop.Dock = System.Windows.Forms.DockStyle.Top; + this._panelFooterBorderTop.Location = new System.Drawing.Point(0, 0); + this._panelFooterBorderTop.Name = "_panelFooterBorderTop"; + this._panelFooterBorderTop.Size = new System.Drawing.Size(790, 1); + this._panelFooterBorderTop.Text = "kryptonBorderEdge1"; // // VisualTaskDialog // - AutoScaleDimensions = new SizeF(6F, 13F); - AutoScaleMode = AutoScaleMode.Font; - AutoScroll = true; - ClientSize = new Size(595, 164); - Controls.Add(_panelFooter); - Controls.Add(_panelButtons); - Controls.Add(_panelMain); - FormBorderStyle = FormBorderStyle.FixedDialog; - MaximizeBox = false; - MinimizeBox = false; - Name = "VisualTaskDialog"; - ShowIcon = false; - ShowInTaskbar = false; - SizeGripStyle = SizeGripStyle.Hide; - StartPosition = FormStartPosition.CenterParent; - ((ISupportInitialize)(_panelMain)).EndInit(); - _panelMain.ResumeLayout(false); - _panelMain.PerformLayout(); - ((ISupportInitialize)(_panelMainSpacer)).EndInit(); - ((ISupportInitialize)(_panelMainCommands)).EndInit(); - ((ISupportInitialize)(_panelMainRadio)).EndInit(); - ((ISupportInitialize)(_panelMainText)).EndInit(); - _panelMainText.ResumeLayout(false); - _panelMainText.PerformLayout(); - ((ISupportInitialize)(_panelIcon)).EndInit(); - _panelIcon.ResumeLayout(false); - ((ISupportInitialize)(_messageIcon)).EndInit(); - ((ISupportInitialize)(_panelButtons)).EndInit(); - _panelButtons.ResumeLayout(false); - _panelButtons.PerformLayout(); - ((ISupportInitialize)(_panelFooter)).EndInit(); - _panelFooter.ResumeLayout(false); - _panelFooter.PerformLayout(); - ((ISupportInitialize)(_iconFooter)).EndInit(); - ResumeLayout(false); - PerformLayout(); + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScroll = true; + this.ClientSize = new System.Drawing.Size(790, 172); + this.Controls.Add(this._panelFooter); + this.Controls.Add(this._panelButtons); + this.Controls.Add(this._panelMain); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualTaskDialog"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + ((System.ComponentModel.ISupportInitialize)(this._panelMain)).EndInit(); + this._panelMain.ResumeLayout(false); + this._panelMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainSpacer)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainCommands)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainRadio)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainText)).EndInit(); + this._panelMainText.ResumeLayout(false); + this._panelMainText.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelIcon)).EndInit(); + this._panelIcon.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).EndInit(); + this._panelButtons.ResumeLayout(false); + this._panelButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelFooter)).EndInit(); + this._panelFooter.ResumeLayout(false); + this._panelFooter.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._iconFooter)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.Designer.cs new file mode 100644 index 000000000..277015018 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.Designer.cs @@ -0,0 +1,424 @@ +namespace Krypton.Toolkit +{ + partial class VisualTaskDialogForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this._panelMain = new Krypton.Toolkit.KryptonPanel(); + this._panelMainSpacer = new Krypton.Toolkit.KryptonPanel(); + this._panelMainCommands = new Krypton.Toolkit.KryptonPanel(); + this._panelMainRadio = new Krypton.Toolkit.KryptonPanel(); + this._panelMainText = new Krypton.Toolkit.KryptonPanel(); + this._messageContent = new Krypton.Toolkit.KryptonWrapLabel(); + this._messageContentMultiline = new Krypton.Toolkit.KryptonTextBox(); + this._messageText = new Krypton.Toolkit.KryptonWrapLabel(); + this._panelIcon = new Krypton.Toolkit.KryptonPanel(); + this._messageIcon = new System.Windows.Forms.PictureBox(); + this._panelButtons = new Krypton.Toolkit.KryptonPanel(); + this._checkBox = new Krypton.Toolkit.KryptonCheckBox(); + this._panelButtonsBorderTop = new Krypton.Toolkit.KryptonBorderEdge(); + this._buttonOK = new Krypton.Toolkit.TaskDialogMessageButton(); + this._buttonYes = new Krypton.Toolkit.TaskDialogMessageButton(); + this._buttonNo = new Krypton.Toolkit.TaskDialogMessageButton(); + this._buttonRetry = new Krypton.Toolkit.TaskDialogMessageButton(); + this._buttonCancel = new Krypton.Toolkit.TaskDialogMessageButton(); + this._buttonClose = new Krypton.Toolkit.TaskDialogMessageButton(); + this._panelFooter = new Krypton.Toolkit.KryptonPanel(); + this._linkLabelFooter = new Krypton.Toolkit.KryptonLinkLabel(); + this._iconFooter = new System.Windows.Forms.PictureBox(); + this._footerLabel = new Krypton.Toolkit.KryptonWrapLabel(); + this._panelFooterBorderTop = new Krypton.Toolkit.KryptonBorderEdge(); + ((System.ComponentModel.ISupportInitialize)(this._panelMain)).BeginInit(); + this._panelMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainSpacer)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainCommands)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainRadio)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainText)).BeginInit(); + this._panelMainText.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelIcon)).BeginInit(); + this._panelIcon.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).BeginInit(); + this._panelButtons.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelFooter)).BeginInit(); + this._panelFooter.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._iconFooter)).BeginInit(); + this.SuspendLayout(); + // + // _panelMain + // + this._panelMain.AutoSize = true; + this._panelMain.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelMain.Controls.Add(this._panelMainSpacer); + this._panelMain.Controls.Add(this._panelMainCommands); + this._panelMain.Controls.Add(this._panelMainRadio); + this._panelMain.Controls.Add(this._panelMainText); + this._panelMain.Controls.Add(this._panelIcon); + this._panelMain.Dock = System.Windows.Forms.DockStyle.Top; + this._panelMain.Location = new System.Drawing.Point(0, 0); + this._panelMain.Name = "_panelMain"; + this._panelMain.Size = new System.Drawing.Size(782, 72); + this._panelMain.TabIndex = 1; + // + // _panelMainSpacer + // + this._panelMainSpacer.Location = new System.Drawing.Point(42, 59); + this._panelMainSpacer.Name = "_panelMainSpacer"; + this._panelMainSpacer.Size = new System.Drawing.Size(10, 10); + this._panelMainSpacer.TabIndex = 3; + // + // _panelMainCommands + // + this._panelMainCommands.AutoSize = true; + this._panelMainCommands.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelMainCommands.Location = new System.Drawing.Point(208, 10); + this._panelMainCommands.Name = "_panelMainCommands"; + this._panelMainCommands.Size = new System.Drawing.Size(0, 0); + this._panelMainCommands.TabIndex = 2; + // + // _panelMainRadio + // + this._panelMainRadio.AutoSize = true; + this._panelMainRadio.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelMainRadio.Location = new System.Drawing.Point(208, 32); + this._panelMainRadio.Name = "_panelMainRadio"; + this._panelMainRadio.Size = new System.Drawing.Size(0, 0); + this._panelMainRadio.TabIndex = 1; + // + // _panelMainText + // + this._panelMainText.AutoSize = true; + this._panelMainText.Controls.Add(this._messageContent); + this._panelMainText.Controls.Add(this._messageContentMultiline); + this._panelMainText.Controls.Add(this._messageText); + this._panelMainText.Location = new System.Drawing.Point(42, 0); + this._panelMainText.Margin = new System.Windows.Forms.Padding(0); + this._panelMainText.Name = "_panelMainText"; + this._panelMainText.Padding = new System.Windows.Forms.Padding(5, 5, 5, 0); + this._panelMainText.Size = new System.Drawing.Size(407, 60); + this._panelMainText.TabIndex = 0; + // + // _messageContent + // + this._messageContent.AutoSize = false; + this._messageContent.Font = new System.Drawing.Font("Segoe UI", 9F); + this._messageContent.ForeColor = System.Drawing.Color.White; + this._messageContent.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this._messageContent.Location = new System.Drawing.Point(6, 34); + this._messageContent.Margin = new System.Windows.Forms.Padding(0); + this._messageContent.Name = "_messageContent"; + this._messageContent.Size = new System.Drawing.Size(78, 15); + this._messageContent.Text = "Content"; + // + // _messageContentMultiline + // + this._messageContentMultiline.Location = new System.Drawing.Point(48, 45); + this._messageContentMultiline.Multiline = true; + this._messageContentMultiline.Name = "_messageContentMultiline"; + this._messageContentMultiline.ReadOnly = true; + this._messageContentMultiline.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this._messageContentMultiline.Size = new System.Drawing.Size(351, 10); + this._messageContentMultiline.TabIndex = 4; + // + // _messageText + // + this._messageText.AutoSize = false; + this._messageText.Font = new System.Drawing.Font("Segoe UI", 13.5F, System.Drawing.FontStyle.Bold); + this._messageText.ForeColor = System.Drawing.Color.White; + this._messageText.LabelStyle = Krypton.Toolkit.LabelStyle.TitlePanel; + this._messageText.Location = new System.Drawing.Point(5, 5); + this._messageText.Margin = new System.Windows.Forms.Padding(0); + this._messageText.Name = "_messageText"; + this._messageText.Size = new System.Drawing.Size(139, 27); + this._messageText.Text = "Message Text"; + // + // _panelIcon + // + this._panelIcon.AutoSize = true; + this._panelIcon.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this._panelIcon.Controls.Add(this._messageIcon); + this._panelIcon.Location = new System.Drawing.Point(0, 0); + this._panelIcon.Margin = new System.Windows.Forms.Padding(0); + this._panelIcon.Name = "_panelIcon"; + this._panelIcon.Padding = new System.Windows.Forms.Padding(10, 10, 0, 10); + this._panelIcon.Size = new System.Drawing.Size(42, 52); + this._panelIcon.TabIndex = 0; + // + // _messageIcon + // + this._messageIcon.BackColor = System.Drawing.Color.Transparent; + this._messageIcon.Location = new System.Drawing.Point(10, 10); + this._messageIcon.Margin = new System.Windows.Forms.Padding(0); + this._messageIcon.Name = "_messageIcon"; + this._messageIcon.Size = new System.Drawing.Size(32, 32); + this._messageIcon.TabIndex = 0; + this._messageIcon.TabStop = false; + // + // _panelButtons + // + this._panelButtons.Controls.Add(this._checkBox); + this._panelButtons.Controls.Add(this._panelButtonsBorderTop); + this._panelButtons.Controls.Add(this._buttonOK); + this._panelButtons.Controls.Add(this._buttonYes); + this._panelButtons.Controls.Add(this._buttonNo); + this._panelButtons.Controls.Add(this._buttonRetry); + this._panelButtons.Controls.Add(this._buttonCancel); + this._panelButtons.Controls.Add(this._buttonClose); + this._panelButtons.Dock = System.Windows.Forms.DockStyle.Top; + this._panelButtons.Location = new System.Drawing.Point(0, 72); + this._panelButtons.Margin = new System.Windows.Forms.Padding(0); + this._panelButtons.Name = "_panelButtons"; + this._panelButtons.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelButtons.Size = new System.Drawing.Size(782, 46); + this._panelButtons.TabIndex = 2; + // + // _checkBox + // + this._checkBox.Location = new System.Drawing.Point(12, 12); + this._checkBox.Name = "_checkBox"; + this._checkBox.Size = new System.Drawing.Size(75, 20); + this._checkBox.TabIndex = 0; + this._checkBox.Values.Text = "checkBox"; + // + // _panelButtonsBorderTop + // + this._panelButtonsBorderTop.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._panelButtonsBorderTop.Dock = System.Windows.Forms.DockStyle.Top; + this._panelButtonsBorderTop.Location = new System.Drawing.Point(0, 0); + this._panelButtonsBorderTop.Name = "_panelButtonsBorderTop"; + this._panelButtonsBorderTop.Size = new System.Drawing.Size(782, 1); + this._panelButtonsBorderTop.Text = "kryptonBorderEdge1"; + // + // _buttonOK + // + this._buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonOK.AutoSize = true; + this._buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this._buttonOK.IgnoreAltF4 = false; + this._buttonOK.Location = new System.Drawing.Point(673, 9); + this._buttonOK.Margin = new System.Windows.Forms.Padding(0); + this._buttonOK.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonOK.Name = "_buttonOK"; + this._buttonOK.Size = new System.Drawing.Size(50, 26); + this._buttonOK.TabIndex = 1; + this._buttonOK.Values.Text = "OK"; + // + // _buttonYes + // + this._buttonYes.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonYes.AutoSize = true; + this._buttonYes.DialogResult = System.Windows.Forms.DialogResult.Yes; + this._buttonYes.IgnoreAltF4 = false; + this._buttonYes.Location = new System.Drawing.Point(573, 9); + this._buttonYes.Margin = new System.Windows.Forms.Padding(0); + this._buttonYes.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonYes.Name = "_buttonYes"; + this._buttonYes.Size = new System.Drawing.Size(50, 26); + this._buttonYes.TabIndex = 2; + this._buttonYes.Values.Text = "Yes"; + // + // _buttonNo + // + this._buttonNo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonNo.AutoSize = true; + this._buttonNo.DialogResult = System.Windows.Forms.DialogResult.No; + this._buttonNo.IgnoreAltF4 = false; + this._buttonNo.Location = new System.Drawing.Point(523, 9); + this._buttonNo.Margin = new System.Windows.Forms.Padding(0); + this._buttonNo.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonNo.Name = "_buttonNo"; + this._buttonNo.Size = new System.Drawing.Size(50, 26); + this._buttonNo.TabIndex = 3; + this._buttonNo.Values.Text = "No"; + // + // _buttonRetry + // + this._buttonRetry.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonRetry.AutoSize = true; + this._buttonRetry.DialogResult = System.Windows.Forms.DialogResult.Retry; + this._buttonRetry.IgnoreAltF4 = false; + this._buttonRetry.Location = new System.Drawing.Point(623, 9); + this._buttonRetry.Margin = new System.Windows.Forms.Padding(0); + this._buttonRetry.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonRetry.Name = "_buttonRetry"; + this._buttonRetry.Size = new System.Drawing.Size(50, 26); + this._buttonRetry.TabIndex = 5; + this._buttonRetry.Values.Text = "Retry"; + // + // _buttonCancel + // + this._buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonCancel.AutoSize = true; + this._buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this._buttonCancel.IgnoreAltF4 = false; + this._buttonCancel.Location = new System.Drawing.Point(466, 9); + this._buttonCancel.Margin = new System.Windows.Forms.Padding(0); + this._buttonCancel.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonCancel.Name = "_buttonCancel"; + this._buttonCancel.Size = new System.Drawing.Size(57, 26); + this._buttonCancel.TabIndex = 4; + this._buttonCancel.Values.Text = "Cancel"; + // + // _buttonClose + // + this._buttonClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._buttonClose.AutoSize = true; + this._buttonClose.IgnoreAltF4 = false; + this._buttonClose.Location = new System.Drawing.Point(723, 9); + this._buttonClose.Margin = new System.Windows.Forms.Padding(0); + this._buttonClose.MinimumSize = new System.Drawing.Size(50, 26); + this._buttonClose.Name = "_buttonClose"; + this._buttonClose.Size = new System.Drawing.Size(50, 26); + this._buttonClose.TabIndex = 6; + this._buttonClose.Values.Text = "Close"; + // + // _panelFooter + // + this._panelFooter.Controls.Add(this._linkLabelFooter); + this._panelFooter.Controls.Add(this._iconFooter); + this._panelFooter.Controls.Add(this._footerLabel); + this._panelFooter.Controls.Add(this._panelFooterBorderTop); + this._panelFooter.Dock = System.Windows.Forms.DockStyle.Top; + this._panelFooter.Location = new System.Drawing.Point(0, 118); + this._panelFooter.Name = "_panelFooter"; + this._panelFooter.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this._panelFooter.Size = new System.Drawing.Size(782, 49); + this._panelFooter.TabIndex = 3; + // + // _linkLabelFooter + // + this._linkLabelFooter.Location = new System.Drawing.Point(127, 11); + this._linkLabelFooter.Name = "_linkLabelFooter"; + this._linkLabelFooter.Size = new System.Drawing.Size(110, 20); + this._linkLabelFooter.TabIndex = 0; + this._linkLabelFooter.Values.Text = "kryptonLinkLabel1"; + // + // _iconFooter + // + this._iconFooter.BackColor = System.Drawing.Color.Transparent; + this._iconFooter.Location = new System.Drawing.Point(10, 10); + this._iconFooter.Margin = new System.Windows.Forms.Padding(0); + this._iconFooter.Name = "_iconFooter"; + this._iconFooter.Size = new System.Drawing.Size(16, 16); + this._iconFooter.TabIndex = 4; + this._iconFooter.TabStop = false; + // + // _footerLabel + // + this._footerLabel.AutoSize = false; + this._footerLabel.Font = new System.Drawing.Font("Segoe UI", 9F); + this._footerLabel.ForeColor = System.Drawing.Color.White; + this._footerLabel.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this._footerLabel.Location = new System.Drawing.Point(36, 11); + this._footerLabel.Margin = new System.Windows.Forms.Padding(0); + this._footerLabel.Name = "_footerLabel"; + this._footerLabel.Size = new System.Drawing.Size(78, 15); + this._footerLabel.Text = "Content"; + // + // _panelFooterBorderTop + // + this._panelFooterBorderTop.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this._panelFooterBorderTop.Dock = System.Windows.Forms.DockStyle.Top; + this._panelFooterBorderTop.Location = new System.Drawing.Point(0, 0); + this._panelFooterBorderTop.Name = "_panelFooterBorderTop"; + this._panelFooterBorderTop.Size = new System.Drawing.Size(782, 1); + this._panelFooterBorderTop.Text = "kryptonBorderEdge1"; + // + // VisualTaskDialogForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScroll = true; + this.ClientSize = new System.Drawing.Size(799, 164); + this.Controls.Add(this._panelFooter); + this.Controls.Add(this._panelButtons); + this.Controls.Add(this._panelMain); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.FormTitleAlign = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.GroupBackStyle = Krypton.Toolkit.PaletteBackStyle.FormMain; + this.GroupBorderStyle = Krypton.Toolkit.PaletteBorderStyle.FormMain; + this.HeaderStyle = Krypton.Toolkit.HeaderStyle.Form; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualTaskDialogForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.TitleStyle = Krypton.Toolkit.KryptonFormTitleStyle.Inherit; + ((System.ComponentModel.ISupportInitialize)(this._panelMain)).EndInit(); + this._panelMain.ResumeLayout(false); + this._panelMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainSpacer)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainCommands)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainRadio)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelMainText)).EndInit(); + this._panelMainText.ResumeLayout(false); + this._panelMainText.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelIcon)).EndInit(); + this._panelIcon.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this._messageIcon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this._panelButtons)).EndInit(); + this._panelButtons.ResumeLayout(false); + this._panelButtons.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._panelFooter)).EndInit(); + this._panelFooter.ResumeLayout(false); + this._panelFooter.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._iconFooter)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private KryptonPanel _panelMain; + private KryptonPanel _panelMainSpacer; + private KryptonPanel _panelMainCommands; + private KryptonPanel _panelMainRadio; + private KryptonPanel _panelMainText; + private KryptonWrapLabel _messageContent; + private KryptonTextBox _messageContentMultiline; + private KryptonWrapLabel _messageText; + private KryptonPanel _panelIcon; + private PictureBox _messageIcon; + private KryptonPanel _panelButtons; + private KryptonCheckBox _checkBox; + private KryptonBorderEdge _panelButtonsBorderTop; + private TaskDialogMessageButton _buttonOK; + private TaskDialogMessageButton _buttonYes; + private TaskDialogMessageButton _buttonNo; + private TaskDialogMessageButton _buttonRetry; + private TaskDialogMessageButton _buttonCancel; + private TaskDialogMessageButton _buttonClose; + private KryptonPanel _panelFooter; + private KryptonLinkLabel _linkLabelFooter; + private PictureBox _iconFooter; + private KryptonWrapLabel _footerLabel; + private KryptonBorderEdge _panelFooterBorderTop; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.cs new file mode 100644 index 000000000..265b9496a --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.cs @@ -0,0 +1,1045 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + public partial class VisualTaskDialogForm : KryptonForm + { + #region Static Fields + + private const int BUTTON_GAP = 10; + + #endregion + + #region Instance Fields + + private KryptonTaskDialog? _taskDialog; + private readonly string _windowTitle; + private readonly string _mainInstruction; + private readonly string _content; + private readonly KryptonMessageBoxIcon _mainIcon; + private readonly Image? _customMainIcon; + private readonly KryptonTaskDialogCommandCollection _radioButtons; + private readonly KryptonTaskDialogCommandCollection _commandButtons; + private KryptonTaskDialogCommand? _defaultRadioButton; + private readonly TaskDialogButtons _commonButtons; + private readonly TaskDialogButtons _defaultButton; + private readonly KryptonMessageBoxIcon _footerIcon; + private readonly Image? _customFooterIcon; + private readonly string _footerText; + private readonly string _footerHyperlink; + private readonly string _checkboxText; + private bool _checkboxState; + private readonly bool _allowDialogClose; + private readonly bool _useNativeOSIcons; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// The task dialog. + /// taskDialog + public VisualTaskDialogForm(KryptonTaskDialog taskDialog) + { + // Must provide a valid reference + + _taskDialog = taskDialog ?? + throw new ArgumentNullException(nameof(taskDialog)); + + // Initialize with task dialog values + _windowTitle = taskDialog.WindowTitle; + _mainInstruction = taskDialog.MainInstruction; + _content = taskDialog.Content; + _mainIcon = taskDialog.Icon; + _customMainIcon = taskDialog.CustomIcon; + _radioButtons = taskDialog.RadioButtons; + _commandButtons = taskDialog.CommandButtons; + _commonButtons = taskDialog.CommonButtons; + _defaultRadioButton = taskDialog.DefaultRadioButton; + _defaultButton = taskDialog.DefaultButton; + _footerIcon = taskDialog.FooterIcon; + _customFooterIcon = taskDialog.CustomFooterIcon; + _footerText = taskDialog.FooterText; + _footerHyperlink = taskDialog.FooterHyperlink; + _checkboxText = taskDialog.CheckboxText; + _checkboxState = taskDialog.CheckboxState; + _allowDialogClose = taskDialog.AllowDialogClose; + _useNativeOSIcons = taskDialog.UseNativeOSIcons; + + TextExtra = taskDialog.TextExtra; + + InitializeComponent(); + + UpdateContents(); + } + + #endregion + + #region Implementation + + private void UpdateContents() + { + // Update contents to match requirements + UpdateText(); + UpdateIcon(); + UpdateRadioButtons(); + UpdateCommandButtons(); + UpdateButtons(); + UpdateCheckbox(); + UpdateFooter(); + UpdateChrome(); + + // Finally calculate and set form sizing + UpdateSizing(); + } + + private void UpdateText() + { + Text = _windowTitle; + _messageText.Text = _mainInstruction; + // If the content has more than 20 lines, use the multi-line text control + if (string.IsNullOrEmpty(_content)) + { + _messageContent.Text = string.Empty; + } + else if (_content.Length - _content.Replace("\n", string.Empty).Length > 20) + { + _messageContentMultiline.Text = _content; + _messageContentMultiline.Visible = true; + _messageContent.Visible = false; + } + else + { + _messageContent.Text = _content; + _messageContentMultiline.Visible = false; + _messageContent.Visible = true; + } + } + + private void UpdateIcon() + { + _panelIcon.Visible = true; + + // Always use the custom icon as the preferred option + if (_customMainIcon != null) + { + _messageIcon.Image = _customMainIcon; + } + else + { + switch (_mainIcon) + { + case KryptonMessageBoxIcon.None: + _panelIcon.Visible = false; + _panelMainText.Left -= _messageIcon.Right; + break; + case KryptonMessageBoxIcon.Hand: + _messageIcon.Image = TaskDialogImageResources.TaskDialogHandGeneric; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Question: + _messageIcon.Image = TaskDialogImageResources.TaskDialogQuestionGeneric; + SystemSounds.Question.Play(); + break; + case KryptonMessageBoxIcon.Exclamation: + _messageIcon.Image = TaskDialogImageResources.TaskDialogWarningGeneric; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Asterisk: + _messageIcon.Image = TaskDialogImageResources.TaskDialogAsteriskGeneric; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Stop: + _messageIcon.Image = TaskDialogImageResources.TaskDialogStopGeneric; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Information: + _messageIcon.Image = TaskDialogImageResources.TaskDialogInformationGeneric; + SystemSounds.Asterisk.Play(); + break; + case KryptonMessageBoxIcon.Warning: + _messageIcon.Image = TaskDialogImageResources.TaskDialogWarningGeneric; + SystemSounds.Exclamation.Play(); + break; + case KryptonMessageBoxIcon.Error: + _messageIcon.Image = TaskDialogImageResources.TaskDialogCriticalGeneric; + SystemSounds.Hand.Play(); + break; + case KryptonMessageBoxIcon.Shield: + _messageIcon.Image = GraphicsExtensions.ScaleImage(SystemIcons.Shield.ToBitmap(), new Size(16, 16)); + break; + case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on a image instead + if (OSUtilities.IsAtLeastWindowsEleven) + { + _messageIcon.Image = TaskDialogImageResources.TaskDialog_Windows_11_Logo; + } + // Windows 10 + else if (OSUtilities.IsWindowsTen) + { + _messageIcon.Image = TaskDialogImageResources.TaskDialog_Windows_8_and_10_Logo; + } + else + { + _messageIcon.Image = GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(16, 16)); + } + break; + } + } + } + + private void UpdateRadioButtons() + { + if (_radioButtons.Count == 0) + { + _panelMainRadio.Visible = false; + } + else + { + _panelMainRadio.Controls.Clear(); + _panelMainRadio.Visible = true; + + var maxButtonSize = Size.Empty; + foreach (KryptonTaskDialogCommand command in _radioButtons) + { + // Create and add a new radio button instance + var button = new KryptonRadioButton + { + LabelStyle = LabelStyle.NormalPanel + }; + button.Values.Text = command.Text; + button.Values.ExtraText = command.ExtraText; + button.Values.Image = command.Image; + button.Values.ImageTransparentColor = command.ImageTransparentColor; + button.Enabled = command.Enabled; + button.CheckedChanged += OnRadioButtonCheckedChanged; + button.Tag = command; + if (_defaultRadioButton == command) + { + button.Checked = true; + } + + _panelMainRadio.Controls.Add(button); + + // Note that largest radio button encountered + Size buttonSize = button.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonSize.Width); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonSize.Height); + } + + // Enforce a maximum width to the commands + maxButtonSize.Width = Math.Min(Math.Max(maxButtonSize.Width, 150), 400); + + // Position the radio buttons in a vertical stack and size owning panel + var offset = new Point(BUTTON_GAP - 1, 2); + foreach (KryptonRadioButton button in _panelMainRadio.Controls) + { + button.Location = offset; + button.Size = maxButtonSize; + offset.Y += maxButtonSize.Height; + } + + // Size to the contained command controls + _panelMainRadio.Size = maxButtonSize with { Height = offset.Y }; + } + } + + private void UpdateCommandButtons() + { + if (_commandButtons.Count == 0) + { + _panelMainCommands.Visible = false; + } + else + { + _panelMainCommands.Controls.Clear(); + _panelMainCommands.Visible = true; + + var maxButtonSize = Size.Empty; + foreach (KryptonTaskDialogCommand command in _commandButtons) + { + // Create and add a new button instance + var button = new KryptonButton + { + ButtonStyle = ButtonStyle.Command + }; + button.StateCommon.Content.Image!.ImageH = PaletteRelativeAlign.Near; + button.StateCommon.Content.ShortText.TextH = PaletteRelativeAlign.Near; + button.StateCommon.Content.LongText.TextH = PaletteRelativeAlign.Near; + button.Values.Text = command.Text; + button.Values.ExtraText = command.ExtraText; + button.Values.Image = command.Image; + button.Values.ImageTransparentColor = command.ImageTransparentColor; + button.Enabled = command.Enabled; + button.DialogResult = command.DialogResult; + button.Tag = command; + button.Click += OnCommandClicked; + _panelMainCommands.Controls.Add(button); + + // Note that largest button encountered + Size buttonSize = button.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonSize.Width); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonSize.Height); + } + + // Enforce a maximum width to the commands + maxButtonSize.Width = Math.Min(Math.Max(maxButtonSize.Width, 150), 400); + + // Position the buttons in a vertical stack and size owning panel + var offset = new Point(BUTTON_GAP - 1, 2); + foreach (KryptonButton button in _panelMainCommands.Controls) + { + button.Location = offset; + button.Size = maxButtonSize; + offset.Y += maxButtonSize.Height; + } + + // Size to the contained command controls + _panelMainCommands.Size = maxButtonSize with { Height = offset.Y }; + } + } + + private void UpdateButtons() + { + TaskDialogMessageButton? firstButton = null; + TaskDialogMessageButton? defaultButton = null; + + if ((_commonButtons & TaskDialogButtons.OK) == TaskDialogButtons.OK) + { + if ((_defaultButton & TaskDialogButtons.OK) == TaskDialogButtons.OK) + { + defaultButton = _buttonOK; + } + + firstButton = _buttonOK; + _buttonOK.Text = KryptonManager.Strings.GeneralStrings.OK; + _buttonOK.Visible = true; + } + else + { + _buttonOK.Visible = false; + } + + if ((_commonButtons & TaskDialogButtons.Yes) == TaskDialogButtons.Yes) + { + if ((_defaultButton & TaskDialogButtons.Yes) == TaskDialogButtons.Yes) + { + defaultButton = _buttonYes; + } + + firstButton ??= _buttonYes; + + _buttonYes.Text = KryptonManager.Strings.GeneralStrings.Yes; + _buttonYes.Visible = true; + } + else + { + _buttonYes.Visible = false; + } + + if ((_commonButtons & TaskDialogButtons.No) == TaskDialogButtons.No) + { + if ((_defaultButton & TaskDialogButtons.No) == TaskDialogButtons.No) + { + defaultButton = _buttonNo; + } + + firstButton ??= _buttonNo; + + _buttonNo.Text = KryptonManager.Strings.GeneralStrings.No; + _buttonNo.Visible = true; + } + else + { + _buttonNo.Visible = false; + } + + if ((_commonButtons & TaskDialogButtons.Cancel) == TaskDialogButtons.Cancel) + { + if ((_defaultButton & TaskDialogButtons.Cancel) == TaskDialogButtons.Cancel) + { + defaultButton = _buttonCancel; + } + + firstButton ??= _buttonCancel; + + _buttonCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; + _buttonCancel.Visible = true; + } + else + { + _buttonCancel.Visible = false; + } + + if ((_commonButtons & TaskDialogButtons.Retry) == TaskDialogButtons.Retry) + { + if ((_defaultButton & TaskDialogButtons.Retry) == TaskDialogButtons.Retry) + { + defaultButton = _buttonRetry; + } + + firstButton ??= _buttonRetry; + + _buttonRetry.Text = KryptonManager.Strings.GeneralStrings.Retry; + _buttonRetry.Visible = true; + } + else + { + _buttonRetry.Visible = false; + } + + if ((_commonButtons & TaskDialogButtons.Close) == TaskDialogButtons.Close) + { + if ((_defaultButton & TaskDialogButtons.Close) == TaskDialogButtons.Close) + { + defaultButton = _buttonClose; + } + + firstButton ??= _buttonClose; + + _buttonClose.Text = KryptonManager.Strings.GeneralStrings.Close; + _buttonClose.Visible = true; + } + else + { + _buttonClose.Visible = false; + } + + if (defaultButton != null) + { + defaultButton.Select(); + } + else + { + firstButton?.Select(); + } + } + + private void UpdateCheckbox() + { + _checkBox.Checked = _checkboxState; + _checkBox.Text = _checkboxText; + _checkBox.Visible = !string.IsNullOrEmpty(_checkboxText); + } + + private void UpdateFooter() + { + _iconFooter.Visible = true; + + // Always use the custom icon as the preferred option + if (_customFooterIcon != null) + { + _iconFooter.Image = _customFooterIcon; + } + else + { + switch (_footerIcon) + { + case KryptonMessageBoxIcon.None: + _iconFooter.Visible = false; + break; + case KryptonMessageBoxIcon.Question: + ChangeFooterIcon(KryptonMessageBoxIcon.Question, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Information: + ChangeFooterIcon(KryptonMessageBoxIcon.Information, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Warning: + ChangeFooterIcon(KryptonMessageBoxIcon.Warning, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Error: + ChangeFooterIcon(KryptonMessageBoxIcon.Error, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Hand: + ChangeFooterIcon(KryptonMessageBoxIcon.Hand, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Exclamation: + ChangeFooterIcon(KryptonMessageBoxIcon.Exclamation, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Asterisk: + ChangeFooterIcon(KryptonMessageBoxIcon.Asterisk, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Stop: + ChangeFooterIcon(KryptonMessageBoxIcon.Stop, _useNativeOSIcons); + break; + case KryptonMessageBoxIcon.Shield: + _iconFooter.Image = GraphicsExtensions.ScaleImage(SystemIcons.Shield.ToBitmap(), new Size(16, 16)); + break; + case KryptonMessageBoxIcon.WindowsLogo: + // Because Windows 11 displays a generic application icon, + // we need to rely on a image instead + if (OSUtilities.IsAtLeastWindowsEleven) + { + _iconFooter.Image = TaskDialogImageResources.TaskDialog_Windows_11_Logo; + } + // Windows 10 + else if (OSUtilities.IsWindowsTen) + { + _iconFooter.Image = TaskDialogImageResources.TaskDialog_Windows_8_and_10_Logo; + } + else + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.WinLogo.ToBitmap(), new Size(16, 16)); + } + + break; + } + } + + _footerLabel.Text = _footerText; + _linkLabelFooter.Text = _footerHyperlink; + } + + private void ChangeFooterIcon(KryptonMessageBoxIcon icon, bool useNativeOsIcons) + { + switch (icon) + { + case KryptonMessageBoxIcon.Hand: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Hand.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogHandGeneric; + } + break; + case KryptonMessageBoxIcon.Question: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Question.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogQuestionGeneric; + } + break; + case KryptonMessageBoxIcon.Exclamation: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Exclamation.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogWarningGeneric; + } + break; + case KryptonMessageBoxIcon.Asterisk: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogAsteriskGeneric; + } + break; + case KryptonMessageBoxIcon.Stop: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Asterisk.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogStopGeneric; + } + break; + case KryptonMessageBoxIcon.Error: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Error.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogAsteriskGeneric; + } + break; + case KryptonMessageBoxIcon.Warning: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Warning.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogWarningGeneric; + } + break; + case KryptonMessageBoxIcon.Information: + if (useNativeOsIcons) + { + _iconFooter.Image = + GraphicsExtensions.ScaleImage(SystemIcons.Information.ToBitmap(), new Size(16, 16)); + } + else + { + _iconFooter.Image = TaskDialogImageResources.TaskDialogInformationGeneric; + } + break; + default: + throw new ArgumentOutOfRangeException(nameof(icon), icon, null); + } + } + + private void UpdateChrome() + { + if (((_commonButtons & TaskDialogButtons.Cancel) == TaskDialogButtons.Cancel) || _allowDialogClose) + { + ControlBox = true; + } + else + { + ControlBox = false; + } + + _buttonOK.IgnoreAltF4 = !ControlBox; + _buttonYes.IgnoreAltF4 = !ControlBox; + _buttonNo.IgnoreAltF4 = !ControlBox; + _buttonCancel.IgnoreAltF4 = !ControlBox; + _buttonRetry.IgnoreAltF4 = !ControlBox; + _buttonClose.IgnoreAltF4 = !ControlBox; + } + + private void UpdateSizing() + { + Size messageSizing = UpdateMainTextSizing(); + Size radioSizing = UpdateRadioSizing(); + Size commandSizing = UpdateCommandSizing(); + Size spacerSizing = UpdateSpacerSizing(); + Size iconSizing = UpdateIconSizing(); + Size buttonsSizing = UpdateButtonsSizing(); + Size footerSizing = UpdateFooterSizing(); + + // Size of window is calculated from the client area + ClientSize = new Size(iconSizing.Width + Math.Max(messageSizing.Width, Math.Max(commandSizing.Width, Math.Max(radioSizing.Width, Math.Max(buttonsSizing.Width, footerSizing.Width)))), + Math.Max(iconSizing.Height, messageSizing.Height + radioSizing.Height + commandSizing.Height + spacerSizing.Height) + buttonsSizing.Height + footerSizing.Height); + } + + private Size UpdateMainTextSizing() + { + Size messageContentSize; + + // Update size of the main instruction and content labels but applying a sensible maximum + using (Graphics g = CreateGraphics()) + { + // Find size of the labels when it has a maximum length of 400 + _messageText.UpdateFont(); + _messageContent.UpdateFont(); + _messageContentMultiline.Font = _messageContent.Font; + var messageMainSize = g.MeasureString(_mainInstruction, _messageText.Font, 400).ToSize(); + messageContentSize = g.MeasureString(_content, _messageContent.Font, 400).ToSize(); + + // Get the display size and make sure that the content size is not greater than 0.6 of display size + Rectangle dispSize = Screen.GetWorkingArea(Location); + + var h = (int)Math.Min(messageContentSize.Height, dispSize.Height * 0.6); + var w = (int)Math.Min(messageContentSize.Width, dispSize.Width * 0.6); + var sz = new Size(w, h); + if (messageContentSize != sz) + { + messageContentSize = sz; + } + + // Work out DPI adjustment factor + messageMainSize.Width = (int)(messageMainSize.Width * FactorDpiX); + messageMainSize.Height = (int)(messageMainSize.Height * FactorDpiY); + messageContentSize.Width = (int)(messageContentSize.Width * FactorDpiX); + messageContentSize.Height = (int)(messageContentSize.Height * FactorDpiY); + + // Always add on an extra 5 pixels as sometimes the measure size does not draw the last + // character it contains, this ensures there is always definitely enough space for it all + messageMainSize.Width += 5; + messageContentSize.Width += 5; + _messageText.Size = messageMainSize; + _messageContent.Size = messageContentSize; + _messageContentMultiline.Size = messageContentSize; + } + + // Resize panel containing the main text + Padding panelMessagePadding = _panelMainText.Padding; + _panelMainText.Width = Math.Max(_messageText.Size.Width, messageContentSize.Width) + panelMessagePadding.Horizontal; + _panelMainText.Height = _messageText.Size.Height + messageContentSize.Height + panelMessagePadding.Vertical + BUTTON_GAP; + + // Position the content label below the main label + _messageContent.Location = new Point(_messageText.Left + 2, _messageText.Bottom); + _messageContentMultiline.Location = _messageContent.Location; + return _panelMainText.Size; + } + + private Size UpdateIconSizing() => _messageIcon.Image == null ? Size.Empty : _panelIcon.Size; + + private Size UpdateRadioSizing() + { + _panelMainRadio.Location = new Point(_panelMainText.Left, _panelMainText.Top + _panelMainText.Height); + + if (_radioButtons.Count == 0) + { + _panelMainRadio.Size = Size.Empty; + return Size.Empty; + } + + return _panelMainRadio.Size with { Width = _panelMainRadio.Size.Width + BUTTON_GAP + 2 }; + } + + private Size UpdateCommandSizing() + { + _panelMainCommands.Location = new Point(_panelMainRadio.Left, _panelMainRadio.Top + _panelMainRadio.Height); + + if (_commandButtons.Count == 0) + { + _panelMainCommands.Size = Size.Empty; + return Size.Empty; + } + + return _panelMainCommands.Size with { Width = _panelMainCommands.Size.Width + BUTTON_GAP + 2 }; + } + + private Size UpdateSpacerSizing() + { + _panelMainSpacer.Location = new Point(_panelMainCommands.Left, _panelMainCommands.Top + _panelMainCommands.Height); + return _panelMainSpacer.Size; + } + + private Size UpdateButtonsSizing() + { + var numButtons = 0; + var maxButtonSize = Size.Empty; + + // Find the size of the largest button we need + if ((_commonButtons & TaskDialogButtons.Close) == TaskDialogButtons.Close) + { + numButtons++; + Size buttonCancelSize = _buttonClose.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonCancelSize.Width + BUTTON_GAP); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonCancelSize.Height); + } + + if ((_commonButtons & TaskDialogButtons.Retry) == TaskDialogButtons.Retry) + { + numButtons++; + Size buttonRetrySize = _buttonRetry.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonRetrySize.Width + BUTTON_GAP); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonRetrySize.Height); + } + + if ((_commonButtons & TaskDialogButtons.Cancel) == TaskDialogButtons.Cancel) + { + numButtons++; + Size buttonCancelSize = _buttonCancel.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonCancelSize.Width + BUTTON_GAP); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonCancelSize.Height); + } + + if ((_commonButtons & TaskDialogButtons.No) == TaskDialogButtons.No) + { + numButtons++; + Size buttonNoSize = _buttonNo.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonNoSize.Width + BUTTON_GAP); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonNoSize.Height); + } + + if ((_commonButtons & TaskDialogButtons.Yes) == TaskDialogButtons.Yes) + { + numButtons++; + Size buttonYesSize = _buttonYes.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonYesSize.Width + BUTTON_GAP); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonYesSize.Height); + } + + if ((_commonButtons & TaskDialogButtons.OK) == TaskDialogButtons.OK) + { + numButtons++; + Size buttonOKSize = _buttonOK.GetPreferredSize(Size.Empty); + maxButtonSize.Width = Math.Max(maxButtonSize.Width, buttonOKSize.Width + BUTTON_GAP); + maxButtonSize.Height = Math.Max(maxButtonSize.Height, buttonOKSize.Height); + } + + + // Start positioning buttons from right edge + var right = _panelButtons.Right - BUTTON_GAP; + + if ((_commonButtons & TaskDialogButtons.Close) == TaskDialogButtons.Close) + { + _buttonClose.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonClose.Size = maxButtonSize; + right -= maxButtonSize.Width + BUTTON_GAP; + } + + if ((_commonButtons & TaskDialogButtons.Retry) == TaskDialogButtons.Retry) + { + _buttonRetry.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonRetry.Size = maxButtonSize; + right -= maxButtonSize.Width + BUTTON_GAP; + } + + if ((_commonButtons & TaskDialogButtons.Cancel) == TaskDialogButtons.Cancel) + { + _buttonCancel.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonCancel.Size = maxButtonSize; + right -= maxButtonSize.Width + BUTTON_GAP; + } + + if ((_commonButtons & TaskDialogButtons.No) == TaskDialogButtons.No) + { + _buttonNo.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonNo.Size = maxButtonSize; + right -= maxButtonSize.Width + BUTTON_GAP; + } + + if ((_commonButtons & TaskDialogButtons.Yes) == TaskDialogButtons.Yes) + { + _buttonYes.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonYes.Size = maxButtonSize; + right -= maxButtonSize.Width + BUTTON_GAP; + } + + if ((_commonButtons & TaskDialogButtons.OK) == TaskDialogButtons.OK) + { + _buttonOK.Location = new Point(right - maxButtonSize.Width, BUTTON_GAP); + _buttonOK.Size = maxButtonSize; + right -= maxButtonSize.Width + BUTTON_GAP; + } + + var checkboxSize = Size.Empty; + if (!string.IsNullOrEmpty(_checkboxText)) + { + checkboxSize = _checkBox.GetPreferredSize(Size.Empty); + } + + if (numButtons == 0) + { + if (checkboxSize.IsEmpty) + { + _panelButtons.Visible = false; + return Size.Empty; + } + else + { + _panelButtons.Visible = true; + _checkBox.Location = new Point(BUTTON_GAP, BUTTON_GAP); + return new Size(checkboxSize.Width + (BUTTON_GAP * 2), checkboxSize.Height + (BUTTON_GAP * 2)); + } + } + else + { + _panelButtons.Visible = true; + + var panelButtonSize = new Size((maxButtonSize.Width * numButtons) + (BUTTON_GAP * (numButtons + 1)), + maxButtonSize.Height + (BUTTON_GAP * 2)); + + if (!checkboxSize.IsEmpty) + { + panelButtonSize.Width += checkboxSize.Width; + panelButtonSize.Height = Math.Max(panelButtonSize.Height, checkboxSize.Height + (BUTTON_GAP * 2)); + _checkBox.Location = new Point(BUTTON_GAP, (panelButtonSize.Height - checkboxSize.Height) / 2); + } + + return panelButtonSize; + } + } + + private Size UpdateFooterSizing() + { + // Update size of the footer but applying a sensible maximum + using Graphics g = CreateGraphics(); + // Find size of the labels when it has a maximum length of 400 + _footerLabel.UpdateFont(); + var footerTextSize = g.MeasureString(_footerText, _footerLabel.Font, 200).ToSize(); + var footerHyperlinkSize = g.MeasureString(_footerHyperlink, _footerLabel.Font, 200).ToSize(); + + // Always add on an extra 5 pixels as sometimes the measure size does not draw the last + // character it contains, this ensures there is always definitely enough space for it all + footerTextSize.Width += 5; + footerHyperlinkSize.Width += 5; + _footerLabel.Size = footerTextSize; + _linkLabelFooter.Size = footerHyperlinkSize; + + // Find required size of the footer panel + var requiredSize = Size.Empty; + + if (!string.IsNullOrEmpty(_footerText)) + { + requiredSize.Width += footerTextSize.Width; + requiredSize.Height = footerTextSize.Height; + } + + if (!string.IsNullOrEmpty(_footerHyperlink)) + { + requiredSize.Width += footerHyperlinkSize.Width; + requiredSize.Height = Math.Max(requiredSize.Height, footerHyperlinkSize.Height); + } + + if ((_footerIcon != KryptonMessageBoxIcon.None) || (_customFooterIcon != null)) + { + requiredSize.Width += _iconFooter.Width + BUTTON_GAP; + requiredSize.Height = Math.Max(requiredSize.Height, _iconFooter.Size.Height); + } + + if (requiredSize.Width > 0) + { + requiredSize.Width += BUTTON_GAP * 2; + requiredSize.Height += BUTTON_GAP * 2; + } + + // Do we have anything to show? + _panelFooter.Visible = requiredSize.Width > 0; + + // Position the footer elements + if (requiredSize.Width > 0) + { + _panelFooter.Size = requiredSize; + var offset = BUTTON_GAP; + + if ((_footerIcon != KryptonMessageBoxIcon.None) || (_customFooterIcon != null)) + { + _iconFooter.Location = new Point(offset, (requiredSize.Height - _iconFooter.Height) / 2); + offset += _iconFooter.Width + (BUTTON_GAP / 2); + } + + if (!string.IsNullOrEmpty(_footerText)) + { + _footerLabel.Location = new Point(offset, (requiredSize.Height - footerTextSize.Height) / 2); + offset += _footerLabel.Width - 8; + } + + if (!string.IsNullOrEmpty(_footerHyperlink)) + { + _linkLabelFooter.Location = !string.IsNullOrEmpty(_footerText) + ? new Point(offset, _footerLabel.Location.Y - 1) + : new Point(offset, (requiredSize.Height - footerHyperlinkSize.Height) / 2); + + offset += _footerLabel.Width; + } + } + + return requiredSize; + } + + private void OnRadioButtonCheckedChanged(object? sender, EventArgs e) + { + var button = sender as KryptonRadioButton; + _defaultRadioButton = button?.Tag as KryptonTaskDialogCommand; + if (_taskDialog != null) + { + _taskDialog.DefaultRadioButton = _defaultRadioButton; + } + } + + private void OnCommandClicked(object? sender, EventArgs e) + { + Close(); + + // Update the result code from the command button + var button = sender as KryptonButton; + DialogResult = button!.DialogResult; + + // Invoke any event handlers from the command button + var command = button.Tag as KryptonTaskDialogCommand; + command?.PerformExecute(); + } + + private void OnTaskDialogFormClosing(object sender, FormClosingEventArgs e) + { + // If the dialog is being closed because of a user event then it would be either + // Alt+F4, Hit the close chrome button or the Close common dialog button + if (e.CloseReason == CloseReason.UserClosing) + { + DialogResult = DialogResult.Cancel; + } + } + +#pragma warning disable IDE1006 // Naming Styles + private void checkBox_CheckedChanged(object sender, EventArgs e) +#pragma warning restore IDE1006 // Naming Styles + { + _checkboxState = _checkBox.Checked; + if (_taskDialog != null) + { + _taskDialog.CheckboxState = _checkboxState; + } + } + + private void LinkLabelFooter_LinkClicked(object sender, EventArgs e) => _taskDialog?.RaiseFooterHyperlinkClicked(); + + private void _buttonClose_Click(object sender, EventArgs e) => Close(); + +#pragma warning disable IDE1006 // Naming Styles + private void button_keyDown(object sender, KeyEventArgs e) +#pragma warning restore IDE1006 // Naming Styles + { + // Escape key kills the dialog if we allow it to be closed + if ((e.KeyCode == Keys.Escape) && ControlBox) + { + Close(); + } + else + { + // Pressing Ctrl+C should copy message text into the clipboard + if (e is { Modifiers: Keys.Control, KeyCode: Keys.C }) + { + var sb = new StringBuilder(); + + sb.AppendLine("---------------------------"); + sb.AppendLine(_windowTitle); + sb.AppendLine("---------------------------"); + sb.AppendLine(_mainInstruction); + sb.AppendLine("---------------------------"); + sb.AppendLine(_content); + sb.AppendLine("---------------------------"); + if (_buttonOK.Visible) + { + sb.Append(_buttonOK.Text); + sb.Append(" "); + } + if (_buttonYes.Visible) + { + sb.Append(_buttonYes.Text); + sb.Append(" "); + } + if (_buttonNo.Visible) + { + sb.Append(_buttonNo.Text); + sb.Append(" "); + } + if (_buttonCancel.Visible) + { + sb.Append(_buttonCancel.Text); + sb.Append(" "); + } + if (_buttonRetry.Visible) + { + sb.Append(_buttonRetry.Text); + sb.Append(" "); + } + if (_buttonClose.Visible) + { + sb.Append(_buttonClose.Text); + sb.Append(" "); + } + sb.AppendLine(""); + sb.AppendLine("---------------------------"); + + Clipboard.SetText(sb.ToString(), TextDataFormat.Text); + Clipboard.SetText(sb.ToString(), TextDataFormat.UnicodeText); + } + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualTaskDialogForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.Designer.cs new file mode 100644 index 000000000..4d350c3dc --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.Designer.cs @@ -0,0 +1,412 @@ +namespace Krypton.Toolkit +{ + partial class VisualThemeBrowserForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.kcpbCustom = new Krypton.Toolkit.KryptonCustomPaletteBase(this.components); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.kbtnImport = new Krypton.Toolkit.KryptonButton(); + this.kbtnOK = new Krypton.Toolkit.KryptonButton(); + this.kbtnCancel = new Krypton.Toolkit.KryptonButton(); + this.kchkSilent = new Krypton.Toolkit.KryptonCheckBox(); + this.klblSelectedIndex = new Krypton.Toolkit.KryptonLabel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.klblDescription = new Krypton.Toolkit.KryptonLabel(); + this.klbThemeList = new Krypton.Toolkit.KryptonListBox(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kcpbCustom + // + this.kcpbCustom.BaseFont = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kcpbCustom.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(245)))), ((int)(((byte)(248))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(206)))), ((int)(((byte)(213)))), ((int)(((byte)(225))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(227)))), ((int)(((byte)(196))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StatePressed.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(136)))), ((int)(((byte)(9))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(251)))), ((int)(((byte)(230))))); + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppButton.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(201)))), ((int)(((byte)(41))))); + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor1 = System.Drawing.Color.White; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuDocs.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(195)))), ((int)(((byte)(212)))), ((int)(((byte)(235))))); + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonAppMenuOuter.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(237)))), ((int)(((byte)(245)))), ((int)(((byte)(253))))); + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBack.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(177)))), ((int)(((byte)(192)))), ((int)(((byte)(214))))); + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGalleryBorder.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateCheckedNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextCheckedNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextPressed.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateContextTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(159)))), ((int)(((byte)(178)))), ((int)(((byte)(199))))); + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupArea.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(216)))), ((int)(((byte)(228)))), ((int)(((byte)(242))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateContextTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedBorder.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateContextTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(233)))), ((int)(((byte)(241)))), ((int)(((byte)(250))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBack.StateTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateContextTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateNormal.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(189)))), ((int)(((byte)(203)))), ((int)(((byte)(218))))); + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupCollapsedFrameBorder.StateTracking.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateContextTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateNormal.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(235)))), ((int)(((byte)(240)))), ((int)(((byte)(246))))); + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonGroupNormalBorder.StateTracking.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(251)))), ((int)(((byte)(251)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(213)))), ((int)(((byte)(232)))), ((int)(((byte)(254))))); + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATFullbar.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(154)))), ((int)(((byte)(179)))), ((int)(((byte)(213))))); + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateActive.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(153)))), ((int)(((byte)(176)))), ((int)(((byte)(206))))); + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATMinibar.StateInactive.BackColor5 = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(222)))), ((int)(((byte)(236)))), ((int)(((byte)(252))))); + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor2 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor3 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor4 = System.Drawing.Color.Empty; + this.kcpbCustom.Ribbon.RibbonQATOverflow.BackColor5 = System.Drawing.Color.Empty; + this.kcpbCustom.ThemeName = null; + this.kcpbCustom.UseThemeFormChromeBorderWidth = Krypton.Toolkit.InheritBool.True; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tableLayoutPanel1); + this.kryptonPanel1.Controls.Add(this.klblSelectedIndex); + this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 441); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(796, 50); + this.kryptonPanel1.TabIndex = 0; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel1.ColumnCount = 4; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle()); + this.tableLayoutPanel1.Controls.Add(this.kbtnImport, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnOK, 2, 0); + this.tableLayoutPanel1.Controls.Add(this.kbtnCancel, 3, 0); + this.tableLayoutPanel1.Controls.Add(this.kchkSilent, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 1); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(796, 49); + this.tableLayoutPanel1.TabIndex = 17; + // + // kbtnImport + // + this.kbtnImport.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kbtnImport.Location = new System.Drawing.Point(10, 12); + this.kbtnImport.Margin = new System.Windows.Forms.Padding(10); + this.kbtnImport.Name = "kbtnImport"; + this.kbtnImport.Size = new System.Drawing.Size(90, 25); + this.kbtnImport.TabIndex = 1; + this.kbtnImport.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnImport.Values.Text = "&Import..."; + this.kbtnImport.Click += new System.EventHandler(this.kbtnImport_Click); + // + // kbtnOK + // + this.kbtnOK.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.kbtnOK.Location = new System.Drawing.Point(586, 12); + this.kbtnOK.Margin = new System.Windows.Forms.Padding(10); + this.kbtnOK.Name = "kbtnOK"; + this.kbtnOK.Size = new System.Drawing.Size(90, 25); + this.kbtnOK.TabIndex = 3; + this.kbtnOK.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnOK.Values.Text = "O&K"; + this.kbtnOK.Values.UseAsADialogButton = true; + this.kbtnOK.Click += new System.EventHandler(this.kbtnOK_Click); + // + // kbtnCancel + // + this.kbtnCancel.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnCancel.Location = new System.Drawing.Point(696, 12); + this.kbtnCancel.Margin = new System.Windows.Forms.Padding(10); + this.kbtnCancel.Name = "kbtnCancel"; + this.kbtnCancel.Size = new System.Drawing.Size(90, 25); + this.kbtnCancel.TabIndex = 2; + this.kbtnCancel.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnCancel.Values.Text = "Cance&l"; + this.kbtnCancel.Values.UseAsADialogButton = true; + this.kbtnCancel.Click += new System.EventHandler(this.kbtnCancel_Click); + // + // kchkSilent + // + this.kchkSilent.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.kchkSilent.Location = new System.Drawing.Point(120, 14); + this.kchkSilent.Margin = new System.Windows.Forms.Padding(10); + this.kchkSilent.Name = "kchkSilent"; + this.kchkSilent.Size = new System.Drawing.Size(54, 20); + this.kchkSilent.TabIndex = 13; + this.kchkSilent.Values.Text = "&Silent"; + // + // klblSelectedIndex + // + this.klblSelectedIndex.Location = new System.Drawing.Point(170, 13); + this.klblSelectedIndex.Name = "klblSelectedIndex"; + this.klblSelectedIndex.Size = new System.Drawing.Size(6, 2); + this.klblSelectedIndex.TabIndex = 15; + this.klblSelectedIndex.Values.Text = ""; + this.klblSelectedIndex.Visible = false; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderSecondary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(796, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.tableLayoutPanel2); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(796, 441); + this.kryptonPanel2.TabIndex = 1; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.BackColor = System.Drawing.Color.Transparent; + this.tableLayoutPanel2.ColumnCount = 1; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Controls.Add(this.klblDescription, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.klbThemeList, 0, 1); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(796, 441); + this.tableLayoutPanel2.TabIndex = 2; + // + // klblDescription + // + this.klblDescription.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.klblDescription.Location = new System.Drawing.Point(10, 10); + this.klblDescription.Margin = new System.Windows.Forms.Padding(10); + this.klblDescription.Name = "klblDescription"; + this.klblDescription.Size = new System.Drawing.Size(94, 20); + this.klblDescription.TabIndex = 1; + this.klblDescription.Values.Text = "kryptonLabel1"; + // + // klbThemeList + // + this.klbThemeList.Dock = System.Windows.Forms.DockStyle.Fill; + this.klbThemeList.Location = new System.Drawing.Point(10, 50); + this.klbThemeList.Margin = new System.Windows.Forms.Padding(10); + this.klbThemeList.Name = "klbThemeList"; + this.klbThemeList.Size = new System.Drawing.Size(776, 381); + this.klbThemeList.TabIndex = 0; + this.klbThemeList.SelectedIndexChanged += new System.EventHandler(this.klbThemeList_SelectedIndexChanged); + // + // VisualThemeBrowserForm + // + this.AcceptButton = this.kbtnOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kbtnCancel; + this.ClientSize = new System.Drawing.Size(796, 491); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "VisualThemeBrowserForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + this.Text = "Select a Theme"; + this.UseThemeFormChromeBorderWidth = false; + this.Load += new System.EventHandler(this.KryptonThemeBrowserForm_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonCustomPaletteBase kcpbCustom; + private KryptonPanel kryptonPanel1; + private KryptonPanel kryptonPanel2; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonButton kbtnImport; + private KryptonButton kbtnCancel; + private KryptonListBox klbThemeList; + private KryptonButton kbtnOK; + private KryptonCheckBox kchkSilent; + private KryptonLabel klblDescription; + private KryptonLabel klblSelectedIndex; + private TableLayoutPanel tableLayoutPanel1; + private TableLayoutPanel tableLayoutPanel2; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.cs b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.cs new file mode 100644 index 000000000..8aa2cfead --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.cs @@ -0,0 +1,89 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal partial class VisualThemeBrowserForm : KryptonForm + { + #region Instance Fields + + private readonly KryptonThemeBrowserData _themeBrowserData; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// The data to provide to the . + public VisualThemeBrowserForm(KryptonThemeBrowserData themeBrowserData) + { + InitializeComponent(); + + _themeBrowserData = themeBrowserData; + + AdjustUI(); + } + + #endregion + + #region Implementation + + private void AdjustUI() + { + Text = _themeBrowserData.WindowTitle; + + kbtnImport.Visible = _themeBrowserData.ShowImportButton ?? false; + + kchkSilent.Visible = _themeBrowserData.ShowSilentOption ?? false; + + StartPosition = _themeBrowserData.StartPosition ?? FormStartPosition.CenterScreen; + + //klbThemeList.SelectedIndex = _startIndex; + + klblDescription.Text = KryptonManager.Strings.MiscellaneousThemeStrings.ThemeBrowserDescription; + + kbtnImport.Text = KryptonManager.Strings.MiscellaneousThemeStrings.Import; + + kchkSilent.Text = KryptonManager.Strings.MiscellaneousThemeStrings.Silent; + + kbtnCancel.Text = KryptonManager.Strings.GeneralStrings.Cancel; + + kbtnOK.Text = KryptonManager.Strings.GeneralStrings.OK; + } + + private void kbtnImport_Click(object sender, EventArgs e) => kcpbCustom.Import(kchkSilent.Checked); + + private void KryptonThemeBrowserForm_Load(object sender, EventArgs e) + { + foreach (var themeName in ThemeManager.SupportedInternalThemeNames) + { + if (themeName != null) + { + klbThemeList.Items.Add(themeName); + } + } + + klbThemeList.SelectedItem = _themeBrowserData.StartIndex; + } + + private void kbtnOK_Click(object sender, EventArgs e) => DialogResult = DialogResult.OK; + + private void kbtnCancel_Click(object sender, EventArgs e) => DialogResult = DialogResult.Cancel; + + private void klbThemeList_SelectedIndexChanged(object sender, EventArgs e) + { + ThemeManager.ApplyTheme(klbThemeList.GetItemText(klbThemeList.SelectedItem)!, new KryptonManager()); + + SetIndexText($@"{klbThemeList.GetItemText(klbThemeList.SelectedItem)} - Index: {klbThemeList.SelectedIndex}"); + } + + private void SetIndexText(string v) => klblSelectedIndex.Text = v; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.resx b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.resx new file mode 100644 index 000000000..28b419daf --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Controls Visuals/VisualThemeBrowserForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonSpecFormFixedConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonSpecFormFixedConverter.cs index e8deee38d..6789a994f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonSpecFormFixedConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonSpecFormFixedConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonStyleConverter.cs index 18d9b8cf4..46f819bb8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/ButtonStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class ButtonStyleConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {ButtonStyle.Standalone, DesignTimeUtilities.DEFAULT_BUTTON_SPEC_STYLE_STANDALONE}, {ButtonStyle.Alternate, DesignTimeUtilities.DEFAULT_BUTTON_SPEC_STYLE_ALTERNATE}, @@ -41,7 +42,7 @@ internal class ButtonStyleConverter : StringLookupConverter {ButtonStyle.Custom1, DesignTimeUtilities.DEFAULT_BUTTON_SPEC_STYLE_CUSTOM_ONE}, {ButtonStyle.Custom2, DesignTimeUtilities.DEFAULT_BUTTON_SPEC_STYLE_CUSTOM_TWO}, {ButtonStyle.Custom3, DesignTimeUtilities.DEFAULT_BUTTON_SPEC_STYLE_CUSTOM_THREE} - }; + }); #endregion @@ -50,7 +51,8 @@ internal class ButtonStyleConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/DataGridViewStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/DataGridViewStyleConverter.cs index 2f213cc17..e09fa8166 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/DataGridViewStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/DataGridViewStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class DataGridViewStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {DataGridViewStyle.List, DesignTimeUtilities.DEFAULT_DATA_GRID_VIEW_STYLE_LIST}, {DataGridViewStyle.Sheet, DesignTimeUtilities.DEFAULT_DATA_GRID_VIEW_STYLE_SHEET}, @@ -28,7 +29,7 @@ internal class DataGridViewStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/DateTimeNullableConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/DateTimeNullableConverter.cs index 42d961b0e..42fe9b7fe 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/DateTimeNullableConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/DateTimeNullableConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -41,7 +41,7 @@ public DateTimeNullableConverter() // We allow an empty string or a string with DBNull/null/Nothing to be converted to a DBNull value. if (value is string) { - var stringValue = value.ToString().ToLower(); + var stringValue = value.ToString()!.ToLower(); if (stringValue is "dbnull" or "null" or "nothing") { return DBNull.Value; diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/GridStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/GridStyleConverter.cs index 84f290198..de22db4f1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/GridStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/GridStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,14 +20,15 @@ internal class GridStyleConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {GridStyle.List, DesignTimeUtilities.DEFAULT_GRID_STYLE_LIST}, {GridStyle.Sheet, DesignTimeUtilities.DEFAULT_GRID_STYLE_SHEET}, {GridStyle.Custom1, DesignTimeUtilities.DEFAULT_GRID_STYLE_CUSTOM_ONE}, {GridStyle.Custom2, DesignTimeUtilities.DEFAULT_GRID_STYLE_CUSTOM_TWO}, {GridStyle.Custom3, DesignTimeUtilities.DEFAULT_GRID_STYLE_CUSTOM_THREE} - }; + }); #endregion @@ -36,7 +37,8 @@ internal class GridStyleConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderGroupCollapseTargetConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderGroupCollapseTargetConverter.cs index f45efa56b..8684e2eec 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderGroupCollapseTargetConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderGroupCollapseTargetConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,12 +20,13 @@ internal class HeaderGroupCollapsedTargetConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { { HeaderGroupCollapsedTarget.CollapsedToPrimary, DesignTimeUtilities.DEFAULT_HEADER_GROUP_COLLAPSED_TARGET_COLLAPSED_TO_PRIMARY}, {HeaderGroupCollapsedTarget.CollapsedToSecondary, DesignTimeUtilities.DEFAULT_HEADER_GROUP_COLLAPSED_TARGET_COLLAPSED_TO_SECONDARY}, {HeaderGroupCollapsedTarget.CollapsedToBoth, DesignTimeUtilities.DEFAULT_HEADER_GROUP_COLLAPSED_TARGET_COLLAPSED_TO_BOTH} - }; + }); #endregion @@ -34,7 +35,8 @@ internal class HeaderGroupCollapsedTargetConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderStyleConverter.cs index 7fd25c1b1..f79b25a86 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/HeaderStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class HeaderStyleConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {HeaderStyle.Primary, DesignTimeUtilities.DEFAULT_HEADER_STYLE_PRIMARY}, {HeaderStyle.Secondary, DesignTimeUtilities.DEFAULT_HEADER_STYLE_SECONDARY}, @@ -31,7 +32,7 @@ internal class HeaderStyleConverter : StringLookupConverter {HeaderStyle.Custom1, DesignTimeUtilities.DEFAULT_HEADER_STYLE_CUSTOM_ONE}, {HeaderStyle.Custom2, DesignTimeUtilities.DEFAULT_HEADER_STYLE_CUSTOM_TWO}, {HeaderStyle.Custom3, DesignTimeUtilities.DEFAULT_HEADER_STYLE_CUSTOM_THREE} - }; + }); #endregion @@ -39,7 +40,8 @@ internal class HeaderStyleConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/InputControlStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/InputControlStyleConverter.cs index 125219651..6e30e619a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/InputControlStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/InputControlStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class InputControlStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {InputControlStyle.Standalone, DesignTimeUtilities.DEFAULT_INPUT_CONTROL_STYLE_STANDALONE}, {InputControlStyle.Ribbon, DesignTimeUtilities.DEFAULT_INPUT_CONTROL_STYLE_RIBBON}, @@ -28,9 +29,9 @@ internal class InputControlStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonCheckedButtonConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonCheckedButtonConverter.cs index 731d89bac..4f9549b85 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonCheckedButtonConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonCheckedButtonConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonLinkBehaviorConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonLinkBehaviorConverter.cs index 7e47bd433..d9390256b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonLinkBehaviorConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonLinkBehaviorConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,12 +20,13 @@ internal class KryptonLinkBehaviorConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {KryptonLinkBehavior.AlwaysUnderline, DesignTimeUtilities.DEFAULT_LINK_BEHAVIOR_ALWAYS_UNDERLINE}, {KryptonLinkBehavior.HoverUnderline, DesignTimeUtilities.DEFAULT_LINK_BEHAVIOR_HOVER_UNDERLINE}, {KryptonLinkBehavior.NeverUnderline, DesignTimeUtilities.DEFAULT_LINK_BEHAVIOR_NEVER_UNDERLINE} - }; + }); #endregion @@ -33,7 +34,8 @@ internal class KryptonLinkBehaviorConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonMessageBoxIconConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonMessageBoxIconConverter.cs new file mode 100644 index 000000000..caf828506 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonMessageBoxIconConverter.cs @@ -0,0 +1,57 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Custom type converter so that values appear as neat text at design time. + internal class KryptonMessageBoxIconConverter : StringLookupConverter + { + #region Static Fields + + [Localizable(true)] + private static readonly BiDictionary _iconPairs = + new BiDictionary(new Dictionary + { + { KryptonMessageBoxIcon.None, DesignTimeUtilities.DEFAULT_ICON_NONE }, + { KryptonMessageBoxIcon.Hand, DesignTimeUtilities.DEFAULT_ICON_HAND }, + { KryptonMessageBoxIcon.SystemHand, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_HAND }, + { KryptonMessageBoxIcon.Question, DesignTimeUtilities.DEFAULT_ICON_QUESTION }, + { KryptonMessageBoxIcon.SystemQuestion, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_QUESTION }, + { KryptonMessageBoxIcon.Exclamation, DesignTimeUtilities.DEFAULT_ICON_EXCLAMATION }, + { KryptonMessageBoxIcon.SystemExclamation, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_EXCLAMATION }, + { KryptonMessageBoxIcon.Asterisk, DesignTimeUtilities.DEFAULT_ICON_ASTERISK }, + { KryptonMessageBoxIcon.SystemAsterisk, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_ASTERISK }, + { KryptonMessageBoxIcon.Stop, DesignTimeUtilities.DEFAULT_ICON_STOP }, + { KryptonMessageBoxIcon.SystemStop, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_STOP }, + { KryptonMessageBoxIcon.Error, DesignTimeUtilities.DEFAULT_ICON_ERROR }, + { KryptonMessageBoxIcon.SystemError, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_ERROR }, + { KryptonMessageBoxIcon.Warning, DesignTimeUtilities.DEFAULT_ICON_WARNING }, + { KryptonMessageBoxIcon.SystemWarning, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_WARNING }, + { KryptonMessageBoxIcon.Information, DesignTimeUtilities.DEFAULT_ICON_INFORMATION }, + { KryptonMessageBoxIcon.SystemInformation, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_INFORMATION }, + { KryptonMessageBoxIcon.Shield, DesignTimeUtilities.DEFAULT_ICON_SHIELD }, + { KryptonMessageBoxIcon.WindowsLogo, DesignTimeUtilities.DEFAULT_ICON_WINDOWS_LOGO }, + { KryptonMessageBoxIcon.Application, DesignTimeUtilities.DEFAULT_ICON_APPLICATION }, + { KryptonMessageBoxIcon.SystemApplication, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_APPLICATION } + }); + + #endregion + + #region Protected + + /// Gets an array of lookup pairs. + protected override IReadOnlyDictionary PairsStringToEnum => _iconPairs.SecondToFirst; + + /// Gets the pairs enum to string. + /// The pairs enum to string. + protected override IReadOnlyDictionary PairsEnumToString => _iconPairs.FirstToSecond; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonToastNotificationIconConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonToastNotificationIconConverter.cs new file mode 100644 index 000000000..a449e3bae --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/KryptonToastNotificationIconConverter.cs @@ -0,0 +1,59 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Custom type converter so that values appear as neat text at design time. + internal class KryptonToastNotificationIconConverter : StringLookupConverter + { + #region Static Fields + + [Localizable(true)] + private static readonly BiDictionary _iconPairs = + new BiDictionary(new Dictionary + { + { KryptonToastNotificationIcon.None, DesignTimeUtilities.DEFAULT_ICON_NONE }, + { KryptonToastNotificationIcon.Hand, DesignTimeUtilities.DEFAULT_ICON_HAND }, + { KryptonToastNotificationIcon.SystemHand, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_HAND }, + { KryptonToastNotificationIcon.Question, DesignTimeUtilities.DEFAULT_ICON_QUESTION }, + { KryptonToastNotificationIcon.SystemQuestion, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_QUESTION }, + { KryptonToastNotificationIcon.Exclamation, DesignTimeUtilities.DEFAULT_ICON_EXCLAMATION }, + { KryptonToastNotificationIcon.SystemExclamation, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_EXCLAMATION }, + { KryptonToastNotificationIcon.Asterisk, DesignTimeUtilities.DEFAULT_ICON_ASTERISK }, + { KryptonToastNotificationIcon.SystemAsterisk, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_ASTERISK }, + { KryptonToastNotificationIcon.Stop, DesignTimeUtilities.DEFAULT_ICON_STOP }, + { KryptonToastNotificationIcon.SystemStop, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_STOP }, + { KryptonToastNotificationIcon.Error, DesignTimeUtilities.DEFAULT_ICON_ERROR }, + { KryptonToastNotificationIcon.SystemError, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_ERROR }, + { KryptonToastNotificationIcon.Warning, DesignTimeUtilities.DEFAULT_ICON_WARNING }, + { KryptonToastNotificationIcon.SystemWarning, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_WARNING }, + { KryptonToastNotificationIcon.Information, DesignTimeUtilities.DEFAULT_ICON_INFORMATION }, + { KryptonToastNotificationIcon.SystemInformation, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_INFORMATION }, + { KryptonToastNotificationIcon.Shield, DesignTimeUtilities.DEFAULT_ICON_SHIELD }, + { KryptonToastNotificationIcon.WindowsLogo, DesignTimeUtilities.DEFAULT_ICON_WINDOWS_LOGO }, + { KryptonToastNotificationIcon.Application, DesignTimeUtilities.DEFAULT_ICON_APPLICATION }, + { KryptonToastNotificationIcon.SystemApplication, DesignTimeUtilities.DEFAULT_ICON_SYSTEM_APPLICATION }, + { KryptonToastNotificationIcon.Ok, DesignTimeUtilities.DEFAULT_ICON_OK }, + { KryptonToastNotificationIcon.Custom, DesignTimeUtilities.DEFAULT_ICON_CUSTOM } + }); + + #endregion + + #region Protected + + /// Gets an array of lookup pairs. + protected override IReadOnlyDictionary PairsStringToEnum => _iconPairs.SecondToFirst; + + /// Gets the pairs enum to string. + /// The pairs enum to string. + protected override IReadOnlyDictionary PairsEnumToString => _iconPairs.FirstToSecond; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/LabelStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/LabelStyleConverter.cs index 9fcdc422a..e53ea3f4a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/LabelStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/LabelStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class LabelStyleConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {LabelStyle.AlternateControl, DesignTimeUtilities.DEFAULT_LABEL_STYLE_ALTERNATE_CONTROL}, {LabelStyle.NormalControl, DesignTimeUtilities.DEFAULT_LABEL_STYLE_NORMAL_CONTROL}, @@ -39,7 +40,7 @@ internal class LabelStyleConverter : StringLookupConverter {LabelStyle.Custom1, DesignTimeUtilities.DEFAULT_LABEL_STYLE_CUSTOM_ONE}, {LabelStyle.Custom2, DesignTimeUtilities.DEFAULT_LABEL_STYLE_CUSTOM_TWO}, {LabelStyle.Custom3, DesignTimeUtilities.DEFAULT_LABEL_STYLE_CUSTOM_THREE} - }; + }); #endregion @@ -48,7 +49,8 @@ internal class LabelStyleConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBackStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBackStyleConverter.cs index 50c935afa..5ea4e2395 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBackStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBackStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteBackStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteBackStyle.ButtonStandalone, DesignTimeUtilities.DEFAULT_BUTTON_STANDALONE}, {PaletteBackStyle.ButtonAlternate, DesignTimeUtilities.DEFAULT_BUTTON_ALTERNATE}, @@ -115,7 +116,7 @@ internal class PaletteBackStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBorderStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBorderStyleConverter.cs index 57f9fd86b..01f01d306 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBorderStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteBorderStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteBorderStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteBorderStyle.ButtonStandalone, DesignTimeUtilities.DEFAULT_PALETTE_BORDER_BUTTON_STANDALONE}, {PaletteBorderStyle.ButtonAlternate, DesignTimeUtilities.DEFAULT_PALETTE_BORDER_BUTTON_ALTERNATE}, @@ -102,8 +103,8 @@ internal class PaletteBorderStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonOrientationConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonOrientationConverter.cs index 87dd7fa33..82c896ea8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonOrientationConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonOrientationConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteButtonOrientationConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteButtonOrientation.Inherit, DesignTimeUtilities.DEFAULT_PALETTE_BUTTON_ORIENTATION_INHERIT}, {PaletteButtonOrientation.Auto, DesignTimeUtilities.DEFAULT_PALETTE_BUTTON_ORIENTATION_AUTO}, @@ -28,7 +29,7 @@ internal class PaletteButtonOrientationConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonSpecStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonSpecStyleConverter.cs index 32598682c..355e8e0d3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonSpecStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonSpecStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteButtonSpecStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteButtonSpecStyle.Close, DesignTimeUtilities.DEFAULT_PALETTE_BUTTON_SPEC_STYLE_CLOSE}, {PaletteButtonSpecStyle.Context, DesignTimeUtilities.DEFAULT_PALETTE_BUTTON_SPEC_STYLE_CONTEXT}, @@ -60,7 +61,7 @@ internal class PaletteButtonSpecStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonStyleConverter.cs index a21d38d5c..f50626654 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteButtonStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteButtonStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteButtonStyle.Inherit, DesignTimeUtilities.DEFAULT_PALETTE_BUTTON_STYLE_INHERIT}, {PaletteButtonStyle.Standalone, DesignTimeUtilities.DEFAULT_PALETTE_BUTTON_STYLE_STANDALONE}, @@ -40,7 +41,7 @@ internal class PaletteButtonStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteClassTypeConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteClassTypeConverter.cs new file mode 100644 index 000000000..22924e229 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteClassTypeConverter.cs @@ -0,0 +1,128 @@ +namespace Krypton.Toolkit.Converters; + +/// +/// Custom type converter so that PaletteBase Class type are converted to their appropriate mode type +/// +internal class PaletteClassTypeConverter : EnumConverter +{ + #region Static Fields + + [Localizable(true)] + private static readonly BiDictionary _pairs = new BiDictionary + (new Dictionary + { + {PaletteMode.ProfessionalSystem, typeof(PaletteProfessionalSystem)}, + {PaletteMode.ProfessionalOffice2003, typeof(PaletteProfessionalOffice2003)}, + {PaletteMode.Office2007Blue, typeof(PaletteOffice2007Blue)}, + //{PaletteMode.Office2007DarkGray, typeof(PaletteOffice2007DarkGray)}, + {PaletteMode.Office2007BlueDarkMode, typeof(PaletteOffice2007BlueDarkMode)}, + {PaletteMode.Office2007BlueLightMode, typeof(PaletteOffice2007BlueLightMode)}, + {PaletteMode.Office2007Silver, typeof(PaletteOffice2007Silver)}, + {PaletteMode.Office2007SilverDarkMode, typeof(PaletteOffice2007SilverDarkMode)}, + {PaletteMode.Office2007SilverLightMode, typeof(PaletteOffice2007SilverLightMode)}, + {PaletteMode.Office2007White, typeof(PaletteOffice2007White)}, + {PaletteMode.Office2007Black, typeof(PaletteOffice2007Black)}, + //{PaletteMode.Office2010DarkGray, typeof(PaletteOffice2010DarkGray)}, + {PaletteMode.Office2007BlackDarkMode, typeof(PaletteOffice2007BlackDarkMode)}, + {PaletteMode.Office2010Blue, typeof(PaletteOffice2010Blue)}, + {PaletteMode.Office2010BlueDarkMode, typeof(PaletteOffice2010BlueDarkMode)}, + {PaletteMode.Office2010BlueLightMode, typeof(PaletteOffice2010BlueLightMode)}, + {PaletteMode.Office2010Silver, typeof(PaletteOffice2010Silver)}, + {PaletteMode.Office2010SilverDarkMode, typeof(PaletteOffice2010SilverDarkMode)}, + {PaletteMode.Office2010SilverLightMode, typeof(PaletteOffice2010SilverLightMode)}, + {PaletteMode.Office2010White, typeof(PaletteOffice2010White)}, + {PaletteMode.Office2010Black, typeof(PaletteOffice2010Black)}, + {PaletteMode.Office2010BlackDarkMode, typeof(PaletteOffice2010BlackDarkMode)}, + //PaletteMode.Office2013LightGray, typeof(PaletteOffice2013LightGray)}, + {PaletteMode.Office2013White, typeof(PaletteOffice2013White)}, + {PaletteMode.SparkleBlue, typeof(PaletteSparkleBlue)}, + {PaletteMode.SparkleBlueDarkMode, typeof(PaletteSparkleBlueDarkMode)}, + {PaletteMode.SparkleBlueLightMode, typeof(PaletteSparkleBlueLightMode)}, + {PaletteMode.SparkleOrange, typeof(PaletteSparkleOrange)}, + {PaletteMode.SparkleOrangeDarkMode, typeof(PaletteSparkleOrangeDarkMode)}, + {PaletteMode.SparkleOrangeLightMode, typeof(PaletteSparkleOrangeLightMode)}, + {PaletteMode.SparklePurple, typeof(PaletteSparklePurple)}, + {PaletteMode.SparklePurpleDarkMode, typeof(PaletteSparklePurpleDarkMode)}, + {PaletteMode.SparklePurpleLightMode, typeof(PaletteSparklePurpleLightMode)}, + {PaletteMode.Microsoft365Black, typeof(PaletteMicrosoft365Black)}, + {PaletteMode.Microsoft365BlackDarkMode, typeof(PaletteMicrosoft365BlackDarkMode)}, + {PaletteMode.Microsoft365BlackDarkModeAlternate, typeof(PaletteMicrosoft365BlackDarkModeAlternate)}, + {PaletteMode.Microsoft365BlueDarkMode, typeof(PaletteMicrosoft365BlueDarkMode)}, + {PaletteMode.Microsoft365BlueLightMode, typeof(PaletteMicrosoft365BlueLightMode)}, + {PaletteMode.Microsoft365Blue, typeof(PaletteMicrosoft365Blue)}, + //{PaletteMode.Microsoft365DarkGray, typeof(PaletteMicrosoft365DarkGray)}, + {PaletteMode.Microsoft365Silver, typeof(PaletteMicrosoft365Silver)}, + {PaletteMode.Microsoft365SilverDarkMode, typeof(PaletteMicrosoft365SilverDarkMode)}, + {PaletteMode.Microsoft365SilverLightMode, typeof(PaletteMicrosoft365SilverLightMode)}, + {PaletteMode.Microsoft365White, typeof(PaletteMicrosoft365White)}, + {PaletteMode.VisualStudio2010Render2007, typeof(PaletteVisualStudio2010Office2007Variation)}, + {PaletteMode.VisualStudio2010Render2010, typeof(PaletteVisualStudio2010Office2010Variation)}, + {PaletteMode.VisualStudio2010Render2013, typeof(PaletteVisualStudio2010Office2013Variation)}, + {PaletteMode.VisualStudio2010Render365, typeof(PaletteVisualStudio2010Microsoft365Variation)} + //{PaletteMode.Custom, typeof(KryptonCustomPaletteBase)} + }); + + #endregion + + #region Identity + /// + /// Initialize a new instance of the PaletteClassTypeConverter class. + /// + public PaletteClassTypeConverter() + : base(typeof(PaletteMode)) + { + } + #endregion + + #region Public + /// + /// Converts the given value object to the specified type, using the specified context and culture information. + /// + /// An ITypeDescriptorContext that provides a format context. + /// A CultureInfo object. If a null reference the current culture is assumed. + /// The Object to convert. + /// The Type to convert the value parameter to. + /// An Object that represents the converted value. + public override object? ConvertTo(ITypeDescriptorContext? context, + CultureInfo? culture, + object? value, + Type destinationType) + { + if (value is PaletteMode val) + { + // Search for a matching value + if (_pairs.FirstToSecond.TryGetValue(val, out var classType)) + { + return classType; + } + } + + // Let base class perform default conversion + return base.ConvertTo(context, culture, value, destinationType); + } + + /// + /// Converts the given object to the type of this converter, using the specified context and culture information. + /// + /// An ITypeDescriptorContext that provides a format context. + /// The CultureInfo to use as the current culture. + /// The Object to convert. + /// An Object that represents the converted value. + public override object? ConvertFrom(ITypeDescriptorContext? context, + CultureInfo? culture, + object? value) + { + if (value is Type val) + { + // Search for a matching Class + if( _pairs.SecondToFirst.TryGetValue(val, out var mode)) + { + return mode; + } + } + + // Let base class perform default conversion + return base.ConvertFrom(context!, culture!, value!); + } + #endregion +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteContentStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteContentStyleConverter.cs index f502fc083..984f293ee 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteContentStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteContentStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteContentStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteContentStyle.ButtonStandalone, DesignTimeUtilities.DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_STANDALONE}, {PaletteContentStyle.ButtonLowProfile, DesignTimeUtilities.DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_LOW_PROFILE}, @@ -99,7 +100,7 @@ internal class PaletteContentStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteDrawBordersConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteDrawBordersConverter.cs index 69713bade..39f5eb174 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteDrawBordersConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteDrawBordersConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -115,7 +115,7 @@ public PaletteDrawBordersConverter() /// An Object that represents the converted value. public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, - object value) + object? value) { // Convert incoming value to a string // We are only interested in adding functionality for converting from strings @@ -162,7 +162,7 @@ public PaletteDrawBordersConverter() } // Let base class perform default conversion - return base.ConvertFrom(context, culture, value); + return base.ConvertFrom(context!, culture!, value!); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageEffectConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageEffectConverter.cs index 8f7da2b36..94f60ab44 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageEffectConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageEffectConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteImageEffectConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteImageEffect.Inherit, DesignTimeUtilities.DEFAULT_PALETTE_IMAGE_EFFECT_INHERIT}, {PaletteImageEffect.Light, DesignTimeUtilities.DEFAULT_PALETTE_IMAGE_EFFECT_LIGHT}, @@ -33,7 +34,7 @@ internal class PaletteImageEffectConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageStyleConverter.cs index ab7fd67c6..7422f243a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteImageStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteImageStyleConverter : StringLookupConverter _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteImageStyle.Inherit, DesignTimeUtilities.DEFAULT_PALETTE_IMAGE_STYLE_INHERIT}, {PaletteImageStyle.Stretch, DesignTimeUtilities.DEFAULT_PALETTE_IMAGE_STYLE_STRETCH}, @@ -37,7 +38,7 @@ internal class PaletteImageStyleConverter : StringLookupConverter /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteModeConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteModeConverter.cs index 4c2d0634b..40a36c797 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteModeConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteModeConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,7 +21,8 @@ public class PaletteModeConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => PaletteModeStrings.SupportedThemes.SecondToFirst; + protected override IReadOnlyDictionary PairsStringToEnum => PaletteModeStrings.SupportedThemes.FirstToSecond; + protected override IReadOnlyDictionary PairsEnumToString => PaletteModeStrings.SupportedThemes.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteTextTrimConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteTextTrimConverter.cs index 1014ccfbf..bc80017ad 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteTextTrimConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PaletteTextTrimConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class PaletteTextTrimConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PaletteTextTrim.Inherit, DesignTimeUtilities.DEFAULT_PALETTE_TEXT_TRIM_INHERIT}, {PaletteTextTrim.Hide, DesignTimeUtilities.DEFAULT_PALETTE_TEXT_TRIM_HIDE}, @@ -29,7 +30,7 @@ internal class PaletteTextTrimConverter : StringLookupConverter {PaletteTextTrim.EllipsisCharacter, DesignTimeUtilities.DEFAULT_PALETTE_TEXT_TRIM_ELLIPSIS_CHARACTER}, {PaletteTextTrim.EllipsisWord, DesignTimeUtilities.DEFAULT_PALETTE_TEXT_TRIM_ELLIPSIS_WORD}, {PaletteTextTrim.EllipsisPath, DesignTimeUtilities.DEFAULT_PALETTE_TEXT_TRIM_ELLIPSIS_PATH} - }; + }); #endregion @@ -37,7 +38,8 @@ internal class PaletteTextTrimConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/PlacementModeConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/PlacementModeConverter.cs index 8ef55c307..ccead8cbc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/PlacementModeConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/PlacementModeConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,7 +17,8 @@ internal class PlacementModeConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {PlacementMode.Absolute, DesignTimeUtilities.DEFAULT_PLACEMENT_MODE_ABSOLUTE}, {PlacementMode.AbsolutePoint, DesignTimeUtilities.DEFAULT_PLACEMENT_MODE_ABSOLUTE_POINT}, @@ -30,13 +31,14 @@ internal class PlacementModeConverter : StringLookupConverter {PlacementMode.RelativePoint, DesignTimeUtilities.DEFAULT_PLACEMENT_MODE_RELATIVE_POINT}, {PlacementMode.Right, DesignTimeUtilities.DEFAULT_PLACEMENT_MODE_RIGHT}, {PlacementMode.Top, DesignTimeUtilities.DEFAULT_PLACEMENT_MODE_TOP} - }; + }); #endregion #region Protected - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/SeparatorStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/SeparatorStyleConverter.cs index df9b2343e..f085e7352 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/SeparatorStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/SeparatorStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class SeparatorStyleConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {SeparatorStyle.LowProfile, DesignTimeUtilities.DEFAULT_SEPARATOR_STYLE_LOW_PROFILE}, {SeparatorStyle.HighProfile, DesignTimeUtilities.DEFAULT_SEPARATOR_STYLE_HIGH_PROFILE}, @@ -28,7 +29,7 @@ internal class SeparatorStyleConverter : StringLookupConverter {SeparatorStyle.Custom1, DesignTimeUtilities.DEFAULT_SEPARATOR_STYLE_CUSTOM1}, {SeparatorStyle.Custom2, DesignTimeUtilities.DEFAULT_SEPARATOR_STYLE_CUSTOM2}, {SeparatorStyle.Custom3, DesignTimeUtilities.DEFAULT_SEPARATOR_STYLE_CUSTOM3} - }; + }); #endregion @@ -37,7 +38,8 @@ internal class SeparatorStyleConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/StringLookupConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/StringLookupConverter.cs index 431991ca0..489c16bca 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/StringLookupConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/StringLookupConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,7 +21,7 @@ public abstract class StringLookupConverter : EnumConverter /// /// Initialize a new instance of the StringLookupConverter class. /// - public StringLookupConverter() + protected StringLookupConverter() : base(typeof(TEnumType)) { } @@ -31,7 +31,8 @@ public StringLookupConverter() /// /// Gets an array of lookup pairs. /// - protected abstract IReadOnlyDictionary Pairs { get; } + protected abstract IReadOnlyDictionary PairsStringToEnum { get; } + protected abstract IReadOnlyDictionary PairsEnumToString { get; } #endregion #region Public @@ -44,8 +45,8 @@ public StringLookupConverter() /// The Type to convert the value parameter to. /// An Object that represents the converted value. public override object? ConvertTo(ITypeDescriptorContext? context, - CultureInfo? culture, - object? value, + CultureInfo? culture, + object? value, Type destinationType) { // We are only interested in adding functionality for converting to strings @@ -54,9 +55,9 @@ public StringLookupConverter() ) { // Search for a matching value - if ( Pairs.TryGetValue(val, out var display) ) + if (PairsEnumToString.TryGetValue(val, out var display)) { - return display; + return display; } } @@ -72,22 +73,21 @@ public StringLookupConverter() /// The Object to convert. /// An Object that represents the converted value. public override object? ConvertFrom(ITypeDescriptorContext? context, - CultureInfo? culture, + CultureInfo? culture, object? value) { // We are only interested in adding functionality for converting from strings if (value is string val) { // Search for a matching string - var key = Pairs.FirstOrDefault(x => x.Value == val).Key; - if ( key != null) - { - return key; + if (PairsStringToEnum.TryGetValue(val, out TEnumType? key)) + { + return key; } } // Let base class perform default conversion - return base.ConvertFrom(context, culture, value); + return base.ConvertFrom(context!, culture!, value!); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/TabBorderStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/TabBorderStyleConverter.cs index 149f50b82..1e5cd02ee 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/TabBorderStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/TabBorderStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class TabBorderStyleConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {TabBorderStyle.OneNote, DesignTimeUtilities.DEFAULT_TAB_BORDER_STYLE_ONE_NOTE}, {TabBorderStyle.SquareEqualSmall, DesignTimeUtilities.DEFAULT_TAB_BORDER_STYLE_SQUARE_EQUAL_SMALL}, @@ -45,7 +46,7 @@ internal class TabBorderStyleConverter : StringLookupConverter {TabBorderStyle.SmoothOutsize, DesignTimeUtilities.DEFAULT_TAB_BORDER_STYLE_SMOOTH_OUTSIZE}, {TabBorderStyle.DockEqual, DesignTimeUtilities.DEFAULT_TAB_BORDER_STYLE_DOCK_EQUAL}, {TabBorderStyle.DockOutsize, DesignTimeUtilities.DEFAULT_TAB_BORDER_STYLE_DOCK_OUTSIZE} - }; + }); #endregion @@ -54,7 +55,8 @@ internal class TabBorderStyleConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Converters/TabStyleConverter.cs b/Source/Krypton Components/Krypton.Toolkit/Converters/TabStyleConverter.cs index 61ad9f65a..2474a2c10 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Converters/TabStyleConverter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Converters/TabStyleConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,8 @@ internal class TabStyleConverter : StringLookupConverter #region Static Fields [Localizable(true)] - private static readonly IReadOnlyDictionary _pairs = new Dictionary + private static readonly BiDictionary _pairs = new BiDictionary( + new Dictionary { {TabStyle.HighProfile, DesignTimeUtilities.DEFAULT_TAB_STYLE_HIGH_PROFILE}, {TabStyle.StandardProfile, DesignTimeUtilities.DEFAULT_TAB_STYLE_STANDARD_PROFILE}, @@ -31,7 +32,7 @@ internal class TabStyleConverter : StringLookupConverter {TabStyle.Custom1, DesignTimeUtilities.DEFAULT_TAB_STYLE_CUSTOM1}, {TabStyle.Custom2, DesignTimeUtilities.DEFAULT_TAB_STYLE_CUSTOM2}, {TabStyle.Custom3, DesignTimeUtilities.DEFAULT_TAB_STYLE_CUSTOM3} - }; + }); #endregion @@ -40,7 +41,8 @@ internal class TabStyleConverter : StringLookupConverter /// /// Gets an array of lookup pairs. /// - protected override IReadOnlyDictionary Pairs => _pairs; + protected override IReadOnlyDictionary PairsEnumToString => _pairs.FirstToSecond; + protected override IReadOnlyDictionary PairsStringToEnum => _pairs.SecondToFirst; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBorderEdgeActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBorderEdgeActionList.cs index efabb0144..168957fbb 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBorderEdgeActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBorderEdgeActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonBorderEdgeActionList : DesignerActionList { #region Instance Fields - private readonly KryptonBorderEdge? _borderEdge; - private readonly IComponentChangeService _service; + private readonly KryptonBorderEdge _borderEdge; + private readonly IComponentChangeService? _service; private string _action; #endregion @@ -28,24 +28,26 @@ internal class KryptonBorderEdgeActionList : DesignerActionList public KryptonBorderEdgeActionList(KryptonBorderEdgeDesigner owner) : base(owner.Component) { - _borderEdge = owner.Component as KryptonBorderEdge; + _borderEdge = (owner.Component as KryptonBorderEdge)!; // Assuming we were correctly passed an actual component... if (_borderEdge != null) { // Get access to the actual Orientation property - PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_borderEdge)[nameof(Orientation)]; + var orientationProp = TypeDescriptor.GetProperties(_borderEdge)[nameof(Orientation)]; // If we succeeded in getting the property if (orientationProp != null) { // Decide on the next action to take given the current setting - _action = (Orientation)orientationProp.GetValue(_borderEdge) == Orientation.Vertical ? "Horizontal border orientation" : "Vertical border orientation"; + _action = (Orientation)orientationProp?.GetValue(_borderEdge)! == Orientation.Vertical + ? "Horizontal border orientation" + : "Vertical border orientation"; } } // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -61,7 +63,7 @@ public PaletteBorderStyle BorderStyle { if (_borderEdge.BorderStyle != value) { - _service.OnComponentChanged(_borderEdge, null, _borderEdge.BorderStyle, value); + _service?.OnComponentChanged(_borderEdge, null, _borderEdge.BorderStyle, value); _borderEdge.BorderStyle = value; } } @@ -78,7 +80,7 @@ public bool AutoSize { if (_borderEdge.AutoSize != value) { - _service.OnComponentChanged(_borderEdge, null, _borderEdge.AutoSize, value); + _service?.OnComponentChanged(_borderEdge, null, _borderEdge.AutoSize, value); _borderEdge.AutoSize = value; } } @@ -95,7 +97,7 @@ public DockStyle Dock { if (_borderEdge.Dock != value) { - _service.OnComponentChanged(_borderEdge, null, _borderEdge.Dock, value); + _service?.OnComponentChanged(_borderEdge, null, _borderEdge.Dock, value); _borderEdge.Dock = value; } } @@ -112,7 +114,7 @@ public PaletteMode PaletteMode { if (_borderEdge.PaletteMode != value) { - _service.OnComponentChanged(_borderEdge, null, _borderEdge.PaletteMode, value); + _service?.OnComponentChanged(_borderEdge, null, _borderEdge.PaletteMode, value); _borderEdge.PaletteMode = value; } } @@ -148,7 +150,7 @@ public override DesignerActionItemCollection GetSortedActionItems() #endregion #region Implementation - private void OnOrientationClick(object sender, EventArgs e) + private void OnOrientationClick(object? sender, EventArgs e) { // Cast to the correct type @@ -156,13 +158,13 @@ private void OnOrientationClick(object sender, EventArgs e) if (sender is DesignerVerb verb) { // Decide on the new orientation required - Orientation orientation = verb.Text.Equals(@"Horizontal border orientation") ? Orientation.Horizontal : Orientation.Vertical; + var orientation = verb.Text.Equals(@"Horizontal border orientation") ? Orientation.Horizontal : Orientation.Vertical; // Decide on the next action to take given the new setting _action = orientation == Orientation.Vertical ? "Horizontal border orientation" : "Vertical border orientation"; // Get access to the actual Orientation property - PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_borderEdge)[nameof(Orientation)]; + var orientationProp = TypeDescriptor.GetProperties(_borderEdge)[nameof(Orientation)]; // If we succeeded in getting the property // Update the actual property with the new value diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBreadCrumbActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBreadCrumbActionList.cs index 3057ab5b9..c7bd378e7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBreadCrumbActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonBreadCrumbActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonBreadCrumbActionList : DesignerActionList { #region Instance Fields - private readonly KryptonBreadCrumb? _breadCrumb; - private readonly IComponentChangeService _service; + private readonly KryptonBreadCrumb _breadCrumb; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonBreadCrumbActionList(KryptonBreadCrumbDesigner owner) : base(owner.Component) { // Remember the bread crumb control instance - _breadCrumb = owner.Component as KryptonBreadCrumb; + _breadCrumb = (owner.Component as KryptonBreadCrumb)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public PaletteBackStyle ControlBackStyle { if (_breadCrumb.ControlBackStyle != value) { - _service.OnComponentChanged(_breadCrumb, null, _breadCrumb.ControlBackStyle, value); + _service?.OnComponentChanged(_breadCrumb, null, _breadCrumb.ControlBackStyle, value); _breadCrumb.ControlBackStyle = value; } } @@ -64,7 +64,7 @@ public PaletteBorderStyle ControlBorderStyle { if (_breadCrumb.ControlBorderStyle != value) { - _service.OnComponentChanged(_breadCrumb, null, _breadCrumb.ControlBorderStyle, value); + _service?.OnComponentChanged(_breadCrumb, null, _breadCrumb.ControlBorderStyle, value); _breadCrumb.ControlBorderStyle = value; } } @@ -81,7 +81,7 @@ public ButtonStyle CrumbButtonStyle { if (_breadCrumb.CrumbButtonStyle != value) { - _service.OnComponentChanged(_breadCrumb, null, _breadCrumb.CrumbButtonStyle, value); + _service?.OnComponentChanged(_breadCrumb, null, _breadCrumb.CrumbButtonStyle, value); _breadCrumb.CrumbButtonStyle = value; } } @@ -98,7 +98,7 @@ public PaletteMode PaletteMode { if (_breadCrumb.PaletteMode != value) { - _service.OnComponentChanged(_breadCrumb, null, _breadCrumb.PaletteMode, value); + _service?.OnComponentChanged(_breadCrumb, null, _breadCrumb.PaletteMode, value); _breadCrumb.PaletteMode = value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonButtonActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonButtonActionList.cs index aa5d05d86..b8c463acd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonButtonActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonButtonActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonButtonActionList : DesignerActionList { #region Instance Fields - private readonly KryptonButton? _button; - private readonly IComponentChangeService _service; + private readonly KryptonButton _button; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonButtonActionList(KryptonButtonDesigner owner) : base(owner.Component) { // Remember the button instance - _button = owner.Component as KryptonButton; + _button = (owner.Component as KryptonButton)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -41,13 +41,13 @@ public KryptonButtonActionList(KryptonButtonDesigner owner) /// public ButtonStyle ButtonStyle { - get => _button.ButtonStyle; + get =>_button.ButtonStyle; set { if (_button.ButtonStyle != value) { - _service.OnComponentChanged(_button, null, _button.ButtonStyle, value); + _service?.OnComponentChanged(_button, null, _button.ButtonStyle, value); _button.ButtonStyle = value; } } @@ -57,13 +57,13 @@ public ButtonStyle ButtonStyle /// The dialog result. public DialogResult DialogResult { - get => _button.DialogResult; + get =>_button.DialogResult; set { if (_button.DialogResult != value) { - _service.OnComponentChanged(_button, null, _button.DialogResult, value); + _service?.OnComponentChanged(_button, null, _button.DialogResult, value); _button.DialogResult = value; } } @@ -73,13 +73,13 @@ public DialogResult DialogResult /// The krypton context menu. public KryptonContextMenu? KryptonContextMenu { - get => _button.KryptonContextMenu; + get =>_button.KryptonContextMenu; set { if (_button.KryptonContextMenu != value) { - _service.OnComponentChanged(_button, null, _button.KryptonContextMenu, value); + _service?.OnComponentChanged(_button, null, _button.KryptonContextMenu, value); _button.KryptonContextMenu = value; } @@ -91,13 +91,13 @@ public KryptonContextMenu? KryptonContextMenu /// public VisualOrientation Orientation { - get => _button.Orientation; + get =>_button.Orientation; set { if (_button.Orientation != value) { - _service.OnComponentChanged(_button, null, _button.Orientation, value); + _service?.OnComponentChanged(_button, null, _button.Orientation, value); _button.Orientation = value; } } @@ -108,13 +108,13 @@ public VisualOrientation Orientation /// public string Text { - get => _button.Values.Text; + get =>_button.Values.Text; set { if (_button.Values.Text != value) { - _service.OnComponentChanged(_button, null, _button.Values.Text, value); + _service?.OnComponentChanged(_button, null, _button.Values.Text, value); _button.Values.Text = value; } } @@ -125,13 +125,13 @@ public string Text /// public string ExtraText { - get => _button.Values.ExtraText; + get =>_button.Values.ExtraText; set { if (_button.Values.ExtraText != value) { - _service.OnComponentChanged(_button, null, _button.Values.ExtraText, value); + _service?.OnComponentChanged(_button, null, _button.Values.ExtraText, value); _button.Values.ExtraText = value; } } @@ -142,13 +142,13 @@ public string ExtraText /// public Image? Image { - get => _button.Values.Image; + get =>_button.Values.Image; set { if (_button.Values.Image != value) { - _service.OnComponentChanged(_button, null, _button.Values.Image, value); + _service?.OnComponentChanged(_button, null, _button.Values.Image, value); _button.Values.Image = value; } } @@ -159,13 +159,13 @@ public Image? Image /// public PaletteMode PaletteMode { - get => _button.PaletteMode; + get =>_button.PaletteMode; set { if (_button.PaletteMode != value) { - _service.OnComponentChanged(_button, null, _button.PaletteMode, value); + _service?.OnComponentChanged(_button, null, _button.PaletteMode, value); _button.PaletteMode = value; } } @@ -173,15 +173,15 @@ public PaletteMode PaletteMode /// Gets or sets the font. /// The font. - public Font StateCommonShortTextFont + public Font? StateCommonShortTextFont { - get => _button.StateCommon.Content.ShortText.Font; + get =>_button.StateCommon.Content.ShortText.Font; set { - if (_button.StateCommon.Content.ShortText.Font != value) + if (!Equals(_button.StateCommon.Content.ShortText.Font, value)) { - _service.OnComponentChanged(_button, null, _button.StateCommon.Content.ShortText.Font, value); + _service?.OnComponentChanged(_button, null, _button.StateCommon.Content.ShortText.Font, value); _button.StateCommon.Content.ShortText.Font = value; } @@ -190,57 +190,39 @@ public Font StateCommonShortTextFont /// Gets or sets the font. /// The font. - public Font StateCommonLongTextFont + public Font? StateCommonLongTextFont { - get => _button.StateCommon.Content.LongText.Font; + get =>_button.StateCommon.Content.LongText.Font; set { - if (_button.StateCommon.Content.LongText.Font != value) + if (!Equals(_button.StateCommon.Content.LongText.Font, value)) { - _service.OnComponentChanged(_button, null, _button.StateCommon.Content.LongText.Font, value); + _service?.OnComponentChanged(_button, null, _button.StateCommon.Content.LongText.Font, value); _button.StateCommon.Content.LongText.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _button.StateCommon.Border.Rounding; - - set - { - if (_button.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_button, null, _button.StateCommon.Border.Rounding, value); - - _button.StateCommon.Border.Rounding = value; - } - } - } - /// Gets or sets a value indicating whether [use as uac elevated button]. /// true if [use as uac elevated button]; otherwise, false. [DefaultValue(false)] public bool UseAsUACElevatedButton { - get => _button.UseAsUACElevationButton; + get =>_button.Values.UseAsUACElevationButton; set { - if (_button.UseAsUACElevationButton != value) + if (!_button.Values.UseAsUACElevationButton.Equals(value)) { - _service.OnComponentChanged(_button, null, _button.UseAsUACElevationButton, value); + _service?.OnComponentChanged(_button, null, _button.Values.UseAsUACElevationButton, value); - _button.UseAsUACElevationButton = value; + _button.Values.UseAsUACElevationButton = value; } } } - + #endregion #region Public Override @@ -263,7 +245,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(Orientation), nameof(Orientation), nameof(Appearance), @"Button orientation")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(@"Values")); actions.Add(new DesignerActionPropertyItem(nameof(Text), nameof(Text), @"Values", @"Button text")); actions.Add(new DesignerActionPropertyItem(nameof(ExtraText), nameof(ExtraText), @"Values", @"Button extra text")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckBoxActionList.cs index 9433d8478..9695d2d48 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonCheckBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonCheckBox? _checkBox; - private readonly IComponentChangeService _service; + private readonly KryptonCheckBox _checkBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonCheckBoxActionList(KryptonCheckBoxDesigner owner) : base(owner.Component) { // Remember the checkbox instance - _checkBox = owner.Component as KryptonCheckBox; + _checkBox = (owner.Component as KryptonCheckBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public bool Checked { if (_checkBox.Checked != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.Checked, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.Checked, value); _checkBox.Checked = value; } } @@ -64,7 +64,7 @@ public CheckState CheckState { if (_checkBox.CheckState != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.CheckState, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.CheckState, value); _checkBox.CheckState = value; } } @@ -81,7 +81,7 @@ public bool ThreeState { if (_checkBox.ThreeState != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.ThreeState, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.ThreeState, value); _checkBox.ThreeState = value; } } @@ -98,7 +98,7 @@ public bool AutoCheck { if (_checkBox.AutoCheck != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.AutoCheck, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.AutoCheck, value); _checkBox.AutoCheck = value; } } @@ -114,7 +114,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_checkBox.KryptonContextMenu != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.KryptonContextMenu, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.KryptonContextMenu, value); _checkBox.KryptonContextMenu = value; } @@ -132,7 +132,7 @@ public LabelStyle LabelStyle { if (_checkBox.LabelStyle != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.LabelStyle, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.LabelStyle, value); _checkBox.LabelStyle = value; } } @@ -149,7 +149,7 @@ public VisualOrientation Orientation { if (_checkBox.Orientation != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.Orientation, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.Orientation, value); _checkBox.Orientation = value; } } @@ -166,7 +166,7 @@ public string Text { if (_checkBox.Values.Text != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.Values.Text, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.Values.Text, value); _checkBox.Values.Text = value; } } @@ -183,7 +183,7 @@ public string ExtraText { if (_checkBox.Values.ExtraText != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.Values.ExtraText, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.Values.ExtraText, value); _checkBox.Values.ExtraText = value; } } @@ -200,7 +200,7 @@ public Image? Image { if (_checkBox.Values.Image != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.Values.Image, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.Values.Image, value); _checkBox.Values.Image = value; } } @@ -217,7 +217,7 @@ public PaletteMode PaletteMode { if (_checkBox.PaletteMode != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.PaletteMode, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.PaletteMode, value); _checkBox.PaletteMode = value; } } @@ -225,7 +225,7 @@ public PaletteMode PaletteMode /// Gets or sets the font. /// The font. - public Font StateCommonShortTextFont + public Font? StateCommonShortTextFont { get => _checkBox.StateCommon.ShortText.Font; @@ -233,7 +233,7 @@ public Font StateCommonShortTextFont { if (_checkBox.StateCommon.ShortText.Font != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.ShortText.Font, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.ShortText.Font, value); _checkBox.StateCommon.ShortText.Font = value; } @@ -242,7 +242,7 @@ public Font StateCommonShortTextFont /// Gets or sets the font. /// The font. - public Font StateCommonLongTextFont + public Font? StateCommonLongTextFont { get => _checkBox.StateCommon.LongText.Font; @@ -250,7 +250,7 @@ public Font StateCommonLongTextFont { if (_checkBox.StateCommon.LongText.Font != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.LongText.Font, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.LongText.Font, value); _checkBox.StateCommon.LongText.Font = value; } @@ -267,7 +267,7 @@ public PaletteTextTrim LongTextTrim { if (_checkBox.StateCommon.LongText.Trim != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.LongText.Trim, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.LongText.Trim, value); _checkBox.StateCommon.LongText.Trim = value; } @@ -284,7 +284,7 @@ public PaletteTextTrim ShortTextTrim { if (_checkBox.StateCommon.ShortText.Trim != value) { - _service.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.ShortText.Trim, value); + _service?.OnComponentChanged(_checkBox, null, _checkBox.StateCommon.ShortText.Trim, value); _checkBox.StateCommon.ShortText.Trim = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckButtonActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckButtonActionList.cs index 1cfac74bd..7b2f848ea 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckButtonActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckButtonActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonCheckButtonActionList : KryptonButtonActionList { #region Instance Fields - private readonly KryptonCheckButton? _checkButton; - private readonly IComponentChangeService _service; + private readonly KryptonCheckButton _checkButton; + private readonly IComponentChangeService? _service; private string _action; #endregion @@ -29,24 +29,24 @@ public KryptonCheckButtonActionList(KryptonCheckButtonDesigner owner) : base(owner) { // Remember the button instance - _checkButton = owner.Component as KryptonCheckButton; + _checkButton = (owner.Component as KryptonCheckButton)!; // Assuming we were correctly passed an actual component... if (_checkButton != null) { // Get access to the actual Orientation property - PropertyDescriptor checkedProp = TypeDescriptor.GetProperties(_checkButton)[nameof(Checked)]; + PropertyDescriptor? checkedProp = TypeDescriptor.GetProperties(_checkButton)[nameof(Checked)]; // If we succeeded in getting the property if (checkedProp != null) { // Decide on the next action to take given the current setting - _action = (bool)checkedProp.GetValue(_checkButton) ? "Uncheck the button" : "Check the button"; + _action = (bool)checkedProp.GetValue(_checkButton)! ? "Uncheck the button" : "Check the button"; } } // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -60,9 +60,9 @@ public bool Checked set { - if (_checkButton.Checked != value) + if ( _checkButton.Checked != value) { - _service.OnComponentChanged(_checkButton, null, _checkButton.Checked, value); + _service?.OnComponentChanged(_checkButton, null, _checkButton.Checked, value); _checkButton.Checked = value; } } @@ -100,7 +100,7 @@ public override DesignerActionItemCollection GetSortedActionItems() #endregion #region Implementation - private void OnCheckedClick(object sender, EventArgs e) + private void OnCheckedClick(object? sender, EventArgs e) { // Cast to the correct type @@ -114,7 +114,7 @@ private void OnCheckedClick(object sender, EventArgs e) _action = isChecked ? "Uncheck the button" : "Check the button"; // Get access to the actual Orientation property - PropertyDescriptor checkedProp = TypeDescriptor.GetProperties(_checkButton)[nameof(Checked)]; + PropertyDescriptor? checkedProp = TypeDescriptor.GetProperties( _checkButton)[nameof(Checked)]; // If we succeeded in getting the property // Update the actual property with the new value diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckSetActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckSetActionList.cs index f5406012e..2c0fa2d61 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckSetActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckSetActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckedListBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckedListBoxActionList.cs index 92c5ee813..5bcaa5428 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckedListBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCheckedListBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonCheckedListBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonCheckedListBox? _checkedListBox; - private readonly IComponentChangeService _service; + private readonly KryptonCheckedListBox _checkedListBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonCheckedListBoxActionList(KryptonCheckedListBoxDesigner owner) : base(owner.Component) { // Remember the list box instance - _checkedListBox = owner.Component as KryptonCheckedListBox; + _checkedListBox = (owner.Component as KryptonCheckedListBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public ButtonStyle ItemStyle { if (_checkedListBox.ItemStyle != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.ItemStyle, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.ItemStyle, value); _checkedListBox.ItemStyle = value; } } @@ -64,7 +64,7 @@ public PaletteBackStyle BackStyle { if (_checkedListBox.BackStyle != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.BackStyle, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.BackStyle, value); _checkedListBox.BackStyle = value; } } @@ -81,7 +81,7 @@ public PaletteBorderStyle BorderStyle { if (_checkedListBox.BorderStyle != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.BorderStyle, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.BorderStyle, value); _checkedListBox.BorderStyle = value; } } @@ -97,7 +97,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_checkedListBox.KryptonContextMenu != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.KryptonContextMenu, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.KryptonContextMenu, value); _checkedListBox.KryptonContextMenu = value; } @@ -115,7 +115,7 @@ public CheckedSelectionMode SelectionMode { if (_checkedListBox.SelectionMode != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.SelectionMode, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.SelectionMode, value); _checkedListBox.SelectionMode = value; } } @@ -132,7 +132,7 @@ public bool Sorted { if (_checkedListBox.Sorted != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.Sorted, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.Sorted, value); _checkedListBox.Sorted = value; } } @@ -149,7 +149,7 @@ public bool CheckOnClick { if (_checkedListBox.CheckOnClick != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.CheckOnClick, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.CheckOnClick, value); _checkedListBox.CheckOnClick = value; } } @@ -166,7 +166,7 @@ public PaletteMode PaletteMode { if (_checkedListBox.PaletteMode != value) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.PaletteMode, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.PaletteMode, value); _checkedListBox.PaletteMode = value; } } @@ -174,15 +174,15 @@ public PaletteMode PaletteMode /// Gets or sets the font. /// The font. - public Font StateCommonShortTextFont + public Font? StateCommonShortTextFont { get => _checkedListBox.StateCommon.Item.Content.ShortText.Font; set { - if (_checkedListBox.StateCommon.Item.Content.ShortText.Font != value) + if (!Equals(_checkedListBox.StateCommon.Item.Content.ShortText.Font, value)) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.StateCommon.Item.Content.ShortText.Font, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.StateCommon.Item.Content.ShortText.Font, value); _checkedListBox.StateCommon.Item.Content.ShortText.Font = value; } @@ -191,38 +191,20 @@ public Font StateCommonShortTextFont /// Gets or sets the font. /// The font. - public Font StateCommonLongTextFont + public Font? StateCommonLongTextFont { get => _checkedListBox.StateCommon.Item.Content.LongText.Font; set { - if (_checkedListBox.StateCommon.Item.Content.LongText.Font != value) + if (!Equals(_checkedListBox.StateCommon.Item.Content.LongText.Font, value)) { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.StateCommon.Item.Content.LongText.Font, value); + _service?.OnComponentChanged(_checkedListBox, null, _checkedListBox.StateCommon.Item.Content.LongText.Font, value); _checkedListBox.StateCommon.Item.Content.LongText.Font = value; } } } - - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _checkedListBox.StateCommon.Border.Rounding; - - set - { - if (_checkedListBox.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_checkedListBox, null, _checkedListBox.StateCommon.Border.Rounding, value); - - _checkedListBox.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -246,7 +228,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(ItemStyle), @"Item Style", nameof(Appearance), @"How to display list items.")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(nameof(Behavior))); actions.Add(new DesignerActionPropertyItem(nameof(SelectionMode), @"Selection Mode", nameof(Behavior), @"Determines the selection mode.")); actions.Add(new DesignerActionPropertyItem(nameof(Sorted), nameof(Sorted), nameof(Behavior), @"Should items be sorted according to string.")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonColorButtonActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonColorButtonActionList.cs index 7525c3428..8cfc497e7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonColorButtonActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonColorButtonActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonColorButtonActionList : DesignerActionList { #region Instance Fields - private readonly KryptonColorButton? _colorButton; - private readonly IComponentChangeService _service; + private readonly KryptonColorButton _colorButton; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonColorButtonActionList(KryptonColorButtonDesigner owner) : base(owner.Component) { // Remember the button instance - _colorButton = owner.Component as KryptonColorButton; + _colorButton = (owner.Component as KryptonColorButton)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public ButtonStyle ButtonStyle { if (_colorButton.ButtonStyle != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.ButtonStyle, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.ButtonStyle, value); _colorButton.ButtonStyle = value; } } @@ -64,7 +64,7 @@ public VisualOrientation ButtonOrientation { if (_colorButton.ButtonOrientation != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.ButtonOrientation, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.ButtonOrientation, value); _colorButton.ButtonOrientation = value; } } @@ -80,7 +80,7 @@ public Color SelectedColour { if (_colorButton.SelectedColor != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.SelectedColor, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.SelectedColor, value); _colorButton.SelectedColor = value; } @@ -92,13 +92,11 @@ public Color SelectedColour /// public VisualOrientation DropDownPosition { - get => _colorButton.DropDownPosition; - - set + get => _colorButton.DropDownPosition; set { if (_colorButton.DropDownPosition != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.DropDownPosition, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.DropDownPosition, value); _colorButton.DropDownPosition = value; } } @@ -109,13 +107,11 @@ public VisualOrientation DropDownPosition /// public VisualOrientation DropDownOrientation { - get => _colorButton.DropDownOrientation; - - set + get => _colorButton.DropDownOrientation; set { if (_colorButton.DropDownOrientation != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.DropDownOrientation, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.DropDownOrientation, value); _colorButton.DropDownOrientation = value; } } @@ -126,13 +122,11 @@ public VisualOrientation DropDownOrientation /// public bool Splitter { - get => _colorButton.Splitter; - - set + get => _colorButton.Splitter; set { if (_colorButton.Splitter != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.Splitter, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.Splitter, value); _colorButton.Splitter = value; } } @@ -149,7 +143,7 @@ public string Text { if (_colorButton.Values.Text != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.Values.Text, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.Values.Text, value); _colorButton.Values.Text = value; } } @@ -166,7 +160,7 @@ public string ExtraText { if (_colorButton.Values.ExtraText != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.Values.ExtraText, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.Values.ExtraText, value); _colorButton.Values.ExtraText = value; } } @@ -183,7 +177,7 @@ public Image? Image { if (_colorButton.Values.Image != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.Values.Image, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.Values.Image, value); _colorButton.Values.Image = value; } } @@ -194,13 +188,11 @@ public Image? Image /// public PaletteMode PaletteMode { - get => _colorButton.PaletteMode; - - set + get => _colorButton.PaletteMode; set { if (_colorButton.PaletteMode != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.PaletteMode, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.PaletteMode, value); _colorButton.PaletteMode = value; } } @@ -210,13 +202,13 @@ public PaletteMode PaletteMode /// The font. public Font StateCommonShortTextFont { - get => _colorButton.StateCommon.Content.ShortText.Font; + get => _colorButton.StateCommon.Content.ShortText.Font!; set { - if (_colorButton.StateCommon.Content.ShortText.Font != value) + if (!Equals(_colorButton.StateCommon.Content.ShortText.Font, value)) { - _service.OnComponentChanged(_colorButton, null, _colorButton.StateCommon.Content.ShortText.Font, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.StateCommon.Content.ShortText.Font, value); _colorButton.StateCommon.Content.ShortText.Font = value; } @@ -227,47 +219,26 @@ public Font StateCommonShortTextFont /// The font. public Font StateCommonLongTextFont { - get => _colorButton.StateCommon.Content.LongText.Font; + get => _colorButton.StateCommon.Content.LongText.Font!; set { - if (_colorButton.StateCommon.Content.LongText.Font != value) + if (!Equals(_colorButton.StateCommon.Content.LongText.Font, value)) { - _service.OnComponentChanged(_colorButton, null, _colorButton.StateCommon.Content.LongText.Font, value); + _service?.OnComponentChanged(_colorButton, null, _colorButton.StateCommon.Content.LongText.Font, value); _colorButton.StateCommon.Content.LongText.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _colorButton.StateCommon.Border.Rounding; - - set - { - if (_colorButton.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_colorButton, null, _colorButton.StateCommon.Border.Rounding, value); - - _colorButton.StateCommon.Border.Rounding = value; - } - } - } - public bool AllowFullOpen { - get => _colorButton.AllowFullOpen; - - set + get => _colorButton.AllowFullOpen; set { if (_colorButton.AllowFullOpen != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.AllowFullOpen, value); - + _service?.OnComponentChanged(_colorButton, null, _colorButton.AllowFullOpen, value); _colorButton.AllowFullOpen = value; } } @@ -275,14 +246,11 @@ public bool AllowFullOpen public Rectangle SelectedRect { - get => _colorButton.SelectedRect; - - set + get => _colorButton.SelectedRect; set { if (_colorButton.SelectedRect != value) { - _service.OnComponentChanged(_colorButton, null, _colorButton.SelectedRect, value); - + _service?.OnComponentChanged(_colorButton, null, _colorButton.SelectedRect, value); _colorButton.SelectedRect = value; } } @@ -311,7 +279,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(DropDownOrientation), nameof(DropDownOrientation), nameof(Appearance), @"DropDown orientation")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(@"Values")); actions.Add(new DesignerActionPropertyItem(nameof(Text), nameof(Text), @"Values", @"Button text")); actions.Add(new DesignerActionPropertyItem(nameof(ExtraText), nameof(ExtraText), @"Values", @"Button extra text")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonComboBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonComboBoxActionList.cs index 257d777b7..c658e83a7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonComboBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonComboBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonComboBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonComboBox? _comboBox; - private readonly IComponentChangeService _service; + private readonly KryptonComboBox _comboBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonComboBoxActionList(KryptonComboBoxDesigner owner) : base(owner.Component) { // Remember the combo box instance - _comboBox = owner.Component as KryptonComboBox; + _comboBox = (owner.Component as KryptonComboBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,15 +46,15 @@ public KryptonContextMenu? KryptonContextMenu { if (_comboBox.KryptonContextMenu != value) { - _service.OnComponentChanged(_comboBox, null, _comboBox.KryptonContextMenu, value); + _service?.OnComponentChanged(_comboBox, null, _comboBox.KryptonContextMenu, value); _comboBox.KryptonContextMenu = value; } } } - /// Gets or sets the drop down style. - /// The drop down style. + /// Gets or sets the drop-down style. + /// The drop-down style. public ComboBoxStyle DropDownStyle { get => _comboBox.DropDownStyle; @@ -63,7 +63,7 @@ public ComboBoxStyle DropDownStyle { if (_comboBox.DropDownStyle != value) { - _service.OnComponentChanged(_comboBox, null, _comboBox.DropDownStyle, value); + _service?.OnComponentChanged(_comboBox, null, _comboBox.DropDownStyle, value); _comboBox.DropDownStyle = value; } @@ -81,7 +81,7 @@ public PaletteMode PaletteMode { if (_comboBox.PaletteMode != value) { - _service.OnComponentChanged(_comboBox, null, _comboBox.PaletteMode, value); + _service?.OnComponentChanged(_comboBox, null, _comboBox.PaletteMode, value); _comboBox.PaletteMode = value; } } @@ -98,7 +98,7 @@ public InputControlStyle InputControlStyle { if (_comboBox.InputControlStyle != value) { - _service.OnComponentChanged(_comboBox, null, _comboBox.InputControlStyle, value); + _service?.OnComponentChanged(_comboBox, null, _comboBox.InputControlStyle, value); _comboBox.InputControlStyle = value; } } @@ -108,36 +108,19 @@ public InputControlStyle InputControlStyle /// The font. public Font Font { - get => _comboBox.StateCommon.ComboBox.Content.Font; + get => _comboBox.StateCommon.ComboBox.Content.Font!; set { - if (_comboBox.StateCommon.ComboBox.Content.Font != value) + if (!Equals(_comboBox.StateCommon.ComboBox.Content.Font, value)) { - _service.OnComponentChanged(_comboBox, null, _comboBox.StateCommon.ComboBox.Content.Font, value); + _service?.OnComponentChanged(_comboBox, null, _comboBox.StateCommon.ComboBox.Content.Font, value); _comboBox.StateCommon.ComboBox.Content.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _comboBox.StateCommon.ComboBox.Border.Rounding; - - set - { - if (_comboBox.StateCommon.ComboBox.Border.Rounding != value) - { - _service.OnComponentChanged(_comboBox, null, _comboBox.StateCommon.ComboBox.Border.Rounding, value); - - _comboBox.StateCommon.ComboBox.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -159,7 +142,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(DropDownStyle), @"Drop Down Style", nameof(Appearance), @"The combobox drop down style.")); actions.Add(new DesignerActionPropertyItem(nameof(InputControlStyle), @"Style", nameof(Appearance), @"ComboBox display style.")); actions.Add(new DesignerActionPropertyItem(nameof(Font), nameof(Font), nameof(Appearance), @"The font for the combobox.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(@"Visuals")); actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing")); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCommandActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCommandActionList.cs index 833227ea7..3ccd04e82 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCommandActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCommandActionList.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -12,8 +12,8 @@ namespace Krypton.Toolkit internal class KryptonCommandActionList : DesignerActionList { #region Instance Fields - private readonly KryptonCommand? _command; - private readonly IComponentChangeService _service; + private readonly KryptonCommand _command; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -26,9 +26,9 @@ public KryptonCommandActionList(KryptonCommandDesigner owner) : base(owner.Component) { // Remember the panel instance - _command = owner.Component as KryptonCommand; + _command = (owner.Component as KryptonCommand)!; - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -43,7 +43,7 @@ public string Text { if (_command.Text != value) { - _service.OnComponentChanged(_command, null, _command.Text, value); + _service?.OnComponentChanged(_command, null, _command.Text, value); _command.Text = value; } @@ -58,7 +58,7 @@ public Image? ImageSmall { if (_command.ImageSmall != value) { - _service.OnComponentChanged(_command, null, _command.ImageSmall, value); + _service?.OnComponentChanged(_command, null, _command.ImageSmall, value); _command.ImageSmall = value; } @@ -73,7 +73,7 @@ public Image? ImageLarge { if (_command.ImageLarge != value) { - _service.OnComponentChanged(_command, null, _command.ImageLarge, value); + _service?.OnComponentChanged(_command, null, _command.ImageLarge, value); _command.ImageLarge = value; } @@ -88,7 +88,7 @@ public Color ImageTransparentColor { if (_command.ImageTransparentColor != value) { - _service.OnComponentChanged(_command, null, _command.ImageTransparentColor, value); + _service?.OnComponentChanged(_command, null, _command.ImageTransparentColor, value); _command.ImageTransparentColor = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCommandLinkButtonActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCommandLinkButtonActionList.cs new file mode 100644 index 000000000..80d79ec45 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCommandLinkButtonActionList.cs @@ -0,0 +1,168 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class KryptonCommandLinkButtonActionList : DesignerActionList + { + #region Instance Fields + private readonly KryptonCommandLinkButton _button; + private readonly IComponentChangeService? _service; + #endregion + + #region Identity + /// + /// Initialize a new instance of the KryptonButtonActionList class. + /// + /// Designer that owns this action list instance. + public KryptonCommandLinkButtonActionList(KryptonCommandLinkButtonDesigner owner) + : base(owner.Component) + { + // Remember the button instance + _button = (owner.Component as KryptonCommandLinkButton)!; + + // Cache service used to notify when a property has changed + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + } + #endregion + + #region Public + /// + /// Gets and sets the button style. + /// + public ButtonStyle ButtonStyle + { + get => _button.ButtonStyle; + + set + { + if (_button.ButtonStyle != value) + { + _service?.OnComponentChanged(_button, null, _button.ButtonStyle, value); + _button.ButtonStyle = value; + } + } + } + + /// + /// Gets and sets the visual orientation. + /// + public VisualOrientation Orientation + { + get => _button.Orientation; + + set + { + if (_button.Orientation != value) + { + _service?.OnComponentChanged(_button, null, _button.Orientation, value); + _button.Orientation = value; + } + } + } + + /// + /// Gets and sets the button text. + /// + public string Heading + { + get => _button.CommandLinkTextValues.Heading; + + set + { + if (_button.CommandLinkTextValues.Heading != value) + { + _service?.OnComponentChanged(_button, null, _button.CommandLinkTextValues.Heading, value); + _button.CommandLinkTextValues.Heading = value; + } + } + } + + /// + /// Gets and sets the extra button text. + /// + public string Description + { + get => _button.CommandLinkTextValues.Description; + + set + { + if (_button.CommandLinkTextValues.Description != value) + { + _service?.OnComponentChanged(_button, null, _button.CommandLinkTextValues.Description, value); + _button.CommandLinkTextValues.Description = value; + } + } + } + + /// + /// Gets and sets the button image. + /// + public Image? Image + { + get => _button.CommandLinkImageValues.Image; + + set + { + if (_button.CommandLinkImageValues.Image != value) + { + _service?.OnComponentChanged(_button, null, _button.CommandLinkImageValues.Image, value); + _button.CommandLinkImageValues.Image = value; + } + } + } + + /// + /// Gets and sets the palette mode. + /// + public PaletteMode PaletteMode + { + get => _button.PaletteMode; + + set + { + if (_button.PaletteMode != value) + { + _service?.OnComponentChanged(_button, null, _button.PaletteMode, value); + _button.PaletteMode = value; + } + } + } + #endregion + + #region Public Override + /// + /// Returns the collection of DesignerActionItem objects contained in the list. + /// + /// A DesignerActionItem array that contains the items in this list. + public override DesignerActionItemCollection GetSortedActionItems() + { + // Create a new collection for holding the single item we want to create + DesignerActionItemCollection actions = []; + + // This can be null when deleting a control instance at design time + if (_button != null) + { + // Add the list of button specific actions + actions.Add(new DesignerActionHeaderItem("Appearance")); + actions.Add(new DesignerActionPropertyItem("Orientation", "Orientation", "Appearance", "Button orientation")); + actions.Add(new DesignerActionHeaderItem("CommandLink")); + actions.Add(new DesignerActionPropertyItem("Heading", "Heading", "CommandLink", "Button Heading text")); + actions.Add(new DesignerActionPropertyItem("Description", "Description", "CommandLink", "Button Subscript Description text")); + actions.Add(new DesignerActionPropertyItem("Image", "Image", "CommandLink", "Button image")); + actions.Add(new DesignerActionHeaderItem("Visuals")); + actions.Add(new DesignerActionPropertyItem("ButtonStyle", "Style", "Visuals", "Button style")); + actions.Add(new DesignerActionPropertyItem("PaletteMode", "Palette", "Visuals", "Palette applied to drawing")); + } + + return actions; + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonContextMenuActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonContextMenuActionList.cs index 87af5b1ef..b7bf32b13 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonContextMenuActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonContextMenuActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonContextMenuActionList : DesignerActionList { #region Instance Fields - private readonly KryptonContextMenu? _contextMenu; - private readonly IComponentChangeService _service; + private readonly KryptonContextMenu _contextMenu; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonContextMenuActionList(KryptonContextMenuDesigner owner) : base(owner.Component) { // Remember the context menu instance - _contextMenu = owner.Component as KryptonContextMenu; + _contextMenu = (owner.Component as KryptonContextMenu)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -49,9 +49,6 @@ public override DesignerActionItemCollection GetSortedActionItems() if (_contextMenu != null) { // Add the list of panel specific actions - // Note: Why does this keep on crashing Visual Studio? - // actions.Add(new DesignerActionHeaderItem(@"Data")); - // actions.Add(new DesignerActionPropertyItem(@"KryptonContextMenuCollection", @"Items", @"Data", @"Krypton context menu items.")); actions.Add(new DesignerActionHeaderItem(@"Visuals")); actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing")); } @@ -72,7 +69,7 @@ public PaletteMode PaletteMode { if (_contextMenu.PaletteMode != value) { - _service.OnComponentChanged(_contextMenu, null, _contextMenu.PaletteMode, value); + _service?.OnComponentChanged(_contextMenu, null, _contextMenu!.PaletteMode, value); _contextMenu.PaletteMode = value; } } @@ -88,9 +85,7 @@ public KryptonContextMenuCollection Items { if (_contextMenu.Items != value) { - _service.OnComponentChanged(_contextMenu, null, _contextMenu.Items, value); - - //_contextMenu.Items = value; + _service?.OnComponentChanged(_contextMenu, null, _contextMenu.Items, value); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPaletteActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCustomPaletteBaseActionList.cs similarity index 65% rename from Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPaletteActionList.cs rename to Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCustomPaletteBaseActionList.cs index a9fe9fcfb..799e6ea9b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPaletteActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonCustomPaletteBaseActionList.cs @@ -5,37 +5,42 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - internal class KryptonPaletteActionList : DesignerActionList + internal class KryptonCustomPaletteBaseActionList : DesignerActionList { #region Instance Fields - private readonly KryptonCustomPaletteBase? _palette; - private readonly IComponentChangeService _service; + + private readonly KryptonCustomPaletteBase _palette; + private readonly IComponentChangeService? _service; + #endregion #region Identity + /// - /// Initialize a new instance of the KryptonPaletteActionList class. + /// Initialize a new instance of the KryptonCustomPaletteBaseActionList class. /// /// Designer that owns this action list instance. - public KryptonPaletteActionList(KryptonPaletteDesigner owner) + public KryptonCustomPaletteBaseActionList(KryptonCustomPaletteBaseDesigner owner) : base(owner.Component) { // Remember the panel instance - _palette = owner.Component as KryptonCustomPaletteBase; + _palette = (owner.Component as KryptonCustomPaletteBase)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } + #endregion #region Public Override + /// /// Returns the collection of DesignerActionItem objects contained in the list. /// @@ -60,10 +65,12 @@ public override DesignerActionItemCollection GetSortedActionItems() return actions; } + #endregion #region Implementation - private void OnResetClick(object sender, EventArgs e) + + private void OnResetClick(object? sender, EventArgs e) { if (_palette != null) { @@ -73,12 +80,12 @@ private void OnResetClick(object sender, EventArgs e) KryptonMessageBoxIcon.Warning) == DialogResult.Yes) { _palette.ResetToDefaults(false); - _service.OnComponentChanged(_palette, null, null, null); + _service?.OnComponentChanged(_palette, null, null, null); } } } - private void OnPopulateClick(object sender, EventArgs e) + private void OnPopulateClick(object? sender, EventArgs e) { if (_palette != null) { @@ -88,53 +95,49 @@ private void OnPopulateClick(object sender, EventArgs e) KryptonMessageBoxIcon.Warning) == DialogResult.Yes) { _palette.PopulateFromBase(false); - _service.OnComponentChanged(_palette, null, null, null); + _service?.OnComponentChanged(_palette, null, null, null); } } } - private void OnImportClick(object sender, EventArgs e) + private void OnImportClick(object? sender, EventArgs e) { if (_palette != null) { - _palette.Import(); - _service.OnComponentChanged(_palette, null, null, null); + _palette.ActionListImport(); + _service?.OnComponentChanged(_palette, null, null, null); } } - private void OnExportClick(object sender, EventArgs e) => _palette?.Export(); + private void OnExportClick(object? sender, EventArgs e) => _palette?.ActionListExport(); - private void OnUpgradePalette(object sender, EventArgs e) + private void OnUpgradePalette(object? sender, EventArgs e) { try { - using var kofd = new KryptonOpenFileDialog - { - CheckFileExists = true, - CheckPathExists = true, - DefaultExt = @"xml", - Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)", - Title = @"Load Custom Palette" - }; - - string paletteFileName = (kofd.ShowDialog() == DialogResult.OK) - ? kofd.FileName + using var ofd = new OpenFileDialog(); /*KryptonOpenFileDialog*/ + ofd.CheckFileExists = true; + ofd.CheckPathExists = true; + ofd.DefaultExt = @"xml"; + ofd.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + ofd.Title = @"Load Custom Palette"; + + string paletteFileName = (ofd.ShowDialog() == DialogResult.OK) + ? ofd.FileName : string.Empty; + if (string.IsNullOrWhiteSpace(paletteFileName)) { return; } - _palette.ImportWithUpgrade(File.OpenRead(paletteFileName)); + _palette?.ImportWithUpgrade(File.OpenRead(paletteFileName)); } catch (Exception exc) { - ExceptionHandler.CaptureException(exc); + ExceptionHandler.CaptureException(exc, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } - - private void OnExportToBinaryClick(object sender, EventArgs e) => DebugTools.NotImplemented(@"OnExportToBinaryClick", @"KryptonPaletteActionList", 105); - #endregion } -} +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDateTimePickerActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDateTimePickerActionList.cs index 85d3ee663..ac023cd78 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDateTimePickerActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDateTimePickerActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonDateTimePickerActionList : DesignerActionList { #region Instance Fields - private readonly KryptonDateTimePicker? _dateTimePicker; - private readonly IComponentChangeService _service; + private readonly KryptonDateTimePicker _dateTimePicker; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonDateTimePickerActionList(KryptonDateTimePickerDesigner owner) : base(owner.Component) { // Remember the bread crumb control instance - _dateTimePicker = owner.Component as KryptonDateTimePicker; + _dateTimePicker = (owner.Component as KryptonDateTimePicker)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_dateTimePicker.KryptonContextMenu != value) { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.KryptonContextMenu, value); + _service?.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.KryptonContextMenu, value); _dateTimePicker.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public DateTimePickerFormat Format { if (_dateTimePicker.Format != value) { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.Format, value); + _service?.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.Format, value); _dateTimePicker.Format = value; } } @@ -81,7 +81,7 @@ public bool ShowUpDown { if (_dateTimePicker.ShowUpDown != value) { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.ShowUpDown, value); + _service?.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.ShowUpDown, value); _dateTimePicker.ShowUpDown = value; } } @@ -98,7 +98,7 @@ public bool ShowCheckBox { if (_dateTimePicker.ShowCheckBox != value) { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.ShowCheckBox, value); + _service?.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.ShowCheckBox, value); _dateTimePicker.ShowCheckBox = value; } } @@ -115,7 +115,7 @@ public bool Checked { if (_dateTimePicker.Checked != value) { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.Checked, value); + _service?.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.Checked, value); _dateTimePicker.Checked = value; } } @@ -132,7 +132,7 @@ public PaletteMode PaletteMode { if (_dateTimePicker.PaletteMode != value) { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.PaletteMode, value); + _service?.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.PaletteMode, value); _dateTimePicker.PaletteMode = value; } } @@ -140,36 +140,19 @@ public PaletteMode PaletteMode public Font Font { - get => _dateTimePicker.StateCommon.Content.Font; + get => _dateTimePicker.StateCommon.Content.Font!; set { - if (_dateTimePicker.StateCommon.Content.Font != value) + if (!Equals(_dateTimePicker.StateCommon.Content.Font, value)) { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.StateCommon.Content.Font, value); + _service?.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.StateCommon.Content.Font, value); _dateTimePicker.StateCommon.Content.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _dateTimePicker.StateCommon.Border.Rounding; - - set - { - if (_dateTimePicker.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_dateTimePicker, null, _dateTimePicker.StateCommon.Border.Rounding, value); - - _dateTimePicker.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -193,7 +176,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(ShowCheckBox), nameof(ShowCheckBox), nameof(Appearance), @"Display a check box allowing the user to set the value is null")); actions.Add(new DesignerActionPropertyItem(nameof(Checked), nameof(Checked), nameof(Appearance), @"Is the current value null")); actions.Add(new DesignerActionPropertyItem(nameof(Font), nameof(Font), nameof(Appearance), @"The font for the date time picker.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(@"Visuals")); actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing")); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDomainUpDownActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDomainUpDownActionList.cs index d12d58cf5..461109dc0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDomainUpDownActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDomainUpDownActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonDomainUpDownActionList : DesignerActionList { #region Instance Fields - private readonly KryptonDomainUpDown? _domainUpDown; - private readonly IComponentChangeService _service; + private readonly KryptonDomainUpDown _domainUpDown; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonDomainUpDownActionList(KryptonDomainUpDownDesigner owner) : base(owner.Component) { // Remember the text box instance - _domainUpDown = owner.Component as KryptonDomainUpDown; + _domainUpDown = (owner.Component as KryptonDomainUpDown)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_domainUpDown.KryptonContextMenu != value) { - _service.OnComponentChanged(_domainUpDown, null, _domainUpDown.KryptonContextMenu, value); + _service?.OnComponentChanged(_domainUpDown, null, _domainUpDown.KryptonContextMenu, value); _domainUpDown.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_domainUpDown.PaletteMode != value) { - _service.OnComponentChanged(_domainUpDown, null, _domainUpDown.PaletteMode, value); + _service?.OnComponentChanged(_domainUpDown, null, _domainUpDown.PaletteMode, value); _domainUpDown.PaletteMode = value; } } @@ -81,7 +81,7 @@ public InputControlStyle InputControlStyle { if (_domainUpDown.InputControlStyle != value) { - _service.OnComponentChanged(_domainUpDown, null, _domainUpDown.InputControlStyle, value); + _service?.OnComponentChanged(_domainUpDown, null, _domainUpDown.InputControlStyle, value); _domainUpDown.InputControlStyle = value; } } @@ -89,36 +89,18 @@ public InputControlStyle InputControlStyle public Font Font { - get => _domainUpDown.StateCommon.Content.Font; + get => _domainUpDown.StateCommon.Content.Font!; set { - if (_domainUpDown.StateCommon.Content.Font != value) + if (!Equals(_domainUpDown.StateCommon.Content.Font, value)) { - _service.OnComponentChanged(_domainUpDown, null, _domainUpDown.StateCommon.Content.Font, value); + _service?.OnComponentChanged(_domainUpDown, null, _domainUpDown.StateCommon.Content.Font, value); _domainUpDown.StateCommon.Content.Font = value; } } } - - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _domainUpDown.StateCommon.Border.Rounding; - - set - { - if (_domainUpDown.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_domainUpDown, null, _domainUpDown.StateCommon.Border.Rounding, value); - - _domainUpDown.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -139,7 +121,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); actions.Add(new DesignerActionPropertyItem(nameof(InputControlStyle), @"Style", nameof(Appearance), @"DomainUpDown display style.")); actions.Add(new DesignerActionPropertyItem(nameof(Font), nameof(Font), nameof(Appearance), @"The font for the domain up down.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(@"Visuals")); actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing")); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDropButtonActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDropButtonActionList.cs index 49ce24947..30050af9a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDropButtonActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonDropButtonActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonDropButtonActionList : DesignerActionList { #region Instance Fields - private readonly KryptonDropButton? _dropButton; - private readonly IComponentChangeService _service; + private readonly KryptonDropButton _dropButton; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonDropButtonActionList(KryptonDropButtonDesigner owner) : base(owner.Component) { // Remember the button instance - _dropButton = owner.Component as KryptonDropButton; + _dropButton = (owner.Component as KryptonDropButton)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public ButtonStyle ButtonStyle { if (_dropButton.ButtonStyle != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.ButtonStyle, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.ButtonStyle, value); _dropButton.ButtonStyle = value; } } @@ -64,7 +64,7 @@ public VisualOrientation ButtonOrientation { if (_dropButton.ButtonOrientation != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.ButtonOrientation, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.ButtonOrientation, value); _dropButton.ButtonOrientation = value; } } @@ -80,7 +80,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_dropButton.KryptonContextMenu != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.KryptonContextMenu, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.KryptonContextMenu, value); _dropButton.KryptonContextMenu = value; } @@ -98,7 +98,7 @@ public VisualOrientation DropDownPosition { if (_dropButton.DropDownPosition != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.DropDownPosition, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.DropDownPosition, value); _dropButton.DropDownPosition = value; } } @@ -115,7 +115,7 @@ public VisualOrientation DropDownOrientation { if (_dropButton.DropDownOrientation != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.DropDownOrientation, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.DropDownOrientation, value); _dropButton.DropDownOrientation = value; } } @@ -132,7 +132,7 @@ public bool Splitter { if (_dropButton.Splitter != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.Splitter, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.Splitter, value); _dropButton.Splitter = value; } } @@ -149,7 +149,7 @@ public string Text { if (_dropButton.Values.Text != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.Values.Text, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.Values.Text, value); _dropButton.Values.Text = value; } } @@ -166,7 +166,7 @@ public string ExtraText { if (_dropButton.Values.ExtraText != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.Values.ExtraText, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.Values.ExtraText, value); _dropButton.Values.ExtraText = value; } } @@ -183,7 +183,7 @@ public Image? Image { if (_dropButton.Values.Image != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.Values.Image, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.Values.Image, value); _dropButton.Values.Image = value; } } @@ -200,7 +200,7 @@ public PaletteMode PaletteMode { if (_dropButton.PaletteMode != value) { - _service.OnComponentChanged(_dropButton, null, _dropButton.PaletteMode, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.PaletteMode, value); _dropButton.PaletteMode = value; } } @@ -210,13 +210,13 @@ public PaletteMode PaletteMode /// The font. public Font StateCommonShortTextFont { - get => _dropButton.StateCommon.Content.ShortText.Font; + get => _dropButton.StateCommon.Content.ShortText.Font!; set { - if (_dropButton.StateCommon.Content.ShortText.Font != value) + if (!Equals(_dropButton.StateCommon.Content.ShortText.Font, value)) { - _service.OnComponentChanged(_dropButton, null, _dropButton.StateCommon.Content.ShortText.Font, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.StateCommon.Content.ShortText.Font, value); _dropButton.StateCommon.Content.ShortText.Font = value; } @@ -227,36 +227,19 @@ public Font StateCommonShortTextFont /// The font. public Font StateCommonLongTextFont { - get => _dropButton.StateCommon.Content.LongText.Font; + get => _dropButton.StateCommon.Content.LongText.Font!; set { - if (_dropButton.StateCommon.Content.LongText.Font != value) + if (!Equals(_dropButton.StateCommon.Content.LongText.Font, value)) { - _service.OnComponentChanged(_dropButton, null, _dropButton.StateCommon.Content.LongText.Font, value); + _service?.OnComponentChanged(_dropButton, null, _dropButton.StateCommon.Content.LongText.Font, value); _dropButton.StateCommon.Content.LongText.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _dropButton.StateCommon.Border.Rounding; - - set - { - if (_dropButton.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_dropButton, null, _dropButton.StateCommon.Border.Rounding, value); - - _dropButton.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -282,7 +265,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(DropDownOrientation), nameof(DropDownOrientation), nameof(Appearance), @"DropDown orientation")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); actions.Add(new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(@"Values")); actions.Add(new DesignerActionPropertyItem(nameof(Text), nameof(Text), @"Values", @"Button text")); actions.Add(new DesignerActionPropertyItem(nameof(ExtraText), nameof(ExtraText), @"Values", @"Button extra text")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonFormActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonFormActionList.cs index 7349a154b..2a01dad8a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonFormActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonFormActionList.cs @@ -5,14 +5,21 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - internal class KryptonFormActionList + internal class KryptonFormActionList : DesignerActionList { + #region Identity + + public KryptonFormActionList(KryptonFormDesigner owner) : base(owner.Component) + { + } + + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupActionList.cs index 451580234..943377328 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonGroupActionList : DesignerActionList { #region Instance Fields - private readonly KryptonGroup? _group; - private readonly IComponentChangeService _service; + private readonly KryptonGroup _group; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonGroupActionList(KryptonGroupDesigner owner) : base(owner.Component) { // Remember the group instance - _group = owner.Component as KryptonGroup; + _group = (owner.Component as KryptonGroup)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public PaletteBackStyle GroupBackStyle { if (_group.GroupBackStyle != value) { - _service.OnComponentChanged(_group, null, _group.GroupBackStyle, value); + _service?.OnComponentChanged(_group, null, _group.GroupBackStyle, value); _group.GroupBackStyle = value; } } @@ -64,7 +64,7 @@ public PaletteBorderStyle GroupBorderStyle { if (_group.GroupBorderStyle != value) { - _service.OnComponentChanged(_group, null, _group.GroupBorderStyle, value); + _service?.OnComponentChanged(_group, null, _group.GroupBorderStyle, value); _group.GroupBorderStyle = value; } } @@ -81,7 +81,7 @@ public PaletteMode PaletteMode { if (_group.PaletteMode != value) { - _service.OnComponentChanged(_group, null, _group.PaletteMode, value); + _service?.OnComponentChanged(_group, null, _group.PaletteMode, value); _group.PaletteMode = value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupBoxActionList.cs index 8b5554662..7d6d3bd31 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonGroupBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonGroupBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonGroupBox? _groupBox; - private readonly IComponentChangeService _service; + private readonly KryptonGroupBox _groupBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonGroupBoxActionList(KryptonGroupBoxDesigner owner) : base(owner.Component) { // Remember the control instance - _groupBox = owner.Component as KryptonGroupBox; + _groupBox = (owner.Component as KryptonGroupBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public PaletteBackStyle GroupBackStyle { if (_groupBox.GroupBackStyle != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.GroupBackStyle, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.GroupBackStyle, value); _groupBox.GroupBackStyle = value; } } @@ -64,7 +64,7 @@ public PaletteBorderStyle GroupBorderStyle { if (_groupBox.GroupBorderStyle != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.GroupBorderStyle, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.GroupBorderStyle, value); _groupBox.GroupBorderStyle = value; } } @@ -81,7 +81,7 @@ public LabelStyle CaptionStyle { if (_groupBox.CaptionStyle != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.CaptionStyle, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.CaptionStyle, value); _groupBox.CaptionStyle = value; } } @@ -98,7 +98,7 @@ public VisualOrientation CaptionEdge { if (_groupBox.CaptionEdge != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.CaptionEdge, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.CaptionEdge, value); _groupBox.CaptionEdge = value; } } @@ -115,7 +115,7 @@ public double CaptionOverlap { if (_groupBox.CaptionOverlap != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.CaptionOverlap, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.CaptionOverlap, value); _groupBox.CaptionOverlap = value; } } @@ -132,7 +132,7 @@ public PaletteMode PaletteMode { if (_groupBox.PaletteMode != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.PaletteMode, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.PaletteMode, value); _groupBox.PaletteMode = value; } } @@ -148,7 +148,7 @@ public string Description { if (_groupBox.Values.Description != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.Values.Description, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.Values.Description, value); _groupBox.Values.Description = value; } @@ -165,7 +165,7 @@ public string Heading { if (_groupBox.Values.Heading != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.Values.Heading, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.Values.Heading, value); _groupBox.Values.Heading = value; } @@ -182,24 +182,24 @@ public Image? Image { if (_groupBox.Values.Image != value) { - _service.OnComponentChanged(_groupBox, null, _groupBox.Values.Image, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.Values.Image, value); _groupBox.Values.Image = value; } } } - /// Gets or sets the State Common State Common Long Text Font. - /// The State Common State Common Long Text Font. + /// Gets or sets the State Common Long Text Font. + /// The State Common Long Text Font. public Font StateCommonLongTextFont { - get => _groupBox.StateCommon.Content.LongText.Font; + get => _groupBox.StateCommon.Content.LongText.Font!; set { - if (_groupBox.StateCommon.Content.LongText.Font != value) + if (!Equals(_groupBox.StateCommon.Content.LongText.Font, value)) { - _service.OnComponentChanged(_groupBox, null, _groupBox.StateCommon.Content.LongText.Font, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.StateCommon.Content.LongText.Font, value); _groupBox.StateCommon.Content.LongText.Font = value; } @@ -210,13 +210,13 @@ public Font StateCommonLongTextFont /// The State Common Short Text Font. public Font StateCommonShortTextFont { - get => _groupBox.StateCommon.Content.ShortText.Font; + get => _groupBox.StateCommon.Content.ShortText.Font!; set { - if (_groupBox.StateCommon.Content.ShortText.Font != value) + if (!Equals(_groupBox.StateCommon.Content.ShortText.Font, value)) { - _service.OnComponentChanged(_groupBox, null, _groupBox.StateCommon.Content.ShortText.Font, value); + _service?.OnComponentChanged(_groupBox, null, _groupBox.StateCommon.Content.ShortText.Font, value); _groupBox.StateCommon.Content.ShortText.Font = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderActionList.cs index 9101b7f56..d6fbc04db 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonHeaderActionList : DesignerActionList { #region Instance Fields - private readonly KryptonHeader? _header; - private readonly IComponentChangeService _service; + private readonly KryptonHeader _header; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonHeaderActionList(KryptonHeaderDesigner owner) : base(owner.Component) { // Remember the header instance - _header = owner.Component as KryptonHeader; + _header = (owner.Component as KryptonHeader)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public HeaderStyle HeaderStyle { if (_header.HeaderStyle != value) { - _service.OnComponentChanged(_header, null, _header.HeaderStyle, value); + _service?.OnComponentChanged(_header, null, _header.HeaderStyle, value); _header.HeaderStyle = value; } } @@ -64,7 +64,7 @@ public VisualOrientation Orientation { if (_header.Orientation != value) { - _service.OnComponentChanged(_header, null, _header.Orientation, value); + _service?.OnComponentChanged(_header, null, _header.Orientation, value); _header.Orientation = value; } } @@ -81,7 +81,7 @@ public string Heading { if (_header.Values.Heading != value) { - _service.OnComponentChanged(_header, null, _header.Values.Heading, value); + _service?.OnComponentChanged(_header, null, _header.Values.Heading, value); _header.Values.Heading = value; } } @@ -98,7 +98,7 @@ public string Description { if (_header.Values.Description != value) { - _service.OnComponentChanged(_header, null, _header.Values.Description, value); + _service?.OnComponentChanged(_header, null, _header.Values.Description, value); _header.Values.Description = value; } } @@ -115,7 +115,7 @@ public Image? Image { if (_header.Values.Image != value) { - _service.OnComponentChanged(_header, null, _header.Values.Image, value); + _service?.OnComponentChanged(_header, null, _header.Values.Image, value); _header.Values.Image = value; } } @@ -132,7 +132,7 @@ public PaletteMode PaletteMode { if (_header.PaletteMode != value) { - _service.OnComponentChanged(_header, null, _header.PaletteMode, value); + _service?.OnComponentChanged(_header, null, _header.PaletteMode, value); _header.PaletteMode = value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderGroupActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderGroupActionList.cs index 39848a045..9452c3426 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderGroupActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonHeaderGroupActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonHeaderGroupActionList : DesignerActionList { #region Instance Fields - private readonly KryptonHeaderGroup? _headerGroup; - private readonly IComponentChangeService _service; + private readonly KryptonHeaderGroup _headerGroup; + private readonly IComponentChangeService? _service; private DesignerVerb _visible1; private DesignerVerb _visible2; private string _text1; @@ -32,10 +32,10 @@ public KryptonHeaderGroupActionList(KryptonHeaderGroupDesigner owner) : base(owner.Component) { // Remember the panel instance - _headerGroup = owner.Component as KryptonHeaderGroup; + _headerGroup = (owner.Component as KryptonHeaderGroup)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -51,7 +51,7 @@ public PaletteBackStyle GroupBackStyle { if (_headerGroup.GroupBackStyle != value) { - _service.OnComponentChanged(_headerGroup, null, _headerGroup.GroupBackStyle, value); + _service?.OnComponentChanged(_headerGroup, null, _headerGroup.GroupBackStyle, value); _headerGroup.GroupBackStyle = value; } } @@ -68,7 +68,7 @@ public PaletteBorderStyle GroupBorderStyle { if (_headerGroup.GroupBorderStyle != value) { - _service.OnComponentChanged(_headerGroup, null, _headerGroup.GroupBorderStyle, value); + _service?.OnComponentChanged(_headerGroup, null, _headerGroup.GroupBorderStyle, value); _headerGroup.GroupBorderStyle = value; } } @@ -85,7 +85,7 @@ public HeaderStyle HeaderStylePrimary { if (_headerGroup.HeaderStylePrimary != value) { - _service.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderStylePrimary, value); + _service?.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderStylePrimary, value); _headerGroup.HeaderStylePrimary = value; } } @@ -102,7 +102,7 @@ public HeaderStyle HeaderStyleSecondary { if (_headerGroup.HeaderStyleSecondary != value) { - _service.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderStyleSecondary, value); + _service?.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderStyleSecondary, value); _headerGroup.HeaderStyleSecondary = value; } } @@ -119,7 +119,7 @@ public VisualOrientation HeaderPositionPrimary { if (_headerGroup.HeaderPositionPrimary != value) { - _service.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderPositionPrimary, value); + _service?.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderPositionPrimary, value); _headerGroup.HeaderPositionPrimary = value; } } @@ -136,7 +136,7 @@ public VisualOrientation HeaderPositionSecondary { if (_headerGroup.HeaderPositionSecondary != value) { - _service.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderPositionSecondary, value); + _service?.OnComponentChanged(_headerGroup, null, _headerGroup.HeaderPositionSecondary, value); _headerGroup.HeaderPositionSecondary = value; } } @@ -153,7 +153,7 @@ public PaletteMode PaletteMode { if (_headerGroup.PaletteMode != value) { - _service.OnComponentChanged(_headerGroup, null, _headerGroup.PaletteMode, value); + _service?.OnComponentChanged(_headerGroup, null, _headerGroup.PaletteMode, value); _headerGroup.PaletteMode = value; } } @@ -206,7 +206,7 @@ public override DesignerActionItemCollection GetSortedActionItems() #endregion #region Implementation - private void OnVisibleClick(object sender, EventArgs e) + private void OnVisibleClick(object? sender, EventArgs e) { // Cast to the correct type var verb = sender as DesignerVerb; diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLabelActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLabelActionList.cs index b2777b886..283a9c053 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLabelActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLabelActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonLabelActionList : DesignerActionList { #region Instance Fields - private readonly KryptonLabel? _label; - private readonly IComponentChangeService _service; + private readonly KryptonLabel _label; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonLabelActionList(KryptonLabelDesigner owner) : base(owner.Component) { // Remember the label instance - _label = owner.Component as KryptonLabel; + _label = (owner.Component as KryptonLabel)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public LabelStyle LabelStyle { if (_label.LabelStyle != value) { - _service.OnComponentChanged(_label, null, _label.LabelStyle, value); + _service?.OnComponentChanged(_label, null, _label.LabelStyle, value); _label.LabelStyle = value; } } @@ -64,7 +64,7 @@ public VisualOrientation Orientation { if (_label.Orientation != value) { - _service.OnComponentChanged(_label, null, _label.Orientation, value); + _service?.OnComponentChanged(_label, null, _label.Orientation, value); _label.Orientation = value; } } @@ -81,7 +81,7 @@ public string Text { if (_label.Values.Text != value) { - _service.OnComponentChanged(_label, null, _label.Values.Text, value); + _service?.OnComponentChanged(_label, null, _label.Values.Text, value); _label.Values.Text = value; } } @@ -98,7 +98,7 @@ public string ExtraText { if (_label.Values.ExtraText != value) { - _service.OnComponentChanged(_label, null, _label.Values.ExtraText, value); + _service?.OnComponentChanged(_label, null, _label.Values.ExtraText, value); _label.Values.ExtraText = value; } } @@ -115,7 +115,7 @@ public Image? Image { if (_label.Values.Image != value) { - _service.OnComponentChanged(_label, null, _label.Values.Image, value); + _service?.OnComponentChanged(_label, null, _label.Values.Image, value); _label.Values.Image = value; } } @@ -132,7 +132,7 @@ public PaletteMode PaletteMode { if (_label.PaletteMode != value) { - _service.OnComponentChanged(_label, null, _label.PaletteMode, value); + _service?.OnComponentChanged(_label, null, _label.PaletteMode, value); _label.PaletteMode = value; } } @@ -142,13 +142,13 @@ public PaletteMode PaletteMode /// The font. public Font StateCommonShortTextFont { - get => _label.StateCommon.ShortText.Font; + get => _label.StateCommon.ShortText.Font!; set { if (_label.StateCommon.ShortText.Font != value) { - _service.OnComponentChanged(_label, null, _label.StateCommon.ShortText.Font, value); + _service?.OnComponentChanged(_label, null, _label.StateCommon.ShortText.Font, value); _label.StateCommon.ShortText.Font = value; } @@ -159,13 +159,13 @@ public Font StateCommonShortTextFont /// The font. public Font StateCommonLongTextFont { - get => _label.StateCommon.LongText.Font; + get => _label.StateCommon.LongText.Font!; set { if (_label.StateCommon.LongText.Font != value) { - _service.OnComponentChanged(_label, null, _label.StateCommon.LongText.Font, value); + _service?.OnComponentChanged(_label, null, _label.StateCommon.LongText.Font, value); _label.StateCommon.LongText.Font = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLanguageManagerActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLanguageManagerActionList.cs deleted file mode 100644 index 49fb2844c..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLanguageManagerActionList.cs +++ /dev/null @@ -1,73 +0,0 @@ -#region BSD License -/* - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - internal class KryptonLanguageManagerActionList : DesignerActionList - { - #region Instance Fields - - private readonly KryptonLanguageManager? _languageManager; - - private readonly IComponentChangeService _service; - - #endregion - - #region Identity - - /// Initializes a new instance of the class. - /// The manager. - public KryptonLanguageManagerActionList(KryptonLanguageManagerDesigner manager) : base(manager.Component) - { - _languageManager = manager.Component as KryptonLanguageManager; - - // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - } - - #endregion - - #region Public Overrides - - public override DesignerActionItemCollection GetSortedActionItems() - { - var actions = new DesignerActionItemCollection(); - - if (_languageManager != null) - { - actions.Add(new KryptonDesignerActionItem(new DesignerVerb(@"Reset strings to factory defaults", OnResetStrings), "Actions")); - } - - return actions; - } - - #endregion - - #region Implementation - - private void OnResetStrings(object sender, EventArgs e) - { - if (_languageManager != null) - { - DialogResult result = - MessageBox.Show(@"Are you sure that you want to reset all strings back to default?", - @"Reset Strings", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - - if (result == DialogResult.Yes) - { - _languageManager.Reset(); - - _service.OnComponentChanged(_languageManager, null, null, null); - } - } - } - - #endregion - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkLabelActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkLabelActionList.cs index 4bcb582a0..d5575e7f8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkLabelActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkLabelActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonLinkLabelActionList : DesignerActionList { #region Instance Fields - private readonly KryptonLinkLabel? _linkLabel; - private readonly IComponentChangeService _service; + private readonly KryptonLinkLabel _linkLabel; + private readonly IComponentChangeService? _service; private string _action; #endregion @@ -29,7 +29,7 @@ public KryptonLinkLabelActionList(KryptonLinkLabelDesigner owner) : base(owner.Component) { // Remember the link label instance - _linkLabel = owner.Component as KryptonLinkLabel; + _linkLabel = (owner.Component as KryptonLinkLabel)!; // Assuming we were correctly passed an actual component... if (_linkLabel != null) @@ -39,7 +39,7 @@ public KryptonLinkLabelActionList(KryptonLinkLabelDesigner owner) } // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -55,7 +55,7 @@ public LabelStyle LabelStyle { if (_linkLabel.LabelStyle != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.LabelStyle, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.LabelStyle, value); _linkLabel.LabelStyle = value; } } @@ -72,7 +72,7 @@ public VisualOrientation Orientation { if (_linkLabel.Orientation != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.Orientation, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.Orientation, value); _linkLabel.Orientation = value; } } @@ -89,7 +89,7 @@ public KryptonLinkBehavior LinkBehavior { if (_linkLabel.LinkBehavior != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.LinkBehavior, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.LinkBehavior, value); _linkLabel.LinkBehavior = value; } } @@ -106,7 +106,7 @@ public bool LinkVisited { if (_linkLabel.LinkVisited != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.LinkVisited, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.LinkVisited, value); _linkLabel.LinkVisited = value; } } @@ -123,7 +123,7 @@ public string Text { if (_linkLabel.Values.Text != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.Values.Text, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.Values.Text, value); _linkLabel.Values.Text = value; } } @@ -140,7 +140,7 @@ public string ExtraText { if (_linkLabel.Values.ExtraText != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.Values.ExtraText, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.Values.ExtraText, value); _linkLabel.Values.ExtraText = value; } } @@ -157,7 +157,7 @@ public Image? Image { if (_linkLabel.Values.Image != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.Values.Image, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.Values.Image, value); _linkLabel.Values.Image = value; } } @@ -174,7 +174,7 @@ public PaletteMode PaletteMode { if (_linkLabel.PaletteMode != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.PaletteMode, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.PaletteMode, value); _linkLabel.PaletteMode = value; } } @@ -184,13 +184,13 @@ public PaletteMode PaletteMode /// The font. public Font StateCommonShortTextFont { - get => _linkLabel.StateCommon.ShortText.Font; + get => _linkLabel.StateCommon.ShortText.Font!; set { if (_linkLabel.StateCommon.ShortText.Font != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.StateCommon.ShortText.Font, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.StateCommon.ShortText.Font, value); _linkLabel.StateCommon.ShortText.Font = value; } @@ -201,13 +201,13 @@ public Font StateCommonShortTextFont /// The font. public Font StateCommonLongTextFont { - get => _linkLabel.StateCommon.LongText.Font; + get => _linkLabel.StateCommon.LongText.Font!; set { if (_linkLabel.StateCommon.LongText.Font != value) { - _service.OnComponentChanged(_linkLabel, null, _linkLabel.StateCommon.LongText.Font, value); + _service?.OnComponentChanged(_linkLabel, null, _linkLabel.StateCommon.LongText.Font, value); _linkLabel.StateCommon.LongText.Font = value; } @@ -249,7 +249,7 @@ public override DesignerActionItemCollection GetSortedActionItems() #endregion #region Implementation - private void OnLinkVisitedClick(object sender, EventArgs e) + private void OnLinkVisitedClick(object? sender, EventArgs e) { // Cast to the correct type diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkWrapLabelActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkWrapLabelActionList.cs index dc6b46dbf..2458c6a1e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkWrapLabelActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonLinkWrapLabelActionList.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -12,8 +12,8 @@ namespace Krypton.Toolkit internal class KryptonLinkWrapLabelActionList : DesignerActionList { #region Instance Fields - private readonly KryptonLinkWrapLabel? _linkWrapLabel; - private readonly IComponentChangeService _service; + private readonly KryptonLinkWrapLabel _linkWrapLabel; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -25,10 +25,10 @@ public KryptonLinkWrapLabelActionList(KryptonLinkWrapLabelDesigner owner) : base(owner.Component) { // Remember the label instance - _linkWrapLabel = owner.Component as KryptonLinkWrapLabel; + _linkWrapLabel = (owner.Component as KryptonLinkWrapLabel)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -44,7 +44,7 @@ public LabelStyle LabelStyle { if (_linkWrapLabel.LabelStyle != value) { - _service.OnComponentChanged(_linkWrapLabel, null, _linkWrapLabel.LabelStyle, value); + _service?.OnComponentChanged(_linkWrapLabel, null, _linkWrapLabel.LabelStyle, value); _linkWrapLabel.LabelStyle = value; } } @@ -61,7 +61,7 @@ public PaletteMode PaletteMode { if (_linkWrapLabel.PaletteMode != value) { - _service.OnComponentChanged(_linkWrapLabel, null, _linkWrapLabel.PaletteMode, value); + _service?.OnComponentChanged(_linkWrapLabel, null, _linkWrapLabel.PaletteMode, value); _linkWrapLabel.PaletteMode = value; } } @@ -71,13 +71,13 @@ public PaletteMode PaletteMode /// The font. public Font Font { - get => _linkWrapLabel.StateCommon.Font; + get => _linkWrapLabel.StateCommon.Font!; set { if (_linkWrapLabel.StateCommon.Font != value) { - _service.OnComponentChanged(_linkWrapLabel, null, _linkWrapLabel.StateCommon.Font, value); + _service?.OnComponentChanged(_linkWrapLabel, null, _linkWrapLabel.StateCommon.Font, value); _linkWrapLabel.StateCommon.Font = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListBoxActionList.cs index 568cbadf5..788ae15cd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonListBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonListBox? _listBox; - private readonly IComponentChangeService _service; + private readonly KryptonListBox _listBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonListBoxActionList(KryptonListBoxDesigner owner) : base(owner.Component) { // Remember the list box instance - _listBox = owner.Component as KryptonListBox; + _listBox = (owner.Component as KryptonListBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public ButtonStyle ItemStyle { if (_listBox.ItemStyle != value) { - _service.OnComponentChanged(_listBox, null, _listBox.ItemStyle, value); + _service?.OnComponentChanged(_listBox, null, _listBox.ItemStyle, value); _listBox.ItemStyle = value; } } @@ -64,7 +64,7 @@ public PaletteBackStyle BackStyle { if (_listBox.BackStyle != value) { - _service.OnComponentChanged(_listBox, null, _listBox.BackStyle, value); + _service?.OnComponentChanged(_listBox, null, _listBox.BackStyle, value); _listBox.BackStyle = value; } } @@ -81,7 +81,7 @@ public PaletteBorderStyle BorderStyle { if (_listBox.BorderStyle != value) { - _service.OnComponentChanged(_listBox, null, _listBox.BorderStyle, value); + _service?.OnComponentChanged(_listBox, null, _listBox.BorderStyle, value); _listBox.BorderStyle = value; } } @@ -97,7 +97,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_listBox.KryptonContextMenu != value) { - _service.OnComponentChanged(_listBox, null, _listBox.KryptonContextMenu, value); + _service?.OnComponentChanged(_listBox, null, _listBox.KryptonContextMenu, value); _listBox.KryptonContextMenu = value; } @@ -115,7 +115,7 @@ public SelectionMode SelectionMode { if (_listBox.SelectionMode != value) { - _service.OnComponentChanged(_listBox, null, _listBox.SelectionMode, value); + _service?.OnComponentChanged(_listBox, null, _listBox.SelectionMode, value); _listBox.SelectionMode = value; } } @@ -132,7 +132,7 @@ public bool Sorted { if (_listBox.Sorted != value) { - _service.OnComponentChanged(_listBox, null, _listBox.Sorted, value); + _service?.OnComponentChanged(_listBox, null, _listBox.Sorted, value); _listBox.Sorted = value; } } @@ -149,7 +149,7 @@ public PaletteMode PaletteMode { if (_listBox.PaletteMode != value) { - _service.OnComponentChanged(_listBox, null, _listBox.PaletteMode, value); + _service?.OnComponentChanged(_listBox, null, _listBox.PaletteMode, value); _listBox.PaletteMode = value; } } @@ -159,13 +159,13 @@ public PaletteMode PaletteMode /// The font. public Font StateCommonShortTextFont { - get => _listBox.StateCommon.Item.Content.ShortText.Font; + get => _listBox.StateCommon.Item.Content.ShortText.Font!; set { if (_listBox.StateCommon.Item.Content.ShortText.Font != value) { - _service.OnComponentChanged(_listBox, null, _listBox.StateCommon.Item.Content.ShortText.Font, value); + _service?.OnComponentChanged(_listBox, null, _listBox.StateCommon.Item.Content.ShortText.Font, value); _listBox.StateCommon.Item.Content.ShortText.Font = value; } @@ -176,54 +176,19 @@ public Font StateCommonShortTextFont /// The font. public Font StateCommonLongTextFont { - get => _listBox.StateCommon.Item.Content.LongText.Font; + get => _listBox.StateCommon.Item.Content.LongText.Font!; set { if (_listBox.StateCommon.Item.Content.LongText.Font != value) { - _service.OnComponentChanged(_listBox, null, _listBox.StateCommon.Item.Content.LongText.Font, value); + _service?.OnComponentChanged(_listBox, null, _listBox.StateCommon.Item.Content.LongText.Font, value); _listBox.StateCommon.Item.Content.LongText.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _listBox.StateCommon.Border.Rounding; - - set - { - if (_listBox.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_listBox, null, _listBox.StateCommon.Border.Rounding, value); - - _listBox.StateCommon.Border.Rounding = value; - } - } - } - - /// Gets or sets the item corner radius. - /// The item corner radius. - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float StateCommonItemCornerRoundingRadius - { - get => _listBox.StateCommon.Item.Border.Rounding; - - set - { - if (_listBox.StateCommon.Item.Border.Rounding != value) - { - _service.OnComponentChanged(_listBox, null, _listBox.StateCommon.Item.Border.Rounding, value); - - _listBox.StateCommon.Item.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -234,27 +199,24 @@ public float StateCommonItemCornerRoundingRadius public override DesignerActionItemCollection GetSortedActionItems() { // Create a new collection for holding the single item we want to create - var actions = new DesignerActionItemCollection(); - - // This can be null when deleting a control instance at design time - if (_listBox != null) + var actions = new DesignerActionItemCollection { + // This can be null when deleting a control instance at design time // Add the list of list box specific actions - actions.Add(new DesignerActionHeaderItem(nameof(Appearance))); - actions.Add(new DesignerActionPropertyItem(nameof(BackStyle), @"Back Style", nameof(Appearance), @"Style used to draw background.")); - actions.Add(new DesignerActionPropertyItem(nameof(BorderStyle), @"Border Style", nameof(Appearance), @"Style used to draw the border.")); - actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(ItemStyle), @"Item Style", nameof(Appearance), @"How to display list items.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonItemCornerRoundingRadius), @"State Common Item Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the item.")); - actions.Add(new DesignerActionHeaderItem(nameof(Behavior))); - actions.Add(new DesignerActionPropertyItem(nameof(SelectionMode), @"Selection Mode", nameof(Behavior), @"Determines the selection mode.")); - actions.Add(new DesignerActionPropertyItem(nameof(Sorted), nameof(Sorted), nameof(Behavior), @"Should items be sorted according to string.")); - actions.Add(new DesignerActionHeaderItem(@"Visuals")); - actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing")); - } + new DesignerActionHeaderItem(nameof(Appearance)), + new DesignerActionPropertyItem(nameof(BackStyle), @"Back Style", nameof(Appearance), + @"Style used to draw background."), + new DesignerActionPropertyItem(nameof(BorderStyle), @"Border Style", nameof(Appearance), @"Style used to draw the border."), + new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control."), + new DesignerActionPropertyItem(nameof(ItemStyle), @"Item Style", nameof(Appearance), @"How to display list items."), + new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font."), + new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font."), + new DesignerActionHeaderItem(nameof(Behavior)), + new DesignerActionPropertyItem(nameof(SelectionMode), @"Selection Mode", nameof(Behavior), @"Determines the selection mode."), + new DesignerActionPropertyItem(nameof(Sorted), nameof(Sorted), nameof(Behavior), @"Should items be sorted according to string."), + new DesignerActionHeaderItem(@"Visuals"), + new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing") + }; return actions; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListViewActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListViewActionList.cs index 40a2160c8..197186b3c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListViewActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonListViewActionList.cs @@ -5,20 +5,18 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion -using Krypton.Toolkit.Designers.Designers; - -namespace Krypton.Toolkit.Designers.Action_Lists +namespace Krypton.Toolkit { internal class KryptonListViewActionList : DesignerActionList { #region Instance Fields - private readonly KryptonListView? _listView; - private readonly IComponentChangeService _service; + private readonly KryptonListView _listView; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -30,64 +28,15 @@ public KryptonListViewActionList(KryptonListViewDesigner owner) : base(owner.Component) { // Remember the list box instance - _listView = owner.Component as KryptonListView; + _listView = (owner.Component as KryptonListView)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion #region Public - /// - /// Gets and sets the style used for list items. - /// - public ButtonStyle ItemStyle - { - get => _listView.ItemStyle; - - set - { - if (_listView.ItemStyle != value) - { - _service.OnComponentChanged(_listView, null, _listView.ItemStyle, value); - _listView.ItemStyle = value; - } - } - } - - /// - /// Gets and sets the background drawing style. - /// - public PaletteBackStyle BackStyle - { - get => _listView.BackStyle; - - set - { - if (_listView.BackStyle != value) - { - _service.OnComponentChanged(_listView, null, _listView.BackStyle, value); - _listView.BackStyle = value; - } - } - } - - /// - /// Gets and sets the border drawing style. - /// - public PaletteBorderStyle BorderStyle - { - get => _listView.BorderStyle; - - set - { - if (_listView.BorderStyle != value) - { - _service.OnComponentChanged(_listView, null, _listView.BorderStyle, value); - _listView.BorderStyle = value; - } - } - } + /// Gets or sets the Krypton Context Menu. /// The Krypton Context Menu. @@ -99,65 +48,13 @@ public KryptonContextMenu? KryptonContextMenu { if (_listView.KryptonContextMenu != value) { - _service.OnComponentChanged(_listView, null, _listView.KryptonContextMenu, value); + _service?.OnComponentChanged(_listView, null, _listView.KryptonContextMenu, value); _listView.KryptonContextMenu = value; } } } - /// Gets or sets the font. - /// The font. - public Font StateCommonShortTextFont - { - get => _listView.StateCommon.Item.Content.ShortText.Font; - - set - { - if (_listView.StateCommon.Item.Content.ShortText.Font != value) - { - _service.OnComponentChanged(_listView, null, _listView.StateCommon.Item.Content.ShortText.Font, value); - - _listView.StateCommon.Item.Content.ShortText.Font = value; - } - } - } - - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _listView.StateCommon.Border.Rounding; - - set - { - if (_listView.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_listView, null, _listView.StateCommon.Border.Rounding, value); - - _listView.StateCommon.Border.Rounding = value; - } - } - } - - /// Gets or sets the item corner radius. - /// The item corner radius. - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float StateCommonItemCornerRoundingRadius - { - get => _listView.StateCommon.Item.Border.Rounding; - - set - { - if (_listView.StateCommon.Item.Border.Rounding != value) - { - _service.OnComponentChanged(_listView, null, _listView.StateCommon.Item.Border.Rounding, value); - - _listView.StateCommon.Item.Border.Rounding = value; - } - } - } #endregion @@ -169,23 +66,14 @@ public float StateCommonItemCornerRoundingRadius public override DesignerActionItemCollection GetSortedActionItems() { // Create a new collection for holding the single item we want to create - var actions = new DesignerActionItemCollection(); - - // This can be null when deleting a control instance at design time - if (_listView != null) + var actions = new DesignerActionItemCollection { + // This can be null when deleting a control instance at design time // Add the list of list box specific actions - actions.Add(new DesignerActionHeaderItem(nameof(Appearance))); - actions.Add(new DesignerActionPropertyItem(nameof(BackStyle), @"Back Style", nameof(Appearance), @"Style used to draw background.")); - actions.Add(new DesignerActionPropertyItem(nameof(BorderStyle), @"Border Style", nameof(Appearance), @"Style used to draw the border.")); - actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(ItemStyle), @"Item Style", nameof(Appearance), @"How to display list items.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonItemCornerRoundingRadius), @"State Common Item Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the item.")); - actions.Add(new DesignerActionHeaderItem(nameof(Behavior))); - actions.Add(new DesignerActionHeaderItem(@"Visuals")); - } + new DesignerActionHeaderItem(nameof(Appearance)), + new DesignerActionPropertyItem(nameof(BorderStyle), @"Border Style", nameof(Appearance), @"Style used to draw the border."), + new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control."), + }; return actions; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonManagerActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonManagerActionList.cs index 4a14ff97a..ed817775c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonManagerActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonManagerActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonManagerActionList : DesignerActionList { #region Instance Fields - private readonly KryptonManager? _manager; - private readonly IComponentChangeService _service; + private readonly KryptonManager _manager; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonManagerActionList(KryptonManagerDesigner owner) : base(owner.Component) { // Remember the panel instance - _manager = owner.Component as KryptonManager; + _manager = (owner.Component as KryptonManager)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,50 +47,35 @@ public PaletteMode GlobalPaletteMode { if (_manager.GlobalPaletteMode != value) { - _service.OnComponentChanged(_manager, null, _manager.GlobalPaletteMode, value); + _service?.OnComponentChanged(_manager, null, _manager.GlobalPaletteMode, value); _manager.GlobalPaletteMode = value; } } } - /// Gets or sets the language manager. - /// The language manager. - public KryptonLanguageManager? LanguageManager - { - get => _manager.LanguageManager; - - set - { - if (_manager != null && _manager.LanguageManager != value) - { - _service.OnComponentChanged(_manager, null, _manager.LanguageManager, value); - _manager.LanguageManager = value; - } - } - } #endregion #region Implementation - private void OnAddLanguageManager(object sender, EventArgs e) + private void OnReset(object? sender, EventArgs e) { - if (_manager is { LanguageManager: null }) + if (_manager != null) { - _manager.LanguageManager = new KryptonLanguageManager(); + DialogResult result = KryptonMessageBox.Show( + @"This will reset the current theme back to 'Microsoft 365 - Blue'. Do you want to continue?", + @"Reset Theme", + KryptonMessageBoxButtons.YesNo, + KryptonMessageBoxIcon.Question + ); + + if (result == DialogResult.Yes) + { + _manager.GlobalPaletteMode = PaletteMode.Microsoft365Blue; - var languageManager = new KryptonLanguageManager(); + _service?.OnComponentChanged(_manager, null, _manager.GlobalPaletteMode, PaletteMode.Microsoft365Blue); - _service.OnComponentChanged(_manager, null, null, languageManager); - } - } - - private void OnRemoveLanguageManager(object sender, EventArgs e) - { - if (_manager?.LanguageManager != null) - { - _manager.LanguageManager = null; - - _service.OnComponentChanged(_manager, null, _manager.LanguageManager, null); + //UpdateVerbStatus(); + } } } @@ -110,17 +95,18 @@ public override DesignerActionItemCollection GetSortedActionItems() if (_manager != null) { // Add the list of panel specific actions - /*actions.Add(new DesignerActionHeaderItem(@"Actions")); - actions.Add(new KryptonDesignerActionItem(new DesignerVerb(@"Add language manager", OnAddLanguageManager), "Actions")); - actions.Add(new KryptonDesignerActionItem(new DesignerVerb(@"Remove language manager", OnRemoveLanguageManager), "Actions")); */ - actions.Add(new DesignerActionHeaderItem(@"Data")); - actions.Add(new DesignerActionPropertyItem(nameof(LanguageManager), @"Language Manager", @"Data", @"Global string settings")); + actions.Add(new DesignerActionHeaderItem(@"Actions")); + actions.Add(new KryptonDesignerActionItem(new DesignerVerb(@"Reset to Default Theme", OnReset), @"Actions")); + /*actions.Add(new KryptonDesignerActionItem(new DesignerVerb(@"Add language manager", OnAddLanguageManager), "Actions")); + actions.Add(new KryptonDesignerActionItem(new DesignerVerb(@"Remove language manager", OnRemoveLanguageManager), "Actions")); + actions.Add(new DesignerActionHeaderItem(@"Data"));*/ actions.Add(new DesignerActionHeaderItem(@"Visuals")); actions.Add(new DesignerActionPropertyItem(nameof(GlobalPaletteMode), @"Global Palette", @"Visuals", @"Global palette setting")); } return actions; } + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMaskedTextBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMaskedTextBoxActionList.cs index 13ecc7d93..9fcc3d70e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMaskedTextBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMaskedTextBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonMaskedTextBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonMaskedTextBox? _maskedTextBox; - private readonly IComponentChangeService _service; + private readonly KryptonMaskedTextBox _maskedTextBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonMaskedTextBoxActionList(KryptonMaskedTextBoxDesigner owner) : base(owner.Component) { // Remember the text box instance - _maskedTextBox = owner.Component as KryptonMaskedTextBox; + _maskedTextBox = (owner.Component as KryptonMaskedTextBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_maskedTextBox.KryptonContextMenu != value) { - _service.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.KryptonContextMenu, value); + _service?.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.KryptonContextMenu, value); _maskedTextBox.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_maskedTextBox.PaletteMode != value) { - _service.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.PaletteMode, value); + _service?.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.PaletteMode, value); _maskedTextBox.PaletteMode = value; } } @@ -81,7 +81,7 @@ public InputControlStyle InputControlStyle { if (_maskedTextBox.InputControlStyle != value) { - _service.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.InputControlStyle, value); + _service?.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.InputControlStyle, value); _maskedTextBox.InputControlStyle = value; } } @@ -98,7 +98,7 @@ public string Mask { if (_maskedTextBox.Mask != value) { - _service.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.Mask, value); + _service?.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.Mask, value); _maskedTextBox.Mask = value; } } @@ -108,36 +108,19 @@ public string Mask /// The text box font. public Font Font { - get => _maskedTextBox.StateCommon.Content.Font; + get => _maskedTextBox.StateCommon.Content.Font!; set { if (_maskedTextBox.StateCommon.Content.Font != value) { - _service.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.StateCommon.Content.Font, value); + _service?.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.StateCommon.Content.Font, value); _maskedTextBox.StateCommon.Content.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _maskedTextBox.StateCommon.Border.Rounding; - - set - { - if (_maskedTextBox.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_maskedTextBox, null, _maskedTextBox.StateCommon.Border.Rounding, value); - - _maskedTextBox.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -158,7 +141,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); actions.Add(new DesignerActionPropertyItem(nameof(InputControlStyle), @"Style", nameof(Appearance), @"TextBox display style.")); actions.Add(new DesignerActionPropertyItem(nameof(Font), nameof(Font), nameof(Appearance), @"Modifies the font of the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(nameof(MaskedTextBox))); actions.Add(new DesignerActionPropertyItem(nameof(Mask), nameof(Mask), nameof(MaskedTextBox), @"Input mask.")); actions.Add(new DesignerActionHeaderItem(@"Visuals")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMonthCalendarActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMonthCalendarActionList.cs index f8b45c6bf..7d73f477f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMonthCalendarActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonMonthCalendarActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonMonthCalendarActionList : DesignerActionList { #region Instance Fields - private readonly KryptonMonthCalendar? _monthCalendar; - private readonly IComponentChangeService _service; + private readonly KryptonMonthCalendar _monthCalendar; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonMonthCalendarActionList(KryptonMonthCalendarDesigner owner) : base(owner.Component) { // Remember the bread crumb control instance - _monthCalendar = owner.Component as KryptonMonthCalendar; + _monthCalendar = (owner.Component as KryptonMonthCalendar)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_monthCalendar.KryptonContextMenu != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.KryptonContextMenu, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.KryptonContextMenu, value); _monthCalendar.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_monthCalendar.PaletteMode != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.PaletteMode, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.PaletteMode, value); _monthCalendar.PaletteMode = value; } } @@ -81,7 +81,7 @@ public int MaxSelectionCount { if (_monthCalendar.MaxSelectionCount != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.MaxSelectionCount, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.MaxSelectionCount, value); _monthCalendar.MaxSelectionCount = value; } } @@ -98,7 +98,7 @@ public bool ShowToday { if (_monthCalendar.ShowToday != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.ShowToday, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.ShowToday, value); _monthCalendar.ShowToday = value; } } @@ -115,7 +115,7 @@ public bool ShowTodayCircle { if (_monthCalendar.ShowTodayCircle != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.ShowTodayCircle, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.ShowTodayCircle, value); _monthCalendar.ShowTodayCircle = value; } } @@ -132,7 +132,7 @@ public bool ShowWeekNumbers { if (_monthCalendar.ShowWeekNumbers != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.ShowWeekNumbers, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.ShowWeekNumbers, value); _monthCalendar.ShowWeekNumbers = value; } } @@ -142,13 +142,13 @@ public bool ShowWeekNumbers /// The font. public Font DayStateCommonShortTextFont { - get => _monthCalendar.StateCommon.Day.Content.ShortText.Font; + get => _monthCalendar.StateCommon.Day.Content.ShortText.Font!; set { if (_monthCalendar.StateCommon.Day.Content.ShortText.Font != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.StateCommon.Day.Content.ShortText.Font, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.StateCommon.Day.Content.ShortText.Font, value); _monthCalendar.StateCommon.Day.Content.ShortText.Font = value; } @@ -159,36 +159,19 @@ public Font DayStateCommonShortTextFont /// The font. public Font DayStateCommonLongTextFont { - get => _monthCalendar.StateCommon.Day.Content.LongText.Font; + get => _monthCalendar.StateCommon.Day.Content.LongText.Font!; set { if (_monthCalendar.StateCommon.Day.Content.LongText.Font != value) { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.StateCommon.Day.Content.LongText.Font, value); + _service?.OnComponentChanged(_monthCalendar, null, _monthCalendar.StateCommon.Day.Content.LongText.Font, value); _monthCalendar.StateCommon.Day.Content.LongText.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _monthCalendar.StateCommon.Border.Rounding; - - set - { - if (_monthCalendar.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_monthCalendar, null, _monthCalendar.StateCommon.Border.Rounding, value); - - _monthCalendar.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -209,7 +192,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); actions.Add(new DesignerActionPropertyItem(nameof(DayStateCommonShortTextFont), @"Day State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); actions.Add(new DesignerActionPropertyItem(nameof(DayStateCommonLongTextFont), @"Day State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(nameof(Behavior))); actions.Add(new DesignerActionPropertyItem(nameof(MaxSelectionCount), nameof(MaxSelectionCount), nameof(Behavior), @"Maximum number of selected days")); actions.Add(new DesignerActionPropertyItem(nameof(ShowToday), nameof(ShowToday), nameof(Behavior), @"Show the today button")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonNumericUpDownActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonNumericUpDownActionList.cs index 7b90beace..6ab933a9d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonNumericUpDownActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonNumericUpDownActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonNumericUpDownActionList : DesignerActionList { #region Instance Fields - private readonly KryptonNumericUpDown? _numericUpDown; - private readonly IComponentChangeService _service; + private readonly KryptonNumericUpDown _numericUpDown; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonNumericUpDownActionList(KryptonNumericUpDownDesigner owner) : base(owner.Component) { // Remember the text box instance - _numericUpDown = owner.Component as KryptonNumericUpDown; + _numericUpDown = (owner.Component as KryptonNumericUpDown)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_numericUpDown.KryptonContextMenu != value) { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.KryptonContextMenu, value); + _service?.OnComponentChanged(_numericUpDown, null, _numericUpDown.KryptonContextMenu, value); _numericUpDown.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_numericUpDown.PaletteMode != value) { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.PaletteMode, value); + _service?.OnComponentChanged(_numericUpDown, null, _numericUpDown.PaletteMode, value); _numericUpDown.PaletteMode = value; } } @@ -81,7 +81,7 @@ public InputControlStyle InputControlStyle { if (_numericUpDown.InputControlStyle != value) { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.InputControlStyle, value); + _service?.OnComponentChanged(_numericUpDown, null, _numericUpDown.InputControlStyle, value); _numericUpDown.InputControlStyle = value; } } @@ -98,7 +98,7 @@ public decimal Increment { if (_numericUpDown.Increment != value) { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.Increment, value); + _service?.OnComponentChanged(_numericUpDown, null, _numericUpDown.Increment, value); _numericUpDown.Increment = value; } } @@ -115,7 +115,7 @@ public decimal Maximum { if (_numericUpDown.Maximum != value) { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.Maximum, value); + _service?.OnComponentChanged(_numericUpDown, null, _numericUpDown.Maximum, value); _numericUpDown.Maximum = value; } } @@ -132,7 +132,7 @@ public decimal Minimum { if (_numericUpDown.Minimum != value) { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.Minimum, value); + _service?.OnComponentChanged(_numericUpDown, null, _numericUpDown.Minimum, value); _numericUpDown.Minimum = value; } } @@ -142,36 +142,18 @@ public decimal Minimum /// The font. public Font Font { - get => _numericUpDown.StateCommon.Content.Font; + get => _numericUpDown.StateCommon.Content.Font!; set { if (_numericUpDown.StateCommon.Content.Font != value) { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.StateCommon.Content.Font, value); + _service?.OnComponentChanged(_numericUpDown, null, _numericUpDown.StateCommon.Content.Font, value); _numericUpDown.StateCommon.Content.Font = value; } } } - - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _numericUpDown.StateCommon.Border.Rounding; - - set - { - if (_numericUpDown.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_numericUpDown, null, _numericUpDown.StateCommon.Border.Rounding, value); - - _numericUpDown.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -192,7 +174,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); actions.Add(new DesignerActionPropertyItem(nameof(InputControlStyle), @"Style", nameof(Appearance), @"NumericUpDown display style.")); actions.Add(new DesignerActionPropertyItem(nameof(Font), nameof(Font), nameof(Appearance), @"The numeric up down font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(@"Data")); actions.Add(new DesignerActionPropertyItem(nameof(Increment), nameof(Increment), @"Data", @"NumericUpDown increment value.")); actions.Add(new DesignerActionPropertyItem(nameof(Maximum), nameof(Maximum), @"Data", @"NumericUpDown maximum value.")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPanelActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPanelActionList.cs index 4624d4117..91fd8fd77 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPanelActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPanelActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonPanelActionList : DesignerActionList { #region Instance Fields - private readonly KryptonPanel? _panel; - private readonly IComponentChangeService _service; + private readonly KryptonPanel _panel; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonPanelActionList(KryptonPanelDesigner owner) : base(owner.Component) { // Remember the panel instance - _panel = owner.Component as KryptonPanel; + _panel = (owner.Component as KryptonPanel)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public PaletteBackStyle PanelBackStyle { if (_panel.PanelBackStyle != value) { - _service.OnComponentChanged(_panel, null, _panel.PanelBackStyle, value); + _service?.OnComponentChanged(_panel, null, _panel.PanelBackStyle, value); _panel.PanelBackStyle = value; } } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_panel.PaletteMode != value) { - _service.OnComponentChanged(_panel, null, _panel.PaletteMode, value); + _service?.OnComponentChanged(_panel, null, _panel.PaletteMode, value); _panel.PaletteMode = value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPropertyGridActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPropertyGridActionList.cs index ce930e416..d3913b404 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPropertyGridActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonPropertyGridActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,9 +16,8 @@ internal class KryptonPropertyGridActionList : DesignerActionList { #region Instance Fields - private readonly KryptonPropertyGrid? _propertyGrid; - - private readonly IComponentChangeService _service; + private readonly KryptonPropertyGrid _propertyGrid; + private readonly IComponentChangeService? _service; #endregion @@ -26,9 +25,9 @@ internal class KryptonPropertyGridActionList : DesignerActionList public KryptonPropertyGridActionList(KryptonPropertyGridDesigner owner) : base(owner.Component) { - _propertyGrid = owner.Component as KryptonPropertyGrid; + _propertyGrid = (owner.Component as KryptonPropertyGrid)!; - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -37,13 +36,13 @@ public KryptonPropertyGridActionList(KryptonPropertyGridDesigner owner) : base(o public object SelectedObject { - get => _propertyGrid.SelectedObject; + get => _propertyGrid.SelectedObject!; set { if (_propertyGrid.SelectedObject != value) { - _service.OnComponentChanged(_propertyGrid, null, _propertyGrid.SelectedObject, value); + _service?.OnComponentChanged(_propertyGrid, null, _propertyGrid.SelectedObject, value); _propertyGrid.SelectedObject = value; } @@ -58,7 +57,7 @@ public object[] SelectedObjects { if (_propertyGrid.SelectedObjects != value) { - _service.OnComponentChanged(_propertyGrid, null, _propertyGrid.SelectedObjects, value); + _service?.OnComponentChanged(_propertyGrid, null, _propertyGrid.SelectedObjects, value); _propertyGrid.SelectedObjects = value; } @@ -73,7 +72,7 @@ public PropertySort PropertySort { if (_propertyGrid.PropertySort != value) { - _service.OnComponentChanged(_propertyGrid, null, _propertyGrid.PropertySort, value); + _service?.OnComponentChanged(_propertyGrid, null, _propertyGrid.PropertySort, value); _propertyGrid.PropertySort = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRadioButtonActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRadioButtonActionList.cs index 829421f4e..63d1c8fc6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRadioButtonActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRadioButtonActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonRadioButtonActionList : DesignerActionList { #region Instance Fields - private readonly KryptonRadioButton? _radioButton; - private readonly IComponentChangeService _service; + private readonly KryptonRadioButton _radioButton; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonRadioButtonActionList(KryptonRadioButtonDesigner owner) : base(owner.Component) { // Remember the radio button instance - _radioButton = owner.Component as KryptonRadioButton; + _radioButton = (owner.Component as KryptonRadioButton)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public bool Checked { if (_radioButton.Checked != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.Checked, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.Checked, value); _radioButton.Checked = value; } } @@ -64,7 +64,7 @@ public bool AutoCheck { if (_radioButton.AutoCheck != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.AutoCheck, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.AutoCheck, value); _radioButton.AutoCheck = value; } } @@ -81,7 +81,7 @@ public LabelStyle LabelStyle { if (_radioButton.LabelStyle != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.LabelStyle, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.LabelStyle, value); _radioButton.LabelStyle = value; } } @@ -98,7 +98,7 @@ public VisualOrientation Orientation { if (_radioButton.Orientation != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.Orientation, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.Orientation, value); _radioButton.Orientation = value; } } @@ -115,7 +115,7 @@ public string Text { if (_radioButton.Values.Text != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.Values.Text, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.Values.Text, value); _radioButton.Values.Text = value; } } @@ -132,7 +132,7 @@ public string ExtraText { if (_radioButton.Values.ExtraText != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.Values.ExtraText, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.Values.ExtraText, value); _radioButton.Values.ExtraText = value; } } @@ -149,7 +149,7 @@ public Image? Image { if (_radioButton.Values.Image != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.Values.Image, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.Values.Image, value); _radioButton.Values.Image = value; } } @@ -166,7 +166,7 @@ public PaletteMode PaletteMode { if (_radioButton.PaletteMode != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.PaletteMode, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.PaletteMode, value); _radioButton.PaletteMode = value; } } @@ -176,13 +176,13 @@ public PaletteMode PaletteMode /// The font. public Font StateCommonShortTextFont { - get => _radioButton.StateCommon.ShortText.Font; + get => _radioButton.StateCommon.ShortText.Font!; set { if (_radioButton.StateCommon.ShortText.Font != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.StateCommon.ShortText.Font, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.StateCommon.ShortText.Font, value); _radioButton.StateCommon.ShortText.Font = value; } @@ -193,13 +193,13 @@ public Font StateCommonShortTextFont /// The font. public Font StateCommonLongTextFont { - get => _radioButton.StateCommon.LongText.Font; + get => _radioButton.StateCommon.LongText.Font!; set { if (_radioButton.StateCommon.LongText.Font != value) { - _service.OnComponentChanged(_radioButton, null, _radioButton.StateCommon.LongText.Font, value); + _service?.OnComponentChanged(_radioButton, null, _radioButton.StateCommon.LongText.Font, value); _radioButton.StateCommon.LongText.Font = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRichTextBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRichTextBoxActionList.cs index c14abd1ce..bbe5b7eb2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRichTextBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonRichTextBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonRichTextBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonRichTextBox? _richTextBox; - private readonly IComponentChangeService _service; + private readonly KryptonRichTextBox _richTextBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonRichTextBoxActionList(KryptonRichTextBoxDesigner owner) : base(owner.Component) { // Remember the text box instance - _richTextBox = owner.Component as KryptonRichTextBox; + _richTextBox = (owner.Component as KryptonRichTextBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_richTextBox.KryptonContextMenu != value) { - _service.OnComponentChanged(_richTextBox, null, _richTextBox.KryptonContextMenu, value); + _service?.OnComponentChanged(_richTextBox, null, _richTextBox.KryptonContextMenu, value); _richTextBox.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_richTextBox.PaletteMode != value) { - _service.OnComponentChanged(_richTextBox, null, _richTextBox.PaletteMode, value); + _service?.OnComponentChanged(_richTextBox, null, _richTextBox.PaletteMode, value); _richTextBox.PaletteMode = value; } } @@ -81,7 +81,7 @@ public InputControlStyle InputControlStyle { if (_richTextBox.InputControlStyle != value) { - _service.OnComponentChanged(_richTextBox, null, _richTextBox.InputControlStyle, value); + _service?.OnComponentChanged(_richTextBox, null, _richTextBox.InputControlStyle, value); _richTextBox.InputControlStyle = value; } } @@ -98,7 +98,7 @@ public bool Multiline { if (_richTextBox.Multiline != value) { - _service.OnComponentChanged(_richTextBox, null, _richTextBox.Multiline, value); + _service?.OnComponentChanged(_richTextBox, null, _richTextBox.Multiline, value); _richTextBox.Multiline = value; } } @@ -115,7 +115,7 @@ public bool WordWrap { if (_richTextBox.WordWrap != value) { - _service.OnComponentChanged(_richTextBox, null, _richTextBox.WordWrap, value); + _service?.OnComponentChanged(_richTextBox, null, _richTextBox.WordWrap, value); _richTextBox.WordWrap = value; } } @@ -125,36 +125,18 @@ public bool WordWrap /// The rich text box font. public Font Font { - get => _richTextBox.StateCommon.Content.Font; + get => _richTextBox.StateCommon.Content.Font!; set { if (_richTextBox.StateCommon.Content.Font != value) { - _service.OnComponentChanged(_richTextBox, null, _richTextBox.StateCommon.Content.Font, value); + _service?.OnComponentChanged(_richTextBox, null, _richTextBox.StateCommon.Content.Font, value); _richTextBox.StateCommon.Content.Font = value; } } } - - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _richTextBox.StateCommon.Border.Rounding; - - set - { - if (_richTextBox.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_richTextBox, null, _richTextBox.StateCommon.Border.Rounding, value); - - _richTextBox.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -175,7 +157,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); actions.Add(new DesignerActionPropertyItem(nameof(InputControlStyle), @"Style", nameof(Appearance), @"TextBox display style.")); actions.Add(new DesignerActionPropertyItem(nameof(Font), nameof(Font), nameof(Appearance), @"Modifies the font of the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(nameof(TextBox))); actions.Add(new DesignerActionPropertyItem(nameof(Multiline), nameof(Multiline), nameof(TextBox), @"Should text span multiple lines.")); actions.Add(new DesignerActionPropertyItem(nameof(WordWrap), nameof(WordWrap), nameof(TextBox), @"Should words be wrapped over multiple lines.")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonScrollBarActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonScrollBarActionList.cs index 00dd6b6be..b6b7b7c4e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonScrollBarActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonScrollBarActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,8 +16,8 @@ internal class KryptonScrollBarActionList : DesignerActionList { #region Instance Fields - private readonly KryptonScrollBar? _scrollBar; - private readonly IComponentChangeService _service; + private readonly KryptonScrollBar _scrollBar; + private readonly IComponentChangeService? _service; #endregion @@ -25,9 +25,9 @@ internal class KryptonScrollBarActionList : DesignerActionList public KryptonScrollBarActionList(KryptonScrollBarDesigner owner) : base(owner.Component) { - _scrollBar = owner.Component as KryptonScrollBar; + _scrollBar = (owner.Component as KryptonScrollBar)!; - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -42,7 +42,7 @@ public int Maximum { if (_scrollBar.Maximum != value) { - _service.OnComponentChanged(_scrollBar, null, _scrollBar.Maximum, value); + _service?.OnComponentChanged(_scrollBar, null, _scrollBar.Maximum, value); _scrollBar.Maximum = value; } @@ -57,7 +57,7 @@ public int Minimum { if (_scrollBar.Minimum != value) { - _service.OnComponentChanged(_scrollBar, null, _scrollBar.Minimum, value); + _service?.OnComponentChanged(_scrollBar, null, _scrollBar.Minimum, value); _scrollBar.Minimum = value; } @@ -72,7 +72,7 @@ public int Value { if (_scrollBar.Value != value) { - _service.OnComponentChanged(_scrollBar, null, _scrollBar.Value, value); + _service?.OnComponentChanged(_scrollBar, null, _scrollBar.Value, value); _scrollBar.Value = value; } @@ -89,7 +89,7 @@ public ScrollBarOrientation Orientation { if (_scrollBar.Orientation != value) { - _service.OnComponentChanged(_scrollBar, null, _scrollBar.Orientation, value); + _service?.OnComponentChanged(_scrollBar, null, _scrollBar.Orientation, value); _scrollBar.Orientation = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSeparatorActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSeparatorActionList.cs index 0facd6e4d..c8e7a6a45 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSeparatorActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSeparatorActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonSeparatorActionList : DesignerActionList { #region Instance Fields - private readonly KryptonSeparator? _separator; - private readonly IComponentChangeService _service; + private readonly KryptonSeparator _separator; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonSeparatorActionList(KryptonSeparatorDesigner owner) : base(owner.Component) { // Remember the link label instance - _separator = owner.Component as KryptonSeparator; + _separator = (owner.Component as KryptonSeparator)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public SeparatorStyle SeparatorStyle { if (_separator.SeparatorStyle != value) { - _service.OnComponentChanged(_separator, null, _separator.SeparatorStyle, value); + _service?.OnComponentChanged(_separator, null, _separator.SeparatorStyle, value); _separator.SeparatorStyle = value; } } @@ -64,7 +64,7 @@ public Orientation Orientation { if (_separator.Orientation != value) { - _service.OnComponentChanged(_separator, null, _separator.Orientation, value); + _service?.OnComponentChanged(_separator, null, _separator.Orientation, value); _separator.Orientation = value; } } @@ -81,7 +81,7 @@ public PaletteMode PaletteMode { if (_separator.PaletteMode != value) { - _service.OnComponentChanged(_separator, null, _separator.PaletteMode, value); + _service?.OnComponentChanged(_separator, null, _separator.PaletteMode, value); _separator.PaletteMode = value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSplitContainerActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSplitContainerActionList.cs index 2dcd6ff11..3c1bd6cdb 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSplitContainerActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonSplitContainerActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonSplitContainerActionList : DesignerActionList { #region Instance Fields - private readonly KryptonSplitContainer? _splitContainer; - private readonly IComponentChangeService _service; + private readonly KryptonSplitContainer _splitContainer; + private readonly IComponentChangeService? _service; private string _action; #endregion @@ -28,26 +28,26 @@ internal class KryptonSplitContainerActionList : DesignerActionList public KryptonSplitContainerActionList(KryptonSplitContainerDesigner owner) : base(owner.Component) { - _splitContainer = owner.Component as KryptonSplitContainer; + _splitContainer = (owner.Component as KryptonSplitContainer)!; // Assuming we were correctly passed an actual component... if (_splitContainer != null) { // Get access to the actual Orientation property - PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_splitContainer)[nameof(Orientation)]; + PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_splitContainer)[nameof(Orientation)]!; // If we succeeded in getting the property if (orientationProp != null) { // Decide on the next action to take given the current setting - _action = (Orientation) orientationProp.GetValue(_splitContainer) == Orientation.Vertical + _action = (Orientation) orientationProp.GetValue(_splitContainer)! == Orientation.Vertical ? "Horizontal splitter orientation" : "Vertical splitter orientation"; } } // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -63,7 +63,7 @@ public PaletteBackStyle ContainerBackStyle { if (_splitContainer.ContainerBackStyle != value) { - _service.OnComponentChanged(_splitContainer, null, _splitContainer.ContainerBackStyle, value); + _service?.OnComponentChanged(_splitContainer, null, _splitContainer.ContainerBackStyle, value); _splitContainer.ContainerBackStyle = value; } } @@ -80,7 +80,7 @@ public SeparatorStyle SeparatorStyle { if (_splitContainer.SeparatorStyle != value) { - _service.OnComponentChanged(_splitContainer, null, _splitContainer.SeparatorStyle, value); + _service?.OnComponentChanged(_splitContainer, null, _splitContainer.SeparatorStyle, value); _splitContainer.SeparatorStyle = value; } } @@ -97,7 +97,7 @@ public PaletteMode PaletteMode { if (_splitContainer.PaletteMode != value) { - _service.OnComponentChanged(_splitContainer, null, _splitContainer.PaletteMode, value); + _service?.OnComponentChanged(_splitContainer, null, _splitContainer.PaletteMode, value); _splitContainer.PaletteMode = value; } } @@ -132,7 +132,7 @@ public override DesignerActionItemCollection GetSortedActionItems() #endregion #region Implementation - private void OnOrientationClick(object sender, EventArgs e) + private void OnOrientationClick(object? sender, EventArgs e) { // Cast to the correct type @@ -146,7 +146,7 @@ private void OnOrientationClick(object sender, EventArgs e) _action = orientation == Orientation.Vertical ? "Horizontal splitter orientation" : "Vertical splitter orientation"; // Get access to the actual Orientation property - PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_splitContainer)[nameof(Orientation)]; + PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_splitContainer)[nameof(Orientation)]!; // If we succeeded in getting the property // Update the actual property with the new value diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTextBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTextBoxActionList.cs index 86e6d6af6..d035bf271 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTextBoxActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTextBoxActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonTextBoxActionList : DesignerActionList { #region Instance Fields - private readonly KryptonTextBox? _textBox; - private readonly IComponentChangeService _service; + private readonly KryptonTextBox _textBox; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonTextBoxActionList(KryptonTextBoxDesigner owner) : base(owner.Component) { // Remember the text box instance - _textBox = owner.Component as KryptonTextBox; + _textBox = (owner.Component as KryptonTextBox)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_textBox.KryptonContextMenu != value) { - _service.OnComponentChanged(_textBox, null, _textBox?.KryptonContextMenu, value); + _service?.OnComponentChanged(_textBox, null, _textBox.KryptonContextMenu, value); _textBox.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_textBox.PaletteMode != value) { - _service.OnComponentChanged(_textBox, null, _textBox?.PaletteMode, value); + _service?.OnComponentChanged(_textBox, null, _textBox.PaletteMode, value); _textBox.PaletteMode = value; } } @@ -81,7 +81,7 @@ public InputControlStyle InputControlStyle { if (_textBox.InputControlStyle != value) { - _service.OnComponentChanged(_textBox, null, _textBox.InputControlStyle, value); + _service?.OnComponentChanged(_textBox, null, _textBox.InputControlStyle, value); _textBox.InputControlStyle = value; } } @@ -98,7 +98,7 @@ public bool Multiline { if (_textBox.Multiline != value) { - _service.OnComponentChanged(_textBox, null, _textBox.Multiline, value); + _service?.OnComponentChanged(_textBox, null, _textBox.Multiline, value); _textBox.Multiline = value; } } @@ -115,7 +115,7 @@ public bool WordWrap { if (_textBox.WordWrap != value) { - _service.OnComponentChanged(_textBox, null, _textBox.WordWrap, value); + _service?.OnComponentChanged(_textBox, null, _textBox.WordWrap, value); _textBox.WordWrap = value; } } @@ -132,7 +132,7 @@ public bool UseSystemPasswordChar { if (_textBox.UseSystemPasswordChar != value) { - _service.OnComponentChanged(_textBox, null, _textBox.UseSystemPasswordChar, value); + _service?.OnComponentChanged(_textBox, null, _textBox.UseSystemPasswordChar, value); _textBox.UseSystemPasswordChar = value; } } @@ -148,30 +148,13 @@ public Font? Font { if (_textBox.StateCommon.Content.Font != value) { - _service.OnComponentChanged(_textBox, null, _textBox.StateCommon.Content.Font, value); + _service?.OnComponentChanged(_textBox, null, _textBox.StateCommon.Content.Font, value); _textBox.StateCommon.Content.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _textBox.StateCommon.Border.Rounding; - - set - { - if (_textBox.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_textBox, null, _textBox.StateCommon.Border.Rounding, value); - - _textBox.StateCommon.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -192,7 +175,6 @@ public override DesignerActionItemCollection GetSortedActionItems() actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); actions.Add(new DesignerActionPropertyItem(nameof(InputControlStyle), @"Style", nameof(Appearance), @"TextBox display style.")); actions.Add(new DesignerActionPropertyItem(nameof(Font), nameof(Font), nameof(Appearance), @"Modifies the font of the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); actions.Add(new DesignerActionHeaderItem(nameof(TextBox))); actions.Add(new DesignerActionPropertyItem(nameof(Multiline), nameof(Multiline), nameof(TextBox), @"Should text span multiple lines.")); actions.Add(new DesignerActionPropertyItem(nameof(WordWrap), nameof(WordWrap), nameof(TextBox), @"Should words be wrapped over multiple lines.")); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonThemeBrowserActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonThemeBrowserActionList.cs new file mode 100644 index 000000000..7db39928c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonThemeBrowserActionList.cs @@ -0,0 +1,67 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class KryptonThemeBrowserActionList : DesignerActionList + { + #region Instance Fields + + private readonly KryptonListBox _themeListBox; + private readonly IComponentChangeService? _service; + + #endregion + + #region Identity + + public KryptonThemeBrowserActionList(KryptonThemeBrowserDesigner owner) : base(owner.Component) + { + _themeListBox = (owner.Component as KryptonListBox)!; + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + } + + #endregion + + #region Public + + public int SelectedIndex + { + get => _themeListBox.SelectedIndex; + + set + { + if (_themeListBox.SelectedIndex != value) + { + _service?.OnComponentChanged(_themeListBox, null, _themeListBox.SelectedIndex, value); + + _themeListBox.SelectedIndex = value; + } + } + } + + #endregion + + #region Public Override + + public override DesignerActionItemCollection GetSortedActionItems() + { + var actionItems = new DesignerActionItemCollection(); + + if (_themeListBox != null) + { + actionItems.Add(new DesignerActionHeaderItem(@"Values")); + actionItems.Add(new DesignerActionPropertyItem(nameof(SelectedIndex), @"Selected Index", @"Values", @"The selected index of the list box.")); + } + + return actionItems; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonThemeComboBoxActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonThemeComboBoxActionList.cs new file mode 100644 index 000000000..4219ebaeb --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonThemeComboBoxActionList.cs @@ -0,0 +1,27 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class KryptonThemeComboBoxActionList : DesignerActionList + { + #region Instance Fields + + private readonly KryptonThemeComboBox _themeComboBox; + private readonly IComponentChangeService? _service; + + #endregion + + public KryptonThemeComboBoxActionList(KryptonThemeComboBoxDesigner owner) : base(owner.Component) + { + _themeComboBox = (owner.Component as KryptonThemeComboBox)!; + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTrackBarActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTrackBarActionList.cs index 771aa9720..17de766d2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTrackBarActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTrackBarActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonTrackBarActionList : DesignerActionList { #region Instance Fields - private readonly KryptonTrackBar? _trackBar; - private readonly IComponentChangeService _service; + private readonly KryptonTrackBar _trackBar; + private readonly IComponentChangeService? _service; private string _action; #endregion @@ -28,26 +28,26 @@ internal class KryptonTrackBarActionList : DesignerActionList public KryptonTrackBarActionList(KryptonTrackBarDesigner owner) : base(owner.Component) { - _trackBar = owner.Component as KryptonTrackBar; + _trackBar = (owner.Component as KryptonTrackBar)!; // Assuming we were correctly passed an actual component... if (_trackBar != null) { // Get access to the actual Orientation property - PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_trackBar)[nameof(Orientation)]; + PropertyDescriptor? orientationProp = TypeDescriptor.GetProperties(_trackBar)[nameof(Orientation)]; // If we succeeded in getting the property if (orientationProp != null) { // Decide on the next action to take given the current setting - _action = (Orientation) orientationProp.GetValue(_trackBar) == Orientation.Vertical + _action = (Orientation) orientationProp.GetValue(_trackBar)! == Orientation.Vertical ? "Horizontal orientation" : "Vertical orientation"; } } // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -63,7 +63,7 @@ public PaletteMode PaletteMode { if (_trackBar.PaletteMode != value) { - _service.OnComponentChanged(_trackBar, null, _trackBar.PaletteMode, value); + _service?.OnComponentChanged(_trackBar, null, _trackBar.PaletteMode, value); _trackBar.PaletteMode = value; } } @@ -80,7 +80,7 @@ public TickStyle TickStyle { if (_trackBar.TickStyle != value) { - _service.OnComponentChanged(_trackBar, null, _trackBar.TickStyle, value); + _service?.OnComponentChanged(_trackBar, null, _trackBar.TickStyle, value); _trackBar.TickStyle = value; } } @@ -97,7 +97,7 @@ public PaletteTrackBarSize TrackBarSize { if (_trackBar.TrackBarSize != value) { - _service.OnComponentChanged(_trackBar, null, _trackBar.TrackBarSize, value); + _service?.OnComponentChanged(_trackBar, null, _trackBar.TrackBarSize, value); _trackBar.TrackBarSize = value; } } @@ -114,7 +114,7 @@ public int Minimum { if (_trackBar.Minimum != value) { - _service.OnComponentChanged(_trackBar, null, _trackBar.Minimum, value); + _service?.OnComponentChanged(_trackBar, null, _trackBar.Minimum, value); _trackBar.Minimum = value; } } @@ -131,7 +131,7 @@ public int Maximum { if (_trackBar.Maximum != value) { - _service.OnComponentChanged(_trackBar, null, _trackBar.Maximum, value); + _service?.OnComponentChanged(_trackBar, null, _trackBar.Maximum, value); _trackBar.Maximum = value; } } @@ -148,7 +148,7 @@ public int SmallChange { if (_trackBar.SmallChange != value) { - _service.OnComponentChanged(_trackBar, null, _trackBar.SmallChange, value); + _service?.OnComponentChanged(_trackBar, null, _trackBar.SmallChange, value); _trackBar.SmallChange = value; } } @@ -165,7 +165,7 @@ public int LargeChange { if (_trackBar.LargeChange != value) { - _service.OnComponentChanged(_trackBar, null, _trackBar.LargeChange, value); + _service?.OnComponentChanged(_trackBar, null, _trackBar.LargeChange, value); _trackBar.LargeChange = value; } } @@ -204,7 +204,7 @@ public override DesignerActionItemCollection GetSortedActionItems() #endregion #region Implementation - private void OnOrientationClick(object sender, EventArgs e) + private void OnOrientationClick(object? sender, EventArgs e) { // Cast to the correct type @@ -218,7 +218,7 @@ private void OnOrientationClick(object sender, EventArgs e) _action = orientation == Orientation.Vertical ? "Horizontal orientation" : "Vertical orientation"; // Get access to the actual Orientation property - PropertyDescriptor orientationProp = TypeDescriptor.GetProperties(_trackBar)[nameof(Orientation)]; + PropertyDescriptor? orientationProp = TypeDescriptor.GetProperties(_trackBar)[nameof(Orientation)]; // If we succeeded in getting the property // Update the actual property with the new value diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTreeViewActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTreeViewActionList.cs index af1cc2c16..110135242 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTreeViewActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonTreeViewActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonTreeViewActionList : DesignerActionList { #region Instance Fields - private readonly KryptonTreeView? _treeView; - private readonly IComponentChangeService _service; + private readonly KryptonTreeView _treeView; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonTreeViewActionList(KryptonTreeViewDesigner owner) : base(owner.Component) { // Remember the tree view instance - _treeView = owner.Component as KryptonTreeView; + _treeView = (owner.Component as KryptonTreeView)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -46,7 +46,7 @@ public KryptonContextMenu? KryptonContextMenu { if (_treeView.KryptonContextMenu != value) { - _service.OnComponentChanged(_treeView, null, _treeView.KryptonContextMenu, value); + _service?.OnComponentChanged(_treeView, null, _treeView.KryptonContextMenu, value); _treeView.KryptonContextMenu = value; } @@ -64,7 +64,7 @@ public ButtonStyle ItemStyle { if (_treeView.ItemStyle != value) { - _service.OnComponentChanged(_treeView, null, _treeView.ItemStyle, value); + _service?.OnComponentChanged(_treeView, null, _treeView.ItemStyle, value); _treeView.ItemStyle = value; } } @@ -81,7 +81,7 @@ public PaletteBackStyle BackStyle { if (_treeView.BackStyle != value) { - _service.OnComponentChanged(_treeView, null, _treeView.BackStyle, value); + _service?.OnComponentChanged(_treeView, null, _treeView.BackStyle, value); _treeView.BackStyle = value; } } @@ -98,7 +98,7 @@ public PaletteBorderStyle BorderStyle { if (_treeView.BorderStyle != value) { - _service.OnComponentChanged(_treeView, null, _treeView.BorderStyle, value); + _service?.OnComponentChanged(_treeView, null, _treeView.BorderStyle, value); _treeView.BorderStyle = value; } } @@ -115,7 +115,7 @@ public bool Sorted { if (_treeView.Sorted != value) { - _service.OnComponentChanged(_treeView, null, _treeView.Sorted, value); + _service?.OnComponentChanged(_treeView, null, _treeView.Sorted, value); _treeView.Sorted = value; } } @@ -132,7 +132,7 @@ public PaletteMode PaletteMode { if (_treeView.PaletteMode != value) { - _service.OnComponentChanged(_treeView, null, _treeView.PaletteMode, value); + _service?.OnComponentChanged(_treeView, null, _treeView.PaletteMode, value); _treeView.PaletteMode = value; } } @@ -142,13 +142,13 @@ public PaletteMode PaletteMode /// The font. public Font StateCommonShortTextFont { - get => _treeView.StateCommon.Node.Content.ShortText.Font; + get => _treeView.StateCommon.Node.Content.ShortText.Font!; set { if (_treeView.StateCommon.Node.Content.ShortText.Font != value) { - _service.OnComponentChanged(_treeView, null, _treeView.StateCommon.Node.Content.ShortText.Font, value); + _service?.OnComponentChanged(_treeView, null, _treeView.StateCommon.Node.Content.ShortText.Font, value); _treeView.StateCommon.Node.Content.ShortText.Font = value; } @@ -159,54 +159,19 @@ public Font StateCommonShortTextFont /// The font. public Font StateCommonLongTextFont { - get => _treeView.StateCommon.Node.Content.LongText.Font; + get => _treeView.StateCommon.Node.Content.LongText.Font!; set { if (_treeView.StateCommon.Node.Content.LongText.Font != value) { - _service.OnComponentChanged(_treeView, null, _treeView.StateCommon.Node.Content.LongText.Font, value); + _service?.OnComponentChanged(_treeView, null, _treeView.StateCommon.Node.Content.LongText.Font, value); _treeView.StateCommon.Node.Content.LongText.Font = value; } } } - /// Gets or sets the corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] - public float StateCommonCornerRoundingRadius - { - get => _treeView.StateCommon.Border.Rounding; - - set - { - if (_treeView.StateCommon.Border.Rounding != value) - { - _service.OnComponentChanged(_treeView, null, _treeView.StateCommon.Border.Rounding, value); - - _treeView.StateCommon.Border.Rounding = value; - } - } - } - - /// Gets or sets the node corner radius. - /// The corner radius. - [DefaultValue(GlobalStaticValues.SECONDARY_CORNER_ROUNDING_VALUE)] - public float NodeStateCommonCornerRoundingRadius - { - get => _treeView.StateCommon.Node.Border.Rounding; - - set - { - if (_treeView.StateCommon.Node.Border.Rounding != value) - { - _service.OnComponentChanged(_treeView, null, _treeView.StateCommon.Node.Border.Rounding, value); - - _treeView.StateCommon.Node.Border.Rounding = value; - } - } - } #endregion #region Public Override @@ -217,26 +182,23 @@ public float NodeStateCommonCornerRoundingRadius public override DesignerActionItemCollection GetSortedActionItems() { // Create a new collection for holding the single item we want to create - var actions = new DesignerActionItemCollection(); - - // This can be null when deleting a control instance at design time - if (_treeView != null) + var actions = new DesignerActionItemCollection { + // This can be null when deleting a control instance at design time // Add the list of tree view specific actions - actions.Add(new DesignerActionHeaderItem(nameof(Appearance))); - actions.Add(new DesignerActionPropertyItem(nameof(BackStyle), @"Back Style", nameof(Appearance), @"Style used to draw background.")); - actions.Add(new DesignerActionPropertyItem(nameof(BorderStyle), @"Border Style", nameof(Appearance), @"Style used to draw the border.")); - actions.Add(new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(ItemStyle), @"Item Style", nameof(Appearance), @"How to display tree items.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font.")); - actions.Add(new DesignerActionPropertyItem(nameof(StateCommonCornerRoundingRadius), @"State Common Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the control.")); - actions.Add(new DesignerActionPropertyItem(nameof(NodeStateCommonCornerRoundingRadius), @"Node Corner Rounding Radius", nameof(Appearance), @"The corner rounding radius of the node.")); - actions.Add(new DesignerActionHeaderItem(nameof(Behavior))); - actions.Add(new DesignerActionPropertyItem(nameof(Sorted), nameof(Sorted), nameof(Behavior), @"Should items be sorted according to string.")); - actions.Add(new DesignerActionHeaderItem(@"Visuals")); - actions.Add(new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing")); - } + new DesignerActionHeaderItem(nameof(Appearance)), + new DesignerActionPropertyItem(nameof(BackStyle), @"Back Style", nameof(Appearance), + @"Style used to draw background."), + new DesignerActionPropertyItem(nameof(BorderStyle), @"Border Style", nameof(Appearance), @"Style used to draw the border."), + new DesignerActionPropertyItem(nameof(KryptonContextMenu), @"Krypton Context Menu", nameof(Appearance), @"The Krypton Context Menu for the control."), + new DesignerActionPropertyItem(nameof(ItemStyle), @"Item Style", nameof(Appearance), @"How to display tree items."), + new DesignerActionPropertyItem(nameof(StateCommonShortTextFont), @"State Common Short Text Font", nameof(Appearance), @"The State Common Short Text Font."), + new DesignerActionPropertyItem(nameof(StateCommonLongTextFont), @"State Common State Common Long Text Font", nameof(Appearance), @"The State Common State Common Long Text Font."), + new DesignerActionHeaderItem(nameof(Behavior)), + new DesignerActionPropertyItem(nameof(Sorted), nameof(Sorted), nameof(Behavior), @"Should items be sorted according to string."), + new DesignerActionHeaderItem(@"Visuals"), + new DesignerActionPropertyItem(nameof(PaletteMode), @"Palette", @"Visuals", @"Palette applied to drawing") + }; return actions; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonWrapLabelActionList.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonWrapLabelActionList.cs index 7b11f95dd..0f631eaa9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonWrapLabelActionList.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Action Lists/KryptonWrapLabelActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonWrapLabelActionList : DesignerActionList { #region Instance Fields - private readonly KryptonWrapLabel? _wrapLabel; - private readonly IComponentChangeService _service; + private readonly KryptonWrapLabel _wrapLabel; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonWrapLabelActionList(KryptonWrapLabelDesigner owner) : base(owner.Component) { // Remember the label instance - _wrapLabel = owner.Component as KryptonWrapLabel; + _wrapLabel = (owner.Component as KryptonWrapLabel)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public LabelStyle LabelStyle { if (_wrapLabel.LabelStyle != value) { - _service.OnComponentChanged(_wrapLabel, null, _wrapLabel.LabelStyle, value); + _service?.OnComponentChanged(_wrapLabel, null, _wrapLabel.LabelStyle, value); _wrapLabel.LabelStyle = value; } } @@ -64,7 +64,7 @@ public PaletteMode PaletteMode { if (_wrapLabel.PaletteMode != value) { - _service.OnComponentChanged(_wrapLabel, null, _wrapLabel.PaletteMode, value); + _service?.OnComponentChanged(_wrapLabel, null, _wrapLabel.PaletteMode, value); _wrapLabel.PaletteMode = value; } } @@ -74,13 +74,13 @@ public PaletteMode PaletteMode /// The font. public Font Font { - get => _wrapLabel.StateCommon.Font; + get => _wrapLabel.StateCommon.Font!; set { if (_wrapLabel.StateCommon.Font != value) { - _service.OnComponentChanged(_wrapLabel, null, _wrapLabel.StateCommon.Font, value); + _service?.OnComponentChanged(_wrapLabel, null, _wrapLabel.StateCommon.Font, value); _wrapLabel.StateCommon.Font = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBorderEdgeDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBorderEdgeDesigner.cs index 0b588cd79..d0a986583 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBorderEdgeDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBorderEdgeDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbDesigner.cs index 112f14645..208bd8b84 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonBreadCrumbDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonBreadCrumb? _breadCrumb; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -45,17 +45,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_breadCrumb != null) { // Hook into bread crumb events - _breadCrumb.GetViewManager().MouseUpProcessed += OnBreadCrumbMouseUp; - _breadCrumb.GetViewManager().DoubleClickProcessed += OnBreadCrumbDoubleClick; + _breadCrumb.GetViewManager()!.MouseUpProcessed += OnBreadCrumbMouseUp; + _breadCrumb.GetViewManager()!.DoubleClickProcessed += OnBreadCrumbDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -106,11 +106,11 @@ protected override void Dispose(bool disposing) // Unhook from events if (_breadCrumb != null) { - _breadCrumb.GetViewManager().MouseUpProcessed -= OnBreadCrumbMouseUp; - _breadCrumb.GetViewManager().DoubleClickProcessed -= OnBreadCrumbDoubleClick; + _breadCrumb.GetViewManager()!.MouseUpProcessed -= OnBreadCrumbMouseUp; + _breadCrumb.GetViewManager()!.DoubleClickProcessed -= OnBreadCrumbDoubleClick; } - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; // Must let base class do standard stuff base.Dispose(disposing); @@ -158,12 +158,12 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnBreadCrumbMouseUp(object sender, MouseEventArgs e) + private void OnBreadCrumbMouseUp(object? sender, MouseEventArgs e) { if ((_breadCrumb != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _breadCrumb.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _breadCrumb.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { @@ -175,7 +175,7 @@ private void OnBreadCrumbMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -183,25 +183,25 @@ private void OnBreadCrumbMouseUp(object sender, MouseEventArgs e) private void OnBreadCrumbDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _breadCrumb?.DesignerComponentFromPoint(pt); + var component = _breadCrumb?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if ((_breadCrumb != null) && (e.Component == _breadCrumb)) + if ((_breadCrumb != null) && (Equals(e.Component, _breadCrumb))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances for (var i = _breadCrumb.ButtonSpecs.Count - 1; i >= 0; i--) @@ -210,7 +210,7 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) ButtonSpec spec = _breadCrumb.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_breadCrumb, null); + _changeService?.OnComponentChanging(_breadCrumb, null); // Perform actual removal of button spec from bread crumb _breadCrumb.ButtonSpecs.Remove(spec); @@ -219,7 +219,7 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_breadCrumb, null, null, null); + _changeService?.OnComponentChanged(_breadCrumb, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbItemDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbItemDesigner.cs index 6e05251c2..c159a9561 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbItemDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonBreadCrumbItemDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonBreadCrumbItemDesigner : ComponentDesigner { #region Instance Fields private KryptonBreadCrumbItem? _crumbItem; - private IComponentChangeService _changeService; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,10 +35,10 @@ public override void Initialize([DisallowNull] IComponent component) _crumbItem = component as KryptonBreadCrumbItem; // Get access to the services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,7 +72,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; } } finally @@ -84,20 +84,20 @@ protected override void Dispose(bool disposing) #endregion #region Implementation - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our item collection is being removed - if ((_crumbItem != null) && (e.Component == _crumbItem)) + if ((_crumbItem != null) && (Equals(e.Component, _crumbItem))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all items from the child item collection for (var j = _crumbItem.Items.Count - 1; j >= 0; j--) { var item = _crumbItem.Items[j] as Component; _crumbItem.Items.Remove(item); - host.DestroyComponent(item); + host?.DestroyComponent(item); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonButtonDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonButtonDesigner.cs index 9aa303912..8cb6a71bc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckBoxDesigner.cs index 94aafba50..f46ab4d3e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckButtonDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckButtonDesigner.cs index e3dd8c099..a62cddb30 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckSetDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckSetDesigner.cs index 26fc81a62..e7e29db47 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckSetDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckSetDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckedListBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckedListBoxDesigner.cs index 1508093fb..6f9fd5008 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckedListBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCheckedListBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonColorButtonDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonColorButtonDesigner.cs index d5dd3f7ca..7fb29de17 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonColorButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonColorButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxColumnDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxColumnDesigner.cs index a86cf91f8..d1fe58b07 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxColumnDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxColumnDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonComboBoxColumnDesigner : ComponentDesigner { #region Instance Fields - private KryptonDataGridViewComboBoxColumn _comboBox; - private IComponentChangeService _changeService; + private KryptonDataGridViewComboBoxColumn? _comboBox; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,7 +35,7 @@ public override void Initialize([DisallowNull] IComponent component) _comboBox = component as KryptonDataGridViewComboBoxColumn; // Get access to the design services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxDesigner.cs index 6724c9f1a..5ef827a9a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonComboBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonComboBoxDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonComboBox? _comboBox; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -45,17 +45,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_comboBox != null) { // Hook into combobox events - _comboBox.GetViewManager().MouseUpProcessed += OnComboBoxMouseUp; - _comboBox.GetViewManager().DoubleClickProcessed += OnComboBoxDoubleClick; + _comboBox.GetViewManager()!.MouseUpProcessed += OnComboBoxMouseUp; + _comboBox.GetViewManager()!.DoubleClickProcessed += OnComboBoxDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,7 +72,7 @@ public override SelectionRules SelectionRules get { // Start with all edges being sizeable - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; rules &= ~(SelectionRules.TopSizeable | SelectionRules.BottomSizeable); return rules; } @@ -138,12 +138,12 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnComboBoxMouseUp(object sender, MouseEventArgs e) + private void OnComboBoxMouseUp(object? sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { // Get any component associated with the current mouse position - Component? component = _comboBox?.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _comboBox?.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { @@ -155,7 +155,7 @@ private void OnComboBoxMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -163,25 +163,25 @@ private void OnComboBoxMouseUp(object sender, MouseEventArgs e) private void OnComboBoxDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _comboBox?.DesignerComponentFromPoint(pt); + var component = _comboBox?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if ((_comboBox != null) && (e.Component == _comboBox)) + if ((_comboBox != null) && (Equals(e.Component, _comboBox))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances for (var i = _comboBox.ButtonSpecs.Count - 1; i >= 0; i--) @@ -190,16 +190,16 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) ButtonSpec spec = _comboBox.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_comboBox, null); + _changeService?.OnComponentChanging(_comboBox, null); // Perform actual removal of button spec from combobox _comboBox.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_comboBox, null, null, null); + _changeService?.OnComponentChanged(_comboBox, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCommandDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCommandDesigner.cs index 5ce8d2e22..8421b5137 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCommandDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCommandDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCommandLinkButtonDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCommandLinkButtonDesigner.cs new file mode 100644 index 000000000..04c9b6839 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCommandLinkButtonDesigner.cs @@ -0,0 +1,58 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class KryptonCommandLinkButtonDesigner : ControlDesigner + { + #region Identity + /// + /// Initialize a new instance of the KryptonButtonDesigner class. + /// + public KryptonCommandLinkButtonDesigner() + { + // The resizing handles around the control need to change depending on the + // value of the AutoSize and AutoSizeMode properties. When in AutoSize you + // do not get the resizing handles, otherwise you do. + AutoResizeHandles = true; + } + #endregion + + #region Public Overrides + /// + /// Gets the design-time action lists supported by the component associated with the designer. + /// + public override DesignerActionListCollection ActionLists + { + get + { + // Create a collection of action lists + + DesignerActionListCollection actionList = new DesignerActionListCollection(); + + actionList.Add(new KryptonCommandLinkButtonActionList(this)); + + return actionList; + +/*#if NET9_0_OR_GREATER + DesignerActionListCollection actionList = new DesignerActionListCollection(); + + actionList.Add(new KryptonCommandLinkButtonActionList(this)); + + return actionList; +#else + DesignerActionListCollection actionLists = [new KryptonCommandLinkButtonActionList(this)]; + + return actionLists; +#endif*/ + } + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuDesigner.cs index 656c1e41d..15c66b6cf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonContextMenuDesigner : ComponentDesigner { #region Instance Fields private KryptonContextMenu? _contextMenu; - private IComponentChangeService _changeService; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,10 +35,10 @@ public override void Initialize([DisallowNull] IComponent component) _contextMenu = component as KryptonContextMenu; // Get access to the services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -67,11 +67,10 @@ public override DesignerActionListCollection ActionLists get { // Create a collection of action lists - var actionLists = new DesignerActionListCollection - { - // Add the palette specific list - new KryptonContextMenuActionList(this) - }; + var actionLists = new DesignerActionListCollection(); + actionLists.AddRange(base.ActionLists); + // Add the palette specific list + actionLists.Add(new KryptonContextMenuActionList(this)); return actionLists; } @@ -90,7 +89,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; } } finally @@ -102,20 +101,20 @@ protected override void Dispose(bool disposing) #endregion #region Implementation - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our context menu is being removed - if ((_contextMenu != null) && (e.Component == _contextMenu)) + if ((_contextMenu != null) && (Equals(e.Component, _contextMenu))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all items from the context menu for (var j = _contextMenu.Items.Count - 1; j >= 0; j--) { var item = _contextMenu.Items[j] as Component; _contextMenu.Items.Remove(item); - host.DestroyComponent(item); + host?.DestroyComponent(item); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemDesigner.cs index 32da0b30f..7b3ccd802 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonContextMenuItemDesigner : ComponentDesigner { #region Instance Fields private KryptonContextMenuItem? _contextMenuItem; - private IComponentChangeService _changeService; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,10 +35,10 @@ public override void Initialize([DisallowNull] IComponent component) _contextMenuItem = component as KryptonContextMenuItem; // Get access to the services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,7 +72,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; } } finally @@ -84,20 +84,20 @@ protected override void Dispose(bool disposing) #endregion #region Implementation - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our item collection is being removed - if ((_contextMenuItem != null) && (e.Component == _contextMenuItem)) + if ((_contextMenuItem != null) && (Equals(e.Component, _contextMenuItem))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all items from the child item collection for (var j = _contextMenuItem.Items.Count - 1; j >= 0; j--) { var item = _contextMenuItem.Items[j] as Component; _contextMenuItem.Items.Remove(item); - host.DestroyComponent(item); + host?.DestroyComponent(item); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemsDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemsDesigner.cs index 8c5d8ec16..47eb6d1e6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemsDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonContextMenuItemsDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonContextMenuItemsDesigner : ComponentDesigner { #region Instance Fields private KryptonContextMenuItems? _contextMenuItems; - private IComponentChangeService _changeService; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,10 +35,10 @@ public override void Initialize([DisallowNull] IComponent component) _contextMenuItems = component as KryptonContextMenuItems; // Get access to the services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,7 +72,7 @@ protected override void Dispose(bool disposing) if (disposing) { // Unhook from events - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; } } finally @@ -84,20 +84,20 @@ protected override void Dispose(bool disposing) #endregion #region Implementation - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our item collection is being removed - if ((_contextMenuItems != null) && (e.Component == _contextMenuItems)) + if ((_contextMenuItems != null) && (Equals(e.Component, _contextMenuItems))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all items from the item collection for (var j = _contextMenuItems.Items.Count - 1; j >= 0; j--) { var item = _contextMenuItems.Items[j] as Component; _contextMenuItems.Items.Remove(item); - host.DestroyComponent(item); + host?.DestroyComponent(item); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCustomPaletteBaseDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCustomPaletteBaseDesigner.cs new file mode 100644 index 000000000..b0f28d77a --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonCustomPaletteBaseDesigner.cs @@ -0,0 +1,163 @@ +#region BSD License +/* + * + * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) + * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class KryptonCustomPaletteBaseDesigner : ComponentDesigner + { + #region Instance Fields + + private DesignerVerbCollection _verbCollection; + private DesignerVerb _resetVerb; + private DesignerVerb _populateVerb; + private DesignerVerb _importVerb; + private DesignerVerb _exportVerb; + private DesignerVerb _upgradeVerb; + + private KryptonCustomPaletteBase? _palette; + + private IComponentChangeService? _service; + + #endregion + + #region Public Overrides + + public override void Initialize([DisallowNull] IComponent component) + { + base.Initialize(component); + + Debug.Assert(component != null); + + _palette = component as KryptonCustomPaletteBase; + + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + } + + /// + /// Gets the design-time action lists supported by the component associated with the designer. + /// + public override DesignerActionListCollection ActionLists + { + get + { + // Create a collection of action lists + var actionLists = new DesignerActionListCollection + { + // Add the palette specific list + new KryptonCustomPaletteBaseActionList(this) + }; + + return actionLists; + } + } + + public override DesignerVerbCollection Verbs + { + get + { + if (_verbCollection == null) + { + _verbCollection = []; + + _resetVerb = new DesignerVerb(@"Reset to Defaults", OnReset); + + _populateVerb = new DesignerVerb(@"Populate from Base", OnPopulate); + + _importVerb = new DesignerVerb(@"Import from XML File...", OnImport); + + _exportVerb = new DesignerVerb(@"Export to XML File...", OnExport); + + _upgradeVerb = new DesignerVerb(@"Upgrade Palette", OnUpgrade); + + _verbCollection.AddRange(new DesignerVerb[] { _resetVerb, _populateVerb, _importVerb, _exportVerb, _upgradeVerb }); + } + + return _verbCollection; + } + } + + #endregion + + #region Implementation + + private void OnUpgrade(object? sender, EventArgs e) + { + try + { + using var ofd = new OpenFileDialog(); /*KryptonOpenFileDialog*/ + ofd.CheckFileExists = true; + ofd.CheckPathExists = true; + ofd.DefaultExt = @"xml"; + ofd.Filter = @"Palette files (*.xml)|*.xml|All files (*.*)|(*.*)"; + ofd.Title = @"Load Custom Palette"; + + var paletteFileName = (ofd.ShowDialog() == DialogResult.OK) + ? ofd.FileName + : string.Empty; + + if (string.IsNullOrWhiteSpace(paletteFileName)) + { + return; + } + + _palette?.ImportWithUpgrade(File.OpenRead(paletteFileName)); + } + catch (Exception exc) + { + ExceptionHandler.CaptureException(exc, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + } + + private void OnExport(object? sender, EventArgs e) => _palette?.ActionListExport(); + + private void OnImport(object? sender, EventArgs e) + { + if (_palette != null) + { + _palette.ActionListImport(); + _service?.OnComponentChanged(_palette, null, null, null); + } + } + + private void OnPopulate(object? sender, EventArgs e) + { + if (_palette != null) + { + if (KryptonMessageBox.Show(@"Are you sure you want to populate from the base?", + @"Populate From Base", + KryptonMessageBoxButtons.YesNo, + KryptonMessageBoxIcon.Warning) == DialogResult.Yes) + { + _palette.PopulateFromBase(false); + _service?.OnComponentChanged(_palette, null, null, null); + } + } + } + + private void OnReset(object? sender, EventArgs e) + { + if (_palette != null) + { + if (KryptonMessageBox.Show(@"Are you sure you want to reset the palette?", + @"Palette Reset", + KryptonMessageBoxButtons.YesNo, + KryptonMessageBoxIcon.Warning) == DialogResult.Yes) + { + _palette.ResetToDefaults(false); + _service?.OnComponentChanged(_palette, null, null, null); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDataGridViewDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDataGridViewDesigner.cs index 61dc37922..463cf10a0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDataGridViewDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDataGridViewDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerColumnDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerColumnDesigner.cs index 667cee8bb..b0768afcd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerColumnDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerColumnDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonDateTimePickerColumnDesigner : ComponentDesigner { #region Instance Fields - private KryptonDataGridViewDateTimePickerColumn _dateTimePicker; - private IComponentChangeService _changeService; + private KryptonDataGridViewDateTimePickerColumn? _dateTimePicker; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,7 +35,7 @@ public override void Initialize([DisallowNull] IComponent component) _dateTimePicker = component as KryptonDataGridViewDateTimePickerColumn; // Get access to the design services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -44,10 +44,10 @@ public override void Initialize([DisallowNull] IComponent component) private void OnComponentRemoving(object sender, ComponentEventArgs e) { // If our control is being removed - if ((_dateTimePicker != null) && (e.Component == _dateTimePicker)) + if ((_dateTimePicker != null) && (Equals(e.Component, _dateTimePicker))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerDesigner.cs index 5d9e13747..c32566d63 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDateTimePickerDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonDateTimePickerDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonDateTimePicker? _dateTimePicker; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -45,17 +45,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_dateTimePicker != null) { // Hook into date time picker events - _dateTimePicker.GetViewManager().MouseUpProcessed += OnDateTimePickerMouseUp; - _dateTimePicker.GetViewManager().DoubleClickProcessed += OnDateTimePickerDoubleClick; + _dateTimePicker.GetViewManager()!.MouseUpProcessed += OnDateTimePickerMouseUp; + _dateTimePicker.GetViewManager()!.DoubleClickProcessed += OnDateTimePickerDoubleClick; } // Acquire service interfaces - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -89,7 +89,7 @@ public override SelectionRules SelectionRules { get { - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; return rules & ~(SelectionRules.TopSizeable | SelectionRules.BottomSizeable); } } @@ -105,11 +105,11 @@ protected override void Dispose(bool disposing) if (_dateTimePicker != null) { // Unhook from events - _dateTimePicker.GetViewManager().MouseUpProcessed -= OnDateTimePickerMouseUp; - _dateTimePicker.GetViewManager().DoubleClickProcessed -= OnDateTimePickerDoubleClick; + _dateTimePicker.GetViewManager()!.MouseUpProcessed -= OnDateTimePickerMouseUp; + _dateTimePicker.GetViewManager()!.DoubleClickProcessed -= OnDateTimePickerDoubleClick; } - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; // Must let base class do standard stuff base.Dispose(disposing); @@ -157,12 +157,12 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnDateTimePickerMouseUp(object sender, MouseEventArgs e) + private void OnDateTimePickerMouseUp(object? sender, MouseEventArgs e) { if ((_dateTimePicker != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _dateTimePicker.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _dateTimePicker.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { @@ -174,7 +174,7 @@ private void OnDateTimePickerMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -182,43 +182,43 @@ private void OnDateTimePickerMouseUp(object sender, MouseEventArgs e) private void OnDateTimePickerDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _dateTimePicker.DesignerComponentFromPoint(pt); + var component = _dateTimePicker?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if (e.Component == _dateTimePicker) + if (Equals(e.Component, _dateTimePicker)) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances - for (var i = _dateTimePicker.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = _dateTimePicker!.ButtonSpecs.Count - 1; i >= 0; i--) { // Get access to the indexed button spec ButtonSpec spec = _dateTimePicker.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_dateTimePicker, null); + _changeService?.OnComponentChanging(_dateTimePicker, null); // Perform actual removal of button spec from calendar _dateTimePicker.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_dateTimePicker, null, null, null); + _changeService?.OnComponentChanged(_dateTimePicker, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownColumnDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownColumnDesigner.cs index e45c208fb..04708339c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownColumnDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownColumnDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonDomainUpDownColumnDesigner : ComponentDesigner { #region Instance Fields - private KryptonDataGridViewDomainUpDownColumn _domainUpDown; - private IComponentChangeService _changeService; + private KryptonDataGridViewDomainUpDownColumn? _domainUpDown; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,7 +35,7 @@ public override void Initialize([DisallowNull] IComponent component) _domainUpDown = component as KryptonDataGridViewDomainUpDownColumn; // Get access to the design services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownDesigner.cs index e6f447e86..562ce68ff 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDomainUpDownDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonDomainUpDownDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonDomainUpDown? _domainUpDown; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -44,18 +44,18 @@ public override void Initialize([DisallowNull] IComponent component) if (_domainUpDown != null) { - // Hook into numeric updown events - _domainUpDown.GetViewManager().MouseUpProcessed += OnDomainUpDownMouseUp; - _domainUpDown.GetViewManager().DoubleClickProcessed += OnDomainUpDownDoubleClick; + // Hook into numeric up-down events + _domainUpDown.GetViewManager()!.MouseUpProcessed += OnDomainUpDownMouseUp; + _domainUpDown.GetViewManager()!.DoubleClickProcessed += OnDomainUpDownDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,7 +72,7 @@ public override SelectionRules SelectionRules get { // Start with all edges being sizeable - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; // Prevent the user changing the height rules &= ~(SelectionRules.TopSizeable | SelectionRules.BottomSizeable); @@ -141,12 +141,12 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnDomainUpDownMouseUp(object sender, MouseEventArgs e) + private void OnDomainUpDownMouseUp(object? sender, MouseEventArgs e) { if ((_domainUpDown != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _domainUpDown.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _domainUpDown.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { @@ -158,7 +158,7 @@ private void OnDomainUpDownMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -166,25 +166,25 @@ private void OnDomainUpDownMouseUp(object sender, MouseEventArgs e) private void OnDomainUpDownDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _domainUpDown?.DesignerComponentFromPoint(pt); + var component = _domainUpDown?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if ((_domainUpDown != null) && (e.Component == _domainUpDown)) + if ((_domainUpDown != null) && (Equals(e.Component, _domainUpDown))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances for (var i = _domainUpDown.ButtonSpecs.Count - 1; i >= 0; i--) @@ -193,16 +193,16 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) ButtonSpec spec = _domainUpDown.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_domainUpDown, null); + _changeService?.OnComponentChanging(_domainUpDown, null); // Perform actual removal of button spec from textbox _domainUpDown.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_domainUpDown, null, null, null); + _changeService?.OnComponentChanged(_domainUpDown, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDropButtonDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDropButtonDesigner.cs index c24778dea..03f519b81 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDropButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonDropButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,7 +37,7 @@ public override DesignerActionListCollection ActionLists // Create a collection of action lists var actionLists = new DesignerActionListCollection { - // Add the drop down button specific list + // Add the drop-down button specific list new KryptonDropButtonActionList(this) }; diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonFormDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonFormDesigner.cs index cb9a22002..4137a818f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonFormDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonFormDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupBoxDesigner.cs index cf09cb58c..948739a6c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonGroupBoxDesigner : ParentControlDesigner { #region Instance Fields private KryptonGroupBox? _groupBox; - private IDesignerHost _designerHost; + private IDesignerHost? _designerHost; #endregion #region Public @@ -40,7 +40,7 @@ public override void Initialize([DisallowNull] IComponent component) AutoResizeHandles = true; // Acquire service interfaces - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; // Let the internal panel in the container be designable if (_groupBox != null) @@ -66,7 +66,7 @@ public override bool CanParent(Control control) => public override ControlDesigner? InternalControlDesigner(int internalControlIndex) => // Get the control designer for the requested indexed child control (_groupBox != null) && (internalControlIndex == 0) - ? (ControlDesigner)_designerHost.GetDesigner(_groupBox.Panel) + ? _designerHost?.GetDesigner(_groupBox.Panel) as ControlDesigner : null; /// diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupDesigner.cs index 8dc2de679..d2dfdf1a3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonGroupDesigner : ParentControlDesigner { #region Instance Fields private KryptonGroup? _group; - private IDesignerHost _designerHost; + private IDesignerHost? _designerHost; #endregion #region Public Overrides @@ -38,7 +38,7 @@ public override void Initialize(IComponent component) AutoResizeHandles = true; // Acquire service interfaces - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; // Let the internal panel in the container be designable if (_group != null) @@ -64,7 +64,7 @@ public override bool CanParent(Control control) => public override ControlDesigner? InternalControlDesigner(int internalControlIndex) => // Get the control designer for the requested indexed child control (internalControlIndex == 0) && (_group != null) - ? (ControlDesigner)_designerHost.GetDesigner(_group.Panel) + ? _designerHost?.GetDesigner(_group.Panel) as ControlDesigner : null; /// diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupPanelDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupPanelDesigner.cs index ace8b5158..1d703aace 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupPanelDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonGroupPanelDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,7 +17,7 @@ internal class KryptonGroupPanelDesigner : KryptonPanelDesigner, { #region Instance Fields private KryptonGroupPanel? _panel; - private ISelectionService _selectionService; + private ISelectionService? _selectionService; #endregion #region Public @@ -36,12 +36,12 @@ public override void Initialize([DisallowNull] IComponent component) _panel = component as KryptonGroupPanel; // Acquire service interfaces - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // If inside a Krypton group container then always lock the component from user size/location change if (_panel != null) { - PropertyDescriptor descriptor = TypeDescriptor.GetProperties(component)[@"Locked"]; + var descriptor = TypeDescriptor.GetProperties(component)[@"Locked"]; if ((descriptor != null) && (_panel.Parent is KryptonGroup or KryptonHeaderGroup)) { descriptor.SetValue(component, true); @@ -89,7 +89,7 @@ public override IList SnapLines /// /// Gets the design-time action lists supported by the component associated with the designer. /// - public override DesignerActionListCollection ActionLists => new DesignerActionListCollection(); + public override DesignerActionListCollection ActionLists => []; /// /// Should painting be performed for the selection glyph. @@ -103,7 +103,7 @@ public void SelectParentControl() { if (_panel?.Parent != null) { - _selectionService.SetSelectedComponents(new object[] { _panel.Parent }, SelectionTypes.Primary); + _selectionService?.SetSelectedComponents(new object[] { _panel.Parent }, SelectionTypes.Primary); } } #endregion @@ -146,10 +146,10 @@ protected override void PreFilterProperties(IDictionary properties) foreach (DictionaryEntry entry in properties) { // Get the property descriptor for the entry - var descriptor = (PropertyDescriptor)entry.Value; + var descriptor = entry.Value as PropertyDescriptor; // Is this the 'Name' we are searching for? - if (descriptor.Name.Equals((@"Name")) && descriptor.DesignTimeOnly) + if (descriptor!.Name.Equals(@"Name") && descriptor.DesignTimeOnly) { // Hide the 'Name' property so the user cannot modify it var attributeArray = new Attribute[2] { BrowsableAttribute.No, DesignerSerializationVisibilityAttribute.Hidden }; @@ -164,7 +164,7 @@ protected override void PreFilterProperties(IDictionary properties) /// /// Gets an attribute that indicates the type of inheritance of the associated component. /// - protected override InheritanceAttribute InheritanceAttribute + protected override InheritanceAttribute? InheritanceAttribute { get { @@ -172,7 +172,8 @@ protected override InheritanceAttribute InheritanceAttribute if (_panel?.Parent != null) { // Then get the attribute associated with the parent of the panel - return (InheritanceAttribute)TypeDescriptor.GetAttributes(_panel.Parent)[typeof(InheritanceAttribute)]; + return TypeDescriptor.GetAttributes(_panel.Parent)[typeof(InheritanceAttribute)] as + InheritanceAttribute; } else { diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderDesigner.cs index cc80b383b..0ed48dbeb 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonHeaderDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonHeader? _header; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Protected Overrides @@ -30,7 +30,7 @@ internal class KryptonHeaderDesigner : ControlDesigner protected override void Dispose(bool disposing) { // Unhook from events - ViewManager vm = _header?.GetViewManager(); + var vm = _header?.GetViewManager(); if (vm != null) { vm.MouseUpProcessed -= OnHeaderMouseUp; @@ -70,17 +70,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_header != null) { // Hook into header event - _header.GetViewManager().MouseUpProcessed += OnHeaderMouseUp; - _header.GetViewManager().DoubleClickProcessed += OnHeaderDoubleClick; + _header.GetViewManager()!.MouseUpProcessed += OnHeaderMouseUp; + _header.GetViewManager()!.DoubleClickProcessed += OnHeaderDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -151,12 +151,12 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnHeaderMouseUp(object sender, MouseEventArgs e) + private void OnHeaderMouseUp(object? sender, MouseEventArgs e) { if ((_header != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _header.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _header.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { @@ -168,7 +168,7 @@ private void OnHeaderMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -176,25 +176,25 @@ private void OnHeaderMouseUp(object sender, MouseEventArgs e) private void OnHeaderDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _header?.DesignerComponentFromPoint(pt); + var component = _header?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if ((_header != null) && (e.Component == _header)) + if ((_header != null) && (Equals(e.Component, _header))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances for (var i = _header.ButtonSpecs.Count - 1; i >= 0; i--) @@ -203,16 +203,16 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) ButtonSpec spec = _header.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_header, null); + _changeService?.OnComponentChanging(_header, null); // Perform actual removal of button spec from header _header.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_header, null, null, null); + _changeService?.OnComponentChanged(_header, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderGroupDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderGroupDesigner.cs index 088d6b72e..76d8554a8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderGroupDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonHeaderGroupDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonHeaderGroupDesigner : ParentControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonHeaderGroup? _headerGroup; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Protected @@ -32,11 +32,11 @@ protected override void Dispose(bool disposing) if (_headerGroup != null) { // Unhook from events - _headerGroup.GetViewManager().MouseUpProcessed -= OnHeaderGroupMouseUp; - _headerGroup.GetViewManager().DoubleClickProcessed -= OnHeaderGroupDoubleClick; + _headerGroup.GetViewManager()!.MouseUpProcessed -= OnHeaderGroupMouseUp; + _headerGroup.GetViewManager()!.DoubleClickProcessed -= OnHeaderGroupDoubleClick; } - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; // Must let base class do standard stuff base.Dispose(disposing); @@ -61,8 +61,8 @@ public override void Initialize([DisallowNull] IComponent component) if (_headerGroup != null) { // Hook into header event - _headerGroup.GetViewManager().MouseUpProcessed += OnHeaderGroupMouseUp; - _headerGroup.GetViewManager().DoubleClickProcessed += OnHeaderGroupDoubleClick; + _headerGroup.GetViewManager()!.MouseUpProcessed += OnHeaderGroupMouseUp; + _headerGroup.GetViewManager()!.DoubleClickProcessed += OnHeaderGroupDoubleClick; } // The resizing handles around the control need to change depending on the @@ -71,12 +71,12 @@ public override void Initialize([DisallowNull] IComponent component) AutoResizeHandles = true; // Acquire service interfaces - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; // Let the internal panel in the container be designable if (_headerGroup != null) @@ -93,7 +93,7 @@ public override ICollection AssociatedComponents get { // Get the set of components from the base class - ICollection baseComponents = base.AssociatedComponents; + var baseComponents = base.AssociatedComponents; // If no button specs then nothing more to do if ((_headerGroup == null) || (_headerGroup.ButtonSpecs.Count == 0)) @@ -129,7 +129,7 @@ public override bool CanParent(Control control) => /// A ControlDesigner at the specified index. public override ControlDesigner? InternalControlDesigner(int internalControlIndex) => // Get the control designer for the requested indexed child control - (_headerGroup != null) && (internalControlIndex == 0) ? (ControlDesigner)_designerHost.GetDesigner(_headerGroup.Panel) : null; + (_headerGroup != null) && (internalControlIndex == 0) ? _designerHost?.GetDesigner(_headerGroup.Panel) as ControlDesigner : null; /// /// Returns the number of internal control designers in the ControlDesigner. @@ -199,12 +199,12 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnHeaderGroupMouseUp(object sender, MouseEventArgs e) + private void OnHeaderGroupMouseUp(object? sender, MouseEventArgs e) { if ((_headerGroup != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _headerGroup.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _headerGroup.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { @@ -216,51 +216,51 @@ private void OnHeaderGroupMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } - private void OnHeaderGroupDoubleClick(object sender, Point pt) + private void OnHeaderGroupDoubleClick(object? sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _headerGroup.DesignerComponentFromPoint(pt); + var component = _headerGroup?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if (e.Component == _headerGroup) + if (Equals(e.Component, _headerGroup)) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances - for (var i = _headerGroup.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = _headerGroup!.ButtonSpecs.Count - 1; i >= 0; i--) { // Get access to the indexed button spec ButtonSpec spec = _headerGroup.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_headerGroup, null); + _changeService?.OnComponentChanging(_headerGroup, null); // Perform actual removal of button spec from header _headerGroup.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_headerGroup, null, null, null); + _changeService?.OnComponentChanged(_headerGroup, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLabelDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLabelDesigner.cs index 34d7b1ca2..ca720729a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLabelDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLabelDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkLabelDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkLabelDesigner.cs index dc50c4fec..7b1902c49 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkLabelDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkLabelDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkWrapLabelDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkWrapLabelDesigner.cs index c8723cfef..82e435457 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkWrapLabelDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLinkWrapLabelDesigner.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListBoxDesigner.cs index a0eafc492..47b77070a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListViewDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListViewDesigner.cs index 512f0c496..53e8d3a61 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListViewDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonListViewDesigner.cs @@ -5,14 +5,12 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion -using Krypton.Toolkit.Designers.Action_Lists; - -namespace Krypton.Toolkit.Designers.Designers +namespace Krypton.Toolkit { internal class KryptonListViewDesigner : ControlDesigner { diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonManagerDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonManagerDesigner.cs index 5c256c527..aa18b8a4e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonManagerDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonManagerDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -14,7 +14,35 @@ namespace Krypton.Toolkit { internal class KryptonManagerDesigner : ComponentDesigner { + #region Instance Fields + + private DesignerVerbCollection? _verbCollection; + + private DesignerVerb _resetVerb; + + private KryptonManager? _manager; + + private IComponentChangeService? _service; + + #endregion + #region Public Overrides + + public override void Initialize([DisallowNull] IComponent component) + { + base.Initialize(component); + + Debug.Assert(component != null); + + _manager = component as KryptonManager; + + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + + //_service.ComponentRemoving += OnComponentRemoving; + + _service!.ComponentChanged += OnComponentChanged; + } + /// /// Gets the design-time action lists supported by the component associated with the designer. /// @@ -32,6 +60,66 @@ public override DesignerActionListCollection ActionLists return actionLists; } } + + public override DesignerVerbCollection Verbs + { + get + { + if (_verbCollection == null) + { + _verbCollection = []; + + _resetVerb = new DesignerVerb(@"Reset to Default Theme", OnReset); + + _verbCollection.AddRange(new DesignerVerb[] { _resetVerb }); + } + + UpdateVerbStatus(); + + return _verbCollection; + } + } + + #endregion + + #region Implementation + + private void UpdateVerbStatus() + { + if (_verbCollection != null) + { + _resetVerb.Enabled = !_manager!.GlobalPaletteMode.Equals(PaletteMode.Microsoft365Blue); + } + } + + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + + private void OnComponentRemoving(object sender, ComponentEventArgs e) + { + throw new NotImplementedException(); + } + + private void OnReset(object? sender, EventArgs e) + { + if (_manager != null) + { + DialogResult result = KryptonMessageBox.Show(@"This will reset the current theme back to 'Microsoft 365 - Blue'. Do you want to continue?", + @"Reset Theme", + KryptonMessageBoxButtons.YesNo, + KryptonMessageBoxIcon.Question + ); + + if (result == DialogResult.Yes) + { + _manager.GlobalPaletteMode = PaletteMode.Microsoft365Blue; + + _service?.OnComponentChanged(_manager, null, _manager.GlobalPaletteMode, PaletteMode.Microsoft365Blue); + + UpdateVerbStatus(); + } + } + } + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxColumnDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxColumnDesigner.cs index 6e05ecccf..53acf313a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxColumnDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxColumnDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonMaskedTextBoxColumnDesigner : ComponentDesigner { #region Instance Fields - private KryptonDataGridViewMaskedTextBoxColumn _maskedTextBox; - private IComponentChangeService _changeService; + private KryptonDataGridViewMaskedTextBoxColumn? _maskedTextBox; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,7 +35,7 @@ public override void Initialize([DisallowNull] IComponent component) _maskedTextBox = component as KryptonDataGridViewMaskedTextBoxColumn; // Get access to the design services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxDesigner.cs index c9a254a01..d6988d3ec 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMaskedTextBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonMaskedTextBoxDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonMaskedTextBox? _maskedTextBox; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -45,17 +45,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_maskedTextBox != null) { // Hook into masked textbox events - _maskedTextBox.GetViewManager().MouseUpProcessed += OnMaskedTextBoxMouseUp; - _maskedTextBox.GetViewManager().DoubleClickProcessed += OnMaskedTextBoxDoubleClick; + _maskedTextBox.GetViewManager()!.MouseUpProcessed += OnMaskedTextBoxMouseUp; + _maskedTextBox.GetViewManager()!.DoubleClickProcessed += OnMaskedTextBoxDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,7 +72,7 @@ public override SelectionRules SelectionRules get { // Start with all edges being sizeable - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; // Get access to the actual control instance var maskedTextBox = (KryptonMaskedTextBox)Component; @@ -147,16 +147,16 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnMaskedTextBoxMouseUp(object sender, MouseEventArgs e) + private void OnMaskedTextBoxMouseUp(object? sender, MouseEventArgs e) { if ((_maskedTextBox != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _maskedTextBox.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _maskedTextBox.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { - // Force the layout to be update for any change in selection + // Force the layout to be updated for any change in selection _maskedTextBox.PerformLayout(); // Select the component @@ -164,7 +164,7 @@ private void OnMaskedTextBoxMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -172,43 +172,43 @@ private void OnMaskedTextBoxMouseUp(object sender, MouseEventArgs e) private void OnMaskedTextBoxDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _maskedTextBox.DesignerComponentFromPoint(pt); + var component = _maskedTextBox?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if (e.Component == _maskedTextBox) + if (Equals(e.Component, _maskedTextBox)) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances - for (var i = _maskedTextBox.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = _maskedTextBox!.ButtonSpecs.Count - 1; i >= 0; i--) { // Get access to the indexed button spec ButtonSpec spec = _maskedTextBox.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_maskedTextBox, null); + _changeService?.OnComponentChanging(_maskedTextBox, null); // Perform actual removal of button spec from textbox _maskedTextBox.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_maskedTextBox, null, null, null); + _changeService?.OnComponentChanged(_maskedTextBox, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMonthCalendarDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMonthCalendarDesigner.cs index ec9d66160..257330395 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMonthCalendarDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonMonthCalendarDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonMonthCalendarDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonMonthCalendar? _monthCalendar; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -45,17 +45,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_monthCalendar != null) { // Hook into header event - _monthCalendar.GetViewManager().MouseUpProcessed += OnCalendarMouseUp; - _monthCalendar.GetViewManager().DoubleClickProcessed += OnCalendarDoubleClick; + _monthCalendar.GetViewManager()!.MouseUpProcessed += OnCalendarMouseUp; + _monthCalendar.GetViewManager()!.DoubleClickProcessed += OnCalendarDoubleClick; } // Acquire service interfaces - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } @@ -67,7 +67,7 @@ public override ICollection AssociatedComponents get { // Get the set of components from the base class - ICollection baseComponents = base.AssociatedComponents; + var baseComponents = base.AssociatedComponents; // If no button specs then nothing more to do if ((_monthCalendar == null) || (_monthCalendar.ButtonSpecs.Count == 0)) @@ -112,7 +112,7 @@ public override SelectionRules SelectionRules { get { - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; return rules & ~(SelectionRules.LeftSizeable | SelectionRules.TopSizeable); } } @@ -128,11 +128,11 @@ protected override void Dispose(bool disposing) if (_monthCalendar != null) { // Unhook from events - _monthCalendar.GetViewManager().MouseUpProcessed -= OnCalendarMouseUp; - _monthCalendar.GetViewManager().DoubleClickProcessed -= OnCalendarDoubleClick; + _monthCalendar.GetViewManager()!.MouseUpProcessed -= OnCalendarMouseUp; + _monthCalendar.GetViewManager()!.DoubleClickProcessed -= OnCalendarDoubleClick; } - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; // Must let base class do standard stuff base.Dispose(disposing); @@ -180,16 +180,16 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnCalendarMouseUp(object sender, MouseEventArgs e) + private void OnCalendarMouseUp(object? sender, MouseEventArgs e) { if ((_monthCalendar != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _monthCalendar.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _monthCalendar.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { - // Force the layout to be update for any change in selection + // Force the layout to be updated for any change in selection _monthCalendar.PerformLayout(); // Select the component @@ -197,7 +197,7 @@ private void OnCalendarMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -205,43 +205,43 @@ private void OnCalendarMouseUp(object sender, MouseEventArgs e) private void OnCalendarDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component component = _monthCalendar.DesignerComponentFromPoint(pt); + var component = _monthCalendar?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if (e.Component == _monthCalendar) + if (Equals(e.Component, _monthCalendar)) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances - for (var i = _monthCalendar.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = _monthCalendar!.ButtonSpecs.Count - 1; i >= 0; i--) { // Get access to the indexed button spec ButtonSpec spec = _monthCalendar.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_monthCalendar, null); + _changeService?.OnComponentChanging(_monthCalendar, null); // Perform actual removal of button spec from calendar _monthCalendar.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_monthCalendar, null, null, null); + _changeService?.OnComponentChanged(_monthCalendar, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownColumnDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownColumnDesigner.cs index 9c2fbce77..9ddc3677a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownColumnDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownColumnDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonNumericUpDownColumnDesigner : ComponentDesigner { #region Instance Fields - private KryptonDataGridViewNumericUpDownColumn _numericUpDown; - private IComponentChangeService _changeService; + private KryptonDataGridViewNumericUpDownColumn? _numericUpDown; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,7 +35,7 @@ public override void Initialize([DisallowNull] IComponent component) _numericUpDown = component as KryptonDataGridViewNumericUpDownColumn; // Get access to the design services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownDesigner.cs index af48140a8..7b9810328 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonNumericUpDownDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonNumericUpDownDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonNumericUpDown? _numericUpDown; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -44,18 +44,18 @@ public override void Initialize([DisallowNull] IComponent component) if (_numericUpDown != null) { - // Hook into numeric updown events - _numericUpDown.GetViewManager().MouseUpProcessed += OnNumericUpDownMouseUp; - _numericUpDown.GetViewManager().DoubleClickProcessed += OnNumericUpDownDoubleClick; + // Hook into numeric up-down events + _numericUpDown.GetViewManager()!.MouseUpProcessed += OnNumericUpDownMouseUp; + _numericUpDown.GetViewManager()!.DoubleClickProcessed += OnNumericUpDownDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,7 +72,7 @@ public override SelectionRules SelectionRules get { // Start with all edges being sizeable - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; // Prevent the user changing the height rules &= ~(SelectionRules.TopSizeable | SelectionRules.BottomSizeable); @@ -141,16 +141,16 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnNumericUpDownMouseUp(object sender, MouseEventArgs e) + private void OnNumericUpDownMouseUp(object? sender, MouseEventArgs e) { if ((_numericUpDown != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _numericUpDown.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _numericUpDown.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { - // Force the layout to be update for any change in selection + // Force the layout to be updated for any change in selection _numericUpDown.PerformLayout(); // Select the component @@ -158,7 +158,7 @@ private void OnNumericUpDownMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -166,25 +166,25 @@ private void OnNumericUpDownMouseUp(object sender, MouseEventArgs e) private void OnNumericUpDownDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component component = _numericUpDown?.DesignerComponentFromPoint(pt); + var component = _numericUpDown?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if ((_numericUpDown != null) && (e.Component == _numericUpDown)) + if ((_numericUpDown != null) && (Equals(e.Component, _numericUpDown))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances for (var i = _numericUpDown.ButtonSpecs.Count - 1; i >= 0; i--) @@ -193,16 +193,16 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) ButtonSpec spec = _numericUpDown.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_numericUpDown, null); + _changeService?.OnComponentChanging(_numericUpDown, null); // Perform actual removal of button spec from textbox _numericUpDown.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_numericUpDown, null, null, null); + _changeService?.OnComponentChanged(_numericUpDown, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPaletteDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPaletteDesigner.cs deleted file mode 100644 index 266a82f9a..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPaletteDesigner.cs +++ /dev/null @@ -1,37 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - internal class KryptonPaletteDesigner : ComponentDesigner - { - #region Public Overrides - /// - /// Gets the design-time action lists supported by the component associated with the designer. - /// - public override DesignerActionListCollection ActionLists - { - get - { - // Create a collection of action lists - var actionLists = new DesignerActionListCollection - { - // Add the palette specific list - new KryptonPaletteActionList(this) - }; - - return actionLists; - } - } - #endregion - } -} diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPanelDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPanelDesigner.cs index 6d769409b..02364fb9a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPanelDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPanelDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPropertyGridDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPropertyGridDesigner.cs index 98da6d50a..ed96ed703 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPropertyGridDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonPropertyGridDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRadioButtonDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRadioButtonDesigner.cs index 11c986e8f..4db4aee81 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRadioButtonDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRadioButtonDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRichTextBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRichTextBoxDesigner.cs index 687ced2fc..a03cd84df 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRichTextBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonRichTextBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonRichTextBoxDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonRichTextBox? _richTextBox; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -45,17 +45,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_richTextBox != null) { // Hook into rich textbox events - _richTextBox.GetViewManager().MouseUpProcessed += OnTextBoxMouseUp; - _richTextBox.GetViewManager().DoubleClickProcessed += OnTextBoxDoubleClick; + _richTextBox.GetViewManager()!.MouseUpProcessed += OnTextBoxMouseUp; + _richTextBox.GetViewManager()!.DoubleClickProcessed += OnTextBoxDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,12 +72,12 @@ public override SelectionRules SelectionRules get { // Start with all edges being sizeable - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; // Get access to the actual control instance var richTextBox = (KryptonRichTextBox)Component; - // With multiline and autosize we prevent the user changing the height + // With multiline and auto-size we prevent the user changing the height if (richTextBox is { Multiline: false, AutoSize: true }) { rules &= ~(SelectionRules.TopSizeable | SelectionRules.BottomSizeable); @@ -147,16 +147,16 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnTextBoxMouseUp(object sender, MouseEventArgs e) + private void OnTextBoxMouseUp(object? sender, MouseEventArgs e) { if ((_richTextBox != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _richTextBox.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _richTextBox.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { - // Force the layout to be update for any change in selection + // Force the layout to be updated for any change in selection _richTextBox.PerformLayout(); // Select the component @@ -164,7 +164,7 @@ private void OnTextBoxMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -172,43 +172,43 @@ private void OnTextBoxMouseUp(object sender, MouseEventArgs e) private void OnTextBoxDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _richTextBox?.DesignerComponentFromPoint(pt); + var component = _richTextBox?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if (e.Component == _richTextBox) + if (Equals(e.Component, _richTextBox)) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances - for (var i = _richTextBox.ButtonSpecs.Count - 1; i >= 0; i--) + for (var i = _richTextBox!.ButtonSpecs.Count - 1; i >= 0; i--) { // Get access to the indexed button spec ButtonSpec spec = _richTextBox.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_richTextBox, null); + _changeService?.OnComponentChanging(_richTextBox, null); // Perform actual removal of button spec from rich textbox _richTextBox.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_richTextBox, null, null, null); + _changeService?.OnComponentChanged(_richTextBox, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonScrollBarDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonScrollBarDesigner.cs index 413140ea9..b80fb5319 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonScrollBarDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonScrollBarDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSeparatorDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSeparatorDesigner.cs index 99171dec2..55785bc04 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSeparatorDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSeparatorDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitContainerDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitContainerDesigner.cs index 63ec22836..24e18e1b4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitContainerDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitContainerDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,8 +16,8 @@ internal class KryptonSplitContainerDesigner : ParentControlDesigner { #region Instance Fields private KryptonSplitContainer? _splitContainer; - private IDesignerHost _designerHost; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private ISelectionService? _selectionService; private BehaviorService? _behaviorService; private Adorner _adorner; #endregion @@ -40,17 +40,17 @@ public override void Initialize([DisallowNull] IComponent component) AutoResizeHandles = true; // Acquire service interfaces - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); - _behaviorService = (BehaviorService)GetService(typeof(BehaviorService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; + _behaviorService = GetService(typeof(BehaviorService)) as BehaviorService; // Remember the actual control being designed _splitContainer = component as KryptonSplitContainer; // Create a new adorner and add our splitter glyph _adorner = new Adorner(); - _adorner.Glyphs.Add(new KryptonSplitContainerGlyph(_selectionService, _behaviorService, _adorner, this)); - _behaviorService.Adorners.Add(_adorner); + _adorner.Glyphs.Add(new KryptonSplitContainerGlyph(_selectionService!, _behaviorService!, _adorner, this)); + _behaviorService?.Adorners.Add(_adorner); // Let the two panels in the container be designable if (_splitContainer != null) @@ -103,9 +103,9 @@ public override bool CanParent(Control control) => { // Get the control designer for the requested indexed child control case 0: - return _designerHost.GetDesigner(_splitContainer.Panel1) as ControlDesigner; + return _designerHost?.GetDesigner(_splitContainer.Panel1) as ControlDesigner; case 1: - return _designerHost.GetDesigner(_splitContainer.Panel2) as ControlDesigner; + return _designerHost?.GetDesigner(_splitContainer.Panel2) as ControlDesigner; } } @@ -126,14 +126,15 @@ public override DesignerActionListCollection ActionLists get { // Create a collection of action lists - DesignerActionListCollection actionLists = new DesignerActionListCollection - { + DesignerActionListCollection actionList = new DesignerActionListCollection(); + + actionList.Add(new KryptonSplitContainerActionList(this)); + + return actionList; - // Add the orientation list - new KryptonSplitContainerActionList(this) - }; + /*DesignerActionListCollection actionLists = [new KryptonSplitContainerActionList(this)]; - return actionLists; + return actionLists;*/ } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitterPanelDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitterPanelDesigner.cs index 1b550a76a..eb09a677b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitterPanelDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonSplitterPanelDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,7 +17,7 @@ internal class KryptonSplitterPanelDesigner : KryptonPanelDesigner, { #region Instance Fields private KryptonSplitterPanel? _panel; - private ISelectionService _selectionService; + private ISelectionService? _selectionService; #endregion #region Public @@ -36,11 +36,10 @@ public override void Initialize([DisallowNull] IComponent component) _panel = component as KryptonSplitterPanel; // Acquire service interfaces - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // Hook into changes in selected component - var service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - if (service != null) + if (GetService(typeof(IComponentChangeService)) is IComponentChangeService service) { service.ComponentChanged += OnComponentChanged; } @@ -48,7 +47,7 @@ public override void Initialize([DisallowNull] IComponent component) // If inside a Krypton split container then always lock the component from user size/location change if (_panel != null) { - PropertyDescriptor descriptor = TypeDescriptor.GetProperties(component)[@"Locked"]; + PropertyDescriptor? descriptor = TypeDescriptor.GetProperties(component)[@"Locked"]; if ((descriptor != null) && (_panel.Parent is KryptonSplitContainer)) { descriptor.SetValue(component, true); @@ -85,7 +84,7 @@ public void SelectParentControl() { if (_panel?.Parent != null) { - _selectionService.SetSelectedComponents(new object[] { _panel.Parent }, SelectionTypes.Primary); + _selectionService?.SetSelectedComponents(new object[] { _panel.Parent }, SelectionTypes.Primary); } } #endregion @@ -102,10 +101,8 @@ protected override void Dispose(bool disposing) if (disposing) { // Get access to the component change service - var service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - // Must unhook our event from the service so we can be garbage collected - if (service != null) + if (GetService(typeof(IComponentChangeService)) is IComponentChangeService service) { service.ComponentChanged -= OnComponentChanged; } @@ -152,10 +149,10 @@ protected override void PreFilterProperties(IDictionary properties) foreach (DictionaryEntry entry in properties) { // Get the property descriptor for the entry - var descriptor = (PropertyDescriptor)entry.Value; + var descriptor = entry.Value as PropertyDescriptor; // Is this the 'Name' we are searching for? - if (descriptor.Name.Equals((@"Name")) && descriptor.DesignTimeOnly) + if (descriptor is not null && descriptor.Name.Equals((@"Name")) && descriptor.DesignTimeOnly) { // Hide the 'Name' property so the user cannot modify it var attributeArray = new Attribute[2] { BrowsableAttribute.No, DesignerSerializationVisibilityAttribute.Hidden }; @@ -175,21 +172,23 @@ protected override InheritanceAttribute InheritanceAttribute get { // If we have a valid Krypton splitter panel instance - if (_panel?.Parent != null) + if (_panel?.Parent is not null) { // Then get the attribute associated with the parent of the panel - return (InheritanceAttribute)TypeDescriptor.GetAttributes(_panel.Parent)[typeof(InheritanceAttribute)]; + return (InheritanceAttribute)TypeDescriptor.GetAttributes(_panel.Parent)[typeof(InheritanceAttribute)]!; } else { - return base.InheritanceAttribute; + // Null forgiving operator added to remove the null reference return warning. + // base.InheritanceAttribute will always return a reference. + return base.InheritanceAttribute!; } } } #endregion #region Implementation - private void OnComponentChanged(object sender, ComponentChangedEventArgs e) + private void OnComponentChanged(object? sender, ComponentChangedEventArgs e) { // Assuming the panel has a parent if (_panel?.Parent != null) diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonStubDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonStubDesigner.cs new file mode 100644 index 000000000..8d13e3a68 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonStubDesigner.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp), Simon Coghlan(aka Smurf-IV) & (Giduac), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// A designer stub derived from ControlDesigner with no further functionality.
+ /// Can be used to add to classes that inherit an unwanted or incompatible designer and disables the inherited action list a control can have at design time. + ///
+ internal class KryptonStubDesigner : ControlDesigner + { + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxColumnDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxColumnDesigner.cs index d1b8edaca..c5831893c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxColumnDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxColumnDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Toolkit internal class KryptonTextBoxColumnDesigner : ComponentDesigner { #region Instance Fields - private KryptonDataGridViewTextBoxColumn _textBox; - private IComponentChangeService _changeService; + private KryptonDataGridViewTextBoxColumn? _textBox; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -35,7 +35,7 @@ public override void Initialize([DisallowNull] IComponent component) _textBox = component as KryptonDataGridViewTextBoxColumn; // Get access to the design services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxDesigner.cs index 5160de779..4ee36c116 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTextBoxDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,9 +17,9 @@ internal class KryptonTextBoxDesigner : ControlDesigner #region Instance Fields private bool _lastHitTest; private KryptonTextBox? _textBox; - private IDesignerHost _designerHost; - private IComponentChangeService _changeService; - private ISelectionService _selectionService; + private IDesignerHost? _designerHost; + private IComponentChangeService? _changeService; + private ISelectionService? _selectionService; #endregion #region Public Overrides @@ -45,17 +45,17 @@ public override void Initialize([DisallowNull] IComponent component) if (_textBox != null) { // Hook into textbox events - _textBox.GetViewManager().MouseUpProcessed += OnTextBoxMouseUp; - _textBox.GetViewManager().DoubleClickProcessed += OnTextBoxDoubleClick; + _textBox.GetViewManager()!.MouseUpProcessed += OnTextBoxMouseUp; + _textBox.GetViewManager()!.DoubleClickProcessed += OnTextBoxDoubleClick; } // Get access to the design services - _designerHost = (IDesignerHost)GetService(typeof(IDesignerHost)); - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - _selectionService = (ISelectionService)GetService(typeof(ISelectionService)); + _designerHost = GetService(typeof(IDesignerHost)) as IDesignerHost; + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + _selectionService = GetService(typeof(ISelectionService)) as ISelectionService; // We need to know when we are being removed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -72,12 +72,12 @@ public override SelectionRules SelectionRules get { // Start with all edges being sizeable - SelectionRules rules = base.SelectionRules; + var rules = base.SelectionRules; // Get access to the actual control instance - var textBox = (KryptonTextBox)Component; + var textBox = Component as KryptonTextBox; - // With multiline or autosize we prevent the user changing the height + // With multiline or auto size we prevent the user changing the height if (textBox is { Multiline: false, AutoSize: true }) { rules &= ~(SelectionRules.TopSizeable | SelectionRules.BottomSizeable); @@ -147,16 +147,16 @@ protected override void OnMouseLeave() #endregion #region Implementation - private void OnTextBoxMouseUp(object sender, MouseEventArgs e) + private void OnTextBoxMouseUp(object? sender, MouseEventArgs e) { if ((_textBox != null) && (e.Button == MouseButtons.Left)) { // Get any component associated with the current mouse position - Component? component = _textBox.DesignerComponentFromPoint(new Point(e.X, e.Y)); + var component = _textBox.DesignerComponentFromPoint(new Point(e.X, e.Y)); if (component != null) { - // Force the layout to be update for any change in selection + // Force the layout to be updated for any change in selection _textBox.PerformLayout(); // Select the component @@ -164,7 +164,7 @@ private void OnTextBoxMouseUp(object sender, MouseEventArgs e) { component }; - _selectionService.SetSelectedComponents(selectionList, SelectionTypes.Auto); + _selectionService?.SetSelectedComponents(selectionList, SelectionTypes.Auto); } } } @@ -172,25 +172,25 @@ private void OnTextBoxMouseUp(object sender, MouseEventArgs e) private void OnTextBoxDoubleClick(object sender, Point pt) { // Get any component associated with the current mouse position - Component? component = _textBox?.DesignerComponentFromPoint(pt); + var component = _textBox?.DesignerComponentFromPoint(pt); if (component != null) { // Get the designer for the component - IDesigner designer = _designerHost.GetDesigner(component); + var designer = _designerHost?.GetDesigner(component); // Request code for the default event be generated - designer.DoDefaultAction(); + designer?.DoDefaultAction(); } } - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed - if ((_textBox != null) && (e.Component == _textBox)) + if ((_textBox != null) && (Equals(e.Component, _textBox))) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all the button spec instances for (var i = _textBox.ButtonSpecs.Count - 1; i >= 0; i--) @@ -199,16 +199,16 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) ButtonSpec spec = _textBox.ButtonSpecs[i]; // Must wrap button spec removal in change notifications - _changeService.OnComponentChanging(_textBox, null); + _changeService?.OnComponentChanging(_textBox, null); // Perform actual removal of button spec from textbox _textBox.ButtonSpecs.Remove(spec); // Get host to remove it from design time - host.DestroyComponent(spec); + host?.DestroyComponent(spec); // Must wrap button spec removal in change notifications - _changeService.OnComponentChanged(_textBox, null, null, null); + _changeService?.OnComponentChanged(_textBox, null, null, null); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLanguageManagerDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonThemeBrowserDesigner.cs similarity index 59% rename from Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLanguageManagerDesigner.cs rename to Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonThemeBrowserDesigner.cs index 065b68f03..41028705d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonLanguageManagerDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonThemeBrowserDesigner.cs @@ -1,31 +1,39 @@ #region BSD License /* - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * */ #endregion namespace Krypton.Toolkit { - internal class KryptonLanguageManagerDesigner : ControlDesigner + internal class KryptonThemeBrowserDesigner : ComponentDesigner { + #region Public Overrides + public override void Initialize([DisallowNull] IComponent component) + { + base.Initialize(component); + } + public override DesignerActionListCollection ActionLists { get { var actionList = new DesignerActionListCollection { - new KryptonLanguageManagerActionList(this) + new KryptonThemeBrowserActionList(this) }; return actionList; } } + public override DesignerVerbCollection Verbs { get; } + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonThemeComboBoxDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonThemeComboBoxDesigner.cs new file mode 100644 index 000000000..1d3e193fc --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonThemeComboBoxDesigner.cs @@ -0,0 +1,102 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class KryptonThemeComboBoxDesigner : ControlDesigner + { + #region Instance Fields + + private DesignerVerbCollection? _verbCollection; + private DesignerVerb _resetVerb; + private KryptonThemeComboBox? _themeComboBox; + private IComponentChangeService? _changeService; + + #endregion + + #region Public + + public override void Initialize([DisallowNull] IComponent component) + { + base.Initialize(component); + + Debug.Assert(component != null); + + _themeComboBox = component as KryptonThemeComboBox; + + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; + } + + public override DesignerActionListCollection ActionLists + { + get; + } + + public override DesignerVerbCollection Verbs + { + get + { + if (_verbCollection == null) + { + _verbCollection = []; + + _resetVerb = new DesignerVerb(@"Reset to Default Theme", OnReset); + + _verbCollection.AddRange(new DesignerVerb[] { _resetVerb }); + } + + UpdateVerbStatus(); + + return _verbCollection; + } + } + + #endregion + + #region Implementation + + private void UpdateVerbStatus() + { + if (_verbCollection != null) + { + _resetVerb.Enabled = !_themeComboBox!.SelectedIndex.Equals((int)PaletteMode.Microsoft365Blue); + } + } + + private void OnComponentChanged(object sender, ComponentChangedEventArgs e) => UpdateVerbStatus(); + + private void OnComponentRemoving(object sender, ComponentEventArgs e) + { + throw new NotImplementedException(); + } + + private void OnReset(object? sender, EventArgs e) + { + if (_themeComboBox != null) + { + DialogResult result = KryptonMessageBox.Show(@"This will reset the current theme back to 'Microsoft 365 - Blue'. Do you want to continue?", + @"Reset Theme", + KryptonMessageBoxButtons.YesNo, + KryptonMessageBoxIcon.Question + ); + + if (result == DialogResult.Yes) + { + _themeComboBox.SelectedIndex = (int)PaletteMode.Microsoft365Blue; + + //_themeComboBox.OnComponentChanged(_manager, null, _manager.GlobalPaletteMode, PaletteMode.Microsoft365Blue); + + UpdateVerbStatus(); + } + } + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTrackBarDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTrackBarDesigner.cs index 379e19ffc..137ddf490 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTrackBarDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTrackBarDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,7 +15,7 @@ namespace Krypton.Toolkit internal class KryptonTrackBarDesigner : ControlDesigner { #region Instance Fields - private KryptonTrackBar _trackBar; + private KryptonTrackBar? _trackBar; #endregion #region Public Overrides @@ -45,7 +45,7 @@ public override SelectionRules SelectionRules { get { - if (!_trackBar.AutoSize) + if (!_trackBar!.AutoSize) { return SelectionRules.AllSizeable | SelectionRules.Moveable; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTreeViewDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTreeViewDesigner.cs index 885064f76..c072a1e85 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTreeViewDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonTreeViewDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -65,7 +65,7 @@ public NoneExcludedImageIndexConverter() // Properties /// - /// Indicates if the the None value should be included in standard values for selection. + /// Indicates if the None value should be included in standard values for selection. /// protected override bool IncludeNoneAsStandardValue => false; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWebBrowserDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWebBrowserDesigner.cs index b0a298e00..52a1c55fd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWebBrowserDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWebBrowserDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWrapLabelDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWrapLabelDesigner.cs index 7a81681ca..6f4aa9edb 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWrapLabelDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/KryptonWrapLabelDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/ScrollBarControlDesigner.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/ScrollBarControlDesigner.cs index e997c45d6..bff4bfd62 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/ScrollBarControlDesigner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Designers/ScrollBarControlDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,15 +25,13 @@ public override SelectionRules SelectionRules get { // gets the property descriptor for the property "Orientation" - PropertyDescriptor propDescriptor = - TypeDescriptor.GetProperties(Component)[nameof(Orientation)]; + var propDescriptor = TypeDescriptor.GetProperties(Component)[nameof(Orientation)]; // if not null - we can read the current orientation of the scroll bar - if (propDescriptor != null) + if (propDescriptor is not null) { // get the current orientation - var orientation = - (ScrollBarOrientation)propDescriptor.GetValue(Component); + var orientation = (ScrollBarOrientation?)propDescriptor.GetValue(Component); // if vertical orientation return orientation == ScrollBarOrientation.Vertical @@ -41,8 +39,10 @@ public override SelectionRules SelectionRules | SelectionRules.Moveable | SelectionRules.BottomSizeable | SelectionRules.TopSizeable - : SelectionRules.Visible | SelectionRules.Moveable - | SelectionRules.LeftSizeable | SelectionRules.RightSizeable; + : SelectionRules.Visible + | SelectionRules.Moveable + | SelectionRules.LeftSizeable + | SelectionRules.RightSizeable; } return base.SelectionRules; diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonBreadCrumbItemsEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonBreadCrumbItemsEditor.cs index 677527fd8..9f55e164c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonBreadCrumbItemsEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonBreadCrumbItemsEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ protected partial class KryptonBreadCrumbItemsForm : CollectionForm /// /// Simple class to reduce the length of declarations! /// - protected class DictItemBase : Dictionary { } + protected class DictItemBase : Dictionary; /// /// Act as proxy for a crumb item to control the exposed properties to the property grid. @@ -145,7 +145,7 @@ public MenuTreeNode(KryptonBreadCrumbItem item) #endregion #region Implementation - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) => + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) => // Update with correct string for new state Text = Item.ToString(); #endregion @@ -203,12 +203,14 @@ public PropertyGridSite(IServiceProvider servicePovider, /// /// Gets the component associated with the ISite when implemented by a class. /// - public IComponent? Component { get; } + public IComponent Component { get; } /// /// Gets the IContainer associated with the ISite when implemented by a class. /// - public IContainer? Container => null; + public IContainer Container + //nul forgiving added since the interface defines as non-nullable + => null!; /// /// Determines whether the component is in design mode when implemented by a class. @@ -432,7 +434,7 @@ protected override void OnEditValueChanged() // Need to link the property browser to a site otherwise Image properties cannot be // edited because it cannot navigate to the owning project for its resources - propertyGrid1.Site = new PropertyGridSite(Context, propertyGrid1); + propertyGrid1.Site = new PropertyGridSite(Context!, propertyGrid1); // Add all the top level clones treeView1.Nodes.Clear(); @@ -457,7 +459,7 @@ protected override void OnEditValueChanged() #endregion #region Implementation - private void buttonOK_Click(object sender, EventArgs e) + private void buttonOK_Click(object? sender, EventArgs e) { // Create an array with all the root items var rootItems = new object[treeView1.Nodes.Count]; @@ -476,10 +478,10 @@ private void buttonOK_Click(object sender, EventArgs e) treeView1.Nodes.Clear(); // Inform designer of changes in component items - SynchronizeCollections(_beforeItems, afterItems, Context); + SynchronizeCollections(_beforeItems, afterItems, Context!); // Notify container that the value has been changed - Context.OnComponentChanged(); + Context!.OnComponentChanged(); } private bool ContainsNode(TreeNode node, TreeNode find) @@ -580,10 +582,10 @@ private bool ContainsNode(TreeNode node, TreeNode find) return null; } - private void buttonMoveUp_Click(object sender, EventArgs e) + private void buttonMoveUp_Click(object? sender, EventArgs e) { // If we have a selected node - var node = treeView1.SelectedNode as MenuTreeNode; + MenuTreeNode node = (MenuTreeNode)treeView1.SelectedNode!; if (node != null) { // Find the previous node using the currently selected node @@ -593,7 +595,7 @@ private void buttonMoveUp_Click(object sender, EventArgs e) var contained = ContainsNode(previousNode, node); // Remove cell from parent collection - var parentNode = (MenuTreeNode)node.Parent; + MenuTreeNode parentNode = (MenuTreeNode)node.Parent!; TreeNodeCollection parentCollection = node.Parent == null ? treeView1.Nodes : node.Parent.Nodes; parentNode?.Item.Items.Remove(node.Item); parentCollection.Remove(node); @@ -637,7 +639,7 @@ private void buttonMoveUp_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonMoveDown_Click(object sender, EventArgs e) + private void buttonMoveDown_Click(object? sender, EventArgs e) { // If we have a selected node var node = treeView1.SelectedNode as MenuTreeNode; @@ -658,7 +660,7 @@ private void buttonMoveDown_Click(object sender, EventArgs e) if (contained) { // Add cell to the parent sequence of target cell - var previousParent = (MenuTreeNode)nextNode.Parent; + MenuTreeNode previousParent = (MenuTreeNode)nextNode.Parent!; parentCollection = nextNode.Parent == null ? treeView1.Nodes : nextNode.Parent.Nodes; var pageIndex = parentCollection.IndexOf(nextNode); previousParent?.Item.Items.Insert(pageIndex + 1, node.Item); @@ -680,11 +682,11 @@ private void buttonMoveDown_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonAddSibling_Click(object sender, EventArgs e) + private void buttonAddSibling_Click(object? sender, EventArgs e) { - var item = CreateInstance(typeof(KryptonBreadCrumbItem)) as KryptonBreadCrumbItem; + KryptonBreadCrumbItem item = (KryptonBreadCrumbItem)CreateInstance(typeof(KryptonBreadCrumbItem)); TreeNode newNode = new MenuTreeNode(item); - TreeNode selectedNode = treeView1.SelectedNode; + TreeNode selectedNode = treeView1.SelectedNode!; // If there is no selection then append to root if (selectedNode == null) @@ -694,7 +696,7 @@ private void buttonAddSibling_Click(object sender, EventArgs e) else { // If current selection is at the root - TreeNode parentNode = selectedNode.Parent; + TreeNode parentNode = selectedNode.Parent!; if (parentNode == null) { treeView1.Nodes.Insert(treeView1.Nodes.IndexOf(selectedNode) + 1, newNode); @@ -718,11 +720,11 @@ private void buttonAddSibling_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonAddChild_Click(object sender, EventArgs e) + private void buttonAddChild_Click(object? sender, EventArgs e) { var item = (KryptonBreadCrumbItem)CreateInstance(typeof(KryptonBreadCrumbItem)); TreeNode newNode = new MenuTreeNode(item); - TreeNode selectedNode = treeView1.SelectedNode; + TreeNode selectedNode = treeView1.SelectedNode!; // If there is no selection then append to root if (selectedNode == null) @@ -747,14 +749,14 @@ private void buttonAddChild_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonDelete_Click(object sender, EventArgs e) + private void buttonDelete_Click(object? sender, EventArgs e) { - TreeNode node = treeView1.SelectedNode; + TreeNode node = treeView1.SelectedNode!; // We should have a selected node! if (node != null) { - var treeNode = node as MenuTreeNode; + MenuTreeNode treeNode = (MenuTreeNode)node; // If at root level then remove from root, otherwise from the parent collection if (node.Parent == null) @@ -764,7 +766,7 @@ private void buttonDelete_Click(object sender, EventArgs e) else { TreeNode parentNode = node.Parent; - var treeParentNode = parentNode as MenuTreeNode; + MenuTreeNode treeParentNode = (MenuTreeNode)parentNode; treeParentNode.Item.Items.Remove(treeNode.Item); node.Parent.Nodes.Remove(node); } @@ -776,7 +778,7 @@ private void buttonDelete_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) + private void treeView1_AfterSelect(object? sender, TreeViewEventArgs e) { UpdateButtons(); UpdatePropertyGrid(); @@ -792,7 +794,7 @@ private void UpdateButtons() private void UpdatePropertyGrid() { - TreeNode node = treeView1.SelectedNode; + TreeNode node = treeView1.SelectedNode!; propertyGrid1.SelectedObject = node == null ? null : new CrumbProxy((KryptonBreadCrumbItem)((MenuTreeNode)node).PropertyObject); } @@ -866,8 +868,7 @@ private void SynchronizeCollections(DictItemBase before, } } - var changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - if (changeService != null) + if (GetService(typeof(IComponentChangeService)) is IComponentChangeService changeService) { // Mark components as changed when not added or removed foreach (KryptonBreadCrumbItem item in after.Values) diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonCheckButtonCollectionEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonCheckButtonCollectionEditor.cs index cd591aadd..265800f8c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonCheckButtonCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonCheckButtonCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,30 +29,29 @@ public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext? conte /// An IServiceProvider that this editor can use to obtain services. /// The object to edit. /// - public override object? EditValue(ITypeDescriptorContext? context, IServiceProvider? provider, object? value) + public override object? EditValue(ITypeDescriptorContext? context, IServiceProvider provider, object? value) { - if ((context?.Instance != null) && (provider != null)) + if (context is not null && provider is not null && value is not null) { // Must use the editor service for showing dialogs - var editorService = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); - - if (editorService != null) + //var editorService = provider.GetService(typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; + if (provider.GetService(typeof(IWindowsFormsEditorService)) is IWindowsFormsEditorService editorService) { // Cast the value to the correct type - var checkSet = (KryptonCheckSet)context.Instance; - - // Create the dialog used to edit the set of KryptonCheckButtons - var dialog = new KryptonCheckButtonCollectionForm(checkSet); - - if (editorService.ShowDialog(dialog) == DialogResult.OK) + if (context.Instance is KryptonCheckSet checkSet) { - // Notify container that value has been changed - context.OnComponentChanged(); + // Create the dialog used to edit the set of KryptonCheckButtons + KryptonCheckButtonCollectionForm dialog = new(checkSet); + + if (editorService.ShowDialog(dialog) == DialogResult.OK) + { + // Notify container that value has been changed + context.OnComponentChanged(); + } } } } - // Return the original value return value; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuCollectionEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuCollectionEditor.cs index 2f2085a79..18a73a6be 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,17 +38,20 @@ public KryptonContextMenuCollectionEditor() /// Gets the data types that this collection editor can contain. /// /// An array of data types that this collection can contain. - protected override Type[] CreateNewItemTypes() => new[] { typeof(KryptonContextMenuItems), - typeof(KryptonContextMenuSeparator), - typeof(KryptonContextMenuHeading), - typeof(KryptonContextMenuLinkLabel), - typeof(KryptonContextMenuCheckBox), - typeof(KryptonContextMenuCheckButton), - typeof(KryptonContextMenuRadioButton), - typeof(KryptonContextMenuColorColumns), - typeof(KryptonContextMenuMonthCalendar), - typeof(KryptonContextMenuImageSelect) - }; + protected override Type[] CreateNewItemTypes() => + [ + typeof(KryptonContextMenuItems), + typeof(KryptonContextMenuItem), + typeof(KryptonContextMenuSeparator), + typeof(KryptonContextMenuHeading), + typeof(KryptonContextMenuLinkLabel), + typeof(KryptonContextMenuCheckBox), + typeof(KryptonContextMenuCheckButton), + typeof(KryptonContextMenuRadioButton), + typeof(KryptonContextMenuColorColumns), + typeof(KryptonContextMenuMonthCalendar), + typeof(KryptonContextMenuImageSelect) + ]; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuItemCollectionEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuItemCollectionEditor.cs index b365e13a0..c5d1ee677 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuItemCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonContextMenuItemCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,8 +29,19 @@ public KryptonContextMenuItemCollectionEditor() /// Gets the data types that this collection editor can contain. /// /// An array of data types that this collection can contain. - protected override Type[] CreateNewItemTypes() => new[] { typeof(KryptonContextMenuItem), - typeof(KryptonContextMenuSeparator), - typeof(KryptonContextMenuHeading) }; + protected override Type[] CreateNewItemTypes() => + [ + typeof(KryptonContextMenuItems), + typeof(KryptonContextMenuItem), + typeof(KryptonContextMenuSeparator), + typeof(KryptonContextMenuHeading), + typeof(KryptonContextMenuLinkLabel), + typeof(KryptonContextMenuCheckBox), + typeof(KryptonContextMenuCheckButton), + typeof(KryptonContextMenuRadioButton), + typeof(KryptonContextMenuColorColumns), + typeof(KryptonContextMenuMonthCalendar), + typeof(KryptonContextMenuImageSelect) + ]; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonInitialDirectoryEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonInitialDirectoryEditor.cs new file mode 100644 index 000000000..438a1fde2 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/KryptonInitialDirectoryEditor.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Windows.Forms.Design +{ + internal class KryptonInitialDirectoryEditor : FolderNameEditor + { + protected override void InitializeDialog(FolderBrowser folderBrowser) + { + folderBrowser.Description = //SR.InitialDirectoryEditorLabel; + @"Select the directory that will initially be opened in the dialog."; + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/PaletteDrawBordersEditor.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/PaletteDrawBordersEditor.cs index 15f09cd5d..70590ce33 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/PaletteDrawBordersEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Editors/PaletteDrawBordersEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,16 +33,18 @@ public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext? conte /// An IServiceProvider that this editor can use to obtain services. /// The object to edit. /// The new value of the object. - public override object? EditValue(ITypeDescriptorContext? context, - IServiceProvider? provider, - object? value) + public override object? EditValue(ITypeDescriptorContext? context, IServiceProvider provider, object? value) { - if ((context != null) && (provider != null) && (value != null)) + // base.EditValue needs a valid reference to provider. + if (provider is null) { - // Grab the service needed to show the drop down - var service = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(provider))); + } - if (service != null) + if ((context is not null) && (value is not null)) + { + // Grab the service needed to show the drop down + if (provider.GetService(typeof(IWindowsFormsEditorService)) is IWindowsFormsEditorService service) { // Create the custom control used to edit value var selector = new PaletteDrawBordersSelector diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonDesignerActionItem.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonDesignerActionItem.cs index f4eeee7ed..2be447bb9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonDesignerActionItem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonDesignerActionItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -69,7 +69,7 @@ public KryptonDesignerActionItem([DisallowNull] DesignerVerb verb, [DisallowNull /// /// Gets the name of the method that this item is associated with. /// - public override string MemberName => null; + public override string? MemberName => null; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerBehavior.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerBehavior.cs index cacdfb800..eb4a26a92 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerBehavior.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerBehavior.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -50,7 +50,13 @@ public override bool OnMouseEnter(Glyph? g) /// true if the message was handled; otherwise, false. public override bool OnMouseDown(Glyph? g, MouseButtons button, Point pt) { - if (_splitContainer != null) + /* + * base.OnMouseMove expects valid references/params and does not handle nulls + * base is in class/assembly System.Windows.Forms.Design.Behavior.Behavior and of course cannot be altered. + */ + + // Glyph g cannot be null, also not in base.OnMouseDown + if (g is not null && _splitContainer is not null) { // Convert the adorner coordinate to the split container client coordinate Point splitPt = PointToSplitContainer(g, pt); @@ -61,9 +67,11 @@ public override bool OnMouseDown(Glyph? g, MouseButtons button, Point pt) // Splitter is starting to be moved, we need to capture mouse input _splitContainer.Capture = true; } + + return base.OnMouseDown(g, button, pt); } - return base.OnMouseDown(g, button, pt); + return false; } /// @@ -75,16 +83,24 @@ public override bool OnMouseDown(Glyph? g, MouseButtons button, Point pt) /// true if the message was handled; otherwise, false. public override bool OnMouseMove(Glyph? g, MouseButtons button, Point pt) { - if (_splitContainer != null) + /* + * base.OnMouseMove expects valid references/params and does not handle nulls + * base is in class/assembly System.Windows.Forms.Design.Behavior.Behavior and of course cannot be altered. + */ + + // Glyph g cannot be null, also not in base.OnMouseDown + if (g is not null && _splitContainer is not null) { // Convert the adorner coordinate to the split container client coordinate Point splitPt = PointToSplitContainer(g, pt); // Notify the split container so it can track mouse message _splitContainer.DesignMouseMove(splitPt); + + return base.OnMouseMove(g, button, pt); } - return base.OnMouseMove(g, button, pt); + return false; } /// diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerGlyph.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerGlyph.cs index c5168fce7..6ec0d07d5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerGlyph.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/KryptonSplitContainerGlyph.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonSplitContainerGlyph : Glyph { #region Instance Fields private readonly KryptonSplitContainer? _splitContainer; - private readonly ISelectionService _selectionService; + private readonly ISelectionService? _selectionService; private readonly BehaviorService _behaviorService; private readonly Adorner _adorner; #endregion @@ -29,23 +29,28 @@ internal class KryptonSplitContainerGlyph : Glyph /// Reference to the behavior service. /// Reference to the containing adorner. /// Reference to the containing designer. - public KryptonSplitContainerGlyph([DisallowNull] ISelectionService selectionService, + public KryptonSplitContainerGlyph([DisallowNull] ISelectionService? selectionService, [DisallowNull] BehaviorService behaviorService, [DisallowNull] Adorner adorner, [DisallowNull] IDesigner relatedDesigner) : base(new KryptonSplitContainerBehavior(relatedDesigner)) { - Debug.Assert(selectionService != null); - Debug.Assert(behaviorService != null); - Debug.Assert(adorner != null); - Debug.Assert(relatedDesigner != null); + Debug.Assert(selectionService is not null); + Debug.Assert(behaviorService is not null); + Debug.Assert(adorner is not null); + Debug.Assert(relatedDesigner is not null); // Remember incoming references - _selectionService = selectionService; - _behaviorService = behaviorService; - _adorner = adorner; + _selectionService = selectionService ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(selectionService))); + _behaviorService = behaviorService ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(behaviorService))); + _adorner = adorner ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(adorner))); // Find the related control + if ( relatedDesigner is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(relatedDesigner))); + } + _splitContainer = relatedDesigner.Component as KryptonSplitContainer; // We want to know whenever the selection has changed or a property has changed @@ -115,9 +120,9 @@ public override Rectangle Bounds #endregion #region Implementation - private void OnSelectionChanged(object sender, EventArgs e) + private void OnSelectionChanged(object? sender, EventArgs e) { - if (_splitContainer != null) + if (_splitContainer is not null && _selectionService is not null) { // Make sure there is no splitter movement occuring _splitContainer.DesignAbortMoving(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/OverrideComboBoxStyleDropDownStyle.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/OverrideComboBoxStyleDropDownStyle.cs index 8d9154557..84a244f6f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/OverrideComboBoxStyleDropDownStyle.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/OverrideComboBoxStyleDropDownStyle.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,20 +29,23 @@ public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext? conte public override object? EditValue(ITypeDescriptorContext? context, IServiceProvider? provider, object? value) { - var svc = (IWindowsFormsEditorService)provider?.GetService(typeof(IWindowsFormsEditorService)); - if (svc != null) + if (provider?.GetService(typeof(IWindowsFormsEditorService)) is IWindowsFormsEditorService svc) { var ctrl = new UserControl(); - var clb = new ListBox { Dock = DockStyle.Fill }; - clb.Items.Add(ComboBoxStyle.DropDown); - clb.Items.Add(ComboBoxStyle.DropDownList); - clb.SelectedIndexChanged += delegate - { - value = Enum.Parse(typeof(ComboBoxStyle), clb.SelectedItem.ToString()); - svc.CloseDropDown(); - }; - ctrl.Controls.Add(clb); - svc.DropDownControl(ctrl); + ListBox clb = new ListBox { Dock = DockStyle.Fill }; + + if (clb is not null && value is not null) + { + clb.Items.Add(ComboBoxStyle.DropDown); + clb.Items.Add(ComboBoxStyle.DropDownList); + clb.SelectedIndexChanged += delegate + { + value = Enum.Parse(typeof(ComboBoxStyle), clb.SelectedItem!.ToString()!); + svc.CloseDropDown(); + }; + ctrl.Controls.Add(clb); + svc.DropDownControl(ctrl); + } } return value; diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.Designer.cs index 8bac68338..d64df728e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.Designer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.cs index 66cf28741..0f49175d1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/Other/PaletteDrawBordersSelector.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.Designer.cs index ba489616c..f9c005858 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.Designer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.cs index 98d93c71f..1b5c7506f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonCheckButtonCollectionForm.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,15 +24,16 @@ private class ListEntry /// CheckButton to encapsulate. public ListEntry([DisallowNull] KryptonCheckButton checkButton) { - Debug.Assert(checkButton != null); - CheckButton = checkButton; + Debug.Assert(checkButton is not null); + + CheckButton = checkButton ?? throw new ArgumentNullException(nameof(checkButton)); } /// /// Gets a string representation of the encapsulated check button. /// /// String instance. - public override string ToString() => $"{CheckButton.Site.Name} (Text: {CheckButton.Text})"; + public override string ToString() => $"{CheckButton.Site!.Name} (Text: {CheckButton.Text})"; #endregion @@ -47,7 +48,7 @@ public ListEntry([DisallowNull] KryptonCheckButton checkButton) #endregion #region Instance Fields - private readonly KryptonCheckSet _checkSet; + private readonly KryptonCheckSet? _checkSet; #endregion #region Identity @@ -62,7 +63,7 @@ public KryptonCheckButtonCollectionForm() /// /// Initialize a new instance of the KryptonCheckButtonCollectionForm class. /// - public KryptonCheckButtonCollectionForm(KryptonCheckSet checkSet) + public KryptonCheckButtonCollectionForm(KryptonCheckSet? checkSet) { // Remember the owning control _checkSet = checkSet; @@ -75,7 +76,7 @@ public KryptonCheckButtonCollectionForm(KryptonCheckSet checkSet) private void KryptonCheckButtonCollectionForm_Load(object sender, EventArgs e) { // Get access to the container of the check set - IContainer container = _checkSet.Container; + IContainer container = _checkSet!.Container!; // Assuming we manage to find a container if (container != null) @@ -101,7 +102,7 @@ private void buttonOK_Click(object sender, EventArgs e) { // Create a copy of the current check set buttons var copy = new List(); - foreach (KryptonCheckButton checkButton in _checkSet.CheckButtons) + foreach (KryptonCheckButton checkButton in _checkSet!.CheckButtons) { copy.Add(checkButton); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonContextMenuCollectionForm.cs b/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonContextMenuCollectionForm.cs index c6c3da451..103aff928 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonContextMenuCollectionForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonContextMenuCollectionForm.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ protected class KryptonContextMenuCollectionForm : CollectionForm /// /// Simple class to reduce the length of declarations! /// - protected class DictItemBase : Dictionary { } + protected class DictItemBase : Dictionary; /// /// Tree node that is attached to a context menu item. @@ -41,8 +41,8 @@ protected class MenuTreeNode : TreeNode public MenuTreeNode([DisallowNull] KryptonContextMenuItemBase item) { Debug.Assert(item != null); - Item = item; - PropertyObject = item; + Item = item!; + PropertyObject = item!; // Setup the initial starting image and description strings ImageIndex = ImageIndexFromItem(); @@ -103,7 +103,7 @@ private int ImageIndexFromItem() return -1; } - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) => + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) => // Update with correct string for new state Text = Item.ToString(); #endregion @@ -161,7 +161,7 @@ public PropertyGridSite(IServiceProvider serviceProvider, /// /// Gets the component associated with the ISite when implemented by a class. /// - public IComponent? Component { get; } + public IComponent Component { get; } /// /// Gets the IContainer associated with the ISite when implemented by a class. @@ -290,7 +290,7 @@ private void InitializeComponent() // imageList // _imageList.TransparentColor = Color.Magenta; - _imageList.Images.AddRange(new Image[]{ + _imageList.Images.AddRange([ GenericKryptonImageResources.KryptonContextMenuColorColumns, GenericKryptonImageResources.KryptonContextMenuHeading, GenericKryptonImageResources.KryptonContextMenuItem, @@ -306,7 +306,7 @@ private void InitializeComponent() GenericKryptonImageResources.KryptonContextMenuImageSelect, GenericKryptonImageResources.KryptonMonthCalendar, GenericKryptonImageResources.KryptonComboBox - }); + ]); // TODO: Do these need updating? _imageList.Images.SetKeyName(0, "KryptonContextMenuColorColumns.bmp"); @@ -517,12 +517,12 @@ private void InitializeComponent() // propertyGrid1 // _propertyGrid1.Dock = DockStyle.Fill; - _propertyGrid1.HelpVisible = false; + _propertyGrid1.HelpVisible = true; _propertyGrid1.Location = new Point(524, 24); _propertyGrid1.Name = "_propertyGrid1"; _propertyGrid1.Size = new Size(289, 658); _propertyGrid1.TabIndex = 15; - _propertyGrid1.ToolbarVisible = false; + _propertyGrid1.ToolbarVisible = true; // // label2 // @@ -637,7 +637,6 @@ private void InitializeComponent() Name = nameof(KryptonContextMenuCollectionForm); StartPosition = FormStartPosition.CenterScreen; Text = @"KryptonContextMenu Items Editor"; - Load += KryptonContextMenuEditorForm_Load; _tableLayoutPanel1.ResumeLayout(false); _tableLayoutPanel1.PerformLayout(); _panel1.ResumeLayout(false); @@ -660,7 +659,7 @@ protected override void OnEditValueChanged() // Need to link the property browser to a site otherwise Image properties cannot be // edited because it cannot navigate to the owning project for its resources - _propertyGrid1.Site = new PropertyGridSite(Context, _propertyGrid1); + _propertyGrid1.Site = new PropertyGridSite(Context!, _propertyGrid1); // Add all the top level clones _treeView.Nodes.Clear(); @@ -685,11 +684,8 @@ protected override void OnEditValueChanged() #endregion #region Implementation - private void KryptonContextMenuEditorForm_Load(object sender, EventArgs e) => - // Set allowed categories into the property grid filter - _propertyGrid1.BrowsableAttributes = new AttributeCollection(new KryptonPersistAttribute()); - private void buttonOK_Click(object sender, EventArgs e) + private void buttonOK_Click(object? sender, EventArgs e) { // Create an array with all the root items var rootItems = new object[_treeView.Nodes.Count]; @@ -708,23 +704,21 @@ private void buttonOK_Click(object sender, EventArgs e) _treeView.Nodes.Clear(); // Inform designer of changes in component items - SynchronizeCollections(_beforeItems, afterItems, Context); + SynchronizeCollections(_beforeItems, afterItems, Context!); // Notify container that the value has been changed - Context.OnComponentChanged(); + Context!.OnComponentChanged(); } - private void buttonMoveUp_Click(object sender, EventArgs e) + private void buttonMoveUp_Click(object? sender, EventArgs e) { - TreeNode node = _treeView.SelectedNode; - // We should have a selected node! - if (node != null) + if (_treeView.SelectedNode is MenuTreeNode node) { - var treeNode = node as MenuTreeNode; + var treeNode = (MenuTreeNode)node; // If at the root level then move up in the root items collection - if (node.Parent == null) + if (node.Parent is null) { var index = _treeView.Nodes.IndexOf(node); _treeView.Nodes.Remove(node); @@ -734,7 +728,7 @@ private void buttonMoveUp_Click(object sender, EventArgs e) { var index = node.Parent.Nodes.IndexOf(node); TreeNode parentNode = node.Parent; - var treeParentNode = parentNode as MenuTreeNode; + var treeParentNode = (MenuTreeNode)parentNode; switch (treeParentNode?.Item) { @@ -742,6 +736,7 @@ private void buttonMoveUp_Click(object sender, EventArgs e) items1.Items.Remove(treeNode.Item); items1.Items.Insert(index - 1, treeNode.Item); break; + case KryptonContextMenuItem items: items.Items.Remove(treeNode.Item); items.Items.Insert(index - 1, treeNode.Item); @@ -760,14 +755,12 @@ private void buttonMoveUp_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonMoveDown_Click(object sender, EventArgs e) + private void buttonMoveDown_Click(object? sender, EventArgs e) { - TreeNode node = _treeView.SelectedNode; - // We should have a selected node! - if (node != null) + if (_treeView.SelectedNode is MenuTreeNode node) { - var treeNode = node as MenuTreeNode; + var treeNode = (MenuTreeNode)node; // If at the root level then move down in the root items collection if (node.Parent == null) @@ -788,6 +781,7 @@ private void buttonMoveDown_Click(object sender, EventArgs e) items1.Items.Remove(treeNode.Item); items1.Items.Insert(index + 1, treeNode.Item); break; + case KryptonContextMenuItem items: items.Items.Remove(treeNode.Item); items.Items.Insert(index + 1, treeNode.Item); @@ -806,38 +800,36 @@ private void buttonMoveDown_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonAddItem_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuItem))); + private void buttonAddItem_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuItem))); - private void buttonAddItems_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuItems))); + private void buttonAddItems_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuItems))); - private void buttonAddHeading_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuHeading))); + private void buttonAddHeading_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuHeading))); - private void buttonAddMonthCalendar_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuMonthCalendar))); + private void buttonAddMonthCalendar_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuMonthCalendar))); - private void buttonAddSeparator_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuSeparator))); + private void buttonAddSeparator_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuSeparator))); - private void buttonAddCheckBox_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuCheckBox))); + private void buttonAddCheckBox_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuCheckBox))); - private void buttonAddCheckButton_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuCheckButton))); + private void buttonAddCheckButton_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuCheckButton))); - private void buttonAddRadioButton_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuRadioButton))); + private void buttonAddRadioButton_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuRadioButton))); - private void buttonAddLinkLabel_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuLinkLabel))); + private void buttonAddLinkLabel_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuLinkLabel))); - private void buttonAddColorColumns_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuColorColumns))); + private void buttonAddColorColumns_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuColorColumns))); - private void buttonAddImageSelect_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuImageSelect))); + private void buttonAddImageSelect_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuImageSelect))); - private void buttonAddComboBox_Click(object sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuComboBox))); + private void buttonAddComboBox_Click(object? sender, EventArgs e) => AddNewItem((KryptonContextMenuItemBase)CreateInstance(typeof(KryptonContextMenuComboBox))); - private void buttonDelete_Click(object sender, EventArgs e) + private void buttonDelete_Click(object? sender, EventArgs e) { - TreeNode node = _treeView.SelectedNode; - // We should have a selected node! - if (node != null) + if (_treeView.SelectedNode is MenuTreeNode node) { - var treeNode = node as MenuTreeNode; + var treeNode = (MenuTreeNode)node; // If at root level then remove from root, otherwise from the parent collection if (node.Parent == null) @@ -854,6 +846,7 @@ private void buttonDelete_Click(object sender, EventArgs e) case KryptonContextMenuItems items1: items1.Items.Remove(treeNode.Item); break; + case KryptonContextMenuItem items: items.Items.Remove(treeNode.Item); break; @@ -869,7 +862,7 @@ private void buttonDelete_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void SelectionChanged(object sender, TreeViewEventArgs e) + private void SelectionChanged(object? sender, TreeViewEventArgs e) { UpdateButtons(); UpdatePropertyGrid(); @@ -877,8 +870,11 @@ private void SelectionChanged(object sender, TreeViewEventArgs e) private void UpdatePropertyGrid() { - TreeNode node = _treeView.SelectedNode; - _propertyGrid1.SelectedObject = ((MenuTreeNode)node)?.PropertyObject; + if (_treeView.SelectedNode is MenuTreeNode node) + { + var propertyObject = ((MenuTreeNode)node)?.PropertyObject!; + _propertyGrid1.SelectedObject = propertyObject; + } } private void AddMenuTreeNode(KryptonContextMenuItemBase item, MenuTreeNode? parent) @@ -905,6 +901,7 @@ private void AddMenuTreeNode(KryptonContextMenuItemBase item, MenuTreeNode? pare AddMenuTreeNode(child, node); } break; + case KryptonContextMenuItem itemsCollection: foreach (KryptonContextMenuItemBase child in itemsCollection.Items) { @@ -916,7 +913,7 @@ private void AddMenuTreeNode(KryptonContextMenuItemBase item, MenuTreeNode? pare private void AddNewItem(KryptonContextMenuItemBase item) { - TreeNode selectedNode = _treeView.SelectedNode; + TreeNode? selectedNode = _treeView.SelectedNode; TreeNode newNode = new MenuTreeNode(item); // If there is no selection then append to root @@ -959,13 +956,14 @@ private void AddNewItem(KryptonContextMenuItemBase item) } else { - var treeSelectedNode = selectedNode as MenuTreeNode; - Debug.Assert(treeSelectedNode?.Item is KryptonContextMenuItem); - var items = treeSelectedNode.Item as KryptonContextMenuItem; + var treeSelectedNode = (MenuTreeNode)selectedNode; + Debug.Assert(treeSelectedNode.Item is KryptonContextMenuItem); + var items = (KryptonContextMenuItem)treeSelectedNode.Item; items!.Items.Add(item); selectedNode.Nodes.Add(newNode); } break; + case KryptonContextMenuItem items2: if (ValidInCollection(item)) { @@ -974,8 +972,8 @@ private void AddNewItem(KryptonContextMenuItemBase item) } else { - var treeSelectedNode = selectedNode as MenuTreeNode; - Debug.Assert(treeSelectedNode?.Item is KryptonContextMenuItems); + var treeSelectedNode = (MenuTreeNode)selectedNode; + Debug.Assert(treeSelectedNode.Item is KryptonContextMenuItems); var items = treeSelectedNode.Item as KryptonContextMenuItems; items!.Items.Add(item); selectedNode.Nodes.Add(newNode); @@ -999,7 +997,9 @@ private void UpdateButtons() var parentNodeCount = _treeView.Nodes.Count; var nodeIndex = -1; - if (_treeView.SelectedNode is MenuTreeNode node) + // ReSharper disable once UsePatternMatching + MenuTreeNode? node = _treeView.SelectedNode as MenuTreeNode; + if (node != null) { item = node.Item; nodeIndex = _treeView.Nodes.IndexOf(node); @@ -1007,7 +1007,7 @@ private void UpdateButtons() { parentNodeCount = node.Parent.Nodes.Count; nodeIndex = node.Parent.Nodes.IndexOf(node); - node = node.Parent! as MenuTreeNode; + node = node.Parent as MenuTreeNode; if (node != null) { parent = node.Item; @@ -1031,11 +1031,11 @@ private void UpdateButtons() _buttonDelete.Enabled = item != null; } - private bool AllowAddItem(KryptonContextMenuItemBase item, - KryptonContextMenuItemBase parent, + private bool AllowAddItem(KryptonContextMenuItemBase? item, + KryptonContextMenuItemBase? parent, Type addType) { - // Special case the you can use add button on an Items collection so it adds an item inside it + // Special case: you can use add button on an Items collection so it adds an item inside it if ((item is KryptonContextMenuItems) && addType.Equals(typeof(KryptonContextMenuItem))) { return true; @@ -1076,9 +1076,9 @@ private bool ValidInItemCollection(KryptonContextMenuItemBase item) return temp.RestrictTypes.Any(t => t.Equals(addType)); } - private bool ItemInsideCollection(KryptonContextMenuItemBase item, - KryptonContextMenuItemBase parent) => - // If it has no parent the it must be inside a collection + private bool ItemInsideCollection(KryptonContextMenuItemBase? item, + KryptonContextMenuItemBase? parent) => + // If it has no parent then it must be inside a collection // If inside an items then not inside a collection parent is not KryptonContextMenuItems; @@ -1137,11 +1137,10 @@ private void SynchronizeCollections(DictItemBase before, context.Container?.Remove(item); } - var changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); - if (changeService != null) + if (GetService(typeof(IComponentChangeService)) is IComponentChangeService changeService) { // Mark components as changed when not added or removed - foreach (KryptonContextMenuItemBase item in after.Values.Where(item => before.ContainsKey(item))) + foreach (KryptonContextMenuItemBase item in after.Values.Where(before.ContainsKey)) { changeService.OnComponentChanging(item, null); changeService.OnComponentChanged(item, null, null, null); diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/BreadCrumbMenuArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/BreadCrumbMenuArgs.cs index 8ae8369a7..c46ba8468 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/BreadCrumbMenuArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/BreadCrumbMenuArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragOffsetEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragOffsetEventArgs.cs index a0a92ffb5..56fac54cd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragOffsetEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragOffsetEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragRectangleEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragRectangleEventArgs.cs index f1cf7ada8..7f42cafaf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragRectangleEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonDragRectangleEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonSpecEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonSpecEventArgs.cs index 05175caf9..2453b91e9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonSpecEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ButtonSpecEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public ButtonSpecEventArgs([DisallowNull] ButtonSpec spec, int index) Debug.Assert(index >= 0); // Remember parameter details - ButtonSpec = spec; + ButtonSpec = spec ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(spec))); Index = index; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/CloseReasonEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/CloseReasonEventArgs.cs index e3ed0f418..9d56a7d8c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/CloseReasonEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/CloseReasonEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ColorEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ColorEventArgs.cs index 8d4c9a9bb..e61e400cf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ColorEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ColorEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextMenuArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextMenuArgs.cs index 9d0443e7d..f398f251e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextMenuArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextMenuArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextPositionMenuArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextPositionMenuArgs.cs index ed87149cd..ce85aa665 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextPositionMenuArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ContextPositionMenuArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/DataGridViewButtonSpecClickEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/DataGridViewButtonSpecClickEventArgs.cs index 5c766585d..2722733ad 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/DataGridViewButtonSpecClickEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/DataGridViewButtonSpecClickEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerCloseArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerCloseArgs.cs index d95ce5660..7a70e90d5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerCloseArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerCloseArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerDropArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerDropArgs.cs index e3177c653..3bfb9078c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerDropArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/DateTimePickerDropArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/HoveredSelectionChangedEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/HoveredSelectionChangedEventArgs.cs index bd975a508..34ceea835 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/HoveredSelectionChangedEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/HoveredSelectionChangedEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ImageSelectEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ImageSelectEventArgs.cs index 83b75e941..9a3e3db43 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ImageSelectEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ImageSelectEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class ImageSelectEventArgs : EventArgs /// /// Defined image list. /// Index within the image list. - public ImageSelectEventArgs(ImageList imageList, int imageIndex) + public ImageSelectEventArgs(ImageList? imageList, int imageIndex) { ImageList = imageList; ImageIndex = imageIndex; diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/NeedLayoutEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/NeedLayoutEventArgs.cs index 6a67b37b9..53a54bde9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/NeedLayoutEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/NeedLayoutEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/CollapsedEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/CollapsedEventArgs.cs new file mode 100644 index 000000000..45e74d863 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/CollapsedEventArgs.cs @@ -0,0 +1,39 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for Node collapsed events + /// + /// + public class CollapsedEventArgs : OutlookGridRowNodeEventBase + { + /// + /// Initializes a new instance of the class. + /// + /// The node. + public CollapsedEventArgs(OutlookGridRow node) + : base(node) + { + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/CollapsingEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/CollapsingEventArgs.cs new file mode 100644 index 000000000..3f7a9d028 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/CollapsingEventArgs.cs @@ -0,0 +1,39 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for Node collapsing events + /// + /// + public class CollapsingEventArgs : OutlookGridRowNodeCancelEventBase + { + /// + /// Initializes a new instance of the class. + /// + /// The node. + public CollapsingEventArgs(OutlookGridRow node) + : base(node) + { + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/ExpandedEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/ExpandedEventArgs.cs new file mode 100644 index 000000000..1394b0c28 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/ExpandedEventArgs.cs @@ -0,0 +1,38 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for Node expanding events + /// + /// + public class ExpandedEventArgs : OutlookGridRowNodeEventBase + { + /// + /// Initializes a new instance of the class. + /// + /// The node. + public ExpandedEventArgs(OutlookGridRow node) : base(node) + { + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/ExpandingEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/ExpandingEventArgs.cs new file mode 100644 index 000000000..54936d0df --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/ExpandingEventArgs.cs @@ -0,0 +1,38 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for Node expanding events + /// + /// + public class ExpandingEventArgs : OutlookGridRowNodeCancelEventBase + { + /// + /// Initializes a new instance of the class. + /// + /// The node. + public ExpandingEventArgs(OutlookGridRow node) : base(node) + { + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridColumnEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridColumnEventArgs.cs new file mode 100644 index 000000000..50732f54f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridColumnEventArgs.cs @@ -0,0 +1,49 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for events of the column in the groupbox. + /// + public class OutlookGridColumnEventArgs : EventArgs + { + private OutlookGridColumn _column; + + /// + /// Constructor + /// + /// The OutlookGridColumn. + public OutlookGridColumnEventArgs(OutlookGridColumn col) + { + _column = col; + } + + /// + /// Gets or sets the name of the column. + /// + public OutlookGridColumn Column + { + get => _column; + set => _column = value; + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridGroupImageEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridGroupImageEventArgs.cs new file mode 100644 index 000000000..f60f9f2f0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridGroupImageEventArgs.cs @@ -0,0 +1,49 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for events of the group image of a group row. + /// + public class OutlookGridGroupImageEventArgs : EventArgs + { + private OutlookGridRow _row; + + /// + /// Constructor + /// + /// The OutlookGridRow. + public OutlookGridGroupImageEventArgs(OutlookGridRow row) + { + _row = row; + } + + /// + /// Gets or sets the row. + /// + public OutlookGridRow Row + { + get => _row; + set => _row = value; + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridRowNodeCancelEventBase.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridRowNodeCancelEventBase.cs new file mode 100644 index 000000000..c3520f383 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridRowNodeCancelEventBase.cs @@ -0,0 +1,49 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Base class OutlookGridRowNode cancellable events + /// + /// + public class OutlookGridRowNodeCancelEventBase : CancelEventArgs + { + private OutlookGridRow _row; + + /// + /// Initializes a new instance of the class. + /// + /// The node. + public OutlookGridRowNodeCancelEventBase(OutlookGridRow node) + { + _row = node; + } + + /// + /// Gets the node. + /// + /// + /// The node. + /// + public OutlookGridRow Node => _row; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridRowNodeEventBase.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridRowNodeEventBase.cs new file mode 100644 index 000000000..574fa909c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/OutlookGrid/OutlookGridRowNodeEventBase.cs @@ -0,0 +1,49 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Base class for OutlookGridRowNode events + /// + /// + public class OutlookGridRowNodeEventBase : EventArgs + { + private OutlookGridRow _row; + + /// + /// Initializes a new instance of the class. + /// + /// The node. + public OutlookGridRowNodeEventBase(OutlookGridRow node) + { + _row = node; + } + + /// + /// Gets the node. + /// + /// + /// The node. + /// + public OutlookGridRow Node => _row; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PaletteLayoutEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PaletteLayoutEventArgs.cs index 928dd70c3..27091ba14 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PaletteLayoutEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PaletteLayoutEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventArgs.cs index 859d23845..51353b7c2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventCancelArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventCancelArgs.cs index 1026c64b8..069f9c138 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventCancelArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointEventCancelArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointOffsetEventCancelArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointOffsetEventCancelArgs.cs index 30b2dc013..110c19bd5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointOffsetEventCancelArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/PointOffsetEventCancelArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/SplitterMoveRectEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/SplitterMoveRectEventArgs.cs index 3dc4d39d0..79afbc540 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/SplitterMoveRectEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/SplitterMoveRectEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ToolTipNeededEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ToolTipNeededEventArgs.cs index 0910ca2bc..d6b3101bd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ToolTipNeededEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ToolTipNeededEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/TooltipEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/TooltipEventArgs.cs index bef5f474c..ff13318b9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/TooltipEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/TooltipEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/TypedCollectionEventArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/TypedCollectionEventArgs.cs index ef8dbf345..c6834f7a6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/TypedCollectionEventArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/TypedCollectionEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ViewControlHitTestArgs.cs b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ViewControlHitTestArgs.cs index 94e17206c..f205a4d7d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/EventArgs/ViewControlHitTestArgs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/EventArgs/ViewControlHitTestArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/AntiAlias.cs b/Source/Krypton Components/Krypton.Toolkit/General/AntiAlias.cs index d2671703d..d6049dd5d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/AntiAlias.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/AntiAlias.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,7 @@ public class AntiAlias : GlobalId, public AntiAlias(Graphics? g) { _g = g; - _old = _g.SmoothingMode; + _old = _g!.SmoothingMode; _g.SmoothingMode = SmoothingMode.AntiAlias; } @@ -52,45 +52,4 @@ public void Dispose() } #endregion } - - /// - /// Set the SmoothingMode=None until instance disposed. - /// - public class AntiAliasNone : GlobalId, - IDisposable - { - #region Instance Fields - private readonly Graphics _g; - private readonly SmoothingMode _old; - #endregion - - #region Identity - /// - /// Initialize a new instance of the AntiAliasNone class. - /// - /// Graphics instance. - public AntiAliasNone(Graphics g) - { - _g = g; - _old = _g.SmoothingMode; - _g.SmoothingMode = SmoothingMode.None; - } - - /// - /// Revert the SmoothingMode back to original setting. - /// - public void Dispose() - { - if (_g != null) - { - try - { - _g.SmoothingMode = _old; - } - catch { } - } - GC.SuppressFinalize(this); - } - #endregion - } } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/BlurManager.cs b/Source/Krypton Components/Krypton.Toolkit/General/BlurManager.cs index 3be9beb30..aa290ef19 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/BlurManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/BlurManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,7 +20,7 @@ internal class BlurManager #region Instance Fields private readonly VisualForm _parentForm; private readonly BlurValues _blurValues; - private VisualBlur _visualBlur; + private VisualBlur? _visualBlur; private readonly System.Windows.Forms.Timer _detectIsActiveTimer; private Bitmap? _currentFormDisplay; private double? _parentBeforeOpacity; @@ -63,7 +63,7 @@ internal void SetBlurState(bool parentIsActive) #endregion Identity - private void KryptonFormOnClosing(object sender, /*Cancel*/EventArgs e) => RemoveBlur(); + private void KryptonFormOnClosing(object? sender, /*Cancel*/EventArgs e) => RemoveBlur(); private void RemoveBlur() { @@ -105,7 +105,7 @@ public bool IsOverlapped() visited.Add(activeForm.Handle); } - visited.Add(_visualBlur.Handle); + visited.Add(_visualBlur!.Handle); var thisRect = new PI.RECT(); @@ -135,7 +135,7 @@ public bool IsOverlapped() } } - private void BlurValuesOnOpacityChanged(object sender, EventArgs e) + private void BlurValuesOnOpacityChanged(object? sender, EventArgs e) { if (_visualBlur != null) { @@ -144,7 +144,7 @@ private void BlurValuesOnOpacityChanged(object sender, EventArgs e) } } - private void BlurValues_EnableBlurChanged(object sender, EventArgs e) + private void BlurValues_EnableBlurChanged(object? sender, EventArgs e) { if (!_blurValues.BlurWhenFocusLost) { @@ -152,7 +152,7 @@ private void BlurValues_EnableBlurChanged(object sender, EventArgs e) } } - private void DetectIsTopMost(object sender, EventArgs e) + private void DetectIsTopMost(object? sender, EventArgs e) { if ((_visualBlur != null) && IsOverlapped() @@ -177,7 +177,7 @@ private void DoTheBlur() _visualBlur.SetTargetRect(_parentForm.DesktopLocation, clientRectangle); Rectangle targetRect = _visualBlur.TargetRect; - _visualBlur.UpdateBlur(_currentFormDisplay); + _visualBlur.UpdateBlur(_currentFormDisplay!); // As UpdateBlur can take a few moments, then it is possible for the app to be closed before getting to the next line if ((_visualBlur == null) || _parentForm.IsDisposed diff --git a/Source/Krypton Components/Krypton.Toolkit/General/BoolFlags31.cs b/Source/Krypton Components/Krypton.Toolkit/General/BoolFlags31.cs index ffab72e7e..d5afa5341 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/BoolFlags31.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/BoolFlags31.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Clipping.cs b/Source/Krypton Components/Krypton.Toolkit/General/Clipping.cs index ca3a89fa6..341dd1abe 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Clipping.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Clipping.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -161,9 +161,9 @@ public void Dispose() try { // Restore the original clipping region - _graphics.Clip = _previousRegion; + _graphics.Clip = _previousRegion!; } - catch(Exception ex) + catch (Exception ex) { CommonHelper.LogOutput(ex.Message); } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/CommonHelper.cs b/Source/Krypton Components/Krypton.Toolkit/General/CommonHelper.cs index 970b414c9..42893a93f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/CommonHelper.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/CommonHelper.cs @@ -5,12 +5,13 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion // ReSharper disable UnusedMember.Global + namespace Krypton.Toolkit { #region Delegates @@ -24,7 +25,7 @@ namespace Krypton.Toolkit /// /// Operation parameter. /// Operation result. - public delegate object? Operation(object? parameter); + public delegate object Operation(object? parameter); /// /// Signature of a method that returns a ToolStripRenderer instance. @@ -42,7 +43,8 @@ public static class CommonHelper private const int VK_CONTROL = 0x11; private const int VK_MENU = 0x12; - private static readonly char[] _singleDateFormat = { 'd', 'f', 'F', 'g', 'h', 'H', 'K', 'm', 'M', 's', 't', 'y', 'z' }; + private static readonly char[] _singleDateFormat = ['d', 'f', 'F', 'g', 'h', 'H', 'K', 'm', 'M', 's', 't', 'y', 'z' + ]; //private static readonly int[] _daysInMonth = new int[12] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 }; private static int _nextId = 1000; @@ -84,11 +86,10 @@ public static ColorMatrix MatrixDisabled { [DebuggerStepThrough] get; - } = new ColorMatrix(new[] - { - new[] { 0.3f, 0.3f, 0.3f, 0, 0 }, new[] { 0.59f, 0.59f, 0.59f, 0, 0 }, - new[] { 0.11f, 0.11f, 0.11f, 0, 0 }, new[] { 0, 0, 0, 0.5f, 0 }, new float[] { 0, 0, 0, 0, 1 } - }); + } = new ColorMatrix([ + [0.3f, 0.3f, 0.3f, 0, 0], [0.59f, 0.59f, 0.59f, 0, 0], + [0.11f, 0.11f, 0.11f, 0, 0], [0, 0, 0, 0.5f, 0], [0, 0, 0, 0, 1] + ]); /// /// Gets the next global identifier in sequence. @@ -99,6 +100,42 @@ public static int NextId get => _nextId++; } + /// + /// Converts line breaks in the string to the system default line break, Environment.NewLine. + /// + /// String to process. + /// + /// Normalized resultant string.
+ /// If the input string is an empty string, the input string is returned. + ///
+ public static string NormalizeLineBreaks(string text) + { + string result = text; + + if (result.Length > 0) + { + // Convert line breaks to the system provided line break + if (!Environment.NewLine.Equals("\r\n")) + { + result = Regex.Replace(result, @"\r\n", Environment.NewLine); + } + + if (!Environment.NewLine.Equals("\n")) + { + // Replaces \n but not \r\n + result = Regex.Replace(result, "(? /// Gets a string that is guaranteed to be unique. ///
@@ -123,7 +160,7 @@ public static Padding InheritPadding } = new Padding(-1); /// - /// Check a short cut menu for a matching short and invoke that item if found. + /// Check a short-cut menu for a matching short and invoke that item if found. /// /// ContextMenuStrip instance to check. /// Windows message that generated check. @@ -149,11 +186,27 @@ public static bool CheckContextMenuForShortcut(ContextMenuStrip? cms, } // Get any menu item from context strip that matches the shortcut key combination - var shortcuts = (Hashtable)_cachedShortcutPI!.GetValue(cms, null); - var menuItem = (ToolStripMenuItem)shortcuts[keyData]; + var hashTableShortCuts = _cachedShortcutPI!.GetValue(cms, null) as Hashtable; + ToolStripMenuItem? menuItem = null; + + if (hashTableShortCuts is null) + { + if (_cachedShortcutPI.GetValue(cms, null) is Dictionary dictionaryShortcuts) + { + dictionaryShortcuts.TryGetValue(keyData, out menuItem); + } + else + { + return false; + } + } + else + { + menuItem = hashTableShortCuts[keyData] as ToolStripMenuItem; + } // If we found a match... - if (menuItem != null) + if (menuItem is not null) { // Get the menu item to process the shortcut var ret = _cachedShortcutMI!.Invoke(menuItem, new object[] { msg, keyData }); @@ -201,6 +254,7 @@ public static Size ApplyPadding(Orientation orientation, Size size, Padding padd default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); break; } } @@ -239,6 +293,7 @@ public static Size ApplyPadding(VisualOrientation orientation, default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); break; } } @@ -279,6 +334,7 @@ public static Rectangle ApplyPadding(Orientation orientation, default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); break; } } @@ -323,6 +379,7 @@ public static Rectangle ApplyPadding(VisualOrientation orientation, default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); break; } } @@ -352,6 +409,7 @@ public static Padding OrientatePadding(VisualOrientation orientation, default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); return padding; } } @@ -411,7 +469,7 @@ public static bool ValidKryptonContextMenu(KryptonContextMenu? kcm) => /// Delegate of operation to be performed. /// Parameter to be passed into the operation. /// Result of performing the operation. - public static object? PerformOperation(Operation op, object? parameter) + public static object PerformOperation(Operation op, object? parameter) { // Create a modal window for showing feedback using var wait = new ModalWaitDialog(); @@ -444,7 +502,7 @@ public static bool ValidKryptonContextMenu(KryptonContextMenu? kcm) => default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(opThread.State.ToString()); } } @@ -544,13 +602,13 @@ public static bool HasOneBorder(PaletteDrawBorders borders) public static PaletteDrawBorders OrientateDrawBorders(PaletteDrawBorders borders, VisualOrientation orientation) { - // No need to perform an change for top orientation + // No need to perform a change for top orientation if (orientation == VisualOrientation.Top) { return borders; } - // No need to change the All or None values + // No need to change All or None values if (borders is PaletteDrawBorders.All or PaletteDrawBorders.None) { return borders; @@ -582,8 +640,8 @@ public static PaletteDrawBorders OrientateDrawBorders(PaletteDrawBorders borders { ret |= PaletteDrawBorders.Left; } - break; + case VisualOrientation.Left: // Rotate one anti-clockwise if (HasTopBorder(borders)) @@ -605,8 +663,8 @@ public static PaletteDrawBorders OrientateDrawBorders(PaletteDrawBorders borders { ret |= PaletteDrawBorders.Top; } - break; + case VisualOrientation.Right: // Rotate sides one clockwise if (HasTopBorder(borders)) @@ -628,11 +686,12 @@ public static PaletteDrawBorders OrientateDrawBorders(PaletteDrawBorders borders { ret |= PaletteDrawBorders.Bottom; } - break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); break; } @@ -648,13 +707,13 @@ public static PaletteDrawBorders OrientateDrawBorders(PaletteDrawBorders borders public static PaletteDrawBorders ReverseOrientateDrawBorders(PaletteDrawBorders borders, VisualOrientation orientation) { - // No need to perform an change for top orientation + // No need to perform a change for top orientation if (orientation == VisualOrientation.Top) { return borders; } - // No need to change the All or None values + // No need to change the "All" or "None" values if (borders is PaletteDrawBorders.All or PaletteDrawBorders.None) { return borders; @@ -686,8 +745,8 @@ public static PaletteDrawBorders ReverseOrientateDrawBorders(PaletteDrawBorders { ret |= PaletteDrawBorders.Left; } - break; + case VisualOrientation.Right: // Rotate one anti-clockwise if (HasTopBorder(borders)) @@ -709,8 +768,8 @@ public static PaletteDrawBorders ReverseOrientateDrawBorders(PaletteDrawBorders { ret |= PaletteDrawBorders.Top; } - break; + case VisualOrientation.Left: // Rotate sides one clockwise if (HasTopBorder(borders)) @@ -732,11 +791,12 @@ public static PaletteDrawBorders ReverseOrientateDrawBorders(PaletteDrawBorders { ret |= PaletteDrawBorders.Bottom; } - break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); break; } @@ -761,6 +821,7 @@ public static Orientation VisualToOrientation(VisualOrientation orientation) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); return Orientation.Vertical; } } @@ -811,6 +872,7 @@ public static PaletteButtonStyle ButtonStyleToPalette(ButtonStyle style) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); return PaletteButtonStyle.Standalone; } } @@ -985,7 +1047,7 @@ public static Color BlackenColor(Color color1, public static Color MergeColors(Color color1, float percent1, Color color2, float percent2) => // Use existing three color merge - MergeColors(color1, percent1, color2, percent2, Color.Empty, 0f); + MergeColors(color1, percent1, color2, percent2, GlobalStaticValues.EMPTY_COLOR, 0f); /// /// Merge three colors together using relative percentages. @@ -1116,27 +1178,27 @@ select GetControlWithFocus(child) /// /// Parent control. /// Control to be added. - public static void AddControlToParent([DisallowNull] Control parent, [DisallowNull] Control c) + public static void AddControlToParent([DisallowNull] Control parent, [DisallowNull] Control? c) { Debug.Assert(parent != null); Debug.Assert(c != null); // If the control is already inside a control collection, then remove it - if (c!.Parent != null) + if (c?.Parent != null) { RemoveControlFromParent(c); } // Then must use the internal method for adding a new instance // If the control collection is one of our internal collections... - if (parent!.Controls is KryptonControlCollection cc) + if (parent?.Controls is KryptonControlCollection cc) { - cc.AddInternal(c); + cc.AddInternal(c!); } else { // Inside a standard collection, add it the usual way - parent.Controls.Add(c); + parent?.Controls?.Add(c!); } } @@ -1144,7 +1206,7 @@ public static void AddControlToParent([DisallowNull] Control parent, [DisallowNu /// Remove the provided control from its parent collection. ///
/// Control to be removed. - public static void RemoveControlFromParent([DisallowNull] Control c) + public static void RemoveControlFromParent([DisallowNull] Control? c) { Debug.Assert(c != null); @@ -1169,21 +1231,37 @@ public static void RemoveControlFromParent([DisallowNull] Control c) /// Gets the size of the borders requested by the real window. ///
/// Window style parameters. + /// Optional VisualForm base to detect usage of Chrome drawing /// Border sizing. - public static Padding GetWindowBorders(CreateParams cp) + public static Padding GetWindowBorders(CreateParams cp, KryptonForm? form) { + int xOffset = 0; + int yOffset = 0; + uint dwStyle = (uint)cp.Style; + if (form is { StateCommon.Border: PaletteFormBorder formBorder } kryptonForm) + { + if (!CommonHelper.IsFormMaximized(kryptonForm)) + { + var (xOffset1, yOffset1) = formBorder.BorderWidths(kryptonForm.FormBorderStyle); + xOffset = Math.Max(0, xOffset1); + yOffset = Math.Max(0, yOffset1); + } + else //if (kryptonForm.FormBorderStyle == FormBorderStyle.None ) + { + dwStyle |= PI.WS_.CAPTION; + } + } + var rect = new PI.RECT { // Start with a zero sized rectangle - left = 0, - right = 0, - top = 0, - bottom = 0 + left = -xOffset, + right = xOffset, + top = -yOffset, + bottom = yOffset }; - // Adjust rectangle to add on the borders required - PI.AdjustWindowRectEx(ref rect, cp.Style, false, cp.ExStyle); - + PI.AdjustWindowRectEx(ref rect, dwStyle, false, cp.ExStyle); // Return the per side border values return new Padding(-rect.left, -rect.top, rect.right, rect.bottom); } @@ -1197,7 +1275,7 @@ public static bool IsFormMinimized(Form f) { // Get the current window style (cannot use the // WindowState property as it can be slightly out of date) - var style = PI.GetWindowLong(f.Handle, PI.GWL_.STYLE); + uint style = f.IsDisposed ? 0 : PI.GetWindowLong(f.Handle, PI.GWL_.STYLE); return (style & PI.WS_.MINIMIZE) != 0; } @@ -1211,12 +1289,11 @@ public static bool IsFormMaximized(Form f) { // Get the current window style (cannot use the // WindowState property as it can be slightly out of date) - var style = PI.GetWindowLong(f.Handle, PI.GWL_.STYLE); + uint style = f.IsDisposed ? 0 : PI.GetWindowLong(f.Handle, PI.GWL_.STYLE); return (style & PI.WS_.MAXIMIZE) != 0; } - /// /// Gets the real client rectangle of the list. /// @@ -1234,7 +1311,6 @@ public static Rectangle RealClientRectangle(IntPtr handle) windowRect.bottom - windowRect.top); } - /// /// Find the appropriate content style to match the incoming label style. /// @@ -1281,6 +1357,7 @@ public static PaletteContentStyle ContentStyleFromLabelStyle(LabelStyle style) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); return PaletteContentStyle.LabelNormalPanel; } } @@ -1304,11 +1381,10 @@ public static TextRenderingHint PaletteTextHintToRenderingHint(PaletteTextHint h return TextRenderingHint.SingleBitPerPixel; case PaletteTextHint.SingleBitPerPixelGridFit: return TextRenderingHint.SingleBitPerPixelGridFit; - case PaletteTextHint.SystemDefault: - return TextRenderingHint.SystemDefault; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(hint.ToString()); return TextRenderingHint.SystemDefault; } } @@ -1337,6 +1413,7 @@ public static PaletteMetricPadding SeparatorStyleToMetricPadding(SeparatorStyle default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(separatorStyle.ToString()); return PaletteMetricPadding.SeparatorPaddingLowProfile; } } @@ -1346,10 +1423,10 @@ public static PaletteMetricPadding SeparatorStyleToMetricPadding(SeparatorStyle ///
/// Incoming format. /// Corrected format. - public static string MakeCustomDateFormat(string format) + public static string MakeCustomDateFormat(string? format) { // Is this a single character format? - if (format.Length == 1) + if (format!.Length == 1) { // If the character is one of the predefined entries... if (format.IndexOfAny(_singleDateFormat) == 0) @@ -1370,7 +1447,7 @@ public static string MakeCustomDateFormat(string format) /// Reference to new instance. public static object CreateInstance(Type itemType, IDesignerHost? host) { - object retObj; + object? retObj; // Cannot use the designer host to create component unless the type implements IComponent if (typeof(IComponent).IsAssignableFrom(itemType) && (host != null)) @@ -1390,7 +1467,7 @@ public static object CreateInstance(Type itemType, IDesignerHost? host) retObj = TypeDescriptor.CreateInstance(host, itemType, null!, null!); } - return retObj; + return retObj ?? false; } /// @@ -1448,7 +1525,7 @@ public static bool DesignMode(Component? c) BindingFlags.NonPublic); } - return (bool)_cachedDesignModePI!.GetValue(c, null); + return (bool)_cachedDesignModePI!.GetValue(c, null)!; } /// @@ -1463,63 +1540,69 @@ public static bool DesignMode(Component? c) /// /// String to convert. /// Double value. - public static double StringToDouble(string s) => (double)_dc.ConvertFromInvariantString(s); + public static double StringToDouble(string s) => (double)_dc.ConvertFromInvariantString(s)!; /// /// Convert a Size to a culture invariant string value. /// /// Size to convert. - /// Culture invariant string representation. - public static string SizeToString(Size s) => _sc.ConvertToInvariantString(s); + /// Culture invariant string representation. String.Empty if the conversion failed. + public static string SizeToString(Size s) => _sc.ConvertToInvariantString(s) is string str + ? str + : string.Empty; /// /// Convert a culture invariant string value to a Size. /// /// String to convert. - /// Size value. - public static Size StringToSize(string s) => (Size)_sc.ConvertFromInvariantString(s); + /// Size value. If s is null, Size(0, 0) is returned. + public static Size StringToSize(string? s) => s is not null && _sc.ConvertFromInvariantString(s) is Size size + ? size + : new Size(0, 0); /// /// Convert a Point to a culture invariant string value. /// /// Size to convert. /// Culture invariant string representation. - public static string? PointToString(Point s) => _pc.ConvertToInvariantString(s); + public static string PointToString(Point s) => _pc.ConvertToInvariantString(s) ?? string.Empty; /// /// Convert a culture invariant string value to a Point. /// /// String to convert. - /// Point value. - public static Point StringToPoint(string? s) => (Point)_pc.ConvertFromInvariantString(s); + /// Point value if s was not null. If s is null a new Point(0) will be returned. + public static Point StringToPoint(string? s) => s is not null + ? (Point)_pc.ConvertFromInvariantString(s)! + : new Point(0); /// /// Convert a Boolean to a culture invariant string value. /// /// Boolean to convert. /// Culture invariant string representation. - public static string BoolToString(bool b) => _bc.ConvertToInvariantString(b); + public static string? BoolToString(bool b) => _bc.ConvertToInvariantString(b); /// /// Convert a culture invariant string value to a Boolean. /// /// String to convert. /// Boolean value. - public static bool StringToBool(string s) => (bool)_bc.ConvertFromInvariantString(s); + public static bool StringToBool(string s) => (bool)_bc.ConvertFromInvariantString(s)!; /// /// Convert a Color to a culture invariant string value. /// /// Color to convert. /// Culture invariant string representation. - public static string ColorToString(Color c) => _cc.ConvertToInvariantString(c); + public static string? ColorToString(Color c) => _cc.ConvertToInvariantString(c); /// /// Convert a culture invariant string value to a Color. /// /// String to convert. /// Color value. - public static Color StringToColor(string s) => (Color)_cc.ConvertFromInvariantString(s); + public static Color StringToColor(string s) => (Color)_cc.ConvertFromInvariantString(s)!; /// /// Convert a client mouse position inside a windows message into a screen position. @@ -1600,8 +1683,18 @@ public static void Deflate(this Rectangle rect, Padding margins) /// /// /// - public static Bitmap ScaleImageForSizedDisplay(Image src, float trgtWidth, float trgtHeight) + /// thrown if targets are negative + public static Bitmap? ScaleImageForSizedDisplay(Image? src, float trgtWidth, float trgtHeight) { + if (trgtWidth <= 1.0 || trgtHeight <= 1.0) + { + // For some reason, in the designer it can send a rect that has a negative size element, + // therefore the targets will also be negative + // Also When collapsing / expanding ribbons the `trgtHeight` will > 0 BUT < 1.0 + //return new Bitmap(0, 0); // This will throw an exception + return null; + } + var newImage = new Bitmap((int)trgtWidth, (int)trgtHeight); using Graphics gr = Graphics.FromImage(newImage); gr.Clear(Color.Transparent); @@ -1614,7 +1707,7 @@ public static Bitmap ScaleImageForSizedDisplay(Image src, float trgtWidth, float //// Handle rounding down of the target `newImage` dimensions //srcRect.Offset(-trgtWidth%1, -trgtHeight%1); //gr.DrawImage(src, destRect, srcRect, GraphicsUnit.Pixel); - gr.DrawImage(src, 0, 0, (int)trgtWidth, (int)trgtHeight); + gr.DrawImage(src!, 0, 0, (int)trgtWidth, (int)trgtHeight); return newImage; } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/CommonHelperThemeSelectors.cs b/Source/Krypton Components/Krypton.Toolkit/General/CommonHelperThemeSelectors.cs new file mode 100644 index 000000000..9c67969a1 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/CommonHelperThemeSelectors.cs @@ -0,0 +1,218 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion +namespace Krypton.Toolkit +{ + #region Static + /// + /// Class CommonHelperThemeSelectors hold the common code for all Theme Selector controls:
+ /// - KryptonThemeComboBox
+ /// - KryptonThemeListBox
+ /// - KryptonRibbonGroupThemeComboBox
+ /// - KryptonThemeBrowser + ///
+ internal static class CommonHelperThemeSelectors + { + /// + /// Returns a list with theme names. + /// + /// String array of theme names. + internal static string[] GetThemesArray() + { + return PaletteModeStrings.SupportedThemesMap.Keys.ToArray(); + } + + /// + /// Performs a theme change when the control's SelectedIndex is changed. + /// + /// Enter: ref this._isLocalUpdate. + /// Enter: this._isExternalUpdate. + /// Enter: ref this._defaultPalette. + /// Name of the theme (SelectedItem text). + /// Enter: this._manager. + /// Enter: this._kryptonCustomPalette + /// True if the theme change was successful, false when custom was selected but no local external custom palette is set. + internal static bool OnSelectedIndexChanged(ref bool isLocalUpdate, bool isExternalUpdate, ref PaletteMode defaultPalette, + string themeName, KryptonManager manager, KryptonCustomPaletteBase? kryptonCustomPalette) + { + bool result = true; + + if (!isExternalUpdate) + { + isLocalUpdate = true; + + // Get palette from theme name. If themeName is not valid default to Global + PaletteMode mode = string.IsNullOrEmpty(themeName) + ? PaletteMode.Global + : ThemeManager.GetThemeManagerMode(themeName); + + if (mode == PaletteMode.Custom) + { + if (kryptonCustomPalette is not null) + { + manager.GlobalCustomPalette = kryptonCustomPalette; + defaultPalette = mode; + } + else + { + // Custom has been selected but there's no custom theme assigned + // to the ThemeSelector or in the KManager. + // Leave defaultPalette as it is. + result = false; + } + } + else if (mode == PaletteMode.Global) + { + // If mode is set to Global, a theme change is not necessary. + result = false; + } + else + { + ThemeManager.ApplyTheme(themeName, manager); + defaultPalette = mode; + } + + isLocalUpdate = false; + } + + return result; + } + + /// + /// Return the index in the list of the requested PaletteMode parameter. + /// + /// The control's list of themes (usually Items). + /// The PaletteMode for which to locate the index in items. + /// + /// The index of the requested palette.
+ /// If the PaletteMode was not found in the list, -1 will be returned.
+ ///
+ internal static int GetPaletteIndex(IList items, PaletteMode mode) + { + //intitial value must be an invalid SelectedIndex. + int newIdx = -1; + + // When a control has the DefaultPalette property set to Global newIdx is -1 + // A lookup is not possible since Global does not exist in the themes dictionary. + if (mode != PaletteMode.Global) + { + var selectedText = PaletteModeStrings.SupportedThemes.SecondToFirst[mode]; + newIdx = items.IndexOf(selectedText); + } + + return (newIdx >= 0 && newIdx < PaletteModeStrings.SupportedThemesMap.Count) + ? newIdx + : -1; + } + + /// + /// Is executed when a KryptonManager.GlobalPaletteChanged event is fired.
+ /// It will synchronize the list control's selected theme with that from Krypton Manager. + ///
+ /// Enter: this._isLocalUpdate. + /// Enter: ref this._isExternalUpdate. + /// The currently selected index of the control. + /// The control's list of themes (usually Items). + /// The selected index. + internal static int KryptonManagerGlobalPaletteChanged(bool isLocalUpdate, ref bool isExternalUpdate, int selectedIndex, IList items) + { + int result = selectedIndex; + + // Only run on external change + if (!isLocalUpdate) + { + // Avoid triggering a circular palette change + isExternalUpdate = true; + + // When Global is selected as CurrentGlobalPalette, the theme stays as it is currently. + // So, there's no need to change the index. + if (KryptonManager.CurrentGlobalPaletteMode != PaletteMode.Global) + { + result = CommonHelperThemeSelectors.GetPaletteIndex(items, KryptonManager.CurrentGlobalPaletteMode); + } + + // Back to norml + isExternalUpdate = false; + } + + return result; + } + + /// + /// Returns the intially selected index.
+ /// Should only be used in the constructor to set a palette from the manager or the control's DefaultPalette value set at design time. + ///
+ /// Enter: this._defaultPalette. + /// Enter: this._manager. + /// The control's list of themes (usually Items). + /// Returns the location in the list of items for defaultPalette. + internal static int GetInitialSelectedIndex(PaletteMode defaultPalette, KryptonManager manager, IList items) + { + PaletteMode pm = defaultPalette == PaletteMode.Global + && manager.GlobalPaletteMode != PaletteMode.Custom + && manager.GlobalPaletteMode != PaletteMode.Global + ? manager.GlobalPaletteMode + : defaultPalette; + + return CommonHelperThemeSelectors.GetPaletteIndex(items, pm); + } + + /// + /// The Set handler for the DefaultPalette property. + /// + /// enter: ref this._defaultPalette. + /// Incoming value from the property set. + /// The control's list of themes (usually Items). + /// The currently selected index of the control. + /// Returns the location in the list of items for defaultPalette. + internal static int DefaultPaletteSetter(ref PaletteMode defaultPalette, PaletteMode value, IList items, int selectedIndex) + { + // If value == defaultPalette or value == PaletteMode.Global + // the index remains the same and will not trigger an IndexChanged event. + int result = selectedIndex; + + // Value needs to be different + if (defaultPalette != value) + { + defaultPalette = value; + + // Any PaletteMode can be set as a theme, EXCEPT Global. + if (value != PaletteMode.Global) + { + // Setting the index triggers OnSelectedIndexChanged() + result = CommonHelperThemeSelectors.GetPaletteIndex(items, defaultPalette); + } + } + + return result; + } + } + + #endregion + + #region IKryptonThemeSelectorBase + + /// + /// Interface IKryptonThemeSelectorBase
+ /// Common entities for the Theme Selector controls. + ///
+ internal interface IKryptonThemeSelectorBase + { + /// + /// Gets or sets the default palette mode. + /// + PaletteMode DefaultPalette { get; set; } + + /// + /// Gets or sets the user defined custom palette. + /// + KryptonCustomPaletteBase? KryptonCustomPalette { get; set; } + } + + #endregion +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/ContextMenuProvider.cs b/Source/Krypton Components/Krypton.Toolkit/General/ContextMenuProvider.cs index 3d851c31c..18fce2a2f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/ContextMenuProvider.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/ContextMenuProvider.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -90,7 +90,7 @@ public ContextMenuProvider(KryptonContextMenu contextMenu, ViewLayoutStack viewColumns, PaletteBase? palette, PaletteMode paletteMode, - PaletteRedirect? redirector, + PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, NeedPaintHandler needPaintDelegate, bool enabled) @@ -139,7 +139,7 @@ public ContextMenuProvider(ViewContextMenuManager viewManager, PaletteContextMenuItemState stateNormal, PaletteContextMenuItemStateHighlight stateHighlight, PaletteContextMenuItemStateChecked stateChecked, - PaletteRedirect? redirector, + PaletteRedirect redirector, PaletteRedirectContextMenu redirectorImages, NeedPaintHandler needPaintDelegate, bool enabled) @@ -315,7 +315,7 @@ public ToolStripDropDownCloseReason? ProviderCloseReason /// /// Gets access to the context menu redirector. /// - public PaletteRedirect? ProviderRedirector { get; } + public PaletteRedirect ProviderRedirector { get; } /// /// Gets a delegate used to indicate a repaint is required. diff --git a/Source/Krypton Components/Krypton.Toolkit/General/ControlObscurer.cs b/Source/Krypton Components/Krypton.Toolkit/General/ControlObscurer.cs index 3c624270e..c4e6c738e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/ControlObscurer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/ControlObscurer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/CorrectContextControl.cs b/Source/Krypton Components/Krypton.Toolkit/General/CorrectContextControl.cs index c95597908..5d696fb9c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/CorrectContextControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/CorrectContextControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,9 +31,19 @@ public class CorrectContextControl : IDisposable public CorrectContextControl([DisallowNull] ViewLayoutContext context, Control control) { - Debug.Assert(context != null); + Debug.Assert(context is not null); - // Remmeber incoming context + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Control is null) + { + throw new ArgumentNullException(nameof(context.Control)); + } + + // Remember incoming context _context = context; // Remember staring setting diff --git a/Source/Krypton Components/Krypton.Toolkit/General/DataGridViewColumnSpecCollection.cs b/Source/Krypton Components/Krypton.Toolkit/General/DataGridViewColumnSpecCollection.cs index 835504975..997d3b0c7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/DataGridViewColumnSpecCollection.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/DataGridViewColumnSpecCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Definitions.cs b/Source/Krypton Components/Krypton.Toolkit/General/Definitions.cs index 13dff9b8a..672dc2061 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Definitions.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Definitions.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -95,28 +93,28 @@ public interface IButtonSpecValues /// /// Palette to use for inheriting values. /// Tooltip title string. - string GetToolTipTitle(PaletteBase? palette); + string GetToolTipTitle(PaletteBase palette); /// /// Gets and image color to remap to container foreground. /// /// Palette to use for inheriting values. /// Color value. - Color GetColorMap(PaletteBase palette); + Color GetColorMap(PaletteBase? palette); /// /// Gets the button visibility. /// /// Palette to use for inheriting values. /// Button visibility value. - bool GetVisible(PaletteBase? palette); + bool GetVisible(PaletteBase palette); /// /// Gets the button enabled state. /// /// Palette to use for inheriting values. /// Button enabled value. - ButtonEnabled GetEnabled(PaletteBase? palette); + ButtonEnabled GetEnabled(PaletteBase palette); /// /// Sets the current view associated with the button spec. @@ -128,7 +126,7 @@ public interface IButtonSpecValues /// Get the current view associated with the button spec. /// /// View element reference. - ViewBase? GetView(); + ViewBase GetView(); /// /// Gets a value indicating if the associated view is enabled. @@ -148,7 +146,7 @@ public interface IButtonSpecValues /// /// Palette to use for inheriting values. /// Button style value. - ButtonStyle GetStyle(PaletteBase? palette); + ButtonStyle GetStyle(PaletteBase palette); /// /// Gets the button location value. @@ -302,7 +300,7 @@ public interface IContextMenuProvider /// /// Gets access to the context menu redirector. /// - PaletteRedirect? ProviderRedirector { get; } + PaletteRedirect ProviderRedirector { get; } /// /// Gets a delegate used to indicate a repaint is required. @@ -481,7 +479,7 @@ public interface IKryptonCommand KryptonCommandType CommandType { get; set; } /// - /// Generates a Execute event for a command. + /// Generates an Execute event for a command. /// void PerformExecute(); } @@ -612,7 +610,7 @@ public interface IKryptonMonthCalendar /// /// Gets access to the month calendar common appearance entries. /// - PaletteMonthCalendarRedirect? StateCommon { get; } + PaletteMonthCalendarRedirect StateCommon { get; } /// /// Gets access to the month calendar normal appearance entries. @@ -727,43 +725,9 @@ public interface IKryptonDesignerSelect } #endregion - #region IKryptonComposition - /// - /// Exposes interface for visual form to cooperate with a view for composition. - /// - public interface IKryptonComposition - { - /// - /// Gets the pixel height of the composition extension into the client area. - /// - int CompHeight { get; } - - /// - /// Should painting be performed for the selection glyph. - /// - bool CompVisible { get; set; } - - /// - /// Gets and sets the form that owns the composition. - /// - VisualForm CompOwnerForm { get; set; } - - /// - /// Request a repaint and optional layout. - /// - /// Is a layout required. - void CompNeedPaint(bool needLayout); - - /// - /// Gets the handle of the composition element control. - /// - IntPtr CompHandle { get; } - } - #endregion - #region IKryptonDesignObject /// - /// Exposes interface for visual form to cooperate with a view for composition. + /// Exposes interface for visual form to cooperate with a view for Designers. /// public interface IKryptonDesignObject { @@ -1081,7 +1045,7 @@ public enum LabelStyle TitleControl, /// - /// Specifies a alternate label for use on a panel style background. + /// Specifies an alternate label for use on a panel style background. /// AlternatePanel, @@ -1363,7 +1327,7 @@ public enum InputControlStyle /// /// Specifies the panel alternate input style. /// - PanelAlternate, + PanelAlternate /* /// /// Specifies the disabled input style. @@ -1720,6 +1684,39 @@ public enum TaskDialogButtons } #endregion + #region Enum KryptonTaskDialogResult + + /// Specifies what indicator to return for a . + public enum KryptonTaskDialogResult + { + /// No button was selected. + None = 0, + /// The "Ok" button was selected. + Ok = KryptonMessageBoxResult.Ok, + /// The "Cancel" button was selected. + Cancel = KryptonMessageBoxResult.Cancel, + /// The "Yes" button was selected. + Yes = KryptonMessageBoxResult.Yes, + /// The "No" button was selected. + No = KryptonMessageBoxResult.No, + /// The "Retry" button was selected.b + Retry = KryptonMessageBoxResult.Retry, + /// The "Abort" button was selected. + Abort = KryptonMessageBoxResult.Abort, + /// The "Ignore" button was selected. + Ignore = KryptonMessageBoxResult.Ignore, + /// The "Close" button was selected. + Close = KryptonMessageBoxResult.Close, + /// The "Help" button was selected. + Help = KryptonMessageBoxResult.Help, + /// The "Try Again" button was selected. + TryAgain = KryptonMessageBoxResult.TryAgain, + /// The "Continue" button was selected. + Continue = KryptonMessageBoxResult.Continue + } + + #endregion + #region CheckedSelectionMode /// /// Specifies selection mode of the KryptonCheckedListBox. @@ -1739,14 +1736,14 @@ public enum CheckedSelectionMode #endregion #region Type ViewDockStyleLookup - internal class ViewDockStyleLookup : Dictionary { } + internal class ViewDockStyleLookup : Dictionary; #endregion #region Type DateTimeList /// /// Manage a list of DateTime instances. /// - public class DateTimeList : List { } + public class DateTimeList : List; #endregion #region Type MonthCalendarButtonSpecCollection @@ -1860,6 +1857,8 @@ public enum PlacementMode } #endregion Enum PlacementMode + #region MessageBox Definitions + #region Enum MessageBoxContentAreaType /// Defines the content area type of a . @@ -1873,6 +1872,411 @@ public enum MessageBoxContentAreaType #endregion + #region Enum KryptonMessageBoxIcon + + /// Specifies the icon type for . + // ToDo: Fix converter, as it throws errors... + //[TypeConverter(typeof(KryptonMessageBoxIconConverter))] + public enum KryptonMessageBoxIcon + { + /// Specify no icon. + None = 0, + + /// Specify a hand icon. + Hand = 1, + + /// + /// Specify the system hand icon. + /// The message box contains a symbol consisting of a white X in a circle with a red background. + /// + SystemHand = MessageBoxIcon.Hand, + + /// Specify a question icon. + Question = 2, + + /// Specify the system question icon. + SystemQuestion = MessageBoxIcon.Question, + + /// Specify an exclamation icon. + Exclamation = 3, + + /// Specify the system exclamation icon. + SystemExclamation = MessageBoxIcon.Exclamation, + + /// Specify an asterisk icon. + Asterisk = 4, + + /// + /// Specify the system asterisk icon. + /// The message box contains a symbol consisting of a lowercase letter i in a circle. + /// + SystemAsterisk = MessageBoxIcon.Asterisk, + + /// Specify a stop icon. + Stop = 5, + + /// + /// Specify the system hand icon. + /// The message box contains a symbol consisting of a white X in a circle with a red background. + /// + SystemStop = MessageBoxIcon.Stop, + + /// + /// Specify a error icon. + /// The message box contains a symbol consisting of white X in a circle with a red background. + /// + Error = 6, + + /// + /// Specify the system hand icon. + /// The message box contains a symbol consisting of a white X in a circle with a red background. + /// + SystemError = MessageBoxIcon.Error, + + /// Specify a warning icon. + Warning = 7, + + /// Specify the system warning icon. + SystemWarning = MessageBoxIcon.Warning, + + /// Specify an information icon. + Information = 8, + + /// Specify the system information icon. + SystemInformation = MessageBoxIcon.Information, + + /// Specify a UAC shield icon. + Shield = 9, + + /// Specify a Windows logo icon. + WindowsLogo = 10, + + /// Specify your application icon. + Application = 11, + + /// Specify the default system application icon. See . + SystemApplication = 12 + } + + #endregion + + #region Enum KryptonMessageBoxButtons + + /// Specifies constants defining which buttons to display on a . + public enum KryptonMessageBoxButtons + { + /// + /// Specifies that the message box contains an OK button. + /// + OK = MessageBoxButtons.OK, + + /// + /// Specifies that the message box contains OK and Cancel buttons. + /// + OKCancel = MessageBoxButtons.OKCancel, + + /// + /// Specifies that the message box contains Abort, Retry, and Ignore buttons. + /// + AbortRetryIgnore = MessageBoxButtons.AbortRetryIgnore, + + /// + /// Specifies that the message box contains Yes, No, and Cancel buttons. + /// + YesNoCancel = MessageBoxButtons.YesNoCancel, + + /// + /// Specifies that the message box contains Yes and No buttons. + /// + YesNo = MessageBoxButtons.YesNo, + + /// + /// Specifies that the message box contains Retry and Cancel buttons. + /// + RetryCancel = MessageBoxButtons.RetryCancel, + + /// + /// Specifies that the message box contains Cancel, Try Again, and Continue buttons. + /// +#if NET6_0_OR_GREATER + CancelTryContinue = MessageBoxButtons.CancelTryContinue +#else + CancelTryContinue = 0x00000006 +#endif + } + + #endregion + + #region Enum KryptonMessageBoxDefaultButton + + /// Specifies constants defining the default button on a . + public enum KryptonMessageBoxDefaultButton + { + /// The first button on the message box is the default button. + Button1 = 0, + + /// The second button on the message box is the default button. + Button2 = 256, + + /// The third button on the message box is the default button. + Button3 = 512, + + /// Specifies that the Help button on the message box should be the default button. + Button4 = 768 + } + + #endregion + + #region Enum KryptonMessageBoxResult + + /// + /// Options for . + /// + public enum KryptonMessageBoxResult + { + None = DialogResult.None, + Ok = DialogResult.OK, + Cancel = DialogResult.Cancel, + Abort = DialogResult.Abort, + Retry = DialogResult.Retry, + Ignore = DialogResult.Ignore, + Yes = DialogResult.Yes, + No = DialogResult.No, + Close = 8, + Help = 9, +#if NET6_0_OR_GREATER + TryAgain = DialogResult.TryAgain, + Continue = DialogResult.Continue, +#else + TryAgain = 10, + Continue = 11 +#endif + } + + #endregion + + #endregion + + #region Toast Definitions + + #region Enum KryptonToastNotificationIcon + + [TypeConverter(typeof(KryptonToastNotificationIconConverter))] + public enum KryptonToastNotificationIcon + { + /// Specify no icon. + None = 0, + + /// Specify a hand icon. + Hand = 1, + + /// Specify the system hand icon. + SystemHand = MessageBoxIcon.Hand, + + /// Specify a question icon. + Question = 2, + + /// Specify the system question icon. + SystemQuestion = MessageBoxIcon.Question, + + /// Specify an exclamation icon. + Exclamation = 3, + + /// Specify the system exclamation icon. + SystemExclamation = MessageBoxIcon.Exclamation, + + /// Specify an asterisk icon. + Asterisk = 4, + + /// Specify the system asterisk icon. + SystemAsterisk = MessageBoxIcon.Asterisk, + + /// Specify a stop icon. + Stop = 5, + + /// Specify the system stop icon. + SystemStop = MessageBoxIcon.Stop, + + /// Specify a error icon. + Error = 6, + + /// Specify the system error icon. + SystemError = MessageBoxIcon.Error, + + /// Specify a warning icon. + Warning = 7, + + /// Specify the system warning icon. + SystemWarning = MessageBoxIcon.Warning, + + /// Specify an information icon. + Information = 8, + + /// Specify the system information icon. + SystemInformation = MessageBoxIcon.Information, + + /// Specify a UAC shield icon. + Shield = 9, + + /// Specify a Windows logo icon. + WindowsLogo = 10, + + /// Specify your application icon. + Application = 11, + + /// Specify the default system application icon. See . + SystemApplication = 12, + + /// Specify an ok icon. + Ok = 13, + + /// Specify a custom icon. + Custom = 14 + } + + #endregion + + #region Enum KryptonToastNotificationContentAreaType + + public enum KryptonToastNotificationContentAreaType + { + RichTextBox = 0, + MultiLineTextBox = 1, + WrapLinkLabel = 2, + WrapLabel = 3 + } + + #endregion + + #region Enum KryptonToastNotificationInputAreaType + + public enum KryptonToastNotificationInputAreaType + { + /// A with a user input. + ComboBox = 0, + /// A with a user input. + DateTime = 1, + /// A with a user input. + DomainUpDown = 2, + /// A with a user input. + NumericUpDown = 3, + /// A with a user input. + MaskedTextBox = 4, + /// A with a user input. + TextBox = 5 + } + + #endregion + + #region Enum KryptonToastNotificationActionButton + + public enum KryptonToastNotificationActionButton + { + Button1 = 0, + Button2 = 1 + //Button3 = 2 + } + + #endregion + + #region Enum KryptonToastNotificationActionType + + public enum KryptonToastNotificationActionType + { + Default = 0, + Dismiss = 1, + LaunchProcess = 2, + Open = 3 + } + + #endregion + + #region Enum KryptonToastNotificationDismissButtonLocation + + public enum KryptonToastNotificationDismissButtonLocation + { + Left = 0, + Right = 1 + } + + #endregion + + #region Enum KryptonToastNotificationAlignment + + public enum KryptonToastNotificationAlignment + { + LeftToRight = 0, + RightToLeft = 1 + } + + #endregion + + #region Enum KryptonToastNotificationResponseType + + public enum KryptonToastNotificationResponseType + { + /// Returns a result. + Bool = 0, + /// Returns a result. + CheckedState = 1, + /// Returns what ever value is selected in the . + ComboBox = 2, + /// Returns a result. + DateTime = 3, + /// Returns a result. + DialogResult = 4, + /// Returns a time-out result. + Timeout = 5, + /// Returns a result. + String = 6 + } + + #endregion + + #region Enum KryptonToastNotificationType + + public enum KryptonToastNotificationType + { + Basic = 0, + BasicWithProgressBar = 1, + UserInput = 2, + UserInputWithProgressBar = 3 + } + + #endregion + + #region KryptonToastNotificationResult + + /// + /// Options for the . + /// + public enum KryptonToastNotificationResult + { + None = DialogResult.None, + Ok = DialogResult.OK, + Cancel = DialogResult.Cancel, + Abort = DialogResult.Abort, + Retry = DialogResult.Retry, + Ignore = DialogResult.Ignore, + Yes = DialogResult.Yes, + No = DialogResult.No, + Close = 8, + Help = 9, +#if NET6_0_OR_GREATER + TryAgain = DialogResult.TryAgain, + Continue = DialogResult.Continue, +#else + TryAgain = 10, + Continue = 11, +#endif + TimeOut = 12, + DoNotShowAgain = 13 + } + + #endregion + + #endregion + #region Enum ToolkitType public enum ToolkitType @@ -1883,4 +2287,804 @@ public enum ToolkitType } #endregion + + #region AboutBox Definitions + + #region Enum AboutToolkitPage + + internal enum AboutToolkitPage + { + GeneralInformation = 0, + Discord = 1, + DeveloperInformation = 2, + Versions = 3 + } + + #endregion + + #region Enum AboutBoxFileInformationPage + + public enum AboutBoxFileInformationPage + { + Application = 0, + Assemblies = 1, + AssemblyDetails = 2 + } + + #endregion + + #region Enum AboutBoxPage + + public enum AboutBoxPage + { + GeneralInformation = 0, + Description = 1, + FileInformation = 2, + Theme = 3, + ToolkitInformation = 4 + } + + #endregion + + #endregion + + #region InformationBox Definitions + + #region Enum AutoCloseDefinedParameters + + /// + /// Defines constant representing the parameters specified for the auto-close feature. + /// + public enum AutoCloseDefinedParameters + { + /// + /// The button to use is defined. + /// + Button, + + /// + /// Only the time to wait is defined. + /// + TimeOnly, + + /// + /// The InformationBoxResult is defined. + /// + Result + } + + #endregion + + #region Enum InformationBoxIconType + + /// + /// Specifies constants defining which source to use for the icon. + /// + internal enum InformationBoxIconType + { + /// + /// Uses internal icons + /// + Internal, + + /// + /// Uses an icon specified by the client. + /// + UserDefined + } + + #endregion + + #region Enum InformationBoxAutoSizeMode + + /// + /// Specifies constants defining which mode is used for auto sizing the . + /// + public enum InformationBoxAutoSizeMode + { + /// + /// Adjust the height and text to have the highest possible. Existing line breaks are ignored. + /// + MinimumWidth, + + /// + /// Adjust the width and text to have the widest possible. Existing line breaks are ignored. + /// + MinimumHeight, + + /// + /// The will be set according to existing line breaks. + /// + None + } + + #endregion + + #region Enum InformationBoxBehavior + + /// + /// Specifies constants defining how is displayed the . + /// + public enum InformationBoxBehavior + { + /// + /// The InformationBox is displayed as a modal (blocking) window (default). + /// + Modal, + + /// + /// The InformationBox is displayed as a modeless (non-blocking) window. + /// + Modeless + } + + #endregion + + #region Enum InformationBoxButtons + + /// + /// Specifies constants defining which buttons to display on . + /// + public enum InformationBoxButtons + { + /// + /// The message box contains Abort, Retry, and Ignore buttons. + /// + AbortRetryIgnore, + + /// + /// The message box contains an OK button. + /// + OK, + + /// + /// The message box contains OK and Cancel buttons. + /// + OKCancel, + + /// + /// The message box contains Retry and Cancel buttons. + /// + RetryCancel, + + /// + /// The message box contains Yes and No buttons. + /// + YesNo, + + /// + /// The message box contains Yes, No, and Cancel buttons. + /// + YesNoCancel + } + + #endregion + + #region Enum InformationBoxCheckBox + + /// + /// Specifies constants defining whether the "Do not show this dialog again" checkbox is displayed or not. + /// + [Flags] + public enum InformationBoxCheckBox + { + /// + /// The checkbox will be displayed. + /// + Show = 1, + + /// + /// Initial unchecked state (default value). + /// + Checked = 2, + + /// + /// The checkbox is right aligned. + /// + RightAligned = 4 + } + + #endregion + + #region Enum InformationBoxDefaultButton + + /// + /// Specifies constants defining the default button on a . + /// + public enum InformationBoxDefaultButton + { + /// + /// The first button on the message box is the default button. + /// + Button1, + + /// + /// The second button on the message box is the default button. + /// + Button2, + + /// + /// The third button on the message box is the default button. + /// + Button3 + } + + #endregion + + #region Enum InformationBoxIcon + + /// Specifies the icon for a . + public enum InformationBoxIcon + { + /// Specify no icon. + None = 0, + + /// Specify a hand icon. + Hand = 1, + + /// Specify the system hand icon. + SystemHand = MessageBoxIcon.Hand, + + /// Specify a question icon. + Question = 2, + + /// Specify the system question icon. + SystemQuestion = MessageBoxIcon.Question, + + /// Specify an exclamation icon. + Exclamation = 3, + + /// Specify the system exclamation icon. + SystemExclamation = MessageBoxIcon.Exclamation, + + /// Specify an asterisk icon. + Asterisk = 4, + + /// Specify the system asterisk icon. + SystemAsterisk = MessageBoxIcon.Asterisk, + + /// Specify a stop icon. + Stop = 5, + + /// Specify the system stop icon. + SystemStop = MessageBoxIcon.Stop, + + /// Specify a error icon. + Error = 6, + + /// Specify the system error icon. + SystemError = MessageBoxIcon.Error, + + /// Specify a warning icon. + Warning = 7, + + /// Specify the system warning icon. + SystemWarning = MessageBoxIcon.Warning, + + /// Specify an information icon. + Information = 8, + + /// Specify the system information icon. + SystemInformation = MessageBoxIcon.Information, + + /// Specify a UAC shield icon. + Shield = 9, + + /// Specify a Windows logo icon. + WindowsLogo = 10, + + /// Specify your application icon. + Application = 11, + + /// Specify the default system application icon. See . + SystemApplication = 12 + } + + #endregion + + #region Enum InformationBoxInitialization + + /// + /// Specify constants defining how to initialize the . + /// + public enum InformationBoxInitialization + { + /// + /// The is initialized from the parameters only. All scopes are ignored. + /// + FromParametersOnly, + + /// + /// The is first initialized from the current scope (if available) and then from the supplied parameters. + /// + FromScopeAndParameters + } + + #endregion + + #region Enum InformationBoxMessageSoundCategory + + /// + /// Specifies constants defining the sound category of the message. + /// + internal enum InformationBoxMessageSoundCategory + { + /// + /// Asterisk sound + /// + Asterisk, + + /// + /// Exclamation sound + /// + Exclamation, + + /// + /// Hand sound + /// + Hand, + + /// + /// Other sound + /// + Other, + + /// + /// Question sound + /// + Question + } + + #endregion + + #region Enum InformationBoxOpacity + + /// + /// Specifies constants defining the opacity of the . + /// + public enum InformationBoxOpacity + { + /// + /// Opacity is at 10% + /// + Faded10, + + /// + /// Opacity is at 20% + /// + Faded20, + + /// + /// Opacity is at 30% + /// + Faded30, + + /// + /// Opacity is at 40% + /// + Faded40, + + /// + /// Opacity is at 50% + /// + Faded50, + + /// + /// Opacity is at 60% + /// + Faded60, + + /// + /// Opacity is at 70% + /// + Faded70, + + /// + /// Opacity is at 80% + /// + Faded80, + + /// + /// Opacity is at 90% + /// + Faded90, + + /// + /// Opacity is at 100% + /// + NoFade + } + + #endregion + + #region Enum InformationBoxOrder + + /// + /// Specifies constants defining the z-order of the . + /// + public enum InformationBoxOrder + { + /// + /// Default position. + /// + Default, + + /// + /// Sets the as the top most window. + /// + TopMost + } + + #endregion + + #region Enum InformationBoxPosition + + /// + /// Specifies constants defining the position of the . + /// + public enum InformationBoxPosition + { + /// + /// the will be centered on the parent window. This is the default value. Only for modal behavior. + /// + CenterOnParent, + + /// + /// the will be centered on the screen. + /// + CenterOnScreen + } + + #endregion + + #region Enum InformationBoxResult + + /// + /// Contains all possible values for the Show return value. Identifies which button was clicked. + /// + public enum InformationBoxResult + { + /// + /// The dialog box return value is Abort (usually sent from a button labeled Abort). + /// + Abort, + + /// + /// The dialog box return value is Cancel (usually sent from a button labeled Cancel). + /// + Cancel, + + /// + /// The dialog box return value is Ignore (usually sent from a button labeled Ignore). + /// + Ignore, + + /// + /// The dialog box return value is No (usually sent from a button labeled No). + /// + No, + + /// + /// Nothing is returned from the dialog box. This means that the modal dialog continues running. + /// + None, + + /// + /// The dialog box return value is OK (usually sent from a button labeled OK). + /// + OK, + + /// + /// The dialog box return value is Retry (usually sent from a button labeled Retry). + /// + Retry, + + /// + /// The dialog box return value is Yes (usually sent from a button labeled Yes). + /// + Yes, + + /// + /// The dialog box return value is User1 (usually sent from the first user-defined button). + /// + User1, + + /// + /// The dialog box return value is User2 (usually sent from the second user-defined button). + /// + User2, + + /// + /// The dialog box return value is User3 (usually sent from the third user-defined button). + /// + User3 + } + + #endregion + + #region Enum InformationBoxSound + + /// + /// Specifies constants defining whether sound will be played on opening + /// + public enum InformationBoxSound + { + /// + /// The default system sound. + /// + Default, + + /// + /// Does not play default sound. + /// + None + } + + #endregion + + #region Enum InformationBoxTitleIconStyle + + /// + /// Specifies constants defining which icon is displayed on the title bar. + /// + public enum InformationBoxTitleIconStyle + { + /// + /// No title icon. + /// + None, + + /// + /// Use the icon displayed in the box. + /// + SameAsBox, + + /// + /// Use a custom icon. + /// + Custom + } + + #endregion + + #endregion + + #region Enum FormFadeDirection + + public enum FormFadeDirection + { + In = 0, + Out = 1 + } + + #endregion + + #region Enum FadeSpeedChoice + + /// + /// Chooses the fading speed of a + /// + public enum FadeSpeedChoice + { + /// + /// Use the slowest fade speed possible. This is tied to the corresponding float value in , which is 1. + /// + Slowest = 0, + /// + /// Use the second-slowest fade speed possible. This is tied to the corresponding float value in , which is 10. + /// + Slower = 1, + /// + /// Use the third-slowest fade speed possible. This is tied to the corresponding float value in , which is 25. + /// + Slow = 2, + /// + /// Use a normal fade speed. This is tied to the corresponding float value in , which is 50. + /// + Normal = 3, + /// + /// Use a fast fading speed. This is tied to the corresponding float value in , which is 60. + /// + Fast = 4, + /// + /// Use a slightly faster fading speed. This is tied to the corresponding float value in , which is 75. + /// + Faster = 5, + /// + /// Use the fastest fading speed possible. This is tied to the corresponding float value in , which is 100. + /// + Fastest = 6, + /// + /// Define your own fading speed. + /// + Custom = 7 + } + + #endregion + + #region Enum RightToLeftLayout + + public enum RightToLeftLayout + { + LeftToRight = 0, + RightToLeft = 1 + } + + #endregion + + #region Enum DateInterval + + /// + /// Enum of Date interval for the OutlookGridDateTimeGroup + /// + public enum DateInterval + { + /// + /// Day + /// + Day, + + /// + /// Month + /// + Month, + + /// + /// Quarter + /// + Quarter, + + /// + /// Year + /// + Year, + + /// + /// Smart : intelligent grouping like Outlook for dates + /// + Smart + } + + #endregion + + #region Enum EnumConditionalFormatType + + /// + /// Conditional Formatting type + /// + public enum EnumConditionalFormatType + { + /// + /// Two scale color + /// + TwoColorsRange, + /// + /// Three scale color + /// + ThreeColorsRange, + /// + /// Bar + /// + Bar + } + + #endregion + + #region Enum GridFillMode + + /// + /// Grid filling mode + /// + public enum GridFillMode + { + /// + /// The grid contains only groups (faster). + /// + GroupsOnly, + + /// + /// The grid contains groups and nodes (no choice, choose this one !) + /// + GroupsAndNodes + } + + #endregion + + #region Enum PaletteSchemaVersion + + public enum PaletteSchemaVersion + { + Version6To19, + Version19To20 + } + + #endregion + + #region Enum KryptonErrorBlinkStyle + + /// + /// Describes the times that the error icon supplied by an KryptonErrorProvider + /// should blink to alert the user that an error has occurred. + /// + public enum KryptonErrorBlinkStyle + { + /// + /// Blink only if the error icon is already displayed, but a new + /// error string is set for the control. If the icon did not blink + /// in this case, the user might not know that there is a new error. + /// + BlinkIfDifferentError = ErrorBlinkStyle.BlinkIfDifferentError, + /// + /// Blink the error icon when the error is first displayed, or when + /// a new error description string is set for the control and the + /// error icon is already displayed. + /// + AlwaysBlink = ErrorBlinkStyle.AlwaysBlink, + /// + /// Never blink the error icon. + /// + NeverBlink = ErrorBlinkStyle.NeverBlink + } + + #endregion + + #region Enum KryptonErrorIconAlignment + + /// + /// Describes the set of locations that an error icon can appear in + /// relation to the control with the error. + /// + public enum KryptonErrorIconAlignment + { + /// + /// The icon appears aligned with the top of the control, and to the + /// left of the control. + /// + TopLeft, + + /// + /// The icon appears aligned with the top of the control, and to the + /// right of the control. + /// + TopRight, + + /// + /// The icon appears aligned with the middle of the control, and the + /// left of the control. + /// + MiddleLeft, + + /// + /// The icon appears aligned with the middle of the control, and the + /// right of the control. + /// + MiddleRight, + + /// + /// The icon appears aligned with the bottom of the control, and the + /// left of the control. + /// + BottomLeft, + + /// + /// The icon appears aligned with the bottom of the control, and the + /// right of the control. + /// + BottomRight + } + + #endregion + + #region KryptonUseRTLLayout + + /// Use RTL to display the controls and UI. + public enum KryptonUseRTLLayout + { + /// Don't use RTL. + No = 0, + /// Use RTL. + Yes = 1 + } + + #endregion } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/DesignTimeUtilities.cs b/Source/Krypton Components/Krypton.Toolkit/General/DesignTimeUtilities.cs index 8d65f8641..a3cb0268d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/DesignTimeUtilities.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/DesignTimeUtilities.cs @@ -2,11 +2,12 @@ /* * * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion +// ReSharper disable InconsistentNaming namespace Krypton.Toolkit { internal class DesignTimeUtilities @@ -640,6 +641,34 @@ internal class DesignTimeUtilities #endregion + #region ToastNotificationIcon + + internal static string DEFAULT_ICON_NONE = @"None"; + internal static string DEFAULT_ICON_HAND = @"Hand"; + internal static string DEFAULT_ICON_SYSTEM_HAND = @"Hand (System)"; + internal static string DEFAULT_ICON_QUESTION = @"Question"; + internal static string DEFAULT_ICON_SYSTEM_QUESTION = @"Question (System)"; + internal static string DEFAULT_ICON_EXCLAMATION = @"Exclamation"; + internal static string DEFAULT_ICON_SYSTEM_EXCLAMATION = @"Exclamation (System)"; + internal static string DEFAULT_ICON_ASTERISK = @"Asterisk"; + internal static string DEFAULT_ICON_SYSTEM_ASTERISK = @"Asterisk (System)"; + internal static string DEFAULT_ICON_STOP = @"Stop"; + internal static string DEFAULT_ICON_SYSTEM_STOP = @"Stop (System)"; + internal static string DEFAULT_ICON_ERROR = @"Error"; + internal static string DEFAULT_ICON_SYSTEM_ERROR = @"Error (System)"; + internal static string DEFAULT_ICON_WARNING = @"Warning"; + internal static string DEFAULT_ICON_SYSTEM_WARNING = "Warning (System)"; + internal static string DEFAULT_ICON_INFORMATION = @"Information"; + internal static string DEFAULT_ICON_SYSTEM_INFORMATION = @"Information (System)"; + internal static string DEFAULT_ICON_SHIELD = @"User Account Control Shield"; + internal static string DEFAULT_ICON_WINDOWS_LOGO = @"Windows Logo"; + internal static string DEFAULT_ICON_APPLICATION = @"Application"; + internal static string DEFAULT_ICON_SYSTEM_APPLICATION = @"Application (System)"; + internal static string DEFAULT_ICON_OK = @"OK"; + internal static string DEFAULT_ICON_CUSTOM = @"Custom"; + + #endregion + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/DesktopWindowManager.cs b/Source/Krypton Components/Krypton.Toolkit/General/DesktopWindowManager.cs deleted file mode 100644 index 73f1693cb..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/General/DesktopWindowManager.cs +++ /dev/null @@ -1,67 +0,0 @@ -#region BSD License -/* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - /// - /// Helper routines for interacting with the Desktop Window Manager. - /// - public class DWM - { - #region Static Methods - /// - /// Is composition currently enabled for the desktop. - /// - public static bool IsCompositionEnabled - { - get - { - switch (Environment.OSVersion.Version.Major) - { - // Desktop composition is only available on Vista upwards - case < 6: - return false; - case < 10: - // Ask the desktop window manager is composition is currently enabled - return PI.Dwm.IsCompositionEnabled(); - //Win 10 - default: - return UserSystemPreferencesService.IsTransparencyEnabled; - } - } - } - - /// - /// Change the distance the frame extends into the client area. - /// - /// Window handle of form. - /// Distance for each form edge. - public static void ExtendFrameIntoClientArea([DisallowNull] IntPtr hWnd, Padding padding) - { - // We can't use 'null', since the type of the object is 'IntPtr'. So we need to use 'IntPtr.Zero'. - Debug.Assert(hWnd != IntPtr.Zero); - - // Create structure that contains distances for each edge - var margins = new PI.MARGINS - { - leftWidth = padding.Left, - topHeight = padding.Top, - rightWidth = padding.Right, - bottomHeight = padding.Bottom - }; - - // Request change from the desktop window manager - PI.Dwm.DwmExtendFrameIntoClientArea(hWnd, ref margins); - } - #endregion - } -} diff --git a/Source/Krypton Components/Krypton.Toolkit/General/GlobalId.cs b/Source/Krypton Components/Krypton.Toolkit/General/GlobalId.cs index 2d3f7c68b..c80040676 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/GlobalId.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/GlobalId.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/GlobalStaticValues.cs b/Source/Krypton Components/Krypton.Toolkit/General/GlobalStaticValues.cs index a9febe708..94dce2934 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/GlobalStaticValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/GlobalStaticValues.cs @@ -5,39 +5,50 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion +// ReSharper disable InconsistentNaming namespace Krypton.Toolkit { + /// Provides a collection of static values, used within the toolkit. public class GlobalStaticValues { - // Used for 'Material' themes - public const float MATERIAL_THEME_CORNER_ROUNDING_VALUE = -1; + internal const bool DEFAULT_USE_STACK_TRACE = true; - // Used for the default control corners - public const float PRIMARY_CORNER_ROUNDING_VALUE = -1; + /// The default date and time value + public static DateTime DEFAULT_DATE_TIME_VALUE = DateTime.Now; - // Used for text controls - public const float PRIMARY_CORNER_TEXT_CONTROLS_ROUNDING_VALUE = -1; + /// Used for 'Material' themes + public const float DEFAULT_MATERIAL_THEME_CORNER_ROUNDING_VALUE = -1f; - // Used for nodes etc - public const float SECONDARY_CORNER_ROUNDING_VALUE = -1; + /// Used for the default control corners + public const float DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE = -1f; - public const float MAXIMUM_PRIMARY_CORNER_ROUNDING_VALUE = 25; + /// The default UAC shield icon size + public static UACShieldIconSize DEFAULT_UAC_SHIELD_ICON_SIZE = UACShieldIconSize.ExtraSmall; - public const float MAXIMUM_SECONDARY_CORNER_ROUNDING_VALUE = 25; + /// The default UAC shield icon custom size + public static Size DEFAULT_UAC_SHIELD_ICON_CUSTOM_SIZE = new Size(16, 16); - // Used for fonts - public static string DEFAULT_FONT_NAME = "Segoe UI"; + /// The global button padding + public const int GLOBAL_BUTTON_PADDING = 10; - public static float DEFAULT_FONT_SIZE = 9F; + internal const int DEFAULT_PADDING = 10; - public static UACShieldIconSize DEFAULT_UAC_SHIELD_ICON_SIZE = UACShieldIconSize.ExtraSmall; + /// The global default theme index + public const int GLOBAL_DEFAULT_THEME_INDEX = (int)PaletteMode.Microsoft365Blue; - public static Size DEFAULT_UAC_SHIELD_ICON_CUSTOM_SIZE = new Size(16, 16); + /// The global default theme + public const PaletteMode GLOBAL_DEFAULT_PALETTE_MODE = PaletteMode.Microsoft365Blue; + + /// The current supported palette version + public const int CURRENT_SUPPORTED_PALETTE_VERSION = 20; + + /// The default highlight debugging color + public static Color DEFAULT_HIGHLIGHT_DEBUGGING_COLOR = Color.Magenta; // Used for version reporting internal static string DEFAULT_DOCKING_FILE = @"Krypton.Docking.dll"; @@ -45,5 +56,355 @@ public class GlobalStaticValues internal static string DEFAULT_RIBBON_FILE = @"Krypton.Ribbon.dll"; internal static string DEFAULT_TOOLKIT_FILE = @"Krypton.Toolkit.dll"; internal static string DEFAULT_WORKSPACE_FILE = @"Krypton.Workspace.dll"; + + internal const string DEFAULT_NOT_IMPLEMENTED_YET_MESSAGE = + $"This feature has not been currently implemented yet.\nPlease check back again soon!"; + + internal static string DEFAULT_EMPTY_STRING = string.Empty; + + /// The OS major version + public static readonly int OS_MAJOR_VERSION = Environment.OSVersion.Version.Major; + + /// The default rafting ribbon tab background gradient + public const float DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT = 90F; + + /// The empty color + public static readonly Color EMPTY_COLOR = Color.Empty; + + /// The transparency key color + public static readonly Color TRANSPARENCY_KEY_COLOR = Color.Magenta; + + /// The tab row gradient first color + public static readonly Color TAB_ROW_GRADIENT_FIRST_COLOR = Color.Transparent; + + /// The default ribbon application button dark color + public static readonly Color DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR = Color.FromArgb(31, 72, 161); + + /// The default ribbon application button light color + public static readonly Color DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR = Color.FromArgb(84, 158, 243); + + /// The default ribbon application button text color + public static readonly Color DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR = Color.White; + + #region Arrays + + #region Images + + #region ToolBar + + #region Generic + + /// The generic toolbar images + public static Image[] GenericToolBarImages = + [ + GenericToolbarImageResources.GenericNewDocument, + GenericToolbarImageResources.GenericOpenFolder, + GenericToolbarImageResources.GenericSave, + GenericToolbarImageResources.GenericSaveAs, + GenericToolbarImageResources.GenericSaveAll, + GenericToolbarImageResources.GenericCut, + GenericToolbarImageResources.GenericCopy, + GenericToolbarImageResources.GenericPaste, + GenericToolbarImageResources.GenericUndo, + GenericToolbarImageResources.GenericRedo, + GenericToolbarImageResources.GenericPrintSetup, + GenericToolbarImageResources.GenericPrintPreview, + GenericToolbarImageResources.GenericPrint, + GenericToolbarImageResources.GenericQuickPrint + ]; + + #endregion + + #region Microsoft 365 + + /// The Microsoft 365 toolbar images + public static Image[] Microsoft365ToolBarImages = + [ + Office2019ToolbarImageResources.Office2019ToolbarNewNormal, + Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, + Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, + Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, + Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, + Office2019ToolbarImageResources.Office2019ToolbarCutNormal, + Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, + Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, + Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, + Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, + Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, + Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, + Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, + Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal + ]; + + #endregion + + #region Office 2003 + + /// The Office 2003 toolbar images + public static Image[] Office2003ToolBarImages = + [ + Office2003ToolbarImageResources.Office2003ToolbarNewNormal, + Office2003ToolbarImageResources.Office2003ToolbarOpenNormal, + Office2003ToolbarImageResources.Office2003ToolbarSaveNormal, + Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, + Office2003ToolbarImageResources.Office2003ToolbarSaveAllNormal, + Office2003ToolbarImageResources.Office2003ToolbarCutNormal, + Office2003ToolbarImageResources.Office2003ToolbarCopyNormal, + Office2003ToolbarImageResources.Office2003ToolbarPasteNormal, + Office2003ToolbarImageResources.Office2003ToolbarUndoNormal, + Office2003ToolbarImageResources.Office2003ToolbarRedoNormal, + Office2003ToolbarImageResources.Office2003ToolbarPageSetupNormal, + Office2003ToolbarImageResources.Office2003ToolbarPrintPreviewNormal, + Office2003ToolbarImageResources.Office2003ToolbarPrintNormal, + GenericToolbarImageResources.GenericQuickPrint + ]; + + #endregion + + #region Office 2007 + + /// The Office 2007 toolbar images + public static Image[] Office2007ToolBarImages = + [ + Office2007ToolbarImageResources.Office2007ToolbarNewNormal, + Office2007ToolbarImageResources.Office2007ToolbarOpenNormal, + Office2007ToolbarImageResources.Office2007ToolbarSaveNormal, + Office2007ToolbarImageResources.Office2007ToolbarSaveAsNormal, + Office2007ToolbarImageResources.Office2007ToolbarSaveAllNormal, + Office2007ToolbarImageResources.Office2007ToolbarCutNormal, + Office2007ToolbarImageResources.Office2007ToolbarCopyNormal, + Office2007ToolbarImageResources.Office2007ToolbarPasteNormal, + Office2007ToolbarImageResources.Office2007ToolbarUndoNormal, + Office2007ToolbarImageResources.Office2007ToolbarRedoNormal, + Office2007ToolbarImageResources.Office2007ToolbarPageSetupNormal, + Office2007ToolbarImageResources.Office2007ToolbarPrintPreviewNormal, + Office2007ToolbarImageResources.Office2007ToolbarPrintNormal, + Office2007ToolbarImageResources.Office2007ToolbarQuickPrintNormal + ]; + + #endregion + + #region Office 2010 + + /// The Office 2010 toolbar images + public static Image[] Office2010ToolBarImages = + [ + Office2010ToolbarImageResources.Office2010ToolbarNewNormal, + Office2010ToolbarImageResources.Office2010ToolbarOpenNormal, + Office2010ToolbarImageResources.Office2010ToolbarSaveNormal, + Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal, + Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal, + Office2010ToolbarImageResources.Office2010ToolbarCutNormal, + Office2010ToolbarImageResources.Office2010ToolbarCopyNormal, + Office2010ToolbarImageResources.Office2010ToolbarPasteNormal, + Office2010ToolbarImageResources.Office2010ToolbarUndoNormal, + Office2010ToolbarImageResources.Office2010ToolbarRedoNormal, + Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal, + Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal, + Office2010ToolbarImageResources.Office2010ToolbarPrintNormal, + Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal + ]; + + #endregion + + #region Office 2013 + + /// + /// The Office 2013 toolbar images + /// + public static Image[] Office2013ToolBarImages = + [ + Office2013ToolbarImageResources.Office2013ToolbarNewNormal, + Office2013ToolbarImageResources.Office2013ToolbarOpenNormal, + Office2013ToolbarImageResources.Office2013ToolbarSaveNormal, + Office2013ToolbarImageResources.Office2013ToolbarSaveAsNormal, + Office2013ToolbarImageResources.Office2013ToolbarSaveAllNormal, + Office2013ToolbarImageResources.Office2013ToolbarCutNormal, + Office2013ToolbarImageResources.Office2013ToolbarCopyNormal, + Office2013ToolbarImageResources.Office2013ToolbarPasteNormal, + Office2013ToolbarImageResources.Office2013ToolbarUndoNormal, + Office2013ToolbarImageResources.Office2013ToolbarRedoNormal, + Office2013ToolbarImageResources.Office2013ToolbarPageSetupNormal, + Office2013ToolbarImageResources.Office2013ToolbarPrintPreviewNormal, + Office2013ToolbarImageResources.Office2013ToolbarPrintNormal, + Office2013ToolbarImageResources.Office2013ToolbarQuickPrintNormal + ]; + + #endregion + + #region Office 2016 + + /// + /// The Office 2016 toolbar images + /// + public static Image[] Office2016ToolBarImages = + [ + Office2016ToolbarImageResources.Office2016ToolbarNewNormal, + Office2016ToolbarImageResources.Office2016ToolbarOpenNormal, + Office2016ToolbarImageResources.Office2016ToolbarSaveNormal, + Office2016ToolbarImageResources.Office2016ToolbarSaveAsNormal, + Office2016ToolbarImageResources.Office2016ToolbarSaveAllNormal, + Office2016ToolbarImageResources.Office2016ToolbarCutNormal, + Office2016ToolbarImageResources.Office2016ToolbarCopyNormal, + Office2016ToolbarImageResources.Office2016ToolbarPasteNormal, + Office2016ToolbarImageResources.Office2016ToolbarUndoNormal, + Office2016ToolbarImageResources.Office2016ToolbarRedoNormal, + Office2016ToolbarImageResources.Office2016ToolbarPageSetupNormal, + Office2016ToolbarImageResources.Office2016ToolbarPrintPreviewNormal, + Office2016ToolbarImageResources.Office2016ToolbarPrintNormal, + Office2016ToolbarImageResources.Office2016ToolbarQuickPrintNormal + ]; + + #endregion + + #region Office 2019 + + /// + /// The Office 2019 toolbar images + /// + public static Image[] Office2019ToolBarImages = + [ + Office2019ToolbarImageResources.Office2019ToolbarNewNormal, + Office2019ToolbarImageResources.Office2019ToolbarOpenNormal, + Office2019ToolbarImageResources.Office2019ToolbarSaveNormal, + Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal, + Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal, + Office2019ToolbarImageResources.Office2019ToolbarCutNormal, + Office2019ToolbarImageResources.Office2019ToolbarCopyNormal, + Office2019ToolbarImageResources.Office2019ToolbarPasteNormal, + Office2019ToolbarImageResources.Office2019ToolbarUndoNormal, + Office2019ToolbarImageResources.Office2019ToolbarRedoNormal, + Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal, + Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal, + Office2019ToolbarImageResources.Office2019ToolbarPrintNormal, + Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal + ]; + + #endregion + + #region System + + /// + /// The system toolbar images + /// + public static Image[] SystemToolBarImages = + [ + SystemToolbarImageResources.SystemToolbarNewNormal, + SystemToolbarImageResources.SystemToolbarOpenNormal, + SystemToolbarImageResources.SystemToolbarSaveNormal, + SystemToolbarImageResources.SystemToolbarSaveNormal, + SystemToolbarImageResources.SystemToolbarSaveAllNormal, + SystemToolbarImageResources.SystemToolbarCutNormal, + SystemToolbarImageResources.SystemToolbarCopyNormal, + SystemToolbarImageResources.SystemToolbarPasteNormal, + SystemToolbarImageResources.SystemToolbarUndoNormal, + SystemToolbarImageResources.SystemToolbarRedoNormal, + SystemToolbarImageResources.SystemToolbarPageSetupNormal, + SystemToolbarImageResources.SystemToolbarPrintPreviewNormal, + SystemToolbarImageResources.SystemToolbarPrintNormal, + GenericToolbarImageResources.GenericQuickPrint + ]; + + #endregion + + #region Visual Studio + + /// + /// The Visual Studio toolbar images + /// + public static Image[] VisualStudioToolBarImages = + [ + VisualStudioToolbarImageResources.VisualStudio2022ToolbarNewFile, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarOpen, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarSave, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarSaveAs, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarSaveAll, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarCut, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarCopy, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarPaste, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarUndo, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarRedo, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarPageSetup, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarPrintPreview, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarPrint, + VisualStudioToolbarImageResources.VisualStudio2022ToolbarQuickPrint + ]; + + #endregion + + #endregion + + #endregion + + #endregion + + /// + /// The default group row height + /// + public static int DefaultGroupRowHeight = 34; + /// + /// The group row height for 2013 palettes + /// + public static int Office2013GroupRowHeight = 24; + /// + /// The default offset height + /// + public static int DefaultOffsetHeight = 22; + /// + /// The offset height for 2013 palettes + /// + public static int Office2013OffsetHeight = 11; + /// + /// The image offset width + /// + public static int ImageOffsetWidth = 18; + /// + /// The group level multiplier + /// + public static int GroupLevelMultiplier = 15; + /// + /// The group image side size + /// + public static int GroupImageSide = 16; + + // For when we need some text to test with + public static readonly string DEFAULT_SHORT_SEED_TEXT = $"Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE)\r\n\u00a9 Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved.\r\n\r\nNew BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE)\r\nModifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - {DateTime.Now.Year}. All rights reserved."; + + public static readonly string DEFAULT_LONG_SEED_TEXT = $"BSD 3-Clause License\r\n\r\nCopyright (c) 2017 - {DateTime.Now.Year}, Krypton Suite\r\n\r\nAll rights reserved.\r\n\r\nRedistribution and use in source and binary forms, with or without\r\nmodification, are permitted provided that the following conditions are met:\r\n\r\n1. Redistributions of source code must retain the above copyright notice, this\r\n list of conditions and the following disclaimer.\r\n\r\n2. Redistributions in binary form must reproduce the above copyright notice,\r\n this list of conditions and the following disclaimer in the documentation\r\n and/or other materials provided with the distribution.\r\n\r\n3. Neither the name of the copyright holder nor the names of its\r\n contributors may be used to endorse or promote products derived from\r\n this software without specific prior written permission.\r\n\r\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\r\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\r\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\r\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\r\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."; + + #region Properties + /// + /// KryptonMessageBoxes that use the KRichtTextBox need another color for the text.
+ /// Set the text colour to the one a non-input control uses. + ///
+ public static Color KryptonMessageBoxRichTextBoxTextColor + { + // per ticket #1692 + get => KryptonManager.CurrentGlobalPalette.GetContentLongTextColor1(PaletteContentStyle.LabelNormalPanel, PaletteState.Normal); + } + #endregion + + #region Methods + /// + /// Helper method that returns a generic message when a variable is null. + /// + /// Name of the variable to be inserted into the text. + /// The message. + public static string VariableCannotBeNull(string variableName) => $"Variable {variableName} cannot be null."; + + /// + /// Helper method that returns a generic message when a property is null. + /// + /// Name of the property to be inserted into the text. + /// The message. + public static string PropertyCannotBeNull(string propertyName) => $"Property {propertyName} cannot be null."; + + /// + /// Helper method that returns a generic message when a parameter is null. + /// + /// Name of the parameter to be inserted into the text. + /// The message. + public static string ParameterCannotBeNull(string parameterName) => $"Parameter {parameterName} cannot be null."; + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/GlobalStrings.cs b/Source/Krypton Components/Krypton.Toolkit/General/GlobalStrings.cs index 2ea00ad31..347a7fd1d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/GlobalStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/GlobalStrings.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/GlobalSuppressions.cs b/Source/Krypton Components/Krypton.Toolkit/General/GlobalSuppressions.cs index c91807228..f0b793bd8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/GlobalSuppressions.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/GlobalSuppressions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/GraphicsHint.cs b/Source/Krypton Components/Krypton.Toolkit/General/GraphicsHint.cs index 302efed61..93e6aee8b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/GraphicsHint.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/GraphicsHint.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ public GraphicsHint(Graphics? graphics, PaletteGraphicsHint hint) _graphics = graphics; // Remember current smoothing mode - _smoothingMode = _graphics.SmoothingMode; + _smoothingMode = _graphics!.SmoothingMode; // Apply new hint switch (hint) @@ -57,8 +57,9 @@ public GraphicsHint(Graphics? graphics, PaletteGraphicsHint hint) break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(hint.ToString()); break; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/GraphicsTextHint.cs b/Source/Krypton Components/Krypton.Toolkit/General/GraphicsTextHint.cs index d222179ed..9b7574dd6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/GraphicsTextHint.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/GraphicsTextHint.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/HResult.cs b/Source/Krypton Components/Krypton.Toolkit/General/HResult.cs index 677419221..38de1a056 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/HResult.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/HResult.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ internal enum HRESULT : uint E_POINTER = 0x80004003, E_ABORT = 0x80004004, E_FAIL = 0x80004005, - + // These are CLR PI.HRESULT InvalidArgFailure = 0x80008081, CoreHostLibLoadFailure = 0x80008082, @@ -97,7 +97,7 @@ public static string AsString(this PI.HRESULT hr) ? $"HRESULT {hr} [0x{(int)hr:X} ({(int)hr:D})]" : $"HRESULT [0x{(int)hr:X} ({(int)hr:D})]"; - public static Exception GetExceptionForHR(this PI.HRESULT errorCode) => Marshal.GetExceptionForHR((int)errorCode); + public static Exception GetExceptionForHR(this PI.HRESULT errorCode) => Marshal.GetExceptionForHR((int)errorCode)!; public static void ThrowExceptionIfFailed(this PI.HRESULT hr) { diff --git a/Source/Krypton Components/Krypton.Toolkit/General/HSL.cs b/Source/Krypton Components/Krypton.Toolkit/General/HSL.cs index a1d243475..d0990e69a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/HSL.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/HSL.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -77,8 +77,8 @@ public Color Color var temp1 = (2.0 * Luminance) - temp2; - double[] t3 = { Hue + (1.0 / 3.0), Hue, Hue - (1.0 / 3.0) }; - double[] clr = { 0, 0, 0 }; + double[] t3 = [Hue + (1.0 / 3.0), Hue, Hue - (1.0 / 3.0)]; + double[] clr = [0, 0, 0]; for (var i = 0; i < 3; i++) { diff --git a/Source/Krypton Components/Krypton.Toolkit/General/IntegratedToolbarManager.cs b/Source/Krypton Components/Krypton.Toolkit/General/IntegratedToolbarManager.cs index 27666155b..9b569b25d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/IntegratedToolbarManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/IntegratedToolbarManager.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -64,7 +64,7 @@ internal void SetupToolBar() } catch (Exception e) { - ExceptionHandler.CaptureException(e); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } @@ -79,7 +79,7 @@ internal void ShowToolBar(bool visible) } catch (Exception e) { - ExceptionHandler.CaptureException(e); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutBoxData.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutBoxData.cs new file mode 100644 index 000000000..a8f6555ef --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutBoxData.cs @@ -0,0 +1,57 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// A structure that contains basic information for . + public struct KryptonAboutBoxData + { + #region Public + + /// Gets or sets the show toolkit information. + /// The show toolkit information. + public bool? ShowToolkitInformation { get; set; } + + /// Gets or sets the current assembly. + /// The current assembly. + public Assembly CurrentAssembly { get; set; } + + /// Gets or sets the use full built on date. + /// The use full built on date. + public bool? UseFullBuiltOnDate { get; set; } + + /// Gets or sets the header image. + /// The header image. + public Image? HeaderImage { get; set; } //= GenericImageResources.InformationSmall; + + /// Gets or sets the main image. + /// The main image. + public Image? MainImage { get; set; } + + /// Gets or sets the name of the application. + /// The name of the application. + public string ApplicationName { get; set; } + + /// Gets or sets the use RTL layout of the UI. + /// The use RTL layout in an . + public KryptonUseRTLLayout UseRtlLayout { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonAboutBoxData() + { + UseRtlLayout = KryptonUseRTLLayout.No; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutBoxUtilities.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutBoxUtilities.cs new file mode 100644 index 000000000..52058dc6b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutBoxUtilities.cs @@ -0,0 +1,330 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// This class does the heavy lifting for and its associated components. + internal class KryptonAboutBoxUtilities + { + #region Identity + + public KryptonAboutBoxUtilities() + { + + } + + #endregion + + #region Implementation + + public static DateTime AssemblyLastWriteTime(Assembly assembly) + { + if (string.IsNullOrEmpty(assembly.Location)) + { + return DateTime.MaxValue; + } + + try + { + return File.GetLastWriteTime(assembly.Location); + } + catch + { + return DateTime.MaxValue; + } + } + + public static DateTime AssemblyBuildDate(Assembly? assembly, bool forceFileDate) + { + if (assembly != null) + { + Version assemblyVersion = assembly.GetName().Version!; + + DateTime dateTime; + + if (forceFileDate) + { + dateTime = AssemblyLastWriteTime(assembly); + } + else + { + dateTime = DateTime.Parse(@"01/01/1970").AddDays(assemblyVersion!.Build).AddSeconds(assemblyVersion.Revision * 2); + + // if (TimeZone.IsDaylightSavingTime(dateTime, TimeZone.CurrentTimeZone.GetDaylightChanges(dateTime.Year))) + // Timezone is deprecated and replaces by TimeZoneInfo + + if (TimeZoneInfo.Local.IsDaylightSavingTime(dateTime)) + { + dateTime = dateTime.AddHours(1); + } + + if (dateTime > DateTime.Now || assemblyVersion.Build < 730 || assemblyVersion.Revision == 0) + { + dateTime = AssemblyLastWriteTime(assembly); + } + } + + return dateTime; + } + else + { + return DateTime.Now; + } + } + + public static NameValueCollection AssemblyAttribs(Assembly assembly) + { + string typeName; + string name; + string value; + var nvc = new NameValueCollection(); + var r = new Regex(@"(\.Assembly|\.)(?[^.]*)Attribute$", RegexOptions.IgnoreCase); + + foreach (var attrib in assembly.GetCustomAttributes(false)) + { + typeName = attrib.GetType().ToString(); + name = r.Match(typeName).Groups["Name"].ToString(); + value = ""; + switch (typeName) + { + case "System.CLSCompliantAttribute": + value = ((CLSCompliantAttribute)attrib).IsCompliant.ToString(); + break; + case "System.Diagnostics.DebuggableAttribute": + value = ((DebuggableAttribute)attrib).IsJITTrackingEnabled.ToString(); + break; + case "System.Reflection.AssemblyCompanyAttribute": + value = ((AssemblyCompanyAttribute)attrib).Company; + break; + case "System.Reflection.AssemblyConfigurationAttribute": + value = ((AssemblyConfigurationAttribute)attrib).Configuration; + break; + case "System.Reflection.AssemblyCopyrightAttribute": + value = ((AssemblyCopyrightAttribute)attrib).Copyright; + break; + case "System.Reflection.AssemblyDefaultAliasAttribute": + value = ((AssemblyDefaultAliasAttribute)attrib).DefaultAlias; + break; + case "System.Reflection.AssemblyDelaySignAttribute": + value = ((AssemblyDelaySignAttribute)attrib).DelaySign.ToString(); + break; + case "System.Reflection.AssemblyDescriptionAttribute": + value = ((AssemblyDescriptionAttribute)attrib).Description; + break; + case "System.Reflection.AssemblyInformationalVersionAttribute": + value = ((AssemblyInformationalVersionAttribute)attrib).InformationalVersion; + break; + case "System.Reflection.AssemblyKeyFileAttribute": + value = ((AssemblyKeyFileAttribute)attrib).KeyFile; + break; + case "System.Reflection.AssemblyProductAttribute": + value = ((AssemblyProductAttribute)attrib).Product; + break; + case "System.Reflection.AssemblyTrademarkAttribute": + value = ((AssemblyTrademarkAttribute)attrib).Trademark; + break; + case "System.Reflection.AssemblyTitleAttribute": + value = ((AssemblyTitleAttribute)attrib).Title; + break; + case "System.Resources.NeutralResourcesLanguageAttribute": + value = ((NeutralResourcesLanguageAttribute)attrib).CultureName; + break; + case "System.Resources.SatelliteContractVersionAttribute": + value = ((SatelliteContractVersionAttribute)attrib).Version; + break; + case "System.Runtime.InteropServices.ComCompatibleVersionAttribute": + { + ComCompatibleVersionAttribute x; + x = ((ComCompatibleVersionAttribute)attrib); + value = x.MajorVersion + "." + x.MinorVersion + "." + x.RevisionNumber + "." + x.BuildNumber; + break; + } + case "System.Runtime.InteropServices.ComVisibleAttribute": + value = ((ComVisibleAttribute)attrib).Value.ToString(); + break; + case "System.Runtime.InteropServices.GuidAttribute": + value = ((GuidAttribute)attrib).Value; + break; + case "System.Runtime.InteropServices.TypeLibVersionAttribute": + { + TypeLibVersionAttribute x; + x = ((TypeLibVersionAttribute)attrib); + value = x.MajorVersion + "." + x.MinorVersion; + break; + } + case "System.Security.AllowPartiallyTrustedCallersAttribute": + value = "(Present)"; + break; + default: + // debug.writeline("** unknown assembly attribute '" + TypeName + "'") + value = typeName; + break; + } + + if (nvc[name] == null) + { + nvc.Add(name, value); + } + } + + // add some extra values that are not in the AssemblyInfo, but nice to have + // codebase + try + { + // Warning SYSLIB0012 'Assembly.EscapedCodeBase' is obsolete: + // 'Assembly.CodeBase and Assembly.EscapedCodeBase are only included for .NET Framework compatibility. + // Use Assembly.Location.' Krypton.Toolkit 2022(net6.0 - windows), Krypton.Toolkit 2022(net8.0 - windows), Krypton.Toolkit 2022(net9.0 - windows) + //nvc.Add("CodeBase", assembly.EscapedCodeBase.Replace("file:///", "")); + + string? s = assembly.Location.Replace("file:///", ""); + nvc.Add("CodeBase", s is not null ? s : string.Empty ); + } + catch (NotSupportedException) + { + nvc.Add("CodeBasee", "(not supported)"); + } + // build date + var dt = AssemblyBuildDate(assembly, false); + if (dt == DateTime.MaxValue) + { + nvc.Add("BuildDate", "(unknown)"); + } + else + { + // ToDo: Use current culture format + nvc.Add("BuildDate", dt.ToString("yyyy-MM-dd hh:mm tt")); + } + // location + try + { + nvc.Add("Location", assembly.Location); + } + catch (NotSupportedException) + { + nvc.Add("Location", "(not supported)"); + } + // version + try + { + if (assembly.GetName().Version!.Major == 0 && assembly.GetName().Version!.Minor == 0) + { + nvc.Add("Version", "(unknown)"); + } + else + { + nvc.Add("Version", assembly.GetName().Version!.ToString()); + } + } + catch (Exception) + { + nvc.Add("Version", "(unknown)"); + } + + nvc.Add("FullName", assembly.FullName); + + return nvc; + } + + public static void LaunchSystemInformation() => GlobalToolkitUtilities.LaunchProcess(@"MSInfo32.exe"); + + public static void PopulateAssemblyDetails(Assembly assembly, KryptonDataGridView assemblyData) + { + assemblyData.Rows.Clear(); + + Populate(assemblyData, $@"{KryptonManager.Strings.AboutBoxStrings.ImageRuntimeVersion}", assembly.ImageRuntimeVersion); + + // Global assembly cache APIs are obsolete + // https://learn.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/5.0/global-assembly-cache-apis-obsolete + // Statement below commented out to remove the corresponding warning. + // Populate(assemblyData, $@"{KryptonManager.Strings.AboutBoxStrings.LoadedFromGlobalAssemblyCache}", $@"{assembly.GlobalAssemblyCache}"); + + NameValueCollection collection = AssemblyAttribs(assembly); + + foreach (string key in collection) + { + Populate(assemblyData, key, collection[key]!); + } + } + + private static void Populate(KryptonDataGridView assemblyData, string key, string value) => assemblyData.Rows.Add(key, value); + + public static void PopulateBasicApplicationInformation(KryptonDataGridView dataStore) + { + AppDomain domain = AppDomain.CurrentDomain; + + string entryAssemblyName = Assembly.GetEntryAssembly()!.GetName().Name!; + + string executingAssemblyName = Assembly.GetExecutingAssembly().GetName().Name!; + + string callingAssemblyName = Assembly.GetCallingAssembly().GetName().Name!; + + Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.ApplicationName, Assembly.GetEntryAssembly()!.GetName().Name!); + + Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.ApplicationBase, Assembly.GetEntryAssembly()!.Location); + + // ToDo: Move to .NET + //Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.CachePath, domain.SetupInformation.CachePath); + + //Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.ConfigurationFile, domain.SetupInformation.ConfigurationFile); + + //Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.DynamicBase, domain.SetupInformation.DynamicBase); + + //Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.FriendlyName, domain.FriendlyName); + + //Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.LicenseFile, domain.SetupInformation.LicenseFile); + + //Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.PrivateBinPath, domain.SetupInformation.PrivateBinPath); + + //Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.ShadowCopyDirectories, domain.SetupInformation.ShadowCopyDirectories); + + Populate(dataStore, string.Empty, string.Empty); + + Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.EntryAssembly, entryAssemblyName!); + + Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.ExecutingAssembly, executingAssemblyName!); + + Populate(dataStore, KryptonManager.Strings.AboutBoxBasicStrings.CallingAssembly, callingAssemblyName!); + } + + public static void PopulateAssemblies(KryptonComboBox assemblyList, KryptonDataGridView dataStore) + { + string entryAssemblyName = Assembly.GetEntryAssembly()!.GetName().Name!; + + foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + PopulateAssemblySummary(assembly, dataStore, assemblyList); + } + + assemblyList.SelectedIndex = assemblyList.FindStringExact(entryAssemblyName!); + } + + private static void PopulateAssemblySummary(Assembly assembly, KryptonDataGridView dataStore, KryptonComboBox assemblyItems) + { + NameValueCollection collection = AssemblyAttribs(assembly); + + string assemblyName = assembly.GetName().Name!; + + foreach (var value in collection) + { + dataStore.Rows.Add(value); + } + + assemblyItems.Items.Add(assemblyName!); + } + + public static FileVersionInfo GetFileVersionInfo(string assemblyLocation) + { + FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(assemblyLocation); + + return versionInfo; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutToolkitData.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutToolkitData.cs new file mode 100644 index 000000000..dbb914104 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonAboutToolkitData.cs @@ -0,0 +1,213 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Contains the toolkit information used for creating a new . + public struct KryptonAboutToolkitData + { + #region Static Fields + + private const string DEFAULT_BUILT_ON_TEXT = @"Built On"; + + private const string DEFAULT_CURRENT_THEME_TEXT = @"Current Theme"; + + private const string DEFAULT_HEADER_TEXT = @"About"; + + private const string DEFAULT_GENERAL_INFORMATION_WELCOME_TEXT = @"Some of the components used in this application are part of the Krypton Standard Toolkit."; + + private const string DEFAULT_GENERAL_INFORMATION_LICENSE_TEXT = @"License"; + + private const string DEFAULT_GENERAL_INFORMATION_LEARN_MORE_TEXT = @"To learn more, click here."; + + private const string DEFAULT_JOIN_DISCORD_SERVER = @"Join our Discord server."; + + private const string DEFAULT_VIEW_REPOSITORIES = @"View our repositories."; + + private const string DEFAULT_DOWNLOAD_DOCUMENTATION = @"Download the latest documentation."; + + private const string DEFAULT_DOWNLOAD_DEMOS = @"Download the demos."; + + private const string DEFAULT_FILE_NAME_COLUMN_HEADER_TEXT = @"File Name"; + + private const string DEFAULT_VERSION_COLUMN_HEADER_TEXT = @"Version"; + + private const string DEFAULT_TOOL_BAR_GENERAL_INFORMATION_TEXT = @"General Information"; + + private const string DEFAULT_TOOL_BAR_DISCORD_TEXT = @"Discord"; + + private const string DEFAULT_TOOL_BAR_DEVELOPER_INFORMATION_TEXT = @"Developer Information"; + + private const string DEFAULT_TOOL_BAR_VERSION_INFORMATION_TEXT = @"Version Information"; + + #endregion + + #region Instance Fields + + /// Shows the discord button. + public bool ShowDiscordButton { get; set; } = true; + + /// Shows the developer information button. + public bool ShowDeveloperInformationButton { get; set; } = true; + + /// Shows the version information button. + public bool ShowVersionInformationButton { get; set; } = true; + + /// Shows the theme options. + public bool ShowThemeOptions { get; set; } = true; + + /// The show system information button. + public bool ShowSystemInformationButton { get; set; } = true; + + /// Gets or sets a value indicating whether to show the build date label. + public bool ShowBuildDate { get; set; } = true; + + //public Font CommonFont; + //public Font CurrentThemeFont; + //public Font HeaderFont; + + /// The toolkit type. + public ToolkitType ToolkitType { get; set; } = ToolkitType.Stable; + + /// The header text. + public string HeaderText { get; set; } = DEFAULT_HEADER_TEXT; + + /// The current theme text. + public string CurrentThemeText { get; set; } = DEFAULT_CURRENT_THEME_TEXT; + + /// The general information welcome text. + public string GeneralInformationWelcomeText { get; set; } = DEFAULT_GENERAL_INFORMATION_WELCOME_TEXT; + + /// The general information license text. + public string GeneralInformationLicenseText { get; set; } = DEFAULT_GENERAL_INFORMATION_LICENSE_TEXT; + + /// The general information learn more text. + public string GeneralInformationLearnMoreText { get; set; } = DEFAULT_GENERAL_INFORMATION_LEARN_MORE_TEXT; + + /// The discord text. + public string DiscordText { get; set; } = DEFAULT_JOIN_DISCORD_SERVER; + + /// The repository information text. + public string RepositoryInformationText { get; set; } = DEFAULT_VIEW_REPOSITORIES; + + /// The download documentation text. + public string DownloadDocumentationText { get; set; } = DEFAULT_DOWNLOAD_DOCUMENTATION; + + /// The download demos text. + public string DownloadDemosText { get; set; } = DEFAULT_DOWNLOAD_DEMOS; + + /// The file name column header text. + public string FileNameColumnHeaderText { get; set; } = DEFAULT_FILE_NAME_COLUMN_HEADER_TEXT; + + /// The version column header text. + public string VersionColumnHeaderText { get; set; } = DEFAULT_VERSION_COLUMN_HEADER_TEXT; + + /// The tool bar general information text. + public string ToolBarGeneralInformationText { get; set; } = DEFAULT_TOOL_BAR_GENERAL_INFORMATION_TEXT; + + /// The tool bar discord text. + public string ToolBarDiscordText { get; set; } = DEFAULT_TOOL_BAR_DISCORD_TEXT; + + /// The tool bar developer information text. + public string ToolBarDeveloperInformationText { get; set; } = DEFAULT_TOOL_BAR_DEVELOPER_INFORMATION_TEXT; + + /// The tool bar version information text. + public string ToolBarVersionInformationText { get; set; } = DEFAULT_TOOL_BAR_VERSION_INFORMATION_TEXT; + + /// Gets or sets the build on text. + public string BuildOnText { get; set; } = DEFAULT_BUILT_ON_TEXT; + + /// The learn more link area. + public LinkArea LearnMoreLinkArea { get; set; } = new LinkArea(133, 143); + + /// The discord link area. + public LinkArea DiscordLinkArea { get; set; } = new LinkArea(0, 4); + + /// The repository information link area. + public LinkArea RepositoryInformationLinkArea { get; set; } = new LinkArea(0, 4); + + /// The download demos link area. + public LinkArea DownloadDemosLinkArea { get; set; } = new LinkArea(0, 9); + + /// The documentation link area. + public LinkArea DocumentationLinkArea { get; set; } = new LinkArea(0, 9); + + /// Gets or sets the use RTL layout of the UI. + /// The use RTL layout in an . + public KryptonUseRTLLayout UseRtlLayout { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonAboutToolkitData() + { + ShowDiscordButton = true; + + ShowDeveloperInformationButton = true; + + ShowVersionInformationButton = true; + + ShowThemeOptions = true; + + ShowSystemInformationButton = true; + + ShowBuildDate = true; + + ToolkitType = ToolkitType.Stable; + + BuildOnText = DEFAULT_BUILT_ON_TEXT; + + HeaderText = DEFAULT_HEADER_TEXT; + + CurrentThemeText = DEFAULT_CURRENT_THEME_TEXT; + + GeneralInformationLearnMoreText = DEFAULT_GENERAL_INFORMATION_LEARN_MORE_TEXT; + + GeneralInformationLicenseText = DEFAULT_GENERAL_INFORMATION_LICENSE_TEXT; + + GeneralInformationWelcomeText = DEFAULT_GENERAL_INFORMATION_WELCOME_TEXT; + + DiscordText = DEFAULT_JOIN_DISCORD_SERVER; + + RepositoryInformationText = DEFAULT_VIEW_REPOSITORIES; + + DownloadDocumentationText = DEFAULT_DOWNLOAD_DOCUMENTATION; + + DownloadDemosText = DEFAULT_DOWNLOAD_DEMOS; + + FileNameColumnHeaderText = DEFAULT_FILE_NAME_COLUMN_HEADER_TEXT; + + VersionColumnHeaderText = DEFAULT_VERSION_COLUMN_HEADER_TEXT; + + ToolBarGeneralInformationText = DEFAULT_TOOL_BAR_GENERAL_INFORMATION_TEXT; + + ToolBarDiscordText = DEFAULT_TOOL_BAR_DISCORD_TEXT; + + ToolBarDeveloperInformationText = DEFAULT_TOOL_BAR_DEVELOPER_INFORMATION_TEXT; + + ToolBarVersionInformationText = DEFAULT_TOOL_BAR_VERSION_INFORMATION_TEXT; + + LearnMoreLinkArea = new LinkArea(133, 143); + + DiscordLinkArea = new LinkArea(0, 4); + + RepositoryInformationLinkArea = new LinkArea(0, 4); + + DownloadDemosLinkArea = new LinkArea(0, 9); + + DocumentationLinkArea = new LinkArea(0, 9); + + UseRtlLayout = KryptonUseRTLLayout.No; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonCommandType.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonCommandType.cs index 4683f51e5..531d5f7a6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/KryptonCommandType.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonCommandType.cs @@ -2,7 +2,7 @@ /* * * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonControlCollection.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonControlCollection.cs index 32827a672..f32fe1fbe 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/KryptonControlCollection.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonControlCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonDefaultColorAttribute.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonDefaultColorAttribute.cs index 0b8eec92a..9ccbc638e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/KryptonDefaultColorAttribute.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonDefaultColorAttribute.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -22,7 +22,7 @@ public sealed class KryptonDefaultColorAttribute : DefaultValueAttribute /// Initialize a new instance of the KryptonDefaultColorAttribute class. ///
public KryptonDefaultColorAttribute() - : base(Color.Empty) + : base(GlobalStaticValues.EMPTY_COLOR) { } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonFormFadeController.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonFormFadeController.cs new file mode 100644 index 000000000..20da719c0 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonFormFadeController.cs @@ -0,0 +1,457 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// This deals with the fading in and out of . The developer must explicitly enable this, as it is turned off by default. Original library: (https://gist.github.com/nathan-fiscaletti/3c0514862fe88b5664b10444e1098778). + internal class KryptonFormFadeController + { + #region Instance Fields + + // Disabled unused field + //private bool _fadingEnabled; + + private bool _shouldClose; + + private float _fadeIn; + + private float _fadeOut; + + private float _fadeSpeed; + + private int _fadeDuration; + + private FormFadeDirection _fadeDirection; + + private FadeCompleted _fadeCompleted; + + private readonly TaskCompletionSource _showDialogResult; + + private readonly VisualForm? _parentForm; + + private readonly VisualForm? _owner; + + #endregion + + #region Delegate + + public delegate void FadeCompleted(); + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonFormFadeController(VisualForm owner, VisualForm? childForm) : this(owner) => _parentForm = childForm ?? null; + + public KryptonFormFadeController(VisualForm owner) + { + _owner = owner; + + // Disabled unused field + //_fadingEnabled = false; + + _shouldClose = true; + + _fadeIn = 0.0f; + + _fadeOut = 0.0f; + + _showDialogResult = new TaskCompletionSource(); + } + + #endregion + + #region Implementation + + /// + /// Begin fading the _owner. + /// + private void BeginFade() + { + UpdateOpacity(); + + _fadeCompleted?.Invoke(); + } + + /// + /// Update the opacity of the _owner using the timer. + /// + private void UpdateOpacity() + { + if (_owner!.IsDisposed) + { + return; + } + + switch (_fadeDirection) + { + // Fade in + case FormFadeDirection.In: + if (_owner.Opacity < 1.0) + { + _owner.Opacity += (_fadeSpeed / 1000.0); + } + else + { + return; + } + + break; + + // Fade out + case FormFadeDirection.Out: + if (_owner.Opacity > 0.1) + { + _owner.Opacity -= (_fadeSpeed / 1000.0); + } + else + { + if (!_shouldClose) + { + _owner.Hide(); + } + else + { + _owner.Close(); + } + + return; + } + break; + } + + // Have to use a thread sleep, rather than an await, otherwise on close would have completed as disposed on the first await Task.Delay() + Thread.Sleep(10); + UpdateOpacity(); + } + + /// + /// Fade the _owner in at the defined speed as a dialog + /// based on parent _owner. + /// + private async Task ShowDialog(float fadeSpeed, FadeCompleted? finished) + { + _parentForm!.BeginInvoke(() => _showDialogResult.SetResult(_owner!.ShowDialog(_parentForm))); + + _fadeCompleted = finished!; + + _owner!.Opacity = 0; + + _fadeSpeed = fadeSpeed; + + _fadeDirection = FormFadeDirection.In; + + BeginFade(); + + return await _showDialogResult.Task; + } + + /// + /// Fade the _owner in at the defined speed. + /// + private void FadeIn(float fadeSpeed, FadeCompleted? finished) + { + _owner!.Opacity = 0; + _owner.Show(); + + _fadeCompleted = finished!; + + _fadeSpeed = fadeSpeed; + + _fadeDirection = FormFadeDirection.In; + + BeginFade(); + } + + private void FadeIn(FadeSpeedChoice fadeSpeedChoice, FadeCompleted? finished, float? fadeSpeed) + { + _owner!.Opacity = 0; + + _owner.Show(); + + _fadeCompleted = finished!; + + switch (fadeSpeedChoice) + { + case FadeSpeedChoice.Slowest: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_SLOWEST; + break; + case FadeSpeedChoice.Slower: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_SLOWER; + break; + case FadeSpeedChoice.Slow: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_SLOW; + break; + case FadeSpeedChoice.Normal: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_NORMAL; + break; + case FadeSpeedChoice.Fast: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_FAST; + break; + case FadeSpeedChoice.Faster: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_FASTER; + break; + case FadeSpeedChoice.Fastest: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_FASTEST; + break; + case FadeSpeedChoice.Custom: + _fadeSpeed = fadeSpeed ?? 0.5f; + break; + } + + _fadeDirection = FormFadeDirection.In; + + BeginFade(); + } + + /// + /// Fade the _owner out at the defined speed. + /// + private void FadeOut(float? fadeSpeed, FadeCompleted? finished) + { + if (_owner!.Opacity < 0.1) + { + finished?.Invoke(); + return; + } + + _fadeCompleted = finished!; + _owner.Opacity = 100; + _fadeSpeed = fadeSpeed ?? 0.5f; + + _fadeDirection = FormFadeDirection.Out; + + BeginFade(); + } + + private void FadeOut(FadeSpeedChoice fadeSpeedChoice, FadeCompleted? finished, float? fadeSpeed) + { + if (_owner!.Opacity < 0.1) + { + finished?.Invoke(); + + return; + } + _fadeCompleted = finished!; + + _owner.Opacity = 100; + + switch (fadeSpeedChoice) + { + case FadeSpeedChoice.Slowest: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_SLOWEST; + break; + case FadeSpeedChoice.Slower: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_SLOWER; + break; + case FadeSpeedChoice.Slow: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_SLOW; + break; + case FadeSpeedChoice.Normal: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_NORMAL; + break; + case FadeSpeedChoice.Fast: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_FAST; + break; + case FadeSpeedChoice.Faster: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_FASTER; + break; + case FadeSpeedChoice.Fastest: + _fadeSpeed = KryptonFormFadeSpeed.DEFAULT_FASTEST; + break; + case FadeSpeedChoice.Custom: + _fadeSpeed = fadeSpeed ?? 0.5f; + break; + } + + _fadeDirection = FormFadeDirection.Out; + + BeginFade(); + } + + /// + /// Fades a dialog in using parent _owner and defined fade speed. + /// + public static async Task ShowDialog(VisualForm owner, VisualForm parent, float fadeSpeed) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner, parent); + return await fader.ShowDialog(fadeSpeed, null); + } + + /// + /// Fades a dialog in using parent _owner and defined fade speed + /// and call the finished delegate.) + /// + public static async Task ShowDialog(VisualForm owner, VisualForm parent, float fadeSpeed, FadeCompleted finished) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner, parent); + return await fader.ShowDialog(fadeSpeed, finished); + } + + public static void FadeIn(VisualForm owner, float fadeSpeed, FadeCompleted finished) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner); + fader.FadeIn(fadeSpeed, finished); + } + + public static void FadeIn(VisualForm owner, FadeSpeedChoice fadeSpeedChoice, float? fadeSpeed, FadeCompleted? finished) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner); + + fader.FadeIn(fadeSpeedChoice, finished, fadeSpeed); + } + + /// + /// Fade a _owner out at the defined speed. + /// + public static void FadeOut(VisualForm owner, float? fadeSpeed, FadeCompleted? finished) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner); + fader.FadeOut(fadeSpeed, finished); + } + + public static void FadeOut(VisualForm owner, FadeSpeedChoice fadeSpeedChoice, float? fadeSpeed, FadeCompleted? finished) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner); + + fader.FadeOut(fadeSpeedChoice, finished, fadeSpeed); + } + + /// + /// Fade a _owner in at the defined speed. + /// + public static void FadeIn(VisualForm owner, float fadeSpeed) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner); + fader.FadeIn(fadeSpeed, null); + } + + /// + /// Fade a _owner out at the defined speed. + /// + public static void FadeOut(VisualForm owner, float fadeSpeed) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner); + fader.FadeOut(fadeSpeed, null); + } + + /// + /// Fade a _owner out at the defined speed and + /// close it when the fade has completed. + /// + public static void FadeOutAndClose(VisualForm owner, float fadeSpeed) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner) + { + _shouldClose = true + }; + fader.FadeOut(fadeSpeed, null); + } + + /// + /// Fade a _owner out at the defined speed and + /// close it when the fade has completed. + /// After the _owner has closed, call the FadeComplete delegate. + /// + public static void FadeOutAndClose(VisualForm owner, float fadeSpeed, FadeCompleted finished) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner) + { + _shouldClose = true + }; + fader.FadeOut(fadeSpeed, finished); + } + + public static void FadeOutAndClose(VisualForm owner, FadeSpeedChoice fadeSpeedChoice, float? fadeSpeed, FadeCompleted? finished) + { + KryptonFormFadeController fader = new KryptonFormFadeController(owner) + { + _shouldClose = true + }; + + fader.FadeOut(fadeSpeedChoice, finished, fadeSpeed); + } + + /// Fades the _owner in. + /// The owner. + public static async void ModernFadeFormIn(VisualForm owner) + { + KryptonFormFadeController controller = new KryptonFormFadeController(owner); + + while (owner.Opacity <= 1.1) + { + await Task.Delay(controller._fadeDuration); + + owner.Opacity += 0.5; + } + + owner.Opacity = 1; + } + + /// Fades the _owner in. + /// The owner. + /// The fade speed. + public static void ModernFadeFormIn(VisualForm owner, int? fadeSpeed) + { + KryptonFormFadeController controller = new KryptonFormFadeController(owner); + + int speed = fadeSpeed ?? 50; + + for (controller._fadeIn = 0.0f; controller._fadeIn <= 1.1f; controller._fadeIn += 0.1f) + { + owner.Opacity = controller._fadeIn; + + owner.Refresh(); + + Thread.Sleep(speed); + } + } + + /// Fades the _owner out. + /// The owner. + /// The fade speed. + public static void ModernFadeFormOut(VisualForm owner, int? fadeSpeed) + { + KryptonFormFadeController controller = new KryptonFormFadeController(owner); + + int speed = fadeSpeed ?? 50; + + for (controller._fadeOut = 90; controller._fadeOut >= 10; controller._fadeOut += 10) + { + owner.Opacity = controller._fadeOut / 100; + + owner.Refresh(); + + Thread.Sleep(speed); + } + } + + /// Fades the _owner out. + /// The owner. + /// The next _owner. + public async void ModernFadeFormOut(VisualForm owner, VisualForm? nextForm) + { + KryptonFormFadeController controller = new KryptonFormFadeController(owner, nextForm); + + while (owner.Opacity > 0.0) + { + await Task.Delay(controller._fadeDuration); + + owner.Opacity -= 0.05; + } + + owner.Opacity = 0; + + nextForm?.Show(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonFormFadeSpeed.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonFormFadeSpeed.cs new file mode 100644 index 000000000..db692bda9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonFormFadeSpeed.cs @@ -0,0 +1,13 @@ +namespace Krypton.Toolkit +{ + internal class KryptonFormFadeSpeed + { + public const float DEFAULT_SLOWEST = 1; + public const float DEFAULT_SLOWER = 10; + public const float DEFAULT_SLOW = 25; + public const float DEFAULT_NORMAL = 50; + public const float DEFAULT_FAST = 60; + public const float DEFAULT_FASTER = 75; + public const float DEFAULT_FASTEST = 100; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLanguageManager.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonGlobalToolkitStrings.cs similarity index 51% rename from Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLanguageManager.cs rename to Source/Krypton Components/Krypton.Toolkit/General/KryptonGlobalToolkitStrings.cs index 64a905f78..e874bf45a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Controls Toolkit/KryptonLanguageManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonGlobalToolkitStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -10,182 +10,189 @@ namespace Krypton.Toolkit { /// Access 'Global' Krypton string settings. - [Category(@"Code")] - [Description(@"Access 'Global' Krypton string settings.")] - //[Designer(typeof(KryptonLanguageManagerDesigner))] - [ToolboxBitmap(typeof(KryptonLanguageManager), "ToolboxBitmaps.KryptonLanguageManager.bmp")] - [ToolboxItem(true)] - public class KryptonLanguageManager : Component + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonGlobalToolkitStrings : GlobalId { - #region Public + #region Static Strings - /// Gets the global color strings. - /// The global color strings. - [Category(@"Visuals")] - [Description(@"Collection of color strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public GlobalColorStrings GlobalColorStrings => ColorStrings; + /// Gets the color strings. + /// The color strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static GlobalColorStrings GlobalColorStrings { get; } = new GlobalColorStrings(); - private bool ShouldSerializeColorStrings() => !ColorStrings.IsDefault; + /// Gets the spec style strings. + /// The spec style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static ButtonStyleStrings ButtonStyles { get; } = new ButtonStyleStrings(); - /// Resets the color strings. - public void ResetColorStrings() => ColorStrings.Reset(); + /// Gets the custom toolkit strings. + /// The custom toolkit strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static CustomToolkitStrings CustomToolkitStrings { get; } = new CustomToolkitStrings(); - /*/// Gets the button spec style strings. - /// The button spec style strings. - [Category(@"Visuals")] - [Description(@"Collection of button spec style strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public ButtonStyleStrings ButtonStyleStrings => ButtonStyles; + /// Gets the general ribbon strings. + /// The general ribbon strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static GeneralRibbonStrings GeneralRibbonStrings { get; } = new GeneralRibbonStrings(); - private bool ShouldSerializeButtonSpecStyleStrings() => !ButtonStyles.IsDefault; + /// Gets the strings. + /// The strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static GeneralToolkitStrings GeneralToolkitStrings + { get; } = new GeneralToolkitStrings(); - /// Resets the button spec style strings. - public void ResetButtonSpecStyleStrings() => ButtonStyles.Reset();*/ + /// Gets the grid view style strings. + /// The grid view style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static DataGridViewStyleStrings DataGridViewStyles { get; } = new DataGridViewStyleStrings(); - /// Gets the custom toolkit strings. - /// The custom toolkit strings. - [Category(@"Visuals")] - [Description(@"Collection of custom toolkit strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public CustomToolkitStrings CustomStrings => CustomToolkitStrings; + /// Gets the style strings. + /// The style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static GridStyleStrings GridStyles { get; } = new GridStyleStrings(); - private bool ShouldSerializeCustomStrings() => !CustomToolkitStrings.IsDefault; + /// Gets the group collapsed target strings. + /// The group collapsed target strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static HeaderGroupCollapsedTargetStrings GroupCollapsedTargetStrings { get; } = + new HeaderGroupCollapsedTargetStrings(); - /// Resets the custom strings. - public void ResetCustomStrings() => CustomToolkitStrings.ResetValues(); + /// Gets the header styles. + /// The header styles. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static HeaderStyleStrings HeaderStyles { get; } = new HeaderStyleStrings(); - /// Gets the general toolkit strings. - /// The general toolkit strings. - [Category(@"Visuals")] - [Description(@"Collection of general toolkit strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public GeneralToolkitStrings GeneralStrings => GeneralToolkitStrings; + /// Gets the input control styles. + /// The input control styles. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static InputControlStyleStrings InputControlStyles { get; } = new InputControlStyleStrings(); - private bool ShouldSerializeGeneralStrings() => !GeneralToolkitStrings.IsDefault; + /// Gets the tool bar strings. + /// The tool bar strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static IntegratedToolBarStrings IntegratedToolBarStrings { get; } = new IntegratedToolBarStrings(); - /// Resets the general strings. - public void ResetGeneralStrings() => GeneralToolkitStrings.Reset(); + /// Gets the link behavior strings. + /// The link behavior strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static KryptonLinkBehaviorStrings KryptonLinkBehaviorStrings { get; } = new KryptonLinkBehaviorStrings(); - /*/// Gets the data grid view style strings. - /// The data grid view style strings. - [Category(@"Visuals")] - [Description(@"Collection of datagrid view style strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public DataGridViewStyleStrings DataGridViewStyleStrings => DataGridViewStyles; + /// Gets the krypton label style strings. + /// The krypton label style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static LabelStyleStrings KryptonLabelStyleStrings { get; } = new LabelStyleStrings(); - private bool ShouldSerializeDataGridViewStyleStrings() => !DataGridViewStyles.IsDefault; + /// Gets the back style strings. + /// The back style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteBackStyleStrings PaletteBackStyleStrings { get; } = new PaletteBackStyleStrings(); - /// Resets the data grid view style strings. - public void ResetDataGridViewStyleStrings() => DataGridViewStyles.Reset(); + /// Gets the border style strings. + /// The border style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteBorderStyleStrings PaletteBorderStyleStrings { get; } = new PaletteBorderStyleStrings(); - /// Gets the grid style strings. - /// The grid style strings. - [Category(@"Visuals")] - [Description(@"Collection of grid style strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public GridStyleStrings GridStyleStrings => GridStyles; + /// Gets the button orientation strings. + /// The button orientation strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteButtonOrientationStrings PaletteButtonOrientationStrings { get; } = + new PaletteButtonOrientationStrings(); - private bool ShouldSerializeGridStyleStrings() => !GridStyles.IsDefault; + /// Gets the button spec styles. + /// The button spec styles. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteButtonSpecStyleStrings PaletteButtonSpecStyleStrings { get; } = new PaletteButtonSpecStyleStrings(); - /// Resets the grid style strings. - public void ResetGridStyleStrings() => GridStyles.Reset(); + /// Gets the button style strings. + /// The button style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteButtonStyleStrings PaletteButtonStyleStrings { get; } = new PaletteButtonStyleStrings(); - /// Gets the header group collapsed target strings. - /// The header group collapsed target strings. - [Category(@"Visuals")] - [Description(@"Collection of header group collapsed target strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public HeaderGroupCollapsedTargetStrings HeaderGroupCollapsedTargetStrings => GroupCollapsedTargetStrings; + /// Gets the content style strings. + /// The content style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteContentStyleStrings ContentStyleStrings { get; } = new PaletteContentStyleStrings(); - private bool ShouldSerializeHeaderGroupCollapsedTargetStrings() => !GroupCollapsedTargetStrings.IsDefault; + /// Gets the image effect strings. + /// The image effect strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteImageEffectStrings ImageEffectStrings { get; } = new PaletteImageEffectStrings(); - /// Resets the header group collapsed target strings. - public void ResetHeaderGroupCollapsedTargetStrings() => GroupCollapsedTargetStrings.Reset(); + /// Gets the image style strings. + /// The image style strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteImageStyleStrings ImageStyleStrings { get; } = new PaletteImageStyleStrings(); - /// Gets the header style strings. - /// The header style strings. - [Category(@"Visuals")] - [Description(@"Collection of header style strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public HeaderStyleStrings HeaderStyleStrings => HeaderStyles; + /// Gets the mode strings. + /// The mode strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteModeStrings ModeStrings { get; } = new PaletteModeStrings(); - private bool ShouldSerializeHeaderStyleStrings() => !HeaderStyles.IsDefault; + /// Gets the text trim strings. + /// The text trim strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PaletteTextTrimStrings TextTrimStrings { get; } = new PaletteTextTrimStrings(); - /// Resets the header style strings. - public void ResetHeaderStyleStrings() => HeaderStyles.Reset(); + /// Gets the placement mode strings. + /// The placement mode strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static PlacementModeStrings PlacementModeStrings { get; } = new PlacementModeStrings(); - /// Gets the input control style strings. - /// The input control style strings. - [Category(@"Visuals")] - [Description(@"Collection of input control style strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public InputControlStyleStrings InputControlStyleStrings => InputControlStyles; + /// Gets the separator styles. + /// The separator styles. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static SeparatorStyleStrings SeparatorStyles { get; } = new SeparatorStyleStrings(); - private bool ShouldSerializeInputControlStyleStrings() => !InputControlStyles.IsDefault; + /// Gets the tab border styles. + /// The tab border styles. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static TabBorderStyleStrings TabBorderStyles { get; } = new TabBorderStyleStrings(); - /// Resets the input control style strings. - public void ResetInputControlStyleStrings() => InputControlStyles.Reset();*/ + /// Gets the tab styles. + /// The tab styles. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static TabStyleStrings TabStyles { get; } = new TabStyleStrings(); - /// Gets the integrated toolbar button strings. - /// The integrated toolbar button strings. - [Category(@"Visuals")] - [Description(@"Collection of integrated toolbar button strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public IntegratedToolBarStrings IntegratedToolBarStrings => ToolBarStrings; + /// Gets the toast notification icon. + /// The toast notification icon. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static ToastNotificationIconStrings ToastNotificationIcon { get; } = new ToastNotificationIconStrings(); - private bool ShouldSerializeIntegratedToolBarStrings() => !ToolBarStrings.IsDefault; + /// Gets the basic application information strings. + /// The basic application information strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static KryptonAboutBoxBasicApplicationInformationStrings KryptonAboutBoxBasicApplicationInformationStrings { get; } = new KryptonAboutBoxBasicApplicationInformationStrings(); - /*/// Resets the integrated tool bar strings. - public void ResetIntegratedToolBarStrings() => ToolBarStrings.Reset(); + /// Gets the about box strings. + /// The about box strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static KryptonAboutBoxStrings KryptonAboutBoxStrings { get; } = new KryptonAboutBoxStrings(); - /// Gets the link behavior style strings. - /// The link behavior style strings. - [Category(@"Visuals")] - [Description(@"Collection of link behavior style strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public KryptonLinkBehaviorStrings KryptonLinkBehaviorStrings => LinkBehaviorStrings; + /// Gets the miscellaneous theme strings. + /// The miscellaneous theme strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static KryptonMiscellaneousThemeStrings KryptonMiscellaneousThemeStrings { get; } = + new KryptonMiscellaneousThemeStrings(); - private bool ShouldSerializeKryptonLinkBehaviorStrings() => !LinkBehaviorStrings.IsDefault; + /// Gets the outlook grid strings. + /// The outlook grid strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static KryptonOutlookGridStrings KryptonOutlookGridStrings { get; } = new KryptonOutlookGridStrings(); - /// Resets the krypton link behavior strings. - public void ResetKryptonLinkBehaviorStrings() => LinkBehaviorStrings.Reset(); + /// Gets the scroll bar strings. + /// The scroll bar strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static KryptonScrollBarStrings KryptonScrollBarStrings { get; } = new KryptonScrollBarStrings(); - /// Gets the link style strings. - /// The link style strings. - [Category(@"Visuals")] - [Description(@"Collection of link style strings.")] - [MergableProperty(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - [Localizable(true)] - public LabelStyleStrings LabelStyleStrings => KryptonLabelStyleStrings; + /// Gets the toast notification strings. + /// The toast notification strings. + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public static KryptonToastNotificationStrings KryptonToastNotificationStrings { get; } = + new KryptonToastNotificationStrings(); - private bool ShouldSerializeLabelStyleStrings() => !LabelStyleStrings.IsDefault; + #endregion - /// Resets the label style strings. - public void ResetLabelStyleStrings() => LabelStyleStrings.Reset(); + #region Public /// Gets the palette back style strings. /// The palette back style strings. @@ -194,12 +201,20 @@ public class KryptonLanguageManager : Component [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public PaletteBackStyleStrings PaletteBackStyleStrings => BackStyleStrings; + public PaletteBackStyleStrings BackStyleStrings => PaletteBackStyleStrings; + private bool ShouldSerializeBackStyleStrings() => !PaletteBackStyleStrings.IsDefault; + private void ResetBackStyleStrings() => PaletteBackStyleStrings.Reset(); - private bool ShouldSerializePaletteBackStyleStrings() => !BackStyleStrings.IsDefault; - - /// Resets the palette back style strings. - public void ResetPaletteBackStyleStrings() => BackStyleStrings.Reset(); + /// Gets the button spec style strings. + /// The button spec style strings. + [Category(@"Visuals")] + [Description(@"Collection of button spec style strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public ButtonStyleStrings ButtonStyleStrings => ButtonStyles; + private bool ShouldSerializeButtonStyleStrings() => !ButtonStyles.IsDefault; + private void ResetButtonStyleStrings() => ButtonStyles.Reset(); /// Gets the palette border style strings. /// The palette border style strings. @@ -208,12 +223,9 @@ public class KryptonLanguageManager : Component [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public PaletteBorderStyleStrings PaletteBorderStyleStrings => BorderStyleStrings; - - private bool ShouldSerializePaletteBorderStyleStrings() => !BorderStyleStrings.IsDefault; - - /// Resets the palette border style strings. - public void ResetPaletteBorderStyleStrings() => BorderStyleStrings.Reset(); + public PaletteBorderStyleStrings BorderStyleStrings => PaletteBorderStyleStrings; + private bool ShouldSerializeBorderStyleStrings() => !PaletteBorderStyleStrings.IsDefault; + private void ResetBorderStyleStrings() => PaletteBorderStyleStrings.Reset(); /// Gets the palette button orientation strings. /// The palette button orientation strings. @@ -222,12 +234,9 @@ public class KryptonLanguageManager : Component [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public PaletteButtonOrientationStrings PaletteButtonOrientationStrings => ButtonOrientationStrings; - - private bool ShouldSerializePaletteButtonOrientationStrings() => !ButtonOrientationStrings.IsDefault; - - /// Resets the palette button orientation strings. - public void ResetPaletteButtonOrientationStrings() => ButtonOrientationStrings.Reset(); + public PaletteButtonOrientationStrings ButtonOrientationStrings => PaletteButtonOrientationStrings; + private bool ShouldSerializeButtonOrientationStrings() => !PaletteButtonOrientationStrings.IsDefault; + private void ResetButtonOrientationStrings() => PaletteButtonOrientationStrings.Reset(); /// Gets the palette button spec style strings. /// The palette button spec style strings. @@ -236,12 +245,9 @@ public class KryptonLanguageManager : Component [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public PaletteButtonSpecStyleStrings PaletteButtonSpecStyleStrings => ButtonSpecStyles; - - private bool ShouldSerializePaletteButtonSpecStyleStrings() => !ButtonSpecStyles.IsDefault; - - /// Resets the palette button spec style strings. - public void ResetPaletteButtonSpecStyleStrings() => ButtonSpecStyles.Reset(); + public PaletteButtonSpecStyleStrings ButtonSpecStyleStrings => PaletteButtonSpecStyleStrings; + private bool ShouldSerializeButtonSpecStyleStrings() => !PaletteButtonSpecStyleStrings.IsDefault; + private void ResetButtonSpecStyleStrings() => PaletteButtonSpecStyleStrings.Reset(); /// Gets the palette button style strings. /// The palette button style strings. @@ -250,11 +256,86 @@ public class KryptonLanguageManager : Component [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public PaletteButtonStyleStrings PaletteButtonStyleStrings => PaletteButtonStyles; + public PaletteButtonStyleStrings PaletteButtonStyles => PaletteButtonStyleStrings; + private bool ShouldSerializePaletteButtonStyles() => !PaletteButtonStyleStrings.IsDefault; + private void ResetPaletteButtonStyles() => PaletteButtonStyleStrings.Reset(); + + /// Gets the global color strings. + /// The global color strings. + [Category(@"Visuals")] + [Description(@"Collection of color strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public GlobalColorStrings ColorStrings => GlobalColorStrings; + private bool ShouldSerializeColorStrings() => !GlobalColorStrings.IsDefault; + private void ResetColorStrings() => GlobalColorStrings.Reset(); + + /// Gets the custom toolkit strings. + /// The custom toolkit strings. + [Category(@"Visuals")] + [Description(@"Collection of custom toolkit strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public CustomToolkitStrings CustomStrings => CustomToolkitStrings; + private bool ShouldSerializeCustomStrings() => !CustomToolkitStrings.IsDefault; + private void ResetCustomStrings() => CustomToolkitStrings.ResetValues(); + + /// Gets the general ribbon strings. + /// The general ribbon strings. + [Category(@"Visuals")] + [Description(@"Collection of general ribbon strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public GeneralRibbonStrings RibbonStrings => GeneralRibbonStrings; + private bool ShouldSerializeGeneralRibbonStrings() => !GeneralRibbonStrings.IsDefault; + private void ResetGeneralRibbonStrings() => GeneralRibbonStrings.Reset(); - private bool ShouldSerializePaletteButtonStyleStrings() => !PaletteButtonStyles.IsDefault; + /// Gets the general toolkit strings. + /// The general toolkit strings. + [Category(@"Visuals")] + [Description(@"Collection of general toolkit strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public GeneralToolkitStrings GeneralStrings => GeneralToolkitStrings; + private bool ShouldSerializeGeneralStrings() => !GeneralToolkitStrings.IsDefault; + private void ResetGeneralStrings() => GeneralToolkitStrings.Reset(); - private void ResetPaletteButtonStyleStrings() => PaletteButtonStyles.Reset(); + /// Gets the integrated toolbar button strings. + /// The integrated toolbar button strings. + [Category(@"Visuals")] + [Description(@"Collection of integrated toolbar button strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public IntegratedToolBarStrings ToolBarStrings => IntegratedToolBarStrings; + private bool ShouldSerializeToolBarStrings() => !IntegratedToolBarStrings.IsDefault; + private void ResetToolBarStrings() => IntegratedToolBarStrings.Reset(); + + /// Gets the link behavior style strings. + /// The link behavior style strings. + [Category(@"Visuals")] + [Description(@"Collection of link behavior style strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public KryptonLinkBehaviorStrings LinkBehaviorStrings => KryptonLinkBehaviorStrings; + private bool ShouldSerializeLinkBehaviorStrings() => !KryptonLinkBehaviorStrings.IsDefault; + private void ResetLinkBehaviorStrings() => KryptonLinkBehaviorStrings.Reset(); + + /// Gets the link style strings. + /// The link style strings. + [Category(@"Visuals")] + [Description(@"Collection of link style strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public LabelStyleStrings LabelStyleStrings => KryptonLabelStyleStrings; + private bool ShouldSerializeLabelStyleStrings() => !KryptonLabelStyleStrings.IsDefault; + private void ResetLabelStyleStrings() => KryptonLabelStyleStrings.Reset(); /// Gets the palette content style strings. /// The palette content style strings. @@ -264,11 +345,8 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public PaletteContentStyleStrings PaletteContentStyleStrings => ContentStyleStrings; - private bool ShouldSerializePaletteContentStyleStrings() => !ContentStyleStrings.IsDefault; - - /// Resets the palette content style strings. - public void ResetPaletteContentStyleStrings() => ContentStyleStrings.Reset(); + private void ResetPaletteContentStyleStrings() => ContentStyleStrings.Reset(); /// Gets the image effect strings. /// The image effect strings. @@ -278,11 +356,8 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public PaletteImageEffectStrings PaletteImageEffectStrings => ImageEffectStrings; - private bool ShouldSerializePaletteImageEffectStrings() => !ImageEffectStrings.IsDefault; - - /// Resets the palette image effect strings. - public void ResetPaletteImageEffectStrings() => ImageEffectStrings.Reset(); + private void ResetPaletteImageEffectStrings() => ImageEffectStrings.Reset(); /// Gets the image style strings. /// The image style strings. @@ -292,11 +367,8 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public PaletteImageStyleStrings PaletteImageStyleStrings => ImageStyleStrings; - private bool ShouldSerializePaletteImageStyleStrings() => !ImageStyleStrings.IsDefault; - - /// Resets the palette image style strings. - public void ResetPaletteImageStyleStrings() => ImageStyleStrings.Reset();*/ + private void ResetPaletteImageStyleStrings() => ImageStyleStrings.Reset(); /// Gets the palette mode strings. /// The palette mode strings. @@ -306,13 +378,10 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public PaletteModeStrings PaletteModeStrings => ModeStrings; - private bool ShouldSerializePaletteModeStrings() => !ModeStrings.IsDefault; + private void ResetPaletteModeStrings() => ModeStrings.Reset(); - /// Resets the palette mode strings. - public void ResetPaletteModeStrings() => ModeStrings.Reset(); - - /*/// Gets the palette text trim strings. + /// Gets the palette text trim strings. /// The palette text trim strings. [Category(@"Visuals")] [Description(@"Collection of palette text trim strings.")] @@ -320,11 +389,8 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public PaletteTextTrimStrings PaletteTextTrimStrings => TextTrimStrings; - private bool ShouldSerializePaletteTextTrimStrings() => !TextTrimStrings.IsDefault; - - /// Resets the palette text trim strings. - public void ResetPaletteTextTrimStrings() => TextTrimStrings.Reset(); + private void ResetPaletteTextTrimStrings() => TextTrimStrings.Reset(); /// Gets the placement mode strings. /// The placement mode strings. @@ -334,11 +400,8 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public PlacementModeStrings PlacementMode => PlacementModeStrings; - private bool ShouldSerializePlacementModeStrings() => !PlacementModeStrings.IsDefault; - - /// Resets the placement mode strings. - public void ResetPlacementModeStrings() => PlacementModeStrings.Reset(); + private void ResetPlacementModeStrings() => PlacementModeStrings.Reset(); /// Gets the separator style strings. /// The separator style strings. @@ -348,11 +411,8 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public SeparatorStyleStrings SeparatorStyleStrings => SeparatorStyles; - private bool ShouldSerializeSeparatorStyleStrings() => !SeparatorStyles.IsDefault; - - /// Resets the separator style strings. - public void ResetSeparatorStyleStrings() => SeparatorStyles.Reset(); + private void ResetSeparatorStyleStrings() => SeparatorStyles.Reset(); /// Gets the tab border style strings. /// The tab border style strings. @@ -362,11 +422,8 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public TabBorderStyleStrings TabBorderStyleStrings => TabBorderStyles; - private bool ShouldSerializeTabBorderStyleStrings() => !TabBorderStyles.IsDefault; - - /// Resets the tab border style strings. - public void ResetTabBorderStyleStrings() => TabBorderStyles.Reset(); + private void ResetTabBorderStyleStrings() => TabBorderStyles.Reset(); /// Gets the tab style strings. /// The tab style strings. @@ -376,11 +433,44 @@ public class KryptonLanguageManager : Component [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] public TabStyleStrings TabStyleStrings => TabStyles; - private bool ShouldSerializeTabStyleStrings() => !TabStyles.IsDefault; + private void ResetTabStyleStrings() => TabStyles.Reset(); - /// Resets the tab style strings. - public void ResetTabStyleStrings() => TabStyles.Reset();*/ + /// Gets the toast notification icon strings. + /// The toast notification icon strings. + [Category(@"Visuals")] + [Description(@"Collection of toast notification icon strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public ToastNotificationIconStrings ToastNotificationIconStrings => ToastNotificationIcon; + + private bool ShouldSerializeToastNotificationIconStrings() => !ToastNotificationIcon.IsDefault; + + /// Resets the toast notification icon strings. + public void ResetToastNotificationIconStrings() => ToastNotificationIcon.Reset(); + + /// Gets the krypton about box basic application information strings. + /// The krypton about box basic application information strings. + [Category(@"Visuals")] + [Description(@"Collection of about box basic application information strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public KryptonAboutBoxBasicApplicationInformationStrings AboutBoxBasicStrings => KryptonAboutBoxBasicApplicationInformationStrings; + private bool ShouldSerializeAboutBoxBasicStrings() => !KryptonAboutBoxBasicApplicationInformationStrings.IsDefault; + private void ResetAboutBoxBasicStrings() => KryptonAboutBoxBasicApplicationInformationStrings.Reset(); + + /// Gets the krypton about box strings. + /// The krypton about box strings. + [Category(@"Visuals")] + [Description(@"Collection of about box strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public KryptonAboutBoxStrings AboutBoxStrings => KryptonAboutBoxStrings; + private bool ShouldSerializeAboutBoxStrings() => !KryptonAboutBoxStrings.IsDefault; + private void ResetAboutBoxStrings() => KryptonAboutBoxStrings.Reset(); /// Gets the krypton miscellaneous theme strings. /// The krypton miscellaneous theme strings. @@ -389,12 +479,18 @@ public class KryptonLanguageManager : Component [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public KryptonMiscellaneousThemeStrings KryptonMiscellaneousThemeStrings => MiscellaneousThemeStrings; - - private bool ShouldSerializeKryptonMiscellaneousThemeStrings() => !MiscellaneousThemeStrings.IsDefault; + public KryptonMiscellaneousThemeStrings MiscellaneousThemeStrings => KryptonMiscellaneousThemeStrings; + private bool ShouldSerializeMiscellaneousThemeStrings() => !KryptonMiscellaneousThemeStrings.IsDefault; + private void ResetMiscellaneousThemeStrings() => KryptonMiscellaneousThemeStrings.Reset(); - /// Resets the krypton miscellaneous theme strings. - public void ResetKryptonMiscellaneousThemeStrings() => MiscellaneousThemeStrings.Reset(); + [Category(@"Visuals")] + [Description(@"Collection of outlook grid strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public KryptonOutlookGridStrings OutlookGridStrings => KryptonOutlookGridStrings; + private bool ShouldSerializeOutlookGridStrings() => !KryptonOutlookGridStrings.IsDefault; + private void ResetOutlookGridStrings() => KryptonOutlookGridStrings.Reset(); /// Gets the scrollbar strings. /// The scrollbar strings. @@ -403,137 +499,85 @@ public class KryptonLanguageManager : Component [MergableProperty(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [Localizable(true)] - public KryptonScrollBarStrings KryptonScrollBarStrings => ScrollBarStrings; - - private bool ShouldSerializeKryptonScrollBarStrings() => !ScrollBarStrings.IsDefault; - - /// Resets the krypton scroll bar strings. - public void ResetKryptonScrollBarStrings() => ScrollBarStrings.Reset(); - - #endregion - - #region Static Strings - - /// Gets the color strings. - /// The color strings. - public static GlobalColorStrings ColorStrings { get; } = new GlobalColorStrings(); - - /// Gets the spec style strings. - /// The spec style strings. - public static ButtonStyleStrings ButtonStyles { get; } = new ButtonStyleStrings(); - - public static CustomToolkitStrings CustomToolkitStrings { get; } = new CustomToolkitStrings(); - - /// Gets the strings. - /// The strings. - public static GeneralToolkitStrings GeneralToolkitStrings - { get; } = new GeneralToolkitStrings(); - - /// Gets the grid view style strings. - /// The grid view style strings. - public static DataGridViewStyleStrings DataGridViewStyles { get; } = new DataGridViewStyleStrings(); - - /// Gets the style strings. - /// The style strings. - public static GridStyleStrings GridStyles { get; } = new GridStyleStrings(); - - /// Gets the group collapsed target strings. - /// The group collapsed target strings. - public static HeaderGroupCollapsedTargetStrings GroupCollapsedTargetStrings { get; } = - new HeaderGroupCollapsedTargetStrings(); - - /// Gets the header styles. - /// The header styles. - public static HeaderStyleStrings HeaderStyles { get; } = new HeaderStyleStrings(); - - /// Gets the input control styles. - /// The input control styles. - public static InputControlStyleStrings InputControlStyles { get; } = new InputControlStyleStrings(); - - /// Gets the tool bar strings. - /// The tool bar strings. - public static IntegratedToolBarStrings ToolBarStrings { get; } = new IntegratedToolBarStrings(); - - /// Gets the link behavior strings. - /// The link behavior strings. - public static KryptonLinkBehaviorStrings LinkBehaviorStrings { get; } = new KryptonLinkBehaviorStrings(); - - /// Gets the krypton label style strings. - /// The krypton label style strings. - public static LabelStyleStrings KryptonLabelStyleStrings { get; } = new LabelStyleStrings(); - - /// Gets the back style strings. - /// The back style strings. - public static PaletteBackStyleStrings BackStyleStrings { get; } = new PaletteBackStyleStrings(); - - /// Gets the border style strings. - /// The border style strings. - public static PaletteBorderStyleStrings BorderStyleStrings { get; } = new PaletteBorderStyleStrings(); + public KryptonScrollBarStrings ScrollBarStrings => KryptonScrollBarStrings; + private bool ShouldSerializeScrollBarStrings() => !KryptonScrollBarStrings.IsDefault; + private void ResetScrollBarStrings() => KryptonScrollBarStrings.Reset(); - /// Gets the button orientation strings. - /// The button orientation strings. - public static PaletteButtonOrientationStrings ButtonOrientationStrings { get; } = - new PaletteButtonOrientationStrings(); - - /// Gets the button spec styles. - /// The button spec styles. - public static PaletteButtonSpecStyleStrings ButtonSpecStyles { get; } = new PaletteButtonSpecStyleStrings(); - - /// Gets the button style strings. - /// The button style strings. - public static PaletteButtonStyleStrings PaletteButtonStyles { get; } = new PaletteButtonStyleStrings(); - - /// Gets the content style strings. - /// The content style strings. - public static PaletteContentStyleStrings ContentStyleStrings { get; } = new PaletteContentStyleStrings(); - - /// Gets the image effect strings. - /// The image effect strings. - public static PaletteImageEffectStrings ImageEffectStrings { get; } = new PaletteImageEffectStrings(); - - /// Gets the image style strings. - /// The image style strings. - public static PaletteImageStyleStrings ImageStyleStrings { get; } = new PaletteImageStyleStrings(); - - /// Gets the mode strings. - /// The mode strings. - public static PaletteModeStrings ModeStrings { get; } = new PaletteModeStrings(); + /// Gets the data grid view strings. + /// The data grid view strings. + [Category(@"Visuals")] + [Description(@"Collection of data grid view strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public DataGridViewStyleStrings GridViewStyleStrings => DataGridViewStyles; + private bool ShouldSerializeGridViewStyleStrings() => !DataGridViewStyles.IsDefault; + private void ResetGridViewStyleStrings() => DataGridViewStyles.Reset(); - /// Gets the text trim strings. - /// The text trim strings. - public static PaletteTextTrimStrings TextTrimStrings { get; } = new PaletteTextTrimStrings(); + /// Gets the grid style strings. + /// The grid style strings. + [Category(@"Visuals")] + [Description(@"Collection of grid style strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public GridStyleStrings GridStyleStrings => GridStyles; + private bool ShouldSerializeGridStyleStrings() => !GridStyles.IsDefault; + private void ResetGridStyleStrings() => GridStyles.Reset(); - /// Gets the placement mode strings. - /// The placement mode strings. - public static PlacementModeStrings PlacementModeStrings { get; } = new PlacementModeStrings(); + /// Gets the header group collapsed target strings. + /// The header group collapsed target strings. + [Category(@"Visuals")] + [Description(@"Collection of header group collapsed target strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public HeaderGroupCollapsedTargetStrings HeaderGroupCollapsedTargetStrings => GroupCollapsedTargetStrings; + private bool ShouldSerializeHeaderGroupCollapsedTargetStrings() => !GroupCollapsedTargetStrings.IsDefault; + private void ResetHeaderGroupCollapsedTargetStrings() => GroupCollapsedTargetStrings.Reset(); - /// Gets the separator styles. - /// The separator styles. - public static SeparatorStyleStrings SeparatorStyles { get; } = new SeparatorStyleStrings(); + /// Gets the header style strings. + /// The header style strings. + [Category(@"Visuals")] + [Description(@"Collection of header style strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public HeaderStyleStrings HeaderStyleStrings => HeaderStyles; + private bool ShouldSerializeHeaderStyleStrings() => !HeaderStyles.IsDefault; + private void ResetHeaderStyleStrings() => HeaderStyles.Reset(); - /// Gets the tab border styles. - /// The tab border styles. - public static TabBorderStyleStrings TabBorderStyles { get; } = new TabBorderStyleStrings(); + /// Gets the input control style strings. + /// The input control style strings. + [Category(@"Visuals")] + [Description(@"Collection of input control style strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public InputControlStyleStrings InputControlStyleStrings => InputControlStyles; + private bool ShouldSerializeInputControlStyleStrings() => !InputControlStyles.IsDefault; + private void ResetInputControlStyleStrings() => InputControlStyles.Reset(); - /// Gets the tab styles. - /// The tab styles. - public static TabStyleStrings TabStyles { get; } = new TabStyleStrings(); + /// Gets the krypton toast notification strings. + /// The krypton toast notification strings. + [Category(@"Visuals")] + [Description(@"Collection of toast notificaion strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public KryptonToastNotificationStrings ToastNotificationStrings => KryptonToastNotificationStrings; - /// Gets the miscellaneous theme strings. - /// The miscellaneous theme strings. - public static KryptonMiscellaneousThemeStrings MiscellaneousThemeStrings { get; } = - new KryptonMiscellaneousThemeStrings(); + private bool ShouldSerializeToastNotificationStrings() => !KryptonToastNotificationStrings.IsDefault; - /// Gets the scroll bar strings. - /// The scroll bar strings. - public static KryptonScrollBarStrings ScrollBarStrings { get; } = new KryptonScrollBarStrings(); + /// Resets the krypton toast notification strings. + public void ResetToastNotificationStrings() => KryptonToastNotificationStrings.Reset(); #endregion #region Identity - /// Initializes a new instance of the class. - public KryptonLanguageManager() + /// Initializes a new instance of the class. + public KryptonGlobalToolkitStrings() { //throw new NotImplementedException(); } @@ -543,94 +587,68 @@ public KryptonLanguageManager() #region Implementation /// Gets a value indicating whether this instance is default. - /// - /// true if this instance is default; otherwise, false. + /// true if this instance is default; otherwise, false. + [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Never)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool IsDefault => !(ShouldSerializeCustomStrings() || - ShouldSerializeGeneralStrings() || - ShouldSerializeColorStrings() || - ShouldSerializePaletteModeStrings() || - //ShouldSerializeButtonSpecStyleStrings() || - //ShouldSerializeDataGridViewStyleStrings() || - //ShouldSerializeGridStyleStrings() || - //ShouldSerializeHeaderGroupCollapsedTargetStrings() || - //ShouldSerializeHeaderStyleStrings() || - //ShouldSerializeInputControlStyleStrings() || - ShouldSerializeIntegratedToolBarStrings() || - //ShouldSerializeKryptonLinkBehaviorStrings() || - //ShouldSerializePaletteBackStyleStrings() || - //ShouldSerializePaletteBorderStyleStrings() || - //ShouldSerializePaletteButtonOrientationStrings() || - //ShouldSerializePaletteButtonSpecStyleStrings() || - //ShouldSerializePaletteButtonStyleStrings() || - //ShouldSerializePaletteContentStyleStrings() || - //ShouldSerializePaletteImageEffectStrings() || - //ShouldSerializePaletteImageStyleStrings() || - //ShouldSerializePaletteTextTrimStrings() || - //ShouldSerializePlacementModeStrings() || - //ShouldSerializeSeparatorStyleStrings() || - //ShouldSerializeTabBorderStyleStrings() || - //ShouldSerializeTabStyleStrings() || - ShouldSerializeKryptonMiscellaneousThemeStrings() || - ShouldSerializeKryptonScrollBarStrings()); + public bool IsDefault => !(ShouldSerializeAboutBoxBasicStrings() || ShouldSerializeAboutBoxStrings() || + ShouldSerializeBackStyleStrings() || ShouldSerializeBorderStyleStrings() || + ShouldSerializeButtonOrientationStrings() || + ShouldSerializeButtonSpecStyleStrings() || ShouldSerializeButtonStyleStrings() || + ShouldSerializeColorStrings() || ShouldSerializeCustomStrings() || + ShouldSerializeGeneralRibbonStrings() || ShouldSerializeGeneralStrings() || + ShouldSerializeGridStyleStrings() || ShouldSerializeGridViewStyleStrings() || + ShouldSerializeHeaderGroupCollapsedTargetStrings() || + ShouldSerializeHeaderStyleStrings() || ShouldSerializeInputControlStyleStrings() || + ShouldSerializeLabelStyleStrings() || ShouldSerializeLinkBehaviorStrings() || + ShouldSerializeMiscellaneousThemeStrings() || ShouldSerializeOutlookGridStrings() || + ShouldSerializePaletteButtonStyles() || + ShouldSerializePaletteContentStyleStrings() || + ShouldSerializePaletteImageEffectStrings() || + ShouldSerializePaletteImageStyleStrings() || ShouldSerializePaletteModeStrings() || + ShouldSerializePaletteTextTrimStrings() || ShouldSerializePlacementModeStrings() || + ShouldSerializeScrollBarStrings() || ShouldSerializeSeparatorStyleStrings() || + ShouldSerializeToastNotificationIconStrings() || + ShouldSerializeTabBorderStyleStrings() || ShouldSerializeTabStyleStrings() || + ShouldSerializeToastNotificationStrings() || ShouldSerializeToolBarStrings()); /// Resets this instance. public void Reset() { + ResetAboutBoxBasicStrings(); + ResetAboutBoxStrings(); + ResetBackStyleStrings(); + ResetBorderStyleStrings(); + ResetButtonOrientationStrings(); + ResetButtonSpecStyleStrings(); + ResetButtonStyleStrings(); ResetColorStrings(); - - //ResetButtonSpecStyleStrings(); - ResetCustomStrings(); - + ResetGeneralRibbonStrings(); ResetGeneralStrings(); - + ResetGridStyleStrings(); + ResetGridViewStyleStrings(); + ResetHeaderGroupCollapsedTargetStrings(); + ResetHeaderStyleStrings(); + ResetInputControlStyleStrings(); + ResetLabelStyleStrings(); + ResetLinkBehaviorStrings(); + ResetMiscellaneousThemeStrings(); + ResetOutlookGridStrings(); + ResetPaletteButtonStyles(); + ResetPaletteContentStyleStrings(); + ResetPaletteImageEffectStrings(); + ResetPaletteImageStyleStrings(); ResetPaletteModeStrings(); - - //ResetDataGridViewStyleStrings(); - - //ResetGridStyleStrings(); - - //ResetHeaderGroupCollapsedTargetStrings(); - - //ResetHeaderStyleStrings(); - - //ResetInputControlStyleStrings(); - - //ResetIntegratedToolBarStrings(); - - //ResetKryptonLinkBehaviorStrings(); - - //ResetPaletteBackStyleStrings(); - - //ResetPaletteBorderStyleStrings(); - - //ResetPaletteButtonOrientationStrings(); - - //ResetPaletteButtonSpecStyleStrings(); - - //ResetPaletteButtonStyleStrings(); - - //ResetPaletteContentStyleStrings(); - - //ResetPaletteImageEffectStrings(); - - //ResetPaletteImageStyleStrings(); - - //ResetPaletteTextTrimStrings(); - - //ResetPlacementModeStrings(); - - //ResetSeparatorStyleStrings(); - - //ResetTabBorderStyleStrings(); - - //ResetTabStyleStrings(); - - ResetKryptonMiscellaneousThemeStrings(); - - ResetKryptonScrollBarStrings(); + ResetPaletteTextTrimStrings(); + ResetPlacementModeStrings(); + ResetScrollBarStrings(); + ResetSeparatorStyleStrings(); + ResetTabBorderStyleStrings(); + ResetTabStyleStrings(); + ResetToastNotificationIconStrings(); + ResetToastNotificationStrings(); + ResetToolBarStrings(); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonInputBoxData.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonInputBoxData.cs new file mode 100644 index 000000000..36e81b59f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonInputBoxData.cs @@ -0,0 +1,66 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// A structure that contains basic information for . + public struct KryptonInputBoxData + { + #region Public + + + /// Gets or sets the owner of the . + /// The owner of the . + public IWin32Window? Owner { get; set; } + + /// Gets or sets the prompt text. + /// The prompt text. + public string Prompt { get; set; } + + /// Gets or sets the caption. + /// The caption. + public string Caption { get; set; } + + /// Gets or sets the default response. + /// The default response. + public string DefaultResponse { get; set; } + + /// Gets or sets the cue text. + /// The cue text. + public string CueText { get; set; } + + /// Gets or sets the color of the cue text. + /// The color of the cue text. + public Color? CueColor { get; set; } + + /// Gets or sets the cue typeface. + /// The cue typeface. + public Font? CueTypeface { get; set; } + + /// Gets or sets the use password option. + /// The use password option. + public bool? UsePasswordOption { get; set; } + + /// Gets or sets the use RTL layout of the UI. + /// The use RTL layout in an . + public KryptonUseRTLLayout UseRTLLayout { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonInputBoxData() + { + UseRTLLayout = KryptonUseRTLLayout.No; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxController.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxController.cs new file mode 100644 index 000000000..3ddb42f70 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxController.cs @@ -0,0 +1,149 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Handles the heavy lifting for the . + internal class KryptonMessageBoxController + { + #region Implementation + + /// + /// Displays a message box with the specified text, caption, buttons, icon, default button, options, and Help button, using the specified Help file, HelpNavigator, and Help topic. + /// + /// Owner of the modal dialog box. + /// The text to display in the message box. + /// The text to display in the title bar of the message box. + /// One of the System.Windows.Forms.KryptonMessageBoxButtons values that specifies which buttons to display in the message box. + /// One of the KryptonMessageBoxIcon values that specifies which icon to display in the message box. + /// One of the KryptonMessageBoxDefaultButton values that specifies the default button for the message box. + /// One of the System.Windows.Forms.MessageBoxOptions values that specifies which display and association options will be used for the message box. You may pass in 0 if you wish to use the defaults. + /// Contains the help data of the . + /// Show extraText in title. If null (default) then only when Warning or Error icon is used. + /// Displays a 'Help' button, as seen in .NET 6 and higher. + /// The image of the application. + /// The application path. To be used in conjunction with type. + /// Specifies the . + /// Specifies a if using the type. + /// Specifies the if a has not been defined. + /// Specifies the area within the to be regarded as a link. See . + /// If set to true, the will use standard operating system icons. + /// Displays the close button. If null (default), then the close button will be displayed. + /// One of the System.Windows.Forms.DialogResult values. + public static DialogResult ShowCore(IWin32Window? owner, + string? text, string? caption, + KryptonMessageBoxButtons buttons, + KryptonMessageBoxIcon icon, + KryptonMessageBoxDefaultButton defaultButton, + MessageBoxOptions options, + HelpInfo? helpInfo, bool? showCtrlCopy, + bool? showHelpButton, + Image? applicationImage, string? applicationPath, + MessageBoxContentAreaType? contentAreaType, + KryptonCommand? linkLabelCommand, + ProcessStartInfo? linkLaunchArgument, + LinkArea? contentLinkArea, + bool? forceUseOfOperatingSystemIcons, + bool? showCloseButton) + { + caption = string.IsNullOrEmpty(caption) ? @" " : caption; + + IWin32Window? showOwner = ValidateOptions(owner, options, helpInfo); + + // Show message box window as a modal dialog and then dispose of it after-wards + + if (options is MessageBoxOptions.RightAlign or MessageBoxOptions.RtlReading) + { + using var kmbrtl = new VisualMessageBoxRtlAwareFormDep(showOwner, text, caption, buttons, icon, + defaultButton, helpInfo, showCtrlCopy, showHelpButton, applicationImage, applicationPath, + contentAreaType, linkLabelCommand, + linkLaunchArgument, contentLinkArea, + forceUseOfOperatingSystemIcons, showCloseButton); + + kmbrtl.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmbrtl.ShowDialog(showOwner); + } + else + { + using var kmb = new VisualMessageBoxFormDep(showOwner, text, caption, buttons, icon, + defaultButton, helpInfo, showCtrlCopy, showHelpButton, applicationImage, applicationPath, + contentAreaType, linkLabelCommand, + linkLaunchArgument, contentLinkArea, + forceUseOfOperatingSystemIcons, showCloseButton); + + kmb.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmb.ShowDialog(showOwner); + } + } + + public static DialogResult ShowCore(KryptonMessageBoxDataDep messageBoxData) + { + messageBoxData.Caption = string.IsNullOrEmpty(messageBoxData.Caption) ? @" " : messageBoxData.Caption; + + IWin32Window? showOwner = ValidateOptions(messageBoxData.Owner, messageBoxData.Options, messageBoxData.HelpInfo); + + if (messageBoxData.Options is MessageBoxOptions.RightAlign or MessageBoxOptions.RtlReading) + { + using var kmbrtl = new VisualMessageBoxRtlAwareFormDep(messageBoxData); + + kmbrtl.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmbrtl.ShowDialog(showOwner); + } + else + { + using var kmb = new VisualMessageBoxFormDep(messageBoxData); + + kmb.StartPosition = showOwner == null ? FormStartPosition.CenterScreen : FormStartPosition.CenterParent; + + return kmb.ShowDialog(showOwner); + } + } + + #region WinForm Compatibility + private static IWin32Window? ValidateOptions(IWin32Window? owner, MessageBoxOptions options, HelpInfo? helpInfo) + { + // Check if trying to show a message box from a non-interactive process, this is not possible + if (!SystemInformation.UserInteractive && + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)) + { + throw new InvalidOperationException("Cannot show modal dialog when non-interactive"); + } + + // Check if trying to show a message box from a service and the owner has been specified, this is not possible + if ((owner != null) && + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)) + { + throw new ArgumentException(@"Cannot show message box from a service with an owner specified", nameof(options)); + } + + // Check if trying to show a message box from a service and help information is specified, this is not possible + if ((helpInfo != null) && + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) != 0)) + { + throw new ArgumentException(@"Cannot show message box from a service with help specified", nameof(options)); + } + + IWin32Window? showOwner = null; + if ((helpInfo != null) || + ((options & (MessageBoxOptions.ServiceNotification | MessageBoxOptions.DefaultDesktopOnly)) == 0)) + { + // If do not have an owner passed in? then get the active window and use that instead + showOwner = owner ?? Control.FromHandle(PI.GetActiveWindow()); + } + + return showOwner; + } + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxData.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxData.cs new file mode 100644 index 000000000..42ed9023c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxData.cs @@ -0,0 +1,119 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// A structure that contains basic information for . + public struct KryptonMessageBoxDataDep + { + #region Public + + /// Gets or sets the owner window. + /// The owner window. + public IWin32Window? Owner { get; set; } + + /// Gets or sets the message text. + /// The message text. + public string? MessageText { get; set; } + + /// Gets or sets the window caption. + /// The window caption. + public string? Caption { get; set; } + + /// Gets or sets the buttons. + /// The buttons. + public KryptonMessageBoxButtons Buttons { get; set; } + + /// Gets or sets the icon. + /// The icon. + public KryptonMessageBoxIcon Icon { get; set; } + + /// Gets or sets the default button. + /// The default button. + public KryptonMessageBoxDefaultButton? DefaultButton { get; set; } + + /// Gets or sets the . + /// The . + public MessageBoxOptions Options { get; set; } + + /// Gets or sets the help information. + /// The help information. + public HelpInfo? HelpInfo { get; set; } + + /// Gets or sets the show control copy. + /// The show control copy. + public bool? ShowCtrlCopy { get; set; } + + /// Gets or sets the show help button. + /// The show help button. + public bool? ShowHelpButton { get; set; } + + /// Gets or sets the application image. + /// The application image. + public Image? ApplicationImage { get; set; } + + /// Gets or sets the application path. + /// The application path. + public string? ExtractIconFromFilePath { get; set; } + + /// Gets or sets the type of the message content area. + /// The type of the message content area. + public MessageBoxContentAreaType? MessageContentAreaType { get; set; } + + /// Gets or sets the link label command. + /// The link label command. + public KryptonCommand? LinkLabelCommand { get; set; } + + /// Gets or sets the link launch argument. + /// The link launch argument. + public ProcessStartInfo? LinkLaunchArgument { get; set; } + + /// Gets or sets the content link area. + /// The content link area. + public LinkArea? ContentLinkArea { get; set; } + + /// Gets or sets the force use of operating system icons. + /// Forces the use of operating system icons. + public bool? ForceUseOfOperatingSystemIcons { get; set; } + + /// Gets or sets the help file path for . + /// The help file path. + public string? HelpFilePath { get; set; } + + /// Gets or sets the help navigator for . + /// The help navigator. + public HelpNavigator? HelpNavigator { get; set; } + + /// Gets or sets the help parameters for . + /// The help parameters. + public object? HelpParameters { get; set; } + + /// Gets or sets the show close button. + /// The show close button. + public bool? ShowCloseButton { get; set; } + + /// Gets or sets the use RTL layout of the UI. + /// The use RTL layout in an . + public KryptonUseRTLLayout UseRtlLayout { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonMessageBoxDataDep() + { + ShowCloseButton = true; + + UseRtlLayout = KryptonUseRTLLayout.No; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxNativeWindow.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxNativeWindow.cs new file mode 100644 index 000000000..771523728 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonMessageBoxNativeWindow.cs @@ -0,0 +1,36 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Intercepts unwanted messages on the KryptonRichTextBox used in MessageBox forms + /// + internal class KryptonMessageBoxNativeWindow : NativeWindow + { + private const int WM_SETFOCUS = 0x0007; + private const int WM_KILLFOCUS = 0x0008; + private const int WM_MOUSEWHEEL = 0x020A; + + protected override void WndProc(ref Message m) + { + // Prevent the user from entering the control + if (m.Msg == WM_SETFOCUS) + { + m.Msg = WM_KILLFOCUS; + } + + // Disable zoom, eat the message + if (m.Msg == WM_MOUSEWHEEL) + { + return; + } + + base.WndProc(ref m); + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonReadOnlyControls.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonReadOnlyControls.cs index a8148befe..599f0e7ff 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/KryptonReadOnlyControls.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonReadOnlyControls.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/KryptonThemeBrowserData.cs b/Source/Krypton Components/Krypton.Toolkit/General/KryptonThemeBrowserData.cs new file mode 100644 index 000000000..3e2e26ab6 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/KryptonThemeBrowserData.cs @@ -0,0 +1,55 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// A structure that contains basic information for . + public struct KryptonThemeBrowserData + { + #region Public + + /// Gets or sets the show import button. + /// The show import button. + public bool? ShowImportButton { get; set; } + + /// Gets or sets the show silent option. + /// The show silent option. + public bool? ShowSilentOption { get; set; } + + /// Gets or sets the start position. + /// The start position. + public FormStartPosition? StartPosition { get; set; } + + /// Gets or sets the start index. + /// The start index. + public int? StartIndex { get; set; } + + /// Gets or sets the window title. + /// The window title. + public string? WindowTitle { get; set; } + + // ToDo: Add default palette mode option in V100 + + /// Gets or sets the use RTL layout of the UI. + /// The use RTL layout in an . + public KryptonUseRTLLayout UseRtlLayout { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonThemeBrowserData() + { + UseRtlLayout = KryptonUseRTLLayout.No; + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.Designer.cs index 6252ca58d..37078fda9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.Designer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,6 +44,7 @@ private void InitializeComponent() { this.labelMessage = new Krypton.Toolkit.KryptonLabel(); this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kpbModalProgress = new Krypton.Toolkit.KryptonProgressBar(); ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); this.kryptonPanel1.SuspendLayout(); this.SuspendLayout(); @@ -65,12 +66,25 @@ private void InitializeComponent() this.kryptonPanel1.Size = new System.Drawing.Size(296, 66); this.kryptonPanel1.TabIndex = 1; // + // kpbModalProgress + // + this.kpbModalProgress.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kpbModalProgress.Location = new System.Drawing.Point(0, 56); + this.kpbModalProgress.Name = "kpbModalProgress"; + this.kpbModalProgress.Size = new System.Drawing.Size(296, 10); + this.kpbModalProgress.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kpbModalProgress.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbModalProgress.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kpbModalProgress.TabIndex = 12; + this.kpbModalProgress.Values.Text = ""; + // // ModalWaitDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(296, 66); this.ControlBox = false; + this.Controls.Add(this.kpbModalProgress); this.Controls.Add(this.kryptonPanel1); this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; @@ -93,5 +107,6 @@ private void InitializeComponent() private KryptonLabel labelMessage; private KryptonPanel kryptonPanel1; + private KryptonProgressBar kpbModalProgress; } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.cs b/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.cs index a59453774..7213f5564 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/ModalWaitDialog.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,6 +26,10 @@ public partial class ModalWaitDialog : KryptonForm, IMessageFilter #endregion #region Instance Fields + + private readonly bool _showProgressBar; + private readonly int _minimumProgressValue; + private readonly int _maximumProgressValue; private bool _startTimestamped; private DateTime _startTimestamp; private DateTime _spinTimestamp; @@ -47,6 +51,33 @@ public ModalWaitDialog() // Hook into dispatch of windows messages Application.AddMessageFilter(this); } + + /// Initializes a new instance of the class. + /// The show progress bar. + /// The minimum progress value. + /// The maximum progress value. + public ModalWaitDialog(bool? showProgressBar, int? minimumProgressValue, int? maximumProgressValue) + { + InitializeComponent(); + + _showProgressBar = showProgressBar ?? false; + + _minimumProgressValue = minimumProgressValue ?? 0; + + _maximumProgressValue = maximumProgressValue ?? 100; + + ShowProgressBar(_showProgressBar); + + UpdateProgressBarValueBounds(_minimumProgressValue, _maximumProgressValue); + + // Remove redraw flicker by using double buffering + SetStyle(ControlStyles.DoubleBuffer | + ControlStyles.AllPaintingInWmPaint, true); + + // Hook into dispatch of windows messages + Application.AddMessageFilter(this); + } + #endregion #region Protected @@ -134,27 +165,35 @@ public bool PreFilterMessage(ref Message m) // Prevent mouse messages from activating any application windows if (m.Msg is >= 0x0200 and <= 0x0209 or >= 0x00A0 and <= 0x00A9) { - // Discover target control for message - if (FromHandle(m.HWnd) != null) - { - // Find the form that the control is inside - Form f = FromHandle(m.HWnd).FindForm(); - - // If the message is for this dialog then let it be dispatched - if ((f != null) && (f == this)) - { - return false; - } - } - - // Eat message to prevent dispatch - return true; + // If the message is for this dialog then let it be dispatched + return (FromHandle(m.HWnd)?.FindForm() is Form f && f == this) + ? false // Dispatch the message + : true; // Eat message to prevent dispatch } else { return false; } } + + /// Shows the progress bar. + /// if set to true [show progress bar]. + private void ShowProgressBar(bool showProgressBar) => kpbModalProgress.Visible = showProgressBar; + + /// Updates the progress bar value. + /// The value. + public void UpdateProgressBarValue(int value) => kpbModalProgress.Value = value; + + /// Updates the progress bar value bounds. + /// The minimum value. + /// The maximum value. + private void UpdateProgressBarValueBounds(int? minimumValue, int? maximumValue) + { + kpbModalProgress.Minimum = minimumValue ?? 0; + + kpbModalProgress.Maximum = maximumValue ?? 100; + } + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/NullContentValues.cs b/Source/Krypton Components/Krypton.Toolkit/General/NullContentValues.cs index c650bf377..1d8e48567 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/NullContentValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/NullContentValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,7 +36,7 @@ public class NullContentValues : IContentValues ///
/// The state for which the image is needed. /// Color value. - public virtual Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public virtual Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content long text. diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OperationThread.cs b/Source/Krypton Components/Krypton.Toolkit/General/OperationThread.cs index 7a2a1be0b..fccdfe595 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/OperationThread.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/OperationThread.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -61,7 +61,7 @@ public int State /// /// Gets the result from the operation. /// - public object? Result { get; private set; } + public object Result { get; private set; } /// /// Gets the exception generated by operation. diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/DataGridViewPercentageCell.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/DataGridViewPercentageCell.cs new file mode 100644 index 000000000..854ca8c25 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/DataGridViewPercentageCell.cs @@ -0,0 +1,114 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a DataGridViewPercentageCell + /// + public class DataGridViewPercentageCell : KryptonDataGridViewTextBoxCell + { + #region Identity + + /// Initializes a new instance of the class. + public DataGridViewPercentageCell() + { + Style.Alignment = DataGridViewContentAlignment.MiddleCenter; + } + + #endregion + + #region Public Overrides + + /// Specify the type of object used for editing. This is how the WinForms framework figures out what type of edit control to make. + public override Type EditType => typeof(PercentageEditingControl); + + /// Overrides TypeValue. + public override Type ValueType => typeof(double); + + /// Specify the default cell contents upon creation of a new cell. + public override object DefaultNewRowValue => 0; + + #endregion + + #region Implementation + + /// + /// Overrides Paint + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, + DataGridViewPaintParts paintParts) + { + //Draw the bar + int barWidth; + + if (value is not null) + { + barWidth = (double)value >= 1.0 + ? cellBounds.Width - 10 + : (int)((cellBounds.Width - 10) * (double)value); + + if ((double)value > 0 && barWidth > 0) + { + Rectangle r = new(cellBounds.X + 3, cellBounds.Y + 3, barWidth, cellBounds.Height - 8); + + using (LinearGradientBrush linearBrush = new LinearGradientBrush(r, KryptonManager.CurrentGlobalPalette.GetBackColor1(PaletteBackStyle.GridHeaderColumnList, PaletteState.Normal), KryptonManager.CurrentGlobalPalette.GetBackColor2(PaletteBackStyle.GridHeaderColumnList, PaletteState.Normal), LinearGradientMode.Vertical)) + { + graphics.FillRectangle(linearBrush, r); + } + + using (Pen pen = new Pen(KryptonManager.CurrentGlobalPalette.GetBorderColor1(PaletteBorderStyle.GridHeaderColumnList, PaletteState.Normal))) + { + graphics.DrawRectangle(pen, r); + } + + //TODO : implement customization like conditional formatting + //using (LinearGradientBrush linearBrush = new LinearGradientBrush(r, Color.FromArgb(255, 140, 197, 66), Color.FromArgb(255, 247, 251, 242), LinearGradientMode.Horizontal)) + //{ + // graphics.FillRectangle(linearBrush, r); + //} + + //using (Pen pen = new Pen(Color.FromArgb(255, 140, 197, 66))) + //{ + // graphics.DrawRectangle(pen, r); + + //} + } + + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, + DataGridViewPaintParts.None | DataGridViewPaintParts.ContentForeground); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/FormattingCell.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/FormattingCell.cs new file mode 100644 index 000000000..5f5ce398b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/FormattingCell.cs @@ -0,0 +1,190 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Formatting cell + /// + /// + public class FormattingCell : KryptonDataGridViewTextBoxCell + { + #region Instance Fields + + private DataGridViewCell _cell; + + #endregion + + #region Public + + /// + /// Gets or sets the type of the format. + /// + /// + /// The type of the format. + /// + public EnumConditionalFormatType FormatType { get; set; } + /// + /// Gets or sets the format parameters. + /// + /// + /// The format parameters. + /// + public IFormatParams? FormatParams { get; set; } + + #endregion + + #region Identity + + public FormattingCell() + { + + } + + public FormattingCell(DataGridViewCell cell) => _cell = cell; + + public FormattingCell(KryptonDataGridViewTextBoxCell textBoxCell) + { + + } + + #endregion + + #region Implementation + + /// + /// Contrasts the color. + /// + /// The color. + /// + private Color ContrastColor(Color color) + { + int d; + // Counting the perceptive luminance - human eye favors green color... + double a = 1 - (0.299 * color.R + (0.587 * color.G + 0.114 * color.B)) / 255; + + if (a < 0.5) + { + d = 0; + } + else + { + // bright colors - black font + d = 255; + } + + // dark colors - white font + return Color.FromArgb(d, d, d); + } + + /// + /// Paints the specified graphics. + /// + /// The graphics. + /// The clip bounds. + /// The cell bounds. + /// Index of the row. + /// State of the cell. + /// The value. + /// The formatted value. + /// The error text. + /// The cell style. + /// The advanced border style. + /// The paint parts. + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, + DataGridViewPaintParts paintParts) + { + if (FormatParams != null) // null can happen when cell set to Formatting but no condition has been set ! + { + switch (FormatType) + { + case EnumConditionalFormatType.Bar: + int barWidth; + BarParams par = (BarParams)FormatParams; + barWidth = (int)((cellBounds.Width - 10) * par.ProportionValue); + if (DataGridView != null) + { + Style.BackColor = DataGridView.DefaultCellStyle.BackColor; + Style.ForeColor = DataGridView.DefaultCellStyle.ForeColor; + } + + if (barWidth > 0) //(double)value > 0 && + { + Rectangle r = new(cellBounds.X + 3, cellBounds.Y + 3, barWidth, cellBounds.Height - 8); + if (par.GradientFill) + { + using (LinearGradientBrush linearBrush = new(r, par.BarColor, Color.White, LinearGradientMode.Horizontal)) //Color.FromArgb(255, 247, 251, 242) + { + graphics.FillRectangle(linearBrush, r); + } + } + else + { + using (SolidBrush solidBrush = new(par.BarColor)) //Color.FromArgb(255, 247, 251, 242) + { + graphics.FillRectangle(solidBrush, r); + } + } + + using (Pen pen = new(par.BarColor)) //Color.FromArgb(255, 140, 197, 66))) + { + graphics.DrawRectangle(pen, r); + } + } + + break; + case EnumConditionalFormatType.TwoColorsRange: + TwoColorsParams? twCpar = FormatParams as TwoColorsParams; + Style.BackColor = twCpar!.ValueColor; + // if (ContrastTextColor) + Style.ForeColor = ContrastColor(twCpar.ValueColor); + break; + case EnumConditionalFormatType.ThreeColorsRange: + ThreeColorsParams? thCpar = FormatParams as ThreeColorsParams; + Style.BackColor = thCpar!.ValueColor; + Style.ForeColor = ContrastColor(thCpar.ValueColor); + break; + default: + if (DataGridView != null) + { + Style.BackColor = DataGridView.DefaultCellStyle.BackColor; + Style.ForeColor = DataGridView.DefaultCellStyle.ForeColor; + } + + break; + } + } + else + { + if (DataGridView != null) + { + Style.BackColor = DataGridView.DefaultCellStyle.BackColor; + Style.ForeColor = DataGridView.DefaultCellStyle.ForeColor; + } + } + + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, + DataGridViewPaintParts.None | DataGridViewPaintParts.ContentForeground); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewFormattingColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewFormattingColumn.cs new file mode 100644 index 000000000..ed9771e96 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewFormattingColumn.cs @@ -0,0 +1,64 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a KryptonDataGridViewFormattingColumn : KryptonDataGridViewTextBoxColumn with conditional formatting abilities + /// + /// + public class KryptonDataGridViewFormattingColumn : KryptonDataGridViewTextBoxColumn + { + #region Instance Fields + + private bool _contrastTextColor; + + #endregion + + #region Identity + + /// + /// Initializes a new instance of the class. + /// + public KryptonDataGridViewFormattingColumn() + { + CellTemplate = new FormattingCell(); + DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + ValueType = typeof(FormattingCell); + ContrastTextColor = false; + } + + #endregion + + #region Public + + /// Gets or sets a value indicating whether [contrast text color]. + /// true if [contrast text color]; otherwise, false. + public bool ContrastTextColor + { + get => _contrastTextColor; + + set => _contrastTextColor = value; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewPercentageColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewPercentageColumn.cs new file mode 100644 index 000000000..bdc13debd --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewPercentageColumn.cs @@ -0,0 +1,77 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Hosts a collection of KryptonDataGridViewPercentageColumn cells. + /// + /// + public class KryptonDataGridViewPercentageColumn : DataGridViewColumn// KryptonDataGridViewTextBoxColumn + { + #region Identity + /// + /// Initialize a new instance of the KryptonDataGridViewPercentageColumn class. + /// + public KryptonDataGridViewPercentageColumn() + : base(new DataGridViewPercentageCell()) => DefaultCellStyle.Format = "P"; + + /// + /// Returns a standard compact string representation of the column. + /// + public override string ToString() + { + StringBuilder builder = new(0x40); + builder.Append("KryptonDataGridViewPercentageColumn { Name="); + builder.Append(Name); + builder.Append(", Index="); + builder.Append(Index.ToString(CultureInfo.CurrentCulture)); + builder.Append(" }"); + return builder.ToString(); + } + + #endregion + + #region Public Overrides + + /// + /// Overrides CellTemplate + /// + public override DataGridViewCell? CellTemplate + { + get => base.CellTemplate; + + set + { + // Ensure that the cell used for the template is a DataGridViewPercentageCell. + if (value != null && !value.GetType().IsAssignableFrom(typeof(DataGridViewPercentageCell))) + { + throw new InvalidCastException("Must be a DataGridViewPercentageCell"); + } + base.CellTemplate = value; + + } + } + + #endregion + + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewRatingColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewRatingColumn.cs new file mode 100644 index 000000000..61addbfd5 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewRatingColumn.cs @@ -0,0 +1,43 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a rating column + /// + public class KryptonDataGridViewRatingColumn : DataGridViewImageColumn + { + #region Identity + + /// + /// Constructor + /// + public KryptonDataGridViewRatingColumn() + { + CellTemplate = new RatingCell(); + DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + ValueType = typeof(int); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTextAndImageCell.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTextAndImageCell.cs new file mode 100644 index 000000000..692f1cbc8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTextAndImageCell.cs @@ -0,0 +1,155 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a TextAndImage cell + /// + public class KryptonDataGridViewTextAndImageCell : KryptonDataGridViewTextBoxCell + { + #region Instance Fields + + private Image? _imageValue; + private Size _imageSize; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonDataGridViewTextAndImageCell() + { + } + + #endregion + + #region Public Overrides + + /// + /// Overrides ValueType + /// + public override Type ValueType => typeof(TextAndImage); + + /// + /// Sets the value. + /// + /// Index of the row. + /// The value. + /// + protected override bool SetValue(int rowIndex, object? value) + { + if (value is not null && !(OwningRow as OutlookGridRow)!.IsGroupRow!) //Test to catch crash when first column is text and image when grouping + { + Image = ((TextAndImage)value).Image; + } + + return base.SetValue(rowIndex, value); + } + + /// + /// Overrides Clone + /// + /// The cloned KryptonDataGridViewTextAndImageCell + public override object Clone() + { + var c = (KryptonDataGridViewTextAndImageCell)base.Clone(); + c._imageValue = _imageValue; + c._imageSize = _imageSize; + return c; + } + + #endregion + + #region Public + + /// + /// Gets or sets the image. + /// + /// + /// The image. + /// + public Image? Image + { + get => _imageValue; + + set + { + if (Image != value) + { + _imageValue = value; + _imageSize = value!.Size; + + //if (this.InheritedStyle != null) + //{ + Padding inheritedPadding = Style.Padding; + //Padding inheritedPadding = this.InheritedStyle.Padding; + Style.Padding = new Padding(_imageSize.Width + 2, + inheritedPadding.Top, inheritedPadding.Right, + inheritedPadding.Bottom); + //} + } + } + } + + #endregion + + #region Protected Overrides + + /// + /// Overrides Paint + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + { + //TODO : improve we assume it is a 16x16 image + if (Value != null && (Value as TextAndImage)?.Image != null) + { + Padding inheritedPadding = Style.Padding; + Style.Padding = new Padding(_imageSize.Width + 2, + inheritedPadding.Top, inheritedPadding.Right, + inheritedPadding.Bottom); + //To be in phase with highlight feature who forces the style. + + // Draw the image clipped to the cell. + GraphicsContainer container = graphics.BeginContainer(); + graphics.SetClip(cellBounds); + graphics.DrawImage((Value as TextAndImage)?.Image!, new Rectangle(cellBounds.Location.X + 2, cellBounds.Location.Y + (cellBounds.Height - 16) / 2 - 1, 16, 16)); + graphics.EndContainer(container); + } + + // Paint the base content + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTextAndImageColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTextAndImageColumn.cs new file mode 100644 index 000000000..6a2bc4ec9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTextAndImageColumn.cs @@ -0,0 +1,223 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Hosts a collection of KryptonDataGridViewTextAndImageCell cells. + /// + public class KryptonDataGridViewTextAndImageColumn : DataGridViewColumn + { + #region Instance Fields + + private DataGridViewColumnSpecCollection _buttonSpecs; + private Image _imageValue; + private Size _imageSize; + + #endregion + + #region Events + /// + /// Occurs when the user clicks a button spec. + /// + public event EventHandler ButtonSpecClick; + #endregion + + #region Identity + /// + /// Initialize a new instance of the KryptonDataGridViewTextBoxColumn class. + /// + public KryptonDataGridViewTextAndImageColumn() + : base(new KryptonDataGridViewTextAndImageCell()) + { + _buttonSpecs = new DataGridViewColumnSpecCollection(this); + SortMode = DataGridViewColumnSortMode.Automatic; + } + + /// + /// Returns a String that represents the current Object. + /// + /// A String that represents the current Object. + public override string ToString() + { + StringBuilder builder = new(0x40); + builder.Append("KryptonDataGridViewTextAndImageColumn { Name="); + builder.Append(Name); + builder.Append(", Index="); + builder.Append(Index.ToString(CultureInfo.CurrentCulture)); + builder.Append(" }"); + return builder.ToString(); + } + + /// + /// Create a cloned copy of the column. + /// + /// + public override object Clone() + { + KryptonDataGridViewTextAndImageColumn? cloned = base.Clone() as KryptonDataGridViewTextAndImageColumn; + cloned!._imageValue = _imageValue; + cloned._imageSize = _imageSize; + // Move the button specs over to the new clone + foreach (ButtonSpec bs in ButtonSpecs) + { + cloned.ButtonSpecs.Add(bs.Clone()); + } + + return cloned; + } + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + } + + base.Dispose(disposing); + } + #endregion + + #region Public + + ///// + ///// Gets or Sets the image + ///// + //public Image Image + //{ + // get { return this.imageValue; } + // set + // { + // if (this.Image != value) + // { + // this.imageValue = value; + // this.imageSize = value.Size; + // if (this.InheritedStyle != null) + // { + // Padding inheritedPadding = this.InheritedStyle.Padding; + // this.InheritedStyle.Padding = new Padding(imageSize.Width + 2, inheritedPadding.Top, inheritedPadding.Right, inheritedPadding.Bottom); + // //Padding inheritedPadding = this.InheritedStyle.Padding; + // //this.Style.Padding = new Padding(18, inheritedPadding.Top, inheritedPadding.Right, inheritedPadding.Bottom); + + // } + // } + // } + //} + + /// + /// Gets or sets the maximum number of characters that can be entered into the text box. + /// + [Category("Behavior")] + [DefaultValue(typeof(int), "32767")] + public int MaxInputLength + { + get + { + if (TextBoxCellTemplate == null) + { + throw new InvalidOperationException("KryptonDataGridViewTextAndImageColumn cell template required"); + } + + return TextBoxCellTemplate.MaxInputLength; + } + + set + { + if (MaxInputLength != value) + { + TextBoxCellTemplate.MaxInputLength = value; + if (DataGridView != null) + { + DataGridViewRowCollection rows = DataGridView.Rows; + int count = rows.Count; + for (int i = 0; i < count; i++) + { + if (rows.SharedRow(i).Cells[Index] is DataGridViewTextBoxCell cell) + { + cell.MaxInputLength = value; + } + } + } + } + } + } + + /// + /// Gets or sets the sort mode for the column. + /// + [DefaultValue(typeof(DataGridViewColumnSortMode), "Automatic")] + public new DataGridViewColumnSortMode SortMode + { + get => base.SortMode; + set => base.SortMode = value; + } + + /// + /// Gets or sets the template used to model cell appearance. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override DataGridViewCell? CellTemplate + { + get => base.CellTemplate!; + + set + { + if (value != null && !(value is KryptonDataGridViewTextAndImageCell)) + { + throw new InvalidCastException("Can only assign a object of type KryptonDataGridViewTextAndImageCell"); + } + + base.CellTemplate = value; + } + } + + /// + /// Gets the collection of the button specifications. + /// + [Category("Data")] + [Description("Set of extra button specs to appear with control.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public DataGridViewColumnSpecCollection ButtonSpecs => _buttonSpecs; + + #endregion + + #region Private + private KryptonDataGridViewTextAndImageCell TextBoxCellTemplate => (KryptonDataGridViewTextAndImageCell)CellTemplate!; + + #endregion + + #region Internal + internal void PerformButtonSpecClick(DataGridViewButtonSpecClickEventArgs args) + { + if (ButtonSpecClick != null) + { + ButtonSpecClick(this, args); + } + } + + internal Size ImageSize => _imageSize; + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTokenColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTokenColumn.cs new file mode 100644 index 000000000..32752fbdc --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTokenColumn.cs @@ -0,0 +1,45 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a rating column + /// + public class KryptonDataGridViewTokenColumn : KryptonDataGridViewTextBoxColumn + { + #region Identity + + /// + /// Constructor + /// + public KryptonDataGridViewTokenColumn() + { + CellTemplate = new TokenCell(); + + DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + + ValueType = typeof(TokenCell); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTokenListColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTokenListColumn.cs new file mode 100644 index 000000000..dddfaf6bb --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTokenListColumn.cs @@ -0,0 +1,43 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a rating column + /// + public class KryptonDataGridViewTokenListColumn : KryptonDataGridViewTextBoxColumn + { + #region Identity + + /// + /// Constructor + /// + public KryptonDataGridViewTokenListColumn() + { + CellTemplate = new TokenListCell(); + DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; + ValueType = typeof(List); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTreeTextCell.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTreeTextCell.cs new file mode 100644 index 000000000..94cca27e5 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTreeTextCell.cs @@ -0,0 +1,362 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a TextAndImage cell + /// + public class KryptonDataGridViewTreeTextCell : KryptonDataGridViewTextBoxCell + { + #region Static Fields + + private const int INDENT_WIDTH = 20; + private const int INDENT_MARGIN = 5; + + #endregion + + #region Instance Fields + + private Padding _defaultPadding; + // private int glyphWidth; + + #endregion + + #region Identity + + /// + /// Constructor + /// + public KryptonDataGridViewTreeTextCell() + { + _defaultPadding = Style.Padding; + } + + #endregion + + #region Public Overrides + + /// + /// Overrides Clone + /// + /// The cloned KryptonDataGridViewTextAndImageCell + public override object Clone() + { + KryptonDataGridViewTreeTextCell? c = base.Clone() as KryptonDataGridViewTreeTextCell; + return c!; + } + + #endregion + + #region Protected Virtual + + /// + /// Gets the glyph margin. + /// + /// + /// The glyph margin. + /// + protected virtual int GlyphMargin => (Level - 1) * INDENT_WIDTH + INDENT_MARGIN; + + #endregion + + #region Public + + /// + /// Gets the level. + /// + /// + /// The level. + /// + public int Level + { + get + { + OutlookGridRow row = (OutlookGridRow)OwningRow!; + return row.NodeLevel + 1; //during calculation 0 level must be 1 for multiplication + } + } + + /// + /// Gets the owning node. + /// + /// + /// The owning node. + /// + public OutlookGridRow? OwningNode => OwningRow as OutlookGridRow; + + #endregion + + #region Implementation + + /// + /// Updates the style. + /// + /// padding especially. + public void UpdateStyle() + { + OutlookGridRow? node = OwningNode; + //Console.WriteLine(DateTime.Now.ToString() + " " + node.ToString()); + bool hasChildNodes = node != null && node.HasChildren; + int level = Level; + int plus = 0; + //if (hasChildNodes) + // plus = 15; + Style.Padding = new Padding(_defaultPadding.Left + level * INDENT_WIDTH + INDENT_MARGIN + plus, + _defaultPadding.Top, _defaultPadding.Right, _defaultPadding.Bottom); + } + + #endregion + + #region Protected Overrides + + /// + /// Paints the specified graphics. + /// + /// The graphics. + /// The clip bounds. + /// The cell bounds. + /// Index of the row. + /// State of the cell. + /// The value. + /// The formatted value. + /// The error text. + /// The cell style. + /// The advanced border style. + /// The paint parts. + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + { + OutlookGridRow? node = OwningNode; + // Console.WriteLine(DateTime.Now.ToString() + " " + node.ToString()); + //bool hasChildNodes = node.HasChildren; + //int level = this.Level ; + //int plus = 0; + //if (hasChildNodes) + // plus = 15; + //Padding currentPadding = this.InheritedStyle.Padding; + // this.Style.Padding = new Padding(defaultPadding.Left + (level * INDENT_WIDTH) + INDENT_MARGIN, + // defaultPadding.Top, defaultPadding.Right, defaultPadding.Bottom); + + //this.Style.Padding = new Padding(currentPadding.Left + (level * INDENT_WIDTH) + _imageWidth + INDENT_MARGIN, + // currentPadding.Top, currentPadding.Right, currentPadding.Bottom); + + //if (this.Value != null && ((TextAndImage)this.Value).Image != null) + //{ + // Padding inheritedPadding = this.InheritedStyle.Padding; + // this.Style.Padding = new Padding(18, inheritedPadding.Top, inheritedPadding.Right, inheritedPadding.Bottom); + // // Draw the image clipped to the cell. + // System.Drawing.Drawing2D.GraphicsContainer container = graphics.BeginContainer(); + // graphics.SetClip(cellBounds); + // graphics.DrawImageUnscaled(((TextAndImage)this.Value).Image, new Point(cellBounds.Location.X + 2, cellBounds.Location.Y + ((cellBounds.Height - 16) / 2) - 1)); + // graphics.EndContainer(container); + //} + + //if (node == null) return; + + //Image image = node.Image; + + //if (this._imageHeight == 0 && image != null) this.UpdateStyle(); + + // paint the cell normally + base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, formattedValue, errorText, cellStyle, advancedBorderStyle, paintParts); + + // TODO: Indent width needs to take image size into account + Rectangle glyphRect = new(cellBounds.X + GlyphMargin, cellBounds.Y, INDENT_WIDTH, cellBounds.Height - 1); + + + ////TODO: This painting code needs to be rehashed to be cleaner + //int level = this.Level; + + ////TODO: Rehash this to take different Imagelayouts into account. This will speed up drawing + //// for images of the same size (ImageLayout.None) + //if (image != null) + //{ + // Point pp; + // if (_imageHeight > cellBounds.Height) + // pp = new Point(glyphRect.X + this.glyphWidth, cellBounds.Y + _imageHeightOffset); + // else + // pp = new Point(glyphRect.X + this.glyphWidth, (cellBounds.Height / 2 - _imageHeight / 2) + cellBounds.Y); + + // // Graphics container to push/pop changes. This enables us to set clipping when painting + // // the cell's image -- keeps it from bleeding outsize of cells. + // System.Drawing.Drawing2D.GraphicsContainer gc = graphics.BeginContainer(); + // { + // graphics.SetClip(cellBounds); + // graphics.DrawImageUnscaled(image, pp); + // } + // graphics.EndContainer(gc); + //} + + // Paint tree lines + if (node != null + && node.DataGridView is not null + && ((KryptonOutlookGrid)node.DataGridView).ShowLines) + { + using (Pen linePen = new(SystemBrushes.ControlDark, 1.0f)) + { + linePen.DashStyle = DashStyle.Dot; + bool isLastSibling = node.IsLastSibling; + bool isFirstSibling = node.IsFirstSibling; + + if (node.NodeLevel == 0) + { + // the Root nodes display their lines differently + if (isFirstSibling && isLastSibling) + { + // only node, both first and last. Just draw horizontal line + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2, glyphRect.Right, cellBounds.Top + cellBounds.Height / 2); + } + else if (isLastSibling) + { + // last sibling doesn't draw the line extended below. Paint horizontal then vertical + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2, glyphRect.Right, cellBounds.Top + cellBounds.Height / 2); + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2); + } + else if (isFirstSibling) + { + // first sibling doesn't draw the line extended above. Paint horizontal then vertical + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2, glyphRect.Right, cellBounds.Top + cellBounds.Height / 2); + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2, glyphRect.X + 4, cellBounds.Bottom); + } + else + { + // normal drawing draws extended from top to bottom. Paint horizontal then vertical + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2, glyphRect.Right, cellBounds.Top + cellBounds.Height / 2); + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top, glyphRect.X + 4, cellBounds.Bottom); + } + } + else + { + if (isLastSibling) + { + // last sibling doesn't draw the line extended below. Paint horizontal then vertical + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2, glyphRect.Right, cellBounds.Top + cellBounds.Height / 2); + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2); + } + else + { + // normal drawing draws extended from top to bottom. Paint horizontal then vertical + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top + cellBounds.Height / 2, glyphRect.Right, cellBounds.Top + cellBounds.Height / 2); + graphics.DrawLine(linePen, glyphRect.X + 4, cellBounds.Top, glyphRect.X + 4, cellBounds.Bottom); + } + + // paint lines of previous levels to the root + OutlookGridRow? previousNode = node.ParentNode; + int horizontalStop = glyphRect.X + 4 - INDENT_WIDTH; + + while (previousNode != null)//.IsRoot) + { + if (previousNode.HasChildren && !previousNode.IsLastSibling) + { + // paint vertical line + graphics.DrawLine(linePen, horizontalStop, cellBounds.Top, horizontalStop, cellBounds.Bottom); + } + previousNode = previousNode.ParentNode; + horizontalStop = horizontalStop - INDENT_WIDTH; + } + } + + } + } + + if (node != null && node.HasChildren) + { + // Paint node glyphs + if (node.Collapsed) + { + if (KryptonManager.CurrentGlobalPalette != null && (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013)) + { + graphics.DrawImage(GenericImageResources.CollapseIcon2010, glyphRect.X, glyphRect.Y + glyphRect.Height / 2 - 4, 11, 11); + } + else + { + graphics.DrawImage(GenericImageResources.ExpandIcon, glyphRect.X, glyphRect.Y + glyphRect.Height / 2 - 4, 11, 11); + } + } + else + { + if (KryptonManager.CurrentGlobalPalette != null && (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013)) + { + graphics.DrawImage(GenericImageResources.ExpandIcon2010, glyphRect.X, glyphRect.Y + glyphRect.Height / 2 - 4, 11, 11); + } + else + { + graphics.DrawImage(GenericImageResources.CollapseIcon, glyphRect.X, glyphRect.Y + glyphRect.Height / 2 - 4, 11, 11); + } + } + } + //graphics.DrawRectangle(new Pen(new SolidBrush(Color.Red)), glyphRect); + } + + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnMouseUp(DataGridViewCellMouseEventArgs e) + { + base.OnMouseUp(e); + + OutlookGridRow? node = OwningNode; + if (node != null) + { + (node.DataGridView as KryptonOutlookGrid)!.InExpandCollapseMouseCapture = false; + } + } + /// + /// Raises the event. + /// + /// The instance containing the event data. + protected override void OnMouseDown(DataGridViewCellMouseEventArgs e) + { + Rectangle dis = DataGridView!.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false); + Rectangle glyphRect = new(dis.X + GlyphMargin, dis.Y, INDENT_WIDTH, dis.Height - 1); + + //if (e.X > this.InheritedStyle.Padding.Left) + if (e.X + dis.X <= glyphRect.X + 11 && + e.X + dis.X >= glyphRect.X) + { + + // Expand the node + //TODO: Calculate more precise location + OutlookGridRow? node = OwningNode; + if (node != null) + { + (node.DataGridView as KryptonOutlookGrid)!.InExpandCollapseMouseCapture = true; + + if (node.Collapsed) + { + node.Expand(); + } + else + { + node.Collapse(); + } + } + } + else + { + base.OnMouseDown(e); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTreeTextColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTreeTextColumn.cs new file mode 100644 index 000000000..a9ab02bc9 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/KryptonDataGridViewTreeTextColumn.cs @@ -0,0 +1,42 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Special column used to enable nodes in the grid. + /// + /// + public class KryptonDataGridViewTreeTextColumn : KryptonDataGridViewTextBoxColumn + { + #region Identity + + /// + /// Initializes a new instance of the class. + /// + public KryptonDataGridViewTreeTextColumn() + { + CellTemplate = new KryptonDataGridViewTreeTextCell(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/RatingCell.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/RatingCell.cs new file mode 100644 index 000000000..4de4e1f9b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/RatingCell.cs @@ -0,0 +1,196 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a rating celle + /// + public class RatingCell : DataGridViewImageCell + { + /// + /// Constructor + /// + public RatingCell() + { + //Value type is an integer. + //Formatted value type is an image since we derive from the ImageCell + ValueType = typeof(int); + } + + /// + /// Overrides GetFormattedValue + /// + /// + /// + /// + /// + /// + /// + /// + protected override object? GetFormattedValue(object? value, int rowIndex, ref DataGridViewCellStyle cellStyle, TypeConverter? valueTypeConverter, TypeConverter? formattedValueTypeConverter, DataGridViewDataErrorContexts context) + { + if (value == null) + { + return null; //For example it is also the case for group row... + } + else + { + return _starImages[(int)value]; + } + } + + /// + /// Overrides DefaultNewRowValue + /// + public override object DefaultNewRowValue => + //default new row to 3 stars + 3; + + /// + /// Overrides Paint + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + { + Image? cellImage = formattedValue as Image; + if (!ReadOnly) + { + int starNumber = GetStarFromMouse(cellBounds, DataGridView!.PointToClient(Control.MousePosition)); + + if (starNumber != -1) + { + cellImage = _starHotImages[starNumber]; + } + } + //supress painting of selection + base.Paint(graphics, clipBounds, cellBounds, rowIndex, elementState, value, cellImage, errorText, cellStyle, advancedBorderStyle, paintParts & ~DataGridViewPaintParts.SelectionBackground); + } + + /// + /// Update cell's value when the user clicks on a star + /// + /// A DataGridViewCellEventArgs that contains the event data. + protected override void OnContentClick(DataGridViewCellEventArgs e) + { + base.OnContentClick(e); + if (!ReadOnly) + { + int starNumber = GetStarFromMouse(DataGridView!.GetCellDisplayRectangle(DataGridView.CurrentCellAddress.X, DataGridView.CurrentCellAddress.Y, false), DataGridView.PointToClient(Control.MousePosition)); + + if (starNumber != -1) + { + Value = starNumber; + } + } + } + + #region Invalidate cells when mouse moves or leaves the cell + + /// + /// Overrides OnMouseLeave + /// + /// the row that contains the cell. + protected override void OnMouseLeave(int rowIndex) + { + base.OnMouseLeave(rowIndex); + DataGridView!.InvalidateCell(this); + } + + /// + /// Overrides OnMouseMove + /// + /// A DataGridViewCellMouseEventArgs that contains the event data. + protected override void OnMouseMove(DataGridViewCellMouseEventArgs e) + { + base.OnMouseMove(e); + DataGridView!.InvalidateCell(this); + } + #endregion + + #region Private Implementation + + static Image?[] _starImages; + static Image?[] _starHotImages; + const int IMAGE_WIDTH = 58; + + private int GetStarFromMouse(Rectangle cellBounds, Point mouseLocation) + { + if (cellBounds.Contains(mouseLocation)) + { + int mouseXRelativeToCell = mouseLocation.X - cellBounds.X; + int imageXArea = cellBounds.Width / 2 - IMAGE_WIDTH / 2; + if (mouseXRelativeToCell + 4 < imageXArea || mouseXRelativeToCell >= imageXArea + IMAGE_WIDTH) + { + return -1; + } + else + { + int oo = (int)Math.Round((float)(mouseXRelativeToCell - imageXArea + 2) / IMAGE_WIDTH * 10f, MidpointRounding.AwayFromZero); + if (oo is > 10 or < 0) + { + Debugger.Break(); + } + + return oo; + } + } + else + { + return -1; + } + } + + //setup star images + #region Load star images + + static RatingCell() + { + _starImages = new Image[11]; + _starHotImages = new Image[11]; + // load normal stars + for (int i = 0; i <= 10; i++) + { + _starImages[i] = (GenericImageResources.ResourceManager.GetObject($"star{i}") as Image)!; + } + + // load hot normal stars + for (int i = 0; i <= 10; i++) + { + _starHotImages[i] = GenericImageResources.ResourceManager.GetObject($"starhot{i}") as Image; + } + } + #endregion + + #endregion + + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TextAndImage.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TextAndImage.cs new file mode 100644 index 000000000..2824d35f2 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TextAndImage.cs @@ -0,0 +1,98 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for TextAndImage object + /// + public class TextAndImage : IComparable + { + #region Public Fields + + /// + /// The text + /// + public string Text; + + /// + /// The image + /// + public Image? Image; + + #endregion + + #region Identity + + /// + /// Constructor + /// + public TextAndImage() + { } + + /// + /// Constructor + /// + /// The text. + /// The image. + public TextAndImage(string text, Image? img) + { + Text = text; + Image = img; + } + + #endregion + + #region Public Overrides + + /// + /// Overrides ToString + /// + /// String that represents TextAndImage + public override string ToString() => Text; + + /// + /// Overrides Equals + /// + /// The object to compare + /// true if equal, false otherwise. + public override bool Equals(object? obj) => Text.Equals(obj?.ToString()); + + /// + /// Overrides GetHashCode + /// + /// + public override int GetHashCode() => base.GetHashCode(); + + #endregion + + #region Implementation + + /// + /// Compares to. + /// + /// The other. + /// + public int CompareTo(TextAndImage? other) => Text.CompareTo(other!.Text); + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/Token.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/Token.cs new file mode 100644 index 000000000..5429b131e --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/Token.cs @@ -0,0 +1,106 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Token object + /// + public class Token : IComparable + { + #region Identity + + /// + /// Default constructor + /// + public Token() + { + } + + /// + /// Constructor + /// + /// Text of the token + /// Background color + /// Foreground text color + public Token(string text, Color bg, Color fg) + { + Text = text; + + BackColor = bg; + + ForeColor = fg; + } + + #endregion + + #region Public + + /// + /// Text of the token + /// + public string Text { get; set; } + /// + /// Background color + /// + public Color BackColor { get; set; } + /// + /// Foreground text color + /// + public Color ForeColor { get; set; } + + #endregion + + #region Implementation + + /// + /// Compare a Token to another + /// + /// + /// + public int CompareTo(Token? other) => Text.CompareTo(other!.Text); + + #endregion + + #region Public Overrides + + /// + /// Overrides ToString + /// + /// String that represents TextAndImage + public override string ToString() => Text; + + /// + /// Overrides Equals + /// + /// The object to compare + /// true if equal, false otherwise. + public override bool Equals(object? obj) => Text.Equals(obj?.ToString()); + + /// + /// Overrides GetHashCode + /// + /// + public override int GetHashCode() => base.GetHashCode(); + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TokenCell.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TokenCell.cs new file mode 100644 index 000000000..ebf880912 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TokenCell.cs @@ -0,0 +1,160 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a Token cell + /// + public class TokenCell : KryptonDataGridViewTextBoxCell + { + #region Public Fields + + //List TokenList; + + #endregion + + #region Identity + + /// + /// Constructor + /// + public TokenCell() + { + //Value type is an integer. + //Formatted value type is an image since we derive from the ImageCell + ValueType = typeof(TokenCell); + } + + #endregion + + #region Public Overrides + + /// + /// Returns a that represents this instance. + /// + /// + /// A that represents this instance. + /// + public override string ToString() + { + if (Value is Token tok) + { + return tok.Text; + } + else + { + return string.Empty; + } + } + + #endregion + + #region Protected Overrides + + /// + /// Overrides Paint + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + { + float factorX = graphics.DpiX > 96 ? 1f * graphics.DpiX / 96 : 1f; + float factorY = graphics.DpiY > 96 ? 1f * graphics.DpiY / 96 : 1f; + + int nextPosition = cellBounds.X + (int)(1 * factorX); + Font? f = KryptonManager.CurrentGlobalPalette.GetContentShortTextFont(PaletteContentStyle.GridDataCellList, PaletteState.Normal); + + if (Value is Token tok) + { + Rectangle rectangle = new(); + Size s = TextRenderer.MeasureText(tok.Text, f); + rectangle.Width = s.Width + (int)(10 * factorX); + rectangle.X = nextPosition; + rectangle.Y = cellBounds.Y + (int)(2 * factorY); + rectangle.Height = (int)(17 * factorY); + nextPosition += rectangle.Width + (int)(5 * factorX); + + graphics.FillRectangle(new SolidBrush(tok.BackColor), rectangle); + TextRenderer.DrawText(graphics, tok.Text, f, rectangle, tok.ForeColor); + } + } + + /// + /// Overrides GetPreferredSize + /// + /// + /// + /// + /// + /// + protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) + { + float factorX = graphics.DpiX > 96 ? 1f * graphics.DpiX / 96 : 1f; + float factorY = graphics.DpiY > 96 ? 1f * graphics.DpiY / 96 : 1f; + + Size tmpSize = base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); + Font? f = KryptonManager.CurrentGlobalPalette.GetContentShortTextFont(PaletteContentStyle.GridDataCellList, PaletteState.Normal); + int nextPosition = (int)(1 * factorX); + if (Value != null) + { + Token tok = (Token)Value; + Size s = TextRenderer.MeasureText(tok.Text, f); + nextPosition += s.Width + (int)(10 * factorX) + (int)(5 * factorX); + + tmpSize.Width = nextPosition; + } + return tmpSize; + } + + /// + /// Update cell's value when the user clicks on a star + /// + /// A DataGridViewCellEventArgs that contains the event data. + protected override void OnContentClick(DataGridViewCellEventArgs e) => base.OnContentClick(e); + + #endregion + + #region Invalidate cells when mouse moves or leaves the cell + + /// + /// Overrides OnMouseLeave + /// + /// the row that contains the cell. + protected override void OnMouseLeave(int rowIndex) => base.OnMouseLeave(rowIndex); + + /// + /// Overrides OnMouseMove + /// + /// A DataGridViewCellMouseEventArgs that contains the event data. + protected override void OnMouseMove(DataGridViewCellMouseEventArgs e) => base.OnMouseMove(e); + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TokenListCell.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TokenListCell.cs new file mode 100644 index 000000000..dafbe55d5 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/CustomColumns/TokenListCell.cs @@ -0,0 +1,148 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class for a rating cells. + /// + public class TokenListCell : KryptonDataGridViewTextBoxCell + { + #region Public Fields + + //List TokenList; + + #endregion + + #region Identity + + /// + /// Constructor + /// + public TokenListCell() + { + //Value type is an integer. + //Formatted value type is an image since we derive from the ImageCell + ValueType = typeof(List); + } + + #endregion + + #region Protected Overrides + + /// + /// Overrides Paint + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates elementState, object? value, object? formattedValue, string? errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + { + float factorX = graphics.DpiX > 96 ? 1f * graphics.DpiX / 96 : 1f; + float factorY = graphics.DpiY > 96 ? 1f * graphics.DpiY / 96 : 1f; + + int nextPosition = cellBounds.X + (int)(1 * factorX); + Font? f = KryptonManager.CurrentGlobalPalette.GetContentShortTextFont(PaletteContentStyle.GridDataCellList, PaletteState.Normal); + + if (value is List tokens) + { + foreach (Token tok in tokens) + { + Rectangle rectangle = new(); + Size s = TextRenderer.MeasureText(tok.Text, f); + rectangle.Width = s.Width + (int)(10 * factorX); + rectangle.X = nextPosition; + rectangle.Y = cellBounds.Y + (int)(2 * factorY); + rectangle.Height = (int)(17 * factorY); + nextPosition += rectangle.Width + (int)(5 * factorX); + + graphics.FillRectangle(new SolidBrush(tok.BackColor), rectangle); + TextRenderer.DrawText(graphics, tok.Text, f, rectangle, tok.ForeColor); + } + } + } + + /// + /// Overrides GetPreferredSize + /// + /// + /// + /// + /// + /// + protected override Size GetPreferredSize(Graphics graphics, DataGridViewCellStyle cellStyle, int rowIndex, Size constraintSize) + { + float factorX = graphics.DpiX > 96 ? 1f * graphics.DpiX / 96 : 1f; + float factorY = graphics.DpiY > 96 ? 1f * graphics.DpiY / 96 : 1f; + + Size tmpSize = base.GetPreferredSize(graphics, cellStyle, rowIndex, constraintSize); + Font? f = KryptonManager.CurrentGlobalPalette.GetContentShortTextFont(PaletteContentStyle.GridDataCellList, PaletteState.Normal); + int nextPosition = (int)(1 * factorX); + if (Value != null) + { + foreach (Token tok in (List)Value) + { + Size s = TextRenderer.MeasureText(tok.Text, f); + nextPosition += s.Width + (int)(10 * factorX) + (int)(5 * factorX); + } + tmpSize.Width = nextPosition; + } + return tmpSize; + } + + /// + /// Update cell's value when the user clicks on a star + /// + /// A DataGridViewCellEventArgs that contains the event data. + protected override void OnContentClick(DataGridViewCellEventArgs e) => base.OnContentClick(e); + + #endregion + + #region Invalidate cells when mouse moves or leaves the cell + + /// + /// Overrides OnMouseLeave + /// + /// the row that contains the cell. + protected override void OnMouseLeave(int rowIndex) + { + base.OnMouseLeave(rowIndex); + } + + /// + /// Overrides OnMouseMove + /// + /// A DataGridViewCellMouseEventArgs that contains the event data. + protected override void OnMouseMove(DataGridViewCellMouseEventArgs e) + { + base.OnMouseMove(e); + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/ColorFormatting.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/ColorFormatting.cs new file mode 100644 index 000000000..0be368589 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/ColorFormatting.cs @@ -0,0 +1,177 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Color Formatting class : all the magic ! + /// + public static class ColorFormatting + { + #region Implementation + + /// + /// Returns the percentage value for a Bar formatting. + /// + /// The value. + /// The minimum. + /// The maximum. + /// + public static double ConvertBar(double value, double min, double max) + { + double percent; + if (min == max) + { + percent = 1.0; + } + else + { + //Min can be different from 0 + percent = (value - min) / (max - min); + } + return percent; + } + + /// + /// Returns the color for a 2scale color formatting. + /// + /// The value. + /// The minimum. + /// The maximum. + /// The 2color parameters. + /// + public static Color ConvertTwoRange(double value, double min, double max, TwoColorsParams par) + { + ColorHelper.HSVColor a = ColorToHSV(par.MinimumColor); + ColorHelper.HSVColor b = ColorToHSV(par.MaximumColor); + + //Ratio + double percent; + if (min == max) + { + percent = 1.0; + } + else + { + //Min can be different from 0 + percent = (value - min) / (max - min); + } + return Color.FromArgb((int)Math.Round(par.MinimumColor.A + (par.MaximumColor.A - par.MinimumColor.A) * percent), (int)Math.Round(par.MinimumColor.R + (par.MaximumColor.R - par.MinimumColor.R) * percent), (int)Math.Round(par.MinimumColor.G + (par.MaximumColor.G - par.MinimumColor.G) * percent), (int)Math.Round(par.MinimumColor.B + (par.MaximumColor.B - par.MinimumColor.B) * percent)); + } + + /// + /// Returns the color for a 3scale color formatting. + /// + /// The value. + /// The minimum. + /// The maximum. + /// The 3color parameters. + /// + public static Color ConvertThreeRange(double value, double min, double max, ThreeColorsParams? par) + { + ColorHelper.HSVColor a = ColorToHSV(par!.MinimumColor); + ColorHelper.HSVColor b = ColorToHSV(par.MinimumColor); + ColorHelper.HSVColor c = ColorToHSV(par.MinimumColor); + + //Ratio + double percent; + if (min == max) + { + percent = 1.0; + } + else + { + //Min can be different from 0 + percent = (value - min) / (max - min); + } + + if (percent == 0.5) + { + return par.MediumColor; + } + else if (percent <= 0.5) + { + return Color.FromArgb((int)Math.Round(par.MinimumColor.A + (par.MaximumColor.A - par.MinimumColor.A) * percent), (int)Math.Round(par.MinimumColor.R + (par.MediumColor.R - par.MinimumColor.R) * percent), (int)Math.Round(par.MinimumColor.G + (par.MediumColor.G - par.MinimumColor.G) * percent), (int)Math.Round(par.MinimumColor.B + (par.MediumColor.B - par.MinimumColor.B) * percent)); + } + else + { + return Color.FromArgb((int)Math.Round(par.MediumColor.A + (par.MaximumColor.A - par.MinimumColor.A) * percent), (int)Math.Round(par.MediumColor.R + (par.MaximumColor.R - par.MediumColor.R) * percent), (int)Math.Round(par.MediumColor.G + (par.MaximumColor.G - par.MediumColor.G) * percent), (int)Math.Round(par.MediumColor.B + (par.MaximumColor.B - par.MediumColor.B) * percent)); + } + } + + private static ColorHelper.HSVColor ColorToHSV(Color color) + { + int max = Math.Max(color.R, Math.Max(color.G, color.B)); + int min = Math.Min(color.R, Math.Min(color.G, color.B)); + + double hue = color.GetHue(); + double saturation = max == 0 ? 0 : 1d - 1d * min / max; + double value = max / 255d; + + return new((float)hue, (float)saturation, (float)value); + } + + private static Color ColorFromHSV(double hue, double saturation, double value) + { + int hi = Convert.ToInt32(Math.Floor(hue / 60)) % 6; + double f = hue / 60 - Math.Floor(hue / 60); + + value = value * 255; + int v = Convert.ToInt32(value); + int p = Convert.ToInt32(value * (1 - saturation)); + int q = Convert.ToInt32(value * (1 - f * saturation)); + int t = Convert.ToInt32(value * (1 - (1 - f) * saturation)); + + switch (hi) + { + case 0: + return Color.FromArgb(255, v, t, p); + case 1: + return Color.FromArgb(255, q, v, p); + case 2: + return Color.FromArgb(255, p, v, t); + case 3: + return Color.FromArgb(255, p, q, v); + case 4: + return Color.FromArgb(255, t, p, v); + default: + return Color.FromArgb(255, v, p, q); + } + } + /// + /// Interpolate colors 0.0 - 1.0 + /// + private static Color Interpolate(double percent, params Color[] colors) + { + int left = (int)Math.Floor(percent * (colors.Length - 1)); + int right = (int)Math.Ceiling(percent * (colors.Length - 1)); + Color colorLeft = colors[left]; + Color colorRight = colors[right]; + + double step = 1.0 / (colors.Length - 1); + double percentRight = (percent - left * step) / step; + double percentLeft = 1.0 - percentRight; + return Color.FromArgb((byte)(colorLeft.A * percentLeft + colorRight.A * percentRight), (byte)(colorLeft.R * percentLeft + colorRight.R * percentRight), (byte)(colorLeft.G * percentLeft + colorRight.G * percentRight), (byte)(colorLeft.B * percentLeft + colorRight.B * percentRight)); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/ConditionalFormatting.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/ConditionalFormatting.cs new file mode 100644 index 000000000..5386d0b11 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/ConditionalFormatting.cs @@ -0,0 +1,118 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Conditional Formatting class + /// + public class ConditionalFormatting + { + #region Public + + /// + /// Gets or sets the name of the column. + /// + /// + /// The name of the column. + /// + public string ColumnName { get; set; } + /// + /// Gets or sets the type of the Conditional Formatting. + /// + /// + /// The type of the Conditional Formatting. + /// + public EnumConditionalFormatType FormatType { get; set; } + /// + /// Gets or sets the Conditional Formatting parameters. + /// + /// + /// The Conditional Formatting parameters. + /// + public IFormatParams? FormatParams { get; set; } + /// + /// Gets or sets the minimum value. + /// + /// + /// The minimum value. + /// + public double MinValue { get; set; } + /// + /// Gets or sets the maximum value. + /// + /// + /// The maximum value. + /// + public double MaxValue { get; set; } + + #endregion + + #region Identity + + /// + /// Initializes a new instance of the class. + /// + public ConditionalFormatting() { } + + /// + /// Initializes a new instance of the class. (Only use for context menu !) + /// + /// Type of the Conditional Formatting. + /// The Conditional Formatting parameters. + public ConditionalFormatting(EnumConditionalFormatType formatType, IFormatParams formatParams) + { + FormatType = formatType; + FormatParams = formatParams; + } + + /// + /// Initializes a new instance of the class. + /// + /// Name of the column. + /// Type of the Conditional Formatting. + /// The Conditional Formatting parameters. + public ConditionalFormatting(string columnName, EnumConditionalFormatType formatType, IFormatParams? formatParams) + { + ColumnName = columnName; + FormatType = formatType; + FormatParams = formatParams; + } + + #endregion + + #region Implementation + + internal void Persist(XmlWriter writer) + { + writer.WriteStartElement(KryptonManager.Strings.OutlookGridStrings.ConditionXMLNodeText); + writer.WriteElementString(KryptonManager.Strings.OutlookGridStrings.ColumnNameXMLNodeText, ColumnName); + writer.WriteElementString(KryptonManager.Strings.OutlookGridStrings.FormatTypeXMLNodeText, FormatType.ToString()); + writer.WriteStartElement(KryptonManager.Strings.OutlookGridStrings.FormatParamsXMLNodeText); + FormatParams?.Persist(writer); + writer.WriteEndElement(); //FormatParams + //No need to persist min/max Value. + writer.WriteEndElement(); //Condition + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/CustomFormatRule.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/CustomFormatRule.cs new file mode 100644 index 000000000..819050376 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/CustomFormatRule.cs @@ -0,0 +1,44 @@ +#region Licences +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class CustomFormatRule + { + #region Public + + /// Shows the specified conditional format. + /// The conditional format. + /// The layout. + public static DialogResult Show(EnumConditionalFormatType conditionalFormat, + RightToLeftLayout layout = RightToLeftLayout.LeftToRight) => ShowCore(conditionalFormat, layout); + + #endregion + + #region Implementation + + private static DialogResult ShowCore(EnumConditionalFormatType conditionalFormat, RightToLeftLayout layout) + { + if (layout == RightToLeftLayout.LeftToRight) + { + using var cfr = new VisualCustomFormatRuleForm(conditionalFormat); + + return cfr.ShowDialog(); + } + else + { + using var cfrRTL = new VisualCustomFormatRuleRtlAwareForm(conditionalFormat); + + return cfrRTL.ShowDialog(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/BarParams.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/BarParams.cs new file mode 100644 index 000000000..5e2bc6658 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/BarParams.cs @@ -0,0 +1,82 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Parameters for Bar formatting + /// + /// + public class BarParams : IFormatParams + { + #region Public Fields + + /// + /// The bar color + /// + public Color BarColor; + + /// + /// The gradient fill + /// + public bool GradientFill; + + /// + /// The proportion value + /// + public double ProportionValue; + + #endregion + + #region Identity + + /// + /// Initializes a new instance of the class. + /// + /// Color of the bar. + /// if set to true [gradient fill]. + public BarParams(Color barColor, bool gradientFill) + { + BarColor = barColor; + GradientFill = gradientFill; + } + + #endregion + + #region Implementation + + /// Creates an object that is a copy of the current instance. + /// A new object that is a copy of this instance. + public object Clone() => MemberwiseClone(); + + /// + /// Persists the parameters. + /// + /// The XML writer. + void IFormatParams.Persist(XmlWriter writer) + { + writer.WriteElementString("BarColor", BarColor.ToArgb().ToString()); + writer.WriteElementString("GradientFill", CommonHelper.BoolToString(GradientFill)); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/ThreeColorsParams.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/ThreeColorsParams.cs new file mode 100644 index 000000000..a5f08ef6c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/ThreeColorsParams.cs @@ -0,0 +1,93 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Three scale color class parameters + /// + /// + public class ThreeColorsParams : IFormatParams + { + #region Public Fields + + /// + /// The minimum color + /// + public Color MinimumColor; + + /// + /// The medium color + /// + public Color MediumColor; + + /// + /// The maximum color + /// + public Color MaximumColor; + + /// + /// The color associated to the value + /// + public Color ValueColor; + + #endregion + + #region Identity + + /// + /// Initializes a new instance of the class. + /// + /// The minimum color. + /// Color of the medium. + /// The maximum color. + public ThreeColorsParams(Color minColor, Color mediumColor, Color maxColor) + { + MinimumColor = minColor; + MediumColor = mediumColor; + MaximumColor = maxColor; + } + + #endregion + + #region Implementation + + /// Creates an object that is a copy of the current instance. + /// A new object that is a copy of this instance. + public object Clone() + { + return MemberwiseClone(); + } + + /// + /// Persists the parameters. + /// + /// The XML writer. + void IFormatParams.Persist(XmlWriter writer) + { + writer.WriteElementString("MinimumColor", MinimumColor.ToArgb().ToString()); + writer.WriteElementString("MediumColor", MediumColor.ToArgb().ToString()); + writer.WriteElementString("MaximumColor", MaximumColor.ToArgb().ToString()); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/TwoColorsParams.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/TwoColorsParams.cs new file mode 100644 index 000000000..8ab850988 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Formatting/Params/TwoColorsParams.cs @@ -0,0 +1,83 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Two scale color class parameters + /// + /// + public class TwoColorsParams : IFormatParams + { + #region Public Fields + + /// + /// Minimum color + /// + public Color MinimumColor; + /// + /// Maximum color + /// + public Color MaximumColor; + /// + /// Color associated to the value between min and max color + /// + public Color ValueColor; + + #endregion + + #region Identity + + /// + /// Initializes a new instance of the class. + /// + /// The minimum color. + /// The maximum color. + public TwoColorsParams(Color minColor, Color maxColor) + { + MinimumColor = minColor; + MaximumColor = maxColor; + } + + #endregion + + #region Implementation + + /// Creates an object that is a copy of the current instance. + /// A new object that is a copy of this instance. + public object Clone() + { + return MemberwiseClone(); + } + + /// + /// Persists the parameters. + /// + /// The XML writer. + public void Persist(XmlWriter writer) + { + writer.WriteElementString("MinimumColor", MinimumColor.ToArgb().ToString()); + writer.WriteElementString("MaximumColor", MaximumColor.ToArgb().ToString()); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridAlphabeticGroup.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridAlphabeticGroup.cs new file mode 100644 index 000000000..56bfbe542 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridAlphabeticGroup.cs @@ -0,0 +1,131 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// This group simple example of an implementation which groups the items into Alphabetic categories + /// based only on the first letter of each item + /// + /// For this we need to override the Value property (used for comparison) + /// and the CompareTo function. + /// Also, the Clone method must be overriden, so this Group object can create clones of itself. + /// Cloning of the group is used by the OutlookGrid + /// + public sealed class OutlookGridAlphabeticGroup : OutlookGridDefaultGroup + { + #region Identity + + /// + /// Initializes a new instance of the class. + /// + public OutlookGridAlphabeticGroup() + : base() + { + AllowHiddenWhenGrouped = false; + } + + /// + /// Constructor. + /// + /// The parentGroup if any. + public OutlookGridAlphabeticGroup(IOutlookGridGroup? parentGroup) + : base(parentGroup) + { + AllowHiddenWhenGrouped = false; + } + + #endregion + + #region Public Identity + + /// + /// Gets or sets the displayed text. + /// + public override string Text => $"{Column.DataGridViewColumn?.HeaderText}: {Value} ({(ItemCount == 1 ? OneItemText : ItemCount + XxxItemsText)})"; + + /// + /// Gets or sets the Alphabetic value + /// + public override object? Value + { + get => base.Value; + set => + //Note : value with Clone() is already 1 character, but no problem here + base.Value = value is string str && str.Length > 0 + ? str.Substring(0, 1).ToUpper() + : string.Empty; + } + + #endregion + + #region ICloneable Members + + /// + /// Overrides the Clone() function + /// + /// OutlookGridAlphabeticGroup + public override object Clone() + { + OutlookGridAlphabeticGroup gr = new(ParentGroup) + { + Column = Column, + Value = Value, + Collapsed = Collapsed, + Height = Height, + GroupImage = GroupImage, + FormatStyle = FormatStyle, + XxxItemsText = XxxItemsText, + OneItemText = OneItemText, + AllowHiddenWhenGrouped = AllowHiddenWhenGrouped, + SortBySummaryCount = SortBySummaryCount + }; + + return gr; + } + + #endregion + + #region IComparable Members + /// + /// overide the CompareTo, so only the first character is compared, instead of the whole string + /// this will result in classifying each item into a letter of the Alphabet. + /// for instance, this is usefull when grouping names, they will be categorized under the letters A, B, C etc.. + /// + /// + /// + public override int CompareTo(object? obj) + { + int orderModifier = Column.SortDirection == SortOrder.Ascending ? 1 : -1; + + if (obj is OutlookGridAlphabeticGroup) + { + return string.CompareOrdinal(Value?.ToString(), (obj as OutlookGridAlphabeticGroup)?.Value?.ToString()) * + orderModifier; + } + else + { + return 0; + } + } + #endregion IComparable Members + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridColumn.cs new file mode 100644 index 000000000..9ca74c129 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridColumn.cs @@ -0,0 +1,160 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Column for the OutlookGrid + /// + public class OutlookGridColumn : IEquatable + { + #region Identity + /// + /// Constructor + /// + /// The DataGridViewColumn. + /// The group type for the column. + /// The sort direction. + /// The column's position in grouping and at which level. + /// the column's position among sorted columns. + /// The comparer if needed. + public OutlookGridColumn(DataGridViewColumn col, IOutlookGridGroup group, SortOrder sortDirection, int groupIndex, int sortIndex, IComparer? comparer) + { + DataGridViewColumn = col; + Name = col?.Name; + GroupingType = group; + SortDirection = sortDirection; + GroupIndex = groupIndex; + SortIndex = sortIndex; + RowsComparer = comparer; + } + + /// + /// Constructor + /// + /// The name. + /// The DataGridViewColumn. + /// The group type for the column. + /// The sort direction. + /// The column's position in grouping and at which level. + /// the column's position among sorted columns. + /// The comparer if needed + public OutlookGridColumn(string? columnName, DataGridViewColumn? col, IOutlookGridGroup? group, SortOrder sortDirection, int groupIndex, int sortIndex, IComparer? comparer) + { + DataGridViewColumn = col!; + Name = columnName; + GroupingType = group; + SortDirection = sortDirection; + GroupIndex = groupIndex; + SortIndex = sortIndex; + RowsComparer = comparer; + } + + /// + /// Constructor + /// + /// The name. + /// The DataGridViewColumn. + /// The group type for the column. + /// The sort direction. + /// The column's position in grouping and at which level. + /// the column's position among sorted columns. + public OutlookGridColumn(string columnName, DataGridViewColumn col, IOutlookGridGroup group, SortOrder sortDirection, int groupIndex, int sortIndex) + { + DataGridViewColumn = col; + Name = columnName; + GroupingType = group; + SortDirection = sortDirection; + GroupIndex = groupIndex; + SortIndex = sortIndex; + } + + /// Initializes a new instance of the class. + /// The data grid view column. + /// The group. + /// The sort order. + /// Index of the group. + /// Index of the sort. + public OutlookGridColumn(DataGridViewColumn dataGridViewColumn, IOutlookGridGroup? group, SortOrder sortOrder, int groupIndex, int sortIndex) + { + DataGridViewColumn = dataGridViewColumn; + GroupingType = group; + SortDirection = sortOrder; + GroupIndex = groupIndex; + SortIndex = sortIndex; + } + #endregion + + #region Properties + /// + /// Gets or sets the column name + /// + public string? Name { get; set; } + + /// + /// Gets or sets if the column is grouped + /// + public bool IsGrouped => GroupIndex > -1; + + /// + /// Gets or sets the sort direction + /// + public SortOrder SortDirection { get; set; } + + /// + /// Gets or sets the associated DataGridViewColumn + /// + public DataGridViewColumn DataGridViewColumn { get; set; } + + /// + /// Gets or sets the group + /// + public IOutlookGridGroup? GroupingType { get; set; } + + /// + /// Gets or sets the column's position in grouping and at which level + /// + public int GroupIndex { get; set; } + + /// + /// Gets or sets the column's position among sorted columns + /// + public int SortIndex { get; set; } + + /// + /// Gets or sets the custom row comparer, if needed. + /// + public IComparer? RowsComparer { get; set; } + + #endregion + + #region Implements + + /// Defines Equals method (interface IEquatable) + /// The OutlookGridColumn to compare with + /// + public bool Equals(OutlookGridColumn? other) + // Use of [DisallowNull] not possible due to interface restrictions (earlier requested change reverted) + => DataGridViewColumn.Name.Equals(other?.DataGridViewColumn.Name); + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridColumnCollection.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridColumnCollection.cs new file mode 100644 index 000000000..adfbb2159 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridColumnCollection.cs @@ -0,0 +1,258 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// List of the current columns of the OutlookGrid + /// + public class OutlookGridColumnCollection : List + { + #region Instance Fields + + private int _maxGroupIndex; + private int _maxSortIndex; + + #endregion + + #region Identity + + /// + /// Constructor + /// + public OutlookGridColumnCollection() + : base() + { + _maxGroupIndex = -1; + _maxSortIndex = -1; + } + + #endregion + + #region Public + + /// + /// Gets the OutlookGridColumn in the list by its name + /// + /// The column name. + /// OutlookGridColumn + public OutlookGridColumn? this[string columnName] => Find( c => c.DataGridViewColumn.Name.Equals(columnName) ); + + /// + /// Gets or Sets the maximum GroupIndex in the collection + /// + public int MaxGroupIndex { get => _maxGroupIndex; set => _maxGroupIndex = value; } + + /// + /// Gets or sets the maximum SortIndex in the collection + /// + public int MaxSortIndex { get => _maxSortIndex; set => _maxSortIndex = value; } + + #endregion + + #region Implementation + + /// + /// Add an OutlookGridColumn to the collection. + /// + /// The OutlookGridColumn to add. + public new void Add(OutlookGridColumn item) + { + base.Add(item); + + if (item.GroupIndex > -1) + { + _maxGroupIndex++; + } + + if (item.SortIndex > -1) + { + _maxSortIndex++; + } + } + + /// + /// Gets the number of columns grouped + /// + /// the number of columns grouped. + public int CountGrouped() => this.Count(c => c.IsGrouped); + + /// + /// Gets the list of grouped columns + /// + /// The list of grouped columns. + public List? FindGroupedColumns() => this.Where(c => c.IsGrouped).OrderBy(c => c.GroupIndex).ToList(); + + /// + /// Gets a list of columns which are sorted and not grouped. + /// + /// List of Column indexes and SortDirection ordered by SortIndex. + public List> GetIndexAndSortGroupedColumns() + { + List> res = new(); + var tmp = this.OrderBy(x => x.GroupIndex); + foreach (OutlookGridColumn col in tmp) + { + if (col.IsGrouped && col.GroupIndex > -1) + { + res.Add(Tuple.Create(col.DataGridViewColumn.Index, col.SortDirection, col.RowsComparer!)); + } + } + return res; + } + + /// + /// Gets the column from its real index (from the underlying DataGridViewColumn) + /// + /// The index + /// The OutlookGridColumn. + public OutlookGridColumn? FindFromColumnIndex(int index) => this.FirstOrDefault(c => c.DataGridViewColumn.Index == index); + + /// + /// Gets the column from its name + /// + /// The name of the column. + /// The associated OutlookGridColumn. + public OutlookGridColumn? FindFromColumnName(string? name) => this.FirstOrDefault(x => x.Name == name); + + /// + /// Gets a list of columns which are sorted and not grouped. + /// + /// List of Column indexes and SortDirection ordered by SortIndex. + public List> GetIndexAndSortSortedOnlyColumns() + { + var res = new List>(); + var tmp = this.OrderBy(x => x.SortIndex); + foreach (OutlookGridColumn col in tmp) + { + if (!col.IsGrouped && col.SortIndex > -1) + { + res.Add(Tuple.Create(col.DataGridViewColumn.Index, col.SortDirection, (IComparer)col.RowsComparer!)); + } + } + return res; + } + + /// + /// Removes a groupIndex and update the GroupIndex for all columns + /// + /// The OutlookGridColumn that will be removed. + internal void RemoveGroupIndex(OutlookGridColumn col) + { + int removed = col.GroupIndex; + + // TODO: Turn this into a foreach loop + for (int i = 0; i < Count; i++) + { + if (this[i].GroupIndex > removed) + { + this[i].GroupIndex--; + } + } + _maxGroupIndex--; + col.GroupIndex = -1; + } + + /// + /// Removes a SortIndex and update the SortIndex for all columns + /// + /// The OutlookGridColumn that will be removed. + internal void RemoveSortIndex(OutlookGridColumn col) + { + int removed = col.SortIndex; + + // TODO: Turn this into a foreach loop + for (int i = 0; i < Count; i++) + { + if (this[i].SortIndex > removed) + { + this[i].SortIndex--; + } + } + _maxSortIndex--; + col.SortIndex = -1; + } + + internal void ChangeGroupIndex(OutlookGridColumn outlookGridColumn) + { + int currentGroupIndex = -1; + int newGroupIndex = outlookGridColumn.GroupIndex; + + // TODO: Turn this into a foreach loop + for (int i = 0; i < Count; i++) + { + if (this[i].Name == outlookGridColumn.Name) + { + currentGroupIndex = this[i].GroupIndex; + } + } + + if (currentGroupIndex == -1) + { + throw new("OutlookGrid : Unable to interpret the change of GroupIndex!"); + } + +#if (DEBUG) + Console.WriteLine("currentGroupIndex=" + currentGroupIndex.ToString()); + Console.WriteLine("newGroupIndex=" + newGroupIndex.ToString()); + Console.WriteLine("Before"); + DebugOutput(); +#endif + + for (int i = 0; i < Count; i++) + { + if (this[i].IsGrouped) + { + if (this[i].GroupIndex == currentGroupIndex) + { + this[i].GroupIndex = newGroupIndex; + } + else if (this[i].GroupIndex >= newGroupIndex && this[i].GroupIndex < currentGroupIndex) + { + this[i].GroupIndex++; + } + else if (this[i].GroupIndex <= newGroupIndex && this[i].GroupIndex > currentGroupIndex) + { + this[i].GroupIndex--; + } + } + } +#if (DEBUG) + Console.WriteLine("After"); + DebugOutput(); +#endif + } + + /// + /// Outputs Debug information to the console. + /// + public void DebugOutput() + { + for (int i = 0; i < Count; i++) + { + Console.WriteLine($"{this[i].Name} , GroupIndex={this[i].GroupIndex}, SortIndex={this[i].SortIndex}"); + } + Console.WriteLine($"MaxGroupIndex={_maxGroupIndex}, MaxSortIndex={_maxSortIndex}"); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridDateTimeGroup.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridDateTimeGroup.cs new file mode 100644 index 000000000..5e4152ffb --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridDateTimeGroup.cs @@ -0,0 +1,273 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// this group simple example of an implementation which groups the items into day categories + /// based on, today, yesterday, last week etc + /// + /// for this we need to override the Value property (used for comparison) + /// and the CompareTo function. + /// Also, the Clone method must be overriden, so this Group object can create clones of itself. + /// Cloning of the group is used by the OutlookGrid + /// + public class OutlookGridDateTimeGroup : OutlookGridDefaultGroup + { + #region Instance Fields + + private DateTime _valDateTime; + + private readonly TextInfo _ti = CultureInfo.CurrentCulture.TextInfo; + + #endregion + + #region Public + + /// + /// The Date Interval of OutlookGridDateTimeGroup + /// + public DateInterval Interval { get; set; } + + #endregion + + #region Identity + + /// + /// Initializes a new instance of the class. + /// + public OutlookGridDateTimeGroup() + { + AllowHiddenWhenGrouped = true; + Interval = DateInterval.Smart; + } + + /// + /// Constructor + /// + /// The parentGroup if any. + public OutlookGridDateTimeGroup(IOutlookGridGroup? parentGroup) + : base(parentGroup) + { + AllowHiddenWhenGrouped = true; + Interval = DateInterval.Smart; + } + + #endregion + + #region Public Overrides + + /// + ///Gets or sets the displayed text. + /// + public override string Text => $"{Column.DataGridViewColumn?.HeaderText}: {Value} ({(ItemCount == 1 ? OneItemText : ItemCount + XxxItemsText)})"; + + /// + /// Gets or sets the Date value + /// + public override object? Value + { + get => base.Value; + + set + { + switch (Interval) + { + case DateInterval.Smart: + //If no date Time let the valDateTime to the min value ! + if (value != null && value != DBNull.Value) + { + _valDateTime = DateTime.Parse(value.ToString()!); + } + else + { + _valDateTime = DateTime.MinValue; + } + + base.Value = OutlookGridGroupHelpers.GetDayText(_valDateTime); + break; + case DateInterval.Year: + //If no date Time let the valDateTime to the min value ! + if (value != null && value != DBNull.Value) + { + _valDateTime = DateTime.Parse(value.ToString()!); + base.Value = _valDateTime.Year; + } + else + { + _valDateTime = DateTime.MinValue; + base.Value = KryptonManager.Strings.OutlookGridStrings.NoDate; + } + break; + case DateInterval.Month: + //If no date Time let the valDateTime to the min value ! + if (value != null && value != DBNull.Value) + { + _valDateTime = DateTime.Parse(value.ToString()!); + base.Value = $"{_ti.ToTitleCase(_valDateTime.ToString("MMMM"))} {_valDateTime.Year}"; + } + else + { + _valDateTime = DateTime.MinValue; + base.Value = KryptonManager.Strings.OutlookGridStrings.NoDate; + } + break; + case DateInterval.Day: + if (value != null && value != DBNull.Value) + { + _valDateTime = DateTime.Parse(value.ToString()!); + base.Value = _valDateTime.Date.ToShortDateString(); + } + else + { + _valDateTime = DateTime.MinValue; + base.Value = KryptonManager.Strings.OutlookGridStrings.NoDate; + } + break; + case DateInterval.Quarter: + if (value != null && value != DBNull.Value) + { + _valDateTime = DateTime.Parse(value.ToString()!); + base.Value = + $"{OutlookGridGroupHelpers.GetQuarterAsString(_valDateTime)} {_valDateTime.Year}"; + } + else + { + _valDateTime = DateTime.MinValue; + base.Value = KryptonManager.Strings.OutlookGridStrings.NoDate; + } + break; + default: + throw new("Unknown Interval !"); + + } + + } + } + + #endregion + + #region ICloneable Members + + /// + /// Overrides the Clone() function + /// + /// OutlookGridDateTimeGroup + public override object Clone() + { + OutlookGridDateTimeGroup gr = new(ParentGroup); + gr.Column = Column; + gr.Value = _valDateTime; //thx Resharper ! + gr.Collapsed = Collapsed; + gr.Height = Height; + gr.GroupImage = GroupImage; + gr.FormatStyle = FormatStyle; + gr.XxxItemsText = XxxItemsText; + gr.OneItemText = OneItemText; + gr.AllowHiddenWhenGrouped = AllowHiddenWhenGrouped; + gr.SortBySummaryCount = SortBySummaryCount; + gr.Interval = Interval; + + return gr; + } + + #endregion + + #region IComparable Members + + /// + /// Overrides CompareTo + /// + /// + /// + public override int CompareTo(object? obj) + { + int orderModifier = Column.SortDirection == SortOrder.Ascending ? 1 : -1; + DateTime val; + if (obj is DateTime) + { + //TODO necessary ??? + val = DateTime.Parse(obj.ToString()!); + } + else if (obj is OutlookGridDateTimeGroup) + { + val = ((OutlookGridDateTimeGroup)obj)._valDateTime; + } + else + { + val = new(); + } + + switch (Interval) + { + case DateInterval.Smart: + //if (OutlookGridGroupHelpers.GetDateCode(valDateTime.Date) == OutlookGridGroupHelpers.GetDateCode(val.Date)) + //{ + // return 0; + //} + //else + //{ + // return DateTime.Compare(valDateTime.Date, val.Date) * orderModifier; + //} + return OutlookGridGroupHelpers.GetDateCodeNumeric(_valDateTime).CompareTo(OutlookGridGroupHelpers.GetDateCodeNumeric(val)) * orderModifier; + case DateInterval.Year: + if (_valDateTime.Year == val.Year) + { + return 0; + } + else + { + return _valDateTime.Year.CompareTo(val.Year) * orderModifier; + } + case DateInterval.Month: + if (_valDateTime.Month == val.Month && _valDateTime.Year == val.Year) + { + return 0; + } + else + { + return _valDateTime.Date.CompareTo(val.Date) * orderModifier; + } + case DateInterval.Day: + if (_valDateTime.Date == val.Date) + { + return 0; + } + else + { + return _valDateTime.Date.CompareTo(val.Date) * orderModifier; + } + case DateInterval.Quarter: + if (OutlookGridGroupHelpers.GetQuarter(_valDateTime) == OutlookGridGroupHelpers.GetQuarter(val) && _valDateTime.Year == val.Year) + { + return 0; + } + else + { + return _valDateTime.Date.CompareTo(val.Date) * orderModifier; + } + default: + throw new("Unknown Interval !"); + + } + } + #endregion IComparable Members + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridDefaultGroup.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridDefaultGroup.cs new file mode 100644 index 000000000..ceffe1dc6 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridDefaultGroup.cs @@ -0,0 +1,427 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Each arrange/grouping class must implement the IOutlookGridGroup interface + /// the Group object will determine for each object in the grid, whether it + /// falls in or outside its group. + /// It uses the IComparable.CompareTo function to determine if the item is in the group. + /// This class group the elements by default (string, int, ...) + /// + public class OutlookGridDefaultGroup : IOutlookGridGroup + { + #region Instance Fields + /// + /// The Value of the group + /// + private object? _val; + /// + /// Boolean if the group is collapsed or not + /// + private bool _collapsed; + /// + /// The associated DataGridView column. + /// + private OutlookGridColumn? _column; + /// + /// The number of items in this group. + /// + private int _itemCount; + /// + /// The height (in pixels). + /// + private int _height; + + /// + /// The string to format the value of the group + /// + private string _formatStyle; + /// + /// The picture associated to the group + /// + private Image? _groupImage; + /// + /// The text associated for the group text (1 item) + /// + private string? _oneItemText; + /// + /// The text associated for the group text (XXX items) + /// + private string? _xXxItemsText; + /// + /// Allows the column to be hidden when it is grouped by + /// + private bool _allowHiddenWhenGrouped; + /// + /// Sort groups using count items value + /// + private bool _sortBySummaryCount; + + private IComparer? _itemsComparer; + #endregion + + #region Identity + + /// + /// Initializes a new instance of the class. + /// + public OutlookGridDefaultGroup() + { + _val = null; + _column = null; + if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderMicrosoft365) + { + _height = GlobalStaticValues.Office2013GroupRowHeight; // special height for office 2013 + } + else + { + _height = GlobalStaticValues.DefaultGroupRowHeight; // default height + } + + Rows = new List(); + Children = new OutlookGridGroupCollection(); + _formatStyle = ""; + _oneItemText = KryptonManager.Strings.OutlookGridStrings.OneItem; + _xXxItemsText = KryptonManager.Strings.OutlookGridStrings.NumberOfItems; + _allowHiddenWhenGrouped = true; + _sortBySummaryCount = false; + } + + /// + /// Constructor + /// + /// The parent group if any. + public OutlookGridDefaultGroup(IOutlookGridGroup? parentGroup) : this() + { + if (parentGroup != null) + { + Children.ParentGroup = parentGroup; + } + } + #endregion + + #region IOutlookGridGroup Members + + /// + /// Gets or sets the list of rows associated to the group. + /// + public List Rows { get; set; } + + /// + /// Gets or sets the parent group. + /// + /// The parent group. + public IOutlookGridGroup? ParentGroup { get; set; } + + /// + /// Gets or sets the level. + /// + /// The level. + public int Level { get; set; } + + /// + /// Gets or sets the children. + /// + /// The children. + public OutlookGridGroupCollection Children { get; set; } + + /// + /// Gets or sets the displayed text + /// + public virtual string Text + { + get + { + string formattedValue = ""; + string res = ""; + //For formatting number we need to cast the object value to the number before applying formatting + if (_val == null || string.IsNullOrEmpty(_val.ToString())) + { + formattedValue = KryptonManager.Strings.OutlookGridStrings.Unknown; + } + else if (!String.IsNullOrEmpty(_formatStyle)) + { + if (_val is string) + { + formattedValue = string.Format(_formatStyle, Value); + } + else if (_val is DateTime) + { + formattedValue = ((DateTime)Value!).ToString(_formatStyle); + } + else if (_val is int) + { + formattedValue = ((int)Value!).ToString(_formatStyle); + } + else if (_val is float) + { + formattedValue = ((float)Value!).ToString(_formatStyle); + } + else if (_val is double) + { + formattedValue = ((double)Value!).ToString(_formatStyle); + } + else if (_val is decimal) + { + formattedValue = ((decimal)Value!).ToString(_formatStyle); + } + else if (_val is long) + { + formattedValue = ((long)Value!).ToString(_formatStyle); + } + else if (_val is TimeSpan) + { + formattedValue = ((TimeSpan)Value!).ToString(_formatStyle); + } + else + { + formattedValue = Value!.ToString()!; + } + } + else + { + formattedValue = Value!.ToString()!; + } + + res = + $"{_column!.DataGridViewColumn!.HeaderText}: {formattedValue} ({(_itemCount == 1 ? _oneItemText : _itemCount + XxxItemsText)})"; + //if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + // return res.ToUpper(); + //else + return res; + } + //set + //{ + // text = value; + //} + } + + /// + /// Gets or sets the Value of the group + /// + public virtual object? Value { get => _val; set => _val = value; } + + /// + /// Boolean if the group is collapsed or not + /// + public virtual bool Collapsed { get => _collapsed; set => _collapsed = value; } + + /// + /// Gets or sets the associated DataGridView column. + /// + [DisallowNull] + public virtual OutlookGridColumn Column + { + get => _column!; + set => _column = value ?? throw new NullReferenceException(GlobalStaticValues.PropertyCannotBeNull(nameof(this.Column))); + } + + /// + /// Gets or set the number of items in this group. + /// + public virtual int ItemCount { get => _itemCount; set => _itemCount = value; } + + /// + /// Gets or sets the height (in pixels). + /// + public virtual int Height { get => _height; set => _height = value; } + + /// + /// Gets or sets the Format Info. + /// + public virtual string FormatStyle { get => _formatStyle; set => _formatStyle = value; } + + /// + /// Gets or sets the picture. + /// + public virtual Image? GroupImage + { + get => _groupImage; + set => _groupImage = value; + } + + /// + /// Gets or sets the text associated to One Item + /// + public virtual string? OneItemText + { + get => _oneItemText; + set => _oneItemText = value; + } + + /// + /// Gets or sets the text associated to several Items + /// + public virtual string? XxxItemsText + { + get => _xXxItemsText; + set => _xXxItemsText = value; + } + + /// + /// Gets or sets the boolean that hides the column automatically when grouped. + /// + public virtual bool AllowHiddenWhenGrouped + { + get => _allowHiddenWhenGrouped; + set => _allowHiddenWhenGrouped = value; + } + + /// + /// Gets or sets the boolean that sort groups using summary value + /// + public virtual bool SortBySummaryCount + { + get => _sortBySummaryCount; + set => _sortBySummaryCount = value; + } + + /// + /// Gets or sets the items comparer. + /// + /// + /// The items comparer. + /// + [AllowNull] + public virtual IComparer? ItemsComparer + { + get => _itemsComparer; + set => _itemsComparer = value; + } + + #endregion + + #region ICloneable Members + + /// + /// Overrides the Clone() function + /// + /// OutlookgGridDefaultGroup + public virtual object Clone() + { + var gr = new OutlookGridDefaultGroup(ParentGroup) + { + _column = _column, + _val = _val, + _collapsed = _collapsed, + _height = _height, + _groupImage = _groupImage, + _formatStyle = _formatStyle, + _xXxItemsText = XxxItemsText, + _oneItemText = OneItemText, + _allowHiddenWhenGrouped = _allowHiddenWhenGrouped, + _sortBySummaryCount = _sortBySummaryCount + }; + + return gr; + } + + #endregion + + #region IComparable Members + + /// + /// This is a comparison operation based on the type of the value. + /// + /// the value in the related column of the item to compare to + /// + public virtual int CompareTo(object? obj) + { + int orderModifier = Column.SortDirection == SortOrder.Ascending ? 1 : -1; + int compareResult = 0; + + object? o2 = (obj as OutlookGridDefaultGroup)?.Value; + + if ((_val == null || _val == DBNull.Value) && o2 != null && o2 != DBNull.Value) + { + compareResult = 1; + } + else if (_val != null && _val != DBNull.Value && (o2 == null || o2 == DBNull.Value)) + { + compareResult = -1; + } + else + { + if (_val is string) + { + compareResult = string.Compare(_val.ToString(), o2!.ToString()) * orderModifier; + } + else if (_val is DateTime) + { + compareResult = ((DateTime)_val).CompareTo((DateTime)o2!) * orderModifier; + } + else if (_val is int) + { + compareResult = ((int)_val).CompareTo((int)o2!) * orderModifier; + } + else if (_val is bool) + { + bool b1 = (bool)_val; + bool b2 = (bool)o2!; + compareResult = (b1 == b2 ? 0 : b1 ? 1 : -1) * orderModifier; + } + else if (_val is float) + { + float n1 = (float)_val; + float n2 = (float)o2!; + compareResult = (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) * orderModifier; + } + else if (_val is double) + { + double n1 = (double)_val; + double n2 = (double)o2!; + compareResult = (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) * orderModifier; + } + else if (_val is decimal) + { + decimal n1 = (decimal)_val; + decimal n2 = (decimal)o2!; + compareResult = (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) * orderModifier; + } + else if (_val is long) + { + long n1 = (long)_val; + long n2 = (long)o2!; + compareResult = (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) * orderModifier; + } + else if (_val is TimeSpan) + { + TimeSpan t1 = (TimeSpan)_val; + TimeSpan t2 = (TimeSpan)o2!; + compareResult = (t1 > t2 ? 1 : t1 < t2 ? -1 : 0) * orderModifier; + } + else if (_val is TextAndImage) + { + compareResult = ((TextAndImage)_val).CompareTo((TextAndImage)o2!) * orderModifier; + } + //TODO implement a value for Token Column ?? + else if (_val is Token) + { + compareResult = ((Token)_val).CompareTo((Token)o2!) * orderModifier; + } + } + return compareResult; + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupBoxColumn.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupBoxColumn.cs new file mode 100644 index 000000000..63a7853c5 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupBoxColumn.cs @@ -0,0 +1,101 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Column for the OutlookGrid GroupBox + /// + public class OutlookGridGroupBoxColumn : IEquatable + { + #region Identity + /// + /// Constructor + /// + /// The column name. + /// The display text of the column. + /// The column sort order. + /// The name of the used OutlookGridGroup mode. + public OutlookGridGroupBoxColumn(string? columnName, string? columnText, SortOrder sort, string groupingType) + { + Text = columnText; + ColumnName = columnName; + SortDirection = sort; + GroupingType = groupingType; + } + #endregion + + #region Public + + /// + /// Gets or sets the associated Rectangle that represents the column + /// + public Rectangle Rect { get; set; } + /// + /// Gets or sets the HeaderText of the column. + /// + public string? Text { get; set; } + /// + /// Gets or sets the boolean that indicates if the column is in a pressed state. + /// + public bool Pressed { get; set; } + /// + /// Gets or sets the Sort direction of the column. + /// + public SortOrder SortDirection { get; set; } + /// + /// Gets or sets the associated column name + /// + public string? ColumnName { get; set; } + /// + /// Gets or sets the boolean that indicates if the column is currently being dragged. + /// + public bool IsMoving { get; set; } + /// + /// Gets or sets the boolean that indicates if the column is currently being hovered by the mouse. + /// + public bool IsHovered { get; set; } + /// + /// Gets or sets a string that corresponds to the name of the OutlookGridGroup + /// + public string GroupingType { get; set; } + /// + /// Gets or sets the date interval if the grouping type is OutlookDateTimeGroup + /// + public string? GroupInterval { get; set; } + /// + /// Gets or sets the boolean that indicates if the column should be grouped by using the count value + /// + public bool SortBySummaryCount { get; set; } + + #endregion + + #region Implementation + /// + /// Defines Equals method on the columnName + /// + /// The OutlookGridGroupBoxColumn to compare with. + /// True or False. + public bool Equals(OutlookGridGroupBoxColumn? other) => ColumnName!.Equals(other!.ColumnName); + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupCollection.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupCollection.cs new file mode 100644 index 000000000..f1f4bf0b5 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupCollection.cs @@ -0,0 +1,144 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// List of IOutlookGridGroups + /// + public class OutlookGridGroupCollection + { + #region "Variables" + private IOutlookGridGroup? _parentGroup; + private readonly List _groupList; + #endregion + + #region "Constructor" + /// + /// Initializes a new instance of the class. + /// + public OutlookGridGroupCollection() + { + _groupList = new(); + } + + /// + /// Initializes a new instance of the class. + /// + /// The parent group, if any. + public OutlookGridGroupCollection(IOutlookGridGroup? parentGroup) + { + _groupList = new(); + _parentGroup = parentGroup; + } + #endregion + + #region Properties + + /// + /// Gets or Sets the parent group + /// + public IOutlookGridGroup? ParentGroup { get => _parentGroup; internal set => _parentGroup = value; } + + /// + /// Gets the list of IOutlookGridGroup. + /// + public List List => _groupList; + + /// + /// Gets the number of groups + /// + public int Count => _groupList.Count; + + #endregion + + #region "Public methods" + + /// + /// Gets the Group object + /// + /// Index in the list of groups. + /// The IOutlookGridGroup. + public IOutlookGridGroup? this[int index] => _groupList[index]; + + /// + /// Adds a new group + /// + /// The IOutlookGridGroup. + public void Add(IOutlookGridGroup? group) + { + _groupList.Add(group); + } + + /// + /// Sorts the groups + /// + public void Sort() + { + _groupList.Sort(); + } + + /// + /// Sorts the groups + /// + internal void Sort(OutlookGridGroupCountComparer? comparer) + { + if (comparer != null) + { + _groupList.Sort(comparer!); + } + } + + /// + /// Find a group by its value + /// + /// The value of the group + /// The IOutlookGridGroup. + public IOutlookGridGroup? FindGroup(object? value) + { + //We must return null if no group exist, then the OutlookGrid will create one. But we must return a group even for a null value. + if (value == null) + { + return _groupList.Find(x => x != null && x.Value == null); + //return null; + } + //return groupList.Find(x => x.Value.Equals(value)); + return _groupList.Find(x => x != null && x.Value != null && x.Value.Equals(value)); + } + + #endregion + + #region "Internals" + + internal void Clear() + { + _parentGroup = null; + //If a group is collapsed the rows will not appear. Then if we clear the group the rows should not remain "collapsed" + for (int i = 0; i < _groupList.Count; i++) + { + _groupList[i]!.Collapsed = false; + } + _groupList.Clear(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupCountComparer.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupCountComparer.cs new file mode 100644 index 000000000..138392684 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridGroupCountComparer.cs @@ -0,0 +1,68 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + internal class OutlookGridGroupCountComparer : IComparer + { + public OutlookGridGroupCountComparer() + { + } + + #region IComparer Members + + public int Compare(IOutlookGridGroup? x, IOutlookGridGroup? y) + { + /* + * OutlookGridGroupCountComparer implements the IComparer interface. + * So added the [DisallowNull] attribs on request which solves the forgiving operators but that causes the next warning: + * + * Warning CS8767: Nullability of reference types in type of parameter 'x' of + * 'int OutlookGridGroupCountComparer.Compare(IOutlookGridGroup x, IOutlookGridGroup y) + * doesn't match implicitly implemented member + * int IComparer.Compare(IOutlookGridGroup? x, IOutlookGridGroup? y) + * (possibly because of nullability attributes). + * + * The interface dictates params to be nullable and does not allow the [DisallowNull] attribute. + * So there's not really a way around the use of the null forgiving operator. + */ + try + { + int orderModifier = x!.Column.SortDirection == SortOrder.Ascending + ? 1 + : -1; + + int c1 = x.ItemCount; + int c2 = y!.ItemCount; + int compareResult = c1.CompareTo(c2) * orderModifier; + + return compareResult == 0 + ? x.CompareTo(y) + : compareResult; + } + catch (Exception ex) + { + throw new($"OutlookGridGroupCountComparer: {this}", ex); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRow.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRow.cs new file mode 100644 index 000000000..c9800c252 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRow.cs @@ -0,0 +1,712 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// OutlookGridRow - subclasses the DataGridView's DataGridViewRow class + /// In order to support grouping with the same look and feel as Outlook, the behaviour + /// of the DataGridViewRow is overridden by the OutlookGridRow. + /// The OutlookGridRow has 2 main additional properties: the Group it belongs to and + /// a the IsRowGroup flag that indicates whether the OutlookGridRow object behaves like + /// a regular row (with data) or should behave like a Group row. + /// + public class OutlookGridRow : DataGridViewRow + { + #region "Variables" + + private bool _isGroupRow; + private IOutlookGridGroup? _group; + private bool _collapsed; //For TreeNode + private OutlookGridRowNodeCollection _nodeCollection; //For TreeNode + private int _nodeLevel; //For TreeNode + private OutlookGridRow? _parentNode; //for TreeNode + #endregion + + #region "Properties" + + /// + /// Gets or sets the group to the row belongs to. + /// + /// + /// The group. + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public IOutlookGridGroup? Group + { + get => _group; + set => _group = value; + } + + + /// + /// Gets or sets a value indicating whether this instance is a group row. + /// + /// + /// true if this instance is a group row; otherwise, false. + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool IsGroupRow + { + get => _isGroupRow; + set => _isGroupRow = value; + } + + /// + /// Gets or sets a value indicating whether this is collapsed. + /// + /// + /// true if collapsed; otherwise, false. + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool Collapsed { get => _collapsed; set => _collapsed = value; } + + /// + /// Gets or sets the nodes. + /// + /// + /// The nodes. + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public OutlookGridRowNodeCollection Nodes { get => _nodeCollection; set => _nodeCollection = value; } + + /// + /// Gets a value indicating whether this instance is first sibling. + /// + /// + /// true if this instance is first sibling; otherwise, false. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool IsFirstSibling => NodeIndex == 0; + + /// + /// Gets a value indicating whether this instance is last sibling. + /// + /// + /// true if this instance is last sibling; otherwise, false. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool IsLastSibling + { + get + { + OutlookGridRow? parent = _parentNode; + if (parent != null && parent.HasChildren) + { + return NodeIndex == parent.Nodes.Count - 1; + } + else + { + return true; + } + } + } + + /// + /// Gets a value indicating whether this instance has children. + /// + /// + /// true if this instance has children; otherwise, false. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool HasChildren => _nodeCollection.Count > 0; + + /// + /// Gets or sets the node level. + /// + /// + /// The node level. + /// + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public int NodeLevel { get => _nodeLevel; set => _nodeLevel = value; } + + /// + /// Gets or sets the parent node. + /// + /// + /// The parent node. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public OutlookGridRow? ParentNode { get => _parentNode; set => _parentNode = value; } + + /// + /// Gets the index of the node. + /// + /// + /// The index of the node. + /// + public int NodeIndex + { + get + { + if (_parentNode != null) + { + return _parentNode.Nodes.IndexOf(this); + } + else + { + return 0; + } + } + } + #endregion + + #region "Constructors" + + /// + /// Default Constructor + /// + public OutlookGridRow() + : this(null, false) + { + //nodeCollection = new OutlookGridRowNodeCollection(this); + //NodeLevel = 0; + //Collapsed = true; + } + + /// + /// Constructor + /// + /// The group the row is associated to. + public OutlookGridRow(IOutlookGridGroup? group) + : this(group, false) + { + //nodeCollection = new OutlookGridRowNodeCollection(this); + //NodeLevel = 0; + //Collapsed = true; + } + + /// + /// Constructor + /// + /// The group the row is associated to. + /// Determines if it is a group row. + public OutlookGridRow(IOutlookGridGroup? group, bool isGroupRow) + { + _group = group; + _isGroupRow = isGroupRow; + _nodeCollection = new(this); + NodeLevel = 0; + Collapsed = true; + } + + #endregion + + #region "Overrides" + + /// + /// Overrides the GetState method + /// + /// + /// + public override DataGridViewElementStates GetState(int rowIndex) + { + //yes its readable at least it was ;) + if ((IsGroupRow && IsAParentCollapsed(_group, 0)) || (!IsGroupRow && _group != null && (_group.Collapsed || IsAParentCollapsed(_group, 0))) || (!IsGroupRow && IsAParentNodeOrGroupCollapsed(this, 0))) + { + return base.GetState(rowIndex) & DataGridViewElementStates.Selected; + } + //For the TreeGridView project if the selection mode is FullRow subnodes that where collapsed disappear when parent collapse/expands + //because for an unknown reason the state becomes None instead of at least visible. + if (base.GetState(rowIndex) == DataGridViewElementStates.None) + { + return DataGridViewElementStates.Visible; + } + else + { + return base.GetState(rowIndex); + } + } + + /// + /// the main difference with a Group row and a regular row is the way it is painted on the control. + /// the Paint method is therefore overridden and specifies how the Group row is painted. + /// Note: this method is not implemented optimally. It is merely used for demonstration purposes + /// + /// + /// + /// + /// + /// + /// + /// + protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, int rowIndex, DataGridViewElementStates rowState, bool isFirstDisplayedRow, bool isLastVisibleRow) + { + if (_isGroupRow) + { + KryptonOutlookGrid grid = (KryptonOutlookGrid)DataGridView!; + int rowHeadersWidth = grid!.RowHeadersVisible ? grid.RowHeadersWidth : 0; + int groupLevelIndentation = _group!.Level * GlobalStaticValues.GroupLevelMultiplier; + + int gridwidth = grid.Columns.GetColumnsWidth(DataGridViewElementStates.Visible); + Rectangle myRowBounds = rowBounds; + myRowBounds.Width = gridwidth; + + IPaletteBack paletteBack = grid.StateNormal.DataCell.Back; + IPaletteBorder paletteBorder = grid.StateNormal.DataCell.Border; + + PaletteState state = PaletteState.Normal; + if (grid.PreviousSelectedGroupRow == rowIndex && KryptonManager.CurrentGlobalPalette.GetRenderer() != KryptonManager.RenderOffice2013) + { + state = PaletteState.CheckedNormal; + } + + using (RenderContext renderContext = new(grid, graphics, myRowBounds, grid.Renderer!)) + { + using (GraphicsPath path = grid.Renderer!.RenderStandardBorder.GetBackPath(renderContext, myRowBounds, paletteBorder, VisualOrientation.Top, PaletteState.Normal)) + { + //Back + IDisposable? unused = grid.Renderer.RenderStandardBack.DrawBack(renderContext, + myRowBounds, + path, + paletteBack, + VisualOrientation.Top, + state, + null); + + // We never save the memento for reuse later + if (unused != null) + { + unused.Dispose(); + unused = null; + } + } + } + + // Draw the botton : solid line for 2007 palettes or dot line for 2010 palettes, full background for 2013 + if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010) + { + using (Pen focusPen = new(Color.Gray)) + { + focusPen.DashStyle = DashStyle.Dash; + graphics.DrawLine(focusPen, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset, rowBounds.Bottom - 1, gridwidth + 1, rowBounds.Bottom - 1); + } + } + else if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + { + using (SolidBrush br = new(Color.FromArgb(225, 225, 225))) + { + graphics.FillRectangle(br, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset, rowBounds.Bottom - GlobalStaticValues.Office2013GroupRowHeight, gridwidth + 1, GlobalStaticValues.Office2013GroupRowHeight - 1); + } + } + else + { + using (SolidBrush br = new(paletteBorder.GetBorderColor1(state))) + { + graphics.FillRectangle(br, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset, rowBounds.Bottom - 2, gridwidth + 1, 2); + } + } + + //Draw right vertical bar + if (grid.CellBorderStyle is DataGridViewCellBorderStyle.SingleVertical or DataGridViewCellBorderStyle.Single) + { + using (SolidBrush br = new(paletteBorder.GetBorderColor1(state))) + { + graphics.FillRectangle(br, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + gridwidth, rowBounds.Top, 1, rowBounds.Height); + } + } + + //Set the icon and lines according to the renderer + if (_group.Collapsed) + { + if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + { + graphics.DrawImage(GenericImageResources.CollapseIcon2010, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); + } + else + { + graphics.DrawImage(GenericImageResources.ExpandIcon, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); + } + } + else + { + if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + { + graphics.DrawImage(GenericImageResources.ExpandIcon2010, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); + } + else + { + graphics.DrawImage(GenericImageResources.CollapseIcon, rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + groupLevelIndentation, rowBounds.Bottom - 18, 11, 11); + } + } + + //Draw image group + int imageoffset = 0; + if (_group.GroupImage != null) + { + if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2010 || KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + { + graphics.DrawImage(_group.GroupImage, rowHeadersWidth - grid.HorizontalScrollingOffset + GlobalStaticValues.ImageOffsetWidth + groupLevelIndentation, rowBounds.Bottom - GlobalStaticValues.Office2013OffsetHeight, GlobalStaticValues.GroupImageSide, GlobalStaticValues.GroupImageSide); + imageoffset = GlobalStaticValues.ImageOffsetWidth; + } + else + { + graphics.DrawImage(_group.GroupImage, rowHeadersWidth - grid.HorizontalScrollingOffset + GlobalStaticValues.ImageOffsetWidth + groupLevelIndentation, rowBounds.Bottom - GlobalStaticValues.DefaultOffsetHeight, GlobalStaticValues.GroupImageSide, GlobalStaticValues.GroupImageSide); + imageoffset = GlobalStaticValues.ImageOffsetWidth; + } + } + + //Draw text, using the current grid font + int offsetText = rowHeadersWidth - grid.HorizontalScrollingOffset + 18 + imageoffset + groupLevelIndentation; + if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + { + TextRenderer.DrawText(graphics, _group.Text, grid.GridPalette?.GetContentShortTextFont(PaletteContentStyle.LabelBoldControl, state), new Rectangle(offsetText, rowBounds.Bottom - GlobalStaticValues.Office2013OffsetHeight, rowBounds.Width - offsetText, rowBounds.Height), grid.GridPalette!.GetContentShortTextColor1(PaletteContentStyle.LabelNormalControl, state), + TextFormatFlags.EndEllipsis | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); + } + else + { + TextRenderer.DrawText(graphics, _group.Text, grid.GridPalette?.GetContentShortTextFont(PaletteContentStyle.LabelBoldControl, state), new Rectangle(offsetText, rowBounds.Bottom - GlobalStaticValues.DefaultOffsetHeight, rowBounds.Width - offsetText, rowBounds.Height), grid.GridPalette!.GetContentShortTextColor1(PaletteContentStyle.LabelNormalControl, state), + TextFormatFlags.EndEllipsis | TextFormatFlags.SingleLine | TextFormatFlags.PreserveGraphicsClipping); + } + + ////Debug Hits + ////ExpandCollaspe icon + //graphics.DrawRectangle(new Pen(Color.Red), new Rectangle(rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * 15, rowBounds.Bottom - 18, 11, 11)); + ////Image + //if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + // graphics.DrawRectangle(new Pen(Color.Blue), new Rectangle(rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + StaticValues._ImageOffsetwidth + groupLevelIndentation, rowBounds.Bottom - StaticValues._2013OffsetHeight, StaticValues._groupImageSide, StaticValues._groupImageSide)); + //else + // graphics.DrawRectangle(new Pen(Color.Blue), new Rectangle(rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + StaticValues._ImageOffsetwidth + groupLevelIndentation, rowBounds.Bottom - StaticValues._defaultOffsetHeight, StaticValues._groupImageSide, StaticValues._groupImageSide)); + } + else + { + base.Paint(graphics, clipBounds, rowBounds, rowIndex, rowState, isFirstDisplayedRow, isLastVisibleRow); + } + } + + + /// + /// Paints the cells. + /// + /// The graphics. + /// The clip bounds. + /// The row bounds. + /// Index of the row. + /// State of the row. + /// if set to true [is first displayed row]. + /// if set to true [is last visible row]. + /// The paint parts. + /// Will not execute if it is a group row.) + protected override void PaintCells(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, int rowIndex, DataGridViewElementStates rowState, bool isFirstDisplayedRow, bool isLastVisibleRow, DataGridViewPaintParts paintParts) + { + if (!_isGroupRow) + { + base.PaintCells(graphics, clipBounds, rowBounds, rowIndex, rowState, isFirstDisplayedRow, isLastVisibleRow, paintParts); + } + } + + + /// + /// Returns a that represents this instance. + /// + /// + /// A that represents this instance. + /// + public override string ToString() + { + string res = ""; + try + { + res += "OutlookGridRow "; + foreach (DataGridViewCell c in Cells) + { + if (c.Value != null) + { + res += c.Value.ToString(); + } + } + } + catch + { + return string.Empty; + } + return res; + } + + #endregion + + #region "Public methods" + + /// + /// Gets if the row has one parent that is collapsed + /// + /// The group to look at. + /// Fill 0 to first this method (used for recursive). + /// True or false. + public bool IsAParentCollapsed(IOutlookGridGroup? gr, int i) + { + i++; + if (gr?.ParentGroup != null) + { + //if it is not the original group but it is one parent and if it is collapsed just stop here + //no need to look further to the parents (one of the parents can be expanded...) + //if (i > 1 && gr.Collapsed) + if (gr.ParentGroup.Collapsed) + { + return true; + } + else + { + return IsAParentCollapsed(gr.ParentGroup, i); + } + } + else + { + return i switch + { + //if 1 that means there is no parent + 1 => false, + _ => gr!.Collapsed + }; + } + } + + + /// + /// Determines if there is a parent node or a parent group collapsed. + /// + /// The specified row. + /// The i. + /// + public bool IsAParentNodeOrGroupCollapsed(OutlookGridRow? row, int i) + { + i++; + //Console.WriteLine(row.ToString()); + if (row?.ParentNode != null) + { + //if it is not the original group, but it is one parent and if it is collapsed just stop here + //no need to look further to the parents (one of the parents can be expanded...) + if (row.ParentNode.Collapsed) + { + return true; + } + else + { + return IsAParentNodeOrGroupCollapsed(row.ParentNode, i); + } + } + else //no parent + { + if (i == 1) //if 1 that means there is no parent + { return false; } + else //return the final parent collapsed state + { + if (row?._group != null) + { + return row.Collapsed || row._group.Collapsed || IsAParentCollapsed(row._group, 0); + } + else + { + return row!.Collapsed; + } + + } + } + } + + /// + /// Expand the group the row belongs to. + /// + public void ExpandGroup() + { + SetGroupCollapse(false); + } + + /// + /// Collapse the group the row belongs to. + /// + public void CollapseGroup() + { + SetGroupCollapse(true); + } + + internal void SetGroupCollapse(bool collapsed) + { + if (IsGroupRow) + { + Group!.Collapsed = collapsed; + + //this is a workaround to make the grid re-calculate it's contents and backgroun bounds + // so the background is updated correctly. + // this will also invalidate the control, so it will redraw itself + Visible = false; + Visible = true; + + //When collapsing the first row still seeing it. + if (Index < DataGridView!.FirstDisplayedScrollingRowIndex) + { + DataGridView.FirstDisplayedScrollingRowIndex = Index; + } + } + } + + internal void SetNodeCollapse(bool collapsed) + { + if (HasChildren) + { + Collapsed = collapsed; + + //this is a workaround to make the grid re-calculate it's contents and backgroun bounds + // so the background is updated correctly. + // this will also invalidate the control, so it will redraw itself + Visible = false; + Visible = true; + + //When collapsing the first row still seeing it. + if (Index < DataGridView!.FirstDisplayedScrollingRowIndex) + { + DataGridView.FirstDisplayedScrollingRowIndex = Index; + } + } + } + + /// + /// Collapse Node (with events) + /// + public void Collapse() + { + ((KryptonOutlookGrid)DataGridView!).CollapseNode(this); + } + + /// + /// Expand Node (with events) + /// + public void Expand() + { + ((KryptonOutlookGrid)DataGridView!).ExpandNode(this); + } + + #endregion + + #region "Private methods" + + /// + /// this function checks if the user hit the expand (+) or collapse (-) icon. + /// if it was hit it will return true + /// + /// mouse click event arguments + /// returns true if the icon was hit, false otherwise + internal bool IsIconHit(DataGridViewCellMouseEventArgs e) + { + if (e.ColumnIndex < 0) + { + return false; + } + + if (!_isGroupRow) + { + return false; + } + + KryptonOutlookGrid? grid = DataGridView as KryptonOutlookGrid; + Rectangle rowBounds = grid!.GetRowDisplayRectangle(Index, false); + + int rowHeadersWidth = grid.RowHeadersVisible ? grid.RowHeadersWidth : 0; + int l = e.X + grid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Left; + if (_isGroupRow && + l >= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + _group!.Level * GlobalStaticValues.GroupLevelMultiplier && + l <= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + _group.Level * GlobalStaticValues.GroupLevelMultiplier + 11 && + e.Y >= rowBounds.Height - 18 && + e.Y <= rowBounds.Height - 7) + { + return true; + } + + return false; + } + + //internal bool IsNodeIconHit(DataGridViewCellMouseEventArgs e) + //{ + // if (e.ColumnIndex < 0) return false; + // if (!this.HasChildren) return false; + + // DataGridViewCell cell = this.Cells[e.ColumnIndex]; + // if (cell.GetType() is KryptonDataGridViewTreeTextCell) { + // cell. + // } + // KryptonOutlookGrid grid = (KryptonOutlookGrid)this.DataGridView; + + + // Rectangle glyphRect = new Rectangle(rect.X + this.GlyphMargin, rect.ContentBounds.Y, INDENT_WIDTH, this.ContentBounds.Height - 1); + + // if ((e.X <= glyphRect.X + 11) && + // (e.X >= glyphRect.X) && + // (e.Y >= glyphRect.Y + (glyphRect.Height / 2) - 4) && + // (e.Y <= glyphRect.Y + (glyphRect.Height / 2) - 4 + 11)) + + + // if (this.isGroupRow && + // (l >= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * StaticValues._groupLevelMultiplier) && + // (l <= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 4 + group.Level * StaticValues._groupLevelMultiplier + 11) && + // (e.Y >= rowBounds.Height - 18) && + // (e.Y <= rowBounds.Height - 7)) + // return true; + + // return false; + //} + + internal bool IsGroupImageHit(DataGridViewCellMouseEventArgs e) + { + if (e.ColumnIndex < 0) + { + return false; + } + + if (!_isGroupRow || _group?.GroupImage == null) + { + return false; + } + + + KryptonOutlookGrid? grid = DataGridView as KryptonOutlookGrid; + Rectangle rowBounds = grid!.GetRowDisplayRectangle(Index, false); + + int rowHeadersWidth = grid.RowHeadersVisible ? grid.RowHeadersWidth : 0; + int l = e.X + grid.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, false).Left; + int offsetHeight; + if (KryptonManager.CurrentGlobalPalette.GetRenderer() == KryptonManager.RenderOffice2013) + { + offsetHeight = GlobalStaticValues.Office2013OffsetHeight; + } + else + { + offsetHeight = GlobalStaticValues.DefaultOffsetHeight; + } + + if (_isGroupRow && + l >= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 18 + _group.Level * GlobalStaticValues.GroupLevelMultiplier && + l <= rowBounds.Left + rowHeadersWidth - grid.HorizontalScrollingOffset + 18 + _group.Level * GlobalStaticValues.GroupLevelMultiplier + 16 && + e.Y >= rowBounds.Height - offsetHeight && + e.Y <= rowBounds.Height - 6) + { + return true; + } + + return false; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRowComparer2.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRowComparer2.cs new file mode 100644 index 000000000..8624a3367 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRowComparer2.cs @@ -0,0 +1,145 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + internal class OutlookGridRowComparer2 : IComparer + { + private readonly List> _sortColumnIndexAndOrder; + + /// + /// Initializes a new instance of the class. + /// + /// The sort list, tuple (column index, sortorder, Icomparer) + public OutlookGridRowComparer2(List> sortList) + { + _sortColumnIndexAndOrder = sortList; + } + + #region IComparer Members + + /// + /// Compares the specified x. + /// + /// The x. + /// The y. + /// + /// OutlookGridRowComparer: + this.ToString() + public int Compare(OutlookGridRow? x, OutlookGridRow? y) + { + int compareResult = 0, orderModifier; + + try + { + for (var i = 0; i < _sortColumnIndexAndOrder.Count; i++) + { + if (compareResult == 0) + { + orderModifier = _sortColumnIndexAndOrder[i].Item2 == SortOrder.Ascending ? 1 : -1; + + var o1 = x!.Cells[_sortColumnIndexAndOrder[i].Item1].Value; + var o2 = y!.Cells[_sortColumnIndexAndOrder[i].Item1].Value; + if (_sortColumnIndexAndOrder[i].Item3 != null) + { + compareResult = _sortColumnIndexAndOrder[i].Item3.Compare(o1, o2) * orderModifier; + } + else + { + if ((o1 == null || o1 == DBNull.Value) && o2 != null && o2 != DBNull.Value) + { + compareResult = 1; + } + else if (o1 != null && o1 != DBNull.Value && (o2 == null || o2 == DBNull.Value)) + { + compareResult = -1; + } + else + { + if (o1 is string) + { + compareResult = string.CompareOrdinal(o1.ToString(), o2!.ToString()) * orderModifier; + } + else if (o1 is DateTime) + { + compareResult = ((DateTime)o1).CompareTo((DateTime)o2!) * orderModifier; + } + else if (o1 is int) + { + compareResult = ((int)o1).CompareTo((int)o2!) * orderModifier; + } + else if (o1 is bool) + { + var b1 = (bool)o1; + var b2 = (bool)o2!; + compareResult = (b1 == b2 ? 0 : b1 ? 1 : -1) * orderModifier; + } + else if (o1 is float) + { + var n1 = (float)o1; + var n2 = (float)o2!; + compareResult = (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) * orderModifier; + } + else if (o1 is double) + { + var n1 = (double)o1; + var n2 = (double)o2!; + compareResult = (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) * orderModifier; + } + else if (o1 is decimal) + { + var d1 = (decimal)o1; + var d2 = (decimal)o2!; + compareResult = (d1 > d2 ? 1 : d1 < d2 ? -1 : 0) * orderModifier; + } + else if (o1 is long) + { + var n1 = (long)o1; + var n2 = (long)o2!; + compareResult = (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) * orderModifier; + } + else if (o1 is TimeSpan) + { + var t1 = (TimeSpan)o1; + var t2 = (TimeSpan)o2!; + compareResult = (t1 > t2 ? 1 : t1 < t2 ? -1 : 0) * orderModifier; + } + else if (o1 is TextAndImage) + { + compareResult = ((TextAndImage)o1).CompareTo(o2 as TextAndImage) * orderModifier; + } + else if (o1 is Token) + { + compareResult = ((Token)o1).CompareTo(o2 as Token) * orderModifier; + } + } + } + } + } + return compareResult; + } + catch (Exception ex) + { + throw new($"OutlookGridRowComparer: {ToString()}", ex); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRowNodeCollection.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRowNodeCollection.cs new file mode 100644 index 000000000..4dbbb05d4 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/General/OutlookGridRowNodeCollection.cs @@ -0,0 +1,149 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// List of IOutlookGridGroups + /// + public class OutlookGridRowNodeCollection + { + #region "Variables" + private OutlookGridRow? _parentNode; + private List _subNodes; + #endregion + + #region "Constructor" + /// + /// Initializes a new instance of the class. + /// + /// The parent node. + public OutlookGridRowNodeCollection(OutlookGridRow? parentNode) + { + _parentNode = parentNode; + _subNodes = new(); + } + #endregion + + #region Properties + + /// + /// Gets the parent node. + /// + /// + /// The parent node. + /// + public OutlookGridRow? ParentNode { get => _parentNode; set => _parentNode = value; } + + /// + /// Gets the nodes. + /// + /// + /// The nodes. + /// + public List Nodes => _subNodes; + + + /// + /// Gets the number of groups + /// + /// + /// The count. + /// + public int Count => _subNodes.Count; + + #endregion + + #region "Public methods" + + + /// + /// Gets the at the specified index. + /// + /// + /// The . + /// + /// The index. + /// The IOutlookGridGroup. + public OutlookGridRow this[int index] => _subNodes[index]; + + /// + /// Adds the specified row. + /// + /// The row. + public void Add(OutlookGridRow row) + { + row.ParentNode = _parentNode; + if (ParentNode != null) + { + row.NodeLevel = ParentNode.NodeLevel + 1; //Not ++ + } + _subNodes.Add(row); + } + + /// + /// Sorts this instance. + /// + public void Sort() + { + _subNodes.Sort(); + } + + /// + /// Sorts the specified comparer. + /// + /// The comparer. + internal void Sort(OutlookGridRowComparer2 comparer) + { + _subNodes.Sort(comparer); + } + + /// + /// Gets the Index of a row + /// + /// The OutlookGrid row. + /// + public int IndexOf(OutlookGridRow row) + { + return _subNodes.IndexOf(row); + } + + #endregion + + #region "Internals" + + /// + /// Clears all subnodes. + /// + internal void Clear() + { + _parentNode = null; + //If a group is collapsed the rows will not appear. Then if we clear the group the rows should not remain "collapsed" + for (int i = 0; i < _subNodes.Count; i++) + { + _subNodes[i].Collapsed = false; + } + _subNodes.Clear(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Helpers/ColorHelper.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Helpers/ColorHelper.cs new file mode 100644 index 000000000..12fd3ca05 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Helpers/ColorHelper.cs @@ -0,0 +1,488 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +// ReSharper disable InconsistentNaming +namespace Krypton.Toolkit +{ + /// + /// Helper for color manipulations + /// + public static class ColorHelper + { + #region Structures for HSL and HSV colors + + /// + /// HSV Structure + /// + public struct HSVColor + { + private float _hue; + + /// + /// Hue value, from 0° to 360° + /// + public float Hue + { + get => _hue; + set => _hue = value; + } + + private float _saturation; + + /// + /// Saturation value, from 0 to 1 + /// + public float Saturation + { + get => _saturation; + set => _saturation = value; + } + + private float _valueOrBrightness; + + /// + /// Value or Brightness value, from 0 to 1 + /// + public float ValueOrBrightness + { + get => _valueOrBrightness; + set => _valueOrBrightness = value; + } + + /// + /// Initializes a new instance of the struct. + /// + /// The hue. + /// The saturation. + /// The value. + public HSVColor(float hue, float saturation, float value) + { + _hue = hue; + _saturation = saturation; + _valueOrBrightness = value; + } + } + + /// + /// HSL Structure + /// + public struct HSLColor + { + private float _hue; + + /// + /// Hue value, from 0° to 360° + /// + public float Hue + { + get => _hue; + set => _hue = value; + } + + private float _saturation; + + /// + /// Saturation value, from 0 to 1 + /// + public float Saturation + { + get => _saturation; + set => _saturation = value; + } + + private float _lightness; + + /// + /// Value or Lightness value, from 0 to 1 + /// + public float Lightness + { + get => _lightness; + set => _lightness = value; + } + + /// + /// Initializes a new instance of the struct. + /// + /// The hue. + /// The saturation. + /// The lightness. + public HSLColor(float hue, float saturation, float lightness) + { + _hue = hue; + _saturation = saturation; + _lightness = lightness; + } + } + + #endregion + + + /// + /// Returns a System.Color from HSL values + /// + /// Hue (0 to 360°) + /// Saturation (0 to 1) + /// Value/Brightness (0 to 1) + /// + public static Color FromHSV(float h, float s, float v) + { + // Hue checking + if (h < 0f) + { + h = 0f; + } + else if (h > 360f) + { + h = 360f; + } + + // Saturation checking + if (s < 0f) + { + s = 0f; + } + else if (s > 1f) + { + s = 1f; + } + + // Value/Brightness checking + if (v < 0f) + { + v = 0f; + } + else if (v > 1f) + { + v = 1f; + } + + // === Conversion === + float fRed = 0f; + float fGreen = 0f; + float fBlue = 0f; + + if (s == 0) + { + // No saturation => shade of gray + int grayValue = Convert.ToInt32(v * 255); + return Color.FromArgb(grayValue, grayValue, grayValue); + } + else + { + float hVal = h / 360f; // 0 <= hVah < 1 + + float varH = hVal * 6f; + if (varH == 6f) + { + varH = 0f; + } + + int i = (int)varH; //Or ... vari = floor( varh ) + float var1 = v * (1f - s); + float var2 = v * (1f - s * (varH - i)); + float var3 = v * (1f - s * (1f - (varH - i))); + + switch (i) + { + case 0: + fRed = v; + fGreen = var3; + fBlue = var1; + break; + case 1: + fRed = var2; + fGreen = v; + fBlue = var1; + break; + case 2: + fRed = var1; + fGreen = v; + fBlue = var3; + break; + case 3: + fRed = var1; + fGreen = var2; + fBlue = v; + break; + case 4: + fRed = var3; + fGreen = var1; + fBlue = v; + break; + default: + fRed = v; + fGreen = var1; + fBlue = var2; + break; + } + + return Color.FromArgb((int)(fRed * 255f), (int)(fGreen * 255f), (int)(fBlue * 255f)); + } + } + + + /// + /// Returns HSV values from RGB + /// + /// Red component from 0 to 255 + /// Green component from 0 to 255 + /// Blue component from 0 to 255 + /// + public static HSVColor ToHSV(int red, int green, int blue) + { + float varR = red / 255f; //RGB from 0 to 255 + float varG = green / 255f; + float varB = blue / 255f; + + float varMin = Math.Min(varR, Math.Min(varG, varB)); //Min. value of RGB + float varMax = Math.Max(varR, Math.Max(varG, varB)); //Max. value of RGB + float deltaMax = varMax - varMin; //Delta RGB value + + float h = 0; + float s = 0; + float v = 0; + + // Value / Brightness + v = varMax; + + if (deltaMax == 0) + { + // Gray scale + h = 0; //HSV results from 0 to 1 + s = 0; + } + else + { + // Saturation + s = deltaMax / varMax; + + // Hue + float deltaR = ((varMax - varR) / 6f + deltaMax / 2f) / deltaMax; + float deltaG = ((varMax - varG) / 6f + deltaMax / 2f) / deltaMax; + float deltaB = ((varMax - varB) / 6f + deltaMax / 2f) / deltaMax; + + if (varR == varMax) + { + h = deltaB - deltaG; + } + else if (varG == varMax) + { + h = 1f / 3f + deltaR - deltaB; + } + else if (varB == varMax) + { + h = 2f / 3f + deltaG - deltaR; + } + + if (h < 0f) + { + h += 1; + } + + if (h > 1f) + { + h -= 1; + } + } + + return new HSVColor(h * 360f, s, v); + } + + + /// + /// Returns a System.Color from HSL values + /// + /// Hue (0 to 360°) + /// Saturation (0 to 1) + /// Lightness (0 to 1) + /// + public static Color FromHSL(float h, float s, float l) + { + // Hue checking + if (h < 0f) + { + h = 0f; + } + else if (h > 360f) + { + h = 360f; + } + + // Saturation checking + if (s < 0f) + { + s = 0f; + } + else if (s > 1f) + { + s = 1f; + } + + // Lightness checking + if (l < 0f) + { + l = 0f; + } + else if (l > 1f) + { + l = 1f; + } + + // === Conversion === + if (s == 0) + { + // No saturation => shade of gray + int grayValue = Convert.ToInt32(l * 255); + return Color.FromArgb(grayValue, grayValue, grayValue); + } + + float var1, var2, hval; + + if (l < 0.5f) + { + var2 = l * (1f + s); + } + else + { + var2 = l + s - s * l; + } + + var1 = 2f * l - var2; + hval = h / 360f; + + int red = Convert.ToInt32(255f * FromHueToRGB(var1, var2, hval + 1f / 3f)); + int green = Convert.ToInt32(255f * FromHueToRGB(var1, var2, hval)); + int blue = Convert.ToInt32(255f * FromHueToRGB(var1, var2, hval - 1f / 3f)); + + return Color.FromArgb(red, green, blue); + } + + private static float FromHueToRGB(float var1, float var2, float hue) + { + float rgbColor; + + if (hue < 0f) + { + hue += 1f; + } + + if (hue > 1f) + { + hue -= 1f; + } + + if (6f * hue < 1f) + { + rgbColor = var1 + (var2 - var1) * 6f * hue; + } + else if (2f * hue < 1f) + { + rgbColor = var2; + } + else if (3f * hue < 2f) + { + rgbColor = var1 + (var2 - var1) * (2f / 3f - hue) * 6f; + } + else + { + rgbColor = var1; + } + + return rgbColor; + } + + /// + /// Returns HSL values from RGB + /// + /// Red component from 0 to 255 + /// Green component from 0 to 255 + /// Blue component from 0 to 255 + /// + public static HSLColor ToHSL(int red, int green, int blue) + { + float varR = red / 255f; //RGB from 0 to 255 + float varG = green / 255f; + float varB = blue / 255f; + + float varMin = Math.Min(varR, Math.Min(varG, varB)); //Min. value of RGB + float varMax = Math.Max(varR, Math.Max(varG, varB)); //Max. value of RGB + float deltaMax = varMax - varMin; //Delta RGB value + + float h = 0; + float s = 0; + float l = 0; + + // Lightness + l = (varMax + varMin) / 2f; + + if (deltaMax == 0) + { + // Gray scale + h = 0; //HSL results from 0 to 1 + s = 0; + } + else + { + // Saturation + if (l < 0.5f) + { + s = deltaMax / (varMax + varMin); + } + else + { + s = deltaMax / (2f - varMax - varMin); + } + + // Hue + float deltaR = ((varMax - varR) / 6f + deltaMax / 2f) / deltaMax; + float deltaG = ((varMax - varG) / 6f + deltaMax / 2f) / deltaMax; + float deltaB = ((varMax - varB) / 6f + deltaMax / 2f) / deltaMax; + + if (varR == varMax) + { + h = deltaB - deltaG; + } + else if (varG == varMax) + { + h = 1f / 3f + deltaR - deltaB; + } + else if (varB == varMax) + { + h = 2f / 3f + deltaG - deltaR; + } + + if (h < 0f) + { + h += 1f; + } + + if (h > 1f) + { + h -= 1f; + } + } + + return new HSLColor(h * 360f, s, l); + } + + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Helpers/OutlookGridGroupHelpers.cs b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Helpers/OutlookGridGroupHelpers.cs new file mode 100644 index 000000000..13182dd0b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/OutlookGrid/Helpers/OutlookGridGroupHelpers.cs @@ -0,0 +1,345 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Class containing functions for the IOutlookGridGroups + /// + public class OutlookGridGroupHelpers + { + /// + /// Gets the title for a specific datetime + /// + /// The DateTime + /// The text to display + public static string? GetDayText(DateTime date) + { + switch (GetDateCode(date)) + { + case "NODATE": + return KryptonManager.Strings.OutlookGridStrings.NoDate;// "Today"; + case "TODAY": + return KryptonManager.Strings.OutlookGridStrings.Today;// "Today"; + case "YESTERDAY": + return KryptonManager.Strings.OutlookGridStrings.Yesterday;//"Yesterday"; + case "TOMORROW": + return KryptonManager.Strings.OutlookGridStrings.Tomorrow;//"Tomorrow"; + case "Monday": + return KryptonManager.Strings.OutlookGridStrings.Monday; + case "Tuesday": + return KryptonManager.Strings.OutlookGridStrings.Tuesday; + case "Wednesday": + return KryptonManager.Strings.OutlookGridStrings.Wednesday; + case "Thursday": + return KryptonManager.Strings.OutlookGridStrings.Thursday; + case "Friday": + return KryptonManager.Strings.OutlookGridStrings.Friday; + case "Saturday": + return KryptonManager.Strings.OutlookGridStrings.Saturday; + case "Sunday": + return UppercaseFirst(date.ToString("dddd")); + case "NEXTWEEK": + return KryptonManager.Strings.OutlookGridStrings.NextWeek;//"Next Week"; + case "INTWOWEEKS": //dans le deux semaines a venir + return KryptonManager.Strings.OutlookGridStrings.InTwoWeeks;//"In two weeks"; //dans le deux semaines a venir + case "INTHREEWEEKS": //dans les trois semaines à venir + return KryptonManager.Strings.OutlookGridStrings.InThreeWeeks;//"In three weeks"; //dans les trois semaines à venir + case "LATERDURINGTHISMONTH": //Plus tard au cours de ce mois + return KryptonManager.Strings.OutlookGridStrings.LaterDuringThisMonth;//"Later during this month"; //Plus tard au cours de ce mois + case "NEXTMONTH": //Prochain mois + return KryptonManager.Strings.OutlookGridStrings.NextMonth;//"Next month"; //Prochain mois + case "AFTERNEXTMONTH": //Au-delà du prochain mois + return KryptonManager.Strings.OutlookGridStrings.AfterNextMonth;//"After next month"; //Au-delà du prochain mois + case "PREVIOUSWEEK": + return KryptonManager.Strings.OutlookGridStrings.PreviousWeek;//"Previous Week"; + case "TWOWEEKSAGO": //Il y a deux semaines + return KryptonManager.Strings.OutlookGridStrings.TwoWeeksAgo;//"Two weeks ago"; //Il y a deux semaines + case "THREEWEEKSAGO": //Il y a trois semaines + return KryptonManager.Strings.OutlookGridStrings.ThreeWeeksAgo;//"Three weeks ago"; //Il y a deux semaines + case "EARLIERDURINGTHISMONTH": //Plus tôt durant ce mois + return KryptonManager.Strings.OutlookGridStrings.EarlierDuringThisMonth;//"Earlier during this month"; //Plus tot au cours de ce mois + case "PREVIOUSMONTH": //Mois précédent + return KryptonManager.Strings.OutlookGridStrings.PreviousMonth;//"Previous Month"; //Mois dernier + case "BEFOREPREVIOUSMONTH": //Mois dernier // no longer exist + return KryptonManager.Strings.OutlookGridStrings.BeforePreviousMonth;//"Before Previous Month"; //Avant le mois dernier + case "EARLIERTHISYEAR": //Mois dernier // no longer exist + return KryptonManager.Strings.OutlookGridStrings.EarlierDuringThisYear;//"Before Previous Month"; //Avant le mois dernier + case "PREVIOUSYEAR": //Mois dernier // no longer exist + return KryptonManager.Strings.OutlookGridStrings.PreviousYear;//"Before Previous Month"; //Avant le mois dernier + case "OLDER": //Mois dernier // no longer exist + return KryptonManager.Strings.OutlookGridStrings.Older;//"Before Previous Month"; //Avant le mois dernier + + default: + return date.Date.ToShortDateString(); + } + } + + /// + /// Gets the code according to a datetime + /// + /// The DateTime to analyze. + /// The associated code. + public static string GetDateCode(DateTime date) + { + if (date.Date == DateTime.MinValue)//Today + { + return "NODATE"; + } + else if (date.Date == DateTime.Now.Date)//Today + { + return "TODAY"; + } + else if (date.Date == DateTime.Now.AddDays(-1).Date) + { + return "YESTERDAY"; + } + else if (date.Date == DateTime.Now.AddDays(1).Date) + { + return "TOMORROW"; + } + else if (date.Date >= GetFirstDayOfWeek(DateTime.Now) && date.Date <= GetLastDayOfWeek(DateTime.Now)) + { + return date.Date.DayOfWeek.ToString();//"DAYOFWEEK"; + } + else if (date.Date > GetLastDayOfWeek(DateTime.Now) && date.Date <= GetLastDayOfWeek(DateTime.Now).AddDays(6)) + { + return "NEXTWEEK"; + } + else if (date.Date > GetLastDayOfWeek(DateTime.Now).AddDays(6) && date.Date <= GetLastDayOfWeek(DateTime.Now).AddDays(12)) + { + return "INTWOWEEKS"; //dans les deux semaines a venir + } + else if (date.Date > GetLastDayOfWeek(DateTime.Now).AddDays(12) && date.Date <= GetLastDayOfWeek(DateTime.Now).AddDays(18)) + { + return "INTHREEWEEKS"; //dans les trois semaines à venir + } + else if (date.Date > GetLastDayOfWeek(DateTime.Now).AddDays(18) && date.Date <= new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(-1))//AddDays(DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.Month)-1))) + { + return "LATERDURINGTHISMONTH"; //Plus tard au cours de ce mois + } + else if (date.Date > GetLastDayOfWeek(DateTime.Now).AddDays(18) && date.Date > new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(-1) && date.Date <= new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(2).AddDays(-1)) + { + return "NEXTMONTH"; //Prochain mois + } + else if (date.Date > GetLastDayOfWeek(DateTime.Now).AddDays(18) && date.Date > new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(2).AddDays(-1)) + { + return "AFTERNEXTMONTH"; //Au-delà du prochain mois + } + else if (date.Date < GetFirstDayOfWeek(DateTime.Now) && date.Date >= GetFirstDayOfWeek(DateTime.Now).AddDays(-7)) + { + return "PREVIOUSWEEK"; + } + else if (date.Date <= GetFirstDayOfWeek(DateTime.Now).AddDays(-7) && date.Date >= GetFirstDayOfWeek(DateTime.Now).AddDays(-14)) + { + return "TWOWEEKSAGO"; //Il y a deux semaines + } + else if (date.Date <= GetFirstDayOfWeek(DateTime.Now).AddDays(-14) && date.Date >= GetFirstDayOfWeek(DateTime.Now).AddDays(-21)) + { + return "THREEWEEKSAGO"; //Il y a trois semaines + } + else if (date.Date <= GetFirstDayOfWeek(DateTime.Now).AddDays(-21) && date.Date >= new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1)) + { + return "EARLIERDURINGTHISMONTH"; //Plus tôt durant ce mois + } + else if (date.Date <= GetFirstDayOfWeek(DateTime.Now).AddDays(-21) && date.Date >= new DateTime(DateTime.Now.Year, DateTime.Now.AddMonths(-1).Month, 1) && date.Date <= new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(-1)) + { + return "PREVIOUSMONTH"; //Mois précédent + } + //On simplifie les tests, il n'y a pas de raison de tout tester + else if (date.Date >= new DateTime(DateTime.Now.Year, 1, 1)) + { + return "EARLIERTHISYEAR"; //Plus tôt cet année + } + else if (date.Date >= new DateTime(DateTime.Now.Year - 1, 1, 1) && date.Date <= new DateTime(DateTime.Now.Year, 1, 1).AddDays(-1)) + { + return "PREVIOUSYEAR"; //L'année dernière + } + else if (date.Date <= new DateTime(DateTime.Now.Year - 1, 1, 1).AddDays(-1)) + { + return "OLDER"; //Older + } + else + { + return date.Date.ToShortDateString(); + } + } + + /// Gets the date code numeric. + /// The date. + /// + public static int GetDateCodeNumeric(DateTime date) + { + switch (GetDateCode(date)) + { + case "NODATE": + return int.MaxValue; + case "AFTERNEXTMONTH": //Au-delà du prochain mois + return 14; + case "NEXTMONTH": //Prochain mois + return 13; + case "LATERDURINGTHISMONTH": //Plus tard au cours de ce mois + return 12; + case "INTHREEWEEKS": //dans les trois semaines à venir + return 11; + case "INTWOWEEKS": //dans les deux semaines a venir + return 10; + case "NEXTWEEK": + return 9; + case "Sunday": + return 8; + case "Saturday": + return 7; + case "Friday": + return 6; + case "Thursday": + return 5; + case "Wednesday": + return 4; + case "Tuesday": + return 3; + case "Monday": + return 2; + case "TOMORROW": + return 1; + case "TODAY": + return 0; + case "YESTERDAY": + return -1; + case "PREVIOUSWEEK": + return -2; + case "TWOWEEKSAGO": //Il y a deux semaines + return -3; + case "THREEWEEKSAGO": //Il y a trois semaines + return -4; + case "EARLIERDURINGTHISMONTH": //Plus tôt durant ce mois + return -5; + case "PREVIOUSMONTH": //Mois précédent + return -6; + case "EARLIERTHISYEAR": //Plus tôt cet année + return -7; + case "PREVIOUSYEAR": //L'année dernière + return -8; + case "OLDER": //Older + return -9; + //case date.Date.ToShortDateString(): + default: + return int.MinValue; + } + } + + /// + /// Uppercase the first letter of the string + /// + /// The string. + /// The string with the first letter uppercased. + private static string UppercaseFirst(string s) + { + if (string.IsNullOrEmpty(s)) + { + return string.Empty; + } + char[] a = s.ToCharArray(); + a[0] = char.ToUpper(a[0]); + return new string(a); + } + + /// + /// Returns the first day of the week that the specified date is in using the current culture. + /// + /// The date to analyse + /// The first day of week. + public static DateTime GetFirstDayOfWeek(DateTime dayInWeek) + { + CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture; + return GetFirstDayOfWeek(dayInWeek, defaultCultureInfo); + } + + /// + /// Returns the last day of the week that the specified date is in using the current culture. + /// + /// The date to analyse + /// The last day of week. + public static DateTime GetLastDayOfWeek(DateTime dayInWeek) + { + CultureInfo defaultCultureInfo = CultureInfo.CurrentCulture; + return GetFirstDayOfWeek(dayInWeek, defaultCultureInfo).AddDays(6); + } + + /// + /// Returns the first day of the week that the specified date is in. + /// + /// The date to analyse + /// The CultureInfo + /// The first day of week. + public static DateTime GetFirstDayOfWeek(DateTime dayInWeek, CultureInfo cultureInfo) + { + DayOfWeek firstDay = cultureInfo.DateTimeFormat.FirstDayOfWeek; + DateTime firstDayInWeek = dayInWeek.Date; + int difference = (int)dayInWeek.DayOfWeek - (int)firstDay; + difference = (7 + difference) % 7; + return dayInWeek.AddDays(-difference).Date; + } + + /// + /// Gets the user-friendly and localized text of quarter + /// + /// + /// + public static string GetQuarterAsString(DateTime dateTime) + { + return GetQuarter(dateTime) switch + { + 1 => KryptonManager.Strings.OutlookGridStrings.QuarterOne, + 2 => KryptonManager.Strings.OutlookGridStrings.QuarterTwo, + 3 => KryptonManager.Strings.OutlookGridStrings.QuarterThree, + 4 => KryptonManager.Strings.OutlookGridStrings.QuarterFour, + _ => "" + }; + } + + /// + /// Gets the quarter according to the month. + /// + /// The date DateTime + /// The quarter number. + public static int GetQuarter(DateTime dateTime) + { + return dateTime.Month switch + { + <= 3 => 1, + <= 6 => 2, + <= 9 => 3, + _ => 4 + }; + } + + /// + /// Returns a fully qualified type name without the version, culture, or token + /// + /// + /// + public static string SimpleQualifiedName(Type t) + { + return $"{t.FullName}, {t.Assembly.GetName().Name}"; + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/PlatformInvoke.cs b/Source/Krypton Components/Krypton.Toolkit/General/PlatformInvoke.cs index e90f73147..51c09786f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/PlatformInvoke.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/PlatformInvoke.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,9 +18,6 @@ // ReSharper disable ArrangeTypeMemberModifiers // ReSharper disable BuiltInTypeReferenceStyle // ReSharper disable ClassNeverInstantiated.Global - -using Microsoft.Win32.SafeHandles; - // ReSharper disable CommentTypo // ReSharper disable UnusedType.Local // ReSharper disable MemberHidesStaticFromOuterClass @@ -31,6 +28,9 @@ #pragma warning disable 649 +// Note: DO NOT REMOVE!!! +using Microsoft.Win32.SafeHandles; + namespace Krypton.Toolkit { @@ -286,7 +286,7 @@ public enum DeviceCap internal enum BOOL : int { FALSE = 0, - TRUE = 1, + TRUE = 1 } internal enum CBN_ @@ -2279,7 +2279,7 @@ public const int // CPL_LAUNCHED = USER + 0x1001, - OCM_CTLCOLOR = 0x2019, + OCM_CTLCOLOR = 0x2019, // if ( msg.Msg == PI.WM_.OCM_NOTIFY ) //{ // PI.NMHEADER h2 = (PI.NMHEADER)m.GetLParam(typeof(PI.NMHEADER)); @@ -3251,7 +3251,7 @@ internal static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, [DllImport(Libraries.User32, CharSet = CharSet.Auto)] [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] - internal static extern void AdjustWindowRectEx(ref RECT rect, int dwStyle, bool hasMenu, int dwExSytle); + internal static extern void AdjustWindowRectEx(ref RECT rect, uint dwStyle, bool hasMenu, int dwExSytle); [DllImport(Libraries.User32, CharSet = CharSet.Auto)] [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] @@ -3667,9 +3667,9 @@ public enum DWMNCRENDERINGPOLICY : uint // Values designating how Flip3D treats a given window. private enum DWMFLIP3DWINDOWPOLICY : uint { - Default, // Hide or include the window in Flip3D based on window style and visibility. - ExcludeBelow, // Display the window under Flip3D and disabled. - ExcludeAbove, // Display the window above Flip3D and enabled. + Default, // Hide or include the window in Flip3D based on window style and visibility. + ExcludeBelow, // Display the window under Flip3D and disabled. + ExcludeAbove // Display the window above Flip3D and enabled. } [StructLayout(LayoutKind.Sequential)] @@ -4093,7 +4093,7 @@ public enum CDN_ : uint SHAREVIOLATION = (FIRST - 0x0003), // -604 HELP = (FIRST - 0x0004), FILEOK = (FIRST - 0x0005), // -606 - TYPECHANGE = (FIRST - 0x0006), + TYPECHANGE = (FIRST - 0x0006) } #endregion @@ -4556,8 +4556,53 @@ internal struct TITLEBARINFOEX public RECT rcHelpButton; public RECT rcCloseButton; } + + #region For Acrylic + + /* + // The following code comes from https://stackoverflow.com/questions/56481230/how-to-create-windows-10-acrylic-transparency-effect-in-winform-c-sharp + // Discovered via: + // https://withinrafael.com/2015/07/08/adding-the-aero-glass-blur-to-your-windows-10-apps/ + // https://github.com/riverar/sample-win32-acrylicblur/blob/917adc277c7258307799327d12262ebd47fd0308/MainWindow.xaml.cs + + [DllImport(Libraries.User32)] + public static extern int SetWindowCompositionAttribute(HandleRef hWnd, IntPtr WindowCompositionAttributeData data); + + public IntPtr struct WindowCompositionAttributeData + { + public WCA Attribute; + public void* Data; + public int DataLength; + } + + public enum WCA + { + ACCENT_POLICY = 19 + } + + public enum ACCENT + { + DISABLED = 0, + ENABLE_GRADIENT = 1, + ENABLE_TRANSPARENTGRADIENT = 2, + ENABLE_BLURBEHIND = 3, + ENABLE_ACRYLICBLURBEHIND = 4, + INVALID_STATE = 5 + } + + public struct AccentPolicy + { + public ACCENT AccentState; + public uint AccentFlags; + public uint GradientColor; + public uint AnimationId; + }*/ + + #endregion + #endregion } + internal static class BoolExtensions { public static bool IsTrue(this PI.BOOL b) => b != PI.BOOL.FALSE; diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/Enumerations.cs b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/Enumerations.cs index 54704b94a..ed1185466 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/Enumerations.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/Enumerations.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/HScrollSkin.cs b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/HScrollSkin.cs index b0a23d70e..1ab018d99 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/HScrollSkin.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/HScrollSkin.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ public class HScrollSkin : Panel private HScrollBar HSB; - private static PaletteBase _palette; + private static PaletteBase? _palette; private readonly PaletteRedirect _paletteRedirect; #endregion @@ -181,9 +181,11 @@ private void InitializeComponent() /// /// /// - public void scrollSkin_ControlAdded(object sender, ControlEventArgs e) + public void scrollSkin_ControlAdded(object? sender, ControlEventArgs e) { - if ((Controls.Count != 1) && (_win == null)) + if ( e is not null + && e.Control is not null + && Controls.Count != 1 && _win == null) { _win = e.Control; if (_win.GetType() == typeof(DataGridView) || (_win.GetType() == typeof(KryptonDataGridView))) @@ -218,19 +220,19 @@ public void scrollSkin_ControlAdded(object sender, ControlEventArgs e) /// /// /// - private void VScrollBar1_miScroll(object sender, ScrollEventArgs e) => PI.PostMessage(_win.Handle, PI.WM_.HSCROLL, (IntPtr)(PI.SB_.THUMBPOSITION + (0x10000 * VScrollBar1.Value)), IntPtr.Zero); + private void VScrollBar1_miScroll(object? sender, ScrollEventArgs e) => PI.PostMessage(_win.Handle, PI.WM_.HSCROLL, (IntPtr)(PI.SB_.THUMBPOSITION + (0x10000 * VScrollBar1.Value)), IntPtr.Zero); #endregion #region " Horizontal Scroll " - private void HScrollBar1_miScroll(object sender, ScrollEventArgs e) + private void HScrollBar1_miScroll(object? sender, ScrollEventArgs e) { if (_win.GetType() == typeof(ListView)) { var listView1 = (ListView)_win; var nIsAt = PI.GetScrollPos(listView1.Handle, PI.SB_.HORZ); - var nShouldBeAt = (int)e.NewValue; + var nShouldBeAt = e.NewValue; var pixelsToScroll = Convert.ToInt32(nShouldBeAt - nIsAt); @@ -315,9 +317,9 @@ private void HScrollBar1_miScroll(object sender, ScrollEventArgs e) #region " DGV Scrollbars VisibleChanged " - private void HorizontalScrollBar_VisibleChanged(object sender, EventArgs e) + private void HorizontalScrollBar_VisibleChanged(object? sender, EventArgs e) { - var hscroll = (HScrollBar)sender; + var hscroll = sender as HScrollBar ?? throw new ArgumentNullException(nameof(sender)); if (hscroll.Visible) { _HScrollBar1.Visible = true; @@ -328,9 +330,9 @@ private void HorizontalScrollBar_VisibleChanged(object sender, EventArgs e) } } - private void VerticalScrollBar_VisibleChanged(object sender, EventArgs e) + private void VerticalScrollBar_VisibleChanged(object? sender, EventArgs e) { - var vscroll = (VScrollBar)sender; + var vscroll = sender as VScrollBar ?? throw new ArgumentNullException(nameof(sender)); if (vscroll.Visible) { _VScrollBar1.Visible = true; @@ -345,12 +347,12 @@ private void VerticalScrollBar_VisibleChanged(object sender, EventArgs e) #region " DGV Scroll " - private void dgv_Scroll(object sender, ScrollEventArgs e) + private void dgv_Scroll(object? sender, ScrollEventArgs e) { - var dgv = (DataGridView)sender; + var dgv = sender as DataGridView ?? throw new ArgumentNullException(nameof(sender)); if (GetDGVScrollbar(ref dgv, out HSB)) { - if (HSB.Visible == true) + if (HSB.Visible) { HScrollBar1.Visible = true; SetDGVScrollBarValue(ref dgv, ref HSB); @@ -376,7 +378,7 @@ private void dgv_Scroll(object sender, ScrollEventArgs e) /// /// /// - private void win_Resize(object sender, EventArgs e) + private void win_Resize(object? sender, EventArgs e) { VScrollBar1.Size = new Size(0x12, _win.Height); //for the gap VScrollBar1.Left = _win.Right - 0x12; @@ -402,10 +404,10 @@ private void win_Resize(object sender, EventArgs e) /// protected override void WndProc(ref Message m) { - if (!DesignMode && !(!Parent.CanFocus | (_win == null))) + if (!DesignMode && !(!Parent!.CanFocus | (_win == null))) { - var wndStyle = PI.GetWindowLong(_win.Handle, PI.GWL_.STYLE); + var wndStyle = PI.GetWindowLong(_win!.Handle, PI.GWL_.STYLE); var hsVisible = (wndStyle & PI.WS_.HSCROLL) != 0; var vsVisible = (wndStyle & PI.WS_.VSCROLL) != 0; @@ -502,12 +504,12 @@ protected static ScrollBars GetVisibleScrollbars(Control ctl) var hsVisible = (wndStyle & PI.WS_.HSCROLL) != 0; var vsVisible = (wndStyle & PI.WS_.VSCROLL) != 0; - return hsVisible - ? vsVisible - ? ScrollBars.Both - : ScrollBars.Horizontal - : vsVisible - ? ScrollBars.Vertical + return hsVisible + ? vsVisible + ? ScrollBars.Both + : ScrollBars.Horizontal + : vsVisible + ? ScrollBars.Vertical : ScrollBars.None; } @@ -539,8 +541,8 @@ protected override void Dispose(bool disposing) #region ... Krypton ... - //Kripton Palette Events - private void OnGlobalPaletteChanged(object sender, EventArgs e) + //Krypton Palette Events + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { if (_palette != null) { @@ -558,8 +560,8 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e) Invalidate(); } - //Kripton Palette Events - private void OnPalettePaint(object sender, PaletteLayoutEventArgs e) => Invalidate(); + //Krypton Palette Events + private void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) => Invalidate(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/ScrollBarKryptonRenderer.cs b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/KryptonScrollBarRenderer.cs similarity index 74% rename from Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/ScrollBarKryptonRenderer.cs rename to Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/KryptonScrollBarRenderer.cs index 6271b6a09..08c99c1c4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/ScrollBarKryptonRenderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/KryptonScrollBarRenderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,103 +15,103 @@ namespace Krypton.Toolkit /// /// The scrollbar renderer class. /// - internal static class ScrollBarKryptonRenderer + internal static class KryptonScrollBarRenderer { - #region fields + #region Instance Fields /// /// The colors of the thumb in the 3 states. /// - private static readonly Color[,] thumbColours = new Color[3, 8]; + private static readonly Color[,] _thumbColors = new Color[3, 8]; /// /// The arrow colors in the three states. /// - private static readonly Color[,] arrowColours = new Color[3, 8]; + private static readonly Color[,] _arrowColors = new Color[3, 8]; /// /// The arrow border colors. /// - private static readonly Color[] arrowBorderColours = new Color[4]; + private static readonly Color[] _arrowBorderColors = new Color[4]; /// /// The background colors. /// - private static readonly Color[] backgroundColours = new Color[5]; + private static readonly Color[] _backgroundColors = new Color[5]; /// /// The track colors. /// - private static readonly Color[] trackColours = new Color[2]; + private static readonly Color[] _trackColors = new Color[2]; /// /// The Border colors. /// - public static Color[] borderColours = new Color[2]; + public static Color[] BorderColors = new Color[2]; /// /// The Grip colors. /// - public static Color[] gripColours = new Color[2]; + public static Color[] GripColors = new Color[2]; private static PaletteBase _palette; private static PaletteRedirect _paletteRedirect; #endregion - #region constructor + #region Identity /// - /// Initializes static members of the class. + /// Initializes static members of the class. /// - static ScrollBarKryptonRenderer() + static KryptonScrollBarRenderer() { - InitColours(); + InitColors(); } - public static void InitColours() + public static void InitColors() { // add Palette Handler - if (_palette != null) - { - _palette.PalettePaint += OnPalettePaint; - } + //if (_palette != null) + //{ + // _palette.PalettePaint += OnPalettePaint; + //} - KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; + //KryptonManager.GlobalPaletteChanged += OnGlobalPaletteChanged; _palette = KryptonManager.CurrentGlobalPalette; _paletteRedirect = new PaletteRedirect(_palette); //Init Colors // hot state - thumbColours[0, 0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(96, 111, 148); // border color - thumbColours[0, 1] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(232, 233, 233); // left/top start color - thumbColours[0, 2] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(230, 233, 241); // left/top end color - thumbColours[0, 3] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(233, 237, 242); // right/bottom line color - thumbColours[0, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(209, 218, 228); // right/bottom start color - thumbColours[0, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(218, 227, 235); // right/bottom end color - thumbColours[0, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(190, 202, 219); // right/bottom middle color - thumbColours[0, 7] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(96, 11, 148); // left/top line color + _thumbColors[0, 0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(96, 111, 148); // border color + _thumbColors[0, 1] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(232, 233, 233); // left/top start color + _thumbColors[0, 2] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(230, 233, 241); // left/top end color + _thumbColors[0, 3] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(233, 237, 242); // right/bottom line color + _thumbColors[0, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(209, 218, 228); // right/bottom start color + _thumbColors[0, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(218, 227, 235); // right/bottom end color + _thumbColors[0, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(190, 202, 219); // right/bottom middle color + _thumbColors[0, 7] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(96, 11, 148); // left/top line color // over state - thumbColours[1, 0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonCluster, PaletteState.Normal);//Color.FromArgb(60, 110, 176); - thumbColours[1, 1] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(187, 204, 228); - thumbColours[1, 2] = _palette.GetBackColor1(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(205, 227, 254); - thumbColours[1, 3] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(252, 253, 255); - thumbColours[1, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(170, 207, 247); - thumbColours[1, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonAlternate, PaletteState.Normal); //Color.FromArgb(219, 232, 251); - thumbColours[1, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(190, 202, 219); - thumbColours[1, 7] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(233, 233, 235); + _thumbColors[1, 0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonCluster, PaletteState.Normal);//Color.FromArgb(60, 110, 176); + _thumbColors[1, 1] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(187, 204, 228); + _thumbColors[1, 2] = _palette.GetBackColor1(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(205, 227, 254); + _thumbColors[1, 3] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(252, 253, 255); + _thumbColors[1, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(170, 207, 247); + _thumbColors[1, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonAlternate, PaletteState.Normal); //Color.FromArgb(219, 232, 251); + _thumbColors[1, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(190, 202, 219); + _thumbColors[1, 7] = _palette.GetBackColor2(PaletteBackStyle.ButtonCluster, PaletteState.Normal); //Color.FromArgb(233, 233, 235); // pressed state - thumbColours[2, 0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.CheckedNormal);//Color.FromArgb(23, 73, 138); - thumbColours[2, 1] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(154, 184, 225); - thumbColours[2, 2] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); // Color.FromArgb(166, 202, 250); - thumbColours[2, 3] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal);//Color.FromArgb(221, 235, 251); - thumbColours[2, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(110, 166, 240); - thumbColours[2, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(194, 218, 248); - thumbColours[2, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(190, 202, 219); - thumbColours[2, 7] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(194, 211, 231); + _thumbColors[2, 0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.CheckedNormal);//Color.FromArgb(23, 73, 138); + _thumbColors[2, 1] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(154, 184, 225); + _thumbColors[2, 2] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); // Color.FromArgb(166, 202, 250); + _thumbColors[2, 3] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal);//Color.FromArgb(221, 235, 251); + _thumbColors[2, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(110, 166, 240); + _thumbColors[2, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(194, 218, 248); + _thumbColors[2, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(190, 202, 219); + _thumbColors[2, 7] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.CheckedNormal); //Color.FromArgb(194, 211, 231); /* picture of colors and indices *(0,0) @@ -135,64 +135,64 @@ public static void InitColours() */ // hot state - arrowColours[0, 0] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal);//Color.FromArgb(223, 236, 252); - arrowColours[0, 1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(207, 225, 248); - arrowColours[0, 2] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(245, 249, 255); - arrowColours[0, 3] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(237, 244, 252); - arrowColours[0, 4] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(244, 249, 255); - arrowColours[0, 5] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(244, 249, 255); - arrowColours[0, 6] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(251, 253, 255); - arrowColours[0, 7] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(251, 253, 255); + _arrowColors[0, 0] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal);//Color.FromArgb(223, 236, 252); + _arrowColors[0, 1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(207, 225, 248); + _arrowColors[0, 2] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(245, 249, 255); + _arrowColors[0, 3] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(237, 244, 252); + _arrowColors[0, 4] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(244, 249, 255); + _arrowColors[0, 5] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(244, 249, 255); + _arrowColors[0, 6] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(251, 253, 255); + _arrowColors[0, 7] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(251, 253, 255); // over state - arrowColours[1, 0] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal);//Color.FromArgb(205, 222, 243); //Colore bottone sul tracking - arrowColours[1, 1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(186, 208, 235); - arrowColours[1, 2] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(238, 244, 252); - arrowColours[1, 3] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(229, 237, 247); - arrowColours[1, 4] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(223, 234, 247); - arrowColours[1, 5] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(241, 246, 254); - arrowColours[1, 6] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(243, 247, 252); - arrowColours[1, 7] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(250, 252, 255); + _arrowColors[1, 0] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal);//Color.FromArgb(205, 222, 243); //Colore bottone sul tracking + _arrowColors[1, 1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(186, 208, 235); + _arrowColors[1, 2] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(238, 244, 252); + _arrowColors[1, 3] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(229, 237, 247); + _arrowColors[1, 4] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(223, 234, 247); + _arrowColors[1, 5] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(241, 246, 254); + _arrowColors[1, 6] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(243, 247, 252); + _arrowColors[1, 7] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(250, 252, 255); // pressed state - arrowColours[2, 0] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking);//Color.FromArgb(215, 220, 225); - arrowColours[2, 1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(195, 202, 210); - arrowColours[2, 2] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(242, 244, 245); - arrowColours[2, 3] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(232, 235, 238); - arrowColours[2, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(226, 228, 230); - arrowColours[2, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(230, 233, 236); - arrowColours[2, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(244, 245, 245); - arrowColours[2, 7] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(245, 247, 248); + _arrowColors[2, 0] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking);//Color.FromArgb(215, 220, 225); + _arrowColors[2, 1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(195, 202, 210); + _arrowColors[2, 2] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(242, 244, 245); + _arrowColors[2, 3] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(232, 235, 238); + _arrowColors[2, 4] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(226, 228, 230); + _arrowColors[2, 5] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(230, 233, 236); + _arrowColors[2, 6] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(244, 245, 245); + _arrowColors[2, 7] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Tracking); //Color.FromArgb(245, 247, 248); // background colors - backgroundColours[0] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(235, 237, 239); - backgroundColours[1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(252, 252, 252); - backgroundColours[2] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(247, 247, 247); - backgroundColours[3] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(238, 238, 238); - backgroundColours[4] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(240, 240, 240); + _backgroundColors[0] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(235, 237, 239); + _backgroundColors[1] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(252, 252, 252); + _backgroundColors[2] = _palette.GetBackColor1(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(247, 247, 247); + _backgroundColors[3] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(238, 238, 238); + _backgroundColors[4] = _palette.GetBackColor2(PaletteBackStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(240, 240, 240); // track colors - trackColours[0] = _palette.ColorTable.StatusStripGradientEnd; //Color.FromArgb(204, 204, 204); - trackColours[1] = _palette.ColorTable.StatusStripGradientBegin; //Color.FromArgb(220, 220, 220); + _trackColors[0] = _palette.ColorTable.StatusStripGradientEnd; //Color.FromArgb(204, 204, 204); + _trackColors[1] = _palette.ColorTable.StatusStripGradientBegin; //Color.FromArgb(220, 220, 220); // arrow border colors - arrowBorderColours[0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(135, 146, 160); - arrowBorderColours[1] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(140, 151, 165); - arrowBorderColours[2] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(128, 139, 153); - arrowBorderColours[3] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(99, 110, 125); + _arrowBorderColors[0] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(135, 146, 160); + _arrowBorderColors[1] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(140, 151, 165); + _arrowBorderColors[2] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(128, 139, 153); + _arrowBorderColors[3] = _palette.GetBorderColor1(PaletteBorderStyle.ButtonStandalone, PaletteState.Normal); //Color.FromArgb(99, 110, 125); //Border colors - borderColours[0] = _palette.GetBorderColor1(PaletteBorderStyle.InputControlCustom1, PaletteState.Normal); - borderColours[1] = _palette.GetBorderColor1(PaletteBorderStyle.InputControlCustom1, PaletteState.Normal); ; + BorderColors[0] = _palette.GetBorderColor1(PaletteBorderStyle.InputControlCustom1, PaletteState.Normal); + BorderColors[1] = _palette.GetBorderColor1(PaletteBorderStyle.InputControlCustom1, PaletteState.Normal); //Grip colors - gripColours[0] = _palette.ColorTable.GripLight; - gripColours[1] = _palette.ColorTable.GripDark; + GripColors[0] = _palette.ColorTable.GripLight; + GripColors[1] = _palette.ColorTable.GripDark; } #endregion - #region methods + #region Implementation #region public methods @@ -328,14 +328,13 @@ public static void DrawThumbGrip( // adjust alpha channel of grip image using var attr = new ImageAttributes(); attr.SetColorMatrix( - new ColorMatrix(new[] - { - new[] { 1F, 0, 0, 0, 0 }, - new[] { 0, 1F, 0, 0, 0 }, - new[] { 0, 0, 1F, 0, 0 }, - new[] { 0, 0, 0, .8F, 0 }, - new[] { 0, 0, 0, 0, 1F } - }), + new ColorMatrix([ + [1F, 0, 0, 0, 0], + [0, 1F, 0, 0, 0], + [0, 0, 1F, 0, 0], + [0, 0, 0, .8F, 0], + [0, 0, 0, 0, 1F] + ]), ColorMatrixFlag.Default, ColorAdjustType.Bitmap ); @@ -353,14 +352,14 @@ public static Bitmap GetGripNormalBitmap() btm.SetResolution(72, 72); Graphics g = Graphics.FromImage(btm); - g.DrawLine(new Pen(gripColours[1]), new Point(0, 0), new Point(8, 0));//dark - g.DrawLine(new Pen(gripColours[0]), new Point(1, 1), new Point(7, 1));//light - g.DrawLine(new Pen(gripColours[1]), new Point(0, 2), new Point(7, 2));//dark - g.DrawLine(new Pen(gripColours[0]), new Point(1, 3), new Point(7, 3));//light - g.DrawLine(new Pen(gripColours[1]), new Point(0, 4), new Point(7, 4));//dark - g.DrawLine(new Pen(gripColours[0]), new Point(1, 5), new Point(7, 5));//light - g.DrawLine(new Pen(gripColours[1]), new Point(0, 6), new Point(8, 6));//dark - g.DrawLine(new Pen(gripColours[0]), new Point(1, 7), new Point(7, 7));//light + g.DrawLine(new Pen(GripColors[1]), new Point(0, 0), new Point(8, 0));//dark + g.DrawLine(new Pen(GripColors[0]), new Point(1, 1), new Point(7, 1));//light + g.DrawLine(new Pen(GripColors[1]), new Point(0, 2), new Point(7, 2));//dark + g.DrawLine(new Pen(GripColors[0]), new Point(1, 3), new Point(7, 3));//light + g.DrawLine(new Pen(GripColors[1]), new Point(0, 4), new Point(7, 4));//dark + g.DrawLine(new Pen(GripColors[0]), new Point(1, 5), new Point(7, 5));//light + g.DrawLine(new Pen(GripColors[1]), new Point(0, 6), new Point(8, 6));//dark + g.DrawLine(new Pen(GripColors[0]), new Point(1, 7), new Point(7, 7));//light return btm; } @@ -374,14 +373,14 @@ public static Image GetScrollBarArrowDownBitmap() img.SetResolution(72, 72); Graphics g = Graphics.FromImage(img); - g.DrawLine(new Pen(gripColours[1]), new Point(0, 0), new Point(8, 0));//dark--------- - g.DrawLine(new Pen(gripColours[1]), new Point(1, 1), new Point(7, 1));//dark ------- - g.DrawLine(new Pen(gripColours[1]), new Point(2, 2), new Point(6, 2));//dark ----- - g.DrawLine(new Pen(gripColours[1]), new Point(3, 3), new Point(5, 3));//dark --- - g.DrawLine(new Pen(gripColours[1]), new Point(4, 0), new Point(4, 4));//dark - + g.DrawLine(new Pen(GripColors[1]), new Point(0, 0), new Point(8, 0));//dark--------- + g.DrawLine(new Pen(GripColors[1]), new Point(1, 1), new Point(7, 1));//dark ------- + g.DrawLine(new Pen(GripColors[1]), new Point(2, 2), new Point(6, 2));//dark ----- + g.DrawLine(new Pen(GripColors[1]), new Point(3, 3), new Point(5, 3));//dark --- + g.DrawLine(new Pen(GripColors[1]), new Point(4, 0), new Point(4, 4));//dark - - g.DrawLine(new Pen(gripColours[0]), new Point(3, 0), new Point(5, 0));//light - g.DrawLine(new Pen(gripColours[0]), new Point(4, 0), new Point(4, 1));//light + g.DrawLine(new Pen(GripColors[0]), new Point(3, 0), new Point(5, 0));//light + g.DrawLine(new Pen(GripColors[0]), new Point(4, 0), new Point(4, 1));//light return img; } @@ -435,13 +434,13 @@ public static void DrawArrowButton( /// The rectangle in which to paint. private static void DrawBackgroundVertical(Graphics g, Rectangle rect) { - using (var p = new Pen(backgroundColours[0])) + using (var p = new Pen(_backgroundColors[0])) { g.DrawLine(p, rect.Left + 1, rect.Top + 1, rect.Left + 1, rect.Bottom - 1); g.DrawLine(p, rect.Right - 2, rect.Top + 1, rect.Right - 2, rect.Bottom - 1); } - using (var p = new Pen(backgroundColours[1])) + using (var p = new Pen(_backgroundColors[1])) { g.DrawLine(p, rect.Left + 2, rect.Top + 1, rect.Left + 2, rect.Bottom - 1); } @@ -450,14 +449,14 @@ private static void DrawBackgroundVertical(Graphics g, Rectangle rect) var secondRect = new Rectangle(firstRect.Right - 1, firstRect.Top, 7, firstRect.Height); - using (var brush = new LinearGradientBrush(firstRect, backgroundColours[2], - backgroundColours[3], LinearGradientMode.Horizontal)) + using (var brush = new LinearGradientBrush(firstRect, _backgroundColors[2], + _backgroundColors[3], LinearGradientMode.Horizontal)) { g.FillRectangle(brush, firstRect); } - using (var brush = new LinearGradientBrush(secondRect, backgroundColours[3], - backgroundColours[4], LinearGradientMode.Horizontal)) + using (var brush = new LinearGradientBrush(secondRect, _backgroundColors[3], + _backgroundColors[4], LinearGradientMode.Horizontal)) { g.FillRectangle(brush, secondRect); } @@ -470,13 +469,13 @@ private static void DrawBackgroundVertical(Graphics g, Rectangle rect) /// The rectangle in which to paint. private static void DrawBackgroundHorizontal(Graphics g, Rectangle rect) { - using (var p = new Pen(backgroundColours[0])) + using (var p = new Pen(_backgroundColors[0])) { g.DrawLine(p, rect.Left + 1, rect.Top + 1, rect.Right - 1, rect.Top + 1); g.DrawLine(p, rect.Left + 1, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 2); } - using (var p = new Pen(backgroundColours[1])) + using (var p = new Pen(_backgroundColors[1])) { g.DrawLine(p, rect.Left + 1, rect.Top + 2, rect.Right - 1, rect.Top + 2); } @@ -485,14 +484,14 @@ private static void DrawBackgroundHorizontal(Graphics g, Rectangle rect) var secondRect = new Rectangle(firstRect.Left, firstRect.Bottom - 1, firstRect.Width, 7); - using (var brush = new LinearGradientBrush(firstRect, backgroundColours[2], - backgroundColours[3], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(firstRect, _backgroundColors[2], + _backgroundColors[3], LinearGradientMode.Vertical)) { g.FillRectangle(brush, firstRect); } - using (var brush = new LinearGradientBrush(secondRect, backgroundColours[3], - backgroundColours[4], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(secondRect, _backgroundColors[3], + _backgroundColors[4], LinearGradientMode.Vertical)) { g.FillRectangle(brush, secondRect); } @@ -507,7 +506,7 @@ private static void DrawTrackVertical(Graphics g, Rectangle rect) { var innerRect = new Rectangle(rect.Left + 1, rect.Top, 15, rect.Height); - using var brush = new LinearGradientBrush(innerRect, trackColours[0], trackColours[1], + using var brush = new LinearGradientBrush(innerRect, _trackColors[0], _trackColors[1], LinearGradientMode.Horizontal); g.FillRectangle(brush, innerRect); } @@ -521,7 +520,7 @@ private static void DrawTrackHorizontal(Graphics g, Rectangle rect) { var innerRect = new Rectangle(rect.Left, rect.Top + 1, rect.Width, 15); - using var brush = new LinearGradientBrush(innerRect, trackColours[0], trackColours[1], + using var brush = new LinearGradientBrush(innerRect, _trackColors[0], _trackColors[1], LinearGradientMode.Vertical); g.FillRectangle(brush, innerRect); } @@ -588,8 +587,8 @@ private static void DrawThumbVertical( r.Height++; // draw left gradient - using (var brush = new LinearGradientBrush(r, thumbColours[index, 1], - thumbColours[index, 2], LinearGradientMode.Horizontal)) + using (var brush = new LinearGradientBrush(r, _thumbColors[index, 1], + _thumbColors[index, 2], LinearGradientMode.Horizontal)) { g.FillRectangle(brush, r); } @@ -599,54 +598,51 @@ private static void DrawThumbVertical( // draw right gradient if (index == 0) { - using var brush = new LinearGradientBrush(r, thumbColours[index, 4], - thumbColours[index, 5], LinearGradientMode.Horizontal); + using var brush = new LinearGradientBrush(r, _thumbColors[index, 4], + _thumbColors[index, 5], LinearGradientMode.Horizontal); brush.InterpolationColors = new ColorBlend(3) { - Colors = new[] - { - thumbColours[index, 4], - thumbColours[index, 6], - thumbColours[index, 5] - }, - Positions = new[] { 0f, .5f, 1f } + Colors = + [ + _thumbColors[index, 4], + _thumbColors[index, 6], + _thumbColors[index, 5] + ], + Positions = [0f, .5f, 1f] }; g.FillRectangle(brush, r); } else { - using (var brush = new LinearGradientBrush(r, thumbColours[index, 4], - thumbColours[index, 5], LinearGradientMode.Horizontal)) + using (var brush = new LinearGradientBrush(r, _thumbColors[index, 4], + _thumbColors[index, 5], LinearGradientMode.Horizontal)) { g.FillRectangle(brush, r); } // draw left line - using (var p = new Pen(thumbColours[index, 7])) + using (var p = new Pen(_thumbColors[index, 7])) { g.DrawLine(p, innerRect.X, innerRect.Y, innerRect.X, innerRect.Bottom); } } // draw right line - using (var p = new Pen(thumbColours[index, 3])) + using (var p = new Pen(_thumbColors[index, 3])) { g.DrawLine(p, innerRect.Right, innerRect.Y, innerRect.Right, innerRect.Bottom); } - g.SmoothingMode = SmoothingMode.AntiAlias; - + using var gh = new GraphicsHint(g, PaletteGraphicsHint.AntiAlias); // draw border - using (var p = new Pen(thumbColours[index, 0])) + using (var p = new Pen(_thumbColors[index, 0])) { using (GraphicsPath path = CreateRoundPath(rect, 2f, 2f)) { g.DrawPath(p, path); } } - - g.SmoothingMode = SmoothingMode.None; } /// @@ -675,8 +671,8 @@ private static void DrawThumbHorizontal( r.Width++; // draw left gradient - using (var brush = new LinearGradientBrush(r, thumbColours[index, 1], - thumbColours[index, 2], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(r, _thumbColors[index, 1], + _thumbColors[index, 2], LinearGradientMode.Vertical)) { g.FillRectangle(brush, r); } @@ -686,54 +682,51 @@ private static void DrawThumbHorizontal( // draw right gradient if (index == 0) { - using var brush = new LinearGradientBrush(r, thumbColours[index, 4], - thumbColours[index, 5], LinearGradientMode.Vertical); + using var brush = new LinearGradientBrush(r, _thumbColors[index, 4], + _thumbColors[index, 5], LinearGradientMode.Vertical); brush.InterpolationColors = new ColorBlend(3) { - Colors = new[] - { - thumbColours[index, 4], - thumbColours[index, 6], - thumbColours[index, 5] - }, - Positions = new[] { 0f, .5f, 1f } + Colors = + [ + _thumbColors[index, 4], + _thumbColors[index, 6], + _thumbColors[index, 5] + ], + Positions = [0f, .5f, 1f] }; g.FillRectangle(brush, r); } else { - using (var brush = new LinearGradientBrush(r, thumbColours[index, 4], - thumbColours[index, 5], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(r, _thumbColors[index, 4], + _thumbColors[index, 5], LinearGradientMode.Vertical)) { g.FillRectangle(brush, r); } // draw left line - using (var p = new Pen(thumbColours[index, 7])) + using (var p = new Pen(_thumbColors[index, 7])) { g.DrawLine(p, innerRect.X, innerRect.Y, innerRect.Right, innerRect.Y); } } // draw right line - using (var p = new Pen(thumbColours[index, 3])) + using (var p = new Pen(_thumbColors[index, 3])) { g.DrawLine(p, innerRect.X, innerRect.Bottom, innerRect.Right, innerRect.Bottom); } - g.SmoothingMode = SmoothingMode.AntiAlias; - + using var gh = new GraphicsHint(g, PaletteGraphicsHint.AntiAlias); // draw border - using (var p = new Pen(thumbColours[index, 0])) + using (var p = new Pen(_thumbColors[index, 0])) { using (GraphicsPath path = CreateRoundPath(rect, 2f, 2f)) { g.DrawPath(p, path); } } - - g.SmoothingMode = SmoothingMode.None; } /// @@ -815,8 +808,8 @@ private static Image GetArrowDownButtonImage( if (index != -1) { - using (Pen p1 = new Pen(arrowBorderColours[0]), - p2 = new Pen(arrowBorderColours[1])) + using (Pen p1 = new Pen(_arrowBorderColors[0]), + p2 = new Pen(_arrowBorderColors[1])) { g.DrawLine(p1, rect.X, rect.Y, rect.Right - 1, rect.Y); g.DrawLine(p2, rect.X, rect.Bottom - 1, rect.Right - 1, rect.Bottom - 1); @@ -824,16 +817,18 @@ private static Image GetArrowDownButtonImage( rect.Inflate(0, -1); - using (var brush = new LinearGradientBrush(rect, arrowBorderColours[2], - arrowBorderColours[1], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(rect, _arrowBorderColors[2], + _arrowBorderColors[1], LinearGradientMode.Vertical)) { var blend = new ColorBlend(3) { - Positions = new[] { 0f, .5f, 1f }, - Colors = new[] { - arrowBorderColours[2], - arrowBorderColours[3], - arrowBorderColours[0] } + Positions = [0f, .5f, 1f], + Colors = + [ + _arrowBorderColors[2], + _arrowBorderColors[3], + _arrowBorderColors[0] + ] }; brush.InterpolationColors = blend; @@ -852,8 +847,8 @@ private static Image GetArrowDownButtonImage( upper.Y++; upper.Height = 7; - using (var brush = new LinearGradientBrush(upper, arrowColours[index, 2], - arrowColours[index, 3], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(upper, _arrowColors[index, 2], + _arrowColors[index, 3], LinearGradientMode.Vertical)) { g.FillRectangle(brush, upper); } @@ -861,8 +856,8 @@ private static Image GetArrowDownButtonImage( upper.Inflate(-1, 0); upper.Height = 6; - using (var brush = new LinearGradientBrush(upper, arrowColours[index, 0], - arrowColours[index, 1], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(upper, _arrowColors[index, 0], + _arrowColors[index, 1], LinearGradientMode.Vertical)) { g.FillRectangle(brush, upper); } @@ -872,16 +867,16 @@ private static Image GetArrowDownButtonImage( lower.Y = 8; lower.Height = 8; - using (var brush = new LinearGradientBrush(lower, arrowColours[index, 6], - arrowColours[index, 7], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(lower, _arrowColors[index, 6], + _arrowColors[index, 7], LinearGradientMode.Vertical)) { g.FillRectangle(brush, lower); } lower.Inflate(-1, 0); - using (var brush = new LinearGradientBrush(lower, arrowColours[index, 4], - arrowColours[index, 5], LinearGradientMode.Vertical)) + using (var brush = new LinearGradientBrush(lower, _arrowColors[index, 4], + _arrowColors[index, 5], LinearGradientMode.Vertical)) { g.FillRectangle(brush, lower); } @@ -951,8 +946,8 @@ private static GraphicsPath CreateRoundPath( #region ... Krypton ... - - //Kripton Palette Events + /* + //Krypton Palette Events private static void OnGlobalPaletteChanged(object sender, EventArgs e) { if (_palette != null) @@ -968,17 +963,17 @@ private static void OnGlobalPaletteChanged(object sender, EventArgs e) _palette.PalettePaint += OnPalettePaint; //repaint with new values - InitColours(); + InitColors(); } //Invalidate(); } - //Kripton Palette Events + //Krypton Palette Events private static void OnPalettePaint(object sender, PaletteLayoutEventArgs e) { //Invalidate(); - } + }*/ #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/ScrollBarExtendedRenderer.cs b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/ScrollBarExtendedRenderer.cs index afe05589f..8fb995086 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/ScrollBarExtendedRenderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/ScrollBarExtendedRenderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -328,14 +328,13 @@ public static void DrawThumbGrip( // adjust alpha channel of grip image using var attr = new ImageAttributes(); attr.SetColorMatrix( - new ColorMatrix(new[] - { - new[] { 1F, 0, 0, 0, 0 }, - new[] { 0, 1F, 0, 0, 0 }, - new[] { 0, 0, 1F, 0, 0 }, - new[] { 0, 0, 0, .8F, 0 }, - new[] { 0, 0, 0, 0, 1F } - }), + new ColorMatrix([ + [1F, 0, 0, 0, 0], + [0, 1F, 0, 0, 0], + [0, 0, 1F, 0, 0], + [0, 0, 0, .8F, 0], + [0, 0, 0, 0, 1F] + ]), ColorMatrixFlag.Default, ColorAdjustType.Bitmap ); @@ -593,13 +592,13 @@ private static void DrawThumbVertical(Graphics g, Rectangle rect, ScrollBarState thumbColours[index, 5], LinearGradientMode.Horizontal); brush.InterpolationColors = new ColorBlend(3) { - Colors = new[] - { + Colors = + [ thumbColours[index, 4], thumbColours[index, 6], thumbColours[index, 5] - }, - Positions = new[] { 0f, .5f, 1f } + ], + Positions = [0f, .5f, 1f] }; g.FillRectangle(brush, r); @@ -625,7 +624,7 @@ private static void DrawThumbVertical(Graphics g, Rectangle rect, ScrollBarState g.DrawLine(p, innerRect.Right, innerRect.Y, innerRect.Right, innerRect.Bottom); } - g.SmoothingMode = SmoothingMode.AntiAlias; + using var gh = new GraphicsHint(g, PaletteGraphicsHint.AntiAlias); // draw border using (var p = new Pen(thumbColours[index, 0])) @@ -635,8 +634,6 @@ private static void DrawThumbVertical(Graphics g, Rectangle rect, ScrollBarState g.DrawPath(p, path); } } - - g.SmoothingMode = SmoothingMode.None; } /// @@ -680,13 +677,13 @@ private static void DrawThumbHorizontal( thumbColours[index, 5], LinearGradientMode.Vertical); brush.InterpolationColors = new ColorBlend(3) { - Colors = new[] - { + Colors = + [ thumbColours[index, 4], thumbColours[index, 6], thumbColours[index, 5] - }, - Positions = new[] { 0f, .5f, 1f } + ], + Positions = [0f, .5f, 1f] }; g.FillRectangle(brush, r); @@ -712,7 +709,7 @@ private static void DrawThumbHorizontal( g.DrawLine(p, innerRect.X, innerRect.Bottom, innerRect.Right, innerRect.Bottom); } - g.SmoothingMode = SmoothingMode.AntiAlias; + using var gh = new GraphicsHint(g, PaletteGraphicsHint.AntiAlias); // draw border using (var p = new Pen(thumbColours[index, 0])) @@ -722,8 +719,6 @@ private static void DrawThumbHorizontal( g.DrawPath(p, path); } } - - g.SmoothingMode = SmoothingMode.None; } /// @@ -811,11 +806,13 @@ private static Image GetArrowDownButtonImage(ScrollBarArrowButtonState state) { var blend = new ColorBlend(3) { - Positions = new[] { 0f, .5f, 1f }, - Colors = new[] { + Positions = [0f, .5f, 1f], + Colors = + [ arrowBorderColours[2], arrowBorderColours[3], - arrowBorderColours[0] } + arrowBorderColours[0] + ] }; brush.InterpolationColors = blend; @@ -931,8 +928,8 @@ private static GraphicsPath CreateRoundPath(Rectangle r, float radiusX, float ra #region ... Krypton ... - //Kripton Palette Events - private static void OnGlobalPaletteChanged(object sender, EventArgs e) + //Krypton Palette Events + private static void OnGlobalPaletteChanged(object? sender, EventArgs e) { if (_palette != null) { @@ -953,8 +950,8 @@ private static void OnGlobalPaletteChanged(object sender, EventArgs e) //Invalidate(); } - //Kripton Palette Events - private static void OnPalettePaint(object sender, PaletteLayoutEventArgs e) + //Krypton Palette Events + private static void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) { //Invalidate(); } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/VScrollSkin.cs b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/VScrollSkin.cs index f717fdb0c..0989ddd2f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/VScrollSkin.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/VScrollSkin.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ public class VScrollSkin : Panel private VScrollBar VSB; private HScrollBar HSC; - private static PaletteBase _palette; + private static PaletteBase? _palette; private readonly PaletteRedirect _paletteRedirect; #endregion @@ -129,7 +129,7 @@ private void InitializeComponent() SuspendLayout(); //VScrollBar1.Anchor = AnchorStyles.Right | AnchorStyles.Bottom | AnchorStyles.Top; - VScrollBar1.Anchor = (AnchorStyles)(AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right); VScrollBar1.Dock = DockStyle.Right; + VScrollBar1.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Right); VScrollBar1.Dock = DockStyle.Right; VScrollBar1.LargeChange = 10; VScrollBar1.Location = new Point(0x91, 0); // (145,0) VScrollBar1.Maximum = 100; @@ -180,12 +180,15 @@ private void InitializeComponent() /// /// /// - private void scrollSkin_ControlAdded(object sender, ControlEventArgs e) + private void scrollSkin_ControlAdded(object? sender, ControlEventArgs e) { - if ((Controls.Count != 1) && (_win == null)) + if (e is not null + && e.Control is not null + && Controls.Count != 1 + && _win == null) { _win = e.Control; - if (_win.GetType() == typeof(DataGridView) || (_win.GetType() == typeof(KryptonDataGridView))) + if (_win!.GetType() == typeof(DataGridView) || (_win.GetType() == typeof(KryptonDataGridView))) { var dgv = (DataGridView)_win; dgv.Scroll += dgv_Scroll; @@ -215,7 +218,7 @@ private void scrollSkin_ControlAdded(object sender, ControlEventArgs e) /// /// /// - private void VScrollBar1_miScroll(object sender, ScrollEventArgs e) + private void VScrollBar1_miScroll(object? sender, ScrollEventArgs e) { if (_win.GetType() == typeof(ListView)) { @@ -339,7 +342,7 @@ private void VScrollBar1_miScroll(object sender, ScrollEventArgs e) #endregion #region " Horizontal Scroll " - private void HScrollBar1_miScroll(object sender, ScrollEventArgs e) + private void HScrollBar1_miScroll(object? sender, ScrollEventArgs e) { if (_win.GetType() == typeof(ListView)) { @@ -425,42 +428,28 @@ private void HScrollBar1_miScroll(object sender, ScrollEventArgs e) #region " DGV Scrollbar VisibleChanged " - private void VerticalScrollBar_VisibleChanged(object sender, EventArgs e) + private void VerticalScrollBar_VisibleChanged(object? sender, EventArgs e) { - var vscroll = (VScrollBar)sender; - if (vscroll.Visible) - { - _vScrollBar1.Visible = true; - } - else - { - _vScrollBar1.Visible = false; - } + var vscroll = sender as VScrollBar ?? throw new ArgumentNullException(nameof(sender)); + _vScrollBar1.Visible = vscroll.Visible; } - private void HorizontalScrollBar_VisibleChanged(object sender, EventArgs e) + private void HorizontalScrollBar_VisibleChanged(object? sender, EventArgs e) { - var hscroll = (HScrollBar)sender; - if (hscroll.Visible) - { - _hScrollBar1.Visible = true; - } - else - { - _hScrollBar1.Visible = false; - } + var hscroll = sender as HScrollBar ?? throw new ArgumentNullException(nameof(sender)); + _hScrollBar1.Visible = hscroll.Visible; } #endregion #region " DGV Scroll " - private void dgv_Scroll(object sender, ScrollEventArgs e) + private void dgv_Scroll(object? sender, ScrollEventArgs e) { var dgv = (DataGridView)_win; if (GetDGVScrollbar(ref dgv, out VSB)) { - if (VSB.Visible == true) + if (VSB.Visible) { VScrollBar1.Visible = true; SetDGVScrollBarValue(ref dgv, ref VSB); @@ -473,7 +462,7 @@ private void dgv_Scroll(object sender, ScrollEventArgs e) if (GetDGHScrollbar(ref dgv, out HSC)) { - if (HSC.Visible == true) + if (HSC.Visible) { HScrollBar1.Visible = true; SetDGVScrollBarValue(ref dgv, ref HSC); @@ -498,7 +487,7 @@ private void dgv_Scroll(object sender, ScrollEventArgs e) /// /// /// - private void win_Resize(object sender, EventArgs e) + private void win_Resize(object? sender, EventArgs e) { VScrollBar1.Size = new Size(0x12, _win.Height); //for the gap VScrollBar1.Left = _win.Right - 0x12; @@ -523,7 +512,7 @@ private void win_Resize(object sender, EventArgs e) /// protected override void WndProc(ref Message m) { - if (!DesignMode && !(!Parent.CanFocus | (_win == null))) + if (!DesignMode && !(!Parent!.CanFocus | (_win == null))) { //int listStyle = WIN32ScrollBars.GetWindowLong(_win.Handle, WIN32ScrollBars.GWL_STYLE); @@ -532,7 +521,7 @@ protected override void WndProc(ref Message m) //listStyle |= WIN32ScrollBars.WS_HSCROLL; //listStyle = WIN32ScrollBars.SetWindowLong(_win.Handle, WIN32ScrollBars.GWL_STYLE, listStyle); - var wndStyle = PI.GetWindowLong(_win.Handle, PI.GWL_.STYLE); + var wndStyle = PI.GetWindowLong(_win!.Handle, PI.GWL_.STYLE); var hsVisible = (wndStyle & PI.WS_.HSCROLL) != 0; var vsVisible = (wndStyle & PI.WS_.VSCROLL) != 0; @@ -694,12 +683,12 @@ protected static ScrollBars GetVisibleScrollbars(Control ctl) var hsVisible = (wndStyle & PI.WS_.HSCROLL) != 0; var vsVisible = (wndStyle & PI.WS_.VSCROLL) != 0; - return hsVisible - ? vsVisible - ? ScrollBars.Both - : ScrollBars.Horizontal - : vsVisible - ? ScrollBars.Vertical + return hsVisible + ? vsVisible + ? ScrollBars.Both + : ScrollBars.Horizontal + : vsVisible + ? ScrollBars.Vertical : ScrollBars.None; } @@ -731,8 +720,8 @@ protected override void Dispose(bool disposing) #region ... Krypton ... - //Kripton Palette Events - private void OnGlobalPaletteChanged(object sender, EventArgs e) + //Krypton Palette Events + private void OnGlobalPaletteChanged(object? sender, EventArgs e) { if (_palette != null) { @@ -750,8 +739,8 @@ private void OnGlobalPaletteChanged(object sender, EventArgs e) Invalidate(); } - //Kripton Palette Events - private void OnPalettePaint(object sender, PaletteLayoutEventArgs e) => Invalidate(); + //Krypton Palette Events + private void OnPalettePaint(object? sender, PaletteLayoutEventArgs e) => Invalidate(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/WIN32ScrollBars.cs b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/WIN32ScrollBars.cs index dedfc1d25..74e92258f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/WIN32ScrollBars.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Scroll Bars/WIN32ScrollBars.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/ShadowManager.cs b/Source/Krypton Components/Krypton.Toolkit/General/ShadowManager.cs index 446540e80..44600b8f2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/ShadowManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/ShadowManager.cs @@ -2,14 +2,12 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2020 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2020 - 2024. All rights reserved. * */ #endregion -// To get around bug in .NET 8, Preview 7 -// TODO: Remove when .NET 8 is GA -#if NET8_0 +#if NET8_0_OR_GREATER using MethodInvoker = System.Windows.Forms.MethodInvoker; #endif @@ -48,16 +46,17 @@ internal void WndProc(ref Message m) switch (m.Msg) { case PI.WM_.WINDOWPOSCHANGED: + { + PI.WINDOWPOS structure = (PI.WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(PI.WINDOWPOS))!; + var move = !structure.flags.HasFlag(PI.SWP_.NOSIZE | PI.SWP_.NOMOVE); + PositionShadowForms(move); + + if (!move) { - PI.WINDOWPOS structure = (PI.WINDOWPOS)Marshal.PtrToStructure(m.LParam, typeof(PI.WINDOWPOS)); - var move = !structure.flags.HasFlag(PI.SWP_.NOSIZE | PI.SWP_.NOMOVE); - PositionShadowForms(move); - if (!move) - { - ReCalcBrushes(); - } + ReCalcBrushes(); } - break; + } + break; } } @@ -86,7 +85,7 @@ private void InitialiseShadowForms() && _shadowValues.EnableShadows && _parentForm.Visible; - private void KryptonFormOnClosing(object sender, /*Cancel*/EventArgs e) + private void KryptonFormOnClosing(object? sender, /*Cancel*/EventArgs e) { _allowDrawing = false; FlashWindowExListener.FlashEvent -= OnFlashWindowExListenerOnFlashEvent; @@ -101,7 +100,7 @@ private void KryptonFormOnClosing(object sender, /*Cancel*/EventArgs e) } } - private void FormLoaded(object sender, EventArgs e) + private void FormLoaded(object? sender, EventArgs e) { _allowDrawing = (LicenseManager.UsageMode != LicenseUsageMode.Designtime) && (Process.GetCurrentProcess().ProcessName != @"devenv"); @@ -127,15 +126,15 @@ private void OnFlashWindowExListenerOnFlashEvent(Form form, bool flashing) } } - private void ShadowValues_ColourChanged(object sender, ColorEventArgs e) => ReCalcBrushes(); + private void ShadowValues_ColourChanged(object? sender, ColorEventArgs e) => ReCalcBrushes(); - private void ShadowValues_BlurDistanceChanged(object sender, EventArgs e) => ReCalcBrushes(); + private void ShadowValues_BlurDistanceChanged(object? sender, EventArgs e) => ReCalcBrushes(); - private void ShadowValues_OpacityChanged(object sender, EventArgs e) => ReCalcBrushes(); + private void ShadowValues_OpacityChanged(object? sender, EventArgs e) => ReCalcBrushes(); - private void ShadowValues_MarginsChanged(object sender, EventArgs e) => SetShadowFormsSizes(); + private void ShadowValues_MarginsChanged(object? sender, EventArgs e) => SetShadowFormsSizes(); - private void ShadowValues_EnableShadowsChanged(object sender, EventArgs e) + private void ShadowValues_EnableShadowsChanged(object? sender, EventArgs e) { if (!_allowDrawing || _shadowForms == null) @@ -232,7 +231,7 @@ private Bitmap DrawShadowBitmap(Rectangle clientRectangle) using (var pgb = new PathGradientBrush(gp) { CenterColor = _shadowValues.Colour, - SurroundColors = new[] { Color.Transparent }, + SurroundColors = [Color.Transparent], CenterPoint = new PointF(blurOffset, blurOffset) }) { @@ -420,7 +419,7 @@ private static IntPtr ShellProc(int code, IntPtr wParam, IntPtr lParam) { try { - if (_forms.TryGetValue(wParam, out Form f)) + if (_forms.TryGetValue(wParam, out var f)) { FlashEvent(f, (int)lParam == 1); } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Storage.cs b/Source/Krypton Components/Krypton.Toolkit/General/Storage.cs index b8155b31a..7bbbfece8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/Storage.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/Storage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,6 +37,7 @@ public abstract class Storage : GlobalId /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public abstract bool IsDefault { get; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonBasicToastNotificationData.cs b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonBasicToastNotificationData.cs new file mode 100644 index 000000000..e647d1ee3 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonBasicToastNotificationData.cs @@ -0,0 +1,161 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using ContentAlignment = System.Drawing.ContentAlignment; +#pragma warning disable VSSpell001 + +namespace Krypton.Toolkit +{ + /// Contains the data and information required, to create a basic toast notification. + public struct KryptonBasicToastNotificationData + { + #region Public + + /// Gets or sets the use fade. + /// The use fade. + public bool UseFade { get; set; } + + /// Gets or sets the top most. + /// The top most. + public bool? TopMost { get; set; } + + /// Gets or sets the show close box. + /// The show close box. + public bool? ShowCloseBox { get; set; } + + /// Gets or sets the show do not show again option. + /// The show do not show again option. + public bool? ShowDoNotShowAgainOption { get; set; } + + /// Gets or sets a value indicating whether [show count down seconds on progress bar]. + /// true if [show count down seconds on progress bar]; otherwise, false. + public bool ShowCountDownSecondsOnProgressBar { get; set; } + + /// Gets or sets the state of the use do not show again option three. + /// The state of the use do not show again option three. + public bool? UseDoNotShowAgainOptionThreeState { get; set; } + + /// Gets or sets the do not show again option checked value. + /// The do not show again option checked value. + public bool IsDoNotShowAgainOptionChecked { get; set; } + + /// Gets or sets the report toast location. Use this for development purposes only. + /// Reports the toast location. + public bool ReportToastLocation { get; set; } + + /// Gets or sets a value indicating whether [use RTL reading]. + /// true if [use RTL reading]; otherwise, false. + public bool UseRtlReading { get; set; } + + /// Gets or sets the state of the do not show again option check. + /// The state of the do not show again option check. + public CheckState? DoNotShowAgainOptionCheckState { get; set; } + + /// Gets or sets the first border color. + /// The first border color. + public Color? BorderColor1 { get; set; } + + /// Gets or sets the second border color. + /// The second border color. + public Color? BorderColor2 { get; set; } + + /// Gets or sets the notification title alignment. + /// The notification title alignment. + public ContentAlignment? NotificationTitleAlignment { get; set; } + + /// Gets or sets the notification content font. + /// The notification content font. + public Font? NotificationContentFont { get; set; } + + /// Gets or sets the notification title font. + /// The notification title font. + public Font? NotificationTitleFont { get; set; } + + /// Gets or sets the count-down seconds. + /// The count-down seconds. + public int? CountDownSeconds { get; set; } + + /// Gets or sets the count-down timer interval. + /// The count-down timer interval. + public int? CountDownTimerInterval { get; set; } + + /// Gets or sets the content of the notification. + /// The content of the notification. + public string? NotificationContent { get; set; } + + /// Gets or sets the notification title. + /// The notification title. + public string? NotificationTitle { get; set; } + + /// Gets or sets the optional CheckBox text. + /// The optional CheckBox text. + public string? OptionalCheckBoxText { get; set; } + + /// Gets or sets the custom image. + /// The custom image. + public Bitmap? CustomImage { get; set; } + + /// Gets or sets the notification location. + /// The notification location. + public Point? NotificationLocation { get; set; } + + /// Gets or sets the toast host. + /// The toast host. + public IWin32Window? ToastHost { get; set; } + + /// Gets or sets the right to left layout. + /// The right to left layout. + public RightToLeftLayout? RightToLeftLayout { get; set; } + + /// Gets or sets the notification icon. + /// The notification icon. + public KryptonToastNotificationIcon? NotificationIcon { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonBasicToastNotificationData() + { + // Defaults, when needed + UseFade = false; + + ReportToastLocation = false; + + UseRtlReading = false; + + ShowCountDownSecondsOnProgressBar = true; + + #region Do Not Show Again Values + + ShowDoNotShowAgainOption = false; + + UseDoNotShowAgainOptionThreeState = false; + + DoNotShowAgainOptionCheckState = CheckState.Unchecked; + + #endregion + + CountDownTimerInterval = 1000; + + BorderColor1 = GlobalStaticValues.EMPTY_COLOR; + + BorderColor2 = GlobalStaticValues.EMPTY_COLOR; + + OptionalCheckBoxText = KryptonManager.Strings.CustomStrings.DoNotShowAgain; + + ToastHost = null; + + RightToLeftLayout = Toolkit.RightToLeftLayout.LeftToRight; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonCommonToastNotificationData.cs b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonCommonToastNotificationData.cs new file mode 100644 index 000000000..97a7b7ad6 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonCommonToastNotificationData.cs @@ -0,0 +1,154 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using ContentAlignment = System.Drawing.ContentAlignment; +#pragma warning disable VSSpell001 + +namespace Krypton.Toolkit +{ + /// Contains the data and information required, to create a toast notification. + public struct KryptonCommonToastNotificationData + { + #region Public + + /// Gets or sets the use fade. + /// The use fade. + public bool UseFade { get; set; } + + /// Gets or sets the top most. + /// The top most. + public bool? TopMost { get; set; } + + /// Gets or sets the show close box. + /// The show close box. + public bool? ShowCloseBox { get; set; } + + /// Gets or sets the show do not show again option. + /// The show do not show again option. + public bool? ShowDoNotShowAgainOption { get; set; } + + /// Gets or sets the state of the use do not show again option three. + /// The state of the use do not show again option three. + public bool? UseDoNotShowAgainOptionThreeState { get; set; } + + /// Gets or sets the do not show again option checked value. + /// The do not show again option checked value. + public bool DoNotShowAgainOptionChecked { get; set; } + + /// Gets or sets the report toast location. Use this for development purposes only. + /// Reports the toast location. + public bool ReportToastLocation { get; set; } + + /// Gets or sets a value indicating whether [use RTL reading]. + /// true if [use RTL reading]; otherwise, false. + public bool UseRtlReading { get; set; } + + /// Gets or sets the first border color. + /// The first border color. + public Color? BorderColor1 { get; set; } + + /// Gets or sets the second border color. + /// The second border color. + public Color? BorderColor2 { get; set; } + + /// Gets or sets the state of the do not show again option CheckBox. + /// The state of the do not show again option CheckBox. + public CheckState? DoNotShowAgainOptionCheckState { get; set; } + + /// Gets or sets the notification title alignment. + /// The notification title alignment. + public ContentAlignment? NotificationTitleAlignment { get; set; } + + /// Gets or sets the notification content font. + /// The notification content font. + public Font? NotificationContentFont { get; set; } + + /// Gets or sets the notification title font. + /// The notification title font. + public Font? NotificationTitleFont { get; set; } + + /// Gets or sets the count-down seconds. + /// The count-down seconds. + public int? CountDownSeconds { get; set; } + + /// Gets or sets the count-down timer interval. + /// The count-down timer interval. + public int? CountDownTimerInterval { get; set; } + + /// Gets or sets the content of the notification. + /// The content of the notification. + public string? NotificationContent { get; set; } + + /// Gets or sets the notification title. + /// The notification title. + public string? NotificationTitle { get; set; } + + /// Gets or sets the optional CheckBox text. + /// The optional CheckBox text. + public string? OptionalCheckBoxText { get; set; } + + /// Gets or sets the custom image. + /// The custom image. + public Bitmap? CustomImage { get; set; } + + /// Gets or sets the notification location. + /// The notification location. + public Point? NotificationLocation { get; set; } + + /// Gets or sets the toast host. + /// The toast host. + public IWin32Window? ToastHost { get; set; } + + /// Gets or sets the right to left layout. + /// The right to left layout. + public RightToLeftLayout? RightToLeftLayout { get; set; } + + /// Gets or sets the notification icon. + /// The notification icon. + public KryptonToastNotificationIcon? NotificationIcon { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonCommonToastNotificationData() + { + UseFade = false; + + ReportToastLocation = false; + + #region Do Not Show Again Values + + ShowDoNotShowAgainOption = false; + + UseDoNotShowAgainOptionThreeState = false; + + DoNotShowAgainOptionCheckState = CheckState.Unchecked; + + #endregion + + UseRtlReading = false; + + BorderColor1 = GlobalStaticValues.EMPTY_COLOR; + + BorderColor2 = GlobalStaticValues.EMPTY_COLOR; + + CountDownTimerInterval = 1000; + + OptionalCheckBoxText = KryptonManager.Strings.CustomStrings.DoNotShowAgain; + + ToastHost = null; + + RightToLeftLayout = Toolkit.RightToLeftLayout.LeftToRight; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonToastNotificationController.cs b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonToastNotificationController.cs new file mode 100644 index 000000000..d7bd2d071 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonToastNotificationController.cs @@ -0,0 +1,249 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Handles the heavy lifting of creating toast notifications. + internal class KryptonToastNotificationController + { + #region Implementation + + #region Basic Toast Notification + + #region Normal + + internal static bool ShowNotificationWithBooleanDoNotShowAgainReturnValue(KryptonBasicToastNotificationData toastNotificationData) => toastNotificationData.UseRtlReading ? VisualToastNotificationBasicRtlAwareForm.InternalShowWithBooleanReturnValue(toastNotificationData) : VisualToastNotificationBasicForm.InternalShowWithBooleanReturnValue(toastNotificationData); + + internal static CheckState ShowNotificationWithCheckStateDoNotShowAgainReturnValue(KryptonBasicToastNotificationData toastNotificationData) => toastNotificationData.UseRtlReading ? VisualToastNotificationBasicRtlAwareForm.InternalShowWithCheckStateReturnValue(toastNotificationData) : VisualToastNotificationBasicForm.InternalShowWithCheckStateReturnValue(toastNotificationData); + + internal static void ShowBasicToastNotification(KryptonBasicToastNotificationData toastNotificationData) + { + if (toastNotificationData.UseRtlReading) + { + VisualToastNotificationBasicRtlAwareForm.InternalShow(toastNotificationData); + } + else + { + VisualToastNotificationBasicForm.InternalShow(toastNotificationData); + } + } + + #endregion + + #region With Progress Bars + + internal static bool ShowBasicProgressBarNotificationWithBooleanReturnValue(KryptonBasicToastNotificationData toastNotificationData) => toastNotificationData.UseRtlReading ? VisualToastNotificationBasicWithProgressBarRtlAwareForm.InternalShowWithBooleanReturnValue(toastNotificationData) : VisualToastNotificationBasicWithProgressBarForm.InternalShowWithBooleanReturnValue(toastNotificationData); + + internal static CheckState ShowBasicProgressBarNotificationWithCheckStateReturnValue( + KryptonBasicToastNotificationData toastNotificationData) => + toastNotificationData.UseRtlReading + ? VisualToastNotificationBasicWithProgressBarRtlAwareForm.InternalShowWithCheckStateReturnValue( + toastNotificationData) + : VisualToastNotificationBasicWithProgressBarForm.InternalShowWithCheckStateReturnValue( + toastNotificationData); + + internal static void ShowBasicProgressBarNotification(KryptonBasicToastNotificationData toastNotificationData) + { + if (toastNotificationData.UseRtlReading) + { + VisualToastNotificationBasicWithProgressBarRtlAwareForm.ShowNotification(toastNotificationData); + } + else + { + VisualToastNotificationBasicWithProgressBarForm.InternalShow(toastNotificationData); + } + } + + #endregion + + #endregion + + #region User Input Toast Notification + + #region Normal Left to Right Toasts + + /// Shows the toast. + /// The data. + /// A with all appropriate data. + /// + internal static object ShowToast(KryptonUserInputToastNotificationData data) + { + switch (data.NotificationInputAreaType) + { + case KryptonToastNotificationInputAreaType.ComboBox: + case KryptonToastNotificationInputAreaType.DomainUpDown: + case KryptonToastNotificationInputAreaType.MaskedTextBox: + case KryptonToastNotificationInputAreaType.TextBox: + return ReturnStringInput(data); + case KryptonToastNotificationInputAreaType.DateTime: + return ReturnDateTimeInput(data); + case KryptonToastNotificationInputAreaType.NumericUpDown: + return ReturnDecimalInput(data); + case null: + throw new ArgumentNullException(); + default: + DebugTools.NotImplemented(data.ToString()); + break; + } + + return new object(); + } + + internal static DateTime ReturnDateTimeInput(KryptonUserInputToastNotificationData data) + { + DateTime result = CreateDateTimeToastNotification(data); + + return result; + } + + private static DateTime CreateDateTimeToastNotification(KryptonUserInputToastNotificationData data) => data.UseRtlReading ? VisualToastNotificationDateTimeUserInputRtlAwareForm.ShowNotification(data) : VisualToastNotificationDateTimeUserInputForm.ShowNotification(data); + + internal static decimal ReturnDecimalInput(KryptonUserInputToastNotificationData data) + { + decimal result = CreateDecimalToastNotification(data); + + return result; + } + + private static decimal CreateDecimalToastNotification(KryptonUserInputToastNotificationData data) => data.UseRtlReading ? VisualToastNotificationNUDUserInputRtlAwareForm.ShowNotification(data) : VisualToastNotificationNUDUserInputForm.ShowNotification(data); + + internal static string ReturnStringInput(KryptonUserInputToastNotificationData data) + { + string result = CreateStringToastNotification(data); + + return result; + } + + private static string CreateStringToastNotification(KryptonUserInputToastNotificationData data) + { + if (data.UseRtlReading) + { + switch (data.NotificationInputAreaType) + { + case KryptonToastNotificationInputAreaType.ComboBox: + return VisualToastNotificationComboBoxUserInputRtlAwareForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.DomainUpDown: + return VisualToastNotificationDomainUpDownUserInputRtlAwareForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.MaskedTextBox: + return VisualToastNotificationMaskedTextBoxUserInputRtlAwareForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.TextBox: + return VisualToastNotificationTextBoxUserInputRtlAwareForm.ShowNotification(data); + } + } + else + { + switch (data.NotificationInputAreaType) + { + case KryptonToastNotificationInputAreaType.ComboBox: + return VisualToastNotificationComboBoxUserInputForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.DomainUpDown: + return VisualToastNotificationDomainUpDownUserInputForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.MaskedTextBox: + return VisualToastNotificationMaskedTextBoxUserInputForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.TextBox: + return VisualToastNotificationTextBoxUserInputForm.ShowNotification(data); + } + } + + return string.Empty; + } + + #endregion + + #region Left to Right Toasts with Progress Bars + + internal static object ShowToastWithProgressBar(KryptonUserInputToastNotificationData data) + { + switch (data.NotificationInputAreaType) + { + case KryptonToastNotificationInputAreaType.ComboBox: + case KryptonToastNotificationInputAreaType.DomainUpDown: + case KryptonToastNotificationInputAreaType.MaskedTextBox: + case KryptonToastNotificationInputAreaType.TextBox: + return ReturnStringInputWithProgressBar(data); + case KryptonToastNotificationInputAreaType.DateTime: + return ReturnDateTimeInputWithProgressBar(data); + case KryptonToastNotificationInputAreaType.NumericUpDown: + return ReturnDecimalInputWithProgressBar(data); + case null: + throw new ArgumentNullException(); + default: + DebugTools.NotImplemented(data.ToString()); + break; + } + + return new object(); + } + + private static DateTime ReturnDateTimeInputWithProgressBar(KryptonUserInputToastNotificationData data) + { + DateTime result = CreateDateTimeToastWithProgressBarNotification(data); + + return result; + } + + private static DateTime CreateDateTimeToastWithProgressBarNotification(KryptonUserInputToastNotificationData data) => data.UseRtlReading ? VisualToastNotificationDateTimeUserInputWithProgressBarRtlAwareForm.ShowNotification(data) : VisualToastNotificationDateTimeUserInputWithProgressBarForm.ShowNotification(data); + + private static decimal ReturnDecimalInputWithProgressBar(KryptonUserInputToastNotificationData data) + { + decimal result = CreateDecimalToastWithProgressBarNotification(data); + + return result; + } + + private static decimal CreateDecimalToastWithProgressBarNotification(KryptonUserInputToastNotificationData data) => data.UseRtlReading ? VisualToastNotificationNUDUserInputWithProgressBarRtlAwareForm.ShowToastNotification(data) : VisualToastNotificationNUDUserInputWithProgressBarForm.ShowToastNotification(data); + + private static string ReturnStringInputWithProgressBar(KryptonUserInputToastNotificationData data) + { + string result = CreateStringToastWithProgressBarNotification(data); + + return result; + } + + private static string CreateStringToastWithProgressBarNotification(KryptonUserInputToastNotificationData data) + { + if (data.UseRtlReading) + { + switch (data.NotificationInputAreaType) + { + case KryptonToastNotificationInputAreaType.ComboBox: + return VisualToastNotificationComboBoxUserInputWithProgressBarRtlAwareForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.DomainUpDown: + return VisualToastNotificationDomainUpDownInputWithProgressBarRtlAwareForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.MaskedTextBox: + return VisualToastNotificationMaskedTextBoxInputWithProgressBarRtlAwareForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.TextBox: + return VisualToastNotificationTextBoxUserInputWithProgressBarRtlAwareForm.ShowNotification(data); + } + } + else + { + switch (data.NotificationInputAreaType) + { + case KryptonToastNotificationInputAreaType.ComboBox: + return VisualToastNotificationComboBoxUserInputWithProgressBarForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.DomainUpDown: + return VisualToastNotificationDomianUpDownInputWithProgressBarForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.MaskedTextBox: + return VisualToastNotificationMaskedTextBoxInputWithProgressBarForm.ShowNotification(data); + case KryptonToastNotificationInputAreaType.TextBox: + return VisualToastNotificationTextBoxUserInputWithProgressBarForm.ShowNotification(data); + } + } + + return string.Empty; + } + + #endregion + + #endregion + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonUserInputToastNotificationData.cs b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonUserInputToastNotificationData.cs new file mode 100644 index 000000000..c5592bba4 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/Toast Notification/KryptonUserInputToastNotificationData.cs @@ -0,0 +1,226 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using ContentAlignment = System.Drawing.ContentAlignment; +#pragma warning disable VSSpell001 + +namespace Krypton.Toolkit +{ + /// Contains the data and information required, to create a toast notification with user input. + public struct KryptonUserInputToastNotificationData + { + #region Public + + /// Gets or sets the use fade. + /// The use fade. + public bool UseFade { get; set; } + + /// Gets or sets the top most. + /// The top most. + public bool? TopMost { get; set; } + + /// Gets or sets the show close box. + /// The show close box. + public bool? ShowCloseBox { get; set; } + + /// Gets or sets the show do not show again option. + /// The show do not show again option. + public bool? ShowDoNotShowAgainOption { get; set; } + + /// Gets or sets the state of the use do not show again option three. + /// The state of the use do not show again option three. + public bool? UseDoNotShowAgainOptionThreeState { get; set; } + + /// Gets or sets the do not show again option checked value. + /// The do not show again option checked value. + public bool DoNotShowAgainOptionChecked { get; set; } + + /// Gets or sets the report toast location. Use this for development purposes only. + /// Reports the toast location. + public bool ReportToastLocation { get; set; } + + /// Gets or sets a value indicating whether [use RTL reading]. + /// true if [use RTL reading]; otherwise, false. + public bool UseRtlReading { get; set; } + + /// Gets or sets the state of the do not show again option check. + /// The state of the do not show again option check. + public CheckState? DoNotShowAgainOptionCheckState { get; set; } + + /// Gets or sets the focus on user input area. + /// The focus on user input area. + public bool? FocusOnUserInputArea { get; set; } + + /// Gets or sets the notification title alignment. + /// The notification title alignment. + public ContentAlignment? NotificationTitleAlignment { get; set; } + + /// Gets or sets the user input ComboBox style. + /// The user input ComboBox style. + public ComboBoxStyle? UserInputComboBoxStyle { get; set; } + + /// Gets or sets the first border color. + /// The first border color. + public Color? BorderColor1 { get; set; } + + /// Gets or sets the second border color. + /// The second border color. + public Color? BorderColor2 { get; set; } + + /// Gets or sets the minimum date time value. + /// The minimum date time value. + public DateTime? MinimumDateTimeValue { get; set; } + + /// Gets or sets the maximum date time value. + /// The maximum date time value. + public DateTime? MaximumDateTimeValue { get; set; } + + /// Gets or sets the initial date time value. + /// The initial date time value. + public DateTime? InitialDateTimeValue { get; set; } + + /// Gets or sets the notification content font. + /// The notification content font. + public Font? NotificationContentFont { get; set; } + + /// Gets or sets the notification title font. + /// The notification title font. + public Font? NotificationTitleFont { get; set; } + + /// Gets or sets the count-down seconds. + /// The count-down seconds. + public int? CountDownSeconds { get; set; } + + /// Gets or sets the count-down timer interval. + /// The count-down timer interval. + public int? CountDownTimerInterval { get; set; } + + /// Gets or sets the content of the notification. + /// The content of the notification. + public string? NotificationContent { get; set; } + + /// Gets or sets the notification title. + /// The notification title. + public string? NotificationTitle { get; set; } + + /// Gets or sets the custom image. + /// The custom image. + public Bitmap? CustomImage { get; set; } + + /// Gets or sets the notification location. + /// The notification location. + public Point? NotificationLocation { get; set; } + + /// Gets or sets the application icon. + /// The application icon. + public Icon ApplicationIcon { get; set; } + + /// Gets or sets the toast host. + /// The toast host. + public IWin32Window? ToastHost { get; set; } + + /// Gets or sets the notification icon. + /// The notification icon. + public KryptonToastNotificationIcon? NotificationIcon { get; set; } + + /// Gets or sets the type of the notification input area. + /// The type of the notification input area. + public KryptonToastNotificationInputAreaType? NotificationInputAreaType { get; set; } + + /// Gets or sets the toast notification cue text. + /// The toast notification cue text. + public string? ToastNotificationCueText { get; set; } + + /// Gets or sets the optional CheckBox text. + /// The optional CheckBox text. + public string? OptionalCheckBoxText { get; set; } + + /// Gets or sets the user input list. + /// The user input list. + public ArrayList UserInputList { get; set; } + + /// Gets or sets the index of the selected user input. + /// The index of the selected user input. + public int? SelectedIndex { get; set; } + + /// Gets or sets the date time format. + /// The date time format. + public DateTimePickerFormat? DateTimeFormat { get; set; } + + /// Gets or sets the custom date time format. + /// The custom date time format. + public string? CustomDateTimeFormat { get; set; } + + /// Gets or sets the color of the toast notification cue. + /// The color of the toast notification cue. + public Color? ToastNotificationCueColor { get; set; } + + /// Gets or sets the initial numeric up down value. + /// The initial numeric up down value. + public decimal? InitialNumericUpDownValue { get; set; } + + /// Gets or sets the maximum numeric up down value. + /// The maximum numeric up down value. + public decimal? MaximumNumericUpDownValue { get; set; } + + /// Gets or sets the minimum numeric up down value. + /// The minimum numeric up down value. + public decimal? MinimumNumericUpDownValue { get; set; } + + #endregion + + #region Identity + + /// Initializes a new instance of the struct. + public KryptonUserInputToastNotificationData() + { + // Defaults, when needed + UseFade = false; + + ReportToastLocation = false; + + #region Do Not Show Again Values + + ShowDoNotShowAgainOption = false; + + UseDoNotShowAgainOptionThreeState = false; + + DoNotShowAgainOptionCheckState = CheckState.Unchecked; + + #endregion + + UseRtlReading = false; + + BorderColor1 = GlobalStaticValues.EMPTY_COLOR; + + BorderColor2 = GlobalStaticValues.EMPTY_COLOR; + + CountDownTimerInterval = 1000; + + OptionalCheckBoxText = KryptonManager.Strings.CustomStrings.DoNotShowAgain; + + ToastHost = null; + + SelectedIndex = 0; + } + + #endregion + + #region Implementation + + internal readonly void DisplayDebugData(KryptonUserInputToastNotificationData data) + { + Console.WriteLine($"ComboBox Items: {UserInputList}"); + + Console.ReadLine(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/ToolStripControlHostFixed.cs b/Source/Krypton Components/Krypton.Toolkit/General/ToolStripControlHostFixed.cs index f0da12e83..ce4327ca1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/ToolStripControlHostFixed.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/ToolStripControlHostFixed.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2024. All rights reserved. */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/TooltipManager.cs b/Source/Krypton Components/Krypton.Toolkit/General/TooltipManager.cs index 2c06de462..1933d104b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/TooltipManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/TooltipManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -254,7 +254,7 @@ public void DoubleClick(ViewBase targetElement, Point pt) #endregion #region Implementation - private void OnStartTimerTick(object sender, EventArgs e) + private void OnStartTimerTick(object? sender, EventArgs e) { // One tick timer, so always stop _startTimer.Stop(); @@ -276,7 +276,7 @@ private void OnStartTimerTick(object sender, EventArgs e) } } - private void OnStopDetectMoveTimerTick(object sender, EventArgs e) + private void OnStopDetectMoveTimerTick(object? sender, EventArgs e) { // One tick timer, so always stop _detectMoveTimer.Stop(); @@ -310,7 +310,7 @@ private void OnStopDetectMoveTimerTick(object sender, EventArgs e) } } - private void OnCloseTimerTick(object sender, EventArgs e) + private void OnCloseTimerTick(object? sender, EventArgs e) { // Raises event indicating the tooltip should be removed _closeTimer.Stop(); diff --git a/Source/Krypton Components/Krypton.Toolkit/General/TypedCollection.cs b/Source/Krypton Components/Krypton.Toolkit/General/TypedCollection.cs index 84965e5a8..104ac7338 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/TypedCollection.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/TypedCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -98,7 +98,7 @@ public virtual void AddRange(T[] itemArray) /// /// Object reference. /// The position into which the new item was inserted. - public virtual int Add([DisallowNull] object value) + public virtual int Add(object? value) { // Use strongly typed implementation Add((value as T)!); @@ -112,7 +112,7 @@ public virtual int Add([DisallowNull] object value) /// /// Object reference. /// True if item found; otherwise false. - public bool Contains(object value) => + public bool Contains(object? value) => // Use strongly typed implementation Contains((value as T)!); @@ -121,7 +121,7 @@ public bool Contains(object value) => /// /// Object reference. /// -1 if not found; otherwise index position. - public int IndexOf(object value) => + public int IndexOf(object? value) => // Use strongly typed implementation IndexOf((value as T)!); @@ -130,7 +130,7 @@ public int IndexOf(object value) => /// /// Insert index. /// Object reference. - public virtual void Insert(int index, object value) => + public virtual void Insert(int index, object? value) => // Use strongly typed implementation Insert(index, (value as T)!); @@ -143,7 +143,7 @@ public virtual void Insert(int index, object value) => /// Removes first occurrence of specified item. ///
/// Object reference. - public void Remove(object value) => + public void Remove(object? value) => // Use strongly typed implementation Remove((value as T)!); @@ -152,10 +152,9 @@ public void Remove(object value) => ///
/// Object index. /// Object at specified index. - object IList.this[int index] + object? IList.this[int index] { get => _list[index]; - set => throw new NotImplementedException("Cannot set a collection index with a new value"); } #endregion @@ -169,7 +168,7 @@ object IList.this[int index] public int IndexOf([DisallowNull] T item) { Debug.Assert(item != null); - return _list.IndexOf(item); + return _list.IndexOf(item!); } /// @@ -293,7 +292,7 @@ public virtual void Add([DisallowNull] T item) // Not allow to add the same item more than once if (_list.Contains(item)) { - throw new ArgumentOutOfRangeException(nameof(item), @"Item already in collection"); + throw new ArgumentOutOfRangeException(nameof(item), @"Item is already in collection"); } // Generate before insert event @@ -354,21 +353,26 @@ public void CopyTo([DisallowNull] T[] array, int arrayIndex) /// /// Item reference. /// True if removed; otherwise false. - public virtual bool Remove([DisallowNull] T item) + public virtual bool Remove([DisallowNull] T? item) { - Debug.Assert(item != null); + bool ret = false; - // Cache the index of the item - var index = IndexOf(item); + if (item is not null) + { + Debug.Assert(item is not null); - // Generate before event - OnRemoving(new TypedCollectionEventArgs(item, index)); + // Cache the index of the item + var index = IndexOf(item!); - // Remove from the internal list - var ret = _list.Remove(item); + // Generate before event + OnRemoving(new TypedCollectionEventArgs(item, index)); - // Generate after event - OnRemoved(new TypedCollectionEventArgs(item, index)); + // Remove from the internal list + ret = _list.Remove(item!); + + // Generate after event + OnRemoved(new TypedCollectionEventArgs(item, index)); + } return ret; } diff --git a/Source/Krypton Components/Krypton.Toolkit/General/TypedRestrictCollection.cs b/Source/Krypton Components/Krypton.Toolkit/General/TypedRestrictCollection.cs index 9b3e7ef31..b681add06 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/TypedRestrictCollection.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/TypedRestrictCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/WinFormsDefinitions.cs b/Source/Krypton Components/Krypton.Toolkit/General/WinFormsDefinitions.cs new file mode 100644 index 000000000..b3b0ecabb --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/General/WinFormsDefinitions.cs @@ -0,0 +1,517 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Drawing +{ + #region Enum StockIconId + + /// + /// Icon identifiers for use with "SystemIconsCustom.GetStockIcon(StockIconId, StockIconOptions)"s/>. + /// + public enum StockIconId + { + /// + /// Document (blank page), no associated program. + /// + DocumentNoAssociation = 0, // SIID_DOCNOASSOC + + /// + /// Document with an associated program. + /// + DocumentWithAssociation = 1, // SIID_DOCASSOC + + /// + /// Generic application with no custom icon. + /// + Application = 2, // SIID_APPLICATION + + /// + /// Closed folder. + /// + Folder = 3, // SIID_FOLDER + + /// + /// Open folder. + /// + FolderOpen = 4, // SIID_FOLDEROPEN + + /// + /// 5.25" floppy disk drive. + /// + Drive525 = 5, // SIID_DRIVE525 + + /// + /// 3.5" floppy disk drive. + /// + Drive35 = 6, // SIID_DRIVE35 + + /// + /// Removable drive. + /// + DriveRemovable = 7, // SIID_DRIVEREMOVE + + /// + /// Fixed drive. + /// + DriveFixed = 8, // SIID_DRIVEFIXED + + /// + /// Network drive. + /// + DriveNet = 9, // SIID_DRIVENET + + /// + /// Disabled network drive. + /// + DriveNetDisabled = 10, // SIID_DRIVENETDISABLED + + /// + /// CD drive. + /// + DriveCD = 11, // SIID_DRIVECD + + /// + /// RAM disk drive. + /// + DriveRam = 12, // SIID_DRIVERAM + + /// + /// Entire network. + /// + World = 13, // SIID_WORLD + + /// + /// A computer on the network. + /// + Server = 15, // SIID_SERVER + + /// + /// Printer. + /// + Printer = 16, // SIID_PRINTER + + /// + /// My network places. + /// + MyNetwork = 17, // SIID_MYNETWORK + + /// + /// Find. + /// + Find = 22, // SIID_FIND + + /// + /// Help. + /// + Help = 23, // SIID_HELP + + /// + /// Overlay for shared items. + /// + Share = 28, // SIID_SHARE + + /// + /// Overlay for shortcuts to items. + /// + Link = 29, // SIID_LINK + + /// + /// Overlay for slow items. + /// + SlowFile = 30, // SIID_SLOWFILE + + /// + /// Empty recycle bin. + /// + Recycler = 31, // SIID_RECYCLER + + /// + /// Full recycle bin. + /// + RecyclerFull = 32, // SIID_RECYCLERFULL + + /// + /// Audio CD media. + /// + MediaCDAudio = 40, // SIID_MEDIACDAUDIO + + /// + /// Security lock. + /// + Lock = 47, // SIID_LOCK + + /// + /// AutoList. + /// + AutoList = 49, // SIID_AUTOLIST + + /// + /// Network printer. + /// + PrinterNet = 50, // SIID_PRINTERNET + + /// + /// Server share. + /// + ServerShare = 51, // SIID_SERVERSHARE + + /// + /// Fax printer. + /// + PrinterFax = 52, // SIID_PRINTERFAX + + /// + /// Networked fax printer. + /// + PrinterFaxNet = 53, // SIID_PRINTERFAXNET + + /// + /// Print to file. + /// + PrinterFile = 54, // SIID_PRINTERFILE + + /// + /// Stack. + /// + Stack = 55, // SIID_STACK + + /// + /// SVCD media. + /// + MediaSVCD = 56, // SIID_MEDIASVCD + + /// + /// Folder containing other items. + /// + StuffedFolder = 57, // SIID_STUFFEDFOLDER + + /// + /// Unknown drive. + /// + DriveUnknown = 58, // SIID_DRIVEUNKNOWN + + /// + /// DVD drive. + /// + DriveDVD = 59, // SIID_DRIVEDVD + + /// + /// DVD media. + /// + MediaDVD = 60, // SIID_MEDIADVD + + /// + /// DVD-RAM media. + /// + MediaDVDRAM = 61, // SIID_MEDIADVDRAM + + /// + /// DVD-RW media. + /// + MediaDVDRW = 62, // SIID_MEDIADVDRW + + /// + /// DVD-R media. + /// + MediaDVDR = 63, // SIID_MEDIADVDR + + /// + /// DVD-ROM media. + /// + MediaDVDROM = 64, // SIID_MEDIADVDROM + + /// + /// CD+ (Enhanced CD) media. + /// + MediaCDAudioPlus = 65, // SIID_MEDIACDAUDIOPLUS + + /// + /// CD-RW media. + /// + MediaCDRW = 66, // SIID_MEDIACDRW + + /// + /// CD-R media. + /// + MediaCDR = 67, // SIID_MEDIACDR + + /// + /// Burning CD. + /// + MediaCDBurn = 68, // SIID_MEDIACDBURN + + /// + /// Blank CD media. + /// + MediaBlankCD = 69, // SIID_MEDIABLANKCD + + /// + /// CD-ROM media. + /// + MediaCDROM = 70, // SIID_MEDIACDROM + + /// + /// Audio files. + /// + AudioFiles = 71, // SIID_AUDIOFILES + + /// + /// Image files. + /// + ImageFiles = 72, // SIID_IMAGEFILES + + /// + /// Video files. + /// + VideoFiles = 73, // SIID_VIDEOFILES + + /// + /// Mixed files. + /// + MixedFiles = 74, // SIID_MIXEDFILES + + /// + /// Folder back. + /// + FolderBack = 75, // SIID_FOLDERBACK + + /// + /// Folder front. + /// + FolderFront = 76, // SIID_FOLDERFRONT + + /// + /// Security shield. Use for UAC prompts only. + /// + Shield = 77, // SIID_SHIELD + + /// + /// Warning. + /// + Warning = 78, // SIID_WARNING + + /// + /// Informational. + /// + Info = 79, // SIID_INFO + + /// + /// Error. + /// + Error = 80, // SIID_ERROR + + /// + /// Key / secure. + /// + Key = 81, // SIID_KEY + + /// + /// Software. + /// + Software = 82, // SIID_SOFTWARE + + /// + /// Rename. + /// + Rename = 83, // SIID_RENAME + + /// + /// Delete. + /// + Delete = 84, // SIID_DELETE + + /// + /// Audio DVD media. + /// + MediaAudioDVD = 85, // SIID_MEDIAAUDIODVD + + /// + /// Movied DVD media. + /// + MediaMovieDVD = 86, // SIID_MEDIAMOVIEDVD + + /// + /// Enhanced CD media. + /// + MediaEnhancedCD = 87, // SIID_MEDIAENHANCEDCD + + /// + /// Enhanced DVD media. + /// + MediaEnhancedDVD = 88, // SIID_MEDIAENHANCEDDVD + + /// + /// HD-DVD media. + /// + MediaHDDVD = 89, // SIID_MEDIAHDDVD + + /// + /// BluRay media. + /// + MediaBluRay = 90, // SIID_MEDIABLURAY + + /// + /// VCD media. + /// + MediaVCD = 91, // SIID_MEDIAVCD + + /// + /// DVD+R media. + /// + MediaDVDPlusR = 92, // SIID_MEDIADVDPLUSR + + /// + /// DVD+RW media. + /// + MediaDVDPlusRW = 93, // SIID_MEDIADVDPLUSRW + + /// + /// Desktop computer. + /// + DesktopPC = 94, // SIID_DESKTOPPC + + /// + /// Mobile computer. + /// + MobilePC = 95, // SIID_MOBILEPC + + /// + /// Users. + /// + Users = 96, // SIID_USERS + + /// + /// Smart media. + /// + MediaSmartMedia = 97, // SIID_MEDIASMARTMEDIA + + /// + /// Compact Flash. + /// + MediaCompactFlash = 98, // SIID_MEDIACOMPACTFLASH + + /// + /// Cell phone. + /// + DeviceCellPhone = 99, // SIID_DEVICECELLPHONE + + /// + /// Camera. + /// + DeviceCamera = 100, // SIID_DEVICECAMERA + + /// + /// Video camera. + /// + DeviceVideoCamera = 101, // SIID_DEVICEVIDEOCAMERA + + /// + /// Audio player. + /// + DeviceAudioPlayer = 102, // SIID_DEVICEAUDIOPLAYER + + /// + /// Connect to network. + /// + NetworkConnect = 103, // SIID_NETWORKCONNECT + + /// + /// Internet. + /// + Internet = 104, // SIID_INTERNET + + /// + /// ZIP file. + /// + ZipFile = 105, // SIID_ZIPFILE + + /// + /// Settings. + /// + Settings = 106, // SIID_SETTINGS + + /// + /// HD-DVD drive. + /// + DriveHDDVD = 132, // SIID_DRIVEHDDVD + + /// + /// BluRay drive. + /// + DriveBD = 133, // SIID_DRIVEBD + + /// + /// HD-DVD-ROM media. + /// + MediaHDDVDROM = 134, // SIID_MEDIAHDDVDROM + + /// + /// HD-DVD-R media. + /// + MediaHDDVDR = 135, // SIID_MEDIAHDDVDR + + /// + /// HD-DVD-RAM media. + /// + MediaHDDVDRAM = 136, // SIID_MEDIAHDDVDRAM + + /// + /// BluRay-ROM media. + /// + MediaBDROM = 137, // SIID_MEDIABDROM + + /// + /// BluRay-R media. + /// + MediaBDR = 138, // SIID_MEDIABDR + + /// + /// BluRay-RE media. + /// + MediaBDRE = 139, // SIID_MEDIABDRE + + /// + /// Clustered disk. + /// + ClusteredDrive = 140 // SIID_CLUSTEREDDRIVE + } + + #endregion + + #region Enum StockIconOptions + + /// + /// Options for use with "SystemIconsCustom.GetStockIcon(StockIconId, StockIconOptions)"/>. + /// + [Flags] + public enum StockIconOptions + { + /// + /// Use the defaults, which is to retrieve a large version of the icon (as defined by the current system + /// metrics). + /// + Default = 0x000000000, + + /// + /// Retrieve the small version of the icon (as defined by the current system metrics). + /// + SmallIcon = 0x000000001, + + /// + /// Retrieve the shell icon size of the icon. + /// + ShellIconSize = 0x000000004, + + /// + /// Adds a link overlay onto the icon. + /// + LinkOverlay = 0x000008000, + + /// + /// Blends the icon with the system highlight color. + /// + Selected = 0x000010000 + } + + #endregion +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/General/WindowStylesHelper.cs b/Source/Krypton Components/Krypton.Toolkit/General/WindowStylesHelper.cs index 7f5095b9a..8772fcb26 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/WindowStylesHelper.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/WindowStylesHelper.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/General/XmlHelper.cs b/Source/Krypton Components/Krypton.Toolkit/General/XmlHelper.cs index 169ba468d..46837f0cb 100644 --- a/Source/Krypton Components/Krypton.Toolkit/General/XmlHelper.cs +++ b/Source/Krypton Components/Krypton.Toolkit/General/XmlHelper.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public static class XmlHelper /// Attribute name. /// Attribute value. /// Default value. - public static void TextToXmlAttribute(XmlWriter xmlWriter, string name, string value, string defaultValue = @"") + public static void TextToXmlAttribute(XmlWriter xmlWriter, string name, string? value, string defaultValue = @"") { if (!string.IsNullOrEmpty(value) && (value != defaultValue)) { @@ -83,7 +83,7 @@ public static void ImageToXmlCData(XmlWriter xmlWriter, string name, Bitmap? ima ///
/// Xml reader to load information from. /// Image that was recreated. - public static Bitmap XmlCDataToImage(XmlReader xmlReader) + public static Bitmap? XmlCDataToImage(XmlReader xmlReader) { // Convert the content of the element into base64 var bytes = Convert.FromBase64String(xmlReader.ReadContentAsString()); diff --git a/Source/Krypton Components/Krypton.Toolkit/Global/GlobalDeclarations.cs b/Source/Krypton Components/Krypton.Toolkit/Global/GlobalDeclarations.cs index 28d420228..bb1c212b2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Global/GlobalDeclarations.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Global/GlobalDeclarations.cs @@ -1,12 +1,14 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. */ #endregion // This file holds the global definitions >= C# 10 +#region WinForms Libraries + global using System; global using System.Collections; global using System.Collections.Generic; @@ -27,6 +29,7 @@ global using System.Linq; global using System.Media; global using System.Reflection; +global using System.Resources; global using System.Runtime.CompilerServices; global using System.Runtime.InteropServices; global using System.Runtime.Serialization; @@ -34,6 +37,7 @@ global using System.Security; global using System.Security.Principal; global using System.Text; +global using System.Text.RegularExpressions; global using System.Timers; global using System.Threading; global using System.Threading.Tasks; @@ -43,26 +47,42 @@ global using System.Windows.Forms.VisualStyles; global using System.Xml; +#endregion + +#region Internal Resources + +global using Krypton.Toolkit.Properties; global using Krypton.Toolkit.ResourceFiles.Arrows; global using Krypton.Toolkit.ResourceFiles.ButtonSpecs; global using Krypton.Toolkit.ResourceFiles.CheckBoxes; +global using Krypton.Toolkit.ResourceFiles.CommandLink; global using Krypton.Toolkit.ResourceFiles.ControlBox; +global using Krypton.Toolkit.ResourceFiles.DataBars; global using Krypton.Toolkit.ResourceFiles.Dialogs; global using Krypton.Toolkit.ResourceFiles.DropDown; +global using Krypton.Toolkit.ResourceFiles.Elements; global using Krypton.Toolkit.ResourceFiles.Gallery; global using Krypton.Toolkit.ResourceFiles.Generic; global using Krypton.Toolkit.ResourceFiles.Grid; global using Krypton.Toolkit.ResourceFiles.Logos; global using Krypton.Toolkit.ResourceFiles.MDI; global using Krypton.Toolkit.ResourceFiles.MessageBox; +global using Krypton.Toolkit.ResourceFiles.OutlookGrid; +global using Krypton.Toolkit.ResourceFiles.PaletteSchemas; global using Krypton.Toolkit.ResourceFiles.Pendants; global using Krypton.Toolkit.ResourceFiles.Pin; global using Krypton.Toolkit.ResourceFiles.RadioButtons; global using Krypton.Toolkit.ResourceFiles.SizeGripStyles; +global using Krypton.Toolkit.ResourceFiles.Sort; global using Krypton.Toolkit.ResourceFiles.TaskDialog; +global using Krypton.Toolkit.ResourceFiles.ToastNotification; global using Krypton.Toolkit.ResourceFiles.Toolbars; global using Krypton.Toolkit.ResourceFiles.TreeItems; global using Krypton.Toolkit.ResourceFiles.UAC; +global using Krypton.Toolkit.ResourceFiles.VisualStudio; +global using Krypton.Toolkit.ResourceFiles.WindowsLogos; + +#endregion global using Microsoft.Win32; global using Microsoft.Win32.SafeHandles; @@ -73,5 +93,8 @@ [assembly: Dependency(nameof(System), LoadHint.Always)] [assembly: Dependency(@"System.Drawing", LoadHint.Always)] [assembly: Dependency(@"System.Windows.Forms", LoadHint.Always)] -[assembly: InternalsVisibleTo(@"Krypton.Navigator, PublicKey=a87e673e9ecb6e8e", AllInternalsVisible = true)] -[assembly: InternalsVisibleTo(@"Krypton.Ribbon, PublicKey=a87e673e9ecb6e8e", AllInternalsVisible = true)] \ No newline at end of file + +// Public key value needs to be the full key. Before, this was the PublicKeyToken value. +// See: https://stackoverflow.com/questions/106880/internalsvisibleto-attribute-isnt-working/107958#107958 +[assembly: InternalsVisibleTo( "Krypton.Navigator, PublicKey=00240000048000009400000006020000002400005253413100040000010001001f208b6887f7b4f8fad6c30b9eca9849f09cbfbd37901e222f8e888331622c907dfa686c56389c95966b86b33f0dd0ab4cca46b1f1ed92efd7d5ddee2e2274f485867202c581f68c32bd3278ab1188e978a53ea6851be2c14d87efe9ed78c71df95e1a7f7d6923b6703c00dc56b76fd582f945cd0c1951844ebe478a911fcab4", AllInternalsVisible = true)] +[assembly: InternalsVisibleTo( "Krypton.Ribbon, PublicKey=00240000048000009400000006020000002400005253413100040000010001001f208b6887f7b4f8fad6c30b9eca9849f09cbfbd37901e222f8e888331622c907dfa686c56389c95966b86b33f0dd0ab4cca46b1f1ed92efd7d5ddee2e2274f485867202c581f68c32bd3278ab1188e978a53ea6851be2c14d87efe9ed78c71df95e1a7f7d6923b6703c00dc56b76fd582f945cd0c1951844ebe478a911fcab4", AllInternalsVisible = true)] \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.csproj b/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.csproj index 361894585..6428cc006 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.csproj +++ b/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.csproj @@ -1,26 +1,17 @@  - + - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows + net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows - - - - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - - - net48;net481;net6.0-windows;net7.0-windows + + net48;net481;net8.0-windows;net9.0-windows - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - + net462;net47;net471;net472;net48;net481;net8.0-windows + @@ -41,14 +32,16 @@ true 1701;1702 Debug;Release;Installer;Nightly;Canary - ..\..\..\Bin\$(Configuration)\Krypton.Toolkit.xml + true ..\..\..\Bin\$(Configuration)\ - preview true - preview enable - 6 + + 8 + latest true + + true @@ -82,6 +75,12 @@ + + Form + + + Form + Component @@ -164,6 +163,11 @@ Component + + True + True + AboutToolkitImageResources.resx + True True @@ -199,6 +203,11 @@ True ColourScaleImageResources.resx + + True + True + CommandLinkImageResources.resx + True True @@ -300,9 +309,9 @@ GridImageResources.resx - True - True - ToolkitLogoImageResources.resx + True + True + ToolkitLogoImageResources.resx True @@ -319,6 +328,21 @@ True MessageBoxImageResources.resx + + True + True + OutlookGridImageResources.resx + + + True + True + OutlookGridStringResources.resx + + + True + True + PaletteSchemaResources.resx + True True @@ -350,9 +374,14 @@ VisualStudioRadioButtonImageResources.resx - True - True - SizeGripStyleResources.resx + True + True + SizeGripStyleResources.resx + + + True + True + SortingImageResources.resx True @@ -364,15 +393,20 @@ True TaskDialogImageResources.resx + + True + True + ToastNotificationImageResources.resx + True True GenericToolbarImageResources.resx - True - True - Microsoft365ToolbarImageResources.resx + True + True + Microsoft365ToolbarImageResources.resx True @@ -400,9 +434,9 @@ Office2016ToolbarImageResources.resx - True - True - Office2019ToolbarImageResources.resx + True + True + Office2019ToolbarImageResources.resx True @@ -410,9 +444,9 @@ SystemToolbarImageResources.resx - True - True - VisualStudioToolbarImageResources.resx + True + True + VisualStudioToolbarImageResources.resx True @@ -429,6 +463,11 @@ True VisualStudioImageResources.resx + + True + True + WindowsLogoImageResources.resx + @@ -596,6 +635,10 @@ ResXFileCodeGenerator Resources.Designer.cs + + ResXFileCodeGenerator + AboutToolkitImageResources.Designer.cs + ResXFileCodeGenerator BlueArrowResources.Designer.cs @@ -624,6 +667,10 @@ ResXFileCodeGenerator ColourScaleImageResources.Designer.cs + + ResXFileCodeGenerator + CommandLinkImageResources.Designer.cs + ResXFileCodeGenerator Microsoft365ControlBoxResources.Designer.cs @@ -705,8 +752,8 @@ GridImageResources.Designer.cs - ResXFileCodeGenerator - ToolkitLogoImageResources.Designer.cs + ResXFileCodeGenerator + ToolkitLogoImageResources.Designer.cs ResXFileCodeGenerator @@ -720,6 +767,18 @@ ResXFileCodeGenerator MessageBoxImageResources.Designer.cs + + ResXFileCodeGenerator + OutlookGridImageResources.Designer.cs + + + ResXFileCodeGenerator + OutlookGridStringResources.Designer.cs + + + ResXFileCodeGenerator + PaletteSchemaResources.Designer.cs + ResXFileCodeGenerator ProfessionalPendantImageResources.Designer.cs @@ -745,8 +804,12 @@ VisualStudioRadioButtonImageResources.Designer.cs - ResXFileCodeGenerator - SizeGripStyleResources.Designer.cs + ResXFileCodeGenerator + SizeGripStyleResources.Designer.cs + + + ResXFileCodeGenerator + SortingImageResources.Designer.cs ResXFileCodeGenerator @@ -756,13 +819,17 @@ ResXFileCodeGenerator TaskDialogImageResources.Designer.cs + + ResXFileCodeGenerator + ToastNotificationImageResources.Designer.cs + ResXFileCodeGenerator GenericToolbarImageResources.Designer.cs - ResXFileCodeGenerator - Microsoft365ToolbarImageResources.Designer.cs + ResXFileCodeGenerator + Microsoft365ToolbarImageResources.Designer.cs ResXFileCodeGenerator @@ -785,16 +852,16 @@ Office2016ToolbarImageResources.Designer.cs - ResXFileCodeGenerator - Office2019ToolbarImageResources.Designer.cs + ResXFileCodeGenerator + Office2019ToolbarImageResources.Designer.cs ResXFileCodeGenerator SystemToolbarImageResources.Designer.cs - ResXFileCodeGenerator - VisualStudioToolbarImageResources.Designer.cs + ResXFileCodeGenerator + VisualStudioToolbarImageResources.Designer.cs ResXFileCodeGenerator @@ -808,9 +875,16 @@ ResXFileCodeGenerator VisualStudioImageResources.Designer.cs + + ResXFileCodeGenerator + WindowsLogoImageResources.Designer.cs + + + + - + diff --git a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.sln b/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.sln deleted file mode 100644 index fc8b2de2d..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.sln +++ /dev/null @@ -1,36 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32519.111 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Krypton.Toolkit 2022", "Krypton.Toolkit 2022.csproj", "{CB654B81-1E40-4026-BC33-A3B3D9A63602}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestForm", "..\TestForm\TestForm.csproj", "{B41EEAD8-E642-464A-A2B6-75B9DC9B4077}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Preview|Any CPU = Preview|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CB654B81-1E40-4026-BC33-A3B3D9A63602}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB654B81-1E40-4026-BC33-A3B3D9A63602}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB654B81-1E40-4026-BC33-A3B3D9A63602}.Preview|Any CPU.ActiveCfg = Preview|Any CPU - {CB654B81-1E40-4026-BC33-A3B3D9A63602}.Preview|Any CPU.Build.0 = Preview|Any CPU - {CB654B81-1E40-4026-BC33-A3B3D9A63602}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB654B81-1E40-4026-BC33-A3B3D9A63602}.Release|Any CPU.Build.0 = Release|Any CPU - {B41EEAD8-E642-464A-A2B6-75B9DC9B4077}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B41EEAD8-E642-464A-A2B6-75B9DC9B4077}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B41EEAD8-E642-464A-A2B6-75B9DC9B4077}.Preview|Any CPU.ActiveCfg = Debug|Any CPU - {B41EEAD8-E642-464A-A2B6-75B9DC9B4077}.Preview|Any CPU.Build.0 = Debug|Any CPU - {B41EEAD8-E642-464A-A2B6-75B9DC9B4077}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B41EEAD8-E642-464A-A2B6-75B9DC9B4077}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {78521875-1831-4355-AEEA-2841D104AB7D} - EndGlobalSection -EndGlobal diff --git a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.sln.DotSettings b/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.sln.DotSettings deleted file mode 100644 index ccbf55bc0..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit 2022.sln.DotSettings +++ /dev/null @@ -1,3 +0,0 @@ - - True - True \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit.licenseheader b/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit.licenseheader index 93ab4f9da..7e0475429 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit.licenseheader +++ b/Source/Krypton Components/Krypton.Toolkit/Krypton.Toolkit.licenseheader @@ -6,7 +6,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBack.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBack.cs index 436446cc7..b02340658 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,8 +40,8 @@ public InternalStorage() // Set to default values BackDraw = InheritBool.Inherit; BackGraphicsHint = PaletteGraphicsHint.Inherit; - BackColor1 = Color.Empty; - BackColor2 = Color.Empty; + BackColor1 = GlobalStaticValues.EMPTY_COLOR; + BackColor2 = GlobalStaticValues.EMPTY_COLOR; BackColorStyle = PaletteColorStyle.Inherit; BackColorAlign = PaletteRectangleAlign.Inherit; BackColorAngle = -1; @@ -54,8 +54,8 @@ public InternalStorage() ///
public bool IsDefault => (BackDraw == InheritBool.Inherit) && (BackGraphicsHint == PaletteGraphicsHint.Inherit) && - (BackColor1 == Color.Empty) && - (BackColor2 == Color.Empty) && + (BackColor1 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor2 == GlobalStaticValues.EMPTY_COLOR) && (BackColorStyle == PaletteColorStyle.Inherit) && (BackColorAlign == PaletteRectangleAlign.Inherit) && (BackColorAngle == -1) && @@ -101,6 +101,7 @@ public PaletteBack(IPaletteBack? inherit, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_storage == null) || _storage.IsDefault; #endregion @@ -177,7 +178,7 @@ public InheritBool Draw ///
/// Palette value should be applicable to this state. /// InheritBool value. - public InheritBool GetBackDraw(PaletteState state) => Draw != InheritBool.Inherit ? Draw : _inherit.GetBackDraw(state); + public InheritBool GetBackDraw(PaletteState state) => Draw != InheritBool.Inherit ? Draw : _inherit!.GetBackDraw(state); #endregion #region GraphicsHint @@ -225,7 +226,7 @@ public PaletteGraphicsHint GraphicsHint /// Palette value should be applicable to this state. /// PaletteGraphicsHint value. public PaletteGraphicsHint GetBackGraphicsHint(PaletteState state) => - GraphicsHint != PaletteGraphicsHint.Inherit ? GraphicsHint : _inherit.GetBackGraphicsHint(state); + GraphicsHint != PaletteGraphicsHint.Inherit ? GraphicsHint : _inherit!.GetBackGraphicsHint(state); #endregion #region Color1 @@ -235,11 +236,11 @@ public PaletteGraphicsHint GetBackGraphicsHint(PaletteState state) => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Main background color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color1 { - get => _storage?.BackColor1 ?? Color.Empty; + get => _storage?.BackColor1 ?? GlobalStaticValues.EMPTY_COLOR; set { @@ -254,7 +255,7 @@ public Color Color1 } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { @@ -272,7 +273,7 @@ public Color Color1 ///
/// Palette value should be applicable to this state. /// Color value. - public Color GetBackColor1(PaletteState state) => Color1 != Color.Empty ? Color1 : _inherit.GetBackColor1(state); + public Color GetBackColor1(PaletteState state) => Color1 != GlobalStaticValues.EMPTY_COLOR ? Color1 : _inherit!.GetBackColor1(state); #endregion #region Color2 @@ -282,11 +283,11 @@ public Color Color1 [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Secondary background color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color2 { - get => _storage?.BackColor2 ?? Color.Empty; + get => _storage?.BackColor2 ?? GlobalStaticValues.EMPTY_COLOR; set { @@ -301,7 +302,7 @@ public Color Color2 } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { @@ -319,7 +320,7 @@ public Color Color2 ///
/// Palette value should be applicable to this state. /// Color value. - public Color GetBackColor2(PaletteState state) => Color2 != Color.Empty ? Color2 : _inherit.GetBackColor2(state); + public Color GetBackColor2(PaletteState state) => Color2 != GlobalStaticValues.EMPTY_COLOR ? Color2 : _inherit!.GetBackColor2(state); #endregion #region ColorStyle @@ -366,7 +367,7 @@ public PaletteColorStyle ColorStyle ///
/// Palette value should be applicable to this state. /// Color drawing style. - public PaletteColorStyle GetBackColorStyle(PaletteState state) => ColorStyle != PaletteColorStyle.Inherit ? ColorStyle : _inherit.GetBackColorStyle(state); + public PaletteColorStyle GetBackColorStyle(PaletteState state) => ColorStyle != PaletteColorStyle.Inherit ? ColorStyle : _inherit!.GetBackColorStyle(state); #endregion #region ColorAlign @@ -414,7 +415,7 @@ public PaletteRectangleAlign ColorAlign /// Palette value should be applicable to this state. /// Color alignment style. public PaletteRectangleAlign GetBackColorAlign(PaletteState state) => - ColorAlign != PaletteRectangleAlign.Inherit ? ColorAlign : _inherit.GetBackColorAlign(state); + ColorAlign != PaletteRectangleAlign.Inherit ? ColorAlign : _inherit!.GetBackColorAlign(state); #endregion #region ColorAngle @@ -461,7 +462,7 @@ public float ColorAngle ///
/// Palette value should be applicable to this state. /// Angle used for color drawing. - public float GetBackColorAngle(PaletteState state) => ColorAngle != -1 ? ColorAngle : _inherit.GetBackColorAngle(state); + public float GetBackColorAngle(PaletteState state) => ColorAngle != -1 ? ColorAngle : _inherit!.GetBackColorAngle(state); #endregion @@ -509,7 +510,7 @@ public Image? Image ///
/// Palette value should be applicable to this state. /// Image instance. - public Image? GetBackImage(PaletteState state) => Image ?? _inherit.GetBackImage(state); + public Image? GetBackImage(PaletteState state) => Image ?? _inherit?.GetBackImage(state); #endregion #region ImageStyle @@ -558,7 +559,7 @@ public PaletteImageStyle ImageStyle /// Image style value. public PaletteImageStyle GetBackImageStyle(PaletteState state) => ImageStyle != PaletteImageStyle.Inherit ? ImageStyle - : _inherit.GetBackImageStyle(state); + : _inherit!.GetBackImageStyle(state); #endregion #region ImageAlign @@ -606,7 +607,7 @@ public PaletteRectangleAlign ImageAlign /// Palette value should be applicable to this state. /// Image alignment style. public PaletteRectangleAlign GetBackImageAlign(PaletteState state) => - ImageAlign != PaletteRectangleAlign.Inherit ? ImageAlign : _inherit.GetBackImageAlign(state); + ImageAlign != PaletteRectangleAlign.Inherit ? ImageAlign : _inherit!.GetBackImageAlign(state); #endregion #region Protected diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackColor1.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackColor1.cs index 590e3b364..e193abe7a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackColor1.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackColor1.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInherit.cs index af1135759..7d275c1ea 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritForced.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritForced.cs index 58b56b32e..e2be55510 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritForced.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritForced.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,10 +29,10 @@ public class PaletteBackInheritForced : PaletteBackInherit /// Background palette to inherit from. public PaletteBackInheritForced([DisallowNull] IPaletteBack inherit) { - Debug.Assert(inherit != null); + Debug.Assert(inherit is not null); // Remember inheritance border - _inherit = inherit; + _inherit = inherit!; // Default values BorderIgnoreNormal = false; @@ -47,7 +47,7 @@ public PaletteBackInheritForced([DisallowNull] IPaletteBack inherit) public void SetInherit([DisallowNull] IPaletteBack paletteBack) { Debug.Assert(paletteBack != null); - _inherit = paletteBack; + _inherit = paletteBack!; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritOverride.cs index 74f32ea6b..f016907d0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,8 +36,8 @@ public PaletteBackInheritOverride([DisallowNull] IPaletteBack primary, Debug.Assert(backup != null); // Store incoming alternatives - _primary = primary; - _backup = backup; + _primary = primary ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(primary))); + _backup = backup ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(backup))); // Default other state Apply = true; @@ -145,7 +145,7 @@ public override Color GetBackColor1(PaletteState state) { Color ret = _primary.GetBackColor1(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetBackColor1(state); } @@ -169,7 +169,7 @@ public override Color GetBackColor2(PaletteState state) { Color ret = _primary.GetBackColor2(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetBackColor2(state); } @@ -263,7 +263,7 @@ public override float GetBackColorAngle(PaletteState state) { if (Apply) { - Image ret = _primary.GetBackImage(Override ? OverrideState : state) ?? _backup.GetBackImage(state); + Image ret = _primary.GetBackImage(Override ? OverrideState : state) ?? _backup.GetBackImage(state)!; return ret; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritRedirect.cs index 15318fc3a..306c5987e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackInheritRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -50,7 +50,7 @@ public PaletteBackInheritRedirect(PaletteRedirect? redirect, /// Gets the redirector instance. ///
/// Return the currently used redirector. - public PaletteRedirect? GetRedirector() => _redirect; + public PaletteRedirect GetRedirector() => _redirect ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); #endregion @@ -59,7 +59,7 @@ public PaletteBackInheritRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. ///
/// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion #region Style @@ -76,70 +76,70 @@ public PaletteBackInheritRedirect(PaletteRedirect? redirect, ///
/// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetBackDraw(PaletteState state) => _redirect.GetBackDraw(Style, state); + public override InheritBool GetBackDraw(PaletteState state) => _redirect?.GetBackDraw(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the graphics drawing hint. /// /// Palette value should be applicable to this state. /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBackGraphicsHint(PaletteState state) => _redirect.GetBackGraphicsHint(Style, state); + public override PaletteGraphicsHint GetBackGraphicsHint(PaletteState state) => _redirect?.GetBackGraphicsHint(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the first background color from the redirector. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetBackColor1(PaletteState state) => _redirect.GetBackColor1(Style, state); + public override Color GetBackColor1(PaletteState state) => _redirect?.GetBackColor1(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the second back color from the redirector. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetBackColor2(PaletteState state) => _redirect.GetBackColor2(Style, state); + public override Color GetBackColor2(PaletteState state) => _redirect?.GetBackColor2(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the color drawing style from the redirector. /// /// Palette value should be applicable to this state. /// Color drawing style. - public override PaletteColorStyle GetBackColorStyle(PaletteState state) => _redirect.GetBackColorStyle(Style, state); + public override PaletteColorStyle GetBackColorStyle(PaletteState state) => _redirect?.GetBackColorStyle(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the color alignment style from the redirector. /// /// Palette value should be applicable to this state. /// Color alignment style. - public override PaletteRectangleAlign GetBackColorAlign(PaletteState state) => _redirect.GetBackColorAlign(Style, state); + public override PaletteRectangleAlign GetBackColorAlign(PaletteState state) => _redirect?.GetBackColorAlign(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the color background angle from the redirector. /// /// Palette value should be applicable to this state. /// Angle used for color drawing. - public override float GetBackColorAngle(PaletteState state) => _redirect.GetBackColorAngle(Style, state); + public override float GetBackColorAngle(PaletteState state) => _redirect?.GetBackColorAngle(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets a background image from the redirector. /// /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetBackImage(PaletteState state) => _redirect.GetBackImage(Style, state); + /// Image instance, or null if _redirect is null. + public override Image? GetBackImage(PaletteState state) => _redirect?.GetBackImage(Style, state); /// /// Gets the background image style from the redirector. /// /// Palette value should be applicable to this state. /// Image style value. - public override PaletteImageStyle GetBackImageStyle(PaletteState state) => _redirect.GetBackImageStyle(Style, state); + public override PaletteImageStyle GetBackImageStyle(PaletteState state) => _redirect?.GetBackImageStyle(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the image alignment style from the redirector. /// /// Palette value should be applicable to this state. /// Image alignment style. - public override PaletteRectangleAlign GetBackImageAlign(PaletteState state) => _redirect.GetBackImageAlign(Style, state); + public override PaletteRectangleAlign GetBackImageAlign(PaletteState state) => _redirect?.GetBackImageAlign(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackLightenColors.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackLightenColors.cs index fdefc9c28..94f319fe9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackLightenColors.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackLightenColors.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackToPalette.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackToPalette.cs index 547b796cb..bfde8d694 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackToPalette.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBack/PaletteBackToPalette.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteBackToPalette : IPaletteBack { #region Instance Fields - private readonly PaletteBase? _palette; + private readonly PaletteBase _palette; #endregion @@ -28,7 +28,7 @@ public class PaletteBackToPalette : IPaletteBack ///
/// Source for getting all values. /// Style of values required. - public PaletteBackToPalette(PaletteBase? palette, PaletteBackStyle style) + public PaletteBackToPalette(PaletteBase palette, PaletteBackStyle style) { // Remember source palette _palette = palette; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorder.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorder.cs index b53379b94..0bd3b7a0a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorder.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,10 +42,10 @@ public InternalStorage() { // Set to default values BorderDraw = InheritBool.Inherit; - BorderDrawBorders = PaletteDrawBorders.All; + BorderDrawBorders = PaletteDrawBorders.Inherit; BorderGraphicsHint = PaletteGraphicsHint.Inherit; - BorderColor1 = Color.Empty; - BorderColor2 = Color.Empty; + BorderColor1 = GlobalStaticValues.EMPTY_COLOR; + BorderColor2 = GlobalStaticValues.EMPTY_COLOR; BorderColorStyle = PaletteColorStyle.Inherit; BorderColorAlign = PaletteRectangleAlign.Inherit; BorderColorAngle = -1; @@ -61,13 +61,13 @@ public InternalStorage() public bool IsDefault => (BorderDraw == InheritBool.Inherit) && (BorderDrawBorders == PaletteDrawBorders.Inherit) && (BorderGraphicsHint == PaletteGraphicsHint.Inherit) && - (BorderColor1 == Color.Empty) && - (BorderColor2 == Color.Empty) && + (BorderColor1 == GlobalStaticValues.EMPTY_COLOR) && + (BorderColor2 == GlobalStaticValues.EMPTY_COLOR) && (BorderColorStyle == PaletteColorStyle.Inherit) && (BorderColorAlign == PaletteRectangleAlign.Inherit) && - (BorderColorAngle == -1f) && + (BorderColorAngle == -1) && (BorderWidth == -1) && - (BorderRounding == -1f) && + (BorderRounding == -1) && (BorderImage == null) && (BorderImageStyle == PaletteImageStyle.Inherit) && (BorderImageAlign == PaletteRectangleAlign.Inherit); @@ -100,7 +100,7 @@ public PaletteBorder([DisallowNull] IPaletteBorder inherit, Debug.Assert(inherit != null); // Remember inheritance - _inherit = inherit!; + _inherit = inherit ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(inherit))); // Store the provided paint notification delegate NeedPaint = needPaint; @@ -112,6 +112,7 @@ public PaletteBorder([DisallowNull] IPaletteBorder inherit, /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_storage == null) || _storage.IsDefault; #endregion @@ -262,7 +263,7 @@ public PaletteDrawBorders GetBorderDrawBorders(PaletteState state) [Description(@"Hint for drawing graphics.")] [DefaultValue(PaletteGraphicsHint.Inherit)] [RefreshProperties(RefreshProperties.All)] - public PaletteGraphicsHint GraphicsHint + public virtual PaletteGraphicsHint GraphicsHint { get => _storage?.BorderGraphicsHint ?? PaletteGraphicsHint.Inherit; @@ -297,7 +298,7 @@ public PaletteGraphicsHint GraphicsHint ///
/// Palette value should be applicable to this state. /// PaletteGraphicsHint value. - public PaletteGraphicsHint GetBorderGraphicsHint(PaletteState state) => + public virtual PaletteGraphicsHint GetBorderGraphicsHint(PaletteState state) => GraphicsHint != PaletteGraphicsHint.Inherit ? GraphicsHint : _inherit.GetBorderGraphicsHint(state); #endregion @@ -308,7 +309,7 @@ public PaletteGraphicsHint GetBorderGraphicsHint(PaletteState state) => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Main border color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color1 { @@ -320,7 +321,7 @@ public Color Color1 } else { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } } @@ -337,7 +338,7 @@ public Color Color1 } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { @@ -355,7 +356,7 @@ public Color Color1 ///
/// Palette value should be applicable to this state. /// Color value. - public Color GetBorderColor1(PaletteState state) => Color1 != Color.Empty ? Color1 : _inherit.GetBorderColor1(state); + public Color GetBorderColor1(PaletteState state) => Color1 != GlobalStaticValues.EMPTY_COLOR ? Color1 : _inherit.GetBorderColor1(state); #endregion @@ -366,11 +367,11 @@ public Color Color1 [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Secondary border color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color2 { - get => _storage?.BorderColor2 ?? Color.Empty; + get => _storage?.BorderColor2 ?? GlobalStaticValues.EMPTY_COLOR; set { @@ -385,7 +386,7 @@ public Color Color2 } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { @@ -403,7 +404,7 @@ public Color Color2 ///
/// Palette value should be applicable to this state. /// Color value. - public Color GetBorderColor2(PaletteState state) => Color2 != Color.Empty ? Color2 : _inherit.GetBorderColor2(state); + public Color GetBorderColor2(PaletteState state) => Color2 != GlobalStaticValues.EMPTY_COLOR ? Color2 : _inherit.GetBorderColor2(state); #endregion #region ColorStyle @@ -559,7 +560,7 @@ public float ColorAngle [Description(@"Border width.")] [DefaultValue(-1)] [RefreshProperties(RefreshProperties.All)] - public int Width + public virtual int Width { get => _storage?.BorderWidth ?? -1; @@ -604,11 +605,11 @@ public int Width [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"How much to round the border corners.")] - [DefaultValue(GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE)] + [DefaultValue(GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE)] [RefreshProperties(RefreshProperties.All)] public float Rounding { - get => _storage?.BorderRounding ?? GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + get => _storage?.BorderRounding ?? GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; set { @@ -623,7 +624,7 @@ public float Rounding } else { - if (value != -1f) + if (value != GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE) { _storage = new InternalStorage { @@ -636,6 +637,9 @@ public float Rounding } } + private void ResetRounding() => Rounding = GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; + private bool ShouldSerializeRounding() => Rounding != GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; + /// /// Gets the border rounding. /// diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInherit.cs index 821185f44..b5505be66 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritForced.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritForced.cs index 1e6195a97..ec9db435e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritForced.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritForced.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -142,14 +142,14 @@ public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteState state) => ///
/// Palette value should be applicable to this state. /// Color value. - public override Color GetBorderColor1(PaletteState state) => _inherit?.GetBorderColor1(state) ?? Color.Empty; + public override Color GetBorderColor1(PaletteState state) => _inherit?.GetBorderColor1(state) ?? GlobalStaticValues.EMPTY_COLOR; /// /// Gets the second border color. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetBorderColor2(PaletteState state) => _inherit?.GetBorderColor2(state) ?? Color.Empty; + public override Color GetBorderColor2(PaletteState state) => _inherit?.GetBorderColor2(state) ?? GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color drawing style. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritOverride.cs index 08b834ef5..6f4729022 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,8 +36,8 @@ public PaletteBorderInheritOverride([DisallowNull] IPaletteBorder primary, Debug.Assert(backup != null); // Store incoming alternatives - _primary = primary; - _backup = backup; + _primary = primary ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(primary))); + _backup = backup ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(backup))); // Default other state Apply = true; @@ -169,7 +169,7 @@ public override Color GetBorderColor1(PaletteState state) { Color ret = _primary.GetBorderColor1(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetBorderColor1(state); } @@ -193,7 +193,7 @@ public override Color GetBorderColor2(PaletteState state) { Color ret = _primary.GetBorderColor2(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetBorderColor2(state); } @@ -335,7 +335,7 @@ public override float GetBorderRounding(PaletteState state) { if (Apply) { - Image ret = _primary.GetBorderImage(Override ? OverrideState : state) ?? _backup.GetBorderImage(state); + Image ret = _primary.GetBorderImage(Override ? OverrideState : state) ?? _backup.GetBorderImage(state)!; return ret; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritRedirect.cs index 67a7cfb49..915fa5a2e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderInheritRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -58,7 +58,7 @@ public PaletteBorderInheritRedirect(PaletteRedirect? redirect, /// Gets the redirector instance. /// /// Return the currently used redirector. - public PaletteRedirect? GetRedirector() => _redirect; + public PaletteRedirect GetRedirector() => _redirect ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); #endregion @@ -67,7 +67,7 @@ public PaletteBorderInheritRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. ///
/// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion #region Style @@ -84,92 +84,93 @@ public PaletteBorderInheritRedirect(PaletteRedirect? redirect, ///
/// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetBorderDraw(PaletteState state) => - OverrideBorderToFalse ? InheritBool.False : _redirect.GetBorderDraw(Style, state); + public override InheritBool GetBorderDraw(PaletteState state) => OverrideBorderToFalse + ? InheritBool.False + : _redirect?.GetBorderDraw(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets a value indicating which borders to draw. /// /// Palette value should be applicable to this state. /// PaletteDrawBorders value. - public override PaletteDrawBorders GetBorderDrawBorders(PaletteState state) => _redirect.GetBorderDrawBorders(Style, state); + public override PaletteDrawBorders GetBorderDrawBorders(PaletteState state) => _redirect?.GetBorderDrawBorders(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the graphics drawing hint. /// /// Palette value should be applicable to this state. /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteState state) => _redirect.GetBorderGraphicsHint(Style, state); + public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteState state) => _redirect?.GetBorderGraphicsHint(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the first border color from the redirector. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetBorderColor1(PaletteState state) => _redirect.GetBorderColor1(Style, state); + public override Color GetBorderColor1(PaletteState state) => _redirect?.GetBorderColor1(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the second border color from the redirector. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetBorderColor2(PaletteState state) => _redirect.GetBorderColor2(Style, state); + public override Color GetBorderColor2(PaletteState state) => _redirect?.GetBorderColor2(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the color drawing style from the redirector. /// /// Palette value should be applicable to this state. /// Color drawing style. - public override PaletteColorStyle GetBorderColorStyle(PaletteState state) => _redirect.GetBorderColorStyle(Style, state); + public override PaletteColorStyle GetBorderColorStyle(PaletteState state) => _redirect?.GetBorderColorStyle(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the color alignment style from the redirector. /// /// Palette value should be applicable to this state. /// Color alignment style. - public override PaletteRectangleAlign GetBorderColorAlign(PaletteState state) => _redirect.GetBorderColorAlign(Style, state); + public override PaletteRectangleAlign GetBorderColorAlign(PaletteState state) => _redirect?.GetBorderColorAlign(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the color border angle from the redirector. /// /// Palette value should be applicable to this state. /// Angle used for color drawing. - public override float GetBorderColorAngle(PaletteState state) => _redirect.GetBorderColorAngle(Style, state); + public override float GetBorderColorAngle(PaletteState state) => _redirect?.GetBorderColorAngle(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the border width from the redirector. /// /// Palette value should be applicable to this state. /// Border width. - public override int GetBorderWidth(PaletteState state) => _redirect.GetBorderWidth(Style, state); + public override int GetBorderWidth(PaletteState state) => _redirect?.GetBorderWidth(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the border rounding from the redirector. /// /// Palette value should be applicable to this state. /// Border rounding. - public override float GetBorderRounding(PaletteState state) => _redirect.GetBorderRounding(Style, state); + public override float GetBorderRounding(PaletteState state) => _redirect?.GetBorderRounding(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets a border image from the redirector. /// /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetBorderImage(PaletteState state) => _redirect.GetBorderImage(Style, state); + /// Image instance, or null if _redirect is null. + public override Image? GetBorderImage(PaletteState state) => _redirect?.GetBorderImage(Style, state); /// /// Gets the border image style from the redirector. /// /// Palette value should be applicable to this state. /// Image style value. - public override PaletteImageStyle GetBorderImageStyle(PaletteState state) => _redirect.GetBorderImageStyle(Style, state); + public override PaletteImageStyle GetBorderImageStyle(PaletteState state) => _redirect?.GetBorderImageStyle(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); /// /// Gets the image alignment style from the redirector. /// /// Palette value should be applicable to this state. /// Image alignment style. - public override PaletteRectangleAlign GetBorderImageAlign(PaletteState state) => _redirect.GetBorderImageAlign(Style, state); + public override PaletteRectangleAlign GetBorderImageAlign(PaletteState state) => _redirect?.GetBorderImageAlign(Style, state) ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_redirect))); #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderToPalette.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderToPalette.cs index d33fb4395..5a44e7ae6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderToPalette.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteBorderToPalette.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteBorderToPalette : IPaletteBorder { #region Instance Fields - private readonly PaletteBase? _palette; + private readonly PaletteBase _palette; #endregion @@ -28,7 +28,7 @@ public class PaletteBorderToPalette : IPaletteBorder /// /// Source for getting all values. /// Style of values required. - public PaletteBorderToPalette(PaletteBase? palette, + public PaletteBorderToPalette(PaletteBase palette, PaletteBorderStyle style) { // Remember inheritance diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteFormBorder.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteFormBorder.cs new file mode 100644 index 000000000..93fb214dd --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteBorder/PaletteFormBorder.cs @@ -0,0 +1,119 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Implement storage for palette border details. + /// + public class PaletteFormBorder : PaletteBorder + { + #region Identity + /// + /// Initialize a new instance of the PaletteBorder class. + /// + /// Source for inheriting defaulted values. + /// Delegate for notifying paint requests. + public PaletteFormBorder([DisallowNull] IPaletteBorder inherit, + NeedPaintHandler? needPaint) + : base(inherit, needPaint) + { + } + #endregion + + #region Width + internal bool UseThemeFormChromeBorderWidth { get; set; } = true; + private FormBorderStyle _lastFormFormBorderStyle = FormBorderStyle.Sizable; + + /// + /// Gets and sets the border width. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Border width.")] + [DefaultValue(-1)] + [RefreshProperties(RefreshProperties.All)] + public override int Width + { + get => !UseThemeFormChromeBorderWidth + ? BorderWidths(_lastFormFormBorderStyle).xBorder + : base.Width; + + set => base.Width = value; + } + + /// + /// Gets the graphics hint for drawing the border. + /// + [KryptonPersist(false)] + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [DefaultValue(PaletteGraphicsHint.None)] + public override PaletteGraphicsHint GraphicsHint + { + // #1757 + get => PaletteGraphicsHint.None; + + set + { + // Do nothing + } + } + + /// + public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteState state) + { + // #1757: Make sure that the little transparency elements on the curves do not show up for Form Borders + return PaletteGraphicsHint.None; + } + + /// https://github.com/Krypton-Suite/Standard-Toolkit/issues/139 + internal (int xBorder, int yBorder) BorderWidths(FormBorderStyle formFormBorderStyle) + { + //GraphicsHint = PaletteGraphicsHint.None; + var xBorder = base.Width; + var yBorder = base.Width; + if (!UseThemeFormChromeBorderWidth) + { + _lastFormFormBorderStyle = formFormBorderStyle; + switch (formFormBorderStyle) + { + case FormBorderStyle.None: + xBorder = 0; + yBorder = 0; + break; + case FormBorderStyle.FixedSingle: + case FormBorderStyle.FixedToolWindow: + xBorder = PI.GetSystemMetrics(PI.SM_.CXFIXEDFRAME); + yBorder = PI.GetSystemMetrics(PI.SM_.CYFIXEDFRAME); + break; + case FormBorderStyle.Fixed3D: + xBorder = PI.GetSystemMetrics(PI.SM_.CXEDGE); + yBorder = PI.GetSystemMetrics(PI.SM_.CYEDGE); + break; + case FormBorderStyle.FixedDialog: + xBorder = PI.GetSystemMetrics(PI.SM_.CXDLGFRAME); + yBorder = PI.GetSystemMetrics(PI.SM_.CYDLGFRAME); + break; + case FormBorderStyle.Sizable: + case FormBorderStyle.SizableToolWindow: + xBorder = PI.GetSystemMetrics(PI.SM_.CXSIZEFRAME); + yBorder = PI.GetSystemMetrics(PI.SM_.CYSIZEFRAME); + break; + default: + throw new ArgumentOutOfRangeException(nameof(formFormBorderStyle), formFormBorderStyle, null); + } + } + + return (xBorder, yBorder); + } + #endregion + + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContent.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContent.cs index 597dfcf68..00afc4e19 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContent.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContent.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -86,7 +84,7 @@ public PaletteContent([DisallowNull] IPaletteContent inherit, Debug.Assert(inherit != null); // Remember inheritance - _inherit = inherit; + _inherit = inherit!; // Store the provided paint notification delegate NeedPaint = needPaint; @@ -103,10 +101,11 @@ public PaletteContent([DisallowNull] IPaletteContent inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => _image.IsDefault && - _shortText.IsDefault && - _longText.IsDefault && - ((_storage == null) || _storage.IsDefault); + _shortText.IsDefault && + _longText.IsDefault && + ((_storage == null) || _storage.IsDefault); #endregion @@ -127,7 +126,7 @@ public virtual void PopulateFromBase(PaletteState state) // Get the values and set into storage Draw = GetContentDraw(state); DrawFocus = GetContentDrawFocus(state); - Image.ImageH = GetContentImageH(state); + Image!.ImageH = GetContentImageH(state); Image.ImageV = GetContentImageV(state); Image.Effect = GetContentImageEffect(state); Image.ImageColorMap = GetContentImageColorMap(state); @@ -308,7 +307,7 @@ public PaletteImageEffect GetContentImageEffect(PaletteState state) => /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentImageColorMap(PaletteState state) => _image.ImageColorMap != Color.Empty + public Color GetContentImageColorMap(PaletteState state) => _image.ImageColorMap != GlobalStaticValues.EMPTY_COLOR ? _image.ImageColorMap : _inherit.GetContentImageColorMap(state); @@ -317,7 +316,7 @@ public Color GetContentImageColorMap(PaletteState state) => _image.ImageColorMap /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentImageColorTo(PaletteState state) => _image.ImageColorTo != Color.Empty + public Color GetContentImageColorTo(PaletteState state) => _image.ImageColorTo != GlobalStaticValues.EMPTY_COLOR ? _image.ImageColorTo : _inherit.GetContentImageColorTo(state); @@ -340,14 +339,14 @@ public Color GetContentImageColorTo(PaletteState state) => _image.ImageColorTo ! /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextFont(PaletteState state) => _shortText.Font ?? _inherit.GetContentShortTextFont(state); + public Font? GetContentShortTextFont(PaletteState state) => _shortText.Font ?? _inherit.GetContentShortTextFont(state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextNewFont(PaletteState state) => _shortText.Font ?? _inherit.GetContentShortTextNewFont(state); + public Font? GetContentShortTextNewFont(PaletteState state) => _shortText.Font ?? _inherit.GetContentShortTextNewFont(state); /// /// Gets the actual text rendering hint for short text. @@ -373,7 +372,7 @@ public PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteState state) => /// /// Palette value should be applicable to this state. /// PaletteTextTrim value. - public PaletteTextTrim GetContentShortTextTrim(PaletteState state) => + public PaletteTextTrim GetContentShortTextTrim(PaletteState state) => _shortText.Trim != PaletteTextTrim.Inherit ? _shortText.Trim : _inherit.GetContentShortTextTrim(state); @@ -419,8 +418,8 @@ public InheritBool GetContentShortTextMultiLine(PaletteState state) => /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentShortTextColor1(PaletteState state) => - ShortText.Color1 != Color.Empty + public Color GetContentShortTextColor1(PaletteState state) => + ShortText.Color1 != GlobalStaticValues.EMPTY_COLOR ? ShortText.Color1 : _inherit.GetContentShortTextColor1(state); @@ -429,7 +428,7 @@ public Color GetContentShortTextColor1(PaletteState state) => /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentShortTextColor2(PaletteState state) => ShortText.Color2 != Color.Empty + public Color GetContentShortTextColor2(PaletteState state) => ShortText.Color2 != GlobalStaticValues.EMPTY_COLOR ? ShortText.Color2 : _inherit.GetContentShortTextColor2(state); @@ -458,7 +457,7 @@ public PaletteRectangleAlign GetContentShortTextColorAlign(PaletteState state) = /// /// Palette value should be applicable to this state. /// Angle used for color drawing. - public float GetContentShortTextColorAngle(PaletteState state) => ShortText.ColorAngle != -1 + public float GetContentShortTextColorAngle(PaletteState state) => ShortText.ColorAngle != -1f ? ShortText.ColorAngle : _inherit.GetContentShortTextColorAngle(state); @@ -508,14 +507,14 @@ public PaletteRectangleAlign GetContentShortTextImageAlign(PaletteState state) = /// /// Font value. /// Palette value should be applicable to this state. - public Font GetContentLongTextFont(PaletteState state) => _longText.Font ?? _inherit.GetContentLongTextFont(state); + public Font? GetContentLongTextFont(PaletteState state) => _longText.Font ?? _inherit.GetContentLongTextFont(state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentLongTextNewFont(PaletteState state) => _longText.Font ?? _inherit.GetContentLongTextNewFont(state); + public Font? GetContentLongTextNewFont(PaletteState state) => _longText.Font ?? _inherit.GetContentLongTextNewFont(state); /// /// Gets the actual text rendering hint for long text. @@ -558,7 +557,7 @@ public PaletteRelativeAlign GetContentLongTextH(PaletteState state) => /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public PaletteRelativeAlign GetContentLongTextV(PaletteState state) => + public PaletteRelativeAlign GetContentLongTextV(PaletteState state) => _longText.TextV != PaletteRelativeAlign.Inherit ? _longText.TextV : _inherit.GetContentLongTextV(state); @@ -578,7 +577,7 @@ public PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteState state) => /// /// Palette value should be applicable to this state. /// InheritBool value. - public InheritBool GetContentLongTextMultiLine(PaletteState state) => + public InheritBool GetContentLongTextMultiLine(PaletteState state) => _longText.MultiLine != InheritBool.Inherit ? _longText.MultiLine : _inherit.GetContentLongTextMultiLine(state); @@ -588,8 +587,8 @@ public InheritBool GetContentLongTextMultiLine(PaletteState state) => /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentLongTextColor1(PaletteState state) => - LongText.Color1 != Color.Empty + public Color GetContentLongTextColor1(PaletteState state) => + LongText.Color1 != GlobalStaticValues.EMPTY_COLOR ? LongText.Color1 : _inherit.GetContentLongTextColor1(state); @@ -598,8 +597,8 @@ public Color GetContentLongTextColor1(PaletteState state) => /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentLongTextColor2(PaletteState state) => - LongText.Color2 != Color.Empty + public Color GetContentLongTextColor2(PaletteState state) => + LongText.Color2 != GlobalStaticValues.EMPTY_COLOR ? LongText.Color2 : _inherit.GetContentLongTextColor2(state); @@ -628,8 +627,8 @@ public PaletteRectangleAlign GetContentLongTextColorAlign(PaletteState state) => /// /// Palette value should be applicable to this state. /// Angle used for color drawing. - public float GetContentLongTextColorAngle(PaletteState state) => - LongText.ColorAngle != -1 + public float GetContentLongTextColorAngle(PaletteState state) => + LongText.ColorAngle != -1f ? LongText.ColorAngle : _inherit.GetContentLongTextColorAngle(state); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentImage.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentImage.cs index 948ed77b3..455a8145b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentImage.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,8 +35,8 @@ public InternalStorage() ContentImageH = PaletteRelativeAlign.Inherit; ContentImageV = PaletteRelativeAlign.Inherit; ContentEffect = PaletteImageEffect.Inherit; - ContentImageColorMap = Color.Empty; - ContentImageColorTo = Color.Empty; + ContentImageColorMap = GlobalStaticValues.EMPTY_COLOR; + ContentImageColorTo = GlobalStaticValues.EMPTY_COLOR; } /// @@ -45,8 +45,8 @@ public InternalStorage() public bool IsDefault => (ContentImageH == PaletteRelativeAlign.Inherit) && (ContentImageV == PaletteRelativeAlign.Inherit) && (ContentEffect == PaletteImageEffect.Inherit) && - (ContentImageColorMap == Color.Empty) && - (ContentImageColorTo == Color.Empty); + (ContentImageColorMap == GlobalStaticValues.EMPTY_COLOR) && + (ContentImageColorTo == GlobalStaticValues.EMPTY_COLOR); } #endregion @@ -79,6 +79,7 @@ public PaletteContentImage(NeedPaintHandler? needPaint) => /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_storage == null) || _storage.IsDefault; #endregion @@ -210,11 +211,11 @@ public PaletteImageEffect Effect [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Color to remap in the image.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color ImageColorMap { - get => _storage?.ContentImageColorMap ?? Color.Empty; + get => _storage?.ContentImageColorMap ?? GlobalStaticValues.EMPTY_COLOR; set { @@ -229,7 +230,7 @@ public Color ImageColorMap } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { @@ -250,11 +251,11 @@ public Color ImageColorMap [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Color to use in place of the image map.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color ImageColorTo { - get => _storage?.ContentImageColorTo ?? Color.Empty; + get => _storage?.ContentImageColorTo ?? GlobalStaticValues.EMPTY_COLOR; set { @@ -269,7 +270,7 @@ public Color ImageColorTo } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInherit.cs index 5bb48f214..32855f78d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -73,14 +73,14 @@ public abstract class PaletteContentInherit : GlobalId, /// /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentShortTextFont(PaletteState state); + public abstract Font? GetContentShortTextFont(PaletteState state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentShortTextNewFont(PaletteState state); + public abstract Font? GetContentShortTextNewFont(PaletteState state); /// /// Gets the rendering hint for the short text. @@ -192,14 +192,14 @@ public abstract class PaletteContentInherit : GlobalId, /// /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentLongTextFont(PaletteState state); + public abstract Font? GetContentLongTextFont(PaletteState state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentLongTextNewFont(PaletteState state); + public abstract Font? GetContentLongTextNewFont(PaletteState state); /// /// Gets the rendering hint for the long text. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritForced.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritForced.cs index 2d170b798..3d7818672 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritForced.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritForced.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,7 +44,7 @@ public PaletteContentInheritForced(IPaletteContent inherit) public void SetInherit([DisallowNull] IPaletteContent paletteContent) { Debug.Assert(paletteContent != null); - _inherit = paletteContent; + _inherit = paletteContent ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(paletteContent))); } #endregion @@ -111,14 +111,14 @@ public void SetInherit([DisallowNull] IPaletteContent paletteContent) /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteState state) => _inherit.GetContentShortTextFont(state); + public override Font? GetContentShortTextFont(PaletteState state) => _inherit.GetContentShortTextFont(state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteState state) => _inherit.GetContentShortTextNewFont(state); + public override Font? GetContentShortTextNewFont(PaletteState state) => _inherit.GetContentShortTextNewFont(state); /// /// Gets the rendering hint for the short text. @@ -232,14 +232,14 @@ public override PaletteRelativeAlign GetContentShortTextH(PaletteState state) => /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteState state) => _inherit.GetContentLongTextFont(state); + public override Font? GetContentLongTextFont(PaletteState state) => _inherit.GetContentLongTextFont(state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteState state) => _inherit.GetContentLongTextNewFont(state); + public override Font? GetContentLongTextNewFont(PaletteState state) => _inherit.GetContentLongTextNewFont(state); /// /// Gets the rendering hint for the long text. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritOverride.cs index 32409843a..cbc78ccc5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -51,8 +51,8 @@ public PaletteContentInheritOverride([DisallowNull] IPaletteContent primary, Debug.Assert(backup != null); // Store incoming values - _primary = primary; - _backup = backup; + _primary = primary ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(primary))); + _backup = backup ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(backup))); Apply = apply; OverrideState = overrideState; @@ -232,7 +232,7 @@ public override Color GetContentImageColorMap(PaletteState state) { Color ret = _primary.GetContentImageColorMap(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetContentImageColorMap(state); } @@ -256,7 +256,7 @@ public override Color GetContentImageColorTo(PaletteState state) { Color ret = _primary.GetContentImageColorTo(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetContentImageColorTo(state); } @@ -274,11 +274,11 @@ public override Color GetContentImageColorTo(PaletteState state) /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteState state) + public override Font? GetContentShortTextFont(PaletteState state) { if (Apply) { - Font ret = _primary.GetContentShortTextFont(Override ? OverrideState : state) ?? _backup.GetContentShortTextFont(state); + Font? ret = _primary.GetContentShortTextFont(Override ? OverrideState : state) ?? _backup.GetContentShortTextFont(state); return ret; } @@ -293,11 +293,11 @@ public override Font GetContentShortTextFont(PaletteState state) /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteState state) { if (Apply) { - Font ret = _primary.GetContentShortTextNewFont(Override ? OverrideState : state) ?? _backup.GetContentShortTextNewFont(state); + Font? ret = _primary.GetContentShortTextNewFont(Override ? OverrideState : state) ?? _backup.GetContentShortTextNewFont(state); return ret; } @@ -486,7 +486,7 @@ public override Color GetContentShortTextColor1(PaletteState state) { Color ret = _primary.GetContentShortTextColor1(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetContentShortTextColor1(state); } @@ -510,7 +510,7 @@ public override Color GetContentShortTextColor2(PaletteState state) { Color ret = _primary.GetContentShortTextColor2(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetContentShortTextColor2(state); } @@ -604,7 +604,7 @@ public override float GetContentShortTextColorAngle(PaletteState state) { if (Apply) { - Image ret = _primary.GetContentShortTextImage(Override ? OverrideState : state) ?? _backup.GetContentShortTextImage(state); + Image ret = _primary.GetContentShortTextImage(Override ? OverrideState : state) ?? _backup.GetContentShortTextImage(state)!; return ret; } @@ -667,11 +667,11 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteState /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteState state) + public override Font? GetContentLongTextFont(PaletteState state) { if (Apply) { - Font ret = _primary.GetContentLongTextFont(Override ? OverrideState : state) ?? _backup.GetContentLongTextFont(state); + Font? ret = _primary.GetContentLongTextFont(Override ? OverrideState : state) ?? _backup.GetContentLongTextFont(state); return ret; } @@ -686,11 +686,11 @@ public override Font GetContentLongTextFont(PaletteState state) /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteState state) { if (Apply) { - Font ret = _primary.GetContentLongTextNewFont(Override ? OverrideState : state) ?? _backup.GetContentLongTextNewFont(state); + Font? ret = _primary.GetContentLongTextNewFont(Override ? OverrideState : state) ?? _backup.GetContentLongTextNewFont(state); return ret; } @@ -879,7 +879,7 @@ public override Color GetContentLongTextColor1(PaletteState state) { Color ret = _primary.GetContentLongTextColor1(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetContentLongTextColor1(state); } @@ -903,7 +903,7 @@ public override Color GetContentLongTextColor2(PaletteState state) { Color ret = _primary.GetContentLongTextColor2(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetContentLongTextColor2(state); } @@ -997,7 +997,7 @@ public override float GetContentLongTextColorAngle(PaletteState state) { if (Apply) { - Image ret = _primary.GetContentLongTextImage(Override ? OverrideState : state) ?? _backup.GetContentLongTextImage(state); + Image ret = _primary.GetContentLongTextImage(Override ? OverrideState : state) ?? _backup.GetContentLongTextImage(state)!; return ret; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritRedirect.cs index f1f5b8789..b92e94d48 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentInheritRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteContentInheritRedirect : PaletteContentInherit { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion @@ -30,13 +30,15 @@ public class PaletteContentInheritRedirect : PaletteContentInherit public PaletteContentInheritRedirect(PaletteContentStyle style) : this(null, style) { + // Given the need of a valid PaletteRedirect in this. + // This call actually invalid and shoudl be removed. } - + /// /// Initialize a new instance of the PaletteContentInheritRedirect class. /// /// Source for inherit requests. - public PaletteContentInheritRedirect(PaletteRedirect? redirect) + public PaletteContentInheritRedirect(PaletteRedirect redirect) : this(redirect, PaletteContentStyle.ButtonStandalone) { } @@ -49,7 +51,7 @@ public PaletteContentInheritRedirect(PaletteRedirect? redirect) public PaletteContentInheritRedirect(PaletteRedirect? redirect, PaletteContentStyle style) { - _redirect = redirect; + _redirect = redirect!; Style = style; } #endregion @@ -59,7 +61,7 @@ public PaletteContentInheritRedirect(PaletteRedirect? redirect, /// Gets the redirector instance. /// /// Return the currently used redirector. - public PaletteRedirect? GetRedirector() => _redirect; + public PaletteRedirect GetRedirector() => _redirect; #endregion @@ -68,7 +70,7 @@ public PaletteContentInheritRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion #region Style @@ -134,14 +136,14 @@ public PaletteContentInheritRedirect(PaletteRedirect? redirect, /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteState state) => _redirect.GetContentShortTextFont(Style, state); + public override Font? GetContentShortTextFont(PaletteState state) => _redirect.GetContentShortTextFont(Style, state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteState state) => _redirect.GetContentShortTextNewFont(Style, state); + public override Font? GetContentShortTextNewFont(PaletteState state) => _redirect.GetContentShortTextNewFont(Style, state); /// /// Gets the rendering hint for the short text. @@ -253,14 +255,14 @@ public PaletteContentInheritRedirect(PaletteRedirect? redirect, /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteState state) => _redirect.GetContentLongTextFont(Style, state); + public override Font? GetContentLongTextFont(PaletteState state) => _redirect.GetContentLongTextFont(Style, state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteState state) => _redirect.GetContentLongTextNewFont(Style, state); + public override Font? GetContentLongTextNewFont(PaletteState state) => _redirect.GetContentLongTextNewFont(Style, state); /// /// Gets the rendering hint for the long text. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustImage.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustImage.cs index c4bf1168b..c5236eeba 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustImage.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public class PaletteContentJustImage : PaletteContent /// Source for inheriting defaulted values. /// Delegate for notifying paint requests. public PaletteContentJustImage(IPaletteContent inherit, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : base(inherit, needPaint) { } @@ -39,7 +39,7 @@ public override void PopulateFromBase(PaletteState state) { // Get the values and set into storage Draw = GetContentDraw(state); - Image.ImageH = GetContentImageH(state); + Image!.ImageH = GetContentImageH(state); Image.ImageV = GetContentImageV(state); Image.Effect = GetContentImageEffect(state); Image.ImageColorMap = GetContentImageColorMap(state); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustShortText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustShortText.cs index 9faf0b0c6..f81f4349f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustShortText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustShortText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -13,7 +13,7 @@ namespace Krypton.Toolkit { /// - /// Implement storage but remove accesss to the non short text properties. + /// Implement storage but remove access to the non short text properties. /// public class PaletteContentJustShortText : PaletteContentJustText { @@ -40,9 +40,9 @@ public PaletteContentJustShortText(IPaletteContent inherit) /// /// Source for inheriting defaulted values. /// Delegate for notifying paint requests. - public PaletteContentJustShortText(IPaletteContent inherit, - NeedPaintHandler needPaint) - : base(inherit, needPaint) + public PaletteContentJustShortText(IPaletteContent? inherit, + NeedPaintHandler? needPaint) + : base(inherit!, needPaint) { } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustText.cs index 594134b8c..a7a36233e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentJustText.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,14 +16,6 @@ namespace Krypton.Toolkit public class PaletteContentJustText : PaletteContent { #region Identity - /// - /// Initialize a new instance of the PaletteContentJustText class. - /// - public PaletteContentJustText() - : this(null, null) - { - } - /// /// Initialize a new instance of the PaletteContentJustText class. /// @@ -41,7 +31,7 @@ public PaletteContentJustText(IPaletteContent inherit) /// Source for inheriting defaulted values. /// Delegate for notifying paint requests. public PaletteContentJustText(IPaletteContent inherit, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : base(inherit, needPaint) { } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentText.cs index e351fa045..e0540d080 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentText.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -50,8 +48,8 @@ public InternalStorage() ContentTextV = PaletteRelativeAlign.Inherit; ContentTextMultiLineH = PaletteRelativeAlign.Inherit; ContentTextMultiLine = InheritBool.Inherit; - ContentTextColor1 = Color.Empty; - ContentTextColor2 = Color.Empty; + ContentTextColor1 = GlobalStaticValues.EMPTY_COLOR; + ContentTextColor2 = GlobalStaticValues.EMPTY_COLOR; ContentTextColorStyle = PaletteColorStyle.Inherit; ContentTextColorAlign = PaletteRectangleAlign.Inherit; ContentTextColorAngle = -1; @@ -70,8 +68,8 @@ public InternalStorage() (ContentTextV == PaletteRelativeAlign.Inherit) && (ContentTextMultiLineH == PaletteRelativeAlign.Inherit) && (ContentTextMultiLine == InheritBool.Inherit) && - (ContentTextColor1 == Color.Empty) && - (ContentTextColor2 == Color.Empty) && + (ContentTextColor1 == GlobalStaticValues.EMPTY_COLOR) && + (ContentTextColor2 == GlobalStaticValues.EMPTY_COLOR) && (ContentTextColorStyle == PaletteColorStyle.Inherit) && (ContentTextColorAlign == PaletteRectangleAlign.Inherit) && (ContentTextColorAngle == -1) && @@ -110,6 +108,7 @@ public PaletteContentText(NeedPaintHandler? needPaint) => /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_storage == null) || _storage.IsDefault; #endregion @@ -273,7 +272,7 @@ public virtual PaletteTextHotkeyPrefix Prefix } } #endregion - + #region TextH /// /// Gets the horizontal relative alignment of the text. @@ -441,11 +440,11 @@ public virtual InheritBool MultiLine [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Main color for the text.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public virtual Color Color1 { - get => _storage?.ContentTextColor1 ?? Color.Empty; + get => _storage?.ContentTextColor1 ?? GlobalStaticValues.EMPTY_COLOR; set { @@ -460,7 +459,7 @@ public virtual Color Color1 } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { @@ -481,11 +480,11 @@ public virtual Color Color1 [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Secondary color for the text.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public virtual Color Color2 { - get => _storage?.ContentTextColor2 ?? Color.Empty; + get => _storage?.ContentTextColor2 ?? GlobalStaticValues.EMPTY_COLOR; set { @@ -500,7 +499,7 @@ public virtual Color Color2 } else { - if (value != Color.Empty) + if (value != GlobalStaticValues.EMPTY_COLOR) { _storage = new InternalStorage { diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentToPalette.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentToPalette.cs index 60a3930fc..60744d9b2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentToPalette.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteContent/PaletteContentToPalette.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteContentToPalette : IPaletteContent { #region Instance Fields - private readonly PaletteBase? _palette; + private readonly PaletteBase _palette; #endregion @@ -28,7 +28,7 @@ public class PaletteContentToPalette : IPaletteContent /// /// Source for getting all values. /// Style of values required. - public PaletteContentToPalette(PaletteBase? palette, PaletteContentStyle style) + public PaletteContentToPalette(PaletteBase palette, PaletteContentStyle style) { // Remember source palette _palette = palette; @@ -117,14 +117,14 @@ public PaletteContentToPalette(PaletteBase? palette, PaletteContentStyle style) /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextFont(PaletteState state) => _palette.GetContentShortTextFont(ContentStyle, state); + public Font? GetContentShortTextFont(PaletteState state) => _palette.GetContentShortTextFont(ContentStyle, state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentShortTextNewFont(PaletteState state) => _palette.GetContentShortTextNewFont(ContentStyle, state); + public Font? GetContentShortTextNewFont(PaletteState state) => _palette.GetContentShortTextNewFont(ContentStyle, state); /// /// Gets the actual text rendering hint for short text. @@ -239,14 +239,14 @@ public PaletteContentToPalette(PaletteBase? palette, PaletteContentStyle style) /// /// Font value. /// Palette value should be applicable to this state. - public Font GetContentLongTextFont(PaletteState state) => _palette.GetContentLongTextFont(ContentStyle, state); + public Font? GetContentLongTextFont(PaletteState state) => _palette.GetContentLongTextFont(ContentStyle, state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentLongTextNewFont(PaletteState state) => _palette.GetContentLongTextNewFont(ContentStyle, state); + public Font? GetContentLongTextNewFont(PaletteState state) => _palette.GetContentLongTextNewFont(ContentStyle, state); /// /// Gets the actual text rendering hint for long text. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDefinitions.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDefinitions.cs index 674b85fd9..6ce6874aa 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDefinitions.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDefinitions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -252,14 +252,14 @@ public interface IPaletteContent /// /// Palette value should be applicable to this state. /// Font value. - Font GetContentShortTextFont(PaletteState state); + Font? GetContentShortTextFont(PaletteState state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - Font GetContentShortTextNewFont(PaletteState state); + Font? GetContentShortTextNewFont(PaletteState state); /// /// Gets the rendering hint for the short text. @@ -371,14 +371,14 @@ public interface IPaletteContent /// /// Palette value should be applicable to this state. /// Font value. - Font GetContentLongTextFont(PaletteState state); + Font? GetContentLongTextFont(PaletteState state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - Font GetContentLongTextNewFont(PaletteState state); + Font? GetContentLongTextNewFont(PaletteState state); /// /// Gets the rendering hint for the long text. @@ -626,21 +626,21 @@ public interface IPaletteButtonSpec /// /// Style of button spec. /// String value. - string? GetButtonSpecShortText(PaletteButtonSpecStyle style); + string GetButtonSpecShortText(PaletteButtonSpecStyle style); /// /// Gets the long text to display for the button. /// /// Style of button spec. /// String value. - string? GetButtonSpecLongText(PaletteButtonSpecStyle style); + string GetButtonSpecLongText(PaletteButtonSpecStyle style); /// /// Gets the tooltip title text to display for the button. /// /// Style of button spec. /// String value. - string? GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style); + string GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style); /// /// Gets the color to remap from the image to the container foreground. @@ -782,6 +782,27 @@ public interface IPaletteRibbonGeneral /// Color value. Color GetRibbonMinimizeBarLight(PaletteState state); + /// + /// Gets the dark rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state); + + /// + /// Gets the light rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state); + + /// + /// Gets the solid color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + Color GetRibbonTabRowBackgroundSolidColor(PaletteState state); + /// /// Gets the color for the tab separator. /// @@ -823,6 +844,45 @@ public interface IPaletteRibbonGeneral /// Palette value should be applicable to this state. /// Color value. Color GetRibbonQATButtonLight(PaletteState state); + + /// Gets the ribbon tab row gradient first color. + /// Palette value should be applicable to this state. + /// The gradient first color. + Color GetRibbonTabRowGradientColor1(PaletteState state); + + /// Gets the ribbon tab row gradient rafting angle. + /// Palette value should be applicable to this state. + /// The gradient rafting angle. + float GetRibbonTabRowGradientRaftingAngle(PaletteState state); + } + #endregion + + #region IPaletteRibbonFileAppTab + /// + /// Exposes a palette source for ribbon background specifications. + /// + public interface IPaletteRibbonFileAppTab + { + /// + /// Gets the Application File Tab Top Colour + /// + /// Palette value should be applicable to this state. + /// Color value. + Color GetRibbonFileAppTabTopColor(PaletteState state); + + /// + /// Gets the Application File Tab Bottom Colour + /// + /// Palette value should be applicable to this state. + /// Color value. + Color GetRibbonFileAppTabBottomColor(PaletteState state); + + /// + /// Gets the Application File Tab Text Colour + /// + /// Palette value should be applicable to this state. + /// Color value. + Color GetRibbonFileAppTabTextColor(PaletteState state); } #endregion @@ -2951,7 +3011,7 @@ public enum PaletteColorStyle #region Enum PaletteImageStyle /// - /// Specifies the an image is aligned. + /// Specifies how an image is aligned. /// [TypeConverter(typeof(PaletteImageStyleConverter))] public enum PaletteImageStyle @@ -3037,7 +3097,7 @@ public enum PaletteImageStyle /// /// Specifies the an image is aligned. /// - [Flags()] + [Flags] [TypeConverter(typeof(PaletteDrawBordersConverter))] public enum PaletteDrawBorders { @@ -3586,12 +3646,7 @@ public enum PaletteTextHint /// /// Specifies single bit for pixel with grid fit for text rendering. /// - SingleBitPerPixelGridFit, - - /// - /// Specifies system default setting for text rendering. - /// - SystemDefault + SingleBitPerPixelGridFit } #endregion @@ -3662,7 +3717,7 @@ public enum PaletteTextHotkeyPrefix #endregion #region Enum PaletteColorIndex - internal enum PaletteColorIndex : int + internal enum PaletteColorIndex { ButtonCheckedGradientBegin = 0, ButtonCheckedGradientEnd, diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDouble.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDouble.cs index 74c931fee..4de2766ce 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDouble.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDouble.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class PaletteDouble : Storage, /// Initialize a new instance of the PaletteDouble class. /// /// Source for inheriting values. - public PaletteDouble(IPaletteDouble? inherit) + public PaletteDouble(IPaletteDouble inherit) : this(inherit, null) { } @@ -38,15 +38,15 @@ public PaletteDouble(IPaletteDouble? inherit) /// /// Source for inheriting values. /// Delegate for notifying paint requests. - public PaletteDouble(IPaletteDouble? inherit, - NeedPaintHandler needPaint) + public PaletteDouble(IPaletteDouble inherit, + NeedPaintHandler? needPaint) { // Store the provided paint notification delegate NeedPaint = needPaint; // Create storage that maps onto the inherit instances _back = new PaletteBack(inherit.PaletteBack, needPaint); - _border = new PaletteBorder(inherit.PaletteBorder, needPaint); + _border = new PaletteBorder(inherit.PaletteBorder!, needPaint); } /// @@ -73,6 +73,7 @@ public PaletteDouble(IPaletteDouble inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && Border.IsDefault; #endregion @@ -93,10 +94,10 @@ public virtual void PopulateFromBase(PaletteState state) /// /// Sets the inheritance parent. /// - public void SetInherit(IPaletteDouble? inherit) + public void SetInherit(IPaletteDouble inherit) { _back.SetInherit(inherit.PaletteBack); - _border.SetInherit(inherit.PaletteBorder); + _border.SetInherit(inherit.PaletteBorder!); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetric.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetric.cs index 6af50e684..de27c82c8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetric.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetric.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteDoubleMetric : PaletteDouble, IPaletteMetric { #region Instance Fields - private PaletteDoubleMetricRedirect? _inherit; + private PaletteDoubleMetricRedirect _inherit; #endregion #region Identity @@ -27,7 +27,7 @@ public class PaletteDoubleMetric : PaletteDouble, /// Initialize a new instance of the PaletteDoubleMetric class. /// /// Source for palette defaulted values. - public PaletteDoubleMetric(PaletteDoubleMetricRedirect? inherit) + public PaletteDoubleMetric(PaletteDoubleMetricRedirect inherit) : this(inherit, null) { } @@ -38,13 +38,13 @@ public PaletteDoubleMetric(PaletteDoubleMetricRedirect? inherit) /// Source for palette defaulted values. /// Delegate for notifying paint requests. public PaletteDoubleMetric([DisallowNull] PaletteDoubleMetricRedirect inherit, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : base(inherit, needPaint) { Debug.Assert(inherit != null); // Remember inheritance for metric values - _inherit = inherit; + _inherit = inherit ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(inherit))); } #endregion @@ -52,7 +52,7 @@ public PaletteDoubleMetric([DisallowNull] PaletteDoubleMetricRedirect inherit, /// /// Sets the inheritance parent. /// - public void SetInherit(PaletteDoubleMetricRedirect? inherit) + public void SetInherit(PaletteDoubleMetricRedirect inherit) { base.SetInherit(inherit); _inherit = inherit; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetricRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetricRedirect.cs index 875378d31..5df7dda2e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetricRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleMetricRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteDoubleMetricRedirect : PaletteDoubleRedirect, IPaletteMetric { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion #region Identity @@ -29,7 +29,7 @@ public class PaletteDoubleMetricRedirect : PaletteDoubleRedirect, /// inheritance redirection instance. /// Style for the background. /// Style for the border. - public PaletteDoubleMetricRedirect(PaletteRedirect? redirect, + public PaletteDoubleMetricRedirect(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle) : this(redirect, backStyle, borderStyle, null) @@ -43,10 +43,10 @@ public PaletteDoubleMetricRedirect(PaletteRedirect? redirect, /// Style for the background. /// Style for the border. /// Delegate for notifying paint requests. - public PaletteDoubleMetricRedirect(PaletteRedirect? redirect, + public PaletteDoubleMetricRedirect(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : base(redirect, backStyle, borderStyle, @@ -61,7 +61,7 @@ public PaletteDoubleMetricRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public override void SetRedirector(PaletteRedirect? redirect) + public override void SetRedirector(PaletteRedirect redirect) { base.SetRedirector(redirect); _redirect = redirect; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleOverride.cs index 6018c18c5..b08e39ee5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -51,7 +51,7 @@ public PaletteDoubleOverride([DisallowNull] IPaletteDouble normalTriple, // Create the triple override instances _overrideBack = new PaletteBackInheritOverride(normalTriple.PaletteBack, overrideTriple.PaletteBack); - _overrideBorder = new PaletteBorderInheritOverride(normalTriple.PaletteBorder, overrideTriple.PaletteBorder); + _overrideBorder = new PaletteBorderInheritOverride(normalTriple.PaletteBorder!, overrideTriple.PaletteBorder!); // Do not apply an override by default Apply = false; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleRedirect.cs index 04ee8c5b3..3e12e0ed8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteDoubleRedirect.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -19,20 +17,29 @@ public class PaletteDoubleRedirect : Storage, IPaletteDouble { #region Instance Fields - private PaletteBack _back; - private PaletteBorder _border; - private PaletteBackInheritRedirect _backInherit; +#pragma warning disable CS3008 // Identifier is not CLS-compliant + // Dotnet having troubles with the underscores + protected PaletteBack _back; + protected PaletteBorder _border; + protected PaletteBackInheritRedirect _backInherit; +#pragma warning restore CS3008 // Identifier is not CLS-compliant #endregion #region Identity + + /// + protected PaletteDoubleRedirect() + { + } + /// /// Initialize a new instance of the PaletteDoubleRedirect class. /// /// inheritance redirection instance. /// Initial background style. /// Initial border style. - public PaletteDoubleRedirect(PaletteRedirect? redirect, + public PaletteDoubleRedirect(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle) : this(redirect, backStyle, borderStyle, null) @@ -46,10 +53,10 @@ public PaletteDoubleRedirect(PaletteRedirect? redirect, /// Initial background style. /// Initial border style. /// Delegate for notifying paint requests. - public PaletteDoubleRedirect(PaletteRedirect? redirect, + public PaletteDoubleRedirect(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { // Store the inherit instances var backInherit = new PaletteBackInheritRedirect(redirect, backStyle); @@ -71,7 +78,7 @@ public PaletteDoubleRedirect(PaletteRedirect? redirect, /// Storage for border values. /// inheritance for border values. /// Delegate for notifying paint requests. - public PaletteDoubleRedirect(PaletteRedirect? redirect, + public PaletteDoubleRedirect(PaletteRedirect redirect, PaletteBack back, PaletteBackInheritRedirect backInherit, PaletteBorder border, @@ -87,7 +94,7 @@ public PaletteDoubleRedirect(PaletteRedirect? redirect, /// Gets the redirector instance. /// /// Return the currently used redirector. - public PaletteRedirect? GetRedirector() => _backInherit.GetRedirector(); + public PaletteRedirect GetRedirector() => _backInherit.GetRedirector(); #endregion @@ -96,7 +103,7 @@ public PaletteDoubleRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { _backInherit.SetRedirector(redirect); BorderRedirect.SetRedirector(redirect); @@ -120,6 +127,7 @@ public void PopulateFromBase(PaletteState state) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && Border.IsDefault; #endregion @@ -164,8 +172,9 @@ public void SetStyles(SeparatorStyle separatorStyle) SetStyles(PaletteBackStyle.SeparatorCustom3, PaletteBorderStyle.SeparatorCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(separatorStyle.ToString()); break; } } @@ -185,8 +194,9 @@ public void SetStyles(InputControlStyle inputControlStyle) SetStyles(PaletteBackStyle.InputControlRibbon, PaletteBorderStyle.InputControlRibbon); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(inputControlStyle.ToString()); break; } } @@ -275,13 +285,13 @@ protected void OnNeedPaint(object? sender, bool needLayout) => #endregion - #region Private - private void Construct(PaletteRedirect? redirect, + #region protected + protected void Construct(PaletteRedirect redirect, PaletteBack back, PaletteBackInheritRedirect backInherit, PaletteBorder border, PaletteBorderInheritRedirect borderInherit, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { NeedPaint = needPaint; _backInherit = backInherit; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteFormDoubleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteFormDoubleRedirect.cs new file mode 100644 index 000000000..14297f2a8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDouble/PaletteFormDoubleRedirect.cs @@ -0,0 +1,74 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Implement storage for palette border and background. + /// + public class PaletteFormDoubleRedirect : PaletteDoubleRedirect + { + #region Identity + /// + /// Initialize a new instance of the PaletteDoubleRedirect class. + /// + /// inheritance redirection instance. + /// Initial background style. + /// Initial border style. + public PaletteFormDoubleRedirect(PaletteRedirect redirect, + PaletteBackStyle backStyle, + PaletteBorderStyle borderStyle) + : this(redirect, backStyle, borderStyle, null) + { + } + + /// + /// Initialize a new instance of the PaletteDoubleRedirect class. + /// + /// inheritance redirection instance. + /// Initial background style. + /// Initial border style. + /// Delegate for notifying paint requests. + public PaletteFormDoubleRedirect(PaletteRedirect redirect, + PaletteBackStyle backStyle, + PaletteBorderStyle borderStyle, + NeedPaintHandler? needPaint) + { + // Store the inherit instances + var backInherit = new PaletteBackInheritRedirect(redirect, backStyle); + var borderInherit = new PaletteBorderInheritRedirect(redirect, borderStyle); + + // Create storage that maps onto the inherit instances + var back = new PaletteBack(backInherit, needPaint); + var border = new PaletteFormBorder(borderInherit, needPaint); + + Construct(redirect, back, backInherit, border, borderInherit, needPaint); + } + + /// + /// Initialize a new instance of the PaletteDoubleRedirect class. + /// + /// inheritance redirection instance. + /// Storage for back values. + /// inheritance for back values. + /// Storage for border values. + /// inheritance for border values. + /// Delegate for notifying paint requests. + public PaletteFormDoubleRedirect(PaletteRedirect redirect, + PaletteBack back, + PaletteBackInheritRedirect backInherit, + PaletteFormBorder border, + PaletteBorderInheritRedirect borderInherit, + NeedPaintHandler needPaint) + { + Construct(redirect, back, backInherit, border, borderInherit, needPaint); + } + #endregion + + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDragDrop/PaletteDragDrop.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDragDrop/PaletteDragDrop.cs index d39b49510..0299f393b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDragDrop/PaletteDragDrop.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteDragDrop/PaletteDragDrop.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteDragDrop : Storage, IPaletteDragDrop { #region Instance Fields - private PaletteBase? _inherit; + private PaletteBase _inherit; private PaletteDragFeedback _feedback; private Color _solidBack; private Color _solidBorder; @@ -36,7 +36,7 @@ public class PaletteDragDrop : Storage, /// /// Source for inheriting values. /// Delegate for notifying paint requests. - public PaletteDragDrop(PaletteBase? inherit, + public PaletteDragDrop(PaletteBase inherit, NeedPaintHandler? needPaint) { // Remember inheritance @@ -47,13 +47,13 @@ public PaletteDragDrop(PaletteBase? inherit, // Set default values _feedback = PaletteDragFeedback.Inherit; - _solidBack = Color.Empty; - _solidBorder = Color.Empty; + _solidBack = GlobalStaticValues.EMPTY_COLOR; + _solidBorder = GlobalStaticValues.EMPTY_COLOR; _solidOpacity = -1.0f; - _dropDockBack = Color.Empty; - _dropDockBorder = Color.Empty; - _dropDockActive = Color.Empty; - _dropDockInactive = Color.Empty; + _dropDockBack = GlobalStaticValues.EMPTY_COLOR; + _dropDockBorder = GlobalStaticValues.EMPTY_COLOR; + _dropDockActive = GlobalStaticValues.EMPTY_COLOR; + _dropDockInactive = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -62,14 +62,15 @@ public PaletteDragDrop(PaletteBase? inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Feedback == PaletteDragFeedback.Inherit) && - (SolidBack == Color.Empty) && - (SolidBorder == Color.Empty) && - (SolidOpacity == -1.0f) && - (DropDockBack == Color.Empty) && - (DropDockBorder == Color.Empty) && - (DropDockActive == Color.Empty) && - (DropDockInactive == Color.Empty); + (SolidBack == GlobalStaticValues.EMPTY_COLOR) && + (SolidBorder == GlobalStaticValues.EMPTY_COLOR) && + (SolidOpacity == -1.0f) && + (DropDockBack == GlobalStaticValues.EMPTY_COLOR) && + (DropDockBorder == GlobalStaticValues.EMPTY_COLOR) && + (DropDockActive == GlobalStaticValues.EMPTY_COLOR) && + (DropDockInactive == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -77,7 +78,7 @@ public PaletteDragDrop(PaletteBase? inherit, /// /// Sets the inheritance parent. /// - public void SetInherit(PaletteBase? inherit) => _inherit = inherit; + public void SetInherit(PaletteBase inherit) => _inherit = inherit; #endregion #region PopulateFromBase @@ -161,13 +162,13 @@ public Color SolidBack /// /// Resets the SolidBack property to its default value. /// - public void ResetSolidBack() => SolidBack = Color.Empty; + public void ResetSolidBack() => SolidBack = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the background color for a solid drag drop area. /// /// Color value. - public Color GetDragDropSolidBack() => SolidBack != Color.Empty + public Color GetDragDropSolidBack() => SolidBack != GlobalStaticValues.EMPTY_COLOR ? SolidBack : _inherit?.GetDragDropSolidBack() ?? SystemColors.ActiveCaption; @@ -199,13 +200,13 @@ public Color SolidBorder /// /// Resets the SolidBorder property to its default value. /// - public void ResetSolidBorder() => SolidBorder = Color.Empty; + public void ResetSolidBorder() => SolidBorder = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the border color for a solid drag drop area. /// /// Color value. - public Color GetDragDropSolidBorder() => SolidBorder != Color.Empty + public Color GetDragDropSolidBorder() => SolidBorder != GlobalStaticValues.EMPTY_COLOR ? SolidBorder : _inherit?.GetDragDropSolidBorder() ?? SystemColors.Control; @@ -275,14 +276,14 @@ public Color DropDockBack /// /// Resets the DropDockBack property to its default value. /// - public void ResetDropDockBack() => DropDockBack = Color.Empty; + public void ResetDropDockBack() => DropDockBack = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the background color for the docking indicators area. /// /// Color value. - public Color GetDragDropDockBack() => DropDockBack != Color.Empty + public Color GetDragDropDockBack() => DropDockBack != GlobalStaticValues.EMPTY_COLOR ? DropDockBack : _inherit?.GetDragDropDockBack() ?? Color.FromArgb(228, 228, 228); @@ -314,13 +315,13 @@ public Color DropDockBorder /// /// Resets the DropDockBorder property to its default value. /// - public void ResetDropDockBorder() => DropDockBorder = Color.Empty; + public void ResetDropDockBorder() => DropDockBorder = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the border color for the docking indicators area. /// /// Color value. - public Color GetDragDropDockBorder() => DropDockBorder != Color.Empty + public Color GetDragDropDockBorder() => DropDockBorder != GlobalStaticValues.EMPTY_COLOR ? DropDockBorder : _inherit?.GetDragDropDockBorder() ?? Color.FromArgb(181, 181, 181); @@ -352,13 +353,13 @@ public Color DropDockActive /// /// Resets the DropDockActive property to its default value. /// - public void ResetDropDockActive() => DropDockActive = Color.Empty; + public void ResetDropDockActive() => DropDockActive = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the active color for docking indicators. /// /// Color value. - public Color GetDragDropDockActive() => DropDockActive != Color.Empty + public Color GetDragDropDockActive() => DropDockActive != GlobalStaticValues.EMPTY_COLOR ? DropDockActive : _inherit?.GetDragDropDockActive() ?? SystemColors.ActiveCaption; @@ -390,13 +391,13 @@ public Color DropDockInactive /// /// Resets the DropDockInactive property to its default value. /// - public void ResetDropDockInactive() => DropDockInactive = Color.Empty; + public void ResetDropDockInactive() => DropDockInactive = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the inactive color for docking indicators. /// /// Color value. - public Color GetDragDropDockInactive() => DropDockInactive != Color.Empty + public Color GetDragDropDockInactive() => DropDockInactive != GlobalStaticValues.EMPTY_COLOR ? DropDockInactive : _inherit?.GetDragDropDockInactive() ?? SystemColors.InactiveCaption; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColor.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColor.cs index 3481d4286..64c9cd5f9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteElementColor : Storage, IPaletteElementColor { #region Instance Fields - private IPaletteElementColor _inheritElementColor; + private IPaletteElementColor? _inheritElementColor; private Color _color1; private Color _color2; private Color _color3; @@ -33,8 +33,8 @@ public class PaletteElementColor : Storage, /// /// Source for inheriting values. /// Delegate for notifying changes in value. - public PaletteElementColor(IPaletteElementColor inheritElementColor, - NeedPaintHandler needPaint) + public PaletteElementColor(IPaletteElementColor? inheritElementColor, + NeedPaintHandler? needPaint) { // Remember inheritance _inheritElementColor = inheritElementColor; @@ -43,11 +43,11 @@ public PaletteElementColor(IPaletteElementColor inheritElementColor, NeedPaint = needPaint; // Define default values - _color1 = Color.Empty; - _color2 = Color.Empty; - _color3 = Color.Empty; - _color4 = Color.Empty; - _color5 = Color.Empty; + _color1 = GlobalStaticValues.EMPTY_COLOR; + _color2 = GlobalStaticValues.EMPTY_COLOR; + _color3 = GlobalStaticValues.EMPTY_COLOR; + _color4 = GlobalStaticValues.EMPTY_COLOR; + _color5 = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -56,11 +56,12 @@ public PaletteElementColor(IPaletteElementColor inheritElementColor, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (Color1 == Color.Empty) && - (Color2 == Color.Empty) && - (Color3 == Color.Empty) && - (Color4 == Color.Empty) && - (Color5 == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (Color1 == GlobalStaticValues.EMPTY_COLOR) && + (Color2 == GlobalStaticValues.EMPTY_COLOR) && + (Color3 == GlobalStaticValues.EMPTY_COLOR) && + (Color4 == GlobalStaticValues.EMPTY_COLOR) && + (Color5 == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -112,7 +113,7 @@ public virtual Color Color1 /// /// Reset the Color1 to the default value. /// - public void ResetColor1() => Color1 = Color.Empty; + public void ResetColor1() => Color1 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the first element color. @@ -120,7 +121,7 @@ public virtual Color Color1 /// Palette value should be applicable to this state. /// Color value. public Color GetElementColor1(PaletteState state) => - Color1 != Color.Empty ? Color1 : _inheritElementColor.GetElementColor1(state); + Color1 != GlobalStaticValues.EMPTY_COLOR ? Color1 : _inheritElementColor!.GetElementColor1(state); #endregion @@ -150,7 +151,7 @@ public virtual Color Color2 /// /// Reset the Color2 to the default value. /// - public void ResetColor2() => Color2 = Color.Empty; + public void ResetColor2() => Color2 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the second element color. @@ -158,7 +159,7 @@ public virtual Color Color2 /// Palette value should be applicable to this state. /// Color value. public Color GetElementColor2(PaletteState state) => - Color2 != Color.Empty ? Color2 : _inheritElementColor.GetElementColor2(state); + Color2 != GlobalStaticValues.EMPTY_COLOR ? Color2 : _inheritElementColor!.GetElementColor2(state); #endregion @@ -188,7 +189,7 @@ public virtual Color Color3 /// /// Reset the Color3 to the default value. /// - public void ResetColor3() => Color3 = Color.Empty; + public void ResetColor3() => Color3 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the third element color. @@ -196,7 +197,7 @@ public virtual Color Color3 /// Palette value should be applicable to this state. /// Color value. public Color GetElementColor3(PaletteState state) => - Color3 != Color.Empty ? Color3 : _inheritElementColor.GetElementColor3(state); + Color3 != GlobalStaticValues.EMPTY_COLOR ? Color3 : _inheritElementColor!.GetElementColor3(state); #endregion @@ -226,7 +227,7 @@ public virtual Color Color4 /// /// Reset the Color4 to the default value. /// - public void ResetColor4() => Color4 = Color.Empty; + public void ResetColor4() => Color4 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fourth element color. @@ -234,7 +235,7 @@ public virtual Color Color4 /// Palette value should be applicable to this state. /// Color value. public Color GetElementColor4(PaletteState state) => - Color4 != Color.Empty ? Color4 : _inheritElementColor.GetElementColor4(state); + Color4 != GlobalStaticValues.EMPTY_COLOR ? Color4 : _inheritElementColor!.GetElementColor4(state); #endregion @@ -264,7 +265,7 @@ public virtual Color Color5 /// /// Reset the Color5 to the default value. /// - public void ResetColor5() => Color5 = Color.Empty; + public void ResetColor5() => Color5 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fifth element color. @@ -272,7 +273,7 @@ public virtual Color Color5 /// Palette value should be applicable to this state. /// Color value. public Color GetElementColor5(PaletteState state) => - Color5 != Color.Empty ? Color5 : _inheritElementColor.GetElementColor5(state); + Color5 != GlobalStaticValues.EMPTY_COLOR ? Color5 : _inheritElementColor!.GetElementColor5(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInherit.cs index b8eaa592c..7cd2e0ac2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritOverride.cs index 135bd9865..870870380 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,8 +36,8 @@ public PaletteElementColorInheritOverride([DisallowNull] IPaletteElementColor pr Debug.Assert(backup != null); // Store incoming alternatives - _primary = primary; - _backup = backup; + _primary = primary ?? throw new ArgumentNullException(nameof(primary)); + _backup = backup ?? throw new ArgumentNullException(nameof(backup)); // Default other state Apply = true; @@ -97,7 +97,7 @@ public override Color GetElementColor1(PaletteState state) { Color ret = _primary.GetElementColor1(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetElementColor1(state); } @@ -121,7 +121,7 @@ public override Color GetElementColor2(PaletteState state) { Color ret = _primary.GetElementColor2(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetElementColor2(state); } @@ -145,7 +145,7 @@ public override Color GetElementColor3(PaletteState state) { Color ret = _primary.GetElementColor3(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetElementColor3(state); } @@ -169,7 +169,7 @@ public override Color GetElementColor4(PaletteState state) { Color ret = _primary.GetElementColor4(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetElementColor4(state); } @@ -193,7 +193,7 @@ public override Color GetElementColor5(PaletteState state) { Color ret = _primary.GetElementColor5(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backup.GetElementColor5(state); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritRedirect.cs index bc23403fb..6702e8386 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorInheritRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteElementColorInheritRedirect : PaletteElementColorInherit { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion @@ -28,12 +28,14 @@ public class PaletteElementColorInheritRedirect : PaletteElementColorInherit /// /// Source for inherit requests. /// Element value.. - public PaletteElementColorInheritRedirect([DisallowNull] PaletteRedirect redirect, + public PaletteElementColorInheritRedirect(PaletteRedirect redirect, PaletteElement element) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); - _redirect = redirect; + _redirect = redirect!; Element = element; } #endregion @@ -43,7 +45,7 @@ public PaletteElementColorInheritRedirect([DisallowNull] PaletteRedirect redirec /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion #region StyleBack diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorRedirect.cs index 54dbb49e6..33941d002 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteElementColor/PaletteElementColorRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,9 +28,9 @@ public class PaletteElementColorRedirect : PaletteElementColor /// Source for inheriting values. /// Element value. /// Delegate for notifying changes in value. - public PaletteElementColorRedirect(PaletteRedirect? redirect, + public PaletteElementColorRedirect(PaletteRedirect redirect, PaletteElement element, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : base(null, needPaint) { // Setup inheritance to recover values from the redirect instance @@ -44,7 +44,7 @@ public PaletteElementColorRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) => _redirect.SetRedirector(redirect); + public virtual void SetRedirector(PaletteRedirect redirect) => _redirect.SetRedirector(redirect); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMetric/PaletteMetricRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMetric/PaletteMetricRedirect.cs index b529d2f71..bfae75fff 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMetric/PaletteMetricRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMetric/PaletteMetricRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteMetricRedirect : Storage, IPaletteMetric { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion #region Identity @@ -27,12 +27,14 @@ public class PaletteMetricRedirect : Storage, /// Initialize a new instance of the PaletteMetricRedirect class. /// /// inheritance redirection instance. - public PaletteMetricRedirect([DisallowNull] PaletteRedirect? redirect) + public PaletteMetricRedirect(PaletteRedirect redirect) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); // Remember the redirect reference - _redirect = redirect; + _redirect = redirect!; } #endregion @@ -41,7 +43,7 @@ public PaletteMetricRedirect([DisallowNull] PaletteRedirect? redirect) /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public virtual void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion #region IsDefault @@ -49,6 +51,7 @@ public PaletteMetricRedirect([DisallowNull] PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => true; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMode.cs index af8e455eb..9d3dee0e9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,10 +18,22 @@ namespace Krypton.Toolkit [TypeConverter(typeof(PaletteModeConverter))] public enum PaletteMode { + /* + * Adjustements made as per ticket 1328. + * See: https://github.com/Krypton-Suite/Standard-Toolkit/issues/1328 + * + * These entries (also those disabled) are now sorted in the order of the SupportedThemes Dictionary. + * + * By starting the enum at Global = -1 all following entries will have numbers assigned that are equivalent to + * their respective Theme Dictionary position (PaletteModeStrings.SupportedThemes) + * + * IT IS MANDATORY TO KEEP THE PALETTEMODE ENUM AND THE DICTIONARY IN THE SAME ORDER. + */ + /// /// Specifies the renderer defined by the KryptonManager be used. /// - Global, + Global = -1, /// /// Specifies a professional appearance based on system settings. @@ -33,17 +45,6 @@ public enum PaletteMode /// ProfessionalOffice2003, - // ToDo: Re-enable when the gray themes are completed - /// - /// Specifies the dark Gray color variant of the Office 2007 appearance. - /// - Office2007DarkGray, - /* - /// - /// Specifies the light Gray color variant of the Office 2007 appearance. - /// - Office2007LightGray,*/ - /// /// Specifies the Blue color variant of the Office 2007 appearance. /// @@ -89,16 +90,19 @@ public enum PaletteMode /// Office2007BlackDarkMode, - // ToDo: Re-enable when the gray themes are completed + /* ToDo: Re-enable when the gray themes are completed /// - /// Specifies the dark Gray color variant of the Office 2010 appearance. + /// Specifies the dark Gray color variant of the Office 2007 appearance. /// - Office2010DarkGray, - /* - /// - /// Specifies the light Gray color variant of the Office 2010 appearance. - /// - Office2010LightGray,*/ + Office2007DarkGray, + */ + + /* ToDo: Re-enable when the gray themes are completed + /// + /// Specifies the light Gray color variant of the Office 2007 appearance. + /// + Office2007LightGray, + */ /// /// Specifies the Blue color variant of the Office 2010 appearance. @@ -145,41 +149,83 @@ public enum PaletteMode /// Office2010BlackDarkMode, - // ToDo: Re-enable when the gray themes are completed + /* ToDo: Re-enable when the gray themes are completed + /// + /// Specifies the dark Gray color variant of the Office 2010 appearance. + /// + Office2010DarkGray, + */ + + /* ToDo: Re-enable when the gray themes are completed + /// + /// Specifies the light Gray color variant of the Office 2010 appearance. + /// + Office2010LightGray, + */ + + /* ToDo: Re-enable when the gray themes are completed /// /// Specifies the dark Gray color variant of the Office 2013 appearance. /// Office2013DarkGray, + */ + + /* ToDo: Re-enable when the gray themes are completed /// /// Specifies the light Gray color variant of the Office 2013 appearance. /// Office2013LightGray, + */ /// /// Specifies the White color variant of the Office 2013 appearance. /// Office2013White, - // ToDo: Re-enable when the gray themes are completed /// - /// Specifies the dark Gray color variant of the Microsoft 365 appearance. + /// Specifies the Blue color variant on the Sparkle palette theme. /// - Microsoft365DarkGray, - /* - /// - /// Specifies the light Gray color variant of the Microsoft 365 appearance. - /// - Microsoft365LightGray,*/ + SparkleBlue, /// - /// Specifies the Black color variant of the Microsoft 365 appearance. + /// Specifies the dark Blue color variant on the Sparkle palette theme. /// - Microsoft365Black, + SparkleBlueDarkMode, /// - /// Specifies the dark Black color variant of the Microsoft 365 appearance. + /// Specifies the light Blue color variant on the Sparkle palette theme. /// - Microsoft365BlackDarkMode, + SparkleBlueLightMode, + + /// + /// Specifies the Orange color variant on the Sparkle palette theme. + /// + SparkleOrange, + + /// + /// Specifies the dark Orange color variant on the Sparkle palette theme. + /// + SparkleOrangeDarkMode, + + /// + /// Specifies the light Orange color variant on the Sparkle palette theme. + /// + SparkleOrangeLightMode, + + /// + /// Specifies the Purple color variant on the Sparkle palette theme. + /// + SparklePurple, + + /// + /// Specifies the dark Purple color variant on the Sparkle palette theme. + /// + SparklePurpleDarkMode, + + /// + /// Specifies the light Purple color variant on the Sparkle palette theme. + /// + SparklePurpleLightMode, /// /// Specifies the Blue color variant of the Microsoft 365 appearance. @@ -216,50 +262,35 @@ public enum PaletteMode /// Microsoft365White, - /// - /// Specifies the Blue color variant on the Sparkle palette theme. - /// - SparkleBlue, /// - /// Specifies the dark Blue color variant on the Sparkle palette theme. - /// - SparkleBlueDarkMode, - - /// - /// Specifies the light Blue color variant on the Sparkle palette theme. - /// - SparkleBlueLightMode, - - /// - /// Specifies the Orange color variant on the Sparkle palette theme. - /// - SparkleOrange, - - /// - /// Specifies the dark Orange color variant on the Sparkle palette theme. + /// Specifies the Black color variant of the Microsoft 365 appearance. /// - SparkleOrangeDarkMode, + Microsoft365Black, /// - /// Specifies the light Orange color variant on the Sparkle palette theme. + /// Specifies the dark Black color variant of the Microsoft 365 appearance. /// - SparkleOrangeLightMode, + Microsoft365BlackDarkMode, /// - /// Specifies the Purple color variant on the Sparkle palette theme. + /// Specifies the alternate dark Black color variant of the Microsoft 365 appearance. /// - SparklePurple, + Microsoft365BlackDarkModeAlternate, + /* ToDo: Re-enable when the gray themes are completed /// - /// Specifies the dark Purple color variant on the Sparkle palette theme. + /// Specifies the dark Gray color variant of the Microsoft 365 appearance. /// - SparklePurpleDarkMode, + Microsoft365DarkGray, + */ + /* ToDo: Re-enable when the gray themes are completed /// - /// Specifies the light Purple color variant on the Sparkle palette theme. + /// Specifies the light Gray color variant of the Microsoft 365 appearance. /// - SparklePurpleLightMode, + Microsoft365LightGray, + */ /// /// Specifies the visual studio 2010 palette theme, with the 2007 render. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirect.cs index 4a1516fac..d4679a8fd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirect.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -22,18 +20,12 @@ public class PaletteRedirect : PaletteBase, IGlobalId #endregion #region Identity - /// - /// Initialize a new instance of the PaletteRedirect class. - /// - public PaletteRedirect() - : this(null) - { - } /// /// Initialize a new instance of the PaletteRedirect class. /// /// Initial palette target for redirection. + /// target can be null when performing a drag-drop operation (Amongst other usages !!) public PaletteRedirect(PaletteBase? target) { Id = CommonHelper.NextId; @@ -54,12 +46,16 @@ public virtual PaletteBase? Target } #endregion - #region AllowFormChrome + #region UseThemeFormChromeBorderWidth /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. + /// Gets a value indicating if KryptonForm instances should UseThemeFormChromeBorderWidth. /// /// InheritBool value. - public override InheritBool GetAllowFormChrome() => _target?.GetAllowFormChrome() ?? InheritBool.False; + public override InheritBool UseThemeFormChromeBorderWidth + { + get => _target!.UseThemeFormChromeBorderWidth; + set => _target!.UseThemeFormChromeBorderWidth = value; + } #endregion @@ -68,7 +64,7 @@ public virtual PaletteBase? Target /// Gets the renderer to use for this palette. /// /// Renderer to use for drawing palette settings. - public override IRenderer? GetRenderer() => _target?.GetRenderer(); + public override IRenderer GetRenderer() => _target!.GetRenderer(); #endregion @@ -79,7 +75,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) => _target?.GetBackDraw(style, state) ?? InheritBool.False; + public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) => _target!.GetBackDraw(style, state); /// /// Gets the graphics drawing hint for the background. @@ -87,7 +83,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) => _target.GetBackGraphicsHint(style, state); + public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) => _target!.GetBackGraphicsHint(style, state); /// /// Gets the first background color. @@ -95,7 +91,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) => _target.GetBackColor1(style, state); + public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) => _target!.GetBackColor1(style, state); /// /// Gets the second back color. @@ -103,7 +99,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) => _target.GetBackColor2(style, state); + public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) => _target!.GetBackColor2(style, state); /// /// Gets the color background drawing style. @@ -111,7 +107,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color drawing style. - public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) => _target.GetBackColorStyle(style, state); + public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) => _target!.GetBackColorStyle(style, state); /// /// Gets the color alignment. @@ -119,7 +115,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color alignment style. - public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) => _target.GetBackColorAlign(style, state); + public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) => _target!.GetBackColorAlign(style, state); /// /// Gets the color background angle. @@ -127,7 +123,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Angle used for color drawing. - public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) => _target.GetBackColorAngle(style, state); + public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) => _target!.GetBackColorAngle(style, state); /// /// Gets a background image. @@ -143,7 +139,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Image style value. - public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) => _target.GetBackImageStyle(style, state); + public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) => _target!.GetBackImageStyle(style, state); /// /// Gets the image alignment. @@ -151,7 +147,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Image alignment style. - public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) => _target.GetBackImageAlign(style, state); + public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) => _target!.GetBackImageAlign(style, state); #endregion @@ -162,7 +158,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) => _target?.GetBorderDraw(style, state) ?? InheritBool.False; + public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderDraw(style, state); /// /// Gets a value indicating which borders to draw. @@ -170,7 +166,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// PaletteDrawBorders value. - public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) => _target.GetBorderDrawBorders(style, state); + public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderDrawBorders(style, state); /// /// Gets the graphics drawing hint for the border. @@ -178,7 +174,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) => _target.GetBorderGraphicsHint(style, state); + public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderGraphicsHint(style, state); /// /// Gets the first border color. @@ -186,7 +182,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) => _target.GetBorderColor1(style, state); + public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderColor1(style, state); /// /// Gets the second border color. @@ -194,7 +190,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) => _target.GetBorderColor2(style, state); + public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderColor2(style, state); /// /// Gets the color border drawing style. @@ -202,7 +198,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Color drawing style. - public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) => _target.GetBorderColorStyle(style, state); + public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderColorStyle(style, state); /// /// Gets the color border alignment. @@ -210,7 +206,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Color alignment style. - public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) => _target.GetBorderColorAlign(style, state); + public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderColorAlign(style, state); /// /// Gets the color border angle. @@ -218,7 +214,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Angle used for color drawing. - public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) => _target.GetBorderColorAngle(style, state); + public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderColorAngle(style, state); /// /// Gets the border width. @@ -226,7 +222,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Integer width. - public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) => _target.GetBorderWidth(style, state); + public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderWidth(style, state); /// /// Gets the border corner rounding. @@ -234,7 +230,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Float rounding. - public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) => _target.GetBorderRounding(style, state); + public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderRounding(style, state); /// /// Gets a border image. @@ -250,7 +246,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Image style value. - public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) => _target.GetBorderImageStyle(style, state); + public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderImageStyle(style, state); /// /// Gets the image border alignment. @@ -258,7 +254,7 @@ public virtual PaletteBase? Target /// Border style. /// Palette value should be applicable to this state. /// Image alignment style. - public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) => _target.GetBorderImageAlign(style, state); + public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) => _target!.GetBorderImageAlign(style, state); #endregion #region Content @@ -268,7 +264,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) => _target?.GetContentDraw(style, state) ?? InheritBool.False; + public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) => _target!.GetContentDraw(style, state); /// /// Gets a value indicating if content should be drawn with focus indication. @@ -276,7 +272,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) => _target.GetContentDrawFocus(style, state); + public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) => _target!.GetContentDrawFocus(style, state); /// /// Gets the horizontal relative alignment of the image. @@ -284,7 +280,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) => _target.GetContentImageH(style, state); + public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) => _target!.GetContentImageH(style, state); /// /// Gets the vertical relative alignment of the image. @@ -292,7 +288,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) => _target.GetContentImageV(style, state); + public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) => _target!.GetContentImageV(style, state); /// /// Gets the effect applied to drawing of the image. @@ -300,7 +296,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// PaletteImageEffect value. - public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) => _target.GetContentImageEffect(style, state); + public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) => _target!.GetContentImageEffect(style, state); /// /// Gets the image color to remap into another color. @@ -308,7 +304,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentImageColorMap(PaletteContentStyle style, PaletteState state) => _target.GetContentImageColorMap(style, state); + public override Color GetContentImageColorMap(PaletteContentStyle style, PaletteState state) => _target!.GetContentImageColorMap(style, state); /// /// Gets the color to use in place of the image map color. @@ -316,10 +312,10 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) => _target.GetContentImageColorTo(style, state); + public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) => _target!.GetContentImageColorTo(style, state); /// - public override Color GetContentImageColorTransparent(PaletteContentStyle style, PaletteState state) => _target.GetContentImageColorTransparent(style, state); + public override Color GetContentImageColorTransparent(PaletteContentStyle style, PaletteState state) => _target!.GetContentImageColorTransparent(style, state); /// /// Gets the font for the short text. @@ -327,7 +323,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextFont(style, state); + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) => _target?.GetContentShortTextFont(style, state); /// /// Gets the font for the short text by generating a new font instance. @@ -335,7 +331,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextNewFont(style, state); + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) => _target?.GetContentShortTextNewFont(style, state); /// /// Gets the rendering hint for the short text. @@ -343,7 +339,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// PaletteTextHint value. - public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextHint(style, state); + public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextHint(style, state); /// /// Gets the prefix drawing setting for short text. @@ -351,7 +347,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// PaletteTextPrefix value. - public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextPrefix(style, state); + public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextPrefix(style, state); /// /// Gets the flag indicating if multiline text is allowed for short text. @@ -359,7 +355,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) => _target?.GetContentShortTextMultiLine(style, state) ?? InheritBool.False; + public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextMultiLine(style, state); /// /// Gets the text trimming to use for short text. @@ -367,7 +363,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// PaletteTextTrim value. - public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextTrim(style, state); + public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextTrim(style, state); /// /// Gets the horizontal relative alignment of the short text. @@ -375,7 +371,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextH(style, state); + public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextH(style, state); /// /// Gets the vertical relative alignment of the short text. @@ -383,7 +379,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextV(style, state); + public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextV(style, state); /// /// Gets the horizontal relative alignment of multiline short text. @@ -391,7 +387,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextMultiLineH(style, state); + public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextMultiLineH(style, state); /// /// Gets the first back color for the short text. @@ -399,7 +395,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextColor1(style, state); + public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextColor1(style, state); /// /// Gets the second back color for the short text. @@ -407,7 +403,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextColor2(style, state); + public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextColor2(style, state); /// /// Gets the color drawing style for the short text. @@ -415,7 +411,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color drawing style. - public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextColorStyle(style, state); + public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextColorStyle(style, state); /// /// Gets the color alignment for the short text. @@ -423,7 +419,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color alignment style. - public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextColorAlign(style, state); + public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextColorAlign(style, state); /// /// Gets the color background angle for the short text. @@ -431,7 +427,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Angle used for color drawing. - public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextColorAngle(style, state); + public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextColorAngle(style, state); /// /// Gets a background image for the short text. @@ -447,7 +443,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Image style value. - public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextImageStyle(style, state); + public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextImageStyle(style, state); /// /// Gets the image alignment for the short text. @@ -455,7 +451,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Image alignment style. - public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) => _target.GetContentShortTextImageAlign(style, state); + public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) => _target!.GetContentShortTextImageAlign(style, state); /// /// Gets the font for the long text. @@ -463,7 +459,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextFont(style, state); + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) => _target?.GetContentLongTextFont(style, state); /// /// Gets the font for the long text by generating a new font instance. @@ -471,7 +467,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextNewFont(style, state); + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) => _target?.GetContentLongTextNewFont(style, state); /// /// Gets the rendering hint for the long text. @@ -479,7 +475,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// PaletteTextHint value. - public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextHint(style, state); + public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextHint(style, state); /// /// Gets the flag indicating if multiline text is allowed for long text. @@ -487,7 +483,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) => _target?.GetContentLongTextMultiLine(style, state) ?? InheritBool.False; + public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextMultiLine(style, state); /// /// Gets the text trimming to use for long text. @@ -495,7 +491,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// PaletteTextTrim value. - public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextTrim(style, state); + public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextTrim(style, state); /// /// Gets the prefix drawing setting for long text. @@ -503,7 +499,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// PaletteTextPrefix value. - public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextPrefix(style, state); + public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextPrefix(style, state); /// /// Gets the horizontal relative alignment of the long text. @@ -511,7 +507,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextH(style, state); + public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextH(style, state); /// /// Gets the vertical relative alignment of the long text. @@ -519,7 +515,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextV(style, state); + public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextV(style, state); /// /// Gets the horizontal relative alignment of multiline long text. @@ -527,7 +523,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextMultiLineH(style, state); + public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextMultiLineH(style, state); /// /// Gets the first back color for the long text. @@ -535,7 +531,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextColor1(style, state); + public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextColor1(style, state); /// /// Gets the second back color for the long text. @@ -543,7 +539,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextColor2(style, state); + public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextColor2(style, state); /// /// Gets the color drawing style for the long text. @@ -551,7 +547,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color drawing style. - public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextColorStyle(style, state); + public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextColorStyle(style, state); /// /// Gets the color alignment for the long text. @@ -559,7 +555,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Color alignment style. - public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextColorAlign(style, state); + public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextColorAlign(style, state); /// /// Gets the color background angle for the long text. @@ -567,7 +563,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Angle used for color drawing. - public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextColorAngle(style, state); + public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextColorAngle(style, state); /// /// Gets a background image for the long text. @@ -583,7 +579,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Image style value. - public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextImageStyle(style, state); + public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextImageStyle(style, state); /// /// Gets the image alignment for the long text. @@ -591,7 +587,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Image alignment style. - public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) => _target.GetContentLongTextImageAlign(style, state); + public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) => _target!.GetContentLongTextImageAlign(style, state); /// /// Gets the padding between the border and content drawing. @@ -599,7 +595,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Padding value. - public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) => _target.GetContentPadding(style, state); + public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) => _target!.GetContentPadding(style, state); /// /// Gets the padding between adjacent content items. @@ -607,7 +603,7 @@ public virtual PaletteBase? Target /// Content style. /// Palette value should be applicable to this state. /// Integer value. - public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) => _target.GetContentAdjacentGap(style, state); + public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) => _target!.GetContentAdjacentGap(style, state); #endregion @@ -618,7 +614,7 @@ public virtual PaletteBase? Target /// Palette value should be applicable to this state. /// Requested metric. /// Integer value. - public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) => _target.GetMetricInt(state, metric); + public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) => _target!.GetMetricInt(state, metric); /// /// Gets a boolean metric value. @@ -626,7 +622,7 @@ public virtual PaletteBase? Target /// Palette value should be applicable to this state. /// Requested metric. /// InheritBool value. - public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) => _target?.GetMetricBool(state, metric) ?? InheritBool.False; + public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) => _target!.GetMetricBool(state, metric); /// /// Gets a padding metric value. @@ -634,7 +630,7 @@ public virtual PaletteBase? Target /// Palette value should be applicable to this state. /// Requested metric. /// Padding value. - public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) => _target.GetMetricPadding(state, metric); + public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) => _target!.GetMetricPadding(state, metric); #endregion @@ -647,17 +643,17 @@ public virtual PaletteBase? Target public override Image? GetTreeViewImage(bool expanded) => _target?.GetTreeViewImage(expanded); /// - /// Gets a check box image appropriate for the provided state. + /// Gets a checkbox image appropriate for the provided state. /// - /// Is the check box enabled. - /// Is the check box checked/unchecked/indeterminate. - /// Is the check box being hot tracked. - /// Is the check box being pressed. + /// Is the checkbox enabled. + /// Is the checkbox checked/unchecked/indeterminate. + /// Is the checkbox being hot tracked. + /// Is the checkbox being pressed. /// Appropriate image for drawing; otherwise null. public override Image? GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) => _target?.GetCheckBoxImage(enabled, checkState, tracking, pressed); /// - /// Gets a check box image appropriate for the provided state. + /// Gets a checkbox image appropriate for the provided state. /// /// Is the radio button enabled. /// Is the radio button checked. @@ -667,7 +663,7 @@ public virtual PaletteBase? Target public override Image? GetRadioButtonImage(bool enabled, bool checkState, bool tracking, bool pressed) => _target?.GetRadioButtonImage(enabled, checkState, tracking, pressed); /// - /// Gets a drop down button image appropriate for the provided state. + /// Gets a drop-down button image appropriate for the provided state. /// /// PaletteState for which image is required. public override Image? GetDropDownButtonImage(PaletteState state) => _target?.GetDropDownButtonImage(state); @@ -688,10 +684,10 @@ public virtual PaletteBase? Target /// Gets an image indicating a sub-menu on a context menu item. /// /// Appropriate image for drawing; otherwise null. - public override Image? GetContextMenuSubMenuImage() => _target.GetContextMenuSubMenuImage(); + public override Image? GetContextMenuSubMenuImage() => _target?.GetContextMenuSubMenuImage(); /// - /// Gets a check box image appropriate for the provided state. + /// Gets a checkbox image appropriate for the provided state. /// /// Enum of the button to fetch. /// State of the button to fetch. @@ -721,66 +717,66 @@ public virtual PaletteBase? Target /// /// Style of button spec. /// Color value. - public override Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle style) => _target.GetButtonSpecImageTransparentColor(style); + public override Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle style) => _target!.GetButtonSpecImageTransparentColor(style); /// /// Gets the short text to display for the button. /// /// Style of button spec. /// String value. - public override string? GetButtonSpecShortText(PaletteButtonSpecStyle style) => _target?.GetButtonSpecShortText(style); + public override string GetButtonSpecShortText(PaletteButtonSpecStyle style) => _target!.GetButtonSpecShortText(style); /// /// Gets the long text to display for the button. /// /// Style of button spec. /// String value. - public override string? GetButtonSpecLongText(PaletteButtonSpecStyle style) => _target?.GetButtonSpecLongText(style); + public override string GetButtonSpecLongText(PaletteButtonSpecStyle style) => _target!.GetButtonSpecLongText(style); /// /// Gets the tooltip title text to display for the button. /// /// Style of button spec. /// String value. - public override string? GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) => _target.GetButtonSpecToolTipTitle(style); + public override string GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) => _target!.GetButtonSpecToolTipTitle(style); /// /// Gets the color to remap from the image to the container foreground. /// /// Style of button spec. /// Color value. - public override Color GetButtonSpecColorMap(PaletteButtonSpecStyle style) => _target.GetButtonSpecColorMap(style); + public override Color GetButtonSpecColorMap(PaletteButtonSpecStyle style) => _target!.GetButtonSpecColorMap(style); /// - public override Color GetButtonSpecColorTransparent(PaletteButtonSpecStyle style) => _target.GetButtonSpecColorTransparent(style); + public override Color GetButtonSpecColorTransparent(PaletteButtonSpecStyle style) => _target!.GetButtonSpecColorTransparent(style); /// /// Gets the button style used for drawing the button. /// /// Style of button spec. /// ButtonStyle value. - public override PaletteButtonStyle GetButtonSpecStyle(PaletteButtonSpecStyle style) => _target.GetButtonSpecStyle(style); + public override PaletteButtonStyle GetButtonSpecStyle(PaletteButtonSpecStyle style) => _target!.GetButtonSpecStyle(style); /// /// Get the location for the button. /// /// Style of button spec. /// HeaderLocation value. - public override HeaderLocation GetButtonSpecLocation(PaletteButtonSpecStyle style) => _target.GetButtonSpecLocation(style); + public override HeaderLocation GetButtonSpecLocation(PaletteButtonSpecStyle style) => _target!.GetButtonSpecLocation(style); /// /// Gets the edge to position the button against. /// /// Style of button spec. /// PaletteRelativeEdgeAlign value. - public override PaletteRelativeEdgeAlign GetButtonSpecEdge(PaletteButtonSpecStyle style) => _target.GetButtonSpecEdge(style); + public override PaletteRelativeEdgeAlign GetButtonSpecEdge(PaletteButtonSpecStyle style) => _target!.GetButtonSpecEdge(style); /// /// Gets the button orientation. /// /// Style of button spec. /// PaletteButtonOrientation value. - public override PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSpecStyle style) => _target.GetButtonSpecOrientation(style); + public override PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSpecStyle style) => _target!.GetButtonSpecOrientation(style); #endregion @@ -789,140 +785,179 @@ public virtual PaletteBase? Target /// Gets the ribbon shape that should be used. /// /// Ribbon shape value. - public override PaletteRibbonShape GetRibbonShape() => _target.GetRibbonShape(); + public override PaletteRibbonShape GetRibbonShape() => _target!.GetRibbonShape(); /// /// Gets the text alignment for the ribbon context text. /// /// Palette value should be applicable to this state. /// Font value. - public override PaletteRelativeAlign GetRibbonContextTextAlign(PaletteState state) => _target.GetRibbonContextTextAlign(state); + public override PaletteRelativeAlign GetRibbonContextTextAlign(PaletteState state) => _target!.GetRibbonContextTextAlign(state); /// /// Gets the font for the ribbon context text. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => _target.GetRibbonContextTextFont(state); + public override Font GetRibbonContextTextFont(PaletteState state) => _target!.GetRibbonContextTextFont(state); /// /// Gets the color for the ribbon context text. /// /// Palette value should be applicable to this state. /// Font value. - public override Color GetRibbonContextTextColor(PaletteState state) => _target.GetRibbonContextTextColor(state); + public override Color GetRibbonContextTextColor(PaletteState state) => _target!.GetRibbonContextTextColor(state); /// /// Gets the dark disabled color used for ribbon glyphs. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDisabledDark(PaletteState state) => _target.GetRibbonDisabledDark(state); + public override Color GetRibbonDisabledDark(PaletteState state) => _target!.GetRibbonDisabledDark(state); /// /// Gets the light disabled color used for ribbon glyphs. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDisabledLight(PaletteState state) => _target.GetRibbonDisabledLight(state); + public override Color GetRibbonDisabledLight(PaletteState state) => _target!.GetRibbonDisabledLight(state); /// /// Gets the color for the drop arrow light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDropArrowLight(PaletteState state) => _target.GetRibbonDropArrowLight(state); + public override Color GetRibbonDropArrowLight(PaletteState state) => _target!.GetRibbonDropArrowLight(state); /// /// Gets the color for the drop arrow dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDropArrowDark(PaletteState state) => _target.GetRibbonDropArrowDark(state); + public override Color GetRibbonDropArrowDark(PaletteState state) => _target!.GetRibbonDropArrowDark(state); /// /// Gets the color for the dialog launcher dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupDialogDark(PaletteState state) => _target.GetRibbonGroupDialogDark(state); + public override Color GetRibbonGroupDialogDark(PaletteState state) => _target!.GetRibbonGroupDialogDark(state); /// /// Gets the color for the dialog launcher light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupDialogLight(PaletteState state) => _target.GetRibbonGroupDialogLight(state); + public override Color GetRibbonGroupDialogLight(PaletteState state) => _target!.GetRibbonGroupDialogLight(state); /// /// Gets the color for the group separator dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _target.GetRibbonGroupSeparatorDark(state); + public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _target!.GetRibbonGroupSeparatorDark(state); /// /// Gets the color for the group separator light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _target.GetRibbonGroupSeparatorLight(state); + public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _target!.GetRibbonGroupSeparatorLight(state); /// /// Gets the color for the minimize bar dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonMinimizeBarDark(PaletteState state) => _target.GetRibbonMinimizeBarDark(state); + public override Color GetRibbonMinimizeBarDark(PaletteState state) => _target!.GetRibbonMinimizeBarDark(state); + + /// + /// Gets the gradient dark rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => _target!.GetRibbonTabRowBackgroundGradientRaftingDark(state); + + /// + /// Gets the gradient light rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => _target!.GetRibbonTabRowBackgroundGradientRaftingLight(state); + + /// + /// Gets the solid color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _target!.GetRibbonTabRowBackgroundSolidColor(state); /// /// Gets the color for the minimize bar light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonMinimizeBarLight(PaletteState state) => _target.GetRibbonMinimizeBarLight(state); + public override Color GetRibbonMinimizeBarLight(PaletteState state) => _target!.GetRibbonMinimizeBarLight(state); /// /// Gets the color for the tab separator. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonTabSeparatorColor(PaletteState state) => _target.GetRibbonTabSeparatorColor(state); + public override Color GetRibbonTabSeparatorColor(PaletteState state) => _target!.GetRibbonTabSeparatorColor(state); /// /// Gets the color for the tab context separators. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonTabSeparatorContextColor(PaletteState state) => _target.GetRibbonTabSeparatorContextColor(state); + public override Color GetRibbonTabSeparatorContextColor(PaletteState state) => _target!.GetRibbonTabSeparatorContextColor(state); /// /// Gets the font for the ribbon text. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => _target.GetRibbonTextFont(state); + public override Font GetRibbonTextFont(PaletteState state) => _target!.GetRibbonTextFont(state); /// /// Gets the rendering hint for the ribbon font. /// /// Palette value should be applicable to this state. /// PaletteTextHint value. - public override PaletteTextHint GetRibbonTextHint(PaletteState state) => _target.GetRibbonTextHint(state); + public override PaletteTextHint GetRibbonTextHint(PaletteState state) => _target!.GetRibbonTextHint(state); /// /// Gets the color for the extra QAT button dark content color. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonQATButtonDark(PaletteState state) => _target.GetRibbonQATButtonDark(state); + public override Color GetRibbonQATButtonDark(PaletteState state) => _target!.GetRibbonQATButtonDark(state); /// /// Gets the color for the extra QAT button light content color. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonQATButtonLight(PaletteState state) => _target.GetRibbonQATButtonLight(state); + public override Color GetRibbonQATButtonLight(PaletteState state) => _target!.GetRibbonQATButtonLight(state); + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => _target!.GetRibbonTabRowGradientColor1(state); + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _target!.GetRibbonFileAppTabBottomColor(state); + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _target!.GetRibbonFileAppTabTopColor(state); + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _target!.GetRibbonFileAppTabTextColor(state); + + /// Gets the ribbon tab row gradient rafting angle. + /// Palette value should be applicable to this state. + /// The gradient rafting angle. + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => + _target!.GetRibbonTabRowGradientRaftingAngle(state); #endregion @@ -933,7 +968,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// PaletteRibbonBackStyle value. - public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) => _target.GetRibbonBackColorStyle(style, state); + public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) => _target!.GetRibbonBackColorStyle(style, state); /// /// Gets the first background color for the ribbon item. @@ -941,7 +976,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) => _target.GetRibbonBackColor1(style, state); + public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) => _target!.GetRibbonBackColor1(style, state); /// /// Gets the second background color for the ribbon item. @@ -949,7 +984,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) => _target.GetRibbonBackColor2(style, state); + public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) => _target!.GetRibbonBackColor2(style, state); /// /// Gets the third background color for the ribbon item. @@ -957,7 +992,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) => _target.GetRibbonBackColor3(style, state); + public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) => _target!.GetRibbonBackColor3(style, state); /// /// Gets the fourth background color for the ribbon item. @@ -965,7 +1000,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) => _target.GetRibbonBackColor4(style, state); + public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) => _target!.GetRibbonBackColor4(style, state); /// /// Gets the fifth background color for the ribbon item. @@ -973,7 +1008,7 @@ public virtual PaletteBase? Target /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) => _target.GetRibbonBackColor5(style, state); + public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) => _target!.GetRibbonBackColor5(style, state); #endregion @@ -984,7 +1019,7 @@ public virtual PaletteBase? Target /// Text style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) => _target.GetRibbonTextColor(style, state); + public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) => _target!.GetRibbonTextColor(style, state); #endregion @@ -995,7 +1030,7 @@ public virtual PaletteBase? Target /// Element for which color is required. /// Palette value should be applicable to this state. /// Color value. - public override Color GetElementColor1(PaletteElement element, PaletteState state) => _target.GetElementColor1(element, state); + public override Color GetElementColor1(PaletteElement element, PaletteState state) => _target!.GetElementColor1(element, state); /// /// Gets the second element color. @@ -1003,7 +1038,7 @@ public virtual PaletteBase? Target /// Element for which color is required. /// Palette value should be applicable to this state. /// Color value. - public override Color GetElementColor2(PaletteElement element, PaletteState state) => _target.GetElementColor2(element, state); + public override Color GetElementColor2(PaletteElement element, PaletteState state) => _target!.GetElementColor2(element, state); /// /// Gets the third element color. @@ -1011,7 +1046,7 @@ public virtual PaletteBase? Target /// Element for which color is required. /// Palette value should be applicable to this state. /// Color value. - public override Color GetElementColor3(PaletteElement element, PaletteState state) => _target.GetElementColor3(element, state); + public override Color GetElementColor3(PaletteElement element, PaletteState state) => _target!.GetElementColor3(element, state); /// /// Gets the fourth element color. @@ -1019,7 +1054,7 @@ public virtual PaletteBase? Target /// Element for which color is required. /// Palette value should be applicable to this state. /// Color value. - public override Color GetElementColor4(PaletteElement element, PaletteState state) => _target.GetElementColor4(element, state); + public override Color GetElementColor4(PaletteElement element, PaletteState state) => _target!.GetElementColor4(element, state); /// /// Gets the fifth element color. @@ -1027,7 +1062,7 @@ public virtual PaletteBase? Target /// Element for which color is required. /// Palette value should be applicable to this state. /// Color value. - public override Color GetElementColor5(PaletteElement element, PaletteState state) => _target.GetElementColor5(element, state); + public override Color GetElementColor5(PaletteElement element, PaletteState state) => _target!.GetElementColor5(element, state); #endregion @@ -1036,61 +1071,58 @@ public virtual PaletteBase? Target /// Gets the feedback drawing method used. /// /// Feedback enumeration value. - public override PaletteDragFeedback GetDragDropFeedback() => _target.GetDragDropFeedback(); + public override PaletteDragFeedback GetDragDropFeedback() => _target!.GetDragDropFeedback(); /// /// Gets the background color for a solid drag drop area. /// /// Color value. - public override Color GetDragDropSolidBack() => _target.GetDragDropSolidBack(); + public override Color GetDragDropSolidBack() => _target!.GetDragDropSolidBack(); /// /// Gets the border color for a solid drag drop area. /// /// Color value. - public override Color GetDragDropSolidBorder() => _target.GetDragDropSolidBack(); + public override Color GetDragDropSolidBorder() => _target!.GetDragDropSolidBack(); /// /// Gets the opacity of the solid area. /// /// Opacity ranging from 0 to 1. - public override float GetDragDropSolidOpacity() => _target.GetDragDropSolidOpacity(); + public override float GetDragDropSolidOpacity() => _target!.GetDragDropSolidOpacity(); /// /// Gets the background color for the docking indicators area. /// /// Color value. - public override Color GetDragDropDockBack() => _target.GetDragDropDockBack(); + public override Color GetDragDropDockBack() => _target!.GetDragDropDockBack(); /// /// Gets the border color for the docking indicators area. /// /// Color value. - public override Color GetDragDropDockBorder() => _target.GetDragDropDockBorder(); + public override Color GetDragDropDockBorder() => _target!.GetDragDropDockBorder(); /// /// Gets the active color for docking indicators. /// /// Color value. - public override Color GetDragDropDockActive() => _target.GetDragDropDockActive(); + public override Color GetDragDropDockActive() => _target!.GetDragDropDockActive(); /// /// Gets the inactive color for docking indicators. /// /// Color value. - public override Color GetDragDropDockInactive() => _target.GetDragDropDockInactive(); + public override Color GetDragDropDockInactive() => _target!.GetDragDropDockInactive(); #endregion #region ColorTable - /// - protected override void DefineFonts() => throw new NotImplementedException(); - /// /// Gets access to the color table instance. /// - public override KryptonColorTable ColorTable => _target.ColorTable; + public override KryptonColorTable ColorTable => _target!.ColorTable; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBack.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBack.cs index 6cef30512..23d5e4f92 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBack.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,15 +16,15 @@ namespace Krypton.Toolkit public class PaletteRedirectBack : PaletteRedirect { #region Instance Fields - private IPaletteBack _disabled; - private IPaletteBack _normal; - private IPaletteBack _pressed; - private IPaletteBack _tracking; - private IPaletteBack _checkedNormal; - private IPaletteBack _checkedPressed; - private IPaletteBack _checkedTracking; - private IPaletteBack _focusOverride; - private IPaletteBack _normalDefaultOverride; + private IPaletteBack? _disabled; + private IPaletteBack? _normal; + private IPaletteBack? _pressed; + private IPaletteBack? _tracking; + private IPaletteBack? _checkedNormal; + private IPaletteBack? _checkedPressed; + private IPaletteBack? _checkedTracking; + private IPaletteBack? _focusOverride; + private IPaletteBack? _normalDefaultOverride; #endregion #region Identity @@ -34,7 +32,7 @@ public class PaletteRedirectBack : PaletteRedirect /// Initialize a new instance of the PaletteRedirectBack class. /// /// Initial palette target for redirection. - public PaletteRedirectBack(PaletteBase? target) + public PaletteRedirectBack(PaletteBase target) : this(target, null, null, null, null, null, null, null, null, null) { } @@ -45,7 +43,7 @@ public PaletteRedirectBack(PaletteBase? target) /// Initial palette target for redirection. /// Redirection for disabled state requests. /// Redirection for normal state requests. - public PaletteRedirectBack(PaletteBase? target, + public PaletteRedirectBack(PaletteBase target, IPaletteBack disabled, IPaletteBack normal) : this(target, disabled, normal, null, null, null, null, null, null, null) @@ -65,16 +63,16 @@ public PaletteRedirectBack(PaletteBase? target, /// Redirection for checked tracking state requests. /// Redirection for focus override state requests. /// Redirection for normal default override state requests. - public PaletteRedirectBack(PaletteBase? target, - IPaletteBack disabled, - IPaletteBack normal, - IPaletteBack pressed, - IPaletteBack tracking, - IPaletteBack checkedNormal, - IPaletteBack checkedPressed, - IPaletteBack checkedTracking, - IPaletteBack focusOverride, - IPaletteBack normalDefaultOverride) + public PaletteRedirectBack(PaletteBase target, + IPaletteBack? disabled, + IPaletteBack? normal, + IPaletteBack? pressed, + IPaletteBack? tracking, + IPaletteBack? checkedNormal, + IPaletteBack? checkedPressed, + IPaletteBack? checkedTracking, + IPaletteBack? focusOverride, + IPaletteBack? normalDefaultOverride) : base(target) { // Remember state specific inheritance @@ -131,9 +129,9 @@ public virtual void ResetRedirectStates() /// InheritBool value. public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackDraw(state) ?? Target.GetBackDraw(style, state); + return inherit?.GetBackDraw(state) ?? Target!.GetBackDraw(style, state); } /// @@ -144,9 +142,9 @@ public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState sta /// PaletteGraphicsHint value. public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackGraphicsHint(state) ?? Target.GetBackGraphicsHint(style, state); + return inherit?.GetBackGraphicsHint(state) ?? Target!.GetBackGraphicsHint(style, state); } /// @@ -157,9 +155,9 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, /// Color value. public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackColor1(state) ?? Target.GetBackColor1(style, state); + return inherit?.GetBackColor1(state) ?? Target!.GetBackColor1(style, state); } /// @@ -170,9 +168,9 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) /// Color value. public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackColor2(state) ?? Target.GetBackColor2(style, state); + return inherit?.GetBackColor2(state) ?? Target!.GetBackColor2(style, state); } /// @@ -183,9 +181,9 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) /// Color drawing style. public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackColorStyle(state) ?? Target.GetBackColorStyle(style, state); + return inherit?.GetBackColorStyle(state) ?? Target!.GetBackColorStyle(style, state); } /// @@ -196,9 +194,9 @@ public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, Pale /// Color alignment style. public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackColorAlign(state) ?? Target.GetBackColorAlign(style, state); + return inherit?.GetBackColorAlign(state) ?? Target!.GetBackColorAlign(style, state); } /// @@ -209,9 +207,9 @@ public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, /// Angle used for color drawing. public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackColorAngle(state) ?? Target.GetBackColorAngle(style, state); + return inherit?.GetBackColorAngle(state) ?? Target!.GetBackColorAngle(style, state); } /// @@ -222,9 +220,9 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta /// Image instance. public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackImage(state) ?? Target.GetBackImage(style, state); + return inherit?.GetBackImage(state) ?? Target!.GetBackImage(style, state); } /// @@ -235,9 +233,9 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta /// Image style value. public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) { - IPaletteBack inherit = GetInherit(state); + IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackImageStyle(state) ?? Target.GetBackImageStyle(style, state); + return inherit?.GetBackImageStyle(state) ?? Target!.GetBackImageStyle(style, state); } /// @@ -250,7 +248,7 @@ public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, { IPaletteBack? inherit = GetInherit(state); - return inherit?.GetBackImageAlign(state) ?? Target.GetBackImageAlign(style, state); + return inherit?.GetBackImageAlign(state) ?? Target!.GetBackImageAlign(style, state); } #endregion @@ -280,7 +278,8 @@ public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); + } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorder.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorder.cs index 954816ba2..916cb7285 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorder.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,15 +18,15 @@ namespace Krypton.Toolkit public class PaletteRedirectBorder : PaletteRedirect { #region Instance Fields - private IPaletteBorder _disabled; - private IPaletteBorder _normal; - private IPaletteBorder _pressed; - private IPaletteBorder _tracking; - private IPaletteBorder _checkedNormal; - private IPaletteBorder _checkedPressed; - private IPaletteBorder _checkedTracking; - private IPaletteBorder _focusOverride; - private IPaletteBorder _normalDefaultOverride; + private IPaletteBorder? _disabled; + private IPaletteBorder? _normal; + private IPaletteBorder? _pressed; + private IPaletteBorder? _tracking; + private IPaletteBorder? _checkedNormal; + private IPaletteBorder? _checkedPressed; + private IPaletteBorder? _checkedTracking; + private IPaletteBorder? _focusOverride; + private IPaletteBorder? _normalDefaultOverride; #endregion #region Identity @@ -34,7 +34,7 @@ public class PaletteRedirectBorder : PaletteRedirect /// Initialize a new instance of the PaletteRedirectBorder class. /// /// Initial palette target for redirection. - public PaletteRedirectBorder(PaletteBase? target) + public PaletteRedirectBorder(PaletteBase target) : this(target, null, null, null, null, null, null, null, null, null) { } @@ -45,7 +45,7 @@ public PaletteRedirectBorder(PaletteBase? target) /// Initial palette target for redirection. /// Redirection for disabled state requests. /// Redirection for normal state requests. - public PaletteRedirectBorder(PaletteBase? target, + public PaletteRedirectBorder(PaletteBase target, IPaletteBorder disabled, IPaletteBorder normal) : this(target, disabled, normal, null, null, null, null, null, null, null) @@ -60,7 +60,7 @@ public PaletteRedirectBorder(PaletteBase? target, /// Redirection for normal state requests. /// Redirection for pressed state requests. /// Redirection for tracking state requests. - public PaletteRedirectBorder(PaletteBase? target, + public PaletteRedirectBorder(PaletteBase target, IPaletteBorder disabled, IPaletteBorder normal, IPaletteBorder pressed, @@ -83,15 +83,15 @@ public PaletteRedirectBorder(PaletteBase? target, /// Redirection for focus override state requests. /// Redirection for normal default override state requests. public PaletteRedirectBorder(PaletteBase? target, - IPaletteBorder disabled, - IPaletteBorder normal, - IPaletteBorder pressed, - IPaletteBorder tracking, - IPaletteBorder checkedNormal, - IPaletteBorder checkedPressed, - IPaletteBorder checkedTracking, - IPaletteBorder focusOverride, - IPaletteBorder normalDefaultOverride) + IPaletteBorder? disabled, + IPaletteBorder? normal, + IPaletteBorder? pressed, + IPaletteBorder? tracking, + IPaletteBorder? checkedNormal, + IPaletteBorder? checkedPressed, + IPaletteBorder? checkedTracking, + IPaletteBorder? focusOverride, + IPaletteBorder? normalDefaultOverride) : base(target) { // Remember state specific inheritance @@ -150,7 +150,7 @@ public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderDraw(state) ?? Target.GetBorderDraw(style, state); + return inherit?.GetBorderDraw(state) ?? Target!.GetBorderDraw(style, state); } /// @@ -163,7 +163,7 @@ public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderDrawBorders(state) ?? Target.GetBorderDrawBorders(style, state); + return inherit?.GetBorderDrawBorders(state) ?? Target!.GetBorderDrawBorders(style, state); } /// @@ -176,7 +176,7 @@ public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle sty { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderGraphicsHint(state) ?? Target.GetBorderGraphicsHint(style, state); + return inherit?.GetBorderGraphicsHint(state) ?? Target!.GetBorderGraphicsHint(style, state); } /// @@ -189,7 +189,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderColor1(state) ?? Target.GetBorderColor1(style, state); + return inherit?.GetBorderColor1(state) ?? Target!.GetBorderColor1(style, state); } /// @@ -202,7 +202,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderColor2(state) ?? Target.GetBorderColor2(style, state); + return inherit?.GetBorderColor2(state) ?? Target!.GetBorderColor2(style, state); } /// @@ -215,7 +215,7 @@ public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderColorStyle(state) ?? Target.GetBorderColorStyle(style, state); + return inherit?.GetBorderColorStyle(state) ?? Target!.GetBorderColorStyle(style, state); } /// @@ -228,7 +228,7 @@ public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle sty { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderColorAlign(state) ?? Target.GetBorderColorAlign(style, state); + return inherit?.GetBorderColorAlign(state) ?? Target!.GetBorderColorAlign(style, state); } /// @@ -241,7 +241,7 @@ public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderColorAngle(state) ?? Target.GetBorderColorAngle(style, state); + return inherit?.GetBorderColorAngle(state) ?? Target!.GetBorderColorAngle(style, state); } /// @@ -254,7 +254,7 @@ public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderWidth(state) ?? Target.GetBorderWidth(style, state); + return inherit?.GetBorderWidth(state) ?? Target!.GetBorderWidth(style, state); } /// @@ -267,7 +267,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderRounding(state) ?? Target.GetBorderRounding(style, state); + return inherit?.GetBorderRounding(state) ?? Target!.GetBorderRounding(style, state); } /// @@ -280,7 +280,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderImage(state) ?? Target.GetBorderImage(style, state); + return inherit?.GetBorderImage(state) ?? Target!.GetBorderImage(style, state); } /// @@ -293,7 +293,7 @@ public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderImageStyle(state) ?? Target.GetBorderImageStyle(style, state); + return inherit?.GetBorderImageStyle(state) ?? Target!.GetBorderImageStyle(style, state); } /// @@ -306,12 +306,12 @@ public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle sty { IPaletteBorder? inherit = GetInherit(state); - return inherit?.GetBorderImageAlign(state) ?? Target.GetBorderImageAlign(style, state); + return inherit?.GetBorderImageAlign(state) ?? Target!.GetBorderImageAlign(style, state); } #endregion #region Implementation - private IPaletteBorder GetInherit(PaletteState state) + private IPaletteBorder? GetInherit(PaletteState state) { switch (state) { @@ -336,7 +336,7 @@ private IPaletteBorder GetInherit(PaletteState state) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorderEdge.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorderEdge.cs index 390174f94..ebc68921f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorderEdge.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectBorderEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public class PaletteRedirectBorderEdge : PaletteRedirect /// Initialize a new instance of the PaletteRedirectBorderEdge class. /// /// Initial palette target for redirection. - public PaletteRedirectBorderEdge(PaletteBase? target) + public PaletteRedirectBorderEdge(PaletteBase target) : this(target, null, null) { } @@ -38,7 +38,7 @@ public PaletteRedirectBorderEdge(PaletteBase? target) /// Initial palette target for redirection. /// Redirection for disabled state requests. /// Redirection for normal state requests. - public PaletteRedirectBorderEdge(PaletteBase? target, + public PaletteRedirectBorderEdge(PaletteBase target, PaletteBorderEdge? disabled, PaletteBorderEdge? normal) : base(target) @@ -119,7 +119,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta { PaletteBorderEdge? inherit = GetInherit(state); - return inherit?.GetBackColor1(state) ?? Target?.GetBorderColor1(style, state) ?? Color.Empty; + return inherit?.GetBackColor1(state) ?? Target?.GetBorderColor1(style, state) ?? GlobalStaticValues.EMPTY_COLOR; } /// @@ -132,7 +132,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta { PaletteBorderEdge? inherit = GetInherit(state); - return inherit?.GetBackColor2(state) ?? Target?.GetBorderColor2(style, state) ?? Color.Empty; + return inherit?.GetBackColor2(state) ?? Target?.GetBorderColor2(style, state) ?? GlobalStaticValues.EMPTY_COLOR; } /// @@ -247,7 +247,7 @@ public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle sty default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectButtonSpec.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectButtonSpec.cs index 5402c79b1..bc70b81f0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectButtonSpec.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectButtonSpec.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public class PaletteRedirectButtonSpec : PaletteRedirect /// /// Initial palette target for redirection. /// Redirection button spec requests. - public PaletteRedirectButtonSpec(PaletteBase? target, IPaletteButtonSpec inherit) + public PaletteRedirectButtonSpec(PaletteBase target, IPaletteButtonSpec inherit) : base(target) => _inherit = inherit; @@ -49,14 +49,14 @@ public PaletteRedirectButtonSpec(PaletteBase? target, IPaletteButtonSpec inherit /// /// Style of button spec. /// String value. - public override string? GetButtonSpecShortText(PaletteButtonSpecStyle style) => _inherit.GetButtonSpecShortText(style); + public override string GetButtonSpecShortText(PaletteButtonSpecStyle style) => _inherit.GetButtonSpecShortText(style); /// /// Gets the long text to display for the button. /// /// Style of button spec. /// String value. - public override string? GetButtonSpecLongText(PaletteButtonSpecStyle style) => _inherit.GetButtonSpecLongText(style); + public override string GetButtonSpecLongText(PaletteButtonSpecStyle style) => _inherit.GetButtonSpecLongText(style); /// /// Gets the color to remap from the image to the container foreground. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectContent.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectContent.cs index 4d2b523ae..d3a788d16 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectContent.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,18 +18,18 @@ namespace Krypton.Toolkit public class PaletteRedirectContent : PaletteRedirect { #region Instance Fields - private IPaletteContent _disabled; - private IPaletteContent _normal; - private IPaletteContent _pressed; - private IPaletteContent _tracking; - private IPaletteContent _checkedNormal; - private IPaletteContent _checkedPressed; - private IPaletteContent _checkedTracking; - private IPaletteContent _focusOverride; - private IPaletteContent _normalDefaultOverride; - private IPaletteContent _linkVisitedOverride; - private IPaletteContent _linkNotVisitedOverride; - private IPaletteContent _linkPressedOverride; + private IPaletteContent? _disabled; + private IPaletteContent? _normal; + private IPaletteContent? _pressed; + private IPaletteContent? _tracking; + private IPaletteContent? _checkedNormal; + private IPaletteContent? _checkedPressed; + private IPaletteContent? _checkedTracking; + private IPaletteContent? _focusOverride; + private IPaletteContent? _normalDefaultOverride; + private IPaletteContent? _linkVisitedOverride; + private IPaletteContent? _linkNotVisitedOverride; + private IPaletteContent? _linkPressedOverride; #endregion #region Identity @@ -47,7 +47,7 @@ public PaletteRedirectContent() /// Initial palette target for redirection. /// Redirection for disabled state requests. /// Redirection for normal state requests. - public PaletteRedirectContent(PaletteBase? target, + public PaletteRedirectContent(PaletteBase target, IPaletteContent disabled, IPaletteContent normal) : this(target, disabled, normal, null, null, null, null, null, null, null, null, null, null) @@ -71,18 +71,18 @@ public PaletteRedirectContent(PaletteBase? target, /// Redirection for link not visited override state requests. /// Redirection for link pressed override state requests. public PaletteRedirectContent(PaletteBase? target, - IPaletteContent disabled, - IPaletteContent normal, - IPaletteContent pressed, - IPaletteContent tracking, - IPaletteContent checkedNormal, - IPaletteContent checkedPressed, - IPaletteContent checkedTracking, - IPaletteContent focusOverride, - IPaletteContent normalDefaultOverride, - IPaletteContent linkVisitedOverride, - IPaletteContent linkNotVisitedOverride, - IPaletteContent linkPressedOverride) + IPaletteContent? disabled, + IPaletteContent? normal, + IPaletteContent? pressed, + IPaletteContent? tracking, + IPaletteContent? checkedNormal, + IPaletteContent? checkedPressed, + IPaletteContent? checkedTracking, + IPaletteContent? focusOverride, + IPaletteContent? normalDefaultOverride, + IPaletteContent? linkVisitedOverride, + IPaletteContent? linkNotVisitedOverride, + IPaletteContent? linkPressedOverride) : base(target) { // Remember state specific inheritance @@ -189,7 +189,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentDraw(state) ?? Target.GetContentDraw(style, state); + return inherit?.GetContentDraw(state) ?? Target!.GetContentDraw(style, state); } /// @@ -202,7 +202,7 @@ public override InheritBool GetContentDrawFocus(PaletteContentStyle style, Palet { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentDrawFocus(state) ?? Target.GetContentDrawFocus(style, state); + return inherit?.GetContentDrawFocus(state) ?? Target!.GetContentDrawFocus(style, state); } /// @@ -215,7 +215,7 @@ public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentImageH(state) ?? Target.GetContentImageH(style, state); + return inherit?.GetContentImageH(state) ?? Target!.GetContentImageH(style, state); } /// @@ -228,7 +228,7 @@ public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentImageV(state) ?? Target.GetContentImageV(style, state); + return inherit?.GetContentImageV(state) ?? Target!.GetContentImageV(style, state); } /// @@ -241,7 +241,7 @@ public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle sty { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentImageEffect(state) ?? Target.GetContentImageEffect(style, state); + return inherit?.GetContentImageEffect(state) ?? Target!.GetContentImageEffect(style, state); } /// @@ -250,11 +250,11 @@ public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle sty /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextFont(state) ?? Target.GetContentShortTextFont(style, state); + return inherit?.GetContentShortTextFont(state) ?? Target!.GetContentShortTextFont(style, state); } /// @@ -267,7 +267,7 @@ public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle styl { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextHint(state) ?? Target.GetContentShortTextHint(style, state); + return inherit?.GetContentShortTextHint(state) ?? Target!.GetContentShortTextHint(style, state); } /// @@ -280,7 +280,7 @@ public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContent { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextPrefix(state) ?? Target.GetContentShortTextPrefix(style, state); + return inherit?.GetContentShortTextPrefix(state) ?? Target!.GetContentShortTextPrefix(style, state); } /// @@ -293,7 +293,7 @@ public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle sty { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextMultiLine(state) ?? Target.GetContentShortTextMultiLine(style, state); + return inherit?.GetContentShortTextMultiLine(state) ?? Target!.GetContentShortTextMultiLine(style, state); } /// @@ -306,7 +306,7 @@ public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle styl { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextTrim(state) ?? Target.GetContentShortTextTrim(style, state); + return inherit?.GetContentShortTextTrim(state) ?? Target!.GetContentShortTextTrim(style, state); } /// @@ -319,7 +319,7 @@ public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle st { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextH(state) ?? Target.GetContentShortTextH(style, state); + return inherit?.GetContentShortTextH(state) ?? Target!.GetContentShortTextH(style, state); } /// @@ -332,7 +332,7 @@ public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle st { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextV(state) ?? Target.GetContentShortTextV(style, state); + return inherit?.GetContentShortTextV(state) ?? Target!.GetContentShortTextV(style, state); } /// @@ -345,7 +345,7 @@ public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteConten { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextMultiLineH(state) ?? Target.GetContentShortTextMultiLineH(style, state); + return inherit?.GetContentShortTextMultiLineH(state) ?? Target!.GetContentShortTextMultiLineH(style, state); } /// @@ -358,7 +358,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextColor1(state) ?? Target.GetContentShortTextColor1(style, state); + return inherit?.GetContentShortTextColor1(state) ?? Target!.GetContentShortTextColor1(style, state); } /// @@ -371,7 +371,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextColor2(state) ?? Target.GetContentShortTextColor2(style, state); + return inherit?.GetContentShortTextColor2(state) ?? Target!.GetContentShortTextColor2(style, state); } /// @@ -384,7 +384,7 @@ public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentSt { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextColorStyle(state) ?? Target.GetContentShortTextColorStyle(style, state); + return inherit?.GetContentShortTextColorStyle(state) ?? Target!.GetContentShortTextColorStyle(style, state); } /// @@ -397,7 +397,7 @@ public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteConte { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextColorAlign(state) ?? Target.GetContentShortTextColorAlign(style, state); + return inherit?.GetContentShortTextColorAlign(state) ?? Target!.GetContentShortTextColorAlign(style, state); } /// @@ -410,7 +410,7 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextColorAngle(state) ?? Target.GetContentShortTextColorAngle(style, state); + return inherit?.GetContentShortTextColorAngle(state) ?? Target!.GetContentShortTextColorAngle(style, state); } /// @@ -423,7 +423,7 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextImage(state) ?? Target.GetContentShortTextImage(style, state); + return inherit?.GetContentShortTextImage(state) ?? Target!.GetContentShortTextImage(style, state); } /// @@ -436,7 +436,7 @@ public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentSt { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextImageStyle(state) ?? Target.GetContentShortTextImageStyle(style, state); + return inherit?.GetContentShortTextImageStyle(state) ?? Target!.GetContentShortTextImageStyle(style, state); } /// @@ -449,7 +449,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentShortTextImageAlign(state) ?? Target.GetContentShortTextImageAlign(style, state); + return inherit?.GetContentShortTextImageAlign(state) ?? Target!.GetContentShortTextImageAlign(style, state); } /// @@ -458,11 +458,11 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextFont(state) ?? Target.GetContentLongTextFont(style, state); + return inherit?.GetContentLongTextFont(state) ?? Target!.GetContentLongTextFont(style, state); } /// @@ -475,7 +475,7 @@ public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextHint(state) ?? Target.GetContentLongTextHint(style, state); + return inherit?.GetContentLongTextHint(state) ?? Target!.GetContentLongTextHint(style, state); } /// @@ -488,7 +488,7 @@ public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle styl { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextMultiLine(state) ?? Target.GetContentLongTextMultiLine(style, state); + return inherit?.GetContentLongTextMultiLine(state) ?? Target!.GetContentLongTextMultiLine(style, state); } /// @@ -501,7 +501,7 @@ public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextTrim(state) ?? Target.GetContentLongTextTrim(style, state); + return inherit?.GetContentLongTextTrim(state) ?? Target!.GetContentLongTextTrim(style, state); } /// @@ -514,7 +514,7 @@ public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentS { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextPrefix(state) ?? Target.GetContentLongTextPrefix(style, state); + return inherit?.GetContentLongTextPrefix(state) ?? Target!.GetContentLongTextPrefix(style, state); } /// @@ -527,7 +527,7 @@ public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle sty { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextH(state) ?? Target.GetContentLongTextH(style, state); + return inherit?.GetContentLongTextH(state) ?? Target!.GetContentLongTextH(style, state); } /// @@ -540,7 +540,7 @@ public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle sty { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextV(state) ?? Target.GetContentLongTextV(style, state); + return inherit?.GetContentLongTextV(state) ?? Target!.GetContentLongTextV(style, state); } /// @@ -553,7 +553,7 @@ public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContent { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextMultiLineH(state) ?? Target.GetContentLongTextMultiLineH(style, state); + return inherit?.GetContentLongTextMultiLineH(state) ?? Target!.GetContentLongTextMultiLineH(style, state); } /// @@ -566,7 +566,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextColor1(state) ?? Target.GetContentLongTextColor1(style, state); + return inherit?.GetContentLongTextColor1(state) ?? Target!.GetContentLongTextColor1(style, state); } /// @@ -579,7 +579,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextColor2(state) ?? Target.GetContentLongTextColor2(style, state); + return inherit?.GetContentLongTextColor2(state) ?? Target!.GetContentLongTextColor2(style, state); } /// @@ -592,7 +592,7 @@ public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentSty { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextColorStyle(state) ?? Target.GetContentLongTextColorStyle(style, state); + return inherit?.GetContentLongTextColorStyle(state) ?? Target!.GetContentLongTextColorStyle(style, state); } /// @@ -605,7 +605,7 @@ public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteConten { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextColorAlign(state) ?? Target.GetContentLongTextColorAlign(style, state); + return inherit?.GetContentLongTextColorAlign(state) ?? Target!.GetContentLongTextColorAlign(style, state); } /// @@ -618,7 +618,7 @@ public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteConten { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextImage(state) ?? Target.GetContentLongTextImage(style, state); + return inherit?.GetContentLongTextImage(state) ?? Target!.GetContentLongTextImage(style, state); } /// @@ -631,7 +631,7 @@ public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentSty { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextImageStyle(state) ?? Target.GetContentLongTextImageStyle(style, state); + return inherit?.GetContentLongTextImageStyle(state) ?? Target!.GetContentLongTextImageStyle(style, state); } /// @@ -644,7 +644,7 @@ public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteConten { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentLongTextImageAlign(state) ?? Target.GetContentLongTextImageAlign(style, state); + return inherit?.GetContentLongTextImageAlign(state) ?? Target!.GetContentLongTextImageAlign(style, state); } /// @@ -657,7 +657,7 @@ public override Padding GetContentPadding(PaletteContentStyle style, PaletteStat { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentPadding(state) ?? Target.GetContentPadding(style, state); + return inherit?.GetContentPadding(state) ?? Target!.GetContentPadding(style, state); } /// @@ -670,7 +670,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat { IPaletteContent? inherit = GetInherit(state); - return inherit?.GetContentAdjacentGap(state) ?? Target.GetContentAdjacentGap(style, state); + return inherit?.GetContentAdjacentGap(state) ?? Target!.GetContentAdjacentGap(style, state); } #endregion @@ -682,6 +682,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat case PaletteState.Disabled: return _disabled; case PaletteState.Normal: + case PaletteState.ContextNormal: // From the TreeGrid return _normal; case PaletteState.Pressed: return _pressed; @@ -706,7 +707,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDouble.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDouble.cs index 2c6634ec1..82ee258a3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDouble.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDouble.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -22,11 +22,11 @@ public class PaletteRedirectDouble : PaletteRedirect private IPaletteDouble? _normal; private IPaletteDouble? _pressed; private IPaletteDouble? _tracking; - private IPaletteDouble _checkedNormal; - private IPaletteDouble _checkedPressed; - private IPaletteDouble _checkedTracking; - private IPaletteDouble _focusOverride; - private IPaletteDouble _normalDefaultOverride; + private IPaletteDouble? _checkedNormal; + private IPaletteDouble? _checkedPressed; + private IPaletteDouble? _checkedTracking; + private IPaletteDouble? _focusOverride; + private IPaletteDouble? _normalDefaultOverride; #endregion #region Identity @@ -95,11 +95,11 @@ public PaletteRedirectDouble(PaletteBase? target, IPaletteDouble? normal, IPaletteDouble? pressed, IPaletteDouble? tracking, - IPaletteDouble checkedNormal, - IPaletteDouble checkedPressed, - IPaletteDouble checkedTracking, - IPaletteDouble focusOverride, - IPaletteDouble normalDefaultOverride) + IPaletteDouble? checkedNormal, + IPaletteDouble? checkedPressed, + IPaletteDouble? checkedTracking, + IPaletteDouble? focusOverride, + IPaletteDouble? normalDefaultOverride) : base(target) { // Remember state specific inheritance @@ -121,8 +121,8 @@ public PaletteRedirectDouble(PaletteBase? target, /// /// Redirection for disabled state requests. /// Redirection for normal state requests. - public virtual void SetRedirectStates(IPaletteDouble? disabled, - IPaletteDouble? normal) + public virtual void SetRedirectStates(IPaletteDouble disabled, + IPaletteDouble normal) { _disabled = disabled; _normal = normal; @@ -137,10 +137,10 @@ public virtual void SetRedirectStates(IPaletteDouble? disabled, /// Redirection for normal state requests. /// Redirection for pressed state requests. /// Redirection for tracking state requests. - public virtual void SetRedirectStates(IPaletteDouble? disabled, - IPaletteDouble? normal, - IPaletteDouble? pressed, - IPaletteDouble? tracking) + public virtual void SetRedirectStates(IPaletteDouble disabled, + IPaletteDouble normal, + IPaletteDouble pressed, + IPaletteDouble tracking) { _disabled = disabled; _normal = normal; @@ -176,9 +176,11 @@ public virtual void ResetRedirectStates() /// InheritBool value. public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackDraw(state) : Target.GetBackDraw(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackDraw(state) + : Target!.GetBackDraw(style, state); } /// @@ -189,9 +191,11 @@ public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState sta /// PaletteGraphicsHint value. public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackGraphicsHint(state) : Target.GetBackGraphicsHint(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackGraphicsHint(state) + : Target!.GetBackGraphicsHint(style, state); } /// @@ -202,9 +206,11 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, /// Color value. public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColor1(state) : Target.GetBackColor1(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackColor1(state) + : Target!.GetBackColor1(style, state); } /// @@ -215,9 +221,11 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) /// Color value. public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColor2(state) : Target.GetBackColor2(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackColor2(state) + : Target!.GetBackColor2(style, state); } /// @@ -228,9 +236,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) /// Color drawing style. public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColorStyle(state) : Target.GetBackColorStyle(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackColorStyle(state) + : Target!.GetBackColorStyle(style, state); } /// @@ -241,9 +251,11 @@ public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, Pale /// Color alignment style. public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColorAlign(state) : Target.GetBackColorAlign(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackColorAlign(state) + : Target!.GetBackColorAlign(style, state); } /// @@ -254,9 +266,11 @@ public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, /// Angle used for color drawing. public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColorAngle(state) : Target.GetBackColorAngle(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackColorAngle(state) + : Target!.GetBackColorAngle(style, state); } /// @@ -267,9 +281,11 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta /// Image instance. public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackImage(state) : Target.GetBackImage(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackImage(state) + : Target!.GetBackImage(style, state); } /// @@ -280,9 +296,11 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta /// Image style value. public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackImageStyle(state) : Target.GetBackImageStyle(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackImageStyle(state) + : Target!.GetBackImageStyle(style, state); } /// @@ -293,9 +311,11 @@ public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, Pale /// Image alignment style. public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackImageAlign(state) : Target.GetBackImageAlign(style, state); + return inherit is not null + ? inherit.PaletteBack.GetBackImageAlign(state) + : Target!.GetBackImageAlign(style, state); } #endregion @@ -308,9 +328,11 @@ public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, /// InheritBool value. public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderDraw(state) : Target.GetBorderDraw(style, state); + return inherit is not null + ? inherit.PaletteBorder!.GetBorderDraw(state) + : Target!.GetBorderDraw(style, state); } /// @@ -321,9 +343,9 @@ public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState /// PaletteDrawBorders value. public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderDrawBorders(state) : Target.GetBorderDrawBorders(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderDrawBorders(state) : Target!.GetBorderDrawBorders(style, state); } /// @@ -334,9 +356,9 @@ public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style /// PaletteGraphicsHint value. public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderGraphicsHint(state) : Target.GetBorderGraphicsHint(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderGraphicsHint(state) : Target!.GetBorderGraphicsHint(style, state); } /// @@ -347,9 +369,9 @@ public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle sty /// Color value. public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColor1(state) : Target.GetBorderColor1(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderColor1(state) : Target!.GetBorderColor1(style, state); } /// @@ -360,9 +382,9 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta /// Color value. public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColor2(state) : Target.GetBorderColor2(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderColor2(state) : Target!.GetBorderColor2(style, state); } /// @@ -373,9 +395,9 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta /// Color drawing style. public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColorStyle(state) : Target.GetBorderColorStyle(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderColorStyle(state) : Target!.GetBorderColorStyle(style, state); } /// @@ -386,9 +408,9 @@ public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, /// Color alignment style. public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColorAlign(state) : Target.GetBorderColorAlign(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderColorAlign(state) : Target!.GetBorderColorAlign(style, state); } /// @@ -399,9 +421,9 @@ public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle sty /// Angle used for color drawing. public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColorAngle(state) : Target.GetBorderColorAngle(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderColorAngle(state) : Target!.GetBorderColorAngle(style, state); } /// @@ -412,9 +434,9 @@ public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState /// Integer width. public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderWidth(state) : Target.GetBorderWidth(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderWidth(state) : Target!.GetBorderWidth(style, state); } /// @@ -425,9 +447,9 @@ public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) /// Float rounding. public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderRounding(state) : Target.GetBorderRounding(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderRounding(state) : Target!.GetBorderRounding(style, state); } /// @@ -438,9 +460,9 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s /// Image instance. public override Image? GetBorderImage(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderImage(state) : Target.GetBorderImage(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderImage(state) : Target!.GetBorderImage(style, state); } /// @@ -451,9 +473,9 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s /// Image style value. public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderImageStyle(state) : Target.GetBorderImageStyle(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderImageStyle(state) : Target!.GetBorderImageStyle(style, state); } /// @@ -464,9 +486,9 @@ public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, /// Image alignment style. public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) { - IPaletteDouble inherit = GetInherit(state); + IPaletteDouble? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderImageAlign(state) : Target.GetBorderImageAlign(style, state); + return inherit is not null ? inherit.PaletteBorder!.GetBorderImageAlign(state) : Target!.GetBorderImageAlign(style, state); } #endregion @@ -496,7 +518,7 @@ public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle sty default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDoubleMetric.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDoubleMetric.cs index f59c36e9e..141329834 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDoubleMetric.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectDoubleMetric.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public class PaletteRedirectDoubleMetric : PaletteRedirectDouble /// Initialize a new instance of the PaletteRedirectDoubleMetric class. /// /// Initial palette target for redirection. - public PaletteRedirectDoubleMetric(PaletteBase? target) + public PaletteRedirectDoubleMetric(PaletteBase target) : this(target, null, null, null, null) { } @@ -42,9 +42,11 @@ public PaletteRedirectDoubleMetric(PaletteBase? target) /// Redirection for disabled metric requests. /// Redirection for normal state requests. /// Redirection for normal metric requests. - public PaletteRedirectDoubleMetric(PaletteBase? target, - IPaletteDouble? disabled, IPaletteMetric? disableMetric, - IPaletteDouble? normal, IPaletteMetric? normalMetric) + public PaletteRedirectDoubleMetric(PaletteBase target, + IPaletteDouble? disabled, + IPaletteMetric? disableMetric, + IPaletteDouble? normal, + IPaletteMetric? normalMetric) : base(target, disabled, normal) { // Remember state specific inheritance @@ -61,10 +63,10 @@ public PaletteRedirectDoubleMetric(PaletteBase? target, /// Redirection for disabled metric requests. /// Redirection for normal state requests. /// Redirection for normal metric requests. - public void SetRedirectStates(IPaletteDouble? disabled, - IPaletteMetric? disableMetric, - IPaletteDouble? normal, - IPaletteMetric? normalMetric) + public void SetRedirectStates(IPaletteDouble disabled, + IPaletteMetric disableMetric, + IPaletteDouble normal, + IPaletteMetric normalMetric) { base.SetRedirectStates(disabled, normal); @@ -85,14 +87,14 @@ public void SetRedirectStates(IPaletteDouble? disabled, /// Redirection for pressed metric requests. /// Redirection for tracking state requests. /// Redirection for tracking metric requests. - public void SetRedirectStates(IPaletteDouble? disabled, - IPaletteMetric? disableMetric, - IPaletteDouble? normal, - IPaletteMetric? normalMetric, - IPaletteDouble? pressed, - IPaletteMetric? pressedMetric, - IPaletteDouble? tracking, - IPaletteMetric? trackingMetric) + public void SetRedirectStates(IPaletteDouble disabled, + IPaletteMetric disableMetric, + IPaletteDouble normal, + IPaletteMetric normalMetric, + IPaletteDouble pressed, + IPaletteMetric pressedMetric, + IPaletteDouble tracking, + IPaletteMetric trackingMetric) { base.SetRedirectStates(disabled, normal, pressed, tracking); @@ -127,9 +129,9 @@ public override void ResetRedirectStates() /// Integer value. public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricInt(state, metric) ?? Target.GetMetricInt(state, metric); + return inherit?.GetMetricInt(state, metric) ?? Target!.GetMetricInt(state, metric); } /// @@ -140,9 +142,9 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) /// InheritBool value. public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricBool(state, metric) ?? Target.GetMetricBool(state, metric); + return inherit?.GetMetricBool(state, metric) ?? Target!.GetMetricBool(state, metric); } /// @@ -153,9 +155,9 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool /// Padding value. public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricPadding(state, metric) ?? Target.GetMetricPadding(state, metric); + return inherit?.GetMetricPadding(state, metric) ?? Target!.GetMetricPadding(state, metric); } #endregion @@ -175,7 +177,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectGrids.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectGrids.cs index 980e8b447..3c65730cc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectGrids.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectGrids.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -30,8 +30,9 @@ public class PaletteRedirectGrids : PaletteRedirect public PaletteRedirectGrids(PaletteBase? target, [DisallowNull] KryptonPaletteGrid grid) : base(target) { - Debug.Assert(grid != null); - _grid = grid; + Debug.Assert(grid is not null); + + _grid = grid ?? throw new ArgumentNullException(nameof(grid)); } #endregion @@ -46,7 +47,7 @@ public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState sta { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackDraw(state) ?? Target.GetBackDraw(style, state); + return inherit?.GetBackDraw(state) ?? Target!.GetBackDraw(style, state); } /// @@ -59,7 +60,7 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackGraphicsHint(state) ?? Target.GetBackGraphicsHint(style, state); + return inherit?.GetBackGraphicsHint(state) ?? Target!.GetBackGraphicsHint(style, state); } /// @@ -72,7 +73,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackColor1(state) ?? Target.GetBackColor1(style, state); + return inherit?.GetBackColor1(state) ?? Target!.GetBackColor1(style, state); } /// @@ -85,7 +86,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackColor2(state) ?? Target.GetBackColor2(style, state); + return inherit?.GetBackColor2(state) ?? Target!.GetBackColor2(style, state); } /// @@ -98,7 +99,7 @@ public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, Pale { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackColorStyle(state) ?? Target.GetBackColorStyle(style, state); + return inherit?.GetBackColorStyle(state) ?? Target!.GetBackColorStyle(style, state); } /// @@ -111,7 +112,7 @@ public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackColorAlign(state) ?? Target.GetBackColorAlign(style, state); + return inherit?.GetBackColorAlign(state) ?? Target!.GetBackColorAlign(style, state); } /// @@ -124,7 +125,7 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackColorAngle(state) ?? Target.GetBackColorAngle(style, state); + return inherit?.GetBackColorAngle(state) ?? Target!.GetBackColorAngle(style, state); } /// @@ -137,7 +138,7 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackImage(state) ?? Target.GetBackImage(style, state); + return inherit?.GetBackImage(state) ?? Target!.GetBackImage(style, state); } /// @@ -150,7 +151,7 @@ public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, Pale { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackImageStyle(state) ?? Target.GetBackImageStyle(style, state); + return inherit?.GetBackImageStyle(state) ?? Target!.GetBackImageStyle(style, state); } /// @@ -163,7 +164,7 @@ public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, { IPaletteBack inherit = GetInheritBack(style, state); - return inherit?.GetBackImageAlign(state) ?? Target.GetBackImageAlign(style, state); + return inherit?.GetBackImageAlign(state) ?? Target!.GetBackImageAlign(style, state); } #endregion @@ -178,7 +179,7 @@ public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderDraw(state) ?? Target.GetBorderDraw(style, state); + return inherit?.GetBorderDraw(state) ?? Target!.GetBorderDraw(style, state); } /// @@ -191,7 +192,7 @@ public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderDrawBorders(state) ?? Target.GetBorderDrawBorders(style, state); + return inherit?.GetBorderDrawBorders(state) ?? Target!.GetBorderDrawBorders(style, state); } /// @@ -204,7 +205,7 @@ public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle sty { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderGraphicsHint(state) ?? Target.GetBorderGraphicsHint(style, state); + return inherit?.GetBorderGraphicsHint(state) ?? Target!.GetBorderGraphicsHint(style, state); } /// @@ -217,7 +218,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderColor1(state) ?? Target.GetBorderColor1(style, state); + return inherit?.GetBorderColor1(state) ?? Target!.GetBorderColor1(style, state); } /// @@ -230,7 +231,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderColor2(state) ?? Target.GetBorderColor2(style, state); + return inherit?.GetBorderColor2(state) ?? Target!.GetBorderColor2(style, state); } /// @@ -243,7 +244,7 @@ public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderColorStyle(state) ?? Target.GetBorderColorStyle(style, state); + return inherit?.GetBorderColorStyle(state) ?? Target!.GetBorderColorStyle(style, state); } /// @@ -256,7 +257,7 @@ public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle sty { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderColorAlign(state) ?? Target.GetBorderColorAlign(style, state); + return inherit?.GetBorderColorAlign(state) ?? Target!.GetBorderColorAlign(style, state); } /// @@ -269,7 +270,7 @@ public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderColorAngle(state) ?? Target.GetBorderColorAngle(style, state); + return inherit?.GetBorderColorAngle(state) ?? Target!.GetBorderColorAngle(style, state); } /// @@ -282,7 +283,7 @@ public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderWidth(state) ?? Target.GetBorderWidth(style, state); + return inherit?.GetBorderWidth(state) ?? Target!.GetBorderWidth(style, state); } /// @@ -295,7 +296,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderRounding(state) ?? Target.GetBorderRounding(style, state); + return inherit?.GetBorderRounding(state) ?? Target!.GetBorderRounding(style, state); } /// @@ -308,7 +309,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderImage(state) ?? Target.GetBorderImage(style, state); + return inherit?.GetBorderImage(state) ?? Target!.GetBorderImage(style, state); } /// @@ -321,7 +322,7 @@ public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderImageStyle(state) ?? Target.GetBorderImageStyle(style, state); + return inherit?.GetBorderImageStyle(state) ?? Target!.GetBorderImageStyle(style, state); } /// @@ -334,7 +335,7 @@ public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle sty { IPaletteBorder inherit = GetInheritBorder(style, state); - return inherit?.GetBorderImageAlign(state) ?? Target.GetBorderImageAlign(style, state); + return inherit?.GetBorderImageAlign(state) ?? Target!.GetBorderImageAlign(style, state); } #endregion @@ -349,7 +350,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentDraw(state) ?? Target.GetContentDraw(style, state); + return inherit?.GetContentDraw(state) ?? Target!.GetContentDraw(style, state); } /// @@ -362,7 +363,7 @@ public override InheritBool GetContentDrawFocus(PaletteContentStyle style, Palet { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentDrawFocus(state) ?? Target.GetContentDrawFocus(style, state); + return inherit?.GetContentDrawFocus(state) ?? Target!.GetContentDrawFocus(style, state); } /// @@ -375,7 +376,7 @@ public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentImageH(state) ?? Target.GetContentImageH(style, state); + return inherit?.GetContentImageH(state) ?? Target!.GetContentImageH(style, state); } /// @@ -388,7 +389,7 @@ public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentImageV(state) ?? Target.GetContentImageV(style, state); + return inherit?.GetContentImageV(state) ?? Target!.GetContentImageV(style, state); } /// @@ -401,7 +402,7 @@ public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle sty { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentImageEffect(state) ?? Target.GetContentImageEffect(style, state); + return inherit?.GetContentImageEffect(state) ?? Target!.GetContentImageEffect(style, state); } /// @@ -410,11 +411,11 @@ public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle sty /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextFont(state) ?? Target.GetContentShortTextFont(style, state); + return inherit?.GetContentShortTextFont(state) ?? Target!.GetContentShortTextFont(style, state); } /// @@ -427,7 +428,7 @@ public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle styl { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextHint(state) ?? Target.GetContentShortTextHint(style, state); + return inherit?.GetContentShortTextHint(state) ?? Target!.GetContentShortTextHint(style, state); } /// @@ -440,7 +441,7 @@ public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContent { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextPrefix(state) ?? Target.GetContentShortTextPrefix(style, state); + return inherit?.GetContentShortTextPrefix(state) ?? Target!.GetContentShortTextPrefix(style, state); } /// @@ -453,7 +454,7 @@ public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle sty { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextMultiLine(state) ?? Target.GetContentShortTextMultiLine(style, state); + return inherit?.GetContentShortTextMultiLine(state) ?? Target!.GetContentShortTextMultiLine(style, state); } /// @@ -466,7 +467,7 @@ public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle styl { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextTrim(state) ?? Target.GetContentShortTextTrim(style, state); + return inherit?.GetContentShortTextTrim(state) ?? Target!.GetContentShortTextTrim(style, state); } /// @@ -479,7 +480,7 @@ public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle st { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextH(state) ?? Target.GetContentShortTextH(style, state); + return inherit?.GetContentShortTextH(state) ?? Target!.GetContentShortTextH(style, state); } /// @@ -492,7 +493,7 @@ public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle st { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextV(state) ?? Target.GetContentShortTextV(style, state); + return inherit?.GetContentShortTextV(state) ?? Target!.GetContentShortTextV(style, state); } /// @@ -505,7 +506,7 @@ public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteConten { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextMultiLineH(state) ?? Target.GetContentShortTextMultiLineH(style, state); + return inherit?.GetContentShortTextMultiLineH(state) ?? Target!.GetContentShortTextMultiLineH(style, state); } /// @@ -518,7 +519,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextColor1(state) ?? Target.GetContentShortTextColor1(style, state); + return inherit?.GetContentShortTextColor1(state) ?? Target!.GetContentShortTextColor1(style, state); } /// @@ -531,7 +532,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextColor2(state) ?? Target.GetContentShortTextColor2(style, state); + return inherit?.GetContentShortTextColor2(state) ?? Target!.GetContentShortTextColor2(style, state); } /// @@ -544,7 +545,7 @@ public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentSt { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextColorStyle(state) ?? Target.GetContentShortTextColorStyle(style, state); + return inherit?.GetContentShortTextColorStyle(state) ?? Target!.GetContentShortTextColorStyle(style, state); } /// @@ -557,7 +558,7 @@ public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteConte { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextColorAlign(state) ?? Target.GetContentShortTextColorAlign(style, state); + return inherit?.GetContentShortTextColorAlign(state) ?? Target!.GetContentShortTextColorAlign(style, state); } /// @@ -570,7 +571,7 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextColorAngle(state) ?? Target.GetContentShortTextColorAngle(style, state); + return inherit?.GetContentShortTextColorAngle(state) ?? Target!.GetContentShortTextColorAngle(style, state); } /// @@ -583,7 +584,7 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextImage(state) ?? Target.GetContentShortTextImage(style, state); + return inherit?.GetContentShortTextImage(state) ?? Target!.GetContentShortTextImage(style, state); } /// @@ -596,7 +597,7 @@ public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentSt { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextImageStyle(state) ?? Target.GetContentShortTextImageStyle(style, state); + return inherit?.GetContentShortTextImageStyle(state) ?? Target!.GetContentShortTextImageStyle(style, state); } /// @@ -609,7 +610,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentShortTextImageAlign(state) ?? Target.GetContentShortTextImageAlign(style, state); + return inherit?.GetContentShortTextImageAlign(state) ?? Target!.GetContentShortTextImageAlign(style, state); } /// @@ -618,11 +619,11 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextFont(state) ?? Target.GetContentLongTextFont(style, state); + return inherit?.GetContentLongTextFont(state) ?? Target!.GetContentLongTextFont(style, state); } /// @@ -635,7 +636,7 @@ public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextHint(state) ?? Target.GetContentLongTextHint(style, state); + return inherit?.GetContentLongTextHint(state) ?? Target!.GetContentLongTextHint(style, state); } /// @@ -648,7 +649,7 @@ public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle styl { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextMultiLine(state) ?? Target.GetContentLongTextMultiLine(style, state); + return inherit?.GetContentLongTextMultiLine(state) ?? Target!.GetContentLongTextMultiLine(style, state); } /// @@ -661,7 +662,7 @@ public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextTrim(state) ?? Target.GetContentLongTextTrim(style, state); + return inherit?.GetContentLongTextTrim(state) ?? Target!.GetContentLongTextTrim(style, state); } /// @@ -674,7 +675,7 @@ public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentS { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextPrefix(state) ?? Target.GetContentLongTextPrefix(style, state); + return inherit?.GetContentLongTextPrefix(state) ?? Target!.GetContentLongTextPrefix(style, state); } /// @@ -687,7 +688,7 @@ public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle sty { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextH(state) ?? Target.GetContentLongTextH(style, state); + return inherit?.GetContentLongTextH(state) ?? Target!.GetContentLongTextH(style, state); } /// @@ -700,7 +701,7 @@ public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle sty { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextV(state) ?? Target.GetContentLongTextV(style, state); + return inherit?.GetContentLongTextV(state) ?? Target!.GetContentLongTextV(style, state); } /// @@ -713,7 +714,7 @@ public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContent { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextMultiLineH(state) ?? Target.GetContentLongTextMultiLineH(style, state); + return inherit?.GetContentLongTextMultiLineH(state) ?? Target!.GetContentLongTextMultiLineH(style, state); } /// @@ -726,7 +727,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextColor1(state) ?? Target.GetContentLongTextColor1(style, state); + return inherit?.GetContentLongTextColor1(state) ?? Target!.GetContentLongTextColor1(style, state); } /// @@ -739,7 +740,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextColor2(state) ?? Target.GetContentLongTextColor2(style, state); + return inherit?.GetContentLongTextColor2(state) ?? Target!.GetContentLongTextColor2(style, state); } /// @@ -752,7 +753,7 @@ public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentSty { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextColorStyle(state) ?? Target.GetContentLongTextColorStyle(style, state); + return inherit?.GetContentLongTextColorStyle(state) ?? Target!.GetContentLongTextColorStyle(style, state); } /// @@ -765,7 +766,7 @@ public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteConten { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextColorAlign(state) ?? Target.GetContentLongTextColorAlign(style, state); + return inherit?.GetContentLongTextColorAlign(state) ?? Target!.GetContentLongTextColorAlign(style, state); } /// @@ -778,7 +779,7 @@ public override float GetContentLongTextColorAngle(PaletteContentStyle style, Pa { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextColorAngle(state) ?? Target.GetContentLongTextColorAngle(style, state); + return inherit?.GetContentLongTextColorAngle(state) ?? Target!.GetContentLongTextColorAngle(style, state); } /// @@ -791,7 +792,7 @@ public override float GetContentLongTextColorAngle(PaletteContentStyle style, Pa { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextImage(state) ?? Target.GetContentLongTextImage(style, state); + return inherit?.GetContentLongTextImage(state) ?? Target!.GetContentLongTextImage(style, state); } /// @@ -804,7 +805,7 @@ public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentSty { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextImageStyle(state) ?? Target.GetContentLongTextImageStyle(style, state); + return inherit?.GetContentLongTextImageStyle(state) ?? Target!.GetContentLongTextImageStyle(style, state); } /// @@ -817,7 +818,7 @@ public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteConten { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentLongTextImageAlign(state) ?? Target.GetContentLongTextImageAlign(style, state); + return inherit?.GetContentLongTextImageAlign(state) ?? Target!.GetContentLongTextImageAlign(style, state); } /// @@ -830,7 +831,7 @@ public override Padding GetContentPadding(PaletteContentStyle style, PaletteStat { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentPadding(state) ?? Target.GetContentPadding(style, state); + return inherit?.GetContentPadding(state) ?? Target!.GetContentPadding(style, state); } /// @@ -843,12 +844,12 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat { IPaletteContent inherit = GetInheritContent(style, state); - return inherit?.GetContentAdjacentGap(state) ?? Target.GetContentAdjacentGap(style, state); + return inherit?.GetContentAdjacentGap(state) ?? Target!.GetContentAdjacentGap(style, state); } #endregion #region Implementation - private IPaletteBack? GetInheritBack(PaletteBackStyle style, PaletteState state) + private IPaletteBack GetInheritBack(PaletteBackStyle style, PaletteState state) { switch (state) { @@ -881,6 +882,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateDisabled.HeaderRow.Back; } break; + case PaletteState.Normal: switch (style) { @@ -910,6 +912,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateNormal.HeaderRow.Back; } break; + case PaletteState.Pressed: switch (style) { @@ -927,6 +930,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StatePressed.HeaderRow.Back; } break; + case PaletteState.Tracking: switch (style) { @@ -944,6 +948,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateTracking.HeaderRow.Back; } break; + case PaletteState.CheckedNormal: switch (style) { @@ -971,10 +976,10 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } - private IPaletteBorder? GetInheritBorder(PaletteBorderStyle style, PaletteState state) + private IPaletteBorder GetInheritBorder(PaletteBorderStyle style, PaletteState state) { switch (state) { @@ -1001,6 +1006,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateDisabled.HeaderRow.Border; } break; + case PaletteState.Normal: switch (style) { @@ -1024,6 +1030,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateNormal.HeaderRow.Border; } break; + case PaletteState.Pressed: switch (style) { @@ -1041,6 +1048,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StatePressed.HeaderRow.Border; } break; + case PaletteState.Tracking: switch (style) { @@ -1058,6 +1066,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateTracking.HeaderRow.Border; } break; + case PaletteState.CheckedNormal: switch (style) { @@ -1085,10 +1094,10 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } - private IPaletteContent? GetInheritContent(PaletteContentStyle style, PaletteState state) + private IPaletteContent GetInheritContent(PaletteContentStyle style, PaletteState state) { switch (state) { @@ -1115,6 +1124,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateDisabled.HeaderRow.Content; } break; + case PaletteState.Normal: switch (style) { @@ -1138,6 +1148,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateNormal.HeaderRow.Content; } break; + case PaletteState.Pressed: switch (style) { @@ -1155,6 +1166,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StatePressed.HeaderRow.Content; } break; + case PaletteState.Tracking: switch (style) { @@ -1172,6 +1184,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat return _grid.StateTracking.HeaderRow.Content; } break; + case PaletteState.CheckedNormal: switch (style) { @@ -1199,7 +1212,7 @@ public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteStat // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectMetric.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectMetric.cs index 665c1f255..4a967bd08 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectMetric.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectMetric.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,8 +18,8 @@ namespace Krypton.Toolkit public class PaletteRedirectMetric : PaletteRedirect { #region Instance Fields - private IPaletteMetric _disabled; - private IPaletteMetric _normal; + private IPaletteMetric?_disabled; + private IPaletteMetric? _normal; #endregion #region Identity @@ -27,7 +27,7 @@ public class PaletteRedirectMetric : PaletteRedirect /// Initialize a new instance of the PaletteRedirectMetric class. /// /// Initial palette target for redirection. - public PaletteRedirectMetric(PaletteBase? target) + public PaletteRedirectMetric(PaletteBase target) : this(target, null, null) { } @@ -38,9 +38,9 @@ public PaletteRedirectMetric(PaletteBase? target) /// Initial palette target for redirection. /// Redirection for disabled metric requests. /// Redirection for normal metric requests. - public PaletteRedirectMetric(PaletteBase? target, - IPaletteMetric disableMetric, - IPaletteMetric normalMetric) + public PaletteRedirectMetric(PaletteBase target, + IPaletteMetric? disableMetric, + IPaletteMetric? normalMetric) : base(target) { // Remember state specific inheritance @@ -83,9 +83,9 @@ public void ResetRedirectStates() /// Integer value. public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricInt(state, metric) ?? Target.GetMetricInt(state, metric); + return inherit?.GetMetricInt(state, metric) ?? Target!.GetMetricInt(state, metric); } /// @@ -96,9 +96,9 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) /// InheritBool value. public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricBool(state, metric) ?? Target.GetMetricBool(state, metric); + return inherit?.GetMetricBool(state, metric) ?? Target!.GetMetricBool(state, metric); } /// @@ -109,9 +109,9 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool /// Padding value. public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricPadding(state, metric) ?? Target.GetMetricPadding(state, metric); + return inherit?.GetMetricPadding(state, metric) ?? Target!.GetMetricPadding(state, metric); } #endregion @@ -127,7 +127,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonBack.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonBack.cs index 182f76dc4..24e93047d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonBack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonBack.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,12 +16,12 @@ namespace Krypton.Toolkit public class PaletteRedirectRibbonBack : PaletteRedirect { #region Instance Fields - private IPaletteRibbonBack _disabledBack; - private IPaletteRibbonBack _normalBack; - private IPaletteRibbonBack _pressedBack; - private IPaletteRibbonBack _trackingBack; - private IPaletteRibbonBack _selectedBack; - private IPaletteRibbonBack _focusOverrideBack; + private IPaletteRibbonBack? _disabledBack; + private IPaletteRibbonBack? _normalBack; + private IPaletteRibbonBack? _pressedBack; + private IPaletteRibbonBack? _trackingBack; + private IPaletteRibbonBack? _selectedBack; + private IPaletteRibbonBack? _focusOverrideBack; #endregion #region Identity @@ -60,12 +58,12 @@ public PaletteRedirectRibbonBack(PaletteBase target, /// Redirection for selected states requests. /// Redirection for back focus override state requests. public PaletteRedirectRibbonBack(PaletteBase target, - IPaletteRibbonBack disabledBack, - IPaletteRibbonBack normalBack, - IPaletteRibbonBack pressedBack, - IPaletteRibbonBack trackingBack, - IPaletteRibbonBack selectedBack, - IPaletteRibbonBack focusOverrideBack) + IPaletteRibbonBack? disabledBack, + IPaletteRibbonBack? normalBack, + IPaletteRibbonBack? pressedBack, + IPaletteRibbonBack? trackingBack, + IPaletteRibbonBack? selectedBack, + IPaletteRibbonBack? focusOverrideBack) : base(target) { // Remember state specific inheritance @@ -144,9 +142,9 @@ public virtual void ResetRedirectStates() /// Color value. public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColorStyle(state) ?? Target.GetRibbonBackColorStyle(style, state); + return inherit?.GetRibbonBackColorStyle(state) ?? Target!.GetRibbonBackColorStyle(style, state); } #endregion @@ -159,9 +157,9 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac /// Color value. public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor1(state) ?? Target.GetRibbonBackColor1(style, state); + return inherit?.GetRibbonBackColor1(state) ?? Target!.GetRibbonBackColor1(style, state); } #endregion @@ -174,9 +172,9 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor2(state) ?? Target.GetRibbonBackColor2(style, state); + return inherit?.GetRibbonBackColor2(state) ?? Target!.GetRibbonBackColor2(style, state); } #endregion @@ -189,9 +187,9 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor3(state) ?? Target.GetRibbonBackColor3(style, state); + return inherit?.GetRibbonBackColor3(state) ?? Target!.GetRibbonBackColor3(style, state); } #endregion @@ -204,9 +202,9 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor4(state) ?? Target.GetRibbonBackColor4(style, state); + return inherit?.GetRibbonBackColor4(state) ?? Target!.GetRibbonBackColor4(style, state); } #endregion @@ -219,9 +217,9 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor5(state) ?? Target.GetRibbonBackColor5(style, state); + return inherit?.GetRibbonBackColor5(state) ?? Target!.GetRibbonBackColor5(style, state); } #endregion @@ -247,7 +245,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonDouble.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonDouble.cs index 73aca5fbf..3cbaf6432 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonDouble.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonDouble.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,18 +18,18 @@ namespace Krypton.Toolkit public class PaletteRedirectRibbonDouble : PaletteRedirect { #region Instance Fields - private IPaletteRibbonBack _disabledBack; - private IPaletteRibbonBack _normalBack; - private IPaletteRibbonBack _pressedBack; - private IPaletteRibbonBack _trackingBack; - private IPaletteRibbonBack _selectedBack; - private IPaletteRibbonBack _focusOverrideBack; - private IPaletteRibbonText _disabledText; - private IPaletteRibbonText _normalText; - private IPaletteRibbonText _pressedText; - private IPaletteRibbonText _trackingText; - private IPaletteRibbonText _selectedText; - private IPaletteRibbonText _focusOverrideText; + private IPaletteRibbonBack? _disabledBack; + private IPaletteRibbonBack? _normalBack; + private IPaletteRibbonBack? _pressedBack; + private IPaletteRibbonBack? _trackingBack; + private IPaletteRibbonBack? _selectedBack; + private IPaletteRibbonBack? _focusOverrideBack; + private IPaletteRibbonText? _disabledText; + private IPaletteRibbonText? _normalText; + private IPaletteRibbonText? _pressedText; + private IPaletteRibbonText? _trackingText; + private IPaletteRibbonText? _selectedText; + private IPaletteRibbonText? _focusOverrideText; #endregion #region Identity @@ -38,7 +38,7 @@ public class PaletteRedirectRibbonDouble : PaletteRedirect /// /// Initial palette target for redirection. public PaletteRedirectRibbonDouble(PaletteBase target) - : this(target, + : this(target, null, null, null, null, null, null, null, null, null, null, null, null) { @@ -61,18 +61,18 @@ public PaletteRedirectRibbonDouble(PaletteBase target) /// Redirection for text selected states requests. /// Redirection for text focus override state requests. public PaletteRedirectRibbonDouble(PaletteBase target, - IPaletteRibbonBack disabledBack, - IPaletteRibbonBack normalBack, - IPaletteRibbonBack pressedBack, - IPaletteRibbonBack trackingBack, - IPaletteRibbonBack selectedBack, - IPaletteRibbonBack focusOverrideBack, - IPaletteRibbonText disabledText, - IPaletteRibbonText normalText, - IPaletteRibbonText pressedText, - IPaletteRibbonText trackingText, - IPaletteRibbonText selectedText, - IPaletteRibbonText focusOverrideText + IPaletteRibbonBack? disabledBack, + IPaletteRibbonBack? normalBack, + IPaletteRibbonBack? pressedBack, + IPaletteRibbonBack? trackingBack, + IPaletteRibbonBack? selectedBack, + IPaletteRibbonBack? focusOverrideBack, + IPaletteRibbonText? disabledText, + IPaletteRibbonText? normalText, + IPaletteRibbonText? pressedText, + IPaletteRibbonText? trackingText, + IPaletteRibbonText? selectedText, + IPaletteRibbonText? focusOverrideText ) : base(target) { @@ -166,9 +166,9 @@ public virtual void ResetRedirectStates() /// Color value. public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColorStyle(state) ?? Target.GetRibbonBackColorStyle(style, state); + return inherit?.GetRibbonBackColorStyle(state) ?? Target!.GetRibbonBackColorStyle(style, state); } #endregion @@ -181,9 +181,9 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac /// Color value. public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor1(state) ?? Target.GetRibbonBackColor1(style, state); + return inherit?.GetRibbonBackColor1(state) ?? Target!.GetRibbonBackColor1(style, state); } #endregion @@ -196,9 +196,9 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor2(state) ?? Target.GetRibbonBackColor2(style, state); + return inherit?.GetRibbonBackColor2(state) ?? Target!.GetRibbonBackColor2(style, state); } #endregion @@ -211,9 +211,9 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor3(state) ?? Target.GetRibbonBackColor3(style, state); + return inherit?.GetRibbonBackColor3(state) ?? Target!.GetRibbonBackColor3(style, state); } #endregion @@ -226,9 +226,9 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor4(state) ?? Target.GetRibbonBackColor4(style, state); + return inherit?.GetRibbonBackColor4(state) ?? Target!.GetRibbonBackColor4(style, state); } #endregion @@ -241,9 +241,9 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) { - IPaletteRibbonBack inherit = GetBackInherit(state); + IPaletteRibbonBack? inherit = GetBackInherit(state); - return inherit?.GetRibbonBackColor5(state) ?? Target.GetRibbonBackColor5(style, state); + return inherit?.GetRibbonBackColor5(state) ?? Target!.GetRibbonBackColor5(style, state); } #endregion @@ -256,9 +256,9 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) { - IPaletteRibbonText inherit = GetTextInherit(state); + IPaletteRibbonText? inherit = GetTextInherit(state); - return inherit?.GetRibbonTextColor(state) ?? Target.GetRibbonTextColor(style, state); + return inherit?.GetRibbonTextColor(state) ?? Target!.GetRibbonTextColor(style, state); } #endregion @@ -284,7 +284,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } @@ -309,7 +309,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonGeneral.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonGeneral.cs index 75cc41cfb..374107383 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonGeneral.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectRibbonGeneral.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,10 +18,10 @@ namespace Krypton.Toolkit public class PaletteRedirectRibbonGeneral : PaletteRedirect { #region Instance Fields - private readonly IPaletteRibbonGeneral _disabled; - private readonly IPaletteRibbonGeneral _normal; - private readonly IPaletteRibbonGeneral _pressed; - private readonly IPaletteRibbonGeneral _tracking; + private readonly IPaletteRibbonGeneral? _disabled; + private readonly IPaletteRibbonGeneral? _normal; + private readonly IPaletteRibbonGeneral? _pressed; + private readonly IPaletteRibbonGeneral? _tracking; #endregion #region Identity @@ -29,7 +29,7 @@ public class PaletteRedirectRibbonGeneral : PaletteRedirect /// Initialize a new instance of the PaletteRedirectRibbonGeneral class. /// /// Initial palette target for redirection. - public PaletteRedirectRibbonGeneral(PaletteBase? target) + public PaletteRedirectRibbonGeneral(PaletteBase target) : this(target, null, null, null, null) { } @@ -42,11 +42,11 @@ public PaletteRedirectRibbonGeneral(PaletteBase? target) /// Redirection for normal state requests. /// Redirection for pressed state requests. /// Redirection for tracking state requests. - public PaletteRedirectRibbonGeneral(PaletteBase? target, - IPaletteRibbonGeneral disabled, - IPaletteRibbonGeneral normal, - IPaletteRibbonGeneral pressed, - IPaletteRibbonGeneral tracking + public PaletteRedirectRibbonGeneral(PaletteBase target, + IPaletteRibbonGeneral? disabled, + IPaletteRibbonGeneral? normal, + IPaletteRibbonGeneral? pressed, + IPaletteRibbonGeneral? tracking ) : base(target) { @@ -64,11 +64,11 @@ IPaletteRibbonGeneral tracking /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDisabledDark(PaletteState state) + public override Color GetRibbonDisabledDark(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonDisabledDark(state) ?? Target.GetRibbonDisabledDark(state); + return inherit?.GetRibbonDisabledDark(state) ?? Target!.GetRibbonDisabledDark(state); } /// @@ -78,9 +78,9 @@ public override Color GetRibbonDisabledDark(PaletteState state) /// Color value. public override Color GetRibbonDisabledLight(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonDisabledLight(state) ?? Target.GetRibbonDisabledLight(state); + return inherit?.GetRibbonDisabledLight(state) ?? Target!.GetRibbonDisabledLight(state); } /// @@ -90,9 +90,9 @@ public override Color GetRibbonDisabledLight(PaletteState state) /// Color value. public override Color GetRibbonGroupDialogDark(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonGroupDialogDark(state) ?? Target.GetRibbonGroupDialogDark(state); + return inherit?.GetRibbonGroupDialogDark(state) ?? Target!.GetRibbonGroupDialogDark(state); } /// @@ -102,9 +102,9 @@ public override Color GetRibbonGroupDialogDark(PaletteState state) /// Color value. public override Color GetRibbonGroupDialogLight(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonGroupDialogLight(state) ?? Target.GetRibbonGroupDialogLight(state); + return inherit?.GetRibbonGroupDialogLight(state) ?? Target!.GetRibbonGroupDialogLight(state); } /// @@ -114,9 +114,9 @@ public override Color GetRibbonGroupDialogLight(PaletteState state) /// Color value. public override Color GetRibbonGroupSeparatorDark(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonGroupSeparatorDark(state) ?? Target.GetRibbonGroupSeparatorDark(state); + return inherit?.GetRibbonGroupSeparatorDark(state) ?? Target!.GetRibbonGroupSeparatorDark(state); } /// @@ -126,9 +126,9 @@ public override Color GetRibbonGroupSeparatorDark(PaletteState state) /// Color value. public override Color GetRibbonGroupSeparatorLight(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonGroupSeparatorLight(state) ?? Target.GetRibbonGroupSeparatorLight(state); + return inherit?.GetRibbonGroupSeparatorLight(state) ?? Target!.GetRibbonGroupSeparatorLight(state); } /// @@ -138,9 +138,9 @@ public override Color GetRibbonGroupSeparatorLight(PaletteState state) /// Color value. public override Color GetRibbonMinimizeBarDark(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonMinimizeBarDark(state) ?? Target.GetRibbonMinimizeBarDark(state); + return inherit?.GetRibbonMinimizeBarDark(state) ?? Target!.GetRibbonMinimizeBarDark(state); } /// @@ -150,9 +150,9 @@ public override Color GetRibbonMinimizeBarDark(PaletteState state) /// Color value. public override Color GetRibbonMinimizeBarLight(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonMinimizeBarLight(state) ?? Target.GetRibbonMinimizeBarLight(state); + return inherit?.GetRibbonMinimizeBarLight(state) ?? Target!.GetRibbonMinimizeBarLight(state); } /// @@ -162,9 +162,9 @@ public override Color GetRibbonMinimizeBarLight(PaletteState state) /// Color value. public override Color GetRibbonTabSeparatorColor(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonTabSeparatorColor(state) ?? Target.GetRibbonTabSeparatorColor(state); + return inherit?.GetRibbonTabSeparatorColor(state) ?? Target!.GetRibbonTabSeparatorColor(state); } /// @@ -174,9 +174,9 @@ public override Color GetRibbonTabSeparatorColor(PaletteState state) /// Color value. public override Color GetRibbonTabSeparatorContextColor(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonTabSeparatorContextColor(state) ?? Target.GetRibbonTabSeparatorContextColor(state); + return inherit?.GetRibbonTabSeparatorContextColor(state) ?? Target!.GetRibbonTabSeparatorContextColor(state); } /// @@ -186,9 +186,9 @@ public override Color GetRibbonTabSeparatorContextColor(PaletteState state) /// Font value. public override Font GetRibbonTextFont(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonTextFont(state) ?? Target.GetRibbonTextFont(state); + return inherit?.GetRibbonTextFont(state) ?? Target!.GetRibbonTextFont(state); } /// @@ -198,9 +198,9 @@ public override Font GetRibbonTextFont(PaletteState state) /// PaletteTextHint value. public override PaletteTextHint GetRibbonTextHint(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonTextHint(state) ?? Target.GetRibbonTextHint(state); + return inherit?.GetRibbonTextHint(state) ?? Target!.GetRibbonTextHint(state); } /// @@ -210,9 +210,9 @@ public override PaletteTextHint GetRibbonTextHint(PaletteState state) /// Color value. public override Color GetRibbonQATButtonDark(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonQATButtonDark(state) ?? Target.GetRibbonQATButtonDark(state); + return inherit?.GetRibbonQATButtonDark(state) ?? Target!.GetRibbonQATButtonDark(state); } /// @@ -222,9 +222,9 @@ public override Color GetRibbonQATButtonDark(PaletteState state) /// Color value. public override Color GetRibbonQATButtonLight(PaletteState state) { - IPaletteRibbonGeneral inherit = GetInherit(state); + IPaletteRibbonGeneral? inherit = GetInherit(state); - return inherit?.GetRibbonQATButtonLight(state) ?? Target.GetRibbonQATButtonLight(state); + return inherit?.GetRibbonQATButtonLight(state) ?? Target!.GetRibbonQATButtonLight(state); } #endregion @@ -244,7 +244,7 @@ public override Color GetRibbonQATButtonLight(PaletteState state) default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTriple.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTriple.cs index 441b14e26..7ef46a521 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTriple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTriple.cs @@ -1,1133 +1,1184 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion -namespace Krypton.Toolkit +namespace Krypton.Toolkit; + +/// +/// Redirect back/border/content based on the incoming state of the request. +/// +public class PaletteRedirectTriple : PaletteRedirect { + #region Instance Fields + private IPaletteTriple? _disabled; + private IPaletteTriple? _normal; + private IPaletteTriple? _pressed; + private IPaletteTriple? _tracking; + private IPaletteTriple? _checkedNormal; + private IPaletteTriple? _checkedPressed; + private IPaletteTriple? _checkedTracking; + private IPaletteTriple? _focusOverride; + private IPaletteTriple? _normalDefaultOverride; + private readonly IPaletteTriple? _contextNormal; + private readonly IPaletteTriple? _contextPressed; + private readonly IPaletteTriple? _contextTracking; + #endregion + + #region Identity /// - /// Redirect back/border/content based on the incoming state of the request. - /// - public class PaletteRedirectTriple : PaletteRedirect - { - #region Instance Fields - private IPaletteTriple? _disabled; - private IPaletteTriple? _normal; - private IPaletteTriple? _pressed; - private IPaletteTriple? _tracking; - private IPaletteTriple? _checkedNormal; - private IPaletteTriple? _checkedPressed; - private IPaletteTriple? _checkedTracking; - private IPaletteTriple? _focusOverride; - private IPaletteTriple? _normalDefaultOverride; - private IPaletteTriple? _contextNormal; - private IPaletteTriple? _contextPressed; - private IPaletteTriple? _contextTracking; - #endregion - - #region Identity - /// - /// Initialize a new instance of the PaletteRedirectTriple class. - /// - public PaletteRedirectTriple() - : this(null, null, null, null, null, null, null, null, null, null) - { - } + /// Initialize a new instance of the PaletteRedirectTriple class. + /// + public PaletteRedirectTriple() + : this(null, null, null, null, null, null, null, null, null, null) + { + } - /// - /// Initialize a new instance of the PaletteRedirectTriple class. - /// - /// Initial palette target for redirection. - public PaletteRedirectTriple(PaletteBase? target) - : this(target, null, null, null, null, null, null, null, null, null) - { - } + /// + /// Initialize a new instance of the PaletteRedirectTriple class. + /// + /// Initial palette target for redirection. + public PaletteRedirectTriple(PaletteBase target) + : this(target, null, null, null, null, null, null, null, null, null) + { + } - /// - /// Initialize a new instance of the PaletteRedirectTriple class. - /// - /// Initial palette target for redirection. - /// Redirection for disabled state requests. - /// Redirection for normal state requests. - public PaletteRedirectTriple(PaletteBase? target, - IPaletteTriple disabled, - IPaletteTriple normal) - : this(target, disabled, normal, null, null, null, null, null, null, null) - { - } + /// + /// Initialize a new instance of the PaletteRedirectTriple class. + /// + /// Initial palette target for redirection. + /// Redirection for disabled state requests. + /// Redirection for normal state requests. + public PaletteRedirectTriple(PaletteBase target, + IPaletteTriple? disabled, + IPaletteTriple? normal) + : this(target, disabled, normal, null, null, null, null, null, null, null) + { + } - /// - /// Initialize a new instance of the PaletteRedirectTriple class. - /// - /// Initial palette target for redirection. - /// Redirection for disabled state requests. - /// Redirection for normal state requests. - /// Redirection for tracking state requests. - public PaletteRedirectTriple(PaletteBase? target, - IPaletteTriple disabled, - IPaletteTriple normal, - IPaletteTriple tracking) - : this(target, disabled, normal, null, tracking, null, null, null, null, null) - { - } + /// + /// Initialize a new instance of the PaletteRedirectTriple class. + /// + /// Initial palette target for redirection. + /// Redirection for disabled state requests. + /// Redirection for normal state requests. + /// Redirection for tracking state requests. + public PaletteRedirectTriple(PaletteBase target, + IPaletteTriple? disabled, + IPaletteTriple? normal, + IPaletteTriple? tracking) + : this(target, disabled, normal, null, tracking, null, null, null, null, null) + { + } - /// - /// Initialize a new instance of the PaletteRedirectTriple class. - /// - /// Initial palette target for redirection. - /// Redirection for disabled state requests. - /// Redirection for normal state requests. - /// Redirection for tracking state requests. - /// Redirection for pressed state requests. - /// Redirection for context normal state requests. - /// Redirection for context pressed state requests. - /// Redirection for context tracking state requests. - public PaletteRedirectTriple(PaletteBase? target, - IPaletteTriple disabled, - IPaletteTriple normal, - IPaletteTriple tracking, - IPaletteTriple pressed, - IPaletteTriple contextNormal, - IPaletteTriple contextPressed, - IPaletteTriple contextTracking) - : this(target, disabled, normal, pressed, tracking, null, null, null, null, null) - { - _contextNormal = contextNormal; - _contextPressed = contextPressed; - _contextTracking = contextTracking; - } + /// + /// Initialize a new instance of the PaletteRedirectTriple class. + /// + /// Initial palette target for redirection. + /// Redirection for disabled state requests. + /// Redirection for normal state requests. + /// Redirection for tracking state requests. + /// Redirection for pressed state requests. + /// Redirection for context normal state requests. + /// Redirection for context pressed state requests. + /// Redirection for context tracking state requests. + public PaletteRedirectTriple(PaletteBase target, + IPaletteTriple? disabled, + IPaletteTriple? normal, + IPaletteTriple? tracking, + IPaletteTriple? pressed, + IPaletteTriple? contextNormal, + IPaletteTriple? contextPressed, + IPaletteTriple? contextTracking) + : this(target, disabled, normal, pressed, tracking, null, null, null, null, null) + { + _contextNormal = contextNormal; + _contextPressed = contextPressed; + _contextTracking = contextTracking; + } - /// - /// Initialize a new instance of the PaletteRedirectTriple class. - /// - /// Initial palette target for redirection. - /// Redirection for disabled state requests. - /// Redirection for normal state requests. - /// Redirection for pressed state requests. - /// Redirection for tracking state requests. - /// Redirection for all checked states. - /// Redirection for focus override state requests. - public PaletteRedirectTriple(PaletteBase? target, - IPaletteTriple disabled, - IPaletteTriple normal, - IPaletteTriple pressed, - IPaletteTriple tracking, - IPaletteTriple selected, - IPaletteTriple focusOverride) - : this(target, disabled, normal, pressed, tracking, selected, - selected, selected, focusOverride, null) - { - } + /// + /// Initialize a new instance of the PaletteRedirectTriple class. + /// + /// Initial palette target for redirection. + /// Redirection for disabled state requests. + /// Redirection for normal state requests. + /// Redirection for pressed state requests. + /// Redirection for tracking state requests. + /// Redirection for all checked states. + /// Redirection for focus override state requests. + public PaletteRedirectTriple(PaletteBase target, + IPaletteTriple? disabled, + IPaletteTriple? normal, + IPaletteTriple? pressed, + IPaletteTriple? tracking, + IPaletteTriple? selected, + IPaletteTriple? focusOverride) + : this(target, disabled, normal, pressed, tracking, selected, + selected, selected, focusOverride, null) + { + } - /// - /// Initialize a new instance of the PaletteRedirectTriple class. - /// - /// Initial palette target for redirection. - /// Redirection for disabled state requests. - /// Redirection for normal state requests. - /// Redirection for pressed state requests. - /// Redirection for tracking state requests. - /// Redirection for checked normal state requests. - /// Redirection for checked pressed state requests. - /// Redirection for checked tracking state requests. - /// Redirection for focus override state requests. - /// Redirection for normal default override state requests. - public PaletteRedirectTriple(PaletteBase? target, - IPaletteTriple? disabled, - IPaletteTriple? normal, - IPaletteTriple? pressed, - IPaletteTriple? tracking, - IPaletteTriple? checkedNormal, - IPaletteTriple? checkedPressed, - IPaletteTriple? checkedTracking, - IPaletteTriple? focusOverride, - IPaletteTriple? normalDefaultOverride) - : base(target) - { - // Remember state specific inheritance - _disabled = disabled; - _normal = normal; - _pressed = pressed; - _tracking = tracking; - _checkedNormal = checkedNormal; - _checkedPressed = checkedPressed; - _checkedTracking = checkedTracking; - _focusOverride = focusOverride; - _normalDefaultOverride = normalDefaultOverride; - } - #endregion - - #region SetRedirectStates - /// - /// Set the redirection states. - /// - /// Redirection for disabled state requests. - /// Redirection for normal state requests. - public virtual void SetRedirectStates(IPaletteTriple disabled, - IPaletteTriple normal) - { - _disabled = disabled; - _normal = normal; - } + /// + /// Initialize a new instance of the PaletteRedirectTriple class. + /// + /// Initial palette target for redirection. + /// Redirection for disabled state requests. + /// Redirection for normal state requests. + /// Redirection for pressed state requests. + /// Redirection for tracking state requests. + /// Redirection for checked normal state requests. + /// Redirection for checked pressed state requests. + /// Redirection for checked tracking state requests. + /// Redirection for focus override state requests. + /// Redirection for normal default override state requests. + public PaletteRedirectTriple(PaletteBase? target, + IPaletteTriple? disabled, + IPaletteTriple? normal, + IPaletteTriple? pressed, + IPaletteTriple? tracking, + IPaletteTriple? checkedNormal, + IPaletteTriple? checkedPressed, + IPaletteTriple? checkedTracking, + IPaletteTriple? focusOverride, + IPaletteTriple? normalDefaultOverride) + : base(target) + { + // Remember state specific inheritance + _disabled = disabled; + _normal = normal; + _pressed = pressed; + _tracking = tracking; + _checkedNormal = checkedNormal; + _checkedPressed = checkedPressed; + _checkedTracking = checkedTracking; + _focusOverride = focusOverride; + _normalDefaultOverride = normalDefaultOverride; + } + #endregion - /// - /// Set the redirection states. - /// - /// Redirection for disabled state requests. - /// Redirection for normal state requests. - /// Redirection for pressed state requests. - /// Redirection for tracking state requests. - /// Redirection for checked normal state requests. - /// Redirection for checked pressed state requests. - /// Redirection for checked tracking state requests. - /// Redirection for focus override state requests. - /// Redirection for normal default override state requests. - public virtual void SetRedirectStates(IPaletteTriple disabled, - IPaletteTriple normal, - IPaletteTriple pressed, - IPaletteTriple tracking, - IPaletteTriple checkedNormal, - IPaletteTriple checkedPressed, - IPaletteTriple checkedTracking, - IPaletteTriple focusOverride, - IPaletteTriple? normalDefaultOverride) - { - _disabled = disabled; - _normal = normal; - _pressed = pressed; - _tracking = tracking; - _checkedNormal = checkedNormal; - _checkedPressed = checkedPressed; - _checkedTracking = checkedTracking; - _focusOverride = focusOverride; - _normalDefaultOverride = normalDefaultOverride; - } - #endregion + #region SetRedirectStates + /// + /// Set the redirection states. + /// + /// Redirection for disabled state requests. + /// Redirection for normal state requests. + public virtual void SetRedirectStates(IPaletteTriple disabled, + IPaletteTriple normal) + { + _disabled = disabled; + _normal = normal; + } - #region ResetRedirectStates - /// - /// Reset the redirection states to null. - /// - public virtual void ResetRedirectStates() - { - _disabled = null; - _normal = null; - _pressed = null; - _tracking = null; - _checkedNormal = null; - _checkedPressed = null; - _checkedTracking = null; - _focusOverride = null; - _normalDefaultOverride = null; - } - #endregion - - #region Back - /// - /// Gets a value indicating if background should be drawn. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Set the redirection states. + /// + /// Redirection for disabled state requests. + /// Redirection for normal state requests. + /// Redirection for pressed state requests. + /// Redirection for tracking state requests. + /// Redirection for checked normal state requests. + /// Redirection for checked pressed state requests. + /// Redirection for checked tracking state requests. + /// Redirection for focus override state requests. + /// Redirection for normal default override state requests. + public virtual void SetRedirectStates(IPaletteTriple disabled, + IPaletteTriple normal, + IPaletteTriple pressed, + IPaletteTriple tracking, + IPaletteTriple checkedNormal, + IPaletteTriple checkedPressed, + IPaletteTriple checkedTracking, + IPaletteTriple focusOverride, + IPaletteTriple normalDefaultOverride) + { + _disabled = disabled; + _normal = normal; + _pressed = pressed; + _tracking = tracking; + _checkedNormal = checkedNormal; + _checkedPressed = checkedPressed; + _checkedTracking = checkedTracking; + _focusOverride = focusOverride; + _normalDefaultOverride = normalDefaultOverride; + } + #endregion - return inherit != null ? inherit.PaletteBack.GetBackDraw(state) : Target.GetBackDraw(style, state); - } + #region ResetRedirectStates + /// + /// Reset the redirection states to null. + /// + public virtual void ResetRedirectStates() + { + _disabled = null; + _normal = null; + _pressed = null; + _tracking = null; + _checkedNormal = null; + _checkedPressed = null; + _checkedTracking = null; + _focusOverride = null; + _normalDefaultOverride = null; + } + #endregion - /// - /// Gets the graphics drawing hint for the background. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + #region Back + /// + /// Gets a value indicating if background should be drawn. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackGraphicsHint(state) : Target.GetBackGraphicsHint(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackDraw(state) + : Target!.GetBackDraw(style, state); + } - /// - /// Gets the first background color. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the graphics drawing hint for the background. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// PaletteGraphicsHint value. + public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColor1(state) : Target.GetBackColor1(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackGraphicsHint(state) + : Target!.GetBackGraphicsHint(style, state); + } - /// - /// Gets the second back color. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the first background color. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColor2(state) : Target.GetBackColor2(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackColor1(state) + : Target!.GetBackColor1(style, state); + } - /// - /// Gets the color background drawing style. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the second back color. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColorStyle(state) : Target.GetBackColorStyle(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackColor2(state) + : Target!.GetBackColor2(style, state); + } - /// - /// Gets the color alignment. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color background drawing style. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColorAlign(state) : Target.GetBackColorAlign(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackColorStyle(state) + : Target!.GetBackColorStyle(style, state); + } - /// - /// Gets the color background angle. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color alignment. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackColorAngle(state) : Target.GetBackColorAngle(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackColorAlign(state) + : Target!.GetBackColorAlign(style, state); + } - /// - /// Gets a background image. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color background angle. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackImage(state) : Target.GetBackImage(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackColorAngle(state) + : Target!.GetBackColorAngle(style, state); + } - /// - /// Gets the background image style. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets a background image. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackImageStyle(state) : Target.GetBackImageStyle(style, state); - } + return inherit != null + ? inherit.PaletteBack.GetBackImage(state) + : Target!.GetBackImage(style, state); + } - /// - /// Gets the image alignment. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the background image style. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBack.GetBackImageAlign(state) : Target.GetBackImageAlign(style, state); - } - #endregion - - #region Border - /// - /// Gets a value indicating if border should be drawn. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBack.GetBackImageStyle(state) + : Target!.GetBackImageStyle(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderDraw(state) : Target.GetBorderDraw(style, state); - } + /// + /// Gets the image alignment. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets a value indicating which borders to draw. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// PaletteDrawBorders value. - public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBack.GetBackImageAlign(state) + : Target!.GetBackImageAlign(style, state); + } + #endregion - return inherit != null ? inherit.PaletteBorder.GetBorderDrawBorders(state) : Target.GetBorderDrawBorders(style, state); - } + #region Border + /// + /// Gets a value indicating if border should be drawn. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the graphics drawing hint for the border. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderDraw(state) + : Target!.GetBorderDraw(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderGraphicsHint(state) : Target.GetBorderGraphicsHint(style, state); - } + /// + /// Gets a value indicating which borders to draw. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// PaletteDrawBorders value. + public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the first border color. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderDrawBorders(state) + : Target!.GetBorderDrawBorders(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderColor1(state) : Target.GetBorderColor1(style, state); - } + /// + /// Gets the graphics drawing hint for the border. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// PaletteGraphicsHint value. + public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the second border color. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderGraphicsHint(state) + : Target!.GetBorderGraphicsHint(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderColor2(state) : Target.GetBorderColor2(style, state); - } + /// + /// Gets the first border color. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the color border drawing style. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderColor1(state) + : Target!.GetBorderColor1(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderColorStyle(state) : Target.GetBorderColorStyle(style, state); - } + /// + /// Gets the second border color. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the color border alignment. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderColor2(state) + : Target!.GetBorderColor2(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderColorAlign(state) : Target.GetBorderColorAlign(style, state); - } + /// + /// Gets the color border drawing style. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the color border angle. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderColorStyle(state) + : Target!.GetBorderColorStyle(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderColorAngle(state) : Target.GetBorderColorAngle(style, state); - } + /// + /// Gets the color border alignment. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the border width. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Integer width. - public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderColorAlign(state) + : Target!.GetBorderColorAlign(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderWidth(state) : Target.GetBorderWidth(style, state); - } + /// + /// Gets the color border angle. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the border corner rounding. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Float rounding. - public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderColorAngle(state) + : Target!.GetBorderColorAngle(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderRounding(state) : Target.GetBorderRounding(style, state); - } + /// + /// Gets the border width. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Integer width. + public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets a border image. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetBorderImage(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderWidth(state) + : Target!.GetBorderWidth(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderImage(state) : Target.GetBorderImage(style, state); - } + /// + /// Gets the border corner rounding. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Float rounding. + public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the border image style. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderRounding(state) + : Target!.GetBorderRounding(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderImageStyle(state) : Target.GetBorderImageStyle(style, state); - } + /// + /// Gets a border image. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetBorderImage(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - /// - /// Gets the image border alignment. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + return inherit != null + ? inherit.PaletteBorder!.GetBorderImage(state) + : Target!.GetBorderImage(style, state); + } - return inherit != null ? inherit.PaletteBorder.GetBorderImageAlign(state) : Target.GetBorderImageAlign(style, state); - } - #endregion - - #region Content - /// - /// Gets a value indicating if content should be drawn. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the border image style. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentDraw(state) : Target.GetContentDraw(style, state); - } + return inherit != null + ? inherit.PaletteBorder!.GetBorderImageStyle(state) + : Target!.GetBorderImageStyle(style, state); + } - /// - /// Gets a value indicating if content should be drawn with focus indication. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the image border alignment. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentDrawFocus(state) : Target.GetContentDrawFocus(style, state); - } + return inherit != null + ? inherit.PaletteBorder!.GetBorderImageAlign(state) + : Target!.GetBorderImageAlign(style, state); + } + #endregion - /// - /// Gets the horizontal relative alignment of the image. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + #region Content + /// + /// Gets a value indicating if content should be drawn. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageH(state) : Target.GetContentImageH(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentDraw(state) + : Target!.GetContentDraw(style, state); + } - /// - /// Gets the vertical relative alignment of the image. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets a value indicating if content should be drawn with focus indication. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageV(state) : Target.GetContentImageV(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentDrawFocus(state) + : Target!.GetContentDrawFocus(style, state); + } - /// - /// Gets the effect applied to drawing of the image. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteImageEffect value. - public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the horizontal relative alignment of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageEffect(state) : Target.GetContentImageEffect(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentImageH(state) + : Target!.GetContentImageH(style, state); + } - /// - /// Gets the image color to remap into another color. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentImageColorMap(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the vertical relative alignment of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageColorMap(state) : Target.GetContentImageColorMap(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentImageV(state) : Target!.GetContentImageV(style, state); + } - /// - /// Gets the color to use in place of the image map color. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the effect applied to drawing of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteImageEffect value. + public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageColorTo(state) : Target.GetContentImageColorTo(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentImageEffect(state) : Target!.GetContentImageEffect(style, state); + } - /// - /// Gets the font for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the image color to remap into another color. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorMap(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextFont(state) : Target.GetContentShortTextFont(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentImageColorMap(state) : Target!.GetContentImageColorMap(style, state); + } - /// - /// Gets the rendering hint for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextHint value. - public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color to use in place of the image map color. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextHint(state) : Target.GetContentShortTextHint(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentImageColorTo(state) : Target!.GetContentImageColorTo(style, state); + } - /// - /// Gets the prefix drawing setting for short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextPrefix value. - public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the font for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextPrefix(state) : Target.GetContentShortTextPrefix(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextFont(state) : Target!.GetContentShortTextFont(style, state); + } - /// - /// Gets the flag indicating if multiline text is allowed for short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the rendering hint for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentShortTextMultiLine(state) - : Target.GetContentShortTextMultiLine(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextHint(state) : Target!.GetContentShortTextHint(style, state); + } - /// - /// Gets the text trimming to use for short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextTrim value. - public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the prefix drawing setting for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextPrefix value. + public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextTrim(state) : Target.GetContentShortTextTrim(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextPrefix(state) : Target!.GetContentShortTextPrefix(style, state); + } - /// - /// Gets the horizontal relative alignment of the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the flag indicating if multiline text is allowed for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextH(state) : Target.GetContentShortTextH(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentShortTextMultiLine(state) + : Target!.GetContentShortTextMultiLine(style, state); + } - /// - /// Gets the vertical relative alignment of the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the text trimming to use for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextTrim value. + public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextV(state) : Target.GetContentShortTextV(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextTrim(state) : Target!.GetContentShortTextTrim(style, state); + } - /// - /// Gets the horizontal relative alignment of multiline short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the horizontal relative alignment of the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentShortTextMultiLineH(state) - : Target.GetContentShortTextMultiLineH(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextH(state) : Target!.GetContentShortTextH(style, state); + } - /// - /// Gets the first back color for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the vertical relative alignment of the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextColor1(state) : Target.GetContentShortTextColor1(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextV(state) : Target!.GetContentShortTextV(style, state); + } - /// - /// Gets the second back color for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the horizontal relative alignment of multiline short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextColor2(state) : Target.GetContentShortTextColor2(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentShortTextMultiLineH(state) + : Target!.GetContentShortTextMultiLineH(style, state); + } - /// - /// Gets the color drawing style for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the first back color for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentShortTextColorStyle(state) - : Target.GetContentShortTextColorStyle(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextColor1(state) : Target!.GetContentShortTextColor1(style, state); + } - /// - /// Gets the color alignment for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the second back color for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentShortTextColorAlign(state) - : Target.GetContentShortTextColorAlign(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextColor2(state) : Target!.GetContentShortTextColor2(style, state); + } - /// - /// Gets the color background angle for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color drawing style for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentShortTextColorAngle(state) - : Target.GetContentShortTextColorAngle(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentShortTextColorStyle(state) + : Target!.GetContentShortTextColorStyle(style, state); + } - /// - /// Gets a background image for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetContentShortTextImage(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color alignment for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextImage(state) : Target.GetContentShortTextImage(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentShortTextColorAlign(state) + : Target!.GetContentShortTextColorAlign(style, state); + } - /// - /// Gets the background image style. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color background angle for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentShortTextImageStyle(state) - : Target.GetContentShortTextImageStyle(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentShortTextColorAngle(state) + : Target!.GetContentShortTextColorAngle(style, state); + } - /// - /// Gets the image alignment for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets a background image for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetContentShortTextImage(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentShortTextImageAlign(state) - : Target.GetContentShortTextImageAlign(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentShortTextImage(state) : Target!.GetContentShortTextImage(style, state); + } - /// - /// Gets the font for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the background image style. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextFont(state) : Target.GetContentLongTextFont(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentShortTextImageStyle(state) + : Target!.GetContentShortTextImageStyle(style, state); + } - /// - /// Gets the rendering hint for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextHint value. - public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the image alignment for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextHint(state) : Target.GetContentLongTextHint(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentShortTextImageAlign(state) + : Target!.GetContentShortTextImageAlign(style, state); + } - /// - /// Gets the flag indicating if multiline text is allowed for long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the font for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextMultiLine(state) : Target.GetContentLongTextMultiLine(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextFont(state) : Target!.GetContentLongTextFont(style, state); + } - /// - /// Gets the text trimming to use for long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextTrim value. - public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the rendering hint for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextTrim(state) : Target.GetContentLongTextTrim(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextHint(state) : Target!.GetContentLongTextHint(style, state); + } - /// - /// Gets the prefix drawing setting for long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextPrefix value. - public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the flag indicating if multiline text is allowed for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextPrefix(state) : Target.GetContentLongTextPrefix(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextMultiLine(state) : Target!.GetContentLongTextMultiLine(style, state); + } - /// - /// Gets the horizontal relative alignment of the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the text trimming to use for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextTrim value. + public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextH(state) : Target.GetContentLongTextH(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextTrim(state) : Target!.GetContentLongTextTrim(style, state); + } - /// - /// Gets the vertical relative alignment of the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the prefix drawing setting for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextPrefix value. + public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextV(state) : Target.GetContentLongTextV(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextPrefix(state) : Target!.GetContentLongTextPrefix(style, state); + } - /// - /// Gets the horizontal relative alignment of multiline long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the horizontal relative alignment of the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentLongTextMultiLineH(state) - : Target.GetContentLongTextMultiLineH(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextH(state) : Target!.GetContentLongTextH(style, state); + } - /// - /// Gets the first back color for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the vertical relative alignment of the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextColor1(state) : Target.GetContentLongTextColor1(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextV(state) : Target!.GetContentLongTextV(style, state); + } - /// - /// Gets the second back color for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the horizontal relative alignment of multiline long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextColor2(state) : Target.GetContentLongTextColor2(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentLongTextMultiLineH(state) + : Target!.GetContentLongTextMultiLineH(style, state); + } - /// - /// Gets the color drawing style for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the first back color for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentLongTextColorStyle(state) - : Target.GetContentLongTextColorStyle(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextColor1(state) : Target!.GetContentLongTextColor1(style, state); + } - /// - /// Gets the color alignment for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the second back color for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentLongTextColorAlign(state) - : Target.GetContentLongTextColorAlign(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextColor2(state) : Target!.GetContentLongTextColor2(style, state); + } - /// - /// Gets the color background angle for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color drawing style for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentLongTextColorAngle(state) - : Target.GetContentLongTextColorAngle(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentLongTextColorStyle(state) + : Target!.GetContentLongTextColorStyle(style, state); + } - /// - /// Gets a background image for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetContentLongTextImage(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color alignment for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextImage(state) : Target.GetContentLongTextImage(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentLongTextColorAlign(state) + : Target!.GetContentLongTextColorAlign(style, state); + } - /// - /// Gets the background image style for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the color background angle for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentLongTextImageStyle(state) - : Target.GetContentLongTextImageStyle(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentLongTextColorAngle(state) + : Target!.GetContentLongTextColorAngle(style, state); + } - /// - /// Gets the image alignment for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets a background image for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetContentLongTextImage(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null - ? inherit.PaletteContent.GetContentLongTextImageAlign(state) - : Target.GetContentLongTextImageAlign(style, state); - } + return inherit != null ? inherit.PaletteContent!.GetContentLongTextImage(state) : Target!.GetContentLongTextImage(style, state); + } - /// - /// Gets the padding between the border and content drawing. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Padding value. - public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the background image style for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentPadding(state) : Target.GetContentPadding(style, state); - } + return inherit != null + ? inherit.PaletteContent!.GetContentLongTextImageStyle(state) + : Target!.GetContentLongTextImageStyle(style, state); + } - /// - /// Gets the padding between adjacent content items. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Integer value. - public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) - { - IPaletteTriple inherit = GetInherit(state); + /// + /// Gets the image alignment for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentAdjacentGap(state) : Target.GetContentAdjacentGap(style, state); - } - #endregion + return inherit != null + ? inherit.PaletteContent!.GetContentLongTextImageAlign(state) + : Target!.GetContentLongTextImageAlign(style, state); + } - #region Implementation - private IPaletteTriple? GetInherit(PaletteState state) - { - switch (state) - { - case PaletteState.Disabled: - return _disabled; - case PaletteState.Normal: - return _normal; - case PaletteState.Pressed: - return _pressed; - case PaletteState.Tracking: - return _tracking; - case PaletteState.CheckedNormal: - return _checkedNormal; - case PaletteState.CheckedPressed: - return _checkedPressed; - case PaletteState.CheckedTracking: - return _checkedTracking; - case PaletteState.FocusOverride: - return _focusOverride; - case PaletteState.NormalDefaultOverride: - return _normalDefaultOverride; - case PaletteState.ContextNormal: - return _contextNormal; - case PaletteState.ContextPressed: - return _contextPressed; - case PaletteState.ContextTracking: - return _contextTracking; - default: - // Should never happen! - Debug.Assert(false); - return null; - } + /// + /// Gets the padding between the border and content drawing. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Padding value. + public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); + + return inherit != null ? inherit.PaletteContent!.GetContentPadding(state) : Target!.GetContentPadding(style, state); + } + + /// + /// Gets the padding between adjacent content items. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Integer value. + public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) + { + IPaletteTriple? inherit = GetInherit(state); + + return inherit != null + ? inherit.PaletteContent!.GetContentAdjacentGap(state) + : Target!.GetContentAdjacentGap(style, state); + } + #endregion + + #region Implementation + private IPaletteTriple? GetInherit(PaletteState state) + { + switch (state) + { + case PaletteState.Disabled: + return _disabled; + case PaletteState.Normal: + return _normal; + case PaletteState.Pressed: + return _pressed; + case PaletteState.Tracking: + return _tracking; + case PaletteState.CheckedNormal: + return _checkedNormal; + case PaletteState.CheckedPressed: + return _checkedPressed; + case PaletteState.CheckedTracking: + return _checkedTracking; + case PaletteState.FocusOverride: + return _focusOverride; + case PaletteState.NormalDefaultOverride: + return _normalDefaultOverride; + case PaletteState.ContextNormal: + return _contextNormal; + case PaletteState.ContextPressed: + return _contextPressed; + case PaletteState.ContextTracking: + return _contextTracking; + default: + // Should never happen! + Debug.Assert(false); + throw DebugTools.NotImplemented(state.ToString()); } - #endregion } -} + #endregion +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTripleMetric.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTripleMetric.cs index af3382ec6..83a470f1f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTripleMetric.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRedirect/PaletteRedirectTripleMetric.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,8 +18,8 @@ namespace Krypton.Toolkit public class PaletteRedirectTripleMetric : PaletteRedirectTriple { #region Instance Fields - private IPaletteMetric _disabled; - private IPaletteMetric _normal; + private IPaletteMetric? _disabled; + private IPaletteMetric? _normal; #endregion #region Identity @@ -27,7 +27,7 @@ public class PaletteRedirectTripleMetric : PaletteRedirectTriple /// Initialize a new instance of the PaletteRedirectTripleMetric class. /// /// Initial palette target for redirection. - public PaletteRedirectTripleMetric(PaletteBase? target) + public PaletteRedirectTripleMetric(PaletteBase target) : this(target, null, null, null, null) { } @@ -40,9 +40,11 @@ public PaletteRedirectTripleMetric(PaletteBase? target) /// Redirection for disabled metric requests. /// Redirection for normal state requests. /// Redirection for normal metric requests. - public PaletteRedirectTripleMetric(PaletteBase? target, - IPaletteTriple disabled, IPaletteMetric disableMetric, - IPaletteTriple normal, IPaletteMetric normalMetric) + public PaletteRedirectTripleMetric(PaletteBase target, + IPaletteTriple? disabled, + IPaletteMetric? disableMetric, + IPaletteTriple? normal, + IPaletteMetric? normalMetric) : base(target, disabled, normal) { // Remember state specific inheritance @@ -94,9 +96,9 @@ public override void ResetRedirectStates() /// Integer value. public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricInt(state, metric) ?? Target.GetMetricInt(state, metric); + return inherit?.GetMetricInt(state, metric) ?? Target!.GetMetricInt(state, metric); } /// @@ -107,9 +109,9 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) /// InheritBool value. public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricBool(state, metric) ?? Target.GetMetricBool(state, metric); + return inherit?.GetMetricBool(state, metric) ?? Target!.GetMetricBool(state, metric); } /// @@ -120,9 +122,9 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool /// Padding value. public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) { - IPaletteMetric inherit = GetInherit(state); + IPaletteMetric? inherit = GetInherit(state); - return inherit?.GetMetricPadding(state, metric) ?? Target.GetMetricPadding(state, metric); + return inherit?.GetMetricPadding(state, metric) ?? Target!.GetMetricPadding(state, metric); } #endregion @@ -138,7 +140,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBack.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBack.cs index 7bba741d4..b879e09c0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,17 +40,17 @@ public PaletteRibbonBack([DisallowNull] IPaletteRibbonBack inheritBack, Debug.Assert(inheritBack != null); // Remember inheritance - _inheritBack = inheritBack; + _inheritBack = inheritBack ?? throw new ArgumentNullException(nameof(inheritBack)); // Store the provided paint notification delegate NeedPaint = needPaint; // Define default values - _backColor1 = Color.Empty; - _backColor2 = Color.Empty; - _backColor3 = Color.Empty; - _backColor4 = Color.Empty; - _backColor5 = Color.Empty; + _backColor1 = GlobalStaticValues.EMPTY_COLOR; + _backColor2 = GlobalStaticValues.EMPTY_COLOR; + _backColor3 = GlobalStaticValues.EMPTY_COLOR; + _backColor4 = GlobalStaticValues.EMPTY_COLOR; + _backColor5 = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -59,11 +59,12 @@ public PaletteRibbonBack([DisallowNull] IPaletteRibbonBack inheritBack, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (BackColor1 == Color.Empty) && - (BackColor2 == Color.Empty) && - (BackColor3 == Color.Empty) && - (BackColor4 == Color.Empty) && - (BackColor5 == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (BackColor1 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor2 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor3 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor4 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor5 == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -121,8 +122,8 @@ public virtual Color BackColor1 } } - private bool ShouldSerializeBackColor1() => _backColor1 != Color.Empty; - private void ResetBackColor1() => _backColor1 = Color.Empty; + private bool ShouldSerializeBackColor1() => _backColor1 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor1() => _backColor1 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the first background color for the ribbon item. @@ -130,7 +131,7 @@ public virtual Color BackColor1 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor1(PaletteState state) => - BackColor1 != Color.Empty ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); + BackColor1 != GlobalStaticValues.EMPTY_COLOR ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); #endregion @@ -157,8 +158,8 @@ public virtual Color BackColor2 } } - private bool ShouldSerializeBackColor2() => _backColor2 != Color.Empty; - private void ResetBackColor2() => BackColor2 = Color.Empty; + private bool ShouldSerializeBackColor2() => _backColor2 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor2() => BackColor2 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the second background color for the ribbon item. @@ -166,7 +167,7 @@ public virtual Color BackColor2 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor2(PaletteState state) => - BackColor2 != Color.Empty ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); + BackColor2 != GlobalStaticValues.EMPTY_COLOR ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); #endregion @@ -193,8 +194,8 @@ public virtual Color BackColor3 } } - private bool ShouldSerializeBackColor3() => _backColor3 != Color.Empty; - private void ResetBackColor3() => BackColor3 = Color.Empty; + private bool ShouldSerializeBackColor3() => _backColor3 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor3() => BackColor3 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the third background color for the ribbon item. @@ -202,7 +203,7 @@ public virtual Color BackColor3 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor3(PaletteState state) => - BackColor3 != Color.Empty ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); + BackColor3 != GlobalStaticValues.EMPTY_COLOR ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); #endregion @@ -229,8 +230,8 @@ public virtual Color BackColor4 } } - private bool ShouldSerializeBackColor4() => _backColor4 != Color.Empty; - private void ResetBackColor4() => BackColor4 = Color.Empty; + private bool ShouldSerializeBackColor4() => _backColor4 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor4() => BackColor4 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fourth background color for the ribbon item. @@ -238,7 +239,7 @@ public virtual Color BackColor4 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor4(PaletteState state) => - BackColor4 != Color.Empty ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); + BackColor4 != GlobalStaticValues.EMPTY_COLOR ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); #endregion @@ -264,8 +265,8 @@ public virtual Color BackColor5 } } - private bool ShouldSerializeBackColor5() => _backColor5 != Color.Empty; - private void ResetBackColor5() => BackColor5 = Color.Empty; + private bool ShouldSerializeBackColor5() => _backColor5 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor5() => BackColor5 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fifth background color for the ribbon item. @@ -273,7 +274,7 @@ public virtual Color BackColor5 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor5(PaletteState state) => - BackColor5 != Color.Empty ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); + BackColor5 != GlobalStaticValues.EMPTY_COLOR ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInherit.cs index 198080ed0..60fae0e6e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInheritRedirect.cs index d6915f02d..e762fa4a2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackInheritRedirect.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,7 +16,7 @@ namespace Krypton.Toolkit public class PaletteRibbonBackInheritRedirect : PaletteRibbonBackInherit { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion @@ -28,12 +26,12 @@ public class PaletteRibbonBackInheritRedirect : PaletteRibbonBackInherit /// /// Source for inherit requests. /// Ribbon item background style. - public PaletteRibbonBackInheritRedirect([DisallowNull] PaletteRedirect? redirect, + public PaletteRibbonBackInheritRedirect([DisallowNull] PaletteRedirect redirect, PaletteRibbonBackStyle styleBack) { Debug.Assert(redirect != null); - _redirect = redirect; + _redirect = redirect!; StyleBack = styleBack; } #endregion @@ -43,7 +41,7 @@ public PaletteRibbonBackInheritRedirect([DisallowNull] PaletteRedirect? redirect /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackRedirect.cs index 80f8c38ed..3b44c0dc6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonBackRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,24 +34,26 @@ public class PaletteRibbonBackRedirect : Storage, /// inheritance redirection instance. /// inheritance ribbon back style. /// Delegate for notifying paint requests. - public PaletteRibbonBackRedirect([DisallowNull] PaletteRedirect? redirect, + public PaletteRibbonBackRedirect(PaletteRedirect redirect, PaletteRibbonBackStyle backStyle, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); // Store the provided paint notification delegate NeedPaint = needPaint; // Store the inherit instances - _inheritBack = new PaletteRibbonBackInheritRedirect(redirect, backStyle); + _inheritBack = new PaletteRibbonBackInheritRedirect(redirect!, backStyle); // Define default values - _backColor1 = Color.Empty; - _backColor2 = Color.Empty; - _backColor3 = Color.Empty; - _backColor4 = Color.Empty; - _backColor5 = Color.Empty; + _backColor1 = GlobalStaticValues.EMPTY_COLOR; + _backColor2 = GlobalStaticValues.EMPTY_COLOR; + _backColor3 = GlobalStaticValues.EMPTY_COLOR; + _backColor4 = GlobalStaticValues.EMPTY_COLOR; + _backColor5 = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -60,7 +62,7 @@ public PaletteRibbonBackRedirect([DisallowNull] PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _inheritBack.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _inheritBack.SetRedirector(redirect); #endregion @@ -69,11 +71,12 @@ public PaletteRibbonBackRedirect([DisallowNull] PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (BackColor1 == Color.Empty) && - (BackColor2 == Color.Empty) && - (BackColor3 == Color.Empty) && - (BackColor4 == Color.Empty) && - (BackColor5 == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (BackColor1 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor2 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor3 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor4 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor5 == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -110,8 +113,8 @@ public Color BackColor1 } } - private bool ShouldSerializeBackColor1() => BackColor1 != Color.Empty; - private void ResetBackColor1() => BackColor1 = Color.Empty; + private bool ShouldSerializeBackColor1() => BackColor1 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor1() => BackColor1 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the first background color for the ribbon item. @@ -119,7 +122,7 @@ public Color BackColor1 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor1(PaletteState state) => - BackColor1 != Color.Empty ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); + BackColor1 != GlobalStaticValues.EMPTY_COLOR ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); #endregion @@ -146,8 +149,8 @@ public Color BackColor2 } } - private bool ShouldSerializeBackColor2() => BackColor2 != Color.Empty; - private void ResetBackColor2() => BackColor2 = Color.Empty; + private bool ShouldSerializeBackColor2() => BackColor2 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor2() => BackColor2 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the second background color for the ribbon item. @@ -155,7 +158,7 @@ public Color BackColor2 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor2(PaletteState state) => - BackColor2 != Color.Empty ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); + BackColor2 != GlobalStaticValues.EMPTY_COLOR ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); #endregion @@ -182,8 +185,8 @@ public Color BackColor3 } } - private bool ShouldSerializeBackColor3() => BackColor3 != Color.Empty; - private void ResetBackColor3() => BackColor3 = Color.Empty; + private bool ShouldSerializeBackColor3() => BackColor3 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor3() => BackColor3 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the third background color for the ribbon item. @@ -191,7 +194,7 @@ public Color BackColor3 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor3(PaletteState state) => - BackColor3 != Color.Empty ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); + BackColor3 != GlobalStaticValues.EMPTY_COLOR ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); #endregion @@ -218,8 +221,8 @@ public Color BackColor4 } } - private bool ShouldSerializeBackColor4() => BackColor4 != Color.Empty; - private void ResetBackColor4() => BackColor4 = Color.Empty; + private bool ShouldSerializeBackColor4() => BackColor4 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor4() => BackColor4 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fourth background color for the ribbon item. @@ -227,7 +230,7 @@ public Color BackColor4 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor4(PaletteState state) => - BackColor4 != Color.Empty ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); + BackColor4 != GlobalStaticValues.EMPTY_COLOR ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); #endregion @@ -254,8 +257,8 @@ public Color BackColor5 } } - private bool ShouldSerializeBackColor5() => BackColor5 != Color.Empty; - private void ResetBackColor5() => BackColor5 = Color.Empty; + private bool ShouldSerializeBackColor5() => BackColor5 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor5() => BackColor5 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fifth background color for the ribbon item. @@ -263,7 +266,7 @@ public Color BackColor5 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor5(PaletteState state) => - BackColor5 != Color.Empty ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); + BackColor5 != GlobalStaticValues.EMPTY_COLOR ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDouble.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDouble.cs index 44b9225aa..a4db43e85 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDouble.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDouble.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -39,25 +39,25 @@ public class PaletteRibbonDouble : Storage, /// Delegate for notifying paint requests. public PaletteRibbonDouble([DisallowNull] IPaletteRibbonBack inheritBack, [DisallowNull] IPaletteRibbonText inheritText, - NeedPaintHandler needPaint) + NeedPaintHandler needPaint) { - Debug.Assert(inheritBack != null); - Debug.Assert(inheritText != null); + Debug.Assert(inheritBack is not null); + Debug.Assert(inheritText is not null); // Remember inheritance - _inheritBack = inheritBack; - _inheritText = inheritText; + _inheritBack = inheritBack ?? throw new ArgumentNullException(nameof(inheritBack)); + _inheritText = inheritText ?? throw new ArgumentNullException(nameof(inheritText)); // Store the provided paint notification delegate NeedPaint = needPaint; // Define default values - _backColor1 = Color.Empty; - _backColor2 = Color.Empty; - _backColor3 = Color.Empty; - _backColor4 = Color.Empty; - _backColor5 = Color.Empty; - _textColor = Color.Empty; + _backColor1 = GlobalStaticValues.EMPTY_COLOR; + _backColor2 = GlobalStaticValues.EMPTY_COLOR; + _backColor3 = GlobalStaticValues.EMPTY_COLOR; + _backColor4 = GlobalStaticValues.EMPTY_COLOR; + _backColor5 = GlobalStaticValues.EMPTY_COLOR; + _textColor = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -66,12 +66,13 @@ public PaletteRibbonDouble([DisallowNull] IPaletteRibbonBack inheritBack, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (BackColor1 == Color.Empty) && - (BackColor2 == Color.Empty) && - (BackColor3 == Color.Empty) && - (BackColor4 == Color.Empty) && - (BackColor5 == Color.Empty) && - (TextColor == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (BackColor1 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor2 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor3 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor4 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor5 == GlobalStaticValues.EMPTY_COLOR) && + (TextColor == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -136,8 +137,8 @@ public Color BackColor1 } } - private bool ShouldSerializeBackColor1() => BackColor1 != Color.Empty; - private void ResetBackColor1() => BackColor1 = Color.Empty; + private bool ShouldSerializeBackColor1() => BackColor1 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor1() => BackColor1 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the first background color for the ribbon item. @@ -145,7 +146,7 @@ public Color BackColor1 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor1(PaletteState state) => - BackColor1 != Color.Empty ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); + BackColor1 != GlobalStaticValues.EMPTY_COLOR ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); #endregion @@ -172,8 +173,8 @@ public Color BackColor2 } } - private bool ShouldSerializeBackColor2() => BackColor2 != Color.Empty; - private void ResetBackColor2() => BackColor2 = Color.Empty; + private bool ShouldSerializeBackColor2() => BackColor2 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor2() => BackColor2 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the second background color for the ribbon item. @@ -181,7 +182,7 @@ public Color BackColor2 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor2(PaletteState state) => - BackColor2 != Color.Empty ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); + BackColor2 != GlobalStaticValues.EMPTY_COLOR ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); #endregion @@ -208,8 +209,8 @@ public Color BackColor3 } } - private bool ShouldSerializeBackColor3() => BackColor3 != Color.Empty; - private void ResetBackColor3() => BackColor3 = Color.Empty; + private bool ShouldSerializeBackColor3() => BackColor3 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor3() => BackColor3 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the third background color for the ribbon item. @@ -217,7 +218,7 @@ public Color BackColor3 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor3(PaletteState state) => - BackColor3 != Color.Empty ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); + BackColor3 != GlobalStaticValues.EMPTY_COLOR ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); #endregion @@ -244,8 +245,8 @@ public Color BackColor4 } } - private bool ShouldSerializeBackColor4() => BackColor4 != Color.Empty; - private void ResetBackColor4() => BackColor4 = Color.Empty; + private bool ShouldSerializeBackColor4() => BackColor4 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor4() => BackColor4 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fourth background color for the ribbon item. @@ -253,7 +254,7 @@ public Color BackColor4 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor4(PaletteState state) => - BackColor4 != Color.Empty ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); + BackColor4 != GlobalStaticValues.EMPTY_COLOR ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); #endregion @@ -280,8 +281,8 @@ public Color BackColor5 } } - private bool ShouldSerializeBackColor5() => BackColor5 != Color.Empty; - private void ResetBackColor5() => BackColor5 = Color.Empty; + private bool ShouldSerializeBackColor5() => BackColor5 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor5() => BackColor5 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fifth background color for the ribbon item. @@ -289,7 +290,7 @@ public Color BackColor5 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor5(PaletteState state) => - BackColor5 != Color.Empty ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); + BackColor5 != GlobalStaticValues.EMPTY_COLOR ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); #endregion @@ -316,8 +317,8 @@ public Color TextColor } } - private bool ShouldSerializeTextColor() => TextColor != Color.Empty; - private void ResetTextColor() => TextColor = Color.Empty; + private bool ShouldSerializeTextColor() => TextColor != GlobalStaticValues.EMPTY_COLOR; + private void ResetTextColor() => TextColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the tab color for the item text. @@ -325,7 +326,7 @@ public Color TextColor /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonTextColor(PaletteState state) => - TextColor != Color.Empty ? TextColor : _inheritText.GetRibbonTextColor(state); + TextColor != GlobalStaticValues.EMPTY_COLOR ? TextColor : _inheritText.GetRibbonTextColor(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInherit.cs index ef865b073..5842a0e0b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritOverride.cs index e4ffba41f..91d5ad577 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,16 +40,16 @@ public PaletteRibbonDoubleInheritOverride([DisallowNull] IPaletteRibbonBack prim [DisallowNull] IPaletteRibbonText backupText, PaletteState state) { - Debug.Assert(primaryBack != null); - Debug.Assert(primaryText != null); - Debug.Assert(backupBack != null); - Debug.Assert(backupText != null); + Debug.Assert(primaryBack is not null); + Debug.Assert(primaryText is not null); + Debug.Assert(backupBack is not null); + Debug.Assert(backupText is not null); // Remember values - _primaryBack = primaryBack; - _primaryText = primaryText; - _backupBack = backupBack; - _backupText = backupText; + _primaryBack = primaryBack ?? throw new ArgumentNullException(nameof(primaryBack)); + _primaryText = primaryText ?? throw new ArgumentNullException(nameof(primaryText)); + _backupBack = backupBack ?? throw new ArgumentNullException(nameof(backupBack)); + _backupText = backupText ?? throw new ArgumentNullException(nameof(backupText)); // Default state Apply = false; @@ -118,7 +118,7 @@ public override Color GetRibbonBackColor1(PaletteState state) { Color ret = _primaryBack.GetRibbonBackColor1(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backupBack.GetRibbonBackColor1(state); } @@ -142,7 +142,7 @@ public override Color GetRibbonBackColor2(PaletteState state) { Color ret = _primaryBack.GetRibbonBackColor2(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backupBack.GetRibbonBackColor2(state); } @@ -166,7 +166,7 @@ public override Color GetRibbonBackColor3(PaletteState state) { Color ret = _primaryBack.GetRibbonBackColor3(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backupBack.GetRibbonBackColor3(state); } @@ -190,7 +190,7 @@ public override Color GetRibbonBackColor4(PaletteState state) { Color ret = _primaryBack.GetRibbonBackColor4(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backupBack.GetRibbonBackColor4(state); } @@ -214,7 +214,7 @@ public override Color GetRibbonBackColor5(PaletteState state) { Color ret = _primaryBack.GetRibbonBackColor5(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backupBack.GetRibbonBackColor5(state); } @@ -240,7 +240,7 @@ public override Color GetRibbonTextColor(PaletteState state) { Color ret = _primaryText.GetRibbonTextColor(Override ? OverrideState : state); - if (ret == Color.Empty) + if (ret == GlobalStaticValues.EMPTY_COLOR) { ret = _backupText.GetRibbonTextColor(state); } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritRedirect.cs index 6e9d47a3c..03cdc2bba 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleInheritRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteRibbonDoubleInheritRedirect : PaletteRibbonDoubleInherit { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion @@ -29,13 +29,15 @@ public class PaletteRibbonDoubleInheritRedirect : PaletteRibbonDoubleInherit /// Source for inherit requests. /// Ribbon item background style. /// Ribbon item text style. - public PaletteRibbonDoubleInheritRedirect([DisallowNull] PaletteRedirect? redirect, + public PaletteRibbonDoubleInheritRedirect(PaletteRedirect redirect, PaletteRibbonBackStyle styleBack, PaletteRibbonTextStyle styleText) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); - _redirect = redirect; + _redirect = redirect!; StyleBack = styleBack; StyleText = styleText; } @@ -46,7 +48,7 @@ public PaletteRibbonDoubleInheritRedirect([DisallowNull] PaletteRedirect? redire /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleRedirect.cs index 2db9f97c0..546f84ae7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonDoubleRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,27 +38,29 @@ public class PaletteRibbonDoubleRedirect : Storage, /// inheritance ribbon back style. /// inheritance ribbon text style. /// Delegate for notifying paint requests. - public PaletteRibbonDoubleRedirect([DisallowNull] PaletteRedirect? redirect, + public PaletteRibbonDoubleRedirect(PaletteRedirect redirect, PaletteRibbonBackStyle backStyle, PaletteRibbonTextStyle textStyle, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); // Store the provided paint notification delegate NeedPaint = needPaint; // Store the inherit instances - _inheritBack = new PaletteRibbonBackInheritRedirect(redirect, backStyle); - _inheritText = new PaletteRibbonTextInheritRedirect(redirect, textStyle); + _inheritBack = new PaletteRibbonBackInheritRedirect(redirect!, backStyle); + _inheritText = new PaletteRibbonTextInheritRedirect(redirect!, textStyle); // Define default values - _backColor1 = Color.Empty; - _backColor2 = Color.Empty; - _backColor3 = Color.Empty; - _backColor4 = Color.Empty; - _backColor5 = Color.Empty; - _textColor = Color.Empty; + _backColor1 = GlobalStaticValues.EMPTY_COLOR; + _backColor2 = GlobalStaticValues.EMPTY_COLOR; + _backColor3 = GlobalStaticValues.EMPTY_COLOR; + _backColor4 = GlobalStaticValues.EMPTY_COLOR; + _backColor5 = GlobalStaticValues.EMPTY_COLOR; + _textColor = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -67,7 +69,7 @@ public PaletteRibbonDoubleRedirect([DisallowNull] PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { _inheritBack.SetRedirector(redirect); _inheritText.SetRedirector(redirect); @@ -79,12 +81,13 @@ public void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (BackColor1 == Color.Empty) && - (BackColor2 == Color.Empty) && - (BackColor3 == Color.Empty) && - (BackColor4 == Color.Empty) && - (BackColor5 == Color.Empty) && - (TextColor == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (BackColor1 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor2 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor3 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor4 == GlobalStaticValues.EMPTY_COLOR) && + (BackColor5 == GlobalStaticValues.EMPTY_COLOR) && + (TextColor == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -120,8 +123,8 @@ public Color BackColor1 } } - private bool ShouldSerializeBackColor1() => BackColor1 != Color.Empty; - private void ResetBackColor1() => BackColor1 = Color.Empty; + private bool ShouldSerializeBackColor1() => BackColor1 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor1() => BackColor1 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the first background color for the ribbon item. @@ -129,7 +132,7 @@ public Color BackColor1 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor1(PaletteState state) => - BackColor1 != Color.Empty ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); + BackColor1 != GlobalStaticValues.EMPTY_COLOR ? BackColor1 : _inheritBack.GetRibbonBackColor1(state); #endregion @@ -156,8 +159,8 @@ public Color BackColor2 } } - private bool ShouldSerializeBackColor2() => BackColor2 != Color.Empty; - private void ResetBackColor2() => BackColor2 = Color.Empty; + private bool ShouldSerializeBackColor2() => BackColor2 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor2() => BackColor2 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the second background color for the ribbon item. @@ -165,7 +168,7 @@ public Color BackColor2 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor2(PaletteState state) => - BackColor2 != Color.Empty ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); + BackColor2 != GlobalStaticValues.EMPTY_COLOR ? BackColor2 : _inheritBack.GetRibbonBackColor2(state); #endregion @@ -192,8 +195,8 @@ public Color BackColor3 } } - private bool ShouldSerializeBackColor3() => BackColor3 != Color.Empty; - private void ResetBackColor3() => BackColor3 = Color.Empty; + private bool ShouldSerializeBackColor3() => BackColor3 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor3() => BackColor3 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the third background color for the ribbon item. @@ -201,7 +204,7 @@ public Color BackColor3 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor3(PaletteState state) => - BackColor3 != Color.Empty ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); + BackColor3 != GlobalStaticValues.EMPTY_COLOR ? BackColor3 : _inheritBack.GetRibbonBackColor3(state); #endregion @@ -228,8 +231,8 @@ public Color BackColor4 } } - private bool ShouldSerializeBackColor4() => BackColor4 != Color.Empty; - private void ResetBackColor4() => BackColor4 = Color.Empty; + private bool ShouldSerializeBackColor4() => BackColor4 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor4() => BackColor4 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fourth background color for the ribbon item. @@ -237,7 +240,7 @@ public Color BackColor4 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor4(PaletteState state) => - BackColor4 != Color.Empty ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); + BackColor4 != GlobalStaticValues.EMPTY_COLOR ? BackColor4 : _inheritBack.GetRibbonBackColor4(state); #endregion @@ -264,8 +267,8 @@ public Color BackColor5 } } - private bool ShouldSerializeBackColor5() => BackColor5 != Color.Empty; - private void ResetBackColor5() => BackColor5 = Color.Empty; + private bool ShouldSerializeBackColor5() => BackColor5 != GlobalStaticValues.EMPTY_COLOR; + private void ResetBackColor5() => BackColor5 = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the fifth background color for the ribbon item. @@ -273,7 +276,7 @@ public Color BackColor5 /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonBackColor5(PaletteState state) => - BackColor5 != Color.Empty ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); + BackColor5 != GlobalStaticValues.EMPTY_COLOR ? BackColor5 : _inheritBack.GetRibbonBackColor5(state); #endregion @@ -300,8 +303,8 @@ public Color TextColor } } - private bool ShouldSerializeTextColor() => TextColor != Color.Empty; - private void ResetTextColor() => TextColor = Color.Empty; + private bool ShouldSerializeTextColor() => TextColor != GlobalStaticValues.EMPTY_COLOR; + private void ResetTextColor() => TextColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the tab color for the item text. @@ -309,7 +312,7 @@ public Color TextColor /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonTextColor(PaletteState state) => - TextColor != Color.Empty ? TextColor : _inheritText.GetRibbonTextColor(state); + TextColor != GlobalStaticValues.EMPTY_COLOR ? TextColor : _inheritText.GetRibbonTextColor(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTab.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTab.cs new file mode 100644 index 000000000..ea1365355 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTab.cs @@ -0,0 +1,173 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Storage for general ribbon values. + /// + public class PaletteRibbonFileAppTab : Storage, IPaletteRibbonFileAppTab + { + #region Instance Fields + private Color _ribbonFileAppTabBottomColor; + private Color _ribbonFileAppTabTopColor; + private Color _ribbonFileAppTabTextColor; + private IPaletteRibbonFileAppTab _inherit; + + #endregion + + #region Identity + /// + /// Initialize a new instance of the PaletteRibbonGeneral class. + /// + /// Source for inheriting general values. + /// Delegate for notifying paint requests. + public PaletteRibbonFileAppTab([DisallowNull] IPaletteRibbonFileAppTab inherit, + NeedPaintHandler needPaint) + { + Debug.Assert(inherit != null); + + // Remember inheritance + _inherit = inherit!; + + // Store the provided paint notification delegate + NeedPaint = needPaint; + + // Set default values + _ribbonFileAppTabBottomColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + _ribbonFileAppTabTopColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + _ribbonFileAppTabTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + } + #endregion + + #region IsDefault + /// + /// Gets a value indicating if all values are default. + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => !ShouldSerializeRibbonFileAppTabBottomColor() && + !ShouldSerializeRibbonFileAppTabTopColor() && + !ShouldSerializeRibbonFileAppTabTextColor() + ; + #endregion + + #region SetInherit + /// + /// Sets the inheritance parent. + /// + public void SetInherit(IPaletteRibbonFileAppTab inherit) => _inherit = inherit; + + #endregion + + #region PopulateFromBase + /// + /// Populate values from the base palette. + /// + public void PopulateFromBase() + { + RibbonFileAppTabBottomColor = GetRibbonFileAppTabBottomColor(PaletteState.Normal); + RibbonFileAppTabTopColor = GetRibbonFileAppTabTopColor(PaletteState.Normal); + RibbonFileAppTabTextColor = GetRibbonFileAppTabTextColor(PaletteState.Normal); + } + #endregion + + #region RibbonFileAppTabBottomColor + /// + /// Gets access to ribbon app button dark color. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon app button dark color.")] + [RefreshProperties(RefreshProperties.All)] + public Color RibbonFileAppTabBottomColor + { + get => _ribbonFileAppTabBottomColor; + + set + { + if (_ribbonFileAppTabBottomColor != value) + { + _ribbonFileAppTabBottomColor = value; + PerformNeedPaint(); + } + } + } + private void ResetRibbonFileAppTabBottomColor() => RibbonFileAppTabBottomColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + private bool ShouldSerializeRibbonFileAppTabBottomColor() => RibbonFileAppTabBottomColor != GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + /// + public Color GetRibbonFileAppTabBottomColor(PaletteState state) => ShouldSerializeRibbonFileAppTabBottomColor() + ? RibbonFileAppTabBottomColor + : _inherit.GetRibbonFileAppTabBottomColor(state); + #endregion + + #region RibbonFileAppTabTopColor + /// + /// Gets access to ribbon app button light color. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon app button light color.")] + [RefreshProperties(RefreshProperties.All)] + public Color RibbonFileAppTabTopColor + { + get => _ribbonFileAppTabTopColor; + + set + { + if (_ribbonFileAppTabTopColor != value) + { + _ribbonFileAppTabTopColor = value; + PerformNeedPaint(); + } + } + } + private void ResetRibbonFileAppTabTopColor() => RibbonFileAppTabTopColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + private bool ShouldSerializeRibbonFileAppTabTopColor() => RibbonFileAppTabTopColor != GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + /// + public Color GetRibbonFileAppTabTopColor(PaletteState state) => ShouldSerializeRibbonFileAppTabTopColor() + ? RibbonFileAppTabTopColor + : _inherit.GetRibbonFileAppTabTopColor(state); + + #endregion + + #region RibbonFileAppTabTextColor + + /// + /// Gets access to ribbon app button text color. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon app button text color.")] + [RefreshProperties(RefreshProperties.All)] + public Color RibbonFileAppTabTextColor + { + get => _ribbonFileAppTabTextColor; + + set + { + if (_ribbonFileAppTabTextColor != value) + { + _ribbonFileAppTabTextColor = value; + PerformNeedPaint(); + } + } + } + private void ResetRibbonFileAppTabTextColor() => RibbonFileAppTabTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + private bool ShouldSerializeRibbonFileAppTabTextColor() => RibbonFileAppTabTextColor != GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + /// + public Color GetRibbonFileAppTabTextColor(PaletteState state) => ShouldSerializeRibbonFileAppTabTextColor() + ? RibbonFileAppTabTextColor + : _inherit.GetRibbonFileAppTabTextColor(state); + + #endregion + + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTabInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTabInherit.cs new file mode 100644 index 000000000..70ebe7e62 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTabInherit.cs @@ -0,0 +1,24 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Provide inheritance of palette ribbon general properties. + /// + public abstract class PaletteRibbonFileAppTabInherit : GlobalId, IPaletteRibbonFileAppTab + { + /// + public abstract Color GetRibbonFileAppTabTopColor(PaletteState state); + + /// + public abstract Color GetRibbonFileAppTabBottomColor(PaletteState state); + + /// + public abstract Color GetRibbonFileAppTabTextColor(PaletteState state); + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTabInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTabInheritRedirect.cs new file mode 100644 index 000000000..2a3cc223c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonFileAppTabInheritRedirect.cs @@ -0,0 +1,48 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Provide inheritance of palette ribbon "File App Tab" properties from source redirector. + /// + public class PaletteRibbonFileAppTabInheritRedirect : PaletteRibbonFileAppTabInherit + { + #region Instance Fields + private PaletteRedirect _redirect; + #endregion + + #region Identity + /// + /// Initialize a new instance of the PaletteRibbonGeneralInheritRedirect class. + /// + /// Source for inherit requests. + public PaletteRibbonFileAppTabInheritRedirect([DisallowNull] PaletteRedirect redirect) + { + Debug.Assert(redirect != null); + _redirect = redirect!; + } + #endregion + + #region SetRedirector + /// + /// Update the redirector with new reference. + /// + /// Target redirector. + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; + #endregion + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _redirect.GetRibbonFileAppTabBottomColor(state); + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _redirect.GetRibbonFileAppTabTopColor(state); + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _redirect.GetRibbonFileAppTabTextColor(state); + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneral.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneral.cs index a80eee3f6..d2a49f052 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneral.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneral.cs @@ -1,17 +1,13 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion - - namespace Krypton.Toolkit { /// @@ -36,11 +32,16 @@ public class PaletteRibbonGeneral : Storage, private Color _groupSeparatorLight; private Color _minimizeBarDarkColor; private Color _minimizeBarLightColor; + private Color _tabRowBackgroundSolidColor; + private Color _tabBackgroundGradientRaftingDarkColor; + private Color _tabBackgroundGradientRaftingLightColor; + private Color _tabRowBackgroundGradientFirstColor; private Color _qatButtonDarkColor; private Color _qatButtonLightColor; private Color _tabSeparatorColor; private Color _tabSeparatorContextColor; private Font? _textFont; + private float _ribbonTabRowGradientRaftingAngle; private PaletteTextHint _textHint; #endregion @@ -56,32 +57,37 @@ public PaletteRibbonGeneral([DisallowNull] IPaletteRibbonGeneral inherit, Debug.Assert(inherit != null); // Remember inheritance - _inherit = inherit; + _inherit = inherit!; // Store the provided paint notification delegate NeedPaint = needPaint; // Set default values _contextTextAlign = PaletteRelativeAlign.Inherit; - _contextTextColor = Color.Empty; + _contextTextColor = GlobalStaticValues.EMPTY_COLOR; _contextTextFont = null; - _disabledDarkColor = Color.Empty; - _disabledLightColor = Color.Empty; - _dialogDarkColor = Color.Empty; - _dialogLightColor = Color.Empty; - _dropArrowLightColor = Color.Empty; - _dropArrowDarkColor = Color.Empty; - _groupSeparatorDark = Color.Empty; - _groupSeparatorLight = Color.Empty; - _minimizeBarDarkColor = Color.Empty; - _minimizeBarLightColor = Color.Empty; + _disabledDarkColor = GlobalStaticValues.EMPTY_COLOR; + _disabledLightColor = GlobalStaticValues.EMPTY_COLOR; + _dialogDarkColor = GlobalStaticValues.EMPTY_COLOR; + _dialogLightColor = GlobalStaticValues.EMPTY_COLOR; + _dropArrowLightColor = GlobalStaticValues.EMPTY_COLOR; + _dropArrowDarkColor = GlobalStaticValues.EMPTY_COLOR; + _groupSeparatorDark = GlobalStaticValues.EMPTY_COLOR; + _groupSeparatorLight = GlobalStaticValues.EMPTY_COLOR; + _minimizeBarDarkColor = GlobalStaticValues.EMPTY_COLOR; + _minimizeBarLightColor = GlobalStaticValues.EMPTY_COLOR; + _tabBackgroundGradientRaftingDarkColor = GlobalStaticValues.EMPTY_COLOR; + _tabBackgroundGradientRaftingLightColor = GlobalStaticValues.EMPTY_COLOR; + _tabRowBackgroundSolidColor = GlobalStaticValues.EMPTY_COLOR; + _tabRowBackgroundGradientFirstColor = GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + _ribbonTabRowGradientRaftingAngle = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; _ribbonShape = PaletteRibbonShape.Inherit; - _tabSeparatorColor = Color.Empty; - _tabSeparatorContextColor = Color.Empty; + _tabSeparatorColor = GlobalStaticValues.EMPTY_COLOR; + _tabSeparatorContextColor = GlobalStaticValues.EMPTY_COLOR; _textFont = null; _textHint = PaletteTextHint.Inherit; - _qatButtonDarkColor = Color.Empty; - _qatButtonLightColor = Color.Empty; + _qatButtonDarkColor = GlobalStaticValues.EMPTY_COLOR; + _qatButtonLightColor = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -90,27 +96,32 @@ public PaletteRibbonGeneral([DisallowNull] IPaletteRibbonGeneral inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (ContextTextAlign == PaletteRelativeAlign.Inherit) && - (ContextTextColor == Color.Empty) && - (ContextTextFont == null) && - (DisabledDark == Color.Empty) && - (DisabledLight == Color.Empty) && - (DropArrowLight == Color.Empty) && - (DropArrowDark == Color.Empty) && - (GroupDialogDark == Color.Empty) && - (GroupDialogLight == Color.Empty) && - (GroupSeparatorDark == Color.Empty) && - (GroupSeparatorLight == Color.Empty) && - (MinimizeBarDarkColor == Color.Empty) && - (MinimizeBarLightColor == Color.Empty) && - (RibbonShape == PaletteRibbonShape.Inherit) && - (TextFont == null) && - (TextHint == PaletteTextHint.Inherit) && - (TabSeparatorColor == Color.Empty) && - (TabSeparatorContextColor == Color.Empty) && - (QATButtonDarkColor == Color.Empty) && - (QATButtonLightColor == Color.Empty); - + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => !ShouldSerializeContextTextAlign() && + !ShouldSerializeContextTextFont() && + !ShouldSerializeContextTextColor() && + !ShouldSerializeDisabledDark() && + !ShouldSerializeDisabledLight() && + !ShouldSerializeGroupDialogDark() && + !ShouldSerializeGroupDialogLight() && + !ShouldSerializeDropArrowDark() && + !ShouldSerializeDropArrowLight() && + !ShouldSerializeGroupSeparatorDark() && + !ShouldSerializeGroupSeparatorLight() && + !ShouldSerializeMinimizeBarDarkColor() && + !ShouldSerializeMinimizeBarLightColor() && + !ShouldSerializeTabRowBackgroundSolidColor() && + !ShouldSerializeTabRowBackgroundGradientRaftingDarkColor() && + !ShouldSerializeTabRowBackgroundGradientRaftingLightColor() && + !ShouldSerializeTabRowBackgroundGradientFirstColor() && + !ShouldSerializeRibbonTabRowGradientRaftingAngle() && + !ShouldSerializeRibbonShape() && + !ShouldSerializeTabSeparatorColor() && + !ShouldSerializeTabSeparatorContextColor() && + !ShouldSerializeTextFont() && + !ShouldSerializeTextHint() && + !ShouldSerializeQATButtonDarkColor() && + !ShouldSerializeQATButtonLightColor(); #endregion #region SetInherit @@ -140,6 +151,11 @@ public void PopulateFromBase() GroupSeparatorLight = GetRibbonGroupSeparatorLight(PaletteState.Normal); MinimizeBarDarkColor = GetRibbonMinimizeBarDark(PaletteState.Normal); MinimizeBarLightColor = GetRibbonMinimizeBarLight(PaletteState.Normal); + TabRowBackgroundSolidColor = GetRibbonTabRowBackgroundSolidColor(PaletteState.Normal); + TabRowBackgroundGradientRaftingDarkColor = GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState.Normal); + TabRowBackgroundGradientRaftingLightColor = GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState.Normal); + TabRowBackgroundGradientFirstColor = GetRibbonTabRowGradientColor1(PaletteState.Normal); + RibbonTabRowGradientRaftingAngle = GetRibbonTabRowGradientRaftingAngle(PaletteState.Normal); RibbonShape = GetRibbonShape(); TabSeparatorColor = GetRibbonTabSeparatorColor(PaletteState.Normal); TabSeparatorContextColor = GetRibbonTabSeparatorContextColor(PaletteState.Normal); @@ -172,11 +188,8 @@ public PaletteRelativeAlign ContextTextAlign } } } - - /// - /// Reset the ContextTextAlign to the default value. - /// - public void ResetContextTextAlign() => ContextTextAlign = PaletteRelativeAlign.Inherit; + private void ResetContextTextAlign() => ContextTextAlign = PaletteRelativeAlign.Inherit; + private bool ShouldSerializeContextTextAlign() => ContextTextAlign != PaletteRelativeAlign.Inherit; /// /// Gets the text alignment for the ribbon context text. @@ -184,7 +197,7 @@ public PaletteRelativeAlign ContextTextAlign /// Palette value should be applicable to this state. /// Font value. public PaletteRelativeAlign GetRibbonContextTextAlign(PaletteState state) => - ContextTextAlign != PaletteRelativeAlign.Inherit + ShouldSerializeContextTextAlign() ? ContextTextAlign : _inherit.GetRibbonContextTextAlign(state); @@ -212,11 +225,8 @@ public Font? ContextTextFont } } } - - /// - /// Reset the ContextTextFont to the default value. - /// - public void ResetContextTextFont() => ContextTextFont = null; + private void ResetContextTextFont() => ContextTextFont = null; + private bool ShouldSerializeContextTextFont() => ContextTextFont != null; /// /// Gets the font for the ribbon context text. @@ -234,7 +244,6 @@ public Font? ContextTextFont [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Color used for ribbon context text.")] - [DefaultValue(typeof(Color), "Empty")] [RefreshProperties(RefreshProperties.All)] public Color ContextTextColor { @@ -249,18 +258,15 @@ public Color ContextTextColor } } } - - /// - /// Resets the ContextTextColor property to its default value. - /// - public void ResetContextTextColor() => ContextTextColor = Color.Empty; + private void ResetContextTextColor() => ContextTextColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeContextTextColor() => ContextTextColor != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color of the ribbon caption text. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonContextTextColor(PaletteState state) => DisabledDark != Color.Empty + public Color GetRibbonContextTextColor(PaletteState state) => ShouldSerializeContextTextColor() ? ContextTextColor : _inherit.GetRibbonContextTextColor(state); @@ -273,7 +279,6 @@ public Color GetRibbonContextTextColor(PaletteState state) => DisabledDark != Co [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Dark disabled color for ribbon glyphs.")] - [DefaultValue(typeof(Color), "Empty")] [RefreshProperties(RefreshProperties.All)] public Color DisabledDark { @@ -288,11 +293,8 @@ public Color DisabledDark } } } - - /// - /// Resets the DisabledDark property to its default value. - /// - public void ResetDisabledDark() => DisabledDark = Color.Empty; + private void ResetDisabledDark() => DisabledDark = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeDisabledDark() => DisabledDark != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the dark disabled color used for ribbon glyphs. @@ -300,7 +302,7 @@ public Color DisabledDark /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonDisabledDark(PaletteState state) => - DisabledDark != Color.Empty ? DisabledDark : _inherit.GetRibbonDisabledDark(state); + ShouldSerializeDisabledDark() ? DisabledDark : _inherit.GetRibbonDisabledDark(state); #endregion @@ -311,7 +313,6 @@ public Color GetRibbonDisabledDark(PaletteState state) => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Light disabled color for ribbon glyphs.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color DisabledLight { @@ -326,11 +327,8 @@ public Color DisabledLight } } } - - /// - /// Resets the DisabledLight property to its default value. - /// - public void ResetDisabledLight() => DisabledLight = Color.Empty; + private void ResetDisabledLight() => DisabledLight = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeDisabledLight() => DisabledLight != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the light disabled color used for ribbon glyphs. @@ -338,7 +336,7 @@ public Color DisabledLight /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonDisabledLight(PaletteState state) => - DisabledLight != Color.Empty ? DisabledLight : _inherit.GetRibbonDisabledLight(state); + ShouldSerializeDisabledLight() ? DisabledLight : _inherit.GetRibbonDisabledLight(state); #endregion @@ -349,7 +347,6 @@ public Color GetRibbonDisabledLight(PaletteState state) => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon group dialog launcher button dark color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color GroupDialogDark { @@ -364,18 +361,15 @@ public Color GroupDialogDark } } } - - /// - /// Resets the GroupDialogDark property to its default value. - /// - public void ResetGroupDialogDark() => GroupDialogDark = Color.Empty; + private void ResetGroupDialogDark() => GroupDialogDark = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeGroupDialogDark() => GroupDialogDark != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the dialog launcher dark. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonGroupDialogDark(PaletteState state) => GroupDialogDark != Color.Empty + public Color GetRibbonGroupDialogDark(PaletteState state) => ShouldSerializeGroupDialogDark() ? GroupDialogDark : _inherit.GetRibbonGroupDialogDark(state); @@ -388,7 +382,6 @@ public Color GetRibbonGroupDialogDark(PaletteState state) => GroupDialogDark != [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon group dialog launcher button light color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color GroupDialogLight { @@ -403,18 +396,15 @@ public Color GroupDialogLight } } } - - /// - /// Resets the GroupDialogLight property to its default value. - /// - public void ResetGroupDialogLight() => GroupDialogLight = Color.Empty; + private void ResetGroupDialogLight() => GroupDialogLight = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeGroupDialogLight() => GroupDialogLight != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the dialog launcher light. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonGroupDialogLight(PaletteState state) => GroupDialogLight != Color.Empty + public Color GetRibbonGroupDialogLight(PaletteState state) => ShouldSerializeGroupDialogLight() ? GroupDialogLight : _inherit.GetRibbonGroupDialogLight(state); @@ -427,7 +417,6 @@ public Color GetRibbonGroupDialogLight(PaletteState state) => GroupDialogLight ! [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon drop arrow dark color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color DropArrowDark { @@ -442,11 +431,8 @@ public Color DropArrowDark } } } - - /// - /// Resets the DropArrowDark property to its default value. - /// - public void ResetDropArrowDark() => DropArrowDark = Color.Empty; + private void ResetDropArrowDark() => DropArrowDark = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeDropArrowDark() => DropArrowDark != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the drop arrow dark color. @@ -454,7 +440,7 @@ public Color DropArrowDark /// Palette value should be applicable to this state. /// Color value. public Color GetRibbonDropArrowDark(PaletteState state) => - DropArrowDark != Color.Empty ? DropArrowDark : _inherit.GetRibbonDropArrowDark(state); + ShouldSerializeDropArrowDark() ? DropArrowDark : _inherit.GetRibbonDropArrowDark(state); #endregion @@ -465,7 +451,6 @@ public Color GetRibbonDropArrowDark(PaletteState state) => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon drop arrow light color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color DropArrowLight { @@ -480,18 +465,15 @@ public Color DropArrowLight } } } - - /// - /// Resets the DropArrowLight property to its default value. - /// - public void ResetDropArrowLight() => DropArrowLight = Color.Empty; + private void ResetDropArrowLight() => DropArrowLight = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeDropArrowLight() => DropArrowLight != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the drop arrow light. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonDropArrowLight(PaletteState state) => DropArrowLight != Color.Empty + public Color GetRibbonDropArrowLight(PaletteState state) => ShouldSerializeDropArrowLight() ? DropArrowLight : _inherit.GetRibbonDropArrowLight(state); @@ -504,7 +486,6 @@ public Color GetRibbonDropArrowLight(PaletteState state) => DropArrowLight != Co [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon group separator dark color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color GroupSeparatorDark { @@ -519,18 +500,15 @@ public Color GroupSeparatorDark } } } - - /// - /// Resets the GroupDialogDark property to its default value. - /// - public void ResetGroupSeparatorDark() => GroupSeparatorDark = Color.Empty; + private void ResetGroupSeparatorDark() => GroupSeparatorDark = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeGroupSeparatorDark() => GroupSeparatorDark != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the dialog launcher dark. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonGroupSeparatorDark(PaletteState state) => GroupSeparatorDark != Color.Empty + public Color GetRibbonGroupSeparatorDark(PaletteState state) => ShouldSerializeGroupSeparatorDark() ? GroupSeparatorDark : _inherit.GetRibbonGroupSeparatorDark(state); @@ -543,7 +521,6 @@ public Color GetRibbonGroupSeparatorDark(PaletteState state) => GroupSeparatorDa [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon group separator light color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color GroupSeparatorLight { @@ -558,18 +535,15 @@ public Color GroupSeparatorLight } } } - - /// - /// Resets the GroupSeparatorLight property to its default value. - /// - public void ResetGroupSeparatorLight() => GroupDialogLight = Color.Empty; + private void ResetGroupSeparatorLight() => GroupDialogLight = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeGroupSeparatorLight() => GroupDialogLight != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the dialog launcher light. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonGroupSeparatorLight(PaletteState state) => GroupSeparatorLight != Color.Empty + public Color GetRibbonGroupSeparatorLight(PaletteState state) => ShouldSerializeGroupSeparatorLight() ? GroupSeparatorLight : _inherit.GetRibbonGroupSeparatorLight(state); @@ -582,7 +556,6 @@ public Color GetRibbonGroupSeparatorLight(PaletteState state) => GroupSeparatorL [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon minimize bar dark color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color MinimizeBarDarkColor { @@ -597,18 +570,15 @@ public Color MinimizeBarDarkColor } } } - - /// - /// Resets the MinimizeBarDarkColor property to its default value. - /// - public void ResetMinimizeBarDarkColor() => MinimizeBarDarkColor = Color.Empty; + private void ResetMinimizeBarDarkColor() => MinimizeBarDarkColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeMinimizeBarDarkColor() => MinimizeBarDarkColor != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the ribbon minimize bar dark. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonMinimizeBarDark(PaletteState state) => MinimizeBarDarkColor != Color.Empty + public Color GetRibbonMinimizeBarDark(PaletteState state) => ShouldSerializeMinimizeBarDarkColor() ? MinimizeBarDarkColor : _inherit.GetRibbonMinimizeBarDark(state); @@ -621,7 +591,6 @@ public Color GetRibbonMinimizeBarDark(PaletteState state) => MinimizeBarDarkColo [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon minimize bar light color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color MinimizeBarLightColor { @@ -636,23 +605,199 @@ public Color MinimizeBarLightColor } } } - - /// - /// Resets the MinimizeBarLightColor property to its default value. - /// - public void ResetMinimizeBarLightColor() => MinimizeBarLightColor = Color.Empty; + private void ResetMinimizeBarLightColor() => MinimizeBarLightColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeMinimizeBarLightColor() => MinimizeBarLightColor != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the ribbon minimize bar light. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonMinimizeBarLight(PaletteState state) => MinimizeBarLightColor != Color.Empty + public Color GetRibbonMinimizeBarLight(PaletteState state) => ShouldSerializeMinimizeBarLightColor() ? MinimizeBarLightColor : _inherit.GetRibbonMinimizeBarLight(state); #endregion + #region TabRowBackgroundSolidColor + + /// + /// Gets access to ribbon tab row solid color. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon tab row background solid color.")] + [RefreshProperties(RefreshProperties.All)] + public Color TabRowBackgroundSolidColor + { + get => _tabRowBackgroundSolidColor; + + set + { + if (_tabRowBackgroundSolidColor != value) + { + _tabRowBackgroundSolidColor = value; + PerformNeedPaint(); + } + } + } + private void ResetTabRowBackgroundSolidColor() => TabRowBackgroundSolidColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeTabRowBackgroundSolidColor() => TabRowBackgroundSolidColor != GlobalStaticValues.EMPTY_COLOR; + + /// + /// Gets the solid color for the ribbon tab row. + /// + /// Palette value should be applicable to this state. + /// Color value. + public Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => ShouldSerializeTabRowBackgroundSolidColor() + ? TabRowBackgroundSolidColor + : _inherit.GetRibbonTabRowBackgroundSolidColor(state); + + #endregion + + #region TabRowBackgroundGradientRaftingDarkColor + + /// + /// Gets access to ribbon tab row gradient dark rafting color. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon tab row background gradient dark rafting color.")] + [RefreshProperties(RefreshProperties.All)] + public Color TabRowBackgroundGradientRaftingDarkColor + { + get => _tabBackgroundGradientRaftingDarkColor; + + set + { + if (_tabBackgroundGradientRaftingDarkColor != value) + { + _tabBackgroundGradientRaftingDarkColor = value; + PerformNeedPaint(); + } + } + } + private void ResetTabRowBackgroundGradientRaftingDarkColor() => TabRowBackgroundGradientRaftingDarkColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeTabRowBackgroundGradientRaftingDarkColor() => TabRowBackgroundGradientRaftingDarkColor != GlobalStaticValues.EMPTY_COLOR; + + /// + /// Gets the dark Gradient rafting color for the ribbon tab row. + /// + /// Palette value should be applicable to this state. + /// Color value. + public Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => ShouldSerializeTabRowBackgroundGradientRaftingDarkColor() + ? TabRowBackgroundGradientRaftingDarkColor + : _inherit.GetRibbonTabRowBackgroundGradientRaftingDark(state); + + #endregion + + #region TabRowBackgroundGradientRaftingLightColor + + /// + /// Gets access to ribbon tab row gradient light rafting color. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon tab row background gradient light rafting color.")] + [RefreshProperties(RefreshProperties.All)] + public Color TabRowBackgroundGradientRaftingLightColor + { + get => _tabBackgroundGradientRaftingLightColor; + + set + { + if (_tabBackgroundGradientRaftingLightColor != value) + { + _tabBackgroundGradientRaftingLightColor = value; + PerformNeedPaint(); + } + } + } + private void ResetTabRowBackgroundGradientRaftingLightColor() => TabRowBackgroundGradientRaftingLightColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeTabRowBackgroundGradientRaftingLightColor() => TabRowBackgroundGradientRaftingLightColor != GlobalStaticValues.EMPTY_COLOR; + + /// + /// Gets the light rafting color for the ribbon tab row. + /// + /// Palette value should be applicable to this state. + /// Color value. + public Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => ShouldSerializeTabRowBackgroundGradientRaftingLightColor() + ? TabRowBackgroundGradientRaftingLightColor + : _inherit.GetRibbonTabRowBackgroundGradientRaftingLight(state); + + #endregion + + #region TabRowBackgroundGradientFirstColor + + /// + /// Gets access to ribbon tab row gradient first color. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon tab row background gradient first color.")] + [RefreshProperties(RefreshProperties.All)] + public Color TabRowBackgroundGradientFirstColor + { + get => _tabRowBackgroundGradientFirstColor; + + set + { + if (_tabRowBackgroundGradientFirstColor != value) + { + _tabRowBackgroundGradientFirstColor = value; + PerformNeedPaint(); + } + } + } + private void ResetTabRowBackgroundGradientFirstColor() => TabRowBackgroundGradientFirstColor = GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + private bool ShouldSerializeTabRowBackgroundGradientFirstColor() => TabRowBackgroundGradientFirstColor != GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public Color GetRibbonTabRowGradientColor1(PaletteState state) => ShouldSerializeTabRowBackgroundGradientFirstColor() + ? TabRowBackgroundGradientFirstColor + : _inherit.GetRibbonTabRowGradientColor1(state); + + #endregion + + #region RibbonTabRowGradientRaftingAngle + + /// + /// Gets access to ribbon tab row gradient rafting angle. + /// + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Ribbon tab row background gradient rafting angle.")] + [DefaultValue(GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT)] + [RefreshProperties(RefreshProperties.All)] + public float RibbonTabRowGradientRaftingAngle + { + get => _ribbonTabRowGradientRaftingAngle; + + set + { + if (_ribbonTabRowGradientRaftingAngle != value) + { + _ribbonTabRowGradientRaftingAngle = value; + PerformNeedPaint(); + } + } + } + private void ResetRibbonTabRowGradientRaftingAngle() => RibbonTabRowGradientRaftingAngle = + GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + private bool ShouldSerializeRibbonTabRowGradientRaftingAngle() => RibbonTabRowGradientRaftingAngle != + GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + /// + /// Gets the rafting angle for the ribbon tab row. + /// + /// Palette value should be applicable to this state. + /// Rafting angle value. + public float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => ShouldSerializeRibbonTabRowGradientRaftingAngle() + ? RibbonTabRowGradientRaftingAngle + : _inherit.GetRibbonTabRowGradientRaftingAngle(state); + + #endregion + #region RibbonShape /// /// Gets access to ribbon shape. @@ -674,18 +819,15 @@ public PaletteRibbonShape RibbonShape } } } - - /// - /// Resets the RibbonShape property to its default value. - /// - public void ResetRibbonShape() => RibbonShape = PaletteRibbonShape.Inherit; + private void ResetRibbonShape() => RibbonShape = PaletteRibbonShape.Inherit; + private bool ShouldSerializeRibbonShape() => RibbonShape != PaletteRibbonShape.Inherit; /// /// Gets the ribbon shape. /// /// Color value. - public PaletteRibbonShape GetRibbonShape() => - RibbonShape != PaletteRibbonShape.Inherit ? RibbonShape : _inherit.GetRibbonShape(); + public PaletteRibbonShape GetRibbonShape() => ShouldSerializeRibbonShape() + ? RibbonShape : _inherit.GetRibbonShape(); #endregion @@ -696,7 +838,6 @@ public PaletteRibbonShape GetRibbonShape() => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon tab separator color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color TabSeparatorColor { @@ -711,18 +852,15 @@ public Color TabSeparatorColor } } } - - /// - /// Resets the TabSeparatorColor property to its default value. - /// - public void ResetTabSeparatorColor() => TabSeparatorColor = Color.Empty; + private void ResetTabSeparatorColor() => TabSeparatorColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeTabSeparatorColor() => TabSeparatorColor != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the tab separator. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonTabSeparatorColor(PaletteState state) => TabSeparatorColor != Color.Empty + public Color GetRibbonTabSeparatorColor(PaletteState state) => ShouldSerializeTabSeparatorColor() ? TabSeparatorColor : _inherit.GetRibbonTabSeparatorColor(state); @@ -735,7 +873,6 @@ public Color GetRibbonTabSeparatorColor(PaletteState state) => TabSeparatorColor [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Ribbon tab context separator color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color TabSeparatorContextColor { @@ -750,19 +887,16 @@ public Color TabSeparatorContextColor } } } - - /// - /// Resets the TabSeparatorContextColor property to its default value. - /// - public void ResetTabSeparatorContextColor() => TabSeparatorContextColor = Color.Empty; + private void ResetTabSeparatorContextColor() => TabSeparatorContextColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeTabSeparatorContextColor() => TabSeparatorContextColor != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the tab context separator. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonTabSeparatorContextColor(PaletteState state) => - TabSeparatorColor != Color.Empty + public Color GetRibbonTabSeparatorContextColor(PaletteState state) => + ShouldSerializeTabSeparatorContextColor() ? TabSeparatorContextColor : _inherit.GetRibbonTabSeparatorContextColor(state); @@ -783,18 +917,15 @@ public Font? TextFont set { - if (_textFont != value) + if (!Equals(_textFont, value)) { _textFont = value; PerformNeedPaint(true); } } } - - /// - /// Reset the TextFont to the default value. - /// - public void ResetTextFont() => TextFont = null; + private void ResetTextFont() => TextFont = null; + private bool ShouldSerializeTextFont() => TextFont != null; /// /// Gets the font for the ribbon text. @@ -827,11 +958,8 @@ public PaletteTextHint TextHint } } } - - /// - /// Reset the TextHint to the default value. - /// - public void ResetTextHint() => TextHint = PaletteTextHint.Inherit; + private void ResetTextHint() => TextHint = PaletteTextHint.Inherit; + private bool ShouldSerializeTextHint() => TextHint != PaletteTextHint.Inherit; /// /// Gets the rendering hint for the ribbon font. @@ -839,7 +967,7 @@ public PaletteTextHint TextHint /// Palette value should be applicable to this state. /// PaletteTextHint value. public PaletteTextHint GetRibbonTextHint(PaletteState state) => - TextHint != PaletteTextHint.Inherit ? TextHint : _inherit.GetRibbonTextHint(state); + ShouldSerializeTextHint() ? TextHint : _inherit.GetRibbonTextHint(state); #endregion @@ -850,7 +978,6 @@ public PaletteTextHint GetRibbonTextHint(PaletteState state) => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Quick access toolbar extra button dark color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color QATButtonDarkColor { @@ -865,18 +992,15 @@ public Color QATButtonDarkColor } } } - - /// - /// Resets the QATButtonDarkColor property to its default value. - /// - public void ResetQATButtonDarkColor() => QATButtonDarkColor = Color.Empty; + private void ResetQATButtonDarkColor() => QATButtonDarkColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeQATButtonDarkColor() => QATButtonDarkColor != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the extra QAT button dark content color. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonQATButtonDark(PaletteState state) => QATButtonDarkColor != Color.Empty + public Color GetRibbonQATButtonDark(PaletteState state) => ShouldSerializeQATButtonDarkColor() ? QATButtonDarkColor : _inherit.GetRibbonQATButtonDark(state); @@ -889,7 +1013,6 @@ public Color GetRibbonQATButtonDark(PaletteState state) => QATButtonDarkColor != [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Quick access toolbar extra button light color.")] - [DefaultValue(typeof(Color), "")] [RefreshProperties(RefreshProperties.All)] public Color QATButtonLightColor { @@ -904,18 +1027,15 @@ public Color QATButtonLightColor } } } - - /// - /// Resets the QATButtonLightColor property to its default value. - /// - public void ResetQATButtonLightColor() => QATButtonLightColor = Color.Empty; + private void ResetQATButtonLightColor() => QATButtonLightColor = GlobalStaticValues.EMPTY_COLOR; + private bool ShouldSerializeQATButtonLightColor() => QATButtonLightColor != GlobalStaticValues.EMPTY_COLOR; /// /// Gets the color for the extra QAT button light content color. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonQATButtonLight(PaletteState state) => QATButtonLightColor != Color.Empty + public Color GetRibbonQATButtonLight(PaletteState state) => ShouldSerializeQATButtonLightColor() ? QATButtonLightColor : _inherit.GetRibbonQATButtonLight(state); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInherit.cs index 09edfd74e..4a6d2fd6e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInherit.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -157,6 +155,36 @@ public abstract class PaletteRibbonGeneralInherit : GlobalId, /// Palette value should be applicable to this state. /// Color value. public abstract Color GetRibbonQATButtonLight(PaletteState state); + + /// + /// Gets the gradient dark rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public abstract Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state); + + /// + /// Gets the gradient light rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public abstract Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state); + + /// + /// Gets the solid color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public abstract Color GetRibbonTabRowBackgroundSolidColor(PaletteState state); + + /// + public abstract Color GetRibbonTabRowGradientColor1(PaletteState state); + + /// Gets the ribbon tab row gradient rafting angle. + /// Palette value should be applicable to this state. + /// The gradient rafting angle. + public abstract float GetRibbonTabRowGradientRaftingAngle(PaletteState state); + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInheritRedirect.cs index 8009c817a..228852e47 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonGeneralInheritRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteRibbonGeneralInheritRedirect : PaletteRibbonGeneralInherit { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion #region Identity @@ -26,10 +26,10 @@ public class PaletteRibbonGeneralInheritRedirect : PaletteRibbonGeneralInherit /// Initialize a new instance of the PaletteRibbonGeneralInheritRedirect class. /// /// Source for inherit requests. - public PaletteRibbonGeneralInheritRedirect([DisallowNull] PaletteRedirect? redirect) + public PaletteRibbonGeneralInheritRedirect([DisallowNull] PaletteRedirect redirect) { Debug.Assert(redirect != null); - _redirect = redirect; + _redirect = redirect!; } #endregion @@ -38,7 +38,7 @@ public PaletteRibbonGeneralInheritRedirect([DisallowNull] PaletteRedirect? redir /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion #region IPaletteRibbon @@ -138,6 +138,27 @@ public PaletteRibbonGeneralInheritRedirect([DisallowNull] PaletteRedirect? redir /// Color value. public override Color GetRibbonMinimizeBarLight(PaletteState state) => _redirect.GetRibbonMinimizeBarLight(state); + /// + /// Gets the gradient dark rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => _redirect.GetRibbonTabRowBackgroundGradientRaftingDark(state); + + /// + /// Gets the gradient light rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => _redirect.GetRibbonTabRowBackgroundGradientRaftingLight(state); + + /// + /// Gets the solid color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _redirect.GetRibbonTabRowBackgroundSolidColor(state); + /// /// Gets the color for the tab separator. /// @@ -179,6 +200,16 @@ public PaletteRibbonGeneralInheritRedirect([DisallowNull] PaletteRedirect? redir /// Palette value should be applicable to this state. /// Color value. public override Color GetRibbonQATButtonLight(PaletteState state) => _redirect.GetRibbonQATButtonLight(state); + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + _redirect.GetRibbonTabRowGradientColor1(state); + + /// Gets the ribbon tab row gradient rafting angle. + /// Palette value should be applicable to this state. + /// The gradient rafting angle. + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => + _redirect.GetRibbonTabRowGradientRaftingAngle(state); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonText.cs index 69721be12..7eed706f7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonText.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -38,7 +36,7 @@ public PaletteRibbonText(NeedPaintHandler needPaint) /// /// Source for inheriting text values. /// Delegate for notifying changes in value. - public PaletteRibbonText(IPaletteRibbonText inheritText, + public PaletteRibbonText(IPaletteRibbonText? inheritText, NeedPaintHandler needPaint) { // Remember inheritance @@ -48,7 +46,7 @@ public PaletteRibbonText(IPaletteRibbonText inheritText, NeedPaint = needPaint; // Define default values - _textColor = Color.Empty; + _textColor = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -57,7 +55,8 @@ public PaletteRibbonText(IPaletteRibbonText inheritText, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => TextColor == Color.Empty; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => TextColor == GlobalStaticValues.EMPTY_COLOR; #endregion @@ -106,17 +105,17 @@ public Color TextColor } } - private bool ShouldSerializeTextColor() => TextColor != Color.Empty; - private void ResetTextColor() => TextColor = Color.Empty; + private bool ShouldSerializeTextColor() => TextColor != GlobalStaticValues.EMPTY_COLOR; + private void ResetTextColor() => TextColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the tab color for the item text. /// /// Palette value should be applicable to this state. /// Color value. - public Color GetRibbonTextColor(PaletteState state) => TextColor != Color.Empty + public Color GetRibbonTextColor(PaletteState state) => TextColor != GlobalStaticValues.EMPTY_COLOR ? TextColor - : (_inheritText?.GetRibbonTextColor(state) ?? Color.Empty); + : (_inheritText?.GetRibbonTextColor(state) ?? GlobalStaticValues.EMPTY_COLOR); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInherit.cs index 4f7fa04d8..53b39e94c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInheritRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInheritRedirect.cs index e41672406..0a300bdcd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInheritRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteRibbon/PaletteRibbonTextInheritRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteRibbonTextInheritRedirect : PaletteRibbonTextInherit { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion @@ -28,12 +28,14 @@ public class PaletteRibbonTextInheritRedirect : PaletteRibbonTextInherit /// /// Source for inherit requests. /// Ribbon item text style. - public PaletteRibbonTextInheritRedirect([DisallowNull] PaletteRedirect? redirect, + public PaletteRibbonTextInheritRedirect(PaletteRedirect redirect, PaletteRibbonTextStyle styleText) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); - _redirect = redirect; + _redirect = redirect!; StyleText = styleText; } #endregion @@ -43,7 +45,7 @@ public PaletteRibbonTextInheritRedirect([DisallowNull] PaletteRedirect? redirect /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _redirect = redirect; + public void SetRedirector(PaletteRedirect redirect) => _redirect = redirect; #endregion #region StyleText diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabBorder.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabBorder.cs index bdb876986..e748ac240 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabBorder.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public class PaletteTabBorder : PaletteBorder /// Source for inheriting defaulted values. /// Delegate for notifying paint requests. public PaletteTabBorder(IPaletteBorder inherit, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) : base(inherit, needPaint) { } @@ -35,17 +35,18 @@ public PaletteTabBorder(IPaletteBorder inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Draw == InheritBool.Inherit) && - (GraphicsHint == PaletteGraphicsHint.Inherit) && - (Color1 == Color.Empty) && - (Color2 == Color.Empty) && - (ColorStyle == PaletteColorStyle.Inherit) && - (ColorAlign == PaletteRectangleAlign.Inherit) && - (ColorAngle == -1) && - (Width == -1) && - (Image == null) && - (ImageStyle == PaletteImageStyle.Inherit) && - (ImageAlign == PaletteRectangleAlign.Inherit); + (GraphicsHint == PaletteGraphicsHint.Inherit) && + (Color1 == GlobalStaticValues.EMPTY_COLOR) && + (Color2 == GlobalStaticValues.EMPTY_COLOR) && + (ColorStyle == PaletteColorStyle.Inherit) && + (ColorAlign == PaletteRectangleAlign.Inherit) && + (ColorAngle == -1) && + (Width == -1) && + (Image == null) && + (ImageStyle == PaletteImageStyle.Inherit) && + (ImageAlign == PaletteRectangleAlign.Inherit); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTriple.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTriple.cs index bfedd07d6..c05e70864 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTriple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTriple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,10 +32,15 @@ public PaletteTabTriple([DisallowNull] IPaletteTriple inherit, // Store the provided paint notification delegate NeedPaint = needPaint; + if (inherit is null) + { + throw new ArgumentNullException(nameof(inherit)); + } + // Create storage that maps onto the inherit instances Back = new PaletteBack(inherit.PaletteBack, needPaint); - Border = new PaletteTabBorder(inherit.PaletteBorder, needPaint); - Content = new PaletteContent(inherit.PaletteContent, needPaint); + Border = new PaletteTabBorder(inherit.PaletteBorder!, needPaint); + Content = new PaletteContent(inherit.PaletteContent!, needPaint); } #endregion @@ -44,9 +49,10 @@ public PaletteTabTriple([DisallowNull] IPaletteTriple inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -57,8 +63,8 @@ public PaletteTabTriple([DisallowNull] IPaletteTriple inherit, public void SetInherit(IPaletteTriple inherit) { Back.SetInherit(inherit.PaletteBack); - Border.SetInherit(inherit.PaletteBorder); - Content.SetInherit(inherit.PaletteContent); + Border.SetInherit(inherit.PaletteBorder!); + Content.SetInherit(inherit.PaletteContent!); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTripleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTripleRedirect.cs index cabe34c86..8d386927f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTripleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTab/PaletteTabTripleRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,17 +38,19 @@ public PaletteTabTripleRedirect([DisallowNull] PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); // Store the provided paint notification delegate NeedPaint = needPaint; - + // Store the inherit instances - _backInherit = new PaletteBackInheritRedirect(redirect, backStyle); - _borderInherit = new PaletteBorderInheritRedirect(redirect, borderStyle); - _contentInherit = new PaletteContentInheritRedirect(redirect, contentStyle); + _backInherit = new PaletteBackInheritRedirect(redirect!, backStyle); + _borderInherit = new PaletteBorderInheritRedirect(redirect!, borderStyle); + _contentInherit = new PaletteContentInheritRedirect(redirect!, contentStyle); // Create storage that maps onto the inherit instances Back = new PaletteBack(_backInherit, needPaint); @@ -62,9 +64,10 @@ public PaletteTabTripleRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -73,7 +76,7 @@ public PaletteTabTripleRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { _backInherit.SetRedirector(redirect); _borderInherit.SetRedirector(redirect); @@ -136,8 +139,9 @@ public void SetStyles(TabStyle tabStyle) PaletteContentStyle.TabCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(tabStyle.ToString()); break; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTools/PaletteTools.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTools/PaletteTools.cs index 7ca65ed8e..227526da3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTools/PaletteTools.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTools/PaletteTools.cs @@ -5,51 +5,51 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - public class PaletteTools - { - #region Properties - /// Gets the theme list. - /// The theme list. - public static List ThemeList1 => ThemeManager.SupportedInternalThemeNames.ToList(); - - #endregion - - #region Methods - /// Links the type of the palette to the correct theme style. - /// Name of the theme. - /// - public PaletteMode LinkPaletteType1(string themeName) - { - var cnvtr = new PaletteModeConverter(); - return (PaletteMode)cnvtr.ConvertFromString(themeName); - } - - /// Applies the theme. - /// The manager. - /// The palette mode. - /// The custom theme path. - public static void ApplyTheme(KryptonManager manager, PaletteMode paletteMode = PaletteMode.Microsoft365Blue, string customThemePath = "") - { - manager.GlobalPaletteMode = paletteMode; - - if (!string.IsNullOrWhiteSpace(customThemePath)) - { - var palette = new KryptonCustomPaletteBase(); - - palette.Import(customThemePath); - - manager.GlobalPalette = palette; - - manager.GlobalPaletteMode = PaletteMode.Custom; - } - } - #endregion - } + //public class PaletteTools + //{ + // #region Properties + // /// Gets the theme list. + // /// The theme list. + // public static List ThemeList1 => ThemeManager.SupportedInternalThemeNames.ToList(); + + // #endregion + + // #region Methods + // /// Links the type of the palette to the correct theme style. + // /// Name of the theme. + // /// + // public PaletteMode LinkPaletteType1(string themeName) + // { + // var cnvtr = new PaletteModeConverter(); + // return (PaletteMode)cnvtr.ConvertFromString(themeName); + // } + + // /// Applies the theme. + // /// The manager. + // /// The palette mode. + // /// The custom theme path. + // public static void ApplyTheme(KryptonManager manager, PaletteMode paletteMode = PaletteMode.Microsoft365Blue, string customThemePath = "") + // { + // manager.GlobalPaletteMode = paletteMode; + + // if (!string.IsNullOrWhiteSpace(customThemePath)) + // { + // var palette = new KryptonCustomPaletteBase(); + + // palette.Import(customThemePath); + + // manager.GlobalPalette = palette; + + // manager.GlobalPaletteMode = PaletteMode.Custom; + // } + // } + // #endregion + //} } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTriple.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTriple.cs index ed160ee25..6a206b967 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTriple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTriple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,15 +36,20 @@ public PaletteTriple(IPaletteTriple inherit) public PaletteTriple([DisallowNull] IPaletteTriple inherit, NeedPaintHandler? needPaint) { - Debug.Assert(inherit != null); + Debug.Assert(inherit is not null); // Store the provided paint notification delegate NeedPaint = needPaint; + + if (inherit is null) + { + throw new ArgumentNullException(nameof(inherit)); + } // Create storage that maps onto the inherit instances Back = new PaletteBack(inherit.PaletteBack, needPaint); - Border = new PaletteBorder(inherit.PaletteBorder, needPaint); - Content = new PaletteContent(inherit.PaletteContent, needPaint); + Border = new PaletteBorder(inherit.PaletteBorder!, needPaint); + Content = new PaletteContent(inherit.PaletteContent!, needPaint); } #endregion @@ -53,9 +58,10 @@ public PaletteTriple([DisallowNull] IPaletteTriple inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -66,8 +72,8 @@ public PaletteTriple([DisallowNull] IPaletteTriple inherit, public void SetInherit(IPaletteTriple inherit) { Back.SetInherit(inherit.PaletteBack); - Border.SetInherit(inherit.PaletteBorder); - Content.SetInherit(inherit.PaletteContent); + Border.SetInherit(inherit.PaletteBorder!); + Content.SetInherit(inherit.PaletteContent!); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImage.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImage.cs index ffcfadfd3..3cdcd7143 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImage.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImage.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,18 +33,20 @@ public PaletteTripleJustImage(IPaletteTriple inherit) /// /// Source for inheriting values. /// Delegate for notifying paint requests. - public PaletteTripleJustImage([DisallowNull] IPaletteTriple inherit, - NeedPaintHandler needPaint) + public PaletteTripleJustImage(IPaletteTriple inherit, + NeedPaintHandler? needPaint) { - Debug.Assert(inherit != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(inherit is not null); // Store the provided paint notification delegate NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Back = new PaletteBack(inherit.PaletteBack, needPaint); - Border = new PaletteBorder(inherit.PaletteBorder, needPaint); - Content = new PaletteContentJustImage(inherit.PaletteContent, needPaint); + Back = new PaletteBack(inherit!.PaletteBack, needPaint); + Border = new PaletteBorder(inherit!.PaletteBorder!, needPaint); + Content = new PaletteContentJustImage(inherit!.PaletteContent!, needPaint); } #endregion @@ -53,9 +55,10 @@ public PaletteTripleJustImage([DisallowNull] IPaletteTriple inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -66,8 +69,8 @@ public PaletteTripleJustImage([DisallowNull] IPaletteTriple inherit, public void SetInherit(IPaletteTriple inherit) { Back.SetInherit(inherit.PaletteBack); - Border.SetInherit(inherit.PaletteBorder); - Content.SetInherit(inherit.PaletteContent); + Border.SetInherit(inherit.PaletteBorder!); + Content.SetInherit(inherit.PaletteContent!); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImageRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImageRedirect.cs index d6faaf49d..a36623cf5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImageRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleJustImageRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,7 +38,7 @@ public PaletteTripleJustImageRedirect(PaletteBackStyle backStyle, : this(null, backStyle, borderStyle, contentStyle, null) { } - + /// /// Initialize a new instance of the PaletteTripleJustImageRedirect class. /// @@ -46,7 +46,7 @@ public PaletteTripleJustImageRedirect(PaletteBackStyle backStyle, /// Initial background style. /// Initial border style. /// Initial content style. - public PaletteTripleJustImageRedirect(PaletteRedirect? redirect, + public PaletteTripleJustImageRedirect(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle) @@ -66,11 +66,11 @@ public PaletteTripleJustImageRedirect(PaletteRedirect? redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { // Store the provided paint notification delegate NeedPaint = needPaint; - + // Store the inherit instances _backInherit = new PaletteBackInheritRedirect(redirect, backStyle); _borderInherit = new PaletteBorderInheritRedirect(redirect, borderStyle); @@ -88,9 +88,10 @@ public PaletteTripleJustImageRedirect(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -99,7 +100,7 @@ public PaletteTripleJustImageRedirect(PaletteRedirect? redirect, /// Gets the redirector instance. /// /// Return the currently used redirector. - public PaletteRedirect? GetRedirector() => _backInherit.GetRedirector(); + public PaletteRedirect GetRedirector() => _backInherit.GetRedirector(); #endregion @@ -108,7 +109,7 @@ public PaletteTripleJustImageRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { _backInherit.SetRedirector(redirect); _borderInherit.SetRedirector(redirect); @@ -236,8 +237,9 @@ public void SetStyles(ButtonStyle buttonStyle) PaletteContentStyle.ButtonCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(buttonStyle.ToString()); break; } } @@ -296,8 +298,9 @@ public void SetStyles(HeaderStyle headerStyle) PaletteContentStyle.HeaderCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(headerStyle.ToString()); break; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetric.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetric.cs index d5fbce03c..c585b282d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetric.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetric.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,10 +32,10 @@ public PaletteTripleMetric([DisallowNull] PaletteTripleMetricRedirect inherit, NeedPaintHandler needPaint) : base(inherit, needPaint) { - Debug.Assert(inherit != null); + Debug.Assert(inherit is not null); // Remember inheritance for metric values - _inherit = inherit; + _inherit = inherit ?? throw new ArgumentNullException(nameof(inherit)); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetricRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetricRedirect.cs index 148760577..0fb6f3d57 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetricRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleMetricRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteTripleMetricRedirect : PaletteTripleRedirect, IPaletteMetric { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; #endregion #region Identity @@ -31,7 +31,7 @@ public class PaletteTripleMetricRedirect : PaletteTripleRedirect, /// Style for the border. /// Style for the content. /// Delegate for notifying paint requests. - public PaletteTripleMetricRedirect([DisallowNull] PaletteRedirect redirect, + public PaletteTripleMetricRedirect(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, @@ -42,10 +42,12 @@ public PaletteTripleMetricRedirect([DisallowNull] PaletteRedirect redirect, contentStyle, needPaint) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); // Remember the redirect reference - _redirect = redirect; + _redirect = redirect!; } #endregion @@ -54,7 +56,7 @@ public PaletteTripleMetricRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public override void SetRedirector(PaletteRedirect? redirect) + public override void SetRedirector(PaletteRedirect redirect) { base.SetRedirector(redirect); _redirect = redirect; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleOverride.cs index 3e87e96e5..cb37a6a8f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -51,8 +51,8 @@ public PaletteTripleOverride([DisallowNull] IPaletteTriple normalTriple, // Create the triple override instances _overrideBack = new PaletteBackInheritOverride(normalTriple.PaletteBack, overrideTriple.PaletteBack); - _overrideBorder = new PaletteBorderInheritOverride(normalTriple.PaletteBorder, overrideTriple.PaletteBorder); - _overrideContent = new PaletteContentInheritOverride(normalTriple.PaletteContent, overrideTriple.PaletteContent); + _overrideBorder = new PaletteBorderInheritOverride(normalTriple.PaletteBorder!, overrideTriple.PaletteBorder!); + _overrideContent = new PaletteContentInheritOverride(normalTriple.PaletteContent!, overrideTriple.PaletteContent!); // Do not apply an override by default Apply = false; @@ -65,7 +65,7 @@ public PaletteTripleOverride([DisallowNull] IPaletteTriple normalTriple, #region SetPalettes /// - /// Update the the normal and override palettes. + /// Update the normal and override palettes. /// /// New normal palette. /// New override palette. @@ -73,8 +73,8 @@ public void SetPalettes(IPaletteTriple normalTriple, IPaletteTriple overrideTriple) { _overrideBack.SetPalettes(normalTriple.PaletteBack, overrideTriple.PaletteBack); - _overrideBorder.SetPalettes(normalTriple.PaletteBorder, overrideTriple.PaletteBorder); - _overrideContent.SetPalettes(normalTriple.PaletteContent, overrideTriple.PaletteContent); + _overrideBorder.SetPalettes(normalTriple.PaletteBorder!, overrideTriple.PaletteBorder!); + _overrideContent.SetPalettes(normalTriple.PaletteContent!, overrideTriple.PaletteContent!); } #endregion @@ -138,12 +138,12 @@ public PaletteState OverrideState /// /// Gets the border palette. /// - public IPaletteBorder? PaletteBorder => _overrideBorder; + public IPaletteBorder PaletteBorder => _overrideBorder; /// /// Gets the border palette. /// - public IPaletteContent? PaletteContent => _overrideContent; + public IPaletteContent PaletteContent => _overrideContent; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleRedirect.cs index 5c70cc954..857cdf8b4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,7 +38,7 @@ public PaletteTripleRedirect(PaletteBackStyle backStyle, : this(null, backStyle, borderStyle, contentStyle, null) { } - + /// /// Initialize a new instance of the PaletteTripleRedirect class. /// @@ -46,7 +46,7 @@ public PaletteTripleRedirect(PaletteBackStyle backStyle, /// Initial background style. /// Initial border style. /// Initial content style. - public PaletteTripleRedirect(PaletteRedirect? redirect, + public PaletteTripleRedirect(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle) @@ -66,11 +66,11 @@ public PaletteTripleRedirect(PaletteRedirect? redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { // Store the provided paint notification delegate NeedPaint = needPaint; - + // Store the inherit instances _backInherit = new PaletteBackInheritRedirect(redirect, backStyle); _borderInherit = new PaletteBorderInheritRedirect(redirect, borderStyle); @@ -88,9 +88,10 @@ public PaletteTripleRedirect(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -99,7 +100,7 @@ public PaletteTripleRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { _backInherit.SetRedirector(redirect); _borderInherit.SetRedirector(redirect); @@ -227,8 +228,9 @@ public void SetStyles(ButtonStyle buttonStyle) PaletteContentStyle.ButtonCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(buttonStyle.ToString()); break; } } @@ -287,8 +289,9 @@ public void SetStyles(HeaderStyle headerStyle) PaletteContentStyle.HeaderCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(headerStyle.ToString()); break; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleToPalette.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleToPalette.cs index 3b21f5ecf..5498f4e1c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleToPalette.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Base/PaletteTriple/PaletteTripleToPalette.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,7 @@ public class PaletteTripleToPalette : IPaletteTriple /// Initial background style. /// Initial border style. /// Initial content style. - public PaletteTripleToPalette(PaletteBase? palette, + public PaletteTripleToPalette(PaletteBase palette, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle) @@ -163,8 +163,9 @@ public void SetStyles(ButtonStyle buttonStyle) PaletteContentStyle.ButtonCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(buttonStyle.ToString()); break; } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Base/PaletteBase.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Base/PaletteBase.cs index 6f128c773..0754e5667 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Base/PaletteBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Base/PaletteBase.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -20,11 +18,9 @@ public abstract class PaletteBase : Component { #region Instance Fields - private bool _useKryptonFileDialogs; - private BasePaletteType _basePaletteType; private Padding? _inputControlPadding; private PaletteDragFeedback _dragFeedback; - private string _themeName; + private Image[] _toolBarImages; private readonly Font _defaultFontStyle = new Font("Segoe UI", 9f, FontStyle.Regular); @@ -61,9 +57,9 @@ public abstract class PaletteBase : Component public event EventHandler? PalettePaint; /// - /// Occurs when the AllowFormChrome setting changes. + /// Occurs when the UseThemeFormChromeBorderWidth setting changes. /// - public event EventHandler? AllowFormChromeChanged; + public event EventHandler? UseThemeFormChromeBorderWidthChanged; /// /// Occurs when the BasePalette/BasePaletteMode setting changes. @@ -91,20 +87,36 @@ protected PaletteBase() // Inherit means we need to calculate the value next time it is requested _dragFeedback = PaletteDragFeedback.Inherit; - _themeName = string.Empty; - - _useKryptonFileDialogs = true; - - _baseFont = _defaultFontStyle; + BaseFont = _defaultFontStyle; } #endregion - #region AllowFormChrome + #region UseThemeFormChromeBorderWidth + private InheritBool _allowFormChrome = InheritBool.True; + /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. + /// Gets or sets a value indicating if KryptonForm instances should UseThemeFormChromeBorderWidth. /// /// InheritBool value. - public abstract InheritBool GetAllowFormChrome(); + [KryptonPersist(false)] + [Category(@"Visuals")] + [Description(@"Should KryptonForm instances UseThemeFormChromeBorderWidth.")] + [DefaultValue(InheritBool.Inherit)] + public virtual InheritBool UseThemeFormChromeBorderWidth + { + get => _allowFormChrome; + + set + { + if (_allowFormChrome != value) + { + _allowFormChrome = value; + OnUseThemeFormChromeBorderWidthChanged(this, EventArgs.Empty); + } + } + } + private void ResetUseThemeFormChromeBorderWidth() => UseThemeFormChromeBorderWidth = InheritBool.True; + private bool ShouldSerializeUseThemeFormChromeBorderWidth() => UseThemeFormChromeBorderWidth != InheritBool.True; #endregion #region Renderer @@ -112,7 +124,7 @@ protected PaletteBase() /// Gets the renderer to use for this palette. /// /// Renderer to use for drawing palette settings. - public abstract IRenderer? GetRenderer(); + public abstract IRenderer GetRenderer(); #endregion #region Back @@ -374,7 +386,7 @@ protected PaletteBase() /// Content style. /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state); + public abstract Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state); /// /// Gets the font for the short text by generating a new font instance. @@ -382,7 +394,7 @@ protected PaletteBase() /// Content style. /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state); + public abstract Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state); /// /// Gets the rendering hint for the short text. @@ -510,7 +522,7 @@ protected PaletteBase() /// Content style. /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state); + public abstract Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state); /// /// Gets the font for the long text by generating a new font instance. @@ -518,7 +530,7 @@ protected PaletteBase() /// Content style. /// Palette value should be applicable to this state. /// Font value. - public abstract Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state); + public abstract Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state); /// /// Gets the rendering hint for the long text. @@ -799,7 +811,7 @@ protected PaletteBase() default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -821,7 +833,7 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s switch (style) { case PaletteButtonSpecStyle.Generic: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteButtonSpecStyle.Close: case PaletteButtonSpecStyle.Context: case PaletteButtonSpecStyle.Next: @@ -860,11 +872,12 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s case PaletteButtonSpecStyle.PrintPreview: case PaletteButtonSpecStyle.Print: case PaletteButtonSpecStyle.QuickPrint: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); - return Color.Empty; + DebugTools.NotImplemented(style.ToString()); + return GlobalStaticValues.EMPTY_COLOR; } } @@ -873,7 +886,7 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s /// /// Style of button spec. /// String value. - public virtual string? GetButtonSpecShortText(PaletteButtonSpecStyle style) + public virtual string GetButtonSpecShortText(PaletteButtonSpecStyle style) { switch (style) { @@ -919,7 +932,7 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -928,7 +941,7 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s /// /// Style of button spec. /// String value. - public virtual string? GetButtonSpecLongText(PaletteButtonSpecStyle style) + public virtual string GetButtonSpecLongText(PaletteButtonSpecStyle style) { switch (style) { @@ -974,7 +987,7 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -983,7 +996,7 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s /// /// Style of button spec. /// String value. - public virtual string? GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) + public virtual string GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) { switch (style) { @@ -1038,7 +1051,7 @@ public virtual Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle s default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1074,7 +1087,7 @@ public virtual Color GetButtonSpecColorMap(PaletteButtonSpecStyle style) case PaletteButtonSpecStyle.PrintPreview: case PaletteButtonSpecStyle.Print: case PaletteButtonSpecStyle.QuickPrint: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteButtonSpecStyle.Close: case PaletteButtonSpecStyle.Context: case PaletteButtonSpecStyle.Next: @@ -1094,7 +1107,8 @@ public virtual Color GetButtonSpecColorMap(PaletteButtonSpecStyle style) default: // Should never happen! Debug.Assert(false); - return Color.Empty; + DebugTools.NotImplemented(style.ToString()); + return GlobalStaticValues.EMPTY_COLOR; } } @@ -1122,7 +1136,7 @@ public virtual Color GetButtonSpecColorTransparent(PaletteButtonSpecStyle style) case PaletteButtonSpecStyle.PrintPreview: case PaletteButtonSpecStyle.Print: case PaletteButtonSpecStyle.QuickPrint: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteButtonSpecStyle.Close: case PaletteButtonSpecStyle.Context: case PaletteButtonSpecStyle.Next: @@ -1149,7 +1163,8 @@ public virtual Color GetButtonSpecColorTransparent(PaletteButtonSpecStyle style) default: // Should never happen! Debug.Assert(false); - return Color.Empty; + DebugTools.NotImplemented(style.ToString()); + return GlobalStaticValues.EMPTY_COLOR; } } @@ -1206,6 +1221,7 @@ public virtual PaletteButtonStyle GetButtonSpecStyle(PaletteButtonSpecStyle styl default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); return PaletteButtonStyle.ButtonSpec; } } @@ -1261,6 +1277,7 @@ public virtual HeaderLocation GetButtonSpecLocation(PaletteButtonSpecStyle style default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); return HeaderLocation.PrimaryHeader; } } @@ -1316,6 +1333,7 @@ public virtual PaletteRelativeEdgeAlign GetButtonSpecEdge(PaletteButtonSpecStyle default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); return PaletteRelativeEdgeAlign.Far; } } @@ -1372,6 +1390,7 @@ public virtual PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSp default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); return PaletteButtonOrientation.Auto; } } @@ -1476,6 +1495,27 @@ public virtual PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSp /// Color value. public abstract Color GetRibbonMinimizeBarLight(PaletteState state); + /// + /// Gets the gradient dark rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public abstract Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state); + + /// + /// Gets the gradient light rafting color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public abstract Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state); + + /// + /// Gets the solid color for the tab background. + /// + /// Palette value should be applicable to this state. + /// Color value. + public abstract Color GetRibbonTabRowBackgroundSolidColor(PaletteState state); + /// /// Gets the color for the tab separator. /// @@ -1517,6 +1557,31 @@ public virtual PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSp /// Palette value should be applicable to this state. /// Color value. public abstract Color GetRibbonQATButtonLight(PaletteState state); + + /// Gets the ribbon tab row gradient first color. + /// Palette value should be applicable to this state. + /// The gradient first color. + public abstract Color GetRibbonTabRowGradientColor1(PaletteState state); + + /// Gets the ribbon app button dark color. + /// Palette value should be applicable to this state. + /// The app button dark color. + public abstract Color GetRibbonFileAppTabBottomColor(PaletteState state); + + /// Gets the ribbon app button light color. + /// Palette value should be applicable to this state. + /// The app button light color. + public abstract Color GetRibbonFileAppTabTopColor(PaletteState state); + + /// Gets the ribbon app button text color. + /// Palette value should be applicable to this state. + /// The app button text color. + public abstract Color GetRibbonFileAppTabTextColor(PaletteState state); + + /// Gets the ribbon tab row gradient rafting angle. + /// Palette value should be applicable to this state. + /// The gradient rafting angle. + public abstract float GetRibbonTabRowGradientRaftingAngle(PaletteState state); #endregion #region RibbonBack @@ -1570,6 +1635,7 @@ public virtual PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSp #endregion #region RibbonText + /// /// Gets the tab color for the item text. /// @@ -1577,6 +1643,7 @@ public virtual PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSp /// Palette value should be applicable to this state. /// Color value. public abstract Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state); + #endregion #region ElementColor @@ -1695,57 +1762,46 @@ public virtual PaletteDragFeedback GetDragDropFeedback() #region Public - /// Gets or sets a value indicating whether [use krypton file dialogs]. - /// true if [use krypton file dialogs]; otherwise, false. - [DefaultValue(false), Description(@"Use Krypton style file dialogs for exporting/importing palettes.")] - public bool UseKryptonFileDialogs { get => _useKryptonFileDialogs; set => _useKryptonFileDialogs = value; } - - /// Gets and sets the base font size used when defining fonts. - [Description(@"Gets and sets the base font size used when defining fonts.")] - public float BaseFontSize - { - get => _baseFont.Size; - - set - { - if (value <= 0) - { - value = _defaultFontStyle.Size; - } - - // Is there a change in value? - if (_baseFont.Size != value) - { - BaseFont = new Font(_baseFont.Name, value, _baseFont.Style); - } - } - } - /// Gets or sets the base palette font. /// The base palette font. - [DisallowNull, Description(@"Gets or sets the base palette font.")] + [Description(@"Gets or sets the base palette font.")] + [DisallowNull] public Font BaseFont { get => _baseFont; - set - { + set + { _baseFont = value; DefineFonts(); // Call an event to force repaint style things OnPalettePaint(this, new PaletteLayoutEventArgs(true, false)); } } + internal void ResetBaseFont() => BaseFont = _defaultFontStyle; + internal bool ShouldSerializeBaseFont() => !Equals(BaseFont, _defaultFontStyle); /// Gets or sets the name of the theme. /// The name of the theme. - [DisallowNull, Description(@"Gets or sets the name of the theme.")] - public string ThemeName { get => _themeName; set => _themeName = value; } + [Description(@"Gets or sets the name of the theme.")] + [DisallowNull] + public string ThemeName { get; set; } /// Gets or sets the type of the base palette. /// The type of the base palette. [Description(@"Gets or sets the type of the base palette.")] - public BasePaletteType BasePaletteType { get => _basePaletteType; set => _basePaletteType = value; } + public BasePaletteType BasePaletteType { get; set; } + + #endregion + + #region ToolBar Images + + public virtual Image[] ToolBarImages(Image[] toolBarImages) + { + _toolBarImages = toolBarImages; + + return _toolBarImages; + } #endregion @@ -1764,7 +1820,7 @@ protected virtual void DefineFonts() Header1ShortFont = new Font(baseFontName, baseFontSize + 4.5f, FontStyle.Bold); Header2ShortFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); - HeaderFormFont = new Font(baseFontName, SystemFonts.CaptionFont.SizeInPoints, FontStyle.Regular); + HeaderFormFont = new Font(baseFontName, SystemFonts.CaptionFont!.SizeInPoints, FontStyle.Regular); Header1LongFont = new Font(baseFontName, baseFontSize + 1.5f, FontStyle.Regular); Header2LongFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); ButtonFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); @@ -1880,7 +1936,7 @@ public static Color FadedColor(Color baseColor) return hsl.Color; } - #endregion + #endregion #region InputControlPadding /// @@ -1970,14 +2026,14 @@ protected virtual void OnPalettePaint(object sender, PaletteLayoutEventArgs e) = #endregion - #region OnAllowFormChromeChanged + #region OnUseThemeFormChromeBorderWidthChanged /// - /// Raises the AllowFormChromeChanged event. + /// Raises the UseThemeFormChromeBorderWidthChanged event. /// /// Source of the event. /// An EventArgs containing event data. - protected virtual void OnAllowFormChromeChanged(object sender, EventArgs e) => AllowFormChromeChanged?.Invoke(this, e); + protected virtual void OnUseThemeFormChromeBorderWidthChanged(object sender, EventArgs e) => UseThemeFormChromeBorderWidthChanged?.Invoke(this, e); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Enumerations/PaletteEnumerations.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Enumerations/PaletteEnumerations.cs index a65437199..c6ded97f5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Enumerations/PaletteEnumerations.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Enumerations/PaletteEnumerations.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -268,7 +268,7 @@ internal enum SchemeContextMenuColors { MenuItemText = 1, ContextMenuMargin = 2, - ContextMenuInner = 3, + ContextMenuInner = 3 } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Bases/PaletteMicrosoft365Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Bases/PaletteMicrosoft365Base.cs index 4cb900f7b..af9ce8006 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Bases/PaletteMicrosoft365Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Bases/PaletteMicrosoft365Base.cs @@ -1,12 +1,12 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion @@ -65,7 +65,7 @@ public abstract class PaletteMicrosoft365Base : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -84,8 +84,8 @@ public abstract class PaletteMicrosoft365Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -164,34 +164,34 @@ public abstract class PaletteMicrosoft365Base : PaletteBase #region Color Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(237, 201, 88), // Button, Tracking, Border 1 Color.FromArgb(243, 213, 73), // Button, Tracking, Border 2 @@ -199,10 +199,10 @@ public abstract class PaletteMicrosoft365Base : PaletteBase Color.FromArgb(194, 158, 71), // Button, Pressed, Border 2 Color.FromArgb(194, 138, 48), // Button, Checked, Border 1 Color.FromArgb(194, 164, 77) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(248, 225, 135), // Button, Tracking, Back 1 @@ -213,7 +213,7 @@ public abstract class PaletteMicrosoft365Base : PaletteBase Color.FromArgb(255, 244, 128), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; /*private static readonly Color[] _appButtonNormal = new Color[] { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; private static readonly Color[] _appButtonTrack = new Color[] { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; private static readonly Color[] _appButtonPressed = new Color[] { Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) }; @@ -242,17 +242,17 @@ public abstract class PaletteMicrosoft365Base : PaletteBase #endregion #region Variables - private KryptonColorTable365 _table; + protected KryptonColorTable365? Table { get; set; } - private readonly Color[] _ribbonColours; + private readonly Color[] _ribbonColors; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion - #region Constructor + #region Constructor /// /// Initializes a new instance of the class. /// @@ -264,7 +264,7 @@ public abstract class PaletteMicrosoft365Base : PaletteBase protected PaletteMicrosoft365Base([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); @@ -273,7 +273,7 @@ protected PaletteMicrosoft365Base([DisallowNull] Color[] schemeColours, if (schemeColours != null) { - _ribbonColours = schemeColours; + _ribbonColors = schemeColours; } if (checkBoxList != null) @@ -300,18 +300,7 @@ protected PaletteMicrosoft365Base([DisallowNull] Color[] schemeColours, } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// - /// InheritBool value. - /// - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - - #region Renderer + #region Renderer /// /// Gets the renderer to use for this palette. /// @@ -390,7 +379,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -406,31 +395,31 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridListPressed1], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridListSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridListNormal1] + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridListPressed1], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridListSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridListNormal1] }; case PaletteBackStyle.GridHeaderColumnSheet: return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetColPressed1], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetColSelected1], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetColNormal1] + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetColPressed1], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetColSelected1], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetColNormal1] }; case PaletteBackStyle.GridHeaderRowSheet: return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowPressed], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowNormal] + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowPressed], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowNormal] }; case PaletteBackStyle.GridDataCellList: case PaletteBackStyle.GridDataCellCustom1: case PaletteBackStyle.GridDataCellCustom2: case PaletteBackStyle.GridDataCellCustom3: - return state == PaletteState.CheckedNormal ? _ribbonColours[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; + return state == PaletteState.CheckedNormal ? _ribbonColors[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; case PaletteBackStyle.GridDataCellSheet: return state == PaletteState.CheckedNormal ? _buttonBackColors[6] : SystemColors.Window; @@ -445,17 +434,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -482,7 +471,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -490,38 +479,38 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive1] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive1]; + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive1] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive1]; case PaletteBackStyle.HeaderCalendar: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] - : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2]; case PaletteBackStyle.HeaderPrimary: case PaletteBackStyle.HeaderCustom1: case PaletteBackStyle.HeaderCustom2: case PaletteBackStyle.HeaderCustom3: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1]; case PaletteBackStyle.HeaderDockInactive: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1]; case PaletteBackStyle.HeaderDockActive: return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[6]; case PaletteBackStyle.HeaderSecondary: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderSecondaryBack1]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderSecondaryBack1]; case PaletteBackStyle.SeparatorHighInternalProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighInternalBorder1]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighInternalBorder1]; case PaletteBackStyle.SeparatorHighProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighBorder1]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighBorder1]; case PaletteBackStyle.SeparatorLowProfile: case PaletteBackStyle.SeparatorCustom1: @@ -537,18 +526,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.GridBackgroundCustom1: case PaletteBackStyle.GridBackgroundCustom2: case PaletteBackStyle.GridBackgroundCustom3: - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + return _ribbonColors[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.PanelAlternate: - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + return _ribbonColors[(int)SchemeOfficeColors.PanelAlternative]; case PaletteBackStyle.PanelRibbonInactive: - return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight]; + return _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveLight]; case PaletteBackStyle.FormMain: case PaletteBackStyle.FormCustom1: case PaletteBackStyle.FormCustom2: case PaletteBackStyle.FormCustom3: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderActiveLight]; + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveLight] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActiveLight]; case PaletteBackStyle.ControlClient: case PaletteBackStyle.ControlAlternate: @@ -563,18 +552,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.InputControlCustom3: if (state == PaletteState.Disabled) { - return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; + return _ribbonColors[(int)SchemeOfficeColors.InputControlBackDisabled]; } else { return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) - ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] - : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; + ? _ribbonColors[(int)SchemeOfficeColors.InputControlBackNormal] + : _ribbonColors[(int)SchemeOfficeColors.InputControlBackInactive]; } case PaletteBackStyle.ControlRibbon: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; case PaletteBackStyle.ControlRibbonAppMenu: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack1]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonBack1]; case PaletteBackStyle.ControlToolTip: return _toolTipBack1; case PaletteBackStyle.ContextMenuOuter: @@ -589,30 +578,30 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ContextMenuInner: return _contextMenuBack; case PaletteBackStyle.ContextMenuHeading: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingBack]; + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingBack]; case PaletteBackStyle.ContextMenuItemImageColumn: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuImageColumn]; + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuImageColumn]; case PaletteBackStyle.ContextMenuItemImage: return _contextMenuImageBackChecked; case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], - PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Checked], + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Track], + PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Pressed], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -631,18 +620,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ContextMenuItemHighlight: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1] : _disabledBack, + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[6], + ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -650,13 +639,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) return state switch { PaletteState.Disabled => _buttonBackColors[1], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorTrack1], - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorPressed1], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked1], - _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorTrack1], + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorPressed1], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorChecked1], + _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -671,7 +660,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -687,31 +676,31 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridListPressed2], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridListSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridListNormal2] + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridListPressed2], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridListSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridListNormal2] }; case PaletteBackStyle.GridHeaderColumnSheet: return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetColPressed2], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetColSelected2], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetColNormal2] + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetColPressed2], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetColSelected2], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetColNormal2] }; case PaletteBackStyle.GridHeaderRowSheet: return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowPressed], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowNormal] + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowPressed], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowNormal] }; case PaletteBackStyle.GridDataCellList: case PaletteBackStyle.GridDataCellCustom1: case PaletteBackStyle.GridDataCellCustom2: case PaletteBackStyle.GridDataCellCustom3: - return state == PaletteState.CheckedNormal ? _ribbonColours[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; + return state == PaletteState.CheckedNormal ? _ribbonColors[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; case PaletteBackStyle.GridDataCellSheet: return state == PaletteState.CheckedNormal ? _buttonBackColors[7] : SystemColors.Window; @@ -725,59 +714,59 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive2] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive2]; + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive2] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive2]; case PaletteBackStyle.HeaderCalendar: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] - : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2]; case PaletteBackStyle.HeaderPrimary: case PaletteBackStyle.HeaderCustom1: case PaletteBackStyle.HeaderCustom2: case PaletteBackStyle.HeaderCustom3: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2]; case PaletteBackStyle.HeaderDockInactive: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack2]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack2]; case PaletteBackStyle.HeaderDockActive: return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[7]; case PaletteBackStyle.HeaderSecondary: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderSecondaryBack2]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderSecondaryBack2]; case PaletteBackStyle.SeparatorHighInternalProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighInternalBorder2]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighInternalBorder2]; case PaletteBackStyle.SeparatorHighProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighBorder2]; + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighBorder2]; case PaletteBackStyle.SeparatorLowProfile: case PaletteBackStyle.SeparatorCustom1: @@ -793,18 +782,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.GridBackgroundCustom1: case PaletteBackStyle.GridBackgroundCustom2: case PaletteBackStyle.GridBackgroundCustom3: - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + return _ribbonColors[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.PanelAlternate: - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + return _ribbonColors[(int)SchemeOfficeColors.PanelAlternative]; case PaletteBackStyle.PanelRibbonInactive: - return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark]; + return _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveDark]; case PaletteBackStyle.FormMain: case PaletteBackStyle.FormCustom1: case PaletteBackStyle.FormCustom2: case PaletteBackStyle.FormCustom3: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderActiveDark]; + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveDark] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActiveDark]; case PaletteBackStyle.ControlClient: case PaletteBackStyle.ControlAlternate: @@ -819,20 +808,20 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.InputControlCustom3: if (state == PaletteState.Disabled) { - return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; + return _ribbonColors[(int)SchemeOfficeColors.InputControlBackDisabled]; } else { return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) - ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] - : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; + ? _ribbonColors[(int)SchemeOfficeColors.InputControlBackNormal] + : _ribbonColors[(int)SchemeOfficeColors.InputControlBackInactive]; } case PaletteBackStyle.ControlRibbon: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; case PaletteBackStyle.ControlRibbonAppMenu: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack2]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonBack2]; case PaletteBackStyle.ControlToolTip: - return _ribbonColours[(int)SchemeOfficeColors.ToolTipBottom]; + return _ribbonColors[(int)SchemeOfficeColors.ToolTipBottom]; case PaletteBackStyle.ContextMenuOuter: return _contextMenuBack; case PaletteBackStyle.ContextMenuSeparator: @@ -845,30 +834,30 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ContextMenuInner: return _contextMenuBack; case PaletteBackStyle.ContextMenuHeading: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingBack]; + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingBack]; case PaletteBackStyle.ContextMenuItemImageColumn: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuImageColumn]; + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuImageColumn]; case PaletteBackStyle.ContextMenuItemImage: return _contextMenuImageBackChecked; case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], - PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Checked], + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Track], + PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Pressed], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -887,20 +876,20 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ContextMenuItemHighlight: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] -: _buttonBackColors[7], + ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2] + : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -908,13 +897,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) return state switch { PaletteState.Disabled => _buttonBackColors[1], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorTrack2], - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorPressed2], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked2], - _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorTrack2], + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorPressed2], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorChecked2], + _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -968,7 +957,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -978,7 +967,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1049,19 +1038,7 @@ or PaletteBackStyle.GridBackgroundCustom3 public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) { // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return null; - } - - return style switch - { - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => null, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; + return null; } /// @@ -1078,14 +1055,7 @@ public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, Pale return PaletteImageStyle.Inherit; } - return style switch - { - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteImageStyle.Tile, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; + return PaletteImageStyle.Tile; } /// @@ -1102,14 +1072,7 @@ public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, return PaletteRectangleAlign.Inherit; } - return style switch - { - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; + return PaletteRectangleAlign.Local; } #endregion @@ -1222,40 +1185,40 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { PaletteState.Disabled => _disabledBorder, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, - PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1265,68 +1228,68 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], - PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], - PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], +? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], + PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery - ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] + ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { PaletteState.Disabled => _buttonBorderColors[0], - PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, - PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1350,40 +1313,40 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { PaletteState.Disabled => _disabledBorder, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, - PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1393,66 +1356,66 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], - PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], - PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], +? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], + PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery - ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] + ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[6], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { PaletteState.Disabled => _buttonBorderColors[0], - PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, - PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1557,8 +1520,66 @@ public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) return style switch { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ContextMenuInner => 0, - PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => 1, + PaletteBorderStyle.SeparatorLowProfile + or PaletteBorderStyle.SeparatorHighInternalProfile + or PaletteBorderStyle.SeparatorHighProfile + or PaletteBorderStyle.SeparatorCustom1 + or PaletteBorderStyle.SeparatorCustom2 + or PaletteBorderStyle.SeparatorCustom3 + or PaletteBorderStyle.ContextMenuInner => 0, + PaletteBorderStyle.ControlClient + or PaletteBorderStyle.ControlAlternate + or PaletteBorderStyle.ControlGroupBox + or PaletteBorderStyle.ControlToolTip + or PaletteBorderStyle.ControlRibbon + or PaletteBorderStyle.ControlRibbonAppMenu + or PaletteBorderStyle.ControlCustom1 + or PaletteBorderStyle.ControlCustom2 + or PaletteBorderStyle.ControlCustom3 + or PaletteBorderStyle.ContextMenuOuter + or PaletteBorderStyle.ContextMenuHeading + or PaletteBorderStyle.ContextMenuSeparator + or PaletteBorderStyle.ContextMenuItemSplit + or PaletteBorderStyle.ContextMenuItemImageColumn + or PaletteBorderStyle.ContextMenuItemImage + or PaletteBorderStyle.ContextMenuItemHighlight + or PaletteBorderStyle.InputControlStandalone + or PaletteBorderStyle.InputControlRibbon + or PaletteBorderStyle.InputControlCustom1 + or PaletteBorderStyle.InputControlCustom2 + or PaletteBorderStyle.InputControlCustom3 + or PaletteBorderStyle.FormMain + or PaletteBorderStyle.FormCustom1 + or PaletteBorderStyle.FormCustom2 + or PaletteBorderStyle.FormCustom3 + or PaletteBorderStyle.HeaderPrimary + or PaletteBorderStyle.HeaderDockInactive + or PaletteBorderStyle.HeaderDockActive + or PaletteBorderStyle.HeaderCalendar + or PaletteBorderStyle.HeaderSecondary + or PaletteBorderStyle.HeaderForm + or PaletteBorderStyle.HeaderCustom1 + or PaletteBorderStyle.HeaderCustom2 + or PaletteBorderStyle.HeaderCustom3 + or PaletteBorderStyle.TabHighProfile + or PaletteBorderStyle.TabStandardProfile + or PaletteBorderStyle.TabLowProfile + or PaletteBorderStyle.TabOneNote + or PaletteBorderStyle.TabDock + or PaletteBorderStyle.TabDockAutoHidden + or PaletteBorderStyle.TabCustom1 + or PaletteBorderStyle.TabCustom2 + or PaletteBorderStyle.TabCustom3 + or PaletteBorderStyle.ButtonStandalone + or PaletteBorderStyle.ButtonGallery + or PaletteBorderStyle.ButtonAlternate + or PaletteBorderStyle.ButtonLowProfile + or PaletteBorderStyle.ButtonBreadCrumb + or PaletteBorderStyle.ButtonListItem + or PaletteBorderStyle.ButtonCommand + or PaletteBorderStyle.ButtonButtonSpec + or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 + or PaletteBorderStyle.GridDataCellCustom3 => 1, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1574,7 +1595,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1679,7 +1700,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1772,12 +1793,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1793,12 +1814,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1814,12 +1835,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1830,7 +1851,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1869,7 +1890,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -1976,9 +1997,81 @@ public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle st return style switch { - PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, + PaletteContentStyle.HeaderForm + or PaletteContentStyle.HeaderPrimary + or PaletteContentStyle.HeaderDockInactive + or PaletteContentStyle.HeaderDockActive + or PaletteContentStyle.HeaderSecondary + or PaletteContentStyle.HeaderCustom1 + or PaletteContentStyle.HeaderCustom2 + or PaletteContentStyle.HeaderCustom3 + or PaletteContentStyle.ButtonNavigatorStack + or PaletteContentStyle.ButtonNavigatorOverflow + or PaletteContentStyle.ButtonListItem + or PaletteContentStyle.ButtonCommand + or PaletteContentStyle.LabelNormalControl + or PaletteContentStyle.LabelBoldControl + or PaletteContentStyle.LabelItalicControl + or PaletteContentStyle.LabelTitleControl + or PaletteContentStyle.LabelNormalPanel + or PaletteContentStyle.LabelBoldPanel + or PaletteContentStyle.LabelItalicPanel + or PaletteContentStyle.LabelTitlePanel + or PaletteContentStyle.LabelGroupBoxCaption + or PaletteContentStyle.LabelCustom1 + or PaletteContentStyle.LabelCustom2 + or PaletteContentStyle.LabelCustom3 + or PaletteContentStyle.LabelToolTip + or PaletteContentStyle.LabelSuperTip + or PaletteContentStyle.LabelKeyTip + or PaletteContentStyle.ContextMenuHeading + or PaletteContentStyle.ContextMenuItemImage + or PaletteContentStyle.ContextMenuItemTextStandard + or PaletteContentStyle.ContextMenuItemTextAlternate + or PaletteContentStyle.GridHeaderColumnList + or PaletteContentStyle.GridHeaderColumnCustom1 + or PaletteContentStyle.GridHeaderColumnCustom2 + or PaletteContentStyle.GridHeaderColumnCustom3 + or PaletteContentStyle.GridHeaderRowList + or PaletteContentStyle.GridHeaderRowSheet + or PaletteContentStyle.GridHeaderRowCustom1 + or PaletteContentStyle.GridHeaderRowCustom2 + or PaletteContentStyle.GridHeaderRowCustom3 + or PaletteContentStyle.GridDataCellList + or PaletteContentStyle.GridDataCellSheet + or PaletteContentStyle.GridDataCellCustom1 + or PaletteContentStyle.GridDataCellCustom2 + or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.HeaderCalendar => PaletteRelativeAlign.Center, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, + PaletteContentStyle.InputControlStandalone + or PaletteContentStyle.InputControlRibbon + or PaletteContentStyle.InputControlCustom1 + or PaletteContentStyle.InputControlCustom2 + or PaletteContentStyle.InputControlCustom3 + or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Near, + PaletteContentStyle.TabHighProfile + or PaletteContentStyle.TabStandardProfile + or PaletteContentStyle.TabLowProfile + or PaletteContentStyle.TabOneNote + or PaletteContentStyle.TabDock + or PaletteContentStyle.TabDockAutoHidden + or PaletteContentStyle.TabCustom1 + or PaletteContentStyle.TabCustom2 + or PaletteContentStyle.TabCustom3 + or PaletteContentStyle.ButtonStandalone + or PaletteContentStyle.ButtonGallery + or PaletteContentStyle.ButtonCalendarDay + or PaletteContentStyle.ButtonAlternate + or PaletteContentStyle.ButtonLowProfile + or PaletteContentStyle.ButtonBreadCrumb + or PaletteContentStyle.ButtonButtonSpec + or PaletteContentStyle.ButtonCluster + or PaletteContentStyle.ButtonForm + or PaletteContentStyle.ButtonFormClose + or PaletteContentStyle.ButtonNavigatorMini + or PaletteContentStyle.ButtonCustom1 + or PaletteContentStyle.ButtonCustom2 + or PaletteContentStyle.ButtonCustom3 => PaletteRelativeAlign.Center, PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Far, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2042,25 +2135,25 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet { PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl => state switch { - PaletteState.LinkNotVisitedOverride => _ribbonColours[ + PaletteState.LinkNotVisitedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkNotVisitedOverrideControl], - PaletteState.LinkVisitedOverride => _ribbonColours[ + PaletteState.LinkVisitedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkVisitedOverrideControl], - PaletteState.LinkPressedOverride => _ribbonColours[ + PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { - PaletteState.LinkNotVisitedOverride => _ribbonColours[ + PaletteState.LinkNotVisitedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkNotVisitedOverridePanel], - PaletteState.LinkVisitedOverride => _ribbonColours[ + PaletteState.LinkVisitedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkVisitedOverridePanel], - PaletteState.LinkPressedOverride => _ribbonColours[ + PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2068,8 +2161,8 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet { case PaletteContentStyle.HeaderForm: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortActive]; + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive]; } if ((state == PaletteState.Disabled) && @@ -2090,40 +2183,40 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet return style switch { PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], +? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] }, PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], +? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal1] +: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled1], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2139,15 +2232,15 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) { case PaletteContentStyle.HeaderForm: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortActive]; + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive]; } if ((state == PaletteState.Disabled) && @@ -2168,40 +2261,40 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet return style switch { PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], +? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] }, PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], +? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal2] +: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled2], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2338,7 +2431,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2368,7 +2461,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2540,15 +2633,15 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) { case PaletteContentStyle.HeaderForm: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongActive]; + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongActive]; } if ((state == PaletteState.Disabled) && @@ -2568,39 +2661,39 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett return style switch { PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], +? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] }, PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], +? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal1] +: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled1], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2616,15 +2709,15 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) { case PaletteContentStyle.HeaderForm: return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongActive]; + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongActive]; } if ((state == PaletteState.Disabled) && @@ -2644,39 +2737,39 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett return style switch { PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], +? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] }, PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], +? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal2] +: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled2], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], +? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2913,6 +3006,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2938,6 +3032,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2998,6 +3093,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3226,7 +3322,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3251,7 +3347,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3279,63 +3375,63 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDropArrowLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowLight]; + public override Color GetRibbonDropArrowLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonDropArrowLight]; /// /// Gets the color for the drop arrow dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDropArrowDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowDark]; + public override Color GetRibbonDropArrowDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonDropArrowDark]; /// /// Gets the color for the dialog launcher dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupDialogDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogDark]; + public override Color GetRibbonGroupDialogDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupDialogDark]; /// /// Gets the color for the dialog launcher light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupDialogLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogLight]; + public override Color GetRibbonGroupDialogLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupDialogLight]; /// /// Gets the color for the group separator dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorDark]; + public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupSeparatorDark]; /// /// Gets the color for the group separator light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorLight]; + public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupSeparatorLight]; /// /// Gets the color for the minimize bar dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonMinimizeBarDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarDark]; + public override Color GetRibbonMinimizeBarDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonMinimizeBarDark]; /// /// Gets the color for the minimize bar light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonMinimizeBarLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarLight]; + public override Color GetRibbonMinimizeBarLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonMinimizeBarLight]; /// /// Gets the color for the tab separator. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonTabSeparatorColor(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonTabSeparatorColor]; + public override Color GetRibbonTabSeparatorColor(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonTabSeparatorColor]; /// /// Gets the color for the tab context separators. @@ -3349,7 +3445,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3363,14 +3459,14 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonQATButtonDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonDark]; + public override Color GetRibbonQATButtonDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonQATButtonDark]; /// /// Gets the color for the extra QAT button light content color. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonQATButtonLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonLight]; + public override Color GetRibbonQATButtonLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonQATButtonLight]; #endregion @@ -3421,29 +3517,39 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: return PaletteRibbonColorStyle.Empty; + case PaletteRibbonBackStyle.RibbonGroupArea: switch (state) { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -3465,12 +3571,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3491,37 +3599,37 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return state switch { PaletteState.Disabled => _disabledBack, - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackTracking], - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackNormal] + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBackTracking], + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBackNormal] }; case PaletteRibbonBackStyle.RibbonGalleryBorder: return state switch { PaletteState.Disabled => _disabledBorder, - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder] + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBorder] }; case PaletteRibbonBackStyle.RibbonAppMenuDocs: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonMenuDocsBack]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonMenuDocsBack]; case PaletteRibbonBackStyle.RibbonAppMenuInner: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonInner1]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonInner1]; case PaletteRibbonBackStyle.RibbonAppMenuOuter: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter1]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonOuter1]; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini1] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini1I]; + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini1] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini1I]; case PaletteRibbonBackStyle.RibbonQATFullbar: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATFullbar1]; case PaletteRibbonBackStyle.RibbonQATOverflow: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATOverflow1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATOverflow1]; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameBorder1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameBorder1]; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3532,10 +3640,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextNormal: case PaletteState.ContextTracking: case PaletteState.ContextPressed: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder1]; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3551,11 +3660,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3563,26 +3673,28 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.Tracking: case PaletteState.Pressed: case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking1]; case PaletteState.CheckedNormal: case PaletteState.CheckedTracking: case PaletteState.CheckedPressed: case PaletteState.ContextCheckedNormal: case PaletteState.ContextCheckedTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected1]; case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3600,35 +3712,36 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS switch (style) { case PaletteRibbonBackStyle.RibbonAppMenuInner: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonInner2]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonInner2]; case PaletteRibbonBackStyle.RibbonAppMenuOuter: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter2]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonOuter2]; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini2] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini2I]; + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini2] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini2I]; case PaletteRibbonBackStyle.RibbonQATFullbar: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATFullbar2]; case PaletteRibbonBackStyle.RibbonQATOverflow: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATOverflow2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATOverflow2]; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameBorder2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameBorder2]; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside2]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { case PaletteState.Normal: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitle2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitle2]; case PaletteState.ContextNormal: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleContext2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitleContext2]; case PaletteState.Tracking: case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleTracking2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitleTracking2]; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3642,10 +3755,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextNormal: case PaletteState.ContextTracking: case PaletteState.ContextPressed: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder2]; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3661,31 +3775,33 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { case PaletteState.Tracking: case PaletteState.Pressed: case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking2]; case PaletteState.CheckedNormal: case PaletteState.CheckedTracking: case PaletteState.CheckedPressed: case PaletteState.ContextCheckedTracking: case PaletteState.ContextCheckedNormal: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected2]; case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3693,10 +3809,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3714,17 +3831,17 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS switch (style) { case PaletteRibbonBackStyle.RibbonAppMenuOuter: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter3]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonOuter3]; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini3] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini3I]; + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini3] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini3I]; case PaletteRibbonBackStyle.RibbonQATFullbar: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar3]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATFullbar3]; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder3]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder3]; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonQATOverflow: @@ -3734,7 +3851,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3747,37 +3864,40 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { case PaletteState.Tracking: case PaletteState.Pressed: case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking3]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking3]; case PaletteState.CheckedNormal: case PaletteState.CheckedTracking: case PaletteState.CheckedPressed: case PaletteState.ContextCheckedNormal: case PaletteState.ContextCheckedTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected3]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected3]; case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3796,12 +3916,12 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS { case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini4] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini4I]; + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini4] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini4I]; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder4]; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonAppMenuOuter: @@ -3813,7 +3933,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3826,37 +3946,40 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { case PaletteState.Tracking: case PaletteState.Pressed: case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking4]; case PaletteState.CheckedNormal: case PaletteState.CheckedTracking: case PaletteState.CheckedPressed: case PaletteState.ContextCheckedNormal: case PaletteState.ContextCheckedTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3884,14 +4007,14 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder5]; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5I]; + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5I]; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) @@ -3905,18 +4028,19 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { case PaletteState.Disabled: return _disabledText; case PaletteState.Pressed: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking2]; case PaletteState.Tracking: case PaletteState.CheckedNormal: case PaletteState.CheckedTracking: @@ -3926,16 +4050,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3956,31 +4082,32 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt { case PaletteRibbonTextStyle.RibbonAppMenuDocsTitle: case PaletteRibbonTextStyle.RibbonAppMenuDocsEntry: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonMenuDocsText]; + return _ribbonColors[(int)SchemeOfficeColors.AppButtonMenuDocsText]; case PaletteRibbonTextStyle.RibbonGroupNormalTitle: return state switch { PaletteState.Disabled => _disabledText, - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleText] + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitleText] }; case PaletteRibbonTextStyle.RibbonTab: return state switch { PaletteState.Disabled => _disabledText, - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.ContextCheckedNormal or PaletteState.ContextCheckedTracking or PaletteState.FocusOverride => _ribbonColours[(int)SchemeOfficeColors.RibbonTabTextChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonTabTextNormal] + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.ContextCheckedNormal or PaletteState.ContextCheckedTracking or PaletteState.FocusOverride => _ribbonColors[(int)SchemeOfficeColors.RibbonTabTextChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonTabTextNormal] }; case PaletteRibbonTextStyle.RibbonGroupCollapsedText: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; case PaletteRibbonTextStyle.RibbonGroupButtonText: case PaletteRibbonTextStyle.RibbonGroupLabelText: case PaletteRibbonTextStyle.RibbonGroupCheckBoxText: case PaletteRibbonTextStyle.RibbonGroupRadioButtonText: - return state == PaletteState.Disabled ? _disabledText : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; + return state == PaletteState.Disabled ? _disabledText : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4000,7 +4127,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4012,12 +4139,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4034,7 +4162,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4046,15 +4174,16 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => ControlPaint.Light(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder]), - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => ControlPaint.Light(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder]), + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4071,7 +4200,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4084,17 +4213,18 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat return state switch { PaletteState.Disabled => ControlPaint.LightLight( - _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), + _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Normal => ControlPaint.Light( - _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), + _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4114,34 +4244,35 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch { - PaletteState.Disabled => ControlPaint.LightLight(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.Disabled => ControlPaint.LightLight(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4161,34 +4292,35 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch { - PaletteState.Disabled => ControlPaint.LightLight(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Disabled => ControlPaint.LightLight(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4196,20 +4328,11 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat } #endregion - #region ColorTable /// /// Gets access to the color table instance. /// - public override KryptonColorTable ColorTable - { - get - { - _table ??= new KryptonColorTable365(_ribbonColours, InheritBool.True, this); - - return _table; - } - } + public override KryptonColorTable ColorTable => Table ??= new KryptonColorTable365(_ribbonColors, InheritBool.True, this); #endregion #region OnUserPreferenceChanged @@ -4221,7 +4344,7 @@ public override KryptonColorTable ColorTable protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { // Remove the current table, so it gets regenerated when next requested - _table = null; + Table = null; // Update fonts to reflect any change in system settings DefineFonts(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlackDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlackDarkMode.cs index e94853e97..4f6906ff1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlackDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlackDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,10 +19,22 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(10, 10, 10); + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(41, 41, 41); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(79, 79, 79); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlackCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlackCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlackCloseActive; @@ -112,20 +124,20 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode #endregion #region Colour Arrays - private static readonly Color _disabledRibbonText = Color.FromArgb(205, 205, 205); + private static readonly Color _disabledRibbonText = Color.FromArgb(166, 166, 166); private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(17, 17, 17), // Tick marks Color.FromArgb(37, 37, 37), // Top track Color.FromArgb(174, 174, 174), // Bottom track Color.FromArgb(131, 132, 132), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(35, 35, 35) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.White, // TextLabelControl Color.White, // TextButtonNormal Color.White, // TextButtonChecked @@ -164,22 +176,22 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode Color.FromArgb(139, 147, 158), // OverflowMiddle Color.FromArgb(76, 83, 92), // OverflowEnd Color.FromArgb(76, 83, 92), // ToolStripBorder - Color.FromArgb(47, 47, 47), // FormBorderActive + Color.FromArgb(10, 10, 10), //(47, 47, 47), // FormBorderActive Color.FromArgb(146, 146, 146), // FormBorderInactive - Color.FromArgb(77, 77, 77), // FormBorderActiveLight + Color.FromArgb(41, 41, 41), //(77, 77, 77), // FormBorderActiveLight Color.FromArgb(102, 102, 102), // FormBorderActiveDark Color.FromArgb(153, 153, 153), // FormBorderInactiveLight Color.FromArgb(171, 171, 171), // FormBorderInactiveDark Color.FromArgb(65, 65, 65), // FormBorderHeaderActive - Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive + Color.FromArgb(100, 100, 100), // FormBorderHeaderInactive Color.FromArgb(42, 43, 43), // FormBorderHeaderActive1 Color.FromArgb(74, 74, 74), // FormBorderHeaderActive2 Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 - Color.FromArgb(174, 209, 255), // FormHeaderShortActive - Color.FromArgb(225, 225, 225), // FormHeaderShortInactive + Color.FromArgb(255, 255, 255), // FormHeaderShortActive + Color.FromArgb(100, 100, 100), // FormHeaderShortInactive Color.White, // FormHeaderLongActive - Color.FromArgb(225, 225, 225), // FormHeaderLongInactive + Color.FromArgb(100, 100, 100), // FormHeaderLongInactive Color.FromArgb(88, 95, 104), // FormButtonBorderTrack Color.FromArgb(91, 105, 123), // FormButtonBack1Track Color.FromArgb(173, 199, 214), // FormButtonBack2Track @@ -196,7 +208,7 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode Color.Violet, // LinkVisitedOverridePanel Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel Color.White, // TextLabelPanel - Color.FromArgb(10, 10, 10), // RibbonTabTextNormal + Color.White, // RibbonTabTextNormal Color.FromArgb(41, 41, 41), // RibbonTabTextChecked Color.FromArgb(190, 190, 190), // RibbonTabSelected1 Color.FromArgb(199, 250, 254), // RibbonTabSelected2 @@ -228,8 +240,8 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode Color.FromArgb(235, 235, 235), // RibbonGroupDialogLight Color.FromArgb(170, 171, 171), // RibbonGroupTitleTracking1 Color.FromArgb(109, 110, 110), // RibbonGroupTitleTracking2 - Color.FromArgb(79, 79, 79), // RibbonMinimizeBarDark - Color.FromArgb(98, 98, 98), // RibbonMinimizeBarLight + Color.FromArgb(10, 10, 10), // (79, 79, 79) // RibbonMinimizeBarDark + Color.FromArgb(41, 41, 41), // (98, 98, 98) // RibbonMinimizeBarLight Color.FromArgb(182, 183, 183), // RibbonGroupCollapsedBorder1 Color.FromArgb(112, 112, 112), // RibbonGroupCollapsedBorder2 Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 @@ -252,7 +264,7 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode Color.FromArgb(222, 225, 229), // RibbonGroupFrameInside2 Color.FromArgb(214, 218, 223), // RibbonGroupFrameInside3 Color.FromArgb(222, 225, 230), // RibbonGroupFrameInside4 - Color.FromArgb(70, 70, 70), // RibbonGroupCollapsedText + Color.FromArgb(255, 255, 255), // RibbonGroupCollapsedText (Old value 70, 70, 70) Color.FromArgb(158, 163, 172), // AlternatePressedBack1 Color.FromArgb(212, 215, 216), // AlternatePressedBack2 Color.FromArgb(124, 125, 125), // AlternatePressedBorder1 @@ -309,16 +321,16 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(91, 91, 91), // GridDataCellSelected Color.White, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(100, 100, 100), // InputControlTextDisabled Color.FromArgb(137, 137, 137), // InputControlBorderNormal Color.FromArgb(204, 204, 204), // InputControlBorderDisabled Color.FromArgb(10, 10, 10), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(232, 232, 232), // InputControlBackInactive - Color.FromArgb(91, 91, 91), // InputDropDownNormal1 - Color.FromArgb(88, 88, 88), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(102, 102, 102), // InputControlBackDisabled + Color.FromArgb(78, 78, 80), // InputControlBackInactive + Color.White, // InputDropDownNormal1 + Color.FromArgb(100, 100, 100), // InputDropDownNormal2 + Color.FromArgb(82, 82, 82), // InputDropDownDisabled1 + Color.FromArgb(95, 95, 95), // InputDropDownDisabled2 Color.FromArgb(41, 41, 41), // ContextMenuHeading Color.White, // ContextMenuHeadingText Color.FromArgb(54, 54, 54), // ContextMenuImageColumn @@ -339,10 +351,12 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode Color.FromArgb(247, 247, 247), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(255, 255, 255), // RibbonGroupTitleText Color.FromArgb(225, 225, 225), // RibbonDropArrowLight Color.FromArgb(103, 103, 103), // RibbonDropArrowDark Color.FromArgb(137, 137, 137), // HeaderDockInactiveBack1 @@ -356,7 +370,7 @@ public class PaletteMicrosoft365BlackDarkMode : PaletteMicrosoft365BlackDarkMode Color.FromArgb(91, 91, 91), // ButtonNavigatorChecked1 Color.FromArgb(73, 73, 73), // ButtonNavigatorChecked2 Color.FromArgb(201, 201, 201) // ToolTipBottom - }; + ]; #endregion @@ -382,8 +396,8 @@ static PaletteMicrosoft365BlackDarkMode() _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -392,7 +406,7 @@ static PaletteMicrosoft365BlackDarkMode() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -559,6 +573,41 @@ public PaletteMicrosoft365BlackDarkMode() : base(_schemeOfficeColors, _checkBoxL PaletteButtonSpecStyle.RibbonExpand => _buttonSpecRibbonExpand, _ => base.GetButtonSpecImage(style, state) }; + + #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + #endregion } #endregion @@ -617,7 +666,7 @@ public abstract class PaletteMicrosoft365BlackDarkModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -636,8 +685,8 @@ public abstract class PaletteMicrosoft365BlackDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -675,10 +724,11 @@ public abstract class PaletteMicrosoft365BlackDarkModeBase : PaletteBase #region Colours + private static readonly Color _buttonTextTracking = Color.Black; private static readonly Color _gridTextColor = Color.White; - private static readonly Color _disabledText2 = Color.FromArgb(78, 78, 78); - private static readonly Color _disabledText = Color.FromArgb(172, 172, 172); - private static readonly Color _disabledBack = Color.FromArgb(128, 128, 128); + private static readonly Color _disabledText2 = Color.FromArgb(166, 166, 166); + private static readonly Color _disabledText = Color.FromArgb(32, 32, 32); + private static readonly Color _disabledBack = Color.FromArgb(102, 102, 102); private static readonly Color _disabledBack2 = Color.FromArgb(128, 128, 128); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -693,7 +743,7 @@ public abstract class PaletteMicrosoft365BlackDarkModeBase : PaletteBase private static readonly Color _toolTipBack1 = Color.FromArgb(255, 255, 255); private static readonly Color _toolTipBack2 = Color.FromArgb(91, 91, 91); private static readonly Color _toolTipBorder = Color.FromArgb(118, 118, 118); - private static readonly Color _toolTipText = Color.FromArgb(76, 76, 76); + private static readonly Color _toolTipText = Color.FromArgb(255, 255, 255); //(76, 76, 76); private static readonly Color _contextMenuBack = Color.FromArgb(10, 10, 10); private static readonly Color _contextMenuBorder = Color.FromArgb(134, 134, 134); private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); @@ -714,59 +764,69 @@ public abstract class PaletteMicrosoft365BlackDarkModeBase : PaletteBase #endregion - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), - Color.FromArgb(214, 220, 231), - Color.FromArgb(188, 198, 211), - Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) - }; - - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), - Color.FromArgb(178, 178, 178), - Color.FromArgb(176, 176, 176), - Color.FromArgb(179, 179, 179), - Color.FromArgb(160, 160, 160) - }; - - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), - Color.FromArgb(185, 185, 185), - Color.FromArgb(35, 35, 35), - Color.FromArgb(50, 50, 50), - Color.FromArgb(100, 100, 100) - }; - - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(180, 180, 180), // Button, Disabled, Border - Color.FromArgb(187, 186, 186), // Button, Tracking, Border 1 - Color.FromArgb(139, 139, 139), // Button, Tracking, Border 2 - Color.FromArgb(30, 30, 30), // Button, Pressed, Border 1 - Color.FromArgb(4, 3, 3), // Button, Pressed, Border 2 - Color.FromArgb(30, 30, 30), // Button, Checked, Border 1 - Color.FromArgb(4, 3, 3) // Button, Checked, Border 2 - }; - - private static readonly Color[] _buttonBackColors = { Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 - Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 - Color.FromArgb(91, 91, 91), // Button, Tracking, Back 1 - Color.FromArgb(33, 33, 33), // Button, Tracking, Back 2 - Color.FromArgb(121, 121, 121), // Button, Pressed, Back 1 - Color.FromArgb(91, 91, 91), // Button, Pressed, Back 2 - Color.FromArgb(91, 91, 91), // Button, Checked, Back 1 - Color.FromArgb(88, 88, 88), // Button, Checked, Back 2 - Color.FromArgb(41, 41, 41), // Button, Checked Tracking, Back 1 - Color.FromArgb(70, 70, 70) // Button, Checked Tracking, Back 2 - }; + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), + Color.FromArgb(214, 220, 231), + Color.FromArgb(188, 198, 211), + Color.FromArgb(254, 254, 255), + Color.FromArgb(206, 213, 225) + ]; + + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(255, 251, 230), + Color.FromArgb(178, 178, 178), + Color.FromArgb(176, 176, 176), + Color.FromArgb(179, 179, 179), + Color.FromArgb(160, 160, 160) + ]; + + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), + Color.FromArgb(185, 185, 185), + Color.FromArgb(35, 35, 35), + Color.FromArgb(50, 50, 50), + Color.FromArgb(100, 100, 100) + ]; + + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(180, 180, 180), // Button, Disabled, Border + Color.FromArgb(187, 186, 186), // Button, Tracking, Border 1 + Color.FromArgb(139, 139, 139), // Button, Tracking, Border 2 + Color.FromArgb(30, 30, 30), // Button, Pressed, Border 1 + Color.FromArgb(4, 3, 3), // Button, Pressed, Border 2 + Color.FromArgb(30, 30, 30), // Button, Checked, Border 1 + Color.FromArgb(4, 3, 3) // Button, Checked, Border 2 + ]; + + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 + Color.FromArgb(91, 91, 91), // Button, Tracking, Back 1 + Color.FromArgb(129, 129, 129), // Button, Tracking, Back 2 + Color.FromArgb(121, 121, 121), // Button, Pressed, Back 1 + Color.FromArgb(91, 91, 91), // Button, Pressed, Back 2 + Color.FromArgb(91, 91, 91), // Button, Checked, Back 1 + Color.FromArgb(88, 88, 88), // Button, Checked, Back 2 + Color.FromArgb(41, 41, 41), // Button, Checked Tracking, Back 1 + Color.FromArgb(70, 70, 70) // Button, Checked Tracking, Back 2 + ]; #endregion #region Variables - private KryptonColorTable365BlackDarkMode _table; + private KryptonColorTable365BlackDarkMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Constructor @@ -781,7 +841,7 @@ public abstract class PaletteMicrosoft365BlackDarkModeBase : PaletteBase protected PaletteMicrosoft365BlackDarkModeBase([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); @@ -817,17 +877,6 @@ protected PaletteMicrosoft365BlackDarkModeBase([DisallowNull] Color[] schemeColo } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// - /// InheritBool value. - /// - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -907,7 +956,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -962,17 +1011,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -999,7 +1048,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -1007,7 +1056,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1150,22 +1199,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1188,14 +1237,14 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[6], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1209,7 +1258,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1224,7 +1273,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1278,11 +1327,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1291,7 +1340,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1299,7 +1348,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1442,22 +1491,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1479,17 +1528,17 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] -: _buttonBackColors[7], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] + : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1503,7 +1552,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1557,7 +1606,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1567,7 +1616,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1811,17 +1860,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1829,21 +1878,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1854,8 +1903,8 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], @@ -1863,23 +1912,23 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1888,13 +1937,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1902,7 +1951,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1913,7 +1962,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1939,17 +1988,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1957,22 +2006,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1991,23 +2040,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -2020,7 +2069,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -2028,7 +2077,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2039,7 +2088,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2163,7 +2212,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2268,7 +2317,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2361,12 +2410,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2382,12 +2431,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2403,12 +2452,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2419,7 +2468,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2456,7 +2505,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2635,7 +2684,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2645,9 +2694,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2680,38 +2729,58 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile + or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote + or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 + or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone + or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate + or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 + or PaletteContentStyle.ButtonCustom2 + or PaletteContentStyle.ButtonCustom3 => state switch + { + PaletteState.Tracking => _buttonTextTracking, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + }, + /*state != PaletteState.Normal + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + */ PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonCalendarDay => state switch { + PaletteState.Tracking => _buttonTextTracking, PaletteState.Disabled => _disabledText2, _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] }, - PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch - { - PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] - }, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand + or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb + or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Tracking => _buttonTextTracking, + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch { PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, - PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonInputControl => state switch + { + PaletteState.Disabled => _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + _ => _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] + }, PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], @@ -2730,7 +2799,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2762,15 +2831,15 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonCalendarDay => state switch { @@ -2792,11 +2861,11 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], + ? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] + : _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2933,7 +3002,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2963,7 +3032,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3135,7 +3204,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3166,15 +3235,15 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec => state switch { @@ -3195,12 +3264,14 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, - PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonInputControl => state switch + { + PaletteState.Disabled => _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + _ => _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] + }, PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -3216,7 +3287,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3247,15 +3318,15 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec => state switch { @@ -3277,11 +3348,11 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], + ? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] + : _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -3518,6 +3589,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3543,6 +3615,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3603,6 +3676,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3626,7 +3700,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Is the check box being hot tracked. /// Is the check box being pressed. /// Appropriate image for drawing; otherwise null. - public override Image? GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) + public override Image GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) { switch (checkState) { @@ -3741,7 +3815,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Enum of the button to fetch. /// State of the button to fetch. /// Appropriate image for drawing; otherwise null. - public override Image? GetGalleryButtonImage(PaletteRibbonGalleryButton button, PaletteState state) => button switch + public override Image GetGalleryButtonImage(PaletteRibbonGalleryButton button, PaletteState state) => button switch { PaletteRibbonGalleryButton.Up => _galleryButtonList.Images[1], PaletteRibbonGalleryButton.DropDown => _galleryButtonList.Images[2], @@ -3831,7 +3905,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3856,7 +3930,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3954,7 +4028,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4026,6 +4100,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4037,15 +4112,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4070,12 +4151,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4126,7 +4209,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4141,6 +4224,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4156,11 +4240,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4178,16 +4263,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4234,6 +4321,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4251,6 +4339,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4266,6 +4355,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4287,10 +4377,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4298,10 +4389,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4339,7 +4431,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4352,6 +4444,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4373,16 +4466,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4418,7 +4513,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4431,6 +4526,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4452,16 +4548,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4489,7 +4587,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4510,6 +4608,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4531,16 +4630,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4586,6 +4687,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4605,7 +4707,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4617,12 +4719,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4639,7 +4742,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4655,11 +4758,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4676,7 +4780,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4694,12 +4798,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4719,34 +4824,35 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } - return _trackBarColours[0]; + case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } - return _trackBarColours[3]; + case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } - return state switch { PaletteState.Disabled => ControlPaint.LightLight(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4766,21 +4872,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4789,11 +4895,13 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4903,7 +5011,7 @@ public KryptonColorTable365BlackDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -5446,15 +5554,10 @@ public KryptonColorTable365BlackDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => @@ -5464,4 +5567,4 @@ private static void OnUserPreferenceChanged(object sender, UserPreferenceChanged #endregion } #endregion -} +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlackDarkModeAlternate.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlackDarkModeAlternate.cs new file mode 100644 index 000000000..98f0d9083 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlackDarkModeAlternate.cs @@ -0,0 +1,5553 @@ +#region BSD License +/* + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + + +namespace Krypton.Toolkit +{ + #region Class: PaletteMicrosoft365BlackDarkModeAlternate + public class PaletteMicrosoft365BlackDarkModeAlternate : PaletteMicrosoft365BlackDarkModeAlternateBase + { + #region Static Fields + + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(31, 31, 31); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(31, 31, 31); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(69, 69, 69); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + + private static readonly ImageList _checkBoxList; + private static readonly ImageList _galleryButtonList; + + #region Images + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; + private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlackCloseNormal; + private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlackCloseDisabled; + private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlackCloseActive; + private static readonly Image _formClosePressed = Office2010ControlBoxResources.Office2010BlackClosePressed; + private static readonly Image _formMaximiseNormal = Office2010ControlBoxResources.Office2010BackMaximiseNormal; + private static readonly Image _formMaximiseDisabled = Office2010ControlBoxResources.Office2010BlackMaximiseDisabled; + private static readonly Image _formMaximiseActive = Office2010ControlBoxResources.Office2010BlackMaximiseActive; + private static readonly Image _formMaximisePressed = Office2010ControlBoxResources.Office2010BlackMaximisePressed; + private static readonly Image _formMinimiseNormal = Office2010ControlBoxResources.Office2010BlackMinimiseNormal; + private static readonly Image _formMinimiseActive = Office2010ControlBoxResources.Office2010BlackMinimiseActive; + private static readonly Image _formMinimiseDisabled = Office2010ControlBoxResources.Office2010BlackMinimiseDisabled; + private static readonly Image _formMinimisePressed = Office2010ControlBoxResources.Office2010BlackMinimisePressed; + private static readonly Image _formRestoreNormal = Office2010ControlBoxResources.Office2010BlackRestoreNormal; + private static readonly Image _formRestoreDisabled = Office2010ControlBoxResources.Office2010BlackRestoreDisabled; + private static readonly Image _formRestoreActive = Office2010ControlBoxResources.Office2010BlackRestoreActive; + private static readonly Image _formRestorePressed = Office2010ControlBoxResources.Office2010BlackRestorePressed; + private static readonly Image _formHelpNormal = Microsoft365ControlBoxResources.Microsoft365HelpIconNormal; + private static readonly Image _formHelpActive = Microsoft365ControlBoxResources.Microsoft365HelpIconHover; + private static readonly Image _formHelpPressed = Microsoft365ControlBoxResources.Microsoft365HelpIconPressed; + private static readonly Image _formHelpDisabled = Microsoft365ControlBoxResources.Microsoft365HelpIconDisabled; + private static readonly Image _buttonSpecPendantClose = Office2010MDIImageResources.Office2010ButtonMDICloseBlack; + private static readonly Image _buttonSpecPendantMin = Office2010MDIImageResources.Office2010ButtonMDIMinBlack; + private static readonly Image _buttonSpecPendantRestore = Office2010MDIImageResources.Office2010ButtonMDIRestoreBlack; + private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010Black; + private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010Black; + + #region Integrated Toolbar Images + + private static readonly Image _integratedToolbarNewNormal = Office2019ToolbarImageResources.Office2019ToolbarNewNormal; + + private static readonly Image _integratedToolbarNewDisabled = Office2019ToolbarImageResources.Office2019ToolbarNewDisabled; + + private static readonly Image _integratedToolbarOpenNormal = Office2019ToolbarImageResources.Office2019ToolbarOpenNormal; + + private static readonly Image _integratedToolbarOpenDisabled = Office2019ToolbarImageResources.Office2019ToolbarOpenDisabled; + + private static readonly Image _integratedToolbarSaveAllNormal = Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal; + + private static readonly Image _integratedToolbarSaveAllDisabled = Office2019ToolbarImageResources.Office2019ToolbarSaveAllDisabled; + + private static readonly Image _integratedToolbarSaveAsNormal = Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal; + + private static readonly Image _integratedToolbarSaveAsDisabled = Office2019ToolbarImageResources.Office2019ToolbarSaveAsDisabled; + + private static readonly Image _integratedToolbarSaveNormal = Office2019ToolbarImageResources.Office2019ToolbarSaveNormal; + + private static readonly Image _integratedToolbarSaveDisabled = Office2019ToolbarImageResources.Office2019ToolbarSaveDisabled; + + private static readonly Image _integratedToolbarCutNormal = Office2019ToolbarImageResources.Office2019ToolbarCutNormal; + + private static readonly Image _integratedToolbarCutDisabled = Office2019ToolbarImageResources.Office2019ToolbarCutDisabled; + + private static readonly Image _integratedToolbarCopyNormal = Office2019ToolbarImageResources.Office2019ToolbarCopyNormal; + + private static readonly Image _integratedToolbarCopyDisabled = Office2019ToolbarImageResources.Office2019ToolbarCopyDisabled; + + private static readonly Image _integratedToolbarPasteNormal = Office2019ToolbarImageResources.Office2019ToolbarPasteNormal; + + private static readonly Image _integratedToolbarPasteDisabled = Office2019ToolbarImageResources.Office2019ToolbarPasteDisabled; + + private static readonly Image _integratedToolbarUndoNormal = Office2019ToolbarImageResources.Office2019ToolbarUndoNormal; + + private static readonly Image _integratedToolbarUndoDisabled = Office2019ToolbarImageResources.Office2019ToolbarUndoDisabled; + + private static readonly Image _integratedToolbarRedoNormal = Office2019ToolbarImageResources.Office2019ToolbarRedoNormal; + + private static readonly Image _integratedToolbarRedoDisabled = Office2019ToolbarImageResources.Office2019ToolbarRedoDisabled; + + private static readonly Image _integratedToolbarPageSetupNormal = Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal; + + private static readonly Image _integratedToolbarPageSetupDisabled = Office2019ToolbarImageResources.Office2019ToolbarPageSetupDisabled; + + private static readonly Image _integratedToolbarPrintPreviewNormal = Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal; + + private static readonly Image _integratedToolbarPrintPreviewDisabled = Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewDisabled; + + private static readonly Image _integratedToolbarPrintNormal = Office2019ToolbarImageResources.Office2019ToolbarPrintNormal; + + private static readonly Image _integratedToolbarPrintDisabled = Office2019ToolbarImageResources.Office2019ToolbarPrintDisabled; + + private static readonly Image _integratedToolbarQuickPrintNormal = Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal; + + private static readonly Image _integratedToolbarQuickPrintDisabled = Office2019ToolbarImageResources.Office2019ToolbarQuickPrintDisabled; + + #endregion + + #endregion + + #region Colour Arrays + private static readonly Color _disabledRibbonText = Color.FromArgb(205, 205, 205); + + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(17, 17, 17), // Tick marks + Color.FromArgb(37, 37, 37), // Top track + Color.FromArgb(174, 174, 174), // Bottom track + Color.FromArgb(131, 132, 132), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(35, 35, 35) // Border (normal) position + ]; + + private static readonly Color[] _schemeOfficeColors = + [ + Color.White, // TextLabelControl + Color.White, // TextButtonNormal + Color.White, // TextButtonChecked + Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 + Color.FromArgb(127, 125, 123), // ButtonNormalBorder2 + Color.FromArgb(31, 31, 31), // ButtonNormalBack1 + Color.FromArgb(15, 15, 15), // ButtonNormalBack2 + Color.FromArgb(164, 163, 163), // ButtonNormalDefaultBack1 + Color.FromArgb(114, 114, 114), // ButtonNormalDefaultBack2 + Color.FromArgb(204, 208, 214), // ButtonNormalNavigatorBack1 + Color.FromArgb(229, 232, 236), // ButtonNormalNavigatorBack2 + Color.FromArgb(31, 31, 31), // PanelClient + Color.FromArgb(15, 15, 15), // PanelAlternative + Color.White, // ControlBorder + Color.FromArgb(167, 167, 167), // SeparatorHighBorder1 + Color.FromArgb(119, 119, 119), // SeparatorHighBorder2 + Color.FromArgb(31, 31, 31), // HeaderPrimaryBack1 + Color.FromArgb(15, 15, 15), // HeaderPrimaryBack2 + Color.FromArgb(164, 163, 163), // HeaderSecondaryBack1 + Color.FromArgb(114, 114, 114), // HeaderSecondaryBack2 + Color.White, // HeaderText + Color.White, // StatusStripText + Color.FromArgb(155, 163, 167), // ButtonBorder + Color.FromArgb(221, 224, 227), // SeparatorLight + Color.FromArgb(145, 153, 164), // SeparatorDark + Color.FromArgb(228, 228, 228), // GripLight + Color.FromArgb(77, 77, 77), // GripDark + Color.FromArgb(15, 15, 15), // ToolStripBack + Color.FromArgb(15, 15, 15), // StatusStripLight + Color.FromArgb(31, 31, 31), // StatusStripDark + Color.FromArgb(15, 15, 15), // ImageMargin + Color.FromArgb(31, 31, 31), // ToolStripBegin + Color.FromArgb(33, 33, 33), // ToolStripMiddle + Color.FromArgb(54, 54, 54), // ToolStripEnd + Color.FromArgb(178, 183, 191), // OverflowBegin + Color.FromArgb(139, 147, 158), // OverflowMiddle + Color.FromArgb(76, 83, 92), // OverflowEnd + Color.FromArgb(76, 83, 92), // ToolStripBorder + Color.FromArgb(47, 47, 47), // FormBorderActive + Color.FromArgb(146, 146, 146), // FormBorderInactive + Color.FromArgb(77, 77, 77), // FormBorderActiveLight + Color.FromArgb(102, 102, 102), // FormBorderActiveDark + Color.FromArgb(153, 153, 153), // FormBorderInactiveLight + Color.FromArgb(171, 171, 171), // FormBorderInactiveDark + Color.FromArgb(65, 65, 65), // FormBorderHeaderActive + Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive + Color.FromArgb(42, 43, 43), // FormBorderHeaderActive1 + Color.FromArgb(74, 74, 74), // FormBorderHeaderActive2 + Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 + Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 + Color.FromArgb(255, 255, 255), // FormHeaderShortActive + Color.FromArgb(41, 41, 41), // FormHeaderShortInactive + Color.White, // FormHeaderLongActive + Color.FromArgb(225, 225, 225), // FormHeaderLongInactive + Color.FromArgb(88, 95, 104), // FormButtonBorderTrack + Color.FromArgb(91, 105, 123), // FormButtonBack1Track + Color.FromArgb(173, 199, 214), // FormButtonBack2Track + Color.FromArgb(18, 18, 18), // FormButtonBorderPressed + Color.FromArgb(0, 0, 0), // FormButtonBack1Pressed + Color.FromArgb(65, 83, 102), // FormButtonBack2Pressed + Color.White, // TextButtonFormNormal + Color.White, // TextButtonFormTracking + Color.White, // TextButtonFormPressed + Color.White, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.FromArgb(180, 210, 255), // LinkNotVisitedOverridePanel + Color.Violet, // LinkVisitedOverridePanel + Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel + Color.White, // TextLabelPanel + Color.White, // RibbonTabTextNormal + Color.FromArgb(15, 15, 15), // RibbonTabTextChecked + Color.FromArgb(190, 190, 190), // RibbonTabSelected1 + Color.FromArgb(199, 250, 254), // RibbonTabSelected2 + Color.FromArgb(238, 239, 241), // RibbonTabSelected3 + Color.FromArgb(241, 241, 241), // RibbonTabSelected4 + Color.FromArgb(213, 217, 223), // RibbonTabSelected5 + Color.FromArgb(159, 156, 150), // RibbonTabTracking1 + Color.FromArgb(235, 194, 39), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(123, 111, 68), // RibbonTabHighlight5 + Color.FromArgb(54, 54, 54), // RibbonTabSeparatorColor + Color.FromArgb(190, 190, 190), // RibbonGroupsArea1 + Color.FromArgb(210, 210, 210), // RibbonGroupsArea2 + Color.FromArgb(180, 187, 197), // RibbonGroupsArea3 + Color.FromArgb(235, 235, 235), // RibbonGroupsArea4 + Color.FromArgb(215, 219, 224), // RibbonGroupsArea5 + Color.FromArgb(174, 176, 180), // RibbonGroupBorder1 + Color.FromArgb(132, 132, 132), // RibbonGroupBorder2 + Color.FromArgb(182, 184, 184), // RibbonGroupTitle1 + Color.FromArgb(159, 160, 160), // RibbonGroupTitle2 + Color.FromArgb(183, 183, 183), // RibbonGroupBorderContext1 + Color.FromArgb(131, 131, 131), // RibbonGroupBorderContext2 + Color.FromArgb(190, 190, 190), // RibbonGroupTitleContext1 + Color.FromArgb(161, 161, 161), // RibbonGroupTitleContext2 + Color.FromArgb(101, 104, 112), // RibbonGroupDialogDark + Color.FromArgb(235, 235, 235), // RibbonGroupDialogLight + Color.FromArgb(170, 171, 171), // RibbonGroupTitleTracking1 + Color.FromArgb(109, 110, 110), // RibbonGroupTitleTracking2 + Color.FromArgb(79, 79, 79), // RibbonMinimizeBarDark + Color.FromArgb(98, 98, 98), // RibbonMinimizeBarLight + Color.FromArgb(182, 183, 183), // RibbonGroupCollapsedBorder1 + Color.FromArgb(112, 112, 112), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(217, 217, 217), // RibbonGroupCollapsedBorder4 + Color.FromArgb(244, 244, 245), // RibbonGroupCollapsedBack1 + Color.FromArgb(200, 205, 212), // RibbonGroupCollapsedBack2 + Color.FromArgb(185, 192, 201), // RibbonGroupCollapsedBack3 + Color.FromArgb(235, 235, 235), // RibbonGroupCollapsedBack4 + Color.FromArgb(188, 193, 214), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(116, 141, 187), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.White, // RibbonGroupCollapsedBorderT4 + Color.FromArgb(246, 246, 246), // RibbonGroupCollapsedBackT1 + Color.FromArgb(214, 220, 228), // RibbonGroupCollapsedBackT2 + Color.FromArgb(203, 210, 221), // RibbonGroupCollapsedBackT3 + Color.FromArgb(235, 235, 235), // RibbonGroupCollapsedBackT4 + Color.FromArgb(160, 160, 160), // RibbonGroupFrameBorder1 + Color.FromArgb(194, 194, 194), // RibbonGroupFrameBorder2 + Color.FromArgb(239, 240, 241), // RibbonGroupFrameInside1 + Color.FromArgb(222, 225, 229), // RibbonGroupFrameInside2 + Color.FromArgb(214, 218, 223), // RibbonGroupFrameInside3 + Color.FromArgb(222, 225, 230), // RibbonGroupFrameInside4 + Color.FromArgb(255, 255, 255), // RibbonGroupCollapsedText (Old value 70, 70, 70) + Color.FromArgb(158, 163, 172), // AlternatePressedBack1 + Color.FromArgb(212, 215, 216), // AlternatePressedBack2 + Color.FromArgb(124, 125, 125), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(43, 55, 67), // FormButtonBack1Checked + Color.FromArgb(106, 122, 140), // FormButtonBack2Checked + Color.FromArgb(18, 18, 18), // FormButtonBorderCheck + Color.FromArgb(33, 45, 57), // FormButtonBack1CheckTrack + Color.FromArgb(136, 152, 170), // FormButtonBack2CheckTrack + Color.FromArgb(55, 55, 55), // RibbonQATMini1 + Color.FromArgb(100, 100, 100), // RibbonQATMini2 + Color.FromArgb(73, 73, 73), // RibbonQATMini3 + Color.FromArgb(12, Color.White), // RibbonQATMini4 + Color.FromArgb(14, Color.White), // RibbonQATMini5 + Color.FromArgb(100, 100, 100), // RibbonQATMini1I + Color.FromArgb(170, 170, 170), // RibbonQATMini2I + Color.FromArgb(140, 140, 140), // RibbonQATMini3I + Color.FromArgb(12, Color.White), // RibbonQATMini4I + Color.FromArgb(14, Color.White), // RibbonQATMini5I + Color.FromArgb(141, 144, 147), // RibbonQATFullbar1 + Color.FromArgb(133, 135, 137), // RibbonQATFullbar2 + Color.FromArgb(93, 96, 100), // RibbonQATFullbar3 + Color.FromArgb(103, 103, 103), // RibbonQATButtonDark + Color.FromArgb(225, 225, 225), // RibbonQATButtonLight + Color.FromArgb(118, 128, 142), // RibbonQATOverflow1 + Color.FromArgb(55, 60, 67), // RibbonQATOverflow2 + Color.FromArgb(163, 168, + 170), // RibbonGroupSeparatorDark + Color.FromArgb(230, 233, + 235), // RibbonGroupSeparatorLight + Color.FromArgb(210, 217, + 219), // ButtonClusterButtonBack1 + Color.FromArgb(214, 222, + 223), // ButtonClusterButtonBack2 + Color.FromArgb(179, 188, + 191), // ButtonClusterButtonBorder1 + Color.FromArgb(145, 156, + 159), // ButtonClusterButtonBorder2 + Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor + Color.FromArgb(31, 31, 31), // GridListNormal1 + Color.FromArgb(15, 15, 15), // GridListNormal2 + Color.FromArgb(15, 15, 15), // GridListPressed1 + Color.FromArgb(15, 15, 15), // GridListPressed2 + Color.FromArgb(33, 33, 33), // GridListSelected + Color.FromArgb(31, 31, 31), // GridSheetColNormal1 + Color.FromArgb(15, 15, 15), // GridSheetColNormal2 + Color.FromArgb(224, 224, 224), // GridSheetColPressed1 + Color.FromArgb(195, 195, 195), // GridSheetColPressed2 + Color.FromArgb(91, 91, 91), // GridSheetColSelected1 + Color.FromArgb(33, 33, 33), // GridSheetColSelected2 + Color.FromArgb(237, 237, 237), // GridSheetRowNormal + Color.FromArgb(196, 196, 196), // GridSheetRowPressed + Color.FromArgb(15, 15, 15), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(91, 91, 91), // GridDataCellSelected + Color.White, // InputControlTextNormal + Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(137, 137, 137), // InputControlBorderNormal + Color.FromArgb(204, 204, 204), // InputControlBorderDisabled + Color.FromArgb(31, 31, 31), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(78, 78, 80), // InputControlBackInactive + Color.White, // InputDropDownNormal1 + Color.FromArgb(100, 100, 100), // InputDropDownNormal2 + Color.FromArgb(82, 82, 82), // InputDropDownDisabled1 + Color.FromArgb(95, 95, 95), // InputDropDownDisabled2 + Color.FromArgb(15, 15, 15), // ContextMenuHeading + Color.White, // ContextMenuHeadingText + Color.FromArgb(54, 54, 54), // ContextMenuImageColumn + Color.FromArgb(31, 31, 31), // AppButtonBack1 + Color.FromArgb(15, 15, 15), // AppButtonBack2 + Color.FromArgb(67, 66, 65), // AppButtonBorder + Color.FromArgb(78, 78, 79), // AppButtonOuter1 + Color.FromArgb(47, 47, 47), // AppButtonOuter2 + Color.FromArgb(64, 64, 64), // AppButtonOuter3 + Color.FromArgb(107, 108, 113), // AppButtonInner1 + Color.FromArgb(67, 66, 65), // AppButtonInner2 + Color.FromArgb(38, 38, 38), // AppButtonMenuDocs + Color.White, // AppButtonMenuDocsText + Color.FromArgb(240, 241, 242), // SeparatorHighInternalBorder1 + Color.FromArgb(195, 200, 206), // SeparatorHighInternalBorder2 + Color.FromArgb(172, 172, 172), // RibbonGalleryBorder + Color.FromArgb(218, 226, 226), // RibbonGalleryBackNormal + Color.FromArgb(247, 247, 247), // RibbonGalleryBackTracking + Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 + Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(255, 255, 255), // RibbonGroupTitleText + Color.FromArgb(225, 225, 225), // RibbonDropArrowLight + Color.FromArgb(103, 103, 103), // RibbonDropArrowDark + Color.FromArgb(137, 137, 137), // HeaderDockInactiveBack1 + Color.FromArgb(125, 125, 125), // HeaderDockInactiveBack2 + Color.FromArgb(46, 46, 46), // ButtonNavigatorBorder + Color.White, // ButtonNavigatorText + Color.FromArgb(76, 76, 76), // ButtonNavigatorTrack1 + Color.FromArgb(147, 147, 143), // ButtonNavigatorTrack2 + Color.FromArgb(66, 66, 66), // ButtonNavigatorPressed1 + Color.FromArgb(148, 148, 143), // ButtonNavigatorPressed2 + Color.FromArgb(91, 91, 91), // ButtonNavigatorChecked1 + Color.FromArgb(73, 73, 73), // ButtonNavigatorChecked2 + Color.FromArgb(201, 201, 201) // ToolTipBottom + ]; + + #endregion + + #endregion + + #region Constructors + static PaletteMicrosoft365BlackDarkModeAlternate() + { + _checkBoxList = new ImageList + { + ImageSize = new Size(13, 13), + ColorDepth = ColorDepth.Depth24Bit + }; + + _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStrip2010Black); + + _galleryButtonList = new ImageList + { + ImageSize = new Size(13, 7), + ColorDepth = ColorDepth.Depth24Bit, + TransparentColor = Color.Magenta + }; + + _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); + + _radioButtonArray = + [ + Office2010RadioButtonImageResources.RadioButton2010BlueD, + Office2010RadioButtonImageResources.RadioButton2010SilverN, + Office2010RadioButtonImageResources.RadioButton2010BlueT, + Office2010RadioButtonImageResources.RadioButton2010BlueP, + Office2010RadioButtonImageResources.RadioButton2010BlueDC, + Office2010RadioButtonImageResources.RadioButton2010SilverNC, + Office2010RadioButtonImageResources.RadioButton2010SilverTC, + Office2010RadioButtonImageResources.RadioButton2010SilverPC + ]; + } + + /// + /// Initializes a new instance of the class. + /// + public PaletteMicrosoft365BlackDarkModeAlternate() : base(_schemeOfficeColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) + { + + } + #endregion + + #region Images + /// + /// Gets a drop down button image appropriate for the provided state. + /// + /// PaletteState for which image is required. + /// + public override Image? GetDropDownButtonImage(PaletteState state) => state != PaletteState.Disabled ? _blackDropDownButton : base.GetDropDownButtonImage(state); + + /// + /// Gets an image indicating a sub-menu on a context menu item. + /// + /// + /// Appropriate image for drawing; otherwise null. + /// + public override Image? GetContextMenuSubMenuImage() => _contextMenuSubMenu; + + #endregion + + #region ButtonSpec + /// + /// Gets the image to display for the button. + /// + /// Style of button spec. + /// State for which image is required. + /// + /// Image value. + /// + public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, PaletteState state) => style switch + { + PaletteButtonSpecStyle.PendantClose => _buttonSpecPendantClose, + PaletteButtonSpecStyle.PendantMin => _buttonSpecPendantMin, + PaletteButtonSpecStyle.PendantRestore => _buttonSpecPendantRestore, + PaletteButtonSpecStyle.FormClose => state switch + { + PaletteState.Tracking => _formCloseActive, + PaletteState.Normal => _formCloseNormal, + PaletteState.Pressed => _formClosePressed, + _ => _formCloseDisabled + }, + PaletteButtonSpecStyle.FormMin => state switch + { + PaletteState.Normal => _formMinimiseNormal, + PaletteState.Tracking => _formMinimiseActive, + PaletteState.Pressed => _formMinimisePressed, + _ => _formMinimiseDisabled + }, + PaletteButtonSpecStyle.FormMax => state switch + { + PaletteState.Normal => _formMaximiseNormal, + PaletteState.Tracking => _formMaximiseActive, + PaletteState.Pressed => _formMaximisePressed, + _ => _formMaximiseDisabled + }, + PaletteButtonSpecStyle.FormRestore => state switch + { + PaletteState.Normal => _formRestoreNormal, + PaletteState.Tracking => _formRestoreActive, + PaletteState.Pressed => _formRestorePressed, + _ => _formRestoreDisabled + }, + PaletteButtonSpecStyle.FormHelp => state switch + { + PaletteState.Tracking => _formHelpActive, + PaletteState.Pressed => _formHelpPressed, + PaletteState.Normal => _formHelpNormal, + _ => _formHelpDisabled + }, + PaletteButtonSpecStyle.New => state switch + { + PaletteState.Normal => _integratedToolbarNewNormal, + PaletteState.Disabled => _integratedToolbarNewDisabled, + _ => _integratedToolbarNewDisabled + }, + PaletteButtonSpecStyle.Open => state switch + { + PaletteState.Normal => _integratedToolbarOpenNormal, + PaletteState.Disabled => _integratedToolbarOpenDisabled, + _ => _integratedToolbarOpenDisabled + }, + PaletteButtonSpecStyle.SaveAll => state switch + { + PaletteState.Normal => _integratedToolbarSaveAllNormal, + PaletteState.Disabled => _integratedToolbarSaveAllDisabled, + _ => _integratedToolbarSaveAllDisabled + }, + PaletteButtonSpecStyle.SaveAs => state switch + { + PaletteState.Normal => _integratedToolbarSaveAsNormal, + PaletteState.Disabled => _integratedToolbarSaveAsDisabled, + _ => _integratedToolbarSaveAsDisabled + }, + PaletteButtonSpecStyle.Save => state switch + { + PaletteState.Normal => _integratedToolbarSaveNormal, + PaletteState.Disabled => _integratedToolbarSaveDisabled, + _ => _integratedToolbarSaveDisabled + }, + PaletteButtonSpecStyle.Cut => state switch + { + PaletteState.Normal => _integratedToolbarCutNormal, + PaletteState.Disabled => _integratedToolbarCutDisabled, + _ => _integratedToolbarCutDisabled + }, + PaletteButtonSpecStyle.Copy => state switch + { + PaletteState.Normal => _integratedToolbarCopyNormal, + PaletteState.Disabled => _integratedToolbarCopyDisabled, + _ => _integratedToolbarCopyDisabled + }, + PaletteButtonSpecStyle.Paste => state switch + { + PaletteState.Normal => _integratedToolbarPasteNormal, + PaletteState.Disabled => _integratedToolbarPasteDisabled, + _ => _integratedToolbarPasteDisabled + }, + PaletteButtonSpecStyle.Undo => state switch + { + PaletteState.Normal => _integratedToolbarUndoNormal, + PaletteState.Disabled => _integratedToolbarUndoDisabled, + _ => _integratedToolbarUndoDisabled + }, + PaletteButtonSpecStyle.Redo => state switch + { + PaletteState.Normal => _integratedToolbarRedoNormal, + PaletteState.Disabled => _integratedToolbarRedoDisabled, + _ => _integratedToolbarRedoDisabled + }, + PaletteButtonSpecStyle.PageSetup => state switch + { + PaletteState.Normal => _integratedToolbarPageSetupNormal, + PaletteState.Disabled => _integratedToolbarPageSetupDisabled, + _ => _integratedToolbarPageSetupDisabled + }, + PaletteButtonSpecStyle.PrintPreview => state switch + { + PaletteState.Normal => _integratedToolbarPrintPreviewNormal, + PaletteState.Disabled => _integratedToolbarPrintPreviewDisabled, + _ => _integratedToolbarPrintPreviewDisabled + }, + PaletteButtonSpecStyle.Print => state switch + { + PaletteState.Normal => _integratedToolbarPrintNormal, + PaletteState.Disabled => _integratedToolbarPrintDisabled, + _ => _integratedToolbarPrintDisabled + }, + PaletteButtonSpecStyle.QuickPrint => state switch + { + PaletteState.Normal => _integratedToolbarQuickPrintNormal, + PaletteState.Disabled => _integratedToolbarQuickPrintDisabled, + _ => _integratedToolbarQuickPrintDisabled + }, + PaletteButtonSpecStyle.RibbonMinimize => _buttonSpecRibbonMinimize, + PaletteButtonSpecStyle.RibbonExpand => _buttonSpecRibbonExpand, + _ => base.GetButtonSpecImage(style, state) + }; + #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion + } + #endregion + + #region Class: PaletteMicrosoft365BlackDarkModeAlternateBase + /// + /// Provides a base for Office 365 palettes. + /// + /// + public abstract class PaletteMicrosoft365BlackDarkModeAlternateBase : PaletteBase + { + #region Static Fields + + #region Padding + + private static readonly Padding _contentPaddingGrid = new Padding(2, 1, 2, 1); + private static readonly Padding _contentPaddingHeader1 = new Padding(2, 1, 2, 1); + private static readonly Padding _contentPaddingHeader2 = new Padding(2, 1, 2, 1); + private static readonly Padding _contentPaddingDock = new Padding(2, 2, 2, 1); + private static readonly Padding _contentPaddingCalendar = new Padding(2); + private static readonly Padding _contentPaddingHeaderForm = new Padding(10, 6, 3, 0); // 10 is from the RealWindowFrameSize +1 + private static readonly Padding _contentPaddingLabel = new Padding(3, 1, 3, 1); + private static readonly Padding _contentPaddingLabel2 = new Padding(8, 2, 8, 2); + private static readonly Padding _contentPaddingButtonInputControl = new Padding(0); + private static readonly Padding _contentPaddingButton12 = new Padding(1); + private static readonly Padding _contentPaddingButton3 = new Padding(1, 0, 1, 0); + private static readonly Padding _contentPaddingButton4 = new Padding(4, 3, 4, 3); + private static readonly Padding _contentPaddingButton5 = new Padding(3, 3, 3, 2); + private static readonly Padding _contentPaddingButton6 = new Padding(3); + private static readonly Padding _contentPaddingButton7 = new Padding(1, 1, 0, 1); + private static readonly Padding _contentPaddingButtonForm = new Padding(0); + private static readonly Padding _contentPaddingButtonGallery = new Padding(1, 0, 1, 0); + private static readonly Padding _contentPaddingButtonListItem = new Padding(0, -1, 0, -1); + private static readonly Padding _contentPaddingToolTip = new Padding(2); + private static readonly Padding _contentPaddingSuperTip = new Padding(4); + private static readonly Padding _contentPaddingKeyTip = new Padding(0, -1, 0, -3); + private static readonly Padding _contentPaddingContextMenuHeading = new Padding(8, 2, 8, 0); + private static readonly Padding _contentPaddingContextMenuImage = new Padding(0); + private static readonly Padding _contentPaddingContextMenuItemText = new Padding(9, 1, 7, 0); + private static readonly Padding _contentPaddingContextMenuItemTextAlt = new Padding(7, 1, 6, 0); + private static readonly Padding _contentPaddingContextMenuItemShortcutText = new Padding(3, 1, 4, 0); + private static readonly Padding _metricPaddingRibbon = new Padding(0, 1, 1, 1); + private static readonly Padding _metricPaddingRibbonAppButton = new Padding(3, 0, 3, 0); + private static readonly Padding _metricPaddingHeader = new Padding(0, 3, 1, 3); + private static readonly Padding _metricPaddingHeaderForm = new Padding(0, 3, 0, -3); // Move the Maximised Form buttons down a bit + private static readonly Padding _metricPaddingInputControl = new Padding(0, 1, 0, 1); + private static readonly Padding _metricPaddingBarInside = new Padding(3); + private static readonly Padding _metricPaddingBarTabs = new Padding(0); + private static readonly Padding _metricPaddingBarOutside = new Padding(0, 0, 0, 3); + private static readonly Padding _metricPaddingPageButtons = new Padding(1, 3, 1, 3); + + #endregion + + #region Images + + private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; + private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; + + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; + private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; + private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; + private static readonly Image _buttonSpecPrevious = GenericProfessionalImageResources.ProfessionalPreviousButton; + private static readonly Image _buttonSpecArrowLeft = GenericProfessionalImageResources.ProfessionalArrowLeftButton; + private static readonly Image _buttonSpecArrowRight = GenericProfessionalImageResources.ProfessionalArrowRightButton; + private static readonly Image _buttonSpecArrowUp = GenericProfessionalImageResources.ProfessionalArrowUpButton; + private static readonly Image _buttonSpecArrowDown = GenericProfessionalImageResources.ProfessionalArrowDownButton; + private static readonly Image _buttonSpecDropDown = GenericProfessionalImageResources.ProfessionalDropDownButton; + private static readonly Image _buttonSpecPinVertical = ProfessionalPinImageResources.ProfessionalPinVerticalButton; + private static readonly Image _buttonSpecPinHorizontal = ProfessionalPinImageResources.ProfessionalPinHorizontalButton; + private static readonly Image _buttonSpecPendantClose = Office2010MDIImageResources.Office2010ButtonMDIClose; + private static readonly Image _buttonSpecPendantMin = Office2010MDIImageResources.Office2010ButtonMDIMin; + private static readonly Image _buttonSpecPendantRestore = Office2010MDIImageResources.Office2010ButtonMDIRestore; + private static readonly Image _buttonSpecWorkspaceMaximize = ProfessionalControlBoxResources.ProfessionalMaximize; + private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; + private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; + private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + + #region Integrated Tool Bar Images + + private static readonly Image _integratedToolbarNewNormal = Office2019ToolbarImageResources.Office2019ToolbarNewNormal; + + private static readonly Image _integratedToolbarOpenNormal = Office2019ToolbarImageResources.Office2019ToolbarOpenNormal; + + private static readonly Image _integratedToolbarSaveAllNormal = Office2019ToolbarImageResources.Office2019ToolbarSaveAllNormal; + + private static readonly Image _integratedToolbarSaveAsNormal = Office2019ToolbarImageResources.Office2019ToolbarSaveAsNormal; + + private static readonly Image _integratedToolbarSaveNormal = Office2019ToolbarImageResources.Office2019ToolbarSaveNormal; + + private static readonly Image _integratedToolbarCutNormal = Office2019ToolbarImageResources.Office2019ToolbarCutNormal; + + private static readonly Image _integratedToolbarCopyNormal = Office2019ToolbarImageResources.Office2019ToolbarCopyNormal; + + private static readonly Image _integratedToolbarPasteNormal = Office2019ToolbarImageResources.Office2019ToolbarPasteNormal; + + private static readonly Image _integratedToolbarUndoNormal = Office2019ToolbarImageResources.Office2019ToolbarUndoNormal; + + private static readonly Image _integratedToolbarRedoNormal = Office2019ToolbarImageResources.Office2019ToolbarRedoNormal; + + private static readonly Image _integratedToolbarPageSetupNormal = Office2019ToolbarImageResources.Office2019ToolbarPageSetupNormal; + + private static readonly Image _integratedToolbarPrintPreviewNormal = Office2019ToolbarImageResources.Office2019ToolbarPrintPreviewNormal; + + private static readonly Image _integratedToolbarPrintNormal = Office2019ToolbarImageResources.Office2019ToolbarPrintNormal; + + private static readonly Image _integratedToolbarQuickPrintNormal = Office2019ToolbarImageResources.Office2019ToolbarQuickPrintNormal; + + #endregion + + #endregion + + #region Colours + + private static readonly Color _buttonTextTracking = Color.Black; + private static readonly Color _gridTextColor = Color.White; + private static readonly Color _disabledText2 = Color.FromArgb(78, 78, 78); + private static readonly Color _disabledText = Color.FromArgb(172, 172, 172); + private static readonly Color _disabledBack = Color.FromArgb(128, 128, 128); + private static readonly Color _disabledBack2 = Color.FromArgb(128, 128, 128); + private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); + private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); + private static readonly Color _disabledGlyphLight = Color.FromArgb(237, 237, 237); + private static readonly Color _contextCheckedTabBorder1 = Color.FromArgb(223, 119, 0); + private static readonly Color _contextCheckedTabBorder2 = Color.FromArgb(230, 190, 129); + private static readonly Color _contextCheckedTabBorder3 = Color.FromArgb(220, 202, 171); + private static readonly Color _contextCheckedTabBorder4 = Color.FromArgb(255, 252, 247); + private static readonly Color _contextTabSeparator = Color.White; + private static readonly Color _contextTextColor = Color.White; + private static readonly Color _todayBorder = Color.FromArgb(187, 85, 3); + private static readonly Color _toolTipBack1 = Color.FromArgb(255, 255, 255); + private static readonly Color _toolTipBack2 = Color.FromArgb(91, 91, 91); + private static readonly Color _toolTipBorder = Color.FromArgb(118, 118, 118); + private static readonly Color _toolTipText = Color.FromArgb(255, 255, 255); //(76, 76, 76); + private static readonly Color _contextMenuBack = Color.FromArgb(31, 31, 31); + private static readonly Color _contextMenuBorder = Color.FromArgb(134, 134, 134); + private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); + private static readonly Color _contextMenuImageBackChecked = Color.FromArgb(252, 241, 194); + private static readonly Color _contextMenuImageBorderChecked = Color.FromArgb(242, 149, 54); + private static readonly Color _formCloseBorderTracking = Color.FromArgb(155, 61, 61); + private static readonly Color _formCloseBorderPressed = Color.FromArgb(155, 61, 61); + private static readonly Color _formCloseBorderCheckedNormal = Color.FromArgb(155, 61, 61); + private static readonly Color _formCloseTracking1 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseTracking2 = Color.FromArgb(227, 97, 98); + private static readonly Color _formClosePressed1 = Color.FromArgb(242, 119, 118); + private static readonly Color _formClosePressed2 = Color.FromArgb(206, 85, 84); + private static readonly Color _formCloseChecked1 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseChecked2 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseCheckedTracking1 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseCheckedTracking2 = Color.FromArgb(255, 132, 130); + + #endregion + + + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), + Color.FromArgb(214, 220, 231), + Color.FromArgb(188, 198, 211), + Color.FromArgb(254, 254, 255), + Color.FromArgb(206, 213, 225) + ]; + + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(255, 251, 230), + Color.FromArgb(178, 178, 178), + Color.FromArgb(176, 176, 176), + Color.FromArgb(179, 179, 179), + Color.FromArgb(160, 160, 160) + ]; + + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), + Color.FromArgb(185, 185, 185), + Color.FromArgb(35, 35, 35), + Color.FromArgb(50, 50, 50), + Color.FromArgb(100, 100, 100) + ]; + + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(180, 180, 180), // Button, Disabled, Border + Color.FromArgb(187, 186, 186), // Button, Tracking, Border 1 + Color.FromArgb(139, 139, 139), // Button, Tracking, Border 2 + Color.FromArgb(30, 30, 30), // Button, Pressed, Border 1 + Color.FromArgb(4, 3, 3), // Button, Pressed, Border 2 + Color.FromArgb(30, 30, 30), // Button, Checked, Border 1 + Color.FromArgb(4, 3, 3) // Button, Checked, Border 2 + ]; + + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 + Color.FromArgb(91, 91, 91), // Button, Tracking, Back 1 + Color.FromArgb(129, 129, 129), // Button, Tracking, Back 2 + Color.FromArgb(121, 121, 121), // Button, Pressed, Back 1 + Color.FromArgb(91, 91, 91), // Button, Pressed, Back 2 + Color.FromArgb(91, 91, 91), // Button, Checked, Back 1 + Color.FromArgb(88, 88, 88), // Button, Checked, Back 2 + Color.FromArgb(15, 15, 15), // Button, Checked Tracking, Back 1 + Color.FromArgb(70, 70, 70) // Button, Checked Tracking, Back 2 + ]; + + #endregion + + #region Variables + private KryptonColorTable365BlackDarkModeAlternate? _table; + + private readonly Color[] _ribbonColours; + + private readonly Color[] _trackBarColours; + private readonly ImageList _checkBoxList; + private readonly ImageList _galleryButtonList; + private readonly Image?[] _radioButtonArray; + #endregion + + #region Constructor + /// + /// Initializes a new instance of the class. + /// + /// The scheme colours. + /// The check box list. + /// The gallery button list. + /// The radio button array. + /// The track bar colours. + protected PaletteMicrosoft365BlackDarkModeAlternateBase([DisallowNull] Color[] schemeColours, + [DisallowNull] ImageList checkBoxList, + [DisallowNull] ImageList galleryButtonList, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) + { + Debug.Assert(schemeColours != null); + Debug.Assert(checkBoxList != null); + Debug.Assert(galleryButtonList != null); + Debug.Assert(radioButtonArray != null); + + if (schemeColours != null) + { + _ribbonColours = schemeColours; + } + + if (checkBoxList != null) + { + _checkBoxList = checkBoxList; + } + + if (galleryButtonList != null) + { + _galleryButtonList = galleryButtonList; + } + + if (radioButtonArray != null) + { + _radioButtonArray = radioButtonArray; + } + + if (trackBarColours != null) + { + _trackBarColours = trackBarColours; + } + + DefineFonts(); + } + #endregion + + #region Renderer + /// + /// Gets the renderer to use for this palette. + /// + /// + /// Renderer to use for drawing palette settings. + /// + public override IRenderer GetRenderer() => KryptonManager.RenderMicrosoft365; + + #endregion + + #region Back + /// + /// Gets a value indicating if background should be drawn. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + return style switch + { + PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 => InheritBool.False, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + PaletteBackStyle.ButtonInputControl => state is PaletteState.Disabled or PaletteState.Normal ? InheritBool.False : InheritBool.True, + _ => InheritBool.True // Default to drawing the background + }; + } + + /// + /// Gets the graphics drawing hint for the background. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// PaletteGraphicsHint value. + public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteGraphicsHint.Inherit; + } + + return style switch + { + PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the first background color. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteBackStyle.GridHeaderColumnList: + case PaletteBackStyle.GridHeaderColumnCustom1: + case PaletteBackStyle.GridHeaderColumnCustom2: + case PaletteBackStyle.GridHeaderColumnCustom3: + case PaletteBackStyle.GridHeaderRowList: + case PaletteBackStyle.GridHeaderRowCustom1: + case PaletteBackStyle.GridHeaderRowCustom2: + case PaletteBackStyle.GridHeaderRowCustom3: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridListPressed1], + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridListSelected], + _ => _ribbonColours[(int)SchemeOfficeColors.GridListNormal1] + }; + case PaletteBackStyle.GridHeaderColumnSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetColPressed1], + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetColSelected1], + _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetColNormal1] + }; + case PaletteBackStyle.GridHeaderRowSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowPressed], + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowSelected], + _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowNormal] + }; + case PaletteBackStyle.GridDataCellList: + case PaletteBackStyle.GridDataCellCustom1: + case PaletteBackStyle.GridDataCellCustom2: + case PaletteBackStyle.GridDataCellCustom3: + return state == PaletteState.CheckedNormal ? _ribbonColours[(int)SchemeOfficeColors.GridDataCellSelected] : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + + case PaletteBackStyle.GridDataCellSheet: + return state == PaletteState.CheckedNormal ? _buttonBackColors[6] : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + + case PaletteBackStyle.TabHighProfile: + case PaletteBackStyle.TabStandardProfile: + case PaletteBackStyle.TabLowProfile: + case PaletteBackStyle.TabOneNote: + case PaletteBackStyle.TabCustom1: + case PaletteBackStyle.TabCustom2: + case PaletteBackStyle.TabCustom3: + switch (state) + { + case PaletteState.Disabled: + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; + + case PaletteState.Normal: + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; + + case PaletteState.Pressed: + case PaletteState.Tracking: + switch (style) + { + case PaletteBackStyle.TabLowProfile: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteBackStyle.TabHighProfile: + return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; + default: + return SystemColors.Window; + } + + case PaletteState.CheckedNormal: + case PaletteState.CheckedPressed: + case PaletteState.CheckedTracking: + if (style == PaletteBackStyle.TabHighProfile) + { + if (state == PaletteState.CheckedNormal) + { + return _buttonBackColors[6]; + } + else + { + return state == PaletteState.CheckedPressed ? _buttonBackColors[4] : _buttonBackColors[8]; + } + } + else + { + return SystemColors.Window; + } + + default: + throw DebugTools.NotImplemented(state.ToString()); + } + case PaletteBackStyle.TabDock: + case PaletteBackStyle.TabDockAutoHidden: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive1] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive1]; + + case PaletteBackStyle.HeaderCalendar: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + + case PaletteBackStyle.HeaderPrimary: + case PaletteBackStyle.HeaderCustom1: + case PaletteBackStyle.HeaderCustom2: + case PaletteBackStyle.HeaderCustom3: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1]; + + case PaletteBackStyle.HeaderDockInactive: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1]; + + case PaletteBackStyle.HeaderDockActive: + return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[6]; + + case PaletteBackStyle.HeaderSecondary: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderSecondaryBack1]; + + case PaletteBackStyle.SeparatorHighInternalProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighInternalBorder1]; + + case PaletteBackStyle.SeparatorHighProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighBorder1]; + + case PaletteBackStyle.SeparatorLowProfile: + case PaletteBackStyle.SeparatorCustom1: + case PaletteBackStyle.SeparatorCustom2: + case PaletteBackStyle.SeparatorCustom3: + case PaletteBackStyle.PanelClient: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + } + case PaletteBackStyle.PanelCustom1: + case PaletteBackStyle.PanelCustom2: + case PaletteBackStyle.PanelCustom3: + case PaletteBackStyle.ControlGroupBox: + case PaletteBackStyle.GridBackgroundList: + case PaletteBackStyle.GridBackgroundSheet: + case PaletteBackStyle.GridBackgroundCustom1: + case PaletteBackStyle.GridBackgroundCustom2: + case PaletteBackStyle.GridBackgroundCustom3: + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.PanelAlternate: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + } + case PaletteBackStyle.PanelRibbonInactive: + return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight]; + case PaletteBackStyle.FormMain: + case PaletteBackStyle.FormCustom1: + case PaletteBackStyle.FormCustom2: + case PaletteBackStyle.FormCustom3: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActiveLight]; + + case PaletteBackStyle.ControlClient: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + } + case PaletteBackStyle.ControlAlternate: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + } + case PaletteBackStyle.ControlCustom1: + case PaletteBackStyle.ControlCustom2: + case PaletteBackStyle.ControlCustom3: + // Note: This controls the input control dropdown background + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.InputControlStandalone: + case PaletteBackStyle.InputControlRibbon: + case PaletteBackStyle.InputControlCustom1: + case PaletteBackStyle.InputControlCustom2: + case PaletteBackStyle.InputControlCustom3: + if (state == PaletteState.Disabled) + { + return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; + } + else + { + return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; + } + case PaletteBackStyle.ControlRibbon: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; + case PaletteBackStyle.ControlRibbonAppMenu: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack1]; + case PaletteBackStyle.ControlToolTip: + return _toolTipBack1; + case PaletteBackStyle.ContextMenuOuter: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuSeparator: + case PaletteBackStyle.ContextMenuItemSplit: + return state switch + { + PaletteState.Tracking => _buttonBackColors[2], + _ => _contextMenuBack + }; + case PaletteBackStyle.ContextMenuInner: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuHeading: + return _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingBack]; + case PaletteBackStyle.ContextMenuItemImageColumn: + return _ribbonColours[(int)SchemeOfficeColors.ContextMenuImageColumn]; + case PaletteBackStyle.ContextMenuItemImage: + return _contextMenuImageBackChecked; + case PaletteBackStyle.ButtonForm: + return state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], + PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], + PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonFormClose: + return state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseChecked1, + PaletteState.Tracking => _formCloseTracking1, + PaletteState.CheckedTracking => _formCloseCheckedTracking1, + PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonStandalone: + case PaletteBackStyle.ButtonGallery: + case PaletteBackStyle.ButtonAlternate: + case PaletteBackStyle.ButtonLowProfile: + case PaletteBackStyle.ButtonBreadCrumb: + case PaletteBackStyle.ButtonListItem: + case PaletteBackStyle.ButtonCommand: + case PaletteBackStyle.ButtonButtonSpec: + case PaletteBackStyle.ButtonCalendarDay: + case PaletteBackStyle.ButtonCluster: + case PaletteBackStyle.ButtonCustom1: + case PaletteBackStyle.ButtonCustom2: + case PaletteBackStyle.ButtonCustom3: + case PaletteBackStyle.ButtonInputControl: + case PaletteBackStyle.ContextMenuItemHighlight: + return state switch + { + PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _disabledBack, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[6], + PaletteState.Tracking => _buttonBackColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonNavigatorStack: + case PaletteBackStyle.ButtonNavigatorOverflow: + case PaletteBackStyle.ButtonNavigatorMini: + return state switch + { + PaletteState.Disabled => _buttonBackColors[1], + PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorTrack1], + PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorPressed1], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked1], + _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] + }; + default: + throw DebugTools.NotImplemented(style.ToString()); + } + } + + /// + /// Gets the second back color. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteBackStyle.GridHeaderColumnList: + case PaletteBackStyle.GridHeaderColumnCustom1: + case PaletteBackStyle.GridHeaderColumnCustom2: + case PaletteBackStyle.GridHeaderColumnCustom3: + case PaletteBackStyle.GridHeaderRowList: + case PaletteBackStyle.GridHeaderRowCustom1: + case PaletteBackStyle.GridHeaderRowCustom2: + case PaletteBackStyle.GridHeaderRowCustom3: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridListPressed2], + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridListSelected], + _ => _ribbonColours[(int)SchemeOfficeColors.GridListNormal2] + }; + case PaletteBackStyle.GridHeaderColumnSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetColPressed2], + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetColSelected2], + _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetColNormal2] + }; + case PaletteBackStyle.GridHeaderRowSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowPressed], + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowSelected], + _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowNormal] + }; + case PaletteBackStyle.GridDataCellList: + case PaletteBackStyle.GridDataCellCustom1: + case PaletteBackStyle.GridDataCellCustom2: + case PaletteBackStyle.GridDataCellCustom3: + return state == PaletteState.CheckedNormal ? _ribbonColours[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; + + case PaletteBackStyle.GridDataCellSheet: + return state == PaletteState.CheckedNormal ? _buttonBackColors[7] : SystemColors.Window; + + case PaletteBackStyle.TabHighProfile: + case PaletteBackStyle.TabStandardProfile: + case PaletteBackStyle.TabLowProfile: + case PaletteBackStyle.TabOneNote: + case PaletteBackStyle.TabCustom1: + case PaletteBackStyle.TabCustom2: + case PaletteBackStyle.TabCustom3: + return state switch + { + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.TabDock: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], + PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.TabDockAutoHidden: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive2] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive2]; + + case PaletteBackStyle.HeaderCalendar: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + + case PaletteBackStyle.HeaderPrimary: + case PaletteBackStyle.HeaderCustom1: + case PaletteBackStyle.HeaderCustom2: + case PaletteBackStyle.HeaderCustom3: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + + case PaletteBackStyle.HeaderDockInactive: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack2]; + + case PaletteBackStyle.HeaderDockActive: + return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[7]; + + case PaletteBackStyle.HeaderSecondary: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderSecondaryBack2]; + + case PaletteBackStyle.SeparatorHighInternalProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighInternalBorder2]; + + case PaletteBackStyle.SeparatorHighProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighBorder2]; + + case PaletteBackStyle.SeparatorLowProfile: + case PaletteBackStyle.SeparatorCustom1: + case PaletteBackStyle.SeparatorCustom2: + case PaletteBackStyle.SeparatorCustom3: + case PaletteBackStyle.PanelClient: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + } + case PaletteBackStyle.PanelCustom1: + case PaletteBackStyle.PanelCustom2: + case PaletteBackStyle.PanelCustom3: + case PaletteBackStyle.ControlGroupBox: + case PaletteBackStyle.GridBackgroundList: + case PaletteBackStyle.GridBackgroundSheet: + case PaletteBackStyle.GridBackgroundCustom1: + case PaletteBackStyle.GridBackgroundCustom2: + case PaletteBackStyle.GridBackgroundCustom3: + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.PanelAlternate: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + } + case PaletteBackStyle.PanelRibbonInactive: + return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark]; + case PaletteBackStyle.FormMain: + case PaletteBackStyle.FormCustom1: + case PaletteBackStyle.FormCustom2: + case PaletteBackStyle.FormCustom3: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActiveDark]; + + case PaletteBackStyle.ControlClient: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + } + case PaletteBackStyle.ControlAlternate: + // Note: Alter these to control the backgrounds + if (state == PaletteState.Disabled) + { + return _disabledBack; + } + else + { + return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + } + case PaletteBackStyle.ControlCustom1: + case PaletteBackStyle.ControlCustom2: + case PaletteBackStyle.ControlCustom3: + // Note: This controls the input control dropdown background + return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.InputControlStandalone: + case PaletteBackStyle.InputControlRibbon: + case PaletteBackStyle.InputControlCustom1: + case PaletteBackStyle.InputControlCustom2: + case PaletteBackStyle.InputControlCustom3: + if (state == PaletteState.Disabled) + { + return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; + } + else + { + return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; + } + case PaletteBackStyle.ControlRibbon: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; + case PaletteBackStyle.ControlRibbonAppMenu: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack2]; + case PaletteBackStyle.ControlToolTip: + return _toolTipBack2; + case PaletteBackStyle.ContextMenuOuter: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuSeparator: + case PaletteBackStyle.ContextMenuItemSplit: + return state switch + { + PaletteState.Tracking => _buttonBackColors[3], + _ => _contextMenuBack + }; + case PaletteBackStyle.ContextMenuInner: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuHeading: + return _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingBack]; + case PaletteBackStyle.ContextMenuItemImageColumn: + return _ribbonColours[(int)SchemeOfficeColors.ContextMenuImageColumn]; + case PaletteBackStyle.ContextMenuItemImage: + return _contextMenuImageBackChecked; + case PaletteBackStyle.ButtonForm: + return state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], + PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], + PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonFormClose: + return state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseChecked2, + PaletteState.Tracking => _formCloseTracking2, + PaletteState.CheckedTracking => _formCloseCheckedTracking2, + PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonStandalone: + case PaletteBackStyle.ButtonGallery: + case PaletteBackStyle.ButtonAlternate: + case PaletteBackStyle.ButtonLowProfile: + case PaletteBackStyle.ButtonBreadCrumb: + case PaletteBackStyle.ButtonListItem: + case PaletteBackStyle.ButtonCommand: + case PaletteBackStyle.ButtonButtonSpec: + case PaletteBackStyle.ButtonCalendarDay: + case PaletteBackStyle.ButtonCluster: + case PaletteBackStyle.ButtonCustom1: + case PaletteBackStyle.ButtonCustom2: + case PaletteBackStyle.ButtonCustom3: + case PaletteBackStyle.ButtonInputControl: + case PaletteBackStyle.ContextMenuItemHighlight: + return state switch + { + PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] + : _buttonBackColors[7], + PaletteState.Tracking => _buttonBackColors[3], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], + PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonNavigatorStack: + case PaletteBackStyle.ButtonNavigatorOverflow: + case PaletteBackStyle.ButtonNavigatorMini: + return state switch + { + PaletteState.Disabled => _buttonBackColors[1], + PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorTrack2], + PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorPressed2], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked2], + _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] + }; + default: + throw DebugTools.NotImplemented(style.ToString()); + } + } + + /// + /// Gets the color background drawing style. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteBackStyle.HeaderForm => PaletteColorStyle.Rounding5, + PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 => PaletteColorStyle.Rounded, + PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 => PaletteColorStyle.Linear, + PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderRowSheet => PaletteColorStyle.Linear, + PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, + PaletteBackStyle.GridDataCellSheet => PaletteColorStyle.ExpertChecked, + PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 => state switch + { + PaletteState.Tracking or PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.GlassFade, + _ => PaletteColorStyle.QuarterPhase + }, + PaletteBackStyle.TabStandardProfile => state switch + { + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.Solid, + PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.GlassFade, + _ => PaletteColorStyle.QuarterPhase + }, + PaletteBackStyle.TabLowProfile => PaletteColorStyle.Solid, + PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden => PaletteColorStyle.Linear, + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.ButtonCalendarDay => PaletteColorStyle.Solid, + PaletteBackStyle.ControlRibbonAppMenu => PaletteColorStyle.Switch90, + PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit => state == PaletteState.Tracking ? PaletteColorStyle.GlassTrackingFull : PaletteColorStyle.Solid, + PaletteBackStyle.ControlToolTip => PaletteColorStyle.Linear, + PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 => PaletteColorStyle.SolidAllLine, + PaletteBackStyle.SeparatorHighProfile => PaletteColorStyle.RoundedTopLight, + PaletteBackStyle.SeparatorHighInternalProfile => PaletteColorStyle.Linear, + PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.HeaderDockActive => PaletteColorStyle.Rounded, + PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, + PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Disabled => PaletteColorStyle.Solid, + PaletteState.Normal => PaletteColorStyle.Linear, + PaletteState.Tracking => PaletteColorStyle.ExpertTracking, + PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, + PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, + PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, + PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch + { + PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.SolidAllLine, + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.ExpertSquareHighlight, + _ => PaletteColorStyle.Solid + }, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color alignment. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + => PaletteRectangleAlign.Control, + PaletteBackStyle.ControlToolTip or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color background angle. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a background image. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the background image style. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteImageStyle.Tile, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image alignment. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + #endregion + + #region Border + /// + /// Gets a value indicating if border should be drawn. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) + { + // Check for the calendar day today override + if (state == PaletteState.TodayOverride) + { + if (style == PaletteBorderStyle.ButtonCalendarDay) + { + return InheritBool.True; + } + } + + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ContextMenuInner => InheritBool.False, + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => InheritBool.True, + PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonInputControl => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a value indicating which borders to draw. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// PaletteDrawBorders value. + public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteDrawBorders.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteDrawBorders.All, + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => PaletteDrawBorders.All, + PaletteBorderStyle.ContextMenuHeading => PaletteDrawBorders.Bottom, + PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => PaletteDrawBorders.Top, + PaletteBorderStyle.ContextMenuItemImageColumn => PaletteDrawBorders.Right, + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ContextMenuInner => PaletteDrawBorders.None, + PaletteBorderStyle.HeaderForm => PaletteDrawBorders.TopLeftRight, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the graphics drawing hint for the border. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// PaletteGraphicsHint value. + public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteGraphicsHint.Inherit; + } + + return style switch + { + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteGraphicsHint.AntiAlias, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the first border color. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + { + // Check for the calendar day today override + if (state == PaletteState.TodayOverride) + { + if (style == PaletteBorderStyle.ButtonCalendarDay) + { + return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; + } + } + + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDock => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDockAutoHidden => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, + PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Tracking => _buttonBorderColors[1], + _ => _contextMenuHeadingBorder + }, + PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, + PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], + PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], + PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, + PaletteBorderStyle.ContextMenuInner => _contextMenuBack, + PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, + PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + PaletteBorderStyle.ButtonForm => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, + PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, + PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery + ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] + : _buttonBorderColors[0], + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + PaletteState.CheckedNormal => _buttonBorderColors[5], + PaletteState.Tracking => _buttonBorderColors[1], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], + PaletteState.CheckedTracking => _buttonBorderColors[3], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonInputControl => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking => _buttonBorderColors[1], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonCalendarDay => state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.CheckedNormal => _buttonBackColors[6], + PaletteState.Tracking => _buttonBackColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + PaletteState.CheckedTracking => _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the second border color. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + // Check for the calendar day today override + if (state == PaletteState.TodayOverride) + { + if (style == PaletteBorderStyle.ButtonCalendarDay) + { + return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; + } + } + + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDock => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDockAutoHidden => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], + PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, + PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Tracking => _buttonBorderColors[2], + _ => _contextMenuHeadingBorder + }, + PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, + PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] +: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], + PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], + PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, + PaletteBorderStyle.ContextMenuInner => _contextMenuBack, + PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, + PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + PaletteBorderStyle.ButtonForm => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, + PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, + PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery + ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] + : _buttonBorderColors[0], + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + PaletteState.CheckedNormal => _buttonBorderColors[6], + PaletteState.Tracking => _buttonBorderColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], + PaletteState.CheckedTracking => _buttonBorderColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonInputControl => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking => _buttonBorderColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonCalendarDay => state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.CheckedNormal => _buttonBackColors[6], + PaletteState.Tracking => _buttonBackColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + PaletteState.CheckedTracking => _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color border drawing style. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => PaletteColorStyle.Sigma, + PaletteBorderStyle.TabDock => state switch + { + PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.Solid, + _ => PaletteColorStyle.Sigma + }, + PaletteBorderStyle.TabDockAutoHidden => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.Solid, + _ => PaletteColorStyle.Sigma + }, + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.ButtonCalendarDay => PaletteColorStyle.Solid, + PaletteBorderStyle.ContextMenuItemSplit => state == PaletteState.Tracking ? PaletteColorStyle.Sigma : PaletteColorStyle.Solid, + PaletteBorderStyle.ContextMenuSeparator => PaletteColorStyle.Dashed, + PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Normal => PaletteColorStyle.Solid, + PaletteState.Disabled or PaletteState.NormalDefaultOverride => PaletteColorStyle.Solid, + _ => PaletteColorStyle.Linear + }, + PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => PaletteColorStyle.Solid, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color border alignment. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => PaletteRectangleAlign.Control, + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color border angle. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the border width. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Integer width. + public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ContextMenuInner => 0, + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => 1, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the border corner rounding. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Float rounding. + public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; + } + + return style switch + { + PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => 0, + PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ContextMenuItemImage => 1, + PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuItemHighlight => 0,//Changed 2013 + PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlGroupBox => 3, + PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => 0,//Changed 2013 + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a border image. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetBorderImage(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the border image style. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteImageStyle.Tile, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image border alignment. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + #endregion + + #region Content + /// + /// Gets a value indicating if content should be drawn. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + // Always draw everything + return InheritBool.True; + } + + /// + /// Gets a value indicating if content should be drawn with focus indication. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) + { + // By default, the focus override shows the focus! + if (state == PaletteState.FocusOverride) + { + return InheritBool.True; + } + + // We do not override the other override states + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + // By default, never show the focus indication, we let individual controls + // override this functionality as required by the controls requirements + return InheritBool.False; + } + + /// + /// Gets the horizontal relative alignment of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Center, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the vertical relative alignment of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the effect applied to drawing of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteImageEffect value. + public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageEffect.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? PaletteImageEffect.Disabled : PaletteImageEffect.Normal, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image color to remap into another color. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorMap(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color to use in place of the image map color. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image color that should be transparent. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorTransparent(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return (state == PaletteState.BoldedOverride) && (style == PaletteContentStyle.ButtonCalendarDay) ? CalendarBoldFont : null; + } + + return style switch + { + PaletteContentStyle.HeaderForm => HeaderFormFont, + PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonCommand => Header1ShortFont, + PaletteContentStyle.LabelSuperTip or PaletteContentStyle.ContextMenuHeading => SuperToolFont, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText => Header2ShortFont, + PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelBoldPanel => BoldFont, + PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelItalicControl => ItalicFont, + PaletteContentStyle.ContextMenuItemTextAlternate => SuperToolFont, + PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => TabFontNormal, + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => state switch + { + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => TabFontSelected, + _ => TabFontNormal + }, + PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => ButtonFont, + PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => ButtonFontNavigatorStack, + PaletteContentStyle.ButtonNavigatorMini => ButtonFontNavigatorMini, + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => GridFont, + PaletteContentStyle.ButtonCalendarDay => CalendarFont, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the short text by generating a new font instance. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + { + DefineFonts(); + return GetContentShortTextFont(style, state); + } + + /// + /// Gets the rendering hint for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHint.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the prefix drawing setting for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextPrefix value. + public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHotkeyPrefix.Inherit; + } + + return style switch + { + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderForm => PaletteTextHotkeyPrefix.Show, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemShortcutText => PaletteTextHotkeyPrefix.None, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the flag indicating if multiline text is allowed for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => InheritBool.True, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the text trimming to use for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextTrim value. + public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextTrim.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextTrim.EllipsisCharacter, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, + PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.HeaderCalendar => PaletteRelativeAlign.Center, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, + PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Far, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the vertical relative alignment of the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + PaletteContentStyle.LabelSuperTip => PaletteRelativeAlign.Near, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of multiline short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the first back color for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) + { + // Always work out value for an override state + if (CommonHelper.IsOverrideState(state)) + { + return style switch + { + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl => state switch + { + PaletteState.LinkNotVisitedOverride => _ribbonColours[ + (int)SchemeOfficeColors.LinkNotVisitedOverrideControl], + PaletteState.LinkVisitedOverride => _ribbonColours[ + (int)SchemeOfficeColors.LinkVisitedOverrideControl], + PaletteState.LinkPressedOverride => _ribbonColours[ + (int)SchemeOfficeColors.LinkPressedOverrideControl], + _ => GlobalStaticValues.EMPTY_COLOR + }, + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch + { + PaletteState.LinkNotVisitedOverride => _ribbonColours[ + (int)SchemeOfficeColors.LinkNotVisitedOverridePanel], + PaletteState.LinkVisitedOverride => _ribbonColours[ + (int)SchemeOfficeColors.LinkVisitedOverridePanel], + PaletteState.LinkPressedOverride => _ribbonColours[ + (int)SchemeOfficeColors.LinkPressedOverridePanel], + _ => GlobalStaticValues.EMPTY_COLOR + }, + _ => GlobalStaticValues.EMPTY_COLOR + }; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl) && + (style != PaletteContentStyle.ButtonCalendarDay)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state switch + { + PaletteState.Tracking => _buttonTextTracking, + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + }, + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonCalendarDay => state switch + { + PaletteState.Tracking => _buttonTextTracking, + PaletteState.Disabled => _disabledText2, + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] +: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal +? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the second back color for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl) && + (style != PaletteContentStyle.ButtonCalendarDay)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal +? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonCalendarDay => state switch + { + PaletteState.Disabled => _disabledText2, + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] +: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal +? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color drawing style for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color alignment for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color background angle for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a background image for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetContentShortTextImage(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the background image style. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteImageStyle.TileFlipXY, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image alignment for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return (state == PaletteState.BoldedOverride) && (style == PaletteContentStyle.ButtonCalendarDay) ? CalendarBoldFont : null; + } + + return style switch + { + PaletteContentStyle.ButtonCalendarDay => CalendarFont, + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => GridFont, + PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => Header1LongFont, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderSecondary => Header2LongFont, + PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => TabFontNormal, + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => state switch + { + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => TabFontSelected, + _ => TabFontNormal + }, + PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => ButtonFont, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the long text by generating a new font instance. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + { + DefineFonts(); + return GetContentLongTextFont(style, state); + } + + /// + /// Gets the rendering hint for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHint.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the flag indicating if multiline text is allowed for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => InheritBool.True, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the text trimming to use for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextTrim value. + public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextTrim.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextTrim.EllipsisCharacter, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the prefix drawing setting for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextPrefix value. + public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHotkeyPrefix.Inherit; + } + + return style switch + { + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteTextHotkeyPrefix.Show, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHotkeyPrefix.None, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextAlternate => PaletteRelativeAlign.Near, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Far, + PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, + PaletteContentStyle.ButtonCalendarDay => PaletteRelativeAlign.Far, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the vertical relative alignment of the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextAlternate => PaletteRelativeAlign.Far, + PaletteContentStyle.LabelSuperTip => PaletteRelativeAlign.Center, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of multiline long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ButtonCommand => PaletteRelativeAlign.Near, + PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Far, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the first back color for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal +? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonCalendarDay => state switch + { + PaletteState.Disabled => _disabledText2, + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] +: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal +? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the second back color for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal +? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonCalendarDay => state switch + { + PaletteState.Disabled => _disabledText2, + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled +? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] +: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal +? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color drawing style for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color alignment for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color background angle for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a background image for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetContentLongTextImage(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the background image style for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteImageStyle.TileFlipXY, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image alignment for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the padding between the border and content drawing. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Padding value. + public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return CommonHelper.InheritPadding; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => _contentPaddingGrid, + PaletteContentStyle.HeaderForm => _contentPaddingHeaderForm, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _contentPaddingHeader1, + PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive => _contentPaddingDock, + PaletteContentStyle.HeaderSecondary => _contentPaddingHeader2, + PaletteContentStyle.HeaderCalendar => _contentPaddingCalendar, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 => _contentPaddingLabel, + PaletteContentStyle.LabelGroupBoxCaption => _contentPaddingLabel2, + PaletteContentStyle.ContextMenuItemTextStandard => _contentPaddingContextMenuItemText, + PaletteContentStyle.ContextMenuItemTextAlternate => _contentPaddingContextMenuItemTextAlt, + PaletteContentStyle.ContextMenuItemShortcutText => _contentPaddingContextMenuItemShortcutText, + PaletteContentStyle.ContextMenuItemImage => _contentPaddingContextMenuImage, + PaletteContentStyle.LabelToolTip => _contentPaddingToolTip, + PaletteContentStyle.LabelSuperTip => _contentPaddingSuperTip, + PaletteContentStyle.LabelKeyTip => _contentPaddingKeyTip, + PaletteContentStyle.ContextMenuHeading => _contentPaddingContextMenuHeading, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => InputControlPadding, + PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => _contentPaddingButton12, + PaletteContentStyle.ButtonInputControl or PaletteContentStyle.ButtonCalendarDay => _contentPaddingButtonInputControl, + PaletteContentStyle.ButtonButtonSpec => _contentPaddingButton3, + PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => _contentPaddingButton4, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => _contentPaddingButtonForm, + PaletteContentStyle.ButtonGallery => _contentPaddingButtonGallery, + PaletteContentStyle.ButtonListItem => _contentPaddingButtonListItem, + PaletteContentStyle.ButtonBreadCrumb => _contentPaddingButton6, + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => _contentPaddingButton5, + PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => _contentPaddingButton7, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the padding between adjacent content items. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Integer value. + public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 1, + PaletteContentStyle.LabelSuperTip => 5, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + #endregion + + #region Metric + /// + /// Gets an integer metric value. + /// + /// Palette value should be applicable to this state. + /// Requested metric. + /// Integer value. + public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) + { + switch (metric) + { + case PaletteMetricInt.PageButtonInset: + case PaletteMetricInt.RibbonTabGap: + case PaletteMetricInt.HeaderButtonEdgeInsetCalendar: + return 2; + case PaletteMetricInt.CheckButtonGap: + return 5; + case PaletteMetricInt.HeaderButtonEdgeInsetForm: + return 9; // Needs to be the RealWindowBorderWidth Offset - No idea how to get it at this point + case PaletteMetricInt.HeaderButtonEdgeInsetInputControl: + return 1; + case PaletteMetricInt.HeaderButtonEdgeInsetPrimary: + case PaletteMetricInt.HeaderButtonEdgeInsetSecondary: + case PaletteMetricInt.HeaderButtonEdgeInsetDockInactive: + case PaletteMetricInt.HeaderButtonEdgeInsetDockActive: + case PaletteMetricInt.HeaderButtonEdgeInsetCustom1: + case PaletteMetricInt.HeaderButtonEdgeInsetCustom2: + case PaletteMetricInt.HeaderButtonEdgeInsetCustom3: + case PaletteMetricInt.BarButtonEdgeOutside: + case PaletteMetricInt.BarButtonEdgeInside: + return 3; + case PaletteMetricInt.None: + return 0; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); + break; + } + + return -1; + } + + /// + /// Gets a boolean metric value. + /// + /// Palette value should be applicable to this state. + /// Requested metric. + /// InheritBool value. + public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) + { + switch (metric) + { + case PaletteMetricBool.HeaderGroupOverlay: + case PaletteMetricBool.SplitWithFading: + case PaletteMetricBool.RibbonTabsSpareCaption: + return InheritBool.True; + case PaletteMetricBool.TreeViewLines: + return InheritBool.False; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); + break; + } + + return InheritBool.Inherit; + } + + /// + /// Gets a padding metric value. + /// + /// Palette value should be applicable to this state. + /// Requested metric. + /// Padding value. + public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) + { + switch (metric) + { + case PaletteMetricPadding.PageButtonPadding: + return _metricPaddingPageButtons; + case PaletteMetricPadding.BarPaddingTabs: + return _metricPaddingBarTabs; + case PaletteMetricPadding.BarPaddingInside: + case PaletteMetricPadding.BarPaddingOnly: + return _metricPaddingBarInside; + case PaletteMetricPadding.BarPaddingOutside: + return _metricPaddingBarOutside; + case PaletteMetricPadding.HeaderButtonPaddingForm: + return _metricPaddingHeaderForm; + case PaletteMetricPadding.RibbonButtonPadding: + return _metricPaddingRibbon; + case PaletteMetricPadding.RibbonAppButton: + return _metricPaddingRibbonAppButton; + case PaletteMetricPadding.HeaderButtonPaddingInputControl: + return _metricPaddingInputControl; + case PaletteMetricPadding.HeaderButtonPaddingPrimary: + case PaletteMetricPadding.HeaderButtonPaddingSecondary: + case PaletteMetricPadding.HeaderButtonPaddingDockInactive: + case PaletteMetricPadding.HeaderButtonPaddingDockActive: + case PaletteMetricPadding.HeaderButtonPaddingCustom1: + case PaletteMetricPadding.HeaderButtonPaddingCustom2: + case PaletteMetricPadding.HeaderButtonPaddingCustom3: + case PaletteMetricPadding.HeaderButtonPaddingCalendar: + case PaletteMetricPadding.BarButtonPadding: + return _metricPaddingHeader; + case PaletteMetricPadding.HeaderGroupPaddingPrimary: + case PaletteMetricPadding.HeaderGroupPaddingSecondary: + case PaletteMetricPadding.HeaderGroupPaddingDockInactive: + case PaletteMetricPadding.HeaderGroupPaddingDockActive: + case PaletteMetricPadding.SeparatorPaddingLowProfile: + case PaletteMetricPadding.SeparatorPaddingHighInternalProfile: + case PaletteMetricPadding.SeparatorPaddingHighProfile: + case PaletteMetricPadding.SeparatorPaddingCustom1: + case PaletteMetricPadding.SeparatorPaddingCustom2: + case PaletteMetricPadding.SeparatorPaddingCustom3: + case PaletteMetricPadding.ContextMenuItemHighlight: + case PaletteMetricPadding.ContextMenuItemsCollection: + case PaletteMetricPadding.ContextMenuItemOuter: + return Padding.Empty; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); + break; + } + + return Padding.Empty; + } + #endregion + + #region Images + /// + /// Gets a tree view image appropriate for the provided state. + /// + /// Is the node expanded + /// Appropriate image for drawing; otherwise null. + public override Image? GetTreeViewImage(bool expanded) => expanded ? _treeCollapseBlack : _treeExpandWhite; + + /// + /// Gets a check box image appropriate for the provided state. + /// + /// Is the check box enabled. + /// Is the check box checked/unchecked/indeterminate. + /// Is the check box being hot tracked. + /// Is the check box being pressed. + /// Appropriate image for drawing; otherwise null. + public override Image GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) + { + switch (checkState) + { + default: + case CheckState.Unchecked: + if (!enabled) + { + return _checkBoxList.Images[0]; + } + else if (pressed) + { + return _checkBoxList.Images[3]; + } + else + { + return tracking ? _checkBoxList.Images[2] : _checkBoxList.Images[1]; + } + + case CheckState.Checked: + if (!enabled) + { + return _checkBoxList.Images[4]; + } + else if (pressed) + { + return _checkBoxList.Images[7]; + } + else + { + return tracking ? _checkBoxList.Images[6] : _checkBoxList.Images[5]; + } + + case CheckState.Indeterminate: + if (!enabled) + { + return _checkBoxList.Images[8]; + } + else if (pressed) + { + return _checkBoxList.Images[11]; + } + else + { + return tracking ? _checkBoxList.Images[10] : _checkBoxList.Images[9]; + } + } + } + + /// + /// Gets a check box image appropriate for the provided state. + /// + /// Is the radio button enabled. + /// Is the radio button checked. + /// Is the radio button being hot tracked. + /// Is the radio button being pressed. + /// Appropriate image for drawing; otherwise null. + public override Image? GetRadioButtonImage(bool enabled, bool checkState, bool tracking, bool pressed) + { + if (!checkState) + { + if (!enabled) + { + return _radioButtonArray[0]; + } + else if (pressed) + { + return _radioButtonArray[3]; + } + else + { + return tracking ? _radioButtonArray[2] : _radioButtonArray[1]; + } + } + else + { + if (!enabled) + { + return _radioButtonArray[4]; + } + else if (pressed) + { + return _radioButtonArray[7]; + } + else + { + return tracking ? _radioButtonArray[6] : _radioButtonArray[5]; + } + } + } + + /// + /// Gets a drop down button image appropriate for the provided state. + /// + /// PaletteState for which image is required. + public override Image? GetDropDownButtonImage(PaletteState state) => _disabledDropDown; + + /// + /// Gets a checked image appropriate for a context menu item. + /// + /// Appropriate image for drawing; otherwise null. + public override Image? GetContextMenuCheckedImage() => _contextMenuChecked; + + /// + /// Gets a indeterminate image appropriate for a context menu item. + /// + /// Appropriate image for drawing; otherwise null. + public override Image? GetContextMenuIndeterminateImage() => _contextMenuIndeterminate; + + /// + /// Gets a check box image appropriate for the provided state. + /// + /// Enum of the button to fetch. + /// State of the button to fetch. + /// Appropriate image for drawing; otherwise null. + public override Image GetGalleryButtonImage(PaletteRibbonGalleryButton button, PaletteState state) => button switch + { + PaletteRibbonGalleryButton.Up => _galleryButtonList.Images[1], + PaletteRibbonGalleryButton.DropDown => _galleryButtonList.Images[2], + _ => _galleryButtonList.Images[0] + }; + #endregion + + #region ButtonSpec + + /// + /// Gets the image to display for the button. + /// + /// Style of button spec. + /// State for which image is required. + /// Image value. + public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, + PaletteState state) + { + switch (style) + { + case PaletteButtonSpecStyle.Close: + return _buttonSpecClose; + case PaletteButtonSpecStyle.Context: + return _buttonSpecContext; + case PaletteButtonSpecStyle.Next: + return _buttonSpecNext; + case PaletteButtonSpecStyle.Previous: + return _buttonSpecPrevious; + case PaletteButtonSpecStyle.ArrowLeft: + return _buttonSpecArrowLeft; + case PaletteButtonSpecStyle.ArrowRight: + return _buttonSpecArrowRight; + case PaletteButtonSpecStyle.ArrowUp: + return _buttonSpecArrowUp; + case PaletteButtonSpecStyle.ArrowDown: + return _buttonSpecArrowDown; + case PaletteButtonSpecStyle.DropDown: + return _buttonSpecDropDown; + case PaletteButtonSpecStyle.PinVertical: + return _buttonSpecPinVertical; + case PaletteButtonSpecStyle.PinHorizontal: + return _buttonSpecPinHorizontal; + case PaletteButtonSpecStyle.PendantClose: + return _buttonSpecPendantClose; + case PaletteButtonSpecStyle.PendantMin: + return _buttonSpecPendantMin; + case PaletteButtonSpecStyle.PendantRestore: + return _buttonSpecPendantRestore; + case PaletteButtonSpecStyle.WorkspaceMaximize: + return _buttonSpecWorkspaceMaximize; + case PaletteButtonSpecStyle.WorkspaceRestore: + return _buttonSpecWorkspaceRestore; + case PaletteButtonSpecStyle.RibbonMinimize: + return _buttonSpecRibbonMinimize; + case PaletteButtonSpecStyle.RibbonExpand: + return _buttonSpecRibbonExpand; + case PaletteButtonSpecStyle.New: + return _integratedToolbarNewNormal; + case PaletteButtonSpecStyle.Open: + return _integratedToolbarOpenNormal; + case PaletteButtonSpecStyle.Save: + return _integratedToolbarSaveNormal; + case PaletteButtonSpecStyle.SaveAs: + return _integratedToolbarSaveAsNormal; + case PaletteButtonSpecStyle.SaveAll: + return _integratedToolbarSaveAllNormal; + case PaletteButtonSpecStyle.Cut: + return _integratedToolbarCutNormal; + case PaletteButtonSpecStyle.Copy: + return _integratedToolbarCopyNormal; + case PaletteButtonSpecStyle.Paste: + return _integratedToolbarPasteNormal; + case PaletteButtonSpecStyle.Undo: + return _integratedToolbarUndoNormal; + case PaletteButtonSpecStyle.Redo: + return _integratedToolbarRedoNormal; + case PaletteButtonSpecStyle.PageSetup: + return _integratedToolbarPageSetupNormal; + case PaletteButtonSpecStyle.PrintPreview: + return _integratedToolbarPrintPreviewNormal; + case PaletteButtonSpecStyle.Print: + return _integratedToolbarPrintNormal; + case PaletteButtonSpecStyle.QuickPrint: + return _integratedToolbarQuickPrintNormal; + case PaletteButtonSpecStyle.Generic: + return null; + default: + // Should never happen! + Debug.Assert(false); + throw DebugTools.NotImplemented(style.ToString()); + } + } + + #endregion + + #region RibbonGeneral + /// + /// Gets the ribbon shape that should be used. + /// + /// Ribbon shape value. + public override PaletteRibbonShape GetRibbonShape() => PaletteRibbonShape.Microsoft365; + + /// + /// Gets the text alignment for the ribbon context text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override PaletteRelativeAlign GetRibbonContextTextAlign(PaletteState state) => PaletteRelativeAlign.Center; + + /// + /// Gets the font for the ribbon context text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; + + /// + /// Gets the color for the ribbon context text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override Color GetRibbonContextTextColor(PaletteState state) => _contextTextColor; + + /// + /// Gets the dark disabled color used for ribbon glyphs. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDisabledDark(PaletteState state) => _disabledGlyphDark; + + /// + /// Gets the light disabled color used for ribbon glyphs. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDisabledLight(PaletteState state) => _disabledGlyphLight; + + /// + /// Gets the color for the drop arrow light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDropArrowLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowLight]; + + /// + /// Gets the color for the drop arrow dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDropArrowDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowDark]; + + /// + /// Gets the color for the dialog launcher dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupDialogDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogDark]; + + /// + /// Gets the color for the dialog launcher light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupDialogLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogLight]; + + /// + /// Gets the color for the group separator dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorDark]; + + /// + /// Gets the color for the group separator light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorLight]; + + /// + /// Gets the color for the minimize bar dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonMinimizeBarDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarDark]; + + /// + /// Gets the color for the minimize bar light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonMinimizeBarLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarLight]; + + /// + /// Gets the color for the tab separator. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabSeparatorColor(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonTabSeparatorColor]; + + /// + /// Gets the color for the tab context separators. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabSeparatorContextColor(PaletteState state) => _contextTabSeparator; + + /// + /// Gets the font for the ribbon text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; + + /// + /// Gets the rendering hint for the ribbon font. + /// + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetRibbonTextHint(PaletteState state) => PaletteTextHint.ClearTypeGridFit; + + /// + /// Gets the color for the extra QAT button dark content color. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonQATButtonDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonDark]; + + /// + /// Gets the color for the extra QAT button light content color. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonQATButtonLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonLight]; + + #endregion + + #region RibbonBack + /// + /// Gets the method used to draw the background of a ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// PaletteRibbonBackStyle value. + public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + return PaletteRibbonColorStyle.Solid; + case PaletteRibbonBackStyle.RibbonAppMenuInner: + return PaletteRibbonColorStyle.RibbonAppMenuInner; + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return PaletteRibbonColorStyle.RibbonAppMenuOuter; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.CheckedNormal + ? PaletteRibbonColorStyle.RibbonQATMinibarDouble + : PaletteRibbonColorStyle.RibbonQATMinibarSingle; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return PaletteRibbonColorStyle.RibbonQATFullbarSquare; + case PaletteRibbonBackStyle.RibbonQATOverflow: + return PaletteRibbonColorStyle.RibbonQATOverflow; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + return PaletteRibbonColorStyle.LinearBorder; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + return state == PaletteState.Pressed ? PaletteRibbonColorStyle.Empty : PaletteRibbonColorStyle.Linear; + + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + switch (state) + { + case PaletteState.Normal: + case PaletteState.ContextNormal: + return PaletteRibbonColorStyle.RibbonGroupNormalBorderSep; + case PaletteState.Tracking: + case PaletteState.ContextTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepTrackingLight; + case PaletteState.Pressed: + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepPressedLight; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + return PaletteRibbonColorStyle.Empty; + case PaletteRibbonBackStyle.RibbonGroupArea: + switch (state) + { + case PaletteState.Normal: + case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: + case PaletteState.ContextCheckedNormal: + return PaletteRibbonColorStyle.Empty; + case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; + case PaletteState.FocusOverride: + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Disabled: + case PaletteState.Normal: + return PaletteRibbonColorStyle.Empty; + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return PaletteRibbonColorStyle.RibbonTabTracking2010; + case PaletteState.FocusOverride: + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonTabSelected2010; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return PaletteRibbonColorStyle.Empty; + } + + /// + /// Gets the first background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonGalleryBack: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackTracking], + _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackNormal] + }; + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return state switch + { + PaletteState.Disabled => _disabledBorder, + _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder] + }; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonMenuDocsBack]; + case PaletteRibbonBackStyle.RibbonAppMenuInner: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonInner1]; + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter1]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini1] + : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini1I]; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar1]; + case PaletteRibbonBackStyle.RibbonQATOverflow: + return _ribbonColours[(int)SchemeOfficeColors.RibbonQATOverflow1]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameBorder1]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + switch (state) + { + case PaletteState.Normal: + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextNormal: + case PaletteState.ContextTracking: + case PaletteState.ContextPressed: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder1]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[0]; + case PaletteState.Tracking: + return _appButtonTrack[0]; + case PaletteState.Pressed: + return _appButtonPressed[0]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking1]; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected1]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder1; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the second background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonAppMenuInner: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonInner2]; + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter2]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini2] + : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini2I]; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar2]; + case PaletteRibbonBackStyle.RibbonQATOverflow: + return _ribbonColours[(int)SchemeOfficeColors.RibbonQATOverflow2]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameBorder2]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside2]; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + switch (state) + { + case PaletteState.Normal: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitle2]; + case PaletteState.ContextNormal: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleContext2]; + case PaletteState.Tracking: + case PaletteState.ContextTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleTracking2]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + switch (state) + { + case PaletteState.Normal: + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextNormal: + case PaletteState.ContextTracking: + case PaletteState.ContextPressed: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder2]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[1]; + case PaletteState.Tracking: + return _appButtonTrack[1]; + case PaletteState.Pressed: + return _appButtonPressed[1]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking2]; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedTracking: + case PaletteState.ContextCheckedNormal: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected2]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder2; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the third background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter3]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini3] + : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini3I]; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar3]; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder3]; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonAppMenuInner: + case PaletteRibbonBackStyle.RibbonQATOverflow: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[2]; + case PaletteState.Tracking: + return _appButtonTrack[2]; + case PaletteState.Pressed: + return _appButtonPressed[2]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking3]; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected3]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder3; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the fourth background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini4] + : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini4I]; + + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder4]; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonAppMenuInner: + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + case PaletteRibbonBackStyle.RibbonQATFullbar: + case PaletteRibbonBackStyle.RibbonQATOverflow: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[3]; + case PaletteState.Tracking: + return _appButtonTrack[3]; + case PaletteState.Pressed: + return _appButtonPressed[3]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking4]; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder4; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the fifth background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonAppMenuInner: + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonQATFullbar: + case PaletteRibbonBackStyle.RibbonQATOverflow: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] + : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5I]; + + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[4]; + case PaletteState.Tracking: + return _appButtonTrack[4]; + case PaletteState.Pressed: + return _appButtonPressed[4]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Disabled: + return _disabledText; + case PaletteState.Pressed: + return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking2]; + case PaletteState.Tracking: + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + case PaletteState.FocusOverride: + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + #endregion + + #region RibbonText + /// + /// Gets the =color for the item text. + /// + /// Text style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonTextStyle.RibbonAppMenuDocsTitle: + case PaletteRibbonTextStyle.RibbonAppMenuDocsEntry: + return _ribbonColours[(int)SchemeOfficeColors.AppButtonMenuDocsText]; + case PaletteRibbonTextStyle.RibbonGroupNormalTitle: + return state switch + { + PaletteState.Disabled => _disabledText, + _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleText] + }; + case PaletteRibbonTextStyle.RibbonTab: + return state switch + { + PaletteState.Disabled => _disabledText, + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.ContextCheckedNormal or PaletteState.ContextCheckedTracking or PaletteState.FocusOverride => _ribbonColours[(int)SchemeOfficeColors.RibbonTabTextChecked], + _ => _ribbonColours[(int)SchemeOfficeColors.RibbonTabTextNormal] + }; + case PaletteRibbonTextStyle.RibbonGroupCollapsedText: + return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; + case PaletteRibbonTextStyle.RibbonGroupButtonText: + case PaletteRibbonTextStyle.RibbonGroupLabelText: + case PaletteRibbonTextStyle.RibbonGroupCheckBoxText: + case PaletteRibbonTextStyle.RibbonGroupRadioButtonText: + return state == PaletteState.Disabled ? _disabledText : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; + + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + #endregion + + #region ElementColor + /// + /// Gets the first element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor1(PaletteElement element, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (element) + { + case PaletteElement.TrackBarTick: + return _trackBarColours[0]; + case PaletteElement.TrackBarTrack: + return _trackBarColours[1]; + case PaletteElement.TrackBarPosition: + return state switch + { + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, + _ => _trackBarColours[4] + }; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the second element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor2(PaletteElement element, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (element) + { + case PaletteElement.TrackBarTick: + return _trackBarColours[0]; + case PaletteElement.TrackBarTrack: + return _trackBarColours[2]; + case PaletteElement.TrackBarPosition: + return state switch + { + PaletteState.Disabled => ControlPaint.Light(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder]), + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], + PaletteState.Pressed => _buttonBorderColors[3], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the third element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor3(PaletteElement element, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (element) + { + case PaletteElement.TrackBarTick: + return _trackBarColours[0]; + case PaletteElement.TrackBarTrack: + return _trackBarColours[3]; + case PaletteElement.TrackBarPosition: + return state switch + { + PaletteState.Disabled => ControlPaint.LightLight( + _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => ControlPaint.Light( + _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), + PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the fourth element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor4(PaletteElement element, PaletteState state) + { + switch (element) + { + case PaletteElement.TrackBarTick: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + return _trackBarColours[0]; + + case PaletteElement.TrackBarTrack: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + return _trackBarColours[3]; + + case PaletteElement.TrackBarPosition: + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + return state switch + { + PaletteState.Disabled => ControlPaint.LightLight(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], + PaletteState.Pressed => _buttonBackColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the fifth element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor5(PaletteElement element, PaletteState state) + { + switch (element) + { + case PaletteElement.TrackBarTick: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return _trackBarColours[0]; + case PaletteElement.TrackBarTrack: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return _trackBarColours[3]; + case PaletteElement.TrackBarPosition: + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return state switch + { + PaletteState.Disabled => ControlPaint.LightLight(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], + PaletteState.Pressed => _buttonBackColors[5], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + #endregion + + #region ColorTable + /// + /// Gets access to the color table instance. + /// + public override KryptonColorTable ColorTable + { + get + { + _table ??= new KryptonColorTable365BlackDarkModeAlternate(_ribbonColours, InheritBool.True, this); + + return _table; + } + } + #endregion + + #region OnUserPreferenceChanged + /// + /// Handle a change in the user preferences. + /// + /// Source of event. + /// Event data. + protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) + { + // Remove the current table, so it gets regenerated when next requested + _table = null; + + // Update fonts to reflect any change in system settings + DefineFonts(); + + base.OnUserPreferenceChanged(sender, e); + } + #endregion + } + #endregion + + #region Class: KryptonColorTable365BlackDarkModeAlternate + /// + /// Provide KryptonColorTable365BlackDarkModeAlternate values using an array of Color values as the source. + /// + public class KryptonColorTable365BlackDarkModeAlternate : KryptonColorTable + { + #region Static Fields + private static readonly Color _contextMenuBackground = Color.FromArgb(31, 31, 31); + private static readonly Color _menuBorder = Color.FromArgb(167, 171, 176); + private static readonly Color _checkBackground = Color.FromArgb(252, 241, 194); + private static readonly Color _buttonSelectedBegin = Color.FromArgb(91, 91, 91); + private static readonly Color _buttonSelectedEnd = Color.FromArgb(89, 89, 89); + private static readonly Color _buttonPressedBegin = Color.FromArgb(91, 91, 91); + private static readonly Color _buttonPressedEnd = Color.FromArgb(91, 91, 91); + private static readonly Color _buttonCheckedBegin = Color.FromArgb(91, 91, 91); + private static readonly Color _buttonCheckedEnd = Color.FromArgb(91, 91, 91); + private static readonly Color _menuItemSelectedBegin = Color.FromArgb(91, 91, 91); + private static readonly Color _menuItemSelectedEnd = Color.FromArgb(89, 89, 89); + private static Font _menuToolFont; + private static Font _statusFont; + #endregion + + #region Instance Fields + private readonly Color[] _colors; + private readonly InheritBool _roundedEdges; + #endregion + + #region Identity + [SecuritySafeCritical] + static KryptonColorTable365BlackDarkModeAlternate() + { + // Get the font settings from the system + DefineFonts(); + + // We need to notice when system color settings change + SystemEvents.UserPreferenceChanged += OnUserPreferenceChanged; + } + + /// + /// Initialize a new instance of the KryptonColorTable2010 class. + /// + /// Source of + /// Should have rounded edges. + /// Associated palette instance. + public KryptonColorTable365BlackDarkModeAlternate([DisallowNull] Color[] colors, + InheritBool roundedEdges, PaletteBase palette) + : base(palette) + { + Debug.Assert(colors != null); + if (colors != null) + { + _colors = colors; + } + _roundedEdges = roundedEdges; + } + #endregion + + #region Colors + /// + /// Gets the raw set of colors. + /// + public Color[] Colors => _colors; + + #endregion + + #region RoundedEdges + /// + /// Gets a value indicating if rounded edges are required. + /// + public override InheritBool UseRoundedEdges => _roundedEdges; + + #endregion + + #region ButtonPressed + #region ButtonPressedBorder + /// + /// Gets the border color for a button being pressed. + /// + public override Color ButtonPressedBorder => _colors[(int)SchemeOfficeColors.ButtonBorder]; + + #endregion + + #region ButtonPressedGradientBegin + /// + /// Gets the background starting color for a button being pressed. + /// + public override Color ButtonPressedGradientBegin => _buttonPressedBegin; + + #endregion + + #region ButtonPressedGradientMiddle + /// + /// Gets the background middle color for a button being pressed. + /// + public override Color ButtonPressedGradientMiddle => _buttonPressedBegin; + + #endregion + + #region ButtonPressedGradientEnd + /// + /// Gets the background ending color for a button being pressed. + /// + public override Color ButtonPressedGradientEnd => _buttonPressedEnd; + + #endregion + + #region ButtonPressedHighlight + /// + /// Gets the highlight background for a pressed button. + /// + public override Color ButtonPressedHighlight => _buttonPressedBegin; + + #endregion + + #region ButtonPressedHighlightBorder + /// + /// Gets the highlight border for a pressed button. + /// + public override Color ButtonPressedHighlightBorder => _colors[(int)SchemeOfficeColors.ButtonBorder]; + + #endregion + #endregion + + #region ButtonSelected + #region ButtonSelectedBorder + /// + /// Gets the border color for a button being selected. + /// + public override Color ButtonSelectedBorder => _colors[(int)SchemeOfficeColors.ButtonBorder]; + + #endregion + + #region ButtonSelectedGradientBegin + /// + /// Gets the background starting color for a button being selected. + /// + public override Color ButtonSelectedGradientBegin => _buttonSelectedBegin; + + #endregion + + #region ButtonSelectedGradientMiddle + /// + /// Gets the background middle color for a button being selected. + /// + public override Color ButtonSelectedGradientMiddle => _buttonSelectedBegin; + + #endregion + + #region ButtonSelectedGradientEnd + /// + /// Gets the background ending color for a button being selected. + /// + public override Color ButtonSelectedGradientEnd => _buttonSelectedEnd; + + #endregion + + #region ButtonSelectedHighlight + /// + /// Gets the highlight background for a selected button. + /// + public override Color ButtonSelectedHighlight => _buttonSelectedBegin; + + #endregion + + #region ButtonSelectedHighlightBorder + /// + /// Gets the highlight border for a selected button. + /// + public override Color ButtonSelectedHighlightBorder => _colors[(int)SchemeOfficeColors.ButtonBorder]; + + #endregion + #endregion + + #region ButtonChecked + #region ButtonCheckedGradientBegin + /// + /// Gets the background starting color for a checked button. + /// + public override Color ButtonCheckedGradientBegin => _buttonCheckedBegin; + + #endregion + + #region ButtonCheckedGradientMiddle + /// + /// Gets the background middle color for a checked button. + /// + public override Color ButtonCheckedGradientMiddle => _buttonCheckedBegin; + + #endregion + + #region ButtonCheckedGradientEnd + /// + /// Gets the background ending color for a checked button. + /// + public override Color ButtonCheckedGradientEnd => _buttonCheckedEnd; + + #endregion + + #region ButtonCheckedHighlight + /// + /// Gets the highlight background for a checked button. + /// + public override Color ButtonCheckedHighlight => _buttonCheckedBegin; + + #endregion + + #region ButtonCheckedHighlightBorder + /// + /// Gets the highlight border for a checked button. + /// + public override Color ButtonCheckedHighlightBorder => _colors[(int)SchemeOfficeColors.ButtonBorder]; + + #endregion + #endregion + + #region Check + #region CheckBackground + /// + /// Get background of the check mark area. + /// + public override Color CheckBackground => _checkBackground; + + #endregion + + #region CheckBackground + /// + /// Get background of a pressed check mark area. + /// + public override Color CheckPressedBackground => _checkBackground; + + #endregion + + #region CheckBackground + /// + /// Get background of a selected check mark area. + /// + public override Color CheckSelectedBackground => _checkBackground; + + #endregion + #endregion + + #region Grip + #region GripLight + /// + /// Gets the light color used to draw grips. + /// + public override Color GripLight => _colors[(int)SchemeOfficeColors.GripLight]; + + #endregion + + #region GripDark + /// + /// Gets the dark color used to draw grips. + /// + public override Color GripDark => _colors[(int)SchemeOfficeColors.GripDark]; + + #endregion + #endregion + + #region ImageMargin + #region ImageMarginGradientBegin + /// + /// Gets the starting color for the context menu margin. + /// + public override Color ImageMarginGradientBegin => _colors[(int)SchemeOfficeColors.ImageMargin]; + + #endregion + + #region ImageMarginGradientMiddle + /// + /// Gets the middle color for the context menu margin. + /// + public override Color ImageMarginGradientMiddle => _colors[(int)SchemeOfficeColors.ImageMargin]; + + #endregion + + #region ImageMarginGradientEnd + /// + /// Gets the ending color for the context menu margin. + /// + public override Color ImageMarginGradientEnd => _colors[(int)SchemeOfficeColors.ImageMargin]; + + #endregion + + #region ImageMarginRevealedGradientBegin + /// + /// Gets the starting color for the context menu margin revealed. + /// + public override Color ImageMarginRevealedGradientBegin => _colors[(int)SchemeOfficeColors.ImageMargin]; + + #endregion + + #region ImageMarginRevealedGradientMiddle + /// + /// Gets the middle color for the context menu margin revealed. + /// + public override Color ImageMarginRevealedGradientMiddle => _colors[(int)SchemeOfficeColors.ImageMargin]; + + #endregion + + #region ImageMarginRevealedGradientEnd + /// + /// Gets the ending color for the context menu margin revealed. + /// + public override Color ImageMarginRevealedGradientEnd => _colors[(int)SchemeOfficeColors.ImageMargin]; + + #endregion + #endregion + + #region MenuBorder + /// + /// Gets the color of the border around menus. + /// + public override Color MenuBorder => _menuBorder; + + #endregion + + #region MenuItem + #region MenuItemBorder + /// + /// Gets the border color for around the menu item. + /// + public override Color MenuItemBorder => _menuBorder; + + #endregion + + #region MenuItemSelected + /// + /// Gets the color of a selected menu item. + /// + public override Color MenuItemSelected => _colors[(int)SchemeOfficeColors.ButtonBorder]; + + #endregion + + #region MenuItemPressedGradientBegin + /// + /// Gets the starting color of the gradient used when a top-level ToolStripMenuItem is pressed down. + /// + public override Color MenuItemPressedGradientBegin => _colors[(int)SchemeOfficeColors.ToolStripBegin]; + + #endregion + + #region MenuItemPressedGradientEnd + /// + /// Gets the end color of the gradient used when a top-level ToolStripMenuItem is pressed down. + /// + public override Color MenuItemPressedGradientEnd => _colors[(int)SchemeOfficeColors.ToolStripEnd]; + + #endregion + + #region MenuItemPressedGradientMiddle + /// + /// Gets the middle color of the gradient used when a top-level ToolStripMenuItem is pressed down. + /// + public override Color MenuItemPressedGradientMiddle => _colors[(int)SchemeOfficeColors.ToolStripMiddle]; + + #endregion + + #region MenuItemSelectedGradientBegin + /// + /// Gets the starting color of the gradient used when the ToolStripMenuItem is selected. + /// + public override Color MenuItemSelectedGradientBegin => _menuItemSelectedBegin; + + #endregion + + #region MenuItemSelectedGradientEnd + /// + /// Gets the end color of the gradient used when the ToolStripMenuItem is selected. + /// + public override Color MenuItemSelectedGradientEnd => _menuItemSelectedEnd; + + #endregion + #endregion + + #region MenuStrip + #region MenuStripGradientBegin + /// + /// Gets the starting color of the gradient used in the MenuStrip. + /// + public override Color MenuStripGradientBegin => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + + #region MenuStripGradientEnd + /// + /// Gets the end color of the gradient used in the MenuStrip. + /// + public override Color MenuStripGradientEnd => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + + #endregion + + #region OverflowButton + #region OverflowButtonGradientBegin + /// + /// Gets the starting color of the gradient used in the ToolStripOverflowButton. + /// + public override Color OverflowButtonGradientBegin => _colors[(int)SchemeOfficeColors.OverflowBegin]; + + #endregion + + #region OverflowButtonGradientEnd + /// + /// Gets the end color of the gradient used in the ToolStripOverflowButton. + /// + public override Color OverflowButtonGradientEnd => _colors[(int)SchemeOfficeColors.OverflowEnd]; + + #endregion + + #region OverflowButtonGradientMiddle + /// + /// Gets the middle color of the gradient used in the ToolStripOverflowButton. + /// + public override Color OverflowButtonGradientMiddle => _colors[(int)SchemeOfficeColors.OverflowMiddle]; + + #endregion + #endregion + + #region RaftingContainer + #region RaftingContainerGradientBegin + /// + /// Gets the starting color of the gradient used in the ToolStripContainer. + /// + public override Color RaftingContainerGradientBegin => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + + #region RaftingContainerGradientEnd + /// + /// Gets the end color of the gradient used in the ToolStripContainer. + /// + public override Color RaftingContainerGradientEnd => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + + #endregion + + #region Separator + #region SeparatorLight + /// + /// Gets the light separator color. + /// + public override Color SeparatorLight => _colors[(int)SchemeOfficeColors.SeparatorLight]; + + #endregion + + #region SeparatorDark + /// + /// Gets the dark separator color. + /// + public override Color SeparatorDark => _colors[(int)SchemeOfficeColors.SeparatorDark]; + + #endregion + #endregion + + #region StatusStrip + #region StatusStripGradientBegin + /// + /// Gets the starting color for the status strip background. + /// + public override Color StatusStripGradientBegin => _colors[(int)SchemeOfficeColors.StatusStripLight]; + + #endregion + + #region StatusStripGradientEnd + /// + /// Gets the ending color for the status strip background. + /// + public override Color StatusStripGradientEnd => _colors[(int)SchemeOfficeColors.StatusStripDark]; + + #endregion + #endregion + + #region Text + #region MenuItemText + /// + /// Gets the text color used on the menu items. + /// + public override Color MenuItemText => _colors[(int)SchemeOfficeColors.TextButtonNormal]; + + #endregion + + #region MenuStripText + /// + /// Gets the text color used on the menu strip. + /// + public override Color MenuStripText => _colors[(int)SchemeOfficeColors.StatusStripText]; + + #endregion + + #region ToolStripText + /// + /// Gets the text color used on the tool strip. + /// + public override Color ToolStripText => _colors[(int)SchemeOfficeColors.StatusStripText]; + + #endregion + + #region StatusStripText + /// + /// Gets the text color used on the status strip. + /// + public override Color StatusStripText => _colors[(int)SchemeOfficeColors.StatusStripText]; + + #endregion + + #region MenuStripFont + /// + /// Gets the font used on the menu strip. + /// + public override Font MenuStripFont => _menuToolFont; + + #endregion + + #region ToolStripFont + /// + /// Gets the font used on the tool strip. + /// + public override Font ToolStripFont => _menuToolFont; + + #endregion + + #region StatusStripFont + /// + /// Gets the font used on the status strip. + /// + public override Font StatusStripFont => _statusFont; + + #endregion + #endregion + + #region ToolStrip + #region ToolStripBorder + /// + /// Gets the border color to use on the bottom edge of the ToolStrip. + /// + public override Color ToolStripBorder => _colors[(int)SchemeOfficeColors.ToolStripBorder]; + + #endregion + + #region ToolStripContentPanelGradientBegin + /// + /// Gets the starting color for the content panel background. + /// + public override Color ToolStripContentPanelGradientBegin => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + + #region ToolStripContentPanelGradientEnd + /// + /// Gets the ending color for the content panel background. + /// + public override Color ToolStripContentPanelGradientEnd => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + + #region ToolStripDropDownBackground + /// + /// Gets the background color for drop down menus. + /// + public override Color ToolStripDropDownBackground => _contextMenuBackground; + + #endregion + + #region ToolStripGradientBegin + /// + /// Gets the starting color of the gradient used in the ToolStrip background. + /// + public override Color ToolStripGradientBegin => _colors[(int)SchemeOfficeColors.ToolStripBegin]; + + #endregion + + #region ToolStripGradientEnd + /// + /// Gets the end color of the gradient used in the ToolStrip background. + /// + public override Color ToolStripGradientEnd => _colors[(int)SchemeOfficeColors.ToolStripEnd]; + + #endregion + + #region ToolStripGradientMiddle + /// + /// Gets the middle color of the gradient used in the ToolStrip background. + /// + public override Color ToolStripGradientMiddle => _colors[(int)SchemeOfficeColors.ToolStripMiddle]; + + #endregion + + #region ToolStripPanelGradientBegin + /// + /// Gets the starting color of the gradient used in the ToolStripPanel. + /// + public override Color ToolStripPanelGradientBegin => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + + #region ToolStripPanelGradientEnd + /// + /// Gets the end color of the gradient used in the ToolStripPanel. + /// + public override Color ToolStripPanelGradientEnd => _colors[(int)SchemeOfficeColors.ToolStripBack]; + + #endregion + #endregion + + #region Implementation + private static void DefineFonts() + { + // Create new font using system information + // TODO: Should be using base font + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); + } + + private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => + // Update fonts to reflect any change in system settings + DefineFonts(); + + #endregion + } + #endregion +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueDarkMode.cs index 921a37766..d6b68008d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,6 +17,22 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa { #region Static Fields + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(134, 179, 236); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(43, 74, 115); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(77, 132, 204); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -26,9 +42,9 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -114,16 +130,18 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa #region Colour Arrays - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks - Color.FromArgb(116, 150, 194), // Top track - Color.FromArgb(152, 190, 241), // Bottom track - Color.FromArgb(142, 180, 231), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(63, 101, 152) // Border (normal) position - }; + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks + Color.FromArgb(116, 150, 194), // Top track + Color.FromArgb(152, 190, 241), // Bottom track + Color.FromArgb(142, 180, 231), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(63, 101, 152) // Border (normal) position + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(21, 66, 139), // TextLabelControl Color.FromArgb(21, 66, 139), // TextButtonNormal Color.Blue, // TextButtonChecked @@ -175,9 +193,9 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.FromArgb(179, 209, 247), // FormBorderHeaderInctive1 Color.FromArgb(96, 150, 220), // FormBorderHeaderInctive2 Color.FromArgb(21, 66, 139), // FormHeaderShortActive - Color.FromArgb(160, 160, 160), // FormHeaderShortInactive + Color.FromArgb(150, 143, 134), // FormHeaderShortInactive Color.FromArgb(105, 112, 121), // FormHeaderLongActive - Color.FromArgb(160, 160, 160), // FormHeaderLongInactive + Color.FromArgb(150, 143, 134), // FormHeaderLongInactive Color.FromArgb(158, 193, 241), // FormButtonBorderTrack Color.FromArgb(210, 228, 254), // FormButtonBack1Track Color.FromArgb(255, 255, 255), // FormButtonBack2Track @@ -194,7 +212,7 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.Purple, // LinkVisitedOverridePanel Color.Red, // LinkPressedOverridePanel Color.FromArgb(21, 66, 139), // TextLabelPanel - Color.FromArgb(21, 66, 139), // RibbonTabTextNormal + Color.FromArgb(255, 255, 255), // RibbonTabTextNormal - Old value 21, 66, 139 Color.FromArgb(21, 66, 139), // RibbonTabTextChecked Color.FromArgb(134, 179, 236), // RibbonTabSelected1 Color.FromArgb(63, 122, 197), // RibbonTabSelected2 @@ -226,7 +244,7 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 - Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark + Color.FromArgb(134, 179, 236), //(155, 187, 227), // RibbonMinimizeBarDark Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 @@ -277,18 +295,12 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.FromArgb(234, 242, 249), // RibbonQATButtonLight Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(140, 172, - 211), // RibbonGroupSeparatorDark - Color.FromArgb(248, 250, - 252), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, - 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, - 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, - 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, - 191), // ButtonClusterButtonBorder2 + Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark + Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor Color.FromArgb(134, 179, 236), // GridListNormal1 Color.FromArgb(63, 122, 197), // GridListNormal2 @@ -307,7 +319,7 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(194, 217, 240), // GridDataCellSelected Color.Blue, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(51, 51, 51), // InputControlTextDisabled Color.FromArgb(171, 193, 222), // InputControlBorderNormal Color.FromArgb(177, 187, 198), // InputControlBorderDisabled Color.FromArgb(134, 179, 236), // InputControlBackNormal @@ -315,7 +327,7 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.FromArgb(234, 242, 251), // InputControlBackInactive Color.FromArgb(86, 125, 177), // InputDropDownNormal1 Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.FromArgb(51, 51, 51), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 Color.FromArgb(63, 122, 197), // ContextMenuHeadingBack Color.FromArgb(0, 21, 110), // ContextMenuHeadingText @@ -337,12 +349,14 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(0, 21, 110), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder @@ -355,7 +369,7 @@ public class PaletteMicrosoft365BlueDarkMode : PaletteMicrosoft365BlueDarkModeBa Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + ]; #endregion @@ -377,8 +391,8 @@ static PaletteMicrosoft365BlueDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -387,7 +401,7 @@ static PaletteMicrosoft365BlueDarkMode() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// @@ -550,6 +564,41 @@ public PaletteMicrosoft365BlueDarkMode() : base(_schemeOfficeColors, _checkBoxLi _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion + } #endregion @@ -607,7 +656,7 @@ public abstract class PaletteMicrosoft365BlueDarkModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -626,8 +675,8 @@ public abstract class PaletteMicrosoft365BlueDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -666,8 +715,8 @@ public abstract class PaletteMicrosoft365BlueDarkModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(51, 51, 51); + private static readonly Color _disabledText = Color.FromArgb(150, 143, 134); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -705,68 +754,70 @@ public abstract class PaletteMicrosoft365BlueDarkModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _appButtonNormal = - { - Color.FromArgb(243, 245, 248), - Color.FromArgb(214, 220, 231), - Color.FromArgb(188, 198, 211), - Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) - }; + [ + Color.FromArgb(243, 245, 248), + Color.FromArgb(214, 220, 231), + Color.FromArgb(188, 198, 211), + Color.FromArgb(254, 254, 255), + Color.FromArgb(206, 213, 225) + ]; private static readonly Color[] _appButtonTrack = - { - Color.FromArgb(255, 251, 230), - Color.FromArgb(180, 210, 255), - Color.FromArgb(96, 147, 235), - Color.FromArgb(110, 150, 240), - Color.FromArgb(115, 155, 245) - }; + [ + Color.FromArgb(255, 251, 230), + Color.FromArgb(180, 210, 255), + Color.FromArgb(96, 147, 235), + Color.FromArgb(110, 150, 240), + Color.FromArgb(115, 155, 245) + ]; private static readonly Color[] _appButtonPressed = - { - Color.FromArgb(185, 215, 250), - Color.FromArgb(190, 220, 245), - Color.FromArgb(98, 155, 230), - Color.FromArgb(110, 160, 225), - Color.FromArgb(120, 175, 240) - }; + [ + Color.FromArgb(185, 215, 250), + Color.FromArgb(190, 220, 245), + Color.FromArgb(98, 155, 230), + Color.FromArgb(110, 160, 225), + Color.FromArgb(120, 175, 240) + ]; private static readonly Color[] _buttonBorderColors = - { - Color.FromArgb(212, 212, 212), // Button, Disabled, Border - Color.FromArgb(179, 209, 255), // Button, Tracking, Border 1 - Color.FromArgb(179, 209, 249), // Button, Tracking, Border 2 - Color.FromArgb(96, 147, 230), // Button, Pressed, Border 1 - Color.FromArgb(32, 98, 200), // Button, Pressed, Border 2 - Color.FromArgb(96, 147, 235), // Button, Checked, Border 1 - Color.FromArgb(63, 122, 220) // Button, Checked, Border 2 - }; - - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 - Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 - Color.FromArgb(141, 168, 203), // Button, Tracking, Back 1 - Color.FromArgb(95, 127, 169), // Button, Tracking, Back 2 - Color.FromArgb(96, 150, 220), // Button, Pressed, Back 1 - Color.FromArgb(179, 209, 247), // Button, Pressed, Back 2 - Color.FromArgb(32, 98, 183), // Button, Checked, Back 1 - Color.FromArgb(141, 180, 230), // Button, Checked, Back 2 - Color.FromArgb(63, 122, 197), // Button, Checked Tracking, Back 1 - Color.FromArgb(96, 147, 213) // Button, Checked Tracking, Back 2 - }; + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border + Color.FromArgb(179, 209, 255), // Button, Tracking, Border 1 + Color.FromArgb(179, 209, 249), // Button, Tracking, Border 2 + Color.FromArgb(96, 147, 230), // Button, Pressed, Border 1 + Color.FromArgb(32, 98, 200), // Button, Pressed, Border 2 + Color.FromArgb(96, 147, 235), // Button, Checked, Border 1 + Color.FromArgb(63, 122, 220) // Button, Checked, Border 2 + ]; + + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 + Color.FromArgb(167, 199, 241), // Button, Tracking, Back 1 + Color.FromArgb(115, 150, 196), // Button, Tracking, Back 2 + Color.FromArgb(96, 150, 220), // Button, Pressed, Back 1 + Color.FromArgb(179, 209, 247), // Button, Pressed, Back 2 + Color.FromArgb(32, 98, 183), // Button, Checked, Back 1 + Color.FromArgb(141, 180, 230), // Button, Checked, Back 2 + Color.FromArgb(63, 122, 197), // Button, Checked Tracking, Back 1 + Color.FromArgb(96, 147, 213) // Button, Checked Tracking, Back 2 + ]; #endregion #endregion #region Variables - private KryptonColorTable365BlueDarkMode _table; + private KryptonColorTable365BlueDarkMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Constructor @@ -781,7 +832,7 @@ public abstract class PaletteMicrosoft365BlueDarkModeBase : PaletteBase protected PaletteMicrosoft365BlueDarkModeBase([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); @@ -808,7 +859,7 @@ protected PaletteMicrosoft365BlueDarkModeBase([DisallowNull] Color[] schemeColou _radioButtonArray = radioButtonArray; } - if (trackBarColours != null) + //if (trackBarColours != null) { _trackBarColours = trackBarColours; } @@ -817,16 +868,6 @@ protected PaletteMicrosoft365BlueDarkModeBase([DisallowNull] Color[] schemeColou } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// - /// InheritBool value. - /// - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion #region Renderer /// @@ -907,7 +948,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -927,6 +968,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridListSelected], _ => _ribbonColours[(int)SchemeOfficeColors.GridListNormal1] }; + case PaletteBackStyle.GridHeaderColumnSheet: return state switch { @@ -935,6 +977,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetColSelected1], _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetColNormal1] }; + case PaletteBackStyle.GridHeaderRowSheet: return state switch { @@ -943,6 +986,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowSelected], _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowNormal] }; + case PaletteBackStyle.GridDataCellList: case PaletteBackStyle.GridDataCellCustom1: case PaletteBackStyle.GridDataCellCustom2: @@ -962,17 +1006,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -999,16 +1043,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } + case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: return state switch { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; + case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive1] @@ -1046,14 +1092,8 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.SeparatorCustom3: case PaletteBackStyle.PanelClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.PanelCustom1: case PaletteBackStyle.PanelCustom2: case PaletteBackStyle.PanelCustom3: @@ -1066,14 +1106,8 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.PanelAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + case PaletteBackStyle.PanelRibbonInactive: return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight]; case PaletteBackStyle.FormMain: @@ -1086,24 +1120,12 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ControlClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.ControlAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + case PaletteBackStyle.ControlCustom1: case PaletteBackStyle.ControlCustom2: case PaletteBackStyle.ControlCustom3: @@ -1126,8 +1148,10 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } case PaletteBackStyle.ControlRibbon: return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; + case PaletteBackStyle.ControlRibbonAppMenu: return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack1]; + case PaletteBackStyle.ControlToolTip: return _toolTipBack1; case PaletteBackStyle.ContextMenuOuter: @@ -1150,22 +1174,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1188,14 +1212,14 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl - ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] - : _buttonBackColors[6], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl - ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] - : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1209,7 +1233,8 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); + } } @@ -1224,7 +1249,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1278,11 +1303,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1291,7 +1316,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1299,7 +1324,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1338,14 +1363,8 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.SeparatorCustom3: case PaletteBackStyle.PanelClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.PanelCustom1: case PaletteBackStyle.PanelCustom2: case PaletteBackStyle.PanelCustom3: @@ -1356,16 +1375,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.GridBackgroundCustom2: case PaletteBackStyle.GridBackgroundCustom3: return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.PanelAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + case PaletteBackStyle.PanelRibbonInactive: return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark]; case PaletteBackStyle.FormMain: @@ -1378,24 +1392,12 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ControlClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.ControlAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + case PaletteBackStyle.ControlCustom1: case PaletteBackStyle.ControlCustom2: case PaletteBackStyle.ControlCustom3: @@ -1442,22 +1444,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1479,18 +1481,19 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight - ? Color.Empty - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl - ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] - : _buttonBackColors[7], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] + : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl - ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] - : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) }; + case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: case PaletteBackStyle.ButtonNavigatorMini: @@ -1503,7 +1506,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1557,7 +1560,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1567,7 +1570,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1807,21 +1810,22 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta { if (style == PaletteBorderStyle.ButtonCalendarDay) { + // TODO: WHat is going on here ? return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1829,21 +1833,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] - : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1863,23 +1867,23 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1888,13 +1892,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight - ? Color.Empty - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1902,7 +1906,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1913,7 +1917,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1935,21 +1939,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta { if (style == PaletteBorderStyle.ButtonCalendarDay) { + // TODO: What is going on here return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1957,22 +1962,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] - : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1991,23 +1996,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -2020,7 +2025,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -2028,7 +2033,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2039,7 +2044,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2163,7 +2168,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2268,7 +2273,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2361,12 +2366,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2382,12 +2387,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2403,12 +2408,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2419,7 +2424,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2456,7 +2461,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2635,7 +2640,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2645,9 +2650,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2726,7 +2731,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2925,7 +2930,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2955,7 +2960,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3127,7 +3132,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3203,7 +3208,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3500,6 +3505,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3525,6 +3531,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3585,6 +3592,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3809,11 +3817,11 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin case PaletteButtonSpecStyle.QuickPrint: return _integratedToolbarQuickPrintNormal; case PaletteButtonSpecStyle.Generic: - return null; + return null!; // TODO: Work out why is this is allowed to be null default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3838,7 +3846,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3936,7 +3944,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4008,6 +4016,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4019,15 +4028,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4052,12 +4067,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4108,7 +4125,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4123,6 +4140,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4138,11 +4156,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4160,16 +4179,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4216,6 +4237,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4233,6 +4255,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4248,6 +4271,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4269,10 +4293,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4280,10 +4305,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4321,7 +4347,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4334,6 +4360,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4355,16 +4382,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4400,7 +4429,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4413,6 +4442,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4434,16 +4464,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4471,7 +4503,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4492,6 +4524,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4513,16 +4546,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4568,6 +4603,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } @@ -4587,7 +4623,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4599,12 +4635,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4621,7 +4658,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4637,11 +4674,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4658,7 +4696,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4676,12 +4714,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4701,21 +4740,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4724,11 +4763,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4748,21 +4788,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4771,11 +4811,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4829,14 +4870,14 @@ public class KryptonColorTable365BlueDarkMode : KryptonColorTable private static readonly Color _contextMenuBackground = Color.FromArgb(134, 179, 236); private static readonly Color _menuBorder = Color.FromArgb(167, 171, 176); private static readonly Color _checkBackground = Color.FromArgb(252, 241, 194); - private static readonly Color _buttonSelectedBegin = Color.FromArgb(141, 168, 203); - private static readonly Color _buttonSelectedEnd = Color.FromArgb(95, 127, 169); + private static readonly Color _buttonSelectedBegin = Color.FromArgb(167, 199, 241); + private static readonly Color _buttonSelectedEnd = Color.FromArgb(115, 150, 196); private static readonly Color _buttonPressedBegin = Color.FromArgb(255, 228, 138); private static readonly Color _buttonPressedEnd = Color.FromArgb(255, 228, 138); private static readonly Color _buttonCheckedBegin = Color.FromArgb(255, 216, 107); private static readonly Color _buttonCheckedEnd = Color.FromArgb(255, 216, 107); - private static readonly Color _menuItemSelectedBegin = Color.FromArgb(141, 168, 203); - private static readonly Color _menuItemSelectedEnd = Color.FromArgb(95, 127, 169); + private static readonly Color _menuItemSelectedBegin = Color.FromArgb(167, 199, 241); + private static readonly Color _menuItemSelectedEnd = Color.FromArgb(115, 150, 196); private static Font _menuToolFont; private static Font _statusFont; #endregion @@ -4886,7 +4927,7 @@ public KryptonColorTable365BlueDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -5429,15 +5470,10 @@ public KryptonColorTable365BlueDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueLightMode.cs index 5ed6ef953..e14fb31dd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365BlueLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,6 +17,22 @@ public class PaletteMicrosoft365BlueLightMode : PaletteMicrosoft365BlueLightMode { #region Static Fields + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(230, 239, 249); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(135, 145, 157); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(179, 193, 208); + + private static readonly Color _ribbonAppButtonTextColor = SystemColors.Control; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -26,14 +42,14 @@ public class PaletteMicrosoft365BlueLightMode : PaletteMicrosoft365BlueLightMode #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -120,239 +136,252 @@ public class PaletteMicrosoft365BlueLightMode : PaletteMicrosoft365BlueLightMode #region Colour Arrays - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks - Color.FromArgb(116, 150, 194), // Top track - Color.FromArgb(152, 190, 241), // Bottom track - Color.FromArgb(142, 180, 231), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(63, 101, 152) // Border (normal) position - }; - - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 21, 66, 139), // TextLabelControl - Color.FromArgb( 21, 66, 139), // TextButtonNormal - Color.Blue, // TextButtonChecked - Color.FromArgb(161, 189, 207), // ButtonNormalBorder - Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder - Color.FromArgb(230, 239, 249), // ButtonNormalBack1 - Color.FromArgb(209, 226, 244), // ButtonNormalBack2 - Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 - Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 - Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 - Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 - Color.FromArgb(230, 239, 249), // PanelClient - Color.FromArgb(209, 226, 244), // PanelAlternative - Color.FromArgb(101, 147, 207), // ControlBorder - Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 - Color.FromArgb(230, 239, 249), // HeaderPrimaryBack1 - Color.FromArgb(209, 226, 244), // HeaderPrimaryBack2 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 - Color.FromArgb( 21, 66, 139), // HeaderText - Color.FromArgb( 21, 66, 139), // StatusStripText - Color.FromArgb(121, 153, 194), // ButtonBorder - Color.FromArgb(255, 255, 255), // SeparatorLight - Color.FromArgb(154, 198, 255), // SeparatorDark - Color.FromArgb(248, 248, 248), // GripLight - Color.FromArgb(114, 152, 204), // GripDark - Color.FromArgb(209, 226, 244), // ToolStripBack - Color.FromArgb(230, 239, 249), // StatusStripLight - Color.FromArgb(209, 226, 244), // StatusStripDark - Color.FromArgb(209, 226, 244), // ImageMargin - Color.FromArgb(230, 239, 249), // ToolStripBegin - Color.FromArgb(168, 200, 234), // ToolStripMiddle - Color.FromArgb(147, 187, 229), // ToolStripEnd - Color.FromArgb(167, 204, 251), // OverflowBegin - Color.FromArgb(167, 204, 251), // OverflowMiddle - Color.FromArgb(101, 147, 207), // OverflowEnd - Color.FromArgb(111, 157, 217), // ToolStripBorder - Color.FromArgb( 59, 90, 130), // FormBorderActive - Color.FromArgb(192, 198, 206), // FormBorderInactive - Color.FromArgb(176, 203, 239), // FormBorderActiveLight - Color.FromArgb(194, 217, 247), // FormBorderActiveDark - Color.FromArgb(204, 216, 232), // FormBorderInactiveLight - Color.FromArgb(212, 222, 236), // FormBorderInactiveDark - Color.FromArgb(221, 233, 248), // FormBorderHeaderActive - Color.FromArgb(223, 229, 237), // FormBorderHeaderInactive - Color.FromArgb(176, 207, 247), // FormBorderHeaderActive1 - Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 - Color.FromArgb(204, 218, 236), // FormBorderHeaderInctive1 - Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 - Color.FromArgb( 62, 106, 184), // FormHeaderShortActive - Color.FromArgb(160, 160, 160), // FormHeaderShortInactive - Color.FromArgb(105, 112, 121), // FormHeaderLongActive - Color.FromArgb(160, 160, 160), // FormHeaderLongInactive - Color.FromArgb(158, 193, 241), // FormButtonBorderTrack - Color.FromArgb(210, 228, 254), // FormButtonBack1Track - Color.FromArgb(255, 255, 255), // FormButtonBack2Track - Color.FromArgb(162, 191, 227), // FormButtonBorderPressed - Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed - Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed - Color.FromArgb( 21, 66, 139), // TextButtonFormNormal - Color.FromArgb( 21, 66, 139), // TextButtonFormTracking - Color.FromArgb( 21, 66, 139), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 21, 66, 139), // TextLabelPanel - Color.FromArgb( 21, 66, 139), // RibbonTabTextNormal - Color.FromArgb( 21, 66, 139), // RibbonTabTextChecked - Color.FromArgb(145, 180, 228), // RibbonTabSelected1 - Color.FromArgb(209, 251, 255), // RibbonTabSelected2 - Color.FromArgb(246, 250, 255), // RibbonTabSelected3 - Color.FromArgb(239, 246, 254), // RibbonTabSelected4 - Color.FromArgb(222, 232, 245), // RibbonTabSelected5 - Color.FromArgb(153, 187, 232), // RibbonTabTracking1 - Color.FromArgb(255, 180, 86), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 - Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 - Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor - Color.FromArgb(141, 178, 227), // RibbonGroupsArea1 - Color.FromArgb(192, 249, 255), // RibbonGroupsArea2 - Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 - Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 - Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 - Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 - Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 - Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 - Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 - Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 - Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 - Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark - Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight - Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 - Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 - Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark - Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight - Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 - Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 - Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 - Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 - Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 - Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 - Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 - Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 - Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 - Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 - Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 - Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 - Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 - Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 - Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 - Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 - Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 - Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 - Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 - Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 - Color.FromArgb( 21, 66, 139), // RibbonGroupCollapsedText - Color.FromArgb(118, 153, 200), // AlternatePressedBack1 - Color.FromArgb(184, 215, 253), // AlternatePressedBack2 - Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 - Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 - Color.FromArgb(150, 194, 239), // FormButtonBack1Checked - Color.FromArgb(210, 228, 254), // FormButtonBack2Checked - Color.FromArgb(158, 193, 241), // FormButtonBorderCheck - Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack - Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack - Color.FromArgb(154, 179, 213), // RibbonQATMini1 - Color.FromArgb(219, 231, 247), // RibbonQATMini2 - Color.FromArgb(195, 213, 236), // RibbonQATMini3 - Color.FromArgb(128, Color.White), // RibbonQATMini4 - Color.FromArgb(72, Color.White), // RibbonQATMini5 - Color.FromArgb(153, 176, 206), // RibbonQATMini1I - Color.FromArgb(226, 233, 241), // RibbonQATMini2I - Color.FromArgb(198, 210, 226), // RibbonQATMini3I - Color.FromArgb(128, Color.White), // RibbonQATMini4I - Color.FromArgb(72, Color.White), // RibbonQATMini5I - Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 - Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 - Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 - Color.FromArgb( 86, 125, 177), // RibbonQATButtonDark - Color.FromArgb(234, 242, 249), // RibbonQATButtonLight - Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 - Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark - Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 - Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor - Color.FromArgb(230, 239, 249), // GridListNormal1 - Color.FromArgb(209, 226, 244), // GridListNormal2 - Color.FromArgb(209, 226, 244), // GridListPressed1 - Color.FromArgb(252, 253, 255), // GridListPressed2 - Color.FromArgb(168, 200, 234), // GridListSelected - Color.FromArgb(230, 239, 249), // GridSheetColNormal1 - Color.FromArgb(209, 226, 244), // GridSheetColNormal2 - Color.FromArgb(223, 226, 228), // GridSheetColPressed1 - Color.FromArgb(188, 197, 210), // GridSheetColPressed2 - Color.FromArgb(188, 213, 239), // GridSheetColSelected1 - Color.FromArgb(168, 200, 234), // GridSheetColSelected2 - Color.FromArgb(228, 236, 247), // GridSheetRowNormal - Color.FromArgb(187, 196, 209), // GridSheetRowPressed - Color.FromArgb(255, 213, 141), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(188, 213, 239), // GridDataCellSelected - Color.Blue, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(171, 193, 222), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(230, 239, 249), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(234, 242, 251), // InputControlBackInactive - Color.FromArgb( 188, 213, 239), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(209, 226, 244), // ContextMenuHeadingBack - Color.FromArgb(0, 21, 110), // ContextMenuHeadingText - Color.FromArgb(209, 226, 244), // ContextMenuImageColumn - Color.FromArgb(230, 239, 249), // AppButtonBack1 - Color.FromArgb(209, 226, 244), // AppButtonBack2 - Color.FromArgb(155, 175, 202), // AppButtonBorder - Color.FromArgb(189, 211, 238), // AppButtonOuter1 - Color.FromArgb(176, 201, 234), // AppButtonOuter2 - Color.FromArgb(207, 224, 245), // AppButtonOuter3 - Color.White, // AppButtonInner1 - Color.FromArgb(155, 175, 202), // AppButtonInner2 - Color.FromArgb(209, 226, 244), // AppButtonMenuDocs - Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText - Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 - Color.FromArgb(185, 208, 237), // RibbonGalleryBorder - Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal - Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking - Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 - Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark - Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 - Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 - Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder - Color.FromArgb( 0, 25, 56), // ButtonNavigatorText - Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 - Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 - Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 - Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 - Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 - Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 - Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks + Color.FromArgb(116, 150, 194), // Top track + Color.FromArgb(152, 190, 241), // Bottom track + Color.FromArgb(142, 180, 231), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(63, 101, 152) // Border (normal) position + ]; + + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb(21, 66, 139), // TextLabelControl + Color.FromArgb(21, 66, 139), // TextButtonNormal + Color.Blue, // TextButtonChecked + Color.FromArgb(161, 189, 207), // ButtonNormalBorder + Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder + Color.FromArgb(230, 239, 249), // ButtonNormalBack1 + Color.FromArgb(209, 226, 244), // ButtonNormalBack2 + Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 + Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 + Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 + Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 + Color.FromArgb(230, 239, 249), // PanelClient + Color.FromArgb(209, 226, 244), // PanelAlternative + Color.FromArgb(101, 147, 207), // ControlBorder + Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 + Color.FromArgb(230, 239, 249), // HeaderPrimaryBack1 + Color.FromArgb(209, 226, 244), // HeaderPrimaryBack2 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 + Color.FromArgb(21, 66, 139), // HeaderText + Color.FromArgb(21, 66, 139), // StatusStripText + Color.FromArgb(121, 153, 194), // ButtonBorder + Color.FromArgb(255, 255, 255), // SeparatorLight + Color.FromArgb(154, 198, 255), // SeparatorDark + Color.FromArgb(248, 248, 248), // GripLight + Color.FromArgb(114, 152, 204), // GripDark + Color.FromArgb(209, 226, 244), // ToolStripBack + Color.FromArgb(230, 239, 249), // StatusStripLight + Color.FromArgb(209, 226, 244), // StatusStripDark + Color.FromArgb(209, 226, 244), // ImageMargin + Color.FromArgb(230, 239, 249), // ToolStripBegin + Color.FromArgb(168, 200, 234), // ToolStripMiddle + Color.FromArgb(147, 187, 229), // ToolStripEnd + Color.FromArgb(167, 204, 251), // OverflowBegin + Color.FromArgb(167, 204, 251), // OverflowMiddle + Color.FromArgb(101, 147, 207), // OverflowEnd + Color.FromArgb(111, 157, 217), // ToolStripBorder + Color.FromArgb(59, 90, 130), // FormBorderActive + Color.FromArgb(192, 198, 206), // FormBorderInactive + Color.FromArgb(176, 203, 239), // FormBorderActiveLight + Color.FromArgb(194, 217, 247), // FormBorderActiveDark + Color.FromArgb(204, 216, 232), // FormBorderInactiveLight + Color.FromArgb(212, 222, 236), // FormBorderInactiveDark + Color.FromArgb(221, 233, 248), // FormBorderHeaderActive + Color.FromArgb(223, 229, 237), // FormBorderHeaderInactive + Color.FromArgb(176, 207, 247), // FormBorderHeaderActive1 + Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 + Color.FromArgb(204, 218, 236), // FormBorderHeaderInctive1 + Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 + Color.FromArgb(62, 106, 184), // FormHeaderShortActive + Color.FromArgb(160, 160, 160), // FormHeaderShortInactive + Color.FromArgb(105, 112, 121), // FormHeaderLongActive + Color.FromArgb(160, 160, 160), // FormHeaderLongInactive + Color.FromArgb(158, 193, 241), // FormButtonBorderTrack + Color.FromArgb(210, 228, 254), // FormButtonBack1Track + Color.FromArgb(255, 255, 255), // FormButtonBack2Track + Color.FromArgb(162, 191, 227), // FormButtonBorderPressed + Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed + Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed + Color.FromArgb(21, 66, 139), // TextButtonFormNormal + Color.FromArgb(21, 66, 139), // TextButtonFormTracking + Color.FromArgb(21, 66, 139), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb(21, 66, 139), // TextLabelPanel + Color.FromArgb(21, 66, 139), // RibbonTabTextNormal + Color.FromArgb(21, 66, 139), // RibbonTabTextChecked + Color.FromArgb(145, 180, 228), // RibbonTabSelected1 + Color.FromArgb(209, 251, 255), // RibbonTabSelected2 + Color.FromArgb(246, 250, 255), // RibbonTabSelected3 + Color.FromArgb(239, 246, 254), // RibbonTabSelected4 + Color.FromArgb(222, 232, 245), // RibbonTabSelected5 + Color.FromArgb(153, 187, 232), // RibbonTabTracking1 + Color.FromArgb(255, 180, 86), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 + Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor + Color.FromArgb(141, 178, 227), // RibbonGroupsArea1 + Color.FromArgb(192, 249, 255), // RibbonGroupsArea2 + Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 + Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 + Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 + Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 + Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 + Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 + Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 + Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 + Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 + Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark + Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight + Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 + Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 + Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark + Color.FromArgb(230, 239, 249), // RibbonMinimizeBarLight + Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 + Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 + Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 + Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 + Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 + Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 + Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 + Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 + Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 + Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 + Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 + Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 + Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 + Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 + Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 + Color.FromArgb(21, 66, 139), // RibbonGroupCollapsedText + Color.FromArgb(118, 153, 200), // AlternatePressedBack1 + Color.FromArgb(184, 215, 253), // AlternatePressedBack2 + Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 + Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 + Color.FromArgb(150, 194, 239), // FormButtonBack1Checked + Color.FromArgb(210, 228, 254), // FormButtonBack2Checked + Color.FromArgb(158, 193, 241), // FormButtonBorderCheck + Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack + Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack + Color.FromArgb(154, 179, 213), // RibbonQATMini1 + Color.FromArgb(219, 231, 247), // RibbonQATMini2 + Color.FromArgb(195, 213, 236), // RibbonQATMini3 + Color.FromArgb(128, Color.White), // RibbonQATMini4 + Color.FromArgb(72, Color.White), // RibbonQATMini5 + Color.FromArgb(153, 176, 206), // RibbonQATMini1I + Color.FromArgb(226, 233, 241), // RibbonQATMini2I + Color.FromArgb(198, 210, 226), // RibbonQATMini3I + Color.FromArgb(128, Color.White), // RibbonQATMini4I + Color.FromArgb(72, Color.White), // RibbonQATMini5I + Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 + Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 + Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 + Color.FromArgb(86, 125, 177), // RibbonQATButtonDark + Color.FromArgb(234, 242, 249), // RibbonQATButtonLight + Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 + Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 + Color.FromArgb(140, 172, + 211), // RibbonGroupSeparatorDark + Color.FromArgb(248, 250, + 252), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, + 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, + 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, + 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, + 191), // ButtonClusterButtonBorder2 + Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor + Color.FromArgb(230, 239, 249), // GridListNormal1 + Color.FromArgb(209, 226, 244), // GridListNormal2 + Color.FromArgb(209, 226, 244), // GridListPressed1 + Color.FromArgb(252, 253, 255), // GridListPressed2 + Color.FromArgb(168, 200, 234), // GridListSelected + Color.FromArgb(230, 239, 249), // GridSheetColNormal1 + Color.FromArgb(209, 226, 244), // GridSheetColNormal2 + Color.FromArgb(223, 226, 228), // GridSheetColPressed1 + Color.FromArgb(188, 197, 210), // GridSheetColPressed2 + Color.FromArgb(188, 213, 239), // GridSheetColSelected1 + Color.FromArgb(168, 200, 234), // GridSheetColSelected2 + Color.FromArgb(228, 236, 247), // GridSheetRowNormal + Color.FromArgb(187, 196, 209), // GridSheetRowPressed + Color.FromArgb(255, 213, 141), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(188, 213, 239), // GridDataCellSelected + Color.Blue, // InputControlTextNormal + Color.FromArgb(77, 77, 77), // InputControlTextDisabled + Color.FromArgb(171, 193, 222), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(230, 239, 249), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(234, 242, 251), // InputControlBackInactive + Color.FromArgb(188, 213, 239), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(77, 77, 77), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(209, 226, 244), // ContextMenuHeadingBack + Color.FromArgb(0, 21, 110), // ContextMenuHeadingText + Color.FromArgb(209, 226, 244), // ContextMenuImageColumn + Color.FromArgb(230, 239, 249), // AppButtonBack1 + Color.FromArgb(209, 226, 244), // AppButtonBack2 + Color.FromArgb(155, 175, 202), // AppButtonBorder + Color.FromArgb(189, 211, 238), // AppButtonOuter1 + Color.FromArgb(176, 201, 234), // AppButtonOuter2 + Color.FromArgb(207, 224, 245), // AppButtonOuter3 + Color.White, // AppButtonInner1 + Color.FromArgb(155, 175, 202), // AppButtonInner2 + Color.FromArgb(209, 226, 244), // AppButtonMenuDocs + Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText + Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 + Color.FromArgb(185, 208, 237), // RibbonGalleryBorder + Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal + Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking + Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 + Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(0, 21, 110), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark + Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 + Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 + Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder + Color.FromArgb(0, 25, 56), // ButtonNavigatorText + Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 + Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 + Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 + Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 + Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 + Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 + Color.FromArgb(201, 217, + 239) // ToolTipBottom + ]; #endregion @@ -374,8 +403,8 @@ static PaletteMicrosoft365BlueLightMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -384,7 +413,7 @@ static PaletteMicrosoft365BlueLightMode() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// @@ -547,6 +576,41 @@ public PaletteMicrosoft365BlueLightMode() : base(_schemeOfficeColors, _checkBoxL _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion + } #endregion @@ -604,7 +668,7 @@ public abstract class PaletteMicrosoft365BlueLightModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -623,8 +687,8 @@ public abstract class PaletteMicrosoft365BlueLightModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -663,8 +727,8 @@ public abstract class PaletteMicrosoft365BlueLightModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(77, 77, 77); + private static readonly Color _disabledText = Color.FromArgb(115, 115, 115); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -702,34 +766,34 @@ public abstract class PaletteMicrosoft365BlueLightModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(168, 200, 234), // Button, Tracking, Border 1 Color.FromArgb(170, 210, 245), // Button, Tracking, Border 2 @@ -737,10 +801,10 @@ public abstract class PaletteMicrosoft365BlueLightModeBase : PaletteBase Color.FromArgb(150, 200, 225), // Button, Pressed, Border 2 Color.FromArgb(148, 197, 220), // Button, Checked, Border 1 Color.FromArgb(160, 205, 240) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(188, 213, 239), // Button, Tracking, Back 1 @@ -751,21 +815,21 @@ public abstract class PaletteMicrosoft365BlueLightModeBase : PaletteBase Color.FromArgb(188, 213, 239), // Button, Checked, Back 2 Color.FromArgb(209, 226, 244), // Button, Checked Tracking, Back 1 Color.FromArgb(210, 226, 244) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Variables - private KryptonColorTable365BlueLightMode _table; + private KryptonColorTable365BlueLightMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Constructor @@ -780,7 +844,7 @@ public abstract class PaletteMicrosoft365BlueLightModeBase : PaletteBase protected PaletteMicrosoft365BlueLightModeBase([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[]? trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[]? trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); @@ -816,17 +880,6 @@ protected PaletteMicrosoft365BlueLightModeBase([DisallowNull] Color[] schemeColo } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// - /// InheritBool value. - /// - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -906,7 +959,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -961,17 +1014,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -998,7 +1051,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -1006,7 +1059,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1149,22 +1202,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1187,14 +1240,14 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[6], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1208,7 +1261,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1223,7 +1276,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1277,11 +1330,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative], + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1290,7 +1343,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1298,7 +1351,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1441,22 +1494,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1478,17 +1531,17 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] -: _buttonBackColors[7], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] + : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1502,7 +1555,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1556,7 +1609,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1566,7 +1619,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1810,17 +1863,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1828,21 +1881,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1862,23 +1915,23 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1887,13 +1940,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1901,7 +1954,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1912,7 +1965,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1938,17 +1991,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1956,22 +2009,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1990,23 +2043,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -2019,7 +2072,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -2027,7 +2080,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2038,7 +2091,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2162,7 +2215,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2267,7 +2320,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2360,12 +2413,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2381,12 +2434,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2402,12 +2455,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2418,7 +2471,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2455,7 +2508,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2634,7 +2687,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2644,9 +2697,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2725,7 +2778,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2924,7 +2977,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2954,7 +3007,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3126,7 +3179,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3202,7 +3255,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3499,6 +3552,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3524,6 +3578,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3584,6 +3639,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3812,7 +3868,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3837,7 +3893,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3935,7 +3991,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4007,29 +4063,39 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: return PaletteRibbonColorStyle.Empty; + case PaletteRibbonBackStyle.RibbonGroupArea: switch (state) { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4051,12 +4117,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4080,12 +4148,14 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackTracking], _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackNormal] }; + case PaletteRibbonBackStyle.RibbonGalleryBorder: return state switch { PaletteState.Disabled => _disabledBorder, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder] }; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: return _ribbonColours[(int)SchemeOfficeColors.AppButtonMenuDocsBack]; case PaletteRibbonBackStyle.RibbonAppMenuInner: @@ -4107,7 +4177,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4122,9 +4192,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4137,11 +4209,13 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4159,16 +4233,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4215,9 +4291,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4232,9 +4310,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4247,6 +4327,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4268,10 +4349,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4279,10 +4361,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4320,7 +4403,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4333,11 +4416,14 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4354,16 +4440,19 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4399,7 +4488,8 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4412,11 +4502,14 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4433,16 +4526,19 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4470,7 +4566,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4491,9 +4587,11 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: @@ -4512,16 +4610,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4567,6 +4667,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4586,7 +4687,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4598,12 +4699,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4620,7 +4722,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4636,11 +4738,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4657,7 +4760,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4675,12 +4778,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4700,21 +4804,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4723,11 +4827,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4747,21 +4852,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } - return _trackBarColours[3]; + case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4770,11 +4875,13 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4865,8 +4972,9 @@ public KryptonColorTable365BlueLightMode([DisallowNull] Color[] colors, InheritBool roundedEdges, PaletteBase palette) : base(palette) { - Debug.Assert(colors != null); - _colors = colors; + Debug.Assert(colors is not null); + + _colors = colors ?? throw new ArgumentNullException(nameof(colors)); _roundedEdges = roundedEdges; } #endregion @@ -4881,7 +4989,7 @@ public KryptonColorTable365BlueLightMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -5424,14 +5532,9 @@ public KryptonColorTable365BlueLightMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverDarkMode.cs index 577b1beef..7b729b554 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,6 +17,22 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo { #region Static Fields + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(119, 132, 161); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(84, 96, 125); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(109, 125, 163); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -26,10 +42,10 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo #region Images - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -116,20 +132,20 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { - Color.FromArgb(24, 24, 24), // TextLabelControl - Color.FromArgb(24, 24, 24), // TextButtonNormal - Color.FromArgb(24, 24, 24), // TextButtonChecked + [ + Color.FromArgb(255, 255, 255), // TextLabelControl + Color.FromArgb(255, 255, 255), // TextButtonNormal + Color.FromArgb(52, 52, 52), // TextButtonChecked Color.FromArgb(141, 148, 157), // ButtonNormalBorder1 Color.FromArgb(131, 138, 147), // ButtonNormalBorder2 Color.FromArgb(119, 132, 161), // ButtonNormalBack1 @@ -148,7 +164,7 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(213, 219, 231), // HeaderSecondaryBack1 Color.FromArgb(213, 219, 231), // HeaderSecondaryBack2 Color.FromArgb(21, 66, 139), // HeaderText - Color.FromArgb(24, 24, 24), // StatusStripText + Color.FromArgb(255, 255, 255), // StatusStripText Color.FromArgb(155, 163, 167), // ButtonBorder Color.FromArgb(255, 255, 255), // SeparatorLight Color.FromArgb(110, 109, 143), // SeparatorDark @@ -177,9 +193,9 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(83, 99, 136), // FormBorderHeaderActive2 Color.FromArgb(119, 132, 161), // FormBorderHeaderInctive1 Color.FromArgb(83, 99, 136), // FormBorderHeaderInctive2 - Color.FromArgb(24, 24, 24), // FormHeaderShortActive + Color.FromArgb(255, 255, 255), // FormHeaderShortActive Color.FromArgb(138, 138, 138), // FormHeaderShortInactive - Color.FromArgb(92, 98, 106), // FormHeaderLongActive + Color.FromArgb(255, 255, 255), // FormHeaderLongActive Color.FromArgb(138, 138, 138), // FormHeaderLongInactive Color.FromArgb(189, 199, 212), // FormButtonBorderTrack Color.FromArgb(222, 230, 242), // FormButtonBack1Track @@ -188,7 +204,7 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(125, 131, 140), // FormButtonBack1Pressed Color.FromArgb(213, 226, 233), // FormButtonBack2Pressed Color.Black, // TextButtonFormNormal - Color.Black, // TextButtonFormTracking + Color.FromArgb(255, 255, 255), // TextButtonFormTracking Color.Black, // TextButtonFormPressed Color.Silver, // LinkNotVisitedOverrideControl Color.Purple, // LinkVisitedOverrideControl @@ -196,8 +212,8 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.Silver, // LinkNotVisitedOverridePanel Color.Purple, // LinkVisitedOverridePanel Color.Red, // LinkPressedOverridePanel - Color.FromArgb(24, 24, 24), // TextLabelPanel - Color.FromArgb(255, 255, 255), // RibbonTabTextNormal + Color.FromArgb(255, 255, 255), // TextLabelPanel + Color.FromArgb(255, 255, 255), // RibbonTabTextNormal (Old value 255, 255, 255) Color.FromArgb(0, 0, 0), // RibbonTabTextChecked Color.FromArgb(190, 190, 190), // RibbonTabSelected1 Color.FromArgb(198, 250, 255), // RibbonTabSelected2 @@ -219,18 +235,18 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(243, 245, 249), // RibbonGroupsArea5 Color.FromArgb(189, 191, 193), // RibbonGroupBorder1 Color.FromArgb(133, 133, 133), // RibbonGroupBorder2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitle1 - Color.FromArgb(195, 199, 209), // RibbonGroupTitle2 + Color.FromArgb(255, 255, 255), // RibbonGroupTitle1 (Old value 255, 255, 255) + Color.FromArgb(52, 52, 52), // RibbonGroupTitle2 (Old value 195, 199, 209) Color.FromArgb(183, 183, 183), // RibbonGroupBorderContext1 Color.FromArgb(131, 131, 131), // RibbonGroupBorderContext2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitleContext1 - Color.FromArgb(195, 199, 209), // RibbonGroupTitleContext2 + Color.FromArgb(255, 255, 255), // RibbonGroupTitleContext1 (Old value 255, 255, 255) + Color.FromArgb(52, 52, 52), // RibbonGroupTitleContext2 (Old value 195, 199, 209) Color.FromArgb(101, 104, 112), // RibbonGroupDialogDark Color.FromArgb(242, 242, 242), // RibbonGroupDialogLight Color.FromArgb(222, 226, 238), // RibbonGroupTitleTracking1 Color.FromArgb(179, 185, 199), // RibbonGroupTitleTracking2 - Color.FromArgb(128, 128, 128), // RibbonMinimizeBarDark - Color.FromArgb(220, 225, 235), // RibbonMinimizeBarLight + Color.FromArgb(119, 132, 161), // RibbonMinimizeBarDark + Color.FromArgb(83, 99, 136), // RibbonMinimizeBarLight Color.FromArgb(183, 183, 183), // RibbonGroupCollapsedBorder1 Color.FromArgb(145, 145, 145), // RibbonGroupCollapsedBorder2 Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 @@ -253,7 +269,7 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(226, 229, 234), // RibbonGroupFrameInside2 Color.FromArgb(220, 224, 231), // RibbonGroupFrameInside3 Color.FromArgb(232, 234, 238), // RibbonGroupFrameInside4 - Color.FromArgb(76, 83, 92), // RibbonGroupCollapsedText + Color.FromArgb(255, 255, 255), // RibbonGroupCollapsedText (Old value 76, 83, 92) Color.FromArgb(179, 185, 195), // AlternatePressedBack1 Color.FromArgb(216, 224, 224), // AlternatePressedBack2 Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 @@ -280,18 +296,12 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(225, 225, 225), // RibbonQATButtonLight Color.FromArgb(219, 218, 228), // RibbonQATOverflow1 Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(173, 177, - 181), // RibbonGroupSeparatorDark - Color.FromArgb(232, 235, - 237), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, - 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, - 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, - 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, - 159), // ButtonClusterButtonBorder2 + Color.FromArgb(173, 177, 181), // RibbonGroupSeparatorDark + Color.FromArgb(232, 235, 237), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor Color.FromArgb(119, 132, 161), // GridListNormal1 Color.FromArgb(83, 99, 136), // GridListNormal2 @@ -309,8 +319,8 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(245, 199, 149), // GridSheetRowSelected Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(194, 217, 240), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(255, 255, 255), // InputControlTextNormal + Color.FromArgb(51, 51, 51), // InputControlTextDisabled Color.FromArgb(169, 177, 184), // InputControlBorderNormal Color.FromArgb(177, 187, 198), // InputControlBorderDisabled Color.FromArgb(119, 132, 161), // InputControlBackNormal @@ -318,10 +328,10 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(232, 234, 236), // InputControlBackInactive Color.FromArgb(124, 124, 124), // InputDropDownNormal1 Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.FromArgb(51, 51, 51), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(24, 24, 24), // ContextMenuHeading - Color.FromArgb(76, 83, 92), // ContextMenuHeadingText + Color.FromArgb(255, 255, 255), // ContextMenuHeading + Color.FromArgb(255, 255, 255), // ContextMenuHeadingText (Old value 76, 83, 92) Color.FromArgb(239, 239, 239), // ContextMenuImageColumn Color.FromArgb(119, 132, 161), // AppButtonBack1 Color.FromArgb(83, 99, 136), // AppButtonBack2 @@ -340,12 +350,14 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(255, 255, 255), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -357,7 +369,7 @@ public class PaletteMicrosoft365SilverDarkMode : PaletteMicrosoft365SilverDarkMo Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion @@ -379,8 +391,8 @@ static PaletteMicrosoft365SilverDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -389,7 +401,7 @@ static PaletteMicrosoft365SilverDarkMode() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -552,6 +564,41 @@ public PaletteMicrosoft365SilverDarkMode() : base(_schemeOfficeColors, _checkBox _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion + } #endregion @@ -609,7 +656,7 @@ public abstract class PaletteMicrosoft365SilverDarkModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -628,8 +675,8 @@ public abstract class PaletteMicrosoft365SilverDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -668,8 +715,8 @@ public abstract class PaletteMicrosoft365SilverDarkModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(51, 51, 51); + private static readonly Color _disabledText = Color.FromArgb(89, 89, 89); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -708,34 +755,34 @@ public abstract class PaletteMicrosoft365SilverDarkModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(163, 179, 220), // Button, Tracking, Border 1 Color.FromArgb(128, 141, 173), // Button, Tracking, Border 2 @@ -743,35 +790,35 @@ public abstract class PaletteMicrosoft365SilverDarkModeBase : PaletteBase Color.FromArgb(118, 130, 160), // Button, Pressed, Border 2 Color.FromArgb(136, 150, 185), // Button, Checked, Border 1 Color.FromArgb(174, 192, 236) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 - Color.FromArgb(54, 64, 88), // Button, Tracking, Back 1 + Color.FromArgb(102, 117, 161), // Button, Tracking, Back 1 Color.FromArgb(106, 123, 164), // Button, Tracking, Back 2 - Color.FromArgb(95, 107, 137), // Button, Pressed, Back 1 - Color.FromArgb(54, 64, 88), // Button, Pressed, Back 2 - Color.FromArgb(54, 64, 88), // Button, Checked, Back 1 + Color.FromArgb(73, 84, 113), // Button, Pressed, Back 1 + Color.FromArgb(102, 117, 161), // Button, Pressed, Back 2 + Color.FromArgb(102, 117, 161), // Button, Checked, Back 1 Color.FromArgb(122, 137, 174), // Button, Checked, Back 2 Color.FromArgb(119, 134, 172), // Button, Checked Tracking, Back 1 Color.FromArgb(135, 148, 182) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Variables - private KryptonColorTable365SilverDarkMode _table; + private KryptonColorTable365SilverDarkMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Constructor @@ -786,7 +833,8 @@ public abstract class PaletteMicrosoft365SilverDarkModeBase : PaletteBase protected PaletteMicrosoft365SilverDarkModeBase([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, + Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); @@ -822,17 +870,6 @@ protected PaletteMicrosoft365SilverDarkModeBase([DisallowNull] Color[] schemeCol } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// - /// InheritBool value. - /// - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -893,10 +930,52 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, return style switch { - PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile + or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden + or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 + or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive + or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 + or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorHighInternalProfile + or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorLowProfile + or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 + or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient + or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox + or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon + or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 + or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 + or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner + or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator + or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn + or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight + or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon + or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 + or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 + or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary + or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive + or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm + or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 + or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 + or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery + or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile + or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem + or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonCalendarDay + or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster + or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow + or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm + or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 + or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 + or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridBackgroundList + or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 or PaletteBackStyle.GridBackgroundCustom2 or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet + or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 + or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList + or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 + or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 + or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet + or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 + or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -912,7 +991,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -968,17 +1047,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -988,24 +1067,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteState.CheckedNormal: case PaletteState.CheckedPressed: case PaletteState.CheckedTracking: - if (style == PaletteBackStyle.TabHighProfile) - { - if (state == PaletteState.CheckedNormal) - { - return _buttonBackColors[6]; - } - else - { - return state == PaletteState.CheckedPressed ? _buttonBackColors[4] : _buttonBackColors[8]; - } - } - else - { - return SystemColors.Window; - } + return style == PaletteBackStyle.TabHighProfile + ? state == PaletteState.CheckedNormal ? _buttonBackColors[6] : + state == PaletteState.CheckedPressed ? _buttonBackColors[4] : _buttonBackColors[8] + : SystemColors.Window; default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -1013,7 +1081,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1052,14 +1120,9 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.SeparatorCustom3: case PaletteBackStyle.PanelClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.PanelCustom1: case PaletteBackStyle.PanelCustom2: case PaletteBackStyle.PanelCustom3: @@ -1072,14 +1135,9 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.PanelAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; case PaletteBackStyle.PanelRibbonInactive: return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight]; case PaletteBackStyle.FormMain: @@ -1089,27 +1147,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) return state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight] : _ribbonColours[(int)SchemeOfficeColors.FormBorderActiveLight]; - + case PaletteBackStyle.Control: case PaletteBackStyle.ControlClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.ControlAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; case PaletteBackStyle.ControlCustom1: case PaletteBackStyle.ControlCustom2: case PaletteBackStyle.ControlCustom3: @@ -1120,16 +1168,11 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.InputControlCustom1: case PaletteBackStyle.InputControlCustom2: case PaletteBackStyle.InputControlCustom3: - if (state == PaletteState.Disabled) - { - return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; - } - else - { - return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled] + : (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; - } case PaletteBackStyle.ControlRibbon: return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; case PaletteBackStyle.ControlRibbonAppMenu: @@ -1156,22 +1199,26 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color + .Empty, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], - PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + PaletteState.CheckedTracking => _ribbonColours[ + (int)SchemeOfficeColors.FormButtonBack1CheckTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[ + (int)SchemeOfficeColors.FormButtonBack1Pressed], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color + .Empty, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1194,14 +1241,14 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[6], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1215,7 +1262,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1230,7 +1277,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1284,11 +1331,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1297,7 +1344,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1305,7 +1352,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1344,14 +1391,9 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.SeparatorCustom3: case PaletteBackStyle.PanelClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.PanelCustom1: case PaletteBackStyle.PanelCustom2: case PaletteBackStyle.PanelCustom3: @@ -1364,14 +1406,9 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.PanelAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; case PaletteBackStyle.PanelRibbonInactive: return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark]; case PaletteBackStyle.FormMain: @@ -1384,24 +1421,14 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ControlClient: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelClient]; case PaletteBackStyle.ControlAlternate: // Note: Alter these to control the backgrounds - if (state == PaletteState.Disabled) - { - return _disabledBack; - } - else - { - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - } + return state == PaletteState.Disabled + ? _disabledBack + : _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; case PaletteBackStyle.ControlCustom1: case PaletteBackStyle.ControlCustom2: case PaletteBackStyle.ControlCustom3: @@ -1412,16 +1439,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.InputControlCustom1: case PaletteBackStyle.InputControlCustom2: case PaletteBackStyle.InputControlCustom3: - if (state == PaletteState.Disabled) - { - return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; - } - else - { - return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) + return state == PaletteState.Disabled + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled] + : (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; - } case PaletteBackStyle.ControlRibbon: return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; case PaletteBackStyle.ControlRibbonAppMenu: @@ -1448,22 +1470,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1485,17 +1507,17 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] -: _buttonBackColors[7], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] + : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1509,7 +1531,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1563,7 +1585,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1573,7 +1595,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1817,17 +1839,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1835,21 +1857,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1869,23 +1891,23 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1894,13 +1916,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1908,7 +1930,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1919,7 +1941,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1945,17 +1967,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1963,22 +1985,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1997,23 +2019,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -2026,7 +2048,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -2034,7 +2056,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2045,7 +2067,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2169,7 +2191,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2274,7 +2296,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2367,12 +2389,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2388,12 +2410,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2409,12 +2431,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2425,7 +2447,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2462,7 +2484,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2641,7 +2663,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2651,9 +2673,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2732,7 +2754,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2931,7 +2953,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2961,7 +2983,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3133,7 +3155,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3209,7 +3231,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3506,6 +3528,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3531,6 +3554,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3591,6 +3615,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3819,7 +3844,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3844,7 +3869,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3942,7 +3967,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4014,9 +4039,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: return PaletteRibbonColorStyle.Empty; @@ -4025,18 +4052,25 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4058,12 +4092,15 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4114,7 +4151,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4129,9 +4166,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4144,11 +4183,13 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4166,16 +4207,19 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4222,9 +4266,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4239,9 +4285,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4254,9 +4302,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: @@ -4275,10 +4325,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4286,10 +4337,12 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4327,7 +4380,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4340,9 +4393,11 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: @@ -4361,16 +4416,19 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4406,7 +4464,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4419,9 +4477,11 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: @@ -4440,16 +4500,19 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4477,7 +4540,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4498,9 +4561,11 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: @@ -4519,16 +4584,19 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4574,6 +4642,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4593,7 +4662,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4605,12 +4674,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4627,7 +4697,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4643,11 +4713,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4664,7 +4735,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4682,12 +4753,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4707,21 +4779,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4730,11 +4802,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4754,21 +4827,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4777,11 +4850,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4832,16 +4906,16 @@ public class KryptonColorTable365SilverDarkMode : KryptonColorTable { #region Static Fields private static readonly Color _menuBorder = Color.FromArgb(134, 134, 134); - private static readonly Color _menuItemSelectedBegin = Color.FromArgb(83, 99, 136); - private static readonly Color _menuItemSelectedEnd = Color.FromArgb(119, 132, 161); + private static readonly Color _menuItemSelectedBegin = Color.FromArgb(134, 134, 134); + private static readonly Color _menuItemSelectedEnd = Color.FromArgb(83, 83, 83); private static readonly Color _contextMenuBackground = Color.FromArgb(119, 132, 161); private static readonly Color _checkBackground = Color.FromArgb(164, 172, 192); - private static readonly Color _buttonSelectedBegin = Color.FromArgb(83, 99, 136); - private static readonly Color _buttonSelectedEnd = Color.FromArgb(119, 132, 161); - private static readonly Color _buttonPressedBegin = Color.FromArgb(83, 99, 136); - private static readonly Color _buttonPressedEnd = Color.FromArgb(119, 132, 161); - private static readonly Color _buttonCheckedBegin = Color.FromArgb(83, 99, 136); - private static readonly Color _buttonCheckedEnd = Color.FromArgb(119, 132, 161); + private static readonly Color _buttonSelectedBegin = Color.FromArgb(134, 134, 134); + private static readonly Color _buttonSelectedEnd = Color.FromArgb(83, 83, 83); + private static readonly Color _buttonPressedBegin = Color.FromArgb(134, 134, 134); + private static readonly Color _buttonPressedEnd = Color.FromArgb(83, 83, 83); + private static readonly Color _buttonCheckedBegin = Color.FromArgb(134, 134, 134); + private static readonly Color _buttonCheckedEnd = Color.FromArgb(83, 83, 83); private static Font _menuToolFont; private static Font _statusFont; #endregion @@ -4891,7 +4965,7 @@ public KryptonColorTable365SilverDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -5434,14 +5508,9 @@ public KryptonColorTable365SilverDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverLightMode.cs index 732549734..3280a6596 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Extra Themes/PaletteMicrosoft365SilverLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,6 +17,22 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight { #region Static Fields + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(224, 225, 231); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(147, 149, 158); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(195, 198, 209); + + private static readonly Color _ribbonAppButtonTextColor = Color.FromArgb(24, 24, 24); + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -26,14 +42,14 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -120,17 +136,17 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(24, 24, 24), // TextLabelControl Color.FromArgb(24, 24, 24), // TextButtonNormal Color.FromArgb(24, 24, 24), // TextButtonChecked @@ -234,7 +250,7 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight Color.FromArgb(222, 226, 238), // RibbonGroupTitleTracking1 Color.FromArgb(179, 185, 199), // RibbonGroupTitleTracking2 Color.FromArgb(128, 128, 128), // RibbonMinimizeBarDark - Color.FromArgb(220, 225, 235), // RibbonMinimizeBarLight + Color.FromArgb(224, 225, 231), // RibbonMinimizeBarLight Color.FromArgb(183, 183, 183), // RibbonGroupCollapsedBorder1 Color.FromArgb(145, 145, 145), // RibbonGroupCollapsedBorder2 Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 @@ -308,7 +324,7 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(194, 217, 240), // GridDataCellSelected Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(77, 77, 77), // InputControlTextDisabled Color.FromArgb(169, 177, 184), // InputControlBorderNormal Color.FromArgb(177, 187, 198), // InputControlBorderDisabled Color.FromArgb(224, 225, 231), // InputControlBackNormal @@ -316,7 +332,7 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight Color.FromArgb(232, 234, 236), // InputControlBackInactive Color.FromArgb(124, 124, 124), // InputDropDownNormal1 Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.FromArgb(77, 77, 77), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 Color.FromArgb(24, 24, 24), // ContextMenuHeading Color.FromArgb(76, 83, 92), // ContextMenuHeadingText @@ -338,12 +354,14 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(76, 83, 92), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -355,7 +373,7 @@ public class PaletteMicrosoft365SilverLightMode : PaletteMicrosoft365SilverLight Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion @@ -377,8 +395,8 @@ static PaletteMicrosoft365SilverLightMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -387,7 +405,7 @@ static PaletteMicrosoft365SilverLightMode() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -550,6 +568,41 @@ public PaletteMicrosoft365SilverLightMode() : base(_schemeOfficeColors, _checkBo _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion + } #endregion @@ -607,7 +660,7 @@ public abstract class PaletteMicrosoft365SilverLightModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -626,8 +679,8 @@ public abstract class PaletteMicrosoft365SilverLightModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -666,8 +719,8 @@ public abstract class PaletteMicrosoft365SilverLightModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(77, 77, 77); + private static readonly Color _disabledText = Color.FromArgb(115, 115, 115); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -706,34 +759,34 @@ public abstract class PaletteMicrosoft365SilverLightModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(232, 234, 244), // Button, Tracking, Border 1 Color.FromArgb(183, 185, 193), // Button, Tracking, Border 2 @@ -741,10 +794,10 @@ public abstract class PaletteMicrosoft365SilverLightModeBase : PaletteBase Color.FromArgb(146, 148, 155), // Button, Pressed, Border 2 Color.FromArgb(121, 123, 129), // Button, Checked, Border 1 Color.FromArgb(170, 172, 181) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(214, 216, 221), // Button, Tracking, Back 1 @@ -755,21 +808,21 @@ public abstract class PaletteMicrosoft365SilverLightModeBase : PaletteBase Color.FromArgb(216, 220, 222), // Button, Checked, Back 2 Color.FromArgb(219, 224, 222), // Button, Checked Tracking, Back 1 Color.FromArgb(225, 228, 224) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Variables - private KryptonColorTable365SilverLightMode _table; + private KryptonColorTable365SilverLightMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Constructor @@ -784,7 +837,7 @@ public abstract class PaletteMicrosoft365SilverLightModeBase : PaletteBase protected PaletteMicrosoft365SilverLightModeBase([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); @@ -820,17 +873,6 @@ protected PaletteMicrosoft365SilverLightModeBase([DisallowNull] Color[] schemeCo } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// - /// InheritBool value. - /// - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -910,7 +952,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -966,17 +1008,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -1003,7 +1045,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -1011,7 +1053,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1154,22 +1196,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1192,14 +1234,14 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[6], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1213,7 +1255,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1228,7 +1270,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1282,11 +1324,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1295,7 +1337,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1303,7 +1345,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1446,22 +1488,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1483,17 +1525,17 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] -: _buttonBackColors[7], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] + : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] + : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1507,7 +1549,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1561,7 +1603,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1571,7 +1613,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1815,17 +1857,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1833,21 +1875,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1867,23 +1909,23 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1892,13 +1934,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1906,7 +1948,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1917,7 +1959,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1943,17 +1985,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1961,22 +2003,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1995,23 +2037,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -2024,7 +2066,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -2032,7 +2074,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2043,7 +2085,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2167,7 +2209,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2272,7 +2314,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2365,12 +2407,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2386,12 +2428,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2407,12 +2449,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2423,7 +2465,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2460,7 +2502,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2639,7 +2681,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2649,9 +2691,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2730,7 +2772,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2929,7 +2971,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2959,7 +3001,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3131,7 +3173,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3207,7 +3249,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3504,6 +3546,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3529,6 +3572,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3589,6 +3633,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3817,7 +3862,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3842,7 +3887,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3940,7 +3985,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4012,9 +4057,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: return PaletteRibbonColorStyle.Empty; @@ -4023,18 +4070,25 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4056,12 +4110,15 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4112,7 +4169,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4127,9 +4184,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4142,11 +4201,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4164,16 +4224,19 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4220,9 +4283,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4237,9 +4302,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4252,9 +4319,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: @@ -4273,21 +4342,24 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4325,7 +4397,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4338,9 +4410,11 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: @@ -4359,16 +4433,19 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4404,7 +4481,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4417,9 +4494,11 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: @@ -4438,16 +4517,19 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4475,7 +4557,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4496,6 +4578,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4517,16 +4600,19 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4572,6 +4658,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4591,7 +4678,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4603,12 +4690,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4625,7 +4713,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4641,11 +4729,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4662,7 +4751,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4680,12 +4769,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4705,21 +4795,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4728,11 +4818,13 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4752,21 +4844,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4775,11 +4867,13 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4890,7 +4984,7 @@ public KryptonColorTable365SilverLightMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -5433,15 +5527,10 @@ public KryptonColorTable365SilverLightMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Non Official Themes/PaletteMicrosoft365Blue.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Non Official Themes/PaletteMicrosoft365Blue.cs index 066a08e86..d7a33caed 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Non Official Themes/PaletteMicrosoft365Blue.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Non Official Themes/PaletteMicrosoft365Blue.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,6 +16,22 @@ public class PaletteMicrosoft365Blue : PaletteMicrosoft365Base { #region Static Fields + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(187, 206, 230); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -25,14 +41,14 @@ public class PaletteMicrosoft365Blue : PaletteMicrosoft365Base #region Image Arrays - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -119,18 +135,18 @@ public class PaletteMicrosoft365Blue : PaletteMicrosoft365Base #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(116, 150, 194), // Tick marks Color.FromArgb(116, 150, 194), // Top track Color.FromArgb(152, 190, 241), // Bottom track Color.FromArgb(142, 180, 231), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(63, 101, 152) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(30, 57, 91), // TextLabelControl Color.FromArgb(30, 57, 91), // TextButtonNormal Color.Black, // TextButtonChecked @@ -223,40 +239,40 @@ public class PaletteMicrosoft365Blue : PaletteMicrosoft365Base Color.FromArgb(216, 228, 242), // RibbonGroupsArea5 Color.FromArgb(235, 240, 246), // RibbonGroupBorder1 Color.FromArgb(240, 246, 252), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(135, 142, 152), // RibbonGroupDialogDark Color.FromArgb(165, 174, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 Color.FromArgb(139, 160, 188), // RibbonMinimizeBarDark - Color.FromArgb(198, 218, 240), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 + Color.FromArgb(187, 206, 230), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 Color.FromArgb(189, 203, 218), // RibbonGroupFrameBorder1 Color.FromArgb(184, 199, 216), // RibbonGroupFrameBorder2 Color.FromArgb(233, 241, 250), // RibbonGroupFrameInside1 Color.FromArgb(222, 233, 246), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(30, 57, 91), // RibbonGroupCollapsedText Color.FromArgb(118, 153, 200), // AlternatePressedBack1 Color.FromArgb(184, 215, 253), // AlternatePressedBack2 @@ -333,7 +349,7 @@ public class PaletteMicrosoft365Blue : PaletteMicrosoft365Base Color.FromArgb(195, 212, 235), // AppButtonOuter1 Color.FromArgb(195, 212, 235), // AppButtonOuter2 Color.FromArgb(195, 212, 235), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(114, 142, 173), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.Black, // AppButtonMenuDocsText @@ -364,7 +380,7 @@ public class PaletteMicrosoft365Blue : PaletteMicrosoft365Base Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + ]; #endregion @@ -386,8 +402,8 @@ static PaletteMicrosoft365Blue() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -396,7 +412,7 @@ static PaletteMicrosoft365Blue() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// @@ -558,6 +574,41 @@ public PaletteMicrosoft365Blue() : base(_schemeOfficeColors, _checkBoxList, _gal }, _ => base.GetButtonSpecImage(style, state) }; + #endregion#region Tab Row Background + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion + } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Black.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Black.cs index 923d7e97c..6e9d68235 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Black.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Black.cs @@ -5,19 +5,37 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - /// + /// + /// Gets the single instance of the PaletteMicrosoft365Black palette. + /// public class PaletteMicrosoft365Black : PaletteMicrosoft365Base { #region Static Fields - #region ImageLists + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(99, 99, 99); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + + #region Image Lists private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; @@ -26,14 +44,14 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; + private static readonly Image? _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlackCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlackCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlackCloseActive; @@ -125,22 +143,21 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base #region Colour Arrays - //private static readonly Color _disabledRibbonText = Color.White; // Color.FromArgb(205, 205, 205); private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(17, 17, 17), // Tick marks Color.FromArgb(37, 37, 37), // Top track Color.FromArgb(174, 174, 174), // Bottom track Color.FromArgb(131, 132, 132), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(35, 35, 35) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { - Color.FromArgb(255, 255, 255), // (76, 83, 92), // TextLabelControl - Color.Black, // TextButtonNormal + [ + Color.FromArgb(70, 70, 70), // (76, 83, 92), // TextLabelControl + Color.FromArgb(70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(106, 106, 106), // ButtonNormalBorder1 Color.FromArgb(32, 32, 32), // ButtonNormalDefaultBorder @@ -156,7 +173,7 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base Color.FromArgb(172, 172, 172), // SeparatorHighBorder1 Color.FromArgb(111, 111, 111), // SeparatorHighBorder2 Color.FromArgb(139, 139, 139), // HeaderPrimaryBack1 - Color.FromArgb(72, 72, 72), // HeaderPrimaryBack2 + Color.FromArgb(72, 72, 72), // HeaderPrimaryBack2 Color.FromArgb(190, 190, 190), // HeaderSecondaryBack1 Color.FromArgb(145, 145, 145), // HeaderSecondaryBack2 Color.Black, // HeaderText @@ -212,14 +229,14 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base //Color.FromArgb(226, 226, 226), // RibbonTabTextNormal Color.White, // RibbonTabTextNormal Color.Black, // RibbonTabTextChecked - Color.FromArgb(32, 32, 32), // RibbonTabSelected1 + Color.FromArgb(32, 32, 32), // RibbonTabSelected1 Color.FromArgb(201, 201, 201), // RibbonTabSelected2 Color.FromArgb(192, 192, 192), // RibbonTabSelected3 Color.FromArgb(192, 192, 192), // RibbonTabSelected4 Color.FromArgb(192, 192, 192), // RibbonTabSelected5 - Color.FromArgb(32, 32, 32), // RibbonTabTracking1 + Color.FromArgb(32, 32, 32), // RibbonTabTracking1 Color.FromArgb(183, 183, 183), // RibbonTabTracking2 - Color.FromArgb(32, 32, 32), // RibbonTabHighlight1 + Color.FromArgb(32, 32, 32), // RibbonTabHighlight1 Color.FromArgb(201, 201, 201), // RibbonTabHighlight2 Color.FromArgb(192, 192, 192), // RibbonTabHighlight3 Color.FromArgb(192, 192, 192), // RibbonTabHighlight4 @@ -232,40 +249,40 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base Color.FromArgb(33, 33, 33), // RibbonGroupsArea5 Color.FromArgb(159, 159, 159), // RibbonGroupBorder1 Color.FromArgb(194, 194, 194), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(92, 92, 94), // RibbonGroupDialogDark Color.FromArgb(123, 125, 125), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(78, 78, 78), // RibbonMinimizeBarDark - Color.FromArgb(110, 110, 110), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(61, 61, 61), // RibbonMinimizeBarDark + Color.FromArgb(99, 99, 99), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 Color.FromArgb(147, 147, 147), // RibbonGroupFrameBorder1 Color.FromArgb(139, 139, 139), // RibbonGroupFrameBorder2 Color.FromArgb(187, 187, 188), // RibbonGroupFrameInside1 Color.FromArgb(167, 167, 168), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(255, 255, 255), // RibbonGroupCollapsedText Color.FromArgb(158, 163, 172), // AlternatePressedBack1 Color.FromArgb(212, 215, 216), // AlternatePressedBack2 @@ -293,18 +310,12 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base Color.FromArgb(174, 174, 175), // RibbonQATButtonLight Color.FromArgb(161, 161, 161), // RibbonQATOverflow1 Color.FromArgb(68, 68, 68), // RibbonQATOverflow2 - Color.FromArgb(82, 82, - 82), // RibbonGroupSeparatorDark - Color.FromArgb(190, 190, - 190), // RibbonGroupSeparatorLight - Color.FromArgb(210, 217, - 219), // ButtonClusterButtonBack1 - Color.FromArgb(214, 222, - 223), // ButtonClusterButtonBack2 - Color.FromArgb(179, 188, - 191), // ButtonClusterButtonBorder1 - Color.FromArgb(145, 156, - 159), // ButtonClusterButtonBorder2 + Color.FromArgb(82, 82, 82), // RibbonGroupSeparatorDark + Color.FromArgb(190, 190, 190), // RibbonGroupSeparatorLight + Color.FromArgb(210, 217, 219), // ButtonClusterButtonBack1 + Color.FromArgb(214, 222, 223), // ButtonClusterButtonBack2 + Color.FromArgb(179, 188, 191), // ButtonClusterButtonBorder1 + Color.FromArgb(145, 156, 159), // ButtonClusterButtonBorder2 Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor Color.FromArgb(205, 205, 205), // GridListNormal1 Color.FromArgb(166, 166, 166), // GridListNormal2 @@ -322,8 +333,8 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base Color.FromArgb(245, 210, 87), // GridSheetRowSelected Color.FromArgb(218, 220, 221), // GridDataCellBorder Color.FromArgb(183, 219, 255), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.White, // InputControlTextDisabled + Color.FromArgb(70, 70, 70), // InputControlTextNormal + Color.FromArgb(128, 128, 128), // InputControlTextDisabled Color.FromArgb(132, 132, 132), // InputControlBorderNormal Color.FromArgb(187, 187, 187), // InputControlBorderDisabled Color.FromArgb(255, 255, 255), // InputControlBackNormal @@ -342,7 +353,7 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base Color.FromArgb(70, 70, 70), // AppButtonOuter1 Color.FromArgb(70, 70, 70), // AppButtonOuter2 Color.FromArgb(70, 70, 70), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(50, 50, 50), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.Black, // AppButtonMenuDocsText @@ -358,7 +369,7 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base Color.FromArgb(82, 82, 82), // RibbonGroupBorder3 Color.FromArgb(176, 176, 176), // RibbonGroupBorder4 Color.FromArgb(178, 178, 178), // RibbonGroupBorder5 - Color.FromArgb(36, 36, 36), // RibbonGroupTitleText + Color.White, // FromArgb(36, 36, 36), // RibbonGroupTitleText Color.FromArgb(155, 157, 160), // RibbonDropArrowLight Color.FromArgb(27, 29, 40), // RibbonDropArrowDark Color.FromArgb(137, 137, 137), // HeaderDockInactiveBack1 @@ -371,12 +382,10 @@ public class PaletteMicrosoft365Black : PaletteMicrosoft365Base Color.FromArgb(148, 148, 143), // ButtonNavigatorPressed2 Color.FromArgb(91, 91, 91), // ButtonNavigatorChecked1 Color.FromArgb(73, 73, 73), // ButtonNavigatorChecked2 - Color.FromArgb(201, 201, - 201) // ToolTipBottom - }; + Color.FromArgb(201, 201, 201) // ToolTipBottom + ]; #endregion - #endregion #region Constructors @@ -399,8 +408,8 @@ static PaletteMicrosoft365Black() _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -409,7 +418,7 @@ static PaletteMicrosoft365Black() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -577,4584 +586,40 @@ public PaletteMicrosoft365Black() : base(_schemeOfficeColors, _checkBoxList, _ga _ => base.GetButtonSpecImage(style, state) }; #endregion - } - - #region Class: PaletteMicrosoft365BlackThemeBase - - /// - /// Provides a base for Office 365 palettes. - /// - /// - public abstract class PaletteMicrosoft365BlackThemeBase : PaletteBase - { - #region Static Fields - private static readonly Padding _contentPaddingGrid = new Padding(2, 1, 2, 1); - private static readonly Padding _contentPaddingHeader1 = new Padding(2, 1, 2, 1); - private static readonly Padding _contentPaddingHeader2 = new Padding(2, 1, 2, 1); - private static readonly Padding _contentPaddingDock = new Padding(2, 2, 2, 1); - private static readonly Padding _contentPaddingCalendar = new Padding(2); - private static readonly Padding _contentPaddingHeaderForm = new Padding(10, 6, 3, 0); // 10 is from the RealWindowFrameSize +1 - private static readonly Padding _contentPaddingLabel = new Padding(3, 1, 3, 1); - private static readonly Padding _contentPaddingLabel2 = new Padding(8, 2, 8, 2); - private static readonly Padding _contentPaddingButtonInputControl = new Padding(0); - private static readonly Padding _contentPaddingButton12 = new Padding(1); - private static readonly Padding _contentPaddingButton3 = new Padding(1, 0, 1, 0); - private static readonly Padding _contentPaddingButton4 = new Padding(4, 3, 4, 3); - private static readonly Padding _contentPaddingButton5 = new Padding(3, 3, 3, 2); - private static readonly Padding _contentPaddingButton6 = new Padding(3); - private static readonly Padding _contentPaddingButton7 = new Padding(1, 1, 0, 1); - private static readonly Padding _contentPaddingButtonForm = new Padding(0); - private static readonly Padding _contentPaddingButtonGallery = new Padding(1, 0, 1, 0); - private static readonly Padding _contentPaddingButtonListItem = new Padding(0, -1, 0, -1); - private static readonly Padding _contentPaddingToolTip = new Padding(2); - private static readonly Padding _contentPaddingSuperTip = new Padding(4); - private static readonly Padding _contentPaddingKeyTip = new Padding(0, -1, 0, -3); - private static readonly Padding _contentPaddingContextMenuHeading = new Padding(8, 2, 8, 0); - private static readonly Padding _contentPaddingContextMenuImage = new Padding(0); - private static readonly Padding _contentPaddingContextMenuItemText = new Padding(9, 1, 7, 0); - private static readonly Padding _contentPaddingContextMenuItemTextAlt = new Padding(7, 1, 6, 0); - private static readonly Padding _contentPaddingContextMenuItemShortcutText = new Padding(3, 1, 4, 0); - private static readonly Padding _metricPaddingRibbon = new Padding(0, 1, 1, 1); - private static readonly Padding _metricPaddingRibbonAppButton = new Padding(3, 0, 3, 0); - private static readonly Padding _metricPaddingHeader = new Padding(0, 3, 1, 3); - private static readonly Padding _metricPaddingHeaderForm = new Padding(0, 3, 0, -3); // Move the Maximised Form buttons down a bit - private static readonly Padding _metricPaddingInputControl = new Padding(0, 1, 0, 1); - private static readonly Padding _metricPaddingBarInside = new Padding(3); - private static readonly Padding _metricPaddingBarTabs = new Padding(0); - private static readonly Padding _metricPaddingBarOutside = new Padding(0, 0, 0, 3); - private static readonly Padding _metricPaddingPageButtons = new Padding(1, 3, 1, 3); - private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; - private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; - private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; - private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; - private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; - private static readonly Image _buttonSpecPrevious = GenericProfessionalImageResources.ProfessionalPreviousButton; - private static readonly Image _buttonSpecArrowLeft = GenericProfessionalImageResources.ProfessionalArrowLeftButton; - private static readonly Image _buttonSpecArrowRight = GenericProfessionalImageResources.ProfessionalArrowRightButton; - private static readonly Image _buttonSpecArrowUp = GenericProfessionalImageResources.ProfessionalArrowUpButton; - private static readonly Image _buttonSpecArrowDown = GenericProfessionalImageResources.ProfessionalArrowDownButton; - private static readonly Image _buttonSpecDropDown = GenericProfessionalImageResources.ProfessionalDropDownButton; - private static readonly Image _buttonSpecPinVertical = ProfessionalPinImageResources.ProfessionalPinVerticalButton; - private static readonly Image _buttonSpecPinHorizontal = ProfessionalPinImageResources.ProfessionalPinHorizontalButton; - private static readonly Image _buttonSpecPendantClose = Office2010MDIImageResources.Office2010ButtonMDIClose; - private static readonly Image _buttonSpecPendantMin = Office2010MDIImageResources.Office2010ButtonMDIMin; - private static readonly Image _buttonSpecPendantRestore = Office2010MDIImageResources.Office2010ButtonMDIRestore; - private static readonly Image _buttonSpecWorkspaceMaximize = ProfessionalControlBoxResources.ProfessionalMaximize; - private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; - private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; - private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; - - private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText3 = Color.GhostWhite; // For Black themes - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); - private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); - private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); - private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); - private static readonly Color _disabledGlyphLight = Color.FromArgb(237, 237, 237); - private static readonly Color _contextCheckedTabBorder1 = Color.FromArgb(223, 119, 0); - private static readonly Color _contextCheckedTabBorder2 = Color.FromArgb(230, 190, 129); - private static readonly Color _contextCheckedTabBorder3 = Color.FromArgb(220, 202, 171); - private static readonly Color _contextCheckedTabBorder4 = Color.FromArgb(255, 252, 247); - private static readonly Color _contextTabSeparator = Color.White; - private static readonly Color _contextTextColor = Color.White; - private static readonly Color _todayBorder = Color.FromArgb(187, 85, 3); - private static readonly Color _toolTipBack1 = Color.FromArgb(255, 255, 255); - private static readonly Color _toolTipBack2 = Color.FromArgb(201, 217, 239); - private static readonly Color _toolTipBorder = Color.FromArgb(118, 118, 118); - private static readonly Color _toolTipText = Color.FromArgb(76, 76, 76); - private static readonly Color _contextMenuBack = Color.White; - private static readonly Color _contextMenuBorder = Color.FromArgb(134, 134, 134); - private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); - private static readonly Color _contextMenuImageBackChecked = Color.FromArgb(252, 241, 194); - private static readonly Color _contextMenuImageBorderChecked = Color.FromArgb(242, 149, 54); - private static readonly Color _formCloseBorderTracking = Color.FromArgb(155, 61, 61); - private static readonly Color _formCloseBorderPressed = Color.FromArgb(155, 61, 61); - private static readonly Color _formCloseBorderCheckedNormal = Color.FromArgb(155, 61, 61); - private static readonly Color _formCloseTracking1 = Color.FromArgb(255, 132, 130); - private static readonly Color _formCloseTracking2 = Color.FromArgb(227, 97, 98); - private static readonly Color _formClosePressed1 = Color.FromArgb(242, 119, 118); - private static readonly Color _formClosePressed2 = Color.FromArgb(206, 85, 84); - private static readonly Color _formCloseChecked1 = Color.FromArgb(255, 132, 130); - private static readonly Color _formCloseChecked2 = Color.FromArgb(255, 132, 130); - private static readonly Color _formCloseCheckedTracking1 = Color.FromArgb(255, 132, 130); - private static readonly Color _formCloseCheckedTracking2 = Color.FromArgb(255, 132, 130); - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), - Color.FromArgb(214, 220, 231), - Color.FromArgb(188, 198, 211), - Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) - }; - - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), - Color.FromArgb(248, 230, 143), - Color.FromArgb(238, 213, 126), - Color.FromArgb(254, 247, 129), - Color.FromArgb(240, 201, 41) - }; - - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), - Color.FromArgb(228, 198, 149), - Color.FromArgb(166, 97, 7), - Color.FromArgb(242, 155, 57), - Color.FromArgb(236, 136, 9) - }; - - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(180, 180, 180), // Button, Disabled, Border - Color.FromArgb(237, 201, 88), // Button, Tracking, Border 1 - Color.FromArgb(243, 213, 73), // Button, Tracking, Border 2 - Color.FromArgb(194, 118, 43), // Button, Pressed, Border 1 - Color.FromArgb(194, 158, 71), // Button, Pressed, Border 2 - Color.FromArgb(194, 138, 48), // Button, Checked, Border 1 - Color.FromArgb(194, 164, 77) // Button, Checked, Border 2 - }; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 - Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 - Color.FromArgb(248, 225, 135), // Button, Tracking, Back 1 - Color.FromArgb(251, 248, 224), // Button, Tracking, Back 2 - Color.FromArgb(255, 228, 138), // Button, Pressed, Back 1 - Color.FromArgb(194, 118, 43), // Button, Pressed, Back 2 - Color.FromArgb(255, 216, 108), // Button, Checked, Back 1 - Color.FromArgb(255, 244, 128), // Button, Checked, Back 2 - Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 - Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; - /*private static readonly Color[] _appButtonNormal = new Color[] { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; - private static readonly Color[] _appButtonTrack = new Color[] { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; - private static readonly Color[] _appButtonPressed = new Color[] { Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) }; - private static readonly Color[] _buttonBorderColors = new Color[]{ Color.FromArgb(180, 180, 180), // Button, Disabled, Border - Color.FromArgb(205, 230, 247), // Button, Tracking, Border 1 - Color.FromArgb(205, 230, 247), // Button, Tracking, Border 2 - Color.FromArgb(146, 192, 244), // Button, Pressed, Border 1 - Color.FromArgb(146, 192, 244), // Button, Pressed, Border 2 - Color.FromArgb(146, 192, 244), // Button, Checked, Border 1 - Color.FromArgb(146, 192, 244) // Button, Checked, Border 2 - }; - private static readonly Color[] _buttonBackColors = new Color[]{ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 - Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 - Color.FromArgb(205, 230, 247), // Button, Tracking, Back 1 - Color.FromArgb(205, 230, 247), // Button, Tracking, Back 2 - Color.FromArgb(146, 192, 244), // Button, Pressed, Back 1 - Color.FromArgb(146, 192, 244), // Button, Pressed, Back 2 - Color.FromArgb(146, 192, 244), // Button, Checked, Back 1 - Color.FromArgb(146, 192, 244), // Button, Checked, Back 2 - Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 - Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - };*/ - #endregion - #region Variables - private KryptonColorTable365 _table; + #region Tab Row Background - private readonly Color[] _ribbonColours; + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; - private readonly Color[] _trackBarColours; - private readonly ImageList _checkBoxList; - private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; - #endregion - - #region Constructor - /// - /// Initializes a new instance of the class. - /// - /// The scheme colours. - /// The check box list. - /// The gallery button list. - /// The radio button array. - /// The track bar colours. - protected PaletteMicrosoft365BlackThemeBase([DisallowNull] Color[] schemeColours, - [DisallowNull] ImageList checkBoxList, - [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) - { - Debug.Assert(schemeColours != null); - Debug.Assert(checkBoxList != null); - Debug.Assert(galleryButtonList != null); - Debug.Assert(radioButtonArray != null); - - if (schemeColours != null) - { - _ribbonColours = schemeColours; - } - - if (checkBoxList != null) - { - _checkBoxList = checkBoxList; - } - - if (galleryButtonList != null) - { - _galleryButtonList = galleryButtonList; - } - - if (radioButtonArray != null) - { - _radioButtonArray = radioButtonArray; - } - - if (trackBarColours != null) - { - _trackBarColours = trackBarColours; - } - - DefineFonts(); - } - #endregion + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// - /// InheritBool value. - /// - public override InheritBool GetAllowFormChrome() => InheritBool.True; + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; - #endregion + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; - #region Renderer - /// - /// Gets the renderer to use for this palette. - /// - /// - /// Renderer to use for drawing palette settings. - /// - public override IRenderer GetRenderer() => KryptonManager.RenderMicrosoft365; + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; #endregion - #region Back - /// - /// Gets a value indicating if background should be drawn. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return InheritBool.Inherit; - } - - return style switch - { - PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 => InheritBool.False, - PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose => state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, - _ => InheritBool.True - }, - PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight => state switch - { - PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, - _ => InheritBool.True - }, - PaletteBackStyle.ButtonInputControl => state is PaletteState.Disabled or PaletteState.Normal ? InheritBool.False : InheritBool.True, - _ => InheritBool.True // Default to drawing the background - }; - } - - /// - /// Gets the graphics drawing hint for the background. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteGraphicsHint.Inherit; - } - - return style switch - { - PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the first background color. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) - { - return Color.Empty; - } - - switch (style) - { - case PaletteBackStyle.GridHeaderColumnList: - case PaletteBackStyle.GridHeaderColumnCustom1: - case PaletteBackStyle.GridHeaderColumnCustom2: - case PaletteBackStyle.GridHeaderColumnCustom3: - case PaletteBackStyle.GridHeaderRowList: - case PaletteBackStyle.GridHeaderRowCustom1: - case PaletteBackStyle.GridHeaderRowCustom2: - case PaletteBackStyle.GridHeaderRowCustom3: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridListPressed1], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridListSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridListNormal1] - }; - case PaletteBackStyle.GridHeaderColumnSheet: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetColPressed1], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetColSelected1], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetColNormal1] - }; - case PaletteBackStyle.GridHeaderRowSheet: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowPressed], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowNormal] - }; - case PaletteBackStyle.GridDataCellList: - case PaletteBackStyle.GridDataCellCustom1: - case PaletteBackStyle.GridDataCellCustom2: - case PaletteBackStyle.GridDataCellCustom3: - return state == PaletteState.CheckedNormal ? _ribbonColours[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; - - case PaletteBackStyle.GridDataCellSheet: - return state == PaletteState.CheckedNormal ? _buttonBackColors[6] : SystemColors.Window; - - case PaletteBackStyle.TabHighProfile: - case PaletteBackStyle.TabStandardProfile: - case PaletteBackStyle.TabLowProfile: - case PaletteBackStyle.TabOneNote: - case PaletteBackStyle.TabCustom1: - case PaletteBackStyle.TabCustom2: - case PaletteBackStyle.TabCustom3: - switch (state) - { - case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; - - case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; - - case PaletteState.Pressed: - case PaletteState.Tracking: - switch (style) - { - case PaletteBackStyle.TabLowProfile: - return Color.Empty; - case PaletteBackStyle.TabHighProfile: - return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; - default: - return SystemColors.Window; - } - - case PaletteState.CheckedNormal: - case PaletteState.CheckedPressed: - case PaletteState.CheckedTracking: - if (style == PaletteBackStyle.TabHighProfile) - { - if (state == PaletteState.CheckedNormal) - { - return _buttonBackColors[6]; - } - else - { - return state == PaletteState.CheckedPressed ? _buttonBackColors[4] : _buttonBackColors[8]; - } - } - else - { - return SystemColors.Window; - } - - default: - throw new ArgumentOutOfRangeException(nameof(state)); - } - case PaletteBackStyle.TabDock: - case PaletteBackStyle.TabDockAutoHidden: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.HeaderForm: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive1] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive1]; - - case PaletteBackStyle.HeaderCalendar: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] - : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; - - case PaletteBackStyle.HeaderPrimary: - case PaletteBackStyle.HeaderCustom1: - case PaletteBackStyle.HeaderCustom2: - case PaletteBackStyle.HeaderCustom3: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1]; - - case PaletteBackStyle.HeaderDockInactive: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1]; - - case PaletteBackStyle.HeaderDockActive: - return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[6]; - - case PaletteBackStyle.HeaderSecondary: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderSecondaryBack1]; - - case PaletteBackStyle.SeparatorHighInternalProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighInternalBorder1]; - - case PaletteBackStyle.SeparatorHighProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighBorder1]; - - case PaletteBackStyle.SeparatorLowProfile: - case PaletteBackStyle.SeparatorCustom1: - case PaletteBackStyle.SeparatorCustom2: - case PaletteBackStyle.SeparatorCustom3: - case PaletteBackStyle.PanelClient: - case PaletteBackStyle.PanelCustom1: - case PaletteBackStyle.PanelCustom2: - case PaletteBackStyle.PanelCustom3: - case PaletteBackStyle.ControlGroupBox: - case PaletteBackStyle.GridBackgroundList: - case PaletteBackStyle.GridBackgroundSheet: - case PaletteBackStyle.GridBackgroundCustom1: - case PaletteBackStyle.GridBackgroundCustom2: - case PaletteBackStyle.GridBackgroundCustom3: - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - case PaletteBackStyle.PanelAlternate: - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - case PaletteBackStyle.PanelRibbonInactive: - return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight]; - case PaletteBackStyle.FormMain: - case PaletteBackStyle.FormCustom1: - case PaletteBackStyle.FormCustom2: - case PaletteBackStyle.FormCustom3: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveLight] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderActiveLight]; - - case PaletteBackStyle.ControlClient: - case PaletteBackStyle.ControlAlternate: - case PaletteBackStyle.ControlCustom1: - case PaletteBackStyle.ControlCustom2: - case PaletteBackStyle.ControlCustom3: - return SystemColors.Window; - case PaletteBackStyle.InputControlStandalone: - case PaletteBackStyle.InputControlRibbon: - case PaletteBackStyle.InputControlCustom1: - case PaletteBackStyle.InputControlCustom2: - case PaletteBackStyle.InputControlCustom3: - if (state == PaletteState.Disabled) - { - return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; - } - else - { - return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) - ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] - : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; - } - case PaletteBackStyle.ControlRibbon: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; - case PaletteBackStyle.ControlRibbonAppMenu: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack1]; - case PaletteBackStyle.ControlToolTip: - return _toolTipBack1; - case PaletteBackStyle.ContextMenuOuter: - return _contextMenuBack; - case PaletteBackStyle.ContextMenuSeparator: - case PaletteBackStyle.ContextMenuItemSplit: - return state switch - { - PaletteState.Tracking => _buttonBackColors[2], - _ => _contextMenuBack - }; - case PaletteBackStyle.ContextMenuInner: - return _contextMenuBack; - case PaletteBackStyle.ContextMenuHeading: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingBack]; - case PaletteBackStyle.ContextMenuItemImageColumn: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuImageColumn]; - case PaletteBackStyle.ContextMenuItemImage: - return _contextMenuImageBackChecked; - case PaletteBackStyle.ButtonForm: - return state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], - PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.ButtonFormClose: - return state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _formCloseChecked1, - PaletteState.Tracking => _formCloseTracking1, - PaletteState.CheckedTracking => _formCloseCheckedTracking1, - PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.ButtonStandalone: - case PaletteBackStyle.ButtonGallery: - case PaletteBackStyle.ButtonAlternate: - case PaletteBackStyle.ButtonLowProfile: - case PaletteBackStyle.ButtonBreadCrumb: - case PaletteBackStyle.ButtonListItem: - case PaletteBackStyle.ButtonCommand: - case PaletteBackStyle.ButtonButtonSpec: - case PaletteBackStyle.ButtonCalendarDay: - case PaletteBackStyle.ButtonCluster: - case PaletteBackStyle.ButtonCustom1: - case PaletteBackStyle.ButtonCustom2: - case PaletteBackStyle.ButtonCustom3: - case PaletteBackStyle.ButtonInputControl: - case PaletteBackStyle.ContextMenuItemHighlight: - return state switch - { - PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], - PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[6], - PaletteState.Tracking => _buttonBackColors[2], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.ButtonNavigatorStack: - case PaletteBackStyle.ButtonNavigatorOverflow: - case PaletteBackStyle.ButtonNavigatorMini: - return state switch - { - PaletteState.Disabled => _buttonBackColors[1], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorTrack1], - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorPressed1], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked1], - _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] - }; - default: - throw new ArgumentOutOfRangeException(nameof(style)); - } - } - - /// - /// Gets the second back color. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) - { - return Color.Empty; - } - - switch (style) - { - case PaletteBackStyle.GridHeaderColumnList: - case PaletteBackStyle.GridHeaderColumnCustom1: - case PaletteBackStyle.GridHeaderColumnCustom2: - case PaletteBackStyle.GridHeaderColumnCustom3: - case PaletteBackStyle.GridHeaderRowList: - case PaletteBackStyle.GridHeaderRowCustom1: - case PaletteBackStyle.GridHeaderRowCustom2: - case PaletteBackStyle.GridHeaderRowCustom3: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridListPressed2], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridListSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridListNormal2] - }; - case PaletteBackStyle.GridHeaderColumnSheet: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetColPressed2], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetColSelected2], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetColNormal2] - }; - case PaletteBackStyle.GridHeaderRowSheet: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Tracking or PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowPressed], - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowSelected], - _ => _ribbonColours[(int)SchemeOfficeColors.GridSheetRowNormal] - }; - case PaletteBackStyle.GridDataCellList: - case PaletteBackStyle.GridDataCellCustom1: - case PaletteBackStyle.GridDataCellCustom2: - case PaletteBackStyle.GridDataCellCustom3: - return state == PaletteState.CheckedNormal ? _ribbonColours[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; - - case PaletteBackStyle.GridDataCellSheet: - return state == PaletteState.CheckedNormal ? _buttonBackColors[7] : SystemColors.Window; - - case PaletteBackStyle.TabHighProfile: - case PaletteBackStyle.TabStandardProfile: - case PaletteBackStyle.TabLowProfile: - case PaletteBackStyle.TabOneNote: - case PaletteBackStyle.TabCustom1: - case PaletteBackStyle.TabCustom2: - case PaletteBackStyle.TabCustom3: - return state switch - { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.TabDock: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], - PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.TabDockAutoHidden: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], - PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.HeaderForm: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive2] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive2]; - - case PaletteBackStyle.HeaderCalendar: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] - : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; - - case PaletteBackStyle.HeaderPrimary: - case PaletteBackStyle.HeaderCustom1: - case PaletteBackStyle.HeaderCustom2: - case PaletteBackStyle.HeaderCustom3: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2]; - - case PaletteBackStyle.HeaderDockInactive: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack2]; - - case PaletteBackStyle.HeaderDockActive: - return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[7]; - - case PaletteBackStyle.HeaderSecondary: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.HeaderSecondaryBack2]; - - case PaletteBackStyle.SeparatorHighInternalProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighInternalBorder2]; - - case PaletteBackStyle.SeparatorHighProfile: - return state == PaletteState.Disabled ? _disabledBack : _ribbonColours[(int)SchemeOfficeColors.SeparatorHighBorder2]; - - case PaletteBackStyle.SeparatorLowProfile: - case PaletteBackStyle.SeparatorCustom1: - case PaletteBackStyle.SeparatorCustom2: - case PaletteBackStyle.SeparatorCustom3: - case PaletteBackStyle.PanelClient: - case PaletteBackStyle.PanelCustom1: - case PaletteBackStyle.PanelCustom2: - case PaletteBackStyle.PanelCustom3: - case PaletteBackStyle.ControlGroupBox: - case PaletteBackStyle.GridBackgroundList: - case PaletteBackStyle.GridBackgroundSheet: - case PaletteBackStyle.GridBackgroundCustom1: - case PaletteBackStyle.GridBackgroundCustom2: - case PaletteBackStyle.GridBackgroundCustom3: - return _ribbonColours[(int)SchemeOfficeColors.PanelClient]; - case PaletteBackStyle.PanelAlternate: - return _ribbonColours[(int)SchemeOfficeColors.PanelAlternative]; - case PaletteBackStyle.PanelRibbonInactive: - return _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark]; - case PaletteBackStyle.FormMain: - case PaletteBackStyle.FormCustom1: - case PaletteBackStyle.FormCustom2: - case PaletteBackStyle.FormCustom3: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactiveDark] - : _ribbonColours[(int)SchemeOfficeColors.FormBorderActiveDark]; - - case PaletteBackStyle.ControlClient: - case PaletteBackStyle.ControlAlternate: - case PaletteBackStyle.ControlCustom1: - case PaletteBackStyle.ControlCustom2: - case PaletteBackStyle.ControlCustom3: - return SystemColors.Window; - case PaletteBackStyle.InputControlStandalone: - case PaletteBackStyle.InputControlRibbon: - case PaletteBackStyle.InputControlCustom1: - case PaletteBackStyle.InputControlCustom2: - case PaletteBackStyle.InputControlCustom3: - if (state == PaletteState.Disabled) - { - return _ribbonColours[(int)SchemeOfficeColors.InputControlBackDisabled]; - } - else - { - return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) - ? _ribbonColours[(int)SchemeOfficeColors.InputControlBackNormal] - : _ribbonColours[(int)SchemeOfficeColors.InputControlBackInactive]; - } - case PaletteBackStyle.ControlRibbon: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; - case PaletteBackStyle.ControlRibbonAppMenu: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack2]; - case PaletteBackStyle.ControlToolTip: - return _ribbonColours[(int)SchemeOfficeColors.ToolTipBottom]; - case PaletteBackStyle.ContextMenuOuter: - return _contextMenuBack; - case PaletteBackStyle.ContextMenuSeparator: - case PaletteBackStyle.ContextMenuItemSplit: - return state switch - { - PaletteState.Tracking => _buttonBackColors[3], - _ => _contextMenuBack - }; - case PaletteBackStyle.ContextMenuInner: - return _contextMenuBack; - case PaletteBackStyle.ContextMenuHeading: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingBack]; - case PaletteBackStyle.ContextMenuItemImageColumn: - return _ribbonColours[(int)SchemeOfficeColors.ContextMenuImageColumn]; - case PaletteBackStyle.ContextMenuItemImage: - return _contextMenuImageBackChecked; - case PaletteBackStyle.ButtonForm: - return state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], - PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.ButtonFormClose: - return state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _formCloseChecked2, - PaletteState.Tracking => _formCloseTracking2, - PaletteState.CheckedTracking => _formCloseCheckedTracking2, - PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.ButtonStandalone: - case PaletteBackStyle.ButtonGallery: - case PaletteBackStyle.ButtonAlternate: - case PaletteBackStyle.ButtonLowProfile: - case PaletteBackStyle.ButtonBreadCrumb: - case PaletteBackStyle.ButtonListItem: - case PaletteBackStyle.ButtonCommand: - case PaletteBackStyle.ButtonButtonSpec: - case PaletteBackStyle.ButtonCalendarDay: - case PaletteBackStyle.ButtonCluster: - case PaletteBackStyle.ButtonCustom1: - case PaletteBackStyle.ButtonCustom2: - case PaletteBackStyle.ButtonCustom3: - case PaletteBackStyle.ButtonInputControl: - case PaletteBackStyle.ContextMenuItemHighlight: - return state switch - { - PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], - PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] -: _buttonBackColors[7], - PaletteState.Tracking => _buttonBackColors[3], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], - PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl -? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] -: _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - case PaletteBackStyle.ButtonNavigatorStack: - case PaletteBackStyle.ButtonNavigatorOverflow: - case PaletteBackStyle.ButtonNavigatorMini: - return state switch - { - PaletteState.Disabled => _buttonBackColors[1], - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorTrack2], - PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorPressed2], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked2], - _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] - }; - default: - throw new ArgumentOutOfRangeException(nameof(style)); - } - } - - /// - /// Gets the color background drawing style. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteColorStyle.Inherit; - } - - return style switch - { - PaletteBackStyle.HeaderForm => PaletteColorStyle.Rounding5, - PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 => PaletteColorStyle.Rounded, - PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 => PaletteColorStyle.Linear, - PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderRowSheet => PaletteColorStyle.Linear, - PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, - PaletteBackStyle.GridDataCellSheet => PaletteColorStyle.ExpertChecked, - PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 => state switch - { - PaletteState.Tracking or PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.GlassFade, - _ => PaletteColorStyle.QuarterPhase - }, - PaletteBackStyle.TabStandardProfile => state switch - { - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.Solid, - PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.GlassFade, - _ => PaletteColorStyle.QuarterPhase - }, - PaletteBackStyle.TabLowProfile => PaletteColorStyle.Solid, - PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden => PaletteColorStyle.Linear, - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.ButtonCalendarDay => PaletteColorStyle.Solid, - PaletteBackStyle.ControlRibbonAppMenu => PaletteColorStyle.Switch90, - PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit => state == PaletteState.Tracking ? PaletteColorStyle.GlassTrackingFull : PaletteColorStyle.Solid, - PaletteBackStyle.ControlToolTip => PaletteColorStyle.Linear, - PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 => PaletteColorStyle.SolidAllLine, - PaletteBackStyle.SeparatorHighProfile => PaletteColorStyle.RoundedTopLight, - PaletteBackStyle.SeparatorHighInternalProfile => PaletteColorStyle.Linear, - PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.HeaderDockActive => PaletteColorStyle.Rounded, - PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose => state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, - PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch - { - PaletteState.Disabled => PaletteColorStyle.Solid, - PaletteState.Normal => PaletteColorStyle.Linear, - PaletteState.Tracking => PaletteColorStyle.ExpertTracking, - PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, - PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, - PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, - PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch - { - PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.SolidAllLine, - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.ExpertSquareHighlight, - _ => PaletteColorStyle.Solid - }, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color alignment. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } - - return style switch - { - PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - => PaletteRectangleAlign.Control, - PaletteBackStyle.ControlToolTip or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color background angle. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return -1f; - } - - return style switch - { - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => 90f, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets a background image. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return null; - } - - return style switch - { - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => null, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } + #region AppButton Colors - /// - /// Gets the background image style. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteImageStyle.Inherit; - } + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; - return style switch - { - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteImageStyle.Tile, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; - /// - /// Gets the image alignment. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; - return style switch - { - PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - #endregion - - #region Border - /// - /// Gets a value indicating if border should be drawn. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) - { - // Check for the calendar day today override - if (state == PaletteState.TodayOverride) - { - if (style == PaletteBorderStyle.ButtonCalendarDay) - { - return InheritBool.True; - } - } - - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return InheritBool.Inherit; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ContextMenuInner => InheritBool.False, - PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => InheritBool.True, - PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonInputControl => state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, - _ => InheritBool.True - }, - PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight => state switch - { - PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, - _ => InheritBool.True - }, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets a value indicating which borders to draw. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// PaletteDrawBorders value. - public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteDrawBorders.Inherit; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteDrawBorders.All, - PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => PaletteDrawBorders.All, - PaletteBorderStyle.ContextMenuHeading => PaletteDrawBorders.Bottom, - PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => PaletteDrawBorders.Top, - PaletteBorderStyle.ContextMenuItemImageColumn => PaletteDrawBorders.Right, - PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ContextMenuInner => PaletteDrawBorders.None, - PaletteBorderStyle.HeaderForm => PaletteDrawBorders.TopLeftRight, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the graphics drawing hint for the border. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// PaletteGraphicsHint value. - public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteGraphicsHint.Inherit; - } - - return style switch - { - PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteGraphicsHint.AntiAlias, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the first border color. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) - { - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) - { - // Check for the calendar day today override - if (state == PaletteState.TodayOverride) - { - if (style == PaletteBorderStyle.ButtonCalendarDay) - { - return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; - } - } - - return Color.Empty; - } - - return style switch - { - PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch - { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.TabDock => state switch - { - PaletteState.Disabled => _disabledBorder, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.TabDockAutoHidden => state switch - { - PaletteState.Disabled => _disabledBorder, - PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], - PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, - PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch - { - PaletteState.Disabled => _buttonBorderColors[0], - PaletteState.Tracking => _buttonBorderColors[1], - _ => _contextMenuHeadingBorder - }, - PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, - PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], - PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], - PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], - PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, - PaletteBorderStyle.ContextMenuInner => _contextMenuBack, - PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, - PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], - PaletteBorderStyle.ButtonForm => state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonFormClose => state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, - PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, - PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch - { - PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery - ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] - : _buttonBorderColors[0], - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], - PaletteState.CheckedNormal => _buttonBorderColors[5], - PaletteState.Tracking => _buttonBorderColors[1], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonInputControl => state switch - { - PaletteState.Disabled => _buttonBorderColors[0], - PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.Tracking => _buttonBorderColors[1], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonCalendarDay => state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], - PaletteState.CheckedNormal => _buttonBackColors[6], - PaletteState.Tracking => _buttonBackColors[2], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the second border color. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) - { - if (CommonHelper.IsOverrideState(state)) - { - // Check for the calendar day today override - if (state == PaletteState.TodayOverride) - { - if (style == PaletteBorderStyle.ButtonCalendarDay) - { - return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; - } - } - - return Color.Empty; - } - - return style switch - { - PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch - { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.TabDock => state switch - { - PaletteState.Disabled => _disabledBorder, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.TabDockAutoHidden => state switch - { - PaletteState.Disabled => _disabledBorder, - PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], - PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, - PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch - { - PaletteState.Disabled => _buttonBorderColors[0], - PaletteState.Tracking => _buttonBorderColors[2], - _ => _contextMenuHeadingBorder - }, - PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, - PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], - PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], - PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], - PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, - PaletteBorderStyle.ContextMenuInner => _contextMenuBack, - PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, - PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], - PaletteBorderStyle.ButtonForm => state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonFormClose => state switch - { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, - PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, - PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, - PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch - { - PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery - ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] - : _buttonBorderColors[0], - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], - PaletteState.CheckedNormal => _buttonBorderColors[6], - PaletteState.Tracking => _buttonBorderColors[2], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonInputControl => state switch - { - PaletteState.Disabled => _buttonBorderColors[0], - PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.Tracking => _buttonBorderColors[2], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonCalendarDay => state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], - PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], - PaletteState.CheckedNormal => _buttonBackColors[6], - PaletteState.Tracking => _buttonBackColors[2], - PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }, - PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color border drawing style. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) - { - return PaletteColorStyle.Inherit; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => PaletteColorStyle.Sigma, - PaletteBorderStyle.TabDock => state switch - { - PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.Solid, - _ => PaletteColorStyle.Sigma - }, - PaletteBorderStyle.TabDockAutoHidden => state switch - { - PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.Solid, - _ => PaletteColorStyle.Sigma - }, - PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.ButtonCalendarDay => PaletteColorStyle.Solid, - PaletteBorderStyle.ContextMenuItemSplit => state == PaletteState.Tracking ? PaletteColorStyle.Sigma : PaletteColorStyle.Solid, - PaletteBorderStyle.ContextMenuSeparator => PaletteColorStyle.Dashed, - PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch - { - PaletteState.Normal => PaletteColorStyle.Solid, - PaletteState.Disabled or PaletteState.NormalDefaultOverride => PaletteColorStyle.Solid, - _ => PaletteColorStyle.Linear - }, - PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => PaletteColorStyle.Solid, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color border alignment. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } - - return style switch - { - PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => PaletteRectangleAlign.Control, - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color border angle. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return -1f; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => 90f, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the border width. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Integer width. - public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return -1; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ContextMenuInner => 0, - PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => 1, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the border corner rounding. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Float rounding. - public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; - } - - return style switch - { - PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => 0, - PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ContextMenuItemImage => 1, - PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuItemHighlight => 0,//Changed 2013 - PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlGroupBox => 3, - PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => 0,//Changed 2013 - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets a border image. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetBorderImage(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return null; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => null, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the border image style. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteImageStyle.Inherit; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteImageStyle.Tile, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the image border alignment. - /// - /// Border style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } - - return style switch - { - PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - #endregion - - #region Content - /// - /// Gets a value indicating if content should be drawn. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return InheritBool.Inherit; - } - - // Always draw everything - return InheritBool.True; - } - - /// - /// Gets a value indicating if content should be drawn with focus indication. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) - { - // By default the focus override shows the focus! - if (state == PaletteState.FocusOverride) - { - return InheritBool.True; - } - - // We do not override the other override states - if (CommonHelper.IsOverrideState(state)) - { - return InheritBool.Inherit; - } - - // By default, never show the focus indication, we let individual controls - // override this functionality as required by the controls requirements - return InheritBool.False; - } - - /// - /// Gets the horizontal relative alignment of the image. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, - PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Center, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the vertical relative alignment of the image. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the effect applied to drawing of the image. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteImageEffect value. - public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteImageEffect.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? PaletteImageEffect.Disabled : PaletteImageEffect.Normal, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the image color to remap into another color. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentImageColorMap(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color to use in place of the image map color. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the image color that should be transparent. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentImageColorTransparent(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the font for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) - { - if (CommonHelper.IsOverrideState(state)) - { - return (state == PaletteState.BoldedOverride) && (style == PaletteContentStyle.ButtonCalendarDay) ? CalendarBoldFont : null; - } - - return style switch - { - PaletteContentStyle.HeaderForm => HeaderFormFont, - PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonCommand => Header1ShortFont, - PaletteContentStyle.LabelSuperTip or PaletteContentStyle.ContextMenuHeading => SuperToolFont, - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText => Header2ShortFont, - PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelBoldPanel => BoldFont, - PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelItalicControl => ItalicFont, - PaletteContentStyle.ContextMenuItemTextAlternate => SuperToolFont, - PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => TabFontNormal, - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => state switch - { - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => TabFontSelected, - _ => TabFontNormal - }, - PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => ButtonFont, - PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => ButtonFontNavigatorStack, - PaletteContentStyle.ButtonNavigatorMini => ButtonFontNavigatorMini, - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => GridFont, - PaletteContentStyle.ButtonCalendarDay => CalendarFont, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the font for the short text by generating a new font instance. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) - { - DefineFonts(); - return GetContentShortTextFont(style, state); - } - - /// - /// Gets the rendering hint for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextHint value. - public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteTextHint.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the prefix drawing setting for short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextPrefix value. - public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteTextHotkeyPrefix.Inherit; - } - - return style switch - { - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderForm => PaletteTextHotkeyPrefix.Show, - PaletteContentStyle.ButtonListItem or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemShortcutText => PaletteTextHotkeyPrefix.None, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the flag indicating if multiline text is allowed for short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return InheritBool.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => InheritBool.True, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the text trimming to use for short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextTrim value. - public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteTextTrim.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextTrim.EllipsisCharacter, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the horizontal relative alignment of the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, - PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.HeaderCalendar => PaletteRelativeAlign.Center, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, - PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Far, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the vertical relative alignment of the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, - PaletteContentStyle.LabelSuperTip => PaletteRelativeAlign.Near, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the horizontal relative alignment of multiline short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the first back color for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) - { - // Always work out value for an override state - if (CommonHelper.IsOverrideState(state)) - { - return style switch - { - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl => state switch - { - PaletteState.LinkNotVisitedOverride => _ribbonColours[ - (int)SchemeOfficeColors.LinkNotVisitedOverrideControl], - PaletteState.LinkVisitedOverride => _ribbonColours[ - (int)SchemeOfficeColors.LinkVisitedOverrideControl], - PaletteState.LinkPressedOverride => _ribbonColours[ - (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty - }, - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch - { - PaletteState.LinkNotVisitedOverride => _ribbonColours[ - (int)SchemeOfficeColors.LinkNotVisitedOverridePanel], - PaletteState.LinkVisitedOverride => _ribbonColours[ - (int)SchemeOfficeColors.LinkVisitedOverridePanel], - PaletteState.LinkPressedOverride => _ribbonColours[ - (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty - }, - _ => Color.Empty - }; - } - - switch (style) - { - case PaletteContentStyle.HeaderForm: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortActive]; - } - - if ((state == PaletteState.Disabled) && - (style != PaletteContentStyle.LabelToolTip) && - (style != PaletteContentStyle.LabelSuperTip) && - (style != PaletteContentStyle.LabelKeyTip) && - (style != PaletteContentStyle.InputControlStandalone) && - (style != PaletteContentStyle.InputControlRibbon) && - (style != PaletteContentStyle.InputControlCustom1) && - (style != PaletteContentStyle.InputControlCustom2) && - (style != PaletteContentStyle.InputControlCustom3) && - (style != PaletteContentStyle.ButtonInputControl) && - (style != PaletteContentStyle.ButtonCalendarDay)) - { - return _disabledText; - } - - return style switch - { - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], - PaletteContentStyle.HeaderDockActive => Color.Black, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], - PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, - PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch - { - PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] - }, - PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch - { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] - }, - PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], - PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the second back color for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - switch (style) - { - case PaletteContentStyle.HeaderForm: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderShortActive]; - } - - if ((state == PaletteState.Disabled) && - (style != PaletteContentStyle.LabelToolTip) && - (style != PaletteContentStyle.LabelSuperTip) && - (style != PaletteContentStyle.LabelKeyTip) && - (style != PaletteContentStyle.InputControlStandalone) && - (style != PaletteContentStyle.InputControlRibbon) && - (style != PaletteContentStyle.InputControlCustom1) && - (style != PaletteContentStyle.InputControlCustom2) && - (style != PaletteContentStyle.InputControlCustom3) && - (style != PaletteContentStyle.ButtonInputControl) && - (style != PaletteContentStyle.ButtonCalendarDay)) - { - return _disabledText; - } - - return style switch - { - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], - PaletteContentStyle.HeaderDockActive => Color.Black, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], - PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, - PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch - { - PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] - }, - PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch - { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] - }, - PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], - PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color drawing style for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteColorStyle.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color alignment for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color background angle for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return -1f; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 90f, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets a background image for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetContentShortTextImage(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return null; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => null, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the background image style. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteImageStyle.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteImageStyle.TileFlipXY, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the image alignment for the short text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the font for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) - { - if (CommonHelper.IsOverrideState(state)) - { - return (state == PaletteState.BoldedOverride) && (style == PaletteContentStyle.ButtonCalendarDay) ? CalendarBoldFont : null; - } - - return style switch - { - PaletteContentStyle.ButtonCalendarDay => CalendarFont, - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => GridFont, - PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => Header1LongFont, - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderSecondary => Header2LongFont, - PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => TabFontNormal, - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => state switch - { - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => TabFontSelected, - _ => TabFontNormal - }, - PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => ButtonFont, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the font for the long text by generating a new font instance. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) - { - DefineFonts(); - return GetContentLongTextFont(style, state); - } - - /// - /// Gets the rendering hint for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextHint value. - public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteTextHint.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the flag indicating if multiline text is allowed for long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// InheritBool value. - public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return InheritBool.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => InheritBool.True, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the text trimming to use for long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextTrim value. - public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteTextTrim.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextTrim.EllipsisCharacter, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the prefix drawing setting for long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// PaletteTextPrefix value. - public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteTextHotkeyPrefix.Inherit; - } - - return style switch - { - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteTextHotkeyPrefix.Show, - PaletteContentStyle.ButtonListItem or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHotkeyPrefix.None, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the horizontal relative alignment of the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextAlternate => PaletteRelativeAlign.Near, - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Far, - PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, - PaletteContentStyle.ButtonCalendarDay => PaletteRelativeAlign.Far, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the vertical relative alignment of the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, - PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextAlternate => PaletteRelativeAlign.Far, - PaletteContentStyle.LabelSuperTip => PaletteRelativeAlign.Center, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the horizontal relative alignment of multiline long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRelativeAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, - PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ButtonCommand => PaletteRelativeAlign.Near, - PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Far, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the first back color for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - switch (style) - { - case PaletteContentStyle.HeaderForm: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongActive]; - } - - if ((state == PaletteState.Disabled) && - (style != PaletteContentStyle.LabelToolTip) && - (style != PaletteContentStyle.LabelSuperTip) && - (style != PaletteContentStyle.LabelKeyTip) && - (style != PaletteContentStyle.InputControlStandalone) && - (style != PaletteContentStyle.InputControlRibbon) && - (style != PaletteContentStyle.InputControlCustom1) && - (style != PaletteContentStyle.InputControlCustom2) && - (style != PaletteContentStyle.InputControlCustom3) && - (style != PaletteContentStyle.ButtonInputControl)) - { - return _disabledText; - } - - return style switch - { - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], - PaletteContentStyle.HeaderDockActive => Color.Black, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], - PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch - { - PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] - }, - PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch - { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] - }, - PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], - PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the second back color for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - switch (style) - { - case PaletteContentStyle.HeaderForm: - return state == PaletteState.Disabled - ? _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongInactive] - : _ribbonColours[(int)SchemeOfficeColors.FormHeaderLongActive]; - } - - if ((state == PaletteState.Disabled) && - (style != PaletteContentStyle.LabelToolTip) && - (style != PaletteContentStyle.LabelSuperTip) && - (style != PaletteContentStyle.LabelKeyTip) && - (style != PaletteContentStyle.InputControlStandalone) && - (style != PaletteContentStyle.InputControlRibbon) && - (style != PaletteContentStyle.InputControlCustom1) && - (style != PaletteContentStyle.InputControlCustom2) && - (style != PaletteContentStyle.InputControlCustom3) && - (style != PaletteContentStyle.ButtonInputControl)) - { - return _disabledText; - } - - return style switch - { - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], - PaletteContentStyle.HeaderDockActive => Color.Black, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], - PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, - PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch - { - PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] - }, - PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch - { - PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], - _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] - }, - PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], - PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color drawing style for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteColorStyle.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color alignment for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color alignment style. - public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the color background angle for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Angle used for color drawing. - public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return -1f; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 90f, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets a background image for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image instance. - public override Image? GetContentLongTextImage(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return null; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => null, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the background image style for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image style value. - public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteImageStyle.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteImageStyle.TileFlipXY, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the image alignment for the long text. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Image alignment style. - public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteRectangleAlign.Inherit; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the padding between the border and content drawing. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Padding value. - public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return CommonHelper.InheritPadding; - } - - return style switch - { - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => _contentPaddingGrid, - PaletteContentStyle.HeaderForm => _contentPaddingHeaderForm, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _contentPaddingHeader1, - PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive => _contentPaddingDock, - PaletteContentStyle.HeaderSecondary => _contentPaddingHeader2, - PaletteContentStyle.HeaderCalendar => _contentPaddingCalendar, - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 => _contentPaddingLabel, - PaletteContentStyle.LabelGroupBoxCaption => _contentPaddingLabel2, - PaletteContentStyle.ContextMenuItemTextStandard => _contentPaddingContextMenuItemText, - PaletteContentStyle.ContextMenuItemTextAlternate => _contentPaddingContextMenuItemTextAlt, - PaletteContentStyle.ContextMenuItemShortcutText => _contentPaddingContextMenuItemShortcutText, - PaletteContentStyle.ContextMenuItemImage => _contentPaddingContextMenuImage, - PaletteContentStyle.LabelToolTip => _contentPaddingToolTip, - PaletteContentStyle.LabelSuperTip => _contentPaddingSuperTip, - PaletteContentStyle.LabelKeyTip => _contentPaddingKeyTip, - PaletteContentStyle.ContextMenuHeading => _contentPaddingContextMenuHeading, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => InputControlPadding, - PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => _contentPaddingButton12, - PaletteContentStyle.ButtonInputControl or PaletteContentStyle.ButtonCalendarDay => _contentPaddingButtonInputControl, - PaletteContentStyle.ButtonButtonSpec => _contentPaddingButton3, - PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => _contentPaddingButton4, - PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => _contentPaddingButtonForm, - PaletteContentStyle.ButtonGallery => _contentPaddingButtonGallery, - PaletteContentStyle.ButtonListItem => _contentPaddingButtonListItem, - PaletteContentStyle.ButtonBreadCrumb => _contentPaddingButton6, - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => _contentPaddingButton5, - PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => _contentPaddingButton7, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - - /// - /// Gets the padding between adjacent content items. - /// - /// Content style. - /// Palette value should be applicable to this state. - /// Integer value. - public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return -1; - } - - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 1, - PaletteContentStyle.LabelSuperTip => 5, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; - } - #endregion - - #region Metric - /// - /// Gets an integer metric value. - /// - /// Palette value should be applicable to this state. - /// Requested metric. - /// Integer value. - public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) - { - switch (metric) - { - case PaletteMetricInt.PageButtonInset: - case PaletteMetricInt.RibbonTabGap: - case PaletteMetricInt.HeaderButtonEdgeInsetCalendar: - return 2; - case PaletteMetricInt.CheckButtonGap: - return 5; - case PaletteMetricInt.HeaderButtonEdgeInsetForm: - return 9; // Needs to be the RealWindowBorderWidth Offset - No idea how to get it at this point - case PaletteMetricInt.HeaderButtonEdgeInsetInputControl: - return 1; - case PaletteMetricInt.HeaderButtonEdgeInsetPrimary: - case PaletteMetricInt.HeaderButtonEdgeInsetSecondary: - case PaletteMetricInt.HeaderButtonEdgeInsetDockInactive: - case PaletteMetricInt.HeaderButtonEdgeInsetDockActive: - case PaletteMetricInt.HeaderButtonEdgeInsetCustom1: - case PaletteMetricInt.HeaderButtonEdgeInsetCustom2: - case PaletteMetricInt.HeaderButtonEdgeInsetCustom3: - case PaletteMetricInt.BarButtonEdgeOutside: - case PaletteMetricInt.BarButtonEdgeInside: - return 3; - case PaletteMetricInt.None: - return 0; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return -1; - } - - /// - /// Gets a boolean metric value. - /// - /// Palette value should be applicable to this state. - /// Requested metric. - /// InheritBool value. - public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) - { - switch (metric) - { - case PaletteMetricBool.HeaderGroupOverlay: - case PaletteMetricBool.SplitWithFading: - case PaletteMetricBool.RibbonTabsSpareCaption: - return InheritBool.True; - case PaletteMetricBool.TreeViewLines: - return InheritBool.False; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return InheritBool.Inherit; - } - - /// - /// Gets a padding metric value. - /// - /// Palette value should be applicable to this state. - /// Requested metric. - /// Padding value. - public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) - { - switch (metric) - { - case PaletteMetricPadding.PageButtonPadding: - return _metricPaddingPageButtons; - case PaletteMetricPadding.BarPaddingTabs: - return _metricPaddingBarTabs; - case PaletteMetricPadding.BarPaddingInside: - case PaletteMetricPadding.BarPaddingOnly: - return _metricPaddingBarInside; - case PaletteMetricPadding.BarPaddingOutside: - return _metricPaddingBarOutside; - case PaletteMetricPadding.HeaderButtonPaddingForm: - return _metricPaddingHeaderForm; - case PaletteMetricPadding.RibbonButtonPadding: - return _metricPaddingRibbon; - case PaletteMetricPadding.RibbonAppButton: - return _metricPaddingRibbonAppButton; - case PaletteMetricPadding.HeaderButtonPaddingInputControl: - return _metricPaddingInputControl; - case PaletteMetricPadding.HeaderButtonPaddingPrimary: - case PaletteMetricPadding.HeaderButtonPaddingSecondary: - case PaletteMetricPadding.HeaderButtonPaddingDockInactive: - case PaletteMetricPadding.HeaderButtonPaddingDockActive: - case PaletteMetricPadding.HeaderButtonPaddingCustom1: - case PaletteMetricPadding.HeaderButtonPaddingCustom2: - case PaletteMetricPadding.HeaderButtonPaddingCustom3: - case PaletteMetricPadding.HeaderButtonPaddingCalendar: - case PaletteMetricPadding.BarButtonPadding: - return _metricPaddingHeader; - case PaletteMetricPadding.HeaderGroupPaddingPrimary: - case PaletteMetricPadding.HeaderGroupPaddingSecondary: - case PaletteMetricPadding.HeaderGroupPaddingDockInactive: - case PaletteMetricPadding.HeaderGroupPaddingDockActive: - case PaletteMetricPadding.SeparatorPaddingLowProfile: - case PaletteMetricPadding.SeparatorPaddingHighInternalProfile: - case PaletteMetricPadding.SeparatorPaddingHighProfile: - case PaletteMetricPadding.SeparatorPaddingCustom1: - case PaletteMetricPadding.SeparatorPaddingCustom2: - case PaletteMetricPadding.SeparatorPaddingCustom3: - case PaletteMetricPadding.ContextMenuItemHighlight: - case PaletteMetricPadding.ContextMenuItemsCollection: - case PaletteMetricPadding.ContextMenuItemOuter: - return Padding.Empty; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Padding.Empty; - } - #endregion - - #region Images - /// - /// Gets a tree view image appropriate for the provided state. - /// - /// Is the node expanded - /// Appropriate image for drawing; otherwise null. - public override Image? GetTreeViewImage(bool expanded) => expanded ? _treeCollapseBlack : _treeExpandWhite; - - /// - /// Gets a check box image appropriate for the provided state. - /// - /// Is the check box enabled. - /// Is the check box checked/unchecked/indeterminate. - /// Is the check box being hot tracked. - /// Is the check box being pressed. - /// Appropriate image for drawing; otherwise null. - public override Image? GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) - { - switch (checkState) - { - default: - case CheckState.Unchecked: - if (!enabled) - { - return _checkBoxList.Images[0]; - } - else if (pressed) - { - return _checkBoxList.Images[3]; - } - else - { - return tracking ? _checkBoxList.Images[2] : _checkBoxList.Images[1]; - } - - case CheckState.Checked: - if (!enabled) - { - return _checkBoxList.Images[4]; - } - else if (pressed) - { - return _checkBoxList.Images[7]; - } - else - { - return tracking ? _checkBoxList.Images[6] : _checkBoxList.Images[5]; - } - - case CheckState.Indeterminate: - if (!enabled) - { - return _checkBoxList.Images[8]; - } - else if (pressed) - { - return _checkBoxList.Images[11]; - } - else - { - return tracking ? _checkBoxList.Images[10] : _checkBoxList.Images[9]; - } - } - } - - /// - /// Gets a check box image appropriate for the provided state. - /// - /// Is the radio button enabled. - /// Is the radio button checked. - /// Is the radio button being hot tracked. - /// Is the radio button being pressed. - /// Appropriate image for drawing; otherwise null. - public override Image? GetRadioButtonImage(bool enabled, bool checkState, bool tracking, bool pressed) - { - if (!checkState) - { - if (!enabled) - { - return _radioButtonArray[0]; - } - else if (pressed) - { - return _radioButtonArray[3]; - } - else - { - return tracking ? _radioButtonArray[2] : _radioButtonArray[1]; - } - } - else - { - if (!enabled) - { - return _radioButtonArray[4]; - } - else if (pressed) - { - return _radioButtonArray[7]; - } - else - { - return tracking ? _radioButtonArray[6] : _radioButtonArray[5]; - } - } - } - - /// - /// Gets a drop down button image appropriate for the provided state. - /// - /// PaletteState for which image is required. - public override Image? GetDropDownButtonImage(PaletteState state) => _disabledDropDown; - - /// - /// Gets a checked image appropriate for a context menu item. - /// - /// Appropriate image for drawing; otherwise null. - public override Image? GetContextMenuCheckedImage() => _contextMenuChecked; - - /// - /// Gets a indeterminate image appropriate for a context menu item. - /// - /// Appropriate image for drawing; otherwise null. - public override Image? GetContextMenuIndeterminateImage() => _contextMenuIndeterminate; - - /// - /// Gets a check box image appropriate for the provided state. - /// - /// Enum of the button to fetch. - /// State of the button to fetch. - /// Appropriate image for drawing; otherwise null. - public override Image? GetGalleryButtonImage(PaletteRibbonGalleryButton button, PaletteState state) => button switch - { - PaletteRibbonGalleryButton.Up => _galleryButtonList.Images[1], - PaletteRibbonGalleryButton.DropDown => _galleryButtonList.Images[2], - _ => _galleryButtonList.Images[0] - }; - #endregion - - #region ButtonSpec - /// - /// Gets the icon to display for the button. - /// - /// Style of button spec. - /// Icon value. - public override Icon? GetButtonSpecIcon(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Generic: - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return null; - default: - // Should never happen! - Debug.Assert(false); - return null; - } - } - - /// - /// Gets the image to display for the button. - /// - /// Style of button spec. - /// State for which image is required. - /// Image value. - public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, - PaletteState state) - { - switch (style) - { - case PaletteButtonSpecStyle.Close: - return _buttonSpecClose; - case PaletteButtonSpecStyle.Context: - return _buttonSpecContext; - case PaletteButtonSpecStyle.Next: - return _buttonSpecNext; - case PaletteButtonSpecStyle.Previous: - return _buttonSpecPrevious; - case PaletteButtonSpecStyle.ArrowLeft: - return _buttonSpecArrowLeft; - case PaletteButtonSpecStyle.ArrowRight: - return _buttonSpecArrowRight; - case PaletteButtonSpecStyle.ArrowUp: - return _buttonSpecArrowUp; - case PaletteButtonSpecStyle.ArrowDown: - return _buttonSpecArrowDown; - case PaletteButtonSpecStyle.DropDown: - return _buttonSpecDropDown; - case PaletteButtonSpecStyle.PinVertical: - return _buttonSpecPinVertical; - case PaletteButtonSpecStyle.PinHorizontal: - return _buttonSpecPinHorizontal; - case PaletteButtonSpecStyle.PendantClose: - return _buttonSpecPendantClose; - case PaletteButtonSpecStyle.PendantMin: - return _buttonSpecPendantMin; - case PaletteButtonSpecStyle.PendantRestore: - return _buttonSpecPendantRestore; - case PaletteButtonSpecStyle.WorkspaceMaximize: - return _buttonSpecWorkspaceMaximize; - case PaletteButtonSpecStyle.WorkspaceRestore: - return _buttonSpecWorkspaceRestore; - case PaletteButtonSpecStyle.RibbonMinimize: - return _buttonSpecRibbonMinimize; - case PaletteButtonSpecStyle.RibbonExpand: - return _buttonSpecRibbonExpand; - case PaletteButtonSpecStyle.Generic: - return null; - default: - // Should never happen! - Debug.Assert(false); - return null; - } - } - - /// - /// Gets the image transparent color. - /// - /// Style of button spec. - /// Color value. - public override Color GetButtonSpecImageTransparentColor(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Generic: - return Color.Empty; - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return Color.Magenta; - default: - // Should never happen! - Debug.Assert(false); - return Color.Empty; - } - } - - /// - /// Gets the short text to display for the button. - /// - /// Style of button spec. - /// String value. - public override string? GetButtonSpecShortText(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Generic: - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return string.Empty; - default: - // Should never happen! - Debug.Assert(false); - return null; - } - } - - /// - /// Gets the long text to display for the button. - /// - /// Style of button spec. - /// String value. - public override string? GetButtonSpecLongText(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Generic: - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return string.Empty; - default: - // Should never happen! - Debug.Assert(false); - return null; - } - } - - /// - /// Gets the color to remap from the image to the container foreground. - /// - /// Style of button spec. - /// Color value. - public override Color GetButtonSpecColorMap(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.Generic: - return Color.Empty; - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return Color.Black; - default: - // Should never happen! - Debug.Assert(false); - return Color.Empty; - } - } - - /// - /// Gets the color to remap to transparent. - /// - /// Style of button spec. - /// Color value. - public override Color GetButtonSpecColorTransparent(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Generic: - return Color.Empty; - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return Color.Magenta; - default: - // Should never happen! - Debug.Assert(false); - return Color.Empty; - } - } - - /// - /// Gets the button style used for drawing the button. - /// - /// Style of button spec. - /// PaletteButtonStyle value. - public override PaletteButtonStyle GetButtonSpecStyle(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - return PaletteButtonStyle.Form; - case PaletteButtonSpecStyle.FormClose: - return PaletteButtonStyle.FormClose; - case PaletteButtonSpecStyle.Generic: - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return PaletteButtonStyle.ButtonSpec; - default: - // Should never happen! - Debug.Assert(false); - return PaletteButtonStyle.ButtonSpec; - } - } - - /// - /// Get the location for the button. - /// - /// Style of button spec. - /// HeaderLocation value. - public override HeaderLocation GetButtonSpecLocation(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Generic: - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return HeaderLocation.PrimaryHeader; - default: - // Should never happen! - Debug.Assert(false); - return HeaderLocation.PrimaryHeader; - } - } - - /// - /// Gets the edge to position the button against. - /// - /// Style of button spec. - /// PaletteRelativeEdgeAlign value. - public override PaletteRelativeEdgeAlign GetButtonSpecEdge(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Generic: - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return PaletteRelativeEdgeAlign.Far; - default: - // Should never happen! - Debug.Assert(false); - return PaletteRelativeEdgeAlign.Far; - } - } - - /// - /// Gets the button orientation. - /// - /// Style of button spec. - /// PaletteButtonOrientation value. - public override PaletteButtonOrientation GetButtonSpecOrientation(PaletteButtonSpecStyle style) - { - switch (style) - { - case PaletteButtonSpecStyle.Close: - case PaletteButtonSpecStyle.Context: - case PaletteButtonSpecStyle.ArrowLeft: - case PaletteButtonSpecStyle.ArrowRight: - case PaletteButtonSpecStyle.ArrowUp: - case PaletteButtonSpecStyle.ArrowDown: - case PaletteButtonSpecStyle.DropDown: - case PaletteButtonSpecStyle.PinVertical: - case PaletteButtonSpecStyle.PinHorizontal: - case PaletteButtonSpecStyle.FormClose: - case PaletteButtonSpecStyle.FormMin: - case PaletteButtonSpecStyle.FormMax: - case PaletteButtonSpecStyle.FormRestore: - case PaletteButtonSpecStyle.FormHelp: - case PaletteButtonSpecStyle.PendantClose: - case PaletteButtonSpecStyle.PendantMin: - case PaletteButtonSpecStyle.PendantRestore: - case PaletteButtonSpecStyle.WorkspaceMaximize: - case PaletteButtonSpecStyle.WorkspaceRestore: - case PaletteButtonSpecStyle.RibbonMinimize: - case PaletteButtonSpecStyle.RibbonExpand: - return PaletteButtonOrientation.FixedTop; - case PaletteButtonSpecStyle.Generic: - case PaletteButtonSpecStyle.Next: - case PaletteButtonSpecStyle.Previous: - return PaletteButtonOrientation.Auto; - default: - // Should never happen! - Debug.Assert(false); - return PaletteButtonOrientation.Auto; - } - } - #endregion - - #region RibbonGeneral - - /// - /// Gets the ribbon shape that should be used. - /// - /// Ribbon shape value. - public override PaletteRibbonShape GetRibbonShape() => PaletteRibbonShape.Microsoft365; - - /// - /// Gets the text alignment for the ribbon context text. - /// - /// Palette value should be applicable to this state. - /// Font value. - public override PaletteRelativeAlign GetRibbonContextTextAlign(PaletteState state) => PaletteRelativeAlign.Center; - - /// - /// Gets the font for the ribbon context text. - /// - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; - - /// - /// Gets the color for the ribbon context text. - /// - /// Palette value should be applicable to this state. - /// Font value. - public override Color GetRibbonContextTextColor(PaletteState state) => _contextTextColor; - - /// - /// Gets the dark disabled color used for ribbon glyphs. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonDisabledDark(PaletteState state) => _disabledGlyphDark; - - /// - /// Gets the light disabled color used for ribbon glyphs. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonDisabledLight(PaletteState state) => _disabledGlyphLight; - - /// - /// Gets the color for the drop arrow light. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonDropArrowLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowLight]; - - /// - /// Gets the color for the drop arrow dark. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonDropArrowDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowDark]; - - /// - /// Gets the color for the dialog launcher dark. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonGroupDialogDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogDark]; - - /// - /// Gets the color for the dialog launcher light. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonGroupDialogLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogLight]; - - /// - /// Gets the color for the group separator dark. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorDark]; - - /// - /// Gets the color for the group separator light. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorLight]; - - /// - /// Gets the color for the minimize bar dark. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonMinimizeBarDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarDark]; - - /// - /// Gets the color for the minimize bar light. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonMinimizeBarLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarLight]; - - /// - /// Gets the color for the tab separator. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonTabSeparatorColor(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonTabSeparatorColor]; - - /// - /// Gets the color for the tab context separators. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonTabSeparatorContextColor(PaletteState state) => _contextTabSeparator; - - /// - /// Gets the font for the ribbon text. - /// - /// Palette value should be applicable to this state. - /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; - - /// - /// Gets the rendering hint for the ribbon font. - /// - /// Palette value should be applicable to this state. - /// PaletteTextHint value. - public override PaletteTextHint GetRibbonTextHint(PaletteState state) => PaletteTextHint.ClearTypeGridFit; - - /// - /// Gets the color for the extra QAT button dark content color. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonQATButtonDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonDark]; - - /// - /// Gets the color for the extra QAT button light content color. - /// - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonQATButtonLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonLight]; - - #endregion - - #region RibbonBack - /// - /// Gets the method used to draw the background of a ribbon item. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// PaletteRibbonBackStyle value. - public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) - { - switch (style) - { - case PaletteRibbonBackStyle.RibbonAppMenuDocs: - return PaletteRibbonColorStyle.Solid; - case PaletteRibbonBackStyle.RibbonAppMenuInner: - return PaletteRibbonColorStyle.RibbonAppMenuInner; - case PaletteRibbonBackStyle.RibbonAppMenuOuter: - return PaletteRibbonColorStyle.RibbonAppMenuOuter; - case PaletteRibbonBackStyle.RibbonQATMinibar: - return state == PaletteState.CheckedNormal - ? PaletteRibbonColorStyle.RibbonQATMinibarDouble - : PaletteRibbonColorStyle.RibbonQATMinibarSingle; - - case PaletteRibbonBackStyle.RibbonQATFullbar: - return PaletteRibbonColorStyle.RibbonQATFullbarSquare; - case PaletteRibbonBackStyle.RibbonQATOverflow: - return PaletteRibbonColorStyle.RibbonQATOverflow; - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - return PaletteRibbonColorStyle.LinearBorder; - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - return state == PaletteState.Pressed ? PaletteRibbonColorStyle.Empty : PaletteRibbonColorStyle.Linear; - - case PaletteRibbonBackStyle.RibbonGroupNormalBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - switch (state) - { - case PaletteState.Normal: - case PaletteState.ContextNormal: - return PaletteRibbonColorStyle.RibbonGroupNormalBorderSep; - case PaletteState.Tracking: - case PaletteState.ContextTracking: - return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepTrackingLight; - case PaletteState.Pressed: - case PaletteState.ContextPressed: - return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepPressedLight; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonGroupNormalTitle: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return PaletteRibbonColorStyle.Empty; - case PaletteRibbonBackStyle.RibbonGroupArea: - switch (state) - { - case PaletteState.Normal: - case PaletteState.CheckedNormal: - case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.Empty; - case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; - case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabFocus2010; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonTab: - switch (state) - { - case PaletteState.Disabled: - case PaletteState.Normal: - return PaletteRibbonColorStyle.Empty; - case PaletteState.Tracking: - case PaletteState.Pressed: - case PaletteState.ContextTracking: - return PaletteRibbonColorStyle.RibbonTabTracking2010; - case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabFocus2010; - case PaletteState.CheckedNormal: - case PaletteState.CheckedTracking: - case PaletteState.CheckedPressed: - case PaletteState.ContextCheckedNormal: - case PaletteState.ContextCheckedTracking: - return PaletteRibbonColorStyle.RibbonTabSelected2010; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return PaletteRibbonColorStyle.Empty; - } - - /// - /// Gets the first background color for the ribbon item. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) - { - switch (style) - { - case PaletteRibbonBackStyle.RibbonGalleryBack: - return state switch - { - PaletteState.Disabled => _disabledBack, - PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackTracking], - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBackNormal] - }; - case PaletteRibbonBackStyle.RibbonGalleryBorder: - return state switch - { - PaletteState.Disabled => _disabledBorder, - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder] - }; - case PaletteRibbonBackStyle.RibbonAppMenuDocs: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonMenuDocsBack]; - case PaletteRibbonBackStyle.RibbonAppMenuInner: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonInner1]; - case PaletteRibbonBackStyle.RibbonAppMenuOuter: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter1]; - case PaletteRibbonBackStyle.RibbonQATMinibar: - return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini1] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini1I]; - - case PaletteRibbonBackStyle.RibbonQATFullbar: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar1]; - case PaletteRibbonBackStyle.RibbonQATOverflow: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATOverflow1]; - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameBorder1]; - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; - case PaletteRibbonBackStyle.RibbonGroupNormalTitle: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; - case PaletteRibbonBackStyle.RibbonGroupNormalBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - switch (state) - { - case PaletteState.Normal: - case PaletteState.Tracking: - case PaletteState.Pressed: - case PaletteState.ContextNormal: - case PaletteState.ContextTracking: - case PaletteState.ContextPressed: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder1]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonAppButton: - switch (state) - { - case PaletteState.Normal: - return _appButtonNormal[0]; - case PaletteState.Tracking: - return _appButtonTrack[0]; - case PaletteState.Pressed: - return _appButtonPressed[0]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; - - case PaletteRibbonBackStyle.RibbonTab: - switch (state) - { - case PaletteState.Tracking: - case PaletteState.Pressed: - case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking1]; - case PaletteState.CheckedNormal: - case PaletteState.CheckedTracking: - case PaletteState.CheckedPressed: - case PaletteState.ContextCheckedNormal: - case PaletteState.ContextCheckedTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected1]; - case PaletteState.FocusOverride: - return _contextCheckedTabBorder1; - case PaletteState.Normal: - return Color.Empty; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the second background color for the ribbon item. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) - { - switch (style) - { - case PaletteRibbonBackStyle.RibbonAppMenuInner: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonInner2]; - case PaletteRibbonBackStyle.RibbonAppMenuOuter: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter2]; - case PaletteRibbonBackStyle.RibbonQATMinibar: - return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini2] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini2I]; - - case PaletteRibbonBackStyle.RibbonQATFullbar: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar2]; - case PaletteRibbonBackStyle.RibbonQATOverflow: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATOverflow2]; - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameBorder2]; - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside2]; - case PaletteRibbonBackStyle.RibbonGroupNormalTitle: - switch (state) - { - case PaletteState.Normal: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitle2]; - case PaletteState.ContextNormal: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleContext2]; - case PaletteState.Tracking: - case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleTracking2]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonGroupNormalBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - switch (state) - { - case PaletteState.Normal: - case PaletteState.Tracking: - case PaletteState.Pressed: - case PaletteState.ContextNormal: - case PaletteState.ContextTracking: - case PaletteState.ContextPressed: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder2]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonAppButton: - switch (state) - { - case PaletteState.Normal: - return _appButtonNormal[1]; - case PaletteState.Tracking: - return _appButtonTrack[1]; - case PaletteState.Pressed: - return _appButtonPressed[1]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; - case PaletteRibbonBackStyle.RibbonTab: - switch (state) - { - case PaletteState.Tracking: - case PaletteState.Pressed: - case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking2]; - case PaletteState.CheckedNormal: - case PaletteState.CheckedTracking: - case PaletteState.CheckedPressed: - case PaletteState.ContextCheckedTracking: - case PaletteState.ContextCheckedNormal: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected2]; - case PaletteState.FocusOverride: - return _contextCheckedTabBorder2; - case PaletteState.Normal: - return Color.Empty; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonAppMenuDocs: - case PaletteRibbonBackStyle.RibbonGalleryBack: - case PaletteRibbonBackStyle.RibbonGalleryBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the third background color for the ribbon item. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) - { - switch (style) - { - case PaletteRibbonBackStyle.RibbonAppMenuOuter: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonOuter3]; - case PaletteRibbonBackStyle.RibbonQATMinibar: - return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini3] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini3I]; - - case PaletteRibbonBackStyle.RibbonQATFullbar: - return _ribbonColours[(int)SchemeOfficeColors.RibbonQATFullbar3]; - case PaletteRibbonBackStyle.RibbonGroupNormalBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder3]; - case PaletteRibbonBackStyle.RibbonAppMenuDocs: - case PaletteRibbonBackStyle.RibbonAppMenuInner: - case PaletteRibbonBackStyle.RibbonQATOverflow: - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - case PaletteRibbonBackStyle.RibbonGroupNormalTitle: - case PaletteRibbonBackStyle.RibbonGalleryBack: - case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; - case PaletteRibbonBackStyle.RibbonAppButton: - switch (state) - { - case PaletteState.Normal: - return _appButtonNormal[2]; - case PaletteState.Tracking: - return _appButtonTrack[2]; - case PaletteState.Pressed: - return _appButtonPressed[2]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; - case PaletteRibbonBackStyle.RibbonTab: - switch (state) - { - case PaletteState.Tracking: - case PaletteState.Pressed: - case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking3]; - case PaletteState.CheckedNormal: - case PaletteState.CheckedTracking: - case PaletteState.CheckedPressed: - case PaletteState.ContextCheckedNormal: - case PaletteState.ContextCheckedTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected3]; - case PaletteState.FocusOverride: - return _contextCheckedTabBorder3; - case PaletteState.Normal: - return Color.Empty; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the fourth background color for the ribbon item. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) - { - switch (style) - { - case PaletteRibbonBackStyle.RibbonQATMinibar: - return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini4] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini4I]; - - case PaletteRibbonBackStyle.RibbonGroupNormalBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder4]; - case PaletteRibbonBackStyle.RibbonAppMenuDocs: - case PaletteRibbonBackStyle.RibbonAppMenuInner: - case PaletteRibbonBackStyle.RibbonAppMenuOuter: - case PaletteRibbonBackStyle.RibbonQATFullbar: - case PaletteRibbonBackStyle.RibbonQATOverflow: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - case PaletteRibbonBackStyle.RibbonGroupNormalTitle: - case PaletteRibbonBackStyle.RibbonGalleryBack: - case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; - case PaletteRibbonBackStyle.RibbonAppButton: - switch (state) - { - case PaletteState.Normal: - return _appButtonNormal[3]; - case PaletteState.Tracking: - return _appButtonTrack[3]; - case PaletteState.Pressed: - return _appButtonPressed[3]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; - case PaletteRibbonBackStyle.RibbonTab: - switch (state) - { - case PaletteState.Tracking: - case PaletteState.Pressed: - case PaletteState.ContextTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking4]; - case PaletteState.CheckedNormal: - case PaletteState.CheckedTracking: - case PaletteState.CheckedPressed: - case PaletteState.ContextCheckedNormal: - case PaletteState.ContextCheckedTracking: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabSelected4]; - case PaletteState.FocusOverride: - return _contextCheckedTabBorder4; - case PaletteState.Normal: - return Color.Empty; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the fifth background color for the ribbon item. - /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) - { - switch (style) - { - case PaletteRibbonBackStyle.RibbonAppMenuDocs: - case PaletteRibbonBackStyle.RibbonAppMenuInner: - case PaletteRibbonBackStyle.RibbonAppMenuOuter: - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - case PaletteRibbonBackStyle.RibbonGroupNormalTitle: - case PaletteRibbonBackStyle.RibbonQATFullbar: - case PaletteRibbonBackStyle.RibbonQATOverflow: - case PaletteRibbonBackStyle.RibbonGalleryBack: - case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; - case PaletteRibbonBackStyle.RibbonGroupNormalBorder: - case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; - case PaletteRibbonBackStyle.RibbonQATMinibar: - return state == PaletteState.Normal - ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] - : _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5I]; - - case PaletteRibbonBackStyle.RibbonAppButton: - switch (state) - { - case PaletteState.Normal: - return _appButtonNormal[4]; - case PaletteState.Tracking: - return _appButtonTrack[4]; - case PaletteState.Pressed: - return _appButtonPressed[4]; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; - case PaletteRibbonBackStyle.RibbonTab: - switch (state) - { - case PaletteState.Disabled: - return _disabledText; - case PaletteState.Pressed: - return _ribbonColours[(int)SchemeOfficeColors.RibbonTabTracking2]; - case PaletteState.Tracking: - case PaletteState.CheckedNormal: - case PaletteState.CheckedTracking: - case PaletteState.CheckedPressed: - case PaletteState.ContextTracking: - case PaletteState.ContextCheckedNormal: - case PaletteState.ContextCheckedTracking: - case PaletteState.FocusOverride: - case PaletteState.Normal: - return Color.Empty; - default: - // Should never happen! - Debug.Assert(false); - break; - } - break; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - #endregion - - #region RibbonText - /// - /// Gets the =color for the item text. - /// - /// Text style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) - { - switch (style) - { - case PaletteRibbonTextStyle.RibbonAppMenuDocsTitle: - case PaletteRibbonTextStyle.RibbonAppMenuDocsEntry: - return _ribbonColours[(int)SchemeOfficeColors.AppButtonMenuDocsText]; - case PaletteRibbonTextStyle.RibbonGroupNormalTitle: - return state switch - { - PaletteState.Disabled => _disabledText, - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupTitleText] - }; - case PaletteRibbonTextStyle.RibbonTab: - return state switch - { - PaletteState.Disabled => _disabledText, - PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.ContextCheckedNormal or PaletteState.ContextCheckedTracking or PaletteState.FocusOverride => _ribbonColours[(int)SchemeOfficeColors.RibbonTabTextChecked], - _ => _ribbonColours[(int)SchemeOfficeColors.RibbonTabTextNormal] - }; - case PaletteRibbonTextStyle.RibbonGroupCollapsedText: - return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; - case PaletteRibbonTextStyle.RibbonGroupButtonText: - case PaletteRibbonTextStyle.RibbonGroupLabelText: - case PaletteRibbonTextStyle.RibbonGroupCheckBoxText: - case PaletteRibbonTextStyle.RibbonGroupRadioButtonText: - return state == PaletteState.Disabled ? _disabledText : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; - - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - #endregion - - #region ElementColor - /// - /// Gets the first element color. - /// - /// Element for which color is required. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetElementColor1(PaletteElement element, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - switch (element) - { - case PaletteElement.TrackBarTick: - return _trackBarColours[0]; - case PaletteElement.TrackBarTrack: - return _trackBarColours[1]; - case PaletteElement.TrackBarPosition: - return state switch - { - PaletteState.Disabled => Color.Empty, - _ => _trackBarColours[4] - }; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the second element color. - /// - /// Element for which color is required. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetElementColor2(PaletteElement element, PaletteState state) - { - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - switch (element) - { - case PaletteElement.TrackBarTick: - return _trackBarColours[0]; - case PaletteElement.TrackBarTrack: - return _trackBarColours[2]; - case PaletteElement.TrackBarPosition: - return state switch - { - PaletteState.Disabled => ControlPaint.Light(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder]), - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], - PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], - PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the third element color. - /// - /// Element for which color is required. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetElementColor3(PaletteElement element, PaletteState state) - { - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - switch (element) - { - case PaletteElement.TrackBarTick: - return _trackBarColours[0]; - case PaletteElement.TrackBarTrack: - return _trackBarColours[3]; - case PaletteElement.TrackBarPosition: - return state switch - { - PaletteState.Disabled => ControlPaint.LightLight( - _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), - PaletteState.Normal => ControlPaint.Light( - _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), - PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), - PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the fourth element color. - /// - /// Element for which color is required. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetElementColor4(PaletteElement element, PaletteState state) - { - switch (element) - { - case PaletteElement.TrackBarTick: - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - return _trackBarColours[0]; - case PaletteElement.TrackBarTrack: - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - return _trackBarColours[3]; - case PaletteElement.TrackBarPosition: - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) - { - return Color.Empty; - } - - return state switch - { - PaletteState.Disabled => ControlPaint.LightLight(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], - PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], - PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - - /// - /// Gets the fifth element color. - /// - /// Element for which color is required. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetElementColor5(PaletteElement element, PaletteState state) - { - switch (element) - { - case PaletteElement.TrackBarTick: - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - return _trackBarColours[0]; - case PaletteElement.TrackBarTrack: - if (CommonHelper.IsOverrideState(state)) - { - return Color.Empty; - } - - return _trackBarColours[3]; - case PaletteElement.TrackBarPosition: - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) - { - return Color.Empty; - } - - return state switch - { - PaletteState.Disabled => ControlPaint.LightLight(_ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), - PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], - PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) - }; - default: - // Should never happen! - Debug.Assert(false); - break; - } - - return Color.Red; - } - #endregion - - #region Protected - /// - /// Update the fonts to reflect system or user defined changes. - /// - protected override void DefineFonts() - { - // Release existing resources - DisposeFonts(); - var baseFontName = BaseFont.Name; - var baseFontSize = BaseFont.Size; - - Header1ShortFont = new Font(baseFontName, baseFontSize + 4.5f, FontStyle.Bold); - Header2ShortFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); - HeaderFormFont = new Font(baseFontName, SystemFonts.CaptionFont.SizeInPoints, FontStyle.Regular); - Header1LongFont = new Font(baseFontName, baseFontSize + 1.5f, FontStyle.Regular); - Header2LongFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); - ButtonFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); - ButtonFontNavigatorStack = new Font(ButtonFont, FontStyle.Bold); - ButtonFontNavigatorMini = new Font(baseFontName, baseFontSize + 3.0f, FontStyle.Bold); - TabFontNormal = new Font(baseFontName, baseFontSize, FontStyle.Regular); - TabFontSelected = new Font(TabFontNormal, FontStyle.Bold); - RibbonTabFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); - RibbonTabContextFont = new Font(RibbonTabFont, FontStyle.Bold); - GridFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); - SuperToolFont = new Font(baseFontName, baseFontSize, FontStyle.Bold); - CalendarFont = new Font(baseFontName, baseFontSize, FontStyle.Regular); - CalendarBoldFont = new Font(baseFontName, baseFontSize, FontStyle.Bold); - BoldFont = new Font(baseFontName, baseFontSize, FontStyle.Bold); - ItalicFont = new Font(baseFontName, baseFontSize, FontStyle.Italic); - // Call an event to force repaint style things - OnPalettePaint(this, new PaletteLayoutEventArgs(true, false)); - - } - #endregion - - #region ColorTable - /// - /// Gets access to the color table instance. - /// - public override KryptonColorTable ColorTable - { - get - { - _table ??= new KryptonColorTable365(_ribbonColours, InheritBool.True, this); - - return _table; - } - } - #endregion - - #region OnUserPreferenceChanged - /// - /// Handle a change in the user preferences. - /// - /// Source of event. - /// Event data. - protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) - { - // Remove the current table, so it gets regenerated when next requested - _table = null; - - // Update fonts to reflect any change in system settings - DefineFonts(); - - base.OnUserPreferenceChanged(sender, e); - } #endregion } - #endregion - } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365DarkGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365DarkGray.cs index ffbcbefae..331acb09f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365DarkGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365DarkGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,6 +16,22 @@ public class PaletteMicrosoft365DarkGray : PaletteMicrosoft365Base { #region Static Fields + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(190, 187, 184); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(51, 51, 51); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(140, 140, 140); + + private static readonly Color _ribbonAppButtonTextColor = SystemColors.Control; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -25,9 +41,9 @@ public class PaletteMicrosoft365DarkGray : PaletteMicrosoft365Base #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -113,18 +129,18 @@ public class PaletteMicrosoft365DarkGray : PaletteMicrosoft365Base #region Colour Arrays - private static readonly Color[] _trackBarColors = new Color[] - { + private static readonly Color[] _trackBarColors = + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; - private static readonly Color[] _schemeOfficeColors = new Color[] - { + private static readonly Color[] _schemeOfficeColors = + [ Color.FromArgb(139, 136, 134), // TextLabelControl Color.FromArgb(139, 136, 134), // TextButtonNormal Color.Black, // TextButtonChecked @@ -332,12 +348,12 @@ public class PaletteMicrosoft365DarkGray : PaletteMicrosoft365Base Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -349,7 +365,7 @@ public class PaletteMicrosoft365DarkGray : PaletteMicrosoft365Base Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion @@ -371,8 +387,8 @@ static PaletteMicrosoft365DarkGray() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -381,7 +397,7 @@ static PaletteMicrosoft365DarkGray() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -544,5 +560,39 @@ public PaletteMicrosoft365DarkGray() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365LightGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365LightGray.cs index e0b613648..5f3828772 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365LightGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365LightGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -14,10 +14,60 @@ namespace Krypton.Toolkit { public class PaletteMicrosoft365LightGray : PaletteMicrosoft365Base { - public PaletteMicrosoft365LightGray(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + #region Instance Fields + + private readonly Color _tabRowBackgroundColor = GlobalStaticValues.EMPTY_COLOR; + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.EMPTY_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.EMPTY_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.EMPTY_COLOR; + + #endregion + + #endregion + + public PaletteMicrosoft365LightGray(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { } public override Image? GetContextMenuSubMenuImage() => throw new NotImplementedException(); + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Silver.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Silver.cs index f879d766d..e307ebcf2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Silver.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365Silver.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,6 +19,22 @@ public class PaletteMicrosoft365Silver : PaletteMicrosoft365Base { #region Static Fields + #region Colors + + private static readonly Color _tabRowBackgroundColor = Color.FromArgb(227, 230, 232); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -28,14 +44,14 @@ public class PaletteMicrosoft365Silver : PaletteMicrosoft365Base #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -122,18 +138,18 @@ public class PaletteMicrosoft365Silver : PaletteMicrosoft365Base #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(59, 59, 59), // TextLabelControl Color.FromArgb(59, 59, 59), // TextButtonNormal Color.Black, // TextButtonChecked @@ -226,31 +242,31 @@ public class PaletteMicrosoft365Silver : PaletteMicrosoft365Base Color.FromArgb(229, 233, 238), // RibbonGroupsArea5 Color.FromArgb(255, 255, 255), // RibbonGroupBorder1 Color.FromArgb(253, 253, 253), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark - Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 + Color.FromArgb(227, 230, 232), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 @@ -258,8 +274,8 @@ public class PaletteMicrosoft365Silver : PaletteMicrosoft365Base Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(59, 59, 59), // RibbonGroupCollapsedText Color.FromArgb(179, 185, 195), // AlternatePressedBack1 Color.FromArgb(216, 224, 224), // AlternatePressedBack2 @@ -336,7 +352,7 @@ public class PaletteMicrosoft365Silver : PaletteMicrosoft365Base Color.FromArgb(224, 227, 231), // AppButtonOuter1 Color.FromArgb(224, 227, 231), // AppButtonOuter2 Color.FromArgb(224, 227, 231), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(135, 140, 146), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.Black, // AppButtonMenuDocsText @@ -368,7 +384,7 @@ public class PaletteMicrosoft365Silver : PaletteMicrosoft365Base Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion #endregion @@ -389,8 +405,8 @@ static PaletteMicrosoft365Silver() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -399,7 +415,7 @@ static PaletteMicrosoft365Silver() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -562,5 +578,39 @@ public PaletteMicrosoft365Silver() : base(_schemeOfficeColors, _checkBoxList, _g _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365White.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365White.cs index 02c756da4..68ef12bc9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365White.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Microsoft 365/Official Themes/PaletteMicrosoft365White.cs @@ -1,24 +1,34 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion namespace Krypton.Toolkit { /// - /// Gets the single instance of the ### palette. + /// Gets the single instance of the PaletteMicrosoft365White palette. /// public class PaletteMicrosoft365White : PaletteMicrosoft365Base { #region Static Fields + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -28,14 +38,14 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -119,21 +129,21 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base #endregion - #region Colour Arrays + #region Color Arrays private static readonly Color[] _trackBarColors = - { + [ Color.Red, // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(59, 59, 59), // TextLabelControl Color.FromArgb(59, 59, 59), // TextButtonNormal Color.Black, // TextButtonChecked @@ -165,9 +175,9 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.FromArgb(0, 114, 198), // StatusStripLight Color.FromArgb(0, 114, 198), // StatusStripDark Color.White, // ImageMargin - Color.FromArgb(25, 71, 138), // ToolStripBegin - Color.FromArgb(25, 71, 138), // ToolStripMiddle - Color.FromArgb(25, 71, 138), // ToolStripEnd + Color.FromArgb(255, 255, 255), // ToolStripBegin + Color.FromArgb(255, 255, 255), // ToolStripMiddle + Color.FromArgb(255, 255, 255), // ToolStripEnd Color.FromArgb(147, 154, 163), // OverflowBegin Color.FromArgb(147, 154, 163), // OverflowMiddle Color.FromArgb(147, 154, 163), // OverflowEnd @@ -184,9 +194,9 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.FromArgb(228, 230, 232), // FormBorderHeaderActive2 Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive1 Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive2 - Color.FromArgb(59, 59, 59), // FormHeaderShortActive + Color.FromArgb(59, 59, 59), // FormHeaderShortActive Color.FromArgb(138, 138, 138), // FormHeaderShortInactive - Color.FromArgb(59, 59, 59), // FormHeaderLongActive + Color.FromArgb(59, 59, 59), // FormHeaderLongActive Color.FromArgb(138, 138, 138), // FormHeaderLongInactive Color.FromArgb(166, 172, 179), // FormButtonBorderTrack Color.FromArgb(255, 255, 255), // FormButtonBack1Track @@ -224,33 +234,33 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.White, // RibbonGroupsArea3 -n Color.White, // RibbonGroupsArea4 -n Color.White, // RibbonGroupsArea5 -n - Color.Empty, // RibbonGroupBorder1 -n - Color.Empty, // RibbonGroupBorder2 -n - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder1 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder2 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark - Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(207, 212, 218), // RibbonMinimizeBarDark + Color.FromArgb(255, 255, 255), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 @@ -258,9 +268,9 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 - Color.FromArgb(59, 59, 59), // RibbonGroupCollapsedText + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 + Color.FromArgb(59, 59, 59), // RibbonGroupCollapsedText Color.FromArgb(179, 185, 195), // AlternatePressedBack1 Color.FromArgb(216, 224, 224), // AlternatePressedBack2 Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 @@ -274,44 +284,38 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.FromArgb(210, 215, 221), // RibbonQATMini2 Color.FromArgb(195, 200, 206), // RibbonQATMini3 Color.FromArgb(10, Color.White), // RibbonQATMini4 - Color.FromArgb(32, Color.White), // RibbonQATMini5 + Color.FromArgb(32, Color.White), // RibbonQATMini5 Color.FromArgb(200, 200, 200), // RibbonQATMini1I Color.FromArgb(233, 234, 238), // RibbonQATMini2I Color.FromArgb(223, 224, 228), // RibbonQATMini3I Color.FromArgb(10, Color.White), // RibbonQATMini4I - Color.FromArgb(32, Color.White), // RibbonQATMini5I - Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 - Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 - Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 - Color.FromArgb(90, 90, 90), // RibbonQATButtonDark - Color.FromArgb(210, 212, 215), // RibbonQATButtonLight - Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 - Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 - Color.FromArgb(191, 195, - 199), // RibbonGroupSeparatorDark - Color.FromArgb(255, 255, - 255), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, - 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, - 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, - 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, - 159), // ButtonClusterButtonBorder2 - Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.White, // GridListNormal2 - Color.FromArgb(203, 207, 212), // GridListPressed1 - Color.White, // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(238, 241, 247), // GridSheetColNormal1 - Color.FromArgb(218, 222, 227), // GridSheetColNormal2 - Color.FromArgb(255, 223, 107), // GridSheetColPressed1 - Color.FromArgb(255, 252, 230), // GridSheetColPressed2 + Color.FromArgb(32, Color.White), // RibbonQATMini5I + Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 + Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 + Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 + Color.FromArgb(90, 90, 90), // RibbonQATButtonDark + Color.FromArgb(210, 212, 215), // RibbonQATButtonLight + Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 + Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 + Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark + Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 + Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.White, // GridListNormal2 + Color.FromArgb(203, 207, 212), // GridListPressed1 + Color.White, // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(238, 241, 247), // GridSheetColNormal1 + Color.FromArgb(218, 222, 227), // GridSheetColNormal2 + Color.FromArgb(255, 223, 107), // GridSheetColPressed1 + Color.FromArgb(255, 252, 230), // GridSheetColPressed2 Color.FromArgb(255, 211, 89), // GridSheetColSelected1 Color.FromArgb(255, 239, 113), // GridSheetColSelected2 - Color.FromArgb(223, 227, 232), // GridSheetRowNormal + Color.FromArgb(223, 227, 232), // GridSheetRowNormal Color.FromArgb(255, 223, 107), // GridSheetRowPressed Color.FromArgb(245, 210, 87), // GridSheetRowSelected Color.FromArgb(218, 220, 221), // GridDataCellBorder @@ -336,7 +340,7 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.FromArgb(224, 227, 231), // AppButtonOuter1 Color.FromArgb(224, 227, 231), // AppButtonOuter2 Color.FromArgb(224, 227, 231), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(135, 140, 146), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.Black, // AppButtonMenuDocsText @@ -346,8 +350,7 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 - Color.FromArgb(228, 231, - 235), // RibbonGalleryBack2 Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 //Color.FromArgb(177, 181, 186), // RibbonTabTracking1 Color.FromArgb(229, 231, 235), // RibbonTabTracking3 Color.FromArgb(231, 233, 235), // RibbonTabTracking4 Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 @@ -366,9 +369,8 @@ public class PaletteMicrosoft365White : PaletteMicrosoft365Base Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 - Color.FromArgb(221, 221, - 221) // ToolTipBottom - }; + Color.FromArgb(221, 221, 221) // ToolTipBottom + ]; #endregion #endregion @@ -389,8 +391,8 @@ static PaletteMicrosoft365White() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -399,7 +401,7 @@ static PaletteMicrosoft365White() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -562,5 +564,46 @@ public PaletteMicrosoft365White() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region ColorTable + /// + /// Gets access to the color table instance. + /// + public override KryptonColorTable ColorTable => Table ??= new KryptonColorTable365White(_schemeOfficeColors, InheritBool.True, this); + #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => Color.White; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Bases/PaletteOffice2007Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Bases/PaletteOffice2007Base.cs index a7a1cea4a..0b406a1ef 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Bases/PaletteOffice2007Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Bases/PaletteOffice2007Base.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -65,7 +65,7 @@ public abstract class PaletteOffice2007Base : PaletteBase private static readonly Image? _treePlus = TreeItemImageResources.TreePlusBox; private static readonly Image? _treeMinus = TreeItemImageResources.TreeMinusBox; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -84,8 +84,8 @@ public abstract class PaletteOffice2007Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericMDIImageResources.MdiRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericMDIImageResources.MdiRibbonExpand; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -152,22 +152,33 @@ public abstract class PaletteOffice2007Base : PaletteBase private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); private static readonly Color _contextMenuImageBackChecked = Color.FromArgb(255, 227, 149); private static readonly Color _contextMenuImageBorderChecked = Color.FromArgb(242, 149, 54); - private static readonly Color[] _ribbonGroupCollapsedBackContext = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContext = { Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) }; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) }; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(212, 212, 212), // Button, Disabled, Border + private static readonly Color[] _ribbonGroupCollapsedBackContext = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContext = [Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = [Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) + ]; + private static readonly Color[] _appButtonNormal = [Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) + ]; + private static readonly Color[] _appButtonTrack = [Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) + ]; + private static readonly Color[] _appButtonPressed = [Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) + ]; + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(221, 207, 155), // Button, Tracking, Border 1 Color.FromArgb(192, 167, 119), // Button, Tracking, Border 2 Color.FromArgb(147, 125, 90), // Button, Pressed, Border 1 Color.FromArgb(255, 196, 68), // Button, Pressed, Border 2 Color.FromArgb(158, 130, 85), // Button, Checked, Border 1 Color.FromArgb(254, 218, 144) // Button, Checked, Border 2 - }; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + ]; + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(255, 213, 77), // Button, Tracking, Back 1 Color.FromArgb(255, 239, 177), // Button, Tracking, Back 2 @@ -177,21 +188,19 @@ public abstract class PaletteOffice2007Base : PaletteBase Color.FromArgb(254, 230, 136), // Button, Checked, Back 2 Color.FromArgb(232, 142, 49), // Button, Checked Tracking, Back 1 Color.FromArgb(252, 207, 100) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2007 _table; + private KryptonColorTable2007? _table; private readonly Color[] _ribbonColors; private readonly Color[] _trackBarColors; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; - - private string _themeName; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -208,7 +217,7 @@ protected PaletteOffice2007Base(string themeName, [DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -217,10 +226,10 @@ protected PaletteOffice2007Base(string themeName, Debug.Assert(radioButtonArray != null); // Remember incoming sets of values - if (themeName != null) - { - _themeName = themeName; - } + ThemeName = string.IsNullOrWhiteSpace(themeName) + ? @"PaletteOffice2007Base" + : themeName; + if (schemeColors != null) { _ribbonColors = schemeColors; @@ -247,15 +256,6 @@ protected PaletteOffice2007Base(string themeName, } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -431,7 +431,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -486,16 +486,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -520,7 +520,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -528,7 +528,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -636,18 +636,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -683,13 +683,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBack1] -: _buttonBackColors[4], + ? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBack1] + : _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -705,7 +705,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -759,11 +759,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -772,7 +772,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[3], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -780,7 +780,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -884,18 +884,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -929,19 +929,19 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) }, PaletteState.NormalDefaultOverride => style switch { - PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => Color.Empty, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2] }, PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBack2] -: _buttonBackColors[5], + ? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBack2] + : _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1033,14 +1033,14 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Disabled or PaletteState.Normal or PaletteState.CheckedNormal => PaletteColorStyle.GlassNormalFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassCenter, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassBottom, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonGallery => state switch { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => PaletteColorStyle.GlassSimpleFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassTrackingFull, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate => state switch { @@ -1049,7 +1049,7 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedStump, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedStump, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingStump, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile @@ -1068,7 +1068,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedFull, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonInputControl => state switch @@ -1078,7 +1078,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonNavigatorMini => state switch { @@ -1798,17 +1798,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1816,21 +1816,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1844,21 +1844,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta ? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -1866,24 +1866,24 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColors[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] - : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColors[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBorder1] -: _buttonBorderColors[3], + ? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBorder1] + : _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1894,7 +1894,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1920,17 +1920,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1938,22 +1938,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1966,21 +1966,21 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta ? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -1988,22 +1988,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColors[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] - : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColors[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[6], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBorder2] -: _buttonBorderColors[4], + ? _ribbonColors[(int)SchemeOfficeColors.AlternatePressedBorder2] + : _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2014,7 +2014,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2141,7 +2141,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2249,7 +2249,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2346,12 +2346,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2368,12 +2368,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2390,12 +2390,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2407,7 +2407,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2444,7 +2444,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2631,7 +2631,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2641,9 +2641,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2720,7 +2720,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2923,7 +2923,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2953,7 +2953,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3132,7 +3132,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3206,7 +3206,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3508,6 +3508,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3533,6 +3534,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3593,6 +3595,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3739,12 +3742,6 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin }; #endregion - #region ThemeName - - public new virtual string ThemeName { get => _themeName; set => _themeName = value; } - - #endregion - #region ButtonSpec /// @@ -3827,7 +3824,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3852,7 +3849,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -3950,7 +3947,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4023,9 +4020,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4038,9 +4037,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: return PaletteRibbonColorStyle.RibbonGroupNormalTitle; case PaletteRibbonBackStyle.RibbonGroupArea: @@ -4048,19 +4049,25 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorderContext; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabTracking2007; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4083,12 +4090,15 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4150,9 +4160,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4173,9 +4185,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4189,9 +4203,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4204,9 +4220,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4219,13 +4237,15 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaBorder - : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; + : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4244,16 +4264,19 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4300,9 +4323,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4323,9 +4348,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4339,9 +4366,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4354,9 +4383,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4369,13 +4400,15 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaInside - : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; + : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4394,22 +4427,25 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _focusTabFill; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4450,13 +4486,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -4468,13 +4506,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonQATOverflow: @@ -4483,7 +4523,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4496,11 +4536,13 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea3]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4518,16 +4560,19 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4564,13 +4609,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -4582,13 +4629,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonAppMenuOuter: @@ -4599,7 +4648,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4612,11 +4661,13 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4634,16 +4685,19 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4673,7 +4727,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5] @@ -4691,11 +4745,13 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4715,16 +4771,19 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4765,6 +4824,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4784,7 +4844,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4796,12 +4856,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColors[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4819,7 +4880,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4836,11 +4897,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4858,7 +4920,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4876,12 +4938,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4902,21 +4965,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4925,11 +4988,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4950,21 +5014,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4973,11 +5037,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlackDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlackDarkMode.cs index ce6514819..ebf02564f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlackDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlackDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,8 +23,8 @@ public class PaletteOffice2007BlackDarkMode : PaletteOffice2007BlackDarkModeBase #region Images private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; - private static readonly Image _blackDropDownButton = GenericImageResources.WhiteDropDownButton; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blackDropDownButton = GenericImageResources.WhiteDropDownButton; private static readonly Image _blackCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxBlackCloseNormal; private static readonly Image _blackCloseActive = Office2007ControlBoxResources.Office2007ControlBoxBlackCloseActive; private static readonly Image _blackCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxBlackCloseDisabled; @@ -46,23 +46,23 @@ public class PaletteOffice2007BlackDarkMode : PaletteOffice2007BlackDarkModeBase private static readonly Image _blackHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _blackRibbonMinimize = GenericImageResources.BlackButtonCollapse; private static readonly Image _blackRibbonExpand = GenericImageResources.BlackButtonExpand; - private static readonly Image _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; #endregion #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(37, 37, 37), // Top track Color.FromArgb(174, 174, 174), // Bottom track Color.FromArgb(131, 132, 132), // Fill track - Color.Empty, // Outside position + GlobalStaticValues.EMPTY_COLOR, // Outside position Color.FromArgb(35, 35, 35) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.White, // TextLabelControl Color.White, // TextButtonNormal Color.White, // TextButtonChecked @@ -108,15 +108,15 @@ public class PaletteOffice2007BlackDarkMode : PaletteOffice2007BlackDarkModeBase Color.FromArgb(153, 153, 153), // FormBorderInactiveLight Color.FromArgb(171, 171, 171), // FormBorderInactiveDark Color.FromArgb(65, 65, 65), // FormBorderHeaderActive - Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive + Color.FromArgb(100, 100, 100), // FormBorderHeaderInactive Color.FromArgb(42, 43, 43), // FormBorderHeaderActive1 Color.FromArgb(74, 74, 74), // FormBorderHeaderActive2 Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 - Color.FromArgb(174, 209, 255), // FormHeaderShortActive - Color.FromArgb(225, 225, 225), // FormHeaderShortInactive + Color.FromArgb(255, 255, 255), // FormHeaderShortActive + Color.FromArgb(100, 100, 100), // FormHeaderShortInactive Color.White, // FormHeaderLongActive - Color.FromArgb(225, 225, 225), // FormHeaderLongInactive + Color.FromArgb(100, 100, 100), // FormHeaderLongInactive Color.FromArgb(88, 95, 104), // FormButtonBorderTrack Color.FromArgb(91, 105, 123), // FormButtonBack1Track Color.FromArgb(173, 199, 214), // FormButtonBack2Track @@ -148,11 +148,11 @@ public class PaletteOffice2007BlackDarkMode : PaletteOffice2007BlackDarkModeBase Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 Color.FromArgb(123, 111, 68), // RibbonTabHighlight5 Color.FromArgb(54, 54, 54), // RibbonTabSeparatorColor - Color.FromArgb(190, 190, 190), // RibbonGroupsArea1 - Color.FromArgb(210, 210, 210), // RibbonGroupsArea2 + Color.FromArgb(215, 219, 224), // RibbonGroupsArea1 + Color.FromArgb(235, 235, 235), // RibbonGroupsArea2 Color.FromArgb(180, 187, 197), // RibbonGroupsArea3 - Color.FromArgb(235, 235, 235), // RibbonGroupsArea4 - Color.FromArgb(215, 219, 224), // RibbonGroupsArea5 + Color.FromArgb(210, 210, 210), // RibbonGroupsArea4 + Color.FromArgb(190, 190, 190), // RibbonGroupsArea5 Color.FromArgb(174, 176, 180), // RibbonGroupBorder1 Color.FromArgb(132, 132, 132), // RibbonGroupBorder2 Color.FromArgb(182, 184, 184), // RibbonGroupTitle1 @@ -246,16 +246,16 @@ public class PaletteOffice2007BlackDarkMode : PaletteOffice2007BlackDarkModeBase Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(91, 91, 91), // GridDataCellSelected Color.White, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(100, 100, 100), // InputControlTextDisabled Color.FromArgb(137, 137, 137), // InputControlBorderNormal Color.FromArgb(204, 204, 204), // InputControlBorderDisabled Color.FromArgb(10, 10, 10), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(232, 232, 232), // InputControlBackInactive - Color.FromArgb(91, 91, 91), // InputDropDownNormal1 - Color.FromArgb(88, 88, 88), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(102, 102, 102), // InputControlBackDisabled + Color.FromArgb(78, 78, 80), // InputControlBackInactive + Color.White, // InputDropDownNormal1 + Color.FromArgb(100, 100, 100), // InputDropDownNormal2 + Color.FromArgb(82, 82, 82), // InputDropDownDisabled1 + Color.FromArgb(95, 95, 95), // InputDropDownDisabled2 Color.FromArgb(41, 41, 41), // ContextMenuHeading Color.White, // ContextMenuHeadingText Color.FromArgb(54, 54, 54), // ContextMenuImageColumn @@ -276,13 +276,13 @@ public class PaletteOffice2007BlackDarkMode : PaletteOffice2007BlackDarkModeBase Color.FromArgb(247, 247, 247), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 Color.FromArgb(225, 225, 225), // RibbonDropArrowLight Color.FromArgb(103, 103, 103) // RibbonDropArrowDark - }; + ]; #endregion @@ -304,8 +304,8 @@ static PaletteOffice2007BlackDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GallerySilverBlack); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007BlackN, Office2007RadioButtonImageResources.RadioButton2007BlackT, @@ -314,7 +314,7 @@ static PaletteOffice2007BlackDarkMode() Office2007RadioButtonImageResources.RadioButton2007BlackNC, Office2007RadioButtonImageResources.RadioButton2007BlackTC, Office2007RadioButtonImageResources.RadioButton2007BlackPC - }; + ]; } /// @@ -593,6 +593,40 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac return base.GetRibbonBackColorStyle(style, state); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } #endregion @@ -647,7 +681,7 @@ public abstract class PaletteOffice2007BlackDarkModeBase : PaletteBase private static readonly Image? _treePlus = TreeItemImageResources.TreePlusBox; private static readonly Image? _treeMinus = TreeItemImageResources.TreeMinusBox; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -666,8 +700,8 @@ public abstract class PaletteOffice2007BlackDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericMDIImageResources.MdiRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericMDIImageResources.MdiRibbonExpand; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -708,9 +742,9 @@ public abstract class PaletteOffice2007BlackDarkModeBase : PaletteBase private static readonly Color _calendarTextColor = Color.White; private static readonly Color _colorWhite192 = Color.FromArgb(192, 192, 192); private static readonly Color _lightGray = Color.FromArgb(242, 242, 242); - private static readonly Color _disabledText2 = Color.FromArgb(78, 78, 78); - private static readonly Color _disabledText = Color.FromArgb(172, 172, 172); - private static readonly Color _disabledBack = Color.FromArgb(128, 128, 128); + private static readonly Color _disabledText2 = Color.FromArgb(166, 166, 166); + private static readonly Color _disabledText = Color.FromArgb(32, 32, 32); + private static readonly Color _disabledBack = Color.FromArgb(102, 102, 102); private static readonly Color _disabledBack2 = Color.FromArgb(128, 128, 128); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -739,62 +773,74 @@ public abstract class PaletteOffice2007BlackDarkModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _ribbonGroupCollapsedBackContext = - { + [ Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = - { + [ Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContext = { + private static readonly Color[] _ribbonGroupCollapsedBorderContext = + [ Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) - }; + ]; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(255, 251, 230), Color.FromArgb(178, 178, 178), Color.FromArgb(176, 176, 176), Color.FromArgb(179, 179, 179), Color.FromArgb(160, 160, 160) - }; + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), Color.FromArgb(185, 185, 185), Color.FromArgb(35, 35, 35), Color.FromArgb(50, 50, 50), Color.FromArgb(100, 100, 100) - }; + ]; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(180, 180, 180), // Button, Disabled, Border + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(187, 186, 186), // Button, Tracking, Border 1 Color.FromArgb(139, 139, 139), // Button, Tracking, Border 2 Color.FromArgb(30, 30, 30), // Button, Pressed, Border 1 Color.FromArgb(4, 3, 3), // Button, Pressed, Border 2 Color.FromArgb(30, 30, 30), // Button, Checked, Border 1 Color.FromArgb(4, 3, 3) // Button, Checked, Border 2 - }; + ]; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(91, 91, 91), // Button, Tracking, Back 1 Color.FromArgb(33, 33, 33), // Button, Tracking, Back 2 @@ -804,19 +850,19 @@ public abstract class PaletteOffice2007BlackDarkModeBase : PaletteBase Color.FromArgb(88, 88, 88), // Button, Checked, Back 2 Color.FromArgb(41, 41, 41), // Button, Checked Tracking, Back 1 Color.FromArgb(70, 70, 70) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2007BlackDarkMode _table; + private KryptonColorTable2007BlackDarkMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -831,7 +877,7 @@ public abstract class PaletteOffice2007BlackDarkModeBase : PaletteBase protected PaletteOffice2007BlackDarkModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -840,6 +886,8 @@ protected PaletteOffice2007BlackDarkModeBase([DisallowNull] Color[] schemeColors Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2007BlackDarkModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -870,15 +918,6 @@ protected PaletteOffice2007BlackDarkModeBase([DisallowNull] Color[] schemeColors } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -1054,7 +1093,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1109,16 +1148,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -1143,7 +1182,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -1151,7 +1190,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1295,18 +1334,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1350,13 +1389,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] -: _buttonBackColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] + : _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1372,7 +1411,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1426,11 +1465,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1439,7 +1478,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[3], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1447,7 +1486,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1587,18 +1626,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1640,19 +1679,19 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) }, PaletteState.NormalDefaultOverride => style switch { - PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => Color.Empty, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2] }, PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] -: _buttonBackColors[5], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] + : _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1744,14 +1783,14 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Disabled or PaletteState.Normal or PaletteState.CheckedNormal => PaletteColorStyle.GlassNormalFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassCenter, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassBottom, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonGallery => state switch { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => PaletteColorStyle.GlassSimpleFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassTrackingFull, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate => state switch { @@ -1760,7 +1799,7 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedStump, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedStump, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingStump, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile @@ -1779,7 +1818,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedFull, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonInputControl => state switch @@ -1789,7 +1828,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonNavigatorMini => state switch { @@ -2509,17 +2548,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2527,21 +2566,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -2555,21 +2594,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2577,24 +2616,24 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] -: _buttonBorderColors[3], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] + : _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2605,7 +2644,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2631,17 +2670,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2649,22 +2688,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -2677,21 +2716,21 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2699,22 +2738,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[6], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] -: _buttonBorderColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] + : _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2725,7 +2764,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2852,7 +2891,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2960,7 +2999,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -3057,12 +3096,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -3079,12 +3118,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -3101,12 +3140,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -3118,7 +3157,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -3155,7 +3194,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -3342,7 +3381,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -3352,9 +3391,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -3436,7 +3475,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3644,7 +3683,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -3674,7 +3713,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3853,7 +3892,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3932,7 +3971,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -4239,6 +4278,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4264,6 +4304,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4324,6 +4365,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4552,7 +4594,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -4577,7 +4619,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -4675,7 +4717,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4736,6 +4778,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac PaletteState.ContextNormal or PaletteState.ContextTracking => PaletteRibbonColorStyle.RibbonGroupGradientOne, _ => PaletteRibbonColorStyle.RibbonGroupCollapsedFrameBack }; + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: switch (state) { @@ -4748,9 +4791,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4763,9 +4808,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: return PaletteRibbonColorStyle.RibbonGroupNormalTitle; case PaletteRibbonBackStyle.RibbonGroupArea: @@ -4773,19 +4820,25 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorderContext; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabTracking2007; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4808,12 +4861,15 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4875,9 +4931,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4898,9 +4956,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4914,9 +4974,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4929,9 +4991,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4944,13 +5008,15 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaBorder - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4969,16 +5035,19 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5025,9 +5094,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -5048,9 +5119,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -5064,9 +5137,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -5079,9 +5154,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -5094,13 +5171,15 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaInside - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5119,22 +5198,25 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _focusTabFill; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5175,13 +5257,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -5193,13 +5277,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonQATOverflow: @@ -5208,7 +5294,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -5221,11 +5307,13 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5243,16 +5331,19 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5289,13 +5380,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -5307,13 +5400,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonAppMenuOuter: @@ -5324,7 +5419,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -5337,11 +5432,13 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5359,16 +5456,19 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5398,7 +5498,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] @@ -5416,11 +5516,13 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5440,16 +5542,19 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5490,6 +5595,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5509,7 +5615,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5521,12 +5627,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5544,7 +5651,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5561,11 +5668,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5583,7 +5691,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5601,12 +5709,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5627,21 +5736,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5650,11 +5759,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5675,21 +5785,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5698,11 +5808,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5769,12 +5880,12 @@ public class KryptonColorTable2007BlackDarkMode : KryptonColorTable #region Colour Arrays private static Color[] _propertyGridColors = - { - Color.FromArgb(33, 33, 33), // HelpBackColor + [ + Color.FromArgb(33, 33, 33), // HelpBackColor Color.FromArgb(255, 255, 255), // HelpForeColor Color.Silver, // LineColor Color.FromArgb(255, 255, 255) // CategoryForeColor - }; + ]; #endregion @@ -5803,8 +5914,9 @@ public KryptonColorTable2007BlackDarkMode([DisallowNull] Color[] colors, PaletteBase palette) : base(palette) { - Debug.Assert(colors != null); - Colors = colors; + Debug.Assert(colors is not null); + + Colors = colors ?? throw new ArgumentNullException(nameof(colors)); UseRoundedEdges = roundedEdges; } #endregion @@ -5819,7 +5931,7 @@ public KryptonColorTable2007BlackDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -6363,15 +6475,10 @@ public KryptonColorTable2007BlackDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueDarkMode.cs index 85af603cf..4038d8574 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,8 +23,8 @@ public class PaletteOffice2007BlueDarkMode : PaletteOffice2007BlueDarkModeBase private static readonly ImageList _galleryButtonList; #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = GenericImageResources.BlueDropDownButton; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = GenericImageResources.BlueDropDownButton; private static readonly Image _blueCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseNormal; private static readonly Image _blueCloseActive = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseActive; private static readonly Image _blueCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseDisabled; @@ -45,232 +45,243 @@ public class PaletteOffice2007BlueDarkMode : PaletteOffice2007BlueDarkModeBase private static readonly Image _blueHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _blueHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _blueHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; - private static readonly Image _contextMenuSubMenu = GenericImageResources.BlueContextMenuSub; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.BlueContextMenuSub; #endregion #region Colour Arrays - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks Color.FromArgb(116, 150, 194), // Top track Color.FromArgb(152, 190, 241), // Bottom track Color.FromArgb(142, 180, 231), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(63, 101, 152) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 21, 66, 139), // TextLabelControl - Color.FromArgb( 21, 66, 139), // TextButtonNormal - Color.Blue, // TextButtonChecked - Color.FromArgb(161, 189, 207), // ButtonNormalBorder - Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder - Color.FromArgb(210, 225, 244), // ButtonNormalBack1 - Color.FromArgb(235, 243, 254), // ButtonNormalBack2 - Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 - Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 - Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 - Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 - Color.FromArgb(134, 179, 236), // PanelClient - Color.FromArgb(63, 122, 197), // PanelAlternative - Color.FromArgb(101, 147, 207), // ControlBorder - Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 - Color.FromArgb(134, 179, 236), // HeaderPrimaryBack1 - Color.FromArgb(63, 122, 197), // HeaderPrimaryBack2 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 - Color.FromArgb( 21, 66, 139), // HeaderText - Color.FromArgb( 21, 66, 139), // StatusStripText - Color.FromArgb(121, 153, 194), // ButtonBorder - Color.FromArgb(255, 255, 255), // SeparatorLight - Color.FromArgb(154, 198, 255), // SeparatorDark - Color.FromArgb(248, 248, 248), // GripLight - Color.FromArgb(114, 152, 204), // GripDark - Color.FromArgb(63, 122, 197), // ToolStripBack - Color.FromArgb(63, 122, 197), // StatusStripLight - Color.FromArgb(134, 179, 236), // StatusStripDark - Color.FromArgb(63, 122, 197), // ImageMargin - Color.FromArgb(134, 179, 236), // ToolStripBegin - Color.FromArgb(222, 236, 255), // ToolStripMiddle - Color.FromArgb(152, 186, 230), // ToolStripEnd - Color.FromArgb(167, 204, 251), // OverflowBegin - Color.FromArgb(167, 204, 251), // OverflowMiddle - Color.FromArgb(101, 147, 207), // OverflowEnd - Color.FromArgb(111, 157, 217), // ToolStripBorder - Color.FromArgb(134, 179, 236), // FormBorderActive - Color.FromArgb(179, 209, 247), // FormBorderInactive - Color.FromArgb(134, 179, 236), // FormBorderActiveLight - Color.FromArgb(63, 122, 197), // FormBorderActiveDark - Color.FromArgb(179, 209, 247), // FormBorderInactiveLight - Color.FromArgb(96, 150, 220), // FormBorderInactiveDark - Color.FromArgb(134, 179, 236), // FormBorderHeaderActive - Color.FromArgb(179, 209, 247), // FormBorderHeaderInactive - Color.FromArgb(134, 179, 236), // FormBorderHeaderActive1 - Color.FromArgb(63, 122, 197), // FormBorderHeaderActive2 - Color.FromArgb(179, 209, 247), // FormBorderHeaderInctive1 - Color.FromArgb(96, 150, 220), // FormBorderHeaderInctive2 - Color.FromArgb(21, 66, 139), // FormHeaderShortActive - Color.FromArgb(160, 160, 160), // FormHeaderShortInactive - Color.FromArgb(105, 112, 121), // FormHeaderLongActive - Color.FromArgb(160, 160, 160), // FormHeaderLongInactive - Color.FromArgb(158, 193, 241), // FormButtonBorderTrack - Color.FromArgb(210, 228, 254), // FormButtonBack1Track - Color.FromArgb(255, 255, 255), // FormButtonBack2Track - Color.FromArgb(162, 191, 227), // FormButtonBorderPressed - Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed - Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed - Color.FromArgb( 21, 66, 139), // TextButtonFormNormal - Color.FromArgb( 21, 66, 139), // TextButtonFormTracking - Color.FromArgb( 21, 66, 139), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 21, 66, 139), // TextLabelPanel - Color.FromArgb( 21, 66, 139), // RibbonTabTextNormal - Color.FromArgb( 21, 66, 139), // RibbonTabTextChecked - Color.FromArgb(134, 179, 236), // RibbonTabSelected1 - Color.FromArgb(63, 122, 197), // RibbonTabSelected2 - Color.FromArgb(134, 179, 236), // RibbonTabSelected3 - Color.FromArgb(63, 122, 197), // RibbonTabSelected4 - Color.FromArgb(222, 232, 245), // RibbonTabSelected5 - Color.FromArgb(153, 187, 232), // RibbonTabTracking1 - Color.FromArgb(255, 180, 86), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 - Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 - Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor - Color.FromArgb(134, 179, 236), // RibbonGroupsArea1 - Color.FromArgb(63, 122, 197), // RibbonGroupsArea2 - Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 - Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 - Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 - Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 - Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 - Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 - Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 - Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 - Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 - Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark - Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight - Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 - Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 - Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark - Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight - Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 - Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 - Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 - Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 - Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 - Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 - Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 - Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 - Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 - Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 - Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 - Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 - Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 - Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 - Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 - Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 - Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 - Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 - Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 - Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 - Color.FromArgb( 21, 66, 139), // RibbonGroupCollapsedText - Color.FromArgb(118, 153, 200), // AlternatePressedBack1 - Color.FromArgb(184, 215, 253), // AlternatePressedBack2 - Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 - Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 - Color.FromArgb(150, 194, 239), // FormButtonBack1Checked - Color.FromArgb(210, 228, 254), // FormButtonBack2Checked - Color.FromArgb(158, 193, 241), // FormButtonBorderCheck - Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack - Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack - Color.FromArgb(154, 179, 213), // RibbonQATMini1 - Color.FromArgb(219, 231, 247), // RibbonQATMini2 - Color.FromArgb(195, 213, 236), // RibbonQATMini3 - Color.FromArgb(128, Color.White), // RibbonQATMini4 - Color.FromArgb(72, Color.White), // RibbonQATMini5 - Color.FromArgb(153, 176, 206), // RibbonQATMini1I - Color.FromArgb(226, 233, 241), // RibbonQATMini2I - Color.FromArgb(198, 210, 226), // RibbonQATMini3I - Color.FromArgb(128, Color.White), // RibbonQATMini4I - Color.FromArgb(72, Color.White), // RibbonQATMini5I - Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 - Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 - Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 - Color.FromArgb( 86, 125, 177), // RibbonQATButtonDark - Color.FromArgb(234, 242, 249), // RibbonQATButtonLight - Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 - Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark - Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 - Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor - Color.FromArgb(134, 179, 236), // GridListNormal1 - Color.FromArgb(63, 122, 197), // GridListNormal2 - Color.FromArgb(63, 122, 197), // GridListPressed1 - Color.FromArgb(252, 253, 255), // GridListPressed2 - Color.FromArgb(170, 195, 240), // GridListSelected - Color.FromArgb(134, 179, 236), // GridSheetColNormal1 - Color.FromArgb(63, 122, 197), // GridSheetColNormal2 - Color.FromArgb(223, 226, 228), // GridSheetColPressed1 - Color.FromArgb(188, 197, 210), // GridSheetColPressed2 - Color.FromArgb(249, 217, 159), // GridSheetColSelected1 - Color.FromArgb(241, 193, 95), // GridSheetColSelected2 - Color.FromArgb(228, 236, 247), // GridSheetRowNormal - Color.FromArgb(187, 196, 209), // GridSheetRowPressed - Color.FromArgb(255, 213, 141), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(194, 217, 240), // GridDataCellSelected - Color.Blue, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(171, 193, 222), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(134, 179, 236), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(234, 242, 251), // InputControlBackInactive - Color.FromArgb( 86, 125, 177), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(63, 122, 197), // ContextMenuHeadingBack - Color.FromArgb(0, 21, 110), // ContextMenuHeadingText - Color.FromArgb(63, 122, 197), // ContextMenuImageColumn - Color.FromArgb(134, 179, 236), // AppButtonBack1 - Color.FromArgb(63, 122, 197), // AppButtonBack2 - Color.FromArgb(155, 175, 202), // AppButtonBorder - Color.FromArgb(189, 211, 238), // AppButtonOuter1 - Color.FromArgb(176, 201, 234), // AppButtonOuter2 - Color.FromArgb(207, 224, 245), // AppButtonOuter3 - Color.White, // AppButtonInner1 - Color.FromArgb(155, 175, 202), // AppButtonInner2 - Color.FromArgb(63, 122, 197), // AppButtonMenuDocs - Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText - Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 - Color.FromArgb(185, 208, 237), // RibbonGalleryBorder - Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal - Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking - Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 - Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty // RibbonDropArrowDark - }; + ]; + + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb(21, 66, 139), // TextLabelControl + Color.FromArgb(21, 66, 139), // TextButtonNormal + Color.Blue, // TextButtonChecked + Color.FromArgb(161, 189, 207), // ButtonNormalBorder + Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder + Color.FromArgb(210, 225, 244), // ButtonNormalBack1 + Color.FromArgb(235, 243, 254), // ButtonNormalBack2 + Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 + Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 + Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 + Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 + Color.FromArgb(134, 179, 236), // PanelClient + Color.FromArgb(63, 122, 197), // PanelAlternative + Color.FromArgb(101, 147, 207), // ControlBorder + Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 + Color.FromArgb(134, 179, 236), // HeaderPrimaryBack1 + Color.FromArgb(63, 122, 197), // HeaderPrimaryBack2 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 + Color.FromArgb(21, 66, 139), // HeaderText + Color.FromArgb(21, 66, 139), // StatusStripText + Color.FromArgb(121, 153, 194), // ButtonBorder + Color.FromArgb(255, 255, 255), // SeparatorLight + Color.FromArgb(154, 198, 255), // SeparatorDark + Color.FromArgb(248, 248, 248), // GripLight + Color.FromArgb(114, 152, 204), // GripDark + Color.FromArgb(63, 122, 197), // ToolStripBack + Color.FromArgb(63, 122, 197), // StatusStripLight + Color.FromArgb(134, 179, 236), // StatusStripDark + Color.FromArgb(63, 122, 197), // ImageMargin + Color.FromArgb(134, 179, 236), // ToolStripBegin + Color.FromArgb(222, 236, 255), // ToolStripMiddle + Color.FromArgb(152, 186, 230), // ToolStripEnd + Color.FromArgb(167, 204, 251), // OverflowBegin + Color.FromArgb(167, 204, 251), // OverflowMiddle + Color.FromArgb(101, 147, 207), // OverflowEnd + Color.FromArgb(111, 157, 217), // ToolStripBorder + Color.FromArgb(134, 179, 236), // FormBorderActive + Color.FromArgb(179, 209, 247), // FormBorderInactive + Color.FromArgb(134, 179, 236), // FormBorderActiveLight + Color.FromArgb(63, 122, 197), // FormBorderActiveDark + Color.FromArgb(179, 209, 247), // FormBorderInactiveLight + Color.FromArgb(96, 150, 220), // FormBorderInactiveDark + Color.FromArgb(134, 179, 236), // FormBorderHeaderActive + Color.FromArgb(179, 209, 247), // FormBorderHeaderInactive + Color.FromArgb(134, 179, 236), // FormBorderHeaderActive1 + Color.FromArgb(63, 122, 197), // FormBorderHeaderActive2 + Color.FromArgb(179, 209, 247), // FormBorderHeaderInctive1 + Color.FromArgb(96, 150, 220), // FormBorderHeaderInctive2 + Color.FromArgb(21, 66, 139), // FormHeaderShortActive + Color.FromArgb(150, 143, 134), // FormHeaderShortInactive + Color.FromArgb(105, 112, 121), // FormHeaderLongActive + Color.FromArgb(150, 143, 134), // FormHeaderLongInactive + Color.FromArgb(158, 193, 241), // FormButtonBorderTrack + Color.FromArgb(210, 228, 254), // FormButtonBack1Track + Color.FromArgb(255, 255, 255), // FormButtonBack2Track + Color.FromArgb(162, 191, 227), // FormButtonBorderPressed + Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed + Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed + Color.FromArgb(21, 66, 139), // TextButtonFormNormal + Color.FromArgb(255, 255, 255), // TextButtonFormTracking + Color.FromArgb(21, 66, 139), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb(21, 66, 139), // TextLabelPanel + Color.FromArgb(21, 66, 139), // RibbonTabTextNormal + Color.FromArgb(255, 255, 255), // RibbonTabTextChecked + Color.FromArgb(134, 179, 236), // RibbonTabSelected1 + Color.FromArgb(63, 122, 197), // RibbonTabSelected2 + Color.FromArgb(134, 179, 236), // RibbonTabSelected3 + Color.FromArgb(63, 122, 197), // RibbonTabSelected4 + Color.FromArgb(222, 232, 245), // RibbonTabSelected5 + Color.FromArgb(153, 187, 232), // RibbonTabTracking1 + Color.FromArgb(255, 180, 86), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 + Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor + Color.FromArgb(219, 230, 244), // RibbonGroupsArea1 + Color.FromArgb(231, 242, 255), // RibbonGroupsArea2 + Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 + Color.FromArgb(63, 122, 197), // RibbonGroupsArea4 + Color.FromArgb(134, 179, 236), // RibbonGroupsArea5 + Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 + Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 + Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 + Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 + Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 + Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 + Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark + Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight + Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 + Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 + Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark + Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight + Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 + Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 + Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 + Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 + Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 + Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 + Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 + Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 + Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 + Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 + Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 + Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 + Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 + Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 + Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 + Color.FromArgb(21, 66, 139), // RibbonGroupCollapsedText + Color.FromArgb(118, 153, 200), // AlternatePressedBack1 + Color.FromArgb(184, 215, 253), // AlternatePressedBack2 + Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 + Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 + Color.FromArgb(150, 194, 239), // FormButtonBack1Checked + Color.FromArgb(210, 228, 254), // FormButtonBack2Checked + Color.FromArgb(158, 193, 241), // FormButtonBorderCheck + Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack + Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack + Color.FromArgb(154, 179, 213), // RibbonQATMini1 + Color.FromArgb(219, 231, 247), // RibbonQATMini2 + Color.FromArgb(195, 213, 236), // RibbonQATMini3 + Color.FromArgb(128, Color.White), // RibbonQATMini4 + Color.FromArgb(72, Color.White), // RibbonQATMini5 + Color.FromArgb(153, 176, 206), // RibbonQATMini1I + Color.FromArgb(226, 233, 241), // RibbonQATMini2I + Color.FromArgb(198, 210, 226), // RibbonQATMini3I + Color.FromArgb(128, Color.White), // RibbonQATMini4I + Color.FromArgb(72, Color.White), // RibbonQATMini5I + Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 + Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 + Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 + Color.FromArgb(86, 125, 177), // RibbonQATButtonDark + Color.FromArgb(234, 242, 249), // RibbonQATButtonLight + Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 + Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 + Color.FromArgb(140, 172, + 211), // RibbonGroupSeparatorDark + Color.FromArgb(248, 250, + 252), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, + 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, + 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, + 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, + 191), // ButtonClusterButtonBorder2 + Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor + Color.FromArgb(134, 179, 236), // GridListNormal1 + Color.FromArgb(63, 122, 197), // GridListNormal2 + Color.FromArgb(63, 122, 197), // GridListPressed1 + Color.FromArgb(252, 253, 255), // GridListPressed2 + Color.FromArgb(170, 195, 240), // GridListSelected + Color.FromArgb(134, 179, 236), // GridSheetColNormal1 + Color.FromArgb(63, 122, 197), // GridSheetColNormal2 + Color.FromArgb(223, 226, 228), // GridSheetColPressed1 + Color.FromArgb(188, 197, 210), // GridSheetColPressed2 + Color.FromArgb(249, 217, 159), // GridSheetColSelected1 + Color.FromArgb(241, 193, 95), // GridSheetColSelected2 + Color.FromArgb(228, 236, 247), // GridSheetRowNormal + Color.FromArgb(187, 196, 209), // GridSheetRowPressed + Color.FromArgb(255, 213, 141), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(194, 217, 240), // GridDataCellSelected + Color.Blue, // InputControlTextNormal + Color.FromArgb(51, 51, 51), // InputControlTextDisabled + Color.FromArgb(171, 193, 222), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(134, 179, 236), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(234, 242, 251), // InputControlBackInactive + Color.FromArgb(86, 125, 177), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(51, 51, 51), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(63, 122, 197), // ContextMenuHeadingBack + Color.FromArgb(0, 21, 110), // ContextMenuHeadingText + Color.FromArgb(63, 122, 197), // ContextMenuImageColumn + Color.FromArgb(134, 179, 236), // AppButtonBack1 + Color.FromArgb(63, 122, 197), // AppButtonBack2 + Color.FromArgb(155, 175, 202), // AppButtonBorder + Color.FromArgb(189, 211, 238), // AppButtonOuter1 + Color.FromArgb(176, 201, 234), // AppButtonOuter2 + Color.FromArgb(207, 224, 245), // AppButtonOuter3 + Color.White, // AppButtonInner1 + Color.FromArgb(155, 175, 202), // AppButtonInner2 + Color.FromArgb(63, 122, 197), // AppButtonMenuDocs + Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText + Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 + Color.FromArgb(185, 208, 237), // RibbonGalleryBorder + Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal + Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking + Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 + Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR // RibbonDropArrowDark + ]; #endregion @@ -292,8 +303,8 @@ static PaletteOffice2007BlueDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GalleryBlue); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007BlueN, Office2007RadioButtonImageResources.RadioButton2007BlueT, @@ -302,7 +313,7 @@ static PaletteOffice2007BlueDarkMode() Office2007RadioButtonImageResources.RadioButton2007BlueNC, Office2007RadioButtonImageResources.RadioButton2007BlueTC, Office2007RadioButtonImageResources.RadioButton2007BluePC - }; + ]; } /// @@ -426,6 +437,40 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac return base.GetRibbonBackColorStyle(style, state); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } #endregion @@ -483,7 +528,7 @@ public abstract class PaletteOffice2007BlueDarkModeBase : PaletteBase private static readonly Image? _treePlus = TreeItemImageResources.TreePlusBox; private static readonly Image? _treeMinus = TreeItemImageResources.TreeMinusBox; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -502,8 +547,8 @@ public abstract class PaletteOffice2007BlueDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericMDIImageResources.MdiRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericMDIImageResources.MdiRibbonExpand; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -544,8 +589,8 @@ public abstract class PaletteOffice2007BlueDarkModeBase : PaletteBase private static readonly Color _gridTextColor = Color.Black; private static readonly Color _colorWhite192 = Color.FromArgb(192, 192, 192); private static readonly Color _lightGray = Color.FromArgb(242, 242, 242); - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(51, 51, 51); + private static readonly Color _disabledText = Color.FromArgb(150, 143, 134); private static readonly Color _disabledBack = Color.FromArgb(240, 240, 240); private static readonly Color _disabledBack2 = Color.FromArgb(240, 240, 240); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); @@ -576,71 +621,74 @@ public abstract class PaletteOffice2007BlueDarkModeBase : PaletteBase #region Colour Arrays - private static readonly Color[] _ribbonGroupCollapsedBackContext = { - Color.FromArgb(48, 255, 255, 255), + private static readonly Color[] _ribbonGroupCollapsedBackContext = + [ + Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = - { - Color.FromArgb(48, 255, 255, 255), + [ + Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; private static readonly Color[] _ribbonGroupCollapsedBorderContext = - { - Color.FromArgb(128, 199, 199, 199), + [ + Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = - { - Color.FromArgb(128, 168, 184, 196), + [ + Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) - }; + ]; private static readonly Color[] _appButtonNormal = - { - Color.FromArgb(243, 245, 248), + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { - Color.FromArgb(255, 251, 230), + [ + Color.FromArgb(255, 251, 230), Color.FromArgb(180, 210, 255), Color.FromArgb(96, 147, 235), Color.FromArgb(110, 150, 240), Color.FromArgb(115, 155, 245) - }; + ]; private static readonly Color[] _appButtonPressed = - { - Color.FromArgb(185, 215, 250), + [ + Color.FromArgb(185, 215, 250), Color.FromArgb(190, 220, 245), Color.FromArgb(98, 155, 230), Color.FromArgb(110, 160, 225), Color.FromArgb(120, 175, 240) - }; + ]; private static readonly Color[] _buttonBorderColors = - { - Color.FromArgb(212, 212, 212), // Button, Disabled, Border + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(179, 209, 255), // Button, Tracking, Border 1 Color.FromArgb(179, 209, 249), // Button, Tracking, Border 2 Color.FromArgb(96, 147, 230), // Button, Pressed, Border 1 Color.FromArgb(32, 98, 200), // Button, Pressed, Border 2 Color.FromArgb(96, 147, 235), // Button, Checked, Border 1 Color.FromArgb(63, 122, 220) // Button, Checked, Border 2 - }; + ]; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(141, 168, 203), // Button, Tracking, Back 1 Color.FromArgb(95, 127, 169), // Button, Tracking, Back 2 @@ -650,19 +698,19 @@ public abstract class PaletteOffice2007BlueDarkModeBase : PaletteBase Color.FromArgb(141, 180, 230), // Button, Checked, Back 2 Color.FromArgb(63, 122, 197), // Button, Checked Tracking, Back 1 Color.FromArgb(96, 147, 213) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2007BlueDarkMode _table; + private KryptonColorTable2007BlueDarkMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -677,7 +725,7 @@ public abstract class PaletteOffice2007BlueDarkModeBase : PaletteBase protected PaletteOffice2007BlueDarkModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -686,6 +734,8 @@ protected PaletteOffice2007BlueDarkModeBase([DisallowNull] Color[] schemeColors, Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2007BlueDarkModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -712,15 +762,6 @@ protected PaletteOffice2007BlueDarkModeBase([DisallowNull] Color[] schemeColors, } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -896,7 +937,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -951,16 +992,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -985,7 +1026,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -993,7 +1034,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1137,18 +1178,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1184,13 +1225,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] -: _buttonBackColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] + : _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1206,7 +1247,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1260,11 +1301,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1273,7 +1314,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[3], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1281,7 +1322,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1421,18 +1462,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1466,19 +1507,19 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) }, PaletteState.NormalDefaultOverride => style switch { - PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => Color.Empty, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2] }, PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] -: _buttonBackColors[5], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] + : _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1533,14 +1574,14 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Disabled or PaletteState.Normal or PaletteState.CheckedNormal => PaletteColorStyle.GlassNormalFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassCenter, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassBottom, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonGallery => state switch { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => PaletteColorStyle.GlassSimpleFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassTrackingFull, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate => state switch { @@ -1549,7 +1590,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedStump, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedStump, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingStump, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1558,7 +1599,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedFull, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonInputControl => state switch @@ -1568,7 +1609,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonNavigatorMini => state switch { @@ -1819,17 +1860,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1837,21 +1878,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1865,21 +1906,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -1887,24 +1928,24 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] -: _buttonBorderColors[3], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] + : _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1915,7 +1956,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1941,17 +1982,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1959,22 +2000,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1987,21 +2028,21 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2009,22 +2050,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[6], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] -: _buttonBorderColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] + : _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2035,7 +2076,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2162,7 +2203,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2270,7 +2311,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2367,12 +2408,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2389,12 +2430,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2411,12 +2452,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2428,7 +2469,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2465,7 +2506,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2652,7 +2693,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2662,9 +2703,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2741,7 +2782,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2944,7 +2985,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2974,7 +3015,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3153,7 +3194,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3227,7 +3268,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3529,6 +3570,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3554,6 +3596,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3614,6 +3657,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3842,7 +3886,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3867,7 +3911,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -3965,7 +4009,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4026,6 +4070,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac PaletteState.ContextNormal or PaletteState.ContextTracking => PaletteRibbonColorStyle.RibbonGroupGradientOne, _ => PaletteRibbonColorStyle.RibbonGroupCollapsedFrameBack }; + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: switch (state) { @@ -4038,9 +4083,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4053,9 +4100,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: return PaletteRibbonColorStyle.RibbonGroupNormalTitle; case PaletteRibbonBackStyle.RibbonGroupArea: @@ -4063,19 +4112,25 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorderContext; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabTracking2007; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4098,12 +4153,15 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4165,9 +4223,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4188,9 +4248,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4204,9 +4266,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4219,9 +4283,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4234,13 +4300,15 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaBorder - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4259,16 +4327,19 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4315,9 +4386,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4338,9 +4411,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4354,9 +4429,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4369,9 +4446,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4384,13 +4463,15 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaInside - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4409,22 +4490,25 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _focusTabFill; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4465,13 +4549,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -4483,13 +4569,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonQATOverflow: @@ -4498,7 +4586,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4511,11 +4599,13 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4533,16 +4623,19 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4579,13 +4672,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -4597,13 +4692,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonAppMenuOuter: @@ -4614,7 +4711,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4627,11 +4724,13 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4649,16 +4748,19 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4688,7 +4790,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] @@ -4706,11 +4808,13 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4730,16 +4834,19 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4780,6 +4887,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4799,7 +4907,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4811,12 +4919,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4834,7 +4943,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4851,11 +4960,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4873,7 +4983,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4891,12 +5001,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4917,21 +5028,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4940,11 +5051,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4965,21 +5077,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4988,11 +5100,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5091,7 +5204,7 @@ public KryptonColorTable2007BlueDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -5634,15 +5747,10 @@ public KryptonColorTable2007BlueDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueLightMode.cs index 80193f2bc..db07b8fdc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007BlueLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,11 +21,11 @@ public class PaletteOffice2007BlueLightMode : PaletteOffice2007BlueLightModeBase #region Static Fields private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #region Images - private static readonly Image _blueDropDownButton = GenericImageResources.BlueDropDownButton; + private static readonly Image? _blueDropDownButton = GenericImageResources.BlueDropDownButton; private static readonly Image _blueCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseNormal; private static readonly Image _blueCloseActive = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseActive; private static readonly Image _blueCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseDisabled; @@ -46,235 +46,247 @@ public class PaletteOffice2007BlueLightMode : PaletteOffice2007BlueLightModeBase private static readonly Image _blueHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _blueHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _blueHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; - private static readonly Image _contextMenuSubMenu = GenericImageResources.BlueContextMenuSub; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.BlueContextMenuSub; #endregion #region Colour Arrays - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks - Color.FromArgb(116, 150, 194), // Top track - Color.FromArgb(152, 190, 241), // Bottom track - Color.FromArgb(142, 180, 231), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(63, 101, 152) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 21, 66, 139), // TextLabelControl - Color.FromArgb( 21, 66, 139), // TextButtonNormal - Color.Blue, // TextButtonChecked - Color.FromArgb(161, 189, 207), // ButtonNormalBorder - Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder - Color.FromArgb(230, 239, 249), // ButtonNormalBack1 - Color.FromArgb(209, 226, 244), // ButtonNormalBack2 - Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 - Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 - Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 - Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 - Color.FromArgb(230, 239, 249), // PanelClient - Color.FromArgb(209, 226, 244), // PanelAlternative - Color.FromArgb(101, 147, 207), // ControlBorder - Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 - Color.FromArgb(230, 239, 249), // HeaderPrimaryBack1 - Color.FromArgb(209, 226, 244), // HeaderPrimaryBack2 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 - Color.FromArgb( 21, 66, 139), // HeaderText - Color.FromArgb( 21, 66, 139), // StatusStripText - Color.FromArgb(121, 153, 194), // ButtonBorder - Color.FromArgb(255, 255, 255), // SeparatorLight - Color.FromArgb(154, 198, 255), // SeparatorDark - Color.FromArgb(248, 248, 248), // GripLight - Color.FromArgb(114, 152, 204), // GripDark - Color.FromArgb(209, 226, 244), // ToolStripBack - Color.FromArgb(230, 239, 249), // StatusStripLight - Color.FromArgb(209, 226, 244), // StatusStripDark - Color.FromArgb(209, 226, 244), // ImageMargin - Color.FromArgb(230, 239, 249), // ToolStripBegin - Color.FromArgb(168, 200, 234), // ToolStripMiddle - Color.FromArgb(147, 187, 229), // ToolStripEnd - Color.FromArgb(167, 204, 251), // OverflowBegin - Color.FromArgb(167, 204, 251), // OverflowMiddle - Color.FromArgb(101, 147, 207), // OverflowEnd - Color.FromArgb(111, 157, 217), // ToolStripBorder - Color.FromArgb(230, 239, 249), // FormBorderActive - Color.FromArgb(209, 226, 244), // FormBorderInactive - Color.FromArgb(230, 239, 249), // FormBorderActiveLight - Color.FromArgb(209, 226, 244), // FormBorderActiveDark - Color.FromArgb(204, 216, 232), // FormBorderInactiveLight - Color.FromArgb(212, 222, 236), // FormBorderInactiveDark - Color.FromArgb(230, 239, 249), // FormBorderHeaderActive - Color.FromArgb(209, 226, 244), // FormBorderHeaderInactive - Color.FromArgb(230, 239, 249), // FormBorderHeaderActive1 - Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 - Color.FromArgb(209, 226, 244), // FormBorderHeaderInctive1 - Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 - Color.FromArgb( 62, 106, 184), // FormHeaderShortActive - Color.FromArgb(160, 160, 160), // FormHeaderShortInactive - Color.FromArgb(105, 112, 121), // FormHeaderLongActive - Color.FromArgb(160, 160, 160), // FormHeaderLongInactive - Color.FromArgb(158, 193, 241), // FormButtonBorderTrack - Color.FromArgb(210, 228, 254), // FormButtonBack1Track - Color.FromArgb(255, 255, 255), // FormButtonBack2Track - Color.FromArgb(162, 191, 227), // FormButtonBorderPressed - Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed - Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed - Color.FromArgb( 21, 66, 139), // TextButtonFormNormal - Color.FromArgb( 21, 66, 139), // TextButtonFormTracking - Color.FromArgb( 21, 66, 139), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 21, 66, 139), // TextLabelPanel - Color.FromArgb( 21, 66, 139), // RibbonTabTextNormal - Color.FromArgb( 21, 66, 139), // RibbonTabTextChecked - Color.FromArgb(145, 180, 228), // RibbonTabSelected1 - Color.FromArgb(209, 251, 255), // RibbonTabSelected2 - Color.FromArgb(246, 250, 255), // RibbonTabSelected3 - Color.FromArgb(239, 246, 254), // RibbonTabSelected4 - Color.FromArgb(222, 232, 245), // RibbonTabSelected5 - Color.FromArgb(153, 187, 232), // RibbonTabTracking1 - Color.FromArgb(255, 180, 86), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 - Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 - Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor - Color.FromArgb(141, 178, 227), // RibbonGroupsArea1 - Color.FromArgb(192, 249, 255), // RibbonGroupsArea2 - Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 - Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 - Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 - Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 - Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 - Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 - Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 - Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 - Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 - Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark - Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight - Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 - Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 - Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark - Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight - Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 - Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 - Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 - Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 - Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 - Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 - Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 - Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 - Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 - Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 - Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 - Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 - Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 - Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 - Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 - Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 - Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 - Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 - Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 - Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 - Color.FromArgb( 21, 66, 139), // RibbonGroupCollapsedText - Color.FromArgb(118, 153, 200), // AlternatePressedBack1 - Color.FromArgb(184, 215, 253), // AlternatePressedBack2 - Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 - Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 - Color.FromArgb(150, 194, 239), // FormButtonBack1Checked - Color.FromArgb(210, 228, 254), // FormButtonBack2Checked - Color.FromArgb(158, 193, 241), // FormButtonBorderCheck - Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack - Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack - Color.FromArgb(154, 179, 213), // RibbonQATMini1 - Color.FromArgb(219, 231, 247), // RibbonQATMini2 - Color.FromArgb(195, 213, 236), // RibbonQATMini3 - Color.FromArgb(128, Color.White), // RibbonQATMini4 - Color.FromArgb(72, Color.White), // RibbonQATMini5 - Color.FromArgb(153, 176, 206), // RibbonQATMini1I - Color.FromArgb(226, 233, 241), // RibbonQATMini2I - Color.FromArgb(198, 210, 226), // RibbonQATMini3I - Color.FromArgb(128, Color.White), // RibbonQATMini4I - Color.FromArgb(72, Color.White), // RibbonQATMini5I - Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 - Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 - Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 - Color.FromArgb( 86, 125, 177), // RibbonQATButtonDark - Color.FromArgb(234, 242, 249), // RibbonQATButtonLight - Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 - Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark - Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 - Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor - Color.FromArgb(230, 239, 249), // GridListNormal1 - Color.FromArgb(209, 226, 244), // GridListNormal2 - Color.FromArgb(209, 226, 244), // GridListPressed1 - Color.FromArgb(252, 253, 255), // GridListPressed2 - Color.FromArgb(168, 200, 234), // GridListSelected - Color.FromArgb(230, 239, 249), // GridSheetColNormal1 - Color.FromArgb(209, 226, 244), // GridSheetColNormal2 - Color.FromArgb(223, 226, 228), // GridSheetColPressed1 - Color.FromArgb(188, 197, 210), // GridSheetColPressed2 - Color.FromArgb(188, 213, 239), // GridSheetColSelected1 - Color.FromArgb(168, 200, 234), // GridSheetColSelected2 - Color.FromArgb(228, 236, 247), // GridSheetRowNormal - Color.FromArgb(187, 196, 209), // GridSheetRowPressed - Color.FromArgb(255, 213, 141), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(188, 213, 239), // GridDataCellSelected - Color.Blue, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(171, 193, 222), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(230, 239, 249), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(234, 242, 251), // InputControlBackInactive - Color.FromArgb( 188, 213, 239), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(209, 226, 244), // ContextMenuHeadingBack - Color.FromArgb(0, 21, 110), // ContextMenuHeadingText - Color.FromArgb(209, 226, 244), // ContextMenuImageColumn - Color.FromArgb(230, 239, 249), // AppButtonBack1 - Color.FromArgb(209, 226, 244), // AppButtonBack2 - Color.FromArgb(155, 175, 202), // AppButtonBorder - Color.FromArgb(189, 211, 238), // AppButtonOuter1 - Color.FromArgb(176, 201, 234), // AppButtonOuter2 - Color.FromArgb(207, 224, 245), // AppButtonOuter3 - Color.White, // AppButtonInner1 - Color.FromArgb(155, 175, 202), // AppButtonInner2 - Color.FromArgb(209, 226, 244), // AppButtonMenuDocs - Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText - Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 - Color.FromArgb(185, 208, 237), // RibbonGalleryBorder - Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal - Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking - Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 - Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty // RibbonDropArrowDark - }; + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks + Color.FromArgb(116, 150, 194), // Top track + Color.FromArgb(152, 190, 241), // Bottom track + Color.FromArgb(142, 180, 231), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(63, 101, 152) // Border (normal) position + ]; + + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb(21, 66, 139), // TextLabelControl + Color.FromArgb(21, 66, 139), // TextButtonNormal + Color.Blue, // TextButtonChecked + Color.FromArgb(161, 189, 207), // ButtonNormalBorder + Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder + Color.FromArgb(230, 239, 249), // ButtonNormalBack1 + Color.FromArgb(209, 226, 244), // ButtonNormalBack2 + Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 + Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 + Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 + Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 + Color.FromArgb(230, 239, 249), // PanelClient + Color.FromArgb(209, 226, 244), // PanelAlternative + Color.FromArgb(101, 147, 207), // ControlBorder + Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 + Color.FromArgb(230, 239, 249), // HeaderPrimaryBack1 + Color.FromArgb(209, 226, 244), // HeaderPrimaryBack2 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 + Color.FromArgb(21, 66, 139), // HeaderText + Color.FromArgb(21, 66, 139), // StatusStripText + Color.FromArgb(121, 153, 194), // ButtonBorder + Color.FromArgb(255, 255, 255), // SeparatorLight + Color.FromArgb(154, 198, 255), // SeparatorDark + Color.FromArgb(248, 248, 248), // GripLight + Color.FromArgb(114, 152, 204), // GripDark + Color.FromArgb(209, 226, 244), // ToolStripBack + Color.FromArgb(230, 239, 249), // StatusStripLight + Color.FromArgb(209, 226, 244), // StatusStripDark + Color.FromArgb(209, 226, 244), // ImageMargin + Color.FromArgb(230, 239, 249), // ToolStripBegin + Color.FromArgb(168, 200, 234), // ToolStripMiddle + Color.FromArgb(147, 187, 229), // ToolStripEnd + Color.FromArgb(167, 204, 251), // OverflowBegin + Color.FromArgb(167, 204, 251), // OverflowMiddle + Color.FromArgb(101, 147, 207), // OverflowEnd + Color.FromArgb(111, 157, 217), // ToolStripBorder + Color.FromArgb(230, 239, 249), // FormBorderActive + Color.FromArgb(209, 226, 244), // FormBorderInactive + Color.FromArgb(230, 239, 249), // FormBorderActiveLight + Color.FromArgb(209, 226, 244), // FormBorderActiveDark + Color.FromArgb(204, 216, 232), // FormBorderInactiveLight + Color.FromArgb(212, 222, 236), // FormBorderInactiveDark + Color.FromArgb(230, 239, 249), // FormBorderHeaderActive + Color.FromArgb(209, 226, 244), // FormBorderHeaderInactive + Color.FromArgb(230, 239, 249), // FormBorderHeaderActive1 + Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 + Color.FromArgb(209, 226, 244), // FormBorderHeaderInctive1 + Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 + Color.FromArgb(62, 106, 184), // FormHeaderShortActive + Color.FromArgb(160, 160, 160), // FormHeaderShortInactive + Color.FromArgb(105, 112, 121), // FormHeaderLongActive + Color.FromArgb(160, 160, 160), // FormHeaderLongInactive + Color.FromArgb(158, 193, 241), // FormButtonBorderTrack + Color.FromArgb(210, 228, 254), // FormButtonBack1Track + Color.FromArgb(255, 255, 255), // FormButtonBack2Track + Color.FromArgb(162, 191, 227), // FormButtonBorderPressed + Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed + Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed + Color.FromArgb(21, 66, 139), // TextButtonFormNormal + Color.FromArgb(21, 66, 139), // TextButtonFormTracking + Color.FromArgb(21, 66, 139), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb(21, 66, 139), // TextLabelPanel + Color.FromArgb(21, 66, 139), // RibbonTabTextNormal + Color.FromArgb(21, 66, 139), // RibbonTabTextChecked + Color.FromArgb(145, 180, 228), // RibbonTabSelected1 + Color.FromArgb(209, 251, 255), // RibbonTabSelected2 + Color.FromArgb(246, 250, 255), // RibbonTabSelected3 + Color.FromArgb(239, 246, 254), // RibbonTabSelected4 + Color.FromArgb(222, 232, 245), // RibbonTabSelected5 + Color.FromArgb(153, 187, 232), // RibbonTabTracking1 + Color.FromArgb(255, 180, 86), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 + Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor + Color.FromArgb(219, 230, 244), // RibbonGroupsArea1 + Color.FromArgb(231, 242, 255), // RibbonGroupsArea2 + Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 + Color.FromArgb(192, 249, 255), // RibbonGroupsArea4 + Color.FromArgb(141, 178, 227), // RibbonGroupsArea5 + Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 + Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 + Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 + Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 + Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 + Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 + Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark + Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight + Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 + Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 + Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark + Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight + Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 + Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 + Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 + Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 + Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 + Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 + Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 + Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 + Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 + Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 + Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 + Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 + Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 + Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 + Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 + Color.FromArgb(21, 66, 139), // RibbonGroupCollapsedText + Color.FromArgb(118, 153, 200), // AlternatePressedBack1 + Color.FromArgb(184, 215, 253), // AlternatePressedBack2 + Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 + Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 + Color.FromArgb(150, 194, 239), // FormButtonBack1Checked + Color.FromArgb(210, 228, 254), // FormButtonBack2Checked + Color.FromArgb(158, 193, 241), // FormButtonBorderCheck + Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack + Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack + Color.FromArgb(154, 179, 213), // RibbonQATMini1 + Color.FromArgb(219, 231, 247), // RibbonQATMini2 + Color.FromArgb(195, 213, 236), // RibbonQATMini3 + Color.FromArgb(128, Color.White), // RibbonQATMini4 + Color.FromArgb(72, Color.White), // RibbonQATMini5 + Color.FromArgb(153, 176, 206), // RibbonQATMini1I + Color.FromArgb(226, 233, 241), // RibbonQATMini2I + Color.FromArgb(198, 210, 226), // RibbonQATMini3I + Color.FromArgb(128, Color.White), // RibbonQATMini4I + Color.FromArgb(72, Color.White), // RibbonQATMini5I + Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 + Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 + Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 + Color.FromArgb(86, 125, 177), // RibbonQATButtonDark + Color.FromArgb(234, 242, 249), // RibbonQATButtonLight + Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 + Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 + Color.FromArgb(140, 172, + 211), // RibbonGroupSeparatorDark + Color.FromArgb(248, 250, + 252), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, + 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, + 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, + 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, + 191), // ButtonClusterButtonBorder2 + Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor + Color.FromArgb(230, 239, 249), // GridListNormal1 + Color.FromArgb(209, 226, 244), // GridListNormal2 + Color.FromArgb(209, 226, 244), // GridListPressed1 + Color.FromArgb(252, 253, 255), // GridListPressed2 + Color.FromArgb(168, 200, 234), // GridListSelected + Color.FromArgb(230, 239, 249), // GridSheetColNormal1 + Color.FromArgb(209, 226, 244), // GridSheetColNormal2 + Color.FromArgb(223, 226, 228), // GridSheetColPressed1 + Color.FromArgb(188, 197, 210), // GridSheetColPressed2 + Color.FromArgb(188, 213, 239), // GridSheetColSelected1 + Color.FromArgb(168, 200, 234), // GridSheetColSelected2 + Color.FromArgb(228, 236, 247), // GridSheetRowNormal + Color.FromArgb(187, 196, 209), // GridSheetRowPressed + Color.FromArgb(255, 213, 141), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(188, 213, 239), // GridDataCellSelected + Color.Blue, // InputControlTextNormal + Color.FromArgb(77, 77, 77), // InputControlTextDisabled + Color.FromArgb(171, 193, 222), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(230, 239, 249), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(234, 242, 251), // InputControlBackInactive + Color.FromArgb(188, 213, 239), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(77, 77, 77), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(209, 226, 244), // ContextMenuHeadingBack + Color.FromArgb(0, 21, 110), // ContextMenuHeadingText + Color.FromArgb(209, 226, 244), // ContextMenuImageColumn + Color.FromArgb(230, 239, 249), // AppButtonBack1 + Color.FromArgb(209, 226, 244), // AppButtonBack2 + Color.FromArgb(155, 175, 202), // AppButtonBorder + Color.FromArgb(189, 211, 238), // AppButtonOuter1 + Color.FromArgb(176, 201, 234), // AppButtonOuter2 + Color.FromArgb(207, 224, 245), // AppButtonOuter3 + Color.White, // AppButtonInner1 + Color.FromArgb(155, 175, 202), // AppButtonInner2 + Color.FromArgb(209, 226, 244), // AppButtonMenuDocs + Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText + Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 + Color.FromArgb(185, 208, 237), // RibbonGalleryBorder + Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal + Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking + Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 + Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR // RibbonDropArrowDark + ]; #endregion + #endregion #region Identity @@ -293,8 +305,8 @@ static PaletteOffice2007BlueLightMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GalleryBlue); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007BlueN, Office2007RadioButtonImageResources.RadioButton2007BlueT, @@ -303,7 +315,7 @@ static PaletteOffice2007BlueLightMode() Office2007RadioButtonImageResources.RadioButton2007BlueNC, Office2007RadioButtonImageResources.RadioButton2007BlueTC, Office2007RadioButtonImageResources.RadioButton2007BluePC - }; + ]; } /// @@ -427,6 +439,40 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac return base.GetRibbonBackColorStyle(style, state); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } #endregion @@ -484,7 +530,7 @@ public abstract class PaletteOffice2007BlueLightModeBase : PaletteBase private static readonly Image? _treePlus = TreeItemImageResources.TreePlusBox; private static readonly Image? _treeMinus = TreeItemImageResources.TreeMinusBox; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -503,8 +549,8 @@ public abstract class PaletteOffice2007BlueLightModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericMDIImageResources.MdiRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericMDIImageResources.MdiRibbonExpand; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -545,8 +591,8 @@ public abstract class PaletteOffice2007BlueLightModeBase : PaletteBase private static readonly Color _gridTextColor = Color.Black; private static readonly Color _colorWhite192 = Color.FromArgb(192, 192, 192); private static readonly Color _lightGray = Color.FromArgb(242, 242, 242); - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(77, 77, 77); + private static readonly Color _disabledText = Color.FromArgb(115, 115, 115); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBack2 = Color.FromArgb(240, 240, 240); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); @@ -576,22 +622,33 @@ public abstract class PaletteOffice2007BlueLightModeBase : PaletteBase #region Colour Arrays - private static readonly Color[] _ribbonGroupCollapsedBackContext = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContext = { Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) }; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) }; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(212, 212, 212), // Button, Disabled, Border + private static readonly Color[] _ribbonGroupCollapsedBackContext = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContext = [Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = [Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) + ]; + private static readonly Color[] _appButtonNormal = [Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) + ]; + private static readonly Color[] _appButtonTrack = [Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) + ]; + private static readonly Color[] _appButtonPressed = [Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) + ]; + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(168, 200, 234), // Button, Tracking, Border 1 Color.FromArgb(170, 210, 245), // Button, Tracking, Border 2 Color.FromArgb(155, 205, 230), // Button, Pressed, Border 1 Color.FromArgb(150, 200, 225), // Button, Pressed, Border 2 Color.FromArgb(148, 197, 220), // Button, Checked, Border 1 Color.FromArgb(160, 205, 240) // Button, Checked, Border 2 - }; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + ]; + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(188, 213, 239), // Button, Tracking, Back 1 Color.FromArgb(168, 200, 234), // Button, Tracking, Back 2 @@ -601,19 +658,19 @@ public abstract class PaletteOffice2007BlueLightModeBase : PaletteBase Color.FromArgb(188, 213, 239), // Button, Checked, Back 2 Color.FromArgb(209, 226, 244), // Button, Checked Tracking, Back 1 Color.FromArgb(210, 226, 244) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2007BlueLightMode _table; + private KryptonColorTable2007BlueLightMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -628,7 +685,7 @@ public abstract class PaletteOffice2007BlueLightModeBase : PaletteBase protected PaletteOffice2007BlueLightModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -637,6 +694,8 @@ protected PaletteOffice2007BlueLightModeBase([DisallowNull] Color[] schemeColors Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2007BlueLightModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -663,15 +722,6 @@ protected PaletteOffice2007BlueLightModeBase([DisallowNull] Color[] schemeColors } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -847,7 +897,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -902,16 +952,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -936,7 +986,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -944,7 +994,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1088,18 +1138,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1135,13 +1185,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] -: _buttonBackColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] + : _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1157,7 +1207,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1211,11 +1261,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1224,7 +1274,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[3], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1232,7 +1282,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1372,18 +1422,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1417,19 +1467,19 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) }, PaletteState.NormalDefaultOverride => style switch { - PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => Color.Empty, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2] }, PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] -: _buttonBackColors[5], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] + : _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1521,14 +1571,14 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Disabled or PaletteState.Normal or PaletteState.CheckedNormal => PaletteColorStyle.GlassNormalFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassCenter, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassBottom, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonGallery => state switch { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => PaletteColorStyle.GlassSimpleFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassTrackingFull, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate => state switch { @@ -1537,7 +1587,7 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedStump, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedStump, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingStump, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile @@ -1556,7 +1606,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedFull, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonInputControl => state switch @@ -1566,7 +1616,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonNavigatorMini => state switch { @@ -2286,17 +2336,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2304,21 +2354,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -2332,21 +2382,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2354,24 +2404,24 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] -: _buttonBorderColors[3], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] + : _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2382,7 +2432,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2408,17 +2458,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2426,22 +2476,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -2454,21 +2504,21 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2476,22 +2526,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[6], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] -: _buttonBorderColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] + : _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2502,7 +2552,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2629,7 +2679,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2737,7 +2787,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2834,12 +2884,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2856,12 +2906,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2878,12 +2928,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2895,7 +2945,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2932,7 +2982,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -3119,7 +3169,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -3129,9 +3179,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -3208,7 +3258,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3411,7 +3461,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -3441,7 +3491,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3620,7 +3670,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3694,7 +3744,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3996,6 +4046,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4021,6 +4072,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4081,6 +4133,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4309,7 +4362,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -4334,7 +4387,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -4432,7 +4485,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4493,6 +4546,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac PaletteState.ContextNormal or PaletteState.ContextTracking => PaletteRibbonColorStyle.RibbonGroupGradientOne, _ => PaletteRibbonColorStyle.RibbonGroupCollapsedFrameBack }; + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: switch (state) { @@ -4505,9 +4559,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4520,9 +4576,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: return PaletteRibbonColorStyle.RibbonGroupNormalTitle; case PaletteRibbonBackStyle.RibbonGroupArea: @@ -4530,19 +4588,25 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorderContext; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabTracking2007; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4565,12 +4629,15 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4632,9 +4699,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4655,9 +4724,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4671,9 +4742,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4686,9 +4759,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4701,13 +4776,15 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaBorder - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4726,16 +4803,19 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4782,9 +4862,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4805,9 +4887,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4821,9 +4905,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4836,9 +4922,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4851,13 +4939,15 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaInside - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4876,22 +4966,25 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _focusTabFill; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4932,13 +5025,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -4950,13 +5045,15 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonQATOverflow: @@ -4965,7 +5062,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4978,11 +5075,13 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5000,16 +5099,19 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5046,13 +5148,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -5064,13 +5168,15 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonAppMenuInner: case PaletteRibbonBackStyle.RibbonAppMenuOuter: @@ -5081,7 +5187,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -5094,11 +5200,13 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5116,16 +5224,19 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5155,7 +5266,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] @@ -5173,11 +5284,13 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5197,16 +5310,19 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5247,6 +5363,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5266,7 +5383,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5278,12 +5395,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5301,7 +5419,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5318,11 +5436,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5340,7 +5459,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5358,12 +5477,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5384,21 +5504,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5407,11 +5527,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5432,21 +5553,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5455,11 +5576,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5558,7 +5680,7 @@ public KryptonColorTable2007BlueLightMode([DisallowNull] Color[] colours, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -6101,15 +6223,10 @@ public KryptonColorTable2007BlueLightMode([DisallowNull] Color[] colours, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverDarkMode.cs index 584447a87..50d75a8e4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,13 +29,13 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _silverDropDownButton = GenericImageResources.SilverDropDownButton; + private static readonly Image? _silverDropDownButton = GenericImageResources.SilverDropDownButton; private static readonly Image _silverCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseNormal; private static readonly Image _silverCloseActive = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseActive; private static readonly Image _silverCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseDisabled; @@ -56,22 +56,24 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa private static readonly Image _silverHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _silverHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _silverHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; - private static readonly Image _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; #endregion #region Colour Arrays - private static readonly Color[] _trackBarColors = { Color.FromArgb(130, 130, 130), // Tick marks - Color.FromArgb(156, 160, 165), // Top track - Color.FromArgb(226, 220, 235), // Bottom track - Color.FromArgb(196, 190, 205), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(80, 81, 82) // Border (normal) position - }; + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(130, 130, 130), // Tick marks + Color.FromArgb(156, 160, 165), // Top track + Color.FromArgb(226, 220, 235), // Bottom track + Color.FromArgb(196, 190, 205), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(80, 81, 82) // Border (normal) position + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(24, 24, 24), // TextLabelControl Color.FromArgb(24, 24, 24), // TextButtonNormal Color.FromArgb(24, 24, 24), // TextButtonChecked @@ -122,10 +124,10 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa Color.FromArgb(83, 99, 136), // FormBorderHeaderActive2 Color.FromArgb(119, 132, 161), // FormBorderHeaderInctive1 Color.FromArgb(83, 99, 136), // FormBorderHeaderInctive2 - Color.FromArgb(24, 24, 24), // FormHeaderShortActive + Color.FromArgb(255, 255, 255), // FormHeaderShortActive Color.FromArgb(138, 138, 138), // FormHeaderShortInactive Color.FromArgb(92, 98, 106), // FormHeaderLongActive - Color.FromArgb(138, 138, 138), // FormHeaderLongInactive + Color.FromArgb(255, 255, 255), // FormHeaderLongInactive Color.FromArgb(189, 199, 212), // FormButtonBorderTrack Color.FromArgb(222, 230, 242), // FormButtonBack1Track Color.FromArgb(255, 255, 255), // FormButtonBack2Track @@ -157,18 +159,18 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 Color.FromArgb(175, 176, 179), // RibbonTabSeparatorColor - Color.FromArgb(190, 190, 190), // RibbonGroupsArea1 - Color.FromArgb(210, 210, 210), // RibbonGroupsArea2 + Color.FromArgb(243, 245, 249), // RibbonGroupsArea1 + Color.FromArgb(249, 249, 249), // RibbonGroupsArea2 Color.FromArgb(213, 219, 231), // RibbonGroupsArea3 - Color.FromArgb(249, 249, 249), // RibbonGroupsArea4 - Color.FromArgb(243, 245, 249), // RibbonGroupsArea5 + Color.FromArgb(210, 210, 210), // RibbonGroupsArea4 + Color.FromArgb(190, 190, 190), // RibbonGroupsArea5 Color.FromArgb(189, 191, 193), // RibbonGroupBorder1 Color.FromArgb(133, 133, 133), // RibbonGroupBorder2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitle1 + Color.FromArgb(40, 40, 40), // RibbonGroupTitle1 Color.FromArgb(195, 199, 209), // RibbonGroupTitle2 Color.FromArgb(183, 183, 183), // RibbonGroupBorderContext1 Color.FromArgb(131, 131, 131), // RibbonGroupBorderContext2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitleContext1 + Color.FromArgb(40, 40, 40), // RibbonGroupTitleContext1 Color.FromArgb(195, 199, 209), // RibbonGroupTitleContext2 Color.FromArgb(101, 104, 112), // RibbonGroupDialogDark Color.FromArgb(242, 242, 242), // RibbonGroupDialogLight @@ -225,18 +227,12 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa Color.FromArgb(225, 225, 225), // RibbonQATButtonLight Color.FromArgb(219, 218, 228), // RibbonQATOverflow1 Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(173, 177, - 181), // RibbonGroupSeparatorDark - Color.FromArgb(232, 235, - 237), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, - 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, - 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, - 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, - 159), // ButtonClusterButtonBorder2 + Color.FromArgb(173, 177, 181), // RibbonGroupSeparatorDark + Color.FromArgb(232, 235, 237), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor Color.FromArgb(119, 132, 161), // GridListNormal1 Color.FromArgb(83, 99, 136), // GridListNormal2 @@ -255,7 +251,7 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(194, 217, 240), // GridDataCellSelected Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(51, 51, 51), // InputControlTextDisabled Color.FromArgb(169, 177, 184), // InputControlBorderNormal Color.FromArgb(177, 187, 198), // InputControlBorderDisabled Color.FromArgb(119, 132, 161), // InputControlBackNormal @@ -263,7 +259,7 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa Color.FromArgb(232, 234, 236), // InputControlBackInactive Color.FromArgb(124, 124, 124), // InputDropDownNormal1 Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.FromArgb(51, 51, 51), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 Color.FromArgb(24, 24, 24), // ContextMenuHeading Color.FromArgb(76, 83, 92), // ContextMenuHeadingText @@ -285,13 +281,13 @@ public class PaletteOffice2007SilverDarkMode : PaletteOffice2007SilverDarkModeBa Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty // RibbonDropArrowDark - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR // RibbonDropArrowDark + ]; #endregion @@ -313,8 +309,8 @@ static PaletteOffice2007SilverDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GallerySilverBlack); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007SilverN, Office2007RadioButtonImageResources.RadioButton2007SilverT, @@ -323,7 +319,7 @@ static PaletteOffice2007SilverDarkMode() Office2007RadioButtonImageResources.RadioButton2007SilverNC, Office2007RadioButtonImageResources.RadioButton2007SilverTC, Office2007RadioButtonImageResources.RadioButton2007SilverPC - }; + ]; } /// @@ -416,6 +412,40 @@ public PaletteOffice2007SilverDarkMode() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } #endregion @@ -473,7 +503,7 @@ public abstract class PaletteOffice2007SilverDarkModeBase : PaletteBase private static readonly Image? _treePlus = TreeItemImageResources.TreePlusBox; private static readonly Image? _treeMinus = TreeItemImageResources.TreeMinusBox; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -492,8 +522,8 @@ public abstract class PaletteOffice2007SilverDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericMDIImageResources.MdiRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericMDIImageResources.MdiRibbonExpand; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -534,8 +564,8 @@ public abstract class PaletteOffice2007SilverDarkModeBase : PaletteBase private static readonly Color _gridTextColor = Color.Black; private static readonly Color _colorWhite192 = Color.FromArgb(192, 192, 192); private static readonly Color _lightGray = Color.FromArgb(242, 242, 242); - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(51, 51, 51); + private static readonly Color _disabledText = Color.FromArgb(89, 89, 89); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBack2 = Color.FromArgb(240, 240, 240); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); @@ -565,44 +595,55 @@ public abstract class PaletteOffice2007SilverDarkModeBase : PaletteBase #region Colour Arrays - private static readonly Color[] _ribbonGroupCollapsedBackContext = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContext = { Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) }; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) }; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(212, 212, 212), // Button, Disabled, Border - Color.FromArgb(163, 179, 220), // Button, Tracking, Border 1 - Color.FromArgb(128, 141, 173), // Button, Tracking, Border 2 - Color.FromArgb(90, 99, 122), // Button, Pressed, Border 1 - Color.FromArgb(118, 130, 160), // Button, Pressed, Border 2 - Color.FromArgb(136, 150, 185), // Button, Checked, Border 1 - Color.FromArgb(174, 192, 236) // Button, Checked, Border 2 - }; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 - Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 - Color.FromArgb(54,64,88), // Button, Tracking, Back 1 - Color.FromArgb(106,123,164), // Button, Tracking, Back 2 - Color.FromArgb(95, 107, 137), // Button, Pressed, Back 1 - Color.FromArgb(54,64,88), // Button, Pressed, Back 2 - Color.FromArgb(54,64,88), // Button, Checked, Back 1 - Color.FromArgb(122, 137, 174), // Button, Checked, Back 2 - Color.FromArgb(119, 134, 172), // Button, Checked Tracking, Back 1 - Color.FromArgb(135, 148, 182) // Button, Checked Tracking, Back 2 - }; + private static readonly Color[] _ribbonGroupCollapsedBackContext = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContext = [Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = [Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) + ]; + private static readonly Color[] _appButtonNormal = [Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) + ]; + private static readonly Color[] _appButtonTrack = [Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) + ]; + private static readonly Color[] _appButtonPressed = [Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) + ]; + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border + Color.FromArgb(163, 179, 220), // Button, Tracking, Border 1 + Color.FromArgb(128, 141, 173), // Button, Tracking, Border 2 + Color.FromArgb(90, 99, 122), // Button, Pressed, Border 1 + Color.FromArgb(118, 130, 160), // Button, Pressed, Border 2 + Color.FromArgb(136, 150, 185), // Button, Checked, Border 1 + Color.FromArgb(174, 192, 236) // Button, Checked, Border 2 + ]; + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 + Color.FromArgb(142,156,187), // Button, Tracking, Back 1 + Color.FromArgb(106,123,164), // Button, Tracking, Back 2 + Color.FromArgb(95, 107, 137), // Button, Pressed, Back 1 + Color.FromArgb(54,64,88), // Button, Pressed, Back 2 + Color.FromArgb(54,64,88), // Button, Checked, Back 1 + Color.FromArgb(122, 137, 174), // Button, Checked, Back 2 + Color.FromArgb(119, 134, 172), // Button, Checked Tracking, Back 1 + Color.FromArgb(135, 148, 182) // Button, Checked Tracking, Back 2 + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2007SilverDarkMode _table; + private KryptonColorTable2007SilverDarkMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -617,7 +658,7 @@ public abstract class PaletteOffice2007SilverDarkModeBase : PaletteBase protected PaletteOffice2007SilverDarkModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -626,6 +667,8 @@ protected PaletteOffice2007SilverDarkModeBase([DisallowNull] Color[] schemeColor Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2007SilverDarkModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -652,15 +695,6 @@ protected PaletteOffice2007SilverDarkModeBase([DisallowNull] Color[] schemeColor } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -836,7 +870,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -892,16 +926,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -926,7 +960,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -934,7 +968,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1078,18 +1112,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1125,13 +1159,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] -: _buttonBackColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] + : _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1147,7 +1181,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1201,11 +1235,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1214,7 +1248,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[3], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1222,7 +1256,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1362,18 +1396,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1407,19 +1441,19 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) }, PaletteState.NormalDefaultOverride => style switch { - PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => Color.Empty, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2] }, PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] -: _buttonBackColors[5], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] + : _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1511,14 +1545,14 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Disabled or PaletteState.Normal or PaletteState.CheckedNormal => PaletteColorStyle.GlassNormalFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassCenter, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassBottom, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonGallery => state switch { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => PaletteColorStyle.GlassSimpleFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassTrackingFull, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate => state switch { @@ -1527,7 +1561,7 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedStump, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedStump, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingStump, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile @@ -1546,7 +1580,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedFull, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonInputControl => state switch @@ -1556,7 +1590,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonNavigatorMini => state switch { @@ -2276,17 +2310,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2294,21 +2328,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -2322,21 +2356,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2344,24 +2378,24 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] -: _buttonBorderColors[3], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] + : _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2372,7 +2406,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2398,17 +2432,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2416,22 +2450,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -2444,21 +2478,21 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2466,22 +2500,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[6], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] -: _buttonBorderColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] + : _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2492,7 +2526,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2619,7 +2653,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2727,7 +2761,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2824,12 +2858,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2846,12 +2880,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2868,12 +2902,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2885,7 +2919,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2922,7 +2956,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -3109,7 +3143,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -3119,9 +3153,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -3198,7 +3232,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3401,7 +3435,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -3431,7 +3465,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3610,7 +3644,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3684,7 +3718,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3986,6 +4020,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4011,6 +4046,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4071,6 +4107,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4299,7 +4336,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -4324,7 +4361,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -4422,7 +4459,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4483,6 +4520,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac PaletteState.ContextNormal or PaletteState.ContextTracking => PaletteRibbonColorStyle.RibbonGroupGradientOne, _ => PaletteRibbonColorStyle.RibbonGroupCollapsedFrameBack }; + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: switch (state) { @@ -4495,6 +4533,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4510,9 +4549,11 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: return PaletteRibbonColorStyle.RibbonGroupNormalTitle; case PaletteRibbonBackStyle.RibbonGroupArea: @@ -4520,19 +4561,25 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorderContext; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabTracking2007; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4555,12 +4602,15 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4622,9 +4672,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4645,9 +4697,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4661,9 +4715,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4676,9 +4732,11 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4691,13 +4749,15 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaBorder - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4716,16 +4776,19 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4772,9 +4835,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { @@ -4795,9 +4860,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: switch (state) { @@ -4811,9 +4878,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: switch (state) { @@ -4826,6 +4895,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4841,13 +4911,14 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaInside - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4866,22 +4937,24 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _focusTabFill; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4922,13 +4995,14 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -4940,10 +5014,11 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4955,7 +5030,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4968,11 +5043,12 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4990,16 +5066,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5036,13 +5114,14 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -5054,10 +5133,11 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -5071,7 +5151,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -5084,11 +5164,12 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5106,16 +5187,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5145,7 +5228,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] @@ -5163,11 +5246,12 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5187,16 +5271,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5237,6 +5323,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5256,7 +5343,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5268,12 +5355,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5291,7 +5379,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5308,11 +5396,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5330,7 +5419,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5348,12 +5437,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5374,21 +5464,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5397,11 +5487,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5422,21 +5513,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5445,11 +5536,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5548,7 +5640,7 @@ public KryptonColorTable2007SilverDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -6091,15 +6183,10 @@ public KryptonColorTable2007SilverDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverLightMode.cs index 1b4dd13a3..8999d0a42 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Extra Themes/PaletteOffice2007SilverLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,13 +29,13 @@ public class PaletteOffice2007SilverLightMode : PaletteOffice2007SilverLightMode #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _silverDropDownButton = GenericImageResources.SilverDropDownButton; + private static readonly Image? _silverDropDownButton = GenericImageResources.SilverDropDownButton; private static readonly Image _silverCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseNormal; private static readonly Image _silverCloseActive = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseActive; private static readonly Image _silverCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseDisabled; @@ -56,24 +56,24 @@ public class PaletteOffice2007SilverLightMode : PaletteOffice2007SilverLightMode private static readonly Image _silverHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _silverHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _silverHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; - private static readonly Image _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; #endregion #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(130, 130, 130), // Tick marks Color.FromArgb(156, 160, 165), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(196, 190, 205), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(24, 24, 24), // TextLabelControl Color.FromArgb(24, 24, 24), // TextButtonNormal Color.FromArgb(24, 24, 24), // TextButtonChecked @@ -159,11 +159,11 @@ public class PaletteOffice2007SilverLightMode : PaletteOffice2007SilverLightMode Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 Color.FromArgb(175, 176, 179), // RibbonTabSeparatorColor - Color.FromArgb(190, 190, 190), // RibbonGroupsArea1 - Color.FromArgb(210, 210, 210), // RibbonGroupsArea2 + Color.FromArgb(243, 245, 249), // RibbonGroupsArea1 + Color.FromArgb(249, 249, 249), // RibbonGroupsArea2 Color.FromArgb(213, 219, 231), // RibbonGroupsArea3 - Color.FromArgb(249, 249, 249), // RibbonGroupsArea4 - Color.FromArgb(243, 245, 249), // RibbonGroupsArea5 + Color.FromArgb(210, 210, 210), // RibbonGroupsArea4 + Color.FromArgb(190, 190, 190), // RibbonGroupsArea5 Color.FromArgb(189, 191, 193), // RibbonGroupBorder1 Color.FromArgb(133, 133, 133), // RibbonGroupBorder2 Color.FromArgb(223, 227, 239), // RibbonGroupTitle1 @@ -251,7 +251,7 @@ public class PaletteOffice2007SilverLightMode : PaletteOffice2007SilverLightMode Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(194, 217, 240), // GridDataCellSelected Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(77, 77, 77), // InputControlTextDisabled Color.FromArgb(169, 177, 184), // InputControlBorderNormal Color.FromArgb(177, 187, 198), // InputControlBorderDisabled Color.FromArgb(224, 225, 231), // InputControlBackNormal @@ -259,7 +259,7 @@ public class PaletteOffice2007SilverLightMode : PaletteOffice2007SilverLightMode Color.FromArgb(232, 234, 236), // InputControlBackInactive Color.FromArgb(124, 124, 124), // InputDropDownNormal1 Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.FromArgb(77, 77, 77), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 Color.FromArgb(24, 24, 24), // ContextMenuHeading Color.FromArgb(76, 83, 92), // ContextMenuHeadingText @@ -281,13 +281,13 @@ public class PaletteOffice2007SilverLightMode : PaletteOffice2007SilverLightMode Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty // RibbonDropArrowDark - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR // RibbonDropArrowDark + ]; #endregion @@ -309,8 +309,8 @@ static PaletteOffice2007SilverLightMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GallerySilverBlack); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007SilverN, Office2007RadioButtonImageResources.RadioButton2007SilverT, @@ -319,7 +319,7 @@ static PaletteOffice2007SilverLightMode() Office2007RadioButtonImageResources.RadioButton2007SilverNC, Office2007RadioButtonImageResources.RadioButton2007SilverTC, Office2007RadioButtonImageResources.RadioButton2007SilverPC - }; + ]; } /// @@ -412,6 +412,40 @@ public PaletteOffice2007SilverLightMode() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } #endregion @@ -469,7 +503,7 @@ public abstract class PaletteOffice2007SilverLightModeBase : PaletteBase private static readonly Image? _treePlus = TreeItemImageResources.TreePlusBox; private static readonly Image? _treeMinus = TreeItemImageResources.TreeMinusBox; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -488,8 +522,8 @@ public abstract class PaletteOffice2007SilverLightModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericMDIImageResources.MdiRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericMDIImageResources.MdiRibbonExpand; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -530,8 +564,8 @@ public abstract class PaletteOffice2007SilverLightModeBase : PaletteBase private static readonly Color _gridTextColor = Color.Black; private static readonly Color _colorWhite192 = Color.FromArgb(192, 192, 192); private static readonly Color _lightGray = Color.FromArgb(242, 242, 242); - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(77, 77, 77); + private static readonly Color _disabledText = Color.FromArgb(115, 115, 115); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBack2 = Color.FromArgb(240, 240, 240); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); @@ -562,62 +596,62 @@ public abstract class PaletteOffice2007SilverLightModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _ribbonGroupCollapsedBackContext = - { + [ Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = - { + [ Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; private static readonly Color[] _ribbonGroupCollapsedBorderContext = - { + [ Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) - }; + ]; private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = - { + [ Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(192, 207, 220) - }; + ]; private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(232, 234, 244), // Button, Tracking, Border 1 Color.FromArgb(183, 185, 193), // Button, Tracking, Border 2 @@ -625,10 +659,10 @@ public abstract class PaletteOffice2007SilverLightModeBase : PaletteBase Color.FromArgb(146, 148, 155), // Button, Pressed, Border 2 Color.FromArgb(121, 123, 129), // Button, Checked, Border 1 Color.FromArgb(170, 172, 181) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(214, 216, 221), // Button, Tracking, Back 1 @@ -639,19 +673,19 @@ public abstract class PaletteOffice2007SilverLightModeBase : PaletteBase Color.FromArgb(216, 220, 222), // Button, Checked, Back 2 Color.FromArgb(219, 224, 222), // Button, Checked Tracking, Back 1 Color.FromArgb(225, 228, 224) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2007SilverLightMode _table; + private KryptonColorTable2007SilverLightMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -666,7 +700,7 @@ public abstract class PaletteOffice2007SilverLightModeBase : PaletteBase protected PaletteOffice2007SilverLightModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -675,6 +709,8 @@ protected PaletteOffice2007SilverLightModeBase([DisallowNull] Color[] schemeColo Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2007SilverLightModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -702,15 +738,6 @@ protected PaletteOffice2007SilverLightModeBase([DisallowNull] Color[] schemeColo } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -886,7 +913,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -942,16 +969,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -976,7 +1003,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -984,7 +1011,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1128,18 +1155,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1175,13 +1202,13 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[6], PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] -: _buttonBackColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack1] + : _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1197,7 +1224,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1251,11 +1278,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1264,7 +1291,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[3], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1272,7 +1299,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1412,18 +1439,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonAlternate: @@ -1457,19 +1484,19 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) }, PaletteState.NormalDefaultOverride => style switch { - PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => Color.Empty, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2] }, PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] -: _buttonBackColors[5], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBack2] + : _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1561,14 +1588,14 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Disabled or PaletteState.Normal or PaletteState.CheckedNormal => PaletteColorStyle.GlassNormalFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassCenter, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassBottom, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonGallery => state switch { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => PaletteColorStyle.GlassSimpleFull, PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.GlassTrackingFull, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate => state switch { @@ -1577,7 +1604,7 @@ or PaletteBackStyle.HeaderCustom2 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedStump, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedStump, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingStump, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile @@ -1596,7 +1623,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedFull, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedFull, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingFull, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonInputControl => state switch @@ -1606,7 +1633,7 @@ or PaletteBackStyle.ButtonCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonNavigatorMini => state switch { @@ -2322,21 +2349,25 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta { if (style == PaletteBorderStyle.ButtonCalendarDay) { - return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; + return _todayBorder; } } + else if (state == PaletteState.Disabled) + { + return _disabledBorder; + } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2344,21 +2375,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -2372,21 +2403,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2394,24 +2425,24 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder1] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] -: _buttonBorderColors[3], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder1] + : _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2422,7 +2453,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2444,21 +2475,25 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta { if (style == PaletteBorderStyle.ButtonCalendarDay) { - return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; + return _todayBorder; } } + else if (state == PaletteState.Disabled) + { + return _disabledBorder; + } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2466,22 +2501,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -2494,21 +2529,21 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, PaletteBorderStyle.ContextMenuInner => _contextMenuInnerBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => state switch { @@ -2516,22 +2551,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBorder], PaletteState.Tracking or PaletteState.CheckedTracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => _buttonBorderColors[0], PaletteState.Normal => style == PaletteBorderStyle.ButtonCluster - ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] - : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonClusterButtonBorder2] + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[6], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate -? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] -: _buttonBorderColors[4], + ? _ribbonColours[(int)SchemeOfficeColors.AlternatePressedBorder2] + : _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2542,7 +2577,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -2669,7 +2704,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2777,7 +2812,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2874,12 +2909,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2896,12 +2931,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2918,12 +2953,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2935,7 +2970,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2972,7 +3007,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -3159,7 +3194,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -3169,9 +3204,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -3248,7 +3283,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3451,7 +3486,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Palette value should be applicable to this state. /// /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -3481,7 +3516,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3660,7 +3695,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3734,7 +3769,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -4036,6 +4071,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4061,6 +4097,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4121,6 +4158,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4349,7 +4387,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -4374,7 +4412,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -4472,7 +4510,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4545,6 +4583,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4560,6 +4599,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4570,16 +4610,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorderContext; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabTracking2007; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4605,12 +4650,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4672,6 +4719,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4695,6 +4743,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4711,6 +4760,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4726,6 +4776,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4741,13 +4792,14 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaBorder - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4766,16 +4818,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4822,6 +4876,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4845,6 +4900,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4861,6 +4917,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4876,6 +4933,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4891,13 +4949,14 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: return state == PaletteState.ContextCheckedNormal ? _contextGroupAreaInside - : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; + : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4916,22 +4975,24 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _focusTabFill; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4972,13 +5033,14 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -4990,10 +5052,11 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -5005,7 +5068,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -5018,11 +5081,12 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea3]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5040,16 +5104,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5086,13 +5152,14 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, _ => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: @@ -5104,10 +5171,11 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -5121,7 +5189,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -5134,11 +5202,12 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return state == PaletteState.ContextCheckedNormal ? _lightGray : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5156,16 +5225,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5195,7 +5266,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColours[(int)SchemeOfficeColors.RibbonQATMini5] @@ -5213,11 +5284,12 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? Color.White : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -5237,16 +5309,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5287,6 +5361,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -5306,7 +5381,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5318,12 +5393,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5341,7 +5417,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5358,11 +5434,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5380,7 +5457,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -5398,12 +5475,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5424,21 +5502,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5447,11 +5525,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5472,21 +5551,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5495,11 +5574,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5598,7 +5678,7 @@ public KryptonColorTable2007SilverLightMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -6141,15 +6221,10 @@ public KryptonColorTable2007SilverLightMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007DarkGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007DarkGray.cs index 80a3acd91..b474543f6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007DarkGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007DarkGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,13 +25,13 @@ public class PaletteOffice2007DarkGray : PaletteOffice2007Base #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _silverDropDownButton = GenericImageResources.SilverDropDownButton; + private static readonly Image? _silverDropDownButton = GenericImageResources.SilverDropDownButton; private static readonly Image _silverCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseNormal; private static readonly Image _silverCloseActive = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseActive; private static readonly Image _silverCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseDisabled; @@ -52,24 +52,24 @@ public class PaletteOffice2007DarkGray : PaletteOffice2007Base private static readonly Image _silverHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _silverHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; private static readonly Image _silverHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; - private static readonly Image _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; #endregion #region Colour Arrays private static readonly Color[] _trackBarColours = - { + [ Color.FromArgb(130, 130, 130), // Tick marks Color.FromArgb(156, 160, 165), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(196, 190, 205), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColours = - { + [ Color.FromArgb(119, 119, 119), // TextLabelControl Color.FromArgb(255, 255, 255), // TextButtonNormal Color.Black, // TextButtonChecked @@ -277,13 +277,13 @@ public class PaletteOffice2007DarkGray : PaletteOffice2007Base Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty // RibbonDropArrowDark - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR // RibbonDropArrowDark + ]; #endregion @@ -309,8 +309,8 @@ static PaletteOffice2007DarkGray() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GallerySilverBlack); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007SilverN, Office2007RadioButtonImageResources.RadioButton2007SilverT, @@ -319,7 +319,7 @@ static PaletteOffice2007DarkGray() Office2007RadioButtonImageResources.RadioButton2007SilverNC, Office2007RadioButtonImageResources.RadioButton2007SilverTC, Office2007RadioButtonImageResources.RadioButton2007SilverPC - }; + ]; } /// Initializes a new instance of the class. @@ -407,5 +407,38 @@ public PaletteOffice2007DarkGray() : base(_themeName, _schemeOfficeColours, _che }; #endregion + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007LightGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007LightGray.cs index 57260e3c4..9ea89653d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007LightGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007LightGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,10 +16,44 @@ public class PaletteOffice2007LightGray : PaletteOffice2007Base { //private static readonly string _themeName; - public PaletteOffice2007LightGray(string themeName, Color[] schemeColors, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColors) : base(themeName, schemeColors, checkBoxList, galleryButtonList, radioButtonArray, trackBarColors) + public PaletteOffice2007LightGray(string themeName, Color[] schemeColors, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColors) : base(themeName, schemeColors, checkBoxList, galleryButtonList, radioButtonArray, trackBarColors) { } public override Image? GetContextMenuSubMenuImage() => throw new NotImplementedException(); + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007White.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007White.cs index 2a7c76e82..6f3497948 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007White.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Non Official Themes/PaletteOffice2007White.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,10 +15,23 @@ namespace Krypton.Toolkit public class PaletteOffice2007White : PaletteOffice2007Base { #region Static Fields + + #region Image Lists + private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = GenericImageResources.SilverDropDownButton; + + #endregion + + #region Image Array + + private static readonly Image?[] _radioButtonArray; + + #endregion + + #region Images + + private static readonly Image? _silverDropDownButton = GenericImageResources.SilverDropDownButton; private static readonly Image _silverCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseNormal; private static readonly Image _silverCloseActive = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseActive; private static readonly Image _silverCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseDisabled; @@ -39,241 +52,252 @@ public class PaletteOffice2007White : PaletteOffice2007Base private static readonly Image _silverHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _silverHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _silverHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; - private static readonly Image _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; - private static readonly Color[] _trackBarColors = new Color[] { Color.Red, // Tick marks - Color.FromArgb(166, 170, 175), // Top track - Color.FromArgb(226, 220, 235), // Bottom track - Color.FromArgb(206, 200, 215), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(80, 81, 82) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = new Color[] { Color.FromArgb( 59, 59, 59), // TextLabelControl - Color.FromArgb( 59, 59, 59), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(170, 170, 170), // ButtonNormalBorder1 -n - Color.FromArgb(170, 170, 170), // ButtonNormalDefaultBorder -n - Color.FromArgb(253, 253, 253), // ButtonNormalBack1 -n - Color.FromArgb(253, 253, 253), // ButtonNormalBack2 -n - Color.FromArgb(235, 235, 235), // ButtonNormalDefaultBack1 - Color.FromArgb(195, 195, 195), // ButtonNormalDefaultBack2 - Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack1 - Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack2 - Color.White , // PanelClient -n - Color.FromArgb(207, 212, 218), // PanelAlternative - Color.FromArgb(213, 213, 213), // ControlBorder -n - Color.FromArgb(250, 253, 255), // SeparatorHighBorder1 - Color.FromArgb(227, 232, 237), // SeparatorHighBorder2 - Color.FromArgb(255, 255, 255), // HeaderPrimaryBack1 -n - Color.FromArgb(255, 255, 255), // HeaderPrimaryBack2 -n - Color.FromArgb(255, 255, 255), // HeaderSecondaryBack1 - Color.FromArgb(255, 255, 255), // HeaderSecondaryBack2-n - Color.FromArgb( 59, 59, 59), // HeaderText - Color.FromArgb(255, 255, 255), // StatusStripText - Color.FromArgb(236, 199, 87), // ButtonBorder - Color.FromArgb(247, 250, 252), // SeparatorLight - Color.FromArgb(119, 123, 127), // SeparatorDark - Color.FromArgb(191, 191, 191), // GripLight - Color.FromArgb(191, 191, 191), // GripDark - Color.FromArgb(227, 230, 232), // ToolStripBack - Color.FromArgb(0 , 114, 198), // StatusStripLight - Color.FromArgb(0 , 114, 198), // StatusStripDark - Color.White, // ImageMargin - Color.FromArgb( 25, 71, 138), // ToolStripBegin - Color.FromArgb( 25, 71, 138), // ToolStripMiddle - Color.FromArgb( 25, 71, 138), // ToolStripEnd - Color.FromArgb(147, 154, 163), // OverflowBegin - Color.FromArgb(147, 154, 163), // OverflowMiddle - Color.FromArgb(147, 154, 163), // OverflowEnd - Color.FromArgb(147, 154, 163), // ToolStripBorder - Color.FromArgb(0 , 114, 198), // FormBorderActive -n - Color.FromArgb(134, 139, 145), // FormBorderInactive - Color.FromArgb(228, 230, 232), // FormBorderActiveLight - Color.FromArgb(255, 255, 255), // FormBorderActiveDark - Color.FromArgb(248, 247, 247), // FormBorderInactiveLight - Color.FromArgb(248, 247, 247), // FormBorderInactiveDark - Color.FromArgb(101, 109, 117), // FormBorderHeaderActive - Color.FromArgb(134, 139, 145), // FormBorderHeaderInactive - Color.FromArgb(235, 237, 240), // FormBorderHeaderActive1 - Color.FromArgb(228, 230, 232), // FormBorderHeaderActive2 - Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive1 - Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive2 - Color.FromArgb( 59, 59, 59), // FormHeaderShortActive - Color.FromArgb(138, 138, 138), // FormHeaderShortInactive - Color.FromArgb( 59, 59, 59), // FormHeaderLongActive - Color.FromArgb(138, 138, 138), // FormHeaderLongInactive - Color.FromArgb(166, 172, 179), // FormButtonBorderTrack - Color.FromArgb(255, 255, 255), // FormButtonBack1Track - Color.FromArgb(228, 228, 229), // FormButtonBack2Track - Color.FromArgb(166, 172, 179), // FormButtonBorderPressed - Color.FromArgb(223, 228, 235), // FormButtonBack1Pressed - Color.FromArgb(188, 193, 200), // FormButtonBack2Pressed - Color.Black, // TextButtonFormNormal - Color.Black, // TextButtonFormTracking - Color.Black, // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 59, 59, 59), // TextLabelPanel - Color.FromArgb(102, 102, 102), // RibbonTabTextNormal -n - Color.FromArgb( 0, 114, 198), // RibbonTabTextChecked -n - Color.FromArgb(182, 186, 191), // RibbonTabSelected1 - Color.White, // RibbonTabSelected2 - Color.White, // RibbonTabSelected3 - Color.White, // RibbonTabSelected4 - Color.White, // RibbonTabSelected5 - Color.FromArgb(177, 181, 186), // RibbonTabTracking1 - Color.FromArgb(248, 249, 249), // RibbonTabTracking2 - Color.FromArgb(182, 186, 191), // RibbonTabHighlight1 - Color.White, // RibbonTabHighlight2 - Color.White, // RibbonTabHighlight3 - Color.White, // RibbonTabHighlight4 - Color.White, // RibbonTabHighlight5 - Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor - Color.FromArgb(212, 212, 212), // RibbonGroupsArea1 -n - Color.FromArgb(212, 212, 212), // RibbonGroupsArea2 -n - Color.White, // RibbonGroupsArea3 -n - Color.White, // RibbonGroupsArea4 -n - Color.White, // RibbonGroupsArea5 -n - Color.Empty, // RibbonGroupBorder1 -n - Color.Empty, // RibbonGroupBorder2 -n - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 - Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark - Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark - Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 - Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 - Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 - Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 - Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 - Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 - Color.FromArgb( 59, 59, 59), // RibbonGroupCollapsedText - Color.FromArgb(179, 185, 195), // AlternatePressedBack1 - Color.FromArgb(216, 224, 224), // AlternatePressedBack2 - Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 - Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 - Color.FromArgb(157, 166, 174), // FormButtonBack1Checked - Color.FromArgb(222, 230, 242), // FormButtonBack2Checked - Color.FromArgb(149, 154, 160), // FormButtonBorderCheck - Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack - Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack - Color.FromArgb(180, 180, 180), // RibbonQATMini1 - Color.FromArgb(210, 215, 221), // RibbonQATMini2 - Color.FromArgb(195, 200, 206), // RibbonQATMini3 - Color.FromArgb(10, Color.White), // RibbonQATMini4 - Color.FromArgb(32, Color.White), // RibbonQATMini5 - Color.FromArgb(200, 200, 200), // RibbonQATMini1I - Color.FromArgb(233, 234, 238), // RibbonQATMini2I - Color.FromArgb(223, 224, 228), // RibbonQATMini3I - Color.FromArgb(10, Color.White), // RibbonQATMini4I - Color.FromArgb(32, Color.White), // RibbonQATMini5I - Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 - Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 - Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 - Color.FromArgb( 90, 90, 90), // RibbonQATButtonDark - Color.FromArgb(210, 212, 215), // RibbonQATButtonLight - Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 - Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 - Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark - Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 - Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.White, // GridListNormal2 - Color.FromArgb(203, 207, 212), // GridListPressed1 - Color.White, // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(238, 241, 247), // GridSheetColNormal1 - Color.FromArgb(218, 222, 227), // GridSheetColNormal2 - Color.FromArgb(255, 223, 107), // GridSheetColPressed1 - Color.FromArgb(255, 252, 230), // GridSheetColPressed2 - Color.FromArgb(255, 211, 89), // GridSheetColSelected1 - Color.FromArgb(255, 239, 113), // GridSheetColSelected2 - Color.FromArgb(223, 227, 232), // GridSheetRowNormal - Color.FromArgb(255, 223, 107), // GridSheetRowPressed - Color.FromArgb(245, 210, 87), // GridSheetRowSelected - Color.FromArgb(218, 220, 221), // GridDataCellBorder - Color.FromArgb(183, 219, 255), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(168, 168, 168), // InputControlTextDisabled - Color.FromArgb(212, 214, 217), // InputControlBorderNormal - Color.FromArgb(187, 187, 187), // InputControlBorderDisabled - Color.FromArgb(255, 255, 255), // InputControlBackNormal - Color.FromArgb(240, 240, 240), // InputControlBackDisabled - Color.FromArgb(247, 247, 247), // InputControlBackInactive - Color.Black, // InputDropDownNormal1 - Color.Transparent, // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack - Color.FromArgb( 59, 59, 59), // ContextMenuHeadingText - Color.White, // ContextMenuImageColumn - Color.FromArgb(224, 227, 231), // AppButtonBack1 - Color.FromArgb(224, 227, 231), // AppButtonBack2 - Color.FromArgb(135, 140, 146), // AppButtonBorder - Color.FromArgb(224, 227, 231), // AppButtonOuter1 - Color.FromArgb(224, 227, 231), // AppButtonOuter2 - Color.FromArgb(224, 227, 231), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 - Color.FromArgb(135, 140, 146), // AppButtonInner2 - Color.White, // AppButtonMenuDocs - Color.Black, // AppButtonMenuDocsText - Color.FromArgb(250, 253, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(227, 232, 237), // SeparatorHighInternalBorder2 - Color.FromArgb(198, 202, 205), // RibbonGalleryBorder - Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal - Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking - Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 - Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 Color.FromArgb(177, 181, 186), // RibbonTabTracking1 - Color.FromArgb(229, 231, 235), // RibbonTabTracking3 - Color.FromArgb(231, 233, 235), // RibbonTabTracking4 - Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 - Color.FromArgb(246, 247, 248), // RibbonGroupBorder4 - Color.FromArgb(249, 250, 250), // RibbonGroupBorder5 - Color.FromArgb(102, 109, 124), // RibbonGroupTitleText - Color.FromArgb(151, 156, 163), // RibbonDropArrowLight - Color.FromArgb( 39, 49, 60), // RibbonDropArrowDark - Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 - Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 - Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder - Color.Black, // ButtonNavigatorText - Color.FromArgb(207, 213, 220), // ButtonNavigatorTrack1 - Color.FromArgb(232, 234, 238), // ButtonNavigatorTrack2 - Color.FromArgb(191, 196, 202), // ButtonNavigatorPressed1 - Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 - Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 - Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 - Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; + + #endregion + + #region Color Arrays + + private static readonly Color[] _trackBarColors = + [ + Color.Red, // Tick marks + Color.FromArgb(166, 170, 175), // Top track + Color.FromArgb(226, 220, 235), // Bottom track + Color.FromArgb(206, 200, 215), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(80, 81, 82) // Border (normal) position + ]; + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb( 59, 59, 59), // TextLabelControl + Color.FromArgb( 59, 59, 59), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(170, 170, 170), // ButtonNormalBorder1 -n + Color.FromArgb(170, 170, 170), // ButtonNormalDefaultBorder -n + Color.FromArgb(253, 253, 253), // ButtonNormalBack1 -n + Color.FromArgb(253, 253, 253), // ButtonNormalBack2 -n + Color.FromArgb(235, 235, 235), // ButtonNormalDefaultBack1 + Color.FromArgb(195, 195, 195), // ButtonNormalDefaultBack2 + Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack1 + Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack2 + Color.White , // PanelClient -n + Color.FromArgb(207, 212, 218), // PanelAlternative + Color.FromArgb(213, 213, 213), // ControlBorder -n + Color.FromArgb(250, 253, 255), // SeparatorHighBorder1 + Color.FromArgb(227, 232, 237), // SeparatorHighBorder2 + Color.FromArgb(255, 255, 255), // HeaderPrimaryBack1 -n + Color.FromArgb(255, 255, 255), // HeaderPrimaryBack2 -n + Color.FromArgb(255, 255, 255), // HeaderSecondaryBack1 + Color.FromArgb(255, 255, 255), // HeaderSecondaryBack2-n + Color.FromArgb( 59, 59, 59), // HeaderText + Color.FromArgb(255, 255, 255), // StatusStripText + Color.FromArgb(236, 199, 87), // ButtonBorder + Color.FromArgb(247, 250, 252), // SeparatorLight + Color.FromArgb(119, 123, 127), // SeparatorDark + Color.FromArgb(191, 191, 191), // GripLight + Color.FromArgb(191, 191, 191), // GripDark + Color.FromArgb(227, 230, 232), // ToolStripBack + Color.FromArgb(0 , 114, 198), // StatusStripLight + Color.FromArgb(0 , 114, 198), // StatusStripDark + Color.White, // ImageMargin + Color.FromArgb(255, 255, 255), // ToolStripBegin + Color.FromArgb(255, 255, 255), // ToolStripMiddle + Color.FromArgb(255, 255, 255), // ToolStripEnd + Color.FromArgb(147, 154, 163), // OverflowBegin + Color.FromArgb(147, 154, 163), // OverflowMiddle + Color.FromArgb(147, 154, 163), // OverflowEnd + Color.FromArgb(147, 154, 163), // ToolStripBorder + Color.FromArgb(0 , 114, 198), // FormBorderActive -n + Color.FromArgb(134, 139, 145), // FormBorderInactive + Color.FromArgb(228, 230, 232), // FormBorderActiveLight + Color.FromArgb(255, 255, 255), // FormBorderActiveDark + Color.FromArgb(248, 247, 247), // FormBorderInactiveLight + Color.FromArgb(248, 247, 247), // FormBorderInactiveDark + Color.FromArgb(101, 109, 117), // FormBorderHeaderActive + Color.FromArgb(134, 139, 145), // FormBorderHeaderInactive + Color.FromArgb(235, 237, 240), // FormBorderHeaderActive1 + Color.FromArgb(228, 230, 232), // FormBorderHeaderActive2 + Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive1 + Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive2 + Color.FromArgb( 59, 59, 59), // FormHeaderShortActive + Color.FromArgb(138, 138, 138), // FormHeaderShortInactive + Color.FromArgb( 59, 59, 59), // FormHeaderLongActive + Color.FromArgb(138, 138, 138), // FormHeaderLongInactive + Color.FromArgb(166, 172, 179), // FormButtonBorderTrack + Color.FromArgb(255, 255, 255), // FormButtonBack1Track + Color.FromArgb(228, 228, 229), // FormButtonBack2Track + Color.FromArgb(166, 172, 179), // FormButtonBorderPressed + Color.FromArgb(223, 228, 235), // FormButtonBack1Pressed + Color.FromArgb(188, 193, 200), // FormButtonBack2Pressed + Color.Black, // TextButtonFormNormal + Color.Black, // TextButtonFormTracking + Color.Black, // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb( 59, 59, 59), // TextLabelPanel + Color.FromArgb(102, 102, 102), // RibbonTabTextNormal -n + Color.FromArgb( 0, 114, 198), // RibbonTabTextChecked -n + Color.FromArgb(182, 186, 191), // RibbonTabSelected1 + Color.White, // RibbonTabSelected2 + Color.White, // RibbonTabSelected3 + Color.White, // RibbonTabSelected4 + Color.White, // RibbonTabSelected5 + Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(248, 249, 249), // RibbonTabTracking2 + Color.FromArgb(182, 186, 191), // RibbonTabHighlight1 + Color.White, // RibbonTabHighlight2 + Color.White, // RibbonTabHighlight3 + Color.White, // RibbonTabHighlight4 + Color.White, // RibbonTabHighlight5 + Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor + Color.White, // RibbonGroupsArea1 -n + Color.White, // RibbonGroupsArea2 -n + Color.White, // RibbonGroupsArea3 -n + Color.FromArgb(212, 212, 212), // RibbonGroupsArea4 -n + Color.FromArgb(212, 212, 212), // RibbonGroupsArea5 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder1 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder2 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 + Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark + Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark + Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 + Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 + Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 + Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 + Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 + Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 + Color.FromArgb( 59, 59, 59), // RibbonGroupCollapsedText + Color.FromArgb(179, 185, 195), // AlternatePressedBack1 + Color.FromArgb(216, 224, 224), // AlternatePressedBack2 + Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(157, 166, 174), // FormButtonBack1Checked + Color.FromArgb(222, 230, 242), // FormButtonBack2Checked + Color.FromArgb(149, 154, 160), // FormButtonBorderCheck + Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack + Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack + Color.FromArgb(180, 180, 180), // RibbonQATMini1 + Color.FromArgb(210, 215, 221), // RibbonQATMini2 + Color.FromArgb(195, 200, 206), // RibbonQATMini3 + Color.FromArgb(10, Color.White), // RibbonQATMini4 + Color.FromArgb(32, Color.White), // RibbonQATMini5 + Color.FromArgb(200, 200, 200), // RibbonQATMini1I + Color.FromArgb(233, 234, 238), // RibbonQATMini2I + Color.FromArgb(223, 224, 228), // RibbonQATMini3I + Color.FromArgb(10, Color.White), // RibbonQATMini4I + Color.FromArgb(32, Color.White), // RibbonQATMini5I + Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 + Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 + Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 + Color.FromArgb( 90, 90, 90), // RibbonQATButtonDark + Color.FromArgb(210, 212, 215), // RibbonQATButtonLight + Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 + Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 + Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark + Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 + Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.White, // GridListNormal2 + Color.FromArgb(203, 207, 212), // GridListPressed1 + Color.White, // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(238, 241, 247), // GridSheetColNormal1 + Color.FromArgb(218, 222, 227), // GridSheetColNormal2 + Color.FromArgb(255, 223, 107), // GridSheetColPressed1 + Color.FromArgb(255, 252, 230), // GridSheetColPressed2 + Color.FromArgb(255, 211, 89), // GridSheetColSelected1 + Color.FromArgb(255, 239, 113), // GridSheetColSelected2 + Color.FromArgb(223, 227, 232), // GridSheetRowNormal + Color.FromArgb(255, 223, 107), // GridSheetRowPressed + Color.FromArgb(245, 210, 87), // GridSheetRowSelected + Color.FromArgb(218, 220, 221), // GridDataCellBorder + Color.FromArgb(183, 219, 255), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(168, 168, 168), // InputControlTextDisabled + Color.FromArgb(212, 214, 217), // InputControlBorderNormal + Color.FromArgb(187, 187, 187), // InputControlBorderDisabled + Color.FromArgb(255, 255, 255), // InputControlBackNormal + Color.FromArgb(240, 240, 240), // InputControlBackDisabled + Color.FromArgb(247, 247, 247), // InputControlBackInactive + Color.Black, // InputDropDownNormal1 + Color.Transparent, // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack + Color.FromArgb( 59, 59, 59), // ContextMenuHeadingText + Color.White, // ContextMenuImageColumn + Color.FromArgb(224, 227, 231), // AppButtonBack1 + Color.FromArgb(224, 227, 231), // AppButtonBack2 + Color.FromArgb(135, 140, 146), // AppButtonBorder + Color.FromArgb(224, 227, 231), // AppButtonOuter1 + Color.FromArgb(224, 227, 231), // AppButtonOuter2 + Color.FromArgb(224, 227, 231), // AppButtonOuter3 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 + Color.FromArgb(135, 140, 146), // AppButtonInner2 + Color.White, // AppButtonMenuDocs + Color.Black, // AppButtonMenuDocsText + Color.FromArgb(250, 253, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(227, 232, 237), // SeparatorHighInternalBorder2 + Color.FromArgb(198, 202, 205), // RibbonGalleryBorder + Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal + Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking + Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 + Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(229, 231, 235), // RibbonTabTracking3 + Color.FromArgb(231, 233, 235), // RibbonTabTracking4 + Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 + Color.FromArgb(246, 247, 248), // RibbonGroupBorder4 + Color.FromArgb(249, 250, 250), // RibbonGroupBorder5 + Color.FromArgb(102, 109, 124), // RibbonGroupTitleText + Color.FromArgb(151, 156, 163), // RibbonDropArrowLight + Color.FromArgb( 39, 49, 60), // RibbonDropArrowDark + Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 + Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 + Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder + Color.Black, // ButtonNavigatorText + Color.FromArgb(207, 213, 220), // ButtonNavigatorTrack1 + Color.FromArgb(232, 234, 238), // ButtonNavigatorTrack2 + Color.FromArgb(191, 196, 202), // ButtonNavigatorPressed1 + Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 + Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 + Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 + Color.FromArgb(221, 221, 221) // ToolTipBottom + ]; + + #endregion #endregion #region Identity @@ -292,8 +316,8 @@ static PaletteOffice2007White() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GallerySilverBlack); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007SilverN, Office2007RadioButtonImageResources.RadioButton2007SilverT, @@ -302,7 +326,7 @@ static PaletteOffice2007White() Office2007RadioButtonImageResources.RadioButton2007SilverNC, Office2007RadioButtonImageResources.RadioButton2007SilverTC, Office2007RadioButtonImageResources.RadioButton2007SilverPC - }; + ]; } /// @@ -396,5 +420,39 @@ public PaletteOffice2007White() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Black.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Black.cs index 9d8effb3c..4c124343a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Black.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Black.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,13 +28,13 @@ public class PaletteOffice2007Black : PaletteOffice2007Base #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _blackDropDownButton = GenericImageResources.BlackDropDownButton; + private static readonly Image? _blackDropDownButton = GenericImageResources.BlackDropDownButton; private static readonly Image _blackCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxBlackCloseNormal; private static readonly Image _blackCloseActive = Office2007ControlBoxResources.Office2007ControlBoxBlackCloseActive; private static readonly Image _blackCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxBlackCloseDisabled; @@ -57,25 +57,25 @@ public class PaletteOffice2007Black : PaletteOffice2007Base private static readonly Image _blackHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; private static readonly Image _blackRibbonMinimize = GenericImageResources.BlackButtonCollapse; private static readonly Image _blackRibbonExpand = GenericImageResources.BlackButtonExpand; - private static readonly Image _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; #endregion #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(37, 37, 37), // Top track Color.FromArgb(174, 174, 174), // Bottom track Color.FromArgb(131, 132, 132), // Fill track - Color.Empty, // Outside position + GlobalStaticValues.EMPTY_COLOR, // Outside position Color.FromArgb(35, 35, 35) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { - Color.FromArgb(255, 255, 255), // (76, 83, 92), // TextLabelControl + [ + Color.FromArgb(70, 70, 70), // (76, 83, 92), // TextLabelControl Color.FromArgb(70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 @@ -103,12 +103,12 @@ public class PaletteOffice2007Black : PaletteOffice2007Base Color.FromArgb(228, 228, 228), // GripLight Color.FromArgb(77, 77, 77), // GripDark Color.FromArgb(83, 83, 83), // ToolStripBack - Color.FromArgb(178, 177, 178), // StatusStripLight - Color.FromArgb(131, 132, 132), // StatusStripDark + Color.FromArgb(75, 75, 75), // StatusStripLight + Color.FromArgb(50, 50, 50), // StatusStripDark Color.FromArgb(239, 239, 239), // ImageMargin - Color.FromArgb(210, 213, 218), // ToolStripBegin - Color.FromArgb(188, 193, 201), // ToolStripMiddle - Color.FromArgb(138, 146, 156), // ToolStripEnd + Color.FromArgb(75, 75, 75), // ToolStripBegin + Color.FromArgb(50, 50, 50), // ToolStripMiddle + Color.FromArgb(50, 50, 50), // ToolStripEnd Color.FromArgb(178, 183, 191), // OverflowBegin Color.FromArgb(139, 147, 158), // OverflowMiddle Color.FromArgb(76, 83, 92), // OverflowEnd @@ -160,11 +160,11 @@ public class PaletteOffice2007Black : PaletteOffice2007Base Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 Color.FromArgb(123, 111, 68), // RibbonTabHighlight5 Color.FromArgb(54, 54, 54), // RibbonTabSeparatorColor - Color.FromArgb(190, 190, 190), // RibbonGroupsArea1 - Color.FromArgb(210, 210, 210), // RibbonGroupsArea2 + Color.FromArgb(215, 219, 224), // RibbonGroupsArea1 + Color.FromArgb(235, 235, 235), // RibbonGroupsArea2 Color.FromArgb(180, 187, 197), // RibbonGroupsArea3 - Color.FromArgb(235, 235, 235), // RibbonGroupsArea4 - Color.FromArgb(215, 219, 224), // RibbonGroupsArea5 + Color.FromArgb(210, 210, 210), // RibbonGroupsArea4 + Color.FromArgb(190, 190, 190), // RibbonGroupsArea5 Color.FromArgb(174, 176, 180), // RibbonGroupBorder1 Color.FromArgb(132, 132, 132), // RibbonGroupBorder2 Color.FromArgb(182, 184, 184), // RibbonGroupTitle1 @@ -288,16 +288,17 @@ public class PaletteOffice2007Black : PaletteOffice2007Base Color.FromArgb(247, 247, 247), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 Color.FromArgb(225, 225, 225), // RibbonDropArrowLight Color.FromArgb(103, 103, 103) // RibbonDropArrowDark - }; + ]; #endregion + #endregion #region Identity @@ -316,8 +317,8 @@ static PaletteOffice2007Black() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GallerySilverBlack); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007BlackN, Office2007RadioButtonImageResources.RadioButton2007BlackT, @@ -326,7 +327,7 @@ static PaletteOffice2007Black() Office2007RadioButtonImageResources.RadioButton2007BlackNC, Office2007RadioButtonImageResources.RadioButton2007BlackTC, Office2007RadioButtonImageResources.RadioButton2007BlackPC - }; + ]; } /// @@ -606,5 +607,39 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac return base.GetRibbonBackColorStyle(style, state); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Blue.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Blue.cs index 2107b2e3b..ac21ddffe 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Blue.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Blue.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,10 +18,23 @@ namespace Krypton.Toolkit public class PaletteOffice2007Blue : PaletteOffice2007Base { #region Static Fields + + #region Image List + private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = GenericImageResources.BlueDropDownButton; + + #endregion + + #region Image Array + + private static readonly Image?[] _radioButtonArray; + + #endregion + + #region Images + + private static readonly Image? _blueDropDownButton = GenericImageResources.BlueDropDownButton; private static readonly Image _blueCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseNormal; private static readonly Image _blueCloseActive = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseActive; private static readonly Image _blueCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxBlueCloseDisabled; @@ -42,228 +55,240 @@ public class PaletteOffice2007Blue : PaletteOffice2007Base private static readonly Image _blueHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _blueHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _blueHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; - private static readonly Image _contextMenuSubMenu = GenericImageResources.BlueContextMenuSub; - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks - Color.FromArgb(116, 150, 194), // Top track - Color.FromArgb(152, 190, 241), // Bottom track - Color.FromArgb(142, 180, 231), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(63, 101, 152) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 21, 66, 139), // TextLabelControl - Color.FromArgb( 21, 66, 139), // TextButtonNormal - Color.Blue, // TextButtonChecked - Color.FromArgb(161, 189, 207), // ButtonNormalBorder - Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder - Color.FromArgb(210, 225, 244), // ButtonNormalBack1 - Color.FromArgb(235, 243, 254), // ButtonNormalBack2 - Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 - Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 - Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 - Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 - Color.FromArgb(191, 219, 255), // PanelClient - Color.FromArgb(177, 208, 248), // PanelAlternative - Color.FromArgb(101, 147, 207), // ControlBorder - Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 - Color.FromArgb(227, 239, 255), // HeaderPrimaryBack1 - Color.FromArgb(175, 210, 255), // HeaderPrimaryBack2 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 - Color.FromArgb( 21, 66, 139), // HeaderText - Color.FromArgb( 21, 66, 139), // StatusStripText - Color.FromArgb(121, 153, 194), // ButtonBorder - Color.FromArgb(255, 255, 255), // SeparatorLight - Color.FromArgb(154, 198, 255), // SeparatorDark - Color.FromArgb(248, 248, 248), // GripLight - Color.FromArgb(114, 152, 204), // GripDark - Color.FromArgb(191, 219, 255), // ToolStripBack - Color.FromArgb(215, 229, 247), // StatusStripLight - Color.FromArgb(172, 201, 238), // StatusStripDark - Color.FromArgb(233, 238, 238), // ImageMargin - Color.FromArgb(227, 239, 255), // ToolStripBegin - Color.FromArgb(222, 236, 255), // ToolStripMiddle - Color.FromArgb(152, 186, 230), // ToolStripEnd - Color.FromArgb(167, 204, 251), // OverflowBegin - Color.FromArgb(167, 204, 251), // OverflowMiddle - Color.FromArgb(101, 147, 207), // OverflowEnd - Color.FromArgb(111, 157, 217), // ToolStripBorder - Color.FromArgb( 59, 90, 130), // FormBorderActive - Color.FromArgb(192, 198, 206), // FormBorderInactive - Color.FromArgb(176, 203, 239), // FormBorderActiveLight - Color.FromArgb(194, 217, 247), // FormBorderActiveDark - Color.FromArgb(204, 216, 232), // FormBorderInactiveLight - Color.FromArgb(212, 222, 236), // FormBorderInactiveDark - Color.FromArgb(221, 233, 248), // FormBorderHeaderActive - Color.FromArgb(223, 229, 237), // FormBorderHeaderInactive - Color.FromArgb(176, 207, 247), // FormBorderHeaderActive1 - Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 - Color.FromArgb(204, 218, 236), // FormBorderHeaderInctive1 - Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 - Color.FromArgb( 62, 106, 184), // FormHeaderShortActive - Color.FromArgb(160, 160, 160), // FormHeaderShortInactive - Color.FromArgb(105, 112, 121), // FormHeaderLongActive - Color.FromArgb(160, 160, 160), // FormHeaderLongInactive - Color.FromArgb(158, 193, 241), // FormButtonBorderTrack - Color.FromArgb(210, 228, 254), // FormButtonBack1Track - Color.FromArgb(255, 255, 255), // FormButtonBack2Track - Color.FromArgb(162, 191, 227), // FormButtonBorderPressed - Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed - Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed - Color.FromArgb( 21, 66, 139), // TextButtonFormNormal - Color.FromArgb( 21, 66, 139), // TextButtonFormTracking - Color.FromArgb( 21, 66, 139), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 21, 66, 139), // TextLabelPanel - Color.FromArgb( 21, 66, 139), // RibbonTabTextNormal - Color.FromArgb( 21, 66, 139), // RibbonTabTextChecked - Color.FromArgb(145, 180, 228), // RibbonTabSelected1 - Color.FromArgb(209, 251, 255), // RibbonTabSelected2 - Color.FromArgb(246, 250, 255), // RibbonTabSelected3 - Color.FromArgb(239, 246, 254), // RibbonTabSelected4 - Color.FromArgb(222, 232, 245), // RibbonTabSelected5 - Color.FromArgb(153, 187, 232), // RibbonTabTracking1 - Color.FromArgb(255, 180, 86), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 - Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 - Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor - Color.FromArgb(141, 178, 227), // RibbonGroupsArea1 - Color.FromArgb(192, 249, 255), // RibbonGroupsArea2 - Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 - Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 - Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 - Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 - Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 - Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 - Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 - Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 - Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 - Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark - Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight - Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 - Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 - Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark - Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight - Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 - Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 - Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 - Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 - Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 - Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 - Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 - Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 - Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 - Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 - Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 - Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 - Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 - Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 - Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 - Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 - Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 - Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 - Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 - Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 - Color.FromArgb( 21, 66, 139), // RibbonGroupCollapsedText - Color.FromArgb(118, 153, 200), // AlternatePressedBack1 - Color.FromArgb(184, 215, 253), // AlternatePressedBack2 - Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 - Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 - Color.FromArgb(150, 194, 239), // FormButtonBack1Checked - Color.FromArgb(210, 228, 254), // FormButtonBack2Checked - Color.FromArgb(158, 193, 241), // FormButtonBorderCheck - Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack - Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack - Color.FromArgb(154, 179, 213), // RibbonQATMini1 - Color.FromArgb(219, 231, 247), // RibbonQATMini2 - Color.FromArgb(195, 213, 236), // RibbonQATMini3 - Color.FromArgb(128, Color.White), // RibbonQATMini4 - Color.FromArgb(72, Color.White), // RibbonQATMini5 - Color.FromArgb(153, 176, 206), // RibbonQATMini1I - Color.FromArgb(226, 233, 241), // RibbonQATMini2I - Color.FromArgb(198, 210, 226), // RibbonQATMini3I - Color.FromArgb(128, Color.White), // RibbonQATMini4I - Color.FromArgb(72, Color.White), // RibbonQATMini5I - Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 - Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 - Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 - Color.FromArgb( 86, 125, 177), // RibbonQATButtonDark - Color.FromArgb(234, 242, 249), // RibbonQATButtonLight - Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 - Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark - Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 - Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.FromArgb(196, 221, 255), // GridListNormal2 - Color.FromArgb(194, 220, 255), // GridListPressed1 - Color.FromArgb(252, 253, 255), // GridListPressed2 - Color.FromArgb(170, 195, 240), // GridListSelected - Color.FromArgb(249, 252, 253), // GridSheetColNormal1 - Color.FromArgb(211, 219, 233), // GridSheetColNormal2 - Color.FromArgb(223, 226, 228), // GridSheetColPressed1 - Color.FromArgb(188, 197, 210), // GridSheetColPressed2 - Color.FromArgb(249, 217, 159), // GridSheetColSelected1 - Color.FromArgb(241, 193, 95), // GridSheetColSelected2 - Color.FromArgb(228, 236, 247), // GridSheetRowNormal - Color.FromArgb(187, 196, 209), // GridSheetRowPressed - Color.FromArgb(255, 213, 141), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(194, 217, 240), // GridDataCellSelected - Color.Blue, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(171, 193, 222), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(255, 255, 255), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(234, 242, 251), // InputControlBackInactive - Color.FromArgb( 86, 125, 177), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(221, 231, 238), // ContextMenuHeadingBack - Color.FromArgb(0, 21, 110), // ContextMenuHeadingText - Color.FromArgb(233, 238, 238), // ContextMenuImageColumn - Color.White, // AppButtonBack1 - Color.FromArgb(201, 238, 255), // AppButtonBack2 - Color.FromArgb(155, 175, 202), // AppButtonBorder - Color.FromArgb(189, 211, 238), // AppButtonOuter1 - Color.FromArgb(176, 201, 234), // AppButtonOuter2 - Color.FromArgb(207, 224, 245), // AppButtonOuter3 - Color.White, // AppButtonInner1 - Color.FromArgb(155, 175, 202), // AppButtonInner2 - Color.FromArgb(233, 234, 238), // AppButtonMenuDocs - Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText - Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 - Color.FromArgb(185, 208, 237), // RibbonGalleryBorder - Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal - Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking - Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 - Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty // RibbonDropArrowDark - }; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.BlueContextMenuSub; + + #endregion + + #region Color Arrays + + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks + Color.FromArgb(116, 150, 194), // Top track + Color.FromArgb(152, 190, 241), // Bottom track + Color.FromArgb(142, 180, 231), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(63, 101, 152) // Border (normal) position + ]; + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb( 21, 66, 139), // TextLabelControl + Color.FromArgb( 21, 66, 139), // TextButtonNormal + Color.Blue, // TextButtonChecked + Color.FromArgb(161, 189, 207), // ButtonNormalBorder + Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder + Color.FromArgb(210, 225, 244), // ButtonNormalBack1 + Color.FromArgb(235, 243, 254), // ButtonNormalBack2 + Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 + Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 + Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 + Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 + Color.FromArgb(191, 219, 255), // PanelClient + Color.FromArgb(177, 208, 248), // PanelAlternative + Color.FromArgb(101, 147, 207), // ControlBorder + Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 + Color.FromArgb(227, 239, 255), // HeaderPrimaryBack1 + Color.FromArgb(175, 210, 255), // HeaderPrimaryBack2 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 + Color.FromArgb( 21, 66, 139), // HeaderText + Color.FromArgb( 21, 66, 139), // StatusStripText + Color.FromArgb(121, 153, 194), // ButtonBorder + Color.FromArgb(255, 255, 255), // SeparatorLight + Color.FromArgb(154, 198, 255), // SeparatorDark + Color.FromArgb(248, 248, 248), // GripLight + Color.FromArgb(114, 152, 204), // GripDark + Color.FromArgb(191, 219, 255), // ToolStripBack + Color.FromArgb(215, 229, 247), // StatusStripLight + Color.FromArgb(172, 201, 238), // StatusStripDark + Color.FromArgb(233, 238, 238), // ImageMargin + Color.FromArgb(227, 239, 255), // ToolStripBegin + Color.FromArgb(222, 236, 255), // ToolStripMiddle + Color.FromArgb(152, 186, 230), // ToolStripEnd + Color.FromArgb(167, 204, 251), // OverflowBegin + Color.FromArgb(167, 204, 251), // OverflowMiddle + Color.FromArgb(101, 147, 207), // OverflowEnd + Color.FromArgb(111, 157, 217), // ToolStripBorder + Color.FromArgb( 59, 90, 130), // FormBorderActive + Color.FromArgb(192, 198, 206), // FormBorderInactive + Color.FromArgb(176, 203, 239), // FormBorderActiveLight + Color.FromArgb(194, 217, 247), // FormBorderActiveDark + Color.FromArgb(204, 216, 232), // FormBorderInactiveLight + Color.FromArgb(212, 222, 236), // FormBorderInactiveDark + Color.FromArgb(221, 233, 248), // FormBorderHeaderActive + Color.FromArgb(223, 229, 237), // FormBorderHeaderInactive + Color.FromArgb(176, 207, 247), // FormBorderHeaderActive1 + Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 + Color.FromArgb(204, 218, 236), // FormBorderHeaderInctive1 + Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 + Color.FromArgb( 62, 106, 184), // FormHeaderShortActive + Color.FromArgb(160, 160, 160), // FormHeaderShortInactive + Color.FromArgb(105, 112, 121), // FormHeaderLongActive + Color.FromArgb(160, 160, 160), // FormHeaderLongInactive + Color.FromArgb(158, 193, 241), // FormButtonBorderTrack + Color.FromArgb(210, 228, 254), // FormButtonBack1Track + Color.FromArgb(255, 255, 255), // FormButtonBack2Track + Color.FromArgb(162, 191, 227), // FormButtonBorderPressed + Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed + Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed + Color.FromArgb( 21, 66, 139), // TextButtonFormNormal + Color.FromArgb( 21, 66, 139), // TextButtonFormTracking + Color.FromArgb( 21, 66, 139), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb( 21, 66, 139), // TextLabelPanel + Color.FromArgb( 21, 66, 139), // RibbonTabTextNormal + Color.FromArgb( 21, 66, 139), // RibbonTabTextChecked + Color.FromArgb(145, 180, 228), // RibbonTabSelected1 + Color.FromArgb(209, 251, 255), // RibbonTabSelected2 + Color.FromArgb(246, 250, 255), // RibbonTabSelected3 + Color.FromArgb(239, 246, 254), // RibbonTabSelected4 + Color.FromArgb(222, 232, 245), // RibbonTabSelected5 + Color.FromArgb(153, 187, 232), // RibbonTabTracking1 + Color.FromArgb(255, 180, 86), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 + Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor + Color.FromArgb(219, 230, 244), // RibbonGroupsArea1 + Color.FromArgb(231, 242, 255), // RibbonGroupsArea2 + Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 + Color.FromArgb(192, 249, 255), // RibbonGroupsArea4 + Color.FromArgb(141, 178, 227), // RibbonGroupsArea5 + Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 + Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 + Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 + Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 + Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 + Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 + Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark + Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight + Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 + Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 + Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark + Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight + Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 + Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 + Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 + Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 + Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 + Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 + Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 + Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 + Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 + Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 + Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 + Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 + Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 + Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 + Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 + Color.FromArgb( 21, 66, 139), // RibbonGroupCollapsedText + Color.FromArgb(118, 153, 200), // AlternatePressedBack1 + Color.FromArgb(184, 215, 253), // AlternatePressedBack2 + Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 + Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 + Color.FromArgb(150, 194, 239), // FormButtonBack1Checked + Color.FromArgb(210, 228, 254), // FormButtonBack2Checked + Color.FromArgb(158, 193, 241), // FormButtonBorderCheck + Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack + Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack + Color.FromArgb(154, 179, 213), // RibbonQATMini1 + Color.FromArgb(219, 231, 247), // RibbonQATMini2 + Color.FromArgb(195, 213, 236), // RibbonQATMini3 + Color.FromArgb(128, Color.White), // RibbonQATMini4 + Color.FromArgb(72, Color.White), // RibbonQATMini5 + Color.FromArgb(153, 176, 206), // RibbonQATMini1I + Color.FromArgb(226, 233, 241), // RibbonQATMini2I + Color.FromArgb(198, 210, 226), // RibbonQATMini3I + Color.FromArgb(128, Color.White), // RibbonQATMini4I + Color.FromArgb(72, Color.White), // RibbonQATMini5I + Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 + Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 + Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 + Color.FromArgb( 86, 125, 177), // RibbonQATButtonDark + Color.FromArgb(234, 242, 249), // RibbonQATButtonLight + Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 + Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 + Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark + Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 + Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.FromArgb(196, 221, 255), // GridListNormal2 + Color.FromArgb(194, 220, 255), // GridListPressed1 + Color.FromArgb(252, 253, 255), // GridListPressed2 + Color.FromArgb(170, 195, 240), // GridListSelected + Color.FromArgb(249, 252, 253), // GridSheetColNormal1 + Color.FromArgb(211, 219, 233), // GridSheetColNormal2 + Color.FromArgb(223, 226, 228), // GridSheetColPressed1 + Color.FromArgb(188, 197, 210), // GridSheetColPressed2 + Color.FromArgb(249, 217, 159), // GridSheetColSelected1 + Color.FromArgb(241, 193, 95), // GridSheetColSelected2 + Color.FromArgb(228, 236, 247), // GridSheetRowNormal + Color.FromArgb(187, 196, 209), // GridSheetRowPressed + Color.FromArgb(255, 213, 141), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(194, 217, 240), // GridDataCellSelected + Color.Blue, // InputControlTextNormal + Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(171, 193, 222), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(255, 255, 255), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(234, 242, 251), // InputControlBackInactive + Color.FromArgb( 86, 125, 177), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(221, 231, 238), // ContextMenuHeadingBack + Color.FromArgb(0, 21, 110), // ContextMenuHeadingText + Color.FromArgb(233, 238, 238), // ContextMenuImageColumn + Color.White, // AppButtonBack1 + Color.FromArgb(201, 238, 255), // AppButtonBack2 + Color.FromArgb(155, 175, 202), // AppButtonBorder + Color.FromArgb(189, 211, 238), // AppButtonOuter1 + Color.FromArgb(176, 201, 234), // AppButtonOuter2 + Color.FromArgb(207, 224, 245), // AppButtonOuter3 + Color.White, // AppButtonInner1 + Color.FromArgb(155, 175, 202), // AppButtonInner2 + Color.FromArgb(233, 234, 238), // AppButtonMenuDocs + Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText + Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 + Color.FromArgb(185, 208, 237), // RibbonGalleryBorder + Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal + Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking + Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 + Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR // RibbonDropArrowDark + ]; + + #endregion + #endregion #region Identity @@ -282,8 +307,8 @@ static PaletteOffice2007Blue() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GalleryBlue); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007BlueN, Office2007RadioButtonImageResources.RadioButton2007BlueT, @@ -292,7 +317,7 @@ static PaletteOffice2007Blue() Office2007RadioButtonImageResources.RadioButton2007BlueNC, Office2007RadioButtonImageResources.RadioButton2007BlueTC, Office2007RadioButtonImageResources.RadioButton2007BluePC - }; + ]; } /// @@ -417,5 +442,39 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac return base.GetRibbonBackColorStyle(style, state); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Silver.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Silver.cs index eece0bfbc..df483fdb3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Silver.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2007/Official Themes/PaletteOffice2007Silver.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,10 +18,23 @@ namespace Krypton.Toolkit public class PaletteOffice2007Silver : PaletteOffice2007Base { #region Static Fields + + #region Image Lists + private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = GenericImageResources.SilverDropDownButton; + + #endregion + + #region Image Array + + private static readonly Image?[] _radioButtonArray; + + #endregion + + #region Images + + private static readonly Image? _silverDropDownButton = GenericImageResources.SilverDropDownButton; private static readonly Image _silverCloseNormal = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseNormal; private static readonly Image _silverCloseActive = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseActive; private static readonly Image _silverCloseDisabled = Office2007ControlBoxResources.Office2007ControlBoxSilverCloseDisabled; @@ -42,228 +55,240 @@ public class PaletteOffice2007Silver : PaletteOffice2007Base private static readonly Image _silverHelpActive = Office2007ControlBoxResources.Office2007HelpIconHover; private static readonly Image _silverHelpDisabled = Office2007ControlBoxResources.Office2007HelpIconDisabled; private static readonly Image _silverHelpPressed = Office2007ControlBoxResources.Office2007HelpIconPressed; - private static readonly Image _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; - private static readonly Color[] _trackBarColors = { Color.FromArgb(130, 130, 130), // Tick marks - Color.FromArgb(156, 160, 165), // Top track - Color.FromArgb(226, 220, 235), // Bottom track - Color.FromArgb(196, 190, 205), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(80, 81, 82) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 56, 63, 70), // TextLabelControl - Color.FromArgb( 56, 63, 70), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(141, 148, 157), // ButtonNormalBorder1 - Color.FromArgb(131, 138, 147), // ButtonNormalBorder2 - Color.FromArgb(203, 210, 219), // ButtonNormalBack1 - Color.FromArgb(240, 244, 249), // ButtonNormalBack2 - Color.FromArgb(186, 185, 206), // ButtonNormalDefaultBack1 - Color.FromArgb(222, 226, 236), // ButtonNormalDefaultBack2 - Color.FromArgb(202, 204, 214), // ButtonNormalNavigatorBack1 - Color.FromArgb(222, 226, 236), // ButtonNormalNavigatorBack2 - Color.FromArgb(208, 212, 221), // PanelClient - Color.FromArgb(200, 204, 211), // PanelAlternative - Color.FromArgb(111, 112, 116), // ControlBorder - Color.FromArgb(240, 241, 242), // SeparatorHighBorder1 - Color.FromArgb(195, 200, 206), // SeparatorHighBorder2 - Color.FromArgb(246, 247, 248), // HeaderPrimaryBack1 - Color.FromArgb(218, 223, 230), // HeaderPrimaryBack2 - Color.FromArgb(213, 219, 231), // HeaderSecondaryBack1 - Color.FromArgb(213, 219, 231), // HeaderSecondaryBack2 - Color.FromArgb( 21, 66, 139), // HeaderText - Color.FromArgb( 46, 53, 62), // StatusStripText - Color.FromArgb(155, 163, 167), // ButtonBorder - Color.FromArgb(255, 255, 255), // SeparatorLight - Color.FromArgb(110, 109, 143), // SeparatorDark - Color.FromArgb(248, 248, 248), // GripLight - Color.FromArgb(112, 118, 126), // GripDark - Color.FromArgb(208, 212, 221), // ToolStripBack - Color.FromArgb(230, 232, 237), // StatusStripLight - Color.FromArgb(189, 195, 202), // StatusStripDark - Color.FromArgb(239, 239, 239), // ImageMargin - Color.FromArgb(243, 244, 250), // ToolStripBegin - Color.FromArgb(218, 219, 231), // ToolStripMiddle - Color.FromArgb(173, 171, 201), // ToolStripEnd - Color.FromArgb(179, 178, 200), // OverflowBegin - Color.FromArgb(152, 151, 177), // OverflowMiddle - Color.FromArgb(124, 124, 148), // OverflowEnd - Color.FromArgb(124, 124, 148), // ToolStripBorder - Color.FromArgb(114, 120, 128), // FormBorderActive - Color.FromArgb(180, 185, 192), // FormBorderInactive - Color.FromArgb(222, 221, 222), // FormBorderActiveLight - Color.FromArgb(187, 186, 186), // FormBorderActiveDark - Color.FromArgb(240, 240, 240), // FormBorderInactiveLight - Color.FromArgb(224, 224, 224), // FormBorderInactiveDark - Color.FromArgb(172, 175, 183), // FormBorderHeaderActive - Color.FromArgb(182, 181, 181), // FormBorderHeaderInactive - Color.FromArgb(192, 195, 202), // FormBorderHeaderActive1 - Color.FromArgb(240, 243, 250), // FormBorderHeaderActive2 - Color.FromArgb(217, 219, 225), // FormBorderHeaderInctive1 - Color.FromArgb(244, 247, 251), // FormBorderHeaderInctive2 - Color.FromArgb( 53, 110, 170), // FormHeaderShortActive - Color.FromArgb(138, 138, 138), // FormHeaderShortInactive - Color.FromArgb( 92, 98, 106), // FormHeaderLongActive - Color.FromArgb(138, 138, 138), // FormHeaderLongInactive - Color.FromArgb(189, 199, 212), // FormButtonBorderTrack - Color.FromArgb(222, 230, 242), // FormButtonBack1Track - Color.FromArgb(255, 255, 255), // FormButtonBack2Track - Color.FromArgb(149, 154, 160), // FormButtonBorderPressed - Color.FromArgb(125, 131, 140), // FormButtonBack1Pressed - Color.FromArgb(213, 226, 233), // FormButtonBack2Pressed - Color.Black, // TextButtonFormNormal - Color.Black, // TextButtonFormTracking - Color.Black, // TextButtonFormPressed - Color.Silver, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Silver, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 56, 63, 70), // TextLabelPanel - Color.FromArgb( 76, 83, 92), // RibbonTabTextNormal - Color.FromArgb( 76, 83, 92), // RibbonTabTextChecked - Color.FromArgb(190, 190, 190), // RibbonTabSelected1 - Color.FromArgb(198, 250, 255), // RibbonTabSelected2 - Color.FromArgb(247, 248, 249), // RibbonTabSelected3 - Color.FromArgb(245, 245, 247), // RibbonTabSelected4 - Color.FromArgb(239, 234, 241), // RibbonTabSelected5 - Color.FromArgb(189, 190, 193), // RibbonTabTracking1 - Color.FromArgb(255, 180, 86), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 - Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 - Color.FromArgb(175, 176, 179), // RibbonTabSeparatorColor - Color.FromArgb(190, 190, 190), // RibbonGroupsArea1 - Color.FromArgb(210, 210, 210), // RibbonGroupsArea2 - Color.FromArgb(213, 219, 231), // RibbonGroupsArea3 - Color.FromArgb(249, 249, 249), // RibbonGroupsArea4 - Color.FromArgb(243, 245, 249), // RibbonGroupsArea5 - Color.FromArgb(189, 191, 193), // RibbonGroupBorder1 - Color.FromArgb(133, 133, 133), // RibbonGroupBorder2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitle1 - Color.FromArgb(195, 199, 209), // RibbonGroupTitle2 - Color.FromArgb(183, 183, 183), // RibbonGroupBorderContext1 - Color.FromArgb(131, 131, 131), // RibbonGroupBorderContext2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitleContext1 - Color.FromArgb(195, 199, 209), // RibbonGroupTitleContext2 - Color.FromArgb(101, 104, 112), // RibbonGroupDialogDark - Color.FromArgb(242, 242, 242), // RibbonGroupDialogLight - Color.FromArgb(222, 226, 238), // RibbonGroupTitleTracking1 - Color.FromArgb(179, 185, 199), // RibbonGroupTitleTracking2 - Color.FromArgb(128, 128, 128), // RibbonMinimizeBarDark - Color.FromArgb(220, 225, 235), // RibbonMinimizeBarLight - Color.FromArgb(183, 183, 183), // RibbonGroupCollapsedBorder1 - Color.FromArgb(145, 145, 145), // RibbonGroupCollapsedBorder2 - Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 - Color.FromArgb(225, 227, 227), // RibbonGroupCollapsedBorder4 - Color.FromArgb(242, 246, 246), // RibbonGroupCollapsedBack1 - Color.FromArgb(207, 212, 220), // RibbonGroupCollapsedBack2 - Color.FromArgb(196, 203, 214), // RibbonGroupCollapsedBack3 - Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBack4 - Color.FromArgb(188, 193, 213), // RibbonGroupCollapsedBorderT1 - Color.FromArgb(142, 178, 179), // RibbonGroupCollapsedBorderT2 - Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 - Color.White, // RibbonGroupCollapsedBorderT4 - Color.FromArgb(245, 248, 248), // RibbonGroupCollapsedBackT1 - Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 - Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 - Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 - Color.FromArgb(160, 160, 160), // RibbonGroupFrameBorder1 - Color.FromArgb(209, 209, 209), // RibbonGroupFrameBorder2 - Color.FromArgb(239, 242, 243), // RibbonGroupFrameInside1 - Color.FromArgb(226, 229, 234), // RibbonGroupFrameInside2 - Color.FromArgb(220, 224, 231), // RibbonGroupFrameInside3 - Color.FromArgb(232, 234, 238), // RibbonGroupFrameInside4 - Color.FromArgb( 76, 83, 92), // RibbonGroupCollapsedText - Color.FromArgb(179, 185, 195), // AlternatePressedBack1 - Color.FromArgb(216, 224, 224), // AlternatePressedBack2 - Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 - Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 - Color.FromArgb(157, 166, 174), // FormButtonBack1Checked - Color.FromArgb(222, 230, 242), // FormButtonBack2Checked - Color.FromArgb(149, 154, 160), // FormButtonBorderCheck - Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack - Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack - Color.FromArgb(180, 180, 180), // RibbonQATMini1 - Color.FromArgb(210, 215, 221), // RibbonQATMini2 - Color.FromArgb(195, 200, 206), // RibbonQATMini3 - Color.FromArgb(10, Color.White), // RibbonQATMini4 - Color.FromArgb(32, Color.White), // RibbonQATMini5 - Color.FromArgb(200, 200, 200), // RibbonQATMini1I - Color.FromArgb(233, 234, 238), // RibbonQATMini2I - Color.FromArgb(223, 224, 228), // RibbonQATMini3I - Color.FromArgb(10, Color.White), // RibbonQATMini4I - Color.FromArgb(32, Color.White), // RibbonQATMini5I - Color.FromArgb(217, 222, 230), // RibbonQATFullbar1 - Color.FromArgb(214, 219, 227), // RibbonQATFullbar2 - Color.FromArgb(194, 201, 212), // RibbonQATFullbar3 - Color.FromArgb(103, 103, 103), // RibbonQATButtonDark - Color.FromArgb(225, 225, 225), // RibbonQATButtonLight - Color.FromArgb(219, 218, 228), // RibbonQATOverflow1 - Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(173, 177, 181), // RibbonGroupSeparatorDark - Color.FromArgb(232, 235, 237), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 - Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.FromArgb(212, 215, 219), // GridListNormal2 - Color.FromArgb(210, 213, 218), // GridListPressed1 - Color.FromArgb(252, 253, 253), // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(241, 243, 243), // GridSheetColNormal1 - Color.FromArgb(200, 201, 202), // GridSheetColNormal2 - Color.FromArgb(208, 208, 208), // GridSheetColPressed1 - Color.FromArgb(166, 166, 166), // GridSheetColPressed2 - Color.FromArgb(255, 204, 153), // GridSheetColSelected1 - Color.FromArgb(255, 155, 104), // GridSheetColSelected2 - Color.FromArgb(231, 231, 231), // GridSheetRowNormal - Color.FromArgb(184, 191, 196), // GridSheetRowPressed - Color.FromArgb(245, 199, 149), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(194, 217, 240), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(169, 177, 184), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(255, 255, 255), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(232, 234, 236), // InputControlBackInactive - Color.FromArgb(124, 124, 124), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(235, 235, 235), // ContextMenuHeading - Color.FromArgb( 76, 83, 92), // ContextMenuHeadingText - Color.FromArgb(239, 239, 239), // ContextMenuImageColumn - Color.FromArgb(250, 250, 250), // AppButtonBack1 - Color.FromArgb(217, 226, 230), // AppButtonBack2 - Color.FromArgb(169, 174, 180), // AppButtonBorder - Color.FromArgb(207, 212, 217), // AppButtonOuter1 - Color.FromArgb(194, 200, 208), // AppButtonOuter2 - Color.FromArgb(217, 221, 226), // AppButtonOuter3 - Color.FromArgb(250, 250, 250), // AppButtonInner1 - Color.FromArgb(169, 174, 180), // AppButtonInner2 - Color.FromArgb(241, 242, 245), // AppButtonMenuDocs - Color.FromArgb(76, 83, 92), // AppButtonMenuDocsText - Color.FromArgb(168, 167, 191), // SeparatorHighInternalBorder1 - Color.FromArgb(119, 118, 151), // SeparatorHighInternalBorder2 - Color.FromArgb(169, 177, 184), // RibbonGalleryBorder - Color.FromArgb(232, 234, 236), // RibbonGalleryBackNormal - Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking - Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 - Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty // RibbonDropArrowDark - }; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.SilverContextMenuSub; + + #endregion + + #region Color Arrays + + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(130, 130, 130), // Tick marks + Color.FromArgb(156, 160, 165), // Top track + Color.FromArgb(226, 220, 235), // Bottom track + Color.FromArgb(196, 190, 205), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(80, 81, 82) // Border (normal) position + ]; + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb( 56, 63, 70), // TextLabelControl + Color.FromArgb( 56, 63, 70), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(141, 148, 157), // ButtonNormalBorder1 + Color.FromArgb(131, 138, 147), // ButtonNormalBorder2 + Color.FromArgb(203, 210, 219), // ButtonNormalBack1 + Color.FromArgb(240, 244, 249), // ButtonNormalBack2 + Color.FromArgb(186, 185, 206), // ButtonNormalDefaultBack1 + Color.FromArgb(222, 226, 236), // ButtonNormalDefaultBack2 + Color.FromArgb(202, 204, 214), // ButtonNormalNavigatorBack1 + Color.FromArgb(222, 226, 236), // ButtonNormalNavigatorBack2 + Color.FromArgb(208, 212, 221), // PanelClient + Color.FromArgb(200, 204, 211), // PanelAlternative + Color.FromArgb(111, 112, 116), // ControlBorder + Color.FromArgb(240, 241, 242), // SeparatorHighBorder1 + Color.FromArgb(195, 200, 206), // SeparatorHighBorder2 + Color.FromArgb(246, 247, 248), // HeaderPrimaryBack1 + Color.FromArgb(218, 223, 230), // HeaderPrimaryBack2 + Color.FromArgb(213, 219, 231), // HeaderSecondaryBack1 + Color.FromArgb(213, 219, 231), // HeaderSecondaryBack2 + Color.FromArgb( 21, 66, 139), // HeaderText + Color.FromArgb( 46, 53, 62), // StatusStripText + Color.FromArgb(155, 163, 167), // ButtonBorder + Color.FromArgb(255, 255, 255), // SeparatorLight + Color.FromArgb(110, 109, 143), // SeparatorDark + Color.FromArgb(248, 248, 248), // GripLight + Color.FromArgb(112, 118, 126), // GripDark + Color.FromArgb(208, 212, 221), // ToolStripBack + Color.FromArgb(230, 232, 237), // StatusStripLight + Color.FromArgb(189, 195, 202), // StatusStripDark + Color.FromArgb(239, 239, 239), // ImageMargin + Color.FromArgb(243, 244, 250), // ToolStripBegin + Color.FromArgb(218, 219, 231), // ToolStripMiddle + Color.FromArgb(173, 171, 201), // ToolStripEnd + Color.FromArgb(179, 178, 200), // OverflowBegin + Color.FromArgb(152, 151, 177), // OverflowMiddle + Color.FromArgb(124, 124, 148), // OverflowEnd + Color.FromArgb(124, 124, 148), // ToolStripBorder + Color.FromArgb(114, 120, 128), // FormBorderActive + Color.FromArgb(180, 185, 192), // FormBorderInactive + Color.FromArgb(222, 221, 222), // FormBorderActiveLight + Color.FromArgb(187, 186, 186), // FormBorderActiveDark + Color.FromArgb(240, 240, 240), // FormBorderInactiveLight + Color.FromArgb(224, 224, 224), // FormBorderInactiveDark + Color.FromArgb(172, 175, 183), // FormBorderHeaderActive + Color.FromArgb(182, 181, 181), // FormBorderHeaderInactive + Color.FromArgb(192, 195, 202), // FormBorderHeaderActive1 + Color.FromArgb(240, 243, 250), // FormBorderHeaderActive2 + Color.FromArgb(217, 219, 225), // FormBorderHeaderInctive1 + Color.FromArgb(244, 247, 251), // FormBorderHeaderInctive2 + Color.FromArgb( 53, 110, 170), // FormHeaderShortActive + Color.FromArgb(138, 138, 138), // FormHeaderShortInactive + Color.FromArgb( 92, 98, 106), // FormHeaderLongActive + Color.FromArgb(138, 138, 138), // FormHeaderLongInactive + Color.FromArgb(189, 199, 212), // FormButtonBorderTrack + Color.FromArgb(222, 230, 242), // FormButtonBack1Track + Color.FromArgb(255, 255, 255), // FormButtonBack2Track + Color.FromArgb(149, 154, 160), // FormButtonBorderPressed + Color.FromArgb(125, 131, 140), // FormButtonBack1Pressed + Color.FromArgb(213, 226, 233), // FormButtonBack2Pressed + Color.Black, // TextButtonFormNormal + Color.Black, // TextButtonFormTracking + Color.Black, // TextButtonFormPressed + Color.Silver, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Silver, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb( 56, 63, 70), // TextLabelPanel + Color.FromArgb( 76, 83, 92), // RibbonTabTextNormal + Color.FromArgb( 76, 83, 92), // RibbonTabTextChecked + Color.FromArgb(190, 190, 190), // RibbonTabSelected1 + Color.FromArgb(198, 250, 255), // RibbonTabSelected2 + Color.FromArgb(247, 248, 249), // RibbonTabSelected3 + Color.FromArgb(245, 245, 247), // RibbonTabSelected4 + Color.FromArgb(239, 234, 241), // RibbonTabSelected5 + Color.FromArgb(189, 190, 193), // RibbonTabTracking1 + Color.FromArgb(255, 180, 86), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 + Color.FromArgb(175, 176, 179), // RibbonTabSeparatorColor + Color.FromArgb(243, 245, 249), // RibbonGroupsArea1 + Color.FromArgb(249, 249, 249), // RibbonGroupsArea2 + Color.FromArgb(213, 219, 231), // RibbonGroupsArea3 + Color.FromArgb(210, 210, 210), // RibbonGroupsArea4 + Color.FromArgb(190, 190, 190), // RibbonGroupsArea5 + Color.FromArgb(189, 191, 193), // RibbonGroupBorder1 + Color.FromArgb(133, 133, 133), // RibbonGroupBorder2 + Color.FromArgb(223, 227, 239), // RibbonGroupTitle1 + Color.FromArgb(195, 199, 209), // RibbonGroupTitle2 + Color.FromArgb(183, 183, 183), // RibbonGroupBorderContext1 + Color.FromArgb(131, 131, 131), // RibbonGroupBorderContext2 + Color.FromArgb(223, 227, 239), // RibbonGroupTitleContext1 + Color.FromArgb(195, 199, 209), // RibbonGroupTitleContext2 + Color.FromArgb(101, 104, 112), // RibbonGroupDialogDark + Color.FromArgb(242, 242, 242), // RibbonGroupDialogLight + Color.FromArgb(222, 226, 238), // RibbonGroupTitleTracking1 + Color.FromArgb(179, 185, 199), // RibbonGroupTitleTracking2 + Color.FromArgb(128, 128, 128), // RibbonMinimizeBarDark + Color.FromArgb(220, 225, 235), // RibbonMinimizeBarLight + Color.FromArgb(183, 183, 183), // RibbonGroupCollapsedBorder1 + Color.FromArgb(145, 145, 145), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(225, 227, 227), // RibbonGroupCollapsedBorder4 + Color.FromArgb(242, 246, 246), // RibbonGroupCollapsedBack1 + Color.FromArgb(207, 212, 220), // RibbonGroupCollapsedBack2 + Color.FromArgb(196, 203, 214), // RibbonGroupCollapsedBack3 + Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBack4 + Color.FromArgb(188, 193, 213), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(142, 178, 179), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.White, // RibbonGroupCollapsedBorderT4 + Color.FromArgb(245, 248, 248), // RibbonGroupCollapsedBackT1 + Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 + Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 + Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 + Color.FromArgb(160, 160, 160), // RibbonGroupFrameBorder1 + Color.FromArgb(209, 209, 209), // RibbonGroupFrameBorder2 + Color.FromArgb(239, 242, 243), // RibbonGroupFrameInside1 + Color.FromArgb(226, 229, 234), // RibbonGroupFrameInside2 + Color.FromArgb(220, 224, 231), // RibbonGroupFrameInside3 + Color.FromArgb(232, 234, 238), // RibbonGroupFrameInside4 + Color.FromArgb( 76, 83, 92), // RibbonGroupCollapsedText + Color.FromArgb(179, 185, 195), // AlternatePressedBack1 + Color.FromArgb(216, 224, 224), // AlternatePressedBack2 + Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(157, 166, 174), // FormButtonBack1Checked + Color.FromArgb(222, 230, 242), // FormButtonBack2Checked + Color.FromArgb(149, 154, 160), // FormButtonBorderCheck + Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack + Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack + Color.FromArgb(180, 180, 180), // RibbonQATMini1 + Color.FromArgb(210, 215, 221), // RibbonQATMini2 + Color.FromArgb(195, 200, 206), // RibbonQATMini3 + Color.FromArgb(10, Color.White), // RibbonQATMini4 + Color.FromArgb(32, Color.White), // RibbonQATMini5 + Color.FromArgb(200, 200, 200), // RibbonQATMini1I + Color.FromArgb(233, 234, 238), // RibbonQATMini2I + Color.FromArgb(223, 224, 228), // RibbonQATMini3I + Color.FromArgb(10, Color.White), // RibbonQATMini4I + Color.FromArgb(32, Color.White), // RibbonQATMini5I + Color.FromArgb(217, 222, 230), // RibbonQATFullbar1 + Color.FromArgb(214, 219, 227), // RibbonQATFullbar2 + Color.FromArgb(194, 201, 212), // RibbonQATFullbar3 + Color.FromArgb(103, 103, 103), // RibbonQATButtonDark + Color.FromArgb(225, 225, 225), // RibbonQATButtonLight + Color.FromArgb(219, 218, 228), // RibbonQATOverflow1 + Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 + Color.FromArgb(173, 177, 181), // RibbonGroupSeparatorDark + Color.FromArgb(232, 235, 237), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 + Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.FromArgb(212, 215, 219), // GridListNormal2 + Color.FromArgb(210, 213, 218), // GridListPressed1 + Color.FromArgb(252, 253, 253), // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(241, 243, 243), // GridSheetColNormal1 + Color.FromArgb(200, 201, 202), // GridSheetColNormal2 + Color.FromArgb(208, 208, 208), // GridSheetColPressed1 + Color.FromArgb(166, 166, 166), // GridSheetColPressed2 + Color.FromArgb(255, 204, 153), // GridSheetColSelected1 + Color.FromArgb(255, 155, 104), // GridSheetColSelected2 + Color.FromArgb(231, 231, 231), // GridSheetRowNormal + Color.FromArgb(184, 191, 196), // GridSheetRowPressed + Color.FromArgb(245, 199, 149), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(194, 217, 240), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(169, 177, 184), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(255, 255, 255), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(232, 234, 236), // InputControlBackInactive + Color.FromArgb(124, 124, 124), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(235, 235, 235), // ContextMenuHeading + Color.FromArgb( 76, 83, 92), // ContextMenuHeadingText + Color.FromArgb(239, 239, 239), // ContextMenuImageColumn + Color.FromArgb(250, 250, 250), // AppButtonBack1 + Color.FromArgb(217, 226, 230), // AppButtonBack2 + Color.FromArgb(169, 174, 180), // AppButtonBorder + Color.FromArgb(207, 212, 217), // AppButtonOuter1 + Color.FromArgb(194, 200, 208), // AppButtonOuter2 + Color.FromArgb(217, 221, 226), // AppButtonOuter3 + Color.FromArgb(250, 250, 250), // AppButtonInner1 + Color.FromArgb(169, 174, 180), // AppButtonInner2 + Color.FromArgb(241, 242, 245), // AppButtonMenuDocs + Color.FromArgb(76, 83, 92), // AppButtonMenuDocsText + Color.FromArgb(168, 167, 191), // SeparatorHighInternalBorder1 + Color.FromArgb(119, 118, 151), // SeparatorHighInternalBorder2 + Color.FromArgb(169, 177, 184), // RibbonGalleryBorder + Color.FromArgb(232, 234, 236), // RibbonGalleryBackNormal + Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking + Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 + Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR // RibbonDropArrowDark + ]; + + #endregion + #endregion #region Identity @@ -282,8 +307,8 @@ static PaletteOffice2007Silver() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.GallerySilverBlack); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2007RadioButtonImageResources.RadioButton2007BlueD, Office2007RadioButtonImageResources.RadioButton2007SilverN, Office2007RadioButtonImageResources.RadioButton2007SilverT, @@ -292,7 +317,7 @@ static PaletteOffice2007Silver() Office2007RadioButtonImageResources.RadioButton2007SilverNC, Office2007RadioButtonImageResources.RadioButton2007SilverTC, Office2007RadioButtonImageResources.RadioButton2007SilverPC - }; + ]; } /// @@ -386,5 +411,39 @@ public PaletteOffice2007Silver() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Bases/PaletteOffice2010Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Bases/PaletteOffice2010Base.cs index 48a38039f..447b50e5c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Bases/PaletteOffice2010Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Bases/PaletteOffice2010Base.cs @@ -1,12 +1,12 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion @@ -64,7 +64,7 @@ public abstract class PaletteOffice2010Base : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -83,8 +83,8 @@ public abstract class PaletteOffice2010Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -123,7 +123,7 @@ public abstract class PaletteOffice2010Base : PaletteBase #region Colors private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); + private static readonly Color _disabledText2 = Color.FromArgb(205, 205, 205); //(128, 128, 128); private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); @@ -136,7 +136,7 @@ public abstract class PaletteOffice2010Base : PaletteBase private static readonly Color _contextTabSeparator = Color.White; private static readonly Color _contextTextColor = Color.White; private static readonly Color _todayBorder = Color.FromArgb(187, 85, 3); - private static readonly Color _toolTipBack1 = Color.FromArgb(255, 255, 255); + private static readonly Color _toolTipBack1 = Color.White; private static readonly Color _toolTipBack2 = Color.FromArgb(201, 217, 239); private static readonly Color _toolTipBorder = Color.FromArgb(118, 118, 118); private static readonly Color _toolTipText = Color.FromArgb(76, 76, 76); @@ -162,36 +162,36 @@ public abstract class PaletteOffice2010Base : PaletteBase #region Color Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(237, 201, 88), // Button, Tracking, Border 1 Color.FromArgb(243, 213, 73), // Button, Tracking, Border 2 @@ -199,11 +199,11 @@ public abstract class PaletteOffice2010Base : PaletteBase Color.FromArgb(194, 158, 71), // Button, Pressed, Border 2 Color.FromArgb(194, 138, 48), // Button, Checked, Border 1 Color.FromArgb(194, 164, 77) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(248, 225, 135), // Button, Tracking, Back 1 @@ -214,19 +214,19 @@ public abstract class PaletteOffice2010Base : PaletteBase Color.FromArgb(255, 244, 128), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2010 _table; + protected KryptonColorTable2010? Table { get; set; } private readonly Color[] _ribbonColors; private readonly Color[] _trackBarColors; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -239,10 +239,10 @@ public abstract class PaletteOffice2010Base : PaletteBase /// Array of images for radio button. /// Array of track bar specific colors. protected PaletteOffice2010Base([DisallowNull] Color[] schemeColors, - [DisallowNull] ImageList checkBoxList, - [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, - Color[] trackBarColors) + [DisallowNull] ImageList checkBoxList, + [DisallowNull] ImageList galleryButtonList, + [DisallowNull] Image?[] radioButtonArray, + Color[] trackBarColors) { Debug.Assert(schemeColors != null); Debug.Assert(checkBoxList != null); @@ -250,6 +250,8 @@ protected PaletteOffice2010Base([DisallowNull] Color[] schemeColors, Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2010Base); + if (schemeColors != null) { _ribbonColors = schemeColors; @@ -276,12 +278,11 @@ protected PaletteOffice2010Base([DisallowNull] Color[] schemeColors, } #endregion - #region AllowFormChrome + #region ColorTable /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. + /// Gets access to the color table instance. /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; + public override KryptonColorTable ColorTable => Table ??= new KryptonColorTable2010(_ribbonColors, InheritBool.True, this); #endregion @@ -345,10 +346,39 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, return style switch { - PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, + PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or + PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or + PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or + PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or + PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or + PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or + PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or + PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or + PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or + PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or + PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or + PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or + PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or + PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or + PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or + PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or + PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or + PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or + PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or + PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or + PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or + PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or + PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or + PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or + PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or + PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 or + PaletteBackStyle.GridBackgroundCustom2 or PaletteBackStyle.GridBackgroundCustom3 or PaletteBackStyle.GridHeaderColumnList or + PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or + PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or + PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or + PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or + PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -364,7 +394,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -419,16 +449,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -453,7 +483,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -461,7 +491,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -568,23 +598,23 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { // TODO: Change disabled colour for all 2010, 2013 & 365 themes - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -610,7 +640,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -624,7 +654,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -639,7 +669,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -693,11 +723,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -706,7 +736,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -714,7 +744,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -821,22 +851,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -858,13 +888,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -878,7 +908,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -932,7 +962,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -942,7 +972,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1186,17 +1216,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1204,21 +1234,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1229,8 +1259,8 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], + ? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], @@ -1238,36 +1268,36 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1275,7 +1305,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1286,7 +1316,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1312,17 +1342,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1330,22 +1360,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1364,23 +1394,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1391,7 +1421,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1399,7 +1429,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1410,7 +1440,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1534,7 +1564,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1639,7 +1669,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1732,12 +1762,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1753,12 +1783,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1774,12 +1804,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1790,7 +1820,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1827,7 +1857,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2071,27 +2101,32 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet { return style switch { - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl => state switch - { - PaletteState.LinkNotVisitedOverride => _ribbonColors[ - (int)SchemeOfficeColors.LinkNotVisitedOverrideControl], - PaletteState.LinkVisitedOverride => _ribbonColors[ - (int)SchemeOfficeColors.LinkVisitedOverrideControl], - PaletteState.LinkPressedOverride => _ribbonColors[ - (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty - }, - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch - { - PaletteState.LinkNotVisitedOverride => _ribbonColors[ - (int)SchemeOfficeColors.LinkNotVisitedOverridePanel], - PaletteState.LinkVisitedOverride => _ribbonColors[ - (int)SchemeOfficeColors.LinkVisitedOverridePanel], - PaletteState.LinkPressedOverride => _ribbonColors[ - (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty - }, - _ => Color.Empty + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or + PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl + => state switch + { + PaletteState.LinkNotVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkNotVisitedOverrideControl], + PaletteState.LinkVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkVisitedOverrideControl], + PaletteState.LinkPressedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkPressedOverrideControl], + _ => GlobalStaticValues.EMPTY_COLOR + }, + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or + PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or + PaletteContentStyle.LabelGroupBoxCaption + => state switch + { + PaletteState.LinkNotVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkNotVisitedOverridePanel], + PaletteState.LinkVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkVisitedOverridePanel], + PaletteState.LinkPressedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkPressedOverridePanel], + _ => GlobalStaticValues.EMPTY_COLOR + }, + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2120,41 +2155,67 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet return style switch { - PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], - PaletteContentStyle.HeaderDockActive => Color.Black, - PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], - PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], - PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], - PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 + or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList + or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 + or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet + or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 + or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary + or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 + => _ribbonColors[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive + => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or + PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or + PaletteContentStyle.InputControlCustom3 + => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or + PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or + PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or + PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or + PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate + => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip + => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], - PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or + PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or + PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or + PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or + PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 + => state != PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, - PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch - { - PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], - _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] - }, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or + PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed + => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] + }, PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch { PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], - PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal + => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled1], - PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal1] + : _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or + PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2170,7 +2231,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2369,7 +2430,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2399,7 +2460,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2571,7 +2632,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2647,7 +2708,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2944,6 +3005,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2969,6 +3031,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3029,6 +3092,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3257,7 +3321,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3282,7 +3346,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3380,7 +3444,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3452,6 +3516,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3463,16 +3528,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3497,12 +3567,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3553,7 +3625,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3568,6 +3640,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3583,11 +3656,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3605,16 +3679,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } @@ -3661,6 +3737,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3678,6 +3755,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3693,6 +3771,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3714,10 +3793,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3725,10 +3805,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3766,7 +3847,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3779,6 +3860,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3800,16 +3882,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3845,7 +3929,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3858,6 +3942,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3879,16 +3964,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3916,7 +4003,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -3937,6 +4024,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3958,16 +4046,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4013,6 +4103,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4032,7 +4123,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4044,12 +4135,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColors[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4066,7 +4158,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4082,11 +4174,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4103,7 +4196,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4121,12 +4214,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4146,21 +4240,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4169,11 +4263,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4193,21 +4288,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4216,11 +4311,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4228,14 +4324,6 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat } #endregion - #region ColorTable - /// - /// Gets access to the color table instance. - /// - public override KryptonColorTable ColorTable => _table ??= new KryptonColorTable2010(_ribbonColors, InheritBool.True, this); - - #endregion - #region OnUserPreferenceChanged /// /// Handle a change in the user preferences. @@ -4245,7 +4333,7 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { // Remove the current table, so it gets regenerated when next requested - _table = null; + Table = null; // Update fonts to reflect any change in system settings DefineFonts(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlackDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlackDarkMode.cs index b57e9c968..108d2c7ff 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlackDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlackDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,13 +19,38 @@ namespace Krypton.Toolkit public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase { #region Static Fields + + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(41, 57, 85); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(41, 41, 41); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(79, 79, 79); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlackCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlackCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlackCloseActive; @@ -54,20 +79,20 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase #endregion #region Colour Arrays - private static readonly Color _disabledRibbonText = Color.FromArgb(205, 205, 205); + private static readonly Color _disabledRibbonText = Color.FromArgb(166, 166, 166); private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(17, 17, 17), // Tick marks Color.FromArgb(37, 37, 37), // Top track Color.FromArgb(174, 174, 174), // Bottom track Color.FromArgb(131, 132, 132), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(35, 35, 35) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.White, // TextLabelControl Color.White, // TextButtonNormal Color.White, // TextButtonChecked @@ -113,15 +138,15 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase Color.FromArgb(153, 153, 153), // FormBorderInactiveLight Color.FromArgb(171, 171, 171), // FormBorderInactiveDark Color.FromArgb(65, 65, 65), // FormBorderHeaderActive - Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive + Color.FromArgb(100, 100, 100), // FormBorderHeaderInactive Color.FromArgb(42, 43, 43), // FormBorderHeaderActive1 Color.FromArgb(74, 74, 74), // FormBorderHeaderActive2 Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 - Color.FromArgb(174, 209, 255), // FormHeaderShortActive - Color.FromArgb(225, 225, 225), // FormHeaderShortInactive + Color.FromArgb(255, 255, 255), // FormHeaderShortActive + Color.FromArgb(100, 100, 100), // FormHeaderShortInactive Color.White, // FormHeaderLongActive - Color.FromArgb(225, 225, 225), // FormHeaderLongInactive + Color.FromArgb(100, 100, 100), // FormHeaderLongInactive Color.FromArgb(88, 95, 104), // FormButtonBorderTrack Color.FromArgb(91, 105, 123), // FormButtonBack1Track Color.FromArgb(173, 199, 214), // FormButtonBack2Track @@ -138,7 +163,7 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase Color.Violet, // LinkVisitedOverridePanel Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel Color.White, // TextLabelPanel - Color.FromArgb(10, 10, 10), // RibbonTabTextNormal + Color.FromArgb(255, 255, 255), // RibbonTabTextNormal Color.FromArgb(41, 41, 41), // RibbonTabTextChecked Color.FromArgb(190, 190, 190), // RibbonTabSelected1 Color.FromArgb(199, 250, 254), // RibbonTabSelected2 @@ -146,18 +171,18 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase Color.FromArgb(241, 241, 241), // RibbonTabSelected4 Color.FromArgb(213, 217, 223), // RibbonTabSelected5 Color.FromArgb(159, 156, 150), // RibbonTabTracking1 - Color.FromArgb(235, 194, 39), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(79, 79, 85), // RibbonTabTracking2 + Color.FromArgb(219, 219, 237), // RibbonTabHighlight1 + Color.FromArgb(184, 184, 199), // RibbonTabHighlight2 + Color.FromArgb(149, 149, 161), // RibbonTabHighlight3 + Color.FromArgb(114, 114, 123), // RibbonTabHighlight4 Color.FromArgb(123, 111, 68), // RibbonTabHighlight5 Color.FromArgb(54, 54, 54), // RibbonTabSeparatorColor - Color.FromArgb(190, 190, 190), // RibbonGroupsArea1 - Color.FromArgb(210, 210, 210), // RibbonGroupsArea2 - Color.FromArgb(180, 187, 197), // RibbonGroupsArea3 - Color.FromArgb(235, 235, 235), // RibbonGroupsArea4 - Color.FromArgb(215, 219, 224), // RibbonGroupsArea5 + Color.FromArgb(78, 78, 80), // RibbonGroupsArea1 + Color.FromArgb(115, 115, 118), // RibbonGroupsArea2 + Color.FromArgb(152, 152, 156), // RibbonGroupsArea3 + Color.FromArgb(189, 189, 194), // RibbonGroupsArea4 + Color.FromArgb(226, 226, 232), // RibbonGroupsArea5 Color.FromArgb(174, 176, 180), // RibbonGroupBorder1 Color.FromArgb(132, 132, 132), // RibbonGroupBorder2 Color.FromArgb(182, 184, 184), // RibbonGroupTitle1 @@ -194,7 +219,7 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase Color.FromArgb(222, 225, 229), // RibbonGroupFrameInside2 Color.FromArgb(214, 218, 223), // RibbonGroupFrameInside3 Color.FromArgb(222, 225, 230), // RibbonGroupFrameInside4 - Color.FromArgb(70, 70, 70), // RibbonGroupCollapsedText + Color.FromArgb(255, 255, 255), // RibbonGroupCollapsedText - old value 70, 70, 70 Color.FromArgb(158, 163, 172), // AlternatePressedBack1 Color.FromArgb(212, 215, 216), // AlternatePressedBack2 Color.FromArgb(124, 125, 125), // AlternatePressedBorder1 @@ -251,16 +276,16 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(91, 91, 91), // GridDataCellSelected Color.White, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(100, 100, 100), // InputControlTextDisabled Color.FromArgb(137, 137, 137), // InputControlBorderNormal Color.FromArgb(204, 204, 204), // InputControlBorderDisabled Color.FromArgb(10, 10, 10), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(232, 232, 232), // InputControlBackInactive - Color.FromArgb(91, 91, 91), // InputDropDownNormal1 - Color.FromArgb(88, 88, 88), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(102,102, 102), // InputControlBackDisabled + Color.FromArgb(78, 78, 80), // InputControlBackInactive + Color.White, // InputDropDownNormal1 + Color.FromArgb(100, 100, 100), // InputDropDownNormal2 + Color.FromArgb(82, 82, 82), // InputDropDownDisabled1 + Color.FromArgb(95, 95, 95), // InputDropDownDisabled2 Color.FromArgb(41, 41, 41), // ContextMenuHeading Color.White, // ContextMenuHeadingText Color.FromArgb(54, 54, 54), // ContextMenuImageColumn @@ -277,14 +302,14 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase Color.FromArgb(240, 241, 242), // SeparatorHighInternalBorder1 Color.FromArgb(195, 200, 206), // SeparatorHighInternalBorder2 Color.FromArgb(172, 172, 172), // RibbonGalleryBorder - Color.FromArgb(218, 226, 226), // RibbonGalleryBackNormal + Color.FromArgb(41, 41, 41), // RibbonGalleryBackNormal - Old value 218, 226, 226 Color.FromArgb(247, 247, 247), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 Color.FromArgb(225, 225, 225), // RibbonDropArrowLight Color.FromArgb(103, 103, 103), // RibbonDropArrowDark Color.FromArgb(137, 137, 137), // HeaderDockInactiveBack1 @@ -298,7 +323,7 @@ public class PaletteOffice2010BlackDarkMode : PaletteOffice2010BlackDarkModeBase Color.FromArgb(91, 91, 91), // ButtonNavigatorChecked1 Color.FromArgb(73, 73, 73), // ButtonNavigatorChecked2 Color.FromArgb(91, 91, 91) // ToolTipBottom - }; + ]; #endregion @@ -320,8 +345,8 @@ static PaletteOffice2010BlackDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -330,7 +355,7 @@ static PaletteOffice2010BlackDarkMode() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -504,7 +529,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -541,7 +566,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -578,7 +603,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -760,6 +785,41 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac return base.GetRibbonBackColorStyle(style, state); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } #endregion @@ -814,7 +874,7 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -833,8 +893,8 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -874,9 +934,9 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase private static readonly Color _gridTextColor = Color.White; private static readonly Color _calendarTextColor = Color.White; - private static readonly Color _disabledText2 = Color.FromArgb(78, 78, 78); - private static readonly Color _disabledText = Color.FromArgb(172, 172, 172); - private static readonly Color _disabledBack = Color.FromArgb(128, 128, 128); + private static readonly Color _disabledText2 = Color.FromArgb(160, 160, 160); //(166, 166, 166); + private static readonly Color _disabledText = Color.FromArgb(32, 32, 32); + private static readonly Color _disabledBack = Color.FromArgb(102, 102, 102); private static readonly Color _disabledBack2 = Color.FromArgb(128, 128, 128); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -891,7 +951,7 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase private static readonly Color _toolTipBack1 = Color.FromArgb(10, 10, 10); private static readonly Color _toolTipBack2 = Color.FromArgb(91, 91, 91); private static readonly Color _toolTipBorder = Color.FromArgb(118, 118, 118); - private static readonly Color _toolTipText = Color.FromArgb(76, 76, 76); + private static readonly Color _toolTipText = Color.FromArgb(255, 255, 255); //(76, 76, 76); private static readonly Color _contextMenuBack = Color.FromArgb(10, 10, 10); private static readonly Color _contextMenuBorder = Color.FromArgb(134, 134, 134); private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); @@ -913,39 +973,49 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase #region Colour Arrays - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(255, 251, 230), Color.FromArgb(178, 178, 178), Color.FromArgb(176, 176, 176), Color.FromArgb(179, 179, 179), Color.FromArgb(160, 160, 160) - }; + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), Color.FromArgb(185, 185, 185), Color.FromArgb(35, 35, 35), Color.FromArgb(50, 50, 50), Color.FromArgb(100, 100, 100) - }; + ]; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(180, 180, 180), // Button, Disabled, Border + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(187, 186, 186), // Button, Tracking, Border 1 Color.FromArgb(139, 139, 139), // Button, Tracking, Border 2 Color.FromArgb(30, 30, 30), // Button, Pressed, Border 1 Color.FromArgb(4, 3, 3), // Button, Pressed, Border 2 Color.FromArgb(30, 30, 30), // Button, Checked, Border 1 Color.FromArgb(4, 3, 3) // Button, Checked, Border 2 - }; + ]; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 - Color.FromArgb(91, 91, 91), // Button, Tracking, Back 1 + Color.FromArgb(129, 129, 129), // Button, Tracking, Back 1 Color.FromArgb(89, 89, 89), // Button, Tracking, Back 2 Color.FromArgb(91, 91, 91), // Button, Pressed, Back 1 Color.FromArgb(89, 89, 89), // Button, Pressed, Back 2 @@ -953,7 +1023,7 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase Color.FromArgb(88, 88, 88), // Button, Checked, Back 2 Color.FromArgb(41, 41, 41), // Button, Checked Tracking, Back 1 Color.FromArgb(70, 70, 70) // Button, Checked Tracking, Back 2 - }; + ]; #endregion @@ -965,7 +1035,7 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -980,7 +1050,7 @@ public abstract class PaletteOffice2010BlackDarkModeBase : PaletteBase protected PaletteOffice2010BlackDarkModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -989,6 +1059,8 @@ protected PaletteOffice2010BlackDarkModeBase([DisallowNull] Color[] schemeColors Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2010BlackDarkModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -1016,15 +1088,6 @@ protected PaletteOffice2010BlackDarkModeBase([DisallowNull] Color[] schemeColors } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -1104,7 +1167,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1159,16 +1222,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -1193,7 +1256,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -1201,7 +1264,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1344,22 +1407,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1385,7 +1448,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1399,7 +1462,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1414,7 +1477,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1468,11 +1531,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1481,7 +1544,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1489,7 +1552,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1611,8 +1674,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ControlRibbonAppMenu: return _ribbonColours[(int)SchemeOfficeColors.AppButtonBack2]; case PaletteBackStyle.ControlToolTip: - // Note: It thinks that ToolTipBottom = 224 in the SchemeOfficeColors array, but it's assigned to 225? - return _ribbonColours[225]; //_ribbonColours[(int)SchemeOfficeColors.ToolTipBottom]; + return _toolTipBack2; case PaletteBackStyle.ContextMenuOuter: return _contextMenuBack; case PaletteBackStyle.ContextMenuSeparator: @@ -1633,22 +1695,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1670,13 +1732,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1686,11 +1748,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _buttonBackColors[1], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorTrack2], PaletteState.Pressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorPressed2], - PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked2], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => Color.FromArgb(73, 73, 73), // ToDo: Find out why this is a problem... _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorChecked2], _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1744,7 +1806,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1754,7 +1816,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1998,17 +2060,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2016,21 +2078,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -2050,36 +2112,36 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -2087,7 +2149,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2098,7 +2160,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2124,17 +2186,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -2142,22 +2204,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -2176,23 +2238,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -2203,7 +2265,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -2211,7 +2273,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -2222,7 +2284,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2346,7 +2408,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2451,7 +2513,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2544,12 +2606,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2565,12 +2627,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2586,12 +2648,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2602,7 +2664,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2639,7 +2701,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2891,7 +2953,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2901,9 +2963,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2987,7 +3049,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3191,7 +3253,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -3221,7 +3283,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3393,7 +3455,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3475,7 +3537,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3778,6 +3840,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3803,6 +3866,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3863,6 +3927,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -4091,7 +4156,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -4116,14 +4181,14 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. /// /// Palette value should be applicable to this state. /// Font value. - public override Color GetRibbonContextTextColor(PaletteState state) => _contextTextColor; + public override Color GetRibbonContextTextColor(PaletteState state) => _contextTextColor/*_ribbonColours((int)SchemeOfficeColors.RibbonTabTextNormal) */; /// /// Gets the dark disabled color used for ribbon glyphs. @@ -4214,7 +4279,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -4286,6 +4351,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4297,16 +4363,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4331,12 +4402,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4387,7 +4460,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4402,6 +4475,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4417,11 +4491,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4439,16 +4514,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4495,6 +4572,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4512,6 +4590,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4527,6 +4606,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4548,10 +4628,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4559,10 +4640,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4600,7 +4682,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4613,6 +4695,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4634,16 +4717,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4679,7 +4764,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4692,6 +4777,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4713,16 +4799,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4750,7 +4838,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4771,6 +4859,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4792,16 +4881,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4847,6 +4938,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4866,7 +4958,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4878,12 +4970,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4900,7 +4993,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4916,11 +5009,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4937,7 +5031,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4955,12 +5049,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4980,21 +5075,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5003,11 +5098,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5027,21 +5123,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -5050,11 +5146,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -5152,7 +5249,7 @@ public KryptonColorTable2010BlackDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -5695,15 +5792,10 @@ public KryptonColorTable2010BlackDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueDarkMode.cs index 580498278..9deefb1b5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,6 +20,30 @@ public class PaletteOffice2010BlueDarkMode : PaletteOffice2010BlueDarkModeBase { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(41, 57, 85); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(43, 74, 115); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(77, 132, 204); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -29,9 +53,9 @@ public class PaletteOffice2010BlueDarkMode : PaletteOffice2010BlueDarkModeBase #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -57,238 +81,245 @@ public class PaletteOffice2010BlueDarkMode : PaletteOffice2010BlueDarkModeBase #region Colour Arrays - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks Color.FromArgb(116, 150, 194), // Top track Color.FromArgb(152, 190, 241), // Bottom track Color.FromArgb(142, 180, 231), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(63, 101, 152) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 21, 66, 139), // TextLabelControl - Color.FromArgb( 21, 66, 139), // TextButtonNormal - Color.Blue, // TextButtonChecked - Color.FromArgb(161, 189, 207), // ButtonNormalBorder - Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder - Color.FromArgb(210, 225, 244), // ButtonNormalBack1 - Color.FromArgb(235, 243, 254), // ButtonNormalBack2 - Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 - Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 - Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 - Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 - Color.FromArgb(134, 179, 236), // PanelClient - Color.FromArgb(63, 122, 197), // PanelAlternative - Color.FromArgb(101, 147, 207), // ControlBorder - Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 - Color.FromArgb(134, 179, 236), // HeaderPrimaryBack1 - Color.FromArgb(63, 122, 197), // HeaderPrimaryBack2 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 - Color.FromArgb( 21, 66, 139), // HeaderText - Color.FromArgb( 21, 66, 139), // StatusStripText - Color.FromArgb(121, 153, 194), // ButtonBorder - Color.FromArgb(255, 255, 255), // SeparatorLight - Color.FromArgb(154, 198, 255), // SeparatorDark - Color.FromArgb(248, 248, 248), // GripLight - Color.FromArgb(114, 152, 204), // GripDark - Color.FromArgb(63, 122, 197), // ToolStripBack - Color.FromArgb(63, 122, 197), // StatusStripLight - Color.FromArgb(134, 179, 236), // StatusStripDark - Color.FromArgb(63, 122, 197), // ImageMargin - Color.FromArgb(134, 179, 236), // ToolStripBegin - Color.FromArgb(222, 236, 255), // ToolStripMiddle - Color.FromArgb(152, 186, 230), // ToolStripEnd - Color.FromArgb(167, 204, 251), // OverflowBegin - Color.FromArgb(167, 204, 251), // OverflowMiddle - Color.FromArgb(101, 147, 207), // OverflowEnd - Color.FromArgb(111, 157, 217), // ToolStripBorder - Color.FromArgb(134, 179, 236), // FormBorderActive - Color.FromArgb(179, 209, 247), // FormBorderInactive - Color.FromArgb(134, 179, 236), // FormBorderActiveLight - Color.FromArgb(63, 122, 197), // FormBorderActiveDark - Color.FromArgb(179, 209, 247), // FormBorderInactiveLight - Color.FromArgb(96, 150, 220), // FormBorderInactiveDark - Color.FromArgb(134, 179, 236), // FormBorderHeaderActive - Color.FromArgb(179, 209, 247), // FormBorderHeaderInactive - Color.FromArgb(134, 179, 236), // FormBorderHeaderActive1 - Color.FromArgb(63, 122, 197), // FormBorderHeaderActive2 - Color.FromArgb(179, 209, 247), // FormBorderHeaderInctive1 - Color.FromArgb(96, 150, 220), // FormBorderHeaderInctive2 - Color.FromArgb(21, 66, 139), // FormHeaderShortActive - Color.FromArgb(160, 160, 160), // FormHeaderShortInactive - Color.FromArgb(105, 112, 121), // FormHeaderLongActive - Color.FromArgb(160, 160, 160), // FormHeaderLongInactive - Color.FromArgb(158, 193, 241), // FormButtonBorderTrack - Color.FromArgb(210, 228, 254), // FormButtonBack1Track - Color.FromArgb(255, 255, 255), // FormButtonBack2Track - Color.FromArgb(162, 191, 227), // FormButtonBorderPressed - Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed - Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed - Color.FromArgb( 21, 66, 139), // TextButtonFormNormal - Color.FromArgb( 21, 66, 139), // TextButtonFormTracking - Color.FromArgb( 21, 66, 139), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 21, 66, 139), // TextLabelPanel - Color.FromArgb( 21, 66, 139), // RibbonTabTextNormal - Color.FromArgb( 21, 66, 139), // RibbonTabTextChecked - Color.FromArgb(134, 179, 236), // RibbonTabSelected1 - Color.FromArgb(63, 122, 197), // RibbonTabSelected2 - Color.FromArgb(134, 179, 236), // RibbonTabSelected3 - Color.FromArgb(63, 122, 197), // RibbonTabSelected4 - Color.FromArgb(222, 232, 245), // RibbonTabSelected5 - Color.FromArgb(153, 187, 232), // RibbonTabTracking1 - Color.FromArgb(255, 180, 86), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 - Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 - Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor - Color.FromArgb(134, 179, 236), // RibbonGroupsArea1 - Color.FromArgb(63, 122, 197), // RibbonGroupsArea2 - Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 - Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 - Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 - Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 - Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 - Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 - Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 - Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 - Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 - Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark - Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight - Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 - Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 - Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark - Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight - Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 - Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 - Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 - Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 - Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 - Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 - Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 - Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 - Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 - Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 - Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 - Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 - Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 - Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 - Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 - Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 - Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 - Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 - Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 - Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 - Color.FromArgb( 21, 66, 139), // RibbonGroupCollapsedText - Color.FromArgb(118, 153, 200), // AlternatePressedBack1 - Color.FromArgb(184, 215, 253), // AlternatePressedBack2 - Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 - Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 - Color.FromArgb(150, 194, 239), // FormButtonBack1Checked - Color.FromArgb(210, 228, 254), // FormButtonBack2Checked - Color.FromArgb(158, 193, 241), // FormButtonBorderCheck - Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack - Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack - Color.FromArgb(154, 179, 213), // RibbonQATMini1 - Color.FromArgb(219, 231, 247), // RibbonQATMini2 - Color.FromArgb(195, 213, 236), // RibbonQATMini3 - Color.FromArgb(128, Color.White), // RibbonQATMini4 - Color.FromArgb(72, Color.White), // RibbonQATMini5 - Color.FromArgb(153, 176, 206), // RibbonQATMini1I - Color.FromArgb(226, 233, 241), // RibbonQATMini2I - Color.FromArgb(198, 210, 226), // RibbonQATMini3I - Color.FromArgb(128, Color.White), // RibbonQATMini4I - Color.FromArgb(72, Color.White), // RibbonQATMini5I - Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 - Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 - Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 - Color.FromArgb( 86, 125, 177), // RibbonQATButtonDark - Color.FromArgb(234, 242, 249), // RibbonQATButtonLight - Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 - Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark - Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 - Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor - Color.FromArgb(134, 179, 236), // GridListNormal1 - Color.FromArgb(63, 122, 197), // GridListNormal2 - Color.FromArgb(63, 122, 197), // GridListPressed1 - Color.FromArgb(252, 253, 255), // GridListPressed2 - Color.FromArgb(170, 195, 240), // GridListSelected - Color.FromArgb(134, 179, 236), // GridSheetColNormal1 - Color.FromArgb(63, 122, 197), // GridSheetColNormal2 - Color.FromArgb(223, 226, 228), // GridSheetColPressed1 - Color.FromArgb(188, 197, 210), // GridSheetColPressed2 - Color.FromArgb(249, 217, 159), // GridSheetColSelected1 - Color.FromArgb(241, 193, 95), // GridSheetColSelected2 - Color.FromArgb(228, 236, 247), // GridSheetRowNormal - Color.FromArgb(187, 196, 209), // GridSheetRowPressed - Color.FromArgb(255, 213, 141), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(194, 217, 240), // GridDataCellSelected - Color.Blue, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(171, 193, 222), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(134, 179, 236), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(234, 242, 251), // InputControlBackInactive - Color.FromArgb( 86, 125, 177), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(63, 122, 197), // ContextMenuHeadingBack - Color.FromArgb(0, 21, 110), // ContextMenuHeadingText - Color.FromArgb(63, 122, 197), // ContextMenuImageColumn - Color.FromArgb(134, 179, 236), // AppButtonBack1 - Color.FromArgb(63, 122, 197), // AppButtonBack2 - Color.FromArgb(155, 175, 202), // AppButtonBorder - Color.FromArgb(189, 211, 238), // AppButtonOuter1 - Color.FromArgb(176, 201, 234), // AppButtonOuter2 - Color.FromArgb(207, 224, 245), // AppButtonOuter3 - Color.White, // AppButtonInner1 - Color.FromArgb(155, 175, 202), // AppButtonInner2 - Color.FromArgb(63, 122, 197), // AppButtonMenuDocs - Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText - Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 - Color.FromArgb(185, 208, 237), // RibbonGalleryBorder - Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal - Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking - Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 - Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark - Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 - Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 - Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder - Color.FromArgb(0, 21, 110), // ButtonNavigatorText - Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 - Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 - Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 - Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 - Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 - Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 - Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + ]; + + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb(21, 66, 139), // TextLabelControl + Color.FromArgb(21, 66, 139), // TextButtonNormal + Color.Blue, // TextButtonChecked + Color.FromArgb(161, 189, 207), // ButtonNormalBorder + Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder + Color.FromArgb(210, 225, 244), // ButtonNormalBack1 + Color.FromArgb(235, 243, 254), // ButtonNormalBack2 + Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 + Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 + Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 + Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 + Color.FromArgb(134, 179, 236), // PanelClient + Color.FromArgb(63, 122, 197), // PanelAlternative + Color.FromArgb(101, 147, 207), // ControlBorder + Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 + Color.FromArgb(134, 179, 236), // HeaderPrimaryBack1 + Color.FromArgb(63, 122, 197), // HeaderPrimaryBack2 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 + Color.FromArgb(21, 66, 139), // HeaderText + Color.FromArgb(21, 66, 139), // StatusStripText + Color.FromArgb(121, 153, 194), // ButtonBorder + Color.FromArgb(255, 255, 255), // SeparatorLight + Color.FromArgb(154, 198, 255), // SeparatorDark + Color.FromArgb(248, 248, 248), // GripLight + Color.FromArgb(114, 152, 204), // GripDark + Color.FromArgb(63, 122, 197), // ToolStripBack + Color.FromArgb(63, 122, 197), // StatusStripLight + Color.FromArgb(134, 179, 236), // StatusStripDark + Color.FromArgb(63, 122, 197), // ImageMargin + Color.FromArgb(134, 179, 236), // ToolStripBegin + Color.FromArgb(222, 236, 255), // ToolStripMiddle + Color.FromArgb(152, 186, 230), // ToolStripEnd + Color.FromArgb(167, 204, 251), // OverflowBegin + Color.FromArgb(167, 204, 251), // OverflowMiddle + Color.FromArgb(101, 147, 207), // OverflowEnd + Color.FromArgb(111, 157, 217), // ToolStripBorder + Color.FromArgb(134, 179, 236), // FormBorderActive + Color.FromArgb(179, 209, 247), // FormBorderInactive + Color.FromArgb(134, 179, 236), // FormBorderActiveLight + Color.FromArgb(63, 122, 197), // FormBorderActiveDark + Color.FromArgb(179, 209, 247), // FormBorderInactiveLight + Color.FromArgb(96, 150, 220), // FormBorderInactiveDark + Color.FromArgb(134, 179, 236), // FormBorderHeaderActive + Color.FromArgb(179, 209, 247), // FormBorderHeaderInactive + Color.FromArgb(134, 179, 236), // FormBorderHeaderActive1 + Color.FromArgb(63, 122, 197), // FormBorderHeaderActive2 + Color.FromArgb(179, 209, 247), // FormBorderHeaderInctive1 + Color.FromArgb(96, 150, 220), // FormBorderHeaderInctive2 + Color.FromArgb(21, 66, 139), // FormHeaderShortActive + Color.FromArgb(150, 143, 134), // FormHeaderShortInactive + Color.FromArgb(105, 112, 121), // FormHeaderLongActive + Color.FromArgb(150, 143, 134), // FormHeaderLongInactive + Color.FromArgb(158, 193, 241), // FormButtonBorderTrack + Color.FromArgb(210, 228, 254), // FormButtonBack1Track + Color.FromArgb(255, 255, 255), // FormButtonBack2Track + Color.FromArgb(162, 191, 227), // FormButtonBorderPressed + Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed + Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed + Color.FromArgb(21, 66, 139), // TextButtonFormNormal + Color.FromArgb(21, 66, 139), // TextButtonFormTracking + Color.FromArgb(21, 66, 139), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb(21, 66, 139), // TextLabelPanel + Color.FromArgb(21, 66, 139), // RibbonTabTextNormal + Color.FromArgb(21, 66, 139), // RibbonTabTextChecked + Color.FromArgb(134, 179, 236), // RibbonTabSelected1 + Color.FromArgb(63, 122, 197), // RibbonTabSelected2 + Color.FromArgb(134, 179, 236), // RibbonTabSelected3 + Color.FromArgb(63, 122, 197), // RibbonTabSelected4 + Color.FromArgb(222, 232, 245), // RibbonTabSelected5 + Color.FromArgb(153, 187, 232), // RibbonTabTracking1 + Color.FromArgb(255, 180, 86), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 + Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor + Color.FromArgb(134, 179, 236), // RibbonGroupsArea1 + Color.FromArgb(63, 122, 197), // RibbonGroupsArea2 + Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 + Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 + Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 + Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 + Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 + Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 + Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 + Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 + Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 + Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark + Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight + Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 + Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 + Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark + Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight + Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 + Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 + Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 + Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 + Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 + Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 + Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 + Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 + Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 + Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 + Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 + Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 + Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 + Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 + Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 + Color.FromArgb(21, 66, 139), // RibbonGroupCollapsedText + Color.FromArgb(118, 153, 200), // AlternatePressedBack1 + Color.FromArgb(184, 215, 253), // AlternatePressedBack2 + Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 + Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 + Color.FromArgb(150, 194, 239), // FormButtonBack1Checked + Color.FromArgb(210, 228, 254), // FormButtonBack2Checked + Color.FromArgb(158, 193, 241), // FormButtonBorderCheck + Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack + Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack + Color.FromArgb(154, 179, 213), // RibbonQATMini1 + Color.FromArgb(219, 231, 247), // RibbonQATMini2 + Color.FromArgb(195, 213, 236), // RibbonQATMini3 + Color.FromArgb(128, Color.White), // RibbonQATMini4 + Color.FromArgb(72, Color.White), // RibbonQATMini5 + Color.FromArgb(153, 176, 206), // RibbonQATMini1I + Color.FromArgb(226, 233, 241), // RibbonQATMini2I + Color.FromArgb(198, 210, 226), // RibbonQATMini3I + Color.FromArgb(128, Color.White), // RibbonQATMini4I + Color.FromArgb(72, Color.White), // RibbonQATMini5I + Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 + Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 + Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 + Color.FromArgb(86, 125, 177), // RibbonQATButtonDark + Color.FromArgb(234, 242, 249), // RibbonQATButtonLight + Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 + Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 + Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark + Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 + Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor + Color.FromArgb(134, 179, 236), // GridListNormal1 + Color.FromArgb(63, 122, 197), // GridListNormal2 + Color.FromArgb(63, 122, 197), // GridListPressed1 + Color.FromArgb(252, 253, 255), // GridListPressed2 + Color.FromArgb(170, 195, 240), // GridListSelected + Color.FromArgb(134, 179, 236), // GridSheetColNormal1 + Color.FromArgb(63, 122, 197), // GridSheetColNormal2 + Color.FromArgb(223, 226, 228), // GridSheetColPressed1 + Color.FromArgb(188, 197, 210), // GridSheetColPressed2 + Color.FromArgb(249, 217, 159), // GridSheetColSelected1 + Color.FromArgb(241, 193, 95), // GridSheetColSelected2 + Color.FromArgb(228, 236, 247), // GridSheetRowNormal + Color.FromArgb(187, 196, 209), // GridSheetRowPressed + Color.FromArgb(255, 213, 141), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(194, 217, 240), // GridDataCellSelected + Color.Blue, // InputControlTextNormal + Color.FromArgb(51, 51, 51), // InputControlTextDisabled + Color.FromArgb(171, 193, 222), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(134, 179, 236), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(234, 242, 251), // InputControlBackInactive + Color.FromArgb(86, 125, 177), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(51, 51, 51), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(63, 122, 197), // ContextMenuHeadingBack + Color.FromArgb(0, 21, 110), // ContextMenuHeadingText + Color.FromArgb(63, 122, 197), // ContextMenuImageColumn + Color.FromArgb(134, 179, 236), // AppButtonBack1 + Color.FromArgb(63, 122, 197), // AppButtonBack2 + Color.FromArgb(155, 175, 202), // AppButtonBorder + Color.FromArgb(189, 211, 238), // AppButtonOuter1 + Color.FromArgb(176, 201, 234), // AppButtonOuter2 + Color.FromArgb(207, 224, 245), // AppButtonOuter3 + Color.White, // AppButtonInner1 + Color.FromArgb(155, 175, 202), // AppButtonInner2 + Color.FromArgb(63, 122, 197), // AppButtonMenuDocs + Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText + Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 + Color.FromArgb(185, 208, 237), // RibbonGalleryBorder + Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal + Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking + Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 + Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(0, 21, 110), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark + Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 + Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 + Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder + Color.FromArgb(0, 21, 110), // ButtonNavigatorText + Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 + Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 + Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 + Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 + Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 + Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 + Color.FromArgb(201, 217, 239) // ToolTipBottom + ]; #endregion @@ -310,8 +341,8 @@ static PaletteOffice2010BlueDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -320,7 +351,7 @@ static PaletteOffice2010BlueDarkMode() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// @@ -399,6 +430,41 @@ public PaletteOffice2010BlueDarkMode() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } #endregion @@ -455,7 +521,7 @@ public abstract class PaletteOffice2010BlueDarkModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -474,8 +540,8 @@ public abstract class PaletteOffice2010BlueDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -514,8 +580,8 @@ public abstract class PaletteOffice2010BlueDarkModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(51, 51, 51); + private static readonly Color _disabledText = Color.FromArgb(150, 143, 134); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -553,44 +619,46 @@ public abstract class PaletteOffice2010BlueDarkModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _appButtonNormal = - { - Color.FromArgb(243, 245, 248), + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { - Color.FromArgb(255, 251, 230), + [ + Color.FromArgb(255, 251, 230), Color.FromArgb(180, 210, 255), Color.FromArgb(96, 147, 235), Color.FromArgb(110, 150, 240), Color.FromArgb(115, 155, 245) - }; + ]; private static readonly Color[] _appButtonPressed = - { - Color.FromArgb(185, 215, 250), + [ + Color.FromArgb(185, 215, 250), Color.FromArgb(190, 220, 245), Color.FromArgb(98, 155, 230), Color.FromArgb(110, 160, 225), Color.FromArgb(120, 175, 240) - }; + ]; private static readonly Color[] _buttonBorderColors = - { - Color.FromArgb(212, 212, 212), // Button, Disabled, Border + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(179, 209, 255), // Button, Tracking, Border 1 Color.FromArgb(179, 209, 249), // Button, Tracking, Border 2 Color.FromArgb(96, 147, 230), // Button, Pressed, Border 1 Color.FromArgb(32, 98, 200), // Button, Pressed, Border 2 Color.FromArgb(96, 147, 235), // Button, Checked, Border 1 Color.FromArgb(63, 122, 220) // Button, Checked, Border 2 - }; + ]; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(141, 168, 203), // Button, Tracking, Back 1 Color.FromArgb(95, 127, 169), // Button, Tracking, Back 2 @@ -600,19 +668,19 @@ public abstract class PaletteOffice2010BlueDarkModeBase : PaletteBase Color.FromArgb(141, 180, 230), // Button, Checked, Back 2 Color.FromArgb(63, 122, 197), // Button, Checked Tracking, Back 1 Color.FromArgb(96, 147, 213) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2010BlueDarkMode _table; + private KryptonColorTable2010BlueDarkMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -627,7 +695,7 @@ public abstract class PaletteOffice2010BlueDarkModeBase : PaletteBase protected PaletteOffice2010BlueDarkModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -636,6 +704,8 @@ protected PaletteOffice2010BlueDarkModeBase([DisallowNull] Color[] schemeColors, Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2010BlueDarkModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -662,15 +732,6 @@ protected PaletteOffice2010BlueDarkModeBase([DisallowNull] Color[] schemeColors, } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -750,7 +811,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -805,16 +866,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -839,7 +900,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -847,7 +908,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -990,22 +1051,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1031,7 +1092,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1045,7 +1106,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1060,7 +1121,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1114,11 +1175,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1127,7 +1188,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1135,7 +1196,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1278,22 +1339,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1315,13 +1376,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1335,7 +1396,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1389,7 +1450,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1399,7 +1460,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1643,17 +1704,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1661,21 +1722,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1695,36 +1756,36 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1732,7 +1793,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1743,7 +1804,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1769,17 +1830,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1787,22 +1848,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1821,23 +1882,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1848,7 +1909,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1856,7 +1917,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1867,7 +1928,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1991,7 +2052,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2096,7 +2157,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2189,12 +2250,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2210,12 +2271,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2231,12 +2292,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2247,7 +2308,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2284,7 +2345,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2536,7 +2597,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2546,9 +2607,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2627,7 +2688,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2826,7 +2887,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2856,7 +2917,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3028,7 +3089,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3104,7 +3165,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3401,6 +3462,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3426,6 +3488,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3486,6 +3549,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3714,7 +3778,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3739,7 +3803,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3837,7 +3901,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3909,6 +3973,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3920,16 +3985,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3954,12 +4024,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4010,7 +4082,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4025,6 +4097,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4040,11 +4113,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4062,16 +4136,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4118,6 +4194,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4135,6 +4212,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4150,6 +4228,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4171,10 +4250,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4182,10 +4262,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4223,7 +4304,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4236,6 +4317,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4257,16 +4339,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4302,7 +4386,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4315,6 +4399,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4336,16 +4421,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4373,7 +4460,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4394,6 +4481,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4415,16 +4503,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4470,6 +4560,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4489,7 +4580,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4501,12 +4592,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4523,7 +4615,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4539,11 +4631,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4560,7 +4653,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4578,12 +4671,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4603,21 +4697,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4626,11 +4720,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4650,21 +4745,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4673,11 +4768,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4775,7 +4871,7 @@ public KryptonColorTable2010BlueDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -5318,15 +5414,10 @@ public KryptonColorTable2010BlueDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueLightMode.cs index 2fa79255e..594daef64 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010BlueLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,6 +20,30 @@ public class PaletteOffice2010BlueLightMode : PaletteOffice2010BlueLightModeBase { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(41, 57, 85); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(135, 145, 157); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(179, 193, 208); + + private static readonly Color _ribbonAppButtonTextColor = SystemColors.Control; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -29,14 +53,14 @@ public class PaletteOffice2010BlueLightMode : PaletteOffice2010BlueLightModeBase #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -62,239 +86,252 @@ public class PaletteOffice2010BlueLightMode : PaletteOffice2010BlueLightModeBase #region Colour Arrays - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks - Color.FromArgb(116, 150, 194), // Top track - Color.FromArgb(152, 190, 241), // Bottom track - Color.FromArgb(142, 180, 231), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(63, 101, 152) // Border (normal) position - }; - - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 21, 66, 139), // TextLabelControl - Color.FromArgb( 21, 66, 139), // TextButtonNormal - Color.Blue, // TextButtonChecked - Color.FromArgb(161, 189, 207), // ButtonNormalBorder - Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder - Color.FromArgb(230, 239, 249), // ButtonNormalBack1 - Color.FromArgb(209, 226, 244), // ButtonNormalBack2 - Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 - Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 - Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 - Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 - Color.FromArgb(230, 239, 249), // PanelClient - Color.FromArgb(209, 226, 244), // PanelAlternative - Color.FromArgb(101, 147, 207), // ControlBorder - Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 - Color.FromArgb(230, 239, 249), // HeaderPrimaryBack1 - Color.FromArgb(209, 226, 244), // HeaderPrimaryBack2 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 - Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 - Color.FromArgb( 21, 66, 139), // HeaderText - Color.FromArgb( 21, 66, 139), // StatusStripText - Color.FromArgb(121, 153, 194), // ButtonBorder - Color.FromArgb(255, 255, 255), // SeparatorLight - Color.FromArgb(154, 198, 255), // SeparatorDark - Color.FromArgb(248, 248, 248), // GripLight - Color.FromArgb(114, 152, 204), // GripDark - Color.FromArgb(209, 226, 244), // ToolStripBack - Color.FromArgb(230, 239, 249), // StatusStripLight - Color.FromArgb(209, 226, 244), // StatusStripDark - Color.FromArgb(209, 226, 244), // ImageMargin - Color.FromArgb(230, 239, 249), // ToolStripBegin - Color.FromArgb(168, 200, 234), // ToolStripMiddle - Color.FromArgb(147, 187, 229), // ToolStripEnd - Color.FromArgb(167, 204, 251), // OverflowBegin - Color.FromArgb(167, 204, 251), // OverflowMiddle - Color.FromArgb(101, 147, 207), // OverflowEnd - Color.FromArgb(111, 157, 217), // ToolStripBorder - Color.FromArgb( 59, 90, 130), // FormBorderActive - Color.FromArgb(192, 198, 206), // FormBorderInactive - Color.FromArgb(176, 203, 239), // FormBorderActiveLight - Color.FromArgb(194, 217, 247), // FormBorderActiveDark - Color.FromArgb(204, 216, 232), // FormBorderInactiveLight - Color.FromArgb(212, 222, 236), // FormBorderInactiveDark - Color.FromArgb(221, 233, 248), // FormBorderHeaderActive - Color.FromArgb(223, 229, 237), // FormBorderHeaderInactive - Color.FromArgb(176, 207, 247), // FormBorderHeaderActive1 - Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 - Color.FromArgb(204, 218, 236), // FormBorderHeaderInctive1 - Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 - Color.FromArgb( 62, 106, 184), // FormHeaderShortActive - Color.FromArgb(160, 160, 160), // FormHeaderShortInactive - Color.FromArgb(105, 112, 121), // FormHeaderLongActive - Color.FromArgb(160, 160, 160), // FormHeaderLongInactive - Color.FromArgb(158, 193, 241), // FormButtonBorderTrack - Color.FromArgb(210, 228, 254), // FormButtonBack1Track - Color.FromArgb(255, 255, 255), // FormButtonBack2Track - Color.FromArgb(162, 191, 227), // FormButtonBorderPressed - Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed - Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed - Color.FromArgb( 21, 66, 139), // TextButtonFormNormal - Color.FromArgb( 21, 66, 139), // TextButtonFormTracking - Color.FromArgb( 21, 66, 139), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 21, 66, 139), // TextLabelPanel - Color.FromArgb( 21, 66, 139), // RibbonTabTextNormal - Color.FromArgb( 21, 66, 139), // RibbonTabTextChecked - Color.FromArgb(145, 180, 228), // RibbonTabSelected1 - Color.FromArgb(209, 251, 255), // RibbonTabSelected2 - Color.FromArgb(246, 250, 255), // RibbonTabSelected3 - Color.FromArgb(239, 246, 254), // RibbonTabSelected4 - Color.FromArgb(222, 232, 245), // RibbonTabSelected5 - Color.FromArgb(153, 187, 232), // RibbonTabTracking1 - Color.FromArgb(255, 180, 86), // RibbonTabTracking2 - Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 - Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 - Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 - Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 - Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 - Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor - Color.FromArgb(141, 178, 227), // RibbonGroupsArea1 - Color.FromArgb(192, 249, 255), // RibbonGroupsArea2 - Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 - Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 - Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 - Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 - Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 - Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 - Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 - Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 - Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 - Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 - Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark - Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight - Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 - Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 - Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark - Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight - Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 - Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 - Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 - Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 - Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 - Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 - Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 - Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 - Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 - Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 - Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 - Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 - Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 - Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 - Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 - Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 - Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 - Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 - Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 - Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 - Color.FromArgb( 21, 66, 139), // RibbonGroupCollapsedText - Color.FromArgb(118, 153, 200), // AlternatePressedBack1 - Color.FromArgb(184, 215, 253), // AlternatePressedBack2 - Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 - Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 - Color.FromArgb(150, 194, 239), // FormButtonBack1Checked - Color.FromArgb(210, 228, 254), // FormButtonBack2Checked - Color.FromArgb(158, 193, 241), // FormButtonBorderCheck - Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack - Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack - Color.FromArgb(154, 179, 213), // RibbonQATMini1 - Color.FromArgb(219, 231, 247), // RibbonQATMini2 - Color.FromArgb(195, 213, 236), // RibbonQATMini3 - Color.FromArgb(128, Color.White), // RibbonQATMini4 - Color.FromArgb(72, Color.White), // RibbonQATMini5 - Color.FromArgb(153, 176, 206), // RibbonQATMini1I - Color.FromArgb(226, 233, 241), // RibbonQATMini2I - Color.FromArgb(198, 210, 226), // RibbonQATMini3I - Color.FromArgb(128, Color.White), // RibbonQATMini4I - Color.FromArgb(72, Color.White), // RibbonQATMini5I - Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 - Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 - Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 - Color.FromArgb( 86, 125, 177), // RibbonQATButtonDark - Color.FromArgb(234, 242, 249), // RibbonQATButtonLight - Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 - Color.FromArgb( 55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(140, 172, 211), // RibbonGroupSeparatorDark - Color.FromArgb(248, 250, 252), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 - Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor - Color.FromArgb(230, 239, 249), // GridListNormal1 - Color.FromArgb(209, 226, 244), // GridListNormal2 - Color.FromArgb(209, 226, 244), // GridListPressed1 - Color.FromArgb(252, 253, 255), // GridListPressed2 - Color.FromArgb(168, 200, 234), // GridListSelected - Color.FromArgb(230, 239, 249), // GridSheetColNormal1 - Color.FromArgb(209, 226, 244), // GridSheetColNormal2 - Color.FromArgb(223, 226, 228), // GridSheetColPressed1 - Color.FromArgb(188, 197, 210), // GridSheetColPressed2 - Color.FromArgb(188, 213, 239), // GridSheetColSelected1 - Color.FromArgb(168, 200, 234), // GridSheetColSelected2 - Color.FromArgb(228, 236, 247), // GridSheetRowNormal - Color.FromArgb(187, 196, 209), // GridSheetRowPressed - Color.FromArgb(255, 213, 141), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(188, 213, 239), // GridDataCellSelected - Color.Blue, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(171, 193, 222), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(230, 239, 249), // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(234, 242, 251), // InputControlBackInactive - Color.FromArgb( 188, 213, 239), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(209, 226, 244), // ContextMenuHeadingBack - Color.FromArgb(0, 21, 110), // ContextMenuHeadingText - Color.FromArgb(209, 226, 244), // ContextMenuImageColumn - Color.FromArgb(230, 239, 249), // AppButtonBack1 - Color.FromArgb(209, 226, 244), // AppButtonBack2 - Color.FromArgb(155, 175, 202), // AppButtonBorder - Color.FromArgb(189, 211, 238), // AppButtonOuter1 - Color.FromArgb(176, 201, 234), // AppButtonOuter2 - Color.FromArgb(207, 224, 245), // AppButtonOuter3 - Color.White, // AppButtonInner1 - Color.FromArgb(155, 175, 202), // AppButtonInner2 - Color.FromArgb(209, 226, 244), // AppButtonMenuDocs - Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText - Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 - Color.FromArgb(185, 208, 237), // RibbonGalleryBorder - Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal - Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking - Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 - Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark - Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 - Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 - Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder - Color.FromArgb( 0, 25, 56), // ButtonNavigatorText - Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 - Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 - Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 - Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 - Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 - Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 - Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks + Color.FromArgb(116, 150, 194), // Top track + Color.FromArgb(152, 190, 241), // Bottom track + Color.FromArgb(142, 180, 231), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(63, 101, 152) // Border (normal) position + ]; + + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb(21, 66, 139), // TextLabelControl + Color.FromArgb(21, 66, 139), // TextButtonNormal + Color.Blue, // TextButtonChecked + Color.FromArgb(161, 189, 207), // ButtonNormalBorder + Color.FromArgb(121, 157, 182), // ButtonNormalDefaultBorder + Color.FromArgb(230, 239, 249), // ButtonNormalBack1 + Color.FromArgb(209, 226, 244), // ButtonNormalBack2 + Color.FromArgb(123, 192, 232), // ButtonNormalDefaultBack1 + Color.FromArgb(177, 252, 255), // ButtonNormalDefaultBack2 + Color.FromArgb(178, 214, 255), // ButtonNormalNavigatorBack1 + Color.FromArgb(202, 229, 255), // ButtonNormalNavigatorBack2 + Color.FromArgb(230, 239, 249), // PanelClient + Color.FromArgb(209, 226, 244), // PanelAlternative + Color.FromArgb(101, 147, 207), // ControlBorder + Color.FromArgb(227, 239, 255), // SeparatorHighBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighBorder2 + Color.FromArgb(230, 239, 249), // HeaderPrimaryBack1 + Color.FromArgb(209, 226, 244), // HeaderPrimaryBack2 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack1 + Color.FromArgb(214, 232, 255), // HeaderSecondaryBack2 + Color.FromArgb(21, 66, 139), // HeaderText + Color.FromArgb(21, 66, 139), // StatusStripText + Color.FromArgb(121, 153, 194), // ButtonBorder + Color.FromArgb(255, 255, 255), // SeparatorLight + Color.FromArgb(154, 198, 255), // SeparatorDark + Color.FromArgb(248, 248, 248), // GripLight + Color.FromArgb(114, 152, 204), // GripDark + Color.FromArgb(209, 226, 244), // ToolStripBack + Color.FromArgb(230, 239, 249), // StatusStripLight + Color.FromArgb(209, 226, 244), // StatusStripDark + Color.FromArgb(209, 226, 244), // ImageMargin + Color.FromArgb(230, 239, 249), // ToolStripBegin + Color.FromArgb(168, 200, 234), // ToolStripMiddle + Color.FromArgb(147, 187, 229), // ToolStripEnd + Color.FromArgb(167, 204, 251), // OverflowBegin + Color.FromArgb(167, 204, 251), // OverflowMiddle + Color.FromArgb(101, 147, 207), // OverflowEnd + Color.FromArgb(111, 157, 217), // ToolStripBorder + Color.FromArgb(59, 90, 130), // FormBorderActive + Color.FromArgb(192, 198, 206), // FormBorderInactive + Color.FromArgb(176, 203, 239), // FormBorderActiveLight + Color.FromArgb(194, 217, 247), // FormBorderActiveDark + Color.FromArgb(204, 216, 232), // FormBorderInactiveLight + Color.FromArgb(212, 222, 236), // FormBorderInactiveDark + Color.FromArgb(221, 233, 248), // FormBorderHeaderActive + Color.FromArgb(223, 229, 237), // FormBorderHeaderInactive + Color.FromArgb(176, 207, 247), // FormBorderHeaderActive1 + Color.FromArgb(228, 239, 253), // FormBorderHeaderActive2 + Color.FromArgb(204, 218, 236), // FormBorderHeaderInctive1 + Color.FromArgb(227, 232, 239), // FormBorderHeaderInctive2 + Color.FromArgb(62, 106, 184), // FormHeaderShortActive + Color.FromArgb(160, 160, 160), // FormHeaderShortInactive + Color.FromArgb(105, 112, 121), // FormHeaderLongActive + Color.FromArgb(160, 160, 160), // FormHeaderLongInactive + Color.FromArgb(158, 193, 241), // FormButtonBorderTrack + Color.FromArgb(210, 228, 254), // FormButtonBack1Track + Color.FromArgb(255, 255, 255), // FormButtonBack2Track + Color.FromArgb(162, 191, 227), // FormButtonBorderPressed + Color.FromArgb(132, 178, 233), // FormButtonBack1Pressed + Color.FromArgb(192, 231, 252), // FormButtonBack2Pressed + Color.FromArgb(21, 66, 139), // TextButtonFormNormal + Color.FromArgb(21, 66, 139), // TextButtonFormTracking + Color.FromArgb(21, 66, 139), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb(21, 66, 139), // TextLabelPanel + Color.FromArgb(21, 66, 139), // RibbonTabTextNormal + Color.FromArgb(21, 66, 139), // RibbonTabTextChecked + Color.FromArgb(145, 180, 228), // RibbonTabSelected1 + Color.FromArgb(209, 251, 255), // RibbonTabSelected2 + Color.FromArgb(246, 250, 255), // RibbonTabSelected3 + Color.FromArgb(239, 246, 254), // RibbonTabSelected4 + Color.FromArgb(222, 232, 245), // RibbonTabSelected5 + Color.FromArgb(153, 187, 232), // RibbonTabTracking1 + Color.FromArgb(255, 180, 86), // RibbonTabTracking2 + Color.FromArgb(255, 255, 189), // RibbonTabHighlight1 + Color.FromArgb(249, 237, 198), // RibbonTabHighlight2 + Color.FromArgb(218, 185, 127), // RibbonTabHighlight3 + Color.FromArgb(254, 209, 94), // RibbonTabHighlight4 + Color.FromArgb(205, 209, 180), // RibbonTabHighlight5 + Color.FromArgb(116, 153, 203), // RibbonTabSeparatorColor + Color.FromArgb(141, 178, 227), // RibbonGroupsArea1 + Color.FromArgb(192, 249, 255), // RibbonGroupsArea2 + Color.FromArgb(201, 217, 237), // RibbonGroupsArea3 + Color.FromArgb(231, 242, 255), // RibbonGroupsArea4 + Color.FromArgb(219, 230, 244), // RibbonGroupsArea5 + Color.FromArgb(197, 210, 223), // RibbonGroupBorder1 + Color.FromArgb(158, 191, 219), // RibbonGroupBorder2 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle1 + Color.FromArgb(193, 216, 242), // RibbonGroupTitle2 + Color.FromArgb(202, 202, 202), // RibbonGroupBorderContext1 + Color.FromArgb(196, 196, 196), // RibbonGroupBorderContext2 + Color.FromArgb(223, 223, 245), // RibbonGroupTitleContext1 + Color.FromArgb(210, 221, 242), // RibbonGroupTitleContext2 + Color.FromArgb(102, 142, 175), // RibbonGroupDialogDark + Color.FromArgb(254, 254, 255), // RibbonGroupDialogLight + Color.FromArgb(200, 224, 255), // RibbonGroupTitleTracking1 + Color.FromArgb(214, 237, 255), // RibbonGroupTitleTracking2 + Color.FromArgb(155, 187, 227), // RibbonMinimizeBarDark + Color.FromArgb(213, 226, 243), // RibbonMinimizeBarLight + Color.FromArgb(165, 191, 213), // RibbonGroupCollapsedBorder1 + Color.FromArgb(148, 185, 213), // RibbonGroupCollapsedBorder2 + Color.FromArgb(64, Color.White), // RibbonGroupCollapsedBorder3 + Color.FromArgb(202, 244, 254), // RibbonGroupCollapsedBorder4 + Color.FromArgb(221, 233, 249), // RibbonGroupCollapsedBack1 + Color.FromArgb(199, 218, 243), // RibbonGroupCollapsedBack2 + Color.FromArgb(186, 209, 240), // RibbonGroupCollapsedBack3 + Color.FromArgb(214, 238, 252), // RibbonGroupCollapsedBack4 + Color.FromArgb(186, 205, 225), // RibbonGroupCollapsedBorderT1 + Color.FromArgb(177, 230, 235), // RibbonGroupCollapsedBorderT2 + Color.FromArgb(192, Color.White), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(247, 251, 254), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(240, 244, 250), // RibbonGroupCollapsedBackT1 + Color.FromArgb(226, 234, 245), // RibbonGroupCollapsedBackT2 + Color.FromArgb(216, 227, 241), // RibbonGroupCollapsedBackT3 + Color.FromArgb(214, 237, 253), // RibbonGroupCollapsedBackT4 + Color.FromArgb(170, 195, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(195, 217, 242), // RibbonGroupFrameBorder2 + Color.FromArgb(227, 237, 250), // RibbonGroupFrameInside1 + Color.FromArgb(221, 233, 248), // RibbonGroupFrameInside2 + Color.FromArgb(214, 228, 246), // RibbonGroupFrameInside3 + Color.FromArgb(227, 236, 248), // RibbonGroupFrameInside4 + Color.FromArgb(21, 66, 139), // RibbonGroupCollapsedText + Color.FromArgb(118, 153, 200), // AlternatePressedBack1 + Color.FromArgb(184, 215, 253), // AlternatePressedBack2 + Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 + Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 + Color.FromArgb(150, 194, 239), // FormButtonBack1Checked + Color.FromArgb(210, 228, 254), // FormButtonBack2Checked + Color.FromArgb(158, 193, 241), // FormButtonBorderCheck + Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack + Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack + Color.FromArgb(154, 179, 213), // RibbonQATMini1 + Color.FromArgb(219, 231, 247), // RibbonQATMini2 + Color.FromArgb(195, 213, 236), // RibbonQATMini3 + Color.FromArgb(128, Color.White), // RibbonQATMini4 + Color.FromArgb(72, Color.White), // RibbonQATMini5 + Color.FromArgb(153, 176, 206), // RibbonQATMini1I + Color.FromArgb(226, 233, 241), // RibbonQATMini2I + Color.FromArgb(198, 210, 226), // RibbonQATMini3I + Color.FromArgb(128, Color.White), // RibbonQATMini4I + Color.FromArgb(72, Color.White), // RibbonQATMini5I + Color.FromArgb(178, 205, 237), // RibbonQATFullbar1 + Color.FromArgb(170, 197, 234), // RibbonQATFullbar2 + Color.FromArgb(126, 161, 205), // RibbonQATFullbar3 + Color.FromArgb(86, 125, 177), // RibbonQATButtonDark + Color.FromArgb(234, 242, 249), // RibbonQATButtonLight + Color.FromArgb(192, 220, 255), // RibbonQATOverflow1 + Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 + Color.FromArgb(140, 172, + 211), // RibbonGroupSeparatorDark + Color.FromArgb(248, 250, + 252), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, + 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, + 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, + 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, + 191), // ButtonClusterButtonBorder2 + Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor + Color.FromArgb(230, 239, 249), // GridListNormal1 + Color.FromArgb(209, 226, 244), // GridListNormal2 + Color.FromArgb(209, 226, 244), // GridListPressed1 + Color.FromArgb(252, 253, 255), // GridListPressed2 + Color.FromArgb(168, 200, 234), // GridListSelected + Color.FromArgb(230, 239, 249), // GridSheetColNormal1 + Color.FromArgb(209, 226, 244), // GridSheetColNormal2 + Color.FromArgb(223, 226, 228), // GridSheetColPressed1 + Color.FromArgb(188, 197, 210), // GridSheetColPressed2 + Color.FromArgb(188, 213, 239), // GridSheetColSelected1 + Color.FromArgb(168, 200, 234), // GridSheetColSelected2 + Color.FromArgb(228, 236, 247), // GridSheetRowNormal + Color.FromArgb(187, 196, 209), // GridSheetRowPressed + Color.FromArgb(255, 213, 141), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(188, 213, 239), // GridDataCellSelected + Color.Blue, // InputControlTextNormal + Color.FromArgb(77, 77, 77), // InputControlTextDisabled + Color.FromArgb(171, 193, 222), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(230, 239, 249), // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(234, 242, 251), // InputControlBackInactive + Color.FromArgb(188, 213, 239), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(77, 77, 77), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(209, 226, 244), // ContextMenuHeadingBack + Color.FromArgb(0, 21, 110), // ContextMenuHeadingText + Color.FromArgb(209, 226, 244), // ContextMenuImageColumn + Color.FromArgb(230, 239, 249), // AppButtonBack1 + Color.FromArgb(209, 226, 244), // AppButtonBack2 + Color.FromArgb(155, 175, 202), // AppButtonBorder + Color.FromArgb(189, 211, 238), // AppButtonOuter1 + Color.FromArgb(176, 201, 234), // AppButtonOuter2 + Color.FromArgb(207, 224, 245), // AppButtonOuter3 + Color.White, // AppButtonInner1 + Color.FromArgb(155, 175, 202), // AppButtonInner2 + Color.FromArgb(209, 226, 244), // AppButtonMenuDocs + Color.FromArgb(0, 21, 110), // AppButtonMenuDocsText + Color.FromArgb(227, 239, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(182, 214, 255), // SeparatorHighInternalBorder2 + Color.FromArgb(185, 208, 237), // RibbonGalleryBorder + Color.FromArgb(212, 230, 248), // RibbonGalleryBackNormal + Color.FromArgb(236, 243, 251), // RibbonGalleryBackTracking + Color.FromArgb(193, 213, 241), // RibbonGalleryBack1 + Color.FromArgb(215, 233, 251), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(0, 21, 110), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark + Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 + Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 + Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder + Color.FromArgb(0, 25, 56), // ButtonNavigatorText + Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 + Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 + Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 + Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 + Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 + Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 + Color.FromArgb(201, 217, + 239) // ToolTipBottom + ]; #endregion @@ -316,8 +353,8 @@ static PaletteOffice2010BlueLightMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -326,7 +363,7 @@ static PaletteOffice2010BlueLightMode() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// @@ -405,6 +442,41 @@ public PaletteOffice2010BlueLightMode() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } #endregion @@ -461,7 +533,7 @@ public abstract class PaletteOffice2010BlueLightModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -480,8 +552,8 @@ public abstract class PaletteOffice2010BlueLightModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -520,8 +592,8 @@ public abstract class PaletteOffice2010BlueLightModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(77, 77, 77); + private static readonly Color _disabledText = Color.FromArgb(115, 115, 115); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -558,18 +630,25 @@ public abstract class PaletteOffice2010BlueLightModeBase : PaletteBase #region Colour Arrays - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) }; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(212, 212, 212), // Button, Disabled, Border + private static readonly Color[] _appButtonNormal = [Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) + ]; + private static readonly Color[] _appButtonTrack = [Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) + ]; + private static readonly Color[] _appButtonPressed = [Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) + ]; + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(168, 200, 234), // Button, Tracking, Border 1 Color.FromArgb(170, 210, 245), // Button, Tracking, Border 2 Color.FromArgb(155, 205, 230), // Button, Pressed, Border 1 Color.FromArgb(150, 200, 225), // Button, Pressed, Border 2 Color.FromArgb(148, 197, 220), // Button, Checked, Border 1 Color.FromArgb(160, 205, 240) // Button, Checked, Border 2 - }; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + ]; + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(188, 213, 239), // Button, Tracking, Back 1 Color.FromArgb(168, 200, 234), // Button, Tracking, Back 2 @@ -579,19 +658,19 @@ public abstract class PaletteOffice2010BlueLightModeBase : PaletteBase Color.FromArgb(188, 213, 239), // Button, Checked, Back 2 Color.FromArgb(209, 226, 244), // Button, Checked Tracking, Back 1 Color.FromArgb(210, 226, 244) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2010BlueLightMode _table; + private KryptonColorTable2010BlueLightMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -606,7 +685,7 @@ public abstract class PaletteOffice2010BlueLightModeBase : PaletteBase protected PaletteOffice2010BlueLightModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -615,6 +694,8 @@ protected PaletteOffice2010BlueLightModeBase([DisallowNull] Color[] schemeColors Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2010BlueLightModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -641,15 +722,6 @@ protected PaletteOffice2010BlueLightModeBase([DisallowNull] Color[] schemeColors } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -729,7 +801,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -784,16 +856,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -818,7 +890,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -826,7 +898,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -969,22 +1041,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1010,7 +1082,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1024,7 +1096,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1039,7 +1111,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1093,11 +1165,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1106,7 +1178,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1114,7 +1186,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1257,22 +1329,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1294,13 +1366,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1314,7 +1386,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1368,7 +1440,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1378,7 +1450,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1622,17 +1694,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1640,21 +1712,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1674,36 +1746,36 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1711,7 +1783,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1722,7 +1794,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1748,17 +1820,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1766,22 +1838,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1800,23 +1872,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1827,7 +1899,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1835,7 +1907,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1846,7 +1918,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1970,7 +2042,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2075,7 +2147,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2168,12 +2240,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2189,12 +2261,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2210,12 +2282,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2226,7 +2298,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2263,7 +2335,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2515,7 +2587,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2525,9 +2597,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2606,7 +2678,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2805,7 +2877,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2835,7 +2907,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3007,7 +3079,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3083,7 +3155,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3380,6 +3452,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3405,6 +3478,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3465,6 +3539,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3693,7 +3768,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3718,7 +3793,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3816,7 +3891,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3888,6 +3963,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3899,16 +3975,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3933,12 +4014,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3989,7 +4072,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4004,6 +4087,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4019,11 +4103,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4041,16 +4126,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4097,6 +4184,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4114,6 +4202,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4129,6 +4218,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4150,10 +4240,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4161,10 +4252,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4202,7 +4294,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4215,6 +4307,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4236,16 +4329,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4281,7 +4376,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4294,6 +4389,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4315,16 +4411,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4352,7 +4450,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4373,6 +4471,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4394,16 +4493,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4449,6 +4550,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4468,7 +4570,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4480,12 +4582,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4502,7 +4605,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4518,11 +4621,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4539,7 +4643,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4557,12 +4661,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4582,21 +4687,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4605,11 +4710,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4629,21 +4735,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4652,11 +4758,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4754,7 +4861,7 @@ public KryptonColorTable2010BlueLightMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -5297,15 +5404,10 @@ public KryptonColorTable2010BlueLightMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverDarkMode.cs index b745b99f7..9489f6696 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,6 +20,30 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(41, 57, 85); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(84, 96, 125); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(109, 125, 163); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -29,9 +53,9 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -57,19 +81,21 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa #region Colour Arrays - private static readonly Color[] _trackBarColors = new Color[] { Color.FromArgb(170, 170, 170), // Tick marks + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; - private static readonly Color[]? _schemeOfficeColors = new Color[] - { - Color.FromArgb(24, 24, 24), // TextLabelControl - Color.FromArgb(24, 24, 24), // TextButtonNormal - Color.FromArgb(24, 24, 24), // TextButtonChecked + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb(255, 255, 255), // TextLabelControl + Color.FromArgb(255, 255, 255), // TextButtonNormal + Color.FromArgb(255, 255, 255), // TextButtonChecked Color.FromArgb(141, 148, 157), // ButtonNormalBorder1 Color.FromArgb(131, 138, 147), // ButtonNormalBorder2 Color.FromArgb(119, 132, 161), // ButtonNormalBack1 @@ -88,7 +114,7 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(213, 219, 231), // HeaderSecondaryBack1 Color.FromArgb(213, 219, 231), // HeaderSecondaryBack2 Color.FromArgb(21, 66, 139), // HeaderText - Color.FromArgb(24, 24, 24), // StatusStripText + Color.FromArgb(255, 255, 255), // StatusStripText Color.FromArgb(155, 163, 167), // ButtonBorder Color.FromArgb(255, 255, 255), // SeparatorLight Color.FromArgb(110, 109, 143), // SeparatorDark @@ -117,9 +143,9 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(83, 99, 136), // FormBorderHeaderActive2 Color.FromArgb(119, 132, 161), // FormBorderHeaderInctive1 Color.FromArgb(83, 99, 136), // FormBorderHeaderInctive2 - Color.FromArgb(24, 24, 24), // FormHeaderShortActive + Color.FromArgb(255, 255, 255), // FormHeaderShortActive Color.FromArgb(138, 138, 138), // FormHeaderShortInactive - Color.FromArgb(92, 98, 106), // FormHeaderLongActive + Color.FromArgb(255, 255, 255), // FormHeaderLongActive Color.FromArgb(138, 138, 138), // FormHeaderLongInactive Color.FromArgb(189, 199, 212), // FormButtonBorderTrack Color.FromArgb(222, 230, 242), // FormButtonBack1Track @@ -128,7 +154,7 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(125, 131, 140), // FormButtonBack1Pressed Color.FromArgb(213, 226, 233), // FormButtonBack2Pressed Color.Black, // TextButtonFormNormal - Color.Black, // TextButtonFormTracking + Color.FromArgb(255, 255, 255), // TextButtonFormTracking Color.Black, // TextButtonFormPressed Color.Silver, // LinkNotVisitedOverrideControl Color.Purple, // LinkVisitedOverrideControl @@ -136,8 +162,8 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.Silver, // LinkNotVisitedOverridePanel Color.Purple, // LinkVisitedOverridePanel Color.Red, // LinkPressedOverridePanel - Color.FromArgb(24, 24, 24), // TextLabelPanel - Color.FromArgb(83, 99, 136), // RibbonTabTextNormal + Color.FromArgb(255, 255, 255), // TextLabelPanel + Color.FromArgb(255, 255, 255), // RibbonTabTextNormal Color.FromArgb(0, 0, 0), // RibbonTabTextChecked Color.FromArgb(190, 190, 190), // RibbonTabSelected1 Color.FromArgb(198, 250, 255), // RibbonTabSelected2 @@ -159,11 +185,11 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(243, 245, 249), // RibbonGroupsArea5 Color.FromArgb(189, 191, 193), // RibbonGroupBorder1 Color.FromArgb(133, 133, 133), // RibbonGroupBorder2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitle1 + Color.FromArgb(255, 255, 255), // RibbonGroupTitle1 Color.FromArgb(195, 199, 209), // RibbonGroupTitle2 Color.FromArgb(183, 183, 183), // RibbonGroupBorderContext1 Color.FromArgb(131, 131, 131), // RibbonGroupBorderContext2 - Color.FromArgb(223, 227, 239), // RibbonGroupTitleContext1 + Color.FromArgb(255, 255, 255), // RibbonGroupTitleContext1 Color.FromArgb(195, 199, 209), // RibbonGroupTitleContext2 Color.FromArgb(101, 104, 112), // RibbonGroupDialogDark Color.FromArgb(242, 242, 242), // RibbonGroupDialogLight @@ -220,18 +246,12 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(225, 225, 225), // RibbonQATButtonLight Color.FromArgb(219, 218, 228), // RibbonQATOverflow1 Color.FromArgb(55, 100, 160), // RibbonQATOverflow2 - Color.FromArgb(173, 177, - 181), // RibbonGroupSeparatorDark - Color.FromArgb(232, 235, - 237), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, - 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, - 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, - 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, - 159), // ButtonClusterButtonBorder2 + Color.FromArgb(173, 177, 181), // RibbonGroupSeparatorDark + Color.FromArgb(232, 235, 237), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor Color.FromArgb(119, 132, 161), // GridListNormal1 Color.FromArgb(83, 99, 136), // GridListNormal2 @@ -249,8 +269,8 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(245, 199, 149), // GridSheetRowSelected Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(194, 217, 240), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(255, 255, 255), // InputControlTextNormal + Color.FromArgb(51, 51, 51), // InputControlTextDisabled Color.FromArgb(169, 177, 184), // InputControlBorderNormal Color.FromArgb(177, 187, 198), // InputControlBorderDisabled Color.FromArgb(119, 132, 161), // InputControlBackNormal @@ -258,9 +278,9 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(232, 234, 236), // InputControlBackInactive Color.FromArgb(124, 124, 124), // InputDropDownNormal1 Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.FromArgb(51, 51, 51), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(24, 24, 24), // ContextMenuHeading + Color.FromArgb(255, 255, 255), // ContextMenuHeading Color.FromArgb(76, 83, 92), // ContextMenuHeadingText Color.FromArgb(239, 239, 239), // ContextMenuImageColumn Color.FromArgb(119, 132, 161), // AppButtonBack1 @@ -282,12 +302,14 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(255, 255, 255), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -299,7 +321,7 @@ public class PaletteOffice2010SilverDarkMode : PaletteOffice2010SilverDarkModeBa Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion @@ -321,8 +343,8 @@ static PaletteOffice2010SilverDarkMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -331,7 +353,7 @@ static PaletteOffice2010SilverDarkMode() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -410,6 +432,41 @@ public PaletteOffice2010SilverDarkMode() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } #endregion @@ -466,7 +523,7 @@ public abstract class PaletteOffice2010SilverDarkModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -485,8 +542,8 @@ public abstract class PaletteOffice2010SilverDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -525,8 +582,8 @@ public abstract class PaletteOffice2010SilverDarkModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(51, 51, 51); + private static readonly Color _disabledText = Color.FromArgb(89, 89, 89); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -564,40 +621,47 @@ public abstract class PaletteOffice2010SilverDarkModeBase : PaletteBase #region Colour Arrays - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) }; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(212, 212, 212), // Button, Disabled, Border - Color.FromArgb(163, 179, 220), // Button, Tracking, Border 1 - Color.FromArgb(128, 141, 173), // Button, Tracking, Border 2 - Color.FromArgb(90, 99, 122), // Button, Pressed, Border 1 - Color.FromArgb(118, 130, 160), // Button, Pressed, Border 2 - Color.FromArgb(136, 150, 185), // Button, Checked, Border 1 - Color.FromArgb(174, 192, 236) // Button, Checked, Border 2 - }; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 - Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 - Color.FromArgb(54,64,88), // Button, Tracking, Back 1 - Color.FromArgb(106,123,164), // Button, Tracking, Back 2 - Color.FromArgb(95, 107, 137), // Button, Pressed, Back 1 - Color.FromArgb(54,64,88), // Button, Pressed, Back 2 - Color.FromArgb(54,64,88), // Button, Checked, Back 1 - Color.FromArgb(122, 137, 174), // Button, Checked, Back 2 - Color.FromArgb(119, 134, 172), // Button, Checked Tracking, Back 1 - Color.FromArgb(135, 148, 182) // Button, Checked Tracking, Back 2 - }; + private static readonly Color[] _appButtonNormal = [Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) + ]; + private static readonly Color[] _appButtonTrack = [Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) + ]; + private static readonly Color[] _appButtonPressed = [Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) + ]; + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(212, 212, 212), // Button, Disabled, Border + Color.FromArgb(163, 179, 220), // Button, Tracking, Border 1 + Color.FromArgb(128, 141, 173), // Button, Tracking, Border 2 + Color.FromArgb(90, 99, 122), // Button, Pressed, Border 1 + Color.FromArgb(118, 130, 160), // Button, Pressed, Border 2 + Color.FromArgb(136, 150, 185), // Button, Checked, Border 1 + Color.FromArgb(174, 192, 236) // Button, Checked, Border 2 + ]; + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 + Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 + Color.FromArgb(142,156,187), // Button, Tracking, Back 1 + Color.FromArgb(106,123,164), // Button, Tracking, Back 2 + Color.FromArgb(73, 84, 113), // Button, Pressed, Back 1 + Color.FromArgb(54,64,88), // Button, Pressed, Back 2 + Color.FromArgb(54,64,88), // Button, Checked, Back 1 + Color.FromArgb(122, 137, 174), // Button, Checked, Back 2 + Color.FromArgb(119, 134, 172), // Button, Checked Tracking, Back 1 + Color.FromArgb(135, 148, 182) // Button, Checked Tracking, Back 2 + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2010SilverDarkMode _table; + private KryptonColorTable2010SilverDarkMode? _table; private readonly Color[]? _ribbonColours; private readonly Color[] _trackBarColors; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -612,7 +676,7 @@ public abstract class PaletteOffice2010SilverDarkModeBase : PaletteBase protected PaletteOffice2010SilverDarkModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -621,6 +685,8 @@ protected PaletteOffice2010SilverDarkModeBase([DisallowNull] Color[] schemeColor Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2010SilverDarkModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -648,15 +714,6 @@ protected PaletteOffice2010SilverDarkModeBase([DisallowNull] Color[] schemeColor } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -734,9 +791,9 @@ or PaletteBackStyle.GridBackgroundCustom3 public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { // We do not provide override values - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride) || _ribbonColours is null) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -791,16 +848,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -825,7 +882,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -833,7 +890,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -976,22 +1033,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1017,7 +1074,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1031,7 +1088,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1044,9 +1101,9 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) { // We do not provide override values - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride) || _ribbonColours is null) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1100,11 +1157,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1113,7 +1170,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1121,7 +1178,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1264,22 +1321,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1301,13 +1358,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1321,7 +1378,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1375,7 +1432,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1385,7 +1442,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1618,7 +1675,7 @@ public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle sty /// Color value. public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) { - if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride) || _ribbonColours is null) { // Check for the calendar day today override if (state == PaletteState.TodayOverride) @@ -1629,17 +1686,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1647,21 +1704,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1672,8 +1729,8 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], @@ -1681,36 +1738,36 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1718,7 +1775,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1729,7 +1786,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1744,7 +1801,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta /// Color value. public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) { - if (CommonHelper.IsOverrideState(state)) + if (CommonHelper.IsOverrideState(state) || _ribbonColours is null) { // Check for the calendar day today override if (state == PaletteState.TodayOverride) @@ -1755,17 +1812,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1773,22 +1830,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1798,8 +1855,8 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], @@ -1807,23 +1864,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1834,7 +1891,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1842,7 +1899,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1853,7 +1910,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1977,7 +2034,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2082,7 +2139,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2175,12 +2232,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2196,12 +2253,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2217,12 +2274,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2233,7 +2290,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2270,7 +2327,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2509,6 +2566,12 @@ public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteConten /// Color value. public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + // Always work out value for an override state if (CommonHelper.IsOverrideState(state)) { @@ -2522,7 +2585,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2532,9 +2595,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2566,23 +2629,27 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] }, @@ -2593,11 +2660,12 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + ? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] + : _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2610,10 +2678,16 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet /// Color value. public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2644,23 +2718,27 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] }, @@ -2670,12 +2748,13 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], + ? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] + : _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2812,7 +2891,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2842,7 +2921,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3011,10 +3090,16 @@ public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContent /// Color value. public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3044,22 +3129,26 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] }, @@ -3070,11 +3159,11 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], + ? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal1] + : _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled1], PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -3087,10 +3176,16 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett /// Color value. public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3120,22 +3215,26 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColours[(int)SchemeOfficeColors.HeaderText], PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColours[(int)SchemeOfficeColors.TextLabelControl], PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, PaletteContentStyle.ContextMenuHeading => _ribbonColours[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch { PaletteState.Normal => style == PaletteContentStyle.ButtonListItem - ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] - : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], + ? _ribbonColours[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColours[(int)SchemeOfficeColors.TextLabelPanel], PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonChecked], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal] }, @@ -3145,12 +3244,14 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormPressed], _ => _ribbonColours[(int)SchemeOfficeColors.TextButtonFormNormal] }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] -: _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], + ? _ribbonColours[(int)SchemeOfficeColors.InputDropDownNormal2] + : _ribbonColours[(int)SchemeOfficeColors.InputDropDownDisabled2], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal -? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] -: _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], + ? _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColours[(int)SchemeOfficeColors.TextButtonNormal], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -3387,6 +3488,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3412,6 +3514,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3472,6 +3575,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3700,7 +3804,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3725,7 +3829,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3753,63 +3857,63 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDropArrowLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowLight]; + public override Color GetRibbonDropArrowLight(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonDropArrowLight]; /// /// Gets the color for the drop arrow dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonDropArrowDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonDropArrowDark]; + public override Color GetRibbonDropArrowDark(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonDropArrowDark]; /// /// Gets the color for the dialog launcher dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupDialogDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogDark]; + public override Color GetRibbonGroupDialogDark(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonGroupDialogDark]; /// /// Gets the color for the dialog launcher light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupDialogLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupDialogLight]; + public override Color GetRibbonGroupDialogLight(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonGroupDialogLight]; /// /// Gets the color for the group separator dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorDark]; + public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonGroupSeparatorDark]; /// /// Gets the color for the group separator light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonGroupSeparatorLight]; + public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonGroupSeparatorLight]; /// /// Gets the color for the minimize bar dark. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonMinimizeBarDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarDark]; + public override Color GetRibbonMinimizeBarDark(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonMinimizeBarDark]; /// /// Gets the color for the minimize bar light. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonMinimizeBarLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonMinimizeBarLight]; + public override Color GetRibbonMinimizeBarLight(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonMinimizeBarLight]; /// /// Gets the color for the tab separator. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonTabSeparatorColor(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonTabSeparatorColor]; + public override Color GetRibbonTabSeparatorColor(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonTabSeparatorColor]; /// /// Gets the color for the tab context separators. @@ -3823,7 +3927,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3837,14 +3941,14 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonQATButtonDark(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonDark]; + public override Color GetRibbonQATButtonDark(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonQATButtonDark]; /// /// Gets the color for the extra QAT button light content color. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonQATButtonLight(PaletteState state) => _ribbonColours[(int)SchemeOfficeColors.RibbonQATButtonLight]; + public override Color GetRibbonQATButtonLight(PaletteState state) => _ribbonColours![(int)SchemeOfficeColors.RibbonQATButtonLight]; #endregion @@ -3895,6 +3999,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3906,16 +4011,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3940,12 +4050,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3960,6 +4072,13 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac /// Color value. public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) { + + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (style) { case PaletteRibbonBackStyle.RibbonGalleryBack: @@ -3996,7 +4115,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4011,6 +4130,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4026,11 +4146,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4048,16 +4169,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4072,6 +4195,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (style) { case PaletteRibbonBackStyle.RibbonAppMenuInner: @@ -4104,6 +4233,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4121,6 +4251,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4136,6 +4267,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4157,10 +4289,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4168,10 +4301,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4186,6 +4320,12 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (style) { case PaletteRibbonBackStyle.RibbonAppMenuOuter: @@ -4209,7 +4349,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4222,6 +4362,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4243,16 +4384,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4267,6 +4410,12 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (style) { case PaletteRibbonBackStyle.RibbonQATMinibar: @@ -4288,7 +4437,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4301,6 +4450,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4322,16 +4472,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4346,6 +4498,12 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (style) { case PaletteRibbonBackStyle.RibbonAppMenuDocs: @@ -4359,7 +4517,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4380,6 +4538,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4401,16 +4560,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4427,6 +4588,12 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS /// Color value. public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (style) { case PaletteRibbonTextStyle.RibbonAppMenuDocsTitle: @@ -4456,6 +4623,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4475,7 +4643,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4487,12 +4655,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColors[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4507,9 +4676,15 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor2(PaletteElement element, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4525,11 +4700,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4544,9 +4720,15 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor3(PaletteElement element, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4564,12 +4746,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4584,26 +4767,32 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor4(PaletteElement element, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (element) { case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4612,11 +4801,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4631,26 +4821,32 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor5(PaletteElement element, PaletteState state) { + // Without_ribbonColours nothing goes + if (_ribbonColours is null || _ribbonColours.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (element) { case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4659,11 +4855,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4675,7 +4872,7 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat /// /// Gets access to the color table instance. /// - public override KryptonColorTable ColorTable => _table ??= new KryptonColorTable2010SilverDarkMode(_ribbonColours, InheritBool.True, this); + public override KryptonColorTable ColorTable => _table ??= new KryptonColorTable2010SilverDarkMode(_ribbonColours!, InheritBool.True, this); #endregion @@ -4761,7 +4958,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -4772,7 +4969,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the border color for a button being pressed. /// - public override Color ButtonPressedBorder => Colors[(int)SchemeOfficeColors.ButtonBorder]; + public override Color ButtonPressedBorder => Colors![(int)SchemeOfficeColors.ButtonBorder]; #endregion @@ -4812,7 +5009,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the highlight border for a pressed button. /// - public override Color ButtonPressedHighlightBorder => Colors[(int)SchemeOfficeColors.ButtonBorder]; + public override Color ButtonPressedHighlightBorder => Colors![(int)SchemeOfficeColors.ButtonBorder]; #endregion #endregion @@ -4822,7 +5019,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the border color for a button being selected. /// - public override Color ButtonSelectedBorder => Colors[(int)SchemeOfficeColors.ButtonBorder]; + public override Color ButtonSelectedBorder => Colors![(int)SchemeOfficeColors.ButtonBorder]; #endregion @@ -4862,7 +5059,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the highlight border for a selected button. /// - public override Color ButtonSelectedHighlightBorder => Colors[(int)SchemeOfficeColors.ButtonBorder]; + public override Color ButtonSelectedHighlightBorder => Colors![(int)SchemeOfficeColors.ButtonBorder]; #endregion #endregion @@ -4904,7 +5101,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the highlight border for a checked button. /// - public override Color ButtonCheckedHighlightBorder => Colors[(int)SchemeOfficeColors.ButtonBorder]; + public override Color ButtonCheckedHighlightBorder => Colors![(int)SchemeOfficeColors.ButtonBorder]; #endregion #endregion @@ -4940,7 +5137,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the light color used to draw grips. /// - public override Color GripLight => Colors[(int)SchemeOfficeColors.GripLight]; + public override Color GripLight => Colors![(int)SchemeOfficeColors.GripLight]; #endregion @@ -4948,7 +5145,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the dark color used to draw grips. /// - public override Color GripDark => Colors[(int)SchemeOfficeColors.GripDark]; + public override Color GripDark => Colors![(int)SchemeOfficeColors.GripDark]; #endregion #endregion @@ -4958,7 +5155,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color for the context menu margin. /// - public override Color ImageMarginGradientBegin => Colors[(int)SchemeOfficeColors.ImageMargin]; + public override Color ImageMarginGradientBegin => Colors![(int)SchemeOfficeColors.ImageMargin]; #endregion @@ -4966,7 +5163,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the middle color for the context menu margin. /// - public override Color ImageMarginGradientMiddle => Colors[(int)SchemeOfficeColors.ImageMargin]; + public override Color ImageMarginGradientMiddle => Colors![(int)SchemeOfficeColors.ImageMargin]; #endregion @@ -4974,7 +5171,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the ending color for the context menu margin. /// - public override Color ImageMarginGradientEnd => Colors[(int)SchemeOfficeColors.ImageMargin]; + public override Color ImageMarginGradientEnd => Colors![(int)SchemeOfficeColors.ImageMargin]; #endregion @@ -4982,7 +5179,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color for the context menu margin revealed. /// - public override Color ImageMarginRevealedGradientBegin => Colors[(int)SchemeOfficeColors.ImageMargin]; + public override Color ImageMarginRevealedGradientBegin => Colors![(int)SchemeOfficeColors.ImageMargin]; #endregion @@ -4990,7 +5187,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the middle color for the context menu margin revealed. /// - public override Color ImageMarginRevealedGradientMiddle => Colors[(int)SchemeOfficeColors.ImageMargin]; + public override Color ImageMarginRevealedGradientMiddle => Colors![(int)SchemeOfficeColors.ImageMargin]; #endregion @@ -4998,7 +5195,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the ending color for the context menu margin revealed. /// - public override Color ImageMarginRevealedGradientEnd => Colors[(int)SchemeOfficeColors.ImageMargin]; + public override Color ImageMarginRevealedGradientEnd => Colors![(int)SchemeOfficeColors.ImageMargin]; #endregion #endregion @@ -5024,7 +5221,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the color of a selected menu item. /// - public override Color MenuItemSelected => Colors[(int)SchemeOfficeColors.ButtonBorder]; + public override Color MenuItemSelected => Colors![(int)SchemeOfficeColors.ButtonBorder]; #endregion @@ -5032,7 +5229,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color of the gradient used when a top-level ToolStripMenuItem is pressed down. /// - public override Color MenuItemPressedGradientBegin => Colors[(int)SchemeOfficeColors.ToolStripBegin]; + public override Color MenuItemPressedGradientBegin => Colors![(int)SchemeOfficeColors.ToolStripBegin]; #endregion @@ -5040,7 +5237,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the end color of the gradient used when a top-level ToolStripMenuItem is pressed down. /// - public override Color MenuItemPressedGradientEnd => Colors[(int)SchemeOfficeColors.ToolStripEnd]; + public override Color MenuItemPressedGradientEnd => Colors![(int)SchemeOfficeColors.ToolStripEnd]; #endregion @@ -5048,7 +5245,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the middle color of the gradient used when a top-level ToolStripMenuItem is pressed down. /// - public override Color MenuItemPressedGradientMiddle => Colors[(int)SchemeOfficeColors.ToolStripMiddle]; + public override Color MenuItemPressedGradientMiddle => Colors![(int)SchemeOfficeColors.ToolStripMiddle]; #endregion @@ -5074,7 +5271,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color of the gradient used in the MenuStrip. /// - public override Color MenuStripGradientBegin => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color MenuStripGradientBegin => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion @@ -5082,7 +5279,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the end color of the gradient used in the MenuStrip. /// - public override Color MenuStripGradientEnd => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color MenuStripGradientEnd => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion @@ -5093,7 +5290,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color of the gradient used in the ToolStripOverflowButton. /// - public override Color OverflowButtonGradientBegin => Colors[(int)SchemeOfficeColors.OverflowBegin]; + public override Color OverflowButtonGradientBegin => Colors![(int)SchemeOfficeColors.OverflowBegin]; #endregion @@ -5101,7 +5298,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the end color of the gradient used in the ToolStripOverflowButton. /// - public override Color OverflowButtonGradientEnd => Colors[(int)SchemeOfficeColors.OverflowEnd]; + public override Color OverflowButtonGradientEnd => Colors![(int)SchemeOfficeColors.OverflowEnd]; #endregion @@ -5109,7 +5306,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the middle color of the gradient used in the ToolStripOverflowButton. /// - public override Color OverflowButtonGradientMiddle => Colors[(int)SchemeOfficeColors.OverflowMiddle]; + public override Color OverflowButtonGradientMiddle => Colors![(int)SchemeOfficeColors.OverflowMiddle]; #endregion #endregion @@ -5119,7 +5316,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color of the gradient used in the ToolStripContainer. /// - public override Color RaftingContainerGradientBegin => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color RaftingContainerGradientBegin => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion @@ -5127,7 +5324,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the end color of the gradient used in the ToolStripContainer. /// - public override Color RaftingContainerGradientEnd => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color RaftingContainerGradientEnd => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion @@ -5138,7 +5335,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the light separator color. /// - public override Color SeparatorLight => Colors[(int)SchemeOfficeColors.SeparatorLight]; + public override Color SeparatorLight => Colors![(int)SchemeOfficeColors.SeparatorLight]; #endregion @@ -5146,7 +5343,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the dark separator color. /// - public override Color SeparatorDark => Colors[(int)SchemeOfficeColors.SeparatorDark]; + public override Color SeparatorDark => Colors![(int)SchemeOfficeColors.SeparatorDark]; #endregion #endregion @@ -5156,7 +5353,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color for the status strip background. /// - public override Color StatusStripGradientBegin => Colors[(int)SchemeOfficeColors.StatusStripLight]; + public override Color StatusStripGradientBegin => Colors![(int)SchemeOfficeColors.StatusStripLight]; #endregion @@ -5164,7 +5361,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the ending color for the status strip background. /// - public override Color StatusStripGradientEnd => Colors[(int)SchemeOfficeColors.StatusStripDark]; + public override Color StatusStripGradientEnd => Colors![(int)SchemeOfficeColors.StatusStripDark]; #endregion #endregion @@ -5174,7 +5371,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the text color used on the menu items. /// - public override Color MenuItemText => Colors[(int)SchemeOfficeColors.TextButtonNormal]; + public override Color MenuItemText => Colors![(int)SchemeOfficeColors.TextButtonNormal]; #endregion @@ -5182,7 +5379,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the text color used on the menu strip. /// - public override Color MenuStripText => Colors[(int)SchemeOfficeColors.StatusStripText]; + public override Color MenuStripText => Colors![(int)SchemeOfficeColors.StatusStripText]; #endregion @@ -5190,7 +5387,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the text color used on the tool strip. /// - public override Color ToolStripText => Colors[(int)SchemeOfficeColors.StatusStripText]; + public override Color ToolStripText => Colors![(int)SchemeOfficeColors.StatusStripText]; #endregion @@ -5198,7 +5395,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the text color used on the status strip. /// - public override Color StatusStripText => Colors[(int)SchemeOfficeColors.StatusStripText]; + public override Color StatusStripText => Colors![(int)SchemeOfficeColors.StatusStripText]; #endregion @@ -5232,7 +5429,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the border color to use on the bottom edge of the ToolStrip. /// - public override Color ToolStripBorder => Colors[(int)SchemeOfficeColors.ToolStripBorder]; + public override Color ToolStripBorder => Colors![(int)SchemeOfficeColors.ToolStripBorder]; #endregion @@ -5240,7 +5437,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color for the content panel background. /// - public override Color ToolStripContentPanelGradientBegin => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color ToolStripContentPanelGradientBegin => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion @@ -5248,7 +5445,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the ending color for the content panel background. /// - public override Color ToolStripContentPanelGradientEnd => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color ToolStripContentPanelGradientEnd => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion @@ -5264,7 +5461,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color of the gradient used in the ToolStrip background. /// - public override Color ToolStripGradientBegin => Colors[(int)SchemeOfficeColors.ToolStripBegin]; + public override Color ToolStripGradientBegin => Colors![(int)SchemeOfficeColors.ToolStripBegin]; #endregion @@ -5272,7 +5469,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the end color of the gradient used in the ToolStrip background. /// - public override Color ToolStripGradientEnd => Colors[(int)SchemeOfficeColors.ToolStripEnd]; + public override Color ToolStripGradientEnd => Colors![(int)SchemeOfficeColors.ToolStripEnd]; #endregion @@ -5280,7 +5477,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the middle color of the gradient used in the ToolStrip background. /// - public override Color ToolStripGradientMiddle => Colors[(int)SchemeOfficeColors.ToolStripMiddle]; + public override Color ToolStripGradientMiddle => Colors![(int)SchemeOfficeColors.ToolStripMiddle]; #endregion @@ -5288,7 +5485,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the starting color of the gradient used in the ToolStripPanel. /// - public override Color ToolStripPanelGradientBegin => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color ToolStripPanelGradientBegin => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion @@ -5296,7 +5493,7 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, /// /// Gets the end color of the gradient used in the ToolStripPanel. /// - public override Color ToolStripPanelGradientEnd => Colors[(int)SchemeOfficeColors.ToolStripBack]; + public override Color ToolStripPanelGradientEnd => Colors![(int)SchemeOfficeColors.ToolStripBack]; #endregion #endregion @@ -5304,15 +5501,10 @@ public KryptonColorTable2010SilverDarkMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverLightMode.cs index 4461808b3..c4e0264f5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Extra Themes/PaletteOffice2010SilverLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,6 +20,30 @@ public class PaletteOffice2010SilverLightMode : PaletteOffice2010SilverLightMode { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(195, 198, 209); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(224, 225, 231); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(147, 149, 158); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(195, 198, 209); + + private static readonly Color _ribbonAppButtonTextColor = Color.FromArgb(24, 24, 24); + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -29,9 +53,9 @@ public class PaletteOffice2010SilverLightMode : PaletteOffice2010SilverLightMode #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -58,17 +82,17 @@ public class PaletteOffice2010SilverLightMode : PaletteOffice2010SilverLightMode #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { + [ Color.FromArgb(24, 24, 24), // TextLabelControl Color.FromArgb(24, 24, 24), // TextButtonNormal Color.FromArgb(24, 24, 24), // TextButtonChecked @@ -252,7 +276,7 @@ public class PaletteOffice2010SilverLightMode : PaletteOffice2010SilverLightMode Color.FromArgb(188, 195, 209), // GridDataCellBorder Color.FromArgb(194, 217, 240), // GridDataCellSelected Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(77, 77, 77), // InputControlTextDisabled Color.FromArgb(169, 177, 184), // InputControlBorderNormal Color.FromArgb(177, 187, 198), // InputControlBorderDisabled Color.FromArgb(224, 225, 231), // InputControlBackNormal @@ -260,7 +284,7 @@ public class PaletteOffice2010SilverLightMode : PaletteOffice2010SilverLightMode Color.FromArgb(232, 234, 236), // InputControlBackInactive Color.FromArgb(124, 124, 124), // InputDropDownNormal1 Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.FromArgb(77, 77, 77), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 Color.FromArgb(24, 24, 24), // ContextMenuHeading Color.FromArgb(76, 83, 92), // ContextMenuHeadingText @@ -282,12 +306,14 @@ public class PaletteOffice2010SilverLightMode : PaletteOffice2010SilverLightMode Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder5 + Color.FromArgb(76, 83, 92), // RibbonGroupTitleText + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -299,7 +325,7 @@ public class PaletteOffice2010SilverLightMode : PaletteOffice2010SilverLightMode Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - 221, 221, 221 - }; + ]; #endregion @@ -321,8 +347,8 @@ static PaletteOffice2010SilverLightMode() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -331,7 +357,7 @@ static PaletteOffice2010SilverLightMode() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -410,6 +436,41 @@ public PaletteOffice2010SilverLightMode() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } #endregion @@ -466,7 +527,7 @@ public abstract class PaletteOffice2010SilverLightModeBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -485,8 +546,8 @@ public abstract class PaletteOffice2010SilverLightModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -525,8 +586,8 @@ public abstract class PaletteOffice2010SilverLightModeBase : PaletteBase #region Colours private static readonly Color _gridTextColor = Color.Black; - private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); - private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); + private static readonly Color _disabledText2 = Color.FromArgb(77, 77, 77); + private static readonly Color _disabledText = Color.FromArgb(115, 115, 115); private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); @@ -565,34 +626,34 @@ public abstract class PaletteOffice2010SilverLightModeBase : PaletteBase #region Colour Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(232, 234, 244), // Button, Tracking, Border 1 Color.FromArgb(183, 185, 193), // Button, Tracking, Border 2 @@ -600,10 +661,10 @@ public abstract class PaletteOffice2010SilverLightModeBase : PaletteBase Color.FromArgb(146, 148, 155), // Button, Pressed, Border 2 Color.FromArgb(121, 123, 129), // Button, Checked, Border 1 Color.FromArgb(170, 172, 181) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(214, 216, 221), // Button, Tracking, Back 1 @@ -614,19 +675,19 @@ public abstract class PaletteOffice2010SilverLightModeBase : PaletteBase Color.FromArgb(216, 220, 222), // Button, Checked, Back 2 Color.FromArgb(219, 224, 222), // Button, Checked Tracking, Back 1 Color.FromArgb(225, 228, 224) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2010SilverLightMode _table; + private KryptonColorTable2010SilverLightMode? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColors; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -641,7 +702,7 @@ public abstract class PaletteOffice2010SilverLightModeBase : PaletteBase protected PaletteOffice2010SilverLightModeBase([DisallowNull] Color[] schemeColors, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColors) { Debug.Assert(schemeColors != null); @@ -650,6 +711,8 @@ protected PaletteOffice2010SilverLightModeBase([DisallowNull] Color[] schemeColo Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2010SilverLightModeBase); + if (schemeColors != null) { _ribbonColours = schemeColors; @@ -678,15 +741,6 @@ protected PaletteOffice2010SilverLightModeBase([DisallowNull] Color[] schemeColo } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -766,7 +820,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -821,16 +875,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: return style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4], @@ -855,7 +909,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -863,7 +917,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1006,22 +1060,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1047,7 +1101,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1061,7 +1115,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1076,7 +1130,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1130,11 +1184,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1143,7 +1197,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1151,7 +1205,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1294,22 +1348,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1331,13 +1385,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1351,7 +1405,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1405,7 +1459,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1415,7 +1469,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1659,17 +1713,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1677,21 +1731,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1702,8 +1756,8 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], @@ -1711,36 +1765,36 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1748,7 +1802,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1759,7 +1813,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1785,17 +1839,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1803,22 +1857,22 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch { @@ -1828,8 +1882,8 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], + ? _ribbonColours[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColours[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.GridDataCellBorder], PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColours[(int)SchemeOfficeColors.AppButtonBorder], @@ -1837,23 +1891,23 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColours[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1864,7 +1918,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1872,7 +1926,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1883,7 +1937,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -2007,7 +2061,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2112,7 +2166,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2205,12 +2259,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2226,12 +2280,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2247,12 +2301,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2263,7 +2317,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2300,7 +2354,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2552,7 +2606,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2562,9 +2616,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2643,7 +2697,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2842,7 +2896,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2872,7 +2926,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -3044,7 +3098,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3120,7 +3174,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3417,6 +3471,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3442,6 +3497,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3502,6 +3558,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3730,7 +3787,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3755,7 +3812,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3853,7 +3910,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3925,6 +3982,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3936,16 +3994,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3970,12 +4033,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4026,7 +4091,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -4041,6 +4106,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4056,11 +4122,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4078,16 +4145,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4134,6 +4203,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4151,6 +4221,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4166,6 +4237,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4187,10 +4259,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4198,10 +4271,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4239,7 +4313,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4252,6 +4326,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4273,16 +4348,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4318,7 +4395,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4331,6 +4408,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4352,16 +4430,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4389,7 +4469,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4410,6 +4490,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4431,16 +4512,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4486,6 +4569,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4505,7 +4589,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4517,12 +4601,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColors[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4539,7 +4624,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4555,11 +4640,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4576,7 +4662,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4594,12 +4680,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4619,21 +4706,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4642,11 +4729,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4666,21 +4754,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4689,11 +4777,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4792,7 +4881,7 @@ public KryptonColorTable2010SilverLightMode([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -5335,15 +5424,10 @@ public KryptonColorTable2010SilverLightMode([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010DarkGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010DarkGray.cs index 3833f05b1..c22fcce4d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010DarkGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010DarkGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,6 +16,30 @@ public class PaletteOffice2010DarkGray : PaletteOffice2010Base { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(51, 51, 51); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(212, 212, 212); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(51, 51, 51); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(140, 140, 140); + + private static readonly Color _ribbonAppButtonTextColor = SystemColors.Control; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -25,9 +49,9 @@ public class PaletteOffice2010DarkGray : PaletteOffice2010Base #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -53,18 +77,18 @@ public class PaletteOffice2010DarkGray : PaletteOffice2010Base #region Colour Arrays - private static readonly Color[] _trackBarColors = new Color[] - { + private static readonly Color[] _trackBarColors = + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; - private static readonly Color[] _schemeOfficeColors = new Color[] - { + private static readonly Color[] _schemeOfficeColors = + [ Color.FromArgb(119, 119, 119), // TextLabelControl Color.FromArgb(255, 255, 255), // TextButtonNormal Color.Black, // TextButtonChecked @@ -272,12 +296,12 @@ public class PaletteOffice2010DarkGray : PaletteOffice2010Base Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -289,9 +313,10 @@ public class PaletteOffice2010DarkGray : PaletteOffice2010Base Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion + #endregion #region Identity @@ -310,8 +335,8 @@ static PaletteOffice2010DarkGray() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -320,7 +345,7 @@ static PaletteOffice2010DarkGray() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -399,5 +424,40 @@ public PaletteOffice2010DarkGray() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010LightGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010LightGray.cs index f8a86657e..54910de3c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010LightGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010LightGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -14,10 +14,73 @@ namespace Krypton.Toolkit { public class PaletteOffice2010LightGray : PaletteOffice2010Base { - public PaletteOffice2010LightGray(Color[] schemeColors, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColors) : base(schemeColors, checkBoxList, galleryButtonList, radioButtonArray, trackBarColors) + #region Static Fields + + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(41, 57, 85); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.EMPTY_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.EMPTY_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.EMPTY_COLOR; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + + #endregion + + public PaletteOffice2010LightGray(Color[] schemeColors, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColors) : base(schemeColors, checkBoxList, galleryButtonList, radioButtonArray, trackBarColors) { } public override Image? GetContextMenuSubMenuImage() => throw new NotImplementedException(); + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010White.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010White.cs index 8c6262809..9e8f9e1b9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010White.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Non Official Themes/PaletteOffice2010White.cs @@ -1,12 +1,12 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion @@ -18,11 +18,43 @@ namespace Krypton.Toolkit public class PaletteOffice2010White : PaletteOffice2010Base { #region Static Fields + + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(207, 212, 218); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(255, 255, 255); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + + #region Image Lists + private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + + #endregion + + #region Images + + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -43,240 +75,251 @@ public class PaletteOffice2010White : PaletteOffice2010Base private static readonly Image _formHelpActive = Office2010ControlBoxResources.Office2010HelpIconHover; private static readonly Image _formHelpPressed = Office2010ControlBoxResources.Office2010HelpIconPressed; private static readonly Image _formHelpDisabled = Office2010ControlBoxResources.Office2010HelpIconDisabled; - private static readonly Color[] _trackBarColors = new Color[] { Color.Red, // Tick marks - Color.FromArgb(166, 170, 175), // Top track - Color.FromArgb(226, 220, 235), // Bottom track - Color.FromArgb(206, 200, 215), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(80, 81, 82) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = new Color[] { Color.FromArgb( 59, 59, 59), // TextLabelControl - Color.FromArgb( 59, 59, 59), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(170, 170, 170), // ButtonNormalBorder1 -n - Color.FromArgb(170, 170, 170), // ButtonNormalDefaultBorder -n - Color.FromArgb(253, 253, 253), // ButtonNormalBack1 -n - Color.FromArgb(253, 253, 253), // ButtonNormalBack2 -n - Color.FromArgb(235, 235, 235), // ButtonNormalDefaultBack1 - Color.FromArgb(195, 195, 195), // ButtonNormalDefaultBack2 - Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack1 - Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack2 - Color.White , // PanelClient -n - Color.FromArgb(207, 212, 218), // PanelAlternative - Color.FromArgb(213, 213, 213), // ControlBorder -n - Color.FromArgb(250, 253, 255), // SeparatorHighBorder1 - Color.FromArgb(227, 232, 237), // SeparatorHighBorder2 - Color.FromArgb(255, 255, 255), // HeaderPrimaryBack1 -n - Color.FromArgb(255, 255, 255), // HeaderPrimaryBack2 -n - Color.FromArgb(255, 255, 255), // HeaderSecondaryBack1 - Color.FromArgb(255, 255, 255), // HeaderSecondaryBack2-n - Color.FromArgb( 59, 59, 59), // HeaderText - Color.FromArgb(255, 255, 255), // StatusStripText - Color.FromArgb(236, 199, 87), // ButtonBorder - Color.FromArgb(247, 250, 252), // SeparatorLight - Color.FromArgb(119, 123, 127), // SeparatorDark - Color.FromArgb(191, 191, 191), // GripLight - Color.FromArgb(191, 191, 191), // GripDark - Color.FromArgb(227, 230, 232), // ToolStripBack - Color.FromArgb(0 , 114, 198), // StatusStripLight - Color.FromArgb(0 , 114, 198), // StatusStripDark - Color.White, // ImageMargin - Color.FromArgb( 25, 71, 138), // ToolStripBegin - Color.FromArgb( 25, 71, 138), // ToolStripMiddle - Color.FromArgb( 25, 71, 138), // ToolStripEnd - Color.FromArgb(147, 154, 163), // OverflowBegin - Color.FromArgb(147, 154, 163), // OverflowMiddle - Color.FromArgb(147, 154, 163), // OverflowEnd - Color.FromArgb(147, 154, 163), // ToolStripBorder - Color.FromArgb(0 , 114, 198), // FormBorderActive -n - Color.FromArgb(134, 139, 145), // FormBorderInactive - Color.FromArgb(228, 230, 232), // FormBorderActiveLight - Color.FromArgb(255, 255, 255), // FormBorderActiveDark - Color.FromArgb(248, 247, 247), // FormBorderInactiveLight - Color.FromArgb(248, 247, 247), // FormBorderInactiveDark - Color.FromArgb(101, 109, 117), // FormBorderHeaderActive - Color.FromArgb(134, 139, 145), // FormBorderHeaderInactive - Color.FromArgb(235, 237, 240), // FormBorderHeaderActive1 - Color.FromArgb(228, 230, 232), // FormBorderHeaderActive2 - Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive1 - Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive2 - Color.FromArgb( 59, 59, 59), // FormHeaderShortActive - Color.FromArgb(138, 138, 138), // FormHeaderShortInactive - Color.FromArgb( 59, 59, 59), // FormHeaderLongActive - Color.FromArgb(138, 138, 138), // FormHeaderLongInactive - Color.FromArgb(166, 172, 179), // FormButtonBorderTrack - Color.FromArgb(255, 255, 255), // FormButtonBack1Track - Color.FromArgb(228, 228, 229), // FormButtonBack2Track - Color.FromArgb(166, 172, 179), // FormButtonBorderPressed - Color.FromArgb(223, 228, 235), // FormButtonBack1Pressed - Color.FromArgb(188, 193, 200), // FormButtonBack2Pressed - Color.Black, // TextButtonFormNormal - Color.Black, // TextButtonFormTracking - Color.Black, // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 59, 59, 59), // TextLabelPanel - Color.FromArgb(102, 102, 102), // RibbonTabTextNormal -n - Color.FromArgb( 0, 114, 198), // RibbonTabTextChecked -n - Color.FromArgb(182, 186, 191), // RibbonTabSelected1 - Color.White, // RibbonTabSelected2 - Color.White, // RibbonTabSelected3 - Color.White, // RibbonTabSelected4 - Color.White, // RibbonTabSelected5 - Color.FromArgb(177, 181, 186), // RibbonTabTracking1 - Color.FromArgb(248, 249, 249), // RibbonTabTracking2 - Color.FromArgb(182, 186, 191), // RibbonTabHighlight1 - Color.White, // RibbonTabHighlight2 - Color.White, // RibbonTabHighlight3 - Color.White, // RibbonTabHighlight4 - Color.White, // RibbonTabHighlight5 - Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor - Color.FromArgb(212, 212, 212), // RibbonGroupsArea1 -n - Color.FromArgb(212, 212, 212), // RibbonGroupsArea2 -n - Color.White, // RibbonGroupsArea3 -n - Color.White, // RibbonGroupsArea4 -n - Color.White, // RibbonGroupsArea5 -n - Color.Empty, // RibbonGroupBorder1 -n - Color.Empty, // RibbonGroupBorder2 -n - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 - Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark - Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark - Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 - Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 - Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 - Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 - Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 - Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 - Color.FromArgb( 59, 59, 59), // RibbonGroupCollapsedText - Color.FromArgb(179, 185, 195), // AlternatePressedBack1 - Color.FromArgb(216, 224, 224), // AlternatePressedBack2 - Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 - Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 - Color.FromArgb(157, 166, 174), // FormButtonBack1Checked - Color.FromArgb(222, 230, 242), // FormButtonBack2Checked - Color.FromArgb(149, 154, 160), // FormButtonBorderCheck - Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack - Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack - Color.FromArgb(180, 180, 180), // RibbonQATMini1 - Color.FromArgb(210, 215, 221), // RibbonQATMini2 - Color.FromArgb(195, 200, 206), // RibbonQATMini3 - Color.FromArgb(10, Color.White), // RibbonQATMini4 - Color.FromArgb(32, Color.White), // RibbonQATMini5 - Color.FromArgb(200, 200, 200), // RibbonQATMini1I - Color.FromArgb(233, 234, 238), // RibbonQATMini2I - Color.FromArgb(223, 224, 228), // RibbonQATMini3I - Color.FromArgb(10, Color.White), // RibbonQATMini4I - Color.FromArgb(32, Color.White), // RibbonQATMini5I - Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 - Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 - Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 - Color.FromArgb( 90, 90, 90), // RibbonQATButtonDark - Color.FromArgb(210, 212, 215), // RibbonQATButtonLight - Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 - Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 - Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark - Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 - Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.White, // GridListNormal2 - Color.FromArgb(203, 207, 212), // GridListPressed1 - Color.White, // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(238, 241, 247), // GridSheetColNormal1 - Color.FromArgb(218, 222, 227), // GridSheetColNormal2 - Color.FromArgb(255, 223, 107), // GridSheetColPressed1 - Color.FromArgb(255, 252, 230), // GridSheetColPressed2 - Color.FromArgb(255, 211, 89), // GridSheetColSelected1 - Color.FromArgb(255, 239, 113), // GridSheetColSelected2 - Color.FromArgb(223, 227, 232), // GridSheetRowNormal - Color.FromArgb(255, 223, 107), // GridSheetRowPressed - Color.FromArgb(245, 210, 87), // GridSheetRowSelected - Color.FromArgb(218, 220, 221), // GridDataCellBorder - Color.FromArgb(183, 219, 255), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(168, 168, 168), // InputControlTextDisabled - Color.FromArgb(212, 214, 217), // InputControlBorderNormal - Color.FromArgb(187, 187, 187), // InputControlBorderDisabled - Color.FromArgb(255, 255, 255), // InputControlBackNormal - Color.FromArgb(240, 240, 240), // InputControlBackDisabled - Color.FromArgb(247, 247, 247), // InputControlBackInactive - Color.Black, // InputDropDownNormal1 - Color.Transparent, // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack - Color.FromArgb( 59, 59, 59), // ContextMenuHeadingText - Color.White, // ContextMenuImageColumn - Color.FromArgb(224, 227, 231), // AppButtonBack1 - Color.FromArgb(224, 227, 231), // AppButtonBack2 - Color.FromArgb(135, 140, 146), // AppButtonBorder - Color.FromArgb(224, 227, 231), // AppButtonOuter1 - Color.FromArgb(224, 227, 231), // AppButtonOuter2 - Color.FromArgb(224, 227, 231), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 - Color.FromArgb(135, 140, 146), // AppButtonInner2 - Color.White, // AppButtonMenuDocs - Color.Black, // AppButtonMenuDocsText - Color.FromArgb(250, 253, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(227, 232, 237), // SeparatorHighInternalBorder2 - Color.FromArgb(198, 202, 205), // RibbonGalleryBorder - Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal - Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking - Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 - Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 Color.FromArgb(177, 181, 186), // RibbonTabTracking1 - Color.FromArgb(229, 231, 235), // RibbonTabTracking3 - Color.FromArgb(231, 233, 235), // RibbonTabTracking4 - Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 - Color.FromArgb(246, 247, 248), // RibbonGroupBorder4 - Color.FromArgb(249, 250, 250), // RibbonGroupBorder5 - Color.FromArgb(102, 109, 124), // RibbonGroupTitleText - Color.FromArgb(151, 156, 163), // RibbonDropArrowLight - Color.FromArgb( 39, 49, 60), // RibbonDropArrowDark - Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 - Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 - Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder - Color.Black, // ButtonNavigatorText - Color.FromArgb(207, 213, 220), // ButtonNavigatorTrack1 - Color.FromArgb(232, 234, 238), // ButtonNavigatorTrack2 - Color.FromArgb(191, 196, 202), // ButtonNavigatorPressed1 - Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 - Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 - Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 - Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + + #endregion + + #region Color Arrays + + private static readonly Color[] _trackBarColors = + [ + Color.Red, // Tick marks + Color.FromArgb(166, 170, 175), // Top track + Color.FromArgb(226, 220, 235), // Bottom track + Color.FromArgb(206, 200, 215), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(80, 81, 82) // Border (normal) position + ]; + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb( 59, 59, 59), // TextLabelControl + Color.FromArgb( 59, 59, 59), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(170, 170, 170), // ButtonNormalBorder1 -n + Color.FromArgb(170, 170, 170), // ButtonNormalDefaultBorder -n + Color.FromArgb(253, 253, 253), // ButtonNormalBack1 -n + Color.FromArgb(253, 253, 253), // ButtonNormalBack2 -n + Color.FromArgb(235, 235, 235), // ButtonNormalDefaultBack1 + Color.FromArgb(195, 195, 195), // ButtonNormalDefaultBack2 + Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack1 + Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack2 + Color.White , // PanelClient -n + Color.FromArgb(207, 212, 218), // PanelAlternative + Color.FromArgb(213, 213, 213), // ControlBorder -n + Color.FromArgb(250, 253, 255), // SeparatorHighBorder1 + Color.FromArgb(227, 232, 237), // SeparatorHighBorder2 + Color.FromArgb(255, 255, 255), // HeaderPrimaryBack1 -n + Color.FromArgb(255, 255, 255), // HeaderPrimaryBack2 -n + Color.FromArgb(255, 255, 255), // HeaderSecondaryBack1 + Color.FromArgb(255, 255, 255), // HeaderSecondaryBack2-n + Color.FromArgb( 59, 59, 59), // HeaderText + Color.FromArgb(255, 255, 255), // StatusStripText + Color.FromArgb(236, 199, 87), // ButtonBorder + Color.FromArgb(247, 250, 252), // SeparatorLight + Color.FromArgb(119, 123, 127), // SeparatorDark + Color.FromArgb(191, 191, 191), // GripLight + Color.FromArgb(191, 191, 191), // GripDark + Color.FromArgb(227, 230, 232), // ToolStripBack + Color.FromArgb(0 , 114, 198), // StatusStripLight + Color.FromArgb(0 , 114, 198), // StatusStripDark + Color.White, // ImageMargin + Color.FromArgb(255, 255, 255), // ToolStripBegin + Color.FromArgb(255, 255, 255), // ToolStripMiddle + Color.FromArgb(255, 255, 255), // ToolStripEnd + Color.FromArgb(147, 154, 163), // OverflowBegin + Color.FromArgb(147, 154, 163), // OverflowMiddle + Color.FromArgb(147, 154, 163), // OverflowEnd + Color.FromArgb(147, 154, 163), // ToolStripBorder + Color.FromArgb(0 , 114, 198), // FormBorderActive -n + Color.FromArgb(134, 139, 145), // FormBorderInactive + Color.FromArgb(228, 230, 232), // FormBorderActiveLight + Color.FromArgb(255, 255, 255), // FormBorderActiveDark + Color.FromArgb(248, 247, 247), // FormBorderInactiveLight + Color.FromArgb(248, 247, 247), // FormBorderInactiveDark + Color.FromArgb(101, 109, 117), // FormBorderHeaderActive + Color.FromArgb(134, 139, 145), // FormBorderHeaderInactive + Color.FromArgb(235, 237, 240), // FormBorderHeaderActive1 + Color.FromArgb(228, 230, 232), // FormBorderHeaderActive2 + Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive1 + Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive2 + Color.FromArgb( 59, 59, 59), // FormHeaderShortActive + Color.FromArgb(138, 138, 138), // FormHeaderShortInactive + Color.FromArgb( 59, 59, 59), // FormHeaderLongActive + Color.FromArgb(138, 138, 138), // FormHeaderLongInactive + Color.FromArgb(166, 172, 179), // FormButtonBorderTrack + Color.FromArgb(255, 255, 255), // FormButtonBack1Track + Color.FromArgb(228, 228, 229), // FormButtonBack2Track + Color.FromArgb(166, 172, 179), // FormButtonBorderPressed + Color.FromArgb(223, 228, 235), // FormButtonBack1Pressed + Color.FromArgb(188, 193, 200), // FormButtonBack2Pressed + Color.Black, // TextButtonFormNormal + Color.Black, // TextButtonFormTracking + Color.Black, // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb( 59, 59, 59), // TextLabelPanel + Color.FromArgb(102, 102, 102), // RibbonTabTextNormal -n + Color.FromArgb( 0, 114, 198), // RibbonTabTextChecked -n + Color.FromArgb(182, 186, 191), // RibbonTabSelected1 + Color.White, // RibbonTabSelected2 + Color.White, // RibbonTabSelected3 + Color.White, // RibbonTabSelected4 + Color.White, // RibbonTabSelected5 + Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(248, 249, 249), // RibbonTabTracking2 + Color.FromArgb(182, 186, 191), // RibbonTabHighlight1 + Color.White, // RibbonTabHighlight2 + Color.White, // RibbonTabHighlight3 + Color.White, // RibbonTabHighlight4 + Color.White, // RibbonTabHighlight5 + Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor + Color.FromArgb(212, 212, 212), // RibbonGroupsArea1 -n + Color.FromArgb(212, 212, 212), // RibbonGroupsArea2 -n + Color.White, // RibbonGroupsArea3 -n + Color.White, // RibbonGroupsArea4 -n + Color.White, // RibbonGroupsArea5 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder1 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder2 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 + Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark + Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark + Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 + Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 + Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 + Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 + Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 + Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 + Color.FromArgb( 59, 59, 59), // RibbonGroupCollapsedText + Color.FromArgb(179, 185, 195), // AlternatePressedBack1 + Color.FromArgb(216, 224, 224), // AlternatePressedBack2 + Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(157, 166, 174), // FormButtonBack1Checked + Color.FromArgb(222, 230, 242), // FormButtonBack2Checked + Color.FromArgb(149, 154, 160), // FormButtonBorderCheck + Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack + Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack + Color.FromArgb(180, 180, 180), // RibbonQATMini1 + Color.FromArgb(210, 215, 221), // RibbonQATMini2 + Color.FromArgb(195, 200, 206), // RibbonQATMini3 + Color.FromArgb(10, Color.White), // RibbonQATMini4 + Color.FromArgb(32, Color.White), // RibbonQATMini5 + Color.FromArgb(200, 200, 200), // RibbonQATMini1I + Color.FromArgb(233, 234, 238), // RibbonQATMini2I + Color.FromArgb(223, 224, 228), // RibbonQATMini3I + Color.FromArgb(10, Color.White), // RibbonQATMini4I + Color.FromArgb(32, Color.White), // RibbonQATMini5I + Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 + Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 + Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 + Color.FromArgb( 90, 90, 90), // RibbonQATButtonDark + Color.FromArgb(210, 212, 215), // RibbonQATButtonLight + Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 + Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 + Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark + Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 + Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.White, // GridListNormal2 + Color.FromArgb(203, 207, 212), // GridListPressed1 + Color.White, // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(238, 241, 247), // GridSheetColNormal1 + Color.FromArgb(218, 222, 227), // GridSheetColNormal2 + Color.FromArgb(255, 223, 107), // GridSheetColPressed1 + Color.FromArgb(255, 252, 230), // GridSheetColPressed2 + Color.FromArgb(255, 211, 89), // GridSheetColSelected1 + Color.FromArgb(255, 239, 113), // GridSheetColSelected2 + Color.FromArgb(223, 227, 232), // GridSheetRowNormal + Color.FromArgb(255, 223, 107), // GridSheetRowPressed + Color.FromArgb(245, 210, 87), // GridSheetRowSelected + Color.FromArgb(218, 220, 221), // GridDataCellBorder + Color.FromArgb(183, 219, 255), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(168, 168, 168), // InputControlTextDisabled + Color.FromArgb(212, 214, 217), // InputControlBorderNormal + Color.FromArgb(187, 187, 187), // InputControlBorderDisabled + Color.FromArgb(255, 255, 255), // InputControlBackNormal + Color.FromArgb(240, 240, 240), // InputControlBackDisabled + Color.FromArgb(247, 247, 247), // InputControlBackInactive + Color.Black, // InputDropDownNormal1 + Color.Transparent, // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack + Color.FromArgb( 59, 59, 59), // ContextMenuHeadingText + Color.White, // ContextMenuImageColumn + Color.FromArgb(224, 227, 231), // AppButtonBack1 + Color.FromArgb(224, 227, 231), // AppButtonBack2 + Color.FromArgb(135, 140, 146), // AppButtonBorder + Color.FromArgb(224, 227, 231), // AppButtonOuter1 + Color.FromArgb(224, 227, 231), // AppButtonOuter2 + Color.FromArgb(224, 227, 231), // AppButtonOuter3 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 + Color.FromArgb(135, 140, 146), // AppButtonInner2 + Color.White, // AppButtonMenuDocs + Color.Black, // AppButtonMenuDocsText + Color.FromArgb(250, 253, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(227, 232, 237), // SeparatorHighInternalBorder2 + Color.FromArgb(198, 202, 205), // RibbonGalleryBorder + Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal + Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking + Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 + Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 // Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(229, 231, 235), // RibbonTabTracking3 + Color.FromArgb(231, 233, 235), // RibbonTabTracking4 + Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 + Color.FromArgb(246, 247, 248), // RibbonGroupBorder4 + Color.FromArgb(249, 250, 250), // RibbonGroupBorder5 + Color.FromArgb(102, 109, 124), // RibbonGroupTitleText + Color.FromArgb(151, 156, 163), // RibbonDropArrowLight + Color.FromArgb( 39, 49, 60), // RibbonDropArrowDark + Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 + Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 + Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder + Color.Black, // ButtonNavigatorText + Color.FromArgb(207, 213, 220), // ButtonNavigatorTrack1 + Color.FromArgb(232, 234, 238), // ButtonNavigatorTrack2 + Color.FromArgb(191, 196, 202), // ButtonNavigatorPressed1 + Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 + Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 + Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 + Color.FromArgb(221, 221, 221) // ToolTipBottom + ]; + + #endregion #endregion #region Identity @@ -295,8 +338,8 @@ static PaletteOffice2010White() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -305,11 +348,11 @@ static PaletteOffice2010White() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// - /// Initialize a new instance of the PaletteOffice2010Silver class. + /// Initialize a new instance of the PaletteOffice2010White class. /// public PaletteOffice2010White() : base(_schemeOfficeColors, @@ -343,46 +386,88 @@ public PaletteOffice2010White() /// Style of button spec. /// State for which image is required. /// Image value. - public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, - PaletteState state) => style switch - { - PaletteButtonSpecStyle.FormClose => state switch - { - PaletteState.Tracking => _formCloseActive, - PaletteState.Normal => _formCloseNormal, - PaletteState.Pressed => _formClosePressed, - _ => _formCloseDisabled - }, - PaletteButtonSpecStyle.FormMin => state switch - { - PaletteState.Normal => _formMinimiseNormal, - PaletteState.Tracking => _formMinimiseActive, - PaletteState.Pressed => _formMinimisePressed, - _ => _formMinimiseDisabled - }, - PaletteButtonSpecStyle.FormMax => state switch - { - PaletteState.Normal => _formMaximiseNormal, - PaletteState.Tracking => _formMaximiseActive, - PaletteState.Pressed => _formMaximisePressed, - _ => _formMaximiseDisabled - }, - PaletteButtonSpecStyle.FormRestore => state switch - { - PaletteState.Normal => _formRestoreNormal, - PaletteState.Tracking => _formRestoreActive, - PaletteState.Pressed => _formRestorePressed, - _ => _formRestoreDisabled - }, - PaletteButtonSpecStyle.FormHelp => state switch - { - PaletteState.Tracking => _formHelpActive, - PaletteState.Pressed => _formHelpPressed, - PaletteState.Normal => _formHelpNormal, - _ => _formHelpDisabled - }, - _ => base.GetButtonSpecImage(style, state) - }; + public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, PaletteState state) => style switch + { + PaletteButtonSpecStyle.FormClose => state switch + { + PaletteState.Tracking => _formCloseActive, + PaletteState.Normal => _formCloseNormal, + PaletteState.Pressed => _formClosePressed, + _ => _formCloseDisabled + }, + PaletteButtonSpecStyle.FormMin => state switch + { + PaletteState.Normal => _formMinimiseNormal, + PaletteState.Tracking => _formMinimiseActive, + PaletteState.Pressed => _formMinimisePressed, + _ => _formMinimiseDisabled + }, + PaletteButtonSpecStyle.FormMax => state switch + { + PaletteState.Normal => _formMaximiseNormal, + PaletteState.Tracking => _formMaximiseActive, + PaletteState.Pressed => _formMaximisePressed, + _ => _formMaximiseDisabled + }, + PaletteButtonSpecStyle.FormRestore => state switch + { + PaletteState.Normal => _formRestoreNormal, + PaletteState.Tracking => _formRestoreActive, + PaletteState.Pressed => _formRestorePressed, + _ => _formRestoreDisabled + }, + PaletteButtonSpecStyle.FormHelp => state switch + { + PaletteState.Tracking => _formHelpActive, + PaletteState.Pressed => _formHelpPressed, + PaletteState.Normal => _formHelpNormal, + _ => _formHelpDisabled + }, + _ => base.GetButtonSpecImage(style, state) + }; + #endregion + + #region ColorTable + /// + /// Gets access to the color table instance. + /// + public override KryptonColorTable ColorTable => Table ??= new KryptonColorTable2010White(_schemeOfficeColors, InheritBool.True, this); + + #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Black.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Black.cs index ef2cc43eb..26d6fcf7e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Black.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Black.cs @@ -5,20 +5,51 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { + #region Class: PaletteOffice2010Black + /// /// Provides the Black color scheme variant of the Office 2010 palette. /// - public class PaletteOffice2010Black : PaletteOffice2010Base + public class PaletteOffice2010Black : PaletteOffice2010BlackBase { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(71, 71, 71); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(113, 113, 113); + + #endregion + + #region Ribbon Specific Colors + + //private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + //private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + //private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(41, 41, 41); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(79, 79, 79); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -28,14 +59,14 @@ public class PaletteOffice2010Black : PaletteOffice2010Base #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; + private static readonly Image? _blackDropDownButton = Office2010ArrowResources.Office2010BlackDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlackContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlackCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlackCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlackCloseActive; @@ -63,24 +94,25 @@ public class PaletteOffice2010Black : PaletteOffice2010Base private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010Black; #endregion - private static readonly Color _disabledRibbonText = Color.FromArgb(205, 205, 205); + + private static readonly Color _disabledText = Color.FromArgb(167, 167, 167); #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(17, 17, 17), // Tick marks Color.FromArgb(37, 37, 37), // Top track Color.FromArgb(174, 174, 174), // Bottom track Color.FromArgb(131, 132, 132), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(35, 35, 35) // Border (normal) position - }; + ]; private static readonly Color[] _schemeOfficeColors = - { - Color.FromArgb(255, 255, 255), // (76, 83, 92), // TextLabelControl - Color.Black, // TextButtonNormal + [ + Color.FromArgb(70, 70, 70), // (76, 83, 92), // TextLabelControl + Color.FromArgb(70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(106, 106, 106), // ButtonNormalBorder1 Color.FromArgb(94, 94, 94), // ButtonNormalDefaultBorder @@ -149,7 +181,6 @@ public class PaletteOffice2010Black : PaletteOffice2010Base Color.Violet, // LinkVisitedOverridePanel Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel Color.White, // TextLabelPanel - //Color.FromArgb(226, 226, 226), // RibbonTabTextNormal Color.White, // RibbonTabTextNormal Color.Black, // RibbonTabTextChecked Color.FromArgb(94, 94, 94), // RibbonTabSelected1 @@ -172,40 +203,40 @@ public class PaletteOffice2010Black : PaletteOffice2010Base Color.FromArgb(145, 145, 145), // RibbonGroupsArea5 Color.FromArgb(159, 159, 159), // RibbonGroupBorder1 Color.FromArgb(194, 194, 194), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(92, 92, 94), // RibbonGroupDialogDark Color.FromArgb(123, 125, 125), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(78, 78, 78), // RibbonMinimizeBarDark - Color.FromArgb(110, 110, 110), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(71, 71, 71), // RibbonMinimizeBarDark + Color.FromArgb(113, 113, 113), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 Color.FromArgb(147, 147, 147), // RibbonGroupFrameBorder1 Color.FromArgb(139, 139, 139), // RibbonGroupFrameBorder2 Color.FromArgb(187, 187, 188), // RibbonGroupFrameInside1 Color.FromArgb(167, 167, 168), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(59, 59, 59), // RibbonGroupCollapsedText Color.FromArgb(158, 163, 172), // AlternatePressedBack1 Color.FromArgb(212, 215, 216), // AlternatePressedBack2 @@ -263,14 +294,14 @@ public class PaletteOffice2010Black : PaletteOffice2010Base Color.FromArgb(218, 220, 221), // GridDataCellBorder Color.FromArgb(183, 219, 255), // GridDataCellSelected //Color.Black, - Color.FromArgb(255, 255, 255), // InputControlTextNormal + Color.FromArgb(70, 70, 70), // InputControlTextNormal Color.FromArgb(168, 168, 168), // InputControlTextDisabled Color.FromArgb(132, 132, 132), // InputControlBorderNormal Color.FromArgb(187, 187, 187), // InputControlBorderDisabled - Color.FromArgb(38, 38, 38), // InputControlBackNormal + Color.White, // InputControlBackNormal Color.FromArgb(240, 240, 240), // InputControlBackDisabled Color.FromArgb(192, 192, 192), // InputControlBackInactive - Color.Black, // InputDropDownNormal1 + Color.White, // InputDropDownNormal1 Color.Transparent, // InputDropDownNormal2 Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 Color.Transparent, // InputDropDownDisabled2 @@ -283,7 +314,7 @@ public class PaletteOffice2010Black : PaletteOffice2010Base Color.FromArgb(70, 70, 70), // AppButtonOuter1 Color.FromArgb(70, 70, 70), // AppButtonOuter2 Color.FromArgb(70, 70, 70), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(50, 50, 50), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.Black, // AppButtonMenuDocsText @@ -313,7 +344,7 @@ public class PaletteOffice2010Black : PaletteOffice2010Base Color.FromArgb(91, 91, 91), // ButtonNavigatorChecked1 Color.FromArgb(73, 73, 73), // ButtonNavigatorChecked2 Color.FromArgb(201, 201, 201) // ToolTipBottom - }; + ]; #endregion @@ -335,8 +366,8 @@ static PaletteOffice2010Black() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -345,7 +376,7 @@ static PaletteOffice2010Black() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -353,427 +384,4448 @@ static PaletteOffice2010Black() /// public PaletteOffice2010Black() : base(_schemeOfficeColors, - _checkBoxList, - _galleryButtonList, - _radioButtonArray, - _trackBarColors) + _checkBoxList, + _galleryButtonList, + _radioButtonArray, + _trackBarColors) { } #endregion - #region Back + #region Images /// - /// Gets the color background drawing style. + /// Gets a drop down button image appropriate for the provided state. /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color drawing style. - public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) - { - // We do not provide override values - if (CommonHelper.IsOverrideState(state)) - { - return PaletteColorStyle.Inherit; - } - - switch (style) - { - case PaletteBackStyle.ButtonNavigatorStack: - case PaletteBackStyle.ButtonNavigatorOverflow: - case PaletteBackStyle.ButtonNavigatorMini: - switch (state) - { - case PaletteState.CheckedNormal: - case PaletteState.CheckedTracking: - case PaletteState.CheckedPressed: - return PaletteColorStyle.ExpertSquareHighlight2; - } - break; - } - - return base.GetBackColorStyle(style, state); - } + /// PaletteState for which image is required. + public override Image? GetDropDownButtonImage(PaletteState state) => state != PaletteState.Disabled ? _blackDropDownButton : base.GetDropDownButtonImage(state); /// - /// Gets the second back color. + /// Gets an image indicating a sub-menu on a context menu item. /// - /// Background style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) - { - switch (style) - { - case PaletteBackStyle.TabDock: - switch (state) - { - case PaletteState.Normal: - return _schemeOfficeColors[(int)SchemeOfficeColors.HeaderSecondaryBack1]; - } - break; - } + /// Appropriate image for drawing; otherwise null. + public override Image? GetContextMenuSubMenuImage() => _contextMenuSubMenu; - return base.GetBackColor2(style, state); - } #endregion - #region Border + #region ButtonSpec /// - /// Gets the first border color. + /// Gets the image to display for the button. /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) - { - switch (style) + /// Style of button spec. + /// State for which image is required. + /// Image value. + public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, + PaletteState state) => style switch { - case PaletteBorderStyle.TabDock: - switch (state) - { - case PaletteState.Normal: - return _schemeOfficeColors[(int)SchemeOfficeColors.ControlBorder]; - } - break; - } + PaletteButtonSpecStyle.FormClose => state switch + { + PaletteState.Tracking => _formCloseActive, + PaletteState.Normal => _formCloseNormal, + PaletteState.Pressed => _formClosePressed, + _ => _formCloseDisabled + }, + PaletteButtonSpecStyle.FormMin => state switch + { + PaletteState.Normal => _formMinimiseNormal, + PaletteState.Tracking => _formMinimiseActive, + PaletteState.Pressed => _formMinimisePressed, + _ => _formMinimiseDisabled + }, + PaletteButtonSpecStyle.FormMax => state switch + { + PaletteState.Normal => _formMaximiseNormal, + PaletteState.Tracking => _formMaximiseActive, + PaletteState.Pressed => _formMaximisePressed, + _ => _formMaximiseDisabled + }, + PaletteButtonSpecStyle.FormRestore => state switch + { + PaletteState.Normal => _formRestoreNormal, + PaletteState.Tracking => _formRestoreActive, + PaletteState.Pressed => _formRestorePressed, + _ => _formRestoreDisabled + }, + PaletteButtonSpecStyle.FormHelp => state switch + { + PaletteState.Tracking => _formHelpActive, + PaletteState.Pressed => _formHelpPressed, + PaletteState.Normal => _formHelpNormal, + _ => _formHelpDisabled + }, + _ => base.GetButtonSpecImage(style, state) + }; + #endregion - return base.GetBorderColor1(style, state); - } + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion + } + + #endregion + + #region Class: PaletteOffice2010BlackBase + + /// + /// Provides a base for Office 2010 palettes. + /// + public abstract class PaletteOffice2010BlackBase : PaletteBase + { + #region Static Fields + + #region Padding + + private static readonly Padding _contentPaddingGrid = new Padding(2, 1, 2, 1); + private static readonly Padding _contentPaddingHeader1 = new Padding(2, 1, 2, 1); + private static readonly Padding _contentPaddingHeader2 = new Padding(2, 1, 2, 1); + private static readonly Padding _contentPaddingDock = new Padding(2, 2, 2, 1); + private static readonly Padding _contentPaddingCalendar = new Padding(2); + private static readonly Padding _contentPaddingHeaderForm = new Padding(10, 6, 3, 0); // 10 is from the RealWindowFrameSize +1 + private static readonly Padding _contentPaddingLabel = new Padding(3, 1, 3, 1); + private static readonly Padding _contentPaddingLabel2 = new Padding(8, 2, 8, 2); + private static readonly Padding _contentPaddingButtonInputControl = new Padding(0); + private static readonly Padding _contentPaddingButton12 = new Padding(1); + private static readonly Padding _contentPaddingButton3 = new Padding(1, 0, 1, 0); + private static readonly Padding _contentPaddingButton4 = new Padding(4, 3, 4, 3); + private static readonly Padding _contentPaddingButton5 = new Padding(3, 3, 3, 2); + private static readonly Padding _contentPaddingButton6 = new Padding(3); + private static readonly Padding _contentPaddingButton7 = new Padding(1, 1, 0, 1); + private static readonly Padding _contentPaddingButtonForm = new Padding(0); + private static readonly Padding _contentPaddingButtonGallery = new Padding(1, 0, 1, 0); + private static readonly Padding _contentPaddingButtonListItem = new Padding(0, -1, 0, -1); + private static readonly Padding _contentPaddingToolTip = new Padding(2); + private static readonly Padding _contentPaddingSuperTip = new Padding(4); + private static readonly Padding _contentPaddingKeyTip = new Padding(0, -1, 0, -3); + private static readonly Padding _contentPaddingContextMenuHeading = new Padding(8, 2, 8, 0); + private static readonly Padding _contentPaddingContextMenuImage = new Padding(0); + private static readonly Padding _contentPaddingContextMenuItemText = new Padding(9, 1, 7, 0); + private static readonly Padding _contentPaddingContextMenuItemTextAlt = new Padding(7, 1, 6, 0); + private static readonly Padding _contentPaddingContextMenuItemShortcutText = new Padding(3, 1, 4, 0); + private static readonly Padding _metricPaddingRibbon = new Padding(0, 1, 1, 1); + private static readonly Padding _metricPaddingRibbonAppButton = new Padding(3, 0, 3, 0); + private static readonly Padding _metricPaddingHeader = new Padding(0, 3, 1, 3); + private static readonly Padding _metricPaddingHeaderForm = new Padding(0, 3, 0, -3); // Move the Maximised Form buttons down a bit + private static readonly Padding _metricPaddingInputControl = new Padding(0, 1, 0, 1); + private static readonly Padding _metricPaddingBarInside = new Padding(3); + private static readonly Padding _metricPaddingBarTabs = new Padding(0); + private static readonly Padding _metricPaddingBarOutside = new Padding(0, 0, 0, 3); + private static readonly Padding _metricPaddingPageButtons = new Padding(1, 3, 1, 3); + + #endregion + + #region Images + + private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; + private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; + + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; + private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; + private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; + private static readonly Image _buttonSpecPrevious = GenericProfessionalImageResources.ProfessionalPreviousButton; + private static readonly Image _buttonSpecArrowLeft = GenericProfessionalImageResources.ProfessionalArrowLeftButton; + private static readonly Image _buttonSpecArrowRight = GenericProfessionalImageResources.ProfessionalArrowRightButton; + private static readonly Image _buttonSpecArrowUp = GenericProfessionalImageResources.ProfessionalArrowUpButton; + private static readonly Image _buttonSpecArrowDown = GenericProfessionalImageResources.ProfessionalArrowDownButton; + private static readonly Image _buttonSpecDropDown = GenericProfessionalImageResources.ProfessionalDropDownButton; + private static readonly Image _buttonSpecPinVertical = ProfessionalPinImageResources.ProfessionalPinVerticalButton; + private static readonly Image _buttonSpecPinHorizontal = ProfessionalPinImageResources.ProfessionalPinHorizontalButton; + private static readonly Image _buttonSpecPendantClose = Office2010MDIImageResources.Office2010ButtonMDIClose; + private static readonly Image _buttonSpecPendantMin = Office2010MDIImageResources.Office2010ButtonMDIMin; + private static readonly Image _buttonSpecPendantRestore = Office2010MDIImageResources.Office2010ButtonMDIRestore; + private static readonly Image _buttonSpecWorkspaceMaximize = ProfessionalControlBoxResources.ProfessionalMaximize; + private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; + private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; + private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + #region Integrated Tool Bar Images + + private static readonly Image _integratedToolbarNewNormal = Office2010ToolbarImageResources.Office2010ToolbarNewNormal; + + private static readonly Image _integratedToolbarOpenNormal = Office2010ToolbarImageResources.Office2010ToolbarOpenNormal; + + private static readonly Image _integratedToolbarSaveAllNormal = Office2010ToolbarImageResources.Office2010ToolbarSaveAllNormal; + + private static readonly Image _integratedToolbarSaveAsNormal = Office2010ToolbarImageResources.Office2010ToolbarSaveAsNormal; + + private static readonly Image _integratedToolbarSaveNormal = Office2010ToolbarImageResources.Office2010ToolbarSaveNormal; + + private static readonly Image _integratedToolbarCutNormal = Office2010ToolbarImageResources.Office2010ToolbarCutNormal; + + private static readonly Image _integratedToolbarCopyNormal = Office2010ToolbarImageResources.Office2010ToolbarCopyNormal; + + private static readonly Image _integratedToolbarPasteNormal = Office2010ToolbarImageResources.Office2010ToolbarPasteNormal; + + private static readonly Image _integratedToolbarUndoNormal = Office2010ToolbarImageResources.Office2010ToolbarUndoNormal; + + private static readonly Image _integratedToolbarRedoNormal = Office2010ToolbarImageResources.Office2010ToolbarRedoNormal; + + private static readonly Image _integratedToolbarPageSetupNormal = Office2010ToolbarImageResources.Office2010ToolbarPageSetupNormal; + + private static readonly Image _integratedToolbarPrintPreviewNormal = Office2010ToolbarImageResources.Office2010ToolbarPrintPreviewNormal; + + private static readonly Image _integratedToolbarPrintNormal = Office2010ToolbarImageResources.Office2010ToolbarPrintNormal; + + private static readonly Image _integratedToolbarQuickPrintNormal = Office2010ToolbarImageResources.Office2010ToolbarQuickPrintNormal; + + #endregion + + #endregion + + #region Colors + + private static readonly Color _gridTextColor = Color.Black; + private static readonly Color _disabledText2 = Color.FromArgb(183, 182, 173); //(128, 128, 128); + private static readonly Color _disabledText = Color.FromArgb(196, 196, 196); + private static readonly Color _disabledBack = Color.FromArgb(235, 235, 235); + private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); + private static readonly Color _disabledGlyphDark = Color.FromArgb(183, 183, 183); + private static readonly Color _disabledGlyphLight = Color.FromArgb(237, 237, 237); + private static readonly Color _contextCheckedTabBorder1 = Color.FromArgb(223, 119, 0); + private static readonly Color _contextCheckedTabBorder2 = Color.FromArgb(230, 190, 129); + private static readonly Color _contextCheckedTabBorder3 = Color.FromArgb(220, 202, 171); + private static readonly Color _contextCheckedTabBorder4 = Color.FromArgb(255, 252, 247); + private static readonly Color _contextTabSeparator = Color.White; + private static readonly Color _contextTextColor = Color.White; + private static readonly Color _todayBorder = Color.FromArgb(187, 85, 3); + private static readonly Color _toolTipBack1 = Color.White; + private static readonly Color _toolTipBack2 = Color.FromArgb(201, 217, 239); + private static readonly Color _toolTipBorder = Color.FromArgb(118, 118, 118); + private static readonly Color _toolTipText = Color.FromArgb(76, 76, 76); + private static readonly Color _contextMenuBack = Color.White; + private static readonly Color _contextMenuBorder = Color.FromArgb(134, 134, 134); + private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); + private static readonly Color _contextMenuImageBackChecked = Color.FromArgb(252, 241, 194); + private static readonly Color _contextMenuImageBorderChecked = Color.FromArgb(242, 149, 54); + private static readonly Color _formCloseBorderTracking = Color.FromArgb(155, 61, 61); + private static readonly Color _formCloseBorderPressed = Color.FromArgb(155, 61, 61); + private static readonly Color _formCloseBorderCheckedNormal = Color.FromArgb(155, 61, 61); + private static readonly Color _formCloseTracking1 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseTracking2 = Color.FromArgb(227, 97, 98); + private static readonly Color _formClosePressed1 = Color.FromArgb(242, 119, 118); + private static readonly Color _formClosePressed2 = Color.FromArgb(206, 85, 84); + private static readonly Color _formCloseChecked1 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseChecked2 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseCheckedTracking1 = Color.FromArgb(255, 132, 130); + private static readonly Color _formCloseCheckedTracking2 = Color.FromArgb(255, 132, 130); + + #endregion + + #region Color Arrays + + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), + Color.FromArgb(214, 220, 231), + Color.FromArgb(188, 198, 211), + Color.FromArgb(254, 254, 255), + Color.FromArgb(206, 213, 225) + ]; + + + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(255, 251, 230), + Color.FromArgb(248, 230, 143), + Color.FromArgb(238, 213, 126), + Color.FromArgb(254, 247, 129), + Color.FromArgb(240, 201, 41) + ]; + + + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), + Color.FromArgb(228, 198, 149), + Color.FromArgb(166, 97, 7), + Color.FromArgb(242, 155, 57), + Color.FromArgb(236, 136, 9) + ]; + + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(180, 180, 180), // Button, Disabled, Border + Color.FromArgb(237, 201, 88), // Button, Tracking, Border 1 + Color.FromArgb(243, 213, 73), // Button, Tracking, Border 2 + Color.FromArgb(194, 118, 43), // Button, Pressed, Border 1 + Color.FromArgb(194, 158, 71), // Button, Pressed, Border 2 + Color.FromArgb(194, 138, 48), // Button, Checked, Border 1 + Color.FromArgb(194, 164, 77) // Button, Checked, Border 2 + ]; + + + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 + Color.FromArgb(248, 225, 135), // Button, Tracking, Back 1 + Color.FromArgb(251, 248, 224), // Button, Tracking, Back 2 + Color.FromArgb(255, 228, 138), // Button, Pressed, Back 1 + Color.FromArgb(194, 118, 43), // Button, Pressed, Back 2 + Color.FromArgb(255, 216, 108), // Button, Checked, Back 1 + Color.FromArgb(255, 244, 128), // Button, Checked, Back 2 + Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 + Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 + ]; + + #endregion + + #endregion + + #region Instance Fields + protected KryptonColorTable2010? Table { get; set; } + private readonly Color[] _ribbonColors; + private readonly Color[] _trackBarColors; + private readonly ImageList _checkBoxList; + private readonly ImageList _galleryButtonList; + private readonly Image?[] _radioButtonArray; + #endregion + + #region Identity /// - /// Gets the second border color. + /// Initialize a new instance of the PaletteOffice2010BlackBase class. /// - /// Border style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) + /// Array of palette specific colors. + /// List of images for check box. + /// List of images for gallery buttons. + /// Array of images for radio button. + /// Array of track bar specific colors. + protected PaletteOffice2010BlackBase([DisallowNull] Color[] schemeColors, + [DisallowNull] ImageList checkBoxList, + [DisallowNull] ImageList galleryButtonList, + [DisallowNull] Image?[] radioButtonArray, + Color[] trackBarColors) { - switch (style) + Debug.Assert(schemeColors != null); + Debug.Assert(checkBoxList != null); + Debug.Assert(galleryButtonList != null); + Debug.Assert(radioButtonArray != null); + + // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2010BlackBase); + + if (schemeColors != null) { - case PaletteBorderStyle.TabDock: - switch (state) - { - case PaletteState.Normal: - return _schemeOfficeColors[(int)SchemeOfficeColors.ControlBorder]; - } - break; + _ribbonColors = schemeColors; + } + if (checkBoxList != null) + { + _checkBoxList = checkBoxList; + } + if (galleryButtonList != null) + { + _galleryButtonList = galleryButtonList; + } + if (radioButtonArray != null) + { + _radioButtonArray = radioButtonArray; + } + if (trackBarColors != null) + { + _trackBarColors = trackBarColors; } - return base.GetBorderColor2(style, state); + // Get the font settings from the system + DefineFonts(); } #endregion - #region Content + #region ColorTable /// - /// Gets the first back color for the short text. + /// Gets access to the color table instance. /// - /// Content style. - /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) - { - switch (style) - { - case PaletteContentStyle.ButtonStandalone: - case PaletteContentStyle.ButtonGallery: - case PaletteContentStyle.ButtonAlternate: - case PaletteContentStyle.ButtonCluster: - case PaletteContentStyle.ButtonCustom1: - case PaletteContentStyle.ButtonCustom2: - case PaletteContentStyle.ButtonCustom3: - if (state == PaletteState.NormalDefaultOverride) - { - return _schemeOfficeColors[(int)SchemeOfficeColors.TextButtonChecked]; - } - - break; - case PaletteContentStyle.ButtonNavigatorMini: - case PaletteContentStyle.ButtonNavigatorStack: - case PaletteContentStyle.ButtonNavigatorOverflow: - return state == PaletteState.NormalDefaultOverride - ? _schemeOfficeColors[(int)SchemeOfficeColors.TextButtonChecked] - : _schemeOfficeColors[(int)SchemeOfficeColors.ButtonNavigatorText]; + public override KryptonColorTable ColorTable => Table ??= new KryptonColorTable2010(_ribbonColors, InheritBool.True, this); - case PaletteContentStyle.HeaderPrimary: - case PaletteContentStyle.HeaderDockInactive: - case PaletteContentStyle.HeaderCalendar: - if (state != PaletteState.Disabled) - { - return Color.White; - } + #endregion - break; - } + #region Renderer + /// + /// Gets the renderer to use for this palette. + /// + /// Renderer to use for drawing palette settings. + public override IRenderer GetRenderer() => + // We always want the professional renderer + KryptonManager.RenderOffice2010; - return base.GetContentShortTextColor1(style, state); - } + #endregion + #region Back /// - /// Gets the second back color for the short text. + /// Gets a value indicating if background should be drawn. /// - /// Content style. + /// Background style. /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) + /// InheritBool value. + public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) { // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return InheritBool.Inherit; } - switch (style) + return style switch { - case PaletteContentStyle.ButtonNavigatorMini: - case PaletteContentStyle.ButtonNavigatorStack: - case PaletteContentStyle.ButtonNavigatorOverflow: - return state == PaletteState.NormalDefaultOverride - ? _schemeOfficeColors[(int)SchemeOfficeColors.TextButtonChecked] - : _schemeOfficeColors[(int)SchemeOfficeColors.ButtonNavigatorText]; - - case PaletteContentStyle.HeaderPrimary: - case PaletteContentStyle.HeaderDockInactive: - case PaletteContentStyle.HeaderCalendar: - if (state != PaletteState.Disabled) - { - return Color.White; - } - - break; - } - - return base.GetContentShortTextColor2(style, state); + PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 => InheritBool.False, + PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + PaletteBackStyle.ButtonInputControl => state is PaletteState.Disabled or PaletteState.Normal ? InheritBool.False : InheritBool.True, + _ => InheritBool.True // Default to drawing the background + }; } /// - /// Gets the first back color for the long text. + /// Gets the graphics drawing hint for the background. /// - /// Content style. + /// Background style. /// Palette value should be applicable to this state. - /// Color value. - public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) + /// PaletteGraphicsHint value. + public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) { // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return PaletteGraphicsHint.Inherit; } - switch (style) + return style switch { - case PaletteContentStyle.ButtonNavigatorMini: - case PaletteContentStyle.ButtonNavigatorStack: - case PaletteContentStyle.ButtonNavigatorOverflow: - return state == PaletteState.NormalDefaultOverride - ? _schemeOfficeColors[(int)SchemeOfficeColors.TextButtonChecked] - : _schemeOfficeColors[(int)SchemeOfficeColors.ButtonNavigatorText]; - - case PaletteContentStyle.HeaderPrimary: - case PaletteContentStyle.HeaderDockInactive: - case PaletteContentStyle.HeaderCalendar: - if (state != PaletteState.Disabled) - { - return Color.White; - } - - break; - } - - return base.GetContentLongTextColor1(style, state); + PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or + PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or + PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or + PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or + PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or + PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or + PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or + PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or + PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or + PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or + PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or + PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or + PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or + PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or + PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or + PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or + PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or + PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or + PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or + PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or + PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or + PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or + PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or + PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or + PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or + PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 or + PaletteBackStyle.GridBackgroundCustom2 or PaletteBackStyle.GridBackgroundCustom3 or PaletteBackStyle.GridHeaderColumnList or + PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or + PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or + PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or + PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or + PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; } /// - /// Gets the second back color for the long text. + /// Gets the first background color. /// - /// Content style. + /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) + public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { // We do not provide override values - if (CommonHelper.IsOverrideState(state)) + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) { - case PaletteContentStyle.ButtonNavigatorMini: - case PaletteContentStyle.ButtonNavigatorStack: - case PaletteContentStyle.ButtonNavigatorOverflow: - return state == PaletteState.NormalDefaultOverride - ? _schemeOfficeColors[(int)SchemeOfficeColors.TextButtonChecked] - : _schemeOfficeColors[(int)SchemeOfficeColors.ButtonNavigatorText]; - - case PaletteContentStyle.HeaderPrimary: - case PaletteContentStyle.HeaderDockInactive: - case PaletteContentStyle.HeaderCalendar: - if (state != PaletteState.Disabled) + case PaletteBackStyle.GridHeaderColumnList: + case PaletteBackStyle.GridHeaderColumnCustom1: + case PaletteBackStyle.GridHeaderColumnCustom2: + case PaletteBackStyle.GridHeaderColumnCustom3: + case PaletteBackStyle.GridHeaderRowList: + case PaletteBackStyle.GridHeaderRowCustom1: + case PaletteBackStyle.GridHeaderRowCustom2: + case PaletteBackStyle.GridHeaderRowCustom3: + return state switch { - return Color.White; - } + PaletteState.Disabled => _disabledBack, + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridListPressed1], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridListSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridListNormal1] + }; + case PaletteBackStyle.GridHeaderColumnSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetColPressed1], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetColSelected1], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetColNormal1] + }; + case PaletteBackStyle.GridHeaderRowSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowPressed], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowNormal] + }; + case PaletteBackStyle.GridDataCellList: + case PaletteBackStyle.GridDataCellCustom1: + case PaletteBackStyle.GridDataCellCustom2: + case PaletteBackStyle.GridDataCellCustom3: + return state == PaletteState.CheckedNormal ? _ribbonColors[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; - break; - } + case PaletteBackStyle.GridDataCellSheet: + return state == PaletteState.CheckedNormal ? _buttonBackColors[6] : SystemColors.Window; - return base.GetContentLongTextColor2(style, state); - } - #endregion + case PaletteBackStyle.TabHighProfile: + case PaletteBackStyle.TabStandardProfile: + case PaletteBackStyle.TabLowProfile: + case PaletteBackStyle.TabOneNote: + case PaletteBackStyle.TabCustom1: + case PaletteBackStyle.TabCustom2: + case PaletteBackStyle.TabCustom3: + switch (state) + { + case PaletteState.Disabled: + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; - #region Images - /// + case PaletteState.Normal: + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; + + case PaletteState.Pressed: + case PaletteState.Tracking: + return style switch + { + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, + PaletteBackStyle.TabHighProfile => state == PaletteState.Tracking + ? _buttonBackColors[2] + : _buttonBackColors[4], + _ => SystemColors.Window + }; + + case PaletteState.CheckedNormal: + case PaletteState.CheckedPressed: + case PaletteState.CheckedTracking: + if (style == PaletteBackStyle.TabHighProfile) + { + return state switch + { + PaletteState.CheckedNormal => _buttonBackColors[6], + PaletteState.CheckedPressed => _buttonBackColors[4], + _ => _buttonBackColors[8] + }; + } + else + { + return SystemColors.Window; + } + + default: + throw DebugTools.NotImplemented(state.ToString()); + } + case PaletteBackStyle.TabDock: + case PaletteBackStyle.TabDockAutoHidden: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive1] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive1]; + + case PaletteBackStyle.HeaderCalendar: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + + case PaletteBackStyle.HeaderPrimary: + case PaletteBackStyle.HeaderCustom1: + case PaletteBackStyle.HeaderCustom2: + case PaletteBackStyle.HeaderCustom3: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1]; + + case PaletteBackStyle.HeaderDockInactive: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1]; + + case PaletteBackStyle.HeaderDockActive: + return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[6]; + + case PaletteBackStyle.HeaderSecondary: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderSecondaryBack1]; + + case PaletteBackStyle.SeparatorHighInternalProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighInternalBorder1]; + + case PaletteBackStyle.SeparatorHighProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighBorder1]; + + case PaletteBackStyle.SeparatorLowProfile: + case PaletteBackStyle.SeparatorCustom1: + case PaletteBackStyle.SeparatorCustom2: + case PaletteBackStyle.SeparatorCustom3: + case PaletteBackStyle.PanelClient: + case PaletteBackStyle.PanelCustom1: + case PaletteBackStyle.PanelCustom2: + case PaletteBackStyle.PanelCustom3: + case PaletteBackStyle.ControlGroupBox: + case PaletteBackStyle.GridBackgroundList: + case PaletteBackStyle.GridBackgroundSheet: + case PaletteBackStyle.GridBackgroundCustom1: + case PaletteBackStyle.GridBackgroundCustom2: + case PaletteBackStyle.GridBackgroundCustom3: + return _ribbonColors[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.PanelAlternate: + return _ribbonColors[(int)SchemeOfficeColors.PanelAlternative]; + case PaletteBackStyle.PanelRibbonInactive: + return _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveLight]; + case PaletteBackStyle.FormMain: + case PaletteBackStyle.FormCustom1: + case PaletteBackStyle.FormCustom2: + case PaletteBackStyle.FormCustom3: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveLight] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActiveLight]; + + case PaletteBackStyle.ControlClient: + case PaletteBackStyle.ControlAlternate: + case PaletteBackStyle.ControlCustom1: + case PaletteBackStyle.ControlCustom2: + case PaletteBackStyle.ControlCustom3: + return SystemColors.Window; + case PaletteBackStyle.InputControlStandalone: + case PaletteBackStyle.InputControlRibbon: + case PaletteBackStyle.InputControlCustom1: + case PaletteBackStyle.InputControlCustom2: + case PaletteBackStyle.InputControlCustom3: + if (state == PaletteState.Disabled) + { + return _ribbonColors[(int)SchemeOfficeColors.InputControlBackDisabled]; + } + else + { + return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) + ? _ribbonColors[(int)SchemeOfficeColors.InputControlBackNormal] + : _ribbonColors[(int)SchemeOfficeColors.InputControlBackInactive]; + } + case PaletteBackStyle.ControlRibbon: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; + case PaletteBackStyle.ControlRibbonAppMenu: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonBack1]; + case PaletteBackStyle.ControlToolTip: + return _toolTipBack1; + case PaletteBackStyle.ContextMenuOuter: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuSeparator: + case PaletteBackStyle.ContextMenuItemSplit: + return state switch + { + PaletteState.Tracking => _buttonBackColors[2], + _ => _contextMenuBack + }; + case PaletteBackStyle.ContextMenuInner: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuHeading: + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingBack]; + case PaletteBackStyle.ContextMenuItemImageColumn: + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuImageColumn]; + case PaletteBackStyle.ContextMenuItemImage: + return _contextMenuImageBackChecked; + case PaletteBackStyle.ButtonForm: + return state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Checked], + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Track], + PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Pressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonFormClose: + return state switch + { + // TODO: Change disabled colour for all 2010, 2013 & 365 themes + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseChecked1, + PaletteState.Tracking => _formCloseTracking1, + PaletteState.CheckedTracking => _formCloseCheckedTracking1, + PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonStandalone: + case PaletteBackStyle.ButtonGallery: + case PaletteBackStyle.ButtonAlternate: + case PaletteBackStyle.ButtonLowProfile: + case PaletteBackStyle.ButtonBreadCrumb: + case PaletteBackStyle.ButtonListItem: + case PaletteBackStyle.ButtonCommand: + case PaletteBackStyle.ButtonButtonSpec: + case PaletteBackStyle.ButtonCalendarDay: + case PaletteBackStyle.ButtonCluster: + case PaletteBackStyle.ButtonCustom1: + case PaletteBackStyle.ButtonCustom2: + case PaletteBackStyle.ButtonCustom3: + case PaletteBackStyle.ButtonInputControl: + case PaletteBackStyle.ContextMenuItemHighlight: + return state switch + { + PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1] : _disabledBack, + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[6], + PaletteState.Tracking => _buttonBackColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonNavigatorStack: + case PaletteBackStyle.ButtonNavigatorOverflow: + case PaletteBackStyle.ButtonNavigatorMini: + return state switch + { + PaletteState.Disabled => _buttonBackColors[1], + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorTrack1], + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorPressed1], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorChecked1], + _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] + }; + default: + throw DebugTools.NotImplemented(style.ToString()); + } + } + + /// + /// Gets the second back color. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteBackStyle.GridHeaderColumnList: + case PaletteBackStyle.GridHeaderColumnCustom1: + case PaletteBackStyle.GridHeaderColumnCustom2: + case PaletteBackStyle.GridHeaderColumnCustom3: + case PaletteBackStyle.GridHeaderRowList: + case PaletteBackStyle.GridHeaderRowCustom1: + case PaletteBackStyle.GridHeaderRowCustom2: + case PaletteBackStyle.GridHeaderRowCustom3: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridListPressed2], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridListSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridListNormal2] + }; + case PaletteBackStyle.GridHeaderColumnSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetColPressed2], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetColSelected2], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetColNormal2] + }; + case PaletteBackStyle.GridHeaderRowSheet: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowPressed], + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowSelected], + _ => _ribbonColors[(int)SchemeOfficeColors.GridSheetRowNormal] + }; + case PaletteBackStyle.GridDataCellList: + case PaletteBackStyle.GridDataCellCustom1: + case PaletteBackStyle.GridDataCellCustom2: + case PaletteBackStyle.GridDataCellCustom3: + return state == PaletteState.CheckedNormal ? _ribbonColors[(int)SchemeOfficeColors.GridDataCellSelected] : SystemColors.Window; + + case PaletteBackStyle.GridDataCellSheet: + return state == PaletteState.CheckedNormal ? _buttonBackColors[7] : SystemColors.Window; + + case PaletteBackStyle.TabHighProfile: + case PaletteBackStyle.TabStandardProfile: + case PaletteBackStyle.TabLowProfile: + case PaletteBackStyle.TabOneNote: + case PaletteBackStyle.TabCustom1: + case PaletteBackStyle.TabCustom2: + case PaletteBackStyle.TabCustom3: + return state switch + { + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.TabDock: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], + PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.TabDockAutoHidden: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive2] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive2]; + + case PaletteBackStyle.HeaderCalendar: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + + case PaletteBackStyle.HeaderPrimary: + case PaletteBackStyle.HeaderCustom1: + case PaletteBackStyle.HeaderCustom2: + case PaletteBackStyle.HeaderCustom3: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2]; + + case PaletteBackStyle.HeaderDockInactive: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack2]; + + case PaletteBackStyle.HeaderDockActive: + return state == PaletteState.Disabled ? _disabledBack : _buttonBackColors[7]; + + case PaletteBackStyle.HeaderSecondary: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.HeaderSecondaryBack2]; + + case PaletteBackStyle.SeparatorHighInternalProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighInternalBorder2]; + + case PaletteBackStyle.SeparatorHighProfile: + return state == PaletteState.Disabled ? _disabledBack : _ribbonColors[(int)SchemeOfficeColors.SeparatorHighBorder2]; + + case PaletteBackStyle.SeparatorLowProfile: + case PaletteBackStyle.SeparatorCustom1: + case PaletteBackStyle.SeparatorCustom2: + case PaletteBackStyle.SeparatorCustom3: + case PaletteBackStyle.PanelClient: + case PaletteBackStyle.PanelCustom1: + case PaletteBackStyle.PanelCustom2: + case PaletteBackStyle.PanelCustom3: + case PaletteBackStyle.ControlGroupBox: + case PaletteBackStyle.GridBackgroundList: + case PaletteBackStyle.GridBackgroundSheet: + case PaletteBackStyle.GridBackgroundCustom1: + case PaletteBackStyle.GridBackgroundCustom2: + case PaletteBackStyle.GridBackgroundCustom3: + return _ribbonColors[(int)SchemeOfficeColors.PanelClient]; + case PaletteBackStyle.PanelAlternate: + return _ribbonColors[(int)SchemeOfficeColors.PanelAlternative]; + case PaletteBackStyle.PanelRibbonInactive: + return _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveDark]; + case PaletteBackStyle.FormMain: + case PaletteBackStyle.FormCustom1: + case PaletteBackStyle.FormCustom2: + case PaletteBackStyle.FormCustom3: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactiveDark] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActiveDark]; + + case PaletteBackStyle.ControlClient: + case PaletteBackStyle.ControlAlternate: + case PaletteBackStyle.ControlCustom1: + case PaletteBackStyle.ControlCustom2: + case PaletteBackStyle.ControlCustom3: + return SystemColors.Window; + case PaletteBackStyle.InputControlStandalone: + case PaletteBackStyle.InputControlRibbon: + case PaletteBackStyle.InputControlCustom1: + case PaletteBackStyle.InputControlCustom2: + case PaletteBackStyle.InputControlCustom3: + if (state == PaletteState.Disabled) + { + return _ribbonColors[(int)SchemeOfficeColors.InputControlBackDisabled]; + } + else + { + return (state == PaletteState.Tracking) || (style == PaletteBackStyle.InputControlStandalone) + ? _ribbonColors[(int)SchemeOfficeColors.InputControlBackNormal] + : _ribbonColors[(int)SchemeOfficeColors.InputControlBackInactive]; + } + case PaletteBackStyle.ControlRibbon: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; + case PaletteBackStyle.ControlRibbonAppMenu: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonBack2]; + case PaletteBackStyle.ControlToolTip: + return _ribbonColors[(int)SchemeOfficeColors.ToolTipBottom]; + case PaletteBackStyle.ContextMenuOuter: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuSeparator: + case PaletteBackStyle.ContextMenuItemSplit: + return state switch + { + PaletteState.Tracking => _buttonBackColors[3], + _ => _contextMenuBack + }; + case PaletteBackStyle.ContextMenuInner: + return _contextMenuBack; + case PaletteBackStyle.ContextMenuHeading: + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingBack]; + case PaletteBackStyle.ContextMenuItemImageColumn: + return _ribbonColors[(int)SchemeOfficeColors.ContextMenuImageColumn]; + case PaletteBackStyle.ContextMenuItemImage: + return _contextMenuImageBackChecked; + case PaletteBackStyle.ButtonForm: + return state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Checked], + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Track], + PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Pressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonFormClose: + return state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseChecked2, + PaletteState.Tracking => _formCloseTracking2, + PaletteState.CheckedTracking => _formCloseCheckedTracking2, + PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonStandalone: + case PaletteBackStyle.ButtonGallery: + case PaletteBackStyle.ButtonAlternate: + case PaletteBackStyle.ButtonLowProfile: + case PaletteBackStyle.ButtonBreadCrumb: + case PaletteBackStyle.ButtonListItem: + case PaletteBackStyle.ButtonCommand: + case PaletteBackStyle.ButtonButtonSpec: + case PaletteBackStyle.ButtonCalendarDay: + case PaletteBackStyle.ButtonCluster: + case PaletteBackStyle.ButtonCustom1: + case PaletteBackStyle.ButtonCustom2: + case PaletteBackStyle.ButtonCustom3: + case PaletteBackStyle.ButtonInputControl: + case PaletteBackStyle.ContextMenuItemHighlight: + return state switch + { + PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], + PaletteState.Tracking => _buttonBackColors[3], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], + PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + case PaletteBackStyle.ButtonNavigatorStack: + case PaletteBackStyle.ButtonNavigatorOverflow: + case PaletteBackStyle.ButtonNavigatorMini: + return state switch + { + PaletteState.Disabled => _buttonBackColors[1], + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorTrack2], + PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorPressed2], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorChecked2], + _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] + }; + default: + throw DebugTools.NotImplemented(style.ToString()); + } + } + + /// + /// Gets the color background drawing style. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteBackStyle.HeaderForm => PaletteColorStyle.Rounding5, + PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 => PaletteColorStyle.Rounded, + PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 => PaletteColorStyle.Linear, + PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderRowSheet => PaletteColorStyle.Linear, + PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, + PaletteBackStyle.GridDataCellSheet => PaletteColorStyle.ExpertChecked, + PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 => state switch + { + PaletteState.Tracking or PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.GlassFade, + _ => PaletteColorStyle.QuarterPhase + }, + PaletteBackStyle.TabStandardProfile => state switch + { + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.Solid, + PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.GlassFade, + _ => PaletteColorStyle.QuarterPhase + }, + PaletteBackStyle.TabLowProfile => PaletteColorStyle.Solid, + PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden => PaletteColorStyle.Linear, + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.ButtonCalendarDay => PaletteColorStyle.Solid, + PaletteBackStyle.ControlRibbonAppMenu => PaletteColorStyle.Switch90, + PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit => state == PaletteState.Tracking ? PaletteColorStyle.GlassTrackingFull : PaletteColorStyle.Solid, + PaletteBackStyle.ControlToolTip => PaletteColorStyle.Linear, + PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 => PaletteColorStyle.SolidAllLine, + PaletteBackStyle.SeparatorHighProfile => PaletteColorStyle.RoundedTopLight, + PaletteBackStyle.SeparatorHighInternalProfile => PaletteColorStyle.Linear, + PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.HeaderDockActive => PaletteColorStyle.Rounded, + PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, + PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Disabled => PaletteColorStyle.Solid, + PaletteState.Normal => PaletteColorStyle.Linear, + PaletteState.Tracking => PaletteColorStyle.ExpertTracking, + PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, + PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, + PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, + PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch + { + PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.SolidAllLine, + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => PaletteColorStyle.ExpertSquareHighlight, + _ => PaletteColorStyle.Solid + }, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color alignment. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + => PaletteRectangleAlign.Control, + PaletteBackStyle.ControlToolTip or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color background angle. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a background image. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the background image style. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteImageStyle.Tile, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image alignment. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 + or PaletteBackStyle.GridBackgroundCustom2 + or PaletteBackStyle.GridBackgroundCustom3 + or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + #endregion + + #region Border + /// + /// Gets a value indicating if border should be drawn. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) + { + // Check for the calendar day today override + if (state == PaletteState.TodayOverride) + { + if (style == PaletteBorderStyle.ButtonCalendarDay) + { + return InheritBool.True; + } + } + + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ContextMenuInner => InheritBool.False, + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => InheritBool.True, + PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonInputControl => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Normal or PaletteState.NormalDefaultOverride => InheritBool.False, + _ => InheritBool.True + }, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a value indicating which borders to draw. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// PaletteDrawBorders value. + public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteDrawBorders.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteDrawBorders.All, + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => PaletteDrawBorders.All, + PaletteBorderStyle.ContextMenuHeading => PaletteDrawBorders.Bottom, + PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => PaletteDrawBorders.Top, + PaletteBorderStyle.ContextMenuItemImageColumn => PaletteDrawBorders.Right, + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ContextMenuInner => PaletteDrawBorders.None, + PaletteBorderStyle.HeaderForm => PaletteDrawBorders.TopLeftRight, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the graphics drawing hint for the border. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// PaletteGraphicsHint value. + public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteGraphicsHint.Inherit; + } + + return style switch + { + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteGraphicsHint.AntiAlias, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the first border color. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + { + // Check for the calendar day today override + if (state == PaletteState.TodayOverride) + { + if (style == PaletteBorderStyle.ButtonCalendarDay) + { + return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; + } + } + + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDock => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDockAutoHidden => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], + PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, + PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Tracking => _buttonBorderColors[1], + _ => _contextMenuHeadingBorder + }, + PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, + PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], + PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], + PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, + PaletteBorderStyle.ContextMenuInner => _contextMenuBack, + PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, + PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], + PaletteBorderStyle.ButtonForm => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, + PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, + PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + PaletteState.CheckedNormal => _buttonBorderColors[5], + PaletteState.Tracking => _buttonBorderColors[1], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], + PaletteState.CheckedTracking => _buttonBorderColors[3], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonInputControl => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking => _buttonBorderColors[1], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonCalendarDay => state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.CheckedNormal => _buttonBackColors[6], + PaletteState.Tracking => _buttonBackColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + PaletteState.CheckedTracking => _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the second border color. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + // Check for the calendar day today override + if (state == PaletteState.TodayOverride) + { + if (style == PaletteBorderStyle.ButtonCalendarDay) + { + return state == PaletteState.Disabled ? _disabledBorder : _todayBorder; + } + } + + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDock => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.TabDockAutoHidden => state switch + { + PaletteState.Disabled => _disabledBorder, + PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], + PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], + PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, + PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Tracking => _buttonBorderColors[2], + _ => _contextMenuHeadingBorder + }, + PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, + PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], + PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], + PaletteBorderStyle.ContextMenuOuter => _contextMenuBorder, + PaletteBorderStyle.ContextMenuInner => _contextMenuBack, + PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, + PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], + PaletteBorderStyle.ButtonForm => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonFormClose => state switch + { + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, + PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, + PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, + PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + PaletteState.CheckedNormal => _buttonBorderColors[6], + PaletteState.Tracking => _buttonBorderColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], + PaletteState.CheckedTracking => _buttonBorderColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonInputControl => state switch + { + PaletteState.Disabled => _buttonBorderColors[0], + PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking => _buttonBorderColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonCalendarDay => state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.NormalDefaultOverride => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack1], + PaletteState.CheckedNormal => _buttonBackColors[6], + PaletteState.Tracking => _buttonBackColors[2], + PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], + PaletteState.CheckedTracking => _buttonBackColors[8], + _ => throw DebugTools.NotImplemented(state.ToString()) + }, + PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color border drawing style. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => PaletteColorStyle.Sigma, + PaletteBorderStyle.TabDock => state switch + { + PaletteState.Tracking or PaletteState.Pressed => PaletteColorStyle.Solid, + _ => PaletteColorStyle.Sigma + }, + PaletteBorderStyle.TabDockAutoHidden => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.Solid, + _ => PaletteColorStyle.Sigma + }, + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.ButtonCalendarDay => PaletteColorStyle.Solid, + PaletteBorderStyle.ContextMenuItemSplit => state == PaletteState.Tracking ? PaletteColorStyle.Sigma : PaletteColorStyle.Solid, + PaletteBorderStyle.ContextMenuSeparator => PaletteColorStyle.Dashed, + PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemHighlight => state switch + { + PaletteState.Normal => PaletteColorStyle.Solid, + PaletteState.Disabled or PaletteState.NormalDefaultOverride => PaletteColorStyle.Solid, + _ => PaletteColorStyle.Linear + }, + PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose => PaletteColorStyle.Solid, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color border alignment. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => PaletteRectangleAlign.Control, + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color border angle. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the border width. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Integer width. + public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ContextMenuInner => 0, + PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => 1, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the border corner rounding. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Float rounding. + public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; + } + + return style switch + { + PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => 0, + PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ContextMenuItemImage => 1, + PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuItemHighlight => 2, + PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlGroupBox => 3, + PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => 5, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a border image. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetBorderImage(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the border image style. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteImageStyle.Tile, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image border alignment. + /// + /// Border style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlToolTip or PaletteBorderStyle.ControlRibbon or PaletteBorderStyle.ControlRibbonAppMenu or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.ContextMenuOuter or PaletteBorderStyle.ContextMenuInner or PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit or PaletteBorderStyle.ContextMenuItemImage or PaletteBorderStyle.ContextMenuItemImageColumn or PaletteBorderStyle.ContextMenuItemHighlight or PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 or PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderCalendar or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderForm or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCalendarDay or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini or PaletteBorderStyle.ButtonForm or PaletteBorderStyle.ButtonFormClose or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ButtonInputControl or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 or PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + #endregion + + #region Content + /// + /// Gets a value indicating if content should be drawn. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + // Always draw everything + return InheritBool.True; + } + + /// + /// Gets a value indicating if content should be drawn with focus indication. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) + { + // By default, the focus override shows the focus! + if (state == PaletteState.FocusOverride) + { + return InheritBool.True; + } + + // We do not override the other override states + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + // By default, never show the focus indication, we let individual controls + // override this functionality as required by the controls requirements + return InheritBool.False; + } + + /// + /// Gets the horizontal relative alignment of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Center, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the vertical relative alignment of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the effect applied to drawing of the image. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteImageEffect value. + public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageEffect.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? PaletteImageEffect.Disabled : PaletteImageEffect.Normal, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image color to remap into another color. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorMap(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color to use in place of the image map color. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image color that should be transparent. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentImageColorTransparent(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return (state == PaletteState.BoldedOverride) && (style == PaletteContentStyle.ButtonCalendarDay) ? CalendarBoldFont : null; + } + + return style switch + { + PaletteContentStyle.HeaderForm => HeaderFormFont, + PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ButtonCommand => Header1ShortFont, + PaletteContentStyle.LabelSuperTip or PaletteContentStyle.ContextMenuHeading => SuperToolFont, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText => Header2ShortFont, + PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelBoldPanel => BoldFont, + PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelItalicControl => ItalicFont, + PaletteContentStyle.ContextMenuItemTextAlternate => SuperToolFont, + PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => TabFontNormal, + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => state switch + { + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => TabFontSelected, + _ => TabFontNormal + }, + PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => ButtonFont, + PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => ButtonFontNavigatorStack, + PaletteContentStyle.ButtonNavigatorMini => ButtonFontNavigatorMini, + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => GridFont, + PaletteContentStyle.ButtonCalendarDay => CalendarFont, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the short text by generating a new font instance. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + { + DefineFonts(); + return GetContentShortTextFont(style, state); + } + + /// + /// Gets the rendering hint for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHint.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the prefix drawing setting for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextPrefix value. + public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHotkeyPrefix.Inherit; + } + + return style switch + { + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderForm => PaletteTextHotkeyPrefix.Show, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemShortcutText => PaletteTextHotkeyPrefix.None, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the flag indicating if multiline text is allowed for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => InheritBool.True, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the text trimming to use for short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextTrim value. + public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextTrim.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextTrim.EllipsisCharacter, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderForm + or PaletteContentStyle.HeaderPrimary + or PaletteContentStyle.HeaderDockInactive + or PaletteContentStyle.HeaderDockActive + or PaletteContentStyle.HeaderSecondary + or PaletteContentStyle.HeaderCustom1 + or PaletteContentStyle.HeaderCustom2 + or PaletteContentStyle.HeaderCustom3 + or PaletteContentStyle.ButtonNavigatorStack + or PaletteContentStyle.ButtonNavigatorOverflow + or PaletteContentStyle.ButtonListItem + or PaletteContentStyle.ButtonCommand + or PaletteContentStyle.LabelNormalControl + or PaletteContentStyle.LabelBoldControl + or PaletteContentStyle.LabelItalicControl + or PaletteContentStyle.LabelTitleControl + or PaletteContentStyle.LabelNormalPanel + or PaletteContentStyle.LabelBoldPanel + or PaletteContentStyle.LabelItalicPanel + or PaletteContentStyle.LabelTitlePanel + or PaletteContentStyle.LabelGroupBoxCaption + or PaletteContentStyle.LabelCustom1 + or PaletteContentStyle.LabelCustom2 + or PaletteContentStyle.LabelCustom3 + or PaletteContentStyle.LabelToolTip + or PaletteContentStyle.LabelSuperTip + or PaletteContentStyle.LabelKeyTip + or PaletteContentStyle.ContextMenuHeading + or PaletteContentStyle.ContextMenuItemImage + or PaletteContentStyle.ContextMenuItemTextStandard + or PaletteContentStyle.ContextMenuItemTextAlternate + or PaletteContentStyle.GridHeaderColumnList + or PaletteContentStyle.GridHeaderColumnCustom1 + or PaletteContentStyle.GridHeaderColumnCustom2 + or PaletteContentStyle.GridHeaderColumnCustom3 + or PaletteContentStyle.GridHeaderRowList + or PaletteContentStyle.GridHeaderRowSheet + or PaletteContentStyle.GridHeaderRowCustom1 + or PaletteContentStyle.GridHeaderRowCustom2 + or PaletteContentStyle.GridHeaderRowCustom3 + or PaletteContentStyle.GridDataCellList + or PaletteContentStyle.GridDataCellSheet + or PaletteContentStyle.GridDataCellCustom1 + or PaletteContentStyle.GridDataCellCustom2 + or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, + PaletteContentStyle.GridHeaderColumnSheet + or PaletteContentStyle.HeaderCalendar => PaletteRelativeAlign.Center, + PaletteContentStyle.InputControlStandalone + or PaletteContentStyle.InputControlRibbon + or PaletteContentStyle.InputControlCustom1 + or PaletteContentStyle.InputControlCustom2 + or PaletteContentStyle.InputControlCustom3 + or PaletteContentStyle.TabHighProfile + or PaletteContentStyle.TabStandardProfile + or PaletteContentStyle.TabLowProfile + or PaletteContentStyle.TabOneNote + or PaletteContentStyle.TabDock + or PaletteContentStyle.TabDockAutoHidden + or PaletteContentStyle.TabCustom1 + or PaletteContentStyle.TabCustom2 + or PaletteContentStyle.TabCustom3 + or PaletteContentStyle.ButtonStandalone + or PaletteContentStyle.ButtonGallery + or PaletteContentStyle.ButtonCalendarDay + or PaletteContentStyle.ButtonAlternate + or PaletteContentStyle.ButtonLowProfile + or PaletteContentStyle.ButtonBreadCrumb + or PaletteContentStyle.ButtonButtonSpec + or PaletteContentStyle.ButtonCluster + or PaletteContentStyle.ButtonForm + or PaletteContentStyle.ButtonFormClose + or PaletteContentStyle.ButtonNavigatorMini + or PaletteContentStyle.ButtonCustom1 + or PaletteContentStyle.ButtonCustom2 + or PaletteContentStyle.ButtonCustom3 + or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, + PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Far, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the vertical relative alignment of the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + PaletteContentStyle.LabelSuperTip => PaletteRelativeAlign.Near, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of multiline short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Near, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the first back color for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) + { + // Always work out value for an override state + if (CommonHelper.IsOverrideState(state)) + { + return style switch + { + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or + PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl + => state switch + { + PaletteState.LinkNotVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkNotVisitedOverrideControl], + PaletteState.LinkVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkVisitedOverrideControl], + PaletteState.LinkPressedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkPressedOverrideControl], + _ => GlobalStaticValues.EMPTY_COLOR + }, + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or + PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or + PaletteContentStyle.LabelGroupBoxCaption + => state switch + { + PaletteState.LinkNotVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkNotVisitedOverridePanel], + PaletteState.LinkVisitedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkVisitedOverridePanel], + PaletteState.LinkPressedOverride => _ribbonColors[ + (int)SchemeOfficeColors.LinkPressedOverridePanel], + _ => GlobalStaticValues.EMPTY_COLOR + }, + _ => GlobalStaticValues.EMPTY_COLOR + }; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl) && + (style != PaletteContentStyle.ButtonCalendarDay)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 + or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList + or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 + or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet + or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 + or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary + or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 + => _ribbonColors[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive + => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or + PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or + PaletteContentStyle.InputControlCustom3 + => state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] + : _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or + PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or + PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or + PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or + PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate + => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip + => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or + PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or + PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or + PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or + PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 + => state != PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] + : _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or + PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed + => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedNormal + => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal1] + : _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or + PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] + : _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the second back color for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl) && + (style != PaletteContentStyle.ButtonCalendarDay)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal +? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonCalendarDay => state == PaletteState.Disabled ? _disabledText2 : Color.Black, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled +? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal2] +: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled2], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal +? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color drawing style for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color alignment for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color background angle for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a background image for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetContentShortTextImage(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the background image style. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteImageStyle.TileFlipXY, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image alignment for the short text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return (state == PaletteState.BoldedOverride) && (style == PaletteContentStyle.ButtonCalendarDay) ? CalendarBoldFont : null; + } + + return style switch + { + PaletteContentStyle.ButtonCalendarDay => CalendarFont, + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => GridFont, + PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => Header1LongFont, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.HeaderSecondary => Header2LongFont, + PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => TabFontNormal, + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => state switch + { + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => TabFontSelected, + _ => TabFontNormal + }, + PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => ButtonFont, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the font for the long text by generating a new font instance. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Font value. + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + { + DefineFonts(); + return GetContentLongTextFont(style, state); + } + + /// + /// Gets the rendering hint for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHint.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the flag indicating if multiline text is allowed for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// InheritBool value. + public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return InheritBool.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => InheritBool.True, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the text trimming to use for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextTrim value. + public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextTrim.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextTrim.EllipsisCharacter, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the prefix drawing setting for long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// PaletteTextPrefix value. + public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteTextHotkeyPrefix.Inherit; + } + + return style switch + { + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteTextHotkeyPrefix.Show, + PaletteContentStyle.ButtonListItem or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHotkeyPrefix.None, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextAlternate => PaletteRelativeAlign.Near, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Far, + PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl => PaletteRelativeAlign.Center, + PaletteContentStyle.ButtonCalendarDay => PaletteRelativeAlign.Far, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the vertical relative alignment of the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextAlternate => PaletteRelativeAlign.Far, + PaletteContentStyle.LabelSuperTip => PaletteRelativeAlign.Center, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the horizontal relative alignment of multiline long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// RelativeAlignment value. + public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRelativeAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRelativeAlign.Center, + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ButtonCommand => PaletteRelativeAlign.Near, + PaletteContentStyle.ContextMenuItemShortcutText => PaletteRelativeAlign.Far, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the first back color for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.ContextMenuItemTextAlternate => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal +? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled +? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal1] +: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled1], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal +? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the second back color for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (style) + { + case PaletteContentStyle.HeaderForm: + return state == PaletteState.Disabled + ? _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormHeaderLongActive]; + } + + if ((state == PaletteState.Disabled) && + (style != PaletteContentStyle.LabelToolTip) && + (style != PaletteContentStyle.LabelSuperTip) && + (style != PaletteContentStyle.LabelKeyTip) && + (style != PaletteContentStyle.InputControlStandalone) && + (style != PaletteContentStyle.InputControlRibbon) && + (style != PaletteContentStyle.InputControlCustom1) && + (style != PaletteContentStyle.InputControlCustom2) && + (style != PaletteContentStyle.InputControlCustom3) && + (style != PaletteContentStyle.ButtonInputControl)) + { + return _disabledText; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 or PaletteContentStyle.HeaderCalendar => _gridTextColor, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _ribbonColors[(int)SchemeOfficeColors.HeaderText], + PaletteContentStyle.HeaderDockActive => Color.Black, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => state == PaletteState.Disabled +? _ribbonColors[(int)SchemeOfficeColors.InputControlTextDisabled] +: _ribbonColors[(int)SchemeOfficeColors.InputControlTextNormal], + PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText => _ribbonColors[(int)SchemeOfficeColors.TextLabelControl], + PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip => _toolTipText, + PaletteContentStyle.ContextMenuHeading => _ribbonColors[(int)SchemeOfficeColors.ContextMenuHeadingText], + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => state != PaletteState.Normal +? _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.TabDockAutoHidden => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay => state switch + { + PaletteState.Normal => style == PaletteContentStyle.ButtonListItem + ? _ribbonColors[(int)SchemeOfficeColors.TextLabelControl] + : _ribbonColors[(int)SchemeOfficeColors.TextLabelPanel], + PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal] + }, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => state switch + { + PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormTracking], + PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormPressed], + _ => _ribbonColors[(int)SchemeOfficeColors.TextButtonFormNormal] + }, + PaletteContentStyle.ButtonInputControl => state != PaletteState.Disabled +? _ribbonColors[(int)SchemeOfficeColors.InputDropDownNormal2] +: _ribbonColors[(int)SchemeOfficeColors.InputDropDownDisabled2], + PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => state != PaletteState.Normal +? _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorText] +: _ribbonColors[(int)SchemeOfficeColors.TextButtonNormal], + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color drawing style for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color drawing style. + public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteColorStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteColorStyle.Solid, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color alignment for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Color alignment style. + public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the color background angle for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Angle used for color drawing. + public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1f; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 90f, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets a background image for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image instance. + public override Image? GetContentLongTextImage(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return null; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => null, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the background image style for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image style value. + public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteImageStyle.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteImageStyle.TileFlipXY, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the image alignment for the long text. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Image alignment style. + public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return PaletteRectangleAlign.Inherit; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteRectangleAlign.Local, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the padding between the border and content drawing. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Padding value. + public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return CommonHelper.InheritPadding; + } + + return style switch + { + PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => _contentPaddingGrid, + PaletteContentStyle.HeaderForm => _contentPaddingHeaderForm, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 => _contentPaddingHeader1, + PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive => _contentPaddingDock, + PaletteContentStyle.HeaderSecondary => _contentPaddingHeader2, + PaletteContentStyle.HeaderCalendar => _contentPaddingCalendar, + PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 => _contentPaddingLabel, + PaletteContentStyle.LabelGroupBoxCaption => _contentPaddingLabel2, + PaletteContentStyle.ContextMenuItemTextStandard => _contentPaddingContextMenuItemText, + PaletteContentStyle.ContextMenuItemTextAlternate => _contentPaddingContextMenuItemTextAlt, + PaletteContentStyle.ContextMenuItemShortcutText => _contentPaddingContextMenuItemShortcutText, + PaletteContentStyle.ContextMenuItemImage => _contentPaddingContextMenuImage, + PaletteContentStyle.LabelToolTip => _contentPaddingToolTip, + PaletteContentStyle.LabelSuperTip => _contentPaddingSuperTip, + PaletteContentStyle.LabelKeyTip => _contentPaddingKeyTip, + PaletteContentStyle.ContextMenuHeading => _contentPaddingContextMenuHeading, + PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 => InputControlPadding, + PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 => _contentPaddingButton12, + PaletteContentStyle.ButtonInputControl or PaletteContentStyle.ButtonCalendarDay => _contentPaddingButtonInputControl, + PaletteContentStyle.ButtonButtonSpec => _contentPaddingButton3, + PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow => _contentPaddingButton4, + PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose => _contentPaddingButtonForm, + PaletteContentStyle.ButtonGallery => _contentPaddingButtonGallery, + PaletteContentStyle.ButtonListItem => _contentPaddingButtonListItem, + PaletteContentStyle.ButtonBreadCrumb => _contentPaddingButton6, + PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 => _contentPaddingButton5, + PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden => _contentPaddingButton7, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + + /// + /// Gets the padding between adjacent content items. + /// + /// Content style. + /// Palette value should be applicable to this state. + /// Integer value. + public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return -1; + } + + return style switch + { + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => 1, + PaletteContentStyle.LabelSuperTip => 5, + _ => throw new ArgumentOutOfRangeException(nameof(style)) + }; + } + #endregion + + #region Metric + /// + /// Gets an integer metric value. + /// + /// Palette value should be applicable to this state. + /// Requested metric. + /// Integer value. + public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) + { + switch (metric) + { + case PaletteMetricInt.PageButtonInset: + case PaletteMetricInt.RibbonTabGap: + case PaletteMetricInt.HeaderButtonEdgeInsetCalendar: + return 2; + case PaletteMetricInt.CheckButtonGap: + return 5; + case PaletteMetricInt.HeaderButtonEdgeInsetForm: + return 9; // Needs to be the RealWindowBorderWidth Offset - No idea how to get it at this point + case PaletteMetricInt.HeaderButtonEdgeInsetInputControl: + return 1; + case PaletteMetricInt.HeaderButtonEdgeInsetPrimary: + case PaletteMetricInt.HeaderButtonEdgeInsetSecondary: + case PaletteMetricInt.HeaderButtonEdgeInsetDockInactive: + case PaletteMetricInt.HeaderButtonEdgeInsetDockActive: + case PaletteMetricInt.HeaderButtonEdgeInsetCustom1: + case PaletteMetricInt.HeaderButtonEdgeInsetCustom2: + case PaletteMetricInt.HeaderButtonEdgeInsetCustom3: + case PaletteMetricInt.BarButtonEdgeOutside: + case PaletteMetricInt.BarButtonEdgeInside: + return 3; + case PaletteMetricInt.None: + return 0; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); + break; + } + + return -1; + } + + /// + /// Gets a boolean metric value. + /// + /// Palette value should be applicable to this state. + /// Requested metric. + /// InheritBool value. + public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) + { + switch (metric) + { + case PaletteMetricBool.HeaderGroupOverlay: + case PaletteMetricBool.SplitWithFading: + case PaletteMetricBool.RibbonTabsSpareCaption: + return InheritBool.True; + case PaletteMetricBool.TreeViewLines: + return InheritBool.False; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); + break; + } + + return InheritBool.Inherit; + } + + /// + /// Gets a padding metric value. + /// + /// Palette value should be applicable to this state. + /// Requested metric. + /// Padding value. + public override Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) + { + switch (metric) + { + case PaletteMetricPadding.PageButtonPadding: + return _metricPaddingPageButtons; + case PaletteMetricPadding.BarPaddingTabs: + return _metricPaddingBarTabs; + case PaletteMetricPadding.BarPaddingInside: + case PaletteMetricPadding.BarPaddingOnly: + return _metricPaddingBarInside; + case PaletteMetricPadding.BarPaddingOutside: + return _metricPaddingBarOutside; + case PaletteMetricPadding.HeaderButtonPaddingForm: + return _metricPaddingHeaderForm; + case PaletteMetricPadding.RibbonButtonPadding: + return _metricPaddingRibbon; + case PaletteMetricPadding.RibbonAppButton: + return _metricPaddingRibbonAppButton; + case PaletteMetricPadding.HeaderButtonPaddingInputControl: + return _metricPaddingInputControl; + case PaletteMetricPadding.HeaderButtonPaddingPrimary: + case PaletteMetricPadding.HeaderButtonPaddingSecondary: + case PaletteMetricPadding.HeaderButtonPaddingDockInactive: + case PaletteMetricPadding.HeaderButtonPaddingDockActive: + case PaletteMetricPadding.HeaderButtonPaddingCustom1: + case PaletteMetricPadding.HeaderButtonPaddingCustom2: + case PaletteMetricPadding.HeaderButtonPaddingCustom3: + case PaletteMetricPadding.HeaderButtonPaddingCalendar: + case PaletteMetricPadding.BarButtonPadding: + return _metricPaddingHeader; + case PaletteMetricPadding.HeaderGroupPaddingPrimary: + case PaletteMetricPadding.HeaderGroupPaddingSecondary: + case PaletteMetricPadding.HeaderGroupPaddingDockInactive: + case PaletteMetricPadding.HeaderGroupPaddingDockActive: + case PaletteMetricPadding.SeparatorPaddingLowProfile: + case PaletteMetricPadding.SeparatorPaddingHighInternalProfile: + case PaletteMetricPadding.SeparatorPaddingHighProfile: + case PaletteMetricPadding.SeparatorPaddingCustom1: + case PaletteMetricPadding.SeparatorPaddingCustom2: + case PaletteMetricPadding.SeparatorPaddingCustom3: + case PaletteMetricPadding.ContextMenuItemHighlight: + case PaletteMetricPadding.ContextMenuItemsCollection: + case PaletteMetricPadding.ContextMenuItemOuter: + return Padding.Empty; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); + break; + } + + return Padding.Empty; + } + #endregion + + #region Images + /// + /// Gets a tree view image appropriate for the provided state. + /// + /// Is the node expanded + /// Appropriate image for drawing; otherwise null. + public override Image? GetTreeViewImage(bool expanded) => expanded ? _treeCollapseBlack : _treeExpandWhite; + + /// + /// Gets a check box image appropriate for the provided state. + /// + /// Is the check box enabled. + /// Is the check box checked/unchecked/indeterminate. + /// Is the check box being hot tracked. + /// Is the check box being pressed. + /// Appropriate image for drawing; otherwise null. + public override Image? GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) + { + switch (checkState) + { + default: + case CheckState.Unchecked: + if (!enabled) + { + return _checkBoxList.Images[0]; + } + else if (pressed) + { + return _checkBoxList.Images[3]; + } + else + { + return tracking ? _checkBoxList.Images[2] : _checkBoxList.Images[1]; + } + + case CheckState.Checked: + if (!enabled) + { + return _checkBoxList.Images[4]; + } + else if (pressed) + { + return _checkBoxList.Images[7]; + } + else + { + return tracking ? _checkBoxList.Images[6] : _checkBoxList.Images[5]; + } + + case CheckState.Indeterminate: + if (!enabled) + { + return _checkBoxList.Images[8]; + } + else if (pressed) + { + return _checkBoxList.Images[11]; + } + else + { + return tracking ? _checkBoxList.Images[10] : _checkBoxList.Images[9]; + } + } + } + + /// + /// Gets a check box image appropriate for the provided state. + /// + /// Is the radio button enabled. + /// Is the radio button checked. + /// Is the radio button being hot tracked. + /// Is the radio button being pressed. + /// Appropriate image for drawing; otherwise null. + public override Image? GetRadioButtonImage(bool enabled, bool checkState, bool tracking, bool pressed) + { + if (!checkState) + { + if (!enabled) + { + return _radioButtonArray[0]; + } + else if (pressed) + { + return _radioButtonArray[3]; + } + else + { + return tracking ? _radioButtonArray[2] : _radioButtonArray[1]; + } + } + else + { + if (!enabled) + { + return _radioButtonArray[4]; + } + else if (pressed) + { + return _radioButtonArray[7]; + } + else + { + return tracking ? _radioButtonArray[6] : _radioButtonArray[5]; + } + } + } + + /// /// Gets a drop down button image appropriate for the provided state. /// /// PaletteState for which image is required. - public override Image? GetDropDownButtonImage(PaletteState state) => state != PaletteState.Disabled ? _blackDropDownButton : base.GetDropDownButtonImage(state); + public override Image? GetDropDownButtonImage(PaletteState state) => _disabledDropDown; /// - /// Gets an image indicating a sub-menu on a context menu item. + /// Gets a checked image appropriate for a context menu item. /// /// Appropriate image for drawing; otherwise null. - public override Image? GetContextMenuSubMenuImage() => _contextMenuSubMenu; + public override Image? GetContextMenuCheckedImage() => _contextMenuChecked; + + /// + /// Gets a indeterminate image appropriate for a context menu item. + /// + /// Appropriate image for drawing; otherwise null. + public override Image? GetContextMenuIndeterminateImage() => _contextMenuIndeterminate; + + /// + /// Gets a check box image appropriate for the provided state. + /// + /// Enum of the button to fetch. + /// State of the button to fetch. + /// Appropriate image for drawing; otherwise null. + public override Image? GetGalleryButtonImage(PaletteRibbonGalleryButton button, PaletteState state) => button switch + { + PaletteRibbonGalleryButton.Up => _galleryButtonList.Images[1], + PaletteRibbonGalleryButton.DropDown => _galleryButtonList.Images[2], + _ => _galleryButtonList.Images[0] + }; + #endregion + + #region ButtonSpec + + /// + /// Gets the image to display for the button. + /// + /// Style of button spec. + /// State for which image is required. + /// Image value. + public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, + PaletteState state) + { + switch (style) + { + case PaletteButtonSpecStyle.Close: + return _buttonSpecClose; + case PaletteButtonSpecStyle.Context: + return _buttonSpecContext; + case PaletteButtonSpecStyle.Next: + return _buttonSpecNext; + case PaletteButtonSpecStyle.Previous: + return _buttonSpecPrevious; + case PaletteButtonSpecStyle.ArrowLeft: + return _buttonSpecArrowLeft; + case PaletteButtonSpecStyle.ArrowRight: + return _buttonSpecArrowRight; + case PaletteButtonSpecStyle.ArrowUp: + return _buttonSpecArrowUp; + case PaletteButtonSpecStyle.ArrowDown: + return _buttonSpecArrowDown; + case PaletteButtonSpecStyle.DropDown: + return _buttonSpecDropDown; + case PaletteButtonSpecStyle.PinVertical: + return _buttonSpecPinVertical; + case PaletteButtonSpecStyle.PinHorizontal: + return _buttonSpecPinHorizontal; + case PaletteButtonSpecStyle.PendantClose: + return _buttonSpecPendantClose; + case PaletteButtonSpecStyle.PendantMin: + return _buttonSpecPendantMin; + case PaletteButtonSpecStyle.PendantRestore: + return _buttonSpecPendantRestore; + case PaletteButtonSpecStyle.WorkspaceMaximize: + return _buttonSpecWorkspaceMaximize; + case PaletteButtonSpecStyle.WorkspaceRestore: + return _buttonSpecWorkspaceRestore; + case PaletteButtonSpecStyle.RibbonMinimize: + return _buttonSpecRibbonMinimize; + case PaletteButtonSpecStyle.RibbonExpand: + return _buttonSpecRibbonExpand; + case PaletteButtonSpecStyle.New: + return _integratedToolbarNewNormal; + case PaletteButtonSpecStyle.Open: + return _integratedToolbarOpenNormal; + case PaletteButtonSpecStyle.Save: + return _integratedToolbarSaveNormal; + case PaletteButtonSpecStyle.SaveAs: + return _integratedToolbarSaveAsNormal; + case PaletteButtonSpecStyle.SaveAll: + return _integratedToolbarSaveAllNormal; + case PaletteButtonSpecStyle.Cut: + return _integratedToolbarCutNormal; + case PaletteButtonSpecStyle.Copy: + return _integratedToolbarCopyNormal; + case PaletteButtonSpecStyle.Paste: + return _integratedToolbarPasteNormal; + case PaletteButtonSpecStyle.Undo: + return _integratedToolbarUndoNormal; + case PaletteButtonSpecStyle.Redo: + return _integratedToolbarRedoNormal; + case PaletteButtonSpecStyle.PageSetup: + return _integratedToolbarPageSetupNormal; + case PaletteButtonSpecStyle.PrintPreview: + return _integratedToolbarPrintPreviewNormal; + case PaletteButtonSpecStyle.Print: + return _integratedToolbarPrintNormal; + case PaletteButtonSpecStyle.QuickPrint: + return _integratedToolbarQuickPrintNormal; + case PaletteButtonSpecStyle.Generic: + return null; + default: + // Should never happen! + Debug.Assert(false); + throw DebugTools.NotImplemented(style.ToString()); + } + } + + #endregion + + #region RibbonGeneral + /// + /// Gets the ribbon shape that should be used. + /// + /// Ribbon shape value. + public override PaletteRibbonShape GetRibbonShape() => PaletteRibbonShape.Office2010; + + /// + /// Gets the text alignment for the ribbon context text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override PaletteRelativeAlign GetRibbonContextTextAlign(PaletteState state) => PaletteRelativeAlign.Center; + + /// + /// Gets the font for the ribbon context text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; + + /// + /// Gets the color for the ribbon context text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override Color GetRibbonContextTextColor(PaletteState state) => _contextTextColor; + + /// + /// Gets the dark disabled color used for ribbon glyphs. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDisabledDark(PaletteState state) => _disabledGlyphDark; + + /// + /// Gets the light disabled color used for ribbon glyphs. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDisabledLight(PaletteState state) => _disabledGlyphLight; + + /// + /// Gets the color for the drop arrow light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDropArrowLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonDropArrowLight]; + + /// + /// Gets the color for the drop arrow dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonDropArrowDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonDropArrowDark]; + + /// + /// Gets the color for the dialog launcher dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupDialogDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupDialogDark]; + + /// + /// Gets the color for the dialog launcher light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupDialogLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupDialogLight]; + + /// + /// Gets the color for the group separator dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupSeparatorDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupSeparatorDark]; + + /// + /// Gets the color for the group separator light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonGroupSeparatorLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupSeparatorLight]; + + /// + /// Gets the color for the minimize bar dark. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonMinimizeBarDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonMinimizeBarDark]; + + /// + /// Gets the color for the minimize bar light. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonMinimizeBarLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonMinimizeBarLight]; + + /// + /// Gets the color for the tab separator. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabSeparatorColor(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonTabSeparatorColor]; + + /// + /// Gets the color for the tab context separators. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTabSeparatorContextColor(PaletteState state) => _contextTabSeparator; + + /// + /// Gets the font for the ribbon text. + /// + /// Palette value should be applicable to this state. + /// Font value. + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; + + /// + /// Gets the rendering hint for the ribbon font. + /// + /// Palette value should be applicable to this state. + /// PaletteTextHint value. + public override PaletteTextHint GetRibbonTextHint(PaletteState state) => PaletteTextHint.ClearTypeGridFit; + + /// + /// Gets the color for the extra QAT button dark content color. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonQATButtonDark(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonQATButtonDark]; + + /// + /// Gets the color for the extra QAT button light content color. + /// + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonQATButtonLight(PaletteState state) => _ribbonColors[(int)SchemeOfficeColors.RibbonQATButtonLight]; #endregion - #region ButtonSpec - /// - /// Gets the image to display for the button. - /// - /// Style of button spec. - /// State for which image is required. - /// Image value. - public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, - PaletteState state) => style switch - { - PaletteButtonSpecStyle.PendantClose => _buttonSpecPendantClose, - PaletteButtonSpecStyle.PendantMin => _buttonSpecPendantMin, - PaletteButtonSpecStyle.PendantRestore => _buttonSpecPendantRestore, - PaletteButtonSpecStyle.FormClose => state switch - { - PaletteState.Tracking => _formCloseActive, - PaletteState.Normal => _formCloseNormal, - PaletteState.Pressed => _formClosePressed, - _ => _formCloseDisabled - }, - PaletteButtonSpecStyle.FormMin => state switch - { - PaletteState.Normal => _formMinimiseNormal, - PaletteState.Tracking => _formMinimiseActive, - PaletteState.Pressed => _formMinimisePressed, - _ => _formMinimiseDisabled - }, - PaletteButtonSpecStyle.FormMax => state switch - { - PaletteState.Normal => _formMaximiseNormal, - PaletteState.Tracking => _formMaximiseActive, - PaletteState.Pressed => _formMaximisePressed, - _ => _formMaximiseDisabled - }, - PaletteButtonSpecStyle.FormRestore => state switch - { - PaletteState.Normal => _formRestoreNormal, - PaletteState.Tracking => _formRestoreActive, - PaletteState.Pressed => _formRestorePressed, - _ => _formRestoreDisabled - }, - PaletteButtonSpecStyle.FormHelp => state switch - { - PaletteState.Tracking => _formHelpActive, - PaletteState.Pressed => _formHelpPressed, - PaletteState.Normal => _formHelpNormal, - _ => _formHelpDisabled - }, - PaletteButtonSpecStyle.RibbonMinimize => _buttonSpecRibbonMinimize, - PaletteButtonSpecStyle.RibbonExpand => _buttonSpecRibbonExpand, - _ => base.GetButtonSpecImage(style, state) - }; - #endregion + #region RibbonBack + /// + /// Gets the method used to draw the background of a ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// PaletteRibbonBackStyle value. + public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + return PaletteRibbonColorStyle.Solid; + case PaletteRibbonBackStyle.RibbonAppMenuInner: + return PaletteRibbonColorStyle.RibbonAppMenuInner; + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return PaletteRibbonColorStyle.RibbonAppMenuOuter; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.CheckedNormal + ? PaletteRibbonColorStyle.RibbonQATMinibarDouble + : PaletteRibbonColorStyle.RibbonQATMinibarSingle; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return PaletteRibbonColorStyle.RibbonQATFullbarSquare; + case PaletteRibbonBackStyle.RibbonQATOverflow: + return PaletteRibbonColorStyle.RibbonQATOverflow; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + return PaletteRibbonColorStyle.LinearBorder; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + return state == PaletteState.Pressed ? PaletteRibbonColorStyle.Empty : PaletteRibbonColorStyle.Linear; + + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + switch (state) + { + case PaletteState.Normal: + case PaletteState.ContextNormal: + return PaletteRibbonColorStyle.RibbonGroupNormalBorderSep; + case PaletteState.Tracking: + case PaletteState.ContextTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepTrackingLight; + case PaletteState.Pressed: + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepPressedLight; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + return PaletteRibbonColorStyle.Empty; + case PaletteRibbonBackStyle.RibbonGroupArea: + switch (state) + { + case PaletteState.Normal: + case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: + case PaletteState.ContextCheckedNormal: + return PaletteRibbonColorStyle.Empty; + case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; + case PaletteState.FocusOverride: + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Disabled: + case PaletteState.Normal: + return PaletteRibbonColorStyle.Empty; + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return PaletteRibbonColorStyle.RibbonTabTracking2010; + case PaletteState.FocusOverride: + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonTabSelected2010; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return PaletteRibbonColorStyle.Empty; + } + + /// + /// Gets the first background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonGalleryBack: + return state switch + { + PaletteState.Disabled => _disabledBack, + PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBackTracking], + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBackNormal] + }; + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return state switch + { + PaletteState.Disabled => _disabledBorder, + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBorder] + }; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonMenuDocsBack]; + case PaletteRibbonBackStyle.RibbonAppMenuInner: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonInner1]; + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonOuter1]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini1] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini1I]; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATFullbar1]; + case PaletteRibbonBackStyle.RibbonQATOverflow: + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATOverflow1]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameBorder1]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + switch (state) + { + case PaletteState.Normal: + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextNormal: + case PaletteState.ContextTracking: + case PaletteState.ContextPressed: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder1]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[0]; + case PaletteState.Tracking: + return _appButtonTrack[0]; + case PaletteState.Pressed: + return _appButtonPressed[0]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; + + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking1]; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected1]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder1; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the second background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonAppMenuInner: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonInner2]; + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonOuter2]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini2] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini2I]; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATFullbar2]; + case PaletteRibbonBackStyle.RibbonQATOverflow: + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATOverflow2]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameBorder2]; + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside2]; + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + switch (state) + { + case PaletteState.Normal: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitle2]; + case PaletteState.ContextNormal: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitleContext2]; + case PaletteState.Tracking: + case PaletteState.ContextTracking: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitleTracking2]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + switch (state) + { + case PaletteState.Normal: + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextNormal: + case PaletteState.ContextTracking: + case PaletteState.ContextPressed: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder2]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[1]; + case PaletteState.Tracking: + return _appButtonTrack[1]; + case PaletteState.Pressed: + return _appButtonPressed[1]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) + { + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking2]; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedTracking: + case PaletteState.ContextCheckedNormal: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected2]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder2; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } - #region RibbonText /// - /// Gets the =color for the item text. + /// Gets the third background color for the ribbon item. /// - /// Text style. + /// Background style. /// Palette value should be applicable to this state. /// Color value. - public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) + public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteState state) { switch (style) { - case PaletteRibbonTextStyle.RibbonGroupNormalTitle: - if (state == PaletteState.Disabled) + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonOuter3]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini3] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini3I]; + + case PaletteRibbonBackStyle.RibbonQATFullbar: + return _ribbonColors[(int)SchemeOfficeColors.RibbonQATFullbar3]; + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder3]; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonAppMenuInner: + case PaletteRibbonBackStyle.RibbonQATOverflow: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) { - return _disabledRibbonText; + case PaletteState.Normal: + return _appButtonNormal[2]; + case PaletteState.Tracking: + return _appButtonTrack[2]; + case PaletteState.Pressed: + return _appButtonPressed[2]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; } - break; - case PaletteRibbonTextStyle.RibbonGroupButtonText: - case PaletteRibbonTextStyle.RibbonGroupLabelText: - case PaletteRibbonTextStyle.RibbonGroupCheckBoxText: - case PaletteRibbonTextStyle.RibbonGroupRadioButtonText: - if (state == PaletteState.Disabled) + case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea3]; + case PaletteRibbonBackStyle.RibbonTab: + switch (state) { - return _disabledRibbonText; + case PaletteState.Tracking: + case PaletteState.Pressed: + case PaletteState.ContextTracking: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking3]; + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected3]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder3; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; } - + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } - return base.GetRibbonTextColor(style, state); + return Color.Red; } - #endregion - #region RibbonBack /// - /// Gets the method used to draw the background of a ribbon item. + /// Gets the fourth background color for the ribbon item. /// /// Background style. /// Palette value should be applicable to this state. - /// PaletteRibbonBackStyle value. - public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBackStyle style, PaletteState state) + /// Color value. + public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteState state) { switch (style) { + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini4] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini4I]; + + case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder4]; + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonAppMenuInner: + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + case PaletteRibbonBackStyle.RibbonQATFullbar: + case PaletteRibbonBackStyle.RibbonQATOverflow: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return GlobalStaticValues.EMPTY_COLOR; + case PaletteRibbonBackStyle.RibbonAppButton: + switch (state) + { + case PaletteState.Normal: + return _appButtonNormal[3]; + case PaletteState.Tracking: + return _appButtonTrack[3]; + case PaletteState.Pressed: + return _appButtonPressed[3]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; + } + break; + case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { case PaletteState.Tracking: case PaletteState.Pressed: case PaletteState.ContextTracking: - return PaletteRibbonColorStyle.RibbonTabTracking2010Alt; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking4]; case PaletteState.CheckedNormal: case PaletteState.CheckedTracking: case PaletteState.CheckedPressed: case PaletteState.ContextCheckedNormal: case PaletteState.ContextCheckedTracking: - return PaletteRibbonColorStyle.RibbonTabSelected2010Alt; + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; + case PaletteState.FocusOverride: + return _contextCheckedTabBorder4; + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; } break; - case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the fifth background color for the ribbon item. + /// + /// Background style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonBackStyle.RibbonAppMenuDocs: + case PaletteRibbonBackStyle.RibbonAppMenuInner: + case PaletteRibbonBackStyle.RibbonAppMenuOuter: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: + case PaletteRibbonBackStyle.RibbonGroupNormalTitle: + case PaletteRibbonBackStyle.RibbonQATFullbar: + case PaletteRibbonBackStyle.RibbonQATOverflow: + case PaletteRibbonBackStyle.RibbonGalleryBack: + case PaletteRibbonBackStyle.RibbonGalleryBorder: + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: + case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder5]; + case PaletteRibbonBackStyle.RibbonQATMinibar: + return state == PaletteState.Normal + ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5] + : _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5I]; + + case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { + case PaletteState.Normal: + return _appButtonNormal[4]; case PaletteState.Tracking: - case PaletteState.ContextTracking: - return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepTrackingDark; + return _appButtonTrack[4]; case PaletteState.Pressed: - return PaletteRibbonColorStyle.RibbonGroupNormalBorderSepPressedDark; + return _appButtonPressed[4]; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; + case PaletteRibbonBackStyle.RibbonTab: switch (state) { + case PaletteState.Disabled: + return _disabledText; + case PaletteState.Pressed: + return _ribbonColors[(int)SchemeOfficeColors.RibbonTabTracking2]; case PaletteState.Tracking: + case PaletteState.CheckedNormal: + case PaletteState.CheckedTracking: + case PaletteState.CheckedPressed: case PaletteState.ContextTracking: - return PaletteRibbonColorStyle.RibbonGroupNormalTrackingDark; - case PaletteState.Pressed: - return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; + case PaletteState.ContextCheckedNormal: + case PaletteState.ContextCheckedTracking: + case PaletteState.FocusOverride: + case PaletteState.Normal: + return GlobalStaticValues.EMPTY_COLOR; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); + break; } break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + #endregion + + #region RibbonText + /// + /// Gets the =color for the item text. + /// + /// Text style. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteState state) + { + switch (style) + { + case PaletteRibbonTextStyle.RibbonAppMenuDocsTitle: + case PaletteRibbonTextStyle.RibbonAppMenuDocsEntry: + return _ribbonColors[(int)SchemeOfficeColors.AppButtonMenuDocsText]; + case PaletteRibbonTextStyle.RibbonGroupNormalTitle: + return state switch + { + PaletteState.Disabled => _disabledText, + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupTitleText] + }; + case PaletteRibbonTextStyle.RibbonTab: + return state switch + { + PaletteState.Disabled => _disabledText, + PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.ContextCheckedNormal or PaletteState.ContextCheckedTracking or PaletteState.FocusOverride => _ribbonColors[(int)SchemeOfficeColors.RibbonTabTextChecked], + _ => _ribbonColors[(int)SchemeOfficeColors.RibbonTabTextNormal] + }; + case PaletteRibbonTextStyle.RibbonGroupCollapsedText: + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; + case PaletteRibbonTextStyle.RibbonGroupButtonText: + case PaletteRibbonTextStyle.RibbonGroupLabelText: + case PaletteRibbonTextStyle.RibbonGroupCheckBoxText: + case PaletteRibbonTextStyle.RibbonGroupRadioButtonText: + return state == PaletteState.Disabled ? _disabledText : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedText]; + + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); + break; + } + + return Color.Red; + } + #endregion + + #region ElementColor + /// + /// Gets the first element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor1(PaletteElement element, PaletteState state) + { + // We do not provide override values + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (element) + { + case PaletteElement.TrackBarTick: + return _trackBarColors[0]; + case PaletteElement.TrackBarTrack: + return _trackBarColors[1]; + case PaletteElement.TrackBarPosition: + return state switch + { + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, + _ => _trackBarColors[4] + }; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the second element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor2(PaletteElement element, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (element) + { + case PaletteElement.TrackBarTick: + return _trackBarColors[0]; + case PaletteElement.TrackBarTrack: + return _trackBarColors[2]; + case PaletteElement.TrackBarPosition: + return state switch + { + PaletteState.Disabled => ControlPaint.Light(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder]), + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], + PaletteState.Pressed => _buttonBorderColors[3], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the third element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor3(PaletteElement element, PaletteState state) + { + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + switch (element) + { + case PaletteElement.TrackBarTick: + return _trackBarColors[0]; + case PaletteElement.TrackBarTrack: + return _trackBarColors[3]; + case PaletteElement.TrackBarPosition: + return state switch + { + PaletteState.Disabled => ControlPaint.LightLight( + _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => ControlPaint.Light( + _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), + PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the fourth element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor4(PaletteElement element, PaletteState state) + { + switch (element) + { + case PaletteElement.TrackBarTick: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return _trackBarColors[0]; + case PaletteElement.TrackBarTrack: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return _trackBarColors[3]; + case PaletteElement.TrackBarPosition: + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return state switch + { + PaletteState.Disabled => ControlPaint.LightLight(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], + PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], + PaletteState.Pressed => _buttonBackColors[4], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; + } + + return Color.Red; + } + + /// + /// Gets the fifth element color. + /// + /// Element for which color is required. + /// Palette value should be applicable to this state. + /// Color value. + public override Color GetElementColor5(PaletteElement element, PaletteState state) + { + switch (element) + { + case PaletteElement.TrackBarTick: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return _trackBarColors[0]; + case PaletteElement.TrackBarTrack: + if (CommonHelper.IsOverrideState(state)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return _trackBarColors[3]; + case PaletteElement.TrackBarPosition: + if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) + { + return GlobalStaticValues.EMPTY_COLOR; + } + + return state switch + { + PaletteState.Disabled => ControlPaint.LightLight(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), + PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], + PaletteState.Pressed => _buttonBackColors[5], + _ => throw DebugTools.NotImplemented(state.ToString()) + }; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); + break; } - return base.GetRibbonBackColorStyle(style, state); + return Color.Red; + } + #endregion + + #region OnUserPreferenceChanged + /// + /// Handle a change in the user preferences. + /// + /// Source of event. + /// Event data. + protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) + { + // Remove the current table, so it gets regenerated when next requested + Table = null; + + // Update fonts to reflect any change in system settings + DefineFonts(); + + base.OnUserPreferenceChanged(sender, e); } #endregion } + + #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Blue.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Blue.cs index 62d3212bc..aa1b10655 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Blue.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Blue.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,11 +18,43 @@ namespace Krypton.Toolkit public class PaletteOffice2010Blue : PaletteOffice2010Base { #region Static Fields + + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(174, 194, 219); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(187, 206, 230); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + + #region ImageLists + private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + + #endregion + + #region Images + + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -43,240 +75,258 @@ public class PaletteOffice2010Blue : PaletteOffice2010Base private static readonly Image _formHelpActive = Office2010ControlBoxResources.Office2010HelpIconHover; private static readonly Image _formHelpPressed = Office2010ControlBoxResources.Office2010HelpIconPressed; private static readonly Image _formHelpDisabled = Office2010ControlBoxResources.Office2010HelpIconDisabled; - private static readonly Color[] _trackBarColors = { Color.FromArgb(116, 150, 194), // Tick marks - Color.FromArgb(116, 150, 194), // Top track - Color.FromArgb(152, 190, 241), // Bottom track - Color.FromArgb(142, 180, 231), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(63, 101, 152) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = { Color.FromArgb( 30, 57, 91), // TextLabelControl - Color.FromArgb( 30, 57, 91), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(171, 186, 208), // ButtonNormalBorder - Color.FromArgb(117, 144, 175), // ButtonNormalDefaultBorder - Color.FromArgb(225, 237, 250), // ButtonNormalBack1 - Color.FromArgb(208, 223, 238), // ButtonNormalBack2 - Color.FromArgb(255, 255, 255), // ButtonNormalDefaultBack1 - Color.FromArgb(210, 229, 250), // ButtonNormalDefaultBack2 - Color.FromArgb(174, 194, 219), // ButtonNormalNavigatorBack1 - Color.FromArgb(174, 194, 219), // ButtonNormalNavigatorBack2 - Color.FromArgb(187, 206, 230), // PanelClient - Color.FromArgb(174, 194, 219), // PanelAlternative - Color.FromArgb(133, 158, 191), // ControlBorder - Color.FromArgb(239, 245, 255), // SeparatorHighBorder1 - Color.FromArgb(200, 217, 239), // SeparatorHighBorder2 - Color.FromArgb(207, 221, 238), // HeaderPrimaryBack1 - Color.FromArgb(174, 194, 219), // HeaderPrimaryBack2 - Color.FromArgb(239, 246, 253), // HeaderSecondaryBack1 - Color.FromArgb(216, 228, 242), // HeaderSecondaryBack2 - Color.FromArgb( 30, 57, 91), // HeaderText - Color.FromArgb( 30, 57, 91), // StatusStripText - Color.FromArgb(236, 199, 87), // ButtonBorder - Color.FromArgb(245, 249, 255), // SeparatorLight - Color.FromArgb(120, 141, 165), // SeparatorDark - Color.FromArgb(212, 225, 241), // GripLight - Color.FromArgb(132, 157, 189), // GripDark - Color.FromArgb(187, 206, 230), // ToolStripBack - Color.FromArgb(220, 232, 246), // StatusStripLight - Color.FromArgb(179, 196, 216), // StatusStripDark - Color.White, // ImageMargin - Color.FromArgb(220, 232, 246), // ToolStripBegin - Color.FromArgb(179, 196, 216), // ToolStripMiddle - Color.FromArgb(179, 196, 216), // ToolStripEnd - Color.FromArgb(132, 157, 189), // OverflowBegin - Color.FromArgb(132, 157, 189), // OverflowMiddle - Color.FromArgb(132, 157, 189), // OverflowEnd - Color.FromArgb(132, 157, 189), // ToolStripBorder - Color.FromArgb(144, 154, 166), // FormBorderActive - Color.FromArgb(162, 173, 185), // FormBorderInactive - Color.FromArgb(187, 206, 230), // FormBorderActiveLight - Color.FromArgb(212, 230, 245), // FormBorderActiveDark - Color.FromArgb(223, 235, 247), // FormBorderInactiveLight - Color.FromArgb(223, 235, 247), // FormBorderInactiveDark - Color.FromArgb(144, 154, 166), // FormBorderHeaderActive - Color.FromArgb(162, 173, 185), // FormBorderHeaderInactive - Color.FromArgb(193, 212, 236), // FormBorderHeaderActive1 - Color.FromArgb(187, 206, 230), // FormBorderHeaderActive2 - Color.FromArgb(223, 235, 247), // FormBorderHeaderInctive1 - Color.FromArgb(223, 235, 247), // FormBorderHeaderInctive2 - Color.FromArgb( 30, 57, 91), // FormHeaderShortActive - Color.FromArgb(106, 128, 168), // FormHeaderShortInactive - Color.FromArgb( 30, 57, 91), // FormHeaderLongActive - Color.FromArgb(106, 128, 168), // FormHeaderLongInactive - Color.FromArgb(143, 165, 191), // FormButtonBorderTrack - Color.FromArgb(214, 234, 255), // FormButtonBack1Track - Color.FromArgb(188, 207, 231), // FormButtonBack2Track - Color.FromArgb(143, 165, 191), // FormButtonBorderPressed - Color.FromArgb(187, 206, 230), // FormButtonBack1Pressed - Color.FromArgb(166, 182, 213), // FormButtonBack2Pressed - Color.FromArgb( 21, 66, 139), // TextButtonFormNormal - Color.FromArgb( 21, 66, 139), // TextButtonFormTracking - Color.FromArgb( 21, 66, 139), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 30, 57, 91), // TextLabelPanel - Color.FromArgb( 30, 57, 91), // RibbonTabTextNormal - Color.FromArgb( 30, 57, 91), // RibbonTabTextChecked - Color.FromArgb(159, 178, 199), // RibbonTabSelected1 - Color.FromArgb(245, 250, 255), // RibbonTabSelected2 - Color.FromArgb(239, 246, 253), // RibbonTabSelected3 - Color.FromArgb(239, 246, 253), // RibbonTabSelected4 - Color.FromArgb(239, 246, 253), // RibbonTabSelected5 - Color.FromArgb(159, 178, 199), // RibbonTabTracking1 - Color.FromArgb(237, 241, 247), // RibbonTabTracking2 - Color.FromArgb(159, 178, 199), // RibbonTabHighlight1 - Color.FromArgb(245, 250, 255), // RibbonTabHighlight2 - Color.FromArgb(239, 246, 253), // RibbonTabHighlight3 - Color.FromArgb(239, 246, 253), // RibbonTabHighlight4 - Color.FromArgb(239, 246, 253), // RibbonTabHighlight5 - Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor - Color.FromArgb(159, 178, 199), // RibbonGroupsArea1 - Color.FromArgb(114, 142, 173), // RibbonGroupsArea2 - Color.FromArgb(239, 246, 253), // RibbonGroupsArea3 - Color.FromArgb(221, 234, 247), // RibbonGroupsArea4 - Color.FromArgb(216, 228, 242), // RibbonGroupsArea5 - Color.FromArgb(235, 240, 246), // RibbonGroupBorder1 - Color.FromArgb(240, 246, 252), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 - Color.FromArgb(135, 142, 152), // RibbonGroupDialogDark - Color.FromArgb(165, 174, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(139, 160, 188), // RibbonMinimizeBarDark - Color.FromArgb(198, 218, 240), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 - Color.FromArgb(189, 203, 218), // RibbonGroupFrameBorder1 - Color.FromArgb(184, 199, 216), // RibbonGroupFrameBorder2 - Color.FromArgb(233, 241, 250), // RibbonGroupFrameInside1 - Color.FromArgb(222, 233, 246), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 - Color.FromArgb( 30, 57, 91), // RibbonGroupCollapsedText - Color.FromArgb(118, 153, 200), // AlternatePressedBack1 - Color.FromArgb(184, 215, 253), // AlternatePressedBack2 - Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 - Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 - Color.FromArgb(150, 194, 239), // FormButtonBack1Checked - Color.FromArgb(210, 228, 254), // FormButtonBack2Checked - Color.FromArgb(158, 193, 241), // FormButtonBorderCheck - Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack - Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack - Color.FromArgb(154, 179, 213), // RibbonQATMini1 - Color.FromArgb(219, 231, 247), // RibbonQATMini2 - Color.FromArgb(195, 213, 236), // RibbonQATMini3 - Color.FromArgb(128, Color.White), // RibbonQATMini4 - Color.FromArgb(72, Color.White), // RibbonQATMini5 - Color.FromArgb(153, 176, 206), // RibbonQATMini1I - Color.FromArgb(226, 233, 241), // RibbonQATMini2I - Color.FromArgb(198, 210, 226), // RibbonQATMini3I - Color.FromArgb(128, Color.White), // RibbonQATMini4I - Color.FromArgb(72, Color.White), // RibbonQATMini5I - Color.FromArgb(213, 232, 254), // RibbonQATFullbar1 - Color.FromArgb(205, 223, 245), // RibbonQATFullbar2 - Color.FromArgb(114, 142, 173), // RibbonQATFullbar3 - Color.FromArgb( 90, 90, 90), // RibbonQATButtonDark - Color.FromArgb(207, 214, 224), // RibbonQATButtonLight - Color.FromArgb(222, 236, 252), // RibbonQATOverflow1 - Color.FromArgb(123, 139, 156), // RibbonQATOverflow2 - Color.FromArgb(145, 166, 194), // RibbonGroupSeparatorDark - Color.FromArgb(239, 245, 250), // RibbonGroupSeparatorLight - Color.FromArgb(192, 212, 241), // ButtonClusterButtonBack1 - Color.FromArgb(200, 219, 238), // ButtonClusterButtonBack2 - Color.FromArgb(155, 183, 224), // ButtonClusterButtonBorder1 - Color.FromArgb(117, 150, 191), // ButtonClusterButtonBorder2 - Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor - Color.FromArgb(244, 249, 255), // GridListNormal1 - Color.FromArgb(218, 231, 245), // GridListNormal2 - Color.FromArgb(198, 211, 225), // GridListPressed1 - Color.FromArgb(244, 249, 255), // GridListPressed2 - Color.FromArgb(160, 185, 230), // GridListSelected - Color.FromArgb(233, 246, 255), // GridSheetColNormal1 - Color.FromArgb(213, 226, 240), // GridSheetColNormal2 - Color.FromArgb(255, 223, 107), // GridSheetColPressed1 - Color.FromArgb(255, 252, 230), // GridSheetColPressed2 - Color.FromArgb(255, 211, 89), // GridSheetColSelected1 - Color.FromArgb(255, 239, 113), // GridSheetColSelected2 - Color.FromArgb(218, 231, 245), // GridSheetRowNormal - Color.FromArgb(255, 223, 107), // GridSheetRowPressed - Color.FromArgb(245, 210, 87), // GridSheetRowSelected - Color.FromArgb(218, 220, 221), // GridDataCellBorder - Color.FromArgb(183, 219, 255), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(168, 168, 168), // InputControlTextDisabled - Color.FromArgb(177, 192, 214), // InputControlBorderNormal - Color.FromArgb(177, 187, 198), // InputControlBorderDisabled - Color.FromArgb(255, 255, 255), // InputControlBackNormal - Color.FromArgb(240, 240, 240), // InputControlBackDisabled - Color.FromArgb(237, 245, 253), // InputControlBackInactive - Color.Black, // InputDropDownNormal1 - Color.Transparent, // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack - Color.FromArgb( 30, 57, 91), // ContextMenuHeadingText - Color.White, // ContextMenuImageColumn - Color.FromArgb(195, 212, 235), // AppButtonBack1 - Color.FromArgb(195, 212, 235), // AppButtonBack2 - Color.FromArgb(114, 142, 173), // AppButtonBorder - Color.FromArgb(195, 212, 235), // AppButtonOuter1 - Color.FromArgb(195, 212, 235), // AppButtonOuter2 - Color.FromArgb(195, 212, 235), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 - Color.FromArgb(114, 142, 173), // AppButtonInner2 - Color.White, // AppButtonMenuDocs - Color.Black, // AppButtonMenuDocsText - Color.FromArgb(239, 245, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(200, 217, 239), // SeparatorHighInternalBorder2 - Color.FromArgb(177, 192, 214), // RibbonGalleryBorder - Color.FromArgb(237, 245, 253), // RibbonGalleryBackNormal - Color.FromArgb(242, 247, 252), // RibbonGalleryBackTracking - Color.FromArgb(237, 245, 253), // RibbonGalleryBack1 - Color.FromArgb(206, 221, 237), // RibbonGalleryBack2 - Color.FromArgb(214, 222, 234), // RibbonTabTracking3 - Color.FromArgb(200, 215, 233), // RibbonTabTracking4 - Color.FromArgb(147, 167, 195), // RibbonGroupBorder3 - Color.FromArgb(226, 236, 247), // RibbonGroupBorder4 - Color.FromArgb(251, 251, 252), // RibbonGroupBorder5 - Color.FromArgb( 56, 78, 115), // RibbonGroupTitleText - Color.FromArgb(151, 156, 163), // RibbonDropArrowLight - Color.FromArgb( 39, 49, 60), // RibbonDropArrowDark - Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 - Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 - Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder - Color.FromArgb( 0, 25, 56), // ButtonNavigatorText - Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 - Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 - Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 - Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 - Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 - Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 - Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + + #endregion + + #region Color Arrays + + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(116, 150, 194), // Tick marks + Color.FromArgb(116, 150, 194), // Top track + Color.FromArgb(152, 190, 241), // Bottom track + Color.FromArgb(142, 180, 231), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(63, 101, 152) // Border (normal) position + ]; + + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb(30, 57, 91), // TextLabelControl + Color.FromArgb(30, 57, 91), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(171, 186, 208), // ButtonNormalBorder + Color.FromArgb(117, 144, 175), // ButtonNormalDefaultBorder + Color.FromArgb(225, 237, 250), // ButtonNormalBack1 + Color.FromArgb(208, 223, 238), // ButtonNormalBack2 + Color.FromArgb(255, 255, 255), // ButtonNormalDefaultBack1 + Color.FromArgb(210, 229, 250), // ButtonNormalDefaultBack2 + Color.FromArgb(174, 194, 219), // ButtonNormalNavigatorBack1 + Color.FromArgb(174, 194, 219), // ButtonNormalNavigatorBack2 + Color.FromArgb(187, 206, 230), // PanelClient + Color.FromArgb(174, 194, 219), // PanelAlternative + Color.FromArgb(133, 158, 191), // ControlBorder + Color.FromArgb(239, 245, 255), // SeparatorHighBorder1 + Color.FromArgb(200, 217, 239), // SeparatorHighBorder2 + Color.FromArgb(207, 221, 238), // HeaderPrimaryBack1 + Color.FromArgb(174, 194, 219), // HeaderPrimaryBack2 + Color.FromArgb(239, 246, 253), // HeaderSecondaryBack1 + Color.FromArgb(216, 228, 242), // HeaderSecondaryBack2 + Color.FromArgb(30, 57, 91), // HeaderText + Color.FromArgb(30, 57, 91), // StatusStripText + Color.FromArgb(236, 199, 87), // ButtonBorder + Color.FromArgb(245, 249, 255), // SeparatorLight + Color.FromArgb(120, 141, 165), // SeparatorDark + Color.FromArgb(212, 225, 241), // GripLight + Color.FromArgb(132, 157, 189), // GripDark + Color.FromArgb(187, 206, 230), // ToolStripBack + Color.FromArgb(220, 232, 246), // StatusStripLight + Color.FromArgb(179, 196, 216), // StatusStripDark + Color.White, // ImageMargin + Color.FromArgb(220, 232, 246), // ToolStripBegin + Color.FromArgb(179, 196, 216), // ToolStripMiddle + Color.FromArgb(179, 196, 216), // ToolStripEnd + Color.FromArgb(132, 157, 189), // OverflowBegin + Color.FromArgb(132, 157, 189), // OverflowMiddle + Color.FromArgb(132, 157, 189), // OverflowEnd + Color.FromArgb(132, 157, 189), // ToolStripBorder + Color.FromArgb(144, 154, 166), // FormBorderActive + Color.FromArgb(162, 173, 185), // FormBorderInactive + Color.FromArgb(187, 206, 230), // FormBorderActiveLight + Color.FromArgb(212, 230, 245), // FormBorderActiveDark + Color.FromArgb(223, 235, 247), // FormBorderInactiveLight + Color.FromArgb(223, 235, 247), // FormBorderInactiveDark + Color.FromArgb(144, 154, 166), // FormBorderHeaderActive + Color.FromArgb(162, 173, 185), // FormBorderHeaderInactive + Color.FromArgb(193, 212, 236), // FormBorderHeaderActive1 + Color.FromArgb(187, 206, 230), // FormBorderHeaderActive2 + Color.FromArgb(223, 235, 247), // FormBorderHeaderInctive1 + Color.FromArgb(223, 235, 247), // FormBorderHeaderInctive2 + Color.FromArgb(30, 57, 91), // FormHeaderShortActive + Color.FromArgb(106, 128, 168), // FormHeaderShortInactive + Color.FromArgb(30, 57, 91), // FormHeaderLongActive + Color.FromArgb(106, 128, 168), // FormHeaderLongInactive + Color.FromArgb(143, 165, 191), // FormButtonBorderTrack + Color.FromArgb(214, 234, 255), // FormButtonBack1Track + Color.FromArgb(188, 207, 231), // FormButtonBack2Track + Color.FromArgb(143, 165, 191), // FormButtonBorderPressed + Color.FromArgb(187, 206, 230), // FormButtonBack1Pressed + Color.FromArgb(166, 182, 213), // FormButtonBack2Pressed + Color.FromArgb(21, 66, 139), // TextButtonFormNormal + Color.FromArgb(21, 66, 139), // TextButtonFormTracking + Color.FromArgb(21, 66, 139), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb(30, 57, 91), // TextLabelPanel + Color.FromArgb(30, 57, 91), // RibbonTabTextNormal + Color.FromArgb(30, 57, 91), // RibbonTabTextChecked + Color.FromArgb(159, 178, 199), // RibbonTabSelected1 + Color.FromArgb(245, 250, 255), // RibbonTabSelected2 + Color.FromArgb(239, 246, 253), // RibbonTabSelected3 + Color.FromArgb(239, 246, 253), // RibbonTabSelected4 + Color.FromArgb(239, 246, 253), // RibbonTabSelected5 + Color.FromArgb(159, 178, 199), // RibbonTabTracking1 + Color.FromArgb(237, 241, 247), // RibbonTabTracking2 + Color.FromArgb(159, 178, 199), // RibbonTabHighlight1 + Color.FromArgb(245, 250, 255), // RibbonTabHighlight2 + Color.FromArgb(239, 246, 253), // RibbonTabHighlight3 + Color.FromArgb(239, 246, 253), // RibbonTabHighlight4 + Color.FromArgb(239, 246, 253), // RibbonTabHighlight5 + Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor + Color.FromArgb(159, 178, 199), // RibbonGroupsArea1 + Color.FromArgb(114, 142, 173), // RibbonGroupsArea2 + Color.FromArgb(239, 246, 253), // RibbonGroupsArea3 + Color.FromArgb(221, 234, 247), // RibbonGroupsArea4 + Color.FromArgb(216, 228, 242), // RibbonGroupsArea5 + Color.FromArgb(235, 240, 246), // RibbonGroupBorder1 + Color.FromArgb(240, 246, 252), // RibbonGroupBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 + Color.FromArgb(135, 142, 152), // RibbonGroupDialogDark + Color.FromArgb(165, 174, 183), // RibbonGroupDialogLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(139, 160, 188), // RibbonMinimizeBarDark + Color.FromArgb(198, 218, 240), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 + Color.FromArgb(189, 203, 218), // RibbonGroupFrameBorder1 + Color.FromArgb(184, 199, 216), // RibbonGroupFrameBorder2 + Color.FromArgb(233, 241, 250), // RibbonGroupFrameInside1 + Color.FromArgb(222, 233, 246), // RibbonGroupFrameInside2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 + Color.FromArgb(30, 57, 91), // RibbonGroupCollapsedText + Color.FromArgb(118, 153, 200), // AlternatePressedBack1 + Color.FromArgb(184, 215, 253), // AlternatePressedBack2 + Color.FromArgb(135, 156, 175), // AlternatePressedBorder1 + Color.FromArgb(177, 198, 216), // AlternatePressedBorder2 + Color.FromArgb(150, 194, 239), // FormButtonBack1Checked + Color.FromArgb(210, 228, 254), // FormButtonBack2Checked + Color.FromArgb(158, 193, 241), // FormButtonBorderCheck + Color.FromArgb(140, 184, 229), // FormButtonBack1CheckTrack + Color.FromArgb(225, 241, 255), // FormButtonBack2CheckTrack + Color.FromArgb(154, 179, 213), // RibbonQATMini1 + Color.FromArgb(219, 231, 247), // RibbonQATMini2 + Color.FromArgb(195, 213, 236), // RibbonQATMini3 + Color.FromArgb(128, Color.White), // RibbonQATMini4 + Color.FromArgb(72, Color.White), // RibbonQATMini5 + Color.FromArgb(153, 176, 206), // RibbonQATMini1I + Color.FromArgb(226, 233, 241), // RibbonQATMini2I + Color.FromArgb(198, 210, 226), // RibbonQATMini3I + Color.FromArgb(128, Color.White), // RibbonQATMini4I + Color.FromArgb(72, Color.White), // RibbonQATMini5I + Color.FromArgb(213, 232, 254), // RibbonQATFullbar1 + Color.FromArgb(205, 223, 245), // RibbonQATFullbar2 + Color.FromArgb(114, 142, 173), // RibbonQATFullbar3 + Color.FromArgb(90, 90, 90), // RibbonQATButtonDark + Color.FromArgb(207, 214, 224), // RibbonQATButtonLight + Color.FromArgb(222, 236, 252), // RibbonQATOverflow1 + Color.FromArgb(123, 139, 156), // RibbonQATOverflow2 + Color.FromArgb(145, 166, + 194), // RibbonGroupSeparatorDark + Color.FromArgb(239, 245, + 250), // RibbonGroupSeparatorLight + Color.FromArgb(192, 212, + 241), // ButtonClusterButtonBack1 + Color.FromArgb(200, 219, + 238), // ButtonClusterButtonBack2 + Color.FromArgb(155, 183, + 224), // ButtonClusterButtonBorder1 + Color.FromArgb(117, 150, + 191), // ButtonClusterButtonBorder2 + Color.FromArgb(213, 228, 242), // NavigatorMiniBackColor + Color.FromArgb(244, 249, 255), // GridListNormal1 + Color.FromArgb(218, 231, 245), // GridListNormal2 + Color.FromArgb(198, 211, 225), // GridListPressed1 + Color.FromArgb(244, 249, 255), // GridListPressed2 + Color.FromArgb(160, 185, 230), // GridListSelected + Color.FromArgb(233, 246, 255), // GridSheetColNormal1 + Color.FromArgb(213, 226, 240), // GridSheetColNormal2 + Color.FromArgb(255, 223, 107), // GridSheetColPressed1 + Color.FromArgb(255, 252, 230), // GridSheetColPressed2 + Color.FromArgb(255, 211, 89), // GridSheetColSelected1 + Color.FromArgb(255, 239, 113), // GridSheetColSelected2 + Color.FromArgb(218, 231, 245), // GridSheetRowNormal + Color.FromArgb(255, 223, 107), // GridSheetRowPressed + Color.FromArgb(245, 210, 87), // GridSheetRowSelected + Color.FromArgb(218, 220, 221), // GridDataCellBorder + Color.FromArgb(183, 219, 255), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(168, 168, 168), // InputControlTextDisabled + Color.FromArgb(177, 192, 214), // InputControlBorderNormal + Color.FromArgb(177, 187, 198), // InputControlBorderDisabled + Color.FromArgb(255, 255, 255), // InputControlBackNormal + Color.FromArgb(240, 240, 240), // InputControlBackDisabled + Color.FromArgb(237, 245, 253), // InputControlBackInactive + Color.Black, // InputDropDownNormal1 + Color.Transparent, // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack + Color.FromArgb(30, 57, 91), // ContextMenuHeadingText + Color.White, // ContextMenuImageColumn + Color.FromArgb(195, 212, 235), // AppButtonBack1 + Color.FromArgb(195, 212, 235), // AppButtonBack2 + Color.FromArgb(114, 142, 173), // AppButtonBorder + Color.FromArgb(195, 212, 235), // AppButtonOuter1 + Color.FromArgb(195, 212, 235), // AppButtonOuter2 + Color.FromArgb(195, 212, 235), // AppButtonOuter3 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 + Color.FromArgb(114, 142, 173), // AppButtonInner2 + Color.White, // AppButtonMenuDocs + Color.Black, // AppButtonMenuDocsText + Color.FromArgb(239, 245, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(200, 217, 239), // SeparatorHighInternalBorder2 + Color.FromArgb(177, 192, 214), // RibbonGalleryBorder + Color.FromArgb(237, 245, 253), // RibbonGalleryBackNormal + Color.FromArgb(242, 247, 252), // RibbonGalleryBackTracking + Color.FromArgb(237, 245, 253), // RibbonGalleryBack1 + Color.FromArgb(206, 221, 237), // RibbonGalleryBack2 + Color.FromArgb(214, 222, 234), // RibbonTabTracking3 + Color.FromArgb(200, 215, 233), // RibbonTabTracking4 + Color.FromArgb(147, 167, 195), // RibbonGroupBorder3 + Color.FromArgb(226, 236, 247), // RibbonGroupBorder4 + Color.FromArgb(251, 251, 252), // RibbonGroupBorder5 + Color.FromArgb(56, 78, 115), // RibbonGroupTitleText + Color.FromArgb(151, 156, 163), // RibbonDropArrowLight + Color.FromArgb(39, 49, 60), // RibbonDropArrowDark + Color.FromArgb(208, 226, 248), // HeaderDockInactiveBack1 + Color.FromArgb(178, 196, 218), // HeaderDockInactiveBack2 + Color.FromArgb(133, 158, 191), // ButtonNavigatorBorder + Color.FromArgb(0, 25, 56), // ButtonNavigatorText + Color.FromArgb(177, 198, 224), // ButtonNavigatorTrack1 + Color.FromArgb(211, 224, 240), // ButtonNavigatorTrack2 + Color.FromArgb(148, 174, 205), // ButtonNavigatorPressed1 + Color.FromArgb(198, 214, 231), // ButtonNavigatorPressed2 + Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 + Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 + Color.FromArgb(201, 217, 239) // ToolTipBottom + ]; + + #endregion #endregion #region Identity @@ -295,8 +345,8 @@ static PaletteOffice2010Blue() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -305,7 +355,7 @@ static PaletteOffice2010Blue() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// @@ -384,5 +434,40 @@ public PaletteOffice2010Blue() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Silver.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Silver.cs index 91d6ee30e..f0377683e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Silver.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2010/Official Themes/PaletteOffice2010Silver.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,11 +18,43 @@ namespace Krypton.Toolkit public class PaletteOffice2010Silver : PaletteOffice2010Base { #region Static Fields + + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(207, 212, 218); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(227, 230, 232); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + + #region ImageLists + private static readonly ImageList _checkBoxList; private static readonly ImageList _galleryButtonList; - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + + #endregion + + #region Images + + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -43,240 +75,251 @@ public class PaletteOffice2010Silver : PaletteOffice2010Base private static readonly Image _formHelpActive = Office2010ControlBoxResources.Office2010HelpIconHover; private static readonly Image _formHelpPressed = Office2010ControlBoxResources.Office2010HelpIconPressed; private static readonly Image _formHelpDisabled = Office2010ControlBoxResources.Office2010HelpIconDisabled; - private static readonly Color[] _trackBarColors = new Color[] { Color.FromArgb(170, 170, 170), // Tick marks - Color.FromArgb(166, 170, 175), // Top track - Color.FromArgb(226, 220, 235), // Bottom track - Color.FromArgb(206, 200, 215), // Fill track - Color.FromArgb(64, Color.White), // Outside position - Color.FromArgb(80, 81, 82) // Border (normal) position - }; - private static readonly Color[] _schemeOfficeColors = new Color[] { Color.FromArgb( 59, 59, 59), // TextLabelControl - Color.FromArgb( 59, 59, 59), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(187, 191, 196), // ButtonNormalBorder1 - Color.FromArgb(158, 166, 172), // ButtonNormalDefaultBorder - Color.FromArgb(247, 250, 252), // ButtonNormalBack1 - Color.FromArgb(231, 234, 238), // ButtonNormalBack2 - Color.FromArgb(235, 235, 235), // ButtonNormalDefaultBack1 - Color.FromArgb(195, 195, 195), // ButtonNormalDefaultBack2 - Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack1 - Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack2 - Color.FromArgb(227, 230, 232), // PanelClient - Color.FromArgb(207, 212, 218), // PanelAlternative - Color.FromArgb(161, 169, 179), // ControlBorder - Color.FromArgb(250, 253, 255), // SeparatorHighBorder1 - Color.FromArgb(227, 232, 237), // SeparatorHighBorder2 - Color.FromArgb(233, 237, 241), // HeaderPrimaryBack1 - Color.FromArgb(207, 212, 218), // HeaderPrimaryBack2 - Color.FromArgb(255, 255, 255), // HeaderSecondaryBack1 - Color.FromArgb(234, 237, 241), // HeaderSecondaryBack2 - Color.FromArgb( 59, 59, 59), // HeaderText - Color.FromArgb( 59, 59, 59), // StatusStripText - Color.FromArgb(236, 199, 87), // ButtonBorder - Color.FromArgb(247, 250, 252), // SeparatorLight - Color.FromArgb(119, 123, 127), // SeparatorDark - Color.FromArgb(255, 255, 255), // GripLight - Color.FromArgb(181, 190, 199), // GripDark - Color.FromArgb(227, 230, 232), // ToolStripBack - Color.FromArgb(230, 234, 238), // StatusStripLight - Color.FromArgb(183, 188, 193), // StatusStripDark - Color.White, // ImageMargin - Color.FromArgb(230, 234, 238), // ToolStripBegin - Color.FromArgb(183, 188, 193), // ToolStripMiddle - Color.FromArgb(183, 188, 193), // ToolStripEnd - Color.FromArgb(147, 154, 163), // OverflowBegin - Color.FromArgb(147, 154, 163), // OverflowMiddle - Color.FromArgb(147, 154, 163), // OverflowEnd - Color.FromArgb(147, 154, 163), // ToolStripBorder - Color.FromArgb(101, 109, 117), // FormBorderActive - Color.FromArgb(134, 139, 145), // FormBorderInactive - Color.FromArgb(228, 230, 232), // FormBorderActiveLight - Color.FromArgb(255, 255, 255), // FormBorderActiveDark - Color.FromArgb(248, 247, 247), // FormBorderInactiveLight - Color.FromArgb(248, 247, 247), // FormBorderInactiveDark - Color.FromArgb(101, 109, 117), // FormBorderHeaderActive - Color.FromArgb(134, 139, 145), // FormBorderHeaderInactive - Color.FromArgb(235, 237, 240), // FormBorderHeaderActive1 - Color.FromArgb(228, 230, 232), // FormBorderHeaderActive2 - Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive1 - Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive2 - Color.FromArgb( 59, 59, 59), // FormHeaderShortActive - Color.FromArgb(138, 138, 138), // FormHeaderShortInactive - Color.FromArgb( 59, 59, 59), // FormHeaderLongActive - Color.FromArgb(138, 138, 138), // FormHeaderLongInactive - Color.FromArgb(166, 172, 179), // FormButtonBorderTrack - Color.FromArgb(255, 255, 255), // FormButtonBack1Track - Color.FromArgb(228, 228, 229), // FormButtonBack2Track - Color.FromArgb(166, 172, 179), // FormButtonBorderPressed - Color.FromArgb(223, 228, 235), // FormButtonBack1Pressed - Color.FromArgb(188, 193, 200), // FormButtonBack2Pressed - Color.Black, // TextButtonFormNormal - Color.Black, // TextButtonFormTracking - Color.Black, // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.Blue, // LinkNotVisitedOverridePanel - Color.Purple, // LinkVisitedOverridePanel - Color.Red, // LinkPressedOverridePanel - Color.FromArgb( 59, 59, 59), // TextLabelPanel - Color.FromArgb( 59, 59, 59), // RibbonTabTextNormal - Color.FromArgb( 76, 83, 92), // RibbonTabTextChecked - Color.FromArgb(182, 186, 191), // RibbonTabSelected1 - Color.White, // RibbonTabSelected2 - Color.White, // RibbonTabSelected3 - Color.White, // RibbonTabSelected4 - Color.White, // RibbonTabSelected5 - Color.FromArgb(177, 181, 186), // RibbonTabTracking1 - Color.FromArgb(248, 249, 249), // RibbonTabTracking2 - Color.FromArgb(182, 186, 191), // RibbonTabHighlight1 - Color.White, // RibbonTabHighlight2 - Color.White, // RibbonTabHighlight3 - Color.White, // RibbonTabHighlight4 - Color.White, // RibbonTabHighlight5 - Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor - Color.FromArgb(182, 186, 191), // RibbonGroupsArea1 - Color.FromArgb(135, 140, 146), // RibbonGroupsArea2 - Color.FromArgb(255, 255, 255), // RibbonGroupsArea3 - Color.FromArgb(255, 255, 255), // RibbonGroupsArea4 - Color.FromArgb(229, 233, 238), // RibbonGroupsArea5 - Color.FromArgb(255, 255, 255), // RibbonGroupBorder1 - Color.FromArgb(253, 253, 253), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 - Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark - Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark - Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 - Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 - Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 - Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder1 - Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 - Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 - Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 - Color.FromArgb( 59, 59, 59), // RibbonGroupCollapsedText - Color.FromArgb(179, 185, 195), // AlternatePressedBack1 - Color.FromArgb(216, 224, 224), // AlternatePressedBack2 - Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 - Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 - Color.FromArgb(157, 166, 174), // FormButtonBack1Checked - Color.FromArgb(222, 230, 242), // FormButtonBack2Checked - Color.FromArgb(149, 154, 160), // FormButtonBorderCheck - Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack - Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack - Color.FromArgb(180, 180, 180), // RibbonQATMini1 - Color.FromArgb(210, 215, 221), // RibbonQATMini2 - Color.FromArgb(195, 200, 206), // RibbonQATMini3 - Color.FromArgb(10, Color.White), // RibbonQATMini4 - Color.FromArgb(32, Color.White), // RibbonQATMini5 - Color.FromArgb(200, 200, 200), // RibbonQATMini1I - Color.FromArgb(233, 234, 238), // RibbonQATMini2I - Color.FromArgb(223, 224, 228), // RibbonQATMini3I - Color.FromArgb(10, Color.White), // RibbonQATMini4I - Color.FromArgb(32, Color.White), // RibbonQATMini5I - Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 - Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 - Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 - Color.FromArgb( 90, 90, 90), // RibbonQATButtonDark - Color.FromArgb(210, 212, 215), // RibbonQATButtonLight - Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 - Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 - Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark - Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 - Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor - Color.FromArgb(248, 252, 255), // GridListNormal1 - Color.FromArgb(223, 227, 232), // GridListNormal2 - Color.FromArgb(203, 207, 212), // GridListPressed1 - Color.White, // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(238, 241, 247), // GridSheetColNormal1 - Color.FromArgb(218, 222, 227), // GridSheetColNormal2 - Color.FromArgb(255, 223, 107), // GridSheetColPressed1 - Color.FromArgb(255, 252, 230), // GridSheetColPressed2 - Color.FromArgb(255, 211, 89), // GridSheetColSelected1 - Color.FromArgb(255, 239, 113), // GridSheetColSelected2 - Color.FromArgb(223, 227, 232), // GridSheetRowNormal - Color.FromArgb(255, 223, 107), // GridSheetRowPressed - Color.FromArgb(245, 210, 87), // GridSheetRowSelected - Color.FromArgb(218, 220, 221), // GridDataCellBorder - Color.FromArgb(183, 219, 255), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(168, 168, 168), // InputControlTextDisabled - Color.FromArgb(212, 214, 217), // InputControlBorderNormal - Color.FromArgb(187, 187, 187), // InputControlBorderDisabled - Color.FromArgb(255, 255, 255), // InputControlBackNormal - Color.FromArgb(240, 240, 240), // InputControlBackDisabled - Color.FromArgb(247, 247, 247), // InputControlBackInactive - Color.Black, // InputDropDownNormal1 - Color.Transparent, // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack - Color.FromArgb( 59, 59, 59), // ContextMenuHeadingText - Color.White, // ContextMenuImageColumn - Color.FromArgb(224, 227, 231), // AppButtonBack1 - Color.FromArgb(224, 227, 231), // AppButtonBack2 - Color.FromArgb(135, 140, 146), // AppButtonBorder - Color.FromArgb(224, 227, 231), // AppButtonOuter1 - Color.FromArgb(224, 227, 231), // AppButtonOuter2 - Color.FromArgb(224, 227, 231), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 - Color.FromArgb(135, 140, 146), // AppButtonInner2 - Color.White, // AppButtonMenuDocs - Color.Black, // AppButtonMenuDocsText - Color.FromArgb(250, 253, 255), // SeparatorHighInternalBorder1 - Color.FromArgb(227, 232, 237), // SeparatorHighInternalBorder2 - Color.FromArgb(198, 202, 205), // RibbonGalleryBorder - Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal - Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking - Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 - Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 Color.FromArgb(177, 181, 186), // RibbonTabTracking1 - Color.FromArgb(229, 231, 235), // RibbonTabTracking3 - Color.FromArgb(231, 233, 235), // RibbonTabTracking4 - Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 - Color.FromArgb(246, 247, 248), // RibbonGroupBorder4 - Color.FromArgb(249, 250, 250), // RibbonGroupBorder5 - Color.FromArgb(102, 109, 124), // RibbonGroupTitleText - Color.FromArgb(151, 156, 163), // RibbonDropArrowLight - Color.FromArgb( 39, 49, 60), // RibbonDropArrowDark - Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 - Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 - Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder - Color.Black, // ButtonNavigatorText - Color.FromArgb(207, 213, 220), // ButtonNavigatorTrack1 - Color.FromArgb(232, 234, 238), // ButtonNavigatorTrack2 - Color.FromArgb(191, 196, 202), // ButtonNavigatorPressed1 - Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 - Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 - Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 - Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + + #endregion + + #region Color Arrays + + private static readonly Color[] _trackBarColors = + [ + Color.FromArgb(170, 170, 170), // Tick marks + Color.FromArgb(166, 170, 175), // Top track + Color.FromArgb(226, 220, 235), // Bottom track + Color.FromArgb(206, 200, 215), // Fill track + Color.FromArgb(64, Color.White), // Outside position + Color.FromArgb(80, 81, 82) // Border (normal) position + ]; + private static readonly Color[] _schemeOfficeColors = + [ + Color.FromArgb( 59, 59, 59), // TextLabelControl + Color.FromArgb( 59, 59, 59), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(187, 191, 196), // ButtonNormalBorder1 + Color.FromArgb(158, 166, 172), // ButtonNormalDefaultBorder + Color.FromArgb(247, 250, 252), // ButtonNormalBack1 + Color.FromArgb(231, 234, 238), // ButtonNormalBack2 + Color.FromArgb(235, 235, 235), // ButtonNormalDefaultBack1 + Color.FromArgb(195, 195, 195), // ButtonNormalDefaultBack2 + Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack1 + Color.FromArgb(207, 212, 218), // ButtonNormalNavigatorBack2 + Color.FromArgb(227, 230, 232), // PanelClient + Color.FromArgb(207, 212, 218), // PanelAlternative + Color.FromArgb(161, 169, 179), // ControlBorder + Color.FromArgb(250, 253, 255), // SeparatorHighBorder1 + Color.FromArgb(227, 232, 237), // SeparatorHighBorder2 + Color.FromArgb(233, 237, 241), // HeaderPrimaryBack1 + Color.FromArgb(207, 212, 218), // HeaderPrimaryBack2 + Color.FromArgb(255, 255, 255), // HeaderSecondaryBack1 + Color.FromArgb(234, 237, 241), // HeaderSecondaryBack2 + Color.FromArgb( 59, 59, 59), // HeaderText + Color.FromArgb( 59, 59, 59), // StatusStripText + Color.FromArgb(236, 199, 87), // ButtonBorder + Color.FromArgb(247, 250, 252), // SeparatorLight + Color.FromArgb(119, 123, 127), // SeparatorDark + Color.FromArgb(255, 255, 255), // GripLight + Color.FromArgb(181, 190, 199), // GripDark + Color.FromArgb(227, 230, 232), // ToolStripBack + Color.FromArgb(230, 234, 238), // StatusStripLight + Color.FromArgb(183, 188, 193), // StatusStripDark + Color.White, // ImageMargin + Color.FromArgb(230, 234, 238), // ToolStripBegin + Color.FromArgb(183, 188, 193), // ToolStripMiddle + Color.FromArgb(183, 188, 193), // ToolStripEnd + Color.FromArgb(147, 154, 163), // OverflowBegin + Color.FromArgb(147, 154, 163), // OverflowMiddle + Color.FromArgb(147, 154, 163), // OverflowEnd + Color.FromArgb(147, 154, 163), // ToolStripBorder + Color.FromArgb(101, 109, 117), // FormBorderActive + Color.FromArgb(134, 139, 145), // FormBorderInactive + Color.FromArgb(228, 230, 232), // FormBorderActiveLight + Color.FromArgb(255, 255, 255), // FormBorderActiveDark + Color.FromArgb(248, 247, 247), // FormBorderInactiveLight + Color.FromArgb(248, 247, 247), // FormBorderInactiveDark + Color.FromArgb(101, 109, 117), // FormBorderHeaderActive + Color.FromArgb(134, 139, 145), // FormBorderHeaderInactive + Color.FromArgb(235, 237, 240), // FormBorderHeaderActive1 + Color.FromArgb(228, 230, 232), // FormBorderHeaderActive2 + Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive1 + Color.FromArgb(248, 247, 247), // FormBorderHeaderInctive2 + Color.FromArgb( 59, 59, 59), // FormHeaderShortActive + Color.FromArgb(138, 138, 138), // FormHeaderShortInactive + Color.FromArgb( 59, 59, 59), // FormHeaderLongActive + Color.FromArgb(138, 138, 138), // FormHeaderLongInactive + Color.FromArgb(166, 172, 179), // FormButtonBorderTrack + Color.FromArgb(255, 255, 255), // FormButtonBack1Track + Color.FromArgb(228, 228, 229), // FormButtonBack2Track + Color.FromArgb(166, 172, 179), // FormButtonBorderPressed + Color.FromArgb(223, 228, 235), // FormButtonBack1Pressed + Color.FromArgb(188, 193, 200), // FormButtonBack2Pressed + Color.Black, // TextButtonFormNormal + Color.Black, // TextButtonFormTracking + Color.Black, // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.Blue, // LinkNotVisitedOverridePanel + Color.Purple, // LinkVisitedOverridePanel + Color.Red, // LinkPressedOverridePanel + Color.FromArgb( 59, 59, 59), // TextLabelPanel + Color.FromArgb( 59, 59, 59), // RibbonTabTextNormal + Color.FromArgb( 76, 83, 92), // RibbonTabTextChecked + Color.FromArgb(182, 186, 191), // RibbonTabSelected1 + Color.White, // RibbonTabSelected2 + Color.White, // RibbonTabSelected3 + Color.White, // RibbonTabSelected4 + Color.White, // RibbonTabSelected5 + Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(248, 249, 249), // RibbonTabTracking2 + Color.FromArgb(182, 186, 191), // RibbonTabHighlight1 + Color.White, // RibbonTabHighlight2 + Color.White, // RibbonTabHighlight3 + Color.White, // RibbonTabHighlight4 + Color.White, // RibbonTabHighlight5 + Color.FromArgb(182, 186, 191), // RibbonTabSeparatorColor + Color.FromArgb(182, 186, 191), // RibbonGroupsArea1 + Color.FromArgb(135, 140, 146), // RibbonGroupsArea2 + Color.FromArgb(255, 255, 255), // RibbonGroupsArea3 + Color.FromArgb(255, 255, 255), // RibbonGroupsArea4 + Color.FromArgb(229, 233, 238), // RibbonGroupsArea5 + Color.FromArgb(255, 255, 255), // RibbonGroupBorder1 + Color.FromArgb(253, 253, 253), // RibbonGroupBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 + Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark + Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark + Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 + Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 + Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 + Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder1 + Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 + Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 + Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 + Color.FromArgb( 59, 59, 59), // RibbonGroupCollapsedText + Color.FromArgb(179, 185, 195), // AlternatePressedBack1 + Color.FromArgb(216, 224, 224), // AlternatePressedBack2 + Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(157, 166, 174), // FormButtonBack1Checked + Color.FromArgb(222, 230, 242), // FormButtonBack2Checked + Color.FromArgb(149, 154, 160), // FormButtonBorderCheck + Color.FromArgb(147, 156, 164), // FormButtonBack1CheckTrack + Color.FromArgb(237, 245, 250), // FormButtonBack2CheckTrack + Color.FromArgb(180, 180, 180), // RibbonQATMini1 + Color.FromArgb(210, 215, 221), // RibbonQATMini2 + Color.FromArgb(195, 200, 206), // RibbonQATMini3 + Color.FromArgb(10, Color.White), // RibbonQATMini4 + Color.FromArgb(32, Color.White), // RibbonQATMini5 + Color.FromArgb(200, 200, 200), // RibbonQATMini1I + Color.FromArgb(233, 234, 238), // RibbonQATMini2I + Color.FromArgb(223, 224, 228), // RibbonQATMini3I + Color.FromArgb(10, Color.White), // RibbonQATMini4I + Color.FromArgb(32, Color.White), // RibbonQATMini5I + Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 + Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 + Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 + Color.FromArgb( 90, 90, 90), // RibbonQATButtonDark + Color.FromArgb(210, 212, 215), // RibbonQATButtonLight + Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 + Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 + Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark + Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 + Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor + Color.FromArgb(248, 252, 255), // GridListNormal1 + Color.FromArgb(223, 227, 232), // GridListNormal2 + Color.FromArgb(203, 207, 212), // GridListPressed1 + Color.White, // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(238, 241, 247), // GridSheetColNormal1 + Color.FromArgb(218, 222, 227), // GridSheetColNormal2 + Color.FromArgb(255, 223, 107), // GridSheetColPressed1 + Color.FromArgb(255, 252, 230), // GridSheetColPressed2 + Color.FromArgb(255, 211, 89), // GridSheetColSelected1 + Color.FromArgb(255, 239, 113), // GridSheetColSelected2 + Color.FromArgb(223, 227, 232), // GridSheetRowNormal + Color.FromArgb(255, 223, 107), // GridSheetRowPressed + Color.FromArgb(245, 210, 87), // GridSheetRowSelected + Color.FromArgb(218, 220, 221), // GridDataCellBorder + Color.FromArgb(183, 219, 255), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(168, 168, 168), // InputControlTextDisabled + Color.FromArgb(212, 214, 217), // InputControlBorderNormal + Color.FromArgb(187, 187, 187), // InputControlBorderDisabled + Color.FromArgb(255, 255, 255), // InputControlBackNormal + Color.FromArgb(240, 240, 240), // InputControlBackDisabled + Color.FromArgb(247, 247, 247), // InputControlBackInactive + Color.Black, // InputDropDownNormal1 + Color.Transparent, // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(240, 242, 245), // ContextMenuHeadingBack + Color.FromArgb( 59, 59, 59), // ContextMenuHeadingText + Color.White, // ContextMenuImageColumn + Color.FromArgb(224, 227, 231), // AppButtonBack1 + Color.FromArgb(224, 227, 231), // AppButtonBack2 + Color.FromArgb(135, 140, 146), // AppButtonBorder + Color.FromArgb(224, 227, 231), // AppButtonOuter1 + Color.FromArgb(224, 227, 231), // AppButtonOuter2 + Color.FromArgb(224, 227, 231), // AppButtonOuter3 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 + Color.FromArgb(135, 140, 146), // AppButtonInner2 + Color.White, // AppButtonMenuDocs + Color.Black, // AppButtonMenuDocsText + Color.FromArgb(250, 253, 255), // SeparatorHighInternalBorder1 + Color.FromArgb(227, 232, 237), // SeparatorHighInternalBorder2 + Color.FromArgb(198, 202, 205), // RibbonGalleryBorder + Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal + Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking + Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 + Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(229, 231, 235), // RibbonTabTracking3 + Color.FromArgb(231, 233, 235), // RibbonTabTracking4 + Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 + Color.FromArgb(246, 247, 248), // RibbonGroupBorder4 + Color.FromArgb(249, 250, 250), // RibbonGroupBorder5 + Color.FromArgb(102, 109, 124), // RibbonGroupTitleText + Color.FromArgb(151, 156, 163), // RibbonDropArrowLight + Color.FromArgb( 39, 49, 60), // RibbonDropArrowDark + Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 + Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 + Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder + Color.Black, // ButtonNavigatorText + Color.FromArgb(207, 213, 220), // ButtonNavigatorTrack1 + Color.FromArgb(232, 234, 238), // ButtonNavigatorTrack2 + Color.FromArgb(191, 196, 202), // ButtonNavigatorPressed1 + Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 + Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 + Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 + Color.FromArgb(221, 221, 221) // ToolTipBottom + ]; + + #endregion #endregion #region Identity @@ -295,8 +338,8 @@ static PaletteOffice2010Silver() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -305,7 +348,7 @@ static PaletteOffice2010Silver() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -384,5 +427,40 @@ public PaletteOffice2010Silver() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Bases/PaletteOffice2013Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Bases/PaletteOffice2013Base.cs index ae960745f..4de335b6d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Bases/PaletteOffice2013Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Bases/PaletteOffice2013Base.cs @@ -1,12 +1,12 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion @@ -64,7 +64,7 @@ public abstract class PaletteOffice2013Base : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -83,8 +83,8 @@ public abstract class PaletteOffice2013Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -136,7 +136,7 @@ public abstract class PaletteOffice2013Base : PaletteBase private static readonly Color _contextTabSeparator = Color.White; private static readonly Color _contextTextColor = Color.White; private static readonly Color _todayBorder = Color.FromArgb(187, 85, 3); - private static readonly Color _toolTipBack1 = Color.FromArgb(255, 255, 255); + private static readonly Color _toolTipBack1 = Color.White; private static readonly Color _toolTipBack2 = Color.FromArgb(201, 217, 239); private static readonly Color _toolTipBorder = Color.FromArgb(118, 118, 118); private static readonly Color _toolTipText = Color.FromArgb(76, 76, 76); @@ -161,37 +161,47 @@ public abstract class PaletteOffice2013Base : PaletteBase #region Color Arrays - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(255, 251, 230), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; - private static readonly Color[] _buttonBorderColors = { Color.FromArgb(180, 180, 180), // Button, Disabled, Border + private static readonly Color[] _buttonBorderColors = + [ + Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(237, 201, 88), // Button, Tracking, Border 1 Color.FromArgb(243, 213, 73), // Button, Tracking, Border 2 Color.FromArgb(194, 118, 43), // Button, Pressed, Border 1 Color.FromArgb(194, 158, 71), // Button, Pressed, Border 2 Color.FromArgb(194, 138, 48), // Button, Checked, Border 1 Color.FromArgb(194, 164, 77) // Button, Checked, Border 2 - }; + ]; - private static readonly Color[] _buttonBackColors = { Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 + private static readonly Color[] _buttonBackColors = + [ + Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(248, 225, 135), // Button, Tracking, Back 1 Color.FromArgb(251, 248, 224), // Button, Tracking, Back 2 @@ -201,7 +211,7 @@ public abstract class PaletteOffice2013Base : PaletteBase Color.FromArgb(255, 244, 128), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; /*private static readonly Color[] _appButtonNormal = new Color[] { Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) }; private static readonly Color[] _appButtonTrack = new Color[] { Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) }; @@ -230,12 +240,12 @@ public abstract class PaletteOffice2013Base : PaletteBase #endregion #region Instance Fields - private KryptonColorTable2013? _table; + protected KryptonColorTable2013? Table { get; set; } private readonly Color[] _ribbonColors; private readonly Color[]? _trackBarColors; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; //TODO Dynamically render //public static Color baseUserColor = Color.FromArgb(255, 248, 56); @@ -251,10 +261,10 @@ public abstract class PaletteOffice2013Base : PaletteBase /// Array of images for radio button. /// Array of track bar specific colors. protected PaletteOffice2013Base([DisallowNull] Color[] schemeColors, - [DisallowNull] ImageList checkBoxList, - [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, - Color[] trackBarColors) + [DisallowNull] ImageList checkBoxList, + [DisallowNull] ImageList galleryButtonList, + [DisallowNull] Image?[] radioButtonArray, + Color[]? trackBarColors) { Debug.Assert(schemeColors != null); Debug.Assert(checkBoxList != null); @@ -262,6 +272,8 @@ protected PaletteOffice2013Base([DisallowNull] Color[] schemeColors, Debug.Assert(radioButtonArray != null); // Remember incoming sets of values + ThemeName = nameof(PaletteOffice2013Base); + if (schemeColors != null) { _ribbonColors = schemeColors; @@ -288,15 +300,6 @@ protected PaletteOffice2013Base([DisallowNull] Color[] schemeColors, } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -357,10 +360,43 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, return style switch { - PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonCalendarDay or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridBackgroundList or PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 - or PaletteBackStyle.GridBackgroundCustom2 - or PaletteBackStyle.GridBackgroundCustom3 - or PaletteBackStyle.GridHeaderColumnList or PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 => PaletteGraphicsHint.None, + PaletteBackStyle.TabHighProfile or PaletteBackStyle.TabStandardProfile or PaletteBackStyle.TabLowProfile or + PaletteBackStyle.TabOneNote or PaletteBackStyle.TabDock or PaletteBackStyle.TabDockAutoHidden or + PaletteBackStyle.TabCustom1 or PaletteBackStyle.TabCustom2 or PaletteBackStyle.TabCustom3 or + PaletteBackStyle.PanelClient or PaletteBackStyle.PanelRibbonInactive or PaletteBackStyle.PanelAlternate or + PaletteBackStyle.PanelCustom1 or PaletteBackStyle.PanelCustom2 or PaletteBackStyle.PanelCustom3 or + PaletteBackStyle.SeparatorHighInternalProfile or PaletteBackStyle.SeparatorHighProfile or + PaletteBackStyle.SeparatorLowProfile or PaletteBackStyle.SeparatorCustom1 or PaletteBackStyle.SeparatorCustom2 or + PaletteBackStyle.SeparatorCustom3 or PaletteBackStyle.ControlClient or PaletteBackStyle.ControlAlternate or + PaletteBackStyle.ControlGroupBox or PaletteBackStyle.ControlToolTip or PaletteBackStyle.ControlRibbon or + PaletteBackStyle.ControlRibbonAppMenu or PaletteBackStyle.ControlCustom1 or PaletteBackStyle.ControlCustom2 or + PaletteBackStyle.ControlCustom3 or PaletteBackStyle.ContextMenuOuter or PaletteBackStyle.ContextMenuInner or + PaletteBackStyle.ContextMenuHeading or PaletteBackStyle.ContextMenuSeparator or PaletteBackStyle.ContextMenuItemSplit or + PaletteBackStyle.ContextMenuItemImageColumn or PaletteBackStyle.ContextMenuItemImage or + PaletteBackStyle.ContextMenuItemHighlight or PaletteBackStyle.InputControlStandalone or + PaletteBackStyle.InputControlRibbon or PaletteBackStyle.InputControlCustom1 or + PaletteBackStyle.InputControlCustom2 or PaletteBackStyle.InputControlCustom3 or + PaletteBackStyle.FormMain or PaletteBackStyle.FormCustom1 or PaletteBackStyle.FormCustom2 or + PaletteBackStyle.FormCustom3 or PaletteBackStyle.HeaderPrimary or PaletteBackStyle.HeaderDockInactive or + PaletteBackStyle.HeaderDockActive or PaletteBackStyle.HeaderSecondary or PaletteBackStyle.HeaderForm or + PaletteBackStyle.HeaderCalendar or PaletteBackStyle.HeaderCustom1 or PaletteBackStyle.HeaderCustom2 or + PaletteBackStyle.HeaderCustom3 or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonGallery or + PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or + PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonCalendarDay or + PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonNavigatorStack or + PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini or PaletteBackStyle.ButtonForm or + PaletteBackStyle.ButtonFormClose or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or + PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.GridBackgroundList or + PaletteBackStyle.GridBackgroundSheet or PaletteBackStyle.GridBackgroundCustom1 or PaletteBackStyle.GridBackgroundCustom2 or + PaletteBackStyle.GridBackgroundCustom3 or PaletteBackStyle.GridHeaderColumnList or + PaletteBackStyle.GridHeaderColumnSheet or PaletteBackStyle.GridHeaderColumnCustom1 or + PaletteBackStyle.GridHeaderColumnCustom2 or PaletteBackStyle.GridHeaderColumnCustom3 or + PaletteBackStyle.GridHeaderRowList or PaletteBackStyle.GridHeaderRowSheet or + PaletteBackStyle.GridHeaderRowCustom1 or PaletteBackStyle.GridHeaderRowCustom2 or + PaletteBackStyle.GridHeaderRowCustom3 or PaletteBackStyle.GridDataCellList or + PaletteBackStyle.GridDataCellSheet or PaletteBackStyle.GridDataCellCustom1 or + PaletteBackStyle.GridDataCellCustom2 or PaletteBackStyle.GridDataCellCustom3 + => PaletteGraphicsHint.None, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -376,7 +412,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -431,17 +467,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -468,7 +504,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -476,7 +512,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -583,22 +619,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -624,7 +660,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -638,7 +674,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -653,7 +689,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -707,11 +743,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -720,7 +756,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -728,7 +764,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -835,22 +871,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -872,13 +908,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -892,7 +928,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -946,7 +982,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -956,7 +992,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1200,17 +1236,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1218,21 +1254,21 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] -: _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], + ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] + : _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack2], PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderActive], PaletteBorderStyle.SeparatorLowProfile or PaletteBorderStyle.SeparatorHighInternalProfile or PaletteBorderStyle.SeparatorHighProfile or PaletteBorderStyle.SeparatorCustom1 or PaletteBorderStyle.SeparatorCustom2 or PaletteBorderStyle.SeparatorCustom3 or PaletteBorderStyle.HeaderPrimary or PaletteBorderStyle.HeaderDockInactive or PaletteBorderStyle.HeaderDockActive or PaletteBorderStyle.HeaderSecondary or PaletteBorderStyle.HeaderCustom1 or PaletteBorderStyle.HeaderCustom2 or PaletteBorderStyle.HeaderCustom3 or PaletteBorderStyle.ControlClient or PaletteBorderStyle.ControlAlternate or PaletteBorderStyle.ControlGroupBox or PaletteBorderStyle.ControlCustom1 or PaletteBorderStyle.ControlCustom2 or PaletteBorderStyle.ControlCustom3 or PaletteBorderStyle.GridHeaderColumnList or PaletteBorderStyle.GridHeaderColumnSheet or PaletteBorderStyle.GridHeaderColumnCustom1 or PaletteBorderStyle.GridHeaderColumnCustom2 or PaletteBorderStyle.GridHeaderColumnCustom3 or PaletteBorderStyle.GridHeaderRowList or PaletteBorderStyle.GridHeaderRowSheet or PaletteBorderStyle.GridHeaderRowCustom1 or PaletteBorderStyle.GridHeaderRowCustom2 or PaletteBorderStyle.GridHeaderRowCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.ControlBorder], PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _contextMenuHeadingBorder, PaletteBorderStyle.ContextMenuSeparator or PaletteBorderStyle.ContextMenuItemSplit => state switch @@ -1243,8 +1279,8 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta }, PaletteBorderStyle.ContextMenuItemImage => _contextMenuImageBorderChecked, PaletteBorderStyle.InputControlStandalone or PaletteBorderStyle.InputControlRibbon or PaletteBorderStyle.InputControlCustom1 or PaletteBorderStyle.InputControlCustom2 or PaletteBorderStyle.InputControlCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] -: _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], + ? _ribbonColors[(int)SchemeOfficeColors.InputControlBorderDisabled] + : _ribbonColors[(int)SchemeOfficeColors.InputControlBorderNormal], PaletteBorderStyle.GridDataCellList or PaletteBorderStyle.GridDataCellSheet or PaletteBorderStyle.GridDataCellCustom1 or PaletteBorderStyle.GridDataCellCustom2 or PaletteBorderStyle.GridDataCellCustom3 => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.GridDataCellBorder], PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], @@ -1252,36 +1288,36 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuInner => _contextMenuBack, PaletteBorderStyle.ControlToolTip => state == PaletteState.Disabled ? _disabledBorder : _toolTipBorder, PaletteBorderStyle.FormMain or PaletteBorderStyle.FormCustom1 or PaletteBorderStyle.FormCustom2 or PaletteBorderStyle.FormCustom3 => state == PaletteState.Disabled -? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] -: _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], + ? _ribbonColors[(int)SchemeOfficeColors.FormBorderInactive] + : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty -: _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], + ? GlobalStaticValues.EMPTY_COLOR + : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1289,7 +1325,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1300,7 +1336,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1326,17 +1362,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1344,14 +1380,14 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] @@ -1382,19 +1418,19 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1405,7 +1441,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1413,7 +1449,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1424,7 +1460,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1548,7 +1584,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1653,7 +1689,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1746,12 +1782,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1767,12 +1803,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1788,12 +1824,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1804,7 +1840,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1841,7 +1877,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2017,16 +2053,16 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet PaletteState.LinkNotVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkNotVisitedOverrideControl], PaletteState.LinkVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty // All other override states do nothing + _ => GlobalStaticValues.EMPTY_COLOR // All other override states do nothing }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { PaletteState.LinkNotVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkNotVisitedOverridePanel], PaletteState.LinkVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty // All other override states do nothing + _ => GlobalStaticValues.EMPTY_COLOR // All other override states do nothing }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2105,7 +2141,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2304,7 +2340,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2334,7 +2370,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2506,7 +2542,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2582,7 +2618,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2879,6 +2915,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2904,6 +2941,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2964,6 +3002,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3192,7 +3231,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3222,7 +3261,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3320,7 +3359,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3392,6 +3431,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3403,15 +3443,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3436,12 +3482,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3492,7 +3540,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3507,6 +3555,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3522,11 +3571,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3544,16 +3594,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3600,6 +3652,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3617,6 +3670,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3632,6 +3686,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3653,10 +3708,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3664,10 +3720,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3705,7 +3762,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3718,6 +3775,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3739,16 +3797,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3784,7 +3844,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3797,6 +3857,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3818,16 +3879,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3855,7 +3918,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -3876,6 +3939,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3897,16 +3961,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3952,6 +4018,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3969,9 +4036,9 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt public override Color GetElementColor1(PaletteElement element, PaletteState state) { // We do not provide override values - if (CommonHelper.IsOverrideState(state)) + if (CommonHelper.IsOverrideState(state) || _trackBarColors is null || _trackBarColors.Length == 0) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3983,12 +4050,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColors[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4003,9 +4071,9 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor2(PaletteElement element, PaletteState state) { - if (CommonHelper.IsOverrideState(state)) + if (CommonHelper.IsOverrideState(state) || _trackBarColors is null || _trackBarColors.Length == 0) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4021,11 +4089,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4040,9 +4109,9 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor3(PaletteElement element, PaletteState state) { - if (CommonHelper.IsOverrideState(state)) + if (CommonHelper.IsOverrideState(state) || _trackBarColors is null || _trackBarColors.Length == 0) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4058,11 +4127,12 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat PaletteState.Normal => ControlPaint.Light(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4077,26 +4147,31 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor4(PaletteElement element, PaletteState state) { + if (_trackBarColors is null || _trackBarColors.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (element) { case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4105,11 +4180,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4124,26 +4200,31 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat /// Color value. public override Color GetElementColor5(PaletteElement element, PaletteState state) { + if (_trackBarColors is null || _trackBarColors.Length == 0) + { + return GlobalStaticValues.EMPTY_COLOR; + } + switch (element) { case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4152,11 +4233,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4168,15 +4250,7 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat /// /// Gets access to the color table instance. /// - public override KryptonColorTable ColorTable - { - get - { - _table ??= new KryptonColorTable2013(_ribbonColors, InheritBool.True, this); - - return _table; - } - } + public override KryptonColorTable ColorTable => Table ??= new KryptonColorTable2013(_ribbonColors, InheritBool.True, this); #endregion #region OnUserPreferenceChanged @@ -4188,7 +4262,7 @@ public override KryptonColorTable ColorTable protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { // Remove the current table, so it gets regenerated when next requested - _table = null; + Table = null; // Update fonts to reflect any change in system settings DefineFonts(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013DarkGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013DarkGray.cs index 345d034ff..09e1ebb8d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013DarkGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013DarkGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,6 +19,22 @@ public class PaletteOffice2013DarkGray : PaletteOffice2013Base { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundColor = Color.FromArgb(212, 212, 212); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(51, 51, 51); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(140, 140, 140); + + private static readonly Color _ribbonAppButtonTextColor = SystemColors.Control; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -28,9 +44,9 @@ public class PaletteOffice2013DarkGray : PaletteOffice2013Base #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -56,18 +72,18 @@ public class PaletteOffice2013DarkGray : PaletteOffice2013Base #region Colour Arrays - private static readonly Color[]? _trackBarColors = new Color[] - { + private static readonly Color[]? _trackBarColors = + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; - private static readonly Color[] _schemeOfficeColors = new Color[] - { + private static readonly Color[] _schemeOfficeColors = + [ Color.FromArgb(119, 119, 119), // TextLabelControl Color.FromArgb(255, 255, 255), // TextButtonNormal Color.Black, // TextButtonChecked @@ -275,12 +291,12 @@ public class PaletteOffice2013DarkGray : PaletteOffice2013Base Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -292,7 +308,7 @@ public class PaletteOffice2013DarkGray : PaletteOffice2013Base Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion #endregion @@ -313,8 +329,8 @@ static PaletteOffice2013DarkGray() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -323,7 +339,7 @@ static PaletteOffice2013DarkGray() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -336,6 +352,7 @@ public PaletteOffice2013DarkGray() _radioButtonArray, _trackBarColors) { + ThemeName = nameof(PaletteOffice2013DarkGray); } #endregion @@ -402,5 +419,39 @@ public PaletteOffice2013DarkGray() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013LightGray.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013LightGray.cs index 12e5d8507..c2ac8d68e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013LightGray.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013LightGray.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,6 +19,22 @@ public class PaletteOffice2013LightGray : PaletteOffice2013Base { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundColor = Color.FromArgb(212, 212, 212); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(147, 149, 158); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(195, 198, 209); + + private static readonly Color _ribbonAppButtonTextColor = Color.FromArgb(24, 24, 24); + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -28,9 +44,9 @@ public class PaletteOffice2013LightGray : PaletteOffice2013Base #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010SilverCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010SilverCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010SilverCloseActive; @@ -56,18 +72,18 @@ public class PaletteOffice2013LightGray : PaletteOffice2013Base #region Colour Arrays - private static readonly Color[]? _trackBarColors = new Color[] - { + private static readonly Color[]? _trackBarColors = + [ Color.FromArgb(170, 170, 170), // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; - private static readonly Color[] _schemeOfficeColors = new Color[] - { + private static readonly Color[] _schemeOfficeColors = + [ Color.FromArgb(119, 119, 119), // TextLabelControl Color.FromArgb(255, 255, 255), // TextButtonNormal Color.Black, // TextButtonChecked @@ -275,12 +291,12 @@ public class PaletteOffice2013LightGray : PaletteOffice2013Base Color.FromArgb(240, 241, 242), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - Color.Empty, // RibbonDropArrowLight - Color.Empty, // RibbonDropArrowDark + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowLight + GlobalStaticValues.EMPTY_COLOR, // RibbonDropArrowDark Color.FromArgb(237, 242, 248), // HeaderDockInactiveBack1 Color.FromArgb(207, 213, 220), // HeaderDockInactiveBack2 Color.FromArgb(161, 169, 179), // ButtonNavigatorBorder @@ -292,7 +308,7 @@ public class PaletteOffice2013LightGray : PaletteOffice2013Base Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + ]; #endregion #endregion @@ -313,8 +329,8 @@ static PaletteOffice2013LightGray() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -323,7 +339,7 @@ static PaletteOffice2013LightGray() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -336,6 +352,7 @@ public PaletteOffice2013LightGray() _radioButtonArray, _trackBarColors) { + ThemeName = nameof(PaletteOffice2013LightGray); } #endregion @@ -402,5 +419,39 @@ public PaletteOffice2013LightGray() _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } - } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013White.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013White.cs index 283206a6c..1b45840d9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013White.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Office 2013/Official Themes/PaletteOffice2013White.cs @@ -1,12 +1,12 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion @@ -19,6 +19,22 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundColor = Color.White; + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + private static readonly Color _ribbonAppButtonLightColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + private static readonly Color _ribbonAppButtonTextColor = GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -28,14 +44,14 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase #region Image Array - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; #endregion #region Images - private static readonly Image _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image? _silverDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2013ControlBoxResources.Office2013CloseNormal; private static readonly Image _formCloseDisabled = Office2013ControlBoxResources.Office2013CloseDisabled; private static readonly Image _formCloseActive = Office2013ControlBoxResources.Office2013CloseActive; @@ -59,20 +75,20 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase #endregion - #region Colour Arrays + #region Color Arrays - private static readonly Color[] _trackBarColors = new[] - { + private static readonly Color[] _trackBarColors = + [ Color.Red, // Tick marks Color.FromArgb(166, 170, 175), // Top track Color.FromArgb(226, 220, 235), // Bottom track Color.FromArgb(206, 200, 215), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(80, 81, 82) // Border (normal) position - }; + ]; - private static readonly Color[] _schemeOfficeColors = new[] - { + private static readonly Color[] _schemeOfficeColors = + [ Color.FromArgb(59, 59, 59), // TextLabelControl Color.FromArgb(59, 59, 59), // TextButtonNormal Color.Black, // TextButtonChecked @@ -104,9 +120,9 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase Color.FromArgb(0, 114, 198), // StatusStripLight Color.FromArgb(0, 114, 198), // StatusStripDark Color.White, // ImageMargin - Color.FromArgb(25, 71, 138), // ToolStripBegin - Color.FromArgb(25, 71, 138), // ToolStripMiddle - Color.FromArgb(25, 71, 138), // ToolStripEnd + Color.FromArgb(255, 255, 255), // ToolStripBegin + Color.FromArgb(255, 255, 255), // ToolStripMiddle + Color.FromArgb(255, 255, 255), // ToolStripEnd Color.FromArgb(147, 154, 163), // OverflowBegin Color.FromArgb(147, 154, 163), // OverflowMiddle Color.FromArgb(147, 154, 163), // OverflowEnd @@ -163,33 +179,33 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase Color.White, // RibbonGroupsArea3 -n Color.White, // RibbonGroupsArea4 -n Color.White, // RibbonGroupsArea5 -n - Color.Empty, // RibbonGroupBorder1 -n - Color.Empty, // RibbonGroupBorder2 -n - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder1 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder2 -n + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(148, 149, 152), // RibbonGroupDialogDark Color.FromArgb(180, 182, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 - Color.FromArgb(139, 144, 151), // RibbonMinimizeBarDark - Color.FromArgb(205, 209, 214), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 + Color.FromArgb(207, 212, 218), // RibbonMinimizeBarDark + Color.FromArgb(255, 255, 255), // RibbonMinimizeBarLight + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 Color.FromArgb(242, 244, 247), // RibbonGroupCollapsedBackT2 Color.FromArgb(238, 241, 245), // RibbonGroupCollapsedBackT3 Color.FromArgb(234, 235, 235), // RibbonGroupCollapsedBackT4 @@ -197,9 +213,9 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase Color.FromArgb(208, 212, 217), // RibbonGroupFrameBorder2 Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside1 Color.FromArgb(254, 254, 254), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 - Color.FromArgb(59, 59, 59), // RibbonGroupCollapsedText + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 + Color.FromArgb(59, 59, 59), // RibbonGroupCollapsedText Color.FromArgb(179, 185, 195), // AlternatePressedBack1 Color.FromArgb(216, 224, 224), // AlternatePressedBack2 Color.FromArgb(125, 125, 125), // AlternatePressedBorder1 @@ -213,44 +229,38 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase Color.FromArgb(210, 215, 221), // RibbonQATMini2 Color.FromArgb(195, 200, 206), // RibbonQATMini3 Color.FromArgb(10, Color.White), // RibbonQATMini4 - Color.FromArgb(32, Color.White), // RibbonQATMini5 + Color.FromArgb(32, Color.White), // RibbonQATMini5 Color.FromArgb(200, 200, 200), // RibbonQATMini1I Color.FromArgb(233, 234, 238), // RibbonQATMini2I Color.FromArgb(223, 224, 228), // RibbonQATMini3I Color.FromArgb(10, Color.White), // RibbonQATMini4I - Color.FromArgb(32, Color.White), // RibbonQATMini5I - Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 - Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 - Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 - Color.FromArgb(90, 90, 90), // RibbonQATButtonDark - Color.FromArgb(210, 212, 215), // RibbonQATButtonLight - Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 - Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 - Color.FromArgb(191, 195, - 199), // RibbonGroupSeparatorDark - Color.FromArgb(255, 255, - 255), // RibbonGroupSeparatorLight - Color.FromArgb(231, 234, - 238), // ButtonClusterButtonBack1 - Color.FromArgb(241, 243, - 243), // ButtonClusterButtonBack2 - Color.FromArgb(197, 198, - 199), // ButtonClusterButtonBorder1 - Color.FromArgb(157, 158, - 159), // ButtonClusterButtonBorder2 - Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.White, // GridListNormal2 - Color.FromArgb(203, 207, 212), // GridListPressed1 - Color.White, // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(238, 241, 247), // GridSheetColNormal1 - Color.FromArgb(218, 222, 227), // GridSheetColNormal2 - Color.FromArgb(255, 223, 107), // GridSheetColPressed1 - Color.FromArgb(255, 252, 230), // GridSheetColPressed2 + Color.FromArgb(32, Color.White), // RibbonQATMini5I + Color.FromArgb(223, 227, 234), // RibbonQATFullbar1 + Color.FromArgb(213, 217, 222), // RibbonQATFullbar2 + Color.FromArgb(135, 140, 146), // RibbonQATFullbar3 + Color.FromArgb(90, 90, 90), // RibbonQATButtonDark + Color.FromArgb(210, 212, 215), // RibbonQATButtonLight + Color.FromArgb(233, 237, 241), // RibbonQATOverflow1 + Color.FromArgb(138, 144, 150), // RibbonQATOverflow2 + Color.FromArgb(191, 195, 199), // RibbonGroupSeparatorDark + Color.FromArgb(255, 255, 255), // RibbonGroupSeparatorLight + Color.FromArgb(231, 234, 238), // ButtonClusterButtonBack1 + Color.FromArgb(241, 243, 243), // ButtonClusterButtonBack2 + Color.FromArgb(197, 198, 199), // ButtonClusterButtonBorder1 + Color.FromArgb(157, 158, 159), // ButtonClusterButtonBorder2 + Color.FromArgb(238, 238, 244), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.White, // GridListNormal2 + Color.FromArgb(203, 207, 212), // GridListPressed1 + Color.White, // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(238, 241, 247), // GridSheetColNormal1 + Color.FromArgb(218, 222, 227), // GridSheetColNormal2 + Color.FromArgb(255, 223, 107), // GridSheetColPressed1 + Color.FromArgb(255, 252, 230), // GridSheetColPressed2 Color.FromArgb(255, 211, 89), // GridSheetColSelected1 Color.FromArgb(255, 239, 113), // GridSheetColSelected2 - Color.FromArgb(223, 227, 232), // GridSheetRowNormal + Color.FromArgb(223, 227, 232), // GridSheetRowNormal Color.FromArgb(255, 223, 107), // GridSheetRowPressed Color.FromArgb(245, 210, 87), // GridSheetRowSelected Color.FromArgb(218, 220, 221), // GridDataCellBorder @@ -275,7 +285,7 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase Color.FromArgb(224, 227, 231), // AppButtonOuter1 Color.FromArgb(224, 227, 231), // AppButtonOuter2 Color.FromArgb(224, 227, 231), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(135, 140, 146), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.Black, // AppButtonMenuDocsText @@ -285,7 +295,7 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase Color.FromArgb(255, 255, 255), // RibbonGalleryBackNormal Color.FromArgb(255, 255, 255), // RibbonGalleryBackTracking Color.FromArgb(250, 250, 250), // RibbonGalleryBack1 - Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 Color.FromArgb(177, 181, 186), // RibbonTabTracking1 + Color.FromArgb(228, 231, 235), // RibbonGalleryBack2 // Color.FromArgb(177, 181, 186), // RibbonTabTracking1 Color.FromArgb(229, 231, 235), // RibbonTabTracking3 Color.FromArgb(231, 233, 235), // RibbonTabTracking4 Color.FromArgb(176, 182, 188), // RibbonGroupBorder3 @@ -304,8 +314,8 @@ public class PaletteOffice2013White : PaletteOffice2013WhiteBase Color.FromArgb(225, 226, 230), // ButtonNavigatorPressed2 Color.FromArgb(222, 227, 234), // ButtonNavigatorChecked1 Color.FromArgb(206, 214, 221), // ButtonNavigatorChecked2 - Color.FromArgb(221, 221, 221) // ToolTipBottom - }; + Color.FromArgb(221, 221, 221) // ToolTipBottom + ]; #endregion #endregion @@ -326,8 +336,8 @@ static PaletteOffice2013White() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010SilverN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -336,7 +346,7 @@ static PaletteOffice2013White() Office2010RadioButtonImageResources.RadioButton2010SilverNC, Office2010RadioButtonImageResources.RadioButton2010SilverTC, Office2010RadioButtonImageResources.RadioButton2010SilverPC - }; + ]; } /// @@ -349,6 +359,7 @@ public PaletteOffice2013White() _radioButtonArray, _trackBarColors) { + ThemeName = nameof(PaletteOffice2013White); } #endregion @@ -374,53 +385,86 @@ public PaletteOffice2013White() /// Style of button spec. /// State for which image is required. /// Image value. - public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, - PaletteState state) => style switch - { - PaletteButtonSpecStyle.FormClose => state switch - { - PaletteState.Tracking => _formCloseActive, - PaletteState.Normal => _formCloseNormal, - PaletteState.Pressed => _formClosePressed, - _ => _formCloseDisabled - }, - PaletteButtonSpecStyle.FormMin => state switch - { - PaletteState.Normal => _formMinimiseNormal, - PaletteState.Tracking => _formMinimiseActive, - PaletteState.Pressed => _formMinimisePressed, - _ => _formMinimiseDisabled - }, - PaletteButtonSpecStyle.FormMax => state switch - { - PaletteState.Normal => _formMaximiseNormal, - PaletteState.Tracking => _formMaximiseActive, - PaletteState.Pressed => _formMaximisePressed, - _ => _formMaximiseDisabled - }, - PaletteButtonSpecStyle.FormRestore => state switch - { - PaletteState.Normal => _formRestoreNormal, - PaletteState.Tracking => _formRestoreActive, - PaletteState.Pressed => _formRestorePressed, - _ => _formRestoreDisabled - }, - PaletteButtonSpecStyle.FormHelp => state switch - { - PaletteState.Tracking => _formHelpActive, - PaletteState.Pressed => _formHelpPressed, - PaletteState.Normal => _formHelpNormal, - _ => _formHelpDisabled - }, - _ => base.GetButtonSpecImage(style, state) - }; + public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, PaletteState state) => style switch + { + PaletteButtonSpecStyle.FormClose => state switch + { + PaletteState.Tracking => _formCloseActive, + PaletteState.Normal => _formCloseNormal, + PaletteState.Pressed => _formClosePressed, + _ => _formCloseDisabled + }, + PaletteButtonSpecStyle.FormMin => state switch + { + PaletteState.Normal => _formMinimiseNormal, + PaletteState.Tracking => _formMinimiseActive, + PaletteState.Pressed => _formMinimisePressed, + _ => _formMinimiseDisabled + }, + PaletteButtonSpecStyle.FormMax => state switch + { + PaletteState.Normal => _formMaximiseNormal, + PaletteState.Tracking => _formMaximiseActive, + PaletteState.Pressed => _formMaximisePressed, + _ => _formMaximiseDisabled + }, + PaletteButtonSpecStyle.FormRestore => state switch + { + PaletteState.Normal => _formRestoreNormal, + PaletteState.Tracking => _formRestoreActive, + PaletteState.Pressed => _formRestorePressed, + _ => _formRestoreDisabled + }, + PaletteButtonSpecStyle.FormHelp => state switch + { + PaletteState.Tracking => _formHelpActive, + PaletteState.Pressed => _formHelpPressed, + PaletteState.Normal => _formHelpNormal, + _ => _formHelpDisabled + }, + _ => base.GetButtonSpecImage(style, state) + }; + #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + #endregion } #region Class: PaletteOffice2013WhiteBase /// - /// Gets the single instance of the ### palette. + /// Gets the single instance of the PaletteOffice2013WhiteBase palette. /// public abstract class PaletteOffice2013WhiteBase : PaletteBase { @@ -471,7 +515,7 @@ public abstract class PaletteOffice2013WhiteBase : PaletteBase private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -490,8 +534,8 @@ public abstract class PaletteOffice2013WhiteBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Tool Bar Images @@ -527,7 +571,7 @@ public abstract class PaletteOffice2013WhiteBase : PaletteBase #endregion - #region Colours + #region Colors private static readonly Color _gridTextColor = Color.Black; private static readonly Color _disabledText2 = Color.FromArgb(128, 128, 128); @@ -568,35 +612,35 @@ public abstract class PaletteOffice2013WhiteBase : PaletteBase #region Colour Arrays - private static readonly Color[] _appButtonNormal = new Color[] - { + private static readonly Color[] _appButtonNormal = + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; - private static readonly Color[] _appButtonTrack = new Color[] - { + private static readonly Color[] _appButtonTrack = + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; - private static readonly Color[] _appButtonPressed = new Color[] - { + private static readonly Color[] _appButtonPressed = + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; - private static readonly Color[] _buttonBorderColors = new Color[] - { + private static readonly Color[] _buttonBorderColors = + [ Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(205, 230, 247), // Button, Tracking, Border 1 Color.FromArgb(205, 230, 247), // Button, Tracking, Border 2 @@ -604,10 +648,10 @@ public abstract class PaletteOffice2013WhiteBase : PaletteBase Color.FromArgb(146, 192, 244), // Button, Pressed, Border 2 Color.FromArgb(146, 192, 244), // Button, Checked, Border 1 Color.FromArgb(146, 192, 244) // Button, Checked, Border 2 - }; + ]; - private static readonly Color[] _buttonBackColors = new Color[] - { + private static readonly Color[] _buttonBackColors = + [ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(205, 230, 247), // Button, Tracking, Back 1 @@ -618,18 +662,18 @@ public abstract class PaletteOffice2013WhiteBase : PaletteBase Color.FromArgb(146, 192, 244), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; #endregion #endregion #region Instance Fields - private KryptonColorTable2013? _table; + protected KryptonColorTable2013White? Table { get; set; } private readonly Color[] _ribbonColors; private readonly Color[] _trackBarColors; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; //TODO rendre dynamique //public static Color baseUserColor = Color.FromArgb(255, 248, 56); @@ -645,37 +689,29 @@ public abstract class PaletteOffice2013WhiteBase : PaletteBase /// Array of images for radio button. /// Array of track bar specific colors. protected PaletteOffice2013WhiteBase([DisallowNull] Color[] schemeColors, - [DisallowNull] ImageList checkBoxList, - [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, - Color[] trackBarColors) + [DisallowNull] ImageList checkBoxList, + [DisallowNull] ImageList galleryButtonList, + [DisallowNull] Image?[] radioButtonArray, + Color[] trackBarColors) { - Debug.Assert(schemeColors != null); - Debug.Assert(checkBoxList != null); - Debug.Assert(galleryButtonList != null); - Debug.Assert(radioButtonArray != null); + Debug.Assert(schemeColors is not null); + Debug.Assert(checkBoxList is not null); + Debug.Assert(galleryButtonList is not null); + Debug.Assert(radioButtonArray is not null); // Remember incoming sets of values - _ribbonColors = schemeColors; - _checkBoxList = checkBoxList; - _galleryButtonList = galleryButtonList; - _radioButtonArray = radioButtonArray; - _trackBarColors = trackBarColors; + ThemeName = nameof(PaletteOffice2013WhiteBase); + _ribbonColors = schemeColors ?? throw new ArgumentNullException(nameof(schemeColors)); + _checkBoxList = checkBoxList ?? throw new ArgumentNullException(nameof(CheckedListBox)); + _galleryButtonList = galleryButtonList ?? throw new ArgumentNullException(nameof(galleryButtonList)); + _radioButtonArray = radioButtonArray ?? throw new ArgumentNullException(nameof(radioButtonArray)); + _trackBarColors = trackBarColors ?? throw new ArgumentNullException(nameof(trackBarColors)); // Get the font settings from the system DefineFonts(); } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -755,7 +791,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -810,17 +846,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -847,7 +883,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -855,7 +891,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -962,22 +998,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1003,7 +1039,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1017,7 +1053,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1032,7 +1068,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1086,11 +1122,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1099,7 +1135,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1107,7 +1143,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -1214,22 +1250,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -1251,13 +1287,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2] : _buttonBackColors[7], PaletteState.Tracking => _buttonBackColors[3], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[5], PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -1271,7 +1307,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1325,7 +1361,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -1335,7 +1371,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1579,17 +1615,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1597,14 +1633,14 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled ? _ribbonColors[(int)SchemeOfficeColors.HeaderPrimaryBack1] @@ -1635,32 +1671,32 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { PaletteState.Disabled => style == PaletteBorderStyle.ButtonGallery ? _ribbonColors[(int)SchemeOfficeColors.RibbonGalleryBack2] : _buttonBorderColors[0], PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1668,7 +1704,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1679,7 +1715,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1705,17 +1741,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1723,14 +1759,14 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled ? _ribbonColors[(int)SchemeOfficeColors.FormBorderHeaderInactive] @@ -1761,19 +1797,19 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta : _ribbonColors[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1784,7 +1820,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1792,7 +1828,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1803,7 +1839,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColors[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1927,7 +1963,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -2032,7 +2068,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -2125,12 +2161,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2146,12 +2182,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2167,12 +2203,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -2183,7 +2219,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2220,7 +2256,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2396,16 +2432,16 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet PaletteState.LinkNotVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkNotVisitedOverrideControl], PaletteState.LinkVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty // All other override states do nothing + _ => GlobalStaticValues.EMPTY_COLOR // All other override states do nothing }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { PaletteState.LinkNotVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkNotVisitedOverridePanel], PaletteState.LinkVisitedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColors[(int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty // All other override states do nothing + _ => GlobalStaticValues.EMPTY_COLOR // All other override states do nothing }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2484,7 +2520,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2683,7 +2719,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2713,7 +2749,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2885,7 +2921,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2961,7 +2997,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -3258,6 +3294,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3283,6 +3320,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3343,6 +3381,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3497,8 +3536,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Style of button spec. /// State for which image is required. /// Image value. - public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, - PaletteState state) + public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, PaletteState state) { switch (style) { @@ -3571,7 +3609,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3601,7 +3639,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3699,7 +3737,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3771,6 +3809,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3782,15 +3821,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3815,12 +3860,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } @@ -3871,7 +3918,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3886,6 +3933,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3901,11 +3949,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3923,16 +3972,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3979,6 +4030,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3996,6 +4048,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4011,6 +4064,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4032,10 +4086,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4043,10 +4098,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4084,7 +4140,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4097,6 +4153,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4118,16 +4175,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4163,7 +4222,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4176,6 +4235,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4197,16 +4257,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4234,7 +4296,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -4255,6 +4317,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4276,16 +4339,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4331,6 +4396,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4350,7 +4416,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4362,12 +4428,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColors[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4384,7 +4451,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4400,11 +4467,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4421,7 +4489,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4437,11 +4505,12 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat PaletteState.Normal => ControlPaint.Light(_ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4461,21 +4530,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4484,11 +4553,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4508,21 +4578,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4531,11 +4601,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColors[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4547,15 +4618,7 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat /// /// Gets access to the color table instance. /// - public override KryptonColorTable ColorTable - { - get - { - _table ??= new KryptonColorTable2013(_ribbonColors, InheritBool.True, this); - - return _table; - } - } + public override KryptonColorTable ColorTable => Table ??= new KryptonColorTable2013White(_ribbonColors, InheritBool.True, this); #endregion #region OnUserPreferenceChanged @@ -4567,7 +4630,7 @@ public override KryptonColorTable ColorTable protected override void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { // Remove the current table, so it gets regenerated when next requested - _table = null; + Table = null; // Update fonts to reflect any change in system settings DefineFonts(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalOffice2003.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalOffice2003.cs index cca76634b..c5981c427 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalOffice2003.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalOffice2003.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,17 +18,23 @@ namespace Krypton.Toolkit public class PaletteProfessionalOffice2003 : PaletteOffice2003Base { #region Static Fields - private static readonly Color[] _colorsB = { Color.FromArgb( 89, 135, 214), // Header1Begin + private static readonly Color[] _colorsB = + [ + Color.FromArgb( 89, 135, 214), // Header1Begin Color.FromArgb( 4, 57, 148) // Header1End - }; + ]; - private static readonly Color[] _colorsG = { Color.FromArgb(175, 192, 130), // Header1Begin + private static readonly Color[] _colorsG = + [ + Color.FromArgb(175, 192, 130), // Header1Begin Color.FromArgb( 99, 122, 69) // Header1End - }; + ]; - private static readonly Color[] _colorsS = { Color.FromArgb(168, 167, 191), // Header1Begin + private static readonly Color[] _colorsS = + [ + Color.FromArgb(168, 167, 191), // Header1Begin Color.FromArgb(113, 112, 145) // Header1End - }; + ]; #endregion #region Instance Fields @@ -41,6 +47,7 @@ public class PaletteProfessionalOffice2003 : PaletteOffice2003Base /// public PaletteProfessionalOffice2003() { + ThemeName = nameof(PaletteProfessionalOffice2003); } #endregion @@ -123,7 +130,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteState.Disabled: return SystemColors.Control; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Tracking: return ColorTable.MenuItemSelectedGradientBegin; } @@ -158,7 +165,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteState.Disabled: return SystemColors.Control; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Tracking: return ColorTable.MenuItemSelectedGradientBegin; } @@ -261,6 +268,40 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet return base.GetContentShortTextColor2(style, state); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion } #region Class: PaletteOffice2003Base @@ -351,9 +392,9 @@ public class PaletteOffice2003Base : PaletteBase private static readonly Image _pendantExpandI = ProfessionalPendantImageResources.ProfessionalPendantExpandDisabled; private static readonly Image _pendantMinimizeA = ProfessionalPendantImageResources.ProfessionalPendantMinimizeNormal; private static readonly Image _pendantMinimizeI = ProfessionalPendantImageResources.ProfessionalPendantMinimizeDisabled; - private static readonly Image _contextMenuChecked = GenericProfessionalImageResources.SystemChecked; - private static readonly Image _contextMenuIndeterminate = GenericProfessionalImageResources.SystemIndeterminate; - private static readonly Image _contextMenuSubMenu = GenericProfessionalImageResources.SystemContextMenuSub; + private static readonly Image? _contextMenuChecked = GenericProfessionalImageResources.SystemChecked; + private static readonly Image? _contextMenuIndeterminate = GenericProfessionalImageResources.SystemIndeterminate; + private static readonly Image? _contextMenuSubMenu = GenericProfessionalImageResources.SystemContextMenuSub; private static readonly Image? _treeExpandPlus = TreeItemImageResources.TreeExpandPlus; private static readonly Image? _treeCollapseMinus = TreeItemImageResources.TreeCollapseMinus; @@ -433,9 +474,9 @@ public class PaletteOffice2003Base : PaletteBase #endregion #region Instance Fields - private KryptonProfessionalKCT _table; - private Image _disabledDropDownImage; - private Image _normalDropDownImage; + private KryptonProfessionalKCT? _table; + private Image? _disabledDropDownImage; + private Image? _normalDropDownImage; //private Color _disabledDropDownColor; //private Color _normalDropDownColor; private Color[] _ribbonColors; @@ -461,9 +502,9 @@ public class PaletteOffice2003Base : PaletteBase private Color[] _appButtonNormal; private Color[] _appButtonTrack; private Color[] _appButtonPressed; - private Image _galleryImageUp; - private Image _galleryImageDown; - private Image _galleryImageDropDown; + private Image? _galleryImageUp; + private Image? _galleryImageDown; + private Image? _galleryImageDropDown; #endregion #region Identity @@ -472,6 +513,8 @@ public class PaletteOffice2003Base : PaletteBase /// public PaletteOffice2003Base() { + ThemeName = nameof(PaletteOffice2003Base); + // Get the font settings from the system DefineFonts(); @@ -480,15 +523,6 @@ public PaletteOffice2003Base() } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -567,7 +601,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -684,16 +718,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Control, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Control, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.Pressed or PaletteState.Tracking => style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => ColorTable.ButtonPressedGradientMiddle, _ => SystemColors.Window }, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => style == PaletteBackStyle.TabHighProfile ? ColorTable.ButtonPressedGradientMiddle : SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -702,7 +736,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => SystemColors.Control, PaletteState.Normal => SystemColors.Window, PaletteState.Pressed or PaletteState.Tracking or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ControlToolTip: return _toolTipBack1; @@ -732,7 +766,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate ? ColorTable.SeparatorDark : ColorTable.ButtonPressedGradientBegin, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch @@ -742,7 +776,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.ButtonPressedGradientEnd, PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonInputControl: return state switch @@ -752,18 +786,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.MenuStripGradientEnd, PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuItemHighlight: return state switch { PaletteState.Disabled => SystemColors.Control, - PaletteState.Normal => Color.Empty, + PaletteState.Normal => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => ColorTable.MenuItemSelectedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -778,7 +812,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -896,13 +930,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Control, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : MergeColors(SystemColors.Window, 0.9f, SystemColors.ControlText, 0.1f), + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Control, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : MergeColors(SystemColors.Window, 0.9f, SystemColors.ControlText, 0.1f), PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : MergeColors(SystemColors.Window, 0.95f, SystemColors.ControlText, 0.05f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -911,7 +945,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => MergeColors(SystemColors.Control, 0.8f, SystemColors.ControlDark, 0.2f), PaletteState.Pressed or PaletteState.Tracking => MergeColors(SystemColors.Window, 0.8f, SystemColors.Highlight, 0.2f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -919,7 +953,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => SystemColors.Control, PaletteState.Normal or PaletteState.CheckedNormal => MergeColors(SystemColors.Control, 0.8f, SystemColors.ControlDark, 0.2f), PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.Tracking or PaletteState.CheckedTracking => MergeColors(SystemColors.Window, 0.8f, SystemColors.Highlight, 0.2f), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ControlToolTip: return _toolTipBack2; @@ -949,7 +983,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => ColorTable.ButtonSelectedGradientEnd, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate ? ColorTable.MenuStripGradientBegin : ColorTable.ButtonPressedGradientEnd, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch @@ -959,7 +993,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.ButtonPressedGradientEnd, PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonInputControl: return state switch @@ -969,18 +1003,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.MenuStripGradientBegin, PaletteState.CheckedTracking or PaletteState.CheckedPressed or PaletteState.Tracking => ColorTable.ButtonSelectedGradientEnd, PaletteState.Pressed => ColorTable.ButtonPressedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuItemHighlight: return state switch { PaletteState.Disabled => SystemColors.Control, - PaletteState.Normal => Color.Empty, + PaletteState.Normal => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => ColorTable.MenuItemSelectedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1242,7 +1276,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1351,10 +1385,10 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta case PaletteBorderStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : FadedColor(ColorTable.ButtonSelectedBorder), - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : ColorTable.OverflowButtonGradientEnd, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : FadedColor(ColorTable.ButtonSelectedBorder), + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : ColorTable.OverflowButtonGradientEnd, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDock: return state switch @@ -1363,7 +1397,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.Tracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDockAutoHidden: return state switch @@ -1371,7 +1405,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Disabled => FadedColor(ColorTable.ButtonSelectedBorder), PaletteState.Normal or PaletteState.CheckedNormal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.Tracking or PaletteState.CheckedTracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonStandalone: case PaletteBorderStyle.ButtonGallery: @@ -1400,7 +1434,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedBorder, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate ? ColorTable.SeparatorDark : ColorTable.ButtonPressedBorder, PaletteState.CheckedTracking => ColorTable.ButtonPressedBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonCalendarDay: return state switch @@ -1412,10 +1446,10 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed => ColorTable.ButtonPressedGradientBegin, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1437,7 +1471,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1544,10 +1578,10 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta case PaletteBorderStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : FadedColor(ColorTable.ButtonSelectedBorder), - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : ColorTable.ButtonPressedHighlightBorder, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : FadedColor(ColorTable.ButtonSelectedBorder), + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : ColorTable.ButtonPressedHighlightBorder, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDock: return state switch @@ -1556,7 +1590,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.Tracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDockAutoHidden: return state switch @@ -1564,7 +1598,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Disabled => FadedColor(ColorTable.ButtonSelectedBorder), PaletteState.Normal or PaletteState.CheckedNormal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.Tracking or PaletteState.CheckedTracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonStandalone: case PaletteBorderStyle.ButtonGallery: @@ -1593,7 +1627,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedBorder, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate ? ColorTable.SeparatorDark : ColorTable.ButtonPressedBorder, PaletteState.CheckedTracking => ColorTable.ButtonPressedBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonCalendarDay: return state switch @@ -1605,10 +1639,10 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed => ColorTable.ButtonPressedGradientBegin, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1709,7 +1743,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.MATERIAL_THEME_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_MATERIAL_THEME_CORNER_ROUNDING_VALUE; } return style switch @@ -1811,7 +1845,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1906,12 +1940,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1927,12 +1961,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1948,12 +1982,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1964,7 +1998,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2000,7 +2034,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2020,11 +2054,7 @@ public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle styl return PaletteTextHint.Inherit; } - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; + return PaletteTextHint.ClearTypeGridFit; } /// @@ -2181,7 +2211,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet PaletteState.LinkNotVisitedOverride => Color.Blue, PaletteState.LinkVisitedOverride => Color.Purple, PaletteState.LinkPressedOverride => Color.Red, - _ => Color.Empty // All other override states do nothing + _ => GlobalStaticValues.EMPTY_COLOR // All other override states do nothing }; } @@ -2225,7 +2255,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2392,7 +2422,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2422,7 +2452,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2442,11 +2472,7 @@ public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style return PaletteTextHint.Inherit; } - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; + return PaletteTextHint.ClearTypeGridFit; } /// @@ -2594,7 +2620,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2637,7 +2663,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2903,6 +2929,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2928,6 +2955,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2990,6 +3018,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3013,7 +3042,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Is the check box being hot tracked. /// Is the check box being pressed. /// Appropriate image for drawing; otherwise null. - public override Image? GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) => null; + public override Image? GetCheckBoxImage(bool enabled, CheckState checkState, bool tracking, bool pressed) => null; // null is intentional; Apparently ?!?!? /// /// Gets a check box image appropriate for the provided state. @@ -3023,7 +3052,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// Is the radio button being hot tracked. /// Is the radio button being pressed. /// Appropriate image for drawing; otherwise null. - public override Image? GetRadioButtonImage(bool enabled, bool checkState, bool tracking, bool pressed) => null; + public override Image? GetRadioButtonImage(bool enabled, bool checkState, bool tracking, bool pressed) => null; // null is intentional; Apparently ?!?!? /// /// Gets a drop down button image appropriate for the provided state. @@ -3033,23 +3062,13 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin { if (state != PaletteState.Disabled) { - if (_normalDropDownImage == null) - { - _normalDropDownImage = CreateDropDownImage(SystemColors.ControlText); - //_normalDropDownColor = SystemColors.ControlText; - } - - return _normalDropDownImage; + return _normalDropDownImage ??= CreateDropDownImage(SystemColors.ControlText); + //_normalDropDownColor = SystemColors.ControlText; } else { - if (_disabledDropDownImage == null) - { - _disabledDropDownImage = CreateDropDownImage(SystemColors.ControlDark); - //_disabledDropDownColor = SystemColors.ControlDark; - } - - return _disabledDropDownImage; + return _disabledDropDownImage ??= CreateDropDownImage(SystemColors.ControlDark); + //_disabledDropDownColor = SystemColors.ControlDark; } } @@ -3184,7 +3203,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3209,7 +3228,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => ButtonFont; + public override Font GetRibbonContextTextFont(PaletteState state) => ButtonFont!; /// /// Gets the color for the ribbon context text. @@ -3307,14 +3326,14 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => ButtonFont; + public override Font GetRibbonTextFont(PaletteState state) => ButtonFont!; /// /// Gets the rendering hint for the ribbon font. /// /// Palette value should be applicable to this state. /// PaletteTextHint value. - public override PaletteTextHint GetRibbonTextHint(PaletteState state) => PaletteTextHint.SystemDefault; + public override PaletteTextHint GetRibbonTextHint(PaletteState state) => PaletteTextHint.ClearTypeGridFit; /// /// Gets the color for the extra QAT button dark content color. @@ -3379,6 +3398,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3390,16 +3410,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3424,12 +3449,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3492,12 +3519,13 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3510,6 +3538,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3534,16 +3563,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3591,12 +3622,13 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3609,6 +3641,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3630,20 +3663,22 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3679,10 +3714,10 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3695,6 +3730,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3716,16 +3752,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3761,7 +3799,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3774,6 +3812,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3795,16 +3834,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3835,7 +3876,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5] @@ -3853,6 +3894,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3874,16 +3916,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3929,6 +3973,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3948,7 +3993,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3962,6 +4007,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3978,7 +4024,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3994,11 +4040,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => ColorTable.MenuBorder, PaletteState.Tracking => ColorTable.ButtonSelectedBorder, PaletteState.Pressed => ColorTable.ButtonPressedBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4015,7 +4062,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4031,11 +4078,12 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat PaletteState.Normal or PaletteState.FocusOverride => ControlPaint.Light(ColorTable.MenuStripGradientBegin), PaletteState.Tracking => ControlPaint.Light(ColorTable.ButtonSelectedGradientBegin), PaletteState.Pressed => ControlPaint.Light(ColorTable.ButtonPressedGradientBegin), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4055,21 +4103,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return ColorTable.SeparatorDark; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return SystemColors.Control; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4078,11 +4126,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => ColorTable.MenuStripGradientEnd, PaletteState.Tracking or PaletteState.FocusOverride => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4102,21 +4151,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return ColorTable.SeparatorDark; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return SystemColors.Control; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4125,11 +4174,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => ColorTable.MenuStripGradientBegin, PaletteState.Tracking or PaletteState.FocusOverride => ColorTable.ButtonSelectedGradientEnd, PaletteState.Pressed => ColorTable.ButtonPressedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4160,9 +4210,11 @@ internal virtual KryptonProfessionalKCT GenerateColorTable(bool useSystemColors) }; // Calculate the krypton specific colors - Color[] colors = { kct.OverflowButtonGradientEnd, // Header1Begin + Color[] colors = + [ + kct.OverflowButtonGradientEnd, // Header1Begin kct.OverflowButtonGradientEnd // Header1End - }; + ]; // Create a krypton extension color table return new KryptonProfessionalKCT(colors, true, this); @@ -4228,7 +4280,7 @@ private void DefineRibbonColors() Color groupStart = ColorTable.RaftingContainerGradientBegin; Color groupEnd = ColorTable.MenuBorder; - // Spot standard background colors and then tweak values + // Spot standard background colors and then tweak values, // so it looks good under the standard windows settings. switch (SystemColors.Control.ToArgb()) { @@ -4280,7 +4332,8 @@ private void DefineRibbonColors() Color ribbonQATMini3 = MergeColors(groupStart, 0.90f, groupEnd, 0.10f); // Generate first set of ribbon colors - _ribbonColors = new[] { // Non ribbon colors + _ribbonColors = + [ // Non ribbon colors Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, @@ -4302,7 +4355,7 @@ private void DefineRibbonColors() ribbonTabSelected2, // RibbonTabSelected2 ribbonTabSelected3, // RibbonTabSelected3 ribbonTabSelected4, // RibbonTabSelected4 - Color.Empty, // RibbonTabSelected5 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabSelected5 ribbonTabTracking1, // RibbonTabTracking1 ribbonTabTracking2, // RibbonTabTracking2 Color.FromArgb(196, ColorTable.ButtonSelectedGradientMiddle), // RibbonTabHighlight1 @@ -4350,8 +4403,8 @@ private void DefineRibbonColors() ribbonGroupFrameBorder1, // RibbonGroupFrameBorder2 ribbonGroupFrameInside1, // RibbonGroupFrameInside1 ribbonGroupFrameInside1, // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 SystemColors.ControlText, // RibbonGroupCollapsedText // Non ribbon colors Color.Red, Color.Red, Color.Red, @@ -4420,7 +4473,7 @@ private void DefineRibbonColors() Color.Red, // ButtonNavigatorPressed2 Color.Red, // ButtonNavigatorChecked1 Color.Red // ButtonNavigatorChecked2 - }; + ]; // Generate second set of ribbon colors _disabledText = SystemColors.ControlDark; @@ -4438,8 +4491,8 @@ private void DefineRibbonColors() _toolTipBack2 = SystemColors.Info; _toolTipBorder = SystemColors.WindowFrame; _toolTipText = SystemColors.InfoText; - //_disabledDropDownColor = Color.Empty; - //_normalDropDownColor = Color.Empty; + //_disabledDropDownColor = GlobalStaticValues.EMPTY_COLOR; + //_normalDropDownColor = GlobalStaticValues.EMPTY_COLOR; //_ribbonGroupCollapsedBackContext = new Color[] { Color.FromArgb(48, 235, 235, 235), Color.FromArgb(235, 235, 235) }; //_ribbonGroupCollapsedBackContextTracking = _ribbonGroupCollapsedBackContext; //_ribbonGroupCollapsedBorderContext = new Color[] { Color.FromArgb(160, ribbonGroupBorder1), ribbonGroupBorder1, Color.FromArgb(48, ribbonGroupsArea4), ribbonGroupsArea4 }; @@ -4450,9 +4503,10 @@ private void DefineRibbonColors() Color highlight4 = MergeColors(Color.White, 0.25f, ColorTable.ButtonPressedGradientMiddle, 0.75f); //Color pressed3 = MergeColors(Color.White, 0.50f, ColorTable.CheckBackground, 0.50f); Color pressed4 = MergeColors(Color.White, 0.25f, ColorTable.CheckPressedBackground, 0.75f); - _appButtonNormal = new[] { ColorTable.SeparatorLight, ColorTable.ImageMarginGradientBegin, ColorTable.ImageMarginGradientMiddle, ColorTable.GripLight, ColorTable.ImageMarginGradientBegin }; - _appButtonTrack = new[] { highlight1, highlight2, ColorTable.ButtonSelectedGradientEnd, highlight3, highlight4 }; - _appButtonPressed = new[] { highlight1, pressed4, ColorTable.CheckPressedBackground, highlight2, pressed4 }; + _appButtonNormal = [ColorTable.SeparatorLight, ColorTable.ImageMarginGradientBegin, ColorTable.ImageMarginGradientMiddle, ColorTable.GripLight, ColorTable.ImageMarginGradientBegin + ]; + _appButtonTrack = [highlight1, highlight2, ColorTable.ButtonSelectedGradientEnd, highlight3, highlight4]; + _appButtonPressed = [highlight1, pressed4, ColorTable.CheckPressedBackground, highlight2, pressed4]; } private Image CreateDropDownImage(Color color) @@ -4523,6 +4577,40 @@ private Image CreateGalleryDropDownImage(Color color) return image; } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalSystem.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalSystem.cs index 93fb5b161..639946e3d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalSystem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Professional/PaletteProfessionalSystem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -98,9 +98,9 @@ public class PaletteProfessionalSystem : PaletteBase private static readonly Image _pendantExpandI = ProfessionalPendantImageResources.ProfessionalPendantExpandDisabled; private static readonly Image _pendantMinimizeA = ProfessionalPendantImageResources.ProfessionalPendantMinimizeNormal; private static readonly Image _pendantMinimizeI = ProfessionalPendantImageResources.ProfessionalPendantMinimizeDisabled; - private static readonly Image _contextMenuChecked = GenericProfessionalImageResources.SystemChecked; - private static readonly Image _contextMenuIndeterminate = GenericProfessionalImageResources.SystemIndeterminate; - private static readonly Image _contextMenuSubMenu = GenericProfessionalImageResources.SystemContextMenuSub; + private static readonly Image? _contextMenuChecked = GenericProfessionalImageResources.SystemChecked; + private static readonly Image? _contextMenuIndeterminate = GenericProfessionalImageResources.SystemIndeterminate; + private static readonly Image? _contextMenuSubMenu = GenericProfessionalImageResources.SystemContextMenuSub; private static readonly Image? _treeExpandPlus = TreeItemImageResources.TreeExpandPlus; private static readonly Image? _treeCollapseMinus = TreeItemImageResources.TreeCollapseMinus; @@ -180,9 +180,9 @@ public class PaletteProfessionalSystem : PaletteBase #endregion #region Instance Fields - private KryptonProfessionalKCT _table; - private Image _disabledDropDownImage; - private Image _normalDropDownImage; + private KryptonProfessionalKCT? _table; + private Image? _disabledDropDownImage; + private Image? _normalDropDownImage; //private Color _disabledDropDownColor; //private Color _normalDropDownColor; private Color[] _ribbonColors; @@ -208,9 +208,9 @@ public class PaletteProfessionalSystem : PaletteBase private Color[] _appButtonNormal; private Color[] _appButtonTrack; private Color[] _appButtonPressed; - private Image _galleryImageUp; - private Image _galleryImageDown; - private Image _galleryImageDropDown; + private Image? _galleryImageUp; + private Image? _galleryImageDown; + private Image? _galleryImageDropDown; #endregion #region Identity @@ -219,6 +219,7 @@ public class PaletteProfessionalSystem : PaletteBase /// public PaletteProfessionalSystem() { + ThemeName = nameof(PaletteProfessionalSystem); // Get the font settings from the system DefineFonts(); @@ -227,15 +228,6 @@ public PaletteProfessionalSystem() } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -314,7 +306,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -431,16 +423,16 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Control, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Control, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.Pressed or PaletteState.Tracking => style switch { - PaletteBackStyle.TabLowProfile => Color.Empty, + PaletteBackStyle.TabLowProfile => GlobalStaticValues.EMPTY_COLOR, PaletteBackStyle.TabHighProfile => ColorTable.ButtonPressedGradientMiddle, _ => SystemColors.Window }, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => style == PaletteBackStyle.TabHighProfile ? ColorTable.ButtonPressedGradientMiddle : SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -449,7 +441,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => SystemColors.Control, PaletteState.Normal => SystemColors.Window, PaletteState.Pressed or PaletteState.Tracking or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ControlToolTip: return _toolTipBack1; @@ -479,7 +471,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate ? ColorTable.SeparatorDark : ColorTable.ButtonPressedGradientBegin, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch @@ -489,7 +481,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.ButtonPressedGradientEnd, PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonInputControl: return state switch @@ -499,18 +491,18 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.MenuStripGradientEnd, PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuItemHighlight: return state switch { PaletteState.Disabled => SystemColors.Control, - PaletteState.Normal => Color.Empty, + PaletteState.Normal => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => ColorTable.MenuItemSelectedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -525,7 +517,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -643,13 +635,13 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Control, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : MergeColors(SystemColors.Window, 0.9f, SystemColors.ControlText, 0.1f), + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Control, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : MergeColors(SystemColors.Window, 0.9f, SystemColors.ControlText, 0.1f), PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : MergeColors(SystemColors.Window, 0.95f, SystemColors.ControlText, 0.05f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -658,7 +650,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => MergeColors(SystemColors.Control, 0.8f, SystemColors.ControlDark, 0.2f), PaletteState.Pressed or PaletteState.Tracking => MergeColors(SystemColors.Window, 0.8f, SystemColors.Highlight, 0.2f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -666,7 +658,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => SystemColors.Control, PaletteState.Normal or PaletteState.CheckedNormal => MergeColors(SystemColors.Control, 0.8f, SystemColors.ControlDark, 0.2f), PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.Tracking or PaletteState.CheckedTracking => MergeColors(SystemColors.Window, 0.8f, SystemColors.Highlight, 0.2f), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ControlToolTip: return _toolTipBack2; @@ -696,7 +688,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Tracking => ColorTable.ButtonSelectedGradientEnd, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBackStyle.ButtonAlternate ? ColorTable.MenuStripGradientBegin : ColorTable.ButtonPressedGradientEnd, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch @@ -706,7 +698,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.ButtonPressedGradientEnd, PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonInputControl: return state switch @@ -716,18 +708,18 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedNormal => ColorTable.MenuStripGradientBegin, PaletteState.CheckedTracking or PaletteState.CheckedPressed or PaletteState.Tracking => ColorTable.ButtonSelectedGradientEnd, PaletteState.Pressed => ColorTable.ButtonPressedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuItemHighlight: return state switch { PaletteState.Disabled => SystemColors.Control, - PaletteState.Normal => Color.Empty, + PaletteState.Normal => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => ColorTable.MenuItemSelectedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -989,7 +981,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1098,10 +1090,10 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta case PaletteBorderStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : FadedColor(ColorTable.ButtonSelectedBorder), - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : ColorTable.OverflowButtonGradientEnd, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : FadedColor(ColorTable.ButtonSelectedBorder), + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : ColorTable.OverflowButtonGradientEnd, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDock: return state switch @@ -1110,7 +1102,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.Tracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDockAutoHidden: return state switch @@ -1118,7 +1110,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Disabled => FadedColor(ColorTable.ButtonSelectedBorder), PaletteState.Normal or PaletteState.CheckedNormal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.Tracking or PaletteState.CheckedTracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonStandalone: case PaletteBorderStyle.ButtonGallery: @@ -1147,7 +1139,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedBorder, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate ? ColorTable.SeparatorDark : ColorTable.ButtonPressedBorder, PaletteState.CheckedTracking => ColorTable.ButtonPressedBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonCalendarDay: return state switch @@ -1159,10 +1151,10 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed => ColorTable.ButtonPressedGradientBegin, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1184,7 +1176,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1291,10 +1283,10 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta case PaletteBorderStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : FadedColor(ColorTable.ButtonSelectedBorder), - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : ColorTable.ButtonPressedHighlightBorder, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : FadedColor(ColorTable.ButtonSelectedBorder), + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : ColorTable.ButtonPressedHighlightBorder, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDock: return state switch @@ -1303,7 +1295,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.Tracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => ColorTable.MenuBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.TabDockAutoHidden: return state switch @@ -1311,7 +1303,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Disabled => FadedColor(ColorTable.ButtonSelectedBorder), PaletteState.Normal or PaletteState.CheckedNormal => ColorTable.OverflowButtonGradientEnd, PaletteState.Pressed or PaletteState.CheckedPressed or PaletteState.Tracking or PaletteState.CheckedTracking => MergeColors(ColorTable.OverflowButtonGradientEnd, 0.5f, SystemColors.Highlight, 0.5f), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonStandalone: case PaletteBorderStyle.ButtonGallery: @@ -1340,7 +1332,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedBorder, PaletteState.Pressed or PaletteState.CheckedPressed => style == PaletteBorderStyle.ButtonAlternate ? ColorTable.SeparatorDark : ColorTable.ButtonPressedBorder, PaletteState.CheckedTracking => ColorTable.ButtonPressedBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBorderStyle.ButtonCalendarDay: return state switch @@ -1352,10 +1344,10 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed or PaletteState.CheckedPressed => ColorTable.ButtonPressedGradientBegin, PaletteState.CheckedTracking => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1456,7 +1448,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.MATERIAL_THEME_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_MATERIAL_THEME_CORNER_ROUNDING_VALUE; } return style switch @@ -1558,7 +1550,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1653,12 +1645,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1674,12 +1666,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1695,12 +1687,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1711,7 +1703,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1747,7 +1739,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -1767,11 +1759,7 @@ public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle styl return PaletteTextHint.Inherit; } - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; + return PaletteTextHint.ClearTypeGridFit; } /// @@ -1928,7 +1916,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet PaletteState.LinkNotVisitedOverride => Color.Blue, PaletteState.LinkVisitedOverride => Color.Purple, PaletteState.LinkPressedOverride => Color.Red, - _ => Color.Empty // All other override states do nothing + _ => GlobalStaticValues.EMPTY_COLOR // All other override states do nothing }; } @@ -1972,7 +1960,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2139,7 +2127,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2169,7 +2157,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2189,11 +2177,7 @@ public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style return PaletteTextHint.Inherit; } - return style switch - { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => PaletteTextHint.ClearTypeGridFit, - _ => throw new ArgumentOutOfRangeException(nameof(style)) - }; + return PaletteTextHint.ClearTypeGridFit; } /// @@ -2341,7 +2325,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2384,7 +2368,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2650,6 +2634,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2675,6 +2660,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2737,6 +2723,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2925,7 +2912,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -2950,7 +2937,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => ButtonFont; + public override Font GetRibbonContextTextFont(PaletteState state) => ButtonFont!; /// /// Gets the color for the ribbon context text. @@ -3048,14 +3035,14 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => ButtonFont; + public override Font GetRibbonTextFont(PaletteState state) => ButtonFont!; /// /// Gets the rendering hint for the ribbon font. /// /// Palette value should be applicable to this state. /// PaletteTextHint value. - public override PaletteTextHint GetRibbonTextHint(PaletteState state) => PaletteTextHint.SystemDefault; + public override PaletteTextHint GetRibbonTextHint(PaletteState state) => PaletteTextHint.ClearTypeGridFit; /// /// Gets the color for the extra QAT button dark content color. @@ -3120,6 +3107,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3131,16 +3119,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder3; + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder4; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3165,12 +3158,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3233,12 +3228,13 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3251,6 +3247,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3275,16 +3272,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3332,12 +3331,13 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3350,6 +3350,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3371,20 +3372,22 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3420,10 +3423,10 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3436,6 +3439,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3457,16 +3461,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3502,7 +3508,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3515,6 +3521,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3536,16 +3543,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3576,7 +3585,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5] @@ -3594,6 +3603,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3615,16 +3625,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3670,6 +3682,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3689,7 +3702,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3703,6 +3716,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3719,7 +3733,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3735,11 +3749,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => ColorTable.MenuBorder, PaletteState.Tracking => ColorTable.ButtonSelectedBorder, PaletteState.Pressed => ColorTable.ButtonPressedBorder, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3756,7 +3771,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3772,11 +3787,12 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat PaletteState.Normal or PaletteState.FocusOverride => ControlPaint.Light(ColorTable.MenuStripGradientBegin), PaletteState.Tracking => ControlPaint.Light(ColorTable.ButtonSelectedGradientBegin), PaletteState.Pressed => ControlPaint.Light(ColorTable.ButtonPressedGradientBegin), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3796,21 +3812,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return ColorTable.SeparatorDark; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return SystemColors.Control; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -3819,11 +3835,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => ColorTable.MenuStripGradientEnd, PaletteState.Tracking or PaletteState.FocusOverride => ColorTable.ButtonSelectedGradientBegin, PaletteState.Pressed => ColorTable.ButtonPressedGradientBegin, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3843,21 +3860,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return ColorTable.SeparatorDark; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return SystemColors.Control; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -3866,11 +3883,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => ColorTable.MenuStripGradientBegin, PaletteState.Tracking or PaletteState.FocusOverride => ColorTable.ButtonSelectedGradientEnd, PaletteState.Pressed => ColorTable.ButtonPressedGradientEnd, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3901,9 +3919,11 @@ internal virtual KryptonProfessionalKCT GenerateColorTable(bool useSystemColors) }; // Calculate the krypton specific colors - Color[] colors = { kct.OverflowButtonGradientEnd, // Header1Begin + Color[] colors = + [ + kct.OverflowButtonGradientEnd, // Header1Begin kct.OverflowButtonGradientEnd // Header1End - }; + ]; // Create a krypton extension color table return new KryptonProfessionalKCT(colors, true, this); @@ -4021,7 +4041,8 @@ private void DefineRibbonColors() Color ribbonQATMini3 = MergeColors(groupStart, 0.90f, groupEnd, 0.10f); // Generate first set of ribbon colors - _ribbonColors = new[] { // Non ribbon colors + _ribbonColors = + [ // Non ribbon colors Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, Color.Red, @@ -4161,7 +4182,7 @@ private void DefineRibbonColors() Color.Red, // ButtonNavigatorPressed2 Color.Red, // ButtonNavigatorChecked1 Color.Red // ButtonNavigatorChecked2 - }; + ]; // Generate second set of ribbon colors _disabledText = SystemColors.ControlDark; @@ -4191,15 +4212,16 @@ private void DefineRibbonColors() Color highlight4 = MergeColors(Color.White, 0.25f, ColorTable.ButtonPressedGradientMiddle, 0.75f); //Color pressed3 = MergeColors(Color.White, 0.50f, ColorTable.CheckBackground, 0.50f); Color pressed4 = MergeColors(Color.White, 0.25f, ColorTable.CheckPressedBackground, 0.75f); - _appButtonNormal = new[] { ColorTable.SeparatorLight, ColorTable.ImageMarginGradientBegin, ColorTable.ImageMarginGradientMiddle, ColorTable.GripLight, ColorTable.ImageMarginGradientBegin }; - _appButtonTrack = new[] { highlight1, highlight2, ColorTable.ButtonSelectedGradientEnd, highlight3, highlight4 }; - _appButtonPressed = new[] { highlight1, pressed4, ColorTable.CheckPressedBackground, highlight2, pressed4 }; + _appButtonNormal = [ColorTable.SeparatorLight, ColorTable.ImageMarginGradientBegin, ColorTable.ImageMarginGradientMiddle, ColorTable.GripLight, ColorTable.ImageMarginGradientBegin + ]; + _appButtonTrack = [highlight1, highlight2, ColorTable.ButtonSelectedGradientEnd, highlight3, highlight4]; + _appButtonPressed = [highlight1, pressed4, ColorTable.CheckPressedBackground, highlight2, pressed4]; } - private Image CreateDropDownImage(Color color) + private Image? CreateDropDownImage(Color color) { // Create image that has an alpha channel - Image image = new Bitmap(9, 9, PixelFormat.Format32bppArgb); + Image? image = new Bitmap(9, 9, PixelFormat.Format32bppArgb); // Use a graphics instance for drawing the image using Graphics g = Graphics.FromImage(image); @@ -4264,5 +4286,39 @@ private Image CreateGalleryDropDownImage(Color color) return image; } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_BOTTOM_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TOP_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.DEFAULT_RIBBON_FILE_APP_TAB_TEXT_COLOR; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Base/PaletteSparkleBase.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Base/PaletteSparkleBase.cs index 2a0533cfd..379bcd716 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Base/PaletteSparkleBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Base/PaletteSparkleBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -63,9 +63,9 @@ public class PaletteSparkleBase : PaletteBase #region Images - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton2; - private static readonly Image _disabledDropUp = DropDownArrowImageResources.DisabledDropUpButton; - private static readonly Image _disabledGalleryDrop = GalleryImageResources.DisabledGalleryDropButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton2; + private static readonly Image? _disabledDropUp = DropDownArrowImageResources.DisabledDropUpButton; + private static readonly Image? _disabledGalleryDrop = GalleryImageResources.DisabledGalleryDropButton; private static readonly Image _buttonSpecClose = GenericWhiteImageResources.WhiteCloseButton; private static readonly Image _buttonSpecContext = GenericWhiteImageResources.WhiteContextButton; private static readonly Image _buttonSpecNext = GenericWhiteImageResources.WhiteNextButton; @@ -84,10 +84,10 @@ public class PaletteSparkleBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericWhiteImageResources.WhiteRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericWhiteImageResources.WhitePendantRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericWhiteImageResources.WhitePendantRibbonExpand; - private static readonly Image _sparkleDropDownOutlineButton = GenericSparkleImageResources.SparkleDropDownOutlineButton; - private static readonly Image _sparkleDropDownButton = GenericSparkleImageResources.SparkleDropDownButton; - private static readonly Image _sparkleDropUpButton = GenericSparkleImageResources.SparkleDropUpButton; - private static readonly Image _sparkleGalleryDropButton = GenericSparkleImageResources.SparkleGalleryDropButton; + private static readonly Image? _sparkleDropDownOutlineButton = GenericSparkleImageResources.SparkleDropDownOutlineButton; + private static readonly Image? _sparkleDropDownButton = GenericSparkleImageResources.SparkleDropDownButton; + private static readonly Image? _sparkleDropUpButton = GenericSparkleImageResources.SparkleDropUpButton; + private static readonly Image? _sparkleGalleryDropButton = GenericSparkleImageResources.SparkleGalleryDropButton; private static readonly Image _sparkleCloseA = SparkleControlBoxResources.SparkleButtonCloseNormal; private static readonly Image _sparkleCloseI = SparkleControlBoxResources.SparkleButtonCloseDisabled; private static readonly Image _sparkleMaxA = SparkleControlBoxResources.SparkleButtonMaxNormal; @@ -100,9 +100,9 @@ public class PaletteSparkleBase : PaletteBase private static readonly Image _sparkleHelpHover = Office2010ControlBoxResources.Office2010HelpIconHover; private static readonly Image _sparkleHelpPressed = Office2010ControlBoxResources.Office2010HelpIconPressed; private static readonly Image _sparkleHelpI = Office2010ControlBoxResources.Office2010HelpIconDisabled; - private static readonly Image _contextMenuChecked = GenericSparkleImageResources.SparkleGrayChecked; - private static readonly Image _contextMenuIndeterminate = SparkleRadioButtonImageResources.RadioButtonSparkleGrayIndeterminate; - private static readonly Image _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; + private static readonly Image? _contextMenuChecked = GenericSparkleImageResources.SparkleGrayChecked; + private static readonly Image? _contextMenuIndeterminate = SparkleRadioButtonImageResources.RadioButtonSparkleGrayIndeterminate; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; @@ -142,7 +142,7 @@ public class PaletteSparkleBase : PaletteBase #region Colours - private static readonly Color _disabledText = Color.FromArgb(120, 120, 120); + private static readonly Color _disabledText = Color.FromArgb(160, 160, 160); private static readonly Color _disabledBack = Color.FromArgb(224, 224, 224); private static readonly Color _disabledBack2 = Color.FromArgb(240, 240, 240); private static readonly Color _disabledBorder = Color.FromArgb(212, 212, 212); @@ -159,10 +159,14 @@ public class PaletteSparkleBase : PaletteBase private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); private static readonly Color _contextMenuImageBackChecked = Color.FromArgb(255, 227, 149); private static readonly Color _contextMenuImageBorderChecked = Color.FromArgb(242, 149, 54); - private static readonly Color[] _ribbonGroupCollapsedBackContext = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContext = { Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _trackBarColors = { Color.FromArgb(180, 180, 180), Color.FromArgb(33, 37, 50), Color.FromArgb(126, 131, 142), Color.FromArgb(99, 99, 99), Color.FromArgb(32, Color.White), Color.FromArgb(35, 35, 35) }; + private static readonly Color[] _ribbonGroupCollapsedBackContext = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContext = [Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _trackBarColors = [Color.FromArgb(180, 180, 180), Color.FromArgb(33, 37, 50), Color.FromArgb(126, 131, 142), Color.FromArgb(99, 99, 99), Color.FromArgb(32, Color.White), Color.FromArgb(35, 35, 35) + ]; private static readonly Color _inputControlTextDisabled = Color.FromArgb(120, 120, 120); private static readonly Color _colorDark00 = Color.Black; private static readonly Color _colorWhite119 = Color.FromArgb(119, 119, 119); @@ -190,7 +194,7 @@ public class PaletteSparkleBase : PaletteBase #endregion #region Instance Fields - private KryptonColorTableSparkle _table; + private KryptonColorTableSparkle? _table; private readonly Color[] _ribbonColors; private readonly Color[] _sparkleColors; private readonly Color[] _appButtonNormal; @@ -198,7 +202,7 @@ public class PaletteSparkleBase : PaletteBase private readonly Color[] _appButtonPressed; private readonly Color[] _ribbonGroupCollapsedBorderContextTracking; private readonly ImageList _checkBoxList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -220,9 +224,11 @@ public PaletteSparkleBase(Color[] ribbonColors, Color[] appButtonPressed, Color[] ribbonGroupCollapsedBorderContextTracking, ImageList checkBoxList, - Image[] radioButtonArray) + Image?[] radioButtonArray) { // Save colors for use in the color table + ThemeName = nameof(PaletteSparkleBase); + if (ribbonColors != null) { _ribbonColors = ribbonColors; @@ -262,15 +268,6 @@ public PaletteSparkleBase(Color[] ribbonColors, } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -465,7 +462,7 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, case PaletteBackStyle.GridDataCellCustom3: return PaletteGraphicsHint.None; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -480,7 +477,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -549,7 +546,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal => style == PaletteBackStyle.ButtonNavigatorStack ? _sparkleColors[2] : _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[6], PaletteState.Pressed => _sparkleColors[8], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl @@ -559,29 +556,29 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) ? _sparkleColors[5] : _sparkleColors[12], PaletteState.CheckedPressed => _sparkleColors[14], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _sparkleColors[10], PaletteState.Tracking => _sparkleColors[5], PaletteState.CheckedTracking => _sparkleColors[12], PaletteState.Pressed or PaletteState.CheckedPressed => _sparkleColors[14], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonListItem: case PaletteBackStyle.ButtonCommand: @@ -590,7 +587,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuOuter: case PaletteBackStyle.ContextMenuInner: @@ -679,11 +676,11 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite220, - PaletteState.Pressed or PaletteState.Tracking => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite220, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite220, + PaletteState.Pressed or PaletteState.Tracking => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite220, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => style == PaletteBackStyle.TabHighProfile ? _sparkleColors[29] : _colorWhite220, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -691,14 +688,14 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.Pressed or PaletteState.Tracking or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorWhite220, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ControlRibbon: return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; case PaletteBackStyle.ControlRibbonAppMenu: return _ribbonColors[(int)SchemeOfficeColors.AppButtonBack1]; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -713,7 +710,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -789,29 +786,29 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) ? _sparkleColors[22] : _sparkleColors[13], PaletteState.CheckedPressed => _sparkleColors[11], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _sparkleColors[11], PaletteState.Tracking => _sparkleColors[22], PaletteState.CheckedTracking => _sparkleColors[13], PaletteState.Pressed or PaletteState.CheckedPressed => _sparkleColors[11], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonListItem: case PaletteBackStyle.ButtonCommand: @@ -820,7 +817,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack2, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuInner: return _colorWhite240; @@ -906,11 +903,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite220, - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite238, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite220, + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite238, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorWhite238, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -919,7 +916,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _colorWhite220, PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorWhite238, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -927,7 +924,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _colorWhite220, PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuItemSplit: return state == PaletteState.Disabled ? _colorWhite240 : _colorWhite255; @@ -939,7 +936,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ControlToolTip: return _toolTipBack2; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -993,7 +990,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1234,7 +1231,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch @@ -1251,11 +1248,11 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => _colorDark00, PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand => state switch @@ -1263,7 +1260,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ContextMenuSeparator => _colorWhite224, PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _colorWhite255, @@ -1279,11 +1276,11 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuItemSplit => state == PaletteState.Disabled ? _colorWhite220 : _colorWhite167, PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorDark00, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1308,7 +1305,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch @@ -1325,18 +1322,18 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand => state switch { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ContextMenuSeparator => _colorWhite224, PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _colorWhite255, @@ -1352,11 +1349,11 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuItemSplit => state == PaletteState.Disabled ? _colorWhite220 : _colorWhite167, PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorDark00, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1469,7 +1466,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1656,7 +1653,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1750,12 +1747,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1771,12 +1768,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1792,12 +1789,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1808,7 +1805,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1845,7 +1842,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2024,7 +2021,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2034,9 +2031,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2114,7 +2111,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2144,7 +2141,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorDark00, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _colorWhite255, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.ContextMenuHeading => _colorWhite255, PaletteContentStyle.ButtonCalendarDay => state switch @@ -2311,7 +2308,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2341,7 +2338,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2512,7 +2509,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2542,7 +2539,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorDark00, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _colorWhite255, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteContentStyle.ButtonCalendarDay => state switch { @@ -2588,7 +2585,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2618,7 +2615,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorDark00, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _colorWhite255, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteContentStyle.ButtonCalendarDay => state switch { @@ -2885,6 +2882,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2909,6 +2907,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2971,6 +2970,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3228,7 +3228,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3253,7 +3253,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -3351,7 +3351,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3424,6 +3424,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3439,6 +3440,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3449,15 +3451,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabGlowing; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3484,12 +3492,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3555,6 +3565,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3579,6 +3590,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3595,6 +3607,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3610,6 +3623,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3625,11 +3639,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -3648,16 +3663,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _colorDark00; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3708,6 +3725,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3732,6 +3750,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3748,6 +3767,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3763,6 +3783,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3778,11 +3799,12 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -3801,22 +3823,24 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _sparkleColors[37]; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3857,13 +3881,14 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking or PaletteState.Pressed => _sparkleColors[34], _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; @@ -3876,10 +3901,11 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3891,7 +3917,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3904,6 +3930,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3925,16 +3952,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3971,13 +4000,14 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking or PaletteState.Pressed => _ribbonFrameBack4, _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; @@ -3990,10 +4020,11 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4007,7 +4038,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4020,11 +4051,12 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4041,16 +4073,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4080,7 +4114,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5] @@ -4098,11 +4132,12 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4122,16 +4157,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4172,6 +4209,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4191,7 +4229,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4205,6 +4243,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4221,7 +4260,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4235,11 +4274,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { PaletteState.Disabled => ControlPaint.Light(_colorDark00), PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => _colorDark00, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4256,7 +4296,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4272,11 +4312,12 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat PaletteState.Normal or PaletteState.FocusOverride => ControlPaint.Light(_sparkleColors[5]), PaletteState.Tracking => ControlPaint.Light(_sparkleColors[6]), PaletteState.Pressed => ControlPaint.Light(_sparkleColors[8]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4296,21 +4337,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4319,11 +4360,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _sparkleColors[5], PaletteState.Tracking or PaletteState.FocusOverride => _sparkleColors[6], PaletteState.Pressed => _sparkleColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4341,15 +4383,15 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat switch (element) { case PaletteElement.TrackBarTick: - return CommonHelper.IsOverrideState(state) ? Color.Empty : _trackBarColors[0]; + return CommonHelper.IsOverrideState(state) ? GlobalStaticValues.EMPTY_COLOR : _trackBarColors[0]; case PaletteElement.TrackBarTrack: - return CommonHelper.IsOverrideState(state) ? Color.Empty : _trackBarColors[3]; + return CommonHelper.IsOverrideState(state) ? GlobalStaticValues.EMPTY_COLOR : _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4359,11 +4401,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Tracking => _sparkleColors[7], PaletteState.FocusOverride => _sparkleColors[7], PaletteState.Pressed => _sparkleColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4396,5 +4439,39 @@ protected override void OnUserPreferenceChanged(object sender, UserPreferenceCha base.OnUserPreferenceChanged(sender, e); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueDarkMode.cs index 8894929d4..df3d39a43 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,32 +21,46 @@ public class PaletteSparkleBlueDarkMode : PaletteSparkleBlueDarkModeBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(215, 239, 245), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(215, 239, 245), Color.FromArgb(146, 214, 238), Color.FromArgb(60, 155, 201), Color.FromArgb(93, 201, 248), - Color.FromArgb(25, 168, 238) }; + Color.FromArgb(25, 168, 238) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(196, 227, 235), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(196, 227, 235), Color.FromArgb(149, 198, 228), Color.FromArgb(7, 97, 166), Color.FromArgb(57, 155, 242), - Color.FromArgb(9, 136, 236) }; + Color.FromArgb(9, 136, 236) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 168, 184, 196), + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(192, 207, 220) }; + Color.FromArgb(192, 207, 220) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 Color.FromArgb(86, 94, 118), // 1 _colorDark86 Color.FromArgb(72, 81, 102), // 2 _colorDark72 Color.FromArgb(45, 45, 45), // 3 _colorDark45 @@ -84,9 +98,11 @@ public class PaletteSparkleBlueDarkMode : PaletteSparkleBlueDarkModeBase Color.FromArgb(82, 120, 213), // 35 _ribbonFrameBack3 Color.FromArgb(72, 110, 213), // 36 _contextCheckedTabFill Color.FromArgb(10, 20, 255) // 37 _focusTabFill - }; + ]; - private static readonly Color[] _ribbonColors = { Color.White, // TextLabelControl + private static readonly Color[] _ribbonColors = + [ + Color.White, // TextLabelControl Color.FromArgb( 70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 @@ -293,11 +309,11 @@ public class PaletteSparkleBlueDarkMode : PaletteSparkleBlueDarkModeBase Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion #region Identity @@ -309,8 +325,8 @@ static PaletteSparkleBlueDarkMode() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparkle); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparkleT, @@ -319,7 +335,7 @@ static PaletteSparkleBlueDarkMode() SparkleRadioButtonImageResources.RadioButtonSparkleNC, SparkleRadioButtonImageResources.RadioButtonSparkleTC, SparkleRadioButtonImageResources.RadioButtonSparklePC - }; + ]; } /// @@ -331,8 +347,43 @@ public PaletteSparkleBlueDarkMode() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparkleBlueDarkMode); } #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + #endregion } #endregion @@ -383,9 +434,9 @@ public abstract class PaletteSparkleBlueDarkModeBase : PaletteBase private static readonly Padding _metricPaddingPageButtons = new Padding(1, 3, 1, 3); private static readonly Padding _metricPaddingContextMenuItemHighlight = new Padding(1, 0, 1, 0); - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton2; - private static readonly Image _disabledDropUp = DropDownArrowImageResources.DisabledDropUpButton; - private static readonly Image _disabledGalleryDrop = GalleryImageResources.DisabledGalleryDropButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton2; + private static readonly Image? _disabledDropUp = DropDownArrowImageResources.DisabledDropUpButton; + private static readonly Image? _disabledGalleryDrop = GalleryImageResources.DisabledGalleryDropButton; private static readonly Image _buttonSpecClose = GenericWhiteImageResources.WhiteCloseButton; private static readonly Image _buttonSpecContext = GenericWhiteImageResources.WhiteContextButton; private static readonly Image _buttonSpecNext = GenericWhiteImageResources.WhiteNextButton; @@ -404,10 +455,10 @@ public abstract class PaletteSparkleBlueDarkModeBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericWhiteImageResources.WhiteRestore; private static readonly Image _buttonSpecRibbonMinimize = GenericWhiteImageResources.WhitePendantRibbonMinimize; private static readonly Image _buttonSpecRibbonExpand = GenericWhiteImageResources.WhitePendantRibbonExpand; - private static readonly Image _sparkleDropDownOutlineButton = GenericSparkleImageResources.SparkleDropDownOutlineButton; - private static readonly Image _sparkleDropDownButton = GenericSparkleImageResources.SparkleDropDownButton; - private static readonly Image _sparkleDropUpButton = GenericSparkleImageResources.SparkleDropUpButton; - private static readonly Image _sparkleGalleryDropButton = GenericSparkleImageResources.SparkleGalleryDropButton; + private static readonly Image? _sparkleDropDownOutlineButton = GenericSparkleImageResources.SparkleDropDownOutlineButton; + private static readonly Image? _sparkleDropDownButton = GenericSparkleImageResources.SparkleDropDownButton; + private static readonly Image? _sparkleDropUpButton = GenericSparkleImageResources.SparkleDropUpButton; + private static readonly Image? _sparkleGalleryDropButton = GenericSparkleImageResources.SparkleGalleryDropButton; private static readonly Image _sparkleCloseA = SparkleControlBoxResources.SparkleButtonCloseNormal; private static readonly Image _sparkleCloseI = SparkleControlBoxResources.SparkleButtonCloseDisabled; private static readonly Image _sparkleMaxA = SparkleControlBoxResources.SparkleButtonMaxNormal; @@ -419,9 +470,9 @@ public abstract class PaletteSparkleBlueDarkModeBase : PaletteBase private static readonly Image _sparkleHelpA = Office2010ControlBoxResources.Office2010HelpIconNormal; private static readonly Image _sparkleHelpHover = Office2010ControlBoxResources.Office2010HelpIconHover; private static readonly Image _sparkleHelpI = Office2010ControlBoxResources.Office2010HelpIconDisabled; - private static readonly Image _contextMenuChecked = GenericSparkleImageResources.SparkleGrayChecked; - private static readonly Image _contextMenuIndeterminate = SparkleRadioButtonImageResources.RadioButtonSparkleGrayIndeterminate; - private static readonly Image _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; + private static readonly Image? _contextMenuChecked = GenericSparkleImageResources.SparkleGrayChecked; + private static readonly Image? _contextMenuIndeterminate = SparkleRadioButtonImageResources.RadioButtonSparkleGrayIndeterminate; + private static readonly Image? _contextMenuSubMenu = GenericImageResources.BlackContextMenuSub; private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; @@ -442,10 +493,14 @@ public abstract class PaletteSparkleBlueDarkModeBase : PaletteBase private static readonly Color _contextMenuHeadingBorder = Color.FromArgb(197, 197, 197); private static readonly Color _contextMenuImageBackChecked = Color.FromArgb(255, 227, 149); private static readonly Color _contextMenuImageBorderChecked = Color.FromArgb(242, 149, 54); - private static readonly Color[] _ribbonGroupCollapsedBackContext = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = { Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _ribbonGroupCollapsedBorderContext = { Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) }; - private static readonly Color[] _trackBarColors = { Color.FromArgb(180, 180, 180), Color.FromArgb(33, 37, 50), Color.FromArgb(126, 131, 142), Color.FromArgb(99, 99, 99), Color.FromArgb(32, Color.White), Color.FromArgb(35, 35, 35) }; + private static readonly Color[] _ribbonGroupCollapsedBackContext = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBackContextTracking = [Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _ribbonGroupCollapsedBorderContext = [Color.FromArgb(128, 199, 199, 199), Color.FromArgb(199, 199, 199), Color.FromArgb(48, 255, 255, 255), Color.FromArgb(235, 235, 235) + ]; + private static readonly Color[] _trackBarColors = [Color.FromArgb(180, 180, 180), Color.FromArgb(33, 37, 50), Color.FromArgb(126, 131, 142), Color.FromArgb(99, 99, 99), Color.FromArgb(32, Color.White), Color.FromArgb(35, 35, 35) + ]; private static readonly Color _inputControlTextDisabled = Color.FromArgb(172, 168, 153); private static readonly Color _colorDark00 = Color.Black; private static readonly Color _colorWhite119 = Color.FromArgb(119, 119, 119); @@ -478,7 +533,7 @@ public abstract class PaletteSparkleBlueDarkModeBase : PaletteBase private readonly Color[] _appButtonPressed; private readonly Color[] _ribbonGroupCollapsedBorderContextTracking; private readonly ImageList _checkBoxList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion #region Identity @@ -500,8 +555,9 @@ protected PaletteSparkleBlueDarkModeBase(Color[] ribbonColors, Color[] appButtonPressed, Color[] ribbonGroupCollapsedBorderContextTracking, ImageList checkBoxList, - Image[] radioButtonArray) + Image?[] radioButtonArray) { + ThemeName = nameof(PaletteSparkleBlueDarkModeBase); // Save colors for use in the color table _ribbonColors = ribbonColors; _sparkleColors = sparkleColors; @@ -517,15 +573,6 @@ protected PaletteSparkleBlueDarkModeBase(Color[] ribbonColors, } #endregion - #region AllowFormChrome - /// - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// /// Gets the renderer to use for this palette. @@ -720,7 +767,7 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, case PaletteBackStyle.GridDataCellCustom3: return PaletteGraphicsHint.None; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -735,7 +782,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -804,7 +851,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Normal => style == PaletteBackStyle.ButtonNavigatorStack ? _sparkleColors[2] : _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[6], PaletteState.Pressed => _sparkleColors[8], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl @@ -814,29 +861,29 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) ? _sparkleColors[5] : _sparkleColors[12], PaletteState.CheckedPressed => _sparkleColors[14], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _sparkleColors[10], PaletteState.Tracking => _sparkleColors[5], PaletteState.CheckedTracking => _sparkleColors[12], PaletteState.Pressed or PaletteState.CheckedPressed => _sparkleColors[14], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonListItem: case PaletteBackStyle.ButtonCommand: @@ -845,7 +892,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuOuter: case PaletteBackStyle.ContextMenuInner: @@ -934,11 +981,11 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite220, - PaletteState.Pressed or PaletteState.Tracking => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite220, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite220, + PaletteState.Pressed or PaletteState.Tracking => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite220, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => style == PaletteBackStyle.TabHighProfile ? _sparkleColors[29] : _colorWhite220, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -946,14 +993,14 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.Pressed or PaletteState.Tracking or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorWhite220, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ControlRibbon: return _ribbonColors[(int)SchemeOfficeColors.RibbonTabSelected4]; case PaletteBackStyle.ControlRibbonAppMenu: return _ribbonColors[(int)SchemeOfficeColors.AppButtonBack1]; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -968,7 +1015,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1044,29 +1091,29 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) ? _sparkleColors[22] : _sparkleColors[13], PaletteState.CheckedPressed => _sparkleColors[11], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonCalendarDay: return state switch { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonForm: case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _sparkleColors[11], PaletteState.Tracking => _sparkleColors[22], PaletteState.CheckedTracking => _sparkleColors[13], PaletteState.Pressed or PaletteState.CheckedPressed => _sparkleColors[11], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonListItem: case PaletteBackStyle.ButtonCommand: @@ -1075,7 +1122,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack2, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuInner: return _colorWhite240; @@ -1161,11 +1208,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite220, - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _colorWhite238, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite220, + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _colorWhite238, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorWhite238, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -1174,7 +1221,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _colorWhite220, PaletteState.Tracking or PaletteState.Pressed => _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorWhite238, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -1182,7 +1229,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _colorWhite220, PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColors[(int)SchemeOfficeColors.FormHeaderShortActive], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ContextMenuItemSplit: return state == PaletteState.Disabled ? _colorWhite240 : _colorWhite255; @@ -1194,7 +1241,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ControlToolTip: return _toolTipBack2; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -1248,7 +1295,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.GlassPressedSimple, PaletteState.CheckedNormal => PaletteColorStyle.GlassCheckedSimple, PaletteState.CheckedTracking => PaletteColorStyle.GlassCheckedTrackingSimple, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1489,7 +1536,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch @@ -1506,11 +1553,11 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery => _colorDark00, PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand => state switch @@ -1518,7 +1565,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ContextMenuSeparator => _colorWhite224, PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _colorWhite255, @@ -1534,11 +1581,11 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuItemSplit => state == PaletteState.Disabled ? _colorWhite220 : _colorWhite167, PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorDark00, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1563,7 +1610,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch @@ -1580,18 +1627,18 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta { PaletteState.Disabled => _disabledBack, PaletteState.Normal => _sparkleColors[5], - PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking => _sparkleColors[27], PaletteState.Pressed or PaletteState.CheckedNormal => _sparkleColors[15], PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[12], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand => state switch { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorWhite215, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _sparkleColors[15], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ContextMenuSeparator => _colorWhite224, PaletteBorderStyle.ContextMenuHeading or PaletteBorderStyle.ContextMenuItemImageColumn => _colorWhite255, @@ -1607,11 +1654,11 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteBorderStyle.ContextMenuItemSplit => state == PaletteState.Disabled ? _colorWhite220 : _colorWhite167, PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabDock or PaletteBorderStyle.TabDockAutoHidden or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _colorDark00, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, - PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1], + PaletteBorderStyle.ControlRibbon => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5], PaletteBorderStyle.ControlRibbonAppMenu => state == PaletteState.Disabled ? _disabledBorder : _ribbonColors[(int)SchemeOfficeColors.AppButtonBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) }; @@ -1724,7 +1771,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1828,7 +1875,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1922,12 +1969,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1943,12 +1990,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1964,12 +2011,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1980,7 +2027,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2022,7 +2069,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2201,7 +2248,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2211,9 +2258,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColors[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2291,7 +2338,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2321,7 +2368,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorDark00, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _colorWhite255, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.ContextMenuHeading => _colorWhite255, PaletteContentStyle.ButtonCalendarDay => state switch @@ -2488,7 +2535,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2523,7 +2570,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2694,7 +2741,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2724,7 +2771,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorDark00, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _colorWhite255, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteContentStyle.ButtonCalendarDay => state switch { @@ -2770,7 +2817,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2800,7 +2847,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.Tracking => _colorDark00, PaletteState.Pressed or PaletteState.CheckedNormal or PaletteState.CheckedTracking or PaletteState.CheckedPressed => _colorWhite255, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteContentStyle.ButtonCalendarDay => state switch { @@ -3067,6 +3114,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3091,6 +3139,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3153,6 +3202,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3381,7 +3431,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3406,7 +3456,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the color for the ribbon context text. @@ -3504,7 +3554,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3577,6 +3627,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3592,6 +3643,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3602,15 +3654,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: - return PaletteRibbonColorStyle.RibbonGroupAreaBorder2; + return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: - return PaletteRibbonColorStyle.RibbonTabGlowing; + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: + return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: - return PaletteRibbonColorStyle.RibbonTabContextSelected; + return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3637,12 +3695,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3708,6 +3768,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3732,6 +3793,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3748,6 +3810,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3763,6 +3826,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3778,11 +3842,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -3801,16 +3866,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _colorDark00; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3861,6 +3928,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3885,6 +3953,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3901,6 +3970,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3916,6 +3986,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3931,11 +4002,12 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -3954,22 +4026,24 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS return _sparkleColors[37]; case PaletteState.ContextTracking: case PaletteState.ContextCheckedNormal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonAppMenuDocs: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4010,13 +4084,14 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking or PaletteState.Pressed => _sparkleColors[34], _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside3] }; @@ -4029,10 +4104,11 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT3]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4044,7 +4120,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4057,6 +4133,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4078,16 +4155,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4124,13 +4203,14 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupCollapsedFrameBack: return state switch { - PaletteState.ContextNormal or PaletteState.ContextTracking => Color.Empty, + PaletteState.ContextNormal or PaletteState.ContextTracking => GlobalStaticValues.EMPTY_COLOR, PaletteState.Tracking or PaletteState.Pressed => _ribbonFrameBack4, _ => _ribbonColors[(int)SchemeOfficeColors.RibbonGroupFrameInside4] }; @@ -4143,10 +4223,11 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupCollapsedBackT4]; case PaletteState.ContextNormal: case PaletteState.ContextTracking: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -4160,7 +4241,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -4173,11 +4254,12 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea4]; + return _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea2]; case PaletteRibbonBackStyle.RibbonTab: switch (state) { @@ -4194,16 +4276,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4233,7 +4317,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonQATMinibar: return state == PaletteState.Normal ? _ribbonColors[(int)SchemeOfficeColors.RibbonQATMini5] @@ -4251,11 +4335,12 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea5]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColors[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -4275,16 +4360,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4325,6 +4412,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -4344,7 +4432,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4358,6 +4446,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4374,7 +4463,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4388,11 +4477,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { PaletteState.Disabled => ControlPaint.Light(_colorDark00), PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => _colorDark00, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4409,7 +4499,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4425,11 +4515,12 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat PaletteState.Normal or PaletteState.FocusOverride => ControlPaint.Light(_sparkleColors[5]), PaletteState.Tracking => ControlPaint.Light(_sparkleColors[6]), PaletteState.Pressed => ControlPaint.Light(_sparkleColors[8]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4449,21 +4540,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4472,11 +4563,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _sparkleColors[5], PaletteState.Tracking or PaletteState.FocusOverride => _sparkleColors[6], PaletteState.Pressed => _sparkleColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4494,15 +4586,15 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat switch (element) { case PaletteElement.TrackBarTick: - return CommonHelper.IsOverrideState(state) ? Color.Empty : _trackBarColors[0]; + return CommonHelper.IsOverrideState(state) ? GlobalStaticValues.EMPTY_COLOR : _trackBarColors[0]; case PaletteElement.TrackBarTrack: - return CommonHelper.IsOverrideState(state) ? Color.Empty : _trackBarColors[3]; + return CommonHelper.IsOverrideState(state) ? GlobalStaticValues.EMPTY_COLOR : _trackBarColors[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4512,11 +4604,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Tracking => _sparkleColors[7], PaletteState.FocusOverride => _sparkleColors[7], PaletteState.Pressed => _sparkleColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4553,4 +4646,4 @@ protected override void OnUserPreferenceChanged(object sender, UserPreferenceCha #endregion -} +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueLighMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueLighMode.cs index 31e88b945..6c45db181 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueLighMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleBlueLighMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,32 +19,46 @@ public class PaletteSparkleBlueLightMode : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(215, 239, 245), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(215, 239, 245), Color.FromArgb(146, 214, 238), Color.FromArgb(60, 155, 201), Color.FromArgb(93, 201, 248), - Color.FromArgb(25, 168, 238) }; + Color.FromArgb(25, 168, 238) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(196, 227, 235), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(196, 227, 235), Color.FromArgb(149, 198, 228), Color.FromArgb(7, 97, 166), Color.FromArgb(57, 155, 242), - Color.FromArgb(9, 136, 236) }; + Color.FromArgb(9, 136, 236) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 168, 184, 196), + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 168, 184, 196), Color.FromArgb(168, 184, 196), Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(192, 207, 220) }; + Color.FromArgb(192, 207, 220) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 Color.FromArgb(86, 94, 118), // 1 _colorDark86 Color.FromArgb(72, 81, 102), // 2 _colorDark72 Color.FromArgb(45, 45, 45), // 3 _colorDark45 @@ -82,9 +96,11 @@ public class PaletteSparkleBlueLightMode : PaletteSparkleBase Color.FromArgb(82, 120, 213), // 35 _ribbonFrameBack3 Color.FromArgb(72, 110, 213), // 36 _contextCheckedTabFill Color.FromArgb(10, 20, 255) // 37 _focusTabFill - }; + ]; - private static readonly Color[] _ribbonColors = { Color.FromArgb( 76, 83, 92), // TextLabelControl + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb( 76, 83, 92), // TextLabelControl Color.FromArgb( 70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 @@ -291,11 +307,11 @@ public class PaletteSparkleBlueLightMode : PaletteSparkleBase Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion #region Identity @@ -307,8 +323,8 @@ static PaletteSparkleBlueLightMode() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparkle); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparkleT, @@ -317,7 +333,7 @@ static PaletteSparkleBlueLightMode() SparkleRadioButtonImageResources.RadioButtonSparkleNC, SparkleRadioButtonImageResources.RadioButtonSparkleTC, SparkleRadioButtonImageResources.RadioButtonSparklePC - }; + ]; } /// @@ -329,6 +345,7 @@ public PaletteSparkleBlueLightMode() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparkleBlueLightMode); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeDarkMode.cs index 1cb7245c8..eba85866f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,32 +19,46 @@ public class PaletteSparkleOrangeDarkMode : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(245, 239, 215), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(245, 239, 215), Color.FromArgb(238, 214, 146), Color.FromArgb(201, 155, 60), Color.FromArgb(248, 201, 93), - Color.FromArgb(238, 168, 25) }; + Color.FromArgb(238, 168, 25) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), - Color.FromArgb(236, 136, 9) }; + Color.FromArgb(236, 136, 9) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 196, 184, 168), + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 196, 184, 168), Color.FromArgb(196, 184, 169), Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(220, 207, 192) }; + Color.FromArgb(220, 207, 192) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 Color.FromArgb(86, 94, 118), // 1 _colorDark86 Color.FromArgb(72, 81, 102), // 2 _colorDark72 Color.FromArgb(45, 45, 45), // 3 _colorDark45 @@ -82,9 +96,11 @@ public class PaletteSparkleOrangeDarkMode : PaletteSparkleBase Color.FromArgb(213, 120, 82), // 35 _ribbonFrameBack4 Color.FromArgb(213, 110, 72), // 36 _contextCheckedTabFill Color.FromArgb(255, 20, 10) // 37 _focusTabFill - }; + ]; - private static readonly Color[] _ribbonColors = { Color.FromArgb( 92, 83, 76), // TextLabelControl + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb( 92, 83, 76), // TextLabelControl Color.FromArgb( 70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(133, 135, 137), // ButtonNormalBorder1 @@ -291,11 +307,11 @@ public class PaletteSparkleOrangeDarkMode : PaletteSparkleBase Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion @@ -308,8 +324,8 @@ static PaletteSparkleOrangeDarkMode() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparkleOrange); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparkleOrangeT, @@ -318,7 +334,7 @@ static PaletteSparkleOrangeDarkMode() SparkleRadioButtonImageResources.RadioButtonSparkleOrangeNC, SparkleRadioButtonImageResources.RadioButtonSparkleOrangeTC, SparkleRadioButtonImageResources.RadioButtonSparkleOrangePC - }; + ]; } /// @@ -330,6 +346,7 @@ public PaletteSparkleOrangeDarkMode() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparkleOrangeDarkMode); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeLightMode.cs index a04f9e144..90fa01f35 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparkleOrangeLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,32 +19,46 @@ public class PaletteSparkleOrangeLightMode : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(245, 239, 215), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(245, 239, 215), Color.FromArgb(238, 214, 146), Color.FromArgb(201, 155, 60), Color.FromArgb(248, 201, 93), - Color.FromArgb(238, 168, 25) }; + Color.FromArgb(238, 168, 25) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), - Color.FromArgb(236, 136, 9) }; + Color.FromArgb(236, 136, 9) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 196, 184, 168), + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 196, 184, 168), Color.FromArgb(196, 184, 169), Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(220, 207, 192) }; + Color.FromArgb(220, 207, 192) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 Color.FromArgb(86, 94, 118), // 1 _colorDark86 Color.FromArgb(72, 81, 102), // 2 _colorDark72 Color.FromArgb(45, 45, 45), // 3 _colorDark45 @@ -82,9 +96,11 @@ public class PaletteSparkleOrangeLightMode : PaletteSparkleBase Color.FromArgb(213, 120, 82), // 35 _ribbonFrameBack4 Color.FromArgb(213, 110, 72), // 36 _contextCheckedTabFill Color.FromArgb(255, 20, 10) // 37 _focusTabFill - }; + ]; - private static readonly Color[] _ribbonColors = { Color.FromArgb( 92, 83, 76), // TextLabelControl + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb( 92, 83, 76), // TextLabelControl Color.FromArgb( 70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(133, 135, 137), // ButtonNormalBorder1 @@ -291,11 +307,11 @@ public class PaletteSparkleOrangeLightMode : PaletteSparkleBase Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion @@ -308,8 +324,8 @@ static PaletteSparkleOrangeLightMode() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparkleOrange); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparkleOrangeT, @@ -318,7 +334,7 @@ static PaletteSparkleOrangeLightMode() SparkleRadioButtonImageResources.RadioButtonSparkleOrangeNC, SparkleRadioButtonImageResources.RadioButtonSparkleOrangeTC, SparkleRadioButtonImageResources.RadioButtonSparkleOrangePC - }; + ]; } /// @@ -330,6 +346,7 @@ public PaletteSparkleOrangeLightMode() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparkleOrangeLightMode); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleDarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleDarkMode.cs index 1d1a5138d..78a8ac30d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleDarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleDarkMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,32 +19,46 @@ public class PaletteSparklePurpleDarkMode : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(239, 215, 245), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(239, 215, 245), Color.FromArgb(214, 146, 238), Color.FromArgb(155, 60, 201), Color.FromArgb(201, 93, 248), - Color.FromArgb(168, 25, 238) }; + Color.FromArgb(168, 25, 238) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(227, 196, 235), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(227, 196, 235), Color.FromArgb(198, 149, 228), Color.FromArgb(97, 7, 166), Color.FromArgb(155, 57, 242), - Color.FromArgb(136, 9, 236) }; + Color.FromArgb(136, 9, 236) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 184, 168, 196), + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 184, 168, 196), Color.FromArgb(184, 168, 196), Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(207, 192, 220) }; + Color.FromArgb(207, 192, 220) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 Color.FromArgb(86, 94, 118), // 1 _colorDark86 Color.FromArgb(72, 81, 102), // 2 _colorDark72 Color.FromArgb(45, 45, 45), // 3 _colorDark45 @@ -82,9 +96,11 @@ public class PaletteSparklePurpleDarkMode : PaletteSparkleBase Color.FromArgb(120, 82, 213), // 35 _ribbonFrameBack3 Color.FromArgb(110, 72, 213), // 36 _contextCheckedTabFill Color.FromArgb(20, 10, 255) // 37 _focusTabFill - }; + ]; - private static readonly Color[] _ribbonColors = { Color.FromArgb( 76, 83, 92), // TextLabelControl + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb( 76, 83, 92), // TextLabelControl Color.FromArgb( 70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 @@ -291,11 +307,11 @@ public class PaletteSparklePurpleDarkMode : PaletteSparkleBase Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion #region Identity @@ -307,8 +323,8 @@ static PaletteSparklePurpleDarkMode() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparklePurple); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparklePurpleT, @@ -317,7 +333,7 @@ static PaletteSparklePurpleDarkMode() SparkleRadioButtonImageResources.RadioButtonSparklePurpleNC, SparkleRadioButtonImageResources.RadioButtonSparklePurpleTC, SparkleRadioButtonImageResources.RadioButtonSparklePurplePC - }; + ]; } /// @@ -329,6 +345,7 @@ public PaletteSparklePurpleDarkMode() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparklePurpleDarkMode); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleLightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleLightMode.cs index 747621351..4e7036ed1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleLightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Extra Themes/PaletteSparklePurpleLightMode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,32 +19,46 @@ public class PaletteSparklePurpleLightMode : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(239, 215, 245), + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(239, 215, 245), Color.FromArgb(214, 146, 238), Color.FromArgb(155, 60, 201), Color.FromArgb(201, 93, 248), - Color.FromArgb(168, 25, 238) }; + Color.FromArgb(168, 25, 238) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(227, 196, 235), + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(227, 196, 235), Color.FromArgb(198, 149, 228), Color.FromArgb(97, 7, 166), Color.FromArgb(155, 57, 242), - Color.FromArgb(136, 9, 236) }; + Color.FromArgb(136, 9, 236) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 184, 168, 196), + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 184, 168, 196), Color.FromArgb(184, 168, 196), Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(207, 192, 220) }; + Color.FromArgb(207, 192, 220) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 Color.FromArgb(86, 94, 118), // 1 _colorDark86 Color.FromArgb(72, 81, 102), // 2 _colorDark72 Color.FromArgb(45, 45, 45), // 3 _colorDark45 @@ -82,9 +96,11 @@ public class PaletteSparklePurpleLightMode : PaletteSparkleBase Color.FromArgb(120, 82, 213), // 35 _ribbonFrameBack3 Color.FromArgb(110, 72, 213), // 36 _contextCheckedTabFill Color.FromArgb(20, 10, 255) // 37 _focusTabFill - }; + ]; - private static readonly Color[] _ribbonColors = { Color.FromArgb( 76, 83, 92), // TextLabelControl + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb( 76, 83, 92), // TextLabelControl Color.FromArgb( 70, 70, 70), // TextButtonNormal Color.Black, // TextButtonChecked Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 @@ -291,11 +307,11 @@ public class PaletteSparklePurpleLightMode : PaletteSparkleBase Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion #region Identity @@ -307,8 +323,8 @@ static PaletteSparklePurpleLightMode() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparklePurple); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparklePurpleT, @@ -317,7 +333,7 @@ static PaletteSparklePurpleLightMode() SparkleRadioButtonImageResources.RadioButtonSparklePurpleNC, SparkleRadioButtonImageResources.RadioButtonSparklePurpleTC, SparkleRadioButtonImageResources.RadioButtonSparklePurplePC - }; + ]; } /// @@ -329,6 +345,7 @@ public PaletteSparklePurpleLightMode() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparklePurpleLightMode); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleBlue.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleBlue.cs index 1e759f41b..ec6a1a1da 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleBlue.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleBlue.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -14,289 +14,309 @@ namespace Krypton.Toolkit { #region Class: PaletteSparkleBlue /// - /// Provides a fixed blue variation on the sparkle appearance. - /// - public class PaletteSparkleBlue : PaletteSparkleBase + /// Provides a fixed blue variation on the sparkle appearance. + /// + public class PaletteSparkleBlue : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = new Color[] { Color.FromArgb(243, 245, 248), - Color.FromArgb(214, 220, 231), - Color.FromArgb(188, 198, 211), - Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), + Color.FromArgb(214, 220, 231), + Color.FromArgb(188, 198, 211), + Color.FromArgb(254, 254, 255), + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = new Color[] { Color.FromArgb(215, 239, 245), - Color.FromArgb(146, 214, 238), - Color.FromArgb(60, 155, 201), - Color.FromArgb(93, 201, 248), - Color.FromArgb(25, 168, 238) }; + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(215, 239, 245), + Color.FromArgb(146, 214, 238), + Color.FromArgb(60, 155, 201), + Color.FromArgb(93, 201, 248), + Color.FromArgb(25, 168, 238) + ]; - private static readonly Color[] _appButtonPressed = new Color[] { Color.FromArgb(196, 227, 235), - Color.FromArgb(149, 198, 228), - Color.FromArgb(7, 97, 166), - Color.FromArgb(57, 155, 242), - Color.FromArgb(9, 136, 236) }; + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(196, 227, 235), + Color.FromArgb(149, 198, 228), + Color.FromArgb(7, 97, 166), + Color.FromArgb(57, 155, 242), + Color.FromArgb(9, 136, 236) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = new Color[] { Color.FromArgb(128, 168, 184, 196), - Color.FromArgb(168, 184, 196), - Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(192, 207, 220) }; + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 168, 184, 196), + Color.FromArgb(168, 184, 196), + Color.FromArgb(48, 255, 255, 255), + Color.FromArgb(192, 207, 220) + ]; - private static readonly Color[] _sparkleColors = new Color[] { Color.FromArgb(99, 108, 135), // 0 _colorDark99 - Color.FromArgb(86, 94, 118), // 1 _colorDark86 - Color.FromArgb(72, 81, 102), // 2 _colorDark72 - Color.FromArgb(45, 45, 45), // 3 _colorDark45 - Color.FromArgb(27, 31, 38), // 4 _colorDark27 - Color.FromArgb(20, 21, 23), // 5 _colorDark20 - Color.FromArgb(19, 37, 61), // 6 _buttonTrackBack1 - Color.FromArgb(60, 129, 206), // 7 _buttonTrackBack2 - Color.FromArgb(13, 30, 52), // 8 _buttonPressBack1 - Color.FromArgb(125, 205, 248), // 9 _buttonPressBack2 - Color.FromArgb(28, 66, 160), // 10 _buttonCheckBack1 - Color.FromArgb(87, 198, 239), // 11 _buttonCheckBack2 - Color.FromArgb(14, 65, 204), // 12 _buttonCheckTrackBack1 - Color.FromArgb(112, 212, 255), // 13 _buttonCheckTrackBack2 - Color.FromArgb(27, 65, 160), // 14 _buttonCheckPressBack1 - Color.FromArgb(51, 153, 255), // 15 _colorBlue - Color.FromArgb(29, 89, 131), // 16 _menuItemHeading - Color.FromArgb(164, 225, 236, 244), // 17 _menuItemTrackBack1 - Color.FromArgb(164, 181, 215, 231), // 18 _menuItemTrackBack2 - Color.FromArgb(164, 91, 187, 230), // 19 _menuItemTrackBorder - Color.FromArgb(220, 229, 244), // 20 _menuItemCheckedBack - Color.FromArgb(185, 191, 230), // 21 _menuItemCheckedBorder - Color.FromArgb(57, 66, 102), // 22 _buttonBack2 - Color.FromArgb(57, 175, 250), // 23 _buttonDefaultBack - Color.FromArgb(177, 219, 242), // 24 _gridHeaderTracking1 - Color.FromArgb(180, 218, 242), // 25 _gridHeaderTracking2 - Color.FromArgb(145, 198, 228), // 26 _gridHeaderPressed1 - Color.FromArgb(148, 197, 228), // 27 _gridHeaderPressed2 - Color.FromArgb(190, 190, 190), // 28 _gridCellBorder - Color.FromArgb(79, 180, 239), // 29 _tabCheckedNormal - Color.FromArgb(48, 89, 146), // 30 _ribbonFrameBorder1 - Color.FromArgb(85, 132, 196), // 31 _ribbonFrameBorder1 - Color.FromArgb(209, 220, 235), // 32 _ribbonFrameBack1 - Color.FromArgb(202, 211, 222), // 33 _ribbonFrameBack2 - Color.FromArgb(176, 196, 222), // 34 _ribbonFrameBack3 - Color.FromArgb(82, 120, 213), // 35 _ribbonFrameBack3 - Color.FromArgb(72, 110, 213), // 36 _contextCheckedTabFill - Color.FromArgb(10, 20, 255), // 37 _focusTabFill - }; + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 + Color.FromArgb(86, 94, 118), // 1 _colorDark86 + Color.FromArgb(72, 81, 102), // 2 _colorDark72 + Color.FromArgb(45, 45, 45), // 3 _colorDark45 + Color.FromArgb(27, 31, 38), // 4 _colorDark27 + Color.FromArgb(20, 21, 23), // 5 _colorDark20 + Color.FromArgb(19, 37, 61), // 6 _buttonTrackBack1 + Color.FromArgb(60, 129, 206), // 7 _buttonTrackBack2 + Color.FromArgb(13, 30, 52), // 8 _buttonPressBack1 + Color.FromArgb(125, 205, 248), // 9 _buttonPressBack2 + Color.FromArgb(28, 66, 160), // 10 _buttonCheckBack1 + Color.FromArgb(87, 198, 239), // 11 _buttonCheckBack2 + Color.FromArgb(14, 65, 204), // 12 _buttonCheckTrackBack1 + Color.FromArgb(112, 212, 255), // 13 _buttonCheckTrackBack2 + Color.FromArgb(27, 65, 160), // 14 _buttonCheckPressBack1 + Color.FromArgb(51, 153, 255), // 15 _colorBlue + Color.FromArgb(29, 89, 131), // 16 _menuItemHeading + Color.FromArgb(164, 225, 236, 244), // 17 _menuItemTrackBack1 + Color.FromArgb(164, 181, 215, 231), // 18 _menuItemTrackBack2 + Color.FromArgb(164, 91, 187, 230), // 19 _menuItemTrackBorder + Color.FromArgb(220, 229, 244), // 20 _menuItemCheckedBack + Color.FromArgb(185, 191, 230), // 21 _menuItemCheckedBorder + Color.FromArgb(57, 66, 102), // 22 _buttonBack2 + Color.FromArgb(57, 175, 250), // 23 _buttonDefaultBack + Color.FromArgb(177, 219, 242), // 24 _gridHeaderTracking1 + Color.FromArgb(180, 218, 242), // 25 _gridHeaderTracking2 + Color.FromArgb(145, 198, 228), // 26 _gridHeaderPressed1 + Color.FromArgb(148, 197, 228), // 27 _gridHeaderPressed2 + Color.FromArgb(190, 190, 190), // 28 _gridCellBorder + Color.FromArgb(79, 180, 239), // 29 _tabCheckedNormal + Color.FromArgb(48, 89, 146), // 30 _ribbonFrameBorder1 + Color.FromArgb(85, 132, 196), // 31 _ribbonFrameBorder1 + Color.FromArgb(209, 220, 235), // 32 _ribbonFrameBack1 + Color.FromArgb(202, 211, 222), // 33 _ribbonFrameBack2 + Color.FromArgb(176, 196, 222), // 34 _ribbonFrameBack3 + Color.FromArgb(82, 120, 213), // 35 _ribbonFrameBack3 + Color.FromArgb(72, 110, 213), // 36 _contextCheckedTabFill + Color.FromArgb(10, 20, 255) // 37 _focusTabFill + ]; - private static readonly Color[] _ribbonColors = new Color[] { Color.FromArgb( 76, 83, 92), // TextLabelControl - Color.FromArgb( 70, 70, 70), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 - Color.FromArgb(127, 125, 123), // ButtonNormalBorder2 - Color.FromArgb(203, 213, 223), // ButtonNormalBack1 - Color.FromArgb(255, 255, 255), // ButtonNormalBack2 - Color.FromArgb(187, 192, 198), // ButtonNormalDefaultBack1 - Color.FromArgb(224, 227, 231), // ButtonNormalDefaultBack2 - Color.FromArgb(204, 208, 214), // ButtonNormalNavigatorBack1 - Color.FromArgb(229, 232, 236), // ButtonNormalNavigatorBack2 - Color.FromArgb( 83, 83, 83), // PanelClient - Color.FromArgb( 70, 70, 70), // PanelAlternative - Color.FromArgb( 30, 30, 30), // ControlBorder - Color.FromArgb(167, 167, 167), // SeparatorHighBorder1 - Color.FromArgb(119, 119, 119), // SeparatorHighBorder2 - Color.FromArgb(240, 241, 242), // HeaderPrimaryBack1 - Color.FromArgb(189, 193, 200), // HeaderPrimaryBack2 - Color.FromArgb(221, 224, 227), // HeaderSecondaryBack1 - Color.FromArgb(221, 224, 227), // HeaderSecondaryBack2 - Color.Black, // HeaderText - Color.White, // StatusStripText - Color.FromArgb(155, 163, 167), // ButtonBorder - Color.FromArgb(200, 200, 200), // SeparatorLight - Color.FromArgb(86, 94, 118), // SeparatorDark - Color.FromArgb(190, 190, 190), // GripLight - Color.Black, // GripDark - Color.FromArgb(99, 108, 135), // ToolStripBack - Color.FromArgb(99, 108, 135), // StatusStripLight - Color.Black, // StatusStripDark - Color.FromArgb(240, 240, 240), // ImageMargin - Color.FromArgb(200, 200, 200), // ToolStripBegin - Color.FromArgb(99, 108, 135), // ToolStripMiddle - Color.FromArgb(72, 81, 102), // ToolStripEnd - Color.FromArgb(72, 81, 102), // OverflowBegin - Color.FromArgb(72, 81, 102), // OverflowMiddle - Color.FromArgb( 30, 30, 30), // OverflowEnd - Color.FromArgb( 30, 30, 30), // ToolStripBorder - Color.FromArgb( 47, 47, 47), // FormBorderActive - Color.FromArgb(146, 146, 146), // FormBorderInactive - Color.FromArgb( 77, 77, 77), // FormBorderActiveLight - Color.FromArgb(102, 102, 102), // FormBorderActiveDark - Color.FromArgb(153, 153, 153), // FormBorderInactiveLight - Color.FromArgb(171, 171, 171), // FormBorderInactiveDark - Color.FromArgb( 65, 65, 65), // FormBorderHeaderActive - Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive - Color.FromArgb( 42, 43, 43), // FormBorderHeaderActive1 - Color.FromArgb( 74, 74, 74), // FormBorderHeaderActive2 - Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 - Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 - Color.FromArgb(174, 209, 255), // FormHeaderShortActive - Color.FromArgb(225, 225, 225), // FormHeaderShortInactive - Color.FromArgb(255, 255, 255), // FormHeaderLongActive - Color.FromArgb(225, 225, 225), // FormHeaderLongInactive - Color.FromArgb( 88, 95, 104), // FormButtonBorderTrack - Color.FromArgb( 91, 105, 123), // FormButtonBack1Track - Color.FromArgb(173, 199, 214), // FormButtonBack2Track - Color.FromArgb( 18, 18, 18), // FormButtonBorderPressed - Color.FromArgb( 0, 0, 0), // FormButtonBack1Pressed - Color.FromArgb( 65, 83, 102), // FormButtonBack2Pressed - Color.FromArgb( 70, 70, 70), // TextButtonFormNormal - Color.FromArgb(255, 255, 255), // TextButtonFormTracking - Color.FromArgb(255, 255, 255), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.FromArgb(180, 210, 255), // LinkNotVisitedOverridePanel - Color.Violet, // LinkVisitedOverridePanel - Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel - Color.White, // TextLabelPanel - Color.White, // RibbonTabTextNormal - Color.Black, // RibbonTabTextChecked - Color.Black, // RibbonTabSelected1 - Color.Silver, // RibbonTabSelected2 - Color.FromArgb(177, 177, 188), // RibbonTabSelected3 - Color.FromArgb(167, 167, 178), // RibbonTabSelected4 - Color.FromArgb(137, 137, 148), // RibbonTabSelected5 - Color.FromArgb(159, 156, 150), // RibbonTabTracking1 - Color.FromArgb(200, 200, 255), // RibbonTabTracking2 - Color.Black, // RibbonTabHighlight1 - Color.FromArgb(107, 145, 238), // RibbonTabHighlight2 - Color.FromArgb( 97, 135, 228), // RibbonTabHighlight3 - Color.FromArgb( 82, 120, 213), // RibbonTabHighlight4 - Color.FromArgb(137, 137, 148), // RibbonTabHighlight5 - Color.Black, // RibbonTabSeparatorColor - Color.Black, // RibbonGroupsArea1 - Color.Black, // RibbonGroupsArea2 - Color.FromArgb( 96, 96, 110), // RibbonGroupsArea3 - Color.FromArgb(140, 140, 150), // RibbonGroupsArea4 - Color.FromArgb(140, 140, 150), // RibbonGroupsArea5 - Color.Black, // RibbonGroupBorder1 - Color.Black, // RibbonGroupBorder2 - Color.DimGray, // RibbonGroupTitle1 - Color.Black, // RibbonGroupTitle2 - Color.Black, // RibbonGroupBorderContext1 - Color.Black, // RibbonGroupBorderContext2 - Color.DimGray, // RibbonGroupTitleContext1 - Color.Black, // RibbonGroupTitleContext2 - Color.Black, // RibbonGroupDialogDark - Color.White, // RibbonGroupDialogLight - Color.FromArgb(120, 120, 120), // RibbonGroupTitleTracking1 - Color.FromArgb(65, 65, 65), // RibbonGroupTitleTracking2 - Color.FromArgb(27, 31, 38), // RibbonMinimizeBarDark - Color.FromArgb(150, 150, 150), // RibbonMinimizeBarLight - Color.Black, // RibbonGroupCollapsedBorder1 - Color.Black, // RibbonGroupCollapsedBorder2 - Color.FromArgb( 75, 78, 85), // RibbonGroupCollapsedBorder3 - Color.FromArgb(129, 133, 145), // RibbonGroupCollapsedBorder4 - Color.FromArgb(167, 167, 168), // RibbonGroupCollapsedBack1 - Color.FromArgb( 93, 93, 95), // RibbonGroupCollapsedBack2 - Color.FromArgb( 20, 21, 23), // RibbonGroupCollapsedBack3 - Color.FromArgb( 52, 60, 92), // RibbonGroupCollapsedBack4 - Color.Black, // RibbonGroupCollapsedBorderT1 - Color.Black, // RibbonGroupCollapsedBorderT2 - Color.FromArgb( 48, 89, 146), // RibbonGroupCollapsedBorderT3 - Color.FromArgb( 85, 132, 196), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(166, 173, 182), // RibbonGroupCollapsedBackT1 - Color.FromArgb( 92, 105, 121), // RibbonGroupCollapsedBackT2 - Color.FromArgb( 19, 37, 61), // RibbonGroupCollapsedBackT3 - Color.FromArgb( 56, 119, 191), // RibbonGroupCollapsedBackT4 - Color.Black, // RibbonGroupFrameBorder1 - Color.Gray, // RibbonGroupFrameBorder2 - Color.FromArgb(225, 225, 225), // RibbonGroupFrameInside1 - Color.FromArgb(170, 170, 170), // RibbonGroupFrameInside2 - Color.FromArgb(150, 150, 150), // RibbonGroupFrameInside3 - Color.FromArgb(205, 205, 205), // RibbonGroupFrameInside4 - Color.White, // RibbonGroupCollapsedText - Color.FromArgb(158, 163, 172), // AlternatePressedBack1 - Color.FromArgb(212, 215, 216), // AlternatePressedBack2 - Color.FromArgb(124, 125, 125), // AlternatePressedBorder1 - Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 - Color.FromArgb( 43, 55, 67), // FormButtonBack1Checked - Color.FromArgb(106, 122, 140), // FormButtonBack2Checked - Color.FromArgb( 18, 18, 18), // FormButtonBorderCheck - Color.FromArgb( 33, 45, 57), // FormButtonBack1CheckTrack - Color.FromArgb(136, 152, 170), // FormButtonBack2CheckTrack - Color.FromArgb(20, 21, 23), // RibbonQATMini1 - Color.FromArgb(150, 150, 150), // RibbonQATMini2 - Color.FromArgb(45, 45, 45), // RibbonQATMini3 - Color.FromArgb(14, Color.White), // RibbonQATMini4 - Color.FromArgb(14, Color.White), // RibbonQATMini5 - Color.Black, // RibbonQATMini1I - Color.Black, // RibbonQATMini2I - Color.Black, // RibbonQATMini3I - Color.FromArgb(14, Color.White), // RibbonQATMini4I - Color.FromArgb(14, Color.White), // RibbonQATMini5I - Color.FromArgb(150, 150, 150), // RibbonQATFullbar1 - Color.FromArgb(45, 45, 45), // RibbonQATFullbar2 - Color.FromArgb(20, 21, 23), // RibbonQATFullbar3 - Color.Black, // RibbonQATButtonDark - Color.White, // RibbonQATButtonLight - Color.FromArgb(240, 240, 240), // RibbonQATOverflow1 - Color.Black, // RibbonQATOverflow2 - Color.Gray, // RibbonGroupSeparatorDark - Color.Black, // RibbonGroupSeparatorLight - Color.FromArgb(210, 217, 219), // ButtonClusterButtonBack1 - Color.FromArgb(214, 222, 223), // ButtonClusterButtonBack2 - Color.FromArgb(179, 188, 191), // ButtonClusterButtonBorder1 - Color.FromArgb(145, 156, 159), // ButtonClusterButtonBorder2 - Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.FromArgb(212, 215, 219), // GridListNormal2 - Color.FromArgb(210, 213, 218), // GridListPressed1 - Color.FromArgb(252, 253, 253), // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(248, 248, 248), // GridSheetColNormal1 - Color.FromArgb(222, 222, 222), // GridSheetColNormal2 - Color.FromArgb(224, 224, 224), // GridSheetColPressed1 - Color.FromArgb(195, 195, 195), // GridSheetColPressed2 - Color.FromArgb(249, 217, 159), // GridSheetColSelected1 - Color.FromArgb(241, 193, 95), // GridSheetColSelected2 - Color.FromArgb(237, 237, 237), // GridSheetRowNormal - Color.FromArgb(196, 196, 196), // GridSheetRowPressed - Color.FromArgb(255, 213, 141), // GridSheetRowSelected - Color.FromArgb(188, 195, 209), // GridDataCellBorder - Color.FromArgb(194, 217, 240), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(137, 137, 137), // InputControlBorderNormal - Color.FromArgb(204, 204, 204), // InputControlBorderDisabled - Color.White, // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(232, 232, 232), // InputControlBackInactive - Color.FromArgb(124, 124, 124), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(235, 235, 235), // ContextMenuHeading - Color.FromArgb( 76, 83, 92), // ContextMenuHeadingText - Color.FromArgb(239, 239, 239), // ContextMenuImageColumn - Color.FromArgb(109, 108, 108), // AppButtonBack1 - Color.FromArgb(104, 103, 103), // AppButtonBack2 - Color.Black, // AppButtonBorder - Color.FromArgb(20, 21, 23), // AppButtonOuter1 - Color.Black, // AppButtonOuter2 - Color.FromArgb(20, 21, 23), // AppButtonOuter3 - Color.FromArgb(20, 21, 23), // AppButtonInner1 - Color.Black, // AppButtonInner2 - Color.FromArgb(237, 237, 242), // AppButtonMenuDocs - Color.Black, // AppButtonMenuDocsText - Color.FromArgb(240, 241, 242), // SeparatorHighInternalBorder1 - Color.FromArgb(195, 200, 206), // SeparatorHighInternalBorder2 - Color.Black, // RibbonGalleryBorder - Color.FromArgb(215, 215, 215), // RibbonGalleryBackNormal - Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking - Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 - Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty, // RibbonGroupBorder4 - }; + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb(76, 83, 92), // TextLabelControl + Color.FromArgb(70, 70, 70), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 + Color.FromArgb(127, 125, 123), // ButtonNormalBorder2 + Color.FromArgb(203, 213, 223), // ButtonNormalBack1 + Color.FromArgb(255, 255, 255), // ButtonNormalBack2 + Color.FromArgb(187, 192, 198), // ButtonNormalDefaultBack1 + Color.FromArgb(224, 227, 231), // ButtonNormalDefaultBack2 + Color.FromArgb(204, 208, 214), // ButtonNormalNavigatorBack1 + Color.FromArgb(229, 232, 236), // ButtonNormalNavigatorBack2 + Color.FromArgb(83, 83, 83), // PanelClient + Color.FromArgb(70, 70, 70), // PanelAlternative + Color.FromArgb(30, 30, 30), // ControlBorder + Color.FromArgb(167, 167, 167), // SeparatorHighBorder1 + Color.FromArgb(119, 119, 119), // SeparatorHighBorder2 + Color.FromArgb(240, 241, 242), // HeaderPrimaryBack1 + Color.FromArgb(189, 193, 200), // HeaderPrimaryBack2 + Color.FromArgb(221, 224, 227), // HeaderSecondaryBack1 + Color.FromArgb(221, 224, 227), // HeaderSecondaryBack2 + Color.Black, // HeaderText + Color.White, // StatusStripText + Color.FromArgb(155, 163, 167), // ButtonBorder + Color.FromArgb(200, 200, 200), // SeparatorLight + Color.FromArgb(86, 94, 118), // SeparatorDark + Color.FromArgb(190, 190, 190), // GripLight + Color.Black, // GripDark + Color.FromArgb(99, 108, 135), // ToolStripBack + Color.FromArgb(99, 108, 135), // StatusStripLight + Color.Black, // StatusStripDark + Color.FromArgb(240, 240, 240), // ImageMargin + Color.FromArgb(200, 200, 200), // ToolStripBegin + Color.FromArgb(99, 108, 135), // ToolStripMiddle + Color.FromArgb(72, 81, 102), // ToolStripEnd + Color.FromArgb(72, 81, 102), // OverflowBegin + Color.FromArgb(72, 81, 102), // OverflowMiddle + Color.FromArgb(30, 30, 30), // OverflowEnd + Color.FromArgb(30, 30, 30), // ToolStripBorder + Color.FromArgb(47, 47, 47), // FormBorderActive + Color.FromArgb(146, 146, 146), // FormBorderInactive + Color.FromArgb(77, 77, 77), // FormBorderActiveLight + Color.FromArgb(102, 102, 102), // FormBorderActiveDark + Color.FromArgb(153, 153, 153), // FormBorderInactiveLight + Color.FromArgb(171, 171, 171), // FormBorderInactiveDark + Color.FromArgb(65, 65, 65), // FormBorderHeaderActive + Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive + Color.FromArgb(42, 43, 43), // FormBorderHeaderActive1 + Color.FromArgb(74, 74, 74), // FormBorderHeaderActive2 + Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 + Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 + Color.FromArgb(174, 209, 255), // FormHeaderShortActive + Color.FromArgb(225, 225, 225), // FormHeaderShortInactive + Color.FromArgb(255, 255, 255), // FormHeaderLongActive + Color.FromArgb(225, 225, 225), // FormHeaderLongInactive + Color.FromArgb(88, 95, 104), // FormButtonBorderTrack + Color.FromArgb(91, 105, 123), // FormButtonBack1Track + Color.FromArgb(173, 199, 214), // FormButtonBack2Track + Color.FromArgb(18, 18, 18), // FormButtonBorderPressed + Color.FromArgb(0, 0, 0), // FormButtonBack1Pressed + Color.FromArgb(65, 83, 102), // FormButtonBack2Pressed + Color.FromArgb(70, 70, 70), // TextButtonFormNormal + Color.FromArgb(255, 255, 255), // TextButtonFormTracking + Color.FromArgb(255, 255, 255), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.FromArgb(180, 210, 255), // LinkNotVisitedOverridePanel + Color.Violet, // LinkVisitedOverridePanel + Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel + Color.White, // TextLabelPanel + Color.White, // RibbonTabTextNormal + Color.Black, // RibbonTabTextChecked + Color.Black, // RibbonTabSelected1 + Color.Silver, // RibbonTabSelected2 + Color.FromArgb(177, 177, 188), // RibbonTabSelected3 + Color.FromArgb(167, 167, 178), // RibbonTabSelected4 + Color.FromArgb(137, 137, 148), // RibbonTabSelected5 + Color.FromArgb(159, 156, 150), // RibbonTabTracking1 + Color.FromArgb(200, 200, 255), // RibbonTabTracking2 + Color.Black, // RibbonTabHighlight1 + Color.FromArgb(107, 145, 238), // RibbonTabHighlight2 + Color.FromArgb(97, 135, 228), // RibbonTabHighlight3 + Color.FromArgb(82, 120, 213), // RibbonTabHighlight4 + Color.FromArgb(137, 137, 148), // RibbonTabHighlight5 + Color.Black, // RibbonTabSeparatorColor + Color.FromArgb(140, 140, 150), // RibbonGroupsArea1 + Color.FromArgb(140, 140, 150), // RibbonGroupsArea2 + Color.FromArgb(96, 96, 110), // RibbonGroupsArea3 + Color.FromArgb(0, 0, 0), // RibbonGroupsArea4 + Color.FromArgb(0, 0, 0), // RibbonGroupsArea5 + Color.Black, // RibbonGroupBorder1 + Color.Black, // RibbonGroupBorder2 + Color.DimGray, // RibbonGroupTitle1 + Color.Black, // RibbonGroupTitle2 + Color.Black, // RibbonGroupBorderContext1 + Color.Black, // RibbonGroupBorderContext2 + Color.DimGray, // RibbonGroupTitleContext1 + Color.Black, // RibbonGroupTitleContext2 + Color.Black, // RibbonGroupDialogDark + Color.White, // RibbonGroupDialogLight + Color.FromArgb(120, 120, 120), // RibbonGroupTitleTracking1 + Color.FromArgb(65, 65, 65), // RibbonGroupTitleTracking2 + Color.FromArgb(27, 31, 38), // RibbonMinimizeBarDark + Color.FromArgb(150, 150, 150), // RibbonMinimizeBarLight + Color.Black, // RibbonGroupCollapsedBorder1 + Color.Black, // RibbonGroupCollapsedBorder2 + Color.FromArgb(75, 78, 85), // RibbonGroupCollapsedBorder3 + Color.FromArgb(129, 133, 145), // RibbonGroupCollapsedBorder4 + Color.FromArgb(167, 167, 168), // RibbonGroupCollapsedBack1 + Color.FromArgb(93, 93, 95), // RibbonGroupCollapsedBack2 + Color.FromArgb(20, 21, 23), // RibbonGroupCollapsedBack3 + Color.FromArgb(52, 60, 92), // RibbonGroupCollapsedBack4 + Color.Black, // RibbonGroupCollapsedBorderT1 + Color.Black, // RibbonGroupCollapsedBorderT2 + Color.FromArgb(48, 89, 146), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(85, 132, 196), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(166, 173, 182), // RibbonGroupCollapsedBackT1 + Color.FromArgb(92, 105, 121), // RibbonGroupCollapsedBackT2 + Color.FromArgb(19, 37, 61), // RibbonGroupCollapsedBackT3 + Color.FromArgb(56, 119, 191), // RibbonGroupCollapsedBackT4 + Color.Black, // RibbonGroupFrameBorder1 + Color.Gray, // RibbonGroupFrameBorder2 + Color.FromArgb(225, 225, 225), // RibbonGroupFrameInside1 + Color.FromArgb(170, 170, 170), // RibbonGroupFrameInside2 + Color.FromArgb(150, 150, 150), // RibbonGroupFrameInside3 + Color.FromArgb(205, 205, 205), // RibbonGroupFrameInside4 + Color.White, // RibbonGroupCollapsedText + Color.FromArgb(158, 163, 172), // AlternatePressedBack1 + Color.FromArgb(212, 215, 216), // AlternatePressedBack2 + Color.FromArgb(124, 125, 125), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(43, 55, 67), // FormButtonBack1Checked + Color.FromArgb(106, 122, 140), // FormButtonBack2Checked + Color.FromArgb(18, 18, 18), // FormButtonBorderCheck + Color.FromArgb(33, 45, 57), // FormButtonBack1CheckTrack + Color.FromArgb(136, 152, 170), // FormButtonBack2CheckTrack + Color.FromArgb(20, 21, 23), // RibbonQATMini1 + Color.FromArgb(150, 150, 150), // RibbonQATMini2 + Color.FromArgb(45, 45, 45), // RibbonQATMini3 + Color.FromArgb(14, Color.White), // RibbonQATMini4 + Color.FromArgb(14, Color.White), // RibbonQATMini5 + Color.Black, // RibbonQATMini1I + Color.Black, // RibbonQATMini2I + Color.Black, // RibbonQATMini3I + Color.FromArgb(14, Color.White), // RibbonQATMini4I + Color.FromArgb(14, Color.White), // RibbonQATMini5I + Color.FromArgb(150, 150, 150), // RibbonQATFullbar1 + Color.FromArgb(45, 45, 45), // RibbonQATFullbar2 + Color.FromArgb(20, 21, 23), // RibbonQATFullbar3 + Color.Black, // RibbonQATButtonDark + Color.White, // RibbonQATButtonLight + Color.FromArgb(240, 240, 240), // RibbonQATOverflow1 + Color.Black, // RibbonQATOverflow2 + Color.Gray, // RibbonGroupSeparatorDark + Color.Black, // RibbonGroupSeparatorLight + Color.FromArgb(210, 217, + 219), // ButtonClusterButtonBack1 + Color.FromArgb(214, 222, + 223), // ButtonClusterButtonBack2 + Color.FromArgb(179, 188, + 191), // ButtonClusterButtonBorder1 + Color.FromArgb(145, 156, + 159), // ButtonClusterButtonBorder2 + Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.FromArgb(212, 215, 219), // GridListNormal2 + Color.FromArgb(210, 213, 218), // GridListPressed1 + Color.FromArgb(252, 253, 253), // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(248, 248, 248), // GridSheetColNormal1 + Color.FromArgb(222, 222, 222), // GridSheetColNormal2 + Color.FromArgb(224, 224, 224), // GridSheetColPressed1 + Color.FromArgb(195, 195, 195), // GridSheetColPressed2 + Color.FromArgb(249, 217, 159), // GridSheetColSelected1 + Color.FromArgb(241, 193, 95), // GridSheetColSelected2 + Color.FromArgb(237, 237, 237), // GridSheetRowNormal + Color.FromArgb(196, 196, 196), // GridSheetRowPressed + Color.FromArgb(255, 213, 141), // GridSheetRowSelected + Color.FromArgb(188, 195, 209), // GridDataCellBorder + Color.FromArgb(194, 217, 240), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(137, 137, 137), // InputControlBorderNormal + Color.FromArgb(204, 204, 204), // InputControlBorderDisabled + Color.White, // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(232, 232, 232), // InputControlBackInactive + Color.FromArgb(124, 124, 124), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(235, 235, 235), // ContextMenuHeading + Color.FromArgb(76, 83, 92), // ContextMenuHeadingText + Color.FromArgb(239, 239, 239), // ContextMenuImageColumn + Color.FromArgb(109, 108, 108), // AppButtonBack1 + Color.FromArgb(104, 103, 103), // AppButtonBack2 + Color.Black, // AppButtonBorder + Color.FromArgb(20, 21, 23), // AppButtonOuter1 + Color.Black, // AppButtonOuter2 + Color.FromArgb(20, 21, 23), // AppButtonOuter3 + Color.FromArgb(20, 21, 23), // AppButtonInner1 + Color.Black, // AppButtonInner2 + Color.FromArgb(237, 237, 242), // AppButtonMenuDocs + Color.Black, // AppButtonMenuDocsText + Color.FromArgb(240, 241, 242), // SeparatorHighInternalBorder1 + Color.FromArgb(195, 200, 206), // SeparatorHighInternalBorder2 + Color.Black, // RibbonGalleryBorder + Color.FromArgb(215, 215, 215), // RibbonGalleryBackNormal + Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking + Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 + Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion #region Identity @@ -306,8 +326,8 @@ static PaletteSparkleBlue() _checkBoxList.ImageSize = new Size(13, 13); _checkBoxList.ColorDepth = ColorDepth.Depth24Bit; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparkle); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparkleT, @@ -316,7 +336,7 @@ static PaletteSparkleBlue() SparkleRadioButtonImageResources.RadioButtonSparkleNC, SparkleRadioButtonImageResources.RadioButtonSparkleTC, SparkleRadioButtonImageResources.RadioButtonSparklePC - }; + ]; } /// @@ -328,6 +348,7 @@ public PaletteSparkleBlue() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparkleBlue); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleOrange.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleOrange.cs index 934b6ea19..e7315d354 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleOrange.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparkleOrange.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,283 +19,303 @@ public class PaletteSparkleOrange : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), - Color.FromArgb(214, 220, 231), - Color.FromArgb(188, 198, 211), - Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), + Color.FromArgb(214, 220, 231), + Color.FromArgb(188, 198, 211), + Color.FromArgb(254, 254, 255), + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(245, 239, 215), - Color.FromArgb(238, 214, 146), - Color.FromArgb(201, 155, 60), - Color.FromArgb(248, 201, 93), - Color.FromArgb(238, 168, 25) }; + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(245, 239, 215), + Color.FromArgb(238, 214, 146), + Color.FromArgb(201, 155, 60), + Color.FromArgb(248, 201, 93), + Color.FromArgb(238, 168, 25) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(235, 227, 196), - Color.FromArgb(228, 198, 149), - Color.FromArgb(166, 97, 7), - Color.FromArgb(242, 155, 57), - Color.FromArgb(236, 136, 9) }; + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(235, 227, 196), + Color.FromArgb(228, 198, 149), + Color.FromArgb(166, 97, 7), + Color.FromArgb(242, 155, 57), + Color.FromArgb(236, 136, 9) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 196, 184, 168), - Color.FromArgb(196, 184, 169), - Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(220, 207, 192) }; + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 196, 184, 168), + Color.FromArgb(196, 184, 169), + Color.FromArgb(48, 255, 255, 255), + Color.FromArgb(220, 207, 192) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 - Color.FromArgb(86, 94, 118), // 1 _colorDark86 - Color.FromArgb(72, 81, 102), // 2 _colorDark72 - Color.FromArgb(45, 45, 45), // 3 _colorDark45 - Color.FromArgb(27, 31, 38), // 4 _colorDark27 - Color.FromArgb(20, 21, 23), // 5 _colorDark20 - Color.FromArgb(61, 37, 19), // 6 _buttonTrackBack1 - Color.FromArgb(206, 129, 60), // 7 _buttonTrackBack2 - Color.FromArgb(52, 30, 13), // 8 _buttonPressBack1 - Color.FromArgb(248, 205, 125), // 9 _buttonPressBack2 - Color.FromArgb(160, 66, 28), // 10 _buttonCheckBack1 - Color.FromArgb(239, 198, 87), // 11 _buttonCheckBack2 - Color.FromArgb(204, 65, 14), // 12 _buttonCheckTrackBack1 - Color.FromArgb(255, 212, 112), // 13 _buttonCheckTrackBack2 - Color.FromArgb(160, 65, 27), // 14 _buttonCheckPressBack1 - Color.FromArgb(240, 153, 51), // 15 _colorBlue - Color.FromArgb(171, 91, 91), // 16 _menuItemHeading - Color.FromArgb(225, 244, 236, 225), // 17 _menuItemTrackBack1 - Color.FromArgb(225, 231, 215, 181), // 18 _menuItemTrackBack2 - Color.FromArgb(225, 230, 187, 91), // 19 _menuItemTrackBorder - Color.FromArgb(244, 239, 230), // 20 _menuItemCheckedBack - Color.FromArgb(230, 191, 185), // 21 _menuItemCheckedBorder - Color.FromArgb( 80, 80, 80), // 22 _buttonBack2 - Color.FromArgb(250, 175, 57), // 23 _buttonDefaultBack - Color.FromArgb(242, 219, 177), // 24 _gridHeaderTracking1 - Color.FromArgb(242, 218, 180), // 25 _gridHeaderTracking2 - Color.FromArgb(228, 198, 145), // 26 _gridHeaderPressed1 - Color.FromArgb(228, 197, 148), // 27 _gridHeaderPressed2 - Color.FromArgb(190, 190, 190), // 28 _gridCellBorder - Color.FromArgb(239, 180, 79), // 29 _tabCheckedNormal - Color.FromArgb(146, 89, 48), // 30 _ribbonFrameBorder1 - Color.FromArgb(196, 132, 85), // 31 _ribbonFrameBorder1 - Color.FromArgb(235, 220, 209), // 32 _ribbonFrameBack1 - Color.FromArgb(222, 211, 202), // 33 _ribbonFrameBack2 - Color.FromArgb(222, 196, 176), // 34 _ribbonFrameBack3 - Color.FromArgb(213, 120, 82), // 35 _ribbonFrameBack4 - Color.FromArgb(213, 110, 72), // 36 _contextCheckedTabFill - Color.FromArgb(255, 20, 10) // 37 _focusTabFill - }; + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 + Color.FromArgb(86, 94, 118), // 1 _colorDark86 + Color.FromArgb(72, 81, 102), // 2 _colorDark72 + Color.FromArgb(45, 45, 45), // 3 _colorDark45 + Color.FromArgb(27, 31, 38), // 4 _colorDark27 + Color.FromArgb(20, 21, 23), // 5 _colorDark20 + Color.FromArgb(61, 37, 19), // 6 _buttonTrackBack1 + Color.FromArgb(206, 129, 60), // 7 _buttonTrackBack2 + Color.FromArgb(52, 30, 13), // 8 _buttonPressBack1 + Color.FromArgb(248, 205, 125), // 9 _buttonPressBack2 + Color.FromArgb(160, 66, 28), // 10 _buttonCheckBack1 + Color.FromArgb(239, 198, 87), // 11 _buttonCheckBack2 + Color.FromArgb(204, 65, 14), // 12 _buttonCheckTrackBack1 + Color.FromArgb(255, 212, 112), // 13 _buttonCheckTrackBack2 + Color.FromArgb(160, 65, 27), // 14 _buttonCheckPressBack1 + Color.FromArgb(240, 153, 51), // 15 _colorBlue + Color.FromArgb(171, 91, 91), // 16 _menuItemHeading + Color.FromArgb(225, 244, 236, 225), // 17 _menuItemTrackBack1 + Color.FromArgb(225, 231, 215, 181), // 18 _menuItemTrackBack2 + Color.FromArgb(225, 230, 187, 91), // 19 _menuItemTrackBorder + Color.FromArgb(244, 239, 230), // 20 _menuItemCheckedBack + Color.FromArgb(230, 191, 185), // 21 _menuItemCheckedBorder + Color.FromArgb(80, 80, 80), // 22 _buttonBack2 + Color.FromArgb(250, 175, 57), // 23 _buttonDefaultBack + Color.FromArgb(242, 219, 177), // 24 _gridHeaderTracking1 + Color.FromArgb(242, 218, 180), // 25 _gridHeaderTracking2 + Color.FromArgb(228, 198, 145), // 26 _gridHeaderPressed1 + Color.FromArgb(228, 197, 148), // 27 _gridHeaderPressed2 + Color.FromArgb(190, 190, 190), // 28 _gridCellBorder + Color.FromArgb(239, 180, 79), // 29 _tabCheckedNormal + Color.FromArgb(146, 89, 48), // 30 _ribbonFrameBorder1 + Color.FromArgb(196, 132, 85), // 31 _ribbonFrameBorder1 + Color.FromArgb(235, 220, 209), // 32 _ribbonFrameBack1 + Color.FromArgb(222, 211, 202), // 33 _ribbonFrameBack2 + Color.FromArgb(222, 196, 176), // 34 _ribbonFrameBack3 + Color.FromArgb(213, 120, 82), // 35 _ribbonFrameBack4 + Color.FromArgb(213, 110, 72), // 36 _contextCheckedTabFill + Color.FromArgb(255, 20, 10) // 37 _focusTabFill + ]; - private static readonly Color[] _ribbonColors = { Color.FromArgb( 92, 83, 76), // TextLabelControl - Color.FromArgb( 70, 70, 70), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(133, 135, 137), // ButtonNormalBorder1 - Color.FromArgb(123, 125, 127), // ButtonNormalBorder2 - Color.FromArgb(223, 213, 203), // ButtonNormalBack1 - Color.FromArgb(255, 255, 255), // ButtonNormalBack2 - Color.FromArgb(198, 192, 187), // ButtonNormalDefaultBack1 - Color.FromArgb(231, 227, 224), // ButtonNormalDefaultBack2 - Color.FromArgb(214, 208, 204), // ButtonNormalNavigatorBack1 - Color.FromArgb(236, 232, 229), // ButtonNormalNavigatorBack2 - Color.FromArgb( 83, 83, 83), // PanelClient - Color.FromArgb( 70, 70, 70), // PanelAlternative - Color.FromArgb( 30, 30, 30), // ControlBorder - Color.FromArgb(167, 167, 167), // SeparatorHighBorder1 - Color.FromArgb(119, 119, 119), // SeparatorHighBorder2 - Color.FromArgb(242, 241, 240), // HeaderPrimaryBack1 - Color.FromArgb(200, 193, 189), // HeaderPrimaryBack2 - Color.FromArgb(227, 224, 221), // HeaderSecondaryBack1 - Color.FromArgb(227, 224, 221), // HeaderSecondaryBack2 - Color.Black, // HeaderText - Color.White, // StatusStripText - Color.FromArgb(167, 163, 155), // ButtonBorder - Color.FromArgb(200, 200, 200), // SeparatorLight - Color.FromArgb(118, 94, 86), // SeparatorDark - Color.FromArgb(190, 190, 190), // GripLight - Color.Black, // GripDark - Color.FromArgb(99, 108, 135), // ToolStripBack - Color.FromArgb(99, 108, 135), // StatusStripLight - Color.Black, // StatusStripDark - Color.FromArgb(240, 240, 240), // ImageMargin - Color.FromArgb(200, 200, 200), // ToolStripBegin - Color.FromArgb(99, 108, 135), // ToolStripMiddle - Color.FromArgb(72, 81, 102), // ToolStripEnd - Color.FromArgb(72, 81, 102), // OverflowBegin - Color.FromArgb(72, 81, 102), // OverflowMiddle - Color.FromArgb( 30, 30, 30), // OverflowEnd - Color.FromArgb( 30, 30, 30), // ToolStripBorder - Color.FromArgb( 47, 47, 47), // FormBorderActive - Color.FromArgb(146, 146, 146), // FormBorderInactive - Color.FromArgb( 77, 77, 77), // FormBorderActiveLight - Color.FromArgb(102, 102, 102), // FormBorderActiveDark - Color.FromArgb(153, 153, 153), // FormBorderInactiveLight - Color.FromArgb(171, 171, 171), // FormBorderInactiveDark - Color.FromArgb( 65, 65, 65), // FormBorderHeaderActive - Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive - Color.FromArgb( 42, 43, 43), // FormBorderHeaderActive1 - Color.FromArgb( 74, 74, 74), // FormBorderHeaderActive2 - Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 - Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 - Color.FromArgb(255, 209, 174), // FormHeaderShortActive - Color.FromArgb(225, 225, 225), // FormHeaderShortInactive - Color.FromArgb(255, 255, 255), // FormHeaderLongActive - Color.FromArgb(225, 225, 225), // FormHeaderLongInactive - Color.FromArgb(104, 95, 88), // FormButtonBorderTrack - Color.FromArgb(123, 105, 91), // FormButtonBack1Track - Color.FromArgb(214, 199, 173), // FormButtonBack2Track - Color.FromArgb( 18, 18, 18), // FormButtonBorderPressed - Color.FromArgb( 0, 0, 0), // FormButtonBack1Pressed - Color.FromArgb(102, 83, 65), // FormButtonBack2Pressed - Color.FromArgb( 70, 70, 70), // TextButtonFormNormal - Color.FromArgb(255, 255, 255), // TextButtonFormTracking - Color.FromArgb(255, 255, 255), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.FromArgb(180, 210, 255), // LinkNotVisitedOverridePanel - Color.Violet, // LinkVisitedOverridePanel - Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel - Color.White, // TextLabelPanel - Color.White, // RibbonTabTextNormal - Color.Black, // RibbonTabTextChecked - Color.Black, // RibbonTabSelected1 - Color.Silver, // RibbonTabSelected2 - Color.FromArgb(177, 177, 188), // RibbonTabSelected3 - Color.FromArgb(167, 167, 178), // RibbonTabSelected4 - Color.FromArgb(137, 137, 148), // RibbonTabSelected5 - Color.FromArgb(150, 156, 159), // RibbonTabTracking1 - Color.FromArgb(255, 200, 200), // RibbonTabTracking2 - Color.Black, // RibbonTabHighlight1 - Color.FromArgb(238, 145, 107), // RibbonTabHighlight2 - Color.FromArgb(228, 135, 97), // RibbonTabHighlight3 - Color.FromArgb(213, 120, 82), // RibbonTabHighlight4 - Color.FromArgb(148, 137, 137), // RibbonTabHighlight5 - Color.Black, // RibbonTabSeparatorColor - Color.Black, // RibbonGroupsArea1 - Color.Black, // RibbonGroupsArea2 - Color.FromArgb( 96, 96, 110), // RibbonGroupsArea3 - Color.FromArgb(140, 140, 150), // RibbonGroupsArea4 - Color.FromArgb(140, 140, 150), // RibbonGroupsArea5 - Color.Black, // RibbonGroupBorder1 - Color.Black, // RibbonGroupBorder2 - Color.DimGray, // RibbonGroupTitle1 - Color.Black, // RibbonGroupTitle2 - Color.Black, // RibbonGroupBorderContext1 - Color.Black, // RibbonGroupBorderContext2 - Color.DimGray, // RibbonGroupTitleContext1 - Color.Black, // RibbonGroupTitleContext2 - Color.Black, // RibbonGroupDialogDark - Color.White, // RibbonGroupDialogLight - Color.FromArgb(120, 120, 120), // RibbonGroupTitleTracking1 - Color.FromArgb(65, 65, 65), // RibbonGroupTitleTracking2 - Color.FromArgb(38, 31, 27), // RibbonMinimizeBarDark - Color.FromArgb(150, 150, 150), // RibbonMinimizeBarLight - Color.Black, // RibbonGroupCollapsedBorder1 - Color.Black, // RibbonGroupCollapsedBorder2 - Color.FromArgb( 85, 78, 75), // RibbonGroupCollapsedBorder3 - Color.FromArgb(145, 133, 129), // RibbonGroupCollapsedBorder4 - Color.FromArgb(167, 167, 168), // RibbonGroupCollapsedBack1 - Color.FromArgb( 95, 93, 93), // RibbonGroupCollapsedBack2 - Color.FromArgb( 23, 21, 20), // RibbonGroupCollapsedBack3 - Color.FromArgb( 92, 60, 52), // RibbonGroupCollapsedBack4 - Color.Black, // RibbonGroupCollapsedBorderT1 - Color.Black, // RibbonGroupCollapsedBorderT2 - Color.FromArgb(146, 89, 48), // RibbonGroupCollapsedBorderT3 - Color.FromArgb(196, 132, 85), // RibbonGroupCollapsedBorderT4 - Color.FromArgb(182, 173, 166), // RibbonGroupCollapsedBackT1 - Color.FromArgb(121, 105, 92), // RibbonGroupCollapsedBackT2 - Color.FromArgb(61, 37, 19), // RibbonGroupCollapsedBackT3 - Color.FromArgb(191, 119, 56), // RibbonGroupCollapsedBackT4 - Color.Black, // RibbonGroupFrameBorder1 - Color.Gray, // RibbonGroupFrameBorder2 - Color.FromArgb(225, 225, 225), // RibbonGroupFrameInside1 - Color.FromArgb(170, 170, 170), // RibbonGroupFrameInside2 - Color.FromArgb(150, 150, 150), // RibbonGroupFrameInside3 - Color.FromArgb(205, 205, 205), // RibbonGroupFrameInside4 - Color.White, // RibbonGroupCollapsedText - Color.FromArgb(172, 163, 158), // AlternatePressedBack1 - Color.FromArgb(216, 215, 212), // AlternatePressedBack2 - Color.FromArgb(125, 125, 124), // AlternatePressedBorder1 - Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 - Color.FromArgb( 67, 55, 43), // FormButtonBack1Checked - Color.FromArgb(140, 122, 106), // FormButtonBack2Checked - Color.FromArgb( 18, 18, 18), // FormButtonBorderCheck - Color.FromArgb( 57, 45, 33), // FormButtonBack1CheckTrack - Color.FromArgb(170, 152, 136), // FormButtonBack2CheckTrack - Color.FromArgb(23, 21, 20), // RibbonQATMini1 - Color.FromArgb(150, 150, 150), // RibbonQATMini2 - Color.FromArgb(45, 45, 45), // RibbonQATMini3 - Color.FromArgb(14, Color.White), // RibbonQATMini4 - Color.FromArgb(14, Color.White), // RibbonQATMini5 - Color.Black, // RibbonQATMini1I - Color.Black, // RibbonQATMini2I - Color.Black, // RibbonQATMini3I - Color.FromArgb(14, Color.White), // RibbonQATMini4I - Color.FromArgb(14, Color.White), // RibbonQATMini5I - Color.FromArgb(150, 150, 150), // RibbonQATFullbar1 - Color.FromArgb(45, 45, 45), // RibbonQATFullbar2 - Color.FromArgb(23, 21, 20), // RibbonQATFullbar3 - Color.Black, // RibbonQATButtonDark - Color.White, // RibbonQATButtonLight - Color.FromArgb(240, 240, 240), // RibbonQATOverflow1 - Color.Black, // RibbonQATOverflow2 - Color.Gray, // RibbonGroupSeparatorDark - Color.Black, // RibbonGroupSeparatorLight - Color.FromArgb(219, 217, 210), // ButtonClusterButtonBack1 - Color.FromArgb(223, 222, 214), // ButtonClusterButtonBack2 - Color.FromArgb(191, 188, 179), // ButtonClusterButtonBorder1 - Color.FromArgb(159, 156, 145), // ButtonClusterButtonBorder2 - Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.FromArgb(219, 215, 212), // GridListNormal2 - Color.FromArgb(218, 213, 210), // GridListPressed1 - Color.FromArgb(253, 253, 252), // GridListPressed2 - Color.FromArgb(194, 189, 186), // GridListSelected - Color.FromArgb(248, 248, 248), // GridSheetColNormal1 - Color.FromArgb(222, 222, 222), // GridSheetColNormal2 - Color.FromArgb(224, 224, 224), // GridSheetColPressed1 - Color.FromArgb(195, 195, 195), // GridSheetColPressed2 - Color.FromArgb(159, 217, 249), // GridSheetColSelected1 - Color.FromArgb( 95, 193, 241), // GridSheetColSelected2 - Color.FromArgb(237, 237, 237), // GridSheetRowNormal - Color.FromArgb(196, 196, 196), // GridSheetRowPressed - Color.FromArgb(141, 213, 255), // GridSheetRowSelected - Color.FromArgb(209, 195, 188), // GridDataCellBorder - Color.FromArgb(230, 207, 184), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(153, 168, 172), // InputControlTextDisabled - Color.FromArgb(137, 137, 137), // InputControlBorderNormal - Color.FromArgb(204, 204, 204), // InputControlBorderDisabled - Color.White, // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(232, 232, 232), // InputControlBackInactive - Color.FromArgb(124, 124, 124), // InputDropDownNormal1 - Color.FromArgb(203, 248, 255), // InputDropDownNormal2 - Color.FromArgb(153, 168, 172), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(235, 235, 235), // ContextMenuHeading - Color.FromArgb( 92, 83, 76), // ContextMenuHeadingText - Color.FromArgb(239, 239, 239), // ContextMenuImageColumn - Color.FromArgb(108, 108, 109), // AppButtonBack1 - Color.FromArgb(103, 103, 104), // AppButtonBack2 - Color.Black, // AppButtonBorder - Color.FromArgb(23, 21, 20), // AppButtonOuter1 - Color.Black, // AppButtonOuter2 - Color.FromArgb(23, 21, 20), // AppButtonOuter3 - Color.FromArgb(23, 21, 20), // AppButtonInner1 - Color.Black, // AppButtonInner2 - Color.FromArgb(242, 237, 237), // AppButtonMenuDocs - Color.Black, // AppButtonMenuDocsText - Color.FromArgb(242, 241, 240), // SeparatorHighInternalBorder1 - Color.FromArgb(206, 200, 195), // SeparatorHighInternalBorder2 - Color.Black, // RibbonGalleryBorder - Color.FromArgb(215, 215, 215), // RibbonGalleryBackNormal - Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking - Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 - Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb(92, 83, 76), // TextLabelControl + Color.FromArgb(70, 70, 70), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(133, 135, 137), // ButtonNormalBorder1 + Color.FromArgb(123, 125, 127), // ButtonNormalBorder2 + Color.FromArgb(223, 213, 203), // ButtonNormalBack1 + Color.FromArgb(255, 255, 255), // ButtonNormalBack2 + Color.FromArgb(198, 192, 187), // ButtonNormalDefaultBack1 + Color.FromArgb(231, 227, 224), // ButtonNormalDefaultBack2 + Color.FromArgb(214, 208, 204), // ButtonNormalNavigatorBack1 + Color.FromArgb(236, 232, 229), // ButtonNormalNavigatorBack2 + Color.FromArgb(83, 83, 83), // PanelClient + Color.FromArgb(70, 70, 70), // PanelAlternative + Color.FromArgb(30, 30, 30), // ControlBorder + Color.FromArgb(167, 167, 167), // SeparatorHighBorder1 + Color.FromArgb(119, 119, 119), // SeparatorHighBorder2 + Color.FromArgb(242, 241, 240), // HeaderPrimaryBack1 + Color.FromArgb(200, 193, 189), // HeaderPrimaryBack2 + Color.FromArgb(227, 224, 221), // HeaderSecondaryBack1 + Color.FromArgb(227, 224, 221), // HeaderSecondaryBack2 + Color.Black, // HeaderText + Color.White, // StatusStripText + Color.FromArgb(167, 163, 155), // ButtonBorder + Color.FromArgb(200, 200, 200), // SeparatorLight + Color.FromArgb(118, 94, 86), // SeparatorDark + Color.FromArgb(190, 190, 190), // GripLight + Color.Black, // GripDark + Color.FromArgb(99, 108, 135), // ToolStripBack + Color.FromArgb(99, 108, 135), // StatusStripLight + Color.Black, // StatusStripDark + Color.FromArgb(240, 240, 240), // ImageMargin + Color.FromArgb(200, 200, 200), // ToolStripBegin + Color.FromArgb(99, 108, 135), // ToolStripMiddle + Color.FromArgb(72, 81, 102), // ToolStripEnd + Color.FromArgb(72, 81, 102), // OverflowBegin + Color.FromArgb(72, 81, 102), // OverflowMiddle + Color.FromArgb(30, 30, 30), // OverflowEnd + Color.FromArgb(30, 30, 30), // ToolStripBorder + Color.FromArgb(47, 47, 47), // FormBorderActive + Color.FromArgb(146, 146, 146), // FormBorderInactive + Color.FromArgb(77, 77, 77), // FormBorderActiveLight + Color.FromArgb(102, 102, 102), // FormBorderActiveDark + Color.FromArgb(153, 153, 153), // FormBorderInactiveLight + Color.FromArgb(171, 171, 171), // FormBorderInactiveDark + Color.FromArgb(65, 65, 65), // FormBorderHeaderActive + Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive + Color.FromArgb(42, 43, 43), // FormBorderHeaderActive1 + Color.FromArgb(74, 74, 74), // FormBorderHeaderActive2 + Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 + Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 + Color.FromArgb(255, 209, 174), // FormHeaderShortActive + Color.FromArgb(225, 225, 225), // FormHeaderShortInactive + Color.FromArgb(255, 255, 255), // FormHeaderLongActive + Color.FromArgb(225, 225, 225), // FormHeaderLongInactive + Color.FromArgb(104, 95, 88), // FormButtonBorderTrack + Color.FromArgb(123, 105, 91), // FormButtonBack1Track + Color.FromArgb(214, 199, 173), // FormButtonBack2Track + Color.FromArgb(18, 18, 18), // FormButtonBorderPressed + Color.FromArgb(0, 0, 0), // FormButtonBack1Pressed + Color.FromArgb(102, 83, 65), // FormButtonBack2Pressed + Color.FromArgb(70, 70, 70), // TextButtonFormNormal + Color.FromArgb(255, 255, 255), // TextButtonFormTracking + Color.FromArgb(255, 255, 255), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.FromArgb(180, 210, 255), // LinkNotVisitedOverridePanel + Color.Violet, // LinkVisitedOverridePanel + Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel + Color.White, // TextLabelPanel + Color.White, // RibbonTabTextNormal + Color.Black, // RibbonTabTextChecked + Color.Black, // RibbonTabSelected1 + Color.Silver, // RibbonTabSelected2 + Color.FromArgb(177, 177, 188), // RibbonTabSelected3 + Color.FromArgb(167, 167, 178), // RibbonTabSelected4 + Color.FromArgb(137, 137, 148), // RibbonTabSelected5 + Color.FromArgb(150, 156, 159), // RibbonTabTracking1 + Color.FromArgb(255, 200, 200), // RibbonTabTracking2 + Color.Black, // RibbonTabHighlight1 + Color.FromArgb(238, 145, 107), // RibbonTabHighlight2 + Color.FromArgb(228, 135, 97), // RibbonTabHighlight3 + Color.FromArgb(213, 120, 82), // RibbonTabHighlight4 + Color.FromArgb(148, 137, 137), // RibbonTabHighlight5 + Color.Black, // RibbonTabSeparatorColor + Color.FromArgb(140, 140, 150), // RibbonGroupsArea1 + Color.FromArgb(140, 140, 150), // RibbonGroupsArea2 + Color.FromArgb(96, 96, 110), // RibbonGroupsArea3 + Color.FromArgb(0, 0, 0), // RibbonGroupsArea4 + Color.FromArgb(0, 0, 0), // RibbonGroupsArea5 + Color.Black, // RibbonGroupBorder1 + Color.Black, // RibbonGroupBorder2 + Color.DimGray, // RibbonGroupTitle1 + Color.Black, // RibbonGroupTitle2 + Color.Black, // RibbonGroupBorderContext1 + Color.Black, // RibbonGroupBorderContext2 + Color.DimGray, // RibbonGroupTitleContext1 + Color.Black, // RibbonGroupTitleContext2 + Color.Black, // RibbonGroupDialogDark + Color.White, // RibbonGroupDialogLight + Color.FromArgb(120, 120, 120), // RibbonGroupTitleTracking1 + Color.FromArgb(65, 65, 65), // RibbonGroupTitleTracking2 + Color.FromArgb(38, 31, 27), // RibbonMinimizeBarDark + Color.FromArgb(150, 150, 150), // RibbonMinimizeBarLight + Color.Black, // RibbonGroupCollapsedBorder1 + Color.Black, // RibbonGroupCollapsedBorder2 + Color.FromArgb(85, 78, 75), // RibbonGroupCollapsedBorder3 + Color.FromArgb(145, 133, 129), // RibbonGroupCollapsedBorder4 + Color.FromArgb(167, 167, 168), // RibbonGroupCollapsedBack1 + Color.FromArgb(95, 93, 93), // RibbonGroupCollapsedBack2 + Color.FromArgb(23, 21, 20), // RibbonGroupCollapsedBack3 + Color.FromArgb(92, 60, 52), // RibbonGroupCollapsedBack4 + Color.Black, // RibbonGroupCollapsedBorderT1 + Color.Black, // RibbonGroupCollapsedBorderT2 + Color.FromArgb(146, 89, 48), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(196, 132, 85), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(182, 173, 166), // RibbonGroupCollapsedBackT1 + Color.FromArgb(121, 105, 92), // RibbonGroupCollapsedBackT2 + Color.FromArgb(61, 37, 19), // RibbonGroupCollapsedBackT3 + Color.FromArgb(191, 119, 56), // RibbonGroupCollapsedBackT4 + Color.Black, // RibbonGroupFrameBorder1 + Color.Gray, // RibbonGroupFrameBorder2 + Color.FromArgb(225, 225, 225), // RibbonGroupFrameInside1 + Color.FromArgb(170, 170, 170), // RibbonGroupFrameInside2 + Color.FromArgb(150, 150, 150), // RibbonGroupFrameInside3 + Color.FromArgb(205, 205, 205), // RibbonGroupFrameInside4 + Color.White, // RibbonGroupCollapsedText + Color.FromArgb(172, 163, 158), // AlternatePressedBack1 + Color.FromArgb(216, 215, 212), // AlternatePressedBack2 + Color.FromArgb(125, 125, 124), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(67, 55, 43), // FormButtonBack1Checked + Color.FromArgb(140, 122, 106), // FormButtonBack2Checked + Color.FromArgb(18, 18, 18), // FormButtonBorderCheck + Color.FromArgb(57, 45, 33), // FormButtonBack1CheckTrack + Color.FromArgb(170, 152, 136), // FormButtonBack2CheckTrack + Color.FromArgb(23, 21, 20), // RibbonQATMini1 + Color.FromArgb(150, 150, 150), // RibbonQATMini2 + Color.FromArgb(45, 45, 45), // RibbonQATMini3 + Color.FromArgb(14, Color.White), // RibbonQATMini4 + Color.FromArgb(14, Color.White), // RibbonQATMini5 + Color.Black, // RibbonQATMini1I + Color.Black, // RibbonQATMini2I + Color.Black, // RibbonQATMini3I + Color.FromArgb(14, Color.White), // RibbonQATMini4I + Color.FromArgb(14, Color.White), // RibbonQATMini5I + Color.FromArgb(150, 150, 150), // RibbonQATFullbar1 + Color.FromArgb(45, 45, 45), // RibbonQATFullbar2 + Color.FromArgb(23, 21, 20), // RibbonQATFullbar3 + Color.Black, // RibbonQATButtonDark + Color.White, // RibbonQATButtonLight + Color.FromArgb(240, 240, 240), // RibbonQATOverflow1 + Color.Black, // RibbonQATOverflow2 + Color.Gray, // RibbonGroupSeparatorDark + Color.Black, // RibbonGroupSeparatorLight + Color.FromArgb(219, 217, + 210), // ButtonClusterButtonBack1 + Color.FromArgb(223, 222, + 214), // ButtonClusterButtonBack2 + Color.FromArgb(191, 188, + 179), // ButtonClusterButtonBorder1 + Color.FromArgb(159, 156, + 145), // ButtonClusterButtonBorder2 + Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.FromArgb(219, 215, 212), // GridListNormal2 + Color.FromArgb(218, 213, 210), // GridListPressed1 + Color.FromArgb(253, 253, 252), // GridListPressed2 + Color.FromArgb(194, 189, 186), // GridListSelected + Color.FromArgb(248, 248, 248), // GridSheetColNormal1 + Color.FromArgb(222, 222, 222), // GridSheetColNormal2 + Color.FromArgb(224, 224, 224), // GridSheetColPressed1 + Color.FromArgb(195, 195, 195), // GridSheetColPressed2 + Color.FromArgb(159, 217, 249), // GridSheetColSelected1 + Color.FromArgb(95, 193, 241), // GridSheetColSelected2 + Color.FromArgb(237, 237, 237), // GridSheetRowNormal + Color.FromArgb(196, 196, 196), // GridSheetRowPressed + Color.FromArgb(141, 213, 255), // GridSheetRowSelected + Color.FromArgb(209, 195, 188), // GridDataCellBorder + Color.FromArgb(230, 207, 184), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(153, 168, 172), // InputControlTextDisabled + Color.FromArgb(137, 137, 137), // InputControlBorderNormal + Color.FromArgb(204, 204, 204), // InputControlBorderDisabled + Color.White, // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(232, 232, 232), // InputControlBackInactive + Color.FromArgb(124, 124, 124), // InputDropDownNormal1 + Color.FromArgb(203, 248, 255), // InputDropDownNormal2 + Color.FromArgb(153, 168, 172), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(235, 235, 235), // ContextMenuHeading + Color.FromArgb(92, 83, 76), // ContextMenuHeadingText + Color.FromArgb(239, 239, 239), // ContextMenuImageColumn + Color.FromArgb(108, 108, 109), // AppButtonBack1 + Color.FromArgb(103, 103, 104), // AppButtonBack2 + Color.Black, // AppButtonBorder + Color.FromArgb(23, 21, 20), // AppButtonOuter1 + Color.Black, // AppButtonOuter2 + Color.FromArgb(23, 21, 20), // AppButtonOuter3 + Color.FromArgb(23, 21, 20), // AppButtonInner1 + Color.Black, // AppButtonInner2 + Color.FromArgb(242, 237, 237), // AppButtonMenuDocs + Color.Black, // AppButtonMenuDocsText + Color.FromArgb(242, 241, 240), // SeparatorHighInternalBorder1 + Color.FromArgb(206, 200, 195), // SeparatorHighInternalBorder2 + Color.Black, // RibbonGalleryBorder + Color.FromArgb(215, 215, 215), // RibbonGalleryBackNormal + Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking + Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 + Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion @@ -308,8 +328,8 @@ static PaletteSparkleOrange() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparkleOrange); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparkleOrangeT, @@ -318,7 +338,7 @@ static PaletteSparkleOrange() SparkleRadioButtonImageResources.RadioButtonSparkleOrangeNC, SparkleRadioButtonImageResources.RadioButtonSparkleOrangeTC, SparkleRadioButtonImageResources.RadioButtonSparkleOrangePC - }; + ]; } /// @@ -330,6 +350,7 @@ public PaletteSparkleOrange() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparkleOrange); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparklePurple.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparklePurple.cs index eb281ef78..74afb29e8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparklePurple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Sparkle/Official Themes/PaletteSparklePurple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,283 +19,303 @@ public class PaletteSparklePurple : PaletteSparkleBase { #region Static Fields private static readonly ImageList _checkBoxList; - private static readonly Image[] _radioButtonArray; + private static readonly Image?[] _radioButtonArray; - private static readonly Color[] _appButtonNormal = { Color.FromArgb(243, 245, 248), - Color.FromArgb(214, 220, 231), - Color.FromArgb(188, 198, 211), - Color.FromArgb(254, 254, 255), - Color.FromArgb(206, 213, 225) }; + private static readonly Color[] _appButtonNormal = + [ + Color.FromArgb(243, 245, 248), + Color.FromArgb(214, 220, 231), + Color.FromArgb(188, 198, 211), + Color.FromArgb(254, 254, 255), + Color.FromArgb(206, 213, 225) + ]; - private static readonly Color[] _appButtonTrack = { Color.FromArgb(239, 215, 245), - Color.FromArgb(214, 146, 238), - Color.FromArgb(155, 60, 201), - Color.FromArgb(201, 93, 248), - Color.FromArgb(168, 25, 238) }; + private static readonly Color[] _appButtonTrack = + [ + Color.FromArgb(239, 215, 245), + Color.FromArgb(214, 146, 238), + Color.FromArgb(155, 60, 201), + Color.FromArgb(201, 93, 248), + Color.FromArgb(168, 25, 238) + ]; - private static readonly Color[] _appButtonPressed = { Color.FromArgb(227, 196, 235), - Color.FromArgb(198, 149, 228), - Color.FromArgb(97, 7, 166), - Color.FromArgb(155, 57, 242), - Color.FromArgb(136, 9, 236) }; + private static readonly Color[] _appButtonPressed = + [ + Color.FromArgb(227, 196, 235), + Color.FromArgb(198, 149, 228), + Color.FromArgb(97, 7, 166), + Color.FromArgb(155, 57, 242), + Color.FromArgb(136, 9, 236) + ]; - private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = { Color.FromArgb(128, 184, 168, 196), - Color.FromArgb(184, 168, 196), - Color.FromArgb(48, 255, 255, 255), - Color.FromArgb(207, 192, 220) }; + private static readonly Color[] _ribbonGroupCollapsedBorderContextTracking = + [ + Color.FromArgb(128, 184, 168, 196), + Color.FromArgb(184, 168, 196), + Color.FromArgb(48, 255, 255, 255), + Color.FromArgb(207, 192, 220) + ]; - private static readonly Color[] _sparkleColors = { Color.FromArgb(99, 108, 135), // 0 _colorDark99 - Color.FromArgb(86, 94, 118), // 1 _colorDark86 - Color.FromArgb(72, 81, 102), // 2 _colorDark72 - Color.FromArgb(45, 45, 45), // 3 _colorDark45 - Color.FromArgb(27, 31, 38), // 4 _colorDark27 - Color.FromArgb(20, 21, 23), // 5 _colorDark20 - Color.FromArgb(37, 19, 61), // 6 _buttonTrackBack1 - Color.FromArgb(129, 60, 206), // 7 _buttonTrackBack2 - Color.FromArgb(30, 13, 52), // 8 _buttonPressBack1 - Color.FromArgb(205, 125, 248), // 9 _buttonPressBack2 - Color.FromArgb(66, 28, 160), // 10 _buttonCheckBack1 - Color.FromArgb(198, 87, 239), // 11 _buttonCheckBack2 - Color.FromArgb(65, 14, 204), // 12 _buttonCheckTrackBack1 - Color.FromArgb(212, 112, 255), // 13 _buttonCheckTrackBack2 - Color.FromArgb(65, 27, 160), // 14 _buttonCheckPressBack1 - Color.FromArgb(153, 51, 255), // 15 _colorBlue - Color.FromArgb(89, 29, 131), // 16 _menuItemHeading - Color.FromArgb(164, 236, 225, 244), // 17 _menuItemTrackBack1 - Color.FromArgb(164, 215, 181, 231), // 18 _menuItemTrackBack2 - Color.FromArgb(164, 187, 91, 230), // 19 _menuItemTrackBorder - Color.FromArgb(239, 230, 244), // 20 _menuItemCheckedBack - Color.FromArgb(196, 190, 230), // 21 _menuItemCheckedBorder - Color.FromArgb(57, 66, 102), // 22 _buttonBack2 - Color.FromArgb(175, 57, 250), // 23 _buttonDefaultBack - Color.FromArgb(219, 177, 242), // 24 _gridHeaderTracking1 - Color.FromArgb(218, 180, 242), // 25 _gridHeaderTracking2 - Color.FromArgb(198, 145, 228), // 26 _gridHeaderPressed1 - Color.FromArgb(197, 148, 228), // 27 _gridHeaderPressed2 - Color.FromArgb(190, 190, 190), // 28 _gridCellBorder - Color.FromArgb(180, 79, 239), // 29 _tabCheckedNormal - Color.FromArgb(89, 48, 146), // 30 _ribbonFrameBorder1 - Color.FromArgb(132, 85, 196), // 31 _ribbonFrameBorder1 - Color.FromArgb(220, 209, 235), // 32 _ribbonFrameBack1 - Color.FromArgb(211, 202, 222), // 33 _ribbonFrameBack2 - Color.FromArgb(196, 176, 222), // 34 _ribbonFrameBack3 - Color.FromArgb(120, 82, 213), // 35 _ribbonFrameBack3 - Color.FromArgb(110, 72, 213), // 36 _contextCheckedTabFill - Color.FromArgb(20, 10, 255) // 37 _focusTabFill - }; + private static readonly Color[] _sparkleColors = + [ + Color.FromArgb(99, 108, 135), // 0 _colorDark99 + Color.FromArgb(86, 94, 118), // 1 _colorDark86 + Color.FromArgb(72, 81, 102), // 2 _colorDark72 + Color.FromArgb(45, 45, 45), // 3 _colorDark45 + Color.FromArgb(27, 31, 38), // 4 _colorDark27 + Color.FromArgb(20, 21, 23), // 5 _colorDark20 + Color.FromArgb(37, 19, 61), // 6 _buttonTrackBack1 + Color.FromArgb(129, 60, 206), // 7 _buttonTrackBack2 + Color.FromArgb(30, 13, 52), // 8 _buttonPressBack1 + Color.FromArgb(205, 125, 248), // 9 _buttonPressBack2 + Color.FromArgb(66, 28, 160), // 10 _buttonCheckBack1 + Color.FromArgb(198, 87, 239), // 11 _buttonCheckBack2 + Color.FromArgb(65, 14, 204), // 12 _buttonCheckTrackBack1 + Color.FromArgb(212, 112, 255), // 13 _buttonCheckTrackBack2 + Color.FromArgb(65, 27, 160), // 14 _buttonCheckPressBack1 + Color.FromArgb(153, 51, 255), // 15 _colorBlue + Color.FromArgb(89, 29, 131), // 16 _menuItemHeading + Color.FromArgb(164, 236, 225, 244), // 17 _menuItemTrackBack1 + Color.FromArgb(164, 215, 181, 231), // 18 _menuItemTrackBack2 + Color.FromArgb(164, 187, 91, 230), // 19 _menuItemTrackBorder + Color.FromArgb(239, 230, 244), // 20 _menuItemCheckedBack + Color.FromArgb(196, 190, 230), // 21 _menuItemCheckedBorder + Color.FromArgb(57, 66, 102), // 22 _buttonBack2 + Color.FromArgb(175, 57, 250), // 23 _buttonDefaultBack + Color.FromArgb(219, 177, 242), // 24 _gridHeaderTracking1 + Color.FromArgb(218, 180, 242), // 25 _gridHeaderTracking2 + Color.FromArgb(198, 145, 228), // 26 _gridHeaderPressed1 + Color.FromArgb(197, 148, 228), // 27 _gridHeaderPressed2 + Color.FromArgb(190, 190, 190), // 28 _gridCellBorder + Color.FromArgb(180, 79, 239), // 29 _tabCheckedNormal + Color.FromArgb(89, 48, 146), // 30 _ribbonFrameBorder1 + Color.FromArgb(132, 85, 196), // 31 _ribbonFrameBorder1 + Color.FromArgb(220, 209, 235), // 32 _ribbonFrameBack1 + Color.FromArgb(211, 202, 222), // 33 _ribbonFrameBack2 + Color.FromArgb(196, 176, 222), // 34 _ribbonFrameBack3 + Color.FromArgb(120, 82, 213), // 35 _ribbonFrameBack3 + Color.FromArgb(110, 72, 213), // 36 _contextCheckedTabFill + Color.FromArgb(20, 10, 255) // 37 _focusTabFill + ]; - private static readonly Color[] _ribbonColors = { Color.FromArgb( 76, 83, 92), // TextLabelControl - Color.FromArgb( 70, 70, 70), // TextButtonNormal - Color.Black, // TextButtonChecked - Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 - Color.FromArgb(127, 125, 123), // ButtonNormalBorder2 - Color.FromArgb(203, 213, 223), // ButtonNormalBack1 - Color.FromArgb(255, 255, 255), // ButtonNormalBack2 - Color.FromArgb(192, 187, 198), // ButtonNormalDefaultBack1 - Color.FromArgb(227, 224, 231), // ButtonNormalDefaultBack2 - Color.FromArgb(208, 204, 214), // ButtonNormalNavigatorBack1 - Color.FromArgb(232, 229, 236), // ButtonNormalNavigatorBack2 - Color.FromArgb( 83, 83, 83), // PanelClient - Color.FromArgb( 70, 70, 70), // PanelAlternative - Color.FromArgb( 30, 30, 30), // ControlBorder - Color.FromArgb(167, 167, 167), // SeparatorHighBorder1 - Color.FromArgb(119, 119, 119), // SeparatorHighBorder2 - Color.FromArgb(240, 241, 242), // HeaderPrimaryBack1 - Color.FromArgb(189, 193, 200), // HeaderPrimaryBack2 - Color.FromArgb(221, 224, 227), // HeaderSecondaryBack1 - Color.FromArgb(221, 224, 227), // HeaderSecondaryBack2 - Color.Black, // HeaderText - Color.White, // StatusStripText - Color.FromArgb(155, 163, 167), // ButtonBorder - Color.FromArgb(200, 200, 200), // SeparatorLight - Color.FromArgb(86, 94, 118), // SeparatorDark - Color.FromArgb(190, 190, 190), // GripLight - Color.Black, // GripDark - Color.FromArgb(99, 108, 135), // ToolStripBack - Color.FromArgb(99, 108, 135), // StatusStripLight - Color.Black, // StatusStripDark - Color.FromArgb(240, 240, 240), // ImageMargin - Color.FromArgb(200, 200, 200), // ToolStripBegin - Color.FromArgb(99, 108, 135), // ToolStripMiddle - Color.FromArgb(72, 81, 102), // ToolStripEnd - Color.FromArgb(72, 81, 102), // OverflowBegin - Color.FromArgb(72, 81, 102), // OverflowMiddle - Color.FromArgb( 30, 30, 30), // OverflowEnd - Color.FromArgb( 30, 30, 30), // ToolStripBorder - Color.FromArgb( 47, 47, 47), // FormBorderActive - Color.FromArgb(146, 146, 146), // FormBorderInactive - Color.FromArgb( 77, 77, 77), // FormBorderActiveLight - Color.FromArgb(102, 102, 102), // FormBorderActiveDark - Color.FromArgb(153, 153, 153), // FormBorderInactiveLight - Color.FromArgb(171, 171, 171), // FormBorderInactiveDark - Color.FromArgb( 65, 65, 65), // FormBorderHeaderActive - Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive - Color.FromArgb( 42, 43, 43), // FormBorderHeaderActive1 - Color.FromArgb( 74, 74, 74), // FormBorderHeaderActive2 - Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 - Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 - Color.FromArgb(209, 174, 255), // FormHeaderShortActive - Color.FromArgb(225, 225, 225), // FormHeaderShortInactive - Color.FromArgb(255, 255, 255), // FormHeaderLongActive - Color.FromArgb(225, 225, 225), // FormHeaderLongInactive - Color.FromArgb(95, 88, 104), // FormButtonBorderTrack - Color.FromArgb(105, 91, 123), // FormButtonBack1Track - Color.FromArgb(199, 173, 214), // FormButtonBack2Track - Color.FromArgb( 18, 18, 18), // FormButtonBorderPressed - Color.FromArgb( 0, 0, 0), // FormButtonBack1Pressed - Color.FromArgb( 83, 65, 102), // FormButtonBack2Pressed - Color.FromArgb( 70, 70, 70), // TextButtonFormNormal - Color.FromArgb(255, 255, 255), // TextButtonFormTracking - Color.FromArgb(255, 255, 255), // TextButtonFormPressed - Color.Blue, // LinkNotVisitedOverrideControl - Color.Purple, // LinkVisitedOverrideControl - Color.Red, // LinkPressedOverrideControl - Color.FromArgb(180, 210, 255), // LinkNotVisitedOverridePanel - Color.Violet, // LinkVisitedOverridePanel - Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel - Color.White, // TextLabelPanel - Color.White, // RibbonTabTextNormal - Color.Black, // RibbonTabTextChecked - Color.Black, // RibbonTabSelected1 - Color.Silver, // RibbonTabSelected2 - Color.FromArgb(177, 177, 188), // RibbonTabSelected3 - Color.FromArgb(167, 167, 178), // RibbonTabSelected4 - Color.FromArgb(137, 137, 148), // RibbonTabSelected5 - Color.FromArgb(159, 156, 150), // RibbonTabTracking1 - Color.FromArgb(200, 200, 255), // RibbonTabTracking2 - Color.Black, // RibbonTabHighlight1 - Color.FromArgb(145, 107, 238), // RibbonTabHighlight2 - Color.FromArgb(135, 97, 228), // RibbonTabHighlight3 - Color.FromArgb(120, 82, 213), // RibbonTabHighlight4 - Color.FromArgb(137, 137, 148), // RibbonTabHighlight5 - Color.Black, // RibbonTabSeparatorColor - Color.Black, // RibbonGroupsArea1 - Color.Black, // RibbonGroupsArea2 - Color.FromArgb( 96, 96, 110), // RibbonGroupsArea3 - Color.FromArgb(140, 140, 150), // RibbonGroupsArea4 - Color.FromArgb(140, 140, 150), // RibbonGroupsArea5 - Color.Black, // RibbonGroupBorder1 - Color.Black, // RibbonGroupBorder2 - Color.DimGray, // RibbonGroupTitle1 - Color.Black, // RibbonGroupTitle2 - Color.Black, // RibbonGroupBorderContext1 - Color.Black, // RibbonGroupBorderContext2 - Color.DimGray, // RibbonGroupTitleContext1 - Color.Black, // RibbonGroupTitleContext2 - Color.Black, // RibbonGroupDialogDark - Color.White, // RibbonGroupDialogLight - Color.FromArgb(120, 120, 120), // RibbonGroupTitleTracking1 - Color.FromArgb(65, 65, 65), // RibbonGroupTitleTracking2 - Color.FromArgb(27, 31, 38), // RibbonMinimizeBarDark - Color.FromArgb(150, 150, 150), // RibbonMinimizeBarLight - Color.Black, // RibbonGroupCollapsedBorder1 - Color.Black, // RibbonGroupCollapsedBorder2 - Color.FromArgb( 75, 78, 85), // RibbonGroupCollapsedBorder3 - Color.FromArgb(133, 129, 145), // RibbonGroupCollapsedBorder4 - Color.FromArgb(167, 167, 168), // RibbonGroupCollapsedBack1 - Color.FromArgb( 93, 93, 95), // RibbonGroupCollapsedBack2 - Color.FromArgb( 21, 20, 23), // RibbonGroupCollapsedBack3 - Color.FromArgb( 60, 52, 92), // RibbonGroupCollapsedBack4 - Color.Black, // RibbonGroupCollapsedBorderT1 - Color.Black, // RibbonGroupCollapsedBorderT2 - Color.FromArgb( 89, 48, 146), // RibbonGroupCollapsedBorderT3 - Color.FromArgb( 132, 85,196), // RibbonGroupCollapsedBorderT4 - Color.FromArgb( 173, 166,182), // RibbonGroupCollapsedBackT1 - Color.FromArgb( 105, 92,121), // RibbonGroupCollapsedBackT2 - Color.FromArgb( 37, 19, 61), // RibbonGroupCollapsedBackT3 - Color.FromArgb( 119, 56,191), // RibbonGroupCollapsedBackT4 - Color.Black, // RibbonGroupFrameBorder1 - Color.Gray, // RibbonGroupFrameBorder2 - Color.FromArgb(225, 225, 225), // RibbonGroupFrameInside1 - Color.FromArgb(170, 170, 170), // RibbonGroupFrameInside2 - Color.FromArgb(150, 150, 150), // RibbonGroupFrameInside3 - Color.FromArgb(205, 205, 205), // RibbonGroupFrameInside4 - Color.White, // RibbonGroupCollapsedText - Color.FromArgb(163, 158, 172), // AlternatePressedBack1 - Color.FromArgb(215, 212, 216), // AlternatePressedBack2 - Color.FromArgb(125, 124, 125), // AlternatePressedBorder1 - Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 - Color.FromArgb( 55, 43, 67), // FormButtonBack1Checked - Color.FromArgb( 122, 106,140), // FormButtonBack2Checked - Color.FromArgb( 18, 18, 18), // FormButtonBorderCheck - Color.FromArgb( 45, 33, 57), // FormButtonBack1CheckTrack - Color.FromArgb( 152, 136,170), // FormButtonBack2CheckTrack - Color.FromArgb(20, 21, 23), // RibbonQATMini1 - Color.FromArgb(150, 150, 150), // RibbonQATMini2 - Color.FromArgb(45, 45, 45), // RibbonQATMini3 - Color.FromArgb(14, Color.White), // RibbonQATMini4 - Color.FromArgb(14, Color.White), // RibbonQATMini5 - Color.Black, // RibbonQATMini1I - Color.Black, // RibbonQATMini2I - Color.Black, // RibbonQATMini3I - Color.FromArgb(14, Color.White), // RibbonQATMini4I - Color.FromArgb(14, Color.White), // RibbonQATMini5I - Color.FromArgb(150, 150, 150), // RibbonQATFullbar1 - Color.FromArgb(45, 45, 45), // RibbonQATFullbar2 - Color.FromArgb(20, 21, 23), // RibbonQATFullbar3 - Color.Black, // RibbonQATButtonDark - Color.White, // RibbonQATButtonLight - Color.FromArgb(240, 240, 240), // RibbonQATOverflow1 - Color.Black, // RibbonQATOverflow2 - Color.Gray, // RibbonGroupSeparatorDark - Color.Black, // RibbonGroupSeparatorLight - Color.FromArgb(210, 217, 219), // ButtonClusterButtonBack1 - Color.FromArgb(214, 222, 223), // ButtonClusterButtonBack2 - Color.FromArgb(179, 188, 191), // ButtonClusterButtonBorder1 - Color.FromArgb(145, 156, 159), // ButtonClusterButtonBorder2 - Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor - Color.White, // GridListNormal1 - Color.FromArgb(212, 215, 219), // GridListNormal2 - Color.FromArgb(213, 210, 218), // GridListPressed1 - Color.FromArgb( 253,252, 253), // GridListPressed2 - Color.FromArgb(186, 189, 194), // GridListSelected - Color.FromArgb(248, 248, 248), // GridSheetColNormal1 - Color.FromArgb(222, 222, 222), // GridSheetColNormal2 - Color.FromArgb(224, 224, 224), // GridSheetColPressed1 - Color.FromArgb(195, 195, 195), // GridSheetColPressed2 - Color.FromArgb(217, 249, 159), // GridSheetColSelected1 - Color.FromArgb(193, 241, 95), // GridSheetColSelected2 - Color.FromArgb(237, 237, 237), // GridSheetRowNormal - Color.FromArgb(196, 196, 196), // GridSheetRowPressed - Color.FromArgb( 213,255, 141), // GridSheetRowSelected - Color.FromArgb(195,188, 209), // GridDataCellBorder - Color.FromArgb(217,194, 240), // GridDataCellSelected - Color.Black, // InputControlTextNormal - Color.FromArgb(172, 168, 153), // InputControlTextDisabled - Color.FromArgb(137, 137, 137), // InputControlBorderNormal - Color.FromArgb(204, 204, 204), // InputControlBorderDisabled - Color.White, // InputControlBackNormal - SystemColors.Control, // InputControlBackDisabled - Color.FromArgb(232, 232, 232), // InputControlBackInactive - Color.FromArgb(124, 124, 124), // InputDropDownNormal1 - Color.FromArgb(255, 248, 203), // InputDropDownNormal2 - Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 - Color.Transparent, // InputDropDownDisabled2 - Color.FromArgb(235, 235, 235), // ContextMenuHeading - Color.FromArgb( 76, 83, 92), // ContextMenuHeadingText - Color.FromArgb(239, 239, 239), // ContextMenuImageColumn - Color.FromArgb(109, 108, 108), // AppButtonBack1 - Color.FromArgb(104, 103, 103), // AppButtonBack2 - Color.Black, // AppButtonBorder - Color.FromArgb(20, 21, 23), // AppButtonOuter1 - Color.Black, // AppButtonOuter2 - Color.FromArgb(20, 21, 23), // AppButtonOuter3 - Color.FromArgb(20, 21, 23), // AppButtonInner1 - Color.Black, // AppButtonInner2 - Color.FromArgb(237, 237, 242), // AppButtonMenuDocs - Color.Black, // AppButtonMenuDocsText - Color.FromArgb(240, 241, 242), // SeparatorHighInternalBorder1 - Color.FromArgb(195, 200, 206), // SeparatorHighInternalBorder2 - Color.Black, // RibbonGalleryBorder - Color.FromArgb(215, 215, 215), // RibbonGalleryBackNormal - Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking - Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 - Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 - Color.Empty, // RibbonTabTracking3 - Color.Empty, // RibbonTabTracking4 - Color.Empty, // RibbonGroupBorder3 - Color.Empty // RibbonGroupBorder4 - }; + private static readonly Color[] _ribbonColors = + [ + Color.FromArgb(76, 83, 92), // TextLabelControl + Color.FromArgb(70, 70, 70), // TextButtonNormal + Color.Black, // TextButtonChecked + Color.FromArgb(137, 135, 133), // ButtonNormalBorder1 + Color.FromArgb(127, 125, 123), // ButtonNormalBorder2 + Color.FromArgb(203, 213, 223), // ButtonNormalBack1 + Color.FromArgb(255, 255, 255), // ButtonNormalBack2 + Color.FromArgb(192, 187, 198), // ButtonNormalDefaultBack1 + Color.FromArgb(227, 224, 231), // ButtonNormalDefaultBack2 + Color.FromArgb(208, 204, 214), // ButtonNormalNavigatorBack1 + Color.FromArgb(232, 229, 236), // ButtonNormalNavigatorBack2 + Color.FromArgb(83, 83, 83), // PanelClient + Color.FromArgb(70, 70, 70), // PanelAlternative + Color.FromArgb(30, 30, 30), // ControlBorder + Color.FromArgb(167, 167, 167), // SeparatorHighBorder1 + Color.FromArgb(119, 119, 119), // SeparatorHighBorder2 + Color.FromArgb(240, 241, 242), // HeaderPrimaryBack1 + Color.FromArgb(189, 193, 200), // HeaderPrimaryBack2 + Color.FromArgb(221, 224, 227), // HeaderSecondaryBack1 + Color.FromArgb(221, 224, 227), // HeaderSecondaryBack2 + Color.Black, // HeaderText + Color.White, // StatusStripText + Color.FromArgb(155, 163, 167), // ButtonBorder + Color.FromArgb(200, 200, 200), // SeparatorLight + Color.FromArgb(86, 94, 118), // SeparatorDark + Color.FromArgb(190, 190, 190), // GripLight + Color.Black, // GripDark + Color.FromArgb(99, 108, 135), // ToolStripBack + Color.FromArgb(99, 108, 135), // StatusStripLight + Color.Black, // StatusStripDark + Color.FromArgb(240, 240, 240), // ImageMargin + Color.FromArgb(200, 200, 200), // ToolStripBegin + Color.FromArgb(99, 108, 135), // ToolStripMiddle + Color.FromArgb(72, 81, 102), // ToolStripEnd + Color.FromArgb(72, 81, 102), // OverflowBegin + Color.FromArgb(72, 81, 102), // OverflowMiddle + Color.FromArgb(30, 30, 30), // OverflowEnd + Color.FromArgb(30, 30, 30), // ToolStripBorder + Color.FromArgb(47, 47, 47), // FormBorderActive + Color.FromArgb(146, 146, 146), // FormBorderInactive + Color.FromArgb(77, 77, 77), // FormBorderActiveLight + Color.FromArgb(102, 102, 102), // FormBorderActiveDark + Color.FromArgb(153, 153, 153), // FormBorderInactiveLight + Color.FromArgb(171, 171, 171), // FormBorderInactiveDark + Color.FromArgb(65, 65, 65), // FormBorderHeaderActive + Color.FromArgb(154, 154, 154), // FormBorderHeaderInactive + Color.FromArgb(42, 43, 43), // FormBorderHeaderActive1 + Color.FromArgb(74, 74, 74), // FormBorderHeaderActive2 + Color.FromArgb(146, 146, 146), // FormBorderHeaderInctive1 + Color.FromArgb(158, 158, 158), // FormBorderHeaderInctive2 + Color.FromArgb(209, 174, 255), // FormHeaderShortActive + Color.FromArgb(225, 225, 225), // FormHeaderShortInactive + Color.FromArgb(255, 255, 255), // FormHeaderLongActive + Color.FromArgb(225, 225, 225), // FormHeaderLongInactive + Color.FromArgb(95, 88, 104), // FormButtonBorderTrack + Color.FromArgb(105, 91, 123), // FormButtonBack1Track + Color.FromArgb(199, 173, 214), // FormButtonBack2Track + Color.FromArgb(18, 18, 18), // FormButtonBorderPressed + Color.FromArgb(0, 0, 0), // FormButtonBack1Pressed + Color.FromArgb(83, 65, 102), // FormButtonBack2Pressed + Color.FromArgb(70, 70, 70), // TextButtonFormNormal + Color.FromArgb(255, 255, 255), // TextButtonFormTracking + Color.FromArgb(255, 255, 255), // TextButtonFormPressed + Color.Blue, // LinkNotVisitedOverrideControl + Color.Purple, // LinkVisitedOverrideControl + Color.Red, // LinkPressedOverrideControl + Color.FromArgb(180, 210, 255), // LinkNotVisitedOverridePanel + Color.Violet, // LinkVisitedOverridePanel + Color.FromArgb(255, 90, 90), // LinkPressedOverridePanel + Color.White, // TextLabelPanel + Color.White, // RibbonTabTextNormal + Color.Black, // RibbonTabTextChecked + Color.Black, // RibbonTabSelected1 + Color.Silver, // RibbonTabSelected2 + Color.FromArgb(177, 177, 188), // RibbonTabSelected3 + Color.FromArgb(167, 167, 178), // RibbonTabSelected4 + Color.FromArgb(137, 137, 148), // RibbonTabSelected5 + Color.FromArgb(159, 156, 150), // RibbonTabTracking1 + Color.FromArgb(200, 200, 255), // RibbonTabTracking2 + Color.Black, // RibbonTabHighlight1 + Color.FromArgb(145, 107, 238), // RibbonTabHighlight2 + Color.FromArgb(135, 97, 228), // RibbonTabHighlight3 + Color.FromArgb(120, 82, 213), // RibbonTabHighlight4 + Color.FromArgb(137, 137, 148), // RibbonTabHighlight5 + Color.Black, // RibbonTabSeparatorColor + Color.FromArgb(140, 140, 150), // RibbonGroupsArea1 + Color.FromArgb(140, 140, 150), // RibbonGroupsArea2 + Color.FromArgb(96, 96, 110), // RibbonGroupsArea3 + Color.FromArgb(0, 0, 0), // RibbonGroupsArea4 + Color.FromArgb(0, 0, 0), // RibbonGroupsArea5 + Color.Black, // RibbonGroupBorder1 + Color.Black, // RibbonGroupBorder2 + Color.DimGray, // RibbonGroupTitle1 + Color.Black, // RibbonGroupTitle2 + Color.Black, // RibbonGroupBorderContext1 + Color.Black, // RibbonGroupBorderContext2 + Color.DimGray, // RibbonGroupTitleContext1 + Color.Black, // RibbonGroupTitleContext2 + Color.Black, // RibbonGroupDialogDark + Color.White, // RibbonGroupDialogLight + Color.FromArgb(120, 120, 120), // RibbonGroupTitleTracking1 + Color.FromArgb(65, 65, 65), // RibbonGroupTitleTracking2 + Color.FromArgb(27, 31, 38), // RibbonMinimizeBarDark + Color.FromArgb(150, 150, 150), // RibbonMinimizeBarLight + Color.Black, // RibbonGroupCollapsedBorder1 + Color.Black, // RibbonGroupCollapsedBorder2 + Color.FromArgb(75, 78, 85), // RibbonGroupCollapsedBorder3 + Color.FromArgb(133, 129, 145), // RibbonGroupCollapsedBorder4 + Color.FromArgb(167, 167, 168), // RibbonGroupCollapsedBack1 + Color.FromArgb(93, 93, 95), // RibbonGroupCollapsedBack2 + Color.FromArgb(21, 20, 23), // RibbonGroupCollapsedBack3 + Color.FromArgb(60, 52, 92), // RibbonGroupCollapsedBack4 + Color.Black, // RibbonGroupCollapsedBorderT1 + Color.Black, // RibbonGroupCollapsedBorderT2 + Color.FromArgb(89, 48, 146), // RibbonGroupCollapsedBorderT3 + Color.FromArgb(132, 85, 196), // RibbonGroupCollapsedBorderT4 + Color.FromArgb(173, 166, 182), // RibbonGroupCollapsedBackT1 + Color.FromArgb(105, 92, 121), // RibbonGroupCollapsedBackT2 + Color.FromArgb(37, 19, 61), // RibbonGroupCollapsedBackT3 + Color.FromArgb(119, 56, 191), // RibbonGroupCollapsedBackT4 + Color.Black, // RibbonGroupFrameBorder1 + Color.Gray, // RibbonGroupFrameBorder2 + Color.FromArgb(225, 225, 225), // RibbonGroupFrameInside1 + Color.FromArgb(170, 170, 170), // RibbonGroupFrameInside2 + Color.FromArgb(150, 150, 150), // RibbonGroupFrameInside3 + Color.FromArgb(205, 205, 205), // RibbonGroupFrameInside4 + Color.White, // RibbonGroupCollapsedText + Color.FromArgb(163, 158, 172), // AlternatePressedBack1 + Color.FromArgb(215, 212, 216), // AlternatePressedBack2 + Color.FromArgb(125, 124, 125), // AlternatePressedBorder1 + Color.FromArgb(186, 186, 186), // AlternatePressedBorder2 + Color.FromArgb(55, 43, 67), // FormButtonBack1Checked + Color.FromArgb(122, 106, 140), // FormButtonBack2Checked + Color.FromArgb(18, 18, 18), // FormButtonBorderCheck + Color.FromArgb(45, 33, 57), // FormButtonBack1CheckTrack + Color.FromArgb(152, 136, 170), // FormButtonBack2CheckTrack + Color.FromArgb(20, 21, 23), // RibbonQATMini1 + Color.FromArgb(150, 150, 150), // RibbonQATMini2 + Color.FromArgb(45, 45, 45), // RibbonQATMini3 + Color.FromArgb(14, Color.White), // RibbonQATMini4 + Color.FromArgb(14, Color.White), // RibbonQATMini5 + Color.Black, // RibbonQATMini1I + Color.Black, // RibbonQATMini2I + Color.Black, // RibbonQATMini3I + Color.FromArgb(14, Color.White), // RibbonQATMini4I + Color.FromArgb(14, Color.White), // RibbonQATMini5I + Color.FromArgb(150, 150, 150), // RibbonQATFullbar1 + Color.FromArgb(45, 45, 45), // RibbonQATFullbar2 + Color.FromArgb(20, 21, 23), // RibbonQATFullbar3 + Color.Black, // RibbonQATButtonDark + Color.White, // RibbonQATButtonLight + Color.FromArgb(240, 240, 240), // RibbonQATOverflow1 + Color.Black, // RibbonQATOverflow2 + Color.Gray, // RibbonGroupSeparatorDark + Color.Black, // RibbonGroupSeparatorLight + Color.FromArgb(210, 217, + 219), // ButtonClusterButtonBack1 + Color.FromArgb(214, 222, + 223), // ButtonClusterButtonBack2 + Color.FromArgb(179, 188, + 191), // ButtonClusterButtonBorder1 + Color.FromArgb(145, 156, + 159), // ButtonClusterButtonBorder2 + Color.FromArgb(235, 235, 235), // NavigatorMiniBackColor + Color.White, // GridListNormal1 + Color.FromArgb(212, 215, 219), // GridListNormal2 + Color.FromArgb(213, 210, 218), // GridListPressed1 + Color.FromArgb(253, 252, 253), // GridListPressed2 + Color.FromArgb(186, 189, 194), // GridListSelected + Color.FromArgb(248, 248, 248), // GridSheetColNormal1 + Color.FromArgb(222, 222, 222), // GridSheetColNormal2 + Color.FromArgb(224, 224, 224), // GridSheetColPressed1 + Color.FromArgb(195, 195, 195), // GridSheetColPressed2 + Color.FromArgb(217, 249, 159), // GridSheetColSelected1 + Color.FromArgb(193, 241, 95), // GridSheetColSelected2 + Color.FromArgb(237, 237, 237), // GridSheetRowNormal + Color.FromArgb(196, 196, 196), // GridSheetRowPressed + Color.FromArgb(213, 255, 141), // GridSheetRowSelected + Color.FromArgb(195, 188, 209), // GridDataCellBorder + Color.FromArgb(217, 194, 240), // GridDataCellSelected + Color.Black, // InputControlTextNormal + Color.FromArgb(172, 168, 153), // InputControlTextDisabled + Color.FromArgb(137, 137, 137), // InputControlBorderNormal + Color.FromArgb(204, 204, 204), // InputControlBorderDisabled + Color.White, // InputControlBackNormal + SystemColors.Control, // InputControlBackDisabled + Color.FromArgb(232, 232, 232), // InputControlBackInactive + Color.FromArgb(124, 124, 124), // InputDropDownNormal1 + Color.FromArgb(255, 248, 203), // InputDropDownNormal2 + Color.FromArgb(172, 168, 153), // InputDropDownDisabled1 + Color.Transparent, // InputDropDownDisabled2 + Color.FromArgb(235, 235, 235), // ContextMenuHeading + Color.FromArgb(76, 83, 92), // ContextMenuHeadingText + Color.FromArgb(239, 239, 239), // ContextMenuImageColumn + Color.FromArgb(109, 108, 108), // AppButtonBack1 + Color.FromArgb(104, 103, 103), // AppButtonBack2 + Color.Black, // AppButtonBorder + Color.FromArgb(20, 21, 23), // AppButtonOuter1 + Color.Black, // AppButtonOuter2 + Color.FromArgb(20, 21, 23), // AppButtonOuter3 + Color.FromArgb(20, 21, 23), // AppButtonInner1 + Color.Black, // AppButtonInner2 + Color.FromArgb(237, 237, 242), // AppButtonMenuDocs + Color.Black, // AppButtonMenuDocsText + Color.FromArgb(240, 241, 242), // SeparatorHighInternalBorder1 + Color.FromArgb(195, 200, 206), // SeparatorHighInternalBorder2 + Color.Black, // RibbonGalleryBorder + Color.FromArgb(215, 215, 215), // RibbonGalleryBackNormal + Color.FromArgb(238, 238, 238), // RibbonGalleryBackTracking + Color.FromArgb(195, 200, 209), // RibbonGalleryBack1 + Color.FromArgb(217, 220, 224), // RibbonGalleryBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking3 + GlobalStaticValues.EMPTY_COLOR, // RibbonTabTracking4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorder3 + GlobalStaticValues.EMPTY_COLOR // RibbonGroupBorder4 + ]; #endregion #region Identity @@ -307,8 +327,8 @@ static PaletteSparklePurple() ColorDepth = ColorDepth.Depth24Bit }; _checkBoxList.Images.AddStrip(CheckBoxStripResources.CheckBoxStripSparklePurple); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ SparkleRadioButtonImageResources.RadioButtonSparkleD, SparkleRadioButtonImageResources.RadioButtonSparkleN, SparkleRadioButtonImageResources.RadioButtonSparklePurpleT, @@ -317,7 +337,7 @@ static PaletteSparklePurple() SparkleRadioButtonImageResources.RadioButtonSparklePurpleNC, SparkleRadioButtonImageResources.RadioButtonSparklePurpleTC, SparkleRadioButtonImageResources.RadioButtonSparklePurplePC - }; + ]; } /// @@ -329,6 +349,7 @@ public PaletteSparklePurple() _ribbonGroupCollapsedBorderContextTracking, _checkBoxList, _radioButtonArray) { + ThemeName = nameof(PaletteSparklePurple); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/PaletteVisualStudioBase.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/PaletteVisualStudioBase.cs index 77ed857fd..8602a7cc7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/PaletteVisualStudioBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/PaletteVisualStudioBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -60,10 +60,10 @@ public abstract class PaletteVisualStudioBase : PaletteBase #region Images - private static readonly Image _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; - private static readonly Image _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; + private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; + private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -82,8 +82,8 @@ public abstract class PaletteVisualStudioBase : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Toolbar Images @@ -161,34 +161,34 @@ public abstract class PaletteVisualStudioBase : PaletteBase #region Color Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(205, 230, 247), // Button, Tracking, Border 1 Color.FromArgb(205, 230, 247), // Button, Tracking, Border 2 @@ -196,10 +196,10 @@ public abstract class PaletteVisualStudioBase : PaletteBase Color.FromArgb(146, 192, 244), // Button, Pressed, Border 2 Color.FromArgb(146, 192, 244), // Button, Checked, Border 1 Color.FromArgb(146, 192, 244) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(205, 230, 247), // Button, Tracking, Back 1 @@ -210,7 +210,7 @@ public abstract class PaletteVisualStudioBase : PaletteBase Color.FromArgb(146, 192, 244), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; #endregion @@ -218,14 +218,14 @@ public abstract class PaletteVisualStudioBase : PaletteBase #region Instance Fields - private KryptonColorTableVisualStudio _table; + private KryptonColorTableVisualStudio? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion @@ -240,13 +240,16 @@ public abstract class PaletteVisualStudioBase : PaletteBase public PaletteVisualStudioBase([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, + Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); Debug.Assert(galleryButtonList != null); Debug.Assert(radioButtonArray != null); + ThemeName = nameof(PaletteVisualStudioBase); + if (schemeColours != null) { _ribbonColours = schemeColours; @@ -277,14 +280,6 @@ public PaletteVisualStudioBase([DisallowNull] Color[] schemeColours, #endregion - #region AllowFormChrome - - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// Gets the renderer to use for this palette. /// Renderer to use for drawing palette settings. @@ -401,17 +396,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -419,14 +414,14 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] @@ -457,19 +452,19 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -478,13 +473,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -492,7 +487,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -503,7 +498,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -529,17 +524,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -547,14 +542,14 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] @@ -585,19 +580,19 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -610,7 +605,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -618,7 +613,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -629,7 +624,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -753,7 +748,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -858,7 +853,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -951,12 +946,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -972,12 +967,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -993,12 +988,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1009,7 +1004,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1048,7 +1043,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -1227,7 +1222,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -1237,9 +1232,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -1318,7 +1313,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1517,7 +1512,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1547,7 +1542,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -1719,7 +1714,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -1795,7 +1790,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2092,6 +2087,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2117,6 +2113,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2177,6 +2174,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2405,7 +2403,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -2430,7 +2428,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -2528,7 +2526,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -2600,6 +2598,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2611,15 +2610,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2644,12 +2649,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -2700,7 +2707,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -2715,6 +2722,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2730,11 +2738,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -2752,16 +2761,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -2808,6 +2819,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2825,6 +2837,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2840,6 +2853,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2861,10 +2875,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2872,10 +2887,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -2913,7 +2929,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -2926,6 +2942,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -2947,16 +2964,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } @@ -2992,7 +3011,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3005,6 +3024,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3026,16 +3046,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3063,7 +3085,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -3084,6 +3106,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3105,16 +3128,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3160,6 +3185,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3179,7 +3205,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3191,12 +3217,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3213,7 +3240,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3229,11 +3256,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3250,7 +3278,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3268,12 +3296,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3293,21 +3322,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -3316,11 +3345,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -3340,21 +3370,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -3363,11 +3393,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2007/PaletteVisualStudio2010With2007Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2007/PaletteVisualStudio2010With2007Base.cs index 0d6c4df69..b102dc297 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2007/PaletteVisualStudio2010With2007Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2007/PaletteVisualStudio2010With2007Base.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -57,10 +57,10 @@ public abstract class PaletteVisualStudio2010With2007Base : PaletteBase #region Images - private static readonly Image _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; - private static readonly Image _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; + private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; + private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -79,8 +79,8 @@ public abstract class PaletteVisualStudio2010With2007Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Toolbar Images @@ -158,34 +158,34 @@ public abstract class PaletteVisualStudio2010With2007Base : PaletteBase #region Color Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(212, 212, 212), // Button, Disabled, Border Color.FromArgb(229, 195, 101), // Button, Tracking, Border 1 Color.FromArgb(255, 226, 112), // Button, Tracking, Border 2 @@ -193,11 +193,11 @@ public abstract class PaletteVisualStudio2010With2007Base : PaletteBase Color.FromArgb(255, 196, 68), // Button, Pressed, Border 2 Color.FromArgb(158, 130, 85), // Button, Checked, Border 1 Color.FromArgb(254, 218, 144) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(221, 221, 221), // Button, Disabled, Back 1 Color.FromArgb(236, 236, 236), // Button, Disabled, Back 2 Color.FromArgb(255, 246, 217), // Button, Tracking, Back 1 @@ -208,7 +208,7 @@ public abstract class PaletteVisualStudio2010With2007Base : PaletteBase Color.FromArgb(254, 230, 136), // Button, Checked, Back 2 Color.FromArgb(232, 142, 49), // Button, Checked Tracking, Back 1 Color.FromArgb(252, 207, 100) // Button, Checked Tracking, Back 2 - }; + ]; #endregion @@ -216,14 +216,14 @@ public abstract class PaletteVisualStudio2010With2007Base : PaletteBase #region Instance Fields - private KryptonVisualStudio2010With2007ColorTable _table; + private KryptonVisualStudio2010With2007ColorTable? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion @@ -238,13 +238,15 @@ public abstract class PaletteVisualStudio2010With2007Base : PaletteBase public PaletteVisualStudio2010With2007Base([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); Debug.Assert(galleryButtonList != null); Debug.Assert(radioButtonArray != null); + ThemeName = nameof(PaletteVisualStudio2010With2007Base); + if (schemeColours != null) { _ribbonColours = schemeColours; @@ -275,14 +277,6 @@ public PaletteVisualStudio2010With2007Base([DisallowNull] Color[] schemeColours, #endregion - #region AllowFormChrome - - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// Gets the renderer to use for this palette. @@ -359,7 +353,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -414,17 +408,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -451,7 +445,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -459,7 +453,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -566,22 +560,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -611,7 +605,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -625,7 +619,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -640,7 +634,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -694,11 +688,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -707,7 +701,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -715,7 +709,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -822,22 +816,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -859,7 +853,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] @@ -869,7 +863,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -883,7 +877,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -937,7 +931,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -947,7 +941,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1191,17 +1185,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1209,14 +1203,14 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] @@ -1247,19 +1241,19 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1268,13 +1262,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1282,7 +1276,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1293,7 +1287,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1319,17 +1313,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1337,14 +1331,14 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] @@ -1375,19 +1369,19 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1400,7 +1394,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1408,7 +1402,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1419,7 +1413,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1543,7 +1537,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1648,7 +1642,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1741,12 +1735,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1762,12 +1756,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1783,12 +1777,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1799,7 +1793,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1838,7 +1832,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2017,7 +2011,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2027,9 +2021,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2110,7 +2104,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2309,7 +2303,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2339,7 +2333,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2511,7 +2505,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2587,7 +2581,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2884,6 +2878,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2909,6 +2904,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2969,6 +2965,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3197,7 +3194,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3222,7 +3219,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3320,7 +3317,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3392,6 +3389,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3403,15 +3401,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3436,12 +3440,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3492,7 +3498,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3507,6 +3513,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3522,11 +3529,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3544,16 +3552,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3600,6 +3610,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3617,6 +3628,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3632,6 +3644,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3653,10 +3666,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3664,10 +3678,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3705,7 +3720,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3718,6 +3733,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3739,16 +3755,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3784,7 +3802,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3797,6 +3815,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3818,16 +3837,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3855,7 +3876,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -3876,6 +3897,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3897,16 +3919,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3952,6 +3976,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3971,7 +3996,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3983,12 +4008,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4005,7 +4031,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4021,11 +4047,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4042,7 +4069,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4060,12 +4087,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4085,21 +4113,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4108,11 +4136,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4132,21 +4161,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4155,11 +4184,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2010/PaletteVisualStudio2010With2010Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2010/PaletteVisualStudio2010With2010Base.cs index afc9466b3..5ea2d35ba 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2010/PaletteVisualStudio2010With2010Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2010/PaletteVisualStudio2010With2010Base.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -57,10 +57,10 @@ public abstract class PaletteVisualStudio2010With2010Base : PaletteBase #region Images - private static readonly Image _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; - private static readonly Image _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; + private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; + private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -79,8 +79,8 @@ public abstract class PaletteVisualStudio2010With2010Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Toolbar Images @@ -158,35 +158,35 @@ public abstract class PaletteVisualStudio2010With2010Base : PaletteBase #region Color Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(237, 201, 88), // Button, Tracking, Border 1 Color.FromArgb(243, 213, 73), // Button, Tracking, Border 2 @@ -194,11 +194,11 @@ public abstract class PaletteVisualStudio2010With2010Base : PaletteBase Color.FromArgb(194, 158, 71), // Button, Pressed, Border 2 Color.FromArgb(194, 138, 48), // Button, Checked, Border 1 Color.FromArgb(194, 164, 77) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(248, 225, 135), // Button, Tracking, Back 1 @@ -209,7 +209,7 @@ public abstract class PaletteVisualStudio2010With2010Base : PaletteBase Color.FromArgb(255, 244, 128), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; #endregion @@ -217,14 +217,14 @@ public abstract class PaletteVisualStudio2010With2010Base : PaletteBase #region Instance Fields - private KryptonVisualStudio2010With2010ColorTable _table; + private KryptonVisualStudio2010With2010ColorTable? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion @@ -239,13 +239,15 @@ public abstract class PaletteVisualStudio2010With2010Base : PaletteBase public PaletteVisualStudio2010With2010Base([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); Debug.Assert(galleryButtonList != null); Debug.Assert(radioButtonArray != null); + ThemeName = nameof(PaletteVisualStudio2010With2010Base); + if (schemeColours != null) { _ribbonColours = schemeColours; @@ -276,14 +278,6 @@ public PaletteVisualStudio2010With2010Base([DisallowNull] Color[] schemeColours, #endregion - #region AllowFormChrome - - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// Gets the renderer to use for this palette. @@ -360,7 +354,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -415,17 +409,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -452,7 +446,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -460,7 +454,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -567,22 +561,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -612,7 +606,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -626,7 +620,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -641,7 +635,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -695,11 +689,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -708,7 +702,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -716,7 +710,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -823,22 +817,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -860,7 +854,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] @@ -870,7 +864,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -884,7 +878,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -938,7 +932,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -948,7 +942,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1192,17 +1186,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1210,14 +1204,14 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] @@ -1248,19 +1242,19 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1269,13 +1263,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1283,7 +1277,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1294,7 +1288,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1320,17 +1314,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1338,14 +1332,14 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] @@ -1376,19 +1370,19 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1401,7 +1395,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1409,7 +1403,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1420,7 +1414,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1544,7 +1538,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1649,7 +1643,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1742,12 +1736,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1763,12 +1757,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1784,12 +1778,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1800,7 +1794,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1839,7 +1833,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2018,7 +2012,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2028,9 +2022,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2111,7 +2105,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2310,7 +2304,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2340,7 +2334,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2512,7 +2506,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2588,7 +2582,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2885,6 +2879,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2910,6 +2905,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2970,6 +2966,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3198,7 +3195,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3223,7 +3220,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3321,7 +3318,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3393,6 +3390,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3404,15 +3402,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3437,12 +3441,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3493,7 +3499,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3508,6 +3514,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3523,11 +3530,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3545,16 +3553,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3601,6 +3611,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3618,6 +3629,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3633,6 +3645,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3654,10 +3667,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3665,10 +3679,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3706,7 +3721,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3719,6 +3734,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3740,16 +3756,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3785,7 +3803,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3798,6 +3816,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3819,16 +3838,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3856,7 +3877,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -3877,6 +3898,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3898,16 +3920,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3953,6 +3977,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3972,7 +3997,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3984,12 +4009,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4006,7 +4032,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4022,11 +4048,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4043,7 +4070,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4061,12 +4088,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4086,21 +4114,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4109,11 +4137,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4133,21 +4162,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4156,11 +4185,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2013/PaletteVisualStudio2010With2013Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2013/PaletteVisualStudio2010With2013Base.cs index be72934e4..cc1b8f58a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2013/PaletteVisualStudio2010With2013Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/2013/PaletteVisualStudio2010With2013Base.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -57,10 +57,10 @@ public abstract class PaletteVisualStudio2010With2013Base : PaletteBase #region Images - private static readonly Image _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; - private static readonly Image _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; + private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; + private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -79,8 +79,8 @@ public abstract class PaletteVisualStudio2010With2013Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Toolbar Images @@ -158,34 +158,34 @@ public abstract class PaletteVisualStudio2010With2013Base : PaletteBase #region Color Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(205, 230, 247), // Button, Tracking, Border 1 Color.FromArgb(205, 230, 247), // Button, Tracking, Border 2 @@ -193,10 +193,10 @@ public abstract class PaletteVisualStudio2010With2013Base : PaletteBase Color.FromArgb(146, 192, 244), // Button, Pressed, Border 2 Color.FromArgb(146, 192, 244), // Button, Checked, Border 1 Color.FromArgb(146, 192, 244) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(205, 230, 247), // Button, Tracking, Back 1 @@ -207,7 +207,7 @@ public abstract class PaletteVisualStudio2010With2013Base : PaletteBase Color.FromArgb(146, 192, 244), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; #endregion @@ -215,14 +215,14 @@ public abstract class PaletteVisualStudio2010With2013Base : PaletteBase #region Instance Fields - private KryptonVisualStudio2010With2013ColorTable _table; + private KryptonVisualStudio2010With2013ColorTable? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion @@ -237,13 +237,15 @@ public abstract class PaletteVisualStudio2010With2013Base : PaletteBase public PaletteVisualStudio2010With2013Base([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); Debug.Assert(galleryButtonList != null); Debug.Assert(radioButtonArray != null); + ThemeName = nameof(PaletteVisualStudio2010With2013Base); + if (schemeColours != null) { _ribbonColours = schemeColours; @@ -274,14 +276,6 @@ public PaletteVisualStudio2010With2013Base([DisallowNull] Color[] schemeColours, #endregion - #region AllowFormChrome - - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// Gets the renderer to use for this palette. /// Renderer to use for drawing palette settings. @@ -357,7 +351,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -412,17 +406,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -449,7 +443,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -457,7 +451,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -564,22 +558,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -609,7 +603,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -623,7 +617,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -638,7 +632,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -692,11 +686,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -705,7 +699,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -713,7 +707,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -820,22 +814,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -857,7 +851,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] @@ -867,7 +861,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -881,7 +875,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -935,7 +929,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -945,7 +939,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1189,17 +1183,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1207,14 +1201,14 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] @@ -1245,19 +1239,19 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1266,13 +1260,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1280,7 +1274,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1291,7 +1285,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1317,17 +1311,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1335,14 +1329,14 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] @@ -1373,19 +1367,19 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1398,7 +1392,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1406,7 +1400,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1417,7 +1411,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1541,7 +1535,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1646,7 +1640,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1739,12 +1733,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1760,12 +1754,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1781,12 +1775,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1797,7 +1791,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1836,7 +1830,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2015,7 +2009,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2025,9 +2019,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2108,7 +2102,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2307,7 +2301,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2337,7 +2331,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2509,7 +2503,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2585,7 +2579,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2882,6 +2876,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2907,6 +2902,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2967,6 +2963,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3195,7 +3192,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3220,7 +3217,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3318,7 +3315,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3390,6 +3387,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3401,15 +3399,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3434,12 +3438,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3490,7 +3496,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3505,6 +3511,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3520,11 +3527,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3542,16 +3550,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3598,6 +3608,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3615,6 +3626,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3630,6 +3642,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3651,10 +3664,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3662,10 +3676,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3703,7 +3718,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3716,6 +3731,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3737,16 +3753,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3782,7 +3800,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3795,6 +3813,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3816,16 +3835,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3853,7 +3874,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -3874,6 +3895,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3895,16 +3917,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3950,6 +3974,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3969,7 +3994,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3981,12 +4006,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4003,7 +4029,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4019,11 +4045,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4040,7 +4067,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4058,12 +4085,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4083,21 +4111,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4106,11 +4134,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4130,21 +4159,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4153,11 +4182,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/365/PaletteVisualStudio2010With365Base.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/365/PaletteVisualStudio2010With365Base.cs index 051a21a2d..f9752f57b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/365/PaletteVisualStudio2010With365Base.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Base/Visual Studio 2010/Renderers/365/PaletteVisualStudio2010With365Base.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -57,10 +57,10 @@ public abstract class PaletteVisualStudio2010With365Base : PaletteBase #region Images - private static readonly Image _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; - private static readonly Image _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; + private static readonly Image? _treeExpandWhite = TreeItemImageResources.TreeExpandWhite; + private static readonly Image? _treeCollapseBlack = TreeItemImageResources.TreeCollapseBlack; - private static readonly Image _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; + private static readonly Image? _disabledDropDown = DropDownArrowImageResources.DisabledDropDownButton; private static readonly Image _buttonSpecClose = ProfessionalButtonSpecResources.ProfessionalCloseButton; private static readonly Image _buttonSpecContext = GenericProfessionalImageResources.ProfessionalContextButton; private static readonly Image _buttonSpecNext = GenericProfessionalImageResources.ProfessionalNextButton; @@ -79,8 +79,8 @@ public abstract class PaletteVisualStudio2010With365Base : PaletteBase private static readonly Image _buttonSpecWorkspaceRestore = GenericProfessionalImageResources.ProfessionalRestore; private static readonly Image _buttonSpecRibbonMinimize = RibbonArrowImageResources.RibbonUp2010; private static readonly Image _buttonSpecRibbonExpand = RibbonArrowImageResources.RibbonDown2010; - private static readonly Image _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; - private static readonly Image _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; + private static readonly Image? _contextMenuChecked = GenericOffice2007ImageResources.Office2007Checked; + private static readonly Image? _contextMenuIndeterminate = GenericOffice2007ImageResources.Office2007Indeterminate; #region Integrated Toolbar Images @@ -158,35 +158,35 @@ public abstract class PaletteVisualStudio2010With365Base : PaletteBase #region Color Arrays private static readonly Color[] _appButtonNormal = - { + [ Color.FromArgb(243, 245, 248), Color.FromArgb(214, 220, 231), Color.FromArgb(188, 198, 211), Color.FromArgb(254, 254, 255), Color.FromArgb(206, 213, 225) - }; + ]; private static readonly Color[] _appButtonTrack = - { + [ Color.FromArgb(255, 251, 230), Color.FromArgb(248, 230, 143), Color.FromArgb(238, 213, 126), Color.FromArgb(254, 247, 129), Color.FromArgb(240, 201, 41) - }; + ]; private static readonly Color[] _appButtonPressed = - { + [ Color.FromArgb(235, 227, 196), Color.FromArgb(228, 198, 149), Color.FromArgb(166, 97, 7), Color.FromArgb(242, 155, 57), Color.FromArgb(236, 136, 9) - }; + ]; private static readonly Color[] _buttonBorderColors = - { + [ Color.FromArgb(180, 180, 180), // Button, Disabled, Border Color.FromArgb(237, 201, 88), // Button, Tracking, Border 1 Color.FromArgb(243, 213, 73), // Button, Tracking, Border 2 @@ -194,10 +194,10 @@ public abstract class PaletteVisualStudio2010With365Base : PaletteBase Color.FromArgb(194, 158, 71), // Button, Pressed, Border 2 Color.FromArgb(194, 138, 48), // Button, Checked, Border 1 Color.FromArgb(194, 164, 77) // Button, Checked, Border 2 - }; + ]; private static readonly Color[] _buttonBackColors = - { + [ Color.FromArgb(250, 250, 250), // Button, Disabled, Back 1 Color.FromArgb(250, 250, 250), // Button, Disabled, Back 2 Color.FromArgb(248, 225, 135), // Button, Tracking, Back 1 @@ -208,7 +208,7 @@ public abstract class PaletteVisualStudio2010With365Base : PaletteBase Color.FromArgb(255, 244, 128), // Button, Checked, Back 2 Color.FromArgb(255, 225, 104), // Button, Checked Tracking, Back 1 Color.FromArgb(255, 249, 196) // Button, Checked Tracking, Back 2 - }; + ]; #endregion @@ -216,14 +216,14 @@ public abstract class PaletteVisualStudio2010With365Base : PaletteBase #region Instance Fields - private KryptonVisualStudio2010WithMicrosoft365ColorTable _table; + private KryptonVisualStudio2010WithMicrosoft365ColorTable? _table; private readonly Color[] _ribbonColours; private readonly Color[] _trackBarColours; private readonly ImageList _checkBoxList; private readonly ImageList _galleryButtonList; - private readonly Image[] _radioButtonArray; + private readonly Image?[] _radioButtonArray; #endregion @@ -238,13 +238,15 @@ public abstract class PaletteVisualStudio2010With365Base : PaletteBase public PaletteVisualStudio2010With365Base([DisallowNull] Color[] schemeColours, [DisallowNull] ImageList checkBoxList, [DisallowNull] ImageList galleryButtonList, - [DisallowNull] Image[] radioButtonArray, Color[] trackBarColours) + [DisallowNull] Image?[] radioButtonArray, Color[] trackBarColours) { Debug.Assert(schemeColours != null); Debug.Assert(checkBoxList != null); Debug.Assert(galleryButtonList != null); Debug.Assert(radioButtonArray != null); + ThemeName = nameof(PaletteVisualStudio2010With365Base); + if (schemeColours != null) { _ribbonColours = schemeColours; @@ -275,14 +277,6 @@ public PaletteVisualStudio2010With365Base([DisallowNull] Color[] schemeColours, #endregion - #region AllowFormChrome - - /// Gets a value indicating if KryptonForm instances should show custom chrome. - /// InheritBool value. - public override InheritBool GetAllowFormChrome() => InheritBool.True; - - #endregion - #region Renderer /// Gets the renderer to use for this palette. @@ -359,7 +353,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -414,17 +408,17 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) switch (state) { case PaletteState.Disabled: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack; case PaletteState.Normal: - return style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window; + return style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window; case PaletteState.Pressed: case PaletteState.Tracking: switch (style) { case PaletteBackStyle.TabLowProfile: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteBackStyle.TabHighProfile: return state == PaletteState.Tracking ? _buttonBackColors[2] : _buttonBackColors[4]; default: @@ -451,7 +445,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) } default: - throw new ArgumentOutOfRangeException(nameof(state)); + throw DebugTools.NotImplemented(state.ToString()); } case PaletteBackStyle.TabDock: case PaletteBackStyle.TabDockAutoHidden: @@ -459,7 +453,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.Tracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -566,22 +560,22 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack1Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked1, PaletteState.Tracking => _formCloseTracking1, PaletteState.CheckedTracking => _formCloseCheckedTracking1, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed1, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -611,7 +605,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -625,7 +619,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack1] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -640,7 +634,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) // We do not provide override values if (CommonHelper.IsOverrideStateExclude(state, PaletteState.NormalDefaultOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -694,11 +688,11 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.TabCustom3: return state switch { - PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _disabledBack, - PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], - PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? Color.Empty : SystemColors.Window, + PaletteState.Disabled => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBack, + PaletteState.Normal => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], + PaletteState.Tracking or PaletteState.Pressed => style == PaletteBackStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : SystemColors.Window, PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDock: return state switch @@ -707,7 +701,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.Pressed => _buttonBackColors[4], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => SystemColors.Window, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.TabDockAutoHidden: return state switch @@ -715,7 +709,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => _disabledBack, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.HeaderDockInactiveBack1], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.HeaderForm: return state == PaletteState.Disabled @@ -822,22 +816,22 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) case PaletteBackStyle.ButtonForm: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Checked], PaletteState.Tracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Track], PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2CheckTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBack2Pressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonFormClose: return state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseChecked2, PaletteState.Tracking => _formCloseTracking2, PaletteState.CheckedTracking => _formCloseCheckedTracking2, PaletteState.Pressed or PaletteState.CheckedPressed => _formClosePressed2, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonStandalone: case PaletteBackStyle.ButtonGallery: @@ -859,7 +853,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.Disabled => style == PaletteBackStyle.ButtonGallery ? _ribbonColours[(int)SchemeOfficeColors.RibbonGalleryBack1] : _buttonBackColors[1], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.NormalDefaultOverride => style is PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBack2], PaletteState.CheckedNormal => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2] @@ -869,7 +863,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) PaletteState.CheckedTracking => style == PaletteBackStyle.ButtonInputControl ? _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1] : _buttonBackColors[9], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; case PaletteBackStyle.ButtonNavigatorStack: case PaletteBackStyle.ButtonNavigatorOverflow: @@ -883,7 +877,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) _ => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalNavigatorBack2] }; default: - throw new ArgumentOutOfRangeException(nameof(style)); + throw DebugTools.NotImplemented(style.ToString()); } } @@ -937,7 +931,7 @@ or PaletteBackStyle.GridBackgroundCustom3 { PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride or PaletteState.CheckedNormal or PaletteState.Tracking or PaletteState.CheckedTracking => PaletteColorStyle.Linear, PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.LinearShadow, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ButtonAlternate or PaletteBackStyle.ButtonStandalone or PaletteBackStyle.ButtonLowProfile or PaletteBackStyle.ButtonBreadCrumb or PaletteBackStyle.ButtonListItem or PaletteBackStyle.ButtonCommand or PaletteBackStyle.ButtonButtonSpec or PaletteBackStyle.ButtonCluster or PaletteBackStyle.ButtonGallery or PaletteBackStyle.ButtonCustom1 or PaletteBackStyle.ButtonCustom2 or PaletteBackStyle.ButtonCustom3 or PaletteBackStyle.ButtonInputControl or PaletteBackStyle.ContextMenuItemHighlight => state switch { @@ -947,7 +941,7 @@ or PaletteBackStyle.GridBackgroundCustom3 PaletteState.Pressed or PaletteState.CheckedPressed => PaletteColorStyle.ExpertPressed, PaletteState.CheckedNormal => PaletteColorStyle.ExpertChecked, PaletteState.CheckedTracking => PaletteColorStyle.ExpertCheckedTracking, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBackStyle.ContextMenuItemImage => PaletteColorStyle.Solid, PaletteBackStyle.ButtonNavigatorStack or PaletteBackStyle.ButtonNavigatorOverflow or PaletteBackStyle.ButtonNavigatorMini => state switch @@ -1191,17 +1185,17 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1209,14 +1203,14 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderCalendar => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.HeaderPrimaryBack1] @@ -1247,19 +1241,19 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1268,13 +1262,13 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta : _buttonBorderColors[0], PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.NormalDefaultOverride => style is PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ContextMenuItemHighlight -? Color.Empty +? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalDefaultBorder], PaletteState.CheckedNormal => _buttonBorderColors[5], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], PaletteState.CheckedTracking => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1282,7 +1276,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[1], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1293,7 +1287,7 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1319,17 +1313,17 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta } } - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { PaletteBorderStyle.TabHighProfile or PaletteBorderStyle.TabStandardProfile or PaletteBorderStyle.TabLowProfile or PaletteBorderStyle.TabOneNote or PaletteBorderStyle.TabCustom1 or PaletteBorderStyle.TabCustom2 or PaletteBorderStyle.TabCustom3 => state switch { - PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _disabledBorder, - PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], + PaletteState.Disabled => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _disabledBorder, + PaletteState.Normal or PaletteState.Tracking or PaletteState.Pressed => style == PaletteBorderStyle.TabLowProfile ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDock => state switch { @@ -1337,14 +1331,14 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.Pressed => _buttonBorderColors[2], PaletteState.CheckedNormal or PaletteState.CheckedPressed or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ControlBorder], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.TabDockAutoHidden => state switch { PaletteState.Disabled => _disabledBorder, PaletteState.Normal or PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.CheckedTracking or PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[2], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.HeaderForm => state == PaletteState.Disabled ? _ribbonColours[(int)SchemeOfficeColors.FormBorderHeaderInactive] @@ -1375,19 +1369,19 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta : _ribbonColours[(int)SchemeOfficeColors.FormBorderActive], PaletteBorderStyle.ButtonForm => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderCheck], PaletteState.Tracking or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderTrack], PaletteState.Pressed or PaletteState.CheckedPressed => _ribbonColours[(int)SchemeOfficeColors.FormButtonBorderPressed], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonFormClose => state switch { - PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => Color.Empty, + PaletteState.Disabled or PaletteState.Normal or PaletteState.NormalDefaultOverride => GlobalStaticValues.EMPTY_COLOR, PaletteState.CheckedNormal => _formCloseBorderCheckedNormal, PaletteState.Tracking or PaletteState.CheckedTracking => _formCloseBorderTracking, PaletteState.Pressed or PaletteState.CheckedPressed => _formCloseBorderPressed, - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonGallery or PaletteBorderStyle.ButtonStandalone or PaletteBorderStyle.ButtonAlternate or PaletteBorderStyle.ButtonLowProfile or PaletteBorderStyle.ButtonBreadCrumb or PaletteBorderStyle.ButtonListItem or PaletteBorderStyle.ButtonCommand or PaletteBorderStyle.ButtonButtonSpec or PaletteBorderStyle.ButtonCluster or PaletteBorderStyle.ButtonCustom1 or PaletteBorderStyle.ButtonCustom2 or PaletteBorderStyle.ButtonCustom3 or PaletteBorderStyle.ContextMenuItemHighlight => state switch { @@ -1400,7 +1394,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], PaletteState.CheckedTracking => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonInputControl => state switch { @@ -1408,7 +1402,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Normal or PaletteState.CheckedNormal or PaletteState.CheckedTracking => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking => _buttonBorderColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBorderColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonCalendarDay => state switch { @@ -1419,7 +1413,7 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta PaletteState.Tracking => _buttonBackColors[2], PaletteState.Pressed or PaletteState.CheckedPressed => _buttonBackColors[4], PaletteState.CheckedTracking => _buttonBackColors[8], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }, PaletteBorderStyle.ButtonNavigatorStack or PaletteBorderStyle.ButtonNavigatorOverflow or PaletteBorderStyle.ButtonNavigatorMini => _ribbonColours[(int)SchemeOfficeColors.ButtonNavigatorBorder], _ => throw new ArgumentOutOfRangeException(nameof(style)) @@ -1543,7 +1537,7 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return GlobalStaticValues.PRIMARY_CORNER_ROUNDING_VALUE; + return GlobalStaticValues.DEFAULT_PRIMARY_CORNER_ROUNDING_VALUE; } return style switch @@ -1648,7 +1642,7 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - // By default the focus override shows the focus! + // By default, the focus override shows the focus! if (state == PaletteState.FocusOverride) { return InheritBool.True; @@ -1741,12 +1735,12 @@ public override Color GetContentImageColorMap(PaletteContentStyle style, Palette // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1762,12 +1756,12 @@ public override Color GetContentImageColorTo(PaletteContentStyle style, PaletteS // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1783,12 +1777,12 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return style switch { - PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => Color.Empty, + PaletteContentStyle.HeaderPrimary or PaletteContentStyle.HeaderDockInactive or PaletteContentStyle.HeaderDockActive or PaletteContentStyle.HeaderCalendar or PaletteContentStyle.HeaderSecondary or PaletteContentStyle.HeaderForm or PaletteContentStyle.HeaderCustom1 or PaletteContentStyle.HeaderCustom2 or PaletteContentStyle.HeaderCustom3 or PaletteContentStyle.LabelNormalControl or PaletteContentStyle.LabelBoldControl or PaletteContentStyle.LabelItalicControl or PaletteContentStyle.LabelTitleControl or PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption or PaletteContentStyle.LabelToolTip or PaletteContentStyle.LabelSuperTip or PaletteContentStyle.LabelKeyTip or PaletteContentStyle.LabelCustom1 or PaletteContentStyle.LabelCustom2 or PaletteContentStyle.LabelCustom3 or PaletteContentStyle.ContextMenuHeading or PaletteContentStyle.ContextMenuItemImage or PaletteContentStyle.ContextMenuItemTextStandard or PaletteContentStyle.ContextMenuItemTextAlternate or PaletteContentStyle.ContextMenuItemShortcutText or PaletteContentStyle.InputControlStandalone or PaletteContentStyle.InputControlRibbon or PaletteContentStyle.InputControlCustom1 or PaletteContentStyle.InputControlCustom2 or PaletteContentStyle.InputControlCustom3 or PaletteContentStyle.TabHighProfile or PaletteContentStyle.TabStandardProfile or PaletteContentStyle.TabLowProfile or PaletteContentStyle.TabOneNote or PaletteContentStyle.TabDock or PaletteContentStyle.TabDockAutoHidden or PaletteContentStyle.TabCustom1 or PaletteContentStyle.TabCustom2 or PaletteContentStyle.TabCustom3 or PaletteContentStyle.ButtonStandalone or PaletteContentStyle.ButtonGallery or PaletteContentStyle.ButtonAlternate or PaletteContentStyle.ButtonLowProfile or PaletteContentStyle.ButtonBreadCrumb or PaletteContentStyle.ButtonListItem or PaletteContentStyle.ButtonCommand or PaletteContentStyle.ButtonButtonSpec or PaletteContentStyle.ButtonCalendarDay or PaletteContentStyle.ButtonCluster or PaletteContentStyle.ButtonNavigatorStack or PaletteContentStyle.ButtonNavigatorOverflow or PaletteContentStyle.ButtonNavigatorMini or PaletteContentStyle.ButtonForm or PaletteContentStyle.ButtonFormClose or PaletteContentStyle.ButtonCustom1 or PaletteContentStyle.ButtonCustom2 or PaletteContentStyle.ButtonCustom3 or PaletteContentStyle.ButtonInputControl or PaletteContentStyle.GridHeaderColumnList or PaletteContentStyle.GridHeaderColumnSheet or PaletteContentStyle.GridHeaderColumnCustom1 or PaletteContentStyle.GridHeaderColumnCustom2 or PaletteContentStyle.GridHeaderColumnCustom3 or PaletteContentStyle.GridHeaderRowList or PaletteContentStyle.GridHeaderRowSheet or PaletteContentStyle.GridHeaderRowCustom1 or PaletteContentStyle.GridHeaderRowCustom2 or PaletteContentStyle.GridHeaderRowCustom3 or PaletteContentStyle.GridDataCellList or PaletteContentStyle.GridDataCellSheet or PaletteContentStyle.GridDataCellCustom1 or PaletteContentStyle.GridDataCellCustom2 or PaletteContentStyle.GridDataCellCustom3 => GlobalStaticValues.EMPTY_COLOR, _ => throw new ArgumentOutOfRangeException(nameof(style)) }; } @@ -1799,7 +1793,7 @@ public override Color GetContentImageColorTransparent(PaletteContentStyle style, /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -1838,7 +1832,7 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentShortTextFont(style, state); @@ -2017,7 +2011,7 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverrideControl], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverrideControl], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, PaletteContentStyle.LabelNormalPanel or PaletteContentStyle.LabelBoldPanel or PaletteContentStyle.LabelItalicPanel or PaletteContentStyle.LabelTitlePanel or PaletteContentStyle.LabelGroupBoxCaption => state switch { @@ -2027,9 +2021,9 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet (int)SchemeOfficeColors.LinkVisitedOverridePanel], PaletteState.LinkPressedOverride => _ribbonColours[ (int)SchemeOfficeColors.LinkPressedOverridePanel], - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }, - _ => Color.Empty + _ => GlobalStaticValues.EMPTY_COLOR }; } @@ -2110,7 +2104,7 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2309,7 +2303,7 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { if (CommonHelper.IsOverrideState(state)) { @@ -2339,7 +2333,7 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextNewFont(PaletteContentStyle style, PaletteState state) { DefineFonts(); return GetContentLongTextFont(style, state); @@ -2511,7 +2505,7 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2587,7 +2581,7 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (style) @@ -2884,6 +2878,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2909,6 +2904,7 @@ public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -2969,6 +2965,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(metric.ToString()); break; } @@ -3197,7 +3194,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin default: // Should never happen! Debug.Assert(false); - return null; + throw DebugTools.NotImplemented(style.ToString()); } } @@ -3222,7 +3219,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont; + public override Font GetRibbonContextTextFont(PaletteState state) => RibbonTabContextFont!; /// /// Gets the color for the ribbon context text. @@ -3320,7 +3317,7 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont; + public override Font GetRibbonTextFont(PaletteState state) => RibbonTabFont!; /// /// Gets the rendering hint for the ribbon font. @@ -3392,6 +3389,7 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3403,15 +3401,21 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac { case PaletteState.Normal: case PaletteState.CheckedNormal: + case PaletteState.ContextNormal: case PaletteState.ContextCheckedNormal: return PaletteRibbonColorStyle.Empty; case PaletteState.Tracking: + case PaletteState.ContextTracking: + case PaletteState.ContextCheckedTracking: return PaletteRibbonColorStyle.RibbonGroupNormalTrackingLight; case PaletteState.FocusOverride: return PaletteRibbonColorStyle.RibbonTabFocus2010; + case PaletteState.ContextPressed: + return PaletteRibbonColorStyle.RibbonGroupNormalPressedDark; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3436,12 +3440,14 @@ public override PaletteRibbonColorStyle GetRibbonBackColorStyle(PaletteRibbonBac default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3492,7 +3498,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupFrameInside1]; case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: switch (state) @@ -3507,6 +3513,7 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3522,11 +3529,12 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; case PaletteRibbonBackStyle.RibbonGroupArea: - return state == PaletteState.ContextCheckedNormal ? Color.Empty : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; + return state == PaletteState.ContextCheckedNormal ? GlobalStaticValues.EMPTY_COLOR : _ribbonColours[(int)SchemeOfficeColors.RibbonGroupsArea1]; case PaletteRibbonBackStyle.RibbonTab: switch (state) @@ -3544,16 +3552,18 @@ public override Color GetRibbonBackColor1(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder1; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3600,6 +3610,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3617,6 +3628,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3632,6 +3644,7 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3653,10 +3666,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder2; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3664,10 +3678,11 @@ public override Color GetRibbonBackColor2(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBack: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3705,7 +3720,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3718,6 +3733,7 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3739,16 +3755,18 @@ public override Color GetRibbonBackColor3(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder3; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3784,7 +3802,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonGroupNormalTitle: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonAppButton: switch (state) { @@ -3797,6 +3815,7 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3818,16 +3837,18 @@ public override Color GetRibbonBackColor4(PaletteRibbonBackStyle style, PaletteS case PaletteState.FocusOverride: return _contextCheckedTabBorder4; case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3855,7 +3876,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteRibbonBackStyle.RibbonQATOverflow: case PaletteRibbonBackStyle.RibbonGalleryBack: case PaletteRibbonBackStyle.RibbonGalleryBorder: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; case PaletteRibbonBackStyle.RibbonGroupNormalBorder: case PaletteRibbonBackStyle.RibbonGroupCollapsedBorder: return _ribbonColours[(int)SchemeOfficeColors.RibbonGroupBorder5]; @@ -3876,6 +3897,7 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; @@ -3897,16 +3919,18 @@ public override Color GetRibbonBackColor5(PaletteRibbonBackStyle style, PaletteS case PaletteState.ContextCheckedTracking: case PaletteState.FocusOverride: case PaletteState.Normal: - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(state.ToString()); break; } break; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3952,6 +3976,7 @@ public override Color GetRibbonTextColor(PaletteRibbonTextStyle style, PaletteSt default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(style.ToString()); break; } @@ -3971,7 +3996,7 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat // We do not provide override values if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -3983,12 +4008,13 @@ public override Color GetElementColor1(PaletteElement element, PaletteState stat case PaletteElement.TrackBarPosition: return state switch { - PaletteState.Disabled => Color.Empty, + PaletteState.Disabled => GlobalStaticValues.EMPTY_COLOR, _ => _trackBarColours[4] }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4005,7 +4031,7 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4021,11 +4047,12 @@ public override Color GetElementColor2(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBorder], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBorderColors[1], PaletteState.Pressed => _buttonBorderColors[3], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4042,7 +4069,7 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat { if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } switch (element) @@ -4060,12 +4087,13 @@ public override Color GetElementColor3(PaletteElement element, PaletteState stat _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1]), PaletteState.Tracking => ControlPaint.Light(_buttonBackColors[2]), PaletteState.Pressed => ControlPaint.Light(_buttonBackColors[4]), - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4085,21 +4113,21 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4108,11 +4136,12 @@ public override Color GetElementColor4(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack1], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[2], PaletteState.Pressed => _buttonBackColors[4], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } @@ -4132,21 +4161,21 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat case PaletteElement.TrackBarTick: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[0]; case PaletteElement.TrackBarTrack: if (CommonHelper.IsOverrideState(state)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return _trackBarColours[3]; case PaletteElement.TrackBarPosition: if (CommonHelper.IsOverrideStateExclude(state, PaletteState.FocusOverride)) { - return Color.Empty; + return GlobalStaticValues.EMPTY_COLOR; } return state switch @@ -4155,11 +4184,12 @@ public override Color GetElementColor5(PaletteElement element, PaletteState stat PaletteState.Normal => _ribbonColours[(int)SchemeOfficeColors.ButtonNormalBack2], PaletteState.Tracking or PaletteState.FocusOverride => _buttonBackColors[3], PaletteState.Pressed => _buttonBackColors[5], - _ => throw new ArgumentOutOfRangeException(nameof(state)) + _ => throw DebugTools.NotImplemented(state.ToString()) }; default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(element.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2007/PaletteVisualStudio2010Office2007Variation.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2007/PaletteVisualStudio2010Office2007Variation.cs index b59984de8..284a1a010 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2007/PaletteVisualStudio2010Office2007Variation.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2007/PaletteVisualStudio2010Office2007Variation.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -24,9 +24,9 @@ public class PaletteVisualStudio2010Office2007Variation : PaletteVisualStudio201 #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -53,17 +53,17 @@ public class PaletteVisualStudio2010Office2007Variation : PaletteVisualStudio201 #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(116, 150, 194), // Tick marks Color.FromArgb(116, 150, 194), // Top track Color.FromArgb(152, 190, 241), // Bottom track Color.FromArgb(142, 180, 231), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(63, 101, 152) // Border (normal) position - }; + ]; private static readonly Color[] _schemeVisualStudioColors = - { + [ Color.FromArgb(0, 0, 0), // TextLabelControl Color.FromArgb(0, 0, 0), // TextButtonNormal Color.FromArgb(0, 0, 0), // TextButtonChecked @@ -156,40 +156,40 @@ public class PaletteVisualStudio2010Office2007Variation : PaletteVisualStudio201 Color.FromArgb(216, 228, 242), // RibbonGroupsArea5 Color.FromArgb(235, 240, 246), // RibbonGroupBorder1 Color.FromArgb(240, 246, 252), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(135, 142, 152), // RibbonGroupDialogDark Color.FromArgb(165, 174, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 Color.FromArgb(139, 160, 188), // RibbonMinimizeBarDark Color.FromArgb(198, 218, 240), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 Color.FromArgb(189, 203, 218), // RibbonGroupFrameBorder1 Color.FromArgb(184, 199, 216), // RibbonGroupFrameBorder2 Color.FromArgb(233, 241, 250), // RibbonGroupFrameInside1 Color.FromArgb(222, 233, 246), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(0, 0, 0), // RibbonGroupCollapsedText Color.FromArgb(118, 153, 200), // AlternatePressedBack1 Color.FromArgb(184, 215, 253), // AlternatePressedBack2 @@ -260,7 +260,7 @@ public class PaletteVisualStudio2010Office2007Variation : PaletteVisualStudio201 Color.FromArgb(195, 212, 235), // AppButtonOuter1 Color.FromArgb(195, 212, 235), // AppButtonOuter2 Color.FromArgb(195, 212, 235), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(114, 142, 173), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.FromArgb(0, 0, 0), // AppButtonMenuDocsText @@ -290,7 +290,17 @@ public class PaletteVisualStudio2010Office2007Variation : PaletteVisualStudio201 Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + ]; + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(16, 22, 33); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(53, 73, 109); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; #endregion @@ -313,8 +323,8 @@ static PaletteVisualStudio2010Office2007Variation() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -323,11 +333,15 @@ static PaletteVisualStudio2010Office2007Variation() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// Initializes a new instance of the class. - public PaletteVisualStudio2010Office2007Variation() : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) { } + public PaletteVisualStudio2010Office2007Variation() + : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) + { + ThemeName = nameof(PaletteVisualStudio2010Office2007Variation); + } #endregion @@ -354,45 +368,83 @@ public PaletteVisualStudio2010Office2007Variation() : base(_schemeVisualStudioCo /// State for which image is required. /// Image value. public override Image? GetButtonSpecImage(PaletteButtonSpecStyle style, - PaletteState state) => style switch - { - PaletteButtonSpecStyle.FormClose => state switch - { - PaletteState.Tracking => _formCloseActive, - PaletteState.Normal => _formCloseNormal, - PaletteState.Pressed => _formClosePressed, - _ => _formCloseDisabled - }, - PaletteButtonSpecStyle.FormMin => state switch - { - PaletteState.Normal => _formMinimiseNormal, - PaletteState.Tracking => _formMinimiseActive, - PaletteState.Pressed => _formMinimisePressed, - _ => _formMinimiseDisabled - }, - PaletteButtonSpecStyle.FormMax => state switch - { - PaletteState.Normal => _formMaximiseNormal, - PaletteState.Tracking => _formMaximiseActive, - PaletteState.Pressed => _formMaximisePressed, - _ => _formMaximiseDisabled - }, - PaletteButtonSpecStyle.FormRestore => state switch - { - PaletteState.Normal => _formRestoreNormal, - PaletteState.Tracking => _formRestoreActive, - PaletteState.Pressed => _formRestorePressed, - _ => _formRestoreDisabled - }, - PaletteButtonSpecStyle.FormHelp => state switch - { - PaletteState.Tracking => _formHelpActive, - PaletteState.Pressed => _formHelpPressed, - PaletteState.Normal => _formHelpNormal, - _ => _formHelpDisabled - }, - _ => base.GetButtonSpecImage(style, state) - }; + PaletteState state) + { + return style switch + { + PaletteButtonSpecStyle.FormClose => state switch + { + PaletteState.Tracking => _formCloseActive, + PaletteState.Normal => _formCloseNormal, + PaletteState.Pressed => _formClosePressed, + _ => _formCloseDisabled + }, + PaletteButtonSpecStyle.FormMin => state switch + { + PaletteState.Normal => _formMinimiseNormal, + PaletteState.Tracking => _formMinimiseActive, + PaletteState.Pressed => _formMinimisePressed, + _ => _formMinimiseDisabled + }, + PaletteButtonSpecStyle.FormMax => state switch + { + PaletteState.Normal => _formMaximiseNormal, + PaletteState.Tracking => _formMaximiseActive, + PaletteState.Pressed => _formMaximisePressed, + _ => _formMaximiseDisabled + }, + PaletteButtonSpecStyle.FormRestore => state switch + { + PaletteState.Normal => _formRestoreNormal, + PaletteState.Tracking => _formRestoreActive, + PaletteState.Pressed => _formRestorePressed, + _ => _formRestoreDisabled + }, + PaletteButtonSpecStyle.FormHelp => state switch + { + PaletteState.Tracking => _formHelpActive, + PaletteState.Pressed => _formHelpPressed, + PaletteState.Normal => _formHelpNormal, + _ => _formHelpDisabled + }, + _ => base.GetButtonSpecImage(style, state) + }; + } + + #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2010/PaletteVisualStudio2010Office2010Variation.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2010/PaletteVisualStudio2010Office2010Variation.cs index 34a4fac1e..6b8a4026b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2010/PaletteVisualStudio2010Office2010Variation.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2010/PaletteVisualStudio2010Office2010Variation.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -15,6 +15,30 @@ public class PaletteVisualStudio2010Office2010Variation : PaletteVisualStudio201 { #region Static Fields + #region Colors + + private readonly Color _tabRowBackgroundGradientRaftingDarkColor = Color.FromArgb(41, 57, 85); + + private readonly Color _tabRowBackgroundGradientRaftingLightColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(16, 22, 33); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(53, 73, 109); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + + #region Rafting + + private readonly float _gradientRafting = GlobalStaticValues.DEFAULT_RAFTING_RIBBON_TAB_BACKGROUND_GRADIENT; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -24,9 +48,9 @@ public class PaletteVisualStudio2010Office2010Variation : PaletteVisualStudio201 #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -53,17 +77,17 @@ public class PaletteVisualStudio2010Office2010Variation : PaletteVisualStudio201 #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(116, 150, 194), // Tick marks Color.FromArgb(116, 150, 194), // Top track Color.FromArgb(152, 190, 241), // Bottom track Color.FromArgb(142, 180, 231), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(63, 101, 152) // Border (normal) position - }; + ]; private static readonly Color[] _schemeVisualStudioColors = - { + [ Color.FromArgb(0, 0, 0), // TextLabelControl Color.FromArgb(0, 0, 0), // TextButtonNormal Color.FromArgb(0, 0, 0), // TextButtonChecked @@ -156,40 +180,40 @@ public class PaletteVisualStudio2010Office2010Variation : PaletteVisualStudio201 Color.FromArgb(216, 228, 242), // RibbonGroupsArea5 Color.FromArgb(235, 240, 246), // RibbonGroupBorder1 Color.FromArgb(240, 246, 252), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(135, 142, 152), // RibbonGroupDialogDark Color.FromArgb(165, 174, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 Color.FromArgb(139, 160, 188), // RibbonMinimizeBarDark Color.FromArgb(198, 218, 240), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 Color.FromArgb(189, 203, 218), // RibbonGroupFrameBorder1 Color.FromArgb(184, 199, 216), // RibbonGroupFrameBorder2 Color.FromArgb(233, 241, 250), // RibbonGroupFrameInside1 Color.FromArgb(222, 233, 246), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(30, 57, 91), // RibbonGroupCollapsedText Color.FromArgb(118, 153, 200), // AlternatePressedBack1 Color.FromArgb(184, 215, 253), // AlternatePressedBack2 @@ -260,7 +284,7 @@ public class PaletteVisualStudio2010Office2010Variation : PaletteVisualStudio201 Color.FromArgb(195, 212, 235), // AppButtonOuter1 Color.FromArgb(195, 212, 235), // AppButtonOuter2 Color.FromArgb(195, 212, 235), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(114, 142, 173), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.FromArgb(0, 0, 0), // AppButtonMenuDocsText @@ -290,7 +314,7 @@ public class PaletteVisualStudio2010Office2010Variation : PaletteVisualStudio201 Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + ]; #endregion @@ -313,8 +337,8 @@ static PaletteVisualStudio2010Office2010Variation() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -323,11 +347,16 @@ static PaletteVisualStudio2010Office2010Variation() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// Initializes a new instance of the class. - public PaletteVisualStudio2010Office2010Variation() : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) { } + public PaletteVisualStudio2010Office2010Variation() + : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) + { + ThemeName = nameof(PaletteVisualStudio2010Office2010Variation); + + } #endregion @@ -394,5 +423,40 @@ public PaletteVisualStudio2010Office2010Variation() : base(_schemeVisualStudioCo _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => + GlobalStaticValues.TAB_ROW_GRADIENT_FIRST_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + _tabRowBackgroundGradientRaftingDarkColor; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + _tabRowBackgroundGradientRaftingLightColor; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => _gradientRafting; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2013/PaletteVisualStudio2010Office2013Variation.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2013/PaletteVisualStudio2010Office2013Variation.cs index 4ce7a36e4..ef009f54a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2013/PaletteVisualStudio2010Office2013Variation.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/2013/PaletteVisualStudio2010Office2013Variation.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -15,6 +15,22 @@ public class PaletteVisualStudio2010Office2013Variation : PaletteVisualStudio201 { #region Static Fields + #region Color + + private readonly Color _tabRowBackgroundColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(16, 22, 33); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(53, 73, 109); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -24,9 +40,9 @@ public class PaletteVisualStudio2010Office2013Variation : PaletteVisualStudio201 #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -53,17 +69,17 @@ public class PaletteVisualStudio2010Office2013Variation : PaletteVisualStudio201 #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(116, 150, 194), // Tick marks Color.FromArgb(116, 150, 194), // Top track Color.FromArgb(152, 190, 241), // Bottom track Color.FromArgb(142, 180, 231), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(63, 101, 152) // Border (normal) position - }; + ]; private static readonly Color[] _schemeVisualStudioColors = - { + [ Color.FromArgb(0, 0, 0), // TextLabelControl Color.FromArgb(0, 0, 0), // TextButtonNormal Color.FromArgb(0, 0, 0), // TextButtonChecked @@ -156,40 +172,40 @@ public class PaletteVisualStudio2010Office2013Variation : PaletteVisualStudio201 Color.FromArgb(216, 228, 242), // RibbonGroupsArea5 Color.FromArgb(235, 240, 246), // RibbonGroupBorder1 Color.FromArgb(240, 246, 252), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(135, 142, 152), // RibbonGroupDialogDark Color.FromArgb(165, 174, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 Color.FromArgb(139, 160, 188), // RibbonMinimizeBarDark Color.FromArgb(198, 218, 240), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 Color.FromArgb(189, 203, 218), // RibbonGroupFrameBorder1 Color.FromArgb(184, 199, 216), // RibbonGroupFrameBorder2 Color.FromArgb(233, 241, 250), // RibbonGroupFrameInside1 Color.FromArgb(222, 233, 246), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(30, 57, 91), // RibbonGroupCollapsedText Color.FromArgb(118, 153, 200), // AlternatePressedBack1 Color.FromArgb(184, 215, 253), // AlternatePressedBack2 @@ -260,7 +276,7 @@ public class PaletteVisualStudio2010Office2013Variation : PaletteVisualStudio201 Color.FromArgb(195, 212, 235), // AppButtonOuter1 Color.FromArgb(195, 212, 235), // AppButtonOuter2 Color.FromArgb(195, 212, 235), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(114, 142, 173), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.FromArgb(0, 0, 0), // AppButtonMenuDocsText @@ -290,7 +306,7 @@ public class PaletteVisualStudio2010Office2013Variation : PaletteVisualStudio201 Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + ]; #endregion @@ -313,8 +329,8 @@ static PaletteVisualStudio2010Office2013Variation() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -323,11 +339,15 @@ static PaletteVisualStudio2010Office2013Variation() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// Initializes a new instance of the class. - public PaletteVisualStudio2010Office2013Variation() : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) { } + public PaletteVisualStudio2010Office2013Variation() + : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) + { + ThemeName = nameof(PaletteVisualStudio2010Office2013Variation); + } #endregion @@ -394,5 +414,39 @@ public PaletteVisualStudio2010Office2013Variation() : base(_schemeVisualStudioCo _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/365/PaletteVisualStudio2010Microsoft365Variation.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/365/PaletteVisualStudio2010Microsoft365Variation.cs index 991a03144..935514f24 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/365/PaletteVisualStudio2010Microsoft365Variation.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2010/Variations/365/PaletteVisualStudio2010Microsoft365Variation.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -15,6 +15,22 @@ public class PaletteVisualStudio2010Microsoft365Variation : PaletteVisualStudio2 { #region Static Fields + #region Color + + private readonly Color _tabRowBackgroundColor = Color.FromArgb(188, 199, 216); + + #endregion + + #region Ribbon Specific Colors + + private static readonly Color _ribbonAppButtonDarkColor = Color.FromArgb(16, 22, 33); + + private static readonly Color _ribbonAppButtonLightColor = Color.FromArgb(53, 73, 109); + + private static readonly Color _ribbonAppButtonTextColor = Color.White; + + #endregion + #region Image Lists private static readonly ImageList _checkBoxList; @@ -24,9 +40,9 @@ public class PaletteVisualStudio2010Microsoft365Variation : PaletteVisualStudio2 #region Images - private static readonly Image[] _radioButtonArray; - private static readonly Image _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; - private static readonly Image _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; + private static readonly Image?[] _radioButtonArray; + private static readonly Image? _blueDropDownButton = Office2010ArrowResources.Office2010BlueDropDownButton; + private static readonly Image? _contextMenuSubMenu = Office2010ArrowResources.Office2010BlueContextMenuSub; private static readonly Image _formCloseNormal = Office2010ControlBoxResources.Office2010BlueCloseNormal; private static readonly Image _formCloseDisabled = Office2010ControlBoxResources.Office2010BlueCloseDisabled; private static readonly Image _formCloseActive = Office2010ControlBoxResources.Office2010BlueCloseActive; @@ -53,17 +69,17 @@ public class PaletteVisualStudio2010Microsoft365Variation : PaletteVisualStudio2 #region Colour Arrays private static readonly Color[] _trackBarColors = - { + [ Color.FromArgb(116, 150, 194), // Tick marks Color.FromArgb(116, 150, 194), // Top track Color.FromArgb(152, 190, 241), // Bottom track Color.FromArgb(142, 180, 231), // Fill track Color.FromArgb(64, Color.White), // Outside position Color.FromArgb(63, 101, 152) // Border (normal) position - }; + ]; private static readonly Color[] _schemeVisualStudioColors = - { + [ Color.FromArgb(0, 0, 0), // TextLabelControl Color.FromArgb(0, 0, 0), // TextButtonNormal Color.FromArgb(0, 0, 0), // TextButtonChecked @@ -156,40 +172,40 @@ public class PaletteVisualStudio2010Microsoft365Variation : PaletteVisualStudio2 Color.FromArgb(216, 228, 242), // RibbonGroupsArea5 Color.FromArgb(235, 240, 246), // RibbonGroupBorder1 Color.FromArgb(240, 246, 252), // RibbonGroupBorder2 - Color.Empty, // RibbonGroupTitle1 - Color.Empty, // RibbonGroupTitle2 - Color.Empty, // RibbonGroupBorderContext1 - Color.Empty, // RibbonGroupBorderContext2 - Color.Empty, // RibbonGroupTitleContext1 - Color.Empty, // RibbonGroupTitleContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitle2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupBorderContext2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleContext2 Color.FromArgb(135, 142, 152), // RibbonGroupDialogDark Color.FromArgb(165, 174, 183), // RibbonGroupDialogLight - Color.Empty, // RibbonGroupTitleTracking1 - Color.Empty, // RibbonGroupTitleTracking2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupTitleTracking2 Color.FromArgb(139, 160, 188), // RibbonMinimizeBarDark Color.FromArgb(198, 218, 240), // RibbonMinimizeBarLight - Color.Empty, // RibbonGroupCollapsedBorder1 - Color.Empty, // RibbonGroupCollapsedBorder2 - Color.Empty, // RibbonGroupCollapsedBorder3 - Color.Empty, // RibbonGroupCollapsedBorder4 - Color.Empty, // RibbonGroupCollapsedBack1 - Color.Empty, // RibbonGroupCollapsedBack2 - Color.Empty, // RibbonGroupCollapsedBack3 - Color.Empty, // RibbonGroupCollapsedBack4 - Color.Empty, // RibbonGroupCollapsedBorderT1 - Color.Empty, // RibbonGroupCollapsedBorderT2 - Color.Empty, // RibbonGroupCollapsedBorderT3 - Color.Empty, // RibbonGroupCollapsedBorderT4 - Color.Empty, // RibbonGroupCollapsedBackT1 - Color.Empty, // RibbonGroupCollapsedBackT2 - Color.Empty, // RibbonGroupCollapsedBackT3 - Color.Empty, // RibbonGroupCollapsedBackT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorder4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBack4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBorderT4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT1 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT2 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupCollapsedBackT4 Color.FromArgb(189, 203, 218), // RibbonGroupFrameBorder1 Color.FromArgb(184, 199, 216), // RibbonGroupFrameBorder2 Color.FromArgb(233, 241, 250), // RibbonGroupFrameInside1 Color.FromArgb(222, 233, 246), // RibbonGroupFrameInside2 - Color.Empty, // RibbonGroupFrameInside3 - Color.Empty, // RibbonGroupFrameInside4 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside3 + GlobalStaticValues.EMPTY_COLOR, // RibbonGroupFrameInside4 Color.FromArgb(30, 57, 91), // RibbonGroupCollapsedText Color.FromArgb(118, 153, 200), // AlternatePressedBack1 Color.FromArgb(184, 215, 253), // AlternatePressedBack2 @@ -260,7 +276,7 @@ public class PaletteVisualStudio2010Microsoft365Variation : PaletteVisualStudio2 Color.FromArgb(195, 212, 235), // AppButtonOuter1 Color.FromArgb(195, 212, 235), // AppButtonOuter2 Color.FromArgb(195, 212, 235), // AppButtonOuter3 - Color.Empty, // AppButtonInner1 + GlobalStaticValues.EMPTY_COLOR, // AppButtonInner1 Color.FromArgb(114, 142, 173), // AppButtonInner2 Color.White, // AppButtonMenuDocs Color.FromArgb(0, 0, 0), // AppButtonMenuDocsText @@ -290,7 +306,7 @@ public class PaletteVisualStudio2010Microsoft365Variation : PaletteVisualStudio2 Color.FromArgb(200, 219, 240), // ButtonNavigatorChecked1 Color.FromArgb(177, 201, 228), // ButtonNavigatorChecked2 Color.FromArgb(201, 217, 239) // ToolTipBottom - }; + ]; #endregion @@ -313,8 +329,8 @@ static PaletteVisualStudio2010Microsoft365Variation() TransparentColor = Color.Magenta }; _galleryButtonList.Images.AddStrip(GalleryImageResources.Gallery2010); - _radioButtonArray = new Image[] - { + _radioButtonArray = + [ Office2010RadioButtonImageResources.RadioButton2010BlueD, Office2010RadioButtonImageResources.RadioButton2010BlueN, Office2010RadioButtonImageResources.RadioButton2010BlueT, @@ -323,11 +339,15 @@ static PaletteVisualStudio2010Microsoft365Variation() Office2010RadioButtonImageResources.RadioButton2010BlueNC, Office2010RadioButtonImageResources.RadioButton2010BlueTC, Office2010RadioButtonImageResources.RadioButton2010BluePC - }; + ]; } /// Initializes a new instance of the class. - public PaletteVisualStudio2010Microsoft365Variation() : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) { } + public PaletteVisualStudio2010Microsoft365Variation() + : base(_schemeVisualStudioColors, _checkBoxList, _galleryButtonList, _radioButtonArray, _trackBarColors) + { + ThemeName = nameof(PaletteVisualStudio2010Microsoft365Variation); + } #endregion @@ -394,5 +414,39 @@ public PaletteVisualStudio2010Microsoft365Variation() : base(_schemeVisualStudio _ => base.GetButtonSpecImage(style, state) }; #endregion + + #region Tab Row Background + + /// + public override Color GetRibbonTabRowGradientColor1(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingDark(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundGradientRaftingLight(PaletteState state) => + GlobalStaticValues.EMPTY_COLOR; + + /// + public override Color GetRibbonTabRowBackgroundSolidColor(PaletteState state) => _tabRowBackgroundColor; + + /// + public override float GetRibbonTabRowGradientRaftingAngle(PaletteState state) => -1; + + #endregion + + #region AppButton Colors + + /// + public override Color GetRibbonFileAppTabBottomColor(PaletteState state) => _ribbonAppButtonDarkColor; + + /// + public override Color GetRibbonFileAppTabTopColor(PaletteState state) => _ribbonAppButtonLightColor; + + /// + public override Color GetRibbonFileAppTabTextColor(PaletteState state) => _ribbonAppButtonTextColor; + + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012DarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012DarkMode.cs index 5db9057da..c23d7d46f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012DarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012DarkMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2012DarkMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2012DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2012DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2012DarkMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012LightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012LightMode.cs index 7cf0d4971..c33b0c659 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012LightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2012/PaletteVisualStudio2012LightMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2012LightMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2012LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2012LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2012LightMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013DarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013DarkMode.cs index f23cb9bb4..509529533 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013DarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013DarkMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2013DarkMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2013DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2013DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2013DarkMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013LightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013LightMode.cs index 63546c664..32ec1b4c2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013LightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2013/PaletteVisualStudio2013LightMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2013LightMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2013LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2013LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2013LightMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015DarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015DarkMode.cs index 439c7b4e5..ecd25b2c7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015DarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015DarkMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2015DarkMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2015DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2015DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2015DarkMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015LightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015LightMode.cs index d4ee1b98b..c5085d2f2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015LightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2015/PaletteVisualStudio2015LightMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2015LightMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2015LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2015LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2015LightMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017DarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017DarkMode.cs index 4a08a0a06..a10dacdba 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017DarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017DarkMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2017DarkMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2017DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2017DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2017DarkMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017LightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017LightMode.cs index e140e7a7c..545b52d4c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017LightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2017/PaletteVisualStudio2017LightMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2017LightMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2017LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2017LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2017LightMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019DarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019DarkMode.cs index 4e03168f6..6f13f48f1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019DarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019DarkMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2019DarkMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2019DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2019DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2019DarkMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019LightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019LightMode.cs index d9cb8b27e..e2808df94 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019LightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2019/PaletteVisualStudio2019LightMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2019LightMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2019LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2019LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2019LightMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022DarkMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022DarkMode.cs index 5df20c955..e1c8fdb5a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022DarkMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022DarkMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2022DarkMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2022DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2022DarkMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2022DarkMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022LightMode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022LightMode.cs index 3d7f1312e..ef8f97397 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022LightMode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Builtin/Visual Studio/Official Themes/2022/PaletteVisualStudio2022LightMode.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -11,8 +11,10 @@ namespace Krypton.Toolkit { public abstract class PaletteVisualStudio2022LightMode : PaletteVisualStudioBase { - protected PaletteVisualStudio2022LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image[] radioButtonArray, Color[] trackBarColours) : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) + protected PaletteVisualStudio2022LightMode(Color[] schemeColours, ImageList checkBoxList, ImageList galleryButtonList, Image?[] radioButtonArray, Color[] trackBarColours) + : base(schemeColours, checkBoxList, galleryButtonList, radioButtonArray, trackBarColours) { + ThemeName = nameof(PaletteVisualStudio2022LightMode); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonInternalKCT.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonInternalKCT.cs index 41b3bd607..d9ad9faf7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonInternalKCT.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonInternalKCT.cs @@ -1,12 +1,12 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion @@ -31,9 +31,9 @@ public KryptonInternalKCT([DisallowNull] KryptonColorTable baseKCT, : base(palette) { Debug.Assert(baseKCT != null); - + // Remember the base used for inheriting - _baseKCT = baseKCT; + _baseKCT = baseKCT!; // Always assume the same use of system colors UseSystemColors = _baseKCT.UseSystemColors; @@ -44,7 +44,7 @@ public KryptonInternalKCT([DisallowNull] KryptonColorTable baseKCT, // Initialise all the colors to empty for (var i = 0; i < _colors.Length; i++) { - _colors[i] = Color.Empty; + _colors[i] = GlobalStaticValues.EMPTY_COLOR; } // Initialise other storage values @@ -63,15 +63,15 @@ public KryptonInternalKCT([DisallowNull] KryptonColorTable baseKCT, #region Button #region ButtonCheckedGradientBegin - /// + /// /// Gets the starting color of the gradient used when the button is checked. /// public override Color ButtonCheckedGradientBegin => - _colors[(int)PaletteColorIndex.ButtonCheckedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonCheckedGradientBegin : _colors[(int)PaletteColorIndex.ButtonCheckedGradientBegin]; - /// + /// /// Sets and sets the internal ButtonCheckedGradientBegin value. /// public Color InternalButtonCheckedGradientBegin @@ -80,13 +80,13 @@ public Color InternalButtonCheckedGradientBegin set => _colors[(int)PaletteColorIndex.ButtonCheckedGradientBegin] = value; } #endregion - + #region ButtonCheckedGradientEnd /// /// Gets the end color of the gradient used when the button is checked. /// public override Color ButtonCheckedGradientEnd => - _colors[(int)PaletteColorIndex.ButtonCheckedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonCheckedGradientEnd : _colors[(int)PaletteColorIndex.ButtonCheckedGradientEnd]; @@ -105,7 +105,7 @@ public Color InternalButtonCheckedGradientEnd /// Gets the middle color of the gradient used when the button is checked. /// public override Color ButtonCheckedGradientMiddle => - _colors[(int)PaletteColorIndex.ButtonCheckedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonCheckedGradientMiddle : _colors[(int)PaletteColorIndex.ButtonCheckedGradientMiddle]; @@ -118,13 +118,13 @@ public Color InternalButtonCheckedGradientMiddle set => _colors[(int)PaletteColorIndex.ButtonCheckedGradientMiddle] = value; } #endregion - + #region ButtonCheckedHighlight /// /// Gets the solid color used when the button is checked. /// public override Color ButtonCheckedHighlight => - _colors[(int)PaletteColorIndex.ButtonCheckedHighlight] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedHighlight] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonCheckedHighlight : _colors[(int)PaletteColorIndex.ButtonCheckedHighlight]; @@ -137,13 +137,13 @@ public Color InternalButtonCheckedHighlight set => _colors[(int)PaletteColorIndex.ButtonCheckedHighlight] = value; } #endregion - + #region ButtonCheckedHighlightBorder /// /// Gets the border color to use with ButtonCheckedHighlight. /// public override Color ButtonCheckedHighlightBorder => - _colors[(int)PaletteColorIndex.ButtonCheckedHighlightBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedHighlightBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonCheckedHighlightBorder : _colors[(int)PaletteColorIndex.ButtonCheckedHighlightBorder]; @@ -162,7 +162,7 @@ public Color InternalButtonCheckedHighlightBorder /// Gets the border color to use with the ButtonPressedGradientBegin, ButtonPressedGradientMiddle, and ButtonPressedGradientEnd colors. /// public override Color ButtonPressedBorder => - _colors[(int)PaletteColorIndex.ButtonPressedBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonPressedBorder : _colors[(int)PaletteColorIndex.ButtonPressedBorder]; @@ -181,7 +181,7 @@ public Color InternalButtonPressedBorder /// Gets the starting color of the gradient used when the button is pressed. /// public override Color ButtonPressedGradientBegin => - _colors[(int)PaletteColorIndex.ButtonPressedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonPressedGradientBegin : _colors[(int)PaletteColorIndex.ButtonPressedGradientBegin]; @@ -200,7 +200,7 @@ public Color InternalButtonPressedGradientBegin /// Gets the end color of the gradient used when the button is pressed. /// public override Color ButtonPressedGradientEnd => - _colors[(int)PaletteColorIndex.ButtonPressedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonPressedGradientEnd : _colors[(int)PaletteColorIndex.ButtonPressedGradientEnd]; @@ -213,13 +213,13 @@ public Color InternalButtonPressedGradientEnd set => _colors[(int)PaletteColorIndex.ButtonPressedGradientEnd] = value; } #endregion - + #region ButtonPressedGradientMiddle /// /// Gets the middle color of the gradient used when the button is pressed. /// public override Color ButtonPressedGradientMiddle => - _colors[(int)PaletteColorIndex.ButtonPressedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonPressedGradientMiddle : _colors[(int)PaletteColorIndex.ButtonPressedGradientMiddle]; @@ -238,7 +238,7 @@ public Color InternalButtonPressedGradientMiddle /// Gets the solid color used when the button is pressed. /// public override Color ButtonPressedHighlight => - _colors[(int)PaletteColorIndex.ButtonPressedHighlight] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedHighlight] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonPressedHighlight : _colors[(int)PaletteColorIndex.ButtonPressedHighlight]; @@ -257,7 +257,7 @@ public Color InternalButtonPressedHighlight /// Gets the border color to use with ButtonPressedHighlight. /// public override Color ButtonPressedHighlightBorder => - _colors[(int)PaletteColorIndex.ButtonPressedHighlightBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedHighlightBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonPressedHighlightBorder : _colors[(int)PaletteColorIndex.ButtonPressedHighlightBorder]; @@ -276,7 +276,7 @@ public Color InternalButtonPressedHighlightBorder /// Gets the border color to use with the ButtonSelectedGradientBegin, ButtonSelectedGradientMiddle, and ButtonSelectedGradientEnd colors. /// public override Color ButtonSelectedBorder => - _colors[(int)PaletteColorIndex.ButtonSelectedBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonSelectedBorder : _colors[(int)PaletteColorIndex.ButtonSelectedBorder]; @@ -295,7 +295,7 @@ public Color InternalButtonSelectedBorder /// Gets the starting color of the gradient used when the button is selected. /// public override Color ButtonSelectedGradientBegin => - _colors[(int)PaletteColorIndex.ButtonSelectedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonSelectedGradientBegin : _colors[(int)PaletteColorIndex.ButtonSelectedGradientBegin]; @@ -314,7 +314,7 @@ public Color InternalButtonSelectedGradientBegin /// Gets the end color of the gradient used when the button is selected. /// public override Color ButtonSelectedGradientEnd => - _colors[(int)PaletteColorIndex.ButtonSelectedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonSelectedGradientEnd : _colors[(int)PaletteColorIndex.ButtonSelectedGradientEnd]; @@ -327,13 +327,13 @@ public Color InternalButtonSelectedGradientEnd set => _colors[(int)PaletteColorIndex.ButtonSelectedGradientEnd] = value; } #endregion - + #region ButtonSelectedGradientMiddle /// /// Gets the middle color of the gradient used when the button is selected. /// public override Color ButtonSelectedGradientMiddle => - _colors[(int)PaletteColorIndex.ButtonSelectedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonSelectedGradientMiddle : _colors[(int)PaletteColorIndex.ButtonSelectedGradientMiddle]; @@ -352,7 +352,7 @@ public Color InternalButtonSelectedGradientMiddle /// Gets the solid color used when the button is selected. /// public override Color ButtonSelectedHighlight => - _colors[(int)PaletteColorIndex.ButtonSelectedHighlight] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedHighlight] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonSelectedHighlight : _colors[(int)PaletteColorIndex.ButtonSelectedHighlight]; @@ -371,7 +371,7 @@ public Color InternalButtonSelectedHighlight /// Gets the border color to use with ButtonSelectedHighlight. /// public override Color ButtonSelectedHighlightBorder => - _colors[(int)PaletteColorIndex.ButtonSelectedHighlightBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedHighlightBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ButtonSelectedHighlightBorder : _colors[(int)PaletteColorIndex.ButtonSelectedHighlightBorder]; @@ -392,7 +392,7 @@ public Color InternalButtonSelectedHighlightBorder /// Gets the solid color to use when the button is checked and gradients are being used. /// public override Color CheckBackground => - _colors[(int)PaletteColorIndex.CheckBackground] == Color.Empty + _colors[(int)PaletteColorIndex.CheckBackground] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.CheckBackground : _colors[(int)PaletteColorIndex.CheckBackground]; @@ -405,13 +405,13 @@ public Color InternalCheckBackground set => _colors[(int)PaletteColorIndex.CheckBackground] = value; } #endregion - + #region CheckPressedBackground /// /// Gets the solid color to use when the button is checked and selected and gradients are being used. /// public override Color CheckPressedBackground => - _colors[(int)PaletteColorIndex.CheckPressedBackground] == Color.Empty + _colors[(int)PaletteColorIndex.CheckPressedBackground] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.CheckPressedBackground : _colors[(int)PaletteColorIndex.CheckPressedBackground]; @@ -430,7 +430,7 @@ public Color InternalCheckPressedBackground /// Gets the solid color to use when the button is checked and selected and gradients are being used. /// public override Color CheckSelectedBackground => - _colors[(int)PaletteColorIndex.CheckSelectedBackground] == Color.Empty + _colors[(int)PaletteColorIndex.CheckSelectedBackground] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.CheckSelectedBackground : _colors[(int)PaletteColorIndex.CheckSelectedBackground]; @@ -450,7 +450,7 @@ public Color InternalCheckSelectedBackground /// /// Gets the color to use for shadow effects on the grip (move handle). /// - public override Color GripDark => _colors[(int)PaletteColorIndex.GripDark] == Color.Empty ? BaseKCT.GripDark : _colors[(int)PaletteColorIndex.GripDark]; + public override Color GripDark => _colors[(int)PaletteColorIndex.GripDark] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.GripDark : _colors[(int)PaletteColorIndex.GripDark]; /// /// Sets and sets the internal GripDark value. @@ -461,12 +461,12 @@ public Color InternalGripDark set => _colors[(int)PaletteColorIndex.GripDark] = value; } #endregion - + #region GripLight /// /// Gets the color to use for highlight effects on the grip (move handle). /// - public override Color GripLight => _colors[(int)PaletteColorIndex.GripLight] == Color.Empty ? BaseKCT.GripLight : _colors[(int)PaletteColorIndex.GripLight]; + public override Color GripLight => _colors[(int)PaletteColorIndex.GripLight] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.GripLight : _colors[(int)PaletteColorIndex.GripLight]; /// /// Sets and sets the internal GripLight value. @@ -485,7 +485,7 @@ public Color InternalGripLight /// Gets the starting color of the gradient used in the image margin of a ToolStripDropDownMenu. /// public override Color ImageMarginGradientBegin => - _colors[(int)PaletteColorIndex.ImageMarginGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ImageMarginGradientBegin : _colors[(int)PaletteColorIndex.ImageMarginGradientBegin]; @@ -498,13 +498,13 @@ public Color InternalImageMarginGradientBegin set => _colors[(int)PaletteColorIndex.ImageMarginGradientBegin] = value; } #endregion - + #region ImageMarginGradientEnd /// /// Gets the end color of the gradient used in the image margin of a ToolStripDropDownMenu. /// public override Color ImageMarginGradientEnd => - _colors[(int)PaletteColorIndex.ImageMarginGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ImageMarginGradientEnd : _colors[(int)PaletteColorIndex.ImageMarginGradientEnd]; @@ -517,13 +517,13 @@ public Color InternalImageMarginGradientEnd set => _colors[(int)PaletteColorIndex.ImageMarginGradientEnd] = value; } #endregion - + #region ImageMarginGradientMiddle /// /// Gets the middle color of the gradient used in the image margin of a ToolStripDropDownMenu. /// public override Color ImageMarginGradientMiddle => - _colors[(int)PaletteColorIndex.ImageMarginGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ImageMarginGradientMiddle : _colors[(int)PaletteColorIndex.ImageMarginGradientMiddle]; @@ -536,13 +536,13 @@ public Color InternalImageMarginGradientMiddle set => _colors[(int)PaletteColorIndex.ImageMarginGradientMiddle] = value; } #endregion - + #region ImageMarginRevealedGradientBegin /// /// Gets the starting color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed. /// public override Color ImageMarginRevealedGradientBegin => - _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ImageMarginRevealedGradientBegin : _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientBegin]; @@ -555,13 +555,13 @@ public Color InternalImageMarginRevealedGradientBegin set => _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientBegin] = value; } #endregion - + #region ImageMarginRevealedGradientEnd /// /// Gets the end color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed. /// public override Color ImageMarginRevealedGradientEnd => - _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ImageMarginRevealedGradientEnd : _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientEnd]; @@ -574,13 +574,13 @@ public Color InternalImageMarginRevealedGradientEnd set => _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientEnd] = value; } #endregion - + #region ImageMarginRevealedGradientMiddle /// /// Gets the middle color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed. /// public override Color ImageMarginRevealedGradientMiddle => - _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ImageMarginRevealedGradientMiddle : _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientMiddle]; @@ -600,7 +600,7 @@ public Color InternalImageMarginRevealedGradientMiddle /// /// Gets the color that is the border color to use on a MenuStrip. /// - public override Color MenuBorder => _colors[(int)PaletteColorIndex.MenuBorder] == Color.Empty ? BaseKCT.MenuBorder : _colors[(int)PaletteColorIndex.MenuBorder]; + public override Color MenuBorder => _colors[(int)PaletteColorIndex.MenuBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuBorder : _colors[(int)PaletteColorIndex.MenuBorder]; /// /// Sets and sets the internal MenuBorder value. @@ -617,7 +617,7 @@ public Color InternalMenuBorder /// Gets the color used to draw menu item text. /// public override Color MenuItemText => - _colors[(int)PaletteColorIndex.MenuItemText] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemText] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemText : _colors[(int)PaletteColorIndex.MenuItemText]; @@ -650,7 +650,7 @@ public Color InternalMenuItemText /// Gets the border color to use with a ToolStripMenuItem. /// public override Color MenuItemBorder => - _colors[(int)PaletteColorIndex.MenuItemBorder] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemBorder : _colors[(int)PaletteColorIndex.MenuItemBorder]; @@ -663,13 +663,13 @@ public Color InternalMenuItemBorder set => _colors[(int)PaletteColorIndex.MenuItemBorder] = value; } #endregion - + #region MenuItemPressedGradientBegin /// /// Gets the starting color of the gradient used when a top-level ToolStripMenuItem is pressed. /// public override Color MenuItemPressedGradientBegin => - _colors[(int)PaletteColorIndex.MenuItemPressedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemPressedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemPressedGradientBegin : _colors[(int)PaletteColorIndex.MenuItemPressedGradientBegin]; @@ -682,13 +682,13 @@ public Color InternalMenuItemPressedGradientBegin set => _colors[(int)PaletteColorIndex.MenuItemPressedGradientBegin] = value; } #endregion - + #region MenuItemPressedGradientEnd /// /// Gets the end color of the gradient used when a top-level ToolStripMenuItem is pressed. /// public override Color MenuItemPressedGradientEnd => - _colors[(int)PaletteColorIndex.MenuItemPressedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemPressedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemPressedGradientEnd : _colors[(int)PaletteColorIndex.MenuItemPressedGradientEnd]; @@ -701,13 +701,13 @@ public Color InternalMenuItemPressedGradientEnd set => _colors[(int)PaletteColorIndex.MenuItemPressedGradientEnd] = value; } #endregion - + #region MenuItemPressedGradientMiddle /// /// Gets the middle color of the gradient used when a top-level ToolStripMenuItem is pressed. /// public override Color MenuItemPressedGradientMiddle => - _colors[(int)PaletteColorIndex.MenuItemPressedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemPressedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemPressedGradientMiddle : _colors[(int)PaletteColorIndex.MenuItemPressedGradientMiddle]; @@ -720,13 +720,13 @@ public Color InternalMenuItemPressedGradientMiddle set => _colors[(int)PaletteColorIndex.MenuItemPressedGradientMiddle] = value; } #endregion - + #region MenuItemSelected /// /// Gets the solid color to use when a ToolStripMenuItem other than the top-level ToolStripMenuItem is selected. /// public override Color MenuItemSelected => - _colors[(int)PaletteColorIndex.MenuItemSelected] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemSelected] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemSelected : _colors[(int)PaletteColorIndex.MenuItemSelected]; @@ -739,13 +739,13 @@ public Color InternalMenuItemSelected set => _colors[(int)PaletteColorIndex.MenuItemSelected] = value; } #endregion - + #region MenuItemSelectedGradientBegin /// /// Gets the starting color of the gradient used when the ToolStripMenuItem is selected. /// public override Color MenuItemSelectedGradientBegin => - _colors[(int)PaletteColorIndex.MenuItemSelectedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemSelectedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemSelectedGradientBegin : _colors[(int)PaletteColorIndex.MenuItemSelectedGradientBegin]; @@ -758,13 +758,13 @@ public Color InternalMenuItemSelectedGradientBegin set => _colors[(int)PaletteColorIndex.MenuItemSelectedGradientBegin] = value; } #endregion - + #region MenuItemSelectedGradientEnd /// /// Gets the end color of the gradient used when the ToolStripMenuItem is selected. /// public override Color MenuItemSelectedGradientEnd => - _colors[(int)PaletteColorIndex.MenuItemSelectedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemSelectedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuItemSelectedGradientEnd : _colors[(int)PaletteColorIndex.MenuItemSelectedGradientEnd]; @@ -782,17 +782,26 @@ public Color InternalMenuItemSelectedGradientEnd /// /// Gets the color used to draw text on a menu strip. /// - public override Color MenuStripText => - _colors[(int)PaletteColorIndex.MenuStripText] == Color.Empty - ? BaseKCT.MenuStripText - : _colors[(int)PaletteColorIndex.MenuStripText]; + public override Color MenuStripText + { + get + { + if (_colors.Length > (int)PaletteColorIndex.MenuStripText) + { + return _colors[(int)PaletteColorIndex.MenuStripText] == GlobalStaticValues.EMPTY_COLOR + ? BaseKCT.MenuStripText + : _colors[(int)PaletteColorIndex.MenuStripText]; + } + return BaseKCT.MenuStripText; + } + } /// /// Sets and sets the internal MenuStripText value. /// public Color InternalMenuStripText { - get => _colors[(int)PaletteColorIndex.MenuStripText]; + get => _colors.Length > (int)PaletteColorIndex.MenuStripText ? _colors[(int)PaletteColorIndex.MenuStripText] : BaseKCT.MenuStripText; set => _colors[(int)PaletteColorIndex.MenuStripText] = value; } #endregion @@ -802,7 +811,7 @@ public Color InternalMenuStripText /// Gets the starting color of the gradient used in the MenuStrip. /// public override Color MenuStripGradientBegin => - _colors[(int)PaletteColorIndex.MenuStripGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.MenuStripGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuStripGradientBegin : _colors[(int)PaletteColorIndex.MenuStripGradientBegin]; @@ -815,13 +824,13 @@ public Color InternalMenuStripGradientBegin set => _colors[(int)PaletteColorIndex.MenuStripGradientBegin] = value; } #endregion - + #region MenuStripGradientEnd /// /// Gets the end color of the gradient used in the MenuStrip. /// public override Color MenuStripGradientEnd => - _colors[(int)PaletteColorIndex.MenuStripGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.MenuStripGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.MenuStripGradientEnd : _colors[(int)PaletteColorIndex.MenuStripGradientEnd]; @@ -842,7 +851,7 @@ public Color InternalMenuStripGradientEnd /// Gets the starting color of the gradient used in the ToolStripOverflowButton. /// public override Color OverflowButtonGradientBegin => - _colors[(int)PaletteColorIndex.OverflowButtonGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.OverflowButtonGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.OverflowButtonGradientBegin : _colors[(int)PaletteColorIndex.OverflowButtonGradientBegin]; @@ -855,13 +864,13 @@ public Color InternalOverflowButtonGradientBegin set => _colors[(int)PaletteColorIndex.OverflowButtonGradientBegin] = value; } #endregion - + #region OverflowButtonGradientEnd /// /// Gets the end color of the gradient used in the ToolStripOverflowButton. /// public override Color OverflowButtonGradientEnd => - _colors[(int)PaletteColorIndex.OverflowButtonGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.OverflowButtonGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.OverflowButtonGradientEnd : _colors[(int)PaletteColorIndex.OverflowButtonGradientEnd]; @@ -874,13 +883,13 @@ public Color InternalOverflowButtonGradientEnd set => _colors[(int)PaletteColorIndex.OverflowButtonGradientEnd] = value; } #endregion - + #region OverflowButtonGradientMiddle /// /// Gets the middle color of the gradient used in the ToolStripOverflowButton. /// public override Color OverflowButtonGradientMiddle => - _colors[(int)PaletteColorIndex.OverflowButtonGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.OverflowButtonGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.OverflowButtonGradientMiddle : _colors[(int)PaletteColorIndex.OverflowButtonGradientMiddle]; @@ -901,7 +910,7 @@ public Color InternalOverflowButtonGradientMiddle /// Gets the starting color of the gradient used in the ToolStripContainer. /// public override Color RaftingContainerGradientBegin => - _colors[(int)PaletteColorIndex.RaftingContainerGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.RaftingContainerGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.RaftingContainerGradientBegin : _colors[(int)PaletteColorIndex.RaftingContainerGradientBegin]; @@ -914,13 +923,13 @@ public Color InternalRaftingContainerGradientBegin set => _colors[(int)PaletteColorIndex.RaftingContainerGradientBegin] = value; } #endregion - + #region RaftingContainerGradientEnd /// /// Gets the end color of the gradient used in the ToolStripContainer. /// public override Color RaftingContainerGradientEnd => - _colors[(int)PaletteColorIndex.RaftingContainerGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.RaftingContainerGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.RaftingContainerGradientEnd : _colors[(int)PaletteColorIndex.RaftingContainerGradientEnd]; @@ -941,7 +950,7 @@ public Color InternalRaftingContainerGradientEnd /// Gets the color to use to for shadow effects on the ToolStripSeparator. /// public override Color SeparatorDark => - _colors[(int)PaletteColorIndex.SeparatorDark] == Color.Empty + _colors[(int)PaletteColorIndex.SeparatorDark] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.SeparatorDark : _colors[(int)PaletteColorIndex.SeparatorDark]; @@ -960,7 +969,7 @@ public Color InternalSeparatorDark /// Gets the color to use to for highlight effects on the ToolStripSeparator. /// public override Color SeparatorLight => - _colors[(int)PaletteColorIndex.SeparatorLight] == Color.Empty + _colors[(int)PaletteColorIndex.SeparatorLight] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.SeparatorLight : _colors[(int)PaletteColorIndex.SeparatorLight]; @@ -981,7 +990,7 @@ public Color InternalSeparatorLight /// Gets the color used to draw text on a status strip. /// public override Color StatusStripText => - _colors[(int)PaletteColorIndex.StatusStripText] == Color.Empty + _colors[(int)PaletteColorIndex.StatusStripText] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.StatusStripText : _colors[(int)PaletteColorIndex.StatusStripText]; @@ -1008,13 +1017,13 @@ public Color InternalStatusStripText public Font? InternalStatusStripFont { get; set; } #endregion - + #region StatusStripGradientBegin /// /// Gets the starting color of the gradient used on the StatusStrip. /// public override Color StatusStripGradientBegin => - _colors[(int)PaletteColorIndex.StatusStripGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.StatusStripGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.StatusStripGradientBegin : _colors[(int)PaletteColorIndex.StatusStripGradientBegin]; @@ -1027,13 +1036,13 @@ public Color InternalStatusStripGradientBegin set => _colors[(int)PaletteColorIndex.StatusStripGradientBegin] = value; } #endregion - + #region StatusStripGradientEnd /// /// Gets the end color of the gradient used on the StatusStrip. /// public override Color StatusStripGradientEnd => - _colors[(int)PaletteColorIndex.StatusStripGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.StatusStripGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.StatusStripGradientEnd : _colors[(int)PaletteColorIndex.StatusStripGradientEnd]; @@ -1054,7 +1063,7 @@ public Color InternalStatusStripGradientEnd /// Gets the color used to draw text on a tool strip. /// public override Color ToolStripText => - _colors[(int)PaletteColorIndex.ToolStripText] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripText] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripText : _colors[(int)PaletteColorIndex.ToolStripText]; @@ -1087,7 +1096,7 @@ public Color InternalToolStripText /// Gets the border color to use on the bottom edge of the ToolStrip. /// public override Color ToolStripBorder => - _colors[(int)PaletteColorIndex.ToolStripBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripBorder] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripBorder : _colors[(int)PaletteColorIndex.ToolStripBorder]; @@ -1100,13 +1109,13 @@ public Color InternalToolStripBorder set => _colors[(int)PaletteColorIndex.ToolStripBorder] = value; } #endregion - + #region ToolStripContentPanelGradientBegin /// /// Gets the starting color of the gradient used in the ToolStripContentPanel. /// public override Color ToolStripContentPanelGradientBegin => - _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripContentPanelGradientBegin : _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientBegin]; @@ -1119,13 +1128,13 @@ public Color InternalToolStripContentPanelGradientBegin set => _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientBegin] = value; } #endregion - + #region ToolStripContentPanelGradientEnd /// /// Gets the end color of the gradient used in the ToolStripContentPanel. /// public override Color ToolStripContentPanelGradientEnd => - _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripContentPanelGradientEnd : _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientEnd]; @@ -1144,7 +1153,7 @@ public Color InternalToolStripContentPanelGradientEnd /// Gets the solid background color of the ToolStripDropDown. /// public override Color ToolStripDropDownBackground => - _colors[(int)PaletteColorIndex.ToolStripDropDownBackground] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripDropDownBackground] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripDropDownBackground : _colors[(int)PaletteColorIndex.ToolStripDropDownBackground]; @@ -1157,13 +1166,13 @@ public Color InternalToolStripDropDownBackground set => _colors[(int)PaletteColorIndex.ToolStripDropDownBackground] = value; } #endregion - + #region ToolStripGradientBegin /// /// Gets the starting color of the gradient used in the ToolStrip background. /// public override Color ToolStripGradientBegin => - _colors[(int)PaletteColorIndex.ToolStripGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripGradientBegin : _colors[(int)PaletteColorIndex.ToolStripGradientBegin]; @@ -1176,13 +1185,13 @@ public Color InternalToolStripGradientBegin set => _colors[(int)PaletteColorIndex.ToolStripGradientBegin] = value; } #endregion - + #region ToolStripGradientEnd /// /// Gets the end color of the gradient used in the ToolStrip background. /// public override Color ToolStripGradientEnd => - _colors[(int)PaletteColorIndex.ToolStripGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripGradientEnd : _colors[(int)PaletteColorIndex.ToolStripGradientEnd]; @@ -1195,13 +1204,13 @@ public Color InternalToolStripGradientEnd set => _colors[(int)PaletteColorIndex.ToolStripGradientEnd] = value; } #endregion - + #region ToolStripGradientMiddle /// /// Gets the middle color of the gradient used in the ToolStrip background. /// public override Color ToolStripGradientMiddle => - _colors[(int)PaletteColorIndex.ToolStripGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripGradientMiddle : _colors[(int)PaletteColorIndex.ToolStripGradientMiddle]; @@ -1214,13 +1223,13 @@ public Color InternalToolStripGradientMiddle set => _colors[(int)PaletteColorIndex.ToolStripGradientMiddle] = value; } #endregion - + #region ToolStripPanelGradientBegin /// /// Gets the starting color of the gradient used in the ToolStripPanel. /// public override Color ToolStripPanelGradientBegin => - _colors[(int)PaletteColorIndex.ToolStripPanelGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripPanelGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripPanelGradientBegin : _colors[(int)PaletteColorIndex.ToolStripPanelGradientBegin]; @@ -1233,13 +1242,13 @@ public Color InternalToolStripPanelGradientBegin set => _colors[(int)PaletteColorIndex.ToolStripPanelGradientBegin] = value; } #endregion - + #region ToolStripPanelGradientEnd /// /// Gets the end color of the gradient used in the ToolStripPanel. /// public override Color ToolStripPanelGradientEnd => - _colors[(int)PaletteColorIndex.ToolStripPanelGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripPanelGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? BaseKCT.ToolStripPanelGradientEnd : _colors[(int)PaletteColorIndex.ToolStripPanelGradientEnd]; @@ -1256,7 +1265,7 @@ public Color InternalToolStripPanelGradientEnd #region UseRoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => InternalUseRoundedEdges == InheritBool.Inherit ? BaseKCT.UseRoundedEdges : InternalUseRoundedEdges; @@ -1272,7 +1281,7 @@ internal KryptonColorTable BaseKCT { get => _baseKCT; - set + set { // Use the new inheritance _baseKCT = value; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecBase.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecBase.cs index 9342fa827..f56e66ee0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ internal KryptonPaletteButtonSpecBase([DisallowNull] PaletteRedirect redirector) Debug.Assert(redirector != null); // Remember reference to redirector - Redirector = redirector; + Redirector = redirector!; // Default the generic overridable values _style = PaletteButtonStyle.Inherit; @@ -55,9 +55,11 @@ internal KryptonPaletteButtonSpecBase([DisallowNull] PaletteRedirect redirector) /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Style == PaletteButtonStyle.Inherit) && - (Orientation == PaletteButtonOrientation.Inherit) && - (Edge == PaletteRelativeEdgeAlign.Inherit); + (Orientation == PaletteButtonOrientation.Inherit) && + (Edge == PaletteRelativeEdgeAlign.Inherit); #endregion @@ -213,21 +215,21 @@ public PaletteRelativeEdgeAlign Edge /// /// Style of button spec. /// String value. - public virtual string? GetButtonSpecShortText(PaletteButtonSpecStyle style) => Redirector.GetButtonSpecShortText(style); + public virtual string GetButtonSpecShortText(PaletteButtonSpecStyle style) => Redirector.GetButtonSpecShortText(style); /// /// Gets the long text to display for the button. /// /// Style of button spec. /// String value. - public virtual string? GetButtonSpecLongText(PaletteButtonSpecStyle style) => Redirector.GetButtonSpecLongText(style); + public virtual string GetButtonSpecLongText(PaletteButtonSpecStyle style) => Redirector.GetButtonSpecLongText(style); /// /// Gets the tooltip title text to display for the button. /// /// Style of button spec. /// String value. - public virtual string? GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) => Redirector.GetButtonSpecToolTipTitle(style); + public virtual string GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) => Redirector.GetButtonSpecToolTipTitle(style); /// /// Gets the color to remap from the image to the container foreground. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecTyped.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecTyped.cs index 25314c73d..29df9ead8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecTyped.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecTyped.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,7 +21,7 @@ public class KryptonPaletteButtonSpecTyped : KryptonPaletteButtonSpecBase private Image? _image; private string _text; private string _extraText; - private string? _toolTipTitle; + private string _toolTipTitle; private Color _colorMap; private bool _allowInheritImage; private bool _allowInheritText; @@ -42,7 +42,7 @@ internal KryptonPaletteButtonSpecTyped([DisallowNull] PaletteRedirect redirector _text = string.Empty; _extraText = string.Empty; _toolTipTitle = string.Empty; - _colorMap = Color.Empty; + _colorMap = GlobalStaticValues.EMPTY_COLOR; _allowInheritImage = true; _allowInheritText = true; _allowInheritExtraText = true; @@ -59,17 +59,18 @@ internal KryptonPaletteButtonSpecTyped([DisallowNull] PaletteRedirect redirector /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - ImageStates.IsDefault&& - (Image == null) && - (Text == string.Empty) && - (ExtraText == string.Empty) && - (ToolTipTitle == string.Empty) && - (ColorMap == Color.Empty) && - AllowInheritImage && - AllowInheritText && - AllowInheritExtraText && - AllowInheritToolTipTitle; + ImageStates.IsDefault && + (Image == null) && + (Text == string.Empty) && + (ExtraText == string.Empty) && + (ToolTipTitle == string.Empty) && + (ColorMap == GlobalStaticValues.EMPTY_COLOR) && + AllowInheritImage && + AllowInheritText && + AllowInheritExtraText && + AllowInheritToolTipTitle; #endregion @@ -217,7 +218,7 @@ public string ExtraText [Description(@"Button tooltip title text.")] [Editor(typeof(MultilineStringEditor), typeof(UITypeEditor))] [DefaultValue("")] - public string? ToolTipTitle + public string ToolTipTitle { get => _toolTipTitle; @@ -248,7 +249,7 @@ public string? ToolTipTitle [Localizable(true)] [Category(@"Visuals")] [Description(@"Image color to remap to container foreground.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ColorMap { get => _colorMap; @@ -263,12 +264,12 @@ public Color ColorMap } } - private bool ShouldSerializeColorMap() => ColorMap != Color.Empty; + private bool ShouldSerializeColorMap() => ColorMap != GlobalStaticValues.EMPTY_COLOR; /// /// Resets the ColorMap property to its default value. /// - public void ResetColorMap() => ColorMap = Color.Empty; + public void ResetColorMap() => ColorMap = GlobalStaticValues.EMPTY_COLOR; #endregion @@ -403,7 +404,7 @@ public bool AllowInheritToolTipTitle PaletteState state) { // Try and recover a state specific image - Image image = state switch + Image? image = state switch { PaletteState.Disabled => ImageStates.ImageDisabled, PaletteState.Normal => ImageStates.ImageNormal, @@ -426,7 +427,7 @@ public bool AllowInheritToolTipTitle /// /// Style of button spec. /// String value. - public override string? GetButtonSpecShortText(PaletteButtonSpecStyle style) => + public override string GetButtonSpecShortText(PaletteButtonSpecStyle style) => (Text.Length > 0) || !AllowInheritText ? Text : base.GetButtonSpecShortText(style); /// @@ -434,7 +435,7 @@ public bool AllowInheritToolTipTitle /// /// Style of button spec. /// String value. - public override string? GetButtonSpecLongText(PaletteButtonSpecStyle style) => + public override string GetButtonSpecLongText(PaletteButtonSpecStyle style) => (ExtraText.Length > 0) || !AllowInheritExtraText ? ExtraText : base.GetButtonSpecLongText(style); /// @@ -442,7 +443,7 @@ public bool AllowInheritToolTipTitle /// /// Style of button spec. /// String value. - public override string? GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) => (ToolTipTitle.Length > 0) || !AllowInheritToolTipTitle ? ToolTipTitle : base.GetButtonSpecToolTipTitle(style); + public override string GetButtonSpecToolTipTitle(PaletteButtonSpecStyle style) => (ToolTipTitle.Length > 0) || !AllowInheritToolTipTitle ? ToolTipTitle : base.GetButtonSpecToolTipTitle(style); /// /// Gets the color to remap from the image to the container foreground. @@ -450,7 +451,7 @@ public bool AllowInheritToolTipTitle /// Style of button spec. /// Color value. public override Color GetButtonSpecColorMap(PaletteButtonSpecStyle style) => - ColorMap != Color.Empty ? ColorMap : base.GetButtonSpecColorMap(style); + ColorMap != GlobalStaticValues.EMPTY_COLOR ? ColorMap : base.GetButtonSpecColorMap(style); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecs.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecs.cs index caa2d83db..4c4fae2e4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteButtonSpecs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,37 +31,37 @@ public class KryptonPaletteButtonSpecs : Storage /// Palette redirector for sourcing inherited values. public KryptonPaletteButtonSpecs([DisallowNull] PaletteRedirect redirector) { - Debug.Assert(redirector != null); + Debug.Assert(redirector! != null); // Create exposed button specifications - Common = new KryptonPaletteButtonSpecTyped(redirector); - Generic = new KryptonPaletteButtonSpecTyped(redirector); - Close = new KryptonPaletteButtonSpecTyped(redirector); - Context = new KryptonPaletteButtonSpecTyped(redirector); - Next = new KryptonPaletteButtonSpecTyped(redirector); - Previous = new KryptonPaletteButtonSpecTyped(redirector); - ArrowLeft = new KryptonPaletteButtonSpecTyped(redirector); - ArrowRight = new KryptonPaletteButtonSpecTyped(redirector); - ArrowUp = new KryptonPaletteButtonSpecTyped(redirector); - ArrowDown = new KryptonPaletteButtonSpecTyped(redirector); - DropDown = new KryptonPaletteButtonSpecTyped(redirector); - PinVertical = new KryptonPaletteButtonSpecTyped(redirector); - PinHorizontal = new KryptonPaletteButtonSpecTyped(redirector); - FormClose = new KryptonPaletteButtonSpecTyped(redirector); - FormMax = new KryptonPaletteButtonSpecTyped(redirector); - FormMin = new KryptonPaletteButtonSpecTyped(redirector); - FormRestore = new KryptonPaletteButtonSpecTyped(redirector); - FormHelp = new KryptonPaletteButtonSpecTyped(redirector); - PendantClose = new KryptonPaletteButtonSpecTyped(redirector); - PendantMin = new KryptonPaletteButtonSpecTyped(redirector); - PendantRestore = new KryptonPaletteButtonSpecTyped(redirector); - WorkspaceMaximize = new KryptonPaletteButtonSpecTyped(redirector); - WorkspaceRestore = new KryptonPaletteButtonSpecTyped(redirector); - RibbonMinimize = new KryptonPaletteButtonSpecTyped(redirector); - RibbonExpand = new KryptonPaletteButtonSpecTyped(redirector); + Common = new KryptonPaletteButtonSpecTyped(redirector!); + Generic = new KryptonPaletteButtonSpecTyped(redirector!); + Close = new KryptonPaletteButtonSpecTyped(redirector!); + Context = new KryptonPaletteButtonSpecTyped(redirector!); + Next = new KryptonPaletteButtonSpecTyped(redirector!); + Previous = new KryptonPaletteButtonSpecTyped(redirector!); + ArrowLeft = new KryptonPaletteButtonSpecTyped(redirector!); + ArrowRight = new KryptonPaletteButtonSpecTyped(redirector!); + ArrowUp = new KryptonPaletteButtonSpecTyped(redirector!); + ArrowDown = new KryptonPaletteButtonSpecTyped(redirector!); + DropDown = new KryptonPaletteButtonSpecTyped(redirector!); + PinVertical = new KryptonPaletteButtonSpecTyped(redirector!); + PinHorizontal = new KryptonPaletteButtonSpecTyped(redirector!); + FormClose = new KryptonPaletteButtonSpecTyped(redirector!); + FormMax = new KryptonPaletteButtonSpecTyped(redirector!); + FormMin = new KryptonPaletteButtonSpecTyped(redirector!); + FormRestore = new KryptonPaletteButtonSpecTyped(redirector!); + FormHelp = new KryptonPaletteButtonSpecTyped(redirector!); + PendantClose = new KryptonPaletteButtonSpecTyped(redirector!); + PendantMin = new KryptonPaletteButtonSpecTyped(redirector!); + PendantRestore = new KryptonPaletteButtonSpecTyped(redirector!); + WorkspaceMaximize = new KryptonPaletteButtonSpecTyped(redirector!); + WorkspaceRestore = new KryptonPaletteButtonSpecTyped(redirector!); + RibbonMinimize = new KryptonPaletteButtonSpecTyped(redirector!); + RibbonExpand = new KryptonPaletteButtonSpecTyped(redirector!); // Create redirector for inheriting from style specific to style common - var redirectCommon = new PaletteRedirectButtonSpec(redirector, Common); + var redirectCommon = new PaletteRedirectButtonSpec(redirector!, Common); // Inform the button spec to use the new redirector Generic.SetRedirector(redirectCommon); @@ -122,31 +122,33 @@ public KryptonPaletteButtonSpecs([DisallowNull] PaletteRedirect redirector) /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Common.IsDefault && - Generic.IsDefault && - Close.IsDefault && - Context.IsDefault && - Next.IsDefault && - Previous.IsDefault && - ArrowLeft.IsDefault && - ArrowRight.IsDefault && - ArrowUp.IsDefault && - ArrowDown.IsDefault && - DropDown.IsDefault && - PinVertical.IsDefault && - PinHorizontal.IsDefault && - FormClose.IsDefault && - FormMax.IsDefault && - FormMin.IsDefault && - FormRestore.IsDefault && - FormHelp.IsDefault && - PendantClose.IsDefault && - PendantMin.IsDefault && - PendantRestore.IsDefault && - WorkspaceMaximize.IsDefault && - WorkspaceRestore.IsDefault && - RibbonMinimize.IsDefault && - RibbonExpand.IsDefault; + Generic.IsDefault && + Close.IsDefault && + Context.IsDefault && + Next.IsDefault && + Previous.IsDefault && + ArrowLeft.IsDefault && + ArrowRight.IsDefault && + ArrowUp.IsDefault && + ArrowDown.IsDefault && + DropDown.IsDefault && + PinVertical.IsDefault && + PinHorizontal.IsDefault && + FormClose.IsDefault && + FormMax.IsDefault && + FormMin.IsDefault && + FormRestore.IsDefault && + FormHelp.IsDefault && + PendantClose.IsDefault && + PendantMin.IsDefault && + PendantRestore.IsDefault && + WorkspaceMaximize.IsDefault && + WorkspaceRestore.IsDefault && + RibbonMinimize.IsDefault && + RibbonExpand.IsDefault; #endregion @@ -541,7 +543,7 @@ public void PopulateFromBase() /// /// Source of the event. /// An EventArgs containing event data. - protected virtual void OnButtonSpecChanged(object sender, EventArgs e) => ButtonSpecChanged?.Invoke(this, e); + protected virtual void OnButtonSpecChanged(object? sender, EventArgs e) => ButtonSpecChanged?.Invoke(this, e); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCalendarDay.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCalendarDay.cs index e9028c2e8..fc4fc42ec 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCalendarDay.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCalendarDay.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class KryptonPaletteCalendarDay : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteCalendarDay(PaletteRedirect? redirect, + public KryptonPaletteCalendarDay(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteCalendarDay(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { OverrideFocus.SetRedirector(redirect); OverrideBolded.SetRedirector(redirect); @@ -60,17 +60,18 @@ public void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - OverrideFocus.IsDefault && - OverrideBolded.IsDefault && - OverrideToday.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StatePressed.IsDefault && - StateCheckedNormal.IsDefault && - StateCheckedTracking.IsDefault && - StateCheckedPressed.IsDefault; + OverrideFocus.IsDefault && + OverrideBolded.IsDefault && + OverrideToday.IsDefault && + StateDisabled.IsDefault && + StateNormal.IsDefault && + StateTracking.IsDefault && + StatePressed.IsDefault && + StateCheckedNormal.IsDefault && + StateCheckedTracking.IsDefault && + StateCheckedPressed.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCargo.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCargo.cs index bff082581..2cf3fdbc9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCargo.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCargo.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,11 +28,11 @@ public KryptonPaletteCargo(NeedPaintHandler needPaint) NeedPaint = needPaint; // Default cargo values - Color1 = Color.Empty; - Color2 = Color.Empty; - Color3 = Color.Empty; - Color4 = Color.Empty; - Color5 = Color.Empty; + Color1 = GlobalStaticValues.EMPTY_COLOR; + Color2 = GlobalStaticValues.EMPTY_COLOR; + Color3 = GlobalStaticValues.EMPTY_COLOR; + Color4 = GlobalStaticValues.EMPTY_COLOR; + Color5 = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -42,11 +42,12 @@ public KryptonPaletteCargo(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (Color1 == Color.Empty) && - (Color2 == Color.Empty) && - (Color3 == Color.Empty) && - (Color4 == Color.Empty) && - (Color5 == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (Color1 == GlobalStaticValues.EMPTY_COLOR) && + (Color2 == GlobalStaticValues.EMPTY_COLOR) && + (Color3 == GlobalStaticValues.EMPTY_COLOR) && + (Color4 == GlobalStaticValues.EMPTY_COLOR) && + (Color5 == GlobalStaticValues.EMPTY_COLOR); //(Font1 == null) && //(Font2 == null); @@ -59,14 +60,14 @@ public KryptonPaletteCargo(NeedPaintHandler needPaint) [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"User supplied color value.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color1 { get; set; } /// /// esets the Color1 property to its default value. /// - public void ResetColor1() => Color1 = Color.Empty; + public void ResetColor1() => Color1 = GlobalStaticValues.EMPTY_COLOR; #endregion #region Color2 @@ -76,14 +77,14 @@ public KryptonPaletteCargo(NeedPaintHandler needPaint) [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"User supplied color value.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color2 { get; set; } /// /// esets the Color2 property to its default value. /// - public void ResetColor2() => Color2 = Color.Empty; + public void ResetColor2() => Color2 = GlobalStaticValues.EMPTY_COLOR; #endregion #region Color3 @@ -93,14 +94,14 @@ public KryptonPaletteCargo(NeedPaintHandler needPaint) [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"User supplied color value.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color3 { get; set; } /// /// esets the Color3 property to its default value. /// - public void ResetColor3() => Color3 = Color.Empty; + public void ResetColor3() => Color3 = GlobalStaticValues.EMPTY_COLOR; #endregion #region Color4 @@ -110,14 +111,14 @@ public KryptonPaletteCargo(NeedPaintHandler needPaint) [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"User supplied color value.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color4 { get; set; } /// /// esets the Color4 property to its default value. /// - public void ResetColor4() => Color4 = Color.Empty; + public void ResetColor4() => Color4 = GlobalStaticValues.EMPTY_COLOR; #endregion #region Color5 @@ -127,14 +128,14 @@ public KryptonPaletteCargo(NeedPaintHandler needPaint) [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"User supplied color value.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color5 { get; set; } /// /// esets the Color5 property to its default value. /// - public void ResetColor5() => Color5 = Color.Empty; + public void ResetColor5() => Color5 = GlobalStaticValues.EMPTY_COLOR; #endregion /* diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButton.cs index 8967026df..af094a5f6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ public class KryptonPaletteCheckButton : Storage /// Border style. /// Content style. /// Delegate for notifying paint requests. - public KryptonPaletteCheckButton(PaletteRedirect? redirect, + public KryptonPaletteCheckButton(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, @@ -51,7 +51,7 @@ public KryptonPaletteCheckButton(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { OverrideDefault.SetRedirector(redirect); OverrideFocus.SetRedirector(redirect); @@ -64,16 +64,17 @@ public void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - OverrideDefault.IsDefault && - OverrideFocus.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StatePressed.IsDefault && - StateCheckedNormal.IsDefault && - StateCheckedTracking.IsDefault && - StateCheckedPressed.IsDefault; + OverrideDefault.IsDefault && + OverrideFocus.IsDefault && + StateDisabled.IsDefault && + StateNormal.IsDefault && + StateTracking.IsDefault && + StatePressed.IsDefault && + StateCheckedNormal.IsDefault && + StateCheckedTracking.IsDefault && + StateCheckedPressed.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButtons.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButtons.cs index bf269c884..3ca4df47a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButtons.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCheckButtons.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,29 +29,29 @@ public KryptonPaletteCheckButtons([DisallowNull] PaletteRedirect redirector, Debug.Assert(redirector != null); // Create the button style specific and common palettes - ButtonCommon = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); - ButtonStandalone = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); - ButtonAlternate = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonAlternate, PaletteBorderStyle.ButtonAlternate, PaletteContentStyle.ButtonAlternate, needPaint); - ButtonLowProfile = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonLowProfile, PaletteBorderStyle.ButtonLowProfile, PaletteContentStyle.ButtonLowProfile, needPaint); - ButtonButtonSpec = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); - ButtonBreadCrumb = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonBreadCrumb, PaletteBorderStyle.ButtonBreadCrumb, PaletteContentStyle.ButtonBreadCrumb, needPaint); - ButtonCalendarDay = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonCalendarDay, PaletteBorderStyle.ButtonCalendarDay, PaletteContentStyle.ButtonCalendarDay, needPaint); - ButtonCluster = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonCluster, PaletteBorderStyle.ButtonCluster, PaletteContentStyle.ButtonCluster, needPaint); - ButtonGallery = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonGallery, PaletteBorderStyle.ButtonGallery, PaletteContentStyle.ButtonGallery, needPaint); - ButtonNavigatorStack = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonNavigatorStack, PaletteBorderStyle.ButtonNavigatorStack, PaletteContentStyle.ButtonNavigatorStack, needPaint); - ButtonNavigatorOverflow = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonNavigatorOverflow, PaletteBorderStyle.ButtonNavigatorOverflow, PaletteContentStyle.ButtonNavigatorOverflow, needPaint); - ButtonNavigatorMini = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonNavigatorMini, PaletteBorderStyle.ButtonNavigatorMini, PaletteContentStyle.ButtonNavigatorMini, needPaint); - ButtonInputControl = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonInputControl, PaletteBorderStyle.ButtonInputControl, PaletteContentStyle.ButtonInputControl, needPaint); - ButtonListItem = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, needPaint); - ButtonForm = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonForm, PaletteBorderStyle.ButtonForm, PaletteContentStyle.ButtonForm, needPaint); - ButtonFormClose = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonFormClose, PaletteBorderStyle.ButtonFormClose, PaletteContentStyle.ButtonFormClose, needPaint); - ButtonCommand = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, needPaint); - ButtonCustom1 = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonCustom1, PaletteBorderStyle.ButtonCustom1, PaletteContentStyle.ButtonCustom1, needPaint); - ButtonCustom2 = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonCustom2, PaletteBorderStyle.ButtonCustom2, PaletteContentStyle.ButtonCustom2, needPaint); - ButtonCustom3 = new KryptonPaletteCheckButton(redirector, PaletteBackStyle.ButtonCustom3, PaletteBorderStyle.ButtonCustom3, PaletteContentStyle.ButtonCustom3, needPaint); + ButtonCommon = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); + ButtonStandalone = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); + ButtonAlternate = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonAlternate, PaletteBorderStyle.ButtonAlternate, PaletteContentStyle.ButtonAlternate, needPaint); + ButtonLowProfile = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonLowProfile, PaletteBorderStyle.ButtonLowProfile, PaletteContentStyle.ButtonLowProfile, needPaint); + ButtonButtonSpec = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonButtonSpec, PaletteBorderStyle.ButtonButtonSpec, PaletteContentStyle.ButtonButtonSpec, needPaint); + ButtonBreadCrumb = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonBreadCrumb, PaletteBorderStyle.ButtonBreadCrumb, PaletteContentStyle.ButtonBreadCrumb, needPaint); + ButtonCalendarDay = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonCalendarDay, PaletteBorderStyle.ButtonCalendarDay, PaletteContentStyle.ButtonCalendarDay, needPaint); + ButtonCluster = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonCluster, PaletteBorderStyle.ButtonCluster, PaletteContentStyle.ButtonCluster, needPaint); + ButtonGallery = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonGallery, PaletteBorderStyle.ButtonGallery, PaletteContentStyle.ButtonGallery, needPaint); + ButtonNavigatorStack = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonNavigatorStack, PaletteBorderStyle.ButtonNavigatorStack, PaletteContentStyle.ButtonNavigatorStack, needPaint); + ButtonNavigatorOverflow = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonNavigatorOverflow, PaletteBorderStyle.ButtonNavigatorOverflow, PaletteContentStyle.ButtonNavigatorOverflow, needPaint); + ButtonNavigatorMini = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonNavigatorMini, PaletteBorderStyle.ButtonNavigatorMini, PaletteContentStyle.ButtonNavigatorMini, needPaint); + ButtonInputControl = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonInputControl, PaletteBorderStyle.ButtonInputControl, PaletteContentStyle.ButtonInputControl, needPaint); + ButtonListItem = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, needPaint); + ButtonForm = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonForm, PaletteBorderStyle.ButtonForm, PaletteContentStyle.ButtonForm, needPaint); + ButtonFormClose = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonFormClose, PaletteBorderStyle.ButtonFormClose, PaletteContentStyle.ButtonFormClose, needPaint); + ButtonCommand = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonCommand, PaletteBorderStyle.ButtonCommand, PaletteContentStyle.ButtonCommand, needPaint); + ButtonCustom1 = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonCustom1, PaletteBorderStyle.ButtonCustom1, PaletteContentStyle.ButtonCustom1, needPaint); + ButtonCustom2 = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonCustom2, PaletteBorderStyle.ButtonCustom2, PaletteContentStyle.ButtonCustom2, needPaint); + ButtonCustom3 = new KryptonPaletteCheckButton(redirector!, PaletteBackStyle.ButtonCustom3, PaletteBorderStyle.ButtonCustom3, PaletteContentStyle.ButtonCustom3, needPaint); // Create redirectors for inheriting from style specific to style common - var redirectCommon = new PaletteRedirectTriple(redirector, ButtonCommon.StateDisabled, + var redirectCommon = new PaletteRedirectTriple(redirector!, ButtonCommon.StateDisabled, ButtonCommon.StateNormal, ButtonCommon.StatePressed, ButtonCommon.StateTracking, ButtonCommon.StateCheckedNormal, ButtonCommon.StateCheckedPressed, ButtonCommon.StateCheckedTracking, ButtonCommon.OverrideFocus, ButtonCommon.OverrideDefault); @@ -82,26 +82,28 @@ public KryptonPaletteCheckButtons([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ButtonCommon.IsDefault && - ButtonStandalone.IsDefault && - ButtonAlternate.IsDefault && - ButtonLowProfile.IsDefault && - ButtonButtonSpec.IsDefault && - ButtonBreadCrumb.IsDefault && - ButtonCalendarDay.IsDefault && - ButtonCluster.IsDefault && - ButtonGallery.IsDefault && - ButtonNavigatorStack.IsDefault && - ButtonNavigatorOverflow.IsDefault && - ButtonNavigatorMini.IsDefault && - ButtonInputControl.IsDefault && - ButtonListItem.IsDefault && - ButtonForm.IsDefault && - ButtonFormClose.IsDefault && - ButtonCommand.IsDefault && - ButtonCustom1.IsDefault && - ButtonCustom2.IsDefault && - ButtonCustom3.IsDefault; + ButtonStandalone.IsDefault && + ButtonAlternate.IsDefault && + ButtonLowProfile.IsDefault && + ButtonButtonSpec.IsDefault && + ButtonBreadCrumb.IsDefault && + ButtonCalendarDay.IsDefault && + ButtonCluster.IsDefault && + ButtonGallery.IsDefault && + ButtonNavigatorStack.IsDefault && + ButtonNavigatorOverflow.IsDefault && + ButtonNavigatorMini.IsDefault && + ButtonInputControl.IsDefault && + ButtonListItem.IsDefault && + ButtonForm.IsDefault && + ButtonFormClose.IsDefault && + ButtonCommand.IsDefault && + ButtonCustom1.IsDefault && + ButtonCustom2.IsDefault && + ButtonCustom3.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCommon.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCommon.cs index 67d105e9b..8c58fec88 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCommon.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCommon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public KryptonPaletteCommon([DisallowNull] PaletteRedirect redirector, Debug.Assert(redirector != null); // Create the common palettes - StateCommon = new PaletteTripleRedirect(redirector, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); + StateCommon = new PaletteTripleRedirect(redirector!, PaletteBackStyle.ButtonStandalone, PaletteBorderStyle.ButtonStandalone, PaletteContentStyle.ButtonStandalone, needPaint); StateDisabled = new PaletteTriple(StateCommon, needPaint); StateOthers = new PaletteTriple(StateCommon, needPaint); } @@ -39,9 +39,11 @@ public KryptonPaletteCommon([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateDisabled.IsDefault && - StateOthers.IsDefault; + StateDisabled.IsDefault && + StateOthers.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteContextMenu.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteContextMenu.cs index 914b3c971..568f969bc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteContextMenu.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteContextMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public KryptonPaletteContextMenu(PaletteRedirect? redirect, NeedPaintHandler needPaint) { // Create the storage objects - StateCommon = new PaletteContextMenuRedirect(redirect, needPaint); + StateCommon = new PaletteContextMenuRedirect(redirect!, needPaint); StateNormal = new PaletteContextMenuItemState(StateCommon); StateDisabled = new PaletteContextMenuItemState(StateCommon); StateHighlight = new PaletteContextMenuItemStateHighlight(StateCommon); @@ -40,7 +40,7 @@ public KryptonPaletteContextMenu(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => StateCommon.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => StateCommon.SetRedirector(redirect); #endregion @@ -48,11 +48,13 @@ public KryptonPaletteContextMenu(PaletteRedirect? redirect, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateDisabled.IsDefault && - StateHighlight.IsDefault && - StateChecked.IsDefault; + StateNormal.IsDefault && + StateDisabled.IsDefault && + StateHighlight.IsDefault && + StateChecked.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControl.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControl.cs index 13ec3a49d..8a142d24f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,10 +25,10 @@ public class KryptonPaletteControl : KryptonPaletteDouble3 /// Background style. /// Border style. /// Delegate for notifying paint requests. - public KryptonPaletteControl(PaletteRedirect? redirect, + public KryptonPaletteControl(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, - NeedPaintHandler needPaint) + NeedPaintHandler needPaint) : base(redirect, backStyle, borderStyle, needPaint) { } @@ -42,12 +42,12 @@ public KryptonPaletteControl(PaletteRedirect? redirect, [Category(@"Visuals")] [Description(@"Overrides for defining common control appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDoubleRedirect? StateCommon => _stateCommon; + public PaletteDoubleRedirect StateCommon => _stateCommon; private bool ShouldSerializeStateCommon() => !_stateCommon.IsDefault; #endregion - + #region StateDisabled /// /// Gets access to the disabled control appearance entries. @@ -56,7 +56,7 @@ public KryptonPaletteControl(PaletteRedirect? redirect, [Category(@"Visuals")] [Description(@"Overrides for defining disabled control appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDouble? StateDisabled => _stateDisabled; + public PaletteDouble StateDisabled => _stateDisabled; private bool ShouldSerializeStateDisabled() => !_stateDisabled.IsDefault; @@ -70,7 +70,7 @@ public KryptonPaletteControl(PaletteRedirect? redirect, [Category(@"Visuals")] [Description(@"Overrides for defining normal control appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDouble? StateNormal => _stateNormal; + public PaletteDouble StateNormal => _stateNormal; private bool ShouldSerializeStateNormal() => !_stateNormal.IsDefault; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControls.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControls.cs index b369ae1af..8a61306b8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControls.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteControls.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,20 +29,20 @@ public KryptonPaletteControls([DisallowNull] PaletteRedirect redirector, Debug.Assert(redirector != null); // Create the button style specific and common palettes - ControlCommon = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlClient, PaletteBorderStyle.ControlClient, needPaint); - ControlClient = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlClient, PaletteBorderStyle.ControlClient, needPaint); - ControlAlternate = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlAlternate, PaletteBorderStyle.ControlAlternate, needPaint); - ControlGroupBox = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlGroupBox, PaletteBorderStyle.ControlGroupBox, needPaint); - ControlToolTip = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlToolTip, PaletteBorderStyle.ControlToolTip, needPaint); - ControlRibbon = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlRibbon, PaletteBorderStyle.ControlRibbon, needPaint); - ControlRibbonAppMenu = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlRibbonAppMenu, PaletteBorderStyle.ControlRibbonAppMenu, needPaint); - ControlCustom1 = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlCustom1, PaletteBorderStyle.ControlCustom1, needPaint); - ControlCustom2 = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlCustom2, PaletteBorderStyle.ControlCustom2, needPaint); - ControlCustom3 = new KryptonPaletteControl(redirector, PaletteBackStyle.ControlCustom3, PaletteBorderStyle.ControlCustom3, needPaint); + ControlCommon = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlClient, PaletteBorderStyle.ControlClient, needPaint); + ControlClient = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlClient, PaletteBorderStyle.ControlClient, needPaint); + ControlAlternate = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlAlternate, PaletteBorderStyle.ControlAlternate, needPaint); + ControlGroupBox = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlGroupBox, PaletteBorderStyle.ControlGroupBox, needPaint); + ControlToolTip = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlToolTip, PaletteBorderStyle.ControlToolTip, needPaint); + ControlRibbon = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlRibbon, PaletteBorderStyle.ControlRibbon, needPaint); + ControlRibbonAppMenu = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlRibbonAppMenu, PaletteBorderStyle.ControlRibbonAppMenu, needPaint); + ControlCustom1 = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlCustom1, PaletteBorderStyle.ControlCustom1, needPaint); + ControlCustom2 = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlCustom2, PaletteBorderStyle.ControlCustom2, needPaint); + ControlCustom3 = new KryptonPaletteControl(redirector!, PaletteBackStyle.ControlCustom3, PaletteBorderStyle.ControlCustom3, needPaint); // Create redirectors for inheriting from style specific to style common var redirectCommon = - new PaletteRedirectDouble(redirector, ControlCommon.StateDisabled, ControlCommon.StateNormal); + new PaletteRedirectDouble(redirector!, ControlCommon.StateDisabled, ControlCommon.StateNormal); // Inform the button style to use the new redirector ControlClient.SetRedirector(redirectCommon); @@ -61,14 +61,16 @@ public KryptonPaletteControls([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ControlCommon.IsDefault && - ControlClient.IsDefault && - ControlAlternate.IsDefault && - ControlGroupBox.IsDefault && - ControlToolTip.IsDefault && - ControlRibbon.IsDefault && - ControlRibbonAppMenu.IsDefault && - ControlCustom1.IsDefault; + ControlClient.IsDefault && + ControlAlternate.IsDefault && + ControlGroupBox.IsDefault && + ControlToolTip.IsDefault && + ControlRibbon.IsDefault && + ControlRibbonAppMenu.IsDefault && + ControlCustom1.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCueHintText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCueHintText.cs index 24415ecc2..235aa9445 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCueHintText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteCueHintText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,25 +20,27 @@ public KryptonPaletteCueHintText(NeedPaintHandler needPaint) { NeedPaint = needPaint; - CueColor = Color.Empty; + CueColor = GlobalStaticValues.EMPTY_COLOR; CueFont = null; } #endregion - public override bool IsDefault => (CueColor == Color.Empty) && (CueFont == null); + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (CueColor == GlobalStaticValues.EMPTY_COLOR) && (CueFont == null); #region Colour public Color CueColor { get; set; } - public void ResetCueColor() => CueColor = Color.Empty; + public void ResetCueColor() => CueColor = GlobalStaticValues.EMPTY_COLOR; #endregion #region Font - public Font CueFont { get; set; } + public Font? CueFont { get; set; } public void ResetCueFont() => CueFont = null; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteDouble3.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteDouble3.cs index 43fc16080..8f3f0c02c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteDouble3.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteDouble3.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,9 +18,9 @@ namespace Krypton.Toolkit public abstract class KryptonPaletteDouble3 : Storage { #region Instance Fields - internal PaletteDoubleRedirect? _stateCommon; - internal PaletteDouble? _stateDisabled; - internal PaletteDouble? _stateNormal; + internal PaletteDoubleRedirect _stateCommon; + internal PaletteDouble _stateDisabled; + internal PaletteDouble _stateNormal; #endregion #region Identity @@ -31,10 +31,10 @@ public abstract class KryptonPaletteDouble3 : Storage /// Background style. /// Border style. /// Delegate for notifying paint requests. - protected KryptonPaletteDouble3(PaletteRedirect? redirect, + protected KryptonPaletteDouble3(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, - NeedPaintHandler needPaint) + NeedPaintHandler needPaint) { // Create the storage objects _stateCommon = new PaletteDoubleRedirect(redirect, backStyle, borderStyle, needPaint); @@ -48,7 +48,7 @@ protected KryptonPaletteDouble3(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateCommon.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateCommon.SetRedirector(redirect); #endregion @@ -57,9 +57,10 @@ protected KryptonPaletteDouble3(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => _stateCommon.IsDefault && - _stateDisabled.IsDefault && - _stateNormal.IsDefault; + _stateDisabled.IsDefault && + _stateNormal.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteFont.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteFont.cs index 37ce544b3..6198c626f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteFont.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteFont.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,6 +42,7 @@ public KryptonPaletteFont([DisallowNull] PaletteRedirect redirector, NeedPaintHa /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (CommonLongTextFont == new Font("Segoe UI", 9f)) && (CommonShortTextFont == new Font("Segoe UI", 9f)); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForm.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForm.cs index 0a86c36dd..81c5c180b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForm.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,7 +25,7 @@ public class KryptonPaletteForm : KryptonPaletteDouble3 /// Background style. /// Border style. /// Delegate for notifying paint requests. - public KryptonPaletteForm(PaletteRedirect? redirect, + public KryptonPaletteForm(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, NeedPaintHandler needPaint) @@ -42,7 +42,7 @@ public KryptonPaletteForm(PaletteRedirect? redirect, [Category(@"Visuals")] [Description(@"Overrides for defining common control appearance that other states can override.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDoubleRedirect? StateCommon => _stateCommon; + public PaletteDoubleRedirect StateCommon => _stateCommon; private bool ShouldSerializeStateCommon() => !_stateCommon.IsDefault; @@ -56,7 +56,7 @@ public KryptonPaletteForm(PaletteRedirect? redirect, [Category(@"Visuals")] [Description(@"Overrides for defining inactive form appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDouble? StateInactive => _stateDisabled; + public PaletteDouble StateInactive => _stateDisabled; private bool ShouldSerializeStateInactive() => !_stateDisabled.IsDefault; @@ -70,7 +70,7 @@ public KryptonPaletteForm(PaletteRedirect? redirect, [Category(@"Visuals")] [Description(@"Overrides for defining active form appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDouble? StateActive => _stateNormal; + public PaletteDouble StateActive => _stateNormal; private bool ShouldSerializeStateActive() => !_stateNormal.IsDefault; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForms.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForms.cs index e83242245..55630807b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForms.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteForms.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,15 +29,15 @@ public KryptonPaletteForms([DisallowNull] PaletteRedirect redirector, Debug.Assert(redirector != null); // Create the form style specific and common palettes - FormCommon = new KryptonPaletteForm(redirector, PaletteBackStyle.FormMain, PaletteBorderStyle.FormMain, needPaint); - FormMain = new KryptonPaletteForm(redirector, PaletteBackStyle.FormMain, PaletteBorderStyle.FormMain, needPaint); - FormCustom1 = new KryptonPaletteForm(redirector, PaletteBackStyle.FormCustom1, PaletteBorderStyle.FormCustom1, needPaint); - FormCustom2 = new KryptonPaletteForm(redirector, PaletteBackStyle.FormCustom2, PaletteBorderStyle.FormCustom2, needPaint); - FormCustom3 = new KryptonPaletteForm(redirector, PaletteBackStyle.FormCustom3, PaletteBorderStyle.FormCustom3, needPaint); + FormCommon = new KryptonPaletteForm(redirector!, PaletteBackStyle.FormMain, PaletteBorderStyle.FormMain, needPaint); + FormMain = new KryptonPaletteForm(redirector!, PaletteBackStyle.FormMain, PaletteBorderStyle.FormMain, needPaint); + FormCustom1 = new KryptonPaletteForm(redirector!, PaletteBackStyle.FormCustom1, PaletteBorderStyle.FormCustom1, needPaint); + FormCustom2 = new KryptonPaletteForm(redirector!, PaletteBackStyle.FormCustom2, PaletteBorderStyle.FormCustom2, needPaint); + FormCustom3 = new KryptonPaletteForm(redirector!, PaletteBackStyle.FormCustom3, PaletteBorderStyle.FormCustom3, needPaint); // Create redirectors for inheriting from style specific to style common var redirectCommon = - new PaletteRedirectDouble(redirector, FormCommon.StateInactive, FormCommon.StateActive); + new PaletteRedirectDouble(redirector!, FormCommon.StateInactive, FormCommon.StateActive); // Inform the form style to use the new redirector FormMain.SetRedirector(redirectCommon); @@ -51,9 +51,11 @@ public KryptonPaletteForms([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => FormCommon.IsDefault && - FormMain.IsDefault && - FormCustom1.IsDefault; + FormMain.IsDefault && + FormCustom1.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrid.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrid.cs index c2891cb1f..f8a76351e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrid.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrid.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public class KryptonPaletteGrid : Storage /// Redirector to inherit values from. /// Grid style. /// Delegate for notifying paint requests. - public KryptonPaletteGrid(PaletteRedirect? redirect, + public KryptonPaletteGrid(PaletteRedirect redirect, GridStyle gridStyle, NeedPaintHandler needPaint) { @@ -43,7 +43,7 @@ public KryptonPaletteGrid(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => StateCommon.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => StateCommon.SetRedirector(redirect); #endregion @@ -52,12 +52,13 @@ public KryptonPaletteGrid(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StatePressed.IsDefault && - StateSelected.IsDefault; + StateDisabled.IsDefault && + StateNormal.IsDefault && + StateTracking.IsDefault && + StatePressed.IsDefault && + StateSelected.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrids.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrids.cs index 9f93b5643..7793089fa 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrids.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteGrids.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,17 +26,17 @@ public class KryptonPaletteGrids : Storage public KryptonPaletteGrids([DisallowNull] PaletteRedirect redirector, NeedPaintHandler needPaint) { - Debug.Assert(redirector != null); + Debug.Assert(redirector! != null); - GridCommon = new KryptonPaletteGrid(redirector, GridStyle.List, needPaint); - GridList = new KryptonPaletteGrid(redirector, GridStyle.List, needPaint); - GridSheet = new KryptonPaletteGrid(redirector, GridStyle.Sheet, needPaint); - GridCustom1 = new KryptonPaletteGrid(redirector, GridStyle.Custom1, needPaint); - GridCustom2 = new KryptonPaletteGrid(redirector, GridStyle.Custom3, needPaint); - GridCustom3 = new KryptonPaletteGrid(redirector, GridStyle.Custom3, needPaint); + GridCommon = new KryptonPaletteGrid(redirector!, GridStyle.List, needPaint); + GridList = new KryptonPaletteGrid(redirector!, GridStyle.List, needPaint); + GridSheet = new KryptonPaletteGrid(redirector!, GridStyle.Sheet, needPaint); + GridCustom1 = new KryptonPaletteGrid(redirector!, GridStyle.Custom1, needPaint); + GridCustom2 = new KryptonPaletteGrid(redirector!, GridStyle.Custom3, needPaint); + GridCustom3 = new KryptonPaletteGrid(redirector!, GridStyle.Custom3, needPaint); // Create redirectors for inheriting from style specific to style common - var redirectCommon = new PaletteRedirectGrids(redirector, GridCommon); + var redirectCommon = new PaletteRedirectGrids(redirector!, GridCommon); // Ensure the specific styles inherit to the common grid style GridList.SetRedirector(redirectCommon); @@ -51,12 +51,14 @@ public KryptonPaletteGrids([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => GridCommon.IsDefault && - GridList.IsDefault && - GridSheet.IsDefault - &&GridCustom1.IsDefault - && GridCustom2.IsDefault - && GridCustom3.IsDefault; + GridList.IsDefault && + GridSheet.IsDefault + &&GridCustom1.IsDefault + && GridCustom2.IsDefault + && GridCustom3.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeader.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeader.cs index f622a88ea..3d5f97b54 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeader.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeader.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,7 @@ public class KryptonPaletteHeader : Storage /// Border style. /// Content style. /// Delegate for notifying paint requests. - public KryptonPaletteHeader(PaletteRedirect? redirect, + public KryptonPaletteHeader(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, @@ -44,7 +44,7 @@ public KryptonPaletteHeader(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => StateCommon.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => StateCommon.SetRedirector(redirect); #endregion @@ -53,9 +53,10 @@ public KryptonPaletteHeader(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault; + StateDisabled.IsDefault && + StateNormal.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroup.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroup.cs index f5ec039a0..fd3f2ffde 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public KryptonPaletteHeaderGroup([DisallowNull] PaletteRedirect redirect, Debug.Assert(redirect != null); // Create the storage objects - StateCommon = new KryptonPaletteHeaderGroupState(redirect, needPaint); + StateCommon = new KryptonPaletteHeaderGroupState(redirect!, needPaint); } #endregion @@ -38,6 +38,7 @@ public KryptonPaletteHeaderGroup([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroupState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroupState.cs index 2e8d332e0..440ab8d2a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroupState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaderGroupState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -58,11 +58,12 @@ public KryptonPaletteHeaderGroupState([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => PrimaryHeaderPadding.Equals(CommonHelper.InheritPadding) && - SecondaryHeaderPadding.Equals(CommonHelper.InheritPadding) && - DockInactiveHeaderPadding.Equals(CommonHelper.InheritPadding) && - DockActiveHeaderPadding.Equals(CommonHelper.InheritPadding) && - (OverlayHeaders == InheritBool.Inherit); + SecondaryHeaderPadding.Equals(CommonHelper.InheritPadding) && + DockInactiveHeaderPadding.Equals(CommonHelper.InheritPadding) && + DockActiveHeaderPadding.Equals(CommonHelper.InheritPadding) && + (OverlayHeaders == InheritBool.Inherit); #endregion @@ -72,11 +73,11 @@ public KryptonPaletteHeaderGroupState([DisallowNull] PaletteRedirect redirect, /// public void PopulateFromBase() { - PrimaryHeaderPadding = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingPrimary); - SecondaryHeaderPadding = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingSecondary); - DockInactiveHeaderPadding = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingDockInactive); - DockActiveHeaderPadding = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingDockActive); - OverlayHeaders = _redirect.GetMetricBool(PaletteState.Normal, PaletteMetricBool.HeaderGroupOverlay); + PrimaryHeaderPadding = _redirect!.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingPrimary); + SecondaryHeaderPadding = _redirect!.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingSecondary); + DockInactiveHeaderPadding = _redirect!.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingDockInactive); + DockActiveHeaderPadding = _redirect!.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.HeaderGroupPaddingDockActive); + OverlayHeaders = _redirect!.GetMetricBool(PaletteState.Normal, PaletteMetricBool.HeaderGroupOverlay); } #endregion @@ -234,7 +235,7 @@ public InheritBool OverlayHeaders /// Integer value. public virtual int GetMetricInt(PaletteState state, PaletteMetricInt metric) => // Always pass onto the inheritance - _redirect.GetMetricInt(state, metric); + _redirect!.GetMetricInt(state, metric); /// /// Gets a boolean metric value. @@ -255,7 +256,7 @@ public virtual InheritBool GetMetricBool(PaletteState state, PaletteMetricBool m } // Pass onto the inheritance - return _redirect.GetMetricBool(state, metric); + return _redirect!.GetMetricBool(state, metric); } /// @@ -299,7 +300,7 @@ public virtual Padding GetMetricPadding(PaletteState state, PaletteMetricPadding } // Pass onto the inheritance - return _redirect.GetMetricPadding(state, metric); + return _redirect!.GetMetricPadding(state, metric); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaders.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaders.cs index fa4442eac..ac78d1309 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaders.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteHeaders.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,19 +28,19 @@ public KryptonPaletteHeaders([DisallowNull] PaletteRedirect redirector, { Debug.Assert(redirector != null); // Create the button style specific and common palettes - HeaderCommon = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderPrimary, PaletteBorderStyle.HeaderPrimary, PaletteContentStyle.HeaderPrimary, needPaint); - HeaderPrimary = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderPrimary, PaletteBorderStyle.HeaderPrimary, PaletteContentStyle.HeaderPrimary, needPaint); - HeaderSecondary = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderSecondary, PaletteBorderStyle.HeaderSecondary, PaletteContentStyle.HeaderSecondary, needPaint); - HeaderDockInactive = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderDockInactive, PaletteBorderStyle.HeaderDockInactive, PaletteContentStyle.HeaderDockInactive, needPaint); - HeaderDockActive = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderDockActive, PaletteBorderStyle.HeaderDockActive, PaletteContentStyle.HeaderDockActive, needPaint); - HeaderCalendar = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderCalendar, PaletteBorderStyle.HeaderCalendar, PaletteContentStyle.HeaderCalendar, needPaint); - HeaderForm = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderForm, PaletteBorderStyle.HeaderForm, PaletteContentStyle.HeaderForm, needPaint); - HeaderCustom1 = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderCustom1, PaletteBorderStyle.HeaderCustom1, PaletteContentStyle.HeaderCustom1, needPaint); - HeaderCustom2 = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderCustom2, PaletteBorderStyle.HeaderCustom2, PaletteContentStyle.HeaderCustom2, needPaint); - HeaderCustom3 = new KryptonPaletteHeader(redirector, PaletteBackStyle.HeaderCustom3, PaletteBorderStyle.HeaderCustom3, PaletteContentStyle.HeaderCustom3, needPaint); + HeaderCommon = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderPrimary, PaletteBorderStyle.HeaderPrimary, PaletteContentStyle.HeaderPrimary, needPaint); + HeaderPrimary = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderPrimary, PaletteBorderStyle.HeaderPrimary, PaletteContentStyle.HeaderPrimary, needPaint); + HeaderSecondary = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderSecondary, PaletteBorderStyle.HeaderSecondary, PaletteContentStyle.HeaderSecondary, needPaint); + HeaderDockInactive = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderDockInactive, PaletteBorderStyle.HeaderDockInactive, PaletteContentStyle.HeaderDockInactive, needPaint); + HeaderDockActive = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderDockActive, PaletteBorderStyle.HeaderDockActive, PaletteContentStyle.HeaderDockActive, needPaint); + HeaderCalendar = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderCalendar, PaletteBorderStyle.HeaderCalendar, PaletteContentStyle.HeaderCalendar, needPaint); + HeaderForm = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderForm, PaletteBorderStyle.HeaderForm, PaletteContentStyle.HeaderForm, needPaint); + HeaderCustom1 = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderCustom1, PaletteBorderStyle.HeaderCustom1, PaletteContentStyle.HeaderCustom1, needPaint); + HeaderCustom2 = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderCustom2, PaletteBorderStyle.HeaderCustom2, PaletteContentStyle.HeaderCustom2, needPaint); + HeaderCustom3 = new KryptonPaletteHeader(redirector!, PaletteBackStyle.HeaderCustom3, PaletteBorderStyle.HeaderCustom3, PaletteContentStyle.HeaderCustom3, needPaint); // Create redirectors for inheriting from style specific to style common - var redirectCommon = new PaletteRedirectTripleMetric(redirector, + var redirectCommon = new PaletteRedirectTripleMetric(redirector!, HeaderCommon.StateDisabled, HeaderCommon.StateDisabled, HeaderCommon.StateNormal, HeaderCommon.StateNormal); @@ -61,16 +61,18 @@ public KryptonPaletteHeaders([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => HeaderCommon.IsDefault && - HeaderPrimary.IsDefault && - HeaderSecondary.IsDefault && - HeaderDockInactive.IsDefault && - HeaderDockActive.IsDefault && - HeaderCalendar.IsDefault && - HeaderForm.IsDefault && - HeaderCustom1.IsDefault - && HeaderCustom2.IsDefault - && HeaderCustom3.IsDefault; + HeaderPrimary.IsDefault && + HeaderSecondary.IsDefault && + HeaderDockInactive.IsDefault && + HeaderDockActive.IsDefault && + HeaderCalendar.IsDefault && + HeaderForm.IsDefault && + HeaderCustom1.IsDefault + && HeaderCustom2.IsDefault + && HeaderCustom3.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImages.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImages.cs index 8add036de..627645ff7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,12 +44,14 @@ public KryptonPaletteImages([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => CheckBox.IsDefault && - ContextMenu.IsDefault && - DropDownButton.IsDefault && - GalleryButtons.IsDefault && - RadioButton.IsDefault && - TreeView.IsDefault; + ContextMenu.IsDefault && + DropDownButton.IsDefault && + GalleryButtons.IsDefault && + RadioButton.IsDefault && + TreeView.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesCheckBox.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesCheckBox.cs index 52876f317..ac72a2d3a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesCheckBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -71,19 +71,20 @@ public KryptonPaletteImagesCheckBox(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_uncheckedDisabled == null) && - (_uncheckedNormal == null) && - (_uncheckedTracking == null) && - (_uncheckedPressed == null) && - (_checkedDisabled == null) && - (_checkedNormal == null) && - (_checkedTracking == null) && - (_checkedPressed == null) && - (_indeterminateDisabled == null) && - (_indeterminateNormal == null) && - (_indeterminateTracking == null) && - (_indeterminatePressed == null); + (_uncheckedDisabled == null) && + (_uncheckedNormal == null) && + (_uncheckedTracking == null) && + (_uncheckedPressed == null) && + (_checkedDisabled == null) && + (_checkedNormal == null) && + (_checkedTracking == null) && + (_checkedPressed == null) && + (_indeterminateDisabled == null) && + (_indeterminateNormal == null) && + (_indeterminateTracking == null) && + (_indeterminatePressed == null); #endregion @@ -93,18 +94,18 @@ public KryptonPaletteImagesCheckBox(PaletteRedirect? redirect, /// public void PopulateFromBase() { - _checkedDisabled = _redirect.GetCheckBoxImage(false, CheckState.Checked, false, false); - _checkedNormal = _redirect.GetCheckBoxImage(true, CheckState.Checked, false, false); - _checkedTracking = _redirect.GetCheckBoxImage(true, CheckState.Checked, true, false); - _checkedPressed = _redirect.GetCheckBoxImage(true, CheckState.Checked, false, true); - _uncheckedDisabled = _redirect.GetCheckBoxImage(false, CheckState.Unchecked, false, false); - _uncheckedNormal = _redirect.GetCheckBoxImage(true, CheckState.Unchecked, false, false); - _uncheckedTracking = _redirect.GetCheckBoxImage(true, CheckState.Unchecked, true, false); - _uncheckedPressed = _redirect.GetCheckBoxImage(true, CheckState.Unchecked, false, true); - _indeterminateDisabled = _redirect.GetCheckBoxImage(false, CheckState.Indeterminate, false, false); - _indeterminateNormal = _redirect.GetCheckBoxImage(true, CheckState.Indeterminate, false, false); - _indeterminateTracking = _redirect.GetCheckBoxImage(true, CheckState.Indeterminate, true, false); - _indeterminatePressed = _redirect.GetCheckBoxImage(true, CheckState.Indeterminate, false, true); + _checkedDisabled = _redirect?.GetCheckBoxImage(false, CheckState.Checked, false, false); + _checkedNormal = _redirect?.GetCheckBoxImage(true, CheckState.Checked, false, false); + _checkedTracking = _redirect?.GetCheckBoxImage(true, CheckState.Checked, true, false); + _checkedPressed = _redirect?.GetCheckBoxImage(true, CheckState.Checked, false, true); + _uncheckedDisabled = _redirect?.GetCheckBoxImage(false, CheckState.Unchecked, false, false); + _uncheckedNormal = _redirect?.GetCheckBoxImage(true, CheckState.Unchecked, false, false); + _uncheckedTracking = _redirect?.GetCheckBoxImage(true, CheckState.Unchecked, true, false); + _uncheckedPressed = _redirect?.GetCheckBoxImage(true, CheckState.Unchecked, false, true); + _indeterminateDisabled = _redirect?.GetCheckBoxImage(false, CheckState.Indeterminate, false, false); + _indeterminateNormal = _redirect?.GetCheckBoxImage(true, CheckState.Indeterminate, false, false); + _indeterminateTracking = _redirect?.GetCheckBoxImage(true, CheckState.Indeterminate, true, false); + _indeterminatePressed = _redirect?.GetCheckBoxImage(true, CheckState.Indeterminate, false, true); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesContextMenu.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesContextMenu.cs index ee7488698..29dd89529 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesContextMenu.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesContextMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -51,9 +51,10 @@ public KryptonPaletteImagesContextMenu(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_checked == null) && - (_indeterminate == null) && - (_subMenu == null); + (_indeterminate == null) && + (_subMenu == null); #endregion @@ -63,9 +64,9 @@ public KryptonPaletteImagesContextMenu(PaletteRedirect? redirect, /// public void PopulateFromBase() { - _checked = _redirect.GetContextMenuCheckedImage(); - _indeterminate = _redirect.GetContextMenuIndeterminateImage(); - _subMenu = _redirect.GetContextMenuSubMenuImage(); + _checked = _redirect?.GetContextMenuCheckedImage(); + _indeterminate = _redirect?.GetContextMenuIndeterminateImage(); + _subMenu = _redirect?.GetContextMenuSubMenuImage(); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesDropDownButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesDropDownButton.cs index ca7785e42..1cc2f7b72 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesDropDownButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesDropDownButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -55,11 +55,12 @@ public KryptonPaletteImagesDropDownButton(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_disabled == null) && - (_normal == null) && - (_tracking == null) && - (_pressed == null); + (_disabled == null) && + (_normal == null) && + (_tracking == null) && + (_pressed == null); #endregion @@ -69,10 +70,10 @@ public KryptonPaletteImagesDropDownButton(PaletteRedirect? redirect, /// public void PopulateFromBase() { - _disabled = _redirect.GetDropDownButtonImage(PaletteState.Disabled); - _normal = _redirect.GetDropDownButtonImage(PaletteState.Normal); - _tracking = _redirect.GetDropDownButtonImage(PaletteState.Tracking); - _pressed = _redirect.GetDropDownButtonImage(PaletteState.Pressed); + _disabled = _redirect?.GetDropDownButtonImage(PaletteState.Disabled); + _normal = _redirect?.GetDropDownButtonImage(PaletteState.Normal); + _tracking = _redirect?.GetDropDownButtonImage(PaletteState.Tracking); + _pressed = _redirect?.GetDropDownButtonImage(PaletteState.Pressed); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButton.cs index be067b45f..d70c0f9c3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -56,11 +56,12 @@ public KryptonPaletteImagesGalleryButton(PaletteRibbonGalleryButton button, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_disabled == null) && - (_normal == null) && - (_tracking == null) && - (_pressed == null); + (_disabled == null) && + (_normal == null) && + (_tracking == null) && + (_pressed == null); #endregion @@ -70,10 +71,10 @@ public KryptonPaletteImagesGalleryButton(PaletteRibbonGalleryButton button, /// public void PopulateFromBase() { - _disabled = _redirect.GetGalleryButtonImage(_button, PaletteState.Disabled); - _normal = _redirect.GetGalleryButtonImage(_button, PaletteState.Normal); - _tracking = _redirect.GetGalleryButtonImage(_button, PaletteState.Tracking); - _pressed = _redirect.GetGalleryButtonImage(_button, PaletteState.Pressed); + _disabled = _redirect?.GetGalleryButtonImage(_button, PaletteState.Disabled); + _normal = _redirect?.GetGalleryButtonImage(_button, PaletteState.Normal); + _tracking = _redirect?.GetGalleryButtonImage(_button, PaletteState.Tracking); + _pressed = _redirect?.GetGalleryButtonImage(_button, PaletteState.Pressed); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButtons.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButtons.cs index 56e7643c6..a22dfd0ad 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButtons.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesGalleryButtons.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -41,9 +41,10 @@ public KryptonPaletteImagesGalleryButtons(PaletteRedirect? redirector, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Up.IsDefault && - Down.IsDefault && - DropDown.IsDefault; + Down.IsDefault && + DropDown.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesIntegratedToolBar.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesIntegratedToolBar.cs index 60d7e245d..cd1abd8e7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesIntegratedToolBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesIntegratedToolBar.cs @@ -2,7 +2,7 @@ /* * * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -65,6 +65,8 @@ public KryptonPaletteImagesIntegratedToolBar(PaletteRedirect? redirect, NeedPain #region IsDefault + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault { get; } #endregion @@ -74,35 +76,35 @@ public KryptonPaletteImagesIntegratedToolBar(PaletteRedirect? redirect, NeedPain /// Populates values from base palette. public void PopulateFromBase() { - _copy = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Copy, PaletteState.Normal); + _copy = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Copy, PaletteState.Normal); - _cut = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Cut, PaletteState.Normal); + _cut = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Cut, PaletteState.Normal); - _help = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.FormHelp, PaletteState.Normal); + _help = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.FormHelp, PaletteState.Normal); - _print = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Print, PaletteState.Normal); + _print = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Print, PaletteState.Normal); - _pageSetup = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.PageSetup, PaletteState.Normal); + _pageSetup = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.PageSetup, PaletteState.Normal); - _paste = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Paste, PaletteState.Normal); + _paste = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Paste, PaletteState.Normal); - _printPreview = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.PrintPreview, PaletteState.Normal); + _printPreview = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.PrintPreview, PaletteState.Normal); - _new = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.New, PaletteState.Normal); + _new = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.New, PaletteState.Normal); - _open = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Open, PaletteState.Normal); + _open = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Open, PaletteState.Normal); - _redo = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Redo, PaletteState.Normal); + _redo = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Redo, PaletteState.Normal); - _undo = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Undo, PaletteState.Normal); + _undo = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Undo, PaletteState.Normal); - _save = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.Save, PaletteState.Normal); + _save = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.Save, PaletteState.Normal); - _saveAll = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.SaveAll, PaletteState.Normal); + _saveAll = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.SaveAll, PaletteState.Normal); - _saveAs = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.SaveAs, PaletteState.Normal); + _saveAs = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.SaveAs, PaletteState.Normal); - _quickPrint = _redirect.GetButtonSpecImage(PaletteButtonSpecStyle.QuickPrint, PaletteState.Normal); + _quickPrint = _redirect?.GetButtonSpecImage(PaletteButtonSpecStyle.QuickPrint, PaletteState.Normal); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesRadioButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesRadioButton.cs index 68f172fd2..325f20b72 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesRadioButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -63,15 +63,16 @@ public KryptonPaletteImagesRadioButton(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_uncheckedDisabled == null) && - (_uncheckedNormal == null) && - (_uncheckedTracking == null) && - (_uncheckedPressed == null) && - (_checkedDisabled == null) && - (_checkedNormal == null) && - (_checkedTracking == null) && - (_checkedPressed == null); + (_uncheckedDisabled == null) && + (_uncheckedNormal == null) && + (_uncheckedTracking == null) && + (_uncheckedPressed == null) && + (_checkedDisabled == null) && + (_checkedNormal == null) && + (_checkedTracking == null) && + (_checkedPressed == null); #endregion @@ -81,14 +82,14 @@ public KryptonPaletteImagesRadioButton(PaletteRedirect? redirect, /// public void PopulateFromBase() { - _checkedDisabled = _redirect.GetRadioButtonImage(false, true, false, false); - _checkedNormal = _redirect.GetRadioButtonImage(true, true, false, false); - _checkedTracking = _redirect.GetRadioButtonImage(true, true, true, false); - _checkedPressed = _redirect.GetRadioButtonImage(true, true, false, true); - _uncheckedDisabled = _redirect.GetRadioButtonImage(false, false, false, false); - _uncheckedNormal = _redirect.GetRadioButtonImage(true, false, false, false); - _uncheckedTracking = _redirect.GetRadioButtonImage(true, false, true, false); - _uncheckedPressed = _redirect.GetRadioButtonImage(true, false, false, true); + _checkedDisabled = _redirect?.GetRadioButtonImage(false, true, false, false); + _checkedNormal = _redirect?.GetRadioButtonImage(true, true, false, false); + _checkedTracking = _redirect?.GetRadioButtonImage(true, true, true, false); + _checkedPressed = _redirect?.GetRadioButtonImage(true, true, false, true); + _uncheckedDisabled = _redirect?.GetRadioButtonImage(false, false, false, false); + _uncheckedNormal = _redirect?.GetRadioButtonImage(true, false, false, false); + _uncheckedTracking = _redirect?.GetRadioButtonImage(true, false, true, false); + _uncheckedPressed = _redirect?.GetRadioButtonImage(true, false, false, true); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesTreeView.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesTreeView.cs index 0c38c7c2a..d5d465312 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesTreeView.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteImagesTreeView.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -49,8 +49,9 @@ public KryptonPaletteImagesTreeView(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_plus == null) && - (_minus == null); + (_minus == null); #endregion @@ -60,8 +61,8 @@ public KryptonPaletteImagesTreeView(PaletteRedirect? redirect, /// public void PopulateFromBase() { - _plus = _redirect.GetTreeViewImage(false); - _minus = _redirect.GetTreeViewImage(true); + _plus = _redirect?.GetTreeViewImage(false); + _minus = _redirect?.GetTreeViewImage(true); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControl.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControl.cs index 15b124797..72ac95072 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -39,7 +39,7 @@ public class KryptonPaletteInputControl : Storage /// Border style. /// Content style. /// Delegate for notifying paint requests. - public KryptonPaletteInputControl(PaletteRedirect? redirect, + public KryptonPaletteInputControl(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, @@ -62,7 +62,7 @@ public KryptonPaletteInputControl(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateCommon.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateCommon.SetRedirector(redirect); #endregion @@ -72,14 +72,15 @@ public KryptonPaletteInputControl(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => _stateCommon.IsDefault && - _stateDisabled.IsDefault && - _stateNormal.IsDefault && - _stateActive.IsDefault && - _statePressed.IsDefault && - _stateContextNormal.IsDefault && - _stateContextTracking.IsDefault && - _stateContextPressed.IsDefault; + _stateDisabled.IsDefault && + _stateNormal.IsDefault && + _stateActive.IsDefault && + _statePressed.IsDefault && + _stateContextNormal.IsDefault && + _stateContextTracking.IsDefault && + _stateContextPressed.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControls.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControls.cs index 1ff66a875..71195fa19 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControls.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteInputControls.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,15 +29,15 @@ public KryptonPaletteInputControls([DisallowNull] PaletteRedirect redirector, Debug.Assert(redirector != null); // Create the input control style specific and common palettes - InputControlCommon = new KryptonPaletteInputControl(redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, PaletteContentStyle.InputControlStandalone, needPaint); - InputControlStandalone = new KryptonPaletteInputControl(redirector, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, PaletteContentStyle.InputControlStandalone, needPaint); - InputControlRibbon = new KryptonPaletteInputControl(redirector, PaletteBackStyle.InputControlRibbon, PaletteBorderStyle.InputControlRibbon, PaletteContentStyle.InputControlRibbon, needPaint); - InputControlCustom1 = new KryptonPaletteInputControl(redirector, PaletteBackStyle.InputControlCustom1, PaletteBorderStyle.InputControlCustom1, PaletteContentStyle.InputControlCustom1, needPaint); - InputControlCustom2 = new KryptonPaletteInputControl(redirector, PaletteBackStyle.InputControlCustom2, PaletteBorderStyle.InputControlCustom2, PaletteContentStyle.InputControlCustom2, needPaint); - InputControlCustom3 = new KryptonPaletteInputControl(redirector, PaletteBackStyle.InputControlCustom3, PaletteBorderStyle.InputControlCustom3, PaletteContentStyle.InputControlCustom3, needPaint); + InputControlCommon = new KryptonPaletteInputControl(redirector!, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, PaletteContentStyle.InputControlStandalone, needPaint); + InputControlStandalone = new KryptonPaletteInputControl(redirector!, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, PaletteContentStyle.InputControlStandalone, needPaint); + InputControlRibbon = new KryptonPaletteInputControl(redirector!, PaletteBackStyle.InputControlRibbon, PaletteBorderStyle.InputControlRibbon, PaletteContentStyle.InputControlRibbon, needPaint); + InputControlCustom1 = new KryptonPaletteInputControl(redirector!, PaletteBackStyle.InputControlCustom1, PaletteBorderStyle.InputControlCustom1, PaletteContentStyle.InputControlCustom1, needPaint); + InputControlCustom2 = new KryptonPaletteInputControl(redirector!, PaletteBackStyle.InputControlCustom2, PaletteBorderStyle.InputControlCustom2, PaletteContentStyle.InputControlCustom2, needPaint); + InputControlCustom3 = new KryptonPaletteInputControl(redirector!, PaletteBackStyle.InputControlCustom3, PaletteBorderStyle.InputControlCustom3, PaletteContentStyle.InputControlCustom3, needPaint); // Create redirectors for inheriting from style specific to style common - var redirectCommon = new PaletteRedirectTriple(redirector, + var redirectCommon = new PaletteRedirectTriple(redirector!, InputControlCommon.StateDisabled, InputControlCommon.StateNormal, InputControlCommon.StateActive, InputControlCommon.StatePressed, InputControlCommon.StateContextNormal, InputControlCommon.StateContextPressed, InputControlCommon.StateContextTracking); // Inform the input control style to use the new redirector @@ -53,12 +53,14 @@ public KryptonPaletteInputControls([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => InputControlCommon.IsDefault && - InputControlStandalone.IsDefault && - InputControlRibbon.IsDefault - && InputControlCustom1.IsDefault - && InputControlCustom2.IsDefault - && InputControlCustom3.IsDefault + InputControlStandalone.IsDefault && + InputControlRibbon.IsDefault + && InputControlCustom1.IsDefault + && InputControlCustom2.IsDefault + && InputControlCustom3.IsDefault ; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabel.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabel.cs index 0943fabfc..bdd72fa11 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public class KryptonPaletteLabel : Storage /// Redirector to inherit values from. /// Content style. /// Delegate for notifying paint requests. - public KryptonPaletteLabel(PaletteRedirect? redirect, + public KryptonPaletteLabel(PaletteRedirect redirect, PaletteContentStyle contentStyle, NeedPaintHandler needPaint) { @@ -50,7 +50,7 @@ public KryptonPaletteLabel(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -59,13 +59,14 @@ public KryptonPaletteLabel(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault && - OverrideFocus.IsDefault && - OverrideVisited.IsDefault && - OverrideNotVisited.IsDefault && - OverridePressed.IsDefault; + StateDisabled.IsDefault && + StateNormal.IsDefault && + OverrideFocus.IsDefault && + OverrideVisited.IsDefault && + OverrideNotVisited.IsDefault && + OverridePressed.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabels.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabels.cs index b04cb6c5b..5cb2d8065 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabels.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteLabels.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,26 +29,26 @@ public KryptonPaletteLabels([DisallowNull] PaletteRedirect redirector, Debug.Assert(redirector != null); // Create the button style specific and common palettes - LabelCommon = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelNormalControl, needPaint); - LabelNormalControl = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelNormalControl, needPaint); - LabelBoldControl = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelBoldControl, needPaint); - LabelItalicControl = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelItalicControl, needPaint); - LabelTitleControl = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelTitleControl, needPaint); - LabelNormalPanel = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelNormalPanel, needPaint); - LabelBoldPanel = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelBoldPanel, needPaint); - LabelItalicPanel = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelItalicPanel, needPaint); - LabelTitlePanel = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelTitlePanel, needPaint); - LabelCaptionPanel = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelGroupBoxCaption, needPaint); - LabelToolTip = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelToolTip, needPaint); - LabelSuperTip = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelSuperTip, needPaint); - LabelKeyTip = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelKeyTip, needPaint); - LabelCustom1 = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelCustom1, needPaint); - LabelCustom2 = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelCustom2, needPaint); - LabelCustom3 = new KryptonPaletteLabel(redirector, PaletteContentStyle.LabelCustom3, needPaint); + LabelCommon = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelNormalControl, needPaint); + LabelNormalControl = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelNormalControl, needPaint); + LabelBoldControl = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelBoldControl, needPaint); + LabelItalicControl = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelItalicControl, needPaint); + LabelTitleControl = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelTitleControl, needPaint); + LabelNormalPanel = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelNormalPanel, needPaint); + LabelBoldPanel = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelBoldPanel, needPaint); + LabelItalicPanel = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelItalicPanel, needPaint); + LabelTitlePanel = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelTitlePanel, needPaint); + LabelCaptionPanel = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelGroupBoxCaption, needPaint); + LabelToolTip = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelToolTip, needPaint); + LabelSuperTip = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelSuperTip, needPaint); + LabelKeyTip = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelKeyTip, needPaint); + LabelCustom1 = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelCustom1, needPaint); + LabelCustom2 = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelCustom2, needPaint); + LabelCustom3 = new KryptonPaletteLabel(redirector!, PaletteContentStyle.LabelCustom3, needPaint); // Create redirectors for inheriting from style specific to style common var redirectCommon = - new PaletteRedirectContent(redirector, LabelCommon.StateDisabled, LabelCommon.StateNormal); + new PaletteRedirectContent(redirector!, LabelCommon.StateDisabled, LabelCommon.StateNormal); // Inform the button style to use the new redirector LabelNormalControl.SetRedirector(redirectCommon); @@ -73,22 +73,24 @@ public KryptonPaletteLabels([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => LabelCommon.IsDefault && - LabelNormalControl.IsDefault && - LabelBoldControl.IsDefault && - LabelItalicControl.IsDefault && - LabelTitleControl.IsDefault && - LabelNormalPanel.IsDefault && - LabelBoldPanel.IsDefault && - LabelItalicPanel.IsDefault && - LabelTitlePanel.IsDefault && - LabelCaptionPanel.IsDefault && - LabelToolTip.IsDefault && - LabelSuperTip.IsDefault && - LabelKeyTip.IsDefault && - LabelCustom1.IsDefault && - LabelCustom2.IsDefault && - LabelCustom3.IsDefault; + LabelNormalControl.IsDefault && + LabelBoldControl.IsDefault && + LabelItalicControl.IsDefault && + LabelTitleControl.IsDefault && + LabelNormalPanel.IsDefault && + LabelBoldPanel.IsDefault && + LabelItalicPanel.IsDefault && + LabelTitlePanel.IsDefault && + LabelCaptionPanel.IsDefault && + LabelToolTip.IsDefault && + LabelSuperTip.IsDefault && + LabelKeyTip.IsDefault && + LabelCustom1.IsDefault && + LabelCustom2.IsDefault && + LabelCustom3.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigator.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigator.cs index 35ccb2864..c99329997 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public KryptonPaletteNavigator([DisallowNull] PaletteRedirect redirect, Debug.Assert(redirect != null); // Create the storage objects - StateCommon = new KryptonPaletteNavigatorState(redirect, needPaint); + StateCommon = new KryptonPaletteNavigatorState(redirect!, needPaint); } #endregion @@ -38,6 +38,7 @@ public KryptonPaletteNavigator([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorState.cs index 500554c11..7d02ad440 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public KryptonPaletteNavigatorState([DisallowNull] PaletteRedirect redirect, Debug.Assert(redirect != null); // Create the storage objects - Bar = new KryptonPaletteNavigatorStateBar(redirect, needPaint); + Bar = new KryptonPaletteNavigatorStateBar(redirect!, needPaint); } #endregion @@ -38,6 +38,7 @@ public KryptonPaletteNavigatorState([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Bar.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorStateBar.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorStateBar.cs index e0534f5ea..23b93b278 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorStateBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteNavigatorStateBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -66,15 +66,16 @@ public KryptonPaletteNavigatorStateBar([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => BarPaddingTabs.Equals(CommonHelper.InheritPadding) && - BarPaddingInside.Equals(CommonHelper.InheritPadding) && - BarPaddingOutside.Equals(CommonHelper.InheritPadding) && - BarPaddingOnly.Equals(CommonHelper.InheritPadding) && - ButtonPadding.Equals(CommonHelper.InheritPadding) && - (ButtonEdgeInside == -1) && - (ButtonEdgeOutside == -1) && - (CheckButtonGap == -1) && - (RibbonTabGap == -1); + BarPaddingInside.Equals(CommonHelper.InheritPadding) && + BarPaddingOutside.Equals(CommonHelper.InheritPadding) && + BarPaddingOnly.Equals(CommonHelper.InheritPadding) && + ButtonPadding.Equals(CommonHelper.InheritPadding) && + (ButtonEdgeInside == -1) && + (ButtonEdgeOutside == -1) && + (CheckButtonGap == -1) && + (RibbonTabGap == -1); #endregion @@ -84,7 +85,7 @@ public KryptonPaletteNavigatorStateBar([DisallowNull] PaletteRedirect redirect, /// public void PopulateFromBase() { - BarPaddingInside = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.BarPaddingInside); + BarPaddingInside = _redirect!.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.BarPaddingInside); BarPaddingOutside = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.BarPaddingOutside); BarPaddingOnly = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.BarPaddingOnly); ButtonPadding = _redirect.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.BarButtonPadding); @@ -398,7 +399,7 @@ public virtual int GetMetricInt(PaletteState state, PaletteMetricInt metric) } // Always pass onto the inheritance - return _redirect.GetMetricInt(state, metric); + return _redirect!.GetMetricInt(state, metric); } /// @@ -409,7 +410,7 @@ public virtual int GetMetricInt(PaletteState state, PaletteMetricInt metric) /// InheritBool value. public virtual InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) => // Pass onto the inheritance - _redirect.GetMetricBool(state, metric); + _redirect!.GetMetricBool(state, metric); /// /// Gets a padding metric value. @@ -459,7 +460,7 @@ public virtual Padding GetMetricPadding(PaletteState state, PaletteMetricPadding } // Pass onto the inheritance - return _redirect.GetMetricPadding(state, metric); + return _redirect!.GetMetricPadding(state, metric); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanel.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanel.cs index 86a061c89..5dca09ed0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public class KryptonPalettePanel : Storage /// Redirector to inherit values from. /// Back style. /// Delegate for notifying paint requests. - public KryptonPalettePanel(PaletteRedirect? redirect, + public KryptonPalettePanel(PaletteRedirect redirect, PaletteBackStyle backStyle, NeedPaintHandler needPaint) { @@ -46,7 +46,7 @@ public KryptonPalettePanel(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,9 +55,10 @@ public KryptonPalettePanel(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault; + StateDisabled.IsDefault && + StateNormal.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanels.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanels.cs index fb2b89f8e..20d0893cd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanels.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePanels.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,17 +29,17 @@ public KryptonPalettePanels([DisallowNull] PaletteRedirect redirector, Debug.Assert(redirector != null); // Create the button style specific and common palettes - PanelCommon = new KryptonPalettePanel(redirector, PaletteBackStyle.PanelClient, needPaint); - PanelClient = new KryptonPalettePanel(redirector, PaletteBackStyle.PanelClient, needPaint); - PanelAlternate = new KryptonPalettePanel(redirector, PaletteBackStyle.PanelAlternate, needPaint); - PanelRibbonInactive = new KryptonPalettePanel(redirector, PaletteBackStyle.PanelRibbonInactive, needPaint); - PanelCustom1 = new KryptonPalettePanel(redirector, PaletteBackStyle.PanelCustom1, needPaint); - PanelCustom2 = new KryptonPalettePanel(redirector, PaletteBackStyle.PanelCustom2, needPaint); - PanelCustom3 = new KryptonPalettePanel(redirector, PaletteBackStyle.PanelCustom3, needPaint); + PanelCommon = new KryptonPalettePanel(redirector!, PaletteBackStyle.PanelClient, needPaint); + PanelClient = new KryptonPalettePanel(redirector!, PaletteBackStyle.PanelClient, needPaint); + PanelAlternate = new KryptonPalettePanel(redirector!, PaletteBackStyle.PanelAlternate, needPaint); + PanelRibbonInactive = new KryptonPalettePanel(redirector!, PaletteBackStyle.PanelRibbonInactive, needPaint); + PanelCustom1 = new KryptonPalettePanel(redirector!, PaletteBackStyle.PanelCustom1, needPaint); + PanelCustom2 = new KryptonPalettePanel(redirector!, PaletteBackStyle.PanelCustom2, needPaint); + PanelCustom3 = new KryptonPalettePanel(redirector!, PaletteBackStyle.PanelCustom3, needPaint); // Create redirectors for inheriting from style specific to style common var redirectCommon = - new PaletteRedirectBack(redirector, PanelCommon.StateDisabled, PanelCommon.StateNormal); + new PaletteRedirectBack(redirector!, PanelCommon.StateDisabled, PanelCommon.StateNormal); // Inform the button style to use the new redirector PanelClient.SetRedirector(redirectCommon); @@ -55,13 +55,15 @@ public KryptonPalettePanels([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => PanelCommon.IsDefault && - PanelClient.IsDefault && - PanelAlternate.IsDefault && - PanelRibbonInactive.IsDefault - && PanelCustom1.IsDefault - && PanelCustom2.IsDefault - && PanelCustom3.IsDefault; + PanelClient.IsDefault && + PanelAlternate.IsDefault && + PanelRibbonInactive.IsDefault + && PanelCustom1.IsDefault + && PanelCustom2.IsDefault + && PanelCustom3.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePropertyGrid.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePropertyGrid.cs index 4c122f0c9..2231a7169 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePropertyGrid.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPalettePropertyGrid.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,6 +20,8 @@ public class KryptonPalettePropertyGrid : Storage /// /// /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => throw new NotImplementedException(); } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbon.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbon.cs index 14aa6ecbe..4ea471280 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbon.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbon.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,13 +16,13 @@ namespace Krypton.Toolkit public class KryptonPaletteRibbon : Storage { #region Instance Fields - private readonly PaletteRedirect? _redirect; private readonly PaletteRibbonBackInheritRedirect _ribbonAppMenuOuterInherit; private readonly PaletteRibbonBackInheritRedirect _ribbonAppMenuInnerInherit; private readonly PaletteRibbonBackInheritRedirect _ribbonAppMenuDocsInherit; private readonly PaletteRibbonTextInheritRedirect _ribbonAppMenuDocsTitleInherit; private readonly PaletteRibbonTextInheritRedirect _ribbonAppMenuDocsEntryInherit; private readonly PaletteRibbonGeneralInheritRedirect _ribbonGeneralRedirect; + private readonly PaletteRibbonFileAppTabInheritRedirect _ribbonFileAppTabRedirect; private readonly PaletteRibbonBackInheritRedirect _ribbonQATFullRedirect; private readonly PaletteRibbonBackInheritRedirect _ribbonQATOverRedirect; private readonly PaletteRibbonBackInheritRedirect _ribbonGalleryBackRedirect; @@ -45,50 +43,52 @@ public class KryptonPaletteRibbon : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbon([DisallowNull] PaletteRedirect? redirect, + public KryptonPaletteRibbon([DisallowNull] PaletteRedirect redirect, NeedPaintHandler needPaint) { Debug.Assert(redirect != null); // Store incoming reference - _redirect = redirect; + PaletteRedirect redirect1 = redirect!; // Create redirectors - _ribbonGeneralRedirect = new PaletteRibbonGeneralInheritRedirect(redirect); - _ribbonAppMenuInnerInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonAppMenuInner); - _ribbonAppMenuOuterInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonAppMenuOuter); - _ribbonAppMenuDocsInherit = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonAppMenuDocs); - _ribbonAppMenuDocsTitleInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonAppMenuDocsTitle); - _ribbonAppMenuDocsEntryInherit = new PaletteRibbonTextInheritRedirect(redirect, PaletteRibbonTextStyle.RibbonAppMenuDocsEntry); - _ribbonQATFullRedirect = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonQATFullbar); - _ribbonQATOverRedirect = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonQATOverflow); - _ribbonGalleryBackRedirect = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGalleryBack); - _ribbonGalleryBorderRedirect = new PaletteRibbonBackInheritRedirect(redirect, PaletteRibbonBackStyle.RibbonGalleryBorder); + _ribbonGeneralRedirect = new PaletteRibbonGeneralInheritRedirect(redirect1); + _ribbonFileAppTabRedirect = new PaletteRibbonFileAppTabInheritRedirect(redirect1); + _ribbonAppMenuInnerInherit = new PaletteRibbonBackInheritRedirect(redirect1, PaletteRibbonBackStyle.RibbonAppMenuInner); + _ribbonAppMenuOuterInherit = new PaletteRibbonBackInheritRedirect(redirect1, PaletteRibbonBackStyle.RibbonAppMenuOuter); + _ribbonAppMenuDocsInherit = new PaletteRibbonBackInheritRedirect(redirect1, PaletteRibbonBackStyle.RibbonAppMenuDocs); + _ribbonAppMenuDocsTitleInherit = new PaletteRibbonTextInheritRedirect(redirect1, PaletteRibbonTextStyle.RibbonAppMenuDocsTitle); + _ribbonAppMenuDocsEntryInherit = new PaletteRibbonTextInheritRedirect(redirect1, PaletteRibbonTextStyle.RibbonAppMenuDocsEntry); + _ribbonQATFullRedirect = new PaletteRibbonBackInheritRedirect(redirect1, PaletteRibbonBackStyle.RibbonQATFullbar); + _ribbonQATOverRedirect = new PaletteRibbonBackInheritRedirect(redirect1, PaletteRibbonBackStyle.RibbonQATOverflow); + _ribbonGalleryBackRedirect = new PaletteRibbonBackInheritRedirect(redirect1, PaletteRibbonBackStyle.RibbonGalleryBack); + _ribbonGalleryBorderRedirect = new PaletteRibbonBackInheritRedirect(redirect1, PaletteRibbonBackStyle.RibbonGalleryBorder); // Create palettes RibbonGeneral = new PaletteRibbonGeneral(_ribbonGeneralRedirect, needPaint); - RibbonAppButton = new KryptonPaletteRibbonAppButton(redirect, needPaint); + RibbonFileAppTab = new PaletteRibbonFileAppTab(_ribbonFileAppTabRedirect, needPaint); + RibbonAppButton = new KryptonPaletteRibbonAppButton(redirect1, needPaint); _ribbonAppMenuInner = new PaletteRibbonBack(_ribbonAppMenuInnerInherit, needPaint); _ribbonAppMenuOuter = new PaletteRibbonBack(_ribbonAppMenuOuterInherit, needPaint); _ribbonAppMenuDocs = new PaletteRibbonBack(_ribbonAppMenuDocsInherit, needPaint); _ribbonAppMenuDocsTitle = new PaletteRibbonText(_ribbonAppMenuDocsTitleInherit, needPaint); _ribbonAppMenuDocsEntry = new PaletteRibbonText(_ribbonAppMenuDocsEntryInherit, needPaint); - RibbonGroupArea = new KryptonPaletteRibbonGroupArea(redirect, needPaint); - RibbonGroupButtonText = new KryptonPaletteRibbonGroupButtonText(redirect, needPaint); - RibbonGroupCheckBoxText = new KryptonPaletteRibbonGroupCheckBoxText(redirect, needPaint); - RibbonGroupNormalBorder = new KryptonPaletteRibbonGroupNormalBorder(redirect, needPaint); - RibbonGroupNormalTitle = new KryptonPaletteRibbonGroupNormalTitle(redirect, needPaint); - RibbonGroupCollapsedBorder = new KryptonPaletteRibbonGroupCollapsedBorder(redirect, needPaint); - RibbonGroupCollapsedBack = new KryptonPaletteRibbonGroupCollapsedBack(redirect, needPaint); - RibbonGroupCollapsedFrameBorder = new KryptonPaletteRibbonGroupCollapsedFrameBorder(redirect, needPaint); - RibbonGroupCollapsedFrameBack = new KryptonPaletteRibbonGroupCollapsedFrameBack(redirect, needPaint); - RibbonGroupCollapsedText = new KryptonPaletteRibbonGroupCollapsedText(redirect, needPaint); - RibbonGroupRadioButtonText = new KryptonPaletteRibbonGroupRadioButtonText(redirect, needPaint); - RibbonGroupLabelText = new KryptonPaletteRibbonGroupLabelText(redirect, needPaint); + RibbonGroupArea = new KryptonPaletteRibbonGroupArea(redirect1, needPaint); + RibbonGroupButtonText = new KryptonPaletteRibbonGroupButtonText(redirect1, needPaint); + RibbonGroupCheckBoxText = new KryptonPaletteRibbonGroupCheckBoxText(redirect1, needPaint); + RibbonGroupNormalBorder = new KryptonPaletteRibbonGroupNormalBorder(redirect1, needPaint); + RibbonGroupNormalTitle = new KryptonPaletteRibbonGroupNormalTitle(redirect1, needPaint); + RibbonGroupCollapsedBorder = new KryptonPaletteRibbonGroupCollapsedBorder(redirect1, needPaint); + RibbonGroupCollapsedBack = new KryptonPaletteRibbonGroupCollapsedBack(redirect1, needPaint); + RibbonGroupCollapsedFrameBorder = new KryptonPaletteRibbonGroupCollapsedFrameBorder(redirect1, needPaint); + RibbonGroupCollapsedFrameBack = new KryptonPaletteRibbonGroupCollapsedFrameBack(redirect1, needPaint); + RibbonGroupCollapsedText = new KryptonPaletteRibbonGroupCollapsedText(redirect1, needPaint); + RibbonGroupRadioButtonText = new KryptonPaletteRibbonGroupRadioButtonText(redirect1, needPaint); + RibbonGroupLabelText = new KryptonPaletteRibbonGroupLabelText(redirect1, needPaint); RibbonQATFullbar = new PaletteRibbonBack(_ribbonQATFullRedirect, needPaint); - RibbonQATMinibar = new KryptonPaletteRibbonQATMinibar(redirect, needPaint); + RibbonQATMinibar = new KryptonPaletteRibbonQATMinibar(redirect1, needPaint); RibbonQATOverflow = new PaletteRibbonBack(_ribbonQATOverRedirect, needPaint); - RibbonTab = new KryptonPaletteRibbonTab(redirect, needPaint); + RibbonTab = new KryptonPaletteRibbonTab(redirect1, needPaint); _ribbonGalleryBack = new PaletteRibbonBack(_ribbonGalleryBackRedirect, needPaint); _ribbonGalleryBorder = new PaletteRibbonBack(_ribbonGalleryBorderRedirect, needPaint); } @@ -96,30 +96,32 @@ public KryptonPaletteRibbon([DisallowNull] PaletteRedirect? redirect, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => RibbonAppButton.IsDefault && - RibbonAppMenuOuter.IsDefault && - RibbonAppMenuInner.IsDefault && - RibbonAppMenuDocs.IsDefault && - RibbonAppMenuDocsTitle.IsDefault && - RibbonAppMenuDocsEntry.IsDefault && - RibbonGeneral.IsDefault && - RibbonGroupArea.IsDefault && - RibbonGroupButtonText.IsDefault && - RibbonGroupCheckBoxText.IsDefault && - RibbonGroupNormalBorder.IsDefault && - RibbonGroupNormalTitle.IsDefault && - RibbonGroupCollapsedBorder.IsDefault && - RibbonGroupCollapsedBack.IsDefault && - RibbonGroupCollapsedFrameBorder.IsDefault && - RibbonGroupCollapsedFrameBack.IsDefault && - RibbonGroupCollapsedText.IsDefault && - RibbonGroupLabelText.IsDefault && - RibbonGroupRadioButtonText.IsDefault && - RibbonQATFullbar.IsDefault && - RibbonQATMinibar.IsDefault && - RibbonTab.IsDefault && - RibbonGalleryBack.IsDefault && - RibbonGalleryBorder.IsDefault; + RibbonAppMenuOuter.IsDefault && + RibbonAppMenuInner.IsDefault && + RibbonAppMenuDocs.IsDefault && + RibbonAppMenuDocsTitle.IsDefault && + RibbonAppMenuDocsEntry.IsDefault && + RibbonGeneral.IsDefault && + RibbonGroupArea.IsDefault && + RibbonGroupButtonText.IsDefault && + RibbonGroupCheckBoxText.IsDefault && + RibbonGroupNormalBorder.IsDefault && + RibbonGroupNormalTitle.IsDefault && + RibbonGroupCollapsedBorder.IsDefault && + RibbonGroupCollapsedBack.IsDefault && + RibbonGroupCollapsedFrameBorder.IsDefault && + RibbonGroupCollapsedFrameBack.IsDefault && + RibbonGroupCollapsedText.IsDefault && + RibbonGroupLabelText.IsDefault && + RibbonGroupRadioButtonText.IsDefault && + RibbonQATFullbar.IsDefault && + RibbonQATMinibar.IsDefault && + RibbonTab.IsDefault && + RibbonGalleryBack.IsDefault && + RibbonGalleryBorder.IsDefault; #endregion @@ -130,6 +132,7 @@ public KryptonPaletteRibbon([DisallowNull] PaletteRedirect? redirect, public void PopulateFromBase() { RibbonAppButton.PopulateFromBase(); + RibbonFileAppTab.PopulateFromBase(); RibbonAppMenuOuter.PopulateFromBase(PaletteState.Normal); RibbonAppMenuInner.PopulateFromBase(PaletteState.Normal); RibbonAppMenuDocs.PopulateFromBase(PaletteState.Normal); @@ -252,9 +255,21 @@ public void PopulateFromBase() public PaletteRibbonGeneral RibbonGeneral { get; } private bool ShouldSerializeRibbonGeneral() => !RibbonGeneral.IsDefault; - #endregion + #region RibbonFileAppTab + /// + /// Get access to the "File App Tab" ribbon settings. + /// + [KryptonPersist] + [Category(@"Visuals")] + [Description(@"Ribbon File App Tab settings.")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public PaletteRibbonFileAppTab RibbonFileAppTab { get; } + + private bool ShouldSerializeRibbonFileAppTab() => !RibbonFileAppTab.IsDefault; + #endregion + #region RibbonGroupArea /// /// Get access to the ribbon group area settings. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonAppButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonAppButton.cs index 0cf04eb2e..f04f7ad7b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonAppButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonAppButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonAppButton : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonAppButton(PaletteRedirect? redirect, + public KryptonPaletteRibbonAppButton(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -45,7 +45,7 @@ public KryptonPaletteRibbonAppButton(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -54,10 +54,11 @@ public KryptonPaletteRibbonAppButton(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StatePressed.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StatePressed.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupArea.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupArea.cs index e9c643c8b..7a569e947 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupArea.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupArea.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupArea : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupArea(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupArea(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -47,7 +47,7 @@ public KryptonPaletteRibbonGroupArea(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -56,12 +56,13 @@ public KryptonPaletteRibbonGroupArea(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateCheckedNormal.IsDefault && - StateContextCheckedNormal.IsDefault && - StateTracking.IsDefault && - StateContextPressed.IsDefault && - StateContextTracking.IsDefault; + StateCheckedNormal.IsDefault && + StateContextCheckedNormal.IsDefault && + StateTracking.IsDefault && + StateContextPressed.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupBaseText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupBaseText.cs index 3cfa111ec..da94d1660 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupBaseText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupBaseText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public class KryptonPaletteRibbonGroupBaseText : Storage /// Redirector to inherit values from. /// Inherit text style. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupBaseText(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupBaseText(PaletteRedirect redirect, PaletteRibbonTextStyle textStyle, NeedPaintHandler needPaint) { @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupBaseText(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,9 +55,10 @@ public KryptonPaletteRibbonGroupBaseText(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateDisabled.IsDefault; + StateNormal.IsDefault && + StateDisabled.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupButtonText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupButtonText.cs index 65aa652e3..b54e9002f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupButtonText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupButtonText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class KryptonPaletteRibbonGroupButtonText : KryptonPaletteRibbonGroupBase /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupButtonText(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupButtonText(PaletteRedirect redirect, NeedPaintHandler needPaint) : base(redirect, PaletteRibbonTextStyle.RibbonGroupButtonText, needPaint) { diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCheckBoxText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCheckBoxText.cs index ce04c3281..8805d411c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCheckBoxText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCheckBoxText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class KryptonPaletteRibbonGroupCheckBoxText : KryptonPaletteRibbonGroupBa /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupCheckBoxText(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupCheckBoxText(PaletteRedirect redirect, NeedPaintHandler needPaint) : base(redirect, PaletteRibbonTextStyle.RibbonGroupCheckBoxText, needPaint) { diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBack.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBack.cs index 899ec0ac4..443089a61 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupCollapsedBack : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupCollapsedBack(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupCollapsedBack(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupCollapsedBack(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,11 +55,12 @@ public KryptonPaletteRibbonGroupCollapsedBack(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateContextNormal.IsDefault && - StateContextTracking.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateContextNormal.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBorder.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBorder.cs index 0e12817bb..7554dac70 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBorder.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupCollapsedBorder : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupCollapsedBorder(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupCollapsedBorder(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupCollapsedBorder(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,11 +55,12 @@ public KryptonPaletteRibbonGroupCollapsedBorder(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateContextNormal.IsDefault && - StateContextTracking.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateContextNormal.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBack.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBack.cs index 6df46c398..a012fbeab 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupCollapsedFrameBack : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupCollapsedFrameBack(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupCollapsedFrameBack(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupCollapsedFrameBack(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,11 +55,12 @@ public KryptonPaletteRibbonGroupCollapsedFrameBack(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateContextNormal.IsDefault && - StateContextTracking.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateContextNormal.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBorder.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBorder.cs index e35ceec62..ceab2a35f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBorder.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedFrameBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupCollapsedFrameBorder : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupCollapsedFrameBorder(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupCollapsedFrameBorder(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupCollapsedFrameBorder(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,11 +55,12 @@ public KryptonPaletteRibbonGroupCollapsedFrameBorder(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateContextNormal.IsDefault && - StateContextTracking.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateContextNormal.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedText.cs index 3f34e2128..bde76634b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupCollapsedText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupCollapsedText : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupCollapsedText(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupCollapsedText(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupCollapsedText(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,11 +55,12 @@ public KryptonPaletteRibbonGroupCollapsedText(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateContextNormal.IsDefault && - StateContextTracking.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateContextNormal.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupLabelText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupLabelText.cs index 9bbc1aef4..cef994b69 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupLabelText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupLabelText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class KryptonPaletteRibbonGroupLabelText : KryptonPaletteRibbonGroupBaseT /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupLabelText(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupLabelText(PaletteRedirect redirect, NeedPaintHandler needPaint) : base(redirect, PaletteRibbonTextStyle.RibbonGroupLabelText, needPaint) { diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalBorder.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalBorder.cs index b8d492e78..06d78ed15 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalBorder.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalBorder.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupNormalBorder : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupNormalBorder(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupNormalBorder(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupNormalBorder(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,11 +55,12 @@ public KryptonPaletteRibbonGroupNormalBorder(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateContextNormal.IsDefault && - StateContextTracking.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateContextNormal.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalTitle.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalTitle.cs index 23475c460..d65d70ef4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalTitle.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupNormalTitle.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonGroupNormalTitle : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupNormalTitle(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupNormalTitle(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -46,7 +46,7 @@ public KryptonPaletteRibbonGroupNormalTitle(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -55,11 +55,12 @@ public KryptonPaletteRibbonGroupNormalTitle(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateContextNormal.IsDefault && - StateContextTracking.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateContextNormal.IsDefault && + StateContextTracking.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupRadioButtonText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupRadioButtonText.cs index eedb70e5a..1ff03ea69 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupRadioButtonText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonGroupRadioButtonText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class KryptonPaletteRibbonGroupRadioButtonText : KryptonPaletteRibbonGrou /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonGroupRadioButtonText(PaletteRedirect? redirect, + public KryptonPaletteRibbonGroupRadioButtonText(PaletteRedirect redirect, NeedPaintHandler needPaint) : base(redirect, PaletteRibbonTextStyle.RibbonGroupRadioButtonText, needPaint) { diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonQATMinibar.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonQATMinibar.cs index 05d191eb3..da450afab 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonQATMinibar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonQATMinibar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonQATMinibar : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonQATMinibar(PaletteRedirect? redirect, + public KryptonPaletteRibbonQATMinibar(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -44,7 +44,7 @@ public KryptonPaletteRibbonQATMinibar(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -53,9 +53,10 @@ public KryptonPaletteRibbonQATMinibar(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateActive.IsDefault && - StateInactive.IsDefault; + StateActive.IsDefault && + StateInactive.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonTab.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonTab.cs index f5259fa5e..5407cab3b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonTab.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteRibbonTab.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class KryptonPaletteRibbonTab : Storage /// /// Redirector to inherit values from. /// Delegate for notifying paint requests. - public KryptonPaletteRibbonTab(PaletteRedirect? redirect, + public KryptonPaletteRibbonTab(PaletteRedirect redirect, NeedPaintHandler needPaint) { // Create the storage objects @@ -50,7 +50,7 @@ public KryptonPaletteRibbonTab(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => _stateInherit.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => _stateInherit.SetRedirector(redirect); #endregion @@ -59,15 +59,16 @@ public KryptonPaletteRibbonTab(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StateCheckedNormal.IsDefault && - StateCheckedTracking.IsDefault && - StateContextTracking.IsDefault && - StateContextCheckedNormal.IsDefault && - StateContextCheckedTracking.IsDefault && - OverrideFocus.IsDefault; + StateNormal.IsDefault && + StateTracking.IsDefault && + StateCheckedNormal.IsDefault && + StateCheckedTracking.IsDefault && + StateContextTracking.IsDefault && + StateContextCheckedNormal.IsDefault && + StateContextCheckedTracking.IsDefault && + OverrideFocus.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparator.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparator.cs index f512498dc..41540fd7c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,7 @@ public KryptonPaletteSeparator(PaletteRedirect? redirect, NeedPaintHandler needPaint) { // Create the storage objects - StateCommon = new PaletteSeparatorPaddingRedirect(redirect, backStyle, borderStyle, needPaint); + StateCommon = new PaletteSeparatorPaddingRedirect(redirect!, backStyle, borderStyle, needPaint); StateDisabled = new PaletteSeparatorPadding(StateCommon, StateCommon, needPaint); StateNormal = new PaletteSeparatorPadding(StateCommon, StateCommon, needPaint); StateTracking = new PaletteSeparatorPadding(StateCommon, StateCommon, needPaint); @@ -44,7 +44,7 @@ public KryptonPaletteSeparator(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => StateCommon.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => StateCommon?.SetRedirector(redirect); #endregion @@ -53,11 +53,12 @@ public KryptonPaletteSeparator(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => StateCommon.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StatePressed.IsDefault; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => StateCommon!.IsDefault && + StateDisabled.IsDefault && + StateNormal.IsDefault && + StateTracking.IsDefault && + StatePressed.IsDefault; #endregion @@ -86,7 +87,7 @@ public void PopulateFromBase(PaletteMetricPadding metric) [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteSeparatorPaddingRedirect? StateCommon { get; } - private bool ShouldSerializeStateCommon() => !StateCommon.IsDefault; + private bool ShouldSerializeStateCommon() => !StateCommon!.IsDefault; #endregion @@ -98,7 +99,7 @@ public void PopulateFromBase(PaletteMetricPadding metric) [Category(@"Visuals")] [Description(@"Overrides for defining disabled separator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSeparatorPadding? StateDisabled { get; } + public PaletteSeparatorPadding StateDisabled { get; } private bool ShouldSerializeStateDisabled() => !StateDisabled.IsDefault; @@ -112,7 +113,7 @@ public void PopulateFromBase(PaletteMetricPadding metric) [Category(@"Visuals")] [Description(@"Overrides for defining normal separator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSeparatorPadding? StateNormal { get; } + public PaletteSeparatorPadding StateNormal { get; } private bool ShouldSerializeStateNormal() => !StateNormal.IsDefault; @@ -126,7 +127,7 @@ public void PopulateFromBase(PaletteMetricPadding metric) [Category(@"Visuals")] [Description(@"Overrides for defining hot tracking separator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSeparatorPadding? StateTracking { get; } + public PaletteSeparatorPadding StateTracking { get; } private bool ShouldSerializeStateTracking() => !StateTracking.IsDefault; @@ -140,7 +141,7 @@ public void PopulateFromBase(PaletteMetricPadding metric) [Category(@"Visuals")] [Description(@"Overrides for defining pressed separator appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteSeparatorPadding? StatePressed { get; } + public PaletteSeparatorPadding StatePressed { get; } private bool ShouldSerializeStatePressed() => !StatePressed.IsDefault; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparators.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparators.cs index 4f88064e7..2ce5d70ac 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparators.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteSeparators.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,7 +38,7 @@ public KryptonPaletteSeparators([DisallowNull] PaletteRedirect redirector, SeparatorCustom3 = new KryptonPaletteSeparator(redirector, PaletteBackStyle.SeparatorCustom3, PaletteBorderStyle.SeparatorCustom3, needPaint); // Create redirectors for inheriting from style specific to style common - var redirectCommon = new PaletteRedirectDouble(redirector, SeparatorCommon.StateDisabled, + var redirectCommon = new PaletteRedirectDouble(redirector!, SeparatorCommon.StateDisabled, SeparatorCommon.StateNormal, SeparatorCommon.StatePressed, SeparatorCommon.StateTracking); // Inform the button style to use the new redirector @@ -55,13 +55,15 @@ public KryptonPaletteSeparators([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => SeparatorCommon.IsDefault && - SeparatorLowProfile.IsDefault && - SeparatorHighProfile.IsDefault && - SeparatorHighInternalProfile.IsDefault - && SeparatorCustom1.IsDefault - && SeparatorCustom2.IsDefault - && SeparatorCustom3.IsDefault + SeparatorLowProfile.IsDefault && + SeparatorHighProfile.IsDefault && + SeparatorHighInternalProfile.IsDefault + && SeparatorCustom1.IsDefault + && SeparatorCustom2.IsDefault + && SeparatorCustom3.IsDefault ; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMS.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMS.cs index 676fbb541..f22804fb2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMS.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMS.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,7 +21,7 @@ public class KryptonPaletteTMS : Storage /// /// Initialize a new instance of the KryptonPaletteKCT class. /// - /// Associated palettte instance. + /// Associated palette instance. /// Initial base KCT to inherit values from. /// Delegate for notifying paint requests. public KryptonPaletteTMS(PaletteBase palette, @@ -31,7 +31,7 @@ public KryptonPaletteTMS(PaletteBase palette, Debug.Assert(baseKCT != null); // Create actual KCT for storage - InternalKCT = new KryptonInternalKCT(baseKCT, palette); + InternalKCT = new KryptonInternalKCT(baseKCT!, palette); // Create the set of sub objects that expose the palette properties Button = new KryptonPaletteTMSButton(InternalKCT, needPaint); @@ -47,15 +47,17 @@ public KryptonPaletteTMS(PaletteBase palette, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => InternalKCT.IsDefault && - Button.IsDefault && - Grip.IsDefault && - Menu.IsDefault && - Rafting.IsDefault && - MenuStrip.IsDefault && - Separator.IsDefault && - StatusStrip.IsDefault && - ToolStrip.IsDefault; + Button.IsDefault && + Grip.IsDefault && + Menu.IsDefault && + Rafting.IsDefault && + MenuStrip.IsDefault && + Separator.IsDefault && + StatusStrip.IsDefault && + ToolStrip.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSBase.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSBase.cs index 0ed6d9fb6..fa57506ef 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ internal KryptonPaletteTMSBase([DisallowNull] KryptonInternalKCT internalKCT, { Debug.Assert(internalKCT != null); - InternalKCT = internalKCT; + InternalKCT = internalKCT!; // Store the provided paint notification delegate NeedPaint = needPaint; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSButton.cs index 4b0528c9c..dea14c80f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,29 +35,30 @@ internal KryptonPaletteTMSButton(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalButtonCheckedGradientBegin == Color.Empty) && - (InternalKCT.InternalButtonCheckedGradientEnd == Color.Empty) && - (InternalKCT.InternalButtonCheckedGradientMiddle == Color.Empty) && - (InternalKCT.InternalButtonCheckedHighlight == Color.Empty) && - (InternalKCT.InternalButtonCheckedHighlightBorder == Color.Empty) && - (InternalKCT.InternalButtonPressedBorder == Color.Empty) && - (InternalKCT.InternalButtonPressedGradientBegin == Color.Empty) && - (InternalKCT.InternalButtonPressedGradientEnd == Color.Empty) && - (InternalKCT.InternalButtonPressedGradientMiddle == Color.Empty) && - (InternalKCT.InternalButtonPressedHighlight == Color.Empty) && - (InternalKCT.InternalButtonPressedHighlightBorder == Color.Empty) && - (InternalKCT.InternalButtonSelectedBorder == Color.Empty) && - (InternalKCT.InternalButtonSelectedGradientBegin == Color.Empty) && - (InternalKCT.InternalButtonSelectedGradientEnd == Color.Empty) && - (InternalKCT.InternalButtonSelectedGradientMiddle == Color.Empty) && - (InternalKCT.InternalButtonSelectedHighlight == Color.Empty) && - (InternalKCT.InternalButtonSelectedHighlightBorder == Color.Empty) && - (InternalKCT.InternalCheckBackground == Color.Empty) && - (InternalKCT.InternalCheckPressedBackground == Color.Empty) && - (InternalKCT.InternalCheckSelectedBackground == Color.Empty) && - (InternalKCT.InternalOverflowButtonGradientBegin == Color.Empty) && - (InternalKCT.InternalOverflowButtonGradientEnd == Color.Empty) && - (InternalKCT.InternalOverflowButtonGradientMiddle == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalButtonCheckedGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonCheckedGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonCheckedGradientMiddle == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonCheckedHighlight == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonCheckedHighlightBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonPressedBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonPressedGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonPressedGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonPressedGradientMiddle == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonPressedHighlight == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonPressedHighlightBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonSelectedBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonSelectedGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonSelectedGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonSelectedGradientMiddle == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonSelectedHighlight == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalButtonSelectedHighlightBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalCheckBackground == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalCheckPressedBackground == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalCheckSelectedBackground == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalOverflowButtonGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalOverflowButtonGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalOverflowButtonGradientMiddle == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -100,7 +101,7 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used when the button is checked.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonCheckedGradientBegin { get => InternalKCT.InternalButtonCheckedGradientBegin; @@ -115,7 +116,7 @@ public Color ButtonCheckedGradientBegin /// /// Resets the ButtonCheckedGradientBegin property to its default value. /// - public void ResetButtonCheckedGradientBegin() => ButtonCheckedGradientBegin = Color.Empty; + public void ResetButtonCheckedGradientBegin() => ButtonCheckedGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonCheckedGradientEnd @@ -125,7 +126,7 @@ public Color ButtonCheckedGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used when the button is checked.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonCheckedGradientEnd { get => InternalKCT.InternalButtonCheckedGradientEnd; @@ -140,7 +141,7 @@ public Color ButtonCheckedGradientEnd /// /// Resets the ButtonCheckedGradientEnd property to its default value. /// - public void ResetButtonCheckedGradientEnd() => ButtonCheckedGradientEnd = Color.Empty; + public void ResetButtonCheckedGradientEnd() => ButtonCheckedGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonCheckedGradientMiddle @@ -150,7 +151,7 @@ public Color ButtonCheckedGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Middle color of the gradient used when the button is checked.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonCheckedGradientMiddle { get => InternalKCT.InternalButtonCheckedGradientMiddle; @@ -165,7 +166,7 @@ public Color ButtonCheckedGradientMiddle /// /// Resets the ButtonCheckedGradientMiddle property to its default value. /// - public void ResetButtonCheckedGradientMiddle() => ButtonCheckedGradientMiddle = Color.Empty; + public void ResetButtonCheckedGradientMiddle() => ButtonCheckedGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonCheckedHighlight @@ -175,7 +176,7 @@ public Color ButtonCheckedGradientMiddle [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Highlight color used when the button is checked.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonCheckedHighlight { get => InternalKCT.InternalButtonCheckedHighlight; @@ -190,7 +191,7 @@ public Color ButtonCheckedHighlight /// /// Resets the ButtonCheckedHighlight property to its default value. /// - public void ResetButtonCheckedHighlight() => ButtonCheckedHighlight = Color.Empty; + public void ResetButtonCheckedHighlight() => ButtonCheckedHighlight = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonCheckedHighlightBorder @@ -200,7 +201,7 @@ public Color ButtonCheckedHighlight [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Border color to use with ButtonCheckedHighlight.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonCheckedHighlightBorder { get => InternalKCT.InternalButtonCheckedHighlightBorder; @@ -215,7 +216,7 @@ public Color ButtonCheckedHighlightBorder /// /// Resets the ButtonCheckedHighlightBorder property to its default value. /// - public void ResetButtonCheckedHighlightBorder() => ButtonCheckedHighlightBorder = Color.Empty; + public void ResetButtonCheckedHighlightBorder() => ButtonCheckedHighlightBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonPressedBorder @@ -225,7 +226,7 @@ public Color ButtonCheckedHighlightBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Border color to use with the ButtonPressedGradientBegin, ButtonPressedGradientMiddle, and ButtonPressedGradientEnd colors.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonPressedBorder { get => InternalKCT.InternalButtonPressedBorder; @@ -240,7 +241,7 @@ public Color ButtonPressedBorder /// /// Resets the ButtonPressedBorder property to its default value. /// - public void ResetButtonPressedBorder() => ButtonPressedBorder = Color.Empty; + public void ResetButtonPressedBorder() => ButtonPressedBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonPressedGradientBegin @@ -250,7 +251,7 @@ public Color ButtonPressedBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used when the button is pressed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonPressedGradientBegin { get => InternalKCT.InternalButtonPressedGradientBegin; @@ -265,7 +266,7 @@ public Color ButtonPressedGradientBegin /// /// Resets the ButtonPressedGradientBegin property to its default value. /// - public void ResetButtonPressedGradientBegin() => ButtonPressedGradientBegin = Color.Empty; + public void ResetButtonPressedGradientBegin() => ButtonPressedGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonPressedGradientEnd @@ -275,7 +276,7 @@ public Color ButtonPressedGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used when the button is pressed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonPressedGradientEnd { get => InternalKCT.InternalButtonPressedGradientEnd; @@ -290,7 +291,7 @@ public Color ButtonPressedGradientEnd /// /// Resets the ButtonPressedGradientEnd property to its default value. /// - public void ResetButtonPressedGradientEnd() => ButtonPressedGradientEnd = Color.Empty; + public void ResetButtonPressedGradientEnd() => ButtonPressedGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonPressedGradientMiddle @@ -300,7 +301,7 @@ public Color ButtonPressedGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Middle color of the gradient used when the button is pressed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonPressedGradientMiddle { get => InternalKCT.InternalButtonPressedGradientMiddle; @@ -315,7 +316,7 @@ public Color ButtonPressedGradientMiddle /// /// Resets the ButtonPressedGradientMiddle property to its default value. /// - public void ResetButtonPressedGradientMiddle() => ButtonPressedGradientMiddle = Color.Empty; + public void ResetButtonPressedGradientMiddle() => ButtonPressedGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonPressedHighlight @@ -325,7 +326,7 @@ public Color ButtonPressedGradientMiddle [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Solid color used when the button is pressed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonPressedHighlight { get => InternalKCT.InternalButtonPressedHighlight; @@ -340,7 +341,7 @@ public Color ButtonPressedHighlight /// /// Resets the ButtonPressedHighlight property to its default value. /// - public void ResetButtonPressedHighlight() => ButtonPressedHighlight = Color.Empty; + public void ResetButtonPressedHighlight() => ButtonPressedHighlight = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonPressedHighlightBorder @@ -350,7 +351,7 @@ public Color ButtonPressedHighlight [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Border color to use with ButtonPressedHighlight.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonPressedHighlightBorder { get => InternalKCT.InternalButtonPressedHighlightBorder; @@ -365,7 +366,7 @@ public Color ButtonPressedHighlightBorder /// /// Resets the ButtonPressedHighlightBorder property to its default value. /// - public void ResetButtonPressedHighlightBorder() => ButtonPressedHighlightBorder = Color.Empty; + public void ResetButtonPressedHighlightBorder() => ButtonPressedHighlightBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonSelectedBorder @@ -375,7 +376,7 @@ public Color ButtonPressedHighlightBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Border color to use with the ButtonSelectedGradientBegin, ButtonSelectedGradientMiddle, and ButtonSelectedGradientEnd colors.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonSelectedBorder { get => InternalKCT.InternalButtonSelectedBorder; @@ -390,7 +391,7 @@ public Color ButtonSelectedBorder /// /// Resets the ButtonSelectedBorder property to its default value. /// - public void ResetButtonSelectedBorder() => ButtonSelectedBorder = Color.Empty; + public void ResetButtonSelectedBorder() => ButtonSelectedBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonSelectedGradientBegin @@ -400,7 +401,7 @@ public Color ButtonSelectedBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used when the button is selected.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonSelectedGradientBegin { get => InternalKCT.InternalButtonSelectedGradientBegin; @@ -415,7 +416,7 @@ public Color ButtonSelectedGradientBegin /// /// Resets the ButtonSelectedGradientBegin property to its default value. /// - public void ResetButtonSelectedGradientBegin() => ButtonSelectedGradientBegin = Color.Empty; + public void ResetButtonSelectedGradientBegin() => ButtonSelectedGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonSelectedGradientEnd @@ -425,7 +426,7 @@ public Color ButtonSelectedGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used when the button is selected.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonSelectedGradientEnd { get => InternalKCT.InternalButtonSelectedGradientEnd; @@ -440,7 +441,7 @@ public Color ButtonSelectedGradientEnd /// /// Resets the ButtonSelectedGradientEnd property to its default value. /// - public void ResetButtonSelectedGradientEnd() => ButtonSelectedGradientEnd = Color.Empty; + public void ResetButtonSelectedGradientEnd() => ButtonSelectedGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonSelectedGradientMiddle @@ -450,7 +451,7 @@ public Color ButtonSelectedGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Middle color of the gradient used when the button is selected.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonSelectedGradientMiddle { get => InternalKCT.InternalButtonSelectedGradientMiddle; @@ -465,7 +466,7 @@ public Color ButtonSelectedGradientMiddle /// /// Resets the ButtonSelectedGradientMiddle property to its default value. /// - public void ResetButtonSelectedGradientMiddle() => ButtonSelectedGradientMiddle = Color.Empty; + public void ResetButtonSelectedGradientMiddle() => ButtonSelectedGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonSelectedHighlight @@ -475,7 +476,7 @@ public Color ButtonSelectedGradientMiddle [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Solid color used when the button is selected.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonSelectedHighlight { get => InternalKCT.InternalButtonSelectedHighlight; @@ -490,7 +491,7 @@ public Color ButtonSelectedHighlight /// /// Resets the ButtonSelectedHighlight property to its default value. /// - public void ResetButtonSelectedHighlight() => ButtonSelectedHighlight = Color.Empty; + public void ResetButtonSelectedHighlight() => ButtonSelectedHighlight = GlobalStaticValues.EMPTY_COLOR; #endregion #region ButtonSelectedHighlightBorder @@ -500,7 +501,7 @@ public Color ButtonSelectedHighlight [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Border color to use with ButtonSelectedHighlight.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ButtonSelectedHighlightBorder { get => InternalKCT.InternalButtonSelectedHighlightBorder; @@ -515,7 +516,7 @@ public Color ButtonSelectedHighlightBorder /// /// Resets the ButtonSelectedHighlightBorder property to its default value. /// - public void ResetButtonSelectedHighlightBorder() => ButtonSelectedHighlightBorder = Color.Empty; + public void ResetButtonSelectedHighlightBorder() => ButtonSelectedHighlightBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region CheckBackground @@ -525,7 +526,7 @@ public Color ButtonSelectedHighlightBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Solid color to use when the button is checked and gradients are being used.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color CheckBackground { get => InternalKCT.InternalCheckBackground; @@ -540,7 +541,7 @@ public Color CheckBackground /// /// esets the CheckBackground property to its default value. /// - public void ResetCheckBackground() => CheckBackground = Color.Empty; + public void ResetCheckBackground() => CheckBackground = GlobalStaticValues.EMPTY_COLOR; #endregion #region CheckPressedBackground @@ -550,7 +551,7 @@ public Color CheckBackground [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Solid color to use when the button is checked and selected and gradients are being used.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color CheckPressedBackground { get => InternalKCT.InternalCheckPressedBackground; @@ -565,7 +566,7 @@ public Color CheckPressedBackground /// /// esets the CheckPressedBackground property to its default value. /// - public void ResetCheckPressedBackground() => CheckPressedBackground = Color.Empty; + public void ResetCheckPressedBackground() => CheckPressedBackground = GlobalStaticValues.EMPTY_COLOR; #endregion #region CheckSelectedBackground @@ -575,7 +576,7 @@ public Color CheckPressedBackground [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Solid color to use when the button is checked and selected and gradients are being used.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color CheckSelectedBackground { get => InternalKCT.InternalCheckSelectedBackground; @@ -590,7 +591,7 @@ public Color CheckSelectedBackground /// /// esets the CheckSelectedBackground property to its default value. /// - public void ResetCheckSelectedBackground() => CheckSelectedBackground = Color.Empty; + public void ResetCheckSelectedBackground() => CheckSelectedBackground = GlobalStaticValues.EMPTY_COLOR; #endregion #region OverflowButtonGradientBegin @@ -600,7 +601,7 @@ public Color CheckSelectedBackground [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used in the ToolStripOverflowButton.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color OverflowButtonGradientBegin { get => InternalKCT.InternalOverflowButtonGradientBegin; @@ -615,7 +616,7 @@ public Color OverflowButtonGradientBegin /// /// esets the OverflowButtonGradientBegin property to its default value. /// - public void ResetOverflowButtonGradientBegin() => OverflowButtonGradientBegin = Color.Empty; + public void ResetOverflowButtonGradientBegin() => OverflowButtonGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region OverflowButtonGradientEnd @@ -625,7 +626,7 @@ public Color OverflowButtonGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the ToolStripOverflowButton.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color OverflowButtonGradientEnd { get => InternalKCT.InternalOverflowButtonGradientEnd; @@ -640,7 +641,7 @@ public Color OverflowButtonGradientEnd /// /// esets the OverflowButtonGradientEnd property to its default value. /// - public void ResetOverflowButtonGradientEnd() => OverflowButtonGradientEnd = Color.Empty; + public void ResetOverflowButtonGradientEnd() => OverflowButtonGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region OverflowButtonGradientMiddle @@ -650,7 +651,7 @@ public Color OverflowButtonGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Middle color of the gradient used in the ToolStripOverflowButton.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color OverflowButtonGradientMiddle { get => InternalKCT.InternalOverflowButtonGradientMiddle; @@ -665,7 +666,7 @@ public Color OverflowButtonGradientMiddle /// /// esets the OverflowButtonGradientMiddle property to its default value. /// - public void ResetOverflowButtonGradientMiddle() => OverflowButtonGradientMiddle = Color.Empty; + public void ResetOverflowButtonGradientMiddle() => OverflowButtonGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSGrip.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSGrip.cs index 3c2e6552a..b0b330ccc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSGrip.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSGrip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,8 +35,9 @@ internal KryptonPaletteTMSGrip(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalGripDark == Color.Empty) && - (InternalKCT.InternalGripLight == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalGripDark == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalGripLight == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -58,7 +59,7 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to use for shadow effects on the grip (move handle).")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color GripDark { get => InternalKCT.InternalGripDark; @@ -73,7 +74,7 @@ public Color GripDark /// /// esets the GripDark property to its default value. /// - public void ResetGripDark() => GripDark = Color.Empty; + public void ResetGripDark() => GripDark = GlobalStaticValues.EMPTY_COLOR; #endregion #region GripLight @@ -83,7 +84,7 @@ public Color GripDark [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to use for highlight effects on the grip (move handle).")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color GripLight { get => InternalKCT.InternalGripLight; @@ -98,7 +99,7 @@ public Color GripLight /// /// esets the GripLight property to its default value. /// - public void ResetGripLight() => GripLight = Color.Empty; + public void ResetGripLight() => GripLight = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenu.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenu.cs index 69d2c9b61..8e2ee320e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenu.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,21 +35,22 @@ internal KryptonPaletteTMSMenu(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalImageMarginGradientBegin == Color.Empty) && - (InternalKCT.InternalImageMarginGradientEnd == Color.Empty) && - (InternalKCT.InternalImageMarginGradientMiddle == Color.Empty) && - (InternalKCT.InternalImageMarginRevealedGradientBegin == Color.Empty) && - (InternalKCT.InternalImageMarginRevealedGradientEnd == Color.Empty) && - (InternalKCT.InternalImageMarginRevealedGradientMiddle == Color.Empty) && - (InternalKCT.InternalMenuBorder == Color.Empty) && - (InternalKCT.InternalMenuItemText == Color.Empty) && - (InternalKCT.InternalMenuItemBorder == Color.Empty) && - (InternalKCT.InternalMenuItemPressedGradientBegin == Color.Empty) && - (InternalKCT.InternalMenuItemPressedGradientEnd == Color.Empty) && - (InternalKCT.InternalMenuItemPressedGradientMiddle == Color.Empty) && - (InternalKCT.InternalMenuItemSelected == Color.Empty) && - (InternalKCT.InternalMenuItemSelectedGradientBegin == Color.Empty) && - (InternalKCT.InternalMenuItemSelectedGradientEnd == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalImageMarginGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalImageMarginGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalImageMarginGradientMiddle == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalImageMarginRevealedGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalImageMarginRevealedGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalImageMarginRevealedGradientMiddle == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemText == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemPressedGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemPressedGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemPressedGradientMiddle == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemSelected == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemSelectedGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuItemSelectedGradientEnd == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -84,12 +85,12 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Staring color of the gradient used in the image margin of a ToolStripDropDownMenu.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageMarginGradientBegin { get => InternalKCT.InternalImageMarginGradientBegin; - set + set { InternalKCT.InternalImageMarginGradientBegin = value; PerformNeedPaint(false); @@ -97,9 +98,9 @@ public Color ImageMarginGradientBegin } /// - /// esets the ImageMarginGradientBegin property to its default value. + /// Resets the ImageMarginGradientBegin property to its default value. /// - public void ResetImageMarginGradientBegin() => ImageMarginGradientBegin = Color.Empty; + public void ResetImageMarginGradientBegin() => ImageMarginGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ImageMarginGradientEnd @@ -109,13 +110,13 @@ public Color ImageMarginGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the image margin of a ToolStripDropDownMenu.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageMarginGradientEnd { get => InternalKCT.InternalImageMarginGradientEnd; - set - { + set + { InternalKCT.InternalImageMarginGradientEnd = value; PerformNeedPaint(false); } @@ -124,7 +125,7 @@ public Color ImageMarginGradientEnd /// /// esets the ImageMarginGradientEnd property to its default value. /// - public void ResetImageMarginGradientEnd() => ImageMarginGradientEnd = Color.Empty; + public void ResetImageMarginGradientEnd() => ImageMarginGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region ImageMarginGradientMiddle @@ -134,13 +135,13 @@ public Color ImageMarginGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Middle color color of the gradient used in the image margin of a ToolStripDropDownMenu.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageMarginGradientMiddle { get => InternalKCT.InternalImageMarginGradientMiddle; - set - { + set + { InternalKCT.InternalImageMarginGradientMiddle = value; PerformNeedPaint(false); } @@ -149,7 +150,7 @@ public Color ImageMarginGradientMiddle /// /// esets the ImageMarginGradientMiddle property to its default value. /// - public void ResetImageMarginGradientMiddle() => ImageMarginGradientMiddle = Color.Empty; + public void ResetImageMarginGradientMiddle() => ImageMarginGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion #region ImageMarginRevealedGradientBegin @@ -159,13 +160,13 @@ public Color ImageMarginGradientMiddle [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageMarginRevealedGradientBegin { get => InternalKCT.InternalImageMarginRevealedGradientBegin; - set - { + set + { InternalKCT.InternalImageMarginRevealedGradientBegin = value; PerformNeedPaint(false); } @@ -174,7 +175,7 @@ public Color ImageMarginRevealedGradientBegin /// /// esets the ImageMarginRevealedGradientBegin property to its default value. /// - public void ResetImageMarginRevealedGradientBegin() => ImageMarginRevealedGradientBegin = Color.Empty; + public void ResetImageMarginRevealedGradientBegin() => ImageMarginRevealedGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ImageMarginRevealedGradientEnd @@ -184,13 +185,13 @@ public Color ImageMarginRevealedGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageMarginRevealedGradientEnd { get => InternalKCT.InternalImageMarginRevealedGradientEnd; - set - { + set + { InternalKCT.InternalImageMarginRevealedGradientEnd = value; PerformNeedPaint(false); } @@ -199,7 +200,7 @@ public Color ImageMarginRevealedGradientEnd /// /// esets the ImageMarginRevealedGradientEnd property to its default value. /// - public void ResetImageMarginRevealedGradientEnd() => ImageMarginRevealedGradientEnd = Color.Empty; + public void ResetImageMarginRevealedGradientEnd() => ImageMarginRevealedGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region ImageMarginRevealedGradientMiddle @@ -209,13 +210,13 @@ public Color ImageMarginRevealedGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Middle color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageMarginRevealedGradientMiddle { get => InternalKCT.InternalImageMarginRevealedGradientMiddle; - set - { + set + { InternalKCT.InternalImageMarginRevealedGradientMiddle = value; PerformNeedPaint(false); } @@ -224,7 +225,7 @@ public Color ImageMarginRevealedGradientMiddle /// /// esets the ImageMarginRevealedGradientMiddle property to its default value. /// - public void ResetImageMarginRevealedGradientMiddle() => ImageMarginRevealedGradientMiddle = Color.Empty; + public void ResetImageMarginRevealedGradientMiddle() => ImageMarginRevealedGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuBorder @@ -234,13 +235,13 @@ public Color ImageMarginRevealedGradientMiddle [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color that is the border color to use on a MenuStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuBorder { get => InternalKCT.InternalMenuBorder; - set - { + set + { InternalKCT.InternalMenuBorder = value; PerformNeedPaint(false); } @@ -249,7 +250,7 @@ public Color MenuBorder /// /// esets the MenuBorder property to its default value. /// - public void ResetMenuBorder() => MenuBorder = Color.Empty; + public void ResetMenuBorder() => MenuBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemText @@ -259,7 +260,7 @@ public Color MenuBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to draw text for individual a ToolStripMenuItem.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemText { get => InternalKCT.InternalMenuItemText; @@ -274,7 +275,7 @@ public Color MenuItemText /// /// esets the MenuItemText property to its default value. /// - public void ResetMenuItemText() => MenuItemText = Color.Empty; + public void ResetMenuItemText() => MenuItemText = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemBorder @@ -284,13 +285,13 @@ public Color MenuItemText [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Border color to use with a ToolStripMenuItem.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemBorder { get => InternalKCT.InternalMenuItemBorder; - set - { + set + { InternalKCT.InternalMenuItemBorder = value; PerformNeedPaint(false); } @@ -299,7 +300,7 @@ public Color MenuItemBorder /// /// esets the MenuItemBorder property to its default value. /// - public void ResetMenuItemBorder() => MenuItemBorder = Color.Empty; + public void ResetMenuItemBorder() => MenuItemBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemPressedGradientBegin @@ -309,13 +310,13 @@ public Color MenuItemBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used when a top-level ToolStripMenuItem is pressed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemPressedGradientBegin { get => InternalKCT.InternalMenuItemPressedGradientBegin; - set - { + set + { InternalKCT.InternalMenuItemPressedGradientBegin = value; PerformNeedPaint(false); } @@ -324,7 +325,7 @@ public Color MenuItemPressedGradientBegin /// /// esets the MenuItemPressedGradientBegin property to its default value. /// - public void ResetMenuItemPressedGradientBegin() => MenuItemPressedGradientBegin = Color.Empty; + public void ResetMenuItemPressedGradientBegin() => MenuItemPressedGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemPressedGradientEnd @@ -334,13 +335,13 @@ public Color MenuItemPressedGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used when a top-level ToolStripMenuItem is pressed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemPressedGradientEnd { get => InternalKCT.InternalMenuItemPressedGradientEnd; - set - { + set + { InternalKCT.InternalMenuItemPressedGradientEnd = value; PerformNeedPaint(false); } @@ -349,7 +350,7 @@ public Color MenuItemPressedGradientEnd /// /// esets the MenuItemPressedGradientEnd property to its default value. /// - public void ResetMenuItemPressedGradientEnd() => MenuItemPressedGradientEnd = Color.Empty; + public void ResetMenuItemPressedGradientEnd() => MenuItemPressedGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemPressedGradientMiddle @@ -359,13 +360,13 @@ public Color MenuItemPressedGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Middle color of the gradient used when a top-level ToolStripMenuItem is pressed.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemPressedGradientMiddle { get => InternalKCT.InternalMenuItemPressedGradientMiddle; - set - { + set + { InternalKCT.InternalMenuItemPressedGradientMiddle = value; PerformNeedPaint(false); } @@ -374,7 +375,7 @@ public Color MenuItemPressedGradientMiddle /// /// esets the MenuItemPressedGradientMiddle property to its default value. /// - public void ResetMenuItemPressedGradientMiddle() => MenuItemPressedGradientMiddle = Color.Empty; + public void ResetMenuItemPressedGradientMiddle() => MenuItemPressedGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemSelected @@ -384,13 +385,13 @@ public Color MenuItemPressedGradientMiddle [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Solid color to use when a ToolStripMenuItem other than the top-level ToolStripMenuItem is selected.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemSelected { get => InternalKCT.InternalMenuItemSelected; - set - { + set + { InternalKCT.InternalMenuItemSelected = value; PerformNeedPaint(false); } @@ -399,7 +400,7 @@ public Color MenuItemSelected /// /// esets the MenuItemSelected property to its default value. /// - public void ResetMenuItemSelected() => MenuItemSelected = Color.Empty; + public void ResetMenuItemSelected() => MenuItemSelected = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemSelectedGradientBegin @@ -409,13 +410,13 @@ public Color MenuItemSelected [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used when the ToolStripMenuItem is selected.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemSelectedGradientBegin { get => InternalKCT.InternalMenuItemSelectedGradientBegin; - set - { + set + { InternalKCT.InternalMenuItemSelectedGradientBegin = value; PerformNeedPaint(false); } @@ -424,7 +425,7 @@ public Color MenuItemSelectedGradientBegin /// /// esets the MenuItemSelectedGradientBegin property to its default value. /// - public void ResetMenuItemSelectedGradientBegin() => MenuItemSelectedGradientBegin = Color.Empty; + public void ResetMenuItemSelectedGradientBegin() => MenuItemSelectedGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuItemSelectedGradientEnd @@ -434,13 +435,13 @@ public Color MenuItemSelectedGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used when the ToolStripMenuItem is selected.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuItemSelectedGradientEnd { get => InternalKCT.InternalMenuItemSelectedGradientEnd; - set - { + set + { InternalKCT.InternalMenuItemSelectedGradientEnd = value; PerformNeedPaint(false); } @@ -449,7 +450,7 @@ public Color MenuItemSelectedGradientEnd /// /// esets the MenuItemSelectedGradientEnd property to its default value. /// - public void ResetMenuItemSelectedGradientEnd() => MenuItemSelectedGradientEnd = Color.Empty; + public void ResetMenuItemSelectedGradientEnd() => MenuItemSelectedGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenuStrip.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenuStrip.cs index 5da7a95ac..13149bf3b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenuStrip.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSMenuStrip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,10 +35,11 @@ internal KryptonPaletteTMSMenuStrip(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalMenuStripText == Color.Empty) && - (InternalKCT.InternalMenuStripFont == null) && - (InternalKCT.InternalMenuStripGradientBegin == Color.Empty) && - (InternalKCT.InternalMenuStripGradientEnd == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalMenuStripText == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuStripFont == null) && + (InternalKCT.InternalMenuStripGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalMenuStripGradientEnd == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -62,7 +63,7 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to draw text on the MenuStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuStripText { get => InternalKCT.InternalMenuStripText; @@ -77,7 +78,7 @@ public Color MenuStripText /// /// esets the MenuStripText property to its default value. /// - public void ResetMenuStripText() => MenuStripText = Color.Empty; + public void ResetMenuStripText() => MenuStripText = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuStripFont @@ -112,7 +113,7 @@ public Font? MenuStripFont [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used in the MenuStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuStripGradientBegin { get => InternalKCT.InternalMenuStripGradientBegin; @@ -127,7 +128,7 @@ public Color MenuStripGradientBegin /// /// esets the MenuStripGradientBegin property to its default value. /// - public void ResetMenuStripGradientBegin() => MenuStripGradientBegin = Color.Empty; + public void ResetMenuStripGradientBegin() => MenuStripGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region MenuStripGradientEnd @@ -137,7 +138,7 @@ public Color MenuStripGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the MenuStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color MenuStripGradientEnd { get => InternalKCT.InternalMenuStripGradientEnd; @@ -152,7 +153,7 @@ public Color MenuStripGradientEnd /// /// esets the MenuStripGradientEnd property to its default value. /// - public void ResetMenuStripGradientEnd() => MenuStripGradientEnd = Color.Empty; + public void ResetMenuStripGradientEnd() => MenuStripGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSRafting.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSRafting.cs index 72ff164b4..908d9147c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSRafting.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSRafting.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,8 +35,9 @@ internal KryptonPaletteTMSRafting(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalRaftingContainerGradientBegin == Color.Empty) && - (InternalKCT.InternalRaftingContainerGradientEnd == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalRaftingContainerGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalRaftingContainerGradientEnd == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -58,7 +59,7 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used in the ToolStripContainer.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color RaftingContainerGradientBegin { get => InternalKCT.InternalRaftingContainerGradientBegin; @@ -73,7 +74,7 @@ public Color RaftingContainerGradientBegin /// /// esets the RaftingContainerGradientBegin property to its default value. /// - public void ResetRaftingContainerGradientBegin() => RaftingContainerGradientBegin = Color.Empty; + public void ResetRaftingContainerGradientBegin() => RaftingContainerGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region RaftingContainerGradientEnd @@ -83,7 +84,7 @@ public Color RaftingContainerGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the ToolStripContainer.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color RaftingContainerGradientEnd { get => InternalKCT.InternalRaftingContainerGradientEnd; @@ -98,7 +99,7 @@ public Color RaftingContainerGradientEnd /// /// esets the RaftingContainerGradientEnd property to its default value. /// - public void ResetRaftingContainerGradientEnd() => RaftingContainerGradientEnd = Color.Empty; + public void ResetRaftingContainerGradientEnd() => RaftingContainerGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSSeparator.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSSeparator.cs index 269034092..0359cc650 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSSeparator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,8 +35,9 @@ internal KryptonPaletteTMSSeparator(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalSeparatorDark == Color.Empty) && - (InternalKCT.InternalSeparatorLight == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalSeparatorDark == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalSeparatorLight == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -58,7 +59,7 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to use for shadow effects on the ToolStripSeparator.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color SeparatorDark { get => InternalKCT.InternalSeparatorDark; @@ -73,7 +74,7 @@ public Color SeparatorDark /// /// Resets the SeparatorDark property to its default value. /// - public void ResetSeparatorDark() => SeparatorDark = Color.Empty; + public void ResetSeparatorDark() => SeparatorDark = GlobalStaticValues.EMPTY_COLOR; #endregion #region SeparatorLight @@ -83,7 +84,7 @@ public Color SeparatorDark [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to use for highlight effects on the ToolStripSeparator.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color SeparatorLight { get => InternalKCT.InternalSeparatorLight; @@ -98,7 +99,7 @@ public Color SeparatorLight /// /// Resets the SeparatorLight property to its default value. /// - public void ResetSeparatorLight() => SeparatorLight = Color.Empty; + public void ResetSeparatorLight() => SeparatorLight = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSStatusStrip.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSStatusStrip.cs index c4f17b821..0a9c20ee6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSStatusStrip.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSStatusStrip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,10 +35,11 @@ internal KryptonPaletteTMSStatusStrip(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalStatusStripText == Color.Empty) && - (InternalKCT.InternalStatusStripFont == null) && - (InternalKCT.InternalStatusStripGradientBegin == Color.Empty) && - (InternalKCT.InternalStatusStripGradientEnd == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalStatusStripText == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalStatusStripFont == null) && + (InternalKCT.InternalStatusStripGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalStatusStripGradientEnd == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -62,7 +63,7 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to draw text on the StatusStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color StatusStripText { get => InternalKCT.InternalStatusStripText; @@ -77,7 +78,7 @@ public Color StatusStripText /// /// Resets the StatusStripText property to its default value. /// - public void ResetStatusStripText() => StatusStripText = Color.Empty; + public void ResetStatusStripText() => StatusStripText = GlobalStaticValues.EMPTY_COLOR; #endregion #region StatusStripFont @@ -102,7 +103,7 @@ public Font? StatusStripFont /// /// Resets the StatusStripFont property to its default value. /// - public void ResetStatusStripFont() => StatusStripText = Color.Empty; + public void ResetStatusStripFont() => StatusStripText = GlobalStaticValues.EMPTY_COLOR; #endregion #region StatusStripGradientBegin @@ -112,7 +113,7 @@ public Font? StatusStripFont [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used on the StatusStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color StatusStripGradientBegin { get => InternalKCT.InternalStatusStripGradientBegin; @@ -127,7 +128,7 @@ public Color StatusStripGradientBegin /// /// Resets the StatusStripGradientBegin property to its default value. /// - public void ResetStatusStripGradientBegin() => StatusStripGradientBegin = Color.Empty; + public void ResetStatusStripGradientBegin() => StatusStripGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region StatusStripGradientEnd @@ -137,7 +138,7 @@ public Color StatusStripGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used on the StatusStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color StatusStripGradientEnd { get => InternalKCT.InternalStatusStripGradientEnd; @@ -152,7 +153,7 @@ public Color StatusStripGradientEnd /// /// Resets the StatusStripGradientEnd property to its default value. /// - public void ResetStatusStripGradientEnd() => StatusStripGradientEnd = Color.Empty; + public void ResetStatusStripGradientEnd() => StatusStripGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSToolStrip.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSToolStrip.cs index 7b3d1cddf..8c3538f02 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSToolStrip.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTMSToolStrip.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,17 +35,18 @@ internal KryptonPaletteTMSToolStrip(KryptonInternalKCT internalKCT, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (InternalKCT.InternalToolStripText == Color.Empty) && - (InternalKCT.InternalToolStripFont == null) && - (InternalKCT.InternalToolStripBorder == Color.Empty) && - (InternalKCT.InternalToolStripContentPanelGradientBegin == Color.Empty) && - (InternalKCT.InternalToolStripContentPanelGradientEnd == Color.Empty) && - (InternalKCT.InternalToolStripDropDownBackground == Color.Empty) && - (InternalKCT.InternalToolStripGradientBegin == Color.Empty) && - (InternalKCT.InternalToolStripGradientEnd == Color.Empty) && - (InternalKCT.InternalToolStripGradientMiddle == Color.Empty) && - (InternalKCT.InternalToolStripPanelGradientBegin == Color.Empty) && - (InternalKCT.InternalToolStripPanelGradientEnd == Color.Empty); + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (InternalKCT.InternalToolStripText == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripFont == null) && + (InternalKCT.InternalToolStripBorder == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripContentPanelGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripContentPanelGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripDropDownBackground == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripGradientEnd == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripGradientMiddle == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripPanelGradientBegin == GlobalStaticValues.EMPTY_COLOR) && + (InternalKCT.InternalToolStripPanelGradientEnd == GlobalStaticValues.EMPTY_COLOR); #endregion @@ -76,7 +77,7 @@ public void PopulateFromBase() [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Color to draw text on the ToolStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripText { get => InternalKCT.InternalToolStripText; @@ -91,7 +92,7 @@ public Color ToolStripText /// /// esets the ToolStripText property to its default value. /// - public void ResetToolStripText() => ToolStripText = Color.Empty; + public void ResetToolStripText() => ToolStripText = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripFont @@ -126,7 +127,7 @@ public Font? ToolStripFont [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Border color to use on the bottom edge of the ToolStrip.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripBorder { get => InternalKCT.InternalToolStripBorder; @@ -141,7 +142,7 @@ public Color ToolStripBorder /// /// esets the ToolStripBorder property to its default value. /// - public void ResetToolStripBorder() => ToolStripBorder = Color.Empty; + public void ResetToolStripBorder() => ToolStripBorder = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripContentPanelGradientBegin @@ -151,7 +152,7 @@ public Color ToolStripBorder [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used in the ToolStripContentPanel..")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripContentPanelGradientBegin { get => InternalKCT.InternalToolStripContentPanelGradientBegin; @@ -166,7 +167,7 @@ public Color ToolStripContentPanelGradientBegin /// /// esets the ToolStripContentPanelGradientBegin property to its default value. /// - public void ResetToolStripContentPanelGradientBegin() => ToolStripContentPanelGradientBegin = Color.Empty; + public void ResetToolStripContentPanelGradientBegin() => ToolStripContentPanelGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripContentPanelGradientEnd @@ -176,7 +177,7 @@ public Color ToolStripContentPanelGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the ToolStripContentPanel.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripContentPanelGradientEnd { get => InternalKCT.InternalToolStripContentPanelGradientEnd; @@ -191,7 +192,7 @@ public Color ToolStripContentPanelGradientEnd /// /// esets the ToolStripContentPanelGradientEnd property to its default value. /// - public void ResetToolStripContentPanelGradientEnd() => ToolStripContentPanelGradientEnd = Color.Empty; + public void ResetToolStripContentPanelGradientEnd() => ToolStripContentPanelGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripDropDownBackground @@ -201,7 +202,7 @@ public Color ToolStripContentPanelGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Solid background color solid background color of the ToolStripDropDown..")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripDropDownBackground { get => InternalKCT.InternalToolStripDropDownBackground; @@ -216,7 +217,7 @@ public Color ToolStripDropDownBackground /// /// esets the ToolStripDropDownBackground property to its default value. /// - public void ResetToolStripDropDownBackground() => ToolStripDropDownBackground = Color.Empty; + public void ResetToolStripDropDownBackground() => ToolStripDropDownBackground = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripGradientBegin @@ -226,7 +227,7 @@ public Color ToolStripDropDownBackground [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used in the ToolStrip background..")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripGradientBegin { get => InternalKCT.InternalToolStripGradientBegin; @@ -241,7 +242,7 @@ public Color ToolStripGradientBegin /// /// esets the ToolStripGradientBegin property to its default value. /// - public void ResetToolStripGradientBegin() => ToolStripGradientBegin = Color.Empty; + public void ResetToolStripGradientBegin() => ToolStripGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripGradientEnd @@ -251,7 +252,7 @@ public Color ToolStripGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the ToolStrip background..")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripGradientEnd { get => InternalKCT.InternalToolStripGradientEnd; @@ -266,7 +267,7 @@ public Color ToolStripGradientEnd /// /// esets the ToolStripGradientEnd property to its default value. /// - public void ResetToolStripGradientEnd() => ToolStripGradientEnd = Color.Empty; + public void ResetToolStripGradientEnd() => ToolStripGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripGradientMiddle @@ -276,7 +277,7 @@ public Color ToolStripGradientEnd [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the ToolStrip background..")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripGradientMiddle { get => InternalKCT.InternalToolStripGradientMiddle; @@ -291,7 +292,7 @@ public Color ToolStripGradientMiddle /// /// esets the ToolStripGradientMiddle property to its default value. /// - public void ResetToolStripGradientMiddle() => ToolStripGradientMiddle = Color.Empty; + public void ResetToolStripGradientMiddle() => ToolStripGradientMiddle = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripPanelGradientBegin @@ -301,7 +302,7 @@ public Color ToolStripGradientMiddle [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Starting color of the gradient used in the ToolStripPanel..")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripPanelGradientBegin { get => InternalKCT.InternalToolStripPanelGradientBegin; @@ -316,7 +317,7 @@ public Color ToolStripPanelGradientBegin /// /// esets the ToolStripPanelGradientBegin property to its default value. /// - public void ResetToolStripPanelGradientBegin() => ToolStripPanelGradientBegin = Color.Empty; + public void ResetToolStripPanelGradientBegin() => ToolStripPanelGradientBegin = GlobalStaticValues.EMPTY_COLOR; #endregion #region ToolStripPanelGradientEnd @@ -326,7 +327,7 @@ public Color ToolStripPanelGradientBegin [KryptonPersist(false)] [Category(@"ToolMenuStatus")] [Description(@"Ending color of the gradient used in the ToolStripPanel..")] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ToolStripPanelGradientEnd { get => InternalKCT.InternalToolStripPanelGradientEnd; @@ -341,7 +342,7 @@ public Color ToolStripPanelGradientEnd /// /// esets the ToolStripPanelGradientEnd property to its default value. /// - public void ResetToolStripPanelGradientEnd() => ToolStripPanelGradientEnd = Color.Empty; + public void ResetToolStripPanelGradientEnd() => ToolStripPanelGradientEnd = GlobalStaticValues.EMPTY_COLOR; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButton.cs index 2abd3e338..220d53133 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButton.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -26,7 +24,7 @@ public class KryptonPaletteTabButton : Storage /// Border style. /// Content style. /// Delegate for notifying paint requests. - public KryptonPaletteTabButton(PaletteRedirect? redirect, + public KryptonPaletteTabButton(PaletteRedirect redirect, PaletteBackStyle backStyle, PaletteBorderStyle borderStyle, PaletteContentStyle contentStyle, @@ -48,7 +46,7 @@ public KryptonPaletteTabButton(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { OverrideFocus.SetRedirector(redirect); StateCommon.SetRedirector(redirect); @@ -60,13 +58,14 @@ public void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - OverrideFocus.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StatePressed.IsDefault && - StateSelected.IsDefault; + OverrideFocus.IsDefault && + StateDisabled.IsDefault && + StateNormal.IsDefault && + StateTracking.IsDefault && + StatePressed.IsDefault && + StateSelected.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButtons.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButtons.cs index 293c2d15a..021deee5e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButtons.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTabButtons.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -26,7 +26,12 @@ public class KryptonPaletteTabButtons : Storage public KryptonPaletteTabButtons([DisallowNull] PaletteRedirect redirector, NeedPaintHandler needPaint) { - Debug.Assert(redirector != null); + Debug.Assert(redirector is not null); + + if (redirector is null) + { + throw new ArgumentNullException(nameof(redirector)); + } // Create the button style specific and common palettes TabCommon = new KryptonPaletteTabButton(redirector, PaletteBackStyle.TabHighProfile, PaletteBorderStyle.TabHighProfile, PaletteContentStyle.TabHighProfile, needPaint); @@ -41,7 +46,7 @@ public KryptonPaletteTabButtons([DisallowNull] PaletteRedirect redirector, TabCustom3 = new KryptonPaletteTabButton(redirector, PaletteBackStyle.TabCustom3, PaletteBorderStyle.TabCustom3, PaletteContentStyle.TabCustom3, needPaint); // Create redirectors for inheriting from style specific to style common - var redirectCommon = new PaletteRedirectTriple(redirector, TabCommon.StateDisabled, + var redirectCommon = new PaletteRedirectTriple(redirector!, TabCommon.StateDisabled, TabCommon.StateNormal, TabCommon.StatePressed, TabCommon.StateTracking, TabCommon.StateSelected, TabCommon.OverrideFocus); // Inform the button style to use the new redirector @@ -61,16 +66,18 @@ public KryptonPaletteTabButtons([DisallowNull] PaletteRedirect redirector, /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => TabCommon.IsDefault && - TabHighProfile.IsDefault && - TabStandardProfile.IsDefault && - TabLowProfile.IsDefault && - TabDock.IsDefault && - TabDockAutoHidden.IsDefault && - TabOneNote.IsDefault && - TabCustom1.IsDefault && - TabCustom2.IsDefault && - TabCustom3.IsDefault; + TabHighProfile.IsDefault && + TabStandardProfile.IsDefault && + TabLowProfile.IsDefault && + TabDock.IsDefault && + TabDockAutoHidden.IsDefault && + TabOneNote.IsDefault && + TabCustom1.IsDefault && + TabCustom2.IsDefault && + TabCustom3.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTrackBar.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTrackBar.cs index 9b1c6a59a..5ae164902 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTrackBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Component/KryptonPaletteTrackBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,8 +27,8 @@ public KryptonPaletteTrackBar(PaletteRedirect? redirect, NeedPaintHandler needPaint) { // Create the storage objects - StateCommon = new PaletteTrackBarRedirect(redirect, needPaint); - OverrideFocus = new PaletteTrackBarRedirect(redirect, needPaint); + StateCommon = new PaletteTrackBarRedirect(redirect!, needPaint); + OverrideFocus = new PaletteTrackBarRedirect(redirect!, needPaint); StateDisabled = new PaletteTrackBarStates(StateCommon, needPaint); StateNormal = new PaletteTrackBarStates(StateCommon, needPaint); StateTracking = new PaletteTrackBarPositionStates(StateCommon, needPaint); @@ -41,7 +41,7 @@ public KryptonPaletteTrackBar(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { StateCommon.SetRedirector(redirect); OverrideFocus.SetRedirector(redirect); @@ -53,12 +53,13 @@ public void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => StateCommon.IsDefault && - OverrideFocus.IsDefault && - StateDisabled.IsDefault && - StateNormal.IsDefault && - StateTracking.IsDefault && - StatePressed.IsDefault; + OverrideFocus.IsDefault && + StateDisabled.IsDefault && + StateNormal.IsDefault && + StateTracking.IsDefault && + StatePressed.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable.cs index a2f095418..9473ee33b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,7 +36,7 @@ public class KryptonColorTable : ProfessionalColorTable #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public virtual InheritBool UseRoundedEdges => InheritBool.True; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2007.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2007.cs index 9976b7f17..10cb7b353 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2007.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2007.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -55,7 +55,7 @@ public KryptonColorTable2007([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - Colors = colors; + Colors = colors!; UseRoundedEdges = roundedEdges; } #endregion @@ -70,7 +70,7 @@ public KryptonColorTable2007([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -613,15 +613,10 @@ public KryptonColorTable2007([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2010.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2010.cs index 428bf6e98..bfeb7feee 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2010.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2010.cs @@ -1,17 +1,53 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion namespace Krypton.Toolkit { + /// + /// Provide KryptonColorTable2010 values using an array of Color values as the source. + /// + public class KryptonColorTable2010White : KryptonColorTable2010 + { + #region Identity + static KryptonColorTable2010White() + { + // Get the font settings from the system + DefineFonts(); + + // We need to notice when system color settings change + SystemEvents.UserPreferenceChanged += OnUserPreferenceChanged; + } + + /// + /// Initialize a new instance of the KryptonColorTable2010White class. + /// + /// Source of + /// Should have rounded edges. + /// Associated palette instance. + public KryptonColorTable2010White([DisallowNull] Color[] colors, + InheritBool roundedEdges, + PaletteBase palette) + : base(colors, roundedEdges, palette) + { + Debug.Assert(colors != null); + } + #endregion + + /// + /// MenuStripText + /// + public override Color MenuStripText => Color.FromArgb(255, 30, 30, 30);// Colors[(int)SchemeOfficeColors.StatusStripText]; + } + /// /// Provide KryptonColorTable2010 values using an array of Color values as the source. /// @@ -55,7 +91,7 @@ public KryptonColorTable2010([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - Colors = colors; + Colors = colors!; UseRoundedEdges = roundedEdges; } #endregion @@ -70,7 +106,7 @@ public KryptonColorTable2010([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -611,20 +647,20 @@ public KryptonColorTable2010([DisallowNull] Color[] colors, #endregion #region Implementation - private static void DefineFonts() - { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); + /// DefineFonts + protected static void DefineFonts() + { // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } - private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => + /// OnUserPreferenceChanged + /// + /// + protected static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => // Update fonts to reflect any change in system settings DefineFonts(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2013.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2013.cs index 9030d76b7..e5ea6458a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2013.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable2013.cs @@ -1,17 +1,53 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion namespace Krypton.Toolkit { + /// + /// Provide KryptonColorTable2013White values using an array of Color values as the source. + /// + public class KryptonColorTable2013White : KryptonColorTable2013 + { + #region Identity + static KryptonColorTable2013White() + { + // Get the font settings from the system + DefineFonts(); + + // We need to notice when system color settings change + SystemEvents.UserPreferenceChanged += OnUserPreferenceChanged; + } + + /// + /// Initialize a new instance of the KryptonColorTable2013White class. + /// + /// Source of + /// Should have rounded edges. + /// Associated palette instance. + public KryptonColorTable2013White([DisallowNull] Color[] colors, + InheritBool roundedEdges, + PaletteBase palette) + : base(colors, roundedEdges, palette) + { + Debug.Assert(colors != null); + } + #endregion + + /// + /// MenuStripText + /// + public override Color MenuStripText => Color.FromArgb(255, 30, 30, 30); + } + /// /// Provide KryptonColorTable2013 values using an array of Color values as the source. /// @@ -61,7 +97,7 @@ public KryptonColorTable2013([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - _colors = colors; + _colors = colors!; _roundedEdges = roundedEdges; } #endregion @@ -76,7 +112,7 @@ public KryptonColorTable2013([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -617,20 +653,19 @@ public KryptonColorTable2013([DisallowNull] Color[] colors, #endregion #region Implementation - private static void DefineFonts() + /// DefineFonts + protected static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } - private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => + /// OnUserPreferenceChanged + /// + /// + protected static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => // Update fonts to reflect any change in system settings DefineFonts(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable365.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable365.cs index 4adbb7822..12078591e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable365.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTable365.cs @@ -1,17 +1,54 @@ #region BSD License /* - * + * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * */ #endregion namespace Krypton.Toolkit { + + /// + /// Provide KryptonColorTable2013White values using an array of Color values as the source. + /// + public class KryptonColorTable365White : KryptonColorTable365 + { + #region Identity + static KryptonColorTable365White() + { + // Get the font settings from the system + DefineFonts(); + + // We need to notice when system color settings change + SystemEvents.UserPreferenceChanged += OnUserPreferenceChanged; + } + + /// + /// Initialize a new instance of the KryptonColorTable365White class. + /// + /// Source of + /// Should have rounded edges. + /// Associated palette instance. + public KryptonColorTable365White([DisallowNull] Color[] colors, + InheritBool roundedEdges, + PaletteBase palette) + : base(colors, roundedEdges, palette) + { + Debug.Assert(colors != null); + } + #endregion + + /// + /// MenuStripText + /// + public override Color MenuStripText => Color.FromArgb(255, 30, 30, 30); + } + /// /// Provide KryptonColorTable365 values using an array of Color values as the source. /// @@ -55,12 +92,13 @@ static KryptonColorTable365() /// Source of /// Should have rounded edges. /// Associated palette instance. - public KryptonColorTable365([DisallowNull] Color[] colors, - InheritBool roundedEdges, PaletteBase palette) + public KryptonColorTable365([DisallowNull] Color[] colors, + InheritBool roundedEdges, + PaletteBase palette) : base(palette) { Debug.Assert(colors != null); - _colors = colors; + _colors = colors!; _roundedEdges = roundedEdges; } #endregion @@ -75,7 +113,7 @@ public KryptonColorTable365([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -616,20 +654,15 @@ public KryptonColorTable365([DisallowNull] Color[] colors, #endregion #region Implementation - private static void DefineFonts() + protected static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } - private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => + protected static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => // Update fonts to reflect any change in system settings DefineFonts(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableMicrosoft365.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableMicrosoft365.cs index 6e31c31af..b7c77ee1b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableMicrosoft365.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableMicrosoft365.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -62,7 +62,7 @@ public KryptonColorTableMicrosoft365([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - _colors = colors; + _colors = colors!; _roundedEdges = roundedEdges; } #endregion @@ -77,7 +77,7 @@ public KryptonColorTableMicrosoft365([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -620,15 +620,10 @@ public KryptonColorTableMicrosoft365([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableSparkle.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableSparkle.cs index 283f56199..3036cfb99 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableSparkle.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableSparkle.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -59,15 +59,15 @@ public KryptonColorTableSparkle([DisallowNull] Color[] colors, Debug.Assert(colors != null); Debug.Assert(sparkleColors != null); - _colors = colors; - _sparkleColors = sparkleColors; + _colors = colors!; + _sparkleColors = sparkleColors!; UseRoundedEdges = roundedEdges; } #endregion #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -610,15 +610,10 @@ public KryptonColorTableSparkle([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableVisualStudio.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableVisualStudio.cs index 1120461a8..1312458d7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableVisualStudio.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonColorTableVisualStudio.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -60,7 +60,7 @@ public KryptonColorTableVisualStudio([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - _colors = colors; + _colors = colors!; _roundedEdges = roundedEdges; } #endregion @@ -75,7 +75,7 @@ public KryptonColorTableVisualStudio([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -618,15 +618,10 @@ public KryptonColorTableVisualStudio([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font("Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font("Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font("Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font("Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonDataGridViewStyles.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonDataGridViewStyles.cs index 2b226ae1d..6c95a3316 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonDataGridViewStyles.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonDataGridViewStyles.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,7 +34,7 @@ public class DataGridViewStyles : Storage public DataGridViewStyles([DisallowNull] KryptonDataGridView dataGridView) { Debug.Assert(dataGridView != null); - _dataGridView = dataGridView; + _dataGridView = dataGridView!; _gridStyle = DataGridViewStyle.List; _columnStyle = GridStyle.List; _rowStyle = GridStyle.List; @@ -47,6 +47,8 @@ public DataGridViewStyles([DisallowNull] KryptonDataGridView dataGridView) /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => _gridStyle == DataGridViewStyle.List; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonPersistAttribute.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonPersistAttribute.cs index 47d863f15..00f91b798 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonPersistAttribute.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonPersistAttribute.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalCustomKCT.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalCustomKCT.cs index c73bb83c9..f4c6e8974 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalCustomKCT.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalCustomKCT.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,7 +40,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// /// Gets the starting color of the gradient used when the button is checked. /// - public override Color ButtonCheckedGradientBegin => _colors[(int) PaletteColorIndex.ButtonCheckedGradientBegin] == Color.Empty + public override Color ButtonCheckedGradientBegin => _colors[(int) PaletteColorIndex.ButtonCheckedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonCheckedGradientBegin : _colors[(int) PaletteColorIndex.ButtonCheckedGradientBegin]; @@ -51,7 +51,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used when the button is checked. /// public override Color ButtonCheckedGradientEnd => - _colors[(int)PaletteColorIndex.ButtonCheckedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonCheckedGradientEnd : _colors[(int)PaletteColorIndex.ButtonCheckedGradientEnd]; @@ -62,7 +62,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used when the button is checked. /// public override Color ButtonCheckedGradientMiddle => - _colors[(int)PaletteColorIndex.ButtonCheckedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonCheckedGradientMiddle : _colors[(int)PaletteColorIndex.ButtonCheckedGradientMiddle]; @@ -73,7 +73,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid color used when the button is checked. /// public override Color ButtonCheckedHighlight => - _colors[(int)PaletteColorIndex.ButtonCheckedHighlight] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedHighlight] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonCheckedHighlight : _colors[(int)PaletteColorIndex.ButtonCheckedHighlight]; @@ -84,7 +84,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the border color to use with ButtonCheckedHighlight. /// public override Color ButtonCheckedHighlightBorder => - _colors[(int)PaletteColorIndex.ButtonCheckedHighlightBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonCheckedHighlightBorder] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonCheckedHighlightBorder : _colors[(int)PaletteColorIndex.ButtonCheckedHighlightBorder]; @@ -95,7 +95,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the border color to use with the ButtonPressedGradientBegin, ButtonPressedGradientMiddle, and ButtonPressedGradientEnd colors. /// public override Color ButtonPressedBorder => - _colors[(int)PaletteColorIndex.ButtonPressedBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedBorder] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonPressedBorder : _colors[(int)PaletteColorIndex.ButtonPressedBorder]; @@ -106,7 +106,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used when the button is pressed. /// public override Color ButtonPressedGradientBegin => - _colors[(int)PaletteColorIndex.ButtonPressedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonPressedGradientBegin : _colors[(int)PaletteColorIndex.ButtonPressedGradientBegin]; @@ -117,7 +117,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used when the button is pressed. /// public override Color ButtonPressedGradientEnd => - _colors[(int)PaletteColorIndex.ButtonPressedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonPressedGradientEnd : _colors[(int)PaletteColorIndex.ButtonPressedGradientEnd]; @@ -128,7 +128,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used when the button is pressed. /// public override Color ButtonPressedGradientMiddle => - _colors[(int)PaletteColorIndex.ButtonPressedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonPressedGradientMiddle : _colors[(int)PaletteColorIndex.ButtonPressedGradientMiddle]; @@ -139,7 +139,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid color used when the button is pressed. /// public override Color ButtonPressedHighlight => - _colors[(int)PaletteColorIndex.ButtonPressedHighlight] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedHighlight] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonPressedHighlight : _colors[(int)PaletteColorIndex.ButtonPressedHighlight]; @@ -150,7 +150,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the border color to use with ButtonPressedHighlight. /// public override Color ButtonPressedHighlightBorder => - _colors[(int)PaletteColorIndex.ButtonPressedHighlightBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonPressedHighlightBorder] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonPressedHighlightBorder : _colors[(int)PaletteColorIndex.ButtonPressedHighlightBorder]; @@ -161,7 +161,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the border color to use with the ButtonSelectedGradientBegin, ButtonSelectedGradientMiddle, and ButtonSelectedGradientEnd colors. /// public override Color ButtonSelectedBorder => - _colors[(int)PaletteColorIndex.ButtonSelectedBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedBorder] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonSelectedBorder : _colors[(int)PaletteColorIndex.ButtonSelectedBorder]; @@ -172,7 +172,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used when the button is selected. /// public override Color ButtonSelectedGradientBegin => - _colors[(int)PaletteColorIndex.ButtonSelectedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonSelectedGradientBegin : _colors[(int)PaletteColorIndex.ButtonSelectedGradientBegin]; @@ -183,7 +183,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used when the button is selected. /// public override Color ButtonSelectedGradientEnd => - _colors[(int)PaletteColorIndex.ButtonSelectedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonSelectedGradientEnd : _colors[(int)PaletteColorIndex.ButtonSelectedGradientEnd]; @@ -194,7 +194,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used when the button is selected. /// public override Color ButtonSelectedGradientMiddle => - _colors[(int)PaletteColorIndex.ButtonSelectedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonSelectedGradientMiddle : _colors[(int)PaletteColorIndex.ButtonSelectedGradientMiddle]; @@ -205,7 +205,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid color used when the button is selected. /// public override Color ButtonSelectedHighlight => - _colors[(int)PaletteColorIndex.ButtonSelectedHighlight] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedHighlight] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonSelectedHighlight : _colors[(int)PaletteColorIndex.ButtonSelectedHighlight]; @@ -216,7 +216,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the border color to use with ButtonSelectedHighlight. /// public override Color ButtonSelectedHighlightBorder => - _colors[(int)PaletteColorIndex.ButtonSelectedHighlightBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ButtonSelectedHighlightBorder] == GlobalStaticValues.EMPTY_COLOR ? base.ButtonSelectedHighlightBorder : _colors[(int)PaletteColorIndex.ButtonSelectedHighlightBorder]; @@ -229,7 +229,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid color to use when the button is checked and gradients are being used. /// public override Color CheckBackground => - _colors[(int)PaletteColorIndex.CheckBackground] == Color.Empty + _colors[(int)PaletteColorIndex.CheckBackground] == GlobalStaticValues.EMPTY_COLOR ? base.CheckBackground : _colors[(int)PaletteColorIndex.CheckBackground]; @@ -240,7 +240,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid color to use when the button is checked and selected and gradients are being used. /// public override Color CheckPressedBackground => - _colors[(int)PaletteColorIndex.CheckPressedBackground] == Color.Empty + _colors[(int)PaletteColorIndex.CheckPressedBackground] == GlobalStaticValues.EMPTY_COLOR ? base.CheckPressedBackground : _colors[(int)PaletteColorIndex.CheckPressedBackground]; @@ -251,7 +251,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid color to use when the button is checked and selected and gradients are being used. /// public override Color CheckSelectedBackground => - _colors[(int)PaletteColorIndex.CheckSelectedBackground] == Color.Empty + _colors[(int)PaletteColorIndex.CheckSelectedBackground] == GlobalStaticValues.EMPTY_COLOR ? base.CheckSelectedBackground : _colors[(int)PaletteColorIndex.CheckSelectedBackground]; @@ -263,7 +263,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// /// Gets the color to use for shadow effects on the grip (move handle). /// - public override Color GripDark => _colors[(int)PaletteColorIndex.GripDark] == Color.Empty ? base.GripDark : _colors[(int)PaletteColorIndex.GripDark]; + public override Color GripDark => _colors[(int)PaletteColorIndex.GripDark] == GlobalStaticValues.EMPTY_COLOR ? base.GripDark : _colors[(int)PaletteColorIndex.GripDark]; #endregion @@ -271,7 +271,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// /// Gets the color to use for highlight effects on the grip (move handle). /// - public override Color GripLight => _colors[(int)PaletteColorIndex.GripLight] == Color.Empty ? base.GripLight : _colors[(int)PaletteColorIndex.GripLight]; + public override Color GripLight => _colors[(int)PaletteColorIndex.GripLight] == GlobalStaticValues.EMPTY_COLOR ? base.GripLight : _colors[(int)PaletteColorIndex.GripLight]; #endregion #endregion @@ -282,7 +282,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the image margin of a ToolStripDropDownMenu. /// public override Color ImageMarginGradientBegin => - _colors[(int)PaletteColorIndex.ImageMarginGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ImageMarginGradientBegin : _colors[(int)PaletteColorIndex.ImageMarginGradientBegin]; @@ -293,7 +293,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the image margin of a ToolStripDropDownMenu. /// public override Color ImageMarginGradientEnd => - _colors[(int)PaletteColorIndex.ImageMarginGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ImageMarginGradientEnd : _colors[(int)PaletteColorIndex.ImageMarginGradientEnd]; @@ -304,7 +304,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used in the image margin of a ToolStripDropDownMenu. /// public override Color ImageMarginGradientMiddle => - _colors[(int)PaletteColorIndex.ImageMarginGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.ImageMarginGradientMiddle : _colors[(int)PaletteColorIndex.ImageMarginGradientMiddle]; @@ -315,7 +315,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed. /// public override Color ImageMarginRevealedGradientBegin => - _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ImageMarginRevealedGradientBegin : _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientBegin]; @@ -326,7 +326,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed. /// public override Color ImageMarginRevealedGradientEnd => - _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ImageMarginRevealedGradientEnd : _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientEnd]; @@ -337,7 +337,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used in the image margin of a ToolStripDropDownMenu when an item is revealed. /// public override Color ImageMarginRevealedGradientMiddle => - _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.ImageMarginRevealedGradientMiddle : _colors[(int)PaletteColorIndex.ImageMarginRevealedGradientMiddle]; @@ -349,7 +349,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// /// Gets the color that is the border color to use on a MenuStrip. /// - public override Color MenuBorder => _colors[(int)PaletteColorIndex.MenuBorder] == Color.Empty ? base.MenuBorder : _colors[(int)PaletteColorIndex.MenuBorder]; + public override Color MenuBorder => _colors[(int)PaletteColorIndex.MenuBorder] == GlobalStaticValues.EMPTY_COLOR ? base.MenuBorder : _colors[(int)PaletteColorIndex.MenuBorder]; #endregion @@ -357,7 +357,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// /// Gets the color used to draw menu item text. /// - public override Color MenuItemText => _colors[(int)PaletteColorIndex.MenuItemText] == Color.Empty ? base.MenuItemText : _colors[(int)PaletteColorIndex.MenuItemText]; + public override Color MenuItemText => _colors[(int)PaletteColorIndex.MenuItemText] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemText : _colors[(int)PaletteColorIndex.MenuItemText]; #endregion @@ -366,7 +366,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the border color to use with a ToolStripMenuItem. /// public override Color MenuItemBorder => - _colors[(int)PaletteColorIndex.MenuItemBorder] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemBorder] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemBorder : _colors[(int)PaletteColorIndex.MenuItemBorder]; @@ -377,7 +377,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used when a top-level ToolStripMenuItem is pressed. /// public override Color MenuItemPressedGradientBegin => - _colors[(int)PaletteColorIndex.MenuItemPressedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemPressedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemPressedGradientBegin : _colors[(int)PaletteColorIndex.MenuItemPressedGradientBegin]; @@ -388,7 +388,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used when a top-level ToolStripMenuItem is pressed. /// public override Color MenuItemPressedGradientEnd => - _colors[(int)PaletteColorIndex.MenuItemPressedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemPressedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemPressedGradientEnd : _colors[(int)PaletteColorIndex.MenuItemPressedGradientEnd]; @@ -399,7 +399,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used when a top-level ToolStripMenuItem is pressed. /// public override Color MenuItemPressedGradientMiddle => - _colors[(int)PaletteColorIndex.MenuItemPressedGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemPressedGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemPressedGradientMiddle : _colors[(int)PaletteColorIndex.MenuItemPressedGradientMiddle]; @@ -410,7 +410,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid color to use when a ToolStripMenuItem other than the top-level ToolStripMenuItem is selected. /// public override Color MenuItemSelected => - _colors[(int)PaletteColorIndex.MenuItemSelected] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemSelected] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemSelected : _colors[(int)PaletteColorIndex.MenuItemSelected]; @@ -421,7 +421,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used when the ToolStripMenuItem is selected. /// public override Color MenuItemSelectedGradientBegin => - _colors[(int)PaletteColorIndex.MenuItemSelectedGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemSelectedGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemSelectedGradientBegin : _colors[(int)PaletteColorIndex.MenuItemSelectedGradientBegin]; @@ -432,7 +432,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used when the ToolStripMenuItem is selected. /// public override Color MenuItemSelectedGradientEnd => - _colors[(int)PaletteColorIndex.MenuItemSelectedGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.MenuItemSelectedGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.MenuItemSelectedGradientEnd : _colors[(int)PaletteColorIndex.MenuItemSelectedGradientEnd]; @@ -443,7 +443,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the color used to draw text on a menu strip. /// public override Color MenuStripText => - _colors[(int)PaletteColorIndex.MenuStripText] == Color.Empty + _colors[(int)PaletteColorIndex.MenuStripText] == GlobalStaticValues.EMPTY_COLOR ? base.MenuStripText : _colors[(int)PaletteColorIndex.MenuStripText]; @@ -454,7 +454,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the MenuStrip. /// public override Color MenuStripGradientBegin => - _colors[(int)PaletteColorIndex.MenuStripGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.MenuStripGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.MenuStripGradientBegin : _colors[(int)PaletteColorIndex.MenuStripGradientBegin]; @@ -465,7 +465,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the MenuStrip. /// public override Color MenuStripGradientEnd => - _colors[(int)PaletteColorIndex.MenuStripGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.MenuStripGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.MenuStripGradientEnd : _colors[(int)PaletteColorIndex.MenuStripGradientEnd]; @@ -478,7 +478,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the ToolStripOverflowButton. /// public override Color OverflowButtonGradientBegin => - _colors[(int)PaletteColorIndex.OverflowButtonGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.OverflowButtonGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.OverflowButtonGradientBegin : _colors[(int)PaletteColorIndex.OverflowButtonGradientBegin]; @@ -489,7 +489,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the ToolStripOverflowButton. /// public override Color OverflowButtonGradientEnd => - _colors[(int)PaletteColorIndex.OverflowButtonGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.OverflowButtonGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.OverflowButtonGradientEnd : _colors[(int)PaletteColorIndex.OverflowButtonGradientEnd]; @@ -500,7 +500,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used in the ToolStripOverflowButton. /// public override Color OverflowButtonGradientMiddle => - _colors[(int)PaletteColorIndex.OverflowButtonGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.OverflowButtonGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.OverflowButtonGradientMiddle : _colors[(int)PaletteColorIndex.OverflowButtonGradientMiddle]; @@ -513,7 +513,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the ToolStripContainer. /// public override Color RaftingContainerGradientBegin => - _colors[(int)PaletteColorIndex.RaftingContainerGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.RaftingContainerGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.RaftingContainerGradientBegin : _colors[(int)PaletteColorIndex.RaftingContainerGradientBegin]; @@ -524,7 +524,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the ToolStripContainer. /// public override Color RaftingContainerGradientEnd => - _colors[(int)PaletteColorIndex.RaftingContainerGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.RaftingContainerGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.RaftingContainerGradientEnd : _colors[(int)PaletteColorIndex.RaftingContainerGradientEnd]; @@ -537,7 +537,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the color to use to for shadow effects on the ToolStripSeparator. /// public override Color SeparatorDark => - _colors[(int)PaletteColorIndex.SeparatorDark] == Color.Empty + _colors[(int)PaletteColorIndex.SeparatorDark] == GlobalStaticValues.EMPTY_COLOR ? base.SeparatorDark : _colors[(int)PaletteColorIndex.SeparatorDark]; @@ -548,7 +548,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the color to use to for highlight effects on the ToolStripSeparator. /// public override Color SeparatorLight => - _colors[(int)PaletteColorIndex.SeparatorLight] == Color.Empty + _colors[(int)PaletteColorIndex.SeparatorLight] == GlobalStaticValues.EMPTY_COLOR ? base.SeparatorLight : _colors[(int)PaletteColorIndex.SeparatorLight]; @@ -561,7 +561,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the color used to draw text on a status strip. /// public override Color StatusStripText => - _colors[(int)PaletteColorIndex.StatusStripText] == Color.Empty + _colors[(int)PaletteColorIndex.StatusStripText] == GlobalStaticValues.EMPTY_COLOR ? base.StatusStripText : _colors[(int)PaletteColorIndex.StatusStripText]; @@ -572,7 +572,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used on the StatusStrip. /// public override Color StatusStripGradientBegin => - _colors[(int)PaletteColorIndex.StatusStripGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.StatusStripGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.StatusStripGradientBegin : _colors[(int)PaletteColorIndex.StatusStripGradientBegin]; @@ -583,7 +583,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used on the StatusStrip. /// public override Color StatusStripGradientEnd => - _colors[(int)PaletteColorIndex.StatusStripGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.StatusStripGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.StatusStripGradientEnd : _colors[(int)PaletteColorIndex.StatusStripGradientEnd]; @@ -596,7 +596,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the color used to draw text on a tool strip. /// public override Color ToolStripText => - _colors[(int)PaletteColorIndex.ToolStripText] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripText] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripText : _colors[(int)PaletteColorIndex.ToolStripText]; @@ -607,7 +607,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the border color to use on the bottom edge of the ToolStrip. /// public override Color ToolStripBorder => - _colors[(int)PaletteColorIndex.ToolStripBorder] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripBorder] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripBorder : _colors[(int)PaletteColorIndex.ToolStripBorder]; @@ -618,7 +618,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the ToolStripContentPanel. /// public override Color ToolStripContentPanelGradientBegin => - _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripContentPanelGradientBegin : _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientBegin]; @@ -629,7 +629,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the ToolStripContentPanel. /// public override Color ToolStripContentPanelGradientEnd => - _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripContentPanelGradientEnd : _colors[(int)PaletteColorIndex.ToolStripContentPanelGradientEnd]; @@ -640,7 +640,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the solid background color of the ToolStripDropDown. /// public override Color ToolStripDropDownBackground => - _colors[(int)PaletteColorIndex.ToolStripDropDownBackground] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripDropDownBackground] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripDropDownBackground : _colors[(int)PaletteColorIndex.ToolStripDropDownBackground]; @@ -651,7 +651,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the ToolStrip background. /// public override Color ToolStripGradientBegin => - _colors[(int)PaletteColorIndex.ToolStripGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripGradientBegin : _colors[(int)PaletteColorIndex.ToolStripGradientBegin]; @@ -662,7 +662,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the ToolStrip background. /// public override Color ToolStripGradientEnd => - _colors[(int)PaletteColorIndex.ToolStripGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripGradientEnd : _colors[(int)PaletteColorIndex.ToolStripGradientEnd]; @@ -673,7 +673,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the middle color of the gradient used in the ToolStrip background. /// public override Color ToolStripGradientMiddle => - _colors[(int)PaletteColorIndex.ToolStripGradientMiddle] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripGradientMiddle] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripGradientMiddle : _colors[(int)PaletteColorIndex.ToolStripGradientMiddle]; @@ -684,7 +684,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the starting color of the gradient used in the ToolStripPanel. /// public override Color ToolStripPanelGradientBegin => - _colors[(int)PaletteColorIndex.ToolStripPanelGradientBegin] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripPanelGradientBegin] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripPanelGradientBegin : _colors[(int)PaletteColorIndex.ToolStripPanelGradientBegin]; @@ -695,7 +695,7 @@ public KryptonProfessionalCustomKCT(Color[] headerColors, /// Gets the end color of the gradient used in the ToolStripPanel. /// public override Color ToolStripPanelGradientEnd => - _colors[(int)PaletteColorIndex.ToolStripPanelGradientEnd] == Color.Empty + _colors[(int)PaletteColorIndex.ToolStripPanelGradientEnd] == GlobalStaticValues.EMPTY_COLOR ? base.ToolStripPanelGradientEnd : _colors[(int)PaletteColorIndex.ToolStripPanelGradientEnd]; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalKCT.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalKCT.cs index ad59ab101..f1089b9cf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalKCT.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonProfessionalKCT.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,7 +31,7 @@ public KryptonProfessionalKCT([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - _colors = colors; + _colors = colors!; UseSystemColors = useSystemColors; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2007ColorTable.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2007ColorTable.cs index 9c2b07953..21c515fb1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2007ColorTable.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2007ColorTable.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -52,7 +52,7 @@ public KryptonVisualStudio2010With2007ColorTable([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - Colors = colors; + Colors = colors!; UseRoundedEdges = roundedEdges; } #endregion @@ -67,7 +67,7 @@ public KryptonVisualStudio2010With2007ColorTable([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -611,15 +611,10 @@ public KryptonVisualStudio2010With2007ColorTable([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2010ColorTable.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2010ColorTable.cs index ecf8f4ad0..36cfb75c9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2010ColorTable.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2010ColorTable.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -52,7 +52,7 @@ public KryptonVisualStudio2010With2010ColorTable([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - Colors = colors; + Colors = colors!; UseRoundedEdges = roundedEdges; } #endregion @@ -67,7 +67,7 @@ public KryptonVisualStudio2010With2010ColorTable([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges { get; } @@ -612,15 +612,10 @@ public KryptonVisualStudio2010With2010ColorTable([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2013ColorTable.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2013ColorTable.cs index 318adf379..6e4d3c99c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2013ColorTable.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010With2013ColorTable.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -58,7 +58,7 @@ public KryptonVisualStudio2010With2013ColorTable([DisallowNull] Color[] colors, : base(palette) { Debug.Assert(colors != null); - _colors = colors; + _colors = colors!; _roundedEdges = roundedEdges; } #endregion @@ -73,7 +73,7 @@ public KryptonVisualStudio2010With2013ColorTable([DisallowNull] Color[] colors, #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -618,15 +618,10 @@ public KryptonVisualStudio2010With2013ColorTable([DisallowNull] Color[] colors, #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010WithMicrosoft365ColorTable.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010WithMicrosoft365ColorTable.cs index 5e25d258c..a1a0a9559 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010WithMicrosoft365ColorTable.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/KryptonVisualStudio2010WithMicrosoft365ColorTable.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -59,7 +59,7 @@ public KryptonVisualStudio2010WithMicrosoft365ColorTable([DisallowNull] Color[] : base(palette) { Debug.Assert(colors != null); - _colors = colors; + _colors = colors!; _roundedEdges = roundedEdges; } #endregion @@ -74,7 +74,7 @@ public KryptonVisualStudio2010WithMicrosoft365ColorTable([DisallowNull] Color[] #region RoundedEdges /// - /// Gets a value indicating if rounded egdes are required. + /// Gets a value indicating if rounded edges are required. /// public override InheritBool UseRoundedEdges => _roundedEdges; @@ -619,15 +619,10 @@ public KryptonVisualStudio2010WithMicrosoft365ColorTable([DisallowNull] Color[] #region Implementation private static void DefineFonts() { - // Release existing resources - _menuToolFont?.Dispose(); - - _statusFont?.Dispose(); - // Create new font using system information // TODO: Should be using base font - _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont.SizeInPoints, FontStyle.Regular); - _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont.SizeInPoints, FontStyle.Regular); + _menuToolFont = new Font(@"Segoe UI", SystemFonts.MenuFont!.SizeInPoints!, FontStyle.Regular); + _statusFont = new Font(@"Segoe UI", SystemFonts.StatusFont!.SizeInPoints!, FontStyle.Regular); } private static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) => diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/LinkLabelBehaviorInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/LinkLabelBehaviorInherit.cs index b3dab974a..0ea88772c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/LinkLabelBehaviorInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/LinkLabelBehaviorInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ public LinkLabelBehaviorInherit([DisallowNull] IPaletteContent inherit, KryptonLinkBehavior linkBehavior) { Debug.Assert(inherit != null); - _inherit = inherit; + _inherit = inherit!; LinkBehavior = linkBehavior; } #endregion @@ -97,10 +97,10 @@ public LinkLabelBehaviorInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteState state) + public override Font? GetContentShortTextFont(PaletteState state) { // Get the actual base font from inheritance chain - Font ret = _inherit.GetContentShortTextFont(state); + Font? ret = _inherit.GetContentShortTextFont(state); // We never try and modify an empty font if (ret != null) @@ -116,10 +116,10 @@ public override Font GetContentShortTextFont(PaletteState state) /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteState state) + public override Font? GetContentShortTextNewFont(PaletteState state) { // Get the actual base font from inheritance chain - Font ret = _inherit.GetContentShortTextNewFont(state); + Font? ret = _inherit.GetContentShortTextNewFont(state); // We never try and modify an empty font if (ret != null) @@ -240,14 +240,14 @@ public override Font GetContentShortTextNewFont(PaletteState state) /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteState state) => _inherit.GetContentLongTextFont(state); + public override Font? GetContentLongTextFont(PaletteState state) => _inherit.GetContentLongTextFont(state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteState state) => _inherit.GetContentLongTextNewFont(state); + public override Font? GetContentLongTextNewFont(PaletteState state) => _inherit.GetContentLongTextNewFont(state); /// /// Gets the rendering hint for the long text. @@ -377,7 +377,7 @@ public override Font GetContentShortTextNewFont(PaletteState state) #endregion #region Private - private Font GetContentFont(PaletteState state, Font font) + private Font? GetContentFont(PaletteState state, Font? font) { // We never do anything for the override states if (!CommonHelper.IsOverrideState(state)) @@ -402,7 +402,7 @@ private Font GetContentFont(PaletteState state, Font font) // Do we need to add an underline to the font? if (underline) { - font = new Font(font, FontStyle.Underline | font.Style); + font = new Font(font!, FontStyle.Underline | font!.Style); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBackInheritNode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBackInheritNode.cs index 0180b1561..33fceea2e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBackInheritNode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBackInheritNode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,7 @@ public PaletteBackInheritNode([DisallowNull] IPaletteBack inherit) Debug.Assert(inherit != null); // Remember inheritance border - _inherit = inherit; + _inherit = inherit!; } #endregion @@ -50,7 +50,7 @@ public PaletteBackInheritNode([DisallowNull] IPaletteBack inherit) /// /// Palette value should be applicable to this state. /// InheritBool value. - public override InheritBool GetBackDraw(PaletteState state) => (TreeNode != null) && (TreeNode.BackColor != Color.Empty) ? InheritBool.True : _inherit.GetBackDraw(state); + public override InheritBool GetBackDraw(PaletteState state) => (TreeNode != null) && (TreeNode.BackColor != GlobalStaticValues.EMPTY_COLOR) ? InheritBool.True : _inherit.GetBackDraw(state); /// /// Gets the graphics drawing hint. @@ -64,14 +64,14 @@ public PaletteBackInheritNode([DisallowNull] IPaletteBack inherit) /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetBackColor1(PaletteState state) => (TreeNode != null) && (TreeNode.BackColor != Color.Empty) ? TreeNode.BackColor : _inherit.GetBackColor1(state); + public override Color GetBackColor1(PaletteState state) => (TreeNode != null) && (TreeNode.BackColor != GlobalStaticValues.EMPTY_COLOR) ? TreeNode.BackColor : _inherit.GetBackColor1(state); /// /// Gets the second back color. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetBackColor2(PaletteState state) => (TreeNode != null) && (TreeNode.BackColor != Color.Empty) ? TreeNode.BackColor : _inherit.GetBackColor2(state); + public override Color GetBackColor2(PaletteState state) => (TreeNode != null) && (TreeNode.BackColor != GlobalStaticValues.EMPTY_COLOR) ? TreeNode.BackColor : _inherit.GetBackColor2(state); /// /// Gets the color drawing style. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdge.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdge.cs index 70b62e935..6ff4933ed 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdge.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ public PaletteBorderEdge([DisallowNull] PaletteBorderEdgeRedirect inherit, Debug.Assert(inherit != null); // Remember inheritance - _inherit = inherit; + _inherit = inherit!; // Default properties _borderWidth = -1; @@ -47,6 +47,7 @@ public PaletteBorderEdge([DisallowNull] PaletteBorderEdgeRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_borderWidth == -1) && base.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdgeRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdgeRedirect.cs index 9af3443c0..910a81c0b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdgeRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBorderEdgeRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -149,6 +149,7 @@ public PaletteBorderEdgeRedirect(IPaletteBorder inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_borderWidth == -1) && base.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbDoubleState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbDoubleState.cs index 53bf30e6d..a4ffa41cc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbDoubleState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbDoubleState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PaletteBreadCrumbDoubleState : PaletteDouble /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteBreadCrumbDoubleState(PaletteBreadCrumbRedirect? redirect, + public PaletteBreadCrumbDoubleState(PaletteBreadCrumbRedirect redirect, NeedPaintHandler needPaint) : base(redirect, needPaint) => BreadCrumb = new PaletteTriple(redirect.BreadCrumb, needPaint); @@ -35,6 +35,7 @@ public PaletteBreadCrumbDoubleState(PaletteBreadCrumbRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && BreadCrumb.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbRedirect.cs index 3251ff20c..ea05d70e9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PaletteBreadCrumbRedirect : PaletteDoubleMetricRedirect /// /// inheritance redirection for bread crumb level. /// Delegate for notifying paint requests. - public PaletteBreadCrumbRedirect(PaletteRedirect? redirect, + public PaletteBreadCrumbRedirect(PaletteRedirect redirect, NeedPaintHandler needPaint) : base(redirect, PaletteBackStyle.PanelAlternate, PaletteBorderStyle.ControlClient) => BreadCrumb = new PaletteTripleRedirect(redirect, @@ -39,6 +39,7 @@ public PaletteBreadCrumbRedirect(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && BreadCrumb.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbState.cs index cf9125748..8e1aef6be 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteBreadCrumbState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PaletteBreadCrumbState : Storage /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteBreadCrumbState(PaletteBreadCrumbRedirect? redirect, + public PaletteBreadCrumbState(PaletteBreadCrumbRedirect redirect, NeedPaintHandler needPaint) => BreadCrumb = new PaletteTriple(redirect.BreadCrumb, needPaint); @@ -34,6 +34,7 @@ public PaletteBreadCrumbState(PaletteBreadCrumbRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => BreadCrumb.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteColorButtonStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteColorButtonStrings.cs index fc1f06da2..1bd309345 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteColorButtonStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteColorButtonStrings.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -47,11 +47,12 @@ public PaletteColorButtonStrings() /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => MoreColors.Equals(DEFAULT_MORE_COLORS) && - NoColor.Equals(DEFAULT_NO_COLOR) && - RecentColors.Equals(DEFAULT_RECENT_COLORS) && - StandardColors.Equals(DEFAULT_STANDARD_COLORS) && - ThemeColors.Equals(DEFAULT_THEME_COLORS); + NoColor.Equals(DEFAULT_NO_COLOR) && + RecentColors.Equals(DEFAULT_RECENT_COLORS) && + StandardColors.Equals(DEFAULT_STANDARD_COLORS) && + ThemeColors.Equals(DEFAULT_THEME_COLORS); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustComboStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustComboStates.cs index 89f8e3dec..2e2f1f710 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustComboStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustComboStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,7 @@ public PaletteComboBoxJustComboStates([DisallowNull] IPaletteTriple inheritCombo NeedPaint = needPaint; // Create storage that maps onto the inherit instances - ComboBox = new PaletteInputControlTripleStates(inheritComboBox, needPaint); + ComboBox = new PaletteInputControlTripleStates(inheritComboBox!, needPaint); } #endregion @@ -41,6 +41,7 @@ public PaletteComboBoxJustComboStates([DisallowNull] IPaletteTriple inheritCombo /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ComboBox.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustItemStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustItemStates.cs index 9f8daef2d..6bc76516d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustItemStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxJustItemStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,7 @@ public PaletteComboBoxJustItemStates([DisallowNull] IPaletteTriple inheritItem, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Item = new PaletteTriple(inheritItem, needPaint); + Item = new PaletteTriple(inheritItem!, needPaint); } #endregion @@ -41,6 +41,7 @@ public PaletteComboBoxJustItemStates([DisallowNull] IPaletteTriple inheritItem, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Item.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxRedirect.cs index fe23d267c..d557825a4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class PaletteComboBoxRedirect : Storage /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteComboBoxRedirect([DisallowNull] PaletteRedirect? redirect, + public PaletteComboBoxRedirect([DisallowNull] PaletteRedirect redirect, NeedPaintHandler needPaint) { Debug.Assert(redirect != null); @@ -37,13 +37,13 @@ public PaletteComboBoxRedirect([DisallowNull] PaletteRedirect? redirect, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Item = new PaletteTripleRedirect(redirect, + Item = new PaletteTripleRedirect(redirect!, PaletteBackStyle.ButtonListItem, PaletteBorderStyle.ButtonListItem, PaletteContentStyle.ButtonListItem, NeedPaint); - ComboBox = new PaletteInputControlTripleRedirect(redirect, + ComboBox = new PaletteInputControlTripleRedirect(redirect!, PaletteBackStyle.InputControlStandalone, PaletteBorderStyle.InputControlStandalone, PaletteContentStyle.InputControlStandalone, @@ -56,7 +56,7 @@ public PaletteComboBoxRedirect([DisallowNull] PaletteRedirect? redirect, } }; - _dropBackRedirect = new PaletteDoubleRedirect(redirect, + _dropBackRedirect = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.ControlClient, PaletteBorderStyle.ButtonStandalone, NeedPaint); @@ -68,9 +68,10 @@ public PaletteComboBoxRedirect([DisallowNull] PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ComboBox.IsDefault && - Item.IsDefault && - DropBack.IsDefault; + Item.IsDefault && + DropBack.IsDefault; #endregion @@ -79,7 +80,7 @@ public PaletteComboBoxRedirect([DisallowNull] PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { Item.SetRedirector(redirect); ComboBox.SetRedirector(redirect); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxStates.cs index 46cd903e1..3d3a4ab21 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteComboBoxStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,8 +35,8 @@ public PaletteComboBoxStates([DisallowNull] IPaletteTriple inheritComboBox, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Item = new PaletteTriple(inheritItem, needPaint); - ComboBox = new PaletteInputControlTripleStates(inheritComboBox, needPaint); + Item = new PaletteTriple(inheritItem!, needPaint); + ComboBox = new PaletteInputControlTripleStates(inheritComboBox!, needPaint); } #endregion @@ -45,8 +45,9 @@ public PaletteComboBoxStates([DisallowNull] IPaletteTriple inheritComboBox, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ComboBox.IsDefault && - Item.IsDefault; + Item.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContentInheritNode.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContentInheritNode.cs index 020fd2b6b..96f0ed31e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContentInheritNode.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContentInheritNode.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -96,14 +96,14 @@ public PaletteContentInheritNode(IPaletteContent inherit) => /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteState state) => TreeNode?.NodeFont ?? _inherit.GetContentShortTextFont(state); + public override Font? GetContentShortTextFont(PaletteState state) => TreeNode?.NodeFont ?? _inherit.GetContentShortTextFont(state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteState state) => TreeNode?.NodeFont ?? _inherit.GetContentShortTextNewFont(state); + public override Font? GetContentShortTextNewFont(PaletteState state) => TreeNode?.NodeFont ?? _inherit.GetContentShortTextNewFont(state); /// /// Gets the rendering hint for the short text. @@ -159,14 +159,14 @@ public PaletteContentInheritNode(IPaletteContent inherit) => /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentShortTextColor1(PaletteState state) => (TreeNode != null) && (TreeNode.ForeColor != Color.Empty) ? TreeNode.ForeColor : _inherit.GetContentShortTextColor1(state); + public override Color GetContentShortTextColor1(PaletteState state) => (TreeNode != null) && (TreeNode.ForeColor != GlobalStaticValues.EMPTY_COLOR) ? TreeNode.ForeColor : _inherit.GetContentShortTextColor1(state); /// /// Gets the second back color for the short text. /// /// Palette value should be applicable to this state. /// Color value. - public override Color GetContentShortTextColor2(PaletteState state) => (TreeNode != null) && (TreeNode.ForeColor != Color.Empty) ? TreeNode.ForeColor : _inherit.GetContentShortTextColor2(state); + public override Color GetContentShortTextColor2(PaletteState state) => (TreeNode != null) && (TreeNode.ForeColor != GlobalStaticValues.EMPTY_COLOR) ? TreeNode.ForeColor : _inherit.GetContentShortTextColor2(state); /// /// Gets the color drawing style for the short text. @@ -215,7 +215,7 @@ public PaletteContentInheritNode(IPaletteContent inherit) => /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteState state) => + public override Font? GetContentLongTextFont(PaletteState state) => (TreeNode is KryptonTreeNode { LongNodeFont: not null } kryptonNode) ? kryptonNode.LongNodeFont : _inherit.GetContentLongTextFont(state); @@ -225,7 +225,7 @@ public override Font GetContentLongTextFont(PaletteState state) => /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteState state) => _inherit.GetContentLongTextNewFont(state); + public override Font? GetContentLongTextNewFont(PaletteState state) => _inherit.GetContentLongTextNewFont(state); /// /// Gets the rendering hint for the long text. @@ -282,7 +282,7 @@ public override Font GetContentLongTextFont(PaletteState state) => /// Palette value should be applicable to this state. /// Color value. public override Color GetContentLongTextColor1(PaletteState state) => - (TreeNode is KryptonTreeNode kryptonNode) && (kryptonNode.LongForeColor != Color.Empty) + (TreeNode is KryptonTreeNode kryptonNode) && (kryptonNode.LongForeColor != GlobalStaticValues.EMPTY_COLOR) ? kryptonNode.LongForeColor : _inherit.GetContentLongTextColor1(state); @@ -292,7 +292,7 @@ public override Color GetContentLongTextColor1(PaletteState state) => /// Palette value should be applicable to this state. /// Color value. public override Color GetContentLongTextColor2(PaletteState state) => - (TreeNode is KryptonTreeNode kryptonNode) && (kryptonNode.LongForeColor != Color.Empty) + (TreeNode is KryptonTreeNode kryptonNode) && (kryptonNode.LongForeColor != GlobalStaticValues.EMPTY_COLOR) ? kryptonNode.LongForeColor : _inherit.GetContentLongTextColor2(state); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemState.cs index d9be9ba41..f0b857e22 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -52,10 +52,15 @@ public PaletteContextMenuItemState(PaletteContextMenuItemStateRedirect redirect) public PaletteContextMenuItemState(PaletteDoubleMetricRedirect? redirectItemHighlight, PaletteTripleJustImageRedirect redirectItemImage, PaletteContentInheritRedirect redirectItemShortcutText, - PaletteDoubleRedirect? redirectItemSplit, + PaletteDoubleRedirect redirectItemSplit, PaletteContentInheritRedirect redirectItemTextStandard, PaletteContentInheritRedirect redirectItemTextAlternate) { + if (redirectItemHighlight is null) + { + throw new ArgumentNullException(nameof(redirectItemHighlight)); + } + ItemHighlight = new PaletteDoubleMetric(redirectItemHighlight); ItemImage = new PaletteTripleJustImage(redirectItemImage); ItemShortcutText = new PaletteContentJustShortText(redirectItemShortcutText); @@ -70,12 +75,13 @@ public PaletteContextMenuItemState(PaletteDoubleMetricRedirect? redirectItemHigh /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ItemHighlight.IsDefault && - ItemImage.IsDefault && - ItemShortcutText.IsDefault && - ItemSplit.IsDefault && - ItemTextStandard.IsDefault && - ItemTextAlternate.IsDefault; + ItemImage.IsDefault && + ItemShortcutText.IsDefault && + ItemSplit.IsDefault && + ItemTextStandard.IsDefault && + ItemTextAlternate.IsDefault; #endregion @@ -115,7 +121,7 @@ public void PopulateFromBase(KryptonPaletteCommon common, [Category(@"Visuals")] [Description(@"Overrides for defining item highlight appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDoubleMetric? ItemHighlight { get; } + public PaletteDoubleMetric ItemHighlight { get; } private bool ShouldSerializeItemHighlight() => !ItemHighlight.IsDefault; @@ -157,7 +163,7 @@ public void PopulateFromBase(KryptonPaletteCommon common, [Category(@"Visuals")] [Description(@"Overrides for defining item split appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDouble? ItemSplit { get; } + public PaletteDouble ItemSplit { get; } private bool ShouldSerializeItemSplit() => !ItemSplit.IsDefault; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateChecked.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateChecked.cs index de939826a..7df485571 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateChecked.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateChecked.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -65,6 +65,7 @@ public void PopulateFromBase(KryptonPaletteCommon common, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ItemImage.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateHighlight.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateHighlight.cs index 35d07351a..c36cdf702 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateHighlight.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateHighlight.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,8 +42,13 @@ public PaletteContextMenuItemStateHighlight(PaletteContextMenuItemStateRedirect /// Redirector for the ItemHighlight. /// Redirector for the ItemSplit. public PaletteContextMenuItemStateHighlight(PaletteDoubleMetricRedirect? redirectItemHighlight, - PaletteDoubleRedirect? redirectItemSplit) + PaletteDoubleRedirect redirectItemSplit) { + if (redirectItemHighlight is null) + { + throw new ArgumentNullException(nameof(redirectItemHighlight)); + } + ItemHighlight = new PaletteDoubleMetric(redirectItemHighlight); ItemSplit = new PaletteDouble(redirectItemSplit); } @@ -54,8 +59,9 @@ public PaletteContextMenuItemStateHighlight(PaletteDoubleMetricRedirect? redirec /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ItemHighlight.IsDefault && - ItemSplit.IsDefault; + ItemSplit.IsDefault; #endregion @@ -99,7 +105,7 @@ public void PopulateFromBase(KryptonPaletteCommon common, [Category(@"Visuals")] [Description(@"Overrides for defining item split appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDouble? ItemSplit { get; } + public PaletteDouble ItemSplit { get; } private bool ShouldSerializeItemSplit() => !ItemSplit.IsDefault; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateRedirect.cs index 1367d759d..70fc3b0b4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuItemStateRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,12 +18,12 @@ namespace Krypton.Toolkit public class PaletteContextMenuItemStateRedirect : Storage { #region Instance Fields - private readonly PaletteRedirectDouble? _itemHighlight; - private readonly PaletteRedirectTriple? _itemImage; - private readonly PaletteRedirectContent? _itemShortcutText; - private readonly PaletteRedirectDouble? _itemSplit; - private readonly PaletteRedirectContent? _itemStandard; - private readonly PaletteRedirectContent? _itemAlternate; + private readonly PaletteRedirectDouble _itemHighlight; + private readonly PaletteRedirectTriple _itemImage; + private readonly PaletteRedirectContent _itemShortcutText; + private readonly PaletteRedirectDouble _itemSplit; + private readonly PaletteRedirectContent _itemStandard; + private readonly PaletteRedirectContent _itemAlternate; #endregion @@ -53,6 +53,8 @@ public PaletteContextMenuItemStateRedirect() /// /// Gets a value indicating if all values are default. /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => true; #endregion @@ -64,7 +66,7 @@ public PaletteContextMenuItemStateRedirect() /// Provider for acquiring context menu information. public void SetRedirector(IContextMenuProvider provider) { - _itemHighlight.Target = provider.ProviderStateCommon.ItemHighlight.GetRedirector(); + _itemHighlight.Target = provider.ProviderStateCommon.ItemHighlight?.GetRedirector(); _itemImage.Target = provider.ProviderStateCommon.ItemImage.GetRedirector(); _itemShortcutText.Target = provider.ProviderStateCommon.ItemShortcutTextRedirect.GetRedirector(); _itemSplit.Target = provider.ProviderStateCommon.ItemSplit.GetRedirector(); @@ -108,7 +110,7 @@ public void SetRedirector(IContextMenuProvider provider) /// /// Gets access to the item split appearance entries. /// - public PaletteDoubleRedirect? ItemSplit { get; } + public PaletteDoubleRedirect ItemSplit { get; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuRedirect.cs index 3bd2d879e..9ac0e38a7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteContextMenuRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,20 +29,20 @@ public PaletteContextMenuRedirect([DisallowNull] PaletteRedirect redirect, Debug.Assert(redirect != null); // Create the palette storage - ControlInner = new PaletteDoubleRedirect(redirect, PaletteBackStyle.ContextMenuInner, PaletteBorderStyle.ContextMenuInner, needPaint); - ControlOuter = new PaletteDoubleRedirect(redirect, PaletteBackStyle.ContextMenuOuter, PaletteBorderStyle.ContextMenuOuter, needPaint); - Heading = new PaletteTripleRedirect(redirect, PaletteBackStyle.ContextMenuHeading, PaletteBorderStyle.ContextMenuHeading, PaletteContentStyle.ContextMenuHeading, needPaint); - ItemHighlight = new PaletteDoubleMetricRedirect(redirect, PaletteBackStyle.ContextMenuItemHighlight, PaletteBorderStyle.ContextMenuItemHighlight, needPaint); - ItemImage = new PaletteTripleJustImageRedirect(redirect, PaletteBackStyle.ContextMenuItemImage, PaletteBorderStyle.ContextMenuItemImage, PaletteContentStyle.ContextMenuItemImage, needPaint); - ItemImageColumn = new PaletteDoubleRedirect(redirect, PaletteBackStyle.ContextMenuItemImageColumn, PaletteBorderStyle.ContextMenuItemImageColumn, needPaint); - ItemShortcutTextRedirect = new PaletteContentInheritRedirect(redirect, PaletteContentStyle.ContextMenuItemShortcutText); + ControlInner = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.ContextMenuInner, PaletteBorderStyle.ContextMenuInner, needPaint); + ControlOuter = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.ContextMenuOuter, PaletteBorderStyle.ContextMenuOuter, needPaint); + Heading = new PaletteTripleRedirect(redirect!, PaletteBackStyle.ContextMenuHeading, PaletteBorderStyle.ContextMenuHeading, PaletteContentStyle.ContextMenuHeading, needPaint); + ItemHighlight = new PaletteDoubleMetricRedirect(redirect!, PaletteBackStyle.ContextMenuItemHighlight, PaletteBorderStyle.ContextMenuItemHighlight, needPaint); + ItemImage = new PaletteTripleJustImageRedirect(redirect!, PaletteBackStyle.ContextMenuItemImage, PaletteBorderStyle.ContextMenuItemImage, PaletteContentStyle.ContextMenuItemImage, needPaint); + ItemImageColumn = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.ContextMenuItemImageColumn, PaletteBorderStyle.ContextMenuItemImageColumn, needPaint); + ItemShortcutTextRedirect = new PaletteContentInheritRedirect(redirect!, PaletteContentStyle.ContextMenuItemShortcutText); ItemShortcutText = new PaletteContentJustShortText(ItemShortcutTextRedirect, needPaint); - ItemSplit = new PaletteDoubleRedirect(redirect, PaletteBackStyle.ContextMenuItemSplit, PaletteBorderStyle.ContextMenuItemSplit, needPaint); - ItemTextAlternateRedirect = new PaletteContentInheritRedirect(redirect, PaletteContentStyle.ContextMenuItemTextAlternate); + ItemSplit = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.ContextMenuItemSplit, PaletteBorderStyle.ContextMenuItemSplit, needPaint); + ItemTextAlternateRedirect = new PaletteContentInheritRedirect(redirect!, PaletteContentStyle.ContextMenuItemTextAlternate); ItemTextAlternate = new PaletteContentJustText(ItemTextAlternateRedirect, needPaint); - ItemTextStandardRedirect = new PaletteContentInheritRedirect(redirect, PaletteContentStyle.ContextMenuItemTextStandard); + ItemTextStandardRedirect = new PaletteContentInheritRedirect(redirect!, PaletteContentStyle.ContextMenuItemTextStandard); ItemTextStandard = new PaletteContentJustText(ItemTextStandardRedirect, needPaint); - Separator = new PaletteDoubleRedirect(redirect, PaletteBackStyle.ContextMenuSeparator, PaletteBorderStyle.ContextMenuSeparator, needPaint); + Separator = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.ContextMenuSeparator, PaletteBorderStyle.ContextMenuSeparator, needPaint); } #endregion @@ -51,18 +51,19 @@ public PaletteContextMenuRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ControlInner.IsDefault && - ControlOuter.IsDefault && - Heading.IsDefault && - ItemHighlight.IsDefault && - ItemImage.IsDefault && - ItemImageColumn.IsDefault && - ItemShortcutText.IsDefault && - ItemSplit.IsDefault && - ItemTextAlternate.IsDefault && - ItemTextStandard.IsDefault && - Separator.IsDefault && - HasShadow; + ControlOuter.IsDefault && + Heading.IsDefault && + ItemHighlight!.IsDefault && + ItemImage.IsDefault && + ItemImageColumn.IsDefault && + ItemShortcutText.IsDefault && + ItemSplit.IsDefault && + ItemTextAlternate.IsDefault && + ItemTextStandard.IsDefault && + Separator.IsDefault && + HasShadow; #endregion @@ -99,12 +100,12 @@ public void PopulateFromBase(KryptonPaletteCommon common, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { ControlInner.SetRedirector(redirect); ControlOuter.SetRedirector(redirect); Heading.SetRedirector(redirect); - ItemHighlight.SetRedirector(redirect); + ItemHighlight?.SetRedirector(redirect); ItemImage.SetRedirector(redirect); ItemImageColumn.SetRedirector(redirect); ItemShortcutTextRedirect.SetRedirector(redirect); @@ -180,7 +181,7 @@ public void SetRedirector(PaletteRedirect? redirect) [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteDoubleMetricRedirect? ItemHighlight { get; } - private bool ShouldSerializeItemHighlight() => !ItemHighlight.IsDefault; + private bool ShouldSerializeItemHighlight() => !ItemHighlight!.IsDefault; #endregion @@ -205,7 +206,7 @@ public void SetRedirector(PaletteRedirect? redirect) [Category(@"Visuals")] [Description(@"Overrides for defining item image column appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDoubleRedirect? ItemImageColumn { get; } + public PaletteDoubleRedirect ItemImageColumn { get; } private bool ShouldSerializeItemImageColumn() => !ItemImageColumn.IsDefault; @@ -231,7 +232,7 @@ public void SetRedirector(PaletteRedirect? redirect) [Category(@"Visuals")] [Description(@"Overrides for defining item split appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDoubleRedirect? ItemSplit { get; } + public PaletteDoubleRedirect ItemSplit { get; } private bool ShouldSerializeItemSplit() => !ItemSplit.IsDefault; @@ -271,7 +272,7 @@ public void SetRedirector(PaletteRedirect? redirect) [Category(@"Visuals")] [Description(@"Overrides for defining separator items appearance.")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] - public PaletteDoubleRedirect? Separator { get; } + public PaletteDoubleRedirect Separator { get; } private bool ShouldSerializeSeparator() => !Separator.IsDefault; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteCueHintText.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteCueHintText.cs index 5684bf2a4..ad01bf8ae 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteCueHintText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteCueHintText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public class PaletteCueHintText : PaletteInputControlContentStates /// /// Initialize a new instance of the PaletteCueHintText class. /// - public PaletteCueHintText(PaletteRedirect? redirect, + public PaletteCueHintText(PaletteRedirect redirect, NeedPaintHandler needPaint) : base(new PaletteContentInheritRedirect(redirect, PaletteContentStyle.InputControlStandalone), needPaint) { @@ -82,10 +82,12 @@ public virtual PaletteTextHint Hint #endregion /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault - && string.IsNullOrWhiteSpace(CueHintText) - && (_shortTextV == PaletteRelativeAlign.Center) - && !ShouldSerializeHint(); + && string.IsNullOrWhiteSpace(CueHintText) + && (_shortTextV == PaletteRelativeAlign.Center) + && !ShouldSerializeHint(); /// /// Gets the actual content draw value. @@ -106,7 +108,7 @@ public override Font GetContentShortTextNewFont(PaletteState state) return new Font(Font, Font.Style); } var font = Inherit.GetContentShortTextFont(state); - return new Font(font, FontStyle.Italic); + return new Font(font!, FontStyle.Italic); } /// @@ -119,7 +121,7 @@ public override Font GetContentShortTextNewFont(PaletteState state) internal void PerformPaint(VisualControlBase textBox, Graphics? g, PI.RECT rect, SolidBrush backBrush) { using var old = new GraphicsHint(g, PaletteGraphicsHint.HighQuality); - using var old1 = new GraphicsTextHint(g, CommonHelper.PaletteTextHintToRenderingHint(_contentTextHint)); + using var old1 = new GraphicsTextHint(g!, CommonHelper.PaletteTextHintToRenderingHint(_contentTextHint)); // Define the string formatting requirements var stringFormat = new StringFormat { @@ -152,7 +154,7 @@ internal void PerformPaint(VisualControlBase textBox, Graphics? g, PI.RECT rect, Rectangle layoutRectangle = Rectangle.FromLTRB(rect.left, rect.top, rect.right, rect.bottom); // Draw entire client area in the background color - g.FillRectangle(backBrush, layoutRectangle); + g?.FillRectangle(backBrush, layoutRectangle); var padding = GetContentPadding(PaletteState.Normal); if (!padding.Equals(CommonHelper.InheritPadding)) @@ -163,10 +165,10 @@ internal void PerformPaint(VisualControlBase textBox, Graphics? g, PI.RECT rect, layoutRectangle.Height -= padding.Top + padding.Bottom; } - using Font font = GetContentShortTextNewFont(PaletteState.Normal); + using var font = GetContentShortTextNewFont(PaletteState.Normal); using var foreBrush = new SolidBrush(GetContentShortTextColor1(PaletteState.Normal)); var drawText = string.IsNullOrEmpty(CueHintText) ? textBox.Text : CueHintText; - g.DrawString(drawText, font, foreBrush, layoutRectangle, stringFormat); + g?.DrawString(drawText, font, foreBrush, layoutRectangle, stringFormat); } #region TextV diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewAll.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewAll.cs index 8139ba78f..1c34f52ea 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewAll.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewAll.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,13 +28,13 @@ public class PaletteDataGridViewAll : PaletteDataGridViewCells /// Source for inheriting values. /// Delegate for notifying paint requests. public PaletteDataGridViewAll([DisallowNull] PaletteDataGridViewRedirect inherit, - NeedPaintHandler needPaint) - : base(inherit, needPaint) + NeedPaintHandler? needPaint) + : base(inherit, needPaint!) { Debug.Assert(inherit != null); // Create storage that maps onto the inherit instances - _background = new PaletteDouble(inherit.BackgroundDouble, needPaint); + _background = new PaletteDouble(inherit!.BackgroundDouble, needPaint!); } #endregion @@ -43,6 +43,7 @@ public PaletteDataGridViewAll([DisallowNull] PaletteDataGridViewRedirect inherit /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Background.IsDefault && base.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewBackInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewBackInherit.cs index 75bdd3f98..6b242d496 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewBackInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewBackInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,8 +34,8 @@ public void SetInherit([DisallowNull] IPaletteBack inherit, Debug.Assert(inherit != null); Debug.Assert(cellStyle != null); - _inherit = inherit; - _cellStyle = cellStyle; + _inherit = inherit!; + _cellStyle = cellStyle!; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewCells.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewCells.cs index aafb9aab7..5ca85b09c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewCells.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewCells.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,7 +38,7 @@ public PaletteDataGridViewCells([DisallowNull] PaletteDataGridViewRedirect inher NeedPaint = needPaint; // Create storage that maps onto the inherit instances - _dataCell = new PaletteDataGridViewTripleStates(inherit.DataCell, needPaint); + _dataCell = new PaletteDataGridViewTripleStates(inherit!.DataCell, needPaint); _headerColumn = new PaletteDataGridViewTripleStates(inherit.HeaderColumn, needPaint); _headerRow = new PaletteDataGridViewTripleStates(inherit.HeaderRow, needPaint); } @@ -49,9 +49,10 @@ public PaletteDataGridViewCells([DisallowNull] PaletteDataGridViewRedirect inher /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => DataCell.IsDefault && - HeaderColumn.IsDefault && - HeaderRow.IsDefault; + HeaderColumn.IsDefault && + HeaderRow.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentCommon.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentCommon.cs index 0294af6a3..6ffe3493d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentCommon.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentCommon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -46,11 +46,12 @@ public PaletteDataGridViewContentCommon(IPaletteContent inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Padding.Equals(CommonHelper.InheritPadding) && - (Font == null) && - (TextH == PaletteRelativeAlign.Inherit) && - (TextV == PaletteRelativeAlign.Inherit); + Padding.Equals(CommonHelper.InheritPadding) && + (Font == null) && + (TextH == PaletteRelativeAlign.Inherit) && + (TextV == PaletteRelativeAlign.Inherit); #endregion @@ -98,7 +99,7 @@ public virtual Font? Font /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteState state) => _font ?? Inherit.GetContentShortTextFont(state); + public override Font? GetContentShortTextFont(PaletteState state) => _font ?? Inherit.GetContentShortTextFont(state); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentInherit.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentInherit.cs index e41aed353..213713828 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentInherit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentInherit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ internal class PaletteDataGridViewContentInherit : PaletteContentInherit { #region Instance Fields private IPaletteContent _inherit; - private DataGridViewCellStyle _cellStyle; + private DataGridViewCellStyle? _cellStyle; #endregion #region SetInherit @@ -34,8 +34,8 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, Debug.Assert(inherit != null); Debug.Assert(cellStyle != null); - _inherit = inherit; - _cellStyle = cellStyle; + _inherit = inherit!; + _cellStyle = cellStyle!; } #endregion @@ -94,14 +94,14 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteState state) => _cellStyle != null ? _cellStyle.Font : SystemFonts.DefaultFont; + public override Font? GetContentShortTextFont(PaletteState state) => _cellStyle != null ? _cellStyle.Font : SystemFonts.DefaultFont; /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextNewFont(PaletteState state) => _cellStyle != null ? _cellStyle.Font : SystemFonts.DefaultFont; + public override Font? GetContentShortTextNewFont(PaletteState state) => _cellStyle != null ? _cellStyle.Font : SystemFonts.DefaultFont; /// /// Gets the rendering hint for the short text. @@ -136,7 +136,7 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextH(PaletteState state) => _cellStyle.Alignment switch + public override PaletteRelativeAlign GetContentShortTextH(PaletteState state) => _cellStyle!.Alignment switch { DataGridViewContentAlignment.TopLeft or DataGridViewContentAlignment.MiddleLeft or DataGridViewContentAlignment.BottomLeft => PaletteRelativeAlign.Near, DataGridViewContentAlignment.TopCenter or DataGridViewContentAlignment.MiddleCenter or DataGridViewContentAlignment.BottomCenter => PaletteRelativeAlign.Center, @@ -149,7 +149,7 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentShortTextV(PaletteState state) => _cellStyle.Alignment switch + public override PaletteRelativeAlign GetContentShortTextV(PaletteState state) => _cellStyle!.Alignment switch { DataGridViewContentAlignment.TopCenter or DataGridViewContentAlignment.TopLeft or DataGridViewContentAlignment.TopRight => PaletteRelativeAlign.Near, DataGridViewContentAlignment.MiddleCenter or DataGridViewContentAlignment.MiddleLeft or DataGridViewContentAlignment.MiddleRight => PaletteRelativeAlign.Center, @@ -171,8 +171,8 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// Color value. public override Color GetContentShortTextColor1(PaletteState state) => state switch { - PaletteState.Normal => _cellStyle.ForeColor, - PaletteState.CheckedNormal => _cellStyle.SelectionForeColor, + PaletteState.Normal => _cellStyle!.ForeColor, + PaletteState.CheckedNormal => _cellStyle!.SelectionForeColor, _ => _inherit.GetContentShortTextColor1(state) }; @@ -230,14 +230,14 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteState state) => _cellStyle.Font; + public override Font? GetContentLongTextFont(PaletteState state) => _cellStyle!.Font; /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextNewFont(PaletteState state) => _cellStyle.Font; + public override Font? GetContentLongTextNewFont(PaletteState state) => _cellStyle!.Font; /// /// Gets the rendering hint for the long text. @@ -272,7 +272,7 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextH(PaletteState state) => _cellStyle.Alignment switch + public override PaletteRelativeAlign GetContentLongTextH(PaletteState state) => _cellStyle!.Alignment switch { DataGridViewContentAlignment.TopLeft or DataGridViewContentAlignment.MiddleLeft or DataGridViewContentAlignment.BottomLeft => PaletteRelativeAlign.Near, DataGridViewContentAlignment.TopCenter or DataGridViewContentAlignment.MiddleCenter or DataGridViewContentAlignment.BottomCenter => PaletteRelativeAlign.Center, @@ -285,7 +285,7 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public override PaletteRelativeAlign GetContentLongTextV(PaletteState state) => _cellStyle.Alignment switch + public override PaletteRelativeAlign GetContentLongTextV(PaletteState state) => _cellStyle!.Alignment switch { DataGridViewContentAlignment.TopLeft or DataGridViewContentAlignment.MiddleLeft or DataGridViewContentAlignment.BottomLeft => PaletteRelativeAlign.Near, DataGridViewContentAlignment.TopCenter or DataGridViewContentAlignment.MiddleCenter or DataGridViewContentAlignment.BottomCenter => PaletteRelativeAlign.Center, @@ -361,7 +361,7 @@ public void SetInherit([DisallowNull] IPaletteContent inherit, /// /// Palette value should be applicable to this state. /// Padding value. - public override Padding GetContentPadding(PaletteState state) => _cellStyle.Padding; + public override Padding GetContentPadding(PaletteState state) => _cellStyle!.Padding; /// /// Gets the padding between adjacent content items. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentStates.cs index 3ba128df8..9c7126b6f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewContentStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -47,7 +47,7 @@ public PaletteDataGridViewContentStates([DisallowNull] IPaletteContent inherit, Debug.Assert(inherit != null); // Remember inheritance - Inherit = inherit; + Inherit = inherit!; // Store the provided paint notification delegate NeedPaint = needPaint; @@ -56,8 +56,8 @@ public PaletteDataGridViewContentStates([DisallowNull] IPaletteContent inherit, _draw = InheritBool.Inherit; _hint = PaletteTextHint.Inherit; _trim = PaletteTextTrim.Inherit; - _color1 = Color.Empty; - _color2 = Color.Empty; + _color1 = GlobalStaticValues.EMPTY_COLOR; + _color2 = GlobalStaticValues.EMPTY_COLOR; _colorStyle = PaletteColorStyle.Inherit; _colorAlign = PaletteRectangleAlign.Inherit; _colorAngle = -1; @@ -82,19 +82,20 @@ public PaletteDataGridViewContentStates([DisallowNull] IPaletteContent inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Draw == InheritBool.Inherit) && - (Hint == PaletteTextHint.Inherit) && - (Trim == PaletteTextTrim.Inherit) && - (Color1 == Color.Empty) && - (Color2 == Color.Empty) && - (ColorStyle == PaletteColorStyle.Inherit) && - (ColorAlign == PaletteRectangleAlign.Inherit) && - (ColorAngle == -1) && - (Image == null) && - (ImageStyle == PaletteImageStyle.Inherit) && - (ImageAlign == PaletteRectangleAlign.Inherit) && - (MultiLine == InheritBool.Inherit) && - (MultiLineH == PaletteRelativeAlign.Inherit); + (Hint == PaletteTextHint.Inherit) && + (Trim == PaletteTextTrim.Inherit) && + (Color1 == GlobalStaticValues.EMPTY_COLOR) && + (Color2 == GlobalStaticValues.EMPTY_COLOR) && + (ColorStyle == PaletteColorStyle.Inherit) && + (ColorAlign == PaletteRectangleAlign.Inherit) && + (ColorAngle == -1) && + (Image == null) && + (ImageStyle == PaletteImageStyle.Inherit) && + (ImageAlign == PaletteRectangleAlign.Inherit) && + (MultiLine == InheritBool.Inherit) && + (MultiLineH == PaletteRelativeAlign.Inherit); #endregion @@ -213,14 +214,14 @@ public InheritBool Draw /// /// Palette value should be applicable to this state. /// Font value. - public virtual Font GetContentShortTextFont(PaletteState state) => Inherit.GetContentShortTextFont(state); + public virtual Font? GetContentShortTextFont(PaletteState state) => Inherit.GetContentShortTextFont(state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public virtual Font GetContentShortTextNewFont(PaletteState state) => Inherit.GetContentShortTextNewFont(state); + public virtual Font? GetContentShortTextNewFont(PaletteState state) => Inherit.GetContentShortTextNewFont(state); #endregion @@ -389,7 +390,7 @@ public virtual InheritBool MultiLine [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Main color for the text.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public virtual Color Color1 { @@ -411,7 +412,7 @@ public virtual Color Color1 /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentShortTextColor1(PaletteState state) => _color1 != Color.Empty ? _color1 : Inherit.GetContentShortTextColor1(state); + public Color GetContentShortTextColor1(PaletteState state) => _color1 != GlobalStaticValues.EMPTY_COLOR ? _color1 : Inherit.GetContentShortTextColor1(state); #endregion @@ -422,7 +423,7 @@ public virtual Color Color1 [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Secondary color for the text.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public virtual Color Color2 { @@ -443,7 +444,7 @@ public virtual Color Color2 /// /// Palette value should be applicable to this state. /// Color value. - public Color GetContentShortTextColor2(PaletteState state) => _color2 != Color.Empty ? _color2 : Inherit.GetContentShortTextColor2(state); + public Color GetContentShortTextColor2(PaletteState state) => _color2 != GlobalStaticValues.EMPTY_COLOR ? _color2 : Inherit.GetContentShortTextColor2(state); #endregion @@ -539,7 +540,8 @@ public virtual float ColorAngle /// /// Palette value should be applicable to this state. /// Angle used for color drawing. - public float GetContentShortTextColorAngle(PaletteState state) => _colorAngle != -1 ? _colorAngle : Inherit.GetContentShortTextColorAngle(state); + public float GetContentShortTextColorAngle(PaletteState state) => + _colorAngle != -1 ? _colorAngle : Inherit.GetContentShortTextColorAngle(state); #endregion @@ -645,14 +647,14 @@ public virtual PaletteRectangleAlign ImageAlign /// /// Font value. /// Palette value should be applicable to this state. - public Font GetContentLongTextFont(PaletteState state) => Inherit.GetContentLongTextFont(state); + public Font? GetContentLongTextFont(PaletteState state) => Inherit.GetContentLongTextFont(state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentLongTextNewFont(PaletteState state) => Inherit.GetContentLongTextNewFont(state); + public Font? GetContentLongTextNewFont(PaletteState state) => Inherit.GetContentLongTextNewFont(state); /// /// Gets the actual text rendering hint for long text. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewHeaders.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewHeaders.cs index dff629a64..2c22e0867 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewHeaders.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewHeaders.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,7 +37,7 @@ public PaletteDataGridViewHeaders([DisallowNull] PaletteDataGridViewRedirect inh NeedPaint = needPaint; // Create storage that maps onto the inherit instances - _headerColumn = new PaletteDataGridViewTripleStates(inherit.HeaderColumn, needPaint); + _headerColumn = new PaletteDataGridViewTripleStates(inherit!.HeaderColumn, needPaint); _headerRow = new PaletteDataGridViewTripleStates(inherit.HeaderRow, needPaint); } #endregion @@ -47,8 +47,9 @@ public PaletteDataGridViewHeaders([DisallowNull] PaletteDataGridViewRedirect inh /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => HeaderColumn.IsDefault && - HeaderRow.IsDefault; + HeaderRow.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewRedirect.cs index 00a8c5d57..975b90b3e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteDataGridViewRedirect : Storage { #region Instance Fields - private readonly PaletteDoubleRedirect? _background; + private readonly PaletteDoubleRedirect _background; private readonly PaletteDataGridViewTripleRedirect _dataCell; private readonly PaletteDataGridViewTripleRedirect _headerColumn; private readonly PaletteDataGridViewTripleRedirect _headerRow; @@ -31,7 +31,7 @@ public class PaletteDataGridViewRedirect : Storage /// Source for inheriting values. /// Delegate for notifying paint requests. public PaletteDataGridViewRedirect([DisallowNull] PaletteRedirect redirect, - NeedPaintHandler needPaint) + NeedPaintHandler? needPaint) { Debug.Assert(redirect != null); @@ -39,10 +39,10 @@ public PaletteDataGridViewRedirect([DisallowNull] PaletteRedirect redirect, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - _background = new PaletteDoubleRedirect(redirect, PaletteBackStyle.GridBackgroundList, PaletteBorderStyle.GridDataCellList, needPaint); - _dataCell = new PaletteDataGridViewTripleRedirect(redirect, PaletteBackStyle.GridDataCellList, PaletteBorderStyle.GridDataCellList, PaletteContentStyle.GridDataCellList, needPaint); - _headerColumn = new PaletteDataGridViewTripleRedirect(redirect, PaletteBackStyle.GridHeaderColumnList, PaletteBorderStyle.GridHeaderColumnList, PaletteContentStyle.GridHeaderColumnList, needPaint); - _headerRow = new PaletteDataGridViewTripleRedirect(redirect, PaletteBackStyle.GridHeaderRowList, PaletteBorderStyle.GridHeaderRowList, PaletteContentStyle.GridHeaderRowList, needPaint); + _background = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.GridBackgroundList, PaletteBorderStyle.GridDataCellList, needPaint!); + _dataCell = new PaletteDataGridViewTripleRedirect(redirect!, PaletteBackStyle.GridDataCellList, PaletteBorderStyle.GridDataCellList, PaletteContentStyle.GridDataCellList, needPaint!); + _headerColumn = new PaletteDataGridViewTripleRedirect(redirect!, PaletteBackStyle.GridHeaderColumnList, PaletteBorderStyle.GridHeaderColumnList, PaletteContentStyle.GridHeaderColumnList, needPaint!); + _headerRow = new PaletteDataGridViewTripleRedirect(redirect!, PaletteBackStyle.GridHeaderRowList, PaletteBorderStyle.GridHeaderRowList, PaletteContentStyle.GridHeaderRowList, needPaint!); } #endregion @@ -51,10 +51,11 @@ public PaletteDataGridViewRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Background.IsDefault && - DataCell.IsDefault && - HeaderColumn.IsDefault && - HeaderRow.IsDefault; + DataCell.IsDefault && + HeaderColumn.IsDefault && + HeaderRow.IsDefault; #endregion @@ -63,7 +64,7 @@ public PaletteDataGridViewRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) + public void SetRedirector(PaletteRedirect redirect) { _background.SetRedirector(redirect); _dataCell.SetRedirector(redirect); @@ -167,7 +168,7 @@ public void SetGridStyles(GridStyle headerColumn, private bool ShouldSerializeBackground() => !_background.IsDefault; - internal IPaletteDouble? BackgroundDouble => _background; + internal IPaletteDouble BackgroundDouble => _background; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleCommon.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleCommon.cs index 4ec86ca53..3fa59a9bd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleCommon.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleCommon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,9 +33,9 @@ public PaletteDataGridViewTripleCommon([DisallowNull] IPaletteTriple inherit, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Back = new PaletteBack(inherit.PaletteBack, needPaint); - Border = new PaletteBorder(inherit.PaletteBorder, needPaint); - Content = new PaletteDataGridViewContentCommon(inherit.PaletteContent, needPaint); + Back = new PaletteBack(inherit!.PaletteBack, needPaint); + Border = new PaletteBorder(inherit.PaletteBorder!, needPaint); + Content = new PaletteDataGridViewContentCommon(inherit.PaletteContent!, needPaint); } #endregion @@ -44,9 +44,10 @@ public PaletteDataGridViewTripleCommon([DisallowNull] IPaletteTriple inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -57,8 +58,8 @@ public PaletteDataGridViewTripleCommon([DisallowNull] IPaletteTriple inherit, public void SetInherit(IPaletteTriple inherit) { Back.SetInherit(inherit.PaletteBack); - Border.SetInherit(inherit.PaletteBorder); - Content.SetInherit(inherit.PaletteContent); + Border.SetInherit(inherit.PaletteBorder!); + Content.SetInherit(inherit.PaletteContent!); } #endregion @@ -115,7 +116,7 @@ public void PopulateFromBase(PaletteState state) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteBorder? PaletteBorder => Border; + public IPaletteBorder PaletteBorder => Border; #endregion @@ -137,7 +138,7 @@ public void PopulateFromBase(PaletteState state) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteContent? PaletteContent => Content; + public IPaletteContent PaletteContent => Content; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleRedirect.cs index 0048e0d1a..6dd41a180 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,11 +44,11 @@ public PaletteDataGridViewTripleRedirect([DisallowNull] PaletteRedirect redirect // Store the provided paint notification delegate NeedPaint = needPaint; - + // Store the inherit instances - _backInherit = new PaletteBackInheritRedirect(redirect, backStyle); - _borderInherit = new PaletteBorderInheritRedirect(redirect, borderStyle); - _contentInherit = new PaletteContentInheritRedirect(redirect, contentStyle); + _backInherit = new PaletteBackInheritRedirect(redirect!, backStyle); + _borderInherit = new PaletteBorderInheritRedirect(redirect!, borderStyle); + _contentInherit = new PaletteContentInheritRedirect(redirect!, contentStyle); // Create storage that maps onto the inherit instances Back = new PaletteBack(_backInherit, needPaint); @@ -62,9 +62,10 @@ public PaletteDataGridViewTripleRedirect([DisallowNull] PaletteRedirect redirect /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -73,7 +74,7 @@ public PaletteDataGridViewTripleRedirect([DisallowNull] PaletteRedirect redirect /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { _backInherit.SetRedirector(redirect); _borderInherit.SetRedirector(redirect); @@ -196,8 +197,9 @@ public void SetStyles(ButtonStyle buttonStyle) PaletteContentStyle.ButtonCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(buttonStyle.ToString()); break; } } @@ -256,8 +258,9 @@ public void SetStyles(HeaderStyle headerStyle) PaletteContentStyle.HeaderCustom3); break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(headerStyle.ToString()); break; } } @@ -327,7 +330,7 @@ public PaletteBackStyle BackStyle [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteBorder? PaletteBorder => Border; + public IPaletteBorder PaletteBorder => Border; /// /// Gets and sets the border palette style. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleStates.cs index 399ada854..57aa3fb6c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteDataGridViewTripleStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,9 +33,9 @@ public PaletteDataGridViewTripleStates([DisallowNull] IPaletteTriple inherit, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Back = new PaletteBack(inherit.PaletteBack, needPaint); - Border = new PaletteBorder(inherit.PaletteBorder, needPaint); - Content = new PaletteDataGridViewContentStates(inherit.PaletteContent, needPaint); + Back = new PaletteBack(inherit!.PaletteBack, needPaint); + Border = new PaletteBorder(inherit.PaletteBorder!, needPaint); + Content = new PaletteDataGridViewContentStates(inherit.PaletteContent!, needPaint); } #endregion @@ -44,9 +44,10 @@ public PaletteDataGridViewTripleStates([DisallowNull] IPaletteTriple inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -57,8 +58,8 @@ public PaletteDataGridViewTripleStates([DisallowNull] IPaletteTriple inherit, public void SetInherit(IPaletteTriple inherit) { Back.SetInherit(inherit.PaletteBack); - Border.SetInherit(inherit.PaletteBorder); - Content.SetInherit(inherit.PaletteContent); + Border.SetInherit(inherit.PaletteBorder!); + Content.SetInherit(inherit.PaletteContent!); } #endregion @@ -115,7 +116,7 @@ public void PopulateFromBase(PaletteState state) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteBorder? PaletteBorder => Border; + public IPaletteBorder PaletteBorder => Border; #endregion @@ -137,7 +138,7 @@ public void PopulateFromBase(PaletteState state) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteContent? PaletteContent => Content; + public IPaletteContent PaletteContent => Content; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteForm.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteForm.cs index 0dc8e4024..fe84fca99 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteForm.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteForm : PaletteDouble, IPaletteMetric { #region Instance Fields - private IPaletteMetric? _inherit; + private IPaletteMetric _inherit; #endregion @@ -39,10 +39,10 @@ public PaletteForm([DisallowNull] PaletteFormRedirect inheritForm, Debug.Assert(inheritHeader != null); // Remember the inheritance - _inherit = inheritForm; + _inherit = inheritForm!; // Create the palette storage - Header = new PaletteTripleMetric(inheritHeader, needPaint); + Header = new PaletteTripleMetric(inheritHeader!, needPaint); } #endregion @@ -51,6 +51,7 @@ public PaletteForm([DisallowNull] PaletteFormRedirect inheritForm, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && Header.IsDefault; #endregion @@ -60,7 +61,7 @@ public PaletteForm([DisallowNull] PaletteFormRedirect inheritForm, /// Sets the inheritance parent. /// /// Source for inheriting. - public void SetInherit(PaletteForm? inheritHeader) + public void SetInherit(PaletteForm inheritHeader) { base.SetInherit(inheritHeader); _inherit = inheritHeader; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteFormRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteFormRedirect.cs index 489af18fc..b20b12c07 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteFormRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteFormRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,11 +15,11 @@ namespace Krypton.Toolkit /// /// Redirect storage for PaletteForm states. /// - public class PaletteFormRedirect : PaletteDoubleRedirect, + public class PaletteFormRedirect : PaletteFormDoubleRedirect, IPaletteMetric { #region Instance Fields - private readonly PaletteRedirect? _redirect; + private readonly PaletteRedirect _redirect; private InheritBool _overlayHeaders; #endregion @@ -30,7 +30,7 @@ public class PaletteFormRedirect : PaletteDoubleRedirect, /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteFormRedirect(PaletteRedirect? redirect, + public PaletteFormRedirect(PaletteRedirect redirect, NeedPaintHandler needPaint) : this(redirect, redirect, needPaint) { @@ -54,10 +54,10 @@ public PaletteFormRedirect([DisallowNull] PaletteRedirect redirectForm, Debug.Assert(redirectHeader != null); // Remember the redirect reference - _redirect = redirectForm; + _redirect = redirectForm!; // Create the palette storage - Header = new PaletteHeaderButtonRedirect(redirectHeader, PaletteBackStyle.HeaderForm, PaletteBorderStyle.HeaderForm, PaletteContentStyle.HeaderForm, needPaint); + Header = new PaletteHeaderButtonRedirect(redirectHeader!, PaletteBackStyle.HeaderForm, PaletteBorderStyle.HeaderForm, PaletteContentStyle.HeaderForm, needPaint); // Default other values _overlayHeaders = InheritBool.Inherit; @@ -69,9 +69,10 @@ public PaletteFormRedirect([DisallowNull] PaletteRedirect redirectForm, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Header.IsDefault && - (OverlayHeaders == InheritBool.Inherit); + Header.IsDefault && + (OverlayHeaders == InheritBool.Inherit); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBox.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBox.cs index 41a3e9263..92c173b8a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PaletteGroupBox : PaletteDouble /// /// Source for inheriting palette defaulted values. /// Delegate for notifying paint requests. - public PaletteGroupBox(PaletteGroupBoxRedirect? inherit, + public PaletteGroupBox(PaletteGroupBoxRedirect inherit, NeedPaintHandler needPaint) : base(inherit, needPaint) => Content = new PaletteContent(inherit.PaletteContent, needPaint); @@ -48,7 +48,7 @@ public PaletteGroupBox(PaletteGroupBoxRedirect? inherit, [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteContent? PaletteContent => Content; + public IPaletteContent PaletteContent => Content; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBoxRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBoxRedirect.cs index b6120f1cc..a084561af 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBoxRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteGroupBoxRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class PaletteGroupBoxRedirect : PaletteDoubleRedirect /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteGroupBoxRedirect(PaletteRedirect? redirect, + public PaletteGroupBoxRedirect(PaletteRedirect redirect, NeedPaintHandler needPaint) : this(redirect, redirect, needPaint) { @@ -48,7 +48,7 @@ public PaletteGroupBoxRedirect([DisallowNull] PaletteRedirect redirectDouble, Debug.Assert(redirectDouble != null); Debug.Assert(redirectContent != null); - _contentInherit = new PaletteContentInheritRedirect(redirectContent, PaletteContentStyle.LabelGroupBoxCaption); + _contentInherit = new PaletteContentInheritRedirect(redirectContent!, PaletteContentStyle.LabelGroupBoxCaption); Content = new PaletteContent(_contentInherit, needPaint); } #endregion @@ -58,6 +58,7 @@ public PaletteGroupBoxRedirect([DisallowNull] PaletteRedirect redirectDouble, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && Content.IsDefault; #endregion @@ -80,7 +81,7 @@ public PaletteGroupBoxRedirect([DisallowNull] PaletteRedirect redirectDouble, [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteContent? PaletteContent => Content; + public IPaletteContent PaletteContent => Content; /// /// Gets and sets the content palette style. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderButtonRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderButtonRedirect.cs index fcee5ddf5..8efb0507c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderButtonRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderButtonRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteHeaderButtonRedirect : PaletteTripleMetricRedirect { #region Instance Fields - private readonly PaletteRedirect? _redirect; + private readonly PaletteRedirect _redirect; private Padding _buttonPadding; private int _buttonEdgeInset; #endregion @@ -42,7 +42,7 @@ public PaletteHeaderButtonRedirect([DisallowNull] PaletteRedirect redirect, Debug.Assert(redirect != null); // Remember the redirect reference - _redirect = redirect; + _redirect = redirect!; // Set default value for padding property _buttonPadding = CommonHelper.InheritPadding; @@ -55,9 +55,10 @@ public PaletteHeaderButtonRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - ButtonPadding.Equals(CommonHelper.InheritPadding) && - (ButtonEdgeInset == -1); + ButtonPadding.Equals(CommonHelper.InheritPadding) && + (ButtonEdgeInset == -1); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroup.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroup.cs index c23213480..a1a1ef8c3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroup.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroup.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,7 @@ public class PaletteHeaderGroup : PaletteDouble, IPaletteMetric { #region Instance Fields - private IPaletteMetric? _inherit; + private IPaletteMetric _inherit; #endregion @@ -42,11 +42,11 @@ public PaletteHeaderGroup([DisallowNull] PaletteHeaderGroupRedirect inheritHeade Debug.Assert(inheritHeaderSecondary != null); // Remember the inheritance - _inherit = inheritHeaderGroup; + _inherit = inheritHeaderGroup!; // Create the palette storage - HeaderPrimary = new PaletteTripleMetric(inheritHeaderPrimary, needPaint); - HeaderSecondary = new PaletteTripleMetric(inheritHeaderSecondary, needPaint); + HeaderPrimary = new PaletteTripleMetric(inheritHeaderPrimary!, needPaint); + HeaderSecondary = new PaletteTripleMetric(inheritHeaderSecondary!, needPaint); } #endregion @@ -55,9 +55,10 @@ public PaletteHeaderGroup([DisallowNull] PaletteHeaderGroupRedirect inheritHeade /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - HeaderPrimary.IsDefault && - HeaderSecondary.IsDefault; + HeaderPrimary.IsDefault && + HeaderSecondary.IsDefault; #endregion @@ -66,7 +67,7 @@ public PaletteHeaderGroup([DisallowNull] PaletteHeaderGroupRedirect inheritHeade /// Sets the inheritance parent. /// /// Source for inheriting. - public void SetInherit(PaletteHeaderGroup? inheritHeaderGroup) + public void SetInherit(PaletteHeaderGroup inheritHeaderGroup) { base.SetInherit(inheritHeaderGroup); _inherit = inheritHeaderGroup; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroupRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroupRedirect.cs index cae257052..1cd51e15b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroupRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderGroupRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -30,7 +30,7 @@ public class PaletteHeaderGroupRedirect : PaletteDoubleRedirect, /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteHeaderGroupRedirect(PaletteRedirect? redirect, + public PaletteHeaderGroupRedirect(PaletteRedirect redirect, NeedPaintHandler needPaint) : this(redirect, redirect, redirect, needPaint) { @@ -58,8 +58,8 @@ public PaletteHeaderGroupRedirect([DisallowNull] PaletteRedirect redirectHeaderG _redirect = redirectHeaderGroup; // Create the palette storage - HeaderPrimary = new PaletteHeaderPaddingRedirect(redirectHeaderPrimary, PaletteBackStyle.HeaderPrimary, PaletteBorderStyle.HeaderPrimary, PaletteContentStyle.HeaderPrimary, needPaint); - HeaderSecondary = new PaletteHeaderPaddingRedirect(redirectHeaderSecondary, PaletteBackStyle.HeaderSecondary, PaletteBorderStyle.HeaderSecondary, PaletteContentStyle.HeaderSecondary, needPaint); + HeaderPrimary = new PaletteHeaderPaddingRedirect(redirectHeaderPrimary!, PaletteBackStyle.HeaderPrimary, PaletteBorderStyle.HeaderPrimary, PaletteContentStyle.HeaderPrimary, needPaint); + HeaderSecondary = new PaletteHeaderPaddingRedirect(redirectHeaderSecondary!, PaletteBackStyle.HeaderSecondary, PaletteBorderStyle.HeaderSecondary, PaletteContentStyle.HeaderSecondary, needPaint); // Default other values _overlayHeaders = InheritBool.Inherit; @@ -71,10 +71,11 @@ public PaletteHeaderGroupRedirect([DisallowNull] PaletteRedirect redirectHeaderG /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - HeaderPrimary.IsDefault && - HeaderSecondary.IsDefault && - (OverlayHeaders == InheritBool.Inherit); + HeaderPrimary.IsDefault && + HeaderSecondary.IsDefault && + (OverlayHeaders == InheritBool.Inherit); #endregion @@ -136,7 +137,7 @@ public InheritBool OverlayHeaders /// Integer value. public int GetMetricInt(PaletteState state, PaletteMetricInt metric) => // Pass onto the inheritance - _redirect.GetMetricInt(state, metric); + _redirect!.GetMetricInt(state, metric); /// /// Gets a boolean metric value. @@ -150,14 +151,11 @@ public InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) if (metric == PaletteMetricBool.HeaderGroupOverlay) { // If the user has defined an actual value to use - if (OverlayHeaders != InheritBool.Inherit) - { - return OverlayHeaders; - } + return OverlayHeaders != InheritBool.Inherit ? OverlayHeaders : _redirect!.GetMetricBool(state, metric); } // Pass onto the inheritance - return _redirect.GetMetricBool(state, metric); + return _redirect!.GetMetricBool(state, metric); } /// @@ -168,7 +166,7 @@ public InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) /// Padding value. public Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) => // Always pass onto the inheritance - _redirect.GetMetricPadding(state, metric); + _redirect!.GetMetricPadding(state, metric); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderPaddingRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderPaddingRedirect.cs index 35e528342..24123e049 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderPaddingRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderPaddingRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteHeaderPaddingRedirect : PaletteHeaderButtonRedirect { #region Instance Fields - private readonly PaletteRedirect? _redirect; + private readonly PaletteRedirect _redirect; private Padding _headerPadding; #endregion @@ -41,7 +41,7 @@ public PaletteHeaderPaddingRedirect([DisallowNull] PaletteRedirect redirect, Debug.Assert(redirect != null); // Remember the redirect reference - _redirect = redirect; + _redirect = redirect!; // Set default value for padding property _headerPadding = CommonHelper.InheritPadding; @@ -53,8 +53,9 @@ public PaletteHeaderPaddingRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - HeaderPadding.Equals(CommonHelper.InheritPadding); + HeaderPadding.Equals(CommonHelper.InheritPadding); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderRedirect.cs index 9f5440397..3cc0e8a6c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteHeaderRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class PaletteHeaderRedirect : PaletteTripleMetricRedirect { #region Instance Fields - private PaletteRedirect? _redirect; + private PaletteRedirect _redirect; private Padding _buttonPadding; private int _buttonEdgeInset; #endregion @@ -46,7 +46,7 @@ public PaletteHeaderRedirect([DisallowNull] PaletteRedirect redirect, Debug.Assert(redirect != null); // Remember the redirect reference - _redirect = redirect; + _redirect = redirect!; // Set default value for padding property _buttonPadding = CommonHelper.InheritPadding; @@ -59,7 +59,7 @@ public PaletteHeaderRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public override void SetRedirector(PaletteRedirect? redirect) + public override void SetRedirector(PaletteRedirect redirect) { base.SetRedirector(redirect); _redirect = redirect; @@ -71,9 +71,10 @@ public override void SetRedirector(PaletteRedirect? redirect) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - ButtonPadding.Equals(CommonHelper.InheritPadding) && - (ButtonEdgeInset == -1); + ButtonPadding.Equals(CommonHelper.InheritPadding) && + (ButtonEdgeInset == -1); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlBackStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlBackStates.cs index b09c5ae8e..c6d9a4d34 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlBackStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlBackStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,13 +35,13 @@ public PaletteInputControlBackStates([DisallowNull] IPaletteBack inherit, Debug.Assert(inherit != null); // Remember inheritance - Inherit = inherit; + Inherit = inherit!; // Store the provided paint notification delegate NeedPaint = needPaint; // Default the initial values - _color1 = Color.Empty; + _color1 = GlobalStaticValues.EMPTY_COLOR; } #endregion @@ -50,7 +50,8 @@ public PaletteInputControlBackStates([DisallowNull] IPaletteBack inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => Color1 == Color.Empty; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => Color1 == GlobalStaticValues.EMPTY_COLOR; #endregion @@ -98,7 +99,7 @@ public virtual void PopulateFromBase(PaletteState state) => [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Main background color.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public Color Color1 { @@ -119,7 +120,7 @@ public Color Color1 /// /// Palette value should be applicable to this state. /// Color value. - public Color GetBackColor1(PaletteState state) => Color1 != Color.Empty ? Color1 : Inherit.GetBackColor1(state); + public Color GetBackColor1(PaletteState state) => Color1 != GlobalStaticValues.EMPTY_COLOR ? Color1 : Inherit.GetBackColor1(state); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlContentStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlContentStates.cs index 9f57f0da5..e7ae3398d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlContentStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlContentStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -39,14 +39,14 @@ public PaletteInputControlContentStates([DisallowNull] IPaletteContent inherit, Debug.Assert(inherit != null); // Remember inheritance - Inherit = inherit; + Inherit = inherit!; // Store the provided paint notification delegate NeedPaint = needPaint; // Default the initial values _font = null; - _color1 = Color.Empty; + _color1 = GlobalStaticValues.EMPTY_COLOR; _padding = CommonHelper.InheritPadding; _shortTextH = PaletteRelativeAlign.Inherit; } @@ -57,11 +57,11 @@ public PaletteInputControlContentStates([DisallowNull] IPaletteContent inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => (Font == null) && - (Color1.IsEmpty) && - Padding.Equals(CommonHelper.InheritPadding) - && (TextH == PaletteRelativeAlign.Inherit) - ; + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => Font == null && + (Color1.IsEmpty) && + Padding.Equals(CommonHelper.InheritPadding) + && !ShouldSerializeTextH(); #endregion @@ -172,14 +172,14 @@ public virtual Font? Font /// /// Palette value should be applicable to this state. /// Font value. - public virtual Font GetContentShortTextFont(PaletteState state) => _font ?? Inherit.GetContentShortTextFont(state); + public virtual Font? GetContentShortTextFont(PaletteState state) => _font ?? Inherit.GetContentShortTextFont(state); /// /// Gets the font for the short text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public virtual Font GetContentShortTextNewFont(PaletteState state) => _font ?? Inherit.GetContentShortTextNewFont(state); + public virtual Font? GetContentShortTextNewFont(PaletteState state) => _font ?? Inherit.GetContentShortTextNewFont(state); /// /// Gets the actual text rendering hint for short text. @@ -233,7 +233,7 @@ public PaletteRelativeAlign TextH /// /// Palette value should be applicable to this state. /// RelativeAlignment value. - public virtual PaletteRelativeAlign GetContentShortTextH(PaletteState state) => _shortTextH != PaletteRelativeAlign.Inherit ? _shortTextH : Inherit.GetContentShortTextH(state); + public virtual PaletteRelativeAlign GetContentShortTextH(PaletteState state) => ShouldSerializeTextH() ? _shortTextH : Inherit.GetContentShortTextH(state); /// /// Gets the actual content short text vertical alignment value. @@ -262,7 +262,7 @@ public PaletteRelativeAlign TextH [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Main color for the text.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public virtual Color Color1 { @@ -342,14 +342,14 @@ public virtual Color Color1 /// /// Font value. /// Palette value should be applicable to this state. - public Font GetContentLongTextFont(PaletteState state) => Inherit.GetContentLongTextFont(state); + public Font? GetContentLongTextFont(PaletteState state) => Inherit.GetContentLongTextFont(state); /// /// Gets the font for the long text by generating a new font instance. /// /// Palette value should be applicable to this state. /// Font value. - public Font GetContentLongTextNewFont(PaletteState state) => Inherit.GetContentLongTextNewFont(state); + public Font? GetContentLongTextNewFont(PaletteState state) => Inherit.GetContentLongTextNewFont(state); /// /// Gets the actual text rendering hint for long text. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleRedirect.cs index 673fbc2c3..b237e93a5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -48,15 +48,15 @@ public PaletteInputControlTripleRedirect([DisallowNull] PaletteRedirect redirect NeedPaint = needPaint; // Store the inherit instances - _backInherit = new PaletteBackInheritRedirect(redirect, backStyle); - _borderInherit = new PaletteBorderInheritRedirect(redirect, borderStyle); - _contentInherit = new PaletteContentInheritRedirect(redirect, contentStyle); - _metricRedirect = new PaletteMetricRedirect(redirect); + _backInherit = new PaletteBackInheritRedirect(redirect!, backStyle); + _borderInherit = new PaletteBorderInheritRedirect(redirect!, borderStyle); + _contentInherit = new PaletteContentInheritRedirect(redirect!, contentStyle); + _metricRedirect = new PaletteMetricRedirect(redirect!); // Create storage that maps onto the inherit instances Back = new PaletteInputControlBackStates(_backInherit, needPaint); Border = new PaletteBorder(_borderInherit, needPaint); - Content = new PaletteInputControlContentStates(_contentInherit, needPaint); + Content = new PaletteInputControlContentStates(_contentInherit, needPaint!); } #endregion @@ -65,9 +65,10 @@ public PaletteInputControlTripleRedirect([DisallowNull] PaletteRedirect redirect /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -76,7 +77,7 @@ public PaletteInputControlTripleRedirect([DisallowNull] PaletteRedirect redirect /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { _backInherit.SetRedirector(redirect); _borderInherit.SetRedirector(redirect); @@ -212,7 +213,7 @@ public PaletteBackStyle BackStyle [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteBorder? PaletteBorder => Border; + public IPaletteBorder PaletteBorder => Border; /// /// Gets and sets the border palette style. @@ -245,7 +246,7 @@ public PaletteBorderStyle BorderStyle [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteContent? PaletteContent => Content; + public IPaletteContent PaletteContent => Content; /// /// Gets and sets the content palette style. diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleStates.cs index c9c55d7e3..74839357f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteInputControlTripleStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,9 +33,9 @@ public PaletteInputControlTripleStates([DisallowNull] IPaletteTriple inherit, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Back = new PaletteInputControlBackStates(inherit.PaletteBack, needPaint); - Border = new PaletteBorder(inherit.PaletteBorder, needPaint); - Content = new PaletteInputControlContentStates(inherit.PaletteContent, needPaint); + Back = new PaletteInputControlBackStates(inherit!.PaletteBack, needPaint); + Border = new PaletteBorder(inherit.PaletteBorder!, needPaint); + Content = new PaletteInputControlContentStates(inherit.PaletteContent!, needPaint!); } #endregion @@ -44,9 +44,10 @@ public PaletteInputControlTripleStates([DisallowNull] IPaletteTriple inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Border.IsDefault && - Content.IsDefault; + Border.IsDefault && + Content.IsDefault; #endregion @@ -57,8 +58,8 @@ public PaletteInputControlTripleStates([DisallowNull] IPaletteTriple inherit, public void SetInherit(IPaletteTriple inherit) { Back.SetInherit(inherit.PaletteBack); - Border.SetInherit(inherit.PaletteBorder); - Content.SetInherit(inherit.PaletteContent); + Border.SetInherit(inherit.PaletteBorder!); + Content.SetInherit(inherit.PaletteContent!); } #endregion @@ -115,7 +116,7 @@ public void PopulateFromBase(PaletteState state) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteBorder? PaletteBorder => Border; + public IPaletteBorder PaletteBorder => Border; #endregion @@ -137,7 +138,7 @@ public void PopulateFromBase(PaletteState state) [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public IPaletteContent? PaletteContent => Content; + public IPaletteContent PaletteContent => Content; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTriple.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTriple.cs index 31d326650..ed01ddc27 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTriple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTriple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -13,7 +13,7 @@ namespace Krypton.Toolkit { /// - /// Implement storage for a a list item triple. + /// Implement storage for a list item triple. /// public class PaletteListItemTriple : Storage { @@ -36,7 +36,7 @@ public PaletteListItemTriple([DisallowNull] PaletteTripleRedirect inherit, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - _paletteItem = new PaletteTriple(inherit, needPaint); + _paletteItem = new PaletteTriple(inherit!, needPaint); } #endregion @@ -45,6 +45,7 @@ public PaletteListItemTriple([DisallowNull] PaletteTripleRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => _paletteItem.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTripleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTripleRedirect.cs index 74a926bbc..dfa7d4e58 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTripleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListItemTripleRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -13,7 +13,7 @@ namespace Krypton.Toolkit { /// - /// Implement storage for a a list item triple. + /// Implement storage for a list item triple. /// public class PaletteListItemTripleRedirect : Storage { @@ -33,7 +33,7 @@ public PaletteListItemTripleRedirect([DisallowNull] PaletteRedirect redirect, NeedPaintHandler needPaint) { Debug.Assert(redirect != null); - Item = new PaletteTripleRedirect(redirect, backStyle, borderStyle, contentStyle, needPaint); + Item = new PaletteTripleRedirect(redirect!, backStyle, borderStyle, contentStyle, needPaint); } #endregion @@ -42,6 +42,7 @@ public PaletteListItemTripleRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Item.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListState.cs index 98bd8811b..ee47c1ce5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ public class PaletteListState : PaletteDouble /// /// Source for inheriting values. /// Delegate for notifying paint requests. - public PaletteListState(PaletteListStateRedirect? inherit, + public PaletteListState(PaletteListStateRedirect inherit, NeedPaintHandler needPaint) : base(inherit, needPaint) => Item = new PaletteTriple(inherit.Item, needPaint); @@ -35,6 +35,7 @@ public PaletteListState(PaletteListStateRedirect? inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && Item.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListStateRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListStateRedirect.cs index fd5d9f7f9..c4f0f849a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListStateRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteListStateRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,11 +43,11 @@ public PaletteListStateRedirect([DisallowNull] PaletteRedirect redirect, _redirect = redirect; // Create the item redirector - Item = new PaletteTripleRedirect(redirect, - PaletteBackStyle.ButtonListItem, - PaletteBorderStyle.ButtonListItem, - PaletteContentStyle.ButtonListItem, - needPaint); + Item = new PaletteTripleRedirect(redirect!, + PaletteBackStyle.ButtonListItem, + PaletteBorderStyle.ButtonListItem, + PaletteContentStyle.ButtonListItem, + needPaint); } #endregion @@ -56,6 +56,7 @@ public PaletteListStateRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && Item.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarDoubleState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarDoubleState.cs index f250db239..477f9430e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarDoubleState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarDoubleState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -22,7 +22,7 @@ public class PaletteMonthCalendarDoubleState : PaletteDouble /// Initialize a new instance of the PaletteMonthCalendarDoubleState class. /// /// inheritance redirection instance. - public PaletteMonthCalendarDoubleState(PaletteMonthCalendarRedirect? redirect) + public PaletteMonthCalendarDoubleState(PaletteMonthCalendarRedirect redirect) : this(redirect, null) { } @@ -32,9 +32,9 @@ public PaletteMonthCalendarDoubleState(PaletteMonthCalendarRedirect? redirect) /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteMonthCalendarDoubleState(PaletteMonthCalendarRedirect? redirect, - NeedPaintHandler needPaint) - : base(redirect, needPaint) + public PaletteMonthCalendarDoubleState(PaletteMonthCalendarRedirect redirect, + NeedPaintHandler? needPaint) + : base(redirect, needPaint!) { Header = new PaletteTriple(redirect.Header, needPaint); Day = new PaletteTriple(redirect.Day, needPaint); @@ -47,10 +47,11 @@ public PaletteMonthCalendarDoubleState(PaletteMonthCalendarRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Header.IsDefault && - Day.IsDefault && - DayOfWeek.IsDefault; + Header.IsDefault && + Day.IsDefault && + DayOfWeek.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarRedirect.cs index d98ed9198..3584020cb 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,13 +32,13 @@ public PaletteMonthCalendarRedirect() /// inheritance redirection for bread crumb level. /// Delegate for notifying paint requests. public PaletteMonthCalendarRedirect(PaletteRedirect? redirect, - NeedPaintHandler needPaint) - : base(redirect, PaletteBackStyle.ControlClient, + NeedPaintHandler? needPaint) + : base(redirect!, PaletteBackStyle.ControlClient, PaletteBorderStyle.ControlClient) { - Header = new PaletteTripleRedirect(redirect, PaletteBackStyle.HeaderCalendar, PaletteBorderStyle.HeaderCalendar, PaletteContentStyle.HeaderCalendar, needPaint); - DayOfWeek = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonCalendarDay, PaletteBorderStyle.ButtonCalendarDay, PaletteContentStyle.ButtonCalendarDay, needPaint); - Day = new PaletteTripleRedirect(redirect, PaletteBackStyle.ButtonCalendarDay, PaletteBorderStyle.ButtonCalendarDay, PaletteContentStyle.ButtonCalendarDay, needPaint); + Header = new PaletteTripleRedirect(redirect!, PaletteBackStyle.HeaderCalendar, PaletteBorderStyle.HeaderCalendar, PaletteContentStyle.HeaderCalendar, needPaint); + DayOfWeek = new PaletteTripleRedirect(redirect!, PaletteBackStyle.ButtonCalendarDay, PaletteBorderStyle.ButtonCalendarDay, PaletteContentStyle.ButtonCalendarDay, needPaint); + Day = new PaletteTripleRedirect(redirect!, PaletteBackStyle.ButtonCalendarDay, PaletteBorderStyle.ButtonCalendarDay, PaletteContentStyle.ButtonCalendarDay, needPaint); } #endregion @@ -47,10 +47,11 @@ public PaletteMonthCalendarRedirect(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Header.IsDefault && - DayOfWeek.IsDefault && - Day.IsDefault; + Header.IsDefault && + DayOfWeek.IsDefault && + Day.IsDefault; #endregion @@ -59,7 +60,7 @@ public PaletteMonthCalendarRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public override void SetRedirector(PaletteRedirect? redirect) + public override void SetRedirector(PaletteRedirect redirect) { base.SetRedirector(redirect); Header.SetRedirector(redirect); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarState.cs index 57faf0aca..732b21d68 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -22,7 +22,7 @@ public class PaletteMonthCalendarState : Storage /// Initialize a new instance of the PaletteMonthCalendarState class. /// /// inheritance redirection instance. - public PaletteMonthCalendarState(PaletteMonthCalendarRedirect? redirect) + public PaletteMonthCalendarState(PaletteMonthCalendarRedirect redirect) : this(redirect, null) { } @@ -32,8 +32,8 @@ public PaletteMonthCalendarState(PaletteMonthCalendarRedirect? redirect) /// /// inheritance redirection instance. /// Delegate for notifying paint requests. - public PaletteMonthCalendarState(PaletteMonthCalendarRedirect? redirect, - NeedPaintHandler needPaint) => + public PaletteMonthCalendarState(PaletteMonthCalendarRedirect redirect, + NeedPaintHandler? needPaint) => Day = new PaletteTriple(redirect.Day, needPaint); #endregion @@ -43,6 +43,7 @@ public PaletteMonthCalendarState(PaletteMonthCalendarRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Day.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarStateRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarStateRedirect.cs index 37b98ab3b..044df11be 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarStateRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteMonthCalendarStateRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,20 +32,21 @@ public PaletteMonthCalendarStateRedirect() /// inheritance redirection instance. /// Delegate for notifying paint requests. public PaletteMonthCalendarStateRedirect(PaletteRedirect? redirect, - NeedPaintHandler needPaint) => - Day = new PaletteTripleRedirect(redirect, + NeedPaintHandler? needPaint) => + Day = new PaletteTripleRedirect(redirect!, PaletteBackStyle.ButtonCalendarDay, PaletteBorderStyle.ButtonCalendarDay, PaletteContentStyle.ButtonCalendarDay, needPaint); - #endregion + #endregion #region IsDefault /// /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Day.IsDefault; #endregion @@ -55,7 +56,7 @@ public PaletteMonthCalendarStateRedirect(PaletteRedirect? redirect, /// Update the redirector with new reference. /// /// Target redirector. - public void SetRedirector(PaletteRedirect? redirect) => Day.SetRedirector(redirect); + public void SetRedirector(PaletteRedirect redirect) => Day.SetRedirector(redirect); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteNodeOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteNodeOverride.cs index 001039ac4..099224177 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteNodeOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteNodeOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,8 +43,8 @@ public PaletteNodeOverride([DisallowNull] IPaletteTriple triple) // Create the triple override instances _overrideBack = new PaletteBackInheritNode(triple.PaletteBack); - _overrideBorder = new PaletteBorderInheritOverride(triple.PaletteBorder, triple.PaletteBorder); - _overrideContent = new PaletteContentInheritNode(triple.PaletteContent); + _overrideBorder = new PaletteBorderInheritOverride(triple.PaletteBorder!, triple.PaletteBorder!); + _overrideContent = new PaletteContentInheritNode(triple.PaletteContent!); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectBreadCrumb.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectBreadCrumb.cs index 327c92b42..827c4dcff 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectBreadCrumb.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectBreadCrumb.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -22,7 +22,7 @@ public class PaletteRedirectBreadCrumb : PaletteRedirect /// Initialize a new instance of the PaletteRedirectBreadCrumb class. /// /// Initial palette target for redirection. - public PaletteRedirectBreadCrumb(PaletteBase? target) + public PaletteRedirectBreadCrumb(PaletteBase target) : base(target) { Left = false; diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCheckBox.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCheckBox.cs index a4944d68a..79af795e1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCheckBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,7 +43,7 @@ public PaletteRedirectCheckBox(PaletteBase? target, Debug.Assert(images != null); // Remember incoming target - _images = images; + _images = images!; } #endregion @@ -61,7 +61,7 @@ public PaletteRedirectCheckBox(PaletteBase? target, bool tracking, bool pressed) { - Image retImage; + Image? retImage; // Get the state specific image switch (checkState) @@ -130,7 +130,7 @@ public PaletteRedirectCheckBox(PaletteBase? target, retImage ??= _images.Common; // Not found, then inherit from target - return retImage ?? Target.GetCheckBoxImage(enabled, checkState, tracking, pressed); + return retImage ?? Target?.GetCheckBoxImage(enabled, checkState, tracking, pressed); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCommon.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCommon.cs index f46dbce5e..b82f47ba3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCommon.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectCommon.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,8 +18,8 @@ namespace Krypton.Toolkit public class PaletteRedirectCommon : PaletteRedirect { #region Instance Fields - private readonly IPaletteTriple _disabled; - private readonly IPaletteTriple _others; + private readonly IPaletteTriple? _disabled; + private readonly IPaletteTriple? _others; #endregion #region Identity @@ -29,7 +29,7 @@ public class PaletteRedirectCommon : PaletteRedirect /// Initial palette target for redirection. /// Redirection for disabled state requests. /// Redirection for all other state requests. - public PaletteRedirectCommon(PaletteBase? target, + public PaletteRedirectCommon(PaletteBase target, [DisallowNull] IPaletteTriple disabled, [DisallowNull] IPaletteTriple others) : base(target) @@ -38,8 +38,8 @@ public PaletteRedirectCommon(PaletteBase? target, Debug.Assert(others != null); // Remember state specific inheritance - _disabled = disabled; - _others = others; + _disabled = disabled!; + _others = others!; } #endregion @@ -52,7 +52,7 @@ public PaletteRedirectCommon(PaletteBase? target, /// InheritBool value. public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackDraw(state) : base.GetBackDraw(style, state); } @@ -64,7 +64,7 @@ public override InheritBool GetBackDraw(PaletteBackStyle style, PaletteState sta /// PaletteGraphicsHint value. public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackGraphicsHint(state) : base.GetBackGraphicsHint(style, state); } @@ -76,7 +76,7 @@ public override PaletteGraphicsHint GetBackGraphicsHint(PaletteBackStyle style, /// Color value. public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackColor1(state) : base.GetBackColor1(style, state); } @@ -88,7 +88,7 @@ public override Color GetBackColor1(PaletteBackStyle style, PaletteState state) /// Color value. public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackColor2(state) : base.GetBackColor2(style, state); } @@ -100,7 +100,7 @@ public override Color GetBackColor2(PaletteBackStyle style, PaletteState state) /// Color drawing style. public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackColorStyle(state) : base.GetBackColorStyle(style, state); } @@ -112,7 +112,7 @@ public override PaletteColorStyle GetBackColorStyle(PaletteBackStyle style, Pale /// Color alignment style. public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackColorAlign(state) : base.GetBackColorAlign(style, state); } @@ -124,7 +124,7 @@ public override PaletteRectangleAlign GetBackColorAlign(PaletteBackStyle style, /// Angle used for color drawing. public override float GetBackColorAngle(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackColorAngle(state) : base.GetBackColorAngle(style, state); } @@ -136,7 +136,7 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta /// Image instance. public override Image? GetBackImage(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackImage(state) : base.GetBackImage(style, state); } @@ -148,7 +148,7 @@ public override float GetBackColorAngle(PaletteBackStyle style, PaletteState sta /// Image style value. public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackImageStyle(state) : base.GetBackImageStyle(style, state); } @@ -160,7 +160,7 @@ public override PaletteImageStyle GetBackImageStyle(PaletteBackStyle style, Pale /// Image alignment style. public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null ? inherit.PaletteBack.GetBackImageAlign(state) : base.GetBackImageAlign(style, state); } #endregion @@ -174,8 +174,8 @@ public override PaletteRectangleAlign GetBackImageAlign(PaletteBackStyle style, /// InheritBool value. public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderDraw(state) : base.GetBorderDraw(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderDraw(state) : base.GetBorderDraw(style, state); } /// @@ -186,8 +186,8 @@ public override InheritBool GetBorderDraw(PaletteBorderStyle style, PaletteState /// PaletteDrawBorders value. public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderDrawBorders(state) : base.GetBorderDrawBorders(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderDrawBorders(state) : base.GetBorderDrawBorders(style, state); } /// @@ -198,8 +198,8 @@ public override PaletteDrawBorders GetBorderDrawBorders(PaletteBorderStyle style /// PaletteGraphicsHint value. public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderGraphicsHint(state) : base.GetBorderGraphicsHint(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderGraphicsHint(state) : base.GetBorderGraphicsHint(style, state); } /// @@ -210,8 +210,8 @@ public override PaletteGraphicsHint GetBorderGraphicsHint(PaletteBorderStyle sty /// Color value. public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColor1(state) : base.GetBorderColor1(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderColor1(state) : base.GetBorderColor1(style, state); } /// @@ -222,8 +222,8 @@ public override Color GetBorderColor1(PaletteBorderStyle style, PaletteState sta /// Color value. public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColor2(state) : base.GetBorderColor2(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderColor2(state) : base.GetBorderColor2(style, state); } /// @@ -234,8 +234,8 @@ public override Color GetBorderColor2(PaletteBorderStyle style, PaletteState sta /// Color drawing style. public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColorStyle(state) : base.GetBorderColorStyle(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderColorStyle(state) : base.GetBorderColorStyle(style, state); } /// @@ -246,8 +246,8 @@ public override PaletteColorStyle GetBorderColorStyle(PaletteBorderStyle style, /// Color alignment style. public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColorAlign(state) : base.GetBorderColorAlign(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderColorAlign(state) : base.GetBorderColorAlign(style, state); } /// @@ -258,8 +258,8 @@ public override PaletteRectangleAlign GetBorderColorAlign(PaletteBorderStyle sty /// Angle used for color drawing. public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderColorAngle(state) : base.GetBorderColorAngle(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderColorAngle(state) : base.GetBorderColorAngle(style, state); } /// @@ -270,8 +270,8 @@ public override float GetBorderColorAngle(PaletteBorderStyle style, PaletteState /// Integer width. public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderWidth(state) : base.GetBorderWidth(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderWidth(state) : base.GetBorderWidth(style, state); } /// @@ -282,8 +282,8 @@ public override int GetBorderWidth(PaletteBorderStyle style, PaletteState state) /// Float rounding. public override float GetBorderRounding(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderRounding(state) : base.GetBorderRounding(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderRounding(state) : base.GetBorderRounding(style, state); } /// @@ -294,8 +294,8 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s /// Image instance. public override Image? GetBorderImage(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderImage(state) : base.GetBorderImage(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderImage(state) : base.GetBorderImage(style, state); } /// @@ -306,8 +306,8 @@ public override float GetBorderRounding(PaletteBorderStyle style, PaletteState s /// Image style value. public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderImageStyle(state) : base.GetBorderImageStyle(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderImageStyle(state) : base.GetBorderImageStyle(style, state); } /// @@ -318,8 +318,8 @@ public override PaletteImageStyle GetBorderImageStyle(PaletteBorderStyle style, /// Image alignment style. public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteBorder.GetBorderImageAlign(state) : base.GetBorderImageAlign(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteBorder!.GetBorderImageAlign(state) : base.GetBorderImageAlign(style, state); } #endregion @@ -332,8 +332,8 @@ public override PaletteRectangleAlign GetBorderImageAlign(PaletteBorderStyle sty /// InheritBool value. public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentDraw(state) : base.GetContentDraw(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentDraw(state) : base.GetContentDraw(style, state); } /// @@ -344,8 +344,8 @@ public override InheritBool GetContentDraw(PaletteContentStyle style, PaletteSta /// InheritBool value. public override InheritBool GetContentDrawFocus(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentDrawFocus(state) : base.GetContentDrawFocus(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentDrawFocus(state) : base.GetContentDrawFocus(style, state); } /// @@ -356,8 +356,8 @@ public override InheritBool GetContentDrawFocus(PaletteContentStyle style, Palet /// RelativeAlignment value. public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageH(state) : base.GetContentImageH(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentImageH(state) : base.GetContentImageH(style, state); } /// @@ -368,8 +368,8 @@ public override PaletteRelativeAlign GetContentImageH(PaletteContentStyle style, /// RelativeAlignment value. public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageV(state) : base.GetContentImageV(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentImageV(state) : base.GetContentImageV(style, state); } /// @@ -380,8 +380,8 @@ public override PaletteRelativeAlign GetContentImageV(PaletteContentStyle style, /// PaletteImageEffect value. public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentImageEffect(state) : base.GetContentImageEffect(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentImageEffect(state) : base.GetContentImageEffect(style, state); } /// @@ -390,10 +390,10 @@ public override PaletteImageEffect GetContentImageEffect(PaletteContentStyle sty /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentShortTextFont(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextFont(state) : base.GetContentShortTextFont(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextFont(state) : base.GetContentShortTextFont(style, state); } /// @@ -404,8 +404,8 @@ public override Font GetContentShortTextFont(PaletteContentStyle style, PaletteS /// PaletteTextHint value. public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextHint(state) : base.GetContentShortTextHint(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextHint(state) : base.GetContentShortTextHint(style, state); } /// @@ -416,8 +416,8 @@ public override PaletteTextHint GetContentShortTextHint(PaletteContentStyle styl /// PaletteTextPrefix value. public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextPrefix(state) : base.GetContentShortTextPrefix(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextPrefix(state) : base.GetContentShortTextPrefix(style, state); } /// @@ -428,8 +428,8 @@ public override PaletteTextHotkeyPrefix GetContentShortTextPrefix(PaletteContent /// InheritBool value. public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextMultiLine(state) : base.GetContentShortTextMultiLine(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextMultiLine(state) : base.GetContentShortTextMultiLine(style, state); } /// @@ -440,8 +440,8 @@ public override InheritBool GetContentShortTextMultiLine(PaletteContentStyle sty /// PaletteTextTrim value. public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextTrim(state) : base.GetContentShortTextTrim(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextTrim(state) : base.GetContentShortTextTrim(style, state); } /// @@ -452,8 +452,8 @@ public override PaletteTextTrim GetContentShortTextTrim(PaletteContentStyle styl /// RelativeAlignment value. public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextH(state) : base.GetContentShortTextH(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextH(state) : base.GetContentShortTextH(style, state); } /// @@ -464,8 +464,8 @@ public override PaletteRelativeAlign GetContentShortTextH(PaletteContentStyle st /// RelativeAlignment value. public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextV(state) : base.GetContentShortTextV(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextV(state) : base.GetContentShortTextV(style, state); } /// @@ -476,9 +476,9 @@ public override PaletteRelativeAlign GetContentShortTextV(PaletteContentStyle st /// RelativeAlignment value. public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null - ? inherit.PaletteContent.GetContentShortTextMultiLineH(state) + ? inherit.PaletteContent!.GetContentShortTextMultiLineH(state) : base.GetContentShortTextMultiLineH(style, state); } @@ -490,8 +490,8 @@ public override PaletteRelativeAlign GetContentShortTextMultiLineH(PaletteConten /// Color value. public override Color GetContentShortTextColor1(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextColor1(state) : base.GetContentShortTextColor1(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextColor1(state) : base.GetContentShortTextColor1(style, state); } /// @@ -502,8 +502,8 @@ public override Color GetContentShortTextColor1(PaletteContentStyle style, Palet /// Color value. public override Color GetContentShortTextColor2(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextColor2(state) : base.GetContentShortTextColor2(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextColor2(state) : base.GetContentShortTextColor2(style, state); } /// @@ -514,9 +514,9 @@ public override Color GetContentShortTextColor2(PaletteContentStyle style, Palet /// Color drawing style. public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null - ? inherit.PaletteContent.GetContentShortTextColorStyle(state) + ? inherit.PaletteContent!.GetContentShortTextColorStyle(state) : base.GetContentShortTextColorStyle(style, state); } @@ -528,9 +528,9 @@ public override PaletteColorStyle GetContentShortTextColorStyle(PaletteContentSt /// Color alignment style. public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null - ? inherit.PaletteContent.GetContentShortTextColorAlign(state) + ? inherit.PaletteContent!.GetContentShortTextColorAlign(state) : base.GetContentShortTextColorAlign(style, state); } @@ -542,9 +542,9 @@ public override PaletteRectangleAlign GetContentShortTextColorAlign(PaletteConte /// Angle used for color drawing. public override float GetContentShortTextColorAngle(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null - ? inherit.PaletteContent.GetContentShortTextColorAngle(state) + ? inherit.PaletteContent!.GetContentShortTextColorAngle(state) : base.GetContentShortTextColorAngle(style, state); } @@ -556,8 +556,8 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P /// Image instance. public override Image? GetContentShortTextImage(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentShortTextImage(state) : base.GetContentShortTextImage(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentShortTextImage(state) : base.GetContentShortTextImage(style, state); } /// @@ -568,9 +568,9 @@ public override float GetContentShortTextColorAngle(PaletteContentStyle style, P /// Image style value. public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null - ? inherit.PaletteContent.GetContentShortTextImageStyle(state) + ? inherit.PaletteContent!.GetContentShortTextImageStyle(state) : base.GetContentShortTextImageStyle(style, state); } @@ -582,9 +582,9 @@ public override PaletteImageStyle GetContentShortTextImageStyle(PaletteContentSt /// Image alignment style. public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); + IPaletteTriple? inherit = GetInherit(state); return inherit != null - ? inherit.PaletteContent.GetContentShortTextImageAlign(state) + ? inherit.PaletteContent!.GetContentShortTextImageAlign(state) : base.GetContentShortTextImageAlign(style, state); } @@ -594,10 +594,10 @@ public override PaletteRectangleAlign GetContentShortTextImageAlign(PaletteConte /// Content style. /// Palette value should be applicable to this state. /// Font value. - public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteState state) + public override Font? GetContentLongTextFont(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextFont(state) : base.GetContentLongTextFont(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextFont(state) : base.GetContentLongTextFont(style, state); } /// @@ -608,8 +608,8 @@ public override Font GetContentLongTextFont(PaletteContentStyle style, PaletteSt /// PaletteTextHint value. public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextHint(state) : base.GetContentLongTextHint(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextHint(state) : base.GetContentLongTextHint(style, state); } /// @@ -620,8 +620,8 @@ public override PaletteTextHint GetContentLongTextHint(PaletteContentStyle style /// InheritBool value. public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextMultiLine(state) : base.GetContentLongTextMultiLine(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextMultiLine(state) : base.GetContentLongTextMultiLine(style, state); } /// @@ -632,8 +632,8 @@ public override InheritBool GetContentLongTextMultiLine(PaletteContentStyle styl /// PaletteTextTrim value. public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextTrim(state) : base.GetContentLongTextTrim(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextTrim(state) : base.GetContentLongTextTrim(style, state); } /// @@ -644,8 +644,8 @@ public override PaletteTextTrim GetContentLongTextTrim(PaletteContentStyle style /// PaletteTextPrefix value. public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextPrefix(state) : base.GetContentLongTextPrefix(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextPrefix(state) : base.GetContentLongTextPrefix(style, state); } /// @@ -656,8 +656,8 @@ public override PaletteTextHotkeyPrefix GetContentLongTextPrefix(PaletteContentS /// RelativeAlignment value. public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextH(state) : base.GetContentLongTextH(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextH(state) : base.GetContentLongTextH(style, state); } /// @@ -668,8 +668,8 @@ public override PaletteRelativeAlign GetContentLongTextH(PaletteContentStyle sty /// RelativeAlignment value. public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextV(state) : base.GetContentLongTextV(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextV(state) : base.GetContentLongTextV(style, state); } /// @@ -680,8 +680,8 @@ public override PaletteRelativeAlign GetContentLongTextV(PaletteContentStyle sty /// RelativeAlignment value. public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextMultiLineH(state) : base.GetContentLongTextMultiLineH(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextMultiLineH(state) : base.GetContentLongTextMultiLineH(style, state); } /// @@ -692,8 +692,8 @@ public override PaletteRelativeAlign GetContentLongTextMultiLineH(PaletteContent /// Color value. public override Color GetContentLongTextColor1(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextColor1(state) : base.GetContentLongTextColor1(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextColor1(state) : base.GetContentLongTextColor1(style, state); } /// @@ -704,8 +704,8 @@ public override Color GetContentLongTextColor1(PaletteContentStyle style, Palett /// Color value. public override Color GetContentLongTextColor2(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextColor2(state) : base.GetContentLongTextColor2(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextColor2(state) : base.GetContentLongTextColor2(style, state); } /// @@ -716,8 +716,8 @@ public override Color GetContentLongTextColor2(PaletteContentStyle style, Palett /// Color drawing style. public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextColorStyle(state) : base.GetContentLongTextColorStyle(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextColorStyle(state) : base.GetContentLongTextColorStyle(style, state); } /// @@ -728,8 +728,8 @@ public override PaletteColorStyle GetContentLongTextColorStyle(PaletteContentSty /// Color alignment style. public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextColorAlign(state) : base.GetContentLongTextColorAlign(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextColorAlign(state) : base.GetContentLongTextColorAlign(style, state); } /// @@ -740,8 +740,8 @@ public override PaletteRectangleAlign GetContentLongTextColorAlign(PaletteConten /// Angle used for color drawing. public override float GetContentLongTextColorAngle(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextColorAngle(state) : base.GetContentLongTextColorAngle(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextColorAngle(state) : base.GetContentLongTextColorAngle(style, state); } /// @@ -752,8 +752,8 @@ public override float GetContentLongTextColorAngle(PaletteContentStyle style, Pa /// Image instance. public override Image? GetContentLongTextImage(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextImage(state) : base.GetContentLongTextImage(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextImage(state) : base.GetContentLongTextImage(style, state); } /// @@ -764,8 +764,8 @@ public override float GetContentLongTextColorAngle(PaletteContentStyle style, Pa /// Image style value. public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextImageStyle(state) : base.GetContentLongTextImageStyle(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextImageStyle(state) : base.GetContentLongTextImageStyle(style, state); } /// @@ -776,8 +776,8 @@ public override PaletteImageStyle GetContentLongTextImageStyle(PaletteContentSty /// Image alignment style. public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentLongTextImageAlign(state) : base.GetContentLongTextImageAlign(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentLongTextImageAlign(state) : base.GetContentLongTextImageAlign(style, state); } /// @@ -788,8 +788,8 @@ public override PaletteRectangleAlign GetContentLongTextImageAlign(PaletteConten /// Padding value. public override Padding GetContentPadding(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentPadding(state) : base.GetContentPadding(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentPadding(state) : base.GetContentPadding(style, state); } /// @@ -800,8 +800,8 @@ public override Padding GetContentPadding(PaletteContentStyle style, PaletteStat /// Integer value. public override int GetContentAdjacentGap(PaletteContentStyle style, PaletteState state) { - IPaletteTriple inherit = GetInherit(state); - return inherit != null ? inherit.PaletteContent.GetContentAdjacentGap(state) : base.GetContentAdjacentGap(style, state); + IPaletteTriple? inherit = GetInherit(state); + return inherit != null ? inherit.PaletteContent!.GetContentAdjacentGap(state) : base.GetContentAdjacentGap(style, state); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectContextMenu.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectContextMenu.cs index 77b4f2797..83944d841 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectContextMenu.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectContextMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,14 +27,14 @@ public class PaletteRedirectContextMenu : PaletteRedirect /// /// Initial palette target for redirection. /// Reference to source of context menu images. - public PaletteRedirectContextMenu(PaletteBase? target, + public PaletteRedirectContextMenu(PaletteBase target, [DisallowNull] ContextMenuImages images) : base(target) { Debug.Assert(images != null); // Remember incoming target - _images = images; + _images = images!; } #endregion @@ -45,7 +45,7 @@ public PaletteRedirectContextMenu(PaletteBase? target, /// Appropriate image for drawing; otherwise null. public override Image? GetContextMenuCheckedImage() { - Image retImage = _images.Checked ?? Target.GetContextMenuCheckedImage(); + Image? retImage = _images.Checked ?? Target?.GetContextMenuCheckedImage(); // Not found, then inherit from target @@ -58,7 +58,7 @@ public PaletteRedirectContextMenu(PaletteBase? target, /// Appropriate image for drawing; otherwise null. public override Image? GetContextMenuIndeterminateImage() { - Image retImage = _images.Indeterminate ?? Target.GetContextMenuIndeterminateImage(); + Image? retImage = _images.Indeterminate ?? Target?.GetContextMenuIndeterminateImage(); // Not found, then inherit from target @@ -71,7 +71,7 @@ public PaletteRedirectContextMenu(PaletteBase? target, /// Appropriate image for drawing; otherwise null. public override Image? GetContextMenuSubMenuImage() { - Image retImage = _images.SubMenu ?? Target.GetContextMenuSubMenuImage(); + Image? retImage = _images.SubMenu ?? Target?.GetContextMenuSubMenuImage(); // Not found, then inherit from target diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectDropDownButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectDropDownButton.cs index 604489f3f..216749796 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectDropDownButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectDropDownButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,7 +43,7 @@ public PaletteRedirectDropDownButton(PaletteBase? target, Debug.Assert(images != null); // Remember incoming target - _images = images; + _images = images!; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectRadioButton.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectRadioButton.cs index 463965342..521214c4b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectRadioButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,7 +43,7 @@ public PaletteRedirectRadioButton(PaletteBase? target, Debug.Assert(images != null); // Remember incoming target - _images = images; + _images = images!; } #endregion @@ -61,7 +61,7 @@ public PaletteRedirectRadioButton(PaletteBase? target, bool tracking, bool pressed) { - Image retImage; + Image? retImage; if (checkState) { @@ -106,7 +106,7 @@ public PaletteRedirectRadioButton(PaletteBase? target, retImage ??= _images.Common; // Not found, then inherit from target - return retImage ?? Target.GetRadioButtonImage(enabled, checkState, tracking, pressed); + return retImage ?? Target?.GetRadioButtonImage(enabled, checkState, tracking, pressed); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectTreeView.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectTreeView.cs index 854b10d9c..d3bdbb887 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectTreeView.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteRedirectTreeView.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,10 +27,10 @@ public class PaletteRedirectTreeView : PaletteRedirect /// Initialize a new instance of the PaletteRedirectTreeView class. /// /// Reference to source of tree view images. - /// Reference to source of check box images. + /// Reference to source of check box images. public PaletteRedirectTreeView(TreeViewImages plusMinusImages, - CheckBoxImages checkboxImages) - : this(null, plusMinusImages, checkboxImages) + CheckBoxImages checkBoxImages) + : this(null, plusMinusImages, checkBoxImages) { } @@ -39,17 +39,17 @@ public PaletteRedirectTreeView(TreeViewImages plusMinusImages, /// /// Initial palette target for redirection. /// Reference to source of tree view images. - /// Reference to source of check box images. + /// Reference to source of check box images. public PaletteRedirectTreeView(PaletteBase? target, [DisallowNull] TreeViewImages plusMinusImages, - CheckBoxImages checkboxImages) + CheckBoxImages checkBoxImages) : base(target) { Debug.Assert(plusMinusImages != null); // Remember incoming targets - _plusMinusImages = plusMinusImages; - _checkboxImages = checkboxImages; + _plusMinusImages = plusMinusImages!; + _checkboxImages = checkBoxImages; } #endregion @@ -61,7 +61,7 @@ public PaletteRedirectTreeView(PaletteBase? target, /// Appropriate image for drawing; otherwise null. public override Image? GetTreeViewImage(bool expanded) { - Image? retImage = (expanded ? _plusMinusImages.Minus : _plusMinusImages.Plus) ?? Target.GetTreeViewImage(expanded); + Image? retImage = (expanded ? _plusMinusImages.Minus : _plusMinusImages.Plus) ?? Target?.GetTreeViewImage(expanded); // Not found, then inherit from target @@ -81,7 +81,7 @@ public PaletteRedirectTreeView(PaletteBase? target, bool tracking, bool pressed) { - Image retImage; + Image? retImage; // Get the state specific image switch (checkState) @@ -150,7 +150,7 @@ public PaletteRedirectTreeView(PaletteBase? target, retImage ??= _checkboxImages.Common; // Not found, then inherit from target - return retImage ?? Target.GetCheckBoxImage(enabled, checkState, tracking, pressed); + return retImage ?? Target?.GetCheckBoxImage(enabled, checkState, tracking, pressed); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPadding.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPadding.cs index e04b1d701..951381e86 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPadding.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPadding.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -52,8 +52,9 @@ public PaletteSeparatorPadding([DisallowNull] IPaletteDouble inheritDouble, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Padding.Equals(CommonHelper.InheritPadding); + Padding.Equals(CommonHelper.InheritPadding); #endregion @@ -66,7 +67,7 @@ public PaletteSeparatorPadding([DisallowNull] IPaletteDouble inheritDouble, public void PopulateFromBase(PaletteState state, PaletteMetricPadding metric) { base.PopulateFromBase(state); - Padding = _inherit.GetMetricPadding(state, metric); + Padding = _inherit!.GetMetricPadding(state, metric); } #endregion @@ -120,7 +121,7 @@ public Padding Padding /// Integer value. public int GetMetricInt(PaletteState state, PaletteMetricInt metric) => // Pass onto the inheritance - _inherit.GetMetricInt(state, metric); + _inherit!.GetMetricInt(state, metric); /// /// Gets a boolean metric value. @@ -130,7 +131,7 @@ public int GetMetricInt(PaletteState state, PaletteMetricInt metric) => /// InheritBool value. public InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) => // Pass onto the inheritance - _inherit.GetMetricBool(state, metric); + _inherit!.GetMetricBool(state, metric); /// /// Gets a padding metric value. @@ -145,14 +146,13 @@ public Padding GetMetricPadding(PaletteState state, PaletteMetricPadding metric) ) { // If the user has defined an actual value to use - if (!Padding.Equals(CommonHelper.InheritPadding)) - { - return Padding; - } + return !Padding.Equals(CommonHelper.InheritPadding) + ? Padding + : _inherit!.GetMetricPadding(state, metric); } // Pass onto the inheritance - return _inherit.GetMetricPadding(state, metric); + return _inherit!.GetMetricPadding(state, metric); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPaddingRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPaddingRedirect.cs index ec8780e30..47edbc2f8 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPaddingRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSeparatorPaddingRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -52,8 +52,9 @@ public PaletteSeparatorPaddingRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Padding.Equals(CommonHelper.InheritPadding); + Padding.Equals(CommonHelper.InheritPadding); #endregion @@ -95,7 +96,7 @@ public Padding Padding /// Integer value. public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) => // Pass onto the inheritance - _redirect.GetMetricInt(state, metric); + _redirect!.GetMetricInt(state, metric); /// /// Gets a boolean metric value. @@ -105,7 +106,7 @@ public override int GetMetricInt(PaletteState state, PaletteMetricInt metric) => /// InheritBool value. public override InheritBool GetMetricBool(PaletteState state, PaletteMetricBool metric) => // Pass onto the inheritance - _redirect.GetMetricBool(state, metric); + _redirect!.GetMetricBool(state, metric); /// /// Gets a padding metric value. @@ -120,14 +121,13 @@ public override Padding GetMetricPadding(PaletteState state, PaletteMetricPaddin ) { // If the user has defined an actual value to use - if (!Padding.Equals(CommonHelper.InheritPadding)) - { - return Padding; - } + return !Padding.Equals(CommonHelper.InheritPadding) + ? Padding + : _redirect!.GetMetricPadding(state, metric); } // Pass onto the inheritance - return _redirect.GetMetricPadding(state, metric); + return _redirect!.GetMetricPadding(state, metric); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainer.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainer.cs index 5678d5783..c9827bb3d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,13 +25,13 @@ public class PaletteSplitContainer : PaletteDouble /// Source for inheriting separator defaulted values. /// Source for inheriting separator metric values. /// Delegate for notifying paint requests. - public PaletteSplitContainer(IPaletteDouble? inheritSplitContainer, + public PaletteSplitContainer(IPaletteDouble inheritSplitContainer, IPaletteDouble? inheritSeparator, IPaletteMetric? inheritMetric, NeedPaintHandler needPaint) : base(inheritSplitContainer, needPaint) => // Create the embedded separator palette information - Separator = new PaletteSeparatorPadding(inheritSeparator, inheritMetric, needPaint); + Separator = new PaletteSeparatorPadding(inheritSeparator!, inheritMetric!, needPaint); #endregion @@ -40,8 +40,9 @@ public PaletteSplitContainer(IPaletteDouble? inheritSplitContainer, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Separator.IsDefault; + Separator!.IsDefault; #endregion @@ -65,7 +66,7 @@ public PaletteSplitContainer(IPaletteDouble? inheritSplitContainer, [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public PaletteSeparatorPadding? Separator { get; } - private bool ShouldSerializeSeparator() => !Separator.IsDefault; + private bool ShouldSerializeSeparator() => !Separator!.IsDefault; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainerRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainerRedirect.cs index 840db5dcf..9b8463cdc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainerRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteSplitContainerRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,7 +27,7 @@ public class PaletteSplitContainerRedirect : PaletteDoubleRedirect /// Initial separator background style. /// Initial separator border style. /// Delegate for notifying paint requests. - public PaletteSplitContainerRedirect(PaletteRedirect? redirect, + public PaletteSplitContainerRedirect(PaletteRedirect redirect, PaletteBackStyle backContainerStyle, PaletteBorderStyle borderContainerStyle, PaletteBackStyle backSeparatorStyle, @@ -44,8 +44,9 @@ public PaletteSplitContainerRedirect(PaletteRedirect? redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - Separator.IsDefault; + Separator.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStates.cs index 619200ed7..01098282a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,7 +43,7 @@ public PaletteTrackBarPositionStates([DisallowNull] IPaletteElementColor inherit NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Position = new PaletteElementColor(inheritPosition, needPaint); + Position = new PaletteElementColor(inheritPosition!, needPaint); } #endregion @@ -52,6 +52,7 @@ public PaletteTrackBarPositionStates([DisallowNull] IPaletteElementColor inherit /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Position.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStatesOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStatesOverride.cs index ea4ec38cd..cb4221d12 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStatesOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarPositionStatesOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarRedirect.cs index 3f3b88e9a..5bb425671 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,16 +31,18 @@ public class PaletteTrackBarRedirect : Storage public PaletteTrackBarRedirect([DisallowNull] PaletteRedirect redirect, NeedPaintHandler needPaint) { - Debug.Assert(redirect != null); + // Debug.Assert() causes the null assignment warning. + // Suppressed by the null forgiving operator + Debug.Assert(redirect is not null); // Store the provided paint notification delegate NeedPaint = needPaint; // Create storage that maps onto the inherit instances - _backRedirect = new PaletteDoubleRedirect(redirect, PaletteBackStyle.PanelClient, PaletteBorderStyle.ControlClient, NeedPaint); - Tick = new PaletteElementColorRedirect(redirect, PaletteElement.TrackBarTick, NeedPaint); - Track = new PaletteElementColorRedirect(redirect, PaletteElement.TrackBarTrack, NeedPaint); - Position = new PaletteElementColorRedirect(redirect, PaletteElement.TrackBarPosition, NeedPaint); + _backRedirect = new PaletteDoubleRedirect(redirect!, PaletteBackStyle.PanelClient, PaletteBorderStyle.ControlClient, NeedPaint); + Tick = new PaletteElementColorRedirect(redirect!, PaletteElement.TrackBarTick, NeedPaint); + Track = new PaletteElementColorRedirect(redirect!, PaletteElement.TrackBarTrack, NeedPaint); + Position = new PaletteElementColorRedirect(redirect!, PaletteElement.TrackBarPosition, NeedPaint); } #endregion @@ -49,10 +51,11 @@ public PaletteTrackBarRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Back.IsDefault && - Tick.IsDefault && - Track.IsDefault && - Position.IsDefault; + Tick.IsDefault && + Track.IsDefault && + Position.IsDefault; #endregion @@ -61,7 +64,7 @@ public PaletteTrackBarRedirect([DisallowNull] PaletteRedirect redirect, /// Update the redirector with new reference. /// /// Target redirector. - public virtual void SetRedirector(PaletteRedirect? redirect) + public virtual void SetRedirector(PaletteRedirect redirect) { _backRedirect.SetRedirector(redirect); Tick.SetRedirector(redirect); diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStates.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStates.cs index 886474763..80fb08363 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -49,9 +49,9 @@ public PaletteTrackBarStates([DisallowNull] IPaletteElementColor inheritTick, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - Tick = new PaletteElementColor(inheritTick, needPaint); - Track = new PaletteElementColor(inheritTrack, needPaint); - Position = new PaletteElementColor(inheritPosition, needPaint); + Tick = new PaletteElementColor(inheritTick!, needPaint); + Track = new PaletteElementColor(inheritTrack!, needPaint); + Position = new PaletteElementColor(inheritPosition!, needPaint); } #endregion @@ -60,9 +60,10 @@ public PaletteTrackBarStates([DisallowNull] IPaletteElementColor inheritTick, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Tick.IsDefault && - Track.IsDefault && - Position.IsDefault; + Track.IsDefault && + Position.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStatesOverride.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStatesOverride.cs index 972be5188..5c9b3f0b1 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStatesOverride.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTrackBarStatesOverride.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTriple.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTriple.cs index f8752a698..79739027d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTriple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTriple.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,7 +36,7 @@ public PaletteTreeNodeTriple([DisallowNull] PaletteTripleRedirect inherit, NeedPaint = needPaint; // Create storage that maps onto the inherit instances - _paletteNode = new PaletteTriple(inherit, needPaint); + _paletteNode = new PaletteTriple(inherit!, needPaint); } #endregion @@ -45,6 +45,7 @@ public PaletteTreeNodeTriple([DisallowNull] PaletteTripleRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => _paletteNode.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTripleRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTripleRedirect.cs index fcfa02a23..df35f3c4a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTripleRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeNodeTripleRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -33,7 +33,7 @@ public PaletteTreeNodeTripleRedirect([DisallowNull] PaletteRedirect redirect, NeedPaintHandler needPaint) { Debug.Assert(redirect != null); - Node = new PaletteTripleRedirect(redirect, backStyle, borderStyle, contentStyle, needPaint); + Node = new PaletteTripleRedirect(redirect!, backStyle, borderStyle, contentStyle, needPaint); } #endregion @@ -42,6 +42,7 @@ public PaletteTreeNodeTripleRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Node.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeState.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeState.cs index 262f00ae1..374c7d151 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeState.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeState.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -39,6 +39,7 @@ public PaletteTreeState(PaletteTreeStateRedirect inherit, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && Node.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeStateRedirect.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeStateRedirect.cs index 441ddc954..e9e3b9406 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeStateRedirect.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteTreeStateRedirect.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -47,11 +47,11 @@ public PaletteTreeStateRedirect([DisallowNull] PaletteRedirect redirect, _redirect = redirect; // Create the item redirector - Node = new PaletteTripleRedirect(redirect, - PaletteBackStyle.ButtonListItem, - PaletteBorderStyle.ButtonListItem, - PaletteContentStyle.ButtonListItem, - needPaint); + Node = new PaletteTripleRedirect(redirect!, + PaletteBackStyle.ButtonListItem, + PaletteBorderStyle.ButtonListItem, + PaletteContentStyle.ButtonListItem, + needPaint); } #endregion @@ -60,6 +60,7 @@ public PaletteTreeStateRedirect([DisallowNull] PaletteRedirect redirect, /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && Node.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteWrapLabel.cs b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteWrapLabel.cs index a50769476..5178d02e5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteWrapLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Palette Controls/PaletteWrapLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,7 +34,7 @@ public PaletteWrapLabel(KryptonWrapLabel wrapLabel) { _wrapLabel = wrapLabel; _font = null; - _textColor = Color.Empty; + _textColor = GlobalStaticValues.EMPTY_COLOR; _hint = PaletteTextHint.Inherit; } @@ -44,7 +44,7 @@ public PaletteWrapLabel(KryptonLinkWrapLabel linkWrapLabel) { _linkWrapLabel = linkWrapLabel; _font = null; - _textColor = Color.Empty; + _textColor = GlobalStaticValues.EMPTY_COLOR; _hint = PaletteTextHint.Inherit; } @@ -55,9 +55,10 @@ public PaletteWrapLabel(KryptonLinkWrapLabel linkWrapLabel) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_font == null) && - (_textColor == Color.Empty) && - (_hint == PaletteTextHint.Inherit); + (_textColor == GlobalStaticValues.EMPTY_COLOR) && + (_hint == PaletteTextHint.Inherit); #endregion @@ -90,7 +91,7 @@ public virtual Font? Font [KryptonPersist(false)] [Category(@"Visuals")] [Description(@"Color for the text.")] - [KryptonDefaultColor()] + [KryptonDefaultColor] [RefreshProperties(RefreshProperties.All)] public virtual Color TextColor { diff --git a/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.Designer.cs index 0973509be..824de2307 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.Designer.cs @@ -60,6 +60,21 @@ internal Resources() { } } + /// + /// Looks up a localized string similar to <?xml version="1.0"?> + ///<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + /// <xsl:template match="KryptonPalette"> + /// <xsl:comment>Created by exporting the settings of a KryptonCustomPaletteBase instance.</xsl:comment> + /// <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + /// <xsl:comment>New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE)</xsl:comment> + /// <xsl: [rest of string was truncated]";. + /// + internal static string v19to20 { + get { + return ResourceManager.GetString("v19to20", resourceCulture); + } + } + /// /// Looks up a localized string similar to <?xml version="1.0"?> ///<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> diff --git a/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.resx b/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.resx index 83adee562..bdb928c84 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.resx +++ b/Source/Krypton Components/Krypton.Toolkit/Properties/Resources.resx @@ -117,6 +117,60 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + <?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:template match="KryptonPalette"> + <xsl:comment>Created by exporting the settings of a KryptonCustomPaletteBase instance.</xsl:comment> + <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + <xsl:comment>New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE)</xsl:comment> + <xsl:comment>Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved.<xsl:comment> + <xsl:comment>WARNING: Modifying this file may render it invalid for importing.</xsl:comment> + <KryptonPalette Version="20"> + <xsl:attribute name="Generated"> + <xsl:value-of select="@Generated"/> + </xsl:attribute> + <xsl:apply-templates select="*"/> + </KryptonPalette> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Green']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="Prefix"> + <Prefix> + <xsl:attribute name ="Type">PaletteTextHotkeyPrefix</xsl:attribute> + <xsl:attribute name ="Value"> + <xsl:value-of select="@Value"/> + </xsl:attribute> + </Prefix> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="*|@*"> + <xsl:copy> + <xsl:apply-templates select="*|@*"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> + <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonMicrosoft365Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonMicrosoft365Renderer.cs index b4f4e85bd..2cf0b5f7d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonMicrosoft365Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonMicrosoft365Renderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -125,40 +125,43 @@ public GradientItemColorsTracking(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); - var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); - - using var insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f); - using var insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); - insideBrush1.SetSigmaBellShape(0.5f); - insideBrush2.SetSigmaBellShape(0.5f); - - g.FillRectangle(insideBrush1, inset); - using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), - clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); - using (var insidePen = new Pen(insideBrush2)) + if (g is not null) { - g.DrawPath(insidePen, borderPath); - } + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); + var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); + + using var insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f); + using var insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); + insideBrush1.SetSigmaBellShape(0.5f); + insideBrush2.SetSigmaBellShape(0.5f); + + g.FillRectangle(insideBrush1, inset); + using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), + clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); + using (var insidePen = new Pen(insideBrush2)) + { + g.DrawPath(insidePen, borderPath); + } - g.FillPath(insideBrush2, borderPath); + g.FillPath(insideBrush2, borderPath); - using (var clipping = new Clipping(g, clipPath)) - { - using (var ellipsePath = new GraphicsPath()) + using (var clipping = new Clipping(g, clipPath)) { - var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using (var insideLighten = new PathGradientBrush(ellipsePath)) + using (var ellipsePath = new GraphicsPath()) { - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.White; - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using (var insideLighten = new PathGradientBrush(ellipsePath)) + { + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.White; + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } } @@ -207,19 +210,22 @@ public GradientItemColorsPressed(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); - var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); - - using var aa = new AntiAlias(g); - using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), - path2 = CreateBorderPath(rect2, _cutItemMenu), - path3 = CreateBorderPath(rect3, _cutItemMenu); - using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), - brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), - brush3 = new SolidBrush(Back1); - g.FillPath(brush1, path1); - g.FillPath(brush2, path2); - g.FillPath(brush3, path3); + if (g is not null) + { + var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); + var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); + + using var aa = new AntiAlias(g); + using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), + path2 = CreateBorderPath(rect2, _cutItemMenu), + path3 = CreateBorderPath(rect3, _cutItemMenu); + using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), + brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), + brush3 = new SolidBrush(Back1); + g.FillPath(brush1, path1); + g.FillPath(brush2, path2); + g.FillPath(brush3, path3); + } } } @@ -244,24 +250,27 @@ public GradientItemColorsChecked(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - - using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); - insideBrush.SetSigmaBellShape(0.5f); - g.FillRectangle(insideBrush, inset); - - using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); - using var ellipsePath = new GraphicsPath(); - var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using var insideLighten = new PathGradientBrush(ellipsePath); - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.FromArgb(96, Color.White); - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + + using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); + insideBrush.SetSigmaBellShape(0.5f); + g.FillRectangle(insideBrush, inset); + + using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); + using var ellipsePath = new GraphicsPath(); + var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using var insideLighten = new PathGradientBrush(ellipsePath); + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.FromArgb(96, Color.White); + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } @@ -323,20 +332,20 @@ static KryptonMicrosoft365Renderer() { _stripBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.5f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.5f, 0.8f, 1.0f] }; _separatorDarkBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.2f, 1f, 0.2f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.2f, 1f, 0.2f] }; _separatorLightBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 0.1f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.1f, 0.6f, 0.1f] }; } @@ -361,9 +370,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); @@ -372,7 +379,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Set correct color of the arrow Color color1; Color color2; - if (!e.Item.Enabled) + if (!e.Item!.Enabled) { color1 = _disabled; color2 = _disabled; @@ -418,7 +425,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -432,7 +441,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -725,7 +736,9 @@ protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -745,7 +758,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -1062,50 +1075,53 @@ private void RenderToolButtonBackground(Graphics? g, ToolStripButton button, ToolStrip toolstrip) { - // We only draw a background if the item is selected or being pressed - if (button.Enabled) + if (g is not null) { - // Ensure we have cached the objects we need - UpdateCache(); - - if (button.Checked) + // We only draw a background if the item is selected or being pressed + if (button.Enabled) { - if (button.Pressed) - { - DrawGradientToolItem(g, button, _gradientPressed); - } - else if (button.Selected) + // Ensure we have cached the objects we need + UpdateCache(); + + if (button.Checked) { - DrawGradientToolItem(g, button, _gradientCheckedTracking); + if (button.Pressed) + { + DrawGradientToolItem(g, button, _gradientPressed); + } + else if (button.Selected) + { + DrawGradientToolItem(g, button, _gradientCheckedTracking); + } + else + { + DrawGradientToolItem(g, button, _gradientChecked); + } } else { - DrawGradientToolItem(g, button, _gradientChecked); + if (button.Pressed) + { + DrawGradientToolItem(g, button, _gradientPressed); + } + else if (button.Selected) + { + DrawGradientToolItem(g, button, _gradientTracking); + } } } else { - if (button.Pressed) + if (button.Selected) { - DrawGradientToolItem(g, button, _gradientPressed); - } - else if (button.Selected) - { - DrawGradientToolItem(g, button, _gradientTracking); - } - } - } - else - { - if (button.Selected) - { - // Get the mouse position in tool strip coordinates - Point mousePos = toolstrip.PointToClient(Control.MousePosition); + // Get the mouse position in tool strip coordinates + Point mousePos = toolstrip.PointToClient(Control.MousePosition); - // If the mouse is not in the item area, then draw disabled - if (!button.Bounds.Contains(mousePos)) - { - DrawGradientToolItem(g, button, _disabledItem); + // If the mouse is not in the item area, then draw disabled + if (!button.Bounds.Contains(mousePos)) + { + DrawGradientToolItem(g, button, _disabledItem); + } } } } @@ -1115,32 +1131,36 @@ private void RenderToolDropButtonBackground(Graphics? g, ToolStripItem item, ToolStrip toolstrip) { - // We only draw a background if the item is selected or being pressed - if (item.Selected || item.Pressed) + + if (g is not null) { - if (item.Enabled) + // We only draw a background if the item is selected or being pressed + if (item.Selected || item.Pressed) { - if (item.Pressed) + if (item.Enabled) { - DrawContextMenuHeader(g, item); + if (item.Pressed) + { + DrawContextMenuHeader(g, item); + } + else + { + // Ensure we have cached the objects we need + UpdateCache(); + + DrawGradientToolItem(g, item, _gradientTracking); + } } else { - // Ensure we have cached the objects we need - UpdateCache(); + // Get the mouse position in tool strip coordinates + Point mousePos = toolstrip.PointToClient(Control.MousePosition); - DrawGradientToolItem(g, item, _gradientTracking); - } - } - else - { - // Get the mouse position in tool strip coordinates - Point mousePos = toolstrip.PointToClient(Control.MousePosition); - - // If the mouse is not in the item area, then draw disabled - if (!item.Bounds.Contains(mousePos)) - { - DrawGradientToolItem(g, item, _disabledItem); + // If the mouse is not in the item area, then draw disabled + if (!item.Bounds.Contains(mousePos)) + { + DrawGradientToolItem(g, item, _disabledItem); + } } } } @@ -1152,58 +1172,61 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // The X offset to draw the split line - int splitOffset; - - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else - { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); - // Draw the normal button area background - colorsButton.DrawBack(g, backRectButton); + // The X offset to draw the split line + int splitOffset; - // Draw the drop button area background - colorsDrop.DrawBack(g, backRectDrop); + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); + // Draw the normal button area background + colorsButton.DrawBack(g, backRectButton); + + // Draw the drop button area background + colorsDrop.DrawBack(g, backRectDrop); + + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - colorsButton.DrawBorder(g, backRect); + // Draw the border of the entire item + colorsButton.DrawBorder(g, backRect); + } } } @@ -1252,13 +1275,13 @@ private void RenderToolSplitButtonBackground(Graphics g, switch (splitButton) { case { Pressed: false, ButtonPressed: true }: - DrawGradientToolSplitItem(g, splitButton, _gradientPressed, _gradientTracking, _gradientSplit); + DrawGradientToolSplitItem(g, splitButton, _gradientPressed, _gradientTracking, _gradientSplit!); break; case { Pressed: true, ButtonPressed: false }: DrawContextMenuHeader(g, splitButton); break; default: - DrawGradientToolSplitItem(g, splitButton, _gradientTracking, _gradientTracking, _gradientSplit); + DrawGradientToolSplitItem(g, splitButton, _gradientTracking, _gradientTracking, _gradientSplit!); break; } } @@ -1309,7 +1332,7 @@ private void DrawContextMenuSeparator(Graphics g, var b = rect.Bottom; using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, t, l, b); } else @@ -1319,7 +1342,7 @@ private void DrawContextMenuSeparator(Graphics g, var r = rect.Right - (rtl ? horizontalInset : 0); using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, y, r, y); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2007Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2007Renderer.cs index d829fd01c..a5defd553 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2007Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2007Renderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -235,8 +235,8 @@ static KryptonOffice2007Renderer() // One time creation of the blend for the status strip gradient brush _statusStripBlend = new Blend { - Positions = new[] { 0.0f, 0.25f, 0.25f, 0.57f, 0.86f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 1.0f, 0.4f, 0.0f, 0.95f } + Positions = [0.0f, 0.25f, 0.25f, 0.57f, 0.86f, 1.0f], + Factors = [0.1f, 0.6f, 1.0f, 0.4f, 0.0f, 0.95f] }; } @@ -261,7 +261,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly @@ -269,7 +269,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) RectangleF boundsF = arrowPath.GetBounds(); boundsF.Inflate(1f, 1f); - Color color1 = e.Item.Enabled ? KCT.ToolStripText : _disabled; + Color color1 = e.Item!.Enabled ? KCT.ToolStripText : _disabled; Color color2 = e.Item.Enabled ? CommonHelper.WhitenColor(KCT.ToolStripText, 0.7f, 0.7f, 0.7f) : _disabled; // Use gradient angle to match the arrow direction @@ -299,7 +299,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -313,7 +315,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -558,7 +562,9 @@ protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -578,7 +584,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -716,7 +722,7 @@ protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) // We do not paint the top two pixel lines, so are drawn by the status strip border render method var backRect = new RectangleF(0, 1.5f, e.ToolStrip.Width, e.ToolStrip.Height - 2); - Form owner = e.ToolStrip.FindForm(); + Form? owner = e.ToolStrip.FindForm(); // Check if the status strip is inside a KryptonForm and using the Office 2007 renderer, in // which case we want to extend the drawing down into the border area for an integrated look @@ -728,13 +734,8 @@ protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) ) { // Get the window borders - - // Finally check that the actual form is using custom chrome - if (kryptonForm.ApplyCustomChrome) - { - // Extend down into the bottom border - backRect.Height += kryptonForm.RealWindowBorders.Bottom; - } + // Extend down into the bottom border + backRect.Height += kryptonForm.RealWindowBorders.Bottom; } // Cannot paint a zero sized area @@ -1023,86 +1024,92 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; - - // The X offset to draw the split line - int splitOffset; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else - { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); - // Draw the normal button area background - DrawGradientBack(g, backRectButton, colorsButton); + // The X offset to draw the split line + int splitOffset; + + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Draw the drop button area background - DrawGradientBack(g, backRectDrop, colorsDrop); + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); + // Draw the normal button area background + DrawGradientBack(g, backRectButton, colorsButton); - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Sigma curve, so go from color1 to color2 and back to color1 again - splitBrush.SetSigmaBellShape(0.5f); + // Draw the drop button area background + DrawGradientBack(g, backRectDrop, colorsDrop); - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Sigma curve, so go from color1 to color2 and back to color1 again + splitBrush.SetSigmaBellShape(0.5f); + + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - DrawGradientBorder(g, backRect, colorsButton); + // Draw the border of the entire item + DrawGradientBorder(g, backRect, colorsButton); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_TOOL_ITEM_MENU), - insidePath = CreateInsideBorderPath(itemRect, CUT_TOOL_ITEM_MENU), - clipPath = CreateClipBorderPath(itemRect, CUT_TOOL_ITEM_MENU); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = - new SolidBrush(CommonHelper.WhitenColor(KCT.ToolStripDropDownBackground, 1.02f, 1.02f, 1.02f))) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_TOOL_ITEM_MENU), + insidePath = CreateInsideBorderPath(itemRect, CUT_TOOL_ITEM_MENU), + clipPath = CreateClipBorderPath(itemRect, CUT_TOOL_ITEM_MENU); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = + new SolidBrush(CommonHelper.WhitenColor(KCT.ToolStripDropDownBackground, 1.02f, 1.02f, 1.02f))) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1182,48 +1189,51 @@ private static void DrawGradientBack(Graphics? g, Rectangle backRect, GradientItemColors colors) { - // Reduce rect draw drawing inside the border - backRect.Inflate(-1, -1); - - var y2 = backRect.Height / 2; - var backRect1 = backRect with { Height = y2 }; - var backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; - Rectangle backRect1I = backRect1; - Rectangle backRect2I = backRect2; - backRect1I.Inflate(1, 1); - backRect2I.Inflate(1, 1); - - using (LinearGradientBrush insideBrush1 = - new LinearGradientBrush(backRect1I, colors.InsideTop1, colors.InsideTop2, 90f), - insideBrush2 = new LinearGradientBrush(backRect2I, colors.InsideBottom1, - colors.InsideBottom2, 90f)) - { - g.FillRectangle(insideBrush1, backRect1); - g.FillRectangle(insideBrush2, backRect2); - } - - y2 = backRect.Height / 2; - backRect1 = backRect with { Height = y2 }; - backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; - backRect1I = backRect1; - backRect2I = backRect2; - backRect1I.Inflate(1, 1); - backRect2I.Inflate(1, 1); - - using (LinearGradientBrush fillBrush1 = - new LinearGradientBrush(backRect1I, colors.FillTop1, colors.FillTop2, 90f), - fillBrush2 = new LinearGradientBrush(backRect2I, colors.FillBottom1, - colors.FillBottom2, 90f)) + if (g is not null) { - // Reduce rect one more time for the innermost drawing + // Reduce rect draw drawing inside the border backRect.Inflate(-1, -1); + var y2 = backRect.Height / 2; + var backRect1 = backRect with { Height = y2 }; + var backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; + Rectangle backRect1I = backRect1; + Rectangle backRect2I = backRect2; + backRect1I.Inflate(1, 1); + backRect2I.Inflate(1, 1); + + using (LinearGradientBrush insideBrush1 = + new LinearGradientBrush(backRect1I, colors.InsideTop1, colors.InsideTop2, 90f), + insideBrush2 = new LinearGradientBrush(backRect2I, colors.InsideBottom1, + colors.InsideBottom2, 90f)) + { + g.FillRectangle(insideBrush1, backRect1); + g.FillRectangle(insideBrush2, backRect2); + } + y2 = backRect.Height / 2; backRect1 = backRect with { Height = y2 }; backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; + backRect1I = backRect1; + backRect2I = backRect2; + backRect1I.Inflate(1, 1); + backRect2I.Inflate(1, 1); + + using (LinearGradientBrush fillBrush1 = + new LinearGradientBrush(backRect1I, colors.FillTop1, colors.FillTop2, 90f), + fillBrush2 = new LinearGradientBrush(backRect2I, colors.FillBottom1, + colors.FillBottom2, 90f)) + { + // Reduce rect one more time for the innermost drawing + backRect.Inflate(-1, -1); + + y2 = backRect.Height / 2; + backRect1 = backRect with { Height = y2 }; + backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; - g.FillRectangle(fillBrush1, backRect1); - g.FillRectangle(fillBrush2, backRect2); + g.FillRectangle(fillBrush1, backRect1); + g.FillRectangle(fillBrush2, backRect2); + } } } @@ -1231,22 +1241,25 @@ private static void DrawGradientBorder(Graphics? g, Rectangle backRect, GradientItemColors colors) { - // Drawing with anti aliasing to create smoother appearance - using var aa = new AntiAlias(g); - Rectangle backRectI = backRect; - backRectI.Inflate(1, 1); - - // Finally draw the border around the menu item - using var borderBrush = - new LinearGradientBrush(backRectI, colors.Border1, colors.Border2, 90f); - // Sigma curve, so go from color1 to color2 and back to color1 again - borderBrush.SetSigmaBellShape(0.5f); - - // Convert the brush to a pen for DrawPath call - using var borderPen = new Pen(borderBrush); - // Create border path around the entire item - using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); - g.DrawPath(borderPen, borderPath); + if (g is not null) + { + // Drawing with anti aliasing to create smoother appearance + using var aa = new AntiAlias(g); + Rectangle backRectI = backRect; + backRectI.Inflate(1, 1); + + // Finally draw the border around the menu item + using var borderBrush = + new LinearGradientBrush(backRectI, colors.Border1, colors.Border2, 90f); + // Sigma curve, so go from color1 to color2 and back to color1 again + borderBrush.SetSigmaBellShape(0.5f); + + // Convert the brush to a pen for DrawPath call + using var borderPen = new Pen(borderBrush); + // Create border path around the entire item + using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); + g.DrawPath(borderPen, borderPath); + } } private void DrawGripGlyph(Graphics g, diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2010Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2010Renderer.cs index 7cb9a84a3..e8dcd82e7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2010Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2010Renderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -58,18 +58,21 @@ public virtual void DrawItem(Graphics? g, Rectangle rect) public virtual void DrawBorder(Graphics? g, Rectangle rect) { - // Drawing with anti aliasing to create smoother appearance - using var aa = new AntiAlias(g); - Rectangle backRectI = rect; - backRectI.Inflate(1, 1); - - // Finally draw the border around the menu item - using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); - // Convert the brush to a pen for DrawPath call - using var borderPen = new Pen(borderBrush); - // Create border path around the entire item - using GraphicsPath borderPath = CreateBorderPath(rect, CUT_ITEM_MENU); - g.DrawPath(borderPen, borderPath); + if (g is not null) + { + // Drawing with anti aliasing to create smoother appearance + using var aa = new AntiAlias(g); + Rectangle backRectI = rect; + backRectI.Inflate(1, 1); + + // Finally draw the border around the menu item + using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); + // Convert the brush to a pen for DrawPath call + using var borderPen = new Pen(borderBrush); + // Create border path around the entire item + using GraphicsPath borderPath = CreateBorderPath(rect, CUT_ITEM_MENU); + g.DrawPath(borderPen, borderPath); + } } public abstract void DrawBack(Graphics? g, Rectangle rect); @@ -124,40 +127,43 @@ public GradientItemColorsTracking(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); - var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); - - using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), - insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); - insideBrush1.SetSigmaBellShape(0.5f); - insideBrush2.SetSigmaBellShape(0.5f); - - g.FillRectangle(insideBrush1, inset); - using GraphicsPath borderPath = CreateBorderPath(insetC, CUT_INNER_ITEM_MENU), - clipPath = CreateBorderPath(insetB, CUT_INNER_ITEM_MENU); - using (var insidePen = new Pen(insideBrush2)) + if (g is not null) { - g.DrawPath(insidePen, borderPath); - } + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); + var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); + + using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), + insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); + insideBrush1.SetSigmaBellShape(0.5f); + insideBrush2.SetSigmaBellShape(0.5f); + + g.FillRectangle(insideBrush1, inset); + using GraphicsPath borderPath = CreateBorderPath(insetC, CUT_INNER_ITEM_MENU), + clipPath = CreateBorderPath(insetB, CUT_INNER_ITEM_MENU); + using (var insidePen = new Pen(insideBrush2)) + { + g.DrawPath(insidePen, borderPath); + } - g.FillPath(insideBrush2, borderPath); + g.FillPath(insideBrush2, borderPath); - using (var clipping = new Clipping(g, clipPath)) - { - using (var ellipsePath = new GraphicsPath()) + using (var clipping = new Clipping(g, clipPath)) { - var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using (var insideLighten = new PathGradientBrush(ellipsePath)) + using (var ellipsePath = new GraphicsPath()) { - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.White; - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using (var insideLighten = new PathGradientBrush(ellipsePath)) + { + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.White; + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } } @@ -207,19 +213,22 @@ public GradientItemColorsPressed(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); - var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); - - using var aa = new AntiAlias(g); - using GraphicsPath path1 = CreateBorderPath(rect, CUT_ITEM_MENU), - path2 = CreateBorderPath(rect2, CUT_ITEM_MENU), - path3 = CreateBorderPath(rect3, CUT_ITEM_MENU); - using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), - brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), - brush3 = new SolidBrush(Back1); - g.FillPath(brush1, path1); - g.FillPath(brush2, path2); - g.FillPath(brush3, path3); + if (g is not null) + { + var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); + var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); + + using var aa = new AntiAlias(g); + using GraphicsPath path1 = CreateBorderPath(rect, CUT_ITEM_MENU), + path2 = CreateBorderPath(rect2, CUT_ITEM_MENU), + path3 = CreateBorderPath(rect3, CUT_ITEM_MENU); + using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), + brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), + brush3 = new SolidBrush(Back1); + g.FillPath(brush1, path1); + g.FillPath(brush2, path2); + g.FillPath(brush3, path3); + } } } @@ -244,24 +253,27 @@ public GradientItemColorsChecked(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - - using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); - insideBrush.SetSigmaBellShape(0.5f); - g.FillRectangle(insideBrush, inset); - - using GraphicsPath borderPath = CreateBorderPath(inset, CUT_INNER_ITEM_MENU); - using var ellipsePath = new GraphicsPath(); - var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using var insideLighten = new PathGradientBrush(ellipsePath); - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.FromArgb(96, Color.White); - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + + using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); + insideBrush.SetSigmaBellShape(0.5f); + g.FillRectangle(insideBrush, inset); + + using GraphicsPath borderPath = CreateBorderPath(inset, CUT_INNER_ITEM_MENU); + using var ellipsePath = new GraphicsPath(); + var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using var insideLighten = new PathGradientBrush(ellipsePath); + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.FromArgb(96, Color.White); + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } @@ -324,20 +336,20 @@ static KryptonOffice2010Renderer() { _stripBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.5f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.5f, 0.8f, 1.0f] }; _separatorDarkBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.2f, 1f, 0.2f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.2f, 1f, 0.2f] }; _separatorLightBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 0.1f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.1f, 0.6f, 0.1f] }; } @@ -362,9 +374,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); @@ -373,7 +383,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Set correct color of the arrow Color color1; Color color2; - if (!e.Item.Enabled) + if (!e.Item!.Enabled) { color1 = _disabled; color2 = _disabled; @@ -419,7 +429,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -433,7 +445,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -726,7 +740,9 @@ protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -746,7 +762,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -1152,82 +1168,88 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; - - // The X offset to draw the split line - int splitOffset; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) - { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_ITEM_MENU); - // Draw the normal button area background - colorsButton.DrawBack(g, backRectButton); + // The X offset to draw the split line + int splitOffset; - // Draw the drop button area background - colorsDrop.DrawBack(g, backRectDrop); + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_ITEM_MENU); + // Draw the normal button area background + colorsButton.DrawBack(g, backRectButton); + + // Draw the drop button area background + colorsDrop.DrawBack(g, backRectDrop); + + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - colorsButton.DrawBorder(g, backRect); + // Draw the border of the entire item + colorsButton.DrawBorder(g, backRect); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_HEADER_MENU), - insidePath = CreateInsideBorderPath(itemRect, CUT_HEADER_MENU), - clipPath = CreateClipBorderPath(itemRect, CUT_HEADER_MENU); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_HEADER_MENU), + insidePath = CreateInsideBorderPath(itemRect, CUT_HEADER_MENU), + clipPath = CreateClipBorderPath(itemRect, CUT_HEADER_MENU); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1311,7 +1333,7 @@ private void DrawContextMenuSeparator(Graphics g, var b = rect.Bottom; using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, t, l, b); } else @@ -1321,7 +1343,7 @@ private void DrawContextMenuSeparator(Graphics g, var r = rect.Right - (rtl ? horizontalInset : 0); using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, y, r, y); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2013Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2013Renderer.cs index 18d53f076..e66fecb3d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2013Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonOffice2013Renderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -58,18 +58,21 @@ public virtual void DrawItem(Graphics? g, Rectangle rect) public virtual void DrawBorder(Graphics? g, Rectangle rect) { - // Drawing with anti aliasing to create smoother appearance - using var aa = new AntiAlias(g); - Rectangle backRectI = rect; - backRectI.Inflate(1, 1); - - // Finally draw the border around the menu item - using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); - // Convert the brush to a pen for DrawPath call - using var borderPen = new Pen(borderBrush); - // Create border path around the entire item - using GraphicsPath borderPath = CreateBorderPath(rect, _cutItemMenu); - g.DrawPath(borderPen, borderPath); + if (g is not null) + { + // Drawing with anti aliasing to create smoother appearance + using var aa = new AntiAlias(g); + Rectangle backRectI = rect; + backRectI.Inflate(1, 1); + + // Finally draw the border around the menu item + using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); + // Convert the brush to a pen for DrawPath call + using var borderPen = new Pen(borderBrush); + // Create border path around the entire item + using GraphicsPath borderPath = CreateBorderPath(rect, _cutItemMenu); + g.DrawPath(borderPen, borderPath); + } } public abstract void DrawBack(Graphics? g, Rectangle rect); @@ -124,40 +127,43 @@ public GradientItemColorsTracking(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); - var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); - - using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), - insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); - insideBrush1.SetSigmaBellShape(0.5f); - insideBrush2.SetSigmaBellShape(0.5f); - - g.FillRectangle(insideBrush1, inset); - using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), - clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); - using (var insidePen = new Pen(insideBrush2)) + if (g is not null) { - g.DrawPath(insidePen, borderPath); - } + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); + var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); + + using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), + insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); + insideBrush1.SetSigmaBellShape(0.5f); + insideBrush2.SetSigmaBellShape(0.5f); + + g.FillRectangle(insideBrush1, inset); + using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), + clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); + using (var insidePen = new Pen(insideBrush2)) + { + g.DrawPath(insidePen, borderPath); + } - g.FillPath(insideBrush2, borderPath); + g.FillPath(insideBrush2, borderPath); - using (var clipping = new Clipping(g, clipPath)) - { - using (var ellipsePath = new GraphicsPath()) + using (var clipping = new Clipping(g, clipPath)) { - var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using (var insideLighten = new PathGradientBrush(ellipsePath)) + using (var ellipsePath = new GraphicsPath()) { - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.White; - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using (var insideLighten = new PathGradientBrush(ellipsePath)) + { + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.White; + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } } @@ -207,19 +213,22 @@ public GradientItemColorsPressed(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); - var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); - - using var aa = new AntiAlias(g); - using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), - path2 = CreateBorderPath(rect2, _cutItemMenu), - path3 = CreateBorderPath(rect3, _cutItemMenu); - using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), - brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), - brush3 = new SolidBrush(Back1); - g.FillPath(brush1, path1); - g.FillPath(brush2, path2); - g.FillPath(brush3, path3); + if (g is not null) + { + var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); + var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); + + using var aa = new AntiAlias(g); + using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), + path2 = CreateBorderPath(rect2, _cutItemMenu), + path3 = CreateBorderPath(rect3, _cutItemMenu); + using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), + brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), + brush3 = new SolidBrush(Back1); + g.FillPath(brush1, path1); + g.FillPath(brush2, path2); + g.FillPath(brush3, path3); + } } } @@ -244,24 +253,27 @@ public GradientItemColorsChecked(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - - using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); - insideBrush.SetSigmaBellShape(0.5f); - g.FillRectangle(insideBrush, inset); - - using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); - using var ellipsePath = new GraphicsPath(); - var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using var insideLighten = new PathGradientBrush(ellipsePath); - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.FromArgb(96, Color.White); - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + + using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); + insideBrush.SetSigmaBellShape(0.5f); + g.FillRectangle(insideBrush, inset); + + using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); + using var ellipsePath = new GraphicsPath(); + var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using var insideLighten = new PathGradientBrush(ellipsePath); + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.FromArgb(96, Color.White); + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } @@ -323,20 +335,20 @@ static KryptonOffice2013Renderer() { _stripBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.5f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.5f, 0.8f, 1.0f] }; _separatorDarkBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.2f, 1f, 0.2f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.2f, 1f, 0.2f] }; _separatorLightBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 0.1f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.1f, 0.6f, 0.1f] }; } @@ -361,9 +373,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); @@ -372,7 +382,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Set correct color of the arrow Color color1; Color color2; - if (!e.Item.Enabled) + if (!e.Item!.Enabled) { color1 = _disabled; color2 = _disabled; @@ -418,7 +428,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -432,7 +444,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -727,7 +741,9 @@ protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -747,7 +763,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -1154,82 +1170,88 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; - - // The X offset to draw the split line - int splitOffset; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) - { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); - // Draw the normal button area background - colorsButton.DrawBack(g, backRectButton); + // The X offset to draw the split line + int splitOffset; - // Draw the drop button area background - colorsDrop.DrawBack(g, backRectDrop); + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); + // Draw the normal button area background + colorsButton.DrawBack(g, backRectButton); + + // Draw the drop button area background + colorsDrop.DrawBack(g, backRectDrop); + + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - colorsButton.DrawBorder(g, backRect); + // Draw the border of the entire item + colorsButton.DrawBorder(g, backRect); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), - insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), - clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), + insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), + clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1311,7 +1333,7 @@ private void DrawContextMenuSeparator(Graphics g, var b = rect.Bottom; using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, t, l, b); } else @@ -1321,7 +1343,7 @@ private void DrawContextMenuSeparator(Graphics g, var r = rect.Right - (rtl ? horizontalInset : 0); using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, y, r, y); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonProfessionalRenderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonProfessionalRenderer.cs index e7d7ed4fd..59d0bf367 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonProfessionalRenderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonProfessionalRenderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,8 +25,8 @@ public class KryptonProfessionalRenderer : ToolStripProfessionalRenderer public KryptonProfessionalRenderer([DisallowNull] KryptonColorTable kct) : base(kct) { - Debug.Assert(kct != null); - KCT = kct; + Debug.Assert(kct is not null); + KCT = kct ?? throw new ArgumentNullException(nameof(kct)); } #endregion @@ -49,7 +49,7 @@ protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) if (e.Item.GetType().ToString() == "System.Windows.Forms.MdiControlStrip+ControlBoxMenuItem") { // Get access to the owning form of the mdi control strip - if (e.ToolStrip.Parent.TopLevelControl is Form f) + if (e.ToolStrip!.Parent!.TopLevelControl is Form f) { // Get the mdi control strip instance PropertyInfo? piMCS = typeof(Form).GetProperty(@"MdiControlStrip", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.GetField)!; @@ -104,11 +104,11 @@ protected override void OnRenderItemImage(ToolStripItemImageRenderEventArgs e) OldColor = transparentColor, NewColor = Color.Transparent }; - attribs.SetRemapTable(new[] { remap }); + attribs.SetRemapTable([remap]); // Phew, actually draw the darn thing e.Graphics.DrawImage(paletteImage, e.ImageRectangle, - 0, 0, e.Image.Width, e.Image.Height, + 0, 0, e.Image!.Width, e.Image.Height, GraphicsUnit.Pixel, attribs); // Do not let base class draw system defined image diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonSparkleRenderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonSparkleRenderer.cs index 64e9500a0..a3b9a7c17 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonSparkleRenderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonSparkleRenderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -108,8 +108,8 @@ static KryptonSparkleRenderer() // One time creation of the blend for the status strip gradient brush _statusStripBlend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.33f, 0.33f, 1.0f } + Factors = [0.0f, 0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.33f, 0.33f, 1.0f] }; } @@ -136,7 +136,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Create a path that is used to fill the arrow if (e != null) { - using GraphicsPath arrowPath = CreateArrowPath(e.Item, + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly @@ -149,7 +149,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) Color color2 = _disabled; // If not disabled then need to decide on actual colors - if (e.Item.Enabled) + if (e.Item!.Enabled) { // If the arrow is on a context menu if ((e.Item.Owner is ContextMenuStrip or ToolStripDropDownMenu) || (e.Item.OwnerItem is ToolStripOverflowButton)) @@ -211,7 +211,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -225,7 +227,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -495,7 +499,9 @@ protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -515,7 +521,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -662,16 +668,11 @@ protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) ) { // Get the window borders - - // Finally check that the actual form is using custom chrome - if (kryptonForm.ApplyCustomChrome) - { - // Extend down into the bottom border - Padding borders = kryptonForm.RealWindowBorders; - backRect.Height += borders.Bottom; - backRect.Width += borders.Horizontal; - backRect.X -= borders.Left; - } + // Extend down into the bottom border + Padding borders = kryptonForm.RealWindowBorders; + backRect.Height += borders.Bottom; + backRect.Width += borders.Horizontal; + backRect.X -= borders.Left; } // Cannot paint a zero sized area diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonStandardRenderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonStandardRenderer.cs index 4de80c7f7..841cbadc3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonStandardRenderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonStandardRenderer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2007Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2007Renderer.cs index e7775bccc..251827cab 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2007Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2007Renderer.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -231,8 +231,8 @@ static KryptonVisualStudio2010With2007Renderer() // One time creation of the blend for the status strip gradient brush _statusStripBlend = new Blend { - Positions = new[] { 0.0f, 0.25f, 0.25f, 0.57f, 0.86f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 1.0f, 0.4f, 0.0f, 0.95f } + Positions = [0.0f, 0.25f, 0.25f, 0.57f, 0.86f, 1.0f], + Factors = [0.1f, 0.6f, 1.0f, 0.4f, 0.0f, 0.95f] }; } @@ -257,16 +257,19 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); boundsF.Inflate(1f, 1f); - Color color1 = e.Item.Enabled ? KCT.ToolStripText : _disabled; - Color color2 = e.Item.Enabled ? CommonHelper.WhitenColor(KCT.ToolStripText, 0.7f, 0.7f, 0.7f) : _disabled; + Color color1 = e.Item!.Enabled + ? KCT.ToolStripText + : _disabled; + + Color color2 = e.Item.Enabled + ? CommonHelper.WhitenColor(KCT.ToolStripText, 0.7f, 0.7f, 0.7f) + : _disabled; // Use gradient angle to match the arrow direction var angle = e.Direction switch @@ -295,7 +298,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -309,7 +314,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -554,7 +561,9 @@ protected override void OnRenderMenuItemBackground(ToolStripItemRenderEventArgs /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -574,7 +583,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -712,7 +721,7 @@ protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) // We do not paint the top two pixel lines, so are drawn by the status strip border render method var backRect = new RectangleF(0, 1.5f, e.ToolStrip.Width, e.ToolStrip.Height - 2); - Form owner = e.ToolStrip.FindForm(); + Form? owner = e.ToolStrip.FindForm(); // Check if the status strip is inside a KryptonForm and using the Office 2007 renderer, in // which case we want to extend the drawing down into the border area for an integrated look @@ -724,13 +733,8 @@ protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e) ) { // Get the window borders - - // Finally check that the actual form is using custom chrome - if (kryptonForm.ApplyCustomChrome) - { - // Extend down into the bottom border - backRect.Height += kryptonForm.RealWindowBorders.Bottom; - } + // Extend down into the bottom border + backRect.Height += kryptonForm.RealWindowBorders.Bottom; } // Cannot paint a zero sized area @@ -1019,86 +1023,92 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // The X offset to draw the split line - int splitOffset; - - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) - { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); - // Draw the normal button area background - DrawGradientBack(g, backRectButton, colorsButton); + // The X offset to draw the split line + int splitOffset; - // Draw the drop button area background - DrawGradientBack(g, backRectDrop, colorsDrop); + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Sigma curve, so go from color1 to color2 and back to color1 again - splitBrush.SetSigmaBellShape(0.5f); + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); + // Draw the normal button area background + DrawGradientBack(g, backRectButton, colorsButton); - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Draw the drop button area background + DrawGradientBack(g, backRectDrop, colorsDrop); + + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Sigma curve, so go from color1 to color2 and back to color1 again + splitBrush.SetSigmaBellShape(0.5f); + + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - DrawGradientBorder(g, backRect, colorsButton); + // Draw the border of the entire item + DrawGradientBorder(g, backRect, colorsButton); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_TOOL_ITEM_MENU), - insidePath = CreateInsideBorderPath(itemRect, CUT_TOOL_ITEM_MENU), - clipPath = CreateClipBorderPath(itemRect, CUT_TOOL_ITEM_MENU); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = - new SolidBrush(CommonHelper.WhitenColor(KCT.ToolStripDropDownBackground, 1.02f, 1.02f, 1.02f))) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_TOOL_ITEM_MENU), + insidePath = CreateInsideBorderPath(itemRect, CUT_TOOL_ITEM_MENU), + clipPath = CreateClipBorderPath(itemRect, CUT_TOOL_ITEM_MENU); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = + new SolidBrush(CommonHelper.WhitenColor(KCT.ToolStripDropDownBackground, 1.02f, 1.02f, 1.02f))) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1178,48 +1188,51 @@ private static void DrawGradientBack(Graphics? g, Rectangle backRect, GradientItemColors colors) { - // Reduce rect draw drawing inside the border - backRect.Inflate(-1, -1); - - var y2 = backRect.Height / 2; - var backRect1 = backRect with { Height = y2 }; - var backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; - Rectangle backRect1I = backRect1; - Rectangle backRect2I = backRect2; - backRect1I.Inflate(1, 1); - backRect2I.Inflate(1, 1); - - using (LinearGradientBrush insideBrush1 = - new LinearGradientBrush(backRect1I, colors.InsideTop1, colors.InsideTop2, 90f), - insideBrush2 = new LinearGradientBrush(backRect2I, colors.InsideBottom1, - colors.InsideBottom2, 90f)) + if (g is not null) { - g.FillRectangle(insideBrush1, backRect1); - g.FillRectangle(insideBrush2, backRect2); - } - - y2 = backRect.Height / 2; - backRect1 = backRect with { Height = y2 }; - backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; - backRect1I = backRect1; - backRect2I = backRect2; - backRect1I.Inflate(1, 1); - backRect2I.Inflate(1, 1); - - using (LinearGradientBrush fillBrush1 = - new LinearGradientBrush(backRect1I, colors.FillTop1, colors.FillTop2, 90f), - fillBrush2 = new LinearGradientBrush(backRect2I, colors.FillBottom1, - colors.FillBottom2, 90f)) - { - // Reduce rect one more time for the innermost drawing + // Reduce rect draw drawing inside the border backRect.Inflate(-1, -1); + var y2 = backRect.Height / 2; + var backRect1 = backRect with { Height = y2 }; + var backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; + Rectangle backRect1I = backRect1; + Rectangle backRect2I = backRect2; + backRect1I.Inflate(1, 1); + backRect2I.Inflate(1, 1); + + using (LinearGradientBrush insideBrush1 = + new LinearGradientBrush(backRect1I, colors.InsideTop1, colors.InsideTop2, 90f), + insideBrush2 = new LinearGradientBrush(backRect2I, colors.InsideBottom1, + colors.InsideBottom2, 90f)) + { + g.FillRectangle(insideBrush1, backRect1); + g.FillRectangle(insideBrush2, backRect2); + } + y2 = backRect.Height / 2; backRect1 = backRect with { Height = y2 }; backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; + backRect1I = backRect1; + backRect2I = backRect2; + backRect1I.Inflate(1, 1); + backRect2I.Inflate(1, 1); + + using (LinearGradientBrush fillBrush1 = + new LinearGradientBrush(backRect1I, colors.FillTop1, colors.FillTop2, 90f), + fillBrush2 = new LinearGradientBrush(backRect2I, colors.FillBottom1, + colors.FillBottom2, 90f)) + { + // Reduce rect one more time for the innermost drawing + backRect.Inflate(-1, -1); + + y2 = backRect.Height / 2; + backRect1 = backRect with { Height = y2 }; + backRect2 = backRect with { Y = backRect.Y + y2, Height = backRect.Height - y2 }; - g.FillRectangle(fillBrush1, backRect1); - g.FillRectangle(fillBrush2, backRect2); + g.FillRectangle(fillBrush1, backRect1); + g.FillRectangle(fillBrush2, backRect2); + } } } @@ -1227,22 +1240,25 @@ private static void DrawGradientBorder(Graphics? g, Rectangle backRect, GradientItemColors colors) { - // Drawing with anti aliasing to create smoother appearance - using var aa = new AntiAlias(g); - Rectangle backRectI = backRect; - backRectI.Inflate(1, 1); - - // Finally draw the border around the menu item - using var borderBrush = - new LinearGradientBrush(backRectI, colors.Border1, colors.Border2, 90f); - // Sigma curve, so go from color1 to color2 and back to color1 again - borderBrush.SetSigmaBellShape(0.5f); - - // Convert the brush to a pen for DrawPath call - using var borderPen = new Pen(borderBrush); - // Create border path around the entire item - using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); - g.DrawPath(borderPen, borderPath); + if (g is not null) + { + // Drawing with anti aliasing to create smoother appearance + using var aa = new AntiAlias(g); + Rectangle backRectI = backRect; + backRectI.Inflate(1, 1); + + // Finally draw the border around the menu item + using var borderBrush = + new LinearGradientBrush(backRectI, colors.Border1, colors.Border2, 90f); + // Sigma curve, so go from color1 to color2 and back to color1 again + borderBrush.SetSigmaBellShape(0.5f); + + // Convert the brush to a pen for DrawPath call + using var borderPen = new Pen(borderBrush); + // Create border path around the entire item + using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_MENU_ITEM_BACK); + g.DrawPath(borderPen, borderPath); + } } private void DrawGripGlyph(Graphics g, @@ -1251,8 +1267,11 @@ private void DrawGripGlyph(Graphics g, Brush darkBrush, Brush lightBrush) { - g.FillRectangle(lightBrush, x + GRIP_OFFSET, y + GRIP_OFFSET, GRIP_SQUARE, GRIP_SQUARE); - g.FillRectangle(darkBrush, x, y, GRIP_SQUARE, GRIP_SQUARE); + if (g is not null) + { + g.FillRectangle(lightBrush, x + GRIP_OFFSET, y + GRIP_OFFSET, GRIP_SQUARE, GRIP_SQUARE); + g.FillRectangle(darkBrush, x, y, GRIP_SQUARE, GRIP_SQUARE); + } } private void DrawSeparator(Graphics g, @@ -1263,25 +1282,28 @@ private void DrawSeparator(Graphics g, int horizontalInset, bool rtl) { - if (vertical) + if (g is not null) { - var l = rect.Width / 2; - var t = rect.Y; - var b = rect.Bottom; + if (vertical) + { + var l = rect.Width / 2; + var t = rect.Y; + var b = rect.Bottom; - // Draw vertical lines centered - g.DrawLine(darkPen, l, t, l, b); - g.DrawLine(lightPen, l + 1, t, l + 1, b); - } - else - { - var y = rect.Height / 2; - var l = rect.X + (rtl ? 0 : horizontalInset); - var r = rect.Right - (rtl ? horizontalInset : 0); + // Draw vertical lines centered + g.DrawLine(darkPen, l, t, l, b); + g.DrawLine(lightPen, l + 1, t, l + 1, b); + } + else + { + var y = rect.Height / 2; + var l = rect.X + (rtl ? 0 : horizontalInset); + var r = rect.Right - (rtl ? horizontalInset : 0); - // Draw horizontal lines centered - g.DrawLine(darkPen, l, y, r, y); - g.DrawLine(lightPen, l, y + 1, r, y + 1); + // Draw horizontal lines centered + g.DrawLine(darkPen, l, y, r, y); + g.DrawLine(lightPen, l, y + 1, r, y + 1); + } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2010Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2010Renderer.cs index 1004a9159..6f982c08f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2010Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2010Renderer.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -54,18 +54,21 @@ public virtual void DrawItem(Graphics? g, Rectangle rect) public virtual void DrawBorder(Graphics? g, Rectangle rect) { - // Drawing with anti aliasing to create smoother appearance - using var aa = new AntiAlias(g); - Rectangle backRectI = rect; - backRectI.Inflate(1, 1); - - // Finally draw the border around the menu item - using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); - // Convert the brush to a pen for DrawPath call - using var borderPen = new Pen(borderBrush); - // Create border path around the entire item - using GraphicsPath borderPath = CreateBorderPath(rect, CUT_ITEM_MENU); - g.DrawPath(borderPen, borderPath); + if (g is not null) + { + // Drawing with anti aliasing to create smoother appearance + using var aa = new AntiAlias(g); + Rectangle backRectI = rect; + backRectI.Inflate(1, 1); + + // Finally draw the border around the menu item + using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); + // Convert the brush to a pen for DrawPath call + using var borderPen = new Pen(borderBrush); + // Create border path around the entire item + using GraphicsPath borderPath = CreateBorderPath(rect, CUT_ITEM_MENU); + g.DrawPath(borderPen, borderPath); + } } public abstract void DrawBack(Graphics? g, Rectangle rect); @@ -120,40 +123,43 @@ public GradientItemColorsTracking(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); - var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); - - using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), - insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); - insideBrush1.SetSigmaBellShape(0.5f); - insideBrush2.SetSigmaBellShape(0.5f); - - g.FillRectangle(insideBrush1, inset); - using GraphicsPath borderPath = CreateBorderPath(insetC, CUT_INNER_ITEM_MENU), - clipPath = CreateBorderPath(insetB, CUT_INNER_ITEM_MENU); - using (var insidePen = new Pen(insideBrush2)) + if (g is not null) { - g.DrawPath(insidePen, borderPath); - } + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); + var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); + + using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), + insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); + insideBrush1.SetSigmaBellShape(0.5f); + insideBrush2.SetSigmaBellShape(0.5f); + + g.FillRectangle(insideBrush1, inset); + using GraphicsPath borderPath = CreateBorderPath(insetC, CUT_INNER_ITEM_MENU), + clipPath = CreateBorderPath(insetB, CUT_INNER_ITEM_MENU); + using (var insidePen = new Pen(insideBrush2)) + { + g.DrawPath(insidePen, borderPath); + } - g.FillPath(insideBrush2, borderPath); + g.FillPath(insideBrush2, borderPath); - using (var clipping = new Clipping(g, clipPath)) - { - using (var ellipsePath = new GraphicsPath()) + using (var clipping = new Clipping(g, clipPath)) { - var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using (var insideLighten = new PathGradientBrush(ellipsePath)) + using (var ellipsePath = new GraphicsPath()) { - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.White; - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using (var insideLighten = new PathGradientBrush(ellipsePath)) + { + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.White; + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } } @@ -203,19 +209,22 @@ public GradientItemColorsPressed(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); - var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); - - using var aa = new AntiAlias(g); - using GraphicsPath path1 = CreateBorderPath(rect, CUT_ITEM_MENU), - path2 = CreateBorderPath(rect2, CUT_ITEM_MENU), - path3 = CreateBorderPath(rect3, CUT_ITEM_MENU); - using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), - brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), - brush3 = new SolidBrush(Back1); - g.FillPath(brush1, path1); - g.FillPath(brush2, path2); - g.FillPath(brush3, path3); + if (g is not null) + { + var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); + var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); + + using var aa = new AntiAlias(g); + using GraphicsPath path1 = CreateBorderPath(rect, CUT_ITEM_MENU), + path2 = CreateBorderPath(rect2, CUT_ITEM_MENU), + path3 = CreateBorderPath(rect3, CUT_ITEM_MENU); + using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), + brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), + brush3 = new SolidBrush(Back1); + g.FillPath(brush1, path1); + g.FillPath(brush2, path2); + g.FillPath(brush3, path3); + } } } @@ -240,24 +249,27 @@ public GradientItemColorsChecked(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - - using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); - insideBrush.SetSigmaBellShape(0.5f); - g.FillRectangle(insideBrush, inset); - - using GraphicsPath borderPath = CreateBorderPath(inset, CUT_INNER_ITEM_MENU); - using var ellipsePath = new GraphicsPath(); - var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using var insideLighten = new PathGradientBrush(ellipsePath); - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.FromArgb(96, Color.White); - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + + using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); + insideBrush.SetSigmaBellShape(0.5f); + g.FillRectangle(insideBrush, inset); + + using GraphicsPath borderPath = CreateBorderPath(inset, CUT_INNER_ITEM_MENU); + using var ellipsePath = new GraphicsPath(); + var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using var insideLighten = new PathGradientBrush(ellipsePath); + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.FromArgb(96, Color.White); + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } @@ -320,20 +332,20 @@ static KryptonVisualStudio2010With2010Renderer() { _stripBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.5f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.5f, 0.8f, 1.0f] }; _separatorDarkBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.2f, 1f, 0.2f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.2f, 1f, 0.2f] }; _separatorLightBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 0.1f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.1f, 0.6f, 0.1f] }; } @@ -358,9 +370,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); @@ -369,7 +379,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Set correct color of the arrow Color color1; Color color2; - if (!e.Item.Enabled) + if (!e.Item!.Enabled) { color1 = _disabled; color2 = _disabled; @@ -415,7 +425,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -429,7 +441,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -722,7 +736,9 @@ protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -742,7 +758,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -1148,82 +1164,88 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; - - // The X offset to draw the split line - int splitOffset; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) - { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_ITEM_MENU); - // Draw the normal button area background - colorsButton.DrawBack(g, backRectButton); + // The X offset to draw the split line + int splitOffset; - // Draw the drop button area background - colorsDrop.DrawBack(g, backRectDrop); + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, CUT_ITEM_MENU); + // Draw the normal button area background + colorsButton.DrawBack(g, backRectButton); + + // Draw the drop button area background + colorsDrop.DrawBack(g, backRectDrop); + + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - colorsButton.DrawBorder(g, backRect); + // Draw the border of the entire item + colorsButton.DrawBorder(g, backRect); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_HEADER_MENU), - insidePath = CreateInsideBorderPath(itemRect, CUT_HEADER_MENU), - clipPath = CreateClipBorderPath(itemRect, CUT_HEADER_MENU); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, CUT_HEADER_MENU), + insidePath = CreateInsideBorderPath(itemRect, CUT_HEADER_MENU), + clipPath = CreateClipBorderPath(itemRect, CUT_HEADER_MENU); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1307,7 +1329,7 @@ private void DrawContextMenuSeparator(Graphics g, var b = rect.Bottom; using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, t, l, b); } else @@ -1317,7 +1339,7 @@ private void DrawContextMenuSeparator(Graphics g, var r = rect.Right - (rtl ? horizontalInset : 0); using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, y, r, y); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2013Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2013Renderer.cs index 42bc3eb14..440d1705b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2013Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010With2013Renderer.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -54,18 +54,21 @@ public virtual void DrawItem(Graphics? g, Rectangle rect) public virtual void DrawBorder(Graphics? g, Rectangle rect) { - // Drawing with anti aliasing to create smoother appearance - using var aa = new AntiAlias(g); - Rectangle backRectI = rect; - backRectI.Inflate(1, 1); - - // Finally draw the border around the menu item - using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); - // Convert the brush to a pen for DrawPath call - using var borderPen = new Pen(borderBrush); - // Create border path around the entire item - using GraphicsPath borderPath = CreateBorderPath(rect, _cutItemMenu); - g.DrawPath(borderPen, borderPath); + if (g is not null) + { + // Drawing with anti aliasing to create smoother appearance + using var aa = new AntiAlias(g); + Rectangle backRectI = rect; + backRectI.Inflate(1, 1); + + // Finally draw the border around the menu item + using var borderBrush = new LinearGradientBrush(backRectI, Border1, Border2, 90f); + // Convert the brush to a pen for DrawPath call + using var borderPen = new Pen(borderBrush); + // Create border path around the entire item + using GraphicsPath borderPath = CreateBorderPath(rect, _cutItemMenu); + g.DrawPath(borderPen, borderPath); + } } public abstract void DrawBack(Graphics? g, Rectangle rect); @@ -120,40 +123,43 @@ public GradientItemColorsTracking(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); - var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); - - using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), - insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); - insideBrush1.SetSigmaBellShape(0.5f); - insideBrush2.SetSigmaBellShape(0.5f); - - g.FillRectangle(insideBrush1, inset); - using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), - clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); - using (var insidePen = new Pen(insideBrush2)) + if (g is not null) { - g.DrawPath(insidePen, borderPath); - } + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); + var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); + + using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), + insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); + insideBrush1.SetSigmaBellShape(0.5f); + insideBrush2.SetSigmaBellShape(0.5f); + + g.FillRectangle(insideBrush1, inset); + using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), + clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); + using (var insidePen = new Pen(insideBrush2)) + { + g.DrawPath(insidePen, borderPath); + } - g.FillPath(insideBrush2, borderPath); + g.FillPath(insideBrush2, borderPath); - using (var clipping = new Clipping(g, clipPath)) - { - using (var ellipsePath = new GraphicsPath()) + using (var clipping = new Clipping(g, clipPath)) { - var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using (var insideLighten = new PathGradientBrush(ellipsePath)) + using (var ellipsePath = new GraphicsPath()) { - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.White; - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using (var insideLighten = new PathGradientBrush(ellipsePath)) + { + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.White; + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } } @@ -203,19 +209,22 @@ public GradientItemColorsPressed(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); - var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); - - using var aa = new AntiAlias(g); - using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), - path2 = CreateBorderPath(rect2, _cutItemMenu), - path3 = CreateBorderPath(rect3, _cutItemMenu); - using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), - brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), - brush3 = new SolidBrush(Back1); - g.FillPath(brush1, path1); - g.FillPath(brush2, path2); - g.FillPath(brush3, path3); + if (g is not null) + { + var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); + var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); + + using var aa = new AntiAlias(g); + using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), + path2 = CreateBorderPath(rect2, _cutItemMenu), + path3 = CreateBorderPath(rect3, _cutItemMenu); + using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), + brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), + brush3 = new SolidBrush(Back1); + g.FillPath(brush1, path1); + g.FillPath(brush2, path2); + g.FillPath(brush3, path3); + } } } @@ -240,24 +249,27 @@ public GradientItemColorsChecked(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - - using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); - insideBrush.SetSigmaBellShape(0.5f); - g.FillRectangle(insideBrush, inset); - - using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); - using var ellipsePath = new GraphicsPath(); - var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using var insideLighten = new PathGradientBrush(ellipsePath); - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.FromArgb(96, Color.White); - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + + using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); + insideBrush.SetSigmaBellShape(0.5f); + g.FillRectangle(insideBrush, inset); + + using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); + using var ellipsePath = new GraphicsPath(); + var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using var insideLighten = new PathGradientBrush(ellipsePath); + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.FromArgb(96, Color.White); + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } @@ -319,20 +331,20 @@ static KryptonVisualStudio2010With2013Renderer() { _stripBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.5f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.5f, 0.8f, 1.0f] }; _separatorDarkBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.2f, 1f, 0.2f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.2f, 1f, 0.2f] }; _separatorLightBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 0.1f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.1f, 0.6f, 0.1f] }; } @@ -357,9 +369,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); @@ -368,7 +378,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Set correct color of the arrow Color color1; Color color2; - if (!e.Item.Enabled) + if (!e.Item!.Enabled) { color1 = _disabled; color2 = _disabled; @@ -414,7 +424,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -428,7 +440,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -723,7 +737,9 @@ protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -743,7 +759,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -1150,82 +1166,88 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; - - // The X offset to draw the split line - int splitOffset; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) - { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); - // Draw the normal button area background - colorsButton.DrawBack(g, backRectButton); + // The X offset to draw the split line + int splitOffset; - // Draw the drop button area background - colorsDrop.DrawBack(g, backRectDrop); + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); + // Draw the normal button area background + colorsButton.DrawBack(g, backRectButton); + + // Draw the drop button area background + colorsDrop.DrawBack(g, backRectDrop); + + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - colorsButton.DrawBorder(g, backRect); + // Draw the border of the entire item + colorsButton.DrawBorder(g, backRect); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), - insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), - clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), + insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), + clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1307,7 +1329,7 @@ private void DrawContextMenuSeparator(Graphics g, var b = rect.Bottom; using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, t, l, b); } else @@ -1317,7 +1339,7 @@ private void DrawContextMenuSeparator(Graphics g, var r = rect.Right - (rtl ? horizontalInset : 0); using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, y, r, y); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010WithMicrosoft365Renderer.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010WithMicrosoft365Renderer.cs index 615d65d90..b54b66fef 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010WithMicrosoft365Renderer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudio2010WithMicrosoft365Renderer.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -121,40 +121,43 @@ public GradientItemColorsTracking(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); - var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); - - using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), - insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); - insideBrush1.SetSigmaBellShape(0.5f); - insideBrush2.SetSigmaBellShape(0.5f); - - g.FillRectangle(insideBrush1, inset); - using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), - clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); - using (var insidePen = new Pen(insideBrush2)) + if (g is not null) { - g.DrawPath(insidePen, borderPath); - } + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); + var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); + + using LinearGradientBrush insideBrush1 = new LinearGradientBrush(rect, Back1B, Back1, 90f), + insideBrush2 = new LinearGradientBrush(insetB, Back2B, Back2, 90f); + insideBrush1.SetSigmaBellShape(0.5f); + insideBrush2.SetSigmaBellShape(0.5f); + + g.FillRectangle(insideBrush1, inset); + using GraphicsPath borderPath = CreateBorderPath(insetC, _cutInnerItemMenu), + clipPath = CreateBorderPath(insetB, _cutInnerItemMenu); + using (var insidePen = new Pen(insideBrush2)) + { + g.DrawPath(insidePen, borderPath); + } - g.FillPath(insideBrush2, borderPath); + g.FillPath(insideBrush2, borderPath); - using (var clipping = new Clipping(g, clipPath)) - { - using (var ellipsePath = new GraphicsPath()) + using (var clipping = new Clipping(g, clipPath)) { - var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using (var insideLighten = new PathGradientBrush(ellipsePath)) + using (var ellipsePath = new GraphicsPath()) { - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.White; - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using (var insideLighten = new PathGradientBrush(ellipsePath)) + { + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.White; + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } } @@ -203,19 +206,22 @@ public GradientItemColorsPressed(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); - var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); - - using var aa = new AntiAlias(g); - using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), - path2 = CreateBorderPath(rect2, _cutItemMenu), - path3 = CreateBorderPath(rect3, _cutItemMenu); - using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), - brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), - brush3 = new SolidBrush(Back1); - g.FillPath(brush1, path1); - g.FillPath(brush2, path2); - g.FillPath(brush3, path3); + if (g is not null) + { + var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); + var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); + + using var aa = new AntiAlias(g); + using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), + path2 = CreateBorderPath(rect2, _cutItemMenu), + path3 = CreateBorderPath(rect3, _cutItemMenu); + using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), + brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), + brush3 = new SolidBrush(Back1); + g.FillPath(brush1, path1); + g.FillPath(brush2, path2); + g.FillPath(brush3, path3); + } } } @@ -240,24 +246,27 @@ public GradientItemColorsChecked(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - - using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); - insideBrush.SetSigmaBellShape(0.5f); - g.FillRectangle(insideBrush, inset); - - using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); - using var ellipsePath = new GraphicsPath(); - var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using var insideLighten = new PathGradientBrush(ellipsePath); - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.FromArgb(96, Color.White); - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + + using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); + insideBrush.SetSigmaBellShape(0.5f); + g.FillRectangle(insideBrush, inset); + + using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); + using var ellipsePath = new GraphicsPath(); + var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using var insideLighten = new PathGradientBrush(ellipsePath); + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.FromArgb(96, Color.White); + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } @@ -319,20 +328,20 @@ static KryptonVisualStudio2010WithMicrosoft365Renderer() { _stripBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.5f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.5f, 0.8f, 1.0f] }; _separatorDarkBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.2f, 1f, 0.2f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.2f, 1f, 0.2f] }; _separatorLightBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 0.1f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.1f, 0.6f, 0.1f] }; } @@ -357,9 +366,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); @@ -368,7 +375,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Set correct color of the arrow Color color1; Color color2; - if (!e.Item.Enabled) + if (!e.Item!.Enabled) { color1 = _disabled; color2 = _disabled; @@ -414,7 +421,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) // Cast to correct type var button = (ToolStripButton)e.Item; - if (button.Selected || button.Pressed || button.Checked) + if (e is not null + && e.ToolStrip is not null + && (button.Selected || button.Pressed || button.Checked)) { RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); } @@ -428,7 +437,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -721,7 +732,9 @@ protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + &&(e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -741,7 +754,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -1148,82 +1161,88 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); - Rectangle backRectDrop = splitButton.DropDownButtonBounds; - - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) + if (g is not null) { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; - - // The X offset to draw the split line - int splitOffset; + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) - { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; + + // The X offset to draw the split line + int splitOffset; + + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); - // Draw the normal button area background - colorsButton.DrawBack(g, backRectButton); + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); + // Draw the normal button area background + colorsButton.DrawBack(g, backRectButton); - // Draw the drop button area background - colorsDrop.DrawBack(g, backRectDrop); + // Draw the drop button area background + colorsDrop.DrawBack(g, backRectDrop); - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - colorsButton.DrawBorder(g, backRect); + // Draw the border of the entire item + colorsButton.DrawBorder(g, backRect); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), - insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), - clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), + insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), + clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1305,7 +1324,7 @@ private void DrawContextMenuSeparator(Graphics g, var b = rect.Bottom; using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, t, l, b); } else @@ -1315,7 +1334,7 @@ private void DrawContextMenuSeparator(Graphics g, var r = rect.Right - (rtl ? horizontalInset : 0); using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, y, r, y); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudioRender.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudioRender.cs index 7abfa006f..bf682d449 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudioRender.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/KryptonVisualStudioRender.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -122,7 +122,9 @@ public GradientItemColorsTracking(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); var insetB = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 3, rect.Height - 3); var insetC = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); @@ -141,21 +143,22 @@ public override void DrawBack(Graphics? g, Rectangle rect) g.FillPath(insideBrush2, borderPath); - using (var clipping = new Clipping(g, clipPath)) - { - using (var ellipsePath = new GraphicsPath()) + using (var clipping = new Clipping(g, clipPath)) { - var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using (var insideLighten = new PathGradientBrush(ellipsePath)) + using (var ellipsePath = new GraphicsPath()) { - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.White; - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + var ellipseRect = new RectangleF(-(rect.Width / 2), rect.Bottom - 9, rect.Width * 2, 18); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using (var insideLighten = new PathGradientBrush(ellipsePath)) + { + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.White; + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } } @@ -204,19 +207,22 @@ public GradientItemColorsPressed(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); - var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); - - using var aa = new AntiAlias(g); - using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), - path2 = CreateBorderPath(rect2, _cutItemMenu), - path3 = CreateBorderPath(rect3, _cutItemMenu); - using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), - brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), - brush3 = new SolidBrush(Back1); - g.FillPath(brush1, path1); - g.FillPath(brush2, path2); - g.FillPath(brush3, path3); + if (g is not null) + { + var rect2 = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 1); + var rect3 = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 3); + + using var aa = new AntiAlias(g); + using GraphicsPath path1 = CreateBorderPath(rect, _cutItemMenu), + path2 = CreateBorderPath(rect2, _cutItemMenu), + path3 = CreateBorderPath(rect3, _cutItemMenu); + using SolidBrush brush1 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.4f, Back1, 0.6f)), + brush2 = new SolidBrush(CommonHelper.MergeColors(Border1, 0.2f, Back1, 0.8f)), + brush3 = new SolidBrush(Back1); + g.FillPath(brush1, path1); + g.FillPath(brush2, path2); + g.FillPath(brush3, path3); + } } } @@ -241,24 +247,27 @@ public GradientItemColorsChecked(Color border, public override void DrawBack(Graphics? g, Rectangle rect) { - var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); - - using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); - insideBrush.SetSigmaBellShape(0.5f); - g.FillRectangle(insideBrush, inset); - - using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); - using var ellipsePath = new GraphicsPath(); - var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); - var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), - ellipseRect.Top + (ellipseRect.Height / 2)); - ellipsePath.AddEllipse(ellipseRect); - - using var insideLighten = new PathGradientBrush(ellipsePath); - insideLighten.CenterPoint = ellipseCenter; - insideLighten.CenterColor = Color.FromArgb(96, Color.White); - insideLighten.SurroundColors = new[] { Color.Transparent }; - g.FillPath(insideLighten, ellipsePath); + if (g is not null) + { + var inset = new Rectangle(rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Height - 2); + + using var insideBrush = new LinearGradientBrush(rect, Back2, Back1, 90f); + insideBrush.SetSigmaBellShape(0.5f); + g.FillRectangle(insideBrush, inset); + + using GraphicsPath borderPath = CreateBorderPath(inset, _cutInnerItemMenu); + using var ellipsePath = new GraphicsPath(); + var ellipseRect = new RectangleF(rect.Left, rect.Bottom - 8, rect.Width, 8); + var ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), + ellipseRect.Top + (ellipseRect.Height / 2)); + ellipsePath.AddEllipse(ellipseRect); + + using var insideLighten = new PathGradientBrush(ellipsePath); + insideLighten.CenterPoint = ellipseCenter; + insideLighten.CenterColor = Color.FromArgb(96, Color.White); + insideLighten.SurroundColors = [Color.Transparent]; + g.FillPath(insideLighten, ellipsePath); + } } } @@ -320,20 +329,20 @@ static KryptonVisualStudio365Renderer() { _stripBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.5f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.5f, 0.8f, 1.0f] }; _separatorDarkBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.2f, 1f, 0.2f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.2f, 1f, 0.2f] }; _separatorLightBlend = new Blend { - Positions = new[] { 0.0f, 0.5f, 1.0f }, - Factors = new[] { 0.1f, 0.6f, 0.1f } + Positions = [0.0f, 0.5f, 1.0f], + Factors = [0.1f, 0.6f, 0.1f] }; } @@ -358,9 +367,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) if (e.ArrowRectangle is { Width: > 0, Height: > 0 }) { // Create a path that is used to fill the arrow - using GraphicsPath arrowPath = CreateArrowPath(e.Item, - e.ArrowRectangle, - e.Direction); + using GraphicsPath arrowPath = CreateArrowPath(e.Item!, e.ArrowRectangle, e.Direction); // Get the rectangle that encloses the arrow and expand slightly // so that the gradient is always within the expanding bounds RectangleF boundsF = arrowPath.GetBounds(); @@ -369,7 +376,7 @@ protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e) // Set correct color of the arrow Color color1; Color color2; - if (!e.Item.Enabled) + if (!e.Item!.Enabled) { color1 = _disabled; color2 = _disabled; @@ -417,7 +424,7 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) if (button.Selected || button.Pressed || button.Checked) { - RenderToolButtonBackground(e.Graphics, button, e.ToolStrip); + RenderToolButtonBackground(e.Graphics, button, e.ToolStrip!); } } #endregion @@ -429,7 +436,9 @@ protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { RenderToolDropButtonBackground(e.Graphics, e.Item, e.ToolStrip); } @@ -722,7 +731,9 @@ protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e) /// An ToolStripItemRenderEventArgs containing the event data. protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventArgs e) { - if (e.Item.Selected || e.Item.Pressed) + if (e is not null + && e.ToolStrip is not null + && (e.Item.Selected || e.Item.Pressed)) { // Cast to correct type var splitButton = (ToolStripSplitButton)e.Item; @@ -742,7 +753,7 @@ protected override void OnRenderSplitButtonBackground(ToolStripItemRenderEventAr } else { - base.OnRenderSplitButtonBackground(e); + base.OnRenderSplitButtonBackground(e!); } } #endregion @@ -1149,82 +1160,88 @@ private void DrawGradientToolSplitItem(Graphics? g, GradientItemColors colorsDrop, GradientItemColors colorsSplit) { - // Create entire area and just the drop button area rectangles - var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); + if (g is not null) + { + // Create entire area and just the drop button area rectangles + var backRect = new Rectangle(Point.Empty, splitButton.Bounds.Size); Rectangle backRectDrop = splitButton.DropDownButtonBounds; - // Cannot paint zero sized areas - if ((backRect.Width > 0) && (backRectDrop.Width > 0) && - (backRect.Height > 0) && (backRectDrop.Height > 0)) - { - // Area that is the normal button starts as everything - Rectangle backRectButton = backRect; + // Cannot paint zero sized areas + if ((backRect.Width > 0) && (backRectDrop.Width > 0) && + (backRect.Height > 0) && (backRectDrop.Height > 0)) + { + // Area that is the normal button starts as everything + Rectangle backRectButton = backRect; - // The X offset to draw the split line - int splitOffset; + // The X offset to draw the split line + int splitOffset; - // Is the drop button on the right hand side of entire area? - if (backRectDrop.X > 0) - { - backRectButton.Width = backRectDrop.Left; - backRectDrop.X -= 1; - backRectDrop.Width++; - splitOffset = backRectDrop.X; - } - else - { - backRectButton.Width -= backRectDrop.Width - 2; - backRectButton.X = backRectDrop.Right - 1; - backRectDrop.Width++; - splitOffset = backRectDrop.Right - 1; - } + // Is the drop button on the right hand side of entire area? + if (backRectDrop.X > 0) + { + backRectButton.Width = backRectDrop.Left; + backRectDrop.X -= 1; + backRectDrop.Width++; + splitOffset = backRectDrop.X; + } + else + { + backRectButton.Width -= backRectDrop.Width - 2; + backRectButton.X = backRectDrop.Right - 1; + backRectDrop.Width++; + splitOffset = backRectDrop.Right - 1; + } - // Create border path around the item - using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); - // Draw the normal button area background - colorsButton.DrawBack(g, backRectButton); + // Create border path around the item + using GraphicsPath borderPath = CreateBorderPath(backRect, _cutItemMenu); + // Draw the normal button area background + colorsButton.DrawBack(g, backRectButton); - // Draw the drop button area background - colorsDrop.DrawBack(g, backRectDrop); + // Draw the drop button area background + colorsDrop.DrawBack(g, backRectDrop); - // Draw the split line between the areas - using (var splitBrush = new LinearGradientBrush( - new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), - colorsSplit.Border1, colorsSplit.Border2, 90f)) - { - // Convert the brush to a pen for DrawPath call - using (var splitPen = new Pen(splitBrush)) + // Draw the split line between the areas + using (var splitBrush = new LinearGradientBrush( + new Rectangle(backRect.X + splitOffset, backRect.Top, 1, backRect.Height + 1), + colorsSplit.Border1, colorsSplit.Border2, 90f)) { - g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + // Convert the brush to a pen for DrawPath call + using (var splitPen = new Pen(splitBrush)) + { + g.DrawLine(splitPen, backRect.X + splitOffset, backRect.Top + 1, backRect.X + splitOffset, backRect.Bottom - 1); + } } - } - // Draw the border of the entire item - colorsButton.DrawBorder(g, backRect); + // Draw the border of the entire item + colorsButton.DrawBorder(g, backRect); + } } } private void DrawContextMenuHeader(Graphics? g, ToolStripItem item) { - // Get the rectangle that is the items area - var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); - - // Create border and clipping paths - using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), - insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), - clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); - // Clip all drawing to within the border path - using var clipping = new Clipping(g, clipPath); - // Draw the entire background area first - using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + if (g is not null) { - g.FillPath(backBrush, borderPath); - } + // Get the rectangle that is the items area + var itemRect = new Rectangle(Point.Empty, item.Bounds.Size); + + // Create border and clipping paths + using GraphicsPath borderPath = CreateBorderPath(itemRect, _cutHeaderMenu), + insidePath = CreateInsideBorderPath(itemRect, _cutHeaderMenu), + clipPath = CreateClipBorderPath(itemRect, _cutHeaderMenu); + // Clip all drawing to within the border path + using var clipping = new Clipping(g, clipPath); + // Draw the entire background area first + using (var backBrush = new SolidBrush(KCT.ToolStripDropDownBackground)) + { + g.FillPath(backBrush, borderPath); + } - // Draw the border - using (var borderPen = new Pen(KCT.MenuBorder)) - { - g.DrawPath(borderPen, borderPath); + // Draw the border + using (var borderPen = new Pen(KCT.MenuBorder)) + { + g.DrawPath(borderPen, borderPath); + } } } @@ -1306,7 +1323,7 @@ private void DrawContextMenuSeparator(Graphics g, var b = rect.Bottom; using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, t, l, b); } else @@ -1316,7 +1333,7 @@ private void DrawContextMenuSeparator(Graphics g, var r = rect.Right - (rtl ? horizontalInset : 0); using var marginPen = new Pen(Color.FromArgb(80, KCT.MenuBorder)); - marginPen.DashPattern = new float[] { 2, 2 }; + marginPen.DashPattern = [2, 2]; g.DrawLine(marginPen, l, y, r, y); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderBase.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderBase.cs index 2b2ca3b2c..634b9714d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,60 +28,52 @@ public abstract class RenderBase : Component, #region Static Fields private static readonly object _threadLock = new object(); - private static readonly ColorMatrix _matrixGrayScale = new ColorMatrix(new[] - { - new[] { 0.3f, 0.3f, 0.3f, 0, 0 }, new[] { 0.59f, 0.59f, 0.59f, 0, 0 }, - new[] { 0.11f, 0.11f, 0.11f, 0, 0 }, new float[] { 0, 0, 0, 1, 0 }, new float[] { 0, 0, 0, 0, 1 } - }); - - private static readonly ColorMatrix _matrixGrayScaleRed = new ColorMatrix(new[] - { - new float[] { 1, 0, 0, 0, 0 }, new[] { 0, 0.59f, 0.59f, 0, 0 }, new[] { 0, 0.11f, 0.11f, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, new float[] { 0, 0, 0, 0, 1 } - }); - - private static readonly ColorMatrix _matrixGrayScaleGreen = new ColorMatrix(new[] - { - new[] { 0.3f, 0, 0.3f, 0, 0 }, new float[] { 0, 1, 0, 0, 0 }, new[] { 0.11f, 0, 0.11f, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, new float[] { 0, 0, 0, 0, 1 } - }); - - private static readonly ColorMatrix _matrixGrayScaleBlue = new ColorMatrix(new[] - { - new[] { 0.3f, 0.3f, 0, 0, 0 }, new[] { 0.59f, 0.59f, 0, 0, 0 }, new float[] { 0, 0, 1, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, new float[] { 0, 0, 0, 0, 1 } - }); - - private static readonly ColorMatrix _matrixLight = new ColorMatrix(new[] - { - new float[] { 1, 0, 0, 0, 0 }, new float[] { 0, 1, 0, 0, 0 }, new float[] { 0, 0, 1, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, new[] { 0.1f, 0.1f, 0.1f, 0, 1 } - }); - - private static readonly ColorMatrix _matrixLightLight = new ColorMatrix(new[] - { - new float[] { 1, 0, 0, 0, 0 }, new float[] { 0, 1, 0, 0, 0 }, new float[] { 0, 0, 1, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, new[] { 0.2f, 0.2f, 0.2f, 0, 1 } - }); - - private static readonly ColorMatrix _matrixDark = new ColorMatrix(new[] - { - new float[] { 1, 0, 0, 0, 0 }, new float[] { 0, 1, 0, 0, 0 }, new float[] { 0, 0, 1, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, new[] { -0.1f, -0.1f, -0.1f, 0, 1 } - }); - - private static readonly ColorMatrix _matrixDarkDark = new ColorMatrix(new[] - { - new float[] { 1, 0, 0, 0, 0 }, new float[] { 0, 1, 0, 0, 0 }, new float[] { 0, 0, 1, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, new[] { -0.25f, -0.25f, -0.25f, 0, 1 } - }); + private static readonly ColorMatrix _matrixGrayScale = new ColorMatrix([ + [0.3f, 0.3f, 0.3f, 0, 0], [0.59f, 0.59f, 0.59f, 0, 0], + [0.11f, 0.11f, 0.11f, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1] + ]); + + private static readonly ColorMatrix _matrixGrayScaleRed = new ColorMatrix([ + [1, 0, 0, 0, 0], [0, 0.59f, 0.59f, 0, 0], [0, 0.11f, 0.11f, 0, 0], + [0, 0, 0, 1, 0], [0, 0, 0, 0, 1] + ]); + + private static readonly ColorMatrix _matrixGrayScaleGreen = new ColorMatrix([ + [0.3f, 0, 0.3f, 0, 0], [0, 1, 0, 0, 0], [0.11f, 0, 0.11f, 0, 0], + [0, 0, 0, 1, 0], [0, 0, 0, 0, 1] + ]); + + private static readonly ColorMatrix _matrixGrayScaleBlue = new ColorMatrix([ + [0.3f, 0.3f, 0, 0, 0], [0.59f, 0.59f, 0, 0, 0], [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], [0, 0, 0, 0, 1] + ]); + + private static readonly ColorMatrix _matrixLight = new ColorMatrix([ + [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], [0.1f, 0.1f, 0.1f, 0, 1] + ]); + + private static readonly ColorMatrix _matrixLightLight = new ColorMatrix([ + [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], [0.2f, 0.2f, 0.2f, 0, 1] + ]); + + private static readonly ColorMatrix _matrixDark = new ColorMatrix([ + [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], [-0.1f, -0.1f, -0.1f, 0, 1] + ]); + + private static readonly ColorMatrix _matrixDarkDark = new ColorMatrix([ + [1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], + [0, 0, 0, 1, 0], [-0.25f, -0.25f, -0.25f, 0, 1] + ]); #endregion #region IRenderer /// /// Gets the standard border renderer. /// - public IRenderBorder RenderStandardBorder + public IRenderBorder RenderStandardBorder { [DebuggerStepThrough] get => this; @@ -126,7 +118,7 @@ public IRenderRibbon RenderRibbon /// /// Gets the glyph renderer. /// - public IRenderGlyph RenderGlyph + public IRenderGlyph RenderGlyph { [DebuggerStepThrough] get => this; @@ -136,7 +128,7 @@ public IRenderGlyph RenderGlyph /// Gets a renderer for drawing the toolstrips. /// /// Color palette to use when rendering toolstrip. - public abstract ToolStripRenderer RenderToolStrip(PaletteBase? colorPalette); + public abstract ToolStripRenderer RenderToolStrip(PaletteBase colorPalette); #endregion #region RenderStandardBorder @@ -158,7 +150,7 @@ public abstract Padding GetBorderRawPadding(IPaletteBorder palette, /// State associated with rendering. /// Visual orientation of the border. /// Padding structure detailing all four edges. - public abstract Padding GetBorderDisplayPadding(IPaletteBorder palette, + public abstract Padding GetBorderDisplayPadding(IPaletteBorder? palette, PaletteState state, VisualOrientation orientation); @@ -173,10 +165,10 @@ public abstract Padding GetBorderDisplayPadding(IPaletteBorder palette, /// GraphicsPath instance. public abstract GraphicsPath GetOutsideBorderPath(RenderContext context, Rectangle rect, - IPaletteBorder palette, + IPaletteBorder? palette, VisualOrientation orientation, PaletteState state); - + /// /// Generate a graphics path that is in the middle of the border. /// @@ -186,8 +178,8 @@ public abstract GraphicsPath GetOutsideBorderPath(RenderContext context, /// Visual orientation of the border. /// State associated with rendering. /// GraphicsPath instance. - public abstract GraphicsPath GetBorderPath(RenderContext context, - Rectangle rect, + public abstract GraphicsPath GetBorderPath(RenderContext context, + Rectangle rect, IPaletteBorder palette, VisualOrientation orientation, PaletteState state); @@ -206,7 +198,7 @@ public abstract GraphicsPath GetBackPath(RenderContext context, IPaletteBorder palette, VisualOrientation orientation, PaletteState state); - + /// /// Draw border on the inside edge of the specified rectangle. /// @@ -215,8 +207,8 @@ public abstract GraphicsPath GetBackPath(RenderContext context, /// Palette used for drawing. /// Visual orientation of the border. /// State associated with rendering. - public abstract void DrawBorder(RenderContext context, - Rectangle rect, + public abstract void DrawBorder(RenderContext context, + Rectangle rect, IPaletteBorder palette, VisualOrientation orientation, PaletteState state); @@ -233,9 +225,9 @@ public abstract void DrawBorder(RenderContext context, /// Visual orientation of the background. /// State associated with rendering. /// Cache used for drawing. - public abstract IDisposable? DrawBack(RenderContext context, + public abstract IDisposable? DrawBack(RenderContext context, Rectangle rect, - GraphicsPath path, + GraphicsPath path, IPaletteBack palette, VisualOrientation orientation, PaletteState state, @@ -243,6 +235,7 @@ public abstract void DrawBorder(RenderContext context, #endregion #region RenderStandardContent + /// /// Get the preferred size for drawing the content. /// @@ -251,16 +244,12 @@ public abstract void DrawBorder(RenderContext context, /// Content values. /// Visual orientation of the content. /// State associated with rendering. - /// Drawing onto a composition element. - /// If composition, should glowing be drawn. /// Preferred size. public abstract Size GetContentPreferredSize(ViewLayoutContext context, - IPaletteContent palette, - IContentValues values, - VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing); + IPaletteContent palette, + IContentValues values, + VisualOrientation orientation, + PaletteState state); /// /// Perform layout calculations on the provided content. @@ -271,17 +260,13 @@ public abstract Size GetContentPreferredSize(ViewLayoutContext context, /// Content values. /// Visual orientation of the content. /// State associated with rendering. - /// Drawing onto a composition element. - /// If composition, should glowing be drawn. /// Memento with cached information. public abstract IDisposable LayoutContent(ViewLayoutContext context, - Rectangle availableRect, - IPaletteContent palette, - IContentValues values, - VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing); + Rectangle availableRect, + IPaletteContent palette, + IContentValues values, + VisualOrientation orientation, + PaletteState state); /// /// Perform draw of content using provided memento. @@ -292,60 +277,56 @@ public abstract IDisposable LayoutContent(ViewLayoutContext context, /// Cached values from layout call. /// Visual orientation of the content. /// State associated with rendering. - /// Drawing onto a composition element. - /// If composition, should glowing be drawn. /// Allow drawing of focus rectangle. public abstract void DrawContent(RenderContext context, - Rectangle displayRect, - IPaletteContent palette, - IDisposable memento, - VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing, - bool allowFocusRect); + Rectangle displayRect, + IPaletteContent palette, + IDisposable memento, + VisualOrientation orientation, + PaletteState state, + bool allowFocusRect); /// /// Request the calculated display of the image. /// /// Cached values from layout call. /// True if the image is being Displayed; otherwise false. - public abstract bool GetContentImageDisplayed(IDisposable memento); + public abstract bool GetContentImageDisplayed(IDisposable? memento); /// /// Request the calculated position of the content image. /// /// Cached values from layout call. /// Display rectangle for the image content. - public abstract Rectangle GetContentImageRectangle(IDisposable memento); + public abstract Rectangle GetContentImageRectangle(IDisposable? memento); /// /// Request the calculated display of the short text. /// /// Cached values from layout call. /// True if the short text is being Displayed; otherwise false. - public abstract bool GetContentShortTextDisplayed(IDisposable memento); + public abstract bool GetContentShortTextDisplayed(IDisposable? memento); /// /// Request the calculated position of the content short text. /// /// Cached values from layout call. /// Display rectangle for the image content. - public abstract Rectangle GetContentShortTextRectangle(IDisposable memento); + public abstract Rectangle GetContentShortTextRectangle(IDisposable? memento); /// /// Request the calculated display of the long text. /// /// Cached values from layout call. /// True if the long text is being Displayed; otherwise false. - public abstract bool GetContentLongTextDisplayed(IDisposable memento); + public abstract bool GetContentLongTextDisplayed(IDisposable? memento); /// /// Request the calculated position of the content long text. /// /// Cached values from layout call. /// Display rectangle for the image content. - public abstract Rectangle GetContentLongTextRectangle(IDisposable memento); + public abstract Rectangle GetContentLongTextRectangle(IDisposable? memento); #endregion #region RenderTabBorder @@ -430,6 +411,7 @@ public abstract void DrawTabBorder(RenderContext context, #endregion #region RenderRibbon + /// /// Draw the background of a ribbon element. /// @@ -439,16 +421,14 @@ public abstract void DrawTabBorder(RenderContext context, /// State associated with rendering. /// Palette used for sourcing settings. /// Orientation for drawing. - /// Drawing onto a composition element. /// Cached values to use when drawing. public abstract IDisposable? DrawRibbonBack(PaletteRibbonShape shape, - RenderContext context, - Rectangle rect, - PaletteState state, - IPaletteRibbonBack palette, - VisualOrientation orientation, - bool composition, - IDisposable? memento); + RenderContext context, + Rectangle rect, + PaletteState state, + IPaletteRibbonBack palette, + VisualOrientation orientation, + IDisposable? memento); /// /// Draw a context ribbon tab title. @@ -459,12 +439,12 @@ public abstract void DrawTabBorder(RenderContext context, /// Palette used for general ribbon settings. /// Palette used for background ribbon settings. /// Cached values to use when drawing. - public abstract IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, + public abstract IDisposable? DrawRibbonTabContextTitle(PaletteRibbonShape shape, RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento); + IDisposable? memento); /// /// Draw the application button. @@ -475,31 +455,29 @@ public abstract IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, /// State associated with rendering. /// Palette used for sourcing settings. /// Cached storage for drawing objects. - public abstract IDisposable DrawRibbonApplicationButton(PaletteRibbonShape shape, + public abstract IDisposable? DrawRibbonApplicationButton(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento); + IDisposable? memento); /// - /// Draw the application tab. + /// Draw the "File application tab" /// /// Ribbon shape. /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - public abstract IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, + public abstract IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, - Color baseColor1, - Color baseColor2, - IDisposable memento); - + IPaletteRibbonFileAppTab palette, + IDisposable? memento); + /// /// Perform drawing of a ribbon cluster edge. /// @@ -544,7 +522,7 @@ public abstract void DrawSeparator(RenderContext context, /// Should check box be Displayed as hot tracking. /// Should check box be Displayed as pressed. public abstract Size GetCheckBoxPreferredSize(ViewLayoutContext context, - PaletteBase? palette, + PaletteBase palette, bool enabled, CheckState checkState, bool tracking, @@ -562,7 +540,7 @@ public abstract Size GetCheckBoxPreferredSize(ViewLayoutContext context, /// Should check box be Displayed as pressed. public abstract void DrawCheckBox(RenderContext context, Rectangle displayRect, - PaletteBase? palette, + PaletteBase palette, bool enabled, CheckState checkState, bool tracking, @@ -609,7 +587,7 @@ public abstract void DrawRadioButton(RenderContext context, /// State for which image size is needed. /// How to orientate the image. public abstract Size GetDropDownButtonPreferredSize(ViewLayoutContext context, - PaletteBase? palette, + PaletteBase palette, PaletteState state, VisualOrientation orientation); @@ -623,7 +601,7 @@ public abstract Size GetDropDownButtonPreferredSize(ViewLayoutContext context, /// How to orientate the image. public abstract void DrawDropDownButton(RenderContext context, Rectangle displayRect, - PaletteBase? palette, + PaletteBase palette, PaletteState state, VisualOrientation orientation); @@ -662,7 +640,7 @@ public abstract void DrawInputControlDropDownGlyph(RenderContext context, Rectangle cellRect, IPaletteContent? paletteContent, PaletteState state); - + /// /// Perform drawing of a ribbon dialog box launcher glyph. @@ -747,7 +725,7 @@ public abstract void DrawRibbonGroupSeparator(PaletteRibbonShape shape, public abstract Rectangle DrawGridSortGlyph(RenderContext context, SortOrder sortOrder, Rectangle cellRect, - IPaletteContent? paletteContent, + IPaletteContent paletteContent, PaletteState state, bool rtl); @@ -835,8 +813,8 @@ public abstract void DrawTrackTicksGlyph(RenderContext context, Size positionSize, int minimum, int maximum, - int frequency); - + int frequency); + /// /// Draw the track bar track glyph. /// @@ -935,7 +913,7 @@ protected static void DrawIconHelper([DisallowNull] ViewContext context, /// New color for remap. /// protected static void DrawImageHelper([DisallowNull] ViewContext context, - Image image, + Image? image, Color remapTransparent, Rectangle imageRect, VisualOrientation orientation, @@ -987,20 +965,20 @@ protected static void DrawImageHelper([DisallowNull] ViewContext context, case PaletteImageEffect.DarkDark: attribs.SetColorMatrix(_matrixDarkDark); break; - case PaletteImageEffect.Inherit: - // Should never happen! + case PaletteImageEffect.Inherit: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(effect.ToString()); break; } // Do we need to remap a colors in the bitmap? - if ((remapTransparent != Color.Empty) || - ((remapColor != Color.Empty) && (remapNew != Color.Empty))) + if ((remapTransparent != GlobalStaticValues.EMPTY_COLOR) || + ((remapColor != GlobalStaticValues.EMPTY_COLOR) && (remapNew != GlobalStaticValues.EMPTY_COLOR))) { var colorMaps = new List(); // Create remapping for the transparent color - if (remapTransparent != Color.Empty) + if (remapTransparent != GlobalStaticValues.EMPTY_COLOR) { var remap = new ColorMap { @@ -1011,7 +989,7 @@ protected static void DrawImageHelper([DisallowNull] ViewContext context, } // Create remapping from source to target colors - if ((remapColor != Color.Empty) && (remapNew != Color.Empty)) + if ((remapColor != GlobalStaticValues.EMPTY_COLOR) && (remapNew != GlobalStaticValues.EMPTY_COLOR)) { var remap = new ColorMap { @@ -1072,7 +1050,7 @@ protected static void DrawImageHelper([DisallowNull] ViewContext context, try { // Finally, just draw the image and let the transforms do the rest - context.Graphics.DrawImage(image, imageRect, 0, 0, imageRect.Width, imageRect.Height, GraphicsUnit.Pixel, attribs); + context.Graphics.DrawImage(image!, imageRect, 0, 0, imageRect.Width, imageRect.Height, GraphicsUnit.Pixel, attribs); } catch (ArgumentException) { diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderContext.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderContext.cs index a097081f2..32a701b28 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderContext.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderContext.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -93,14 +93,14 @@ public Rectangle GetAlignedRectangle(PaletteRectangleAlign align, Rectangle loca return local; case PaletteRectangleAlign.Control: Rectangle clientRect = (AlignControl == Control) - ? Control.ClientRectangle - : Control.RectangleToClient(AlignControl.RectangleToScreen(AlignControl.ClientRectangle)); + ? Control!.ClientRectangle + : Control!.RectangleToClient(AlignControl!.RectangleToScreen(AlignControl.ClientRectangle)); clientRect.Inflate(2, 2); return clientRect; case PaletteRectangleAlign.Form: // Gradient should cover the owning control (most likely a Form) - Rectangle formRect = Control.RectangleToClient(TopControl.RectangleToScreen(AlignControl.ClientRectangle)); + Rectangle formRect = Control!.RectangleToClient(TopControl!.RectangleToScreen(AlignControl!.ClientRectangle)); formRect.Inflate(2, 2); return formRect; case PaletteRectangleAlign.Inherit: diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDefinitions.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDefinitions.cs index 918f7a30c..5069e8c5d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDefinitions.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDefinitions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -72,7 +72,7 @@ bool EvalTransparentPaint(IPaletteBack paletteBack, /// Gets a renderer for drawing the toolstrips. /// /// Color palette to use when rendering toolstrip. - ToolStripRenderer RenderToolStrip(PaletteBase? colorPalette); + ToolStripRenderer RenderToolStrip(PaletteBase colorPalette); } #endregion @@ -100,7 +100,7 @@ Padding GetBorderRawPadding(IPaletteBorder palette, /// State associated with rendering. /// Visual orientation of the border. /// Padding structure detailing all four edges. - Padding GetBorderDisplayPadding(IPaletteBorder palette, + Padding GetBorderDisplayPadding(IPaletteBorder? palette, PaletteState state, VisualOrientation orientation); @@ -115,7 +115,7 @@ Padding GetBorderDisplayPadding(IPaletteBorder palette, /// GraphicsPath instance. GraphicsPath GetOutsideBorderPath(RenderContext context, Rectangle rect, - IPaletteBorder palette, + IPaletteBorder? palette, VisualOrientation orientation, PaletteState state); @@ -205,16 +205,12 @@ public interface IRenderContent /// Content values. /// Visual orientation of the content. /// State associated with rendering. - /// Drawing onto a composition element. - /// If composition, should glowing be drawn. /// Preferred size. Size GetContentPreferredSize(ViewLayoutContext context, IPaletteContent palette, IContentValues values, VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing); + PaletteState state); /// /// Perform layout calculations on the provided content. @@ -225,17 +221,13 @@ Size GetContentPreferredSize(ViewLayoutContext context, /// Content values. /// Visual orientation of the content. /// State associated with rendering. - /// Drawing onto a composition element. - /// If composition, should glowing be drawn. /// Memento with cached information. IDisposable LayoutContent(ViewLayoutContext context, Rectangle availableRect, IPaletteContent palette, IContentValues values, VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing); + PaletteState state); /// /// Perform draw of content using provided memento. @@ -246,8 +238,6 @@ IDisposable LayoutContent(ViewLayoutContext context, /// Cached values from layout call. /// Visual orientation of the content. /// State associated with rendering. - /// Drawing onto a composition element. - /// If composition, should glowing be drawn. /// Allow drawing of focus rectangle. void DrawContent(RenderContext context, Rectangle displayRect, @@ -255,8 +245,6 @@ void DrawContent(RenderContext context, IDisposable memento, VisualOrientation orientation, PaletteState state, - bool composition, - bool glowing, bool allowFocusRect); /// @@ -264,42 +252,42 @@ void DrawContent(RenderContext context, /// /// Cached values from layout call. /// True if the image is being Displayed; otherwise false. - bool GetContentImageDisplayed(IDisposable memento); + bool GetContentImageDisplayed(IDisposable? memento); /// /// Request the calculated position of the content image. /// /// Cached values from layout call. /// Display rectangle for the image content. - Rectangle GetContentImageRectangle(IDisposable memento); + Rectangle GetContentImageRectangle(IDisposable? memento); /// /// Request the calculated display of the short text. /// /// Cached values from layout call. /// True if the short text is being Displayed; otherwise false. - bool GetContentShortTextDisplayed(IDisposable memento); + bool GetContentShortTextDisplayed(IDisposable? memento); /// /// Request the calculated position of the content short text. /// /// Cached values from layout call. /// Display rectangle for the image content. - Rectangle GetContentShortTextRectangle(IDisposable memento); + Rectangle GetContentShortTextRectangle(IDisposable? memento); /// /// Request the calculated display of the long text. /// /// Cached values from layout call. /// True if the long text is being Displayed; otherwise false. - bool GetContentLongTextDisplayed(IDisposable memento); + bool GetContentLongTextDisplayed(IDisposable? memento); /// /// Request the calculated position of the content long text. /// /// Cached values from layout call. /// Display rectangle for the image content. - Rectangle GetContentLongTextRectangle(IDisposable memento); + Rectangle GetContentLongTextRectangle(IDisposable? memento); } #endregion @@ -405,7 +393,6 @@ public interface IRenderRibbon /// State associated with rendering. /// Palette used for sourcing settings. /// Orientation for drawing. - /// Drawing onto a composition element. /// Cached values to use when drawing. IDisposable? DrawRibbonBack(PaletteRibbonShape shape, RenderContext context, @@ -413,7 +400,6 @@ public interface IRenderRibbon PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - bool composition, IDisposable? memento); /// @@ -425,12 +411,12 @@ public interface IRenderRibbon /// Palette used for general ribbon settings. /// Palette used for background ribbon settings. /// Cached values to use when drawing. - IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, + IDisposable? DrawRibbonTabContextTitle(PaletteRibbonShape shape, RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento); + IDisposable? memento); /// /// Draw the application button. /// @@ -440,12 +426,12 @@ IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, /// State associated with rendering. /// Palette used for sourcing settings. /// Cached values to use when drawing. - IDisposable DrawRibbonApplicationButton(PaletteRibbonShape shape, + IDisposable? DrawRibbonApplicationButton(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento); + IDisposable? memento); /// /// Draw the application tab. @@ -454,16 +440,14 @@ IDisposable DrawRibbonApplicationButton(PaletteRibbonShape shape, /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, + IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, - Color baseColor1, - Color baseColor2, - IDisposable memento); + IPaletteRibbonFileAppTab palette, + IDisposable? memento); /// /// Perform drawing of a ribbon cluster edge. @@ -515,7 +499,7 @@ void DrawSeparator(RenderContext context, /// Should check box be Displayed as hot tracking. /// Should check box be Displayed as pressed. Size GetCheckBoxPreferredSize(ViewLayoutContext context, - PaletteBase? palette, + PaletteBase palette, bool enabled, CheckState checkState, bool tracking, @@ -533,7 +517,7 @@ Size GetCheckBoxPreferredSize(ViewLayoutContext context, /// Should check box be Displayed as pressed. void DrawCheckBox(RenderContext context, Rectangle displayRect, - PaletteBase? palette, + PaletteBase palette, bool enabled, CheckState checkState, bool tracking, @@ -581,7 +565,7 @@ void DrawRadioButton(RenderContext context, /// State for which image size is needed. /// How to orientate the image. Size GetDropDownButtonPreferredSize(ViewLayoutContext context, - PaletteBase? palette, + PaletteBase palette, PaletteState state, VisualOrientation orientation); @@ -595,7 +579,7 @@ Size GetDropDownButtonPreferredSize(ViewLayoutContext context, /// How to orientate the image. void DrawDropDownButton(RenderContext context, Rectangle displayRect, - PaletteBase? palette, + PaletteBase palette, PaletteState state, VisualOrientation orientation); @@ -718,7 +702,7 @@ void DrawRibbonGroupSeparator(PaletteRibbonShape shape, Rectangle DrawGridSortGlyph(RenderContext context, SortOrder sortOrder, Rectangle cellRect, - IPaletteContent? paletteContent, + IPaletteContent paletteContent, PaletteState state, bool rtl); diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDragDockingData.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDragDockingData.cs index 52398402f..3b72ddcc3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDragDockingData.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderDragDockingData.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderExpertHelpers.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderExpertHelpers.cs index 740e2973c..bcf9eebe5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderExpertHelpers.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderExpertHelpers.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,14 +29,14 @@ static RenderExpertHelpers() { _rounded1Blend = new Blend { - Positions = new[] { 0.0f, 0.1f, 1.0f }, - Factors = new[] { 0.0f, 1.0f, 1.0f } + Positions = [0.0f, 0.1f, 1.0f], + Factors = [0.0f, 1.0f, 1.0f] }; _rounded2Blend = new Blend { - Positions = new[] { 0.0f, 0.50f, 0.75f, 1.0f }, - Factors = new[] { 0.0f, 1.0f, 1.0f, 1.0f } + Positions = [0.0f, 0.50f, 0.75f, 1.0f], + Factors = [0.0f, 1.0f, 1.0f, 1.0f] }; } #endregion @@ -61,7 +61,7 @@ static RenderExpertHelpers() IDisposable? memento) { using var clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -108,7 +108,7 @@ static RenderExpertHelpers() if (rect is { Width: > 0, Height: > 0 }) { var generate = true; - MementoBackExpertShadow? cache; + MementoBackExpertShadow cache; // Access a cache instance and decide if cache resources need generating if (memento is MementoBackExpertShadow expertShadow) @@ -143,10 +143,10 @@ static RenderExpertHelpers() } using var aa = new AntiAlias(context.Graphics); - context.Graphics.FillRectangle(cache.Brush3, rect); - context.Graphics.FillPath(cache.Brush1, cache.Path1); - context.Graphics.FillPath(cache.Brush2, cache.Path2); - context.Graphics.FillPath(cache.Brush3, cache.Path3); + context.Graphics.FillRectangle(cache.Brush3!, rect); + context.Graphics.FillPath(cache.Brush1!, cache.Path1!); + context.Graphics.FillPath(cache.Brush2!, cache.Path2!); + context.Graphics.FillPath(cache.Brush3!, cache.Path3!); } return memento; @@ -194,7 +194,7 @@ static RenderExpertHelpers() IDisposable? memento) { using var clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -243,7 +243,7 @@ static RenderExpertHelpers() if (rect is { Width: > 0, Height: > 0 }) { var generate = true; - MementoBackExpertSquareHighlight? cache; + MementoBackExpertSquareHighlight cache; // Access a cache instance and decide if cache resources need generating if (memento is MementoBackExpertSquareHighlight highlight) @@ -306,13 +306,13 @@ static RenderExpertHelpers() CenterPoint = ellipseCenter, CenterColor = light ? Color.FromArgb(64, Color.White) : Color.FromArgb(128, Color.White), Blend = _rounded2Blend, - SurroundColors = new[] { Color.Transparent } + SurroundColors = [Color.Transparent] }; } - context.Graphics.FillRectangle(cache.BackBrush, rect); - context.Graphics.FillRectangle(cache.InnerBrush, cache.InnerRect); - context.Graphics.FillRectangle(cache.InsideLighten, cache.InnerRect); + context.Graphics.FillRectangle(cache.BackBrush!, rect); + context.Graphics.FillRectangle(cache.InnerBrush!, cache.InnerRect); + context.Graphics.FillRectangle(cache.InsideLighten!, cache.InnerRect); } return memento; @@ -371,112 +371,115 @@ private static IDisposable DrawBackSolid(RectangleF drawRect, bool total, bool tracking) { - // Cannot draw a zero length rectangle - if (drawRect is { Width: > 0, Height: > 0 }) + if (g is not null) { - var generate = true; - MementoBackExpertChecked? cache; - - // Access a cache instance and decide if cache resources need generating - if (memento is MementoBackExpertChecked expertChecked) - { - cache = expertChecked; - generate = !cache.UseCachedValues(drawRect, color1, color2, orientation); - } - else - { - memento?.Dispose(); - - cache = new MementoBackExpertChecked(drawRect, color1, color2, orientation); - memento = cache; - } - - // Do we need to generate the contents of the cache? - if (generate) + // Cannot draw a zero length rectangle + if (drawRect is { Width: > 0, Height: > 0 }) { - // Dispose of existing values - cache.Dispose(); + var generate = true; + MementoBackExpertChecked cache; - // If not drawing total area... - if (!total) + // Access a cache instance and decide if cache resources need generating + if (memento is MementoBackExpertChecked expertChecked) { - // Update to draw the inside area instead - drawRect.Inflate(-1, -1); - - cache.DrawRect = drawRect; - cache.ClipPath = new GraphicsPath(); - cache.ClipPath.AddLine(drawRect.X + 1, drawRect.Y, drawRect.Right - 1, drawRect.Y); - cache.ClipPath.AddLine(drawRect.Right - 1, drawRect.Y, drawRect.Right, drawRect.Y + 1); - cache.ClipPath.AddLine(drawRect.Right, drawRect.Y + 1, drawRect.Right, drawRect.Bottom - 2); - cache.ClipPath.AddLine(drawRect.Right, drawRect.Bottom - 2, drawRect.Right - 2, drawRect.Bottom); - cache.ClipPath.AddLine(drawRect.Right - 2, drawRect.Bottom, drawRect.Left + 1, drawRect.Bottom); - cache.ClipPath.AddLine(drawRect.Left + 1, drawRect.Bottom, drawRect.Left, drawRect.Bottom - 2); - cache.ClipPath.AddLine(drawRect.Left, drawRect.Bottom - 2, drawRect.Left, drawRect.Y + 1); - cache.ClipPath.AddLine(drawRect.Left, drawRect.Y + 1, drawRect.X + 1, drawRect.Y); + cache = expertChecked; + generate = !cache.UseCachedValues(drawRect, color1, color2, orientation); } else { - cache.ClipPath = new GraphicsPath(); - cache.ClipPath.AddRectangle(drawRect); - } + memento?.Dispose(); - // Create rectangle that covers the enter area - var gradientRect = new RectangleF(drawRect.X - 1, drawRect.Y - 1, drawRect.Width + 2, - drawRect.Height + 2); + cache = new MementoBackExpertChecked(drawRect, color1, color2, orientation); + memento = cache; + } - // Cannot draw a zero length rectangle - if (gradientRect is { Width: > 0, Height: > 0 }) + // Do we need to generate the contents of the cache? + if (generate) { - // Draw entire area in a gradient color effect - cache.EntireBrush = new LinearGradientBrush(gradientRect, CommonHelper.WhitenColor(color1, 0.92f, 0.92f, 0.92f), color1, AngleFromOrientation(orientation)) + // Dispose of existing values + cache.Dispose(); + + // If not drawing total area... + if (!total) { - Blend = _rounded1Blend - }; - } + // Update to draw the inside area instead + drawRect.Inflate(-1, -1); + + cache.DrawRect = drawRect; + cache.ClipPath = new GraphicsPath(); + cache.ClipPath.AddLine(drawRect.X + 1, drawRect.Y, drawRect.Right - 1, drawRect.Y); + cache.ClipPath.AddLine(drawRect.Right - 1, drawRect.Y, drawRect.Right, drawRect.Y + 1); + cache.ClipPath.AddLine(drawRect.Right, drawRect.Y + 1, drawRect.Right, drawRect.Bottom - 2); + cache.ClipPath.AddLine(drawRect.Right, drawRect.Bottom - 2, drawRect.Right - 2, drawRect.Bottom); + cache.ClipPath.AddLine(drawRect.Right - 2, drawRect.Bottom, drawRect.Left + 1, drawRect.Bottom); + cache.ClipPath.AddLine(drawRect.Left + 1, drawRect.Bottom, drawRect.Left, drawRect.Bottom - 2); + cache.ClipPath.AddLine(drawRect.Left, drawRect.Bottom - 2, drawRect.Left, drawRect.Y + 1); + cache.ClipPath.AddLine(drawRect.Left, drawRect.Y + 1, drawRect.X + 1, drawRect.Y); + } + else + { + cache.ClipPath = new GraphicsPath(); + cache.ClipPath.AddRectangle(drawRect); + } - RectangleF ellipseRect; - PointF ellipseCenter; - var ellipseHeight = Math.Max(1, drawRect.Height / 4); - var ellipseWidth = Math.Max(1, tracking ? drawRect.Width : drawRect.Width / 4); + // Create rectangle that covers the enter area + var gradientRect = new RectangleF(drawRect.X - 1, drawRect.Y - 1, drawRect.Width + 2, + drawRect.Height + 2); - // Ellipse is based on the orientation - switch (orientation) - { - default: - case VisualOrientation.Top: - ellipseRect = new RectangleF(drawRect.Left - ellipseWidth, drawRect.Bottom - ellipseHeight, drawRect.Width + (ellipseWidth * 2), ellipseHeight * 2); - ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), ellipseRect.Bottom); - break; - case VisualOrientation.Bottom: - ellipseRect = new RectangleF(drawRect.Left - ellipseWidth, drawRect.Top - ellipseHeight, drawRect.Width + (ellipseWidth * 2), ellipseHeight * 2); - ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), ellipseRect.Top); - break; - case VisualOrientation.Left: - ellipseRect = new RectangleF(drawRect.Right - ellipseWidth, drawRect.Top - ellipseHeight, ellipseWidth * 2, drawRect.Height + (ellipseHeight * 2)); - ellipseCenter = new PointF(ellipseRect.Right, ellipseRect.Top + (ellipseRect.Height / 2)); - break; - case VisualOrientation.Right: - ellipseRect = new RectangleF(drawRect.Left - ellipseWidth, drawRect.Top - ellipseHeight, ellipseWidth * 2, drawRect.Height + (ellipseHeight * 2)); - ellipseCenter = new PointF(ellipseRect.Left, ellipseRect.Top + (ellipseRect.Height / 2)); - break; + // Cannot draw a zero length rectangle + if (gradientRect is { Width: > 0, Height: > 0 }) + { + // Draw entire area in a gradient color effect + cache.EntireBrush = new LinearGradientBrush(gradientRect, CommonHelper.WhitenColor(color1, 0.92f, 0.92f, 0.92f), color1, AngleFromOrientation(orientation)) + { + Blend = _rounded1Blend + }; + } + + RectangleF ellipseRect; + PointF ellipseCenter; + var ellipseHeight = Math.Max(1, drawRect.Height / 4); + var ellipseWidth = Math.Max(1, tracking ? drawRect.Width : drawRect.Width / 4); + + // Ellipse is based on the orientation + switch (orientation) + { + default: + case VisualOrientation.Top: + ellipseRect = new RectangleF(drawRect.Left - ellipseWidth, drawRect.Bottom - ellipseHeight, drawRect.Width + (ellipseWidth * 2), ellipseHeight * 2); + ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), ellipseRect.Bottom); + break; + case VisualOrientation.Bottom: + ellipseRect = new RectangleF(drawRect.Left - ellipseWidth, drawRect.Top - ellipseHeight, drawRect.Width + (ellipseWidth * 2), ellipseHeight * 2); + ellipseCenter = new PointF(ellipseRect.Left + (ellipseRect.Width / 2), ellipseRect.Top); + break; + case VisualOrientation.Left: + ellipseRect = new RectangleF(drawRect.Right - ellipseWidth, drawRect.Top - ellipseHeight, ellipseWidth * 2, drawRect.Height + (ellipseHeight * 2)); + ellipseCenter = new PointF(ellipseRect.Right, ellipseRect.Top + (ellipseRect.Height / 2)); + break; + case VisualOrientation.Right: + ellipseRect = new RectangleF(drawRect.Left - ellipseWidth, drawRect.Top - ellipseHeight, ellipseWidth * 2, drawRect.Height + (ellipseHeight * 2)); + ellipseCenter = new PointF(ellipseRect.Left, ellipseRect.Top + (ellipseRect.Height / 2)); + break; + } + + cache.EllipsePath = new GraphicsPath(); + cache.EllipsePath.AddEllipse(ellipseRect); + cache.InsideLighten = new PathGradientBrush(cache.EllipsePath) + { + CenterPoint = ellipseCenter, + CenterColor = color2, + Blend = _rounded2Blend, + SurroundColors = [Color.Transparent] + }; } - cache.EllipsePath = new GraphicsPath(); - cache.EllipsePath.AddEllipse(ellipseRect); - cache.InsideLighten = new PathGradientBrush(cache.EllipsePath) + if (cache.EntireBrush != null) { - CenterPoint = ellipseCenter, - CenterColor = color2, - Blend = _rounded2Blend, - SurroundColors = new[] { Color.Transparent } - }; - } - - if (cache.EntireBrush != null) - { - using var clip = new Clipping(g, cache.ClipPath); - g.FillRectangle(cache.EntireBrush, cache.DrawRect); - g.FillPath(cache.InsideLighten, cache.EllipsePath); + using var clip = new Clipping(g, cache.ClipPath!); + g.FillRectangle(cache.EntireBrush, cache!.DrawRect); + g.FillPath(cache.InsideLighten!, cache.EllipsePath!); + } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderGlassHelpers.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderGlassHelpers.cs index 8fb244bef..09aa8180e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderGlassHelpers.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderGlassHelpers.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,8 +36,8 @@ static RenderGlassHelpers() { _glassFadeBlend = new Blend { - Positions = new[] { 0.0f, 0.33f, 0.66f, 1.0f }, - Factors = new[] { 0.0f, 0.0f, 0.8f, 1.0f } + Positions = [0.0f, 0.33f, 0.66f, 1.0f], + Factors = [0.0f, 0.0f, 0.8f, 1.0f] }; } #endregion @@ -62,7 +62,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -82,7 +82,7 @@ static RenderGlassHelpers() ControlPaint.Light(backColor2), ControlPaint.LightLight(backColor2), orientation, context.Graphics, - cache.First); + cache.First!); // Reduce size of the inside area rect.Inflate(-1, -1); @@ -91,7 +91,7 @@ static RenderGlassHelpers() cache.Second = DrawBackGlassCenter(rect, backColor1, backColor2, _glassColorTopL, _glassColorBottomL, 2f, 1f, orientation, context.Graphics, - FULL_GLASS_LENGTH, cache.Second); + FULL_GLASS_LENGTH, cache.Second!); return memento; } @@ -115,7 +115,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -134,7 +134,7 @@ static RenderGlassHelpers() ControlPaint.Light(backColor1), ControlPaint.LightLight(backColor1), orientation, context.Graphics, - cache.First); + cache.First!); // Reduce size on all but the upper edge ModifyRectByEdges(ref rect, 1, 0, 1, 1, orientation); @@ -167,7 +167,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -187,11 +187,11 @@ static RenderGlassHelpers() _glassColorBottomL, orientation, context.Graphics, - cache.First); + cache.First!); cache.Second = DrawBackDarkEdge(rect, ControlPaint.Dark(backColor1), 3, orientation, context.Graphics, - cache.Second); + cache.Second!); return memento; } @@ -458,7 +458,7 @@ static RenderGlassHelpers() { using Clipping clip = new Clipping(context.Graphics, path); var generate = true; - MementoBackGlassThreeEdge? cache; + MementoBackGlassThreeEdge cache; // Access a cache instance and decide if cache resources need generating if (memento is MementoBackGlassThreeEdge glassThreeEdge) @@ -657,7 +657,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -713,7 +713,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -768,7 +768,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoDouble? cache; + MementoDouble cache; if (memento is MementoDouble mementoDouble) { @@ -788,7 +788,7 @@ static RenderGlassHelpers() ControlPaint.Light(backColor2), ControlPaint.LightLight(backColor2), orientation, context.Graphics, - cache.First); + cache.First!); // Reduce size of the inside area rect.Inflate(-1, -1); @@ -812,7 +812,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoTriple? cache; + MementoTriple cache; if (memento is MementoTriple triple) { @@ -831,7 +831,7 @@ static RenderGlassHelpers() ControlPaint.Light(backColor1), ControlPaint.LightLight(backColor1), orientation, context.Graphics, - cache.First); + cache.First!); // Reduce size on all but the upper edge ModifyRectByEdges(ref rect, 1, 0, 1, 1, orientation); @@ -847,7 +847,7 @@ static RenderGlassHelpers() cache.Third = DrawBackDarkEdge(rect, ControlPaint.Dark(backColor1), 3, orientation, context.Graphics, - cache.Third); + cache.Third!); return memento; } @@ -862,7 +862,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoTriple? cache; + MementoTriple cache; if (memento is MementoTriple triple) { @@ -882,7 +882,7 @@ static RenderGlassHelpers() ControlPaint.LightLight(backColor1), ControlPaint.LightLight(backColor1), orientation, context.Graphics, - cache.First); + cache.First!); // Reduce size on all but the upper edge ModifyRectByEdges(ref rect, 1, 0, 1, 1, orientation); @@ -899,7 +899,7 @@ static RenderGlassHelpers() // Draw a darker area for top edge cache.Third = DrawBackDarkEdge(rect, ControlPaint.Dark(backColor1), 3, orientation, context.Graphics, - cache.Third); + cache.Third!); return memento; } @@ -914,7 +914,7 @@ static RenderGlassHelpers() IDisposable? memento) { using Clipping clip = new Clipping(context.Graphics, path); - MementoTriple? cache; + MementoTriple cache; if (memento is MementoTriple triple) { @@ -934,7 +934,7 @@ static RenderGlassHelpers() ControlPaint.LightLight(backColor2), orientation, context.Graphics, - cache.First); + cache.First!); // Reduce size on all but the upper edge ModifyRectByEdges(ref rect, 1, 0, 1, 1, orientation); @@ -950,7 +950,7 @@ static RenderGlassHelpers() cache.Third = DrawBackDarkEdge(rect, ControlPaint.Dark(backColor1), 3, orientation, context.Graphics, - cache.Third); + cache.Third!); return memento; } @@ -964,102 +964,105 @@ private static IDisposable DrawBackLinearRadial(RectangleF drawRect, Graphics? g, IDisposable memento) { - MementoDouble cache; - - if (memento is MementoDouble mementoDouble) - { - cache = mementoDouble; - } - else + if (g is not null) { - memento?.Dispose(); - - cache = new MementoDouble(); - memento = cache; - } - - // Draw entire background in linear gradient effect - cache.First = DrawBackLinear(drawRect, sigma, color1, color2, orientation, g, cache.First); - - var generate = true; - MementoBackLinearRadial cacheThis; + MementoDouble cache; - // Access a cache instance and decide if cache resources need generating - if (cache.Second is MementoBackLinearRadial linearRadial) - { - cacheThis = linearRadial; - generate = !cacheThis.UseCachedValues(drawRect, color2, color3, orientation); - } - else - { - cache.Second?.Dispose(); + if (memento is MementoDouble mementoDouble) + { + cache = mementoDouble; + } + else + { + memento?.Dispose(); - cacheThis = new MementoBackLinearRadial(drawRect, color2, color3, orientation); - cache.Second = cacheThis; - } + cache = new MementoDouble(); + memento = cache; + } - // Do we need to generate the contents of the cache? - if (generate) - { - // Dispose of existing values - cacheThis.Dispose(); + // Draw entire background in linear gradient effect + cache.First = DrawBackLinear(drawRect, sigma, color1, color2, orientation, g, cache.First!); - float third; + var generate = true; + MementoBackLinearRadial cacheThis; - // Find the 1/3 height used for the ellipse - if (VerticalOrientation(orientation)) + // Access a cache instance and decide if cache resources need generating + if (cache.Second is MementoBackLinearRadial linearRadial) { - third = drawRect.Height / 3; + cacheThis = linearRadial; + generate = !cacheThis.UseCachedValues(drawRect, color2, color3, orientation); } else { - third = drawRect.Width / 3; - } + cache.Second?.Dispose(); - // Find the bottom area rectangle - RectangleF ellipseRect; - PointF centerPoint; + cacheThis = new MementoBackLinearRadial(drawRect, color2, color3, orientation); + cache.Second = cacheThis; + } - switch (orientation) + // Do we need to generate the contents of the cache? + if (generate) { - case VisualOrientation.Left: - ellipseRect = new RectangleF(drawRect.Right - third, drawRect.Y + 1, third, drawRect.Height - 2); - centerPoint = new PointF(ellipseRect.Right, ellipseRect.Y + (ellipseRect.Height / 2)); - break; - case VisualOrientation.Right: - ellipseRect = new RectangleF(drawRect.X - 1, drawRect.Y + 1, third, drawRect.Height - 2); - centerPoint = new PointF(ellipseRect.Left, ellipseRect.Y + (ellipseRect.Height / 2)); - break; - case VisualOrientation.Bottom: - ellipseRect = new RectangleF(drawRect.X + 1, drawRect.Y - 1, drawRect.Width - 2, third); - centerPoint = new PointF(ellipseRect.X + (ellipseRect.Width / 2), ellipseRect.Top); - break; - case VisualOrientation.Top: - default: - ellipseRect = new RectangleF(drawRect.X + 1, drawRect.Bottom - third, drawRect.Width - 2, third); - centerPoint = new PointF(ellipseRect.X + (ellipseRect.Width / 2), ellipseRect.Bottom); - break; - } + // Dispose of existing values + cacheThis.Dispose(); - cacheThis.EllipseRect = ellipseRect; + float third; - // Cannot draw a path that contains a zero sized element - if (ellipseRect is { Width: > 0, Height: > 0 }) - { - cacheThis.Path = new GraphicsPath(); - cacheThis.Path.AddEllipse(ellipseRect); - cacheThis.BottomBrush = new PathGradientBrush(cacheThis.Path) + // Find the 1/3 height used for the ellipse + if (VerticalOrientation(orientation)) { - CenterColor = ControlPaint.Light(color3), - CenterPoint = centerPoint, - SurroundColors = new[] { color2 } - }; + third = drawRect.Height / 3; + } + else + { + third = drawRect.Width / 3; + } + + // Find the bottom area rectangle + RectangleF ellipseRect; + PointF centerPoint; + + switch (orientation) + { + case VisualOrientation.Left: + ellipseRect = new RectangleF(drawRect.Right - third, drawRect.Y + 1, third, drawRect.Height - 2); + centerPoint = new PointF(ellipseRect.Right, ellipseRect.Y + (ellipseRect.Height / 2)); + break; + case VisualOrientation.Right: + ellipseRect = new RectangleF(drawRect.X - 1, drawRect.Y + 1, third, drawRect.Height - 2); + centerPoint = new PointF(ellipseRect.Left, ellipseRect.Y + (ellipseRect.Height / 2)); + break; + case VisualOrientation.Bottom: + ellipseRect = new RectangleF(drawRect.X + 1, drawRect.Y - 1, drawRect.Width - 2, third); + centerPoint = new PointF(ellipseRect.X + (ellipseRect.Width / 2), ellipseRect.Top); + break; + case VisualOrientation.Top: + default: + ellipseRect = new RectangleF(drawRect.X + 1, drawRect.Bottom - third, drawRect.Width - 2, third); + centerPoint = new PointF(ellipseRect.X + (ellipseRect.Width / 2), ellipseRect.Bottom); + break; + } + + cacheThis.EllipseRect = ellipseRect; + + // Cannot draw a path that contains a zero sized element + if (ellipseRect is { Width: > 0, Height: > 0 }) + { + cacheThis.Path = new GraphicsPath(); + cacheThis.Path.AddEllipse(ellipseRect); + cacheThis.BottomBrush = new PathGradientBrush(cacheThis.Path) + { + CenterColor = ControlPaint.Light(color3), + CenterPoint = centerPoint, + SurroundColors = [color2] + }; + } } - } - if (cacheThis.BottomBrush != null) - { - g.FillRectangle(cacheThis.BottomBrush, cacheThis.EllipseRect); + if (cacheThis.BottomBrush != null) + { + g.FillRectangle(cacheThis.BottomBrush, cacheThis.EllipseRect); + } } return memento; @@ -1077,131 +1080,134 @@ private static IDisposable DrawBackLinearRadial(RectangleF drawRect, float glassPercent, IDisposable? memento) { - MementoDouble? cache; - - if (memento is MementoDouble mementoDouble) + if (g is not null) { - cache = mementoDouble; - } - else - { - memento?.Dispose(); - - cache = new MementoDouble(); - memento = cache; - } + MementoDouble cache; - // Draw the gradient effect background - RectangleF glassRect = DrawBackGlassBasic(drawRect, color1, color2, - glassColor1, glassColor2, - factorX, factorY, - orientation, g, - glassPercent, - ref cache.First); + if (memento is MementoDouble mementoDouble) + { + cache = mementoDouble; + } + else + { + memento?.Dispose(); - var generate = true; - MementoBackGlassRadial cacheThis; + cache = new MementoDouble(); + memento = cache; + } - // Access a cache instance and decide if cache resources need generating - if (cache.Second is MementoBackGlassRadial glassRadial) - { - cacheThis = glassRadial; - generate = !cacheThis.UseCachedValues(drawRect, color1, color2, factorX, factorY, orientation); - } - else - { - cache.Second?.Dispose(); + // Draw the gradient effect background + RectangleF glassRect = DrawBackGlassBasic(drawRect, color1, color2, + glassColor1, glassColor2, + factorX, factorY, + orientation, g, + glassPercent, + ref cache.First!); - cacheThis = new MementoBackGlassRadial(drawRect, color1, color2, factorX, factorY, orientation); - cache.Second = cacheThis; - } + var generate = true; + MementoBackGlassRadial cacheThis; - // Do we need to generate the contents of the cache? - if (generate) - { - // Dispose of existing values - cacheThis.Dispose(); + // Access a cache instance and decide if cache resources need generating + if (cache.Second is MementoBackGlassRadial glassRadial) + { + cacheThis = glassRadial; + generate = !cacheThis.UseCachedValues(drawRect, color1, color2, factorX, factorY, orientation); + } + else + { + cache.Second?.Dispose(); - // Find the bottom area rectangle + cacheThis = new MementoBackGlassRadial(drawRect, color1, color2, factorX, factorY, orientation); + cache.Second = cacheThis; + } - RectangleF mainRect = orientation switch + // Do we need to generate the contents of the cache? + if (generate) { - VisualOrientation.Right => drawRect with { Width = drawRect.Width - glassRect.Width - 1 }, - VisualOrientation.Left => drawRect with { X = glassRect.Right + 1, Width = drawRect.Width - glassRect.Width - 1 }, - VisualOrientation.Bottom => drawRect with { Height = drawRect.Height - glassRect.Height - 1 }, - VisualOrientation.Top => drawRect with { Y = glassRect.Bottom + 1, Height = drawRect.Height - glassRect.Height - 1 }, - _ => drawRect with { Y = glassRect.Bottom + 1, Height = drawRect.Height - glassRect.Height - 1 } - }; + // Dispose of existing values + cacheThis.Dispose(); - RectangleF doubleRect; + // Find the bottom area rectangle - // Find the box that encloses the ellipse (ellipses is sized using the factorX, factorY) - if (VerticalOrientation(orientation)) - { - var mainRectWidth = mainRect.Width * factorX; - var mainRectWidthOffset = (mainRectWidth - mainRect.Width) / 2; - var mainRectHeight = mainRect.Height * factorY; - float mainRectHeightOffset; + RectangleF mainRect = orientation switch + { + VisualOrientation.Right => drawRect with { Width = drawRect.Width - glassRect.Width - 1 }, + VisualOrientation.Left => drawRect with { X = glassRect.Right + 1, Width = drawRect.Width - glassRect.Width - 1 }, + VisualOrientation.Bottom => drawRect with { Height = drawRect.Height - glassRect.Height - 1 }, + VisualOrientation.Top => drawRect with { Y = glassRect.Bottom + 1, Height = drawRect.Height - glassRect.Height - 1 }, + _ => drawRect with { Y = glassRect.Bottom + 1, Height = drawRect.Height - glassRect.Height - 1 } + }; + + RectangleF doubleRect; - // Find orientation specific ellsipe rectangle - if (orientation == VisualOrientation.Top) + // Find the box that encloses the ellipse (ellipses is sized using the factorX, factorY) + if (VerticalOrientation(orientation)) { - mainRectHeightOffset = (mainRectHeight - mainRect.Height) / 2; + var mainRectWidth = mainRect.Width * factorX; + var mainRectWidthOffset = (mainRectWidth - mainRect.Width) / 2; + var mainRectHeight = mainRect.Height * factorY; + float mainRectHeightOffset; + + // Find orientation specific ellsipe rectangle + if (orientation == VisualOrientation.Top) + { + mainRectHeightOffset = (mainRectHeight - mainRect.Height) / 2; + } + else + { + mainRectHeightOffset = mainRectHeight + ((mainRectHeight - mainRect.Height) / 2); + } + + doubleRect = new RectangleF(mainRect.X - mainRectWidthOffset, + mainRect.Y - mainRectHeightOffset, + mainRectWidth, mainRectHeight * 2); } else { - mainRectHeightOffset = mainRectHeight + ((mainRectHeight - mainRect.Height) / 2); - } + var mainRectHeight = mainRect.Height * factorX; + var mainRectHeightOffset = (mainRectHeight - mainRect.Height) / 2; + var mainRectWidth = mainRect.Width * factorY; + float mainRectWidthOffset; - doubleRect = new RectangleF(mainRect.X - mainRectWidthOffset, - mainRect.Y - mainRectHeightOffset, - mainRectWidth, mainRectHeight * 2); - } - else - { - var mainRectHeight = mainRect.Height * factorX; - var mainRectHeightOffset = (mainRectHeight - mainRect.Height) / 2; - var mainRectWidth = mainRect.Width * factorY; - float mainRectWidthOffset; + // Find orientation specific ellsipe rectangle + if (orientation == VisualOrientation.Left) + { + mainRectWidthOffset = (mainRectWidth - mainRect.Width) / 2; + } + else + { + mainRectWidthOffset = mainRectWidth + ((mainRectWidth - mainRect.Width) / 2); + } - // Find orientation specific ellsipe rectangle - if (orientation == VisualOrientation.Left) - { - mainRectWidthOffset = (mainRectWidth - mainRect.Width) / 2; + doubleRect = new RectangleF(mainRect.X - mainRectWidthOffset, + mainRect.Y - mainRectHeightOffset, + mainRectWidth * 2, mainRectHeight); } - else + + // Cannot draw a path that contains a zero sized element + if (doubleRect is { Width: > 0, Height: > 0 }) { - mainRectWidthOffset = mainRectWidth + ((mainRectWidth - mainRect.Width) / 2); - } + // We use a path to create an ellipse for the light effect in the bottom of the area + cacheThis.Path = new GraphicsPath(); + cacheThis.Path.AddEllipse(doubleRect); - doubleRect = new RectangleF(mainRect.X - mainRectWidthOffset, - mainRect.Y - mainRectHeightOffset, - mainRectWidth * 2, mainRectHeight); + // Create a brush from the path + cacheThis.BottomBrush = new PathGradientBrush(cacheThis.Path) + { + CenterColor = color2, + CenterPoint = new PointF(doubleRect.X + (doubleRect.Width / 2), doubleRect.Y + (doubleRect.Height / 2)), + SurroundColors = [color1] + }; + cacheThis.MainRect = mainRect; + } } - // Cannot draw a path that contains a zero sized element - if (doubleRect is { Width: > 0, Height: > 0 }) + if (cacheThis.BottomBrush != null) { - // We use a path to create an ellipse for the light effect in the bottom of the area - cacheThis.Path = new GraphicsPath(); - cacheThis.Path.AddEllipse(doubleRect); - - // Create a brush from the path - cacheThis.BottomBrush = new PathGradientBrush(cacheThis.Path) - { - CenterColor = color2, - CenterPoint = new PointF(doubleRect.X + (doubleRect.Width / 2), doubleRect.Y + (doubleRect.Height / 2)), - SurroundColors = new[] { color1 } - }; - cacheThis.MainRect = mainRect; + g.FillRectangle(cacheThis.BottomBrush, cacheThis.MainRect); } } - if (cacheThis.BottomBrush != null) - { - g.FillRectangle(cacheThis.BottomBrush, cacheThis.MainRect); - } - return memento; } @@ -1217,65 +1223,68 @@ private static IDisposable DrawBackGlassCenter(RectangleF drawRect, float glassPercent, IDisposable memento) { - // Cannot draw a path that contains a zero sized element - if (drawRect is { Width: > 0, Height: > 0 }) + if (g is not null) { - MementoDouble cache; - - if (memento is MementoDouble mementoDouble) - { - cache = mementoDouble; - } - else + // Cannot draw a path that contains a zero sized element + if (drawRect is { Width: > 0, Height: > 0 }) { - memento?.Dispose(); + MementoDouble cache; - cache = new MementoDouble(); - memento = cache; - } + if (memento is MementoDouble mementoDouble) + { + cache = mementoDouble; + } + else + { + memento?.Dispose(); - // Draw the gradient effect background - DrawBackGlassBasic(drawRect, color1, color2, - glassColor1, glassColor2, - factorX, factorY, - orientation, g, - glassPercent, - ref cache.First); + cache = new MementoDouble(); + memento = cache; + } - var generate = true; - MementoBackGlassCenter cacheThis; + // Draw the gradient effect background + DrawBackGlassBasic(drawRect, color1, color2, + glassColor1, glassColor2, + factorX, factorY, + orientation, g, + glassPercent, + ref cache.First!); - // Access a cache instance and decide if cache resources need generating - if (cache.Second is MementoBackGlassCenter glassCenter) - { - cacheThis = glassCenter; - generate = !cacheThis.UseCachedValues(drawRect, color2); - } - else - { - cache.Second?.Dispose(); + var generate = true; + MementoBackGlassCenter cacheThis; - cacheThis = new MementoBackGlassCenter(drawRect, color2); - cache.Second = cacheThis; - } + // Access a cache instance and decide if cache resources need generating + if (cache.Second is MementoBackGlassCenter glassCenter) + { + cacheThis = glassCenter; + generate = !cacheThis.UseCachedValues(drawRect, color2); + } + else + { + cache.Second?.Dispose(); - // Do we need to generate the contents of the cache? - if (generate) - { - // Dispose of existing values - cacheThis.Dispose(); + cacheThis = new MementoBackGlassCenter(drawRect, color2); + cache.Second = cacheThis; + } - cacheThis.Path = new GraphicsPath(); - cacheThis.Path.AddEllipse(drawRect); - cacheThis.BottomBrush = new PathGradientBrush(cacheThis.Path) + // Do we need to generate the contents of the cache? + if (generate) { - CenterColor = color2, - CenterPoint = new PointF(drawRect.X + (drawRect.Width / 2), drawRect.Y + (drawRect.Height / 2)), - SurroundColors = new[] { Color.Transparent } - }; - } + // Dispose of existing values + cacheThis.Dispose(); - g.FillRectangle(cacheThis.BottomBrush, drawRect); + cacheThis.Path = new GraphicsPath(); + cacheThis.Path.AddEllipse(drawRect); + cacheThis.BottomBrush = new PathGradientBrush(cacheThis.Path) + { + CenterColor = color2, + CenterPoint = new PointF(drawRect.X + (drawRect.Width / 2), drawRect.Y + (drawRect.Height / 2)), + SurroundColors = [Color.Transparent] + }; + } + + g.FillRectangle(cacheThis.BottomBrush!, drawRect); + } } return memento; @@ -1291,107 +1300,110 @@ private static IDisposable DrawBackGlassFade(RectangleF drawRect, Graphics? g, IDisposable memento) { - // Cannot draw a zero length rectangle - if (drawRect is { Width: > 0, Height: > 0 } && - outerRect is { Width: > 0, Height: > 0 }) + if (g is not null) { - var generate = true; - MementoBackGlassFade cache; - - // Access a cache instance and decide if cache resources need generating - if (memento is MementoBackGlassFade glassFade) - { - cache = glassFade; - generate = !cache.UseCachedValues(drawRect, outerRect, color1, color2, - glassColor1, glassColor2, orientation); - } - else + // Cannot draw a zero length rectangle + if (drawRect is { Width: > 0, Height: > 0 } && + outerRect is { Width: > 0, Height: > 0 }) { - memento?.Dispose(); + var generate = true; + MementoBackGlassFade cache; - cache = new MementoBackGlassFade(drawRect, outerRect, color1, color2, - glassColor1, glassColor2, orientation); - memento = cache; - } - - // Do we need to generate the contents of the cache? - if (generate) - { - // Dispose of existing values - cache.Dispose(); + // Access a cache instance and decide if cache resources need generating + if (memento is MementoBackGlassFade glassFade) + { + cache = glassFade; + generate = !cache.UseCachedValues(drawRect, outerRect, color1, color2, + glassColor1, glassColor2, orientation); + } + else + { + memento?.Dispose(); - // Create gradient rect from the drawing rect - RectangleF gradientRect = new RectangleF(drawRect.X - 1, drawRect.Y - 1, drawRect.Width + 2, - drawRect.Height + 2); + cache = new MementoBackGlassFade(drawRect, outerRect, color1, color2, + glassColor1, glassColor2, orientation); + memento = cache; + } - // Cannot draw a zero sized rectangle - if (gradientRect is { Width: > 0, Height: > 0 }) + // Do we need to generate the contents of the cache? + if (generate) { - // Draw a gradient from first to second over the length, but use the - // first color for the first 33% of distance and fade over the rest - cache.MainBrush = new LinearGradientBrush(gradientRect, color1, color2, AngleFromOrientation(orientation)) + // Dispose of existing values + cache.Dispose(); + + // Create gradient rect from the drawing rect + RectangleF gradientRect = new RectangleF(drawRect.X - 1, drawRect.Y - 1, drawRect.Width + 2, + drawRect.Height + 2); + + // Cannot draw a zero sized rectangle + if (gradientRect is { Width: > 0, Height: > 0 }) { - Blend = _glassFadeBlend - }; - } + // Draw a gradient from first to second over the length, but use the + // first color for the first 33% of distance and fade over the rest + cache.MainBrush = new LinearGradientBrush(gradientRect, color1, color2, AngleFromOrientation(orientation)) + { + Blend = _glassFadeBlend + }; + } - float glassLength; + float glassLength; - // Glass covers 33% of the orienatated length - if (VerticalOrientation(orientation)) - { - glassLength = (int)(outerRect.Height * 0.33f) + outerRect.Y - drawRect.Y; - } - else - { - glassLength = (int)(outerRect.Width * 0.33f) + outerRect.X - drawRect.X; - } + // Glass covers 33% of the orienatated length + if (VerticalOrientation(orientation)) + { + glassLength = (int)(outerRect.Height * 0.33f) + outerRect.Y - drawRect.Y; + } + else + { + glassLength = (int)(outerRect.Width * 0.33f) + outerRect.X - drawRect.X; + } - RectangleF glassRect; - RectangleF mainRect; + RectangleF glassRect; + RectangleF mainRect; - // Create rectangles that cover the glass and main area - switch (orientation) - { - case VisualOrientation.Left: - glassRect = drawRect with { Width = glassLength }; - break; - case VisualOrientation.Right: - mainRect = drawRect with { Width = drawRect.Width - glassLength }; - glassRect = drawRect with { X = mainRect.Right, Width = glassLength }; - break; - case VisualOrientation.Top: - default: - glassRect = drawRect with { Height = glassLength }; - break; - case VisualOrientation.Bottom: - mainRect = drawRect with { Height = drawRect.Height - glassLength }; - glassRect = drawRect with { Y = mainRect.Bottom, Height = glassLength }; - break; - } + // Create rectangles that cover the glass and main area + switch (orientation) + { + case VisualOrientation.Left: + glassRect = drawRect with { Width = glassLength }; + break; + case VisualOrientation.Right: + mainRect = drawRect with { Width = drawRect.Width - glassLength }; + glassRect = drawRect with { X = mainRect.Right, Width = glassLength }; + break; + case VisualOrientation.Top: + default: + glassRect = drawRect with { Height = glassLength }; + break; + case VisualOrientation.Bottom: + mainRect = drawRect with { Height = drawRect.Height - glassLength }; + glassRect = drawRect with { Y = mainRect.Bottom, Height = glassLength }; + break; + } - // Create gradient rectangles - RectangleF glassGradientRect = new RectangleF(glassRect.X - 1, glassRect.Y - 1, glassRect.Width + 2, - glassRect.Height + 2); + // Create gradient rectangles + RectangleF glassGradientRect = new RectangleF(glassRect.X - 1, glassRect.Y - 1, glassRect.Width + 2, + glassRect.Height + 2); - // Cannot draw a zero sized rectangle - if (glassRect is { Width: > 0, Height: > 0 } && - glassGradientRect is { Width: > 0, Height: > 0 }) - { - // Use semi-transparent white colors to create the glass effect - cache.TopBrush = new LinearGradientBrush(glassGradientRect, glassColor1, glassColor2, AngleFromOrientation(orientation)); - cache.GlassRect = glassRect; + // Cannot draw a zero sized rectangle + if (glassRect is { Width: > 0, Height: > 0 } && + glassGradientRect is { Width: > 0, Height: > 0 }) + { + // Use semi-transparent white colors to create the glass effect + cache.TopBrush = new LinearGradientBrush(glassGradientRect, glassColor1, glassColor2, AngleFromOrientation(orientation)); + cache.GlassRect = glassRect; + } } - } - if (cache.MainBrush != null) - { - g.FillRectangle(cache.MainBrush, drawRect); - } + if (cache.MainBrush != null) + { + g.FillRectangle(cache.MainBrush, drawRect); + } - if (cache.TopBrush != null) - { - g.FillRectangle(cache.TopBrush, cache.GlassRect); + if (cache.TopBrush != null) + { + g.FillRectangle(cache.TopBrush, cache.GlassRect); + } } } @@ -1409,99 +1421,102 @@ private static IDisposable DrawBackGlassFade(RectangleF drawRect, float glassPercent, IDisposable? memento) { - // Cannot draw a zero length rectangle - if (drawRect is { Width: > 0, Height: > 0 } && - outerRect is { Width: > 0, Height: > 0 }) + if (g is not null) { - var generate = true; - MementoBackGlassLinear? cache; - - // Access a cache instance and decide if cache resources need generating - if (memento is MementoBackGlassLinear glassLinear) - { - cache = glassLinear; - generate = !cache.UseCachedValues(drawRect, outerRect, color1, color2, - glassColor1, glassColor2, orientation, glassPercent); - } - else - { - memento?.Dispose(); - - cache = new MementoBackGlassLinear(drawRect, outerRect, color1, color2, - glassColor1, glassColor2, orientation, glassPercent); - memento = cache; - } - - // Do we need to generate the contents of the cache? - if (generate) + // Cannot draw a zero length rectangle + if (drawRect is { Width: > 0, Height: > 0 } && + outerRect is { Width: > 0, Height: > 0 }) { - // Dispose of existing values - cache.Dispose(); + var generate = true; + MementoBackGlassLinear cache; - RectangleF glassRect; - RectangleF mainRect; - float glassLength; - - // Glass covers specified percentage of the orienatated length - if (VerticalOrientation(orientation)) + // Access a cache instance and decide if cache resources need generating + if (memento is MementoBackGlassLinear glassLinear) { - glassLength = (int)(outerRect.Height * glassPercent) + outerRect.Y - drawRect.Y; + cache = glassLinear; + generate = !cache.UseCachedValues(drawRect, outerRect, color1, color2, + glassColor1, glassColor2, orientation, glassPercent); } else { - glassLength = (int)(outerRect.Width * glassPercent) + outerRect.X - drawRect.X; - } + memento?.Dispose(); - // Create rectangles that cover the glass and main area - switch (orientation) - { - case VisualOrientation.Left: - glassRect = drawRect with { Width = glassLength }; - mainRect = drawRect with { X = glassRect.Right + 1, Width = drawRect.Width - glassRect.Width - 1 }; - break; - case VisualOrientation.Right: - mainRect = drawRect with { Width = drawRect.Width - glassLength }; - glassRect = drawRect with { X = mainRect.Right, Width = glassLength }; - break; - case VisualOrientation.Top: - default: - glassRect = drawRect with { Height = glassLength }; - mainRect = drawRect with { Y = glassRect.Bottom + 1, Height = drawRect.Height - glassRect.Height - 1 }; - break; - case VisualOrientation.Bottom: - mainRect = drawRect with { Height = drawRect.Height - glassLength }; - glassRect = drawRect with { Y = mainRect.Bottom, Height = glassLength }; - break; + cache = new MementoBackGlassLinear(drawRect, outerRect, color1, color2, + glassColor1, glassColor2, orientation, glassPercent); + memento = cache; } - cache.TotalBrush = new SolidBrush(color1); - cache.GlassRect = glassRect; - cache.MainRect = mainRect; - - // Create gradient rectangles - RectangleF glassGradientRect = new RectangleF(cache.GlassRect.X - 1, cache.GlassRect.Y - 1, - cache.GlassRect.Width + 2, cache.GlassRect.Height + 2); - RectangleF mainGradientRect = new RectangleF(cache.MainRect.X - 1, cache.MainRect.Y - 1, - cache.MainRect.Width + 2, cache.MainRect.Height + 2); - - // Cannot draw a zero length rectangle - if (cache.GlassRect is { Width: > 0, Height: > 0 } && - cache.MainRect is { Width: > 0, Height: > 0 } && - glassGradientRect is { Width: > 0, Height: > 0 } && - mainGradientRect is { Width: > 0, Height: > 0 }) + // Do we need to generate the contents of the cache? + if (generate) { - cache.TopBrush = new LinearGradientBrush(glassGradientRect, glassColor1, glassColor2, AngleFromOrientation(orientation)); - cache.BottomBrush = new LinearGradientBrush(mainGradientRect, color1, color2, AngleFromOrientation(orientation)); + // Dispose of existing values + cache.Dispose(); + + RectangleF glassRect; + RectangleF mainRect; + float glassLength; + + // Glass covers specified percentage of the orienatated length + if (VerticalOrientation(orientation)) + { + glassLength = (int)(outerRect.Height * glassPercent) + outerRect.Y - drawRect.Y; + } + else + { + glassLength = (int)(outerRect.Width * glassPercent) + outerRect.X - drawRect.X; + } + + // Create rectangles that cover the glass and main area + switch (orientation) + { + case VisualOrientation.Left: + glassRect = drawRect with { Width = glassLength }; + mainRect = drawRect with { X = glassRect.Right + 1, Width = drawRect.Width - glassRect.Width - 1 }; + break; + case VisualOrientation.Right: + mainRect = drawRect with { Width = drawRect.Width - glassLength }; + glassRect = drawRect with { X = mainRect.Right, Width = glassLength }; + break; + case VisualOrientation.Top: + default: + glassRect = drawRect with { Height = glassLength }; + mainRect = drawRect with { Y = glassRect.Bottom + 1, Height = drawRect.Height - glassRect.Height - 1 }; + break; + case VisualOrientation.Bottom: + mainRect = drawRect with { Height = drawRect.Height - glassLength }; + glassRect = drawRect with { Y = mainRect.Bottom, Height = glassLength }; + break; + } + + cache.TotalBrush = new SolidBrush(color1); + cache.GlassRect = glassRect; + cache.MainRect = mainRect; + + // Create gradient rectangles + RectangleF glassGradientRect = new RectangleF(cache.GlassRect.X - 1, cache.GlassRect.Y - 1, + cache.GlassRect.Width + 2, cache.GlassRect.Height + 2); + RectangleF mainGradientRect = new RectangleF(cache.MainRect.X - 1, cache.MainRect.Y - 1, + cache.MainRect.Width + 2, cache.MainRect.Height + 2); + + // Cannot draw a zero length rectangle + if (cache.GlassRect is { Width: > 0, Height: > 0 } && + cache.MainRect is { Width: > 0, Height: > 0 } && + glassGradientRect is { Width: > 0, Height: > 0 } && + mainGradientRect is { Width: > 0, Height: > 0 }) + { + cache.TopBrush = new LinearGradientBrush(glassGradientRect, glassColor1, glassColor2, AngleFromOrientation(orientation)); + cache.BottomBrush = new LinearGradientBrush(mainGradientRect, color1, color2, AngleFromOrientation(orientation)); + } } - } - // Draw entire area in a solid color - g.FillRectangle(cache.TotalBrush, drawRect); + // Draw entire area in a solid color + g.FillRectangle(cache.TotalBrush!, drawRect); - if (cache is { TopBrush: not null, BottomBrush: not null }) - { - g.FillRectangle(cache.TopBrush, cache.GlassRect); - g.FillRectangle(cache.BottomBrush, cache.MainRect); + if (cache is { TopBrush: not null, BottomBrush: not null }) + { + g.FillRectangle(cache.TopBrush, cache.GlassRect); + g.FillRectangle(cache.BottomBrush, cache.MainRect); + } } } @@ -1520,78 +1535,81 @@ private static RectangleF DrawBackGlassBasic(RectangleF drawRect, float glassPercent, ref IDisposable memento) { - // Cannot draw a zero length rectangle - if (drawRect is { Width: > 0, Height: > 0 }) + if (g is not null) { - var generate = true; - MementoBackGlassBasic cache; - - // Access a cache instance and decide if cache resources need generating - if (memento is MementoBackGlassBasic glassBasic) + // Cannot draw a zero length rectangle + if (drawRect is { Width: > 0, Height: > 0 }) { - cache = glassBasic; - generate = !cache.UseCachedValues(drawRect, color1, color2, - glassColor1, glassColor2, - factorX, factorY, - orientation, glassPercent); - } - else - { - memento?.Dispose(); + var generate = true; + MementoBackGlassBasic cache; - cache = new MementoBackGlassBasic(drawRect, color1, color2, - glassColor1, glassColor2, - factorX, factorY, - orientation, glassPercent); - memento = cache; - } - - // Do we need to generate the contents of the cache? - if (generate) - { - // Dispose of existing values - cache.Dispose(); - - // Draw entire area in a solid color - cache.TotalBrush = new SolidBrush(color1); - - int length; - - if (VerticalOrientation(orientation)) + // Access a cache instance and decide if cache resources need generating + if (memento is MementoBackGlassBasic glassBasic) { - length = (int)(drawRect.Height * glassPercent); + cache = glassBasic; + generate = !cache.UseCachedValues(drawRect, color1, color2, + glassColor1, glassColor2, + factorX, factorY, + orientation, glassPercent); } else { - length = (int)(drawRect.Width * glassPercent); + memento?.Dispose(); + + cache = new MementoBackGlassBasic(drawRect, color1, color2, + glassColor1, glassColor2, + factorX, factorY, + orientation, glassPercent); + memento = cache; } - var glassRect = orientation switch + // Do we need to generate the contents of the cache? + if (generate) { - VisualOrientation.Left => drawRect with { Width = length }, - VisualOrientation.Right => drawRect with { X = drawRect.Right - length, Width = length }, - VisualOrientation.Bottom => drawRect with { Y = drawRect.Bottom - length, Height = length }, - _ => drawRect with { Height = length } - }; + // Dispose of existing values + cache.Dispose(); - // Gradient rectangle is always a little bigger to prevent tiling at edges - RectangleF glassGradientRect = new RectangleF(glassRect.X - 1, glassRect.Y - 1, glassRect.Width + 2, - glassRect.Height + 2); + // Draw entire area in a solid color + cache.TotalBrush = new SolidBrush(color1); - // Cannot draw a zero length rectangle - if (glassGradientRect is { Width: > 0, Height: > 0 }) - { - cache.GlassBrush = new LinearGradientBrush(glassGradientRect, glassColor1, glassColor2, AngleFromOrientation(orientation)); - cache.GlassRect = glassRect; + int length; + + if (VerticalOrientation(orientation)) + { + length = (int)(drawRect.Height * glassPercent); + } + else + { + length = (int)(drawRect.Width * glassPercent); + } + + var glassRect = orientation switch + { + VisualOrientation.Left => drawRect with { Width = length }, + VisualOrientation.Right => drawRect with { X = drawRect.Right - length, Width = length }, + VisualOrientation.Bottom => drawRect with { Y = drawRect.Bottom - length, Height = length }, + _ => drawRect with { Height = length } + }; + + // Gradient rectangle is always a little bigger to prevent tiling at edges + RectangleF glassGradientRect = new RectangleF(glassRect.X - 1, glassRect.Y - 1, glassRect.Width + 2, + glassRect.Height + 2); + + // Cannot draw a zero length rectangle + if (glassGradientRect is { Width: > 0, Height: > 0 }) + { + cache.GlassBrush = new LinearGradientBrush(glassGradientRect, glassColor1, glassColor2, AngleFromOrientation(orientation)); + cache.GlassRect = glassRect; + } } - } - g.FillRectangle(cache.TotalBrush, drawRect); + g.FillRectangle(cache.TotalBrush!, drawRect); - if (cache.GlassBrush != null) - { - g.FillRectangle(cache.GlassBrush, cache.GlassRect); - return cache.GlassRect; + if (cache.GlassBrush != null) + { + g.FillRectangle(cache.GlassBrush, cache.GlassRect); + return cache.GlassRect; + } } } @@ -1606,52 +1624,55 @@ private static IDisposable DrawBackLinear(RectangleF drawRect, Graphics? g, IDisposable memento) { - // Cannot draw a zero length rectangle - if (drawRect is { Width: > 0, Height: > 0 }) + if (g is not null) { - var generate = true; - MementoBackLinear cache; - - // Access a cache instance and decide if cache resources need generating - if (memento is MementoBackLinear backLinear) + // Cannot draw a zero length rectangle + if (drawRect is { Width: > 0, Height: > 0 }) { - cache = backLinear; - generate = !cache.UseCachedValues(drawRect, sigma, color1, color2, orientation); - } - else - { - memento?.Dispose(); - - cache = new MementoBackLinear(drawRect, sigma, color1, color2, orientation); - memento = cache; - } + var generate = true; + MementoBackLinear cache; - // Do we need to generate the contents of the cache? - if (generate) - { - // Dispose of existing values - cache.Dispose(); + // Access a cache instance and decide if cache resources need generating + if (memento is MementoBackLinear backLinear) + { + cache = backLinear; + generate = !cache.UseCachedValues(drawRect, sigma, color1, color2, orientation); + } + else + { + memento?.Dispose(); - // Create rectangle that covers the enter area - RectangleF gradientRect = new RectangleF(drawRect.X - 1, drawRect.Y - 1, drawRect.Width + 2, - drawRect.Height + 2); + cache = new MementoBackLinear(drawRect, sigma, color1, color2, orientation); + memento = cache; + } - // Cannot draw a zero length rectangle - if (gradientRect is { Width: > 0, Height: > 0 }) + // Do we need to generate the contents of the cache? + if (generate) { - // Draw entire area in a gradient color effect - cache.EntireBrush = new LinearGradientBrush(gradientRect, color1, color2, AngleFromOrientation(orientation)); + // Dispose of existing values + cache.Dispose(); - if (sigma) + // Create rectangle that covers the enter area + RectangleF gradientRect = new RectangleF(drawRect.X - 1, drawRect.Y - 1, drawRect.Width + 2, + drawRect.Height + 2); + + // Cannot draw a zero length rectangle + if (gradientRect is { Width: > 0, Height: > 0 }) { - cache.EntireBrush.SetSigmaBellShape(0.5f); + // Draw entire area in a gradient color effect + cache.EntireBrush = new LinearGradientBrush(gradientRect, color1, color2, AngleFromOrientation(orientation)); + + if (sigma) + { + cache.EntireBrush.SetSigmaBellShape(0.5f); + } } } - } - if (cache.EntireBrush != null) - { - g.FillRectangle(cache.EntireBrush, drawRect); + if (cache.EntireBrush != null) + { + g.FillRectangle(cache.EntireBrush, drawRect); + } } } @@ -1665,89 +1686,92 @@ private static IDisposable DrawBackDarkEdge(RectangleF drawRect, Graphics? g, IDisposable memento) { - // Cannot draw a zero length rectangle - if (drawRect is { Width: > 0, Height: > 0 }) + if (g is not null) { - var generate = true; - MementoBackDarkEdge cache; - - // Access a cache instance and decide if cache resources need generating - if (memento is MementoBackDarkEdge darkEdge) - { - cache = darkEdge; - generate = !cache.UseCachedValues(drawRect, color1, thickness, orientation); - } - else - { - memento?.Dispose(); - - cache = new MementoBackDarkEdge(drawRect, color1, thickness, orientation); - memento = cache; - } - - // Do we need to generate the contents of the cache? - if (generate) + // Cannot draw a zero length rectangle + if (drawRect is { Width: > 0, Height: > 0 }) { - // Dispose of existing values - cache.Dispose(); + var generate = true; + MementoBackDarkEdge cache; - // If we need to scale down the dark thickness - if (VerticalOrientation(orientation)) + // Access a cache instance and decide if cache resources need generating + if (memento is MementoBackDarkEdge darkEdge) { - if (drawRect.Height < 30) - { - thickness = (int)drawRect.Height / 10; - } + cache = darkEdge; + generate = !cache.UseCachedValues(drawRect, color1, thickness, orientation); } else { - if (drawRect.Width < 30) - { - thickness = (int)drawRect.Width / 10; - } + memento?.Dispose(); + + cache = new MementoBackDarkEdge(drawRect, color1, thickness, orientation); + memento = cache; } - // If there is something to draw - if (thickness >= 0) + // Do we need to generate the contents of the cache? + if (generate) { - // Alter rectangle to the drawing edge only - switch (orientation) - { - case VisualOrientation.Top: - drawRect.Height = thickness; - break; - case VisualOrientation.Left: - drawRect.Width = thickness; - break; - case VisualOrientation.Bottom: - drawRect.Y = drawRect.Bottom - thickness - 1; - drawRect.Height = thickness + 1; - break; - case VisualOrientation.Right: - drawRect.X = drawRect.Right - thickness - 1; - drawRect.Width = thickness + 1; - break; + // Dispose of existing values + cache.Dispose(); + // If we need to scale down the dark thickness + if (VerticalOrientation(orientation)) + { + if (drawRect.Height < 30) + { + thickness = (int)drawRect.Height / 10; + } + } + else + { + if (drawRect.Width < 30) + { + thickness = (int)drawRect.Width / 10; + } } - // Create rectangle that covers the enter area - RectangleF gradientRect = new RectangleF(drawRect.X - 0.5f, drawRect.Y - 0.5f, - drawRect.Width + 1, drawRect.Height + 1); - - // Cannot draw a zero length rectangle - if (gradientRect is { Width: > 0, Height: > 0 }) + // If there is something to draw + if (thickness >= 0) { - // Draw entire area in a gradient color effect - cache.EntireBrush = new LinearGradientBrush(gradientRect, Color.FromArgb(64, color1), Color.Transparent, AngleFromOrientation(orientation)); - cache.EntireBrush.SetSigmaBellShape(1.0f); - cache.EntireRect = drawRect; + // Alter rectangle to the drawing edge only + switch (orientation) + { + case VisualOrientation.Top: + drawRect.Height = thickness; + break; + case VisualOrientation.Left: + drawRect.Width = thickness; + break; + case VisualOrientation.Bottom: + drawRect.Y = drawRect.Bottom - thickness - 1; + drawRect.Height = thickness + 1; + break; + case VisualOrientation.Right: + drawRect.X = drawRect.Right - thickness - 1; + drawRect.Width = thickness + 1; + break; + + } + + // Create rectangle that covers the enter area + RectangleF gradientRect = new RectangleF(drawRect.X - 0.5f, drawRect.Y - 0.5f, + drawRect.Width + 1, drawRect.Height + 1); + + // Cannot draw a zero length rectangle + if (gradientRect is { Width: > 0, Height: > 0 }) + { + // Draw entire area in a gradient color effect + cache.EntireBrush = new LinearGradientBrush(gradientRect, Color.FromArgb(64, color1), Color.Transparent, AngleFromOrientation(orientation)); + cache.EntireBrush.SetSigmaBellShape(1.0f); + cache.EntireRect = drawRect; + } } } - } - if (cache.EntireBrush != null) - { - g.FillRectangle(cache.EntireBrush, cache.EntireRect); + if (cache.EntireBrush != null) + { + g.FillRectangle(cache.EntireBrush, cache.EntireRect); + } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMementos.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMementos.cs index da4547377..5978476a7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMementos.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMementos.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -462,7 +462,7 @@ public void GeneratePaths(Rectangle rect, PaletteState state) HighlightBrush = new PathGradientBrush(HighlightPath) { CenterPoint = new PointF(HighlightRect.Left + (HighlightRect.Width / 2), HighlightRect.Top + (HighlightRect.Height / 2)), - SurroundColors = new[] { Color.Transparent } + SurroundColors = [Color.Transparent] }; // Reduce rectangle to the inside fill area diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMicrosoft365.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMicrosoft365.cs index 6487909f1..0c14fd779 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMicrosoft365.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderMicrosoft365.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -19,15 +17,14 @@ namespace Krypton.Toolkit public class RenderMicrosoft365 : RenderOffice2010 { #region Static Variables - private static readonly float BORDER_PERCENT = 0.6f; - - private static readonly float WHITE_PERCENT = 0.4f; + private const float BORDER_PERCENT = 0.6f; + private const float WHITE_PERCENT = 0.4f; #endregion #region Constructor static RenderMicrosoft365() { - + // ?? } #endregion @@ -50,11 +47,11 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, Debug.Assert(paletteBack != null); // Get the first border color, and then lighten it by merging with white - Color borderColour = paletteBack.GetBackColor1(state), lightColour = CommonHelper.MergeColors(borderColour, BORDER_PERCENT, Color.White, WHITE_PERCENT); + Color borderColour = paletteBack!.GetBackColor1(state), lightColour = CommonHelper.MergeColors(borderColour, BORDER_PERCENT, Color.White, WHITE_PERCENT); // Draw inside of the border edge in a lighter version of the border using var drawBrush = new SolidBrush(lightColour); - context.Graphics.FillRectangle(drawBrush, displayRect); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -88,7 +85,7 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, IDisposable memento) + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -127,16 +124,16 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, Recta } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; @@ -149,13 +146,15 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, Recta /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, Color baseColor1, Color baseColor2, IDisposable memento) + public override IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, + PaletteState state, IPaletteRibbonFileAppTab palette, IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { + Color topColor = palette.GetRibbonFileAppTabTopColor(state); + Color bottomColor = palette.GetRibbonFileAppTabBottomColor(state); var generate = true; MementoRibbonAppTab2013 cache; @@ -163,13 +162,13 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R if (memento is MementoRibbonAppTab2013 tab2013) { cache = tab2013; - generate = !cache.UseCachedValues(rect, baseColor1); + generate = !cache.UseCachedValues(rect, topColor); } else { memento?.Dispose(); - cache = new MementoRibbonAppTab2013(rect, baseColor1); + cache = new MementoRibbonAppTab2013(rect, topColor); memento = cache; } @@ -181,18 +180,15 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R // Create common paths to all the app tab states cache.GeneratePaths(rect, state); - //cache.borderPen = new Pen(baseColor1); // Create state specific colors/brushes/pens cache.InsideFillBrush = state switch { - PaletteState.Normal => - //cache.borderBrush = new SolidBrush(baseColor1); - new SolidBrush(baseColor1), - PaletteState.Tracking => new SolidBrush(baseColor2), - PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush( - ControlPaint.LightLight(baseColor2)), - PaletteState.Pressed => new SolidBrush(baseColor2), + PaletteState.Normal => new SolidBrush(topColor), + PaletteState.Disabled => new SolidBrush(ControlPaint.DarkDark(topColor)), + PaletteState.Tracking => new SolidBrush(bottomColor), + PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush(ControlPaint.LightLight(bottomColor)), + PaletteState.Pressed => new SolidBrush(bottomColor), _ => cache.InsideFillBrush }; } @@ -206,7 +202,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R // Fill inside area //context.Graphics.FillPath(cache.insideFillBrush, cache.insideFillPath); - context.Graphics.FillRectangle(cache.InsideFillBrush, cache.Rect); + context.Graphics.FillRectangle(cache.InsideFillBrush!, cache.Rect); // Draw highlight over bottom half //using (Clipping clip = new Clipping(context.Graphics, cache.insideFillPath)) @@ -219,7 +215,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable memento, bool standard) + protected override IDisposable? DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) { @@ -253,7 +249,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.Dispose(); // If we have a context color to use then modify the drawing colors - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -283,15 +279,15 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.CenterPen = new Pen(c4); } - context.Graphics.FillRectangle(cache.CenterBrush, cache.Rect); + context.Graphics.FillRectangle(cache.CenterBrush!, cache.Rect); //context.Graphics.FillPath(cache.centerBrush, cache.outsidePath); - //if (c5 != Color.Empty) + //if (c5 != GlobalStaticValues.EMPTY_COLOR) // context.Graphics.FillPath(cache.insideBrush, cache.insidePath); //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.outsidePath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); //switch (orientation) //{ @@ -316,7 +312,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable memento, bool standard) + protected override IDisposable? DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) { @@ -350,7 +346,7 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap cache.Dispose(); // If c5 has a colour then use that to highlight the tab - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -384,12 +380,12 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap // Fill the full background //context.Graphics.FillPath(cache.outsideBrush, cache.outsidePath); - context.Graphics.FillRectangle(cache.OutsideBrush, cache.Rect); + context.Graphics.FillRectangle(cache.OutsideBrush!, cache.Rect); // Draw the border //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.borderPath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); // Fill the inside area //context.Graphics.FillPath(cache.insideBrush, cache.insidePath); diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2007.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2007.cs index bf984d038..9cd1b066b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2007.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2007.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,20 +31,20 @@ static RenderOffice2007() { _ribbonGroup5Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.5f, 1.0f] }; _ribbonGroup6Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.75f, 1.0f }, - Positions = new[] { 0.0f, 0.1f, 0.45f, 1.0f } + Factors = [0.0f, 0.0f, 0.75f, 1.0f], + Positions = [0.0f, 0.1f, 0.45f, 1.0f] }; _ribbonGroup7Blend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.15f, 0.85f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f, 0.0f], + Positions = [0.0f, 0.15f, 0.85f, 1.0f] }; } #endregion @@ -64,8 +64,13 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, [DisallowNull] IPaletteBack paletteBack, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteBack != null); + Debug.Assert(context is not null); + Debug.Assert(paletteBack is not null); + + if (paletteBack is null) + { + throw new ArgumentNullException(nameof(paletteBack)); + } // Get the first border color Color borderColor = paletteBack.GetBackColor1(state); @@ -76,7 +81,7 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, // Draw inside of the border edge in a lighter version of the border using var drawBrush = new SolidBrush(lightColor); - context.Graphics.FillRectangle(drawBrush, displayRect); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -113,11 +118,11 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -170,14 +175,14 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right border lines - context.Graphics.DrawLine(cache.BorderPen, rect.X, rect.Y, rect.X, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderPen!, rect.X, rect.Y, rect.X, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); // Fill the inner area with a gradient context specific color - context.Graphics.FillRectangle(cache.FillBrush, cache.FillRect); + context.Graphics.FillRectangle(cache.FillBrush!, cache.FillRect); // Overdraw the brighter line at bottom - context.Graphics.DrawLine(cache.UnderlinePen, rect.X + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); + context.Graphics.DrawLine(cache.UnderlinePen!, rect.X + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); } return memento; diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2010.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2010.cs index 9bc520efd..a215cc16b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2010.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2010.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -31,20 +31,20 @@ static RenderOffice2010() { _ribbonGroup5Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.5f, 1.0f] }; _ribbonGroup6Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.75f, 1.0f }, - Positions = new[] { 0.0f, 0.1f, 0.45f, 1.0f } + Factors = [0.0f, 0.0f, 0.75f, 1.0f], + Positions = [0.0f, 0.1f, 0.45f, 1.0f] }; _ribbonGroup7Blend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.15f, 0.85f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f, 0.0f], + Positions = [0.0f, 0.15f, 0.85f, 1.0f] }; } #endregion @@ -67,6 +67,11 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, Debug.Assert(context != null); Debug.Assert(paletteBack != null); + if (paletteBack is null) + { + throw new ArgumentNullException(nameof(paletteBack)); + } + // Get the first border color Color borderColor = paletteBack.GetBackColor1(state); @@ -76,7 +81,7 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, // Draw inside of the border edge in a lighter version of the border using var drawBrush = new SolidBrush(lightColor); - context.Graphics.FillRectangle(drawBrush, displayRect); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -115,11 +120,11 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -158,16 +163,16 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2013.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2013.cs index 2fd4a4573..f69b52544 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2013.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderOffice2013.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -18,8 +16,8 @@ namespace Krypton.Toolkit public class RenderOffice2013 : RenderOffice2010 { #region Static Fields - private static readonly float BORDER_PERCENT = 0.6f; - private static readonly float WHITE_PERCENT = 0.4f; + private const float BORDER_PERCENT = 0.6f; + private const float WHITE_PERCENT = 0.4f; //private static readonly Blend _ribbonGroup5Blend; //private static readonly Blend _ribbonGroup6Blend; //private static readonly Blend _ribbonGroup7Blend; @@ -61,7 +59,7 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, Debug.Assert(paletteBack != null); // Get the first border color - Color borderColor = paletteBack.GetBackColor1(state); + Color borderColor = paletteBack!.GetBackColor1(state); // We want to lighten it by merging with white Color lightColor = CommonHelper.MergeColors(borderColor, BORDER_PERCENT, @@ -69,7 +67,7 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, // Draw inside of the border edge in a lighter version of the border using var drawBrush = new SolidBrush(lightColor); - context.Graphics.FillRectangle(drawBrush, displayRect); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -94,7 +92,6 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col // Use the professional renderer but pull colors from the palette var renderer = new KryptonOffice2013Renderer(colorPalette.ColorTable) { - // Setup the need to use rounded corners RoundedEdges = colorPalette.ColorTable.UseRoundedEdges != InheritBool.False }; @@ -108,11 +105,11 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -151,20 +148,21 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; } + /// /// Draw the application tab. /// @@ -172,19 +170,19 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, + public override IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, - Color baseColor1, - Color baseColor2, - IDisposable memento) + IPaletteRibbonFileAppTab palette, + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { + Color topColor = palette.GetRibbonFileAppTabTopColor(state); + Color bottomColor = palette.GetRibbonFileAppTabBottomColor(state); var generate = true; MementoRibbonAppTab2013 cache; @@ -192,13 +190,13 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, if (memento is MementoRibbonAppTab2013 tab2013) { cache = tab2013; - generate = !cache.UseCachedValues(rect, baseColor1); + generate = !cache.UseCachedValues(rect, topColor); } else { memento?.Dispose(); - cache = new MementoRibbonAppTab2013(rect, baseColor1); + cache = new MementoRibbonAppTab2013(rect, topColor); memento = cache; } @@ -210,18 +208,15 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, // Create common paths to all the app tab states cache.GeneratePaths(rect, state); - //cache.borderPen = new Pen(baseColor1); // Create state specific colors/brushes/pens cache.InsideFillBrush = state switch { - PaletteState.Normal => - //cache.borderBrush = new SolidBrush(baseColor1); - new SolidBrush(baseColor1), - PaletteState.Tracking => new SolidBrush(baseColor2), - PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush( - ControlPaint.LightLight(baseColor2)), - PaletteState.Pressed => new SolidBrush(baseColor2), + PaletteState.Normal => new SolidBrush(topColor), + PaletteState.Disabled => new SolidBrush(ControlPaint.DarkDark(topColor)), + PaletteState.Tracking => new SolidBrush(bottomColor), + PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush(ControlPaint.LightLight(bottomColor)), + PaletteState.Pressed => new SolidBrush(bottomColor), _ => cache.InsideFillBrush }; } @@ -235,7 +230,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, // Fill inside area //context.Graphics.FillPath(cache.insideFillBrush, cache.insideFillPath); - context.Graphics.FillRectangle(cache.InsideFillBrush, cache.Rect); + context.Graphics.FillRectangle(cache.InsideFillBrush!, cache.Rect); // Draw highlight over bottom half //using (Clipping clip = new Clipping(context.Graphics, cache.insideFillPath)) @@ -248,12 +243,12 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, + protected override IDisposable? DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento, + IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) @@ -288,7 +283,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.Dispose(); // If we have a context color to use then modify the drawing colors - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -318,15 +313,15 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.CenterPen = new Pen(c4); } - context.Graphics.FillRectangle(cache.CenterBrush, cache.Rect); + context.Graphics.FillRectangle(cache.CenterBrush!, cache.Rect); //context.Graphics.FillPath(cache.centerBrush, cache.outsidePath); - //if (c5 != Color.Empty) + //if (c5 != GlobalStaticValues.EMPTY_COLOR) // context.Graphics.FillPath(cache.insideBrush, cache.insidePath); //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.outsidePath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); //switch (orientation) //{ @@ -351,13 +346,13 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape, + protected override IDisposable? DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento, + IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) @@ -392,7 +387,7 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap cache.Dispose(); // If c5 has a colour then use that to highlight the tab - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -426,12 +421,12 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap // Fill the full background //context.Graphics.FillPath(cache.outsideBrush, cache.outsidePath); - context.Graphics.FillRectangle(cache.OutsideBrush, cache.Rect); + context.Graphics.FillRectangle(cache.OutsideBrush!, cache.Rect); // Draw the border //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.borderPath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); // Fill the inside area //context.Graphics.FillPath(cache.insideBrush, cache.insidePath); diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderProfessional.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderProfessional.cs index 15c9a569d..789584731 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderProfessional.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderProfessional.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -146,11 +146,11 @@ protected virtual void DrawGrabHandleGlyph(RenderContext context, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -189,16 +189,16 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderSparkle.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderSparkle.cs index aef7edc6a..a192208f6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderSparkle.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderSparkle.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,25 +28,26 @@ static RenderSparkle() { _ribbonGroup5Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.5f, 1.0f] }; _ribbonGroup6Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.75f, 1.0f }, - Positions = new[] { 0.0f, 0.1f, 0.45f, 1.0f } + Factors = [0.0f, 0.0f, 0.75f, 1.0f], + Positions = [0.0f, 0.1f, 0.45f, 1.0f] }; _ribbonGroup7Blend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.15f, 0.85f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f, 0.0f], + Positions = [0.0f, 0.15f, 0.85f, 1.0f] }; } #endregion #region RenderRibbon Overrides + /// /// Draw the background of a ribbon element. /// @@ -56,16 +57,14 @@ static RenderSparkle() /// State associated with rendering. /// Palette used for sourcing settings. /// Orientation for drawing. - /// Drawing onto a composition element. /// Cached values to use when drawing. public override IDisposable? DrawRibbonBack(PaletteRibbonShape shape, - RenderContext context, - Rectangle rect, - PaletteState state, - IPaletteRibbonBack palette, - VisualOrientation orientation, - bool composition, - IDisposable? memento) + RenderContext context, + Rectangle rect, + PaletteState state, + IPaletteRibbonBack palette, + VisualOrientation orientation, + IDisposable? memento) { // Note is the incoming state is detailed we are drawing inside a popup var showingInPopup = (state & PaletteState.FocusOverride) == PaletteState.FocusOverride; @@ -79,7 +78,7 @@ static RenderSparkle() PaletteRibbonColorStyle.RibbonGroupNormalBorderTracking => DrawRibbonGroupNormalBorder(context, rect, state, palette, true, false, memento), PaletteRibbonColorStyle.RibbonGroupAreaBorder => DrawRibbonGroupAreaBorder1And2(context, rect, state, palette, false, true, memento), PaletteRibbonColorStyle.RibbonGroupAreaBorder2 => DrawRibbonGroupAreaBorder1And2(context, rect, state, palette, true, true, memento), - _ => base.DrawRibbonBack(shape, context, rect, state, palette, orientation, composition, memento) + _ => base.DrawRibbonBack(shape, context, rect, state, palette, orientation, memento) }; } @@ -92,12 +91,12 @@ static RenderSparkle() /// Palette used for general ribbon settings. /// Palette used for background ribbon settings. /// Cached storage for drawing objects. - public override IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, + public override IDisposable? DrawRibbonTabContextTitle(PaletteRibbonShape shape, RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) => + IDisposable? memento) => DrawRibbonTabContext(context, rect, paletteGeneral, paletteBack, memento); /// @@ -109,12 +108,12 @@ public override IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, /// State associated with rendering. /// Palette used for sourcing settings. /// Cached storage for drawing objects. - public override IDisposable DrawRibbonApplicationButton(PaletteRibbonShape shape, + public override IDisposable? DrawRibbonApplicationButton(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) => + IDisposable? memento) => DrawRibbonAppButton(shape, context, rect, state, palette, true, memento); /// @@ -175,19 +174,19 @@ public override void DrawRibbonDropArrow(PaletteRibbonShape shape, /// public override void DrawInputControlDropDownGlyph([DisallowNull] RenderContext context, Rectangle cellRect, - [DisallowNull] IPaletteContent paletteContent, + IPaletteContent? paletteContent, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteContent != null); + Debug.Assert(context is not null); + Debug.Assert(paletteContent is not null); // Validate parameter references - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } - if (paletteContent == null) + if (paletteContent is null) { throw new ArgumentNullException(nameof(paletteContent)); } @@ -214,11 +213,11 @@ public override void DrawInputControlDropDownGlyph([DisallowNull] RenderContext /// public override void DrawInputControlNumericUpGlyph([DisallowNull] RenderContext context, Rectangle cellRect, - [DisallowNull] IPaletteContent paletteContent, + IPaletteContent? paletteContent, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteContent != null); + Debug.Assert(context is not null); + Debug.Assert(paletteContent is not null); // Validate parameter references if (context == null) @@ -253,19 +252,19 @@ public override void DrawInputControlNumericUpGlyph([DisallowNull] RenderContext /// public override void DrawInputControlNumericDownGlyph([DisallowNull] RenderContext context, Rectangle cellRect, - [DisallowNull] IPaletteContent paletteContent, + IPaletteContent? paletteContent, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteContent != null); + Debug.Assert(context is not null); + Debug.Assert(paletteContent is not null); // Validate parameter references - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } - if (paletteContent == null) + if (paletteContent is null) { throw new ArgumentNullException(nameof(paletteContent)); } @@ -316,11 +315,11 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -373,14 +372,14 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right border lines - context.Graphics.DrawLine(cache.BorderPen, rect.X, rect.Y, rect.X, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderPen!, rect.X, rect.Y, rect.X, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); // Fill the inner area with a gradient context specific color - context.Graphics.FillRectangle(cache.FillBrush, cache.FillRect); + context.Graphics.FillRectangle(cache.FillBrush!, cache.FillRect); // Overdraw the brighter line at bottom - context.Graphics.DrawLine(cache.UnderlinePen, rect.X + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); + context.Graphics.DrawLine(cache.UnderlinePen!, rect.X + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); } return memento; diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderStandard.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderStandard.cs index 5d69d4a67..bf083d838 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderStandard.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderStandard.cs @@ -1,12 +1,10 @@ #region BSD License /* - * * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. */ #endregion @@ -94,7 +92,7 @@ public class RenderStandard : RenderBase private static readonly Blend _ribbonGroup1Blend, _ribbonGroup2Blend, _ribbonGroup3Blend; private static readonly Blend _ribbonGroup4Blend, _ribbonGroup5Blend, _ribbonGroup6Blend; private static readonly Blend _ribbonGroup7Blend, _ribbonGroup8Blend, _ribbonGroup9Blend; - private static readonly Blend _ribbonTabTopBlend, _ribbonAppButtonBlend; + private static readonly Blend _ribbonTabTopBlend;//, _ribbonAppButtonBlend; private static readonly Blend _dragRoundedInsideBlend; // Pens @@ -107,12 +105,12 @@ public class RenderStandard : RenderBase private static readonly Pen _light2Pen; private static readonly Pen _whitenMediumPen; //private static readonly Pen _buttonShadowPen; - private static readonly Pen _compositionPen; + //private static readonly Pen _compositionPen; // Brushes private static readonly SolidBrush _whitenLightBrush; private static readonly SolidBrush _whitenLightLBrush; - private static readonly SolidBrush _compositionBrush; + //private static readonly SolidBrush _compositionBrush; private static readonly SolidBrush _buttonBorder1Brush; private static readonly SolidBrush _buttonBorder2Brush; @@ -127,206 +125,206 @@ static RenderStandard() { _linear25Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.25f, 0.25f, 1.0f } + Factors = [0.0f, 0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.25f, 0.25f, 1.0f] }; _linear33Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.33f, 0.33f, 1.0f } + Factors = [0.0f, 0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.33f, 0.33f, 1.0f] }; _linear40Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.40f, 0.40f, 1.0f } + Factors = [0.0f, 0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.40f, 0.40f, 1.0f] }; _linear50Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.50f, 0.50f, 1.0f } + Factors = [0.0f, 0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.50f, 0.50f, 1.0f] }; _linearShadowBlend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.30f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.30f, 1.0f] }; _switch25Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.25f, 0.25f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.25f, 0.25f, 1.0f] }; _switch33Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.33f, 0.33f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.33f, 0.33f, 1.0f] }; _switch50Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.5f, 0.5f, 1.0f] }; _switch90Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.90f, 0.90f, 1.0f } + Factors = [0.0f, 0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.90f, 0.90f, 1.0f] }; _halfCutBlend = new Blend { - Factors = new[] { 0.0f, 0.50f, 1.0f, 0.05f }, - Positions = new[] { 0.0f, 0.45f, 0.45f, 1.0f } + Factors = [0.0f, 0.50f, 1.0f, 0.05f], + Positions = [0.0f, 0.45f, 0.45f, 1.0f] }; _quarterPhaseBlend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.25f, 0.70f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.10f, 0.20f, 0.30f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 0.25f, 0.70f, 1.0f, 1.0f], + Positions = [0.0f, 0.10f, 0.20f, 0.30f, 0.5f, 1.0f] }; _oneNoteBlend = new Blend { - Factors = new[] { 0.15f, 0.75f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.45f, 0.45f, 1.0f } + Factors = [0.15f, 0.75f, 1.0f, 1.0f], + Positions = [0.0f, 0.45f, 0.45f, 1.0f] }; _rounding2Blend = new Blend { - Factors = new[] { 0.8f, 0.2f, 0f, 0.07f, 1.0f }, - Positions = new[] { 0.0f, 0.33f, 0.33f, 0.43f, 1.0f } + Factors = [0.8f, 0.2f, 0f, 0.07f, 1.0f], + Positions = [0.0f, 0.33f, 0.33f, 0.43f, 1.0f] }; _rounding3Blend = new Blend { - Factors = new[] { 1.0f, 0.7f, 0.7f, 0f, 0.1f, 0.55f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.16f, 0.33f, 0.35f, 0.51f, 0.85f, 0.85f, 1.0f } + Factors = [1.0f, 0.7f, 0.7f, 0f, 0.1f, 0.55f, 1.0f, 1.0f], + Positions = [0.0f, 0.16f, 0.33f, 0.35f, 0.51f, 0.85f, 0.85f, 1.0f] }; _rounding4Blend = new Blend { - Factors = new[] { 1.0f, 0.78f, 0.48f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.33f, 0.33f, 0.90f, 1.0f } + Factors = [1.0f, 0.78f, 0.48f, 1.0f, 1.0f], + Positions = [0.0f, 0.33f, 0.33f, 0.90f, 1.0f] }; _rounding5Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.20f, 0.84f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.20f, 0.84f, 1.0f] }; _ribbonInBlend = new Blend { - Factors = new[] { 0.66f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.50f, 1.0f } + Factors = [0.66f, 1.0f, 0.0f], + Positions = [0.0f, 0.50f, 1.0f] }; _ribbonOutBlend = new Blend { - Factors = new[] { 0.2f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.50f, 1.0f } + Factors = [0.2f, 1.0f, 0.0f], + Positions = [0.0f, 0.50f, 1.0f] }; _ribbonTopBlend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.2f, 0.8f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f, 0.0f], + Positions = [0.0f, 0.2f, 0.8f, 1.0f] }; _ribbonGroup1Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.6f, 1.0f }, - Positions = new[] { 0.0f, 0.18f, 0.75f, 1.0f } + Factors = [0.0f, 0.0f, 0.6f, 1.0f], + Positions = [0.0f, 0.18f, 0.75f, 1.0f] }; _ribbonGroup2Blend = new Blend { - Factors = new[] { 0.0f, 0.5f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.18f, 0.2f, 1.0f } + Factors = [0.0f, 0.5f, 1.0f, 1.0f], + Positions = [0.0f, 0.18f, 0.2f, 1.0f] }; _ribbonGroup3Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f }, - Positions = new[] { 0.0f, 0.90f, 0.97f, 0.97f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f, 0.0f, 0.0f], + Positions = [0.0f, 0.90f, 0.97f, 0.97f, 1.0f] }; _ribbonGroup4Blend = new Blend { - Factors = new[] { 0.0f, 0.4f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.045f, 0.33f, 1.0f } + Factors = [0.0f, 0.4f, 1.0f, 1.0f], + Positions = [0.0f, 0.045f, 0.33f, 1.0f] }; _ribbonGroup5Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.5f, 1.0f] }; _ribbonGroup6Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.4f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.4f, 1.0f] }; _ribbonGroup7Blend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.15f, 0.85f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f, 0.0f], + Positions = [0.0f, 0.15f, 0.85f, 1.0f] }; _ribbonGroup8Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.85f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.85f, 1.0f] }; _ribbonGroup9Blend = new Blend { - Factors = new[] { 0.0f, 0.5f, 0.75f, 0.9f, 1.0f }, - Positions = new[] { 0.0f, 0.25f, 0.50f, 0.75f, 1.0f } + Factors = [0.0f, 0.5f, 0.75f, 0.9f, 1.0f], + Positions = [0.0f, 0.25f, 0.50f, 0.75f, 1.0f] }; _ribbonGroupArea3 = new Blend { - Factors = new[] { 1.0f, 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.1f, 0.85f, 1.0f } + Factors = [1.0f, 0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.1f, 0.85f, 1.0f] }; _ribbonTabSelected1Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.50f, 0.50f, 0.9f, 1.0f } + Factors = [0.0f, 0.0f, 0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.50f, 0.50f, 0.9f, 1.0f] }; _ribbonTabSelected2Blend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.75f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.75f, 1.0f] }; _ribbonTabTopBlend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.2f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f], + Positions = [0.0f, 0.2f, 1.0f] }; - _ribbonAppButtonBlend = new Blend - { - Factors = new[] { 0.0f, 0.0f, 0.5f, 1.0f, 1.0f }, - Positions = new[] { 0.0f, 0.1f, 0.5f, 0.5f, 1.0f } - }; + //_ribbonAppButtonBlend = new Blend + //{ + // Factors = [0.0f, 0.0f, 0.5f, 1.0f, 1.0f], + // Positions = [0.0f, 0.1f, 0.5f, 0.5f, 1.0f] + //}; _dragRoundedInsideBlend = new Blend { - Factors = new[] { 0.05f, 0.2f, 0.5f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 0.5f, 1.0f } + Factors = [0.05f, 0.2f, 0.5f, 1.0f], + Positions = [0.0f, 0.5f, 0.5f, 1.0f] }; _paleShadowPen = new Pen(Color.FromArgb(6, Color.Black)); @@ -338,11 +336,11 @@ static RenderStandard() _light2Pen = new Pen(Color.FromArgb(100, Color.White)); _whitenMediumPen = new Pen(_whiten128); //_buttonShadowPen = new Pen(Color.FromArgb(48, Color.Black)); - _compositionPen = new Pen(Color.FromArgb(96, Color.Black)); + //_compositionPen = new Pen(Color.FromArgb(96, Color.Black)); _whitenLightBrush = new SolidBrush(_whiten30); _whitenLightLBrush = new SolidBrush(_whiten64); - _compositionBrush = new SolidBrush(Color.FromArgb(32, Color.White)); + //_compositionBrush = new SolidBrush(Color.FromArgb(32, Color.White)); _buttonBorder1Brush = new SolidBrush(Color.FromArgb(20, 52, 59, 64)); _buttonBorder2Brush = new SolidBrush(Color.FromArgb(70, 52, 59, 64)); @@ -375,7 +373,7 @@ static RenderStandard() /// Gets a renderer for drawing the toolstrips. /// /// Color palette to use when rendering toolstrip. - public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase? colorPalette) + public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase colorPalette) { Debug.Assert(colorPalette != null); @@ -386,9 +384,8 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase? co } // Use the professional renderer but pull colors from the palette - KryptonStandardRenderer renderer = new KryptonStandardRenderer(colorPalette.ColorTable) + var renderer = new KryptonStandardRenderer(colorPalette.ColorTable) { - // Setup the need to use rounded corners RoundedEdges = colorPalette.ColorTable.UseRoundedEdges != InheritBool.False }; @@ -478,7 +475,7 @@ public override Padding GetBorderRawPadding([DisallowNull] IPaletteBorder palett /// Visual orientation of the border. /// /// Padding structure detailing all four edges. - public override Padding GetBorderDisplayPadding([DisallowNull] IPaletteBorder palette, + public override Padding GetBorderDisplayPadding(IPaletteBorder? palette, PaletteState state, VisualOrientation orientation) { @@ -498,7 +495,7 @@ public override Padding GetBorderDisplayPadding([DisallowNull] IPaletteBorder pa var borderWidth = palette.GetBorderWidth(state); // Divide the rounding effect by PI to get the actual pixel distance needed - // for offsetting. But add 2 so it starts indenting on a rounding of just 1. + // for offsetting. But add 2, so it starts indenting on a rounding of just 1. int roundPadding = Convert.ToInt16((palette.GetBorderRounding(state) + borderWidth + 2) / Math.PI); // If not involving rounding then padding for an edge is just the border width @@ -574,7 +571,7 @@ public override Padding GetBorderDisplayPadding([DisallowNull] IPaletteBorder pa /// GraphicsPath instance. public override GraphicsPath GetOutsideBorderPath([DisallowNull] RenderContext context, Rectangle rect, - [DisallowNull] IPaletteBorder palette, + IPaletteBorder? palette, VisualOrientation orientation, PaletteState state) { @@ -600,7 +597,6 @@ public override GraphicsPath GetOutsideBorderPath([DisallowNull] RenderContext c CommonHelper.OrientateDrawBorders(palette.GetBorderDrawBorders(state), orientation), palette.GetBorderWidth(state), palette.GetBorderRounding(state), - palette.GetBorderGraphicsHint(state) == PaletteGraphicsHint.AntiAlias, 0); } @@ -644,7 +640,6 @@ public override GraphicsPath GetBorderPath([DisallowNull] RenderContext context, CommonHelper.OrientateDrawBorders(palette.GetBorderDrawBorders(state), orientation), palette.GetBorderWidth(state), palette.GetBorderRounding(state), - palette.GetBorderGraphicsHint(state) == PaletteGraphicsHint.AntiAlias, 0); } @@ -688,7 +683,6 @@ public override GraphicsPath GetBackPath([DisallowNull] RenderContext context, CommonHelper.OrientateDrawBorders(palette.GetBorderDrawBorders(state), orientation), palette.GetBorderWidth(state), palette.GetBorderRounding(state), - palette.GetBorderGraphicsHint(state) == PaletteGraphicsHint.AntiAlias, 0); } @@ -697,18 +691,18 @@ public override GraphicsPath GetBackPath([DisallowNull] RenderContext context, /// /// Rendering context. /// Target rectangle. - /// Palette used for drawing. + /// Palette used for drawing. /// Visual orientation of the border. /// State associated with rendering. /// public override void DrawBorder([DisallowNull] RenderContext context, Rectangle rect, - [DisallowNull] IPaletteBorder palette, + [DisallowNull] IPaletteBorder paletteBorder, VisualOrientation orientation, PaletteState state) { Debug.Assert(context != null); - Debug.Assert(palette != null); + Debug.Assert(paletteBorder != null); // Validate parameter references if (context == null) @@ -716,38 +710,31 @@ public override void DrawBorder([DisallowNull] RenderContext context, throw new ArgumentNullException(nameof(context)); } - if (palette == null) + if (paletteBorder == null) { - throw new ArgumentNullException(nameof(palette)); + throw new ArgumentNullException(nameof(paletteBorder)); } Debug.Assert(context.Control != null); Debug.Assert(!context.Control!.IsDisposed); - PaletteDrawBorders borders = palette.GetBorderDrawBorders(state); + PaletteDrawBorders borders = paletteBorder.GetBorderDrawBorders(state); // Is there anything to actually draw? if (rect is { Width: > 0, Height: > 0 } && CommonHelper.HasABorder(borders)) { - // Only use anti aliasing if the border is rounded - SmoothingMode smoothMode = palette.GetBorderRounding(state) > 0 ? SmoothingMode.AntiAlias : SmoothingMode.Default; - - // We want to draw using anti aliasing for a nice smooth effect - using var hint = new GraphicsHint(context.Graphics, palette.GetBorderGraphicsHint(state)); // Cache commonly used values - var borderWidth = palette.GetBorderWidth(state); - - // Get the orientation correct borders value - borders = CommonHelper.OrientateDrawBorders(borders, orientation); + var borderWidth = paletteBorder.GetBorderWidth(state); // Is there any border to actually draw? if (borderWidth > 0) { + // Get the orientation correct borders value + borders = CommonHelper.OrientateDrawBorders(borders, orientation); using var clip = new Clipping(context.Graphics, rect); // We always create the first border path variant - GraphicsPath borderPath0 = CreateBorderBackPath(true, true, rect, borders, borderWidth, - palette.GetBorderRounding(state), - smoothMode == SmoothingMode.AntiAlias, 0); + using GraphicsPath borderPath0 = CreateBorderBackPath(true, true, rect, borders, borderWidth, + paletteBorder.GetBorderRounding(state), 0); GraphicsPath? borderPath1 = null; @@ -755,26 +742,29 @@ public override void DrawBorder([DisallowNull] RenderContext context, if (borders is PaletteDrawBorders.TopBottom or PaletteDrawBorders.LeftRight) { borderPath1 = CreateBorderBackPath(true, true, rect, borders, borderWidth, - palette.GetBorderRounding(state), - smoothMode == SmoothingMode.AntiAlias, 1); + paletteBorder.GetBorderRounding(state), 1); } // Get the rectangle to use when dealing with gradients - Rectangle gradientRect = context.GetAlignedRectangle(palette.GetBorderColorAlign(state), rect); + Rectangle gradientRect = context.GetAlignedRectangle(paletteBorder.GetBorderColorAlign(state), rect); // Use standard helper routine to create appropriate color brush - PaletteColorStyle colorStyle = palette.GetBorderColorStyle(state); + PaletteColorStyle colorStyle = paletteBorder.GetBorderColorStyle(state); using (var borderPen = new Pen( - CreateColorBrush(gradientRect, palette.GetBorderColor1(state), - palette.GetBorderColor2(state), colorStyle, palette.GetBorderColorAngle(state), + CreateColorBrush(gradientRect, paletteBorder.GetBorderColor1(state), + paletteBorder.GetBorderColor2(state), colorStyle, paletteBorder.GetBorderColorAngle(state), orientation), borderWidth)) { if (colorStyle == PaletteColorStyle.Dashed) { - borderPen.DashPattern = new float[] { 2, 2 }; + borderPen.DashPattern = [2, 2]; } + // Only use antialiasing if the border is rounded + PaletteGraphicsHint smoothMode = paletteBorder.GetBorderGraphicsHint(state); + // We want to draw using antialiasing for a nice smooth effect + using var gh = new GraphicsHint(context.Graphics, smoothMode); context.Graphics.DrawPath(borderPen, borderPath0); // Optionally also draw the second path @@ -784,18 +774,20 @@ public override void DrawBorder([DisallowNull] RenderContext context, } } - Image? borderImage = palette.GetBorderImage(state); - PaletteImageStyle borderImageStyle = palette.GetBorderImageStyle(state); + Image? borderImage = paletteBorder.GetBorderImage(state); + PaletteImageStyle borderImageStyle = paletteBorder.GetBorderImageStyle(state); // Do we need to draw the image? if (ShouldDrawImage(borderImage)) { // Get the rectangle to use when dealing with gradients - Rectangle imageRect = context.GetAlignedRectangle(palette.GetBorderImageAlign(state), rect); + Rectangle imageRect = context.GetAlignedRectangle(paletteBorder.GetBorderImageAlign(state), rect); // Use standard helper routine to create appropriate image brush using var borderPen = new Pen(CreateImageBrush(imageRect, borderImage!, borderImageStyle), borderWidth); + + using var gh = new GraphicsHint(context.Graphics, paletteBorder.GetBorderGraphicsHint(state)); context.Graphics.DrawPath(borderPen, borderPath0); // Optionally also draw the second path @@ -806,8 +798,6 @@ public override void DrawBorder([DisallowNull] RenderContext context, } // Remember to dispose of resources - borderPath0.Dispose(); - borderPath1?.Dispose(); } } @@ -872,7 +862,7 @@ public override void DrawBorder([DisallowNull] RenderContext context, state = PaletteState.Normal; } - // We want to draw using anti aliasing for a nice smooth effect + // We want to draw using antialiasing for a nice smooth effect using var smooth = new GraphicsHint(context.Graphics, palette.GetBackGraphicsHint(state)); // Cache commonly used values Image? backImage = palette.GetBackImage(state); @@ -1035,33 +1025,34 @@ public override void DrawBorder([DisallowNull] RenderContext context, /// Content values. /// Visual orientation of the content. /// State associated with rendering. - /// Should draw on a composition element. - /// If composition, should glowing be drawn. /// /// Preferred size. public override Size GetContentPreferredSize([DisallowNull] ViewLayoutContext context, [DisallowNull] IPaletteContent palette, [DisallowNull] IContentValues values, - VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing) + VisualOrientation orientation, + PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(palette != null); - Debug.Assert(values != null); + Debug.Assert(context is not null); + Debug.Assert(palette is not null); + Debug.Assert(values is not null); // Validate parameter references - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } - if (palette == null) + if (palette is null) { throw new ArgumentNullException(nameof(palette)); } + if (values is null) + { + throw new ArgumentNullException(nameof(values)); + } + Debug.Assert(context.Control != null); Debug.Assert(!context.Control!.IsDisposed); @@ -1070,9 +1061,12 @@ public override Size GetContentPreferredSize([DisallowNull] ViewLayoutContext co var displayRect = new Rectangle(Point.Empty, new Size(int.MaxValue, int.MaxValue)); // Track the allocated space in each grid position - var allocation = new Size[3, 3] { { Size.Empty, Size.Empty, Size.Empty }, - { Size.Empty, Size.Empty, Size.Empty }, - { Size.Empty, Size.Empty, Size.Empty } }; + var allocation = new Size[3, 3] + { + { Size.Empty, Size.Empty, Size.Empty }, + { Size.Empty, Size.Empty, Size.Empty }, + { Size.Empty, Size.Empty, Size.Empty } + }; // Create a memento for storing calculations using var memento = new StandardContentMemento(); @@ -1087,8 +1081,8 @@ public override Size GetContentPreferredSize([DisallowNull] ViewLayoutContext co // Allocate space for each required content in turn AllocateImageSpace(memento, palette, values, state, displayRect, rtl, ref allocation); - AllocateShortTextSpace(context, context.Graphics, memento, palette, values, state, displayRect, rtl, spacingGap, ref allocation, composition, glowing); - AllocateLongTextSpace(context, context.Graphics, memento, palette, values, state, displayRect, rtl, spacingGap, ref allocation, composition, glowing); + AllocateShortTextSpace(context, context.Graphics, memento, palette, values, state, displayRect, rtl, spacingGap, ref allocation); + AllocateLongTextSpace(context, context.Graphics, memento, palette, values, state, displayRect, rtl, spacingGap, ref allocation); // Add up total allocated for rows and columns var allocatedWidth = AllocatedTotalWidth(allocation, -1, -1, spacingGap); @@ -1134,22 +1128,18 @@ public override Size GetContentPreferredSize([DisallowNull] ViewLayoutContext co /// Content values. /// Visual orientation of the content. /// State associated with rendering. - /// Should draw on a composition element. - /// If composition, should glowing be drawn. /// /// Memento with cached information. public override IDisposable LayoutContent([DisallowNull] ViewLayoutContext context, - Rectangle availableRect, - [DisallowNull] IPaletteContent palette, - [DisallowNull] IContentValues values, - VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing) + Rectangle availableRect, + [DisallowNull] IPaletteContent palette, + [DisallowNull] IContentValues values, + VisualOrientation orientation, + PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(palette != null); - Debug.Assert(values != null); + Debug.Assert(context is not null); + Debug.Assert(palette is not null); + Debug.Assert(values is not null); // Validate parameter references if (context == null) @@ -1162,6 +1152,11 @@ public override IDisposable LayoutContent([DisallowNull] ViewLayoutContext conte throw new ArgumentNullException(nameof(palette)); } + if (values == null) + { + throw new ArgumentNullException(nameof(values)); + } + Debug.Assert(context.Control != null); Debug.Assert(!context.Control!.IsDisposed); @@ -1200,9 +1195,12 @@ public override IDisposable LayoutContent([DisallowNull] ViewLayoutContext conte } // Track the allocated space in each grid position - var allocation = new Size[3, 3] { { Size.Empty, Size.Empty, Size.Empty }, - { Size.Empty, Size.Empty, Size.Empty }, - { Size.Empty, Size.Empty, Size.Empty } }; + var allocation = new Size[3, 3] + { + { Size.Empty, Size.Empty, Size.Empty }, + { Size.Empty, Size.Empty, Size.Empty }, + { Size.Empty, Size.Empty, Size.Empty } + }; // Create a memento to return to caller var memento = new StandardContentMemento(); @@ -1215,8 +1213,8 @@ public override IDisposable LayoutContent([DisallowNull] ViewLayoutContext conte // Allocate space for each required content in turn AllocateImageSpace(memento, palette, values, state, availableRect, rtl, ref allocation); - AllocateShortTextSpace(context, context.Graphics, memento, palette, values, state, availableRect, rtl, spacingGap, ref allocation, composition, glowing); - AllocateLongTextSpace(context, context.Graphics, memento, palette, values, state, availableRect, rtl, spacingGap, ref allocation, composition, glowing); + AllocateShortTextSpace(context, context.Graphics, memento, palette, values, state, availableRect, rtl, spacingGap, ref allocation); + AllocateLongTextSpace(context, context.Graphics, memento, palette, values, state, availableRect, rtl, spacingGap, ref allocation); // Find the width of the columns and heights of the rows var colWidths = AllocatedColumnWidths(allocation, -1); @@ -1292,19 +1290,15 @@ public override IDisposable LayoutContent([DisallowNull] ViewLayoutContext conte /// Cached values from layout call. /// Visual orientation of the content. /// State associated with rendering. - /// Drawing onto a composition element. - /// If composition should glowing be drawn. /// Allow drawing of focus rectangle. /// public override void DrawContent([DisallowNull] RenderContext context, - Rectangle displayRect, - [DisallowNull] IPaletteContent palette, - [DisallowNull] IDisposable memento, - VisualOrientation orientation, - PaletteState state, - bool composition, - bool glowing, - bool allowFocusRect) + Rectangle displayRect, + [DisallowNull] IPaletteContent palette, + [DisallowNull] IDisposable memento, + VisualOrientation orientation, + PaletteState state, + bool allowFocusRect) { Debug.Assert(context != null); Debug.Assert(memento != null); @@ -1325,7 +1319,7 @@ public override void DrawContent([DisallowNull] RenderContext context, Debug.Assert(!context.Control!.IsDisposed); // Cast the incoming memento to the correct type - StandardContentMemento standard = (StandardContentMemento)memento; + var standard = (StandardContentMemento)memento!; if (standard.DrawImage) { @@ -1360,13 +1354,11 @@ public override void DrawContent([DisallowNull] RenderContext context, standard.ShortTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, - standard.ShortTextMemento)) + standard.ShortTextMemento!)) { // Failed to draw means the font is likely to be invalid, get a fresh font - standard.ShortTextMemento.Font = palette.GetContentShortTextNewFont(state); + standard.ShortTextMemento!.Font = palette.GetContentShortTextNewFont(state)!; // Try again using the new font AccurateText.DrawString(context.Graphics, @@ -1374,14 +1366,12 @@ public override void DrawContent([DisallowNull] RenderContext context, standard.ShortTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, standard.ShortTextMemento); } } - Image shortImage = palette.GetContentShortTextImage(state); + Image shortImage = palette.GetContentShortTextImage(state)!; PaletteImageStyle shortImageStyle = palette.GetContentShortTextImageStyle(state); // Do we need to draw the image? @@ -1397,21 +1387,17 @@ public override void DrawContent([DisallowNull] RenderContext context, standard.ShortTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, - standard.ShortTextMemento)) + standard.ShortTextMemento!)) { // Failed to draw means the font is likely to be invalid, get a fresh font - standard.ShortTextMemento.Font = palette.GetContentShortTextNewFont(state); + standard.ShortTextMemento!.Font = palette.GetContentShortTextNewFont(state)!; AccurateText.DrawString(context.Graphics, imageBrush, standard.ShortTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, standard.ShortTextMemento); } @@ -1439,27 +1425,23 @@ public override void DrawContent([DisallowNull] RenderContext context, standard.LongTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, - standard.LongTextMemento)) + standard.LongTextMemento!)) { // Failed to draw means the font is likely to be invalid, get a fresh font - standard.LongTextMemento.Font = palette.GetContentLongTextNewFont(state); + standard.LongTextMemento!.Font = palette.GetContentLongTextNewFont(state)!; AccurateText.DrawString(context.Graphics, colorBrush, standard.LongTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, standard.LongTextMemento); } } - Image longImage = palette.GetContentLongTextImage(state); + Image longImage = palette.GetContentLongTextImage(state)!; PaletteImageStyle longImageStyle = palette.GetContentLongTextImageStyle(state); // Do we need to draw the image? @@ -1475,21 +1457,17 @@ public override void DrawContent([DisallowNull] RenderContext context, standard.LongTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, - standard.LongTextMemento)) + standard.LongTextMemento!)) { // Failed to draw means the font is likely to be invalid, get a fresh font - standard.LongTextMemento.Font = palette.GetContentLongTextNewFont(state); + standard.LongTextMemento!.Font = palette.GetContentLongTextNewFont(state)!; AccurateText.DrawString(context.Graphics, imageBrush, standard.LongTextRect, context.Control.RightToLeft, standard.Orientation, - composition, - glowing, state, standard.LongTextMemento); } @@ -1512,11 +1490,11 @@ public override void DrawContent([DisallowNull] RenderContext context, /// /// Cached values from layout call. /// True if the image is being Displayed; otherwise false. - public override bool GetContentImageDisplayed(IDisposable memento) + public override bool GetContentImageDisplayed(IDisposable? memento) { if (memento != null) { - StandardContentMemento standard = (StandardContentMemento)memento; + var standard = (StandardContentMemento)memento; return standard.DrawImage; } else @@ -1530,11 +1508,11 @@ public override bool GetContentImageDisplayed(IDisposable memento) /// /// Cached values from layout call. /// Display rectangle for the image content. - public override Rectangle GetContentImageRectangle(IDisposable memento) + public override Rectangle GetContentImageRectangle(IDisposable? memento) { if (memento != null) { - StandardContentMemento standard = (StandardContentMemento)memento; + var standard = (StandardContentMemento)memento; return standard.ImageRect; } else @@ -1548,11 +1526,11 @@ public override Rectangle GetContentImageRectangle(IDisposable memento) /// /// Cached values from layout call. /// True if the short text is being Displayed; otherwise false. - public override bool GetContentShortTextDisplayed(IDisposable memento) + public override bool GetContentShortTextDisplayed(IDisposable? memento) { if (memento != null) { - StandardContentMemento standard = (StandardContentMemento)memento; + var standard = (StandardContentMemento)memento; return standard.DrawShortText; } else @@ -1566,11 +1544,11 @@ public override bool GetContentShortTextDisplayed(IDisposable memento) /// /// Cached values from layout call. /// Display rectangle for the image content. - public override Rectangle GetContentShortTextRectangle(IDisposable memento) + public override Rectangle GetContentShortTextRectangle(IDisposable? memento) { if (memento != null) { - StandardContentMemento standard = (StandardContentMemento)memento; + var standard = (StandardContentMemento)memento; return standard.ShortTextRect; } else @@ -1584,11 +1562,11 @@ public override Rectangle GetContentShortTextRectangle(IDisposable memento) /// /// Cached values from layout call. /// True if the long text is being Displayed; otherwise false. - public override bool GetContentLongTextDisplayed(IDisposable memento) + public override bool GetContentLongTextDisplayed(IDisposable? memento) { if (memento != null) { - StandardContentMemento standard = (StandardContentMemento)memento; + var standard = (StandardContentMemento)memento; return standard.DrawLongText; } else @@ -1602,11 +1580,11 @@ public override bool GetContentLongTextDisplayed(IDisposable memento) /// /// Cached values from layout call. /// Display rectangle for the image content. - public override Rectangle GetContentLongTextRectangle(IDisposable memento) + public override Rectangle GetContentLongTextRectangle(IDisposable? memento) { if (memento != null) { - StandardContentMemento standard = (StandardContentMemento)memento; + var standard = (StandardContentMemento)memento; return standard.LongTextRect; } else @@ -1710,9 +1688,9 @@ public override Padding GetTabBorderDisplayPadding(ViewLayoutContext context, var borderWidth = palette.GetBorderWidth(state); // Cache the right to left setting - var rtl = context.Control.RightToLeft == RightToLeft.Yes; + var rtl = context.Control!.RightToLeft == RightToLeft.Yes; - Padding ret = Padding.Empty; + var ret = Padding.Empty; switch (tabBorderStyle) { @@ -1739,7 +1717,7 @@ public override Padding GetTabBorderDisplayPadding(ViewLayoutContext context, break; case TabBorderStyle.SlantEqualNear: case TabBorderStyle.SlantOutsizeNear: - // Calculte the extra needed for the outsize variant + // Calculate the extra needed for the outsize variant var x = tabBorderStyle == TabBorderStyle.SlantOutsizeNear ? SPACING_TAB_OUTSIZE_PADDING : 0; switch (orientation) @@ -1770,7 +1748,7 @@ public override Padding GetTabBorderDisplayPadding(ViewLayoutContext context, break; case TabBorderStyle.SlantEqualFar: case TabBorderStyle.SlantOutsizeFar: - // Calculte the extra needed for the outsize variant + // Calculate the extra needed for the outsize variant var y = tabBorderStyle == TabBorderStyle.SlantOutsizeFar ? SPACING_TAB_OUTSIZE_PADDING : 0; switch (orientation) @@ -1801,7 +1779,7 @@ public override Padding GetTabBorderDisplayPadding(ViewLayoutContext context, break; case TabBorderStyle.SlantEqualBoth: case TabBorderStyle.SlantOutsizeBoth: - // Calculte the extra needed for the outsize variant + // Calculate the extra needed for the outsize variant var z = tabBorderStyle == TabBorderStyle.SlantOutsizeBoth ? SPACING_TAB_OUTSIZE_PADDING : 0; ret = new Padding(borderWidth + z + SPACING_TAB_SLANT_PADDING - 1, borderWidth + z, @@ -1848,6 +1826,7 @@ public override Padding GetTabBorderDisplayPadding(ViewLayoutContext context, default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(tabBorderStyle.ToString()); break; } @@ -1891,8 +1870,7 @@ public override GraphicsPath GetTabBorderPath([DisallowNull] RenderContext conte // Use helper to create a border path in middle of the pen return CreateTabBorderBackPath(context.Control.RightToLeft, state, false, rect, - palette.GetBorderWidth(state), tabBorderStyle, orientation, - palette.GetBorderGraphicsHint(state) == PaletteGraphicsHint.AntiAlias); + palette.GetBorderWidth(state), tabBorderStyle, orientation); } /// @@ -1932,8 +1910,7 @@ public override GraphicsPath GetTabBackPath([DisallowNull] RenderContext context // Use helper to create a border path in middle of the pen return CreateTabBorderBackPath(context.Control.RightToLeft, state, false, rect, - palette.GetBorderWidth(state), tabBorderStyle, orientation, - palette.GetBorderGraphicsHint(state) == PaletteGraphicsHint.AntiAlias); + palette.GetBorderWidth(state), tabBorderStyle, orientation); } /// @@ -1973,7 +1950,7 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, // Is there anything to actually draw? if (rect is { Width: > 0, Height: > 0 }) { - // Decide if we need to use anti aliasing for a smoother looking visual + // Decide if we need to use antialiasing for a smoother looking visual using var hint = new GraphicsHint(context.Graphics, palette.GetBorderGraphicsHint(state)); // Cache commonly used values var borderWidth = palette.GetBorderWidth(state); @@ -1983,8 +1960,7 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, { // Create the path that represents the entire tab border using GraphicsPath borderPath = CreateTabBorderBackPath(context.Control.RightToLeft, state, true, rect, - borderWidth, tabBorderStyle, orientation, - palette.GetBorderGraphicsHint(state) == PaletteGraphicsHint.AntiAlias); + borderWidth, tabBorderStyle, orientation); // Get the rectangle to use when dealing with gradients Rectangle gradientRect = context.GetAlignedRectangle(palette.GetBorderColorAlign(state), rect); @@ -2002,7 +1978,7 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, } } - Image borderImage = palette.GetBorderImage(state); + Image? borderImage = palette.GetBorderImage(state); // Do we need to draw the image? if (ShouldDrawImage(borderImage)) @@ -2014,7 +1990,7 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, PaletteImageStyle borderImageStyle = palette.GetBorderImageStyle(state); // Use standard helper routine to create appropriate image brush - using var borderPen = new Pen(CreateImageBrush(imageRect, borderImage, borderImageStyle), + using var borderPen = new Pen(CreateImageBrush(imageRect, borderImage!, borderImageStyle), borderWidth); context.Graphics.DrawPath(borderPen, borderPath); } @@ -2024,6 +2000,7 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, #endregion #region RenderRibbon Overrides + /// /// Draw the background of a ribbon element. /// @@ -2033,25 +2010,23 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, /// State associated with rendering. /// Palette used for sourcing settings. /// Orientation for drawing. - /// Drawing onto a composition element. /// Cached values to use when drawing. public override IDisposable? DrawRibbonBack(PaletteRibbonShape shape, - RenderContext context, - Rectangle rect, - PaletteState state, - IPaletteRibbonBack palette, - VisualOrientation orientation, - bool composition, - IDisposable? memento) - { - // Note is the incoming state is detailed we are drawing inside a popip + RenderContext context, + Rectangle rect, + PaletteState state, + IPaletteRibbonBack palette, + VisualOrientation orientation, + IDisposable? memento) + { + // Note is the incoming state is detailed we are drawing inside a popup var showingInPopup = (state & PaletteState.FocusOverride) == PaletteState.FocusOverride; if (showingInPopup) { state &= ~PaletteState.FocusOverride; } - var backColorStyle = palette.GetRibbonBackColorStyle(state); + PaletteRibbonColorStyle backColorStyle = palette.GetRibbonBackColorStyle(state); switch (backColorStyle) { case PaletteRibbonColorStyle.Empty: @@ -2077,9 +2052,9 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, case PaletteRibbonColorStyle.RibbonQATFullbarSquare: return DrawRibbonQATFullbarSquare(context, rect, state, palette, memento); case PaletteRibbonColorStyle.RibbonQATMinibarSingle: - return DrawRibbonQATMinibarSingle(context, rect, state, palette, composition, memento); + return DrawRibbonQATMinibarSingle(context, rect, state, palette, memento); case PaletteRibbonColorStyle.RibbonQATMinibarDouble: - return DrawRibbonQATMinibarDouble(context, rect, state, palette, composition, memento); + return DrawRibbonQATMinibarDouble(context, rect, state, palette, memento); case PaletteRibbonColorStyle.RibbonQATOverflow: return DrawRibbonQATOverflow(shape, context, rect, state, palette, memento); case PaletteRibbonColorStyle.RibbonGroupGradientOne: @@ -2155,6 +2130,7 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(backColorStyle.ToString()); break; } @@ -2170,12 +2146,12 @@ public override void DrawTabBorder([DisallowNull] RenderContext context, /// Palette used for general ribbon settings. /// Palette used for background ribbon settings. /// Cached storage for drawing objects. - public override IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, + public override IDisposable? DrawRibbonTabContextTitle(PaletteRibbonShape shape, RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) => + IDisposable? memento) => DrawRibbonTabContext(context, rect, paletteGeneral, paletteBack, memento); /// @@ -2187,12 +2163,12 @@ public override IDisposable DrawRibbonTabContextTitle(PaletteRibbonShape shape, /// State associated with rendering. /// Palette used for sourcing settings. /// Cached storage for drawing objects. - public override IDisposable DrawRibbonApplicationButton(PaletteRibbonShape shape, + public override IDisposable? DrawRibbonApplicationButton(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) => + IDisposable? memento) => DrawRibbonAppButton(shape, context, rect, state, palette, false, memento); /// @@ -2202,17 +2178,15 @@ public override IDisposable DrawRibbonApplicationButton(PaletteRibbonShape shape /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, + public override IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, - Color baseColor1, - Color baseColor2, - IDisposable memento) => - DrawRibbonAppTab(shape, context, rect, state, baseColor1, baseColor2, memento); + IPaletteRibbonFileAppTab palette, + IDisposable? memento) => + DrawRibbonAppTab(shape, context, rect, state, palette, memento); /// /// Perform drawing of a ribbon cluster edge. @@ -2231,9 +2205,9 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, Debug.Assert(context != null); Debug.Assert(paletteBack != null); - // Draw inside of the border edge in a lighter version of the border - using var drawBrush = new SolidBrush(paletteBack.GetBackColor1(state)); - context.Graphics.FillRectangle(drawBrush, displayRect); + // Draw inside the border edge in a lighter version of the border + using var drawBrush = new SolidBrush(paletteBack!.GetBackColor1(state)); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -2289,7 +2263,7 @@ public override void DrawSeparator([DisallowNull] RenderContext context, VisualOrientation.Left; // Ask the border renderer for a path that encloses the border - using GraphicsPath borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, displayRect, paletteBorder, borderOrientation, state); + using GraphicsPath borderPath = context.Renderer!.RenderStandardBorder.GetBackPath(context, displayRect, paletteBorder, borderOrientation, state); // Get the padding needed for the drawing area inside the border Padding borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(paletteBorder, state, borderOrientation); @@ -2300,6 +2274,7 @@ public override void DrawSeparator([DisallowNull] RenderContext context, VisualOrientation vo = (orientation == Orientation.Horizontal) ? VisualOrientation.Top : VisualOrientation.Left; // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, paletteBorder.GetBorderGraphicsHint(state)); context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, paletteBack, vo, state, null); } @@ -2310,22 +2285,22 @@ public override void DrawSeparator([DisallowNull] RenderContext context, VisualOrientation vo = (orientation == Orientation.Horizontal) ? VisualOrientation.Top : VisualOrientation.Left; // Render the border over the background and children - context.Renderer.RenderStandardBorder.DrawBorder(context, displayRect, paletteBorder, vo, state); + context.Renderer!.RenderStandardBorder.DrawBorder(context, displayRect, paletteBorder, vo, state); } } /// - /// Calculate the requested display size for the check box. + /// Calculate the requested display size for the checkbox. /// /// Render context. /// Palette for sourcing display values. /// Should check box be Displayed as enabled. - /// The checked state of the check box. + /// The checked state of the checkbox. /// Should check box be Displayed as hot tracking. /// Should check box be Displayed as pressed. /// public override Size GetCheckBoxPreferredSize([DisallowNull] ViewLayoutContext context, - [DisallowNull] PaletteBase? palette, + [DisallowNull] PaletteBase palette, bool enabled, CheckState checkState, bool tracking, @@ -2354,7 +2329,7 @@ public override Size GetCheckBoxPreferredSize([DisallowNull] ViewLayoutContext c // Convert incoming parameters to check box state CheckBoxState state = DiscoverCheckBoxState(enabled, checkState, tracking, pressed); - // Request the drawing size of the check box glyph + // Request the drawing size of the checkbox glyph return CheckBoxRenderer.GetGlyphSize(context.Graphics, state); } else @@ -2364,19 +2339,19 @@ public override Size GetCheckBoxPreferredSize([DisallowNull] ViewLayoutContext c } /// - /// Perform drawing of a check box. + /// Perform drawing of a checkbox. /// /// Render context. /// Display area available for drawing. /// Palette for sourcing display values. /// Should check box be Displayed as enabled. - /// The checked state of the check box. + /// The checked state of the checkbox. /// Should check box be Displayed as hot tracking. /// Should check box be Displayed as pressed. /// public override void DrawCheckBox([DisallowNull] RenderContext context, Rectangle displayRect, - [DisallowNull] PaletteBase? palette, + [DisallowNull] PaletteBase palette, bool enabled, CheckState checkState, bool tracking, @@ -2513,22 +2488,22 @@ public override void DrawRadioButton([DisallowNull] RenderContext context, } /// - /// Calculate the requested display size for the drop down button. + /// Calculate the requested display size for the drop-down button. /// /// Render context. /// Palette for sourcing display values. /// State for which image size is needed. /// How to orientate the image. public override Size GetDropDownButtonPreferredSize(ViewLayoutContext context, - [DisallowNull] PaletteBase? palette, + [DisallowNull] PaletteBase palette, PaletteState state, VisualOrientation orientation) { // Grab an image appropriate to the state - Image? drawImage = palette?.GetDropDownButtonImage(state); + Image? drawImage = palette.GetDropDownButtonImage(state); // Get the image defined size - Size imageSize = Size.Empty; + var imageSize = Size.Empty; if (drawImage != null) { imageSize = drawImage.Size; @@ -2545,7 +2520,7 @@ public override Size GetDropDownButtonPreferredSize(ViewLayoutContext context, } /// - /// Perform drawing of a drop down button. + /// Perform drawing of a drop-down button. /// /// Render context. /// Display area available for drawing. @@ -2555,7 +2530,7 @@ public override Size GetDropDownButtonPreferredSize(ViewLayoutContext context, /// public override void DrawDropDownButton([DisallowNull] RenderContext context, Rectangle displayRect, - [DisallowNull] PaletteBase? palette, + [DisallowNull] PaletteBase palette, PaletteState state, VisualOrientation orientation) { @@ -2577,9 +2552,9 @@ public override void DrawDropDownButton([DisallowNull] RenderContext context, Image? drawImage = palette.GetDropDownButtonImage(state); if (drawImage != null) { - DrawImageHelper(context, drawImage, Color.Empty, + DrawImageHelper(context, drawImage, GlobalStaticValues.EMPTY_COLOR, displayRect, orientation, PaletteImageEffect.Normal, - Color.Empty, Color.Empty); + GlobalStaticValues.EMPTY_COLOR, GlobalStaticValues.EMPTY_COLOR); } } @@ -2591,13 +2566,13 @@ public override void DrawDropDownButton([DisallowNull] RenderContext context, /// Content palette for getting colors. /// State associated with rendering. /// - public override void DrawInputControlNumericUpGlyph([DisallowNull] RenderContext context, + public override void DrawInputControlNumericUpGlyph(RenderContext context, Rectangle cellRect, - [DisallowNull] IPaletteContent? paletteContent, + IPaletteContent? paletteContent, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteContent != null); + Debug.Assert(context is not null); + Debug.Assert(paletteContent is not null); // Validate parameter references if (context == null) @@ -2617,26 +2592,26 @@ public override void DrawInputControlNumericUpGlyph([DisallowNull] RenderContext var xStart = cellRect.Left + ((cellRect.Right - cellRect.Left - 4) / 2); var yStart = cellRect.Top + ((cellRect.Bottom - cellRect.Top - 3) / 2); - using Pen darkPen = new Pen(c1), - lightPen = new Pen(c2); + using var darkPen = new Pen(c1); context.Graphics.DrawLine(darkPen, xStart, yStart + 3, xStart + 4, yStart + 3); context.Graphics.DrawLine(darkPen, xStart + 1, yStart + 2, xStart + 3, yStart + 2); context.Graphics.DrawLine(darkPen, xStart + 2, yStart + 2, xStart + 2, yStart + 1); + using var lightPen = new Pen(c2); context.Graphics.DrawLine(lightPen, xStart + 2, yStart, xStart + 4, yStart + 2); context.Graphics.DrawLine(lightPen, xStart + 2, yStart, xStart, yStart + 2); } /// - /// Draw a numeric down button image appropriate for a input control. + /// Draw a numeric down button image appropriate for an input control. /// /// Render context. /// Available drawing rectangle space. /// Content palette for getting colors. /// State associated with rendering. /// - public override void DrawInputControlNumericDownGlyph([DisallowNull] RenderContext context, + public override void DrawInputControlNumericDownGlyph(RenderContext context, Rectangle cellRect, - [DisallowNull] IPaletteContent? paletteContent, + IPaletteContent? paletteContent, PaletteState state) { Debug.Assert(context != null); @@ -2660,30 +2635,30 @@ public override void DrawInputControlNumericDownGlyph([DisallowNull] RenderConte var xStart = cellRect.Left + ((cellRect.Right - cellRect.Left - 4) / 2); var yStart = cellRect.Top + ((cellRect.Bottom - cellRect.Top - 3) / 2); - using Pen darkPen = new Pen(c1), - lightPen = new Pen(c2); + using var darkPen = new Pen(c1); context.Graphics.DrawLine(darkPen, xStart, yStart, xStart + 4, yStart); context.Graphics.DrawLine(darkPen, xStart + 1, yStart + 1, xStart + 3, yStart + 1); context.Graphics.DrawLine(darkPen, xStart + 2, yStart + 2, xStart + 2, yStart + 1); + using var lightPen = new Pen(c2); context.Graphics.DrawLine(lightPen, xStart, yStart + 1, xStart + 2, yStart + 3); context.Graphics.DrawLine(lightPen, xStart + 2, yStart + 3, xStart + 4, yStart + 1); } /// - /// Draw a drop down grid appropriate for a input control. + /// Draw a drop-down grid appropriate for an input control. /// /// Render context. /// Available drawing rectangle space. /// Content palette for getting colors. /// State associated with rendering. /// - public override void DrawInputControlDropDownGlyph([DisallowNull] RenderContext context, + public override void DrawInputControlDropDownGlyph(RenderContext context, Rectangle cellRect, - [DisallowNull] IPaletteContent? paletteContent, + IPaletteContent? paletteContent, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteContent != null); + Debug.Assert(context is not null); + Debug.Assert(paletteContent is not null); // Validate parameter references if (context == null) @@ -2703,11 +2678,11 @@ public override void DrawInputControlDropDownGlyph([DisallowNull] RenderContext var xStart = cellRect.Left + ((cellRect.Right - cellRect.Left - 4) / 2); var yStart = cellRect.Top + ((cellRect.Bottom - cellRect.Top - 3) / 2); - using Pen darkPen = new Pen(c1), - lightPen = new Pen(c2); + using var darkPen = new Pen(c1); context.Graphics.DrawLine(darkPen, xStart, yStart, xStart + 4, yStart); context.Graphics.DrawLine(darkPen, xStart + 1, yStart + 1, xStart + 3, yStart + 1); context.Graphics.DrawLine(darkPen, xStart + 2, yStart + 2, xStart + 2, yStart + 1); + using var lightPen = new Pen(c2); context.Graphics.DrawLine(lightPen, xStart, yStart + 1, xStart + 2, yStart + 3); context.Graphics.DrawLine(lightPen, xStart + 2, yStart + 3, xStart + 4, yStart + 1); } @@ -2745,10 +2720,9 @@ public override void DrawRibbonDialogBoxLauncher(PaletteRibbonShape shape, { default: case PaletteRibbonShape.Office2007: - { - using (Pen darkPen = new Pen(paletteGeneral.GetRibbonGroupDialogDark(state)), - lightPen = new Pen(paletteGeneral.GetRibbonGroupDialogLight(state))) { + using var darkPen = new Pen(paletteGeneral.GetRibbonGroupDialogDark(state)); + using var lightPen = new Pen(paletteGeneral.GetRibbonGroupDialogLight(state)); context.Graphics.DrawLine(darkPen, displayRect.Left, displayRect.Top + 5, displayRect.Left, displayRect.Top); context.Graphics.DrawLine(darkPen, displayRect.Left, displayRect.Top, displayRect.Left + 5, @@ -2774,17 +2748,15 @@ public override void DrawRibbonDialogBoxLauncher(PaletteRibbonShape shape, context.Graphics.DrawLine(darkPen, displayRect.Right - 5, displayRect.Bottom - 5, displayRect.Right - 3, displayRect.Bottom - 3); } - } break; case PaletteRibbonShape.Office2010: - { - var dialogBrush = new LinearGradientBrush( - new RectangleF(displayRect.X - 1, displayRect.Y - 1, displayRect.Width + 2, - displayRect.Height + 2), paletteGeneral.GetRibbonGroupDialogLight(state), - paletteGeneral.GetRibbonGroupDialogDark(state), 45f); - - using (var dialogPen = new Pen(dialogBrush)) { + var dialogBrush = new LinearGradientBrush( + new RectangleF(displayRect.X - 1, displayRect.Y - 1, displayRect.Width + 2, + displayRect.Height + 2), paletteGeneral.GetRibbonGroupDialogLight(state), + paletteGeneral.GetRibbonGroupDialogDark(state), 45f); + + using var dialogPen = new Pen(dialogBrush); context.Graphics.DrawLine(dialogPen, displayRect.Left, displayRect.Top + 5, displayRect.Left, displayRect.Top); context.Graphics.DrawLine(dialogPen, displayRect.Left, displayRect.Top, displayRect.Left + 5, @@ -2800,7 +2772,6 @@ public override void DrawRibbonDialogBoxLauncher(PaletteRibbonShape shape, context.Graphics.DrawLine(dialogPen, displayRect.Right - 5, displayRect.Bottom - 5, displayRect.Right - 3, displayRect.Bottom - 3); } - } break; } } @@ -2844,10 +2815,9 @@ public override void DrawRibbonDropArrow(PaletteRibbonShape shape, { default: case PaletteRibbonShape.Office2007: - { - using (Pen darkPen = new Pen(darkColor), - lightPen = new Pen(lightColor)) { + using var darkPen = new Pen(darkColor); + using var lightPen = new Pen(lightColor); context.Graphics.DrawLine(darkPen, displayRect.Left, displayRect.Top, displayRect.Left + 4, displayRect.Top); context.Graphics.DrawLine(darkPen, displayRect.Left + 1, displayRect.Top + 1, @@ -2859,22 +2829,20 @@ public override void DrawRibbonDropArrow(PaletteRibbonShape shape, context.Graphics.DrawLine(lightPen, displayRect.Left + 2, displayRect.Top + 3, displayRect.Left + 4, displayRect.Top + 1); } - } break; + case PaletteRibbonShape.Office2010: - { - using (var fillBrush = new LinearGradientBrush( - new RectangleF(displayRect.X - 1, displayRect.Y - 1, displayRect.Width + 2, - displayRect.Height + 2), lightColor, darkColor, 45f)) { - context.Graphics.FillPolygon(fillBrush, new Point[] + using var fillBrush = new LinearGradientBrush( + new RectangleF(displayRect.X - 1, displayRect.Y - 1, displayRect.Width + 2, + displayRect.Height + 2), lightColor, darkColor, 45f); + context.Graphics.FillPolygon(fillBrush, new[] { - new Point(displayRect.Left - 1, displayRect.Top - 1), - new Point(displayRect.Left + 2, displayRect.Top + 3), - new Point(displayRect.Left + 5, displayRect.Top) - }); + new Point(displayRect.Left - 1, displayRect.Top - 1), + new Point(displayRect.Left + 2, displayRect.Top + 3), + new Point(displayRect.Left + 5, displayRect.Top) + }); } - } break; } } @@ -2918,8 +2886,8 @@ public override void DrawRibbonContextArrow(PaletteRibbonShape shape, c2 = CommonHelper.ColorToBlackAndWhite(c2); } - using Pen darkPen = new Pen(c1), - lightPen = new Pen(c2); + using var darkPen = new Pen(c1); + using var lightPen = new Pen(c2); // TODO: WagnerP - please provide a better way of doing this for Various themes and dpi's if (shape == PaletteRibbonShape.Office2010) { @@ -2984,8 +2952,8 @@ public override void DrawRibbonOverflow(PaletteRibbonShape shape, c2 = CommonHelper.ColorToBlackAndWhite(c2); } - using Pen darkPen = new Pen(c1), - lightPen = new Pen(c2); + using var darkPen = new Pen(c1); + using var lightPen = new Pen(c2); // TODO: WagnerP - please provide a better way of doing this for Various themes and dpi's context.Graphics.DrawLine(darkPen, displayRect.Left, displayRect.Top + 1, displayRect.Left, displayRect.Top + 3); context.Graphics.DrawLine(darkPen, displayRect.Left + 1, displayRect.Top + 2, displayRect.Left, displayRect.Top + 3); @@ -3035,36 +3003,30 @@ public override void DrawRibbonGroupSeparator(PaletteRibbonShape shape, { default: case PaletteRibbonShape.Office2007: - { - using (Pen darkPen = new Pen(darkColor), - lightPen = new Pen(lightColor)) { + using var darkPen = new Pen(darkColor); + using var lightPen = new Pen(lightColor); context.Graphics.DrawLine(lightPen, x, displayRect.Top + 2, x, displayRect.Bottom - 3); context.Graphics.DrawLine(darkPen, x + 1, displayRect.Top + 2, x + 1, displayRect.Bottom - 3); } - } break; + case PaletteRibbonShape.Office2010: - { - using (LinearGradientBrush darkBrush = - new LinearGradientBrush( - new RectangleF(displayRect.X, displayRect.Y - 1, displayRect.Width, - displayRect.Height + 2), Color.FromArgb(72, darkColor), darkColor, 90f), - lightBrush = new LinearGradientBrush( - new RectangleF(displayRect.X - 1, displayRect.Y - 1, - displayRect.Width + 2, displayRect.Height + 2), - Color.FromArgb(128, lightColor), lightColor, 90f)) { + using var darkBrush = new LinearGradientBrush( + new Rectangle(displayRect.X, displayRect.Y - 1, displayRect.Width, + displayRect.Height + 2), Color.FromArgb(72, darkColor), darkColor, 90f); + using var lightBrush = new LinearGradientBrush( + new Rectangle(displayRect.X - 1, displayRect.Y - 1, + displayRect.Width + 2, displayRect.Height + 2), + Color.FromArgb(128, lightColor), lightColor, 90f); darkBrush.SetSigmaBellShape(0.5f); lightBrush.SetSigmaBellShape(0.5f); - using (var darkPen = new Pen(darkBrush)) - { - context.Graphics.FillRectangle(lightBrush, x, displayRect.Top, 3, displayRect.Height); - context.Graphics.DrawLine(darkPen, x + 1, displayRect.Top, x + 1, displayRect.Bottom - 1); - } + using var darkPen = new Pen(darkBrush); + context.Graphics.FillRectangle(lightBrush, x, displayRect.Top, 3, displayRect.Height); + context.Graphics.DrawLine(darkPen, x + 1, displayRect.Top, x + 1, displayRect.Bottom - 1); } - } break; } } @@ -3082,7 +3044,7 @@ public override void DrawRibbonGroupSeparator(PaletteRibbonShape shape, public override Rectangle DrawGridSortGlyph([DisallowNull] RenderContext context, SortOrder sortOrder, Rectangle cellRect, - [DisallowNull] IPaletteContent? paletteContent, + [DisallowNull] IPaletteContent paletteContent, PaletteState state, bool rtl) { @@ -3100,7 +3062,7 @@ public override Rectangle DrawGridSortGlyph([DisallowNull] RenderContext context var x = rtl ? cellRect.X : cellRect.Right - sortImage.Width; // Grab the foreground color to use for the image - Color imageColor = paletteContent.GetContentShortTextColor1(state); + Color imageColor = paletteContent!.GetContentShortTextColor1(state); // Draw the image with remapping the image color to the foreground color using (var attribs = new ImageAttributes()) @@ -3110,9 +3072,9 @@ public override Rectangle DrawGridSortGlyph([DisallowNull] RenderContext context OldColor = Color.Black, NewColor = CommonHelper.MergeColors(imageColor, 0.75f, Color.Transparent, 0.25f) }; - attribs.SetRemapTable(new[] { cm }, ColorAdjustType.Bitmap); + attribs.SetRemapTable([cm], ColorAdjustType.Bitmap); - context.Graphics.DrawImage(sortImage, + context!.Graphics.DrawImage(sortImage, new Rectangle(x, y, sortImage.Width, sortImage.Height), 0, 0, sortImage.Width, sortImage.Height, GraphicsUnit.Pixel, attribs); @@ -3141,15 +3103,15 @@ public override Rectangle DrawGridSortGlyph([DisallowNull] RenderContext context /// State associated with rendering. /// Should be drawn from right to left. /// Remainder space left over for other drawing. - public override Rectangle DrawGridRowGlyph([DisallowNull] RenderContext context, + public override Rectangle DrawGridRowGlyph(RenderContext context, GridRowGlyph rowGlyph, Rectangle cellRect, - [DisallowNull] IPaletteContent? paletteContent, + IPaletteContent? paletteContent, PaletteState state, bool rtl) { - Debug.Assert(context != null); - Debug.Assert(paletteContent != null); + Debug.Assert(context is not null); + Debug.Assert(paletteContent is not null); // Get the appropriate each to draw Image? rowImage = null; @@ -3180,7 +3142,7 @@ public override Rectangle DrawGridRowGlyph([DisallowNull] RenderContext context, var x = rtl ? cellRect.Right - rowImage.Width : cellRect.Left; // Grab the foreground color to use for the image - Color imageColor = paletteContent.GetContentShortTextColor1(state); + Color imageColor = paletteContent!.GetContentShortTextColor1(state); // Draw the image with remapping the image color to the foreground color using (var attribs = new ImageAttributes()) @@ -3190,9 +3152,9 @@ public override Rectangle DrawGridRowGlyph([DisallowNull] RenderContext context, OldColor = Color.Black, NewColor = CommonHelper.MergeColors(imageColor, 0.75f, Color.Transparent, 0.25f) }; - attribs.SetRemapTable(new[] { cm }, ColorAdjustType.Bitmap); + attribs.SetRemapTable([cm], ColorAdjustType.Bitmap); - context.Graphics.DrawImage(rowImage, + context!.Graphics.DrawImage(rowImage, new Rectangle(x, y, rowImage.Width, rowImage.Height), 0, 0, rowImage.Width, rowImage.Height, GraphicsUnit.Pixel, attribs); @@ -3238,11 +3200,11 @@ public override Rectangle DrawGridErrorGlyph([DisallowNull] RenderContext contex if (state == PaletteState.Disabled) { - ControlPaint.DrawImageDisabled(context.Graphics, errorImage, x, y, Color.Empty); + ControlPaint.DrawImageDisabled(context!.Graphics, errorImage, x, y, GlobalStaticValues.EMPTY_COLOR); } else { - context.Graphics.DrawImage(errorImage, x, y); + context!.Graphics.DrawImage(errorImage, x, y); } // Reduce the cell rect by that used up @@ -3271,9 +3233,9 @@ public override void DrawDragDropSolidGlyph([DisallowNull] RenderContext context Debug.Assert(context != null); Debug.Assert(dragDropPalette != null); - using (var backBrush = new SolidBrush(dragDropPalette.GetDragDropSolidBack())) + using (var backBrush = new SolidBrush(dragDropPalette!.GetDragDropSolidBack())) { - context.Graphics.FillRectangle(backBrush, drawRect); + context!.Graphics.FillRectangle(backBrush, drawRect); } using (var borderPen = new Pen(dragDropPalette.GetDragDropSolidBorder())) @@ -3297,11 +3259,11 @@ public override void MeasureDragDropDockingGlyph([DisallowNull] RenderDragDockin if (feedback == PaletteDragFeedback.Rounded) { - MeasureDragDockingRounded(dragData, dragDropPalette); + MeasureDragDockingRounded(dragData!); } else { - MeasureDragDockingSquares(dragData, dragDropPalette); + MeasureDragDockingSquares(dragData!); } } @@ -3323,11 +3285,11 @@ public override void DrawDragDropDockingGlyph([DisallowNull] RenderContext conte if (feedback == PaletteDragFeedback.Rounded) { - DrawDragDockingRounded(context, dragData, dragDropPalette); + DrawDragDockingRounded(context!, dragData!, dragDropPalette!); } else { - DrawDragDockingSquares(context, dragData, dragDropPalette); + DrawDragDockingSquares(context!, dragData!, dragDropPalette!); } } #endregion @@ -3380,11 +3342,11 @@ public override bool EvalTransparentPaint(IPaletteBack paletteBack, /// Element state associated with palette. /// True if transparent painting required. public override bool EvalTransparentPaint(IPaletteBack paletteBack, - [DisallowNull] IPaletteBorder? paletteBorder, + IPaletteBorder? paletteBorder, PaletteState state) { // If the border takes up some visual space - if (paletteBorder.GetBorderWidth(state) > 0) + if (paletteBorder!.GetBorderWidth(state) > 0) { // If the border is not being painted then it must be transparent if (paletteBorder.GetBorderDraw(state) == InheritBool.False) @@ -3558,18 +3520,18 @@ public override void DrawTrackGlyph(RenderContext context, drawRect.Inflate(0, -1); } - using Pen border1Pen = new Pen(elementPalette.GetElementColor1(state)), - border2Pen = new Pen(elementPalette.GetElementColor2(state)); + using var border1Pen = new Pen(elementPalette.GetElementColor1(state)); + using var border2Pen = new Pen(elementPalette.GetElementColor2(state)); using var insideBrush = new SolidBrush(elementPalette.GetElementColor3(state)); if (!volumeControl) { context.Graphics.FillRectangle(insideBrush, drawRect.X + 1, drawRect.Y + 1, drawRect.Width - 2, drawRect.Height - 2); - context.Graphics.DrawLines(border1Pen, new Point[]{ + context.Graphics.DrawLines(border1Pen, new[]{ new Point(drawRect.Right - 1, drawRect.Y), new Point(drawRect.X, drawRect.Y), new Point(drawRect.X, drawRect.Bottom - 1)}); - context.Graphics.DrawLines(border2Pen, new Point[]{ + context.Graphics.DrawLines(border2Pen, new[]{ new Point(drawRect.Right - 1, drawRect.Y + 1), new Point(drawRect.Right - 1, drawRect.Bottom - 1), new Point(drawRect.X + 1, drawRect.Bottom - 1)}); } @@ -3578,12 +3540,12 @@ public override void DrawTrackGlyph(RenderContext context, if (orientation == Orientation.Horizontal) { using var aa = new AntiAlias(context.Graphics); - context.Graphics.FillPolygon(insideBrush, new Point[]{ + context.Graphics.FillPolygon(insideBrush, new[]{ new Point(drawRect.X, drawRect.Bottom - 2), new Point(drawRect.Right - 1, drawRect.Y), new Point(drawRect.Right - 1, drawRect.Bottom - 1), new Point(drawRect.X, drawRect.Bottom - 1), new Point(drawRect.X, drawRect.Bottom - 2)}); - context.Graphics.DrawLines(border1Pen, new Point[]{ + context.Graphics.DrawLines(border1Pen, new[]{ new Point(drawRect.Right - 1, drawRect.Y), new Point(drawRect.Right - 1, drawRect.Bottom - 1), new Point(drawRect.X, drawRect.Bottom - 1), new Point(drawRect.X, drawRect.Bottom - 2), new Point(drawRect.Right - 1, drawRect.Y)}); @@ -3591,12 +3553,12 @@ public override void DrawTrackGlyph(RenderContext context, else { using var aa = new AntiAlias(context.Graphics); - context.Graphics.FillPolygon(insideBrush, new Point[]{ + context.Graphics.FillPolygon(insideBrush, new[]{ new Point(drawRect.X + 1, drawRect.Bottom - 1), new Point(drawRect.Right - 1, drawRect.Y + 1), new Point(drawRect.X, drawRect.Y + 1), new Point(drawRect.X, drawRect.Bottom - 1), new Point(drawRect.X + 1, drawRect.Bottom - 1)}); - context.Graphics.DrawLines(border1Pen, new Point[]{ + context.Graphics.DrawLines(border1Pen, new[]{ new Point(drawRect.Right - 1, drawRect.Y + 1), new Point(drawRect.X, drawRect.Y + 1), new Point(drawRect.X, drawRect.Bottom - 1), new Point(drawRect.X + 1, drawRect.Bottom - 1), new Point(drawRect.Right - 1, drawRect.Y + 1)}); @@ -3657,8 +3619,8 @@ public override void DrawTrackPositionGlyph(RenderContext context, } } - if ((outside != null) - && (border != null) + if ((outside != null) + && (border != null) && (inside != null) ) { @@ -3706,13 +3668,14 @@ private void CreatePositionPathsBoth(Rectangle drawRect, private GraphicsPath CreatePositionPathsBoth(Rectangle drawRect) { var path = new GraphicsPath(); - path.AddLines(new PointF[]{ + path.AddLines([ new PointF(drawRect.X + 0.75f, drawRect.Y), new PointF(drawRect.Right - 1.75f, drawRect.Y), new PointF(drawRect.Right - 1.0f, drawRect.Y + 0.75f), new PointF(drawRect.Right - 1.0f, drawRect.Bottom - 2.0f), new PointF(drawRect.Right - 2.0f, drawRect.Bottom - 1.0f), new PointF(drawRect.X + 1.0f, drawRect.Bottom - 1.0f), new PointF(drawRect.X, drawRect.Bottom - 2.0f), - new PointF(drawRect.X, drawRect.Y + 0.75f), new PointF(drawRect.X + 0.75f, drawRect.Y)}); + new PointF(drawRect.X, drawRect.Y + 0.75f), new PointF(drawRect.X + 0.75f, drawRect.Y) + ]); return path; } @@ -3736,12 +3699,13 @@ private GraphicsPath CreatePositionPathsBottom(Rectangle drawRect) var half = ((float)drawRect.Width / 2) - 0.5f; var path = new GraphicsPath(); - path.AddLines(new PointF[]{ + path.AddLines([ new PointF(drawRect.X + half, drawRect.Y), new PointF(drawRect.Right - 1.0f, drawRect.Y + +half), new PointF(drawRect.Right - 1.0f, drawRect.Bottom - 2.0f), new PointF(drawRect.Right - 2.0f, drawRect.Bottom - 1.0f), new PointF(drawRect.X + 1.0f, drawRect.Bottom - 1.0f), new PointF(drawRect.X, drawRect.Bottom - 2.0f), - new PointF(drawRect.X, drawRect.Y + half), new PointF(drawRect.X + half, drawRect.Y)}); + new PointF(drawRect.X, drawRect.Y + half), new PointF(drawRect.X + half, drawRect.Y) + ]); return path; } @@ -3763,13 +3727,14 @@ private GraphicsPath CreatePositionPathsTop(Rectangle drawRect) var half = ((float)drawRect.Width / 2) - 0.5f; var path = new GraphicsPath(); - path.AddLines(new PointF[]{ + path.AddLines([ new PointF(drawRect.X + 0.75f, drawRect.Y), new PointF(drawRect.Right - 1.75f, drawRect.Y), new PointF(drawRect.Right - 1.0f, drawRect.Y + 0.75f), new PointF(drawRect.Right - 1.0f, drawRect.Bottom - half - 1.0f), new PointF(drawRect.X + half, drawRect.Bottom - 1.0f), new PointF(drawRect.X, drawRect.Bottom - half - 1.0f), new PointF(drawRect.X, drawRect.Y + 0.75f), - new PointF(drawRect.X + 0.75f, drawRect.Y)}); + new PointF(drawRect.X + 0.75f, drawRect.Y) + ]); return path; } @@ -3791,12 +3756,13 @@ private GraphicsPath CreatePositionPathsRight(Rectangle drawRect) var half = ((float)drawRect.Height / 2) - 0.5f; var path = new GraphicsPath(); - path.AddLines(new PointF[]{ + path.AddLines([ new PointF(drawRect.X + 0.75f, drawRect.Y), new PointF(drawRect.Right - half - 1.0f, drawRect.Y), new PointF(drawRect.Right - 1.0f, drawRect.Y + half), new PointF(drawRect.Right - half - 1.0f, drawRect.Bottom - 1.0f), new PointF(drawRect.X + 1.0f, drawRect.Bottom - 1.0f), new PointF(drawRect.X, drawRect.Bottom - 2.0f), - new PointF(drawRect.X, drawRect.Y + 0.75f), new PointF(drawRect.X + 0.75f, drawRect.Y)}); + new PointF(drawRect.X, drawRect.Y + 0.75f), new PointF(drawRect.X + 0.75f, drawRect.Y) + ]); return path; } @@ -3819,13 +3785,14 @@ private GraphicsPath CreatePositionPathsLeft(Rectangle drawRect) var half = ((float)drawRect.Height / 2) - 0.5f; var path = new GraphicsPath(); - path.AddLines(new PointF[]{ + path.AddLines([ new PointF(drawRect.Right - 1.75f, drawRect.Y), new PointF(drawRect.Right - 1.0f, drawRect.Y + 0.75f), new PointF(drawRect.Right - 1.0f, drawRect.Bottom - 2.0f), new PointF(drawRect.Right - 2.0f, drawRect.Bottom - 1.0f), new PointF(drawRect.X + half, drawRect.Bottom - 1.0f), new PointF(drawRect.X, drawRect.Bottom - half - 1.0f), new PointF(drawRect.X + half, drawRect.Y), - new PointF(drawRect.Right - 1.75f, drawRect.Y)}); + new PointF(drawRect.Right - 1.75f, drawRect.Y) + ]); return path; } @@ -3838,7 +3805,6 @@ private static GraphicsPath CreateBorderBackPath(bool forBorder, PaletteDrawBorders borders, int borderWidth, float borderRounding, - bool smoothing, int variant) { var borderPath = new GraphicsPath(); @@ -3847,34 +3813,41 @@ private static GraphicsPath CreateBorderBackPath(bool forBorder, if (rect is { Width: > 0, Height: > 0 }) { // Only use a rounding that will fit inside the rect - var rounding = Math.Min(borderRounding, Math.Min(rect.Width / 2, rect.Height / 2) - borderWidth); + var rounding = Math.Min(borderRounding, Math.Min(rect.Width / 2f, rect.Height / 2f) - borderWidth); // Shrink the rect by half the width of the pen, because the pen will // draw half the distance overlapping each side of the centre anyway. // Unless not drawing into the middle in which case give the outside. - var halfBorderWidthTL = middle ? borderWidth / 2 : 0; + var halfBorderWidth = middle ? borderWidth / 2f : 0f; + + RectangleF rectF = rect; + if (forBorder) // #1757 + { + // Remove the transparency 1/2 pixel around borders + rectF.Inflate(0.5f, 0.5f); + } // Only adjust the edges that are being drawn if (CommonHelper.HasTopBorder(borders)) { - rect.Y += halfBorderWidthTL; - rect.Height -= halfBorderWidthTL; + rectF.Y += halfBorderWidth; + rectF.Height -= halfBorderWidth; } if (CommonHelper.HasLeftBorder(borders)) { - rect.X += halfBorderWidthTL; - rect.Width -= halfBorderWidthTL; + rectF.X += halfBorderWidth; + rectF.Width -= halfBorderWidth; } if (CommonHelper.HasBottomBorder(borders)) { - rect.Height -= halfBorderWidthTL; + rectF.Height -= halfBorderWidth; } if (CommonHelper.HasRightBorder(borders)) { - rect.Width -= halfBorderWidthTL; + rectF.Width -= halfBorderWidth; } // Find the width/height of the arc box @@ -3884,7 +3857,7 @@ private static GraphicsPath CreateBorderBackPath(bool forBorder, // If drawing all the four borders use a single routine if (CommonHelper.HasAllBorders(borders)) { - CreateAllBorderBackPath(middle, borderPath, rect, borderWidth, rounding, forBorder, arcLength, arcLength1); + CreateAllBorderBackPath(middle, borderPath, rectF, borderWidth, rounding, forBorder, arcLength, arcLength1); } else { @@ -3899,12 +3872,12 @@ private static GraphicsPath CreateBorderBackPath(bool forBorder, // because this is going to be used as a region we need to close the path as well. if (rounding > 0) { - CreateBorderBackPathOnlyClosed(middle, borders, borderPath, rect, arcLength, variant); + CreateBorderBackPathOnlyClosed(middle, borders, borderPath, rectF, arcLength, variant); } else { - // Without rounding we just provide the entire area - borderPath.AddRectangle(rect); + // Without rounding, we just provide the entire area + borderPath.AddRectangle(rectF); } } else @@ -3914,11 +3887,11 @@ private static GraphicsPath CreateBorderBackPath(bool forBorder, if (rounding > 0) { - CreateBorderBackPathOnly(middle, borders, borderPath, rect, arcLength, variant); + CreateBorderBackPathOnly(middle, borders, borderPath, rectF, arcLength, variant); } else { - CreateBorderBackPathOnly(borders, borderPath, rect, variant); + CreateBorderBackPathOnly(borders, borderPath, rectF, variant); } } } @@ -3928,12 +3901,12 @@ private static GraphicsPath CreateBorderBackPath(bool forBorder, // If there is rounding we need to calculate a path that honors the rounding at corners if (rounding > 0) { - CreateBorderBackPathComplete(middle, borders, borderPath, rect, arcLength); + CreateBorderBackPathComplete(middle, borders, borderPath, rectF, arcLength); } else { // Without rounding the complete path is always just the entire area - borderPath.AddRectangle(rect); + borderPath.AddRectangle(rectF); } } } @@ -3944,7 +3917,7 @@ private static GraphicsPath CreateBorderBackPath(bool forBorder, private static void CreateAllBorderBackPath(bool middle, GraphicsPath borderPath, - Rectangle rect, + RectangleF rectF, int width, float rounding, bool forBorder, @@ -3954,30 +3927,27 @@ private static void CreateAllBorderBackPath(bool middle, // If there is no room for any rounding effect... if (rounding <= 0) { - // If the width is an odd number then need to reduce by 1 in each dimension + //// If the width is an odd number then need to reduce by 1 in each dimension if (forBorder && middle && ((width % 2) == 1)) { - rect.Width -= 1; - rect.Height -= 1; + rectF.Width--; + rectF.Height--; } // Just add a simple rectangle as a quick way of adding four lines - borderPath.AddRectangle(rect); + borderPath.AddRectangle(rectF); } else { - // We create the path using a floating point rectangle - var rectF = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); - // If trying to get the outside edge then perform some offsetting so that // when converted to a region it draws nicely inside the path outline - if (!middle && ((width % 2) == 1)) - { - rectF.X -= 0.25f; - rectF.Y -= 0.25f; - rectF.Width += 0.75f; - rectF.Height += 0.75f; - } + //if (!middle && ((width % 2) == 1)) + //{ + // rectF.X -= 0.25f; + // rectF.Y -= 0.25f; + // rectF.Width += 0.75f; + // rectF.Height += 0.75f; + //} // The border is made of up a quarter of a circle arc, in each corner borderPath.AddArc(rectF.Left, rectF.Top, arcLength, arcLength, 180f, 90f); @@ -3992,87 +3962,83 @@ private static void CreateAllBorderBackPath(bool middle, private static void CreateBorderBackPathOnly(PaletteDrawBorders borders, GraphicsPath borderPath, - Rectangle rect, + RectangleF rectF, int variant) { - // Reduce the width and height by 1 pixel for drawing into rectangle - rect.Width -= 1; - rect.Height -= 1; - // Add only the border for drawing switch (borders) { case PaletteDrawBorders.None: break; case PaletteDrawBorders.Top: - borderPath.AddLine(rect.Left - 1, rect.Top, rect.Right + 1, rect.Top); + borderPath.AddLine(rectF.Left - 1, rectF.Top, rectF.Right + 1, rectF.Top); break; case PaletteDrawBorders.Bottom: - borderPath.AddLine(rect.Left - 1, rect.Bottom, rect.Right + 1, rect.Bottom); + borderPath.AddLine(rectF.Left - 1, rectF.Bottom, rectF.Right + 1, rectF.Bottom); break; case PaletteDrawBorders.Left: - borderPath.AddLine(rect.Left, rect.Top - 1, rect.Left, rect.Bottom + 1); + borderPath.AddLine(rectF.Left, rectF.Top - 1, rectF.Left, rectF.Bottom + 1); break; case PaletteDrawBorders.Right: - borderPath.AddLine(rect.Right, rect.Top - 1, rect.Right, rect.Bottom + 1); + borderPath.AddLine(rectF.Right, rectF.Top - 1, rectF.Right, rectF.Bottom + 1); break; case PaletteDrawBorders.TopBottom: if (variant == 0) { - borderPath.AddLine(rect.Left - 1, rect.Top, rect.Right + 1, rect.Top); + borderPath.AddLine(rectF.Left - 1, rectF.Bottom, rectF.Right + 1, rectF.Top); } else { - borderPath.AddLine(rect.Left - 1, rect.Bottom, rect.Right + 1, rect.Bottom); + borderPath.AddLine(rectF.Left - 1, rectF.Bottom, rectF.Right + 1, rectF.Bottom); } - break; + case PaletteDrawBorders.LeftRight: if (variant == 0) { - borderPath.AddLine(rect.Left, rect.Top - 1, rect.Left, rect.Bottom + 1); + borderPath.AddLine(rectF.Left, rectF.Top - 1, rectF.Left, rectF.Bottom + 1); } else { - borderPath.AddLine(rect.Right, rect.Top - 1, rect.Right, rect.Bottom + 1); + borderPath.AddLine(rectF.Right, rectF.Top - 1, rectF.Right, rectF.Bottom + 1); } - break; + case PaletteDrawBorders.TopLeft: - borderPath.AddLine(rect.Left, rect.Bottom + 1, rect.Left, rect.Top); - borderPath.AddLine(rect.Left, rect.Top, rect.Right + 1, rect.Top); + borderPath.AddLine(rectF.Left, rectF.Bottom + 1, rectF.Left, rectF.Top); + borderPath.AddLine(rectF.Left, rectF.Top, rectF.Right + 1, rectF.Top); break; case PaletteDrawBorders.TopRight: - borderPath.AddLine(rect.Left, rect.Top, rect.Right, rect.Top); - borderPath.AddLine(rect.Right, rect.Top, rect.Right, rect.Bottom + 1); + borderPath.AddLine(rectF.Left, rectF.Top, rectF.Right, rectF.Top); + borderPath.AddLine(rectF.Right, rectF.Top, rectF.Right, rectF.Bottom + 1); break; case PaletteDrawBorders.BottomRight: - borderPath.AddLine(rect.Right, rect.Top - 1, rect.Right, rect.Bottom); - borderPath.AddLine(rect.Right, rect.Bottom, rect.Left - 1, rect.Bottom); + borderPath.AddLine(rectF.Right, rectF.Top - 1, rectF.Right, rectF.Bottom); + borderPath.AddLine(rectF.Right, rectF.Bottom, rectF.Left - 1, rectF.Bottom); break; case PaletteDrawBorders.BottomLeft: - borderPath.AddLine(rect.Right + 1, rect.Bottom, rect.Left, rect.Bottom); - borderPath.AddLine(rect.Left, rect.Bottom, rect.Left, rect.Top - 1); + borderPath.AddLine(rectF.Right + 1, rectF.Bottom, rectF.Left, rectF.Bottom); + borderPath.AddLine(rectF.Left, rectF.Bottom, rectF.Left, rectF.Top - 1); break; case PaletteDrawBorders.TopBottomLeft: - borderPath.AddLine(rect.Right + 1, rect.Bottom, rect.Left, rect.Bottom); - borderPath.AddLine(rect.Left, rect.Bottom, rect.Left, rect.Top); - borderPath.AddLine(rect.Left, rect.Top, rect.Right + 1, rect.Top); + borderPath.AddLine(rectF.Right + 1, rectF.Bottom, rectF.Left, rectF.Bottom); + borderPath.AddLine(rectF.Left, rectF.Bottom, rectF.Left, rectF.Top); + borderPath.AddLine(rectF.Left, rectF.Top, rectF.Right + 1, rectF.Top); break; case PaletteDrawBorders.TopBottomRight: - borderPath.AddLine(rect.Left - 1, rect.Top, rect.Right, rect.Top); - borderPath.AddLine(rect.Right, rect.Top, rect.Right, rect.Bottom); - borderPath.AddLine(rect.Right, rect.Bottom, rect.Left - 1, rect.Bottom); + borderPath.AddLine(rectF.Left - 1, rectF.Top, rectF.Right, rectF.Top); + borderPath.AddLine(rectF.Right, rectF.Top, rectF.Right, rectF.Bottom); + borderPath.AddLine(rectF.Right, rectF.Bottom, rectF.Left - 1, rectF.Bottom); break; case PaletteDrawBorders.TopLeftRight: - borderPath.AddLine(rect.Left, rect.Bottom + 1, rect.Left, rect.Top); - borderPath.AddLine(rect.Left, rect.Top, rect.Right, rect.Top); - borderPath.AddLine(rect.Right, rect.Top, rect.Right, rect.Bottom + 1); + borderPath.AddLine(rectF.Left, rectF.Bottom + 1, rectF.Left, rectF.Top); + borderPath.AddLine(rectF.Left, rectF.Top, rectF.Right, rectF.Top); + borderPath.AddLine(rectF.Right, rectF.Top, rectF.Right, rectF.Bottom + 1); break; case PaletteDrawBorders.BottomLeftRight: - borderPath.AddLine(rect.Right, rect.Top - 1, rect.Right, rect.Bottom); - borderPath.AddLine(rect.Right, rect.Bottom, rect.Left, rect.Bottom); - borderPath.AddLine(rect.Left, rect.Bottom, rect.Left, rect.Top - 1); + borderPath.AddLine(rectF.Right, rectF.Top - 1, rectF.Right, rectF.Bottom); + borderPath.AddLine(rectF.Right, rectF.Bottom, rectF.Left, rectF.Bottom); + borderPath.AddLine(rectF.Left, rectF.Bottom, rectF.Left, rectF.Top - 1); break; } } @@ -4080,26 +4046,23 @@ private static void CreateBorderBackPathOnly(PaletteDrawBorders borders, private static void CreateBorderBackPathOnly(bool middle, PaletteDrawBorders borders, GraphicsPath borderPath, - Rectangle rect, + RectangleF rectF, float arcLength, int variant) { - // Reduce the width and height by 1 pixel for drawing into rectangle - rect.Width -= 1; - rect.Height -= 1; - - // We create the path using a floating point rectangle - var rectF = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + //// Reduce the width and height by 1 pixel for drawing into rectangle + //rect.Width--; + //rect.Height--; // If trying to get the outside edge then perform some offsetting so that // when converted to a region it draws nicely inside the path outline - if (!middle) - { - rectF.X -= 0.25f; - rectF.Y -= 0.25f; - rectF.Width += 0.75f; - rectF.Height += 0.75f; - } + //if (!middle) + //{ + // rectF.X -= 0.25f; + // rectF.Y -= 0.25f; + // rectF.Width += 0.75f; + // rectF.Height += 0.75f; + //} // Add only the border for drawing switch (borders) @@ -4107,36 +4070,36 @@ private static void CreateBorderBackPathOnly(bool middle, case PaletteDrawBorders.None: break; case PaletteDrawBorders.Top: - borderPath.AddLine(rect.Left - 1, rect.Top, rect.Right + 1, rect.Top); + borderPath.AddLine(rectF.Left - 1, rectF.Top, rectF.Right + 1, rectF.Top); break; case PaletteDrawBorders.Bottom: - borderPath.AddLine(rect.Left - 1, rect.Bottom, rect.Right + 1, rect.Bottom); + borderPath.AddLine(rectF.Left - 1, rectF.Bottom, rectF.Right + 1, rectF.Bottom); break; case PaletteDrawBorders.Left: - borderPath.AddLine(rect.Left, rect.Top - 1, rect.Left, rect.Bottom + 1); + borderPath.AddLine(rectF.Left, rectF.Top - 1, rectF.Left, rectF.Bottom + 1); break; case PaletteDrawBorders.Right: - borderPath.AddLine(rect.Right, rect.Top - 1, rect.Right, rect.Bottom + 1); + borderPath.AddLine(rectF.Right, rectF.Top - 1, rectF.Right, rectF.Bottom + 1); break; case PaletteDrawBorders.TopBottom: if (variant == 0) { - borderPath.AddLine(rect.Left - 1, rect.Top, rect.Right + 1, rect.Top); + borderPath.AddLine(rectF.Left - 1, rectF.Top, rectF.Right + 1, rectF.Top); } else { - borderPath.AddLine(rect.Left - 1, rect.Bottom, rect.Right + 1, rect.Bottom); + borderPath.AddLine(rectF.Left - 1, rectF.Bottom, rectF.Right + 1, rectF.Bottom); } break; case PaletteDrawBorders.LeftRight: if (variant == 0) { - borderPath.AddLine(rect.Left, rect.Top - 1, rect.Left, rect.Bottom + 1); + borderPath.AddLine(rectF.Left, rectF.Top - 1, rectF.Left, rectF.Bottom + 1); } else { - borderPath.AddLine(rect.Right, rect.Top - 1, rect.Right, rect.Bottom + 1); + borderPath.AddLine(rectF.Right, rectF.Top - 1, rectF.Right, rectF.Bottom + 1); } break; @@ -4190,26 +4153,19 @@ private static void CreateBorderBackPathOnly(bool middle, private static void CreateBorderBackPathOnlyClosed(bool middle, PaletteDrawBorders borders, GraphicsPath borderPath, - Rectangle rect, + RectangleF rectF, float arcLength, int variant) { - // Reduce the width and height by 1 pixel for drawing into rectangle - rect.Width--; - rect.Height--; - - // We create the path using a floating point rectangle - var rectF = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); - // If trying to get the outside edge then perform some offsetting so that // when converted to a region it draws nicely inside the path outline - if (!middle) - { - rectF.X -= 0.25f; - rectF.Y -= 0.25f; - rectF.Width += 0.75f; - rectF.Height += 0.75f; - } + //if (!middle) + //{ + // rectF.X -= 0.25f; + // rectF.Y -= 0.25f; + // rectF.Width += 0.75f; + // rectF.Height += 0.75f; + //} // Add only the border for drawing switch (borders) @@ -4223,9 +4179,9 @@ private static void CreateBorderBackPathOnlyClosed(bool middle, case PaletteDrawBorders.TopBottom: case PaletteDrawBorders.LeftRight: // When using the entire rectangle we do not need to adjust its size - rect.Width++; - rect.Height++; - borderPath.AddRectangle(rect); + rectF.Width++; + rectF.Height++; + borderPath.AddRectangle(rectF); break; case PaletteDrawBorders.TopLeft: borderPath.AddLine(rectF.Left, rectF.Bottom + 1, rectF.Left, rectF.Top + arcLength); @@ -4281,21 +4237,18 @@ private static void CreateBorderBackPathOnlyClosed(bool middle, private static void CreateBorderBackPathComplete(bool middle, PaletteDrawBorders borders, GraphicsPath borderPath, - Rectangle rect, + RectangleF rectF, float arcLength) { - // We create the path using a floating point rectangle - var rectF = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); - // If trying to get the outside edge then perform some offsetting so that // when converted to a region it draws nicely inside the path outline - if (!middle) - { - rectF.X -= 0.25f; - rectF.Y -= 0.25f; - rectF.Width += 0.75f; - rectF.Height += 0.75f; - } + //if (!middle) + //{ + // rectF.X -= 0.25f; + // rectF.Y -= 0.25f; + // rectF.Width += 0.75f; + // rectF.Height += 0.75f; + //} // Define area that covers the border and the inside switch (borders) { @@ -4307,7 +4260,7 @@ private static void CreateBorderBackPathComplete(bool middle, case PaletteDrawBorders.TopBottom: case PaletteDrawBorders.LeftRight: // Just add a simple rectangle as a quick way of adding four lines - borderPath.AddRectangle(rect); + borderPath.AddRectangle(rectF); break; case PaletteDrawBorders.TopLeft: borderPath.AddLine(rectF.Left, rectF.Bottom, rectF.Left, rectF.Top + arcLength); @@ -4391,8 +4344,7 @@ private static GraphicsPath CreateTabBorderBackPath(RightToLeft rtl, Rectangle rect, int borderWidth, TabBorderStyle tabBorderStyle, - VisualOrientation orientation, - bool smoothing) + VisualOrientation orientation) { var borderPath = new GraphicsPath(); @@ -4550,6 +4502,7 @@ private static void CreateTabBorderPath(bool rtl, default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(tabBorderStyle.ToString()); break; } } @@ -5063,7 +5016,7 @@ private static void AddSmoothPath(GraphicsPath borderPath, var x2T = rect.Width / 2; var x6T = rect.Width / 6; - borderPath.AddCurve(new Point[]{ + borderPath.AddCurve(new[]{ new Point(rect.Left, rect.Bottom), new Point(rect.Left + indentW, rect.Top + 5), new Point(rect.Left + x6T, rect.Top + 2), new Point(rect.Left + x2T, rect.Top), new Point(rect.Right - x6T, rect.Top + 2), new Point(rect.Right - indentW, rect.Top + 5), @@ -5087,7 +5040,7 @@ private static void AddSmoothPath(GraphicsPath borderPath, var x2B = rect.Width / 2; var x6B = rect.Width / 6; - borderPath.AddCurve(new Point[]{ + borderPath.AddCurve(new[]{ new Point(rect.Left, rect.Top), new Point(rect.Left + indentW, rect.Bottom - 5), new Point(rect.Left + x6B, rect.Bottom - 2), new Point(rect.Left + x2B, rect.Bottom), new Point(rect.Right - x6B, rect.Bottom - 2), @@ -5111,7 +5064,7 @@ private static void AddSmoothPath(GraphicsPath borderPath, var y2L = rect.Height / 2; var y6L = rect.Height / 6; - borderPath.AddCurve(new Point[]{ + borderPath.AddCurve(new[]{ new Point(rect.Right, rect.Bottom), new Point(rect.Left + 5, rect.Bottom - indentH), new Point(rect.Left + 2, rect.Bottom - y6L), new Point(rect.Left, rect.Bottom - y2L), new Point(rect.Left + 2, rect.Top + y6L), new Point(rect.Left + 5, rect.Top + indentH), @@ -5135,7 +5088,7 @@ private static void AddSmoothPath(GraphicsPath borderPath, var y2R = rect.Height / 2; var y6R = rect.Height / 6; - borderPath.AddCurve(new Point[]{ + borderPath.AddCurve(new[]{ new Point(rect.Left, rect.Bottom), new Point(rect.Right - 5, rect.Bottom - indentH), new Point(rect.Right - 2, rect.Bottom - y6R), new Point(rect.Right, rect.Bottom - y2R), new Point(rect.Right - 2, rect.Top + y6R), new Point(rect.Right - 5, rect.Top + indentH), @@ -5247,8 +5200,7 @@ private static Brush CreateColorBrush(Rectangle rect, } private static Brush CreateImageBrush(Rectangle rect, - [DisallowNull] Image image, - PaletteImageStyle imageStyle) + [DisallowNull] Image image, PaletteImageStyle imageStyle) { // Create brush based on the provided image var brush = new TextureBrush(image); @@ -5334,24 +5286,8 @@ private void DrawBackSolidInside(RenderContext context, RectangleF rectF = path.GetBounds(); // Convert to a pixel aligned rectangle - Rectangle rect; - // Do we have any non-integer numbers to convert - if ((Math.Round(rectF.X) != rectF.X) || - (Math.Round(rectF.Y) != rectF.Y) || - (Math.Round(rectF.Width) != rectF.Width) || - (Math.Round(rectF.Height) != rectF.Height)) - { - var x = (int)Math.Round(rectF.X); - var y = (int)Math.Round(rectF.Y); - var width = (int)Math.Round(rectF.Width + 1 + (rectF.X - x)); - var height = (int)Math.Round(rectF.Height + 1 + (rectF.Y - y)); - rect = new Rectangle(x, y, width, height); - } - else - { - rect = new Rectangle((int)rectF.X, (int)rectF.Y, (int)rectF.Width, (int)rectF.Height); - } + var rect = new Rectangle((int)rectF.X, (int)rectF.Y, (int)Math.Ceiling(rectF.Width), (int)Math.Ceiling(rectF.Height)); using Brush backBrush1 = CreateColorBrush(gradientRect, backColor1, backColor1, PaletteColorStyle.Solid, 0f, VisualOrientation.Top), backBrush2 = CreateColorBrush(gradientRect, backColor2, backColor2, PaletteColorStyle.Solid, 0f, VisualOrientation.Top); @@ -5388,7 +5324,7 @@ private void DrawBackOneNote(RenderContext context, } // Make a copy of the original path, so we can change it - GraphicsPath insetPath = (GraphicsPath)path.Clone(); + var insetPath = (GraphicsPath)path.Clone(); // Offset by 1.5 pixels so the background shows around two of // the edges of the background we are about to draw @@ -5409,15 +5345,13 @@ private void DrawBackOneNote(RenderContext context, using (var clip = new Clipping(context.Graphics, path)) { // Draw the second color as the offset background - using (var backBrush = CreateColorBrush(gradientRect, - backColor2, - backColor2, - backColorStyle, - backColorAngle, - orientation)) - { - context.Graphics.FillPath(backBrush, insetPath); - } + using Brush backBrush = CreateColorBrush(gradientRect, + backColor2, + backColor2, + backColorStyle, + backColorAngle, + orientation); + context.Graphics.FillPath(backBrush, insetPath); } // Dispose of created resources @@ -5488,7 +5422,7 @@ private void DrawBackRoundedTopLeftWhite(RenderContext context, rect.X++; rect.Y++; - // Size is smaller in both directions because of off-seting + // Size is smaller in both directions because of off-setting rect.Width--; rect.Height--; @@ -5539,15 +5473,13 @@ private void DrawBackRoundedTopLight(RenderContext context, } // Draw the second color as the offset background - using (Brush backBrush = CreateColorBrush(gradientRect, - backColor1, - backColor2, - PaletteColorStyle.Rounded, - backColorAngle, - orientation)) - { - context.Graphics.FillRectangle(backBrush, rect); - } + using Brush backBrush = CreateColorBrush(gradientRect, + backColor1, + backColor2, + PaletteColorStyle.Rounded, + backColorAngle, + orientation); + context.Graphics.FillRectangle(backBrush, rect); } private void DrawBackRounded4(RenderContext context, @@ -5562,7 +5494,7 @@ private void DrawBackRounded4(RenderContext context, { using var clip = new Clipping(context.Graphics, path); // Use standard helper routine to create appropriate color brush - using (var backBrush = CreateColorBrush(gradientRect, backColor1, backColor2, + using (Brush backBrush = CreateColorBrush(gradientRect, backColor1, backColor2, backColorStyle, backColorAngle, orientation)) { context.Graphics.FillPath(backBrush, path); @@ -5599,13 +5531,13 @@ private void DrawBackRounding5(RenderContext context, VisualOrientation orientation, GraphicsPath path) { - // We want to ignore the ourside pixel edge, so inflate inwards + // We want to ignore the outside pixel edge, so inflate inwards rect.Inflate(-1, -1); - // Prevent drawing over that ourside edge + // Prevent drawing over that outside edge using var clip = new Clipping(context.Graphics, rect); // Use standard helper routine to create appropriate color brush - using var backBrush = CreateColorBrush(gradientRect, backColor1, backColor2, + using Brush backBrush = CreateColorBrush(gradientRect, backColor1, backColor2, PaletteColorStyle.Rounding5, backColorAngle, orientation); context.Graphics.FillPath(backBrush, path); @@ -5621,10 +5553,10 @@ private void DrawBackLinearShadow(RenderContext context, VisualOrientation orientation, GraphicsPath path) { - // Prevent drawing over that ourside edge + // Prevent drawing over that outside edge using var clip = new Clipping(context.Graphics, rect); // Use standard helper routine to create appropriate color brush - using (var backBrush = CreateColorBrush(gradientRect, backColor1, backColor2, + using (Brush backBrush = CreateColorBrush(gradientRect, backColor1, backColor2, PaletteColorStyle.Linear, backColorAngle, orientation)) { @@ -5632,13 +5564,11 @@ private void DrawBackLinearShadow(RenderContext context, } // Use path gradient to give the outside of the area a shadow effect - using (var borderBrush = new PathGradientBrush(path)) - { - borderBrush.Blend = _linearShadowBlend; - borderBrush.CenterColor = backColor1; - borderBrush.SurroundColors = new[] { backColor2 }; - context.Graphics.FillPath(borderBrush, path); - } + using var borderBrush = new PathGradientBrush(path); + borderBrush.Blend = _linearShadowBlend; + borderBrush.CenterColor = backColor1; + borderBrush.SurroundColors = [backColor2]; + context.Graphics.FillPath(borderBrush, path); } #endregion @@ -5666,8 +5596,8 @@ private static Padding ContentPaddingForButtonForm(Padding original, return original; } - private static Font ContentFontForButtonForm(ViewLayoutContext context, - Font font) + private static Font? ContentFontForButtonForm(ViewLayoutContext context, + Font? font) { // Get the krypton form that contains this control KryptonForm? kryptonForm = OwningKryptonForm(context.TopControl); @@ -5682,7 +5612,7 @@ private static Font ContentFontForButtonForm(ViewLayoutContext context, var fontSpace = chromeBorders.Top - 6; // If not enough room for the font then create a new smaller font - if ((font.Height > fontSpace) && (fontSpace > 5)) + if ((font!.Height > fontSpace) && (fontSpace > 5)) { // Find the point size from the pixel height required var point = 72 / context.Graphics.DpiY * (fontSpace / 1.333f); @@ -5710,7 +5640,7 @@ private static Font ContentFontForButtonForm(ViewLayoutContext context, } private static void AllocateImageSpace([DisallowNull] StandardContentMemento memento, - [DisallowNull] IPaletteContent? paletteContent, + [DisallowNull] IPaletteContent paletteContent, [DisallowNull] IContentValues contentValues, PaletteState state, [DisallowNull] Rectangle displayRect, @@ -5729,6 +5659,14 @@ private static void AllocateImageSpace([DisallowNull] StandardContentMemento mem { try { + if ((displayRect.Width < 0) + || (displayRect.Height < 0) + ) + { + // Target area is not valid + memento.DrawImage = false; + return; + } // Check for enough space to show all of the image if ((displayRect.Width < memento.Image.Width) || (displayRect.Height < memento.Image.Height) @@ -5741,24 +5679,33 @@ private static void AllocateImageSpace([DisallowNull] StandardContentMemento mem displayRect.Height * ratio); } - // Cache the size of the image - memento.ImageRect.Size = memento.Image.Size; + if (memento.Image != null) + { + // Cache the size of the image + memento.ImageRect.Size = memento.Image.Size; - // Convert from alignment enums to integers - var alignHIndex = RightToLeftIndex(rtl, paletteContent.GetContentImageH(state)); - var alignVIndex = (int)paletteContent.GetContentImageV(state); + // Convert from alignment enums to integers + var alignHIndex = RightToLeftIndex(rtl, paletteContent.GetContentImageH(state)); + var alignVIndex = (int)paletteContent.GetContentImageV(state); - // Bump the allocated space in the destination grid cell - allocation[alignHIndex, alignVIndex].Width += memento.ImageRect.Width; - allocation[alignHIndex, alignVIndex].Height += memento.ImageRect.Height; + // Bump the allocated space in the destination grid cell + allocation[alignHIndex, alignVIndex].Width += memento.ImageRect.Width; + allocation[alignHIndex, alignVIndex].Height += memento.ImageRect.Height; - // Yes, we do want to draw the image/icon - memento.DrawImage = true; + // Yes, we do want to draw the image/icon + memento.DrawImage = true; + } + else + { + // Image is not valid, so do not use it! + //memento.Image = null; + memento.DrawImage = false; + } } catch { // Image is not valid, so do not use it! - memento.Image = null; + //memento.Image = null; memento.DrawImage = false; } } @@ -5766,16 +5713,14 @@ private static void AllocateImageSpace([DisallowNull] StandardContentMemento mem private static void AllocateShortTextSpace(ViewLayoutContext context, [DisallowNull] Graphics g, - StandardContentMemento memento, - [DisallowNull] IPaletteContent? paletteContent, - IContentValues contentValues, - PaletteState state, - Rectangle displayRect, - RightToLeft rtl, - int spacingGap, - ref Size[,] allocation, - bool composition, - bool glowing) + StandardContentMemento memento, + [DisallowNull] IPaletteContent paletteContent, + IContentValues contentValues, + PaletteState state, + Rectangle displayRect, + RightToLeft rtl, + int spacingGap, + ref Size[,] allocation) { // By default, we cannot draw the text memento.DrawShortText = false; @@ -5807,12 +5752,12 @@ private static void AllocateShortTextSpace(ViewLayoutContext context, memento.ShortTextTrimming = paletteContent.GetContentShortTextTrim(state); var fontChanged = false; - Font textFont = paletteContent.GetContentShortTextFont(state); + Font? textFont = paletteContent.GetContentShortTextFont(state); // Get the appropriate font to use in the caption area if (paletteContent.GetContentStyle() == PaletteContentStyle.HeaderForm) { - Font captionFont = ContentFontForButtonForm(context, textFont); + Font? captionFont = ContentFontForButtonForm(context, textFont); fontChanged = captionFont != textFont; textFont = captionFont; } @@ -5821,13 +5766,11 @@ private static void AllocateShortTextSpace(ViewLayoutContext context, memento.ShortTextMemento = AccurateText.MeasureString(g, rtl, shortText, - textFont, + textFont!, memento.ShortTextTrimming, paletteContent.GetContentShortTextMultiLineH(state), paletteContent.GetContentShortTextPrefix(state), memento.ShortTextHint, - composition, - glowing, fontChanged); // Space required for short text starts with the text width itself @@ -5854,15 +5797,13 @@ private static void AllocateShortTextSpace(ViewLayoutContext context, private static void AllocateLongTextSpace(ViewLayoutContext context, Graphics? g, [DisallowNull] StandardContentMemento memento, - [DisallowNull] IPaletteContent? paletteContent, + [DisallowNull] IPaletteContent paletteContent, IContentValues contentValues, PaletteState state, Rectangle displayRect, RightToLeft rtl, int spacingGap, - ref Size[,] allocation, - bool composition, - bool glowing) + ref Size[,] allocation) { // By default, we cannot draw the text memento.DrawLongText = false; @@ -5891,27 +5832,25 @@ private static void AllocateLongTextSpace(ViewLayoutContext context, memento.LongTextTrimming = paletteContent.GetContentLongTextTrim(state); var fontChanged = false; - Font textFont = paletteContent.GetContentLongTextFont(state); + Font? textFont = paletteContent.GetContentLongTextFont(state); // Get the appropriate font to use in the caption area if (paletteContent.GetContentStyle() == PaletteContentStyle.HeaderForm) { - Font captionFont = ContentFontForButtonForm(context, textFont); + Font? captionFont = ContentFontForButtonForm(context, textFont); fontChanged = captionFont != textFont; textFont = captionFont; } // Get a pixel accurate measure of text drawing space needed - memento.LongTextMemento = AccurateText.MeasureString(g, + memento.LongTextMemento = AccurateText.MeasureString(g!, rtl, longText, - textFont, + textFont!, memento.LongTextTrimming, paletteContent.GetContentLongTextMultiLineH(state), paletteContent.GetContentLongTextPrefix(state), memento.LongTextHint, - composition, - glowing, fontChanged); // Space required for long text starts with the text width itself @@ -5999,7 +5938,7 @@ private static int AllocatedTotalHeight(Size[,] allocation) private static int[] AllocatedColumnWidths(Size[,] allocation, int rowIndex) { - int[] colWidths = { 0, 0, 0 }; + int[] colWidths = [0, 0, 0]; for (var col = 0; col < 3; col++) { @@ -6029,7 +5968,7 @@ private static int[] AllocatedColumnWidths(Size[,] allocation, int rowIndex) private static int[] AllocatedRowHeights(Size[,] allocation) { - int[] rowHeights = { 0, 0, 0 }; + int[] rowHeights = [0, 0, 0]; for (var row = 0; row < 3; row++) { @@ -6264,7 +6203,7 @@ private static Point PositionCellContent(RightToLeft rtl, int spacingGap, ref Rectangle cellRect) { - Point location = Point.Empty; + var location = Point.Empty; // If drawing from right to left... if (rtl == RightToLeft.Yes) @@ -6406,8 +6345,7 @@ private RadioButtonState DiscoverRadioButtonState(bool enabled, } } - private void MeasureDragDockingSquares(RenderDragDockingData dragData, - IPaletteDragDrop dragDropPalette) + private void MeasureDragDockingSquares(RenderDragDockingData dragData) { dragData.DockWindowSize = new Size(88, 88); @@ -6428,8 +6366,7 @@ private void MeasureDragDockingSquares(RenderDragDockingData dragData, } } - private void MeasureDragDockingRounded(RenderDragDockingData dragData, - IPaletteDragDrop dragDropPalette) + private void MeasureDragDockingRounded(RenderDragDockingData dragData) { dragData.DockWindowSize = new Size(103, 103); dragData.RectLeft = new Rectangle(0, 36, 32, 31); @@ -6530,8 +6467,8 @@ private void DrawDragDockingRoundedMiddle(RenderContext context, Color borderColor = dragData.ActiveMiddle ? active : border; Color insideColor = dragData.ActiveMiddle ? active : inside; using var aa = new AntiAlias(context.Graphics); - using GraphicsPath borderPath = new GraphicsPath(), - insidePath = new GraphicsPath(); + using var borderPath = new GraphicsPath(); + using var insidePath = new GraphicsPath(); // Generate the graphics paths for the border and the inside area which is just inside the border Rectangle rect = dragData.RectMiddle; var rectInside = new Rectangle(rect.X + 2, rect.Y + 2, rect.Width - 4, rect.Height - 4); @@ -6565,7 +6502,7 @@ private void DrawDragDockingRoundedMiddle(RenderContext context, } } - private void DrawDragDockingMiddleLines(GraphicsPath path, Rectangle rect, int tabExtend) => path.AddLines(new Point[] { + private void DrawDragDockingMiddleLines(GraphicsPath path, Rectangle rect, int tabExtend) => path.AddLines(new[] { new Point(rect.X, rect.Bottom - 2), new Point(rect.X, rect.Y + 1), new Point(rect.X + 1, rect.Y), new Point(rect.Right - 1, rect.Y), new Point(rect.Right, rect.Y + 1), new Point(rect.Right, rect.Bottom - 6), new Point(rect.Right - 2, rect.Bottom - 4), @@ -6579,13 +6516,13 @@ private void DrawDragDockingRoundedRect(RenderContext context, Rectangle drawRect, int rounding) { - using var aa = new AntiAlias(context.Graphics); + using var gh = new GraphicsHint(context.Graphics, PaletteGraphicsHint.HighSpeed); var rectBoundsF = new RectangleF(drawRect.X - 1, drawRect.Y - 1, drawRect.Width + 2, drawRect.Height + 1); var rectInside = new Rectangle(drawRect.X + 2, drawRect.Y + 2, drawRect.Width - 4, drawRect.Height - 4); - using GraphicsPath borderPath = CreateBorderBackPath(true, true, drawRect, PaletteDrawBorders.All, 1, rounding, true, 0), - insidePath = CreateBorderBackPath(true, true, rectInside, PaletteDrawBorders.All, 1, rounding - 1, true, 0); + using GraphicsPath borderPath = CreateBorderBackPath(true, true, drawRect, PaletteDrawBorders.All, 1, rounding, 0), + insidePath = CreateBorderBackPath(true, true, rectInside, PaletteDrawBorders.All, 1, rounding - 1, 0); using (var borderBrush = new SolidBrush(Color.FromArgb(196, Color.White))) { context.Graphics.FillPath(borderBrush, borderPath); @@ -6618,7 +6555,7 @@ private void DrawDragDockingArrow(RenderContext context, rect.Y + ((rect.Height - DRAG_ARROW_WIDTH) / 2), DRAG_ARROW_HEIGHT, DRAG_ARROW_WIDTH); - innerPath.AddLines(new Point[] { + innerPath.AddLines(new[] { new Point(rect.X + 1, rect.Top + 6), new Point(rect.Right - 1, rect.Top + 1), new Point(rect.Right - 1, rect.Bottom - 2)}); break; @@ -6627,7 +6564,7 @@ private void DrawDragDockingArrow(RenderContext context, rect.Y + ((rect.Height - DRAG_ARROW_WIDTH) / 2), DRAG_ARROW_HEIGHT, DRAG_ARROW_WIDTH); - innerPath.AddLines(new Point[] { + innerPath.AddLines(new[] { new Point(rect.X + 1, rect.Top + 1), new Point(rect.X + 1, rect.Bottom - 2), new Point(rect.Right - 1, rect.Top + 6) }); angle = 180f; @@ -6637,7 +6574,7 @@ private void DrawDragDockingArrow(RenderContext context, rect.Bottom - DRAG_ARROW_HEIGHT - DRAG_ARROW_GAP - 1, DRAG_ARROW_WIDTH, DRAG_ARROW_HEIGHT); - innerPath.AddLines(new Point[] { + innerPath.AddLines(new[] { new Point(rect.X + 1, rect.Bottom), new Point(rect.Right - 1, rect.Bottom), new Point(rect.X + 6, rect.Top + 1) }); angle = 90f; @@ -6647,7 +6584,7 @@ private void DrawDragDockingArrow(RenderContext context, rect.Top + DRAG_ARROW_GAP, DRAG_ARROW_WIDTH, DRAG_ARROW_HEIGHT); - innerPath.AddLines(new Point[] { + innerPath.AddLines(new[] { new Point(rect.X + 2, rect.Top + 1), new Point(rect.Right - 2, rect.Top + 1), new Point(rect.X + 6, rect.Bottom - 1) }); angle = 270f; @@ -6719,44 +6656,45 @@ private void DrawDragDockingSquaresBackground(Graphics? g, throw new ArgumentNullException(nameof(dragData)); } - var start = Color.FromArgb(190, 190, 190); + Color start = Color.FromArgb(190, 190, 190); using var borderPen = new Pen(border); using var insideBrush = new SolidBrush(inside); - using LinearGradientBrush gradientLL = - new LinearGradientBrush(new Rectangle(-1, -1, 5, 5), start, inside, 0f), - gradientTL = new LinearGradientBrush(new Rectangle(-1, 23, 5, 5), start, inside, 90f), - gradientCC = new LinearGradientBrush(new Rectangle(24, 25, 5, 5), start, inside, 45f), - gradientLT = new LinearGradientBrush(new Rectangle(28, -1, 5, 5), start, inside, 0f), - gradientML = new LinearGradientBrush(new Rectangle(22, -1, 5, 5), start, inside, 0f), - gradientMT = new LinearGradientBrush(new Rectangle(-1, 22, 5, 5), start, inside, 90f), - gradientTT = new LinearGradientBrush(new Rectangle(-1, -1, 5, 5), start, inside, 90f); + using var gradientLL = new LinearGradientBrush(new Rectangle(-1, -1, 5, 5), start, inside, 0f); + using var gradientTL = new LinearGradientBrush(new Rectangle(-1, 23, 5, 5), start, inside, 90f); + using var gradientCC = new LinearGradientBrush(new Rectangle(24, 25, 5, 5), start, inside, 45f); + using var gradientLT = new LinearGradientBrush(new Rectangle(28, -1, 5, 5), start, inside, 0f); + using var gradientML = new LinearGradientBrush(new Rectangle(22, -1, 5, 5), start, inside, 0f); + using var gradientMT = new LinearGradientBrush(new Rectangle(-1, 22, 5, 5), start, inside, 90f); + using var gradientTT = new LinearGradientBrush(new Rectangle(-1, -1, 5, 5), start, inside, 90f); // Draw all the background cross? if (dragData.ShowBack) { // Create points for a polygon - Point[] pts = { + Point[] pts = + [ new Point(0, 29), new Point(23, 29), new Point(29, 23), new Point(29, 0), new Point(57, 0), new Point(57, 23), new Point(63, 29), new Point(87, 29), new Point(87, 57), new Point(63, 57), new Point(57, 63), new Point(57, 87), new Point(29, 87), new Point(29, 63), new Point(23, 57), - new Point(0, 57)}; + new Point(0, 57) + ]; // Fill this area with a solid colour g.FillPolygon(insideBrush, pts); // Draw shadow at some of the box edges - g.FillPolygon(gradientLL, new Point[] { new Point(1, 57), new Point(1, 30), new Point(4, 33), + g.FillPolygon(gradientLL, new[] { new Point(1, 57), new Point(1, 30), new Point(4, 33), new Point(4, 57) }); - g.FillPolygon(gradientTL, new Point[] { new Point(1, 30), new Point(25, 30), new Point(27, 33), + g.FillPolygon(gradientTL, new[] { new Point(1, 30), new Point(25, 30), new Point(27, 33), new Point(3, 33) }); - g.FillPolygon(gradientCC, new Point[] { new Point(23, 30), new Point(30, 23), new Point(33, 26), + g.FillPolygon(gradientCC, new[] { new Point(23, 30), new Point(30, 23), new Point(33, 26), new Point(26, 33) }); - g.FillPolygon(gradientLT, new Point[] { new Point(30, 1), new Point(30, 24), new Point(33, 26), + g.FillPolygon(gradientLT, new[] { new Point(30, 1), new Point(30, 24), new Point(33, 26), new Point(33, 4) }); - g.FillPolygon(gradientTT, new Point[] { new Point(30, 1), new Point(57, 1), new Point(57, 4), + g.FillPolygon(gradientTT, new[] { new Point(30, 1), new Point(57, 1), new Point(57, 4), new Point(33, 4) }); - g.FillPolygon(gradientLT, new Point[] { new Point(30, 63), new Point(30, 87), new Point(33, 87), + g.FillPolygon(gradientLT, new[] { new Point(30, 63), new Point(30, 87), new Point(33, 87), new Point(33, 66) }); - g.FillPolygon(gradientTL, new Point[] { new Point(63, 30), new Point(87, 30), new Point(87, 33), + g.FillPolygon(gradientTL, new[] { new Point(63, 30), new Point(87, 30), new Point(87, 33), new Point(66, 33) }); // Draw outline in darker colour @@ -6765,24 +6703,26 @@ private void DrawDragDockingSquaresBackground(Graphics? g, else if (dragData is { ShowLeft: true, ShowRight: true }) { // Create points for a polygon - Point[] pts = { + Point[] pts = + [ new Point(0, 29), new Point(23, 29), new Point(29, 23), new Point(57, 23), new Point(63, 29), new Point(87, 29), new Point(87, 57), new Point(63, 57), new Point(57, 63), new Point(29, 63), - new Point(23, 57), new Point(0, 57)}; + new Point(23, 57), new Point(0, 57) + ]; // Fill this area with a solid colour g.FillPolygon(insideBrush, pts); // Draw shadow at some of the box edges - g.FillPolygon(gradientLL, new Point[] { new Point(1, 57), new Point(1, 30), new Point(4, 33), + g.FillPolygon(gradientLL, new[] { new Point(1, 57), new Point(1, 30), new Point(4, 33), new Point(4, 57) }); - g.FillPolygon(gradientTL, new Point[] { new Point(1, 30), new Point(25, 30), new Point(27, 33), + g.FillPolygon(gradientTL, new[] { new Point(1, 30), new Point(25, 30), new Point(27, 33), new Point(3, 33) }); - g.FillPolygon(gradientCC, new Point[] { new Point(23, 30), new Point(30, 23), new Point(33, 26), + g.FillPolygon(gradientCC, new[] { new Point(23, 30), new Point(30, 23), new Point(33, 26), new Point(26, 33) }); - g.FillPolygon(gradientMT, new Point[] { new Point(30, 24), new Point(57, 24), new Point(60, 27), + g.FillPolygon(gradientMT, new[] { new Point(30, 24), new Point(57, 24), new Point(60, 27), new Point(33, 27) }); - g.FillPolygon(gradientTL, new Point[] { new Point(63, 30), new Point(87, 30), new Point(87, 33), + g.FillPolygon(gradientTL, new[] { new Point(63, 30), new Point(87, 30), new Point(87, 33), new Point(66, 33) }); // Draw outline in darker colour @@ -6803,23 +6743,25 @@ private void DrawDragDockingSquaresBackground(Graphics? g, else if (dragData is { ShowTop: true, ShowBottom: true }) { // Create points for a polygon - Point[] pts = { + Point[] pts = + [ new Point(23, 29), new Point(29, 23), new Point(29, 0), new Point(57, 0), new Point(57, 23), new Point(63, 29), new Point(63, 57), new Point(57, 63), new Point(57, 87), new Point(29, 87), - new Point(29, 63), new Point(23, 57)}; + new Point(29, 63), new Point(23, 57) + ]; // Fill this area with a solid colour g.FillPolygon(insideBrush, pts); - g.FillPolygon(gradientLT, new Point[] { new Point(30, 1), new Point(30, 24), new Point(33, 26), + g.FillPolygon(gradientLT, new[] { new Point(30, 1), new Point(30, 24), new Point(33, 26), new Point(33, 4) }); - g.FillPolygon(gradientTT, new Point[] { new Point(30, 1), new Point(57, 1), new Point(57, 4), + g.FillPolygon(gradientTT, new[] { new Point(30, 1), new Point(57, 1), new Point(57, 4), new Point(33, 4) }); - g.FillPolygon(gradientCC, new Point[] { new Point(23, 30), new Point(30, 23), new Point(33, 26), + g.FillPolygon(gradientCC, new[] { new Point(23, 30), new Point(30, 23), new Point(33, 26), new Point(26, 33) }); - g.FillPolygon(gradientML, new Point[] { new Point(24, 57), new Point(24, 30), new Point(27, 33), + g.FillPolygon(gradientML, new[] { new Point(24, 57), new Point(24, 30), new Point(27, 33), new Point(27, 60) }); - g.FillPolygon(gradientLT, new Point[] { new Point(30, 63), new Point(30, 87), new Point(33, 87), + g.FillPolygon(gradientLT, new[] { new Point(30, 63), new Point(30, 87), new Point(33, 87), new Point(33, 66) }); // Draw outline in darker colour @@ -6840,9 +6782,11 @@ private void DrawDragDockingSquaresBackground(Graphics? g, else if (dragData.ShowMiddle) { // Only draw the background for the middle square - Point[] pts = { + Point[] pts = + [ new Point(23, 29), new Point(29, 23), new Point(57, 23), new Point(63, 29), new Point(63, 57), - new Point(57, 63), new Point(29, 63), new Point(23, 57)}; + new Point(57, 63), new Point(29, 63), new Point(23, 57) + ]; g.FillPolygon(insideBrush, pts); g.DrawPolygon(borderPen, pts); @@ -6862,19 +6806,18 @@ private void DrawDragDockingSquaresLeft(Graphics? g, Color borderColour = ControlPaint.Dark(activeColor); // Draw border around the window square - using Pen borderPen = new Pen(borderColour), - dashPen = new Pen(borderColour), - shadow1Pen = new Pen(_190), - shadow2Pen = new Pen(_218); + using var borderPen = new Pen(borderColour); + using var dashPen = new Pen(borderColour); + using var shadow1Pen = new Pen(_190); + using var shadow2Pen = new Pen(_218); // Draw the caption area at top of window - using LinearGradientBrush middleBrush = - new LinearGradientBrush(new Rectangle(4, 33, 23, 1), ControlPaint.LightLight(inactiveColor), - activeColor, 0f), - bottomBrush = new LinearGradientBrush(new Rectangle(4, 34, 23, 1), ControlPaint.Light(activeColor), - activeColor, 0f), - positionBrush = new LinearGradientBrush(new Rectangle(4, 35, 11, 1), Color.FromArgb(160, inactiveColor), - Color.FromArgb(64, inactiveColor), 0f), - arrowBrush = new LinearGradientBrush(new Rectangle(18, 40, 5, 8), borderColour, + using var middleBrush = new LinearGradientBrush(new Rectangle(4, 33, 23, 1), ControlPaint.LightLight(inactiveColor), + activeColor, 0f); + using var bottomBrush = new LinearGradientBrush(new Rectangle(4, 34, 23, 1), ControlPaint.Light(activeColor), + activeColor, 0f); + using var positionBrush = new LinearGradientBrush(new Rectangle(4, 35, 11, 1), Color.FromArgb(160, inactiveColor), + Color.FromArgb(64, inactiveColor), 0f); + using var arrowBrush = new LinearGradientBrush(new Rectangle(18, 40, 5, 8), borderColour, Color.FromArgb(175, borderColour), 0f); // Draw border g.DrawLine(borderPen, 4, 33, 4, 53); @@ -6903,7 +6846,7 @@ private void DrawDragDockingSquaresLeft(Graphics? g, g.DrawLine(dashPen, 15, 37, 15, 52); // Draw the direction arrow - g.FillPolygon(arrowBrush, new Point[] { new Point(19, 44), new Point(23, 40), new Point(23, 48), + g.FillPolygon(arrowBrush, new[] { new Point(19, 44), new Point(23, 40), new Point(23, 48), new Point(19, 44) }); // If active, then draw highlighted border @@ -6920,59 +6863,61 @@ private void DrawDragDockingSquaresRight(Graphics? g, Color inactiveColor, RenderDragDockingData dragData) { - var borderColour = ControlPaint.Dark(activeColor); - - // Draw border around the window square - using Pen borderPen = new Pen(borderColour), - dashPen = new Pen(borderColour), - shadow1Pen = new Pen(_190), - shadow2Pen = new Pen(_218); - // Draw the caption area at top of window - using LinearGradientBrush middleBrush = - new LinearGradientBrush(new Rectangle(60, 33, 23, 1), ControlPaint.LightLight(inactiveColor), - activeColor, 0f), - bottomBrush = new LinearGradientBrush(new Rectangle(60, 34, 23, 1), ControlPaint.Light(activeColor), - activeColor, 0f), - positionBrush = new LinearGradientBrush(new Rectangle(71, 35, 11, 1), - Color.FromArgb(160, inactiveColor), Color.FromArgb(64, inactiveColor), 180f), - arrowBrush = new LinearGradientBrush(new Rectangle(68, 40, 5, 8), borderColour, - Color.FromArgb(175, borderColour), 180f); - // Draw border - g.DrawLine(borderPen, 60, 33, 60, 53); - g.DrawLine(borderPen, 83, 33, 83, 53); - g.DrawLine(borderPen, 60, 53, 83, 53); - g.DrawLine(borderPen, 60, 33, 83, 33); + if (g is not null) + { + Color borderColour = ControlPaint.Dark(activeColor); + + // Draw border around the window square + using var borderPen = new Pen(borderColour); + using var dashPen = new Pen(borderColour); + using var shadow1Pen = new Pen(_190); + using var shadow2Pen = new Pen(_218); + // Draw the caption area at top of window + using var middleBrush = new LinearGradientBrush(new Rectangle(60, 33, 23, 1), ControlPaint.LightLight(inactiveColor), + activeColor, 0f); + using var bottomBrush = new LinearGradientBrush(new Rectangle(60, 34, 23, 1), ControlPaint.Light(activeColor), + activeColor, 0f); + using var positionBrush = new LinearGradientBrush(new Rectangle(71, 35, 11, 1), + Color.FromArgb(160, inactiveColor), Color.FromArgb(64, inactiveColor), 180f); + using var arrowBrush = new LinearGradientBrush(new Rectangle(68, 40, 5, 8), borderColour, + Color.FromArgb(175, borderColour), 180f); + // Draw border + g.DrawLine(borderPen, 60, 33, 60, 53); + g.DrawLine(borderPen, 83, 33, 83, 53); + g.DrawLine(borderPen, 60, 53, 83, 53); + g.DrawLine(borderPen, 60, 33, 83, 33); - // Draw shadows around right and bottom edges - g.DrawLine(shadow1Pen, 61, 54, 84, 54); - g.DrawLine(shadow1Pen, 84, 34, 84, 54); - g.DrawLine(shadow2Pen, 62, 55, 85, 55); - g.DrawLine(shadow2Pen, 85, 35, 85, 55); + // Draw shadows around right and bottom edges + g.DrawLine(shadow1Pen, 61, 54, 84, 54); + g.DrawLine(shadow1Pen, 84, 34, 84, 54); + g.DrawLine(shadow2Pen, 62, 55, 85, 55); + g.DrawLine(shadow2Pen, 85, 35, 85, 55); - // Draw the caption area - g.FillRectangle(middleBrush, 61, 34, 22, 1); - g.FillRectangle(bottomBrush, 61, 35, 22, 1); + // Draw the caption area + g.FillRectangle(middleBrush, 61, 34, 22, 1); + g.FillRectangle(bottomBrush, 61, 35, 22, 1); - // Draw client area - g.FillRectangle(SystemBrushes.Window, 61, 36, 22, 17); + // Draw client area + g.FillRectangle(SystemBrushes.Window, 61, 36, 22, 17); - // Draw docking edge indicator - g.FillRectangle(positionBrush, 72, 36, 11, 17); + // Draw docking edge indicator + g.FillRectangle(positionBrush, 72, 36, 11, 17); - // Draw a dashed line down the middle - dashPen.DashStyle = DashStyle.Dot; - g.DrawLine(dashPen, 72, 37, 72, 52); + // Draw a dashed line down the middle + dashPen.DashStyle = DashStyle.Dot; + g.DrawLine(dashPen, 72, 37, 72, 52); - // Draw the direction arrow - g.FillPolygon(arrowBrush, new Point[] { new Point(69, 44), new Point(65, 40), new Point(65, 48), + // Draw the direction arrow + g.FillPolygon(arrowBrush, new[] { new Point(69, 44), new Point(65, 40), new Point(65, 48), new Point(69, 44) }); - // If active, then draw highlighted border - if (dragData.ActiveRight) - { - g.DrawLine(borderPen, 87, 29, 63, 29); - g.DrawLine(borderPen, 87, 57, 63, 57); - g.DrawLine(borderPen, 87, 29, 87, 57); + // If active, then draw highlighted border + if (dragData.ActiveRight) + { + g.DrawLine(borderPen, 87, 29, 63, 29); + g.DrawLine(borderPen, 87, 57, 63, 57); + g.DrawLine(borderPen, 87, 29, 87, 57); + } } } @@ -6981,59 +6926,61 @@ private void DrawDragDockingSquaresTop(Graphics? g, Color inactiveColor, RenderDragDockingData dragData) { - var borderColour = ControlPaint.Dark(activeColor); - - // Draw border around the window square - using Pen borderPen = new Pen(borderColour), - dashPen = new Pen(borderColour), - shadow1Pen = new Pen(_190), - shadow2Pen = new Pen(_218); - // Draw the caption area at top of window - using LinearGradientBrush middleBrush = - new LinearGradientBrush(new Rectangle(33, 5, 20, 1), ControlPaint.LightLight(inactiveColor), - activeColor, 0f), - bottomBrush = new LinearGradientBrush(new Rectangle(33, 6, 20, 1), ControlPaint.Light(activeColor), - activeColor, 0f), - positionBrush = new LinearGradientBrush(new Rectangle(34, 6, 19, 10), - Color.FromArgb(160, inactiveColor), Color.FromArgb(64, inactiveColor), 90f), - arrowBrush = new LinearGradientBrush(new Rectangle(39, 40, 8, 4), borderColour, - Color.FromArgb(175, borderColour), 90f); - // Draw border - g.DrawLine(borderPen, 33, 4, 53, 4); - g.DrawLine(borderPen, 53, 4, 53, 27); - g.DrawLine(borderPen, 53, 27, 33, 27); - g.DrawLine(borderPen, 33, 27, 33, 4); + if (g is not null) + { + Color borderColour = ControlPaint.Dark(activeColor); + + // Draw border around the window square + using var borderPen = new Pen(borderColour); + using var dashPen = new Pen(borderColour); + using var shadow1Pen = new Pen(_190); + using var shadow2Pen = new Pen(_218); + // Draw the caption area at top of window + using var middleBrush = new LinearGradientBrush(new Rectangle(33, 5, 20, 1), ControlPaint.LightLight(inactiveColor), + activeColor, 0f); + using var bottomBrush = new LinearGradientBrush(new Rectangle(33, 6, 20, 1), ControlPaint.Light(activeColor), + activeColor, 0f); + using var positionBrush = new LinearGradientBrush(new Rectangle(34, 6, 19, 10), + Color.FromArgb(160, inactiveColor), Color.FromArgb(64, inactiveColor), 90f); + using var arrowBrush = new LinearGradientBrush(new Rectangle(39, 40, 8, 4), borderColour, + Color.FromArgb(175, borderColour), 90f); + // Draw border + g.DrawLine(borderPen, 33, 4, 53, 4); + g.DrawLine(borderPen, 53, 4, 53, 27); + g.DrawLine(borderPen, 53, 27, 33, 27); + g.DrawLine(borderPen, 33, 27, 33, 4); - // Draw shadows around right and bottom edges - g.DrawLine(shadow1Pen, 34, 28, 54, 28); - g.DrawLine(shadow1Pen, 54, 5, 54, 28); - g.DrawLine(shadow2Pen, 35, 29, 55, 29); - g.DrawLine(shadow2Pen, 55, 6, 55, 29); + // Draw shadows around right and bottom edges + g.DrawLine(shadow1Pen, 34, 28, 54, 28); + g.DrawLine(shadow1Pen, 54, 5, 54, 28); + g.DrawLine(shadow2Pen, 35, 29, 55, 29); + g.DrawLine(shadow2Pen, 55, 6, 55, 29); - // Draw the caption area - g.FillRectangle(middleBrush, 34, 5, 19, 1); - g.FillRectangle(bottomBrush, 34, 6, 19, 1); + // Draw the caption area + g.FillRectangle(middleBrush, 34, 5, 19, 1); + g.FillRectangle(bottomBrush, 34, 6, 19, 1); - // Draw client area - g.FillRectangle(SystemBrushes.Window, 34, 7, 19, 20); + // Draw client area + g.FillRectangle(SystemBrushes.Window!, 34, 7, 19, 20); - // Draw docking edge indicator - g.FillRectangle(positionBrush, 34, 7, 19, 9); + // Draw docking edge indicator + g.FillRectangle(positionBrush!, 34, 7, 19, 9); - // Draw a dashed line down the middle - dashPen.DashStyle = DashStyle.Dot; - g.DrawLine(dashPen, 35, 15, 53, 15); + // Draw a dashed line down the middle + dashPen.DashStyle = DashStyle.Dot; + g.DrawLine(dashPen, 35, 15, 53, 15); - // Draw the direction arrow - g.FillPolygon(arrowBrush, new Point[] { new Point(43, 18), new Point(47, 23), new Point(39, 23), + // Draw the direction arrow + g.FillPolygon(arrowBrush, new[] { new Point(43, 18), new Point(47, 23), new Point(39, 23), new Point(43, 18) }); - // If active, then draw highlighted border - if (dragData.ActiveTop) - { - g.DrawLine(borderPen, 29, 0, 29, 23); - g.DrawLine(borderPen, 57, 0, 57, 23); - g.DrawLine(borderPen, 29, 0, 57, 0); + // If active, then draw highlighted border + if (dragData.ActiveTop) + { + g.DrawLine(borderPen, 29, 0, 29, 23); + g.DrawLine(borderPen, 57, 0, 57, 23); + g.DrawLine(borderPen, 29, 0, 57, 0); + } } } @@ -7042,59 +6989,61 @@ private void DrawDragDockingSquaresBottom(Graphics? g, Color inactiveColor, RenderDragDockingData dragData) { - var borderColour = ControlPaint.Dark(activeColor); - - // Draw border around the window square - using Pen borderPen = new Pen(borderColour), - dashPen = new Pen(borderColour), - shadow1Pen = new Pen(_190), - shadow2Pen = new Pen(_218); - // Draw the caption area at top of window - using LinearGradientBrush middleBrush = - new LinearGradientBrush(new Rectangle(33, 61, 20, 1), ControlPaint.LightLight(inactiveColor), - activeColor, 0f), - bottomBrush = new LinearGradientBrush(new Rectangle(33, 62, 20, 1), ControlPaint.Light(activeColor), - activeColor, 0f), - positionBrush = new LinearGradientBrush(new Rectangle(34, 72, 19, 11), - Color.FromArgb(160, inactiveColor), Color.FromArgb(64, inactiveColor), 270f), - arrowBrush = new LinearGradientBrush(new Rectangle(39, 66, 8, 4), borderColour, - Color.FromArgb(175, borderColour), 270f); - // Draw border - g.DrawLine(borderPen, 33, 60, 53, 60); - g.DrawLine(borderPen, 53, 60, 53, 83); - g.DrawLine(borderPen, 53, 83, 33, 83); - g.DrawLine(borderPen, 33, 83, 33, 60); + if (g is not null) + { + Color borderColour = ControlPaint.Dark(activeColor); + + // Draw border around the window square + using var borderPen = new Pen(borderColour); + using var dashPen = new Pen(borderColour); + using var shadow1Pen = new Pen(_190); + using var shadow2Pen = new Pen(_218); + // Draw the caption area at top of window + using var middleBrush = new LinearGradientBrush(new Rectangle(33, 61, 20, 1), ControlPaint.LightLight(inactiveColor), + activeColor, 0f); + using var bottomBrush = new LinearGradientBrush(new Rectangle(33, 62, 20, 1), ControlPaint.Light(activeColor), + activeColor, 0f); + using var positionBrush = new LinearGradientBrush(new Rectangle(34, 72, 19, 11), + Color.FromArgb(160, inactiveColor), Color.FromArgb(64, inactiveColor), 270f); + using var arrowBrush = new LinearGradientBrush(new Rectangle(39, 66, 8, 4), borderColour, + Color.FromArgb(175, borderColour), 270f); + // Draw border + g.DrawLine(borderPen, 33, 60, 53, 60); + g.DrawLine(borderPen, 53, 60, 53, 83); + g.DrawLine(borderPen, 53, 83, 33, 83); + g.DrawLine(borderPen, 33, 83, 33, 60); - // Draw shadows around right and bottom edges - g.DrawLine(shadow1Pen, 34, 84, 54, 84); - g.DrawLine(shadow1Pen, 54, 61, 54, 84); - g.DrawLine(shadow2Pen, 35, 85, 55, 85); - g.DrawLine(shadow2Pen, 55, 61, 55, 85); + // Draw shadows around right and bottom edges + g.DrawLine(shadow1Pen, 34, 84, 54, 84); + g.DrawLine(shadow1Pen, 54, 61, 54, 84); + g.DrawLine(shadow2Pen, 35, 85, 55, 85); + g.DrawLine(shadow2Pen, 55, 61, 55, 85); - // Draw the caption area - g.FillRectangle(middleBrush, 34, 61, 19, 1); - g.FillRectangle(bottomBrush, 34, 62, 19, 1); + // Draw the caption area + g.FillRectangle(middleBrush, 34, 61, 19, 1); + g.FillRectangle(bottomBrush, 34, 62, 19, 1); - // Draw client area - g.FillRectangle(SystemBrushes.Window, 34, 63, 19, 20); + // Draw client area + g.FillRectangle(SystemBrushes.Window!, 34, 63, 19, 20); - // Draw docking edge indicator - g.FillRectangle(positionBrush, 34, 73, 19, 10); + // Draw docking edge indicator + g.FillRectangle(positionBrush, 34, 73, 19, 10); - // Draw a dashed line down the middle - dashPen.DashStyle = DashStyle.Dot; - g.DrawLine(dashPen, 35, 73, 53, 73); + // Draw a dashed line down the middle + dashPen.DashStyle = DashStyle.Dot; + g.DrawLine(dashPen, 35, 73, 53, 73); - // Draw the direction arrow - g.FillPolygon(arrowBrush, new Point[] { new Point(43, 71), new Point(47, 67), new Point(40, 67), + // Draw the direction arrow + g.FillPolygon(arrowBrush, new[] { new Point(43, 71), new Point(47, 67), new Point(40, 67), new Point(43, 71) }); - // If active, then draw highlighted border - if (dragData.ActiveBottom) - { - g.DrawLine(borderPen, 29, 63, 29, 87); - g.DrawLine(borderPen, 57, 63, 57, 87); - g.DrawLine(borderPen, 29, 87, 57, 87); + // If active, then draw highlighted border + if (dragData.ActiveBottom) + { + g.DrawLine(borderPen, 29, 63, 29, 87); + g.DrawLine(borderPen, 57, 63, 57, 87); + g.DrawLine(borderPen, 29, 87, 57, 87); + } } } @@ -7103,82 +7052,85 @@ private void DrawDragDockingSquaresMiddle(Graphics? g, Color inactiveColor, RenderDragDockingData dragData) { - var borderColour = ControlPaint.Dark(activeColor); - - // Draw border around the window square - using Pen borderPen = new Pen(borderColour), - dashPen = new Pen(borderColour), - shadow1Pen = new Pen(_190), - shadow2Pen = new Pen(_218); - // Draw the caption area at top of window - using (LinearGradientBrush middleBrush = - new LinearGradientBrush(new Rectangle(32, 34, 21, 1), ControlPaint.LightLight(inactiveColor), - activeColor, 0f), - bottomBrush = new LinearGradientBrush(new Rectangle(32, 35, 21, 1), ControlPaint.Light(activeColor), - activeColor, 0f)) - { - // Draw border - g.DrawLine(borderPen, 32, 32, 54, 32); - g.DrawLine(borderPen, 32, 32, 32, 53); - g.DrawLine(borderPen, 32, 53, 33, 54); - g.DrawLine(borderPen, 33, 54, 41, 54); - g.DrawLine(borderPen, 41, 54, 42, 52); - g.DrawLine(borderPen, 42, 52, 42, 50); - g.DrawLine(borderPen, 42, 50, 54, 50); - g.DrawLine(borderPen, 54, 32, 54, 53); - g.DrawLine(borderPen, 54, 53, 53, 54); - g.DrawLine(borderPen, 53, 54, 49, 54); - g.DrawLine(borderPen, 49, 54, 48, 53); - g.DrawLine(borderPen, 48, 53, 48, 50); - g.DrawLine(borderPen, 48, 53, 47, 54); - g.DrawLine(borderPen, 47, 54, 43, 54); - g.DrawLine(borderPen, 43, 54, 42, 53); + if (g is not null) + { + Color borderColour = ControlPaint.Dark(activeColor); + + // Draw border around the window square + using var borderPen = new Pen(borderColour); + using var dashPen = new Pen(borderColour); + using var shadow1Pen = new Pen(_190); + using var shadow2Pen = new Pen(_218); + // Draw the caption area at top of window + using (LinearGradientBrush middleBrush = + new LinearGradientBrush(new Rectangle(32, 34, 21, 1), ControlPaint.LightLight(inactiveColor), + activeColor, 0f), + bottomBrush = new LinearGradientBrush(new Rectangle(32, 35, 21, 1), ControlPaint.Light(activeColor), + activeColor, 0f)) + { + // Draw border + g.DrawLine(borderPen, 32, 32, 54, 32); + g.DrawLine(borderPen, 32, 32, 32, 53); + g.DrawLine(borderPen, 32, 53, 33, 54); + g.DrawLine(borderPen, 33, 54, 41, 54); + g.DrawLine(borderPen, 41, 54, 42, 52); + g.DrawLine(borderPen, 42, 52, 42, 50); + g.DrawLine(borderPen, 42, 50, 54, 50); + g.DrawLine(borderPen, 54, 32, 54, 53); + g.DrawLine(borderPen, 54, 53, 53, 54); + g.DrawLine(borderPen, 53, 54, 49, 54); + g.DrawLine(borderPen, 49, 54, 48, 53); + g.DrawLine(borderPen, 48, 53, 48, 50); + g.DrawLine(borderPen, 48, 53, 47, 54); + g.DrawLine(borderPen, 47, 54, 43, 54); + g.DrawLine(borderPen, 43, 54, 42, 53); + + // Draw the caption area + g.FillRectangle(middleBrush, 33, 33, 21, 1); + g.FillRectangle(bottomBrush, 33, 34, 21, 1); + + // Draw the client area + g.FillRectangle(SystemBrushes.Window, 33, 35, 21, 15); + g.FillRectangle(SystemBrushes.Window, 33, 50, 9, 3); + g.FillRectangle(SystemBrushes.Window, 33, 53, 9, 1); + g.FillRectangle(SystemBrushes.Window, 43, 51, 5, 3); + g.FillRectangle(SystemBrushes.Window, 49, 51, 5, 3); + + // Fill the inner indicator area + using (var innerBrush = new SolidBrush(Color.FromArgb(64, inactiveColor))) + { + g.FillRectangle(innerBrush, 34, 36, 19, 13); + g.FillRectangle(innerBrush, 34, 49, 7, 3); + g.FillRectangle(innerBrush, 35, 52, 5, 1); + } - // Draw the caption area - g.FillRectangle(middleBrush, 33, 33, 21, 1); - g.FillRectangle(bottomBrush, 33, 34, 21, 1); + // Draw outline of the indicator area + dashPen.DashStyle = DashStyle.Dot; + g.DrawLine(dashPen, 34, 37, 34, 52); + g.DrawLine(dashPen, 35, 52, 40, 52); + g.DrawLine(dashPen, 40, 51, 40, 49); + g.DrawLine(dashPen, 40, 51, 40, 48); + g.DrawLine(dashPen, 41, 48, 53, 48); + g.DrawLine(dashPen, 52, 47, 52, 36); + g.DrawLine(dashPen, 35, 36, 52, 36); - // Draw the client area - g.FillRectangle(SystemBrushes.Window, 33, 35, 21, 15); - g.FillRectangle(SystemBrushes.Window, 33, 50, 9, 3); - g.FillRectangle(SystemBrushes.Window, 33, 53, 9, 1); - g.FillRectangle(SystemBrushes.Window, 43, 51, 5, 3); - g.FillRectangle(SystemBrushes.Window, 49, 51, 5, 3); + // Draw right han side shadow + g.DrawLine(shadow1Pen, 55, 33, 55, 53); + g.DrawLine(shadow2Pen, 56, 34, 56, 53); + g.DrawLine(shadow1Pen, 33, 55, 53, 55); + g.DrawLine(shadow1Pen, 53, 55, 55, 53); + g.DrawLine(shadow2Pen, 34, 56, 53, 56); + g.DrawLine(shadow2Pen, 53, 56, 56, 53); + } - // Fill the inner indicator area - using (var innerBrush = new SolidBrush(Color.FromArgb(64, inactiveColor))) + // If active, then draw highlighted border + if (dragData.ActiveMiddle) { - g.FillRectangle(innerBrush, 34, 36, 19, 13); - g.FillRectangle(innerBrush, 34, 49, 7, 3); - g.FillRectangle(innerBrush, 35, 52, 5, 1); + g.DrawLine(borderPen, 23, 29, 29, 23); + g.DrawLine(borderPen, 57, 23, 63, 29); + g.DrawLine(borderPen, 63, 57, 57, 63); + g.DrawLine(borderPen, 23, 57, 29, 63); } - - // Draw outline of the indicator area - dashPen.DashStyle = DashStyle.Dot; - g.DrawLine(dashPen, 34, 37, 34, 52); - g.DrawLine(dashPen, 35, 52, 40, 52); - g.DrawLine(dashPen, 40, 51, 40, 49); - g.DrawLine(dashPen, 40, 51, 40, 48); - g.DrawLine(dashPen, 41, 48, 53, 48); - g.DrawLine(dashPen, 52, 47, 52, 36); - g.DrawLine(dashPen, 35, 36, 52, 36); - - // Draw right han side shadow - g.DrawLine(shadow1Pen, 55, 33, 55, 53); - g.DrawLine(shadow2Pen, 56, 34, 56, 53); - g.DrawLine(shadow1Pen, 33, 55, 53, 55); - g.DrawLine(shadow1Pen, 53, 55, 55, 53); - g.DrawLine(shadow2Pen, 34, 56, 53, 56); - g.DrawLine(shadow2Pen, 53, 56, 56, 53); - } - - // If active, then draw highlighted border - if (dragData.ActiveMiddle) - { - g.DrawLine(borderPen, 23, 29, 29, 23); - g.DrawLine(borderPen, 57, 23, 63, 29); - g.DrawLine(borderPen, 63, 57, 57, 63); - g.DrawLine(borderPen, 23, 57, 29, 63); } } #endregion @@ -7187,7 +7139,7 @@ private void DrawDragDockingSquaresMiddle(Graphics? g, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupAreaBorder1And2(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupAreaBorder1And2(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, @@ -7285,26 +7237,26 @@ protected virtual IDisposable DrawRibbonGroupAreaBorder1And2(RenderContext conte } // Fill the inside area with a linear gradient - context.Graphics.FillPath(cache.FillBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.FillBrush!, cache.OutsidePath!); // Clip drawing to the outside border - using (var clip = new Clipping(context.Graphics, cache.OutsidePath)) + using (var clip = new Clipping(context.Graphics, cache.OutsidePath!)) { - context.Graphics.FillPath(cache.FillTopBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.FillTopBrush!, cache.OutsidePath!); } using (var aa = new AntiAlias(context.Graphics)) { - // Draw the outside of the entire border line - context.Graphics.DrawPath(cache.OutsidePen, cache.OutsidePath); + // Draw the outside of the entire borderline + context.Graphics.DrawPath(cache.OutsidePen!, cache.OutsidePath!); // Draw the highlighting inside border - context.Graphics.DrawPath(cache.InsidePen, limited ? cache.InsidePathL : cache.InsidePathN); + context.Graphics.DrawPath(cache.InsidePen!, (limited ? cache.InsidePathL : cache.InsidePathN)!); } Pen shadowMedium = limited ? _lightShadowPen : _medium2ShadowPen; Pen shadowDark = limited ? _medium2ShadowPen : _darkShadowPen; - context.Graphics.DrawPath(limited ? cache.ShadowPenL : cache.ShadowPenN, cache.ShadowPath); + context.Graphics.DrawPath(limited ? cache.ShadowPenL! : cache.ShadowPenN!, cache.ShadowPath!); context.Graphics.DrawLine(shadowMedium, rect.Left, rect.Bottom, rect.Left, rect.Bottom - 1); context.Graphics.DrawLine(shadowMedium, rect.Left, rect.Bottom - 1, rect.Left + 1, rect.Bottom); context.Graphics.DrawLine(shadowDark, rect.Right, rect.Bottom - 2, rect.Right - 2, rect.Bottom); @@ -7317,11 +7269,11 @@ protected virtual IDisposable DrawRibbonGroupAreaBorder1And2(RenderContext conte /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupAreaBorder3And4(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupAreaBorder3And4(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento, + IDisposable? memento, bool gradientTop) { if (rect is { Width: > 0, Height: > 0 }) @@ -7359,9 +7311,12 @@ protected virtual IDisposable DrawRibbonGroupAreaBorder3And4(RenderContext conte innerRect.Height -= 3; var halfHeight = innerRect.Height / 2; cache.BorderRect = innerRect; - cache.BorderPoints = new Point[] { new Point(innerRect.X, rect.Y), + cache.BorderPoints = + [ + new Point(innerRect.X, rect.Y), new Point(innerRect.X, innerRect.Bottom), new Point(innerRect.Right, innerRect.Bottom), - new Point(innerRect.Right, innerRect.Top) }; + new Point(innerRect.Right, innerRect.Top) + ]; cache.BackRect1 = new Rectangle(innerRect.X, innerRect.Y, rect.Width, halfHeight); cache.BackRect2 = innerRect with { Y = innerRect.Y + halfHeight, Height = innerRect.Height - halfHeight }; cache.BackBrush1 = new LinearGradientBrush(new RectangleF(cache.BackRect1.X - 1, cache.BackRect1.Y - 1, cache.BackRect1.Width + 2, cache.BackRect1.Height + 1), c3, c4, 90f); @@ -7379,19 +7334,19 @@ protected virtual IDisposable DrawRibbonGroupAreaBorder3And4(RenderContext conte } // Draw solid background for entire area - context.Graphics.FillRectangle(cache.BackBrush3, rect); + context.Graphics.FillRectangle(cache.BackBrush3!, rect); // Fill area inside the border with a gradient effect - context.Graphics.FillRectangle(cache.BackBrush1, cache.BackRect1); - context.Graphics.FillRectangle(cache.BackBrush2, cache.BackRect2); + context.Graphics.FillRectangle(cache.BackBrush1!, cache.BackRect1); + context.Graphics.FillRectangle(cache.BackBrush2!, cache.BackRect2); // Draw the solid border around the edge - context.Graphics.DrawLine(cache.GradientBorderPen, cache.BorderRect.X, cache.BorderRect.Y, cache.BorderRect.Right, cache.BorderRect.Y); - context.Graphics.DrawLines(cache.SolidBorderPen, cache.BorderPoints); + context.Graphics.DrawLine(cache.GradientBorderPen!, cache.BorderRect.X, cache.BorderRect.Y, cache.BorderRect.Right, cache.BorderRect.Y); + context.Graphics.DrawLines(cache.SolidBorderPen!, cache.BorderPoints); // Draw shadow lines at bottom - context.Graphics.DrawLine(cache.ShadowPen3, rect.X, rect.Bottom - 2, rect.Right, rect.Bottom - 2); - context.Graphics.DrawLine(cache.ShadowPen2, rect.X, rect.Bottom - 1, rect.Right, rect.Bottom - 1); - context.Graphics.DrawLine(cache.ShadowPen1, rect.X, rect.Bottom, rect.Right, rect.Bottom); + context.Graphics.DrawLine(cache.ShadowPen3!, rect.X, rect.Bottom - 2, rect.Right, rect.Bottom - 2); + context.Graphics.DrawLine(cache.ShadowPen2!, rect.X, rect.Bottom - 1, rect.Right, rect.Bottom - 1); + context.Graphics.DrawLine(cache.ShadowPen1!, rect.X, rect.Bottom, rect.Right, rect.Bottom); } return memento; @@ -7400,11 +7355,11 @@ protected virtual IDisposable DrawRibbonGroupAreaBorder3And4(RenderContext conte /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupAreaBorderContext(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupAreaBorderContext(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -7462,11 +7417,11 @@ protected virtual IDisposable DrawRibbonGroupAreaBorderContext(RenderContext con shadowPath.AddLine(rect.Right - 4, rect.Bottom, rect.Right, rect.Bottom - 3); shadowPath.AddLine(rect.Right, rect.Bottom - 3, rect.Right, rect.Top + 3); - LinearGradientBrush insideBrush = new LinearGradientBrush(rect, Color.Transparent, c2, 95f); + var insideBrush = new LinearGradientBrush(rect, Color.Transparent, c2, 95f); cache.InsidePen = new Pen(insideBrush); - Rectangle rectGradient = new Rectangle(rect.Left - 1, rect.Top, rect.Width + 2, rect.Height + 1); - LinearGradientBrush shadowBrush = new LinearGradientBrush(rectGradient, _darken8, _darken38, 90f); + var rectGradient = new Rectangle(rect.Left - 1, rect.Top, rect.Width + 2, rect.Height + 1); + var shadowBrush = new LinearGradientBrush(rectGradient, _darken8, _darken38, 90f); cache.ShadowPen = new Pen(shadowBrush); cache.FillBrush = new LinearGradientBrush(rect, Color.White, _242, 90f) @@ -7484,25 +7439,25 @@ protected virtual IDisposable DrawRibbonGroupAreaBorderContext(RenderContext con } // Fill the inside area with a linear gradient - context.Graphics.FillPath(cache.FillBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.FillBrush!, cache.OutsidePath!); // Clip drawing to the outside border - using (Clipping clip = new Clipping(context.Graphics, cache.OutsidePath)) + using (var clip = new Clipping(context.Graphics, cache.OutsidePath!)) { - context.Graphics.FillPath(cache.FillTopBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.FillTopBrush!, cache.OutsidePath!); } - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - // Draw the outside of the entire border line - context.Graphics.DrawPath(cache.OutsidePen, cache.OutsidePath); + // Draw the outside of the entire borderline + context.Graphics.DrawPath(cache.OutsidePen!, cache.OutsidePath!); // Draw the highlighting inside border - context.Graphics.DrawPath(cache.InsidePen, cache.InsidePath); + context.Graphics.DrawPath(cache.InsidePen!, cache.InsidePath!); } // Draw the shadow outside the bottom and right edges - context.Graphics.DrawPath(cache.ShadowPen, cache.ShadowPath); + context.Graphics.DrawPath(cache.ShadowPen!, cache.ShadowPath!); context.Graphics.DrawLine(_medium2ShadowPen, rect.Left, rect.Bottom, rect.Left, rect.Bottom - 1); context.Graphics.DrawLine(_medium2ShadowPen, rect.Left, rect.Bottom - 1, rect.Left + 1, rect.Bottom); context.Graphics.DrawLine(_darkShadowPen, rect.Right, rect.Bottom - 2, rect.Right - 2, rect.Bottom); @@ -7515,13 +7470,13 @@ protected virtual IDisposable DrawRibbonGroupAreaBorderContext(RenderContext con /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabTracking2007(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonTabTracking2007(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -7569,27 +7524,27 @@ protected virtual IDisposable DrawRibbonTabTracking2007(PaletteRibbonShape shape } // Draw the left and right sides with light version of tracking color - context.Graphics.FillRectangle(cache.Half1LeftBrush, cache.Half1Rect); - context.Graphics.FillRectangle(cache.Half1RightBrush, cache.Half1Rect); + context.Graphics.FillRectangle(cache.Half1LeftBrush!, cache.Half1Rect); + context.Graphics.FillRectangle(cache.Half1RightBrush!, cache.Half1Rect); // Draw over with glassy effect - context.Graphics.FillRectangle(cache.Half1LightBrush, cache.Half1Rect); + context.Graphics.FillRectangle(cache.Half1LightBrush!, cache.Half1Rect); //// Use a solid fill for the bottom half - context.Graphics.FillRectangle(cache.Half2Brush, cache.Half2Rect); + context.Graphics.FillRectangle(cache.Half2Brush!, cache.Half2Rect); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) { // Draw twice to get a deeper color effect, once is to pale - context.Graphics.FillRectangle(cache.EllipseBrush, cache.Half2RectF); - context.Graphics.FillRectangle(cache.EllipseBrush, cache.Half2RectF); + context.Graphics.FillRectangle(cache.EllipseBrush!, cache.Half2RectF); + context.Graphics.FillRectangle(cache.EllipseBrush!, cache.Half2RectF); } // Draw the actual border - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - context.Graphics.DrawPath(cache.OutsidePen, cache.OutsidePath); + context.Graphics.DrawPath(cache.OutsidePen!, cache.OutsidePath!); } switch (orientation) @@ -7608,7 +7563,7 @@ protected virtual IDisposable DrawRibbonTabTracking2007(PaletteRibbonShape shape break; } - context.Graphics.DrawPath(cache.TopPen, cache.TopPath); + context.Graphics.DrawPath(cache.TopPen!, cache.TopPath!); } return memento; @@ -7622,15 +7577,15 @@ protected virtual void DrawRibbonTabTrackingTop2007(Rectangle rect, MementoRibbonTabTracking2007 cache) { // Create path for a curved border around the tab - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); outsidePath.AddLine(rect.Left + 1, rect.Bottom - 2, rect.Left + 1, rect.Top + 1.5f); outsidePath.AddLine(rect.Left + 1, rect.Top + 1.5f, rect.Left + 3, rect.Top); outsidePath.AddLine(rect.Left + 3, rect.Top, rect.Right - 4, rect.Top); outsidePath.AddLine(rect.Right - 4, rect.Top, rect.Right - 2, rect.Top + 1.5f); outsidePath.AddLine(rect.Right - 2, rect.Top + 1.5f, rect.Right - 2, rect.Bottom - 2); - // Create path for the top hightlight line - GraphicsPath topPath = new GraphicsPath(); + // Create path for the top highlight line + var topPath = new GraphicsPath(); topPath.AddLine(rect.Left + 3, rect.Top + 2, rect.Left + 4, rect.Top + 1); topPath.AddLine(rect.Left + 4, rect.Top + 1, rect.Right - 5, rect.Top + 1); topPath.AddLine(rect.Right - 5, rect.Top + 1, rect.Right - 4, rect.Top + 2); @@ -7641,8 +7596,8 @@ protected virtual void DrawRibbonTabTrackingTop2007(Rectangle rect, var half2 = full - half1; cache.Half1Rect = new Rectangle(rect.Left + 3, rect.Top + 2, rect.Width - 6, half1); cache.Half2Rect = new Rectangle(rect.Left + 3, rect.Top + 2 + half1, rect.Width - 6, half2); - Rectangle fullRect = new Rectangle(rect.Left + 3, rect.Top + 2, rect.Width - 6, half1 + half2); - RectangleF half1RectF = new RectangleF(cache.Half1Rect.Left - 1, cache.Half1Rect.Top - 0.5f, + var fullRect = new Rectangle(rect.Left + 3, rect.Top + 2, rect.Width - 6, half1 + half2); + var half1RectF = new RectangleF(cache.Half1Rect.Left - 1, cache.Half1Rect.Top - 0.5f, cache.Half1Rect.Width + 2, cache.Half1Rect.Height + 1); cache.Half2RectF = new RectangleF(cache.Half2Rect.Left - 1, cache.Half2Rect.Top - 0.5f, cache.Half2Rect.Width + 2, cache.Half2Rect.Height + 1); @@ -7658,10 +7613,10 @@ protected virtual void DrawRibbonTabTrackingTop2007(Rectangle rect, cache.Half2Brush = new SolidBrush(Color.FromArgb(85, c2)); // Create ellipse information for lightening the bottom half - cache.EllipseRect = new RectangleF(fullRect.Left - (fullRect.Width / 8), fullRect.Top, fullRect.Width * 1.25f, fullRect.Height); + cache.EllipseRect = new RectangleF(fullRect.Left - (fullRect.Width / 8f), fullRect.Top, fullRect.Width * 1.25f, fullRect.Height); // Cannot draw a path that contains a zero sized element - GraphicsPath ellipsePath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); if (cache.EllipseRect is { Width: > 0, Height: > 0 }) { ellipsePath.AddEllipse(cache.EllipseRect); @@ -7669,14 +7624,14 @@ protected virtual void DrawRibbonTabTrackingTop2007(Rectangle rect, { CenterColor = Color.FromArgb(92, Color.White) }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), cache.EllipseRect.Top + (cache.EllipseRect.Height / 2)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } - RectangleF vertRectF = new RectangleF(rect.Left - 1, rect.Top + 2, rect.Width + 2, rect.Height - 2); - RectangleF horzRectF = new RectangleF(rect.Left + 1, rect.Top, rect.Width - 2, rect.Height); + var vertRectF = new RectangleF(rect.Left - 1, rect.Top + 2, rect.Width + 2, rect.Height - 2); + var horzRectF = new RectangleF(rect.Left + 1, rect.Top, rect.Width - 2, rect.Height); cache.OutsideBrush = new LinearGradientBrush(vertRectF, Color.Transparent, _whiten128, 90f) { Blend = _ribbonOutBlend @@ -7704,10 +7659,13 @@ protected virtual void DrawRibbonTabTrackingTopDraw2007(Rectangle rect, MementoRibbonTabTracking2007 cache, Graphics? g) { - g.FillRectangle(cache.OutsideBrush, rect.Left, rect.Top + 3, 1, rect.Height - 4); - g.FillRectangle(cache.InsideBrush, rect.Left + 2, rect.Top + 3, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideBrush, rect.Right - 1, rect.Top + 3, 1, rect.Height - 4); - g.FillRectangle(cache.InsideBrush, rect.Right - 3, rect.Top + 3, 1, rect.Height - 4); + if (g is not null) + { + g.FillRectangle(cache.OutsideBrush!, rect.Left, rect.Top + 3, 1, rect.Height - 4); + g.FillRectangle(cache.InsideBrush!, rect.Left + 2, rect.Top + 3, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideBrush!, rect.Right - 1, rect.Top + 3, 1, rect.Height - 4); + g.FillRectangle(cache.InsideBrush!, rect.Right - 3, rect.Top + 3, 1, rect.Height - 4); + } } /// @@ -7718,15 +7676,15 @@ protected virtual void DrawRibbonTabTrackingLeft2007(Rectangle rect, MementoRibbonTabTracking2007 cache) { // Create path for a curved border around the tab - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); outsidePath.AddLine(rect.Right - 2, rect.Bottom - 2, rect.Left + 1.5f, rect.Bottom - 2); outsidePath.AddLine(rect.Left + 1.5f, rect.Bottom - 2, rect.Left, rect.Bottom - 4); outsidePath.AddLine(rect.Left, rect.Bottom - 4, rect.Left, rect.Top + 3); outsidePath.AddLine(rect.Left, rect.Top + 3, rect.Left + 1.5f, rect.Top + 1); outsidePath.AddLine(rect.Left + 1.5f, rect.Top + 1, rect.Right - 2, rect.Top + 1); - // Create path for the top hightlight line - GraphicsPath topPath = new GraphicsPath(); + // Create path for the top highlight line + var topPath = new GraphicsPath(); topPath.AddLine(rect.Left + 2, rect.Bottom - 4, rect.Left + 1, rect.Bottom - 5); topPath.AddLine(rect.Left + 1, rect.Bottom - 5, rect.Left + 1, rect.Top + 4); topPath.AddLine(rect.Left + 1, rect.Top + 4, rect.Left + 2, rect.Top + 3); @@ -7737,8 +7695,8 @@ protected virtual void DrawRibbonTabTrackingLeft2007(Rectangle rect, var half2 = full - half1; cache.Half1Rect = new Rectangle(rect.Left + 2, rect.Top + 3, half1, rect.Height - 6); cache.Half2Rect = new Rectangle(rect.Left + 2 + half1, rect.Top + 3, half2, rect.Height - 6); - Rectangle fullRect = new Rectangle(rect.Left + 2, rect.Top + 3, half1 + half2, rect.Height - 6); - RectangleF half1RectF = new RectangleF(cache.Half1Rect.Left - 0.5f, cache.Half1Rect.Top - 1f, + var fullRect = new Rectangle(rect.Left + 2, rect.Top + 3, half1 + half2, rect.Height - 6); + var half1RectF = new RectangleF(cache.Half1Rect.Left - 0.5f, cache.Half1Rect.Top - 1f, cache.Half1Rect.Width + 1, cache.Half1Rect.Height + 2); cache.Half2RectF = new RectangleF(cache.Half2Rect.Left - 0.5f, cache.Half2Rect.Top - 1f, cache.Half2Rect.Width + 1, cache.Half2Rect.Height + 2); @@ -7753,10 +7711,10 @@ protected virtual void DrawRibbonTabTrackingLeft2007(Rectangle rect, cache.Half1LightBrush = new LinearGradientBrush(half1RectF, Color.FromArgb(28, Color.White), Color.FromArgb(125, Color.White), 180f); cache.Half2Brush = new SolidBrush(Color.FromArgb(85, c2)); - // Create ellipse information for lightening the bottom hald - cache.EllipseRect = new RectangleF(fullRect.Left, fullRect.Top - (fullRect.Width / 8), fullRect.Width, fullRect.Height * 1.25f); + // Create ellipse information for lightening the bottom half + cache.EllipseRect = new RectangleF(fullRect.Left, fullRect.Top - (fullRect.Width / 8f), fullRect.Width, fullRect.Height * 1.25f); - GraphicsPath ellipsePath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) { @@ -7765,14 +7723,14 @@ protected virtual void DrawRibbonTabTrackingLeft2007(Rectangle rect, { CenterColor = Color.FromArgb(48, Color.White) }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), cache.EllipseRect.Top + (cache.EllipseRect.Height / 2)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } - RectangleF vertRectF = new RectangleF(rect.Left + 2, rect.Top - 1, rect.Width - 2, rect.Height + 2); - RectangleF horzRectF = new RectangleF(rect.Left, rect.Top + 1, rect.Width, rect.Height - 2); + var vertRectF = new RectangleF(rect.Left + 2, rect.Top - 1, rect.Width - 2, rect.Height + 2); + var horzRectF = new RectangleF(rect.Left, rect.Top + 1, rect.Width, rect.Height - 2); cache.OutsideBrush = new LinearGradientBrush(vertRectF, Color.Transparent, _whiten128, 180f) { Blend = _ribbonOutBlend @@ -7800,10 +7758,13 @@ protected virtual void DrawRibbonTabTrackingLeftDraw2007(Rectangle rect, MementoRibbonTabTracking2007 cache, Graphics? g) { - g.FillRectangle(cache.OutsideBrush, rect.Left + 3, rect.Top, rect.Width - 4, 1); - g.FillRectangle(cache.InsideBrush, rect.Left + 3, rect.Top + 2, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideBrush, rect.Left + 3, rect.Bottom - 1, rect.Width - 4, 1); - g.FillRectangle(cache.InsideBrush, rect.Left + 3, rect.Bottom - 3, rect.Width - 4, 1); + if (g is not null) + { + g.FillRectangle(cache.OutsideBrush!, rect.Left + 3, rect.Top, rect.Width - 4, 1); + g.FillRectangle(cache.InsideBrush!, rect.Left + 3, rect.Top + 2, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideBrush!, rect.Left + 3, rect.Bottom - 1, rect.Width - 4, 1); + g.FillRectangle(cache.InsideBrush!, rect.Left + 3, rect.Bottom - 3, rect.Width - 4, 1); + } } /// @@ -7814,15 +7775,15 @@ protected virtual void DrawRibbonTabTrackingRight2007(Rectangle rect, MementoRibbonTabTracking2007 cache) { // Create path for a curved border around the tab - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); outsidePath.AddLine(rect.Left + 1, rect.Bottom - 2, rect.Right - 2.5f, rect.Bottom - 2); outsidePath.AddLine(rect.Right - 2.5f, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 4); outsidePath.AddLine(rect.Right - 1, rect.Bottom - 4, rect.Right - 1, rect.Top + 3); outsidePath.AddLine(rect.Right - 1, rect.Top + 3, rect.Right - 2.5f, rect.Top + 1); outsidePath.AddLine(rect.Right - 2.5f, rect.Top + 1, rect.Left + 1, rect.Top + 1); - // Create path for the top hightlight line - GraphicsPath topPath = new GraphicsPath(); + // Create path for the top highlight line + var topPath = new GraphicsPath(); topPath.AddLine(rect.Right - 3, rect.Bottom - 4, rect.Right - 2, rect.Bottom - 5); topPath.AddLine(rect.Right - 2, rect.Bottom - 5, rect.Right - 2, rect.Top + 4); topPath.AddLine(rect.Right - 2, rect.Top + 4, rect.Right - 3, rect.Top + 3); @@ -7833,9 +7794,9 @@ protected virtual void DrawRibbonTabTrackingRight2007(Rectangle rect, var half2 = full - half1; cache.Half1Rect = new Rectangle(rect.Right - 2 - half1, rect.Top + 3, half1, rect.Height - 6); cache.Half2Rect = new Rectangle(rect.Right - 2 - half1 - half2, rect.Top + 3, half2, rect.Height - 6); - Rectangle fullRect = new Rectangle(rect.Right - 2 - half1 - half2, rect.Top + 3, half1 + half2, + var fullRect = new Rectangle(rect.Right - 2 - half1 - half2, rect.Top + 3, half1 + half2, rect.Height - 6); - RectangleF half1RectF = new RectangleF(cache.Half1Rect.Left - 0.5f, cache.Half1Rect.Top - 1f, + var half1RectF = new RectangleF(cache.Half1Rect.Left - 0.5f, cache.Half1Rect.Top - 1f, cache.Half1Rect.Width + 1, cache.Half1Rect.Height + 2); cache.Half2RectF = new RectangleF(cache.Half2Rect.Left - 0.5f, cache.Half2Rect.Top - 1f, cache.Half2Rect.Width + 1, cache.Half2Rect.Height + 2); @@ -7850,10 +7811,10 @@ protected virtual void DrawRibbonTabTrackingRight2007(Rectangle rect, cache.Half1LightBrush = new LinearGradientBrush(half1RectF, Color.FromArgb(28, Color.White), Color.FromArgb(125, Color.White), 0f); cache.Half2Brush = new SolidBrush(Color.FromArgb(85, c2)); - // Create ellipse information for lightening the bottom hald - cache.EllipseRect = new RectangleF(fullRect.Left, fullRect.Top - (fullRect.Width / 8), fullRect.Width, fullRect.Height * 1.25f); + // Create ellipse information for lightening the bottom half + cache.EllipseRect = new RectangleF(fullRect.Left, fullRect.Top - (fullRect.Width / 8f), fullRect.Width, fullRect.Height * 1.25f); - GraphicsPath ellipsePath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) { @@ -7862,14 +7823,14 @@ protected virtual void DrawRibbonTabTrackingRight2007(Rectangle rect, { CenterColor = Color.FromArgb(48, Color.White) }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), cache.EllipseRect.Top + (cache.EllipseRect.Height / 2)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } - RectangleF vertRectF = new RectangleF(rect.Left, rect.Top - 1, rect.Width - 2, rect.Height + 2); - RectangleF horzRectF = new RectangleF(rect.Left, rect.Top + 1, rect.Width, rect.Height - 2); + var vertRectF = new RectangleF(rect.Left, rect.Top - 1, rect.Width - 2, rect.Height + 2); + var horzRectF = new RectangleF(rect.Left, rect.Top + 1, rect.Width, rect.Height - 2); cache.OutsideBrush = new LinearGradientBrush(vertRectF, Color.Transparent, _whiten128, 0f) { Blend = _ribbonOutBlend @@ -7897,10 +7858,13 @@ protected virtual void DrawRibbonTabTrackingRightDraw2007(Rectangle rect, MementoRibbonTabTracking2007 cache, Graphics? g) { - g.FillRectangle(cache.OutsideBrush, rect.Left + 1, rect.Top, rect.Width - 4, 1); - g.FillRectangle(cache.InsideBrush, rect.Left + 1, rect.Top + 2, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideBrush, rect.Left + 1, rect.Bottom - 1, rect.Width - 4, 1); - g.FillRectangle(cache.InsideBrush, rect.Left + 1, rect.Bottom - 3, rect.Width - 4, 1); + if (g is not null) + { + g.FillRectangle(cache.OutsideBrush!, rect.Left + 1, rect.Top, rect.Width - 4, 1); + g.FillRectangle(cache.InsideBrush!, rect.Left + 1, rect.Top + 2, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideBrush!, rect.Left + 1, rect.Bottom - 1, rect.Width - 4, 1); + g.FillRectangle(cache.InsideBrush!, rect.Left + 1, rect.Bottom - 3, rect.Width - 4, 1); + } } /// @@ -7911,15 +7875,15 @@ protected virtual void DrawRibbonTabTrackingBottom2007(Rectangle rect, MementoRibbonTabTracking2007 cache) { // Create path for a curved border around the tab - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); outsidePath.AddLine(rect.Left + 1, rect.Top + 1, rect.Left + 1, rect.Bottom - 2.5f); outsidePath.AddLine(rect.Left + 1, rect.Bottom - 2.5f, rect.Left + 3, rect.Bottom - 1); outsidePath.AddLine(rect.Left + 3, rect.Bottom - 1, rect.Right - 4, rect.Bottom - 1); outsidePath.AddLine(rect.Right - 4, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 2.5f); outsidePath.AddLine(rect.Right - 2, rect.Bottom - 2.5f, rect.Right - 2, rect.Top + 1); - // Create path for the bottom hightlight line - GraphicsPath topPath = new GraphicsPath(); + // Create path for the bottom highlight line + var topPath = new GraphicsPath(); topPath.AddLine(rect.Left + 3, rect.Bottom - 3, rect.Left + 4, rect.Bottom - 2); topPath.AddLine(rect.Left + 4, rect.Bottom - 2, rect.Right - 5, rect.Bottom - 2); topPath.AddLine(rect.Right - 5, rect.Bottom - 2, rect.Right - 4, rect.Bottom - 3); @@ -7930,9 +7894,9 @@ protected virtual void DrawRibbonTabTrackingBottom2007(Rectangle rect, var half2 = full - half1; cache.Half1Rect = new Rectangle(rect.Left + 3, rect.Bottom - 2 - half1, rect.Width - 6, half1); cache.Half2Rect = new Rectangle(rect.Left + 3, rect.Bottom - 2 - half1 - half2, rect.Width - 6, half2); - Rectangle fullRect = new Rectangle(rect.Left + 3, rect.Bottom - 2 - half1 - half2, rect.Width - 6, + var fullRect = new Rectangle(rect.Left + 3, rect.Bottom - 2 - half1 - half2, rect.Width - 6, half1 + half2); - RectangleF half1RectF = new RectangleF(cache.Half1Rect.Left - 1, cache.Half1Rect.Top - 0.5f, + var half1RectF = new RectangleF(cache.Half1Rect.Left - 1, cache.Half1Rect.Top - 0.5f, cache.Half1Rect.Width + 2, cache.Half1Rect.Height + 1); cache.Half2RectF = new RectangleF(cache.Half2Rect.Left - 1, cache.Half2Rect.Top - 0.5f, cache.Half2Rect.Width + 2, cache.Half2Rect.Height + 1); @@ -7947,10 +7911,10 @@ protected virtual void DrawRibbonTabTrackingBottom2007(Rectangle rect, cache.Half1LightBrush = new LinearGradientBrush(half1RectF, Color.FromArgb(28, Color.White), Color.FromArgb(125, Color.White), 270f); cache.Half2Brush = new SolidBrush(Color.FromArgb(85, c2)); - // Create ellipse information for lightening the bottom hald - cache.EllipseRect = new RectangleF(fullRect.Left - (fullRect.Width / 8), fullRect.Top, fullRect.Width * 1.25f, fullRect.Height); + // Create ellipse information for lightening the bottom half + cache.EllipseRect = new RectangleF(fullRect.Left - (fullRect.Width / 8f), fullRect.Top, fullRect.Width * 1.25f, fullRect.Height); - GraphicsPath ellipsePath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) { @@ -7959,14 +7923,14 @@ protected virtual void DrawRibbonTabTrackingBottom2007(Rectangle rect, { CenterColor = Color.FromArgb(92, Color.White) }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), cache.EllipseRect.Bottom - (cache.EllipseRect.Height / 2)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } - RectangleF vertRectF = new RectangleF(rect.Left - 1, rect.Top, rect.Width + 2, rect.Height - 2); - RectangleF horzRectF = new RectangleF(rect.Left + 1, rect.Top, rect.Width - 2, rect.Height); + var vertRectF = new RectangleF(rect.Left - 1, rect.Top, rect.Width + 2, rect.Height - 2); + var horzRectF = new RectangleF(rect.Left + 1, rect.Top, rect.Width - 2, rect.Height); cache.OutsideBrush = new LinearGradientBrush(vertRectF, Color.Transparent, _whiten128, 270f) { Blend = _ribbonOutBlend @@ -7994,22 +7958,25 @@ protected virtual void DrawRibbonTabTrackingBottomDraw2007(Rectangle rect, MementoRibbonTabTracking2007 cache, Graphics? g) { - g.FillRectangle(cache.OutsideBrush, rect.Left, rect.Top + 1, 1, rect.Height - 4); - g.FillRectangle(cache.InsideBrush, rect.Left + 2, rect.Top + 1, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideBrush, rect.Right - 1, rect.Top + 1, 1, rect.Height - 4); - g.FillRectangle(cache.InsideBrush, rect.Right - 3, rect.Top + 1, 1, rect.Height - 4); + if (g is not null) + { + g.FillRectangle(cache.OutsideBrush!, rect.Left, rect.Top + 1, 1, rect.Height - 4); + g.FillRectangle(cache.InsideBrush!, rect.Left + 2, rect.Top + 1, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideBrush!, rect.Right - 1, rect.Top + 1, 1, rect.Height - 4); + g.FillRectangle(cache.InsideBrush!, rect.Right - 3, rect.Top + 1, 1, rect.Height - 4); + } } /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento, + IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) @@ -8044,7 +8011,7 @@ protected virtual IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape cache.Dispose(); // If c5 has a colour then use that to highlight the tab - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -8077,16 +8044,16 @@ protected virtual IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape } // Fill the full background - context.Graphics.FillPath(cache.OutsideBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.OutsideBrush!, cache.OutsidePath!); // Draw the border - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - context.Graphics.DrawPath(cache.OutsidePen, cache.BorderPath); + context.Graphics.DrawPath(cache.OutsidePen!, cache.BorderPath!); } // Fill the inside area - context.Graphics.FillPath(cache.InsideBrush, cache.InsidePath); + context.Graphics.FillPath(cache.InsideBrush!, cache.InsidePath!); } return memento; @@ -8099,9 +8066,9 @@ protected virtual void DrawRibbonTabTrackingTop2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Left, rect.Bottom - 2, rect.Left, rect.Top + 1.75f); @@ -8110,7 +8077,7 @@ protected virtual void DrawRibbonTabTrackingTop2010(Rectangle rect, borderPath.AddLine(rect.Right - 2, rect.Top, rect.Right - 1, rect.Top + 1.75f); borderPath.AddLine(rect.Right - 1, rect.Top + 1.75f, rect.Right - 1, rect.Bottom - 2); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Left, rect.Bottom - 1, rect.Left, rect.Top + 1.5f); outsidePath.AddLine(rect.Left, rect.Top + 1.5f, rect.Left + 1, rect.Top); outsidePath.AddLine(rect.Left + 1, rect.Top, rect.Right - 2, rect.Top); @@ -8146,9 +8113,9 @@ protected virtual void DrawRibbonTabTrackingBottom2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Left, rect.Top, rect.Left, rect.Bottom - 2.75f); @@ -8157,7 +8124,7 @@ protected virtual void DrawRibbonTabTrackingBottom2010(Rectangle rect, borderPath.AddLine(rect.Right - 2, rect.Bottom - 1, rect.Right - 1, rect.Bottom - 2.75f); borderPath.AddLine(rect.Right - 1, rect.Bottom - 2.75f, rect.Right - 1, rect.Top); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Left, rect.Top, rect.Left, rect.Bottom - 2.5f); outsidePath.AddLine(rect.Left, rect.Bottom - 2.5f, rect.Left + 1, rect.Bottom - 1); outsidePath.AddLine(rect.Left + 1, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 1); @@ -8192,9 +8159,9 @@ protected virtual void DrawRibbonTabTrackingLeft2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Right - 1, rect.Top, rect.Left + 1.75f, rect.Top); @@ -8203,7 +8170,7 @@ protected virtual void DrawRibbonTabTrackingLeft2010(Rectangle rect, borderPath.AddLine(rect.Left, rect.Bottom - 2.5f, rect.Left + 1.75f, rect.Bottom - 1); borderPath.AddLine(rect.Left + 1.75f, rect.Bottom - 1, rect.Right - 1, rect.Bottom - 1); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Right - 1, rect.Top, rect.Left + 1.75f, rect.Top); outsidePath.AddLine(rect.Left + 1.75f, rect.Top, rect.Left, rect.Top + 1); outsidePath.AddLine(rect.Left, rect.Top + 1, rect.Left, rect.Bottom - 2.5f); @@ -8239,9 +8206,9 @@ protected virtual void DrawRibbonTabTrackingRight2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Left, rect.Top, rect.Right - 2.75f, rect.Top); @@ -8250,7 +8217,7 @@ protected virtual void DrawRibbonTabTrackingRight2010(Rectangle rect, borderPath.AddLine(rect.Right - 1, rect.Bottom - 2.5f, rect.Right - 2.75f, rect.Bottom - 1); borderPath.AddLine(rect.Right - 2.75f, rect.Bottom - 1, rect.Left, rect.Bottom - 1); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Left, rect.Top, rect.Right - 2.75f, rect.Top); outsidePath.AddLine(rect.Right - 2.75f, rect.Top, rect.Right - 1, rect.Top + 1); outsidePath.AddLine(rect.Right - 1, rect.Top + 1, rect.Right - 1, rect.Bottom - 2.5f); @@ -8281,13 +8248,13 @@ protected virtual void DrawRibbonTabTrackingRight2010(Rectangle rect, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabFocus2010(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonTabFocus2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -8321,7 +8288,7 @@ protected virtual IDisposable DrawRibbonTabFocus2010(PaletteRibbonShape shape, cache.Dispose(); // If c5 has a colour then use that to highlight the tab - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { c1 = c5; c2 = CommonHelper.MergeColors(c2, 0.8f, ControlPaint.Light(c5), 0.2f); @@ -8349,16 +8316,16 @@ protected virtual IDisposable DrawRibbonTabFocus2010(PaletteRibbonShape shape, } // Fill the full background - context.Graphics.FillPath(cache.OutsideBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.OutsideBrush!, cache.OutsidePath!); // Draw the border - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - context.Graphics.DrawPath(cache.OutsidePen, cache.BorderPath); + context.Graphics.DrawPath(cache.OutsidePen!, cache.BorderPath!); } // Fill the inside area - context.Graphics.FillPath(cache.InsideBrush, cache.InsidePath); + context.Graphics.FillPath(cache.InsideBrush!, cache.InsidePath!); } return memento; @@ -8371,9 +8338,9 @@ protected virtual void DrawRibbonTabFocusTop2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Left, rect.Bottom - 1, rect.Left + 1, rect.Bottom - 2); @@ -8384,7 +8351,7 @@ protected virtual void DrawRibbonTabFocusTop2010(Rectangle rect, borderPath.AddLine(rect.Right - 2, rect.Top + 1.75f, rect.Right - 2, rect.Bottom - 2); borderPath.AddLine(rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Left, rect.Bottom, rect.Left + 1, rect.Bottom - 1); outsidePath.AddLine(rect.Left + 1, rect.Bottom - 1, rect.Left + 1, rect.Top + 1.5f); outsidePath.AddLine(rect.Left + 1, rect.Top + 1.5f, rect.Left + 2, rect.Top); @@ -8424,9 +8391,9 @@ protected virtual void DrawRibbonTabFocusBottom2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Left, rect.Top, rect.Left + 1, rect.Top + 1); @@ -8437,7 +8404,7 @@ protected virtual void DrawRibbonTabFocusBottom2010(Rectangle rect, borderPath.AddLine(rect.Right - 2, rect.Bottom - 2.75f, rect.Right - 2, rect.Top + 1); borderPath.AddLine(rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Left, rect.Top, rect.Left + 1, rect.Top); outsidePath.AddLine(rect.Left + 1, rect.Top, rect.Left + 1, rect.Bottom - 2.5f); outsidePath.AddLine(rect.Left + 1, rect.Bottom - 2.5f, rect.Left + 2, rect.Bottom - 1); @@ -8476,9 +8443,9 @@ protected virtual void DrawRibbonTabFocusLeft2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Right - 1, rect.Top - 1, rect.Right - 2, rect.Top); @@ -8489,7 +8456,7 @@ protected virtual void DrawRibbonTabFocusLeft2010(Rectangle rect, borderPath.AddLine(rect.Left + 1.75f, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); borderPath.AddLine(rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Right, rect.Top, rect.Left + 1.75f, rect.Top); outsidePath.AddLine(rect.Left + 1.75f, rect.Top, rect.Left, rect.Top + 1); outsidePath.AddLine(rect.Left, rect.Top + 1, rect.Left, rect.Bottom - 2.5f); @@ -8527,9 +8494,9 @@ protected virtual void DrawRibbonTabFocusRight2010(Rectangle rect, Color c3, Color c4, MementoRibbonTabTracking2010 cache) { - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a border pen borderPath.AddLine(rect.Left, rect.Top - 1, rect.Left + 1, rect.Top); @@ -8540,7 +8507,7 @@ protected virtual void DrawRibbonTabFocusRight2010(Rectangle rect, borderPath.AddLine(rect.Right - 2.75f, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 2); borderPath.AddLine(rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); - // Create path for a inside fill + // Create path for an inside fill outsidePath.AddLine(rect.Left, rect.Top, rect.Right - 2.75f, rect.Top); outsidePath.AddLine(rect.Right - 2.75f, rect.Top, rect.Right - 1, rect.Top + 1); outsidePath.AddLine(rect.Right - 1, rect.Top + 1, rect.Right - 1, rect.Bottom - 2.5f); @@ -8573,13 +8540,13 @@ protected virtual void DrawRibbonTabFocusRight2010(Rectangle rect, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabGlowing(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonTabGlowing(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -8628,33 +8595,33 @@ protected virtual IDisposable DrawRibbonTabGlowing(PaletteRibbonShape shape, } // Fill the path area with inside color - context.Graphics.FillPath(cache.InsideBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.InsideBrush!, cache.OutsidePath!); switch (orientation) { case VisualOrientation.Top: // Draw the missing line from the bottom of the inside area - context.Graphics.DrawLine(cache.InsidePen, rect.Left + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); + context.Graphics.DrawLine(cache.InsidePen!, rect.Left + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); break; case VisualOrientation.Left: // Draw the missing line from the right of the inside area - context.Graphics.DrawLine(cache.InsidePen, rect.Right - 2, rect.Top + 1, rect.Right - 2, rect.Bottom - 2); + context.Graphics.DrawLine(cache.InsidePen!, rect.Right - 2, rect.Top + 1, rect.Right - 2, rect.Bottom - 2); break; } // Draw the border over the edge of the inside color - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - context.Graphics.DrawPath(cache.OutsidePen, cache.OutsidePath); + context.Graphics.DrawPath(cache.OutsidePen!, cache.OutsidePath!); } // Draw the top glass effect - context.Graphics.FillPath(cache.TopBrush, cache.TopPath); + context.Graphics.FillPath(cache.TopBrush!, cache.TopPath!); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) { - context.Graphics.FillRectangle(cache.EllipseBrush, cache.FullRect); + context.Graphics.FillRectangle(cache.EllipseBrush!, cache.FullRect); } } @@ -8668,9 +8635,9 @@ protected virtual void DrawRibbonTabGlowingTop(Rectangle rect, Color c1, Color c2, Color insideColor, MementoRibbonTabGlowing cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath topPath = new GraphicsPath(); - GraphicsPath ellipsePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var topPath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); // Create path for a curved border around the tab outsidePath.AddLine(rect.Left, rect.Bottom - 2, rect.Left, rect.Top + 1.5f); @@ -8689,13 +8656,13 @@ protected virtual void DrawRibbonTabGlowingTop(Rectangle rect, topPath.AddLine(rect.Right - 2, rect.Top + 2 + q4, rect.Right - 2, rect.Top + 2); topPath.AddLine(rect.Right - 2, rect.Top + 2, rect.Right - 3, rect.Top + 1); - RectangleF topRectF = new RectangleF(rect.Left, rect.Top, rect.Width, q4 + 5); + var topRectF = new RectangleF(rect.Left, rect.Top, rect.Width, q4 + 5); cache.TopBrush = new LinearGradientBrush(topRectF, c1, Color.Transparent, 90f); - var ellipseWidth = (int)(rect.Width * 1.2f); - var ellipseHeight = (int)(rect.Height * 0.4f); + var ellipseWidth = rect.Width * 1.2f; + var ellipseHeight = rect.Height * 0.4f; cache.FullRect = new RectangleF(rect.Left + 1, rect.Top + 1, rect.Width - 3, rect.Height - 2); - cache.EllipseRect = new RectangleF(rect.Left - ((ellipseWidth - rect.Width) / 2), rect.Bottom - ellipseHeight, ellipseWidth, ellipseHeight * 2); + cache.EllipseRect = new RectangleF(rect.Left - ((ellipseWidth - rect.Width) / 2f), rect.Bottom - ellipseHeight, ellipseWidth, ellipseHeight * 2); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) @@ -8705,10 +8672,10 @@ protected virtual void DrawRibbonTabGlowingTop(Rectangle rect, { CenterColor = c2 }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), cache.EllipseRect.Top + (cache.EllipseRect.Height / 2)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } cache.InsideBrush = new SolidBrush(insideColor); @@ -8726,9 +8693,9 @@ protected virtual void DrawRibbonTabGlowingLeft(Rectangle rect, Color c1, Color c2, Color insideColor, MementoRibbonTabGlowing cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath topPath = new GraphicsPath(); - GraphicsPath ellipsePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var topPath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); // Create path for a curved border around the tab outsidePath.AddLine(rect.Right - 2, rect.Bottom - 1, rect.Left + 1.5f, rect.Bottom - 1); @@ -8747,13 +8714,13 @@ protected virtual void DrawRibbonTabGlowingLeft(Rectangle rect, topPath.AddLine(rect.Left + 2 + q4, rect.Top + 1, rect.Left + 2, rect.Top + 2); topPath.AddLine(rect.Left + 2, rect.Top + 2, rect.Left + 1, rect.Top + 2); - RectangleF topRectF = new RectangleF(rect.Left, rect.Top, q4 + 5, rect.Height); + var topRectF = new RectangleF(rect.Left, rect.Top, q4 + 5, rect.Height); cache.TopBrush = new LinearGradientBrush(topRectF, c1, Color.Transparent, 0f); - var ellipseWidth = (int)(rect.Width * 0.4f); - var ellipseHeight = (int)(rect.Height * 1.2f); + var ellipseWidth = (rect.Width * 0.4f); + var ellipseHeight = (rect.Height * 1.2f); cache.FullRect = new RectangleF(rect.Left + 1, rect.Top + 2, rect.Width - 2, rect.Height - 3); - cache.EllipseRect = new RectangleF(rect.Right - ellipseWidth, rect.Top - ((ellipseHeight - rect.Height) / 2), ellipseWidth * 2, ellipseHeight); + cache.EllipseRect = new RectangleF(rect.Right - ellipseWidth, rect.Top - ((ellipseHeight - rect.Height) / 2f), ellipseWidth * 2, ellipseHeight); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) @@ -8763,10 +8730,10 @@ protected virtual void DrawRibbonTabGlowingLeft(Rectangle rect, { CenterColor = c2 }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), cache.EllipseRect.Top + (cache.EllipseRect.Height / 2)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } cache.InsideBrush = new SolidBrush(insideColor); @@ -8784,9 +8751,9 @@ protected virtual void DrawRibbonTabGlowingRight(Rectangle rect, Color c1, Color c2, Color insideColor, MementoRibbonTabGlowing cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath topPath = new GraphicsPath(); - GraphicsPath ellipsePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var topPath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); // Create path for a curved border around the tab outsidePath.AddLine(rect.Left + 1, rect.Bottom - 1, rect.Right - 2.5f, rect.Bottom - 1); @@ -8805,13 +8772,13 @@ protected virtual void DrawRibbonTabGlowingRight(Rectangle rect, topPath.AddLine(rect.Right - 2 - q4, rect.Top + 1, rect.Right - 2, rect.Top + 2); topPath.AddLine(rect.Right - 2, rect.Top + 2, rect.Right - 1, rect.Top + 2); - RectangleF topRectF = new RectangleF(rect.Right - q4 - 5, rect.Top, q4 + 5, rect.Height); + var topRectF = new RectangleF(rect.Right - q4 - 5, rect.Top, q4 + 5, rect.Height); cache.TopBrush = new LinearGradientBrush(topRectF, c1, Color.Transparent, 180f); - var ellipseWidth = (int)(rect.Width * 0.4f); - var ellipseHeight = (int)(rect.Height * 1.2f); + var ellipseWidth = (rect.Width * 0.4f); + var ellipseHeight = (rect.Height * 1.2f); cache.FullRect = new RectangleF(rect.Left + 1, rect.Top + 2, rect.Width - 2, rect.Height - 3); - cache.EllipseRect = new RectangleF(rect.Left - ellipseWidth, rect.Top - ((ellipseHeight - rect.Height) / 2), ellipseWidth * 2, ellipseHeight); + cache.EllipseRect = new RectangleF(rect.Left - ellipseWidth, rect.Top - ((ellipseHeight - rect.Height) / 2f), ellipseWidth * 2, ellipseHeight); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) @@ -8821,10 +8788,10 @@ protected virtual void DrawRibbonTabGlowingRight(Rectangle rect, { CenterColor = c2 }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), - cache.EllipseRect.Top + (cache.EllipseRect.Height / 2)); + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2f), + cache.EllipseRect.Top + (cache.EllipseRect.Height / 2f)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } cache.InsideBrush = new SolidBrush(insideColor); @@ -8842,9 +8809,9 @@ protected virtual void DrawRibbonTabGlowingBottom(Rectangle rect, Color c1, Color c2, Color insideColor, MementoRibbonTabGlowing cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath topPath = new GraphicsPath(); - GraphicsPath ellipsePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var topPath = new GraphicsPath(); + var ellipsePath = new GraphicsPath(); // Create path for a curved border around the tab outsidePath.AddLine(rect.Left, rect.Top + 1, rect.Left, rect.Bottom - 2.5f); @@ -8863,13 +8830,13 @@ protected virtual void DrawRibbonTabGlowingBottom(Rectangle rect, topPath.AddLine(rect.Right - 2, rect.Bottom - 2 - q4, rect.Right - 2, rect.Bottom - 2); topPath.AddLine(rect.Right - 2, rect.Bottom - 2, rect.Right - 3, rect.Bottom - 1); - RectangleF topRectF = new RectangleF(rect.Left, rect.Bottom - 6 - q4, rect.Width, q4 + 5); + var topRectF = new RectangleF(rect.Left, rect.Bottom - 6 - q4, rect.Width, q4 + 5); cache.TopBrush = new LinearGradientBrush(topRectF, c1, Color.Transparent, 270f); - var ellipseWidth = (int)(rect.Width * 1.2f); - var ellipseHeight = (int)(rect.Height * 0.4f); + var ellipseWidth = (rect.Width * 1.2f); + var ellipseHeight = (rect.Height * 0.4f); cache.FullRect = new RectangleF(rect.Left + 1, rect.Top + 1, rect.Width - 3, rect.Height - 2); - cache.EllipseRect = new RectangleF(rect.Left - ((ellipseWidth - rect.Width) / 2), rect.Top - ellipseHeight, ellipseWidth, ellipseHeight * 2); + cache.EllipseRect = new RectangleF(rect.Left - ((ellipseWidth - rect.Width) / 2f), rect.Top - ellipseHeight, ellipseWidth, ellipseHeight * 2); // Cannot draw a path that contains a zero sized element if (cache.EllipseRect is { Width: > 0, Height: > 0 }) @@ -8879,10 +8846,10 @@ protected virtual void DrawRibbonTabGlowingBottom(Rectangle rect, { CenterColor = c2 }; - PointF centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2), - cache.EllipseRect.Bottom - 1 - (cache.EllipseRect.Height / 2)); + var centerPoint = new PointF(cache.EllipseRect.Left + (cache.EllipseRect.Width / 2f), + cache.EllipseRect.Bottom - 1 - (cache.EllipseRect.Height / 2f)); cache.EllipseBrush.CenterPoint = centerPoint; - cache.EllipseBrush.SurroundColors = new[] { Color.Transparent }; + cache.EllipseBrush.SurroundColors = [Color.Transparent]; } cache.InsideBrush = new SolidBrush(insideColor); @@ -8896,12 +8863,12 @@ protected virtual void DrawRibbonTabGlowingBottom(Rectangle rect, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabSelected2007(RenderContext context, + protected virtual IDisposable? DrawRibbonTabSelected2007(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -8958,12 +8925,12 @@ protected virtual IDisposable DrawRibbonTabSelected2007(RenderContext context, } // Fill the inside of the border - context.Graphics.FillPath(cache.InsideBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.InsideBrush!, cache.OutsidePath!); // Draw the actual border - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - context.Graphics.DrawPath(cache.OutsidePen, cache.OutsidePath); + context.Graphics.DrawPath(cache.OutsidePen!, cache.OutsidePath!); } switch (orientation) @@ -8983,7 +8950,7 @@ protected virtual IDisposable DrawRibbonTabSelected2007(RenderContext context, } // Fill in the center as a vertical gradient from tto bottom - context.Graphics.FillRectangle(cache.CenterBrush, cache.CenterRect); + context.Graphics.FillRectangle(cache.CenterBrush!, cache.CenterRect); } return memento; @@ -8994,9 +8961,9 @@ protected virtual IDisposable DrawRibbonTabSelected2007(RenderContext context, /// protected virtual void DrawRibbonTabSelectedTop2007(Rectangle rect, Color c4, Color c5, - MementoRibbonTabSelected2007 cache) + MementoRibbonTabSelected2007? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 3); @@ -9007,8 +8974,8 @@ protected virtual void DrawRibbonTabSelectedTop2007(Rectangle rect, outsidePath.AddLine(rect.Right - 2, rect.Top + 1.5f, rect.Right - 2, rect.Bottom - 3); outsidePath.AddLine(rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); - cache.CenterRect = new Rectangle(rect.Left + 4, rect.Top + 4, rect.Width - 8, rect.Height - 4); - RectangleF centerRectF = new RectangleF(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, + cache!.CenterRect = new Rectangle(rect.Left + 4, rect.Top + 4, rect.Width - 8, rect.Height - 4); + var centerRectF = new Rectangle(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, cache.CenterRect.Width + 2, cache.CenterRect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c4, c5, 90f); cache.OutsidePath = outsidePath; @@ -9018,26 +8985,29 @@ protected virtual void DrawRibbonTabSelectedTop2007(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabSelectedTopDraw2007(Rectangle rect, - MementoRibbonTabSelected2007 cache, + MementoRibbonTabSelected2007? cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.InsidePen, rect.Left + 1, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 1); - g.DrawLine(cache.InsidePen, rect.Left + 2, rect.Bottom - 2, rect.Right - 3, rect.Bottom - 2); - g.DrawLine(cache.CenterPen, rect.Left + 3, rect.Bottom - 1, rect.Right - 4, rect.Bottom - 1); + if (g is not null && cache is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.InsidePen!, rect.Left + 1, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 1); + g.DrawLine(cache.InsidePen!, rect.Left + 2, rect.Bottom - 2, rect.Right - 3, rect.Bottom - 2); + g.DrawLine(cache.CenterPen!, rect.Left + 3, rect.Bottom - 1, rect.Right - 4, rect.Bottom - 1); - using AntiAlias aa = new AntiAlias(g); - // Draw a line on the inside of the left and right border edges - g.DrawLine(cache.MiddlePen, rect.Left + 0.5f, rect.Bottom - 1, rect.Left + 2, rect.Bottom - 3); - g.DrawLine(cache.MiddlePen, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); - g.DrawLine(cache.MiddlePen, rect.Right - 1.5f, rect.Bottom - 1, rect.Right - 3, rect.Bottom - 3); - g.DrawLine(cache.MiddlePen, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); + using var aa = new AntiAlias(g); + // Draw a line on the inside of the left and right border edges + g.DrawLine(cache.MiddlePen!, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); + g.DrawLine(cache.MiddlePen!, rect.Right - 1.5f, rect.Bottom - 1, rect.Right - 3, rect.Bottom - 3); + g.DrawLine(cache.MiddlePen!, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); + g.DrawLine(cache.MiddlePen!, rect.Left + 0.5f, rect.Bottom - 1, rect.Left + 2, rect.Bottom - 3); - // Draw shadow lines on the outside of the left and right edges - g.DrawLine(_paleShadowPen, rect.Left - 1, rect.Bottom - 2, rect.Left - 1, rect.Top + 8); - g.DrawLine(_lightShadowPen, rect.Left, rect.Bottom - 3, rect.Left, rect.Top + 5); - g.DrawLine(_darkShadowPen, rect.Right - 1, rect.Bottom - 3, rect.Right - 1, rect.Top + 3); - g.DrawLine(_mediumShadowPen, rect.Right, rect.Bottom - 2, rect.Right, rect.Top + 7); + // Draw shadow lines on the outside of the left and right edges + g.DrawLine(_paleShadowPen, rect.Left - 1, rect.Bottom - 2, rect.Left - 1, rect.Top + 8); + g.DrawLine(_lightShadowPen, rect.Left, rect.Bottom - 3, rect.Left, rect.Top + 5); + g.DrawLine(_darkShadowPen, rect.Right - 1, rect.Bottom - 3, rect.Right - 1, rect.Top + 3); + g.DrawLine(_mediumShadowPen, rect.Right, rect.Bottom - 2, rect.Right, rect.Top + 7); + } } /// @@ -9045,9 +9015,9 @@ protected virtual void DrawRibbonTabSelectedTopDraw2007(Rectangle rect, /// protected virtual void DrawRibbonTabSelectedLeft2007(Rectangle rect, Color c4, Color c5, - MementoRibbonTabSelected2007 cache) + MementoRibbonTabSelected2007? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Right - 2, rect.Bottom - 1, rect.Right - 3, rect.Bottom - 2); @@ -9058,8 +9028,8 @@ protected virtual void DrawRibbonTabSelectedLeft2007(Rectangle rect, outsidePath.AddLine(rect.Left + 1.5f, rect.Top + 1, rect.Right - 3, rect.Top + 1); outsidePath.AddLine(rect.Right - 3, rect.Top + 1, rect.Right - 1, rect.Top); - cache.CenterRect = new Rectangle(rect.Left + 4, rect.Top + 4, rect.Width - 4, rect.Height - 8); - RectangleF centerRectF = new RectangleF(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, + cache!.CenterRect = new Rectangle(rect.Left + 4, rect.Top + 4, rect.Width - 4, rect.Height - 8); + var centerRectF = new Rectangle(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, cache.CenterRect.Width + 2, cache.CenterRect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c4, c5, 0f); cache.OutsidePath = outsidePath; @@ -9069,26 +9039,29 @@ protected virtual void DrawRibbonTabSelectedLeft2007(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabSelectedLeftDraw2007(Rectangle rect, - MementoRibbonTabSelected2007 cache, + MementoRibbonTabSelected2007? cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.InsidePen, rect.Right - 1, rect.Bottom - 2, rect.Right - 1, rect.Top + 1); - g.DrawLine(cache.InsidePen, rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 2); - g.DrawLine(cache.CenterPen, rect.Right - 1, rect.Bottom - 4, rect.Right - 1, rect.Top + 3); + if (g is not null && cache is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.InsidePen!, rect.Right - 1, rect.Bottom - 2, rect.Right - 1, rect.Top + 1); + g.DrawLine(cache.InsidePen!, rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 2); + g.DrawLine(cache.CenterPen!, rect.Right - 1, rect.Bottom - 4, rect.Right - 1, rect.Top + 3); - using AntiAlias aa = new AntiAlias(g); - // Draw a line on the inside of the left and right border edges - g.DrawLine(cache.MiddlePen, rect.Right - 1, rect.Bottom - 1.5f, rect.Right - 3, rect.Bottom - 3); - g.DrawLine(cache.MiddlePen, rect.Right - 3, rect.Bottom - 3, rect.Left + 2, rect.Bottom - 3); - g.DrawLine(cache.MiddlePen, rect.Right - 1, rect.Top + 0.5f, rect.Right - 3, rect.Top + 2); - g.DrawLine(cache.MiddlePen, rect.Right - 3, rect.Top + 2, rect.Left + 2, rect.Top + 2); + using var aa = new AntiAlias(g); + // Draw a line on the inside of the left and right border edges + g.DrawLine(cache.MiddlePen!, rect.Right - 1, rect.Bottom - 1.5f, rect.Right - 3, rect.Bottom - 3); + g.DrawLine(cache.MiddlePen!, rect.Right - 3, rect.Bottom - 3, rect.Left + 2, rect.Bottom - 3); + g.DrawLine(cache.MiddlePen!, rect.Right - 1, rect.Top + 0.5f, rect.Right - 3, rect.Top + 2); + g.DrawLine(cache.MiddlePen!, rect.Right - 3, rect.Top + 2, rect.Left + 2, rect.Top + 2); - // Draw shadow lines on the outside of the left and right edges - g.DrawLine(_paleShadowPen, rect.Right - 2, rect.Bottom, rect.Left + 8, rect.Bottom); - g.DrawLine(_lightShadowPen, rect.Right - 3, rect.Bottom - 1, rect.Left + 5, rect.Bottom - 1); - g.DrawLine(_darkShadowPen, rect.Right - 3, rect.Top, rect.Left + 3, rect.Top); - g.DrawLine(_mediumShadowPen, rect.Right - 2, rect.Top - 1, rect.Left + 7, rect.Top - 1); + // Draw shadow lines on the outside of the left and right edges + g.DrawLine(_paleShadowPen, rect.Right - 2, rect.Bottom, rect.Left + 8, rect.Bottom); + g.DrawLine(_lightShadowPen, rect.Right - 3, rect.Bottom - 1, rect.Left + 5, rect.Bottom - 1); + g.DrawLine(_darkShadowPen, rect.Right - 3, rect.Top, rect.Left + 3, rect.Top); + g.DrawLine(_mediumShadowPen, rect.Right - 2, rect.Top - 1, rect.Left + 7, rect.Top - 1); + } } /// @@ -9096,9 +9069,9 @@ protected virtual void DrawRibbonTabSelectedLeftDraw2007(Rectangle rect, /// protected virtual void DrawRibbonTabSelectedRight2007(Rectangle rect, Color c4, Color c5, - MementoRibbonTabSelected2007 cache) + MementoRibbonTabSelected2007? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left + 1, rect.Bottom - 1, rect.Left + 2, rect.Bottom - 2); @@ -9109,8 +9082,8 @@ protected virtual void DrawRibbonTabSelectedRight2007(Rectangle rect, outsidePath.AddLine(rect.Right - 2.5f, rect.Top + 1, rect.Left + 2, rect.Top + 1); outsidePath.AddLine(rect.Left + 2, rect.Top + 1, rect.Left, rect.Top); - cache.CenterRect = new Rectangle(rect.Left, rect.Top + 4, rect.Width - 4, rect.Height - 8); - RectangleF centerRectF = new RectangleF(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, + cache!.CenterRect = new Rectangle(rect.Left, rect.Top + 4, rect.Width - 4, rect.Height - 8); + var centerRectF = new RectangleF(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, cache.CenterRect.Width + 2, cache.CenterRect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c4, c5, 180f); cache.OutsidePath = outsidePath; @@ -9120,26 +9093,29 @@ protected virtual void DrawRibbonTabSelectedRight2007(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabSelectedRightDraw2007(Rectangle rect, - MementoRibbonTabSelected2007 cache, + MementoRibbonTabSelected2007? cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.InsidePen, rect.Left, rect.Bottom - 2, rect.Left, rect.Top + 1); - g.DrawLine(cache.InsidePen, rect.Left + 1, rect.Bottom - 3, rect.Left + 1, rect.Top + 2); - g.DrawLine(cache.CenterPen, rect.Left, rect.Bottom - 4, rect.Left, rect.Top + 3); + if (g is not null && cache is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.InsidePen!, rect.Left, rect.Bottom - 2, rect.Left, rect.Top + 1); + g.DrawLine(cache.InsidePen!, rect.Left + 1, rect.Bottom - 3, rect.Left + 1, rect.Top + 2); + g.DrawLine(cache.CenterPen!, rect.Left, rect.Bottom - 4, rect.Left, rect.Top + 3); - using AntiAlias aa = new AntiAlias(g); - // Draw a line on the inside of the left and right border edges - g.DrawLine(cache.MiddlePen, rect.Left, rect.Bottom - 1.5f, rect.Left + 2, rect.Bottom - 3); - g.DrawLine(cache.MiddlePen, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); - g.DrawLine(cache.MiddlePen, rect.Left, rect.Top + 0.5f, rect.Left + 2, rect.Top + 2); - g.DrawLine(cache.MiddlePen, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); + using var aa = new AntiAlias(g); + // Draw a line on the inside of the left and right border edges + g.DrawLine(cache.MiddlePen!, rect.Left, rect.Bottom - 1.5f, rect.Left + 2, rect.Bottom - 3); + g.DrawLine(cache.MiddlePen!, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); + g.DrawLine(cache.MiddlePen!, rect.Left, rect.Top + 0.5f, rect.Left + 2, rect.Top + 2); + g.DrawLine(cache.MiddlePen!, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); - // Draw shadow lines on the outside of the left and right edges - g.DrawLine(_paleShadowPen, rect.Left + 1, rect.Bottom, rect.Right - 9, rect.Bottom); - g.DrawLine(_lightShadowPen, rect.Left + 2, rect.Bottom - 1, rect.Right - 6, rect.Bottom - 1); - g.DrawLine(_darkShadowPen, rect.Left + 2, rect.Top, rect.Right - 4, rect.Top); - g.DrawLine(_mediumShadowPen, rect.Left + 1, rect.Top - 1, rect.Right - 8, rect.Top - 1); + // Draw shadow lines on the outside of the left and right edges + g.DrawLine(_paleShadowPen, rect.Left + 1, rect.Bottom, rect.Right - 9, rect.Bottom); + g.DrawLine(_lightShadowPen, rect.Left + 2, rect.Bottom - 1, rect.Right - 6, rect.Bottom - 1); + g.DrawLine(_darkShadowPen, rect.Left + 2, rect.Top, rect.Right - 4, rect.Top); + g.DrawLine(_mediumShadowPen, rect.Left + 1, rect.Top - 1, rect.Right - 8, rect.Top - 1); + } } /// @@ -9147,9 +9123,9 @@ protected virtual void DrawRibbonTabSelectedRightDraw2007(Rectangle rect, /// protected virtual void DrawRibbonTabSelectedBottom2007(Rectangle rect, Color c4, Color c5, - MementoRibbonTabSelected2007 cache) + MementoRibbonTabSelected2007? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left, rect.Top + 1, rect.Left + 1, rect.Top + 2); @@ -9160,8 +9136,8 @@ protected virtual void DrawRibbonTabSelectedBottom2007(Rectangle rect, outsidePath.AddLine(rect.Right - 2, rect.Bottom - 2.5f, rect.Right - 2, rect.Top + 2); outsidePath.AddLine(rect.Right - 2, rect.Top + 2, rect.Right - 1, rect.Top + 1); - cache.CenterRect = new Rectangle(rect.Left + 4, rect.Top, rect.Width - 8, rect.Height - 4); - RectangleF centerRectF = new RectangleF(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, + cache!.CenterRect = new Rectangle(rect.Left + 4, rect.Top, rect.Width - 8, rect.Height - 4); + var centerRectF = new Rectangle(cache.CenterRect.Left - 1, cache.CenterRect.Top - 1, cache.CenterRect.Width + 2, cache.CenterRect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c4, c5, 270f); cache.OutsidePath = outsidePath; @@ -9171,37 +9147,40 @@ protected virtual void DrawRibbonTabSelectedBottom2007(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabSelectedBottomDraw2007(Rectangle rect, - MementoRibbonTabSelected2007 cache, + MementoRibbonTabSelected2007? cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.InsidePen, rect.Left + 1, rect.Top, rect.Right - 2, rect.Top); - g.DrawLine(cache.InsidePen, rect.Left + 2, rect.Top + 1, rect.Right - 3, rect.Top + 1); - g.DrawLine(cache.CenterPen, rect.Left + 3, rect.Top, rect.Right - 4, rect.Top); + if (cache is not null && g is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.InsidePen!, rect.Left + 1, rect.Top, rect.Right - 2, rect.Top); + g.DrawLine(cache.InsidePen!, rect.Left + 2, rect.Top + 1, rect.Right - 3, rect.Top + 1); + g.DrawLine(cache.CenterPen!, rect.Left + 3, rect.Top, rect.Right - 4, rect.Top); - using AntiAlias aa = new AntiAlias(g); - // Draw a line on the inside of the left and right border edges - g.DrawLine(cache.MiddlePen, rect.Left + 0.5f, rect.Top, rect.Left + 2, rect.Top + 2); - g.DrawLine(cache.MiddlePen, rect.Left + 2, rect.Top + 2, rect.Left + 2, rect.Bottom - 3); - g.DrawLine(cache.MiddlePen, rect.Right - 1.5f, rect.Top, rect.Right - 3, rect.Top + 2); - g.DrawLine(cache.MiddlePen, rect.Right - 3, rect.Top + 2, rect.Right - 3, rect.Bottom - 3); + using var aa = new AntiAlias(g); + // Draw a line on the inside of the left and right border edges + g.DrawLine(cache.MiddlePen!, rect.Left + 0.5f, rect.Top, rect.Left + 2, rect.Top + 2); + g.DrawLine(cache.MiddlePen!, rect.Left + 2, rect.Top + 2, rect.Left + 2, rect.Bottom - 3); + g.DrawLine(cache.MiddlePen!, rect.Right - 1.5f, rect.Top, rect.Right - 3, rect.Top + 2); + g.DrawLine(cache.MiddlePen!, rect.Right - 3, rect.Top + 2, rect.Right - 3, rect.Bottom - 3); - // Draw shadow lines on the outside of the left and right edges - g.DrawLine(_paleShadowPen, rect.Left - 1, rect.Top + 1, rect.Left - 1, rect.Bottom - 9); - g.DrawLine(_lightShadowPen, rect.Left, rect.Top + 2, rect.Left, rect.Bottom - 6); - g.DrawLine(_darkShadowPen, rect.Right - 1, rect.Top + 2, rect.Right - 1, rect.Bottom - 4); - g.DrawLine(_mediumShadowPen, rect.Right, rect.Top + 1, rect.Right, rect.Bottom - 8); + // Draw shadow lines on the outside of the left and right edges + g.DrawLine(_paleShadowPen, rect.Left - 1, rect.Top + 1, rect.Left - 1, rect.Bottom - 9); + g.DrawLine(_lightShadowPen, rect.Left, rect.Top + 2, rect.Left, rect.Bottom - 6); + g.DrawLine(_darkShadowPen, rect.Right - 1, rect.Top + 2, rect.Right - 1, rect.Bottom - 4); + g.DrawLine(_mediumShadowPen, rect.Right, rect.Top + 1, rect.Right, rect.Bottom - 8); + } } /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabSelected2010(RenderContext context, + protected virtual IDisposable? DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento, + IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) @@ -9236,7 +9215,7 @@ protected virtual IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.Dispose(); // If we have a context color to use then modify the drawing colors - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -9266,16 +9245,16 @@ protected virtual IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.CenterPen = new Pen(c4); } - context.Graphics.FillPath(cache.CenterBrush, cache.OutsidePath); + context.Graphics.FillPath(cache.CenterBrush!, cache.OutsidePath!); - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { - context.Graphics.FillPath(cache.InsideBrush, cache.InsidePath); + context.Graphics.FillPath(cache.InsideBrush!, cache.InsidePath!); } - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - context.Graphics.DrawPath(cache.OutsidePen, cache.OutsidePath); + context.Graphics.DrawPath(cache.OutsidePen!, cache.OutsidePath!); } switch (orientation) @@ -9305,8 +9284,8 @@ protected virtual void DrawRibbonTabSelectedTop2010(Rectangle rect, Color c2, Color c3, Color c5, MementoRibbonTabSelected2010 cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 3); @@ -9317,7 +9296,7 @@ protected virtual void DrawRibbonTabSelectedTop2010(Rectangle rect, outsidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Right - 2, rect.Bottom - 3); outsidePath.AddLine(rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); - RectangleF centerRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var centerRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c2, c3, 90f) { Blend = _ribbonTabSelected1Blend @@ -9339,7 +9318,7 @@ protected virtual void DrawRibbonTabSelectedTop2010(Rectangle rect, insidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Right - 2, rect.Bottom - 3); insidePath.AddLine(rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); - RectangleF insideRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var insideRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.InsideBrush = new LinearGradientBrush(insideRectF, Color.FromArgb(32, c5), Color.Transparent, 90f) { Blend = _ribbonTabSelected2Blend @@ -9354,14 +9333,17 @@ protected virtual void DrawRibbonTabSelectedTopDraw2010(Rectangle rect, MementoRibbonTabSelected2010 cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.CenterPen, rect.Left + 2, rect.Bottom - 2, rect.Right - 3, rect.Bottom - 2); - g.DrawLine(cache.CenterPen, rect.Left + 1, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 1); + if (g is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.CenterPen!, rect.Left + 2, rect.Bottom - 2, rect.Right - 3, rect.Bottom - 2); + g.DrawLine(cache.CenterPen!, rect.Left + 1, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 1); - using AntiAlias aa = new AntiAlias(g); - // Draw shadow lines on the outside of the left and right edges - g.DrawLine(_mediumShadowPen, rect.Left, rect.Bottom - 3, rect.Left, rect.Top + 2); - g.DrawLine(_mediumShadowPen, rect.Right - 1, rect.Bottom - 3, rect.Right - 1, rect.Top + 2); + using var aa = new AntiAlias(g); + // Draw shadow lines on the outside of the left and right edges + g.DrawLine(_mediumShadowPen, rect.Left, rect.Bottom - 3, rect.Left, rect.Top + 2); + g.DrawLine(_mediumShadowPen, rect.Right - 1, rect.Bottom - 3, rect.Right - 1, rect.Top + 2); + } } /// @@ -9371,8 +9353,8 @@ protected virtual void DrawRibbonTabSelectedLeft2010(Rectangle rect, Color c2, Color c3, Color c5, MementoRibbonTabSelected2010 cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Right - 2, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 2); @@ -9383,7 +9365,7 @@ protected virtual void DrawRibbonTabSelectedLeft2010(Rectangle rect, outsidePath.AddLine(rect.Left + 1, rect.Top + 1, rect.Right - 2, rect.Top + 1); outsidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Right - 2, rect.Top); - RectangleF centerRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var centerRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c2, c3, 0f) { Blend = _ribbonTabSelected1Blend @@ -9405,7 +9387,7 @@ protected virtual void DrawRibbonTabSelectedLeft2010(Rectangle rect, insidePath.AddLine(rect.Left + 1, rect.Top + 1, rect.Right - 2, rect.Top + 1); insidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Right - 2, rect.Top); - RectangleF insideRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var insideRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.InsideBrush = new LinearGradientBrush(insideRectF, Color.FromArgb(32, c5), Color.Transparent, 0f) { Blend = _ribbonTabSelected2Blend @@ -9420,14 +9402,17 @@ protected virtual void DrawRibbonTabSelectedLeftDraw2010(Rectangle rect, MementoRibbonTabSelected2010 cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.CenterPen, rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 2); - g.DrawLine(cache.CenterPen, rect.Right - 1, rect.Bottom - 2, rect.Right - 1, rect.Top + 1); + if (g is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.CenterPen!, rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 2); + g.DrawLine(cache.CenterPen!, rect.Right - 1, rect.Bottom - 2, rect.Right - 1, rect.Top + 1); - using AntiAlias aa = new AntiAlias(g); - // Draw shadow lines on the outside of the top and bottom edges - g.DrawLine(_mediumShadowPen, rect.Right - 3, rect.Bottom - 1, rect.Left + 3, rect.Bottom - 1); - g.DrawLine(_mediumShadowPen, rect.Right - 3, rect.Top, rect.Left + 3, rect.Top); + using var aa = new AntiAlias(g); + // Draw shadow lines on the outside of the top and bottom edges + g.DrawLine(_mediumShadowPen, rect.Right - 3, rect.Bottom - 1, rect.Left + 3, rect.Bottom - 1); + g.DrawLine(_mediumShadowPen, rect.Right - 3, rect.Top, rect.Left + 3, rect.Top); + } } /// @@ -9437,8 +9422,8 @@ protected virtual void DrawRibbonTabSelectedRight2010(Rectangle rect, Color c2, Color c3, Color c5, MementoRibbonTabSelected2010 cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left + 1, rect.Bottom - 1, rect.Left + 1, rect.Bottom - 2); @@ -9449,7 +9434,7 @@ protected virtual void DrawRibbonTabSelectedRight2010(Rectangle rect, outsidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Left + 1, rect.Top + 1); outsidePath.AddLine(rect.Left + 1, rect.Top + 1, rect.Left + 1, rect.Top); - RectangleF centerRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var centerRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c2, c3, 180f) { Blend = _ribbonTabSelected1Blend @@ -9470,7 +9455,7 @@ protected virtual void DrawRibbonTabSelectedRight2010(Rectangle rect, insidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Left + 1, rect.Top + 1); insidePath.AddLine(rect.Left + 1, rect.Top + 1, rect.Left + 1, rect.Top); - RectangleF insideRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var insideRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.InsideBrush = new LinearGradientBrush(insideRectF, Color.FromArgb(32, c5), Color.Transparent, 180f) { Blend = _ribbonTabSelected2Blend @@ -9486,14 +9471,17 @@ protected virtual void DrawRibbonTabSelectedRightDraw2010(Rectangle rect, MementoRibbonTabSelected2010 cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.CenterPen, rect.Left + 1, rect.Bottom - 3, rect.Left + 1, rect.Top + 2); - g.DrawLine(cache.CenterPen, rect.Left, rect.Bottom - 2, rect.Left, rect.Top + 1); + if (g is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.CenterPen!, rect.Left + 1, rect.Bottom - 3, rect.Left + 1, rect.Top + 2); + g.DrawLine(cache.CenterPen!, rect.Left, rect.Bottom - 2, rect.Left, rect.Top + 1); - using AntiAlias aa = new AntiAlias(g); - // Draw shadow lines on the outside of the top and bottom edges - g.DrawLine(_mediumShadowPen, rect.Left + 2, rect.Bottom - 1, rect.Right - 4, rect.Bottom - 1); - g.DrawLine(_mediumShadowPen, rect.Left + 2, rect.Top, rect.Right - 4, rect.Top); + using var aa = new AntiAlias(g); + // Draw shadow lines on the outside of the top and bottom edges + g.DrawLine(_mediumShadowPen, rect.Left + 2, rect.Bottom - 1, rect.Right - 4, rect.Bottom - 1); + g.DrawLine(_mediumShadowPen, rect.Left + 2, rect.Top, rect.Right - 4, rect.Top); + } } /// @@ -9503,8 +9491,8 @@ protected virtual void DrawRibbonTabSelectedBottom2010(Rectangle rect, Color c2, Color c3, Color c5, MementoRibbonTabSelected2010 cache) { - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left, rect.Top + 1, rect.Left + 1, rect.Top + 1); @@ -9515,7 +9503,7 @@ protected virtual void DrawRibbonTabSelectedBottom2010(Rectangle rect, outsidePath.AddLine(rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 1); outsidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top + 1); - RectangleF centerRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var centerRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.CenterBrush = new LinearGradientBrush(centerRectF, c2, c3, 270f) { Blend = _ribbonTabSelected1Blend @@ -9536,7 +9524,7 @@ protected virtual void DrawRibbonTabSelectedBottom2010(Rectangle rect, insidePath.AddLine(rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 1); insidePath.AddLine(rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top + 1); - RectangleF insideRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var insideRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.InsideBrush = new LinearGradientBrush(insideRectF, Color.FromArgb(32, c5), Color.Transparent, 270f) { Blend = _ribbonTabSelected2Blend @@ -9551,26 +9539,29 @@ protected virtual void DrawRibbonTabSelectedBottomDraw2010(Rectangle rect, MementoRibbonTabSelected2010 cache, Graphics? g) { - // Fill in the bottom two lines that the 'FillPath' above missed - g.DrawLine(cache.CenterPen, rect.Left + 2, rect.Top + 1, rect.Right - 3, rect.Top + 1); - g.DrawLine(cache.CenterPen, rect.Left + 1, rect.Top, rect.Right - 2, rect.Top); + if (g is not null) + { + // Fill in the bottom two lines that the 'FillPath' above missed + g.DrawLine(cache.CenterPen!, rect.Left + 2, rect.Top + 1, rect.Right - 3, rect.Top + 1); + g.DrawLine(cache.CenterPen!, rect.Left + 1, rect.Top, rect.Right - 2, rect.Top); - using AntiAlias aa = new AntiAlias(g); - // Draw shadow lines on the outside of the left and right edges - g.DrawLine(_mediumShadowPen, rect.Left, rect.Top + 2, rect.Left, rect.Bottom - 4); - g.DrawLine(_mediumShadowPen, rect.Right - 1, rect.Top + 2, rect.Right - 1, rect.Bottom - 4); + using var aa = new AntiAlias(g); + // Draw shadow lines on the outside of the left and right edges + g.DrawLine(_mediumShadowPen, rect.Left, rect.Top + 2, rect.Left, rect.Bottom - 4); + g.DrawLine(_mediumShadowPen, rect.Right - 1, rect.Top + 2, rect.Right - 1, rect.Bottom - 4); + } } /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabContextSelected(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonTabContextSelected(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -9626,12 +9617,12 @@ protected virtual IDisposable DrawRibbonTabContextSelected(PaletteRibbonShape sh // Fill the interior using a gradient brush context.Graphics.FillRectangle(Brushes.White, cache.InteriorRect); - context.Graphics.FillRectangle(cache.InsideBrush, cache.InteriorRect); + context.Graphics.FillRectangle(cache.InsideBrush!, cache.InteriorRect); // Draw the actual border - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { - context.Graphics.DrawPath(cache.OutsidePen, cache.OutsidePath); + context.Graphics.DrawPath(cache.OutsidePen!, cache.OutsidePath!); } switch (orientation) @@ -9659,9 +9650,9 @@ protected virtual IDisposable DrawRibbonTabContextSelected(PaletteRibbonShape sh /// protected virtual void DrawRibbonTabContextSelectedTop(Rectangle rect, Color c2, - MementoRibbonTabContextSelected cache) + MementoRibbonTabContextSelected? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 3); @@ -9672,11 +9663,9 @@ protected virtual void DrawRibbonTabContextSelectedTop(Rectangle rect, outsidePath.AddLine(rect.Right - 2, rect.Top + 1.5f, rect.Right - 2, rect.Bottom - 3); outsidePath.AddLine(rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); - LinearGradientBrush leftBrush = - new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 90f); - LinearGradientBrush rightBrush = - new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 90f); - cache.LeftPen = new Pen(leftBrush); + var leftBrush = new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 90f); + var rightBrush = new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 90f); + cache!.LeftPen = new Pen(leftBrush); cache.RightPen = new Pen(rightBrush); cache.InteriorRect = new Rectangle(rect.Left + 2, rect.Top + 3, rect.Width - 4, rect.Height - 3); @@ -9688,27 +9677,30 @@ protected virtual void DrawRibbonTabContextSelectedTop(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabContextSelectedTopDraw(Rectangle rect, - MementoRibbonTabContextSelected cache, + MementoRibbonTabContextSelected? cache, Graphics? g) { - g.DrawLine(Pens.White, rect.Left + 2, rect.Top + 3, rect.Right - 3, rect.Top + 3); - g.DrawLine(cache.L3, rect.Left + 2, rect.Top + 3, rect.Right - 3, rect.Top + 3); - g.DrawLine(Pens.White, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); - g.DrawLine(cache.L2, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); - g.DrawLine(Pens.White, rect.Left + 3, rect.Top + 1, rect.Right - 4, rect.Top + 1); - g.DrawLine(cache.L1, rect.Left + 3, rect.Top + 1, rect.Right - 4, rect.Top + 1); + if (cache is not null && g is not null) + { + g.DrawLine(Pens.White, rect.Left + 2, rect.Top + 3, rect.Right - 3, rect.Top + 3); + g.DrawLine(cache.L3!, rect.Left + 2, rect.Top + 3, rect.Right - 3, rect.Top + 3); + g.DrawLine(Pens.White, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); + g.DrawLine(cache.L2!, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); + g.DrawLine(Pens.White, rect.Left + 3, rect.Top + 1, rect.Right - 4, rect.Top + 1); + g.DrawLine(cache.L1!, rect.Left + 3, rect.Top + 1, rect.Right - 4, rect.Top + 1); - // Draw the inside left, right and then bottom borders - g.DrawLine(cache.LeftPen, rect.Left + 2, rect.Top + 4, rect.Left + 2, rect.Bottom - 3); - g.DrawLine(cache.RightPen, rect.Right - 3, rect.Top + 2, rect.Right - 3, rect.Bottom - 3); - g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 1); - g.DrawLine(cache.BottomInnerPen, rect.Left + 2, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 1); - g.DrawLine(Pens.White, rect.Right - 3, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 1); - g.DrawLine(cache.BottomInnerPen, rect.Right - 3, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 1); - g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); - g.DrawLine(cache.BottomOuterPen, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); - g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); - g.DrawLine(cache.BottomOuterPen, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); + // Draw the inside left, right and then bottom borders + g.DrawLine(cache.LeftPen!, rect.Left + 2, rect.Top + 4, rect.Left + 2, rect.Bottom - 3); + g.DrawLine(cache.RightPen!, rect.Right - 3, rect.Top + 2, rect.Right - 3, rect.Bottom - 3); + g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 1); + g.DrawLine(cache.BottomInnerPen!, rect.Left + 2, rect.Bottom - 2, rect.Left + 1, rect.Bottom - 1); + g.DrawLine(Pens.White, rect.Right - 3, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 1); + g.DrawLine(cache.BottomInnerPen!, rect.Right - 3, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 1); + g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); + g.DrawLine(cache.BottomOuterPen!, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); + g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); + g.DrawLine(cache.BottomOuterPen!, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); + } } /// @@ -9716,9 +9708,9 @@ protected virtual void DrawRibbonTabContextSelectedTopDraw(Rectangle rect, /// protected virtual void DrawRibbonTabContextSelectedLeft(Rectangle rect, Color c2, - MementoRibbonTabContextSelected cache) + MementoRibbonTabContextSelected? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Right - 2, rect.Bottom - 1, rect.Right - 3, rect.Bottom - 2); @@ -9729,11 +9721,9 @@ protected virtual void DrawRibbonTabContextSelectedLeft(Rectangle rect, outsidePath.AddLine(rect.Left + 1.5f, rect.Top + 1, rect.Right - 3, rect.Top + 1); outsidePath.AddLine(rect.Right - 3, rect.Top + 1, rect.Right - 2, rect.Top); - LinearGradientBrush leftBrush = - new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 0f); - LinearGradientBrush rightBrush = - new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 0f); - cache.LeftPen = new Pen(leftBrush); + var leftBrush = new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 0f); + var rightBrush = new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 0f); + cache!.LeftPen = new Pen(leftBrush); cache.RightPen = new Pen(rightBrush); cache.InteriorRect = new Rectangle(rect.Left + 3, rect.Top + 2, rect.Width - 3, rect.Height - 4); @@ -9745,27 +9735,30 @@ protected virtual void DrawRibbonTabContextSelectedLeft(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabContextSelectedLeftDraw(Rectangle rect, - MementoRibbonTabContextSelected cache, + MementoRibbonTabContextSelected? cache, Graphics? g) { - g.DrawLine(Pens.White, rect.Left + 3, rect.Bottom - 3, rect.Left + 3, rect.Top + 2); - g.DrawLine(cache.L3, rect.Left + 3, rect.Bottom - 3, rect.Left + 3, rect.Top + 2); - g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); - g.DrawLine(cache.L2, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); - g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 4, rect.Left + 1, rect.Top + 3); - g.DrawLine(cache.L1, rect.Left + 1, rect.Bottom - 4, rect.Left + 1, rect.Top + 3); + if (g is not null && cache is not null) + { + g.DrawLine(Pens.White, rect.Left + 3, rect.Bottom - 3, rect.Left + 3, rect.Top + 2); + g.DrawLine(cache.L3!, rect.Left + 3, rect.Bottom - 3, rect.Left + 3, rect.Top + 2); + g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); + g.DrawLine(cache.L2!, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); + g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 4, rect.Left + 1, rect.Top + 3); + g.DrawLine(cache.L1!, rect.Left + 1, rect.Bottom - 4, rect.Left + 1, rect.Top + 3); - // Draw the inside left, right and then bottom borders - g.DrawLine(cache.LeftPen, rect.Left + 4, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); - g.DrawLine(cache.RightPen, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); - g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); - g.DrawLine(cache.BottomInnerPen, rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); - g.DrawLine(Pens.White, rect.Right - 2, rect.Top + 2, rect.Right - 1, rect.Top + 1); - g.DrawLine(cache.BottomInnerPen, rect.Right - 2, rect.Top + 2, rect.Right - 1, rect.Top + 1); - g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); - g.DrawLine(cache.BottomOuterPen, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); - g.DrawLine(Pens.White, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); - g.DrawLine(cache.BottomOuterPen, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); + // Draw the inside left, right and then bottom borders + g.DrawLine(cache.LeftPen!, rect.Left + 4, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); + g.DrawLine(cache.RightPen!, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); + g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); + g.DrawLine(cache.BottomInnerPen!, rect.Right - 2, rect.Bottom - 3, rect.Right - 1, rect.Bottom - 2); + g.DrawLine(Pens.White, rect.Right - 2, rect.Top + 2, rect.Right - 1, rect.Top + 1); + g.DrawLine(cache.BottomInnerPen!, rect.Right - 2, rect.Top + 2, rect.Right - 1, rect.Top + 1); + g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); + g.DrawLine(cache.BottomOuterPen!, rect.Right - 2, rect.Bottom - 2, rect.Right - 1, rect.Bottom - 1); + g.DrawLine(Pens.White, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); + g.DrawLine(cache.BottomOuterPen!, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); + } } /// @@ -9773,9 +9766,9 @@ protected virtual void DrawRibbonTabContextSelectedLeftDraw(Rectangle rect, /// protected virtual void DrawRibbonTabContextSelectedRight(Rectangle rect, Color c2, - MementoRibbonTabContextSelected cache) + MementoRibbonTabContextSelected? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left + 1, rect.Bottom - 1, rect.Left + 2, rect.Bottom - 2); @@ -9786,11 +9779,9 @@ protected virtual void DrawRibbonTabContextSelectedRight(Rectangle rect, outsidePath.AddLine(rect.Right - 2.5f, rect.Top + 1, rect.Left + 2, rect.Top + 1); outsidePath.AddLine(rect.Left + 2, rect.Top + 1, rect.Left + 1, rect.Top); - LinearGradientBrush leftBrush = - new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 180f); - LinearGradientBrush rightBrush = - new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 180f); - cache.LeftPen = new Pen(leftBrush); + var leftBrush = new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 180f); + var rightBrush = new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 180f); + cache!.LeftPen = new Pen(leftBrush); cache.RightPen = new Pen(rightBrush); cache.InteriorRect = new Rectangle(rect.Left, rect.Top + 2, rect.Width - 3, rect.Height - 4); @@ -9802,27 +9793,30 @@ protected virtual void DrawRibbonTabContextSelectedRight(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabContextSelectedRightDraw(Rectangle rect, - MementoRibbonTabContextSelected cache, + MementoRibbonTabContextSelected? cache, Graphics? g) { - g.DrawLine(Pens.White, rect.Right - 4, rect.Bottom - 3, rect.Right - 4, rect.Top + 2); - g.DrawLine(cache.L3, rect.Right - 4, rect.Bottom - 3, rect.Right - 4, rect.Top + 2); - g.DrawLine(Pens.White, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); - g.DrawLine(cache.L2, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); - g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 4, rect.Right - 2, rect.Top + 3); - g.DrawLine(cache.L1, rect.Right - 2, rect.Bottom - 4, rect.Right - 2, rect.Top + 3); + if (g is not null && cache is not null) + { + g.DrawLine(Pens.White, rect.Right - 4, rect.Bottom - 3, rect.Right - 4, rect.Top + 2); + g.DrawLine(cache.L3!, rect.Right - 4, rect.Bottom - 3, rect.Right - 4, rect.Top + 2); + g.DrawLine(Pens.White, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); + g.DrawLine(cache.L2!, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); + g.DrawLine(Pens.White, rect.Right - 2, rect.Bottom - 4, rect.Right - 2, rect.Top + 3); + g.DrawLine(cache.L1!, rect.Right - 2, rect.Bottom - 4, rect.Right - 2, rect.Top + 3); - // Draw the inside left, right and then bottom borders - g.DrawLine(cache.LeftPen, rect.Right - 5, rect.Bottom - 3, rect.Left + 2, rect.Bottom - 3); - g.DrawLine(cache.RightPen, rect.Right - 3, rect.Top + 2, rect.Left + 2, rect.Top + 2); - g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 3, rect.Left, rect.Bottom - 2); - g.DrawLine(cache.BottomInnerPen, rect.Left + 1, rect.Bottom - 3, rect.Left, rect.Bottom - 2); - g.DrawLine(Pens.White, rect.Left + 1, rect.Top + 2, rect.Left, rect.Top + 1); - g.DrawLine(cache.BottomInnerPen, rect.Left + 1, rect.Top + 2, rect.Left, rect.Top + 1); - g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); - g.DrawLine(cache.BottomOuterPen, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); - g.DrawLine(Pens.White, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); - g.DrawLine(cache.BottomOuterPen, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); + // Draw the inside left, right and then bottom borders + g.DrawLine(cache.LeftPen!, rect.Right - 5, rect.Bottom - 3, rect.Left + 2, rect.Bottom - 3); + g.DrawLine(cache.RightPen!, rect.Right - 3, rect.Top + 2, rect.Left + 2, rect.Top + 2); + g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 3, rect.Left, rect.Bottom - 2); + g.DrawLine(cache.BottomInnerPen!, rect.Left + 1, rect.Bottom - 3, rect.Left, rect.Bottom - 2); + g.DrawLine(Pens.White, rect.Left + 1, rect.Top + 2, rect.Left, rect.Top + 1); + g.DrawLine(cache.BottomInnerPen!, rect.Left + 1, rect.Top + 2, rect.Left, rect.Top + 1); + g.DrawLine(Pens.White, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); + g.DrawLine(cache.BottomOuterPen!, rect.Left + 1, rect.Bottom - 2, rect.Left, rect.Bottom - 1); + g.DrawLine(Pens.White, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); + g.DrawLine(cache.BottomOuterPen!, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); + } } /// @@ -9830,9 +9824,9 @@ protected virtual void DrawRibbonTabContextSelectedRightDraw(Rectangle rect, /// protected virtual void DrawRibbonTabContextSelectedBottom(Rectangle rect, Color c2, - MementoRibbonTabContextSelected cache) + MementoRibbonTabContextSelected? cache) { - GraphicsPath outsidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); // Create path for a curved dark border around the tab outsidePath.AddLine(rect.Left, rect.Top + 1, rect.Left + 1, rect.Top + 2); @@ -9843,11 +9837,9 @@ protected virtual void DrawRibbonTabContextSelectedBottom(Rectangle rect, outsidePath.AddLine(rect.Right - 2, rect.Bottom - 2.5f, rect.Right - 2, rect.Top + 2); outsidePath.AddLine(rect.Right - 2, rect.Top + 2, rect.Right - 1, rect.Top + 1); - LinearGradientBrush leftBrush = - new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 270f); - LinearGradientBrush rightBrush = - new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 270f); - cache.LeftPen = new Pen(leftBrush); + var leftBrush = new LinearGradientBrush(rect, Color.FromArgb(125, c2), Color.FromArgb(67, c2), 270f); + var rightBrush = new LinearGradientBrush(rect, Color.FromArgb(16, c2), Color.FromArgb(67, c2), 270f); + cache!.LeftPen = new Pen(leftBrush); cache.RightPen = new Pen(rightBrush); cache.InteriorRect = new Rectangle(rect.Left + 2, rect.Top, rect.Width - 4, rect.Height - 3); @@ -9859,39 +9851,42 @@ protected virtual void DrawRibbonTabContextSelectedBottom(Rectangle rect, /// Internal rendering method. /// protected virtual void DrawRibbonTabContextSelectedBottomDraw(Rectangle rect, - MementoRibbonTabContextSelected cache, + MementoRibbonTabContextSelected? cache, Graphics? g) { - g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 4, rect.Right - 3, rect.Bottom - 4); - g.DrawLine(cache.L3, rect.Left + 2, rect.Bottom - 4, rect.Right - 3, rect.Bottom - 4); - g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); - g.DrawLine(cache.L2, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); - g.DrawLine(Pens.White, rect.Left + 3, rect.Bottom - 2, rect.Right - 4, rect.Bottom - 2); - g.DrawLine(cache.L1, rect.Left + 3, rect.Bottom - 2, rect.Right - 4, rect.Bottom - 2); + if (cache is not null && g is not null) + { + g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 4, rect.Right - 3, rect.Bottom - 4); + g.DrawLine(cache.L3!, rect.Left + 2, rect.Bottom - 4, rect.Right - 3, rect.Bottom - 4); + g.DrawLine(Pens.White, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); + g.DrawLine(cache.L2!, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); + g.DrawLine(Pens.White, rect.Left + 3, rect.Bottom - 2, rect.Right - 4, rect.Bottom - 2); + g.DrawLine(cache.L1!, rect.Left + 3, rect.Bottom - 2, rect.Right - 4, rect.Bottom - 2); - // Draw the inside left, right and then bottom borders - g.DrawLine(cache.LeftPen, rect.Left + 2, rect.Bottom - 5, rect.Left + 2, rect.Top + 2); - g.DrawLine(cache.RightPen, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); - g.DrawLine(Pens.White, rect.Left + 2, rect.Top + 1, rect.Left + 1, rect.Top); - g.DrawLine(cache.BottomInnerPen, rect.Left + 2, rect.Top + 1, rect.Left + 1, rect.Top); - g.DrawLine(Pens.White, rect.Right - 3, rect.Top + 1, rect.Right - 2, rect.Top); - g.DrawLine(cache.BottomInnerPen, rect.Right - 3, rect.Top + 1, rect.Right - 2, rect.Top); - g.DrawLine(Pens.White, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); - g.DrawLine(cache.BottomOuterPen, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); - g.DrawLine(Pens.White, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); - g.DrawLine(cache.BottomOuterPen, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); + // Draw the inside left, right and then bottom borders + g.DrawLine(cache.LeftPen!, rect.Left + 2, rect.Bottom - 5, rect.Left + 2, rect.Top + 2); + g.DrawLine(cache.RightPen!, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); + g.DrawLine(Pens.White, rect.Left + 2, rect.Top + 1, rect.Left + 1, rect.Top); + g.DrawLine(cache.BottomInnerPen!, rect.Left + 2, rect.Top + 1, rect.Left + 1, rect.Top); + g.DrawLine(Pens.White, rect.Right - 3, rect.Top + 1, rect.Right - 2, rect.Top); + g.DrawLine(cache.BottomInnerPen!, rect.Right - 3, rect.Top + 1, rect.Right - 2, rect.Top); + g.DrawLine(Pens.White, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); + g.DrawLine(cache.BottomOuterPen!, rect.Left + 1, rect.Top + 1, rect.Left, rect.Top); + g.DrawLine(Pens.White, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); + g.DrawLine(cache.BottomOuterPen!, rect.Right - 2, rect.Top + 1, rect.Right - 1, rect.Top); + } } /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabHighlight(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonTabHighlight(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento, + IDisposable? memento, bool alternate) { if (rect is { Width: > 0, Height: > 0 }) @@ -9947,7 +9942,7 @@ protected virtual IDisposable DrawRibbonTabHighlight(PaletteRibbonShape shape, } // First of all draw as selected - cache.SelectedMemento = (MementoRibbonTabSelected2007)DrawRibbonTabSelected2007(context, rect, PaletteState.CheckedNormal, palette, orientation, cache.SelectedMemento); + cache.SelectedMemento = DrawRibbonTabSelected2007(context, rect, PaletteState.CheckedNormal, palette, orientation, cache.SelectedMemento) as MementoRibbonTabSelected2007; switch (orientation) { @@ -9976,8 +9971,8 @@ protected virtual void DrawRibbonTabHighlightTop(Rectangle rect, Color c4, Color c5, MementoRibbonTabHighlight cache) { - RectangleF hF = new RectangleF(rect.Left - 2, rect.Top - 1, rect.Width + 4, 6); - RectangleF vF = new RectangleF(rect.Left - 2, rect.Top + 1, rect.Width + 4, rect.Height - 1); + var hF = new Rectangle(rect.Left - 2, rect.Top - 1, rect.Width + 4, 6); + var vF = new Rectangle(rect.Left - 2, rect.Top + 1, rect.Width + 4, rect.Height - 1); cache.TopBorderBrush = new LinearGradientBrush(hF, Color.FromArgb(48, c5), Color.FromArgb(64, c5), 90f); cache.BorderVertBrush = new LinearGradientBrush(vF, c5, c4, 90f); cache.OutsideVertBrush = new LinearGradientBrush(vF, Color.FromArgb(48, c5), c5, 90f); @@ -9994,28 +9989,31 @@ protected virtual void DrawRibbonTabHighlightTopDraw(Rectangle rect, Graphics? g, bool alternate) { - g.FillRectangle(cache.TopBorderBrush, rect.Left - 1, rect.Top - 1, rect.Width + 2, 4); - g.DrawLine(cache.InnerVertPen, rect.Left + 2, rect.Bottom - 2, rect.Left + 2, rect.Top + 3); - g.DrawLine(cache.InnerVertPen, rect.Right - 3, rect.Bottom - 2, rect.Right - 3, rect.Top + 3); - g.DrawLine(cache.InnerHorzPen, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); - - if (alternate) - { - g.DrawLine(cache.InnerHorzPen, rect.Left + 2, rect.Top + 1, rect.Right - 3, rect.Top + 1); - g.DrawLine(cache.BorderHorzPen, rect.Left + 3, rect.Top, rect.Right - 4, rect.Top); - } - else + if (g is not null) { - g.DrawLine(cache.InnerHorzPen, rect.Left + 3, rect.Top + 1, rect.Right - 4, rect.Top + 1); - g.DrawLine(cache.BorderHorzPen, rect.Left + 4, rect.Top, rect.Right - 5, rect.Top); - } + g.FillRectangle(cache.TopBorderBrush!, rect.Left - 1, rect.Top - 1, rect.Width + 2, 4); + g.DrawLine(cache.InnerVertPen!, rect.Left + 2, rect.Bottom - 2, rect.Left + 2, rect.Top + 3); + g.DrawLine(cache.InnerVertPen!, rect.Right - 3, rect.Bottom - 2, rect.Right - 3, rect.Top + 3); + g.DrawLine(cache.InnerHorzPen!, rect.Left + 2, rect.Top + 2, rect.Right - 3, rect.Top + 2); + + if (alternate) + { + g.DrawLine(cache.InnerHorzPen!, rect.Left + 2, rect.Top + 1, rect.Right - 3, rect.Top + 1); + g.DrawLine(cache.BorderHorzPen!, rect.Left + 3, rect.Top, rect.Right - 4, rect.Top); + } + else + { + g.DrawLine(cache.InnerHorzPen!, rect.Left + 3, rect.Top + 1, rect.Right - 4, rect.Top + 1); + g.DrawLine(cache.BorderHorzPen!, rect.Left + 4, rect.Top, rect.Right - 5, rect.Top); + } - g.FillRectangle(cache.BorderVertBrush, rect.Left + 1, rect.Top + 2, 1, rect.Height - 3); - g.FillRectangle(cache.BorderVertBrush, rect.Right - 2, rect.Top + 2, 1, rect.Height - 3); - g.FillRectangle(cache.OutsideVertBrush, rect.Left, rect.Top + 3, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideVertBrush, rect.Left - 1, rect.Top + 3, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideVertBrush, rect.Right - 1, rect.Top + 3, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideVertBrush, rect.Right, rect.Top + 3, 1, rect.Height - 4); + g.FillRectangle(cache.BorderVertBrush!, rect.Left + 1, rect.Top + 2, 1, rect.Height - 3); + g.FillRectangle(cache.BorderVertBrush!, rect.Right - 2, rect.Top + 2, 1, rect.Height - 3); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left, rect.Top + 3, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left - 1, rect.Top + 3, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideVertBrush!, rect.Right - 1, rect.Top + 3, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideVertBrush!, rect.Right, rect.Top + 3, 1, rect.Height - 4); + } } /// @@ -10025,8 +10023,8 @@ protected virtual void DrawRibbonTabHighlightLeft(Rectangle rect, Color c4, Color c5, MementoRibbonTabHighlight cache) { - RectangleF hF = new RectangleF(rect.Left - 1, rect.Top - 2, 6, rect.Height - 4); - RectangleF vF = new RectangleF(rect.Left + 1, rect.Top - 2, rect.Width - 1, rect.Height - 4); + var hF = new Rectangle(rect.Left - 1, rect.Top - 2, 6, rect.Height - 4); + var vF = new Rectangle(rect.Left + 1, rect.Top - 2, rect.Width - 1, rect.Height - 4); cache.TopBorderBrush = new LinearGradientBrush(hF, Color.FromArgb(48, c5), Color.FromArgb(64, c5), 0f); cache.BorderVertBrush = new LinearGradientBrush(vF, c5, c4, 0f); cache.OutsideVertBrush = new LinearGradientBrush(vF, Color.FromArgb(48, c5), c5, 0f); @@ -10043,28 +10041,31 @@ protected virtual void DrawRibbonTabHighlightLeftDraw(Rectangle rect, Graphics? g, bool alternate) { - g.FillRectangle(cache.TopBorderBrush, rect.Left - 1, rect.Top - 1, 4, rect.Height + 2); - g.DrawLine(cache.InnerVertPen, rect.Right - 2, rect.Bottom - 3, rect.Left + 3, rect.Bottom - 3); - g.DrawLine(cache.InnerVertPen, rect.Right - 2, rect.Top + 2, rect.Left + 3, rect.Top + 2); - g.DrawLine(cache.InnerHorzPen, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); - - if (alternate) - { - g.DrawLine(cache.InnerHorzPen, rect.Left + 1, rect.Bottom - 3, rect.Left + 1, rect.Top + 2); - g.DrawLine(cache.BorderHorzPen, rect.Left, rect.Bottom - 4, rect.Left, rect.Top + 3); - } - else + if (g is not null) { - g.DrawLine(cache.InnerHorzPen, rect.Left + 1, rect.Bottom - 4, rect.Left + 1, rect.Top + 3); - g.DrawLine(cache.BorderHorzPen, rect.Left, rect.Bottom - 5, rect.Left, rect.Top + 4); - } + g.FillRectangle(cache.TopBorderBrush!, rect.Left - 1, rect.Top - 1, 4, rect.Height + 2); + g.DrawLine(cache.InnerVertPen!, rect.Right - 2, rect.Bottom - 3, rect.Left + 3, rect.Bottom - 3); + g.DrawLine(cache.InnerVertPen!, rect.Right - 2, rect.Top + 2, rect.Left + 3, rect.Top + 2); + g.DrawLine(cache.InnerHorzPen!, rect.Left + 2, rect.Bottom - 3, rect.Left + 2, rect.Top + 2); + + if (alternate) + { + g.DrawLine(cache.InnerHorzPen!, rect.Left + 1, rect.Bottom - 3, rect.Left + 1, rect.Top + 2); + g.DrawLine(cache.BorderHorzPen!, rect.Left, rect.Bottom - 4, rect.Left, rect.Top + 3); + } + else + { + g.DrawLine(cache.InnerHorzPen!, rect.Left + 1, rect.Bottom - 4, rect.Left + 1, rect.Top + 3); + g.DrawLine(cache.BorderHorzPen!, rect.Left, rect.Bottom - 5, rect.Left, rect.Top + 4); + } - g.FillRectangle(cache.BorderVertBrush, rect.Left + 2, rect.Bottom - 2, rect.Width - 3, 1); - g.FillRectangle(cache.BorderVertBrush, rect.Left + 2, rect.Top + 1, rect.Width - 3, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 3, rect.Bottom - 1, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 3, rect.Bottom, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 3, rect.Top, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 3, rect.Top - 1, rect.Width - 4, 1); + g.FillRectangle(cache.BorderVertBrush!, rect.Left + 2, rect.Bottom - 2, rect.Width - 3, 1); + g.FillRectangle(cache.BorderVertBrush!, rect.Left + 2, rect.Top + 1, rect.Width - 3, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 3, rect.Bottom - 1, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 3, rect.Bottom, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 3, rect.Top, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 3, rect.Top - 1, rect.Width - 4, 1); + } } /// @@ -10074,8 +10075,8 @@ protected virtual void DrawRibbonTabHighlightRight(Rectangle rect, Color c4, Color c5, MementoRibbonTabHighlight cache) { - RectangleF hF = new RectangleF(rect.Right - 6, rect.Top - 2, 6, rect.Height - 4); - RectangleF vF = new RectangleF(rect.Left, rect.Top - 2, rect.Width - 1, rect.Height - 4); + var hF = new Rectangle(rect.Right - 6, rect.Top - 2, 6, rect.Height - 4); + var vF = new Rectangle(rect.Left, rect.Top - 2, rect.Width - 1, rect.Height - 4); cache.TopBorderBrush = new LinearGradientBrush(hF, Color.FromArgb(48, c5), Color.FromArgb(64, c5), 180f); cache.BorderVertBrush = new LinearGradientBrush(vF, c5, c4, 180f); cache.OutsideVertBrush = new LinearGradientBrush(vF, Color.FromArgb(48, c5), c5, 180f); @@ -10092,28 +10093,31 @@ protected virtual void DrawRibbonTabHighlightRightDraw(Rectangle rect, Graphics? g, bool alternate) { - g.FillRectangle(cache.TopBorderBrush, rect.Right - 4, rect.Top - 1, 4, rect.Height + 2); - g.DrawLine(cache.InnerVertPen, rect.Left + 1, rect.Bottom - 3, rect.Right - 4, rect.Bottom - 3); - g.DrawLine(cache.InnerVertPen, rect.Left + 1, rect.Top + 2, rect.Right - 4, rect.Top + 2); - g.DrawLine(cache.InnerHorzPen, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); - - if (alternate) + if (g is not null) { - g.DrawLine(cache.InnerHorzPen, rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 2); - g.DrawLine(cache.BorderHorzPen, rect.Right - 1, rect.Bottom - 4, rect.Right - 1, rect.Top + 3); - } - else - { - g.DrawLine(cache.InnerHorzPen, rect.Right - 2, rect.Bottom - 4, rect.Right - 2, rect.Top + 3); - g.DrawLine(cache.BorderHorzPen, rect.Right - 1, rect.Bottom - 5, rect.Right - 1, rect.Top + 4); - } + g.FillRectangle(cache.TopBorderBrush!, rect.Right - 4, rect.Top - 1, 4, rect.Height + 2); + g.DrawLine(cache.InnerVertPen!, rect.Left + 1, rect.Bottom - 3, rect.Right - 4, rect.Bottom - 3); + g.DrawLine(cache.InnerVertPen!, rect.Left + 1, rect.Top + 2, rect.Right - 4, rect.Top + 2); + g.DrawLine(cache.InnerHorzPen!, rect.Right - 3, rect.Bottom - 3, rect.Right - 3, rect.Top + 2); - g.FillRectangle(cache.BorderVertBrush, rect.Left + 1, rect.Bottom - 2, rect.Width - 3, 1); - g.FillRectangle(cache.BorderVertBrush, rect.Left + 1, rect.Top + 1, rect.Width - 3, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 1, rect.Bottom - 1, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 1, rect.Bottom, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 1, rect.Top, rect.Width - 4, 1); - g.FillRectangle(cache.OutsideVertBrush, rect.Left + 1, rect.Top - 1, rect.Width - 4, 1); + if (alternate) + { + g.DrawLine(cache.InnerHorzPen!, rect.Right - 2, rect.Bottom - 3, rect.Right - 2, rect.Top + 2); + g.DrawLine(cache.BorderHorzPen!, rect.Right - 1, rect.Bottom - 4, rect.Right - 1, rect.Top + 3); + } + else + { + g.DrawLine(cache.InnerHorzPen!, rect.Right - 2, rect.Bottom - 4, rect.Right - 2, rect.Top + 3); + g.DrawLine(cache.BorderHorzPen!, rect.Right - 1, rect.Bottom - 5, rect.Right - 1, rect.Top + 4); + } + + g.FillRectangle(cache.BorderVertBrush!, rect.Left + 1, rect.Bottom - 2, rect.Width - 3, 1); + g.FillRectangle(cache.BorderVertBrush!, rect.Left + 1, rect.Top + 1, rect.Width - 3, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 1, rect.Bottom - 1, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 1, rect.Bottom, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 1, rect.Top, rect.Width - 4, 1); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left + 1, rect.Top - 1, rect.Width - 4, 1); + } } /// @@ -10123,8 +10127,8 @@ protected virtual void DrawRibbonTabHighlightBottom(Rectangle rect, Color c4, Color c5, MementoRibbonTabHighlight cache) { - RectangleF hF = new RectangleF(rect.Left - 2, rect.Bottom - 6, rect.Width + 4, 6); - RectangleF vF = new RectangleF(rect.Left - 2, rect.Top, rect.Width + 4, rect.Height - 1); + var hF = new Rectangle(rect.Left - 2, rect.Bottom - 6, rect.Width + 4, 6); + var vF = new Rectangle(rect.Left - 2, rect.Top, rect.Width + 4, rect.Height - 1); cache.TopBorderBrush = new LinearGradientBrush(hF, Color.FromArgb(48, c5), Color.FromArgb(64, c5), 270f); cache.BorderVertBrush = new LinearGradientBrush(vF, c5, c4, 270f); cache.OutsideVertBrush = new LinearGradientBrush(vF, Color.FromArgb(48, c5), c5, 270f); @@ -10141,38 +10145,41 @@ protected virtual void DrawRibbonTabHighlightBottomDraw(Rectangle rect, Graphics? g, bool alternate) { - g.FillRectangle(cache.TopBorderBrush, rect.Left - 1, rect.Bottom - 3, rect.Width + 2, 4); - g.DrawLine(cache.InnerVertPen, rect.Left + 2, rect.Top + 1, rect.Left + 2, rect.Bottom - 4); - g.DrawLine(cache.InnerVertPen, rect.Right - 3, rect.Top + 1, rect.Right - 3, rect.Bottom - 4); - g.DrawLine(cache.InnerHorzPen, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); - - if (alternate) + if (g is not null) { - g.DrawLine(cache.InnerHorzPen, rect.Left + 2, rect.Bottom - 2, rect.Right - 3, rect.Bottom - 2); - g.DrawLine(cache.BorderHorzPen, rect.Left + 3, rect.Bottom - 1, rect.Right - 4, rect.Bottom - 1); - } - else - { - g.DrawLine(cache.InnerHorzPen, rect.Left + 3, rect.Bottom - 2, rect.Right - 4, rect.Bottom - 2); - g.DrawLine(cache.BorderHorzPen, rect.Left + 4, rect.Bottom - 1, rect.Right - 5, rect.Bottom - 1); - } + g.FillRectangle(cache.TopBorderBrush!, rect.Left - 1, rect.Bottom - 3, rect.Width + 2, 4); + g.DrawLine(cache.InnerVertPen!, rect.Left + 2, rect.Top + 1, rect.Left + 2, rect.Bottom - 4); + g.DrawLine(cache.InnerVertPen!, rect.Right - 3, rect.Top + 1, rect.Right - 3, rect.Bottom - 4); + g.DrawLine(cache.InnerHorzPen!, rect.Left + 2, rect.Bottom - 3, rect.Right - 3, rect.Bottom - 3); - g.FillRectangle(cache.BorderVertBrush, rect.Left + 1, rect.Top + 1, 1, rect.Height - 3); - g.FillRectangle(cache.BorderVertBrush, rect.Right - 2, rect.Top + 1, 1, rect.Height - 3); - g.FillRectangle(cache.OutsideVertBrush, rect.Left, rect.Top + 1, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideVertBrush, rect.Left - 1, rect.Top + 1, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideVertBrush, rect.Right - 1, rect.Top + 1, 1, rect.Height - 4); - g.FillRectangle(cache.OutsideVertBrush, rect.Right, rect.Top + 1, 1, rect.Height - 4); + if (alternate) + { + g.DrawLine(cache.InnerHorzPen!, rect.Left + 2, rect.Bottom - 2, rect.Right - 3, rect.Bottom - 2); + g.DrawLine(cache.BorderHorzPen!, rect.Left + 3, rect.Bottom - 1, rect.Right - 4, rect.Bottom - 1); + } + else + { + g.DrawLine(cache.InnerHorzPen!, rect.Left + 3, rect.Bottom - 2, rect.Right - 4, rect.Bottom - 2); + g.DrawLine(cache.BorderHorzPen!, rect.Left + 4, rect.Bottom - 1, rect.Right - 5, rect.Bottom - 1); + } + + g.FillRectangle(cache.BorderVertBrush!, rect.Left + 1, rect.Top + 1, 1, rect.Height - 3); + g.FillRectangle(cache.BorderVertBrush!, rect.Right - 2, rect.Top + 1, 1, rect.Height - 3); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left, rect.Top + 1, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideVertBrush!, rect.Left - 1, rect.Top + 1, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideVertBrush!, rect.Right - 1, rect.Top + 1, 1, rect.Height - 4); + g.FillRectangle(cache.OutsideVertBrush!, rect.Right, rect.Top + 1, 1, rect.Height - 4); + } } /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonTabContext(RenderContext context, + protected virtual IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -10202,20 +10209,20 @@ protected virtual IDisposable DrawRibbonTabContext(RenderContext context, // Dispose of existing values cache.Dispose(); - Rectangle borderRect = new Rectangle(rect.X - 1, rect.Y - 1, rect.Width + 2, rect.Height + 2); + var borderRect = new Rectangle(rect.X - 1, rect.Y - 1, rect.Width + 2, rect.Height + 2); cache.FillRect = new Rectangle(rect.X + 1, rect.Y, rect.Width - 2, rect.Height - 1); - LinearGradientBrush borderBrush = new LinearGradientBrush(borderRect, c1, Color.Transparent, 270f) + var borderBrush = new LinearGradientBrush(borderRect, c1, Color.Transparent, 270f) { Blend = _ribbonGroup5Blend }; cache.BorderPen = new Pen(borderBrush); - LinearGradientBrush underlineBrush = + var underlineBrush = new LinearGradientBrush(borderRect, Color.Transparent, Color.FromArgb(200, c2), 0f) - { - Blend = _ribbonGroup7Blend - }; + { + Blend = _ribbonGroup7Blend + }; cache.UnderlinePen = new Pen(underlineBrush); cache.FillBrush = new LinearGradientBrush(borderRect, Color.FromArgb(196, c2), Color.Transparent, 270f) @@ -10224,15 +10231,15 @@ protected virtual IDisposable DrawRibbonTabContext(RenderContext context, }; } - // Draw the left and right border lines - context.Graphics.DrawLine(cache.BorderPen, rect.X, rect.Y, rect.X, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + // Draw the left and right borderlines + context.Graphics.DrawLine(cache.BorderPen!, rect.X, rect.Y, rect.X, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); // Fill the inner area with a gradient context specific color - context.Graphics.FillRectangle(cache.FillBrush, cache.FillRect); + context.Graphics.FillRectangle(cache.FillBrush!, cache.FillRect); // Overdraw the brighter line at bottom - context.Graphics.DrawLine(cache.UnderlinePen, rect.X + 1, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.UnderlinePen!, rect.X + 1, rect.Bottom - 1, rect.Right - 2, rect.Bottom - 1); } return memento; @@ -10241,13 +10248,13 @@ protected virtual IDisposable DrawRibbonTabContext(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonAppButton(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonAppButton(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, bool trackBorderAsPressed, - IDisposable memento) + IDisposable? memento) { // Reduce the area of the actual button as the extra space is used for shadow rect.Width -= 3; @@ -10261,7 +10268,7 @@ protected virtual IDisposable DrawRibbonAppButton(PaletteRibbonShape shape, Color topDark = palette.GetRibbonBackColor3(state); Color bottomLight = palette.GetRibbonBackColor4(state); Color bottomMedium = palette.GetRibbonBackColor5(state); - Color bottomDark = CommonHelper.MergeColors(topDark, 0.78f, Color.Empty, 0.22f); + Color bottomDark = CommonHelper.MergeColors(topDark, 0.78f, GlobalStaticValues.EMPTY_COLOR, 0.22f); var generate = true; MementoRibbonAppButton cache; @@ -10299,7 +10306,7 @@ protected virtual IDisposable DrawRibbonAppButton(PaletteRibbonShape shape, cache.RectUpperGlow = new RectangleF { Width = rect.Width - 4, - Height = rect.Height / 8 + Height = rect.Height / 8f }; cache.RectUpperGlow.Y = rect.Y + ((rect.Height - cache.RectUpperGlow.Height) / 2); cache.RectUpperGlow.X = rect.X + ((rect.Width - cache.RectUpperGlow.Width) / 2); @@ -10308,7 +10315,7 @@ protected virtual IDisposable DrawRibbonAppButton(PaletteRibbonShape shape, cache.BrushLower = new LinearGradientBrush(cache.RectLower, Color.Transparent, Color.Transparent, LinearGradientMode.Horizontal); } - using AntiAlias aa = new AntiAlias(context.Graphics); + using var aa = new AntiAlias(context.Graphics); DrawRibbonAppButtonBorder1(context.Graphics, cache); DrawRibbonAppButtonUpperHalf(context.Graphics, cache, state, topDark, bottomDark, topLight, topMedium, trackBorderAsPressed); DrawRibbonAppButtonLowerHalf(context.Graphics, cache, state, bottomDark, bottomLight, bottomMedium); @@ -10324,17 +10331,20 @@ protected virtual IDisposable DrawRibbonAppButton(PaletteRibbonShape shape, /// Internal rendering method. /// protected virtual void DrawRibbonAppButtonBorder1(Graphics? g, - MementoRibbonAppButton memento) + MementoRibbonAppButton? memento) { - g.FillEllipse(_buttonBorder1Brush, memento.BorderShadow1); - g.FillEllipse(_buttonBorder2Brush, memento.BorderShadow2); + if (g is not null && memento is not null) + { + g.FillEllipse(_buttonBorder1Brush, memento.BorderShadow1); + g.FillEllipse(_buttonBorder2Brush, memento.BorderShadow2); + } } /// /// Internal rendering method. /// protected virtual void DrawRibbonAppButtonUpperHalf(Graphics? g, - MementoRibbonAppButton memento, + MementoRibbonAppButton? memento, PaletteState state, Color topDark, Color bottomDark, @@ -10342,110 +10352,120 @@ protected virtual void DrawRibbonAppButtonUpperHalf(Graphics? g, Color topMedium, bool trackBorderAsPressed) { - var pressed = state == PaletteState.Pressed; - var tracking = state == PaletteState.Tracking; - - // Override tracking/pressed states? - if (tracking && trackBorderAsPressed) + if (g is not null) { - pressed = true; - tracking = false; - } + var pressed = state == PaletteState.Pressed; + var tracking = state == PaletteState.Tracking; - if (!pressed) - { - Color[] colorsUpperHalf = { topDark, topMedium, topLight, topLight, topMedium, topDark }; - float[] posUpperHalf = { 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f }; + // Override tracking/pressed states? + if (tracking && trackBorderAsPressed) + { + pressed = true; + tracking = false; + } - ColorBlend blendUpperHalf = new ColorBlend + if (!pressed) { - Colors = colorsUpperHalf, - Positions = posUpperHalf - }; - memento.BrushUpper1.InterpolationColors = blendUpperHalf; + Color[] colorsUpperHalf = [topDark, topMedium, topLight, topLight, topMedium, topDark]; + float[] posUpperHalf = [0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f]; - g.FillPie(memento.BrushUpper1, memento.Rect.X, memento.Rect.Y, memento.Rect.Width, memento.Rect.Height, 180, 180); - } + var blendUpperHalf = new ColorBlend + { + Colors = colorsUpperHalf, + Positions = posUpperHalf + }; + memento!.BrushUpper1!.InterpolationColors = blendUpperHalf; - Color c1 = _whiten10; - Color c2 = Color.FromArgb(100, topDark); + g.FillPie(memento.BrushUpper1, memento.Rect.X, memento.Rect.Y, memento.Rect.Width, memento.Rect.Height, 180, 180); + } - if (tracking) - { - c1 = _whiten200; - c2 = Color.FromArgb(200, bottomDark); - } + Color c1 = _whiten10; + Color c2 = Color.FromArgb(100, topDark); - if (pressed) - { - c1 = Color.White; - c2 = topDark; - } + if (tracking) + { + c1 = _whiten200; + c2 = Color.FromArgb(200, bottomDark); + } + + if (pressed) + { + c1 = Color.White; + c2 = topDark; + } - using LinearGradientBrush brushUpper2 = - new LinearGradientBrush(memento.Rect, c1, c2, LinearGradientMode.Vertical); - g.FillPie(brushUpper2, memento.Rect.X, memento.Rect.Y, memento.Rect.Width, memento.Rect.Height, 180, 180); + using var brushUpper2 = + new LinearGradientBrush(memento!.Rect, c1, c2, LinearGradientMode.Vertical); + g.FillPie(brushUpper2, memento.Rect.X, memento.Rect.Y, memento.Rect.Width, memento.Rect.Height, 180, 180); + } } /// /// Internal rendering method. /// protected virtual void DrawRibbonAppButtonLowerHalf(Graphics? g, - MementoRibbonAppButton memento, + MementoRibbonAppButton? memento, PaletteState state, Color bottomDark, Color bottomLight, Color bottomMedium) { - Color[] colorsLowerHalf = { bottomDark, bottomMedium, bottomLight, bottomLight, bottomMedium, bottomDark }; + if (g is not null && memento is not null) + { + Color[] colorsLowerHalf = [bottomDark, bottomMedium, bottomLight, bottomLight, bottomMedium, bottomDark]; - var posLowerHalf = state == PaletteState.Pressed - ? new[] { 0.0f, 0.3f, 0.5f, 0.5f, 0.7f, 1.0f } - : new[] { 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f }; + var posLowerHalf = state == PaletteState.Pressed + ? [0.0f, 0.3f, 0.5f, 0.5f, 0.7f, 1.0f] + : new[] { 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f }; - ColorBlend blendLowerHalf = new ColorBlend - { - Colors = colorsLowerHalf, - Positions = posLowerHalf - }; + var blendLowerHalf = new ColorBlend + { + Colors = colorsLowerHalf, + Positions = posLowerHalf + }; - memento.BrushLower.InterpolationColors = blendLowerHalf; - g.FillPie(memento.BrushLower, memento.RectLower.X, memento.RectLower.Y, memento.RectLower.Width, memento.RectLower.Height, 0, 180); + memento.BrushLower!.InterpolationColors = blendLowerHalf; + g.FillPie(memento.BrushLower, memento.RectLower.X, memento.RectLower.Y, memento.RectLower.Width, memento.RectLower.Height, 0, 180); + } } /// /// Internal rendering method. /// protected virtual void DrawRibbonAppButtonGlowCenter(Graphics? g, - MementoRibbonAppButton memento, + MementoRibbonAppButton? memento, PaletteState state, Color topLight, Color bottomLight) { - using LinearGradientBrush brushBottomGlow = new LinearGradientBrush(memento.RectBottomGlow, - Color.FromArgb(50, Color.White), Color.FromArgb(30, Color.White), LinearGradientMode.Vertical); - RectangleF rectBottomGlow = memento.RectBottomGlow; - rectBottomGlow.X = memento.Rect.X + ((memento.Rect.Width - rectBottomGlow.Width) / 2); - rectBottomGlow.Y = memento.Rect.Y + (memento.Rect.Height - rectBottomGlow.Height - 2); - if (state != PaletteState.Pressed) + if (g is not null && memento is not null) { - g.FillPie(brushBottomGlow, rectBottomGlow.X, rectBottomGlow.Y, rectBottomGlow.Width, rectBottomGlow.Height, 0, 360); - } + using var brushBottomGlow = new LinearGradientBrush(memento.RectBottomGlow, + Color.FromArgb(50, Color.White), Color.FromArgb(30, Color.White), LinearGradientMode.Vertical); + RectangleF rectBottomGlow = memento.RectBottomGlow; + rectBottomGlow.X = memento.Rect.X + ((memento.Rect.Width - rectBottomGlow.Width) / 2f); + rectBottomGlow.Y = memento.Rect.Y + (memento.Rect.Height - rectBottomGlow.Height - 2); - if (state == PaletteState.Pressed) - { - rectBottomGlow.Height = memento.Rect.Height * 0.2f; - rectBottomGlow.Width = memento.Rect.Width * 0.4f; - rectBottomGlow.X = memento.Rect.X + ((memento.Rect.Width - rectBottomGlow.Width) / 2); - rectBottomGlow.Y = memento.Rect.Y + (memento.Rect.Height - rectBottomGlow.Height); + if (state != PaletteState.Pressed) + { + g.FillPie(brushBottomGlow, rectBottomGlow.X, rectBottomGlow.Y, rectBottomGlow.Width, rectBottomGlow.Height, 0, 360); + } - using GraphicsPath path = new GraphicsPath(); - path.AddEllipse(rectBottomGlow); - using PathGradientBrush pathGradient = new PathGradientBrush(path); - pathGradient.CenterColor = topLight; - pathGradient.SurroundColors = new[] { Color.FromArgb(100, bottomLight) }; - g.FillEllipse(pathGradient, rectBottomGlow); + if (state == PaletteState.Pressed) + { + rectBottomGlow.Height = memento.Rect.Height * 0.2f; + rectBottomGlow.Width = memento.Rect.Width * 0.4f; + rectBottomGlow.X = memento.Rect.X + ((memento.Rect.Width - rectBottomGlow.Width) / 2f); + rectBottomGlow.Y = memento.Rect.Y + (memento.Rect.Height - rectBottomGlow.Height); + + using var path = new GraphicsPath(); + path.AddEllipse(rectBottomGlow); + using var pathGradient = new PathGradientBrush(path); + pathGradient.CenterColor = topLight; + pathGradient.SurroundColors = [Color.FromArgb(100, bottomLight)]; + g.FillEllipse(pathGradient, rectBottomGlow); + } } } @@ -10453,123 +10473,134 @@ protected virtual void DrawRibbonAppButtonGlowCenter(Graphics? g, /// Internal rendering method. /// protected virtual void DrawRibbonAppButtonGlowUpperBottom(Graphics? g, - MementoRibbonAppButton memento, + MementoRibbonAppButton? memento, PaletteState state, Color bottomLight, Color bottomMedium, Color bottomDark) { - var lightTransparency = 50; - var mediumTransparency = 50; - - if (state is PaletteState.Pressed or PaletteState.Tracking) + if (g is not null && memento is not null) { - lightTransparency = 200; - mediumTransparency = 200; - } + var lightTransparency = 50; + var mediumTransparency = 50; + + if (state is PaletteState.Pressed or PaletteState.Tracking) + { + lightTransparency = 200; + mediumTransparency = 200; + } - using LinearGradientBrush brushUpperGlow = new LinearGradientBrush(memento.RectUpperGlow, Color.Transparent, - Color.Transparent, LinearGradientMode.Horizontal); - Color[] colorsUpperGlow = { Color.FromArgb(180, bottomDark), + using var brushUpperGlow = new LinearGradientBrush(memento.RectUpperGlow, Color.Transparent, + Color.Transparent, LinearGradientMode.Horizontal); + Color[] colorsUpperGlow = + [ + Color.FromArgb(180, bottomDark), Color.FromArgb(mediumTransparency, bottomMedium), Color.FromArgb(lightTransparency, bottomLight), Color.FromArgb(lightTransparency, bottomLight), Color.FromArgb(mediumTransparency, bottomMedium), - Color.FromArgb(180, bottomDark) }; + Color.FromArgb(180, bottomDark) + ]; - float[] posUpperGlow = { 0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f }; + float[] posUpperGlow = [0.0f, 0.2f, 0.4f, 0.6f, 0.8f, 1.0f]; - ColorBlend blendUpperGlow = new ColorBlend - { - Colors = colorsUpperGlow, - Positions = posUpperGlow - }; - brushUpperGlow.InterpolationColors = blendUpperGlow; + var blendUpperGlow = new ColorBlend + { + Colors = colorsUpperGlow, + Positions = posUpperGlow + }; + brushUpperGlow.InterpolationColors = blendUpperGlow; - g.FillPie(brushUpperGlow, memento.RectUpperGlow.X, memento.RectUpperGlow.Y, memento.RectUpperGlow.Width, memento.RectUpperGlow.Height, 180, 180); + g.FillPie(brushUpperGlow, memento.RectUpperGlow.X, memento.RectUpperGlow.Y, memento.RectUpperGlow.Width, memento.RectUpperGlow.Height, 180, 180); + } } /// /// Internal rendering method. /// protected virtual void DrawRibbonAppButtonBorder2(Graphics? g, - MementoRibbonAppButton memento, + MementoRibbonAppButton? memento, PaletteState state, Color bottomLight, bool trackBorderAsPressed) { - var pressed = state == PaletteState.Pressed; - var tracking = state == PaletteState.Tracking; - - // Override tracking/pressed states? - if (tracking && trackBorderAsPressed) + if (g is not null && memento is not null) { - pressed = true; - tracking = false; - } + var pressed = state == PaletteState.Pressed; + var tracking = state == PaletteState.Tracking; - Color borderGlowColor; - if (pressed) - { - borderGlowColor = _whiten80; - } - else if (tracking && !pressed) - { - borderGlowColor = Color.FromArgb(200, bottomLight); - } - else - { - borderGlowColor = _whiten120; - } + // Override tracking/pressed states? + if (tracking && trackBorderAsPressed) + { + pressed = true; + tracking = false; + } - using (Pen p = new Pen(borderGlowColor)) - { - g.DrawEllipse(p, memento.BorderMain1); - } + Color borderGlowColor; + if (pressed) + { + borderGlowColor = _whiten80; + } + else if (tracking && !pressed) + { + borderGlowColor = Color.FromArgb(200, bottomLight); + } + else + { + borderGlowColor = _whiten120; + } - using (Pen p = new Pen(Color.FromArgb(100, 52, 59, 64))) - { - g.DrawEllipse(p, memento.Rect); - } + using (var p = new Pen(borderGlowColor)) + { + g.DrawEllipse(p, memento.BorderMain1); + } - if (pressed) - { - borderGlowColor = _whiten60; - using Pen p = new Pen(borderGlowColor); - g.DrawEllipse(p, memento.BorderMain3); - } + using (var p = new Pen(Color.FromArgb(100, 52, 59, 64))) + { + g.DrawEllipse(p, memento.Rect); + } - borderGlowColor = pressed ? _whiten50 : _whiten80; - using (Pen p = new Pen(borderGlowColor)) - { - g.DrawArc(p, memento.BorderMain2, 180, 180); - } + if (pressed) + { + borderGlowColor = _whiten60; + using var p = new Pen(borderGlowColor); + g.DrawEllipse(p, memento.BorderMain3); + } - if (!pressed) - { - borderGlowColor = _whiten30; - using Pen p = new Pen(borderGlowColor); - g.DrawArc(p, memento.BorderMain4, 180, 180); - } + borderGlowColor = pressed ? _whiten50 : _whiten80; + using (var p = new Pen(borderGlowColor)) + { + g.DrawArc(p, memento.BorderMain2, 180, 180); + } - if (tracking && !pressed) - { - using Pen p = new Pen(Color.FromArgb(100, borderGlowColor)); - g.DrawEllipse(p, memento.Rect); + if (!pressed) + { + borderGlowColor = _whiten30; + using var p = new Pen(borderGlowColor); + g.DrawArc(p, memento.BorderMain4, 180, 180); + } + + if (tracking && !pressed) + { + using var p = new Pen(Color.FromArgb(100, borderGlowColor)); + g.DrawEllipse(p, memento.Rect); + } } } /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonAppTab(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonAppTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, - Color baseColor1, - Color baseColor2, - IDisposable memento) + IPaletteRibbonFileAppTab palette, + IDisposable? memento) { + Color topColor = palette.GetRibbonFileAppTabTopColor(state); + Color bottomColor = palette.GetRibbonFileAppTabBottomColor(state); + if (rect is { Width: > 0, Height: > 0 }) { var generate = true; @@ -10579,13 +10610,13 @@ protected virtual IDisposable DrawRibbonAppTab(PaletteRibbonShape shape, if (memento is MementoRibbonAppTab tab) { cache = tab; - generate = !cache.UseCachedValues(rect, baseColor1, baseColor2); + generate = !cache.UseCachedValues(rect, topColor, bottomColor); } else { memento?.Dispose(); - cache = new MementoRibbonAppTab(rect, baseColor1, baseColor2); + cache = new MementoRibbonAppTab(rect, topColor, bottomColor); memento = cache; } @@ -10597,70 +10628,76 @@ protected virtual IDisposable DrawRibbonAppTab(PaletteRibbonShape shape, // Create common paths to all the app tab states cache.GeneratePaths(rect, state); - cache.BorderPen = new Pen(baseColor1); + cache.BorderPen = new Pen(topColor); // Create state specific colors/brushes/pens switch (state) { + case PaletteState.Disabled: + topColor = ControlPaint.DarkDark(topColor); + bottomColor = ControlPaint.DarkDark(bottomColor); + goto case PaletteState.Normal; // drop through case PaletteState.Normal: - cache.BorderBrush = new SolidBrush(CommonHelper.MergeColors(baseColor1, 0.2f, baseColor2, 0.8f)); + cache.BorderBrush = new SolidBrush(CommonHelper.MergeColors(topColor, 0.2f, bottomColor, 0.8f)); cache.InsideFillBrush = new LinearGradientBrush(new RectangleF(rect.X, rect.Y + 1, rect.Width, rect.Height), - CommonHelper.MergeColors(baseColor1, 0.3f, baseColor2, 0.7f), - CommonHelper.MergeColors(baseColor1, 0.6f, baseColor2, 0.4f), + CommonHelper.MergeColors(topColor, 0.3f, bottomColor, 0.7f), + CommonHelper.MergeColors(topColor, 0.6f, bottomColor, 0.4f), 90f); cache.InsideFillBrush.SetSigmaBellShape(0.33f); - cache.HighlightBrush.CenterColor = Color.FromArgb(64, Color.White); + cache.HighlightBrush!.CenterColor = Color.FromArgb(64, Color.White); break; + case PaletteState.Tracking: - cache.BorderBrush = new SolidBrush(baseColor2); + cache.BorderBrush = new SolidBrush(bottomColor); cache.InsideFillBrush = new LinearGradientBrush(new RectangleF(rect.X, rect.Y + 1, rect.Width, rect.Height), - CommonHelper.MergeColors(baseColor1, 0.3f, baseColor2, 0.7f), - CommonHelper.MergeColors(baseColor1, 0.6f, baseColor2, 0.4f), + CommonHelper.MergeColors(topColor, 0.3f, bottomColor, 0.7f), + CommonHelper.MergeColors(topColor, 0.6f, bottomColor, 0.4f), 90f); cache.InsideFillBrush.SetSigmaBellShape(0.33f); - cache.HighlightBrush.CenterColor = Color.FromArgb(100, Color.White); + cache.HighlightBrush!.CenterColor = Color.FromArgb(100, Color.White); break; + case PaletteState.Tracking | PaletteState.FocusOverride: - cache.BorderBrush = new SolidBrush(ControlPaint.LightLight(baseColor2)); + cache.BorderBrush = new SolidBrush(ControlPaint.LightLight(bottomColor)); cache.InsideFillBrush = new LinearGradientBrush(new RectangleF(rect.X, rect.Y + 1, rect.Width, rect.Height), - CommonHelper.MergeColors(baseColor1, 0.3f, baseColor2, 0.7f), - CommonHelper.MergeColors(baseColor1, 0.6f, baseColor2, 0.4f), + CommonHelper.MergeColors(topColor, 0.3f, bottomColor, 0.7f), + CommonHelper.MergeColors(topColor, 0.6f, bottomColor, 0.4f), 90f); cache.InsideFillBrush.SetSigmaBellShape(0.33f); - cache.HighlightBrush.CenterColor = ControlPaint.LightLight(baseColor2); + cache.HighlightBrush!.CenterColor = ControlPaint.LightLight(bottomColor); break; + case PaletteState.Pressed: - cache.BorderBrush = new SolidBrush(CommonHelper.MergeColors(baseColor1, 0.5f, baseColor2, 0.5f)); + cache.BorderBrush = new SolidBrush(CommonHelper.MergeColors(topColor, 0.5f, bottomColor, 0.5f)); cache.InsideFillBrush = new LinearGradientBrush(new RectangleF(rect.X, rect.Y + 1, rect.Width, rect.Height), - CommonHelper.MergeColors(baseColor1, 0.3f, baseColor2, 0.7f), - CommonHelper.MergeColors(baseColor1, 0.75f, baseColor2, 0.25f), + CommonHelper.MergeColors(topColor, 0.3f, bottomColor, 0.7f), + CommonHelper.MergeColors(topColor, 0.75f, bottomColor, 0.25f), 90f); cache.InsideFillBrush.SetSigmaBellShape(0f); - cache.HighlightBrush.CenterColor = Color.FromArgb(90, Color.White); + cache.HighlightBrush!.CenterColor = Color.FromArgb(90, Color.White); break; } } + using var aa = new AntiAlias(context.Graphics); // Fill the entire tab area and then add a border around the edge - context.Graphics.FillPath(cache.BorderBrush, cache.BorderFillPath); + context.Graphics.FillPath(cache.BorderBrush!, cache.BorderFillPath!); // Draw the outside border - using (AntiAlias aa = new AntiAlias(context.Graphics)) - { - context.Graphics.DrawPath(cache.BorderPen, cache.BorderPath); - } + context.Graphics.DrawPath(cache.BorderPen!, cache.BorderPath!); // Fill inside area - context.Graphics.FillPath(cache.InsideFillBrush, cache.InsideFillPath); + context.Graphics.FillPath(cache.InsideFillBrush!, cache.InsideFillPath!); - // Draw highlight over bottom half - using (Clipping clip = new Clipping(context.Graphics, cache.InsideFillPath)) + if (state != PaletteState.Disabled) { - context.Graphics.FillPath(cache.HighlightBrush, cache.HighlightPath); + // Draw highlight over bottom half + using var clip = new Clipping(context.Graphics, cache.InsideFillPath!); + context.Graphics.FillPath(cache.HighlightBrush!, cache.HighlightPath!); } } @@ -10670,12 +10707,12 @@ protected virtual IDisposable DrawRibbonAppTab(PaletteRibbonShape shape, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, + protected virtual IDisposable? DrawRibbonGroupNormal(bool showingInPopup, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento, + IDisposable? memento, bool pressed, bool tracking, bool dark) @@ -10711,13 +10748,13 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, // Dispose of existing values cache.Dispose(); - GraphicsPath trackingPath = new GraphicsPath(); + var trackingPath = new GraphicsPath(); trackingPath.AddEllipse(rect with { Y = rect.Y + (rect.Height / 2), Width = rect.Width - 3 }); cache.TrackHighlightBrush = new PathGradientBrush(trackingPath) { - SurroundColors = new[] { Color.Transparent }, + SurroundColors = [Color.Transparent], CenterColor = cache.C3,//(dark ? (rect.Width > 50 ? _whiten60 : _whiten45) : _whiten160), - CenterPoint = new PointF(rect.X + ((rect.Width - 3) / 2), rect.Height) + CenterPoint = new PointF(rect.X + ((rect.Width - 3) / 2f), rect.Height) }; //cache.topBrush = new LinearGradientBrush(topRectF, c1, Color.Transparent, 90f); @@ -10728,7 +10765,7 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, 90f); cache.PressedFillBrush = new LinearGradientBrush(new RectangleF(rect.X - 1, rect.Y - 1, rect.Width + 2, rect.Height + 2), - Color.FromArgb((dark ? Color.Empty : _whiten10).A, cache.C4), + Color.FromArgb((dark ? GlobalStaticValues.EMPTY_COLOR : _whiten10).A, cache.C4), Color.FromArgb((dark ? _darken38 : _darken16).A, cache.C5), 90f); cache.TrackFillBrush.Blend = _linear50Blend; @@ -10737,22 +10774,21 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, if (pressed) { // Lighten the top and darken the bottom of the fill area - context.Graphics.FillRectangle(cache.PressedFillBrush, rect.X, rect.Y, rect.Width - 2, rect.Height); + context.Graphics.FillRectangle(cache.PressedFillBrush!, rect.X, rect.Y, rect.Width - 2, rect.Height); } else if (tracking) { // Lighten the top and darken the bottom of the fill area - context.Graphics.FillRectangle(cache.TrackFillBrush, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); + context.Graphics.FillRectangle(cache.TrackFillBrush!, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); // Draw the tracking highlight at bottom of area - context.Graphics.FillRectangle(cache.TrackHighlightBrush, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); + context.Graphics.FillRectangle(cache.TrackHighlightBrush!, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); } } return memento; } - /// /// Internal rendering method. /// @@ -10770,7 +10806,7 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, Color c2 = palette.GetRibbonBackColor2(state); var generate = true; - MementoRibbonGroupNormalBorder? cache; + MementoRibbonGroupNormalBorder cache; // Access a cache instance and decide if cache resources need generating if (memento is MementoRibbonGroupNormalBorder border) @@ -10792,10 +10828,10 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, // Dispose of existing values cache.Dispose(); - GraphicsPath solidPath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); - GraphicsPath outsidePath = new GraphicsPath(); - GraphicsPath lightPath = new GraphicsPath(); + var solidPath = new GraphicsPath(); + var insidePath = new GraphicsPath(); + var outsidePath = new GraphicsPath(); + var lightPath = new GraphicsPath(); // Create the rounded complete border solidPath.AddLine(rect.Left + 2, rect.Top, rect.Right - 4, rect.Top); @@ -10827,8 +10863,8 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, lightPath.AddLine(rect.Left + 1, rect.Bottom - 4, rect.Left + 1, rect.Top + 2); lightPath.AddLine(rect.Left + 1, rect.Top + 2, rect.Left + 2, rect.Top + 1); - RectangleF solidRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); - LinearGradientBrush solidBrush = new LinearGradientBrush(solidRectF, c1, c2, 90f); + var solidRectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var solidBrush = new LinearGradientBrush(solidRectF, c1, c2, 90f); cache.SolidPen = new Pen(solidBrush); cache.BackRect = new Rectangle(rect.Left + 2, rect.Top + 1, rect.Width - 4, rect.Height - 4); @@ -10844,23 +10880,23 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, context.Graphics.FillRectangle(lightInside ? _whitenLightLBrush : _whitenLightBrush, cache.BackRect); } - using (AntiAlias aa = new AntiAlias(context.Graphics)) + using (var aa = new AntiAlias(context.Graphics)) { // Draw the solid border - context.Graphics.DrawPath(cache.SolidPen, cache.SolidPath); + context.Graphics.DrawPath(cache.SolidPen!, cache.SolidPath!); - // Do now draw the inside and outside paths if ligtening the inside anyway + // Do now draw the inside and outside paths if lightening the inside anyway if (!lightInside) { // Draw the two areas that make a lighter shadow to the right and bottom of border - context.Graphics.DrawPath(_whitenMediumPen, cache.InsidePath); - context.Graphics.DrawPath(_whitenMediumPen, cache.OutsidePath); + context.Graphics.DrawPath(_whitenMediumPen, cache.InsidePath!); + context.Graphics.DrawPath(_whitenMediumPen, cache.OutsidePath!); } } if (lightInside) { - context.Graphics.DrawPath(Pens.White, cache.LightPath); + context.Graphics.DrawPath(Pens.White, cache.LightPath!); } } @@ -10871,12 +10907,12 @@ protected virtual IDisposable DrawRibbonGroupNormal(bool showingInPopup, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupNormalBorderSep(bool showingInPopup, + protected virtual IDisposable? DrawRibbonGroupNormalBorderSep(bool showingInPopup, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento, + IDisposable? memento, bool pressed, bool tracking, bool dark) @@ -10912,7 +10948,7 @@ protected virtual IDisposable DrawRibbonGroupNormalBorderSep(bool showingInPopup // Dispose of existing values cache.Dispose(); - RectangleF rectF = new RectangleF(rect.X - 1, rect.Y - 1, rect.Width + 2, rect.Height + 2); + var rectF = new RectangleF(rect.X - 1, rect.Y - 1, rect.Width + 2, rect.Height + 2); cache.TotalBrush = new LinearGradientBrush(rectF, c2, c1, 90f); cache.InnerBrush = new LinearGradientBrush(rectF, c4, c3, 90f); @@ -10928,8 +10964,8 @@ protected virtual IDisposable DrawRibbonGroupNormalBorderSep(bool showingInPopup if (!showingInPopup) { - context.Graphics.FillRectangle(cache.TotalBrush, rect.Right - 3, rect.Top, 3, rect.Height - 1); - context.Graphics.DrawLine(cache.InnerPen, rect.Right - 2, rect.Top, rect.Right - 2, rect.Bottom - 1); + context.Graphics.FillRectangle(cache.TotalBrush!, rect.Right - 3, rect.Top, 3, rect.Height - 1); + context.Graphics.DrawLine(cache.InnerPen!, rect.Right - 2, rect.Top, rect.Right - 2, rect.Bottom - 1); if (tracking || pressed) { @@ -10937,14 +10973,14 @@ protected virtual IDisposable DrawRibbonGroupNormalBorderSep(bool showingInPopup if (!pressed && !dark) { // Lighten the right inner edge - context.Graphics.DrawLine(cache.TrackSepPen, rect.Right - 3, rect.Top, rect.Right - 3, + context.Graphics.DrawLine(cache.TrackSepPen!, rect.Right - 3, rect.Top, rect.Right - 3, rect.Bottom - 1); } if (tracking) { // Lighten the bottom inner edge - context.Graphics.DrawLine(cache.TrackBottomPen, rect.Right - 3, rect.Bottom - 1, rect.Left, + context.Graphics.DrawLine(cache.TrackBottomPen!, rect.Right - 3, rect.Bottom - 1, rect.Left, rect.Bottom - 1); } } @@ -10957,11 +10993,11 @@ protected virtual IDisposable DrawRibbonGroupNormalBorderSep(bool showingInPopup /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupNormalTitle(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupNormalTitle(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -10991,7 +11027,7 @@ protected virtual IDisposable DrawRibbonGroupNormalTitle(RenderContext context, // Dispose of existing values cache.Dispose(); - GraphicsPath titlePath = new GraphicsPath(); + var titlePath = new GraphicsPath(); // Create the rounded bottom edge to fit inside a group border titlePath.AddLine(rect.Left, rect.Top, rect.Right - 1, rect.Top); @@ -11001,14 +11037,14 @@ protected virtual IDisposable DrawRibbonGroupNormalTitle(RenderContext context, titlePath.AddLine(rect.Left + 2, rect.Bottom - 1, rect.Left, rect.Bottom - 3); titlePath.AddLine(rect.Left, rect.Bottom - 3, rect.Left, rect.Top); - RectangleF rectF = new RectangleF(rect.Left - 0.5f, rect.Top - 0.5f, rect.Width + 1, + var rectF = new RectangleF(rect.Left - 0.5f, rect.Top - 0.5f, rect.Width + 1, rect.Height + 1); cache.TitleBrush = new LinearGradientBrush(rectF, c1, c2, 90f); cache.TitlePath = titlePath; } // Fill path area with a gradient brush - context.Graphics.FillPath(cache.TitleBrush, cache.TitlePath); + context.Graphics.FillPath(cache.TitleBrush!, cache.TitlePath!); } return memento; @@ -11017,11 +11053,11 @@ protected virtual IDisposable DrawRibbonGroupNormalTitle(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupCollapsedBorder(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupCollapsedBorder(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11054,8 +11090,8 @@ protected virtual IDisposable DrawRibbonGroupCollapsedBorder(RenderContext conte // Dispose of existing values cache.Dispose(); - GraphicsPath solidPath = new GraphicsPath(); - GraphicsPath insidePath = new GraphicsPath(); + var solidPath = new GraphicsPath(); + var insidePath = new GraphicsPath(); // Create the rounded complete border solidPath.AddLine(rect.Left + 1.25f, rect.Top, rect.Right - 2, rect.Top); @@ -11077,11 +11113,10 @@ protected virtual IDisposable DrawRibbonGroupCollapsedBorder(RenderContext conte insidePath.AddLine(rect.Left + 1, rect.Bottom - 3, rect.Left + 1, rect.Top + 2); insidePath.AddLine(rect.Left + 1, rect.Top + 2, rect.Left + 2, rect.Top + 1); - RectangleF solidRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); - RectangleF insideRectF = new RectangleF(rect.Left, rect.Top, rect.Width, rect.Height); - - LinearGradientBrush solidBrush = new LinearGradientBrush(solidRectF, c1, c2, 90f); - LinearGradientBrush insideBrush = new LinearGradientBrush(insideRectF, c3, c4, 90f); + var solidRectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var insideRectF = new RectangleF(rect.Left, rect.Top, rect.Width, rect.Height); + var solidBrush = new LinearGradientBrush(solidRectF, c1, c2, 90f); + var insideBrush = new LinearGradientBrush(insideRectF, c3, c4, 90f); cache.SolidPath = solidPath; cache.InsidePath = insidePath; @@ -11090,9 +11125,9 @@ protected virtual IDisposable DrawRibbonGroupCollapsedBorder(RenderContext conte } // Perform actual drawing using the cache values - using AntiAlias aa = new AntiAlias(context.Graphics); - context.Graphics.DrawPath(cache.SolidPen, cache.SolidPath); - context.Graphics.DrawPath(cache.InsidePen, cache.InsidePath); + using var aa = new AntiAlias(context.Graphics); + context.Graphics.DrawPath(cache.SolidPen!, cache.SolidPath!); + context.Graphics.DrawPath(cache.InsidePen!, cache.InsidePath!); } return memento; @@ -11101,11 +11136,11 @@ protected virtual IDisposable DrawRibbonGroupCollapsedBorder(RenderContext conte /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupCollapsedFrameBorder(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupCollapsedFrameBorder(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11135,7 +11170,7 @@ protected virtual IDisposable DrawRibbonGroupCollapsedFrameBorder(RenderContext // Dispose of existing values cache.Dispose(); - GraphicsPath solidPath = new GraphicsPath(); + var solidPath = new GraphicsPath(); // Create the rounded complete border solidPath.AddLine(rect.Left + 2, rect.Top, rect.Right - 3, rect.Top); @@ -11153,12 +11188,12 @@ protected virtual IDisposable DrawRibbonGroupCollapsedFrameBorder(RenderContext } // Perform actual drawing using the cache values - Rectangle titleRect = new Rectangle(rect.Left + 1, rect.Bottom - GROUP_FRAME_TITLE_HEIGHT, + var titleRect = new Rectangle(rect.Left + 1, rect.Bottom - GROUP_FRAME_TITLE_HEIGHT, rect.Width - 2, GROUP_FRAME_TITLE_HEIGHT - 1); - context.Graphics.FillRectangle(cache.TitleBrush, titleRect); + context.Graphics.FillRectangle(cache.TitleBrush!, titleRect); - using AntiAlias aa = new AntiAlias(context.Graphics); - context.Graphics.DrawPath(cache.SolidPen, cache.SolidPath); + using var aa = new AntiAlias(context.Graphics); + context.Graphics.DrawPath(cache.SolidPen!, cache.SolidPath!); } return memento; @@ -11167,11 +11202,11 @@ protected virtual IDisposable DrawRibbonGroupCollapsedFrameBorder(RenderContext /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupGradientOne(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupGradientOne(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11201,7 +11236,7 @@ protected virtual IDisposable DrawRibbonGroupGradientOne(RenderContext context, // Dispose of existing values cache.Dispose(); - RectangleF rectF = new RectangleF(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); + var rectF = new Rectangle(rect.Left - 1, rect.Top - 1, rect.Width + 2, rect.Height + 2); cache.Brush = new LinearGradientBrush(rectF, c1, c2, 90f) { Blend = _ribbonGroup8Blend @@ -11209,7 +11244,7 @@ protected virtual IDisposable DrawRibbonGroupGradientOne(RenderContext context, } // Perform actual drawing using the cache values - context.Graphics.FillRectangle(cache.Brush, rect); + context.Graphics.FillRectangle(cache.Brush!, rect); } return memento; @@ -11218,12 +11253,12 @@ protected virtual IDisposable DrawRibbonGroupGradientOne(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonGroupGradientTwo(RenderContext context, + protected virtual IDisposable? DrawRibbonGroupGradientTwo(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, float percent, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11256,11 +11291,11 @@ protected virtual IDisposable DrawRibbonGroupGradientTwo(RenderContext context, cache.Dispose(); var topHeight = (int)(rect.Height * percent); - Rectangle topRect = new Rectangle(rect.Left, rect.Top, rect.Width, topHeight); - Rectangle bottomRect = new Rectangle(rect.Left, topRect.Bottom, rect.Width, rect.Height - topHeight); - RectangleF topRectF = new RectangleF(topRect.Left - 1, topRect.Top - 1, topRect.Width + 2, + var topRect = new Rectangle(rect.Left, rect.Top, rect.Width, topHeight); + var bottomRect = new Rectangle(rect.Left, topRect.Bottom, rect.Width, rect.Height - topHeight); + var topRectF = new RectangleF(topRect.Left - 1, topRect.Top - 1, topRect.Width + 2, topRect.Height + 2); - RectangleF bottomRectF = new RectangleF(bottomRect.Left - 1, bottomRect.Top - 1, + var bottomRectF = new RectangleF(bottomRect.Left - 1, bottomRect.Top - 1, bottomRect.Width + 2, bottomRect.Height + 2); cache.TopBrush = new LinearGradientBrush(topRectF, c1, c2, 90f); @@ -11270,8 +11305,8 @@ protected virtual IDisposable DrawRibbonGroupGradientTwo(RenderContext context, } // Perform actual drawing using the cache values - context.Graphics.FillRectangle(cache.TopBrush, cache.TopRect); - context.Graphics.FillRectangle(cache.BottomBrush, cache.BottomRect); + context.Graphics.FillRectangle(cache.TopBrush!, cache.TopRect); + context.Graphics.FillRectangle(cache.BottomBrush!, cache.BottomRect); } return memento; @@ -11280,12 +11315,11 @@ protected virtual IDisposable DrawRibbonGroupGradientTwo(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonQATMinibarSingle(RenderContext context, + protected virtual IDisposable? DrawRibbonQATMinibarSingle(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - bool composition, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11318,9 +11352,9 @@ protected virtual IDisposable DrawRibbonQATMinibarSingle(RenderContext context, // Dispose of existing values cache.Dispose(); - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath topRight1 = new GraphicsPath(); - GraphicsPath bottomLeft1 = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var topRight1 = new GraphicsPath(); + var bottomLeft1 = new GraphicsPath(); // Find values needed for drawing the main border var left = rect.X + 1; @@ -11376,28 +11410,19 @@ protected virtual IDisposable DrawRibbonQATMinibarSingle(RenderContext context, cache.WhitenPen = new Pen(c5); } - using AntiAlias aa = new AntiAlias(context.Graphics); - if (!composition) - { - // Draw the light borders - context.Graphics.DrawPath(cache.LightPen, cache.TopRight1); - context.Graphics.DrawPath(cache.LightPen, cache.BottomLeft1); + using var aa = new AntiAlias(context.Graphics); + // Draw the light borders + context.Graphics.DrawPath(cache.LightPen!, cache.TopRight1!); + context.Graphics.DrawPath(cache.LightPen!, cache.BottomLeft1!); - // Draw the inside background and main border - context.Graphics.FillPath(cache.InnerBrush, cache.BorderPath); - context.Graphics.DrawPath(cache.BorderPen, cache.BorderPath); + // Draw the inside background and main border + context.Graphics.FillPath(cache.InnerBrush!, cache.BorderPath!); + context.Graphics.DrawPath(cache.BorderPen!, cache.BorderPath!); - // Overdraw top for lighter effect - context.Graphics.DrawLine(cache.WhitenPen, rect.Left + 10, rect.Top + 2, rect.Right - 10, rect.Top + 2); - context.Graphics.DrawLine(cache.WhitenPen, rect.Left + 12, rect.Top + 3, rect.Right - 8, rect.Top + 3); - context.Graphics.DrawLine(cache.WhitenPen, rect.Left + 14, rect.Top + 4, rect.Right - 7, rect.Top + 4); - } - else - { - // Fill with a semi-transparent background/border - context.Graphics.FillPath(_compositionBrush, cache.BorderPath); - context.Graphics.DrawPath(_compositionPen, cache.BorderPath); - } + // Overdraw top for lighter effect + context.Graphics.DrawLine(cache.WhitenPen!, rect.Left + 10, rect.Top + 2, rect.Right - 10, rect.Top + 2); + context.Graphics.DrawLine(cache.WhitenPen!, rect.Left + 12, rect.Top + 3, rect.Right - 8, rect.Top + 3); + context.Graphics.DrawLine(cache.WhitenPen!, rect.Left + 14, rect.Top + 4, rect.Right - 7, rect.Top + 4); } return memento; @@ -11406,12 +11431,11 @@ protected virtual IDisposable DrawRibbonQATMinibarSingle(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonQATMinibarDouble(RenderContext context, + protected virtual IDisposable? DrawRibbonQATMinibarDouble(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - bool composition, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11444,9 +11468,9 @@ protected virtual IDisposable DrawRibbonQATMinibarDouble(RenderContext context, // Dispose of existing values cache.Dispose(); - GraphicsPath borderPath = new GraphicsPath(); - GraphicsPath topRight1 = new GraphicsPath(); - GraphicsPath bottomLeft1 = new GraphicsPath(); + var borderPath = new GraphicsPath(); + var topRight1 = new GraphicsPath(); + var bottomLeft1 = new GraphicsPath(); // Find values needed for drawing the main border var left = rect.X + 1; @@ -11503,23 +11527,14 @@ protected virtual IDisposable DrawRibbonQATMinibarDouble(RenderContext context, cache.WhitenPen = new Pen(c5); } - using AntiAlias aa = new AntiAlias(context.Graphics); - if (!composition) - { - // Draw the light borders - context.Graphics.DrawPath(cache.LightPen, cache.TopRight1); - context.Graphics.DrawPath(cache.LightPen, cache.BottomLeft1); + using var aa = new AntiAlias(context.Graphics); + // Draw the light borders + context.Graphics.DrawPath(cache.LightPen!, cache.TopRight1!); + context.Graphics.DrawPath(cache.LightPen!, cache.BottomLeft1!); - // Draw the inside background and main border - context.Graphics.FillPath(cache.InnerBrush, cache.BorderPath); - context.Graphics.DrawPath(cache.BorderPen, cache.BorderPath); - } - else - { - // Fill with a semi-transparent background/border - context.Graphics.FillPath(_compositionBrush, cache.BorderPath); - context.Graphics.DrawPath(_compositionPen, cache.BorderPath); - } + // Draw the inside background and main border + context.Graphics.FillPath(cache.InnerBrush!, cache.BorderPath!); + context.Graphics.DrawPath(cache.BorderPen!, cache.BorderPath!); } return memento; @@ -11528,11 +11543,11 @@ protected virtual IDisposable DrawRibbonQATMinibarDouble(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonLinear(RenderContext context, + protected virtual IDisposable? DrawRibbonLinear(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11565,7 +11580,7 @@ protected virtual IDisposable DrawRibbonLinear(RenderContext context, cache.LinearBrush = new LinearGradientBrush(new RectangleF(rect.X - 1, rect.Y - 1, rect.Width + 2, rect.Height + 2), c1, c2, 90f); } - context.Graphics.FillRectangle(cache.LinearBrush, rect); + context.Graphics.FillRectangle(cache.LinearBrush!, rect); } return memento; @@ -11574,11 +11589,11 @@ protected virtual IDisposable DrawRibbonLinear(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonLinearBorder(RenderContext context, + protected virtual IDisposable? DrawRibbonLinearBorder(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11612,7 +11627,7 @@ protected virtual IDisposable DrawRibbonLinearBorder(RenderContext context, cache.LinearPen = new Pen(cache.LinearBrush); // Create the rounded complete border - GraphicsPath borderPath = new GraphicsPath(); + var borderPath = new GraphicsPath(); borderPath.AddLine(rect.Left + 2, rect.Top, rect.Right - 3, rect.Top); borderPath.AddLine(rect.Right - 3, rect.Top, rect.Right - 1, rect.Top + 2); borderPath.AddLine(rect.Right - 1, rect.Top + 2, rect.Right - 1, rect.Bottom - 3); @@ -11622,10 +11637,9 @@ protected virtual IDisposable DrawRibbonLinearBorder(RenderContext context, borderPath.AddLine(rect.Left, rect.Bottom - 3, rect.Left, rect.Top + 2); borderPath.AddLine(rect.Left, rect.Top + 2, rect.Left + 2, rect.Top); cache.BorderPath = borderPath; - } - context.Graphics.DrawPath(cache.LinearPen, cache.BorderPath); + context.Graphics.DrawPath(cache.LinearPen!, cache.BorderPath!); } return memento; @@ -11634,11 +11648,11 @@ protected virtual IDisposable DrawRibbonLinearBorder(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonAppMenuInner(RenderContext context, + protected virtual IDisposable? DrawRibbonAppMenuInner(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11673,9 +11687,9 @@ protected virtual IDisposable DrawRibbonAppMenuInner(RenderContext context, } // Draw the outside in one color and the inside with another - context.Graphics.FillRectangle(cache.OutsideBrush, rect); + context.Graphics.FillRectangle(cache.OutsideBrush!, rect); rect.Inflate(-1, -1); - context.Graphics.FillRectangle(cache.InsideBrush, rect); + context.Graphics.FillRectangle(cache.InsideBrush!, rect); } return memento; @@ -11684,11 +11698,11 @@ protected virtual IDisposable DrawRibbonAppMenuInner(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonAppMenuOuter(RenderContext context, + protected virtual IDisposable? DrawRibbonAppMenuOuter(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11734,9 +11748,9 @@ protected virtual IDisposable DrawRibbonAppMenuOuter(RenderContext context, } // Draw entire background in solid brush - context.Graphics.FillPath(cache.WholeBrush, cache.BackPath); - context.Graphics.FillRectangle(cache.BottomDarkGradient, rect with { Y = rect.Bottom - 14, Height = 13 }); - context.Graphics.FillRectangle(cache.TopLightenGradient, rect with { Height = 6 }); + context.Graphics.FillPath(cache.WholeBrush!, cache.BackPath!); + context.Graphics.FillRectangle(cache.BottomDarkGradient!, rect with { Y = rect.Bottom - 14, Height = 13 }); + context.Graphics.FillRectangle(cache.TopLightenGradient!, rect with { Height = 6 }); } return memento; @@ -11745,11 +11759,11 @@ protected virtual IDisposable DrawRibbonAppMenuOuter(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonQATFullbarRound(RenderContext context, + protected virtual IDisposable? DrawRibbonQATFullbarRound(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { // We never draw the top line rect.Y++; @@ -11788,9 +11802,9 @@ protected virtual IDisposable DrawRibbonQATFullbarRound(RenderContext context, cache.InnerBrush = new LinearGradientBrush(rect, c1, c2, 90f); cache.DarkPen = new Pen(c3); - GraphicsPath darkPath = new GraphicsPath(); - GraphicsPath lightPath1 = new GraphicsPath(); - GraphicsPath lightPath2 = new GraphicsPath(); + var darkPath = new GraphicsPath(); + var lightPath1 = new GraphicsPath(); + var lightPath2 = new GraphicsPath(); // Create the dark border darkPath.AddLine(rect.Left, rect.Top + 0.75f, rect.Left + 1, rect.Top); @@ -11816,13 +11830,13 @@ protected virtual IDisposable DrawRibbonQATFullbarRound(RenderContext context, } // Draw a gradient for the inside of the area - context.Graphics.FillRectangle(cache.InnerBrush, cache.InnerRect); + context.Graphics.FillRectangle(cache.InnerBrush!, cache.InnerRect); // Draw the dark/light lines - using AntiAlias aa = new AntiAlias(context.Graphics); - context.Graphics.DrawPath(cache.DarkPen, cache.DarkPath); - context.Graphics.DrawPath(_light1Pen, cache.LightPath1); - context.Graphics.DrawPath(_light2Pen, cache.LightPath2); + using var aa = new AntiAlias(context.Graphics); + context.Graphics.DrawPath(cache.DarkPen!, cache.DarkPath!); + context.Graphics.DrawPath(_light1Pen, cache.LightPath1!); + context.Graphics.DrawPath(_light2Pen, cache.LightPath2!); } return memento; @@ -11831,11 +11845,11 @@ protected virtual IDisposable DrawRibbonQATFullbarRound(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonQATFullbarSquare(RenderContext context, + protected virtual IDisposable? DrawRibbonQATFullbarSquare(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11872,14 +11886,14 @@ protected virtual IDisposable DrawRibbonQATFullbarSquare(RenderContext context, } // Fill entire area in background brush - context.Graphics.FillRectangle(cache.MediumBrush, rect); + context.Graphics.FillRectangle(cache.MediumBrush!, rect); // Draw the outside border - context.Graphics.DrawRectangle(cache.DarkPen, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); + context.Graphics.DrawRectangle(cache.DarkPen!, rect.X, rect.Y, rect.Width - 1, rect.Height - 1); - // Draw ligher top and bottom lines - context.Graphics.DrawLine(cache.LightPen, rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Y + 1); - context.Graphics.DrawLine(cache.LightPen, rect.X + 1, rect.Bottom - 2, rect.Width - 2, rect.Bottom - 2); + // Draw lighter top and bottom lines + context.Graphics.DrawLine(cache.LightPen!, rect.X + 1, rect.Y + 1, rect.Width - 2, rect.Y + 1); + context.Graphics.DrawLine(cache.LightPen!, rect.X + 1, rect.Bottom - 2, rect.Width - 2, rect.Bottom - 2); } return memento; @@ -11888,12 +11902,12 @@ protected virtual IDisposable DrawRibbonQATFullbarSquare(RenderContext context, /// /// Internal rendering method. /// - protected virtual IDisposable DrawRibbonQATOverflow(PaletteRibbonShape shape, + protected virtual IDisposable? DrawRibbonQATOverflow(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -11928,12 +11942,12 @@ protected virtual IDisposable DrawRibbonQATOverflow(PaletteRibbonShape shape, } // Draw a gradient for the inside of the area - context.Graphics.FillRectangle(cache.BackBrush, rect); + context.Graphics.FillRectangle(cache.BackBrush!, rect); - using AntiAlias aa = new AntiAlias(context.Graphics); + using var aa = new AntiAlias(context.Graphics); if (shape == PaletteRibbonShape.Office2010) { - context.Graphics.DrawPolygon(cache.BorderPen, new Point[]{ + context.Graphics.DrawPolygon(cache.BorderPen!, new[]{ new Point(rect.Left + 1, rect.Top), new Point(rect.Right - 2, rect.Top), new Point(rect.Right - 1, rect.Top + 1), new Point(rect.Right - 1, rect.Bottom - 2), new Point(rect.Right - 2, rect.Bottom - 1), new Point(rect.Left + 1, rect.Bottom - 1), @@ -11941,14 +11955,14 @@ protected virtual IDisposable DrawRibbonQATOverflow(PaletteRibbonShape shape, } else { - context.Graphics.DrawLine(cache.BorderPen, rect.Left + 1f, rect.Top, rect.Right - 2f, rect.Top); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 2f, rect.Top, rect.Right - 1f, rect.Top + 2f); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 1f, rect.Top + 2f, rect.Right - 1f, rect.Bottom - 2f); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 1f, rect.Bottom - 2f, rect.Right - 2f, rect.Bottom - 1f); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 2f, rect.Bottom - 1f, rect.Left + 1f, rect.Bottom - 1f); - context.Graphics.DrawLine(cache.BorderPen, rect.Left + 1f, rect.Bottom - 1f, rect.Left, rect.Bottom - 2f); - context.Graphics.DrawLine(cache.BorderPen, rect.Left, rect.Bottom - 2f, rect.Left, rect.Top + 1f); - context.Graphics.DrawLine(cache.BorderPen, rect.Left, rect.Top + 1f, rect.Left + 1f, rect.Top); + context.Graphics.DrawLine(cache.BorderPen!, rect.Left + 1f, rect.Top, rect.Right - 2f, rect.Top); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 2f, rect.Top, rect.Right - 1f, rect.Top + 2f); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 1f, rect.Top + 2f, rect.Right - 1f, rect.Bottom - 2f); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 1f, rect.Bottom - 2f, rect.Right - 2f, rect.Bottom - 1f); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 2f, rect.Bottom - 1f, rect.Left + 1f, rect.Bottom - 1f); + context.Graphics.DrawLine(cache.BorderPen!, rect.Left + 1f, rect.Bottom - 1f, rect.Left, rect.Bottom - 2f); + context.Graphics.DrawLine(cache.BorderPen!, rect.Left, rect.Bottom - 2f, rect.Left, rect.Top + 1f); + context.Graphics.DrawLine(cache.BorderPen!, rect.Left, rect.Top + 1f, rect.Left + 1f, rect.Top); } } @@ -11974,7 +11988,7 @@ private class StandardContentMemento : IDisposable public Rectangle ShortTextRect; public TextRenderingHint ShortTextHint; public PaletteTextTrim LongTextTrimming; - public AccurateTextMemento LongTextMemento; + public AccurateTextMemento? LongTextMemento; public Rectangle LongTextRect; public TextRenderingHint LongTextHint; public VisualOrientation Orientation; diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio.cs index e30a2fb2b..1c84cf4c6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio.cs @@ -1,20 +1,20 @@ #region BSD License /* - * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. */ #endregion namespace Krypton.Toolkit { + /// + /// + /// public class RenderVisualStudio : RenderMicrosoft365 { #region Static Variables - private static readonly float BORDER_PERCENT = 0.6f; - - private static readonly float WHITE_PERCENT = 0.4f; + private const float BORDER_PERCENT = 0.6f; + private const float WHITE_PERCENT = 0.4f; #endregion #region Constructor @@ -43,11 +43,11 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, Debug.Assert(paletteBack != null); // Get the first border color, and then lighten it by merging with white - Color borderColour = paletteBack.GetBackColor1(state), lightColour = CommonHelper.MergeColors(borderColour, BORDER_PERCENT, Color.White, WHITE_PERCENT); + Color borderColour = paletteBack!.GetBackColor1(state), lightColour = CommonHelper.MergeColors(borderColour, BORDER_PERCENT, Color.White, WHITE_PERCENT); // Draw inside of the border edge in a lighter version of the border using var drawBrush = new SolidBrush(lightColour); - context.Graphics.FillRectangle(drawBrush, displayRect); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -81,7 +81,7 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, IDisposable memento) + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -120,16 +120,16 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, Recta } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; @@ -142,13 +142,15 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, Recta /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, Color baseColor1, Color baseColor2, IDisposable memento) + public override IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, + Rectangle rect, PaletteState state, IPaletteRibbonFileAppTab palette, IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { + Color topColor = palette.GetRibbonFileAppTabTopColor(state); + Color bottomColor = palette.GetRibbonFileAppTabBottomColor(state); var generate = true; MementoRibbonAppTab2013 cache; @@ -156,13 +158,13 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R if (memento is MementoRibbonAppTab2013 tab2013) { cache = tab2013; - generate = !cache.UseCachedValues(rect, baseColor1); + generate = !cache.UseCachedValues(rect, topColor); } else { memento?.Dispose(); - cache = new MementoRibbonAppTab2013(rect, baseColor1); + cache = new MementoRibbonAppTab2013(rect, topColor); memento = cache; } @@ -174,18 +176,15 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R // Create common paths to all the app tab states cache.GeneratePaths(rect, state); - //cache.borderPen = new Pen(baseColor1); // Create state specific colors/brushes/pens cache.InsideFillBrush = state switch { - PaletteState.Normal => - //cache.borderBrush = new SolidBrush(baseColor1); - new SolidBrush(baseColor1), - PaletteState.Tracking => new SolidBrush(baseColor2), - PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush( - ControlPaint.LightLight(baseColor2)), - PaletteState.Pressed => new SolidBrush(baseColor2), + PaletteState.Normal => new SolidBrush(topColor), + PaletteState.Disabled => new SolidBrush(ControlPaint.DarkDark(topColor)), + PaletteState.Tracking => new SolidBrush(bottomColor), + PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush(ControlPaint.LightLight(bottomColor)), + PaletteState.Pressed => new SolidBrush(bottomColor), _ => cache.InsideFillBrush }; } @@ -199,7 +198,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R // Fill inside area //context.Graphics.FillPath(cache.insideFillBrush, cache.insideFillPath); - context.Graphics.FillRectangle(cache.InsideFillBrush, cache.Rect); + context.Graphics.FillRectangle(cache.InsideFillBrush!, cache.Rect); // Draw highlight over bottom half //using (Clipping clip = new Clipping(context.Graphics, cache.insideFillPath)) @@ -212,7 +211,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable memento, bool standard) + protected override IDisposable? DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) { @@ -246,7 +245,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.Dispose(); // If we have a context color to use then modify the drawing colors - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -276,15 +275,15 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.CenterPen = new Pen(c4); } - context.Graphics.FillRectangle(cache.CenterBrush, cache.Rect); + context.Graphics.FillRectangle(cache.CenterBrush!, cache.Rect); //context.Graphics.FillPath(cache.centerBrush, cache.outsidePath); - //if (c5 != Color.Empty) + //if (c5 != GlobalStaticValues.EMPTY_COLOR) // context.Graphics.FillPath(cache.insideBrush, cache.insidePath); //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.outsidePath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); //switch (orientation) //{ @@ -309,7 +308,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable memento, bool standard) + protected override IDisposable? DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) { @@ -343,7 +342,7 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap cache.Dispose(); // If c5 has a colour then use that to highlight the tab - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -377,12 +376,12 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap // Fill the full background //context.Graphics.FillPath(cache.outsideBrush, cache.outsidePath); - context.Graphics.FillRectangle(cache.OutsideBrush, cache.Rect); + context.Graphics.FillRectangle(cache.OutsideBrush!, cache.Rect); // Draw the border //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.borderPath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); // Fill the inside area //context.Graphics.FillPath(cache.insideBrush, cache.insidePath); diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2007.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2007.cs index 184c7d7b7..f60ca3169 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2007.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2007.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -25,20 +25,20 @@ static RenderVisualStudio2010With2007() { _ribbonGroup5Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.5f, 1.0f] }; _ribbonGroup6Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.75f, 1.0f }, - Positions = new[] { 0.0f, 0.1f, 0.45f, 1.0f } + Factors = [0.0f, 0.0f, 0.75f, 1.0f], + Positions = [0.0f, 0.1f, 0.45f, 1.0f] }; _ribbonGroup7Blend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.15f, 0.85f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f, 0.0f], + Positions = [0.0f, 0.15f, 0.85f, 1.0f] }; } #endregion @@ -58,8 +58,18 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, [DisallowNull] IPaletteBack paletteBack, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteBack != null); + Debug.Assert(context is not null); + Debug.Assert(paletteBack is not null); + + if (paletteBack is null) + { + throw new ArgumentNullException(nameof(paletteBack)); + } + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } // Get the first border color Color borderColor = paletteBack.GetBackColor1(state); @@ -107,11 +117,11 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -164,14 +174,14 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right border lines - context.Graphics.DrawLine(cache.BorderPen, rect.X, rect.Y, rect.X, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderPen!, rect.X, rect.Y, rect.X, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); // Fill the inner area with a gradient context specific color - context.Graphics.FillRectangle(cache.FillBrush, cache.FillRect); + context.Graphics.FillRectangle(cache.FillBrush!, cache.FillRect); // Overdraw the brighter line at bottom - context.Graphics.DrawLine(cache.UnderlinePen, rect.X + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); + context.Graphics.DrawLine(cache.UnderlinePen!, rect.X + 1, rect.Bottom - 2, rect.Right - 2, rect.Bottom - 2); } return memento; diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2010.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2010.cs index 67fab72ba..e80174573 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2010.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2010.cs @@ -1,7 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -27,20 +27,20 @@ static RenderVisualStudio2010With2010() { _ribbonGroup5Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 1.0f }, - Positions = new[] { 0.0f, 0.5f, 1.0f } + Factors = [0.0f, 0.0f, 1.0f], + Positions = [0.0f, 0.5f, 1.0f] }; _ribbonGroup6Blend = new Blend { - Factors = new[] { 0.0f, 0.0f, 0.75f, 1.0f }, - Positions = new[] { 0.0f, 0.1f, 0.45f, 1.0f } + Factors = [0.0f, 0.0f, 0.75f, 1.0f], + Positions = [0.0f, 0.1f, 0.45f, 1.0f] }; _ribbonGroup7Blend = new Blend { - Factors = new[] { 0.0f, 1.0f, 1.0f, 0.0f }, - Positions = new[] { 0.0f, 0.15f, 0.85f, 1.0f } + Factors = [0.0f, 1.0f, 1.0f, 0.0f], + Positions = [0.0f, 0.15f, 0.85f, 1.0f] }; } #endregion @@ -60,8 +60,18 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, [DisallowNull] IPaletteBack paletteBack, PaletteState state) { - Debug.Assert(context != null); - Debug.Assert(paletteBack != null); + Debug.Assert(context is not null); + Debug.Assert(paletteBack is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (paletteBack is null) + { + throw new ArgumentNullException(nameof(paletteBack)); + } // Get the first border color Color borderColor = paletteBack.GetBackColor1(state); @@ -111,11 +121,11 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -154,16 +164,16 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2013.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2013.cs index 17a4be4c4..fe3763457 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2013.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010With2013.cs @@ -1,8 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion @@ -14,8 +13,8 @@ namespace Krypton.Toolkit public class RenderVisualStudio2010With2013 : RenderOffice2010 { #region Static Fields - private static readonly float BORDER_PERCENT = 0.6f; - private static readonly float WHITE_PERCENT = 0.4f; + private const float BORDER_PERCENT = 0.6f; + private const float WHITE_PERCENT = 0.4f; //private static readonly Blend _ribbonGroup5Blend; //private static readonly Blend _ribbonGroup6Blend; //private static readonly Blend _ribbonGroup7Blend; @@ -57,7 +56,7 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, Debug.Assert(paletteBack != null); // Get the first border color - Color borderColor = paletteBack.GetBackColor1(state); + Color borderColor = paletteBack!.GetBackColor1(state); // We want to lighten it by merging with white Color lightColor = CommonHelper.MergeColors(borderColor, BORDER_PERCENT, @@ -65,7 +64,7 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, // Draw inside of the border edge in a lighter version of the border using var drawBrush = new SolidBrush(lightColor); - context.Graphics.FillRectangle(drawBrush, displayRect); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -104,11 +103,11 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, - IDisposable memento) + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -147,16 +146,16 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; @@ -168,19 +167,19 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, + public override IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, - Color baseColor1, - Color baseColor2, - IDisposable memento) + IPaletteRibbonFileAppTab palette, + IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { + Color topColor = palette.GetRibbonFileAppTabTopColor(state); + Color bottomColor = palette.GetRibbonFileAppTabBottomColor(state); var generate = true; MementoRibbonAppTab2013 cache; @@ -188,13 +187,13 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, if (memento is MementoRibbonAppTab2013 tab2013) { cache = tab2013; - generate = !cache.UseCachedValues(rect, baseColor1); + generate = !cache.UseCachedValues(rect, topColor); } else { memento?.Dispose(); - cache = new MementoRibbonAppTab2013(rect, baseColor1); + cache = new MementoRibbonAppTab2013(rect, topColor); memento = cache; } @@ -206,18 +205,15 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, // Create common paths to all the app tab states cache.GeneratePaths(rect, state); - //cache.borderPen = new Pen(baseColor1); // Create state specific colors/brushes/pens cache.InsideFillBrush = state switch { - PaletteState.Normal => - //cache.borderBrush = new SolidBrush(baseColor1); - new SolidBrush(baseColor1), - PaletteState.Tracking => new SolidBrush(baseColor2), - PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush( - ControlPaint.LightLight(baseColor2)), - PaletteState.Pressed => new SolidBrush(baseColor2), + PaletteState.Normal => new SolidBrush(topColor), + PaletteState.Disabled => new SolidBrush(ControlPaint.DarkDark(topColor)), + PaletteState.Tracking => new SolidBrush(bottomColor), + PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush(ControlPaint.LightLight(bottomColor)), + PaletteState.Pressed => new SolidBrush(bottomColor), _ => cache.InsideFillBrush }; } @@ -231,7 +227,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, // Fill inside area //context.Graphics.FillPath(cache.insideFillBrush, cache.insideFillPath); - context.Graphics.FillRectangle(cache.InsideFillBrush, cache.Rect); + context.Graphics.FillRectangle(cache.InsideFillBrush!, cache.Rect); // Draw highlight over bottom half //using (Clipping clip = new Clipping(context.Graphics, cache.insideFillPath)) @@ -244,12 +240,12 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, + protected override IDisposable? DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento, + IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) @@ -284,7 +280,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.Dispose(); // If we have a context color to use then modify the drawing colors - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -314,15 +310,15 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.CenterPen = new Pen(c4); } - context.Graphics.FillRectangle(cache.CenterBrush, cache.Rect); + context.Graphics.FillRectangle(cache.CenterBrush!, cache.Rect); //context.Graphics.FillPath(cache.centerBrush, cache.outsidePath); - //if (c5 != Color.Empty) + //if (c5 != GlobalStaticValues.EMPTY_COLOR) // context.Graphics.FillPath(cache.insideBrush, cache.insidePath); //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.outsidePath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); //switch (orientation) //{ @@ -347,13 +343,13 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape, + protected override IDisposable? DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, - IDisposable memento, + IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) @@ -388,7 +384,7 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap cache.Dispose(); // If c5 has a colour then use that to highlight the tab - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -422,12 +418,12 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap // Fill the full background //context.Graphics.FillPath(cache.outsideBrush, cache.outsidePath); - context.Graphics.FillRectangle(cache.OutsideBrush, cache.Rect); + context.Graphics.FillRectangle(cache.OutsideBrush!, cache.Rect); // Draw the border //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.borderPath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); // Fill the inside area //context.Graphics.FillPath(cache.insideBrush, cache.insidePath); diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010WithMicrosoft365.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010WithMicrosoft365.cs index 4b142c41a..83ee9ea0b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010WithMicrosoft365.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/RenderVisualStudio2010WithMicrosoft365.cs @@ -1,8 +1,7 @@ #region BSD License /* * BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion @@ -15,15 +14,14 @@ namespace Krypton.Toolkit public class RenderVisualStudio2010WithMicrosoft365 : RenderOffice2010 { #region Static Variables - private static readonly float BORDER_PERCENT = 0.6f; - - private static readonly float WHITE_PERCENT = 0.4f; + private const float BORDER_PERCENT = 0.6f; + private const float WHITE_PERCENT = 0.4f; #endregion #region Constructor static RenderVisualStudio2010WithMicrosoft365() { - + // ?? } #endregion @@ -46,11 +44,11 @@ public override void DrawRibbonClusterEdge(PaletteRibbonShape shape, Debug.Assert(paletteBack != null); // Get the first border color, and then lighten it by merging with white - Color borderColour = paletteBack.GetBackColor1(state), lightColour = CommonHelper.MergeColors(borderColour, BORDER_PERCENT, Color.White, WHITE_PERCENT); + Color borderColour = paletteBack!.GetBackColor1(state), lightColour = CommonHelper.MergeColors(borderColour, BORDER_PERCENT, Color.White, WHITE_PERCENT); // Draw inside of the border edge in a lighter version of the border using var drawBrush = new SolidBrush(lightColour); - context.Graphics.FillRectangle(drawBrush, displayRect); + context!.Graphics.FillRectangle(drawBrush, displayRect); } #endregion @@ -84,7 +82,7 @@ public override ToolStripRenderer RenderToolStrip([DisallowNull] PaletteBase col /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, IDisposable memento) + protected override IDisposable? DrawRibbonTabContext(RenderContext context, Rectangle rect, IPaletteRibbonGeneral paletteGeneral, IPaletteRibbonBack paletteBack, IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { @@ -123,16 +121,16 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, Recta } // Draw the left and right borders - context.Graphics.DrawLine(cache.BorderOuterPen, rect.X, rect.Y, rect.X, rect.Bottom); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderOuterPen, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); - context.Graphics.DrawLine(cache.BorderInnerPen, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.X, rect.Y, rect.X, rect.Bottom); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.X + 1, rect.Y, rect.X + 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderOuterPen!, rect.Right - 1, rect.Y, rect.Right - 1, rect.Bottom - 1); + context.Graphics.DrawLine(cache.BorderInnerPen!, rect.Right - 2, rect.Y, rect.Right - 2, rect.Bottom - 1); // Draw the solid block of colour at the top - context.Graphics.FillRectangle(cache.TopBrush, rect.X + 2, rect.Y, rect.Width - 4, 4); + context.Graphics.FillRectangle(cache.TopBrush!, rect.X + 2, rect.Y, rect.Width - 4, 4); // Draw the gradient to the bottom - context.Graphics.FillRectangle(cache.BottomBrush, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); + context.Graphics.FillRectangle(cache.BottomBrush!, rect.X + 2, rect.Y + 4, rect.Width - 4, rect.Height - 4); } return memento; @@ -145,13 +143,15 @@ protected override IDisposable DrawRibbonTabContext(RenderContext context, Recta /// Rendering context. /// Target rectangle. /// State associated with rendering. - /// Base color1 used for drawing the ribbon tab. - /// Base color2 used for drawing the ribbon tab. + /// Palette used for sourcing settings. /// Cached values to use when drawing. - public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, Color baseColor1, Color baseColor2, IDisposable memento) + public override IDisposable? DrawRibbonFileApplicationTab(PaletteRibbonShape shape, RenderContext context, + Rectangle rect, PaletteState state, IPaletteRibbonFileAppTab palette, IDisposable? memento) { if (rect is { Width: > 0, Height: > 0 }) { + Color topColor = palette.GetRibbonFileAppTabTopColor(state); + Color bottomColor = palette.GetRibbonFileAppTabBottomColor(state); var generate = true; MementoRibbonAppTab2013 cache; @@ -159,13 +159,13 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R if (memento is MementoRibbonAppTab2013 tab2013) { cache = tab2013; - generate = !cache.UseCachedValues(rect, baseColor1); + generate = !cache.UseCachedValues(rect, topColor); } else { memento?.Dispose(); - cache = new MementoRibbonAppTab2013(rect, baseColor1); + cache = new MementoRibbonAppTab2013(rect, topColor); memento = cache; } @@ -177,18 +177,15 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R // Create common paths to all the app tab states cache.GeneratePaths(rect, state); - //cache.borderPen = new Pen(baseColor1); // Create state specific colors/brushes/pens cache.InsideFillBrush = state switch { - PaletteState.Normal => - //cache.borderBrush = new SolidBrush(baseColor1); - new SolidBrush(baseColor1), - PaletteState.Tracking => new SolidBrush(baseColor2), - PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush( - ControlPaint.LightLight(baseColor2)), - PaletteState.Pressed => new SolidBrush(baseColor2), + PaletteState.Normal => new SolidBrush(topColor), + PaletteState.Disabled => new SolidBrush(ControlPaint.DarkDark(topColor)), + PaletteState.Tracking => new SolidBrush(bottomColor), + PaletteState.Tracking | PaletteState.FocusOverride => new SolidBrush(ControlPaint.LightLight(bottomColor)), + PaletteState.Pressed => new SolidBrush(bottomColor), _ => cache.InsideFillBrush }; } @@ -202,7 +199,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R // Fill inside area //context.Graphics.FillPath(cache.insideFillBrush, cache.insideFillPath); - context.Graphics.FillRectangle(cache.InsideFillBrush, cache.Rect); + context.Graphics.FillRectangle(cache.InsideFillBrush!, cache.Rect); // Draw highlight over bottom half //using (Clipping clip = new Clipping(context.Graphics, cache.insideFillPath)) @@ -215,7 +212,7 @@ public override IDisposable DrawRibbonApplicationTab(PaletteRibbonShape shape, R /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable memento, bool standard) + protected override IDisposable? DrawRibbonTabSelected2010(RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) { @@ -249,7 +246,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.Dispose(); // If we have a context color to use then modify the drawing colors - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -279,15 +276,15 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, cache.CenterPen = new Pen(c4); } - context.Graphics.FillRectangle(cache.CenterBrush, cache.Rect); + context.Graphics.FillRectangle(cache.CenterBrush!, cache.Rect); //context.Graphics.FillPath(cache.centerBrush, cache.outsidePath); - //if (c5 != Color.Empty) + //if (c5 != GlobalStaticValues.EMPTY_COLOR) // context.Graphics.FillPath(cache.insideBrush, cache.insidePath); //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.outsidePath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); //switch (orientation) //{ @@ -312,7 +309,7 @@ protected override IDisposable DrawRibbonTabSelected2010(RenderContext context, /// /// Internal rendering method. /// - protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable memento, bool standard) + protected override IDisposable? DrawRibbonTabTracking2010(PaletteRibbonShape shape, RenderContext context, Rectangle rect, PaletteState state, IPaletteRibbonBack palette, VisualOrientation orientation, IDisposable? memento, bool standard) { if (rect is { Width: > 0, Height: > 0 }) { @@ -346,7 +343,7 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap cache.Dispose(); // If c5 has a colour then use that to highlight the tab - if (c5 != Color.Empty) + if (c5 != GlobalStaticValues.EMPTY_COLOR) { if (!standard) { @@ -380,12 +377,12 @@ protected override IDisposable DrawRibbonTabTracking2010(PaletteRibbonShape shap // Fill the full background //context.Graphics.FillPath(cache.outsideBrush, cache.outsidePath); - context.Graphics.FillRectangle(cache.OutsideBrush, cache.Rect); + context.Graphics.FillRectangle(cache.OutsideBrush!, cache.Rect); // Draw the border //using (AntiAlias aa = new AntiAlias(context.Graphics)) // context.Graphics.DrawPath(cache.outsidePen, cache.borderPath); - context.Graphics.DrawRectangle(cache.OutsidePen, cache.Rect); + context.Graphics.DrawRectangle(cache.OutsidePen!, cache.Rect); // Fill the inside area //context.Graphics.FillPath(cache.insideBrush, cache.insidePath); diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/ThemeManager.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/ThemeManager.cs index 16b94a6c8..78d2e31e6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/ThemeManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/ThemeManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,77 +17,79 @@ namespace Krypton.Toolkit /// public class ThemeManager { - #region Properties /// Gets the supported theme array. /// The supported theme array. public static ICollection SupportedInternalThemeNames => PaletteModeStrings.SupportedInternalThemeNames; - /// Gets or sets the index of the theme. - /// The index of the theme. - public static int ThemeIndex { get; set; } = 33; + /// Returns the Default Global Palette. + public static PaletteMode DefaultGlobalPalette => GlobalStaticValues.GLOBAL_DEFAULT_PALETTE_MODE; #endregion #region Implementation + /// Returns the palette mode from the Krypton Manager instance. + /// The manager instance. + /// The current . + public static PaletteMode GetPaletteMode(KryptonManager manager) => manager.GlobalPaletteMode; + /// - /// Applies the theme. + /// Applies the theme using PaletteMode enumeration. /// - /// The mode. + /// The palette mode. /// The manager. - private static void ApplyTheme(PaletteMode mode, KryptonManager manager) => manager.GlobalPaletteMode = mode; + public static void ApplyTheme(PaletteMode mode, KryptonManager manager) => ApplyGlobalTheme(manager, mode); - /// Gets the palette mode. + /// + /// Applies the theme using the themes name.
+ ///
+ /// Valid name of the theme. /// The manager. - /// The current . - public static PaletteMode GetPaletteMode(KryptonManager manager) => ReturnPaletteMode(manager.GlobalPaletteMode); - - /// Returns the palette mode. - /// The palette mode manager. - /// The selected . - private static PaletteMode ReturnPaletteMode(PaletteMode paletteMode) => paletteMode; + public static void ApplyTheme(string themeName, KryptonManager manager) => ApplyGlobalTheme(manager, GetThemeManagerMode(themeName)); /// - /// Applies the theme. + /// Sets the theme. /// /// Name of the theme. /// The manager. - public static void ApplyTheme(string themeName, KryptonManager manager) => ApplyTheme(PaletteModeStrings.SupportedThemesMap[themeName], manager); + [Obsolete("Deprecated and will be removed in V100. Replace this with calls to ApplyTheme( . . . )")] + public static void SetTheme(string themeName, KryptonManager manager) => + //TODO V100 Remove SetTheme method + ApplyGlobalTheme(manager, GetThemeManagerMode(themeName)); /// - /// Sets the theme. + /// Applies the global theme. /// - /// Name of the theme. /// The manager. - public static void SetTheme(string themeName, KryptonManager manager) + /// The palette mode manager. + public static void ApplyGlobalTheme(KryptonManager manager, PaletteMode paletteMode) { try { - ApplyTheme(themeName, manager); - - ApplyGlobalTheme(manager, GetPaletteMode(manager)); + manager.GlobalPaletteMode = paletteMode; } catch (Exception exc) { - ExceptionHandler.CaptureException(exc); + ExceptionHandler.CaptureException(exc, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } /// - /// Returns the palette mode manager as string. + /// Returns the respective theme name for the given KryptonManager instance.
///
- /// The palette mode manager. - /// The manager. - /// The chosen theme as a string. - public static string ReturnPaletteModeAsString(PaletteMode paletteMode, KryptonManager? manager) - { - var mode = manager?.GlobalPaletteMode ?? paletteMode; - var cnvtr = new PaletteModeConverter(); - return cnvtr.ConvertToString(mode)!; - } + /// A valid reference to a KryptonManager instance. + /// The theme name. + public static string ReturnPaletteModeAsString(KryptonManager manager) => ReturnPaletteModeAsString(manager.GlobalPaletteMode); + /// + /// Returns the palette mode as string. + /// + /// The palette mode. + /// The theme name + public static string ReturnPaletteModeAsString(PaletteMode paletteMode) => new PaletteModeConverter().ConvertToString(paletteMode)!; + /// /// Loads the custom theme. /// @@ -99,8 +101,6 @@ public static void LoadCustomTheme(KryptonCustomPaletteBase palette, KryptonMana { try { - //throw new ApplicationException(@"Currently not implemented correctly"); - // Declare new instances palette = new KryptonCustomPaletteBase(); @@ -122,125 +122,28 @@ public static void LoadCustomTheme(KryptonCustomPaletteBase palette, KryptonMana } // Set manager - manager.GlobalPalette = palette; + manager.GlobalCustomPalette = palette; ApplyTheme(PaletteMode.Custom, manager); } catch (Exception exc) { - ExceptionHandler.CaptureException(exc); + ExceptionHandler.CaptureException(exc, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } /// - /// Returns the palette mode as string. - /// - /// The palette mode. - /// - public static string ReturnPaletteModeAsString(PaletteMode paletteMode) - { - var modeConverter = new PaletteModeConverter(); - - return modeConverter.ConvertToString(paletteMode)!; - } - - /// - /// Applies the global theme. - /// - /// The manager. - /// The palette mode manager. - public static void ApplyGlobalTheme(KryptonManager manager, PaletteMode paletteMode) - { - try - { - manager.GlobalPaletteMode = paletteMode; - } - catch (Exception exc) - { - ExceptionHandler.CaptureException(exc); - } - } - - private static void AddToCollection(IList target, string[] excludes) - { - try - { - foreach (var theme in SupportedInternalThemeNames) - { - if (!excludes.Any(t => theme.IndexOf(t, StringComparison.InvariantCultureIgnoreCase) > -1)) - { - target.Add(theme); - } - } - } - catch (Exception exc) - { - ExceptionHandler.CaptureException(exc); - } - } - - /// - /// Propagates the theme selector. - /// - /// The target. - /// do not include any string containing - public static void PropagateThemeSelector(KryptonComboBox target, params string[] excludePartials) => AddToCollection(target.Items, excludePartials); - - /// - /// Propagates the theme selector. - /// - /// The target. - /// do not include any string containing - public static void PropagateThemeSelector(KryptonListBox target, params string[] excludePartials) => AddToCollection(target.Items, excludePartials); - - /// - /// Propagates the theme selector. - /// - /// The target. - /// do not include any string containing - public static void PropagateThemeSelector(KryptonDomainUpDown target, params string[] excludePartials) => AddToCollection(target.Items, excludePartials); - - /// - /// Propagates the theme selector. - /// - /// The target. - /// do not include any string containing - public static void PropagateThemeSelector(ComboBox target, params string[] excludePartials) => AddToCollection(target.Items, excludePartials); - - /// - /// Propagates the theme selector. - /// - /// The target. - /// do not include any string containing - public static void PropagateThemeSelector(DomainUpDown target, params string[] excludePartials) => AddToCollection(target.Items, excludePartials); - - /// - /// Propagates the theme selector. - /// - /// The target. - /// do not include any string containing - public static void PropagateThemeSelector(ToolStripComboBox target, params string[] excludePartials) => AddToCollection(target.Items, excludePartials); - - /// - /// Applies the theme manager mode. + /// Returns the themes PaletteMode from the theme's name. /// /// Name of the theme. - /// The equivalent. + /// The respective PaletteMode if the theme name is valid. Otherwise PaletteMode.Global. public static PaletteMode GetThemeManagerMode(string themeName) { - var modeConverter = new PaletteModeConverter(); - - return (PaletteMode)modeConverter.ConvertFrom(themeName); + return PaletteModeStrings.SupportedThemesMap.TryGetValue(themeName, out PaletteMode paletteMode) + ? paletteMode + : PaletteMode.Global; } - /// Sets the index of the theme. - /// The value. - public static void SetThemeIndex(int? value) => ThemeIndex = value ?? 33; - - /// Gets the index of the theme. - /// - public static int GetThemeIndex() => ThemeIndex; - #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/AccentColorService.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/AccentColorService.cs index bf8a97932..89c188261 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/AccentColorService.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/AccentColorService.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/ThemeService.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/ThemeService.cs index 435dcea84..ef867cc41 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/ThemeService.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/ThemeService.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/UserSystemPreferencesService.cs b/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/UserSystemPreferencesService.cs index 7508c977b..296e91f6c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/UserSystemPreferencesService.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Rendering/Win10Glass/UserSystemPreferencesService.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -27,8 +27,9 @@ public static bool IsTransparencyEnabled get { using RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); - return (int)baseKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize")? - .GetValue("EnableTransparency", 0) > 0; + return (int)baseKey + .OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize")? + .GetValue("EnableTransparency", 0)! > 0; } } @@ -40,8 +41,9 @@ public static bool UseAccentColor get { using RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); - return (int)baseKey.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize")? - .GetValue("ColorPrevalence", 0) > 0; + return (int)baseKey + .OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize")? + .GetValue("ColorPrevalence", 0)! > 0; } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/AboutToolkit/AboutToolkitImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/AboutToolkit/AboutToolkitImageResources.Designer.cs new file mode 100644 index 000000000..325d306d6 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/AboutToolkit/AboutToolkitImageResources.Designer.cs @@ -0,0 +1,93 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.AboutToolkit { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class AboutToolkitImageResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal AboutToolkitImageResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.AboutToolkit.AboutToolkitImageResources", typeof(AboutToolkitImageResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + /// + internal static System.Drawing.Icon Discord { + get { + object obj = ResourceManager.GetObject("Discord", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GeneralInformation { + get { + object obj = ResourceManager.GetObject("GeneralInformation", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap VersionInformation { + get { + object obj = ResourceManager.GetObject("VersionInformation", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/AboutToolkit/AboutToolkitImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/AboutToolkit/AboutToolkitImageResources.resx new file mode 100644 index 000000000..aa7ec61f8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/AboutToolkit/AboutToolkitImageResources.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Resources\Discord.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\GeneralInformation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\VersionInformation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/CommandLink/CommandLinkImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/CommandLink/CommandLinkImageResources.Designer.cs new file mode 100644 index 000000000..6ab65a537 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/CommandLink/CommandLinkImageResources.Designer.cs @@ -0,0 +1,83 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.CommandLink { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class CommandLinkImageResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal CommandLinkImageResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.CommandLink.CommandLinkImageResources", typeof(CommandLinkImageResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Windows_10_CommandLink_Arrow { + get { + object obj = ResourceManager.GetObject("Windows_10_CommandLink_Arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Windows_11_CommandLink_Arrow { + get { + object obj = ResourceManager.GetObject("Windows_11_CommandLink_Arrow", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/CommandLink/CommandLinkImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/CommandLink/CommandLinkImageResources.resx new file mode 100644 index 000000000..3530f23ae --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/CommandLink/CommandLinkImageResources.resx @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Resources\Windows 10 CommandLink Arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Windows 11 CommandLink Arrow.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.Designer.cs index 009fa143a..fd460d39f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.Designer.cs @@ -70,6 +70,16 @@ internal static System.Drawing.Bitmap add { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap AppButtonDefault { + get { + object obj = ResourceManager.GetObject("AppButtonDefault", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -300,6 +310,26 @@ internal static System.Drawing.Bitmap HourGlass { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap InformationMedium { + get { + object obj = ResourceManager.GetObject("InformationMedium", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap InformationSmall { + get { + object obj = ResourceManager.GetObject("InformationSmall", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.resx index 77e3668e5..ba49568ec 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.resx +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Generic/GenericImageResources.resx @@ -121,6 +121,9 @@ ..\..\Resources\add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\..\Resources\AppButtonDefault.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Resources\BlackButtonCollapse.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -190,6 +193,12 @@ ..\..\Resources\HourGlass.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\..\Resources\InformationMedium.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\InformationSmall.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Resources\KryptonLogoGeneric.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.Designer.cs index 6c3ab827b..c825a230a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.Designer.cs @@ -170,6 +170,76 @@ internal static System.Drawing.Bitmap Information_Windows_11 { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageBoxAsterisk { + get { + object obj = ResourceManager.GetObject("MessageBoxAsterisk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageBoxCritical { + get { + object obj = ResourceManager.GetObject("MessageBoxCritical", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageBoxHelp { + get { + object obj = ResourceManager.GetObject("MessageBoxHelp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageBoxInformation { + get { + object obj = ResourceManager.GetObject("MessageBoxInformation", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageBoxOk { + get { + object obj = ResourceManager.GetObject("MessageBoxOk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageBoxStop { + get { + object obj = ResourceManager.GetObject("MessageBoxStop", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MessageBoxWarning { + get { + object obj = ResourceManager.GetObject("MessageBoxWarning", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.resx index fe39c6553..c613cce7a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.resx +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/MessageBox/MessageBoxImageResources.resx @@ -151,6 +151,27 @@ ..\..\Resources\Information_Windows_11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\..\Resources\MessageBoxAsterisk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\MessageBoxCritical.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\MessageBoxHelp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\MessageBoxInformation.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\MessageBoxOk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\MessageBoxStop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\MessageBoxWarning.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Resources\Question_Windows_11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/OutlookGridImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/OutlookGridImageResources.Designer.cs new file mode 100644 index 000000000..1b0833e7d --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/OutlookGridImageResources.Designer.cs @@ -0,0 +1,443 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.OutlookGrid { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class OutlookGridImageResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal OutlookGridImageResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.OutlookGrid.OutlookGridImageResources", typeof(OutlookGridImageResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap color2scale_generic_16 { + get { + object obj = ResourceManager.GetObject("color2scale_generic_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap color3scale_generic_16 { + get { + object obj = ResourceManager.GetObject("color3scale_generic_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColors_blue_white_red_32 { + get { + object obj = ResourceManager.GetObject("ThreeColors_blue_white_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColors_green_white_red_32 { + get { + object obj = ResourceManager.GetObject("ThreeColors_green_white_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColors_green_yellow_red_32 { + get { + object obj = ResourceManager.GetObject("ThreeColors_green_yellow_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColors_red_white_blue_32 { + get { + object obj = ResourceManager.GetObject("ThreeColors_red_white_blue_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColors_red_white_green_32 { + get { + object obj = ResourceManager.GetObject("ThreeColors_red_white_green_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColors_red_yellow_green_32 { + get { + object obj = ResourceManager.GetObject("ThreeColors_red_yellow_green_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColours_blue_white_red_32 { + get { + object obj = ResourceManager.GetObject("ThreeColours_blue_white_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColours_green_white_red_32 { + get { + object obj = ResourceManager.GetObject("ThreeColours_green_white_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColours_green_yellow_red_32 { + get { + object obj = ResourceManager.GetObject("ThreeColours_green_yellow_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColours_red_white_blue_32 { + get { + object obj = ResourceManager.GetObject("ThreeColours_red_white_blue_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColours_red_white_green_32 { + get { + object obj = ResourceManager.GetObject("ThreeColours_red_white_green_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ThreeColours_red_yellow_green_32 { + get { + object obj = ResourceManager.GetObject("ThreeColours_red_yellow_green_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_blue_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_blue_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_green_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_green_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_pink_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_pink_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_red_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_red_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_violet_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_violet_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_white_blue_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_white_blue_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_white_green_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_white_green_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_white_pink_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_white_pink_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_white_red_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_white_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_white_violet_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_white_violet_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_white_yellow_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_white_yellow_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColors_yellow_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColors_yellow_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_blue_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_blue_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_green_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_green_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_pink_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_pink_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_red_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_red_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_violet_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_violet_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_white_blue_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_white_blue_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_white_green_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_white_green_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_white_pink_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_white_pink_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_white_red_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_white_red_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_white_violet_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_white_violet_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_white_yellow_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_white_yellow_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap TwoColours_yellow_white_32 { + get { + object obj = ResourceManager.GetObject("TwoColours_yellow_white_32", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/OutlookGridImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/OutlookGridImageResources.resx new file mode 100644 index 000000000..4b5b9fe69 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/OutlookGridImageResources.resx @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Resources\color2scale_generic_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\color3scale_generic_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColors_blue_white_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColors_green_white_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColors_green_yellow_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColors_red_white_blue_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColors_red_white_green_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColors_red_yellow_green_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColours_blue_white_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColours_green_white_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColours_green_yellow_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColours_red_white_blue_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColours_red_white_green_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\ThreeColours_red_yellow_green_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_blue_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_green_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_pink_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_red_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_violet_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_white_blue_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_white_green_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_white_pink_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_white_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_white_violet_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_white_yellow_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColors_yellow_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_blue_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_green_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_pink_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_red_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_violet_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_white_blue_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_white_green_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_white_pink_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_white_red_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_white_violet_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_white_yellow_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\TwoColours_yellow_white_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/Strings/OutlookGridStringResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/Strings/OutlookGridStringResources.Designer.cs new file mode 100644 index 000000000..4ee11e29b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/Strings/OutlookGridStringResources.Designer.cs @@ -0,0 +1,648 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.OutlookGrid.Strings { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class OutlookGridStringResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal OutlookGridStringResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.OutlookGrid.Strings.OutlookGridStringResources", typeof(OutlookGridStringResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to After next month. + /// + internal static string AFTERNEXTMONTH { + get { + return ResourceManager.GetString("AFTERNEXTMONTH", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Alphabetic. + /// + internal static string AlphabeticGroupText { + get { + return ResourceManager.GetString("AlphabeticGroupText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Data Bars. + /// + internal static string Bar { + get { + return ResourceManager.GetString("Bar", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Before previous month. + /// + internal static string BEFOREPREVIOUSMONTH { + get { + return ResourceManager.GetString("BEFOREPREVIOUSMONTH", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Best fit. + /// + internal static string BESTFIT { + get { + return ResourceManager.GetString("BESTFIT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Best fit (all columns). + /// + internal static string BESTFITALL { + get { + return ResourceManager.GetString("BESTFITALL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Cancel. + /// + internal static string Cancel { + get { + return ResourceManager.GetString("Cancel", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Clear grouping. + /// + internal static string CLEARGROUPING { + get { + return ResourceManager.GetString("CLEARGROUPING", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Clear rules.... + /// + internal static string ClearRules { + get { + return ResourceManager.GetString("ClearRules", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Clear sorting. + /// + internal static string CLEARSORTING { + get { + return ResourceManager.GetString("CLEARSORTING", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Collapse. + /// + internal static string COLLAPSE { + get { + return ResourceManager.GetString("COLLAPSE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Columns. + /// + internal static string COLUMNS { + get { + return ResourceManager.GetString("COLUMNS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Conditional formatting. + /// + internal static string CONDITIONALFORMATTING { + get { + return ResourceManager.GetString("CONDITIONALFORMATTING", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Custom.... + /// + internal static string CustomThreeDots { + get { + return ResourceManager.GetString("CustomThreeDots", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Date. + /// + internal static string DateGroupText { + get { + return ResourceManager.GetString("DateGroupText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Day. + /// + internal static string Day { + get { + return ResourceManager.GetString("Day", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Drag a column header here to group by that column. + /// + internal static string DRAGCOLUMNTOGROUP { + get { + return ResourceManager.GetString("DRAGCOLUMNTOGROUP", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Earlier during this month. + /// + internal static string EARLIERDURINGTHISMONTH { + get { + return ResourceManager.GetString("EARLIERDURINGTHISMONTH", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Earlier this year. + /// + internal static string EARLIERTHISYEAR { + get { + return ResourceManager.GetString("EARLIERTHISYEAR", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Expand. + /// + internal static string EXPAND { + get { + return ResourceManager.GetString("EXPAND", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Finish. + /// + internal static string Finish { + get { + return ResourceManager.GetString("Finish", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Full collapse. + /// + internal static string FULLCOLLAPSE { + get { + return ResourceManager.GetString("FULLCOLLAPSE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Full expand. + /// + internal static string FULLEXPAND { + get { + return ResourceManager.GetString("FULLEXPAND", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Gradient Fill. + /// + internal static string GradientFill { + get { + return ResourceManager.GetString("GradientFill", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Group by this column. + /// + internal static string GROUP { + get { + return ResourceManager.GetString("GROUP", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Group interval. + /// + internal static string GROUPINTERVAL { + get { + return ResourceManager.GetString("GROUPINTERVAL", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Hide GroupBox. + /// + internal static string HIDEGROUPBOX { + get { + return ResourceManager.GetString("HIDEGROUPBOX", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to In three weeks. + /// + internal static string INTHREEWEEKS { + get { + return ResourceManager.GetString("INTHREEWEEKS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to In two weeks. + /// + internal static string INTWOWEEKS { + get { + return ResourceManager.GetString("INTWOWEEKS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Later during this month. + /// + internal static string LATERDURINGTHISMONTH { + get { + return ResourceManager.GetString("LATERDURINGTHISMONTH", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Month. + /// + internal static string Month { + get { + return ResourceManager.GetString("Month", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Next month. + /// + internal static string NEXTMONTH { + get { + return ResourceManager.GetString("NEXTMONTH", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Next Week. + /// + internal static string NEXTWEEK { + get { + return ResourceManager.GetString("NEXTWEEK", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to No date. + /// + internal static string NODATE { + get { + return ResourceManager.GetString("NODATE", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Older. + /// + internal static string OLDER { + get { + return ResourceManager.GetString("OLDER", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to 1 item. + /// + internal static string OneItem { + get { + return ResourceManager.GetString("OneItem", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Other. + /// + internal static string Other { + get { + return ResourceManager.GetString("Other", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Custom.... + /// + internal static string PaletteCustom { + get { + return ResourceManager.GetString("PaletteCustom", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Custom palettes. + /// + internal static string PaletteCustomHeading { + get { + return ResourceManager.GetString("PaletteCustomHeading", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Previous month. + /// + internal static string PREVIOUSMONTH { + get { + return ResourceManager.GetString("PREVIOUSMONTH", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Previous week. + /// + internal static string PREVIOUSWEEK { + get { + return ResourceManager.GetString("PREVIOUSWEEK", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Previous year. + /// + internal static string PREVIOUSYEAR { + get { + return ResourceManager.GetString("PREVIOUSYEAR", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Q1. + /// + internal static string Q1 { + get { + return ResourceManager.GetString("Q1", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Q2. + /// + internal static string Q2 { + get { + return ResourceManager.GetString("Q2", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Q3. + /// + internal static string Q3 { + get { + return ResourceManager.GetString("Q3", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Q4. + /// + internal static string Q4 { + get { + return ResourceManager.GetString("Q4", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Quarter. + /// + internal static string Quarter { + get { + return ResourceManager.GetString("Quarter", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Show GroupBox. + /// + internal static string SHOWGROUPBOX { + get { + return ResourceManager.GetString("SHOWGROUPBOX", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Smart. + /// + internal static string Smart { + get { + return ResourceManager.GetString("Smart", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Solid Fill. + /// + internal static string SolidFill { + get { + return ResourceManager.GetString("SolidFill", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sort ascending. + /// + internal static string SORTASCENDING { + get { + return ResourceManager.GetString("SORTASCENDING", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sort by summary count. + /// + internal static string SORTBYSUMMARYCOUNT { + get { + return ResourceManager.GetString("SORTBYSUMMARYCOUNT", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Sort descending. + /// + internal static string SORTDESCENDING { + get { + return ResourceManager.GetString("SORTDESCENDING", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Three Color Scale. + /// + internal static string ThreeColorsRange { + get { + return ResourceManager.GetString("ThreeColorsRange", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Three weeks ago. + /// + internal static string THREEWEEKSAGO { + get { + return ResourceManager.GetString("THREEWEEKSAGO", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Today. + /// + internal static string TODAY { + get { + return ResourceManager.GetString("TODAY", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Tomorrow. + /// + internal static string TOMORROW { + get { + return ResourceManager.GetString("TOMORROW", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Two Color Scale. + /// + internal static string TwoColorsRange { + get { + return ResourceManager.GetString("TwoColorsRange", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Two weeks ago. + /// + internal static string TWOWEEKSAGO { + get { + return ResourceManager.GetString("TWOWEEKSAGO", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Ungroup. + /// + internal static string UNGROUP { + get { + return ResourceManager.GetString("UNGROUP", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Unknown. + /// + internal static string UNKNOWN { + get { + return ResourceManager.GetString("UNKNOWN", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to items. + /// + internal static string XXXItems { + get { + return ResourceManager.GetString("XXXItems", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Year. + /// + internal static string Year { + get { + return ResourceManager.GetString("Year", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Year. + /// + internal static string YearGroupText { + get { + return ResourceManager.GetString("YearGroupText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Yesterday. + /// + internal static string YESTERDAY { + get { + return ResourceManager.GetString("YESTERDAY", resourceCulture); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/Strings/OutlookGridStringResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/Strings/OutlookGridStringResources.resx new file mode 100644 index 000000000..226084882 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/OutlookGrid/Strings/OutlookGridStringResources.resx @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Earlier during this month + + + Later during this month + + + Before previous month + + + After next month + + + Three weeks ago + + + In three weeks + + + In two weeks + + + Next month + + + Next Week + + + Previous week + + + Previous month + + + Today + + + Tomorrow + + + Two weeks ago + + + Yesterday + + + Drag a column header here to group by that column + + + Best fit (all columns) + + + Clear grouping + + + Clear sorting + + + Full collapse + + + Full expand + + + Group by this column + + + Hide GroupBox + + + Show GroupBox + + + Sort ascending + + + Sort descending + + + Ungroup + + + Best fit + + + No date + + + Alphabetic + + + Date + + + 1 item + + + items + + + Year + + + Columns + + + Collapse + + + Expand + + + Group interval + + + Q1 + + + Q2 + + + Q3 + + + Q4 + + + Day + Enum + + + Month + Enum + + + Quarter + Enum + + + Smart + Enum + + + Year + Enum + + + Sort by summary count + + + Unknown + + + Conditional formatting + + + Data Bars + Enum + + + Gradient Fill + + + Solid Fill + + + Three Color Scale + Enum + + + Two Color Scale + Enum + + + Clear rules... + + + Custom... + + + Other + + + Cancel + + + Finish + + + Custom... + + + Custom palettes + + + Earlier this year + + + Older + + + Previous year + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/PaletteSchemas/PaletteSchemaResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/PaletteSchemas/PaletteSchemaResources.Designer.cs new file mode 100644 index 000000000..965bb6d89 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/PaletteSchemas/PaletteSchemaResources.Designer.cs @@ -0,0 +1,110 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.PaletteSchemas { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class PaletteSchemaResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal PaletteSchemaResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.PaletteSchemas.PaletteSchemaResources", typeof(PaletteSchemaResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to <?xml version="1.0"?> + ///<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + /// <xsl:template match="KryptonPalette"> + /// <xsl:comment>Created by exporting the settings of a KryptonPalette instance.</xsl:comment> + /// <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + /// <xsl:comment>WARNING: Modifying this file may render it invalid for importing.</xsl:comment> + /// <KryptonPalette Version="20"> + /// <xsl:attr [rest of string was truncated]";. + /// + internal static string CurrentSupportedPaletteSchema { + get { + return ResourceManager.GetString("CurrentSupportedPaletteSchema", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <?xml version="1.0"?> + ///<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + /// <xsl:template match="KryptonPalette"> + /// <xsl:comment>Created by exporting the settings of a KryptonCustomPaletteBase instance.</xsl:comment> + /// <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + /// <xsl:comment>New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE)</xsl:comment> + /// <xsl: [rest of string was truncated]";. + /// + internal static string PaletteVersion19To20 { + get { + return ResourceManager.GetString("PaletteVersion19To20", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to <?xml version="1.0"?> + ///<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + /// <xsl:template match="KryptonPalette"> + /// <xsl:comment>Created by exporting the settings of a KryptonPalette instance.</xsl:comment> + /// <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + /// <xsl:comment>WARNING: Modifying this file may render it invalid for importing.</xsl:comment> + /// <KryptonPalette Version="19"> + /// <xsl:attr [rest of string was truncated]";. + /// + internal static string PaletteVersion6To19 { + get { + return ResourceManager.GetString("PaletteVersion6To19", resourceCulture); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/PaletteSchemas/PaletteSchemaResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/PaletteSchemas/PaletteSchemaResources.resx new file mode 100644 index 000000000..b64b5022c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/PaletteSchemas/PaletteSchemaResources.resx @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + <?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:template match="KryptonPalette"> + <xsl:comment>Created by exporting the settings of a KryptonPalette instance.</xsl:comment> + <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + <xsl:comment>WARNING: Modifying this file may render it invalid for importing.</xsl:comment> + <KryptonPalette Version="20"> + <xsl:attribute name="Generated"> + <xsl:value-of select="@Generated"/> + </xsl:attribute> + <xsl:apply-templates select="*"/> + </KryptonPalette> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Green']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="Prefix"> + <Prefix> + <xsl:attribute name ="Type">PaletteTextHotkeyPrefix</xsl:attribute> + <xsl:attribute name ="Value"> + <xsl:value-of select="@Value"/> + </xsl:attribute> + </Prefix> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="*|@*"> + <xsl:copy> + <xsl:apply-templates select="*|@*"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> + + + <?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:template match="KryptonPalette"> + <xsl:comment>Created by exporting the settings of a KryptonCustomPaletteBase instance.</xsl:comment> + <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + <xsl:comment>New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE)</xsl:comment> + <xsl:comment>Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved.<xsl:comment> + <xsl:comment>WARNING: Modifying this file may render it invalid for importing.</xsl:comment> + <KryptonPalette Version="20"> + <xsl:attribute name="Generated"> + <xsl:value-of select="@Generated"/> + </xsl:attribute> + <xsl:apply-templates select="*"/> + </KryptonPalette> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Green']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="Prefix"> + <Prefix> + <xsl:attribute name ="Type">PaletteTextHotkeyPrefix</xsl:attribute> + <xsl:attribute name ="Value"> + <xsl:value-of select="@Value"/> + </xsl:attribute> + </Prefix> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="*|@*"> + <xsl:copy> + <xsl:apply-templates select="*|@*"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> + Make sure to duplictae from / in the Palette Upgrade tool + + + <?xml version="1.0"?> +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + <xsl:template match="KryptonPalette"> + <xsl:comment>Created by exporting the settings of a KryptonPalette instance.</xsl:comment> + <xsl:comment>For more information about Krypton visit https://github.com/Krypton-Suite/Standard-Toolkit</xsl:comment> + <xsl:comment>WARNING: Modifying this file may render it invalid for importing.</xsl:comment> + <KryptonPalette Version="19"> + <xsl:attribute name="Generated"> + <xsl:value-of select="@Generated"/> + </xsl:attribute> + <xsl:apply-templates select="*"/> + </KryptonPalette> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Green']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="Prefix"> + <Prefix> + <xsl:attribute name ="Type">PaletteTextHotkeyPrefix</xsl:attribute> + <xsl:attribute name ="Value"> + <xsl:value-of select="@Value"/> + </xsl:attribute> + </Prefix> + </xsl:template> + + <xsl:template match="BasePaletteMode[@Value='Professional - Red']"> + <BasePaletteMode> + <xsl:attribute name ="Type">PaletteMode</xsl:attribute> + <xsl:attribute name ="Value">Professional - Office 2003</xsl:attribute> + </BasePaletteMode> + </xsl:template> + + <xsl:template match="*|@*"> + <xsl:copy> + <xsl:apply-templates select="*|@*"/> + </xsl:copy> + </xsl:template> +</xsl:stylesheet> + Make sure to duplictae from / in the Palette Upgrade tool + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Sort/SortingImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Sort/SortingImageResources.Designer.cs new file mode 100644 index 000000000..22ff6ba89 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Sort/SortingImageResources.Designer.cs @@ -0,0 +1,93 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.Sort { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class SortingImageResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal SortingImageResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.Sort.SortingImageResources", typeof(SortingImageResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sort_az_ascending2 { + get { + object obj = ResourceManager.GetObject("sort_az_ascending2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sort_az_descending2 { + get { + object obj = ResourceManager.GetObject("sort_az_descending2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sort_up_down_delete_16 { + get { + object obj = ResourceManager.GetObject("sort_up_down_delete_16", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Sort/SortingImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Sort/SortingImageResources.resx new file mode 100644 index 000000000..6c4994269 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Sort/SortingImageResources.resx @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Resources\sort_az_ascending2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\sort_az_descending2.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\sort_up_down_delete_16.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/ToastNotification/ToastNotificationImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/ToastNotification/ToastNotificationImageResources.Designer.cs new file mode 100644 index 000000000..90b18787b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/ToastNotification/ToastNotificationImageResources.Designer.cs @@ -0,0 +1,193 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.ToastNotification { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class ToastNotificationImageResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal ToastNotificationImageResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.ToastNotification.ToastNotificationImageResources", typeof(ToastNotificationImageResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Asterisk_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Asterisk_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Critical_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Critical_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Hand_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Hand_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Information_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Information_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Ok_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Ok_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Question_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Question_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Stop_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Stop_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_UAC_Shield_Windows_10_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_UAC_Shield_Windows_10_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_UAC_Shield_Windows_11_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_UAC_Shield_Windows_11_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Warning_128_x_115 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Warning_128_x_115", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Windows_10_128_x_121 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Windows_10_128_x_121", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Toast_Notification_Windows_11_128_x_128 { + get { + object obj = ResourceManager.GetObject("Toast_Notification_Windows_11_128_x_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/ToastNotification/ToastNotificationImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/ToastNotification/ToastNotificationImageResources.resx new file mode 100644 index 000000000..3ecc0feeb --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/ToastNotification/ToastNotificationImageResources.resx @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Resources\Toast_Notification_Asterisk_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Critical_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Hand_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Information_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Ok_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Question_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Stop_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_UAC_Shield_Windows_10_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_UAC_Shield_Windows_11_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Warning_128_x_115.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Windows_10_128_x_121.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Toast_Notification_Windows_11_128_x_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.Designer.cs index 71f5af9bf..3ea9dd2db 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.Designer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.Designer.cs @@ -60,6 +60,26 @@ internal GenericToolbarImageResources() { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GenericCopy { + get { + object obj = ResourceManager.GetObject("GenericCopy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GenericCut { + get { + object obj = ResourceManager.GetObject("GenericCut", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -80,6 +100,16 @@ internal static System.Drawing.Bitmap GenericOpenFolder { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap GenericPaste { + get { + object obj = ResourceManager.GetObject("GenericPaste", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.resx index 6a9920cd6..c47730c02 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.resx +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/Toolbars/GenericToolbarImageResources.resx @@ -118,12 +118,21 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\..\Resources\GenericCopy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\GenericCut.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Resources\GenericNewDocument.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\..\Resources\GenericOpenFolder.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\..\Resources\GenericPaste.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\..\Resources\GenericPrint.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/WindowsLogos/WindowsLogoImageResources.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/WindowsLogos/WindowsLogoImageResources.Designer.cs new file mode 100644 index 000000000..074bf59be --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/WindowsLogos/WindowsLogoImageResources.Designer.cs @@ -0,0 +1,103 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Krypton.Toolkit.ResourceFiles.WindowsLogos { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class WindowsLogoImageResources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal WindowsLogoImageResources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Krypton.Toolkit.ResourceFiles.WindowsLogos.WindowsLogoImageResources", typeof(WindowsLogoImageResources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Windows_11_128_128 { + get { + object obj = ResourceManager.GetObject("Windows_11_128_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Windows_11_Original { + get { + object obj = ResourceManager.GetObject("Windows_11_Original", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Windows_8_81_10_128_128 { + get { + object obj = ResourceManager.GetObject("Windows_8_81_10_128_128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Windows_8_81_10_Original { + get { + object obj = ResourceManager.GetObject("Windows_8_81_10_Original", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/WindowsLogos/WindowsLogoImageResources.resx b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/WindowsLogos/WindowsLogoImageResources.resx new file mode 100644 index 000000000..8f359c11c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/ResourceFiles/WindowsLogos/WindowsLogoImageResources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Resources\Windows_11_128_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Windows_11_Original.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Windows_8_81_10_128_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Resources\Windows_8_81_10_Original.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/AppButtonDefault.png b/Source/Krypton Components/Krypton.Toolkit/Resources/AppButtonDefault.png new file mode 100644 index 000000000..1c8ac5d79 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/AppButtonDefault.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Discord.ico b/Source/Krypton Components/Krypton.Toolkit/Resources/Discord.ico new file mode 100644 index 000000000..08e0a9373 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Discord.ico differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/GeneralInformation.png b/Source/Krypton Components/Krypton.Toolkit/Resources/GeneralInformation.png new file mode 100644 index 000000000..63b82b15e Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/GeneralInformation.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/GenericCopy.png b/Source/Krypton Components/Krypton.Toolkit/Resources/GenericCopy.png new file mode 100644 index 000000000..66d873d51 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/GenericCopy.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/GenericCut.png b/Source/Krypton Components/Krypton.Toolkit/Resources/GenericCut.png new file mode 100644 index 000000000..77678c34c Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/GenericCut.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/GenericPaste.png b/Source/Krypton Components/Krypton.Toolkit/Resources/GenericPaste.png new file mode 100644 index 000000000..f1879d7ee Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/GenericPaste.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/InformationMedium.png b/Source/Krypton Components/Krypton.Toolkit/Resources/InformationMedium.png new file mode 100644 index 000000000..852823b8b Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/InformationMedium.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/InformationSmall.png b/Source/Krypton Components/Krypton.Toolkit/Resources/InformationSmall.png new file mode 100644 index 000000000..63b82b15e Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/InformationSmall.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxAsterisk.png b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxAsterisk.png new file mode 100644 index 000000000..72a010bb1 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxAsterisk.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxCritical.png b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxCritical.png new file mode 100644 index 000000000..589970806 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxCritical.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxHelp.png b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxHelp.png new file mode 100644 index 000000000..e73c71530 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxHelp.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxInformation.png b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxInformation.png new file mode 100644 index 000000000..6c2475a1c Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxInformation.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxOk.png b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxOk.png new file mode 100644 index 000000000..854a8b6ba Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxOk.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxStop.png b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxStop.png new file mode 100644 index 000000000..909eb6e1c Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxStop.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxWarning.png b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxWarning.png new file mode 100644 index 000000000..8b2eaa188 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/MessageBoxWarning.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_blue_white_red_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_blue_white_red_32.png new file mode 100644 index 000000000..ae73b5e28 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_blue_white_red_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_green_white_red_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_green_white_red_32.png new file mode 100644 index 000000000..e455721d1 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_green_white_red_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_green_yellow_red_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_green_yellow_red_32.png new file mode 100644 index 000000000..45a0d7d33 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_green_yellow_red_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_white_blue_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_white_blue_32.png new file mode 100644 index 000000000..04c610ff0 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_white_blue_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_white_green_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_white_green_32.png new file mode 100644 index 000000000..432f6c42d Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_white_green_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_yellow_green_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_yellow_green_32.png new file mode 100644 index 000000000..e3a61712a Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/ThreeColors_red_yellow_green_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Asterisk_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Asterisk_128_x_128.png new file mode 100644 index 000000000..dd82022d0 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Asterisk_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Critical_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Critical_128_x_128.png new file mode 100644 index 000000000..eedbb5070 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Critical_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Hand_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Hand_128_x_128.png new file mode 100644 index 000000000..e331eed30 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Hand_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Information_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Information_128_x_128.png new file mode 100644 index 000000000..5ddf52d9d Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Information_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Ok_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Ok_128_x_128.png new file mode 100644 index 000000000..7fc7014bb Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Ok_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Question_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Question_128_x_128.png new file mode 100644 index 000000000..87711bafb Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Question_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Stop_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Stop_128_x_128.png new file mode 100644 index 000000000..4bba71653 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Stop_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_10_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_10_128_x_128.png new file mode 100644 index 000000000..67fac62ee Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_10_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_11_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_11_128_x_128.png new file mode 100644 index 000000000..09a403691 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_11_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128.png new file mode 100644 index 000000000..24db5dd65 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Warning_128_x_115.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Warning_128_x_115.png new file mode 100644 index 000000000..6b921a438 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Warning_128_x_115.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Windows_10_128_x_121.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Windows_10_128_x_121.png new file mode 100644 index 000000000..f63e18d89 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Windows_10_128_x_121.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Windows_11_128_x_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Windows_11_128_x_128.png new file mode 100644 index 000000000..86bf84d09 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Toast_Notification_Windows_11_128_x_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_blue_white_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_blue_white_32.png new file mode 100644 index 000000000..60f577de8 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_blue_white_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_green_white_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_green_white_32.png new file mode 100644 index 000000000..11ab3eca4 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_green_white_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_pink_white_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_pink_white_32.png new file mode 100644 index 000000000..d6ba96fcb Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_pink_white_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_red_white_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_red_white_32.png new file mode 100644 index 000000000..9ebb121d4 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_red_white_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_violet_white_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_violet_white_32.png new file mode 100644 index 000000000..54875ccd2 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_violet_white_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_blue_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_blue_32.png new file mode 100644 index 000000000..d48f79c92 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_blue_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_green_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_green_32.png new file mode 100644 index 000000000..cb24224a3 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_green_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_pink_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_pink_32.png new file mode 100644 index 000000000..5ecd0c300 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_pink_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_red_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_red_32.png new file mode 100644 index 000000000..e94a34b02 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_red_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_violet_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_violet_32.png new file mode 100644 index 000000000..8c8648354 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_violet_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_yellow_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_yellow_32.png new file mode 100644 index 000000000..e7b120ee0 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_white_yellow_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_yellow_white_32.png b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_yellow_white_32.png new file mode 100644 index 000000000..41f13aeca Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/TwoColors_yellow_white_32.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/VersionInformation.png b/Source/Krypton Components/Krypton.Toolkit/Resources/VersionInformation.png new file mode 100644 index 000000000..9e9a806b0 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/VersionInformation.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Windows 10 CommandLink Arrow.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows 10 CommandLink Arrow.png new file mode 100644 index 000000000..8c850f59d Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows 10 CommandLink Arrow.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Windows 11 CommandLink Arrow.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows 11 CommandLink Arrow.png new file mode 100644 index 000000000..f90e44ca0 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows 11 CommandLink Arrow.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_11_128_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_11_128_128.png new file mode 100644 index 000000000..61994330a Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_11_128_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_11_Original.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_11_Original.png new file mode 100644 index 000000000..0593568e1 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_11_Original.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_8_81_10_128_128.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_8_81_10_128_128.png new file mode 100644 index 000000000..46f6acd5e Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_8_81_10_128_128.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_8_81_10_Original.png b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_8_81_10_Original.png new file mode 100644 index 000000000..4213396c0 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/Windows_8_81_10_Original.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/color2scale_generic_16.png b/Source/Krypton Components/Krypton.Toolkit/Resources/color2scale_generic_16.png new file mode 100644 index 000000000..8b57ba5f5 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/color2scale_generic_16.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Resources/color3scale_generic_16.png b/Source/Krypton Components/Krypton.Toolkit/Resources/color3scale_generic_16.png new file mode 100644 index 000000000..e0876a0aa Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/Resources/color3scale_generic_16.png differ diff --git a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileDialogWrapper.cs b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileDialogWrapper.cs index e2ffb5bbb..44706eee3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileDialogWrapper.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileDialogWrapper.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileSaveDialogWrapper.cs b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileSaveDialogWrapper.cs index 9e75bf977..c70e9bdcd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileSaveDialogWrapper.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/FileSaveDialogWrapper.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -41,25 +41,25 @@ private protected override void WndMessage(object sender, CWPRETSTRUCT e, out bo var pnl = new KryptonPanel { Dock = DockStyle.Bottom, - Height = (int)(56*_scaleFactor), + Height = (int)(56 * _scaleFactor), Name = "kryptonPanel2", Margin = new Padding(0), Padding = new Padding(0) }; - _commonDialogHandler._wrapperForm.Controls.Add(pnl); + _commonDialogHandler._wrapperForm?.Controls.Add(pnl); foreach (KryptonPanel? parent in _commonDialogHandler.Controls.Where(static ctl => ctl.Button != null) .Select(static ctl => ctl.Button) - .Select(ctl => ctl.Parent as KryptonPanel) + .Select(ctl => ctl?.Parent as KryptonPanel) ) { - parent.Top = (int)(16*_scaleFactor); + parent!.Top = (int)(16 * _scaleFactor); parent.Anchor = AnchorStyles.Right; pnl.Controls.Add(parent); } } } - private protected override void FormResize(object sender, EventArgs e) + private protected override void FormResize(object? sender, EventArgs e) { // Panel controls button placement now (Due to messed up transparency) //return; diff --git a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCallWndProc.cs b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCallWndProc.cs index 652e608f1..064510f2c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCallWndProc.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCallWndProc.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -12,43 +12,46 @@ // ReSharper disable IdentifierTypo // ReSharper disable InconsistentNaming -namespace Krypton.Toolkit; - -internal struct CWPRETSTRUCT -{ - public IntPtr retValue; - public IntPtr lParam; - public IntPtr wParam; - public int message; - public IntPtr hWnd; -} - -internal class LocalCallWndProc : LocalWindowsHook +namespace Krypton.Toolkit { - public LocalCallWndProc() - : base(HookType.WH_CALLWNDPROCRET ) => - m_filterFunc = CwpHookProc; + internal struct CWPRETSTRUCT + { + public IntPtr retValue; + public IntPtr lParam; + public IntPtr wParam; + public int message; + public IntPtr hWnd; + } - public delegate void CwpEventHandler(object sender, CWPRETSTRUCT e, out bool actioned); + internal class LocalCallWndProc : LocalWindowsHook + { + public LocalCallWndProc() + : base(HookType.WH_CALLWNDPROCRET) => + m_filterFunc = CwpHookProc; - public event CwpEventHandler? WindowMessage; + public delegate void CwpEventHandler(object sender, CWPRETSTRUCT e, out bool actioned); - internal IntPtr TargetWnd { get; set; } + public event CwpEventHandler? WindowMessage; - private int CwpHookProc(int code, IntPtr wParam, IntPtr lParam) - { - if (code < 0) - { - return CallNextHookEx(m_hHook, code, wParam, lParam); - } + internal IntPtr TargetWnd { get; set; } - var actioned = false; - var msg = (CWPRETSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPRETSTRUCT)); - if (msg.hWnd == TargetWnd) + private int CwpHookProc(int code, IntPtr wParam, IntPtr lParam) { - WindowMessage?.Invoke(this, msg, out actioned); + if (code < 0) + { + return CallNextHookEx(m_hHook, code, wParam, lParam); + } + + var actioned = false; + var msg = (CWPRETSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPRETSTRUCT))!; + if (msg.hWnd == TargetWnd) + { + WindowMessage?.Invoke(this, msg, out actioned); + } + + return actioned + ? 0 + : CallNextHookEx(m_hHook, code, wParam, lParam); } - - return actioned ? 0 : CallNextHookEx(m_hHook, code, wParam, lParam); } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCbtHook.cs b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCbtHook.cs index ed43a1c6e..537a1039c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCbtHook.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalCbtHook.cs @@ -5,7 +5,7 @@ // Assembly location: Z:\Samples\MessageBoxCallbacks\MsgBoxCbtHook\bin\Debug\CbtHook.dll // Original from http://msdn.microsoft.com/msdnmag/issues/02/10/cuttingedge /* - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ using Krypton.Toolkit; diff --git a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalWindowsHook.cs b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalWindowsHook.cs index 5ddd6dc07..8a3e0be7e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalWindowsHook.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/LocalWindowsHook.cs @@ -3,7 +3,7 @@ // Assembly: WindowsHook, Version=1.0.921.18849, Culture=neutral, PublicKeyToken=null // Original from http://msdn.microsoft.com/msdnmag/issues/02/10/cuttingedge /* - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ using Krypton.Toolkit; diff --git a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellBrowserDialogTFM.cs b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellBrowserDialogTFM.cs index acf7147dd..3df596968 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellBrowserDialogTFM.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellBrowserDialogTFM.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -58,8 +58,13 @@ protected override DialogResult ShowActualDialog(IWin32Window? owner) _internalOpenFileDialog.CheckPathExists = true; _internalOpenFileDialog.FileName = "Folder Selection."; var options = _ofd.GetField(@"options", BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); - var value = (int)options.GetValue(_internalOpenFileDialog); - options.SetValue(_internalOpenFileDialog, value | (int)(FOS_.FORCEFILESYSTEM | FOS_.PICKFOLDERS)); + // Check null: if this is running on core !! + options ??= _ofd.GetField(@"_options", BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); + if (options != null) + { + var value = (int)options.GetValue(_internalOpenFileDialog)!; + options.SetValue(_internalOpenFileDialog, value | (int)(FOS_.FORCEFILESYSTEM | FOS_.PICKFOLDERS)); + } return _internalOpenFileDialog.ShowDialog(owner); } @@ -70,7 +75,6 @@ private protected override void WndMessage(object sender, CWPRETSTRUCT e, out bo if (e.message == PI.WM_.INITDIALOG) { - // TODO: Also Disable the Combo filter drop down var button = _commonDialogHandler.Controls.FirstOrDefault(static ctl => ctl.DlgCtrlId == 1); if (button?.Button != null) { @@ -81,9 +85,28 @@ private protected override void WndMessage(object sender, CWPRETSTRUCT e, out bo panel.Width += (int)(30 * _scaleFactor); } } + // Also Hide the Combo filter drop down + var filterCombo = _commonDialogHandler.Controls.FirstOrDefault(static ctl => ctl.DlgCtrlId == 0x470); + if (filterCombo != null) + { + var fileNameCombo = _commonDialogHandler.Controls.First(static ctl => ctl.DlgCtrlId == 0x47C); + PI.ShowWindow(fileNameCombo.hWnd, PI.ShowWindowCommands.SW_HIDE); + var fileNameText = _commonDialogHandler.Controls.First(static ctl => ctl.DlgCtrlId == 0x442); + PI.ShowWindow(fileNameText.hWnd, PI.ShowWindowCommands.SW_HIDE); + PI.ShowWindow(filterCombo.hWnd, PI.ShowWindowCommands.SW_HIDE); + } } } +#if NET6_0_OR_GREATER + /// + public override Guid? ClientGuid + { + get => _internalOpenFileDialog.ClientGuid; + set => _internalOpenFileDialog.ClientGuid = value; + } +#endif + /// [AllowNull] public override string Title @@ -94,7 +117,7 @@ public override string Title public string SelectedPath { - get => Path.GetDirectoryName(_internalOpenFileDialog.FileName); + get => Path.GetDirectoryName(_internalOpenFileDialog.FileName)!; set => _internalOpenFileDialog.InitialDirectory = value; } diff --git a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellDialogWrapper.cs b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellDialogWrapper.cs index 61d3bcebc..f3086ccbe 100644 --- a/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellDialogWrapper.cs +++ b/Source/Krypton Components/Krypton.Toolkit/ShellDialogs/ShellDialogWrapper.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -37,7 +37,7 @@ public DialogResult ShowDialog(IWin32Window? owner) _cbt.Install(); _cwp.Install(); _commonDialogHandler = new CommonDialogHandler(true); - if ( !string.IsNullOrWhiteSpace(Title)) + if (!string.IsNullOrWhiteSpace(Title)) { _commonDialogHandler.Title = Title; } @@ -88,13 +88,13 @@ private protected virtual void WndMessage(object sender, CWPRETSTRUCT e, out boo if (e.message == PI.WM_.INITDIALOG) { #if NET462 - using var g = _commonDialogHandler._wrapperForm.CreateGraphics(); + using var g = _commonDialogHandler._wrapperForm!.CreateGraphics(); _scaleFactor = g.DpiX / 96.0f; #else - _scaleFactor = _commonDialogHandler._wrapperForm.DeviceDpi / 96.0f; + _scaleFactor = _commonDialogHandler._wrapperForm!.DeviceDpi / 96.0f; #endif _commonDialogHandler._wrapperForm.Resize += FormResize; - _commonDialogHandler._wrapperForm.MinimumSize = new SizeF(440 *_scaleFactor, 345 * _scaleFactor).ToSize(); + _commonDialogHandler._wrapperForm.MinimumSize = new SizeF(440 * _scaleFactor, 345 * _scaleFactor).ToSize(); } } @@ -104,8 +104,13 @@ private protected virtual void WndMessage(object sender, CWPRETSTRUCT e, out boo private bool _alreadySetup; private protected float _scaleFactor; - private protected virtual void FormResize(object sender, EventArgs e) + private protected virtual void FormResize(object? sender, EventArgs e) { + if (_commonDialogHandler._wrapperForm == null) + { + return; + } + _commonDialogHandler._wrapperForm.SuspendLayout(); // Align the button underneath the drop down var clientSize = _commonDialogHandler._wrapperForm.ClientSize; foreach (var button in _commonDialogHandler.Controls.Where(static ctl => ctl.Button != null)) @@ -116,19 +121,22 @@ private protected virtual void FormResize(object sender, EventArgs e) { // Do not use strings as they will be localised case 1: // @"&Save" - // case @"&Open": - // case @"Select Folder": - panel.Location = new Point((int)(clientSize.Width - 116 * _scaleFactor - button.Button.Width * 1.1), + // case @"&Open": + // case @"Select Folder": + panel.Location = new Point( + (int)(clientSize.Width - 116 * _scaleFactor - button.Button.Width * 1.1), (int)(clientSize.Height - 12 * _scaleFactor - button.Button.Height)); break; case 2: - //case @"Cancel": - panel.Location = new Point((int)(clientSize.Width - 30 * _scaleFactor - button.Button.Width), + //case @"Cancel": + panel.Location = new Point( + (int)(clientSize.Width - 30 * _scaleFactor - button.Button.Width), (int)(clientSize.Height - 12 * _scaleFactor - button.Button.Height)); break; } } } + _commonDialogHandler._wrapperForm.ResumeLayout(false); } private void WndCreated(object sender, CbtEventArgs e) @@ -192,7 +200,7 @@ private protected virtual bool WndActivated(object sender, CbtEventArgs e) [Description("Gets or sets the file dialog box Icon")] public Icon? Icon { get; set; } -#if NET60_OR_GREATER +#if NET6_0_OR_GREATER /// /// /// Gets or sets the GUID to associate with this dialog state. Typically, state such diff --git a/Source/Krypton Components/Krypton.Toolkit/Storage/Images/Generic/GenericImageStorage.cs b/Source/Krypton Components/Krypton.Toolkit/Storage/Images/Generic/GenericImageStorage.cs new file mode 100644 index 000000000..8e7e28134 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Storage/Images/Generic/GenericImageStorage.cs @@ -0,0 +1,70 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class GenericImageStorage : Storage + { + #region Static Fields + + // ToDo: Use the standard WinForms app icon + private readonly Image _defaultApplicationImage = GenericImageResources.AppButtonDefault; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public GenericImageStorage() + { + Reset(); + } + + /// Converts to string. + /// A that represents this instance. + public override string ToString() => !IsDefault ? "Modified" : string.Empty; + + #endregion + + #region IsDefault + + /// + /// Gets a value indicating if all the strings are default values. + /// + /// True if all values are defaulted; otherwise false. + [Browsable(false)] + public override bool IsDefault => _defaultApplicationImage.Equals(ApplicationIcon); + + #endregion + + #region Public + + /// + /// Gets and sets the application button image. + /// + [Localizable(true)] + [Category(@"Values")] + [Description(@"Application button image.")] + [RefreshProperties(RefreshProperties.All)] + [DefaultValue(typeof(Image), "Resources.AppButtonDefault.png")] + public Image ApplicationIcon { get; set; } + + #endregion + + #region Implementation + + public void Reset() + { + ApplicationIcon = _defaultApplicationImage; + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Storage/Images/KryptonImageStorage.cs b/Source/Krypton Components/Krypton.Toolkit/Storage/Images/KryptonImageStorage.cs new file mode 100644 index 000000000..4f5f0cac8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Storage/Images/KryptonImageStorage.cs @@ -0,0 +1,80 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonImageStorage : Storage + { + #region Static Properties + + public static GenericImageStorage GenericImages { get; } = new GenericImageStorage(); + + public static ToolBarImageStorage ToolbarImageStorage { get; } = new ToolBarImageStorage(); + + #endregion + + #region Public + + /// Gets the toolkit images. + [Category(@"Visuals")] + [Description(@"A collection of images that are used throughout the toolkit.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public GenericImageStorage GenericToolkitImages => GenericImages; + + private bool ShouldSerializeGenericToolkitImages() => !GenericImages.IsDefault; + private void ResetGenericToolkitImages() => GenericImages.Reset(); + + /// Gets the toolbar images. + [Category(@"Visuals")] + [Description(@"A collection of images that are used in toolbars.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public ToolBarImageStorage ToolbarImages => ToolbarImageStorage; + + private bool ShouldSerializeToolbarImages() => !ToolbarImageStorage.IsDefault; + private void ResetToolbarImages() => ToolbarImageStorage.Reset(); + + #endregion + + #region Identity + + public KryptonImageStorage() + { + + } + + #endregion + + #region IsDefault + + /// Gets a value indicating whether this instance is default. + /// true if this instance is default; otherwise, false. + [EditorBrowsable(EditorBrowsableState.Never)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => !(ShouldSerializeGenericToolkitImages() || + ShouldSerializeGenericToolkitImages()); + + #endregion + + #region Implementation + + public void Reset() + { + ResetGenericToolkitImages(); + + ResetToolbarImages(); + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Storage/Images/Toolbar/ToolBarImageStorage.cs b/Source/Krypton Components/Krypton.Toolkit/Storage/Images/Toolbar/ToolBarImageStorage.cs new file mode 100644 index 000000000..fdb093372 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Storage/Images/Toolbar/ToolBarImageStorage.cs @@ -0,0 +1,174 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + + +namespace Krypton.Toolkit +{ + /// Access to the integrated and quick access toolbar images. + /// ToDo: Get images from theme, when changed + [TypeConverter(typeof(ExpandableObjectConverter))] + public class ToolBarImageStorage : Storage + { + #region Static Fields + + private readonly Image _new = GenericToolbarImageResources.GenericNewDocument; + private readonly Image _open = GenericToolbarImageResources.GenericOpenFolder; + private readonly Image _save = GenericToolbarImageResources.GenericSave; + private readonly Image _saveAs = GenericToolbarImageResources.GenericSaveAs; + private readonly Image _saveAll = GenericToolbarImageResources.GenericSaveAll; + private readonly Image _cut = GenericToolbarImageResources.GenericCut; + private readonly Image _copy = GenericToolbarImageResources.GenericCopy; + private readonly Image _paste = GenericToolbarImageResources.GenericPaste; + private readonly Image _undo = GenericToolbarImageResources.GenericUndo; + private readonly Image _redo = GenericToolbarImageResources.GenericRedo; + private readonly Image _pageSetup = GenericToolbarImageResources.GenericPrintSetup; + private readonly Image _printPreview = GenericToolbarImageResources.GenericPrintPreview; + private readonly Image _print = GenericToolbarImageResources.GenericPrint; + private readonly Image _quickPrint = GenericToolbarImageResources.GenericQuickPrint; + + #endregion + + #region Instance Fields + + private List _toolBarImages; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public ToolBarImageStorage() + { + _toolBarImages = new List(); + + Reset(); + } + + #endregion + + #region Public + + public Image New { get; set; } + + public Image Open { get; set; } + + public Image Save { get; set; } + + public Image SaveAs { get; set; } + + public Image SaveAll { get; set; } + + public Image Cut { get; set; } + + public Image Copy { get; set; } + + public Image Paste { get; set; } + + public Image Undo { get; set; } + + public Image Redo { get; set; } + + public Image PageSetup { get; set; } + + public Image PrintPreview { get; set; } + + public Image Print { get; set; } + + public Image QuickPrint { get; set; } + + #endregion + + #region IsDefault + + /// + /// Gets a value indicating if all the strings are default values. + /// + /// True if all values are defaulted; otherwise false. + [Browsable(false)] + public override bool IsDefault => New.Equals(_new) && + Open.Equals(_open) && + Save.Equals(_save) && + SaveAs.Equals(_saveAs) && + SaveAll.Equals(_saveAll) && + Undo.Equals(_undo) && + Redo.Equals(_redo) && + PageSetup.Equals(_pageSetup) && + PrintPreview.Equals(_printPreview) && + Print.Equals(_print) && + QuickPrint.Equals(_quickPrint); + + #endregion + + #region Implementation + + public void Reset() + { + New = _new; + Open = _open; + Save = _save; + SaveAs = _saveAs; + SaveAll = _saveAll; + Cut = _cut; + Copy = _copy; + Paste = _paste; + Undo = _undo; + Redo = _redo; + PageSetup = _pageSetup; + PrintPreview = _printPreview; + Print = _print; + QuickPrint = _quickPrint; + } + + /// Adds the palette toolbar images to an array. + /// The palette toolbar images. + public /*static*/ void AddImagesToArray(Image[] paletteToolBarImages) + { + foreach (var image in paletteToolBarImages) + { + _toolBarImages.Add(image); + } + } + + /// Returns the toolbar images. + /// A collection of toolbar images. + public List ReturnToolBarImages() => _toolBarImages; + + internal void SetToolBarImages(Image[] images) + { + AddImagesToArray(images); + + AssignImageValues(ReturnToolBarImages()); + } + + private void AssignImageValues(List imageCollection) + { + if (imageCollection.Count > 0) + { + Image[] toolBarImages = imageCollection.ToArray(); + + New = toolBarImages[0]; + Open = toolBarImages[1]; + Save = toolBarImages[2]; + SaveAs = toolBarImages[3]; + SaveAll = toolBarImages[4]; + Cut = toolBarImages[5]; + Copy = toolBarImages[6]; + Paste = toolBarImages[7]; + Undo = toolBarImages[8]; + Redo = toolBarImages[9]; + PageSetup = toolBarImages[10]; + PrintPreview = toolBarImages[11]; + Print = toolBarImages[12]; + QuickPrint = toolBarImages[13]; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/ToolboxBitmaps/KryptonCommandLinkButton.bmp b/Source/Krypton Components/Krypton.Toolkit/ToolboxBitmaps/KryptonCommandLinkButton.bmp new file mode 100644 index 000000000..e7f1ba674 Binary files /dev/null and b/Source/Krypton Components/Krypton.Toolkit/ToolboxBitmaps/KryptonCommandLinkButton.bmp differ diff --git a/Source/Krypton Components/Krypton.Toolkit/Tooling/DebugTools.cs b/Source/Krypton Components/Krypton.Toolkit/Tooling/DebugTools.cs index 1591f1258..2ba189ffa 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Tooling/DebugTools.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Tooling/DebugTools.cs @@ -5,33 +5,41 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion namespace Krypton.Toolkit { - internal static class DebugTools + /// + /// Allow Krypton to be improved by getting help from users + /// + public static class DebugTools { #region Implementation - internal static void NotImplemented(string methodSignature, string className, int lineNumber = 0) - { - KryptonCommand linkCommand = new KryptonCommand(); - - linkCommand.Execute += (sender, args) => { Process.Start(@"https://github.com/Krypton-Suite/Standard-Toolkit/issues/new/choose"); }; - if (lineNumber > 0) + /// + /// Allow Krypton to be improved by getting help from users + /// + public static Exception NotImplemented(string? outOfRange, + [CallerFilePath] string callingFilePath = "", + [CallerLineNumber] int lineNumber = 0, + [CallerMemberName] string? callingMethod = "") + { + // Do not use `KryptonMessageBox` as this will cause palette's to go into recurrent loop + if (DialogResult.Yes == MessageBox.Show( + $"If you are seeing this message, please submit a new bug report here.\n\nAdditional details:-\nMethod Signature: {callingMethod}\nFunction: {callingMethod}\nFile: {callingFilePath}\nLine Number: {lineNumber}", + "Not Implemented - Please submit ?", MessageBoxButtons.YesNo, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2) ) { - KryptonMessageBox.Show($"If you are seeing this message, please submit a new bug report here.\n\nAdditional details:-\nMethod Signature: {methodSignature}\nClass Name: {className}\nLine Number: {lineNumber}", - "Not Implemented", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error, contentAreaType: MessageBoxContentAreaType.LinkLabel, actionButtonCommand: linkCommand, contentLinkArea: new LinkArea(64, 67)); + Process.Start(@"https://github.com/Krypton-Suite/Standard-Toolkit/issues/new/choose"); } - else + return new ArgumentOutOfRangeException(outOfRange) { - KryptonMessageBox.Show($"If you are seeing this message, please submit a new bug report here.\n\nAdditional details:-\nMethod Signature: {methodSignature}\nClass Name: {className}", - "Not Implemented", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); - } + Source = callingMethod + }; } + #endregion } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Tooling/ExceptionHandler.cs b/Source/Krypton Components/Krypton.Toolkit/Tooling/ExceptionHandler.cs index 563bba6e5..c2dc21bcf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Tooling/ExceptionHandler.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Tooling/ExceptionHandler.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -17,40 +17,53 @@ namespace Krypton.Toolkit /// internal class ExceptionHandler { - #region Constructor + #region Idendity + /// Initializes a new instance of the class. public ExceptionHandler() { } + #endregion - #region Methods + #region Implementation + /// Captures the exception. /// The exception. /// The title. - /// The buttons. - /// The icon. - /// Name of the class. - /// The method signature. - public static void CaptureException(Exception exception, string title = @"Exception Caught", KryptonMessageBoxButtons buttons = KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon icon = KryptonMessageBoxIcon.Warning, string className = "", string methodSignature = "") + /// The calling file path. + /// The line number. + /// The calling method. + /// Show the stack trace. + public static void CaptureException( + Exception exception, + string title = "Exception Caught", + [CallerFilePath] string callerFilePath = "", + [CallerLineNumber] int lineNumber = 0, + [CallerMemberName] string callerMethod = "", + bool showStackTrace = false) { - if (className != "") - { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.\n\nError in class: '{className}.cs'.", title, buttons, icon); - } - else if (methodSignature != "") - { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.\n\nError in method: '{methodSignature}'.", title, buttons, icon); - } - else if (className != "" && methodSignature != "") - { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.\n\nError in class: '{className}.cs'.\n\nError in method: '{methodSignature}'.", title, buttons, icon); - } - else + StringBuilder messageBuilder = new StringBuilder(); + + messageBuilder.Append($"An unexpected error has occurred:\r\n\r\n"); + messageBuilder.Append($"Class: {callerFilePath}\r\n"); + messageBuilder.Append($"Method: {callerMethod}\r\n"); + messageBuilder.Append($"Line: {lineNumber}\r\n"); + messageBuilder.Append($"Message: {exception.Message}\r\n\r\n"); + + if (showStackTrace) { - KryptonMessageBox.Show($"An unexpected error has occurred: {exception.Message}.", title, buttons, icon); + messageBuilder.Append($"Stacktrace:\r\n{exception.StackTrace}\r\n"); } + + string message = messageBuilder.ToString(); + + KryptonMessageBoxButtons okButton = KryptonMessageBoxButtons.OK; + + KryptonMessageBoxIcon exceptionIcon = KryptonMessageBoxIcon.Error; + + KryptonMessageBox.Show(message, title, okButton, exceptionIcon, showCtrlCopy: true); } /// Captures a stack trace of the exception. @@ -69,13 +82,15 @@ public static void PrintStackTrace(Exception exception, string fileName) writer.Write(exception.ToString()); + writer.Write(exception.StackTrace); + writer.Close(); writer.Dispose(); } catch (Exception e) { - CaptureException(e); + CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } @@ -101,7 +116,7 @@ public static void PrintExceptionStackTrace(Exception exception, string fileName } catch (Exception e) { - CaptureException(e); + CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Tooling/GeneralToolkitUtilities.cs b/Source/Krypton Components/Krypton.Toolkit/Tooling/GeneralToolkitUtilities.cs index 3bad5893e..212657b29 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Tooling/GeneralToolkitUtilities.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Tooling/GeneralToolkitUtilities.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Colours/GlobalColorStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Colours/GlobalColorStrings.cs index c87ff72d1..6f70d1e82 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Colours/GlobalColorStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Colours/GlobalColorStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -51,7 +51,7 @@ public GlobalColorStrings() /// True if all values are defaulted; otherwise false. [Browsable(false)] public bool IsDefault => Color.Equals(DEFAULT_COLOR) && - Color.Equals(DEFAULT_COLORS) && + Colors.Equals(DEFAULT_COLORS) && MoreColors.Equals(DEFAULT_MORE_COLORS) && ThemeColors.Equals(DEFAULT_THEME_COLORS) && StandardColors.Equals(DEFAULT_STANDARD_COLORS) && diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/ButtonSpecStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/ButtonSpecStyleStrings.cs index 56a253b03..31fa04a5d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/ButtonSpecStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/ButtonSpecStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/DataGridViewStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/DataGridViewStyleStrings.cs index 56d33fdb0..f1f4eef9f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/DataGridViewStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/DataGridViewStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/GridStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/GridStyleStrings.cs index a95950df2..072ac1603 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/GridStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/GridStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderGroupCollapsedTargetStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderGroupCollapsedTargetStrings.cs index 2f502211b..3757d9c2a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderGroupCollapsedTargetStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderGroupCollapsedTargetStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderStyleStrings.cs index 220c50885..c355e54cd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/HeaderStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/InputControlStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/InputControlStyleStrings.cs index 94e51134f..19103ba95 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/InputControlStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/InputControlStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/IntegratedToolBarStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/IntegratedToolBarStrings.cs index e7731a163..7c515947a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/IntegratedToolBarStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/IntegratedToolBarStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/KryptonLinkBehaviorStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/KryptonLinkBehaviorStrings.cs index e4d0bbb8e..736ea6946 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/KryptonLinkBehaviorStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/KryptonLinkBehaviorStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/LabelStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/LabelStyleStrings.cs index 89d19dc40..f67e03b78 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/LabelStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/LabelStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBackStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBackStyleStrings.cs index ecb6f2e32..ec4521077 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBackStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBackStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBorderStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBorderStyleStrings.cs index 20de1c90f..960e6a95f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBorderStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteBorderStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonOrientationStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonOrientationStrings.cs index accc7b978..c3fd6877b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonOrientationStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonOrientationStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonSpecStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonSpecStyleStrings.cs index 036203e79..81d2d4944 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonSpecStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonSpecStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonStyleStrings.cs index c9e67eb31..e75407338 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteButtonStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteContentStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteContentStyleStrings.cs index 54e3f86d9..34c4d7e3a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteContentStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteContentStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -113,7 +113,7 @@ public PaletteContentStyleStrings() ButtonBreadCrumb.Equals(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_BREAD_CRUMB) && ButtonCalendarDay.Equals(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_CALENDAR_DAY) && ButtonCluster.Equals(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_CLUSTER) && - ButtonGallery.Equals(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_GALLERY) && + !ShouldSerializeButtonGallery() && ButtonNavigatorStack.Equals(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_NAVIGATOR_STACK) && ButtonNavigatorOverflow.Equals(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_NAVIGATOR_OVERFLOW) && ButtonNavigatorMini.Equals(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_NAVIGATOR_MINI) && @@ -130,10 +130,9 @@ public PaletteContentStyleStrings() ContextMenuItemTextAlternate.Equals(DEFAULT_PALETTE_CONTENT_STYLE_CONTEXT_MENU_ITEM_TEXT_ALTERNATE) && ContextMenuItemShortcutText.Equals(DEFAULT_PALETTE_CONTENT_STYLE_CONTEXT_MENU_ITEM_SHORTCUT_TEXT) && GridHeaderColumnList.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_COLUMN_LIST) && - GridHeaderRowList.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_LIST) && GridDataCellList.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_DATA_CELL_LIST) && GridHeaderColumnSheet.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_COLUMN_SHEET) && - GridHeaderRowList.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_LIST) && + !ShouldSerializeGridHeaderRowList() && GridDataCellSheet.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_DATA_CELL_SHEET) && GridHeaderColumnCustom1.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_COLUMN_CUSTOM1) && GridHeaderColumnCustom2.Equals(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_COLUMN_CUSTOM2) && @@ -230,7 +229,7 @@ public void Reset() GridHeaderColumnList = DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_COLUMN_LIST; - GridHeaderRowList = DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_LIST; + ResetGridHeaderRowList(); GridDataCellList = DEFAULT_PALETTE_CONTENT_STYLE_GRID_DATA_CELL_LIST; @@ -380,7 +379,9 @@ public void Reset() [Description(@"The gallery palette button content style.")] [DefaultValue(DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_GALLERY)] [RefreshProperties(RefreshProperties.All)] - public string ButtonGallery { get; set; } + public string ButtonGallery { get; set; } = DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_GALLERY; + private bool ShouldSerializeButtonGallery() => ButtonGallery != DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_GALLERY; + private void ResetButtonGallery() => ButtonGallery = DEFAULT_PALETTE_CONTENT_STYLE_BUTTON_GALLERY; /// Gets or sets the navigator stack palette button content style string. [Category(@"Visuals")] @@ -504,9 +505,11 @@ public void Reset() /// Gets or sets the header row list grid style string. [Category(@"Visuals")] [Description(@"The header row list grid style.")] - [DefaultValue(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_CUSTOM1)] + [DefaultValue(DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_LIST)] [RefreshProperties(RefreshProperties.All)] - public string GridHeaderRowList { get; set; } + public string GridHeaderRowList { get; set; } = DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_LIST; + private bool ShouldSerializeGridHeaderRowList() => GridHeaderRowList != DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_LIST; + private void ResetGridHeaderRowList() => GridHeaderRowList = DEFAULT_PALETTE_CONTENT_STYLE_GRID_HEADER_ROW_LIST; /// Gets or sets the data cell list grid style string. [Category(@"Visuals")] diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageEffectStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageEffectStrings.cs index fa2d886ad..e65080a52 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageEffectStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageEffectStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageStyleStrings.cs index 9410aed95..7512e6681 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteImageStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteModeStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteModeStrings.cs index 4fc5728a6..3e27d3dd5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteModeStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteModeStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -48,6 +48,7 @@ public class PaletteModeStrings : GlobalId internal const string DEFAULT_PALETTE_MICROSOFT_365_SILVER = @"Microsoft 365 - Silver"; internal const string DEFAULT_PALETTE_MICROSOFT_365_WHITE = @"Microsoft 365 - White"; internal const string DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE = @"Microsoft 365 - Black (Dark Mode)"; + internal const string DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE_ALTERNATE = @"Microsoft 365 - Black (Dark Mode - Alternate)"; internal const string DEFAULT_PALETTE_MICROSOFT_365_BLUE_DARK_MODE = @"Microsoft 365 - Blue (Dark Mode)"; internal const string DEFAULT_PALETTE_MICROSOFT_365_SILVER_DARK_MODE = @"Microsoft 365 - Silver (Dark Mode)"; internal const string DEFAULT_PALETTE_MICROSOFT_365_DARK_GRAY = @"Microsoft 365 - Dark Gray"; @@ -85,74 +86,84 @@ public class PaletteModeStrings : GlobalId #region Instance Fields internal static readonly BiDictionary SupportedThemes = - new BiDictionary(new Dictionary - { - // Use default strings, because these are used to match xml strings when importing palettes, and in the designer(s) - { DEFAULT_PALETTE_SYSTEM, PaletteMode.ProfessionalSystem }, - { DEFAULT_PALETTE_OFFICE_2003, PaletteMode.ProfessionalOffice2003 }, - { DEFAULT_PALETTE_OFFICE_2007_BLUE, PaletteMode.Office2007Blue }, - { DEFAULT_PALETTE_OFFICE_2007_BLUE_DARK_MODE, PaletteMode.Office2007BlueDarkMode }, - { DEFAULT_PALETTE_OFFICE_2007_BLUE_LIGHT_MODE, PaletteMode.Office2007BlueLightMode }, - { DEFAULT_PALETTE_OFFICE_2007_SILVER, PaletteMode.Office2007Silver }, - { DEFAULT_PALETTE_OFFICE_2007_SILVER_DARK_MODE, PaletteMode.Office2007SilverDarkMode }, - { DEFAULT_PALETTE_OFFICE_2007_SILVER_LIGHT_MODE, PaletteMode.Office2007SilverLightMode }, - { DEFAULT_PALETTE_OFFICE_2007_WHITE, PaletteMode.Office2007White }, - { DEFAULT_PALETTE_OFFICE_2007_BLACK, PaletteMode.Office2007Black }, - { DEFAULT_PALETTE_OFFICE_2007_BLACK_DARK_MODE, PaletteMode.Office2007BlackDarkMode }, - //{ DEFAULT_PALETTE_OFFICE_2007_DARK_GRAY, PaletteMode.Office2007DarkGray }, - //{ PaletteModeStrings.DEFAULT_PALETTE_OFFICE_2007_LIGHT_GRAY, PaletteMode.Office2007LightGray }, - { DEFAULT_PALETTE_OFFICE_2010_BLUE, PaletteMode.Office2010Blue }, - { DEFAULT_PALETTE_OFFICE_2010_BLUE_DARK_MODE, PaletteMode.Office2010BlueDarkMode }, - { DEFAULT_PALETTE_OFFICE_2010_BLUE_LIGHT_MODE, PaletteMode.Office2010BlueLightMode }, - { DEFAULT_PALETTE_OFFICE_2010_SILVER, PaletteMode.Office2010Silver }, - { DEFAULT_PALETTE_OFFICE_2010_SILVER_DARK_MODE, PaletteMode.Office2010SilverDarkMode }, - { DEFAULT_PALETTE_OFFICE_2010_SILVER_LIGHT_MODE, PaletteMode.Office2010SilverLightMode }, - { DEFAULT_PALETTE_OFFICE_2010_WHITE, PaletteMode.Office2010White }, - { DEFAULT_PALETTE_OFFICE_2010_BLACK, PaletteMode.Office2010Black }, - { DEFAULT_PALETTE_OFFICE_2010_BLACK_DARK_MODE, PaletteMode.Office2010BlackDarkMode }, - //{ DEFAULT_PALETTE_OFFICE_2010_DARK_GRAY, PaletteMode.Office2010DarkGray }, - //{ PaletteModeStrings.DEFAULT_PALETTE_OFFICE_2010_LIGHT_GRAY, PaletteMode.Office2010LightGray }, - //{ DEFAULT_PALETTE_OFFICE_2013_DARK_GRAY, PaletteMode.Office2013DarkGray }, - //{ PaletteModeStrings.DEFAULT_PALETTE_OFFICE_2013_LIGHT_GRAY, PaletteMode.Office2013LightGray }, - { DEFAULT_PALETTE_OFFICE_2013_WHITE, PaletteMode.Office2013White }, - { DEFAULT_PALETTE_SPARKLE_BLUE, PaletteMode.SparkleBlue }, - { DEFAULT_PALETTE_SPARKLE_BLUE_DARK_MODE, PaletteMode.SparkleBlueDarkMode }, - { DEFAULT_PALETTE_SPARKLE_BLUE_LIGHT_MODE, PaletteMode.SparkleBlueLightMode }, - { DEFAULT_PALETTE_SPARKLE_ORANGE, PaletteMode.SparkleOrange }, - { DEFAULT_PALETTE_SPARKLE_ORANGE_DARK_MODE, PaletteMode.SparkleOrangeDarkMode }, - { DEFAULT_PALETTE_SPARKLE_ORANGE_LIGHT_MODE, PaletteMode.SparkleOrangeLightMode }, - { DEFAULT_PALETTE_SPARKLE_PURPLE, PaletteMode.SparklePurple }, - { DEFAULT_PALETTE_SPARKLE_PURPLE_DARK_MODE, PaletteMode.SparklePurpleDarkMode }, - { DEFAULT_PALETTE_SPARKLE_PURPLE_LIGHT_MODE, PaletteMode.SparklePurpleLightMode }, - { DEFAULT_PALETTE_MICROSOFT_365_BLUE, PaletteMode.Microsoft365Blue }, - { DEFAULT_PALETTE_MICROSOFT_365_BLUE_DARK_MODE, PaletteMode.Microsoft365BlueDarkMode }, - { DEFAULT_PALETTE_MICROSOFT_365_BLUE_LIGHT_MODE, PaletteMode.Microsoft365BlueLightMode }, - { DEFAULT_PALETTE_MICROSOFT_365_SILVER, PaletteMode.Microsoft365Silver }, - { DEFAULT_PALETTE_MICROSOFT_365_SILVER_DARK_MODE, PaletteMode.Microsoft365SilverDarkMode }, - { DEFAULT_PALETTE_MICROSOFT_365_SILVER_LIGHT_MODE, PaletteMode.Microsoft365SilverLightMode }, - { DEFAULT_PALETTE_MICROSOFT_365_WHITE, PaletteMode.Microsoft365White }, - { DEFAULT_PALETTE_MICROSOFT_365_BLACK, PaletteMode.Microsoft365Black }, - { DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE, PaletteMode.Microsoft365BlackDarkMode }, - { DEFAULT_PALETTE_MICROSOFT_365_DARK_GRAY, PaletteMode.Microsoft365DarkGray }, - //{ PaletteModeStrings.DEFAULT_PALETTE_MICROSOFT_365_LIGHT_GRAY, PaletteMode.Microsoft365LightGray }, - { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_2007, PaletteMode.VisualStudio2010Render2007 }, - { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_2010, PaletteMode.VisualStudio2010Render2010 }, - { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_2013, PaletteMode.VisualStudio2010Render2013 }, - { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_365, PaletteMode.VisualStudio2010Render365 }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2012_DARK_MODE, PaletteMode.VisualStudio2012DarkMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2012_LIGHT_MODE, PaletteMode.VisualStudio2012LightMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2013_DARK_MODE, PaletteMode.VisualStudio2013DarkMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2013_LIGHT_MODE, PaletteMode.VisualStudio2013LightMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2015_DARK_MODE, PaletteMode.VisualStudio2015DarkMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2015_LIGHT_MODE, PaletteMode.VisualStudio2015LightMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2017_DARK_MODE, PaletteMode.VisualStudio2017DarkMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2017_LIGHT_MODE, PaletteMode.VisualStudio2017LightMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2019_DARK_MODE, PaletteMode.VisualStudio2019DarkMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2019_LIGHT_MODE, PaletteMode.VisualStudio2019LightMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2022_DARK_MODE, PaletteMode.VisualStudio2022DarkMode }, - //{ DEFAULT_PALETTE_VISUAL_STUDIO_2022_LIGHT_MODE, PaletteMode.VisualStudio2022LightMode }, - { DEFAULT_PALETTE_CUSTOM, PaletteMode.Custom } - }); + new BiDictionary(new Dictionary + { + /* + * Adjustements made as per ticket 1328. + * See: https://github.com/Krypton-Suite/Standard-Toolkit/issues/1328 + * + * When ever this list is changed, inspect the PaletteMode enum for consistency. + * + * IT IS MANDATORY TO KEEP THE PALETTEMODE ENUM AND THE DICTIONARY IN THE SAME ORDER. + */ + + // Use default strings, because these are used to match xml strings when importing palettes, and in the designer(s) + { DEFAULT_PALETTE_SYSTEM, PaletteMode.ProfessionalSystem }, + { DEFAULT_PALETTE_OFFICE_2003, PaletteMode.ProfessionalOffice2003 }, + { DEFAULT_PALETTE_OFFICE_2007_BLUE, PaletteMode.Office2007Blue }, + { DEFAULT_PALETTE_OFFICE_2007_BLUE_DARK_MODE, PaletteMode.Office2007BlueDarkMode }, + { DEFAULT_PALETTE_OFFICE_2007_BLUE_LIGHT_MODE, PaletteMode.Office2007BlueLightMode }, + { DEFAULT_PALETTE_OFFICE_2007_SILVER, PaletteMode.Office2007Silver }, + { DEFAULT_PALETTE_OFFICE_2007_SILVER_DARK_MODE, PaletteMode.Office2007SilverDarkMode }, + { DEFAULT_PALETTE_OFFICE_2007_SILVER_LIGHT_MODE, PaletteMode.Office2007SilverLightMode }, + { DEFAULT_PALETTE_OFFICE_2007_WHITE, PaletteMode.Office2007White }, + { DEFAULT_PALETTE_OFFICE_2007_BLACK, PaletteMode.Office2007Black }, + { DEFAULT_PALETTE_OFFICE_2007_BLACK_DARK_MODE, PaletteMode.Office2007BlackDarkMode }, + //{ DEFAULT_PALETTE_OFFICE_2007_DARK_GRAY, PaletteMode.Office2007DarkGray }, + //{ PaletteModeStrings.DEFAULT_PALETTE_OFFICE_2007_LIGHT_GRAY, PaletteMode.Office2007LightGray }, + { DEFAULT_PALETTE_OFFICE_2010_BLUE, PaletteMode.Office2010Blue }, + { DEFAULT_PALETTE_OFFICE_2010_BLUE_DARK_MODE, PaletteMode.Office2010BlueDarkMode }, + { DEFAULT_PALETTE_OFFICE_2010_BLUE_LIGHT_MODE, PaletteMode.Office2010BlueLightMode }, + { DEFAULT_PALETTE_OFFICE_2010_SILVER, PaletteMode.Office2010Silver }, + { DEFAULT_PALETTE_OFFICE_2010_SILVER_DARK_MODE, PaletteMode.Office2010SilverDarkMode }, + { DEFAULT_PALETTE_OFFICE_2010_SILVER_LIGHT_MODE, PaletteMode.Office2010SilverLightMode }, + { DEFAULT_PALETTE_OFFICE_2010_WHITE, PaletteMode.Office2010White }, + { DEFAULT_PALETTE_OFFICE_2010_BLACK, PaletteMode.Office2010Black }, + { DEFAULT_PALETTE_OFFICE_2010_BLACK_DARK_MODE, PaletteMode.Office2010BlackDarkMode }, + //{ DEFAULT_PALETTE_OFFICE_2010_DARK_GRAY, PaletteMode.Office2010DarkGray }, + //{ PaletteModeStrings.DEFAULT_PALETTE_OFFICE_2010_LIGHT_GRAY, PaletteMode.Office2010LightGray }, + //{ DEFAULT_PALETTE_OFFICE_2013_DARK_GRAY, PaletteMode.Office2013DarkGray }, + //{ PaletteModeStrings.DEFAULT_PALETTE_OFFICE_2013_LIGHT_GRAY, PaletteMode.Office2013LightGray }, + { DEFAULT_PALETTE_OFFICE_2013_WHITE, PaletteMode.Office2013White }, + { DEFAULT_PALETTE_SPARKLE_BLUE, PaletteMode.SparkleBlue }, + { DEFAULT_PALETTE_SPARKLE_BLUE_DARK_MODE, PaletteMode.SparkleBlueDarkMode }, + { DEFAULT_PALETTE_SPARKLE_BLUE_LIGHT_MODE, PaletteMode.SparkleBlueLightMode }, + { DEFAULT_PALETTE_SPARKLE_ORANGE, PaletteMode.SparkleOrange }, + { DEFAULT_PALETTE_SPARKLE_ORANGE_DARK_MODE, PaletteMode.SparkleOrangeDarkMode }, + { DEFAULT_PALETTE_SPARKLE_ORANGE_LIGHT_MODE, PaletteMode.SparkleOrangeLightMode }, + { DEFAULT_PALETTE_SPARKLE_PURPLE, PaletteMode.SparklePurple }, + { DEFAULT_PALETTE_SPARKLE_PURPLE_DARK_MODE, PaletteMode.SparklePurpleDarkMode }, + { DEFAULT_PALETTE_SPARKLE_PURPLE_LIGHT_MODE, PaletteMode.SparklePurpleLightMode }, + { DEFAULT_PALETTE_MICROSOFT_365_BLUE, PaletteMode.Microsoft365Blue }, + { DEFAULT_PALETTE_MICROSOFT_365_BLUE_DARK_MODE, PaletteMode.Microsoft365BlueDarkMode }, + { DEFAULT_PALETTE_MICROSOFT_365_BLUE_LIGHT_MODE, PaletteMode.Microsoft365BlueLightMode }, + { DEFAULT_PALETTE_MICROSOFT_365_SILVER, PaletteMode.Microsoft365Silver }, + { DEFAULT_PALETTE_MICROSOFT_365_SILVER_DARK_MODE, PaletteMode.Microsoft365SilverDarkMode }, + { DEFAULT_PALETTE_MICROSOFT_365_SILVER_LIGHT_MODE, PaletteMode.Microsoft365SilverLightMode }, + { DEFAULT_PALETTE_MICROSOFT_365_WHITE, PaletteMode.Microsoft365White }, + { DEFAULT_PALETTE_MICROSOFT_365_BLACK, PaletteMode.Microsoft365Black }, + { DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE, PaletteMode.Microsoft365BlackDarkMode }, + { DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE_ALTERNATE, PaletteMode.Microsoft365BlackDarkModeAlternate}, + //{ DEFAULT_PALETTE_MICROSOFT_365_DARK_GRAY, PaletteMode.Microsoft365DarkGray }, + //{ PaletteModeStrings.DEFAULT_PALETTE_MICROSOFT_365_LIGHT_GRAY, PaletteMode.Microsoft365LightGray }, + { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_2007, PaletteMode.VisualStudio2010Render2007 }, + { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_2010, PaletteMode.VisualStudio2010Render2010 }, + { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_2013, PaletteMode.VisualStudio2010Render2013 }, + { DEFAULT_PALETTE_VISUAL_STUDIO_2010_RENDER_365, PaletteMode.VisualStudio2010Render365 }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2012_DARK_MODE, PaletteMode.VisualStudio2012DarkMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2012_LIGHT_MODE, PaletteMode.VisualStudio2012LightMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2013_DARK_MODE, PaletteMode.VisualStudio2013DarkMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2013_LIGHT_MODE, PaletteMode.VisualStudio2013LightMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2015_DARK_MODE, PaletteMode.VisualStudio2015DarkMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2015_LIGHT_MODE, PaletteMode.VisualStudio2015LightMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2017_DARK_MODE, PaletteMode.VisualStudio2017DarkMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2017_LIGHT_MODE, PaletteMode.VisualStudio2017LightMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2019_DARK_MODE, PaletteMode.VisualStudio2019DarkMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2019_LIGHT_MODE, PaletteMode.VisualStudio2019LightMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2022_DARK_MODE, PaletteMode.VisualStudio2022DarkMode }, + //{ DEFAULT_PALETTE_VISUAL_STUDIO_2022_LIGHT_MODE, PaletteMode.VisualStudio2022LightMode }, + { DEFAULT_PALETTE_CUSTOM, PaletteMode.Custom } + }); #endregion @@ -207,6 +218,7 @@ public PaletteModeStrings() Office2013White.Equals(DEFAULT_PALETTE_OFFICE_2013_WHITE) && Microsoft365Black.Equals(DEFAULT_PALETTE_MICROSOFT_365_BLACK) && Microsoft365BlackDarkMode.Equals(DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE) && + Microsoft365BlackDarkModeAlternate.Equals(DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE_ALTERNATE) && Microsoft365Blue.Equals(DEFAULT_PALETTE_MICROSOFT_365_BLUE) && Microsoft365BlueDarkMode.Equals(DEFAULT_PALETTE_MICROSOFT_365_BLUE_DARK_MODE) && Microsoft365BlueLightMode.Equals(DEFAULT_PALETTE_MICROSOFT_365_BLUE_LIGHT_MODE) && @@ -292,6 +304,8 @@ public void Reset() Microsoft365BlackDarkMode = DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE; + Microsoft365BlackDarkModeAlternate = DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE_ALTERNATE; + Microsoft365Blue = DEFAULT_PALETTE_MICROSOFT_365_BLUE; Microsoft365BlueDarkMode = DEFAULT_PALETTE_MICROSOFT_365_BLUE_DARK_MODE; @@ -361,6 +375,8 @@ public void Reset() [RefreshProperties(RefreshProperties.All)] public string Professional2003 { get; set; } + #region Office 2007 + /// Gets or sets the Office 2007 Black palette name string. [Localizable(true)] [Category(@"Visuals")] @@ -449,6 +465,10 @@ public void Reset() [RefreshProperties(RefreshProperties.All)] public string Office2007LightGray { get; set; } + #endregion + + #region Office 2010 + /// Gets or sets the Office 2010 Black palette name string. [Localizable(true)] [Category(@"Visuals")] @@ -537,6 +557,10 @@ public void Reset() [RefreshProperties(RefreshProperties.All)] public string Office2010LightGray { get; set; } + #endregion + + #region Office 2013 + /// Gets or sets the Office 2013 White palette name string. [Localizable(true)] [Category(@"Visuals")] @@ -561,6 +585,10 @@ public void Reset() [RefreshProperties(RefreshProperties.All)] public string Office2013LightGray { get; set; } + #endregion + + #region Microsoft 365 + /// Gets or sets the Microsoft 365 Black palette name string. [Localizable(true)] [Category(@"Visuals")] @@ -601,6 +629,14 @@ public void Reset() [RefreshProperties(RefreshProperties.All)] public string Microsoft365BlackDarkMode { get; set; } + /// Gets or sets the Microsoft 365 Black (Dark Mode - Alternate) palette name string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The Microsoft 365 Black (Dark Mode - Alternate) palette name.")] + [DefaultValue(DEFAULT_PALETTE_MICROSOFT_365_BLACK_DARK_MODE_ALTERNATE)] + [RefreshProperties(RefreshProperties.All)] + public string Microsoft365BlackDarkModeAlternate { get; set; } + /// Gets or sets the Microsoft 365 Blue (Dark Mode) palette name string. [Localizable(true)] [Category(@"Visuals")] @@ -649,6 +685,10 @@ public void Reset() [RefreshProperties(RefreshProperties.All)] public string Microsoft365LightGray { get; set; } + #endregion + + #region Sparkle + /// Gets or sets the Sparkle Blue palette name string. [Localizable(true)] [Category(@"Visuals")] @@ -721,6 +761,10 @@ public void Reset() [RefreshProperties(RefreshProperties.All)] public string SparklePurpleLightMode { get; set; } + #endregion + + #region Visual Studio + /// Gets or sets the Visual Studio 2010 with 2007 renderer palette name string. [Localizable(true)] [Category(@"Visuals")] @@ -755,5 +799,7 @@ public void Reset() #endregion + #endregion + } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteTextTrimStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteTextTrimStrings.cs index 350aadc43..f06c6b0ec 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteTextTrimStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PaletteTextTrimStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PlacementModeStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PlacementModeStrings.cs index e98caa347..274e8b480 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PlacementModeStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/PlacementModeStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/SeparatorStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/SeparatorStyleStrings.cs index 3c20e2963..d09cbb318 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/SeparatorStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/SeparatorStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabBorderStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabBorderStyleStrings.cs index 5939db00d..84858598c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabBorderStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabBorderStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -257,7 +257,7 @@ public void Reset() /// Gets or sets the slant outsize both tab border style string. [Category(@"Visuals")] [Description(@"The slant outsize both tab border style.")] - [DefaultValue(DEFAULT_TAB_BORDER_STYLE_SLANT_OUTSIZE_NEAR)] + [DefaultValue(DEFAULT_TAB_BORDER_STYLE_SLANT_OUTSIZE_BOTH)] [RefreshProperties(RefreshProperties.All)] public string SlantOutsizeBoth { get; set; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabStyleStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabStyleStrings.cs index 5105c8b11..ede938d0c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabStyleStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/TabStyleStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -131,7 +131,7 @@ public void Reset() /// Gets or sets the OneNote tab style string. [Category(@"Visuals")] [Description(@"The OneNote tab style.")] - [DefaultValue(DEFAULT_TAB_STYLE_CUSTOM1)] + [DefaultValue(DEFAULT_TAB_STYLE_ONE_NOTE)] [RefreshProperties(RefreshProperties.All)] public string OneNote { get; set; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/ToastNotificationIconStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/ToastNotificationIconStrings.cs new file mode 100644 index 000000000..d78e4f606 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Converters/ToastNotificationIconStrings.cs @@ -0,0 +1,467 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Exposes the set of strings used within Krypton and that are localizable. + [TypeConverter(typeof(ExpandableObjectConverter))] + public class ToastNotificationIconStrings : GlobalId + { + #region Static Fields + + private const string DEFAULT_APPLICATION = @"Application"; + private const string DEFAULT_ASTERISK = @"Asterisk"; + private const string DEFAULT_CUSTOM = @"Custom"; + private const string DEFAULT_ERROR = @"Error"; + private const string DEFAULT_EXCLAMATION = @"Exclamation"; + private const string DEFAULT_HAND = @"Hand"; + private const string DEFAULT_INFORMATION = @"Information"; + private const string DEFAULT_NONE = @"None"; + private const string DEFAULT_OK = @"Ok"; + private const string DEFAULT_QUESTION = @"Question"; + private const string DEFAULT_SHIELD = @"Shield"; + private const string DEFAULT_STOP = @"Stop"; + private const string DEFAULT_SYSTEM_APPLICATION = @"Application (System)"; + private const string DEFAULT_SYSTEM_ASTERISK = @"Asterisk (System)"; + private const string DEFAULT_SYSTEM_ERROR = @"Error (System)"; + private const string DEFAULT_SYSTEM_EXCLAMATION = @"Exclamation (System)"; + private const string DEFAULT_SYSTEM_HAND = @"Hand (System)"; + private const string DEFAULT_SYSTEM_INFORMATION = @"Information (System)"; + private const string DEFAULT_SYSTEM_QUESTION = @"Question (System)"; + private const string DEFAULT_SYSTEM_STOP = @"Stop (System)"; + private const string DEFAULT_SYSTEM_WARNING = @"Warning (System)"; + private const string DEFAULT_WARNING = @"Warning"; + private const string DEFAULT_WINDOWS_LOGO = @"Windows Logo"; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public ToastNotificationIconStrings() + { + Reset(); + } + + /// Converts to string. + /// A that represents this instance. + public override string ToString() => !IsDefault ? "Modified" : string.Empty; + + #endregion + + #region IsDefault + + [Browsable(false)] + public bool IsDefault => !(ShouldSerializeApplication() || + ShouldSerializeAsterisk() || + ShouldSerializeCustom() || + ShouldSerializeError() || + ShouldSerializeExclamation() || + ShouldSerializeHand() || + ShouldSerializeInformation() || + ShouldSerializeNone() || + ShouldSerializeOk() || + ShouldSerializeQuestion() || + ShouldSerializeShield() || + ShouldSerializeStop() || + ShouldSerializeSystemApplication() || + ShouldSerializeSystemAsterisk() || + ShouldSerializeSystemError() || + ShouldSerializeSystemExclamation() || + ShouldSerializeSystemHand() || + ShouldSerializeSystemInformation() || + ShouldSerializeSystemQuestion() || + ShouldSerializeSystemStop() || + ShouldSerializeSystemWarning() || + ShouldSerializeWarning() || + ShouldSerializeWindowsLogo()); + /*Application.Equals(DEFAULT_APPLICATION) && + Asterisk.Equals(DEFAULT_ASTERISK) && + Custom.Equals(DEFAULT_CUSTOM) && + Error.Equals(DEFAULT_ERROR) && + Exclamation.Equals(DEFAULT_EXCLAMATION) && + Hand.Equals(DEFAULT_HAND) && + Information.Equals(DEFAULT_INFORMATION) && + None.Equals(DEFAULT_NONE) && + Ok.Equals(DEFAULT_OK) && + Question.Equals(DEFAULT_QUESTION) && + Shield.Equals(DEFAULT_SHIELD) && + Stop.Equals(DEFAULT_STOP) && + SystemApplication.Equals(DEFAULT_SYSTEM_APPLICATION) && + SystemAsterisk.Equals(DEFAULT_SYSTEM_ASTERISK) && + SystemError.Equals(DEFAULT_SYSTEM_ERROR) && + SystemExclamation.Equals(DEFAULT_SYSTEM_EXCLAMATION) && + SystemHand.Equals(DEFAULT_SYSTEM_HAND) && + SystemInformation.Equals(DEFAULT_SYSTEM_INFORMATION) && + SystemQuestion.Equals(DEFAULT_SYSTEM_QUESTION) && + SystemStop.Equals(DEFAULT_SYSTEM_STOP) && + SystemWarning.Equals(DEFAULT_SYSTEM_WARNING) && + Warning.Equals(DEFAULT_SYSTEM_WARNING) && + WindowsLogo.Equals(DEFAULT_WINDOWS_LOGO);*/ + + #endregion + + #region Public + + /// Gets or sets the application icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised application icon string.")] + [DefaultValue(DEFAULT_APPLICATION)] + [RefreshProperties(RefreshProperties.All)] + public string Application { get; set; } + + private bool ShouldSerializeApplication() => Application != DEFAULT_APPLICATION; + + public void ResetApplication() => Application = DEFAULT_APPLICATION; + + /// Gets or sets the asterisk icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised asterisk icon string.")] + [DefaultValue(DEFAULT_ASTERISK)] + public string Asterisk { get; set; } + + private bool ShouldSerializeAsterisk() => Asterisk != DEFAULT_ASTERISK; + + public void ResetAsterisk() => Asterisk = DEFAULT_ASTERISK; + + /// Gets or sets the custom icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised custom icon string.")] + [DefaultValue(DEFAULT_CUSTOM)] + public string Custom { get; set; } + + private bool ShouldSerializeCustom() => Custom != DEFAULT_CUSTOM; + + public void ResetCustom() => Custom = DEFAULT_CUSTOM; + + /// Gets or sets the error icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised error icon string.")] + [DefaultValue(DEFAULT_ERROR)] + public string Error { get; set; } + + private bool ShouldSerializeError() => Error != DEFAULT_ERROR; + + public void ResetError() => Error = DEFAULT_ERROR; + + /// Gets or sets the exclamation icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised exclamation icon string.")] + [DefaultValue(DEFAULT_EXCLAMATION)] + public string Exclamation { get; set; } + + private bool ShouldSerializeExclamation() => Exclamation != DEFAULT_EXCLAMATION; + + public void ResetExclamation() => Exclamation = DEFAULT_EXCLAMATION; + + /// Gets or sets the hand icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised hand icon string.")] + [DefaultValue(DEFAULT_HAND)] + public string Hand { get; set; } + + private bool ShouldSerializeHand() => Hand != DEFAULT_HAND; + + public void ResetHand() => Hand = DEFAULT_HAND; + + /// Gets or sets the information icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised information icon string.")] + [DefaultValue(DEFAULT_INFORMATION)] + public string Information { get; set; } + + private bool ShouldSerializeInformation() => Information != DEFAULT_INFORMATION; + + public void ResetInformation() => Information = DEFAULT_INFORMATION; + + /// Gets or sets the none icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised none icon string.")] + [DefaultValue(DEFAULT_NONE)] + public string None { get; set; } + + private bool ShouldSerializeNone() => None != DEFAULT_NONE; + + public void ResetNone() => None = DEFAULT_NONE; + + /// Gets or sets the ok icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised ok icon string.")] + [DefaultValue(DEFAULT_OK)] + public string Ok { get; set; } + + private bool ShouldSerializeOk() => Ok != DEFAULT_OK; + + public void ResetOk() => Ok = DEFAULT_OK; + + /// Gets or sets the question icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised question icon string.")] + [DefaultValue(DEFAULT_QUESTION)] + public string Question { get; set; } + + private bool ShouldSerializeQuestion() => Question != DEFAULT_QUESTION; + + public void ResetQuestion() => Question = DEFAULT_QUESTION; + + /// Gets or sets the shield icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised shield icon string.")] + [DefaultValue(DEFAULT_SHIELD)] + public string Shield { get; set; } + + private bool ShouldSerializeShield() => Shield != DEFAULT_SHIELD; + + public void ResetShield() => Shield = DEFAULT_SHIELD; + + /// Gets or sets the stop icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised stop icon string.")] + [DefaultValue(DEFAULT_STOP)] + public string Stop { get; set; } + + private bool ShouldSerializeStop() => Stop != DEFAULT_STOP; + + public void ResetStop() => Stop = DEFAULT_STOP; + + /// Gets or sets the system application icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system application icon string.")] + [DefaultValue(DEFAULT_SYSTEM_APPLICATION)] + public string SystemApplication { get; set; } + + private bool ShouldSerializeSystemApplication() => SystemApplication != DEFAULT_SYSTEM_APPLICATION; + + public void ResetSystemApplication() => SystemApplication = DEFAULT_SYSTEM_APPLICATION; + + /// Gets or sets the system asterisk icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system asterisk icon string.")] + [DefaultValue(DEFAULT_SYSTEM_ASTERISK)] + public string SystemAsterisk { get; set; } + + private bool ShouldSerializeSystemAsterisk() => SystemAsterisk != DEFAULT_SYSTEM_ASTERISK; + + public void ResetSystemAsterisk() => SystemAsterisk = DEFAULT_SYSTEM_ASTERISK; + + /// Gets or sets the system error icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system error icon string.")] + [DefaultValue(DEFAULT_SYSTEM_ERROR)] + public string SystemError { get; set; } + + private bool ShouldSerializeSystemError() => SystemError != DEFAULT_SYSTEM_ERROR; + + public void ResetSystemError() => SystemError = DEFAULT_SYSTEM_ERROR; + + /// Gets or sets the system exclamation icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system exclamation icon string.")] + [DefaultValue(DEFAULT_SYSTEM_EXCLAMATION)] + public string SystemExclamation { get; set; } + + private bool ShouldSerializeSystemExclamation() => SystemExclamation != DEFAULT_SYSTEM_EXCLAMATION; + + public void ResetSystemExclamation() => SystemExclamation = DEFAULT_SYSTEM_EXCLAMATION; + + /// Gets or sets the system hand icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system hand icon string.")] + [DefaultValue(DEFAULT_SYSTEM_HAND)] + public string SystemHand { get; set; } + + private bool ShouldSerializeSystemHand() => SystemHand != DEFAULT_SYSTEM_HAND; + + public void ResetSystemHand() => SystemHand = DEFAULT_SYSTEM_HAND; + + /// Gets or sets the system information icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system information icon string.")] + [DefaultValue(DEFAULT_SYSTEM_INFORMATION)] + public string SystemInformation { get; set; } + + private bool ShouldSerializeSystemInformation() => SystemInformation != DEFAULT_SYSTEM_INFORMATION; + + public void ResetSystemInformation() => SystemInformation = DEFAULT_SYSTEM_INFORMATION; + + /// Gets or sets the system question icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system question icon string.")] + [DefaultValue(DEFAULT_SYSTEM_QUESTION)] + public string SystemQuestion { get; set; } + + private bool ShouldSerializeSystemQuestion() => SystemQuestion != DEFAULT_SYSTEM_QUESTION; + + public void ResetSystemQuestion() => SystemQuestion = DEFAULT_SYSTEM_QUESTION; + + /// Gets or sets the system stop icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system stop icon string.")] + [DefaultValue(DEFAULT_SYSTEM_STOP)] + public string SystemStop { get; set; } + + private bool ShouldSerializeSystemStop() => SystemStop != DEFAULT_SYSTEM_STOP; + + public void ResetSystemStop() => SystemStop = DEFAULT_SYSTEM_STOP; + + /// Gets or sets the system warning icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised system warning icon string.")] + [DefaultValue(DEFAULT_SYSTEM_WARNING)] + public string SystemWarning { get; set; } + + private bool ShouldSerializeSystemWarning() => SystemWarning != DEFAULT_SYSTEM_WARNING; + + public void ResetSystemWarning() => SystemWarning = DEFAULT_SYSTEM_WARNING; + + /// Gets or sets the warning icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised warning icon string.")] + [DefaultValue(DEFAULT_WARNING)] + public string Warning { get; set; } + + private bool ShouldSerializeWarning() => Warning != DEFAULT_WARNING; + + public void ResetWarning() => Warning = DEFAULT_WARNING; + + /// Gets or sets the Windows logo icon string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Localised Windows logo icon string.")] + [DefaultValue(DEFAULT_WINDOWS_LOGO)] + public string WindowsLogo { get; set; } + + private bool ShouldSerializeWindowsLogo() => WindowsLogo != DEFAULT_WINDOWS_LOGO; + + public void ResetWindowsLogo() => WindowsLogo = DEFAULT_WINDOWS_LOGO; + + #endregion + + #region Implementation + + public void Reset() + { + //Application = DEFAULT_APPLICATION; + + //Asterisk = DEFAULT_ASTERISK; + + //Custom = DEFAULT_CUSTOM; + + //Error = DEFAULT_ERROR; + + //Exclamation = DEFAULT_EXCLAMATION; + + //Hand = DEFAULT_HAND; + + //Information = DEFAULT_INFORMATION; + + //None = DEFAULT_NONE; + + //Ok = DEFAULT_OK; + + //Question = DEFAULT_QUESTION; + + //Shield = DEFAULT_SHIELD; + + //Stop = DEFAULT_STOP; + + //SystemApplication = DEFAULT_SYSTEM_APPLICATION; + + //SystemAsterisk = DEFAULT_SYSTEM_ASTERISK; + + //SystemError = DEFAULT_SYSTEM_ERROR; + + //SystemExclamation = DEFAULT_SYSTEM_EXCLAMATION; + + //SystemHand = DEFAULT_SYSTEM_HAND; + + //SystemInformation = DEFAULT_SYSTEM_INFORMATION; + + //SystemQuestion = DEFAULT_SYSTEM_QUESTION; + + //SystemStop = DEFAULT_SYSTEM_STOP; + + //SystemWarning = DEFAULT_SYSTEM_WARNING; + + //Warning = DEFAULT_WARNING; + + //WindowsLogo = DEFAULT_WINDOWS_LOGO; + + ResetApplication(); + + ResetAsterisk(); + + ResetCustom(); + + ResetError(); + + ResetExclamation(); + + ResetHand(); + + ResetInformation(); + + ResetNone(); + + ResetOk(); + + ResetQuestion(); + + ResetShield(); + + ResetStop(); + + ResetSystemApplication(); + + ResetSystemAsterisk(); + + ResetSystemError(); + + ResetSystemExclamation(); + + ResetSystemHand(); + + ResetSystemInformation(); + + ResetSystemQuestion(); + + ResetSystemStop(); + + ResetSystemWarning(); + + ResetWarning(); + + ResetWindowsLogo(); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/General/CustomToolkitStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/General/CustomToolkitStrings.cs index 306922a0d..241539ab9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/General/CustomToolkitStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/General/CustomToolkitStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -33,6 +33,9 @@ public class CustomToolkitStrings : GlobalId private const string DEFAULT_NO_TO_ALL = @"No t&o All"; // Accelerator key - O private const string DEFAULT_OK_TO_ALL = @"O&k to All"; // Accelerator key - K private const string DEFAULT_RESET = @"&Reset"; // Accelerator key - R + private const string DEFAULT_SYSTEM_INFORMATION = "S&ystem Information"; + private const string DEFAULT_CURRENT_THEME = @"Current Theme"; + private const string DEFAULT_DO_NOT_SHOW_AGAIN = @"&Do not show again"; // Note: The following may not be needed... /*private const string DEFAULT_MORE_DETAILS = "M&ore Details..."; @@ -67,6 +70,7 @@ public CustomToolkitStrings() Apply.Equals(DEFAULT_APPLY) && Back.Equals(DEFAULT_BACK) && Exit.Equals(DEFAULT_EXIT) && + DoNotShowAgain.Equals(DEFAULT_DO_NOT_SHOW_AGAIN) && Finish.Equals(DEFAULT_FINISH) && Next.Equals(DEFAULT_NEXT) && Previous.Equals(DEFAULT_PREVIOUS) && @@ -78,8 +82,11 @@ public CustomToolkitStrings() YesToAll.Equals(DEFAULT_YES_TO_ALL) && NoToAll.Equals(DEFAULT_NO_TO_ALL) && OkToAll.Equals(DEFAULT_OK_TO_ALL) && - Reset.Equals(DEFAULT_RESET); + Reset.Equals(DEFAULT_RESET) && + SystemInformation.Equals(DEFAULT_SYSTEM_INFORMATION) && + CurrentTheme.Equals(DEFAULT_CURRENT_THEME); + /// Resets the values. public void ResetValues() { Apply = DEFAULT_APPLY; @@ -87,6 +94,7 @@ public void ResetValues() Expand = DEFAULT_EXPAND; Apply = DEFAULT_APPLY; Back = DEFAULT_BACK; + DoNotShowAgain = DEFAULT_DO_NOT_SHOW_AGAIN; Exit = DEFAULT_EXIT; Finish = DEFAULT_FINISH; Next = DEFAULT_NEXT; @@ -100,6 +108,8 @@ public void ResetValues() NoToAll = DEFAULT_NO_TO_ALL; OkToAll = DEFAULT_OK_TO_ALL; Reset = DEFAULT_RESET; + SystemInformation = DEFAULT_SYSTEM_INFORMATION; + CurrentTheme = DEFAULT_CURRENT_THEME; } /// Gets or sets the collapse string used in expandable footers. @@ -134,6 +144,15 @@ public void ResetValues() [DefaultValue(DEFAULT_BACK)] public string Back { get; set; } + /// + /// Gets and sets the do not show again string used in custom situations. + /// + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Do not show again string used for custom situations.")] + [DefaultValue(DEFAULT_DO_NOT_SHOW_AGAIN)] + public string DoNotShowAgain { get; set; } + /// /// Gets and sets the Exit string used in custom situations. /// @@ -249,6 +268,19 @@ public void ResetValues() [DefaultValue(DEFAULT_RESET)] public string Reset { get; set; } + /// Gets or sets the system information string used for custom situations. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"System information string used for custom situations.")] + [DefaultValue(DEFAULT_SYSTEM_INFORMATION)] + public string SystemInformation { get; set; } + + /// Gets or sets the current theme string used for custom situations. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Current theme string used for custom situations.")] + [DefaultValue(DEFAULT_CURRENT_THEME)] + public string CurrentTheme { get; set; } #endregion } diff --git a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/General/GeneralRibbonStrings.cs similarity index 68% rename from Source/Krypton Components/Krypton.Ribbon/Palette/RibbonStrings.cs rename to Source/Krypton Components/Krypton.Toolkit/Translations/General/GeneralRibbonStrings.cs index f1b8ef7b7..6d0ff0d9d 100644 --- a/Source/Krypton Components/Krypton.Ribbon/Palette/RibbonStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/General/GeneralRibbonStrings.cs @@ -1,76 +1,66 @@ #region BSD License /* - * - * Original BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) - * © Component Factory Pty Ltd, 2006 - 2016, All rights reserved. - * + * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - * Modified: Monday 12th April, 2021 @ 18:00 GMT + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. * */ #endregion -namespace Krypton.Ribbon +namespace Krypton.Toolkit { - /// - /// Storage for string related properties. - /// - public class RibbonStrings : Storage + /// Exposes a general set of strings that are used within the Krypton Ribbon, and are localisable. + /// + [TypeConverter(typeof(ExpandableObjectConverter))] + public class GeneralRibbonStrings : GlobalId { - #region Static Fields - - private const string DEFAULT_APP_BUTTON_KEY_TIP = "F"; - private const string DEFAULT_CUSTOMIZE_QUICK_ACCESS_TOOLBAR = "Customize Quick Access Toolbar"; - private const string DEFAULT_MINIMIZE = "Mi&nimize the Ribbon"; - private const string DEFAULT_MORE_COLORS = "&More Colors..."; - private const string DEFAULT_NO_COLOR = "&No Color"; - private const string DEFAULT_RECENT_DOCUMENTS = "Recent Documents"; - private const string DEFAULT_RECENT_COLORS = "Recent Colors"; - private const string DEFAULT_SHOW_QAT_ABOVE_RIBBON = "&Show Quick Access Toolbar Above the Ribbon"; - private const string DEFAULT_SHOW_QAT_BELOW_RIBBON = "&Show Quick Access Toolbar Below the Ribbon"; - private const string DEFAULT_SHOW_ABOVE_RIBBON = "&Show Above the Ribbon"; - private const string DEFAULT_SHOW_BELOW_RIBBON = "&Show Below the Ribbon"; - private const string DEFAULT_STANDARD_COLORS = "Standard Colors"; - private const string DEFAULT_THEME_COLORS = "Theme Colors"; + #region Static Values + + private const string DEFAULT_APPLICATION_BUTTON_TEXT = @"File"; + private const string DEFAULT_APPLICATION_BUTTON_KEY_TIP = @"F"; + private const string DEFAULT_CUSTOMIZE_QUICK_ACCESS_TOOLBAR = @"Customize Quick Access Toolbar"; + private const string DEFAULT_MINIMIZE = @"Mi&nimize the Ribbon"; + private const string DEFAULT_MORE_COLORS = @"&More Colors..."; + private const string DEFAULT_NO_COLOR = @"&No Color"; + private const string DEFAULT_RECENT_DOCUMENTS = @"Recent Documents"; + private const string DEFAULT_RECENT_COLORS = @"Recent Colors"; + private const string DEFAULT_SHOW_QAT_ABOVE_RIBBON = @"&Show Quick Access Toolbar Above the Ribbon"; + private const string DEFAULT_SHOW_QAT_BELOW_RIBBON = @"&Show Quick Access Toolbar Below the Ribbon"; + private const string DEFAULT_SHOW_ABOVE_RIBBON = @"&Show Above the Ribbon"; + private const string DEFAULT_SHOW_BELOW_RIBBON = @"&Show Below the Ribbon"; + private const string DEFAULT_STANDARD_COLORS = @"Standard Colors"; + private const string DEFAULT_THEME_COLORS = @"Theme Colors"; #endregion #region Instance Fields + private string _appButtonKeyTip; #endregion #region Identity - /// - /// Initialize a new instance of the RibbonStrings class. - /// - public RibbonStrings() + + /// Initializes a new instance of the class. + public GeneralRibbonStrings() { - // Default values - _appButtonKeyTip = DEFAULT_APP_BUTTON_KEY_TIP; - CustomizeQuickAccessToolbar = DEFAULT_CUSTOMIZE_QUICK_ACCESS_TOOLBAR; - Minimize = DEFAULT_MINIMIZE; - MoreColors = DEFAULT_MORE_COLORS; - NoColor = DEFAULT_NO_COLOR; - RecentDocuments = DEFAULT_RECENT_DOCUMENTS; - RecentColors = DEFAULT_RECENT_COLORS; - ShowAboveRibbon = DEFAULT_SHOW_ABOVE_RIBBON; - ShowBelowRibbon = DEFAULT_SHOW_BELOW_RIBBON; - ShowQATAboveRibbon = DEFAULT_SHOW_QAT_ABOVE_RIBBON; - ShowQATBelowRibbon = DEFAULT_SHOW_QAT_BELOW_RIBBON; - StandardColors = DEFAULT_STANDARD_COLORS; - ThemeColors = DEFAULT_THEME_COLORS; + Reset(); } + + /// Converts to string. + /// A that represents this instance. + public override string ToString() => !IsDefault ? "Modified" : string.Empty; + #endregion #region IsDefault + /// /// Gets a value indicating if all values are default. /// [Browsable(false)] - public override bool IsDefault => AppButtonKeyTip.Equals(DEFAULT_APP_BUTTON_KEY_TIP) && + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public bool IsDefault => AppButtonKeyTip.Equals(DEFAULT_APPLICATION_BUTTON_KEY_TIP) && CustomizeQuickAccessToolbar.Equals(DEFAULT_CUSTOMIZE_QUICK_ACCESS_TOOLBAR) && Minimize.Equals(DEFAULT_MINIMIZE) && MoreColors.Equals(DEFAULT_MORE_COLORS) && @@ -82,18 +72,20 @@ public RibbonStrings() ShowQATAboveRibbon.Equals(DEFAULT_SHOW_QAT_ABOVE_RIBBON) && ShowQATBelowRibbon.Equals(DEFAULT_SHOW_QAT_BELOW_RIBBON) && StandardColors.Equals(DEFAULT_STANDARD_COLORS) && - ThemeColors.Equals(DEFAULT_THEME_COLORS); + ThemeColors.Equals(DEFAULT_THEME_COLORS) && + AppButtonText.Equals(DEFAULT_APPLICATION_BUTTON_TEXT); #endregion - #region AppButtonKeyTip + #region Public + /// /// Gets and sets the application button key tip string. /// [Localizable(true)] [Category(@"Values")] [Description(@"Application button key tip string.")] - [DefaultValue("F")] + [DefaultValue(DEFAULT_APPLICATION_BUTTON_KEY_TIP)] [RefreshProperties(RefreshProperties.All)] public string AppButtonKeyTip { @@ -108,162 +100,173 @@ public string AppButtonKeyTip } } } - #endregion - #region CustomizeQuickAccessToolbar /// /// Gets and sets the heading for the quick access toolbar menu. /// [Localizable(true)] [Category(@"Values")] [Description(@"Heading for quick access toolbar menu.")] - [DefaultValue("Customize Quick Access Toolbar")] + [DefaultValue(DEFAULT_CUSTOMIZE_QUICK_ACCESS_TOOLBAR)] [RefreshProperties(RefreshProperties.All)] public string CustomizeQuickAccessToolbar { get; set; } - #endregion - - #region Minimize /// /// Gets and sets the menu string for minimizing the ribbon option. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Menu string for minimizing the ribbon option.")] - [DefaultValue("Mi&nimize the Ribbon")] + [DefaultValue(DEFAULT_MINIMIZE)] [RefreshProperties(RefreshProperties.All)] public string Minimize { get; set; } - #endregion - - #region MoreColors /// /// Gets and sets the menu string for a 'more colors' entry. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Menu string for a 'more colors' entry.")] - [DefaultValue("&More Colors...")] + [DefaultValue(DEFAULT_MORE_COLORS)] [RefreshProperties(RefreshProperties.All)] public string MoreColors { get; set; } - #endregion - - #region NoColor /// /// Gets and sets the menu string for a 'no color' entry. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Menu string for a 'no color' entry.")] - [DefaultValue("&No Color")] + [DefaultValue(DEFAULT_NO_COLOR)] [RefreshProperties(RefreshProperties.All)] public string NoColor { get; set; } - #endregion - - #region RecentDocuments /// /// Gets and sets the title for the recent documents section of the application menu. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Title for recent documents section of the application menu.")] - [DefaultValue("Recent Documents")] + [DefaultValue(DEFAULT_RECENT_DOCUMENTS)] [RefreshProperties(RefreshProperties.All)] public string RecentDocuments { get; set; } - #endregion - - #region RecentColors /// /// Gets and sets the title for the recent colors section of the color button menu. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Title for recent colors section of the color button menu.")] - [DefaultValue("Recent Colors")] + [DefaultValue(DEFAULT_RECENT_COLORS)] [RefreshProperties(RefreshProperties.All)] public string RecentColors { get; set; } - #endregion - - #region ShowAboveRibbon /// /// Gets and sets the menu string for showing above the ribbon. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Menu string for showing above the ribbon.")] - [DefaultValue("&Show Above the Ribbon")] + [DefaultValue(DEFAULT_SHOW_ABOVE_RIBBON)] [RefreshProperties(RefreshProperties.All)] public string ShowAboveRibbon { get; set; } - #endregion - - #region ShowBelowRibbon /// /// Gets and sets the menu string for showing below the ribbon. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Menu string for showing below the ribbon.")] - [DefaultValue("&Show Below the Ribbon")] + [DefaultValue(DEFAULT_SHOW_BELOW_RIBBON)] [RefreshProperties(RefreshProperties.All)] public string ShowBelowRibbon { get; set; } - #endregion - - #region ShowQATAboveRibbon /// /// Gets and sets the menu string for showing QAT above the ribbon. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Menu string for showing QAT above the ribbon.")] - [DefaultValue("&Show Quick Access Toolbar Above the Ribbon")] + [DefaultValue(DEFAULT_SHOW_QAT_ABOVE_RIBBON)] [RefreshProperties(RefreshProperties.All)] public string ShowQATAboveRibbon { get; set; } - #endregion - - #region ShowQATBelowRibbon /// /// Gets and sets the menu string for showing QAT below the ribbon. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Menu string for showing QAT below the ribbon.")] - [DefaultValue("&Show Quick Access Toolbar Below the Ribbon")] + [DefaultValue(DEFAULT_SHOW_QAT_BELOW_RIBBON)] [RefreshProperties(RefreshProperties.All)] public string ShowQATBelowRibbon { get; set; } - #endregion - - #region StandardColors /// /// Gets and sets the title for the standard colors section of the application menu. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Title for standard colors section of the color button menu.")] - [DefaultValue("Standard Colors")] + [DefaultValue(DEFAULT_STANDARD_COLORS)] [RefreshProperties(RefreshProperties.All)] public string StandardColors { get; set; } - #endregion - - #region ThemeColors /// /// Gets and sets the title for the theme colors section of the application menu. /// [Localizable(true)] [Category(@"Visuals")] [Description(@"Title for theme colors section of the color button menu.")] - [DefaultValue("Theme Colors")] + [DefaultValue(DEFAULT_THEME_COLORS)] [RefreshProperties(RefreshProperties.All)] public string ThemeColors { get; set; } + /// + /// Gets and sets the button text for the app button. + /// + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Button text for the AppButton.")] + [DefaultValue(DEFAULT_APPLICATION_BUTTON_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string AppButtonText { get; set; } + + #endregion + + #region Implementation + + /// Resets this instance. + public void Reset() + { + AppButtonKeyTip = DEFAULT_APPLICATION_BUTTON_KEY_TIP; + + AppButtonText = DEFAULT_APPLICATION_BUTTON_TEXT; + + CustomizeQuickAccessToolbar = DEFAULT_CUSTOMIZE_QUICK_ACCESS_TOOLBAR; + + Minimize = DEFAULT_MINIMIZE; + + MoreColors = DEFAULT_MORE_COLORS; + + NoColor = DEFAULT_NO_COLOR; + + RecentColors = DEFAULT_RECENT_COLORS; + + RecentDocuments = DEFAULT_RECENT_DOCUMENTS; + + ShowAboveRibbon = DEFAULT_SHOW_ABOVE_RIBBON; + + ShowBelowRibbon = DEFAULT_SHOW_BELOW_RIBBON; + + ShowQATAboveRibbon = DEFAULT_SHOW_QAT_ABOVE_RIBBON; + + ShowQATBelowRibbon = DEFAULT_SHOW_QAT_BELOW_RIBBON; + + StandardColors = DEFAULT_STANDARD_COLORS; + + ThemeColors = DEFAULT_THEME_COLORS; + } + #endregion } -} +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/General/GeneralToolkitStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/General/GeneralToolkitStrings.cs index 03e4f7b99..be76818c0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/General/GeneralToolkitStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/General/GeneralToolkitStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonAboutBoxBasicApplicationInformationStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonAboutBoxBasicApplicationInformationStrings.cs new file mode 100644 index 000000000..0256056c4 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonAboutBoxBasicApplicationInformationStrings.cs @@ -0,0 +1,204 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonAboutBoxBasicApplicationInformationStrings : GlobalId + { + #region Static Fields + + private const string DEFAULT_APPLICATION_NAME = @"Application Name"; + + private const string DEFAULT_APPLICATION_BASE = @"Application Base"; + + private const string DEFAULT_CACHE_PATH = @"Cache Path"; + + private const string DEFAULT_CONFIGURATION_FILE = @"Configuration File"; + + private const string DEFAULT_DYNAMIC_BASE = @"Dynamic Base"; + + private const string DEFAULT_FRIENDLY_NAME = @"Friendly Name"; + + private const string DEFAULT_LICENSE_FILE = @"License File"; + + private const string DEFAULT_PRIVATE_BIN_PATH = @"Private Bin Path"; + + private const string DEFAULT_SHADOW_COPY_DIRECTORIES = @"Shadow Copy Directories"; + + private const string DEFAULT_ENTRY_ASSEMBLY = @"Entry Assembly"; + + private const string DEFAULT_EXECUTING_ASSEMBLY = @"Executing Assembly"; + + private const string DEFAULT_CALLING_ASSEMBLY = @"Calling Assembly"; + + #endregion + + #region Identity + + public KryptonAboutBoxBasicApplicationInformationStrings() + { + Reset(); + } + + + /// + public override string ToString() => !IsDefault ? "Modified" : string.Empty; + + #endregion + + #region Public + + /// Gets or sets the name of the application string. + /// The name of the application string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The application name string.")] + [DefaultValue(DEFAULT_APPLICATION_NAME)] + public string ApplicationName { get; set; } + + /// Gets or sets the application base string. + /// The application base string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The application base string.")] + [DefaultValue(DEFAULT_APPLICATION_BASE)] + public string ApplicationBase { get; set; } + + /// Gets or sets the cache path string. + /// The cache path string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The cache path string.")] + [DefaultValue(DEFAULT_CACHE_PATH)] + public string CachePath { get; set; } + + /// Gets or sets the configuration file string. + /// The configuration file string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The configuration file string.")] + [DefaultValue(DEFAULT_CONFIGURATION_FILE)] + public string ConfigurationFile { get; set; } + + /// Gets or sets the dynamic base string. + /// The dynamic base string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The dynamic base string.")] + [DefaultValue(DEFAULT_DYNAMIC_BASE)] + public string DynamicBase { get; set; } + + /// Gets or sets the friendly name string. + /// The friendly name string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The friendly name string.")] + [DefaultValue(DEFAULT_FRIENDLY_NAME)] + public string FriendlyName { get; set; } + + /// Gets or sets the license file string. + /// The license file string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The license file string.")] + [DefaultValue(DEFAULT_LICENSE_FILE)] + public string LicenseFile { get; set; } + + /// Gets or sets the private bin path string. + /// The private bin path string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The private bin path string.")] + [DefaultValue(DEFAULT_PRIVATE_BIN_PATH)] + public string PrivateBinPath { get; set; } + + /// Gets or sets the shadow copy directories string. + /// The shadow copy directories string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The shadow copy directories string.")] + [DefaultValue(DEFAULT_SHADOW_COPY_DIRECTORIES)] + public string ShadowCopyDirectories { get; set; } + + /// Gets or sets the entry assembly string. + /// The entry assembly string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The entry assembly string.")] + [DefaultValue(DEFAULT_ENTRY_ASSEMBLY)] + public string EntryAssembly { get; set; } + + /// Gets or sets the executing assembly string. + /// The executing assembly string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The executing assembly string.")] + [DefaultValue(DEFAULT_EXECUTING_ASSEMBLY)] + public string ExecutingAssembly { get; set; } + + /// Gets or sets the calling assembly string. + /// The calling assembly string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The calling assembly string.")] + [DefaultValue(DEFAULT_CALLING_ASSEMBLY)] + public string CallingAssembly { get; set; } + + #endregion + + #region Implementation + + /// Gets a value indicating whether this instance is default. + /// true if this instance is default; otherwise, false. + [Browsable(false)] + public bool IsDefault => ApplicationBase.Equals(DEFAULT_APPLICATION_BASE) && + ApplicationName.Equals(DEFAULT_APPLICATION_NAME) && + CachePath.Equals(DEFAULT_CACHE_PATH) && + CallingAssembly.Equals(DEFAULT_CALLING_ASSEMBLY) && + ConfigurationFile.Equals(DEFAULT_CONFIGURATION_FILE) && + DynamicBase.Equals(DEFAULT_DYNAMIC_BASE) && + FriendlyName.Equals(DEFAULT_FRIENDLY_NAME) && + EntryAssembly.Equals(DEFAULT_ENTRY_ASSEMBLY) && + ExecutingAssembly.Equals(DEFAULT_EXECUTING_ASSEMBLY) && + LicenseFile.Equals(DEFAULT_LICENSE_FILE) && + PrivateBinPath.Equals(DEFAULT_PRIVATE_BIN_PATH) && + ShadowCopyDirectories.Equals(DEFAULT_SHADOW_COPY_DIRECTORIES); + + /// Resets the strings. + public void Reset() + { + ApplicationBase = DEFAULT_APPLICATION_BASE; + + ApplicationName = DEFAULT_APPLICATION_NAME; + + CachePath = DEFAULT_CACHE_PATH; + + CallingAssembly = DEFAULT_CALLING_ASSEMBLY; + + ConfigurationFile = DEFAULT_CONFIGURATION_FILE; + + DynamicBase = DEFAULT_DYNAMIC_BASE; + + FriendlyName = DEFAULT_FRIENDLY_NAME; + + EntryAssembly = DEFAULT_ENTRY_ASSEMBLY; + + ExecutingAssembly = DEFAULT_EXECUTING_ASSEMBLY; + + LicenseFile = DEFAULT_LICENSE_FILE; + + PrivateBinPath = DEFAULT_PRIVATE_BIN_PATH; + + ShadowCopyDirectories = DEFAULT_SHADOW_COPY_DIRECTORIES; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonAboutBoxStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonAboutBoxStrings.cs new file mode 100644 index 000000000..a379e3ade --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonAboutBoxStrings.cs @@ -0,0 +1,189 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonAboutBoxStrings : GlobalId + { + #region Static Strings + + private const string DEFAULT_ABOUT = @"About"; + + private const string DEFAULT_TITLE = @"Title"; + + private const string DEFAULT_COPYRIGHT = @"Copyright"; + + private const string DEFAULT_DESCRIPTION = @"Description"; + + private const string DEFAULT_COMPANY = @"Company"; + + private const string DEFAULT_PRODUCT = @"Product"; + + private const string DEFAULT_TRADE_MARK = @"Trademark"; + + private const string DEFAULT_VERSION = @"Version"; + + private const string DEFAULT_BUILD_DATE = @"Build Date"; + + private const string DEFAULT_IMAGE_RUNTIME_VERSION = @"Image Runtime Version"; + + private const string DEFAULT_LOADED_FROM_GLOBAL_ASSEMBLY_CACHE = @"Loaded from GAC"; + + #endregion + + #region Identity + + public KryptonAboutBoxStrings() + { + Reset(); + } + + public override string ToString() => !IsDefault ? "Modified" : string.Empty; + + #endregion + + #region Public + + /// Gets or sets the about string. + /// The about string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'About' string.")] + [DefaultValue(DEFAULT_ABOUT)] + public string About { get; set; } + + /// Gets or sets the 'title' label string. + /// The 'title' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Title' label string.")] + [DefaultValue(DEFAULT_TITLE)] + public string Title { get; set; } + + /// Gets or sets the 'copyright' label string. + /// The 'copyright' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Copyright' label string.")] + [DefaultValue(DEFAULT_COPYRIGHT)] + public string Copyright { get; set; } + + /// Gets or sets the 'description' label string. + /// The 'description' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Description' label string.")] + [DefaultValue(DEFAULT_DESCRIPTION)] + public string Description { get; set; } + + /// Gets or sets the 'company' label string. + /// The 'company' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Company' label string.")] + [DefaultValue(DEFAULT_COMPANY)] + public string Company { get; set; } + + /// Gets or sets the 'product' label string. + /// The 'product' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Product' label string.")] + [DefaultValue(DEFAULT_PRODUCT)] + public string Product { get; set; } + + /// Gets or sets the 'trademark' label string. + /// The 'trademark' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Trademark' label string.")] + [DefaultValue(DEFAULT_TRADE_MARK)] + public string Trademark { get; set; } + + /// Gets or sets the 'version' label string. + /// The 'version' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Version' label string.")] + [DefaultValue(DEFAULT_VERSION)] + public string Version { get; set; } + + /// Gets or sets the 'build date' label string. + /// The 'build date' label string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The about box 'Build Date' label string.")] + [DefaultValue(DEFAULT_BUILD_DATE)] + public string BuildDate { get; set; } + + /// Gets or sets the image runtime version string. + /// The image runtime version string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The image runtime version string.")] + [DefaultValue(DEFAULT_IMAGE_RUNTIME_VERSION)] + public string ImageRuntimeVersion { get; set; } + + /// Gets or sets the loaded from global assembly cache string. + /// The loaded from global assembly cache string. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The loaded from global assembly cache string.")] + [DefaultValue(DEFAULT_LOADED_FROM_GLOBAL_ASSEMBLY_CACHE)] + public string LoadedFromGlobalAssemblyCache { get; set; } + + #endregion + + #region Implementation + + /// Gets a value indicating whether this instance is default. + /// true if this instance is default; otherwise, false. + [Browsable(false)] + public bool IsDefault => About.Equals(DEFAULT_ABOUT) && + Title.Equals(DEFAULT_TITLE) && + Copyright.Equals(DEFAULT_COPYRIGHT) && + Description.Equals(DEFAULT_DESCRIPTION) && + Company.Equals(DEFAULT_COMPANY) && + Product.Equals(DEFAULT_PRODUCT) && + Trademark.Equals(DEFAULT_TRADE_MARK) && + Version.Equals(DEFAULT_VERSION) && + BuildDate.Equals(DEFAULT_BUILD_DATE) && + ImageRuntimeVersion.Equals(DEFAULT_IMAGE_RUNTIME_VERSION) && + LoadedFromGlobalAssemblyCache.Equals(DEFAULT_LOADED_FROM_GLOBAL_ASSEMBLY_CACHE); + + /// Resets the strings. + public void Reset() + { + About = DEFAULT_ABOUT; + + Title = DEFAULT_TITLE; + + Copyright = DEFAULT_COPYRIGHT; + + Description = DEFAULT_DESCRIPTION; + + Company = DEFAULT_COMPANY; + + Product = DEFAULT_PRODUCT; + + Trademark = DEFAULT_TRADE_MARK; + + Version = DEFAULT_VERSION; + + BuildDate = DEFAULT_BUILD_DATE; + + ImageRuntimeVersion = DEFAULT_IMAGE_RUNTIME_VERSION; + + LoadedFromGlobalAssemblyCache = DEFAULT_LOADED_FROM_GLOBAL_ASSEMBLY_CACHE; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonMiscellaneousThemeStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonMiscellaneousThemeStrings.cs index 04ab646e8..3c56b27f4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonMiscellaneousThemeStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonMiscellaneousThemeStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -18,6 +18,7 @@ public class KryptonMiscellaneousThemeStrings : GlobalId private const string DEFAULT_THEME_BROWSER_DESCRIPTION = @"Select a theme from the list below:"; private const string DEFAULT_IMPORT_THEME_TEXT = @"I&mport..."; private const string DEFAULT_SILENT_TEXT = @"&Silent"; + private const string DEFAULT_UPGRADE_TEXT = @"Up&grade"; #endregion @@ -67,6 +68,14 @@ public KryptonMiscellaneousThemeStrings() [DefaultValue(DEFAULT_SILENT_TEXT)] public string Silent { get; set; } + /// Gets or sets the upgrade text. + /// The upgrade text. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"The upgrade text.")] + [DefaultValue(DEFAULT_UPGRADE_TEXT)] + public string Upgrade { get; set; } + #endregion #region Implementation @@ -75,7 +84,8 @@ public KryptonMiscellaneousThemeStrings() public bool IsDefault => ThemeBrowserDescription.Equals(DEFAULT_THEME_BROWSER_DESCRIPTION) && ThemeBrowserWindowTitle.Equals(DEFAULT_THEME_BROWSER_WINDOW_TITLE) && Import.Equals(DEFAULT_IMPORT_THEME_TEXT) && - Silent.Equals(DEFAULT_SILENT_TEXT); + Silent.Equals(DEFAULT_SILENT_TEXT) && + Upgrade.Equals(DEFAULT_UPGRADE_TEXT); public void Reset() { @@ -86,6 +96,8 @@ public void Reset() Import = DEFAULT_IMPORT_THEME_TEXT; Silent = DEFAULT_SILENT_TEXT; + + Upgrade = DEFAULT_UPGRADE_TEXT; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonModalWaitDialogStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonModalWaitDialogStrings.cs new file mode 100644 index 000000000..20b6a383f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonModalWaitDialogStrings.cs @@ -0,0 +1,23 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonModalWaitDialogStrings : GlobalId + { + #region Static Strings + + private const string DEFAULT_TITLE = @"Processing"; + + private const string DEFAULT_TEXT = @"Please wait for operation to complete..."; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonOutlookGridStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonOutlookGridStrings.cs new file mode 100644 index 000000000..3b5490f53 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonOutlookGridStrings.cs @@ -0,0 +1,1362 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +// ReSharper disable InconsistentNaming +namespace Krypton.Toolkit +{ + /// Exposes a set of localised strings, used by and its components. + /// + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonOutlookGridStrings : GlobalId + { + #region Static Fields + + #region OutlookGrid Component + + private const string DEFAULT_AFTER_NEXT_MONTH = @"After next month"; + + private const string DEFAULT_ALPHABETIC_GROUP_TEXT = @"Alphabetic"; + + private const string DEFAULT_BAR = @"Data Bars"; + + private const string DEFAULT_BEFORE_PREVIOUS_MONTH = @"Before previous month"; + + private const string DEFAULT_BEST_FIT_ALL = @"Best fit (all columns)"; + + private const string DEFAULT_BEST_FIT = @"Best fit"; + + private const string DEFAULT_CANCEL = @"Cancel"; + + private const string DEFAULT_CLEAR_GROUPING = @"Clear grouping"; + + private const string DEFAULT_CLEAR_RULES = @"Clear rules..."; + + private const string DEFAULT_CLEAR_SORTING = @"Clear sorting"; + + private const string DEFAULT_COLLAPSE = @"Collapse"; + + private const string DEFAULT_COLUMNS = @"Columns"; + + private const string DEFAULT_CONDITIONAL_FORMATTING = @"Conditional formatting"; + + private const string DEFAULT_CUSTOM_THREE_DOTS = @"Custom..."; + + private const string DEFAULT_DATE_GROUP_TEXT = @"Date"; + + private const string DEFAULT_DAY = @"Day"; + + private const string DEFAULT_DRAG_COLUMN_TO_GROUP = @"Drag a column header here to group by that column"; + + private const string DEFAULT_EARLIER_DURING_THIS_MONTH = @"Earlier during this month"; + + private const string DEFAULT_EARLIER_THIS_YEAR = @"Earlier this year"; + + private const string DEFAULT_EXPAND = @"Expand"; + + private const string DEFAULT_FULL_COLLAPSE = @"Full collapse"; + + private const string DEFAULT_FULL_EXPAND = @"Full expand"; + + private const string DEFAULT_GRADIENT_FILL = @"Gradient Fill"; + + private const string DEFAULT_GROUP = @"Group by this column"; + + private const string DEFAULT_GROUP_INTERVAL = @"Group interval"; + + private const string DEFAULT_HIDE_GROUP_BOX = @"Hide GroupBox"; + + private const string DEFAULT_IN_THREE_WEEKS = @"In three weeks"; + + private const string DEFAULT_IN_TWO_WEEKS = @"In two weeks"; + + private const string DEFAULT_LATER_DURING_THIS_MONTH = @"Later during this month"; + + private const string DEFAULT_MONTH = @"Month"; + + private const string DEFAULT_NEXT_MONTH = @"Next month"; + + private const string DEFAULT_NEXT_WEEK = @"Next week"; + + private const string DEFAULT_NO_DATE = @"No date"; + + private const string DEFAULT_OLDER = @"Older"; + + private const string DEFAULT_ONE_ITEM = @"1 item"; + + private const string DEFAULT_OTHER = @"Other"; + + private const string DEFAULT_PALETTE_CUSTOM = @"Custom..."; + + private const string DEFAULT_PALETTE_CUSTOM_HEADING = @"Custom palettes"; + + private const string DEFAULT_PREVIOUS_MONTH = @"Previous month"; + + private const string DEFAULT_PREVIOUS_WEEK = @"Previous week"; + + private const string DEFAULT_PREVIOUS_YEAR = @"Previous year"; + + private const string DEFAULT_QUARTER_ONE = @"Q1"; + + private const string DEFAULT_QUARTER_TWO = @"Q2"; + + private const string DEFAULT_QUARTER_THREE = @"Q3"; + + private const string DEFAULT_QUARTER_FOUR = @"Q4"; + + private const string DEFAULT_QUARTER = @"Quarter"; + + private const string DEFAULT_SHOW_GROUP_BOX = @"Show GroupBox"; + + private const string DEFAULT_SMART = @"Smart"; + + private const string DEFAULT_SOLID_FILL = @"Solid Fill"; + + private const string DEFAULT_SORT_ASCENDING = @"Sort ascending"; + + private const string DEFAULT_SORT_BY_SUMMARY_COUNT = @"Sort by summary count"; + + private const string DEFAULT_SORT_DESCENDING = @"Sort descending"; + + private const string DEFAULT_THREE_COLORS_RANGE = @"Three Color Scale"; + + private const string DEFAULT_THREE_WEEKS_AGO = @"Three weeks ago"; + + private const string DEFAULT_TODAY = @"Today"; + + private const string DEFAULT_TOMORROW = @"Tomorrow"; + + private const string DEFAULT_TWO_COLORS_RANGE = @"Two Color Scale"; + + private const string DEFAULT_TWO_WEEKS_AGO = @"Two weeks ago"; + + private const string DEFAULT_UNGROUP = @"Ungroup"; + + private const string DEFAULT_UNKNOWN = @"Unknown"; + + private const string DEFAULT_NUMBER_OF_ITEMS = @" items"; + + private const string DEFAULT_YEAR = @"Year"; + + private const string DEFAULT_YEAR_GROUP_TEXT = @"Year"; + + private const string DEFAULT_YESTERDAY = @"Yesterday"; + + private const string DEFAULT_MONDAY = @"Monday"; + + private const string DEFAULT_TUESDAY = @"Tuesday"; + + private const string DEFAULT_WEDNESDAY = @"Wednesday"; + + private const string DEFAULT_THURSDAY = @"Thursday"; + + private const string DEFAULT_FRIDAY = @"Friday"; + + private const string DEFAULT_SATURDAY = @"Saturday"; + + private const string DEFAULT_SUNDAY = @"Sunday"; + + #endregion + + #region Custom Format Window + + private const string DEFAULT_CUSTOM_FORMAT_WINDOW_TITLE = @"Custom Rule"; + + private const string DEFAULT_CUSTOM_FORMAT_FORMAT = @"Format"; + + private const string DEFAULT_CUSTOM_FORMAT_PREVIEW = @"Preview"; + + private const string DEFAULT_CUSTOM_FORMAT_MINIMUM_COLOR = @"Minimum Color"; + + private const string DEFAULT_CUSTOM_FORMAT_INTERMEDIATE_COLOR = @"Intermediate Color"; + + private const string DEFAULT_CUSTOM_FORMAT_MAXIMUM_COLOR = @"Maximum Color"; + + private const string DEFAULT_CUSTOM_FORMAT_FILL = @"Fill"; + + #endregion + + #region XML Nodes + + private const string DEFAULT_NODE_CONDITION_TEXT = @"Condition"; + + private const string DEFAULT_NODE_COLUMN_NAME_TEXT = @"ColumnName"; + + private const string DEFAULT_NODE_FORMAT_TYPE_TEXT = @"FormatType"; + + private const string DEFAULT_NODE_FORMAT_PARAMS_TEXT = @"FormatParams"; + + #endregion + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonOutlookGridStrings() + { + Reset(); + } + + /// Converts to string. + /// A that represents this instance. + public override string ToString() => !IsDefault ? "Modified" : string.Empty; + + #endregion + + #region IsDefault + + [Browsable(false)] + public bool IsDefault => // OutlookGrid Component + AfterNextMonth.Equals(DEFAULT_AFTER_NEXT_MONTH) && + AlphabeticGroupText.Equals(DEFAULT_ALPHABETIC_GROUP_TEXT) && + Bar.Equals(DEFAULT_BAR) && + BeforePreviousMonth.Equals(DEFAULT_BEFORE_PREVIOUS_MONTH) && + BestFitAll.Equals(DEFAULT_BEST_FIT_ALL) && + BestFit.Equals(DEFAULT_BEST_FIT) && + ClearGrouping.Equals(DEFAULT_CLEAR_GROUPING) && + ClearRules.Equals(DEFAULT_CLEAR_RULES) && + ClearSorting.Equals(DEFAULT_CLEAR_SORTING) && + Collapse.Equals(DEFAULT_COLLAPSE) && + Columns.Equals(DEFAULT_COLUMNS) && + ConditionalFormatting.Equals(DEFAULT_CONDITIONAL_FORMATTING) && + CustomThreeDots.Equals(DEFAULT_CUSTOM_THREE_DOTS) && + DateGroupText.Equals(DEFAULT_DATE_GROUP_TEXT) && + Day.Equals(DEFAULT_DAY) && + DragColumnToGroup.Equals(DEFAULT_DRAG_COLUMN_TO_GROUP) && + EarlierDuringThisMonth.Equals(DEFAULT_EARLIER_DURING_THIS_MONTH) && + EarlierDuringThisYear.Equals(DEFAULT_EARLIER_THIS_YEAR) && + Expand.Equals(DEFAULT_EXPAND) && + FullCollapse.Equals(DEFAULT_FULL_COLLAPSE) && + FullExpand.Equals(DEFAULT_FULL_EXPAND) && + GradientFill.Equals(DEFAULT_GRADIENT_FILL) && + Group.Equals(DEFAULT_GROUP) && + GroupInterval.Equals(DEFAULT_GROUP_INTERVAL) && + HideGroupBox.Equals(DEFAULT_HIDE_GROUP_BOX) && + InThreeWeeks.Equals(DEFAULT_IN_THREE_WEEKS) && + InTwoWeeks.Equals(DEFAULT_IN_TWO_WEEKS) && + LaterDuringThisMonth.Equals(DEFAULT_LATER_DURING_THIS_MONTH) && + Month.Equals(DEFAULT_MONTH) && + NextMonth.Equals(DEFAULT_NEXT_MONTH) && + NextWeek.Equals(DEFAULT_NEXT_WEEK) && + NoDate.Equals(DEFAULT_NO_DATE) && + Older.Equals(DEFAULT_OLDER) && + OneItem.Equals(DEFAULT_ONE_ITEM) && + Other.Equals(DEFAULT_OTHER) && + PaletteCustom.Equals(DEFAULT_PALETTE_CUSTOM) && + PaletteCustomHeading.Equals(DEFAULT_PALETTE_CUSTOM_HEADING) && + PreviousMonth.Equals(DEFAULT_PREVIOUS_MONTH) && + PreviousWeek.Equals(DEFAULT_PREVIOUS_WEEK) && + PreviousYear.Equals(DEFAULT_PREVIOUS_YEAR) && + QuarterOne.Equals(DEFAULT_QUARTER_ONE) && + QuarterTwo.Equals(DEFAULT_QUARTER_TWO) && + QuarterThree.Equals(DEFAULT_QUARTER_THREE) && + QuarterFour.Equals(DEFAULT_QUARTER_FOUR) && + Quarter.Equals(DEFAULT_QUARTER) && + ShowGroupBox.Equals(DEFAULT_SHOW_GROUP_BOX) && + Smart.Equals(DEFAULT_SMART) && + SolidFill.Equals(DEFAULT_SOLID_FILL) && + SortAscending.Equals(DEFAULT_SORT_ASCENDING) && + SortBySummaryCount.Equals(DEFAULT_SORT_BY_SUMMARY_COUNT) && + SortDescending.Equals(DEFAULT_SORT_DESCENDING) && + ThreeColorsRange.Equals(DEFAULT_THREE_COLORS_RANGE) && + ThreeWeeksAgo.Equals(DEFAULT_THREE_WEEKS_AGO) && + Today.Equals(DEFAULT_TODAY) && + Tomorrow.Equals(DEFAULT_TOMORROW) && + TwoColorsRange.Equals(DEFAULT_TWO_COLORS_RANGE) && + TwoWeeksAgo.Equals(DEFAULT_TWO_WEEKS_AGO) && + Ungroup.Equals(DEFAULT_UNGROUP) && + Unknown.Equals(DEFAULT_UNKNOWN) && + NumberOfItems.Equals(DEFAULT_NUMBER_OF_ITEMS) && + Year.Equals(DEFAULT_YEAR) && + YearGroupText.Equals(DEFAULT_YEAR_GROUP_TEXT) && + Yesterday.Equals(DEFAULT_YESTERDAY) && + Monday.Equals(DEFAULT_MONDAY) && + Tuesday.Equals(DEFAULT_TUESDAY) && + Wednesday.Equals(DEFAULT_WEDNESDAY) && + Thursday.Equals(DEFAULT_THURSDAY) && + Friday.Equals(DEFAULT_FRIDAY) && + Saturday.Equals(DEFAULT_SATURDAY) && + Sunday.Equals(DEFAULT_SUNDAY) && + CustomFormatWindowTitle.Equals(DEFAULT_CUSTOM_FORMAT_WINDOW_TITLE) && + CustomFormatLabelText.Equals(DEFAULT_CUSTOM_FORMAT_FORMAT) && + CustomFormatPreviewLabelText.Equals(DEFAULT_CUSTOM_FORMAT_PREVIEW) && + CustomFormatMinimumColorButtonText.Equals(DEFAULT_CUSTOM_FORMAT_MINIMUM_COLOR) && + CustomFormatIntermediateColorButtonText.Equals(DEFAULT_CUSTOM_FORMAT_INTERMEDIATE_COLOR) && + CustomFormatMaximumColorButtonText.Equals(DEFAULT_CUSTOM_FORMAT_MAXIMUM_COLOR) && + CustomFormatFillLabelText.Equals(DEFAULT_CUSTOM_FORMAT_FILL) && + ConditionXMLNodeText.Equals(DEFAULT_NODE_CONDITION_TEXT) && + ColumnNameXMLNodeText.Equals(DEFAULT_NODE_COLUMN_NAME_TEXT) && + FormatParamsXMLNodeText.Equals(DEFAULT_NODE_FORMAT_PARAMS_TEXT) && + FormatTypeXMLNodeText.Equals(DEFAULT_NODE_FORMAT_TYPE_TEXT); + + #endregion + + #region Public + + #region OutlookGrid Component + + /// Gets or sets the after next month string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"After Next Month string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_AFTER_NEXT_MONTH)] + [RefreshProperties(RefreshProperties.All)] + public string AfterNextMonth { get; set; } + + /// Gets or sets the alphabetic group string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Alphabetic Group Text string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_ALPHABETIC_GROUP_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string AlphabeticGroupText { get; set; } + + /// Gets or sets the bar string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Bar string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_BAR)] + [RefreshProperties(RefreshProperties.All)] + public string Bar { get; set; } + + /// Gets or sets the before previous month string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Before Previous Month string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_BEFORE_PREVIOUS_MONTH)] + [RefreshProperties(RefreshProperties.All)] + public string BeforePreviousMonth { get; set; } + + /// Gets or sets the best fit all string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Best Fit All string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_BEST_FIT_ALL)] + [RefreshProperties(RefreshProperties.All)] + public string BestFitAll { get; set; } + + /// Gets or sets the best fit string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Best Fit string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_BEST_FIT)] + [RefreshProperties(RefreshProperties.All)] + public string BestFit + { + get; set; + } + + /// Gets or sets the clear grouping string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Clear Grouping string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CLEAR_GROUPING)] + [RefreshProperties(RefreshProperties.All)] + public string ClearGrouping + { + get; set; + } + + /// Gets or sets the clear rules string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Clear Rules string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CLEAR_RULES)] + [RefreshProperties(RefreshProperties.All)] + public string ClearRules + { + get; set; + } + + /// Gets or sets the clear sorting string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Clear Sorting string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CLEAR_SORTING)] + [RefreshProperties(RefreshProperties.All)] + public string ClearSorting + { + get; set; + } + + /// Gets or sets the collapse string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Collapse string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_COLLAPSE)] + [RefreshProperties(RefreshProperties.All)] + public string Collapse + { + get; set; + } + + /// Gets or sets the columns string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Columns string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_COLUMNS)] + [RefreshProperties(RefreshProperties.All)] + public string Columns + { + get; set; + } + + /// Gets or sets the conditional formatting string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Conditional Formatting string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CONDITIONAL_FORMATTING)] + [RefreshProperties(RefreshProperties.All)] + public string ConditionalFormatting + { + get; set; + } + + /// Gets or sets the custom three dots string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Custom Three Dots string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_THREE_DOTS)] + [RefreshProperties(RefreshProperties.All)] + public string CustomThreeDots + { + get; set; + } + + /// Gets or sets the date group text string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Date Group Text string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_DATE_GROUP_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string DateGroupText + { + get; set; + } + + /// Gets or sets the day string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Day string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_DAY)] + [RefreshProperties(RefreshProperties.All)] + public string Day + { + get; set; + } + + /// Gets or sets the drag column to group string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Drag Column to Group string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_DRAG_COLUMN_TO_GROUP)] + [RefreshProperties(RefreshProperties.All)] + public string DragColumnToGroup + { + get; set; + } + + /// Gets or sets the earlier during this month string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Earlier During this Month string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_EARLIER_DURING_THIS_MONTH)] + [RefreshProperties(RefreshProperties.All)] + public string EarlierDuringThisMonth + { + get; set; + } + + /// Gets or sets the earlier during this year string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Earlier During this Year string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_EARLIER_THIS_YEAR)] + [RefreshProperties(RefreshProperties.All)] + public string EarlierDuringThisYear + { + get; set; + } + + /// Gets or sets the expand string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Expand string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_EXPAND)] + [RefreshProperties(RefreshProperties.All)] + public string Expand + { + get; set; + } + + /// Gets or sets the full collapse string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Full Collapse string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_FULL_COLLAPSE)] + [RefreshProperties(RefreshProperties.All)] + public string FullCollapse + { + get; set; + } + + /// Gets or sets the full expand string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Full Expand string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_FULL_EXPAND)] + [RefreshProperties(RefreshProperties.All)] + public string FullExpand + { + get; set; + } + + /// Gets or sets the gradient fill string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Gradient Fill string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_GRADIENT_FILL)] + [RefreshProperties(RefreshProperties.All)] + public string GradientFill + { + get; set; + } + + /// Gets or sets the group string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Group string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_GROUP)] + [RefreshProperties(RefreshProperties.All)] + public string Group + { + get; set; + } + + /// Gets or sets the group interval string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Group Interval string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_GROUP_INTERVAL)] + [RefreshProperties(RefreshProperties.All)] + public string GroupInterval + { + get; set; + } + + /// Gets or sets the hide group box string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Header Group string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_HIDE_GROUP_BOX)] + [RefreshProperties(RefreshProperties.All)] + public string HideGroupBox + { + get; set; + } + + /// Gets or sets the in three weeks string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"In Three Weeks string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_IN_THREE_WEEKS)] + [RefreshProperties(RefreshProperties.All)] + public string InThreeWeeks + { + get; set; + } + + /// Gets or sets the in two weeks string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"In Two Weeks string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_IN_TWO_WEEKS)] + [RefreshProperties(RefreshProperties.All)] + public string InTwoWeeks + { + get; set; + } + + /// Gets or sets the Later during this month string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Later During this Month string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_LATER_DURING_THIS_MONTH)] + [RefreshProperties(RefreshProperties.All)] + public string LaterDuringThisMonth + { + get; set; + } + + /// Gets or sets the month string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Month string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_MONTH)] + [RefreshProperties(RefreshProperties.All)] + public string Month + { + get; set; + } + + /// Gets or sets the next month string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Next Month string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NEXT_MONTH)] + [RefreshProperties(RefreshProperties.All)] + public string NextMonth + { + get; set; + } + + /// Gets or sets the next week string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Next Week string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NEXT_WEEK)] + [RefreshProperties(RefreshProperties.All)] + public string NextWeek + { + get; set; + } + + /// Gets or sets the no date string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"No Date string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NO_DATE)] + [RefreshProperties(RefreshProperties.All)] + public string NoDate + { + get; set; + } + + /// Gets or sets the older string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Older string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_OLDER)] + [RefreshProperties(RefreshProperties.All)] + public string Older + { + get; set; + } + + /// Gets or sets the one item string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"One Item string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_ONE_ITEM)] + [RefreshProperties(RefreshProperties.All)] + public string OneItem + { + get; set; + } + + /// Gets or sets the other string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Other string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_OTHER)] + [RefreshProperties(RefreshProperties.All)] + public string Other + { + get; set; + } + + /// Gets or sets the palette custom string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Palette Custom string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_PALETTE_CUSTOM)] + [RefreshProperties(RefreshProperties.All)] + public string PaletteCustom + { + get; set; + } + + /// Gets or sets the palette custom heading string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Palette Custom Heading string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_PALETTE_CUSTOM_HEADING)] + [RefreshProperties(RefreshProperties.All)] + public string PaletteCustomHeading + { + get; set; + } + + /// Gets or sets the previous month string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Previous Month string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_PREVIOUS_MONTH)] + [RefreshProperties(RefreshProperties.All)] + public string PreviousMonth + { + get; set; + } + + /// Gets or sets the previous week string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Previous Week string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_PREVIOUS_WEEK)] + [RefreshProperties(RefreshProperties.All)] + public string PreviousWeek + { + get; set; + } + + /// Gets or sets the previous year string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Previous Year string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_PREVIOUS_YEAR)] + [RefreshProperties(RefreshProperties.All)] + public string PreviousYear + { + get; set; + } + + /// Gets or sets the quarter one string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Quarter One string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_QUARTER_ONE)] + [RefreshProperties(RefreshProperties.All)] + public string QuarterOne + { + get; set; + } + + /// Gets or sets the quarter two string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Quarter Two string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_QUARTER_TWO)] + [RefreshProperties(RefreshProperties.All)] + public string QuarterTwo + { + get; set; + } + + /// Gets or sets the quarter three string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Quarter Three string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_QUARTER_THREE)] + [RefreshProperties(RefreshProperties.All)] + public string QuarterThree + { + get; set; + } + + /// Gets or sets the quarter four string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Quarter Four string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_QUARTER_FOUR)] + [RefreshProperties(RefreshProperties.All)] + public string QuarterFour + { + get; set; + } + + /// Gets or sets the quarter string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Quarter string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_QUARTER)] + [RefreshProperties(RefreshProperties.All)] + public string Quarter + { + get; set; + } + + /// Gets or sets the show group box string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Show Group Box string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SHOW_GROUP_BOX)] + [RefreshProperties(RefreshProperties.All)] + public string ShowGroupBox + { + get; set; + } + + /// Gets or sets the smart string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Smart string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SMART)] + [RefreshProperties(RefreshProperties.All)] + public string Smart + { + get; set; + } + + /// Gets or sets the solid fill string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Solid Fill string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SOLID_FILL)] + [RefreshProperties(RefreshProperties.All)] + public string SolidFill + { + get; set; + } + + /// Gets or sets the sort ascending string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Sort Ascending string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SORT_ASCENDING)] + [RefreshProperties(RefreshProperties.All)] + public string SortAscending + { + get; set; + } + + /// Gets or sets the sort by summary count string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Sort by Summary Count string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SORT_BY_SUMMARY_COUNT)] + [RefreshProperties(RefreshProperties.All)] + public string SortBySummaryCount + { + get; set; + } + + /// Gets or sets the sort descending string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Sort Descending string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SORT_DESCENDING)] + [RefreshProperties(RefreshProperties.All)] + public string SortDescending + { + get; set; + } + + /// Gets or sets the three colors range string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Three Colors Range string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_THREE_COLORS_RANGE)] + [RefreshProperties(RefreshProperties.All)] + public string ThreeColorsRange + { + get; set; + } + + /// Gets or sets the three weeks ago string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Three Weeks Ago string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_THREE_WEEKS_AGO)] + [RefreshProperties(RefreshProperties.All)] + public string ThreeWeeksAgo + { + get; set; + } + + /// Gets or sets the today string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Today string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_TODAY)] + [RefreshProperties(RefreshProperties.All)] + public string Today + { + get; set; + } + + /// Gets or sets the tomorrow string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Tomorrow string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_TOMORROW)] + [RefreshProperties(RefreshProperties.All)] + public string Tomorrow + { + get; set; + } + + /// Gets or sets the two colors range string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Two Colors Range string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_TWO_COLORS_RANGE)] + [RefreshProperties(RefreshProperties.All)] + public string TwoColorsRange + { + get; set; + } + + /// Gets or sets the two weeks ago string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Two Weeks Ago string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_TWO_WEEKS_AGO)] + [RefreshProperties(RefreshProperties.All)] + public string TwoWeeksAgo + { + get; set; + } + + /// Gets or sets the Ungroup string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Ungroup string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_UNGROUP)] + [RefreshProperties(RefreshProperties.All)] + public string Ungroup + { + get; set; + } + + /// Gets or sets the unknown string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Unknown string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_UNKNOWN)] + [RefreshProperties(RefreshProperties.All)] + public string Unknown + { + get; set; + } + + /// Gets or sets the number of items string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Number of Items string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NUMBER_OF_ITEMS)] + [RefreshProperties(RefreshProperties.All)] + public string NumberOfItems + { + get; set; + } + + /// Gets or sets the year string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Year string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_YEAR)] + [RefreshProperties(RefreshProperties.All)] + public string Year + { + get; set; + } + + /// Gets or sets the year group text string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Year Group Text string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_YEAR_GROUP_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string YearGroupText + { + get; set; + } + + /// Gets or sets the yesterday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Yesterday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_YESTERDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Yesterday + { + get; set; + } + + /// Gets or sets the Monday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Monday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_MONDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Monday + { + get; set; + } + + /// Gets or sets the Tuesday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Tuesday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_TUESDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Tuesday + { + get; set; + } + + /// Gets or sets the Wednesday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Wednesday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_WEDNESDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Wednesday + { + get; set; + } + + /// Gets or sets the Thursday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Thursday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_THURSDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Thursday + { + get; set; + } + + /// Gets or sets the Friday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Friday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_FRIDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Friday + { + get; set; + } + + /// Gets or sets the Saturday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Saturday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SATURDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Saturday + { + get; set; + } + + /// Gets or sets the Sunday string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Sunday string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_SUNDAY)] + [RefreshProperties(RefreshProperties.All)] + public string Sunday + { + get; set; + } + + #endregion + + #region Custom Format Window + + /// Gets or sets the custom format window title string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Custom Format Window Title string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_FORMAT_WINDOW_TITLE)] + [RefreshProperties(RefreshProperties.All)] + public string CustomFormatWindowTitle + { + get; set; + } + + /// Gets or sets the format label string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Format label string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_FORMAT_FORMAT)] + [RefreshProperties(RefreshProperties.All)] + public string CustomFormatLabelText + { + get; set; + } + + /// Gets or sets the preview label string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Preview label string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_FORMAT_PREVIEW)] + [RefreshProperties(RefreshProperties.All)] + public string CustomFormatPreviewLabelText + { + get; set; + } + + /// Gets or sets the minimum color button text string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Minimum color button text string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_FORMAT_MINIMUM_COLOR)] + [RefreshProperties(RefreshProperties.All)] + public string CustomFormatMinimumColorButtonText + { + get; set; + } + + /// Gets or sets the intermediate color button text string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Intermediate color button text string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_FORMAT_INTERMEDIATE_COLOR)] + [RefreshProperties(RefreshProperties.All)] + public string CustomFormatIntermediateColorButtonText + { + get; set; + } + + /// Gets or sets the maximum color button text string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Maximum color button text string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_FORMAT_MAXIMUM_COLOR)] + [RefreshProperties(RefreshProperties.All)] + public string CustomFormatMaximumColorButtonText + { + get; set; + } + + /// Gets or sets the fill label string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Fill label string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_CUSTOM_FORMAT_FILL)] + [RefreshProperties(RefreshProperties.All)] + public string CustomFormatFillLabelText + { + get; set; + } + + #endregion + + #region XML Nodes + + /// Gets or sets the condition XML node string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Condition XML node string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NODE_CONDITION_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string ConditionXMLNodeText { get; set; } + + /// Gets or sets the column name XML node string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"ColumnName XML node string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NODE_COLUMN_NAME_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string ColumnNameXMLNodeText { get; set; } + + /// Gets or sets the format type XML node string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"FormatType XML node string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NODE_FORMAT_TYPE_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string FormatTypeXMLNodeText { get; set; } + + /// Gets or sets the format params XML node string for the KryptonOutlookGrid. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"FormatParams XML node string used for Krypton Outlook Grid.")] + [DefaultValue(DEFAULT_NODE_FORMAT_PARAMS_TEXT)] + [RefreshProperties(RefreshProperties.All)] + public string FormatParamsXMLNodeText { get; set; } + + #endregion + + #endregion + + #region Implementation + + /// Resets this instance. + public void Reset() + { + #region OutlookGrid Component + + AfterNextMonth = DEFAULT_AFTER_NEXT_MONTH; + + AlphabeticGroupText = DEFAULT_ALPHABETIC_GROUP_TEXT; + + Bar = DEFAULT_BAR; + + BeforePreviousMonth = DEFAULT_BEFORE_PREVIOUS_MONTH; + + BestFitAll = DEFAULT_BEST_FIT_ALL; + + BestFit = DEFAULT_BEST_FIT; + + ClearGrouping = DEFAULT_CLEAR_GROUPING; + + ClearRules = DEFAULT_CLEAR_RULES; + + ClearSorting = DEFAULT_CLEAR_SORTING; + + Collapse = DEFAULT_COLLAPSE; + + Columns = DEFAULT_COLUMNS; + + ConditionalFormatting = DEFAULT_CONDITIONAL_FORMATTING; + + CustomThreeDots = DEFAULT_CUSTOM_THREE_DOTS; + + DateGroupText = DEFAULT_DATE_GROUP_TEXT; + + Day = DEFAULT_DAY; + + DragColumnToGroup = DEFAULT_DRAG_COLUMN_TO_GROUP; + + EarlierDuringThisMonth = DEFAULT_EARLIER_DURING_THIS_MONTH; + + EarlierDuringThisYear = DEFAULT_EARLIER_THIS_YEAR; + + Expand = DEFAULT_EXPAND; + + FullCollapse = DEFAULT_FULL_COLLAPSE; + + FullExpand = DEFAULT_FULL_EXPAND; + + GradientFill = DEFAULT_GRADIENT_FILL; + + Group = DEFAULT_GROUP; + + GroupInterval = DEFAULT_GROUP_INTERVAL; + + HideGroupBox = DEFAULT_HIDE_GROUP_BOX; + + InThreeWeeks = DEFAULT_IN_THREE_WEEKS; + + InTwoWeeks = DEFAULT_IN_TWO_WEEKS; + + LaterDuringThisMonth = DEFAULT_LATER_DURING_THIS_MONTH; + + Month = DEFAULT_MONTH; + + NextMonth = DEFAULT_NEXT_MONTH; + + NextWeek = DEFAULT_NEXT_WEEK; + + NoDate = DEFAULT_NO_DATE; + + Older = DEFAULT_OLDER; + + OneItem = DEFAULT_ONE_ITEM; + + Other = DEFAULT_OTHER; + + PaletteCustom = DEFAULT_PALETTE_CUSTOM; + + PaletteCustomHeading = DEFAULT_PALETTE_CUSTOM_HEADING; + + PreviousMonth = DEFAULT_PREVIOUS_MONTH; + + PreviousWeek = DEFAULT_PREVIOUS_WEEK; + + PreviousYear = DEFAULT_PREVIOUS_YEAR; + + QuarterOne = DEFAULT_QUARTER_ONE; + + QuarterTwo = DEFAULT_QUARTER_TWO; + + QuarterThree = DEFAULT_QUARTER_THREE; + + QuarterFour = DEFAULT_QUARTER_FOUR; + + Quarter = DEFAULT_QUARTER; + + ShowGroupBox = DEFAULT_SHOW_GROUP_BOX; + + Smart = DEFAULT_SMART; + + SolidFill = DEFAULT_SOLID_FILL; + + SortAscending = DEFAULT_SORT_ASCENDING; + + SortBySummaryCount = DEFAULT_SORT_BY_SUMMARY_COUNT; + + SortDescending = DEFAULT_SORT_DESCENDING; + + ThreeColorsRange = DEFAULT_THREE_COLORS_RANGE; + + ThreeWeeksAgo = DEFAULT_THREE_WEEKS_AGO; + + Today = DEFAULT_TODAY; + + Tomorrow = DEFAULT_TOMORROW; + + TwoColorsRange = DEFAULT_TWO_COLORS_RANGE; + + TwoWeeksAgo = DEFAULT_TWO_WEEKS_AGO; + + Ungroup = DEFAULT_UNGROUP; + + Unknown = DEFAULT_UNKNOWN; + + NumberOfItems = DEFAULT_NUMBER_OF_ITEMS; + + Year = DEFAULT_YEAR; + + YearGroupText = DEFAULT_YEAR_GROUP_TEXT; + + Yesterday = DEFAULT_YESTERDAY; + + Monday = DEFAULT_MONDAY; + + Tuesday = DEFAULT_TUESDAY; + + Wednesday = DEFAULT_WEDNESDAY; + + Thursday = DEFAULT_THURSDAY; + + Friday = DEFAULT_FRIDAY; + + Saturday = DEFAULT_SATURDAY; + + Sunday = DEFAULT_SUNDAY; + + #endregion + + #region Custom Format Window + + CustomFormatWindowTitle = DEFAULT_CUSTOM_FORMAT_WINDOW_TITLE; + + CustomFormatFillLabelText = DEFAULT_CUSTOM_FORMAT_FILL; + + CustomFormatLabelText = DEFAULT_CUSTOM_FORMAT_FORMAT; + + CustomFormatPreviewLabelText = DEFAULT_CUSTOM_FORMAT_PREVIEW; + + CustomFormatMinimumColorButtonText = DEFAULT_CUSTOM_FORMAT_MINIMUM_COLOR; + + CustomFormatIntermediateColorButtonText = DEFAULT_CUSTOM_FORMAT_INTERMEDIATE_COLOR; + + CustomFormatMaximumColorButtonText = DEFAULT_CUSTOM_FORMAT_MAXIMUM_COLOR; + + #endregion + + #region XML Nodes + + ConditionXMLNodeText = DEFAULT_NODE_CONDITION_TEXT; + + ColumnNameXMLNodeText = DEFAULT_NODE_COLUMN_NAME_TEXT; + + FormatTypeXMLNodeText = DEFAULT_NODE_FORMAT_TYPE_TEXT; + + FormatParamsXMLNodeText = DEFAULT_NODE_FORMAT_PARAMS_TEXT; + + #endregion + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonScrollBarStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonScrollBarStrings.cs index eabb73f91..c518de9b9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonScrollBarStrings.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonScrollBarStrings.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -52,7 +52,7 @@ public KryptonScrollBarStrings() ScrollHere.Equals(DEFAULT_SCROLL_BAR_SCROLL_HERE) && ScrollUp.Equals(DEFAULT_SCROLL_BAR_SCROLL_UP) && ScrollLeft.Equals(DEFAULT_SCROLL_BAR_SCROLL_LEFT) && - ScrollRight.Equals(DEFAULT_SCROLL_BAR_SCROLL_LEFT); + ScrollRight.Equals(DEFAULT_SCROLL_BAR_SCROLL_RIGHT); /// Resets this instance. public void Reset() diff --git a/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonToastNotificationStrings.cs b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonToastNotificationStrings.cs new file mode 100644 index 000000000..8852ac897 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Translations/Miscellaneous/KryptonToastNotificationStrings.cs @@ -0,0 +1,74 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// Exposes a custom set of strings that are used within the Krypton Toolkit, and are localisable. + /// + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonToastNotificationStrings : GlobalId + { + #region Static Strings + + private const string DEFAULT_DO_NOT_SHOW_AGAIN = @"Do ¬ show again"; + private const string DEFAULT_DISMISS = @"&Dismiss"; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public KryptonToastNotificationStrings() + { + Reset(); + } + + /// Converts to string. + /// A that represents this instance. + public override string ToString() => !IsDefault ? "Modified" : string.Empty; + + #endregion + + #region IsDefault + + [Browsable(false)] + public bool IsDefault => DoNotShowAgain.Equals(DEFAULT_DO_NOT_SHOW_AGAIN) && + Dismiss.Equals(DEFAULT_DISMISS); + + #endregion + + #region Public + + /// Gets or sets the dismiss string used for custom situations. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Dismiss string used for custom situations.")] + [DefaultValue(DEFAULT_DO_NOT_SHOW_AGAIN)] + public string DoNotShowAgain { get; set; } + + /// Gets or sets the dismiss string used for custom situations. + [Localizable(true)] + [Category(@"Visuals")] + [Description(@"Dismiss string used for custom situations.")] + [DefaultValue(DEFAULT_DISMISS)] + public string Dismiss { get; set; } + + #endregion + + #region Implementation + + public void Reset() + { + Dismiss = DEFAULT_DISMISS; + DoNotShowAgain = DEFAULT_DO_NOT_SHOW_AGAIN; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/AllowNullAttribute.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/AllowNullAttribute.cs index 584688f9c..fab408462 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/AllowNullAttribute.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/AllowNullAttribute.cs @@ -4,7 +4,6 @@ namespace System.Diagnostics.CodeAnalysis { #if NETFRAMEWORK // https://github.com/dotnet/designs/blob/main/accepted/2020/net5/net5.md#preprocessor-symbols - /// THIS FILE WILL BE CONDITIONALLY REMOVED VIA THE `CSPROJ` FILE /// Specifies that is allowed as an input even if the corresponding type disallows it. [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, Inherited = false)] internal sealed class AllowNullAttribute : Attribute diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/AssemblyUtilities.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/AssemblyUtilities.cs index e47ee4abb..e1b3e9f94 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/AssemblyUtilities.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/AssemblyUtilities.cs @@ -3,7 +3,7 @@ * * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -32,7 +32,9 @@ public static DateTime GetLinkerTimestampUTC(string filePath) using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - file.Read(byteBuffer, 0, byteBuffer.Length); + var read = file.Read(byteBuffer, 0, byteBuffer.Length); + + Console.WriteLine(read); } var headerPosition = BitConverter.ToInt32(byteBuffer, PE_HEADER_OFFSET); diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/BiDictionary.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/BiDictionary.cs index 080b73936..34fbea07b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/BiDictionary.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/BiDictionary.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2022 - 2024. All rights reserved. * */ #endregion @@ -14,7 +14,7 @@ namespace Krypton.Toolkit ///
/// /// - internal class BiDictionary where TFirst : notnull where TSecond : notnull + public class BiDictionary where TFirst : notnull where TSecond : notnull { private static readonly IList _emptyFirstList = Array.Empty(); private static readonly IList _emptySecondList = Array.Empty(); diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/GlobalToolkitUtilities.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/GlobalToolkitUtilities.cs new file mode 100644 index 000000000..ce43a10e3 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/GlobalToolkitUtilities.cs @@ -0,0 +1,103 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + public class GlobalToolkitUtilities + { + #region Identity + + public GlobalToolkitUtilities() + { + + } + + #endregion + + #region Implementation + + /// Launches a chosen process. + /// Name of the process. + public static void LaunchProcess(string processName) + { + try + { + Process.Start(processName); + } + catch (Exception e) + { + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + } + + /// Launches a chosen process. + /// Name of the process. + /// The arguments to pass through. + public static void LaunchProcess(string processName, string arguments) + { + try + { + Process.Start(processName, arguments); + } + catch (Exception e) + { + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + } + + /// Launches a chosen process. + /// The object in which to start. + public static Process? LaunchProcess(ProcessStartInfo startInfo) + { + try + { + Process.Start(startInfo); + } + catch (Exception e) + { + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + + return null; + } + + /// Gets the file list. + /// The directory. + /// Type of the file. + /// The search option. + /// + public static List? GetFileList(string directory, string? fileType, SearchOption searchOption = SearchOption.AllDirectories) + { + try + { + List? fileList = new List(); + + if (string.IsNullOrEmpty(fileType)) + { + fileList = Directory.GetFiles(directory, "*", searchOption).ToList(); + } + else + { + fileList = Directory.GetFiles(directory, fileType, searchOption).ToList(); + } + + return fileList; + } + catch (Exception e) + { + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + + return null; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/GraphicsExtensions.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/GraphicsExtensions.cs index 3698814f4..e3dd5e78e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/GraphicsExtensions.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/GraphicsExtensions.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -41,7 +41,7 @@ public static class GraphicsExtensions { //Console.WriteLine("Unable to extract the icon from the binary"); - ExceptionHandler.CaptureException(e); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); } return result; @@ -106,7 +106,7 @@ public static Icon LoadIcon(IconType type, Size size) } catch (Exception e) { - ExceptionHandler.CaptureException(e, className: nameof(GraphicsExtensions), methodSignature: @"ScaleImage(Image sourceImage, Size? imageSize)"); + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); return null; } @@ -118,21 +118,227 @@ public static Icon LoadIcon(IconType type, Size size) /// The height. public static Bitmap? ScaleImage(Image? image, int width, int height) => ScaleImage(image, new Size(width, height)); - // TODO: Remove, as this is redundant - //public enum IconType - //{ - // Warning = 101, - // Help = 102, - // Error = 103, - // Info = 104, - // Shield = 106 - //} - /// Sets the icon. /// The image. /// The size. public static Image SetIcon(Image image, Size size) => new Bitmap(image, size); - } + /// Extracts an icon from a DLL. + /// Code from https://www.pinvoke.net/default.aspx/shell32.extracticonex + /// + /// The file path to ingest. + /// Index of the image. + /// if set to true [large icon]. + /// A specified icon from a chosen DLL file. + public static Icon? ExtractIcon(string filePath, int imageIndex, bool largeIcon = true) + { + if (string.IsNullOrEmpty(filePath)) + { + throw new ArgumentNullException(nameof(filePath)); + } + var hIconEx = new IntPtr[] { IntPtr.Zero }; + try + { + int readIconCount = largeIcon + ? ImageNativeMethods.ExtractIconEx(filePath, -imageIndex, hIconEx, null, 1) + : ImageNativeMethods.ExtractIconEx(filePath, -imageIndex, null, hIconEx, 1); + if (readIconCount > 0 && hIconEx[0] != IntPtr.Zero) + { + // GET FIRST EXTRACTED ICON + Icon? extractedIcon = Icon.FromHandle(hIconEx[0]).Clone() as Icon; + + return extractedIcon; + } + else + { + // NO ICONS READ + return null; + } + } + catch (Exception ex) + { + ExceptionHandler.CaptureException(ex, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + + // /* EXTRACT ICON ERROR */ + //// BUBBLE UP + //throw new ApplicationException("Could not extract icon", ex); + return null; + } + finally + { + // RELEASE RESOURCES + foreach (IntPtr ptr in hIconEx) + { + if (ptr != IntPtr.Zero) + { + ImageNativeMethods.DestroyIcon(ptr); + } + } + } + } + + /// Gets the size of the screen. + /// + public static Size GetScreenSize() => + new Size(Screen.PrimaryScreen!.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); + + /// Gets the working area. + /// + public static Rectangle GetWorkingArea() => Screen.PrimaryScreen!.WorkingArea; + + /// Gets the type of the krypton message box image. + /// Type of the icon. + /// Size of the image. + /// The custom image. + /// The image, based on the type chosen. + /// iconType - null + public static Image? GetKryptonMessageBoxImageType(KryptonMessageBoxIcon iconType, Size? imageSize, Image? customImage = null) + { + var newSize = imageSize ?? new Size(32, 32); + + switch (iconType) + { + case KryptonMessageBoxIcon.None: + return null; + case KryptonMessageBoxIcon.Hand: + return MessageBoxImageResources.GenericHand; + case KryptonMessageBoxIcon.SystemHand: + return ScaleImage(SystemIcons.Hand.ToBitmap(), newSize); + case KryptonMessageBoxIcon.Question: + return MessageBoxImageResources.GenericQuestion; + case KryptonMessageBoxIcon.SystemQuestion: + return ScaleImage(SystemIcons.Question.ToBitmap(), newSize); + case KryptonMessageBoxIcon.Exclamation: + return MessageBoxImageResources.GenericWarning; + case KryptonMessageBoxIcon.Warning: + case KryptonMessageBoxIcon.SystemExclamation: + return ScaleImage(SystemIcons.Exclamation.ToBitmap(), newSize); + case KryptonMessageBoxIcon.Asterisk: + return MessageBoxImageResources.GenericAsterisk; + case KryptonMessageBoxIcon.SystemAsterisk: + return ScaleImage(SystemIcons.Asterisk.ToBitmap(), newSize); + case KryptonMessageBoxIcon.Stop: + return MessageBoxImageResources.GenericStop; + case KryptonMessageBoxIcon.Error: + return MessageBoxImageResources.GenericCritical; + case KryptonMessageBoxIcon.Information: + return MessageBoxImageResources.GenericInformation; + case KryptonMessageBoxIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + return UACShieldIconResources.UACShieldWindows11; + } + else if (OSUtilities.IsWindowsTen) + { + return UACShieldIconResources.UACShieldWindows10; + } + else + { + return UACShieldIconResources.UACShieldWindows7881; + } + case KryptonMessageBoxIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + return MessageBoxImageResources.Windows11; + } + else if (OSUtilities.IsWindowsTen || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsEight) + { + return MessageBoxImageResources.Windows_8_and_10_Logo; + } + else + { + return ScaleImage(SystemIcons.WinLogo.ToBitmap(), newSize); + } + case KryptonMessageBoxIcon.Application: + return ScaleImage(customImage, newSize) ?? ScaleImage(SystemIcons.Application.ToBitmap(), newSize); + case KryptonMessageBoxIcon.SystemApplication: + return ScaleImage(SystemIcons.Application.ToBitmap(), newSize); + default: + DebugTools.NotImplemented(iconType.ToString()); + throw new ArgumentOutOfRangeException(nameof(iconType), iconType, null); + } + } + + /// Gets the type of the toast notification icon. + /// Type of the notification icon. + /// The custom image. + /// Size of the custom. + /// + /// notificationIconType - null + public static Image? GetToastNotificationIconType(KryptonToastNotificationIcon notificationIconType, + Image? customImage = null, Size? customSize = null) + { + Size newSize = customSize ?? new Size(128, 128); + + switch (notificationIconType) + { + case KryptonToastNotificationIcon.None: + return null; + case KryptonToastNotificationIcon.Hand: + return ToastNotificationImageResources.Toast_Notification_Hand_128_x_128; + case KryptonToastNotificationIcon.SystemHand: + return ScaleImage(SystemIcons.Hand.ToBitmap(), newSize); + case KryptonToastNotificationIcon.Question: + return ToastNotificationImageResources.Toast_Notification_Question_128_x_128; + case KryptonToastNotificationIcon.SystemQuestion: + return ScaleImage(SystemIcons.Question.ToBitmap(), newSize); + case KryptonToastNotificationIcon.Exclamation: + case KryptonToastNotificationIcon.SystemExclamation: + case KryptonToastNotificationIcon.Warning: + return ToastNotificationImageResources.Toast_Notification_Warning_128_x_115; + case KryptonToastNotificationIcon.Asterisk: + case KryptonToastNotificationIcon.Error: + return ToastNotificationImageResources.Toast_Notification_Asterisk_128_x_128; + case KryptonToastNotificationIcon.SystemAsterisk: + return ScaleImage(SystemIcons.Asterisk.ToBitmap(), newSize); + case KryptonToastNotificationIcon.Stop: + return ToastNotificationImageResources.Toast_Notification_Stop_128_x_128; + case KryptonToastNotificationIcon.Information: + return ToastNotificationImageResources.Toast_Notification_Information_128_x_128; + case KryptonToastNotificationIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + return ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_11_128_x_128; + } + else if (OSUtilities.IsWindowsTen) + { + return ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_10_128_x_128; + } + else if (OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsEight || OSUtilities.IsWindowsSeven) + { + return ToastNotificationImageResources.Toast_Notification_UAC_Shield_Windows_7_and_8_128_x_128; + } + else + { + return ScaleImage(SystemIcons.Shield.ToBitmap(), newSize); + } + case KryptonToastNotificationIcon.WindowsLogo: + if (OSUtilities.IsAtLeastWindowsEleven) + { + return ToastNotificationImageResources.Toast_Notification_Windows_11_128_x_128; + } + else if (OSUtilities.IsWindowsTen || OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsEight) + { + return ToastNotificationImageResources.Toast_Notification_Windows_10_128_x_121; + } + else + { + return ScaleImage(SystemIcons.WinLogo.ToBitmap(), newSize); + } + case KryptonToastNotificationIcon.Application: + return customImage != null + ? ScaleImage(customImage, newSize) : ScaleImage(SystemIcons.Application.ToBitmap(), newSize); + case KryptonToastNotificationIcon.SystemApplication: + return ScaleImage(SystemIcons.Application.ToBitmap(), newSize); + case KryptonToastNotificationIcon.Ok: + return ToastNotificationImageResources.Toast_Notification_Ok_128_x_128; + case KryptonToastNotificationIcon.Custom: + return customImage != null ? ScaleImage(customImage, newSize) : null; + default: + DebugTools.NotImplemented(notificationIconType.ToString()); + throw new ArgumentOutOfRangeException(nameof(notificationIconType), notificationIconType, null); + } + } + } #endregion } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/IFormatParams.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/IFormatParams.cs new file mode 100644 index 000000000..6a2f4fd6b --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/IFormatParams.cs @@ -0,0 +1,36 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Parameter class for Conditional Formatting + /// + /// + public interface IFormatParams : ICloneable + { + /// + /// Persists the parameters. + /// + /// The XML writer. + void Persist(XmlWriter writer); + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/IOutlookGridGroup.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/IOutlookGridGroup.cs new file mode 100644 index 000000000..9353cf8be --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/IOutlookGridGroup.cs @@ -0,0 +1,105 @@ +namespace Krypton.Toolkit +{ + /// + /// IOutlookGridGroup specifies the interface of any implementation of a OutlookGridGroup class + /// Each implementation of the IOutlookGridGroup can override the behaviour of the grouping mechanism + /// Notice also that ICloneable must be implemented. The OutlookGrid makes use of the Clone method of the Group + /// to create new Group clones. Related to this is the OutlookGrid.GroupTemplate property, which determines what + /// type of Group must be cloned. + /// + public interface IOutlookGridGroup : IComparable, ICloneable + { + /// + /// the text to be displayed in the group row + /// + string Text { get; } //set; } + + /// + /// determines the value of the current group. this is used to compare the group value + /// against each item's value. + /// + object? Value { get; set; } + + /// + /// indicates whether the group is collapsed. If it is collapsed, it group items (rows) will + /// not be displayed. + /// + bool Collapsed { get; set; } + + /// + /// specifies the number of items that are part of the current group + /// this value is automatically filled each time the grid is re-drawn + /// e.g. after sorting the grid. + /// + int ItemCount { get; set; } + + /// + /// specifies the default height of the group + /// each group is cloned from the GroupStyle object. Setting the height of this object + /// will also set the default height of each group. + /// + int Height { get; set; } + + //New additions + + /// + /// specifies which column is associated with this group + /// + OutlookGridColumn Column { get; set; } + + /// + /// The list of the rows contained in a group + /// + List Rows { get; set; } + + /// + /// The parent group if any + /// + IOutlookGridGroup? ParentGroup { get; set; } + + /// + /// The level in the depth of groups + /// + int Level { get; set; } + + /// + /// The children groups + /// + OutlookGridGroupCollection Children { get; set; } + + /// + /// Format style of the cell + /// + string FormatStyle { get; set; } + + /// + /// Image associated to the group if any + /// + Image? GroupImage { get; set; } + + /// + /// The text associated for the group text (1 item) + /// + string? OneItemText { get; set; } + + /// + /// The text associated for the group text (XXX items) + /// + string? XxxItemsText { get; set; } + + /// + /// Allows the column to be hidden when it is grouped by + /// + bool AllowHiddenWhenGrouped { get; set; } + + /// + /// Sort groups using count items value + /// + bool SortBySummaryCount { get; set; } + + /// + /// Gets or sets the items comparer, if overriding the default IComparable is needed + /// + IComparer? ItemsComparer { get; set; } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/IconHelper.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/IconHelper.cs new file mode 100644 index 000000000..8da33c972 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/IconHelper.cs @@ -0,0 +1,131 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal static class IconHelper + { + #region Instance Fields + + private static byte[] _pngIconHeader = + new byte[] { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + #endregion + + #region Implementation + + /// Creates an icon from an image. Code adapted from https://www.codeproject.com/tips/627823/fast-and-high-quality-bitmap-to-icon-converter. + /// The source image. + /// Size of the icon. + /// + ///
+ ///
+ public static Icon CreateIconFromImage(Image sourceImage, Size? iconSize) + { + Size newSize = iconSize ?? new Size(16, 16); + + using (Bitmap bmp = new Bitmap(sourceImage, newSize)) + { + byte[] png; + + using (MemoryStream ms = new MemoryStream()) + { + bmp.Save(ms, ImageFormat.Png); + + ms.Position = 0; + + png = ms.ToArray(); + } + + using (MemoryStream ms2 = new MemoryStream()) + { + if (newSize.Height > 256 && newSize.Height > 256) + { + newSize = new Size(0, 0); + } + + _pngIconHeader[6] = (byte)newSize.Width; + + _pngIconHeader[7] = (byte)newSize.Height; + + _pngIconHeader[14] = (byte)(png.Length & 255); + + _pngIconHeader[15] = (byte)(png.Length / 256); + + _pngIconHeader[18] = (byte)(_pngIconHeader.Length); + + ms2.Write(_pngIconHeader, 0, _pngIconHeader.Length); + + ms2.Write(png, 0, png.Length); + + ms2.Position = 0; + + return new Icon(ms2); + } + } + } + + internal static Icon? GetIconFromEnum(InformationBoxIcon iconType) + { + switch (iconType) + { + case InformationBoxIcon.None: + return null; + case InformationBoxIcon.Hand: + return CreateIconFromImage(MessageBoxImageResources.GenericHand, null); + case InformationBoxIcon.SystemHand: + return SystemIcons.Hand; + case InformationBoxIcon.Question: + return CreateIconFromImage(MessageBoxImageResources.GenericQuestion, null); + case InformationBoxIcon.SystemQuestion: + return SystemIcons.Question; + case InformationBoxIcon.Exclamation: + case InformationBoxIcon.Warning: + return CreateIconFromImage(MessageBoxImageResources.GenericWarning, null); + case InformationBoxIcon.SystemExclamation: + return SystemIcons.Exclamation; + case InformationBoxIcon.Asterisk: + return CreateIconFromImage(MessageBoxImageResources.GenericAsterisk, null); + case InformationBoxIcon.SystemAsterisk: + return SystemIcons.Asterisk; + case InformationBoxIcon.Stop: + case InformationBoxIcon.Error: + return CreateIconFromImage(MessageBoxImageResources.GenericStop, null); + case InformationBoxIcon.Information: + return CreateIconFromImage(MessageBoxImageResources.GenericInformation, null); + case InformationBoxIcon.Shield: + if (OSUtilities.IsAtLeastWindowsEleven) + { + return CreateIconFromImage(UACShieldIconResources.UACShieldWindows11, null); + } + else if (OSUtilities.IsWindowsTen) + { + return CreateIconFromImage(UACShieldIconResources.UACShieldWindows10, null); + } + else + { + return CreateIconFromImage(UACShieldIconResources.UACShieldWindows7881, null); + } + case InformationBoxIcon.WindowsLogo: + break; + case InformationBoxIcon.Application: + break; + case InformationBoxIcon.SystemApplication: + return SystemIcons.Application; + default: + DebugTools.NotImplemented(iconType.ToString()); + return null; + } + + return null; + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/IconType.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/IconType.cs index 497437489..0636f0b4f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/IconType.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/IconType.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/ImageNativeMethods.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/ImageNativeMethods.cs index 02816ce9a..08bb81643 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/ImageNativeMethods.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/ImageNativeMethods.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -13,6 +13,8 @@ internal class ImageNativeMethods { private const string USER32 = Libraries.User32; + private const string SHELL32 = Libraries.Shell32; + [DllImport(USER32, SetLastError = true)] [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] public static extern IntPtr SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam); @@ -20,5 +22,14 @@ internal class ImageNativeMethods [DllImport(USER32, EntryPoint = "LoadImageW", CharSet = CharSet.Unicode, SetLastError = true)] [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] public static extern IntPtr LoadImage(IntPtr hInt, string lpszName, uint uType, int cxDesired, int cyDesired, uint fuLoad); + + [DllImport(SHELL32, EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] + public static extern int ExtractIconEx(string lpszFile, int nIconIndex, IntPtr[]? phiconLarge, IntPtr[]? phiconSmall, int amountIcons); + + [DllImport(USER32, EntryPoint = "DestroyIcon", SetLastError = true)] + [DefaultDllImportSearchPaths(DllImportSearchPath.System32)] + public static extern int DestroyIcon(IntPtr hIcon); + } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/Interop.HRESULT.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/Interop.HRESULT.cs new file mode 100644 index 000000000..24a315c06 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/Interop.HRESULT.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Runtime.InteropServices +{ + internal static partial class Interop + { + // https://msdn.microsoft.com/en-us/library/cc231198.aspx + internal enum HRESULT + { + S_OK = 0, + S_FALSE = 1, + E_NOTIMPL = unchecked((int)0x80004001), + E_ABORT = unchecked((int)0x80004004), + E_FAIL = unchecked((int)0x80004005), + E_UNEXPECTED = unchecked((int)0x8000FFFF), + STG_E_INVALIDFUNCTION = unchecked((int)0x80030001L), + STG_E_INVALIDPOINTER = unchecked((int)0x80030009), + STG_E_INVALIDPARAMETER = unchecked((int)0x80030057), + STG_E_INVALIDFLAG = unchecked((int)0x800300FF), + E_ACCESSDENIED = unchecked((int)0x80070005), + E_INVALIDARG = unchecked((int)0x80070057) + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/Interop.SHGetStockIconInfo.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/Interop.SHGetStockIconInfo.cs new file mode 100644 index 000000000..33621987a --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/Interop.SHGetStockIconInfo.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Runtime.InteropServices +{ + /*internal static partial class Interop + { + internal static partial class Shell32 + { + internal const uint SHGSI_ICON = 0x000000100; + internal const uint SHGSI_ICONLOCATION = 0x00000000; + + [LibraryImport(Libraries.Shell32)] + internal static partial HRESULT SHGetStockIconInfo( + uint siid, + uint uFlags, + ref SHSTOCKICONINFO psii); + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] + internal unsafe struct SHSTOCKICONINFO + { + public uint cbSize; + public nint hIcon; + public int iSysImageIndex; + public int iIcon; + public fixed char szPath[260]; + } + } + }*/ +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonColorButtonCustomColorPreviewShape.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonColorButtonCustomColorPreviewShape.cs index af69bff31..53d6ab528 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonColorButtonCustomColorPreviewShape.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonColorButtonCustomColorPreviewShape.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonDataGridViewProxy.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonDataGridViewProxy.cs new file mode 100644 index 000000000..ce87de956 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonDataGridViewProxy.cs @@ -0,0 +1,287 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + public class KryptonDataGridViewProxy + { + #region Instance Fields + + private readonly KryptonDataGridView _dataGridView; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// The data grid view. + public KryptonDataGridViewProxy(KryptonDataGridView dataGridView) + { + _dataGridView = dataGridView; + } + + #endregion + + #region Public + + [Category("Appearance")] + [Description("The height, in pixels, of the column headers row.")] + public int ColumnHeadersHeight + { + get => _dataGridView.ColumnHeadersHeight; + set => _dataGridView.ColumnHeadersHeight = value; + } + + [Category("Appearance")] + [Description("Indicates whether the column headers row is displayed.")] + public bool ColumnHeadersVisible + { + get => _dataGridView.ColumnHeadersVisible; + set => _dataGridView.ColumnHeadersVisible = value; + } + + [Category("Appearance")] + [Description("Indicates whether the column that contains row headers is displayed.")] + public bool RowHeadersVisible + { + get => _dataGridView.RowHeadersVisible; + set => _dataGridView.RowHeadersVisible = value; + } + + [Category("Appearance")] + [Description("Indicates whether to show cell errors.")] + public bool ShowCellErrors + { + get => _dataGridView.ShowCellErrors; + set => _dataGridView.ShowCellErrors = value; + } + + [Category("Appearance")] + [Description("Indicates whether or not ToolTips will show when the mouse pointer pauses on a cell.")] + public bool ShowCellToolTips + { + get => _dataGridView.ShowCellToolTips; + set => _dataGridView.ShowCellToolTips = value; + } + + [Category("Appearance")] + [Description("Indicates whether or not the editing glyph is visible in the row header of the cell being edited.")] + public bool ShowEditingIcon + { + get => _dataGridView.ShowEditingIcon; + set => _dataGridView.ShowEditingIcon = value; + } + + [Category("Appearance")] + [Description("Indicates whether row headers will display error glyphs for each row that contains a data entry error.")] + public bool ShowRowErrors + { + get => _dataGridView.ShowRowErrors; + set => _dataGridView.ShowRowErrors = value; + } + + [Category("Behavior")] + [Description("Indicates whether the option to add rows is displayed to the user.")] + public bool AllowUserToAddRows + { + get => _dataGridView.AllowUserToAddRows; + set => _dataGridView.AllowUserToAddRows = value; + } + + [Category("Behavior")] + [Description("Indicates whether the user is allowed to delete rows from the DataGridView.")] + public bool AllowUserToDeleteRows + { + get => _dataGridView.AllowUserToDeleteRows; + set => _dataGridView.AllowUserToDeleteRows = value; + } + + [Category("Behavior")] + [Description("Indicates whether manual column repositioning is enabled.")] + public bool AllowUserToOrderColumns + { + get => _dataGridView.AllowUserToOrderColumns; + set => _dataGridView.AllowUserToOrderColumns = value; + } + + [Category("Behavior")] + [Description("Indicates whether users can resize columns.")] + public bool AllowUserToResizeColumns + { + get => _dataGridView.AllowUserToResizeColumns; + set => _dataGridView.AllowUserToResizeColumns = value; + } + + [Category("Behavior")] + [Description("Indicates whether users can resize rows.")] + public bool AllowUserToResizeRows + { + get => _dataGridView.AllowUserToResizeRows; + set => _dataGridView.AllowUserToResizeRows = value; + } + + [Category("Behavior")] + [Description("Determines the behavior for adjusting the column headers height.")] + public DataGridViewColumnHeadersHeightSizeMode ColumnHeadersHeightSizeMode + { + get => _dataGridView.ColumnHeadersHeightSizeMode; + set => _dataGridView.ColumnHeadersHeightSizeMode = value; + } + + [Category("Behavior")] + [Description("Identifies the mode that determines the cell editing is started.")] + public DataGridViewEditMode EditMode + { + get => _dataGridView.EditMode; + set => _dataGridView.EditMode = value; + } + + [Category("Behavior")] + [Description("Indicates whether the user is allowed to selected more than one cell, row or column of hte DataGridView at a time.")] + public bool MultiSelect + { + get => _dataGridView.MultiSelect; + set => _dataGridView.MultiSelect = value; + } + + [Category("Behavior")] + [Description("Indicates whether the user can edit the cells of the DataGridView control.")] + public bool ReadOnly + { + get => _dataGridView.ReadOnly; + set => _dataGridView.ReadOnly = value; + } + + [Category("Behavior")] + [Description("Determine the behavior for adjusting the row headers width.")] + public DataGridViewRowHeadersWidthSizeMode RowHeadersWidthSizeMode + { + get => _dataGridView.RowHeadersWidthSizeMode; + set => _dataGridView.RowHeadersWidthSizeMode = value; + } + + [Category("Behavior")] + [Description("Indicates how the cells of the DataGridView can be selected.")] + public DataGridViewSelectionMode SelectionMode + { + get => _dataGridView.SelectionMode; + set => _dataGridView.SelectionMode = value; + } + + [Category("Behavior")] + [Description("Indicates whether the TAB key moves the focus to the next control in the tab order rather than moving focus to the next cell in the control.")] + public bool StandardTab + { + get => _dataGridView.StandardTab; + set => _dataGridView.StandardTab = value; + } + + [Category("Layout")] + [Description("Determines the auto size mode for the visible columns.")] + public DataGridViewAutoSizeColumnsMode AutoSizeColumnsMode + { + get => _dataGridView.AutoSizeColumnsMode; + set => _dataGridView.AutoSizeColumnsMode = value; + } + + [Category("Layout")] + [Description("Determines the auto size mode for the visible rows.")] + public DataGridViewAutoSizeRowsMode AutoSizeRowsMode + { + get => _dataGridView.AutoSizeRowsMode; + set => _dataGridView.AutoSizeRowsMode = value; + } + + [Category("Layout")] + [Description("The width, in pixels, of the column that contains the row headers.")] + public int RowHeadersWidth + { + get => _dataGridView.RowHeadersWidth; + set => _dataGridView.RowHeadersWidth = value; + } + + [Category("Layout")] + [Description("The type of scrollbars to display.")] + public ScrollBars ScrollBars + { + get => _dataGridView.ScrollBars; + set => _dataGridView.ScrollBars = value; + } + + [Category("Visuals")] + [Description("Determine if the outer borders of the grid cells are drawn.")] + public bool HideOuterBorders + { + get => _dataGridView.HideOuterBorders; + set => _dataGridView.HideOuterBorders = value; + } + + [Category("Visuals")] + [Description("Overrides for defining common data grid view appearance that other states can override.")] + public PaletteDataGridViewRedirect StateCommon => _dataGridView.StateCommon; + + [Category("Visuals")] + [Description("Overrides for defining disabled data grid view appearance.")] + public PaletteDataGridViewAll StateDisabled => _dataGridView.StateDisabled; + + [Category("Visuals")] + [Description("Overrides for defining normal data grid view appearance.")] + public PaletteDataGridViewAll StateNormal => _dataGridView.StateNormal; + + [Category("Visuals")] + [Description("Overrides for defining tracking data grid view appearance.")] + public PaletteDataGridViewHeaders StateTracking => _dataGridView.StateTracking; + + [Category("Visuals")] + [Description("Overrides for defining pressed data grid view appearance.")] + public PaletteDataGridViewHeaders StatePressed => _dataGridView.StatePressed; + + [Category("Visuals")] + [Description("Overrides for defining selected data grid view appearance.")] + public PaletteDataGridViewCells StateSelected => _dataGridView.StateSelected; + + [Category("Visuals")] + [Description("Set of grid styles.")] + public DataGridViewStyles GridStyles => _dataGridView.GridStyles; + + [Category("Visuals")] + [Description("Palette applied to drawing.")] + public PaletteMode PaletteMode + { + get => _dataGridView.PaletteMode; + set => _dataGridView.PaletteMode = value; + } + + [Category("Layout")] + [Description("The size of the control is pixels.")] + public Size Size + { + get => _dataGridView.Size; + set => _dataGridView.Size = value; + } + + [Category("Layout")] + [Description("The location of the control in pixels.")] + public Point Location + { + get => _dataGridView.Location; + set => _dataGridView.Location = value; + } + + [Category("Behavior")] + [Description("Indicates whether the control is enabled.")] + public bool Enabled + { + get => _dataGridView.Enabled; + set => _dataGridView.Enabled = value; + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonFormTitleStyle.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonFormTitleStyle.cs index 47c18d43d..2c0db4a78 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonFormTitleStyle.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonFormTitleStyle.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonInputBoxType.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonInputBoxType.cs index 591d70641..fb1200a03 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonInputBoxType.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonInputBoxType.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxButtons.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxButtons.cs deleted file mode 100644 index 7626ab35a..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxButtons.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region BSD License -/* - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - /// Specifies constants defining which buttons to display on a . - public enum KryptonMessageBoxButtons - { - /// - /// Specifies that the message box contains an OK button. - /// - OK = MessageBoxButtons.OK, - - /// - /// Specifies that the message box contains OK and Cancel buttons. - /// - OKCancel = MessageBoxButtons.OKCancel, - - /// - /// Specifies that the message box contains Abort, Retry, and Ignore buttons. - /// - AbortRetryIgnore = MessageBoxButtons.AbortRetryIgnore, - - /// - /// Specifies that the message box contains Yes, No, and Cancel buttons. - /// - YesNoCancel = MessageBoxButtons.YesNoCancel, - - /// - /// Specifies that the message box contains Yes and No buttons. - /// - YesNo = MessageBoxButtons.YesNo, - - /// - /// Specifies that the message box contains Retry and Cancel buttons. - /// - RetryCancel = MessageBoxButtons.RetryCancel, - - /// - /// Specifies that the message box contains Cancel, Try Again, and Continue buttons. - /// -#if NET60_OR_GREATER - CancelTryContinue = MessageBoxButtons.CancelTryContinue -#else - CancelTryContinue = 0x00000006 -#endif - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxDefaultButton.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxDefaultButton.cs deleted file mode 100644 index dcd4a3726..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxDefaultButton.cs +++ /dev/null @@ -1,30 +0,0 @@ -#region BSD License -/* - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - /// Specifies constants defining the default button on a . - public enum KryptonMessageBoxDefaultButton - { - /// The first button on the message box is the default button. - Button1 = 0, - - /// The second button on the message box is the default button. - Button2 = 256, - - /// The third button on the message box is the default button. - Button3 = 512, - - /// Specifies that the Help button on the message box should be the default button. - Button4 = 768, - - /// The accelerator button. - Button5 = 1024 - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxIcon.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxIcon.cs deleted file mode 100644 index f9fd49e18..000000000 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/KryptonMessageBoxIcon.cs +++ /dev/null @@ -1,78 +0,0 @@ -#region BSD License -/* - * - * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. - * - */ -#endregion - -namespace Krypton.Toolkit -{ - /// Specifies the icon type for . - public enum KryptonMessageBoxIcon - { - /// Specify no icon. - None = 0, - - /// Specify a hand icon. - Hand = 1, - - /// Specify the system hand icon. - SystemHand = MessageBoxIcon.Hand, - - /// Specify a question icon. - Question = 2, - - /// Specify the system question icon. - SystemQuestion = MessageBoxIcon.Question, - - /// Specify a exclamation icon. - Exclamation = 3, - - /// Specify the system exclamation icon. - SystemExclamation = MessageBoxIcon.Exclamation, - - /// Specify a asterisk icon. - Asterisk = 4, - - /// Specify the system asterisk icon. - SystemAsterisk = MessageBoxIcon.Asterisk, - - /// Specify a stop icon. - Stop = 5, - - /// Specify the system stop icon. - SystemStop = MessageBoxIcon.Stop, - - /// Specify a error icon. - Error = 6, - - /// Specify the system error icon. - SystemError = MessageBoxIcon.Error, - - /// Specify a warning icon. - Warning = 7, - - /// Specify the system warning icon. - SystemWarning = MessageBoxIcon.Warning, - - /// Specify a information icon. - Information = 8, - - /// Specify the system information icon. - SystemInformation = MessageBoxIcon.Information, - - /// Specify a UAC shield icon. - Shield = 9, - - /// Specify a Windows logo icon. - WindowsLogo = 10, - - /// Specify your application icon. - Application = 11, - - /// Specify the default system application icon. See . - SystemApplication = 12 - } -} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/LanguagePackManager.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/LanguagePackManager.cs index 32a23b130..2e15fdaa3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/LanguagePackManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/LanguagePackManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class LanguagePackManager : Storage { #region Instance Fields - private readonly ArrayList _installedLanguagesList = new ArrayList(); + private readonly ArrayList _installedLanguagesList = []; #endregion @@ -26,6 +26,8 @@ internal class LanguagePackManager : Storage #endregion + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault { get; } #region Identity diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/LibraryImportAttribute.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/LibraryImportAttribute.cs new file mode 100644 index 000000000..c61f9f23e --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/LibraryImportAttribute.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + + +namespace System.Runtime.InteropServices +{ + internal class LibraryImportAttribute : Attribute; +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/NativeLibraryImports.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/NativeLibraryImports.cs new file mode 100644 index 000000000..14423d195 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/NativeLibraryImports.cs @@ -0,0 +1,10 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Drawing +{ + /*internal class NativeLibraryImports + { + [DllImport(@"shell32.dll"), Sig] + }*/ +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/OSUtilities.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/OSUtilities.cs index 4f6a5ea2c..20636f3c5 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/OSUtilities.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/OSUtilities.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,39 +15,29 @@ namespace Krypton.Toolkit /// Gets access to specific information about the client operating system. public class OSUtilities { - #region Identity - - /// Initializes a new instance of the class. - public OSUtilities() - { - - } - - #endregion - #region Implementation // Note: Update these, once a new public upgrade becomes GA /// Gets a value indicating whether the client version is Windows 7. /// true if the client version is Windows 7; otherwise, false. - public static bool IsWindowsSeven => Environment.OSVersion.Version is { Major: >= 6, Minor: >= 1 }; + public static bool IsWindowsSeven => Environment.OSVersion.Version is { Major: 6, Minor: 1 }; /// Gets a value indicating whether the client version is Windows 8. /// true if the client version is Windows 8; otherwise, false. - public static bool IsWindowsEight => Environment.OSVersion.Version is { Major: >= 6, Minor: >= 2 }; + public static bool IsWindowsEight => Environment.OSVersion.Version is { Major: 6, Minor: 2 }; /// Gets a value indicating whether the client version is Windows 8.1. /// true if the client version is Windows 8.1; otherwise, false. - public static bool IsWindowsEightPointOne => Environment.OSVersion.Version is { Major: >= 6, Minor: >= 3 }; + public static bool IsWindowsEightPointOne => Environment.OSVersion.Version is { Major: 6, Minor: 3 }; /// Gets a value indicating whether the client version is Windows 10. /// true if the client version is Windows 10; otherwise, false. - public static bool IsWindowsTen => Environment.OSVersion.Version is { Major: >= 10, Build: <= 19045 }; + public static bool IsWindowsTen => Environment.OSVersion.Version is { Major: 10, Build: <= 19045 }; /// Gets a value indicating whether the client version is Windows 11. /// true if the client version is Windows 11; otherwise, false. - public static bool IsWindowsEleven => Environment.OSVersion.Version is { Major: >= 10, Build: <= 22621 }; + public static bool IsAtLeastWindowsEleven => Environment.OSVersion.Version is { Major: >= 10, Build: > 19045 }; /// Gets a value indicating whether the client is a 64 bit operating system. /// true if the client is a 64 bit operating system; otherwise, false. diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/OutlookGridLanguageManager.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/OutlookGridLanguageManager.cs new file mode 100644 index 000000000..a24800bf3 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/OutlookGridLanguageManager.cs @@ -0,0 +1,94 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + internal class OutlookGridLanguageManager + { + #region Instance Fields + + private static OutlookGridLanguageManager? _mInstance = null; + + private static readonly object _myLock = new(); + private ResourceManager _rm; + + private CultureInfo _ci; + //Used for blocking critical sections on updates + private object _locker = new(); + + #endregion + + #region Identity + + public OutlookGridLanguageManager() + { + _rm = new ResourceManager("Krypton.Toolkit.ResourceFiles.OutlookGrid.Strings.OutlookGridStringResources", Assembly.GetExecutingAssembly()); + _ci = Thread.CurrentThread.CurrentCulture; //CultureInfo.CurrentCulture; + } + + #endregion + + #region Public + + /// Gets or sets the P locker. + /// The P locker. + public object PLocker + { + get => _locker; + + set => _locker = value; + } + + /// Gets the instance of the singleton. + public static OutlookGridLanguageManager Instance + { + get + { + if (_mInstance == null) + { + lock (_myLock) + { + if (_mInstance == null) + { + _mInstance = new OutlookGridLanguageManager(); + } + } + } + + return _mInstance; + } + } + + #endregion + + #region Implementation + + /// + /// Get localized string + /// + /// + /// + /// + public string GetString(string name) => _rm.GetString(name, _ci)!; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/PaletteImageScaler.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/PaletteImageScaler.cs index 9cf45159a..2f71703c6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/PaletteImageScaler.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/PaletteImageScaler.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/Portable.System.ValueTuple.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/Portable.System.ValueTuple.cs index da775bc09..d3047d6a4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/Portable.System.ValueTuple.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/Portable.System.ValueTuple.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. */ #endregion @@ -111,14 +111,14 @@ internal struct ValueTuple : IEquatable, ///
/// The object to compare with this instance. /// if is a . - public override bool Equals(object obj) => obj is ValueTuple; + public override bool Equals(object? obj) => obj is ValueTuple; /// Returns a value indicating whether this instance is equal to a specified value. /// An instance to compare to this instance. /// true if has the same value as this instance; otherwise, false. public bool Equals(ValueTuple other) => true; - int IComparable.CompareTo(object other) + int IComparable.CompareTo(object? other) { return other switch { @@ -142,11 +142,11 @@ int IComparable.CompareTo(object other) /// A 32-bit signed integer hash code. public override int GetHashCode() => 0; - bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) => other is ValueTuple; + bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer) => other is ValueTuple; int IStructuralEquatable.GetHashCode(IEqualityComparer comparer) => 0; - int IStructuralComparable.CompareTo(object other, IComparer comparer) + int IStructuralComparable.CompareTo(object? other, IComparer comparer) { return other switch { @@ -267,7 +267,7 @@ public ValueTuple(T1 item1, T2 item2) /// Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component. /// /// - public override bool Equals(object obj) => obj is ValueTuple tuple && Equals(tuple); + public override bool Equals(object? obj) => obj is ValueTuple tuple && Equals(tuple); /// /// Returns a value that indicates whether the current instance is equal to a specified . @@ -282,7 +282,7 @@ public bool Equals(ValueTuple other) => EqualityComparer.Default.Equals(Item1, other.Item1) && EqualityComparer.Default.Equals(Item2, other.Item2); - int IComparable.CompareTo(object other) + int IComparable.CompareTo(object? other) { return other switch { @@ -306,7 +306,7 @@ public int CompareTo(ValueTuple other) return c != 0 ? c : Comparer.Default.Compare(Item2, other.Item2); } - bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) + bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer) { return other switch { @@ -315,7 +315,7 @@ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) }; } - int IStructuralComparable.CompareTo(object other, IComparer comparer) + int IStructuralComparable.CompareTo(object? other, IComparer comparer) { switch (other) { @@ -343,8 +343,8 @@ public override int GetHashCode() => Item2?.GetHashCode() ?? 0); private int GetHashCodeCore(IEqualityComparer comparer) => - ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1), - comparer.GetHashCode(Item2)); + ValueTuple.CombineHashCodes(comparer.GetHashCode(Item1!), + comparer.GetHashCode(Item2!)); int IValueTupleInternal.GetHashCode(IEqualityComparer comparer) => GetHashCodeCore(comparer); @@ -376,8 +376,8 @@ object ITuple.this[int index] { return index switch { - 0 => Item1, - 1 => Item2, + 0 => Item1!, + 1 => Item2!, _ => throw new IndexOutOfRangeException() }; } @@ -442,7 +442,7 @@ public ValueTuple(T1 item1, T2 item2, T3 item3, T4 item4) /// Its components are equal to those of the current instance. Equality is determined by the default object equality comparer for each component. /// /// - public override bool Equals(object obj) + public override bool Equals(object? obj) { return obj is ValueTuple && Equals((ValueTuple)obj); } @@ -466,7 +466,7 @@ public bool Equals(ValueTuple other) EqualityComparer.Default.Equals(Item4, other.Item4); } - int IComparable.CompareTo(object other) + int IComparable.CompareTo(object? other) { if (other == null) return 1; @@ -495,7 +495,7 @@ public int CompareTo(ValueTuple other) return Comparer.Default.Compare(Item4, other.Item4); } - bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) + bool IStructuralEquatable.Equals(object? other, IEqualityComparer comparer) { if (!(other is ValueTuple)) return false; @@ -508,7 +508,7 @@ bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer) comparer.Equals(Item4, objTuple.Item4); } - int IStructuralComparable.CompareTo(object other, IComparer comparer) + int IStructuralComparable.CompareTo(object? other, IComparer comparer) { if (other == null) return 1; @@ -547,10 +547,10 @@ public override int GetHashCode() int GetHashCodeCore(IEqualityComparer comparer) { return ValueTuple.CombineHashCodes( - comparer.GetHashCode(Item1), - comparer.GetHashCode(Item2), - comparer.GetHashCode(Item3), - comparer.GetHashCode(Item4)); + comparer.GetHashCode(Item1!), + comparer.GetHashCode(Item2!), + comparer.GetHashCode(Item3!), + comparer.GetHashCode(Item4!)); } int IValueTupleInternal.GetHashCode(IEqualityComparer comparer) @@ -590,10 +590,10 @@ object ITuple.this[int index] { switch (index) { - case 0 : return Item1; - case 1 : return Item2; - case 2 : return Item3; - case 3 : return Item4; + case 0 : return Item1!; + case 1 : return Item2!; + case 2 : return Item3!; + case 3 : return Item4!; default: throw new IndexOutOfRangeException(); } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/RoundedRectangleF.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/RoundedRectangleF.cs index e2d056bfe..6af4a1642 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/RoundedRectangleF.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/RoundedRectangleF.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/SystemIconsCustom.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/SystemIconsCustom.cs new file mode 100644 index 000000000..aa9a19a26 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/SystemIconsCustom.cs @@ -0,0 +1,84 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Drawing +{ + /*internal class SystemIconsCustom + { + #region Implementation + + /// + /// Gets the specified Windows shell stock icon. + /// + /// The stock icon to retrieve. + /// Options for retrieving the icon. + /// The requested . + /// + /// + /// Unlike the static icon properties in , this API returns icons that are themed + /// for the running version of Windows. Additionally, the returned is not cached and + /// should be disposed when no longer needed. + /// + /// + /// is an invalid . + public static unsafe Icon GetStockIcon(StockIconId stockIcon, StockIconOptions options = StockIconOptions.Default) + { + // Note that we don't explicitly check for invalid StockIconId to allow for accessing newer ids introduced + // in later OSes. The HRESULT returned for undefined ids gets converted to an ArgumentException. + + Interop.Shell32.SHSTOCKICONINFO info = new() + { + cbSize = (uint)sizeof(Interop.Shell32.SHSTOCKICONINFO), + }; + + Interop.HRESULT result = Interop.Shell32.SHGetStockIconInfo( + (uint)stockIcon, + (uint)options | Interop.Shell32.SHGSI_ICON, + ref info); + + // This only throws if there is an error. + Marshal.ThrowExceptionForHR((int)result); + + return new Icon(info.hIcon, takeOwnership: true); + } + + /// + /// + /// The desired size. If the specified size does not exist, an existing size will be resampled to give the + /// requested size. + /// + public static unsafe Icon GetStockIcon(StockIconId stockIcon, int size) + { + // Note that we don't explicitly check for invalid StockIconId to allow for accessing newer ids introduced + // in later OSes. The HRESULT returned for undefined ids gets converted to an ArgumentException. + + Interop.Shell32.SHSTOCKICONINFO info = new() + { + cbSize = (uint)sizeof(Interop.Shell32.SHSTOCKICONINFO), + }; + + Interop.HRESULT result = Interop.Shell32.SHGetStockIconInfo( + (uint)stockIcon, + Interop.Shell32.SHGSI_ICONLOCATION, + ref info); + + // This only throws if there is an error. + Marshal.ThrowExceptionForHR((int)result); + + nint hicon = 0; + result = Interop.Shell32.SHDefExtractIcon( + info.szPath, + info.iIcon, + 0, + &hicon, + null, + (uint)(ushort)size << 16 | (ushort)size); + + Marshal.ThrowExceptionForHR((int)result); + + return new Icon(hicon, takeOwnership: true); + } + + #endregion + }*/ +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/TimedCache.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/TimedCache.cs index 8115fb7b5..dbbbe085a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/TimedCache.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/TimedCache.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/UACShieldIconSize.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/UACShieldIconSize.cs index c88852f47..901c01080 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Utilities/UACShieldIconSize.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/UACShieldIconSize.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Utilities/WindowUtilities.cs b/Source/Krypton Components/Krypton.Toolkit/Utilities/WindowUtilities.cs new file mode 100644 index 000000000..e6ec664d8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Utilities/WindowUtilities.cs @@ -0,0 +1,45 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + public static class WindowUtilities + { + #region Implementation + + /*public static void EnableAcrylic(IWin32Window owner, Color blurColor) + { + if (owner is null) + { + throw new ArgumentNullException(nameof(owner)); + } + + var accentPolicy = new PI.AccentPolicy + { + AccentState = PI.ACCENT.ENABLE_ACRYLICBLURBEHIND, + GradientColor = ToAbgr(blurColor) + }; + + unsafe + { + PI.SetWindowCompositionAttribute(new HandleRef(owner, owner.Handle), + new PI.WindowCompositionAttributeData() + { + Attribute = PI.WCA.ACCENT_POLICY, + Data = &accentPolicy, + DataLength = Marshal.SizeOf() + }); + } + } + + private static uint ToAbgr(Color color) => ((uint)color.A << 24) | ((uint)color.B << 16) | ((uint)color.G << 8) | color.R;*/ + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/AcrylicValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/AcrylicValues.cs new file mode 100644 index 000000000..a17566347 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Values/AcrylicValues.cs @@ -0,0 +1,59 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + [TypeConverter(typeof(ExpandableObjectConverter))] + public class AcrylicValues : GlobalId + { + #region Static Fields + + private readonly Color _acrylicColor = Color.Transparent; + + private const bool DEFAULT_ACRYLIC_ENABLED = false; + + #endregion + + #region Identity + + public AcrylicValues() + { + Reset(); + } + + #endregion + + #region Public + + public bool EnableAcrylic { get; set; } + + public Color AcrylicColor { get; set; } + + #endregion + + #region IsDefault + + [Browsable(false)] + public bool IsDefault => EnableAcrylic.Equals(DEFAULT_ACRYLIC_ENABLED) && + AcrylicColor.Equals(_acrylicColor); + + #endregion + + #region Implementation + + public void Reset() + { + EnableAcrylic = DEFAULT_ACRYLIC_ENABLED; + + AcrylicColor = _acrylicColor; + } + + #endregion + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/BlurValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/BlurValues.cs index f48807e67..23e4de539 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/BlurValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/BlurValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -117,6 +117,8 @@ public bool BlurWhenFocusLost /// /// /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => !ShouldSerializeOpacity() && !ShouldSerializeBlurWhenFocusLost() ; diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ButtonImageStates.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ButtonImageStates.cs index e8ee79845..7fb20b9c9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ButtonImageStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ButtonImageStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,10 +29,11 @@ public class ButtonImageStates : Storage /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (ImageNormal == null) && - (ImageDisabled == null) && - (ImagePressed == null) && - (ImageTracking == null); + (ImageDisabled == null) && + (ImagePressed == null) && + (ImageTracking == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ButtonValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ButtonValues.cs index 46f69559b..a8f537854 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ButtonValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ButtonValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,13 +19,19 @@ public class ButtonValues : Storage, IContentValues { #region Static Fields - private const string _defaultText = nameof(Button); + private const string DEFAULT_TEXT = nameof(Button); private static readonly string _defaultExtraText = string.Empty; #endregion #region Instance Fields + + private bool _useAsDialogButton; + private bool _useAsUACElevationButton; + private bool _showSplitOption; + private UACShieldIconSize? _uacShieldIconSize; private Image? _image; private Color _transparent; + private Color? _dropDownArrowColor; private string? _text; private string _extraText; @@ -50,9 +56,14 @@ public ButtonValues(NeedPaintHandler needPaint) // Set initial values _image = null; - _transparent = Color.Empty; - _text = _defaultText; + _transparent = GlobalStaticValues.EMPTY_COLOR; + _dropDownArrowColor = GlobalStaticValues.EMPTY_COLOR; + _text = DEFAULT_TEXT; _extraText = _defaultExtraText; + _useAsDialogButton = false; + _useAsUACElevationButton = false; + _showSplitOption = false; + _uacShieldIconSize = GlobalStaticValues.DEFAULT_UAC_SHIELD_ICON_SIZE; ImageStates = CreateImageStates(); ImageStates.NeedPaint = needPaint; } @@ -63,11 +74,17 @@ public ButtonValues(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ImageStates.IsDefault && - (Image == null) && - (ImageTransparentColor == Color.Empty) && - (Text == _defaultText) && - (ExtraText == _defaultExtraText); + (Image == null) && + (UseAsADialogButton == false) && + (UseAsUACElevationButton == false) && + (ShowSplitOption == false) && + (DropDownArrowColor == GlobalStaticValues.EMPTY_COLOR) && + //(UACShieldIconSize == UACShieldIconSize.ExtraSmall) + (ImageTransparentColor == GlobalStaticValues.EMPTY_COLOR) && + (Text == DEFAULT_TEXT) && + (ExtraText == _defaultExtraText); #endregion @@ -109,7 +126,7 @@ public Image? Image [Category(@"Visuals")] [Description(@"Label image transparent color.")] [RefreshProperties(RefreshProperties.All)] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageTransparentColor { get => _transparent; @@ -124,12 +141,12 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != Color.Empty; + private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != GlobalStaticValues.EMPTY_COLOR; /// /// Resets the ImageTransparentColor property to its default value. /// - public void ResetImageTransparentColor() => ImageTransparentColor = Color.Empty; + public void ResetImageTransparentColor() => ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content image transparent color. @@ -178,12 +195,12 @@ public string Text } } - private bool ShouldSerializeText() => Text != _defaultText; + private bool ShouldSerializeText() => Text != DEFAULT_TEXT; /// /// Resets the Text property to its default value. /// - public void ResetText() => Text = _defaultText; + public void ResetText() => Text = DEFAULT_TEXT; #endregion #region ExtraText @@ -218,6 +235,143 @@ public string ExtraText public void ResetExtraText() => ExtraText = _defaultExtraText; #endregion + #region UseAsADialogButton + + [DefaultValue(false), + Description(@"If set to true, the text will pair up with the equivalent KryptonManager's dialog button text result. (Note: You'll lose any previous text)")] + public bool UseAsADialogButton + { + get => _useAsDialogButton; + set => _useAsDialogButton = value; + } + + #endregion + + #region UseAsUACElevationButton + + /// Gets or sets a value indicating whether [use as uac elevation button]. + /// true if [use as uac elevation button]; otherwise, false. + [DefaultValue(false), + Description(@"Transforms the button into a UAC elevated button.")] + public bool UseAsUACElevationButton + { + get => _useAsUACElevationButton; + set + { + _useAsUACElevationButton = value; + + ShowUACShield(value, _uacShieldIconSize ?? UACShieldIconSize.ExtraSmall); + } + } + + #endregion + + #region UseOSUACShieldIcon + + /* + [DefaultValue(false), Description(@"Use the operating system UAC shield icon image.")] + public bool UseOSUACShieldIcon + { + get => _useOSUACShieldIcon; + + set + { + _useOSUACShieldIcon = value; + + UpdateOSUACShieldIcon(); + } + } + */ + + #endregion + + #region CustomUACShieldSize + + /* + [DefaultValue(null), Description(@"")] + public Size CustomUACShieldSize + { + get => _customUACShieldSize; + + set + { _customUACShieldSize = value; + + ShowUACShield(_useAsUACElevationButton, UACShieldIconSize.Custom, value.Width, value.Height); + } + } + */ + + #endregion + + #region UACShieldIconSize + + /// Gets or sets the size of the UAC shield icon. + /// The size of the UAC shield icon. + [DefaultValue(UACShieldIconSize.ExtraSmall), Description(@"The size of the UAC shield icon.")] + public UACShieldIconSize UACShieldIconSize + { + get => _uacShieldIconSize ?? UACShieldIconSize.ExtraSmall; + + set + { + _uacShieldIconSize = value; + + ShowUACShieldImage(_useAsUACElevationButton, value); + } + } + + #endregion + + #region ShowSpltOption + + /// Gets or sets a value indicating whether [show split option]. + /// true if [show split option]; otherwise, false. + [Category(@"Visuals")] + [DefaultValue(false)] + [Description(@"Displays the split/dropdown option.")] + public bool ShowSplitOption + { + get => _showSplitOption; + + set + { + if (value != _showSplitOption) + { + _showSplitOption = value; + + PerformNeedPaint(true); + + //Parent?.PerformLayout(); + } + } + } + + #endregion + + #region DropDownArrowColor + + /// Gets or sets the color of the drop down arrow. + /// The color of the drop down arrow. + [Category(@"Visuals")] + [Description(@"Sets the drop down arrow color.")] + [DefaultValue(typeof(Color), @"Empty")] + public Color? DropDownArrowColor + { + get => _dropDownArrowColor; + + set + { + if (_dropDownArrowColor != value) + { + _dropDownArrowColor = value ?? GlobalStaticValues.EMPTY_COLOR; + + PerformNeedPaint(true); + } + } + } + + #endregion + #region CreateImageStates /// /// Create the storage for the image states. @@ -260,5 +414,143 @@ public string ExtraText public virtual string GetLongText() => ExtraText; #endregion + + #region UserAccountControlValues + + /* + /// Gets the user account control values. + /// The user account control values. + [Category(@"Visuals")] + [Description(@"Button values")] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + public UserAccountControlShieldValues UserAccountControlValues { get; } + */ + + #endregion + + #region UAC Stuff + + /// Shows the uac shield. + /// if set to true [show uac shield]. + /// Size of the shield icon. + /// The width. + /// The height. + private void ShowUACShieldImage(bool showUACShield, UACShieldIconSize? shieldIconSize = null, int? width = null, int? height = null) + { + if (showUACShield) + { + int h = height ?? 16, w = width ?? 16; + + Image shield = SystemIcons.Shield.ToBitmap(); + + switch (shieldIconSize) + { + //case UACShieldIconSize.Custom: + // Values.Image = GraphicsExtensions.ScaleImage(shield, w, h); + // break; + case UACShieldIconSize.ExtraSmall: + Image = GraphicsExtensions.ScaleImage(shield, 16, 16); + break; + case UACShieldIconSize.Small: + Image = GraphicsExtensions.ScaleImage(shield, 32, 32); + break; + case UACShieldIconSize.Medium: + Image = GraphicsExtensions.ScaleImage(shield, 64, 64); + break; + case UACShieldIconSize.Large: + Image = GraphicsExtensions.ScaleImage(shield, 128, 128); + break; + case UACShieldIconSize.ExtraLarge: + Image = GraphicsExtensions.ScaleImage(shield, 256, 256); + break; + case null: + Image = GraphicsExtensions.ScaleImage(shield, 16, 16); + break; + } + + // Force a repaint + PerformNeedPaint(true); + } + else + { + Image = null; + } + } + + private void ShowUACShield(bool showShield, UACShieldIconSize? uacShieldIconSize) + { + switch (_uacShieldIconSize) + { + case UACShieldIconSize.ExtraSmall: + ShowUACShieldImage(showShield, UACShieldIconSize.ExtraSmall); + break; + case UACShieldIconSize.Small: + ShowUACShieldImage(showShield, UACShieldIconSize.Small); + break; + case UACShieldIconSize.Medium: + ShowUACShieldImage(showShield, UACShieldIconSize.Medium); + break; + case UACShieldIconSize.Large: + ShowUACShieldImage(showShield, UACShieldIconSize.Large); + break; + case UACShieldIconSize.ExtraLarge: + ShowUACShieldImage(showShield, UACShieldIconSize.ExtraLarge); + break; + case null: + ShowUACShieldImage(showShield, UACShieldIconSize.ExtraSmall); + break; + default: + ShowUACShieldImage(showShield, UACShieldIconSize.ExtraSmall); + break; + } + } + + /// Updates the UAC shield icon. + /// Size of the icon. + /// Size of the custom. + private void UpdateOSUACShieldIcon(UACShieldIconSize? iconSize = null, Size? customSize = null) + { + //if (OSUtilities.IsWindowsEleven) + //{ + // Image windowsElevenUacShieldImage = UACShieldIconResources.UACShieldWindows11; + + // if (iconSize == UACShieldIconSize.Custom) + // { + // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsElevenUacShieldImage); + // } + // else + // { + // UpdateShieldSize(iconSize, null, windowsElevenUacShieldImage); + // } + //} + //else if (OSUtilities.IsWindowsTen) + //{ + // Image windowsTenUacShieldImage = UACShieldIconResources.UACShieldWindows10; + + // if (iconSize == UACShieldIconSize.Custom) + // { + // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsTenUacShieldImage); + // } + // else + // { + // UpdateShieldSize(iconSize, null, windowsTenUacShieldImage); + // } + //} + //else if (OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsEight || OSUtilities.IsWindowsSeven) + //{ + // Image windowsEightUacShieldImage = UACShieldIconResources.UACShieldWindows7881; + + // if (iconSize == UACShieldIconSize.Custom) + // { + // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsEightUacShieldImage); + // } + // else + // { + // UpdateShieldSize(iconSize, null, windowsEightUacShieldImage); + // } + //} + } + + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CaptionValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CaptionValues.cs index 5f1fa05b0..75951ed13 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/CaptionValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CaptionValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -63,6 +63,7 @@ public override string Description get => base.Description; set => base.Description = value; } + #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CheckBoxImages.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CheckBoxImages.cs index b0f8cdaf5..775d35a54 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/CheckBoxImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CheckBoxImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -73,19 +73,20 @@ public CheckBoxImages(NeedPaintHandler? needPaint) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_uncheckedDisabled == null) && - (_uncheckedNormal == null) && - (_uncheckedTracking == null) && - (_uncheckedPressed == null) && - (_checkedDisabled == null) && - (_checkedNormal == null) && - (_checkedTracking == null) && - (_checkedPressed == null) && - (_indeterminateDisabled == null) && - (_indeterminateNormal == null) && - (_indeterminateTracking == null) && - (_indeterminatePressed == null); + (_uncheckedDisabled == null) && + (_uncheckedNormal == null) && + (_uncheckedTracking == null) && + (_uncheckedPressed == null) && + (_checkedDisabled == null) && + (_checkedNormal == null) && + (_checkedTracking == null) && + (_checkedPressed == null) && + (_indeterminateDisabled == null) && + (_indeterminateNormal == null) && + (_indeterminateTracking == null) && + (_indeterminatePressed == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonImageStates.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonImageStates.cs index 0f230a02d..b9d46680d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonImageStates.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonImageStates.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,10 +28,11 @@ public class CheckButtonImageStates : ButtonImageStates /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => base.IsDefault && - (ImageCheckedNormal == null) && - (ImageCheckedPressed == null) && - (ImageCheckedTracking == null); + (ImageCheckedNormal == null) && + (ImageCheckedPressed == null) && + (ImageCheckedTracking == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonValues.cs index 34bfbb91f..7f7dc4252 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CheckButtonValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ColorButtonValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ColorButtonValues.cs index a1b155a1b..ab0a13234 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ColorButtonValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ColorButtonValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -20,9 +20,9 @@ public class ColorButtonValues : Storage, { #region Static Fields - private string _defaultText = KryptonLanguageManager.ColorStrings.Color; + private readonly string _defaultText = KryptonManager.Strings.ColorStrings.Color; private static readonly string _defaultExtraText = string.Empty; - private static readonly Image _defaultImage = GenericImageResources.ButtonColorImageSmall; + private static readonly Image? _defaultImage = GenericImageResources.ButtonColorImageSmall; #endregion #region Instance Fields @@ -57,7 +57,7 @@ public ColorButtonValues(NeedPaintHandler needPaint) // Set initial values _image = _defaultImage; - _transparent = Color.Empty; + _transparent = GlobalStaticValues.EMPTY_COLOR; _text = _defaultText; _extraText = _defaultExtraText; ImageStates = CreateImageStates(); @@ -74,12 +74,13 @@ public ColorButtonValues(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => ImageStates.IsDefault && - (Image == _defaultImage) && - (ImageTransparentColor == Color.Empty) && - (Text == _defaultText) && - (ExtraText == _defaultExtraText) - && (_roundedCorners == 0) + (Image == _defaultImage) && + (ImageTransparentColor == GlobalStaticValues.EMPTY_COLOR) && + (Text == _defaultText) && + (ExtraText == _defaultExtraText) + && (_roundedCorners == 0) ; #endregion @@ -122,7 +123,7 @@ public Image? Image [Category(@"Visuals")] [Description(@"Label image transparent color.")] [RefreshProperties(RefreshProperties.All)] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageTransparentColor { get => _transparent; @@ -137,12 +138,12 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != Color.Empty; + private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != GlobalStaticValues.EMPTY_COLOR; /// /// Resets the ImageTransparentColor property to its default value. /// - public void ResetImageTransparentColor() => ImageTransparentColor = Color.Empty; + public void ResetImageTransparentColor() => ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content image transparent color. @@ -357,7 +358,7 @@ public int RoundedCorners { g.SmoothingMode = SmoothingMode.AntiAlias; // If the color is not defined, i.e. it is empty then... - if (_selectedColor.Equals(Color.Empty)) + if (_selectedColor.Equals(GlobalStaticValues.EMPTY_COLOR)) { // Indicate the absence of a color by drawing a border around // the selected color area, thus indicating the area inside the diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkImageValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkImageValues.cs new file mode 100644 index 000000000..9ec97a59f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkImageValues.cs @@ -0,0 +1,282 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +// ReSharper disable InconsistentNaming +namespace Krypton.Toolkit +{ + public class CommandLinkImageValues : Storage, IContentValues + { + #region Static Fields + + private static readonly Image? DEFAULT_IMAGE = /*MessageBoxImageResources.GenericQuestion;*/ GraphicsExtensions.ScaleImage(GraphicsExtensions.ExtractIcon(Libraries.Shell32, 16805, true)?.ToBitmap(), 32, 32); + + private static readonly Image DEFAULT_WINDOWS_11_IMAGE = CommandLinkImageResources.Windows_11_CommandLink_Arrow; + + private static readonly Image DEFAULT_WINDOWS_10_IMAGE = CommandLinkImageResources.Windows_10_CommandLink_Arrow; + + #endregion + + #region Instance Fields + + private bool _displayUACShield; + + private Color _transparencyKey; + + private Image? _image; + + private UACShieldIconSize _uacShieldIconSize; + + #endregion + + #region Public + + [DefaultValue(false)] + public bool DisplayUACShield + { + get => _displayUACShield; + + set + { + if (_displayUACShield != value) + { + _displayUACShield = value; + + switch (_uacShieldIconSize) + { + case UACShieldIconSize.ExtraSmall: + ShowUACShieldImage(value, UACShieldIconSize.ExtraSmall); + break; + case UACShieldIconSize.Small: + ShowUACShieldImage(value, UACShieldIconSize.Small); + break; + case UACShieldIconSize.Medium: + ShowUACShieldImage(value, UACShieldIconSize.Medium); + break; + case UACShieldIconSize.Large: + ShowUACShieldImage(value, UACShieldIconSize.Large); + break; + case UACShieldIconSize.ExtraLarge: + ShowUACShieldImage(value, UACShieldIconSize.ExtraLarge); + break; + default: + ShowUACShieldImage(value, UACShieldIconSize.ExtraSmall); + break; + } + } + } + } + private bool ShouldSerializeDisplayUACShield() => _displayUACShield; + private void ResetDisplayUACShield() => DisplayUACShield = false; + + /// Gets and sets the heading image transparent color. + [Category("Visuals")] + [Description("Image transparent color.")] + [RefreshProperties(RefreshProperties.All)] + [KryptonDefaultColor] + public Color ImageTransparentColor + { + get => _transparencyKey; + + set + { + if (_transparencyKey != value) + { + _transparencyKey = value; + PerformNeedPaint(true); + } + } + } + private bool ShouldSerializeImageTransparentColor() => _transparencyKey != GlobalStaticValues.EMPTY_COLOR; + private void ResetImageTransparentColor() => ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; + + /// Gets or sets the image. + /// The image. + [Category("Visuals")] + [Description("The image.")] + [RefreshProperties(RefreshProperties.All)] + //[DefaultValue(typeof(Image), @"DEFAULT_IMAGE")] + public Image? Image + { + get => _image; + set + { + if (_image != value) + { + _image = value; + PerformNeedPaint(true); + } + } + } + private bool ShouldSerializeImage() => _image != DEFAULT_IMAGE; + private void ResetImage() + { + Image = DEFAULT_IMAGE; + + // Image = DEFAULT_WINDOWS_11_IMAGE; + } + + [DefaultValue(UACShieldIconSize.Small), Description(@"")] + public UACShieldIconSize UACShieldIconSize + { + get => _uacShieldIconSize; + + set + { + _uacShieldIconSize = value; + + ShowUACShieldImage(_displayUACShield, value); + } + } + private bool ShouldSerializeUACShieldIconSize() => _uacShieldIconSize != UACShieldIconSize.Small; + private void ResetUACShieldIconSize() => UACShieldIconSize = UACShieldIconSize.Small; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// The need paint. + public CommandLinkImageValues(NeedPaintHandler needPaint) + { + NeedPaint = needPaint; + + ResetDisplayUACShield(); + + ResetImage(); + + ResetImageTransparentColor(); + + ResetUACShieldIconSize(); + } + + #endregion + + #region IsDefault + + /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => (!ShouldSerializeDisplayUACShield() && + !ShouldSerializeImage() && + !ShouldSerializeImageTransparentColor() && + !ShouldSerializeUACShieldIconSize() + ); + + #endregion + + #region Implementation + + /// + public Image? GetImage(PaletteState state) => Image; + + /// + public Color GetImageTransparentColor(PaletteState state) => ImageTransparentColor; + + /// + public string GetShortText() => string.Empty; + + /// + public string GetLongText() => string.Empty; + + /// Shows the uac shield. + /// if set to true [show uac shield]. + /// Size of the shield icon. + /// The width. + /// The height. + private void ShowUACShieldImage(bool showUACShield, UACShieldIconSize? shieldIconSize = null, int? width = null, int? height = null) + { + if (showUACShield) + { + Image shield = SystemIcons.Shield.ToBitmap(); + + switch (shieldIconSize) + { + //case UACShieldIconSize.Custom: + // {int h = height ?? 16, w = width ?? 16; + // Values.Image = GraphicsExtensions.ScaleImage(shield, w, h); + // }break; + case UACShieldIconSize.ExtraSmall: + Image = GraphicsExtensions.ScaleImage(shield, 16, 16); + break; + case UACShieldIconSize.Small: + Image = GraphicsExtensions.ScaleImage(shield, 32, 32); + break; + case UACShieldIconSize.Medium: + Image = GraphicsExtensions.ScaleImage(shield, 64, 64); + break; + case UACShieldIconSize.Large: + Image = GraphicsExtensions.ScaleImage(shield, 128, 128); + break; + case UACShieldIconSize.ExtraLarge: + Image = GraphicsExtensions.ScaleImage(shield, 256, 256); + break; + case null: + Image = GraphicsExtensions.ScaleImage(shield, 16, 16); + break; + } + + // Force a repaint + PerformNeedPaint(true); + } + else + { + // TODO: This should revert to the original image ! + //Image = null; + } + } + + /// Updates the UAC shield icon. + /// Size of the icon. + /// Size of the custom. + private void UpdateOSUACShieldIcon(UACShieldIconSize? iconSize = null, Size? customSize = null) + { + //if (OSUtilities.IsWindowsEleven) + //{ + // Image windowsElevenUacShieldImage = UACShieldIconResources.UACShieldWindows11; + + // if (iconSize == UACShieldIconSize.Custom) + // { + // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsElevenUacShieldImage); + // } + // else + // { + // UpdateShieldSize(iconSize, null, windowsElevenUacShieldImage); + // } + //} + //else if (OSUtilities.IsWindowsTen) + //{ + // Image windowsTenUacShieldImage = UACShieldIconResources.UACShieldWindows10; + + // if (iconSize == UACShieldIconSize.Custom) + // { + // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsTenUacShieldImage); + // } + // else + // { + // UpdateShieldSize(iconSize, null, windowsTenUacShieldImage); + // } + //} + //else if (OSUtilities.IsWindowsEightPointOne || OSUtilities.IsWindowsEight || OSUtilities.IsWindowsSeven) + //{ + // Image windowsEightUacShieldImage = UACShieldIconResources.UACShieldWindows7881; + + // if (iconSize == UACShieldIconSize.Custom) + // { + // UpdateShieldSize(UACShieldIconSize.Custom, customSize, windowsEightUacShieldImage); + // } + // else + // { + // UpdateShieldSize(iconSize, null, windowsEightUacShieldImage); + // } + //} + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkMainTextValue.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkMainTextValue.cs new file mode 100644 index 000000000..bdf11d03c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkMainTextValue.cs @@ -0,0 +1,30 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + public class CommandLinkMainTextValue : NullContentValues + { + #region Public + + /// Gets or sets the short text. + /// The short text. + public string ShortText { get; set; } + + #endregion + + #region Implementation + + /// Gets the content short text. + /// String value. + public override string GetShortText() => ShortText; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkSubscriptTextValue.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkSubscriptTextValue.cs new file mode 100644 index 000000000..beb34978c --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkSubscriptTextValue.cs @@ -0,0 +1,30 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + public class CommandLinkSubscriptTextValue : NullContentValues + { + #region Public + + /// Gets or sets the long text. + /// The long text. + public string LongText { get; set; } + + #endregion + + #region Implementation + + /// Gets the content long text. + /// String value. + public override string GetLongText() => LongText; + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkTextValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkTextValues.cs new file mode 100644 index 000000000..5accc7fcb --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Values/CommandLinkTextValues.cs @@ -0,0 +1,213 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +// ReSharper disable PossibleUnintendedReferenceComparison +namespace Krypton.Toolkit +{ + public class CommandLinkTextValues : CaptionValues + { + #region Static Fields + + private const string DEFAULT_HEADING = @"Krypton Command Link Button"; + + private const string DEFAULT_DESCRIPTION = @"Krypton Command Link Button ""Note Text"""; + + #endregion + + #region Instance Fields + + private Font? _descriptionFont; + + private Font? _headingFont; + + private PaletteRelativeAlign? _descriptionTextHAlignment; + + private PaletteRelativeAlign? _descriptionTextVAlignment; + + private PaletteRelativeAlign? _headingTextHAlignment; + + private PaletteRelativeAlign? _headingTextVAlignment; + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + /// Delegate for notifying paint requests. + public CommandLinkTextValues(NeedPaintHandler needPaint) : base(needPaint) + { + _descriptionFont = null; + + _headingFont = null; + + _descriptionTextHAlignment = PaletteRelativeAlign.Near; + + _descriptionTextVAlignment = PaletteRelativeAlign.Far; + + _headingTextHAlignment = PaletteRelativeAlign.Near; + + _headingTextVAlignment = PaletteRelativeAlign.Center; + } + + #endregion + + #region Protected + + /// + protected override string GetDescriptionDefault() => DEFAULT_DESCRIPTION; + + /// + protected override string GetHeadingDefault() => DEFAULT_HEADING; + + #endregion + + #region Implementation + + /// + [Category(@"CommandLink")] + [Description(@"The description text for the command link button.")] + [DefaultValue(DEFAULT_DESCRIPTION)] + public override string Description { get => base.Description; set => base.Description = value; } + + /// Resets the text. + public void ResetText() + { + Heading = DEFAULT_HEADING; + + Description = DEFAULT_DESCRIPTION; + + DescriptionFont = _descriptionFont; + + HeadingFont = _headingFont; + } + + /// Gets or sets the description font. + /// The description font. + [Category(@"CommandLink")] + [Description(@"The description text font for the command link button.")] + + [DefaultValue(null)] + public Font? DescriptionFont + { + get => _descriptionFont; + + set + { + if (_descriptionFont != value) + { + _descriptionFont = value; + + PerformNeedPaint(true); + } + } + } + + /// Gets or sets the heading font. + /// The heading font. + [Category(@"CommandLink")] + [Description(@"The heading text font for the command link button.")] + [DefaultValue(null)] + public Font? HeadingFont + { + get => _headingFont; + + set + { + if (_headingFont != value) + { + _headingFont = value; + + PerformNeedPaint(true); + } + } + } + + /// Gets or sets the description text horizontal alignment. + /// The description text horizontal alignment. + [Category(@"CommandLink")] + [Description(@"The description text horizontal alignment for the command link button.")] + [DefaultValue(null)] + public PaletteRelativeAlign? DescriptionTextHAlignment + { + get => _descriptionTextHAlignment; + + set + { + if (_descriptionTextHAlignment != value) + { + _descriptionTextHAlignment = value; + + PerformNeedPaint(true); + } + } + } + + /// Gets or sets the description text vertical alignment. + /// The description text vertical alignment. + [Category(@"CommandLink")] + [Description(@"The description text verticl alignment for the command link button.")] + [DefaultValue(null)] + public PaletteRelativeAlign? DescriptionTextVAlignment + { + get => _descriptionTextVAlignment; + + set + { + if (_descriptionTextVAlignment != value) + { + _descriptionTextVAlignment = value; + + PerformNeedPaint(true); + } + } + } + + /// Gets or sets the heading text horizontal alignment. + /// The heading text horizontal alignment. + [Category(@"CommandLink")] + [Description(@"The heading text horizontal alignment for the command link button.")] + [DefaultValue(null)] + public PaletteRelativeAlign? HeadingTextHAlignment + { + get => _headingTextHAlignment; + + set + { + if (_headingTextHAlignment != value) + { + _headingTextHAlignment = value; + + PerformNeedPaint(true); + } + } + } + + /// Gets or sets the heading text vertical alignment. + /// The heading text vertical alignment. + [Category(@"CommandLink")] + [Description(@"The heading text vertical alignment for the command link button.")] + [DefaultValue(null)] + public PaletteRelativeAlign? HeadingTextVAlignment + { + get => _headingTextVAlignment; + + set + { + if (_headingTextVAlignment != value) + { + _headingTextVAlignment = value; + + PerformNeedPaint(true); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ContextMenuImages.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ContextMenuImages.cs index c1aafc91a..cda670b41 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ContextMenuImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ContextMenuImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -45,9 +45,10 @@ public ContextMenuImages(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_checked == null) && - (_indeterminate == null) && - (_subMenu == null); + (_indeterminate == null) && + (_subMenu == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/DropDownButtonImages.cs b/Source/Krypton Components/Krypton.Toolkit/Values/DropDownButtonImages.cs index 3620dd1bf..cecbd0ede 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/DropDownButtonImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/DropDownButtonImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -38,7 +38,7 @@ public DropDownButtonImages() /// Initialize a new instance of the DropDownButtonImages class. ///
/// Delegate for notifying paint requests. - public DropDownButtonImages(NeedPaintHandler needPaint) + public DropDownButtonImages(NeedPaintHandler? needPaint) { // Store the provided paint notification delegate NeedPaint = needPaint; @@ -57,11 +57,12 @@ public DropDownButtonImages(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_disabled == null) && - (_normal == null) && - (_tracking == null) && - (_pressed == null); + (_disabled == null) && + (_normal == null) && + (_tracking == null) && + (_pressed == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/FixedContentValue.cs b/Source/Krypton Components/Krypton.Toolkit/Values/FixedContentValue.cs index 7a14cb54d..b4d21bfdf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/FixedContentValue.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/FixedContentValue.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -22,7 +22,7 @@ public class FixedContentValue : IContentValues /// Initialize a new instance of the FixedContentValue class. ///
public FixedContentValue() - : this(string.Empty, string.Empty, null, Color.Empty) + : this(string.Empty, string.Empty, null, GlobalStaticValues.EMPTY_COLOR) { } @@ -33,7 +33,7 @@ public FixedContentValue() /// Initial long text value. /// Initial image value. /// Initial image transparent color value. - public FixedContentValue(string? shortText, + public FixedContentValue(string? shortText, string? longText, Image? image, Color imageTransparentColor) @@ -95,7 +95,7 @@ public FixedContentValue(string? shortText, [Localizable(true)] public Color ImageTransparentColor { get; set; } - private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != Color.Empty; + private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != GlobalStaticValues.EMPTY_COLOR; #endregion @@ -104,7 +104,7 @@ public FixedContentValue(string? shortText, /// Gets the content short text. ///
/// String value. - public string GetShortText() => ShortText; + public string GetShortText() => ShortText!; /// /// Gets the content image. @@ -124,7 +124,7 @@ public FixedContentValue(string? shortText, /// Gets the content long text. /// /// String value. - public string GetLongText() => LongText; + public string GetLongText() => LongText!; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/GalleryButtonImages.cs b/Source/Krypton Components/Krypton.Toolkit/Values/GalleryButtonImages.cs index 75685a53e..4812a6c84 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/GalleryButtonImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/GalleryButtonImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -49,11 +49,12 @@ public GalleryButtonImages(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_disabled == null) && - (_normal == null) && - (_tracking == null) && - (_pressed == null); + (_disabled == null) && + (_normal == null) && + (_tracking == null) && + (_pressed == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/GalleryImages.cs b/Source/Krypton Components/Krypton.Toolkit/Values/GalleryImages.cs index 3cbfe5282..e8c64f560 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/GalleryImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/GalleryImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -39,9 +39,10 @@ public GalleryImages(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => Up.IsDefault && - Down.IsDefault && - DropDown.IsDefault; + Down.IsDefault && + DropDown.IsDefault; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesPrimary.cs b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesPrimary.cs index f93bb77c7..1b6169916 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesPrimary.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesPrimary.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesSecondary.cs b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesSecondary.cs index 00e19a0bc..ae2e6d067 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesSecondary.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderGroupValuesSecondary.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValues.cs index e60f86e0e..9d2c75a93 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValuesBase.cs b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValuesBase.cs index 25e3e7e80..919c895cd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValuesBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/HeaderValuesBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -19,7 +19,9 @@ public abstract class HeaderValuesBase : Storage, IContentValues { #region Static Fields - private static readonly Image _defaultImage = GenericImageResources.KryptonLogoGeneric; + + private static readonly Image? _defaultImage = GenericImageResources.KryptonLogoGeneric; + #endregion #region Instance Fields @@ -35,7 +37,7 @@ public abstract class HeaderValuesBase : Storage, ///
public event EventHandler? TextChanged; #endregion - + #region Identity /// /// Initialize a new instance of the HeaderValuesBase class. @@ -45,10 +47,10 @@ protected HeaderValuesBase(NeedPaintHandler? needPaint) { // Store the provided paint notification delegate NeedPaint = needPaint; - + // Set initial values to the default _image = GetImageDefault(); - _transparent = Color.Empty; + _transparent = GlobalStaticValues.EMPTY_COLOR; _heading = GetHeadingDefault(); _description = GetDescriptionDefault(); } @@ -59,14 +61,16 @@ protected HeaderValuesBase(NeedPaintHandler? needPaint) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Image == GetImageDefault()) && - (ImageTransparentColor == Color.Empty) && - (Heading == GetHeadingDefault()) && - (Description == GetDescriptionDefault()); + (ImageTransparentColor == GlobalStaticValues.EMPTY_COLOR) && + (Heading == GetHeadingDefault()) && + (Description == GetDescriptionDefault()); #endregion #region Default Values + /// /// Gets the default image value. /// @@ -132,7 +136,7 @@ public Image? Image [Category(@"Visuals")] [Description(@"Heading image transparent color.")] [RefreshProperties(RefreshProperties.All)] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageTransparentColor { get => _transparent; @@ -147,12 +151,12 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != Color.Empty; + private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != GlobalStaticValues.EMPTY_COLOR; /// /// Resets the ImageTransparentColor property to its default value. /// - public void ResetImageTransparentColor() => ImageTransparentColor = Color.Empty; + public void ResetImageTransparentColor() => ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content image transparent color. @@ -162,7 +166,7 @@ public Color ImageTransparentColor public virtual Color GetImageTransparentColor(PaletteState state) => ImageTransparentColor; #endregion - + #region Heading /// /// Gets and sets the heading text. diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarButtonValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarButtonValues.cs index e14abe5a0..b12f6a411 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarButtonValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarButtonValues.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -63,7 +63,7 @@ public class IntegratedToolBarButtonValues : GlobalId private bool _showQuickPrintButton; - private KryptonIntegratedToolBarManager _toolBarManager = new(); + private readonly KryptonIntegratedToolBarManager _toolBarManager = new(); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarCommandValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarCommandValues.cs index 0e7e58da0..f8000ad8d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarCommandValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarCommandValues.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -81,33 +81,33 @@ public IntegratedToolBarCommandValues() /// Resets this instance. public void Reset() { - NewButtonCommand = DEFAULT_INTEGRATED_NEW_TOOL_BAR_COMMAND; + NewButtonCommand = DEFAULT_INTEGRATED_NEW_TOOL_BAR_COMMAND!; - OpenButtonCommand = DEFAULT_INTEGRATED_OPEN_TOOL_BAR_COMMAND; + OpenButtonCommand = DEFAULT_INTEGRATED_OPEN_TOOL_BAR_COMMAND!; - SaveButtonCommand = DEFAULT_INTEGRATED_SAVE_TOOL_BAR_COMMAND; + SaveButtonCommand = DEFAULT_INTEGRATED_SAVE_TOOL_BAR_COMMAND!; - SaveAllButtonCommand = DEFAULT_INTEGRATED_SAVE_ALL_TOOL_BAR_COMMAND; + SaveAllButtonCommand = DEFAULT_INTEGRATED_SAVE_ALL_TOOL_BAR_COMMAND!; - SaveAsButtonCommand = DEFAULT_INTEGRATED_SAVE_AS_TOOL_BAR_COMMAND; + SaveAsButtonCommand = DEFAULT_INTEGRATED_SAVE_AS_TOOL_BAR_COMMAND!; - CutButtonCommand = DEFAULT_INTEGRATED_CUT_TOOL_BAR_COMMAND; + CutButtonCommand = DEFAULT_INTEGRATED_CUT_TOOL_BAR_COMMAND!; - CopyButtonCommand = DEFAULT_INTEGRATED_COPY_TOOL_BAR_COMMAND; + CopyButtonCommand = DEFAULT_INTEGRATED_COPY_TOOL_BAR_COMMAND!; - PasteButtonCommand = DEFAULT_INTEGRATED_PASTE_TOOL_BAR_COMMAND; + PasteButtonCommand = DEFAULT_INTEGRATED_PASTE_TOOL_BAR_COMMAND!; - UndoButtonCommand = DEFAULT_INTEGRATED_UNDO_TOOL_BAR_COMMAND; + UndoButtonCommand = DEFAULT_INTEGRATED_UNDO_TOOL_BAR_COMMAND!; - RedoButtonCommand = DEFAULT_INTEGRATED_REDO_TOOL_BAR_COMMAND; + RedoButtonCommand = DEFAULT_INTEGRATED_REDO_TOOL_BAR_COMMAND!; - PageSetupButtonCommand = DEFAULT_INTEGRATED_PAGE_SETUP_TOOL_BAR_COMMAND; + PageSetupButtonCommand = DEFAULT_INTEGRATED_PAGE_SETUP_TOOL_BAR_COMMAND!; - PrintPreviewButtonCommand = DEFAULT_INTEGRATED_PRINT_PREVIEW_TOOL_BAR_COMMAND; + PrintPreviewButtonCommand = DEFAULT_INTEGRATED_PRINT_PREVIEW_TOOL_BAR_COMMAND!; - PrintButtonCommand = DEFAULT_INTEGRATED_PRINT_TOOL_BAR_COMMAND; + PrintButtonCommand = DEFAULT_INTEGRATED_PRINT_TOOL_BAR_COMMAND!; - QuickPrintButtonCommand = DEFAULT_INTEGRATED_QUICK_PRINT_TOOL_BAR_COMMAND; + QuickPrintButtonCommand = DEFAULT_INTEGRATED_QUICK_PRINT_TOOL_BAR_COMMAND!; } public KryptonIntegratedToolbarNewCommand NewButtonCommand { get; set; } diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarValues.cs index d8355ae6e..1bdd5d4e0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/IntegratedToolBarValues.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -55,19 +55,22 @@ public class IntegratedToolBarValues : GlobalId [Category(@"Visuals")] [Description(@"")] [DefaultValue(DEFAULT_SHOW_ALL_TOOLBAR_ITEMS)] - public bool ShowAllToolbarItems { get => _showAllToolbarButtons; set { _showAllToolbarButtons = value; } } + public bool ShowAllToolbarItems { get => _showAllToolbarButtons; set => _showAllToolbarButtons = value; + } public ButtonSpecAny[] IntegratedToolBarItems { get => _integratedToolBarItems; private set => _integratedToolBarItems = value; } [Category(@"Visuals")] [Description(@"")] [DefaultValue(typeof(PaletteButtonOrientation), DEFAULT_BUTTON_ORIENTATION)] - public PaletteButtonOrientation ButtonOrientation { get => _buttonOrientation; set { _buttonOrientation = value; } } + public PaletteButtonOrientation ButtonOrientation { get => _buttonOrientation; set => _buttonOrientation = value; + } [Category(@"Visuals")] [Description(@"")] [DefaultValue(typeof(PaletteRelativeEdgeAlign), DEFAULT_BUTTON_ALIGNMENT)] - public PaletteRelativeEdgeAlign ButtonAlignment { get => _buttonAlignment; set { _buttonAlignment = value; } } + public PaletteRelativeEdgeAlign ButtonAlignment { get => _buttonAlignment; set => _buttonAlignment = value; + } #endregion @@ -80,7 +83,9 @@ public IntegratedToolBarValues() public override string ToString() { - return base.ToString(); + return base.ToString() is string s + ? s + : string.Empty; } #endregion @@ -88,7 +93,8 @@ public override string ToString() #region Implementation [Browsable(false)] - public bool IsDefault => ShowIntegratedToolBar.Equals(DEFAULT_SHOW_INTEGRATED_TOOLBAR) && + public bool IsDefault => FlipArrayItems.Equals(false) && + ShowIntegratedToolBar.Equals(DEFAULT_SHOW_INTEGRATED_TOOLBAR) && ShowAllToolbarItems.Equals(DEFAULT_SHOW_ALL_TOOLBAR_ITEMS) && IntegratedToolBarItems.Equals(SetupToolbarArray()) && ButtonOrientation.Equals(PaletteButtonOrientation.Auto) && @@ -191,6 +197,8 @@ private ButtonSpecAny[] SetupToolbarArray() internal void SetupToolBar() => _integratedToolBarItems = SetupToolbarArray(); + public bool FlipArrayItems { get => _flipArrayItems; set => _flipArrayItems = value; } + public ButtonSpecAny[] ReturnToolBarButtonArray() => _integratedToolBarItems; //private void SetupIntegratedToolBar(bool value, KryptonForm? owner) diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/KryptonInputBoxValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/KryptonInputBoxValues.cs new file mode 100644 index 000000000..21dbcf762 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/Values/KryptonInputBoxValues.cs @@ -0,0 +1,13 @@ +namespace Krypton.Toolkit +{ + /// Access Krypton input box settings. + [Category(@"Code")] + [Description(@"Access Krypton input box settings.")] + [TypeConverter(typeof(ExpandableObjectConverter))] + public class KryptonInputBoxValues : Storage + { + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool IsDefault => throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/LabelValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/LabelValues.cs index 6529fd950..feb8c402a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/LabelValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/LabelValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -49,7 +49,7 @@ public LabelValues(NeedPaintHandler needPaint) // Set initial values _image = null; - _transparent = Color.Empty; + _transparent = GlobalStaticValues.EMPTY_COLOR; _text = DEFAULT_TEXT; _extraText = _defaultExtraText; } @@ -60,10 +60,11 @@ public LabelValues(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (Image == null) && - (ImageTransparentColor == Color.Empty) && - (Text == DEFAULT_TEXT) && - (ExtraText == _defaultExtraText); + (ImageTransparentColor == GlobalStaticValues.EMPTY_COLOR) && + (Text == DEFAULT_TEXT) && + (ExtraText == _defaultExtraText); #endregion @@ -113,7 +114,7 @@ public Image? Image [Category(@"Visuals")] [Description(@"Label image transparent color.")] [RefreshProperties(RefreshProperties.All)] - [KryptonDefaultColor()] + [KryptonDefaultColor] public Color ImageTransparentColor { get => _transparent; @@ -128,12 +129,12 @@ public Color ImageTransparentColor } } - private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != Color.Empty; + private bool ShouldSerializeImageTransparentColor() => ImageTransparentColor != GlobalStaticValues.EMPTY_COLOR; /// /// Resets the ImageTransparentColor property to its default value. /// - public void ResetImageTransparentColor() => ImageTransparentColor = Color.Empty; + public void ResetImageTransparentColor() => ImageTransparentColor = GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content image transparent color. diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/PopupPositionValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/PopupPositionValues.cs index 5acc048e4..ff6cdcbe2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/PopupPositionValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/PopupPositionValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -100,9 +100,11 @@ public ViewBase? PlacementTarget /// /// /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => !ShouldSerializePlacementMode() - && !ShouldSerializePlacementTarget() - && !ShouldSerializePlacementRectangle() + && !ShouldSerializePlacementTarget() + && !ShouldSerializePlacementRectangle() ; #endregion Default Values } diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/PoweredByValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/PoweredByValues.cs index 2b47a33d7..da3610462 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/PoweredByValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/PoweredByValues.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -66,9 +66,11 @@ public void Reset() public LinkArea DiscordLinkArea { get; set; } + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => CaptionText.Equals(DEFAULT_CAPTION) && - DescriptionText.Equals(DEFAULT_DESCRIPTION) && - DocumentationText.Equals(DEFAULT_DOCUMENTATION) && - DiscordText.Equals(DEFAULT_DISCORD); + DescriptionText.Equals(DEFAULT_DESCRIPTION) && + DocumentationText.Equals(DEFAULT_DOCUMENTATION) && + DiscordText.Equals(DEFAULT_DISCORD); } } \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/RadioButtonImages.cs b/Source/Krypton Components/Krypton.Toolkit/Values/RadioButtonImages.cs index 7837673ac..2927e274a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/RadioButtonImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/RadioButtonImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -42,7 +42,7 @@ public RadioButtonImages() /// Initialize a new instance of the RadioButtonImages class. /// /// Delegate for notifying paint requests. - public RadioButtonImages(NeedPaintHandler needPaint) + public RadioButtonImages(NeedPaintHandler? needPaint) { // Store the provided paint notification delegate NeedPaint = needPaint; @@ -65,15 +65,16 @@ public RadioButtonImages(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_common == null) && - (_uncheckedDisabled == null) && - (_uncheckedNormal == null) && - (_uncheckedTracking == null) && - (_uncheckedPressed == null) && - (_checkedDisabled == null) && - (_checkedNormal == null) && - (_checkedTracking == null) && - (_checkedPressed == null); + (_uncheckedDisabled == null) && + (_uncheckedNormal == null) && + (_uncheckedTracking == null) && + (_uncheckedPressed == null) && + (_checkedDisabled == null) && + (_checkedNormal == null) && + (_checkedTracking == null) && + (_checkedPressed == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ShadowValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ShadowValues.cs index 572e381cf..471a1d790 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ShadowValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ShadowValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -200,6 +200,8 @@ public double Opacity /// /// /// + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => !ShouldSerializeEnableShadows() && !ShouldSerializeOffset() && !ShouldSerializeExtraWidth() diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ShortTextValue.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ShortTextValue.cs index 2dee1f543..e419de352 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ShortTextValue.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ShortTextValue.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ internal class ShortTextValue : NullContentValues /// /// Gets and sets the short text value to use. /// - public string ShortText { get; set; } + public string? ShortText { get; set; } #endregion @@ -27,7 +27,7 @@ internal class ShortTextValue : NullContentValues /// Gets the content short text. ///
/// String value. - public override string GetShortText() => ShortText; + public override string GetShortText() => ShortText!; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ToolTipValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ToolTipValues.cs index 800c39cac..6ed13effd 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ToolTipValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ToolTipValues.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -173,12 +173,13 @@ public void Reset() /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => !ShouldSerializeEnableToolTips() - && !ShouldSerializeToolTipStyle() - && !ShouldSerializeToolTipPosition() - && !ShouldSerializeShowIntervalDelay() - && !ShouldSerializeCloseIntervalDelay() - && base.IsDefault + && !ShouldSerializeToolTipStyle() + && !ShouldSerializeToolTipPosition() + && !ShouldSerializeShowIntervalDelay() + && !ShouldSerializeCloseIntervalDelay() + && base.IsDefault ; #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/ToolkitStringValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/ToolkitStringValues.cs index 370d84d77..33cc21b09 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/ToolkitStringValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/ToolkitStringValues.cs @@ -2,7 +2,7 @@ /* * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. * */ #endregion @@ -394,6 +394,20 @@ public class ToolkitStringValues : Storage /*GlobalId*/ /// Resets the krypton scroll bar strings. public void ResetKryptonScrollBarStrings() => ScrollBarStrings.Reset(); + /// Gets the krypton toast notification strings. + /// The krypton toast notification strings. + [Category(@"Visuals")] + [Description(@"Collection of toast notificaion strings.")] + [MergableProperty(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] + [Localizable(true)] + public KryptonToastNotificationStrings KryptonToastNotificationStrings => ToastNotificationStrings; + + private bool ShouldSerializeKryptonToastNotificationStrings() => !ToastNotificationStrings.IsDefault; + + /// Resets the krypton toast notification strings. + public void ResetKryptonToastNotificationStrings() => ToastNotificationStrings.Reset(); + #endregion #region Static Strings @@ -507,6 +521,8 @@ public static GeneralToolkitStrings GeneralToolkitStrings /// The scroll bar strings. public static KryptonScrollBarStrings ScrollBarStrings { get; } = new(); + public static KryptonToastNotificationStrings ToastNotificationStrings { get; } = new(); + #endregion #region Identity @@ -521,32 +537,35 @@ public ToolkitStringValues() /// A that represents this instance. public override string ToString() => !IsDefault ? "Modified" : string.Empty; + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => !(ShouldSerializeCustomStrings() || - ShouldSerializeGeneralStrings() || - ShouldSerializeColorStrings() || - ShouldSerializePaletteModeStrings() || - ShouldSerializeButtonSpecStyleStrings() || - ShouldSerializeDataGridViewStyleStrings() || - ShouldSerializeGridStyleStrings() || - ShouldSerializeHeaderGroupCollapsedTargetStrings() || - ShouldSerializeHeaderStyleStrings() || - ShouldSerializeInputControlStyleStrings() || - ShouldSerializeIntegratedToolBarStrings() || - ShouldSerializeKryptonLinkBehaviorStrings() || - ShouldSerializePaletteBackStyleStrings() || - ShouldSerializePaletteBorderStyleStrings() || - ShouldSerializePaletteButtonOrientationStrings() || - ShouldSerializePaletteButtonSpecStyleStrings() || - ShouldSerializePaletteButtonStyleStrings() || - ShouldSerializePaletteContentStyleStrings() || - ShouldSerializePaletteImageEffectStrings() || - ShouldSerializePaletteImageStyleStrings() || - ShouldSerializePaletteTextTrimStrings() || - ShouldSerializePlacementModeStrings() || - ShouldSerializeSeparatorStyleStrings() || - ShouldSerializeTabBorderStyleStrings() || - ShouldSerializeTabStyleStrings() || - ShouldSerializeKryptonScrollBarStrings()); + ShouldSerializeGeneralStrings() || + ShouldSerializeColorStrings() || + ShouldSerializePaletteModeStrings() || + ShouldSerializeButtonSpecStyleStrings() || + ShouldSerializeDataGridViewStyleStrings() || + ShouldSerializeGridStyleStrings() || + ShouldSerializeHeaderGroupCollapsedTargetStrings() || + ShouldSerializeHeaderStyleStrings() || + ShouldSerializeInputControlStyleStrings() || + ShouldSerializeIntegratedToolBarStrings() || + ShouldSerializeKryptonLinkBehaviorStrings() || + ShouldSerializePaletteBackStyleStrings() || + ShouldSerializePaletteBorderStyleStrings() || + ShouldSerializePaletteButtonOrientationStrings() || + ShouldSerializePaletteButtonSpecStyleStrings() || + ShouldSerializePaletteButtonStyleStrings() || + ShouldSerializePaletteContentStyleStrings() || + ShouldSerializePaletteImageEffectStrings() || + ShouldSerializePaletteImageStyleStrings() || + ShouldSerializePaletteTextTrimStrings() || + ShouldSerializePlacementModeStrings() || + ShouldSerializeSeparatorStyleStrings() || + ShouldSerializeTabBorderStyleStrings() || + ShouldSerializeTabStyleStrings() || + ShouldSerializeKryptonScrollBarStrings() || + ShouldSerializeKryptonToastNotificationStrings()); #endregion @@ -638,6 +657,8 @@ public void Reset() ResetTabStyleStrings(); ResetKryptonScrollBarStrings(); + + ResetKryptonToastNotificationStrings(); } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/TreeViewImages.cs b/Source/Krypton Components/Krypton.Toolkit/Values/TreeViewImages.cs index 421c1d572..82e07be98 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/TreeViewImages.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/TreeViewImages.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -35,7 +35,7 @@ public TreeViewImages() /// Initialize a new instance of the TreeViewImages class. ///
/// Delegate for notifying paint requests. - public TreeViewImages(NeedPaintHandler needPaint) + public TreeViewImages(NeedPaintHandler? needPaint) { // Store the provided paint notification delegate NeedPaint = needPaint; @@ -51,8 +51,9 @@ public TreeViewImages(NeedPaintHandler needPaint) /// Gets a value indicating if all values are default. ///
[Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (_plus == null) && - (_minus == null); + (_minus == null); #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/Values/UACShieldValues.cs b/Source/Krypton Components/Krypton.Toolkit/Values/UserAccountControlShieldValues.cs similarity index 61% rename from Source/Krypton Components/Krypton.Toolkit/Values/UACShieldValues.cs rename to Source/Krypton Components/Krypton.Toolkit/Values/UserAccountControlShieldValues.cs index 3c217e9e4..0ffd1aabf 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Values/UACShieldValues.cs +++ b/Source/Krypton Components/Krypton.Toolkit/Values/UserAccountControlShieldValues.cs @@ -1,13 +1,14 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. */ #endregion namespace Krypton.Toolkit { - public class UACShieldValues : ButtonValues + [TypeConverter(typeof(ExpandableObjectConverter))] + public class UserAccountControlShieldValues : NullContentValues { #region Instance Fields @@ -21,17 +22,15 @@ public class UACShieldValues : ButtonValues #endregion - public override bool IsDefault => - (UseAsUACShieldButton == false) && - (UseOSStyleImage == false) && - (ShieldIconSize == UACShieldIconSize.ExtraSmall) && - (CustomImageSize == Size.Empty); - #region Identity - public UACShieldValues(NeedPaintHandler needPaint) : base(needPaint) + public UserAccountControlShieldValues() { - ShieldIconSize = UACShieldIconSize.ExtraSmall; + _useAsUACShieldButton = false; + + _useOSStyleImage = true; + + _iconSize = UACShieldIconSize.Small; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.Designer.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.Designer.cs new file mode 100644 index 000000000..a735366a8 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.Designer.cs @@ -0,0 +1,114 @@ +namespace Krypton.Toolkit +{ + partial class InternalAssemblyDetails + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tlpMain = new System.Windows.Forms.TableLayoutPanel(); + this.kcbAssembly = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kdgvAssemblyDetails = new Krypton.Toolkit.KryptonDataGridView(); + this.tlpMain.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcbAssembly)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvAssemblyDetails)).BeginInit(); + this.SuspendLayout(); + // + // tlpMain + // + this.tlpMain.BackColor = System.Drawing.Color.Transparent; + this.tlpMain.ColumnCount = 1; + this.tlpMain.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Controls.Add(this.kcbAssembly, 0, 0); + this.tlpMain.Controls.Add(this.kryptonBorderEdge1, 0, 1); + this.tlpMain.Controls.Add(this.kdgvAssemblyDetails, 0, 2); + this.tlpMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tlpMain.Location = new System.Drawing.Point(0, 0); + this.tlpMain.Name = "tlpMain"; + this.tlpMain.RowCount = 3; + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle()); + this.tlpMain.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpMain.Size = new System.Drawing.Size(635, 488); + this.tlpMain.TabIndex = 0; + // + // kcbAssembly + // + this.kcbAssembly.Dock = System.Windows.Forms.DockStyle.Fill; + this.kcbAssembly.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcbAssembly.DropDownWidth = 625; + this.kcbAssembly.IntegralHeight = false; + this.kcbAssembly.Location = new System.Drawing.Point(5, 5); + this.kcbAssembly.Margin = new System.Windows.Forms.Padding(5); + this.kcbAssembly.Name = "kcbAssembly"; + this.kcbAssembly.Size = new System.Drawing.Size(625, 21); + this.kcbAssembly.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcbAssembly.TabIndex = 0; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderSecondary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(5, 36); + this.kryptonBorderEdge1.Margin = new System.Windows.Forms.Padding(5); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(625, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kdgvAssemblyDetails + // + this.kdgvAssemblyDetails.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kdgvAssemblyDetails.Dock = System.Windows.Forms.DockStyle.Fill; + this.kdgvAssemblyDetails.Location = new System.Drawing.Point(5, 47); + this.kdgvAssemblyDetails.Margin = new System.Windows.Forms.Padding(5); + this.kdgvAssemblyDetails.Name = "kdgvAssemblyDetails"; + this.kdgvAssemblyDetails.Size = new System.Drawing.Size(625, 436); + this.kdgvAssemblyDetails.TabIndex = 2; + // + // InternalAssemblyDetails + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.Transparent; + this.Controls.Add(this.tlpMain); + this.Name = "InternalAssemblyDetails"; + this.Size = new System.Drawing.Size(635, 488); + this.tlpMain.ResumeLayout(false); + this.tlpMain.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcbAssembly)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kdgvAssemblyDetails)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private TableLayoutPanel tlpMain; + private KryptonComboBox kcbAssembly; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonDataGridView kdgvAssemblyDetails; + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.cs new file mode 100644 index 000000000..f0c0702d1 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + public partial class InternalAssemblyDetails : UserControl + { + public InternalAssemblyDetails() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.resx b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalAssemblyDetails.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/InternalKryptonStringCollectionEditor.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalKryptonStringCollectionEditor.cs index fd087c97f..bd4887c95 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/InternalKryptonStringCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalKryptonStringCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -110,26 +110,24 @@ private void InitializeComponent() // kbtnOk // kbtnOk.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right))); - kbtnOk.CornerRoundingRadius = -1F; kbtnOk.DialogResult = DialogResult.OK; kbtnOk.Location = new Point(382, 13); kbtnOk.Name = "kbtnOk"; kbtnOk.Size = new Size(90, 25); kbtnOk.TabIndex = 2; kbtnOk.Values.Text = "O&K"; - kbtnOk.Click += new EventHandler(kbtnOk_Click); + kbtnOk.Click += kbtnOk_Click; // // kbtnCancel // kbtnCancel.Anchor = ((AnchorStyles)((AnchorStyles.Bottom | AnchorStyles.Right))); - kbtnCancel.CornerRoundingRadius = -1F; kbtnCancel.DialogResult = DialogResult.Cancel; kbtnCancel.Location = new Point(478, 13); kbtnCancel.Name = "kbtnCancel"; kbtnCancel.Size = new Size(90, 25); kbtnCancel.TabIndex = 1; kbtnCancel.Values.Text = "C&ancel"; - kbtnCancel.Click += new EventHandler(kbtnCancel_Click); + kbtnCancel.Click += kbtnCancel_Click; // // kbEdge // @@ -163,19 +161,21 @@ private void InitializeComponent() // // kcmRichTextBoxMenu // - kcmRichTextBoxMenu.Items.AddRange(new KryptonContextMenuItemBase[] { - kryptonContextMenuItems1}); + kcmRichTextBoxMenu.Items.AddRange([ + kryptonContextMenuItems1 + ]); // // kryptonContextMenuItems1 // - kryptonContextMenuItems1.Items.AddRange(new KryptonContextMenuItemBase[] { - kryptonContextMenuItem1, + kryptonContextMenuItems1.Items.AddRange([ + kryptonContextMenuItem1, kryptonContextMenuSeparator1, kryptonContextMenuItem2, kryptonContextMenuSeparator2, kryptonContextMenuItem3, kryptonContextMenuSeparator5, - kryptonContextMenuItem7}); + kryptonContextMenuItem7 + ]); // // kryptonContextMenuItem1 // @@ -186,7 +186,7 @@ private void InitializeComponent() // kcRichTextBoxCut // kcRichTextBoxCut.Text = "kryptonCommand1"; - kcRichTextBoxCut.Execute += new EventHandler(kcRichTextBoxCut_Execute); + kcRichTextBoxCut.Execute += kcRichTextBoxCut_Execute; // // kryptonContextMenuItem2 // @@ -197,7 +197,7 @@ private void InitializeComponent() // kcRichTextBoxCopy // kcRichTextBoxCopy.Text = "kryptonCommand1"; - kcRichTextBoxCopy.Execute += new EventHandler(kcRichTextBoxCopy_Execute); + kcRichTextBoxCopy.Execute += kcRichTextBoxCopy_Execute; // // kryptonContextMenuItem3 // @@ -208,7 +208,7 @@ private void InitializeComponent() // kcRichTextBoxPaste // kcRichTextBoxPaste.Text = "kryptonCommand1"; - kcRichTextBoxPaste.Execute += new EventHandler(kcRichTextBoxPaste_Execute); + kcRichTextBoxPaste.Execute += kcRichTextBoxPaste_Execute; // // kryptonContextMenuItem7 // @@ -219,12 +219,12 @@ private void InitializeComponent() // kcRichTextBoxSelectAll // kcRichTextBoxSelectAll.Text = "kryptonCommand1"; - kcRichTextBoxSelectAll.Execute += new EventHandler(kcRichTextBoxSelectAll_Execute); + kcRichTextBoxSelectAll.Execute += kcRichTextBoxSelectAll_Execute; // // ktxtStringCollection // - ktxtStringCollection.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) - | AnchorStyles.Left) + ktxtStringCollection.Anchor = ((AnchorStyles)((((AnchorStyles.Top | AnchorStyles.Bottom) + | AnchorStyles.Left) | AnchorStyles.Right))); ktxtStringCollection.KryptonContextMenu = kcmTextBoxMenu; ktxtStringCollection.Location = new Point(13, 39); @@ -236,19 +236,21 @@ private void InitializeComponent() // // kcmTextBoxMenu // - kcmTextBoxMenu.Items.AddRange(new KryptonContextMenuItemBase[] { - kryptonContextMenuItems2}); + kcmTextBoxMenu.Items.AddRange([ + kryptonContextMenuItems2 + ]); // // kryptonContextMenuItems2 // - kryptonContextMenuItems2.Items.AddRange(new KryptonContextMenuItemBase[] { - kryptonContextMenuItem4, + kryptonContextMenuItems2.Items.AddRange([ + kryptonContextMenuItem4, kryptonContextMenuSeparator3, kryptonContextMenuItem5, kryptonContextMenuSeparator4, kryptonContextMenuItem6, kryptonContextMenuSeparator6, - kryptonContextMenuItem8}); + kryptonContextMenuItem8 + ]); // // kryptonContextMenuItem4 // @@ -259,7 +261,7 @@ private void InitializeComponent() // kcTextBoxCut // kcTextBoxCut.Text = "kryptonCommand1"; - kcTextBoxCut.Execute += new EventHandler(kcTextBoxCut_Execute); + kcTextBoxCut.Execute += kcTextBoxCut_Execute; // // kryptonContextMenuItem5 // @@ -270,7 +272,7 @@ private void InitializeComponent() // kcTextBoxCopy // kcTextBoxCopy.Text = "kryptonCommand1"; - kcTextBoxCopy.Execute += new EventHandler(kcTextBoxCopy_Execute); + kcTextBoxCopy.Execute += kcTextBoxCopy_Execute; // // kryptonContextMenuItem6 // @@ -281,7 +283,7 @@ private void InitializeComponent() // kcTextBoxPaste // kcTextBoxPaste.Text = "kryptonCommand1"; - kcTextBoxPaste.Execute += new EventHandler(kcTextBoxPaste_Execute); + kcTextBoxPaste.Execute += kcTextBoxPaste_Execute; // // kryptonContextMenuItem8 // @@ -292,7 +294,7 @@ private void InitializeComponent() // kcTextBoxSelectAll // kcTextBoxSelectAll.Text = "kryptonCommand1"; - kcTextBoxSelectAll.Execute += new EventHandler(kcTextBoxSelectAll_Execute); + kcTextBoxSelectAll.Execute += kcTextBoxSelectAll_Execute; // // klblHeader // @@ -364,13 +366,13 @@ private void InitializeComponent() /// Gets the contents of the text field. /// The contents of the text field. - [Category(@"Data"), - DefaultValue(null), + [Category(@"Data"), + DefaultValue(null), Description(@"The contents of the text field.")] - public string[]? Contents - { - get => _contents; - private set => _contents = value; + public string[]? Contents + { + get => _contents; + private set => _contents = value; } /// Gets the ok button. @@ -383,8 +385,8 @@ public string[]? Contents /// Gets or sets the owner. /// The owner. - [Category(@"Data"), - DefaultValue(null), + [Category(@"Data"), + DefaultValue(null), Description(@"")] public KryptonForm? Owner { get; set; } @@ -415,17 +417,18 @@ public InternalKryptonStringCollectionEditor() #region Implementation - private void kbtnCancel_Click(object sender, EventArgs e) => Owner.DialogResult = DialogResult.Cancel; + private void kbtnCancel_Click(object? sender, EventArgs e) => Owner!.DialogResult = DialogResult.Cancel; - private void kbtnOk_Click(object sender, EventArgs e) + private void kbtnOk_Click(object? sender, EventArgs e) { if (_useTextBox) { foreach (var line in ktxtStringCollection.Lines) { - List list = new List(); - - list.Add(line); + List list = + [ + line + ]; Contents = list.ToArray(); } @@ -434,32 +437,33 @@ private void kbtnOk_Click(object sender, EventArgs e) { foreach (var line in krtbContents.Lines) { - List list = new List(); - - list.Add(line); + List list = + [ + line + ]; Contents = list.ToArray(); } } - Owner.DialogResult = DialogResult.OK; + Owner!.DialogResult = DialogResult.OK; } - private void kcRichTextBoxCut_Execute(object sender, EventArgs e) => krtbContents.Cut(); + private void kcRichTextBoxCut_Execute(object? sender, EventArgs e) => krtbContents.Cut(); - private void kcRichTextBoxCopy_Execute(object sender, EventArgs e) => Clipboard.SetText(krtbContents.Text); + private void kcRichTextBoxCopy_Execute(object? sender, EventArgs e) => Clipboard.SetText(krtbContents.Text); - private void kcRichTextBoxPaste_Execute(object sender, EventArgs e) => krtbContents.Paste(); + private void kcRichTextBoxPaste_Execute(object? sender, EventArgs e) => krtbContents.Paste(); - private void kcTextBoxCut_Execute(object sender, EventArgs e) => ktxtStringCollection.Cut(); + private void kcTextBoxCut_Execute(object? sender, EventArgs e) => ktxtStringCollection.Cut(); - private void kcTextBoxCopy_Execute(object sender, EventArgs e) => Clipboard.SetText(ktxtStringCollection.Text); + private void kcTextBoxCopy_Execute(object? sender, EventArgs e) => Clipboard.SetText(ktxtStringCollection.Text); - private void kcTextBoxPaste_Execute(object sender, EventArgs e) => ktxtStringCollection.Paste(); + private void kcTextBoxPaste_Execute(object? sender, EventArgs e) => ktxtStringCollection.Paste(); - private void kcRichTextBoxSelectAll_Execute(object sender, EventArgs e) => krtbContents.SelectAll(); + private void kcRichTextBoxSelectAll_Execute(object? sender, EventArgs e) => krtbContents.SelectAll(); - private void kcTextBoxSelectAll_Execute(object sender, EventArgs e) => ktxtStringCollection.SelectAll(); + private void kcTextBoxSelectAll_Execute(object? sender, EventArgs e) => ktxtStringCollection.SelectAll(); internal void SetContentsArray(string[] contentArray) => _contents = contentArray; diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/InternalToastButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalToastButton.cs new file mode 100644 index 000000000..3dd005206 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/InternalToastButton.cs @@ -0,0 +1,222 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + internal class InternalToastButton : KryptonButton + { + #region Instance Fields + + private bool _isActionButton; + + private bool _isDismissButton; + + private string _processPath; + + private VisualToastNotificationBaseForm? _owner; + + private KryptonToastNotificationResult _notificationResult; + + #endregion + + #region Public + + public bool IsActionButton + { + get => _isActionButton; + + set + { + _isActionButton = value; + + Anchor = AnchorStyles.Left; + + Invalidate(); + } + } + + public bool IsDismissButton + { + get => _isDismissButton; + + set + { + _isDismissButton = value; + + Anchor = AnchorStyles.Right; + + Invalidate(); + } + } + + public string ProcessPath + { + get => _processPath; + + set => _processPath = value; + } + + public VisualToastNotificationBaseForm? Owner + { + get => _owner; + + set => _owner = value; + } + + public KryptonToastNotificationResult NotificationResult + { + get => _notificationResult; + + set => _notificationResult = value; + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new AnchorStyles Anchor + { + get => base.Anchor; + + set => base.Anchor = value; + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public new DialogResult DialogResult + { + get => base.DialogResult; + + set => base.DialogResult = value; + } + + #endregion + + #region Identity + + /// Initializes a new instance of the class. + public InternalToastButton() + { + _isActionButton = false; + + _isDismissButton = false; + + _processPath = string.Empty; + + _owner = null; + + _notificationResult = KryptonToastNotificationResult.None; + + Text = @"{0} ({1})"; + + Anchor = AnchorStyles.Right; + + AutoSize = true; + + // Use 10 pixels for padding + Margin = new Padding(GlobalStaticValues.DEFAULT_PADDING); + } + + #endregion + + #region Protected + + protected override void OnPaint(PaintEventArgs? e) + { + if (_isDismissButton) + { + _isActionButton = false; + + if (_owner is not null) + { + _owner.AcceptButton = this; + } + } + + base.OnPaint(e); + } + + protected override void OnClick(EventArgs e) + { + if (_isDismissButton && _owner != null) + { + _owner.Close(); + } + + if (_isActionButton && _owner != null) + { + if (!string.IsNullOrEmpty(_processPath)) + { + LaunchProcess(_processPath); + } + else + { + _owner.Close(); + } + } + + base.OnClick(e); + } + + #endregion + + #region Public Overrides + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public override IKryptonCommand? KryptonCommand { get; set; } + + #endregion + + #region Protected Overrides + + protected override void OnMouseClick(MouseEventArgs e) + { + if (_isDismissButton && _owner != null) + { + _owner.Close(); + } + + if (_isActionButton && _owner != null) + { + if (!string.IsNullOrEmpty(_processPath)) + { + LaunchProcess(_processPath); + } + else + { + _owner.Close(); + } + } + + base.OnMouseClick(e); + } + + protected override void OnNeedPaint(object? sender, NeedLayoutEventArgs e) + { + base.OnNeedPaint(sender, e); + } + + #endregion + + #region Implementation + + private void LaunchProcess(string processPath) + { + try + { + Process.Start(processPath); + } + catch (Exception e) + { + ExceptionHandler.CaptureException(e, showStackTrace: GlobalStaticValues.DEFAULT_USE_STACK_TRACE); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/PercentageEditingControl.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/PercentageEditingControl.cs new file mode 100644 index 000000000..518f5df25 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/PercentageEditingControl.cs @@ -0,0 +1,73 @@ +#region Licences + +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ + +//-------------------------------------------------------------------------------- +// Copyright (C) 2013-2021 JDH Software - +// +// This program is provided to you under the terms of the Microsoft Public +// License (Ms-PL) as published at https://github.com/Cocotteseb/Krypton-OutlookGrid/blob/master/LICENSE.md +// +// Visit https://www.jdhsoftware.com and follow @jdhsoftware on Twitter +// +//-------------------------------------------------------------------------------- + +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Public class for the underlying editing control + /// + [ToolboxItem(false)] + public class PercentageEditingControl : DataGridViewTextBoxEditingControl + { + #region Identity + + /// + /// Constructor + /// + public PercentageEditingControl() + : base() + { + } + + #endregion + + #region Implementation + + /// + /// Returns if the character is a valid digit + /// + /// The character. + /// True if valid digit, false otherwise. + private bool IsValidForNumberInput(char c) + { + return char.IsDigit(c); + // OrElse c = Chr(8) OrElse c = "."c OrElse c = "-"c OrElse c = "("c OrElse c = ")"c + } + + #endregion + + #region Protected Overrides + + /// + /// Overrides OnKeyPress + /// + /// + protected override void OnKeyPress(KeyPressEventArgs e) + { + if (!IsValidForNumberInput(e.KeyChar)) + { + e.Handled = true; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/TaskDialogMessageButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/TaskDialogMessageButton.cs new file mode 100644 index 000000000..c645c2f34 --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/TaskDialogMessageButton.cs @@ -0,0 +1,60 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2023 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// Internal button used by the VisualTaskDialog + /// + [ToolboxItem(false)] + public class TaskDialogMessageButton : KryptonButton + { + #region Identity + + /// + /// Gets and sets the ignoring of Alt+F4 + /// + public bool IgnoreAltF4 { get; set; } + + #endregion + + #region Protected + + /// + /// Processes Windows messages. + /// + /// The Windows Message to process. + protected override void WndProc(ref Message m) + { + switch (m.Msg) + { + case PI.WM_.KEYDOWN: + case PI.WM_.SYSKEYDOWN: + if (IgnoreAltF4) + { + // Extract the keys being pressed + var keys = (Keys)(int)m.WParam.ToInt64(); + + // If the user standard combination ALT + F4 + if ((keys == Keys.F4) && ((ModifierKeys & Keys.Alt) == Keys.Alt)) + { + // Eat the message, so standard window proc does not close the window + return; + } + } + + break; + } + + base.WndProc(ref m); + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewBase.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewBase.cs index 02fdc5ffe..5ed1cc85f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewBase.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewBase.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -416,7 +416,7 @@ public bool IsReadOnly ///
/// ViewBase index. /// ViewBase at specified index. - public abstract ViewBase? this[int index] { get; set; } + public abstract ViewBase this[int index] { get; set; } /// /// Shallow enumerate forward over children of the element. @@ -502,7 +502,7 @@ public virtual void MouseEnter() // Use mouse controller as first preference if (MouseController != null) { - MouseController.MouseEnter(OwningControl); + MouseController.MouseEnter(OwningControl!); } else { @@ -520,7 +520,7 @@ public virtual void MouseMove(Point pt) // Use mouse controller as first preference if (MouseController != null) { - MouseController.MouseMove(OwningControl, pt); + MouseController.MouseMove(OwningControl!, pt); } else { @@ -540,7 +540,7 @@ public virtual bool MouseDown(Point pt, MouseButtons button) // Use mouse controller as first preference if (MouseController != null) { - return MouseController.MouseDown(OwningControl, pt, button); + return MouseController.MouseDown(OwningControl!, pt, button); } else { @@ -559,7 +559,7 @@ public virtual void MouseUp(Point pt, MouseButtons button) // Use mouse controller as first preference if (MouseController != null) { - MouseController.MouseUp(OwningControl, pt, button); + MouseController.MouseUp(OwningControl!, pt, button); } else { @@ -577,7 +577,7 @@ public virtual void MouseLeave(ViewBase? next) // Use mouse controller as first preference if (MouseController != null) { - MouseController.MouseLeave(OwningControl, next); + MouseController.MouseLeave(OwningControl!, next); } else { @@ -615,7 +615,7 @@ public virtual void KeyDown(KeyEventArgs e) // Use key controller as first preference if (KeyController != null) { - KeyController.KeyDown(OwningControl, e); + KeyController.KeyDown(OwningControl!, e); } else { @@ -633,7 +633,7 @@ public virtual void KeyPress(KeyPressEventArgs e) // Use mouse controller as first preference if (KeyController != null) { - KeyController.KeyPress(OwningControl, e); + KeyController.KeyPress(OwningControl!, e); } else { @@ -652,7 +652,7 @@ public virtual bool KeyUp(KeyEventArgs e) // Use mouse controller as first preference if (KeyController != null) { - return KeyController.KeyUp(OwningControl, e); + return KeyController.KeyUp(OwningControl!, e); } else { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewComposite.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewComposite.cs index b6c182e53..26b226bdc 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewComposite.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewComposite.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public abstract class ViewComposite : ViewBase /// protected ViewComposite() => // Default state - _views = new List(); + _views = []; /// /// Release unmanaged and optionally managed resources. @@ -87,7 +87,7 @@ public override bool EvalTransparentPaint([DisallowNull] ViewContext context) if (child.Visible) { // Any child that returns 'true' completes the process - if (child.EvalTransparentPaint(context)) + if (child.EvalTransparentPaint(context!)) { return true; } @@ -117,7 +117,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (child.Visible) { // Ask child for it's own preferred size - Size childPreferred = child.GetPreferredSize(context); + Size childPreferred = child.GetPreferredSize(context!); // As a composite we need to be big enough to encompass the largest child if (childPreferred.Width > preferredSize.Width) @@ -146,7 +146,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Ask each child to layout in turn foreach (ViewBase child in this.Where(static child => child.Visible)) { - child.Layout(context); + child.Layout(context!); } } #endregion @@ -341,9 +341,9 @@ public override void RemoveAt(int index) /// /// ViewBase index. /// ViewBase at specified index. - public override ViewBase? this[int index] - { - get => _views?[index]; + public override ViewBase this[int index] + { + get => _views![index]; set { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContext.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContext.cs index 455963810..8f2f9f131 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContext.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContext.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,7 +37,7 @@ public class ViewContext : GlobalId, public ViewContext(ViewManager? manager, Control control, Control alignControl, - IRenderer? renderer) + IRenderer renderer) : this(manager, control, alignControl, null, renderer) { } @@ -52,7 +52,7 @@ public ViewContext(ViewManager? manager, public ViewContext(Control control, Control alignControl, Graphics? graphics, - IRenderer? renderer) + IRenderer renderer) : this(null, control, alignControl, graphics, renderer) { } @@ -66,8 +66,8 @@ public ViewContext(Control control, /// Graphics instance for drawing. /// Rendering provider. public ViewContext(ViewManager? manager, - Control control, - Control alignControl, + Control? control, + Control? alignControl, Graphics? graphics, IRenderer? renderer) { @@ -78,7 +78,7 @@ public ViewContext(ViewManager? manager, } else { - ViewManager = new ViewManager(control, new ViewLayoutNull()); + ViewManager = new ViewManager(control!, new ViewLayoutNull()); _disposeManager = true; } @@ -135,7 +135,7 @@ public ViewManager? ViewManager /// /// Gets and sets the owning control associated with rendering. /// - public Control Control + public Control? Control { [DebuggerStepThrough] get; @@ -145,7 +145,7 @@ public Control Control /// /// Gets and sets the control to use when aligning elements. /// - public Control AlignControl + public Control? AlignControl { [DebuggerStepThrough] get; @@ -164,7 +164,7 @@ public Graphics Graphics { // If the control has been created... // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression - if (Control.IsHandleCreated) + if (Control is { IsHandleCreated : true }) { // Get the graphics instance from the control _graphics = Control.CreateGraphics(); @@ -188,7 +188,7 @@ public Graphics Graphics /// /// Gets the owning top level control associated with rendering. /// - public Control TopControl + public Control? TopControl { get { @@ -196,17 +196,17 @@ public Control TopControl if (_topControl == null) { // Cache the top most owning control - _topControl = Control.TopLevelControl; + _topControl = Control?.TopLevelControl; // If no top level control was found... // (this happens at design time) if (_topControl == null) { // Start searching from the control - Control parentControl = Control; + Control? parentControl = Control; // Climb the parent chain to the top - while (parentControl.Parent != null) + while (parentControl?.Parent != null) { // Stop at the first Form instance found if (parentControl is Form) diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContextMenuManager.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContextMenuManager.cs index d449cc550..689445085 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContextMenuManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewContextMenuManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class ViewContextMenuManager : ViewManager { #region Type Definitions - private class TargetList : List { } + private class TargetList : List; #endregion #region Instance Fields @@ -834,7 +834,7 @@ private double CenterDistance(Rectangle source, Rectangle compare) return distance; } - private void OnDelayTimerExpire(object sender, EventArgs e) + private void OnDelayTimerExpire(object? sender, EventArgs e) { if (_itemDelayTimer != null) { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewControl.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewControl.cs index b3cafc0a8..d4d882a5b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -85,7 +85,7 @@ public ViewControl([DisallowNull] VisualControl rootControl) /// Gets and sets the root control for point translation and message dispatch. ///
/// Parent control. - public void UpdateParent(Control parent) + public void UpdateParent(Control? parent) { // Keep looking till we run out of parents while (parent != null) @@ -107,7 +107,7 @@ public void UpdateParent(Control parent) } // Move up another level - parent = parent.Parent; + parent = parent.Parent!; } } #endregion @@ -144,7 +144,7 @@ public void UpdateParent(Control parent) protected override void OnPaint(PaintEventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we need to paint the background as the foreground of the parent @@ -158,9 +158,9 @@ protected override void OnPaint(PaintEventArgs e) // Create a render context for drawing the view using var context = new RenderContext(GetViewManager(), this, RootInstance, e.Graphics, - e.ClipRectangle, Renderer); + e.ClipRectangle, Renderer!); // Ask the view to paint itself - ViewLayoutControl.ChildView.Render(context); + ViewLayoutControl.ChildView?.Render(context); } } @@ -171,7 +171,7 @@ protected override void OnPaint(PaintEventArgs e) protected override void OnDoubleClick(EventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? // Use the root controls view manager to process the event @@ -189,7 +189,7 @@ protected override void OnDoubleClick(EventArgs e) protected override void OnMouseMove(MouseEventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? ViewManager? viewManager = GetViewManager(); @@ -219,7 +219,7 @@ protected override void OnMouseMove(MouseEventArgs e) protected override void OnMouseDown(MouseEventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? ViewManager? viewManager = GetViewManager(); @@ -259,7 +259,7 @@ protected override void OnMouseDown(MouseEventArgs e) protected override void OnMouseUp(MouseEventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? ViewManager? viewManager = GetViewManager(); @@ -289,7 +289,7 @@ protected override void OnMouseUp(MouseEventArgs e) protected override void OnMouseLeave(EventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? // Use the root controls view manager to process the event @@ -307,7 +307,7 @@ protected override void OnMouseLeave(EventArgs e) protected override void OnKeyDown(KeyEventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? GetViewManager()?.KeyDown(e); @@ -324,7 +324,7 @@ protected override void OnKeyDown(KeyEventArgs e) protected override void OnKeyPress(KeyPressEventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? GetViewManager()?.KeyPress(e); @@ -341,7 +341,7 @@ protected override void OnKeyPress(KeyPressEventArgs e) protected override void OnKeyUp(KeyEventArgs e) { // Cannot process a message for a disposed control - if (!IsDisposed && !Disposing && !RootInstance.IsDisposed) + if (!IsDisposed && !Disposing && !RootInstance!.IsDisposed) { // Do we have a manager for processing mouse messages? GetViewManager()?.KeyUp(e); @@ -488,13 +488,13 @@ private void PaintTransparentBackground(PaintEventArgs e) _miPTB = typeof(Control).GetMethod(nameof(PaintTransparentBackground), BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, CallingConventions.HasThis, - new[] { typeof(PaintEventArgs), typeof(Rectangle), typeof(Region) }, + [typeof(PaintEventArgs), typeof(Rectangle), typeof(Region)], null); } try { - _ = _miPTB.Invoke(this, new object[] { e, ClientRectangle, null }); + _ = _miPTB?.Invoke(this, [e, ClientRectangle, null!]); } catch { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewDecorator.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewDecorator.cs index 0102f54cd..737999615 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewDecorator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewDecorator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -29,7 +29,7 @@ protected ViewDecorator([DisallowNull] ViewBase child) { Debug.Assert(child != null); _child = child; - _child.Parent = this; + _child!.Parent = this; } /// diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewLeaf.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewLeaf.cs index ae71d6c21..6353d0bee 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewLeaf.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewLeaf.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -61,8 +61,8 @@ public override void Render([DisallowNull] RenderContext context) if (Visible) { // We have no children so perform all rendering now - RenderBefore(context); - RenderAfter(context); + RenderBefore(context!); + RenderAfter(context!); } } #endregion @@ -161,8 +161,8 @@ public override int IndexOf(ViewBase item) => /// /// ViewBase index. /// ViewBase at specified index. - public override ViewBase this[int index] - { + public override ViewBase this[int index] + { get => throw new ArgumentOutOfRangeException(nameof(index)); set => throw new ArgumentOutOfRangeException(nameof(index)); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewManager.cs b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewManager.cs index 844d06bc8..184bfa7a2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Base/ViewManager.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Base/ViewManager.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -101,16 +101,16 @@ public void Attach(Control control, ViewBase root) /// Gets and sets the view root. ///
[DisallowNull] - public ViewBase? Root + public ViewBase Root { [DebuggerStepThrough] - get => _root; + get => _root!; set { Debug.Assert(value != null); _root = value; - _root.OwningControl = Control; + _root!.OwningControl = Control; } } @@ -162,10 +162,10 @@ public bool OutputDebug ///
/// Renderer provider. /// The custom-sized area for a control. - public virtual Size GetPreferredSize(IRenderer? renderer, + public virtual Size GetPreferredSize(IRenderer renderer, Size proposedSize) { - if ((renderer == null) || (Root == null)) + if (renderer == null || Root == null) { return proposedSize; } @@ -216,7 +216,7 @@ public bool EvalTransparentPaint([DisallowNull] IRenderer renderer) // Create a layout context for calculating size and positioning using var context = new ViewContext(this, Control, AlignControl, renderer); // Ask the view to perform operation - return Root.EvalTransparentPaint(context); + return Root!.EvalTransparentPaint(context); } #endregion @@ -254,7 +254,7 @@ public ViewBase? ActiveView public virtual Component? ComponentFromPoint(Point pt) { // Find the view element associated with the point - ViewBase? target = Root?.ViewFromPoint(pt); + ViewBase? target = Root.ViewFromPoint(pt); // Climb parent chain looking for the first element that has a component while (target != null) @@ -293,7 +293,7 @@ public virtual void Layout([DisallowNull] IRenderer renderer) if (!Control.IsDisposed) { // Create a layout context for calculating size and positioning - using var context = new ViewLayoutContext(this, Control, AlignControl, renderer); + using var context = new ViewLayoutContext(this, Control, AlignControl, renderer!); Layout(context); } } @@ -306,11 +306,11 @@ public virtual void Layout([DisallowNull] IRenderer renderer) public virtual void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - Debug.Assert(context.Renderer != null); + Debug.Assert(context?.Renderer != null); Debug.Assert(Root != null); // Do nothing if the control is disposed - if (!context.Control.IsDisposed) + if (!context!.Control!.IsDisposed) { if (OutputDebug) { @@ -327,7 +327,7 @@ public virtual void Layout([DisallowNull] ViewLayoutContext context) LayoutBefore?.Invoke(this, EventArgs.Empty); // Ask the view to perform a layout - Root.Layout(context); + Root?.Layout(context); // If someone is interested, tell them the layout cycle has finished LayoutAfter?.Invoke(this, EventArgs.Empty); @@ -360,7 +360,7 @@ public virtual void Layout([DisallowNull] ViewLayoutContext context) /// Renderer provider. /// A PaintEventArgs that contains the event data. /// - public virtual void Paint([DisallowNull] IRenderer renderer, PaintEventArgs e) + public virtual void Paint([DisallowNull] IRenderer renderer, PaintEventArgs? e) { Debug.Assert(renderer != null); Debug.Assert(e != null); @@ -411,7 +411,7 @@ public virtual void Paint([DisallowNull] RenderContext context) } // Ask the view to paint itself - Root.Render(context); + Root?.Render(context); if (OutputDebug) { @@ -695,7 +695,7 @@ protected virtual void UpdateViewFromPoint(Control control, Point pt) if (!MouseCaptured) { // Update the active view with that found under the mouse position - ActiveView = Root?.ViewFromPoint(pt); + ActiveView = Root.ViewFromPoint(pt); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Decorator/ViewDecoratorFixedSize.cs b/Source/Krypton Components/Krypton.Toolkit/View Decorator/ViewDecoratorFixedSize.cs index fb58ea902..e19dbddfb 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Decorator/ViewDecoratorFixedSize.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Decorator/ViewDecoratorFixedSize.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawBorderEdge.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawBorderEdge.cs index 88a960add..5383a261a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawBorderEdge.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawBorderEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -36,11 +36,11 @@ public ViewDrawBorderEdge([DisallowNull] PaletteBorderEdge palette, Debug.Assert(palette != null); // Remember initial settings - _palette = palette; + _palette = palette!; Orientation = orientation; // Create the forced border and override the graphics hint - _borderForced = new PaletteBackInheritForced(palette) + _borderForced = new PaletteBackInheritForced(palette!) { ForceGraphicsHint = PaletteGraphicsHint.None }; @@ -75,8 +75,8 @@ public void SetPalettes([DisallowNull] PaletteBorderEdge palette) Debug.Assert(palette != null); // Inherit from the newly provided palette - _palette = palette; - _borderForced.SetInherit(palette); + _palette = palette!; + _borderForced.SetInherit(palette!); // Give the forced palette to the base base.SetPalettes(_borderForced); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawButton.cs index 7811d8d43..d24e85329 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -117,12 +117,12 @@ public ViewDrawButton(IPaletteTriple paletteDisabled, _drawOuterSeparator = new ViewLayoutSeparator(1); // Create the view used to draw the split edge - _edgeRedirect = new PaletteBorderEdgeRedirect(_paletteNormal.PaletteBorder, null); + _edgeRedirect = new PaletteBorderEdgeRedirect(_paletteNormal.PaletteBorder!, null); _drawSplitBorder = new ViewDrawBorderEdge(new PaletteBorderEdge(_edgeRedirect, null), CommonHelper.VisualToOrientation(orientation)); // Our view contains background and border with content inside _drawContent = new ViewDrawContent(_paletteNormal.PaletteContent, buttonValues, orientation); - _drawCanvas = new ViewDrawSplitCanvas(_paletteNormal.PaletteBack, _paletteNormal.PaletteBorder, paletteMetric, PaletteMetricPadding.None, orientation); + _drawCanvas = new ViewDrawSplitCanvas(_paletteNormal.PaletteBack, _paletteNormal.PaletteBorder!, paletteMetric!, PaletteMetricPadding.None, orientation); // Use a docker layout to organize the contents of the canvas LayoutDocker = new ViewLayoutDocker @@ -234,7 +234,7 @@ public VisualOrientation DropDownOrientation /// /// Gets and sets the drop down capability of the button. /// - public PaletteBase? DropDownPalette + public PaletteBase DropDownPalette { get => _drawDropDownButton.Palette; set => _drawDropDownButton.Palette = value; @@ -282,7 +282,7 @@ public bool Splitter ///
public IContentValues ButtonValues { - get => _drawContent.Values; + get => _drawContent.Values!; set => _drawContent.Values = value; } #endregion @@ -317,8 +317,8 @@ public override bool Enabled { get => base.Enabled; - set - { + set + { base.Enabled = value; if (Enabled && (ElementState == PaletteState.Disabled)) @@ -350,7 +350,7 @@ public virtual VisualOrientation Orientation ///
/// Orientation of the button border and background.. /// Orientation of the button contents. - public void SetOrientation(VisualOrientation borderBackOrient, + public void SetOrientation(VisualOrientation borderBackOrient, VisualOrientation contentOrient) { _drawCanvas.Orientation = borderBackOrient; @@ -386,17 +386,6 @@ public bool UseMnemonic #endregion - #region DrawButtonComposition - /// - /// Gets and sets the composition usage of the button. - /// - public bool DrawButtonComposition - { - get => _drawCanvas.DrawCanvasOnComposition; - set => _drawCanvas.DrawCanvasOnComposition = value; - } - #endregion - #region TestForFocusCues /// /// Gets and sets the use of focus cues for deciding if focus rects are allowed. @@ -427,7 +416,7 @@ public void SetPalettes([DisallowNull] IPaletteTriple paletteDisabled, Debug.Assert(palettePressed != null); // Remember the new palette settings - _paletteDisabled = paletteDisabled!; + _paletteDisabled = paletteDisabled!; _paletteNormal = paletteNormal!; _paletteTracking = paletteTracking!; _palettePressed = palettePressed!; @@ -599,7 +588,7 @@ protected virtual void CheckPaletteState(ViewContext context) PaletteState buttonState = State; // If the actual control is not enabled, force to disabled state - if (!IsFixed && !context.Control.Enabled) + if (!IsFixed && !context.Control!.Enabled) { buttonState = PaletteState.Disabled; } @@ -665,13 +654,14 @@ protected virtual void CheckPaletteState(ViewContext context) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(buttonState.ToString()); break; } // Update with the correct palettes - _drawCanvas.SetPalettes(CurrentPalette.PaletteBack, CurrentPalette.PaletteBorder); - _drawContent.SetPalette(CurrentPalette.PaletteContent); - _edgeRedirect.SetPalette(CurrentPalette.PaletteBorder); + _drawCanvas.SetPalettes(CurrentPalette.PaletteBack, CurrentPalette.PaletteBorder!); + _drawContent.SetPalette(CurrentPalette.PaletteContent!); + _edgeRedirect.SetPalette(CurrentPalette.PaletteBorder!); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCanvas.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCanvas.cs index 5346cbe12..27b31b391 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCanvas.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCanvas.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -149,11 +149,21 @@ public virtual void SetPalettes([DisallowNull] IPaletteBack paletteBack, /// Palette source for the border. /// Palette source for the metric. public virtual void SetPalettes([DisallowNull] IPaletteBack paletteBack, - [DisallowNull]IPaletteBorder paletteBorder, + [DisallowNull] IPaletteBorder paletteBorder, IPaletteMetric? paletteMetric) { - Debug.Assert(paletteBorder != null); - Debug.Assert(paletteBack != null); + Debug.Assert(paletteBorder is not null); + Debug.Assert(paletteBack is not null); + + if (paletteBack is null) + { + throw new ArgumentNullException(nameof(paletteBack)); + } + + if(paletteBorder is null) + { + throw new ArgumentNullException(nameof(paletteBorder)); + } // Use newly provided palettes _paletteBack = paletteBack; @@ -169,7 +179,7 @@ public virtual void SetPalettes([DisallowNull] IPaletteBack paletteBack, _borderForced.SetInherit(paletteBorder!); } - _paletteMetric = paletteMetric; + _paletteMetric = paletteMetric!; } #endregion @@ -319,15 +329,9 @@ public PaletteGraphicsHint ForceGraphicsHint /// Path instance. public GraphicsPath? GetOuterBorderPath(RenderContext context) { - if (_paletteBorder != null) - { - return context.Renderer?.RenderStandardBorder.GetOutsideBorderPath(context, ClientRectangle, - _paletteBorder, Orientation, - State); - } - - // No palette details to use - return null; + return (_paletteBorder is null && context.Renderer is not null) + ? context.Renderer.RenderStandardBorder.GetOutsideBorderPath(context, ClientRectangle, _paletteBorder, Orientation, State) + : null; // No palette details to use } #endregion @@ -339,10 +343,20 @@ public PaletteGraphicsHint ForceGraphicsHint /// True if transparent areas exist; otherwise false. public override bool EvalTransparentPaint([DisallowNull] ViewContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Ask the renderer to evaluate the given palette - return context!.Renderer.EvalTransparentPaint(_paletteBack, _paletteBorder, State); + return context.Renderer.EvalTransparentPaint(_paletteBack!, _paletteBorder, State); } #endregion @@ -356,22 +370,17 @@ public override bool EvalTransparentPaint([DisallowNull] ViewContext context) /// public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } - // Ensure any content children have correct composition setting - foreach (ViewBase child in this) + if (context.Renderer is null) { - if (child is ViewDrawContent viewContent) - { - viewContent.DrawContentOnComposition = DrawCanvasOnComposition; - viewContent.Glowing = viewContent.DrawContentOnComposition; - } + throw new ArgumentNullException(nameof(context.Renderer)); } // Let base class find preferred size of the children @@ -380,9 +389,9 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Apply space the border takes up preferredSize = CommonHelper.ApplyPadding(Orientation, preferredSize, DrawTabBorder - ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, _paletteBorder, State, Orientation, + ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, _paletteBorder!, State, Orientation, TabBorderStyle) - : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder, State, Orientation)); + : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder!, State, Orientation)); // Do we have a metric source for additional padding? if (_paletteMetric != null) @@ -401,14 +410,19 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // We take on all the available display area ClientRectangle = context.DisplayRectangle; @@ -424,27 +438,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Calculate how much space the border takes up Padding padding = DrawTabBorder - ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, _paletteBorder, State, + ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, _paletteBorder!, State, Orientation, TabBorderStyle) - : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder, State, Orientation); + : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder!, State, Orientation); // Apply the padding to the client rectangle context.DisplayRectangle = CommonHelper.ApplyPadding(Orientation, ClientRectangle, padding); - // Ensure any content children have correct composition setting - foreach (ViewBase child in this) - { - if (child is ViewDrawContent viewContent) - { - // Do we need to draw the background? - var drawBackground = DrawCanvas && (_paletteBack.GetBackDraw(State) == InheritBool.True); - - // Update the content accordingly - viewContent.DrawContentOnComposition = DrawCanvasOnComposition && !drawBackground; - viewContent.Glowing = viewContent.DrawContentOnComposition; - } - } - // Let child elements layout base.Layout(context); @@ -462,18 +462,21 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Do we need to draw the background? - if (DrawCanvas - && (_paletteBack.GetBackDraw(State) == InheritBool.True) - ) + if (DrawCanvas && (_paletteBack!.GetBackDraw(State) == InheritBool.True)) { GraphicsPath borderPath; Padding borderPadding; @@ -481,26 +484,26 @@ public override void RenderBefore([DisallowNull] RenderContext context) // Ask the border renderer for a path that encloses the border if (DrawTabBorder) { - borderPath = context.Renderer.RenderTabBorder.GetTabBackPath(context, ClientRectangle, _paletteBorder, Orientation, State, TabBorderStyle); + borderPath = context.Renderer.RenderTabBorder.GetTabBackPath(context, ClientRectangle, _paletteBorder!, Orientation, State, TabBorderStyle); borderPadding = Padding.Empty; } else { - borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, _paletteBorder, Orientation, State); - borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(_paletteBorder, State, Orientation); + borderPath = context.Renderer.RenderStandardBorder.GetBackPath(context, ClientRectangle, _paletteBorder!, Orientation, State); + borderPadding = context.Renderer.RenderStandardBorder.GetBorderRawPadding(_paletteBorder!, State, Orientation); } // Apply the padding depending on the orientation Rectangle enclosingRect = CommonHelper.ApplyPadding(Orientation, ClientRectangle, borderPadding); // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, _paletteBorder!.GetBorderGraphicsHint(State)); _mementoBack = context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, _paletteBack, Orientation, State, _mementoBack); borderPath.Dispose(); } - if (DrawCanvas - && (_paletteBorder != null) + if (DrawCanvas && (_paletteBorder != null) ) { // Do we draw the border before the children? @@ -547,9 +550,7 @@ public override void RenderAfter([DisallowNull] RenderContext context) throw new ArgumentNullException(nameof(context)); } - if (DrawCanvas - && (_paletteBorder != null) - ) + if (DrawCanvas && (_paletteBorder != null)) { // Do we draw the border after the children? if (DrawBorderLast) @@ -572,19 +573,29 @@ public override void RenderAfter([DisallowNull] RenderContext context) /// public virtual void RenderBorder([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Do we need to draw the border? - if (_paletteBorder.GetBorderDraw(State) == InheritBool.True) + if (_paletteBorder!.GetBorderDraw(State) == InheritBool.True) { // Render the border over the background and children if (DrawTabBorder) { - context.Renderer.RenderTabBorder.DrawTabBorder(context, ClientRectangle, _paletteBorder, Orientation, State, TabBorderStyle); + context?.Renderer.RenderTabBorder.DrawTabBorder(context, ClientRectangle, _paletteBorder, Orientation, State, TabBorderStyle); } else { - context.Renderer.RenderStandardBorder.DrawBorder(context, ClientRectangle, _paletteBorder, Orientation, State); + context?.Renderer.RenderStandardBorder.DrawBorder(context, ClientRectangle, _paletteBorder, Orientation, State); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCheckBox.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCheckBox.cs index 84af62aee..804a2e49b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCheckBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class ViewDrawCheckBox : ViewLeaf { #region Instance Fields - private readonly PaletteBase? _palette; + private readonly PaletteBase _palette; private bool _tracking; #endregion @@ -31,7 +31,7 @@ public class ViewDrawCheckBox : ViewLeaf public ViewDrawCheckBox([DisallowNull] PaletteBase palette) { Debug.Assert(palette != null); - _palette = palette; + _palette = palette!; } /// @@ -86,10 +86,20 @@ public bool Tracking /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Ask the renderer for the required size of the check box - return context.Renderer.RenderGlyph.GetCheckBoxPreferredSize(context, _palette, + return context!.Renderer.RenderGlyph.GetCheckBoxPreferredSize(context, _palette, Enabled, CheckState, Tracking, Pressed); } @@ -119,11 +129,20 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) => - context.Renderer.RenderGlyph.DrawCheckBox(context, ClientRectangle, - _palette, Enabled, - CheckState, Tracking, - Pressed); + public override void RenderBefore(RenderContext context) + { + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + context.Renderer.RenderGlyph.DrawCheckBox(context, ClientRectangle, _palette, Enabled, CheckState, Tracking, Pressed); + } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCommandLinkButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCommandLinkButton.cs new file mode 100644 index 000000000..0ba241f5f --- /dev/null +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawCommandLinkButton.cs @@ -0,0 +1,519 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2024. All rights reserved. + * + */ +#endregion + +namespace Krypton.Toolkit +{ + /// + /// View element that can draw a CommandLinkButton. + /// + public class ViewDrawCommandLinkButton : ViewComposite + { + #region Instance Fields + + private IPaletteTriple _paletteDisabled; + private IPaletteTriple _paletteNormal; + private IPaletteTriple _paletteTracking; + private IPaletteTriple _palettePressed; + private IPaletteTriple _paletteCheckedNormal; + private IPaletteTriple _paletteCheckedTracking; + private IPaletteTriple _paletteCheckedPressed; + private readonly ViewDrawCanvas _drawCanvas; + private readonly ViewDrawContent _drawContent; + private readonly ViewDrawContent _drawImageContent; + private readonly ViewLayoutCenter _drawImage; + private bool _forcePaletteUpdate; + + #endregion + + #region Identity + + /// + /// Initialize a new instance of the class. + /// + /// Palette source for the disabled state. + /// Palette source for the normal state. + /// Palette source for the tracking state. + /// Palette source for the pressed state. + /// Palette source for metric values. + /// + /// + /// Visual orientation of the content. + /// Use mnemonics. + public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, + IPaletteTriple paletteNormal, + IPaletteTriple paletteTracking, + IPaletteTriple palettePressed, + IPaletteMetric paletteMetric, + CommandLinkImageValues imageValues, + CommandLinkTextValues commandLinkTextValues, + VisualOrientation orientation, + bool useMnemonic) + : this(paletteDisabled, paletteNormal, paletteTracking, palettePressed, + paletteNormal, paletteTracking, palettePressed, paletteMetric, + imageValues, commandLinkTextValues, orientation, useMnemonic) + { + } + + /// + /// Initialize a new instance of the ViewDrawButton class. + /// + /// Palette source for the disabled state. + /// Palette source for the normal state. + /// Palette source for the tracking state. + /// Palette source for the pressed state. + /// Palette source for the normal checked state. + /// Palette source for the tracking checked state. + /// Palette source for the pressed checked state. + /// Palette source for metric values. + /// + /// + /// Visual orientation of the content. + /// Use mnemonics. + public ViewDrawCommandLinkButton(IPaletteTriple paletteDisabled, + IPaletteTriple paletteNormal, + IPaletteTriple paletteTracking, + IPaletteTriple palettePressed, + IPaletteTriple paletteCheckedNormal, + IPaletteTriple paletteCheckedTracking, + IPaletteTriple paletteCheckedPressed, + IPaletteMetric paletteMetric, + CommandLinkImageValues imageValues, + CommandLinkTextValues commandLinkTextValues, + VisualOrientation orientation, + bool useMnemonic) + { + // Remember the source information + _paletteDisabled = paletteDisabled; + _paletteNormal = paletteNormal; + _paletteTracking = paletteTracking; + _palettePressed = palettePressed; + _paletteCheckedNormal = paletteCheckedNormal; + _paletteCheckedTracking = paletteCheckedTracking; + _paletteCheckedPressed = paletteCheckedPressed; + CurrentPalette = _paletteNormal; + + // Default to not being checked + Checked = false; + AllowUncheck = true; + + // Create the drop down view + _drawImageContent = new ViewDrawContent(_paletteNormal.PaletteContent, imageValues, orientation); + _drawImage = new ViewLayoutCenter(paletteMetric, PaletteMetricPadding.BarPaddingOnly, + orientation, _drawImageContent); + + // Our view contains background and border with content inside + _drawContent = new ViewDrawContent(_paletteNormal.PaletteContent, commandLinkTextValues, orientation) + { + // Pass the mnemonic default to the content view + UseMnemonic = useMnemonic + }; + + // Use a docker layout to organize the contents of the canvas + LayoutDocker = new ViewLayoutDocker + { + { _drawContent, ViewDockStyle.Left }, + { _drawImage, ViewDockStyle.Left } + }; + LayoutDocker.Tag = this; + + + _drawCanvas = new ViewDrawCanvas(_paletteNormal.PaletteBack, _paletteNormal.PaletteBorder!, paletteMetric, + PaletteMetricPadding.BarPaddingTabs, orientation) + { + // Place the content inside the canvas + LayoutDocker + }; + + // Place the canvas inside ourself + Add(_drawCanvas); + } + + /// + /// Obtains the String representation of this instance. + /// + /// User readable name of the instance. + public override string ToString() + { + // Return the class name and instance identifier + return "ViewDrawButton:" + Id; + } + #endregion + + #region LayoutDocker + /// + /// Gets access to the contained layout docker. + /// + public ViewLayoutDocker LayoutDocker { get; } + + #endregion + + #region CurrentPalette + /// + /// Gets access to the currently selected palette. + /// + public IPaletteTriple CurrentPalette { get; private set; } + + #endregion + + #region ButtonValues + /// + /// Gets and sets the source for button values. + /// + public IContentValues? ButtonValues + { + get => _drawContent.Values; + set => _drawContent.Values = value; + } + #endregion + + #region DrawTabBorder + /// + /// Gets and sets if the border should be drawn as a tab border. + /// + public bool DrawTabBorder + { + get => _drawCanvas.DrawTabBorder; + set => _drawCanvas.DrawTabBorder = value; + } + #endregion + + #region TabBorderStyle + /// + /// Gets and sets the tab border style of the button. + /// + public TabBorderStyle TabBorderStyle + { + get => _drawCanvas.TabBorderStyle; + set => _drawCanvas.TabBorderStyle = value; + } + #endregion + + #region Enabled + /// + /// Gets and sets the enabled state of the element. + /// + public override bool Enabled + { + get => base.Enabled; + + set + { + base.Enabled = value; + + if (Enabled && (ElementState == PaletteState.Disabled)) + { + ElementState = Checked ? PaletteState.CheckedNormal : PaletteState.Normal; + } + + // Pass on the new state to the child elements + _drawCanvas.Enabled = value; + _drawContent.Enabled = value; + _drawImageContent.Enabled = value; + } + } + #endregion + + #region Orientation + /// + /// Gets and sets the visual orientation. + /// + public virtual VisualOrientation Orientation + { + get => _drawCanvas.Orientation; + set => SetOrientation(value, value); + } + + /// + /// Set the orientation of the two button components. + /// + /// Orientation of the button border and background.. + /// Orientation of the button contents. + public void SetOrientation(VisualOrientation borderBackOrient, + VisualOrientation contentOrient) + { + _drawCanvas.Orientation = borderBackOrient; + _drawContent.Orientation = contentOrient; + } + #endregion + + #region UseMnemonic + /// + /// Gets and sets usage of mnemonics. + /// + public bool UseMnemonic + { + get => _drawContent.UseMnemonic; + set => _drawContent.UseMnemonic = value; + } + #endregion + + #region Checked + /// + /// Gets and sets the checked state. + /// + public bool Checked { get; set; } + + #endregion + + #region AllowUncheck + /// + /// Gets and sets the allow uncheck state. + /// + public bool AllowUncheck { get; set; } + + #endregion + + #region DrawButtonComposition + /// + /// Gets and sets the composition usage of the button. + /// + public bool DrawButtonComposition + { + get => _drawCanvas.DrawCanvasOnComposition; + set => _drawCanvas.DrawCanvasOnComposition = value; + } + #endregion + + #region TestForFocusCues + /// + /// Gets and sets the use of focus cues for deciding if focus rects are allowed. + /// + public bool TestForFocusCues + { + get => _drawContent.TestForFocusCues; + set => _drawContent.TestForFocusCues = value; + } + #endregion + + #region Palettes + /// + /// Update the source palettes for non-checked drawing. + /// + /// Palette source for the disabled state. + /// Palette source for the normal state. + /// Palette source for the tracking state. + /// Palette source for the pressed state. + public void SetPalettes(IPaletteTriple paletteDisabled, + IPaletteTriple paletteNormal, + IPaletteTriple paletteTracking, + IPaletteTriple palettePressed) + { + Debug.Assert(paletteDisabled != null); + Debug.Assert(paletteNormal != null); + Debug.Assert(paletteTracking != null); + Debug.Assert(palettePressed != null); + + // Remember the new palette settings + _paletteDisabled = paletteDisabled!; + _paletteNormal = paletteNormal!; + _paletteTracking = paletteTracking!; + _palettePressed = palettePressed!; + + // Must force update of palettes to use latest ones provided + _forcePaletteUpdate = true; + } + + /// + /// Update the source palettes for checked state drawing. + /// + /// Palette source for the normal checked state. + /// Palette source for the tracking checked state. + /// Palette source for the pressed checked state. + public void SetCheckedPalettes(IPaletteTriple paletteCheckedNormal, + IPaletteTriple paletteCheckedTracking, + IPaletteTriple paletteCheckedPressed) + { + Debug.Assert(paletteCheckedNormal != null); + Debug.Assert(paletteCheckedTracking != null); + Debug.Assert(paletteCheckedPressed != null); + + // Remember the new palette settings + _paletteCheckedNormal = paletteCheckedNormal!; + _paletteCheckedTracking = paletteCheckedTracking!; + _paletteCheckedPressed = paletteCheckedPressed!; + + // Must force update of palettes to use latest ones provided + _forcePaletteUpdate = true; + } + #endregion + + #region Eval + /// + /// Evaluate the need for drawing transparent areas. + /// + /// Evaluation context. + /// True if transparent areas exist; otherwise false. + public override bool EvalTransparentPaint(ViewContext context) + { + Debug.Assert(context != null); + + // Ensure that child elements have correct palette state + CheckPaletteState(context!); + + // Ask the renderer to evaluate the given palette + return _drawCanvas.EvalTransparentPaint(context!); + } + #endregion + + #region Layout + /// + /// Discover the preferred size of the element. + /// + /// Layout context. + public override Size GetPreferredSize(ViewLayoutContext context) + { + Debug.Assert(context != null); + Debug.Assert(_drawCanvas != null); + + // Ensure that child elements have correct palette state + CheckPaletteState(context!); + + // Delegate work to the child canvas + return _drawCanvas!.GetPreferredSize(context!); + } + + /// + /// Perform a layout of the elements. + /// + /// Layout context. + /// + public override void Layout(ViewLayoutContext context) + { + Debug.Assert(context != null); + + // Validate incoming reference + if (context == null) + { + throw new ArgumentNullException(nameof(context)); + } + + // We take on all the available display area + ClientRectangle = context.DisplayRectangle; + + // Ensure that child elements have correct palette state + CheckPaletteState(context); + + // Let base class perform usual processing + base.Layout(context); + + + } + #endregion + + #region Paint + /// + /// Perform a render of the elements. + /// + /// Rendering context. + public override void Render(RenderContext context) + { + Debug.Assert(context != null); + + // Ensure that child elements have correct palette state + CheckPaletteState(context!); + + // Let base class perform standard rendering + base.Render(context!); + } + #endregion + + #region Protected + /// + /// Check that the palette and state are correct. + /// + /// Reference to the view context. + protected virtual void CheckPaletteState(ViewContext context) + { + // Default to using this element calculated state + PaletteState buttonState = State; + + // If the actual control is not enabled, force to disabled state + if (!IsFixed && !context.Control!.Enabled) + { + buttonState = PaletteState.Disabled; + } + + // Apply the checked state if not fixed + if (!IsFixed && Checked) + { + // Is the checked button allowed to become unchecked + if (AllowUncheck) + { + // Show feedback on tracking and pressed + switch (buttonState) + { + case PaletteState.Normal: + buttonState = PaletteState.CheckedNormal; + break; + case PaletteState.Tracking: + buttonState = PaletteState.CheckedTracking; + break; + case PaletteState.Pressed: + buttonState = PaletteState.CheckedPressed; + break; + } + } + else + { + // Always use the normal state as user cannot uncheck the button + buttonState = PaletteState.CheckedNormal; + } + } + + // If the child elements are not in correct state + if (_forcePaletteUpdate || (_drawCanvas.ElementState != buttonState)) + { + // No longer need to force the palettes to be updated + _forcePaletteUpdate = false; + + // Switch the child elements over to correct state + _drawCanvas.ElementState = buttonState; + _drawContent.ElementState = buttonState; + _drawImageContent.ElementState = buttonState; + + // Push the correct palettes into them + switch (buttonState) + { + case PaletteState.Disabled: + CurrentPalette = _paletteDisabled; + break; + case PaletteState.Normal: + CurrentPalette = _paletteNormal; + break; + case PaletteState.CheckedNormal: + CurrentPalette = _paletteCheckedNormal; + break; + case PaletteState.Pressed: + CurrentPalette = _palettePressed; + break; + case PaletteState.CheckedPressed: + CurrentPalette = _paletteCheckedPressed; + break; + case PaletteState.Tracking: + CurrentPalette = _paletteTracking; + break; + case PaletteState.CheckedTracking: + CurrentPalette = _paletteCheckedTracking; + break; + default: + // Should never happen! + Debug.Assert(false); + DebugTools.NotImplemented(buttonState.ToString()); + break; + } + + // Update with the correct palettes + _drawCanvas.SetPalettes(CurrentPalette.PaletteBack, CurrentPalette.PaletteBorder!); + _drawContent.SetPalette(CurrentPalette.PaletteContent!); + //_drawImageContent.SetPalette(CurrentPalette.PaletteContent); + } + } + #endregion + } +} \ No newline at end of file diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawContent.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawContent.cs index a17280045..36c7356a9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawContent.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,33 +44,6 @@ public ViewDrawContent(IPaletteContent? paletteContent, Orientation = orientation; // Default other state - DrawContentOnComposition = false; - Glowing = false; - TestForFocusCues = false; - } - - /// - /// Initialize a new instance of the ViewDrawContent class. - /// - /// Palette source for the content. - /// Reference to actual content values. - /// Visual orientation of the content. - /// Draw on composition. - /// If composition, should glowing be drawn. - public ViewDrawContent(IPaletteContent? paletteContent, - IContentValues values, - VisualOrientation orientation, - bool composition, - bool glowing) - { - // Cache the starting values - _paletteContent = paletteContent; - Values = values; - Orientation = orientation; - - // Default other state - DrawContentOnComposition = composition; - Glowing = glowing; TestForFocusCues = false; } @@ -102,22 +75,6 @@ protected override void Dispose(bool disposing) } #endregion - #region DrawContentOnComposition - /// - /// Gets and sets the composition value. - /// - public bool DrawContentOnComposition { get; set; } - - #endregion - - #region Glowing - /// - /// Gets ans sets the glowing value. - /// - public bool Glowing { get; set; } - - #endregion - #region TestForFocusCues /// /// Gets and sets the use of focus cues for deciding if focus rects are allowed. @@ -192,20 +149,25 @@ public void SetPalette([DisallowNull] IPaletteContent paletteContent) /// public bool IsImageDisplayed([DisallowNull] ViewContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + var isDisplayed = false; // If we have some content to investigate if (_paletteContent?.GetContentDraw(State) == InheritBool.True) { - isDisplayed = context.Renderer.RenderStandardContent.GetContentImageDisplayed(_memento); + isDisplayed = context.Renderer.RenderStandardContent.GetContentImageDisplayed(_memento!); } return isDisplayed; @@ -221,20 +183,25 @@ public bool IsImageDisplayed([DisallowNull] ViewContext context) /// public Rectangle ImageRectangle([DisallowNull] ViewContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + var imageRect = Rectangle.Empty; // If we have some content to investigate - if (_paletteContent.GetContentDraw(State) == InheritBool.True) + if (_paletteContent!.GetContentDraw(State) == InheritBool.True) { - imageRect = context.Renderer.RenderStandardContent.GetContentImageRectangle(_memento); + imageRect = context.Renderer.RenderStandardContent.GetContentImageRectangle(_memento!); } return imageRect; @@ -253,17 +220,22 @@ public Rectangle ShortTextRect([DisallowNull] ViewContext context) Debug.Assert(context != null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + var textRect = Rectangle.Empty; // If we have some content to investigate - if (_paletteContent.GetContentDraw(State) == InheritBool.True) + if (_paletteContent!.GetContentDraw(State) == InheritBool.True) { - textRect = context.Renderer.RenderStandardContent.GetContentShortTextRectangle(_memento); + textRect = context.Renderer.RenderStandardContent.GetContentShortTextRectangle(_memento!); } return textRect; @@ -279,20 +251,25 @@ public Rectangle ShortTextRect([DisallowNull] ViewContext context) /// Rectangle of short text drawing. public Rectangle LongTextRect([DisallowNull] ViewContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + var textRect = Rectangle.Empty; // If we have some content to investigate - if (_paletteContent.GetContentDraw(State) == InheritBool.True) + if (_paletteContent!.GetContentDraw(State) == InheritBool.True) { - textRect = context.Renderer.RenderStandardContent.GetContentLongTextRectangle(_memento); + textRect = context.Renderer.RenderStandardContent.GetContentLongTextRectangle(_memento!); } return textRect; @@ -308,28 +285,31 @@ public Rectangle LongTextRect([DisallowNull] ViewContext context) /// public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // By default we take up no space at all var preferredSize = Size.Empty; // If we have some content to encompass - if (_paletteContent.GetContentDraw(State) == InheritBool.True) + if (_paletteContent?.GetContentDraw(State) == InheritBool.True) { // Ask the renderer for the contents preferred size preferredSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, _paletteContent, - Values, + Values!, Orientation, - State, - DrawContentOnComposition, - Glowing); + State); } return preferredSize; @@ -342,19 +322,24 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // We take on all the available display area ClientRectangle = context.DisplayRectangle; // Do we need to draw the content? - if (_paletteContent.GetContentDraw(State) == InheritBool.True) + if (_paletteContent!.GetContentDraw(State) == InheritBool.True) { // Dispose of old memento first if (_memento != null) @@ -368,11 +353,9 @@ public override void Layout([DisallowNull] ViewLayoutContext context) _memento = context.Renderer.RenderStandardContent.LayoutContent(context, ClientRectangle, _paletteContent, - Values, + Values!, Orientation, - State, - DrawContentOnComposition, - Glowing); + State); } } #endregion @@ -384,28 +367,31 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Do we need to draw the content? - if (_paletteContent.GetContentDraw(State) == InheritBool.True) + if (_paletteContent!.GetContentDraw(State) == InheritBool.True) { - var allowFocusRect = !TestForFocusCues || ShowFocusCues(context.Control); + var allowFocusRect = !TestForFocusCues || ShowFocusCues(context.Control!); // Draw using memento returned from render layout context.Renderer.RenderStandardContent.DrawContent(context, ClientRectangle, _paletteContent, - _memento, + _memento!, Orientation, State, - DrawContentOnComposition, - Glowing, allowFocusRect); } } @@ -421,7 +407,7 @@ private bool ShowFocusCues(Control c) BindingFlags.NonPublic); } - return (bool)_pi.GetValue(c, null); + return (bool)_pi!.GetValue(c, null)!; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeButton.cs index b62656899..aca1b0af6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -71,7 +71,7 @@ public enum DrawDateTimeGlyph /// Should button repeat. public ViewDrawDateTimeButton(KryptonDateTimePicker dateTimePicker, IPaletteTriple paletteState, - IPaletteMetric? paletteMetric, + IPaletteMetric paletteMetric, IContentValues? buttonValues, DrawDateTimeGlyph glyph, NeedPaintHandler needPaintHandler, @@ -159,8 +159,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering after child elements are rendered. /// /// Rendering context. - public override void RenderAfter(RenderContext context) + public override void RenderAfter([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + switch (_glyph) { case DrawDateTimeGlyph.DropDownButton: @@ -219,14 +224,14 @@ protected override void CheckPaletteState(ViewContext context) /// /// Source of the event. /// Event arguments assocaited with the event. - protected void OnButtonClick(object sender, MouseEventArgs e) => Click?.Invoke(this, e); + protected void OnButtonClick(object? sender, MouseEventArgs e) => Click?.Invoke(this, e); /// /// Raises the MouseSelect event. /// /// Source of the event. /// Event arguments assocaited with the event. - protected void OnButtonMouseSelect(object sender, MouseEventArgs e) => MouseSelect?.Invoke(this, e); + protected void OnButtonMouseSelect(object? sender, MouseEventArgs e) => MouseSelect?.Invoke(this, e); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeText.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeText.cs index b7ed0c82b..c3f56045b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeText.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDateTimeText.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ private class FormatHandler private int _activeFragment; private FormatFragmentList _fragments; - private string _inputDigits; + private string? _inputDigits; private readonly KryptonDateTimePicker _dateTimePicker; private readonly NeedPaintHandler _needPaint; private readonly ViewDrawDateTimeText _timeText; @@ -44,7 +44,7 @@ public FormatHandler(KryptonDateTimePicker dateTimePicker, _dateTimePicker = dateTimePicker; _timeText = timeText; _needPaint = needPaint; - _fragments = new FormatFragmentList(); + _fragments = []; _activeFragment = -1; _inputDigits = null; RightToLeftLayout = false; @@ -495,7 +495,7 @@ public void EndInputDigits() /// Format string to parse. /// Graphics instance used to measure text. /// Font used to measure text. - public void ParseFormat(string format, Graphics? g, Font font) + public void ParseFormat(string format, Graphics? g, Font? font) { // Split the format into a set of fragments _fragments = ParseFormatToFragments(format); @@ -520,7 +520,7 @@ public void ParseFormat(string format, Graphics? g, Font font) /// Text color. /// Back color. /// If text enabled. - public void Render(RenderContext context, Font font, Rectangle rect, + public void Render(RenderContext context, Font? font, Rectangle rect, Color textColor, Color backColor, bool enabled) { if (enabled || string.IsNullOrEmpty(_dateTimePicker.CustomNullText)) @@ -632,7 +632,7 @@ private void ValidateActiveFragment() private bool ImplRightToLeft => RightToLeftLayout && (_dateTimePicker.RightToLeft == RightToLeft.Yes); - private void MeasureFragments(Graphics? g, Font font, DateTime dt) + private void MeasureFragments(Graphics? g, Font? font, DateTime dt) { // Create a character range/character region for each of the fragments var charRanges = new CharacterRange[_fragments.Count]; @@ -648,18 +648,18 @@ private void MeasureFragments(Graphics? g, Font font, DateTime dt) measureFormat.SetMeasurableCharacterRanges(charRanges); // Perform measuring using the output of the last fragment (last frag must be the whole output string) - var charRegion = g.MeasureCharacterRanges(_fragments[_fragments.Count - 1].Output, font, _measureRect, measureFormat); + var charRegion = g?.MeasureCharacterRanges(_fragments[_fragments.Count - 1].Output, font!, _measureRect, measureFormat); // Push return values into the individual fragment entries for (var i = 0; i < _fragments.Count; i++) { - _fragments[i].TotalWidth = (int)Math.Ceiling(charRegion[i].GetBounds(g).Width); + _fragments[i].TotalWidth = (int)Math.Ceiling(charRegion![i].GetBounds(g!).Width); } } private FormatFragmentList ParseFormatToFragments(string format) { - FormatFragmentList fragList = new FormatFragmentList(); + FormatFragmentList fragList = []; // Grab the string used for formatting var length = format.Length; @@ -1599,13 +1599,13 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) _formatHandler.DateTime = _dateTimePicker.Value; // Grab the font used to draw the text - Font font = GetFont(); + Font? font = GetFont(); // Find the width of the text we are drawing Size retSize = TextRenderer.MeasureText(GetFullDisplayText(), font, Size.Empty, MEASURE_FLAGS); // The line height gives better appearance as it includes space for overhanging glyphs - retSize.Height = Math.Max(font.Height, retSize.Height); + retSize.Height = Math.Max(font!.Height, retSize.Height); // Add constant extra sizing to add padding around area retSize.Height += 3; @@ -1665,7 +1665,7 @@ internal DateTime ValidateDate(DateTime dt) private void PerformNeedPaint(bool needLayout) => _needPaint(this, new NeedLayoutEventArgs(needLayout)); - private Font GetFont() + private Font? GetFont() { if (!Enabled || _dateTimePicker.InternalDateTimeNull()) { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDebug.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDebug.cs index ed0515a7b..606928b73 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDebug.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDebug.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -64,10 +64,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - // Use all of the provided space + // Use all the provided space // Always use the metric and ignore given space - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDocker.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDocker.cs index aba4af8b2..67dc9b376 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDocker.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDocker.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,8 +37,8 @@ public ViewDrawDocker() ///
/// Palette source for the background. /// Palette source for the border. - public ViewDrawDocker(IPaletteBack? paletteBack, - IPaletteBorder? paletteBorder) + public ViewDrawDocker(IPaletteBack paletteBack, + IPaletteBorder paletteBorder) : this(paletteBack, paletteBorder, null, PaletteMetricBool.None) { } @@ -165,9 +165,9 @@ public override bool DrawBorderLast } else { - if ((_paletteMetric != null) && (_metricOverlay != PaletteMetricBool.None)) + if (_paletteMetric != null && _metricOverlay != PaletteMetricBool.None) { - InheritBool overlay = _paletteMetric.GetMetricBool(ElementState, _metricOverlay); + var overlay = _paletteMetric.GetMetricBool(ElementState, _metricOverlay); return overlay == InheritBool.False; } else @@ -198,13 +198,13 @@ public ViewDockStyle GetDock([DisallowNull] ViewBase child) Debug.Assert(child != null); // Does this element exist in the lookup? - if (!_childDocking.ContainsKey(child)) + if (!_childDocking.ContainsKey(child!)) { // No, so add with a default value - _childDocking.Add(child, ViewDockStyle.Top); + _childDocking.Add(child!, ViewDockStyle.Top); } - return _childDocking[child]; + return _childDocking[child!]; } /// @@ -214,13 +214,18 @@ public ViewDockStyle GetDock([DisallowNull] ViewBase child) /// DockStyle setting. public void SetDock([DisallowNull] ViewBase child, ViewDockStyle dock) { - Debug.Assert(child != null); + Debug.Assert(child is not null); + + if (child is null) + { + throw new ArgumentNullException(nameof(child)); + } // If the lookup is not already defined - if (!_childDocking.ContainsKey(child)) + if (!_childDocking.ContainsKey(child!)) { // Then just add the value - _childDocking.Add(child, dock); + _childDocking.Add(child!, dock); } else { @@ -254,10 +259,15 @@ public void Add(ViewBase item, ViewDockStyle dock) /// True if transparent areas exist; otherwise false. public override bool EvalTransparentPaint([DisallowNull] ViewContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } // Check with the base canvas first - if (base.EvalTransparentPaint(context)) + if (base.EvalTransparentPaint(context!)) { return true; } @@ -268,7 +278,7 @@ public override bool EvalTransparentPaint([DisallowNull] ViewContext context) if (!DrawBorderLast) { // Check each child that is docked against an edge - foreach (ViewBase child in Reverse().Where(child => child.Visible)) + foreach (var child in Reverse().Where(child => child.Visible)) { switch (GetDock(child)) { @@ -299,11 +309,21 @@ public override bool EvalTransparentPaint([DisallowNull] ViewContext context) /// Layout context. public Size GetNonChildSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Remember the original display rectangle provided - Rectangle originalRect = context.DisplayRectangle; - Rectangle displayRect = context.DisplayRectangle; + var originalRect = context!.DisplayRectangle; + var displayRect = context.DisplayRectangle; // Border size that is not applied to preferred size var borderSize = Size.Empty; @@ -319,20 +339,20 @@ public Size GetNonChildSize([DisallowNull] ViewLayoutContext context) // Apply space the border takes up if (IgnoreBorderSpace) { - borderSize = CommonHelper.ApplyPadding(Orientation, borderSize, context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder, State, Orientation)); + borderSize = CommonHelper.ApplyPadding(Orientation, borderSize, context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder!, State, Orientation)); } else { - Padding padding = context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder, State, Orientation); + var padding = context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder!, State, Orientation); preferredSize = CommonHelper.ApplyPadding(Orientation, preferredSize, padding); displayRect = CommonHelper.ApplyPadding(Orientation, displayRect, padding); } // Do we have a metric source for additional padding? - if ((_paletteMetric != null) && (_metricPadding != PaletteMetricPadding.None)) + if (_paletteMetric != null && _metricPadding != PaletteMetricPadding.None) { // Apply padding needed outside the border of the canvas - Padding padding = _paletteMetric.GetMetricPadding(State, _metricPadding); + var padding = _paletteMetric.GetMetricPadding(State, _metricPadding); preferredSize = CommonHelper.ApplyPadding(Orientation, preferredSize, padding); displayRect = CommonHelper.ApplyPadding(Orientation, displayRect, padding); } @@ -358,11 +378,21 @@ public Size GetNonChildSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Remember the original display rectangle provided - Rectangle originalRect = context.DisplayRectangle; - Rectangle displayRect = context.DisplayRectangle; + var originalRect = context!.DisplayRectangle; + var displayRect = context.DisplayRectangle; // Border size that is not applied to preferred size var borderSize = Size.Empty; @@ -382,16 +412,16 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) } else { - Padding padding = context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder, State, Orientation); + var padding = context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder, State, Orientation); preferredSize = CommonHelper.ApplyPadding(Orientation, preferredSize, padding); displayRect = CommonHelper.ApplyPadding(Orientation, displayRect, padding); } // Do we have a metric source for additional padding? - if ((_paletteMetric != null) && (_metricPadding != PaletteMetricPadding.None)) + if (_paletteMetric != null && _metricPadding != PaletteMetricPadding.None) { // Apply padding needed outside the border of the canvas - Padding padding = _paletteMetric.GetMetricPadding(State, _metricPadding); + var padding = _paletteMetric.GetMetricPadding(State, _metricPadding); preferredSize = CommonHelper.ApplyPadding(Orientation, preferredSize, padding); displayRect = CommonHelper.ApplyPadding(Orientation, displayRect, padding); } @@ -404,10 +434,10 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) var fillEdges = PaletteDrawBorders.All; // Check for edge docking children - foreach (ViewBase child in Reverse()) + foreach (var child in Reverse()) { // Only position visible children that are not 'fill' - if ((child.Visible || PreferredSizeAll) && (GetDock(child) != ViewDockStyle.Fill)) + if ((child.Visible || PreferredSizeAll) && GetDock(child) != ViewDockStyle.Fill) { // Prevent children from showing adjacent borders that are not needed UpdateChildBorders(child, context, ref leftEdges, ref rightEdges, @@ -417,7 +447,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = displayRect; // Get the preferred size of the child - Size childSize = child.GetPreferredSize(context); + var childSize = child.GetPreferredSize(context); // Apply size requests from edge docking children switch (OrientateDock(GetDock(child))) @@ -469,10 +499,10 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) } // Check for the fill child last - foreach (ViewBase child in Reverse()) + foreach (var child in Reverse()) { // Only interested in a visible 'fill' child - if ((child.Visible || PreferredSizeAll) && (GetDock(child) == ViewDockStyle.Fill)) + if ((child.Visible || PreferredSizeAll) && GetDock(child) == ViewDockStyle.Fill) { // Prevent children from showing adjacent borders that are not needed UpdateChildBorders(child, context, ref leftEdges, ref rightEdges, @@ -482,7 +512,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = displayRect; // Get the preferred size of the child - Size childSize = child.GetPreferredSize(context); + var childSize = child.GetPreferredSize(context); // Add on the preferred size of the filler preferredSize.Width += childSize.Width; @@ -510,24 +540,34 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; if (!IgnoreAllBorderAndPadding) { // Do we have a metric source for additional padding? - if ((_paletteMetric != null) && (_metricPadding != PaletteMetricPadding.None)) + if (_paletteMetric != null && _metricPadding != PaletteMetricPadding.None) { // Get the padding to be applied before the canvas drawing - Padding outerPadding = _paletteMetric.GetMetricPadding(State, _metricPadding); + var outerPadding = _paletteMetric.GetMetricPadding(State, _metricPadding); ClientRectangle = CommonHelper.ApplyPadding(Orientation, ClientRectangle, outerPadding); } } // Space available for children begins with our space - Rectangle fillerRect = ClientRectangle; + var fillerRect = ClientRectangle; context.DisplayRectangle = fillerRect; // By default all the children need to draw all their borders @@ -538,17 +578,17 @@ public override void Layout([DisallowNull] ViewLayoutContext context) var fillEdges = PaletteDrawBorders.All; // Position all except the filler - foreach (ViewBase child in Reverse()) + foreach (var child in Reverse()) { // Only position visible children - if (child.Visible && (GetDock(child) != ViewDockStyle.Fill)) + if (child.Visible && GetDock(child) != ViewDockStyle.Fill) { // Prevent children from showing adjacent borders that are not needed UpdateChildBorders(child, context, ref leftEdges, ref rightEdges, ref topEdges, ref bottomEdges, ref fillEdges); // Get the preferred size of the child - Size childSize = child.GetPreferredSize(context); + var childSize = child.GetPreferredSize(context); // Position the child inside the available space switch (CalculateDock(OrientateDock(GetDock(child)), context.Control)) @@ -578,7 +618,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } } - Rectangle borderRect = ClientRectangle; + var borderRect = ClientRectangle; var padding = Padding.Empty; if (!IgnoreAllBorderAndPadding) @@ -586,7 +626,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Find the actual width of the border as we need to compare this to the calculating border // padding to work out how far from corners we can ignore the calculated border padding and // instead use the actual width only. - var borderWidth = _paletteBorder.GetBorderWidth(State); + var borderWidth = _paletteBorder!.GetBorderWidth(State); // Update padding to reflect the orientation we are using padding = context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteBorder, State, Orientation); @@ -625,10 +665,10 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Position any filler last - foreach (ViewBase child in Reverse()) + foreach (var child in Reverse()) { // Only position visible children - if (child.Visible && (GetDock(child) == ViewDockStyle.Fill)) + if (child.Visible && GetDock(child) == ViewDockStyle.Fill) { // Prevent children from showing adjacent borders that are not needed UpdateChildBorders(child, context, ref leftEdges, ref rightEdges, @@ -664,7 +704,7 @@ private void UpdateChildBorders(ViewBase child, var childCanvas = child as ViewDrawCanvas; // Docking edge determines calculation - switch (CalculateDock(GetDock(child), context.Control)) + switch (CalculateDock(GetDock(child), context.Control!)) { case ViewDockStyle.Top: if (childCanvas != null) @@ -730,30 +770,30 @@ private Padding AdjustPaddingForDockers(Padding padding, var pullBackLeft = padding.Left * 2; var pullBackRight = padding.Right * 2; - if ((padding.Left > borderWidth) && - (topDiff >= pullBackTop) && (topDiff >= padding.Top) && - (bottomDiff >= pullBackBottom) && (bottomDiff >= padding.Bottom)) + if (padding.Left > borderWidth && + topDiff >= pullBackTop && topDiff >= padding.Top && + bottomDiff >= pullBackBottom && bottomDiff >= padding.Bottom) { padding.Left = borderWidth; } - if ((padding.Right > borderWidth) && - (topDiff >= pullBackTop) && (topDiff >= padding.Top) && - (bottomDiff >= pullBackBottom) && (bottomDiff >= padding.Bottom)) + if (padding.Right > borderWidth && + topDiff >= pullBackTop && topDiff >= padding.Top && + bottomDiff >= pullBackBottom && bottomDiff >= padding.Bottom) { padding.Right = borderWidth; } - if ((padding.Top > borderWidth) && - (leftDiff >= pullBackLeft) && (leftDiff >= padding.Left) && - (rightDiff >= pullBackRight) && (rightDiff >= padding.Right)) + if (padding.Top > borderWidth && + leftDiff >= pullBackLeft && leftDiff >= padding.Left && + rightDiff >= pullBackRight && rightDiff >= padding.Right) { padding.Top = borderWidth; } - if ((padding.Bottom > borderWidth) && - (leftDiff >= pullBackLeft) && (leftDiff >= padding.Left) && - (rightDiff >= pullBackRight) && (rightDiff >= padding.Right)) + if (padding.Bottom > borderWidth && + leftDiff >= pullBackLeft && leftDiff >= padding.Left && + rightDiff >= pullBackRight && rightDiff >= padding.Right) { padding.Bottom = borderWidth; } @@ -769,10 +809,10 @@ private Padding AdjustPaddingForDockers(Padding padding, /// Docking style. /// Control for which the setting is needed. /// Calculated docking to actual use. - protected ViewDockStyle CalculateDock(ViewDockStyle ds, Control control) + protected ViewDockStyle CalculateDock(ViewDockStyle ds, Control? control) { // Do we need to adjust to reflect right to left layout? - if (CommonHelper.GetRightToLeftLayout(control) && (control.RightToLeft == RightToLeft.Yes)) + if (CommonHelper.GetRightToLeftLayout(control!) && control!.RightToLeft == RightToLeft.Yes) { // Only need to invert the left and right sides ds = ds switch @@ -840,6 +880,7 @@ protected ViewDockStyle OrientateDock(ViewDockStyle style) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Orientation.ToString()); break; } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDropDownButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDropDownButton.cs index 60e0d1ffd..86f4dfd4c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDropDownButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawDropDownButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -37,7 +37,7 @@ public override string ToString() => /// /// Gets and sets the palette to use. /// - public PaletteBase? Palette { get; set; } + public PaletteBase Palette { get; set; } #endregion @@ -56,10 +56,20 @@ public override string ToString() => /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Ask the renderer for the required size of the drop down button - return context!.Renderer.RenderGlyph.GetDropDownButtonPreferredSize(context, Palette, State, Orientation); + return context.Renderer.RenderGlyph.GetDropDownButtonPreferredSize(context, Palette, State, Orientation); } /// @@ -87,12 +97,19 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) => - context.Renderer.RenderGlyph.DrawDropDownButton(context, - ClientRectangle, - Palette, + public override void RenderBefore( [DisallowNull] RenderContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + context.Renderer.RenderGlyph.DrawDropDownButton(context, + ClientRectangle, + Palette, State, Orientation); + } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawEmptyContent.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawEmptyContent.cs index 39bd95d4a..444ffef72 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawEmptyContent.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawEmptyContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -64,7 +64,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) } // ReSharper disable RedundantBaseQualifier - base.SetPalette(Enabled ? _paletteContentNormal : _paletteContentDisabled); + base.SetPalette((Enabled ? _paletteContentNormal : _paletteContentDisabled)!); return base.GetPreferredSize(context); // ReSharper restore RedundantBaseQualifier @@ -86,7 +86,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // ReSharper disable RedundantBaseQualifier - base.SetPalette(Enabled ? _paletteContentNormal : _paletteContentDisabled); + base.SetPalette((Enabled ? _paletteContentNormal : _paletteContentDisabled)!); base.Layout(context); // ReSharper restore RedundantBaseQualifier @@ -111,7 +111,7 @@ public override void RenderBefore([DisallowNull] RenderContext context) } // ReSharper disable RedundantBaseQualifier - base.SetPalette(Enabled ? _paletteContentNormal : _paletteContentDisabled); + base.SetPalette((Enabled ? _paletteContentNormal : _paletteContentDisabled)!); base.RenderBefore(context); // ReSharper restore RedundantBaseQualifier @@ -131,7 +131,7 @@ public override void RenderBefore([DisallowNull] RenderContext context) /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawForm.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawForm.cs index 0f54c918f..dfe818041 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawForm.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawForm.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class ViewDrawForm : ViewDrawDocker { #region Instance Fields - private StatusStrip? _renderStrip; + private StatusStrip _renderStrip; #endregion @@ -42,10 +42,10 @@ protected override void Dispose(bool disposing) { if (disposing) { - if (_renderStrip != null) + if (_renderStrip != null!) { _renderStrip.Dispose(); - _renderStrip = null; + _renderStrip = null!; } } @@ -79,9 +79,7 @@ public override void RenderAfter(RenderContext context) { // Do we have a status strip to try and merge? // Is the status strip using the global renderer? - if ((_renderStrip != null) - && (StatusStrip?.RenderMode == ToolStripRenderMode.ManagerRenderMode) - ) + if (StatusStrip?.RenderMode == ToolStripRenderMode.ManagerRenderMode) { // Cast to correct type diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawGroupBoxDocker.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawGroupBoxDocker.cs index 9a38e33fa..c78a7ae2b 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawGroupBoxDocker.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawGroupBoxDocker.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -86,16 +86,16 @@ public override void RenderBefore([DisallowNull] RenderContext context) throw new ArgumentNullException(nameof(context)); } - if (this[0].Visible) + if (this[0]!.Visible) { // The first and only child is the caption content - var caption = (ViewDrawContent)this[0]; + var caption = this[0] as ViewDrawContent; - // Cache the origina client rectangle before we modify it + // Cache the original client rectangle before we modify it _cacheClientRect = ClientRectangle; // Update canvas drawing area by the overlapping caption area - Rectangle captionRect = caption.ClientRectangle; + var captionRect = caption!.ClientRectangle; switch (GetDock(caption)) { case ViewDockStyle.Top: @@ -150,7 +150,7 @@ public override void RenderAfter([DisallowNull] RenderContext context) base.RenderAfter(context); // Restore original client rectangle - if (this[0].Visible) + if (this[0]!.Visible) { ClientRectangle = _cacheClientRect; } @@ -163,16 +163,16 @@ public override void RenderAfter([DisallowNull] RenderContext context) public override void RenderBorder(RenderContext context) { // The first and only child is the caption content - var caption = (ViewDrawContent)this[0]; + var caption = this[0] as ViewDrawContent; // Remember current clipping region so we can put it back later - Region clipRegion = context.Graphics.Clip.Clone(); + var clipRegion = context.Graphics.Clip.Clone(); // Exclude the image/short/long text rectangles from being drawn - Region excludeRegion = clipRegion.Clone(); - Rectangle imageRect = caption.ImageRectangle(context); - Rectangle shortRect = caption.ShortTextRect(context); - Rectangle longRect = caption.LongTextRect(context); + var excludeRegion = clipRegion.Clone(); + var imageRect = caption!.ImageRectangle(context); + var shortRect = caption.ShortTextRect(context); + var longRect = caption.LongTextRect(context); imageRect.Inflate(1, 1); shortRect.Inflate(1, 1); longRect.Inflate(1, 1); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckBox.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckBox.cs index c24f8d3fb..5c9a27145 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckBox.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckBox.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -57,7 +57,7 @@ public ViewDrawMenuCheckBox(IContextMenuProvider provider, }; // Create the check box image drawer and place inside element so it is always centered - ViewDrawCheckBox = new ViewDrawCheckBox(KryptonContextMenuCheckBox.StateCheckBoxImages) + ViewDrawCheckBox = new ViewDrawCheckBox(KryptonContextMenuCheckBox.StateCheckBoxImages!) { CheckState = ResolveCheckState, Enabled = ItemEnabled @@ -92,7 +92,7 @@ public ViewDrawMenuCheckBox(IContextMenuProvider provider, _innerDocker.MouseController = mcbc; _innerDocker.KeyController = mcbc; // Create the manager for handling tooltips - _innerDocker.MouseController = new ToolTipController(KryptonContextMenuCheckBox.ToolTipManager, this, mcbc); + _innerDocker.MouseController = new ToolTipController(KryptonContextMenuCheckBox.ToolTipManager!, this, mcbc); // Add docker as the composite content Add(_outerDocker); @@ -182,7 +182,7 @@ protected override void Dispose(bool disposing) /// /// Resolves the correct image to use from the menu item. /// - public Image ResolveImage => _cachedCommand != null ? _cachedCommand.ImageSmall : KryptonContextMenuCheckBox.Image; + public Image? ResolveImage => _cachedCommand != null ? _cachedCommand.ImageSmall : KryptonContextMenuCheckBox.Image; #endregion @@ -278,7 +278,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Update the checked state ViewDrawCheckBox.CheckState = ResolveCheckState; - return base.GetPreferredSize(context); + return base.GetPreferredSize(context!); } /// @@ -305,7 +305,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) #endregion #region Private - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -339,7 +339,7 @@ private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -356,7 +356,7 @@ private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnClick(object sender, EventArgs e) => KryptonContextMenuCheckBox.PerformClick(); + private void OnClick(object? sender, EventArgs e) => KryptonContextMenuCheckBox.PerformClick(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckButton.cs index 58deb29ff..17afd0787 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuCheckButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -89,7 +89,7 @@ public ViewDrawMenuCheckButton(IContextMenuProvider provider, //_innerDocker.MouseController = mcbc; _innerDocker.KeyController = mcbc; // Create the manager for handling tooltips - _innerDocker.MouseController = new ToolTipController(KryptonContextMenuCheckButton.ToolTipManager, this, mcbc); + _innerDocker.MouseController = new ToolTipController(KryptonContextMenuCheckButton.ToolTipManager!, this, mcbc); // Add docker as the composite content Add(_outerDocker); @@ -147,7 +147,7 @@ protected override void Dispose(bool disposing) /// /// Gets the short text value of the check box item. /// - public string ItemText => _contentValues.GetShortText(); + public string? ItemText => _contentValues?.GetShortText(); #endregion @@ -163,7 +163,7 @@ protected override void Dispose(bool disposing) /// /// Resolves the correct image to use from the menu item. /// - public Image ResolveImage => _cachedCommand != null ? _cachedCommand.ImageSmall : KryptonContextMenuCheckButton.Image; + public Image? ResolveImage => _cachedCommand != null ? _cachedCommand.ImageSmall : KryptonContextMenuCheckButton.Image; #endregion @@ -251,7 +251,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Update text and image values - _contentValues.ShortText = ResolveText; + _contentValues!.ShortText = ResolveText; _contentValues.LongText = ResolveExtraText; _contentValues.Image = ResolveImage; _contentValues.ImageTransparentColor = ResolveImageTransparentColor; @@ -265,7 +265,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Update the checked state ViewDrawButton.Checked = ResolveChecked; - return base.GetPreferredSize(context); + return base.GetPreferredSize(context!); } /// @@ -292,7 +292,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) #endregion #region Private - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -325,7 +325,7 @@ private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -341,7 +341,7 @@ private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnClick(object sender, EventArgs e) => KryptonContextMenuCheckButton.PerformClick(); + private void OnClick(object? sender, EventArgs e) => KryptonContextMenuCheckButton.PerformClick(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorBlock.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorBlock.cs index a9b9209b6..767b1fe8c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorBlock.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorBlock.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -57,7 +57,7 @@ public ViewDrawMenuColorBlock(IContextMenuProvider provider, //MouseController = mcbc; KeyController = mcbc; // Create the manager for handling tooltips - MouseController = new ToolTipController(KryptonContextMenuColorColumns.ToolTipManager, this, mcbc); + MouseController = new ToolTipController(KryptonContextMenuColorColumns.ToolTipManager!, this, mcbc); } /// @@ -213,11 +213,11 @@ public override void RenderAfter([DisallowNull] RenderContext context) } // If not in normal state, then need to adorn display - var outside = Color.Empty; - var inside = Color.Empty; + var outside = GlobalStaticValues.EMPTY_COLOR; + var inside = GlobalStaticValues.EMPTY_COLOR; // Is this element selected? - var selected = (KryptonContextMenuColorColumns.SelectedColor != Color.Empty) && KryptonContextMenuColorColumns.SelectedColor.Equals(Color); + var selected = (KryptonContextMenuColorColumns.SelectedColor != GlobalStaticValues.EMPTY_COLOR) && KryptonContextMenuColorColumns.SelectedColor.Equals(Color); switch (ElementState) { @@ -255,7 +255,7 @@ public override void RenderAfter([DisallowNull] RenderContext context) #endregion #region Private - private void OnClick(object sender, EventArgs e) => KryptonContextMenuColorColumns.SelectedColor = Color; + private void OnClick(object? sender, EventArgs e) => KryptonContextMenuColorColumns.SelectedColor = Color; #endregion } } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumn.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumn.cs index a53e2d923..75d24aa7d 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -65,7 +65,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Let base class layout the children base.Layout(context); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumns.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumns.cs index 1e7661c0e..c0a1d7ef6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumns.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuColorColumns.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -122,7 +122,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; base.Layout(context); } @@ -160,7 +160,7 @@ private ViewLayoutStack CreateColumns(IContextMenuProvider provider, return columns; } - private void OnSelectedColorChanged(object sender, ColorEventArgs e) => _provider.ProviderNeedPaintDelegate(this, new NeedLayoutEventArgs(false)); + private void OnSelectedColorChanged(object? sender, ColorEventArgs e) => _provider.ProviderNeedPaintDelegate(this, new NeedLayoutEventArgs(false)); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuHeading.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuHeading.cs index 9a11e0480..65c2d2a20 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuHeading.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuHeading.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageCanvas.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageCanvas.cs index e08093808..74ed679ab 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageCanvas.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageCanvas.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -58,7 +58,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - Size preferredSize = base.GetPreferredSize(context); + Size preferredSize = base.GetPreferredSize(context!); if (_overridePreferredWidth != 0) { @@ -66,7 +66,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) } else { - LastPreferredSize = base.GetPreferredSize(context); + LastPreferredSize = base.GetPreferredSize(context!); } if (_zeroHeight) diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageColumn.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageColumn.cs index 997ee5a68..b77bda9c4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageColumn.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageColumn.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -25,7 +25,7 @@ internal class ViewDrawMenuImageColumn : ViewDrawDocker /// Reference to the owning collection. /// Palette for obtaining drawing values. public ViewDrawMenuImageColumn(KryptonContextMenuItems items, - PaletteDoubleRedirect? palette) + PaletteDoubleRedirect palette) : base(items.StateNormal.Back, items.StateNormal.Border) { // Give the items collection the redirector to use when inheriting values @@ -65,7 +65,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Ensure all children are laid out in our total space base.Layout(context); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageSelectItem.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageSelectItem.cs index 6a0b0864e..1ddc179ab 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageSelectItem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuImageSelectItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,7 +23,7 @@ internal class ViewDrawMenuImageSelectItem : ViewDrawButton, private readonly ViewLayoutMenuItemSelect _layout; private readonly MenuImageSelectController _controller; private readonly NeedPaintHandler _needPaint; - private ImageList _imageList; + private ImageList? _imageList; private int _imageIndex; #endregion @@ -58,7 +58,7 @@ public ViewDrawMenuImageSelectItem(ViewContextMenuManager viewManager, SourceController = _controller; KeyController = _controller; // Create the manager for handling tooltips - MouseController = new ToolTipController(imageSelect.ToolTipManager, this, _controller); + MouseController = new ToolTipController(imageSelect.ToolTipManager!, this, _controller); } @@ -143,7 +143,7 @@ public override void Render([DisallowNull] RenderContext context) } // Let base class draw using the temp state, then put back to original - base.Render(context); + base.Render(context!); ElementState = tempState; } #endregion @@ -161,7 +161,7 @@ public override void Render([DisallowNull] RenderContext context) /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. @@ -176,7 +176,7 @@ public override void Render([DisallowNull] RenderContext context) #endregion #region Private - private void OnItemClick(object sender, MouseEventArgs e) + private void OnItemClick(object? sender, MouseEventArgs e) { // Set new selection index _imageSelect.SelectedIndex = _imageIndex; diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItem.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItem.cs index e5c7e6cfe..63c389647 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItem.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItem.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,7 +15,7 @@ namespace Krypton.Toolkit internal class ViewDrawMenuItem : ViewDrawCanvas { #region Static Fields - private static readonly Image _empty16x16; + private static readonly Image? _empty16x16; #endregion #region Instance Fields @@ -88,11 +88,11 @@ public ViewDrawMenuItem(IContextMenuProvider provider, { case CheckState.Checked: itemColumnImage = provider.ProviderImages.GetContextMenuCheckedImage(); - itemImageTransparent = Color.Empty; + itemImageTransparent = GlobalStaticValues.EMPTY_COLOR; break; case CheckState.Indeterminate: itemColumnImage = provider.ProviderImages.GetContextMenuIndeterminateImage(); - itemImageTransparent = Color.Empty; + itemImageTransparent = GlobalStaticValues.EMPTY_COLOR; break; } } @@ -110,7 +110,7 @@ public ViewDrawMenuItem(IContextMenuProvider provider, // Text/Extra Text PaletteContentJustText menuItemStyle = standardStyle ? menuItemState.ItemTextStandard : menuItemState.ItemTextAlternate; - _fixedTextExtraText = new FixedContentValue(ResolveText, ResolveExtraText, null, Color.Empty); + _fixedTextExtraText = new FixedContentValue(ResolveText, ResolveExtraText, null, GlobalStaticValues.EMPTY_COLOR); _textContent = new ViewDrawMenuItemContent(menuItemStyle, _fixedTextExtraText, 1); docker.Add(_textContent, ViewDockStyle.Fill); _textContent.Enabled = ItemEnabled; @@ -118,15 +118,19 @@ public ViewDrawMenuItem(IContextMenuProvider provider, // Shortcut if (KryptonContextMenuItem.ShowShortcutKeys) { - var shortcutString = KryptonContextMenuItem.ShortcutKeyDisplayString; + string shortcutString = KryptonContextMenuItem.ShortcutKeyDisplayString; if (string.IsNullOrEmpty(shortcutString)) { - shortcutString = (KryptonContextMenuItem.ShortcutKeys != Keys.None) ? new KeysConverter().ConvertToString(KryptonContextMenuItem.ShortcutKeys) : string.Empty; + shortcutString = (KryptonContextMenuItem.ShortcutKeys != Keys.None) + ? new KeysConverter().ConvertToString(KryptonContextMenuItem.ShortcutKeys) is string s + ? s + : string.Empty + : string.Empty; } if (shortcutString.Length > 0) { - _shortcutContent = new ViewDrawMenuItemContent(menuItemState.ItemShortcutText, new FixedContentValue(shortcutString, null, null, Color.Empty), 2); + _shortcutContent = new ViewDrawMenuItemContent(menuItemState.ItemShortcutText, new FixedContentValue(shortcutString, null, null, GlobalStaticValues.EMPTY_COLOR), 2); docker.Add(_shortcutContent, ViewDockStyle.Right); _shortcutContent.Enabled = ItemEnabled; } @@ -140,7 +144,7 @@ public ViewDrawMenuItem(IContextMenuProvider provider, // SubMenu Indicator HasSubMenu = KryptonContextMenuItem.Items.Count > 0; - _subMenuContent = new ViewDrawMenuItemContent(menuItemState.ItemImage.Content, new FixedContentValue(null, null, !HasSubMenu ? _empty16x16 : provider.ProviderImages.GetContextMenuSubMenuImage(), KryptonContextMenuItem.Items.Count == 0 ? Color.Magenta : Color.Empty), 3); + _subMenuContent = new ViewDrawMenuItemContent(menuItemState.ItemImage.Content, new FixedContentValue(null, null, !HasSubMenu ? _empty16x16 : provider.ProviderImages.GetContextMenuSubMenuImage(), KryptonContextMenuItem.Items.Count == 0 ? Color.Magenta : GlobalStaticValues.EMPTY_COLOR), 3); docker.Add(new ViewLayoutCenter(_subMenuContent), ViewDockStyle.Right); _subMenuContent.Enabled = ItemEnabled; @@ -162,7 +166,7 @@ public ViewDrawMenuItem(IContextMenuProvider provider, } // Create the manager for handling tooltips - MouseController = new ToolTipController(KryptonContextMenuItem.ToolTipManager, this, mic); + MouseController = new ToolTipController(KryptonContextMenuItem.ToolTipManager!, this, mic); } /// @@ -223,7 +227,7 @@ protected override void Dispose(bool disposing) /// /// Gets the short text value of the menu item. /// - public string ItemText => _textContent.Values.GetShortText(); + public string ItemText => _textContent.Values!.GetShortText(); #endregion @@ -231,7 +235,7 @@ protected override void Dispose(bool disposing) /// /// Gets the long text value of the menu item. /// - public string ItemExtraText => _textContent.Values.GetLongText(); + public string ItemExtraText => _textContent.Values!.GetLongText(); #endregion @@ -390,7 +394,7 @@ public void ShowSubMenu(bool keyboardActivated) if ((_contextMenu == null) || _contextMenu.IsDisposed) { // No need for the sub menu timer anymore, we are showing - _provider.ProviderViewManager.SetTargetSubMenu((IContextMenuTarget)KeyController); + _provider.ProviderViewManager.SetTargetSubMenu((KeyController as IContextMenuTarget)!); // Only show a sub menu if there is one to be shown! if (HasSubMenu) @@ -467,7 +471,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) } } - PaletteDouble? splitPalette; + PaletteDouble splitPalette; // Make sure we are using the correct palette for state switch (State) @@ -520,11 +524,11 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { case CheckState.Checked: itemColumnImage = _provider.ProviderImages.GetContextMenuCheckedImage(); - itemImageTransparent = Color.Empty; + itemImageTransparent = GlobalStaticValues.EMPTY_COLOR; break; case CheckState.Indeterminate: itemColumnImage = _provider.ProviderImages.GetContextMenuIndeterminateImage(); - itemImageTransparent = Color.Empty; + itemImageTransparent = GlobalStaticValues.EMPTY_COLOR; break; } } @@ -570,13 +574,13 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; base.Layout(context); } #endregion #region Implementation - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -613,7 +617,7 @@ private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -631,7 +635,7 @@ private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) } } - internal void OnContextMenuDisposed(object sender, EventArgs e) + internal void OnContextMenuDisposed(object? sender, EventArgs e) { // Should still be caching a reference to actual display control if (_contextMenu != null) @@ -644,7 +648,7 @@ internal void OnContextMenuDisposed(object sender, EventArgs e) _contextMenu = null; // Tell our view manager that we no longer show a sub menu - _provider.ProviderViewManager.ClearTargetSubMenu((IContextMenuTarget)KeyController); + _provider.ProviderViewManager.ClearTargetSubMenu((KeyController as IContextMenuTarget)!); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItemContent.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItemContent.cs index 113e9d2c7..29f3bb0af 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItemContent.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuItemContent.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -55,7 +55,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - Size preferredSize = base.GetPreferredSize(context); + var preferredSize = base.GetPreferredSize(context!); if (_overridePreferredWidth != 0) { @@ -63,7 +63,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) } else { - LastPreferredSize = base.GetPreferredSize(context); + LastPreferredSize = base.GetPreferredSize(context!); } return preferredSize; diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuLinkLabel.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuLinkLabel.cs index 4f7c84045..45d503c93 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuLinkLabel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuLinkLabel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -79,7 +79,7 @@ public ViewDrawMenuLinkLabel(IContextMenuProvider provider, //_drawContent.MouseController = mllc; _drawContent.KeyController = mllc; // Create the manager for handling tooltips - _drawContent.MouseController = new ToolTipController(KryptonContextMenuLinkLabel.ToolTipManager, this, mllc); + _drawContent.MouseController = new ToolTipController(KryptonContextMenuLinkLabel.ToolTipManager!, this, mllc); // Add docker as the composite content Add(_outerDocker); @@ -125,7 +125,7 @@ public override string ToString() => /// /// Resolves the correct image to use from the menu item. /// - public Image ResolveImage => _cachedCommand != null ? _cachedCommand.ImageSmall : KryptonContextMenuLinkLabel.Image; + public Image? ResolveImage => _cachedCommand != null ? _cachedCommand.ImageSmall : KryptonContextMenuLinkLabel.Image; #endregion @@ -149,7 +149,8 @@ public override string ToString() => /// /// Resolves the correct extra text string to use from the menu item. /// - public string ResolveExtraText => _cachedCommand != null ? _cachedCommand.ExtraText : KryptonContextMenuLinkLabel.ExtraText; + public string ResolveExtraText => + (_cachedCommand != null ? _cachedCommand.ExtraText : KryptonContextMenuLinkLabel.ExtraText)!; #endregion @@ -233,7 +234,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Update with enabled state _drawContent.Enabled = ItemEnabled; - return base.GetPreferredSize(context); + return base.GetPreferredSize(context!); } /// @@ -260,7 +261,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) #endregion #region Private - private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -291,7 +292,7 @@ private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { @@ -305,7 +306,7 @@ private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) } } - private void OnClick(object sender, EventArgs e) => KryptonContextMenuLinkLabel.PerformClick(); + private void OnClick(object? sender, EventArgs e) => KryptonContextMenuLinkLabel.PerformClick(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuMonthCalendar.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuMonthCalendar.cs index 8982f5e64..7f6b6b4f7 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuMonthCalendar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuMonthCalendar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -94,7 +94,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; base.Layout(context); } @@ -129,7 +129,7 @@ public GetToolStripRenderer GetToolStripDelegate get { var contextMenu = (VisualContextMenu)_provider.ProviderViewManager.Control; - return contextMenu.CreateToolStripRenderer; + return contextMenu.CreateToolStripRenderer!; } } @@ -200,7 +200,7 @@ public DateTime? FocusDay /// /// Gets access to the month calendar common appearance entries. /// - public PaletteMonthCalendarRedirect? StateCommon => _monthCalendar.StateCommon; + public PaletteMonthCalendarRedirect StateCommon => _monthCalendar.StateCommon; /// /// Gets access to the month calendar normal appearance entries. diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuRadioButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuRadioButton.cs index 58bd5fe24..71c7a6b13 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuRadioButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -91,7 +91,7 @@ public ViewDrawMenuRadioButton(IContextMenuProvider provider, //_innerDocker.MouseController = mrbc; _innerDocker.KeyController = mrbc; // Create the manager for handling tooltips - _innerDocker.MouseController = new ToolTipController(KryptonContextMenuRadioButton.ToolTipManager, this, mrbc); + _innerDocker.MouseController = new ToolTipController(KryptonContextMenuRadioButton.ToolTipManager!, this, mrbc); // We need to be notified whenever the checked state changes KryptonContextMenuRadioButton.CheckedChanged += OnCheckedChanged; @@ -221,18 +221,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) #endregion #region Private - private void OnCheckedChanged(object sender, EventArgs e) + private void OnCheckedChanged(object? sender, EventArgs e) { ViewDrawRadioButton.CheckState = KryptonContextMenuRadioButton.Checked; _provider.ProviderNeedPaintDelegate(this, new NeedLayoutEventArgs(false)); } - private void OnClick(object sender, EventArgs e) => KryptonContextMenuRadioButton.PerformClick(); + private void OnClick(object? sender, EventArgs e) => KryptonContextMenuRadioButton.PerformClick(); #endregion #region Implementation - private void OnCommandPropertyChanged(object sender, PropertyChangedEventArgs e) + private void OnCommandPropertyChanged(object? sender, PropertyChangedEventArgs e) { switch (e.PropertyName) { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuSeparator.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuSeparator.cs index dc7bbd291..641c77e58 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuSeparator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMenuSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public class ViewDrawMenuSeparator : ViewDrawDocker /// Reference to owning separator entry. /// Palette for obtaining drawing values. public ViewDrawMenuSeparator([DisallowNull] KryptonContextMenuSeparator separator, - PaletteDoubleRedirect? palette) + PaletteDoubleRedirect palette) : base(separator.StateNormal.Back, separator.StateNormal.Border) { // Draw the separator by default @@ -80,7 +80,7 @@ public override void Render([DisallowNull] RenderContext context) if (Draw) { - base.Render(context); + base.Render(context!); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonth.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonth.cs index 80fe7407e..3ba45e308 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonth.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonth.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -67,7 +67,7 @@ public CalendarButtonSpecCollection(ViewDrawMonth owner) /// Delegate for requesting paint changes. public ViewDrawMonth(IKryptonMonthCalendar calendar, ViewLayoutMonths months, - PaletteRedirect? redirector, + PaletteRedirect redirector, NeedPaintHandler needPaintDelegate) : base(false) { @@ -78,7 +78,7 @@ public ViewDrawMonth(IKryptonMonthCalendar calendar, _drawContent = new ViewDrawContent(_calendar.StateNormal.Header.Content, this, VisualOrientation.Top); _borderForced = new PaletteBorderInheritForced(_calendar.StateNormal.Header.Border); _borderForced.ForceBorderEdges(PaletteDrawBorders.None); - _drawHeader = new ViewDrawDocker(_calendar.StateNormal.Header.Back, _borderForced, null) + _drawHeader = new ViewDrawDocker(_calendar.StateNormal.Header.Back, _borderForced, null!) { { _drawContent, ViewDockStyle.Fill } }; @@ -97,10 +97,10 @@ public ViewDrawMonth(IKryptonMonthCalendar calendar, // Using a button spec manager to add the buttons to the header _buttonManager = new ButtonSpecManagerDraw(_calendar.CalendarControl, redirector, null, _buttonSpecs, - new[] { _drawHeader }, - new IPaletteMetric[] { _calendar.StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetCalendar }, - new[] { PaletteMetricPadding.None }, + [_drawHeader], + [_calendar.StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetCalendar], + [PaletteMetricPadding.None], _calendar.GetToolStripDelegate, needPaintDelegate); // Create stacks for holding display items @@ -273,7 +273,7 @@ public override void Layout(ViewLayoutContext context) /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. @@ -298,9 +298,9 @@ private void UpdateWeekNumberViews() _numberStack.Visible = showWeekNumbers; } - private void OnNextMonth(object sender, EventArgs e) => _months.NextMonth(); + private void OnNextMonth(object? sender, EventArgs e) => _months.NextMonth(); - private void OnPrevMonth(object sender, EventArgs e) => _months.PrevMonth(); + private void OnPrevMonth(object? sender, EventArgs e) => _months.PrevMonth(); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDayNames.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDayNames.cs index 59e60c889..ab13640ea 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDayNames.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDayNames.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -59,7 +59,7 @@ protected override void Dispose(bool disposing) { if (_dayMementos[i] != null) { - _dayMementos[i].Dispose(); + _dayMementos[i]?.Dispose(); _dayMementos[i] = null; } } @@ -94,10 +94,19 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); - + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Content palette depends on enabled state of the control PaletteState state = Enabled ? PaletteState.Normal : PaletteState.Disabled; @@ -107,12 +116,12 @@ public override void Layout([DisallowNull] ViewLayoutContext context) for (int i = 0, day=(int)_months.DisplayDayOfWeek; i < 7; i++, day++) { // Define text to be drawn - _drawText = _months.DayNames[day % 7]; + _drawText = _months.DayNames![day % 7]; _dayMementos[i]?.Dispose(); _dayMementos[i] = context.Renderer.RenderStandardContent.LayoutContent(context, layoutRect, _calendar.StateNormal.DayOfWeek.Content, this, - VisualOrientation.Top, state, false,false); + VisualOrientation.Top, state); // Move across to next day layoutRect.X += _months.SizeDays.Width; @@ -130,7 +139,17 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Content palette depends on enabled state of the control PaletteState state = Enabled ? PaletteState.Normal : PaletteState.Disabled; @@ -142,9 +161,9 @@ public override void RenderBefore([DisallowNull] RenderContext context) // Draw using memento cached from the layout call if (_dayMementos[day % 7] != null) { - context.Renderer.RenderStandardContent.DrawContent(context, drawRect, - _calendar.StateNormal.DayOfWeek.Content, _dayMementos[day % 7], - VisualOrientation.Top, state, false, false, true); + context?.Renderer.RenderStandardContent.DrawContent(context, drawRect, + _calendar.StateNormal.DayOfWeek.Content, _dayMementos[day % 7]!, + VisualOrientation.Top, state, true); } // Move across to next day @@ -166,7 +185,7 @@ public override void RenderBefore([DisallowNull] RenderContext context) /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDays.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDays.cs index 1e2b415b3..b24473844 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDays.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthDays.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -72,7 +72,7 @@ protected override void Dispose(bool disposing) { if (_dayMementos[i] != null) { - _dayMementos[i].Dispose(); + _dayMementos[i]?.Dispose(); _dayMementos[i] = null; } } @@ -223,7 +223,17 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Get the current date values DateTime minDate = _calendar.MinDate.Date; @@ -232,7 +242,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) DateTime selectEnd = _calendar.SelectionEnd.Date; // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; var layoutXCell = ClientLocation.X; var layoutXDay = ClientLocation.X + ((_months.SizeDays.Width - _months.SizeDay.Width) / 2); @@ -257,7 +267,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (_dayMementos[index] != null) { - _dayMementos[index].Dispose(); + _dayMementos[index]?.Dispose(); _dayMementos[index] = null; } @@ -321,8 +331,8 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (!skip) { - _dayMementos[index] = context.Renderer.RenderStandardContent.LayoutContent(context, layoutRectDay, paletteTriple.PaletteContent, - this, VisualOrientation.Top, paletteState, false, false); + _dayMementos[index] = context.Renderer.RenderStandardContent.LayoutContent(context, layoutRectDay, paletteTriple.PaletteContent!, + this, VisualOrientation.Top, paletteState); // Track the maximum date displayed for this month (exclude disabled days that are shown for // information but cannot actually be selected themselves as part of a multi selection action) @@ -361,7 +371,17 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Get the current date values DateTime minDate = _calendar.MinDate.Date; @@ -453,22 +473,23 @@ public override void RenderBefore([DisallowNull] RenderContext context) // Do we need to draw the background? if (paletteTriple.PaletteBack.GetBackDraw(paletteState) == InheritBool.True) { - using GraphicsPath path = context.Renderer.RenderStandardBorder.GetBackPath(context, drawRectCell, paletteTriple.PaletteBorder, - VisualOrientation.Top, paletteState); + using GraphicsPath path = context?.Renderer.RenderStandardBorder.GetBackPath(context, drawRectCell, paletteTriple.PaletteBorder!, + VisualOrientation.Top, paletteState)!; + using var gh = new GraphicsHint(context!.Graphics, paletteTriple.PaletteBorder!.GetBorderGraphicsHint(paletteState)); context.Renderer.RenderStandardBack.DrawBack(context, drawRectCell, path, paletteTriple.PaletteBack, VisualOrientation.Top, paletteState, null); } // Do we need to draw the border? - if (paletteTriple.PaletteBorder.GetBorderDraw(paletteState) == InheritBool.True) + if (paletteTriple.PaletteBorder!.GetBorderDraw(paletteState) == InheritBool.True) { - context.Renderer.RenderStandardBorder.DrawBorder(context, drawRectCell, paletteTriple.PaletteBorder, VisualOrientation.Top, paletteState); + context?.Renderer.RenderStandardBorder.DrawBorder(context, drawRectCell, paletteTriple.PaletteBorder, VisualOrientation.Top, paletteState); } // Do we need to draw the content? - if (paletteTriple.PaletteContent.GetContentDraw(paletteState) == InheritBool.True) + if (paletteTriple.PaletteContent!.GetContentDraw(paletteState) == InheritBool.True) { - context.Renderer.RenderStandardContent.DrawContent(context, drawRectDay, paletteTriple.PaletteContent, _dayMementos[index], - VisualOrientation.Top, paletteState, false, false, true); + context?.Renderer.RenderStandardContent.DrawContent(context, drawRectDay, paletteTriple.PaletteContent, _dayMementos[index]!, + VisualOrientation.Top, paletteState, true); } } } @@ -503,7 +524,7 @@ public override void RenderBefore([DisallowNull] RenderContext context) /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthUpDown.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthUpDown.cs index d56ef8726..7e2e5976f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthUpDown.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawMonthUpDown.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -67,7 +67,7 @@ public enum DrawMonthCalendarGlyph /// Glyph to be drawn. /// Delegate for requests repainting. public ViewDrawMonthUpDown(IPaletteTriple paletteState, - IPaletteMetric? paletteMetric, + IPaletteMetric paletteMetric, IContentValues? buttonValues, DrawMonthCalendarGlyph glyph, NeedPaintHandler needPaintHandler) @@ -142,8 +142,12 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering after child elements are rendered. /// /// Rendering context. - public override void RenderAfter(RenderContext context) + public override void RenderAfter([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } switch (_glyph) { case DrawMonthCalendarGlyph.DropDownButton: @@ -165,14 +169,14 @@ public override void RenderAfter(RenderContext context) /// /// Source of the event. /// Event arguments assocaited with the event. - protected void OnButtonClick(object sender, MouseEventArgs e) => Click?.Invoke(this, e); + protected void OnButtonClick(object? sender, MouseEventArgs e) => Click?.Invoke(this, e); /// /// Raises the MouseSelect event. /// /// Source of the event. /// Event arguments assocaited with the event. - protected void OnButtonMouseSelect(object sender, MouseEventArgs e) => MouseSelect?.Invoke(this, e); + protected void OnButtonMouseSelect(object? sender, MouseEventArgs e) => MouseSelect?.Invoke(this, e); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawNull.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawNull.cs index 9ed8f8477..54844c126 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawNull.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawNull.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawPanel.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawPanel.cs index 255c7dcd4..42553a7ff 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawPanel.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawPanel.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -40,7 +40,7 @@ public ViewDrawPanel() public ViewDrawPanel([DisallowNull] IPaletteBack paletteBack) { Debug.Assert(paletteBack != null); - _paletteBack = paletteBack; + _paletteBack = paletteBack!; VisualOrientation = VisualOrientation.Top; } @@ -97,7 +97,7 @@ public void SetPalettes([DisallowNull] IPaletteBack paletteBack) Debug.Assert(paletteBack != null); // Use newly provided palettes - _paletteBack = paletteBack; + _paletteBack = paletteBack!; } /// @@ -116,10 +116,20 @@ public void SetPalettes([DisallowNull] IPaletteBack paletteBack) /// True if transparent areas exist; otherwise false. public override bool EvalTransparentPaint([DisallowNull] ViewContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Ask the renderer to evaluate the given palette - return context.Renderer.EvalTransparentPaint(_paletteBack, State); + return context!.Renderer.EvalTransparentPaint(_paletteBack, State); } #endregion @@ -157,14 +167,19 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + if (!IgnoreRender) { // Do we need to draw the background? diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawRadioButton.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawRadioButton.cs index 83380c539..e8c9e2cf9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawRadioButton.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawRadioButton.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -30,7 +30,7 @@ public class ViewDrawRadioButton : ViewLeaf public ViewDrawRadioButton([DisallowNull] PaletteBase palette) { Debug.Assert(palette != null); - _palette = palette; + _palette = palette!; } /// @@ -74,7 +74,17 @@ public override string ToString() => /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Ask the renderer for the required size of the check box return context.Renderer.RenderGlyph.GetRadioButtonPreferredSize(context, _palette, @@ -107,11 +117,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) => - context.Renderer.RenderGlyph.DrawRadioButton(context, ClientRectangle, - _palette, Enabled, - CheckState, Tracking, + public override void RenderBefore([DisallowNull] RenderContext context) + { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + + context.Renderer.RenderGlyph.DrawRadioButton(context, ClientRectangle, + _palette, Enabled, + CheckState, Tracking, Pressed); + } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawScrollBar.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawScrollBar.cs index 81aeb3796..afda87c03 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawScrollBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawScrollBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -190,23 +190,23 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (!IsDisposed && !_removing) { // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Are we allowed to layout child controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // Make sure the scrollbar has actually been created - CreateScrollBar(context.Control); + CreateScrollBar(context.Control!); // If we need to hide/disable the control then do it before position changes if (!Visible) { - _scrollBar.Hide(); + _scrollBar?.Hide(); } if (!Enabled) { - _scrollBar.Enabled = false; + _scrollBar!.Enabled = false; } // Should the scrollbar is shorter than then the entire client area? @@ -214,31 +214,31 @@ public override void Layout([DisallowNull] ViewLayoutContext context) { if (Vertical) { - _scrollBar.SetBounds(ClientLocation.X, ClientLocation.Y, + _scrollBar?.SetBounds(ClientLocation.X, ClientLocation.Y, ClientWidth, ClientHeight - SystemInformation.HorizontalScrollBarHeight); } else { - _scrollBar.SetBounds(ClientLocation.X, ClientLocation.Y, + _scrollBar?.SetBounds(ClientLocation.X, ClientLocation.Y, ClientWidth - SystemInformation.VerticalScrollBarWidth, ClientHeight); } } else { // Position the ScrollBar in the entire requested area - _scrollBar.SetBounds(ClientLocation.X, ClientLocation.Y, + _scrollBar?.SetBounds(ClientLocation.X, ClientLocation.Y, ClientWidth, ClientHeight); } // If we need to show/enable control then do it after position changes if (Visible) { - _scrollBar.Show(); + _scrollBar?.Show(); } if (Enabled) { - _scrollBar.Enabled = true; + _scrollBar!.Enabled = true; } } } @@ -306,10 +306,10 @@ private void RemoveScrollBar() } } - private void OnScrollBarChange(object sender, ScrollEventArgs e) + private void OnScrollBarChange(object? sender, ScrollEventArgs e) { // Update with the new scroll value - _scrollBar.Value = e.NewValue; + _scrollBar!.Value = e.NewValue; ScrollChanged?.Invoke(this, EventArgs.Empty); } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSeparator.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSeparator.cs index 47c8eb3d3..80ca7e4f4 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSeparator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -47,8 +47,8 @@ public class ViewDrawSeparator : ViewLeaf /// Visual orientation of the content. public ViewDrawSeparator([DisallowNull] IPaletteDouble paletteDisabled, [DisallowNull] IPaletteDouble paletteNormal, [DisallowNull] IPaletteDouble paletteTracking, [DisallowNull] IPaletteDouble palettePressed, - [DisallowNull] IPaletteMetric metricDisabled, [DisallowNull] IPaletteMetric metricNormal, - [DisallowNull] IPaletteMetric metricTracking, [DisallowNull] IPaletteMetric metricPressed, + [DisallowNull] IPaletteMetric metricDisabled, [DisallowNull] IPaletteMetric metricNormal, + [DisallowNull] IPaletteMetric metricTracking, [DisallowNull] IPaletteMetric metricPressed, PaletteMetricPadding metricPadding, Orientation orientation) { @@ -179,7 +179,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion @@ -192,23 +192,28 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate reference parameter - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Ensure we are using the correct palette CheckPaletteState(); // Apply padding needed outside the border of the separator - Rectangle rect = CommonHelper.ApplyPadding(Orientation, ClientRectangle, - _metric.GetMetricPadding(ElementState, MetricPadding)); + var rect = CommonHelper.ApplyPadding(Orientation, ClientRectangle, + _metric!.GetMetricPadding(ElementState, MetricPadding)); // Ask the renderer to perform drawing of the separator glyph - context.Renderer.RenderGlyph.DrawSeparator(context, rect, _palette.PaletteBack, _palette.PaletteBorder, + context.Renderer.RenderGlyph.DrawSeparator(context, rect, _palette!.PaletteBack, _palette.PaletteBorder!, Orientation, State, (Source == null) || Source.SeparatorCanMove); } #endregion @@ -240,7 +245,7 @@ private void CheckPaletteState() default: // Should never happen! Debug.Assert(false); - break; + throw DebugTools.NotImplemented(state.ToString()); } } #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSplitCanvas.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSplitCanvas.cs index b9af7e9c2..f88955e5a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSplitCanvas.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawSplitCanvas.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -207,9 +207,9 @@ public virtual void SetPalettes([DisallowNull] IPaletteBack paletteBack, Debug.Assert(paletteBack != null); // Use newly provided palettes - PaletteBack = paletteBack; - _paletteBackDraw.SetInherit(paletteBack); - _paletteBackLight.Inherit = paletteBack; + PaletteBack = paletteBack!; + _paletteBackDraw.SetInherit(paletteBack!); + _paletteBackLight.Inherit = paletteBack!; // If not using a forced override decorator, then just store the new border palette // otherwise we update the decorator with the palette as the new inheritance to use @@ -219,7 +219,7 @@ public virtual void SetPalettes([DisallowNull] IPaletteBack paletteBack, } else { - _borderForced.SetInherit(paletteBorder); + _borderForced.SetInherit(paletteBorder!); } PaletteMetric = paletteMetric; @@ -321,25 +321,27 @@ public PaletteGraphicsHint ForceGraphicsHint #endregion - #region DrawOnComposition - /// - /// Gets and sets a value indicating if the canvas is drawing on composition. - /// - public bool DrawCanvasOnComposition { get; set; } - - #endregion - #region GetOuterBorderPath /// /// Gets a path that describes the outside of the border. /// /// Context used by the renderer. /// Path instance. - public GraphicsPath? GetOuterBorderPath(RenderContext context) + public GraphicsPath? GetOuterBorderPath([DisallowNull] RenderContext context) { + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + if (PaletteBorder != null) { - return context.Renderer?.RenderStandardBorder.GetOutsideBorderPath(context, ClientRectangle, + return context.Renderer.RenderStandardBorder.GetOutsideBorderPath(context, ClientRectangle, PaletteBorder, Orientation, State); } @@ -357,10 +359,20 @@ public PaletteGraphicsHint ForceGraphicsHint /// True if transparent areas exist; otherwise false. public override bool EvalTransparentPaint([DisallowNull] ViewContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Ask the renderer to evaluate the given palette - return context.Renderer.EvalTransparentPaint(PaletteBack, PaletteBorder, State); + return context!.Renderer.EvalTransparentPaint(PaletteBack, PaletteBorder, State); } #endregion @@ -374,22 +386,17 @@ public override bool EvalTransparentPaint([DisallowNull] ViewContext context) /// public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } - // Ensure any content children have correct composition setting - foreach (ViewBase child in this) + if (context.Renderer is null) { - if (child is ViewDrawContent viewContent) - { - viewContent.DrawContentOnComposition = DrawCanvasOnComposition; - viewContent.Glowing = viewContent.DrawContentOnComposition; - } + throw new ArgumentNullException(nameof(context.Renderer)); } // Let base class find preferred size of the children @@ -398,12 +405,12 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) // Apply space the border takes up preferredSize = CommonHelper.ApplyPadding(Orientation, preferredSize, DrawTabBorder - ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, PaletteBorder, State, Orientation, + ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, PaletteBorder!, State, Orientation, TabBorderStyle) - : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(PaletteBorder, State, Orientation)); + : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(PaletteBorder!, State, Orientation)); // Do we have a metric source for additional padding? - if ((PaletteMetric != null) && (_metricPadding != PaletteMetricPadding.None)) + if (PaletteMetric != null && _metricPadding != PaletteMetricPadding.None) { // Apply padding needed outside the border of the canvas preferredSize = CommonHelper.ApplyPadding(Orientation, preferredSize, PaletteMetric.GetMetricPadding(State, _metricPadding)); @@ -419,19 +426,24 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // We take on all the available display area ClientRectangle = context.DisplayRectangle; // Do we have a metric source for additional padding? - if ((PaletteMetric != null) && (_metricPadding != PaletteMetricPadding.None)) + if (PaletteMetric != null && _metricPadding != PaletteMetricPadding.None) { // Get the padding to be applied before the canvas drawing Padding outerPadding = PaletteMetric.GetMetricPadding(State, _metricPadding); @@ -441,28 +453,14 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Calculate how much space the border takes up - Padding padding = DrawTabBorder - ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, PaletteBorder, State, + var padding = DrawTabBorder + ? context.Renderer.RenderTabBorder.GetTabBorderDisplayPadding(context, PaletteBorder!, State, Orientation, TabBorderStyle) - : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(PaletteBorder, State, Orientation); + : context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(PaletteBorder!, State, Orientation); // Apply the padding to the client rectangle context.DisplayRectangle = CommonHelper.ApplyPadding(Orientation, ClientRectangle, padding); - // Ensure any content children have correct composition setting - foreach (ViewBase child in this) - { - if (child is ViewDrawContent viewContent) - { - // Do we need to draw the background? - var drawBackground = DrawCanvas && (PaletteBack.GetBackDraw(State) == InheritBool.True); - - // Update the content accordingly - viewContent.DrawContentOnComposition = DrawCanvasOnComposition && !drawBackground; - viewContent.Glowing = viewContent.DrawContentOnComposition; - } - } - // Let child elements layout base.Layout(context); @@ -480,17 +478,22 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); // Validate incoming reference - if (context == null) + if (context is null) { throw new ArgumentNullException(nameof(context)); } + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + RenderBackground(context, ClientRectangle); - if (DrawCanvas && (PaletteBorder != null)) + if (DrawCanvas && PaletteBorder != null) { // Do we draw the border before the children? if (!DrawBorderLast) @@ -540,14 +543,14 @@ public override void RenderAfter([DisallowNull] RenderContext context) throw new ArgumentNullException(nameof(context)); } - if (DrawCanvas && (PaletteBorder != null)) + if (DrawCanvas && PaletteBorder != null) { // Do we draw the border after the children? if (DrawBorderLast) { // Set the clipping region back to original setting - Region oldRegion = context.Graphics.Clip; - context.Graphics.Clip = _clipRegion; + var oldRegion = context.Graphics.Clip; + context.Graphics.Clip = _clipRegion!; _clipRegion = null; // Remember to dispose of the temporary region, no longer needed @@ -563,7 +566,7 @@ public override void RenderAfter([DisallowNull] RenderContext context) private void RenderBackground(RenderContext context, Rectangle rect) { // Do we need to draw the background? - if (DrawCanvas && (PaletteBack.GetBackDraw(State) == InheritBool.True)) + if (DrawCanvas && PaletteBack.GetBackDraw(State) == InheritBool.True) { if (Splitter) { @@ -577,12 +580,12 @@ private void RenderBackground(RenderContext context, Rectangle rect) if (SplitWithFading) { DrawBackground(context, rect, mouseInSplit ? _paletteBackLight : PaletteBack, - PaletteBorder, PaletteState.Tracking); + PaletteBorder!, PaletteState.Tracking); } else { DrawBackground(context, rect, mouseInSplit ? _paletteBackDraw : PaletteBack, - PaletteBorder, mouseInSplit ? PaletteState.Normal : PaletteState.Tracking); + PaletteBorder!, mouseInSplit ? PaletteState.Normal : PaletteState.Tracking); } } @@ -591,12 +594,12 @@ private void RenderBackground(RenderContext context, Rectangle rect) if (SplitWithFading) { DrawBackground(context, rect, mouseInSplit ? PaletteBack : _paletteBackLight, - PaletteBorder, PaletteState.Tracking); + PaletteBorder!, PaletteState.Tracking); } else { DrawBackground(context, rect, mouseInSplit ? PaletteBack : _paletteBackDraw, - PaletteBorder, mouseInSplit ? PaletteState.Tracking : PaletteState.Normal); + PaletteBorder!, mouseInSplit ? PaletteState.Tracking : PaletteState.Normal); } } } @@ -608,12 +611,12 @@ private void RenderBackground(RenderContext context, Rectangle rect) if (SplitWithFading) { DrawBackground(context, rect, mouseInSplit ? PaletteBack : _paletteBackLight, - PaletteBorder, mouseInSplit ? PaletteState.Pressed : PaletteState.Tracking); + PaletteBorder!, mouseInSplit ? PaletteState.Pressed : PaletteState.Tracking); } else { DrawBackground(context, rect, mouseInSplit ? PaletteBack : _paletteBackDraw, - PaletteBorder, mouseInSplit ? PaletteState.Pressed : PaletteState.Normal); + PaletteBorder!, mouseInSplit ? PaletteState.Pressed : PaletteState.Normal); } } @@ -622,24 +625,24 @@ private void RenderBackground(RenderContext context, Rectangle rect) if (SplitWithFading) { DrawBackground(context, rect, mouseInSplit ? _paletteBackLight : PaletteBack, - PaletteBorder, mouseInSplit ? PaletteState.Tracking : PaletteState.Pressed); + PaletteBorder!, mouseInSplit ? PaletteState.Tracking : PaletteState.Pressed); } else { DrawBackground(context, rect, mouseInSplit ? _paletteBackDraw : PaletteBack, - PaletteBorder, mouseInSplit ? PaletteState.Normal : PaletteState.Pressed); + PaletteBorder!, mouseInSplit ? PaletteState.Normal : PaletteState.Pressed); } } } break; default: - DrawBackground(context, rect, PaletteBack, PaletteBorder, State); + DrawBackground(context, rect, PaletteBack, PaletteBorder!, State); break; } } else { - DrawBackground(context, rect, PaletteBack, PaletteBorder, State); + DrawBackground(context, rect, PaletteBack, PaletteBorder!, State); } } } @@ -649,7 +652,7 @@ private void RenderBorder([DisallowNull] RenderContext context, Rectangle rect) Debug.Assert(context != null); // Do we need to draw the border? - if (PaletteBorder.GetBorderDraw(State) == InheritBool.True) + if (PaletteBorder!.GetBorderDraw(State) == InheritBool.True) { if (Splitter) { @@ -657,37 +660,40 @@ private void RenderBorder([DisallowNull] RenderContext context, Rectangle rect) switch (State) { case PaletteState.Tracking: - DrawBorder(context, rect, PaletteBorder, PaletteState.Tracking); + DrawBorder(context!, rect, PaletteBorder, PaletteState.Tracking); break; case PaletteState.Pressed: { - DrawBorder(context, rect, PaletteBorder, PaletteState.Tracking); + DrawBorder(context!, rect, PaletteBorder, PaletteState.Tracking); - using (var clipToSplitter = new Clipping(context.Graphics, - mouseInSplit ? _splitRectangle : NonSplitRectangle)) - { - DrawBorder(context, rect, PaletteBorder, PaletteState.Pressed); - } + using var clipToSplitter = new Clipping(context!.Graphics, + mouseInSplit ? _splitRectangle : NonSplitRectangle); + DrawBorder(context, rect, PaletteBorder, PaletteState.Pressed); } break; default: - DrawBorder(context, rect, PaletteBorder, State); + DrawBorder(context!, rect, PaletteBorder, State); break; } } else { - DrawBorder(context, rect, PaletteBorder, State); + DrawBorder(context!, rect, PaletteBorder, State); } } } - private void DrawBackground(RenderContext context, + private void DrawBackground([DisallowNull] RenderContext context, Rectangle rect, IPaletteBack paletteBack, IPaletteBorder paletteBorder, PaletteState state) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + GraphicsPath borderPath; Padding borderPadding; @@ -707,24 +713,30 @@ private void DrawBackground(RenderContext context, Rectangle enclosingRect = CommonHelper.ApplyPadding(Orientation, rect, borderPadding); // Render the background inside the border path + using var gh = new GraphicsHint(context.Graphics, paletteBorder.GetBorderGraphicsHint(state)); _mementoBack = context.Renderer.RenderStandardBack.DrawBack(context, enclosingRect, borderPath, paletteBack, Orientation, state, _mementoBack); borderPath.Dispose(); } - private void DrawBorder(RenderContext context, + private void DrawBorder([DisallowNull] RenderContext context, Rectangle rect, IPaletteBorder paletteBorder, PaletteState state) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Render the border over the background and children if (DrawTabBorder) { - context.Renderer.RenderTabBorder.DrawTabBorder(context, rect, PaletteBorder, Orientation, state, TabBorderStyle); + context.Renderer.RenderTabBorder.DrawTabBorder(context, rect, PaletteBorder!, Orientation, state, TabBorderStyle); } else { - context.Renderer.RenderStandardBorder.DrawBorder(context, rect, PaletteBorder, Orientation, state); + context.Renderer.RenderStandardBorder.DrawBorder(context, rect, PaletteBorder!, Orientation, state); } } @@ -744,9 +756,9 @@ private bool MouseInSplit } } - private bool SplitWithFading => (PaletteMetric == null) || - (PaletteMetric.GetMetricBool(State, PaletteMetricBool.SplitWithFading) == - InheritBool.True); + private bool SplitWithFading => PaletteMetric == null || + PaletteMetric.GetMetricBool(State, PaletteMetricBool.SplitWithFading) == + InheritBool.True; #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawToday.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawToday.cs index 8b8841e94..58e099ef3 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawToday.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawToday.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -13,7 +13,7 @@ namespace Krypton.Toolkit { /// - /// Draw todays date as a button. + /// Draw today's date as a button. /// public class ViewDrawToday : ViewDrawButton, IContentValues @@ -46,7 +46,7 @@ public ViewDrawToday(IKryptonMonthCalendar calendar, IPaletteTriple palettePressed, NeedPaintHandler needPaintHandler) : base(paletteDisabled, paletteNormal, paletteTracking, palettePressed, - paletteNormal, paletteTracking, palettePressed, null, + paletteNormal, paletteTracking, palettePressed, null!, null, VisualOrientation.Top, false) { _calendar = calendar; @@ -85,14 +85,14 @@ public override string ToString() => /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. /// /// String value. public string GetShortText() => - $"{KryptonLanguageManager.GeneralToolkitStrings.Today} {_calendar.TodayDate.ToString(_calendar.TodayFormat)}"; + $"{KryptonManager.Strings.GeneralStrings.Today} {_calendar.TodayDate.ToString(_calendar.TodayFormat)}"; /// /// Gets the content long text. @@ -103,7 +103,7 @@ public string GetShortText() => #endregion #region Implementation - private void OnClick(object sender, MouseEventArgs e) => Click?.Invoke(this, EventArgs.Empty); + private void OnClick(object? sender, MouseEventArgs e) => Click?.Invoke(this, EventArgs.Empty); #endregion @@ -114,7 +114,7 @@ public string GetShortText() => public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - base.Layout(context); + base.Layout(context!); } } } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackBar.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackBar.cs index 13c219047..659dd2fe6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackBar.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackBar.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackPosition.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackPosition.cs index 112b7236c..a3ea4fe15 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackPosition.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackPosition.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -74,8 +74,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + IPaletteElementColor elementColors = State switch { PaletteState.Normal => _drawTrackBar.StateNormal.Position, diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTP.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTP.cs index c24934c56..2dc125792 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTP.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTP.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTicks.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTicks.cs index c137c6edb..5f06af8ce 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTicks.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTicks.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -79,8 +79,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + IPaletteElementColor elementColors; if (Enabled) { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTrack.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTrack.cs index 41c949432..061bcba82 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTrack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawTrackTrack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -73,8 +73,13 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Perform rendering before child elements are rendered. /// /// Rendering context. - public override void RenderBefore(RenderContext context) + public override void RenderBefore([DisallowNull] RenderContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + IPaletteElementColor elementColors; if (Enabled) { diff --git a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawWeekNumbers.cs b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawWeekNumbers.cs index a7bf147b8..aadc3b647 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawWeekNumbers.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Draw/ViewDrawWeekNumbers.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -21,9 +21,9 @@ public class ViewDrawWeekNumbers : ViewLeaf, #region Static Fields private const int WEEKS = 6; - private static readonly TimeSpan TIMESPAN_1DAY = new TimeSpan(1, 0, 0, 0); - private static readonly TimeSpan TIMESPAN_6DAYS = new TimeSpan(6, 0, 0, 0); - private static readonly TimeSpan TIMESPAN_1WEEK = new TimeSpan(7, 0, 0, 0); + private static readonly TimeSpan _timespan1Day = new TimeSpan(1, 0, 0, 0); + private static readonly TimeSpan _timespan6Days = new TimeSpan(6, 0, 0, 0); + private static readonly TimeSpan _timespan1Week = new TimeSpan(7, 0, 0, 0); #endregion #region Instance Fields @@ -108,12 +108,12 @@ public DateTime Month // Begin with the day before the required month _firstDay = new DateTime(value.Year, value.Month, 1); - _firstDay -= TIMESPAN_1DAY; + _firstDay -= _timespan1Day; // Move backwards until we hit the starting day of the week while (_firstDay.DayOfWeek != _months.DisplayDayOfWeek) { - _firstDay -= TIMESPAN_1DAY; + _firstDay -= _timespan1Day; } // Find the first day of the year @@ -123,7 +123,7 @@ public DateTime Month // Move forewards until we hit the starting day of the year while (_weekDay.DayOfWeek != yearDay.DayOfWeek) { - _weekDay += TIMESPAN_1DAY; + _weekDay += _timespan1Day; } } } @@ -146,10 +146,20 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) /// Layout context. public override void Layout([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Do not draw week numbers in bold or focused _calendar.SetFocusOverride(false); @@ -171,20 +181,20 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (_dayMementos[j] != null) { - _dayMementos[j].Dispose(); + _dayMementos[j]?.Dispose(); _dayMementos[j] = null; } - PaletteState paletteState = Enabled ? PaletteState.Normal : PaletteState.Disabled; + var paletteState = Enabled ? PaletteState.Normal : PaletteState.Disabled; IPaletteTriple paletteTriple = Enabled ? _calendar.StateNormal.Day : _calendar.StateDisabled.Day; - _dayMementos[j] = context.Renderer.RenderStandardContent.LayoutContent(context, layoutRectWeek, paletteTriple.PaletteContent, - this, VisualOrientation.Top, paletteState, false, false); + _dayMementos[j] = context.Renderer.RenderStandardContent.LayoutContent(context, layoutRectWeek, paletteTriple.PaletteContent!, + this, VisualOrientation.Top, paletteState); } // Move to next week - weekDate += TIMESPAN_1WEEK; - displayDate += TIMESPAN_1WEEK; + weekDate += _timespan1Week; + displayDate += _timespan1Week; layoutRectWeek.Y += _months.SizeDays.Height; } @@ -200,7 +210,17 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// Rendering context. public override void RenderBefore([DisallowNull] RenderContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Do not draw week numbers in bold or focused _calendar.SetFocusOverride(false); @@ -226,28 +246,29 @@ public override void RenderBefore([DisallowNull] RenderContext context) // Do we need to draw the background? if (paletteTriple.PaletteBack.GetBackDraw(paletteState) == InheritBool.True) { - using GraphicsPath path = context.Renderer.RenderStandardBorder.GetBackPath(context, drawRectWeek, paletteTriple.PaletteBorder, + using GraphicsPath path = context!.Renderer.RenderStandardBorder.GetBackPath(context, drawRectWeek, paletteTriple.PaletteBorder!, VisualOrientation.Top, paletteState); context.Renderer.RenderStandardBack.DrawBack(context, drawRectWeek, path, paletteTriple.PaletteBack, VisualOrientation.Top, paletteState, null); } // Do we need to draw the border? - if (paletteTriple.PaletteBorder.GetBorderDraw(paletteState) == InheritBool.True) + if (paletteTriple.PaletteBorder!.GetBorderDraw(paletteState) == InheritBool.True) { + using var gh = new GraphicsHint(context!.Graphics, paletteTriple.PaletteBorder.GetBorderGraphicsHint(paletteState)); context.Renderer.RenderStandardBorder.DrawBorder(context, drawRectWeek, paletteTriple.PaletteBorder, VisualOrientation.Top, paletteState); } // Do we need to draw the content? - if (paletteTriple.PaletteContent.GetContentDraw(paletteState) == InheritBool.True) + if (paletteTriple.PaletteContent!.GetContentDraw(paletteState) == InheritBool.True) { - context.Renderer.RenderStandardContent.DrawContent(context, drawRectWeek, paletteTriple.PaletteContent, _dayMementos[j], - VisualOrientation.Top, paletteState, false,false, true); + context?.Renderer.RenderStandardContent.DrawContent(context, drawRectWeek, paletteTriple.PaletteContent, _dayMementos[j]!, + VisualOrientation.Top, paletteState, true); } } // Move to next week - weekDate += TIMESPAN_1WEEK; - displayDate += TIMESPAN_1WEEK; + weekDate += _timespan1Week; + displayDate += _timespan1Week; drawRectWeek.Y += _months.SizeDays.Height; } } @@ -266,7 +287,7 @@ public override void RenderBefore([DisallowNull] RenderContext context) /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. @@ -292,7 +313,7 @@ private bool DisplayWeekNumber(DateTime displayDate, ref DateTime weekDate) { if (displayDate < _month) { - displayDate += TIMESPAN_6DAYS; + displayDate += _timespan6Days; if (displayDate < _month) { return _firstMonth; @@ -305,7 +326,7 @@ private bool DisplayWeekNumber(DateTime displayDate, ref DateTime weekDate) else { DateTime nextMonth = _month.AddMonths(1); - DateTime displayDate2 = displayDate + TIMESPAN_6DAYS; + DateTime displayDate2 = displayDate + _timespan6Days; if (displayDate2 >= nextMonth) { if (displayDate >= nextMonth) diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCenter.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCenter.cs index 7b642231e..4a3391af2 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCenter.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCenter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -47,7 +47,7 @@ public ViewLayoutCenter(ViewBase childElement) /// Target for recovering metric values. /// Metric to use for border padding. /// Orientation of the element. - public ViewLayoutCenter(IPaletteMetric? paletteMetric, + public ViewLayoutCenter(IPaletteMetric paletteMetric, PaletteMetricPadding metricPadding, VisualOrientation orientation) : this(paletteMetric, metricPadding, orientation, null) diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutColorStack.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutColorStack.cs index e019b1699..49c013c35 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutColorStack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutColorStack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -43,10 +43,10 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // Perform rendering before any children - RenderBefore(context); + RenderBefore(context!); // Perform rendering after that of children - RenderAfter(context); + RenderAfter(context!); } /// diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutContext.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutContext.cs index 7015defff..f1ec59199 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutContext.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutContext.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -24,7 +24,7 @@ public class ViewLayoutContext : ViewContext /// Control associated with rendering. /// Rendering provider. public ViewLayoutContext(Control control, - IRenderer? renderer) + IRenderer renderer) : this(null, control, control, null, renderer, control.Size) { } @@ -39,7 +39,7 @@ public ViewLayoutContext(Control control, public ViewLayoutContext(ViewManager? manager, Control control, Control alignControl, - IRenderer? renderer) + IRenderer renderer) : this(manager, control, alignControl, null, renderer, control.Size) { } @@ -55,7 +55,7 @@ public ViewLayoutContext(ViewManager? manager, public ViewLayoutContext(ViewManager? manager, Control control, Control alignControl, - IRenderer? renderer, + IRenderer renderer, Size displaySize) : this(manager, control, alignControl, null, renderer, displaySize) { @@ -71,7 +71,7 @@ public ViewLayoutContext(ViewManager? manager, public ViewLayoutContext(ViewManager? manager, Form form, Rectangle formRect, - IRenderer? renderer) + IRenderer renderer) : base(manager, form, form, null, renderer) => // The initial display rectangle is the provided size DisplayRectangle = new Rectangle(Point.Empty, formRect.Size); @@ -89,7 +89,7 @@ public ViewLayoutContext(ViewManager? manager, Control control, Control alignControl, Graphics? graphics, - IRenderer? renderer, + IRenderer renderer, Size displaySize) : base(manager, control, alignControl, graphics, renderer) => // The initial display rectangle is the provided size diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutControl.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutControl.cs index 13d70e7b8..8f4a29a16 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutControl.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutControl.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -50,13 +50,13 @@ public ViewLayoutControl([DisallowNull] ViewControl viewControl, ChildView = viewChild; // Ensure the child is hooked into the hierarchy of elements - ChildView.Parent = this; + ChildView!.Parent = this; // Create the view control instance ChildControl = viewControl; // Back reference hookup - ChildControl.ViewLayoutControl = this; + ChildControl!.ViewLayoutControl = this; // Start off invisible until first laid out ChildControl.Visible = false; @@ -65,7 +65,7 @@ public ViewLayoutControl([DisallowNull] ViewControl viewControl, OwningControl = ChildControl; // Add our new control to the provided parent collection - CommonHelper.AddControlToParent(rootControl, ChildControl); + CommonHelper.AddControlToParent(rootControl!, ChildControl); } /// @@ -81,7 +81,7 @@ protected override void Dispose(bool disposing) { try { - ViewControl vc = ChildControl; + ViewControl? vc = ChildControl; ChildControl = null; CommonHelper.RemoveControlFromParent(vc); } @@ -161,7 +161,7 @@ public override bool Visible /// /// Gets access to the child controls paint delegate. /// - public NeedPaintHandler ChildPaintDelegate => ChildControl.NeedPaintDelegate; + public NeedPaintHandler? ChildPaintDelegate => ChildControl?.NeedPaintDelegate; #endregion @@ -171,8 +171,8 @@ public override bool Visible /// public bool ChildTransparentBackground { - get => ChildControl.TransparentBackground; - set => ChildControl.TransparentBackground = value; + get => ChildControl!.TransparentBackground; + set => ChildControl!.TransparentBackground = value; } #endregion @@ -182,8 +182,8 @@ public bool ChildTransparentBackground /// public bool InDesignMode { - get => ChildControl.InDesignMode; - set => ChildControl.InDesignMode = value; + get => ChildControl!.InDesignMode; + set => ChildControl!.InDesignMode = value; } #endregion @@ -192,13 +192,13 @@ public bool InDesignMode /// Reparent the provided control as a child of ourself. /// /// Control to reparent. - public void MakeParent(Control c) + public void MakeParent(Control? c) { // Remove control from current collection - CommonHelper.RemoveControlFromParent(c); + CommonHelper.RemoveControlFromParent(c!); // Add to our child control - CommonHelper.AddControlToParent(ChildControl, c); + CommonHelper.AddControlToParent(ChildControl!, c!); } #endregion @@ -221,7 +221,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (ChildControl != null) { // Ensure the control has the correct parent - UpdateParent(context.Control); + UpdateParent(context.Control!); // Ensure context has the correct control using var ccc = new CorrectContextControl(context, ChildControl); @@ -258,7 +258,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) ClientRectangle = context.DisplayRectangle; // Are we allowed to layout child controls? - if (!context.ViewManager.DoNotLayoutControls) + if (!context.ViewManager!.DoNotLayoutControls) { // Do we have a control to position? if (ChildControl != null) diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCrumbs.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCrumbs.cs index cd8fff31f..74ed5ab2a 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCrumbs.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutCrumbs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,9 +18,9 @@ namespace Krypton.Toolkit public class ViewLayoutCrumbs : ViewComposite, IContentValues { #region Type Definitions - private class CrumbToButton : Dictionary { } - private class ButtonToCrumb : Dictionary { } - private class MenuItemToCrumb : Dictionary { } + private class CrumbToButton : Dictionary; + private class ButtonToCrumb : Dictionary; + private class MenuItemToCrumb : Dictionary; #endregion #region Instance Fields @@ -99,10 +99,10 @@ public override Size GetPreferredSize(ViewLayoutContext context) for(var i=1; i ClientWidth) { // Overflow button must be visible - this[0].Visible = true; + this[0]!.Visible = true; // How much space do we need to save? var overflowed = offset - ClientWidth; @@ -172,23 +172,24 @@ public override void Layout([DisallowNull] ViewLayoutContext context) offset = layoutRect.X; for (var i = 0; i < Count; i++) { - // Decide if the crumb (not the overflow button) can be visible - if (i > 0) + this[i]!.Visible = i switch { - this[i].Visible = overflowed <= 0; - } + // Decide if the crumb (not the overflow button) can be visible + > 0 => overflowed <= 0, + _ => this[i]!.Visible + }; - if (this[i].Visible) + if (this[i]!.Visible) { // Do not show the left border on the first crumb - redirect.Left = i == 0; + redirect!.Left = i == 0; // Recover the already calculated size - Size childSize = this[i].GetPreferredSize(context); + Size childSize = this[i]!.GetPreferredSize(context); context.DisplayRectangle = layoutRect with { X = offset, Width = childSize.Width }; // Position the child - this[i].Layout(context); + this[i]?.Layout(context); // Move across offset += childSize.Width; @@ -197,18 +198,18 @@ public override void Layout([DisallowNull] ViewLayoutContext context) // Adjust overflow space depending on if we are positioning crumb or overflow if (i != 0) { - overflowed -= this[i].ClientWidth; + overflowed -= this[i]!.ClientWidth; } else { - overflowed += this[i].ClientWidth; + overflowed += this[i]!.ClientWidth; } } } else { // No overflow then no need for the overflow button - this[0].Visible = false; + this[0]!.Visible = false; } // Must restore the display rectangle to the same size as when it entered @@ -229,13 +230,14 @@ public override void RenderBefore(RenderContext context) if (child is ViewDrawButton crumbButton) { // Cast to correct type - // That are associated with crumb items - if (_buttonToCrumb.TryGetValue(crumbButton, out KryptonBreadCrumbItem _)) + if (_buttonToCrumb.TryGetValue(crumbButton, out KryptonBreadCrumbItem? _)!) { // If the button is pressed then point button downwards, // otherwise we point in the direction the buttons laid out. - crumbButton.DropDownOrientation = crumbButton.ElementState == PaletteState.Pressed ? VisualOrientation.Top : VisualOrientation.Left; + crumbButton.DropDownOrientation = crumbButton.ElementState == PaletteState.Pressed + ? VisualOrientation.Top + : VisualOrientation.Left; } } } @@ -252,7 +254,7 @@ public override void Render([DisallowNull] RenderContext context) Debug.Assert(context != null); // Perform rendering before any children - RenderBefore(context); + RenderBefore(context!); // We need to update the redirector for drawing each crumb var redirect = _kryptonBreadCrumb.GetRedirector() as PaletteRedirectBreadCrumb; @@ -260,25 +262,25 @@ public override void Render([DisallowNull] RenderContext context) var first = true; for(var i=0; i @@ -138,15 +138,15 @@ public void SetDock([DisallowNull] ViewBase child, ViewDockStyle dock) Debug.Assert(child != null); // If the lookup is not already defined - if (!_childDocking.ContainsKey(child)) + if (!_childDocking.ContainsKey(child!)) { // Then just add the value - _childDocking.Add(child, dock); + _childDocking.Add(child!, dock); } else { // Overwrite the existing value - _childDocking[child] = dock; + _childDocking[child!] = dock; } } #endregion @@ -188,7 +188,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) var newChildDocking = new ViewDockStyleLookup(); // Remember the original display rectangle provided - Rectangle originalRect = context.DisplayRectangle; + Rectangle originalRect = context!.DisplayRectangle; Rectangle displayRect = context.DisplayRectangle; // Accumulate the size that must be provided by docking edges and then filler @@ -334,7 +334,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Space available for children begins with our space Rectangle fillerRect = ClientRectangle; @@ -371,15 +371,15 @@ public override void Layout([DisallowNull] ViewLayoutContext context) break; } - // By default all the children need to draw all their borders + // By default, all the children need to draw all their borders var leftEdges = PaletteDrawBorders.All; var rightEdges = PaletteDrawBorders.All; var topEdges = PaletteDrawBorders.All; var bottomEdges = PaletteDrawBorders.All; var fillEdges = PaletteDrawBorders.All; - + // Position all except the filler - foreach (ViewBase child in Reverse() + foreach (var child in Reverse() .Where(child => child.Visible && (GetDock(child) != ViewDockStyle.Fill)) ) { @@ -393,7 +393,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Size childSize = child.GetPreferredSize(context); // Position the child inside the available space - switch (CalculateDock(OrientateDock(GetDock(child)), context.Control)) + switch (CalculateDock(OrientateDock(GetDock(child)), context.Control!)) { case ViewDockStyle.Top: context.DisplayRectangle = fillerRect with { Height = childSize.Height }; @@ -423,7 +423,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Allow the filler rectangle to be modified before being used - fillerRect = UpdateFillerRect(fillerRect, context.Control); + fillerRect = UpdateFillerRect(fillerRect, context.Control!); // Position any filler last foreach (ViewBase child in Reverse() @@ -524,6 +524,7 @@ protected ViewDockStyle OrientateDock(ViewDockStyle style) return ViewDockStyle.Right; } break; + case VisualOrientation.Right: switch (style) { @@ -537,6 +538,7 @@ protected ViewDockStyle OrientateDock(ViewDockStyle style) return ViewDockStyle.Left; } break; + case VisualOrientation.Bottom: switch (style) { @@ -551,8 +553,9 @@ protected ViewDockStyle OrientateDock(ViewDockStyle style) } break; default: - // Should never happen! + // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(Orientation.ToString()); break; } @@ -575,7 +578,7 @@ private void UpdateChildBorders(ViewBase child, var childCanvas = child as ViewDrawCanvas; // Docking edge determines calculation - switch (CalculateDock(GetDock(child), context.Control)) + switch (CalculateDock(GetDock(child), context.Control!)) { case ViewDockStyle.Fill: if (childCanvas != null) diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFill.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFill.cs index d9f161f26..4e34303c6 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFill.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFill.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -70,7 +70,7 @@ public override string ToString() => public override Size GetPreferredSize(ViewLayoutContext context) { // Get requested size of the control - Size size = _control?.GetPreferredSize(context.DisplayRectangle.Size) ?? Size.Empty; + var size = _control?.GetPreferredSize(context.DisplayRectangle.Size) ?? Size.Empty; // Return size with padding added on return new Size(size.Width + DisplayPadding.Horizontal, @@ -86,7 +86,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Cache the fill rectangle FillRect = ClientRectangle; diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFit.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFit.cs index f9b1b3a84..d24435877 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFit.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutFit.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -62,7 +62,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) var space = _orientation == Orientation.Vertical ? ClientHeight : ClientWidth; for(var i=0; i @@ -142,7 +142,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (Count > 0) { // Ask child for it's own preferred size - preferredSize = this[0].GetPreferredSize(context); + preferredSize = this[0]!.GetPreferredSize(context!); // Find preferred size from the preferred item size var lineItems = Math.Max(1, _lineItems); @@ -184,7 +184,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Rectangle displayRect = CommonHelper.ApplyPadding(Orientation.Horizontal, ClientRectangle, _padding); // Get size of the first child, assume all others are same size - Size itemSize = this[0].GetPreferredSize(context); + Size itemSize = this[0]!.GetPreferredSize(context); // Starting position for first item Point nextPoint = displayRect.Location; @@ -194,7 +194,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) context.DisplayRectangle = new Rectangle(nextPoint, itemSize); // Layout the child - this[i].Layout(context); + this[i]?.Layout(context); // Move to next position across nextPoint.X += itemSize.Width; @@ -242,8 +242,8 @@ public void SyncChildren() for (var i = 0; i < _imageIndexCount; i++) { var imageIndex = i + _imageIndexStart; - var item = (ViewDrawMenuImageSelectItem)this[i]; - item.ImageList = _imageList; + var item = this[i] as ViewDrawMenuImageSelectItem; + item!.ImageList = _imageList; item.ImageIndex = imageIndex; item.Checked = _selectedIndex == imageIndex; item.Enabled = ItemEnabled; diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuItemsPile.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuItemsPile.cs index 5593693c6..6fb05c954 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuItemsPile.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuItemsPile.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Toolkit public class ViewLayoutMenuItemsPile : ViewLayoutPile { #region Type Definitions - private class ColumnToWidth : Dictionary { } + private class ColumnToWidth : Dictionary; #endregion #region Instance Fields @@ -66,7 +66,7 @@ public ViewLayoutMenuItemsPile(IContextMenuProvider provider, }; // Grab the padding for around the item stack - Padding itemsPadding = _paletteItemHighlight.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.ContextMenuItemsCollection); + Padding itemsPadding = _paletteItemHighlight!.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.ContextMenuItemsCollection); stackDocker.Add(new ViewLayoutSeparator(itemsPadding.Left), ViewDockStyle.Left); stackDocker.Add(new ViewLayoutSeparator(itemsPadding.Right), ViewDockStyle.Right); stackDocker.Add(new ViewLayoutSeparator(itemsPadding.Top), ViewDockStyle.Top); @@ -104,7 +104,17 @@ public override string ToString() => /// Layout context. public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { - Debug.Assert(context != null); + Debug.Assert(context is not null); + + if (context is null) + { + throw new ArgumentNullException(nameof(context)); + } + + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } // Reset the column size information _columnToWidth = new ColumnToWidth(); @@ -133,7 +143,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - base.Layout(context); + base.Layout(context!); } #endregion @@ -207,7 +217,7 @@ private void UpdateImageColumnWidth(IRenderer renderer) if (_columnToWidth.TryGetValue(0, out var imageColumnWidth)) { // Find the border padding that is applied to the content of the menu item - Padding borderPadding = renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteItemHighlight.Border, + Padding borderPadding = renderer.RenderStandardBorder.GetBorderDisplayPadding(_paletteItemHighlight?.Border!, PaletteState.Normal, VisualOrientation.Top); @@ -215,7 +225,7 @@ private void UpdateImageColumnWidth(IRenderer renderer) imageColumnWidth += borderPadding.Left * 3; // Add double the metric padding that occurs outside the item highlight - Padding itemMetricPadding = _paletteItemHighlight.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.ContextMenuItemHighlight); + Padding itemMetricPadding = _paletteItemHighlight!.GetMetricPadding(PaletteState.Normal, PaletteMetricPadding.ContextMenuItemHighlight); imageColumnWidth += itemMetricPadding.Left * 2; _imageColumn.ColumnWidth = imageColumnWidth; diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuSepGap.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuSepGap.cs index 6ec29dc1c..f94d70637 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuSepGap.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMenuSepGap.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -53,13 +53,18 @@ public override string ToString() => /// Layout context. public override Size GetPreferredSize(ViewLayoutContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + // Grab the padding used for the text/extra content of a menu item Padding paddingText = _standardStyle ? _stateCommon.ItemTextStandard.GetContentPadding(PaletteState.Normal) : _stateCommon.ItemTextAlternate.GetContentPadding(PaletteState.Normal); // Get padding needed for the left edge of the item highlight - Padding paddingHighlight = context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_stateCommon.ItemHighlight.Border, PaletteState.Normal, VisualOrientation.Top); + Padding paddingHighlight = context.Renderer.RenderStandardBorder.GetBorderDisplayPadding(_stateCommon.ItemHighlight?.Border!, PaletteState.Normal, VisualOrientation.Top); // Our separator size is the left padding values added together SeparatorSize = new Size(paddingHighlight.Left + paddingText.Left, 0); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMetricSpacer.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMetricSpacer.cs index abca27b2a..504dd3de9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMetricSpacer.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMetricSpacer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -34,7 +34,7 @@ public ViewLayoutMetricSpacer([DisallowNull] IPaletteMetric paletteMetric, Debug.Assert(paletteMetric != null); // Remember the source information - _paletteMetric = paletteMetric; + _paletteMetric = paletteMetric!; _metricInt = metricInt; } @@ -96,7 +96,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) var length = _paletteMetric.GetMetricInt(ElementState, _metricInt); // Always use the metric and ignore given space - ClientRectangle = new Rectangle(context.DisplayRectangle.Location, new Size(length, length)); + ClientRectangle = new Rectangle(context!.DisplayRectangle.Location, new Size(length, length)); } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMonths.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMonths.cs index bc5ce73e6..15be94de9 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMonths.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutMonths.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,7 +28,7 @@ public class ViewLayoutMonths : ViewComposite, private readonly PaletteBorderInheritForced _borderForced; private VisualPopupToolTip? _visualPopupToolTip; private readonly ViewDrawToday _drawToday; - private readonly ButtonSpecRemapByContentView? _remapPalette; + private readonly ButtonSpecRemapByContentView _remapPalette; private readonly ViewDrawEmptyContent _emptyContent; private readonly PaletteTripleRedirect _palette; private readonly ToolTipManager _toolTipManager; @@ -43,7 +43,7 @@ public class ViewLayoutMonths : ViewComposite, private DateTime? _trackingDay; private DateTime? _anchorDay; private readonly NeedPaintHandler _needPaintDelegate; - private readonly PaletteRedirect? _redirector; + private readonly PaletteRedirect _redirector; private bool _showWeekNumbers; private bool _showTodayCircle; private bool _showToday; @@ -60,14 +60,14 @@ public class ViewLayoutMonths : ViewComposite, /// Reference to calendar provider. /// Redirector for getting values. /// Delegate for requesting paint changes. - public ViewLayoutMonths(IContextMenuProvider provider, - KryptonContextMenuMonthCalendar monthCalendar, - ViewContextMenuManager viewManager, + public ViewLayoutMonths(IContextMenuProvider? provider, + KryptonContextMenuMonthCalendar? monthCalendar, + ViewContextMenuManager? viewManager, IKryptonMonthCalendar calendar, - PaletteRedirect? redirector, + PaletteRedirect redirector, NeedPaintHandler needPaintDelegate) { - Provider = provider; + Provider = provider!; Calendar = calendar; _oldSelectionStart = Calendar.SelectionStart; _oldSelectionEnd = Calendar.SelectionEnd; @@ -82,7 +82,7 @@ public ViewLayoutMonths(IContextMenuProvider provider, // Use a controller that can work against all the displayed months var controller = - new MonthCalendarController(monthCalendar, viewManager, this, _needPaintDelegate); + new MonthCalendarController(monthCalendar!, viewManager!, this, _needPaintDelegate); MouseController = controller; SourceController = controller; KeyController = controller; @@ -97,10 +97,10 @@ public ViewLayoutMonths(IContextMenuProvider provider, // Using a button spec manager to add the buttons to the header ButtonSpecs = new MonthCalendarButtonSpecCollection(this); ButtonManager = new ButtonSpecManagerDraw(Calendar.CalendarControl, redirector, ButtonSpecs, null, - new[] { _drawHeader }, - new IPaletteMetric[] { Calendar.StateCommon }, - new[] { PaletteMetricInt.HeaderButtonEdgeInsetCalendar }, - new[] { PaletteMetricPadding.None }, + [_drawHeader], + [Calendar.StateCommon], + [PaletteMetricInt.HeaderButtonEdgeInsetCalendar], + [PaletteMetricPadding.None], Calendar.GetToolStripDelegate, _needPaintDelegate); // Create the manager for handling tooltips @@ -282,7 +282,7 @@ public bool ProcessKeyDown(Control c, KeyEventArgs e) // We must have a focused day if (FocusDay != null) { - KeyController.KeyDown(c, e); + KeyController?.KeyDown(c, e); return true; } else @@ -315,7 +315,7 @@ public DateTime DayNearPoint(Point pt) // Find the column to be used in lookup for (var col = 0; col < cols; col++) { - if (pt.X < this[col + 1].ClientRectangle.Right) + if (pt.X < this[col + 1]!.ClientRectangle.Right) { ptCol = col; break; @@ -325,15 +325,15 @@ public DateTime DayNearPoint(Point pt) // Find the row to be used in lookup for (var row = 0; row < rows; row++) { - if (pt.Y < this[(row * cols) + 1].ClientRectangle.Bottom) + if (pt.Y < this[(row * cols) + 1]!.ClientRectangle.Bottom) { ptRow = row; break; } } - var target = (ViewDrawMonth)this[ptCol + (ptRow * cols) + 1]; - return target.ViewDrawMonthDays.DayNearPoint(pt); + var target = this[ptCol + (ptRow * cols) + 1] as ViewDrawMonth; + return target!.ViewDrawMonthDays.DayNearPoint(pt); } /// @@ -473,10 +473,10 @@ public Size GetSingleMonthSize([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - SyncData(context); + SyncData(context!); SyncMonths(); - return this[1].GetPreferredSize(context); + return this[1]!.GetPreferredSize(context!); } /// @@ -489,7 +489,7 @@ public Size GetExtraSize([DisallowNull] ViewLayoutContext context) if (_drawHeader.Visible) { - Size retSize = _drawHeader.GetPreferredSize(context); + Size retSize = _drawHeader.GetPreferredSize(context!); retSize.Width = 0; retSize.Height += GAP * 2; return retSize; @@ -508,7 +508,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - SyncData(context); + SyncData(context!); SyncMonths(); var preferredSize = Size.Empty; @@ -517,7 +517,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (_drawHeader.Visible) { // Measure size of the header - Size headerSize = _drawHeader.GetPreferredSize(context); + Size headerSize = _drawHeader.GetPreferredSize(context!); // Only use the height as the width is based on the months only preferredSize.Height = headerSize.Height + (GAP * 2); @@ -527,7 +527,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (Count > 1) { // Only need to measure the first child as all children must be the same size - Size monthSize = this[1].GetPreferredSize(context); + Size monthSize = this[1]!.GetPreferredSize(context!); // Find total width based on requested dimensions and add a single pixel space around and between months preferredSize.Width += (monthSize.Width * Calendar.CalendarDimensions.Width) + (GAP * Calendar.CalendarDimensions.Width) + GAP; @@ -545,11 +545,11 @@ public override void Layout([DisallowNull] ViewLayoutContext context) { Debug.Assert(context != null); - SyncData(context); + SyncData(context!); SyncMonths(); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Is there a today header to layout? if (_drawHeader.Visible) @@ -568,7 +568,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) if (Count > 1) { // Only need to measure the first child as all children must be the same size - Size monthSize = this[1].GetPreferredSize(context); + Size monthSize = this[1]!.GetPreferredSize(context); // Position each child within the required grid Size dimensions = Calendar.CalendarDimensions; @@ -580,7 +580,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) ClientLocation.Y + (y * monthSize.Height) + (GAP * (y + 1)), monthSize.Width, monthSize.Height); - this[index++].Layout(context); + this[index++]?.Layout(context); } } } @@ -603,7 +603,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) /// /// The state for which the image is needed. /// Color value. - public Color GetImageTransparentColor(PaletteState state) => Color.Empty; + public Color GetImageTransparentColor(PaletteState state) => GlobalStaticValues.EMPTY_COLOR; /// /// Gets the content short text. @@ -633,7 +633,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) #region Private private DateTime JustDay(DateTime dt) => new DateTime(dt.Year, dt.Month, dt.Day); - private void OnTodayClick(object sender, EventArgs e) + private void OnTodayClick(object? sender, EventArgs e) { // Remove any time information as selecting a date is based only on the day DateTime today = Calendar.TodayDate; @@ -663,7 +663,7 @@ private void OnTodayClick(object sender, EventArgs e) private void SyncData(ViewLayoutContext context) { // A change in culture means we need to recache information - if ((_lastCultureInfo == null) || (_lastCultureInfo != CultureInfo.CurrentCulture)) + if ((_lastCultureInfo == null) || (!Equals(_lastCultureInfo, CultureInfo.CurrentCulture))) { _lastCultureInfo = CultureInfo.CurrentCulture; _needPaintDelegate(this, new NeedLayoutEventArgs(true)); @@ -695,8 +695,8 @@ private void SyncData(ViewLayoutContext context) private void SyncMonths() { // We need the today header if we show the today button or a button spec - this[0].Visible = _showToday || (ButtonSpecs.Count > 0); - this[0].Enabled = Enabled; + this[0]!.Visible = _showToday || (ButtonSpecs.Count > 0); + this[0]!.Enabled = Enabled; _drawToday.Visible = _showToday; // How many month children instances do we need? @@ -715,7 +715,7 @@ private void SyncMonths() // Remove excess month view instances for (var i = Count - 1; i > months; i--) { - this[i].Dispose(); + this[i]?.Dispose(); RemoveAt(i); } } @@ -772,8 +772,8 @@ private void SyncMonths() // Inform each view which month it should be drawing for (var i = 1; i < Count; i++) { - var viewMonth = (ViewDrawMonth)this[i]; - viewMonth.Enabled = Enabled; + var viewMonth = this[i] as ViewDrawMonth; + viewMonth!.Enabled = Enabled; viewMonth.Month = currentMonth; viewMonth.FirstMonth = i == 1; viewMonth.LastMonth = i == (Count - 1); @@ -784,7 +784,7 @@ private void SyncMonths() } } - private void OnShowToolTip(object sender, ToolTipEventArgs e) + private void OnShowToolTip(object? sender, ToolTipEventArgs e) { if (!IsDisposed) { @@ -804,7 +804,7 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) var shadow = true; // Find the button spec associated with the tooltip request - ButtonSpec buttonSpec = ButtonManager.ButtonSpecFromView(e.Target); + ButtonSpec? buttonSpec = ButtonManager.ButtonSpecFromView(e.Target); // If the tooltip is for a button spec if (buttonSpec != null) @@ -847,32 +847,37 @@ private void OnShowToolTip(object sender, ToolTipEventArgs e) } } - private void OnCancelToolTip(object sender, EventArgs e) => + private void OnCancelToolTip(object? sender, EventArgs e) => // Remove any currently showing tooltip _visualPopupToolTip?.Dispose(); - private void OnVisualPopupToolTipDisposed(object sender, EventArgs e) + private void OnVisualPopupToolTipDisposed(object? sender, EventArgs e) { // Unhook events from the specific instance that generated event - var popupToolTip = (VisualPopupToolTip)sender; + var popupToolTip = sender as VisualPopupToolTip ?? throw new ArgumentNullException(nameof(sender)); popupToolTip.Disposed -= OnVisualPopupToolTipDisposed; // Not showing a popup page any more _visualPopupToolTip = null; } - private Size MaxGridCellDay(ViewLayoutContext context) + private Size MaxGridCellDay([DisallowNull] ViewLayoutContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + _shortText = _dayMeasure; // Find sizes required for the different - Size normalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateNormal.Day.Content, this, VisualOrientation.Top, PaletteState.Normal, false, false); - Size disabledSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateDisabled.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); - Size trackingSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateTracking.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); - Size pressedSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StatePressed.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); - Size checkedNormalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateCheckedNormal.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); - Size checkedTrackingSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateCheckedTracking.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); - Size checkedPressedSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateCheckedPressed.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); + Size normalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateNormal.Day.Content, this, VisualOrientation.Top, PaletteState.Normal); + Size disabledSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateDisabled.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled); + Size trackingSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateTracking.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled); + Size pressedSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StatePressed.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled); + Size checkedNormalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateCheckedNormal.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled); + Size checkedTrackingSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateCheckedTracking.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled); + Size checkedPressedSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateCheckedPressed.Day.Content, this, VisualOrientation.Top, PaletteState.Disabled); // Find largest size required normalSize.Width = Math.Max(normalSize.Width, Math.Max(disabledSize.Width, Math.Max(trackingSize.Width, Math.Max(pressedSize.Width, Math.Max(checkedNormalSize.Width, Math.Max(checkedTrackingSize.Width, checkedPressedSize.Width)))))); @@ -881,19 +886,24 @@ private Size MaxGridCellDay(ViewLayoutContext context) return normalSize; } - private Size MaxGridCellDayOfWeek(ViewLayoutContext context) + private Size MaxGridCellDayOfWeek([DisallowNull] ViewLayoutContext context) { + if (context.Renderer is null) + { + throw new ArgumentNullException(nameof(context.Renderer)); + } + _shortText = "A"; // Find sizes required for the different - Size shortNormalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateNormal.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Normal, false, false); - Size shortDisabledSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateDisabled.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); + Size shortNormalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateNormal.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Normal); + Size shortDisabledSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateDisabled.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Disabled); _shortText = $"A{_dayOfWeekMeasure}"; // Find sizes required for the different - Size fullNormalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateNormal.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Normal, false, false); - Size fullDisabledSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateDisabled.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Disabled, false, false); + Size fullNormalSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateNormal.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Normal); + Size fullDisabledSize = context.Renderer.RenderStandardContent.GetContentPreferredSize(context, Calendar.StateDisabled.DayOfWeek.Content, this, VisualOrientation.Top, PaletteState.Disabled); // Find largest size required (subtract a fudge factor of 3 pixels as Graphics.MeasureString is always too big) fullNormalSize.Width = Math.Max(fullNormalSize.Width - shortNormalSize.Width - 3, fullDisabledSize.Width - shortDisabledSize.Width - 3); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutNull.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutNull.cs index be2c48d27..0845b20a0 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutNull.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutNull.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPadding.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPadding.cs index 3ad2765fb..b891eb5af 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPadding.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPadding.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -70,7 +70,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Ask base class to find preferred size of all children - Size preferredSize = base.GetPreferredSize(context); + Size preferredSize = base.GetPreferredSize(context!); // Add on the display padding preferredSize.Width += _displayPadding.Horizontal; @@ -88,7 +88,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // Take on the provided space - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Reduce space by the padding value context.DisplayRectangle = CommonHelper.ApplyPadding(Orientation.Horizontal, ClientRectangle, _displayPadding); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPile.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPile.cs index 8147e1d70..67509b116 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPile.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutPile.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -45,7 +45,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Ensure all children are laid out in our total space base.Layout(context); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutScrollViewport.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutScrollViewport.cs index 471aae94d..392bf5630 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutScrollViewport.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutScrollViewport.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -48,7 +48,7 @@ public class ViewLayoutScrollViewport : ViewLayoutDocker public ViewLayoutScrollViewport([DisallowNull] VisualControl rootControl, [DisallowNull] ViewBase viewportFiller, PaletteBorderEdge paletteBorderEdge, - IPaletteMetric paletteMetrics, + IPaletteMetric? paletteMetrics, PaletteMetricPadding metricPadding, PaletteMetricInt metricOvers, VisualOrientation orientation, @@ -71,7 +71,7 @@ public ViewLayoutScrollViewport([DisallowNull] VisualControl rootControl, Orientation = orientation; // Create the child viewport - Viewport = new ViewLayoutViewport(paletteMetrics, metricPadding, + Viewport = new ViewLayoutViewport(paletteMetrics!, metricPadding, metricOvers, ViewportOrientation(_viewportVertical), alignment, animateChange) { @@ -84,7 +84,7 @@ public ViewLayoutScrollViewport([DisallowNull] VisualControl rootControl, }; // Put the provided element inside the viewport - Viewport.Add(viewportFiller); + Viewport.Add(viewportFiller!); // Hook into animation step events Viewport.AnimateStep += OnAnimateStep; @@ -92,9 +92,9 @@ public ViewLayoutScrollViewport([DisallowNull] VisualControl rootControl, // To prevent the contents of the viewport from being able to draw outside // the viewport (such as having child controls) we use a ViewLayoutControl // that uses a child control to restrict the drawing region. - ViewControl = new ViewLayoutControl(rootControl, Viewport) + ViewControl = new ViewLayoutControl(rootControl!, Viewport) { - InDesignMode = rootControl.InDesignMode + InDesignMode = rootControl!.InDesignMode }; // Create the scrollbar and matching border edge @@ -148,7 +148,7 @@ public override string ToString() => /// Make the provided control parented to ourself. /// /// Control to reparent. - public void MakeParent(Control c) => + public void MakeParent(Control? c) => // Ask the view control to perform reparenting ViewControl.MakeParent(c); @@ -160,13 +160,13 @@ public void MakeParent(Control c) => /// /// Control to become parent. /// Control to reparent. - public void RevertParent(Control newParent, Control c) + public void RevertParent(Control newParent, Control? c) { // Remove control from current collection - CommonHelper.RemoveControlFromParent(c); + CommonHelper.RemoveControlFromParent(c!); // Add to our child control - CommonHelper.AddControlToParent(newParent, c); + CommonHelper.AddControlToParent(newParent, c!); } #endregion @@ -176,7 +176,7 @@ public void RevertParent(Control newParent, Control c) /// public bool VerticalViewport { - set + set { if (_viewportVertical != value) { @@ -264,7 +264,7 @@ public override void Layout(ViewLayoutContext context) BorderEdgeH.Visible = ScrollbarH.Visible = false; // Do not actually change the layout of any child controls - context.ViewManager.DoNotLayoutControls = true; + context.ViewManager!.DoNotLayoutControls = true; do { @@ -422,7 +422,7 @@ protected void NeedPaint(bool needLayout) => #region Implementation private VisualOrientation ViewportOrientation(bool vertical) => vertical ? VisualOrientation.Left : VisualOrientation.Top; - private void OnScrollVChanged(object sender, EventArgs e) + private void OnScrollVChanged(object? sender, EventArgs e) { // Update viewport with the new scroll offset Viewport.SetOffsetV(ScrollbarV.ScrollPosition); @@ -434,11 +434,11 @@ private void OnScrollVChanged(object sender, EventArgs e) NeedPaint(true); // Make sure the child control is redraw to keep in sync with new scroll position - ViewControl.ChildControl.Refresh(); + ViewControl.ChildControl?.Refresh(); } } - private void OnScrollHChanged(object sender, EventArgs e) + private void OnScrollHChanged(object? sender, EventArgs e) { // Update viewport with the new scroll offset Viewport.SetOffsetH(ScrollbarH.ScrollPosition); @@ -450,11 +450,11 @@ private void OnScrollHChanged(object sender, EventArgs e) NeedPaint(true); // Make sure the child control is redraw to keep in sync with new scroll position - ViewControl.ChildControl.Refresh(); + ViewControl.ChildControl?.Refresh(); } } - private void OnAnimateStep(object sender, EventArgs e) => AnimateStep?.Invoke(sender, e); + private void OnAnimateStep(object? sender, EventArgs e) => AnimateStep?.Invoke(sender, e); #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutSeparator.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutSeparator.cs index 29e89131e..9db3b0f86 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutSeparator.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -88,7 +88,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; } #endregion } diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStack.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStack.cs index eceabf9e6..6c4c1528e 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStack.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStack.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -73,7 +73,7 @@ public override Size GetPreferredSize([DisallowNull] ViewLayoutContext context) if (child.Visible) { // Get the preferred size of the child - Size childSize = child.GetPreferredSize(context); + Size childSize = child.GetPreferredSize(context!); // Depending on orientation, add up child sizes if (Horizontal) @@ -101,7 +101,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Maximum space available for the next child Rectangle childRectangle = ClientRectangle; diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStretch.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStretch.cs index 9c599a0df..db35ab62f 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStretch.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutStretch.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutViewport.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutViewport.cs index c99cb2155..53c2ee627 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutViewport.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutViewport.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -296,7 +296,7 @@ public void SetOffsetH(int offset) /// public bool CanScrollNext { - get + get { var limit = 0; var offset = 0; @@ -474,7 +474,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) } // Cache the right to left setting at layout time - _rightToLeft = context.Control.RightToLeft; + _rightToLeft = context.Control!.RightToLeft; _rightToLeftLayout = CommonHelper.GetRightToLeftLayout(context.Control); // We take on all the available display area @@ -638,7 +638,7 @@ public override void Render(RenderContext context) private RelativePositionAlign AlignmentRTL { - get + get { // Do we need to reverse the alignment or account for right to left? if (Horizontal && (_rightToLeft == RightToLeft.Yes)) @@ -658,7 +658,7 @@ private RelativePositionAlign AlignmentRTL private RelativePositionAlign CounterAlignmentRTL { - get + get { // Do we need to reverse the alignment or account for right to left? if (!Horizontal && (_rightToLeft == RightToLeft.Yes) && _rightToLeftLayout) @@ -745,6 +745,7 @@ private Rectangle ApplyPadding(Rectangle rect, Padding padding) default: // Should never happen! Debug.Assert(false); + DebugTools.NotImplemented(orientation.ToString()); break; } } @@ -841,7 +842,7 @@ private void MoveDirection(bool next) _animationTimer.Start(); } } - + private Point OffsetForChildRect(Rectangle rect) { // Begin by using the current offset @@ -849,7 +850,7 @@ private Point OffsetForChildRect(Rectangle rect) // Find how far to over position the viewport var overs = 0; - + // We might not be provided with metrics, so only use if reference provided if (_paletteMetrics != null) { @@ -942,7 +943,7 @@ private Point OffsetForChildRect(Rectangle rect) return offset; } - private void OnAnimationTick(object sender, EventArgs e) + private void OnAnimationTick(object? sender, EventArgs e) { // Limit check the animation offset, incase the limits have changed _animationOffset.X = Math.Min(Math.Max(_animationOffset.X, _limit.X), 0); diff --git a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutWeekCorner.cs b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutWeekCorner.cs index 7044a3e82..a8ce29d3c 100644 --- a/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutWeekCorner.cs +++ b/Source/Krypton Components/Krypton.Toolkit/View Layout/ViewLayoutWeekCorner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -76,7 +76,7 @@ public override void Layout([DisallowNull] ViewLayoutContext context) Debug.Assert(context != null); // We take on all the available display area - ClientRectangle = context.DisplayRectangle; + ClientRectangle = context!.DisplayRectangle; // Put back the original display value now we have finished context.DisplayRectangle = ClientRectangle; diff --git a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspace.cs b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspace.cs index 447fac94a..d2228e781 100644 --- a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspace.cs +++ b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -424,8 +424,8 @@ public KryptonWorkspaceCell? ActiveCell /// /// Gets and sets the active page. /// - [Browsable(true), - Description(@"Gets and sets the active page."), + [Browsable(true), + Description(@"Gets and sets the active page."), DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public KryptonPage? ActivePage { get; set; } @@ -1246,7 +1246,7 @@ public void ApplyResizing(KryptonWorkspaceSequence sequence, StarSize itemSize = item.WorkspaceStarSize; // Should the new width be applied? - if ((itemSize.StarWidth.UsingStar && applyStar) + if ((itemSize.StarWidth.UsingStar && applyStar) || (!itemSize.StarWidth.UsingStar && applyFixed) ) { @@ -1258,7 +1258,7 @@ public void ApplyResizing(KryptonWorkspaceSequence sequence, } // Should the new height be applied? - if ((itemSize.StarHeight.UsingStar && applyStar) + if ((itemSize.StarHeight.UsingStar && applyStar) || (!itemSize.StarHeight.UsingStar && applyFixed) ) { @@ -1323,7 +1323,7 @@ public void ApplySingleCell(bool createCellIfNoPages) // Create a new cell with entire list of pages as the only workspace item var cell = new KryptonWorkspaceCell(); cell.Pages.AddRange(pages.ToArray()); - Root.Children.Add(cell); + Root.Children!.Add(cell); // Make sure the same page is active as it was before the change // but only if the target cell is allowed to have selected tabs @@ -1423,7 +1423,7 @@ public void ApplyGridCells(bool createCellIfEmpty, // If no cells then do we need to create a new empty cell? if (createCellIfEmpty) { - Root.Children.Add(new KryptonWorkspaceCell()); + Root.Children!.Add(new KryptonWorkspaceCell()); } } else @@ -1444,18 +1444,18 @@ public void ApplyGridCells(bool createCellIfEmpty, // If there are no more cells then create one now if (cells.Count == 0) { - sequence.Children.Add(new KryptonWorkspaceCell()); + sequence.Children!.Add(new KryptonWorkspaceCell()); } else { KryptonWorkspaceCell cell = cells[0]; cells.RemoveAt(0); - sequence.Children.Add(cell); + sequence.Children!.Add(cell); } } } - Root.Children.Add(sequence); + Root.Children!.Add(sequence); } } } @@ -1555,7 +1555,7 @@ public void ApplyGridPages(bool createCellIfNoPages, // If no pages then do we need to create a cell? if (createCellIfNoPages) { - Root.Children.Add(new KryptonWorkspaceCell()); + Root.Children!.Add(new KryptonWorkspaceCell()); } } else @@ -1588,11 +1588,11 @@ public void ApplyGridPages(bool createCellIfNoPages, } } - sequence.Children.Add(cell); + sequence.Children!.Add(cell); } } - Root.Children.Add(sequence); + Root.Children!.Add(sequence); } } } @@ -1661,7 +1661,7 @@ public virtual DragTargetList GenerateDragTargets(PageDragEndData? dragEndData, var visibleCells = 0; var numPages = 0; - if (MaximizedCell is { AllowDroppingPages: true } ) + if (MaximizedCell is { AllowDroppingPages: true }) { // Generate targets for maximized cell only visibleCells = CellVisibleCount; @@ -1925,7 +1925,7 @@ public void LoadLayoutFromXml(XmlReader xmlReader, KryptonPageCollection availab UniqueNameToPage existingPages = BuildUniqueNameDictionary(availablePages); // Remove all existing contents - Root.Children.Clear(); + Root.Children!.Clear(); // Read to custom data element if (!xmlReader.Read()) @@ -2067,10 +2067,10 @@ public virtual void WriteCellElement(XmlWriter xmlWriter, KryptonWorkspaceCell c public virtual string ReadCellElement(XmlReader xmlReader, KryptonWorkspaceCell cell) { // Grab the mandatory attributes - cell.UniqueName = xmlReader.GetAttribute(@"UN"); - cell.WorkspaceStarSize.PersistString = xmlReader.GetAttribute(@"S"); + cell.UniqueName = xmlReader.GetAttribute(@"UN")!; + cell.WorkspaceStarSize.PersistString = xmlReader.GetAttribute(@"S")!; var selectedPageUniqueName = xmlReader.GetAttribute(@"SP"); - cell.NavigatorMode = (NavigatorMode)Enum.Parse(typeof(NavigatorMode), xmlReader.GetAttribute(@"NM")); + cell.NavigatorMode = (NavigatorMode)Enum.Parse(typeof(NavigatorMode), xmlReader.GetAttribute(@"NM")!); cell.UseMnemonic = CommonHelper.StringToBool(XmlHelper.XmlAttributeToText(xmlReader, @"UM", @"True")); cell.AllowTabFocus = CommonHelper.StringToBool(XmlHelper.XmlAttributeToText(xmlReader, @"ATF", @"False")); cell.AllowPageDrag = CommonHelper.StringToBool(XmlHelper.XmlAttributeToText(xmlReader, @"APD", @"True")); @@ -2080,7 +2080,7 @@ public virtual string ReadCellElement(XmlReader xmlReader, KryptonWorkspaceCell cell.DisposeOnRemove = CommonHelper.StringToBool(XmlHelper.XmlAttributeToText(xmlReader, @"DOR", @"True")); cell.MinimumSize = CommonHelper.StringToSize(XmlHelper.XmlAttributeToText(xmlReader, @"MINS", @"0, 0")); cell.MaximumSize = CommonHelper.StringToSize(XmlHelper.XmlAttributeToText(xmlReader, @"MAXS", @"0, 0")); - return selectedPageUniqueName; + return selectedPageUniqueName!; } @@ -2103,9 +2103,9 @@ public virtual void WriteSequenceElement(XmlWriter xmlWriter, KryptonWorkspaceSe /// Reference to sequence. public virtual void ReadSequenceElement(XmlReader xmlReader, KryptonWorkspaceSequence sequence) { - sequence.UniqueName = xmlReader.GetAttribute(@"UN"); - sequence.WorkspaceStarSize.PersistString = xmlReader.GetAttribute(@"S"); - sequence.Orientation = (Orientation)Enum.Parse(typeof(Orientation), xmlReader.GetAttribute(@"D")); + sequence.UniqueName = xmlReader.GetAttribute(@"UN")!; + sequence.WorkspaceStarSize.PersistString = xmlReader.GetAttribute(@"S")!; + sequence.Orientation = (Orientation)Enum.Parse(typeof(Orientation), xmlReader.GetAttribute(@"D")!); } /// @@ -2133,7 +2133,7 @@ public virtual void WritePageElement(XmlWriter xmlWriter, KryptonPage page) //Seb //TODO store object instead of strings - XmlHelper.TextToXmlAttribute(xmlWriter, @"TAG", page.Tag?.ToString()); + XmlHelper.TextToXmlAttribute(xmlWriter, @"TAG", page.Tag?.ToString()!); //End Seb // Write out images as child elements @@ -2197,7 +2197,7 @@ public virtual void WritePageElement(XmlWriter xmlWriter, KryptonPage page) page.Flags = int.Parse(XmlHelper.XmlAttributeToText(xmlReader, @"F", page.Flags.ToString())); //Seb - page.Tag = XmlHelper.XmlAttributeToText(xmlReader, @"TAG", null); + page.Tag = XmlHelper.XmlAttributeToText(xmlReader, @"TAG"); //End Seb } @@ -2296,14 +2296,14 @@ public void ResumeWorkspaceLayout() /// /// Source of the event. /// Arguments associated with the event. - protected void OnChildrenPropertyChanged(object sender, PropertyChangedEventArgs e) => PerformNeedPaint(true); + protected void OnChildrenPropertyChanged(object? sender, PropertyChangedEventArgs e) => PerformNeedPaint(true); /// /// Request to toggle the maximized state. /// /// Source of the event. /// Arguments associated with the event. - protected void OnChildrenMaximizeRestoreClicked(object sender, EventArgs e) + protected void OnChildrenMaximizeRestoreClicked(object? sender, EventArgs e) { if (sender is KryptonWorkspaceCell cell) { @@ -2510,7 +2510,7 @@ protected override void OnLayout(LayoutEventArgs levent) // Remove all view separators no longer needed for (var i = _drawPanel.Count - 1; i >= 0; i--) { - if ( _drawPanel[i] is ViewDrawWorkspaceSeparator separator) + if (_drawPanel[i] is ViewDrawWorkspaceSeparator separator) { if (!separators.Contains(separator)) { @@ -2530,7 +2530,7 @@ protected override void OnLayout(LayoutEventArgs levent) // If the control has the expected interface if (c is IWorkspaceItem { DisposeOnRemove: true }) - // Does the item want to be disposed on removal? + // Does the item want to be disposed on removal? { c.Dispose(); } @@ -2580,8 +2580,8 @@ protected override void OnLayout(LayoutEventArgs levent) } // If we have a maximized cell then ensure it has focus and not some other cell - if (MaximizedCell is { ContainsFocus: false } - && ContainsFocus ) + if (MaximizedCell is { ContainsFocus: false } + && ContainsFocus) { MaximizedCell.Select(); } @@ -2804,7 +2804,7 @@ internal void SeparatorMoved(ViewDrawWorkspaceSeparator separator, Point splitter) { // Get the sequence that contains the items moved - var parentSequence = (KryptonWorkspaceSequence)separator.WorkspaceItem.WorkspaceParent; + var parentSequence = (KryptonWorkspaceSequence)separator.WorkspaceItem.WorkspaceParent!; SeparatorToItems(separator, out IWorkspaceItem after, out IWorkspaceItem? before); // At design time we can get null references @@ -2825,7 +2825,7 @@ internal void SeparatorMoved(ViewDrawWorkspaceSeparator separator, if (offset != 0) { // Update the sizing value for each item in the sequence - foreach (Component child in parentSequence.Children) + foreach (Component child in parentSequence.Children!) { // Can only process IWorkspaceItem items if (child is IWorkspaceItem item) @@ -2894,12 +2894,16 @@ internal void InternalPageDragStart(object sender, KryptonNavigator? navigator, // Create drag manager the first time it is needed if (_dragManager == null) { - _dragManager = new DragManager(); + _dragManager = new DragManager(Redirector); _dragManager.DragTargetProviders.Add(this); } // Calling DragStart will cause the drag targets to be created from the target providers - e.Cancel = !_dragManager.DragStart(e.ScreenPoint, new PageDragEndData(sender as KryptonNavigator, e.Pages)); + PageDragEndData? dragEndData = sender is KryptonNavigator kn + ? new PageDragEndData(kn, e.Pages) + : null; + + e.Cancel = !_dragManager.DragStart(e.ScreenPoint, dragEndData); } } } @@ -3009,7 +3013,7 @@ private void LayoutSequenceNonMaximized(KryptonWorkspaceSequence seq, var availableSpace = (seq.Orientation == Orientation.Vertical) ? client.Height : client.Width; // Temporary structures used to cache info during calculations - var info = new LayoutInfo[seq.Children.Count]; + var info = new LayoutInfo[seq.Children!.Count]; var visibleChildren = 0; var visibleStarChildren = 0; @@ -3088,8 +3092,8 @@ private void LayoutSequenceNonMaximized(KryptonWorkspaceSequence seq, { // Otherwise we get the preferred size of the item in sequence orientation displaySpace = seq.Orientation == Orientation.Vertical - ? info[i].WorkspaceItem.WorkspacePreferredSize.Height - : info[i].WorkspaceItem.WorkspacePreferredSize.Width; + ? info[i].WorkspaceItem!.WorkspacePreferredSize.Height + : info[i].WorkspaceItem!.WorkspacePreferredSize.Width; } info[i].DisplaySpace = displaySpace; @@ -3203,7 +3207,7 @@ private void LayoutSequenceNonMaximized(KryptonWorkspaceSequence seq, if (workspaceItem != null) { // If no separator is associated with workspace, then create one now - if ( !_workspaceToSeparator.TryGetValue(workspaceItem, out ViewDrawWorkspaceSeparator viewSeparator)) + if (!_workspaceToSeparator.TryGetValue(workspaceItem, out var viewSeparator)) { // Create a view for the separator area viewSeparator = new ViewDrawWorkspaceSeparator(this, workspaceItem, seq.Orientation) @@ -3318,7 +3322,7 @@ private void LayoutSequenceNonMaximized(KryptonWorkspaceSequence seq, // If the item is a sequence, then position its contents inside the allocated area if (seq.Children[i] is KryptonWorkspaceSequence) { - LayoutSequenceNonMaximized(seq.Children[i] as KryptonWorkspaceSequence, + LayoutSequenceNonMaximized((seq.Children[i] as KryptonWorkspaceSequence)!, info[i].DisplayRect, controls, separators, @@ -3328,7 +3332,7 @@ private void LayoutSequenceNonMaximized(KryptonWorkspaceSequence seq, else { // Ensure we mark all the controls contained in the sequence as still needed - LayoutSequenceIsHidden(seq.Children[i] as KryptonWorkspaceSequence, controls); + LayoutSequenceIsHidden((seq.Children[i] as KryptonWorkspaceSequence)!, controls); } } } @@ -3339,7 +3343,7 @@ private void LayoutSequenceNonMaximized(KryptonWorkspaceSequence seq, private void LayoutSequenceIsHidden(KryptonWorkspaceSequence sequence, ControlList controls) { // Process all children of the sequence - foreach (Component child in sequence.Children) + foreach (Component child in sequence.Children!) { // Is the child an actual control switch (child) @@ -3360,7 +3364,7 @@ private bool RecursiveSearchCellInSequence(KryptonWorkspaceSequence sequence, KryptonWorkspaceCell target) { // Scan all sequence children looking for a matching cell - for (var i = 0; i < sequence.Children.Count; i++) + for (var i = 0; i < sequence.Children!.Count; i++) { // If we find the target, then done if (sequence.Children[i] == target) @@ -3383,7 +3387,7 @@ private bool RecursiveSearchCellInSequence(KryptonWorkspaceSequence sequence, bool forwards, bool onlyVisible) { - var count = sequence.Children.Count; + var count = sequence.Children!.Count; var index = sequence.Children.IndexOf(target); // Are we look for entries after the provided one? @@ -3401,14 +3405,14 @@ private bool RecursiveSearchCellInSequence(KryptonWorkspaceSequence sequence, } break; case KryptonWorkspaceSequence child: - { - // Search inside the sequence for the first leaf in the specified direction - KryptonWorkspaceCell? ret = RecursiveFindCellInSequence(child, forwards, onlyVisible); - if (ret != null) { - return ret; + // Search inside the sequence for the first leaf in the specified direction + KryptonWorkspaceCell? ret = RecursiveFindCellInSequence(child, forwards, onlyVisible); + if (ret != null) + { + return ret; + } } - } break; } } @@ -3430,7 +3434,8 @@ private bool RecursiveSearchCellInSequence(KryptonWorkspaceSequence sequence, case KryptonWorkspaceSequence child: // Search inside the sequence for the first leaf in the specified direction KryptonWorkspaceCell? ret = RecursiveFindCellInSequence(child, forwards, onlyVisible); - if (ret != null) + + if (ret is not null) { return ret; } @@ -3440,9 +3445,9 @@ private bool RecursiveSearchCellInSequence(KryptonWorkspaceSequence sequence, } // Still no luck, try our own parent - if (sequence.WorkspaceParent != null) + if (sequence.WorkspaceParent is not null) { - return RecursiveFindCellInSequence(sequence.WorkspaceParent as KryptonWorkspaceSequence, sequence, forwards, onlyVisible); + return RecursiveFindCellInSequence((sequence.WorkspaceParent as KryptonWorkspaceSequence)!, sequence, forwards, onlyVisible); } else { @@ -3454,7 +3459,7 @@ private bool RecursiveSearchCellInSequence(KryptonWorkspaceSequence sequence, bool forwards, bool onlyVisible) { - var count = sequence.Children.Count; + var count = sequence.Children!.Count; for (var i = 0; i < count; i++) { @@ -3471,14 +3476,14 @@ private bool RecursiveSearchCellInSequence(KryptonWorkspaceSequence sequence, } break; case KryptonWorkspaceSequence child: - { - // Search inside the sequence - KryptonWorkspaceCell? ret = RecursiveFindCellInSequence(child, forwards, onlyVisible); - if (ret != null) { - return ret; + // Search inside the sequence + KryptonWorkspaceCell? ret = RecursiveFindCellInSequence(child, forwards, onlyVisible); + if (ret != null) + { + return ret; + } } - } break; } } @@ -3495,11 +3500,11 @@ private static void SeparatorToItems(ViewDrawWorkspaceSeparator separator, after = separator.WorkspaceItem; // Workspace item before the separator (to the left or above) - var beforeSequence = (KryptonWorkspaceSequence)after.WorkspaceParent; + var beforeSequence = (KryptonWorkspaceSequence)after.WorkspaceParent!; // Previous items might be invisible and so search till we find the visible one we expect before = null; - for (var i = beforeSequence.Children.IndexOf(after) - 1; i >= 0; i--) + for (var i = beforeSequence.Children!.IndexOf(after) - 1; i >= 0; i--) { if ((beforeSequence.Children[i] is IWorkspaceItem { WorkspaceVisible: true } item)) { @@ -3560,7 +3565,7 @@ private CellList ClearToCellList() CellList cells = CopyToCellList(); // Remove existing workspace hierarchy - Root.Children.Clear(); + Root.Children?.Clear(); return cells; } @@ -3610,7 +3615,7 @@ private PageList ClearToPageList() } // Remove existing workspace hierarchy - Root.Children.Clear(); + Root.Children?.Clear(); return pages; } @@ -3627,7 +3632,7 @@ private void UpdateAllPagesVisible(bool visible, Type? excludeType) } else { - cell.HideAllPages(excludeType); + cell.HideAllPages(excludeType!); } cell.Visible = cell.Pages.VisibleCount > 0; @@ -3676,7 +3681,7 @@ private static Rectangle[] SubdivideRectangle(Rectangle area, private void CompactAtLeastOneVisibleCell() { // If there are no visible cells found in entire hierarchy - if (!Root.Children.ContainsVisibleCell) + if (Root.Children != null && !Root.Children.ContainsVisibleCell) { Root.Children.Add(new KryptonWorkspaceCell()); } @@ -3697,7 +3702,7 @@ private void SetActiveCellRaw(KryptonWorkspaceCell newCell) { // If there is a maximized cell and it is no longer the active cell then we need // to remove the maximized cell setting to the newly active cell can be seen - if ((MaximizedCell != null) && (MaximizedCell != newCell)) + if ((MaximizedCell is not null) && (MaximizedCell != newCell)) { MaximizedCell = null; } @@ -3717,24 +3722,25 @@ private void SetActiveCellRaw(KryptonWorkspaceCell newCell) { KryptonPage? oldPage = ActivePage; ActivePage = page; + OnActivePageChanged(new ActivePageChangedEventArgs(oldPage, ActivePage)); } } } - private void OnCellEnter(object sender, EventArgs e) + private void OnCellEnter(object? sender, EventArgs e) { - var cell = (KryptonWorkspaceCell)sender; - ActiveCell = cell; + ActiveCell = sender as KryptonWorkspaceCell; } - private void OnCellSelectedPageChanged(object sender, EventArgs e) + private void OnCellSelectedPageChanged(object? sender, EventArgs e) { if (!IsActivePageChangedEventSuspended) { // If change occurred on the active cell - var cell = (KryptonWorkspaceCell)sender; - if (cell == ActiveCell) + var cell = sender as KryptonWorkspaceCell; + + if (cell is not null && cell == ActiveCell) { if (cell.SelectedPage != ActivePage) { @@ -3746,7 +3752,7 @@ private void OnCellSelectedPageChanged(object sender, EventArgs e) } } - private void OnCellShowContextMenu(object sender, ShowContextMenuArgs e) + private void OnCellShowContextMenu(object? sender, ShowContextMenuArgs e) { // Do we customize the context menu of the page header? if (ContextMenus.ShowContextMenu && !e.Cancel) @@ -3789,6 +3795,16 @@ private void OnCellShowContextMenu(object sender, ShowContextMenuArgs e) // Ensure we have a krypton context menu if not already present e.KryptonContextMenu ??= new KryptonContextMenu(); + if (_menuPage is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_menuPage))); + } + + if (_menuCell is null) + { + throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(_menuCell))); + } + // Update the individual menu options _menuClose.Visible = CanClosePage(_menuPage); _menuCloseAllButThis.Visible = (PageVisibleCount > 1); @@ -3823,15 +3839,15 @@ private void OnCellShowContextMenu(object sender, ShowContextMenuArgs e) } } - private void OnCellClosedContextMenu(object sender, ToolStripDropDownClosedEventArgs e) + private void OnCellClosedContextMenu(object? sender, ToolStripDropDownClosedEventArgs e) { // Unhook from context menu - var contextMenu = (KryptonContextMenu)sender; - contextMenu.Closed -= OnCellClosedContextMenu; + var contextMenu = sender as KryptonContextMenu ?? throw new ArgumentNullException(nameof(sender)); // Remove our menu items as we only want them to be inside the currently showing context menu + contextMenu.Closed -= OnCellClosedContextMenu; contextMenu.Items.Remove(_menuSeparator1); - contextMenu.Items.Remove(_menuItems); + contextMenu.Items.Remove(_menuItems!); // Must unreference the page/cell so they can be garbage collected if (e.CloseReason != ToolStripDropDownCloseReason.ItemClicked) @@ -3840,7 +3856,7 @@ private void OnCellClosedContextMenu(object sender, ToolStripDropDownClosedEvent } } - private void OnCellCtrlTabWrap(object sender, CtrlTabCancelEventArgs e) + private void OnCellCtrlTabWrap(object? sender, CtrlTabCancelEventArgs e) { // Prevent the cell from wrapping around when ctrl+tabbing e.Cancel = true; @@ -3890,37 +3906,37 @@ private void OnSeparatorNeedsPaint(object sender, NeedLayoutEventArgs e) } } - private void OnPageClose(object sender, EventArgs e) + private void OnPageClose(object? sender, EventArgs e) { - ClosePage(_menuPage); + ClosePage(_menuPage!); ClearContextMenuCache(); } - private void OnPageCloseAllButThis(object sender, EventArgs e) + private void OnPageCloseAllButThis(object? sender, EventArgs e) { - CloseAllButThisPage(_menuPage); + CloseAllButThisPage(_menuPage!); ClearContextMenuCache(); } - private void OnPageMoveNext(object sender, EventArgs e) + private void OnPageMoveNext(object? sender, EventArgs e) { - MovePageNext(_menuPage, true); + MovePageNext(_menuPage!, true); ClearContextMenuCache(); } - private void OnPageMovePrevious(object sender, EventArgs e) + private void OnPageMovePrevious(object? sender, EventArgs e) { - MovePagePrevious(_menuPage, true); + MovePagePrevious(_menuPage!, true); ClearContextMenuCache(); } - private void OnPageSplitVert(object sender, EventArgs e) => PageSplitDirection(_menuCell, _menuPage, Orientation.Vertical); + private void OnPageSplitVert(object? sender, EventArgs e) => PageSplitDirection(_menuCell!, _menuPage!, Orientation.Vertical); - private void OnPageSplitHorz(object sender, EventArgs e) => PageSplitDirection(_menuCell, _menuPage, Orientation.Horizontal); + private void OnPageSplitHorz(object? sender, EventArgs e) => PageSplitDirection(_menuCell!, _menuPage!, Orientation.Horizontal); - private void OnPageMaximizeRestore(object sender, EventArgs e) => MaximizedCell = MaximizedCell != null ? null : _menuCell; + private void OnPageMaximizeRestore(object? sender, EventArgs e) => MaximizedCell = MaximizedCell != null ? null : _menuCell; - private void OnPageRebalance(object sender, EventArgs e) => ApplyRebalance(); + private void OnPageRebalance(object? sender, EventArgs e) => ApplyRebalance(); private void PageSplitDirection(KryptonWorkspaceCell cell, KryptonPage page, @@ -3935,7 +3951,7 @@ private void PageSplitDirection(KryptonWorkspaceCell cell, if (cell.WorkspaceParent is KryptonWorkspaceSequence parentSequence) { // Find position of cell inside its parent sequence - var index = parentSequence.Children.IndexOf(cell); + var index = parentSequence.Children!.IndexOf(cell); // Create a new cell and move the context page into it var newCell = new KryptonWorkspaceCell(); @@ -3962,7 +3978,7 @@ private void PageSplitDirection(KryptonWorkspaceCell cell, // Move the existing cell and the new cell into the new sequence parentSequence.Children.Remove(cell); - newSequence.Children.Add(cell); + newSequence.Children!.Add(cell); newSequence.Children.Add(newCell); // Put new sequence in place of where the cell was @@ -3974,7 +3990,7 @@ private void PageSplitDirection(KryptonWorkspaceCell cell, if (hadFocus) { PerformLayout(); - CellForPage(page).Select(); + CellForPage(page)?.Select(); } ResumeActivePageChangedEvent(); diff --git a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCell.cs b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCell.cs index 2a5c4545a..aa2b7f3ee 100644 --- a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCell.cs +++ b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCell.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -89,7 +89,7 @@ public KryptonWorkspaceCell(string starSize) Type = PaletteButtonSpecStyle.WorkspaceMaximize }; MaximizeRestoreButton.Click += OnMaximizeRestoreButtonClicked; - Button.ButtonSpecs.Add(MaximizeRestoreButton); + Button.ButtonSpecs!.Add(MaximizeRestoreButton); } /// @@ -633,7 +633,7 @@ protected internal void CellDesignerMouseLeave() => #endregion #region Implementation - private void OnPagesChanged(object sender, EventArgs e) + private void OnPagesChanged(object? sender, EventArgs e) { // Need to raise property changed so that the owning workspace will layout as // a change in pages might cause compacting to perform extra actions. @@ -643,7 +643,7 @@ private void OnPagesChanged(object sender, EventArgs e) } } - private void OnMaximizeRestoreButtonClicked(object sender, EventArgs e) => MaximizeRestoreClicked?.Invoke(this, EventArgs.Empty); + private void OnMaximizeRestoreButtonClicked(object? sender, EventArgs e) => MaximizeRestoreClicked?.Invoke(this, EventArgs.Empty); #endregion /// @@ -653,7 +653,7 @@ private void OnPagesChanged(object sender, EventArgs e) public Size GetMinSize() { var sizeBefore = Size; - var childSizeBefore = ChildPanel.Size; + var childSizeBefore = ChildPanel!.Size; var minSize = GetMinSize(Controls); ChildPanel.MinimumSize = minSize; diff --git a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCollection.cs b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCollection.cs index b3165220b..3c8e2663d 100644 --- a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCollection.cs +++ b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceCollection.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -182,14 +182,14 @@ protected override void OnCleared(EventArgs e) /// /// Source of the event. /// Event arguments associated with the event. - protected void OnChildPropertyChanged(object sender, PropertyChangedEventArgs e) => OnPropertyChanged(e); + protected void OnChildPropertyChanged(object? sender, PropertyChangedEventArgs e) => OnPropertyChanged(e); /// /// Handle a maximize/restore request from a child item. /// /// Source of the event. /// Event arguments associated with the event. - protected void OnChildMaximizeRestoreClicked(object sender, EventArgs e) => MaximizeRestoreClicked?.Invoke(sender, e); + protected void OnChildMaximizeRestoreClicked(object? sender, EventArgs e) => MaximizeRestoreClicked?.Invoke(sender, e); /// /// Raises the PropertyChanged event. diff --git a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequence.cs b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequence.cs index e6d7f6b16..777d712b4 100644 --- a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequence.cs +++ b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequence.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -613,14 +613,14 @@ public void DebugOutput(int indent) /// /// Source of the event. /// Event arguments associated with the event. - protected void OnChildrenPropertyChanged(object sender, PropertyChangedEventArgs e) => OnPropertyChanged(e); + protected void OnChildrenPropertyChanged(object? sender, PropertyChangedEventArgs e) => OnPropertyChanged(e); /// /// Handle a maximize/restore request from a child item. /// /// Source of the event. /// Event arguments associated with the event. - protected void OnChildrenMaximizeRestoreClicked(object sender, EventArgs e) => MaximizeRestoreClicked?.Invoke(sender, e); + protected void OnChildrenMaximizeRestoreClicked(object? sender, EventArgs e) => MaximizeRestoreClicked?.Invoke(sender, e); /// /// Raises the PropertyChanged event. diff --git a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequenceConverter.cs b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequenceConverter.cs index ca4f50c8a..bd5fff68b 100644 --- a/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequenceConverter.cs +++ b/Source/Krypton Components/Krypton.Workspace/Controls Workspace/KryptonWorkspaceSequenceConverter.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspace.cs b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspace.cs index b78f7bd98..012bb2bd4 100644 --- a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspace.cs +++ b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspace.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -55,7 +55,7 @@ protected override void Dispose(bool disposing) /// /// Gets the target workspace control. /// - public KryptonWorkspace Workspace { get; private set; } + public KryptonWorkspace? Workspace { get; private set; } #endregion @@ -67,27 +67,32 @@ protected override void Dispose(bool disposing) /// Target workspace cell instance. /// Dragged page data. /// Last page to be transferred. - protected KryptonPage? ProcessDragEndData(KryptonWorkspace workspace, - KryptonWorkspaceCell target, + protected KryptonPage? ProcessDragEndData(KryptonWorkspace? workspace, + KryptonWorkspaceCell? target, PageDragEndData? data) { KryptonPage? ret = null; // Add each source page to the target - foreach (KryptonPage? page in data.Pages) + if (data is not null + && workspace is not null + &&target is not null ) { - // Only add the page if one of the allow flags is set - if ((page.Flags & (int)AllowFlags) != 0) + foreach (KryptonPage? page in data.Pages) { - // Use event to allow decision on if the page should be dropped - // (or even swap the page for a different page to be dropped) - var e = new PageDropEventArgs(page); - workspace.OnPageDrop(e); - - if (e is { Cancel: false, Page: not null }) + // Only add the page if one of the allow flags is set + if ((page.Flags & (int)AllowFlags) != 0) { - target.Pages.Add(e.Page); - ret = e.Page; + // Use event to allow decision on if the page should be dropped + // (or even swap the page for a different page to be dropped) + var e = new PageDropEventArgs(page); + workspace.OnPageDrop(e); + + if (e is { Cancel: false, Page: not null }) + { + target.Pages.Add(e.Page); + ret = e.Page; + } } } } diff --git a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellEdge.cs b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellEdge.cs index 5abb8e552..18c1e5943 100644 --- a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellEdge.cs +++ b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -65,7 +65,7 @@ protected override void Dispose(bool disposing) /// /// Gets the target workspace cell. /// - public KryptonWorkspaceCell Cell { get; private set; } + public KryptonWorkspaceCell? Cell { get; private set; } /// /// Is this target a match for the provided screen position. @@ -83,18 +83,24 @@ public override bool IsMatch(Point screenPt, PageDragEndData? dragEndData) { // Create list of all the visible pages in the cell var visiblePages = new KryptonPageCollection(); - foreach (KryptonPage page in Cell.Pages) + if (Cell is not null) { - if (page.LastVisibleSet) + foreach (KryptonPage page in Cell.Pages) { - visiblePages.Add(page); + if (page.LastVisibleSet) + { + visiblePages.Add(page); + } } } // Remove all those that are being dragged - foreach (KryptonPage page in dragEndData.Pages) + if (dragEndData is not null) { - visiblePages.Remove(page); + foreach (KryptonPage page in dragEndData.Pages) + { + visiblePages.Remove(page); + } } // Cache number of visible pages in target that are not part of the dragging set @@ -127,11 +133,11 @@ public override bool IsMatch(Point screenPt, PageDragEndData? dragEndData) public override bool PerformDrop(Point screenPt, PageDragEndData? data) { // We need a parent sequence in order to perform drop - if (Cell.WorkspaceParent is KryptonWorkspaceSequence parent) + if ( Cell is not null && Cell.WorkspaceParent is KryptonWorkspaceSequence parent) { // Transfer the dragged pages into a new cell var cell = new KryptonWorkspaceCell(); - KryptonPage? page = ProcessDragEndData(Workspace, cell, data); + KryptonPage? page = ProcessDragEndData(Workspace!, cell, data); // If no pages are transferred then we do nothing and no longer need cell instance if (page == null) @@ -152,9 +158,9 @@ public override bool PerformDrop(Point screenPt, PageDragEndData? data) // Create a new sequence and transfer the target cell into it var sequence = new KryptonWorkspaceSequence(sequenceOrientation); - var index = parent.Children.IndexOf(Cell); + var index = parent.Children!.IndexOf(Cell); parent.Children.RemoveAt(index); - sequence.Children.Add(Cell); + sequence.Children!.Add(Cell); // Put the sequence into the place where the target cell used to be parent.Children.Insert(index, sequence); @@ -172,7 +178,7 @@ public override bool PerformDrop(Point screenPt, PageDragEndData? data) else { // Find position of the target cell - var index = parent.Children.IndexOf(Cell); + var index = parent.Children!.IndexOf(Cell); // Add new cell before or after the target cell? if (Edge is VisualOrientation.Left or VisualOrientation.Top) @@ -196,7 +202,7 @@ public override bool PerformDrop(Point screenPt, PageDragEndData? data) // Need to layout so the new cell has been added as a child control and // therefore can receive the focus we want to give it immediately afterwards - Workspace.PerformLayout(); + Workspace?.PerformLayout(); if (!cell.IsDisposed) { diff --git a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellTransfer.cs b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellTransfer.cs index 52be99a29..72547177c 100644 --- a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellTransfer.cs +++ b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceCellTransfer.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -18,7 +18,7 @@ namespace Krypton.Workspace public class DragTargetWorkspaceCellTransfer : DragTargetWorkspace { #region Instance Fields - private KryptonWorkspaceCell _cell; + private KryptonWorkspaceCell? _cell; private int _notDraggedPagesFromCell; #endregion @@ -73,12 +73,15 @@ public override bool IsMatch(Point screenPt, PageDragEndData? dragEndData) { // Search for any pages that are not from this cell _notDraggedPagesFromCell = 0; - foreach (KryptonPage page in dragEndData.Pages) + if (dragEndData is not null) { - if (!_cell.Pages.Contains(page)) + foreach (KryptonPage page in dragEndData.Pages) { - _notDraggedPagesFromCell = 1; - break; + if (_cell is not null && !_cell.Pages.Contains(page)) + { + _notDraggedPagesFromCell = 1; + break; + } } } } @@ -109,12 +112,12 @@ public override bool PerformDrop(Point screenPt, PageDragEndData? data) if (page != null) { // Does the cell allow the selection of tabs? - if (_cell.AllowTabSelect) + if (_cell is not null && _cell.AllowTabSelect) { _cell.SelectedPage = page; } - if (!_cell.IsDisposed) + if (_cell is not null && !_cell.IsDisposed) { // Without this DoEvents() call the dropping of multiple pages in a complex arrangement causes an exception for // a complex reason that is hard to work out (i.e. I'm not entirely sure). Something to do with using select to diff --git a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceEdge.cs b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceEdge.cs index 006a97136..1faf4c566 100644 --- a/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceEdge.cs +++ b/Source/Krypton Components/Krypton.Workspace/Dragging/DragTargetWorkspaceEdge.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -72,6 +72,11 @@ public DragTargetWorkspaceEdge(Rectangle screenRect, /// Drop was performed and the source can perform any removal of pages as required. public override bool PerformDrop(Point screenPt, PageDragEndData? data) { + if (Workspace is null) + { + throw new ArgumentNullException(nameof(Workspace)); + } + // Transfer the dragged pages into a new cell var cell = new KryptonWorkspaceCell(); KryptonPage? page = ProcessDragEndData(Workspace, cell, data); @@ -90,11 +95,11 @@ public override bool PerformDrop(Point screenPt, PageDragEndData? data) { // Create a new sequence and place all existing root items into it var sequence = new KryptonWorkspaceSequence(Workspace.Root.Orientation); - for (var i = Workspace.Root.Children.Count - 1; i >= 0; i--) + for (var i = Workspace.Root.Children!.Count - 1; i >= 0; i--) { Component child = Workspace.Root.Children[i]; Workspace.Root.Children.RemoveAt(i); - sequence.Children.Insert(0, child); + sequence.Children!.Insert(0, child); } // Put the new sequence in the root so all items are now grouped together @@ -109,11 +114,11 @@ public override bool PerformDrop(Point screenPt, PageDragEndData? data) // Add to the start or the end of the root sequence? if (Edge is VisualOrientation.Left or VisualOrientation.Top) { - Workspace.Root.Children.Insert(0, cell); + Workspace.Root.Children!.Insert(0, cell); } else { - Workspace.Root.Children.Add(cell); + Workspace.Root.Children!.Add(cell); } // Make the last page transfer the newly selected page of the cell diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/ActiveCellChangedEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/ActiveCellChangedEventArgs.cs index 6ccb70a6e..5ab8553ef 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/ActiveCellChangedEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/ActiveCellChangedEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/ActivePageChangedEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/ActivePageChangedEventArgs.cs index b89e99116..fe87b4cfb 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/ActivePageChangedEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/ActivePageChangedEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -23,8 +23,8 @@ public class ActivePageChangedEventArgs : EventArgs /// /// Previous active page value. /// New active page value. - public ActivePageChangedEventArgs(KryptonPage oldPage, - KryptonPage newPage) + public ActivePageChangedEventArgs(KryptonPage? oldPage, + KryptonPage? newPage) { OldPage = oldPage; NewPage = newPage; @@ -35,12 +35,12 @@ public ActivePageChangedEventArgs(KryptonPage oldPage, /// /// Gets the old page reference. /// - public KryptonPage OldPage { get; } + public KryptonPage? OldPage { get; } /// /// Gets the new page reference. /// - public KryptonPage NewPage { get; } + public KryptonPage? NewPage { get; } #endregion } diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/CellDragCancelEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/CellDragCancelEventArgs.cs index 9834410ce..d1238b54b 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/CellDragCancelEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/CellDragCancelEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/PageLoadingEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/PageLoadingEventArgs.cs index b0410ea11..a6e06b823 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/PageLoadingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/PageLoadingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/PageSavingEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/PageSavingEventArgs.cs index 760384c05..e87a286db 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/PageSavingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/PageSavingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/PagesUnmatchedEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/PagesUnmatchedEventArgs.cs index 88706f6cf..4e0eee47b 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/PagesUnmatchedEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/PagesUnmatchedEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/RecreateLoadingPageEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/RecreateLoadingPageEventArgs.cs index c6562b7ef..989adc725 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/RecreateLoadingPageEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/RecreateLoadingPageEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/WorkspaceCellEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/WorkspaceCellEventArgs.cs index 8e07cc46a..3d7d4dc73 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/WorkspaceCellEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/WorkspaceCellEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlLoadingEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlLoadingEventArgs.cs index 2da74c863..6a2302eda 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlLoadingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlLoadingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlSavingEventArgs.cs b/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlSavingEventArgs.cs index f62950c29..7a1b9511b 100644 --- a/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlSavingEventArgs.cs +++ b/Source/Krypton Components/Krypton.Workspace/EventArgs/XmlSavingEventArgs.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/General/CellPageNotify.cs b/Source/Krypton Components/Krypton.Workspace/General/CellPageNotify.cs index ec67acf09..d5dc6432c 100644 --- a/Source/Krypton Components/Krypton.Workspace/General/CellPageNotify.cs +++ b/Source/Krypton Components/Krypton.Workspace/General/CellPageNotify.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,7 +44,7 @@ public class CellPageNotify : IDragPageNotify /// /// Source of the page drag; can be null. /// Event arguments containing the new screen point of the mouse. - public void PageDragMove(object sender, PointEventArgs e) => _workspace.InternalPageDragMove(sender as KryptonNavigator, e); + public void PageDragMove(object sender, PointEventArgs e) => _workspace.InternalPageDragMove((KryptonNavigator)sender, e); /// /// Occurs when drag operation completes with pages being dropped. @@ -52,13 +52,13 @@ public class CellPageNotify : IDragPageNotify /// Source of the page drag; can be null. /// Event arguments containing the new screen point of the mouse. /// Drop was performed and the source can perform any removal of pages as required. - public bool PageDragEnd(object sender, PointEventArgs e) => _workspace.InternalPageDragEnd(sender as KryptonNavigator, e); + public bool PageDragEnd(object sender, PointEventArgs e) => _workspace.InternalPageDragEnd((KryptonNavigator)sender, e); /// /// Occurs when dragging pages has been cancelled. /// /// Source of the page drag; can be null. - public void PageDragQuit(object sender) => _workspace.InternalPageDragQuit(sender as KryptonNavigator); + public void PageDragQuit(object sender) => _workspace.InternalPageDragQuit((KryptonNavigator)sender); #endregion } } diff --git a/Source/Krypton Components/Krypton.Workspace/General/Definitions.cs b/Source/Krypton Components/Krypton.Workspace/General/Definitions.cs index d1c37fc50..2d2c734af 100644 --- a/Source/Krypton Components/Krypton.Workspace/General/Definitions.cs +++ b/Source/Krypton Components/Krypton.Workspace/General/Definitions.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ namespace Krypton.Workspace /// /// Specifies the compacting operations performed during layout. /// - [Flags()] + [Flags] public enum CompactFlags { /// @@ -70,7 +70,7 @@ public interface IWorkspaceItem /// /// Reference to owning workspace item. /// - IWorkspaceItem WorkspaceParent { get; } + IWorkspaceItem? WorkspaceParent { get; } /// /// Should the item be Displayed in the workspace. diff --git a/Source/Krypton Components/Krypton.Workspace/General/PlatformInvoke.cs b/Source/Krypton Components/Krypton.Workspace/General/PlatformInvoke.cs index 6b04c0f79..bbdb90a33 100644 --- a/Source/Krypton Components/Krypton.Workspace/General/PlatformInvoke.cs +++ b/Source/Krypton Components/Krypton.Workspace/General/PlatformInvoke.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/General/StarNumber.cs b/Source/Krypton Components/Krypton.Workspace/General/StarNumber.cs index 9410f2833..a35d9fc60 100644 --- a/Source/Krypton Components/Krypton.Workspace/General/StarNumber.cs +++ b/Source/Krypton Components/Krypton.Workspace/General/StarNumber.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/General/StarSize.cs b/Source/Krypton Components/Krypton.Workspace/General/StarSize.cs index d9844a6e7..46e0ce45c 100644 --- a/Source/Krypton Components/Krypton.Workspace/General/StarSize.cs +++ b/Source/Krypton Components/Krypton.Workspace/General/StarSize.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/Global/GlobalDeclarations.cs b/Source/Krypton Components/Krypton.Workspace/Global/GlobalDeclarations.cs index 29b412eca..6614ef210 100644 --- a/Source/Krypton Components/Krypton.Workspace/Global/GlobalDeclarations.cs +++ b/Source/Krypton Components/Krypton.Workspace/Global/GlobalDeclarations.cs @@ -1,7 +1,7 @@ #region BSD License /* * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2023. All rights reserved. + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2021 - 2024. All rights reserved. */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace 2022.csproj b/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace 2022.csproj index da735a753..d58b7678b 100644 --- a/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace 2022.csproj +++ b/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace 2022.csproj @@ -1,26 +1,17 @@  - + - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows + net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows - - - - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - - - net48;net481;net6.0-windows;net7.0-windows + + net48;net481;net8.0-windows;net9.0-windows - net462;net47;net471;net472;net48;net481;net6.0-windows;net7.0-windows;net8.0-windows - - - + net462;net47;net471;net472;net48;net481;net8.0-windows + @@ -40,10 +31,13 @@ en true Debug;Release;Installer;Nightly;Canary - preview enable - 6 + + 8 + latest true + + true @@ -94,7 +88,7 @@ - ..\..\..\Bin\$(Configuration)\Krypton.Workspace.xml + true ..\..\..\Bin\$(Configuration)\ diff --git a/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace.licenseheader b/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace.licenseheader index 93ab4f9da..7e0475429 100644 --- a/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace.licenseheader +++ b/Source/Krypton Components/Krypton.Workspace/Krypton.Workspace.licenseheader @@ -6,7 +6,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/Palette/WorkspacePageMenu.cs b/Source/Krypton Components/Krypton.Workspace/Palette/WorkspacePageMenu.cs index 1a792a420..97bf41fa0 100644 --- a/Source/Krypton Components/Krypton.Workspace/Palette/WorkspacePageMenu.cs +++ b/Source/Krypton Components/Krypton.Workspace/Palette/WorkspacePageMenu.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -71,24 +71,25 @@ public WorkspaceMenus(KryptonWorkspace workspace) /// Gets a value indicating if all values are default. /// [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public override bool IsDefault => (TextClose.Equals(DEFAULT_TEXT_CLOSE) && - TextCloseAllButThis.Equals(DEFAULT_TEXT_CLOSE_ALL_BUT_THIS) && - TextMoveNext.Equals(DEFAULT_TEXT_MOVE_NEXT) && - TextMovePrevious.Equals(DEFAULT_TEXT_MOVE_PREVIOUS) && - TextSplitVertical.Equals(DEFAULT_TEXT_SPLIT_VERTICAL) && - TextSplitHorizontal.Equals(DEFAULT_TEXT_SPLIT_HORIZONTAL) && - TextRebalance.Equals(DEFAULT_TEXT_REBALANCE) && - TextMaximize.Equals(DEFAULT_TEXT_MAXIMIZE) && - TextRestore.Equals(DEFAULT_TEXT_RESTORE) && - ShortcutClose.Equals(DEFAULT_SHORTCUT_CLOSE) && - ShortcutCloseAllButThis.Equals(DEFAULT_SHORTCUT_CLOSE_ALL_BUT_THIS) && - ShortcutMoveNext.Equals(DEFAULT_SHORTCUT_MOVE_NEXT) && - ShortcutMovePrevious.Equals(DEFAULT_SHORTCUT_MOVE_PREVIOUS) && - ShortcutSplitVertical.Equals(DEFAULT_SHORTCUT_SPLIT_VERTICAL) && - ShortcutSplitHorizontal.Equals(DEFAULT_SHORTCUT_SPLIT_HORIZONTAL) && - ShortcutRebalance.Equals(DEFAULT_SHORTCUT_REBALANCE) && - ShortcutMaximizeRestore.Equals(DEFAULT_SHORTCUT_MAXIMIZE_RESTORE) && - ShowContextMenu); + TextCloseAllButThis.Equals(DEFAULT_TEXT_CLOSE_ALL_BUT_THIS) && + TextMoveNext.Equals(DEFAULT_TEXT_MOVE_NEXT) && + TextMovePrevious.Equals(DEFAULT_TEXT_MOVE_PREVIOUS) && + TextSplitVertical.Equals(DEFAULT_TEXT_SPLIT_VERTICAL) && + TextSplitHorizontal.Equals(DEFAULT_TEXT_SPLIT_HORIZONTAL) && + TextRebalance.Equals(DEFAULT_TEXT_REBALANCE) && + TextMaximize.Equals(DEFAULT_TEXT_MAXIMIZE) && + TextRestore.Equals(DEFAULT_TEXT_RESTORE) && + ShortcutClose.Equals(DEFAULT_SHORTCUT_CLOSE) && + ShortcutCloseAllButThis.Equals(DEFAULT_SHORTCUT_CLOSE_ALL_BUT_THIS) && + ShortcutMoveNext.Equals(DEFAULT_SHORTCUT_MOVE_NEXT) && + ShortcutMovePrevious.Equals(DEFAULT_SHORTCUT_MOVE_PREVIOUS) && + ShortcutSplitVertical.Equals(DEFAULT_SHORTCUT_SPLIT_VERTICAL) && + ShortcutSplitHorizontal.Equals(DEFAULT_SHORTCUT_SPLIT_HORIZONTAL) && + ShortcutRebalance.Equals(DEFAULT_SHORTCUT_REBALANCE) && + ShortcutMaximizeRestore.Equals(DEFAULT_SHORTCUT_MAXIMIZE_RESTORE) && + ShowContextMenu); #endregion diff --git a/Source/Krypton Components/Krypton.Workspace/View Draw/ViewDrawWorkspaceSeparator.cs b/Source/Krypton Components/Krypton.Workspace/View Draw/ViewDrawWorkspaceSeparator.cs index 44d3317c8..6a7dd6c58 100644 --- a/Source/Krypton Components/Krypton.Workspace/View Draw/ViewDrawWorkspaceSeparator.cs +++ b/Source/Krypton Components/Krypton.Workspace/View Draw/ViewDrawWorkspaceSeparator.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -30,11 +30,11 @@ public class ViewDrawWorkspaceSeparator : ViewDrawSeparator, /// Associated workspace instance. /// Associated workspace item. /// Visual orientation of the content. - public ViewDrawWorkspaceSeparator(KryptonWorkspace workspace, + public ViewDrawWorkspaceSeparator([DisallowNull] KryptonWorkspace workspace, IWorkspaceItem workspaceItem, Orientation orientation) - : base(workspace.StateDisabled.Separator, workspace.StateNormal.Separator, workspace.StateTracking, workspace.StatePressed, - workspace.StateDisabled.Separator, workspace.StateNormal.Separator, workspace.StateTracking, workspace.StatePressed, + : base(workspace.StateDisabled.Separator!, workspace.StateNormal.Separator!, workspace.StateTracking, workspace.StatePressed, + workspace.StateDisabled.Separator!, workspace.StateNormal.Separator!, workspace.StateTracking, workspace.StatePressed, CommonHelper.SeparatorStyleToMetricPadding(workspace.SeparatorStyle), orientation) { _workspace = workspace; diff --git a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceActionList.cs b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceActionList.cs index 039d0c361..eb7e76935 100644 --- a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceActionList.cs +++ b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceActionList.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -15,8 +15,8 @@ namespace Krypton.Workspace internal class KryptonWorkspaceActionList : DesignerActionList { #region Instance Fields - private readonly KryptonWorkspace? _workspace; - private readonly IComponentChangeService _service; + private readonly KryptonWorkspace _workspace; + private readonly IComponentChangeService? _service; #endregion #region Identity @@ -28,10 +28,10 @@ public KryptonWorkspaceActionList(KryptonWorkspaceDesigner owner) : base(owner.Component) { // Remember designer and actual component instance being designed - _workspace = (KryptonWorkspace)owner.Component; + _workspace = (owner.Component as KryptonWorkspace)!; // Cache service used to notify when a property has changed - _service = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; } #endregion @@ -47,7 +47,7 @@ public PaletteBackStyle ContainerBackStyle { if (_workspace.ContainerBackStyle != value) { - _service.OnComponentChanged(_workspace, null, _workspace.ContainerBackStyle, value); + _service?.OnComponentChanged(_workspace, null, _workspace.ContainerBackStyle, value); _workspace.ContainerBackStyle = value; } } @@ -64,7 +64,7 @@ public SeparatorStyle SeparatorStyle { if (_workspace.SeparatorStyle != value) { - _service.OnComponentChanged(_workspace, null, _workspace.SeparatorStyle, value); + _service?.OnComponentChanged(_workspace, null, _workspace.SeparatorStyle, value); _workspace.SeparatorStyle = value; } } @@ -81,7 +81,7 @@ public bool AllowResizing { if (_workspace.AllowResizing != value) { - _service.OnComponentChanged(_workspace, null, _workspace.AllowResizing, value); + _service?.OnComponentChanged(_workspace, null, _workspace.AllowResizing, value); _workspace.AllowResizing = value; } } @@ -98,7 +98,7 @@ public CompactFlags CompactFlags { if (_workspace.CompactFlags != value) { - _service.OnComponentChanged(_workspace, null, _workspace.CompactFlags, value); + _service?.OnComponentChanged(_workspace, null, _workspace.CompactFlags, value); _workspace.CompactFlags = value; } } @@ -115,7 +115,7 @@ public PaletteMode PaletteMode { if (_workspace.PaletteMode != value) { - _service.OnComponentChanged(_workspace, null, _workspace.PaletteMode, value); + _service?.OnComponentChanged(_workspace, null, _workspace.PaletteMode, value); _workspace.PaletteMode = value; } } diff --git a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCellDesigner.cs b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCellDesigner.cs index 69edc9f76..025c3d124 100644 --- a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCellDesigner.cs +++ b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCellDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -28,17 +28,17 @@ internal class KryptonWorkspaceCellDesigner : KryptonNavigatorDesigner /// /// Source of the event. /// A ComponentEventArgs containing event data. - protected override void OnComponentRemoving(object sender, ComponentEventArgs e) + protected override void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our control is being removed if (e.Component == Navigator) { // If this workspace cell is inside a parent - var cell = (KryptonWorkspaceCell)Navigator; + var cell = Navigator as KryptonWorkspaceCell ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(Navigator))); // Cell an only be inside a workspace sequence - var sequence = (KryptonWorkspaceSequence)cell.WorkspaceParent; + var sequence = cell.WorkspaceParent as KryptonWorkspaceSequence; // Remove the cell from the parent - sequence?.Children.Remove(cell); + sequence?.Children?.Remove(cell); } base.OnComponentRemoving(sender, e); diff --git a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCollectionEditor.cs b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCollectionEditor.cs index ff5c671b5..c7ac917cc 100644 --- a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCollectionEditor.cs +++ b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceCollectionEditor.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -57,13 +57,13 @@ protected class PageProxy /// Gets access to the disabled page appearance entries. /// [Category(@"Visuals")] - public PaletteNavigator? StateDisabled => _item.StateDisabled; + public PaletteNavigator StateDisabled => _item.StateDisabled; /// /// Gets access to the normal page appearance entries. /// [Category(@"Visuals")] - public PaletteNavigator? StateNormal => _item.StateNormal; + public PaletteNavigator StateNormal => _item.StateNormal; /// /// Gets access to the tracking page appearance entries. @@ -440,13 +440,13 @@ public bool DisposeOnRemove /// Gets access to the disabled navigator appearance entries. /// [Category(@"Visuals")] - public PaletteNavigator? StateDisabled => _item.StateDisabled; + public PaletteNavigator StateDisabled => _item.StateDisabled; /// /// Gets access to the normal navigator appearance entries. /// [Category(@"Visuals")] - public PaletteNavigator? StateNormal => _item.StateNormal; + public PaletteNavigator StateNormal => _item.StateNormal; /// /// Gets access to the tracking navigator appearance entries. @@ -543,7 +543,7 @@ public bool Enabled /// [Category(@"Behavior")] [DefaultValue(true)] - public KryptonPage SelectedPage + public KryptonPage? SelectedPage { get => _item.SelectedPage; @@ -717,11 +717,11 @@ public MenuTreeNode(Component item) #endregion #region Implementation - private void OnPageTextChanged(object sender, EventArgs e) => Text = $"Page ({PageItem?.Text})"; + private void OnPageTextChanged(object? sender, EventArgs e) => Text = $"Page ({PageItem?.Text})"; - private void OnCellPropertyChanged(object sender, PropertyChangedEventArgs e) => Text = $"Cell ({CellItem?.StarSize})"; + private void OnCellPropertyChanged(object? sender, PropertyChangedEventArgs e) => Text = $"Cell ({CellItem?.StarSize})"; - private void OnSequencePropertyChanged(object sender, PropertyChangedEventArgs e) => Text = $"{SequenceItem?.Orientation} ({SequenceItem?.StarSize})"; + private void OnSequencePropertyChanged(object? sender, PropertyChangedEventArgs e) => Text = $"{SequenceItem?.Orientation} ({SequenceItem?.StarSize})"; #endregion } @@ -777,7 +777,7 @@ public PropertyGridSite(IServiceProvider servicePovider, /// /// Gets the component associated with the ISite when implemented by a class. /// - public IComponent? Component { get; } + public IComponent Component { get; } /// /// Gets the IContainer associated with the ISite when implemented by a class. @@ -1021,7 +1021,7 @@ protected override void OnEditValueChanged() { // Need to link the property browser to a site otherwise Image properties cannot be // edited because it cannot navigate to the owning project for its resources - _propertyGrid.Site = new PropertyGridSite(Context, _propertyGrid); + _propertyGrid.Site = new PropertyGridSite(Context!, _propertyGrid); // Cache a lookup of all items before changes are made _beforeItems = CreateItemsDictionary(Items); @@ -1049,7 +1049,7 @@ protected override void OnEditValueChanged() #endregion #region Implementation - private void OnVisibleChanged(object sender, EventArgs e) + private void OnVisibleChanged(object? sender, EventArgs e) { if (Visible) { @@ -1061,13 +1061,13 @@ private void OnVisibleChanged(object sender, EventArgs e) } } - private void buttonOK_Click(object sender, EventArgs e) + private void buttonOK_Click(object? sender, EventArgs e) { // Create an array with all the root items - object?[] rootItems = new object?[_treeView.Nodes.Count]; + object[] rootItems = new object[_treeView.Nodes.Count]; for (var i = 0; i < rootItems.Length; i++) { - rootItems[i] = ((MenuTreeNode)_treeView.Nodes[i]).Item; + rootItems[i] = ((MenuTreeNode)_treeView.Nodes[i]).Item!; } // Cache a lookup of all items after changes are made @@ -1077,16 +1077,16 @@ private void buttonOK_Click(object sender, EventArgs e) Items = rootItems; // Inform designer of changes in component items - SynchronizeCollections(_beforeItems, afterItems, Context); + SynchronizeCollections(_beforeItems, afterItems, Context!); // Notify container that the value has been changed - Context.OnComponentChanged(); + Context!.OnComponentChanged(); // Clear down contents of tree as this form can be reused _treeView.Nodes.Clear(); } - private void buttonMoveUp_Click(object sender, EventArgs e) + private void buttonMoveUp_Click(object? sender, EventArgs e) { // If we have a selected node var node = _treeView.SelectedNode as MenuTreeNode; @@ -1103,16 +1103,17 @@ private void buttonMoveUp_Click(object sender, EventArgs e) if (isNodePage) { // Remove page from parent cell - var parentNode = node.Parent as MenuTreeNode; - parentNode.CellItem.Pages.Remove(node.PageItem); + var parentNode = node.Parent as MenuTreeNode ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(node.Parent))); + + parentNode.CellItem!.Pages.Remove(node.PageItem!); parentNode.Nodes.Remove(node); // If the previous node is also a page if (isPreviousPage) { // Add page to the parent cell of target page - var previousParent = (MenuTreeNode)previousNode.Parent; - var pageIndex = previousParent.CellItem.Pages.IndexOf(previousNode.PageItem); + var previousParent = previousNode.Parent as MenuTreeNode; + var pageIndex = previousParent!.CellItem!.Pages.IndexOf(previousNode.PageItem!); // If the current and previous nodes are inside different cells if (previousParent != parentNode) @@ -1124,14 +1125,14 @@ private void buttonMoveUp_Click(object sender, EventArgs e) } } - previousParent.CellItem.Pages.Insert(pageIndex, node.PageItem); + previousParent.CellItem.Pages.Insert(pageIndex, node.PageItem!); previousParent.Nodes.Insert(pageIndex, node); } else if (isPreviousCell) { // Add page as last item of target cell parentNode = previousNode; - parentNode.CellItem.Pages.Insert(parentNode.CellItem.Pages.Count, node.PageItem); + parentNode.CellItem!.Pages.Insert(parentNode.CellItem.Pages.Count, node.PageItem!); parentNode.Nodes.Insert(parentNode.Nodes.Count, node); } } @@ -1141,16 +1142,16 @@ private void buttonMoveUp_Click(object sender, EventArgs e) var contained = ContainsNode(previousNode, node); // Remove cell from parent collection - var parentNode = (MenuTreeNode)node.Parent; + var parentNode = node.Parent as MenuTreeNode; TreeNodeCollection parentCollection = (node.Parent == null ? _treeView.Nodes : node.Parent.Nodes); - parentNode?.SequenceItem.Children.Remove(node.CellItem); + parentNode?.SequenceItem!.Children!.Remove(node.CellItem!); parentCollection.Remove(node); // If the previous node is also a cell if (isPreviousCell || contained) { // Add cell to the parent sequence of target cell - var previousParent = (MenuTreeNode)previousNode.Parent; + var previousParent = previousNode.Parent as MenuTreeNode; parentCollection = (previousNode.Parent == null ? _treeView.Nodes : previousNode.Parent.Nodes); var pageIndex = parentCollection.IndexOf(previousNode); @@ -1158,20 +1159,20 @@ private void buttonMoveUp_Click(object sender, EventArgs e) if (!contained && ((previousParent != null) && (previousParent != parentNode))) { // If the page is the last one in the collection then we need to insert afterwards - if (pageIndex == (previousParent.SequenceItem.Children.Count - 1)) + if (pageIndex == (previousParent.SequenceItem!.Children!.Count - 1)) { pageIndex++; } } - previousParent?.SequenceItem.Children.Insert(pageIndex, node.CellItem); + previousParent?.SequenceItem!.Children!.Insert(pageIndex, node.CellItem); parentCollection.Insert(pageIndex, node); } else if (isPreviousSequence) { // Add cell as last item of target sequence parentNode = previousNode; - parentNode.SequenceItem.Children.Insert(parentNode.SequenceItem.Children.Count, node.CellItem); + parentNode.SequenceItem!.Children!.Insert(parentNode.SequenceItem.Children.Count, node.CellItem); parentNode.Nodes.Insert(parentNode.Nodes.Count, node); } } @@ -1181,16 +1182,16 @@ private void buttonMoveUp_Click(object sender, EventArgs e) var contained = ContainsNode(previousNode, node); // Remove sequence from parent collection - var parentNode = (MenuTreeNode)node.Parent; + var parentNode = node.Parent as MenuTreeNode; TreeNodeCollection parentCollection = (node.Parent == null ? _treeView.Nodes : node.Parent.Nodes); - parentNode?.SequenceItem.Children.Remove(node.SequenceItem); + parentNode?.SequenceItem!.Children!.Remove(node.SequenceItem!); parentCollection.Remove(node); // If the previous node is also a sequence if (isPreviousCell || contained) { // Add sequence to the parent sequence of target cell - var previousParent = (MenuTreeNode)previousNode.Parent; + var previousParent = previousNode.Parent as MenuTreeNode; parentCollection = (previousNode.Parent == null ? _treeView.Nodes : previousNode.Parent.Nodes); var pageIndex = parentCollection.IndexOf(previousNode); @@ -1198,20 +1199,20 @@ private void buttonMoveUp_Click(object sender, EventArgs e) if (!contained && ((previousParent != null) && (previousParent != parentNode))) { // If the page is the last one in the collection then we need to insert afterwards - if (pageIndex == (previousParent.SequenceItem.Children.Count - 1)) + if (pageIndex == (previousParent.SequenceItem!.Children!.Count - 1)) { pageIndex++; } } - previousParent?.SequenceItem.Children.Insert(pageIndex, node.SequenceItem); + previousParent?.SequenceItem!.Children!.Insert(pageIndex, node.SequenceItem); parentCollection.Insert(pageIndex, node); } else if (isPreviousSequence) { // Add sequence as last item of target sequence parentNode = previousNode; - parentNode.SequenceItem.Children.Insert(parentNode.SequenceItem.Children.Count, node.SequenceItem); + parentNode.SequenceItem!.Children!.Insert(parentNode.SequenceItem.Children.Count, node.SequenceItem); parentNode.Nodes.Insert(parentNode.Nodes.Count, node); } } @@ -1225,17 +1226,16 @@ private void buttonMoveUp_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonMoveDown_Click(object sender, EventArgs e) + private void buttonMoveDown_Click(object? sender, EventArgs e) { // If we have a selected node - var node = (MenuTreeNode)_treeView.SelectedNode; + var node = _treeView.SelectedNode as MenuTreeNode; if (node != null) { NodeToType(node, out var isNodePage, out var isNodeCell, out var isNodeSequence); // Find the next node compatible as target for the selected node - var nextNode = NextNode(node) as MenuTreeNode; - if (nextNode != null) + if (NextNode(node) is MenuTreeNode nextNode) { NodeToType(nextNode, out var isNextPage, out var isNextCell, out var isNextSequence); @@ -1243,24 +1243,24 @@ private void buttonMoveDown_Click(object sender, EventArgs e) if (isNodePage) { // Remove page from parent cell - var parentNode = (MenuTreeNode)node.Parent; - parentNode.CellItem.Pages.Remove(node.PageItem); + var parentNode = node.Parent as MenuTreeNode; + parentNode!.CellItem!.Pages.Remove(node.PageItem!); parentNode.Nodes.Remove(node); // If the next node is also a page if (isNextPage) { // Add page to the parent cell of target page - var previousParent = (MenuTreeNode)nextNode.Parent; - var pageIndex = previousParent.CellItem.Pages.IndexOf(nextNode.PageItem); - previousParent.CellItem.Pages.Insert(pageIndex + 1, node.PageItem); + var previousParent = nextNode.Parent as MenuTreeNode; + var pageIndex = previousParent!.CellItem!.Pages.IndexOf(nextNode.PageItem!); + previousParent.CellItem.Pages.Insert(pageIndex + 1, node.PageItem!); previousParent.Nodes.Insert(pageIndex + 1, node); } else if (isNextCell) { // Add page as first item of target cell parentNode = nextNode; - parentNode.CellItem.Pages.Insert(0, node.PageItem); + parentNode.CellItem!.Pages.Insert(0, node.PageItem!); parentNode.Nodes.Insert(0, node); } } @@ -1270,26 +1270,26 @@ private void buttonMoveDown_Click(object sender, EventArgs e) var contained = ContainsNode(nextNode, node); // Remove cell from parent collection - var parentNode = (MenuTreeNode)node.Parent; + var parentNode = node.Parent as MenuTreeNode; TreeNodeCollection parentCollection = (node.Parent == null ? _treeView.Nodes : node.Parent.Nodes); - parentNode?.SequenceItem.Children.Remove(node.CellItem); + parentNode?.SequenceItem!.Children!.Remove(node.CellItem!); parentCollection.Remove(node); // If the next node is also a cell if (isNextCell || contained) { // Add cell to the parent sequence of target cell - var previousParent = (MenuTreeNode)nextNode.Parent; + var previousParent = nextNode.Parent as MenuTreeNode; parentCollection = (nextNode.Parent == null ? _treeView.Nodes : nextNode.Parent.Nodes); var pageIndex = parentCollection.IndexOf(nextNode); - previousParent?.SequenceItem.Children.Insert(pageIndex + 1, node.CellItem); + previousParent?.SequenceItem!.Children!.Insert(pageIndex + 1, node.CellItem); parentCollection.Insert(pageIndex + 1, node); } else if (isNextSequence) { // Add cell as first item of target sequence parentNode = nextNode; - parentNode.SequenceItem.Children.Insert(0, node.CellItem); + parentNode.SequenceItem!.Children!.Insert(0, node.CellItem); parentNode.Nodes.Insert(0, node); } } @@ -1299,26 +1299,26 @@ private void buttonMoveDown_Click(object sender, EventArgs e) var contained = ContainsNode(nextNode, node); // Remove sequence from parent collection - var parentNode = (MenuTreeNode)node.Parent; + var parentNode = node.Parent as MenuTreeNode; TreeNodeCollection parentCollection = (node.Parent == null ? _treeView.Nodes : node.Parent.Nodes); - parentNode?.SequenceItem.Children.Remove(node.SequenceItem); + parentNode?.SequenceItem!.Children!.Remove(node.SequenceItem!); parentCollection.Remove(node); // If the next node is a cell if (isNextCell || contained) { // Add sequence to the parent sequence of target cell - var previousParent = (MenuTreeNode)nextNode.Parent; + var previousParent = nextNode.Parent as MenuTreeNode; parentCollection = (nextNode.Parent == null ? _treeView.Nodes : nextNode.Parent.Nodes); var pageIndex = parentCollection.IndexOf(nextNode); - previousParent?.SequenceItem.Children.Insert(pageIndex + 1, node.SequenceItem); + previousParent?.SequenceItem!.Children!.Insert(pageIndex + 1, node.SequenceItem); parentCollection.Insert(pageIndex + 1, node); } else if (isNextSequence) { // Add sequence as first item of target sequence parentNode = nextNode; - parentNode.SequenceItem.Children.Insert(0, node.SequenceItem); + parentNode.SequenceItem!.Children!.Insert(0, node.SequenceItem); parentNode.Nodes.Insert(0, node); } } @@ -1332,13 +1332,14 @@ private void buttonMoveDown_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonAddPage_Click(object sender, EventArgs e) + private void buttonAddPage_Click(object? sender, EventArgs e) { // Create new page and menu node for the page var page = (KryptonPage)CreateInstance(typeof(KryptonPage)); TreeNode newNode = new MenuTreeNode(page); - var selectedNode = (MenuTreeNode)_treeView.SelectedNode; + var selectedNode = (MenuTreeNode)_treeView.SelectedNode!; + if (selectedNode.CellItem != null) { // Selected node is a cell, so append page to end of cells page collection @@ -1348,9 +1349,9 @@ private void buttonAddPage_Click(object sender, EventArgs e) else if (selectedNode.PageItem != null) { // Selected node is a page, so insert after this page - var selectedParentNode = (MenuTreeNode)selectedNode.Parent; + var selectedParentNode = (MenuTreeNode)selectedNode.Parent!; var selectedIndex = selectedParentNode.Nodes.IndexOf(selectedNode); - selectedParentNode.CellItem.Pages.Insert(selectedIndex + 1, page); + selectedParentNode.CellItem!.Pages.Insert(selectedIndex + 1, page); selectedParentNode.Nodes.Insert(selectedIndex + 1, newNode); } @@ -1362,7 +1363,7 @@ private void buttonAddPage_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonAddCell_Click(object sender, EventArgs e) + private void buttonAddCell_Click(object? sender, EventArgs e) { // Create new cell and menu node for the cell and two nodes for the child pages var cell = (KryptonWorkspaceCell)CreateInstance(typeof(KryptonWorkspaceCell)); @@ -1375,8 +1376,9 @@ private void buttonAddCell_Click(object sender, EventArgs e) } newNode.Expand(); - var selectedNode = (MenuTreeNode)_treeView.SelectedNode; - if (selectedNode == null) + var selectedNode = _treeView.SelectedNode as MenuTreeNode; + + if (selectedNode is null) { // Nothing is selected, so add to the root _treeView.Nodes.Add(newNode); @@ -1384,12 +1386,12 @@ private void buttonAddCell_Click(object sender, EventArgs e) else if (selectedNode.SequenceItem != null) { // Selected node is a sequence, so append cell to end of sequence collection - selectedNode.SequenceItem.Children.Add(cell); + selectedNode.SequenceItem.Children!.Add(cell); selectedNode.Nodes.Add(newNode); } - else if (selectedNode.CellItem != null) + else if (selectedNode.CellItem is not null) { - if (selectedNode.Parent == null) + if (selectedNode.Parent is null) { // Selected node is cell in root, so insert after it in the root _treeView.Nodes.Insert(_treeView.Nodes.IndexOf(selectedNode) + 1, newNode); @@ -1399,7 +1401,7 @@ private void buttonAddCell_Click(object sender, EventArgs e) // Selected node is a cell, so insert after this cell var selectedParentNode = (MenuTreeNode)selectedNode.Parent; var selectedIndex = selectedParentNode.Nodes.IndexOf(selectedNode); - selectedParentNode.SequenceItem.Children.Insert(selectedIndex + 1, cell); + selectedParentNode.SequenceItem!.Children!.Insert(selectedIndex + 1, cell); selectedParentNode.Nodes.Insert(selectedIndex + 1, newNode); } } @@ -1412,13 +1414,13 @@ private void buttonAddCell_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonAddSequence_Click(object sender, EventArgs e) + private void buttonAddSequence_Click(object? sender, EventArgs e) { // Create new sequence and menu node for the sequence - var sequence = (KryptonWorkspaceSequence)CreateInstance(typeof(KryptonWorkspaceSequence)); + var sequence = CreateInstance(typeof(KryptonWorkspaceSequence)) as KryptonWorkspaceSequence ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull("sequence")); TreeNode newNode = new MenuTreeNode(sequence); - var selectedNode = (MenuTreeNode)_treeView.SelectedNode; + var selectedNode = _treeView.SelectedNode as MenuTreeNode; if (selectedNode == null) { // Nothing is selected, so add to the root @@ -1434,16 +1436,16 @@ private void buttonAddSequence_Click(object sender, EventArgs e) else { // Selected node is a cell, so insert after this cell - var selectedParentNode = (MenuTreeNode)selectedNode.Parent; + var selectedParentNode = selectedNode.Parent as MenuTreeNode ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(selectedNode.Parent))); var selectedIndex = selectedParentNode.Nodes.IndexOf(selectedNode); - selectedParentNode.SequenceItem.Children.Insert(selectedIndex + 1, sequence); + selectedParentNode.SequenceItem!.Children!.Insert(selectedIndex + 1, sequence); selectedParentNode.Nodes.Insert(selectedIndex + 1, newNode); } } else if (selectedNode.SequenceItem != null) { // Selected node is a sequence, so append sequence to end of child collection - selectedNode.SequenceItem.Children.Add(sequence); + selectedNode.SequenceItem.Children!.Add(sequence); selectedNode.Nodes.Add(newNode); } @@ -1455,13 +1457,13 @@ private void buttonAddSequence_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void buttonDelete_Click(object sender, EventArgs e) + private void buttonDelete_Click(object? sender, EventArgs e) { - if (_treeView.SelectedNode != null) + if (_treeView.SelectedNode is not null) { - var treeNode = (MenuTreeNode)_treeView.SelectedNode; + var treeNode = (MenuTreeNode)_treeView.SelectedNode!; - if (treeNode.Parent == null) + if (treeNode.Parent is null) { // Remove from the root collection _treeView.Nodes.Remove(treeNode); @@ -1475,11 +1477,11 @@ private void buttonDelete_Click(object sender, EventArgs e) // Remove item from parent container if (parentNode.CellItem != null) { - parentNode.CellItem.Pages.Remove(treeNode.Item); + parentNode.CellItem.Pages.Remove(treeNode.Item!); } else { - parentNode.SequenceItem?.Children.Remove(treeNode.Item); + parentNode.SequenceItem?.Children!.Remove(treeNode.Item!); } } @@ -1490,7 +1492,7 @@ private void buttonDelete_Click(object sender, EventArgs e) UpdatePropertyGrid(); } - private void treeView_AfterSelect(object sender, TreeViewEventArgs e) + private void treeView_AfterSelect(object? sender, TreeViewEventArgs e) { UpdateButtons(); UpdatePropertyGrid(); @@ -1653,11 +1655,11 @@ private static void SeparatorToItems(ViewDrawWorkspaceSeparator separator, after = separator.WorkspaceItem; // Workspace item before the separator (to the left or above) - var beforeSequence = (KryptonWorkspaceSequence)after.WorkspaceParent; + var beforeSequence = after.WorkspaceParent as KryptonWorkspaceSequence ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(after.WorkspaceParent))); // Previous items might be invisible and so search till we find the visible one we expect before = null; - for (var i = beforeSequence.Children.IndexOf(after) - 1; i >= 0; i--) + for (var i = beforeSequence.Children!.IndexOf(after) - 1; i >= 0; i--) { if ((beforeSequence.Children[i] is IWorkspaceItem { WorkspaceVisible: true } item)) { @@ -1669,7 +1671,7 @@ private static void SeparatorToItems(ViewDrawWorkspaceSeparator separator, private void UpdateButtons() { - var node = (MenuTreeNode)_treeView.SelectedNode; + var node = _treeView.SelectedNode as MenuTreeNode; var isNone = (node == null); var isPage = node?.PageItem != null; var isCell = node?.CellItem != null; @@ -1685,8 +1687,9 @@ private void UpdateButtons() private void UpdatePropertyGrid() { - TreeNode node = _treeView.SelectedNode; - if (node == null) + TreeNode? node = _treeView.SelectedNode; + + if (node is null) { _propertyGrid.SelectedObject = null; } @@ -1704,7 +1707,7 @@ private void UpdatePropertyGrid() } else { - _propertyGrid.SelectedObject = new SequenceProxy(menuNode.SequenceItem); + _propertyGrid.SelectedObject = new SequenceProxy(menuNode.SequenceItem!); } } } @@ -1724,26 +1727,29 @@ private DictItemBase CreateItemsDictionary(object?[] items) private void AddItemsToDictionary(DictItemBase dictItems, Component? baseItem) { // Add item to the dictionary - dictItems.Add(baseItem, baseItem); - - switch (baseItem) + if (dictItems is not null && baseItem is not null) { - // Add pages from a cell - case KryptonWorkspaceCell cell: - foreach (Component? item in cell.Pages) - { - AddItemsToDictionary(dictItems, item); - } + dictItems.Add(baseItem, baseItem); - break; - // Add children from a sequence - case KryptonWorkspaceSequence sequence: - foreach (Component? item in sequence.Children) - { - AddItemsToDictionary(dictItems, item); - } + switch (baseItem) + { + // Add pages from a cell + case KryptonWorkspaceCell cell: + foreach (Component? item in cell.Pages) + { + AddItemsToDictionary(dictItems, item); + } - break; + break; + // Add children from a sequence + case KryptonWorkspaceSequence sequence: + foreach (Component? item in sequence.Children!) + { + AddItemsToDictionary(dictItems, item); + } + + break; + } } } @@ -1774,7 +1780,7 @@ private void AddMenuTreeNode(Component item, MenuTreeNode? parent) break; // Add children from a sequence case KryptonWorkspaceSequence sequence: - foreach (Component child in sequence.Children) + foreach (Component child in sequence.Children!) { AddMenuTreeNode(child, node); } @@ -1839,7 +1845,7 @@ public KryptonWorkspace Workspace { get { - var sequence = (KryptonWorkspaceSequence)Context.Instance; + var sequence = Context!.Instance as KryptonWorkspaceSequence ?? throw new NullReferenceException(GlobalStaticValues.VariableCannotBeNull(nameof(Context.Instance))); return sequence.WorkspaceControl; } } diff --git a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceDesigner.cs b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceDesigner.cs index 2322b7c96..4ca7f6a31 100644 --- a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceDesigner.cs +++ b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -16,7 +16,7 @@ internal class KryptonWorkspaceDesigner : ParentControlDesigner { #region Instance Fields private KryptonWorkspace? _workspace; - private IComponentChangeService _changeService; + private IComponentChangeService? _changeService; #endregion #region Public Overrides @@ -40,10 +40,10 @@ public override void Initialize([DisallowNull] IComponent component) _workspace = component as KryptonWorkspace; // Get access to the services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; // We need to know when we are being removed/changed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -57,7 +57,7 @@ public override ICollection AssociatedComponents if (_workspace != null) { - compound.AddRange(_workspace.Root.Children); + compound.AddRange(_workspace.Root.Children!); } return compound; @@ -98,7 +98,7 @@ public override DesignerActionListCollection ActionLists /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; // Ensure base class is always disposed base.Dispose(disposing); @@ -124,20 +124,22 @@ protected override void Dispose(bool disposing) #endregion #region Implementation - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our workspace is being removed - if (e.Component == _workspace) + if (e is not null + && e.Component is not null + && e.Component.Equals(_workspace)) { // Prevent layout being performed during removal of children otherwise the layout // code will cause the controls to be added back before they are actually destroyed - _workspace.SuspendLayout(); + _workspace?.SuspendLayout(); // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // We need to remove all children from the workspace - for (var i = _workspace.Root.Children.Count - 1; i >= 0; i--) + for (var i = _workspace!.Root.Children!.Count - 1; i >= 0; i--) { var comp = _workspace.Root.Children[i] as Component; @@ -145,11 +147,11 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) if (comp is Control control) { // We need to manually remove it from the workspace controls collection - var readOnlyControls = (KryptonReadOnlyControls)_workspace.Controls; - readOnlyControls.RemoveInternal(control); + var readOnlyControls = _workspace.Controls as KryptonReadOnlyControls; + readOnlyControls?.RemoveInternal(control); } - host.DestroyComponent(comp); + host?.DestroyComponent(comp); // Must remove the child after it has been destroyed otherwise the component destroy method // will not be able to climb the sequence chain to find the parent workspace instance diff --git a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceSequenceDesigner.cs b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceSequenceDesigner.cs index b44b1a60b..01596895f 100644 --- a/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceSequenceDesigner.cs +++ b/Source/Krypton Components/Krypton.Workspace/Workspace/KryptonWorkspaceSequenceDesigner.cs @@ -5,7 +5,7 @@ * © Component Factory Pty Ltd, 2006 - 2016, (Version 4.5.0.0) All rights reserved. * * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) - * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2017 - 2023. All rights reserved. + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. * */ #endregion @@ -44,10 +44,10 @@ public override void Initialize([DisallowNull] IComponent component) _sequence = component as KryptonWorkspaceSequence; // Get access to the services - _changeService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); + _changeService = GetService(typeof(IComponentChangeService)) as IComponentChangeService; // We need to know when we are being removed/changed - _changeService.ComponentRemoving += OnComponentRemoving; + _changeService!.ComponentRemoving += OnComponentRemoving; } /// @@ -61,7 +61,7 @@ public override ICollection AssociatedComponents var compound = new ArrayList(); // Add the list of collection items - compound.AddRange(_sequence.Children); + compound.AddRange(_sequence?.Children!); return compound; } @@ -79,7 +79,7 @@ protected override void Dispose(bool disposing) { if (disposing) { - _changeService.ComponentRemoving -= OnComponentRemoving; + _changeService!.ComponentRemoving -= OnComponentRemoving; } } finally @@ -91,17 +91,17 @@ protected override void Dispose(bool disposing) #endregion #region Implementation - private void OnComponentRemoving(object sender, ComponentEventArgs e) + private void OnComponentRemoving(object? sender, ComponentEventArgs e) { // If our sequence is being removed if (e.Component == _sequence) { // Need access to host in order to delete a component - var host = (IDesignerHost)GetService(typeof(IDesignerHost)); + var host = GetService(typeof(IDesignerHost)) as IDesignerHost; // Climb the workspace item tree to get the top most sequence KryptonWorkspace? workspace = null; - IWorkspaceItem workspaceItem = _sequence; + IWorkspaceItem? workspaceItem = _sequence; while (workspaceItem?.WorkspaceParent != null) { workspaceItem = workspaceItem.WorkspaceParent; @@ -114,23 +114,26 @@ private void OnComponentRemoving(object sender, ComponentEventArgs e) } // We need to remove all children from the sequence - for (var j = _sequence.Children.Count - 1; j >= 0; j--) + for (var j = _sequence!.Children!.Count - 1; j >= 0; j--) { var comp = _sequence.Children[j] as Component; - // If the component is a control... - if ((comp is Control control) && (workspace != null)) + if (comp is not null) { - // We need to manually remove it from the workspace controls collection - var readOnlyControls = (KryptonReadOnlyControls)workspace.Controls; - readOnlyControls.RemoveInternal(control); + // If the component is a control... + if ((comp is Control control) && (workspace != null)) + { + // We need to manually remove it from the workspace controls collection + var readOnlyControls = (KryptonReadOnlyControls)workspace.Controls; + readOnlyControls.RemoveInternal(control); + } + + host?.DestroyComponent(comp); + + // Must remove the child after it has been destroyed otherwise the component destroy method + // will not be able to climb the sequence chain to find the parent workspace instance + _sequence.Children.Remove(comp); } - - host.DestroyComponent(comp); - - // Must remove the child after it has been destroyed otherwise the component destroy method - // will not be able to climb the sequence chain to find the parent workspace instance - _sequence.Children.Remove(comp); } } } diff --git a/Source/Krypton Components/TestForm/AboutBoxTest.Designer.cs b/Source/Krypton Components/TestForm/AboutBoxTest.Designer.cs new file mode 100644 index 000000000..85d5e4d4b --- /dev/null +++ b/Source/Krypton Components/TestForm/AboutBoxTest.Designer.cs @@ -0,0 +1,290 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class AboutBoxTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBoxTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnShow = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonTextBox4 = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonTextBox3 = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonTextBox2 = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonTextBox1 = new Krypton.Toolkit.KryptonTextBox(); + this.kchkUseRtlLayout = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkUseFullBuiltOnDate = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkShowToolkitInformation = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonManager1 = new Krypton.Toolkit.KryptonManager(this.components); + this.bsaAssemblyBrowse = new Krypton.Toolkit.ButtonSpecAny(); + this.bsaBrowseHeaderImage = new Krypton.Toolkit.ButtonSpecAny(); + this.bsaBrowseMainImage = new Krypton.Toolkit.ButtonSpecAny(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnShow); + this.kryptonPanel1.Controls.Add(this.kryptonButton1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 212); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(800, 50); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnShow + // + this.kbtnShow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.kbtnShow.Location = new System.Drawing.Point(602, 13); + this.kbtnShow.Name = "kbtnShow"; + this.kbtnShow.Size = new System.Drawing.Size(90, 25); + this.kbtnShow.TabIndex = 1; + this.kbtnShow.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnShow.Values.Text = "Show"; + this.kbtnShow.Click += new System.EventHandler(this.kbtnShow_Click); + // + // kryptonButton1 + // + this.kryptonButton1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.kryptonButton1.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kryptonButton1.Location = new System.Drawing.Point(698, 13); + this.kryptonButton1.Name = "kryptonButton1"; + this.kryptonButton1.Size = new System.Drawing.Size(90, 25); + this.kryptonButton1.TabIndex = 0; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton1.Values.Text = "Cance&l"; + this.kryptonButton1.Values.UseAsADialogButton = true; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 211); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(800, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.kryptonTextBox4); + this.kryptonPanel2.Controls.Add(this.kryptonTextBox3); + this.kryptonPanel2.Controls.Add(this.kryptonTextBox2); + this.kryptonPanel2.Controls.Add(this.kryptonTextBox1); + this.kryptonPanel2.Controls.Add(this.kchkUseRtlLayout); + this.kryptonPanel2.Controls.Add(this.kchkUseFullBuiltOnDate); + this.kryptonPanel2.Controls.Add(this.kchkShowToolkitInformation); + this.kryptonPanel2.Controls.Add(this.kryptonLabel4); + this.kryptonPanel2.Controls.Add(this.kryptonLabel3); + this.kryptonPanel2.Controls.Add(this.kryptonLabel2); + this.kryptonPanel2.Controls.Add(this.kryptonLabel1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(800, 211); + this.kryptonPanel2.TabIndex = 2; + // + // kryptonTextBox4 + // + this.kryptonTextBox4.ButtonSpecs.Add(this.bsaBrowseMainImage); + this.kryptonTextBox4.Location = new System.Drawing.Point(139, 135); + this.kryptonTextBox4.Name = "kryptonTextBox4"; + this.kryptonTextBox4.Size = new System.Drawing.Size(649, 26); + this.kryptonTextBox4.TabIndex = 10; + this.kryptonTextBox4.Text = "kryptonTextBox4"; + // + // kryptonTextBox3 + // + this.kryptonTextBox3.ButtonSpecs.Add(this.bsaBrowseHeaderImage); + this.kryptonTextBox3.Location = new System.Drawing.Point(139, 98); + this.kryptonTextBox3.Name = "kryptonTextBox3"; + this.kryptonTextBox3.Size = new System.Drawing.Size(649, 26); + this.kryptonTextBox3.TabIndex = 9; + this.kryptonTextBox3.Text = "kryptonTextBox3"; + // + // kryptonTextBox2 + // + this.kryptonTextBox2.Location = new System.Drawing.Point(139, 55); + this.kryptonTextBox2.Name = "kryptonTextBox2"; + this.kryptonTextBox2.Size = new System.Drawing.Size(649, 23); + this.kryptonTextBox2.TabIndex = 8; + this.kryptonTextBox2.Text = "kryptonTextBox2"; + // + // kryptonTextBox1 + // + this.kryptonTextBox1.ButtonSpecs.Add(this.bsaAssemblyBrowse); + this.kryptonTextBox1.Location = new System.Drawing.Point(139, 13); + this.kryptonTextBox1.Name = "kryptonTextBox1"; + this.kryptonTextBox1.Size = new System.Drawing.Size(649, 26); + this.kryptonTextBox1.TabIndex = 7; + this.kryptonTextBox1.Text = "kryptonTextBox1"; + // + // kchkUseRtlLayout + // + this.kchkUseRtlLayout.Location = new System.Drawing.Point(328, 174); + this.kchkUseRtlLayout.Name = "kchkUseRtlLayout"; + this.kchkUseRtlLayout.Size = new System.Drawing.Size(102, 22); + this.kchkUseRtlLayout.TabIndex = 6; + this.kchkUseRtlLayout.Values.Text = "Use Rtl Layout"; + // + // kchkUseFullBuiltOnDate + // + this.kchkUseFullBuiltOnDate.Location = new System.Drawing.Point(181, 174); + this.kchkUseFullBuiltOnDate.Name = "kchkUseFullBuiltOnDate"; + this.kchkUseFullBuiltOnDate.Size = new System.Drawing.Size(140, 22); + this.kchkUseFullBuiltOnDate.TabIndex = 5; + this.kchkUseFullBuiltOnDate.Values.Text = "Use Full Built on Date"; + // + // kchkShowToolkitInformation + // + this.kchkShowToolkitInformation.Location = new System.Drawing.Point(13, 174); + this.kchkShowToolkitInformation.Name = "kchkShowToolkitInformation"; + this.kchkShowToolkitInformation.Size = new System.Drawing.Size(161, 22); + this.kchkShowToolkitInformation.TabIndex = 4; + this.kchkShowToolkitInformation.Values.Text = "Show Toolkit Information"; + // + // kryptonLabel4 + // + this.kryptonLabel4.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel4.Location = new System.Drawing.Point(13, 98); + this.kryptonLabel4.Name = "kryptonLabel4"; + this.kryptonLabel4.Size = new System.Drawing.Size(92, 22); + this.kryptonLabel4.TabIndex = 3; + this.kryptonLabel4.Values.Text = "Header Image"; + // + // kryptonLabel3 + // + this.kryptonLabel3.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel3.Location = new System.Drawing.Point(13, 135); + this.kryptonLabel3.Name = "kryptonLabel3"; + this.kryptonLabel3.Size = new System.Drawing.Size(83, 22); + this.kryptonLabel3.TabIndex = 2; + this.kryptonLabel3.Values.Text = "Main Image:"; + // + // kryptonLabel2 + // + this.kryptonLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel2.Location = new System.Drawing.Point(13, 55); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(119, 22); + this.kryptonLabel2.TabIndex = 1; + this.kryptonLabel2.Values.Text = "Application Name:"; + // + // kryptonLabel1 + // + this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel1.Location = new System.Drawing.Point(13, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(69, 22); + this.kryptonLabel1.TabIndex = 0; + this.kryptonLabel1.Values.Text = "Assembly:"; + // + // kryptonManager1 + // + this.kryptonManager1.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + // + // bsaAssemblyBrowse + // + this.bsaAssemblyBrowse.Text = ".&.."; + this.bsaAssemblyBrowse.UniqueName = "8b78c231307c42499bad24c53a26eeb2"; + this.bsaAssemblyBrowse.Click += new System.EventHandler(this.bsaAssemblyBrowse_Click); + // + // bsaBrowseHeaderImage + // + this.bsaBrowseHeaderImage.Text = ".&.."; + this.bsaBrowseHeaderImage.UniqueName = "ba7f76ebadf64157adeab2b8fc7658f3"; + this.bsaBrowseHeaderImage.Click += new System.EventHandler(this.bsaBrowseHeaderImage_Click); + // + // bsaBrowseMainImage + // + this.bsaBrowseMainImage.Text = ".&.."; + this.bsaBrowseMainImage.UniqueName = "0773a389882641feb79629815f46d5e5"; + this.bsaBrowseMainImage.Click += new System.EventHandler(this.bsaBrowseMainImage_Click); + // + // AboutBoxTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 262); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonBorderEdge1); + this.Controls.Add(this.kryptonPanel1); + this.Name = "AboutBoxTest"; + this.Text = "AboutBoxTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.kryptonPanel2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonButton kryptonButton1; + private KryptonButton kbtnShow; + private KryptonPanel kryptonPanel2; + private KryptonManager kryptonManager1; + private KryptonLabel kryptonLabel1; + private KryptonLabel kryptonLabel2; + private KryptonLabel kryptonLabel4; + private KryptonLabel kryptonLabel3; + private KryptonCheckBox kchkShowToolkitInformation; + private KryptonCheckBox kchkUseFullBuiltOnDate; + private KryptonCheckBox kchkUseRtlLayout; + private KryptonTextBox kryptonTextBox4; + private KryptonTextBox kryptonTextBox3; + private KryptonTextBox kryptonTextBox2; + private KryptonTextBox kryptonTextBox1; + private ButtonSpecAny bsaAssemblyBrowse; + private ButtonSpecAny bsaBrowseHeaderImage; + private ButtonSpecAny bsaBrowseMainImage; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/AboutBoxTest.cs b/Source/Krypton Components/TestForm/AboutBoxTest.cs new file mode 100644 index 000000000..2be278e1e --- /dev/null +++ b/Source/Krypton Components/TestForm/AboutBoxTest.cs @@ -0,0 +1,78 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace TestForm +{ + public partial class AboutBoxTest : KryptonForm + { + public AboutBoxTest() + { + InitializeComponent(); + } + + private void kbtnShow_Click(object sender, EventArgs e) + { + KryptonAboutBoxData aboutBoxData = new KryptonAboutBoxData() + { + ApplicationName = kryptonTextBox2.Text, + CurrentAssembly = Assembly.LoadFile(kryptonTextBox1.Text), + HeaderImage = new Bitmap(kryptonTextBox3.Text), + MainImage = new Bitmap(kryptonTextBox4.Text), + ShowToolkitInformation = kchkShowToolkitInformation.Checked, + UseFullBuiltOnDate = kchkUseFullBuiltOnDate.Checked + }; + + KryptonAboutToolkitData aboutToolkitData = new KryptonAboutToolkitData(); + + KryptonAboutBox.Show(aboutBoxData, aboutToolkitData); + } + + private void bsaAssemblyBrowse_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + kryptonTextBox1.Text = Path.GetFullPath(openFileDialog.SafeFileName); + } + } + + private void bsaBrowseHeaderImage_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + kryptonTextBox3.Text = Path.GetFullPath(openFileDialog.SafeFileName); + } + } + + private void bsaBrowseMainImage_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog = new OpenFileDialog(); + + if (openFileDialog.ShowDialog() == DialogResult.OK) + { + kryptonTextBox4.Text = Path.GetFullPath(openFileDialog.SafeFileName); + } + } + } +} diff --git a/Source/Krypton Components/TestForm/AboutBoxTest.resx b/Source/Krypton Components/TestForm/AboutBoxTest.resx new file mode 100644 index 000000000..4ddd505e1 --- /dev/null +++ b/Source/Krypton Components/TestForm/AboutBoxTest.resx @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wAAADsABataJCQAAAGxJREFUOE/Fj9sKwCAMQ/30/bmuN+2ipX0QdiAobQyx3aIHKtMRmqlK6LOFzehk + R4I3u/sTaIcfIWRGohBdzn+rzgF2vp4JD5FllkC5W4NvE13mDTxbAGIBtEfJ3AWcVW8QUG8QcKFBrn9p + bQBhPWO90ciPIQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wAAADsABataJCQAAAExJREFUOE/NjQEKACAIA316Py8WDUQCU4k6iBl4U27SVxL7d/mjgJKeQ+iCFLyc + LgAVua3rMzNQRPIdYQUtuiW75fcFALMrk9ByBZEBKsI2V+Ba/FIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wAAADsABataJCQAAAF9JREFUOE/NyjEOACEQQtG5/6U1CDaLooXF/mQyBa9+VTvcsbYLmy4m7s0Nf8hN + A63C9rll4jk4ck8kB0fuieTgyD2RHBy5J5KDI/dEcnDknkgOjtwTycGRe3O8uVdVdfk5mHb5U4QzAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wAAADsABataJCQAAAF1JREFUOE/VjkEKwCAMBH26P08ZZENtxKrppQNLUHeC5TfYLds8JZ2PlonwG12s + bA1dMyPQPY4yxOXZpNfqES/NJr1Wj3hJk7uNIPZyre+RDCkZUjKkZNDDSr6mlAtbmO81DjxS+QAAAABJ + RU5ErkJggg== + + + + + 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 + QgjMFA+XAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wAAADsABataJCQAAAFVJREFUOE/dkEEKACEMA/t0n9afKaE0iKBYqxcHhoVtkoNyi3ooqaXYT1Vd6hl8 + UXRCA50kNOBZFJ1fBrrD1CFHeNgVHasa42Hp0UD6DZ4PAIYDZhFpCXFkDQRWNrcAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wAAADsABataJCQAAAEJJREFUOE9jGAV0AQ3/kXFDA4jGCtAlYJrQAU5DkDVgVYAE8BpASDMIEDSAkCFE + GYBVERDgDUj8AKKRTM3DFjAwAAAUADPhsvm7BwAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/BasicToastNotificationTest.Designer.cs b/Source/Krypton Components/TestForm/BasicToastNotificationTest.Designer.cs new file mode 100644 index 000000000..02717b3c0 --- /dev/null +++ b/Source/Krypton Components/TestForm/BasicToastNotificationTest.Designer.cs @@ -0,0 +1,543 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class BasicToastNotificationTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BasicToastNotificationTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnShow = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.kchkShowDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkUseRTL = new Krypton.Toolkit.KryptonCheckBox(); + this.kcbtnBorderColor2 = new Krypton.Toolkit.KryptonColorButton(); + this.kcbtnBorderColor1 = new Krypton.Toolkit.KryptonColorButton(); + this.kchkReportLocation = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox(); + this.klblStartLocationX = new Krypton.Toolkit.KryptonLabel(); + this.kchkSetDefaultLocation = new Krypton.Toolkit.KryptonCheckBox(); + this.klblStartLocation = new Krypton.Toolkit.KryptonLabel(); + this.knudStartLocationY = new Krypton.Toolkit.KryptonNumericUpDown(); + this.knudStartLocationX = new Krypton.Toolkit.KryptonNumericUpDown(); + this.klblStartLocationY = new Krypton.Toolkit.KryptonLabel(); + this.kchkShowProgressBar = new Krypton.Toolkit.KryptonCheckBox(); + this.kcmbToastTitleAlignment = new Krypton.Toolkit.KryptonComboBox(); + this.knudCountdownSeconds = new Krypton.Toolkit.KryptonNumericUpDown(); + this.kryptonLabel5 = new Krypton.Toolkit.KryptonLabel(); + this.kbtnTitleFont = new Krypton.Toolkit.KryptonButton(); + this.kbtnContentFont = new Krypton.Toolkit.KryptonButton(); + this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel(); + this.kchkShowCloseBox = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkTopMost = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkUseFade = new Krypton.Toolkit.KryptonCheckBox(); + this.ktxtCustomToastIconPath = new Krypton.Toolkit.KryptonTextBox(); + this.kcmbToastIcon = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel(); + this.ktxtToastContent = new Krypton.Toolkit.KryptonTextBox(); + this.ktxtToastTitle = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit(); + this.kryptonGroupBox1.Panel.SuspendLayout(); + this.kryptonGroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastTitleAlignment)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastIcon)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnShow); + this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 478); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(878, 50); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnShow + // + this.kbtnShow.Location = new System.Drawing.Point(776, 13); + this.kbtnShow.Name = "kbtnShow"; + this.kbtnShow.Size = new System.Drawing.Size(90, 25); + this.kbtnShow.TabIndex = 1; + this.kbtnShow.Values.Text = "Show"; + this.kbtnShow.Click += new System.EventHandler(this.kbtnShow_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(878, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.kchkShowDoNotShowAgain); + this.kryptonPanel2.Controls.Add(this.kchkUseRTL); + this.kryptonPanel2.Controls.Add(this.kcbtnBorderColor2); + this.kryptonPanel2.Controls.Add(this.kcbtnBorderColor1); + this.kryptonPanel2.Controls.Add(this.kchkReportLocation); + this.kryptonPanel2.Controls.Add(this.kryptonGroupBox1); + this.kryptonPanel2.Controls.Add(this.kchkShowProgressBar); + this.kryptonPanel2.Controls.Add(this.kcmbToastTitleAlignment); + this.kryptonPanel2.Controls.Add(this.knudCountdownSeconds); + this.kryptonPanel2.Controls.Add(this.kryptonLabel5); + this.kryptonPanel2.Controls.Add(this.kbtnTitleFont); + this.kryptonPanel2.Controls.Add(this.kbtnContentFont); + this.kryptonPanel2.Controls.Add(this.kryptonLabel4); + this.kryptonPanel2.Controls.Add(this.kchkShowCloseBox); + this.kryptonPanel2.Controls.Add(this.kchkTopMost); + this.kryptonPanel2.Controls.Add(this.kchkUseFade); + this.kryptonPanel2.Controls.Add(this.ktxtCustomToastIconPath); + this.kryptonPanel2.Controls.Add(this.kcmbToastIcon); + this.kryptonPanel2.Controls.Add(this.kryptonLabel3); + this.kryptonPanel2.Controls.Add(this.ktxtToastContent); + this.kryptonPanel2.Controls.Add(this.ktxtToastTitle); + this.kryptonPanel2.Controls.Add(this.kryptonLabel2); + this.kryptonPanel2.Controls.Add(this.kryptonLabel1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(878, 478); + this.kryptonPanel2.TabIndex = 1; + // + // kchkShowDoNotShowAgain + // + this.kchkShowDoNotShowAgain.Location = new System.Drawing.Point(503, 197); + this.kchkShowDoNotShowAgain.Name = "kchkShowDoNotShowAgain"; + this.kchkShowDoNotShowAgain.Size = new System.Drawing.Size(165, 20); + this.kchkShowDoNotShowAgain.TabIndex = 27; + this.kchkShowDoNotShowAgain.Values.Text = "Show Do Not Show Again"; + this.kchkShowDoNotShowAgain.CheckedChanged += new System.EventHandler(this.kchkShowDoNotShowAgain_CheckedChanged); + // + // kchkUseRTL + // + this.kchkUseRTL.Location = new System.Drawing.Point(201, 274); + this.kchkUseRTL.Name = "kchkUseRTL"; + this.kchkUseRTL.Size = new System.Drawing.Size(67, 20); + this.kchkUseRTL.TabIndex = 26; + this.kchkUseRTL.Values.Text = "Use RTL"; + this.kchkUseRTL.CheckedChanged += new System.EventHandler(this.kchkUseRTL_CheckedChanged); + // + // kcbtnBorderColor2 + // + this.kcbtnBorderColor2.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcbtnBorderColor2.Location = new System.Drawing.Point(537, 166); + this.kcbtnBorderColor2.Name = "kcbtnBorderColor2"; + this.kcbtnBorderColor2.Size = new System.Drawing.Size(166, 25); + this.kcbtnBorderColor2.TabIndex = 25; + this.kcbtnBorderColor2.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnBorderColor2.Values.Image"))); + this.kcbtnBorderColor2.Values.RoundedCorners = 8; + this.kcbtnBorderColor2.Values.Text = "Border Color 2"; + this.kcbtnBorderColor2.SelectedColorChanged += new System.EventHandler(this.kcbtnBorderColor2_SelectedColorChanged); + // + // kcbtnBorderColor1 + // + this.kcbtnBorderColor1.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcbtnBorderColor1.Location = new System.Drawing.Point(365, 166); + this.kcbtnBorderColor1.Name = "kcbtnBorderColor1"; + this.kcbtnBorderColor1.Size = new System.Drawing.Size(166, 25); + this.kcbtnBorderColor1.TabIndex = 24; + this.kcbtnBorderColor1.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnBorderColor1.Values.Image"))); + this.kcbtnBorderColor1.Values.RoundedCorners = 8; + this.kcbtnBorderColor1.Values.Text = "Border Color 1"; + this.kcbtnBorderColor1.SelectedColorChanged += new System.EventHandler(this.kcbtnBorderColor1_SelectedColorChanged); + // + // kchkReportLocation + // + this.kchkReportLocation.Location = new System.Drawing.Point(187, 248); + this.kchkReportLocation.Name = "kchkReportLocation"; + this.kchkReportLocation.Size = new System.Drawing.Size(110, 20); + this.kchkReportLocation.TabIndex = 23; + this.kchkReportLocation.Values.Text = "Report Location"; + this.kchkReportLocation.CheckedChanged += new System.EventHandler(this.kchkReportLocation_CheckedChanged); + // + // kryptonGroupBox1 + // + this.kryptonGroupBox1.Location = new System.Drawing.Point(365, 13); + this.kryptonGroupBox1.Name = "kryptonGroupBox1"; + // + // kryptonGroupBox1.Panel + // + this.kryptonGroupBox1.Panel.Controls.Add(this.klblStartLocationX); + this.kryptonGroupBox1.Panel.Controls.Add(this.kchkSetDefaultLocation); + this.kryptonGroupBox1.Panel.Controls.Add(this.klblStartLocation); + this.kryptonGroupBox1.Panel.Controls.Add(this.knudStartLocationY); + this.kryptonGroupBox1.Panel.Controls.Add(this.knudStartLocationX); + this.kryptonGroupBox1.Panel.Controls.Add(this.klblStartLocationY); + this.kryptonGroupBox1.Size = new System.Drawing.Size(443, 146); + this.kryptonGroupBox1.TabIndex = 22; + // + // klblStartLocationX + // + this.klblStartLocationX.Enabled = false; + this.klblStartLocationX.Location = new System.Drawing.Point(12, 73); + this.klblStartLocationX.Name = "klblStartLocationX"; + this.klblStartLocationX.Size = new System.Drawing.Size(20, 20); + this.klblStartLocationX.TabIndex = 23; + this.klblStartLocationX.Values.Text = "X:"; + // + // kchkSetDefaultLocation + // + this.kchkSetDefaultLocation.Location = new System.Drawing.Point(12, 11); + this.kchkSetDefaultLocation.Name = "kchkSetDefaultLocation"; + this.kchkSetDefaultLocation.Size = new System.Drawing.Size(133, 20); + this.kchkSetDefaultLocation.TabIndex = 22; + this.kchkSetDefaultLocation.Values.Text = "Set Default Location"; + // + // klblStartLocation + // + this.klblStartLocation.Enabled = false; + this.klblStartLocation.Location = new System.Drawing.Point(12, 47); + this.klblStartLocation.Name = "klblStartLocation"; + this.klblStartLocation.Size = new System.Drawing.Size(89, 20); + this.klblStartLocation.TabIndex = 18; + this.klblStartLocation.Values.Text = "Start Location:"; + // + // knudStartLocationY + // + this.knudStartLocationY.Enabled = false; + this.knudStartLocationY.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudStartLocationY.Location = new System.Drawing.Point(193, 73); + this.knudStartLocationY.Maximum = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.knudStartLocationY.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.knudStartLocationY.Name = "knudStartLocationY"; + this.knudStartLocationY.Size = new System.Drawing.Size(120, 22); + this.knudStartLocationY.TabIndex = 21; + this.knudStartLocationY.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + // + // knudStartLocationX + // + this.knudStartLocationX.Enabled = false; + this.knudStartLocationX.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudStartLocationX.Location = new System.Drawing.Point(38, 73); + this.knudStartLocationX.Maximum = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.knudStartLocationX.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.knudStartLocationX.Name = "knudStartLocationX"; + this.knudStartLocationX.Size = new System.Drawing.Size(120, 22); + this.knudStartLocationX.TabIndex = 19; + this.knudStartLocationX.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + // + // klblStartLocationY + // + this.klblStartLocationY.Enabled = false; + this.klblStartLocationY.Location = new System.Drawing.Point(164, 73); + this.klblStartLocationY.Name = "klblStartLocationY"; + this.klblStartLocationY.Size = new System.Drawing.Size(23, 20); + this.klblStartLocationY.TabIndex = 20; + this.klblStartLocationY.Values.Text = " Y:"; + // + // kchkShowProgressBar + // + this.kchkShowProgressBar.Location = new System.Drawing.Point(187, 221); + this.kchkShowProgressBar.Name = "kchkShowProgressBar"; + this.kchkShowProgressBar.Size = new System.Drawing.Size(125, 20); + this.kchkShowProgressBar.TabIndex = 17; + this.kchkShowProgressBar.Values.Text = "Show Progress Bar"; + // + // kcmbToastTitleAlignment + // + this.kcmbToastTitleAlignment.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbToastTitleAlignment.DropDownWidth = 274; + this.kcmbToastTitleAlignment.IntegralHeight = false; + this.kcmbToastTitleAlignment.Location = new System.Drawing.Point(173, 298); + this.kcmbToastTitleAlignment.Name = "kcmbToastTitleAlignment"; + this.kcmbToastTitleAlignment.Size = new System.Drawing.Size(274, 21); + this.kcmbToastTitleAlignment.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbToastTitleAlignment.TabIndex = 16; + this.kcmbToastTitleAlignment.SelectedIndexChanged += new System.EventHandler(this.kcmbToastTitleAlignment_SelectedIndexChanged); + // + // knudCountdownSeconds + // + this.knudCountdownSeconds.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudCountdownSeconds.Location = new System.Drawing.Point(192, 366); + this.knudCountdownSeconds.Maximum = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.knudCountdownSeconds.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.knudCountdownSeconds.Name = "knudCountdownSeconds"; + this.knudCountdownSeconds.Size = new System.Drawing.Size(120, 22); + this.knudCountdownSeconds.TabIndex = 15; + this.knudCountdownSeconds.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.knudCountdownSeconds.ValueChanged += new System.EventHandler(this.knudCountdownSeconds_ValueChanged); + // + // kryptonLabel5 + // + this.kryptonLabel5.Location = new System.Drawing.Point(13, 366); + this.kryptonLabel5.Name = "kryptonLabel5"; + this.kryptonLabel5.Size = new System.Drawing.Size(126, 20); + this.kryptonLabel5.TabIndex = 14; + this.kryptonLabel5.Values.Text = "Countdown Seconds:"; + // + // kbtnTitleFont + // + this.kbtnTitleFont.AutoSize = true; + this.kbtnTitleFont.Location = new System.Drawing.Point(208, 335); + this.kbtnTitleFont.Name = "kbtnTitleFont"; + this.kbtnTitleFont.Size = new System.Drawing.Size(117, 25); + this.kbtnTitleFont.TabIndex = 13; + this.kbtnTitleFont.Values.Text = "Title Font"; + this.kbtnTitleFont.Click += new System.EventHandler(this.kbtnTitleFont_Click); + // + // kbtnContentFont + // + this.kbtnContentFont.AutoSize = true; + this.kbtnContentFont.Location = new System.Drawing.Point(85, 335); + this.kbtnContentFont.Name = "kbtnContentFont"; + this.kbtnContentFont.Size = new System.Drawing.Size(117, 25); + this.kbtnContentFont.TabIndex = 12; + this.kbtnContentFont.Values.Text = "Content Font"; + this.kbtnContentFont.Click += new System.EventHandler(this.kbtnContentFont_Click); + // + // kryptonLabel4 + // + this.kryptonLabel4.Location = new System.Drawing.Point(13, 298); + this.kryptonLabel4.Name = "kryptonLabel4"; + this.kryptonLabel4.Size = new System.Drawing.Size(96, 20); + this.kryptonLabel4.TabIndex = 10; + this.kryptonLabel4.Values.Text = "Title Alignment:"; + // + // kchkShowCloseBox + // + this.kchkShowCloseBox.Location = new System.Drawing.Point(85, 273); + this.kchkShowCloseBox.Name = "kchkShowCloseBox"; + this.kchkShowCloseBox.Size = new System.Drawing.Size(110, 20); + this.kchkShowCloseBox.TabIndex = 9; + this.kchkShowCloseBox.Values.Text = "Show Close Box"; + this.kchkShowCloseBox.CheckedChanged += new System.EventHandler(this.kchkShowCloseBox_CheckedChanged); + // + // kchkTopMost + // + this.kchkTopMost.Checked = true; + this.kchkTopMost.CheckState = System.Windows.Forms.CheckState.Checked; + this.kchkTopMost.Location = new System.Drawing.Point(85, 247); + this.kchkTopMost.Name = "kchkTopMost"; + this.kchkTopMost.Size = new System.Drawing.Size(76, 20); + this.kchkTopMost.TabIndex = 8; + this.kchkTopMost.Values.Text = "Top Most"; + // + // kchkUseFade + // + this.kchkUseFade.Location = new System.Drawing.Point(85, 221); + this.kchkUseFade.Name = "kchkUseFade"; + this.kchkUseFade.Size = new System.Drawing.Size(73, 20); + this.kchkUseFade.TabIndex = 7; + this.kchkUseFade.Values.Text = "Use Fade"; + this.kchkUseFade.CheckedChanged += new System.EventHandler(this.kchkUseFade_CheckedChanged); + // + // ktxtCustomToastIconPath + // + this.ktxtCustomToastIconPath.Enabled = false; + this.ktxtCustomToastIconPath.Location = new System.Drawing.Point(85, 191); + this.ktxtCustomToastIconPath.Name = "ktxtCustomToastIconPath"; + this.ktxtCustomToastIconPath.ShowEllipsisButton = true; + this.ktxtCustomToastIconPath.Size = new System.Drawing.Size(274, 24); + this.ktxtCustomToastIconPath.TabIndex = 6; + // + // kcmbToastIcon + // + this.kcmbToastIcon.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbToastIcon.DropDownWidth = 274; + this.kcmbToastIcon.IntegralHeight = false; + this.kcmbToastIcon.Location = new System.Drawing.Point(85, 165); + this.kcmbToastIcon.Name = "kcmbToastIcon"; + this.kcmbToastIcon.Size = new System.Drawing.Size(274, 21); + this.kcmbToastIcon.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbToastIcon.TabIndex = 5; + this.kcmbToastIcon.SelectedIndexChanged += new System.EventHandler(this.kcmbToastIcon_SelectedIndexChanged); + // + // kryptonLabel3 + // + this.kryptonLabel3.Location = new System.Drawing.Point(13, 165); + this.kryptonLabel3.Name = "kryptonLabel3"; + this.kryptonLabel3.Size = new System.Drawing.Size(36, 20); + this.kryptonLabel3.TabIndex = 4; + this.kryptonLabel3.Values.Text = "Icon:"; + // + // ktxtToastContent + // + this.ktxtToastContent.Location = new System.Drawing.Point(85, 41); + this.ktxtToastContent.Multiline = true; + this.ktxtToastContent.Name = "ktxtToastContent"; + this.ktxtToastContent.Size = new System.Drawing.Size(274, 118); + this.ktxtToastContent.TabIndex = 3; + this.ktxtToastContent.Text = "Put your message here..."; + this.ktxtToastContent.TextChanged += new System.EventHandler(this.ktxtToastContent_TextChanged); + // + // ktxtToastTitle + // + this.ktxtToastTitle.Location = new System.Drawing.Point(85, 13); + this.ktxtToastTitle.Name = "ktxtToastTitle"; + this.ktxtToastTitle.Size = new System.Drawing.Size(274, 23); + this.ktxtToastTitle.TabIndex = 2; + this.ktxtToastTitle.Text = "This is a test"; + this.ktxtToastTitle.TextChanged += new System.EventHandler(this.ktxtToastTitle_TextChanged); + // + // kryptonLabel2 + // + this.kryptonLabel2.Location = new System.Drawing.Point(13, 39); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(36, 20); + this.kryptonLabel2.TabIndex = 1; + this.kryptonLabel2.Values.Text = "Text:"; + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(13, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(36, 20); + this.kryptonLabel1.TabIndex = 0; + this.kryptonLabel1.Values.Text = "Title:"; + // + // BasicToastNotificationTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(878, 528); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonPanel1); + this.Name = "BasicToastNotificationTest"; + this.Text = "ToastNotificationTest"; + this.Load += new System.EventHandler(this.ToastNotificationTest_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.kryptonPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit(); + this.kryptonGroupBox1.Panel.ResumeLayout(false); + this.kryptonGroupBox1.Panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit(); + this.kryptonGroupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastTitleAlignment)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonBorderEdge kryptonBorderEdge1; + private Krypton.Toolkit.KryptonPanel kryptonPanel2; + private Krypton.Toolkit.KryptonButton kbtnShow; + private Krypton.Toolkit.KryptonCheckBox kchkUseFade; + private Krypton.Toolkit.KryptonTextBox ktxtCustomToastIconPath; + private Krypton.Toolkit.KryptonComboBox kcmbToastIcon; + private Krypton.Toolkit.KryptonLabel kryptonLabel3; + private Krypton.Toolkit.KryptonTextBox ktxtToastContent; + private Krypton.Toolkit.KryptonTextBox ktxtToastTitle; + private Krypton.Toolkit.KryptonLabel kryptonLabel2; + private Krypton.Toolkit.KryptonLabel kryptonLabel1; + private Krypton.Toolkit.KryptonButton kbtnTitleFont; + private Krypton.Toolkit.KryptonButton kbtnContentFont; + private Krypton.Toolkit.KryptonLabel kryptonLabel4; + private Krypton.Toolkit.KryptonCheckBox kchkShowCloseBox; + private Krypton.Toolkit.KryptonCheckBox kchkTopMost; + private Krypton.Toolkit.KryptonComboBox kcmbToastTitleAlignment; + private Krypton.Toolkit.KryptonNumericUpDown knudCountdownSeconds; + private Krypton.Toolkit.KryptonLabel kryptonLabel5; + private Krypton.Toolkit.KryptonCheckBox kchkShowProgressBar; + private Krypton.Toolkit.KryptonLabel klblStartLocation; + private Krypton.Toolkit.KryptonLabel klblStartLocationY; + private Krypton.Toolkit.KryptonNumericUpDown knudStartLocationX; + private Krypton.Toolkit.KryptonNumericUpDown knudStartLocationY; + private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox1; + private Krypton.Toolkit.KryptonCheckBox kchkSetDefaultLocation; + private Krypton.Toolkit.KryptonLabel klblStartLocationX; + private Krypton.Toolkit.KryptonCheckBox kchkReportLocation; + private Krypton.Toolkit.KryptonColorButton kcbtnBorderColor1; + private Krypton.Toolkit.KryptonColorButton kcbtnBorderColor2; + private Krypton.Toolkit.KryptonCheckBox kchkUseRTL; + private Krypton.Toolkit.KryptonCheckBox kchkShowDoNotShowAgain; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/BasicToastNotificationTest.cs b/Source/Krypton Components/TestForm/BasicToastNotificationTest.cs new file mode 100644 index 000000000..2c18add0e --- /dev/null +++ b/Source/Krypton Components/TestForm/BasicToastNotificationTest.cs @@ -0,0 +1,211 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class BasicToastNotificationTest : KryptonForm + { + #region Instance Fields + + private bool _showCloseBox; + private bool _topMost; + private bool _useFade; + private bool _reportToastLocation; + private bool _showDoNotShowAgainOption; + private bool _useRtlReading; + private Color _borderColor1; + private Color _borderColor2; + private ContentAlignment _titleAlignment; + private Font _contentFont; + private Font? _titleFont; + private int _countDownSeconds; + private KryptonToastNotificationIcon? _notificationIcon; + private string _notificationTitleText; + private string _notificationContentText; + + #endregion + + public BasicToastNotificationTest() + { + InitializeComponent(); + } + + private void kbtnShow_Click(object sender, EventArgs e) + { + var notificationData = new KryptonBasicToastNotificationData() + { + CountDownSeconds = _countDownSeconds, + CustomImage = null, + NotificationContent = _notificationContentText, + NotificationTitle = _notificationTitleText, + NotificationContentFont = _contentFont, + NotificationTitleFont = _titleFont, + NotificationIcon = _notificationIcon, + NotificationLocation = null, + ShowDoNotShowAgainOption = _showDoNotShowAgainOption, + NotificationTitleAlignment = _titleAlignment, + TopMost = _topMost, + UseFade = _useFade, + ShowCloseBox = _showCloseBox, + ReportToastLocation = _reportToastLocation, + BorderColor1 = _borderColor1, + BorderColor2 = _borderColor2, + UseRtlReading = _useRtlReading + }; + + var notificationDataWithLocation = new KryptonBasicToastNotificationData() + { + CountDownSeconds = _countDownSeconds, + CustomImage = null, + NotificationContent = _notificationContentText, + NotificationTitle = _notificationTitleText, + NotificationContentFont = _contentFont, + NotificationTitleFont = _titleFont, + NotificationIcon = _notificationIcon, + NotificationLocation = new Point((int)knudStartLocationX.Value, (int)knudStartLocationY.Value), + NotificationTitleAlignment = _titleAlignment, + TopMost = _topMost, + UseFade = _useFade, + ShowCloseBox = _showCloseBox + }; + + if (kchkShowProgressBar.Checked) + { + KryptonToastNotification.ShowBasicProgressBarNotification(notificationData); + } + else + { + KryptonToastNotification.ShowBasicNotification(notificationData); + } + } + + private void ToastNotificationTest_Load(object sender, EventArgs e) + { + // Set defaults + _showCloseBox = false; + _topMost = true; + _useFade = false; + _reportToastLocation = false; + _showDoNotShowAgainOption = false; + _titleAlignment = ContentAlignment.MiddleCenter; + _countDownSeconds = 60; + _notificationIcon = KryptonToastNotificationIcon.Information; + _notificationTitleText = ktxtToastTitle.Text; + _notificationContentText = ktxtToastContent.Text; + _borderColor1 = Color.Empty; + _borderColor2 = Color.Empty; + _useRtlReading = false; + + kcbtnBorderColor1.SelectedColor = Color.Empty; + kcbtnBorderColor2.SelectedColor = Color.Empty; + + foreach (var value in Enum.GetValues(typeof(KryptonToastNotificationIcon))) + { + kcmbToastIcon.Items.Add(value!.ToString()); + } + + kcmbToastIcon.SelectedIndex = 8; + + foreach (var value in Enum.GetValues(typeof(ContentAlignment))) + { + kcmbToastTitleAlignment.Items.Add(value!.ToString()); + } + + kcmbToastTitleAlignment.SelectedIndex = 4; + + knudStartLocationX.Maximum = GraphicsExtensions.GetWorkingArea().Width; + + knudStartLocationX.Value = GraphicsExtensions.GetWorkingArea().Width - Width - 5; + + knudStartLocationY.Maximum = GraphicsExtensions.GetWorkingArea().Height; + + knudStartLocationY.Value = GraphicsExtensions.GetWorkingArea().Height - Height - 5; + } + + private void kbtnContentFont_Click(object sender, EventArgs e) + { + var contentFontDialog = new KryptonFontDialog(); + + if (contentFontDialog.ShowDialog() == DialogResult.OK) + { + _contentFont = contentFontDialog.Font; + } + } + + private void kbtnTitleFont_Click(object sender, EventArgs e) + { + KryptonFontDialog titleFontDialog = new KryptonFontDialog(); + + if (titleFontDialog.ShowDialog() == DialogResult.OK) + { + _titleFont = titleFontDialog.Font; + } + } + + private void ktxtToastTitle_TextChanged(object sender, EventArgs e) + { + _notificationTitleText = ktxtToastTitle.Text; + } + + private void ktxtToastContent_TextChanged(object sender, EventArgs e) + { + _notificationContentText = $"{ktxtToastContent.Text}\n\nLocation:"; + } + + private void kcmbToastIcon_SelectedIndexChanged(object sender, EventArgs e) + { + _notificationIcon = (KryptonToastNotificationIcon)Enum.Parse(typeof(KryptonToastNotificationIcon), kcmbToastIcon.Text); + } + + private void kcmbToastTitleAlignment_SelectedIndexChanged(object sender, EventArgs e) + { + _titleAlignment = (ContentAlignment)Enum.Parse(typeof(ContentAlignment), kcmbToastTitleAlignment.Text); + } + + private void knudCountdownSeconds_ValueChanged(object sender, EventArgs e) + { + _countDownSeconds = (int)knudCountdownSeconds.Value; + } + + private void kchkReportLocation_CheckedChanged(object sender, EventArgs e) + { + _reportToastLocation = kchkReportLocation.Checked; + } + + private void kchkShowCloseBox_CheckedChanged(object sender, EventArgs e) + { + _showCloseBox = kchkShowCloseBox.Checked; + } + + private void kchkUseFade_CheckedChanged(object sender, EventArgs e) + { + _useFade = kchkUseFade.Checked; + } + + private void kcbtnBorderColor1_SelectedColorChanged(object sender, ColorEventArgs e) + { + _borderColor1 = e.Color; + } + + private void kcbtnBorderColor2_SelectedColorChanged(object sender, ColorEventArgs e) + { + _borderColor2 = e.Color; + } + + private void kchkUseRTL_CheckedChanged(object sender, EventArgs e) + { + _useRtlReading = kchkUseRTL.Checked; + } + + private void kchkShowDoNotShowAgain_CheckedChanged(object sender, EventArgs e) + { + _showDoNotShowAgainOption = kchkShowDoNotShowAgain.Checked; + } + } +} diff --git a/Source/Krypton Components/TestForm/BasicToastNotificationTest.resx b/Source/Krypton Components/TestForm/BasicToastNotificationTest.resx new file mode 100644 index 000000000..85104d505 --- /dev/null +++ b/Source/Krypton Components/TestForm/BasicToastNotificationTest.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form2.Designer.cs b/Source/Krypton Components/TestForm/BreadCrumbTest.Designer.cs similarity index 63% rename from Source/Krypton Components/TestForm/Form2.Designer.cs rename to Source/Krypton Components/TestForm/BreadCrumbTest.Designer.cs index 614555fa1..1ba3ea13d 100644 --- a/Source/Krypton Components/TestForm/Form2.Designer.cs +++ b/Source/Krypton Components/TestForm/BreadCrumbTest.Designer.cs @@ -1,6 +1,15 @@ -namespace TestForm +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm { - partial class Form2 + partial class BreadCrumbTest { /// /// Required designer variable. @@ -29,6 +38,9 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonNavigator1 = new Krypton.Navigator.KryptonNavigator(); + this.kryptonPage1 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage2 = new Krypton.Navigator.KryptonPage(); this.kryptonSplitContainer1 = new Krypton.Toolkit.KryptonSplitContainer(); this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); this.kryptonBreadCrumb1 = new Krypton.Toolkit.KryptonBreadCrumb(); @@ -38,6 +50,10 @@ private void InitializeComponent() this.kryptonBreadCrumbItem4 = new Krypton.Toolkit.KryptonBreadCrumbItem(); ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator1)).BeginInit(); + this.kryptonNavigator1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainer1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainer1.Panel1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainer1.Panel2)).BeginInit(); @@ -47,15 +63,56 @@ private void InitializeComponent() // // kryptonPanel1 // + this.kryptonPanel1.Controls.Add(this.kryptonNavigator1); this.kryptonPanel1.Controls.Add(this.kryptonSplitContainer1); this.kryptonPanel1.Controls.Add(this.kryptonButton1); this.kryptonPanel1.Controls.Add(this.kryptonBreadCrumb1); this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.Size = new System.Drawing.Size(1096, 624); + this.kryptonPanel1.Size = new System.Drawing.Size(1102, 630); this.kryptonPanel1.TabIndex = 0; // + // kryptonNavigator1 + // + this.kryptonNavigator1.ControlKryptonFormFeatures = false; + this.kryptonNavigator1.Location = new System.Drawing.Point(426, 13); + this.kryptonNavigator1.Name = "kryptonNavigator1"; + this.kryptonNavigator1.NavigatorMode = Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonNavigator1.Owner = null; + this.kryptonNavigator1.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.kryptonNavigator1.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.kryptonPage1, + this.kryptonPage2}); + this.kryptonNavigator1.SelectedIndex = 0; + this.kryptonNavigator1.Size = new System.Drawing.Size(658, 265); + this.kryptonNavigator1.TabIndex = 3; + this.kryptonNavigator1.Text = "kryptonNavigator1"; + // + // kryptonPage1 + // + this.kryptonPage1.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage1.Flags = 65534; + this.kryptonPage1.LastVisibleSet = true; + this.kryptonPage1.MinimumSize = new System.Drawing.Size(150, 50); + this.kryptonPage1.Name = "kryptonPage1"; + this.kryptonPage1.Size = new System.Drawing.Size(656, 239); + this.kryptonPage1.Text = "kryptonPage1"; + this.kryptonPage1.ToolTipTitle = "Page ToolTip"; + this.kryptonPage1.UniqueName = "e1a692ea0e18480aa2ed26f6e2ee01ff"; + // + // kryptonPage2 + // + this.kryptonPage2.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage2.Flags = 65534; + this.kryptonPage2.LastVisibleSet = true; + this.kryptonPage2.MinimumSize = new System.Drawing.Size(150, 50); + this.kryptonPage2.Name = "kryptonPage2"; + this.kryptonPage2.Size = new System.Drawing.Size(150, 100); + this.kryptonPage2.Text = "kryptonPage2"; + this.kryptonPage2.ToolTipTitle = "Page ToolTip"; + this.kryptonPage2.UniqueName = "c71fb1fbd12b4734b8303a9182540eca"; + // // kryptonSplitContainer1 // this.kryptonSplitContainer1.Cursor = System.Windows.Forms.Cursors.Default; @@ -108,16 +165,20 @@ private void InitializeComponent() // this.kryptonBreadCrumbItem4.ShortText = "ListItem"; // - // Form2 + // BreadCrumbTest // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1096, 624); + this.ClientSize = new System.Drawing.Size(1102, 630); this.Controls.Add(this.kryptonPanel1); - this.Name = "Form2"; + this.Name = "BreadCrumbTest"; this.Text = "Form2"; ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator1)).EndInit(); + this.kryptonNavigator1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainer1.Panel1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainer1.Panel2)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.kryptonSplitContainer1)).EndInit(); @@ -137,5 +198,8 @@ private void InitializeComponent() private Krypton.Toolkit.KryptonBreadCrumb kryptonBreadCrumb1; private Krypton.Toolkit.KryptonButton kryptonButton1; private Krypton.Toolkit.KryptonSplitContainer kryptonSplitContainer1; + private Krypton.Navigator.KryptonNavigator kryptonNavigator1; + private Krypton.Navigator.KryptonPage kryptonPage1; + private Krypton.Navigator.KryptonPage kryptonPage2; } } \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/BreadCrumbTest.cs b/Source/Krypton Components/TestForm/BreadCrumbTest.cs new file mode 100644 index 000000000..76e89137a --- /dev/null +++ b/Source/Krypton Components/TestForm/BreadCrumbTest.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class BreadCrumbTest : KryptonForm + { + public BreadCrumbTest() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/BreadCrumbTest.resx b/Source/Krypton Components/TestForm/BreadCrumbTest.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/BreadCrumbTest.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Bug833Test.Designer.cs b/Source/Krypton Components/TestForm/Bug833Test.Designer.cs new file mode 100644 index 000000000..542f9d2f0 --- /dev/null +++ b/Source/Krypton Components/TestForm/Bug833Test.Designer.cs @@ -0,0 +1,381 @@ +namespace TestForm +{ + partial class Bug833Test + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLinkLabel2 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonLinkLabel1 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonRadioButton2 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonRadioButton1 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonCheckBox2 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonCheckBox1 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonGroupBox2 = new Krypton.Toolkit.KryptonGroupBox(); + this.kryptonNavigator1 = new Krypton.Navigator.KryptonNavigator(); + this.kryptonPage1 = new Krypton.Navigator.KryptonPage(); + this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLinkLabel3 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonLinkLabel4 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonRadioButton3 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonRadioButton4 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonCheckBox3 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonCheckBox4 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit(); + this.kryptonGroupBox1.Panel.SuspendLayout(); + this.kryptonGroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit(); + this.kryptonGroupBox2.Panel.SuspendLayout(); + this.kryptonGroupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator1)).BeginInit(); + this.kryptonNavigator1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).BeginInit(); + this.kryptonPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonThemeComboBox1.DropDownWidth = 378; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(13, 13); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(378, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 0; + // + // kryptonGroupBox1 + // + this.kryptonGroupBox1.Location = new System.Drawing.Point(13, 42); + this.kryptonGroupBox1.Name = "kryptonGroupBox1"; + // + // kryptonGroupBox1.Panel + // + this.kryptonGroupBox1.Panel.Controls.Add(this.kryptonPanel1); + this.kryptonGroupBox1.Size = new System.Drawing.Size(378, 382); + this.kryptonGroupBox1.TabIndex = 1; + this.kryptonGroupBox1.Values.Heading = "Controls in a Panel"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonLabel2); + this.kryptonPanel1.Controls.Add(this.kryptonLabel1); + this.kryptonPanel1.Controls.Add(this.kryptonLinkLabel2); + this.kryptonPanel1.Controls.Add(this.kryptonLinkLabel1); + this.kryptonPanel1.Controls.Add(this.kryptonRadioButton2); + this.kryptonPanel1.Controls.Add(this.kryptonRadioButton1); + this.kryptonPanel1.Controls.Add(this.kryptonCheckBox2); + this.kryptonPanel1.Controls.Add(this.kryptonCheckBox1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(374, 358); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonLabel2 + // + this.kryptonLabel2.Enabled = false; + this.kryptonLabel2.Location = new System.Drawing.Point(111, 99); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(90, 20); + this.kryptonLabel2.TabIndex = 49; + this.kryptonLabel2.Values.Text = "Label Disabled"; + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(14, 99); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(86, 20); + this.kryptonLabel1.TabIndex = 48; + this.kryptonLabel1.Values.Text = "Label Enabled"; + // + // kryptonLinkLabel2 + // + this.kryptonLinkLabel2.Enabled = false; + this.kryptonLinkLabel2.Location = new System.Drawing.Point(99, 73); + this.kryptonLinkLabel2.Name = "kryptonLinkLabel2"; + this.kryptonLinkLabel2.Size = new System.Drawing.Size(83, 20); + this.kryptonLinkLabel2.TabIndex = 47; + this.kryptonLinkLabel2.Values.Text = "Link Disabled"; + // + // kryptonLinkLabel1 + // + this.kryptonLinkLabel1.Location = new System.Drawing.Point(14, 73); + this.kryptonLinkLabel1.Name = "kryptonLinkLabel1"; + this.kryptonLinkLabel1.Size = new System.Drawing.Size(79, 20); + this.kryptonLinkLabel1.TabIndex = 46; + this.kryptonLinkLabel1.Values.Text = "Link Enabled"; + // + // kryptonRadioButton2 + // + this.kryptonRadioButton2.Enabled = false; + this.kryptonRadioButton2.Location = new System.Drawing.Point(89, 45); + this.kryptonRadioButton2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonRadioButton2.Name = "kryptonRadioButton2"; + this.kryptonRadioButton2.Size = new System.Drawing.Size(70, 20); + this.kryptonRadioButton2.TabIndex = 45; + this.kryptonRadioButton2.Values.Text = "Disabled"; + // + // kryptonRadioButton1 + // + this.kryptonRadioButton1.Location = new System.Drawing.Point(14, 45); + this.kryptonRadioButton1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonRadioButton1.Name = "kryptonRadioButton1"; + this.kryptonRadioButton1.Size = new System.Drawing.Size(66, 20); + this.kryptonRadioButton1.TabIndex = 44; + this.kryptonRadioButton1.Values.Text = "Enabled"; + // + // kryptonCheckBox2 + // + this.kryptonCheckBox2.Enabled = false; + this.kryptonCheckBox2.Location = new System.Drawing.Point(89, 13); + this.kryptonCheckBox2.Name = "kryptonCheckBox2"; + this.kryptonCheckBox2.Size = new System.Drawing.Size(71, 20); + this.kryptonCheckBox2.TabIndex = 43; + this.kryptonCheckBox2.Values.Text = "Disabled"; + // + // kryptonCheckBox1 + // + this.kryptonCheckBox1.Location = new System.Drawing.Point(15, 14); + this.kryptonCheckBox1.Name = "kryptonCheckBox1"; + this.kryptonCheckBox1.Size = new System.Drawing.Size(67, 20); + this.kryptonCheckBox1.TabIndex = 42; + this.kryptonCheckBox1.Values.Text = "Enabled"; + // + // kryptonGroupBox2 + // + this.kryptonGroupBox2.Location = new System.Drawing.Point(395, 42); + this.kryptonGroupBox2.Name = "kryptonGroupBox2"; + // + // kryptonGroupBox2.Panel + // + this.kryptonGroupBox2.Panel.Controls.Add(this.kryptonNavigator1); + this.kryptonGroupBox2.Size = new System.Drawing.Size(378, 382); + this.kryptonGroupBox2.TabIndex = 2; + this.kryptonGroupBox2.Values.Heading = "Controls in a Navigator"; + // + // kryptonNavigator1 + // + this.kryptonNavigator1.Button.ButtonDisplayLogic = Krypton.Navigator.ButtonDisplayLogic.None; + this.kryptonNavigator1.Button.CloseButtonAction = Krypton.Navigator.CloseButtonAction.None; + this.kryptonNavigator1.Button.CloseButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonNavigator1.Button.ContextButtonAction = Krypton.Navigator.ContextButtonAction.SelectPage; + this.kryptonNavigator1.Button.ContextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonNavigator1.Button.ContextMenuMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonNavigator1.Button.ContextMenuMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonNavigator1.Button.NextButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonNavigator1.Button.NextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonNavigator1.Button.PreviousButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonNavigator1.Button.PreviousButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonNavigator1.ControlKryptonFormFeatures = false; + this.kryptonNavigator1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonNavigator1.Location = new System.Drawing.Point(0, 0); + this.kryptonNavigator1.Name = "kryptonNavigator1"; + this.kryptonNavigator1.NavigatorMode = Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonNavigator1.Owner = null; + this.kryptonNavigator1.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.kryptonNavigator1.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.kryptonPage1}); + this.kryptonNavigator1.SelectedIndex = 0; + this.kryptonNavigator1.Size = new System.Drawing.Size(374, 358); + this.kryptonNavigator1.TabIndex = 0; + this.kryptonNavigator1.Text = "kryptonNavigator1"; + // + // kryptonPage1 + // + this.kryptonPage1.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage1.Controls.Add(this.kryptonLabel3); + this.kryptonPage1.Controls.Add(this.kryptonLabel4); + this.kryptonPage1.Controls.Add(this.kryptonLinkLabel3); + this.kryptonPage1.Controls.Add(this.kryptonLinkLabel4); + this.kryptonPage1.Controls.Add(this.kryptonRadioButton3); + this.kryptonPage1.Controls.Add(this.kryptonRadioButton4); + this.kryptonPage1.Controls.Add(this.kryptonCheckBox3); + this.kryptonPage1.Controls.Add(this.kryptonCheckBox4); + this.kryptonPage1.Flags = 65534; + this.kryptonPage1.LastVisibleSet = true; + this.kryptonPage1.MinimumSize = new System.Drawing.Size(150, 50); + this.kryptonPage1.Name = "kryptonPage1"; + this.kryptonPage1.Size = new System.Drawing.Size(372, 331); + this.kryptonPage1.Text = "kryptonPage1"; + this.kryptonPage1.ToolTipTitle = "Page ToolTip"; + this.kryptonPage1.UniqueName = "8f3032b1b7a343c0a10dc553a5bc6aa7"; + // + // kryptonLabel3 + // + this.kryptonLabel3.Enabled = false; + this.kryptonLabel3.Location = new System.Drawing.Point(112, 106); + this.kryptonLabel3.Name = "kryptonLabel3"; + this.kryptonLabel3.Size = new System.Drawing.Size(90, 20); + this.kryptonLabel3.TabIndex = 51; + this.kryptonLabel3.Values.Text = "Label Disabled"; + // + // kryptonLabel4 + // + this.kryptonLabel4.Location = new System.Drawing.Point(15, 106); + this.kryptonLabel4.Name = "kryptonLabel4"; + this.kryptonLabel4.Size = new System.Drawing.Size(86, 20); + this.kryptonLabel4.TabIndex = 50; + this.kryptonLabel4.Values.Text = "Label Enabled"; + // + // kryptonLinkLabel3 + // + this.kryptonLinkLabel3.Enabled = false; + this.kryptonLinkLabel3.Location = new System.Drawing.Point(101, 80); + this.kryptonLinkLabel3.Name = "kryptonLinkLabel3"; + this.kryptonLinkLabel3.Size = new System.Drawing.Size(83, 20); + this.kryptonLinkLabel3.TabIndex = 49; + this.kryptonLinkLabel3.Values.Text = "Link Disabled"; + // + // kryptonLinkLabel4 + // + this.kryptonLinkLabel4.Location = new System.Drawing.Point(16, 80); + this.kryptonLinkLabel4.Name = "kryptonLinkLabel4"; + this.kryptonLinkLabel4.Size = new System.Drawing.Size(79, 20); + this.kryptonLinkLabel4.TabIndex = 48; + this.kryptonLinkLabel4.Values.Text = "Link Enabled"; + // + // kryptonRadioButton3 + // + this.kryptonRadioButton3.Enabled = false; + this.kryptonRadioButton3.Location = new System.Drawing.Point(90, 50); + this.kryptonRadioButton3.Margin = new System.Windows.Forms.Padding(2); + this.kryptonRadioButton3.Name = "kryptonRadioButton3"; + this.kryptonRadioButton3.Size = new System.Drawing.Size(70, 20); + this.kryptonRadioButton3.TabIndex = 45; + this.kryptonRadioButton3.Values.Text = "Disabled"; + // + // kryptonRadioButton4 + // + this.kryptonRadioButton4.Location = new System.Drawing.Point(15, 50); + this.kryptonRadioButton4.Margin = new System.Windows.Forms.Padding(2); + this.kryptonRadioButton4.Name = "kryptonRadioButton4"; + this.kryptonRadioButton4.Size = new System.Drawing.Size(66, 20); + this.kryptonRadioButton4.TabIndex = 44; + this.kryptonRadioButton4.Values.Text = "Enabled"; + // + // kryptonCheckBox3 + // + this.kryptonCheckBox3.Enabled = false; + this.kryptonCheckBox3.Location = new System.Drawing.Point(90, 18); + this.kryptonCheckBox3.Name = "kryptonCheckBox3"; + this.kryptonCheckBox3.Size = new System.Drawing.Size(71, 20); + this.kryptonCheckBox3.TabIndex = 43; + this.kryptonCheckBox3.Values.Text = "Disabled"; + // + // kryptonCheckBox4 + // + this.kryptonCheckBox4.Location = new System.Drawing.Point(16, 19); + this.kryptonCheckBox4.Name = "kryptonCheckBox4"; + this.kryptonCheckBox4.Size = new System.Drawing.Size(67, 20); + this.kryptonCheckBox4.TabIndex = 42; + this.kryptonCheckBox4.Values.Text = "Enabled"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.kryptonGroupBox2); + this.kryptonPanel2.Controls.Add(this.kryptonGroupBox1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(783, 436); + this.kryptonPanel2.TabIndex = 3; + // + // Bug833Test + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(783, 436); + this.Controls.Add(this.kryptonThemeComboBox1); + this.Controls.Add(this.kryptonPanel2); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "Bug833Test"; + this.Text = "Bug833Test"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit(); + this.kryptonGroupBox1.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit(); + this.kryptonGroupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit(); + this.kryptonGroupBox2.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).EndInit(); + this.kryptonGroupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator1)).EndInit(); + this.kryptonNavigator1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).EndInit(); + this.kryptonPage1.ResumeLayout(false); + this.kryptonPage1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonGroupBox kryptonGroupBox1; + private KryptonGroupBox kryptonGroupBox2; + private Krypton.Navigator.KryptonNavigator kryptonNavigator1; + private Krypton.Navigator.KryptonPage kryptonPage1; + private KryptonPanel kryptonPanel1; + private KryptonLinkLabel kryptonLinkLabel2; + private KryptonLinkLabel kryptonLinkLabel1; + private KryptonRadioButton kryptonRadioButton2; + private KryptonRadioButton kryptonRadioButton1; + private KryptonCheckBox kryptonCheckBox2; + private KryptonCheckBox kryptonCheckBox1; + private KryptonRadioButton kryptonRadioButton3; + private KryptonRadioButton kryptonRadioButton4; + private KryptonCheckBox kryptonCheckBox3; + private KryptonCheckBox kryptonCheckBox4; + private KryptonLinkLabel kryptonLinkLabel3; + private KryptonLinkLabel kryptonLinkLabel4; + private KryptonLabel kryptonLabel2; + private KryptonLabel kryptonLabel1; + private KryptonLabel kryptonLabel3; + private KryptonLabel kryptonLabel4; + private KryptonPanel kryptonPanel2; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Bug833Test.cs b/Source/Krypton Components/TestForm/Bug833Test.cs new file mode 100644 index 000000000..8a86a7c94 --- /dev/null +++ b/Source/Krypton Components/TestForm/Bug833Test.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class Bug833Test : KryptonForm + { + public Bug833Test() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/Bug833Test.resx b/Source/Krypton Components/TestForm/Bug833Test.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/Bug833Test.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ButtonsTest.Designer.cs b/Source/Krypton Components/TestForm/ButtonsTest.Designer.cs new file mode 100644 index 000000000..72d34683d --- /dev/null +++ b/Source/Krypton Components/TestForm/ButtonsTest.Designer.cs @@ -0,0 +1,284 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class ButtonsTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ButtonsTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonColorButton1 = new Krypton.Toolkit.KryptonColorButton(); + this.kcbtnDropDown = new Krypton.Toolkit.KryptonColorButton(); + this.kryptonButton5 = new Krypton.Toolkit.KryptonButton(); + this.kryptonContextMenu1 = new Krypton.Toolkit.KryptonContextMenu(); + this.kryptonContextMenuItems1 = new Krypton.Toolkit.KryptonContextMenuItems(); + this.kryptonContextMenuItem1 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonContextMenuItem2 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonContextMenuItem3 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonButton6 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton7 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton8 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton4 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton2 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton3 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); + this.buttonSpecAny1 = new Krypton.Toolkit.ButtonSpecAny(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Controls.Add(this.kryptonColorButton1); + this.kryptonPanel1.Controls.Add(this.kcbtnDropDown); + this.kryptonPanel1.Controls.Add(this.kryptonButton5); + this.kryptonPanel1.Controls.Add(this.kryptonButton6); + this.kryptonPanel1.Controls.Add(this.kryptonButton7); + this.kryptonPanel1.Controls.Add(this.kryptonButton8); + this.kryptonPanel1.Controls.Add(this.kryptonButton4); + this.kryptonPanel1.Controls.Add(this.kryptonButton2); + this.kryptonPanel1.Controls.Add(this.kryptonButton3); + this.kryptonPanel1.Controls.Add(this.kryptonButton1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(522, 202); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonColorButton1 + // + this.kryptonColorButton1.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kryptonColorButton1.Enabled = false; + this.kryptonColorButton1.Location = new System.Drawing.Point(267, 165); + this.kryptonColorButton1.Name = "kryptonColorButton1"; + this.kryptonColorButton1.Size = new System.Drawing.Size(243, 25); + this.kryptonColorButton1.TabIndex = 8; + this.kryptonColorButton1.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonColorButton1.Values.Image"))); + this.kryptonColorButton1.Values.RoundedCorners = 8; + this.kryptonColorButton1.Values.Text = "Disabled Drop Down Color"; + // + // kcbtnDropDown + // + this.kcbtnDropDown.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcbtnDropDown.Location = new System.Drawing.Point(18, 165); + this.kcbtnDropDown.Name = "kcbtnDropDown"; + this.kcbtnDropDown.Size = new System.Drawing.Size(243, 25); + this.kcbtnDropDown.TabIndex = 7; + this.kcbtnDropDown.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnDropDown.Values.Image"))); + this.kcbtnDropDown.Values.RoundedCorners = 8; + this.kcbtnDropDown.Values.Text = "Drop Down Color"; + this.kcbtnDropDown.SelectedColorChanged += new System.EventHandler(this.kcbtnDropDown_SelectedColorChanged); + // + // kryptonButton5 + // + this.kryptonButton5.Enabled = false; + this.kryptonButton5.KryptonContextMenu = this.kryptonContextMenu1; + this.kryptonButton5.Location = new System.Drawing.Point(267, 134); + this.kryptonButton5.Name = "kryptonButton5"; + this.kryptonButton5.Size = new System.Drawing.Size(243, 25); + this.kryptonButton5.TabIndex = 6; + this.kryptonButton5.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton5.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonButton5.Values.Image"))); + this.kryptonButton5.Values.ShowSplitOption = true; + this.kryptonButton5.Values.Text = "Disabled UAC Drop Down"; + this.kryptonButton5.Values.UseAsUACElevationButton = true; + // + // kryptonContextMenu1 + // + this.kryptonContextMenu1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItems1}); + // + // kryptonContextMenuItems1 + // + this.kryptonContextMenuItems1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItem1, + this.kryptonContextMenuItem2, + this.kryptonContextMenuItem3}); + this.kryptonContextMenuItems1.Text = ""; + // + // kryptonContextMenuItem1 + // + this.kryptonContextMenuItem1.Text = "Choice 1"; + // + // kryptonContextMenuItem2 + // + this.kryptonContextMenuItem2.Text = "Choice 2"; + // + // kryptonContextMenuItem3 + // + this.kryptonContextMenuItem3.Text = "Choice 3"; + // + // kryptonButton6 + // + this.kryptonButton6.Enabled = false; + this.kryptonButton6.Location = new System.Drawing.Point(267, 103); + this.kryptonButton6.Name = "kryptonButton6"; + this.kryptonButton6.Size = new System.Drawing.Size(243, 25); + this.kryptonButton6.TabIndex = 4; + this.kryptonButton6.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton6.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonButton6.Values.Image"))); + this.kryptonButton6.Values.Text = "Disabled UAC Button"; + this.kryptonButton6.Values.UseAsUACElevationButton = true; + // + // kryptonButton7 + // + this.kryptonButton7.KryptonContextMenu = this.kryptonContextMenu1; + this.kryptonButton7.Location = new System.Drawing.Point(18, 134); + this.kryptonButton7.Name = "kryptonButton7"; + this.kryptonButton7.Size = new System.Drawing.Size(243, 25); + this.kryptonButton7.TabIndex = 5; + this.kryptonButton7.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton7.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonButton7.Values.Image"))); + this.kryptonButton7.Values.ShowSplitOption = true; + this.kryptonButton7.Values.Text = "Normal UAC Drop Down"; + this.kryptonButton7.Values.UseAsUACElevationButton = true; + // + // kryptonButton8 + // + this.kryptonButton8.Location = new System.Drawing.Point(18, 103); + this.kryptonButton8.Name = "kryptonButton8"; + this.kryptonButton8.Size = new System.Drawing.Size(243, 25); + this.kryptonButton8.TabIndex = 3; + this.kryptonButton8.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton8.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonButton8.Values.Image"))); + this.kryptonButton8.Values.Text = "Normal UAC Button"; + this.kryptonButton8.Values.UseAsUACElevationButton = true; + // + // kryptonButton4 + // + this.kryptonButton4.Enabled = false; + this.kryptonButton4.KryptonContextMenu = this.kryptonContextMenu1; + this.kryptonButton4.Location = new System.Drawing.Point(267, 72); + this.kryptonButton4.Name = "kryptonButton4"; + this.kryptonButton4.Size = new System.Drawing.Size(243, 25); + this.kryptonButton4.TabIndex = 2; + this.kryptonButton4.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton4.Values.ShowSplitOption = true; + this.kryptonButton4.Values.Text = "Disabled Drop Down"; + // + // kryptonButton2 + // + this.kryptonButton2.Enabled = false; + this.kryptonButton2.Location = new System.Drawing.Point(267, 41); + this.kryptonButton2.Name = "kryptonButton2"; + this.kryptonButton2.Size = new System.Drawing.Size(243, 25); + this.kryptonButton2.TabIndex = 1; + this.kryptonButton2.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton2.Values.Text = "Disabled Button"; + // + // kryptonButton3 + // + this.kryptonButton3.KryptonContextMenu = this.kryptonContextMenu1; + this.kryptonButton3.Location = new System.Drawing.Point(18, 72); + this.kryptonButton3.Name = "kryptonButton3"; + this.kryptonButton3.Size = new System.Drawing.Size(243, 25); + this.kryptonButton3.TabIndex = 1; + this.kryptonButton3.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton3.Values.ShowSplitOption = true; + this.kryptonButton3.Values.Text = "Normal Drop Down"; + // + // kryptonButton1 + // + this.kryptonButton1.Location = new System.Drawing.Point(18, 41); + this.kryptonButton1.Name = "kryptonButton1"; + this.kryptonButton1.Size = new System.Drawing.Size(243, 25); + this.kryptonButton1.TabIndex = 0; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton1.Values.Text = "Normal Button"; + // + // buttonSpecAny1 + // + this.buttonSpecAny1.Text = "Test Text"; + this.buttonSpecAny1.UniqueName = "bad5983b9e7f4d82b15e55a1a19807bb"; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonThemeComboBox1.DropDownWidth = 492; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(18, 13); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(492, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 9; + // + // ButtonsTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ButtonSpecs.Add(this.buttonSpecAny1); + this.ClientSize = new System.Drawing.Size(522, 202); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "ButtonsTest"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Buttons Test"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonButton kryptonButton1; + private Krypton.Toolkit.KryptonColorButton kcbtnDropDown; + private Krypton.Toolkit.KryptonButton kryptonButton5; + private Krypton.Toolkit.KryptonButton kryptonButton6; + private Krypton.Toolkit.KryptonButton kryptonButton7; + private Krypton.Toolkit.KryptonButton kryptonButton8; + private Krypton.Toolkit.KryptonButton kryptonButton4; + private Krypton.Toolkit.KryptonButton kryptonButton2; + private Krypton.Toolkit.KryptonButton kryptonButton3; + private Krypton.Toolkit.KryptonContextMenu kryptonContextMenu1; + private Krypton.Toolkit.KryptonContextMenuItems kryptonContextMenuItems1; + private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem1; + private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem2; + private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem3; + private KryptonColorButton kryptonColorButton1; + private ButtonSpecAny buttonSpecAny1; + private KryptonThemeComboBox kryptonThemeComboBox1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ButtonsTest.cs b/Source/Krypton Components/TestForm/ButtonsTest.cs new file mode 100644 index 000000000..e79620589 --- /dev/null +++ b/Source/Krypton Components/TestForm/ButtonsTest.cs @@ -0,0 +1,30 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class ButtonsTest : KryptonForm + { + public ButtonsTest() + { + InitializeComponent(); + } + + private void kcbtnDropDown_SelectedColorChanged(object sender, ColorEventArgs e) + { + kryptonButton3.Values.DropDownArrowColor = e.Color; + + kryptonButton4.Values.DropDownArrowColor = e.Color; + + kryptonButton7.Values.DropDownArrowColor = e.Color; + + kryptonButton8.Values.DropDownArrowColor = e.Color; + } + } +} diff --git a/Source/Krypton Components/TestForm/ButtonsTest.resx b/Source/Krypton Components/TestForm/ButtonsTest.resx new file mode 100644 index 000000000..5a63c576d --- /dev/null +++ b/Source/Krypton Components/TestForm/ButtonsTest.resx @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DQAACw0B7QfALAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DgAACw4BQL7hQQAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + 17, 17 + + + + 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 + MwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCioqKgYAAAAAs+SwWJHMj/+Qy47/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/kMuO/36xfO4qVSoG2P7WcKjspv93xXf/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/b7Vv/5XRk/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + eP+R5Jr/dt13/3zff/+F4Yv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/bspv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/943nr/huGM/4fh + jf+O45f/luWg/3feeP+m6bT/sOzA/4zjlP+x7cH/heGL/3bdd/+N45X/heGL/4Hghf+L4pP/fN9//4Lg + h/+I4Y//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+A4IT/uvDM/7/x0/+X5aL/vfHQ/3bdd/+v7L//wfLU/4zjlP+98dD/w/PX/4nij/++8dH/i+KS/8Dy + 1P++8dH/n+is/6bptP+578v/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+A4IT/xfPa/7zwzv+a5qX/w/PY/7Ltw/+78M7/q+u6/5/nq//B8tX/w/PX/6fq + tf++8dH/jOKT/8Dx0//C8tb/neep/8Dy0/++8dH/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/9/34P/q+u6/7DswP+C4If/geCG/3/fg/+B4Ib/e95+/4Df + hP+D4Ij/ft+B/5Tlnv+p6rj/ft+C/3reff+B4IX/et58/4PgiP9833//dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/d954/3jeef943nn/eN55/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fe + eP943nn/eN55/3jeef933nj/dt13/3feeP943nn/eN55/3jeef943nn/eN55/3jeef943nn/eN55/3je + ef943nn/eN55/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/8/35f/h/fv/4f37/+H9+/+m6bT/dt13/6nquP/h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/n+er/+H9+//h/fv/4f37/9L46v933nj/dt13/6nquP/h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/933nj/0fjo/+H9+//h/fv/4f37/5/nq/923Xf/dt13/6Tp + sf/Y+vD/2Prw/9j68P/b+/T/4f37/+H9+//h/fv/2vvz/9j68P/Y+vD/2Prw/7vwzv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+j6bD/4f37/+H9+//h/fv/zvbk/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3jeev/U+ez/4f37/+H9 + +//h/fv/mOWj/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6fq + tf/h/fv/4f37/+H9+//J9d7/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/et58/9f57//h/fv/4f37/+H9+/+R5Jr/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/2vvy/5jl + o/+A4IT/dt13/3bdd/923Xf/q+u7/+H9+//h/fv/4f37/8Pz2P923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/4f37/+H9+//h/fv/0vjp/7Ltwv+F4Yr/2frx/+H9+//h/fv/3/35/4rikv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/mual/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//g/fn/4f37/+H9+//h/fv/vvHR/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/ouiv/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//e/Pf/heGL/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/sOzA/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1/rv/47jlv+n6rX/yPTd/+H9 + +//h/fv/4f37/+H9+//W+e7/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/xfPZ/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6LosP+s67z/rOu8/6Po + sf923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/5Tknf/U+Ov/4f37/+H9+//h/fv/yvXf/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/3fz2/33fgP923Xf/dt13/3bdd/923Xf/dt13/9P4 + 6v/h/fv/4f37/9D35v923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/9934H/zPbi/+H9+//h/fv/4f37/7Htwf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/yfXe/7fuyP923Xf/dt13/3bd + d/923Xf/e95+/978+P/h/fv/4f37/8j03f923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/ft+C/9T57P/h/fv/4f37/978 + 9/+H4Y3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//g/fr/o+mw/+D9 + +v+w7cH/ed57/3bdd/923Xf/te7G/+H9+//h/fv/4f37/7jvyv923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5Xl + n//h/fv/4f37/+H9+/+/8dL/dt13/3bdd/923Xf/dt13/3bdd//F89r/3fz3/9389//f/fn/4f37/+H9 + +//Y+vD/geCF/9/9+f/h/fv/3Pv1/8/35v/W+e7/4f37/+H9+//h/fv/4f37/5flof923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd//E89n/4f37/+H9+//f/Pj/geCG/3bdd/923Xf/dt13/3bdd//I9N7/4f37/+H9 + +//h/fv/4f37/+H9+//N9uP/dt13/7nvy//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/yvXg/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+U5Z7/4f37/+H9+//h/fv/reu8/3bdd/923Xf/dt13/3bd + d//I9N3/4f37/+H9+//h/fv/4f37/+H9+//B8tT/dt13/3jeev+78M3/4P36/+H9+//h/fv/4f37/+H9 + +//E89n/f9+D/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/1vnt/+H9+//h/fv/yvXg/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/guCH/57n + qv+l6bT/n+es/4Xhi/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/vfHQ/+H9 + +//h/fv/3vz3/3jeef923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/p+q1/+H9+//h/fv/4f37/5Djmf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/lOSd/+H9+//h/fv/4f37/6LosP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/heGK/+H9+//h/fv/4f37/63svf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/ft+B/+H9+//h/fv/4f37/7Lt + w/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/fN9+/4Dghf+A4IX/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt14/4Dg + hf+A4IX/gOCF/3vefv923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/et58/37fgv933nj/g+CI/3feeP923Xf/e95+/3bd + d/973n7/et58/3neev97337/dt13/3feeP+B4IX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/eN55/4Pg + iP923Xf/eN55/3/fg/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/w/PX/8Dy1P+Y5qP/reu8/7rw + zf923Xf/quu5/3bdd/+L4pL/rOu8/4Pgh/+478r/ouiw/7rwzP+378j/o+mw/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/kOSZ/6/sv/+y7cP/vPDP/7zwz/+V5Z//b8pv/5HMj/8zTDMK2P7WcK7urP963nv/uvDM/8Ly + 1v9834D/qeu4/6zru/923Xf/dt13/3jeev+B4Ib/u/DN/6Dorf+378n/vvHS/63svf/B8tT/keSa/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+e56r/w/PX/7zwz/+P45j/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/vvHR/8Tz2P+N45T/uO/J/7fvyf923Xf/dt13/4PgiP/J9N//zfbj/6fqtv+78M7/su3C/7Pt + xP+/8dL/mOWi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kuSb/7jvyv+t673/pemz/7nvy/963n3/b8pv/5HM + j/8zTDMK2P7WcK/urf+M4oz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/gdeB/5TQkv8zTDMK5f7lb6vuqf+177P/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/re6r/5rZmP9MZkwK////EPj++G/1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cOf85FYAAAAA////////AACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAP// + /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAJrQmiGEuoRHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4G1fUVvn28QvPC6jobN + hf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HA + cf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/e756/YW8 + gUXF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/et58/3vefv983n7/juOW/4Pg + iP+L4pP/eN16/3refP953Xv/et59/3fdef963Xz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/92ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3vefv+t7Lz/m+an/6Pp + sP+e56v/sOzA/63svv+n6rX/peqz/5Pkm/+w7cD/l+Wi/6jpt/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/fN6A/7zw + 0P+c5qj/ruy+/6rruf+d56j/quu5/63svP+y7cP/kuOa/7DswP+a5qb/rey9/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/933Xn/g+CI/3vefv943Xr/eN16/3fdef953Xv/ed17/4Hfhf933Xn/eN16/3fdef933Xn/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd/+w7b//xvXa/6zsuv923Xf/dt13/3bdd/923Xf/dt13/4bhi//C89X/xvXa/6Tq + sf9/34P/vPHN/8b12v/G9dr/xvXa/8b12v/G9dr/xvXa/8Dz0/+E4In/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/uO/K/+H9 + +//Z+vL/ieKQ/4Hghv/R9+f/3vz4/9/8+f/h/fv/4f37/9/8+P/e/Pj/1vnv/4jhjv923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/47j + lv/e/Pf/4f37/77xz/943Xr/eN16/4vjkf+O5JX/q+u6/+H9+//h/fv/oOit/47klf+M45P/et58/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bd + d/953Xr/wvPV/+H9+//c+/X/iOGP/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+H9+/+O45f/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bd + d/923Xf/dt13/43jk//b+/T/4f37/6/tvv923Xf/dt13/3bdd/923Xf/dt13/5zmp//h/fv/4f37/47j + l/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9 + +//P9+X/nOin/4vjkf983n//wPHV/+H9+//V+e3/heGK/3bdd/923Xf/dt13/3bdd/923Xf/nOan/+H9 + +//h/fv/juOX/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bd + d//D8tf/4f37/+H9+//h/fv/2/v0/8z24P/f/Pn/4f37/7Puw/933Xj/dt13/3bdd/923Xf/dt13/3bd + d/+c5qf/4f37/+H9+/+V5J//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fi + h/923Xf/dt13/8Py1//h/fv/2fry/9D35//c+/X/4f37/+H9+//c+/b/f9+E/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/5zmp//h/fv/4f37/6Xpsf923Xf/dt13/3bdd/943Xr/guCH/4Lgh/943Xr/d8p3/4S+ + hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/+/8tL/gN+E/5Hkmf/L9eD/4f37/978+P+m6rP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/nOan/+H9+//h/fv/wPLS/3bdeP923Xf/dt13/4rij//Q9ub/z/bm/4ni + jv93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3ndfP/B8tX/4Pz6/9f5 + 7/+K4pD/dt13/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+D9+v+/8dL/k+Wc/3bdd/923Xf/nuip/+D8 + +v/Z+fH/ieGO/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/4Lg + h//R+Oj/4Pz6/7zwzv923Xf/dt13/3bdd/+i6a7/w/TX/8324//h/fv/2/r0/57oqv/X+u//wPLT/7zx + zv/Y+vH/4f37/9D35v+A34P/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bd + d/923Xf/dt13/6fqtf/h/fv/3/z4/4bhjP923Xf/dt13/7Puw//h/fv/4f37/+H9+//P9ub/guCG/8v1 + 4f/g/fr/4f37/+H9+//b+/T/puqz/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y + 0P923Xf/dt13/3bdd/923Xf/e95+/9r68v/h/fv/r+2+/3bdd/923Xf/heGK/5DlmP+Q5Zj/kOWY/4ri + kP923Xf/g+CH/57oqf+y7cP/quu5/43jlf933Xn/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py + 1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/wfLV/+H9+//G9Nn/d915/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/3bdd/+q67j/4f37/8/25v9/3oP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bdd/923Xf/dt13/5rnpP/h/fv/1Pjr/4Pg + iP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/47jlf+Y56L/jOOU/3bdd/923Xf/dt13/3bdd/923Xf/f9+E/5jn + ov+T5Z3/et58/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/ed17/3fdef993oD/dt13/3jdev943Xr/eN16/3nd + e/923Xf/fN5+/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/ed16/3jdev943Xr/d915/3fKd/+EvoRHxfjEk4fih//A8dT/nOeo/67rvv+G4Iv/k+Sb/4Pf + if+l6bP/q+u7/6zrvP+478r/k+Wd/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+S5Jz/reu9/73w0P+d5qn/d8p3/4S+hEfF+MSTh+KH/77w0f+W5qH/s+7E/4Xg + iv943Xr/qOu3/7/x0v+07cb/s+3E/7zwzv+N4pX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/5Xkn/+s67z/r+zA/43jlf93ynf/hL6ER8f2xZOb55v/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/43Zjf+IwYhH4PfgQtj2 + 2JPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r4 + 2pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT0vTQjrnn + uSH/////AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABgAAAASgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAB1wXX/est6/3bd + d/923Xj/d914/3jdef943Xr/eN56/3nee/953nz/et58/3veff97333/e95+/3zef/9833//fd+A/33f + gf9+34H/f9+D/4rQif+S25H/gOCE/4Hghv+C4If/g+CH/4ThiP+F4Yr/heGL/4bhiv+G4ov/huGM/4fh + jP+H4Y3/h+KM/4vji/+I4o7/ieKP/4zjjP+J4pD/iuOQ/4rjkf+L4pL/i+OS/4zilP+N45T/jeOV/47j + lf+P5Jb/j+SX/4/ll/+Q5Jf/kOSY/5HlmP+R5Zn/kuSa/5Lkm/+S5Zv/k+Wa/5Plm/+T5pz/lOWd/5Tl + nv+V5Z//luaf/5fnn/+W5aD/l+ag/5jmov+Z5qP/meej/5rmpf+a56X/m+el/5vnpv+c56j/muij/53o + qP+e6Kj/n+iq/5/oq/+f6av/n+is/6Dpn/+g6av/oOmt/6Horf+h6a3/oOqs/6HqrP+i6q7/pOmx/6Tp + sv+l6bL/pOqw/6Xqs/+m6rP/puuz/6jrtf+o67b/qeu3/6jstf+p7Lf/qeu4/6rruP+q67n/q+y5/63r + vf+s7Lr/rOy7/63su/+t7L3/ru29/6/sv/+v7b//sO6//7DtwP+x7sH/s+3D/7Luwv+z7sT/tO7F/7Tv + xf+378n/tvDG/7fwx/+38Mj/uPDJ/7nwyv+58Mv/ufHK/7rxy/+78M3/u/LM/7zwzv+98tD/vvHQ/77x + 0f+/8dL/vvPQ/7/z0f+/8tL/wPLT/8Dz0//A8tT/xPPY/8T02P/H9dv/xvTc/8f03P/H9dz/yvXf/8v1 + 4P/L9uD/y/bh/8z24f/M9uL/zvfj/8/35f/Q9+f/0ffo/9D45//U+ez/1vnt/9b57v/X+e//1/rv/9j6 + 8f/b+/P/2/v0/9z79f/d/Pb/3fz3/9789//e/Pj/3/z4/9/8+f/g/fn/4P36/+H9+/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FRQAFBQA + FBQAFBQAFAAUFAAUFAAUFAAUFAAUABQUAABqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFH0j + AgICAgICAgMJEhItIC8IDQsOCg4CAgICAgICBQAUfSMCBAICAgICDGhOTUdsbFRPP2xDWwICAgICAgIC + ARR9IwICAgICAgIMhk9kXUVeYnU6akxiAgICAgICAgYAFH0jAgICAgICAgUmEgoKBQoLGgUIBwgCAgIC + AgICAgEUfSMCAgICAgICAgICAgICAgICAgICAgICAgICAgIFABR9IwICAgICAgICAgICAgICAgICAgIC + AgICAgICAgIBFH0jAgICBQICAgICAgIEBQICBwQEBQUCAgQCAgICBgAUfSMCAm6LWQICAgICKoOIXhdz + iIiLiIuLfSMCAgIEARR9IwICk7N9AgICAgKMs6MwI5uvr7OzsaujMAICAgUAFH0jAgKTsX0CAgICKK2z + gAsLNUFus7NgQTwSAgICAgEUfSMEApOzfAICBAuIs6oaAgICBESzsysCAgICAgIFABR9IwICk7F9AgIC + OqizgAICAgICQ7OzLwICAgICAgIBFH0jBAKTs51hOhaVs54mAgICAgREs7EVAgICAgICBQAUfSMCApOx + s7Olk7GzcwoCAgICAkOxszoFAgICAgQCARR9IwIEla+imKizs68SAgICAgICRbOzWQICBAsgIxIAFH0j + AgKTsYUjU5ixsVMFBQICAgJTsbN9BQUFFZuYMwEUfSMCBJOxfAICBY+xozoCAgICAlOxsYxTAgVosaU6 + ABR9IwICk7F9AgICJp2xiAICAlOFk7GxZaN8faOxmyMAFH0jAgSTsX0CBAIFWbGxIwICbLGxsZ0jk7Gx + r6hOBQAUfSMCApOxfQICAgIMqLFiBQQjU1NTFQUjXn1zUwICARR9IwIFk7F8AgICAgWTsYUFAgIEAgIC + AgQCAgIEAgUAFH0jAgKTsX0EAgICAnOxmyMCAgICAgICAgICAgICAgEUfSMCApOxfAICAgIEXrOdJgUC + AgICAgICAgICAgQFABR9IwQCU1M1AgICAgIjU1MSAgICAgICAgQCAgICAgIBFH0jBAICBAQEAgQCAgIC + AgICAgICAgICAgICBAIFBQAUfSYMBRIFBQwMCwULAgUCAgICAgICAgICAgIFBQUFARR9JpFTdiYVI1Ni + c4UVAgICAgICBAICAgICAlNuhlYAFH0mjFN8JgVTjHx8hRUCBAQFAgQFAgQFAgUCU258UwEUhVMmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmFRSdk5OZk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5OMaP// + //8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAGAAAABKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAJHMj/+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/36wfO6u7qz/dt13/3bd + d/923Xf/dt13/4fhjf933nj/jOOU/3bdd/+B4IX/guCH/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/3bd + d/923Xf/dt13/3bdd/+w7MD/f9+D/4DfhP+U5Z7/et59/4PgiP923Xf/dt13/3bdd/923Xf/kcyP/67u + rP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HM + j/+u7qz/dt13/3jeef923Xf/dt13/3bdd/933nj/eN55/3feeP943nn/eN55/3jeef933nj/dt13/3bd + d/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5/nq/+k6bH/2Prw/+H9+//Y+vD/u/DO/3bd + d/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/p+q1/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d/923Xf/dt13/5HMj/+u7qz/dt13/+H9+//h/fv/su3C/+H9+/+K4pL/dt13/3bdd/923Xf/4f37/3bd + d/923Xf/dt13/3bdd/+RzI//ru6s/3bdd//h/fv/juOW/+H9+//h/fv/dt13/3bdd/923Xf/dt13/+H9 + +/923Xf/dt13/6LosP+j6LH/kcyP/67urP923Xf/4f37/3bdd/923Xf/1Pns/9789/923Xf/dt13/3bd + d//h/fv/4P36/3bdd//h/fv/uO/K/5HMj/+u7qz/dt13/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d//h/fv/4f37/3jeev/h/fv/4f37/3bdd/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5Dj + mf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/dt13/+H9 + +/+y7cP/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HMj/+u7qz/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/8Ly1v+s67v/eN56/6Do + rf+t7L3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+88M//kcyP/6vuqf+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/5rZmP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAA + AAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAHbdd/933Xj/d915/3jdef943nr/et58/3ve + ff9/34L/gOCE/4HghP+B4IX/guCG/4Pgh/+H4Y3/h+KM/4jijf+I4o7/iuKR/4vjkf+L45L/jOOS/4zj + k/+N45T/juOV/4zkkv+Q5Jj/kOSZ/5Hlmf+U5pz/luae/5bmn/+X5qD/mOeh/5jmov+a56X/muik/5zo + p/+d6Kf/nuip/6DprP+h6q3/oumv/6TqsP+m67P/qey2/6nruP+q7bj/rO26/67tvP+u7b7/r+2//7bu + x/+28Mf/t/DI/7jwyP+98s//vvLQ/8Dz0//C89X/yPXd/8334//O9+T/0Pjn/9T46//V+e3/2Prw/9r7 + 8//f/Pn/4Pz5/+D9+v/h/fv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8XAwMDAwMDAwMDAwMDAwMGIwAAAAMb + FyUUFxQDAAAAAyMAAAEDIBkUHRQUAAADAwMjAAAAAAAAAAAAAAADAwMDIwAdCQABGB0PIyUhDQMDAyMA + Px0ABkErIDpEOCUDAQMjAD8dACxAAwAPRAcAAwMDIwA/PS9CKAEBD0QMAwAAAyMAPzY7RAkAAA9EGQMf + IQMjAD8dATg6AAcqRDYdPzAGJQA/HQAJRA8PNzYXOzgHBiMAPx0AAD0oAAABAAAAAAMjADYYAQAsJQAA + AAAAAwMDIwMDAwMDAAAAAAAAAAMABiMwJRIwNgkAAAAAAAAqLQM0KCooKigqKCooKigqKColAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CalendarTest.Designer.cs b/Source/Krypton Components/TestForm/CalendarTest.Designer.cs new file mode 100644 index 000000000..0cac45a65 --- /dev/null +++ b/Source/Krypton Components/TestForm/CalendarTest.Designer.cs @@ -0,0 +1,115 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class CalendarTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CalendarTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonDateTimePicker1 = new Krypton.Toolkit.KryptonDateTimePicker(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonMonthCalendar1 = new Krypton.Toolkit.KryptonMonthCalendar(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonDateTimePicker1); + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Controls.Add(this.kryptonMonthCalendar1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(253, 263); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonDateTimePicker1 + // + this.kryptonDateTimePicker1.CustomFormat = "dd/MM/yyyy HH:MM:SS tt"; + this.kryptonDateTimePicker1.Format = System.Windows.Forms.DateTimePickerFormat.Custom; + this.kryptonDateTimePicker1.Location = new System.Drawing.Point(13, 13); + this.kryptonDateTimePicker1.Name = "kryptonDateTimePicker1"; + this.kryptonDateTimePicker1.Size = new System.Drawing.Size(230, 21); + this.kryptonDateTimePicker1.TabIndex = 3; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DropDownWidth = 230; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(13, 230); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(230, 21); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 2; + // + // kryptonMonthCalendar1 + // + this.kryptonMonthCalendar1.Location = new System.Drawing.Point(13, 41); + this.kryptonMonthCalendar1.Name = "kryptonMonthCalendar1"; + this.kryptonMonthCalendar1.Size = new System.Drawing.Size(230, 182); + this.kryptonMonthCalendar1.TabIndex = 1; + this.kryptonMonthCalendar1.DateSelected += new System.Windows.Forms.DateRangeEventHandler(this.kryptonMonthCalendar1_DateSelected); + // + // CalendarTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(253, 263); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "CalendarTest"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Calendar"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; + private Krypton.Toolkit.KryptonMonthCalendar kryptonMonthCalendar1; + private Krypton.Toolkit.KryptonDateTimePicker kryptonDateTimePicker1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CalendarTest.cs b/Source/Krypton Components/TestForm/CalendarTest.cs new file mode 100644 index 000000000..5fbd67dbf --- /dev/null +++ b/Source/Krypton Components/TestForm/CalendarTest.cs @@ -0,0 +1,24 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class CalendarTest : KryptonForm + { + public CalendarTest() + { + InitializeComponent(); + } + + private void kryptonMonthCalendar1_DateSelected(object sender, DateRangeEventArgs e) + { + KryptonMessageBox.Show($"{kryptonDateTimePicker1.Value}"); + } + } +} diff --git a/Source/Krypton Components/TestForm/CalendarTest.resx b/Source/Krypton Components/TestForm/CalendarTest.resx new file mode 100644 index 000000000..aa17622af --- /dev/null +++ b/Source/Krypton Components/TestForm/CalendarTest.resx @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAUAMDAAAAEAIACoJQAAVgAAACAgAAABACAAqBAAAP4lAAAgIAAAAQAIAKgIAACmNgAAEBAAAAEA + IABoBAAATj8AABAQAAABAAgAaAUAALZDAAAoAAAAMAAAAGAAAAABACAAAAAAAABIAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCioqKgYAAAAAs+SwWJHMj/+Qy47/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/kMuO/36xfO4qVSoG2P7WcKjspv93xXf/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/b7Vv/5XRk/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + eP+R5Jr/dt13/3zff/+F4Yv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/bspv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/943nr/huGM/4fh + jf+O45f/luWg/3feeP+m6bT/sOzA/4zjlP+x7cH/heGL/3bdd/+N45X/heGL/4Hghf+L4pP/fN9//4Lg + h/+I4Y//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+A4IT/uvDM/7/x0/+X5aL/vfHQ/3bdd/+v7L//wfLU/4zjlP+98dD/w/PX/4nij/++8dH/i+KS/8Dy + 1P++8dH/n+is/6bptP+578v/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+A4IT/xfPa/7zwzv+a5qX/w/PY/7Ltw/+78M7/q+u6/5/nq//B8tX/w/PX/6fq + tf++8dH/jOKT/8Dx0//C8tb/neep/8Dy0/++8dH/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/9/34P/q+u6/7DswP+C4If/geCG/3/fg/+B4Ib/e95+/4Df + hP+D4Ij/ft+B/5Tlnv+p6rj/ft+C/3reff+B4IX/et58/4PgiP9833//dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/d954/3jeef943nn/eN55/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fe + eP943nn/eN55/3jeef933nj/dt13/3feeP943nn/eN55/3jeef943nn/eN55/3jeef943nn/eN55/3je + ef943nn/eN55/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/8/35f/h/fv/4f37/+H9+/+m6bT/dt13/6nquP/h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/n+er/+H9+//h/fv/4f37/9L46v933nj/dt13/6nquP/h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/933nj/0fjo/+H9+//h/fv/4f37/5/nq/923Xf/dt13/6Tp + sf/Y+vD/2Prw/9j68P/b+/T/4f37/+H9+//h/fv/2vvz/9j68P/Y+vD/2Prw/7vwzv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+j6bD/4f37/+H9+//h/fv/zvbk/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3jeev/U+ez/4f37/+H9 + +//h/fv/mOWj/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6fq + tf/h/fv/4f37/+H9+//J9d7/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/et58/9f57//h/fv/4f37/+H9+/+R5Jr/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/2vvy/5jl + o/+A4IT/dt13/3bdd/923Xf/q+u7/+H9+//h/fv/4f37/8Pz2P923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/4f37/+H9+//h/fv/0vjp/7Ltwv+F4Yr/2frx/+H9+//h/fv/3/35/4rikv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/mual/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//g/fn/4f37/+H9+//h/fv/vvHR/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/ouiv/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//e/Pf/heGL/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/sOzA/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1/rv/47jlv+n6rX/yPTd/+H9 + +//h/fv/4f37/+H9+//W+e7/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/xfPZ/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6LosP+s67z/rOu8/6Po + sf923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/5Tknf/U+Ov/4f37/+H9+//h/fv/yvXf/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/3fz2/33fgP923Xf/dt13/3bdd/923Xf/dt13/9P4 + 6v/h/fv/4f37/9D35v923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/9934H/zPbi/+H9+//h/fv/4f37/7Htwf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/yfXe/7fuyP923Xf/dt13/3bd + d/923Xf/e95+/978+P/h/fv/4f37/8j03f923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/ft+C/9T57P/h/fv/4f37/978 + 9/+H4Y3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//g/fr/o+mw/+D9 + +v+w7cH/ed57/3bdd/923Xf/te7G/+H9+//h/fv/4f37/7jvyv923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5Xl + n//h/fv/4f37/+H9+/+/8dL/dt13/3bdd/923Xf/dt13/3bdd//F89r/3fz3/9389//f/fn/4f37/+H9 + +//Y+vD/geCF/9/9+f/h/fv/3Pv1/8/35v/W+e7/4f37/+H9+//h/fv/4f37/5flof923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd//E89n/4f37/+H9+//f/Pj/geCG/3bdd/923Xf/dt13/3bdd//I9N7/4f37/+H9 + +//h/fv/4f37/+H9+//N9uP/dt13/7nvy//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/yvXg/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+U5Z7/4f37/+H9+//h/fv/reu8/3bdd/923Xf/dt13/3bd + d//I9N3/4f37/+H9+//h/fv/4f37/+H9+//B8tT/dt13/3jeev+78M3/4P36/+H9+//h/fv/4f37/+H9 + +//E89n/f9+D/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/1vnt/+H9+//h/fv/yvXg/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/guCH/57n + qv+l6bT/n+es/4Xhi/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/vfHQ/+H9 + +//h/fv/3vz3/3jeef923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/p+q1/+H9+//h/fv/4f37/5Djmf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/lOSd/+H9+//h/fv/4f37/6LosP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/heGK/+H9+//h/fv/4f37/63svf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/ft+B/+H9+//h/fv/4f37/7Lt + w/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/fN9+/4Dghf+A4IX/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt14/4Dg + hf+A4IX/gOCF/3vefv923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/et58/37fgv933nj/g+CI/3feeP923Xf/e95+/3bd + d/973n7/et58/3neev97337/dt13/3feeP+B4IX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/eN55/4Pg + iP923Xf/eN55/3/fg/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/w/PX/8Dy1P+Y5qP/reu8/7rw + zf923Xf/quu5/3bdd/+L4pL/rOu8/4Pgh/+478r/ouiw/7rwzP+378j/o+mw/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/kOSZ/6/sv/+y7cP/vPDP/7zwz/+V5Z//b8pv/5HMj/8zTDMK2P7WcK7urP963nv/uvDM/8Ly + 1v9834D/qeu4/6zru/923Xf/dt13/3jeev+B4Ib/u/DN/6Dorf+378n/vvHS/63svf/B8tT/keSa/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+e56r/w/PX/7zwz/+P45j/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/vvHR/8Tz2P+N45T/uO/J/7fvyf923Xf/dt13/4PgiP/J9N//zfbj/6fqtv+78M7/su3C/7Pt + xP+/8dL/mOWi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kuSb/7jvyv+t673/pemz/7nvy/963n3/b8pv/5HM + j/8zTDMK2P7WcK/urf+M4oz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/gdeB/5TQkv8zTDMK5f7lb6vuqf+177P/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/re6r/5rZmP9MZkwK////EPj++G/1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cOf85FYAAAAA////////AACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAP// + /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAJrQmiGEuoRHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4G1fUVvn28QvPC6jobN + hf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HA + cf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/e756/YW8 + gUXF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/et58/3vefv983n7/juOW/4Pg + iP+L4pP/eN16/3refP953Xv/et59/3fdef963Xz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/92ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3vefv+t7Lz/m+an/6Pp + sP+e56v/sOzA/63svv+n6rX/peqz/5Pkm/+w7cD/l+Wi/6jpt/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/fN6A/7zw + 0P+c5qj/ruy+/6rruf+d56j/quu5/63svP+y7cP/kuOa/7DswP+a5qb/rey9/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/933Xn/g+CI/3vefv943Xr/eN16/3fdef953Xv/ed17/4Hfhf933Xn/eN16/3fdef933Xn/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd/+w7b//xvXa/6zsuv923Xf/dt13/3bdd/923Xf/dt13/4bhi//C89X/xvXa/6Tq + sf9/34P/vPHN/8b12v/G9dr/xvXa/8b12v/G9dr/xvXa/8Dz0/+E4In/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/uO/K/+H9 + +//Z+vL/ieKQ/4Hghv/R9+f/3vz4/9/8+f/h/fv/4f37/9/8+P/e/Pj/1vnv/4jhjv923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/47j + lv/e/Pf/4f37/77xz/943Xr/eN16/4vjkf+O5JX/q+u6/+H9+//h/fv/oOit/47klf+M45P/et58/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bd + d/953Xr/wvPV/+H9+//c+/X/iOGP/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+H9+/+O45f/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bd + d/923Xf/dt13/43jk//b+/T/4f37/6/tvv923Xf/dt13/3bdd/923Xf/dt13/5zmp//h/fv/4f37/47j + l/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9 + +//P9+X/nOin/4vjkf983n//wPHV/+H9+//V+e3/heGK/3bdd/923Xf/dt13/3bdd/923Xf/nOan/+H9 + +//h/fv/juOX/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bd + d//D8tf/4f37/+H9+//h/fv/2/v0/8z24P/f/Pn/4f37/7Puw/933Xj/dt13/3bdd/923Xf/dt13/3bd + d/+c5qf/4f37/+H9+/+V5J//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fi + h/923Xf/dt13/8Py1//h/fv/2fry/9D35//c+/X/4f37/+H9+//c+/b/f9+E/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/5zmp//h/fv/4f37/6Xpsf923Xf/dt13/3bdd/943Xr/guCH/4Lgh/943Xr/d8p3/4S+ + hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/+/8tL/gN+E/5Hkmf/L9eD/4f37/978+P+m6rP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/nOan/+H9+//h/fv/wPLS/3bdeP923Xf/dt13/4rij//Q9ub/z/bm/4ni + jv93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3ndfP/B8tX/4Pz6/9f5 + 7/+K4pD/dt13/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+D9+v+/8dL/k+Wc/3bdd/923Xf/nuip/+D8 + +v/Z+fH/ieGO/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/4Lg + h//R+Oj/4Pz6/7zwzv923Xf/dt13/3bdd/+i6a7/w/TX/8324//h/fv/2/r0/57oqv/X+u//wPLT/7zx + zv/Y+vH/4f37/9D35v+A34P/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bd + d/923Xf/dt13/6fqtf/h/fv/3/z4/4bhjP923Xf/dt13/7Puw//h/fv/4f37/+H9+//P9ub/guCG/8v1 + 4f/g/fr/4f37/+H9+//b+/T/puqz/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y + 0P923Xf/dt13/3bdd/923Xf/e95+/9r68v/h/fv/r+2+/3bdd/923Xf/heGK/5DlmP+Q5Zj/kOWY/4ri + kP923Xf/g+CH/57oqf+y7cP/quu5/43jlf933Xn/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py + 1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/wfLV/+H9+//G9Nn/d915/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/3bdd/+q67j/4f37/8/25v9/3oP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bdd/923Xf/dt13/5rnpP/h/fv/1Pjr/4Pg + iP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/47jlf+Y56L/jOOU/3bdd/923Xf/dt13/3bdd/923Xf/f9+E/5jn + ov+T5Z3/et58/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/ed17/3fdef993oD/dt13/3jdev943Xr/eN16/3nd + e/923Xf/fN5+/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/ed16/3jdev943Xr/d915/3fKd/+EvoRHxfjEk4fih//A8dT/nOeo/67rvv+G4Iv/k+Sb/4Pf + if+l6bP/q+u7/6zrvP+478r/k+Wd/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+S5Jz/reu9/73w0P+d5qn/d8p3/4S+hEfF+MSTh+KH/77w0f+W5qH/s+7E/4Xg + iv943Xr/qOu3/7/x0v+07cb/s+3E/7zwzv+N4pX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/5Xkn/+s67z/r+zA/43jlf93ynf/hL6ER8f2xZOb55v/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/43Zjf+IwYhH4PfgQtj2 + 2JPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r4 + 2pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT0vTQjrnn + uSH/////AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABgAAAASgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAB1wXX/est6/3bd + d/923Xj/d914/3jdef943Xr/eN56/3nee/953nz/et58/3veff97333/e95+/3zef/9833//fd+A/33f + gf9+34H/f9+D/4rQif+S25H/gOCE/4Hghv+C4If/g+CH/4ThiP+F4Yr/heGL/4bhiv+G4ov/huGM/4fh + jP+H4Y3/h+KM/4vji/+I4o7/ieKP/4zjjP+J4pD/iuOQ/4rjkf+L4pL/i+OS/4zilP+N45T/jeOV/47j + lf+P5Jb/j+SX/4/ll/+Q5Jf/kOSY/5HlmP+R5Zn/kuSa/5Lkm/+S5Zv/k+Wa/5Plm/+T5pz/lOWd/5Tl + nv+V5Z//luaf/5fnn/+W5aD/l+ag/5jmov+Z5qP/meej/5rmpf+a56X/m+el/5vnpv+c56j/muij/53o + qP+e6Kj/n+iq/5/oq/+f6av/n+is/6Dpn/+g6av/oOmt/6Horf+h6a3/oOqs/6HqrP+i6q7/pOmx/6Tp + sv+l6bL/pOqw/6Xqs/+m6rP/puuz/6jrtf+o67b/qeu3/6jstf+p7Lf/qeu4/6rruP+q67n/q+y5/63r + vf+s7Lr/rOy7/63su/+t7L3/ru29/6/sv/+v7b//sO6//7DtwP+x7sH/s+3D/7Luwv+z7sT/tO7F/7Tv + xf+378n/tvDG/7fwx/+38Mj/uPDJ/7nwyv+58Mv/ufHK/7rxy/+78M3/u/LM/7zwzv+98tD/vvHQ/77x + 0f+/8dL/vvPQ/7/z0f+/8tL/wPLT/8Dz0//A8tT/xPPY/8T02P/H9dv/xvTc/8f03P/H9dz/yvXf/8v1 + 4P/L9uD/y/bh/8z24f/M9uL/zvfj/8/35f/Q9+f/0ffo/9D45//U+ez/1vnt/9b57v/X+e//1/rv/9j6 + 8f/b+/P/2/v0/9z79f/d/Pb/3fz3/9789//e/Pj/3/z4/9/8+f/g/fn/4P36/+H9+/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FRQAFBQA + FBQAFBQAFAAUFAAUFAAUFAAUFAAUABQUAABqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFH0j + AgICAgICAgMJEhItIC8IDQsOCg4CAgICAgICBQAUfSMCBAICAgICDGhOTUdsbFRPP2xDWwICAgICAgIC + ARR9IwICAgICAgIMhk9kXUVeYnU6akxiAgICAgICAgYAFH0jAgICAgICAgUmEgoKBQoLGgUIBwgCAgIC + AgICAgEUfSMCAgICAgICAgICAgICAgICAgICAgICAgICAgIFABR9IwICAgICAgICAgICAgICAgICAgIC + AgICAgICAgIBFH0jAgICBQICAgICAgIEBQICBwQEBQUCAgQCAgICBgAUfSMCAm6LWQICAgICKoOIXhdz + iIiLiIuLfSMCAgIEARR9IwICk7N9AgICAgKMs6MwI5uvr7OzsaujMAICAgUAFH0jAgKTsX0CAgICKK2z + gAsLNUFus7NgQTwSAgICAgEUfSMEApOzfAICBAuIs6oaAgICBESzsysCAgICAgIFABR9IwICk7F9AgIC + OqizgAICAgICQ7OzLwICAgICAgIBFH0jBAKTs51hOhaVs54mAgICAgREs7EVAgICAgICBQAUfSMCApOx + s7Olk7GzcwoCAgICAkOxszoFAgICAgQCARR9IwIEla+imKizs68SAgICAgICRbOzWQICBAsgIxIAFH0j + AgKTsYUjU5ixsVMFBQICAgJTsbN9BQUFFZuYMwEUfSMCBJOxfAICBY+xozoCAgICAlOxsYxTAgVosaU6 + ABR9IwICk7F9AgICJp2xiAICAlOFk7GxZaN8faOxmyMAFH0jAgSTsX0CBAIFWbGxIwICbLGxsZ0jk7Gx + r6hOBQAUfSMCApOxfQICAgIMqLFiBQQjU1NTFQUjXn1zUwICARR9IwIFk7F8AgICAgWTsYUFAgIEAgIC + AgQCAgIEAgUAFH0jAgKTsX0EAgICAnOxmyMCAgICAgICAgICAgICAgEUfSMCApOxfAICAgIEXrOdJgUC + AgICAgICAgICAgQFABR9IwQCU1M1AgICAgIjU1MSAgICAgICAgQCAgICAgIBFH0jBAICBAQEAgQCAgIC + AgICAgICAgICAgICBAIFBQAUfSYMBRIFBQwMCwULAgUCAgICAgICAgICAgIFBQUFARR9JpFTdiYVI1Ni + c4UVAgICAgICBAICAgICAlNuhlYAFH0mjFN8JgVTjHx8hRUCBAQFAgQFAgQFAgUCU258UwEUhVMmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmFRSdk5OZk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5OMaP// + //8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAGAAAABKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAJHMj/+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/36wfO6u7qz/dt13/3bd + d/923Xf/dt13/4fhjf933nj/jOOU/3bdd/+B4IX/guCH/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/3bd + d/923Xf/dt13/3bdd/+w7MD/f9+D/4DfhP+U5Z7/et59/4PgiP923Xf/dt13/3bdd/923Xf/kcyP/67u + rP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HM + j/+u7qz/dt13/3jeef923Xf/dt13/3bdd/933nj/eN55/3feeP943nn/eN55/3jeef933nj/dt13/3bd + d/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5/nq/+k6bH/2Prw/+H9+//Y+vD/u/DO/3bd + d/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/p+q1/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d/923Xf/dt13/5HMj/+u7qz/dt13/+H9+//h/fv/su3C/+H9+/+K4pL/dt13/3bdd/923Xf/4f37/3bd + d/923Xf/dt13/3bdd/+RzI//ru6s/3bdd//h/fv/juOW/+H9+//h/fv/dt13/3bdd/923Xf/dt13/+H9 + +/923Xf/dt13/6LosP+j6LH/kcyP/67urP923Xf/4f37/3bdd/923Xf/1Pns/9789/923Xf/dt13/3bd + d//h/fv/4P36/3bdd//h/fv/uO/K/5HMj/+u7qz/dt13/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d//h/fv/4f37/3jeev/h/fv/4f37/3bdd/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5Dj + mf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/dt13/+H9 + +/+y7cP/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HMj/+u7qz/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/8Ly1v+s67v/eN56/6Do + rf+t7L3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+88M//kcyP/6vuqf+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/5rZmP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAA + AAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAHbdd/933Xj/d915/3jdef943nr/et58/3ve + ff9/34L/gOCE/4HghP+B4IX/guCG/4Pgh/+H4Y3/h+KM/4jijf+I4o7/iuKR/4vjkf+L45L/jOOS/4zj + k/+N45T/juOV/4zkkv+Q5Jj/kOSZ/5Hlmf+U5pz/luae/5bmn/+X5qD/mOeh/5jmov+a56X/muik/5zo + p/+d6Kf/nuip/6DprP+h6q3/oumv/6TqsP+m67P/qey2/6nruP+q7bj/rO26/67tvP+u7b7/r+2//7bu + x/+28Mf/t/DI/7jwyP+98s//vvLQ/8Dz0//C89X/yPXd/8334//O9+T/0Pjn/9T46//V+e3/2Prw/9r7 + 8//f/Pn/4Pz5/+D9+v/h/fv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8XAwMDAwMDAwMDAwMDAwMGIwAAAAMb + FyUUFxQDAAAAAyMAAAEDIBkUHRQUAAADAwMjAAAAAAAAAAAAAAADAwMDIwAdCQABGB0PIyUhDQMDAyMA + Px0ABkErIDpEOCUDAQMjAD8dACxAAwAPRAcAAwMDIwA/PS9CKAEBD0QMAwAAAyMAPzY7RAkAAA9EGQMf + IQMjAD8dATg6AAcqRDYdPzAGJQA/HQAJRA8PNzYXOzgHBiMAPx0AAD0oAAABAAAAAAMjADYYAQAsJQAA + AAAAAwMDIwMDAwMDAAAAAAAAAAMABiMwJRIwNgkAAAAAAAAqLQM0KCooKigqKCooKigqKColAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ColorTestimonials/ColorInverting.cs b/Source/Krypton Components/TestForm/ColorTestimonials/ColorInverting.cs new file mode 100644 index 000000000..dc27f118b --- /dev/null +++ b/Source/Krypton Components/TestForm/ColorTestimonials/ColorInverting.cs @@ -0,0 +1,116 @@ +namespace TestForm +{ + public class ColorInverting + { + + /// + /// Maximum value a channel van have. + /// + public static int ChannelMaxValue => 255; + + /// + /// Minimum value a channel van have. + /// + public static int ChannelMinValue => 0; + + /// + /// Inverts the given input integers to a color.
+ /// The Alpha channel will be set to 255, which means no transparency. + ///
+ /// Red channel. + /// Green channel. + /// Blue channel. + /// Resultant color. + public static Color InvertRGBFromInt(byte red, byte green, byte blue) + { + return Color.FromArgb( + ChannelMaxValue, + ChannelMaxValue - red, + ChannelMaxValue - green, + ChannelMaxValue - blue); + } + + /// + /// Inverts the given input integers to a color.
+ /// This method also inverts the Alpha channel. + ///
+ /// Alpa channel (transparency). + /// Red channel. + /// Green channel. + /// Blue channel. + /// Resultant color. + /// + public static Color InvertARGBFromInt(byte alpha, byte red, byte green, byte blue) + { + return Color.FromArgb( + ChannelMaxValue - alpha, + ChannelMaxValue - red, + ChannelMaxValue - green, + ChannelMaxValue - blue); + } + + /// + /// Inverts all four channels (ARGB).
+ /// Meaning if Alpha = 255 the color will be fully transparent after inversion. + ///
+ /// Input color object. + /// Resultant color. + public static Color InvertARGB(Color color) + { + return Color.FromArgb( + ChannelMaxValue - color.A, + ChannelMaxValue - color.R, + ChannelMaxValue - color.G, + ChannelMaxValue - color.B); + + } + + /// + /// Inverts the RGB channels and leaves the Alpha channel untouched. + /// + /// Input color object + /// Resultant color. + public static Color InvertRGB(Color color) + { + return Color.FromArgb( + color.A, + ChannelMaxValue - color.R, + ChannelMaxValue - color.G, + ChannelMaxValue - color.B); + } + + /// + /// Inverts a single color channel value. + /// + /// Channel value. + /// Inverted value. + public static int Invert(byte i) + { + return ChannelMaxValue - i; + } + + /// + /// Checks if the input string is in the format "#FFFFFF" + /// + /// String to check. + /// True if the string is in the correct format, otherwise false. + public static bool IsHexColor(string hexColor) + { + if (hexColor.Length == 7 && hexColor[0] == '#') + { + try + { + Convert.ToInt32(hexColor.Substring(1), 16); + return true; + } + catch + { + } + } + + return false; + } + + + } +} diff --git a/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.Designer.cs b/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.Designer.cs new file mode 100644 index 000000000..ffc03f95d --- /dev/null +++ b/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.Designer.cs @@ -0,0 +1,731 @@ +namespace TestForm +{ + partial class ColorTestimonials + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.tbDgvSystemColorFilter = new Krypton.Toolkit.KryptonTextBox(); + this.btnClearDgvSystemColorFilter = new Krypton.Toolkit.ButtonSpecAny(); + this.dgvSystemColors = new Krypton.Toolkit.KryptonDataGridView(); + this.colColor = new Krypton.Toolkit.KryptonDataGridViewTextBoxColumn(); + this.colName = new Krypton.Toolkit.KryptonDataGridViewTextBoxColumn(); + this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); + this.btnDarker = new Krypton.Toolkit.KryptonButton(); + this.btnLighter = new Krypton.Toolkit.KryptonButton(); + this.tbHexColor = new Krypton.Toolkit.KryptonTextBox(); + this.btnCopyInverted = new Krypton.Toolkit.KryptonButton(); + this.btnCopyOriginal = new Krypton.Toolkit.KryptonButton(); + this.nudBlueInverted = new Krypton.Toolkit.KryptonNumericUpDown(); + this.nudGreenInverted = new Krypton.Toolkit.KryptonNumericUpDown(); + this.nudRedInverted = new Krypton.Toolkit.KryptonNumericUpDown(); + this.nudAlphaInverted = new Krypton.Toolkit.KryptonNumericUpDown(); + this.btnColorFromHexColor = new Krypton.Toolkit.KryptonButton(); + this.kryptonLabel6 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel5 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonGroupBox2 = new Krypton.Toolkit.KryptonGroupBox(); + this.pboxInverted = new Krypton.Toolkit.KryptonPictureBox(); + this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox(); + this.pboxOriginal = new Krypton.Toolkit.KryptonPictureBox(); + this.cbEnableTransparancy = new Krypton.Toolkit.KryptonCheckBox(); + this.nudBlue = new Krypton.Toolkit.KryptonNumericUpDown(); + this.nudGreen = new Krypton.Toolkit.KryptonNumericUpDown(); + this.nudRed = new Krypton.Toolkit.KryptonNumericUpDown(); + this.nudAlpha = new Krypton.Toolkit.KryptonNumericUpDown(); + this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.tbarBlue = new Krypton.Toolkit.KryptonTrackBar(); + this.tbarGreen = new Krypton.Toolkit.KryptonTrackBar(); + this.tbarRed = new Krypton.Toolkit.KryptonTrackBar(); + this.tbarAlpha = new Krypton.Toolkit.KryptonTrackBar(); + this.colorDialog1 = new System.Windows.Forms.ColorDialog(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvSystemColors)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit(); + this.kryptonGroupBox2.Panel.SuspendLayout(); + this.kryptonGroupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pboxInverted)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit(); + this.kryptonGroupBox1.Panel.SuspendLayout(); + this.kryptonGroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pboxOriginal)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.tbDgvSystemColorFilter); + this.kryptonPanel1.Controls.Add(this.dgvSystemColors); + this.kryptonPanel1.Controls.Add(this.kryptonButton1); + this.kryptonPanel1.Controls.Add(this.btnDarker); + this.kryptonPanel1.Controls.Add(this.btnLighter); + this.kryptonPanel1.Controls.Add(this.tbHexColor); + this.kryptonPanel1.Controls.Add(this.btnCopyInverted); + this.kryptonPanel1.Controls.Add(this.btnCopyOriginal); + this.kryptonPanel1.Controls.Add(this.nudBlueInverted); + this.kryptonPanel1.Controls.Add(this.nudGreenInverted); + this.kryptonPanel1.Controls.Add(this.nudRedInverted); + this.kryptonPanel1.Controls.Add(this.nudAlphaInverted); + this.kryptonPanel1.Controls.Add(this.btnColorFromHexColor); + this.kryptonPanel1.Controls.Add(this.kryptonLabel6); + this.kryptonPanel1.Controls.Add(this.kryptonLabel5); + this.kryptonPanel1.Controls.Add(this.kryptonGroupBox2); + this.kryptonPanel1.Controls.Add(this.kryptonGroupBox1); + this.kryptonPanel1.Controls.Add(this.cbEnableTransparancy); + this.kryptonPanel1.Controls.Add(this.nudBlue); + this.kryptonPanel1.Controls.Add(this.nudGreen); + this.kryptonPanel1.Controls.Add(this.nudRed); + this.kryptonPanel1.Controls.Add(this.nudAlpha); + this.kryptonPanel1.Controls.Add(this.kryptonLabel4); + this.kryptonPanel1.Controls.Add(this.kryptonLabel3); + this.kryptonPanel1.Controls.Add(this.kryptonLabel2); + this.kryptonPanel1.Controls.Add(this.kryptonLabel1); + this.kryptonPanel1.Controls.Add(this.tbarBlue); + this.kryptonPanel1.Controls.Add(this.tbarGreen); + this.kryptonPanel1.Controls.Add(this.tbarRed); + this.kryptonPanel1.Controls.Add(this.tbarAlpha); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(1153, 652); + this.kryptonPanel1.TabIndex = 0; + // + // tbDgvSystemColorFilter + // + this.tbDgvSystemColorFilter.ButtonSpecs.Add(this.btnClearDgvSystemColorFilter); + this.tbDgvSystemColorFilter.Location = new System.Drawing.Point(12, 12); + this.tbDgvSystemColorFilter.MaxLength = 0; + this.tbDgvSystemColorFilter.Name = "tbDgvSystemColorFilter"; + this.tbDgvSystemColorFilter.Size = new System.Drawing.Size(280, 33); + this.tbDgvSystemColorFilter.StateCommon.Border.Rounding = 5F; + this.tbDgvSystemColorFilter.TabIndex = 25; + this.tbDgvSystemColorFilter.TextChanged += new System.EventHandler(this.tbDgvSystemColorFilter_TextChanged); + // + // btnClearDgvSystemColorFilter + // + this.btnClearDgvSystemColorFilter.Enabled = Krypton.Toolkit.ButtonEnabled.True; + this.btnClearDgvSystemColorFilter.Type = Krypton.Toolkit.PaletteButtonSpecStyle.FormClose; + this.btnClearDgvSystemColorFilter.UniqueName = "47faa98af8ea4fb48b77674c1a1dce5f"; + this.btnClearDgvSystemColorFilter.Click += new System.EventHandler(this.btnClearDgvSystemColorFilter_Click); + // + // dgvSystemColors + // + this.dgvSystemColors.AllowUserToAddRows = false; + this.dgvSystemColors.AllowUserToDeleteRows = false; + this.dgvSystemColors.AllowUserToResizeColumns = false; + this.dgvSystemColors.AllowUserToResizeRows = false; + this.dgvSystemColors.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.dgvSystemColors.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + this.dgvSystemColors.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.colColor, + this.colName}); + this.dgvSystemColors.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; + this.dgvSystemColors.GridStyles.Style = Krypton.Toolkit.DataGridViewStyle.Sheet; + this.dgvSystemColors.GridStyles.StyleBackground = Krypton.Toolkit.PaletteBackStyle.GridBackgroundSheet; + this.dgvSystemColors.GridStyles.StyleColumn = Krypton.Toolkit.GridStyle.Sheet; + this.dgvSystemColors.GridStyles.StyleDataCells = Krypton.Toolkit.GridStyle.Sheet; + this.dgvSystemColors.GridStyles.StyleRow = Krypton.Toolkit.GridStyle.Sheet; + this.dgvSystemColors.Location = new System.Drawing.Point(12, 51); + this.dgvSystemColors.MultiSelect = false; + this.dgvSystemColors.Name = "dgvSystemColors"; + this.dgvSystemColors.ReadOnly = true; + this.dgvSystemColors.RowHeadersVisible = false; + this.dgvSystemColors.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing; + this.dgvSystemColors.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.dgvSystemColors.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; + this.dgvSystemColors.ShowCellErrors = false; + this.dgvSystemColors.ShowCellToolTips = false; + this.dgvSystemColors.ShowEditingIcon = false; + this.dgvSystemColors.ShowRowErrors = false; + this.dgvSystemColors.Size = new System.Drawing.Size(280, 182); + this.dgvSystemColors.StateCommon.BackStyle = Krypton.Toolkit.PaletteBackStyle.GridBackgroundSheet; + this.dgvSystemColors.StateCommon.DataCell.Border.Rounding = 5F; + this.dgvSystemColors.StateCommon.HeaderColumn.Border.Rounding = 5F; + this.dgvSystemColors.StateCommon.HeaderRow.Border.Rounding = 5F; + this.dgvSystemColors.TabIndex = 24; + this.dgvSystemColors.DoubleClick += new System.EventHandler(this.dgvSystemColors_DoubleClick); + // + // colColor + // + this.colColor.DefaultCellStyle = dataGridViewCellStyle7; + this.colColor.HeaderText = "Color"; + this.colColor.Name = "colColor"; + this.colColor.ReadOnly = true; + this.colColor.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colColor.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.colColor.Width = 100; + // + // colName + // + this.colName.DefaultCellStyle = dataGridViewCellStyle8; + this.colName.HeaderText = "name"; + this.colName.Name = "colName"; + this.colName.ReadOnly = true; + this.colName.Resizable = System.Windows.Forms.DataGridViewTriState.False; + this.colName.Width = 200; + // + // kryptonButton1 + // + this.kryptonButton1.Location = new System.Drawing.Point(70, 302); + this.kryptonButton1.Name = "kryptonButton1"; + this.kryptonButton1.Size = new System.Drawing.Size(139, 25); + this.kryptonButton1.TabIndex = 22; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton1.Values.Text = "kryptonButton1"; + this.kryptonButton1.Click += new System.EventHandler(this.kryptonButton1_Click); + // + // btnDarker + // + this.btnDarker.Location = new System.Drawing.Point(478, 204); + this.btnDarker.Name = "btnDarker"; + this.btnDarker.Size = new System.Drawing.Size(123, 25); + this.btnDarker.StateCommon.Border.Rounding = 5F; + this.btnDarker.TabIndex = 21; + this.btnDarker.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnDarker.Values.Text = "Darker"; + this.btnDarker.Click += new System.EventHandler(this.btnDarker_Click); + // + // btnLighter + // + this.btnLighter.Location = new System.Drawing.Point(342, 204); + this.btnLighter.Name = "btnLighter"; + this.btnLighter.Size = new System.Drawing.Size(123, 25); + this.btnLighter.StateCommon.Border.Rounding = 5F; + this.btnLighter.TabIndex = 21; + this.btnLighter.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnLighter.Values.Text = "Lighter"; + this.btnLighter.Click += new System.EventHandler(this.btnLighter_Click); + // + // tbHexColor + // + this.tbHexColor.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper; + this.tbHexColor.Location = new System.Drawing.Point(613, 172); + this.tbHexColor.MaxLength = 7; + this.tbHexColor.Name = "tbHexColor"; + this.tbHexColor.Size = new System.Drawing.Size(74, 27); + this.tbHexColor.StateCommon.Border.Rounding = 5F; + this.tbHexColor.TabIndex = 20; + this.tbHexColor.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tbHexColor_KeyDown); + // + // btnCopyInverted + // + this.btnCopyInverted.Location = new System.Drawing.Point(854, 172); + this.btnCopyInverted.Name = "btnCopyInverted"; + this.btnCopyInverted.Size = new System.Drawing.Size(146, 25); + this.btnCopyInverted.StateCommon.Border.Rounding = 5F; + this.btnCopyInverted.TabIndex = 19; + this.btnCopyInverted.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnCopyInverted.Values.Text = "Copy Inverted"; + this.btnCopyInverted.Click += new System.EventHandler(this.btnCopyInverted_Click); + // + // btnCopyOriginal + // + this.btnCopyOriginal.Location = new System.Drawing.Point(698, 173); + this.btnCopyOriginal.Name = "btnCopyOriginal"; + this.btnCopyOriginal.Size = new System.Drawing.Size(148, 25); + this.btnCopyOriginal.StateCommon.Border.Rounding = 5F; + this.btnCopyOriginal.TabIndex = 19; + this.btnCopyOriginal.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnCopyOriginal.Values.Text = "Copy Original"; + this.btnCopyOriginal.Click += new System.EventHandler(this.btnCopyOriginal_Click); + // + // nudBlueInverted + // + this.nudBlueInverted.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudBlueInverted.Location = new System.Drawing.Point(1011, 138); + this.nudBlueInverted.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudBlueInverted.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudBlueInverted.Name = "nudBlueInverted"; + this.nudBlueInverted.Size = new System.Drawing.Size(74, 26); + this.nudBlueInverted.StateCommon.Border.Rounding = 5F; + this.nudBlueInverted.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudBlueInverted.TabIndex = 15; + this.nudBlueInverted.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudBlueInverted.ValueChanged += new System.EventHandler(this.nudBlueInverted_ValueChanged); + // + // nudGreenInverted + // + this.nudGreenInverted.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudGreenInverted.Location = new System.Drawing.Point(1011, 104); + this.nudGreenInverted.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudGreenInverted.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudGreenInverted.Name = "nudGreenInverted"; + this.nudGreenInverted.Size = new System.Drawing.Size(74, 26); + this.nudGreenInverted.StateCommon.Border.Rounding = 5F; + this.nudGreenInverted.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudGreenInverted.TabIndex = 16; + this.nudGreenInverted.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudGreenInverted.ValueChanged += new System.EventHandler(this.nudGreenInverted_ValueChanged); + // + // nudRedInverted + // + this.nudRedInverted.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudRedInverted.Location = new System.Drawing.Point(1011, 71); + this.nudRedInverted.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudRedInverted.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudRedInverted.Name = "nudRedInverted"; + this.nudRedInverted.Size = new System.Drawing.Size(74, 26); + this.nudRedInverted.StateCommon.Border.Rounding = 5F; + this.nudRedInverted.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudRedInverted.TabIndex = 17; + this.nudRedInverted.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudRedInverted.ValueChanged += new System.EventHandler(this.nudRedInverted_ValueChanged); + // + // nudAlphaInverted + // + this.nudAlphaInverted.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudAlphaInverted.Location = new System.Drawing.Point(1011, 38); + this.nudAlphaInverted.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudAlphaInverted.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudAlphaInverted.Name = "nudAlphaInverted"; + this.nudAlphaInverted.Size = new System.Drawing.Size(74, 26); + this.nudAlphaInverted.StateCommon.Border.Rounding = 5F; + this.nudAlphaInverted.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudAlphaInverted.TabIndex = 18; + this.nudAlphaInverted.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudAlphaInverted.ValueChanged += new System.EventHandler(this.nudAlphaInverted_ValueChanged); + // + // btnColorFromHexColor + // + this.btnColorFromHexColor.Location = new System.Drawing.Point(342, 173); + this.btnColorFromHexColor.Name = "btnColorFromHexColor"; + this.btnColorFromHexColor.Size = new System.Drawing.Size(259, 25); + this.btnColorFromHexColor.StateCommon.Border.Rounding = 5F; + this.btnColorFromHexColor.TabIndex = 14; + this.btnColorFromHexColor.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnColorFromHexColor.Values.Text = "Color from Hex Color (#FFFFFF)"; + this.btnColorFromHexColor.Click += new System.EventHandler(this.btnColorFromHexColor_Click); + // + // kryptonLabel6 + // + this.kryptonLabel6.Location = new System.Drawing.Point(852, 11); + this.kryptonLabel6.Name = "kryptonLabel6"; + this.kryptonLabel6.Size = new System.Drawing.Size(88, 20); + this.kryptonLabel6.TabIndex = 13; + this.kryptonLabel6.Values.Text = "Inverted Color"; + // + // kryptonLabel5 + // + this.kryptonLabel5.Location = new System.Drawing.Point(696, 11); + this.kryptonLabel5.Name = "kryptonLabel5"; + this.kryptonLabel5.Size = new System.Drawing.Size(86, 20); + this.kryptonLabel5.TabIndex = 13; + this.kryptonLabel5.Values.Text = "Original Color"; + // + // kryptonGroupBox2 + // + this.kryptonGroupBox2.Location = new System.Drawing.Point(852, 38); + this.kryptonGroupBox2.Name = "kryptonGroupBox2"; + // + // kryptonGroupBox2.Panel + // + this.kryptonGroupBox2.Panel.Controls.Add(this.pboxInverted); + this.kryptonGroupBox2.Size = new System.Drawing.Size(150, 127); + this.kryptonGroupBox2.TabIndex = 8; + this.kryptonGroupBox2.Values.Heading = ""; + // + // pboxInverted + // + this.pboxInverted.Dock = System.Windows.Forms.DockStyle.Fill; + this.pboxInverted.Location = new System.Drawing.Point(0, 0); + this.pboxInverted.Name = "pboxInverted"; + this.pboxInverted.Size = new System.Drawing.Size(146, 121); + this.pboxInverted.TabIndex = 6; + this.pboxInverted.TabStop = false; + // + // kryptonGroupBox1 + // + this.kryptonGroupBox1.Location = new System.Drawing.Point(696, 37); + this.kryptonGroupBox1.Name = "kryptonGroupBox1"; + // + // kryptonGroupBox1.Panel + // + this.kryptonGroupBox1.Panel.Controls.Add(this.pboxOriginal); + this.kryptonGroupBox1.Size = new System.Drawing.Size(150, 127); + this.kryptonGroupBox1.TabIndex = 8; + this.kryptonGroupBox1.Values.Heading = ""; + // + // pboxOriginal + // + this.pboxOriginal.Dock = System.Windows.Forms.DockStyle.Fill; + this.pboxOriginal.Location = new System.Drawing.Point(0, 0); + this.pboxOriginal.Name = "pboxOriginal"; + this.pboxOriginal.Size = new System.Drawing.Size(146, 121); + this.pboxOriginal.TabIndex = 7; + this.pboxOriginal.TabStop = false; + // + // cbEnableTransparancy + // + this.cbEnableTransparancy.Location = new System.Drawing.Point(342, 11); + this.cbEnableTransparancy.Name = "cbEnableTransparancy"; + this.cbEnableTransparancy.Size = new System.Drawing.Size(139, 20); + this.cbEnableTransparancy.TabIndex = 7; + this.cbEnableTransparancy.Values.Text = " Enable Transparancy"; + this.cbEnableTransparancy.CheckedChanged += new System.EventHandler(this.cbEnableTransparancy_CheckedChanged); + // + // nudBlue + // + this.nudBlue.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudBlue.Location = new System.Drawing.Point(613, 138); + this.nudBlue.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudBlue.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudBlue.Name = "nudBlue"; + this.nudBlue.Size = new System.Drawing.Size(74, 26); + this.nudBlue.StateCommon.Border.Rounding = 5F; + this.nudBlue.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudBlue.TabIndex = 4; + this.nudBlue.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudBlue.ValueChanged += new System.EventHandler(this.nudBlue_ValueChanged); + // + // nudGreen + // + this.nudGreen.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudGreen.Location = new System.Drawing.Point(613, 104); + this.nudGreen.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudGreen.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudGreen.Name = "nudGreen"; + this.nudGreen.Size = new System.Drawing.Size(74, 26); + this.nudGreen.StateCommon.Border.Rounding = 5F; + this.nudGreen.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudGreen.TabIndex = 4; + this.nudGreen.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudGreen.ValueChanged += new System.EventHandler(this.nudGreen_ValueChanged); + // + // nudRed + // + this.nudRed.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudRed.Location = new System.Drawing.Point(613, 71); + this.nudRed.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudRed.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudRed.Name = "nudRed"; + this.nudRed.Size = new System.Drawing.Size(74, 26); + this.nudRed.StateCommon.Border.Rounding = 5F; + this.nudRed.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudRed.TabIndex = 4; + this.nudRed.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudRed.ValueChanged += new System.EventHandler(this.nudRed_ValueChanged); + // + // nudAlpha + // + this.nudAlpha.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudAlpha.Location = new System.Drawing.Point(613, 38); + this.nudAlpha.Maximum = new decimal(new int[] { + 255, + 0, + 0, + 0}); + this.nudAlpha.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudAlpha.Name = "nudAlpha"; + this.nudAlpha.Size = new System.Drawing.Size(74, 26); + this.nudAlpha.StateCommon.Border.Rounding = 5F; + this.nudAlpha.StateCommon.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.nudAlpha.TabIndex = 4; + this.nudAlpha.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.nudAlpha.ValueChanged += new System.EventHandler(this.nudAlpha_ValueChanged); + // + // kryptonLabel4 + // + this.kryptonLabel4.AutoSize = false; + this.kryptonLabel4.Location = new System.Drawing.Point(312, 138); + this.kryptonLabel4.Name = "kryptonLabel4"; + this.kryptonLabel4.Size = new System.Drawing.Size(30, 25); + this.kryptonLabel4.TabIndex = 1; + this.kryptonLabel4.Values.Text = "B"; + // + // kryptonLabel3 + // + this.kryptonLabel3.AutoSize = false; + this.kryptonLabel3.Location = new System.Drawing.Point(312, 105); + this.kryptonLabel3.Name = "kryptonLabel3"; + this.kryptonLabel3.Size = new System.Drawing.Size(24, 25); + this.kryptonLabel3.TabIndex = 1; + this.kryptonLabel3.Values.Text = "G"; + // + // kryptonLabel2 + // + this.kryptonLabel2.AutoSize = false; + this.kryptonLabel2.Location = new System.Drawing.Point(312, 72); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(30, 25); + this.kryptonLabel2.TabIndex = 1; + this.kryptonLabel2.Values.Text = "R"; + // + // kryptonLabel1 + // + this.kryptonLabel1.AutoSize = false; + this.kryptonLabel1.Location = new System.Drawing.Point(312, 39); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(30, 25); + this.kryptonLabel1.TabIndex = 1; + this.kryptonLabel1.Values.Text = "A"; + // + // tbarBlue + // + this.tbarBlue.AutoSize = false; + this.tbarBlue.LargeChange = 3; + this.tbarBlue.Location = new System.Drawing.Point(342, 140); + this.tbarBlue.Maximum = 255; + this.tbarBlue.Name = "tbarBlue"; + this.tbarBlue.Size = new System.Drawing.Size(259, 27); + this.tbarBlue.TabIndex = 0; + this.tbarBlue.TickStyle = System.Windows.Forms.TickStyle.None; + this.tbarBlue.ValueChanged += new System.EventHandler(this.tbarBlue_ValueChanged); + // + // tbarGreen + // + this.tbarGreen.AutoSize = false; + this.tbarGreen.LargeChange = 3; + this.tbarGreen.Location = new System.Drawing.Point(342, 107); + this.tbarGreen.Maximum = 255; + this.tbarGreen.Name = "tbarGreen"; + this.tbarGreen.Size = new System.Drawing.Size(259, 27); + this.tbarGreen.TabIndex = 0; + this.tbarGreen.TickStyle = System.Windows.Forms.TickStyle.None; + this.tbarGreen.ValueChanged += new System.EventHandler(this.tbarGreen_ValueChanged); + // + // tbarRed + // + this.tbarRed.AutoSize = false; + this.tbarRed.LargeChange = 3; + this.tbarRed.Location = new System.Drawing.Point(342, 74); + this.tbarRed.Maximum = 255; + this.tbarRed.Name = "tbarRed"; + this.tbarRed.Size = new System.Drawing.Size(259, 27); + this.tbarRed.TabIndex = 0; + this.tbarRed.TickStyle = System.Windows.Forms.TickStyle.None; + this.tbarRed.ValueChanged += new System.EventHandler(this.tbarRed_ValueChanged); + // + // tbarAlpha + // + this.tbarAlpha.AutoSize = false; + this.tbarAlpha.LargeChange = 3; + this.tbarAlpha.Location = new System.Drawing.Point(342, 41); + this.tbarAlpha.Maximum = 255; + this.tbarAlpha.Name = "tbarAlpha"; + this.tbarAlpha.Size = new System.Drawing.Size(259, 27); + this.tbarAlpha.TabIndex = 0; + this.tbarAlpha.TickStyle = System.Windows.Forms.TickStyle.None; + this.tbarAlpha.Value = 255; + this.tbarAlpha.ValueChanged += new System.EventHandler(this.tbarAlpha_ValueChanged); + // + // ColorTestimonials + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1153, 652); + this.Controls.Add(this.kryptonPanel1); + this.Name = "ColorTestimonials"; + this.Text = "Color Testimonials"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dgvSystemColors)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit(); + this.kryptonGroupBox2.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).EndInit(); + this.kryptonGroupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pboxInverted)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit(); + this.kryptonGroupBox1.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit(); + this.kryptonGroupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pboxOriginal)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private ColorDialog colorDialog1; + private KryptonTrackBar tbarAlpha; + private KryptonLabel kryptonLabel4; + private KryptonLabel kryptonLabel3; + private KryptonLabel kryptonLabel2; + private KryptonLabel kryptonLabel1; + private KryptonTrackBar tbarBlue; + private KryptonTrackBar tbarGreen; + private KryptonTrackBar tbarRed; + private KryptonNumericUpDown nudBlue; + private KryptonNumericUpDown nudGreen; + private KryptonNumericUpDown nudRed; + private KryptonNumericUpDown nudAlpha; + private KryptonCheckBox cbEnableTransparancy; + private KryptonPictureBox pboxInverted; + private KryptonGroupBox kryptonGroupBox1; + private KryptonGroupBox kryptonGroupBox2; + private KryptonPictureBox pboxOriginal; + private KryptonLabel kryptonLabel6; + private KryptonLabel kryptonLabel5; + private KryptonButton btnColorFromHexColor; + private KryptonButton btnCopyOriginal; + private KryptonNumericUpDown nudBlueInverted; + private KryptonNumericUpDown nudGreenInverted; + private KryptonNumericUpDown nudRedInverted; + private KryptonNumericUpDown nudAlphaInverted; + private KryptonTextBox tbHexColor; + private KryptonButton btnCopyInverted; + private KryptonButton btnLighter; + private KryptonButton btnDarker; + private KryptonButton kryptonButton1; + private KryptonDataGridView dgvSystemColors; + private KryptonDataGridViewTextBoxColumn colColor; + private KryptonDataGridViewTextBoxColumn colName; + private KryptonTextBox tbDgvSystemColorFilter; + private ButtonSpecAny btnClearDgvSystemColorFilter; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.cs b/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.cs new file mode 100644 index 000000000..586bb819d --- /dev/null +++ b/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.cs @@ -0,0 +1,333 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Reflection; +using Krypton.Toolkit; + +namespace TestForm +{ + public partial class ColorTestimonials : KryptonForm + { + private readonly RectangleF _rectOriginalImage; + private readonly RectangleF _rectInvertedImage; + private readonly List _systemColors; + + public ColorTestimonials() + { + InitializeComponent(); + + _systemColors = new(); + cbEnableTransparancy.Checked = false; + + _rectOriginalImage = new RectangleF(0, 0, pboxOriginal.Size.Width, pboxOriginal.Size.Height); + _rectInvertedImage = new RectangleF(0, 0, pboxInverted.Size.Width, pboxInverted.Size.Height); + + tbarAlpha.Enabled = false; + tbarAlpha.Value = ColorInverting.ChannelMinValue; + tbarRed.Value = ColorInverting.ChannelMinValue; + tbarGreen.Value = ColorInverting.ChannelMinValue; + tbarBlue.Value = ColorInverting.ChannelMinValue; + + cbEnableTransparancy_CheckedChanged(null!, null!); + + GetSystemColors(); + FillDgvSystemColors(); + } + + private void GetSystemColors() + { + foreach (PropertyInfo propertyInfo in typeof(System.Drawing.Color).GetProperties(BindingFlags.Static | BindingFlags.Public)) + { + if (propertyInfo.GetValue(0) is Color color && color.Name.Length > 0) + { + _systemColors.Add(color); + } + } + } + + private void FillDgvSystemColors() + { + dgvSystemColors.Rows.Clear(); + + for ( int i = 0 ; i < _systemColors.Count ; i++) + { + dgvSystemColors.Rows.Add(); + dgvSystemColors[0, i].Value = ""; + dgvSystemColors[0, i].Style.BackColor = _systemColors[i]; + dgvSystemColors[1, i].Value = _systemColors[i].Name; + } + } + + private void tbarAlpha_ValueChanged(object sender, EventArgs e) + { + nudAlpha.Value = tbarAlpha.Value; + SetColor(); + } + + private void tbarRed_ValueChanged(object sender, EventArgs e) + { + nudRed.Value = tbarRed.Value; + SetColor(); + } + + private void tbarGreen_ValueChanged(object sender, EventArgs e) + { + nudGreen.Value = tbarGreen.Value; + SetColor(); + } + + private void tbarBlue_ValueChanged(object sender, EventArgs e) + { + nudBlue.Value = tbarBlue.Value; + SetColor(); + } + + private void UpdateOriginalColor() + { + // Original color + Color color = cbEnableTransparancy.Checked + ? Color.FromArgb((byte)tbarAlpha.Value, (byte)tbarRed.Value, (byte)tbarGreen.Value, (byte)tbarBlue.Value) + : Color.FromArgb((byte)tbarRed.Value, (byte)tbarGreen.Value, (byte)tbarBlue.Value); + + SetColorImage(pboxOriginal, in color, in _rectOriginalImage); + } + + private Color UpdateInvertedColor() + { + // Inverted color + Color color = cbEnableTransparancy.Checked + ? ColorInverting.InvertARGBFromInt((byte)tbarAlpha.Value, (byte)tbarRed.Value, (byte)tbarGreen.Value, (byte)tbarBlue.Value) + : ColorInverting.InvertRGBFromInt((byte)tbarRed.Value, (byte)tbarGreen.Value, (byte)tbarBlue.Value); + + SetColorImage(pboxInverted, in color, in _rectInvertedImage); + + return color; + } + + private void SetColor() + { + // Update and get colors + UpdateOriginalColor(); + Color color = UpdateInvertedColor(); + + // Update displayed inverted values + if (cbEnableTransparancy.Checked) + { + nudAlphaInverted.Value = color.A; + } + + nudRedInverted.Value = color.R; + nudGreenInverted.Value = color.G; + nudBlueInverted.Value = color.B; + } + + private void SetColorImage(KryptonPictureBox kryptonPictureBox, in Color color, in RectangleF rect) + { + Bitmap b = new Bitmap(kryptonPictureBox.Size.Width, kryptonPictureBox.Size.Height); + Graphics g = Graphics.FromImage(b); + + g.FillRectangle(new SolidBrush(color), rect); + + kryptonPictureBox.Image = b; + } + + private void nudAlpha_ValueChanged(object sender, EventArgs e) + { + tbarAlpha.Value = (int)nudAlpha.Value; + } + + private void nudRed_ValueChanged(object sender, EventArgs e) + { + tbarRed.Value = (int)nudRed.Value; + } + + private void nudGreen_ValueChanged(object sender, EventArgs e) + { + tbarGreen.Value = (int)nudGreen.Value; + } + + private void nudBlue_ValueChanged(object sender, EventArgs e) + { + tbarBlue.Value = (int)nudBlue.Value; + } + + private void cbEnableTransparancy_CheckedChanged(object sender, EventArgs e) + { + tbarAlpha.Enabled = cbEnableTransparancy.Checked; + nudAlpha.Enabled = cbEnableTransparancy.Checked; + nudAlphaInverted.Enabled = cbEnableTransparancy.Checked; + + SetColor(); + } + + private void nudAlphaInverted_ValueChanged(object sender, EventArgs e) + { + nudAlpha.Value = ColorInverting.Invert((byte)nudAlphaInverted.Value); + } + + private void nudRedInverted_ValueChanged(object sender, EventArgs e) + { + nudRed.Value = ColorInverting.Invert((byte)nudRedInverted.Value); + } + + private void nudGreenInverted_ValueChanged(object sender, EventArgs e) + { + nudGreen.Value = ColorInverting.Invert((byte)nudGreenInverted.Value); + } + + private void nudBlueInverted_ValueChanged(object sender, EventArgs e) + { + nudBlue.Value = ColorInverting.Invert((byte)nudBlueInverted.Value); + } + private void btnColorFromHexColor_Click(object sender, EventArgs e) + { + CheckHexColorInput(); + } + + private bool CheckHexColorInput() + { + bool result = false; + + if (ColorInverting.IsHexColor(tbHexColor.Text)) + { + if (cbEnableTransparancy.Checked) + { + nudAlpha.Value = ColorInverting.ChannelMaxValue; + } + + nudRed.Value = Convert.ToInt32(tbHexColor.Text.Substring(1, 2), 16); + nudGreen.Value = Convert.ToInt32(tbHexColor.Text.Substring(3, 2), 16); + nudBlue.Value = Convert.ToInt32(tbHexColor.Text.Substring(5, 2), 16); + + result = true; + } + else + { + KryptonMessageBox.Show( + "Incorrect hexadecimal input string.\n" + + "Use the format \"#FFFFFF\"", + this.Text, + icon: KryptonMessageBoxIcon.Exclamation, + buttons: KryptonMessageBoxButtons.OK); + } + + return result; + } + + private void tbHexColor_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode.Equals(Keys.Enter)) + { + CheckHexColorInput(); + } + } + + private void btnCopyOriginal_Click(object sender, EventArgs e) + { + if (cbEnableTransparancy.Checked) + { + Clipboard.SetText( + $"Color.FromArgb({((int)nudAlpha.Value)}, {((int)nudRed.Value)}, {((int)nudGreen.Value)}, {((int)nudBlue.Value)});"); + } + else + { + Clipboard.SetText( + $"Color.FromArgb({((int)nudRed.Value)}, {((int)nudGreen.Value)}, {((int)nudBlue.Value)});"); + } + } + + private void btnCopyInverted_Click(object sender, EventArgs e) + { + if (cbEnableTransparancy.Checked) + { + Clipboard.SetText( + $"Color.FromArgb({((int)nudAlphaInverted.Value)}, {((int)nudRedInverted.Value)}, {((int)nudGreenInverted.Value)}, {((int)nudBlueInverted.Value)});"); + } + else + { + Clipboard.SetText( + $"Color.FromArgb({((int)nudRedInverted.Value)}, {((int)nudGreenInverted.Value)}, {((int)nudBlueInverted.Value)});"); + } + } + + private void btnLighter_Click(object sender, EventArgs e) + { + Color color = ControlPaint.Light(Color.FromArgb(((int)nudRed.Value), ((int)nudGreen.Value), ((int)nudBlue.Value))); + + nudRed.Value = color.R; + nudGreen.Value = color.G; + nudBlue.Value = color.B; + } + + private void btnDarker_Click(object sender, EventArgs e) + { + Color color = ControlPaint.Dark(Color.FromArgb(((int)nudRed.Value), ((int)nudGreen.Value), ((int)nudBlue.Value))); + + nudRed.Value = color.R; + nudGreen.Value = color.G; + nudBlue.Value = color.B; + } + + private void kryptonButton1_Click(object sender, EventArgs e) + { + + } + + private void dgvSystemColors_DoubleClick(object sender, EventArgs e) + { + if (dgvSystemColors.SelectedRows.Count == 1) + { + Color color = dgvSystemColors.SelectedRows[0].Cells[0].Style.BackColor; + + if (cbEnableTransparancy.Checked) + { + nudAlpha.Value = color.A; + } + + nudRed.Value = color.R; + nudGreen.Value = color.G; + nudBlue.Value = color.B; + } + } + + private void btnClearDgvSystemColorFilter_Click(object sender, EventArgs e) + { + tbDgvSystemColorFilter.Text = ""; + } + + private void tbDgvSystemColorFilter_TextChanged(object sender, EventArgs e) + { + if (tbDgvSystemColorFilter.Text.Length == 0) + { + FillDgvSystemColors(); + } + else + { + dgvSystemColors.Rows.Clear(); + + string upperFilter = tbDgvSystemColorFilter.Text.ToUpper(); + int rowIndex; + + for (int i = 0; i < _systemColors.Count; i++) + { + if (_systemColors[i].Name.ToUpper().Contains(upperFilter)) + { + rowIndex = dgvSystemColors.Rows.Add(); + dgvSystemColors[0, rowIndex].Value = ""; + dgvSystemColors[0, rowIndex].Style.BackColor = _systemColors[i]; + dgvSystemColors[1, rowIndex].Value = _systemColors[i].Name; + } + } + } + } + } +} diff --git a/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.resx b/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.resx new file mode 100644 index 000000000..aa0ca0f64 --- /dev/null +++ b/Source/Krypton Components/TestForm/ColorTestimonials/ColorTestimonials.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CommandLinkButtons.Designer.cs b/Source/Krypton Components/TestForm/CommandLinkButtons.Designer.cs new file mode 100644 index 000000000..929bf60de --- /dev/null +++ b/Source/Krypton Components/TestForm/CommandLinkButtons.Designer.cs @@ -0,0 +1,242 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class CommandLinkButtons + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CommandLinkButtons)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonCommandLinkButton5 = new Krypton.Toolkit.KryptonCommandLinkButton(); + this.kryptonCommandLinkButton4 = new Krypton.Toolkit.KryptonCommandLinkButton(); + this.kryptonCommandLinkButton3 = new Krypton.Toolkit.KryptonCommandLinkButton(); + this.kryptonCommandLinkButton2 = new Krypton.Toolkit.KryptonCommandLinkButton(); + this.kryptonAlternateCommandLinkButton1 = new Krypton.Toolkit.KryptonAlternateCommandLinkButton(); + this.kryptonCommandLinkButton1 = new Krypton.Toolkit.KryptonCommandLinkButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonCommandLinkButton5); + this.kryptonPanel1.Controls.Add(this.kryptonCommandLinkButton4); + this.kryptonPanel1.Controls.Add(this.kryptonCommandLinkButton3); + this.kryptonPanel1.Controls.Add(this.kryptonCommandLinkButton2); + this.kryptonPanel1.Controls.Add(this.kryptonAlternateCommandLinkButton1); + this.kryptonPanel1.Controls.Add(this.kryptonCommandLinkButton1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(4); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(931, 471); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonCommandLinkButton5 + // + this.kryptonCommandLinkButton5.ButtonStyle = Krypton.Toolkit.ButtonStyle.Standalone; + this.kryptonCommandLinkButton5.CommandLinkTextValues.Description = "What happens when the text is really long, \r\nand wants to go off the edge?\r\nThen " + + "Use a Multi-line ;-)\r\n"; + this.kryptonCommandLinkButton5.CommandLinkTextValues.Heading = "&Control the World"; + this.kryptonCommandLinkButton5.Location = new System.Drawing.Point(479, 15); + this.kryptonCommandLinkButton5.Margin = new System.Windows.Forms.Padding(4); + this.kryptonCommandLinkButton5.Name = "kryptonCommandLinkButton5"; + this.kryptonCommandLinkButton5.OverrideFocus.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton5.OverrideFocus.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton5.OverrideFocus.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton5.Size = new System.Drawing.Size(425, 106); + this.kryptonCommandLinkButton5.StateCommon.Back.Color1 = System.Drawing.SystemColors.GradientActiveCaption; + this.kryptonCommandLinkButton5.StateCommon.Back.Color2 = System.Drawing.SystemColors.ActiveCaption; + this.kryptonCommandLinkButton5.StateCommon.Back.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton5.StateCommon.Border.Color1 = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.kryptonCommandLinkButton5.StateCommon.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton5.StateCommon.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton5.StateCommon.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton5.StateCommon.Border.Rounding = 6F; + this.kryptonCommandLinkButton5.StateCommon.Border.Width = 2; + this.kryptonCommandLinkButton5.StateCommon.Content.LongText.MultiLine = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton5.StateCommon.Content.LongText.MultiLineH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton5.StateCommon.Content.LongText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton5.StateCommon.Content.LongText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.kryptonCommandLinkButton5.StateCommon.Content.LongText.Trim = Krypton.Toolkit.PaletteTextTrim.Word; + this.kryptonCommandLinkButton5.StateCommon.Content.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton5.StateCommon.Content.ShortText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.kryptonCommandLinkButton5.TabIndex = 5; + // + // kryptonCommandLinkButton4 + // + this.kryptonCommandLinkButton4.ButtonStyle = Krypton.Toolkit.ButtonStyle.NavigatorMini; + this.kryptonCommandLinkButton4.CommandLinkImageValues.Image = ((System.Drawing.Image)(resources.GetObject("kryptonCommandLinkButton4.CommandLinkImageValues.Image"))); + this.kryptonCommandLinkButton4.CommandLinkTextValues.Description = " Demo the Shortcut display and rounded borders"; + this.kryptonCommandLinkButton4.CommandLinkTextValues.Heading = "&Disabled Navigator Mini style"; + this.kryptonCommandLinkButton4.Enabled = false; + this.kryptonCommandLinkButton4.Location = new System.Drawing.Point(17, 388); + this.kryptonCommandLinkButton4.Margin = new System.Windows.Forms.Padding(4); + this.kryptonCommandLinkButton4.Name = "kryptonCommandLinkButton4"; + this.kryptonCommandLinkButton4.OverrideFocus.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton4.OverrideFocus.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton4.OverrideFocus.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton4.Size = new System.Drawing.Size(453, 68); + this.kryptonCommandLinkButton4.StateCommon.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton4.StateCommon.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton4.StateCommon.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton4.StateCommon.Border.Rounding = 4F; + this.kryptonCommandLinkButton4.StateCommon.Border.Width = 2; + this.kryptonCommandLinkButton4.StateCommon.Content.LongText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton4.StateCommon.Content.LongText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.kryptonCommandLinkButton4.StateCommon.Content.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton4.StateCommon.Content.ShortText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.kryptonCommandLinkButton4.TabIndex = 4; + // + // kryptonCommandLinkButton3 + // + this.kryptonCommandLinkButton3.ButtonStyle = Krypton.Toolkit.ButtonStyle.NavigatorMini; + this.kryptonCommandLinkButton3.CommandLinkTextValues.Description = " Demo the Shortcut display and rounded borders"; + this.kryptonCommandLinkButton3.CommandLinkTextValues.Heading = "&Navigator Mini style"; + this.kryptonCommandLinkButton3.Location = new System.Drawing.Point(16, 304); + this.kryptonCommandLinkButton3.Margin = new System.Windows.Forms.Padding(4); + this.kryptonCommandLinkButton3.Name = "kryptonCommandLinkButton3"; + this.kryptonCommandLinkButton3.OverrideFocus.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton3.OverrideFocus.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton3.OverrideFocus.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton3.Size = new System.Drawing.Size(455, 75); + this.kryptonCommandLinkButton3.StateCommon.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton3.StateCommon.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton3.StateCommon.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton3.StateCommon.Border.Rounding = 4F; + this.kryptonCommandLinkButton3.StateCommon.Border.Width = 2; + this.kryptonCommandLinkButton3.StateCommon.Content.LongText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton3.StateCommon.Content.LongText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.kryptonCommandLinkButton3.StateCommon.Content.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton3.StateCommon.Content.ShortText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.kryptonCommandLinkButton3.TabIndex = 3; + // + // kryptonCommandLinkButton2 + // + this.kryptonCommandLinkButton2.ButtonStyle = Krypton.Toolkit.ButtonStyle.Standalone; + this.kryptonCommandLinkButton2.CommandLinkTextValues.Description = " Here be the extra Text with some spaces"; + this.kryptonCommandLinkButton2.CommandLinkTextValues.Heading = "Standalone Style"; + this.kryptonCommandLinkButton2.Location = new System.Drawing.Point(16, 222); + this.kryptonCommandLinkButton2.Margin = new System.Windows.Forms.Padding(4); + this.kryptonCommandLinkButton2.Name = "kryptonCommandLinkButton2"; + this.kryptonCommandLinkButton2.OverrideFocus.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton2.OverrideFocus.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton2.OverrideFocus.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton2.Size = new System.Drawing.Size(455, 75); + this.kryptonCommandLinkButton2.StateCommon.Content.LongText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton2.StateCommon.Content.LongText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.kryptonCommandLinkButton2.StateCommon.Content.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton2.StateCommon.Content.ShortText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.kryptonCommandLinkButton2.TabIndex = 2; + // + // kryptonAlternateCommandLinkButton1 + // + this.kryptonAlternateCommandLinkButton1.Location = new System.Drawing.Point(16, 15); + this.kryptonAlternateCommandLinkButton1.Margin = new System.Windows.Forms.Padding(4); + this.kryptonAlternateCommandLinkButton1.Name = "kryptonAlternateCommandLinkButton1"; + this.kryptonAlternateCommandLinkButton1.Size = new System.Drawing.Size(455, 85); + this.kryptonAlternateCommandLinkButton1.StateCommon.Content.Image.ImageH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonAlternateCommandLinkButton1.StateCommon.Content.Image.ImageV = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.kryptonAlternateCommandLinkButton1.StateCommon.Content.LongText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonAlternateCommandLinkButton1.StateCommon.Content.LongText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.kryptonAlternateCommandLinkButton1.StateCommon.Content.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonAlternateCommandLinkButton1.StateCommon.Content.ShortText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.kryptonAlternateCommandLinkButton1.TabIndex = 1; + this.kryptonAlternateCommandLinkButton1.Values.ExtraText = "Text here is forced in to the lower part of the button"; + this.kryptonAlternateCommandLinkButton1.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonAlternateCommandLinkButton1.Values.Image"))); + this.kryptonAlternateCommandLinkButton1.Values.Text = "Normal Krypton Button"; + // + // kryptonCommandLinkButton1 + // + this.kryptonCommandLinkButton1.CommandLinkTextValues.Description = "Here be the \"Note Text\""; + this.kryptonCommandLinkButton1.CommandLinkTextValues.Heading = "Default Ext Command Link"; + this.kryptonCommandLinkButton1.Location = new System.Drawing.Point(16, 122); + this.kryptonCommandLinkButton1.Margin = new System.Windows.Forms.Padding(4); + this.kryptonCommandLinkButton1.Name = "kryptonCommandLinkButton1"; + this.kryptonCommandLinkButton1.OverrideFocus.Border.Draw = Krypton.Toolkit.InheritBool.True; + this.kryptonCommandLinkButton1.OverrideFocus.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.kryptonCommandLinkButton1.OverrideFocus.Border.GraphicsHint = Krypton.Toolkit.PaletteGraphicsHint.AntiAlias; + this.kryptonCommandLinkButton1.Size = new System.Drawing.Size(455, 75); + this.kryptonCommandLinkButton1.StateCommon.Content.LongText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton1.StateCommon.Content.LongText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.kryptonCommandLinkButton1.StateCommon.Content.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonCommandLinkButton1.StateCommon.Content.ShortText.TextV = Krypton.Toolkit.PaletteRelativeAlign.Center; + this.kryptonCommandLinkButton1.TabIndex = 0; + // + // CommandLinkButtons + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(931, 471); + this.Controls.Add(this.kryptonPanel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "CommandLinkButtons"; + this.StateCommon.Border.Rounding = 10F; + this.StateCommon.Border.Width = 8; + this.Text = "Form7"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonCommandLinkButton kryptonCommandLinkButton1; + private Krypton.Toolkit.KryptonCommandLinkButton kryptonCommandLinkButton5; + private Krypton.Toolkit.KryptonCommandLinkButton kryptonCommandLinkButton4; + private Krypton.Toolkit.KryptonCommandLinkButton kryptonCommandLinkButton3; + private Krypton.Toolkit.KryptonCommandLinkButton kryptonCommandLinkButton2; + private Krypton.Toolkit.KryptonAlternateCommandLinkButton kryptonAlternateCommandLinkButton1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CommandLinkButtons.cs b/Source/Krypton Components/TestForm/CommandLinkButtons.cs new file mode 100644 index 000000000..7f53690c5 --- /dev/null +++ b/Source/Krypton Components/TestForm/CommandLinkButtons.cs @@ -0,0 +1,21 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class CommandLinkButtons : KryptonForm + { + public CommandLinkButtons() + { + InitializeComponent(); + //StateCommon.Border.Draw = InheritBool.False; + //StateCommon.Border.DrawBorders = PaletteDrawBorders.Top; + } + } +} diff --git a/Source/Krypton Components/TestForm/CommandLinkButtons.resx b/Source/Krypton Components/TestForm/CommandLinkButtons.resx new file mode 100644 index 000000000..99dd22bf3 --- /dev/null +++ b/Source/Krypton Components/TestForm/CommandLinkButtons.resx @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + CTBxA2IVhFXPAHmEuvYNknl4bhjQSjZKBBrA96DR9fe9l4tgYOp0xlC7owPVclFGqdqohrwepSLrqfHZ + vcdNTxSZ5qH+keJ+9oM7fwA3Wtasc92hUwAAAABJRU5ErkJggg== + + + + + AAABAAUAMDAAAAEAIACoJQAAVgAAACAgAAABACAAqBAAAP4lAAAgIAAAAQAIAKgIAACmNgAAEBAAAAEA + IABoBAAATj8AABAQAAABAAgAaAUAALZDAAAoAAAAMAAAAGAAAAABACAAAAAAAABIAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCioqKgYAAAAAs+SwWJHMj/+Qy47/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/kMuO/36xfO4qVSoG2P7WcKjspv93xXf/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/b7Vv/5XRk/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + eP+R5Jr/dt13/3zff/+F4Yv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/bspv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/943nr/huGM/4fh + jf+O45f/luWg/3feeP+m6bT/sOzA/4zjlP+x7cH/heGL/3bdd/+N45X/heGL/4Hghf+L4pP/fN9//4Lg + h/+I4Y//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+A4IT/uvDM/7/x0/+X5aL/vfHQ/3bdd/+v7L//wfLU/4zjlP+98dD/w/PX/4nij/++8dH/i+KS/8Dy + 1P++8dH/n+is/6bptP+578v/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+A4IT/xfPa/7zwzv+a5qX/w/PY/7Ltw/+78M7/q+u6/5/nq//B8tX/w/PX/6fq + tf++8dH/jOKT/8Dx0//C8tb/neep/8Dy0/++8dH/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/9/34P/q+u6/7DswP+C4If/geCG/3/fg/+B4Ib/e95+/4Df + hP+D4Ij/ft+B/5Tlnv+p6rj/ft+C/3reff+B4IX/et58/4PgiP9833//dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/d954/3jeef943nn/eN55/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fe + eP943nn/eN55/3jeef933nj/dt13/3feeP943nn/eN55/3jeef943nn/eN55/3jeef943nn/eN55/3je + ef943nn/eN55/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/8/35f/h/fv/4f37/+H9+/+m6bT/dt13/6nquP/h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/n+er/+H9+//h/fv/4f37/9L46v933nj/dt13/6nquP/h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/933nj/0fjo/+H9+//h/fv/4f37/5/nq/923Xf/dt13/6Tp + sf/Y+vD/2Prw/9j68P/b+/T/4f37/+H9+//h/fv/2vvz/9j68P/Y+vD/2Prw/7vwzv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+j6bD/4f37/+H9+//h/fv/zvbk/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3jeev/U+ez/4f37/+H9 + +//h/fv/mOWj/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6fq + tf/h/fv/4f37/+H9+//J9d7/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/et58/9f57//h/fv/4f37/+H9+/+R5Jr/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/2vvy/5jl + o/+A4IT/dt13/3bdd/923Xf/q+u7/+H9+//h/fv/4f37/8Pz2P923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/4f37/+H9+//h/fv/0vjp/7Ltwv+F4Yr/2frx/+H9+//h/fv/3/35/4rikv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/mual/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//g/fn/4f37/+H9+//h/fv/vvHR/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/ouiv/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//e/Pf/heGL/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/sOzA/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1/rv/47jlv+n6rX/yPTd/+H9 + +//h/fv/4f37/+H9+//W+e7/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/xfPZ/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6LosP+s67z/rOu8/6Po + sf923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/5Tknf/U+Ov/4f37/+H9+//h/fv/yvXf/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/3fz2/33fgP923Xf/dt13/3bdd/923Xf/dt13/9P4 + 6v/h/fv/4f37/9D35v923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/9934H/zPbi/+H9+//h/fv/4f37/7Htwf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/yfXe/7fuyP923Xf/dt13/3bd + d/923Xf/e95+/978+P/h/fv/4f37/8j03f923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/ft+C/9T57P/h/fv/4f37/978 + 9/+H4Y3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//g/fr/o+mw/+D9 + +v+w7cH/ed57/3bdd/923Xf/te7G/+H9+//h/fv/4f37/7jvyv923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5Xl + n//h/fv/4f37/+H9+/+/8dL/dt13/3bdd/923Xf/dt13/3bdd//F89r/3fz3/9389//f/fn/4f37/+H9 + +//Y+vD/geCF/9/9+f/h/fv/3Pv1/8/35v/W+e7/4f37/+H9+//h/fv/4f37/5flof923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd//E89n/4f37/+H9+//f/Pj/geCG/3bdd/923Xf/dt13/3bdd//I9N7/4f37/+H9 + +//h/fv/4f37/+H9+//N9uP/dt13/7nvy//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/yvXg/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+U5Z7/4f37/+H9+//h/fv/reu8/3bdd/923Xf/dt13/3bd + d//I9N3/4f37/+H9+//h/fv/4f37/+H9+//B8tT/dt13/3jeev+78M3/4P36/+H9+//h/fv/4f37/+H9 + +//E89n/f9+D/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/1vnt/+H9+//h/fv/yvXg/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/guCH/57n + qv+l6bT/n+es/4Xhi/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/vfHQ/+H9 + +//h/fv/3vz3/3jeef923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/p+q1/+H9+//h/fv/4f37/5Djmf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/lOSd/+H9+//h/fv/4f37/6LosP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/heGK/+H9+//h/fv/4f37/63svf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/ft+B/+H9+//h/fv/4f37/7Lt + w/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/fN9+/4Dghf+A4IX/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt14/4Dg + hf+A4IX/gOCF/3vefv923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/et58/37fgv933nj/g+CI/3feeP923Xf/e95+/3bd + d/973n7/et58/3neev97337/dt13/3feeP+B4IX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/eN55/4Pg + iP923Xf/eN55/3/fg/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/w/PX/8Dy1P+Y5qP/reu8/7rw + zf923Xf/quu5/3bdd/+L4pL/rOu8/4Pgh/+478r/ouiw/7rwzP+378j/o+mw/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/kOSZ/6/sv/+y7cP/vPDP/7zwz/+V5Z//b8pv/5HMj/8zTDMK2P7WcK7urP963nv/uvDM/8Ly + 1v9834D/qeu4/6zru/923Xf/dt13/3jeev+B4Ib/u/DN/6Dorf+378n/vvHS/63svf/B8tT/keSa/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+e56r/w/PX/7zwz/+P45j/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/vvHR/8Tz2P+N45T/uO/J/7fvyf923Xf/dt13/4PgiP/J9N//zfbj/6fqtv+78M7/su3C/7Pt + xP+/8dL/mOWi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kuSb/7jvyv+t673/pemz/7nvy/963n3/b8pv/5HM + j/8zTDMK2P7WcK/urf+M4oz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/gdeB/5TQkv8zTDMK5f7lb6vuqf+177P/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/re6r/5rZmP9MZkwK////EPj++G/1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cOf85FYAAAAA////////AACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAP// + /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAJrQmiGEuoRHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4G1fUVvn28QvPC6jobN + hf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HA + cf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/e756/YW8 + gUXF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/et58/3vefv983n7/juOW/4Pg + iP+L4pP/eN16/3refP953Xv/et59/3fdef963Xz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/92ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3vefv+t7Lz/m+an/6Pp + sP+e56v/sOzA/63svv+n6rX/peqz/5Pkm/+w7cD/l+Wi/6jpt/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/fN6A/7zw + 0P+c5qj/ruy+/6rruf+d56j/quu5/63svP+y7cP/kuOa/7DswP+a5qb/rey9/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/933Xn/g+CI/3vefv943Xr/eN16/3fdef953Xv/ed17/4Hfhf933Xn/eN16/3fdef933Xn/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd/+w7b//xvXa/6zsuv923Xf/dt13/3bdd/923Xf/dt13/4bhi//C89X/xvXa/6Tq + sf9/34P/vPHN/8b12v/G9dr/xvXa/8b12v/G9dr/xvXa/8Dz0/+E4In/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/uO/K/+H9 + +//Z+vL/ieKQ/4Hghv/R9+f/3vz4/9/8+f/h/fv/4f37/9/8+P/e/Pj/1vnv/4jhjv923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/47j + lv/e/Pf/4f37/77xz/943Xr/eN16/4vjkf+O5JX/q+u6/+H9+//h/fv/oOit/47klf+M45P/et58/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bd + d/953Xr/wvPV/+H9+//c+/X/iOGP/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+H9+/+O45f/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bd + d/923Xf/dt13/43jk//b+/T/4f37/6/tvv923Xf/dt13/3bdd/923Xf/dt13/5zmp//h/fv/4f37/47j + l/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9 + +//P9+X/nOin/4vjkf983n//wPHV/+H9+//V+e3/heGK/3bdd/923Xf/dt13/3bdd/923Xf/nOan/+H9 + +//h/fv/juOX/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bd + d//D8tf/4f37/+H9+//h/fv/2/v0/8z24P/f/Pn/4f37/7Puw/933Xj/dt13/3bdd/923Xf/dt13/3bd + d/+c5qf/4f37/+H9+/+V5J//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fi + h/923Xf/dt13/8Py1//h/fv/2fry/9D35//c+/X/4f37/+H9+//c+/b/f9+E/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/5zmp//h/fv/4f37/6Xpsf923Xf/dt13/3bdd/943Xr/guCH/4Lgh/943Xr/d8p3/4S+ + hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/+/8tL/gN+E/5Hkmf/L9eD/4f37/978+P+m6rP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/nOan/+H9+//h/fv/wPLS/3bdeP923Xf/dt13/4rij//Q9ub/z/bm/4ni + jv93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3ndfP/B8tX/4Pz6/9f5 + 7/+K4pD/dt13/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+D9+v+/8dL/k+Wc/3bdd/923Xf/nuip/+D8 + +v/Z+fH/ieGO/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/4Lg + h//R+Oj/4Pz6/7zwzv923Xf/dt13/3bdd/+i6a7/w/TX/8324//h/fv/2/r0/57oqv/X+u//wPLT/7zx + zv/Y+vH/4f37/9D35v+A34P/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bd + d/923Xf/dt13/6fqtf/h/fv/3/z4/4bhjP923Xf/dt13/7Puw//h/fv/4f37/+H9+//P9ub/guCG/8v1 + 4f/g/fr/4f37/+H9+//b+/T/puqz/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y + 0P923Xf/dt13/3bdd/923Xf/e95+/9r68v/h/fv/r+2+/3bdd/923Xf/heGK/5DlmP+Q5Zj/kOWY/4ri + kP923Xf/g+CH/57oqf+y7cP/quu5/43jlf933Xn/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py + 1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/wfLV/+H9+//G9Nn/d915/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/3bdd/+q67j/4f37/8/25v9/3oP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bdd/923Xf/dt13/5rnpP/h/fv/1Pjr/4Pg + iP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/47jlf+Y56L/jOOU/3bdd/923Xf/dt13/3bdd/923Xf/f9+E/5jn + ov+T5Z3/et58/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/ed17/3fdef993oD/dt13/3jdev943Xr/eN16/3nd + e/923Xf/fN5+/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/ed16/3jdev943Xr/d915/3fKd/+EvoRHxfjEk4fih//A8dT/nOeo/67rvv+G4Iv/k+Sb/4Pf + if+l6bP/q+u7/6zrvP+478r/k+Wd/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+S5Jz/reu9/73w0P+d5qn/d8p3/4S+hEfF+MSTh+KH/77w0f+W5qH/s+7E/4Xg + iv943Xr/qOu3/7/x0v+07cb/s+3E/7zwzv+N4pX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/5Xkn/+s67z/r+zA/43jlf93ynf/hL6ER8f2xZOb55v/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/43Zjf+IwYhH4PfgQtj2 + 2JPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r4 + 2pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT0vTQjrnn + uSH/////AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABgAAAASgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAB1wXX/est6/3bd + d/923Xj/d914/3jdef943Xr/eN56/3nee/953nz/et58/3veff97333/e95+/3zef/9833//fd+A/33f + gf9+34H/f9+D/4rQif+S25H/gOCE/4Hghv+C4If/g+CH/4ThiP+F4Yr/heGL/4bhiv+G4ov/huGM/4fh + jP+H4Y3/h+KM/4vji/+I4o7/ieKP/4zjjP+J4pD/iuOQ/4rjkf+L4pL/i+OS/4zilP+N45T/jeOV/47j + lf+P5Jb/j+SX/4/ll/+Q5Jf/kOSY/5HlmP+R5Zn/kuSa/5Lkm/+S5Zv/k+Wa/5Plm/+T5pz/lOWd/5Tl + nv+V5Z//luaf/5fnn/+W5aD/l+ag/5jmov+Z5qP/meej/5rmpf+a56X/m+el/5vnpv+c56j/muij/53o + qP+e6Kj/n+iq/5/oq/+f6av/n+is/6Dpn/+g6av/oOmt/6Horf+h6a3/oOqs/6HqrP+i6q7/pOmx/6Tp + sv+l6bL/pOqw/6Xqs/+m6rP/puuz/6jrtf+o67b/qeu3/6jstf+p7Lf/qeu4/6rruP+q67n/q+y5/63r + vf+s7Lr/rOy7/63su/+t7L3/ru29/6/sv/+v7b//sO6//7DtwP+x7sH/s+3D/7Luwv+z7sT/tO7F/7Tv + xf+378n/tvDG/7fwx/+38Mj/uPDJ/7nwyv+58Mv/ufHK/7rxy/+78M3/u/LM/7zwzv+98tD/vvHQ/77x + 0f+/8dL/vvPQ/7/z0f+/8tL/wPLT/8Dz0//A8tT/xPPY/8T02P/H9dv/xvTc/8f03P/H9dz/yvXf/8v1 + 4P/L9uD/y/bh/8z24f/M9uL/zvfj/8/35f/Q9+f/0ffo/9D45//U+ez/1vnt/9b57v/X+e//1/rv/9j6 + 8f/b+/P/2/v0/9z79f/d/Pb/3fz3/9789//e/Pj/3/z4/9/8+f/g/fn/4P36/+H9+/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FRQAFBQA + FBQAFBQAFAAUFAAUFAAUFAAUFAAUABQUAABqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFH0j + AgICAgICAgMJEhItIC8IDQsOCg4CAgICAgICBQAUfSMCBAICAgICDGhOTUdsbFRPP2xDWwICAgICAgIC + ARR9IwICAgICAgIMhk9kXUVeYnU6akxiAgICAgICAgYAFH0jAgICAgICAgUmEgoKBQoLGgUIBwgCAgIC + AgICAgEUfSMCAgICAgICAgICAgICAgICAgICAgICAgICAgIFABR9IwICAgICAgICAgICAgICAgICAgIC + AgICAgICAgIBFH0jAgICBQICAgICAgIEBQICBwQEBQUCAgQCAgICBgAUfSMCAm6LWQICAgICKoOIXhdz + iIiLiIuLfSMCAgIEARR9IwICk7N9AgICAgKMs6MwI5uvr7OzsaujMAICAgUAFH0jAgKTsX0CAgICKK2z + gAsLNUFus7NgQTwSAgICAgEUfSMEApOzfAICBAuIs6oaAgICBESzsysCAgICAgIFABR9IwICk7F9AgIC + OqizgAICAgICQ7OzLwICAgICAgIBFH0jBAKTs51hOhaVs54mAgICAgREs7EVAgICAgICBQAUfSMCApOx + s7Olk7GzcwoCAgICAkOxszoFAgICAgQCARR9IwIEla+imKizs68SAgICAgICRbOzWQICBAsgIxIAFH0j + AgKTsYUjU5ixsVMFBQICAgJTsbN9BQUFFZuYMwEUfSMCBJOxfAICBY+xozoCAgICAlOxsYxTAgVosaU6 + ABR9IwICk7F9AgICJp2xiAICAlOFk7GxZaN8faOxmyMAFH0jAgSTsX0CBAIFWbGxIwICbLGxsZ0jk7Gx + r6hOBQAUfSMCApOxfQICAgIMqLFiBQQjU1NTFQUjXn1zUwICARR9IwIFk7F8AgICAgWTsYUFAgIEAgIC + AgQCAgIEAgUAFH0jAgKTsX0EAgICAnOxmyMCAgICAgICAgICAgICAgEUfSMCApOxfAICAgIEXrOdJgUC + AgICAgICAgICAgQFABR9IwQCU1M1AgICAgIjU1MSAgICAgICAgQCAgICAgIBFH0jBAICBAQEAgQCAgIC + AgICAgICAgICAgICBAIFBQAUfSYMBRIFBQwMCwULAgUCAgICAgICAgICAgIFBQUFARR9JpFTdiYVI1Ni + c4UVAgICAgICBAICAgICAlNuhlYAFH0mjFN8JgVTjHx8hRUCBAQFAgQFAgQFAgUCU258UwEUhVMmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmFRSdk5OZk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5OMaP// + //8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAGAAAABKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAJHMj/+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/36wfO6u7qz/dt13/3bd + d/923Xf/dt13/4fhjf933nj/jOOU/3bdd/+B4IX/guCH/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/3bd + d/923Xf/dt13/3bdd/+w7MD/f9+D/4DfhP+U5Z7/et59/4PgiP923Xf/dt13/3bdd/923Xf/kcyP/67u + rP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HM + j/+u7qz/dt13/3jeef923Xf/dt13/3bdd/933nj/eN55/3feeP943nn/eN55/3jeef933nj/dt13/3bd + d/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5/nq/+k6bH/2Prw/+H9+//Y+vD/u/DO/3bd + d/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/p+q1/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d/923Xf/dt13/5HMj/+u7qz/dt13/+H9+//h/fv/su3C/+H9+/+K4pL/dt13/3bdd/923Xf/4f37/3bd + d/923Xf/dt13/3bdd/+RzI//ru6s/3bdd//h/fv/juOW/+H9+//h/fv/dt13/3bdd/923Xf/dt13/+H9 + +/923Xf/dt13/6LosP+j6LH/kcyP/67urP923Xf/4f37/3bdd/923Xf/1Pns/9789/923Xf/dt13/3bd + d//h/fv/4P36/3bdd//h/fv/uO/K/5HMj/+u7qz/dt13/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d//h/fv/4f37/3jeev/h/fv/4f37/3bdd/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5Dj + mf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/dt13/+H9 + +/+y7cP/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HMj/+u7qz/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/8Ly1v+s67v/eN56/6Do + rf+t7L3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+88M//kcyP/6vuqf+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/5rZmP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAA + AAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAHbdd/933Xj/d915/3jdef943nr/et58/3ve + ff9/34L/gOCE/4HghP+B4IX/guCG/4Pgh/+H4Y3/h+KM/4jijf+I4o7/iuKR/4vjkf+L45L/jOOS/4zj + k/+N45T/juOV/4zkkv+Q5Jj/kOSZ/5Hlmf+U5pz/luae/5bmn/+X5qD/mOeh/5jmov+a56X/muik/5zo + p/+d6Kf/nuip/6DprP+h6q3/oumv/6TqsP+m67P/qey2/6nruP+q7bj/rO26/67tvP+u7b7/r+2//7bu + x/+28Mf/t/DI/7jwyP+98s//vvLQ/8Dz0//C89X/yPXd/8334//O9+T/0Pjn/9T46//V+e3/2Prw/9r7 + 8//f/Pn/4Pz5/+D9+v/h/fv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8XAwMDAwMDAwMDAwMDAwMGIwAAAAMb + FyUUFxQDAAAAAyMAAAEDIBkUHRQUAAADAwMjAAAAAAAAAAAAAAADAwMDIwAdCQABGB0PIyUhDQMDAyMA + Px0ABkErIDpEOCUDAQMjAD8dACxAAwAPRAcAAwMDIwA/PS9CKAEBD0QMAwAAAyMAPzY7RAkAAA9EGQMf + IQMjAD8dATg6AAcqRDYdPzAGJQA/HQAJRA8PNzYXOzgHBiMAPx0AAD0oAAABAAAAAAMjADYYAQAsJQAA + AAAAAwMDIwMDAwMDAAAAAAAAAAMABiMwJRIwNgkAAAAAAAAqLQM0KCooKigqKCooKigqKColAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ControlsTest.Designer.cs b/Source/Krypton Components/TestForm/ControlsTest.Designer.cs new file mode 100644 index 000000000..65bbcab68 --- /dev/null +++ b/Source/Krypton Components/TestForm/ControlsTest.Designer.cs @@ -0,0 +1,931 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class ControlsTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem(new string[] { + "Cat with areally long text to see what happens"}, 1, System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))), System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))), new System.Drawing.Font("Segoe UI", 9F)); + System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem(new string[] { + "Dog "}, 2, System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))), System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))), new System.Drawing.Font("Segoe UI", 9F)); + System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem(new string[] { + "Mouse "}, 3, System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))), System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))), new System.Drawing.Font("Segoe UI", 9F)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ControlsTest)); + System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem(new string[] { + "Cat with areally long text to see what happens"}, 1, System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))), System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))), new System.Drawing.Font("Segoe UI", 9F)); + System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem(new string[] { + "Dog "}, 2, System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))), System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))), new System.Drawing.Font("Segoe UI", 9F)); + System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem(new string[] { + "Mouse "}, 3, System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))), System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))), new System.Drawing.Font("Segoe UI", 9F)); + this.kryptonRibbon1 = new Krypton.Ribbon.KryptonRibbon(); + this.kryptonRibbonContext1 = new Krypton.Ribbon.KryptonRibbonContext(); + this.kryptonRibbonTab1 = new Krypton.Ribbon.KryptonRibbonTab(); + this.kryptonRibbonGroup1 = new Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple1 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton1 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton2 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupLines1 = new Krypton.Ribbon.KryptonRibbonGroupLines(); + this.kryptonRibbonGroupButton3 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton4 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupComboBox1 = new Krypton.Ribbon.KryptonRibbonGroupComboBox(); + this.kryptonRibbonGroupComboBox2 = new Krypton.Ribbon.KryptonRibbonGroupComboBox(); + this.kryptonRibbonGroupLabel1 = new Krypton.Ribbon.KryptonRibbonGroupLabel(); + this.kryptonRibbonGroupLabel2 = new Krypton.Ribbon.KryptonRibbonGroupLabel(); + this.kryptonRibbonGroupThemeComboBox1 = new Krypton.Ribbon.KryptonRibbonGroupThemeComboBox(); + this.kryptonRibbonGroupThemeComboBox2 = new Krypton.Ribbon.KryptonRibbonGroupThemeComboBox(); + this.kryptonRibbonTab2 = new Krypton.Ribbon.KryptonRibbonTab(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLinkLabel2 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonLinkLabel1 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonComboBox2 = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonComboBox1 = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonRichTextBox2 = new Krypton.Toolkit.KryptonRichTextBox(); + this.kryptonRichTextBox1 = new Krypton.Toolkit.KryptonRichTextBox(); + this.kryptonScrollBar2 = new Krypton.Toolkit.KryptonScrollBar(); + this.kryptonScrollBar1 = new Krypton.Toolkit.KryptonScrollBar(); + this.kryptonPropertyGrid2 = new Krypton.Toolkit.KryptonPropertyGrid(); + this.kryptonPropertyGrid1 = new Krypton.Toolkit.KryptonPropertyGrid(); + this.kryptonListView1 = new Krypton.Toolkit.KryptonListView(); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + this.listKrypton = new Krypton.Toolkit.KryptonListView(); + this.kryptonTreeView2 = new Krypton.Toolkit.KryptonTreeView(); + this.kryptonTreeView1 = new Krypton.Toolkit.KryptonTreeView(); + this.kryptonMaskedTextBox2 = new Krypton.Toolkit.KryptonMaskedTextBox(); + this.kryptonMaskedTextBox1 = new Krypton.Toolkit.KryptonMaskedTextBox(); + this.kryptonNumericUpDown2 = new Krypton.Toolkit.KryptonNumericUpDown(); + this.kryptonNumericUpDown1 = new Krypton.Toolkit.KryptonNumericUpDown(); + this.kryptonDomainUpDown2 = new Krypton.Toolkit.KryptonDomainUpDown(); + this.kryptonDomainUpDown1 = new Krypton.Toolkit.KryptonDomainUpDown(); + this.kryptonTrackBar2 = new Krypton.Toolkit.KryptonTrackBar(); + this.kryptonTrackBar1 = new Krypton.Toolkit.KryptonTrackBar(); + this.kryptonGroupBox2 = new Krypton.Toolkit.KryptonGroupBox(); + this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox(); + this.kryptonPanel3 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonRadioButton2 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonRadioButton1 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonTextBox2 = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonTextBox1 = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonCheckBox2 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonCheckBox1 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonButton2 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); + this.kryptonListBox2 = new Krypton.Toolkit.KryptonListBox(); + this.kryptonListBox1 = new Krypton.Toolkit.KryptonListBox(); + this.kryptonCheckedListBox2 = new Krypton.Toolkit.KryptonCheckedListBox(); + this.kryptonCheckedListBox1 = new Krypton.Toolkit.KryptonCheckedListBox(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonGalleryRange1 = new Krypton.Ribbon.KryptonGalleryRange(); + this.kryptonGalleryRange2 = new Krypton.Ribbon.KryptonGalleryRange(); + this.kryptonGalleryRange3 = new Krypton.Ribbon.KryptonGalleryRange(); + this.kryptonRibbonGroupTriple2 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.krgbBug833Test = new Krypton.Ribbon.KryptonRibbonGroupButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonComboBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit(); + this.kryptonGroupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit(); + this.kryptonGroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonRibbon1 + // + this.kryptonRibbon1.InDesignHelperMode = true; + this.kryptonRibbon1.Name = "kryptonRibbon1"; + this.kryptonRibbon1.RibbonContexts.AddRange(new Krypton.Ribbon.KryptonRibbonContext[] { + this.kryptonRibbonContext1}); + this.kryptonRibbon1.RibbonFileAppButton.AppButtonToolTipStyle = Krypton.Toolkit.LabelStyle.SuperTip; + this.kryptonRibbon1.RibbonFileAppButton.FormCloseBoxVisible = true; + this.kryptonRibbon1.RibbonTabs.AddRange(new Krypton.Ribbon.KryptonRibbonTab[] { + this.kryptonRibbonTab1, + this.kryptonRibbonTab2}); + this.kryptonRibbon1.SelectedTab = this.kryptonRibbonTab1; + this.kryptonRibbon1.Size = new System.Drawing.Size(1323, 115); + this.kryptonRibbon1.TabIndex = 0; + // + // kryptonRibbonContext1 + // + this.kryptonRibbonContext1.ContextTitle = "Context Tools"; + // + // kryptonRibbonTab1 + // + this.kryptonRibbonTab1.Groups.AddRange(new Krypton.Ribbon.KryptonRibbonGroup[] { + this.kryptonRibbonGroup1}); + // + // kryptonRibbonGroup1 + // + this.kryptonRibbonGroup1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple1, + this.kryptonRibbonGroupLines1, + this.kryptonRibbonGroupTriple2}); + // + // kryptonRibbonGroupTriple1 + // + this.kryptonRibbonGroupTriple1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton1, + this.kryptonRibbonGroupButton2}); + // + // kryptonRibbonGroupButton1 + // + this.kryptonRibbonGroupButton1.TextLine1 = "Enabled"; + // + // kryptonRibbonGroupButton2 + // + this.kryptonRibbonGroupButton2.Enabled = false; + this.kryptonRibbonGroupButton2.TextLine1 = "Disabled"; + // + // kryptonRibbonGroupLines1 + // + this.kryptonRibbonGroupLines1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton3, + this.kryptonRibbonGroupButton4, + this.kryptonRibbonGroupComboBox1, + this.kryptonRibbonGroupComboBox2, + this.kryptonRibbonGroupLabel1, + this.kryptonRibbonGroupLabel2, + this.kryptonRibbonGroupThemeComboBox1, + this.kryptonRibbonGroupThemeComboBox2}); + // + // kryptonRibbonGroupButton4 + // + this.kryptonRibbonGroupButton4.Enabled = false; + // + // kryptonRibbonGroupComboBox1 + // + this.kryptonRibbonGroupComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kryptonRibbonGroupComboBox1.DropDownWidth = 421; + this.kryptonRibbonGroupComboBox1.FormattingEnabled = false; + this.kryptonRibbonGroupComboBox1.ItemHeight = 16; + this.kryptonRibbonGroupComboBox1.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.kryptonRibbonGroupComboBox1.Text = ""; + // + // kryptonRibbonGroupComboBox2 + // + this.kryptonRibbonGroupComboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kryptonRibbonGroupComboBox2.DropDownWidth = 121; + this.kryptonRibbonGroupComboBox2.Enabled = false; + this.kryptonRibbonGroupComboBox2.FormattingEnabled = false; + this.kryptonRibbonGroupComboBox2.ItemHeight = 16; + this.kryptonRibbonGroupComboBox2.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.kryptonRibbonGroupComboBox2.Text = ""; + // + // kryptonRibbonGroupLabel2 + // + this.kryptonRibbonGroupLabel2.Enabled = false; + // + // kryptonRibbonGroupThemeComboBox1 + // + this.kryptonRibbonGroupThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonRibbonGroupThemeComboBox1.DropDownWidth = 200; + this.kryptonRibbonGroupThemeComboBox1.FormattingEnabled = false; + this.kryptonRibbonGroupThemeComboBox1.ItemHeight = 16; + this.kryptonRibbonGroupThemeComboBox1.MaximumSize = new System.Drawing.Size(200, 0); + this.kryptonRibbonGroupThemeComboBox1.MinimumSize = new System.Drawing.Size(200, 0); + // + // kryptonRibbonGroupThemeComboBox2 + // + this.kryptonRibbonGroupThemeComboBox2.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonRibbonGroupThemeComboBox2.DropDownWidth = 121; + this.kryptonRibbonGroupThemeComboBox2.Enabled = false; + this.kryptonRibbonGroupThemeComboBox2.FormattingEnabled = false; + this.kryptonRibbonGroupThemeComboBox2.ItemHeight = 16; + this.kryptonRibbonGroupThemeComboBox2.MinimumSize = new System.Drawing.Size(200, 0); + // + // kryptonRibbonTab2 + // + this.kryptonRibbonTab2.ContextName = "Test"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonLabel2); + this.kryptonPanel1.Controls.Add(this.kryptonLabel1); + this.kryptonPanel1.Controls.Add(this.kryptonLinkLabel2); + this.kryptonPanel1.Controls.Add(this.kryptonLinkLabel1); + this.kryptonPanel1.Controls.Add(this.kryptonComboBox2); + this.kryptonPanel1.Controls.Add(this.kryptonComboBox1); + this.kryptonPanel1.Controls.Add(this.kryptonRichTextBox2); + this.kryptonPanel1.Controls.Add(this.kryptonRichTextBox1); + this.kryptonPanel1.Controls.Add(this.kryptonScrollBar2); + this.kryptonPanel1.Controls.Add(this.kryptonScrollBar1); + this.kryptonPanel1.Controls.Add(this.kryptonPropertyGrid2); + this.kryptonPanel1.Controls.Add(this.kryptonPropertyGrid1); + this.kryptonPanel1.Controls.Add(this.kryptonListView1); + this.kryptonPanel1.Controls.Add(this.listKrypton); + this.kryptonPanel1.Controls.Add(this.kryptonTreeView2); + this.kryptonPanel1.Controls.Add(this.kryptonTreeView1); + this.kryptonPanel1.Controls.Add(this.kryptonMaskedTextBox2); + this.kryptonPanel1.Controls.Add(this.kryptonMaskedTextBox1); + this.kryptonPanel1.Controls.Add(this.kryptonNumericUpDown2); + this.kryptonPanel1.Controls.Add(this.kryptonNumericUpDown1); + this.kryptonPanel1.Controls.Add(this.kryptonDomainUpDown2); + this.kryptonPanel1.Controls.Add(this.kryptonDomainUpDown1); + this.kryptonPanel1.Controls.Add(this.kryptonTrackBar2); + this.kryptonPanel1.Controls.Add(this.kryptonTrackBar1); + this.kryptonPanel1.Controls.Add(this.kryptonGroupBox2); + this.kryptonPanel1.Controls.Add(this.kryptonGroupBox1); + this.kryptonPanel1.Controls.Add(this.kryptonPanel3); + this.kryptonPanel1.Controls.Add(this.kryptonPanel2); + this.kryptonPanel1.Controls.Add(this.kryptonRadioButton2); + this.kryptonPanel1.Controls.Add(this.kryptonRadioButton1); + this.kryptonPanel1.Controls.Add(this.kryptonTextBox2); + this.kryptonPanel1.Controls.Add(this.kryptonTextBox1); + this.kryptonPanel1.Controls.Add(this.kryptonCheckBox2); + this.kryptonPanel1.Controls.Add(this.kryptonCheckBox1); + this.kryptonPanel1.Controls.Add(this.kryptonButton2); + this.kryptonPanel1.Controls.Add(this.kryptonButton1); + this.kryptonPanel1.Controls.Add(this.kryptonListBox2); + this.kryptonPanel1.Controls.Add(this.kryptonListBox1); + this.kryptonPanel1.Controls.Add(this.kryptonCheckedListBox2); + this.kryptonPanel1.Controls.Add(this.kryptonCheckedListBox1); + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 115); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(1323, 471); + this.kryptonPanel1.TabIndex = 1; + // + // kryptonLabel2 + // + this.kryptonLabel2.Enabled = false; + this.kryptonLabel2.Location = new System.Drawing.Point(110, 409); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(88, 20); + this.kryptonLabel2.TabIndex = 43; + this.kryptonLabel2.Values.Text = "kryptonLabel2"; + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(13, 409); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(88, 20); + this.kryptonLabel1.TabIndex = 42; + this.kryptonLabel1.Values.Text = "kryptonLabel1"; + // + // kryptonLinkLabel2 + // + this.kryptonLinkLabel2.Enabled = false; + this.kryptonLinkLabel2.Location = new System.Drawing.Point(207, 353); + this.kryptonLinkLabel2.Name = "kryptonLinkLabel2"; + this.kryptonLinkLabel2.Size = new System.Drawing.Size(110, 20); + this.kryptonLinkLabel2.TabIndex = 41; + this.kryptonLinkLabel2.Values.Text = "kryptonLinkLabel2"; + // + // kryptonLinkLabel1 + // + this.kryptonLinkLabel1.Location = new System.Drawing.Point(207, 327); + this.kryptonLinkLabel1.Name = "kryptonLinkLabel1"; + this.kryptonLinkLabel1.Size = new System.Drawing.Size(110, 20); + this.kryptonLinkLabel1.TabIndex = 40; + this.kryptonLinkLabel1.Values.Text = "kryptonLinkLabel1"; + // + // kryptonComboBox2 + // + this.kryptonComboBox2.DropDownWidth = 149; + this.kryptonComboBox2.Enabled = false; + this.kryptonComboBox2.IntegralHeight = false; + this.kryptonComboBox2.Location = new System.Drawing.Point(480, 411); + this.kryptonComboBox2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonComboBox2.Name = "kryptonComboBox2"; + this.kryptonComboBox2.Size = new System.Drawing.Size(112, 22); + this.kryptonComboBox2.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonComboBox2.TabIndex = 39; + this.kryptonComboBox2.Text = "kryptonComboBox2"; + // + // kryptonComboBox1 + // + this.kryptonComboBox1.DropDownWidth = 421; + this.kryptonComboBox1.IntegralHeight = false; + this.kryptonComboBox1.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "77777777777777777777777777777777777777777777777777777777777777777777777777777"}); + this.kryptonComboBox1.Location = new System.Drawing.Point(362, 411); + this.kryptonComboBox1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonComboBox1.Name = "kryptonComboBox1"; + this.kryptonComboBox1.Size = new System.Drawing.Size(112, 22); + this.kryptonComboBox1.TabIndex = 38; + this.kryptonComboBox1.Text = "kryptonComboBox1"; + // + // kryptonRichTextBox2 + // + this.kryptonRichTextBox2.Enabled = false; + this.kryptonRichTextBox2.Location = new System.Drawing.Point(920, 353); + this.kryptonRichTextBox2.Name = "kryptonRichTextBox2"; + this.kryptonRichTextBox2.Size = new System.Drawing.Size(100, 96); + this.kryptonRichTextBox2.TabIndex = 37; + this.kryptonRichTextBox2.Text = "kryptonRichTextBox2"; + // + // kryptonRichTextBox1 + // + this.kryptonRichTextBox1.Location = new System.Drawing.Point(814, 353); + this.kryptonRichTextBox1.Name = "kryptonRichTextBox1"; + this.kryptonRichTextBox1.Size = new System.Drawing.Size(100, 96); + this.kryptonRichTextBox1.TabIndex = 36; + this.kryptonRichTextBox1.Text = "kryptonRichTextBox1"; + // + // kryptonScrollBar2 + // + this.kryptonScrollBar2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(93)))), ((int)(((byte)(140)))), ((int)(((byte)(201))))); + this.kryptonScrollBar2.DisabledBorderColor = System.Drawing.Color.Gray; + this.kryptonScrollBar2.Enabled = false; + this.kryptonScrollBar2.Location = new System.Drawing.Point(607, 380); + this.kryptonScrollBar2.Name = "kryptonScrollBar2"; + this.kryptonScrollBar2.Opacity = 1D; + this.kryptonScrollBar2.Orientation = Krypton.Toolkit.ScrollBarOrientation.Horizontal; + this.kryptonScrollBar2.ScrollBarWidth = 200; + this.kryptonScrollBar2.Size = new System.Drawing.Size(200, 19); + this.kryptonScrollBar2.TabIndex = 35; + // + // kryptonScrollBar1 + // + this.kryptonScrollBar1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(93)))), ((int)(((byte)(140)))), ((int)(((byte)(201))))); + this.kryptonScrollBar1.DisabledBorderColor = System.Drawing.Color.Gray; + this.kryptonScrollBar1.Location = new System.Drawing.Point(607, 354); + this.kryptonScrollBar1.Name = "kryptonScrollBar1"; + this.kryptonScrollBar1.Opacity = 1D; + this.kryptonScrollBar1.Orientation = Krypton.Toolkit.ScrollBarOrientation.Horizontal; + this.kryptonScrollBar1.ScrollBarWidth = 200; + this.kryptonScrollBar1.Size = new System.Drawing.Size(200, 19); + this.kryptonScrollBar1.TabIndex = 34; + // + // kryptonPropertyGrid2 + // + this.kryptonPropertyGrid2.Enabled = false; + this.kryptonPropertyGrid2.Location = new System.Drawing.Point(1044, 35); + this.kryptonPropertyGrid2.Name = "kryptonPropertyGrid2"; + this.kryptonPropertyGrid2.Padding = new System.Windows.Forms.Padding(1); + this.kryptonPropertyGrid2.SelectedObject = this; + this.kryptonPropertyGrid2.Size = new System.Drawing.Size(266, 313); + this.kryptonPropertyGrid2.TabIndex = 33; + this.kryptonPropertyGrid2.Text = "kryptonPropertyGrid2"; + // + // kryptonPropertyGrid1 + // + this.kryptonPropertyGrid1.Location = new System.Drawing.Point(772, 35); + this.kryptonPropertyGrid1.Name = "kryptonPropertyGrid1"; + this.kryptonPropertyGrid1.Padding = new System.Windows.Forms.Padding(1); + this.kryptonPropertyGrid1.SelectedObject = this; + this.kryptonPropertyGrid1.Size = new System.Drawing.Size(266, 313); + this.kryptonPropertyGrid1.TabIndex = 32; + this.kryptonPropertyGrid1.Text = "kryptonPropertyGrid1"; + // + // kryptonListView1 + // + this.kryptonListView1.Activation = System.Windows.Forms.ItemActivation.OneClick; + this.kryptonListView1.Enabled = false; + this.kryptonListView1.FullRowSelect = true; + this.kryptonListView1.GridLines = true; + this.kryptonListView1.HideSelection = false; + this.kryptonListView1.HotTracking = true; + this.kryptonListView1.HoverSelection = true; + listViewItem1.StateImageIndex = 0; + listViewItem2.StateImageIndex = 0; + listViewItem3.StateImageIndex = 0; + this.kryptonListView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] { + listViewItem1, + listViewItem2, + listViewItem3}); + this.kryptonListView1.Location = new System.Drawing.Point(648, 35); + this.kryptonListView1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonListView1.Name = "kryptonListView1"; + this.kryptonListView1.Size = new System.Drawing.Size(118, 226); + this.kryptonListView1.SmallImageList = this.imageList1; + this.kryptonListView1.TabIndex = 31; + this.kryptonListView1.View = System.Windows.Forms.View.SmallIcon; + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + this.imageList1.Images.SetKeyName(0, "AppMenuClose.png"); + this.imageList1.Images.SetKeyName(1, "AppMenuMemoStyle.PNG"); + this.imageList1.Images.SetKeyName(2, "AppMenuMove.png"); + this.imageList1.Images.SetKeyName(3, "AppMenuNewMailMessage.png"); + // + // listKrypton + // + this.listKrypton.Activation = System.Windows.Forms.ItemActivation.OneClick; + this.listKrypton.FullRowSelect = true; + this.listKrypton.GridLines = true; + this.listKrypton.HideSelection = false; + this.listKrypton.HotTracking = true; + this.listKrypton.HoverSelection = true; + listViewItem4.StateImageIndex = 0; + listViewItem5.StateImageIndex = 0; + listViewItem6.StateImageIndex = 0; + this.listKrypton.Items.AddRange(new System.Windows.Forms.ListViewItem[] { + listViewItem4, + listViewItem5, + listViewItem6}); + this.listKrypton.Location = new System.Drawing.Point(521, 35); + this.listKrypton.Margin = new System.Windows.Forms.Padding(2); + this.listKrypton.Name = "listKrypton"; + this.listKrypton.Size = new System.Drawing.Size(118, 226); + this.listKrypton.SmallImageList = this.imageList1; + this.listKrypton.TabIndex = 0; + this.listKrypton.View = System.Windows.Forms.View.SmallIcon; + // + // kryptonTreeView2 + // + this.kryptonTreeView2.Enabled = false; + this.kryptonTreeView2.Location = new System.Drawing.Point(692, 270); + this.kryptonTreeView2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonTreeView2.Name = "kryptonTreeView2"; + this.kryptonTreeView2.Size = new System.Drawing.Size(74, 78); + this.kryptonTreeView2.TabIndex = 28; + // + // kryptonTreeView1 + // + this.kryptonTreeView1.Location = new System.Drawing.Point(607, 270); + this.kryptonTreeView1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonTreeView1.Name = "kryptonTreeView1"; + this.kryptonTreeView1.Size = new System.Drawing.Size(74, 78); + this.kryptonTreeView1.TabIndex = 27; + // + // kryptonMaskedTextBox2 + // + this.kryptonMaskedTextBox2.Enabled = false; + this.kryptonMaskedTextBox2.Location = new System.Drawing.Point(110, 380); + this.kryptonMaskedTextBox2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonMaskedTextBox2.Name = "kryptonMaskedTextBox2"; + this.kryptonMaskedTextBox2.Size = new System.Drawing.Size(90, 23); + this.kryptonMaskedTextBox2.TabIndex = 26; + this.kryptonMaskedTextBox2.Text = "kryptonMaskedTextBox2"; + // + // kryptonMaskedTextBox1 + // + this.kryptonMaskedTextBox1.Location = new System.Drawing.Point(13, 380); + this.kryptonMaskedTextBox1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonMaskedTextBox1.Name = "kryptonMaskedTextBox1"; + this.kryptonMaskedTextBox1.Size = new System.Drawing.Size(90, 23); + this.kryptonMaskedTextBox1.TabIndex = 25; + this.kryptonMaskedTextBox1.Text = "kryptonMaskedTextBox1"; + // + // kryptonNumericUpDown2 + // + this.kryptonNumericUpDown2.Enabled = false; + this.kryptonNumericUpDown2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.kryptonNumericUpDown2.Location = new System.Drawing.Point(110, 353); + this.kryptonNumericUpDown2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonNumericUpDown2.Maximum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.kryptonNumericUpDown2.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.kryptonNumericUpDown2.Name = "kryptonNumericUpDown2"; + this.kryptonNumericUpDown2.Size = new System.Drawing.Size(90, 22); + this.kryptonNumericUpDown2.TabIndex = 24; + this.kryptonNumericUpDown2.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + // + // kryptonNumericUpDown1 + // + this.kryptonNumericUpDown1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.kryptonNumericUpDown1.Location = new System.Drawing.Point(13, 353); + this.kryptonNumericUpDown1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonNumericUpDown1.Maximum = new decimal(new int[] { + 100, + 0, + 0, + 0}); + this.kryptonNumericUpDown1.Minimum = new decimal(new int[] { + 0, + 0, + 0, + 0}); + this.kryptonNumericUpDown1.Name = "kryptonNumericUpDown1"; + this.kryptonNumericUpDown1.Size = new System.Drawing.Size(90, 22); + this.kryptonNumericUpDown1.TabIndex = 23; + this.kryptonNumericUpDown1.Value = new decimal(new int[] { + 0, + 0, + 0, + 0}); + // + // kryptonDomainUpDown2 + // + this.kryptonDomainUpDown2.Enabled = false; + this.kryptonDomainUpDown2.Location = new System.Drawing.Point(110, 327); + this.kryptonDomainUpDown2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonDomainUpDown2.Name = "kryptonDomainUpDown2"; + this.kryptonDomainUpDown2.Size = new System.Drawing.Size(90, 22); + this.kryptonDomainUpDown2.TabIndex = 22; + this.kryptonDomainUpDown2.Text = "kryptonDomainUpDown2"; + // + // kryptonDomainUpDown1 + // + this.kryptonDomainUpDown1.Location = new System.Drawing.Point(13, 327); + this.kryptonDomainUpDown1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonDomainUpDown1.Name = "kryptonDomainUpDown1"; + this.kryptonDomainUpDown1.Size = new System.Drawing.Size(90, 22); + this.kryptonDomainUpDown1.TabIndex = 21; + this.kryptonDomainUpDown1.Text = "kryptonDomainUpDown1"; + // + // kryptonTrackBar2 + // + this.kryptonTrackBar2.Enabled = false; + this.kryptonTrackBar2.Location = new System.Drawing.Point(480, 384); + this.kryptonTrackBar2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonTrackBar2.Name = "kryptonTrackBar2"; + this.kryptonTrackBar2.Size = new System.Drawing.Size(106, 27); + this.kryptonTrackBar2.TabIndex = 20; + // + // kryptonTrackBar1 + // + this.kryptonTrackBar1.Location = new System.Drawing.Point(362, 384); + this.kryptonTrackBar1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonTrackBar1.Name = "kryptonTrackBar1"; + this.kryptonTrackBar1.Size = new System.Drawing.Size(106, 27); + this.kryptonTrackBar1.TabIndex = 19; + // + // kryptonGroupBox2 + // + this.kryptonGroupBox2.Enabled = false; + this.kryptonGroupBox2.Location = new System.Drawing.Point(480, 327); + this.kryptonGroupBox2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonGroupBox2.Name = "kryptonGroupBox2"; + this.kryptonGroupBox2.Size = new System.Drawing.Size(112, 53); + this.kryptonGroupBox2.TabIndex = 18; + this.kryptonGroupBox2.Values.Heading = "Disabled Grp"; + // + // kryptonGroupBox1 + // + this.kryptonGroupBox1.Location = new System.Drawing.Point(362, 327); + this.kryptonGroupBox1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonGroupBox1.Name = "kryptonGroupBox1"; + this.kryptonGroupBox1.Size = new System.Drawing.Size(112, 53); + this.kryptonGroupBox1.TabIndex = 17; + this.kryptonGroupBox1.Values.Heading = "Enabled Grp"; + // + // kryptonPanel3 + // + this.kryptonPanel3.Enabled = false; + this.kryptonPanel3.Location = new System.Drawing.Point(480, 268); + this.kryptonPanel3.Margin = new System.Windows.Forms.Padding(2); + this.kryptonPanel3.Name = "kryptonPanel3"; + this.kryptonPanel3.Size = new System.Drawing.Size(100, 53); + this.kryptonPanel3.StateCommon.Color1 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); + this.kryptonPanel3.TabIndex = 16; + // + // kryptonPanel2 + // + this.kryptonPanel2.Location = new System.Drawing.Point(362, 268); + this.kryptonPanel2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(100, 53); + this.kryptonPanel2.StateCommon.Color1 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); + this.kryptonPanel2.TabIndex = 15; + // + // kryptonRadioButton2 + // + this.kryptonRadioButton2.Enabled = false; + this.kryptonRadioButton2.Location = new System.Drawing.Point(281, 299); + this.kryptonRadioButton2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonRadioButton2.Name = "kryptonRadioButton2"; + this.kryptonRadioButton2.Size = new System.Drawing.Size(70, 20); + this.kryptonRadioButton2.TabIndex = 14; + this.kryptonRadioButton2.Values.Text = "Disabled"; + // + // kryptonRadioButton1 + // + this.kryptonRadioButton1.Location = new System.Drawing.Point(206, 299); + this.kryptonRadioButton1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonRadioButton1.Name = "kryptonRadioButton1"; + this.kryptonRadioButton1.Size = new System.Drawing.Size(66, 20); + this.kryptonRadioButton1.TabIndex = 13; + this.kryptonRadioButton1.Values.Text = "Enabled"; + // + // kryptonTextBox2 + // + this.kryptonTextBox2.Enabled = false; + this.kryptonTextBox2.Location = new System.Drawing.Point(110, 299); + this.kryptonTextBox2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonTextBox2.Name = "kryptonTextBox2"; + this.kryptonTextBox2.Size = new System.Drawing.Size(90, 23); + this.kryptonTextBox2.TabIndex = 12; + this.kryptonTextBox2.Text = "kryptonTextBox2"; + // + // kryptonTextBox1 + // + this.kryptonTextBox1.Location = new System.Drawing.Point(13, 299); + this.kryptonTextBox1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonTextBox1.Name = "kryptonTextBox1"; + this.kryptonTextBox1.Size = new System.Drawing.Size(90, 23); + this.kryptonTextBox1.TabIndex = 11; + this.kryptonTextBox1.Text = "kryptonTextBox1"; + // + // kryptonCheckBox2 + // + this.kryptonCheckBox2.Enabled = false; + this.kryptonCheckBox2.Location = new System.Drawing.Point(281, 267); + this.kryptonCheckBox2.Name = "kryptonCheckBox2"; + this.kryptonCheckBox2.Size = new System.Drawing.Size(71, 20); + this.kryptonCheckBox2.TabIndex = 10; + this.kryptonCheckBox2.Values.Text = "Disabled"; + // + // kryptonCheckBox1 + // + this.kryptonCheckBox1.Location = new System.Drawing.Point(207, 268); + this.kryptonCheckBox1.Name = "kryptonCheckBox1"; + this.kryptonCheckBox1.Size = new System.Drawing.Size(67, 20); + this.kryptonCheckBox1.TabIndex = 9; + this.kryptonCheckBox1.Values.Text = "Enabled"; + // + // kryptonButton2 + // + this.kryptonButton2.Enabled = false; + this.kryptonButton2.Location = new System.Drawing.Point(110, 268); + this.kryptonButton2.Name = "kryptonButton2"; + this.kryptonButton2.Size = new System.Drawing.Size(90, 25); + this.kryptonButton2.TabIndex = 8; + this.kryptonButton2.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton2.Values.Text = "Disabled"; + // + // kryptonButton1 + // + this.kryptonButton1.Location = new System.Drawing.Point(13, 268); + this.kryptonButton1.Name = "kryptonButton1"; + this.kryptonButton1.Size = new System.Drawing.Size(90, 25); + this.kryptonButton1.TabIndex = 7; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton1.Values.Text = "Enabled"; + // + // kryptonListBox2 + // + this.kryptonListBox2.Enabled = false; + this.kryptonListBox2.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.kryptonListBox2.Location = new System.Drawing.Point(392, 35); + this.kryptonListBox2.Name = "kryptonListBox2"; + this.kryptonListBox2.Size = new System.Drawing.Size(120, 226); + this.kryptonListBox2.TabIndex = 4; + // + // kryptonListBox1 + // + this.kryptonListBox1.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.kryptonListBox1.Location = new System.Drawing.Point(266, 35); + this.kryptonListBox1.Name = "kryptonListBox1"; + this.kryptonListBox1.Size = new System.Drawing.Size(120, 226); + this.kryptonListBox1.TabIndex = 3; + // + // kryptonCheckedListBox2 + // + this.kryptonCheckedListBox2.Enabled = false; + this.kryptonCheckedListBox2.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.kryptonCheckedListBox2.Location = new System.Drawing.Point(139, 35); + this.kryptonCheckedListBox2.Name = "kryptonCheckedListBox2"; + this.kryptonCheckedListBox2.Size = new System.Drawing.Size(120, 226); + this.kryptonCheckedListBox2.TabIndex = 2; + // + // kryptonCheckedListBox1 + // + this.kryptonCheckedListBox1.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.kryptonCheckedListBox1.Location = new System.Drawing.Point(13, 35); + this.kryptonCheckedListBox1.Name = "kryptonCheckedListBox1"; + this.kryptonCheckedListBox1.Size = new System.Drawing.Size(120, 226); + this.kryptonCheckedListBox1.TabIndex = 1; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonThemeComboBox1.DropDownWidth = 475; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(13, 7); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(275, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 0; + // + // kryptonRibbonGroupTriple2 + // + this.kryptonRibbonGroupTriple2.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.krgbBug833Test}); + // + // krgbBug833Test + // + this.krgbBug833Test.TextLine1 = "Bug 833"; + this.krgbBug833Test.TextLine2 = "Test"; + this.krgbBug833Test.Click += new System.EventHandler(this.krgbBug833Test_Click); + // + // ControlsTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1323, 586); + this.Controls.Add(this.kryptonPanel1); + this.Controls.Add(this.kryptonRibbon1); + this.Name = "ControlsTest"; + this.Text = "ControlsTest"; + this.Load += new System.EventHandler(this.ControlsTest_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonComboBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).EndInit(); + this.kryptonGroupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit(); + this.kryptonGroupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Krypton.Ribbon.KryptonRibbon kryptonRibbon1; + private Krypton.Ribbon.KryptonRibbonTab kryptonRibbonTab1; + private Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup1; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple1; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton1; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton2; + private KryptonPanel kryptonPanel1; + private KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonCheckedListBox kryptonCheckedListBox1; + private KryptonCheckedListBox kryptonCheckedListBox2; + private KryptonListBox kryptonListBox1; + private KryptonListBox kryptonListBox2; + private KryptonButton kryptonButton1; + private KryptonButton kryptonButton2; + private KryptonCheckBox kryptonCheckBox1; + private KryptonCheckBox kryptonCheckBox2; + private Krypton.Ribbon.KryptonRibbonGroupLines kryptonRibbonGroupLines1; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton3; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton4; + private Krypton.Ribbon.KryptonRibbonGroupComboBox kryptonRibbonGroupComboBox1; + private Krypton.Ribbon.KryptonRibbonGroupComboBox kryptonRibbonGroupComboBox2; + private Krypton.Ribbon.KryptonGalleryRange kryptonGalleryRange1; + private Krypton.Ribbon.KryptonGalleryRange kryptonGalleryRange2; + private Krypton.Ribbon.KryptonGalleryRange kryptonGalleryRange3; + private Krypton.Ribbon.KryptonRibbonGroupLabel kryptonRibbonGroupLabel1; + private Krypton.Ribbon.KryptonRibbonGroupLabel kryptonRibbonGroupLabel2; + private Krypton.Ribbon.KryptonRibbonGroupThemeComboBox kryptonRibbonGroupThemeComboBox1; + private Krypton.Ribbon.KryptonRibbonGroupThemeComboBox kryptonRibbonGroupThemeComboBox2; + private KryptonTextBox kryptonTextBox2; + private KryptonTextBox kryptonTextBox1; + private KryptonPanel kryptonPanel3; + private KryptonPanel kryptonPanel2; + private KryptonRadioButton kryptonRadioButton2; + private KryptonRadioButton kryptonRadioButton1; + private KryptonTrackBar kryptonTrackBar2; + private KryptonTrackBar kryptonTrackBar1; + private KryptonGroupBox kryptonGroupBox2; + private KryptonGroupBox kryptonGroupBox1; + private KryptonTreeView kryptonTreeView2; + private KryptonTreeView kryptonTreeView1; + private KryptonMaskedTextBox kryptonMaskedTextBox2; + private KryptonMaskedTextBox kryptonMaskedTextBox1; + private KryptonNumericUpDown kryptonNumericUpDown2; + private KryptonNumericUpDown kryptonNumericUpDown1; + private KryptonDomainUpDown kryptonDomainUpDown2; + private KryptonDomainUpDown kryptonDomainUpDown1; + private ImageList imageList1; + private KryptonListView listKrypton; + private KryptonListView kryptonListView1; + private KryptonPropertyGrid kryptonPropertyGrid1; + private KryptonPropertyGrid kryptonPropertyGrid2; + private KryptonScrollBar kryptonScrollBar1; + private KryptonScrollBar kryptonScrollBar2; + private KryptonRichTextBox kryptonRichTextBox2; + private KryptonRichTextBox kryptonRichTextBox1; + private KryptonComboBox kryptonComboBox2; + private KryptonComboBox kryptonComboBox1; + private Krypton.Ribbon.KryptonRibbonContext kryptonRibbonContext1; + private Krypton.Ribbon.KryptonRibbonTab kryptonRibbonTab2; + private KryptonLinkLabel kryptonLinkLabel1; + private KryptonLinkLabel kryptonLinkLabel2; + private KryptonLabel kryptonLabel1; + private KryptonLabel kryptonLabel2; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple2; + private Krypton.Ribbon.KryptonRibbonGroupButton krgbBug833Test; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ControlsTest.cs b/Source/Krypton Components/TestForm/ControlsTest.cs new file mode 100644 index 000000000..40ce81ccc --- /dev/null +++ b/Source/Krypton Components/TestForm/ControlsTest.cs @@ -0,0 +1,33 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class ControlsTest : KryptonForm + { + public ControlsTest() + { + InitializeComponent(); + } + + private void ControlsTest_Load(object sender, EventArgs e) + { + kryptonRibbonGroupComboBox1.SelectedIndex = 1; + + kryptonRibbonGroupComboBox2.SelectedIndex = 1; + } + + private void krgbBug833Test_Click(object sender, EventArgs e) + { + var bug833Test = new Bug833Test(); + + bug833Test.Show(); + } + } +} diff --git a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonContextMenuCollectionForm.resx b/Source/Krypton Components/TestForm/ControlsTest.resx similarity index 61% rename from Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonContextMenuCollectionForm.resx rename to Source/Krypton Components/TestForm/ControlsTest.resx index ef8460090..710157157 100644 --- a/Source/Krypton Components/Krypton.Toolkit/Designers/UX/KryptonContextMenuCollectionForm.resx +++ b/Source/Krypton Components/TestForm/ControlsTest.resx @@ -117,16 +117,16 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 - + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAu - FAAAAk1TRnQBSQFMAgEBDwEAARgBAAEIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo - AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACs + EQAAAk1TRnQBSQFMAgEBBAEAAUABAQFAAQEBIAEAASABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABgAMAAUADAAEBAQABCAYAASAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm @@ -153,65 +153,54 @@ AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw - AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAEf0PtBD9EAAD9wLt - AZEBrgH9A/cC7QGRAa4B/QG0Av8BtAL/AbQC/wG0AvEBtALxAbQQ/RAAAbwB/wH1AfQB8wEZAe0B/QG8 - Af8B9QH0AfMBGQHtAf0BtAL/AbQC/wG0Av8BtALxAbQC8QG0EP0QAAHwAf8B9QH0AfMBGQHtAf0B8AH/ - AfUB9AHzARkB7QH9CbQEExO0EAAB8AH/AfUB9AHzARkB7QH9AfAB/wH1AfQB8wEZAe0B/QG0Av8BtAL/ - AbQC/wETAlMBEwL/ArQO/wG0EAAB8QH/AfUB9AHzARkB7QH9AfEB/wH1AfQB8wEZAe0B/QG0Av8BtAL/ - AbQC/wETAlMBEwL/ArQI/wW0Af8BtBAAAfIB/wH1AfQB8wEZAe0B/QHyAf8B9QH0AfMBGQHtAf0JtAQT - BLQI/wW0Af8BtBAAAfEB8gHwAbwB7gG7Ae0B/QHxAfIB8AG8Ae4BuwHtAf0BtAL/AbQC/wG0Av8BtAL/ - AbQC/wK0CP8CtAEAArQB/wG0EAAQ/QG0Av8BtAL/AbQC/wG0Av8BtAL/ArQI/wG0AwABtAH/AbQQAAP3 - Au0BkQGuAf0D9wLtAZEBrgH9EbQI/wW0Af8BtBAAAbwB/wH1AfQB8wEZAe0B/QG8Af8B9QH0AfMBGQHt - Af0BtALyAbQC8gG0AvIBtALyAbQC/wK0CP8FtAH/AbQQAAHwAf8B9QH0AfMBGQHtAf0B8AH/AfUB9AHz - ARkB7QH9AbQC8gG0AvIBtALyAbQC8gG0Av8CtA7/AbQQAAHwAf8B9QH0AfMBGQHtAf0B8AH/AfUB9AHz - ARkB7QH9ILQQAAHxAf8B9QH0AfMBGQHtAf0B8QH/AfUB9AHzARkB7QH9AbQOGQG0EP0QAAHyAf8B9QH0 - AfMBGQHtAf0B8gH/AfUB9AHzARkB7QH9AbQOGQG0EP0QAAHxAfIB8AG8Ae4BuwHtAf0B8QHyAfABvAHu - AbsB7QH9ELQQ/RAAEP0CAAHwAR4B8AH/BAAB/wHzAR4B8AYAAbUBiwSGAYsBtAsAArQHAAP9C6wC/QEA - AfABHgEfAQEB8AH/AgAB/wHyAQEBIAEBAfAFAAGRAdUBswO0AdUBkQoAAZECswGRBgAQ/QHwAR4BHwLp - AQEB8AL/AfIBAQMgAQEB8AQAAZEB3AK0Aq0B1QGRCQABkQGzArQBrQGRBQAC/QEZAdUBrQGzARkC/QEZ - A60BswL9AR4CHwHpAiABAQHwAfIBAQNGASAB6QEeBAABkQHcArQCrQG0AZEIAAGRAbMEtAGtAZEEAAP9 - ARkBswEZBP0B3AGtAbMD/QHxAR4BHwHpASABRgEgAgEBRgFHAkYBIAEBAfAEAAGRAQkCtAKtAbQBkQcA - AZEBrQS0A60BkQMABP0C1QP9AdwCrQG0A/0BAAHwAR4B6QEgBEYCRwFGASABAQHwAf8EAAG0AQkCtAKt - AbMBkQYAAZEBrQHWAbUCtAGzAa0BswG0AbMBkQIABP0BGQGtAdUCswOtBP0CAAHwAR4B6QJGA0cBRgEg - AQEB8AH/BQABtQEZArQCswGtAZEFAAG1Aa4BtAG1ARkCtAGzAa0B1QK0AYsB7wEABf0BswEZAv0BswGt - AdUE/QMAAfABAQEgBEYBIAEBAfAB/wYAAbUBGQHVAbQCswGtAZEIAAH3ARkCtAOzAZEEAAX9ARkB1QH9 - AdwCrQX9AwAB8AEBBUYBIAEBAbwB/wYAAZEB9ALVArMBrQGuCAAB7wEZArQDswG1BAAG/QGtARkBtAGt - AbMF/QIAAfABHgZGAiABAQG8Af8CAAG0AYsCrgH0AtwCswGtA64BtQUAAe8BGQHVAbQDswG1BAAG/QLc - Aq0G/QEAAfABHgRvBEYC6QEBAbwB/wIAAa4BtAIJAtwB1QHUAtUBCQGRBgAB7wHdAdwBtAOzAbUEAAb9 - ARkCrQGzBv0B8QEeBW8CAQRGAUUBAQHwAwABkQG0AQkC3AHVAdQB1QHcAZEHAAHvAQkB3AG0A7MBtQQA - B/0CrQf9AUQBbwGTA28BAQLwAQECRgNFAR4EAAGRAdwB3QLcAtUBkQgAAbUBCQHcAdUC1AG0Ae0EAAf9 - ARkBtAf9AfEBHgKTAW8BHgHwAf8BAAHwAR4CRgFFAR4B8AUAAZEBCQEZAdwBtAGRCQABtQHcAQkD1AG0 - Ae0EABD9AQAB8AEeAW8BHgHwAf8DAAHwAR4BRQEeAfAHAAGRAQkBswGuCgABtQHcAQkD3AG0Ae0EABD9 - AgAB8QFEAfAB/wUAAfEBHgHwCQABkQGuCwAB9weRBAAx/QHuDLsBBzH9AZkBGg30Ae4F/QEHAfQO/QHd - BAkB3Qb9DQkC/QGZAcMBegz0AbsF/QEHAfQN/QIJAfEC9AHxAgkF/QEJBPQC/wX0AQkC/QGZAcMCegEA - AfQBAAH0AQAB9AEAAfQBAAL0AbsF/QEHAfQM/QEJAfEB9ALyAvMB9AHxAQkE/QEJAfQBBwHwAfICtQH0 - A/MB9AEJAv0BdAHDAXoBAAF6ChkBuwX9AQcB9Av9Ad0BCQH0AfABkQKLAZEB8AH0AQkB3QP9AQkB9AEH - AfQBtQKLAQcB/wH0AfIB9AEJAv0BdAHDBHoBkgEAAe8BAAG8ARkBAAIZAbsF/QEHCvQC/QEJAfEB8wGR - BIsBkQHzAfEBCQP9AQkB9AG8AfIDiwGuAf8B9AHxAfQBCQL9AXQBwwFZAQACegEAAe8B8QEAAbwE8wG7 - Bf0LBwL9AQkB9AHzBosB8wH0AQkD/QEJAfQB8QGRAYsB8AGRAYsBBwH0AfAB9AEJAv0BdAHDBFkBUgFL - AgABvAEZAQACGQG7Bf0BBwH0C/0BCQH0AfIGiwHyAfQBCQP9AQkB9AEHAfAB7wHzAe4BiwGRAf8BvAH0 - AQkC/QF0AcMBWQEABVkBAAG8BBkBuwX9AQcB9Av9AQkB8QHyAZEEiwGRAfIB8QEJA/0BCQH0Ae8B8AHy - AfAB9AGuAYsB7gHwAfQBCQL9AXQBwwSgAW0CAAEcAvQBAAL0AbsF/QEHAfQL/QHdAQkB9AHwAZECiwGR - AfAB9AEJAd0D/QEJAfQB7wO8AfIBBwGLAZEB8wH0AQkC/QF0AsMBAAfDBPQBuwX9AQcB9Az9AQkB8QH0 - AvIC8wH0AfEBCQT9AQkB9AHvBLwB9AGuAYsBBwH0AQkC/QGZC8MBAAL0AbsU/QIJAfEC9AHxAgkF/QEJ - AfQF7wHuAbUBkQHxAfQBCQL9AZkCwwEAAcMBAAHDAQABwwEAAcMBAAHDAvUBuxX9Ad0ECQHdBv0BCQf0 - Av8C9AEJAv0BmQ3DAf8BuyH9DQkC/QEaAZkMwwEaAbwx/QEaDJkBGgP9DOwz/QHsAQcB8wEHCP8BBwHs - Av0PByH9AewC8wEHCf8B7AL9D/IS/Q7/Af0B7ALzAQcB/wGTA18BBAHcAv8B7AL9D/IB/Q6ZA/0B/wLw - AewB/wGTA18BBAFfAQQB3AH/Af0B7ALzAQcJ/wHsAv0P8gGZARoMwwEaAZkC/QH/AvAB7AH/AZMDXwEE - AV8BBAHcAf8B/QHsAvMK/wHsAv0C8gEEAvIBzwG1AfABhgHPArUBrgLPAZkOwwGZAv0B/wLwAewK/wH9 - AewB8wH/AgAB/wNfAQQB3AL/AewC/QLyAQQC8gHPA7UCvAO1Ac8BmQHDAZMEXwEEAV8BBAHcAcMBBALD - AZkC/QH/AvAB7Ar/Af0B7AH/AQAB/wEACP8B7AL9AvIBBALPAYYCtQHPAbUBBAHwArUBzwGZAcMBkwRf - AQQBXwEEAdwBwwIEAcMBmQL9Af8C8AHsAf8BkwNfAQQBXwEEAdwB/wH9Av8BAAH/AQAI/wHsAv0C8gEE - ArUBrgG1AfABrgHPAbUBBwHPAa4BtQGZAcMBkwRfAQQBXwEEAdwBwwEEAsMBmQL9Af8C8AHsAf8BkwNf - AQQBXwEEAdwB/wH9AgAB/wEAAv8DXwEEAdwC/wHsAv0C8gEEAvIBzwG1CPIBmQ7DAZkC/QH/AvAB7Ar/ - Af0BAAL/AwAH/wHsAv0C8gG1AvIBBwG8CPIBGgGZDMMCGgL9Af8C8AHsCv8B/QEAA/8BAAj/AewC/Q/y - Af0BGgyZARoD/QH/AvAB7AH/AZMDXwEEAV8BBAHcAf8B/QEAAv8BAAH/AZMDXwEEAdwC/wHsAv0P8hL9 - Af8C8AHsAf8BkwNfAQQBXwEEAdwB/wH9AQAB/wEAAQcJ/wHsAv0P9BL9Dv8B/QIAAfMBBwj/AQcB7AL9 - Dwch/QEADOwy/QFCAU0BPgcAAT4DAAEoAwABQAMAAUADAAEBAQABAQYAAQIWAAP/gwACwwHwAQ8B/gF/ - AgACgQHwAQ8B/AE/BAAB8AEPAfgBHwQAAfABDwHwAQ8EAAHwAQ8B4AEHAgABgAEAAfABDwHAAQMCAAHA - AQEB8AEPAYABAQIAAeABAwHwAQ8B8AEPAgAB4AEDAfABDwHwAQ8CAAHAAQEBgAEBAfABDwIAAYABAAHA - AQMB8AEPBAAB4AEHAfABDwQAAfABDwHwAQ8DAAGAAfgBHwHwAQ8CAAGBAcEB/AE/AfABDwIAAcMB4wH+ - AX8B8AEP/wABAAs= + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8ANwAZ/yMAAfIQ8QHyMQAB/wHxF/AB8goAAfIU8QHyAgABuwH3AZEB7A6u + AfExAAH3AZEXrgHxCQABdBVuAfECAAG7EP8BrgHxMQAB9wT/E/QBrgHxCQABdAGaE3oBbgHxAgABuxD/ + Aa4B8TEAAfcC/wXzAfIB8wzyAvQBrgHxCQABdAGaE3oBbgHxAgABuwL/CvEB8AHxAv8BrgHxEAAB8hXx + AfMKAAH3Av8TtQL0Aa4B8QIAAfIG8QF0AZoTegFuAfECAAG7EP8BrgHwDwABdAxSAVEISwF0AfEKAAH3 + Av8J8grxAvQBrgHxAQABtQH3AZEFrgF0AZoTegFuAfECAAG7Av8K8QHwAfEC/wGuAQcB8AjxAfIFAAF0 + AZoTegF5AUsB8QoAAfcC/wy7B7UC9AGuAfEBAAG1B/8BdAGaE3oBbgHxAgABuxD/Aa4BbAFtCK4B8QUA + AXQBoAKaEnoBSwHxCgAB9wL/DvEF8AL0Aa4B8QEAAbUH/wF0AZoTegFuAfECAAG7Av8K8QHwAfEC/wGu + AfAB8wT0A/MBrgHxBQABdAGgBJoQegFLAfEKAAH3Av8BBwe7BQcGuwL0Aa4B8QEAAbUH/wF0AZoTegFu + AfECAAG7EP8BrgHwAfME9APzAa4B8QUAAXQBoAWaD3oBSwHxCgAB9wL/BfEO8AL0Aa4B8QEAAbUH/wF0 + AZoTegFuAfECAAEHAv8K8QHwAfEC/wGuAfAB8wb0AfMBrgHxBQABdAGgB5oNegFLAfEKAAH3Av8CCQsH + BrsC9AGuAfEBAAHvB/8BdAGaE3oBbgHxAgABBxD/Aa4B8AHzBvQB8wGuAfEFAAF0AaAImgx6AUsB8QoA + AfcC/wzwAbwB8AW8AvQBrgHxAQAB7wf/AZkBmhN6AW4B8QIAAQcC/wfxB/8BrgHwAfMH9AGuAfEFAAF0 + AaAKmgp6AVEB8QoAAfcC/wy8AgkBBwEJAwcC9AGuAfEBAAHvB/8BmQGaE3oBbgHxAgABBxD/Aa4B8QHz + B/QBrgHxBQABdAHDDJoIegFSAfEKAAH3Av8G8A28AvQBrgHxAQABtQf/AZkFmg96AW4B8QIAAQcC/wfx + Av8BtQH3AewDrgHzCPQBrgHxBQABdAHDDpoGegFSAfEKAAH3Av8C8BG8AvQBrgHxAQABtQf/DJoBegGa + B3oBbgHyAgABBwv/AbUB9AHxAQcCrgn0Aa4B8QUAAZMBww+aBXoBUgHxCgAB9xP/BPQBrgHxAQABtQf/ + FZoBbgHzAgABBwL/AvIB8QHyA/EC/wG1AfEB9wGuAbwK9AGuAfEFAAGTAcMRmgN6AVIB8QoAAfcC/wMH + Af8JvAf/AfQBrgHxAQAB7wf/DJoCmQF5BnQBvAMAAQcL/wG1Ae8BkQG8Bf8C9AJMAUYB9AGuAfEFAAGT + AcMBoBKaAXoBUgHxCgABtQL/A7wB/wHxAfAB8QbwB/8B9AGuAfEBAAHvB/8BmgGZBsMBGgGaAZkBrgHx + DAABBwv/Ae8B9wHwBv8C9ANMAfQBrgHxBQABkwHDA6AQmgF6AVIB8QoAAbUC/wPvAf8JvAj/Aa4B8QEA + Ae8H/wHyApkFwwKZAfABrgHxBAAB8QHyBgAKBwG7Au8B8gj/AfQBTQJMAfQBrgHxBQABmQHDBaAOmgF6 + AVIB8QoAAbUC/wPwAf8C8gfxCP8BrgHxAQABuwj/AfEHmgHwAf8BrgHxAwABCQGtAQkB8QgAAfcS/wH0 + Ak0BTAH0Aa4B8QUAAZkGwwOgDJoBUgHyAgAB7QHzBgABtQL/A+8B/wO8BAkCBwj/Aa4B8QEAAQcS/wGu + AfECAAEJAbQB1QGtAbUB8QcAAfcT/wT0Aa4B8gUABpkBeQGZDnkBmQH0AgAB6gHzBgABtQL/A/EB/wHz + CPII/wGuAfEBAAEHEv8BrgHxAQAB3QG0AtUBtAGtAbUHAAH3E7wEBwHsAfMFAAGZARoBwwKgAcMEoAKa + ARoB9AcAAfQB8wIAAfAB6wHzBgABtRf/Aa4B8QEAAQcS/wGuAfEBAAHVArQB1QGtAosHAAHyAbUB9BP/ + AfQB7AG8AfQFAAEaAZkHwwKaARoB9AgAAewB8gLzAewB7QH0BgABtQL/E+wC/wGuAfEBAAEHEv8BrgHy + AwABtAHVAa0BCQkAAfIBtQH0Ef8B9AHsAbwB9AcAARoImQEaAfQIAAHwAa4B8QEHAesB7AHyBwABtQL/ + EvEB8AL/Aa4B8QEAAQcM/wHvBq4EAAG0AdwBrQsAAfIBtQH0D/8B9AHsAbwB9BsAAq4BbQHrAfcB8wgA + AbUC/wkRDP8BrgHxAQABBwz/Ae8B/wMJAa4B8AMAAfQB1QHcAa0MAAHyAe8B9A3/AfQBkQG8AfQcAAFs + Aa4B9wHyAfQJAAG1Av8J8Qz/Aa4B8QEAAQcM/wHvAf8B9AEJAa4B8AMAAfQBCQG0AdYBrQ0AAfMBtQH0 + C/8B9AH3AfAB9B4AAe8BrgHwCgABtRf/AewB8gEAAQcM/wHvAf8B3QGuAfAEAAEJAdYBtAHPAQkOAAHy + Ae8B9An/AfQB9wHwAfQhAAHxCgABtRXvArUB9wH/AQABBwz/Ae8BGQGRAfAEAAG7AdUCtAHxEAAB8gG7 + AfQH/wH0Ae8B8AH0LQAZ/wIAAQcM/wLvAfEbAAHzArsD7wO1Ae8B8QH0SQAIBwG7Au8CtQHvAfMxAAFC + AU0BPgcAAT4DAAEoAwABgAMAAUADAAEBAQABAQYAAQQWAAP//wD/AAMABP8B/AIAAQEE/wHAAQABDwX/ + AfgCAAEBAf8BgAEAAQEBgAEAAQ8F/wH4AgABAQH/AgABAQGAAQABDwX/AfgCAAEBAf8CAAEBAYABAAEP + Bf8B+AIAAQEB/wIAAQEBgAEAAQ8B/wHwAgABHwH4AgABAQGAAgABAQGAAQABDwH/AeACAAEfAfgCAAEB + AwABAQGAAgABAwHgAgABHwH4AgABAQMAAQEBgAIAAQMB4AIAAR8B+AIAAQEDAAEBAYACAAEDAeACAAEf + AfgCAAEBAwABAQGAAgABAwHgAgABHwH4AgABAQMAAQEBgAIAAQMB4AIAAR8B+AIAAQEDAAEBAYACAAED + AeACAAEfAfgCAAEBAwABAQGAAgABAwHgAgABHwH4AgABAQMAAQEBgAIAAQMB4AIAAR8B+AIAAQEDAAEB + AYACAAEDAeACAAEfAfgCAAEBAwABAQGAAgABAwHgAgABHwH4AgABAQMAAQEBgAIAAQMB4AIAAR8B+AIA + AQEDAAEDAYACAAEDAeACAAEfAfgCAAEBAgABBwH/AYACAAEDAeACAAEfAfgCAAEBAgABBwGfAYACAAED + AeACAAEfAfgCAAEBAgABBwEPAfACAAEDAeACAAEZAfgCAAEBAgABBgEHAfACAAEDAeACAAEZAfgCAAEB + AgABBAEHAfACAAEDAeABAAF/ATEB+AIAAQECAAEEAQcB8AIAAQMB4AEAAf8BAQH4AgABAQIAAQcBDwH4 + AgABBwHwAQEB/gEDAfgCAAEBAgABDwEfAfwCAAEPAv8B/gEHAfgCAAEBAgABDgEfAf4CAAEfAv8B/gEP + AfgCAAEBAgABHAEfAf8CAAE/A/8BHwH4AgABAQIAATwBHwH/AYABAAF/A/8B3wH4AgABAQIAAXgBPwH/ + AcABAAX/AfgCAAEDAgAD/wHgAQEJ/wEAAQEG/ws= \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CustomMessageBoxTest.Designer.cs b/Source/Krypton Components/TestForm/CustomMessageBoxTest.Designer.cs new file mode 100644 index 000000000..3aac74acd --- /dev/null +++ b/Source/Krypton Components/TestForm/CustomMessageBoxTest.Designer.cs @@ -0,0 +1,467 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class CustomMessageBoxTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnShow = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.kchkShowCtrlCopyText = new Krypton.Toolkit.KryptonCheckBox(); + this.kbtnTestText = new Krypton.Toolkit.KryptonButton(); + this.kcbShowHelp = new Krypton.Toolkit.KryptonCheckBox(); + this.kcbMessageBoxOptionsRtlReading = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkMessageBoxOptionsRightAlign = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonGroupBox2 = new Krypton.Toolkit.KryptonGroupBox(); + this.krbButtonsYesNo = new Krypton.Toolkit.KryptonRadioButton(); + this.krbButtonsCancelTryContinue = new Krypton.Toolkit.KryptonRadioButton(); + this.krbButtonsYesNoCancel = new Krypton.Toolkit.KryptonRadioButton(); + this.krbButtonsAbortRetryIgnore = new Krypton.Toolkit.KryptonRadioButton(); + this.krbButtonsRetryCancel = new Krypton.Toolkit.KryptonRadioButton(); + this.krbButtonsOkCancel = new Krypton.Toolkit.KryptonRadioButton(); + this.krbButtonsOk = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox(); + this.krbIconShield = new Krypton.Toolkit.KryptonRadioButton(); + this.krbIconWinLogo = new Krypton.Toolkit.KryptonRadioButton(); + this.krbIconWarning = new Krypton.Toolkit.KryptonRadioButton(); + this.krbIconInformation = new Krypton.Toolkit.KryptonRadioButton(); + this.krbIconQuestion = new Krypton.Toolkit.KryptonRadioButton(); + this.krbIconError = new Krypton.Toolkit.KryptonRadioButton(); + this.krbIconNone = new Krypton.Toolkit.KryptonRadioButton(); + this.krtbMessageBody = new Krypton.Toolkit.KryptonRichTextBox(); + this.ktxtCaption = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).BeginInit(); + this.kryptonGroupBox2.Panel.SuspendLayout(); + this.kryptonGroupBox2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit(); + this.kryptonGroupBox1.Panel.SuspendLayout(); + this.kryptonGroupBox1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnShow); + this.kryptonPanel1.Controls.Add(this.kryptonButton1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 407); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(749, 50); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnShow + // + this.kbtnShow.Location = new System.Drawing.Point(550, 13); + this.kbtnShow.Name = "kbtnShow"; + this.kbtnShow.Size = new System.Drawing.Size(90, 25); + this.kbtnShow.TabIndex = 1; + this.kbtnShow.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnShow.Values.Text = "Show"; + this.kbtnShow.Click += new System.EventHandler(this.kbtnShow_Click); + // + // kryptonButton1 + // + this.kryptonButton1.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kryptonButton1.Location = new System.Drawing.Point(646, 13); + this.kryptonButton1.Name = "kryptonButton1"; + this.kryptonButton1.Size = new System.Drawing.Size(90, 25); + this.kryptonButton1.TabIndex = 0; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton1.Values.Text = "Cancel"; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 406); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(749, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.kchkShowCtrlCopyText); + this.kryptonPanel2.Controls.Add(this.kbtnTestText); + this.kryptonPanel2.Controls.Add(this.kcbShowHelp); + this.kryptonPanel2.Controls.Add(this.kcbMessageBoxOptionsRtlReading); + this.kryptonPanel2.Controls.Add(this.kchkMessageBoxOptionsRightAlign); + this.kryptonPanel2.Controls.Add(this.kryptonGroupBox2); + this.kryptonPanel2.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel2.Controls.Add(this.kryptonGroupBox1); + this.kryptonPanel2.Controls.Add(this.krtbMessageBody); + this.kryptonPanel2.Controls.Add(this.ktxtCaption); + this.kryptonPanel2.Controls.Add(this.kryptonLabel2); + this.kryptonPanel2.Controls.Add(this.kryptonLabel1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(749, 406); + this.kryptonPanel2.TabIndex = 2; + // + // kchkShowCtrlCopyText + // + this.kchkShowCtrlCopyText.Location = new System.Drawing.Point(347, 300); + this.kchkShowCtrlCopyText.Name = "kchkShowCtrlCopyText"; + this.kchkShowCtrlCopyText.Size = new System.Drawing.Size(146, 22); + this.kchkShowCtrlCopyText.TabIndex = 11; + this.kchkShowCtrlCopyText.Values.Text = "Show \"Ctrl+Copy\" text"; + // + // kbtnTestText + // + this.kbtnTestText.Location = new System.Drawing.Point(14, 71); + this.kbtnTestText.Name = "kbtnTestText"; + this.kbtnTestText.Size = new System.Drawing.Size(64, 50); + this.kbtnTestText.TabIndex = 10; + this.kbtnTestText.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnTestText.Values.Text = "Fill\r\nText"; + this.kbtnTestText.Click += new System.EventHandler(this.kbtnTestText_Click); + // + // kcbShowHelp + // + this.kcbShowHelp.Location = new System.Drawing.Point(347, 272); + this.kcbShowHelp.Name = "kcbShowHelp"; + this.kcbShowHelp.Size = new System.Drawing.Size(82, 22); + this.kcbShowHelp.TabIndex = 9; + this.kcbShowHelp.Values.Text = "Show Help"; + // + // kcbMessageBoxOptionsRtlReading + // + this.kcbMessageBoxOptionsRtlReading.Location = new System.Drawing.Point(347, 243); + this.kcbMessageBoxOptionsRtlReading.Name = "kcbMessageBoxOptionsRtlReading"; + this.kcbMessageBoxOptionsRtlReading.Size = new System.Drawing.Size(197, 22); + this.kcbMessageBoxOptionsRtlReading.TabIndex = 8; + this.kcbMessageBoxOptionsRtlReading.Values.Text = "MessageBoxOptions.RtlReading"; + this.kcbMessageBoxOptionsRtlReading.CheckedChanged += new System.EventHandler(this.kcbMessageBoxOptionsRtlReading_CheckedChanged); + // + // kchkMessageBoxOptionsRightAlign + // + this.kchkMessageBoxOptionsRightAlign.Location = new System.Drawing.Point(347, 214); + this.kchkMessageBoxOptionsRightAlign.Name = "kchkMessageBoxOptionsRightAlign"; + this.kchkMessageBoxOptionsRightAlign.Size = new System.Drawing.Size(195, 22); + this.kchkMessageBoxOptionsRightAlign.TabIndex = 7; + this.kchkMessageBoxOptionsRightAlign.Values.Text = "MessageBoxOptions.RightAlign"; + this.kchkMessageBoxOptionsRightAlign.CheckedChanged += new System.EventHandler(this.kchkMessageBoxOptionsRightAlign_CheckedChanged); + // + // kryptonGroupBox2 + // + this.kryptonGroupBox2.Location = new System.Drawing.Point(347, 13); + this.kryptonGroupBox2.Name = "kryptonGroupBox2"; + // + // kryptonGroupBox2.Panel + // + this.kryptonGroupBox2.Panel.Controls.Add(this.krbButtonsYesNo); + this.kryptonGroupBox2.Panel.Controls.Add(this.krbButtonsCancelTryContinue); + this.kryptonGroupBox2.Panel.Controls.Add(this.krbButtonsYesNoCancel); + this.kryptonGroupBox2.Panel.Controls.Add(this.krbButtonsAbortRetryIgnore); + this.kryptonGroupBox2.Panel.Controls.Add(this.krbButtonsRetryCancel); + this.kryptonGroupBox2.Panel.Controls.Add(this.krbButtonsOkCancel); + this.kryptonGroupBox2.Panel.Controls.Add(this.krbButtonsOk); + this.kryptonGroupBox2.Size = new System.Drawing.Size(390, 194); + this.kryptonGroupBox2.TabIndex = 6; + this.kryptonGroupBox2.Values.Heading = "Buttons"; + // + // krbButtonsYesNo + // + this.krbButtonsYesNo.Location = new System.Drawing.Point(199, 64); + this.krbButtonsYesNo.Name = "krbButtonsYesNo"; + this.krbButtonsYesNo.Size = new System.Drawing.Size(62, 22); + this.krbButtonsYesNo.TabIndex = 6; + this.krbButtonsYesNo.Values.Text = "Yes No"; + this.krbButtonsYesNo.CheckedChanged += new System.EventHandler(this.buttons_CheckedChanged); + // + // krbButtonsCancelTryContinue + // + this.krbButtonsCancelTryContinue.Location = new System.Drawing.Point(15, 92); + this.krbButtonsCancelTryContinue.Name = "krbButtonsCancelTryContinue"; + this.krbButtonsCancelTryContinue.Size = new System.Drawing.Size(133, 22); + this.krbButtonsCancelTryContinue.TabIndex = 5; + this.krbButtonsCancelTryContinue.Values.Text = "Cancel Try Continue"; + this.krbButtonsCancelTryContinue.CheckedChanged += new System.EventHandler(this.buttons_CheckedChanged); + // + // krbButtonsYesNoCancel + // + this.krbButtonsYesNoCancel.Location = new System.Drawing.Point(199, 36); + this.krbButtonsYesNoCancel.Name = "krbButtonsYesNoCancel"; + this.krbButtonsYesNoCancel.Size = new System.Drawing.Size(101, 22); + this.krbButtonsYesNoCancel.TabIndex = 4; + this.krbButtonsYesNoCancel.Values.Text = "Yes No Cancel"; + this.krbButtonsYesNoCancel.CheckedChanged += new System.EventHandler(this.buttons_CheckedChanged); + // + // krbButtonsAbortRetryIgnore + // + this.krbButtonsAbortRetryIgnore.Location = new System.Drawing.Point(199, 8); + this.krbButtonsAbortRetryIgnore.Name = "krbButtonsAbortRetryIgnore"; + this.krbButtonsAbortRetryIgnore.Size = new System.Drawing.Size(125, 22); + this.krbButtonsAbortRetryIgnore.TabIndex = 3; + this.krbButtonsAbortRetryIgnore.Values.Text = "Abort Retry Ignore"; + this.krbButtonsAbortRetryIgnore.CheckedChanged += new System.EventHandler(this.buttons_CheckedChanged); + // + // krbButtonsRetryCancel + // + this.krbButtonsRetryCancel.Location = new System.Drawing.Point(15, 64); + this.krbButtonsRetryCancel.Name = "krbButtonsRetryCancel"; + this.krbButtonsRetryCancel.Size = new System.Drawing.Size(91, 22); + this.krbButtonsRetryCancel.TabIndex = 2; + this.krbButtonsRetryCancel.Values.Text = "Retry Cancel"; + this.krbButtonsRetryCancel.CheckedChanged += new System.EventHandler(this.buttons_CheckedChanged); + // + // krbButtonsOkCancel + // + this.krbButtonsOkCancel.Location = new System.Drawing.Point(15, 36); + this.krbButtonsOkCancel.Name = "krbButtonsOkCancel"; + this.krbButtonsOkCancel.Size = new System.Drawing.Size(79, 22); + this.krbButtonsOkCancel.TabIndex = 1; + this.krbButtonsOkCancel.Values.Text = "OK Cancel"; + this.krbButtonsOkCancel.CheckedChanged += new System.EventHandler(this.buttons_CheckedChanged); + // + // krbButtonsOk + // + this.krbButtonsOk.Checked = true; + this.krbButtonsOk.Location = new System.Drawing.Point(15, 8); + this.krbButtonsOk.Name = "krbButtonsOk"; + this.krbButtonsOk.Size = new System.Drawing.Size(40, 22); + this.krbButtonsOk.TabIndex = 0; + this.krbButtonsOk.Values.Text = "OK"; + this.krbButtonsOk.CheckedChanged += new System.EventHandler(this.buttons_CheckedChanged); + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + this.kryptonThemeComboBox1.DropDownWidth = 256; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(84, 369); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(256, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 5; + // + // kryptonGroupBox1 + // + this.kryptonGroupBox1.Location = new System.Drawing.Point(84, 214); + this.kryptonGroupBox1.Name = "kryptonGroupBox1"; + // + // kryptonGroupBox1.Panel + // + this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconShield); + this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconWinLogo); + this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconWarning); + this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconInformation); + this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconQuestion); + this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconError); + this.kryptonGroupBox1.Panel.Controls.Add(this.krbIconNone); + this.kryptonGroupBox1.Size = new System.Drawing.Size(256, 149); + this.kryptonGroupBox1.TabIndex = 4; + this.kryptonGroupBox1.Values.Heading = "Icon"; + // + // krbIconShield + // + this.krbIconShield.Location = new System.Drawing.Point(118, 36); + this.krbIconShield.Name = "krbIconShield"; + this.krbIconShield.Size = new System.Drawing.Size(57, 22); + this.krbIconShield.TabIndex = 6; + this.krbIconShield.Values.Text = "Shield"; + this.krbIconShield.CheckedChanged += new System.EventHandler(this.icon_CheckedChanged); + // + // krbIconWinLogo + // + this.krbIconWinLogo.Location = new System.Drawing.Point(118, 64); + this.krbIconWinLogo.Name = "krbIconWinLogo"; + this.krbIconWinLogo.Size = new System.Drawing.Size(73, 22); + this.krbIconWinLogo.TabIndex = 5; + this.krbIconWinLogo.Values.Text = "WinLogo"; + this.krbIconWinLogo.CheckedChanged += new System.EventHandler(this.icon_CheckedChanged); + // + // krbIconWarning + // + this.krbIconWarning.Location = new System.Drawing.Point(13, 92); + this.krbIconWarning.Name = "krbIconWarning"; + this.krbIconWarning.Size = new System.Drawing.Size(70, 22); + this.krbIconWarning.TabIndex = 4; + this.krbIconWarning.Values.Text = "Warning"; + this.krbIconWarning.CheckedChanged += new System.EventHandler(this.icon_CheckedChanged); + // + // krbIconInformation + // + this.krbIconInformation.Location = new System.Drawing.Point(118, 7); + this.krbIconInformation.Name = "krbIconInformation"; + this.krbIconInformation.Size = new System.Drawing.Size(88, 22); + this.krbIconInformation.TabIndex = 3; + this.krbIconInformation.Values.Text = "Information"; + this.krbIconInformation.CheckedChanged += new System.EventHandler(this.icon_CheckedChanged); + // + // krbIconQuestion + // + this.krbIconQuestion.Location = new System.Drawing.Point(13, 64); + this.krbIconQuestion.Name = "krbIconQuestion"; + this.krbIconQuestion.Size = new System.Drawing.Size(73, 22); + this.krbIconQuestion.TabIndex = 2; + this.krbIconQuestion.Values.Text = "Question"; + this.krbIconQuestion.CheckedChanged += new System.EventHandler(this.icon_CheckedChanged); + // + // krbIconError + // + this.krbIconError.Location = new System.Drawing.Point(13, 36); + this.krbIconError.Name = "krbIconError"; + this.krbIconError.Size = new System.Drawing.Size(50, 22); + this.krbIconError.TabIndex = 1; + this.krbIconError.Values.Text = "Error"; + this.krbIconError.CheckedChanged += new System.EventHandler(this.icon_CheckedChanged); + // + // krbIconNone + // + this.krbIconNone.Checked = true; + this.krbIconNone.Location = new System.Drawing.Point(13, 7); + this.krbIconNone.Name = "krbIconNone"; + this.krbIconNone.Size = new System.Drawing.Size(53, 22); + this.krbIconNone.TabIndex = 0; + this.krbIconNone.Values.Text = "None"; + this.krbIconNone.CheckedChanged += new System.EventHandler(this.icon_CheckedChanged); + // + // krtbMessageBody + // + this.krtbMessageBody.Location = new System.Drawing.Point(84, 43); + this.krtbMessageBody.Name = "krtbMessageBody"; + this.krtbMessageBody.Size = new System.Drawing.Size(256, 164); + this.krtbMessageBody.TabIndex = 3; + this.krtbMessageBody.Text = "This is a sample messagebox..."; + // + // ktxtCaption + // + this.ktxtCaption.Location = new System.Drawing.Point(84, 13); + this.ktxtCaption.Name = "ktxtCaption"; + this.ktxtCaption.Size = new System.Drawing.Size(256, 23); + this.ktxtCaption.TabIndex = 2; + this.ktxtCaption.Text = "Caption"; + // + // kryptonLabel2 + // + this.kryptonLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel2.Location = new System.Drawing.Point(14, 43); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(64, 22); + this.kryptonLabel2.TabIndex = 1; + this.kryptonLabel2.Values.Text = "Message:"; + // + // kryptonLabel1 + // + this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel1.Location = new System.Drawing.Point(14, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(59, 22); + this.kryptonLabel1.TabIndex = 0; + this.kryptonLabel1.Values.Text = "Caption:"; + // + // CustomMessageBoxTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kryptonButton1; + this.ClientSize = new System.Drawing.Size(749, 457); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonBorderEdge1); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "CustomMessageBoxTest"; + this.Text = "CustomMessageBoxTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.kryptonPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2.Panel)).EndInit(); + this.kryptonGroupBox2.Panel.ResumeLayout(false); + this.kryptonGroupBox2.Panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox2)).EndInit(); + this.kryptonGroupBox2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit(); + this.kryptonGroupBox1.Panel.ResumeLayout(false); + this.kryptonGroupBox1.Panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit(); + this.kryptonGroupBox1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kryptonPanel2; + private KryptonLabel kryptonLabel1; + private KryptonLabel kryptonLabel2; + private KryptonTextBox ktxtCaption; + private KryptonRichTextBox krtbMessageBody; + private KryptonGroupBox kryptonGroupBox1; + private KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonGroupBox kryptonGroupBox2; + private KryptonCheckBox kchkMessageBoxOptionsRightAlign; + private KryptonCheckBox kcbMessageBoxOptionsRtlReading; + private KryptonCheckBox kcbShowHelp; + private KryptonRadioButton krbIconNone; + private KryptonRadioButton krbIconShield; + private KryptonRadioButton krbIconWinLogo; + private KryptonRadioButton krbIconWarning; + private KryptonRadioButton krbIconInformation; + private KryptonRadioButton krbIconQuestion; + private KryptonRadioButton krbIconError; + private KryptonRadioButton krbButtonsOk; + private KryptonRadioButton krbButtonsOkCancel; + private KryptonRadioButton krbButtonsRetryCancel; + private KryptonRadioButton krbButtonsAbortRetryIgnore; + private KryptonRadioButton krbButtonsYesNoCancel; + private KryptonRadioButton krbButtonsCancelTryContinue; + private KryptonRadioButton krbButtonsYesNo; + private KryptonButton kbtnTestText; + private KryptonButton kryptonButton1; + private KryptonButton kbtnShow; + private KryptonCheckBox kchkShowCtrlCopyText; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CustomMessageBoxTest.cs b/Source/Krypton Components/TestForm/CustomMessageBoxTest.cs new file mode 100644 index 000000000..59a8063c1 --- /dev/null +++ b/Source/Krypton Components/TestForm/CustomMessageBoxTest.cs @@ -0,0 +1,211 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class CustomMessageBoxTest : KryptonForm + { + private const string SEED_TEXT = + @"// ***************************************************************************** +// BSD 3-Clause License (https://github.com/ComponentFactory/Krypton/blob/master/LICENSE) +// © Component Factory Pty Ltd, 2006-2016, All rights reserved. +// The software and associated documentation supplied hereunder are the +// proprietary information of Component Factory Pty Ltd, 13 Swallows Close, +// Mornington, Vic 3931, Australia and are supplied subject to licence terms. +// +// Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV) 2017 - 2024. All rights reserved. (https://github.com/Krypton-Suite/Standard-Toolkit) +// Version 4.7.0.0 www.ComponentFactory.com +// ***************************************************************************** +"; + + private MessageBoxIcon _mbIcon = MessageBoxIcon.Warning; + private KryptonMessageBoxIcon _kmbIcon = KryptonMessageBoxIcon.Warning; + private KryptonMessageBoxButtons _mbButtons = KryptonMessageBoxButtons.OKCancel; + private MessageBoxOptions _options = 0; + + public CustomMessageBoxTest() + { + InitializeComponent(); + + HelpRequested += CustomMessageBoxTest_HelpRequested; + } + + private void icon_CheckedChanged(object sender, EventArgs e) + { + if (krbIconNone.Checked) + { + _mbIcon = MessageBoxIcon.None; + _kmbIcon = KryptonMessageBoxIcon.None; + } + else if (krbIconError.Checked) + { + _mbIcon = MessageBoxIcon.Error; + _kmbIcon = KryptonMessageBoxIcon.Error; + } + else if (krbIconQuestion.Checked) + { + _mbIcon = MessageBoxIcon.Question; + _kmbIcon = KryptonMessageBoxIcon.Question; + } + else if (krbIconWarning.Checked) + { + _mbIcon = MessageBoxIcon.Warning; + _kmbIcon = KryptonMessageBoxIcon.Warning; + } + else if (krbIconInformation.Checked) + { + _mbIcon = MessageBoxIcon.Information; + _kmbIcon = KryptonMessageBoxIcon.Information; + } + else if (krbIconShield.Checked) + { + _mbIcon = MessageBoxIcon.None; + _kmbIcon = KryptonMessageBoxIcon.Shield; + } + else if (!krbIconWinLogo.Checked) + { + _mbIcon = MessageBoxIcon.None; + _kmbIcon = KryptonMessageBoxIcon.WindowsLogo; + } + } + + private void buttons_CheckedChanged(object sender, EventArgs e) + { + if (krbButtonsOk.Checked) + { + _mbButtons = KryptonMessageBoxButtons.OK; + } + else if (krbButtonsOkCancel.Checked) + { + _mbButtons = KryptonMessageBoxButtons.OKCancel; + } + else if (krbButtonsRetryCancel.Checked) + { + _mbButtons = KryptonMessageBoxButtons.RetryCancel; + } + else if (krbButtonsAbortRetryIgnore.Checked) + { + _mbButtons = KryptonMessageBoxButtons.AbortRetryIgnore; + } + else if (krbButtonsYesNo.Checked) + { + _mbButtons = KryptonMessageBoxButtons.YesNo; + } + else if (krbButtonsYesNoCancel.Checked) + { + _mbButtons = KryptonMessageBoxButtons.YesNoCancel; + } + else if (krbButtonsCancelTryContinue.Checked) + { + _mbButtons = KryptonMessageBoxButtons.CancelTryContinue; + } + } + + private void CustomMessageBoxTest_HelpRequested(object sender, HelpEventArgs hlpevent) + { + // Create a custom Help window in response to the HelpRequested event. + using var helpForm = new Form + { + // Set up the form position, size, and title caption. + StartPosition = FormStartPosition.Manual, + Size = new Size(200, 400), + DesktopLocation = new Point(DesktopBounds.X + Size.Width, DesktopBounds.Top), + Text = @"Help Form" + }; + + // Create a label to contain the Help text. + Label helpLabel = new Label(); + + // Add the label to the form and set its text. + helpForm.Controls.Add(helpLabel); + helpLabel.Dock = DockStyle.Fill; + + // Use the sender parameter to identify the context of the Help request. + // The parameter must be cast to the Control type to get the Tag property. + Control? senderControl = sender as Control; + + helpLabel.Text = $@"Help information shown in response to user action on the '{(string?)senderControl!.Tag}' message."; + + // Set the Help form to be owned by the main form. This helps + // to ensure that the Help form is disposed of. + AddOwnedForm(helpForm); + + // Show the custom Help window. + helpForm.Show(); + + // Indicate that the HelpRequested event is handled. + hlpevent.Handled = true; + } + + private void kchkMessageBoxOptionsRightAlign_CheckedChanged(object sender, EventArgs e) + { + if (kchkMessageBoxOptionsRightAlign.Checked) + { + _options |= MessageBoxOptions.RightAlign; + } + else + { + _options &= ~MessageBoxOptions.RightAlign; + } + } + + private void kcbMessageBoxOptionsRtlReading_CheckedChanged(object sender, EventArgs e) + { + if (kcbMessageBoxOptionsRtlReading.Checked) + { + _options |= MessageBoxOptions.RtlReading; + } + else + { + _options &= ~MessageBoxOptions.RtlReading; + } + } + + private void kbtnShow_Click(object sender, EventArgs e) + { + if (!krbIconWinLogo.Checked + && !krbIconShield.Checked +#if NET8_0_OR_GREATER +#else + && !krbButtonsCancelTryContinue.Checked +#endif + ) + { + if (kcbShowHelp.Checked) + { + MessageBox.Show(krtbMessageBody.Text, ktxtCaption.Text, + (MessageBoxButtons)_mbButtons, + _mbIcon, MessageBoxDefaultButton.Button1, + _options, + kcbShowHelp.Checked); + } + else + { + MessageBox.Show(this, krtbMessageBody.Text, ktxtCaption.Text, + (MessageBoxButtons)_mbButtons, + _mbIcon, MessageBoxDefaultButton.Button1, + _options); + } + } + + var res = KryptonMessageBox.Show(this, krtbMessageBody.Text, ktxtCaption.Text, + _mbButtons, + displayHelpButton: kcbShowHelp.Checked, + _kmbIcon, KryptonMessageBoxDefaultButton.Button1, + options: _options, kchkShowCtrlCopyText.Checked); + + krtbMessageBody.Text = $@"Krypton DialogResult = {res}"; + } + + private void kbtnTestText_Click(object sender, EventArgs e) + { + krtbMessageBody.Text = SEED_TEXT; + } + } +} diff --git a/Source/Krypton Components/TestForm/CustomMessageBoxTest.resx b/Source/Krypton Components/TestForm/CustomMessageBoxTest.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/CustomMessageBoxTest.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CustomPaletteTest.Designer.cs b/Source/Krypton Components/TestForm/CustomPaletteTest.Designer.cs new file mode 100644 index 000000000..5fdf56ba6 --- /dev/null +++ b/Source/Krypton Components/TestForm/CustomPaletteTest.Designer.cs @@ -0,0 +1,106 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class CustomPaletteTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CustomPaletteTest)); + this.kryptonManager1 = new Krypton.Toolkit.KryptonManager(this.components); + this.kryptonCustomPaletteBase1 = new Krypton.Toolkit.KryptonCustomPaletteBase(this.components); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonScrollBar1 = new Krypton.Toolkit.KryptonScrollBar(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonManager1 + // + this.kryptonManager1.BaseFont = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kryptonManager1.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + // + // kryptonCustomPaletteBase1 + // + this.kryptonCustomPaletteBase1.BaseFont = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kryptonCustomPaletteBase1.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom; + this.kryptonCustomPaletteBase1.ThemeName = null; + this.kryptonCustomPaletteBase1.UseThemeFormChromeBorderWidth = Krypton.Toolkit.InheritBool.True; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + this.kryptonThemeComboBox1.DropDownWidth = 301; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(239, 217); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(301, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 0; + // + // kryptonScrollBar1 + // + this.kryptonScrollBar1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(93)))), ((int)(((byte)(140)))), ((int)(((byte)(201))))); + this.kryptonScrollBar1.DisabledBorderColor = System.Drawing.Color.Gray; + this.kryptonScrollBar1.Location = new System.Drawing.Point(66, 12); + this.kryptonScrollBar1.Name = "kryptonScrollBar1"; + this.kryptonScrollBar1.Opacity = 1D; + this.kryptonScrollBar1.ScrollBarWidth = 19; + this.kryptonScrollBar1.Size = new System.Drawing.Size(19, 404); + this.kryptonScrollBar1.TabIndex = 1; + this.kryptonScrollBar1.Text = "kryptonScrollBar1"; + // + // CustomPaletteTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(762, 453); + this.Controls.Add(this.kryptonScrollBar1); + this.Controls.Add(this.kryptonThemeComboBox1); + this.Name = "CustomPaletteTest"; + this.Text = "CustomPaletteTest"; + this.UseThemeFormChromeBorderWidth = false; + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonManager kryptonManager1; + private Krypton.Toolkit.KryptonCustomPaletteBase kryptonCustomPaletteBase1; + private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; + private Krypton.Toolkit.KryptonScrollBar kryptonScrollBar1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/CustomPaletteTest.cs b/Source/Krypton Components/TestForm/CustomPaletteTest.cs new file mode 100644 index 000000000..f111618a2 --- /dev/null +++ b/Source/Krypton Components/TestForm/CustomPaletteTest.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class CustomPaletteTest : KryptonForm + { + public CustomPaletteTest() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/CustomPaletteTest.resx b/Source/Krypton Components/TestForm/CustomPaletteTest.resx new file mode 100644 index 000000000..4c7f358df --- /dev/null +++ b/Source/Krypton Components/TestForm/CustomPaletteTest.resx @@ -0,0 +1,236 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAGxJREFUOE/Fj9sKwCAMQ/30/bmuN+2ipX0QdiAobQyx3aIHKtMRmqlK6LOFzehk + R4I3u/sTaIcfIWRGohBdzn+rzgF2vp4JD5FllkC5W4NvE13mDTxbAGIBtEfJ3AWcVW8QUG8QcKFBrn9p + bQBhPWO90ciPIQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAExJREFUOE/NjQEKACAIA316Py8WDUQCU4k6iBl4U27SVxL7d/mjgJKeQ+iCFLyc + LgAVua3rMzNQRPIdYQUtuiW75fcFALMrk9ByBZEBKsI2V+Ba/FIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAF9JREFUOE/NyjEOACEQQtG5/6U1CDaLooXF/mQyBa9+VTvcsbYLmy4m7s0Nf8hN + A63C9rll4jk4ck8kB0fuieTgyD2RHBy5J5KDI/dEcnDknkgOjtwTycGRe3O8uVdVdfk5mHb5U4QzAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAF1JREFUOE/VjkEKwCAMBH26P08ZZENtxKrppQNLUHeC5TfYLds8JZ2PlonwG12s + bA1dMyPQPY4yxOXZpNfqES/NJr1Wj3hJk7uNIPZyre+RDCkZUjKkZNDDSr6mlAtbmO81DjxS+QAAAABJ + RU5ErkJggg== + + + + + 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 + QgjMFA+XAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAFVJREFUOE/dkEEKACEMA/t0n9afKaE0iKBYqxcHhoVtkoNyi3ooqaXYT1Vd6hl8 + UXRCA50kNOBZFJ1fBrrD1CFHeNgVHasa42Hp0UD6DZ4PAIYDZhFpCXFkDQRWNrcAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAAEJJREFUOE9jGAV0AQ3/kXFDA4jGCtAlYJrQAU5DkDVgVYAE8BpASDMIEDSAkCFE + GYBVERDgDUj8AKKRTM3DFjAwAAAUADPhsvm7BwAAAABJRU5ErkJggg== + + + + 165, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/DataGridViewSetup.cs b/Source/Krypton Components/TestForm/DataGridViewSetup.cs new file mode 100644 index 000000000..2f3cc4da1 --- /dev/null +++ b/Source/Krypton Components/TestForm/DataGridViewSetup.cs @@ -0,0 +1,439 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml.Linq; +using System.Xml.XPath; + +namespace TestForm +{ + public class DataGridViewSetup + { + private SandBoxGridColumn[] _activeColumns; + + public enum SandBoxGridColumn + { + ColumnCustomerId = 0, + ColumnCustomerName = 1, + ColumnAddress = 2, + ColumnCity = 3, + ColumnCountry = 4, + ColumnOrderDate = 5, + ColumnProduct = 6, + ColumnPrice = 7, + SatisfactionColumn = 8, + ColumnToken = 9 + } + + public enum LoadState + { + Before, + After + } + + /// + /// Setups the data grid view. + /// + /// The grid. + /// if set to true [restore if possible]. + public void SetupDataGridView(KryptonOutlookGrid grid, bool restoreIfPossible) + { + if (File.Exists(Application.StartupPath + "/grid.xml") & restoreIfPossible) + { + try + { + LoadConfigFromFile(Application.StartupPath + "/grid.xml", grid); + } + catch (Exception ex) + { + KryptonMessageBox.Show("Error when retrieving configuration : " + ex.Message, "Error", + KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); + grid.ClearEverything(); + LoadDefaultConfiguration(grid); + } + } + else + { + LoadDefaultConfiguration(grid); + } + } + + /// + /// Loads the default configuration. + /// + /// The grid. + private void LoadDefaultConfiguration(KryptonOutlookGrid grid) + { + grid.ClearEverything(); + grid.GroupBox!.Visible = true; + grid.HideColumnOnGrouping = false; + + grid.FillMode = GridFillMode.GroupsAndNodes; //treemode enabled; + grid.ShowLines = true; + + _activeColumns = + [ + SandBoxGridColumn.ColumnCustomerId, + SandBoxGridColumn.ColumnCustomerName, + SandBoxGridColumn.ColumnAddress, + SandBoxGridColumn.ColumnCity, + SandBoxGridColumn.ColumnCountry, + SandBoxGridColumn.ColumnOrderDate, + SandBoxGridColumn.ColumnProduct, + SandBoxGridColumn.ColumnPrice, + SandBoxGridColumn.SatisfactionColumn, + SandBoxGridColumn.ColumnToken + ]; + + DataGridViewColumn[] columnsToAdd = + [ + SetupColumn(SandBoxGridColumn.ColumnCustomerId), + SetupColumn(SandBoxGridColumn.ColumnCustomerName), + SetupColumn(SandBoxGridColumn.ColumnAddress), + SetupColumn(SandBoxGridColumn.ColumnCity), + SetupColumn(SandBoxGridColumn.ColumnCountry), + SetupColumn(SandBoxGridColumn.ColumnOrderDate), + SetupColumn(SandBoxGridColumn.ColumnProduct), + SetupColumn(SandBoxGridColumn.ColumnPrice), + SetupColumn(SandBoxGridColumn.SatisfactionColumn), + SetupColumn(SandBoxGridColumn.ColumnToken) + ]; + + grid.Columns.AddRange(columnsToAdd); + + //Define the columns for a possible grouping + grid.AddInternalColumn(columnsToAdd[0], new OutlookGridDefaultGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[1], new OutlookGridAlphabeticGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[2], new OutlookGridDefaultGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[3], new OutlookGridDefaultGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[4], new OutlookGridDefaultGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[5], new OutlookGridDateTimeGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[6], new OutlookGridDefaultGroup(null) { OneItemText = "1 product", XxxItemsText = " products" }, SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[7], new OutlookGridPriceGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[8], new OutlookGridDefaultGroup(null), SortOrder.None, -1, -1); + grid.AddInternalColumn(columnsToAdd[9], new OutlookGridDefaultGroup(null), SortOrder.None, -1, -1); + + //Add a default conditional formatting + var cond = new ConditionalFormatting + { + ColumnName = SandBoxGridColumn.ColumnPrice.ToString(), + FormatType = EnumConditionalFormatType.TwoColorsRange, + FormatParams = new TwoColorsParams(Color.White, Color.FromArgb(255, 255, 58, 61)) + }; + grid.ConditionalFormatting.Add(cond); + } + + + /// + /// Loads the configuration from file. + /// + /// The file. + /// The grid. + private void LoadConfigFromFile(string file, KryptonOutlookGrid grid) + { + if (string.IsNullOrEmpty(file)) + throw new Exception("Grid config file is missing !"); + + XDocument doc = XDocument.Load(file); + int.TryParse(doc.Element("OutlookGrid")?.Attribute("V")?.Value, out var versionGrid); + + //Upgrade if necessary the config file + CheckAndUpgradeConfigFile(versionGrid, doc, grid, LoadState.Before); + grid.ClearEverything(); + grid.GroupBox!.Visible = CommonHelper.StringToBool(doc.XPathSelectElement("OutlookGrid/GroupBox")?.Value!); + grid.HideColumnOnGrouping = CommonHelper.StringToBool(doc.XPathSelectElement("OutlookGrid/HideColumnOnGrouping")?.Value!); + + //Initialize + int nbColsInFile = doc.XPathSelectElements("//Column").Count(); + var columnsToAdd = new DataGridViewColumn[nbColsInFile]; + var enumCols = new SandBoxGridColumn[nbColsInFile]; + var outlookColumnsToAdd = new OutlookGridColumn[columnsToAdd.Length]; + var hash = new SortedList();// (DisplayIndex , Index) + int i = 0; + + foreach (var xNode in doc.XPathSelectElement("OutlookGrid/Columns")?.Nodes()!) + { + var node = (XElement)xNode; + //Create the columns and restore the saved properties + //As the OutlookGrid receives constructed DataGridViewColumns, only the parent application can recreate them (dgvcolumn not serializable) + enumCols[i] = (SandBoxGridColumn)Enum.Parse(typeof(SandBoxGridColumn), node.Element("Name")?.Value!); + columnsToAdd[i] = SetupColumn(enumCols[i]); + columnsToAdd[i].Width = int.Parse(node.Element("Width")?.Value!); + columnsToAdd[i].Visible = CommonHelper.StringToBool(node.Element("Visible")?.Value!); + hash.Add(int.Parse(node.Element("DisplayIndex")?.Value!), i); + //Reinit the group if it has been set previously + IOutlookGridGroup? group = null; + if (!node.Element("GroupingType")!.IsEmpty && node.Element("GroupingType")!.HasElements) + { + XElement? node2 = node.Element("GroupingType"); + group = Activator.CreateInstance(Type.GetType(TypeConverter.ProcessType(node2?.Element("Name")?.Value!)!, true)!) as IOutlookGridGroup; + if (group != null) + { + group.OneItemText = node2?.Element("OneItemText")?.Value; + group.XxxItemsText = node2?.Element("XXXItemsText")?.Value; + group.SortBySummaryCount = + CommonHelper.StringToBool(node2?.Element("SortBySummaryCount")?.Value!); + if (!string.IsNullOrEmpty(node2?.Element("ItemsComparer")?.Value)) + { + object? comparer = Activator.CreateInstance( + Type.GetType(TypeConverter.ProcessType(node2?.Element("ItemsComparer")?.Value)!, + true)!); + group.ItemsComparer = comparer as IComparer; + } + + if (node2!.Element("Name")!.Value.Contains("OutlookGridDateTimeGroup")) + { + ((OutlookGridDateTimeGroup)group).Interval = (DateInterval)Enum.Parse(typeof(DateInterval), + node2.Element("GroupDateInterval")?.Value!); + } + } + } + outlookColumnsToAdd[i] = new OutlookGridColumn(columnsToAdd[i], group, (SortOrder)Enum.Parse(typeof(SortOrder), node.Element("SortDirection")?.Value!), int.Parse(node.Element("GroupIndex")?.Value!), int.Parse(node.Element("SortIndex")?.Value!)); + + i += 1; + } + //First add the underlying DataGridViewColumns to the grid + grid.Columns.AddRange(columnsToAdd); + //And then the outlookgrid columns + grid.AddRangeInternalColumns(outlookColumnsToAdd); + + //Add conditional formatting to the grid + foreach (var xNode in (doc.XPathSelectElement("OutlookGrid/ConditionalFormatting") != null ? doc.XPathSelectElement("OutlookGrid/ConditionalFormatting")?.Nodes() : null)!) + { + var node = (XElement)xNode; + var conditionFormatType = (EnumConditionalFormatType)Enum.Parse(typeof(EnumConditionalFormatType), node.Element("FormatType")?.Value!); + XElement? nodeParams = node.Element("FormatParams"); + IFormatParams? conditionFormatParams = conditionFormatType switch + { + EnumConditionalFormatType.Bar => new BarParams( + Color.FromArgb(int.Parse(nodeParams?.Element("BarColor")?.Value!)), + CommonHelper.StringToBool(nodeParams?.Element("GradientFill")?.Value!)), + EnumConditionalFormatType.ThreeColorsRange => new ThreeColorsParams( + Color.FromArgb(int.Parse(nodeParams?.Element("MinimumColor")?.Value!)), + Color.FromArgb(int.Parse(nodeParams?.Element("MediumColor")?.Value!)), + Color.FromArgb(int.Parse(nodeParams?.Element("MaximumColor")?.Value!))), + EnumConditionalFormatType.TwoColorsRange => new TwoColorsParams( + Color.FromArgb(int.Parse(nodeParams?.Element("MinimumColor")?.Value!)), + Color.FromArgb(int.Parse(nodeParams?.Element("MaximumColor")?.Value!))), + _ => null + }; + grid.ConditionalFormatting.Add(new ConditionalFormatting(node.Element("ColumnName")?.Value!, conditionFormatType, conditionFormatParams)); + } + + //We need to loop through the columns in the order of the display order, starting at zero; otherwise the columns will fall out of order as the loop progresses. + foreach (KeyValuePair kvp in hash) + { + columnsToAdd[kvp.Value].DisplayIndex = kvp.Key; + } + + _activeColumns = enumCols; + } + + /// + /// Checks the and upgrade configuration file. + /// + /// The version grid. + /// The document. + /// The grid. + /// The state. + private void CheckAndUpgradeConfigFile(int versionGrid, XDocument doc, KryptonOutlookGrid grid, LoadState state) + { + while (versionGrid < StaticInfos._GRIDCONFIG_VERSION) + { + UpgradeGridConfigToVx(doc, versionGrid + 1, grid, state); + versionGrid += 1; + } + } + + /// + /// Upgrades the grid configuration to vx. + /// + /// The document. + /// The version. + /// The grid. + /// The state. + private void UpgradeGridConfigToVx(XDocument doc, int version, KryptonOutlookGrid grid, LoadState state) + { + //Do changes according to version + //For example you can add automatically new columns. This can be useful when you update your application to add columns and would like to display them to the user for the first time. + //switch (version) + //{ + //case 2: + // // Do changes to match the V2 + // if (state == DataGridViewSetup.LoadState.Before) + // { + // doc.Element("OutlookGrid").Attribute("V").Value = version.ToString(); + // Array.Resize(ref activeColumns, activeColumns.Length + 1); + // DataGridViewColumn columnToAdd = SetupColumn(SandBoxGridColumn.ColumnPrice2); + // Grid.Columns.Add(columnToAdd); + // Grid.AddInternalColumn(columnToAdd, new OutlookGridDefaultGroup(null) + // { + // OneItemText = "Example", + // XXXItemsText = "Examples" + // }, SortOrder.None, -1, -1); + // activeColumns[activeColumns.Length - 1] = SandBoxGridColumn.ColumnPrice2; + + // Grid.PersistConfiguration(PublicFcts.GetGridConfigFile, version); + // } + // break; + //} + } + + /// + /// Use this function if you do not add your columns at design time. + /// + /// + /// + private DataGridViewColumn SetupColumn(SandBoxGridColumn colType) + { + DataGridViewColumn? column; + switch (colType) + { + case SandBoxGridColumn.ColumnCustomerId: + column = new KryptonDataGridViewTextBoxColumn + { + HeaderText = @"Customer ID", + Name = "ColumnCustomerID", + SortMode = DataGridViewColumnSortMode.Programmatic, + Width = 79 + }; + return column; + + case SandBoxGridColumn.ColumnCustomerName: + column = new KryptonDataGridViewTreeTextColumn + { + HeaderText = @"Name", + Name = "ColumnCustomerName", + SortMode = DataGridViewColumnSortMode.Programmatic, + Width = 79 + };// KryptonDataGridViewTextBoxColumn(); + return column; + + case SandBoxGridColumn.ColumnAddress: + column = new KryptonDataGridViewTextBoxColumn + { + HeaderText = @"Address", + Name = "ColumnAddress", + SortMode = DataGridViewColumnSortMode.Programmatic, + Width = 79 + }; + return column; + + case SandBoxGridColumn.ColumnCity: + column = new KryptonDataGridViewTextBoxColumn + { + HeaderText = @"City", + Name = "ColumnCity", + SortMode = DataGridViewColumnSortMode.Programmatic, + Width = 79 + }; + return column; + + case SandBoxGridColumn.ColumnCountry: + column = new KryptonDataGridViewTextAndImageColumn + { + HeaderText = @"Country", + Name = "ColumnCountry", + Resizable = DataGridViewTriState.True, + SortMode = DataGridViewColumnSortMode.Programmatic, + Width = 78 + }; + return column; + + case SandBoxGridColumn.ColumnOrderDate: + column = new KryptonDataGridViewDateTimePickerColumn + { + CalendarTodayDate = DateTime.Now, + Checked = false, + Format = DateTimePickerFormat.Short, + HeaderText = @"Order Date", + Name = "ColumnOrderDate", + SortMode = DataGridViewColumnSortMode.Programmatic, + Width = 79 + }; + return column; + + case SandBoxGridColumn.ColumnProduct: + column = new KryptonDataGridViewTextBoxColumn + { + HeaderText = @"Product", + Name = "ColumnProduct", + SortMode = DataGridViewColumnSortMode.Programmatic, + Width = 79 + }; + return column; + + case SandBoxGridColumn.ColumnPrice: + { + column = new KryptonDataGridViewFormattingColumn + { + Name = colType.ToString(), + ValueType = typeof(decimal) //really important for formatting + }; + var dataGridViewCellStyle1 = new DataGridViewCellStyle + { + Format = "C2", + NullValue = "" + }; + column.DefaultCellStyle = dataGridViewCellStyle1; + column.HeaderText = @"Price"; + column.Resizable = DataGridViewTriState.True; + column.SortMode = DataGridViewColumnSortMode.Programmatic; + column.Width = 79; + } + return column; + + case SandBoxGridColumn.SatisfactionColumn: + { + column = new KryptonDataGridViewPercentageColumn(); + var dataGridViewCellStyle2 = new DataGridViewCellStyle + { + Format = "0%" + }; + column.DefaultCellStyle = dataGridViewCellStyle2; + column.HeaderText = @"Satisfaction"; + column.Name = colType.ToString(); + column.SortMode = DataGridViewColumnSortMode.Programmatic; + } + return column; + + case SandBoxGridColumn.ColumnToken: + column = new KryptonDataGridViewTokenColumn + { + Name = colType.ToString(), + ReadOnly = true, + SortMode = DataGridViewColumnSortMode.Programmatic, + HeaderText = @"Tag" + }; + return column; + + default: + throw new Exception("Unknown Column Type !! TODO improve that !"); + } + } + } +} + +public class TypeConverter +{ + public static string? ProcessType(string? fullQualifiedName) + { + //Translate types here to accomodate code changes, namespaces and version + //Select Case FullQualifiedName + // Case "JDHSoftware.Krypton.Toolkit.KryptonOutlookGrid.OutlookGridAlphabeticGroup, JDHSoftware.Krypton.Toolkit, Version=1.2.0.0, Culture=neutral, PublicKeyToken=e12f297423986ef5", + // "JDHSoftware.Krypton.Toolkit.KryptonOutlookGrid.OutlookGridAlphabeticGroup, JDHSoftware.Krypton.Toolkit, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null" + // 'Change with new version or namespace or both ! + // FullQualifiedName = "TestMe, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null" + // Exit Select + //End Select + return fullQualifiedName; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/DataGridViewTest.Designer.cs b/Source/Krypton Components/TestForm/DataGridViewTest.Designer.cs new file mode 100644 index 000000000..c8d944414 --- /dev/null +++ b/Source/Krypton Components/TestForm/DataGridViewTest.Designer.cs @@ -0,0 +1,373 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class DataGridViewTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonDataGridView1 = new Krypton.Toolkit.KryptonDataGridView(); + this.dataSet = new System.Data.DataSet(); + this.dtTestData = new System.Data.DataTable(); + this.dataDateTime = new System.Data.DataColumn(); + this.dataComboBox = new System.Data.DataColumn(); + this.dataTextBox = new System.Data.DataColumn(); + this.dataMaskedTextBox = new System.Data.DataColumn(); + this.dataDomainUpDown = new System.Data.DataColumn(); + this.dataNumericUpDown = new System.Data.DataColumn(); + this.dataButton = new System.Data.DataColumn(); + this.dataCheckBox = new System.Data.DataColumn(); + this.kryptonContextMenu1 = new Krypton.Toolkit.KryptonContextMenu(); + this.kryptonContextMenuItems1 = new Krypton.Toolkit.KryptonContextMenuItems(); + this.kryptonContextMenuHeading1 = new Krypton.Toolkit.KryptonContextMenuHeading(); + this.kryptonContextMenuSeparator1 = new Krypton.Toolkit.KryptonContextMenuSeparator(); + this.kryptonContextMenuCheckBox1 = new Krypton.Toolkit.KryptonContextMenuCheckBox(); + this.kryptonContextMenuCheckButton1 = new Krypton.Toolkit.KryptonContextMenuCheckButton(); + this.kryptonContextMenuRadioButton1 = new Krypton.Toolkit.KryptonContextMenuRadioButton(); + this.kryptonContextMenuLinkLabel1 = new Krypton.Toolkit.KryptonContextMenuLinkLabel(); + this.kryptonContextMenuColorColumns1 = new Krypton.Toolkit.KryptonContextMenuColorColumns(); + this.kryptonContextMenuImageSelect1 = new Krypton.Toolkit.KryptonContextMenuImageSelect(); + this.kryptonContextMenuMonthCalendar1 = new Krypton.Toolkit.KryptonContextMenuMonthCalendar(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); + this.buttonClearCellColors = new Krypton.Toolkit.KryptonButton(); + this.buttonRandomCellColors = new Krypton.Toolkit.KryptonButton(); + this.kcmbGridStyle = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonPropertyGrid1 = new Krypton.Toolkit.KryptonPropertyGrid(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonDataGridView1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataSet)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.dtTestData)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbGridStyle)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 567); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(1645, 62); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderSecondary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(1645, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.kryptonDataGridView1); + this.kryptonPanel2.Controls.Add(this.kryptonLabel1); + this.kryptonPanel2.Controls.Add(this.kryptonButton1); + this.kryptonPanel2.Controls.Add(this.buttonClearCellColors); + this.kryptonPanel2.Controls.Add(this.buttonRandomCellColors); + this.kryptonPanel2.Controls.Add(this.kcmbGridStyle); + this.kryptonPanel2.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel2.Controls.Add(this.kryptonPropertyGrid1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(1645, 567); + this.kryptonPanel2.TabIndex = 1; + // + // kryptonDataGridView1 + // + this.kryptonDataGridView1.AutoGenerateColumns = false; + this.kryptonDataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kryptonDataGridView1.ColumnHeadersHeight = 36; + this.kryptonDataGridView1.DataMember = "TestData"; + this.kryptonDataGridView1.DataSource = this.dataSet; + this.kryptonDataGridView1.GridStyles.Style = Krypton.Toolkit.DataGridViewStyle.Mixed; + this.kryptonDataGridView1.KryptonContextMenu = this.kryptonContextMenu1; + this.kryptonDataGridView1.Location = new System.Drawing.Point(17, 15); + this.kryptonDataGridView1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonDataGridView1.Name = "kryptonDataGridView1"; + this.kryptonDataGridView1.RowHeadersWidth = 51; + this.kryptonDataGridView1.Size = new System.Drawing.Size(1160, 310); + this.kryptonDataGridView1.TabIndex = 2; + // + // dataSet + // + this.dataSet.DataSetName = "NewDataSet"; + this.dataSet.Tables.AddRange(new System.Data.DataTable[] { + this.dtTestData}); + // + // dtTestData + // + this.dtTestData.Columns.AddRange(new System.Data.DataColumn[] { + this.dataDateTime, + this.dataComboBox, + this.dataTextBox, + this.dataMaskedTextBox, + this.dataDomainUpDown, + this.dataNumericUpDown, + this.dataButton, + this.dataCheckBox}); + this.dtTestData.TableName = "TestData"; + // + // dataDateTime + // + this.dataDateTime.Caption = "DateTime"; + this.dataDateTime.ColumnName = "DateTime"; + this.dataDateTime.DataType = typeof(System.DateTime); + // + // dataComboBox + // + this.dataComboBox.Caption = "ComboBox"; + this.dataComboBox.ColumnName = "ComboBox"; + // + // dataTextBox + // + this.dataTextBox.Caption = "TextBox"; + this.dataTextBox.ColumnName = "TextBox"; + // + // dataMaskedTextBox + // + this.dataMaskedTextBox.Caption = "MaskedTextBox"; + this.dataMaskedTextBox.ColumnName = "MaskedTextBox"; + // + // dataDomainUpDown + // + this.dataDomainUpDown.Caption = "DomainUpDown"; + this.dataDomainUpDown.ColumnName = "DomainUpDown"; + // + // dataNumericUpDown + // + this.dataNumericUpDown.Caption = "NumericUpDown"; + this.dataNumericUpDown.ColumnName = "NumericUpDown"; + this.dataNumericUpDown.DataType = typeof(decimal); + // + // dataButton + // + this.dataButton.Caption = "Button"; + this.dataButton.ColumnName = "Button"; + // + // dataCheckBox + // + this.dataCheckBox.Caption = "CheckBox"; + this.dataCheckBox.ColumnName = "CheckBox"; + this.dataCheckBox.DataType = typeof(bool); + // + // kryptonContextMenu1 + // + this.kryptonContextMenu1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItems1, + this.kryptonContextMenuHeading1, + this.kryptonContextMenuSeparator1, + this.kryptonContextMenuCheckBox1, + this.kryptonContextMenuCheckButton1, + this.kryptonContextMenuRadioButton1, + this.kryptonContextMenuLinkLabel1, + this.kryptonContextMenuColorColumns1, + this.kryptonContextMenuImageSelect1, + this.kryptonContextMenuMonthCalendar1}); + // + // kryptonContextMenuHeading1 + // + this.kryptonContextMenuHeading1.ExtraText = ""; + // + // kryptonContextMenuCheckBox1 + // + this.kryptonContextMenuCheckBox1.ExtraText = ""; + // + // kryptonContextMenuCheckButton1 + // + this.kryptonContextMenuCheckButton1.Text = "CheckButton"; + // + // kryptonContextMenuRadioButton1 + // + this.kryptonContextMenuRadioButton1.ExtraText = ""; + this.kryptonContextMenuRadioButton1.LabelStyle = Krypton.Toolkit.LabelStyle.NormalControl; + // + // kryptonContextMenuLinkLabel1 + // + this.kryptonContextMenuLinkLabel1.ExtraText = ""; + this.kryptonContextMenuLinkLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.NormalControl; + // + // kryptonContextMenuColorColumns1 + // + this.kryptonContextMenuColorColumns1.SelectedColor = System.Drawing.Color.Empty; + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(456, 335); + this.kryptonLabel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(295, 26); + this.kryptonLabel1.TabIndex = 8; + this.kryptonLabel1.Values.Text = "Right click grid for Krypton Context Menu"; + // + // kryptonButton1 + // + this.kryptonButton1.Location = new System.Drawing.Point(15, 486); + this.kryptonButton1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonButton1.Name = "kryptonButton1"; + this.kryptonButton1.Size = new System.Drawing.Size(432, 36); + this.kryptonButton1.TabIndex = 7; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton1.Values.Text = "&Open Programatic Populate"; + // + // buttonClearCellColors + // + this.buttonClearCellColors.Location = new System.Drawing.Point(15, 443); + this.buttonClearCellColors.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.buttonClearCellColors.Name = "buttonClearCellColors"; + this.buttonClearCellColors.Size = new System.Drawing.Size(432, 36); + this.buttonClearCellColors.TabIndex = 6; + this.buttonClearCellColors.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonClearCellColors.Values.Text = "Clear Cell Colors"; + // + // buttonRandomCellColors + // + this.buttonRandomCellColors.Location = new System.Drawing.Point(16, 401); + this.buttonRandomCellColors.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.buttonRandomCellColors.Name = "buttonRandomCellColors"; + this.buttonRandomCellColors.Size = new System.Drawing.Size(432, 36); + this.buttonRandomCellColors.TabIndex = 5; + this.buttonRandomCellColors.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonRandomCellColors.Values.Text = "Random Cell Colors"; + // + // kcmbGridStyle + // + this.kcmbGridStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbGridStyle.DropDownWidth = 323; + this.kcmbGridStyle.IntegralHeight = false; + this.kcmbGridStyle.Location = new System.Drawing.Point(17, 368); + this.kcmbGridStyle.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kcmbGridStyle.Name = "kcmbGridStyle"; + this.kcmbGridStyle.Size = new System.Drawing.Size(431, 26); + this.kcmbGridStyle.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbGridStyle.TabIndex = 4; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + this.kryptonThemeComboBox1.DropDownWidth = 323; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(17, 334); + this.kryptonThemeComboBox1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(431, 26); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 3; + // + // kryptonPropertyGrid1 + // + this.kryptonPropertyGrid1.Location = new System.Drawing.Point(1184, 15); + this.kryptonPropertyGrid1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.kryptonPropertyGrid1.Name = "kryptonPropertyGrid1"; + this.kryptonPropertyGrid1.Padding = new System.Windows.Forms.Padding(1); + this.kryptonPropertyGrid1.Size = new System.Drawing.Size(445, 528); + this.kryptonPropertyGrid1.StateCommon.Back.Color1 = System.Drawing.Color.Red; + this.kryptonPropertyGrid1.TabIndex = 2; + // + // DataGridViewTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1645, 629); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonPanel1); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + this.Name = "DataGridViewTest"; + this.Text = "DataGridViewTest"; + this.Load += new System.EventHandler(this.DataGridViewTest_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.kryptonPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonDataGridView1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dataSet)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.dtTestData)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbGridStyle)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonBorderEdge kryptonBorderEdge1; + private Krypton.Toolkit.KryptonPanel kryptonPanel2; + private Krypton.Toolkit.KryptonPropertyGrid kryptonPropertyGrid1; + private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; + private Krypton.Toolkit.KryptonComboBox kcmbGridStyle; + private Krypton.Toolkit.KryptonButton kryptonButton1; + private Krypton.Toolkit.KryptonButton buttonClearCellColors; + private Krypton.Toolkit.KryptonButton buttonRandomCellColors; + private Krypton.Toolkit.KryptonLabel kryptonLabel1; + private System.Data.DataSet dataSet; + private System.Data.DataTable dtTestData; + private System.Data.DataColumn dataDateTime; + private System.Data.DataColumn dataComboBox; + private System.Data.DataColumn dataTextBox; + private System.Data.DataColumn dataMaskedTextBox; + private System.Data.DataColumn dataDomainUpDown; + private System.Data.DataColumn dataNumericUpDown; + private System.Data.DataColumn dataButton; + private System.Data.DataColumn dataCheckBox; + private Krypton.Toolkit.KryptonContextMenu kryptonContextMenu1; + private Krypton.Toolkit.KryptonContextMenuItems kryptonContextMenuItems1; + private Krypton.Toolkit.KryptonContextMenuHeading kryptonContextMenuHeading1; + private Krypton.Toolkit.KryptonContextMenuSeparator kryptonContextMenuSeparator1; + private Krypton.Toolkit.KryptonContextMenuCheckBox kryptonContextMenuCheckBox1; + private Krypton.Toolkit.KryptonContextMenuCheckButton kryptonContextMenuCheckButton1; + private Krypton.Toolkit.KryptonContextMenuRadioButton kryptonContextMenuRadioButton1; + private Krypton.Toolkit.KryptonContextMenuLinkLabel kryptonContextMenuLinkLabel1; + private Krypton.Toolkit.KryptonContextMenuColorColumns kryptonContextMenuColorColumns1; + private Krypton.Toolkit.KryptonContextMenuImageSelect kryptonContextMenuImageSelect1; + private Krypton.Toolkit.KryptonContextMenuMonthCalendar kryptonContextMenuMonthCalendar1; + private Krypton.Toolkit.KryptonDataGridView kryptonDataGridView1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/DataGridViewTest.cs b/Source/Krypton Components/TestForm/DataGridViewTest.cs new file mode 100644 index 000000000..904dfd064 --- /dev/null +++ b/Source/Krypton Components/TestForm/DataGridViewTest.cs @@ -0,0 +1,42 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class DataGridViewTest : KryptonForm + { + public DataGridViewTest() + { + InitializeComponent(); + } + + private void DataGridViewTest_Load(object sender, EventArgs e) + { + foreach (var style in Enum.GetNames(typeof(DataGridViewStyle))) + { + kcmbGridStyle.Items.Add(style); + } + + kryptonDataGridView1.BorderStyle = BorderStyle.Fixed3D; + + DateTime dt = DateTime.Now.Date; + dtTestData.Rows.Add(dt, "Mr", "Mark", "(55) 5555-5555", "Single", 36, "Press!", true); + dtTestData.Rows.Add(dt, "Mrs", "Mary", "(01) 2345-6789", "Married", 21, "Press!", false); + dtTestData.Rows.Add(dt, "Miss", "Mandy", "(03) 5555-1111", "Single", 44, "Press!", false); + dtTestData.Rows.Add(dt, "Ms", "Mercy", "(99) 2211-2211", "Single", 25, "Press!", true); + dtTestData.Rows.Add(dt, "Mr", "Micheal\r\nSingle\r\nMarried", "(07) 0070-0700", "Divorced", 35, "Press!", false); + dtTestData.Rows.Add(dt, "Mrs", "Marge has a really long name normally, and this should wrap", "(10) 2311-2311", "Married", 80, "Press!", true); + + kryptonDataGridView1.AutoGenerateColumns = true; + kryptonDataGridView1.DataSource = dtTestData; + + kryptonPropertyGrid1.SelectedObject = new KryptonDataGridViewProxy(kryptonDataGridView1); + } + } +} diff --git a/Source/Krypton Components/TestForm/Form1.resx b/Source/Krypton Components/TestForm/DataGridViewTest.resx similarity index 84% rename from Source/Krypton Components/TestForm/Form1.resx rename to Source/Krypton Components/TestForm/DataGridViewTest.resx index d4dbf3ed2..5eab44537 100644 --- a/Source/Krypton Components/TestForm/Form1.resx +++ b/Source/Krypton Components/TestForm/DataGridViewTest.resx @@ -117,22 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 539, 16 - - - 989, 16 - - - 166, 16 + + 17, 17 - - 369, 16 - - - 713, 16 - - - 18, 16 + + 110, 17 \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/FadeFormTest.Designer.cs b/Source/Krypton Components/TestForm/FadeFormTest.Designer.cs new file mode 100644 index 000000000..0001eb810 --- /dev/null +++ b/Source/Krypton Components/TestForm/FadeFormTest.Designer.cs @@ -0,0 +1,237 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class FadeFormTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FadeFormTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.cbtnShowImage = new Krypton.Toolkit.KryptonCheckButton(); + this.kryptonPictureBox1 = new Krypton.Toolkit.KryptonPictureBox(); + this.label2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonPropertyGrid1 = new System.Windows.Forms.PropertyGrid(); + this.lblOpacity = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.btnFadeIn = new Krypton.Toolkit.KryptonButton(); + this.btnFadeOut = new Krypton.Toolkit.KryptonButton(); + this.nudOpacityFraction = new System.Windows.Forms.NumericUpDown(); + this.nudSleepDelay = new System.Windows.Forms.NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudOpacityFraction)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudSleepDelay)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.cbtnShowImage); + this.kryptonPanel1.Controls.Add(this.kryptonPictureBox1); + this.kryptonPanel1.Controls.Add(this.label2); + this.kryptonPanel1.Controls.Add(this.kryptonPropertyGrid1); + this.kryptonPanel1.Controls.Add(this.lblOpacity); + this.kryptonPanel1.Controls.Add(this.kryptonLabel1); + this.kryptonPanel1.Controls.Add(this.btnFadeIn); + this.kryptonPanel1.Controls.Add(this.btnFadeOut); + this.kryptonPanel1.Controls.Add(this.nudOpacityFraction); + this.kryptonPanel1.Controls.Add(this.nudSleepDelay); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(1092, 676); + this.kryptonPanel1.TabIndex = 0; + // + // cbtnShowImage + // + this.cbtnShowImage.Location = new System.Drawing.Point(928, 44); + this.cbtnShowImage.Name = "cbtnShowImage"; + this.cbtnShowImage.Size = new System.Drawing.Size(125, 25); + this.cbtnShowImage.TabIndex = 8; + this.cbtnShowImage.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.cbtnShowImage.Values.Text = "Show Image"; + this.cbtnShowImage.Click += new System.EventHandler(this.cbtnShowImage_Click); + // + // kryptonPictureBox1 + // + this.kryptonPictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.kryptonPictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("kryptonPictureBox1.Image"))); + this.kryptonPictureBox1.Location = new System.Drawing.Point(365, 75); + this.kryptonPictureBox1.Name = "kryptonPictureBox1"; + this.kryptonPictureBox1.Size = new System.Drawing.Size(715, 589); + this.kryptonPictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.kryptonPictureBox1.TabIndex = 7; + this.kryptonPictureBox1.TabStop = false; + // + // label2 + // + this.label2.Location = new System.Drawing.Point(734, 13); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(188, 20); + this.label2.TabIndex = 6; + this.label2.Values.Text = "Opacity (In)(De)crement Fraction"; + // + // kryptonPropertyGrid1 + // + this.kryptonPropertyGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.kryptonPropertyGrid1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10))))); + this.kryptonPropertyGrid1.CategoryForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10))))); + this.kryptonPropertyGrid1.CommandsBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10))))); + this.kryptonPropertyGrid1.CommandsForeColor = System.Drawing.Color.White; + this.kryptonPropertyGrid1.DisabledItemForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); + this.kryptonPropertyGrid1.Font = new System.Drawing.Font("Lucida Console", 10.8F); + this.kryptonPropertyGrid1.HelpBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10))))); + this.kryptonPropertyGrid1.HelpForeColor = System.Drawing.Color.White; + this.kryptonPropertyGrid1.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(33)))), ((int)(((byte)(33)))), ((int)(((byte)(33))))); + this.kryptonPropertyGrid1.Location = new System.Drawing.Point(13, 13); + this.kryptonPropertyGrid1.Name = "kryptonPropertyGrid1"; + this.kryptonPropertyGrid1.SelectedObject = this; + this.kryptonPropertyGrid1.Size = new System.Drawing.Size(332, 651); + this.kryptonPropertyGrid1.TabIndex = 0; + this.kryptonPropertyGrid1.ViewBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(10)))), ((int)(((byte)(10)))), ((int)(((byte)(10))))); + this.kryptonPropertyGrid1.ViewForeColor = System.Drawing.Color.White; + // + // lblOpacity + // + this.lblOpacity.Location = new System.Drawing.Point(928, 12); + this.lblOpacity.Name = "lblOpacity"; + this.lblOpacity.Size = new System.Drawing.Size(6, 2); + this.lblOpacity.TabIndex = 4; + this.lblOpacity.Values.Text = ""; + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(552, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(115, 20); + this.kryptonLabel1.TabIndex = 4; + this.kryptonLabel1.Values.Text = "Thread.Sleep Delay"; + // + // btnFadeIn + // + this.btnFadeIn.Location = new System.Drawing.Point(365, 44); + this.btnFadeIn.Name = "btnFadeIn"; + this.btnFadeIn.Size = new System.Drawing.Size(172, 25); + this.btnFadeIn.TabIndex = 1; + this.btnFadeIn.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnFadeIn.Values.Text = "Fade In"; + this.btnFadeIn.Click += new System.EventHandler(this.btnFadeIn_Click); + // + // btnFadeOut + // + this.btnFadeOut.Location = new System.Drawing.Point(365, 13); + this.btnFadeOut.Name = "btnFadeOut"; + this.btnFadeOut.Size = new System.Drawing.Size(172, 25); + this.btnFadeOut.TabIndex = 1; + this.btnFadeOut.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnFadeOut.Values.Text = "Fade Out"; + this.btnFadeOut.Click += new System.EventHandler(this.btnFadeOut_Click); + // + // nudOpacityFraction + // + this.nudOpacityFraction.Location = new System.Drawing.Point(734, 49); + this.nudOpacityFraction.Maximum = new decimal(new int[] { + 50, + 0, + 0, + 0}); + this.nudOpacityFraction.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.nudOpacityFraction.Name = "nudOpacityFraction"; + this.nudOpacityFraction.Size = new System.Drawing.Size(172, 20); + this.nudOpacityFraction.TabIndex = 3; + this.nudOpacityFraction.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // nudSleepDelay + // + this.nudSleepDelay.Location = new System.Drawing.Point(552, 49); + this.nudSleepDelay.Maximum = new decimal(new int[] { + 500, + 0, + 0, + 0}); + this.nudSleepDelay.Name = "nudSleepDelay"; + this.nudSleepDelay.Size = new System.Drawing.Size(172, 20); + this.nudSleepDelay.TabIndex = 2; + this.nudSleepDelay.Value = new decimal(new int[] { + 50, + 0, + 0, + 0}); + // + // FadeFormTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1092, 676); + this.Controls.Add(this.kryptonPanel1); + this.Name = "FadeFormTest"; + this.Text = "FadeFormTest"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FadeFormTest_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudOpacityFraction)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudSleepDelay)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private System.Windows.Forms.PropertyGrid kryptonPropertyGrid1; + private KryptonButton btnFadeOut; + private KryptonLabel label2; + private KryptonLabel kryptonLabel1; + private NumericUpDown nudSleepDelay; + private NumericUpDown nudOpacityFraction; + private KryptonButton btnFadeIn; + private KryptonPictureBox kryptonPictureBox1; + private KryptonCheckButton cbtnShowImage; + private KryptonLabel lblOpacity; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/FadeFormTest.cs b/Source/Krypton Components/TestForm/FadeFormTest.cs new file mode 100644 index 000000000..875d68aae --- /dev/null +++ b/Source/Krypton Components/TestForm/FadeFormTest.cs @@ -0,0 +1,77 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.Threading; + +namespace TestForm +{ + public partial class FadeFormTest : KryptonForm + { + public FadeFormTest() + { + InitializeComponent(); + cbtnShowImage.Checked = true; + } + + private void FadeFormTest_FormClosing(object sender, FormClosingEventArgs e) + { + e.Cancel = false; + } + + private void btnFadeOut_Click(object sender, EventArgs e) + { + + KryptonForm owner = this; + double fraction = (double)nudOpacityFraction.Value / 100; + int delay = (int)nudSleepDelay.Value; + + while (owner.Opacity > 0.0) + { + Thread.Sleep(delay); + + owner.Opacity -= fraction; + lblOpacity.Text = owner.Opacity.ToString(); + owner.Refresh(); + } + + MessageBox.Show("Done"); + + owner.Opacity = 1; + + } + + private void btnFadeIn_Click(object sender, EventArgs e) + { + + KryptonForm owner = this; + owner.Opacity = 0; + + double fraction = (double)nudOpacityFraction.Value / 100; + int delay = (int)nudSleepDelay.Value; + + while (owner.Opacity < 1) + { + Thread.Sleep(delay); + + owner.Opacity += fraction; + lblOpacity.Text = owner.Opacity.ToString(); + owner.Refresh(); + + } + MessageBox.Show("Done1"); + + owner.Opacity = 1; + } + + private void cbtnShowImage_Click(object sender, EventArgs e) + { + kryptonPictureBox1.Visible = cbtnShowImage.Checked; + } + } +} diff --git a/Source/Krypton Components/TestForm/FadeFormTest.resx b/Source/Krypton Components/TestForm/FadeFormTest.resx new file mode 100644 index 000000000..91be65815 --- /dev/null +++ b/Source/Krypton Components/TestForm/FadeFormTest.resx @@ -0,0 +1,108440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + dsDBRUFbZexaYmmr4Op8LGzmyz21kHnWZujrZHNes/mFz4PgGf03AFbzzLmKLTQIrEJBu+lcNc9cBX6V + vHzc8VD5CnXmXL1KygPXUwxOdy8FgeX5uMo5qnOQYypoa6n+NJfnrUKBq2tV8FdB3ujYGJJTU0hOTyE+ + MZ6o2EhRFHEynZiSRFJqslaGhIfh7eOtgVhrMfTdPHX4BQRqQDY2IU7bNi4xjrikGGLiZZ6UKZkpmiLj + IvH08cRW5WcWefjoiIiXAUdWmiid2OQEWT+BeDlOfHIiiemppGdmkZqeQWJyigaDneSc3XSeRMfHUlZZ + Tl1DPSVlZaTL9kkpiSQlx5Galkh2Tir5BZkUi+Gdl5tOaooMamLDiIkKISbaLAUUIsIDiY5SZQAhQb74 + +xvOA2AP9U652OIm56rAj5urPR4uDnhK6elqi16FY/eRQUygC5Hh0h5GOlIZPp+RNOmHGn14cjKOz3dm + 8e3uBE5vD+XHLWJXbojkhzWhfL3CyNGl0o9NOHJ00oETy504ucqFs6vcOLfSnXOrPDm7xosz61UoPrGN + NxvE1jTwuYquM+nCAfVn3xJP3h/V88agjhc7nKSvXsDf6+fydOt8Xh2w4YNxBw0Af7fOi7ObzR4c34s9 + rvLcKU+YL9eoP2q8+XKtnuPrPDi81oUv1jjw6WobDq6x4JN1KuzzAg5tWMDhjdYc2WTD4U32HN7swBdb + HDm02ZGP1ysPYMvzOrjJkeNX+XJCbOgvdvtxcKuRz3YG8/W1CfxwUwrf3ZDAsStDOLBFzn2DIx9uceLQ + bvfzAPiH/aLrvTl1nYmT+wM5eUM4p26O4ac7kvn5rkzO3ZPNmXtn9Nsszt6ZwZk700SpnLo9mXO3p3L2 + 1jSRLLslT1TMjzeV89PNNWLj18nves7c1sS537Zy7r4uTv+uj+//OMg3Dy3i67+t4NjjV3HoqXv45MWH + +eDVZ3nr7bd59o2P+cML73HtX1/kukdf4t6X3+Vv73/Bi0d/4I0ffuG5L77nD699xN0vvc0Dbxzgwbc/ + 4cE3D/CXtw7y9IFj/PPod7z5zWk++vYMHx36ln+//jEPPPgYu/dcy7q1mxgeWkR7SyttTU00N9SKlPdv + GVWVhVSV5VNTWUR1eT6VZXkz9TmNzPRErU6nJsp7K+9ZYmwEsVK3Vb7UWQDc1lD5/xMA3n/VNu6+8yau + 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 + FfE3/j8E4CHB97+v/+8C8FDU7+/8dwFYEX1/F3wVMXgoCnhoW5oiAv9Omhybnk1iWgbxaSnEZySrJKQl + y/eniMOVSmZSOjnyPPLjFPE3jrLYCMrl/VfF+VOf7E9begDdmT5MFmN2SXUEmzsy2D2thC2TipjbkMTU + +lQmNWXR3ZjP+OYyertbaG+ro7Awk5LSXCrLC6gSaquLaW2uoXt8E60NlZQXZgkZNNcW095YoZb1FflU + lWZSWhhPYX64jGO+pMQrP7KwIDrQiKgAI2KDjKSNGZMu/UdWtBE5cfoUJ0lfkmZGbZY1LUrq51J3usu9 + 6ChwpinThop4Q4oixKaJ0KI0Vp/KeGPqUkxpSDenIWOIujRTalJMqFOigeWYlmxbtWyWclyuI+1K5G+B + C10FbvQUedNT7E1zhp3sb0VNmhUVqeaUpphRkmIspTEVQr2cV4lGnl7lxewaf2ZX+TGlyJXOTCs6s+2Y + Xh3AzPoQpteHMq0+nL7SQNozPSgLNCbN5mmSTR6nwc+YeZm+DOaHsS09mJ3xfuyL9+Vwgj9HYrzZH+TI + Xl9rdnqYsFP6qD1+ZuwNseaA9DOH0r3YJ47I7jx/tuX5sSHLk4F0d1anubMyxZmlCU4sSXJmuTgZq3P9 + WVkQzDJhYV4ws7PlutJCWVycxuaWGvb1drKzs5M9XT3s7Z3E7v7JbJs0ifUTe1neOZ4F45qZ1VInNDBT + mNFSLfZXKVMai5lUX8ikhiH66xXxVilL6KsvpbtWnOiyPJqKsmkrL6K7oZrx1WXiRGdQmJZIdkIMxZnJ + tFQUSx2rorOunNbKPCGfCc2VTOmQ7+ppYf6kbgYWzWHXhgG2Dqxk3tR+OptqqSmROliURZlQLPdSpPzA + oCBFTTfeWl1Ib2OZXGslc1urmS/nW9BYzkK5riVN5Wyd3MGOad1sn9rF9imdQ6WwY3q3yk5Z3jm1k11T + utg9pZ3dk8exa3ILuye1sndSC/uEPROb2dPbxP6JdeybUMSR3hzO9qdxdUocz88K590VEXwyEMbnA358 + u85bcOPb9cKgO9+tc+eHDe58L3y70Y1vtohdsiWIT7ZG8/72FN7YlctLu8q4taOKU+vr2b6omYFZXSyb + NpG5fT2Mq6skPyte/bFPZmoA9ZUpTBxfzszeRqZ1NzC1s14VgNtrpH3K86jKT6O+NFsVNNvqixkvz0KZ + 01aZB7hWtittVhF166ukLTdU0NlaR1dbPZ1Cd3sjEzqa1G0N0tYrirMpzEmV8TyWzJQYNQo4NT6SxKgw + VQRWUj0rUb8+rg5q6eFoQ6CnGzFhQeSmKxG/+bRJP9FcW6bSKX1Kd3udlP8WgJW5fxfO6mX9qvmcPLid + y6cPsnb5bBrl+pU5e6OC3YkIcBV7Q8a4QFeCfZ2JCvOhKD+VmfJet25ezvGjO7hx/STP3TmvirXLFk6l + u61K7jlPFYDrynOG0jtLv1RVlC42SzJl+SlUF2fIMyqR5zM0V7CyX0tNIV1Sl6b3jWPlomlsWLuQPdvX + cOLwdk4d28XZUwc4eWI/Rw7t5IgiBO/byu7dm9izYwO7t21gzaolTJ3ay/jxjTQ1VtMm7aiyvJiM1ETC + QgNlvJPxPD2BttYaZkyfqKaAVgXg3nY6u1qplrZRXDEkAKfnpBMZF4VPgD/Wjg4Ympthbe9IYGgYcSkp + xCQk4uUXiJObF46unmJXOGJkbi5jsBX2zq54+AYQEhUr41sSGfmFVDY0090/hd4p02jp6KKovIq41HTC + Y+LV+YLdfHxwcHfF2tkOMzsLjKyMMTDTQ1/8OV1TPbRNDdC1tsTI2Q0Ln1DsQtMJzBlHfM0sUpuXklC7 + gLjKWeS2LmH8vN0s2XGN5XvvMHvzZRrn7iS2YRY2KQ3YpLXiWTiRkKrpRFbNJLZyOkmV00ivmkxV+xwm + zFzNvJWbWbp2MwuWrWLRyhWs3bCOTdu3smP/HvYcPsjeI4fVyOCh6N8zHD11Qo0S3ntgryoCHz52gGOn + htI+q+mfTx7l9JnjnL14kjMXTnD8lBx7XN7jMUEplTmATx7i+NnDHD9/jGOXznL48kX2X7rG3iu32XP1 + eXZde5kd115n+4232HLjH2y69Q4Dt99l7Z13WXHnHZbd/gdLZPvia2+x9MrrrLz6JqsuvM6Sw88xa+t5 + 5gnbz7zMqbvvc/H5D7jy0ofcePVTbr72Kbf//hm3/v45F1/5hBMPPmTpwds0L95H49LD1C85TtXCo5TN + O0DpzK2UTFpFae8cStp7yK8pl7qSSnZ6qPSz3jKWulKY4Ep5sjt12d5MqI1k+vhEpnbEM74hlOJcF6mL + dmJDOlFU6ENJib+M075UlIUzoTufhfOamT+nUeplFVPFRuiflE9XVyrNLVFU1QRRJXZ+bV0k9Y1xsi2F + 9o4seicWMnlyMdOnljN1chETOjNolO9tqYtiYkcqE7vSmSa2xqLFzcxbIuPMGmlX+zew99JJDt+6zY5L + d1hz8jbLTtxnyamHLD37BkvP/Z0lwsKTrzPv+EPhVeYde5lFx19k7fmH7Hnubc699D6nbr3Aph17mDVj + MpPaymScjmGu3NOsfC+mZjgzOUF8rkhzuoMM1Dl/2/z1aVUif8Wfqg+1pCHGlRaxpTvzE+iozGF8Vz1z + V89j96n9XHzuKjdeui114RRrd2xk2vIFNMr3dKxYytz9B1hx7hJrrj3HuudeYc3tl1l8+TZTDhylff16 + KufNJLO7mcz2apJrxSasTCepJJGkokQS8+OJy44mOj2MyNRgotKCZT2chOww/KKccPE3w9HXCPdAM4Ki + 7QiPd1aJSBQbX4hKEhJlXcb+MPk8KMxKMCcwzIxAua8g8UeCQsT3CDGSPsJW6oc/7Z3ZzJzXxNKBqazZ + sYwtJ3ey5/p59j54nh0vPmT7i2+y/YW32Xpf6vat19h06Xk2nX+OTWefY+Why8zZfJQpq3fRvWiQWQPb + GThwnP0Xr3Du/j0uPXiOS8/f5cr957hy93lVAL525yFXb77EIVUAPszgpn1s2HaADVv3sW7LbgY372Lr + roPSno+yU86169AJ4SR7j5/n7I37XHvwKhfuvMiBM1fZeuAMWw+f4/Clu5y//5ALwrk7Dzhz7RanL13g + 9PnTnL1wStr1SU5dPsO5G5c4d/0C56/K8vkjnD+1l/MntnPj5HoenFrAS8f7eOVAm/jI9Xywp5wv9pTw + +dZMPlkbxycrovl8WTSfLovg0yWhfLzIj38t9OKfCzx4T/hgWSAfD8bxwfpUXlkWz515UVydHS3+cwzn + Z8ZyfHI4+7v92d7qxtYWF7Y0KeKvJSuK9VmQM5Y5mSPVckmBHqvKLNnS7CX7+rOjJZgdTcGsKfVgdoYt + nbGm1IaJXaxMlaIEcoSbkyT+Zniw+LHe+nh56eHjq4+fvyG+vgbiM+rg6DwKR/tnxUd+lkDX4cR4DCPX + fzTlQWNpCtOhI1JfFYBnJBuwONOQZRm6rEwdzWDaSHbkjuVYuSG325y53mjPqTITsTs12ZA6nK25mhys + t+RUpwtn+7w52OHMpia5p1ojZpdrM6l4rLSf4YzPGy7lSHoKxtBbMJqJeaPoFybmjmRijiDlFNk+o1iD + OeV6zK3UY3apFjOKxjJTjpldpMk8eU4zC/SZkqvLhEwdGmLl+iNHkB/6LGkBTxLr8V9EuCn8jSiPZ4j2 + GkGMtwZR3lpEeGgS6qFBsOdogrxGEug9XMpHKMtCoM9QNHBY4ChiwjWICZVjA4YT6f80Uf6PE+37X0T7 + PEaM72PEC2nBj5Eb8ReKYp+QPvUZGjNHM65Qm64yfSZVmzCtxojJighcqkNvoRY9OfJZpiYdqWPoStWg + L0fup8RcsJBnZS33a8OUPPEpUgyoj9ahKGgM2QFjVQE4wnMsfi5jcbMfg4PlaOyVoAorPRyVFNAmuhjr + jUVXZ5Q6xZ6puSZW4oNbiw9uKaWC8jc8O8HKQgtz8eGNDEZgZjgSK+Vvc8rf6Oy18LDXIMBxFGlBOjSK + 39OXa8P8YlupizZsqbBhT4UV+0qUd6/L/oyxHM4axbmCsdwo11VF4NsVmtwsH8vtSg1BiztVWtyt1uaO + cLNyrCr+Xih4lrM5z3IudwRXinTkGFM53oxrlWZcrDTneIkRO7M0WZc8imXxI1iSMJpFCWNZEK/B/LhR + LEqU7amjWCEsThjB3KinmRr+BBPD/kZn2OOMC/4rjX6P0STvaUbCk6zOHs6uci1ONxtyvd2EKw26nK/W + 5Ey5BidKxnJI6tuuPE22Zo1lY8pINgtbUoaxNeVp9uQM43iFBjc6zXhhig33+ky52a3LpfaxfwjA1ybK + PUw14p4iAM+14vn51rywwIYH8+14MM+B+/Ocub/AjXuLvLiz2Jc7SwN4bkUI95ZHcH9lLM+vEj9hdTwP + 1iTy4mAKL63P4sX1+bwwWMQLa4t5abCShxubeHVLO6/saOf5nT3c2TGVG3sWcXnfek7v282hPQfYteMo + A+sOMG/RdiZMWUlr1wJaO+fR3rOIjt5FdPUvZvIssZ2WbmbtpgNs23eanQcvsmXXGQY2HWb52j3MX7qV + uYs3sXJwn4ybJ9my86z0z2fYvOMcm3aeZ9Ou82zefYHNey8Kl9iyR+GyfHaFwS2X5DyXWL/1qux3nR17 + b7B1+wVWr93P5GlLqaltJz+3nJSkbOKjU1QROD4s/j8YEoAVIXiIlPCkR8STFBpLYkgUCcGRj0TgECmD + SQ0PIys2hrzEWEoykqktyBJfJ5NSZXqrtATKMuKljKYgJZy8pGByhewUITWE7ORgMhMCSIr0JjZEEYE9 + SIsJojA9nmo5R09LLZM72pje0830rl46a1upK6ikvrCKcdVt9KgCcCtF6YVyvUn/KQArZXii9COKAJxE + VEQSSirohPhs0lILycwsJT2zhITEPOLjcoiOzhDSZZ+MR8hyZJoqAkcrkcBRyfLckkiITiAxOo74qGgS + opRU2RHq/MnKXMkpUcGkRYWQHh2kkhYVSFpkgDpHclqoO/H+tqQE2VEQ7011VjjjylPobyliybQ2Ni2f + xvHda7l3+Sgf/eMB333xHr/99AX89jX8+q0qrPLTn6J/VQFY1v8DZdu/+fKLoQhgJQX0g/t3+Of77/Lj + 99+p2q/67/+XAKykgFYifH8UfuA3Of9vP3/Dr0q66Uff99uPX/DzVx/y3b/e4iu5h3fvnOH5k1s5vW4u + 22e2sbK9iHnVqUzJj2BqThBLSsIZrI5mZ2six9pTOF0VzYXiMC4Vh3O1MJwbBWHczgvjXm4Y93OE3FDu + 5YVyMy+YK3mB0o/5czLHl2O5fhzO9+dIWTDHaiI405zIpY50rnVnc7UrkwvjUjjVlMDRuggOVIezoyKU + QbG75qW4My3ejf4YZ7qjHGUMdqQ53J66EFsqAm0pD3GmMsaPoig/UsTH9XG1UIMtLQU3V0vCwrzIeCQA + u7goAvAotBQ9TW8kWjIWaOuMRktbtmmPUfm/C8BlxhyuNOVojTnHas05WWvGqVpLTtfbck4G/ittTlwd + 58jlcXZcbrXlSqsSDSw0mknHaiwGgikvT7Di7anWjwRge1UA/mGWJd/OMB8SfyeZ8nG/IgJb8O1su0cC + sI8qAv+80JUvplnxfo8B73Xr88kkOWamjZzHie/nO/PFLHs+nGzB+xOMea/LkPfbhWZd3qwYwyuFz/Ji + wQheFoPjfv4oVQC+lfksz+eN5o0Kfb4Y78g33S580WnPx+0WfDTemI/kPB/1G/BBny7v9GryUDr1f/Qp + cwG7wLog2BQGG0L4bY0/Py334Kdlbvy0VBGjnfnhfxGAlRTQn8o5vpxiLPduyfdzLfhmhiHfKgLwdMM/ + BODfFlsNCcDCzyss+Wm1JT+uUspH0cAD1mr079fr5BxbbPlpmyM/b7bnF+HXjXb8ssGGn9fJfoNW/Dxo + wc9rrfhtwJZf1jrw44A7n65y59ZEE4636LOzVleMRx0mJ42iOXQkZf6a5Hhrk+SpK8aSFn7OI/B2G0aA + 71jCQ3RVAThFHKPEEBOSxagsiHVWI4C7KlKoSAsVY8oSR5NRmOk+jYnes5gajMTMeAwmJpqYm+tgZWkg + xochTo7mODtZqjg5WmBrY4KlhT7Gxpro6ynh6cPR0hqGjvZwDAxHy2faONjr42CnjZ3tWGysh+Purkmk + OC/ZqS60VEUyZVwGSyZVsGZGPVOas2grjqIs1ZfsGBfig23wdhHDRxF9zZ/ByGIYJjajMbHXxMLFAFs3 + U+xczXBwNcXWWREj9LBW0z0bYudkiIWNLgamY1XB11gMJWNLwVxDnZvY0GQMVrb6uLpbEhDkQkS0F5GR + XoSEuqKkfw4McMA/2BHfACWNqxnObkZ4uJvh6aVECcu6EgX8KDXtkABshJuUTooA7KCLq5Me7nKM+6NI + 4OAga+Ki3UiK9xgSgCMcSRKHNENJ/Zwlg5QiAOcG/0n8/T8F4OwUbzITlbkWPUmL9xTD1gYPZz1VdHZ3 + lu9yMZX3YqiKv38IwM5mci0mOCvzddqbYPNIALa2FiPSSltNAe1qp4eXvQH+yhzA8lmghQ7BpjqEGI8l + VFDKEDMt2a6Bj6UmzvL87IxH4WA4BlcjTfxMtQiV5Ujd4aSJEVpiPpY2VyPmxbuyqSyKQ+MzOTwhj83N + ySxVBOA4GzLthxFj/BeSzJ4i22YkxdZjqTTToN5Yg3Fyzm4DTfr1NZlmoMEM49FMNx9Jr8mTjDd4jB6z + x5jv+SRH80y5N86FD2b58cOKIH5Z46POv/ebtLHf1pvy6wYTfttmAfukXzrm9EgADoGXIoYE4HeUNNDC + ewpx/PZuDL+8HcWPr4XxwwvhfH8tjF8vRcEZWd7qwdtiFN5o0mVX+nAW+P2FqeKcdNs/TovcQ53BMGqk + zTRY69LuYUKPnzm9fpb0eJjS7WJMhyL8OhrRKfWkU+pmm60O9eZjKDd6hkrT4dTaadDorkejjzENwebU + hppS4qdLrpcG6W4jSXJ8hni7p0i0e5oEq8fJc3mWvlRjtnd7c29DMp+cL+bnF4SHafz8WhS/vCb3+TCI + n2+78e0pcz7bJ33rRj3eWGvKtfmmbG7ToSdxGBmu/0WI9WPy3p/Ex34EAa7yrl1HEeD8NMEezxITLN+f + YEJ5oSvT+tJYOCufpfMKWb6whLlTM5jQHkZDtQdVJY5SVy1JjtYU5+sZabdP4m73BM7WT4pj8zQutuKs + yvkV3B1G4iX9VKDca6i/EjVrSZASCettLtvMCfAyxVueoZJO3U3akau0JxeldNZXBWAjg6elr/krJgZP + Ym8jTpSLnpr6WRF/w4JtCZJSScHuL+dS0kKHBtkQFe5IXISz4EJCuLMYeM7iZDuTEuFEaqSCI5nRTuTF + upEvbTRfEYGln8z7swAcaEyykCn9lyIA5wnpERYkBJkS6iNtx8NQTeusZB9wkr7Cyl4XU3HGjExHSX8j + g7O8b3PlxyiWY7Cw1sDBUdqe9BGeilAtbTk+1ov05EByMsPIz4kmNyeKzHQxBJMCSYzzlT5DEYDdH0X/ + +hIphkSkGIWRscFExoUQGR9CYIQPrt4O2DhbqPP/Kumflfl/lXTPmobDhOFDSH3VMR6pCsDGVpqY2mjL + /joqRpZDGFhqq/wuABvLOGAi44AqAIujamSmpNM3lr7RHh9fD3x8vPD18cXPVxF//fBVUkALiggc4B9E + UGCYEEGQGP6hYXGEK0Z0zNBcKn8IwKr4KyRmyrqQlEFcQpr0z48EYCWFTkI6iUJsTDJxUUliSCfLcoo8 + PzlXXIbK0PzBQ/whAIthHiUG+38XgBXxNyEpnyRF7BWSUwtUlLl/FX5f/58F4KGo3z/zPwnAv6d8HkoF + XaSKwL9v/x3lc1UATpXrT01R0z4rkcBJavRvChnJKWQnppAbl0RRbDzl8eHUJgRTH+9HU5wX45K8mJju + w/QsLxbkejJYFcru9iQO9eexpy+P5WLIzm9KZlpjCj0NmXQ0FzOxu4mOcXWUFmVRUZpNdUUeteV5NNQU + qSlcJ3bK583V1JTkCJm01sn2hlJaaovUCLrqsixKCxMoyo8kLzOAlASlnVkRLW0iKtCEmBBTksJNxJkx + FSdG2k6cAfmJJhSnmlGZYUl9rh1tRa60l7jTmudEvSIAJ5tSHGtAYbQexbJ/ufQ/1Smm1KabU6eIv0Jt + uhnVabI9zUzWrdXj6tKtaciypVmZ7zffmfEFLnQWuNNV6EVXkRcNqTZUJVnI+S0pTTajSChMMqIo0Ygy + KeszLegucmJapSczq3yYVeHD1EJnejOt6ZXzzq70YV5NIHNUgple7MukTA/GhVtQ7jicPJO/0u6lw5Jk + NzZl+LE32YeDMZ4ci/bgtLTts9HunAy257ivBYekrzjsqc8xP2NOhFhwLtaBi2lenMv24ZRwONuLXanO + bEm0Y2OSA+sT7FgbY8vaWDvWJcu4munFhhw/1uUGsEZYIs9+dpI/C7OjGZB3uE2c3Q0N9WxqamFr23i2 + dfewc/JktkydxLopfayc2MXCnnHM725nxvgWpo6rp6+5gl55t13ybjtVChkvKILj+JpiWS6mpbqQ+rI8 + qqS+1JbmS32oorm2gmpZLsnLJD8zhdKCbJpqKhjXWE1zXTl1Up9q5Jh2qU89HQ309cj3Texg9rR+li2a + x6J5s2Vbh3zeSG11KVWVRZRXFFEi9au4QpmbOpvy8mzqlF9w15UysbGCqU2VTJdyemM5M+rLmCPXvnbS + eAandjE4pZOByR3CeHXb6v5xrJrYyqreVlZPaFNZ09PEmu5GVvfUS1nP2p46BrvrWNNZw0BHDes6Klg3 + Lpft7Rkc6k7mTG8sN6dG8PelUXw8EMXnA0F8u8GfbzZ6qXz9qFTZ5MlXm734cmsgn20N48Otcby9LYNX + thVwd3s5FzdXcXhNHevm1LN8WgeLp/Yzt7+PtvpqcrMSpd/zU7M+1FYk09tepgrAM3oamdbV8EgAzqem + IIXqonQaynLUlMbtTaWMb6xUBWBlLuCKgnQKspR0zEnyXtKpKJb2W1YgbVuhUN5PKW2NVWqpzPubl5Eo + NnkcmckxQwKwOpdvDKnxUSRGhxHi76kKv55OdnioyDjr4058ZCiF2enUVRSrYnJHS430G7WquNwzvuE/ + BOBpvW2sWjydXZtXqgLwwd3rmdo3jvzsBFLig6V/C1dJS5QxT9ajw3zEV/AhLSWSlsZSli2exv69G7l0 + 8Qi3b5zhzIk9DK6cR29HnfRFuaoA3CB1X6FR1usr5J7VVM/KHF85qvir9FuKAKxETY+rLxH7pYaZUk+W + zp8sNs1U1q6YzbZNy9i9Y4BDB7eyf/9W9uzaqLJL2LlzA7t3yvqOjQyuXc6MGf10dbbQ0lxLe1sj1ZWl + MmYnExUZQlioH5nyXMe11aoC8KwZk1QBuLu7lVZpbyXl+eQUZJKRk0ZyRjJhUWF4+HhjYWuDvqmRjLFW + uHl7ExQeTkBIKC4e3uLXuGHr6IqJhTVaegboGxtjaWsv+/kTk5yqRvtWS5vvnzGb5WvXC+uYMXchzeO7 + VGFYmUc4QM6nRAG7eHti7+6ElZMNZnbm6tiujPGGlkboWRhjYGeNsZsHVv7hOEblEFrYRWLdPFKalhCv + CMBVc9QI4M75e1i68xrL9txkzqYLtMzbSVLTHBzSGnHIbMOvtI+wqulEVc4gpnwqSRVTyamZRmP3IiZM + X8n0BWuZuXAlU2bNY8a8uSxduZKBjRvYtHMbW/bsYtvevew5rMzZe5qT585y5ORx9hzcz579e1QB+Mjx + AxxXUkCfOsqxE0q650PCYVXsPXhkj+y7kz0HdnDg8G41AviIEv17SvY5c5Cj5w5z6PwxDp4/xd7zF9hz + 6Rq7L91l5+Xn2X71RbZfe8jWa6+z+eYbrLv1JgPCyttvsPz26yy98TrLrr3Kiisvs+bqq6y9+DIrjt1l + 3o6zzN96ms0n7nHk+hucfe5tLr/0Abde/4Sbr3/MzTc/5sabn3D+pQ85dOcdFu27/kgAPvKHAKxEAJfP + 3k7ZlDWUTpxDcXs32eXFpOXEyRjrL/68i+BATowjhfFOlKe50inj/aRxcfSNi6ZFxqi8LAeSE63FfrQj + O8uNgnzxNXO8KS0OYfy4TCZPKqevt5juzhypwxmMH58q9TiW2toQysq8BV8qK4OorYmgqT5O6nEK3V1Z + TOzNYUpfPpP7cqSdp9BYGyb9SCgTxifQ153GrGnFLFvWysKl0retnsy6PWvYfeYQh65eZeeFG6w7eZOV + J+6y7NQLLD/zCotPvcKiky8x/+gD5h65z5wjLzLn0PPMPfgca88+5MC997n48CPO3XnIph17mTZlEt0N + RUwqCWdavjeTM92YlOxIv4yPvWKPdwUb0x5gRIvQKDZIbYglVWEy9ou/XZ8q916USpv0oc3Sz89aNZdd + pw9w9cXbvPDOQ84/d5UtUmfmrVtJ2+ypNM2dRf/GjSw4fJwlpy+z7OJtFp6/xfSj52nbsIPKRUvIn9JP + yrgG0lurSakrJK0ml/TKTNLLhdIMUgrFNpX3FpsZRVxWNKmF8aQXJRAotoGLvwUO3mJD+5kRIO8zNM5F + JTxBEYBdVRE4PM6BYPFBAkLM8RW7yl+J+hUfJChUfCeFMBOChDixEwpKA+nozmH2ghaWrJ3Cmu1L2Xxs + +5AA/Px9dr4o9fmFN9n64B9sui/cfpONUn83XnqRLVdeYfD0PRbsPEffyt20zF7JhCWDLN62h22nz3JW + EX1fvK8KwFdl+dpzLwivcP3uQ67deoUTp6+za/9ptu0+zo59J9m667AqAK9at5XBTTtZv3WPsJtB2Taw + ZQ8DW/ex4/Bp9p++xN6TF1m/+yirtx5kUI7fc+oqJ2894PSt5zl57TYnpV2evXSRi1cucOHyWU6fPc7x + s8c4fv4EJ88f55S04+PHd3Hy0CbOHtzAlUMreO7IVB4cGMeLu2p4bXsp7+3I5dPtWXyyKZFP1kTy6QoZ + x5dF8emScD5ZHMzHC/z4aL4n78915R9zhAXevLMsnDeXx3B3diiXpgRwuj+QE/1BHO8P4UBPALvGe7Ol + 2ZlNjU6sr7VlTYUZi/N1mJk5mmlpw5kl5bxcsQmLzRmsc2d9vQ8bagNYVxPAojxX+pOsaIkwpjxYn/xg + Q7LCzEkOtyQ2TPkxsxne3gZ4eemLH2WIv7+JWrp76uLoPAZ7u2G4OA7Dz3UEkZ4jyQvSpjpcn7YYYyYk + mDI1xYyZyYbMS9VjQbImi+OHsSp5GFtzx3Kk3Ihrrc5cbLDnaKkJO7I1WZHwDGszx7Cj2pxDHc6cmOTH + ni5XBhstWVxlxPQSbXoLNRifN5L23BFSjqY7fyw9Cnlj6M0by4TcMYKUsjypQIOpxdrMLNcX29mQWWW6 + YjNrMq1gDNMLNZlVJOsFekzK1aUnS5eG+DGURY0iL3w4qQFPEaMIwK6P/SEAxzwSgCO9NAh31yDEfSxB + HqMJlHsP9Br+J0ao+HsPJ8BHln2HEx4wmgj/UYT5DhOeIcLncSI8/4twTzm/EOP1GGlBfyE3/G8UxjxF + edJwGjLG0panTUeRPhMrTJhSJVQbMbnCQPoeffry9ZiQo0N3uiZdaRr0ZenIfZnIPZrKvVoxp9SGGYVW + 9KQb0RyvR3m4NvkhWnJvmqoA7OsyFlf70dibj8LOdIwqADvJGGxrro+FsTZGhhqYmGpiJj68qfJ3TPHh + DQxGYGCoZEAbi5X45pZmWpgYjcZQbwQm+iOxMBmtTu3mZKOJu50Gvg6jSfDTpjzOlNYkY/rTjJmTZcya + AjN2Vdiwv9ySvbkG7M3UZH/GaI5lj+a8vJtr5drcqNDkevlYblRqcEsRfut0uVuvx3P1+tyu1eFi8UjO + 5j/LyaynOJn5DOfkvV8tMeRyqTGXys04KxwqNGRL2lhWxA1jVtiTTAt+minBzzIpVOEZZkQ/w8LkESxJ + HcW8+BHMjHqKKeFP0hv6V8aF/BdNgX+h2ucxar0fY1riU6zMGc72srEcq9flQpMe52s0OFM+mlMlozhS + MJI9Uje3ZIxiQ8oIBuKfYl3802xIeJLNiX9jf94wztVqca/XkhenWnG314DrXZpcapd7bh/Fxc6xXOnV + 5tYUQ+7OMOf+HGuem2PJXeGOLN+abcutWQ7clr7h5jxPbsz348bCYG5K/3FjUZQQw03h9tJY7q1M5EUl + a8CGbF7ckM8L64p4cW0xL6sCcCOvbm4Vf6CFF7Z3cH/HJO7sWcC1/es4u28Hh3ftYeeWfaxasZ05c9fR + 3buIxtZpNLdNo71rLt0TFzJp+nKWrd7Opu1HOHz8Mucu3ePStZc4feE5Dh27ws59Z1i9bi/zl2xg0fLN + sryHjVuPCcfZuP00G3ecYdMuJTX0OTbvHRKBt+x+JALvvsKG7VcY3HxF+u8rsv9Vtu26xnYlcnjrCZYu + 38LEibOoqmgSW7eQpPj0/1EATgiLE2L/IDks8RG/C8DRJAQrInAECSFD6aBTw8LIiI4iKzaK3IQ4VQRW + UATh/KQ4itPiKEiJJjcpnJyEELISxG9IDBG/JVRN95wp60mRPkNTyQR5kBThR25ytCoAT58gdv6sGQws + XMTqeYvob+2iuVx8h+Ia8anamNDS8ycB+PcIYBm3VRQBOEGNAo6Se4gITSBctoeHJREdlab+zSopOY+4 + uBxiY7JUATgmJoO42KxHyHK0PKcY5e9WaUIqCTEpKklKVrtoeSYxcSRFK4jfJfefFhNJ5v/D21+G53Vc + fdyokzQcsyxbFjMzMzMzMzOzLLIkkyxLsmzZMjNDjLEdO3HsgMMMTZu0TRpukxTDv3ftLSdtn6fPec+H + c50P/2v2nk2zZ88suP/3WhMpiBK/KDJE9gNJDpP3VYjgYE+ivGxJCHQiPyGAhoIk1vbUs3N8iLMHZrh5 + 6QS/eeVJvvj9W/zw10/hp38qDK3gWyn+Ad/8HP2rRNkqpUK6/kz8/k3O+d8RwF/++VPefuMVnnnqiV9S + QP/XCODvb5e3id9/pYT+GT/I/veCb+RcaZcKaccP/5Q6KeVZP33zNd989TFff/RrPnvned5/9jLPnNrO + +S0r2d1XwURNGqNl8SJjIxjJDmB1lh/bK8I52hTPIz3pPLEik8drorhREsqTxWHcKgzjufwwXsoL45Wc + MF7NCeeV3Nn9W7khPCH3uJzhw7l0Tx7O9OJkljfH83w4URDAqdJQzlZGcqEmVuRODGcqIjhRHMyhAh/2 + 5vowk+XBeIoLQ2rUryOdYpu3htjRHGpHTZA1pb7m5HqZke1tTa66frMnsT4KAWyGmYkWpgJHBzMCZcwm + J8v3jw3Bwd7sNgE8Tw2qVIjfWQJYwf8mgDU0FrJokeiF/ySA9VQC+GKFMZdrzLlSbcqj1eZcrbHisXob + nm51FNjzZItCBitRwAoBbMr1agOeqNbl2YZZAvh3g+Z8scaav62z4p9rLfiHCMe/Dhny5wED/tRrwKcr + DPii34i/rrLi+w3OMOWh4ocxZ74esuSTbn3+2KHDp92GfDFgxlcjNnw5ZMWnAxZ8uMKYDzoN+LBdnw+b + 5bx6bd4v0+RtUS6visB+NXs+L2bM41bKA7wg5Wu5i3lXDIrP6k35stmSPzWZ8EWzIZ+16PN5twGfrNDh + w24t3hPB/nL1g7zZsoQ/rbODXUGwLwz2h8PuIH6Y9uDbSWeBA99N2PGPMWs1BfSfVurxWe/yWQK4+18E + sJIG+qshPRV/Glgm+8v4dmSWAFZSQP+gRAFv/pkANuGbTUZ8u9lYjQb+YZsF3+205JvdlvxznzXfHnHg + x2NO/HhYyn22/LjHhh/k2I+7rflhrw0/7rWWbVvYac9P26V9213FWHXnVo8xpyo02ZG7gPG0RfRGKele + FpDnuYQU5yXEOC8VQ0kTXzEI3R3ux1OMoQBfTSICdYgTB0FZly9WHIg8GajNeRGsrBMnKDeGKBmYtmI4 + GCy9Fz2B7rIHxKCYi56O1Cn/QNPXFMNCCzsl2svOVIW9rQnWFgZYmGljZKCJtjJIF9+PpsYDaC2Va3UX + qf9Ys7PVw8FOGweH5dg7LMVHHLK4GFuKcv3ob09nfGUZ06vr2DxUTU9NCuXp/mRGuYigcxCFYCOTRElZ + rETQyeA2X4SR1RKMbbUxU1KrOhmpBLCVvSHmNjqYWS7H1EJL3bZWou+sdTBUSF+TJf9GAEtb9RepsLIx + wMPLjogoX5LFOUtIDCIq2pfgUFcCg5zFwXLAx88GZzcT7J0MZglg11kC2EFJOS3tUOAoz1IjgO11sbXW + kr7Rxs3FEA93OddZSQ8tRryLvigNG1ECDkSG2RMaqKSAdiApzoOMFD+y03zJkXfPTvW9jVniV0WqJ1nJ + HqTGuZIY4UCsXB8RZKumt1UIMjurpTgq66hKX9vZ/DsBrDzbCGcHhQQ2xMZaHwsL7f9FACtrrjpJ37mY + L8XDbJlKAAcaaxEsxmeIoSZBYmQGSZ2vqQYexouxV1LN6M7DSgSUs94S/AyXEW64lAQZB1lyTZncs9lJ + nzURduwUJ/1UawpnerLZ15jIZGkQrTEWpNrPJUJ/DnFG95BtPpdSy8U0yLfrNF3OoKkOq42XM6qryZjO + IiZkbE6YLWDY4C765JpV5ncw4/0AjxUY8U6XE1+NefPDFj9+mnGDbbYyZ0z5aYch7BEcMoWTNnDBAW54 + wvN+8IbIgncj4HdR8HuFCJbt34fx0/sh/PDbQL79tT/fvhHAN88G8P0TAXDNl59Ou/PpJkte7tTlXP5i + pkPvZtB5Di1WYpwa3EGBzt0U6M+Vd19MtY0GDQ5LaHEUx8ZRm24Zqz0qDNTtDvlWjWZLqDScT6nBg1Sa + zqfGdim1LtrUuOtTJY5fqa8e+Z7LyXYXp8FLixyv5WTJfqLdAiKM7ybO9FfUBi9iS7UNT0yF8+Ejmfz9 + hQy+fyOWH98N5qdf+8LbPvz0giPfXTXiL6dF/h5Yzvs79Hl23ICjnctZnb2EAt/7CLO9Ex+re/Cwug8f + x7kEOj6An/1dBLj8ioRwaWeBPSN9sRzb38TFh3u4cr6Pxy4OcO5YK4d2lrF1MpPx1Qn0d/jLuRbEiRPn + 63K3OCB3YmN8J3Ym98j2Q7hYzxPMl+35uDlo4uchc8LXRJwzM4J8zAkWRRnkZ46flwneSiStzBl3mTsu + Ij+cHbRlfmljaylzWed+tDR/hb7ufVhJfyvksJuLAb7eCgFsTYC/lbrtI0rX11scaV8LgkWWhAfbiwHn + QFSQnUoCKz+iJcl8TAl3EkPLkcxoF7JU8tf1FwI4O8KGrAhlvV9Lkv0NiffWIznAQOrNyYmyIiXUTI0A + 9nfTxc1+du7b2OpiId/Y2GIZBqZL0DMUB81gAYYyd4xuE8DG5hpYiCyzFbnopKSrlrkcEe6i/riXmhgg + MiGU9NQQkhMDxSDwEbnhSZhCAAe6EhrsTmioQv56C/zVyN/QyADCY4Pwu00Am9kaoSsyTyF/tfQWsUzk + nUr86v0LWgoBLHNL12SxQAM9Y2mryMf/RgDryPzXlTmpZzIb+Wtooou23jKMTfVxdrHH19cDb093gZf0 + u4/0uxL9O0sAz0YA+xHoF0xgQCiBweEiY2MIDY8TgzmFmNh0YuOUlM+zkb//SQAnqQRwWLiSAjpSDOsY + oqMTiY1KnE2lI/eJDhNjXYkMDk8gWjGso+QauW+kGN0RCmR7lgBOIyz6X6mg/98I4HiF/P3/AQGsRv+m + KnX/TgDnzUYGy76aIlohgFNnCeD4xBRpUxIxSUlqOugEKZMSEkiLTSAjWkm1G0OBOAaVsX60ie7oTPKk + M9aJ3ngH1qY4syXXk71F3hwt8+VsfSgXOhI4253CoY5ktjTHsaomkq7KGDpE//e2V9PZXElFUQaVJRnU + lGWr0XRqdFxjCQOdtfS2VNJSmUd9WSYtVTm01xTQVJn7vwjgDIUAjrWX72El+smUcGV97CBjYkKNRCYY + khiuT3KUnjhqBmTFGZCnROAmGlOaYk55miWVqZaUJZtTkmBCgZyTK+cqKIw1ojjBkNJkY8pSjClXkCwy + MsmAEoVITpB7JCrErtQnmVEl96nPtKVZWfs3y5mmDEfqUmwpjzWjJNaEIkG+3DNXkBOjJ9ClUCGAU0zo + zLWjv9CJwQJHhvIdGcy0pj/VnEFp3/pCFyZKxNgXTBZ7MZbjxroUJ1aGmdHmvJh6i/sY9tJme7QNh+V7 + nI124qLo+EfFEbgusubJUHtuBlhy3dOIR12Wc81Vi8e9dXkyyITnYmx4KcmF51NceSrZhauJDpyNseRE + hDHHosw4FG7C/hBjDoSaciTaluOJjhwVp+Ngqjt7xWnZnuLJpiQfplKDmM6KZaYgjc15WWzKz2dTQSHT + 5eUc6O7k6MgAx9av4tD6EfasH2Lr6n5GezsY6mhiRVM1XXVl6lq0rdUlNCvRu4KGyiIVjVVF1FYUUl1W + QHlJLmVFuVRVllJTXUZ1VSllpQUUF+VQWpIv9SVqVGRdXblsF1FZWUhjg4yjlhpxTupU0qyzo5kVK7ro + 7umU+kaaGuuora2gSq6rEJRJW8pqiymvLaKipkieIe2Q9nRI+1bUlNFfW8aA3H+4oYJVTZWMdTUw1t3I + hu4mFcr+aHsdKxvK1Ojl3qpC+qQtvRX59JXn0i9jfKAql0HBShnXQwoqsxlWUJbKSFEUE6Vh7K4N5VRz + MDdWBPKbiQg+3x7Bn3cG8te9/vxlnxdfC746IOUBb77a78VflO2DCvkbyGcHwvhwXyy/2ZfGK3tzeXpv + MZe2l3BovITNKyvZMNDK2GA/a/oHaaitJj0jniiR9/HxXjK34uhqKmC4s4rhjmrBLAHcJHO07H8QwK0q + AVwi87aAysIMCjMTyUyOIT0pWkqRGakJ5GUmqyR9cW46lcV5MtfzKc3PUM9T0j4nx4b9QgAny35qotTH + RxEfFUqwvyfuSupnextcHGxwdbDG39NFJYcLsxXCX76LElncPBtdvEK+b09rDZ3yXX7G0Ipmdmwe5czx + 3WoK6O3T66gozSQm0leeFUp5cTplxUr0dxK5mXEkxgSJjPcRme9FSnI4wwPtnDy+hyceO8dTNx7hGcGJ + QzsY6W+jVr6nIo/qypRU0IoME5RlqURvjZR10mdKP/1MANfKfmt9CX0i39asbGfNUAcj8i3WDHcysb6f + TRtH2LplPVsE27ZuYPu2CXZun2LPzs0c2Dujrg88Mz3JquF+GceNNMu7/0IApySILg8iJNhHdHi8jGsl + XW4Pa1cPqgRwS2stJaV5ogvE95I+jxRESb8HhPjj5OqMiYUpeuLIG5gYix+jpHh2xd7FVbadsLCxx9za + Hl1DEzS0dNDU1hWfxhx7Z3c1wrewooqOvgGmtu3g0ImHVcJs/dQWWrp6ycwrkuck4RsSgquPD85e7ti7 + OmDlYIWZjSnGloYYWehjKH6dnoUherZWGLt5YhUYiVtiEaFFvURXrSO2eoyoyjGiy0fJbp6ic0whgJ8U + 3GTd7mu0jB0hpWkMp9RGnDJb8SvuJ6hkJSGFg4QXKuv/riSnejWtfdOsGNlC/+rN9K3aQEfvIL3Dw4xN + TTGzexc7D8gY2b+XPYcPc0IlgB/l8rXHOHPxPIeOH+XI8SMqCfzwuZOce+QMZ86f5uTpYxw/eZjDRw+w + d/92duzZyvbdW9gl32y/Qtw/fISHLx6Xe5yQ8hgnLh7l8PkjHDp7nP3nz7D/0mUOPnqDfVefZs/VZ9h9 + 7Tn2Xn+F3TdfZZtg65OvMv3062x65jWmnnqdKanbfONlZqTc8fjLbH3kFhuOXmH9gQvsPvcUBy89y5Er + z3Lm5is88uybPPLcW1x6/m0uvfgup596mx0Xn2dk/1XatlygcfoRajddpmLyEcEFKjecoGL1bkoGNpDf + 2kVSfjbRiSGEBTsRKrZypL8ZiSGWpIdbkRNnTUOJD50NYXTUB4uM9iI9xVLsISPxN43F57YiPd2FjAw3 + cnN9qaqKob4+SeRtPFUVkSKjw6UMkfEbQGmxD4X5LhTku1JY4K7uV5UF0VAXSXtLAt2dSfR3p7KiK5H2 + pkhqyv2oq/KnvTmCFR1xMpdymNhQzdh4I+Obeti6bwP7Hz7AiauXOXLtJgeu3mLnlReYuSp9efU1xs4/ + z9qHn2b1qadYc+ppVp1+jpETzzJ0+Cm2Xn6Lcy9/yo13/sT1F3/D3oMnGejtp1Xme3dWoPoHrJ54e7oj + rekOsaA72IyOAGNafA1myV8/E4oDzMgPtCQ7WGyApEAai1KlvSIvmspYtXktpx4/z0u/e4Pff/0xL773 + BuduPsr04b10T45St2aE9k3TrDpygtGHLzN6/nGGz1yj8+DDVG3eTeHaDWT29ZPa0Up6awNp9eVkNZSS + W19EvqBQdFdeVQEZIo8SsuOIF92cnJdAYk4c3qGu2Irdb+lqgK2HEV5BNviJb68gINKOELEfgqPt8Bd7 + ylvsKTcv8Yd89PEOEH8jxIQAsQX8g01k21i2xc5KsFMJ4Oa2ZAaGy1g70c7GHavYeWI7B0VmHnj6Jvuf + f4mdt15j6zNvsOWpt9hy4y1mHn+dmcdeY/cTb7P78beYlO/Qs+UY5f3jVA6M0r95BzvOnOPyC8+pBPD1 + l5/lCdl+8oVZAvgpGdM3nnmTRx9/jvOXn+LsIzc5d+lJTp69yoFjZ1QSePfBE7MRwfuOsWXXIaZ3HmKT + YMte2d9/nM17jzM2c4CxbXLsgMzDM1c5de0pwZOcuHyVkxcuceaC8geP85xX5vrZE5ySOXvy7FFOnz3C + aeXPOse2c/bINJePTXP9xBjPnezm5ePVvH64hHcPZPOH/Ul8tjeOL3ZG8ueZUL7cHDab+nljiEoAf7HB + i8/Wu/HhWgeVAH5vnSu/mwzk7fFgnhny5uoKdy50eXC2y5OHO7041ubBoUZn9jc4sK/Bkd01NmwtNWU8 + R5uRNA2GkxewKk2Tddm6TBaas7XCha3lHkyXeLIx342hJGvaI0yoChRf31eHdH8DkuU7RwWYECR+sbeH + gUoAe4hv6e2p+LdG4k/p4ey6HFt7Daxt5uNgPx9P54WEuC8mO1CHCpnvrfFmDIgNvCrVjLVJhqyKXsJw + 2FxWh9zDxugHxF5cxKkCXS6UmXKm2Ijj+XrsSV/Kxvh5bEpbzO5SI4622HOm34cDHY5MVRkxnLeMroyF + tGcsojljAY3p88SuXkRLxmLaMjVoy9CgQ4Fsd2YtUbEiR5O+/GUMFmozXKLHcNFyVhbIfq6GQJPBnKWC + ZfRmatGRrkVV7GKKIhaSFTqPRL8HiHC9kxDnOwhzvpsIlweIcltAhJsGoS4aBDkvIsBpMX7y7r4u8/F1 + nYu32224zlPhKXVeChEsdf7u8wlwnyd++kMEuT9EsNu9co9fEeg0hyBBmItCAN9NZvD95EfMpSRuIVVJ + GtRLvzRK+1pzltMjfdavEMEl+gwW6dGXo0NPxnK6U5bSkaxJb+oyhnL0WZlryEiBiUoAr863oC/diJYE + fRoTTSmLNiItYDnhHpr4OGvibLMYa9OFWBrNEsAOon8dld9ZbYyxsTLAXOqMDcU311HWgXyQ5cseQvd2 + gI65+ORmRssw0BP/ffkCDLQXYmqwGEvx3e0slbWFl+JuvZgAhwXEeSygKFCDhlANVsTIt07X51iZHWcq + bDmZK2NA+v9Y0kJOJ83nXOo8ruYs5EbRYm4WL+bJUk2eKV/Ks9XLeb5Ghxfq9HiuRpfrxYu4kvMQ51Pv + 40zSPVxInc+1HC0ek/H0eJExlwQnsnXYmbCIsdAHWOF5Jy3Od9LsfBct7nfR6nkXPQF3sTrmQdYnzGd1 + 9EPiS93DgEIAB91Fk/8cqnzmUOo2h3LBcNz9TGc+xL78+Zwu1eBi6UIuFc/jYt5DXMh5kFPpD3Ag8R62 + Rd2j/j43HXYnW8PuYnvEneyPu5NHihbyXKsBr/eZ8mKPLk+3anCzdYFKAF9vW8T1dg1udC3lmX5tnh02 + 5vlVZtzs1+VajxbXerW5skKHq71GPD5oyeND9lwf8eTGugBujobw2EgQlwb8eKTPh8dXBfDcZAyv70jj + zV3pvLY7SyWA31AigLeX8tbOat7cXcsbe6p5dV8DLx3o5vkja3j65AyXDu/i6I6dzExtZ2Rwgv6+DbR1 + rKK6poea2h5a2obpF7k8PrlLbJ/LXBEb5dazr/PKa+/x6uvv89xL73Dj6Ve4/NgtDh07z6at+1g7tpU1 + 67eweeYw23afZse+c2wXKKmhdx58hB2HLgmuiL31qOwruCbnPM72vTfYtkdJB/24yO2r7Nl/hd37L7Bj + 10kmJraL7dBGVkaB+PwpRCu/wwRHE3Mb6nZQFNGBESqiAiKIDYhSER+oEMARxAUJ1DJMEEJsUCDxQUEk + hAQRHxyolunR4SoSQ4NJiQglMzactOhQUiIDSI70JyFCfKUIX5Ki/NR0z8lSxoZ43iaAXYkJ9JD6YEqz + Uxgd6GX/1i2c3r+fA1u2MdDSKTZTNXUFFbRV/kwA15OblC3XKaRvJFHyDgqU91F+a1JI4BB5h0DfcPx8 + QvFwDxIZHYSvXzhBciwsNJmQkERCQhOJjEwlJkZZ2kxBGjFKhjoV0l9RycRGJYnvk0hcVAJxkfEkRMXN + IjqO5GjxvWKiSROkxkSQEh1BUqS8d0QwyeGBJIX5E+fvTpr0QXl2An1NFRyYHufa6aO8+uQ13nvtef78 + wW/4x58+nl3rV4m2/UlJuyzldwoB/DeBUir4+yy+/etsVPB3Cvkr+PEbwT9RCOMf5dhnn36oRv5ef+yK + SgL/7r13+dtfvp4ldX9SyF6FBBb8XwTw9/Ls2/jxu3/ygzzzR6UdCvmsPEe5+Kdv+PEfX/HPLz/hiz+8 + zXsv3+SVa6e4dmiKA6ub2dKex/rKBNYWR7FOMFoYxmhuABvy/NlfF815sUsfH8jiie50HquN4npFGE+W + RXCrJILnCyN5qSCSV/IiebUgWt1+rjCCJ/PDuJodxLl0H06kenIkzZODGZ7sz/BiX5Yv+7IFuf4cyA/m + YH4Q+/MC2Jvjx85MT6bT3JlIdmVNvDP9kU50hDnRFupEi6Ax3IGqYBsKfc3I9DAl2d2cJC9b4rwdifBy + wMvRQmS4thpE6ehgTmCAG8nir8fFhOJgZ46WlhLtO4+ly/6dAJ4lf1UCeOnif0FjMYsWLcTIyFDGWgxt + bW3MOVOkyzlRWJcqTXm01oJr9RY8Vm/JY3XWPN5oy612J54VBf90my1Pt9jwZKO5SgA/XqXP45W63KoX + Ydlpynv9Zny22pKvV1vw1xET/rLSgK8GdPmiT48vevVVAliJAv7LiCXfrHfkxwk3mPTgh/XOfL3SUiV+ + P2pX1vg14LMeUz7vt+CjbmN+327E+20GvN+ix+9bDPhDgwEfiIJ5v2wpb+cv5KWMB3gx/UFeSJ+r4uXs + hbyZp8Gvi5bxhwodPq7W46NqbT5t0OHTJl0+7dDlww4t3mvV5O3GRTxbej8vVM3nwwFzvtkaALsVAjhK + ymC+3ejO38fs+fsGO/6x3oa/jcr7jRjx+YDct2eZGv2rkMCfi/D/YsVygTxnxVI+610qpQZ/6l3CdyN6 + /LTGkB/XKumh9WGTGco6wN9vMuYfEwZ8t9GIHzaZ8uM2JbrXku/32fLdIXu+P+ECp6SPjrnw0z47ftxt + ww+7rPhpjx0ccJQ2CvY5w04ptztL2934fMqD51aYc0wU31TKA6yOm0d3+EKqfReR676EBCcNopw0iXBf + ir/LPNzs78bF6R4xHOcT4ruMKH8dIry1SQw0oTTZi/6qNNa2FdNWmkJCkBMOxhoYLbsfXc170Na8TwyN + B1WjQk+gu3wRBrpLsLUywtHWVIW9jQk2lvoqAWxssAQdrXksWXSvSgIvXzYXfTFKFKLR0cEQFyW9q+Lg + +BgTFmFDeoYH1eWRrBksZnp9I1tGm1nfW05DUQxpUc5E+VoR7W9DmI+1vIc+VkqKUiV9qpUWJtbLMXPQ + F4hx5GiEhUr+Kv+Cl3aYL1Ojfs1tdLFRiWEDzKykXuqUtX8NlTSmYjRp6y9mud4irG0NpU0OxMQGkaas + vZYaTlxCoLTRk5BwDwLE0fb1t8PZTd7X0QAnNQW0kUoAOzkbqsSvg72ulHJM2uNgJ8+VNtrb6eDjZYG/ + nxXuSvSw7WwEo6+XKSGB1rNRit6mhIrDFxPlQlK8F2lJXmQk+5Ce5H0bXmQlzxK/WUnuaurnlBgn4sLs + UNYzVQgzXw8TnORZCgHsYKONrbWOQImSnCWAlXTQrs4muLmYqiSwjbUe5ubSP9JP5tKnCgFsJbC3WIa9 + lEoacHfTJWoK6GATMVJNtIgwXU6YGKGhFtr4yzWexotxNFiIlc48rLTm4yLjIshoOXFmOmSa6VIg11bJ + t2h00GUw2JItIiiPNidysieTvVJOlAXTEmdJutM8IgzmkGB4F/mmD1JrqUGPjQ6rrfXZZGfCdmsjdohg + nDFYxHajBWy3nM+E8Z2MGs+R43dxOHgetypM+GDASeaaN2xRIHNmiw1sNZV5Yyjz/GcC2BYuyFy67g7P + +sBrSnSsEgUs8uA9BSH89NtAfnw3gO/f8eU7wfdv+vH9i4F8r6wbfE3m6gU3vtxlw5vDBjxavZRdiQ8w + 5DGHZhsxUI3mkKVzB5kG95Jn8iD5RvdQanovteZz6bAVx8BhOf1OegzImOl10KNLvlWzqQZVhvOoNJlH + rdVi6uWcWhcdqt30KfPQo9hLlyJvXVEe+pSGmFEVYU15qCXJjksIM7yHML055IsTsybPkHNrfPn1qQS+ + uBnPN69EwLv+Ak94xwNecuCn60b8/aw2fzqynN/t0uWFjXqcFoN2qlyXusj5xIoj5G/7Kzys7sHX4X5x + iO4h0GGO+u/YnCQtBroCObyngudvruPtlzfz2ze38ru3Z3jzhXFevDnMzSvdXH64iQM7chnp9aM4S5fo + gAfwcrgbe9M7cDa/D0+7hbiJw+pitUCwUF37xs9Vh1AfE0JFQYb6WxAeZEmYjJkAX1P8fUzV9Xx93ER2 + OOri5qgjY3g5dtZLMNZ/SOTSveo6wFYWGmpqaCXy1stTrvO3FkVqg7+vJT7e5rchc9HHgmCRKaH+toQF + WBMVbEeiKOsUmX9pUa5iWLqRF+9Jdqw72TFuZN0mgHOi7G7DlowQcxJ9xEn31ycnwoLcaGuVAFbWAPZ1 + FiVurSntWYq5yBuF/FXkkYGpproWur7hYjWVk5F8d5UAVqOAF2FpK/NP3s1V5ERoiBMxER4kxfqRlhBM + amIwSQlBYhD4EiFGbViwOyFBHlJ6ybneYmT6zBLAEQGERgUSERuMn5zn4GYtctJAJX+X6s5nmd7C2XWA + 9cSQ0Jt3G/PREizXE8dS5rNyrrZAx0ADXeOlKrRNBNJ+HTNNliv7hsvQlbmuRP8qkb8mJvrYKpFgvl6E + hwWJPAuU9kkZHKIiKDCIgIAggsS4DxGEh0QSERZNRGSsunZvZHQCUdFKBLBCAs8iOkYpFeJXShVJRMcm + Eh4RQ2ioGOVKyhy5Li5KSaEjTofURcs9o8MVxArixKiWY2JYK1HBEUqaaDG0FTI4XAzvcDHAf44CVshf + Zf1fhfxVEB+fpSIhIee/4mdi92f838Rvzm3MEsAK6TtLAGeqZXpGvoqfo4BT05QoYeW82TWA4xNSiI0X + JKbINekky35qXALp4hxkRUSTFx5FcWQgjYk+DIh8Hc7yZGWiHWsTbdicZs+REi/OVvhyodSTy1W+XGkM + 41JHHOd7U9ndFsPa6iC6SkPoqsmgt7mcnpYKGityaKjIprkql6aKLFoqs+luLGKoq5qRzmr6Gktor86m + ozpHrisQhymXurIsNcJOIYBzs8JIVwjgeBnDkbZEhlmIs2RGVIgpMWEmxIYbiZNjSGKUzJ8YfXHK9EiX + Mj1K9EaMnsw5fQoSjCmIV1IzG5OvROfG6ssck/o4JVWzEUVJxgIjilOMKU42ojDJUM43IF+5VpAv5xbF + GlGWZEZNug2NmQ40ZDhSm2xDWYwpxdEmFMeYUCjIizGW+5uQE2Mo2/oUxulTLfdsz7KmJ8+WvmxrBmR7 + INWMwWRTVqVZMJHrwKZ8ZxXTeS5MZ0qZ4shEpDmrPbVY5byIrYGGHIqy4GSEFY+EW/NosBXXRaY9JTr7 + OSmf8zfjGS89nnRdytPuWjznp8ur0j9vxdvwTpIjbyY68mK8PU/GWHElwpiLofqcCzXg4WB9TgXoczpI + 5H24BedjbTiTYMfJRAeOJjuzP8mV3Sk+zKT4sTklmMmUMDYkR7M+OZ61SeIwpSezva6Sg30dnBxdyamN + azk+vZ69k2vYvGaQ0cFeRno65Hu3MdjZQX9nO30dbfQKegTd7eIgtzXR0dqoorW5nvr6appa6mmTY51d + 7bR1NNPc2kCTHGtsrqNF6ju6WmjrbFLR3tms7ncKOrpaaRe0dbbRJte2S9neLvvKPRTIuY1dChppUtDR + QFtrHR1y3xVy/wHBsDxrVVsj67pbb6NFxfoV7azvaWO1PHNlcy0dFYU0FGZRm5tGdXYKFelxlKXFUJkR + S3VWPDVZcb+gVlCnIC2U+gRPutNcGc1zY1eZK492ip4dj+Cz7ZF8sTOIr/YG8Of9PvzpgC9fHPTjT4f9 + +eKQH18fCeCroyF8fjCUjw5E8f6eBN7alcZzO/N4fEcpD28uYtuqfMbE5l3b28za/n5G+ldSV19HSmaS + yCZfkYHeFOfH0l6Xy0BrGYMt5axsraS3oVRNqV2aHU9ZTpJKACuEZrPMyebqInXt3/L8NAoyEn4hgNMT + Y0lPiCU7JYG8jBSU9bwVAriyKJt8eV5KfLia8lmBQgT/TAKnJcWKDoomISZc7FZvPF0dcXd2wN3FXkq7 + XwjgopwMGqpK1QhgZT1hZc1hhQBe0VYrsqWaboFSDq1oYceWMc6f2s/JoztZu7qb1OQw0RPOpIntXS2y + p7oyh9JiaX9uIimJ4cREBxAc5EaI6LXOthpOHtvDk08o5O8lXnnuCS6dO8b4ugGaa0ukH5S1j/NUAniW + BJ5NC60QwUofKVAI4J+J4A6RfcP9MmaGO1nZK+NbSbHdXcdgfzNDg60MDrazcrCNNatXsG5dHxtGh9i4 + YRVbNq9nZnoDk2NrGB7oprO9kZamGpoaqv+DAA4N9lUJYCU6eHCgi7Uyz/r7OmmQfsqRsRghMtzP3wPf + QE+Cw/3x8ffGwckeUwsT8XcMxV8xwdzaGgtb29n1fm0dZN9OhZ6RGct0DNDU1hOdbaqSw8o6v0UVNfSs + HGZ6x24OHHuY3QePsXZiM43tPWTkFBAeHY9XYCBOnp64eLnjIN/U2tFafCYzTMS/M7YyUIlgA2tjDB1s + MVPSTofF459ZRURZPxEVq4msWCcYJbp8LdnNG+kcO8bUkRtMHHicdbuu0DZ2lMy2STwy2/DM7SSwZJDA + ogGCcvsJL+gnqXSEgrpRWno30zW4mc6BDbT3raa2uYO2FX2sHh9n8/btTO/cwcZtW5nZs4cjp05x5uIj + XLzyKCfOnGb3/r3s3reb/Qf3cfjYQY6dPMyhowfYs38XO3ZtZXpmig2TaxkdX836iTVMTI1Kn0yx59BO + Dp3cy+GT+zh4Yjd7jm1j28EtbN63hcl9O9l46CDTJ06z6eQ5Nh4/x+SJC2w+d5VNFx9n6tINpq4+xaYb + zzL1xDNMPn6LiWvPSN3TbLl2i+1XbzFz8QaTxx5hw4GzbD/1KFuOXWT66Hn2yD0OXrrOoSs3BDc5+Ogz + 7Dz/FGv2PULPzFm6d1yhY+djNG17nNot16jfepXGLReoHz9E9apNFHeuIC47g9Bof7G3rPFzNyDEW5+o + AGMSRM+mRplTXuBGY02AwI/yYndSk8zF5tIjOECX8FBjkpMdxe4Q2zbbi6LiYIqKQiksDFYjggvyfSnM + 8yI/x52ifCVK2IWCPCcVRQoJXORFTUUgLQ2RdLXFil5IkHkeRWN1AJUl7tRWetNcH0RnawRD/amsGSmQ + OVPF2EQbU9uG2LZ/mv0PH+fAhUvslz7YfeUZdlx9gc2XnmPtyccYOnqJoSOXGT56jaFjTzB4+An69l1n + +hGFAP6cJ976M9duvcvO3cfp6xqgpVRskLRAuhOd6Yi2oz3Uii7xH7oFnQHmtPqZUCUoEX2bJ/vpAcp6 + ebaUilxvKM+gtjpfxlsFa6dHOX/zMu988h5ffP81v/n8D9x45RYHLzwsY3kbXZMTdGzczNCew6w5doG1 + 8k1XnrhC+56T8p32Ub5hC/nDaylYOURxfx9Foj9LRQdVdTfR0NdCc18rDT2tVLXXk1ks9l12EnEZcUQk + heHoI3PaxRgzZwOsxf5387fCK8hWJYLVaOBwewLEhvAJMsfdzwgXTz08fA3xCzYhKMycYPFBAsLMVARH + mBGbZE92vje19dGiVzMZGK6Uud/Jpj3r2X5mP9svn2XH9RtsvX6LyceeY/zqc2y48hITl19i46WXmLn6 + Orsee5upM7fomj5GTvsqMup7aFw1xtTho5y+cZ1Hn7/F5Vs3eOTmE+o6vleffJGrT7zEpavPc+HKU4Kn + ufjo0yoRfPr8YzLPzrPvyCmVCN5/5Cx7D52W+XyULbuPsGnXESa2HWDNpl0MT2xjYN00Q+PbGdsuxw+e + Yefx82w/+jBbDxxhZu9+dipZAfbtYs/eHYIZ2d8q42GzYCO7doyxd2YNh2ZWcXrXai7tG+DmgUae21/C + K/vyeHtPGu/tiOGj7eF8ppC/W0L4anMoX00JNoXx58kg/jTuw+cbPPh4vTMfCN5f76YSwG+sD+TJQbGl + u1w51+HKw+1unGxz50izGwcbnNivpIBuclFJ4G2VlkwW6LM2U4vV6Qr5q8NYvglTpXZsqfBgk9jkE4Xu + rBPbcUWsBU0yL8sC9Mjx0SPF34j4QPGFfcTv9dBXlzFyc9PF000fXy8lm5UJnlLv7KKNncNSbB00cHJa + jLe7JqFey8gMNqAi0pS2RCuGMu1Yk2HF2hRDBsMW0ud/L4P+d7Ih/F52JM/nYOZSgRb7srTYm63NTMYy + JlM1mJD6mVIj9jbbcXiFB9ukXFumR2f6QhoS5tIg19anLKA2ZR51KYsEC2lK01DRnK5BS8YS2rI0VXRm + LaU7R0mXrEVfgQ4D+csZKNBmsEBLtrXozdYULKNb2tCaoUVlwmIKoxaRHTafJP+HiPS4mzDXu4l0vY8o + 14eIdV9IpJsGYS6LCXBaQIDjQvyl9HWeh7fLPLxcZ+HpMvc/oNR5K1HCsu3nPJdAuVeg8/0EOtxDgP2d + 6m8doY5zSPa7X40+LohcSEmsBpWJmuITLKMmZalgCa3Szu58PfoKDegv1KMnS0eNXO5MUaKAl9KTosVg + tgEDgsE8Q1YVmLE635KVOeZ0p5uxIteRxjRbcsINifZZTqCHNu7yHe0sFmNlooG9hQ7ONsZ4OVvh62Er + 9pY1ttbiZxstQU97PtpaD6mlQgibGWtipSzPZ7JcDcDR11mEsZ4GlsbLsLHUxsFGDxc7HdzsNPG0nou/ + 9T2kus+lyPtBmoLnM5qsx7EKZ87WOHOqyJKjGbocSlzIkbiHOBZ/H2fTHuRqwUIeL1nEjTJNbpYv5amq + 5TxTo8OzdXo8W6vLE2VLuJI3jzOp93Ei4W5OJz3EpeylUqfPY8WmXCgy4UiWLlvjFrE68H5anO6gwnIO + 5VZzqJY+r3WeQ7PHHPpD72Ek5iGGou6XsXoPA6H3sSL4VzT5zaHSaw4lLnOocLlDzrmHTWn3syPzAY7k + PsSpHGlnriDrXs4IjiXfw67oOUwFzmHcdw6bguewNXQOuyLmcCzlbm7WafHWgCVv9JvwdIsGT9TN5fHG + h1QC+GbnEq53aHKjS4un+nW5NWwsc96AsjMppAAA//RJREFUiy2LOF79AMdrH+Ro3UOcaNCQ+a/HuU4T + HlnhxKNDflwbCuR8lyfHGx05Um8r2248uS6c12ZSeW17Gq/syOCV7Tm8OpPLq1uLeH2mXLbLpK6YF7aX + cWtnEzd3r+DKrjUc3bSWzSMj4oP1UV/ZQmNtN/V13ZSVNlFZ3kJLc5/YphvYKrrnwoXHuSG2yAvPv8ar + r/2al155m1uyffOpF7n2+NMcPXGWzTO7GVo9Rk/fKobXbGL9xj1MbDnIxPQhJrYeZVwwpuI441tOMj6t + 4GE2bHqYyS0X2bD5PGObzsj+SSanTzC15QhbZo4yNbVbJYCzMwtJik8nPiqehIh4EiNnkRARR3xYLHEh + USqUdNAJITFiq8SQGBwr21ECpS6KxDDZDgsnQU1/PIuYoEBighVCN0yFkhY5MSKUtFiFDA2T7UB5RoD4 + H77ERviSEOlHSlSgSgrHKtGxge5iG3kQE+gl9UEUZyYzKvr5yI4dnDtyhD2bpulpaKGusEJFR3UzXfUd + NJTWkp2QQZRfGJEKeR08u55xjLQ1OkwhgKMJ9g8nwCcYb49A7O3csLRyxt7BHQ/PQILk3YKCYtRSyW4X + FZV6G0r0b9IviAxPJCo8gciwOCljiZG+io2IUREXKf0TGU1iVDRJShkZIe8aLv2p9IP0j0KQhwRI3ykp + sCOozs9kRHzpMwf28sLjV3nv1Zf446/f4k8f/I6/fPoR//zyC37469f88Pe/qfjx73/lp7//hR//9tfb + +FrFT3/7UkoFf+ZHlTT+FvhOJYC//+ZrPv7w97z4wrM8dvUST954nPd+82v+8tWXKNG8/PDD/0kA/4Lv + v+Onn6EQwN/+nR+//dss4axGKH8v9X/jb198xGfvv83bz8n4PnuA09vXsX1lHasrEhkqCGOkIJTRknA2 + lEQyURKmrvu7uTCAQ/VRXFqRxvX+DK61JXClJpxrlWE8UR7Ok6URPFsUxXOFUbygoCiGZ6V8sjCCq3kh + nM0M4GiqN/uTvdiT7MHOVA+2p3ixLc2LmVQvtqZ5CnyYUZDuLfrSm+lUdyaT3RhNcGEk1pUVkS60h7vQ + Gu5KS4TY4lHOVIXYkedrRpqHKXHOxkQ6i34X+R7sbo+XkyWWSsp/Ux2cHMWW83cjKVHGWnQo9rbm6pq/ + SzRnyd9Z/Iv8nYXGL1iyRIPFixdjbGxMbGws7e3tzHm4UEclgC9XmXGtzpzrTVazaLTlRos9z3U683yX + C8922PNsmx1PN1vyZL0pj1WKAC/X4Zk6fV5tM+Y3K0z4eNiMPw+b8CcRin/q0+FPvcv5bIWOQE8lgD/r + NearIUv+sdae78ac+XHcg+9HXfh6pTWfdhnzUbs+f2w14ON2E/7YYcJ7zXq8U6fD27XaKt4VhfJ+jR7v + y3N/U7SUN7IX8Hzq/SoU8veV7IW8nqfB2wVLeLdQk/dLl/G7kiWCxXxYvZSP6pfxYbMW7zVp8lbtQl6q + nMvNgnt4suh+3mrW4fM1Tnw/7Qc7Qvhhiy9fr7PjTyPmfLnakr+uteQva8z4csiIT+W9PuxaIm3U4NNO + TZUA/hmf9CyRd9WUc5bw5cAyflhjyE/rjPlp1JAfxwxgk7lKAH83ZcQ/xvX5ftyAHzYa8eNWc37YMUsA + f3tY+uekCz+dniWAOWB/mwC24ac99rDXCfYokGPbpM1bnPnrJlc+nnDn+V4rjpYsZTzxAVZGzqU9eBGV + 3hrkuC0h3lGDSCeBh6YYOPNwtbtLBtGduDrfh7/nIsJ9tYjy1VX/LVyTGcRIQw6jHaV0VqSTHuGJh5U2 + 5jpzMdC6H51lD6jGhkIAz+L/JoDNxQD5mQBWyN9lS2aJY0N9MUbEEHGWQe/pIU6KvzUhYXbEyWTJzfMX + ByyWod4iJtbUsXFNI8OdxeQn+xPsaYaXgx7+riZi2JngYK2LuekyjEw0MZNtM1t5pqMRZvaGmNoZYKaS + v7oYmy9XSV6FALZQImHlWgXWClFsoyvnLMfEUkc9T1cMKm2DxSoBrEQAh4V7ExsXRGx8EJExvoSGe6oI + DHHG288WR3HSlPU87RWyV4kEdrmdCtrJEGdHg9koW4GSDtrKQhMlJXSAnw1hoY4qKWVrs0yFu7Mefl6m + ojhm1yhVUtYqqWljIpxJiHUjJd7jP5Ce4CZwJS3eReBGcrRCADsQESR9Kc6iv5c5Lo56aspphQC2kW+o + EL9WFmIEyrZCSnu4meHpbqGSwAoBrKwlYmq6RIW5qaaaLsbWTGAi39dgIa7GGvgYL1UJ4CgLXWIt9Yix + 0iNCrg22Wo6P2RJcjBZiK2PFdtlc3HQWE2qkRbKFAbkW+hSb66gEcJ20qcffmIkML/Y3xHGkK5XdrfFs + KA+iKd6STDHao/XF6Na7gyLj+2m1XMJqO322Oppy2NWGM2L8nnEw4ajFUg6Zzme/xUPssvwV28SA3CdO + wfnoBbzZaM7nI058I3ODzTKfNsn82WwJ0yawVebjDpmf+41lnlnx41l7fnrMlR+f9uKnl5Uo4ED4dTC8 + qyBQjZj98R0ffnjLW8WPb8q+nPfjLS+4LnPxigt/O2zHb8aMud6ynANZ81gjDlWr/RyKTeeQLu+SanAX + aUZ3k643h1x5r2qje2izXEi//TKGXPRVDCiRwNbi8JgtptZEHCmLhTTaL6XRSUcMYj0qXXQpdtWhyNOA + El9jyoMtqI60pT7WifJQG5LFYQg1uI8QXXmm/a/E6VjOwR5nXtgXyh+vhvG3F4PgHW/4jfTHO87wivTJ + k8Z8c2E5X5/Q5g97dHhpky4XBvXYXmtAe+ISkj3uJcDuTrxt7sHX/h6Cne8mRIzuGL+7qRNDftvGZK5f + 6uB3b2/hiw/38fVnB1X86cNdfPL+jNRP8OtX1vL0tXYOiMHb1+ZEUboO0f4L8La9Bx/bBwl2WSqOyCJc + 5H1dLTVws9HEx2k5IV5GhPmZEh5gTmSIFeGhVgT6ibzwNSXQx1TGuLE4bzKOpW9cHXVwsF2KufECkTkP + YSr9p6SEVlJDuzjryzg3xtfHQiWAA/ysVPJXmX8KvAV+XqJkvS0J9rUUQ85ODEs3MmI9yBTkxHtRmORL + rkICx0h9lCNZUfbkxTiQH+tIUYIT+dF2pAYYqwRwdrgSAWyppoAO99TDy1FLdeTMzTQwkTk2+4eTpSoB + rMguQ+UPNlKqMNXAUNpuZLoAMysNbJT1wp0NCAqwlz5wE2PPl5TYIJEBwSTGicEXHUB4sDdhQV4qQkNE + RikI8/+FAA6JDCQsJhifIE9sXawwknmrpn3WmfcLAayUSt3PWKazgKXaIrdv72sp54kTqW2oqULLSCDt + VrDMcAla+proGizDwEQHS2tjXF3t8ffzEoMlnKSEGIEY//GxaqmsV5sQFyfGSLyK+Bg5Fpss75NMfHyy + yNukX8jd/wml/t+h1EWKURwRHkOMlIkxCQJxMCKiiQuP/DfIvmJIi0EdGx5HdESsep2SKjoiMlFFWGQy + YdGp/38jgH8mf38mgJU6hfzNyCz4hQROS8/+DwI4Lj71FySJM5ISl0JaTCJp8r7ZYZEUhkdQEeVPlxii + awq9Gct3ZzTVhqlkS/Zm2ojN58Kjpe48XuTM9VI3rtf4c605nEe649jXGs5ohQ/dRX50VaaIE1RMX0sZ + XXWFdNTmS5lPW1UWbZWZ9NQXMNxRybruGoaaSlhRl6uiV87pqsmjsTybyqJUivPjyMuOIDPNj+QkV+Ji + 7ImOtJL+txTdZiHfzExgQmy0sTiKhsRH64tzo0uSICVSW00LnR45SwRnxcjcijP4BTmyr6RqVpCfYKii + IMlARV68HI/VlXmqTXaEIFKXPLl3aYIpVWnWNGQ4UJduT1WipUoAF0WZqCiMMaMg1oz8eAWyL/cuSTBS + 1xVuybCgM9uKFZkW9Kaa0pc4m0pvTYopk1nWbMm2Y2uWLdsz7diZZs/eVHt2x1iyxV+PGV9tDoUacyrC + jLNhplwOMeOxIFNuCJ4JMOE5fyNe8NHnBc/lPOe+hJe8lvF6kC6/iTLl/QQbfpco+iXehjfkfs9FmPBE + iJ5cr8OVAG2BUgqCDLgmz3hUnvFIlDnn5NzTcdYcibNjv9hW28Vm2CyybCLOl3GxadbHhrI2NoQ18eFM + 5qUyU1vE3q5aDo50c2BsJbs3DLNjfA3To2vYtFbKdeuZHptgesMEWyY2qtg0McnGDWNMrl/PhvVrGRtd + y+ja1YysGmLN2lWsH1vHxMQG1m8YZa3cZ7XUjawZYY1srxtbw9r1q2V7FavWDv8bZs8ZXj1yuxxmZGSI + lSMrGRgZVNG3SkE/A4LBkX5WDQ+wdmiAsZWDjK/sZ2poUNDP5lUrmV49pGLrmmG2ja5mRp4xMbiC1Z2t + 9NVX01FZSkNhDhU5KRSlxpKbGCFjKVxdT6ogKUxFfuK/UCD9VyQ6oFb6tifZgvFsMy60efDWhlA+2RbO + p9sD+HSXL5/s8ebjA758fNCfT44EqvjT8RC+OBrOJ4ei+MPeGN7ZmcQr2zJ4alsBV7aWc2yymM0r81nT + XcZwdxMjvb0M9g5SU1dPUrqyFqwvkdHeFORG01ydxYrGIlbUF9HXWMaKBnmPkgzKsuIoyUqgqiBNJTmV + 1OwNlQUq8Vmam0J+etz/KwFcUZRNXmbSbMSvmvI5TCWAFaQlRqoEcEpClMzXMIIDvPByc8bT1UngoEJJ + Aa0QwMW58vzqsv8ggHs7GunrqKe3XbZvY7ivje1bxzh7ej+HD83Q39dEYmKwmm0nMSmE/MJk8vKTyMyK + ITU1kviEUNEdQSL3fYgQndhUX8LhAzM8ffMyLzx9TSWAL58/xqbxETqaK6UPClUCWEmBPYsMFf9OAivk + r4KmKpFhrZVq5O/YmhVq9G97awUdbZX0yPxQ0N5eI6hmRY+8S18zK/s7WLWym9E1A2xYt5I1w/3097TJ + dfU0NVRRX1uprgGcLP2tpIAODvIhNSWO+rpyBvo61RTQvSvaVQI4ryBD/A5/PDydcPUUP8HPDXcvV+wc + rDGzNBEbwhhjCzPMrW2wsLHF8jYBrMDKzhEjM0v0jEzR1jdC19BUjQwODI0gI6+QhnZ51tg4UzO72Lhl + ByvXjFHX3CFjK0vOicTN2wd7V2cc3V2wd1EigC1/IYCVP44ppaH4d0bO9lj4+OMclUJwXj2R5QOEla8S + rCGifC2RpavIbBynY/QwUwcfZ3zvNdbsvET72BFyOjbil9eNX+EKgktXEljYR1BOH1H5K0mvWEdR/Xpq + WtdT176O+vZhalt7Kaqsp6apjd7hEdZNTrJ+apI142OMT0+z6+BBjp1+mNPnznPo2FGmt21l4+aNTG/d + zLadW9m5ZxszO7YwNT3JhkmRQyJzhuU7Da3uV7Favtfo5BrpE5FtOyfZumtSyvVMzoiM2jTC4PhKekaH + 6RFZ1jc1Rf/mLfRNyxjdup2hXfsY2n+IVUdPMnr2AuNXrrLh8qOsv/goa89fZuzsZSbOP8qWi9eYPnOJ + jYfPMHngFFOHTrNh7xHG9hxhy/Ez7DxzkZ0PX2Tb6YtsOXWZ8cOP0Lv1BK0bj6sRwF27r9O68wYN267T + tP1xWrZdomnjUerXbaWsZ4DozDQCZS74+Ipt6y7+o7s2wT7imwUYyDw0IjfLgcpyL2oqvSgpciUlSVn6 + RCGAdQgLMxEbxV7sDneVAM7PDyA315/sbLF5s33IyfYkN9ON7Axn8rLE1s1VILavoCDPmaI8F8qLPWWe + B9HZHEFPazRtjcFUi51RnG9PRakLddVeNDf4090eSd+KZEaGC1k3Ws/k5l6mtq1j674dbDtyhJmT55g5 + c5nNZ68xdupRhg+eoX/fKQb2P8zggfMMHLhI394r9O69zuZH3uH0859z+aXPOHP1NTZvOURv5wBtZcU0 + pwbTHudMW4QdrcHWdAXZ0B1oI36nNa0BllQGWlIQZEWW+MvJciwz0p3K3DiRE7nUiR5sFJk0vnWCSzce + 5Tcfv89X3/+VD778mBd//RqXnr7B7ofle+/Zw+DWHQztPMT6YxfZ8PB11p15gsGjl+mW9rZuP0zN5Ax1 + 41M0bxinQfRZk+itVmWurx9icGw1/aKPOkcGKKwuJSErhZC4MLxCvDB3MsXEXh9TR30sXU1w8rHE3d9G + YIWHtN1H2u0TZIGnvxluvka4eyvpn00IDLMQe99S9IQVQeEWKkKjLIhNticzx5OKylAamxLoXpHL4Koq + 1m3sYWLfBJtO7mfrlYvMPDb7R4axS08xevEWYxduyfh9julLL7P90deYOPUkHVOHSa3vI660idLuQdbs + 2M1uZT3uq5c5de0Sxx+5oK7je+T0FY7KNzx07DKHjl9SU0ArOHxCSQF9To38VdYA3nf4tLqv1h1+mF0y + N7buO8HEzAGGJ2ZYsXYjnUPj9KyeYmhiF6s372fN9F5GNs4wuH6SlWKXrF4ndofM63UyT9eODrJ6jczr + 1T2sWtXJ2pFWxkdamF7TzO71rRyfbODS1lJubM3h2a2pvDIdz9ubwvndVBAfTQXw+ZTo6alg/rwpjK+n + I1Qi+M+T/nwx6cWnEx58NO7G78c9eW88gNfW+HKz351HOpw50+bMqVYXjre4crjJ9T8IYAU7q23ZWGzM + +lxd1uXoMF5gxGSpNdOVLkxXecu22OsFHqyRudYda0NDqBklAYZk+RqQ6G9MjHzrIC8TPN3E33XRw81N + Hy93QzVgQPm9SNl2cdbFXvxNe+dluLhp4eutLT602NAhRpRFmdGSaM1Ahh2rM61ZnWzAUMRiBgIfYCjg + V6wPvZct8Q+yM2WR2K9L2J6+lJkMLaakHJdyXNq8qdyEmQYbZlod2VBjwUChtsy1hdTEzqU6XpA4T2zq + BVIuoFJQk6wQwYupT9WgMU2TJrmXgtb0ZbRmKGTwUtqztegSrMjXYbBIV02h3C373TladEjZnKlFRdIS + CmIWkxWxkOSAecR43U+kx31Euz9IjMd84j0XE+2xmHC3Rfg7zMfPXuC4EB+n+Xg5z/0fmI+n01wVyrYC + 5Tw/x7n4Oz+Ev+P9BNgrv3v8SjCHEIc5JPk8ILJiPvnhiyiKXkJ53FLK4xUsoSJBQ95xibyPtDtHl55c + hRTXoj1Z3i9Jkw6BQgL3ZuqK76BLX44+Q3kmrCqwZKTAmv5ca3lvN1pznCgU3yNR7PgwHwO8XbRxstbE + Rlm310oPdwczfF1tCfRywNfDDid7E/X3TyXNs7746MZKhK+ZFjZWSrZBA6wsdDE11lJ/g7Uw0sLWQg8H + Wxkjjia4Oxvi4aSNj6OGvOtDxDrL+7neQ5WvjIV4bQ5WOHO6xo1TJbYcztRnX8Ji9kU9wMHoezmedC8X + c+dxtWQxj5cv4Xr5Mm5UaHGzSpuna3QF2lyv0ORywUJOpd7P0fi7OZ74IOflW18q0OdqqfgmxWYcytJn + U+xiGXv3Uyf9XGgyhwLTOZTZzKFSIYFd59Dpfwf9YfewMvI+FUMRD9An47TFbw7VHnMod5RSMBxxJ1OJ + dzOTfDf70+7maNqdnMq4izOZd3M26z6Op/yK3dFz2BQ4hwnfOUyHzGFX1B0cTvwVFwrm8UK7Ae+OWPN6 + nyFPNsznWtW9XK27n5vtC3m6Zxk3u+X9Vujw9KAhz46Y8NgKbU5UPcCu/DvYWXAHO4ruZE/J/RyoWsyR + Wm1ON1twscedS92enBIZcLDCkv1lJpxqsuPxIX9e2pzIyzPJvDiTygtbMnlpOkvq8nhpUxEvTuXz3KYs + ntyYzWOTJVwYr2HfcA3jnTX0VFdQkZtPTmqO2NYVlBXViP6toLK0gdbGboYH17Flagcnjp7mwtlHuHrl + Go899gRXrz3BpUvXuHDhCmfOXmT33oOsn5iid3CEtq4+WjpX0j2wnr6RSQaVrCurt6gZWHpWCUZEBisY + 3i7YSc/KnfQN75Nyt7rds3I7fUMii0emxV+bZqXI6oqKBnJzislMzycrLUdtb3ZytoqspCwyEzPIjE9V + kRGXJmW6+PTpZMXKdmwKGTHJpMUkkR6bKGWcQPyN2FhS4+JIjolUkZWUoCIlNpo08WGykhPIUP6YGh+l + +imq3xIXQkp8KOnxYXKvEBLD/YgL9SEuxJeEUH9So0IoykhmuLOTXRunODCzjfGh1TSVVYk9UERdUTld + da101bdTX1pLlkIA+4erpK/ye5KC+PB44iMT1N+WwoIiCfILwd3NFwtzewwMLTAxtcHVzY/gkBhCQuNU + hIbF/weUdYN/Rmiwcp9YQgMjZxEUTnjgbQRFEBEUSmRw+G2EEhEYrCI8IEgQQKR/gLxjMOkxUZRlZ9HX + 0sKx3Xt46vIVXn/mFu+88CK/f/ttPnz3N3z83nt8+rvf8/nvP+BPH3zIVx99xF8+/pi/fCJQyz/exgd8 + /ckfBL/nr5//kR+/+ztKWuYfv/sr3/ztz3z0h/d56cVneeLxR3n2mZu8/9t3+erPf+L7b/7J9//8J3z7 + veCHf+H7n1M//0wCKySx4Cc578fvBN+o91fTTsszvv37V3z92Yd8IPbX6888zpUTe9i/cZDJngpGqlPo + yQ6iL8uf1flBbCgNY6oiiumKSLaWhjJTEsTBmnAe6Urm8RWpPNoay8WqEC6Vh3KlLJRrJeHcLI7gyaKo + X/B4YRRX8sJ4ODuQw2m+7Er2YluiF1uSvJiW7U1Jnkwle7JRhQcbk7xnIftK/WSCG2MJrqyKc2EwxpWe + aDc6IkXGR3rQHO1JU4wblWEO5Piak+JuTJSjIWGOxgQ5meMvMt7DyQorMz11eVWFAPb3cychPoKoyGBs + xR9bunQhGkvmqSTwLP6V8lnFksW/QENj8X8jgLU5X6rP5WpTHm8w50aLDTdbBS32PNXuyIs9bry0wp0X + u514vsOBW83WPFVnxuMVBjxeqstT1Xq83GLIr7uN+OOACZ/2G/Bxz2x65E9VLOfTHl2VAP50hRF/GjDn + ryO2/HOdA9+td+O7da58PWjDp12mfNRmyIdN+vy+UZ/f1uvxVpUWr5Yt5ZWSWbxRos07JTq8U7icN3MW + 81LqQzyTcA/PiiJ6MXM+b+Qv4ddFS/l1oSa/KVzCeyVL+G3hIt4rXMAfKpfwQb0mv6tfwju1i3i1Yh7P + lj7Ijfx7eDxP7lGxgHc7jPh6vQv/3OjNX8dc+Eje5wNp+8fyTgqx/dUqE74Y0Oej7mX8vn0Rf2hdKO2e + jQD+vGcpn3Vr8lHXYj7u1uCz/qV8vVKbH0dNYMxUYAzjgikLlDTQ32405u8b9Ph2vR7fKUTwZmO+32bO + 9/ts+OawHd+ccuEHhQA+6qpG/CqRvz/ssOXHXfb8uFP2dwi2O/P9tCN/m3TkizEnfi99+VyfPUeKlzMa + 8yA9wQ/S4LuAMk8NcpT1fx0XE+m0mChPTYLd5uFqcye2VnNwtL1LjJ+HCPFcQrSfrjhBttRlh7KqKZex + rgp6a3MoSAgkyNUUW6NFmOjORV/7IcE89HQWzaaB1tEQA0P5Z5nh/0kA6y6fr5K/2kvnYaArA9FwKVZi + pLjKff19bYgIcyYmzp3kVC/yCoKoqoyhsyWLlb2lDPdV0N6QTWyYk/qvNXvLZWrkr7ONGDhm2pgYL8VE + jB4l0tfS3hgzByNMbA0wstbD5BfyV4nyVSKAl2Mhx+xdzHF0M8fBxVQlgS1tddXrTaVNBkqKU2NNLK3l + Ga6W+Po5ERTsoZK+wWHuKkLCZiOAPX2ssXcyxNJGG2sbMbodFaPcGA9PM9zFaXNzNsLNxQRXZ+PZ6D/T + xTiLQxcS5EBMtLsaBWxnq6WmsXay01JJYBdHJZ2tFp6uBgT4mIvwtyUq3JHEaFeSRGjMQrZjnQVOouSc + RAHOrv2boERIhyoksBiJvlZyPwO5r7Z8Ex353joq+atAiQZ2cTLCy8MCXy9rcRwssZY6Y+MlGMt3NjZe + jJmJGI2yb22igbXRYjUC2MVwsUoAh0i/x4qBmWhjRLytEdF2hoRLHwbIvT1MNXDUnY/9sofw0F5IhLE2 + qVYGFFgbUib9WynfoNJSjGUvPdalurKzNpJ9HYnsbI9nfUUgTfEWZIqRHqc3hwydOVQY3ku3+WK2OJty + wtOex/zduBXkzi1fe67J+120W8Jp23mcEqP9hMuvOBvwADfE0fhdh6XMW2X9bpkvkw6w0ZqfNpry05QR + P27S46cZfX7cbciPh8xlvtnw46Myp2668/0L3vzwmj8/vRXAj4Kf3vITeAs8+elNT34Q/PSGFz+95g0v + esJTTvCYE9+dceAPW814uk+X4yWL2BD2K9qd51BsMYdUozkkm9xFotGdJGjPIXO5vJfenbSZzWPQfhlr + 3AxZo5DAMr57LcUhMltEowKbJbQ46dDsqketHK8Qp6/QWYciDyNK/cyoDLWhJsqRhjg3ykPsSLJbRojB + /QTr3km85R00RC5musGSq1Me/PacH1/dkna/LbLlPRd4xx5es4NnTfnhijZ/O63Nh/t0eHVaj6urjdjX + bEK/ODTpPvcTaHcnfg73imN0L6FudxPpeQeZ0XMZ6nDj7NFS3nxhNV99vJdv/3KUH/5xgu//dpRvvz7I + P77cz18+38mXH28Vg2OUJy7VsmtzDH3NThQk6hHuOo9gh3lEui/HT97VzWwxrjJPXK2X4eWwnCAPcYT8 + TcS4MZNxbakSwAF+JipC/MwJ8jXDT8keIP2iEMCO0pe2ljJ3pe8sZMz8OwHs4WakEr3KnFMigBXiV4nA + /xle7ib4e1sQFmArhpwLGQk+5CX5kZfsR2FyAIUp/uQl+oiB6kF6pBNZUXbkxzlQkuxKZYYHZSkuZIaZ + kRJoSGa4mboGcGKQMSHuOrjbLVVTOZmYLMLQREk7v/R26vklauTvvxPAhjJ/9E0XoG88F2OzBSKHNHFQ + /vTia0tYoCuxId4kRQXLvA8lISaMONkOD/aVY7MIDQ4QIzKA0NAggZSRgYIgQgSeAR5YiTFhYK7LEu0F + aGgrEcCLWS4yWkt/MUv1FqGpu0iOzUdTZLaGzGGN5fPkvHksk3ot3SVyrqaKpXLNUpEHSw3kGuVaOaaj + vxRjU10cnCwJC/MnIS6C9FQx0tOSyM5IVZGTma4iMz2D9LR00tLSyEgRZyA1iwxBSko6SUkpxCckERuf + QExs3G3Eq4iNE0NbECfHYuMVQlhZ3zeWmMg4kZHxpMUlCcQpiIohOTJy9h+SShmh/Js0Rgz2GOIFsUpU + cEQ0USoRHE94hBjiEYm3CeDZKGCFAI6Nz1GRkJCtIjExV8X/IoH/B+H7M/6dFP6fBHBSyn9GACt1Svpn + hQD+Fwk8SwArmI0ATpP3l/4RZyn5NgGcGp1ISqg4RCFhFEeEURcXwMpcHzaWe7OlxJ3NmdbsTDPnWLYV + j5Y48lSpE7cK7bhV5MAzlR7cbAjgcnsE+xsCWV/iSmeuOx2lcXTX5dPfXMJAcyl9CtHUkE9HZSbtFems + qM1jpLVM7IQa1raUMtSUz8rGfIYaC+mtL6S1KoeasnRxUBMoyI0kO1OcrVQxYhMcxQi1EVgTFyOItSQ2 + xkz2FRLYkJgoPeKjBSoJrEOyQgRLmSZ1CjJiDVRkxhqq6wXnxBkJlFJfRW6CrkBP5qnYM9HLSY/QJiNi + ORnKusHR+hQnzhLAdbcJ4MpEK8rizCmMNFZRFGtBUZwlhYlSJplTkmRGWZKpGgHclG5Ke6Y5XWmmdMfr + sSJGW4x7PdYmGrBR6ramWbAt1ZydyebsS7LiaLINx+OsOBRqxNEgA05LeSHMmEdCDbgaYsj1IEOelPqn + /XR4xkuLW2KfveCuwUuei3ndT2zZCLGJpV/+EG/OBwmWvB9rzjuRRrwaqsutwOU8Kec84aPJk/5aPBOo + yzMhcq9gA56Q8prc/1KYIecijDgRYcaBKCu2R9kyHe3EZJQrE+KIjEV4sy7Si7VR3owmhzCeE8Om0hS2 + NBUz1V3P5pFudk2sYef4mGAj+zdt49C2vRzbdYiT+49z6sAJThw8xrEDhzm89wAH9u5VsXfXbnZu3y7l + Lg7s28vhgwfYv38fu/fsZpfU7dixg127d7Jrzw527t7G9u0zTG/dxOYtU2yaVrCJKQWbp5jatJGNUxNs + nJhgfGKcDQrGNzA6MSZYz/jGMTZOjrNlcoLtk5Psnpxij5y7V8UG9m0cF0dxkgNTkxzavJEj09Mclnvv + kXeaHhlitLuLVe2t9NXV0FJeSGVOGkWpMeQnRomOihAdEK4iNzHsF+TF+1MY50hNggXtSUasTtfj4WZH + Xl/vz0dbgwTe/H6bB+9vd+f9Pd68v9eH3x8M5A+Cj46E8OHhcD44EMNvd8fx2rYUntuSxfUtRVzcXMnB + DaVM9BeIbi1nsKOZlT199PUMUlVTT2JaCsGR/oRHepObFUm9zMOOmjzaq3LpVNasrS2iXkmVnBVHUUYc + FXkpVBWlzxKb5fnqesvF2UnkyvtlJkWTkaggVkVOSgL5/4UATk+a/THl36GQwilybZLI99jIEAL9PMRe + VQhgRzxc7PEU/H8igPs6mxjsbmKgS0rBQFcjI/3tKgGsrK178NAM3T31IhcjCI/yIS4xhEQlA09SCFGx + /kRE+0kZJDogRCWB46Wsq85n/55NPH3jIs899SjPP3mFiw8fZPPEKrrbamiq/v+OAFaif5X1gDtbKli9 + sp31q3vUSOCO1gpaW8pniWBBc1M5jc2y3y7v1FnHCnmPvp4WObeT1YPdDPV3S12LXFOrRvnWVJdTXCh6 + Iz5a7H8/goO8/4MAHhrsoae7labmGopLcgiL8MfNwx4HZytc3O0Fjup6+lZ2ZlhYmYofY42NnQO2Do7Y + OTlha++EjcDO0QULa1vxiSwxMrVQYW5pg4ePH3EpaZRUVtPa3cvAyFqG1qynp3+I6vpmEkUHBwSH4urp + ha2TA/byLW2d7LCwMxe/yESN/P2fBLC5bwBucRlElLQSWbmS0IrVgrUqCRxePER6/Shta/Yzuf8q43uv + smbXI7RvOERe5yTBRb0EFfcTWrKS4MI+QnL7iS0cIad6AyUNY5TVr6K0rp/yuh5Ka1rJKiiXttfR2tPL + 4Jo1DK1bw8DqYVaPjbFZ5MnBY8c5duo0e0XWTIjcWL1uNWvXr2HD5HomNm1gbGJU6kZYuWqA/pW99K3s + lnIWK0d6GRldKfcalnJAIM9Y207vUDPt/fXUdFVT3FRJUXMdpR2tlPd0UdHXS/XAAPWrVtO4fpTWzZvo + 27eb4RNHVQwePULfocOsFNk4cvAoo4ePs/7AEdbv2s/ozv2s3b6boc1bWTk9w5jIzqkjx5mU89btPciq + XYfp23KIhnW7qVi9h7qJk7TMXKFx5jFqpq9Su+VRGqbPU7fhINUj0xS29xGRnoJfqBdePlZ4exjiI3an + n9dysWmXExIoejRJdFqhM+Xl7hRJmZEmfqXou7BQQ7F/RP/G25CV7UFunq/6J+z0dE9VX2ekuYsN50x6 + iqPYZ/Zki87MzXYgL1vs3xxb0e2OFOWIHZzvRF2pF231gXQ2hdBU40Npvpwr+rKowIaKUkeqK1yoV4jg + +mB6e1IZHi5l3VgL6yb62LBZZPm2LWzYtYcN+w6xdt8RBncfpGfbHrq2CrYdoHv7Ybq2H6Fz5jQrdl9n + 4tyvOXTzU07d/ICDp2+JbthLb+cQnZWVtGWG05noRqf4Rx2h9vSGOjIQIhDfuyvYnirxkwsinMiMcCY1 + 0pWC1FBpfwYt9cUyX0tp7Whk45ZJLj12mXfef4c///XPfPLlZ/zmw/d58e03OP/EdXacfJj1ew4xvPMw + G45dZtOFp9l85QXGL95i7dkbjBy/zIq9x1kh33xo9z56Rfd0i97pHl3L6k2TrBM9tGbTFCvH1lPWUEOM + 2MmeQb44eDphZGssMMBMyVbmZoaDl8gB+bYuPpYCc9wU+IoPIz6Qu58xnv6m+AVbiH6wJTTGRuxYG0Ii + rMTutxJb1krmvgPpWfLtS/yorg6jpTmOrq4MGf/lDI13MLprnOmHj7Dt0iNsefRxNlx8nPXnb7Dh3A0m + zjzJ9IVn5dgLbDh+nbbJAyRWdRGaU0l6bTOdoxsY372bPadPcPD8w+w7dYJp+XZTMweZnD7A+NQ+tmw/ + yrbdJ9i68xhbdhxheruM+Zk9gt1Sf5hDx89z9NQljjx8WXCJPUqK0l1HGB7fSs/qCdpXbqBrZJK+dVvp + HZ2hbXicpr4R6pRouPZOWtvbaBd92SHfra29ltbWSlrFbm0VW6azqYDBtkLWdhcx2VfErqFCTq/P4cpY + GjfG4nl2NIpXR4P59To/3h/15sNRHz4e8+fzjaF8PR3JV5si+PNUEF9M+fD5pDefTHrxwYQPvx3z4+UR + L57oceF8qwOnxAY43uTIkUZnDjU5c7DBQSWADzW7crDFjT31DmwuM2O8yIiJImM2l1uztcaFbfU+bKkJ + YEOJL+vyvRjJ9qQz3p66MEuKA01I9zMkQfzgKH9zAr1MxJfV/4UAVjJhBfiaq/DxMFbrHZy0cXTVxs1L + /EY/A/GfDUgNNaEkypymRBtWyNxfk2XDujQT1sUvZ03kYtaFz2U84kGm4x5iJmkB21KWsCVtKZvSlzOR + oc2GbD025BsyXmbKZI0VY4KVJUZ05CynNnkhFTFzKYt5iPLY+VTELpByIaXxCylPWCw2tobYz5pqtGxd + 6mzUbJ3sK6RpgzyjIXUpTVJ2ZGvTk6+jojNHW+6tTZvcvzFrOZVyTmHcErIjF5EatIB4n4eI9XqIOM95 + xHktJMFLQyWAI9wWE2A/H1+7efg5LFCXvPN2mvsLvBxn10X2cpiFt+P82/vz8bF/CF+HB/G1vw9/u3tU + AjjQ9g6VAE7wvJ90/7nkhi6iIFJD+lKTkuglFEfJdvQiyuMWUZe4lJa05bSla9GSpElTvAZN8v4tCqQP + OuWYAiU6eDDHiOF8c0YKbRgSP2yk3IuOAjdKk6xJCzcl0s8Ifzc9XGy0sDNbipOVHp4OZlJnS5CXAwFe + jrg5W2Bloa1GAZsqv1maL8dBZIazowlO9qYqCWxppo25ifIHdH1cpM7dxRIvd9ERnpYydowI8NAhVHyO + SJcHSXW5h1LvB+iLWc6OYgeOVbhyrNiegxmG7I5fzI7w+9gd9isORN/Fw5kP8mipBlfLlnCtVJPrFcu5 + XimoWs4T1cr6u0t5pGgxJ9Lu51D8PRxNfJCz2Uu5WKjPlTJzzpZYcCDLkI0xSxjwf5BqmzsoMJ5Dnskc + Sq3nUOk4hxqXObR6z6En6E6Gou5jOOZBVkU/xJCM066gX9Ekx+pc59Ak560OmcPmuLvYHn+H+F53iO91 + B6fT7uRCzn1czJvLw1kPcDDhLraF36GSwDsi7uJQ0j2cy53HzVot3ug15Tcjlry6Qocnau/n0Yq7eKz+ + fp7u0uDZPm2e7tXhqT49nh024/nV5lzpXMaBknvYlDqHieQ5TGXOYUvWnWwveIA9JYs4VmPA+XZ7LraJ + TKi2Yn+xIXsLtTlRbcajve48vzGaF6ZF9mxO5NZUCs9OpvLseAa3NmTzzPp0bq5P4NHVcZwdTuFAXyZr + q+NpzY6lKD6ShKAgYkMUAlTs+dwS0bNl1Fc1ip27gjUjCgG8lf2ibw7vP8SJw0c4JrbIkcNHxQ87ouKg + 2CXTW7cxsnod3X39tHb2UNfUSV3rCura+mjqGqahczW1baupaV9DTdvaWbSOqqhuWU9t6yTVzeOyvYGa + lnXUtayhsXWElvYRmlr7qKxsoqysVuyNeqqrGqiraKCmtE5FdUmt+CJVVBVWqKgsUMoqagqqqM4vpzKv + jHJ5r5KcYkEBJdl5glwKc3LF1sijIDtDkEl5YYGKguxsCnKyKc6Xc/KyxDbJIC8rRWyPZPGTEtVMRvkZ + ieSliq8TH056bCipsWGkxsi29GdxZio9jQ1Mii03sWotnWIPl2TmUZSeQ21xBSuau+ht6aFJ+jg3NYfY + 0FhSYpJJjUtVkRafTnpCBslKZrboBCJCo3F388HExBqt5Ybo6Jrg7OKjBhnExWcQG5cmPkwyEVGziFQQ + 8S9EhCUSGabcJ1ZFeEg0EcFRhAf9jAjZjyRCxkCkkjkvJJyokAjZVspwYoLDSYwUHy8+kdKsXLoamtm1 + aSvnj53k+oXL3HjkKs9df5IXbj7N8zcETzzNSzee4dWnnuXtF17kNy+/ynuvvsJvXxG8+pKK37z6Au++ + +pzgWX77xst8+fmH/P3rz/jbl5/w5Wd/5P133+LZZ25wXeyl5555knfffpPPPvojX33xhRz/jL9+8SX/ + /PKvgr/xz6/+xj/+8jf+/lfZ/vs/+Paf36hE8Y/ffoOS/vmn75W1iBXS+O/88I8/y/mf8ukf3uXX8vxn + HrvIxSN72LZuBatbi+kujhVdEUxnhq/IVD/Wl4QyVRXFTF0cO2qi2VERwfbSIPZXhnCuLZ4rXUlcbIri + 4cogTpcFc7Y0mPNyzeWiMK4URQiiuFIYwfn8CE5kh7Avw090oRdTiV5MJHqzQTCW5MlYggfrEz0Yu40N + 8V6zkHoF6+PcWCcYinGhP8aVrmgP2gUt0d40xnrREOdOeYQDWX7mJLkbEe6gT5C9If4Opvg4W+PmaIml + hchvkdvOTlYqARwfGy7jI1AlgJWo38Uac1USeJYIVgjhBf+CxqJfsHjxIhYtWoSRkdG/UkA/XLSc82V6 + XKoy5rEGM262WvNUhy1PtdnzTKcjL4uQerXfg1d73Xipy4lnm2x4qtacJ8oNuV6iy5PlOrzUaMA77Yb8 + YYURH3br8If2JfyxU0OwhI+7lvGJ1CkE8Cc9Rnzea8aXg9b8bbUD36xz5bt1bnw9aMdn3RZ83G7K7+p0 + eKdyGW+Wa/FKiSYvFGjwfO4SFS/lLuN1wWtZS3kpbQG3Eu7nZsxd3Eq8h5eyFvBOsRbvlWnzbpEmvyla + wnulAlE+vy9dzB9rlvJh4zLer1/K2zWLebViAc+XzePpkgd5LO9enii6n5frNPl4pTV/XufEJ8NW/Lpd + i7ebFvF+x1I+7dfniyFDPuvV5cPOpfyuReqbFvCpvN8sAazJJ6IkPmhfyB+l/GJQi7+u0uOncXOYUGAK + k1JusoTNFnw7aczfx/T456gO34xp892UAd9uNeH7fVZ8c9j23whgwQEl2teBH7bbCewFDvy0zYkftzrx + j0lH/jxqzx/XOPDuKlee63fhcLEeq8IfoNn7Xirc5lLkpkG2+7JfCOAYL03C3OfjYn0H1uZzsLeag5vd + fQS4LlJTQKeF21CdEcRgfTZjXZWsbCygIkPJz2+Pq9VydS0KE/2FgsUY6S/ByGCJSv6aGi1XCWAHWxMc + bP4bAbwA7WXz1NLYQFOtt7LSEQPWVCVDY2M8RDB6kCQTLTs3kOLicCor4mhqSKe5IYvSong1StjWSgsb + i2U4ipFjY6GHmbGWDOplGIuRo0T7WtibYGxjiKGlHgaWuhhZ6GB0mwA2MNXCRFnj9jYB7CIGkLO7BXbO + xtg4GGBtb4SlHFPOUa6xsNLFzkEMajcrPL3t8fV3xC/QiaBQN5UAVtYAdvMQA8xOF1NzTUzNNLC1E6Pb + 3RRvcdK83JXoWsVYN1dTLVuYLcHMZJFsG4qAdyExwYcQcUSdHXVVskqJXlTIX0e7ZdhbL8FVtn08jNSU + 0EokcFy4M/GRLrMQpzVeHNufkRTjLMrHg2QROHFyPCbMkdBAO7zl+S4OumL46amk738SwCZiBCpkmC1+ + 3rZY2+hiaLgYA/35GBgsEINSA3Mllcx/IYBDzXVIsDUiRQzKJBFY8Q7inNjpE2Ktja/c381gMU5aD+Gp + vYDI2wRwkZ0hZda6lJovpdhsIQ3u2owkOrBVBPOullh2inAeLfejKc6UbOeHSNIWY3CZGHjadzNgNJ9D + 7pZcD3TnjahAfp8QwvtRXrwWYMOzPvpc91jCYz4LuOr/ADdiFvJaoS4fi1z5Sgy6f66z4ocxK9hgwY8b + DGVe6vPDxHJ+3KzDT9sN+GGfKd8fl3Mecea76658c8uD71724afX/PjhdV9+et0bXveCNzzhTU9+FKjb + r3nAK4JbjnDDgR8vi+yQOfzCGgPO1WqyKf5+Ot3nUCzGbIrpHSRZ3E28yZ3EyXulyXuVStlm/CDDDlqM + iQIYddFnlYyfAculdJktptVCgxZ7Ldpc9WlxN6TW1YByOafASYdC2S8W578s0IqqcHEUo12pDHUgUcZO + sMEDBOrdRZT5nZQGzGVNsQEnR2x47agrn95w5tvXpb3vOcOv7eU9bOEFM3hMl2/O6PDJQV3enDHk5qg5 + RzosWV1gRG7gXILt7yLY9SGCXB4Q+fErYn3vpCpLi5l1Ydy61srnv9/C9389Igr7uCjuE/DdUb7/x36+ + +/tevvnbTr79y06+/mSTKPBeHjtfwq7xKNpK7Enx0yRcHLBoV2m3vKu7mSau5stwkXnuab8cPzddQv2M + CQ80/TcCWBxeQYg4wyH+FgSIA6wSwNIvztKXjrZKKuil6pxSUkAr6dV/JoA9Bcrav0r0r7ur8m9pcYqU + P10IvMV5DvK3IjbclbQEXwoyQijJCqc0W5AZRmFqALmJPmSKrJolgG0pSHCgMtOThgJ/arO9yI22IjXY + iPQwE9XhjhHHPcB5Oc5WS9TIZEOjhegZL0ZH5pW+lHomi6XuNlQieInIKQ30TOejY/SQSgKbWizGxlYH + L09rgnxdiAz0JiE8hOSYCBIEcVHhhAcHEhYYMAtxDsJCQggLDSY0VOojZTsqmKCwANx8XTG3NUPXRAeN + 5fNZvHyeSvouF1mupa+hksFLdMRoUMnfeSxa8iALl85l0bK5LNNeJFDOWaJCU4UYFzpieAg0teV9jLSw + tDbC3cOOBDG0M9LjyclIIleQn51Gfo4Y7jmZapmTmUVWZgbZmZlkZ2STL4ZqTmaO1GWTkZFOUmIi8fFx + xMXGqoiNjVERFyf7cXFyLF6QQHxcPLGRsSIXY0iJjSczIUmQoP77UVkfJkWQHCkIjyBJjOXZlEKRxIWJ + XpO66PAoMapiCI+IJTQiXiWAI2LSCI9OJ0ohgBPE4L9N8iYm5pCUlKfiP0hgqf9v5K+C/5MAVrdnCeCU + NNn+hQDO/V8EcEpq5v8ggFN/IYCT41JIiUwgOSiETPn2ZZGhtCQGMlrsx45ab/ZVurEn14pDmSacyzHn + SZl3L5Xa8UqBJS8XWPNCuTPP1HnzaHMAB6rFwM13oDvDiY7CSHqqsxloKGS4pZiVTQX014szUZ5GR1ky + vVUZrG4qZKKjnIm2UkZbC1nTUsjqlhIGm0rVaOHGqiyq5dySwmjyRK9nylxJSRHdl2gv/WYnOlDGSYKN + 6H5z+aam/0YA6wt0ZyOBo/VIFqTG6KtIjzVUkSHIUkjgOGN1zeBMhfBVsVyOacu3X05a1HJSIsSuuU0A + KxHDxYlmVKZaU5c1SwBXJFpTFmdBQaSRCoX8LY63ojjZmtJUKyrSBCnm1KQY05hqQlu6Ge1JhrTLvXsi + ljIYuZxRee4mqZtJMmJHggF74ww5FGvK6XgLzsVacCbcmAuhhjwSos+VYH0eDdbl8RBdngjS4WkFvprc + dF3Ak67zeN59Aa/4LOKdYE1+L+39g7zjB3FG/DHelA9ijPlthC5vhyzjJb8l3PIWW9h7MS8FaPF6qD6v + hxvwktz/VqAOT/hrcVXqLwYt5+FgPQ6FGrBTZNLWMEs2h9qwKcSeyRAHxkVvjAlGo1xZH+/J+mR/1ufF + MFKRyZq2ajat7GXryBDbVo+yZ2yaI1v3cXr3cc4eOsO5I+fFqTzHueNnOHPsNA8fP8mZE6c4deQ4xw8e + 4fTRE5w7eZILDz/MmVOnOXXsBCeOHufoocMcOXxQcIhDhw6wb98edu/Zye5dO9mlYOcOdu7cyY7t29k+ + s4VtWzazZdNmpgWbb2Nq80Y2bZ5iZus0u2Zm2D+znUNbt3Ns205OyLaKbTOc2C7YtpWT27dxSu57Wu57 + ZvcutTy8eTO7169nx7q1bBkeZrSnk+7aCuryMylJjac4NZbi9DgVJRnxKkozE6jIjKQ625PmHDt6ss1Y + m6vHiSYrXlrjzoebvfjDJhfe2ezMm9OCGTfe2O7Omzt9eGuXL+/sCeCdvSG8uzuGN3ck8sKWVJ7anMuj + m0o5s7GavaMVrO8tZqCtgv72Fvq7++jtHqSqup7E1BSCIwIIj/ImMz2C6pIUWiqyaCxNp6Usm46q/P8g + gMtyk6ksTKO2LIfa0lwqCjMoykqcJYATo1VkJMSQER9NTnI8+enJFOWkU1GUS3lhFnkZs2sFK2mfVeJX + IYCVSGDZT4wT3RMdQpToFX9vVzxcnAQOAjsVvxDAIu8bq8poa6iko7kGZQ3g/s4mhnpaGFrRqpYru5sZ + GWiXb72BM2cOceDQNnp6m8gtENmWEUN8Sjghkd74hrjh6e+El58ToZF+xCWEi0yMENkYRV1NAft2T3Hz + sbMqbjwq4/HIDiZGB+lsrpI2FPxXAlglgUszqav4FwGsoLWhhIGeBjX6t7erjrbmMlpErilole3m5nKa + 26ro7m5Qo4C7Oxro6WxkqLedkf5OBlZ0/EIA19dViD9TQn6u6JPoCAL9ff4XAdzf20G3nN/SWkN5RT7R + scG4ezpg62imksDObnY4uNhg42iBjb0lDk6OuLh54OruIaU7Ti6uUueCk7MrNnb2mFtaY2ZhpZYKHOR4 + aGQUGTm5lFXVUtespFdfQWvnCiqq61TdEhAcgpuXl/hHs+Svlb0VppYm4kcZYiz+nEoAWxphaG2KsZxj + 6R+MR1IO0RWdRFatJLRytWAtoeWrCCnsJ7l6FU0ju1m/+xE27H2UtbseoWPsEPmdk4SVDhBcMqgSwMq5 + 4fmDxBevIr9ugrLGDZTWjlBU2U1xZTuFFY2kZheRXyLfsa1LXQu4b9UwPUMDDK1dy8atWzlw9BhHT536 + hQBWsgUMrVrJ2tHVrNuwRiV/B4f76envokv6unewSyV/BxQCeFWfSgAPru6lvbeZ5q4aakSXldfnUFiV + TmpxMrE5ccTkpJBQJLq6rIDU6lIyayvJbWmgoLOFkoEV1K6X9928gbaZjbRunaJlehPtmzfRJfKqZ2oz + vVOb6J/YyICgd4Oct2oVrWtWMbBpilUin1ZOb5H+maRpzQSVg+PktK8jrWOCgpW7KV13nMLRU+SsOUGe + oGjVQfL7tpDVuoqUqiaCkxPwCvEQX9UKb2/xQb30xc7VxtNzGb5Khq9o0ZM5thSXuFJU5Ep+vhvJKYqd + Zi12lPiXoouzc7zkWBAFhYFij7iKbnYiOcmZpAR7sTVsSU2yJTNNzsu0F7vOirwsC7HlbCjKlvvm2lFZ + 4ERjpSdt9b6i951FfpiRlqQr54teLbASO0D0aoENZcVOMofEvujOoH+glIHhRun7boak/4YmNrBy0yZW + bJyibXxcjZxt3jBF88QWmie30TS5g4aJg3Ruf5zRE79m55U/su/Su8wcvMGa0T0yV1fRU1tLV14cven+ + 9CZ4sSLKjYEod4YjPRgJd6c30p3aWE+KEn3FpvclJymQ8vxEWmuL6Witoqmxgta2OiYmxzh34Ryvvv4K + H3/8Rz77/BM++eIT3v/oA5588WWOXbrK9JFTrN19lI3Hr7L9yvPsfuItdgi2PfEGm68+z/qzV1l34hyT + J8+wes8++kXnrJBvv06+9eiWrazdPM3Q2DgldfWEiH1r7+GGpbOdzDETjG1NMHcyw8bdQuqtcPCQee9p + IaUp9uIz2nuID+NjirufGd5BlgSE2RAaLb5/rL3Yr/Yy32U/yppw5c92KY6kZbqKTPWgtMSXmqoAmurC + RJ4l0tadx8BoJ+N7N7Hl9FFmHrnI+NlHGHv4iuAqE6ceY/PZJ5k5/zTrDz9K6/geEio7CMwoJkL5kb61 + k0H5VjMH97H31DF2HTvC6NSMzE0Z9wPjdPeNyRzcydjGPawb38XaDdsYWjPJShnnq0anmJjeyZGTFzh9 + 4RpnLj/B2StPcvzC4+w49DDrNu+if3Qz3as2zmLNZjpXbaKqfSUljR0U1TRTVFVNWUU55eXFImcLqSgX + /VWWSWVpGtWlqdSXJ9FRkyJ2aTpr21LZ0p3G8ZFMLq5O5epwDE8Oh/P8cACvD/nw9rAHvxG8v8qbj8aC + +HxjOJ9PhfPFVLCUvrLvy6cb/fjjhB+/GfXhxZUeXO904lyLHSca7TjSYM/hBkcONTn+QgAfbnHjULs7 + +5ucmam0YqrUjC3lVmKfu7C7yYc9LSFsqQlmrMRffG4/Vmb70JbgTHWENYVBMof8jYkPMCMqwJJAbxM8 + xP93U1NA6+PrafqfBLCrnugAHZyU9YF9xf8MNCYqxJiUMFMKo8ypE3u3O82W0TwnNubZsTnbnM1phkwn + L2c6cYnYsIvZlqLBtjQttqRrszFDl4kcA/ELjBkrMmVdmdg7lRYMlprSnqtDQ/oyKuIXUBI1l6KIBymJ + mK+iKGohBdELKYpdTEmcBmUJmpQnLKUycZm6XRa3mPJ4DaoSNalMWEJ1kgYNactoztaiPU9HoEtrjrbY + WNrUZ2mLza5FUbwmOZGLSQ9ZSJLfPBJ955Pos0CwiAQfDaI8FhHhtohAh3n42s7Fz34Bvg5z8XZ8SKCU + c/GSfS/7eXg7zFehEsH2c/G0m4en7YN42dyHj829+NnePUsAW99BkN0cYt3uJcXnQTIDF8ySwGEaFIQr + 5WIp5T3D51MRtZhaebeGJE3q5f3qYhZSFzufekFD3AJakzVpEShrGvdm6jOUa8aw+GDDJc6sqvKlq8iT + ilQ78VXMifA1wM9FB2erpdiaaOBooY2HnYnUWRHoZSfjwAlPN2vslN89zZdjbamDva0Bbs5meLhaSCmy + Qs63sdSTY8pvgKIT3Gzw83Yk0M+RgAAHgRUh/iZE+usQ5bWQVM+HKAtYQG+8HptybdlbLGO4yI59GeLX + xC9ma8g9zATdwfaQORxLuZfLJRo8WraER0s1uVqhxbWK5VIu42qVFo9WLOVCkQbH0+/nYMK9HEl+iDM5 + y6TOgEvlFpwtsWS/6IWN0ZoM+D1Erd2dFJnModB8DlX2d1DnegeNHnPo8LuD3uA7GY65j9Xxc1kTO5fV + 0XNZGf6Amgq6x/cO+rzmsCF0DtvjfsXexLs4nHwXp1J/xfnMe3mseAE3pC0KUX06+yF1HeCdkXewP/4e + 2Z+nktWvdZnwzoA5v15pysudy7hefQ9XK+/iiaaHeHbFUl4Y1OO5QQNurTTixTVWvLjWmkc7tdhXfA8b + 4uewNmYO48lzmEybw3TWvewsmM+Jan0eabPhcqstJytNOFCow768pbJtxNUVLjw3HsazU9E8PRnLk+Px + PLU+gafWJXJzdTI3VyVwbSSCs31BHO4IY7ohnLY0DwrDXIjxsMfXzppQb1+x31PFfi0T27aOntYuVg8O + MyX2w66tO9grvs7e7Qq2s3O74kMJtm5hl9QpvtVG0bHDq1azYmCQ9u4VNLR0UtfSTWVDJ1WNKyhv6FP/ + gFdSPyC6aZBiBbUrBYMUVYvsrV0tcne12EfDgn6Kq1ZQWtkltmUn5VVt1NZ10tzSQ1fXICt6h+lfMURv + x4CKnvZ+ult76JbnKehq7qKneQW9ghXN3fQ0ddEt6BD53t7YKrZ4E611DTTW1tNYU0d9dbWghvamZtqa + mqiT7RqlrlbKqkrRAWVUlZWI/Bd9UF4oOqCQyhLxfwqUP8Cmig+kZEFKVLMe5aQmUqL4KKI/VnZ10tva + TnluIRlxKWIXpFFXUqGm3F7TJ3aFtLU8v0wlfAsyCsRXKp5FbgnFeYp9X0hWRi5JiWn4+ARiamaL5jI9 + lmkZ4OLqS1JyNjm5ZYJS0cWFpGUpKCIjs4j09GIVaWmClALSUvNITc0VHyGb5MRMkuMzSIpLJzE2jQRp + W2J8qoqkhDQ5nkq6tHUW6WTI87OTM8lPzaEiv5SO+lYmVon/vnkHR3cf5Njuw5w5LL664Pi+IxzZtZ+j + O/Zzcu8hLp08xWPnznPj/HmeOHuWJ86dUfHYhdM8fuEkj50/wROXzvD6i0/z27de5v23X+HdN1/ihVs3 + uXLxDBfPnODGY1d46dlnpP4N3nvnHd59401+9/a7fPTbP/Dxbz/g4999wB9/9wf++IcP+OiDD/ns40/4 + 8vPP+MufvuBvf/6cf3z9Z77765f888+f8eXHv+eP773FK7ee4Jo8/8jOTUwNr6CnOpfmvGjq0/xpSfOm + O8NHZGkAk5WRzDTEs0vsml11seysimB7SSB7ywI53RTDxfZEHm6I4FhFIIdLAzlWGsTxkhBOFYZyujCM + M0VRUkZyJCeM3RlBTKf6sCHZk7ViR65O8GYk0ZtViZ6sihckeLAm3oO1cZ6si/NiXawXo2JXjsZKXay7 + yCp3Vsa40RfjTmeMF22C5hgfGuXc+jgPyiIcVQI4UfR5sJ0OvjZ6eNka4Sk+nsv/IoDdiIsJIzJcIYBN + /xcBrKG5UPbn34YcWyz7t6Gs/7tw4UIMDf9tDeDThcs4X6bLpSpDHm805ekOG2512/NstwPPr3Di9ZWe + vDHkxev9nrzSLQKryYanqy24WWrME0V6PFmmzUv1BrzTqs97nXq8376M95oX8kH7IoEGf+xaxscqAWzE + J91GfNpjxp/6rfh62IF/rHHlW8FXA/Z82mnJH1tN+bVC/BYu4qW8xTyfu4hnMhfydMZiFc9maPCSgjQN + nk+ezzPxD/BE9F08nXQvr+Qs4jel2vyuSpfflCzjtyWa/F6U0AeV8vy62fV/P2nT5YMWHX7TsJQ3a5bw + SvUiXqhSFrJ/gOsF9/Bs5TzekzZ+tNKS3/ca8WrDQl6qup+3G+bzxx4tPu3X45MeuUeHQgBr8H7jIj7t + mk39/GnXEj6Sd36/ZZ5KAH85rMM/Ro35acoKJi1hoxL5K9vTgtsE8D/HDPjnWm2+Wb9c9vX452ZDvt1j + wT8P2fDNCWd+OKkQwO6zBPBuR5UA/m6rPd/NOPDDVie+3eTEV2OOfLrKnvelP98aduPZfg8OlZowGDaX + Kpe7yXd4kBznRWS4zkYAR7ssFiNpmSj6Rbjb/gpbyztwEOPG1fY+fJ0WEuK2jIQgc4qTvOiuSGW0s4JV + rSU0FMSTGukp5xhjb6aJpbESGbpUoKUSueYmOliY6qopoO3EaXGwMUGJAra1MsDCbDkmt9egUNYL1tdb + iKmREqEnBou1Nu7iyESEOYkD6kV0jCi3OBeSUj1JTfchPdOf/IIIQTQpKYF4+VqpRIitjRLpZ4SV8oOE + iRaGRsswlHaYWOljJpNH30IPXTMd9M21MTRXCGApbxPASjSwEulr62Q6SwB7iGPlIm11MsLW0UQlgc2s + dFUS2EwMKivlXDtjHJ3NcRXny8vHjoBgF5UEVtM/OxtjZiHPN16EsckibG3FSPM0x8/fFn8fa3HALdUU + y67SdwoBbGm+BHdXMcgjXMWx9iMi3FklomysNXGyX46bix4uDtrY22jiLPtKSp9APwtCA22ICrUnOtSB + mFAnleCNFeERGzmLhOjbBLAgQZzduEhnIuW8AB95vqsRbk4GYhzqYm3xrxTQCgHs42VNoL+9Cjs7A5UA + 1tGdi67ePEwUAlhNA/3fIoAVAtiYZAdTkhxNSZC+ixbjM0y+aaDlcryN5D21xchWCWAtUuSbFMjxQisd + 8k2XkGsynypXLfpjbdhYGsCOpmh2tsUyVuFDc7yxjN0HyNScQ5nGHNqW3cM6g/mc97bllQhfPk6O5G85 + CXydFsLHce78NspKjYh6IWwJz0Yt4JU0Td6vnF1P/KtBY/6+ykRkjQk/rjPhh3V6/LRWlx/WL+PHyeX8 + NK3PD7uM+e6QBd+fc+S7q65886Qb3z7nyQ8vevP9S178+LIXvOIJryqkr2y/rpQChfx9WVk32BGedIBr + Lvz5mC1vTJiI0afFjvS59HjfQbHtHFLM7yDJ6l4SzH9Fot4c0pfKuy0X49b4QdY4aTMpTtwGGQdr7XUZ + tl7OCnNN2sXwb3HUocXNgGY3I2pcDCh10iffSfpQnL98T0MKvM0oCbSmPMSB0iA74m2XEWTwIP56dxNp + cTc53g/QJf2xo9OQmztsee+SA395Qdr7rotAZItCAL8o8um6Ad+dM+CLw4b8ersZz2yw5niXLetKzCgO + X0yE832Euc0n2HWulPeSFHAfXeXmHN2SxDvP9fHtn3fDd0fge8GPR6U8yHf/3Mm3/9gm5RZ++OdWvv3L + Jj7/wzBvP9/MlaP5bOj0F6dRlxjnuUQ6LCbUXgsPs6W4yDx1sViOu91yfFy0CfIxJCTAhPAQS0KDLX4h + gMODlVTNtoQGWODvaYy7iz6uMndcHMQBttcW+bBExvvsGsA/p4BWSWAplehfpU4hhx3kuc5OujLPrIkO + dxEDyp/C7Egqi2LFuI6npiiOyvwoitODyE30IkMUenqkg0oAFyY5UZvrQ2tZCE35/hTE25IWakRqiCGJ + gUZEeOvh47gUB4tFIvfmqX+s0FUJ4CX/IoBlnv17BLD+7QhgXaO56BnPE5m1GCuZV26uytrgLoQF+BAX + HkayKPKEmGjioiKJCA4lLDBoFkEhhIXIfugsCRwRGUZYVAiBof4i85wxsTRGS38pi5bNF8xjic4Clukv + vk0AL2HJcjEY5NhCzbksWPwg85dIKduaWgsEi9DU0WCJ9mKW6GqiIXJ9ocj1RVrz5dhC9EQW24jT6evr + JEZsNFmZcWRImZ4s22kKGZxIXlYyednJZKenkSXIzkxXSeCCnBzyc7IpzM+nID+P5GQlZbS8Y1y0GjUV + HxulQt2Pi1HTSSfGx5McF09STBypsTHkJCZSmJIskOckRJEbH0F2XBiZMSHiVIeSFhZCangoyeEhJMh2 + fFgoseHhIo+lDyOiCYuIJSw6mcho5R+aaUTFZhCboJDAWSrRq5C+Scl5Kv6TAP7fxO/P+L8I4Nntnwlg + pW52TeD/iwBOTv2fBHCqSgAniTOQHC79ERBAZqA/FVGhdKUGs6ncl8ONHpyqc+Z4oRkPZ+vzWJ44sMUW + vFlszluy/UaeKa+U2PJ8tRuP1XpypMSFTRnWDKXY058fwmBlKiO1WaxpyGZVfSZDtWkMVCTRVxbPSE0S + Y83pbGrPFRQwIVjfVsi61jJGWsrEmSumrS6HerlHRUksRYUh5OZ6k5nhJk6N6KtEB9GBduIs2Yr+t/i/ + CeCY/0IAx8wSwGoUsOiL7Dgj2daTualNWtQyUiKXkh61nLRIHZUAVqOAVQLY8DYBbENDjhP1mU5UJNtQ + EmtBfoQReZFGFCoEcIJC/tpSnm5HVYatnG9BbaoJjclGtKaY0BqnR0uYJitClzAUvpTxaB22xumzU+r3 + xehwRNp9Mlyf85HGXI4y5kqYIddCpf+DdHg8UFvFzSAtbgYu4xkpn/HV4LrTA9xwup/n3B/iNb+F/Fbu + +2Gs7izidEXXGfJHef/fh2vxbrAGr/gs4AXvubzou5C3QrR4L9JQYMDbIXq84q/Fk54Lecx7IZd9F3PB + T5OTAcs5GKjDnkB9dvgbCsyYCTBnOtCcTYGWTIRYMxFux3iUC6OJvgxmRtNfIt+9tkK+fz3rmjtEZg+y + dWSCveM7OLB1Pwe3H+LwzsMc3n2Io+JIHj9whJOHjnJ8/yGO7N0v5WFOHT7M6WPHOHnkKEcPSP3+g+zf + s5d9e3axZ89uwS52K9HAu3epP0zs3LmdHdtm2DGzjW1btrJ1aorpyUmmNkyomNgwzpSSdnrjOJvl2JbN + m9i5ZcssATyzg2Pbd3JMyuPbtgu2cWyHYPtWjkt5VO6r4JQ859y+vYJ9PCxtOCZ1h6en2bF+lNG+bvoa + a2gszqa2IIO6oixBNo0lOTSV5tFSUUh7VSbdtZEM1HqzutKeyTITjjaZ8eyIA7+bdOF3E/ZiB9jz8kZH + Xppy4vlNztza5CJw59YWL16YCeDlrdG8uDWZp6fSuD5VwCMbyzk5UcOu1VWs6ymlr6WS3l8I4AGqqupI + TEkhJCKIiChl/dgwKoqSaCxPp7YwmYaidFoVEvPfCODS7ETKC9LUyN8qeY+y/DQKVQJY5HKCQgBHCWLJ + TIghV4kAvk0AlxfmqASw8s/5rJRYNeWzSgCLPJ1NBx1BvDijUdIWJfuEr+iVWfL3XwSwr4czMeH/WgNY + JYCbqv+DAB5WyN+eZjUSeKi/jW0zY5w+I+Pj0Db6hzqorCumoFzkX3Y83kGuOHrZYit60N7VmuAIf+KS + pF3pMWSJPdjcVMbeXRt59OIxLp07zIXT+zi4c5I1Q12zawCX5VIj31Ahf2tLFUI8SyXHKwpTRden/wcB + rJSNNQVqFHB3WzXNDeIH1RbSVFdEizxHiQRua6+mo7ue/r4W+gQK+atg5Yo2NQp4oPc/CeDSkgJyMtOI + Fn0c4O/9CwFcV1tG34p2enva6O5sprWtlqqaQtEFkfgFuOHoIn6Kmw3uXk64eDhg76yQubZ4envhL/pe + gY9fAG4eHji5OOPi6oq9owO29mLTOypRw07YOjhg5+SIr3+A6LJEsvLyKS6voK6xlZaObqrrGsjIziVS + 7Akf0SEunq7YOtthZm2Goak++ma6s76UpR7GluInWJti5OyEdWAY3mn5RFV2EVE9SGjlyCwJXD5MUH4P + CZUraRjeweiu/4ezvwzXq8i2vnFOnxYgbtvd3d3d3d3d3d3dkuzsuAtRCBIsuLu7N3QDbdCu/N651g6c + 7vM87/WXD+Oq5VKratYc97jnrGssnbzOrCIAz59ZF4ArhggtGySsbEgVgGNKxkirnKGkeTdVrctUNkxS + VtNHeW03pTWtZBWUU1JZT2vXAEOTU2oU8ODkBBPz8+yVfn7u8mUu33knp247x+59q4yMjaoi8PTsFNPz + U2pq+eHxQVUAVjAyMcC4mgJ6kImZYTX6t3+0h3rpd6U1eWQXJ5FWEENCtvhSqcEEJgQQmBhGaFoM4dK3 + ovPSiC/MJFnaVVp1MRmNleR2NlIg7blstJsKuX7VuPTbsWFqR4eoHRqkfmiARkHLyCCNw31UdrdR2dNO + 68QwXbOTNE+MUd7TR15LN8m1nYSXtBFa3kd80wIpnfuJ7zxAVPsaMYL41hVia8eJKG4lNKsEf/GJvMK8 + 8PS1E55qha8yV6i/kSzrSfvQFbthRLqM7YUlrpSUelJZHURhsS85uZ6kZ7iJP+K8Pv+vIgAXSd9KcCZG + fNy4WDsZk23E17SVMdt+PQo4y4HsDAvx38ykTVtQlGNNSb4N5Xl2YmucZcx3l3UrMpL0ZBzfSXqqDgV5 + Zipys+WcXEvqqv1paYqltTWN9s5iOnpr6Bpsp3usn3apt8aRAWqG+qgZkbobG6dmYpaayQUqJxcpnzpM + 6+pDTJ59l9U7P2Xf5TdZOPggo5PHpB/NMNjSxnCl+CvFcYzkRjKcFsxQciAjCYGMxQcymBJCU1Y4lXmx + 8sxxVBQkqf2/R5mPvLtR+ng1Lc1ih2cm1Oipp554nPfffZsvPv+MX//6V3z921/z6jvvc+3xpzl2+73S + tq+w98J1Tlx/hXPPfMSZ5z7hzPMfc+yZd1h76Dn2XHtEnvM+pk+eZWDPKp0zs4wsLDEqGJlbpHdiiryK + anzDw7FxdcXS2QFTe0vMHS2xlv5v52mDvYfVOjwtsPMwxdbVAFs34Tq+wn0CLPGX8Ts4ypHIODciE1yJ + jHUWX9ZBoAjAdjcEYDdy810pLpbvL22gttybuspg6urj6OgvZ2LPCMunD7LvygUWL15h/uKdzF26xuKl + +9h9h7zDHY8yc+Ya7UvHSKvvIyizBD/xQ5MKSukcHWWfjKUnL59XBeDp5X1qStHGthEaWpR06/uYmj/E + 5NwBRqf2SD8eoaVT2n2/9OG5vZyT+9zzwBPc/9hzPPjES9z98LOcvv1+9hw7z+Tuo1JfBxia28/g/AF6 + pvdS1T5IcUMHhdWN5JdXUFRSLD5mPqVi38tKsigvTRO/M5XashSx/UkyZicz1JjCdGsy+7pSuDiazd1j + adw3GMvDgxE8Myxj8lAAbwz78taIN++O+fHRdBCfzYfxxVI4v1wJ5asVJSo4iK/3BPHFchDvz/jx8ogX + j/W4ck+7E7e3OHChxYnzrS4CRQR24YzgtjYPbuv04mybO0drHThYY8uxOidONvlwpj2EM53RrNWFMVcW + zERREMO5AbQlu1MdbU+BcN6MYAsSQ6yJCbUTnmoh/NX03wRgMzX9swJFAFa2ubkbiA03wFv5A3KoGTHh + ZqRGmVMQY05NkjXdGfaslHlxuMqL45WunCx14EShBcdzjTiWo8/RHD0O5xhyINeY3XnGLBWaMS8cYkZ4 + w0SZBcNl5nQUGFCXqUF1yk5KYrdQFLmJwrBbBZsoEOSFbyY3fIv41DsojNlJUdxOiuN2URKvoa4XKAJx + 9DY5dzulsYpIvJ2q5J3UpGvSlKNLqyIuS9kkz1KXqUdlqjYlCZrkR+8kO2w7aUFbSQ3cQqr4yqkBOwUa + xPvsJMZzByGKAGy3QY0C9nfYiK+jgk3rcPhfArAs+9hvwttOYHsLXjY/xdfmJwTY/YRgx58QYv/fhDn9 + iHjPm0n13Ui6/yayg7aQG7KNvNAt5IdulXKrfKfNlERsoVLep0betSZ2G9UxW+QbblJRF7OZ5sSdNMk7 + tqVq0p2ux3COGcMF1oyWuTJeE0B3iQ9VYl8zoywJ99bDx0kTJwvh/8ZbcTDXxM1G7LmTBQGedgT6OOEt + pZOD8vuhgSr+ujiZqeKvt4e1lDa4OVniZG8i+4zxcrVWzwkVnyIsTAlicSckwomIcBtiw02ID9YmM1iD + ymht+tPNmc+15WChIyeK7Dkuz3lQnn0t9KesBt4knOEmTiX8hHuKt/NAhSYPVGpyn5T3V2ip5b1K9K9s + u7NkJ+ezN3Aq5WbOpm/k9jxt7ioz4VqVDXeUKVMSKQKwFiMBm2l1+TEVVjdRaXsTLR4/pifgZnqDfsJQ + 2E8Zjfwp0wkbmEvZwmLSNpaSd0i5k4WEzcxF3cJi2E84EPtTzqRu4HzGLdyedTP35NzKg8VbeLZem5da + jHi2yZAHKzW4s2CrKkrfnruJ65VavNxhyvtDNrw7aMZbg4a81LmLx+p+xqP1P+HJts08f0MAfnnCjBcn + rXhl1o6X5+y53qvH6fKbWUy4icnom1hMuYk9mf/F/tybOVa8lTsajbne5cAjnfbcXW/GxXI9zpdqc6cs + PzrkzrOLITyzFMmTCzE8PhfL49OxPDYhGIvj0dEYro+GcbnLlyMN3swVe1EdYUmqlwlBNtLvzY2I9vel + NCeHrqZmRrp7mZ+YZL/wohNrBzh9RLiVcJ5j+/cJN9rL/tVlVleW2Ld3WbjVGkePHFT/PDs1Oyt2eVr8 + oknxicbp6BmhrqWP6qY+KhoHKK8fpKxxREWpUt4QgkvqRykX/6ykThGARymuHlL/rFdS2UVxRTtlVeLT + tA8xMDTFzOwKi8trLC2usjC9wsLMMnNTy8zKWD4zMadienyWufHFG5hnTrbNT0gpy9OTM0yOTTI+MsbI + 0AjD/cMM9g0IxG8bHVfRL+u9vf3090vZ009XVxc9HR10tYk/0d4mfnwLnS3iO9bXUF9RRk1ZsXChPIrE + Hy/KzqSsQPlzbDGtdbWyv1IV1uPDY9WptRrKqpkcGGP37DJTQ5NqFHBpbgl15XXUVzWqaKxuoqG2WXya + BqoqayksKCMkNBobO2e0dY1VKHMA5+SWUl3TQm1dOzX17VQLlLKmro3qaimrO6RUIOtVLVRWNVNZUS/c + oU7GtDpKC2soKaikuLCCkqLKdZRUyZhXKWNdDdUVNdTIc9WU1Qqnqaa6qJrGygZ6mroY6x5iaWyefbN7 + WBUcWFrjwOI+dk9JnQ9PMts/zuLoFAeFX59YXeWMcOoz4kef2beX02t7OLl/RbDMybVl4f17uPvyaR66 + 53Yeu/8uHn3gLu654zxnjx/i1JED3HHhLPcrwvH1B3nswQd5+Nq9PHH/Qzz3yFO8+NgzvPjUM7zwjJTP + PMfLz7/A6y+/wntvvMGH77zNR2+/yWcfvMsvP3qPz959k3dfeZ6Xn3yY+28/z6n9u5kb6KC7qpCarGhq + 0oKoT/WhJd2Lfhkzp8rCWa1P4EhbOifa0zjalKgKwEoK6KPlwVxsjONqexLnG6I4VRXCidJgGfsEJaGc + LgrnbGEEtxVFcaYwWsZAuVZGCIupfkym+DCa6MdIkj9DgpFkX1n3ZTzBW8VknC9TgulYX2ZU+DAV681E + nBcjgoE4b7plf1uc3/8SgF1UATjRw4hAGy28rHVwtzHAw8EcV8X3s1T+3CM+npoC+v+DALzr/0cB+ErR + Lu6u0OPBBlOe6rIR58eV18c8eHPSi/em/fhwLpB3pVScodd63XhRnJtna2x4qtycJ0qMeLpCn1cajHin + zZAPOvR4v1WDD1u28UnHTn7ercEXfbr8st+Qr/rN+LLXXGDB1/3W/GbYgd+Pu/CHMRd+02/P561mfFhn + yGtKxG/OZp6WgeKJ1I08lrKRx5O3qHhKDP/zadt4IW07L6SLUU/ZxOPxP+XptFt5vWAXH1Tq80mtAR9X + 6fFJlQ6/bDDg120m/KbTVGDCr3qM+bLbmE/b5TmbtXmrSYNXG3bwTKVcp+SnPFVxK2+2aPJxnzEf9ujx + Uv1Gnqv4Ma/X3cqnXbv4xYAev1AjnLX4pG0Xn7Vp8FWPDl/3aPNFxw5Z38qHrZv4ol+D308b8Y8VRfB1 + 4F8r1vxr2QrWbOGAHd/9mwD8V0UAntPhr4v6/Gm3IX85YsmfT9nytwtO/OuSO9zmBqdc+O6II/886MBf + Vx3426oTf93jzB8WndbF30Fb3hxw4LVhL54e8uNcjT3D0bsoc/4JmbY3k+64lTRXDVUAjncXJylQl6RA + bUI8t+DlcgvuTj/D03EDfs7bCHbZRay/CflCIFqLE5jprGCmu4rOqiwKk0MJ87YVB0QHe0tt7Cx11fkk + 7K0NcVDm/pUGqYi+DjamONmZ4uZgIaUJtlb6WJvrYG6sganRTkyNldTCGthKQ7e318Pbx5LoGHcSE72J + EPISFmFHWKQdIeG2hEU7Ep/qS2JqoJAZL7wD7bB3McbB2RgnF3NsxbExM9fGyEQLQ1MtjOV5lB8n9M11 + 0THVwUBKY8v1Hy6MLXTU1M4mFtpqmmdbJxNcPK1xEULl6GYh1zX9PwRgcxV6mFvrYm1niJOrGR5eNvgH + ORMY4oKXjxAzOz1M1Ci+bdja6ajz/wbIc4aFuxIV4UFIiDLPrzVuzlIX1to42Oni4yXvHOlOcrIf0VFu + qhilpKn1EELnIw68l7uxrOvg6iQOoKfpDwJwZIgDkaEORIU6Ea0IwaoI7KIiMcaV5DgPFQlKfca4ERft + Icc7qcKWj5eFGBFD7G11VQHY1loLV6lHRQAOCXIiTN7HxdkUM5Od6OpvQldvA6am27E03yXf73sBeDtu + xjvxMdUkROo23saYJAdTEh1NSZBvESX1Fi7fNVQQJM6qv+F2Ag22EW2iSbKFLjk2euRI28mS+so020y5 + qxbd0VYslvhzqDmG411x7K0PoifFgnL7WyjfcRMd23/ElM5GDlto8USwOx8khPJtdjzflaTxj8J4/pQt + ZCzViQ/jTHg7Xvp16i7eL9TiF2KXfiV9+XeDBvxx1Ig/jxny93FD/jGmyz/HtPnHhAb/nNXin8t6/HO/ + 9MXjFvztkj1/u+bCXx92469PePC3pz352zMe/PN5b3jRaz3d84tK2mcfKW9se8EDnnGGpwSPuPGHKw58 + sGrBo2L7ThVsYyjwR5Q5rAvAafJOaTbSJ01+RI7OTdTq/5g+iy3MC5Hb52fNXvlGS64mzDoYMCzfqUva + U4uzHs3SLppcjah2NqDYSZ98Fz1y3fTJEaKXI+2lQIhfoZ8VWR6mxNpoEmy0kQDDnxFtfSsZnrdSI8Rj + RhzfO+bMeeWCA18+4cY/3pRnf98T3nKU9xBb9agZ/7rHnN+ds+CjQzY8v+TIxW4HpovNZZDSIt5jM2Gu + WwXbiHHfQnboTiYa3bh2Mo/PXx/lu28Owd9PCI7DP0/CP47zz78f4B9/38s//7HMd/9c5l9/X+Ivvxnn + q/e6efWhWs7Mx9GWZUqq5wai7DYSarcLL2k3rqaKAKyPp5OuOgdOoI+RtGFTIS6WhAQq8/8qfcKcxDgX + 0pO9SRXbESt9wddL+qfUkburOMiKuCt9Skmv7iT9yF36lNLPvKQ/eSgisBzr4mKAnY2G9AkNPNyMSIj2 + IjstRJysWHEC02mtzaK5Op3GimTqS2KpzAkjP8WbLLGP2bFO5MQ6UJLqSkOhv9jIcFrFkSiVtpgVZUpa + mBFJQcZE+ugLydTA0Wqb2L2tmJhsFzu0S2yTJkY35gE2vQFz6RsKTCw1BDvkOBmwLbaLLdLAWtqDi4sV + ft6KABxEUnSMGu2qCJ+JMbFC4KKICg6XfaFiJ8KJDBOECyIiVAE4MiZcbGowbl6uYgNN2KW9g22qALyF + nbpb0TRQBGAlsleDnTriLGhsYas4FVt2bFIFYAU7xeHYqbmdndo75Zhd7NLXYqfernUBWK6jCMBaetuw + EoISGupJYX4KOVmx8p0CxRb5CwJIkf6bnR5NbmYCORlJZGcox6SSm5WmRgWXFOZQWVZEZXkxGekJpKXE + riM5htSkaDk/mmQVsfLd40lPSiQrOZGc5CRK5Fo1OZk0FGTSVJBOfV6irMdTlRFNeVo4pSlhFCWGkBcX + THZMIKlRQSRHBJEQEUJsZLjY4kgio2KkrpLWU/LEphMTJ0QgIYuEpKx1ATjl3wRgWV6P/FWQLfY8W45R + jvseyrqyPXcdKcr5itCbr5ZJiiCsCsB5pGXIddNyVaRn5pOpCMA5RVKuC8DK/L+paUqEsCIAr8//myRI + leWU+GR5jyiSA/zICfKjJi6c4ZxQjtZ4c2ebCw8023N/mTEPFejwfKEObxXr816RPu/n6/JuvgFvFlvw + crkjT1a4CUG350iyJctJdiwWBLFQkcBSdTJLtYnMC+bqElmoTWClMZG19nj2d8RwsDOJ/Z2Z7G7PZaGt + gLn2MibbKxhuL6e7qYCmmnSqy+OpKAmnqMCP/Oz1lJJpyY6kJtuSkmRLYoIVCfHmxMcYC5T0z+spoJO+ + jwCW9fQYQxUZcUZkxqyngM6ONyEvyYyCRDPyEozJitUlPUqT1HAN+ca6AgMyo/XJjhJImRdrQmmSpbQJ + B5ry3FVUpdlTEmdJfqQiAJtSFG+lCsAV6Y5UZTkJ0XCgOt1aFYCbUk1oSzamTa7dHrKTgZBdTIVrsjda + l2PynOdi9LgUpcPVcG3uCdW9EelrwGNSPh6iy5NBOgItFU8Haah4TvCs33Yedf4ZjwteEHv4ZuA2PpX3 + +CJel1/IuPbLBPE1E/T5Mk6XzyI1+CB0G28EbOYV/028FrSND+WeX0hdfBFnzCfhBrwTqMWznuLbem7k + Ye/NXPfZxn1+u7jLX4PLvhqc99HinK8+p/0NORFgxNEAMw4GWXAw1JbD4k+sCnmZTglnNDeZUelPA3m5 + 9OUX01NcwVBtO7M9QhbHFlgUwr4gWJxaYO/CbvYv7eXAyjqU+YH3LSnzBK9wYO8qayu72b2wyJ7FRZYX + FlheWmBhcV6dH1j5MWLv6l6WVpZkm5D/uRnmZ2eZm5lmemKc6fExJkZGGRkYYHign8nxcWaV+YVnZpid + nmJxdpq9ct2Du3dzaPcK+4XEHlxaFIK7wMGVRY7sUdJDy73lHAWH5N7nDu7nrrOnuHbhNs4eXOOYHLM2 + Ny2EeFSIcD9jSkRnczW9TZVqOdBSw1B7nRDpZqb6a5kfymGpP5qVNi/W6q250GbOsxPiky+78OmSA28t + OvDykrOMpU48LeUjC448vOjK9SUPHl0J5Mk9MYJUHl3O5sHdpdy1XMP5hXoOjderfnd/azX9HYoA3M9A + zyA11XXS/1OJjAwlJjqQrPQIKotTaLohADcUpdNSnq0KwJW5iZRmJ6rzAFcUplNZKNsKsyjPV/79nkp+ + utjNpFixm3EUiN0szk6nNCeDMrHB5WKDq0oKqCnNp6wgi/zMJLJSY8XWxgjEBsdHip8ZKf1TyGhEsPim + fvjJuKKIv56uChQB2BE/TxcZl4MpzsuksabshgBcQ09bHcNdzar4O9bTwlB3E/2dDQz1t7Jv3ywXr5zk + 5LlDjM/009zVQHVzBXllOQRE+uHs44yduz3O3i5EJchzyLNlF6RRLPuVSNyjh5e449Jx7rhwlAun1ji0 + Z5qxgTaU+Y+ri5Vo3xx1HuTGqkIaKvPVuimTcapCxotGWW+qUqJ/C2kUNNUW09pQSkt9KTWVeVRVyHn1 + xbS3VdPZJe/R10RvfzP9Ay30/VsE8HBvG6MDnYwMdv+bAFxJSXEe2TLWxUaHERL8vQAcT31dKX29rfQL + FAG4s7ORhsZysqXvRccGERgsPCLch8joIELCAvD2dcPTy41QGd9j4uJVRIg/4OnrjYt8Aw/xEbx8PfAL + 9CE4LJiQiFC5RhCePsKhfOS+YRHCqVIpKi2lvlHu19NHR3cPtQ2NFBQXEpeUgL98U2cPZ+FKJugZ66An + HMtAOJaR+PHGwvmMbC0wdHTETnyOwOwSoqu6iKwZIrx6jAhFBK4cIbigi+TqYVonj7Jy+jprFx5j4fh9 + dC+cobh3N1GqADxARNkgEaXDJFVNkt+0RGX7XqpbV6hqnKSmcYSG1iHqW/uorG+TZanTsWmmFpeZW9nD + nNiYxT2r7D9ylIt3XOX2u69x8uw5FnfvYWh0hJGJMSZnp5ian5ZynNGpYYYmBqUcYWZRiQyeYnJujPHp + EUanh2iXb1BaXUBmQRKxqeJLJQcQmuhLYKwnPlGCGF/844MJSAolJDmS8LRoIsXHiM5LIkbaUkJFDolV + eaRLu8lsqSS7uYZcQY60/dz6GvLrqihsrKJI1gubKsipLyGnoYyStloqpE8UtTWRUV1DbFE5gVmleKWW + 45lVr86VHFw1RUDVNL4VM/hVTBNQNoZ/Xhc+6VV4xWfjHR2NV5gvngFOePlb4xtggZ/YdP8gM/xDjAmO + NCI5zYbcAhcKS72obYygui5C+k6Q+BmeYltcSEt3JzvbR3wvT6KihIOHWUg7NSU81Ez8NyuSxS/IlHEx + O8OOjDRT0lONyMowpiDbnKI8S4pzLSnNsxYfWvhIuozfcbuIi9oq52mSm2tCbo4JmZlG4tOYUFzsTGVl + ANU1UdQ1pNLYnC/ft5za9ioqWmuljqooELtb1N5EcXcHRV19FIodzO4ZJmtghYaVBxg5+Q4LFz5k9sRL + DC/eRf/IEQb7Fxjt7meqpYLp+mwmKtMZKU6kPzuKzpRQupLD6MmNp61M+nx1Dg3VeeqfPTpbqxjobqRf + 0N5STXN9FVNjw5w8doR7rt7Oc888yQfvvcNXX37Jb7/9lg8+/YLHnn+F84q4e/Yu9p5/kFPXX+PSc59x + 4YWfc+6lTznx/PscePRl9t33JEuX7mbowFFapmapkj7X0DdAU98gzb2D1HX2kJSTj3tgENZubli6OGHh + ZIuViw22HrbYe9nioGQrU2GBrbsp1sINbVz0xSaa4BlkRUC4PSEydkfGuxOdKNxf+FG4cJTwWDvZZk+C + fN/vBeCiIlfKi13EzrtRXeZLnXyD1q71KODZQzIunzzMzKlTTJ+5yMxtd7Bw8RrLVx5k+fJ1Jk/fTefe + U+R1jhOWU4FHeAIh8ak0yzvtP36cc3dc4cSFi0wtrdLWO0FVfS8NLSPSx9aYWzoqfe4wY9N7aWwboqK2 + g7qmXgbHFjl78R4eePg5Hn76VR566jXue+wlLt7zGIdvu4vFg2eZWT3J3NppZtdOMbp8iKaBSara+ylt + aKFE+kylEvVVXUatMte7kgmjLl++YR6t0gba6zPob0xnrDWVxa50DvZkcH4oiysDydzTG8sDvRE80R/K + C/3BvDocxOsjgbw5HszbkyG8OxPKxwsR/HwpjF8sB/P17lC+3hPKF8uhfDgbyGtjPjw54MmDXW7co8wD + 3OXO7d2eAncudLhzm/jgF9o8ZNmL81KebnTmdJMLZ5s9ON/qL/tDOdMRzb66cGbKQhkvCmYgN5jmZC8q + Y5zID7MmQ5AcbifjqSOhyvzPfsJ1hf97CpR07wE+Zip8vUyE4xrhrojANwTgQOm7keGmJEWZkRtjRmWi + JR3Sf1cqfTleH8AZ5Y+fNW6cK7fjdJEFJwtNOVFgypFCcw7K+u4Cc+aLLJkWjBVbMlhsRluOATVpGpQm + b6c4YSsFUZvJC91AbvCtwkE2kB10K5lSZgZvIid8O7kRO8iN2k5O5DqywreRFbGZ7DBlv5wbuYX8mK0U + xW2lJGEH5cm7xOfWFGhRnaFDZaoOpYnalMRqyr12kRO2g/Tg7aQHbRVIGbiLzBBtMoJ1SPDeRYjTJvxs + b8VPEYHtN+KrQBGCBX6qALxJeLkiAivRv+sCsI+d7Le5BZ8bAnCww81EuN1KjMcGEnw2keK7kVQ/Kf2U + ciMZgZvJCtwo77pJyi3khGwmX1AcsYXSqG2CzZRGbqYsYiOlggpZro/bQV38DhoTdwmP0KZHbGd/jpXU + qQtDFb60FXhKndoLfzEjyE2ZCms7diZbsDDciJ3pTpys9PBwMMHH1UqN5lVSQDvZGalwcTDF1clCfC9r + Nc2zIgB7uljh5miBq4M53q420kacxfdwF9/Bk7Ao8SsinQmPtCUqwpR44Q1ZUXpS9yZ05tgwnmvLaoEj + R4ocOS62/XCyFgcibmE16Cb2Co7G/Iir+Vu5v1Kb+6t0uKdM4wfcVaFAkyslOzmXs4kT6TdzKmMjF/O1 + uVpmwl1VNlwuVQRgU3bHaqsCcKfbz6i1vYkGp5vol7YzLXU1HbuF6ZgNzMRtYDF5C7szdrI/W4cjeYYC + Y45k63IwdSdHE7dwPn07d+btEmzj3vwtPFS8hSdrNHi51ZDXOkx5sdWEpxqEi9XoqumpH63R5rlWY97s + teC9AUve6jXitV5dXurYyVONt/JU8y08076F53p28fygLq9NW/HqjJ0qAL84Y8v1PuF7VbeyO+0mpmLX + I4AP5v+MYyVbOFUmz9FkyvVOOx7rduB6mw3XGs24u9GUBzpseGLci6fng3hyLozHZiN5ZEowHsmjI5E8 + NizLwxE8NBLK5Q5vViucGBb+WeijTayDhpph0dfGmLSIEJorShnv7REeNib8Zpkzyh/hjhzk+P5VDuxe + YP/yPPul3Ld7nrU9CxzYt8yxI2ucPHGENTlmbmGe2aUlVlYV27xK/9CM2OVBapuHqBabXd08SlXrBNVt + E9S0T8jYrGCK2rZp6trnqW2do6Z5mpqWKSnl+MZBsek9VNZ10dU3zuSMcKoDxzhx6jzHjp3jyMHTgpMc + PnCSQweOc1BJ/7//KAfWjnBoTZb3CdaOyrJAth/eL+sHjrB/30H27llj7+41di+vsiRcc2F+mT27V9Xt + CwsrzM8vsbgo/qBgfn6B2SnxE8cmmR6bYFoRiodH6O/qprWugcqSUsoKCyjIylJRkpdHSX6BcJ8i8jKy + iIuMJsQ3kPiwGGqKK5kcHGfP/G7mxmfpbOoSblQtfkOjjDEtKprrW2iqbxe0iq/fSmVFHeHhcTg4uGFg + ZCGwxNcvVBWAa+uEjzT30NE1RFvnIC1tfTS39tLc3E9b6yAdHcMq2tsHaBG/t6WlW/Z10ST3barvEA4i + frCgsaFdRYNattHa2CF+SzddSkS1XLOrqZN22dfZ0EVvczdDcq1Z+SaLw8KZByeZHZpiTjDRO8Jwu/Kn + 5y6G27oY7+phur+PxZFhlkaHBIPCh3tZGO1hXsFIt7S3Po6sznHm8F4unDjAhdOHOSnL+5Zm2D0n/HrP + EicO7Of0kcMcP3CAw8L/j68d4OzhE1w8cZbLZ85x5fx5rl64xN1Xbue+O+/i4Xvv5dEH7ufR++/lyYcf + 5LlHr/PMww/w2H138uDtF7nt0BorI/301ZTSVJBKbWYkjVkhtGQF0JXjx0RFJMuNiRztyORsfwHnevM4 + 1Z7J8YYEDlVFc6QynDN1cdzWnMQJ8XcOl4fK+BbMwUIFoRwuCBebEsnR/EgO50WxmhXOYnooM6mBjCb7 + M5wQwGBiMP2CwaRABmV9JMGfUcFEXCCTsYFiqwKZiQ2Q0p/JGB9GY70ZFvTH+tId57cuAMf70iKcojHe + W8YEF3L8LYlzkXHcfBduZho4W+jgIv3bydYMCzM9zEx1cLC3IMB/XQCOigjCTvb9hwC8U4Ei+n4PRfhd + T/2sYvt2tm/bjomxCXGx8XR2dHLT1VJN7q815MlOG14ddVMF38+WQ/jlvgh+dSCGX65G8tFCEG+PevN6 + jxsvtzjxQo0dz5Rb8nSpKc9WGPKqKgAb8367Hu+2aPBBy04+7tDkc0X8HTTmyyEzvhyw4pd91nzRYy6w + 4he91nzdbyuw4xedVrxfb8BrJZo8n7NFFX8fSbiZ6zE/5aHYm3k0foNgI48JnknZrIrAL2Zu4/n0LTyV + dAvPZWzmzWJNPqg24OM6Qz6tN+LzRiN+02HOH/pt+KbPkt90m/KrHlO+EnzeZchHbbq83aLJa4075H02 + 81T5zTxZdjMv123lg25dgTYv198q7/ffvFr7Mz7q3Km+z89l36ftigAs79euzVddWvyyU5NPW7fyUctm + PmzbLO+rzZ/mzWGfk4q/Llry1wVzvttny3cH7PnnXmv+umzCn+cNVAH4z7OCeT3+sGzAHw9Y8Mfjsv+s + Hf867wJnneG4I/88ZM/f1+z4827BigO/n3fg60k7PhmQ79ZqxjOtVjzT68Ejff5caPCQBmlAscutJFr+ + jETbLSQ77iTBaQcJHrtIDdQnPcyQhFBdwgN24ee5FV+3rQS47iDQeSdR3oZkRTrRkBfNdEc5iwMNDDeX + Ui2EKSZQiKWDIY7ihDha6UsDNRbHQhFdxCH1cMTT2QYnG1Oc7UzwcLJUU44oyy72xjhY62NjpaNGlFpZ + aGJno4OjoyH+AbbExHoQn+AhToktAcGWePoZ4+ypj5ufKcHRQmKkowRFueMd4oijkB8Hd3OBFXbOZmpE + r4GJpgoj9V/qBuiaaqNtooW+qSIAG6gCsPLDhSIAG5lrYirPYe1ghIOrBY4CJRrYzskUWwdjdfv3ArA6 + d7AiMMszm1pqYedohKuHpTrvrxL96+FhgZUS/SsOmrnFDjWaOTDInohIN+Klk6emhhIjRsDPzw43NzMc + 7Q1U0VVJuxwR5kqCvJcSAezrY4G7mxHeXqbSyaUufS3VdWX+Xj9vC4IDbNR0zgrCbkARgmPDnImLUKKB + XYgXQ5IQJdcUxAoJjJN6i4/2EPLtTow4esGB9nJNE5wc9aXulShgDZwchCAIoQwJEicw1FWcRnNV8FUi + gHV0b8XERBGtdqgCsOJ8OprsxM14F95S10FmukRJ3cbYGKlQlkPMNFWESv2GWWgTaqpBmJwTbaJBgtR7 + qnz3VLl+itl2wSaKnDVoi7BgvtiPY22xnO1L5Hh7FJPZ9jQ6bqBd47+Z1ryVw6aa3OFswWtRAXyeEsEf + 8+KhLAXxVPlXUTjfZrrxRbI5H6Xo8kmuNp+V6/B1kwG/6THgd9Jv/zCgxx/7dfhzvzZ/7dPkb327+Gv/ + Dv46KuWMlvRH2X/AmD+ftubPV+z58z3O/Pl+F/7woBN/fsiJfzzuDk95wNNeUvoIvAWe63ha9j3pCE9I + f3/Ymb/c4cCn0o+fHtbnfOkOxkJ/QrnjTaRZ/IhMIR1Z9pvJMf8pRUb/TbPpBkZsNVjxNOOQtJsD/nas + elux5GLGhJMRHXY6Ug861DnpUS3frdRejzwHXXKd9cly1SfT3YBMT1OyvU3J9DAmzk6LSKtdBBltwt/w + FiKsN5HoskEGmJ/RlrqBg106XD9gzXvXPPj2BV++e8cX3nKFF+zhEWu+u8eab87a8MlBO55fcOZcmz0j + 2caUhmkS775VSNVWIl01SPbSpSzalKX2AB6/WM5v3h7ju9/uhr+swd8E/zi0jn/ug++WgRnB1Dr+OMKf + ft7DZ881cu+BJEZKzMn2uZlIIVxB1lvxMNuJiwx47tZCbl308ZV3DPA2ItDPhCB/JdWV9DEhvyGByg9M + /pQWRlFSGE1WWqAa7e4hA+l6XzJT5/VVlt3cjfDyFnLsZ6X2USVFu58cq4jB9lJnDvZa+PlYkp0eRnlx + Ig21mXS2FNLTUkSrLNdXJFJfGkttURTFGX7kJbmRn+hKfoIzJaluqgDcUSmOSFkQlVmu5CVYkiFkOyXE + jBh/Y/xdZUC326VGJFtK37O008PczkCFha2BrCvzj4t9FPugwNJeyVKgI/s0VVjaKmmV9XF2ssLPy52o + 4FBSYxPITEolIzGZpOg4EsRhjQ2NIiooTI0GVhAZrvxAH6kKwArCI8Pw9PYQW2WqCrk7tLexS3e7mrpZ + 20ADXSMtdAy02Kmzk20aW1VsEWzX3MY2gXLOLs2d7NTWYJeeNpqGOlJqsUOJBhZo6e1gp9YmLKT/x8T4 + UlWRRW5WlDyDu9gsIZ4yfsRGepGREkJuZgw5GbHyDePJzognL1uZJzZN6j+b2spCaqsK1blbcpToLkFW + egyZadGkJ0eRpsw/mRRDRnI8OalJFKQnUZKZTGNhJt3lufRX5zJYnUV/VRo9Fcm0F8fTUhBFU34E9Tmh + lItDV5TkT06sP2lR/iRHBBAfESx2MpSoKKnD6HhBgioCx8SmEquKwBnrIu//iuD9HknJWaQoom+iHPcD + lHVle44KRTD+XkBWxOTE1FwVqRkFKlLSZZ8gNTOP9OxCsnMLycopUFM/KwJwWmoWqSmKAKzMj5ymphlK + ke+fGhdPUngoKQFeZAd6URsfymR+KLfVefBwuz1PtVjxZIUezxXt4s2inbxfuJOPCsRPy9fg/Xwd3iky + 5vVia54vduRauhVnY02FUNtwLD+Aw2VRHKqI5oA41/uqIlmri+FwU4I418lcHIzmdG8gx7vDONgRx+6W + NBaac5lpKVYjgIfayoSEFFBfmSKEK1q+bQhFeX7kZ7mTmeooz25HUoIVSfFWJCpzAMt9E6KNSIgxkHFM + bx2ReiRHGahIjVxHuhyTEWVEdqwJOXGmFCSZy/e0oCDRRBV9MyI1SQ/XJC/OgPx4I3JjjcmNNlSRp0b4 + KgKwI42KAJzvoaZcK5L750aYUCD9tiDW8oYA7PRvArANtanmNKaYivNuSGu0Dt0hOxkO3sVcuBYHonQ4 + G63PHVG6XAvX5sFgLR4K1OLxAC11ft6nZVnBswGaPBOowbMKAnaqeN5/B8/6bOVxl5/xlOAl7w28HbSN + z6I1+EWcNr+M0+KreG1+Ha/DV7Fa/DxyFx+EbuXtkC28HrSFt0K382mcLl8nmvJ1vAm/iNTno2BNXvYU + n9n9Vp703MCTXpt50mc7jwoeEJ/vmsc27vLaxVUfLS756XHez4izAeacCbbhvPgvJ4WwrCaFsZyTxFxu + GoNpybRKW6uJT6I2LYeOinohlULymzpoEwLcVt9Md3Mb/a2dDLR2MNDRzUBnt9jRNjpaWunt7KSnvU0I + ahNdHW30dHfS29dDZ08H3b3djIwNMzw6TE9/D+2dbbS1tdDe2kJneyttLc10yHJrcxO11ZUq2mV7X083 + vd3yDHK9Djm+t7uDseEBxob6GejtYqBPEeA6Ge3vZXpshKHeTiHJNbQ2VDMo99gzN8Vtxw9z+7lTQu6F + CA90MdrbxtxIH3tnx1ieVNJ+dTLZ38rUYJsstzM70snSZD/75rs5uFjFwak09vcFcqjFjju6ldRwzvx8 + r/gje114b9mZV5dceEHwtCL8zjpy35wL98x6cO98INeXYwSpPLCUx7WVCm5frufcfBMHxhqZ6qqhr0Ug + 7znY00t/dx81VTWkpaQQExEqfl0QuenRVBen0VKVQ1NZBg0lGVJmUS9lVV4SZbkC+X7lYlcVgbOiIFOW + FZE3g0LljzcpCWpZXZRHY0WJoJQGKesFDVVlNFeXU1+mpDlLJy8jUcbYRLG/sWrq58RYZe55GV/CQwgL + 8lfHJUUA9nBxVKEs+3g4y/4gCuX8+pqSGymgq+lrq2Okq4kJJfq3u1naSgPdyvbuBlZWJjh38Tgnzx9h + ammMdqnzpt5mKpqrScpNJVju6xcZSmh8FOnKNAJlBZRWl1DXVMX4eA9HDi5y8exB+aaHOHNkN2tL4/JN + W1QBWKmD6pJsNfpXWVfmRFbqRomIVvY1yZjTUlOsCr/NtSVq1LAi/tbXFFFZlkNFaTaN9SXrc/72NTE4 + 3I6Sprq7t5Gurnp6OhtVAXigq5nhvnZGh3p+EICVKN/iomyyMpOEgIcRHuZPWKgf6elx1Mm9enua6ZPn + VNAj12hrq6WsMp+8glQys2SMzEumsCiT7BwZj2LDCQ0LIj4xkZS0dBkz0khITsLb3xMXd3v8Aj2IiAkm + OS2O3AIZg4tySM9MIzwqDB8fb3x9fYmMiiS/UGxzY5M8fx8j42MMj49K/+umTL59vHxnLz934UImaBtq + qNlB9I2V7CQ6GN0QgA3s7XEIiSAkt4yYqk4iawYIrxkhsnqUiMohQgs7SK8fo2v+JAcvP8XJe15kz9mH + GdxzkarRAyTWjxMjx8fVjpFQM0FO0wLVvfup712jpnWJ6uYpmjqm6R6YoXdohp7BCQbGZplZXmVl/0HW + Dh1Vse/gEQ4ePcGlO+7i9ruucezUaWYXl+gfGWZI3ml8ZoLJ+Wkm5sYZl36tYGZxmuXVJRb2LKjb+0f7 + 6Ohrpbqxkiyp87jUcOGe3gQKh/KP8cA3yg1v4VJeN0Rg31g/AmL8CYxTooKDCEoKISQtksicOKLyEkgo + Fp+hKJ24wgwVsYIE+RaJ0v+SCtMFqSQVJZNYLP5biYzlpRmkV4hfIe05Nj+X4PQsvJOy8Ukvxy+3kcDi + XvzLhvErH8O3fArvsnG8C4fwzm7HK7UKj7hsPCJi8I4IwifUEy/hez5BNviF2BIsvDoowpLgSBPikq1J + z3Eit9iD6gbxh5piKSkPEf/CjYREB/FzBPGOREfZEhJiTkCAkbQZPQL9DYgIl/E53kb8EDvSU61ITTYS + H0SfjHQZV7NlHM61oDDHXMZ3U7IyZMxO1CQhbidxMdvF39EiJ0fGa+ETGRmGcj8jWbehqMidsvJgqmrE + v64TO1WbTVFlBlkl6aRJ/aWKPcuSPpklNjuroYmM5nYSW7pJlHZRtXCNvqOvM3biLQbXnqZr6grdw0cY + Ht7D1Mgk82K357sqmWotZaQ+ny6p69q0CKrlO7WIjexqLJMxpkpQQ3dHPYN9LTJGNKt/RukUW9VWX830 + 6BBHDuzj3Knj3H/Pnbz68ot89tmn/Pabb/n8y1/zwuvvcufDz3D44n3sO/8gpx98jSvPfcr55z7j9HMf + cfipt1i9/jwrdz0iz3me5tklirt6yRBbnlNVS15NHYU19Wr0b7iMr64BAdh7e2Lr6Yqdh5PAAQdvexx9 + 7HD2sRFYC5QoYDNV/LVzM8RV+JB3iI18Y0dCo12JShDOn+QlpRthsQ6ExdkRKd9VEYAzc9zFprhRVOyi + puGuKfOgriqAluZ4uvtLGVuQsXJN+sr+ZcaPHGL8xBmmzlxk/sLdLF66n4WLDzBx5h76Dl2gfHiRmOJ6 + PMLiCYiMp7mzh8OnTnH52j2cvnSFiYU91LcpgkA3bV3TzC0dk756nr37zzK7dET69azs66Sqvkv66gKn + z9/D9Udf5LFn3+D6k69y32Mvc/t9T3Hi8v2sHr/EyuEL7D91lf2n71AF4b7ZPbSPTNPY3U9Dezsdql8h + fkF3IwPd8j176hjsrZFvWsFwdzGT3QXM9+Wyf7iAk8P5nBvM5qL4sXf1xXNfbxSP9kXy7EA4L49F8tpE + FG9MRwuieGsuivcXovl0MZLPl8P5ciWcr/aE8wtZ/nQhlLenAnh+1JfHB714eNCHB4f8uH84gPukvNrj + zeVOdy63e3Cp3UvFxVZ3rnR4c3unH1faA7mtJYhTLRGs1oQzXRbKaGEIfXmhNKX4Uh7nQr703/RwO1Lk + +8ZFOhEu39rff10AVsReH09D/L2EZ3qaqBnjvGX5ewHYS/y6gGATwkNNSBD/NjvWjPJEK9rSbZkv9+JI + fQCn6705V+PG2XI7ThWZc6LQjOOFFhwtseZAiQ1LhZZMC0bzLRjIM6M924iqJA0K4zaTH7eVvNgt5ERs + IjvkVrIU0df/VtL8biHFV8qAjWSF7CArbCcZYdvUuXvTg7eSGrxFsJG0oFtJl3MyQjeSGb6JrIiN5ETJ + 9QT5ct3ChB0UJWpQHK9JYYwGRZFyX0Fe2C4yg7eTIX5yRtAOMgJ3if+ur2bwSfbVJMTxhgCsisCyrMB+ + g4r/iQi+AYfNKtR9drfgb3szAQ43E+m2iQS/7aSHapITqUTHbpf32SzX30ii961qmeq3gTT/jaTL9kzx + xXOCFCFc6iVMnj9sk4qCsA0qiuT9KsUWVkdvpyZmJ43yTq0pBnSmm9Od50hngQc1wktyYiyJDTDAx2E7 + zhZbsDESTm2wAVuT7ThYauNmb4iHo/K7q6X6+6ry26qzIgDLNkUAdnexFFip4q8C5bdYd0cLKRVRWPwD + PycCglzwD3WW8cGOgFALgkKMiA7TJ024V1GaBc259gzn2LOS78jBIieOFVhzLF2fw/GbWQv70focutH/ + xaWcTVyr1Obeal3uVoTf0l0qrpbt4g7BxeLtnJZjjmXczPGMDZwVznm51JjbK6y5KO3rRLYZKzHajPpv + psfjZpocbqLT47+Zjt3JapY+e9I0WUzYItjMavouDuXpcrrcjAuVNlyosOW2YuEsOfqcz5JnKNTn4XJ9 + rpdo8og8w1NVGrzYpMvrHca82m7CCy2GPN9izAutxrws217pNOH1Hgve7DXl7R7hwJ26sk2Ll9qFk7Vs + 5rnWTTzbvoVnOrfzbK8Wb87Y8PqsPS9O2fHshDUP9hpwsW4zB/L+i4Wkm9ib8WN5tm2cr9HinNTJHQ3G + 3NtqwcOdtjzabc8jXXY83GPPo4NOPDnhw5OzgTw+E8KjM2E8PBnOQ2PhPDIcxmNDCkJ5dCSUOzp92Vti + R2+CMdlu24iy2UKwrSaR7lYUp8bR31zH3HA/K5NjHN+7zLnDylQ4u9krPs3cWD/z4wMszYyye36Cg3vn + xT/ezakTBzl39jj7ZVxTBODFPXs4fPw0Bw6fZnR8meb2URpax9T5fxU0dM/Q2DNLS+8crX3ztPUvCpZp + 61tR0dory7LeruzvnqahTYkiHhCbPsvCbnmec5e48+4HuOPqA9x+5T6uXL52A3eruHzpLi5dvFPFxQtX + /w23/4Dzt13h7NnL8tyXOXP6EseOneXgwWMcP3aa06fPc1TKQ0dOcOToKY7KuxxW/MK9a+xekrpYXMfy + 3BIj/SPi3zeJn1JATkYW6UmpKrLTM8kRnysrNU0VfwN9/HB3ciXEJ5Di7CLhssIFR2eES47K+c1quufy + ogoZQ6v/B2V1glo1Yre4qJKQ4Cjs7VwxMrHCxMwWH1/xs1LzKCmto7K6mcamLuobOtUo34rKJqqq22ho + 6Ka5pVf8/3XxVxGKmxTxV0UnzU3/gxbZ9j2U9Ta5Xld7v3BF4dK94s93DzHUNchQu5SyfaxjkMWhKZbl + PeYGxpntH2NucJypvhEmeoYY7+xjtE34e1MLA8K1x4QjT3S3y75WxroaGO2sZ6SjjuH2GuFvwtWm+tm/ + OMGR3bMcXVvkwMq0cOMhpoX3zCuisXCKOfHBJ/qEX3R1M9YrvsXQqBwzw+6ZOfYuLKh/Dj+8usqJgwc5 + feQIZ48d48yxI5w/cYwrZ05w+9mT3HHmOFeEpx9fnme2q42+6mJ6q3Lpr0pnuDqFkaoEpmriOdCbz6nR + Mi5N1XD3fKNw7SbuHK3ifJdsb0rnmBxzrCaBo9XxrJVEsLcohL15wezND2ZPXgirOWHszZbtgj1ZkSxk + yHicGsZEagjDScEMxYcwkBBGn2AgKVSWgxhODGYkIZjxhBAmY0OYjglhRrjXdHQgE9G+jET7MBTjQ59w + hu5Y/xsCsA9tSX6qAFwe4Uy2nxUxDvp4Gm3D2VAJtNPE3lwfWwtDTAy0MBTY2ZjhL3wsPk7J7Biormtq + bGXnjk3sUsRfKXfu2MLO7dv+DTv+B9t2sGPrDkyNTImPSZB20sVNDzYo4q81r46688FCEF/tj+V3RxL4 + 0+lk/nI2lV8fjOGz5VDenfDlzT43Xmtz4eV6R56vtOa5cguerxLDqgjAraa832bIe63aUmrxSbcuvxg0 + 5qsRC74etZHSgS8H7Pm0y4KP2s34sNWET9rM+bTdko+aTXmjUocXC3bydOYmHk++lYfjFQH4ZzwcdyuP + JmxU8VjcRp5K3qQKwC9n7+DFbDHK6Zuk3MbbZdp8WGfEJ00mfN5ixledlnzbb8sfh+z4ZsB6XfztNlEF + 4C+6jfhYFau1eKNpFy/XbeHZqlt5pkKZB3gLH/Xo8HGvNq83ybVrfsrrDbfwUecuPuvR5ZMO2Sfv+EmL + Np+1avFFmwY/b93JR01beL9pIx93bONXo/r8ddkGDrjyz1Unfj9jyrczxvx9jw3/WLPjr7ut+NOCEX+Y + 0edP07r8QfD7WV2+WdDj21VTfn/Ygj+fsOafZxzhlAMcsefv++34i5z/h0Ubvp235Vfj1nw2YMWbUoeP + V+pxrcyAe+psudbhw7kGX2mwlpR47iDO8lZirbeQYLeDBKddJLhrkuyvR0a4sTiThsSG6RIWIM6SjwYB + 7hr4Oe0gwsOA9DAl7aE0/s4K9oy1MdPXQEt5Jgmhbvg6m+Jso4jAitNhgqc4If6eQjz8hSh7OOJibyHb + TfESx0NJOaI4IL7KHLpust3RSBqurhp9qoiQLi4mhIQ6qQJwTJwrQaFW+ASIEyOOq62rNvZeRviGOxEU + 40mAkG+fMBdcfG1x9rbBwcsaa3kWYysd9M3WI4ANzfXUVGWK+KslnUjPRPuGKPw/ArCBMsemhRaWtnIP + R2XuX1O1tHYwVlNDK+KvufWNeYPleENTTQzNdqqRejZ2Bji7muPupYjANrgp6Z8tNDAx3YqtrTbBwUKc + 5VmTkgPIyAwnNy+O5ORgIdIueMo5zk5GuMk7+8izhwY7q1HAEeHO0rGtVMHK19dCBg17uY44aT4W+Cvi + r78NYYqoHOKoCsAhgXYqwuWY6BAnopVoYAVhjsTcQGS4I1ERTqr4q4jACXE+6r2UKGBXFyMc7JUoYA35 + BkrKaXOCAhyJCHNTn0uJDjY03IKu3kY1WtHcdPt/CMDuJhr4mGoTYKpDqJkO4RZ6KkJkmxLxG2C0gxCp + t3Cpv0ip50hzTWLMNIk11yDBTMFOEsy3C8RRdtxFc5gZCyX+nO5K4PbhdC71J7Fa6smQzy6mjTdx2FSD + S/amPOTtxNuxQXwhBvmb3Bj+XpIIZQn8qzicP+R48lW6NT/PMuKLQj1+Wa3Pr1sM+KZLn2/EFv1enLrf + t+3i9y07+GPLVhV/aN3M73u28vvhHfx+UpPfLeny7UEzfn/Kkt9ftOX3V2z55nZr/nCnNX+714HvHnBR + Uzxz3UNKd3hY8IgrPOoMj9lJacd3D9rzt6v2fHHEkhfHDbmjWovpyFuocv4vMix/RK7LdvKdd1BouYFy + 81vosNrOpJMeq77WHA1z5rC0if3+4nR7WjPlZkarrRa1dppU2etQaqdDga0O2XZaZDnrke6sS5qbAWlC + +NIFya764hxqEG61kwCpN1/jjQRbbCbc5hZinX5EYdCPGCnexOlxfZ4Uu/Lpg1785VVfeEOJYlbew4nv + 7nLg29P2fLzPnqenxOmvtaI3WY+CwJ3Eum0hTJ4/1lOXrAATGlPsOShk+aU7a/jD+2Pw23nEsMFfBH/d + zb/+Jvj7Iv/6xxTf/WsA/tUH/xT8sYd//rKT377axCNH45msMKbA/ydE2/4X/mKv3E234WqujbutMV5u + RviJDQjwMSHA1/SHNFcKQoNsyMkMEscrThBPblYIIQG2qgCspHZW/kSh/JnCX0pfP7FRAUKaA21R0rP7 + +FgRKrYkXPqN8qcLJTo4VPpWfk40tZUZdLQWMthbSW97CU3iZFTLPWpLY2iqiKcqP5SSDG+BF0XJbhSn + uFKb50tLWSDNgrp8b0rTnchPsCMr2o7EUEtCvY3EHupK/9fDUclgIDbEXmB3o3RwNVPhLH1RgYObsZrp + wFa+s62cY+MozoCDIS7O8j7eHmK3w0mPTyQvNZ3clDRSY8TORMeQGB5JTEiY2IMbiAgnNjKCmOhwYmLC + iY6OwM/fG2sbS3T1tdBVRF9DTRX6Jjpi63TRN9JBU1eDHdrKPMDiNOhooKGrqUJLoK2rjZa+LlpGYmeN + 9dGU5V36mugYaaFvLJD+7+Qk7TEpkKqKdLIz5TkiXcV+rf+BJSHGS75bGIXSh/OyokhLCSMjLYKC3ATK + itOoLsumoTqfhso8ygpSKc5LkGMTyM+OIzdTEfojxUmPEkSTnRpDQUY8ZdmJVMsx7aWpDFVnMFqfwUSD + kro4hdHaRPorY+kpj6S7LJz2omAacvypzvCnNCmAHHHI0qP8SIzwF8c/iJiocKKioomMjiU6Nomo6CSp + t2Ri49JISMq8IQKvp2pOTlGW1/H/jwCcINf5XgBOyyz8QQT+vwnAKWnr4u/3AnCS8t1TlPlfEuT7x5Ac + GkhagBu5goa4QOYLg4WAuvF0pw0viZ/wQpU2r5Zs473iLXxctIXPCrbwacF2PizQkm2GvKVEARfa8WCy + OZcjjbgQb8XlAj8h6aGcLw3lbFkIJ6tCOVMfxaX2JO4ZTOLaSAi3D3hzpsufA60hLDfGMSt1P9mQz2hT + CX1NRbTUKdGE8ZTkh1Gc7y/fXImydyYt0YbEOEtxRpWoX3MSos1krDImQe6dGGVEfIQucRE6xIXpSLvW + VZGkIEyP1Aixe+EGZEQZkxNjQkGihSoA5yskOUZJ96xNZqQWRQkmFCeZUhhvRr4iAsvxCgrlvhWpDtTl + uKgisCIAF8SakSN+UX6kKfnyPCXyfOVpjlRmOMl+e6pSralONqMu0YSmOAPaInXpD9NkIkSTFXnWo1F6 + Um/63Buuw0MhWjwaqMkTfho85buTZ/x2qXhO1p/z28lz/jfgt20dPlt5xmszT7nfzHMet/Cq30beCbkh + AMdqqALw1/Ga/CZei69k/eeRO/ggfAvvhW/jrdBtvBuxk88T9fmNPN+v48XvjtLn0xAN3vTexEseG3jB + ayMvem/mZd8dPO+zjSc9xKd22yRD2TYe8NrFPT7aXPXR54qvCZcDrLga7srFWB9OpERwrDCNg0VZzGSk + 0hQRQXFgEIVhkVSnZ1NbWEJ5XoH0wSxyhTjnSZssTM1YR0Y2+SrBTpE2mkx2Rqaa8j07M53CglzKyoop + ryynoKSAvMJ8yipKqagqp1i25xflie+UQ15uDkVybFGBkOaiQooLC8jKTFNRUlJEtZxfUVZCgezPzskk + Lz9LyHQJVVWlFJfkU1pWSGlpAXXVytytDZQU55KeGk96Spy0x2xG+rs4uG+Zk4fWGJPluopCFYpAOT/e + x8JEP3PjPSyM97I01cvydD975gfZvzLOsX3DnFht5Nh8NkdGwjne5cq9wy68uezN14d8+fVhHz5e9eTN + 3R68suLJs8teXJ9z5Z5ZN+6c8ebO+RDuXYoTpHPPYiFXl6u4tNTEmflW1sZamOyqo7e1jp62FgZ7uoXU + d1NbUUlGUqL0i2DpI8EUZMZTV5ZJe00+rUKIm29E/9YWiR3NT6YiP0VNAV2Wl3pDBM6kskDqqCBHjfQt + FVQX59NeV0V/WxMDHS30K2hvlrGvmR6ps5ZqqeOiHLHD8n2zUslIiV+f+zcmTPqrjCsRof+vArC3uxNR + YYEyrqbJNyims6Wa3rZaBtvrGe9tZVKZ/7dHuV89XS1V9HTWsbQ8zm2XTnLm8imWDiwyODdC38woHWOD + 1Ha3UVBbRXaFtJP6GmrbW2ns6aCjr5Ne5UeHhXFOn1zjzssnuOviMS7I8sE9U/Jt22iuKZb3z6BK2vIP + EcAVBT8IwDUl2ar421aniL5ltDaU09FYSZuUjXXF1FTmq2hpKqenV+pqSJ59oofRcfk2Q21qBHC/vMuA + YFAw0t/xHwJwfa088w0BOF75F3dkIJERAbKecCMCeF387e9bjwTu6WqkvbNeUEdbew2tgp6eZppbaygp + zSMrK03GhXQZNzJJkzJRvot/sCdefs5ExgaSkZtIZV0RzVLfTdKelX6Rmp6Iv78PHh7CtYID5PxUKqsr + 6ezuYnxqgsWVRZZ2zzMsdV1WVUxIeADW9maq+Kuhv118BOFCwqNMbE0wc7TGzM0VD2Xu/KIK4qrbia7u + JaJmkKjqIVkeILail7y2KQZ2n+X4Xc9x8eG3OHr1WWaPXaNj6Sz5vctkdS2Q07VMXucyZT2rNI8epWXw + IHXti9S1zdDZv6imi1VSxE7O72F2eY09B46y/9gJDh09wcEjJzhw+BiHjp3k/JWrXLrjbo6cOKkKwAOj + Iz8IwFMLMwIlEnhSyklmlmZY2rso15tleHKIlq4mquRb50o7iBP/IjQ6AJ8QV7yEY3mKb+4lPM0rcl0E + 9onyxi9aEOn1A5RtATLuhqWEEi7+TKz4K1Hir0SkxRCWHkOI+CthKdGEJkdJGUZoSghhqcGyT4Gckx5O + ZGYsEdIeQlIT8UtMJEB8g5jSJpIbh0lunSa6cZqIxlnBEqG1cwSUj+GX141/VgO+SYV4xSTiK/6Lf1Qg + fuHynKGO+AmXD41yJiTaXt7JgggZ+xIzHMgq8KC8Joyq2igKigNJSBTeGGVFRKQlkZHCT0MtCAgwVsVf + L29dfATBQUbiS1qK72IjvNacpAQD8fP0VAE4J2ddAFaQl2UiPp0BKYnaJCdqkZioKT6PnrRZYxWpafok + p8r4nWlJfr6L2Go/Kiojxf7HUyScLqcojhTxxROyY0jIjydVbFqatN/M2noyWzpJae8juXOW0pmrtKw+ + S/fai3QuP07XzJ0MTp9jYvoI89NLLI8PsTzcwZz0zbGOWtoqcqjMEl8kO4EasQGd0i87OppVKJH3wwPt + 6wKw2KPupmpBrdj/YY7s38uJIwe5dNsZnnzsYd5/9x2+/tWv+PrXv+XN9z7hgSdf4szVhzh48Tqn73+Z + S09/yNmnPuT4k2+z7+GXmb/rUSZuu5PWlf0U9Q6RWlNPTF4+cTl5xOfmkZQry5nZBIkf7xYUhHOAj8AT + Fz8PnH1dcPZzFDjg5m93A7Y4+Vhg726kzgPsEWgp39ue4EgnwmLc1Ojf2BRvtQyPcyI83uEHATgjz4Pc + IiUFuCvVFe401Ah3aQwTm5bByGQds3tHmDs4x9jaIsMH1hg+eoyJU7cxLc8/d+E+Zs/fz+S5+xg+eZW6 + qX0kVbbiG5NCaGyKOpf48bPnuPOBBzh7+1VGZ5epbekXO9RDd/+8KvyeOHsXJ8/ezf4jF5mcXaO5fZiG + 1kHppzIOy74HHnmBR595nQcef0mNAL7j/qc5dfuDqui778QdHJVnOHrhGnuOyvl7jzC6tMrQ7AJDkxOM + S1+fnpTnnxxgfkrG7+leFma6BW0sTjaxZ6KW/ZNVnJip4vx0BZfGi7g6lCPjdjoPDiXz2FA8z44k8Op0 + Em/MpfDmQqogmbeWknh/KZ6Pl2L5bCWaL3ZH8cuVSL5YXscHc2G8OhnA8+P+PDMZJNw5hCenwnh0MoT7 + BwO4q9eLq52e3N7hzR2dPlyV8lqPP/f2Bcv2YM41+nOsLog94l8rAvBIoRKhHkZTmj9lceLTR9iTGeFA + cqSjGgEcFiw80F+ZB9gIbw8j9U/Svh4C4cte7oZ4ynYlBbS7pz6ePobCe40ICzEmXvzbDPFtS+MtaUqx + ZrLIjQO1fpys9+FMrSsny2w4VmDG0XxTjhRYcLjEhn3FNswXWDKeZ85AtimdmYbUJemoqZtzojaQE71Z + eO4mMsM2kRG8gfQARfzdQIr3rapImuIv20N2khm6i1TxaZMDN5MUsOkGbiXZ/+Z1BN5CcpCsB99MaugG + FelhG8SPl+vfiBzOEz+3IGwnReFaFMj1soP+TQAOln3RBhTFmso9tQlz3ESg3QYC1AhgZT7gdYH3ewH4 + e3wvAPs7bCLA/lYCHTYQ7LiBMNeNJPrtIDNcm/w4fQriDYQfaMi9tpLks4EEr1vU91OWFSFYec90eafM + gM1kB28RbPo3KPMGS12FbqRE3qU8YjuVkTupjdGgPkGPhiRjGtKsqEm1I0++T1ygPkHumnjYbMXRdDM2 + RhuxNtyAnel2HKy0cXNQBGBTXOxNsLXQw8ZcG0cbA5yUqeocFBHYXIUSgOOuwkLOMcPFzhwne3NcXGTd + Y30ecScvY1y89XD31iIkSLiW1GFumiU1OXYM5DqyUODEWrEjR4tsOZlrwvG0XRyK+SlrYTdxKOomzqbd + wp2lmtxTqcNdFVqq8KuKvyU7uVyyg3MFWzmevYHD6TdzJH0DJ7K3c65In0tlFpwvtuJYlikrMVqMSd31 + e/2MLrcfMRa8kbVMAw7nGrE/U5s9ydvZk7SNQ1nanCwy5kK1NVeq7bhSZSf81JLbcg25lK3D9TIjnqox + 4elqA56v0eOVRgNebzPirQ7T9QhgWX653YRXOkx4vduUN7pNeKNHKQ15o0tfjtHi1XZN2b+Ll9q38WL7 + Vp5r28IzbcLPujR5c9qW12YceG7chqdGLXmo34g7WzQ4VXELB3J/wtHCjVyq1+WOJmMu1uhzucaAqw1G + 3NdqyXXh4Y/02PPYgDNPjXvyxKQPj08F8uh0MI9Mh/LwhGA0lEeGQ3h8KIQnhoJ5YiSUO8VeHChzYCjF + nELvXSQ6bCfaScbVQAcaijIZ725hfqSPxdEBDi3OCCdZYv/iJNODHQwqWXXErxmTcW1qtIfV5UmOHlrh + 7JnDnD9/kjUZ12ZmZ8Xv2y0+0zmOnbzIzNx+OntmaeuepbVnnuaeddG3dWCRzqFluoZX6B7ZI9gry7vp + GpJSoKz3DC3RNbBAS/ckTZ0j4rcts3rwJFfuvJ+HH3+ORx57jocffpaHHnr6Bp5Sy+vXn+LBBx9X8cAD + jwoeu4FHBA+ruF+2369MD/DA49xzz8NcvHg3J46f48L5O7h6531cunwXp85c4ISMVcdPnuWo+IX7Vg+w + Z3mVVRkjFCzNrYh/PkRVWS2ZqdkkxCYSFR6tIi4mnkRBXGQUAd6+0recpW9Z4+7gSkpcKg1VTXQ2d9NS + 10JRbjGp8WmkJor/nSy+yfdIzVGhzNmbkpyFr3cwVpYOagSwiZkN7h4BREWnkJlVrM75m5NbIj5QEco0 + YYlJWeIXFcq2CgqLqoS71lNW3nADdSrKK+rFT2oQX76R6upGamuaqatpEf7QSl2tcCFBa2MXXW19DHQO + MdIzzHjfKBO940z2jrEwOMnazBIH55bZOzHL7vFZVpXMXZMyNguWRyeYGxhgoqub0Y42aVttqvg73t2k + ir/D7dUMCU8bbFayu9UwJ7xnZbKf1dkRDiyOq+X8SI8cr5zTLue0M9AivlVDA111deJPNdLXKj5WZzcj + 3T3yfMKf+vqYHhlhcWqKFWmLe+cX2LMwx77FeQ7vXebEvj2c3r+Hs2t7OLYgzzwoXFz40epwKwcnWjky + 0cTR8TpOie9yz1ofDx0e4tEjIzx9bIxXT83y1L5Brk00crmnlBMNGRysSGJPQTSLOSEsZAexmB2sLi9m + h7KUGaaKvgvii8+nRzKdFsl4SjgjyeEMJoYxEB8uiKQvQZAUoYrAQ0lhjMi+icRwJuPDmIkNZyY6jGnh + 5+OR/gxH+TIU4/eDANwR60d7vC/tiX40KRHAwiuyfcTnttXFTX8zjrpbsdPfibWxLhYCA+2d6OlqYGNt + qgrA3/95+P8UgLewY9v/xrb/xP8WgJ/uVsRfN96fD+Dz1Uj+eDKdv92WxT9vz+Ffd+Twu2NxfL4nlPen + fXl70J03O915tdmFl2vteKHKkherTXi13oi3W814r82E99v1+aBTn8/6TPhSDOTX47b8asKRX0+48uWw + Mx/IcW/W6/NqlRhaGTDeFCP5ZrU+L5dq8Gzedp7M3MQTqYIUBZt5MnU7T6cr2MZTyVt5KnULz8vyyzk7 + eSlvF89ny3L+Tt6t1OOTRlN+3mHJl102/HbQgT+MOvLtiL0sW/NVrym/7DFWy190G/FJux4ftGjybrMG + bzRu5cXaDbxYs4E3Wrbz8wF9Ph/U410ZAN5s3sg7rVv4SEn73K3Lhy3afNCozUcNgkYNPm7YKctb+bBR + EYA38Vn3Ln4zacw/9jry3UEP/rRsx1fjBnw5rs8fFi35814b/rBswTezRvx2Uo9vJ3T4ZlKH307p8JsZ + XX6zYsQ3+8340xEr/nHcju+O2/Ovg7b8Vc7707IV38xYSZ1ayDOa816nGc9U63GnDKgnpF6OyQB4mzhx + R6q9GEuzo8xPm1jrjURZbSbWdrsqAMe7a5Dgo62mJ00ONxSHUJ+oYB3CxWFSBGAvh22EuOmJE2ZLRUYI + Ex1l7JvsFMPQQU9dIWnRPvi7WeKspH220FVTPHu7WRPiJ6Qj1I8wIS2eLra42otz6qpEBduLMVXEYReC + fO3x8rBUI2CdHPTVVMgeHuZqtGxsnCdRMS5quioPXyOcPfWwdtbCztNAyLeDKv76KuRbiLiLn5AfXxvZ + Z4mZkxGGVkqqZyW9syLw6mFgqacKwJpGGugaKynL/k0ANtPGwGQXhlIqqZ2t7AyxtjPCytYQc1slfbQe + phY6appoIzNF+BWoAvAuNQrYykYPB0cTXNzM8PC2UgVsRQC2sNqFi6uxGHdF/A0UAx8uxDaWouIk0sWY + RER44O1jg5OjIS7yzJ7uQq6F0IWFOBMmJD3A30qNAg7wEwIuBkGZEzlctiuib0SoE5Hy3sqyIgR/LwCH + KiJwkEAcARVBtuvrgtBgO7m2PcocwLGKCBzrTWy0l1zfBg93cRKdDFQR3tpSU/0egf72qgAc4GenpohW + hF8Dwy2Ymirpuv8tAligCMDeplr4mUibMdYkSOpagb/hLrz1tqgINNmpCsBR1jrESD3HynKMhRax5utC + cIzFduIstpBpv4OGUFOWSvy50JfKgzMFPDiZw/mmcPbGWHDQWYcLTsbc62XH40FuvBHjz4dJgXyRHsyv + s8P5Q14Y3+YE8HWmC58rAnCOCb8oNeLXDSZ802bMHzsN+EOHDt827uR3NVv4TcUGflvxM8HNsvxTftVw + M1+3b+Lrvu18NabB14t6/HrNiN8cNeG3J0z57UljvjltzJ/Pm/Ovy9Zw1QHusoe7pbzmCPcK7reD61Yq + vrvXir9fteNXJ6zFWTTl/kZDluO3UufyY7IsfkS+0w4KHTUosthMhelGuqx3Mumsz6q/DYdDXTgY4sJq + gAOL3jZMuJvTYL2LCjmm1FaDAhstcmy1ybTTIt1JjxQnHZJdDUgWoqcg3kVXBhEtwqx2yLfZiLfxRik3 + 4Wf6MwItbiLO6SZq4v+b2fpNXFow5sXzYpef9FLnOeZ5H3jMS97NnW9OOPH+igMPD9qxt9iI5ihNMry3 + EuG0iXC3rWI/dCgMM6Ur25HT45G8da2Kv3w4CL+bgD+MwR/H+O6Pk/zzz5P87c+jgj7+/pcW/vWXRviT + 4HcN8Itm/vhGA08ei2Gu2pDS4B8T53ATfhY/xk0Ij4u51nqaI08zAnzNCPJXxFwl+tdSFX8DbgjAGan+ + lMhgriAzLeg/BOBAf2W+YIUs2xMsfSFElgODHPCWfhsYaE9cnA/KHNyR0t8CAmyk37mQnx2lCsC9neVM + DDcy0FVBc3UmNaUJNFQk0FKdTE1RBOXS5sqz/ShJ9aQo2ZWKTC/qCn1pLA6godCPymwPStPcyEtwJTXK + nkh5duXf2UrqaeXPIy6eyp9YbIV42ayXnmJLPMXZlHUlxbwyL7mTpzmO7kY4CKm3F9uipKh3E5sa4OMh + tjaElOhoCtPSKMpIJzsxgYy4WFKiIsWmhxIbGizHBBMfEUp8VJgM+AJxTOJjIwgJ8RO7ZYeFpTFm5mLz + zPXXYWmAmaUhRqZ66BqI/dTTQMdQC10jXfSN9VQYGBtiaGyAgakJ+uYm6JoYoW2oCMF6YmPFhlqLXbE3 + kvp1UIXf8pJ4MtOV9M8uxEU5kxDjJo53AKWF0eKEJ5CXGUqi8h2SAiguiKO2KpOG6hyaanJprMykuiSF + yqJEygsTKMmPoygnivzMCPIyBFIWiLNWmh1NdV4MTYVR9FTEMVabyFRjIrMticwLZpvjGa2LZqQmguHq + MPrLg+gs9qc5N4DaDLlvkh+5cf4ytvmRFBUo9jKYqMhwNUIqKiaOqChBdAIxscnEJ6SJfc8gWZz9lJQs + klOzSJJSgTIvb0qilAkZ6ty8Cv63AJykpIxWBOCUAhIT84hPFhKiiMnp+T8IwMlpeaQqc/5mF6jib2a2 + 7EvPVuf+VcRfJeo3KfmGAJyaKnUXT2psJKmhvmQGOFPo70iL2PuVQn/uaXLjpS5b3uiw4JUaHV4v3cZ7 + JZv5tHgznxdJWbSdj4u1+KDUkHfLLHm10IaHk0y4GqHP1TgL7s/35v7iQK6VBHJ3WSB3VAXLNaO43pXE + o0MJPDIaxLVBH851+LDW4MtcjTjBNcmM1mTTX1tAe00ONWWpFOdGkJvhT3a6JxkpzkKebFTBNzbShJgI + E2IjlB+nTIR8iU8SYUiilHHhutKOtYkJ0iIu+AZCtKXUISlEfBRBWpghWcq8vXFmFCSYkRdrQHa0jorc + GF3KlKkEUi0oTbSgMM6UPDk2N9KIAhlbyhLtqM50pC7bhco0B/JiTMkWvyhPnkcRgIsTbClNcaAs1YHy + FFvKkyypTDChOs6Q2ig9WsK1GQ7TZi5chzV53lPRQvYjDXggTIdHgzV5PGAXT/rs5EnPrTzttY2nfbbz + rO8OwTae81WWt/GM92ae9d7E056beEqJ1vW8lZd8NqpRve+F7+CzGE2+iFMEYE2+itfk1/FasqzBp5Hb + +SBCfM6oHbyriMHRGnyRZMBvU8x/EIA/C9HgXd+tvC73eN1nC2/4beOtgJ285reDF7w28Yz7Rh5z38Ij + njt4wFuTe7x0uMvbiDv9Lbgn1Jmr0oYuZURyuTSTs+W5rOal0xkeQom3F3m+vpREx1CSnEhWbAwJIUFE + yrYwT08ivLwI9/ImzNuPQC8fPF3dcHNxFTLsI35JoNjZUBISYqVNCxHOTCMmLkrscwBhEcFExCip6tfT + 1YdFhsq2MKKjIkiIj5E+kyTtP4nY+GgVqenJZGSkSP+KI1yeyz/Al6BgP+KUtMApsXJMBHFC1uKkzMpK + oaQkT/pcFKEh8hxB3iTJ9rbmGuZnxti7NEN7YzUZyny4aXFqCuCJwXbmFeFXEX0XhlhdHGZteZTDq5Mc + PzTP2WOT3HaogzMrRZyaiuPsoC8PTfrw/r5gGUND+f3JEL48HMSHawG8tRrAi4JHln24d8GXuxYCuboY + wV2LCbKcye3zhVxaquTCUgun5jvZN9bOZHcDvS316wJwdxf9XR3UlpeRkRQnfSWI5OhginOSaKrMo6e+ + RAh2EW3V+TSWZlFTmKpGAP+nAJxBRVE2VcW5YleV9M6F8p7ldDXVMdrbydzYIIuToyxMjamYmxhhrK9L + SHsddRXFVJflyzibpUYBr0cAh4k9/z8FYHdnBxWero7/JgCnUldTos6lO9jRyGhXE1MDHevR1X1t6g9V + 38+9uWd1lit3X+D2e2/n2MWT7D6+n+UTh1g6dpj5wwcZXVmmf26e0d0rTK3uZWbfXuZXV1haXeLw0VWu + Xj3L9fsuc5+UVy8e4/jBRSaHOlVxt7o4WxV6lbmQ68vzVSgpscvV9M+FdDRU0NlYSXtTFR3NlXQ0raOt + uYKWxnLaZLm/u4nx8S6mZgaZXxpjfnFUlgfU6OPRoS5G5Z3GBBPDPYwP9zHQ2057Wx31Nf8pACvzOMXG + BJObk0xTYwUD/W1qGugfROD+VsYn+1lYHGdlZZLFpXH2St3MLowxMNhFc3M9xSWF5ObnkpUtY0+akgba + nygZy/KL5Jrt5YxNdcvxI0zIs/bINUtKcoWLBOPpKVzLT/wI+X55BTm0tjczId9+7cAqJ08f5dDR/fTK + 94lLjBC/w3JdANbbpqaANrXSx8LBHCvheQ5+PoSkppFYXkNyTTtxNV1E1/QRXd1PbHUfqfVDlPbMMrz3 + No7d+SyXH32HM/e9zL6LjzF+5C7qpo9QMXGA6vFD1AgaJ47SPXOKzrHDNHQt0dQ1T8/QMhOz+5ldPsDc + yn4W9x5k78Gj7Dt8nNUDR9m7dlhwiNX9hzly8gwnzp5n7dBhpqSNDIz+TwTwzKLU3fIMs9LXVSzPqesT + s+N09ndQUlVMem4KsSlRBIT74hXghouPncAGR19rXANtcRe76CF+omeYq3BRVzyFv6kIdsJNmRIo3IPA + WD+C4wMITw4hOCGQwJhA/GMD8YsOwDfCH58IX7wjPPFW/pCrRBUL7/WKdsMnxhM/OdcvLgQfaR8+cTFE + 5BSR29JH7cQq9XPHKBw7QO7oIcExMgcPkdS+QlzdFAlVA8QWNRGWnif3TJBnCCdI2oK/8E6/MBdCot2J + iHMlPMaWkChzYpLt5F3dKSgNpKgshIxcb7G51mI/jVWsp322wM/fUPxlXTx9dPGS8cHfT4/wMBmn4y3F + hptKO9YXv0eP9AxjcnLNKci3pCDPkrwcM2nnxqSn6pN2AxnpRmTKcRkZRuK76JKQpCs23IzcPCcKirwo + Lg0RSHssDCc9J4xE4XhxGSHE50STXJxCakUBeY1NFPcNkz84Tc7gHorGL1I+8yB184/RMvcIA0sPMrfv + PlbWLrG29xiH9uzhoHzrtdkJlsS+9TTWUF2YQ5mgpqKUjo5WusSudnW3S7/rYETa/HBvMwPtSnaLavrb + 6lmaGuXI2m6OHpS+cfQg9911O6++9Lw6F/BvfvtbPvr0Cx5//jUu3fs4Ry5d5/hdz3Dmodc59tBrrD3w + PHNXH2Xg9B20rR6hoH+E+KpawnLy8Fe+U3yCtJV4QgSBMbH4RUbgIWOhm4xjHqE+eAT54BboIXARiG0V + v9pNhbRLP+EI3qa4+FrgHWpHQIQjwVFOhMS4EpUofTvFm6gERQB2JjzeUbY5kpjmqgrAOcWuFJe7U1Xl + SUOdv9inaIbHi5nZ3cXuI7MsHd/N+MHdDKzto1/60siJc4yfuZ2p264xde4Bps5fZ/zcfTQvHSWzsZfQ + lGzpN9l09Q6ipF+/64YAPDS1QE1zHzUN/fQPL3Pw2CXOX3mQK3c+yrmLD7Bn7Qy9Q/O0dSup2fdy7NQd + 3Hv9WR568hXue+Q57n30xR8E4ANnrnLg9F2cvP06J688wNqpKywePsPioeMsHzrK0toae/eusH/vEgf2 + znFgdYZD+6YFk4IxDu8d5sSeHk7v7uDCSgu3L9Vz13wV982Wc326kEen8nhyKpMXZjJ5cymHt3fn8s6e + fEEO7+zN4oM9qXy0O4lPdsfx2e5YPl+O5ufLUXy+FM3Hi1G8ORPMy1PBvDQTyktz4Tw/G8lTM+E8NhbC + g4N+XOvx4e5ub+7p8eVatw8P9PpzfSBEtgVzvsmPozX+7KkKYUr6wXBhqCoAN6b7UxbvTk6kAxkRDiSG + 2xMdpvz+Y4G/rylentI/PYzwcdNX4e1qIOOuAW6y7Oaqh5uHrHsb4u+/LgDHhUufFL+7ON6K+kQrBrMd + 2FvlzXHx3U/VuXGkxJKDecYczBbkmrK/0IrdSvRvnjnD2SZ0pxvSmKhFWdR28sI3kRF2K5mRG0mPEIQK + gpRo2FtI9d9AsvcGEgUpfpv/RwAO3k5iwGYS/DcSL0jwu1XwM+J9b8DvZtn+UxIDbxbcQlLwreLn3yp+ + /hY5fyu5odvJD9lOYZgmBXLN3KAdZMk1M4N3khG864YAbEJqgA7hTpsJcdhMsONmAh22Eui4hQCHDYKN + BNivQxGA/VRswt9+A4H2txLstJEI963Eia+eGaYr3MJIOKIxhYmG5Ci/hQRvI9F3A/Het5CgiNw+G0iS + 9WQ/RQTeKO+/mXQVyvINBEi9CNIDN5Ifto3CkG2Uin9fEanMt6tDWbQuRdFyfeE+CYF6BLvvxMdxG25W + 23Ay24qDyRYcTLfiaLkLVzs9vJ1N5Xtb4GgjnNtIU7BTnZLPwc4EZ1UEFtib4GKniMSm6u+xznbGOFqb + YGNphI2cZ22rZCDTwdxBAwv77dg6bRGfQEv8OUPxgy2oyLSlL8eJmXwn9hY7cqTUltNF5pzO1eV4ykYO + Rv+IAxE3cTTxJ1wp2sG1Kl3urNDijjINFbeX7OJ8wTZO5WzicMbNHEj5KfvTbuFQ2iZO5mlxvsSEc8UW + HM02ZUX4y5j/rQx6/ZhBnx+zFL+T09IWTxSYcDhb+FX6Tvan7uR4nh7ny8y5XGvN5WobLpZZyT3MOJup + w3k55nqJIc/UmPJCvTGvNRnzdpsZb7Ub82abKa+1mfCKlK8oAnC7Ea92CDr1VbzWocfrHcKPOzTlOE3Z + t4uXO3byYvt2VQB+tk04W5cWr41b8/KEPU+PWPH4kAUP9ZtwrVOPiw3ynhWbOFu1iztaTbiz1YLz1Qac + KtHgrNTFuhBszH3tVnKOM09NefPElC+PTgonmAri4akQHpkMFT79vQAcxFOCp0dCudbly/FqF2Zy7GgI + N6TAV49MP1MKYr3U3+RnB9qZE39wSvzMlfFBVmdGmB3ulLGuQnzafJqFy7Q0lNLZVsXcVL8qAF88f4zL + l8+wb22F6akp8TFXxOc7yykls8LKMfqGVujuX6JD0N6/SMeAYHiJntE99I7tpW98n2BVXe4d3adCWe8f + 3U2v2Pm2vhlae8aZXlgTn+wC9z70JC+88jYvv/IuL738Di++9Pa/4R1eePFtnn/hdRXPPf89XhO8Knhl + HbLvpZff5plnX1NF4ytX7uPE8fNcunwP997/KPdcu86Zs5c4dvwshw4p4q9whqW9LM0pkb+7VfF3ZmKB + zvZeSgorSE3KJCI0mkC/UBWhyvRpgtDAYDxc3LCxsMHC2AIHK3sigyMpzi2hqqSaIimTYpIJ9Q8VOxxG + WHDEDwgNiVYRHhqrRv+6u/piYW6HoZEF5hZ2ODv7EBwcS1xcOjGxaYSGxglvjcTbJwQPz2BZjhbfK0n2 + pZCg/G6Upkz9lS/IE76cK35WHhnK9GA5BWTnFJInz5KfW0phfrmKkoIKyktqhK810lyr/IG3i6GOfsZ7 + hpnuH2NldJrDi+LLLO1hbXqetZkFjizu4djyXo6vrHJ4YUm2TbNbfOaF4X7mlT/VCndS2thUn3CE7nrG + hcONtlUz3lUn12xmabSbPVMDHJgbYd/MkJzXzURXi4rh1kYGGhtU9Dc1MdTeylBnh6BLfKx2elqVZ1Sm + AOpicnCQ2THhnpPCdSbHWZ6aYE189sMrS5zat5tz+/dy2749XJDluw6tcv+pfTx8234eu7CXx29b4ZmL + u3nj3iO8LXjzjgO8fcd+Pr3nGK+fXuahhR6u9NdwpCaLPUUJzGaGMy3+pYJZ8TFnM0OZSw9jLi1MnfZq + RjCdqoi/UYwmRzCUFMlgQgQD8YK4KPriBYmyTbYPy/7RpAgmk6KYTIhkVnz3WeFV01EhjEcGMBLpx2C0 + 77oAHOdHZ6wvHYoAnOSrzgP8gwCsBETqbMBOaxPW2tsw19PEWFcD7V1b0dXZKTZbiQD2EM4ofDvUTxWA + NXZtYcf2jaoIvGP7uui7fevmf8PW/8SW7ZgYiv8eHS/2oJObXhiw560pLz5aDuIX+6NU8fe7K3lwdwH/ + upbPt6fi+MVaCB/M+fD2iDtv9ihRwM682ujASzVWvCjG9tV6EzG05rzXYcEHXaZ82G3Kz4es+XLcgV9P + u/DbWQ++mfPmVxOevNVoxHNlu3gibzOPysDwTMF2ni/W4NnCHTyVt41ncrbzbO5OXsjX5KUCLV4p1OOV + Ij1eLdblpXwtnknfxrOCl24IwC/m7eDVIg3erzXis1ZLftFny68Gnfh2wpXfT7rwuzF7fj0sz9Jnxi9U + AdiYX3QZ8GmbDh+3aPJhqybvNG+Xd9ik4v0ODX45bMSXgo+7d/Fh53Y+6tTgk245vlOX95u0ebdWk/dq + 5LzqnbxTuZV3q+S8hi2837yFz/u0+Wbagu8OePDdER9+PWvBx0PafDKoza9mTfn9sjW/WzSTejHiq3Ed + fjUq28d0+HpCi6+nZHnBgG/2mvCnA5b87ZAN/zxsyz/22fDnZSv+MG/Br8bN+KzfWJ5LBrUWY64X7eJk + /M0sBP83M+EbWM0xZ7nAkb4kG0r89Yix2UyE9WaibbcR57STWBeBhwZJQULcQvWJDdYjMlCHMF8t/Fx3 + 4mG7hUAXbXG+rClLC2akpZg9Y+2qANzfKMZGIbVetrjaGGFvrqOmgPZ2syUqxJfkuDDiI4Pw9xSi4mih + CsABXkJK/F2JDPEQ4+oqTqudOK2WqgipCI8+QqyjlDTF8V5SuqjRv0raGntXHSwdd2Htrod7iC0+Qro9 + whyFhNth52mOjYcZlq7GGIozpGehhaGFHiZW+hhZKgKw7g8CsI44R0pU8P8IwEq6aA0MTbUxlXOUuYDN + bfQwU4TfHyJ+lf271oVidXl9nk5FADa30sbW3gAnF3Gu3M1wcjZSU0Arc/8qkYWqqJQWImQ4isLCeIqL + k8RwhxMuRNzLyxo7Wz01DbSbizhwXjYEBdrLQOFAUICNGq2olEpK6IQ4L+JjPUmI8ZTO6iFOmRJBty4A + hwqUMjjATk0NHewvpQJl+Xv426himBJ1Fy3nKimgoyM95H4O+MhzKqmgFaFXScXt7GioCr/hoW5yfwd1 + XRG1jU22Y2b+nwKwk9SLkgLaS+rE11jBLvyMBEpaaP3tuOtsUuFruJ1Qc21pdwbE2RkRa6svbVHao5Uu + 0ZZaRFnuJMZyKym2W6kLMWGlLJCrQ1k8u1LFC8sVPDSQxvlsd077m3K7GMcHgpx4PNyD5yK9eEnq440Y + d96K8eC9OFfei3XgrVgL3ogz5N10fX5easzvmi34Y4c5f5V+8qdmHb6p2s6vCm/hy5wfC37ELwVf5PwX + Py/5bz6r/hmfNW/ks65tfDEm/X9eh6926/Grvfr8eq8Ov13V5o8H9fjnMWM4ZwkXLOCSFVyxhjts4S5Z + vmYO95nxzztN+cftNvz+pC0fzouT2GkljqsWLW4/I9fsR+RZbyHfagd5hhso0buFFtMtDNtqseRlzmqA + PauBjiz62TAlfWTQxZgaqadiSyE81jvJsdEgSxF/7bVIddIhwUmLeBc94lx1VSj/Coyw1SREru9jshFP + uYeX0SY8DH+Gp8FN+JndRJr3TbRk/Ig9ndu4tteM9+9y4Y9P+MAzQfBEMNwTyO+OufP2vCP3dtjIAKlN + eaAQHtdNhCj/jhXEemyjSIhRf541t00G8c61Iv7ybhvffd0N3wp+38N3f+jnH4K//qGbv37bwt++reKf + 35by3W+L+e7LYv71SQV/eq2SZ09EsVxrQEXYfxPvdBM+Zv+Fm+mtuFhq4uUiA56/lbRZa+kjtlLK8vcC + sI+5tHEr6R8eZMsAriAxzvuHFNDfC8ARYU6qCBwa7qRCEYB9xeaEij1JzwilqDCO5ERlLj4HwsOcyUwN + obIkhZ72cqZGmxntr6dbbGBbQzbtjVk0VSZSoUQAZwsxz/KjONWLgmRXilLdKcv0oCrXm+pcGdSzPSnL + 8CQv0ZWUKLm2vzl+nia4u5uoKeSdPW1wFDvqLDbAWezCugAs/dLLSoUiALtIP3X2Fhsj5zl6muHobiF2 + U2yEnxvhgT7EhQZSnJ5CaVYqBakJ5CTGkCHOR3JkMAlhAcSG+pMYEURijNSNICk+jOT4cLEvAeJIuOLq + YoO9EENbW5N1CHm0tlkXhQ2NtdE30sLYTPlDjGyzMsHM0gRza3OxgQIbK0ysLTEwM0XP1AgjK1OsxObb + O5vj5WNHvDg2RYowXxhFeoo8a7QjSdJXM1O8KcgJprYygaY6Zd7fQLFPTvLt3CktiqalMZvWxlxaarNo + qUqnvjyZutJEakoSqCqMpSwvitLccIqywijKDqEsO1iNyK4vCqG9NIShKnHgGqNYaIlipSOGPV3x7O6M + Y07Wp5simWoMZ6w2mKHKALqLA2jJC6Q6I4DSlCDyEgJIjwsiIVqeKTJEFYHVdNBRMTI2xREdm0BsfJI4 + 5qk3InAzVFFWKRWo2xL/R/z9vwrASbk3oIhROcQnZf1fBeBkcfbTMvP+3wXgFOX+qaSkJpGaGEd6bCjp + MsZmy/ha4mdFZ4wL+/I9ud7izus9jrzTZcPrtfq8UbaD90q28nHJZrF9W/lU1j8t1+bjCiM+rLLm9WIr + Hk0y5J4Iba7FmPBUvgdPF/vxeImQ1XI/Hq0J4smWSJ7tief5oTieHQ9Vf9y6rdWb1WpPpsqDGa6Ip78i + nY7KXBrKlPk148kRXyIt0VPan7O0RWtiw03EJzAgUnyQqFADosMMpL0qoq8+8UJyE6SMCxWbFqxNVIAG + 0f7riAnUVBEfIPYvUJeUECWbiZGa1jkvxpicKD2yI7XJjdalUMaDqjRrKlOtKEu0oDjOQk0PlxthpKZ5 + Lom3pjzVVo3+LU+xJzfKlCx5pnUB2IKiBFuKk+wpTpY6TbASmFMaY0R5lD6VUj/NoZqMyTOuRBpwJMqY + 26KNuCvKgAcVAThIk8f9dvC411Yed9/IE+6b1BTMT/uIj+uzRRV/n5ZSEX2f9NjAE263yDG38pzXRl71 + 38KbIdv5IHIXn8Rp8fM4RQTW5JfxShSwNr+Q5Y+itvN+xFY+iNnFB3FyXLwmX6Ya/4cA/HmIJh/47+Ad + udfbftt4J3AX7wVp8LaUr/ps5QVPJeJ4C4+JPb/utYv7vbS4V3yva2Kr7hVf455oT+7MCOOu0nSuVORw + OD+VkehQ6vzEtgkqI8V+RgWTKrYo3NUBPxvx+cQ2eFlZ4G5piauVNfYWFpgZGWFsaIS1pRVeHu4EBPhK + f4qQ/hIv/SBO1n2wd7DCxtYCOydbHF3sxEY6iX+lQMmcIn5LsPLP6Qjipa1HxkYSJUhKkf4YFyk23Rdn + F3ssrcyws7fCV+xjaJifnOODjyz7+rkTK/0jKzOZeCFwigAcFqIIwOFqWuLxkR4WpoepqyySduhPcmwI + jVV5TI90sHtukH1Lw+zfPcqBPWMc2z/N6SPz3HZqN5fPzHP7iQEurVVzYSGdS6MhPDLlzwdrYXx7MpI/ + nYrg96dj+MWRSD48GMFrB8J5al8YD+0J596VSO5aieX2+SQuzWZyfjaf2+YruW2pjZPz3ayOdTDe3Uhv + iyKMKgKw+N+drdSWF5GRFCN9JJCU6GDK81Jpqy1moLmKvqYyumoLaS7PofaGAKyIvyry09T5f6tKcqkp + y1cF3cbqMga72uQ9B9g9P8WhvUscO7CHY4f2qTgqhHt5ZoKJgW562xvpaK6WOhIOkC12JzGaxNhwGX8j + /r8WgBukrvu7GhjpaVZTP88OdTE/2quKwEqK5oGuRsaGOzl2Yo3rj9/PI889xrWnHuLKI/dzxxOPcOdT + T0j5BGfuvY+jV+/k9H33c9sDD3Lbffdx2913cuHqJe657w6efPo6zz79II88eDsP33eJi6cPsDA5QEdD + uZr6WYn+VaKAFRG4tjRXnRtZSQvdLvv72mroVdLBStmlzPMr9drVUk13Ry29yrMPtjM3PciePZOsrs2x + dmiJfQcX2LM6w9LiODNKyvCxfmbHB5gTTErdDva209ZSR53U9/8WgOOFMxUWpNMm9xwe6mCgXxGiFAG4 + mcGhdhaXxzl8dA/nzh/hwsVjXL7jFKfPHmLf2hJT06M0NtVRUVVKUVEOWdlJpKRFkCs+TVdvFSurI5y5 + bR/nLx3m+Kl9cq0JWuR9lJTTwcFe+Pg44+fvQVJyDLV15YzKcx8+ssadd1/ijqsXmFsYJz0zHmcPW3SN + Ndilu1k4kA5WwvlsnCyxdbPHMzSI2Jws0qtqyaxrI1EVgbuJqe4htqqbjKYhynqmGVg5xYFLj3H2/lc4 + de0FDt7+BAtn7qd95TTNiydoXTxJm5S9y2cZXjlP3/RRmnuWaO6ep3twkbHpfcws7Wd6cZXppT3MrawK + 9jG3tJfZBVlf3KOWC7Jtz9pB2b7M4NgYfcNKZOH/CMDzu+fUlM+LexekXFSjgQfkvWuaqkmTNhoSFYRP + kAcuXvY4uFlj42omMBWuKf6R+GAOvlY4CrdS/oDsLHDyVkQ4JZLKEntva5z97PEIccUnzB3/KC+8hFO5 + BTjjFuiMq5Qufko0pwNOwrecxH91CRAfL8gcJ/FtnQNtcA2R/hPmhWdEID4xUcQXFlPWPUT/3uOMn7id + 7kOXadt/hZb9d9K073ZqFm+jYvIYlSOrlEs9Z1W3kJBXQHhyAmEJEQTHiK8X4UlItJIO2FONBg2MsCAs + zobkTPHHCnzILhQ/Md2V4DBTfP318A8wUKN/FfxvAdjHV0fsrT6R0abEyHgbHaMnvp6+tBMzcnMtKS60 + lfZsQ36eFTk55mRmmpKRbkyWClMy00xITRVOmKhNTJw2icnGZObI2FvgTl6Rv5SB4u8EkpjmR1yyHwkZ + wSTmRZNSnEJaRT4lHZ3UTy5QP7+fyrkT5AyeJLP3IoWDd8n2B5ja/wxHzr/MqUuPc+7cPVy5cIUrZ89w + 6cQJTh04KDZnhPb6erF9tbQ2NNPZ2UVXVxfdPZ3S57rUtO3DSvpgxQ4oUS6djazMjHJ437JgRcWlMyd4 + QmzSh++/zTff/JZffvk1L7z+Nnc//AzHLz+oRgEfvPoEe+54lNlLD9J3/DI10nbz+seIKK3EMykZ54gI + 7AP85Jv74ya201UpAwNwD1GWvXEL9sVDmctZxjD3IHc5xkW2O0kbssdFuL5zgLQ1X0ucfMxwlXbkE2av + CsCBUY4ERTsTFu9OpJoC2v0/BWD5zt8LwIXl4nNXeFBZ40dLWzwTc7UsHx5j7YzYfbGZY4f30bV3Lx1r + B+g9coqB4xcZOXUXo9JvJy88zNTFh+hcPUNe+wgxmUXSngpoU1JAHz/BlXvu4fj5i/SOTlPV2E1t46D0 + x70cOn6Fi3c8zN33Pc0ddz3BkRN3MDKxh/aeKVUAPnziEnfd9yT3P/oC9zz4zH8IwAfP3Mmhs3dz5urD + nL36EIfO3cmekxdZPXlO9t3GoRMnOXbsMKeOHeT0sVVOH9/L2ROrArGfJ5a57cQCl49OceXwMHes9XDn + nlYZhxt5aKWex5aqeHKhlGcXi3h5pZi318p570A57x+skLKUdw8Uybiey4er6Xy0RxGB4/lkKYZPFqP5 + ZEGZJi+SN6dDeEX48ItTwbwgeH46jKenQ3lyPJjHRgN5sN+P+3q9ub/Pj+u9Pjzc78/DA0Hc1xPI5RZ/ + TtT5sbcqiKnSIIYKg1UBuCHDn3L5ltmRDqRF2ItPbEtEsJVwYBM1M5aXhwHeAi9XPRXKlEluznq4OOvg + 4qSjRgGvC8Am4vOYEhdhqgrARfFW1IpP3CX+8VK5B8ca/TjV4MGBInP25RiyL9OIfdnGrOaZsySYzDZh + MN2QlgQt8fu2kqfO73szKUE/IzX0FvHDN5ASrKR7ViJ+Zd1/gxoZuy4Ab/k3AXgHiQFb1gVgvw3E+dxC + jPdPifb6CdHePyHGR5Z9f0Ks/89UxAXeTIJyn5BNatronJBt6wJwyC4KgneSF7JDtu34QQAujDEUP99U + FYAjnbcQ4byVUJdthDhtF2wjyGGTYCOB9uv4dwHY78bvGyHOG+U5dso9dYQHGFOcaCr80FRKhV9oynP8 + jwAc73Oruvw9kvw2kuS7UY0ITla2yfsr9fA9lO1ZQdvICdpKYegOSsI1KAzXIluePSVQgzhfDcI8NfBx + 3Iq77RY8bHbibr0LN8tdUmriYa+Hr4uJ+htsiDKO2Bhgor8DY72tWJtr4yBjsyL+OtmbrMNOmUdSgTJH + sJQ2pthaGWFpofzpWwdDCw0MLbdJuQlT61vFJ9AkQrhYaqI5ZRk2dGc7MZXvzHKRAwdLbThVbMbZAj1O + Z23naMKP2R/5XxyK/RHnc7eoEcB3lmlxR4kGV0o1uFyyi3N5WziWsYGDqT9lLfHH7E36CfuSbuZw5g7O + FBhwRq53VNrZUvQORuV793v8F8N+P2ZfmjaXKu04W2TG8Vw9DmVqcjhDg7OFBlyptOSOWhsuC189nW/E + 8XQdjsRv41jsRq7lavFkpSEv1BvxRosp77SbqwLwG60mvKqkfm405LlGfSl1ebFZhxdatXixVZNX2rR4 + tVWD19sUrAvAr7Tv5KW2nTzfpojAu3ihW4+Xhi15btiWxwbMebjPVPqxCfd06XO5WYNztTs4X6fL1TZz + bm+25GSZLntSb2WfvP+R/G2clDq5VG/INSUN9Ig7D4158fBkAA+LrVgXgMNUAfix4RCeHArk6aEAnh4O + 5v5uX87Wu7GnxIXhDAdahJPWJbvTnB/FRGclSyOdTCn+c0utlG3MDLSpY1dVQRp5qVEUZMZRlJdIeUkG + A72NHNg3x5VLJ7nz6nnxI3ffEIB3c+jIWc6cucry7pP0D++me2CZzv6ldYgP1qkKwHvpG1ulf2JtHeP7 + fsDA5CoD47J/dDcd/bO0900ytyy2+MKdPP7My7z74Rd89MlXgi/54GMFv7xRfsX7H33Jex98oeLd939+ + A5/z7gefqXjvw5/zwUdf8IFc45VX3+XB609y7rarHDx0mvMX7uL+Bx/n3vse4eTJ8+xfO8rK8hpzsytM + jM8xOTrLlIKxWeF6M7S39qjpmdNSsgkLjcHfN1RFqCriKgJwiPAXd+lP1lib2eBo40R4UAQFWYWU5JaQ + nZpNZHA0Pm7CLz188fXy/wE+3uI/Cvx8QvD1CcbN1QdrK0csLOxwsFN+c/MlMCCKSGXO/OAY3N0DcHTy + xtbODUtrZ+GvXri4BOAt5yrCcEh4LKERAqUMiyYsIoZwQURULBGRcURFJqiIiUoiOipROFkqacnZ5Kbn + qSmuq4sqaK4UPtPQwlBbJ3MDw6zNzLF/Von2HWf32ASH5hY5sbKXM6trnJbx/tjyAgdnJ9k3NcLeiUFB + PytjvWo7mxtoZa63menuBmZ6m5jrb2FltIvVqX65zjAHZodYET49I+1wVnypuT45p6+bhcE+lkaH2T29 + LuzOj40yKduUaZgG24Xr9vcxNzKyHgG8sMDq/Bz7FuY4vLLAyX17uHT0IHedOs4jly7w8v338P5Tj/Dx + s9f55LkH+Pnz9/HF89f4+uV7+eb16/z6pfv4/JFLfHzfWT655zSvnFzh3uluTrWUsqc4lYWcOKbSIgVh + TKaGqeV0uiL4ClLCmUxSEMFEciSjSVEqhoTvDiZEqdG/A3HR9MVH0y/rg0nRDCevHzMpPGpajpuNi7oh + AIf+XwRgXzoF6wKwz38KwNZaOGrcjPXOW7DQ3IyJ1g70dm1l1/aNqgCsCL6BAV7ERIdIu/X9PwXgbQr+ + lwC8RRF9/x3/SwB+aciBt6Y8eH/Rj5+vhvLX2zLgSi7cnce/ruXy7blYvjwUwsfLvrw75clbg+680eXC + G+3OvNJgw0t15rzaYCpG1pL3uq35qM+Wjwfs+GLUia+m3PnNnDe/m/fjm8VAfjXtw8u1ejyat5V7U3/G + 3Uk/5nrGrTyet40nC7bzdMEOXijW5tUKQ96pNee9ekver7PmvVq5dr0Fb1eZ8GzWDp5K38pzOdt54YYA + /JoSwVJvzM87rfl6xJnfTnrwh3lvfr/gyW+mHPhq2Jpf9Jvy8y5Dvuwx4pdKhLIY/s9aNPlEjP4HzTt4 + s2Gzik+6tfnViLGKz/u1+XmvNp/16vJpjz4ftOvyTr02b1Vp8k6lJm+U7+T1ki28WbZRnnGLXGe73Eef + b2ds4KAP/zrix+fjxrzVvYt3ejT5fNKY3yxY8at5M76cMuKLcV2+GNHmi2HBiBa/GNfmqxl9frtkzB9X + LfnLmjX/2G/LX5XUz/NW/G7KnF8Omchz6PN2kz4v1xlyV9ZWVkN+xKDbTXR5/jcj0ZrSIM1oFicv30dP + FX4jBLH2O4l12km04w6iXHYQ66tNfKAuMQHahPlqEuixE2/nbarTEeiiQ7wQjKKkAHpqc5ntrWOqp57u + ukKK06OI8HPE094URws9nKwMxfG0JTY8kKyUWFLiwgn0dsHN0QJPZys1+jckwJWoMA+iBUH+Dur8t74+ + QlqEOAcF2fP/sPbX4XFkWdY36mIwipmZmZmZmcEWGGQLbcmSLckiMzMzMzMzY5VddjFDc093T093/74d + oeqa7nnnvd99nnv/WM+JjIyMiIyIs89auXLvE5/oJ2LSl/h4TwJCrPH0M8HBXR9rZy1sPQ3wFHHsG+kq + YskBJ39rLNyMMHM2xFxgZKeHgWLWCpmxtDfF3H7QANa31EPXVAdl7ioTK9nWVj4j25jLsjJXsJmlvrqs + lHlWSz3/nPGrmL7G5spcV1oC7Z9NYD3ZxkA1ga3t9HFwMsbFzUIt5ermrvyTzhBXV1OCgh3ke/iTLtct + Lz+WouJEEcVJpKaFyfd0x9vbRgYDQ1wcjfHyMCfAz046tDOR4a4y+LgSEe5MRJiTBHJvMtKDyBQBnJ0e + QnpKAElx3qoBrGT9KuZvjGoAO8n1dCQ8WFpBWLCjwIGwIAV26ntKmej4aA8ZcLwE3kRGuqtZwAF+Sjlu + JQvYEDcXE4LlnkRFeMrx3dQS1Q6OhtjY6Aj+2wB2kevsZaOPt5UQVCGbgRZ6+Ms18jfXIkBaP1MNvA2G + 4yVQlsOs9UlwMSdZrlWSqzmJLmYkCGGNszcgRghtrN0oUuV5mxBlxbKaKE71FPNk5SQ+WjWJhzPLOVsV + wd5oBw6G2nNCvvuZKA/ORrhxVq7ReXk+zwfZcjHIkktBJlwKUUpuanIvRYePy834TaM9f2514G9TbPjL + JGN+O0aD7/Pe4su0IXyeOoTPBB/L8qvc13hZ+gYvq9/lZd1QPm3V4IsuHb7q15M+qseP/Tr8epa29D89 + /rrUGNZbwhYr2GYLu+z4x14H/nHQln8cseYfR634635L/rbfiT9v8+Crxe7cm+7J5gIzpvgNpdjydXLN + 3yXPZBg5Om9SpPUG4wzfoc1qFH1uJszzs2a+3LuBAFu6vK2Y4m5Ctb02JbajKLLXJM9Rh1zF/HXVI136 + R5Ig0d2AOHc9FdGyPtJJhzB7LfwsR+BjNhxvgafxu3gYDMHTaAiR9kMojhjC1LK32DBdnxsbHfn2uD// + dTEKLsVJ3I/l1xuCeDLgwaFJ9jLY6VAcMIJEt6GEOr6Dn/Wbcpy3KQkfybQCE/b0+/D8SBZ/fDyav31R + A7+eAL+dyN9/18Bff9PAn35dx59+quYvPxbz1x9y+a9vsvivT7P5z+f5/PFeMXe2RLFsojHj418n3WsI + QTZD8LF9V+KQLkE+MuBJn4+IcCIqUp73cHmufzZ/QwKs1fLoSl9ITfJXofzZQVk3aACbEizPR5Q8/woi + oyUOCZTM3+BQ6RfSnwqLEqiuyiQ7K1TEsdL/XKSvBVNZmkJr82hm9TUzf2Yrs3oa6eucQFfbGOrGpFCW + G0pRhj+lWQGUZigmr+wrxYPCVDfKMz2pyPaWOOlNeZY3uUluItqlX/pb4Cvn5KbMv+1ugZOnLQ4CJw8b + WbbC2UOBxBMPS1yl/7l4WePma4u7xDtXPxFu0rr72uDrIzE10I2IQHfiQ7wpzYyX4yVSni1EPyNWziGK + 3IQwMmMDSY3yJy02iPTEUDIEWSkRZKVGyuAfKnHBj2B/VyGkcgw3EYwKRDg6iVC0szfB0lLinZU+tiIW + 7Z2ssXO2xt7RBntnO3ktxNjVCRtpLe3tsFDWuzvK+bng5edIdIwPBQXRVI1OoaI0hpwsuT/J7uSIaCnJ + D6GqIpbGiVlMacyjqCCE2Ch7IbAuIlDiaG0pkWtfTNP4LBpqM6ivEVSlMVH2NaE8iXFl8SJsYqgujhaE + M640hLqKEBrHhNBWE0TvuBDmN0SwbHIUq6bGsmZ6koqlbfEsaoljflM0cxsimVkXxozaMDpGR9JUEsmE + /CjGZEWof3DKkeuUmhhBYlwUCaoJHCdIkHEqUc0ITkxOJTlNyHZ6lmrEpmVmqVCN4VRpUzIFOQLFEB40 + gDPSC1Qopu8gikhNLZD95A0awNnFvxjA6VlFpGcXynKRjCPFKpT5f//VAE7LkGNnZJCRmUK2ENG8xHDy + Iz1lzLejNsiK6QmOrC1252qLLx92ePFyqvC8SeZ8UK3Di9EavKoUrjN6FJ9Va/PlWEO+GGfB5+Md+KDS + jmvpRpyK0eJ8ogmPRPw/qfDjYaUf96r8uT8+RIR0JE9a43jSlcDjgVgudoaypyGA5dW+9Mm96KhMYHJl + pjoXaU1pJiV5CXKOIaTEe5Ec50xijA2x4aZEKmXawgxk2Yj4CBMSI01JijYhOdqUFGmTIg1JCNcnNkTG + ikAtFXFB2sQF65IonCUpWJ+MMCUL2JQiJbM33pz8OEPVAC5NNGa0kq2b46iWblYM4MoUO8oSrSiONVfL + PJcl2lKRZs+YDCe13HNhnKVcQzOKYpQS0HaUpjhSmuZMaaoDpUk2lCVZUR5rRmWMIWOi9GiI1GUgypgV + cWZsluPvk30fjzfjXLQhF8N0uRw0iks+w7jk9R6XvN/nqt8wbiilnmX9reBBA/iqz3tc9nyXSx5vq8t3 + AobzOFyTZ1HavIrX45NkfT5L0uOLZD2+TBGOmGLI1ykGfJqkw6sEbT5N1efTdOGpcs9+zLXmN1m2vxjA + X0fJdqGynxBtXioI1+PjCH1pdfkwSIuH/hrc8h7BNW85Tz9NzvnqcMbfmNPy/JyNcOa08JBjGaEcK0nm + UHkGG/MTmZccSUd0IC0xwTTLclVMILnC8WIcLfAz18PH3BBvCxM8LMxxsbTAxtwMIz1d9HX1VBPY28uD + sPAQklMS1QzgtPRk/Py8MLcwxtBQBxMz4WPWptgpMUcEjp2jHU4ujvj4eRMRHSF9IJ2UjGRS5HOZ2Rki + hiPw9fPE1s4SQ2PhZzbm8tqN8IgAEdB+uHs64in8VPnHbF5uGgX5mdIP48hMi6U4P5268ZX0dIlIHehk + XFUpsRHC36QvNU0oZ9HsDtYu62f9ykFsXD3A9o3z2LN1EQd2LefI7sUc297D4XUNHFxYxMH+OM73hfJ8 + SSQ/rYvh95ti+PPODH6zJZ0vNyTzfH0yd9ekcGVVKqeXJXN0cRq7Z6exfWYO22YWs3V2LdvmN7Nx3lSW + 9ExhRmuDagC3NSlzyjbR3lLP+KoSctLipY8Ek5kQztiyPFonVtHZPJ5pDTVMnVhJy9gSiYk5/2IAZ/5c + +riQcaPlvZpyJo0dTVNdLXP6uli+eA4b1yxjx5Z17N25mb27t7Bv91b2bt/E2pVL1LmR5/Z30dfVypSG + OkbLfnKzUn6eAzju/2oAK2WgA/08/ocBPEk1e5XSz3O725jfK8K/p52B6ZOZ0dHEvNld7N2/jTtPbvPo + 4w+4//ELbrx8zp3PP+X+l19y+9MvOP/4GSfuP+T8sw+58vwVl5895+L9B1y8fZPbD2/z7MUjnj69zd1b + 57h34yynDu1g1aKZTGuZoGYBK2WflSzg2vI8xo+WayLLE2tKmdo0jq7WiWo2cscU0Tst42WMqlXnLJ7W + JufdPZkli/pZt3YR23asYdeeDewQbN25hs1bVsj6xSxeMMCiOX0sESya3cPsnk61BHRD/TjG1lT8HwZw + elqcum6ynFvPjDbVBB7MAq6nq7uFxUtnslWOdfzUXi5cOsKlq8c5cWo/u3ZvYvXaJXTP6GDylHom1FUx + prpAkE1jSzmLl3dy4Og6Ll7Zz6VrRzhxejdbtq2gp6eVmpoiMjKiRZN44ydcIl74QOXoAqbLsTduWsnZ + c8c4feYIy5bPo7gkC58AF0xFA+kZj8RaNJazmw0ung54+LkTKc9AdnkRxePGUVLXSNa4BtLGNpFcO5mk + mhZy6qZS3tLD5FmrWbjpGKv2XGDVvgus2HuB+TtOMnnJVhoXbKR54UamLNxM78q9zFp9gO75m2mZtpDG + trlMmTZPLQ/bO3sJXf3z6OgZoGPGAO3d/XR09TGts59pXf20d/YJlHmM5V53z2By+1TapnfIZ3tVA3jO + wrlqyefFK+U+rVqszv/bM3MGjdLPiioKiEuJxTvQQ/1udsKFbF0sRYOaYe1iiqWrCVail2yEW9p6CkcS + /aZC1v0TtooWVKby8HfAPVAp0+sq3M0eB29rdf0ghPd5Wck60Vg+ci19TXDyMxKY4OgnMVN0m2eoO74S + Y4Pio0gtKaJqylS6V25gyb4TzD94njn7LzLzwGUG9l1ixs5zdG06Qefa/UxfupmG7rlU1reQVVZGSm4W + sRLnwhNDiEoIIi41gNgUb0JjHQiPdyA504PMfB+yCvxISBNeLGNyQJChavpGKRnA0XYo8//+0wD2CzCU + 9w2EPxsRFWNObJw5cTLOJCaZkp1rR3GxE2Mq3Kksd6esxJmSIkeJt3YSd20oyBHk2pKXZU1muikJiaJb + 4kXDpJqTkyfblQiHLgsivzBIuE6Q8CJ/ktIDyC6KJa8ilfxq4Yp1wr/lvnYsXUvnut1MWXWQ/I4NpNZv + IKd5J2N7TrBg02P2n/2Sk5dfcubCA65cvsXVC1e4fPo8Zw6fYMvqjczrm01PRw/dyvPS0SWYRse0Djqn + T6Vn2mS6lRjQPJb2+ir6pjawbM4M1q9YwLrl81mzZC7b163g5OE9PLl/i1/99C0//epHPnz5inPXbrNZ + 7tHizQeYu+kAvev30rpqOzWzl5I1eRrRo2vxFO5oExyEpa+MeR4u8iy5ynPgrsLJ1xOXQC9clZLPob54 + CUf3CfOV58EDD3mW3INd1D8gOIt2d/IXri5w8bPEQzSRX6QjQTFyDwUhsaJlEr2ITfX72QD2VI3/2J9L + QOeoBrA3JWN8KK70pKw6gInNqcxc2MiKrfNZu0+etZ0b6du0juZly2lcvoYpa7YydcNepm06Stf2M/Ls + XWb2wau0r91LZftM0kvHkls8mokNzSxbuYod+/ezavMWpsg1HjN+MuMmKn/EWM7ajQfYd/giJ87c5vjp + W2zbdZK+WStpmTqLzt7FrJZjHDl5lVMX7nDszE11DuDDZ2W7Q+dYt+MY63efZOeRS+w+dpmNe0+yetdh + 1u7az5a9B9i2Z6/Exe3s27WV/bs2CNZzYPdGwXoO7V7L4d2rOL5jMce3zubo2m6Or5zK2RWTubSyhRvL + G7i1bDx3l9TyeMVYnq+byKsNgo11vNo0gZfra3m1djQfryzkk+XZqgn88cJkPp4fz8u5MXw0J1q4cBj3 + eoK41R3E9S5/rncHc0WWr3QFc3VGqPDkYC5MC+T8tGAuSXt5ejCXu8I42x7KoeZgttYFsrw2lNmjw+ip + iKC9NJqG/DCq0/woiHclM8ZB+LAdUSHWMtaa4u9jLDAhUODnaSRjrgHeboZ4uOjj5qKnQjGA/QMtRPda + ERNlTUqcDTmJwmVT7BkrnLgpw4ZZ5R6smRDIxgk+LC+zZkmBKUtzBfnmLCuxYXGJLQP5FnRkik6PHUVZ + 2LvkBb9FVvCbpIe9SVrE26SFv0uGICvkPTJClLlxFfPzfcEw1QDOifjZAA4fNIDTQoerBnCi/7vE+b5J + jM8bxPq+QZz/m8QHvSUc/x3ig98WjauYwW/LcYaSHTHyfzeAwzTJC9UkR9r/zgA2IMFrFAk+ohmE18Z6 + 6xDjpUmE+yjVBP7FAP4XBDu/J+veI0Y4cWqoHnnC68tTrKlMt2Z0prSKARynL+cxaAAn/w8DOFWWUwOH + qutSAuW9AFn2l+38hw3CT9ZLmx2iQW7IKDV7uUS+R36EDulBGiT4jSLKW4NQT038XEbi5ahBgKsBIe5G + BLkaE+hmTLCnBeG+tsTLGJEQ7oWnkxkWJpqYGgzHxkIHFxmfFR2vmL8eroMGsJuDucAMdydLlOn53J2t + cLQzE56tGMB6mNpqYWI7Egv7YcLF9YiKMCYjyZryTHua81zpER05p8SJFRX2bKqwYnuZMTuKtNmc+S5r + kt9kffIbbM8bweHReioOlOmyv0KXfeU6bCsayYbs91iV8RbLZLtFSa+xJPkdVmaMYHOhIVtKzVlfYMKC + hFH0hLzJVK8hdAW+oSZNHKhV5ve1ZkuxCRvyDdhYYMDucjMO1dpzWDWA7VibqcPyhOEsjnyb5RFvciBr + FBcrDbk7wZTHDUpimjUfNCsGsAUPG8y5ViO6rFqLy1UaXKvV4PoEDW5P0uRevTYPpH3coMPjJl0et+jy + sFnWKcZvkw63m/W43WbKnel23Ox04mKHLWfaLDnVasHhFhP21OuzY7yuwIj99dbsmmDNmlJ9BuLfYCDh + deanvy196n3Wl2vLe+YcanHiaLsH5wZCuDArkouzornYH8OlvmiuzIjkpsSFW12hXO8MkeMEsGeSD+tq + fVhcHaRq7K7KaHon5rG4W8angQ762+qZLNy2S3RAt/DWSdVFFGbEDv7+kxBCZkqEcPZYJk4oY+G8GRw4 + sIVTJw+yevVy5igloBctY8PGXWzdepgFCzfRMX0xrR0/m7+Ctq4FtP4vBvD0/hWC5So6BwTSdvQulbgv + vG36bOYtWcvuAye58/BDvvzuN/z46z+p+P5X/yH4I9//9Cd+EHz343/w7Q9/5Jvvfy/4LV9/p+B3fPPD + b1R8+6Pgh9/y6Wffce/+Bxw+coZ167ezZOk6tm3fz4kTSgbwBdau3cLCBctV43f69D6mtnYKuoTPd6nz + 4nZO66WpsY3KirHCS0pITEiX5z1BRXxsimiZZOJi4kW3BEn8dJf+4oWvhz8J0YmUFpRRXlhBXkYBseEJ + BHgFSewNJtA3RBCqIsA/XIVS+llBgF8YHu5+Kvzl/aCASCLDE4mNSiUsJE60aTDOLn44OHqIdnXFxsZD + ln1wc/eX2B0ifCuCwGDZV3CkLIep8AsIwV/gK+foJ8f28Q5SM40VszlEjhkdEU9iTCJpCcnkpmRQlis6 + p6yc5tpaelpaWNDdxcIZ3cyc2sYs4chLZsxg7dy5bF26hO0rlrBl6XzWz5/F2nl9rJnTw+o53ayYpRjB + 7Sye0cqizsksmNbEfNFrC6c3say3ldWzprFhXreghxV9HbLNFJZ0T2Xt7F42zp/N1mUL2bVmJXs2rmHn + htVsWrlMNNk80X6dzOnuZuFAv2r4bl69SviV3NO1a9i6RniEfGa/8JBTe3Zw7eghXt28zm9fPefP337G + X756wZ8/ecxfPn3IXz99wN++uM/fP7vHH59d5esrh3l5bDsPRPNcWNTLzrY6llTmMqcgldm5yczKTWJm + TgIDWXEMZMaq6Jf+0i98uS81ll7RZT2is2eoSKIrLZHO1AQ1+/efBvB0ea0awIKe9ERmZqYwW9o58r5i + AM+Oi6I/LowZsSF0xv9cAloxgFMEqcGqAayUgK6J8aDwZwPYRfttbEa9haX2UMy0R6KvMQyNEe9iaKCF + i6M14WEBJKoZwEE4OVj9/2QAT1YM4Kd9njyf5cOHs315NT+Q329J4+/78+FYIX8/UcDv9ybz4+YY1QT+ + cnkEH88O5qNuPz7s8OZJswsPJtryoN6KZy32vJjqzKddXnzZ68s3A/58PyeIH+aE8L185rtZQXw+w5vr + 1Qaczh/G4bS32J/yGidkEDlfOJLLpVrcqjTgQY0ZL+od+Krdmx+6Avi6zYfPm935pNGJ5xNsuFGgzdXc + UVwvUExgLe4VafJEPvdRnTlftDrwm1n+/HFJOH9aHSWI4FfzPPmq247Pppqp8/5+q5jAErC/atQXKPP4 + 6vJpgzbP60bywcSR6jy/P3ZbCMz5rlO2n2bC19PM+LzVRM7LkKe1+jyp0ueDKgOejNblUdlInlQM5/lY + DV5N0uGbDnN+M+DEX5f585eVAbzqNJWBRIsnrXKcXnO+nWMnsFXN4C/6TPmsy5DPphuo+KLbgG/7jPlx + tjm/X2jDn5Y68NflLvx5kRO/n+3AT722qpH9osGEh7WGXJfvvTd9OPODXmOK8xAmub1Gc8gIGqMNqY0w + o0CEZZKzDgkuOqQJOUz10FcN4FjXUcQLKUoK0heSpUekvw6BnqPwF3Lk7yokyduEpGB78uJ9mVCSSvuE + EjomVlA/Jo+SzBghZZ4EetjiKWTD1dYEH3d5eMNFrImATo0PJ1idB9gKXzdbQv1diAxRyhd7ERflRXiI + iJQAJdtVyehzlgfZg3hlHtw4L2Ji3QkMscXD1wx7Nz0snTSxlnN2D7XDK9wZ50AbrL1MMLDXQt9aC0Nb + bfSttNA118DIUhdLe2PVADZTDGBzPXSMtdAz0VbLQJsqZMfGCFMrA3UeKxMLXWn1MbcxUKGUelYygxXz + 18hM6xcoJrC5lT7WdoZY2xti62CkloF2cjXH1V3gaoaTswlubmbqvKKRkfJ94v1ITQtVM4EzMiOJi/Mj + KNBJnRfTzk5fNV2VLFs/IXJhIc5EhbsTHempZiEqJlR8nDfpaYoBHEp2RhjpKYFqFm90xOD8v7FRbsRE + uqlmcXjwYPav0oYFOQkUg8iOkEBlnlQHNVtYKSEdI9dZMYGV6x0e6qIa8N5KWVknY1ydRUj42anZv0op + aB8vK5xlnb2dHraKASxQDWBrHXwdhIg6mRDiYIK/XEdfM00Vfpba+Fpo4W08Ci+jkbJOiyC5brEuFvLM + DSJerlmckzkxcg2jbHWItBlJipMGE2NsWDU2hvMD5Xy0pomv1jbzyfwabtcnczTFlQNhtuwXkbs7wIrd + Inh3eZuzy9OEnUKM98pzfdBLh4PeIzns+y5XEjR4XmrKrxoc+c92V/7e5sB/NVjw+zHafJf9Np/ED+Fl + zBA+ih3Ch7L8LFWQ8zpPCt/kSfnbPK15nw8nDudVs8SCKSP5rm0Uv56myR9m6PCXmfr8bZEJf19lwT/W + 28BWB/6+w5G/77GXmGnDPw5Y81/77GTZi//aEchPywP4sDeAXcVWtPkNpdDsNdL13yBd500yRwwhf/gQ + qrVfp9HkfabZ69DrbkyfrxVdPhZChM1pkO9X5aRLkf0o8u01yHbUIlvEXYa7vvRlETgehsS66RPpKtdS + EC6CL8xJhxDZl4+13AfzkbibjMDd8H1c9V7DWXcIvqZDSHIfQlXiEGbVjuDIHCue7/Dl90ci+c+jsfzX + /jh+XB3KvS4PdlRZ0xKtRa7PCIkZ7xFk/xbeFkMIdxxCgYi09pxRHOh34aNDcfzubhZ/fZUH35fy9x9K + ZYAu5Q9flfC7r4r43RfZ/O6TeP74SRR/fhXFXz6M5U8PE/ndjXTubg5m3WQTJme+LfuUfTsNIcDpXQLc + dSSOiHCVvh8W4SD9SokZtkKgrIScWRLkbyVQjGARxMofKATKcx/kZy1C2AwvDxG+ci3DlT4isSM80kVF + qPQfZR7gaOlP2TlRlJQIUZK+pvQ7JRs/LSWY2qpsZnTWsWLJDLasm8eGVbNYtmAas7rraKjJpDgzmOxE + TwrTfClO96Mw2ZscEehZcY7kJzpTmOJGcZobRSnuZMQ6ERtiQ6CXsQgyAxwd9bGV+GEj/cDS0QwrFcqc + 4wqMsFPfM8bWxRQ7iS0O8j0cJea5yrVwk+fCS/pmgI98b29bYvztyYrxoShZKUUdRXVeLGXpYRQmBZGd + 4EdGtDdp8n6GxJ+MhACykoLJSgkhOTZA/fdwgJcN3h4iCt3MVXi4mOEsx7e3N8DaSg8rG30ho+Y4OFtj + J+LRzsFazn3QlLFzdsDayR4rpXWxw9nbBe9Ad3wCnEhKDqSiPImx1elUlERTkBdEQa6S+RvM6NIIJo1P + FUJeKCiitChUYpk1cdF2ct3j6ekaw/S2EuprU9RS2421qTQr2cJjkphYmcCkingmVsRSVx4jCGdSZTBN + YwJprQlg+lg/Bib4s6QpmDVTw9kwPYpNM+LZOCOB1dNiWN4WzZIpESxuCWNhYxhzJkXQNy6GjjGxNJfE + MC4vitHZURRlRMlYFkVKQiRJCdEkJAyawHEJsQKlLLQQ7JQkUlJTSUvP+AWpaYrxm0FKcrq0ihGcLc9T + nor01HwVKakFKhQT+BcDWARFenaxmgWsZP8qcwKnZRXIciHK3L8KsnKUctOKAZwr40KOHEuOmZZGenoS + OUJYC5NCKY32oDrUhqZQC2Ym2LClyInbLb58JFzt46muwhtEEAt/+XCMJs8rhvGycgSfVGnzxVgjvhhv + wZcT7PhotA23MvQ4HzOSG0kGvCh24uMKD9nWgxdjPHkxzpeX9YG8agnlpVzfD/tjudoZxt76AFZU+dJT + GsiUMrk3ZSnUlmao/z7OTpNrGesvosmVOOnHcZE2RIeYEhFkQHSoxLBw4/82gJWqJIJkpY00IiFMj5hg + baL9NQUaxAQoRrAO8QG6JATqkRZqRFakiWreFsaZkx+rGMCGlCebMibNmtosR6oz/tsALk+yoTTeSjWA + lSxgZS5gJRuiNMmW/BgL8iMtKZLxqDjBjqIke+nbDhQlyrL6GQtK5bwqIvUZHaFLfbgOA+FGrIo2Y5u8 + fzDRmpNyDhciDbkUqsuVgJFc9H6Pi57vcMn7Xa75D+VWyCjuhGoKFAN4BFdk/UX3t7jg9iZXfd7lbtBI + HkVo8TRahxdxerxM0OPjBF0+SRT+qBrBhnyZYsjnqYI0uW9ZpnyRacKXGSa/GMC/SrHkB9UAlm3kPD4N + 1fkZenwWbsCnYfq8CtbhA7mm971HcMtrBDd8RnHZW4uLvgZcCDDnUpgDF2I9OJXsz/HscA7kRLI5PZwV + KeHMTQoToRTBjKxomkTUlAc5kigxw89wGO46w/Ey0cXbyhw3K0usTU3Q19FGR1O4lKERHp5uREVHkpuX + TUmpPOfy/Hp6uGCgr4Om5ggMDHUws5D4Z2+lwsrGEitbS1zcnQmNCCW/MI+c/GzpKxmkZ6VLbA/GQz5v + YWmCrp4WVtZmBAR6Ex0TJuNGoHA0BxHYdhLfAykpzqWmulxiUz7lxTlUVRTRMKlGzQCeN7Ob8VWlxEcG + kJEczuRJFSJQuyX+z2HL+tls2zCHHZvnsmf7Qg7sWszhfcs5vncpJ3YOcGx9C4cWlnKwP5FzvaE8nhfG + V8vC+WlNJH/cms5vt2bz9cZ0Xm3I5OGGLK6vyeT0snQOLEhl60AKG/uyBcVsmDmWDXOaRXS3s0AxAxXT + t2kSbU31dExukHYiY0cXqzw7MTKQdOHadaOLmFpfq/7woxjA7ZNGM2V8GZPG5DOuNJOqYsUAzkKd+7e8 + UP2OE8dWUj++mimNE1g8b4D1a5aybfM6dm7fyJ5dW9mzZyt7Bbt3bFLLnq5aOp/lC2exYFYP06c0SZwu + ozA3nYyUeNJF7CbGKWXQQoXX++Lv9e8GcEiAN0mxERL7s6kbW0F7ywR1TjJl/l8lA1gxgOf3dDBblvs7 + J7N4QR+Hj+7myctHfCQi/8PvvuHel19z/5vvBN9z54vvufLR51x4/jHXP/2SW59/y82Pv+TqBx9x5dEj + 7jx9yLOXT/nwo0d88PQ2Tx9c49Lpg2xctZC+ac1MmaRM6VChZgKPrRicC7hujPKHo0qmT1aykxt/yUZu + k2vaUDealsZquqY3MW9OF5s3LWf//i2cOn2AcxePcvr8YY6f3sehozvYu28zmzesULMFVy2aw/L5M5nT + 20V7ayMT62qoGlPyfxjAmRnxVFYU/mIAz+ieopZ+7uiop7u7hWXLZrFn7wYuXj7KzdtnuHX7LJevnODk + qX3s3rOJFfK95sk1m9HbSvv0iXT1TGL+knZ27VvK+Su7uHn3GLfuneTy9cMcO7GN1avnMLV9AqNHK38g + iiQ6LoC0jGhGV+XR0dnAtu1rOH9BKal3kBUr51NekYdfkKtaGUn5g6yjiyWuivbzcSIozJfMvFSqJoxh + nDynVfUNFIybSGZNHWnV9aRUTSKztomS+mnUdS1kxuJtzF69j7kbDrJg63FmbT7MxFmrqOpZRG3vEhpn + raZ/1V7mrT9I3+It6lxzLe3zmNwxl7bpswUzaWrtoq6pldqJzYweO5Gq2olUSzumto6KqnGCsVSPq2Ns + 3UQmNjXROq393wzgxXJvlq9dxjJ55ucvnUdrZyvlNeXEp8XjG+yLg2hZa0dL0ZCiJe1MVC1pLrrPzFGB + AabC30yltRCYK3CQ66Lg53WKWWwvnEoxe519bGXZAmtXYyydDbFwMpTWWLYxwsZNtKS7HvaeugJtHLz1 + cPAxwjXAGm/RYL6RPgTGBJOQm0GZUj5v8VKWHzjGujPXWH/xHusuP2TFuXssOnGTRYevsnDfBRbtPMHA + SrluA/OpaZxMQWUliZmpRCZFEhEXTLTwsthkX8JinAgWvhWT7EJSupuK6ER7AsJMCQg2Eo5sKfzYXvS4 + g8RX4dlBpoMGsCAwyIgQGXMjZcyLUQzgODMSEs2ES9tTXOLGmApvKsu9KS91p7TYlcICJ/Jz7YX/DSJX + xqf0NAvi4g1E8+sLjzInO1d4c7E3hSWB5BUECc8JEF7kJwigqCKFygmF1DRXUzdtMl1LlrJ41wEW7z9L + /7azjOnbSWbjerIatlI74wSLtj/n2LVfc/XRr7j96EvuP3zJg/vPuH/7MXeu3uPM0XPs3rKPdSs3s3TJ + GubMXcysOfOYNWsWc2b2Mbd3OjOlr/e0SpxqHstsiRkr581gk/SFjSvmsW7pbLauXsThXZu4cekkX332 + nB9++IpXH7/g4rVrrNm6k97Fq2mbt5yJ/Qsp6egnua6F4OJKPFLTsQsLxVxipJm7E6au9li62mHj4YCN + pyO2Xk7YeTvh4OuMa6AH7sEeeAS5y7Kzml3u7G8nz4iMi54Wsr3oBYGDlyku/sLhRWP4RToQEOFIUJQz + YfHucr99iEv1kdaLyEQZd5OcSEx3JSPfk9xSL3k+vMgtc6dodID03zT6F7ewZvcKNh7ZwYoDO5mzawfT + Nm6hfeNOpm05wPTtx+jacY6+vVeYc+QOC47foWvLEcb3L6Fk/GTpe3XU17ewYOFi1m/bxtJ162mZ3kt5 + bTO1E6Yzo285GzYf4sjx61y4/IizFx+w9+AFZs1by5T22XR0L/jZAL7GqQt3OXb2NmevPeHYhXvsPHqJ + DbtPsXHvaXYfu8q+k9dVU3jzgZNsO3yc/SdOcfjECY4fO8LJowc4dXSPtDs5dWwPp47s4ox8pzOHt3Ju + /xrO7lrCiU0zObW2iwvrOrmxsZMHm7t4vKmd+6sm8WRtPR9tbuHjLc282tLAJ9ub+XRbI59uHs8nayv4 + dFURnyzP4dWSNF7OT+D5vBi1/POj/hDudvlxvcOHS63uXJjswbkpnlxs9xWOHMTV7mBpg7k8PZAr0wO4 + 1hmoGsMXpoVyuDmQbXX+LK8NYu6YUPrGRDKtMpaW4kjGZgYIH5X7FmVPXIgVEYHCcbyN8PUywN/bmEBv + 6Z8eRni76uPppIubgzYujjq4OAsP8zUjMFg+EyEaK8aWNOG1ucJ5lT811qTZMTHNks58exaO8WBFjRtL + Sq1YXGDK4jwTluSbs7LcnmUVDswqsmJquiHV4UMpCnyTnKA3yBSkh75JWvhbpIW9Q2bYu2r2b0aQYvy+ + T4rfu6T5DxrAWWGa5AivzQjXUA3gjPCRpIeNUA3gWJ83ifZ6nRjv14n1e4P4wLdVAzgu6C3h+m+qGcGp + oe+TFT6Coigt4eDalEfpqiawYqIWhGjI+YyU8xkp/F2fwihjOQ89knw0SPbTISlQ4oy/HnE+2mo2sGIA + h7oMG5wb2Pl9Qpz+iXcJd3uPeN9RpAtPLkiwGDSARUcoJnB5qgWFsYoBrEla0DCSle+omL7/YgCnyDpl + vWIOK6avYvgm+Q0n0Xco8T7vqcuZwZpkB2uQF6ZNfpguWSHaJPiNJEp4eIiHBoHuWvi6auLjqkuwlxmR + yu8gXuaEeJoR6mVJuK/opyBnYoJc8HRQMoA1MNZ9X9pROMo47eokWt7VCk/FCHa0wMXeTIW7g1IK2g5P + FxtcHJSKXsaYKYkvSrU/By1snTXw8dEnXMaAxCgzcuPNGZ9hz1SJz32FdiwqtWFduQVbyozZXqLDltxh + bMp4j01p77Atdzj7SrXYX6EjrWL+6rGnVLYpGMn67PdYmf4mSxJfZ378EBYmvsXSFGVOYG02FhqyvsCI + Rcmj6A9/k3bvIXQGDGFZmgZ7xtiwUzlesbE6veHmIkN2l5tzsNqWg2Pt2T3akiUJQ5kb9gZzgoawOGQI + u9OGckGOfU/JAG6y4YNmK541Kcvm6nzAl8docK5sGKeL3+Ns2btcGjOUm+NGcneCJg8mavKkQZfHTXo8 + adLlQaPoo0Zt7tTrcLNRj+uTTbnV4cDtbneudLpwps2Wo5MtONBkyq56Q7ZN0GeraOkd4y3ZUmPJymJ9 + BpLepStmCN2xQ+hLlPNMf48VRZpsqpHPNDpwujeY86oBHMvFgViuCK71RnN7RgR3usO4Ni2Qs1N82T/J + iy0TfFk9PoR5VaEM1MQwt6mQNbPaWDu/RzWAlalflD8tKTpgfGUeealRpMUFkRwTSKIgKT5YxuVM+nvb + OHRoGxcvnmTd+tXMnz+fxUtXsnnLXrZsOSSvN9I+bZHE5EVqFrACpazz1J7Fg+Zv3wo6+1cOQjF9f0Z3 + /yCm9y5lqsTyqd1zfzaAT3H30XO++uG3/Oq3fxb85V/av/Lr3/6X2ir46Td/FgyaxAp++PUf+O7H3/HV + 97/ms69+4PGTl5w7f13OdY+c5wrmzl3G+g07hJOf5ICMBcuXrWOm8J+O9h4a6lupG99E3YRmJo1rFs2j + /BGzlfFjG1UDuCC/HGW6roSEdNUITknKIi0pQ50LOCo8hiD/YIL9QwgNCBcNk0JeViH5WcVkpeaREJ1K + eFA0Yf8DoSExKsJDYwkPiSVMEBQYSUhwtGjQBNX8jYtJE+6fQVREkmjVaLy8Q3Fx9cPBwQt7ey8cnXxx + dfPH0ysIX/8wAgMjCA6JIihEMYPDJaYrFa98cXb1xNHBHXtbV4ELDnZu0ud98PcJJiwghOjgMBIjoshJ + TqaqsICmmio6Gycxu6OVudPb6Z3cRG+zks3bwqIZnaydJzp3+UJ2rFzIVuHGG5X5ohf0s35BD6vndrFq + 1jSW905lWXcrSzrlM8KNFk1vZHnPFNbKe1tku62LZHvRSStkO8UI3rxwJntWLeXotvWc2beT0/t3cerg + Lo6KvtwjmnP1onksmT2TFfPmqKbwoR3bOL5vN8f27ubQzu0c3rGVM/KZaycO8fTKBX7/6Sv49ffwh5/g + V1/B1x/xty8/4L8+e8yfXt7h98+u8dXV4zw+tJlr6xdzbE4nO9smsaK6hIHcFPqzkxjITmamLA8oy5kJ + 9KfH0ydQTN8+0bS9yXHMSFGQwIxUQUoyXalJdAoU83e6mv2bSGearEuX9zMS6cuUfWamMScjiXny3tzE + WOaILh6ICf/ZAA757xLQKQLVAA5SDeCxsZ4UB9mT4Cz8X+ddrEa8ibnme5hoDkdn5PuMGj5oALs62xIR + Fqhqx5joULn3SgbwKLRkO22tEdIKNOT1L/P/CkYp8/7+N/4PA/jTBbqrKNUAAP/0SURBVMF8PD+AZ/2e + POtz47tV0fxlTxYcK4BTBfzxUBq/3ZPIH/ak8LvtKXy7MpYv5oXzUY8fT1pduTfJhnsNygTrdnzY7san + Pf58MytsELPD+VJI0cfdPjzvcOdhkz0XKnQ5njeMA+lvsS/tTY5nv8/ZIg0uy/rbVSY8HGfBq8ku/DQQ + yn8siOWnnlC+nOrNiwYHHtWac61Qiyv5GlzNH8mN/FHclWD6eLQBH44347M2R/68JIK/bUrm77sy+Pvu + dH67IpDPZtjxYrIhLyWIK9m/P7aY8F2TkYpvJNh/3qDDRxNGqibwl61G/DDNnO+nmw5Clr9uN+fjRiOe + 1upyv1IGBhlgnlTK69GGPC7TVk3gD2q0eFmnJ58359tue3412101n5/J/m7Xa3G/RZePui34fMCGz2fa + 8FmfJZ/0mPNyuhEv2w151aHPJ0rGcacR3/ea8dtZVvL9HfjrIlf+NN+F3w048NMMe76bZs+LejNuV+px + Jk+DbQnvM+DzGo2OQ6hzfY0JfkOpCdKhMsSEAl8TUt0NSRFk+ZqSLUjx1CPGZSQxnpok+OsKydIlwk+L + AI+RqgEc4qFLlJ+5kDBbkkOcKEwOYWxxMhMrshhTkEKWDCJxwZ4Eedrh5SDEwtYQDyEZwd4uJEQEEB3i + jb8IGncHC3xcrAn2cZRg5EJ0mAeRoS6EBjpIULWTwKhk9bkSG+0p8CJClhWDJihY9utngb2QWUtHLRE5 + BoPlscJFGPlbYeFuhL6NBrqWGuhba6JvqYm2yQj0zTSxULJ5HUzUUtBK6WcdI00VyrKJlZIBbIyJtYFa + zszQXEdtlVLQCpSsYMUUNjbTwdBUGwMTLbU1NdfF0soQGzvF+DXFwWlw7gwnxSxxM8dFWgWKAezjY0OA + CDUl21fJgotPCBCh6094hAe+vvaynSk2QrYc7PVxczVVtw8LVjIUPYmO9JLr4S4d3FU1aZOUTOLUEBHL + ITIwBagGbrhS8jncmfhYxcyV6xnhTGSIK1HyGaWNUE1gezULUplPWCmBGxku4l4+q0AxgJXrrawLCXbE + T8Skm6tSktoYXx+lvrwjIUEOanloZb2Tgx52ttoq1BLQNjoEuJoT7WMnJNoCX7lenkI6vU2FOFpp42ut + g4+ZtrxWzGBdAqwNiRQyGu1iToxsH6O0TpZE2hsTbq1LqMVwkp00mRRnx5pxcVyeOZpP17Tw07rJfL94 + Ah9MyeJsjjf7wq3YKGJnhaMGK5y0We6oyzIhrEq7XkjyNi9ttnkMZ4fnW1xI1OJZmRk/Nbryt2neIDHp + H5Pt+VOtId/nvs9H0UN4FjaEpxFDeCzLD4SQ3ksZwp2017iV+Ro3c1/nTuHrPKx4k+dj3uLLcUP5VeMo + /tCqzX9M0+VPPfr8aa4pf1lqzX+tdVTn6f7PbU781047/rrLln/sc+cfB0L4+84oiT0RvOwLZU+RNa3e + 75NvPIRULYHm62SPGELRyCHUaL1OvdG7tFqNokO+T7uHCa2exjSJuK/zMGCMqx5FjiKeHDTIcNAkQ16n + KRn6SslnL2Oi3PQJc9MbhKuBCBs9guS+edto4WGugYvxSFwMR+Cs/zaOuq+pmcChNkPI9h9CS9Y7rG8x + 5sYyL77cHMpPm8L4zYYIPpcx4XKLM6vyjBgnoirDcwSRzu8QYPeG3OMhsiznHjiEablvc3KuA58eCeX3 + t2L5z+fx/OPLVP7yWRK/ehHPdx/E8t2zGL57Eso39z344b4Lv3/swX/c8+EPN4P46UIEdzd6sbPLkt7y + EVTHv0m81xDCPN4lVMRakK8RwQGWhIQo/3yyIzBAYoqXCV5yfQL8rOS1DYHShwL9bFUEyPPsJwLJy80U + T4GPlwWhigH8s/n7TwNYQaQyr3a8L0nJAURJ3wgOcVT7X15ODG1Tali1oo9D+9dy8fRujh/YwKbVM1nQ + 38jU+mLKlXK2id4UZwVRlhVIQbIPmbFupEU5kBXrKMLJmbxEZ2ldSJV1UfId/CUGuznpY2enN1hq3s4E + YxsjNR4pUKoMKDBXfmhVYCcxSfqTqZ021nJPHTykP4rId3ExwMNJjwA3Q7lOhsRJTM+Lc6M2L5zG8gRq + ckMpTfElX84vJ8ad9ChXOS85txhPMpU/lsR7Ey/xIsBdBKG9nuxL2Z/A0QA3eW6c7HTV/m4j/dnGVk+d + K8hR+qyNnK+1jRkWVqZYWFvIOQrsJB472gis5fwc8Ap0w0+EaVp6CDVVaUyozaCyNIbykghqR8cyriqO + cdVxTJ2cz0BPFTOmV8j74cREWBEdbsnE8cksmldHX1cZdVWxlOf4C2lNpHVsCk3VCTSMjqN5jKAqXhAr + iKClSkhVbQDTx/vRM96buZO8Wd7iz8ZpoWzrjmBrTxRbZkSzbno4q6aGsqI1mGVTgljWEsqS5gjmTYql + t1bOqSKGSYXR1OREUpEdTWF6NJnJyvzE0RKLfzaBE6LkmRlEfGIcSUnxpComsJINLEhNVX7YTyM5KVVa + xQjOIjU5V0VaSoGK5JR8FYr5+08DWCkDrZi+SuZvWmahmhGcqswpnFWgZv4qyMxW5njMJSszh8yM7J+P + lSxjRDy5adGUy1hRm+hJS6w9vXFWrEi1Zl+xvXAzbz5q9RRO5TRoAI815FmVJk/Lh6l4UanJJ9UGfDbO + nC/rbPh4tAX3M7W4Hj+cR2l6fFZkw9cVTnxZ6cQXY5z5vNaVL+rc+arBhy/ag3nZG8m1jlD2TvJn+Rgf + Oov9aSgKF8ERR3FeAlkpMSI+g4kKcidUxv3IYHtiI+yICTUnSjhKXIQpCVEWavlnFdFmJEeZqgawgoQw + fWKCdYn01VAR46+tGsBx/nokBOqTGmJApuyjINZCYCYwVstAlyebqwZwVZoy1+8gFAO4QjF8E20pS1CM + YBt1rl8FisGbG2VOQZQ1RTG2FMbZki/IibUhN8aKvGhziuS8SiKMKA/XZXSEDhNDtegLNmB1hAk75Jof + SbDmdKw5F8MNuBqqw1X/EVz0fptLMi5d9n2bm8HDuBehwf1Ibe6EjuJG0HCueL/DebfXVagGcMgoHkZo + y9ikzbMYbT6I1eZF3CA+itfhVaIenyYb8nm6Cd/kWfF1niVfZJryRYYJ32dbDpaATrbkhzgTvo404IsQ + 4bchuiqU5S9ClXVyv+WavgzQ4qn3SB54yXl5j+CmlwbXvHW56idjQqgt12JcuZToxakUP/ZLPNkunGSj + iJdVaWEsyQpnvvSVvswQJkY4kqlMO6DzOk5DX8fLQINAOwu8lVLxpsaqAaw5YiQGunoibIW/JMSqc5dW + V4+R5zgRFyc7VayMHD4MI2MDrKwsRAzbSeyxl5hjiamFCXayTVhkGGXlpZSUiQjPzSIpJUn4YqBwL2dM + zYzR0dGS7c0JCw+UuB5HRFQI7p4u2ItQCg8LorqqnMaG8dSNr6JmTBk1o0uY0jSBWf3Tmf+zAaw8q2lJ + oTTXlbFmaS87Ns1n55b57Nu5mIO7l3Bwj2L+LuHI/qWc2L+Ek7tmc2x9Kwfnl3OgN4nzfRE8mBXCq3mB + fL00jB9WJ/LThiy+XJ/Fqw25PNlUwM11eZxels2uOSls6EthbU82a3pKWN1fy8qBJlbO6mD+jHa6lXkp + JzfTJiJ9anM9UxomqCWcfzGAEyKYOLpYNYA7m8bSPqmK9omDcwE31BQxoTz75zmAB+f/rSovYHx1qcTZ + 0TROrKWtZRKLF8xiw/oVbBYxvn79KrUE8PoNq1WsXbOcFUsXsES2WTp/Jotm96klo8dXV1Kcn0lWWiIZ + IoqTJDbGRIcLf/TH38sDHw+3XwzgiCB/UiVelhflqJnHbcq8morZ2dbArOmT1e+pQMkGntXdKufTy6Ej + O3j80X2ef/MpD7/6WjV8zz//lDPPXnH66cecfPKKk49fcvaDTwSfcvrxR5y485hj129x5vo1rt29yYMn + 9/jwg/s8vneVC6cPyvi9iJldU5jaOJaWuirqa8tU83dSdQn11WVMmVillnvt7WhW0Tm1ntbGcfKMFDCp + rpKeGVNYsXwO+/Zu4vSZA9y4eZY7Dy5z895Frt06y/nLxzh97iBHD+5k97b1bFq1hNWL5zK3v5v2KY3q + M1dZUUR5Wb5qAKemxP2LAVxAi5K5Iec3o3sy06c3Mm1aAzNmtLBy5RwOH9nGzZunuXPnLLdvn1aXr149 + welT+9l/cCs7dq1j3YZFrF43h83b53PgyCrOXtzCpRu7uXb7ANdvH5ZzPMKV6wc5eGg9CxZOY/Lk0dTW + 5lKqzK9fk09D02hm9Dazb99Gzp8/zLHju9QS16OrCggIcsHG3lA0j1KhxFZgg1+AK3GJIVTJ++0d9XR0 + tdEwuZHy8ePIq64lc8w4UitqSascT/HEqdS0zaSxeylTZ6+ha9FmBtbspXv1Lio6ZpPVMJ3cxi6qO+bR + u3wH89ftZeaSzXT0LqOtcyGtHXNk3zOY0NBO1bhmSseMJ6ugnOTMPJJSs0lIySAmIYXI2ASi4hKJTRSd + mpdP1dhxTOn4dwN4qdyXVfKMKwZw/9x+aibVkpydgnewL1ZONpjZmWFsbYSBhb5ADwNLXYyElxmJXjES + Pqb86djQVuFluoMQDvVPmDmIZnUyxFq0nY3oQTt3czUr2NpVtKeDDibC5UztdeQ4esLpdLB105JtNLH3 + HIWDaBgX4bteQdb4hTrhE+aGf4QPYUlR5I4ppXmgl6W7d7Pt4jX23X3Kvkcv2HzzCWsu3mPNuTusO3Ob + TSdvsHrvSeav3c60gfmMbZxMRmEBUUmxhMWEEBEfRHSCP8GRzviH2RAa40CE8IXwaNGh0dYEhpkTLONy + eKSMz3GOxMY7ERltR0iYFf5BxqoBHBRsTFiYiehbC4njNsKLLAUWZGU5UljoIVzPR0VZiSclRR4U5rsK + p3Yk/2dkZ9oLP7SSzxoJjzKU+2dJTp4LBUW+FBUFqQZwZnagcCKJG+nBlFVlMKm1hqn9rfRKf1q5ew+7 + L15n+4V7LD10gylLj1M2bQcFk3cyoe+0XKOXHL3+W248+w8ev/wtj559yeMnn/D00cc8efCSuzeecPXC + HY4fucCuXYfZvGUXmzZvY906iX+rV0jMn8fyOd3M71HmvWtg0YxW1i3oYduqeWwVbJE+sX2N9LFtqzh3 + bAcfPLjKl599wPMP73Hy9FHmLFpEY0cXY1rayZ3QRETJGDzT83CITcQmLBzrAD+sfdyw8XLB1tsJG097 + bAV2Po7YeTtgLf3L1ssOZ8UEDhD4O+Hs54CTr61q/tp4mKnZ6Bai9SxEC9iIrrATPeTib45HsJU8x9I3 + w+wJjnYhIsGT6BQvuf+ehMY5ERprK8v2JGQIR5f7kl3iQZagYEww1U0ZTF/QJM/PGnmO9rHu5BGWHD3C + 3EPHmX3oDLMOX2Tm4avMUozfE49Ycu45y849Y+a+87Qt28yk9n7qGtokjrUxe/Y8Vqxfz5I165jc2U95 + TQs14zvo7VvBth0nOHfhAbfvvuLqjQ84Is/sAunrU6cr83UvUktEH5dn+czlh5yUe3zp1nNOX33CvlM3 + 2Lz/rOAce0/c5NDZ2+w5cYXdxy9y8Owlzly9zqXrV7l6+RLXLp3l+qXTXLt4XHCSq+dPcOP8Ma6fPczV + 49u5dGAt57Yv4vymWVzdOpP7u2fzYv8CXu2bw6MNU3i6YTIvt03l1bZWXm5v4fM97Xyzfxpf7mrm8y3j + +XzDaD5bXczHK7J4uSiF5wvjeDonkscDodzt9ONmuxeXWlw4M8mR0/VOXGrz5vr0QG73hHKrO4Rrnf5c + m+43mCXcE8LlzhCOtASwbaIvy8f6M7cqhP7qCLqqY1VdUpcbRHmSO5mKARxkQZi/UurZAF8PfbXsc6C3 + mehLY7wkrrgLD3Ox08TJXikZqYuPrxlBimkcYUNcjPS9BAfyUhwoS3WgOtWWsSlmNKWZM6PAhrll9iwo + sWJhoSmL8s1YUmDJ6tHOrKxyZU6pHW1phowJeZci/9fJDX6L7JC3yAx7i/SIt8kMf5fs8PcGS0Ar2a9+ + 75IknDfVTyl7PIJM4btZYRqkh41SkRWpoSJFOHCc7zuqAawg1u9N4fXvkhD0DvGBb/1sCL8lPP99NQO4 + JFqHsmhdKmP0qYjSoyhch/wQTbIChqtmc5q/7F94bbpohBQ/LdICdEgN0iclQPSCr44cQ1M1gEOchxKs + mL7O7xHq+K6KMFmO8hhKkr8WGcLz8+PNKUu2Em2lwFKdC7ggRk++p+w/eATJSnbv/8gCTgkY9i8YQVrg + CLkOI4j3fp9Yr/dJ9BlBepA2mUFa5ITqkhOsJ9toqVnHYR4jRZdr4uch981dnwBvE8L8rIjytyHcx4Jg + D1MCZTxRECDjS4CbOa42+lgYDcdQ623M9N/H1kwTRxtDdb5fD2dL3OwtcLYzV+Emet3d0Vb0vmIAW2Or + VEy0Vn6LMMDWSR9ndwN5XkwICTAmQrleQbqUxJpQl2LOtFxL5hRZsqrMnE3lxmwp0WFz3ki2KvP5Zg1V + DeCdRaPYXaLFnhJd9pTpsqtEmy35o1if/T4r099mceIbzI0dwvz4N1iSrJjCw1mbp836AgOWZ2jKe+8y + I/A1wRAWJLzP5hLlOEZqpvCmQgPVAN5VZsa+0VbsGW2prlsQ/Q6zgoYwSzGNw4ewJ/19Lo/W51GDFc+n + OPC00YJHk4x5ILhfZ8i1Kg3Olb7PycK3OVHwOhfK3+VG9Qjujtfg8SRtPmwy5GmzgZoJfL9eg1t1GtyY + oMWVOl0uNRhzrdWBO70+3Oz15WyHCwebLdnbZMbOBjO2TjBmY40J66vNWTfanJWlxiyU7zcj4R3a5Nxa + BVMjXqM/+R2WFOuwabw1R7sCONOvzAEcy6WZcVwZiON6f4wcI4K7SgZwux/nJntxqN6TXRP9WF3rx9wK + P3orQ5hdn8PmBZ1sXT6XgfZGxpVmC/evVA3gujEFavnn/PQY0uNDRGf7ERXuK2NwEr3CZY8f2y088iJb + tm5k8eKlrFi1jh07D7F92xEWzlcygJfQ1rGE6cLZVAgXU8o7d/atpKt/FTNmrh7ErBX/jQFB/wrhW8vo + 6l1CZ+9C5i5azZadh7l84wEffvwVn37xPZ99+SOfK/jqJ774+jd8+c3v+PpbwXdK9u/vfoGSBaxs+5F8 + 7pFw/9v3nnHi5CU2bdnD7DnCJaf20NMzl+XLhW9v2isaZi/z58k5Tu+jsb6NMZUTqCgbS0X5WCpLpS2p + oay0htLiKkoEebll6rRcqSm5KtQpu5TfbJLSSYpPJU4puRwRT4wgISaF5IRMUhKySInPJDkuU9alEReV + QmxkMrERSbJdEtFRycQIYqNT1OVoeU9pY6NTiY0ZRKLy+cRsEmUf0bKPkNB46XfheHoqf2YOxssrFC/v + EFmnZPxGCt+KJzpW9hEnHDc6kUBZ5+nlj4OTO1aWDpib2WJpZoetpaP0azc8XL3x9/QlxMefmOAQcpIT + GSeaeerEcfRMniS8ZgrzuqfS39ZET3Md3aKJB9oaWdrXyZZlc9m7bil71i5l69LZbF40wKZFvayb18Xq + 2dNY2dfOCsUAnt7Coo4mQQPLRbOsHehg60LRy0sGpO1jjbxe1dfBxnk97Fm5mNO7NnP56D4uHt3P1dPy + PJw6yMn9O9VsYGWe31Xz57B7w1rOHNzHldPH5f3jnD1ykAtHD3LrzAkeXT7LJ/dv8rcfv4Xf/Qi//ga+ + /5y/Cvf67Yd3+f7eZT6+dIynx3dzZctKDimcTc5xTUMtiyuLGchN+yVTty8jSZCstv3pspyaSE+qvJeS + QG+ytIlxdCcpSKA7JZHu5GQ6UwahGMCdivmbnkx3RgpdGfLZzCQGslKZlZXG3MwU5qclMy8pnjlxMfRH + h9EdE8r0uGDaE4JpSwphSnLIYAnotGAaU4OoS/ChIsyFVA8LvI1GYjPqHcxGvY+xxjB0Rg1Fc8RQjAx1 + cHOxJzI8mHQ5flxsBI4ONujqaKjGr7bWyEFoavwPaP0CLQ2t/9MA/nZlJF8sCeHDAQ8edjnyap4fP22I + 5a+HMuFUHv95PJO/HM/gP49l8ucDmfxqYyJfL43kVb8fj9qcuTXJglv1FjyYbMfTqW68mhHA531hfNYb + xidCeF5Mk+1aXLk9yZartaacKdXmWMEIDma/x8Gc9yQQj+R8uQ5Xqgy5VWvC/XEWvGhx4vv+YH43P4bv + hSB90ubJ4zobbo825FKBBpdUA1gCc8Eo7sogoxrAE8z5rN2J/1wdC6qBXQgnCvnTlmi+muUsg4ERL+p1 + +KbFmF9PNhWYqfixxZCvG/X4ZIIGLyXYf9VixLdtpnzTbsx37aZ822HO57L9s3F63KnQ4GaxJnckeD8o + k4Gi0oQnFTLYlGnydIw2z8fr87EMBp+0WvFFlwNf9jrzoFkGnTotbskxnk235GWPDS96rHgxw5IXXWZ8 + MM2YD9vl3KYa8HKqoXwHQ76R9b/qs+QPs+35y1wX/mO2M7/td+JXM5z5ocuFVw3W3K4w4GTWKNZFvc0M + zyE0OA9houebjPUbzmh/bcqCTCjwMyfDy4R0QW6gBQVBlmT7mxAvJCPafRTxfjpCrv5pAI9SS0CHexuo + BnCMvxUxfjakiBAtTlPmmowlPyWclAhfYgPdhITYqgawq60hLjYK+bQUsuImcFWNXzdbU7ydrWSfdgT7 + iNAMVjL0HAiSfQYqZmOQMq+ni2psKhmwIaGOQlTtCQyU/fopc0wZYO2sg72P7DvCUeCMY4A1lkJ0je0G + s3+N7HRElGujbTISXZNRWCgZui4iup0sMLU0ULN/dY1lW3MR6NbGmNmY/LcBbDFoAJta6v+M/7sBbGVt + hK2dMU5CqpxdLHF0NlcNYCfXQfNXgVIC2kM6sI+3DcGKERsh3yvam6goL4JDXCS42+DoaCz70lbn11Uy + bD29rAgJVExdD+nYntLK9VOyecNcpYN7yyARQHJSoAwYvvKeK8GBypzBTiQmeAt8ZHBxI0ruT2yEMkeB + Umrb5d8M4PBQB9XUion2VPFPAzhKtlcysP19rXF3M8FDoMzJHBRgR6C/rWoAK+udHfX/zQB2kfMOdLMg + 1t+RCHcRm3INXYV8epiOxMtKGx9rPXzlOvpY6OFnZUiAjREhQjLDHM0Il2sW4WROpKMFoXYmBFnqEmAy + jARHDepibVhVG8Pl/gq+WN3C79ZN4bdLJvKqNYez2V7sCDVluasGsyzfYcDyfWZajWTAahSzbTVZ4qTN + KnctVrsNY4PHW5yM1+JRqQU/Nnvy965A6PSBdnf+WmfJD4WjeBH7Oo/DhvBQcD9yCLdjhnA9TpAwhCuC + S0lDuJY6hLtZQ3iS9xqflrzDD0IQfyex4/ct+vy2TY+fOg35qd+M38yz4g/LHfj9Gkf+Y4Mdf9hgy1+3 + e/K3nWH858YYfpwfwdNpgWzPMWWK+9sUGg4hU/d1snXfokTrTUZrvcF4nbdpMH6PZvPhtNhq0Oisx0RX + PcbL81/jrke5hx4FLjpkOGqSKkhx1SXFw5Akb2MRNGZEi/gP9zQi3EvgYUyIuyGBQuY9bbVws9DCyUQE + gfQBR8NhOOq/gYveELxNhhDtOISK8NeZVa4lJNSJJwuUeeAD+XSeP0+6vThea82cRC3KvIaSqPxb1uEt + /GxfI9BhCIkeQ6iMGEJ/yRtcWmzDVyf8VEP3P58G87ePQ/nD8wC+ve/L53e8+eKWF1/cdObTy6Z8eVmu + 23ULfnPFmp/OOfLVMQ/ubnDi4IA1C8ZrMSnzHRFDQyTuvE2ECDl/by38feT7BJgTEmwlz6gJ7nJd3N0M + 8PO1UE1gf+9B01eBj4c5XiKMvFxNfjaALVXTNzLGjYgoV8Il3vzTAA4Ll74iCAl1xlf6ga+IrFjpczVV + uUKAp3Pk0AZu3TjKh48ucf3CAXZsWsiCmZPpbBnN2JIkynMiGFsWT3VRNGWZweRIn0yPciI92pHMaCey + YpykdSQ53J5wX3P83P7dAFZK0ivzlBuYaQ/+GcVcS4VScUCBsZXEIXMN9C1HYmqviY2LHnZKPLQdjpPV + ULwdRhDgNJJoD00K4uypLwlj2tgkGkrDqcr0EbHqSUGCC5mR9qSG2avnkRbhRJIsR/pZyue1cbYcjqv1 + SBGRo1S42IzEyVoTe4GdlSYO0t+dHExxkP5rLXHT3EIfQ2MdDIz1JLbqoW9uhJGVqcRSEywcLHD1diQg + xJWsrAjG1WRQV5tGVXkMNRUx1I9LpmFCCvV1KcyYXsKCOeOY1VdNzegoIdAy1kSY0zwplVVLGpjTW8HE + qkjKsj1pqY2jfUIyk6vjaKmKoa0mnqljEwRxtI2NlDaE6RMC6Zvoz6yJPixq9GZNq5+QvxB2doexbUYY + W6Rd3xHI6lZfVk/xZeUUP1a2BLFycgRLGmKYPS6WaRVRNBZGMj43kuq8aMqzYyjMiCErPUrEQTRJSdHE + J0YQFx8uRDycOGWO4PhoUlKSRDikqkhNGTR/kxJFLCgiIkmIfnKOitTkAhVJyXkqBg3gfNUA/mcZaCUT + WDGDU5Q2Q1mXT2b2P5FLVk4e2VlKBnC2HDeNpIQEdR7TwowoarPCaMn0pTfdmWUZtuzIteFUmR33J7jy + Qb0Tz+tt+XCi8I2xIm7HaAp/Gca9kvd4UjaCF5W6fCzC9fPxlnxcYczjzJHcTx7Giyxdvio05cdya36o + sOb70TZ8W2XLN+Ps+WGiC9/I9XwlIvVKayC7x3uzuMKT9nxvxucFUZoTSVZmNMlyvaJDA0SMyHjjIeOd + jP+x4Y7ER9hKa0VSjFKWzpbUWCuBJSmC1BgLgRmpyrzA4UbEKVVKfDWI8BklvESHuEA94gP0VQM4OcSQ + jHAT8pTs3RglA9iUwjgT9ceaylQrlPnAKpIsqUyxkWXFBLaX1oHKZHvKE+1Q5votTrCRz1qQE2lGQZQV + hVG25EdbkS3LmZEWZEaYka0cI8yQ4nCD/zaAQ7ToC9BldagxO2OsOBZvzTk5h0thBtwI0eG6/wgue7/D + Fe+3uBbwDnfDR/AoRkfFvXANbgUP56rP21xwf03FNV/ZJmQUD8JlDItUoMnjKA2eRivQ5FmMJh/EafFR + oi6fpBnzVZ4lX+Va8mm6MZ+mGvF1ujk/plnxQ4I530XL6zA9vpBr90WQ7iCCFejzhVy3zwN1+MRfixe+ + o3jmM4LH0j7w1uSWlxY3fQ24E2LFHYljtxLduZDkwZE4V/bEe7IjxZ+t6cGsywplZW4oi3JF1EQ5UOg4 + inCdIXgOH0KgifBIJ+F+TrbYmxmrJaC1R43CQFdXYrcLySJgamurmTBhHBkipFyc7dHUGMmo4cMxNjGU + WCMcy9EeJycHrG2tMLWQGOTsQHRcNGOqRzO6qpLcglzpNykSw0Use3lIbDJDV1e4ip2V8K5QNbM4Ojpc + hLSbxC8b4U3BjB9bRcfUFlqa6iQ+VVJdqZSbr2POQOcvBnBSbAjpiSE0TShmzbIeifvz2L11Pgf3DJq+ + R/YrBvAiFcf3LVQN4KPr2tg3r4L93cmc743h7kAoH80O5IuFYXy9LI5vVqfz2ZosXq0v4NmmEm5tKObs + ykL2zs9m48wsVvfls7KnnGW941jS18zyWZ0s6O+kb9pUuqa20T6l+d8N4NS4wRLQSVHUyeu2STV01FfT + NqGCtroK1QBuqi1mYmXuvxnAY8rzGVtVos573DCxltaWeubPG2DVqsUsX7WE+QvnMHvBTOZKq2COUvp5 + dj9zZ/awYFYv8wd66JzSxMTqSkrys8gRAZ0lgjc1OZ74uCjVZA/08Zax2FPgLmOzh/R9ZQqCGCqLc9U5 + lidPrFZN2K7JExlob2JuZyvzOtvUVjGAF87rZt+Bzdx9epOHnzznyvOPOXr3OftuPmXH1YfsuHKfndce + skuw+/pjdsm67Rdvs/nUZTYcOcW2o0c5dOYkF69f4t69G9y9dYmzJ/apGcADnZPpaJ5Aa32tmvGrlIKu + FzTVynWTazhoADfRI+c1vU2Z87iGytJseW7KVGN21Sp5Dg5u5czZg1y7eUY1f2/cvcD12+e4dO0kFy4d + 5cyJAxzau41dm1azfvlC5g3MYFprMxMnVDNa7lVZSd6/GcDpabGUl+XRJNdk+rTm/2EAK8ecw7FjO7h9 + +wx3FQP41ilu3TrNLcUEvnKcCxcPcerMPo4e38aRYxs4dXaTnMtOrt/azdXbe7h2Zx837hzk1t0j3L5/ + TLbfzeYt85g5u1mOUcvU9ho6uyfSP7OZxUu6OHZ0KxdlnydO7mL1mnnU1BYSGKTMry06z1UxgG1wcbMS + neYq5x5B46Ry6T9yD+d0Ml2u71h5roprqsgZXUVa6RjSy8dSMrGNqpYeaibPZNzUOTT1LqVz8SY6lm6i + cHIXibWNJNc0Utwo+1i4ntkrtzOweAPT+5bS3r2A1o5Z1DVOU83f4grF/K0gLiWbkKh4fAPD8PQNwMXD + CwcXd2m9cff2Izw6hoKSUrUM9L8awIrxqxjAS1YsZlrPNPLLCwiJCcXOzQF9C0PhZAbSDk4fpCP6T9dM + Cz1zbVmnQBM9a+FkNsLTbHUGYaerQjF/lSzgQQPYBBs3Y2zdTQSmPxvAoiXtNDGz18JKeJy1qya2bsKz + RHPbe47EQeKuq8Rd7yDhuaKDfYIc8REu5R/pS1JeCjWt9cxct4KtZ89y6P5Djjz5kJ13HrH91mN23HzC + nhtP2X/tCXvP32HTgdMsWrONaX1zKa2uITEjlQjhLGExQYTH+OEf6oRXoDWB4bYER1gTFGZOULiFagCH + yeuoGMX8dSY20YXoeCfCo+wICjXDP8hEtKwJEZFK6WdrEpPshYPYynNsRVqaA7m57hTne1Fc4EVRgQdF + +e7k57qSk+n0CzIzHGRbW+FGZiQmyhifbiux3J2CQj8KCoLIzQ9WS0CnZUrcyAqnsjaHKV2TmLmkn2Wb + 17Dz1CnOPPiAY3dfsun0Y2asO8+4vn2Mmb6fyfMus+bQlxy9+QeuPfsLD1/9kfsffMPDp5/z9MlnPBE8 + fvAx9++94JrEjtNnr3H85HnpO6elXx/k4N6d7Nu6gR1rFrFhcR+rZrezalYHmxb2sFP64c7Vc9m+UtpV + czmwaSkn967jzsUjohEuc0f6485d62mb1kp5bQ0ZZRVE5RbiGpeIZWg4Jv7+mPn5Yu0vz2mAO04BbrhI + H3LydcTOywZ7XzsV1p5WAmvsvZRSz4NwkvWOPtayncWgAexigrmrPG+iJyycdbGSZQfRg85+prj5iQYK + ssY/3OHnUtDuhMe7ESj3MCDSkuBoS1knHCzNhpRcJzKKPSmskevcmEFzfx2Ld65k/fH9bDh7mhVnzrH0 + 3BUWn7vJgnN3WXD2IQvPfsjSC69YceVzVl/5mMXHbtG/+SAdA4tpmtwpcWwKPT39LFi+nIUrV9PWPZvR + tVOonTCN/oFV7Nx9mkuXn/Dg4WfcuPWcE2dvs0T6+/TuhXT3L2XDtiOcOn+fC9eecvbyI67KfT534wMO + ynbbDl1g68GLHDx9l2MX78u6m4JrnLpyiyt373Pr/l3u3r7FvVtXBZe5d/Mi925c5q6MBfevXeDelbPc + OXeIm8e3c23/Gq7uWsLtPQt5cnAxr44u55NDi3i2tZMPtrTzasc0Pto+Vdo2vjrQzQ9H+/h2fwdf72ri + y63j+WJDBZ+uyePlsnReLEnk2bwonswM4363H3emeXNtiiuXmpy52OLCrel+3O8L5fHMCGlDuNXlx43p + vtyU9lZvEFe6gznW6s/2em+Wj/NhbrXomapQZlRHM31MPI1F4YxJ9RY+qhjA5oT7m+CvGsCGBHibEuBl + ir+bEZ6OurjZauIicLZTsoD18FHeVzKApa/HRtuRKloxR/ptaYqdcGBrqhNNmZBkTHu2BX1FovlLrJhX + aMaCfDMWFViwcrQTq2rcmVfmyNR0I6pC36Uk8E0KlTLQ4e8KZ35Pzus9ciOHkhc5TNYNIztIMYDfIVkx + gP0HDeCMkJEqFPM3M1yT3BhtFRmhGiQGvK9mAcd4KyWg3yYx6H3BeyQEva2WhFbM4LTQoeQKFy6N0aM8 + Rl81gCuj9SmJ1CU/TIuMwOGk+A4l2Wc4yd6jSPPTItVPm1TFABaOnuyvS4Kv9mAZaLcRavbvIN4jzOld + QpXsX5f3ifGUzwdoky66I1c0SHGCBSVJCkwpSjD5fzWAU+U8FKQFjlShlHZOFm4d7zmUGI+hJHiNUM8p + Q/h4dqgBmUF6pIimiZJzVrJ//T108JV76+1pRICPGWH+1kT4im7ykvjrYoinjDXuMu64WuuIXtfGwVwD + U9130Bv1umoCWxgOxcZUC0cbA5xtTQRmsmyKk425LFvgIvzYzd5aNYAdRLNb28r4JBrfyc0MDx8L/P0t + CfE3E72mQ6SPhpyjDmPiDZicZUZ/oQXLy8xZX2bExmJtNuYNZ4tiAOcMZ1vuCLYXjGJHoQa75L1dpTrs + KNYaNIDl/VUZ7w0awDGKAfy6agAvSx3KqmwNNhYZsDZPl6WpI5gT9Rb9oUOYFfUGK7NGsaFAl80Femwu + 1GdLoQE7SkxUE3hLoSGrMzWZH/0Ws4Nln4K1sW+wP2s416qNeNaszP1rw73xBtyq0ebGWC1ujxdNVq3J + pYphnC19l7NFb3G54n1u1YrerRNt1aTPyymmfDjZiMf1OtyeMJJrtcO5WDuK82O1OSX7Otdow/VOL+mz + vhxvdWZPgwU7GuR8JpmxvtaYlZVGLC83Zlmp6S8YSB9Fa+TrNMv3UtCZ8Bbz8rRYW23OwQ4fTvSEcLYv + hosz47nSH8/1vlju9ERytyuYa20+nG/x4miDJ/vq/Vk/zo/5FT70jw5iTn0W2xZ1y7i0kNnTWxhfmiP8 + fzSdjbXU1xRTnpdMaW4SGUkRxEb4ERHqTX5OIv097Zw+dVD45FV27NzG8uUrWbNuE3v2HmPXruMsWbSV + rq7lTBPM6Fupolti94yZsjxzDT2z1tI3Z93PWPMLemevpnfmKnoGVtI7sELaZcyct4IVa3ew7/AZLly9 + y9UbDwWPhJ8+5sbtJ9y880zwnLv3X3Dv4Uc8ePySh09e8ejpxzx49FLd5pzw+6PHL8r5nWDFis1098yl + bmIrY8ZMpLm5k1mzl8h32MSSJeuFP89Wzd/RwhPzc8rJyykbRHYZuVmlZGcWCw8RZJWIdilSp+VSpuhK + S80T5JKuVG1Lzho0ghMzSIpPI1FBXDqJsRmCdJLilPVZJMdnqsvKOsUMVhAv2ylQTN642DQ12zcuRtbJ + NgoS4uXzCfLZxGwVCYk5xMh+w8KTCAqKVREcHCc8KwZlDuDwiARiZT+JyZmkpGarbXhkPH7+YTi7emNj + 5YSZiQ3mxtZYm9vjYOOEq5Mb3m6eBHp6ERsSQn5aMpPGlNEpWrd3ykTmdil/vG1jYKpojKbxTJtYRU/L + eBZ2T2HTklnsW79EsJRty2azeXE/mxf2sm5uJ6tmtrOip43l0yezqK2BBaKRFgqWTW9itexv46zpbJk7 + gy1zulnTN5VVsu06Wbdr2TxO79zAlWN7uHHmEPevnubulZNcOnmQI7u3sFF00oalizgiz+KNsyd5eO0y + 969f5tZ50TwXzvBUlj+6fZWvHt/hb99/yd+++4K/fP6CP758yrf3rvHhuWPc2r+N85tXcWTpPLb0TGVp + Qy1zRc/PLM2nNzudaaJRpyXF05WcyIzUZDWrV2l7UpLoSU5iRpKsF/QKehLj6ZZtuxMV8zfpfzWAuzKS + 6Rbt+08DeGZ2GrMF87JSWZCeohrAs+Nj6Iv5vxnAwaoB3JIRSqM6D7Anuf4OBFvp4agzDAuNYZhojUBf + yQLWGIGJkTKlgwNRESFkyf4Vve3kaIvO/zCAdbQ0/we0f4H2/2YA/2pDHN+sDOfFLA/ud9rzsNuBVwu8 + +c32GP5+IpN/nMnmHxdy+dvZHP5yOJNfb0ng6+XhfNTvxb02O65MNOHqRFPuNNvyYIoLT9p9eNYewLOp + ATxp8+NekxvXxttxUYLd2dGGnFAM4CItjhaO5HipBNbRulyuMeLaWGMJtibcHmvG4wY7PpnuxVc9QXw6 + zUcCszN3as25IoPKmbwRnM+TwFygyU3Zz/0ypSSzES8mWvLZdBf+Y00M/ziQDefKkEjP3/en8utlvnzS + acHLRl2+aTbit1PM+ONUK/6jzYrfTjblh0Z9vpyozWeTtPiqyYCvW4z5aoohX7Wa8kWrGS8mGXBvtAZX + i4ZzRQa564Xa3Csx4HGFCU8qB7OAH1fo8MFYfZ5PMuFDGRBetFnz0TQ7bjUacWG8Flfr9XjYYcnTTmse + Tbfg4XQzHnWYCox5PNWYp60GfCjHfCXtVx1mahnq3/TZ8vsBB37X5yDLzvyqx5WfZnjwaYuDnI8Jp7K1 + WBH2Bh3uQ2gQ1Pu+y9gADUYH6lIaZEaevwUZQiIyfEzJDbakKMyKwlBLMvwNiBMiFC8EKT5QBnohPEGe + GgR4aBLmbUikr5mQDnMifCyJ9rMjI8aH3KRg0qJ9SQzzJMrPCT9XKzzsjIWIGOJsbYCbnYkEHHuCfZ3x + crYSEmqCp5MFPm5WQlbthFQ4EuRni5+IGF9PcwL8bQhVMlQjXNV5cAMCbSSoWQmUOYAtcBJya+8uJCbA + HH8RMn4x7jgH22LraYq5s/LvVyMsXY1FdBuKSNdAz2wUVo5GuHjb4CLHsxJSY6wYLObKHMBKmRMTLOxM + MZHzNRKBPwjFANb7Bf+fDGA7BxP1H/DOrpZqqxrAP5u/gzBRTWC1RGuAA6GhIr4iPNRsYOW1u7sltrZy + 3hYaWFlpCfkykHXKPMD2hAa7ECZiX2mDA+0JEfGvGLfxsT4irn1V0zY02IlAf6VMsxPJypynKYHEStCI + jnAjNsqDGNk+UinhrBrAItgDB7dVMn8Hs6z/xQCWbZUMbD9fa9X89XQ3VQ3gQLnXiimsGMDKemdHg38z + gF3t9PCT7xrpY0eYmyXuyr8N9d7HxXg47haaeFnp4iMBzMdSxIlcMz8bY/zlugfYmxLsYE6IvTmhgkAb + E3zMdPEyHEa03XBqIs1ZOjqc813FfLGikT+snswfFoznVXMGx1Od2BCgxwKHYcwwe4Npxm8y3WwYndaa + 9NhrMctRi3nOGixwfJflLm9wIGoUd4rM+b7Fm7/PCAWJIYjQ+luTIz+V6/Mi+W0eRQ3hTvgQbkcO4bos + X4kewmUhphcEF2OHcDV+CHeTX+Nx2hu8yn6Xr0tG8kO1Dr+qM+TbSXp8IuTwo2Y9Xk7V5/NeC76db8OP + S2z4QfC7Ve78aW0Iv1saxWc9wdxqcGdDqi6trm9QbjKEEtN3qTAbTq3xUCYYvk+D0VAaTYfSIN9pktVw + xtprMMZRg3JnTcpctSjy0CXXTZc0Jy2SZF2Ci/RZN33iFANY+kas9PHoAIEQd6VUUIj0Dz/pH+52Wrha + 6eAg19neVB8HY7lXhu/K/XoNZ/0h+JsPIU1iRkvy+2wca86lDhce9njxoN2Vqw0O7C4ypjtsOLnO7xJl + /z5BNm/K/RxChMsQsvyHMCl5CMvGvs3NlZZ8d8qTP97w5C8P3fnLB2785pEj39xy4PPrDnx2xZbPLpnz + 8RlNPjs9gu/PafH9aV2+PmrMp/tsuL/enuNzbFjRpEtb8TDyo18XwfcGEf7vS5wYjreHNr6+xhIvzKRv + KXNty0Ao39/HR+KCfF8fTwvZxkyglD0ywc3ZCHcXY3WObX+lVFKsB9FxHkSo2b9OvxjACkKkfyjmr6Ni + mHtbqHN3z+iqZ8/OVdy6eYLnH1zji0/ucef6cbZvFJLd08S0ljE01eRSX51F66RCmmqzGFcST3F6EFlx + 7qRGOpEe6UBahAOpEfbEB9uIeJP+5Srnrvyh4mcD2FQEmp7EFj1TTfRFsBmYaqgwkj6lwMBc1psJAbAY + ibH1CCwdNLG2HymE720RfW/gYf0WfvbvEC/CsTzJlrYx4cxqTKVrbCwNRYHUZnlSnuIiotmatBAZ8GU8 + SA6yIM7PlBB3uX52I3C1fA9Xi3dxk9bd8n3crIfiZqOBq/JnDzvp7w56uDia4GBvIjFL4qPEQz29UWgL + NPVHoWUoxMJYX1pdDC2NcHCVmB7hRUFeLBNqMqmrSWFspSxXxdE4PoXmielMacxiZk8lyxYKeZwznvE1 + MUKgrYmPsqS1KZ21y4RY9lfQWBvJ6DwvJtdE0zkxiXbF8JVtp40VEjc+SSBEbHy0tOH0TgwRMRTMwkZ/ + VrYEsKkjiF1dIezsCmJbZxBbpgWwvtWbtc3urG3xYLXEhtUtfqxpCWNFQzRzx8kxyiNoKQylLi+ccXmK + CRxLeW4c+dnRZGXEkJoaTVJKBHEJYcTGCxQTOCGKpKQEklNSSElJJTk5TV6nkpgoy0lC9pMyhbDnqEhN + zlfxTwM4RS0HPWj+qlnAmYXS/mwIqyZwrqzLJ10p+fy/GcDJipCIJyM1lrKcWBqLYugpDmFpkSdbCx05 + VmrLlUpr7tXY8LjWksfCq56ME65SrVQxGcXtYhG+BW9zr0jJBNbm5RhDPqk25WWJHk/Sh/JBxnA+z9Ph + exHevykz4dflJvyqUrhSlRnfj7Xgp4m2fDfFnedT/bjQ6M22MS7MK3ahJcuNMZm+5KQHy3UJIyZKKUfk + g5+7Ax5O5tJKrApxJDHSmcRo6SdxjiJQnchMdCAjwZaMeBsy4qwFlmTGmEsfMhmcpuIXA1iXuEAD1fxV + kBhkOFgGOsqM3GgzcqIVM9iYokRTNQu4LMmC0gRz6SOKGawYwA5Upg6iQpaVuX6L5Li58vmcSFPyIywF + NuSEy/HDJSaEmkn/UUrKGZETYiAcSv8XA3iSagBrs1re2x1lwfFYKy7IOVyRbW6GaHPTfwTXhZNd83+H + WyFDeRitwbMEfYFwwWgt7oQO56rf21z0fE2Fst0/DeAHEZrSanA/YiT3w0fKa1kfMYIHkSN5EqvJh0l6 + vEo35lWGMc9l+Xm8Dp8lGvFtshnfxprydYQBXypZv4rxK3zwFxM4SDF/9fhczvszfy0+9tfgpeADwRNf + Le56ynn56nM/2ELGSQceJrtzM8mdswmuHJX2YJov+7KD2JEXwuaCENbkB9ITY0+ViwaJRq8RbvgmMfYy + PgkXDHW1w9nCFFNDffS1NaU1xM/Hi6ysdCbWjaehYRI5Is483J3R1VH+oSqxzsRQ+JbFLwawUgLaXCkn + 7elGcmoS4+rGUTuuhqLSIrJzs6SPiVgODsTGxgp9fV3hVRLzY8JJF4EWGxuJj68HTs52wjNDqBtfQ8+M + DtqnNlE3ruoXA3hufycLfjaAk2OD5VkMpnlCscSiGezYNJfdW+dycI8I1AODOLxvgYpje+erBvCRdVPZ + O7eSfd1pnO9N4O5ABB/NDuXz+eF8uTSez5en8mpFJh+tyefJxlLubCzj4toyjiwvZduCYtbNLmNF3xgW + zxjPor7JLJ/bw5I5vTLedNPb1Ulneyvtkxtpa5pATWWhagAr5Z/z0+OoG11I68RqOupraB0/aP4qaK4t + ZtLovH83gEtzqR5dxLjaMuomVNPcNJFZs3pYsGgWfbN7aJ02heaOFiZPb2XytFZ53UpnZzt93R3M7u1i + bl/3LwZwaX42OXKNc0X0ZqYnk5wYS3RkqHBPf4J8fYXre6tzAseGB5GZHEulHF8xgJXs2zYR550tdfS1 + NTC7o5k5cszZ01oY6Gxh3uxOdu5Zz9V7l7j29AFHbj1ks5LhePomK45fZfmxyypWHL+ivl569CKL9p9m + /o7DzNm0k4WbtrB+9y4OnDzChUvnuHHtAqeO7JF7OZfeac2qATyYBTyG+tryQQN47KAB3DV5AjOm1tPd + NokOWW6eVEVZcQY11UVMn9bIsmVz2LdvM4eP7lTn5D36M46d3sfRk3s5cnwPRw7u5NCerRzcsZFt65ar + WdPd7ZPVjGulBHR56b8awOEyZkRRUpzFpEnVTG2r/98N4KPbuX3r9KABfPs0t26fVI3gm7dOcl14ypWr + RwQHuXhpF1ev7+Tm3b3cubef2w8OcOfhQe49PCw4xr1HJ2T7Axw6vIp1GwZYtLidJUunsWpNDxs2zGL7 + 9sWcPbuTGzcUo3gfGzctYrz0gyDRJTZ2+tg7GInmMcdZEBToIvc/kqnNo1k6t50Vi7qZ2d9GQ/M4ymsq + yasoI6O4nKzKcZTVT6V68gzGNPVQVjeN6tZ+mmYuY8qC1RRNnk5i9UTiK8eTPaGF5oHF9CxaR+/81Uzr + XcTUzrlMbu9nfH07lTUN5BVXkZJVQGRcKr5BETi6egkvchb9ZouxubUsO6lGsF9QCOk5OaoB3DOzn/45 + A8xZNJdlawcN4HmL59LY2khSdgqegV6Y21ugYyp8TDiZrmhAHRPhNgqEmylQjGBVZ1qOQt9KeJq1FsaK + Efw/DGAr4Z//bgAbDxrAjtqY22lioRrAWrJuFLZuo7DzGPmzASy8y0cPL+G53gFWAlu8AuzxkWsfKeNo + ofTntjndrDuyn/03r3Hw3j123rzNnruP2H/vGYfuPuPonQ84eftD9p+5wYZdR5i7dA0TW1rJKS4iTp63 + 8JgQgsO95Rh2ciwzfIIsCQizwD/ETEWAjHWhyvQMMibHJboQn+xGfKIrUbEOhEWIPpT3QwSRMtbFy5iZ + mOQoHMRedKgVCfEyZqc7kyvj/y/IdiU701k4itPPcCRNxt2UFHuBjfAfG9KzHMnL9xD4CQLJyQ8mJzdE + +E4IWbmRVNbm0jajkfmr5rJqxwb2njvDhcfPOf3gU3ac/4CBTZdonHOIhpkn6V39gO2nf8vx2//JpSd/ + 4fbz33P76Vfce/IxDx8reMmDhy+59+A5t+9/wOUb97lw5ZbEiWucOXuGMyeOcPLQbo7sXMfe9UoZxF42 + Luhiy6IZ7F45k92rZrNj+Ux2rpjFgXXzObZlKZcOb+bWhb0SYzaydEkv1RJb02RMCxde6BkViWVAAIa+ + 3uh7uWEuY5FdkBeuIR54KPP6hnngFuiMvbc1dt5W2ItesfWywtrDClsP0SU+Njj62qoGsINqAJsPGsCi + zS1FT5g7K+XI5bly0sFGOL296CNHLyNcfEzlmZZ7KxokJM6Z4Bhn/IXT+CgmfpgpQcJRQuNNiZHrnyLX + vlA4dkVDNuM7x9K3biHLD+9l/YXzrL50neWX77LkyiMWX3nG4ssvBB+z9OoXrLj+NetufM7q849ZsOsk + 3XNXUN/UzrixdbRNbad/3jwGFi6mrXsmY8ZOYeyE6fTPXM2u3WdUA/ie3L8bNz/klMT25Wt20dW3lN7Z + K9my6wTnLj/iyq0POX/9iYwDrzh/4wM143fHkUvsOHyZo+cfcOrqY45eusvxy7e5cOsBtx4/4f7Txzx8 + 9IDHD27z+OENHt8X3LvF4zu3eHLnJk9uX+XJ9bM8uniY+yd2cO/oBh4dXcUHx1by8tgKPj60kI/29PPR + jk5e7ZzOi+3t0rbzzeE+fjwxk+8OdvLNnsl8uX0in20azSdrC/loRTrPlyTxbH60agA/6gngYbcv96f7 + cG+6tJ1+POkP4cW8GF7MV0pFh/OgJ5C73X7cnuHHnd4ArsrrEx3+7Gz0Yvl4L+ZU+TKjMoDpFaFMr4xh + clkUNRnCqZU5gEMsiAwwI8jbCH9Po8HsX0VfKpWhHHRwtdVUTWBXRb85SjzxNMHP35KwUOnX8gwkih5M + F55akGBFifDiyjhjahMNmZJlQXeBFQOFFswqMGVuninzBEtER6wY48ZcxQDOMGJs5HAqw96jLGoYxdHD + KIwdTn7ccGlHCEZSGDWKvLChpAW8S6r/e+ocwIoBrBimKsJGkR2lLZ/RVZEVqUVqyAgS/N8mXriwkv2b + GDRUNYETgpRM4LdJCn2PDDluQawWZXEGVMQaMDpGX0WZoDBSRy0zrWQAp/qNIMVXMYA1VBM4RThusrRJ + vtqilTWJ9RQd4TaScNdhg3B5/xdEug0j1mvEoAEcZijnaUpBnJlA2nhjaY3I/38xgNOChqtIDxr1M5Tj + axLvOZxot6HEecjn/HTlmhiQKbolPUiPJH89onw0CfJQsn/18PE0VKuc+XlJvPU2J1j6vJ/cX+VP/U5m + I7A3Ga7CznQ41kZDMdJ8A71Rr2Gg+SYmuu9gpj8cC2NNbMz1sBddbmdpiIOVKY7WZjjZWOCiTKniYI2T + wNFJWldrPH3s8AtwIDhI+a3WkmBvfUI9R5ESoJju2jRmmNBbaM6ycnPWlhmxvliLdTlD2ZQlyBnOltwR + bM0bxbZ8DXYUarGzRPsXA3hdzkhWZQz9dwM45T2WpSkG8Eg2lxqxVTTm2lxtliQPZU7UGwxEKKWi32Z9 + nhab85VS0rqia/XZVmjI1gID1mVqsiJ5OAuj32Ju6BCWRb7GDtGtxwo1uTXOlKdNon0nGHGlYgSXyoZx + uXIYN2pGCbS4XqXJ1aqR0o7kdo1i/mrxtFGXl63GfNpuyYspJjycpM212mGcr3iPUxWyX9HMByu1OTzW + hNPNjpyc4sKeemu2TDBhw3hjVo81ZGmlLvOKtJkjunlungHz8o1ZVGzGnFx9pie8x5So12mLfoMZqcOY + J99nVZUFe1u9ONIZxMmeKM71x3GpN07iQQy3uiO4NT2Iq1O8uNjixakWH460BLG9PoRlNUHMGxvB4sn5 + 7Fzaw541i5nX1crEysES0DMU7jqunNGFaZQXpKqVzKJ/NoCLlDlQBzo5f/Yo9yU+7tm7i9Wr17Jh4zb2 + Hzgp/PYUK5btoLd3Fd2CvlnrBD8bvnPX0j93AwPzNjJrwaZBzN/wC/rnr2fm3HUMzFkrWCNYzcDclcxd + uJ6lq7ayadsBtmw/JDjIFuHrW3/BMXbuPsmuvSfkHM5w4PBZDh29wP6DZ9gq269au4OFi9fL+LGMycIj + q6rryc2tJDu7jDFV9Uxt76N/YJHw5fmiKYUnlo8XXVkiXEMxdgehmLwqlGVlXVreL8bvfxvASquYwDkq + UpXfbZKy1NLQKQk5gmxS4pVlxfwdRJKSzfuzEayawQmZKpIUczc+QzV/FRNYNYbj00lQ3vunAZyUrf4W + pJjAsXGZREWlqoiOThMNm0pMbJqsTxeeJcdNyyEtPZdUaWPjUwkNi8XLO0gt+2xhZoe5kRXmprbYWNrh + JBzYw9kVP3c3EiJCKcpKpaGmYvAPrv9iAPeLzulqrGFqXYXazutqYsPCPvasXiDP1AK2LOlnwwJlXt8u + Vg8o5u9klog2WSy6bZ7ot/lTxrNgSh1Lpk5iWXsjKxUjWPa9RrCqq4WVoufW9LWxY9FMjm9dJVxpO/cu + HeXZnYs8vnWem+ePcVr00s51K9mxdqUs7+XhtUu8uHebD+/f5tH1KzJeX+LDW9d4dec6X9y/ya+fP+bH + J/f54s41Prp0hhv7dnBszXJ2zutns+j4Fa1NzBk3mq7iXKbnZDAtK52O5ERa42KZGhdHR0ICnYlJdP0T + CYl0JijtIGbIuhmK8ZskkOXu5BQV/zcDeEZWCn3ZqczKSZN+nsEC0cOLMgYN4FnxMfT+rwZwKFNSQ5mc + HkJrVjiTM0OpSw6gLMKDOBcLPJXYrT0CC51RGGqPRE9rFGYmBqoBrGjsLNl/wv+/DOA/bE/mh3WRvJjr + yd3pNlybbMT9GVZ8udqfPx9KgnPZcCWPf1zK56/Hs/jdzkS+XhXKB/3u3JpixbnxBlyQQHujwYrbTU4C + N+40eHBbcHOiG5dq7ThTac7JMkOOl+pzpESHo6V6nCjX5Wy1AVfGm3FtggXXxplwuXbQBL5TZ8XjFic+ + bHPnWYsr9ycoP2YackYGkxMy4JzJGaGasHfK9Hk02ohnY834qMmWz7vd+c3KCP66LwMulcONKjiVy182 + h/PdbEc+nWLAN00G/G6KGX9pt+avHTb8R6sFv20y5Lt6Pb6epMOX9fp82WDE57LdZy0mvGww5mGNDAal + w7iYr2AUlwu0uV1iwMMKI7UU9ONyPR6Va/Os1pCnMiA8nmjKo0ZzHk624mq9MafHaXN+kh63p1pwd5ol + t6aacbPNRMXtViPuTjHkQbM+j5sNeN6iz2etpnw7zYIfuqz4sduGn7ps+XWvM7/uc+dXvd580erMwypz + TufosjDwdaa4DaHJ53XqA4dSK4SjQkhFSbA5uQEWpPuaka4awBYUiogribKlINKCVOXH0wDlx1QdogJ0 + CPbSxN9dISEy8HsZC0xVMynE05KkcHd1HsmkcHlAg90I87bH28kMF2t9nK30cbU2wNXGCB9XEYnejng6 + W6n/PlN+8PV0NsfbTZm30lbN1lPMRk8Rxr5KSZNAW0JDHQkOtsfXz0ICmhlevha4+5rjLOfg7C37EOIa + nOhJUII37mGOIogssfU0k1aO4S8Bz90MQytNgRY2LiZ4BznjHeiCg7uVOiewkvGrZNtZ2IlwsjdXy0Ar + xrAyL7BiAv9/awAr5Z//3wxgBe4e5viKaAsKclJN4BBlPid5rWxjZaWLqekIzM1F/Nvqqtv7etsQFCDX + INBJbQOUDGnV6B2cH1kxbJWSzUEB9viJCFTWpyYHkpERKgOKkgXsrm6ntEr56JBgIXGybXCQg7x2+b8a + wKEhjnJsK9xdjX8xgAP85B79DwPY3k5HhaOtjpoB7O0kz4YI1CAnU7W8sJ32OzjoD8XFZBQeFjp4y/Pg + LYTTW66Zl7Ux3orZK/C3NR2EjVwfC2PcjfVw0xtOiIWIiSBD5pb4c6Itm48XjOPXiyfy64HRfDghgQMi + VlYKEZ1p/TZTDV6jSe81JpsMZaqcT5ezHr0uAkcN+mzeYo79a2wNGSbhypSvm334a28EzIyEgVD+PtWT + n6pNeZ7xHvdjh3BdCOZVwSXBhcghnBcCeVaWz4cP4bJiEMe+waOkd3iZPozP8zT5skSXr6sMeVmlx/3R + GtwYPZJr1cO5Xa/LBx2mfNxrwWf9Vnw715VfLQzim5kRPGn14+wYO1bEjGSK82tUm73GOLtRTLTXpUmu + 6RRLLSbLs9AkpH6i2TBqzd6nzPJ9Cm3eJ8de4DyCXHcdsjx0SXXWIt5Zg2hnTSJddYkUsR8vfTox3J54 + xWgMdyQmRMi79CFvZxkslFJQNnLvzA1FKBhjZ6KHg9wvB8O3sNcfgqvhEMKthzAmSEh5tjZ7qs05N8mO + c2OtOFZhxoZUHVp93iPd9h3CrN8n0OpNAmyGEO8xhOKwIUzLH8LWyUN5sNaMn04788drDvzprjV/fGDF + r+7K9b9mwueXTfnsvDGfndXj4+Pv89mxt/nuxHt8c2wYXxzQ4ONdxjzaaMuZhdZsaNenp1qDyrS3SQl7 + nXARhN5u78pzOAovLwN8fIzwcNfDVe63agCLMPKTGKI8u8ozrMDVyRBnB9nG2QhvTyW+2Au58iEm3lMI + kwOBQbaq6fuvBrC7hylWNhp4S1ypqspi88aFXL9ylJcvbvH5pw/56rNH3Lx6jA0rZ9LZNpYp9WW0Tixh + WlM5PR01zGirYvK4XMbkR5GTpPxBxkEEq52aaasgJsCSQHeJjXJPlHP7pwFsIv1E+aFR11QTPRNNlAoG + CgzMRgpGoS+tjtlQ9M2HY2Qlgs5+JNa272Nt8TqO5kOkb71GoP3rInaHU5tuQ++ECFZOy2LRlDS6aiJo + LvZhXJYLRdEWZIUYS7w3IslPn2h3XYIdR+Inz5iX5Tt4Wrwl7dv4Wr8rfXUYfvYiQuU8/VzlnF2McHcW + 4Whv9HPs0kJPbwQ6ukI29AWGWmgb6TJKX0vOVx8HFyshrAGUFycxqTaLSdUp1I2Jp35sAi11qbQ2ZNE5 + pYAFM8exdvlkViyuZ9K4BFIT7EmOtaFjcoZcZyGYsyqZPD6KmgIvJleF01MvZKsuns5xsfSMi6dvYpIg + gb66GAYmRKpz+S5sCGd5cwib2sLZ2RnOnq5QdinZ9+1+bGn1YX2zG2sbXFgv/GRdkwdrm7xY2xzEyoZI + 5taE010mpKwgiPq8YMbnhTFW7mdVfgxlgvzsWDIzY4SAR5KQFEZcQiixCRHEK6WhheglJicLkU8VCFlP + TpNnTsn+zSAhOYtEERKJKbmkpORJ3FbM31xBDsnyOlne+2/Dd7Ac9C+GsGIACxQDOCPrf8sAThcRkUBO + RhzVBYlMG53IkrGxbBNxeGSMO5eq7Lk9WvhGhQn3yw25X6ErcUuH+5WawpuGc63gba7lvsGt/Pd5WKLJ + c+EwLysMeFGowbP09/lYONa3wnN+JYL2d2W6/Eb42m8q9flRONtPY4341SRzvp/iyNNmV86Md2VjqR0D + uXZMTLWnONldxI30uzh/GWd8CfByxd3RBkdrGR8dhFP42km8ciU5xpX0RHeyk93ITnGR1kHNTshJtBPY + kCOxP+0XA1iTCB+lBLS+cBZDEgINiA8wIM7fgKQgA9LCjclS5v6KMCAr0oD8eCOKE0wE5gIzShUDWCkB + rRi//wLFAM6PtyY73JTsCOFJYebkhFqSGWJOeogpKUHGpMhx0oUv5chxiuRcykK1qQzTZlKwYgBrsUYx + gCPNOR5tzsUoE66G6nEzWJPbASO55f8eN4PeU7N/nyilnFMMVTyJ1+VexEiu+r/DBc/XVCjLSmno+xFa + aqnou+EjuRM2gtshI7gVOoKboe9zI+R9bkcM42GsJk8SdXmSpMvDKA0eyrYvorX5It6Yr6Il9obp8alw + OyXT94sA7cH2ZwNYwZfC+b6Uc/80QJOP5f2PArX4wE+bh17a3Jc48SjIlA+i7fhQ7qViAl9LcuVcqjun + s3w5WRDMkeIQ9peGsKM4kAWJDtR7apFj8SbpNsPJ8rYgQ5n2w0viq40FliaGGOtpY21mSlhIEEUF+bQ0 + NdDWOpmCvFx8vNwxMtBDT0cLE9nW0tJcNYAdnRzUcvOKCezt50tWbjb1zQ3U1ddRMbqcouICsnMyRTBH + qtsbGOqpZq+SnZ8pojc+IRq/AC9cXQeF06SJ45g1s4uuzlYa6mqpGV1KW/NE5g10sXDWDOqqy0iJCyEr + MUTiVQnrlvWwc/Ncdm9TDOCFHDmgYAGH98/jyP75HN/3TwO4XTWA98/I5HxfCvdmxvBiTgSfzg/ns8UJ + fLw0lY+WZfDhqlweri3m9vpyLq2r5MSaKnYvr2LjghpWDIxlwYw6FvS2smJ+PysXzWPh3DnMHuinp7OD + zqktTG2uo7qigJy0eHJSoinLTaGhtpSORqUE9DimThxN688ZwP+bATxaMYErC6mpKmackgXcMI7evun0 + yjVpam2gtKaMwqoySmorKamppLx2NI1Nk+hoa6G3q4PZPV2qATxJ3isrzCJXxG+BiF7FxE9PTRJ+GUV4 + sPKHjwDCgvxkWZn3e9AAHl2aS11t2b8bwHLMmW2D6J/aIONpg3zfDrZuX825a6c4ffMqm05eYP6e08zZ + dYr+7Ufp3X6Mvm3HpD1B744TdG45TMf6PbSt2MLkBauYtmgZ89atY/O+XRw/dYwrl89y/OBuVi2aRbcc + o715vGoAK5nIylzADTUlNI0tp21StZzTODpb65g2ZYI8F7XUT6iQZzWZMXIdO6ZOYtGiAbZsXS3nt4aN + W1axYt1ilq1ZwKr1i1mzaRnrNi0X/rCS3VvWcXj3ZvZsWavOndzX2UaLXOua6lJ1/umCfGW6gFji48JI + SAinsCCN8eMrmTK5ju6ulp8N4Hq1BLRiAB89uo1bt09x594Zbt+VVnD7zkluCW7flvbWMWmPcP3GPlm/ + j/sPD/Lw0SEePDnEwyeHefj0KI+enuDh4xPcunuQM+c2c+joanbvXcz+g8s4dnw1J09s4PTpzVy9up8H + 90/Jvg6zY+dyJtWXC09yFe4hvMVGD1vhAo6OJqIvnMnPiqJzchWr5rezbkm3jOtt0qcnUFVbTn5pEZlF + JeRXj2d0Uwdj23oZ09xFXnWTWhK6dvosGmYtpryti9TaScSW1ZBWPZHxHf10zFxK1+yldPTMp3XaLHk2 + Z1BbN4WyMRPIKawgScbF8JgkvAPCsHF0w8zKHn1jS/SMLFQD2MnVA//gUNJzctUS0H2zB5g5bxZzpU8p + 8/+uWLucgbn9jKsfS3h8BA4ejsKxjNE2VjJ+FdP3Z/P3F/yLAWwh3MxSAwPFBBbeaPxzFvA/S0D/0wBW + TF/FBLYR7mftKhrUQRtzew3RoJpYOykVXUQ7uY3E3n2EHF94uWgcN28dPIXneolmV3Swp2gy7wDh9HG+ + pBUnM6G9juW7NrDrwkl2XbnA5gvn2H71Gruu3mLPlTvsv3qP4zeecOjcTbbsPcaiVRvpmDHAmPHjyczP + IiYhCr8gd5w9lCmWRCP4mIpeFgSKbhb4Khm+SgawYgAnu5KY5klSiujHBGe1FHRohKXwZgsio5QSzvYk + JjmpbVSUpcBC+IijxAEXFWkpTqSnDbYpSY4qkmWcSE4UXpzkQIqMvemZjsJrZNzPcScnx4fc3ADVAM7L + D5M2XBBDRXU27b3NLFg9j6WbV7HzxDHO3HvCsVvP2XLqIfO2XaV98Sk6Fl9i8Y6XHLz6n5y+9w8uPPoL + lx/9xLWHr7jx8Cm3HjzjzoMn0j7h5v3HXLv3iEu37nH55h0uX7/BxUsXuHT+FOdPHOD0ga0c2bacPWtn + s2PZDLYv7mL3il72rBhg97I+di3tY//KAQ6umcWxzQs4vWcZ29f0SYyuIS8ngYjIINwDvLH0dMHA3Rk9 + T2cMvV2w8nfHJcwbz0hvfKK8BN54iUZXfsdQsnvtfSx/zvK1xFZgLzrcwccGJ9Hljr422InmsfMyw8bT + VLYxwdLNAEPRk8byTFm4yPjqpifPlS62rjIOij70ChLtEeVAQKQDPsJpPITLeAcZ4RduRECUkTxX5sRm + uJAzOoqyhnyqOsYxZfFM5u3dydqLl1l3/T4rbzxl6a0XLLvxMUtufM7i61/8P7T9ZZwe15n1jcqWSdxq + ZmZmZmZmBjUzq0lqqVvcYmbZssVkMbMtNEiyZMuSOYZMJpPMTAafmfzPVdWy40zmOe95P5wP67eLq+5d + G9a6V117s+7WD2y49SPbbn/LjutPWCPt8/DyDTS0dFJeXkVbeztDoyPMWbSY7sERKqs7qK7tY97IBjUC + +Or1h9z/4Avel3d48dpH0n4eYmTxRhat2MY7h2T/+5/w/gefc/XOk78xgA+ceo8z1x5y8fYTzr73MZfu + fCTv+BEfP33KJ8+e8uTpEz578oDPPv2Izx5/yGefPOLpwwcqPn/4AV98fJtn9y7z6fUTPLlykM8uvsWz + Czt5dnYzX5xYw5fHlvHlwVGeHxjmsz39PNs/yE+nFvP7C2P89sQI3+3v4cvdTXwuffjTLfl8tjGdJ2uT + +GTFeATwJwsCeTwayNNFITxdHM7nS8J5tjySr1bH8eUagaSfLg3n4cJAPlrgz71Rf94TnJ/rz4FuLzY2 + ebJ0lhdzSj3pLfShV3hWd2kEddl+wlOdSAq3JkZ0f6iviTpE8M8GsM8LA9jNTmv84297HdUA9pA2yFvq + ebCUhfAQS6JDzUWjmpAZZUpejPDjaAOq4vXpyDBjMM+CkXwzFuQasyTHiCXZRozlmbO6zIGlpQ70ZxjT + EqdJbfR0quNmUhE/k7IEDeHQGpIqy5qUxGpRGDldNKcS+TtFePO0vzKAlejfvFg9CuSeRYkG5MboyraZ + JAdNJilwkvB6Jfp3qmoAK1HAScGTSBW+mxMzk6J4HUrjDaiMN2RWrIGKSlkvidEjV66bKfdJ859Oqp+G + YAapvhqieQXeGiR4KVG4oh88phPpNp0It2m/IFIQ5T5N9s0gznvGLwZwlnD5vGhjcqMN5TkF0fqSZ7pk + CT9PE06eHKDMAzxuAKcHKr9VMYCnjhvAwTNeGMDaqgmt3D/KZQqx0uYn++rJsYZkiG5ICzYgMUCfKF9t + AoVDK8N6/2wA+3iYEuAm9dVRX3j0TJzNpmJnNAkbA4HhJGyNJmMlqYn2Kxhpv4qxzqsY6byuzgdsoj8d + c2Ppa0z1hHfrYWdujL3lz5HAigFso0694ubugJePEwHBboSGKtPMuRCqTK2lRJc7TyfWayr5ERq0pRsx + WmTO+kpztr4wgLflTGF7xiS2Z05mZ7ZiBE/n7XxN3inQEl2gw55ibd4qmMm2XA02ZUxldeIr4wZwwkTW + pU1SsTFrGm+XG3Og1ordpUZsyZrJ2qRJjMW+zIq4iap5/Fa+YiRry7V12Z2nJ/ecyabkaWxInMLamFdZ + FfES2xJfE02iw5UqQ+63KPP9mnNTtO65/Fc5n/8aV0omcbNKtFSdNvcb9PigSTROqwGPWvV40mXA8z5j + vp1rwbfzbPh8tikftGhypfINThZM5Kicf7BwKnsLZ7BXtPDhBksONluzq1aet1qfDbP0WF2hzZLiGczL + msrctBkMp2kzL12PhVKXxorMWJSjw9yUaYykTWdpnq7UKWO21Fixr9uTowMBnBwO59xILJfmx3BtOJr3 + 5obz3sC4AXytx5sr/UGcH4rkcG8M21oiWdeewOY55RzavIgjO9ezanSANuVDxa56FvS30dtcRU1pFlXF + WWSnxhAV7kdYqA/FxZksXzbCVeEQHz+8z9Gjh9ixYydv7d7H8RMXePfYRbZsPsCixdsYXbSNxWNvjmOF + YKVi/L7F0lW7GVvz9t9g6erdLFP2r9gl2CnYwZLlW1m4dDPzFqxjZNFa5i9QsJqRBWskXcO80dWCNYwu + 3MCCRetYsmwjS5dvYmzlVlnexPD8lfTMXkBjcz8Vs9qFO9eQkVFKYqIyilohhcV1NDTNprV9kGbhlRUV + TeTllpOSkkuyQPmvJSkpWx2FTdmWmqqcJ0jLU01gZVk1fxUTWDC+niscZnzqrv+JtBdQzWBBsmLmChQj + OEk1frPk2WQ9KUc1e+Ni09VI4PiEdEEGCer+bHW/+mzKf0JJucKlcomPz1ahGMKK6atg/Jgc1fhVDGAF + SclZ6pDQylDQLk5eWFk5YmZoiYnAwtQKO2s7nO0c8HZxJjk6jNLcNDoaqhjt7xDNJXp3XjcrR2Yz2tfM + YNssehpLGGqtYOlgK9uXz2PfhmXs27hMdOk8ti4dZOvCPtYPd7JW9q8Ufr+yu4mxznpWdNezqqeB1T2N + rJJyt0J06MrOOlaLjlrf18K6gTY2Dnexe8V83t25lkuH3+Sj66d4+sE1Ht+7wr0rp7j07gEO7trKwZ1b + uHziKB/dvM7TD+/x9KP7PBL9pxjAn7x3jSc3LvOZ4MnVC3x05gQ3D+zl7PbNvLV4hPX9Paxob2Zpcz1z + y4vpFU3akZpIV3ICPUkJ9MbF0RsTS1+0IDae/rh4huISVQzKuoKh+ATmxP9sBr8wf1UDOFXF/zSA56bL + vswUFuaksTgvnaW56dJXZrIqJ53VmamskON+NoDnxioGcAgD8SH0J4YyOyWcvrQI+jPD6c+OoC83ks7M + MGoT/MlWfCBrQ5z0Z2Ktr/k3BnBMVNj/SwNY6xdoz9REc4ZoEDOFqyfT09XDhH8/nM7fvxXN05Ue3Bky + 52LrTG726cu6M3/YF8GfL2TAjVy4Wch/X8jhXw4l88PWcD5Z6Mp73RacrdflQqMh16TRfa/NjuvNjtxo + cORanRNXqu05X27BqRIjThTpcaxIh3eL9ThepseZKiOuNMk57ba812rNtQZTrtQacrXWmPcbLbnbZssH + 7fZ80OrArVoLLpbqclIa1xPpkziXPZ335Dr3qox5UGvKE2mMP+915OsRD35cG8w/703kz5dL4PYsuFLE + n48k8s8bfPhhjjnfd+irUb//MWDFfw/Z8p/9lvypy4S/bzfghxZdvmvR4xvpGL6S9WcdRjxs0OVW5Qyu + Fk7iYt4ULudrcFU6uNslBnxQbshDeYaHlYZ8XKHHQ3n2B43SeTSbcqfZhFvtZlxuMeaUdDrnmvW5MduC + m3K/az1mXO0x5mq3Edc7DXhPnulOm3RK7Xp80iGdUZcx3/VZ8v3gOH4YtObv5zvzDws9+f0Cb77rd+VR + nRXnc/VY6vcy3R4T6PR/hVYhXDXBWpQJqSgKMZfCZEGanxmpQgCzgsykI7cQAmVPqYg2Zb67lBADdXjF + KH89gr208HedKdAl0N2AIBEYCoI9LVQDODPOT4ijO1EBUkA9rfFUvga30BHo4iYFVoG3ozlBXkIoXK1w + tjfBzclMSKgpbs6m+HpaqUO0qnPOijj29jQj0N9aGjEb/AOsVfPX3UP2ecl5PnKeiGB3Zc7PCHtCk7wF + PnhHuOASaCuCyBoPxcCMdMNBBJOp3ficTPZy/QAl4lbg6mOHnYs5FvbGWNgZq+avlYOFGglsbKkMAz1u + Av/aADY21/m/GsDK3L+/GMCqCfwXA9jV1RxXN/mdbuNzAXt7WxPgb48yFLRiBCvrTk6mWFpqY2wyDTOz + GVjbSN45KflgqUYBB/o74O9rp5qySmSuOkR2uCtREePDQivmrDJnrxK5m5oSRKY0HokJfurQzlFR8l5e + GMCK8asM4xwc+LcGcHyst5pGyjWV4xSTTHkfiommmL7Kff185T39ygB2kLx1sP2LAezlaESwmwX+9vL+ + Dadhq/U6djqTcDGagbuZNl4WBnhZCoG1MsLDyvAXeKmGsMDSBE9TQ5wN9HDWnYqv8asU+GizMM+TYx0p + PBot4zcLK/lhIJ+PKsPYF27MGiHO88xfokNnAk1aE2g3nsJsOz3mupow392EeY7azLV+jRHrCWz1n8zF + bBO+7vTl3xZFw/I4QRT/NezH3zdZ8VnOVO4nTOBm1Lj5eylsAhcUhE7gnOBiiGwPf4m7Ua/xMH4Kz1I1 + +Tpbj68KDPhC2rGPpR27mjeDMzmTeTf7NU4WTeZarTb32gz4pNeMZ0PSDs3z5dO+IN5rcONwrgljga/T + aTuBOrOJdIk4ny35PSDPPkfysk/KQZelBk1C7itN3yDP9FUyLV4lxfpVUh0mk+2pQ6aXHski8GOcZxLm + NJNQVx3CvA2ID7UmJdaVlDgF7iREuRAk9cjTWU8IvhZO8s7szI2wNTPDxkQfOynT9pJ3doavYK8MBW00 + gRyXCfRFTmFDhg77i4w5lG/Avkw9NkRNp81FnsPydUKtxg3gYLsJ0pZMoDp2AkurXuLd+TN4/KYJf7hg + x7/ctOJfbhvzz/cM+f1tHX64Lm3pZT2+O6/LN2dn8uXx1/jm+Mv8dHIiPxx/lW8Ovc7zvVp8stuSK2st + 2DPPgOVt2jTlTyYjeiIRAROlHZko5XOqtAtSrryknXHVlvomItdNH28vM3WOXzcXIyFBBjg76eNor4e9 + rRzjZKjWI6WuJKf4ExvvRVCwLb5+lpI6EBLmTLjUrdBQZxFAyty2mqoZPGdOE5cuHOSzx+/zm28fCh7x + 1bMPuHbxCGvGBmlvLKK5No/e1jLm99WyZH4rY6NtzO2ppKE8ifzUAOJD7IkNsiYh1I4EWY7ys1Dn6/US + EecobZStrR4WAmX0AV3lj0ZT6aRNNNAxls7beDp6ZtPGI38l1TGbJOkUjK2mYGkndc32DRysX8ZdynmA + w0tEOL9Euv8kWrOshHxF8M7CPN4cyWVVZxzzqgPpKnCjIlbafUXMBuuT4qulzv8epkR0275OgJSxAOtX + 1DTE7nWCHaZI+dIk3EWfCOUDIGn/faScOitD61vrYGmhjZHhDMFMDEVcGpjqoG+ih7aBbDc3wMXdhpTk + UGrK0+isz6ajWpm7V4hYQyJ9LakMdmYxOljK+uVtvLVtiG0buulsSiEzyZH0BFvmzs5k95ZONi6rYqA5 + mqYib/qqw1jUlqhiQVMci5viWdqaJEhgaUsMY81RrGqLYn1nFJu7Itg3J46j8+M4PBzBgf5A9vT68GaH + B9tbXdja4szOdjd2CLa3e7KtI4BNLWGMzQpmfkkgs/P9ac/1pzk3mIa8cGrzI6kqiKEkP5b83BiyMiNJ + SgkjXkhcbEK4IJr4pDgSkpJV4zdRNYAVkj9u/iYkC5lPFSEgYkIRIykpCplXSH2WLIt4SMkiVfmqM10R + JLJfjv0ZqRkKslUDOF2Z9zcrm6ycHLKzsoQAZopISSFV7l2QGUtTcQIL6pLY1ZnMCSkHV5q9udvoyEfV + 5nxQasD9Im3uFmpwRwTq3ZJp3CqezPX8V7iW/RLv507iQxG2T0Ssf16iw2d50/gscxLfShv3d4Wa/EPx + TP5YKijX5I9V2vy9MhJCvR7/0GrMb7tteNhqx1nhedvzLRjJsKAh0Ur9oype2qPwKC/8/d2kHtvjZG0u + 7ZDUU+kL/KWcRAc5kxLtQYb07dkpHuSkupOT4kJesgMFgsJkO3LjrEiX9j8hUJcoKbsR3lJ+/Q2JCzQi + zt+IGOWDBl994gL0SQ41Ii3CSI7XJyNCj9xYA/LjjCiKN6NIMYCTralMGzd9y5VhoFPtKUtxGI/+jbUk + K8yU7DAzqSemZASakC5ICTAmyc+QJF9dUv11yRGeVBSkS1mQFrNCtWgL0mShagAbcCDClFORwmHlGW4E + 63I7cCZ3A6ZzL3AK95Xo3ygl+leXZ2nGAhM1EvjDyJnc8HuNS54TuPzCAL4bqsH9CC3uRWhwN1wxfeV9 + KUNFh0zjRtAbXPF/lWtBclzkDO7HavJBjKYcM1W9zydhGnwRpc83kYY8D9bmmb+mOszzV36afKVE/Eo+ + qtG/gu9k+bsgHb4K0uYLSZ+HyLsP0OGB9MUPfPV4JHn8aaQ1z5Lc+DTFnQ+SnHk/1ZUbOX5cKwrmUmkw + 58qDOV4ayBZ5XwPe2lRavUq59FOVQXYUhbpLvrngY2+JnZkRFvrCIywtiI2MoLKsjIHZsxkeGqSksFB4 + jTemxkYY6uv9YgArcwA7ONqr0b/WtsKRggIpKCqkp6+Hzp5OautrKK8so6SkSAR1vHAwZ3X+YGcXexHa + UWSLEFPmAfYP8JZ+w1EVTu1tjaxYvoAFI4N0tjZQP6uUAeVLZsUAXjyfluoy0kSsZSeGqQbwjg3z2b97 + jIN7xzh2aKVq/p44uoLjR8YkXc7pI8s5s3/JLxHAR0ayuLwwjfuLE/l0WTTPhXc8W5nIZ2vS+WRtFh+v + z+PWxkKubS7nwtZZnNrewMEtzexa28qGJW0sny8YFbG9fBFb1q1hw5o1rFo+xsKRucwb7GGwp1Wdx1cx + gPPT41Vjt6+1mpH+VhYK5nbWMiCCXjGBfzGAizPkuEyqS3JUA7iqPJ/qqkJqa8toball7nAfA8OzqWys + Ij4nmeisZGIl7+Ky00nOy6KmoY6urg7mDQ1IfzdXNYDb6iopk3vnZadSIKI3NyeDjDQRpbExRIaGEh4U + RHhIABHB/kSHBZCRHE1VaQ4ttaWqAdyvGsBNLJjdxsLeZhYIRmc3M6+/hcULBnjzrY2cvXKSY5cvsHr/ + u8zZfpD+rQfp2bSXrs0H6Nl8kK4th+naepiWDftoWLWT2iUbmDVvjLaFyxldv5Ht+97hxJl3uXb1PCeP + 7GPjykXSv7QyoBjligHcWktnw88GsPJR1yyGOusY6mmkv1v2d9TQ1FAi7X48leVZ9Pe1sHLlAjZuWcWa + 9WMsXrGAgfmz6RrsoG9eL3MXDTK6ZFjK1yjbN63myL4dHNm7k63rV7B4dJDZPS001FdQVVn4wgCOITY2 + hDhBfl6quk8xgIfn/mwAtzB/fiebNy/l1Knd3L13jvsfnufeB2e5/4FiAkuq4N5Z7t09KTjOndtH+PCD + Yzx6eJxPPjnBQ8EjJX18mkdPzvHg0RnufnCU6+/tFezj+s193L5ziA/knPv3jnPvnpLKOY8uyPVPc/jI + Frq6qwgLd8PKRhczSx0srPWxF+4fEuhEQXYUc7oq2LSsl22rBlm1sJvhgWYaG8opKi0gS+praX0zNT1z + aBxYQHXPMFlVreTVd1HVO5/mkWXUDI2Q29xFYnkdqVWNzOoaomf+GEOLVtMv77N3cBFt3crwzx0UVdSp + BrAy929EXDK+wRHYO3tgaeOEkZmNaDZrNfrX3duX0MgoObaIvjlDLFy2mKUrl40bwFvXs37zOuYvmkel + lGO/UD8sHa3QN9dHy0hLNXv/2vwdh8LVdM000VOm5VBNYA0MrTUwtn4xHPQLE1g1gF2UqF9lKGhDbNwM + sHIRzid8XDGArRxmYiMcy9ZFAzs3DdUAtnefgaPA1Usbdy8DPLxFI4lm9/I2x8vPiqAoN+Kzw6lsLWXl + zlW8eXI/O08fYdPxQ4KjbH73BNuPn1aHQN9z6jJ7jp9jx54jrNqgRO6spHtwgPKaSpLSE/D0c8bO2Rgr + e9F07oa4+xrj7mekwivAiMAwSyJiHYhNGjeAk1NFN8pydKwjEVE2wputiIy0IT7eUXiOE7Fx9kREWBAW + YS5l2V40qRIVLPtku7KcGO/wC5RtcYKEBHsp/85kZLkKr3EjPcOVjAxPcrL9yS0IpqAwgvziGPKL4imv + lro30sHS9fIONy5nx+H9HL/xPgev3GXr0Rus2XuT0c2XWbTtfXYe/4bT9/6TSx//F5c//hMX7/+GK3cf + cf3ePW7eu8979+9Keodrd+5w8dYtLr73Ptdu3+b6rfe5eu0y16+c48rZo1x4921O7d3A0Z3LOLRxHvvW + DLJ/3RwOrZvHwTVzBbK8dkgwyEHBkc3DbFjYLP1HKqkJAfj7uWDnYoOhnRm6LtboeTpg4uuMdZAr7hHe + +MT44Cta3D9OUnm37qJJHFTzVziSpxl2nspH7hbjprDoGOX/Dmd/GxxFvygfwDv6WODka4GNlzF61tMw + sNXA1FkLC2dtKWeaUp61sFG0krxb3zDRPeHWeAaZ4hYgWjzAAG/hK75hBvhHmRKW6EhqcTjFrQVUDjTR + snQ+C6Tt3HjlBjvvPWbL/Wds+OArNt7/jnV3v2ftnR9Ye/sn1t3+kc23v2XbtU9Yue8Ug0tWM6uuWdq2 + Iurr6+mV/qJ37jCt3YPSFjRQWt7OwNDK8SGgbzxSDWBlCOirNx+x/c1jUk43s2TldvYcvsC1W4+59dFz + rt37jBvKENDvP+bYhTvsO3mdg6dvcVbOv3z3My7ekXf74SfcffIpT776ks+/+YrnXz3ni+ef8eUXn0r6 + KV9+/oyvnj7lq8+e8vVnj/nNpw/47tFtvrx3iS/eP8GXNw7w5dW3+eLcFr48vZZvTqzkm2OL+fLQPJ7u + 7efZgSF+e3YZf7y8mt+dXszz3R082VrNI+nHP1mfw5P1qTxek8CjMcUADuXxwiCeLg7hmxWRfLcqhm9W + RfO1pF+vjuPbtfH8ZkMSX62K5bOlwXJ8APdG/Xh/1JdL8wI43OfD5hZPltV4MlDkSlu2C2053rQXBlGX + 7UtBgnDmSFtV90cEmBPsZ06QjzkBnn8xgBXz99cGsJu0QZ6eJsLD5fgAM8KkjkcrfFnKQEa4AXnClUtj + dWlKNaYvx5zhXFNGs41YmGXIwgx9FmUasazQisXFtgxmmdCZrEdjvBYNSTrUCqqThO8la1OVpEWlLJcn + aFMcPZM84a5Zwlkzhbsq0bkZ6hDQGmRHalMQp5i/hhQnGcmygWzTIi10OslBU4Tr/wzFAJ5MSugUMqNm + iKbQpiRRnjXBkEpBlWICxxtRlWikRgUXRGmTLdw5PXC6cPUZ6ofRyd7TSPAReE0nzmMqsdLWRrlNEUwb + h7IuiPaYQayXBnHemsT7aKgGcJpo5sxIY3KES2dH6Msz6JMVqUdOtK7k20w1ajk58H8zgMdNYOX3/sUA + 1iZRrh3lMo0YVw2SfBQ9YUBasBGpwYYkBhoQ5a9DkLT/vp56+HgY4uVhhLdi3ss79LRSzN/JOBi9gZ3h + G9ir5u8U7E2mYiuwMpqMpaybG0zCRH8yJnpTMNKbhomhBhZG2lgaa2NjKhre3BgnGzN1GGhXJ1spGw54 + e7vgH+hOaLgyXZ0PUcqohYF26pDiPnZTiHB9neyQqbSkGzBabM6GWVZsqzRmZ6kOW/OmsDntNTanvsbW + jEnsyJzCW3ma7M7X4p0iHd4p1uXNAi22581kc+Y0Vie/xjJlDuDEiaxNn8SatNfZkDWVPZUmHG205YDo + 1beK9NiSNYN1KZNYm/ga2+S88Wtq83aeDrsyNdmUOJkN8ZPZqKRxco2YV3gnczqXa82502TJx+1WfNxi + yrWyaZzMeokzORO5VPSGGgl8t05H9hnxSYcpn/Wa86zXhC8GTPlu2IIfF9jw/SJ7Ph+Q6zRrcr7sDQ5m + TWBv5kR2Z73Bjuyp8lu02F1hypuzzNhQqs/qEj2Wl+qyuEiTuTnT6EmeRFfCVIEG3Qla9KXqsKjInOVl + liwpMGKsyJg15eZsqrFmW4Mdezo9ODjbj2NDoZycG8VZwcWhSK4OhnK1L5CrPd5clf3X50RweSSB43OS + 2dWVwObedHaM1nBsxzLe3b2ZNYvn0FFXynBvE4uGOulrq6GuPI/qslxyRCtEhvsTEuJDqWiAlSsWclV4 + 8YNHH/Huu8fYtest3tlzkJOnLnH85BW2bT/EkrEdLFq2g7FVbzO28h2WrdkteJvla99hxbo9rFi/72+x + bi8r1+xh+Wo5To5fvuYtlq3cyYIlm+kZWEZT+xzqmvqpa+yjXlDXOJu6htmi5ZRUtsuysr1BjmlsGZTl + AaqquygsbiQto5TYhDxiY3KEZyhmqWLeFpNXUENZZQvFZY2iD2vUqOCMjGLUEdZeGMA/G6nKumr0KsM+ + Z4xDMYJVMzhd2T5uAP+CFNn+C+RcQbosK0hNylWRkiTXFSgRvT8bzcp/PMrH/cp94+JfRP4mZoouzZRt + WX9l7P48ItyvkZwyPjqcOkKc3FP97ygtm9T0cRM4OVWum5AmXCwOd3c/rK2dMDGwwFDXVOq86GVzK+yt + bPBwdCQ5Jpzy/Ay6RHctGOxUTd+xeZ2sHOlhZHYjfS2iFesL6W8qYXFfI1uXDrF33SL2rl3IDmXO39Fe + Ngx3sLq/meW9DYx11bFcdNLyjjrV9F0lWmmlbBtrncXC+lIWShlc2lSp7lvd28i6oTZ2Lp3Dka0ruHBw + Ox9eOc5ndy/x6NYF7lx8lwtH9nBg+0YO7NjMhWOHuHXxHB+/f4OHt25y74occ+E0t86c4NbxI7wv+6/s + 2c2JLZt4Z9kSNg72MdpQzZxK0fGlhcwuzJN2KpmGxFga46JpET3aERtLV0ws3dEx9EbFSBpLT0wcfTHx + KmbLdgV9sXHjRnDcuBH8c4TwvKRUhhUDODlJxf80gJfkZbC0IJOl+ZksF6zMTWdVVirLUxJZIs8xEhfG + HNF4Q3Gh9McLksKkTYigPz2KgexIBnIiGcyPojc3iub0EMqivIlxtsTTVFfaeu3/1QBWRtyKj43E0d4a + HW2NvzGAtTV/jb/MB6w1cyaaMzSwNDOX8ppET1c3E/7P+Tz+8WACz9Z5cmeuKedbpnG5cwYfjpjx3RYv + /uNUIlzPgfeK4HI+/3I4mR+2hfNwkRvXeyw426gvMOJ8gxEX6s04N8uCcxWyvdySc6WWnCk25WSJEadK + DTleasC70mgeLdPl1CxjLrdYcaPLnuttNnKuCeeqDblUZ8L1Rivea7HhdrMt79fbcKXSlDOF2hxNn8Kx + 1EnSoGtwU653p8qUD+st+KTVlk9nO/J8xIOvxnz5u+0R/OepbHnuEnnmAjiezH9uD+L3i+z47Wxj/jjb + jP8csIYhG/57wIp/7THn922GfN+kyzeCr5r1edZqyJMWuUe1JldKp3A+X7nvJC7kz5DORIubxXrcKTfi + QbUZD2vM+WiWCR/WmHJf8uBOoxnXJD8uNRpzpsGQY7U6nGg04HS7icCYk3LdU20GnBGcb9XjcrMO15p1 + eb9Jh4+aDXjSbsSXkrdfz7bgK+mkvu6z5MdhR3630JOf5rnzTb8Ln0genc/XYyzoFXq8J9DiO5Fa39eZ + FTSTEiEVBSHmZCkGsL8ZyX6m6h+aOeGmlCYrf346CQGzIz3KjIRQY6JEFAR76eDrOhMfJy38RLAGuivm + rwgEHysSw9xIUwzEEFfCfe0IcLfAw04fZwttnM21cbPUx93aAC8HU4KU6GA3K1wcTV8MH2qIk4MID1cz + PF1N1Og8F4FiMCpRwH4ianyUqF8PE1xcDXAWUaoYwB4BlngFW+Mf4UhIgqcKnwgX3EPscQuyxTvMCf9o + N1UIWShDQjspwx8pwx65q3Dzs8PB3VIdCvqvI4BNfjF/FZiY66qRv0qqmL/GpjoYidg3NNFSU9UAtlEM + YHOcXYU4Kb9NMYCdzXB0lt/oYqYO76zM/6tAGdbZUwScn9w/MNBRHf5ZWXdwENFtqYOJ6XTVALa00sLe + Xl/ywRwfL2v8fGzw9bZWh671FuGnGL6hQQ6qiaWYtcq6Eh2sGsDJQWRmhJGcFCCdoTQYMZ4CL3VuX8U4 + Vkxc9fzg8aGkfzZ/lbmElWXFGA4MsJN7ybO/MIAVM1iJAlaMM2XuVGWb8q6cHHRVI1GBMgS0EgEc7KoY + wMa4Gmlgrz0JB53JuBpr4CF552Mu5cBCCKzAXfLXXfLWVcqJm4WOlBNZlv2uJvo4Guiow0d7GrxEthDw + 4QwX9jfGcW8on+dDBXzRnsr7eT68FajPcsdJDJpIGdeeQIPWRNqMp9NrZ8gcF0vmS1kcdjRg0GoKQxYT + WOv1BqcyTHnWFcS/jiXx59WJ/HlFFP85GsAfOh14XqrJw4xXuKvM+Rs9Hv17KWIC58MmcDbkZwN4Indj + JvMofibPUg34KsuUL3LNeJIrbVOqNseE4L0T+xrbo15mR8xEDgiZPV0wjetV+txpsOSe8hFMrQsnRTht + idFg2OUlWswnUGsykX5PI+bJe5wvZWLYzYx+R306bUVQWU6lxOxVMk1fItn8JRKsJ5LkMJksb13SvfVI + dNMm0nkmwU6akv96hPoaERdhT0qCF+lJXmQk+5AS54mfiD13J12cHbTVOVztLEywNjPDylgfaxECtiYz + sTOegq3hK7gZTCTBagJ1Xq8xEjaDjQm67EgQYh81k2V+r9FoJ89iMYlQiykEWU4k3H4COYET6Mp8iU2t + E7m4TIMv95nwp8vW/PtNU/71fT3+dFuHP743k99d1ebHi9r8cE6b709p8O3x1/jN8Zf57cmX+OnES3x/ + 5CW+PjiFp/uMuLXNlGNjhmwe0md21QwKk18lOniCtCMTcHObhJv7TKlDWiJYtKTuaavDQHtKe+HhZoqz + o9R7e11pZ+S32ojQkXrl5KCvfsygfByRmRUqpMyf8AhnNQI4MNBenftX+TAiPNxNrmuOg4ishEQ/Vqwc + 4s7tszx7epdvv/6YL57f5+MPr3Ds0A7mDzULmU5T0dlUxEh/PUtH2lk6v0U1gFtnpVOeEy7tpBtJ0mYp + 0b+JwYoBbIm/iHB3eT57Gy0ha9qYyTMqc//qmGmiYyqds8l0dIynoW08FR2TKeiZTkXfXFLz1+W4NzC1 + EOFnP0V+/zQR+9MJ9ZhElOerIiRfIT9kMt25FqzrDOHA4mwOLMph+0ACK1tCmVvmSUuqFdVxphSF65Pt + P5Nk92nEK18iu0wm2uk1Ih1eIcL+VSEdrxMn+1J8daW/MCDB35Aob32C3KWtlvx0kjJqL+XJxlIbOys9 + act0MVXaSzM9DAx1MFfqvKedOixkc1UmvQ1Z9NYm01eXxGxlzt7mJIY6Mlg2r5Id62ez/61Rdm7uo7s1 + jWzpjzKT7Zjfn82erV1sGatiuE3IW4k3c2tDhWwmsaIzSUhmPMub41jREi+IZYVi/jZFsr4tmm3d8bw9 + kMjxhRmcWZjGseFY9vcG8WarB9saXdha78TmRmd2tLizo9Wdba1ebGn1Y31jMEsrAphX5MvsXC86sr1p + zfajKSeI+twQavIjKS+Mpjg/mpzMCBERoUK+Q4gWQhcVF0F8khIBnDpu/iYpyHxhAGcTn5xFvELWlblb + UoXsp2WRlJIpUIYATSctNZ2M9CzS0zNFVGSSlpwxjlRZV7ZnZJCeKWlmhjpsrhJplyOkMycjkczUWDKT + winNCqetOIrF9XHs7ojjXE8473f68HGbM4+FGz0oM+CDfE1u5UzlPeEv7wuPea/gDa7nvcq17Im8lzWJ + D3Kn8Shfg8/kuKc5U3iePZnvC6bz20INflc0nd+XTucPFRr8oUqT39do8w/1uvyxxYDftlvwQb05J0rN + 2JiuJyRXj9o4M3Jj7USoORMa4YaP8AEPRyscLY2xM9XDxdJQ6oOtcA5XUqL9yEjyJzPFW8qAF7mp7hQk + O1IsHKVUykOeMgR0iL6URW2ivTWJ9NYhNsCIWOEy0X7GRProEyFtY7Tf+FDQyaGGpIcbqAZwdoweOcrw + cPFS9hPNKU+1ZVaGk8CFqnQnKtMcKU11pFB4UG6MJVnhZmSHmY+bv/5GpMn1kyVN8pXrSp3I8NMlz1+P + 8iD5jaF6tITr0hOkzZJAaS9DDNgXYcwJwaUwA67J9luBM7kTMI37QdP4KEzyN0aLT5P1eS590+dpZjxO + kPcSoclVqcMX3RUD+GVu+r3O7ZDp3IvQ4m6EBrcjZ/Be2HRuyrZrIdO4FPA6Z3xe5qzPRK4ETeJ6iLxT + wfXAN7jlP4mPg6fzJFibz0O0eeKnwROf6Tz1mcFzn5l84a/FlwHCbaU//SpIn6+DZVnwRYguzwXPQnX5 + VH7LI19tgS6PAw14Gm7BF/GOPEt0ked15MMkZ+5leXE3z5/3C/25XuTPxQI/9sTbMSbvpttuqnBRE7rC + nalVPhr0Fe7iYImLuRHWBtInWVqQGBlFfVU1I0PDLBieT2lhMf4+PqoBbGSgj6WlGXZ2Njg7OwrHclQj + gG3srAkODaGkrJTBuUP0D/XT0tasmsCVVeUi6lOEe7kJtzIaN4Djo8jNyxRhnyQ8bDwCOCZa6klrI6tW + LGbxgrl0dzTRUlvJnJ52Vi2ex+rF86XdKiE9RjGAw+lpKmXnhhEOvrOCw/uWSx+wQjV/xw3gZZKOcVrS + 0/sXcWL7bA4tr+TIaDaXFmVyb2k6j4V7PFmWwMMlSdxfmsZ7yzK4vDSbE0tzOLK8iENrqjiwqYV3NnWz + bW0va5d2s2ykS9DHysULWLtyuWAFK0ToLpw/R/qfHoZ6W6kpzycnTfnwI4GGinxG+9tYuaCf1Qv6WDLU + rprA/a1VqgGszAE8qzBNkE51SbY6BHRVWR5Vcl7trGLammsYGOyma6CT/FklhKTFEpgeT4AI3ABp18LT + UimqqqK1o4P5c+aoQ1IPdrVRX1FEYU6q2hYp5m92VhppKUnER0cRGRpMeGAQYUEBhAf5EhHsQ1pCBJXF + Weqcuz2tNQx2NKh/VC3ob2Gku4H5XQ2M9DaoBvCShQPsemsjpy6c4PCFc4y9c5ieDbtpXbObplVv0rxu + L+0bD9K66TCN6w9QtXI3RQvWkz9njMKBRTQtWM789ZvYfmAvJ86f4NrVc5w8updNqxYxPLttPAK4s57Z + 7bV0N1apf5p11ZfJ+65koF2erUv2SR52tFZSX1dIUUES5eXSl8nzLl+xgJVrljG8aC5tszuoaKikqLqU + 0roKZjXPorl9fB7ftasWc+CdLRzZv1P6uDUsWzyXwYEOKX81zKp6YQCnxEiZDBYEkp+fSnNTFX2zW14Y + wO0MDo4bwFu2jBvAd+6c5v79M9y5e1KWT3Dv3mkefHhexccfneWjD0/x4f3jfPLgJJ89VqavOMunT87w + RPD403M8/uwij2Tbhw/e5e6HR/jo4XEefHKSx8pxn53ns88uybEXePhAOecyH318jnePb2d2Xw0RkR5Y + 2yj9vRZmwuPtbPXVKX0KpD+c3ZLPmpFmNizqYOlwE6NDTbRJXlZUFVFUUUpVSweN/fNoHlxIXe88Cuo7 + KGjoorJziIbBURqGF1LZM0RBk5TBhnbKWrppmj2P7rmL6VUwtJDmrn7Ka5vJK6kit7iCtJxCohPTCAiL + xtHVExt7FyxtnQTOePgE4BckfXN8AoWlZQwMz2Hx8qWq+bt6wxq27Nyszv/bN2e2XCsHZ28XjK1NhHfp + qgawtrHyQZ5i+irDQP8FypzAv0QBm/8cBayYwMpQ0NqYCDcyFT2n6FBlHmBLZ32sXBTzd3yeVnMHzfEI + YIeZ4xHAwuVtXYSLu2oIZsjv0MDZQ7ithy7uohG8pR1Vpjnx9rcgKNyJmFR/CmszWLB2LuveWceadzax + bMcG5m1YzfD6dSzYtJlFm7exbPMOVmzZzti6TSwcW8XiFauYu3CEpvYmMvPScJP+2Eqe00zhys46OHsZ + 4uJtoMJdeJ9/iDmhUXbCbZyIS3IjMcVDOI4bMfHORMXYS1mwJTLKntg4Z+Kkb4iOVkbxMicgyIQQOTc8 + 1EL0pRWR4VZEy7HKvKOKMawgNtqe6BjZFmsrPMqNrGwvgSdpGR6kpXuQmakMAx1CUUkURaUJFJQmUlqV + QUd/A0OL+5mzbB4rt29i17Fj7Dh+mvX7T7Hx4HVWvX2TTQc+4si1H7jw0Z+48OE/cuH+T1y484zr9z/m + +r1bXH3/OhdvXubs1fOcvnqBE4LTVy9y+b3r3Lh9g6vXznHx3DHOn9jL8b2bOLhtCfs2DLN39Wz2repi + r2Dfyk72r2jn4Mo2DqxsZv9YE3uWNPDOsmbGegupzhNeKJzf3UX0lq0RBtb66LmYY+Bli6mvA1ZBTriG + e+AtWt0n1ouAeG/8ot3xDHXA2c8KW9FuNh7Ck0ST/AwHbwucREO4BtrgFmiLe7Ad7gGSBlrLdnOM1Ajg + mZi5KENBKx8ZaKiwdJqJg4ceXoHKnMBmuMm7dfHVx9VXDw/hAd7B+viGmxIc50B8dgh5DXmUz26icckI + I/v2sOHae+z86ClbP/6ajR9/x4aPfmTd/R9Ze/cnVt9W8CMbbn3L1qsPpI0+Ru/IUumfq4XPZlIm/XRL + RxttPb3UNXeRlVtJXkEd3b2L2bPvLDfefyztz7fcuf+My9cfsP0txQDeJGV1PAL42u3H3HnwJTc++Fze + 3zMuvPeJagDvP3Wdw2fucPb6Qy7f/ZQrdz/h1sNP+fj5cz7/7ju+/P47vv7NN3z77Zcqvvv2K374+lu+ + +/Jrvnv+Jd8/f8aPz57w46f3+fbja3xz7wzf3j7KNzf28sV5xQBew7cnV4pWXcKXh8YjgD8/MMQPp5fw + d2eX8+3R+Xy8sZ57q4u4vzKbB6ukn1+bzONVcXyyNIIHi4J5tCCAz5eE8P2aaH67IZ7v18eqJvBXq6P5 + dl0c329KVqeFeLY8jEeL/bk74sN78725OhLAieFA3uoNZHWTDwPFzjSl29GQ7kKD1JGaTA8K4p1Ik7qZ + FGFHdIg1EUHWhEjZCPQcHwLa868MYF3VAHaV7UpghY+PKQG+xgT56BHuo01cgA4pwXpkhelRGKVDtfDR + 9lQj5mSbMj/TmJEMQ0ZSdRlN12dhnikLCy0ZyjahJ82QtmRd0ZV6NKca0JiqT50s16ToMEs1gnUojdWm + MHImueEzyA5VMFPuo0BTNVAV07c4yYSSZFOKE5UI2/Eo4JTgaSQGTiVeuGx8wHg0cJrw35wYTYoS9ChL + MqAs0ZAKxQRWDOBEI6qSTaiUtDhW+Lnw6ewQDTIDNUjxm0qS91QSvaeMz7/rJprZdTJRLm+okbjRCtym + ES2aN85LgwRfLRJ9dUj00yJZ8iZNdEd6uKE8lz4ZoTqiKXRlXRmyWof0UI3xCGDVAJ5MimL+KtHOqvk7 + jgzZnx40gwzRAqmiX5Ll2rEeM4l1m0mCt7b6UWmKcOzkIAPRLgZEB+gR6qOLv+gZX09DvN0M8Ja+w9Ne + +gSzKTgZvYaT8Ru4WszAU/octxdwEShTNjnbKB9YamIt/ZOFsYZq/poYSbtgKH22wNJYD2tTQ5RhoF3t + rHB3tsPT3QE/H1eCgr2kXfeTdtmfmChv4W/2annysplMqNOrZAUpBrAhC0ot2Vxrz85qC96sMGB74XQ2 + pE5kfdLLbExRjOA32JUzkzeVIZsLFeiyq0CHHXmabM2ewbrUySyLfUmNAN6QOZXNOdPZXqDJ/lmmnGix + 43iTLQdl+U05d2vWdDalTVbN5H3F+uxVkCfXSp3OupjX2BD7OluSp7AtcRLbkyZzVM651WrHJ73OfN7n + yKM2M25WTFPN37O5E7lQ8BqXiydzu1qLBy1GfNptxvN+ZdpIC76bZ8lPi2z43TJHflrmxLNhK2636nCm + fAoHsl/hrfRX2JbyKuuSlKhlTTblGrEu35Rl2UYsFozmGDGcrUdfmjbNMdOoi5hMtWi+6rCpsjyVvgwD + FpdYMVZmxdpZtmyuc2BXswu721zZ2+XJgV4fDvUFcbQvjOP9EZzuC+dcbwjnuwM43+XLpdmBXJsXo35c + enx+Jrtmp7GlP4+dixo5/uZKTu7dpk4b09Ncxfy+VhbP7aFfOHZjVbForULh6YlERgRIP+1PWWkBK0QD + XZG+78GDjzj27nHeeutt9u4/wukzVzh56io7dx1hbKUSxfsmK9cqpu4+Vq4fx+oN+1mz8QBrNh36X3CQ + NRsOqMesXq9gL8tXv8XiZdvpHVhOTUMfxWUtFBQ1kl/QQK70Cbn5deTk1Upa+yJVtinLNcINaoUXVJCQ + VExEVBYhoamEh2USE5tPkmxLz1D6lVoKiuvJyC4nOa2A1FTF1C2W84okzSc5VTFVFRM1T11PzygkI7NI + 0nEoZrCC1J+hRAH/DHVI6P8dijn8a4NYiQ5OUsxa5X6/SuNfGL8JypDQScocvuNTgin7VLwwfVNSCkiR + Z/8Z6j0EvxjAKUoUsBIBrByrRBenC79KxNszEFsbZ4wNLNDXNsZQzwQLE3NszS1xd3AgUXRvRWGW+sHr + wjmdjPQ3s0x0xYrRHkb7RAu1VdBdX0hfUzGLZ9ezdUk/e1aPsGflfLaJplw/t4M1A80s76lncfsslqqo + ZoVopFVdigmsmMHVLGuqYEFtMaPVRSxuKGOsrXo8Gljut21RHwc3LeHMno3cPnOAR9dP8eD6GW6fP8KF + Q2+zf+t69mxZz/F33uS06LYLRw9z7vBBjr/9Jsd2befwNuFjG9ZyYO0qdi9dzKY5gyxpbWaospz23Exa + s9NpzUyVviiJuoQ4auOiaYiNpjEmhtaoGNoEHYKuSEkjo+mMiqU78mdEqehRooOj4xhQIoIVEzhxHMNJ + StRvMkPJSSrmpIwbwIr5O5qdxjLJ22VF2aoJvEwxgXPG5wEeS0tkcUo8o4mRzE0IZzA+jL7EMGYrBnBK + hLQVkfRlRdCfE8lQUTT9BfJc2RHUJ4WQ7utMoLWxtPe6GGvNQF+gGsCuwrcjQ1UDOC4mQjWAdbU10P4r + A1gxe5VtP+N/GMAawg3Nxw3gXsUA/vPtCv7tTAZfbvHh/gJzLnbN4HzrJG70afFkuQ3/eDCC/7qQrg4B + /V/ncvjH/Yn8ZkuYkB13OcaKCx2mnG404ni1LkfKdKQh1uXdAgOOFxhyusiEsyWmnK8w51KNJedrLDhR + acjRCj053ohzLVZc6bLnUqsNp+tMOFVtzIV6C64223JDOoSbTXZcqbbkbKlcP1ebQ2nTOJw6jdO5Olwt + M+VmpRm3ay35oMWaB112PB5y4bOFbnyzPoA/7o3jv89kwRl59sOx/Od2f/5phTN/nG/FPw9Z8n/m2MBc + W/48ZMO/9VqoBvB3jbp8Xa/D80Y9Pmsy4oH8rusVMzlXNJmTeZM4njOJ0/nTZV2by0W63Cg34r50hh/X + W/OB/LY71WbcqjPnZoM552oMOVEtv7XWgAO1ehyoM2BPjS67KzXZXTWTvTXaHG7Q5bjc63SDDufkvlfq + tOV8PT5qMuTTDjOedprxWbsJn0v69YAt3w+78FWfA897HHjUKPlZrMfqqFfp9p1AretLlDhPpCJAQzWA + 84PNyQyyIDXAlCR/E1KVIUfCDClKtqE83YmiFAcyYhVz15yoQGNChHj4uGji4aCBl6MOgR6mQkiU+UZs + iQkWkRDiSEygA6HeVvi7muChGIKWAsXcs9TDXcSOp70JAZ424wawkykO9kbYWCt/GOjKuhFuyjy5zsY4 + C1zlGp5CXL29LVXD081d+fNOHychPooB7BVohU+ILf5hjgREuajwlmXPUBFYQTZ4ihDyDLEb/xLWXZlz + yQQnuZZPiLOIGyeclTlzlAhgO2N1uFUzGyPMbY0xlYqlGL+G5noqVNP3ReSvChH/CoyUVNbNLIQ4yXmO + Tha4uFnLc1rLs1vi5GSGo4MpLs7jBrC3lw1eAtUIfmEABwQ6Smov2xQD2AhrK13MzDXUeYAVA1gZBlrJ + D3fFHFeMY/fxIW0VE3h8Tl4bdRjbkGBH1cxVzF9lqOe0lGARWqGkJAeSEOdDQryvirgYb/U4JYJXMXEV + wzg8zEU1wpS5hJWIYWUYaGUYaX/Zp9xLMeIVKPf08ZHnlvN8PS1Uc9jNRd6TowHOdno4y/t2dzDAT541 + xM2CAPntnpI/znrTcNYXUir55W0qolIxghQTWOBhrqvODexqoYGL/GYXIajOktfOJrrSuGnhbDAZL8OX + yBQiPpjmyDt1UdwZyONpfy5PGuO5kubGDiHFS+0nM2DyMq06L9OsO4k2Ey167UwZcrJh2MWKOVLO+i2m + M9v0JZa6vs5BERaPOkL5ZxFo/7k2if8YC+c/FvjzpwEXfqw35KvSaTwRYvdh6gTuCW6lvMy1+Je4rBjC + URO5HvMG9xI1+CRFn2fppnyZZcWzbCvup5nyrgiSnYGvs9ZvIsu8JjDmPYENIS+xW0jpsQxNzuQbcirf + hCMilnYn67HE51X67CbQbDqBOvkNQx5GLApyYIGPPLvkc5+rCC9Hbepsp1Jk8Srp5hNItHyJJLvXSHGe + SpYItjSpmwke2kS4KAawFkFu+oT6mhIT4UhyvBdpSd6kJ/uRHOeFl5uRvDPFANbB3lYPW0sTrMyMMTfS + E2iLCNDGzkwTO/PpuJlMIsJ0IkX2r9PjM4MloXqsFaz0m8aw88s02LxMioWIADOBxcvE2E+gLGICS6pf + Y9/QG9xaP5Mfj5nyH9cs+K+bhvzHe9r823sz+dPNmfzjVR3+/qIOvzunw9+d0uTHk2/w25Ov8PenXxa8 + xO9OTuAn2fbVMT0e7jXjylZT9o2J0GzXpVra2gS5j5/kr4fHJKlf4wawu5uIITf5ba5Sb1wNpR0ROBqq + v1M1J6VOWVtqSXujI/XOWq0fhQWx5Eonm5YeTGKSnxr1Gx01Pr+2MrS6l9r2mArZjGDtuvncvKnMjXKZ + Bx9f5c6dc5w9t5/NGxfT3lJCQU405UUJtNbnMjy7lsXzmpnbW8Xs1iI66jJpKEukLDuMvBRf0qW9SpY2 + M1rqmWIAu1hLvlvOkM53BibKH4hK5K9q/krHrRrAU9E2noSW0evomLyOvvnr0k69Lm3UK5iaTZT3OYnQ + QBHKCZakR+qSFjyZvLBJVEXPYCDPjA0dfuydl8D+kRTenhPP1p4Ixup8mF/iQm+OHfUJJpSLAM8XcZwf + MJM8QbbPVFI83iDF/Q0yvKeRK2K1IsGcklhjMkX0JvprEemlj5+UJ3c7Tdwd9USUGuPjZo6bozFWUpfN + lQ9oTHSwtjAgwNuOkuxoOmZl0FeXxmBNIkN1CQzUxNBXH8uctlRWL6hm/455HNu7lF1bBl8YwM5kJdsL + Oc1m75YOti+rZKQtht4yb0YbwljTncz6niTWdsSyqjmK1Y0KIlndEMraxjC2dMTwTn8KJxfnc2VVKVeW + FXBqOJn9XaFsrnFm0yxHNlU7sanWla2NHmxv9mZbsy8bG31ZVePHknIf5hV6MjvbjY4Md9oyvWjO9qUx + J4Da/FBmFURQmhdBdoa0uUmBxMYHERUXQlSsEg2c8IsBrBq/Qvh/jgCOSxHynyqpID5NkJ5BUlqqEPgU + 1TDJSkshJ11+f3qK/H4lEjqZrCRZTk2VfWnSxqeISEklIyuZbEFuVgJ5GTHkp0eQlxpKQbI/VVl+dBUF + sqg6lO0NgZxp9+dWuycPO5z4rNmaJ7OMeFioxZ3sybyX+Ro3cl7jvbw3uJH7GjdzpA5nTuGD7Gk8zJ7O + p4KnctyXqgE8lR8LBUVT+G3ZdP6+UoPfC2/5B8UArtPhj436/NRkwq0yPQ5labIydgo9IVOoiTQgN9qS + 2Ch7lDm3vT2U0ULMcLIywMlMDy876T88nIgL8SFN8jAzOZT0lAApAz7kpnoIP3GiJMmW0ngr8iIMSQnQ + IsFXk1jvmURLXxAnXCUm0JQIP2PhIgaEeekR5atHvPAbZSjodDknPVKPzGhdsqP1KEwwpSjJkop0B6qz + XGnI86Yux4NZWW6UpbtSnOxIfpwtOZEW6ry/WcFmZAaakBlgTnqgGelB0jbIPfMDjSgVXtUYbszseEvm + xJkxL8yAFSF6bAs1ZI/c991wQy6E6HI1cCa3pH4pcwDfD5zOx2HSl8Tq8FmKEc8zzXmaasaDOD3uhM7g + osdELri9xBWvV7jp+wbvB0/jbqSWQJPbUZq8F6nBzfCZXA4R3un/Osc9X+aYxwROyHmnPeVc71e4Itvf + 85/MBwHT+NhvBg+kLj/wnMoDj8l84jGFz7w1+Fzq8rMAXb6UPHoebMCzYF0+F3wmz6vgU8FjxQD2G8eT + QAM+DzXli2gbvoi15/N4ez6JF96Z6sqDDE8+zPLkjuBGugfHo23ZJe9ilYsuKwNtWRTlQWe4K/netoTb + Cz8yM8BWT/lY0IzkiEhaa+pZOryIRXNHKc4vwtfLC2NDAwyVOXztbIUTOeHm5iJ80AkLK+F3tjYEhQRT + WlbKvJH5zJ0/TGd3F03NTVTXVJGZmY6XtwfmFqZyjgNxIgBz87LIkLrj7e2pbosRwaQMAb1KGQp20QiD + ve30yPpIfw9rloyyZvEIzZUlZESHkpMYTm9TGbs2jHJ4z0qO7n9hAB9ZPj7889FlnFQN4KWc3r+AE9t6 + ObSiisMLcri0OIe7y3J4uDyLB4szuL0gjUvDqRybk8qewTQ2D6SzYW4umxZXsmVVG1vX9LN+5SArFs9m + 2UgPi+f3s3hkmIWCRaPzGJ03h/lz+5k/1M3Q7BZqKxQDOJYCaQtaaorUiOEtqxawbdUoaxcNMNrbyMAL + A7ixLIuq/FSqCtKYVZxFTZkSEZBHVVkOdVUF0qeNG8Ad/Z3k1ZYTmpNKWGE2AVnp+KamEJaZRXZ5Bc2d + 3SyYP8Ky0fn0tjZSkpNOemI0GSJwleGo0kQQJ8XFEh0eRnig9LH+foT4+RDq50WYvwcpMaFUFmaqBnBf + ey1zuhoZmd3EgoEmRrrrmd9ZK+vyLgZbWbZ4iLfe3sLpi+MRwGsOHKdnw9s0rdxF48q3aN1wkO6dp+nc + dZb6Te9SuuIdMuauIXX2EgqGltCydC0Ltmxn19FDnL58mhs3L3D63X1sXrOE+f3tDHY3MNBVR39HLX3N + yvBnFfTUl9PdVCn9eDV9HdV0t1XR3FBMTU0uFeVZVFTmSHlrYOnyBYytWkrXUB/FtbNILcojvbiAlMIc + 0iXfSioK6elpZc2qJezfs5XDigG8dQ0rls1j7pxuujobqJ5VpBrAKcnRwkOCBAEUFKTS3l6jzvs7PgR0 + GwMDzcyb387GjQs5enQ7168f5r2bR7h8aR8XL77DezeO8Oij8zx5eImnT67w6eNLfPrwHM8/vcCXzy6r + +ELw7NklwWWePr/Kp59f5PFnZ3n06SmePD0jy6d4/Pg0Tz49x+fPL/P8+TUef6KYwVd49Og8p07tYHZ/ + DVFRXqLj9DAVvmJmKvzKZtwALswIp7sui+VDNaye18iigRoWDDXS1VpJXV0ZNU31NPX00SF1vXPeUlqG + FlHdNURlez8VgureOTTNWUDL3IU0S1tQJ+vlTV1UtfbQ0D1E58AIs5V93ZLfs+rJKiwju6iMtJwiYpIy + CAyPwd7ZDTtHVxxdPXD19CEoLJqwqFjiU1LlfVQyOG8uS1aMsWL9ajbv3MLOd3aycv1KWrtaiJEybOlo + LVzLQLiXjuDXBrDu/4BsUzmbxouhoGe+MIE1X8wHLPljZ6DOA2yhwElPNX8tnYV3O4mOdBw3gJUITStH + LayclEjgcRPY1mUGDqK9HdUPHHVx8zBUh2319RMdGGgpv9OeqCRPcspi6ZnfwPxVg4K59C0apHZ2GzW9 + HTT099I0MEBr/yDtg4N0yHLnQD/zFi1gcGRIHe46Iy8ZF9GoFnbjBrDyLA7uejiqEI0uOsPbXzR8qBWh + kXZExoreTHBRERXnTGSMI5FRDkRFOxITJ7pSiQqOsCEgQDSkh65AR3i6Lr7SFwQGmBIm14mMsJXyYzeO + SHs1ejhKkJzkTnaOP9m5gjx/MrP9hOf4q8M/F5VEjxvAJQnklyZT1VhIc08d7XO6mLNslMUb1rDyza2s + fnsPmw5cZPvhOxy+9DlXH/yea5/8nvP3v+Hs7c+4cu8Rdx8+4L17N7lw9TTvnj7MvmN72HdiP/vPHOaI + YvheP8+tu9e4ceMsZ07s4fiBLby9aQFblnSxaUEz2xbU8/ZYI+8sr+XNJeW8IziwrIwDS4vYt7iYPQuL + eXO0hCWtKcxK9xJtZoC9lAkL0SEmUk8M3cww9LbCyMcaC39bHER/uEe64Rntjn+cJ77RrniE2uHsp0T9 + GmMj+tBOtPfPcPS2kH0WeATZ4BXqgG+4cKoQB7yCbXELsMbO0xArKTNWbnpYusg7dZQyJrByFo3npoOb + rzFufkbybkU3eck79hIN5auFV5BodenfQ+Qdx6QHkV6ZSVFnPS0rFjNyYD8bbrzPto+esvnh12x88APr + P/6RdR/8yNp7P7Hq9o+Cn9hw6zt2XH/E8neO0Dl3gbzLIuJiYsnMSKO8qpzapmYqappISS8iPauC9s75 + vLn7uGoAP3zyA3c/+oKzl+6yZdchRpduYOHYJt4+eFY1gO8++pr3Zf+1e884f/ORagAfOHWDo2fucPrq + R1x8/yFX7j7k7pPP+eTrr/nihx/45qcf+M1P3/PDD98KvuPH73/D333/Iz98I9u+/IYfv/iSH5495odP + 7/HNR1f55oOzfH//ON+9v48vz2/my1Or+ObEGF+/u4jnBwZ5/HYPj9/p5dmhYT7dM8S9zS1cXVTE1dEM + 3l+UzIdjivmbyJMVsTxaEs7Hyvy/8334bFEg362J4reb4vh+fQzPxkL5XPD12hi+3RAviOPZijA+WujL + nfke3Bj2Ug3gcwvCODISw4b2QNUAbki1ojbVgZp0ZypFI+XHOpAm9VIxgOPD7YiRchPmb0WQlxl+zkoA + htTBnw1gBz3cnPR/MYC9vUzw8zbE31ObEC9N0aXaJAULTw7TpyBKj/IYPepidOhLM2Y43Zj56YbMT9Vj + JF2f+VmynGvKUJYJs2V7V5oeHbK9M8OYtgwjmtP0qUsR3Z6szawkXSridSmK0iJPuKsyNHOecNncSG0V + OVG68jsMKE5UDGAzNc2PNSQrQluNqk0SDhvvN5k4/zdUEzg9bDp5MdqUJBhQlmRIeZKRagArqEoyZlay + qZqWCJ8ujNYmP1zuE6JJmlxHjQIWjZugGsCvE+XyOpGOAqc3iHZWDGHZ7q6YxBpqlG6q6Otkf13RHIq+ + 1lNN4LRQWQ7RISNMR55Fif5Vhn+eqQ5nnaIMAe0/5f9iACvDQE8nM0hHnkWHFD9dEkW/xHtpEe+tTbxi + OMu9kgKVj1f1iQkQHRMg/aqPtJ1eRvi6Sf101sXbXt6l2WRcjF/Dw3I6wW7GonekffaywF+0uJ+rtNfS + Tvh5WODtaoqroxG2VrpYmok2N9HCzGgcigFsZWKAg6VwZFsL3J1s8HS1lbbamaBgTyIifVUDODbKm7AA + OzWi3MtmCmHOr5MdPEPeswmLy23Z3ujM7npb3pplzK5iTdakvMyahAmsTXyF9UmvsyNbg535OrxZoET/ + 6rKzQEeNmt2ao8nGzOmMxbzMyviJbMmZwd4KIw7MMuVIvYXoVgfOiWY92WTDgUoj3szXZGeOBserLThZ + a827VWYcLjZkp2IAR01kfcyrbE+Zypup03gnS4MzFcZ80OnMN/N9+c18Lz7tsuR2tQZXSyZxueg11QC+ + WCg6qWIGHzfp82mnMV/0mfPtPEt+WGDN3y2z4/crXfndCle+WGDH3S4jztfM5FjJdN7MfIN1ca+wNOI1 + lsZosDTegIXxpswTzEkwZyDRnN4kMzoTpDxK2SiW8pvr/QbZXhPJE9RFTWVQ6tDiEkvW1zqxo9mVPZ1e + auSvYv4enO3Lvt4ADvQEc7A7hCNdobzbEczxtkBOdPhytjeEC8PxnJV259BwFlt7Mlg/u4At0j8dfXM1 + Jw/sZOvqxQx1NzE62MnS+QPMFV7Q3lBFa30FedkpKteMigoVPlvCihXLuHr1Cg8efMzRd4+z+529HDz8 + LmfOXePEqavseusoq9a8ydjKN1mzbh9rNxxg7cbDKtZvOsKGLUfZsPXY30LZvkXZL9is4BCr1+5hbPmb + ots2Svs/SnmlaI084SKZwp/TKwTlpKQpKFPXle2KsZucWkpCYimxcYVExxYI78iVMpoj3CNftpeQmlZF + Vk6NahZn51WTmlFCQnI+ScmKgVok1yqSfkeW08ahrCtIyywmPbNETRWkZsh2QUp64QvI8S+QJuf9X6Ga + tH+NZMWwVU3n8TQpNY+EpBziFPNXGdY5OVedDkyBeowgKWUcaWmKYV34C5R7KGb2zwawOvy0XE+Zr1hZ + TozPIDYyCT+vIOxtXf5iAOsaY25oio2Z1HEHBxKiwqksyhXd1cCi4S5Gh1pZvqCHVYtms2hOK3O7Z4nW + LWKwpZRlose2L+1nz4ph3lk2xNb5XawTHbKqt45lHbNY0FzGwuZylrRVsryrhpVdtSqWt81iWVM5S5sq + WNKoRACXM9Yix8j2VbPr2TjSxZ61Ixx/cw1Xj7zFB+eP8vHlk9w5d5QLB3azb/Nadq5Zzm7hdbvWrmLb + yuWsW7yQFXOHRFv0Mybcdkl3O0s6WlnQ0sicatG3Rfk0ie6vTU4UJFCXlEBNQjx1CuLjaYwTxMbSGBVD + U2Q0rZExKtoiogTRtMuygs7IKBXd0XEqZsfG0SfnDiaOYygpicFkQco45qYmMJyaxGiWMvSzaJ+SXJYV + 57CkIFPWM9S5gJdkprI4I1GQwMK0OEYEQ0mR9CVF0JsYzuzkCHpSw+nKCGN2TjiDigFcGENPbhTtmcJ9 + w3yIcLDEVdprEy0NDLSU4fylH3dT/J//YQDrzERHMX4VI1g1gX9OX+BXBrBiCGvNnIGVhRkpSYnM7u5i + Ag9q+D9Xcvj2LSEvy625NqDN+bZJXOqaxv1RE77b7sUfD0XxT8cS+MOBBH56M5qvNoQIeXHner8d5zst + ON5gyKEKLfYVzOBgnibHCvQ4WWjAmWJjLpSZcWWWJTea7LjaYsvZOjOO1xhzvNaYUy1WXOi041yrLSfq + zThRY8q5BhsutzpyrcWJy41y/UpLThQZcyRbhwNpGhxM1+RkrgEXyyy5XG7B1SoLrteb836zpTTaNjwc + duLz5V78sCWYfzuYwJ/luf/PnnD+fasPf1rjwr8sdeDfR+3471F7GHHgz3Pt+Pc+K37fZsy3DXp8UavD + 01pdPqmXDqXOiCvlWpwumsqxvMkcyZ3Mu/nTOVWopUYkXyw14L0qU+7WWfF+jQU3ZplzrU6eSzq047Ok + c6s0ZG+1Ibtn6bOrSo8txRqsl+tsKJjC1tIZvD1Lm0N1ehyr0+VkjS7nqnUkr3S4VWfAh01GfNRszEcN + BjyU5U+7LXjeZ8eTTis+67Tho0YLzpbqsjZu3ACucpxAvt1LlPlNpzjIgFxlKMMgCyEppiQHmpAcbEhq + qAHZceYUJNuSn2xPRpwNiRGWRAeJEBDi4S0i1NV+Ou4iUAOFVIb5WxMVZEdEoIg2fwW2hHiOEw9PWyGb + VjoCbYFiAOvhaaeYAxZCLES0OJpgY2OApfJVmrU2Tg4GuDgpBrCJagC7uJioxotiACsmjKubIU4imB1d + 9UWomOAZYIl3sA2+IfYieOzxEniG2OKhCh8rXP0tcfY1x8nHDHtPUxFLpjiJWPIQ8uIqgsvOzRQrByNM + 5NkMzLUxttRTjWBjS8O/MoCNhCgZKVG/Sir42QBWYCLrfzGALXFxs8FdMYCdLXBwMJWG1xgn+Z1u8pu9 + ve1UKObvzxHAAYGO+PraqwaxEgFsK4JQyQ8rxaiSPFEMYMXAcnEyVvNl3Ag2U81YxRRXhnwOCrQfN3Gj + PFTTKjFRxHJGqGoAK3MBK8buzwawsqwcq5jHqqHrZUlI0HgUsGIUJ8aPG8CKkawcoxjA7r8YwGbj9/zF + ADZX97k7K4aigRr96+lkRKCHFSHKHMCOcn1LERhGM3Ez1MLXTB8/c0P8LAzVKGAfyVsvyXcvSw2VuLpb + TsPdSgM3Cy3cJF/dzGfibjIFf5OJ5HjMYCjdibfro7jdn8vjvmw+ronmXJIzWzx1WSZlco75JDoN3qDd + aAYd5vr02FjQb2/LoIMVfTZGdJvLduOJzHV8je3R+lyr9+P7pcn80+oE/iTi698W+/Gnea78odOc3zfr + 81ONBl+XT+J5+et8WjqZj/Le4G7G69xKncztVCGJmUISs834PNua59l2PE634UaCKW/7TGGt22sscn6F + IYcJcr8JLPV6iY1Br/N2jBYHkvR4WwTQjlht1kXMYI7LBLptxg3gBtOXGHQzYFGgHQv8bJkj+d3rbkiL + szY1DtMosnmddOuXSbadSJrLZDI8NMjyFUEi4j3OQ0vIuAZBTlI35RrBUu7DpU7EKsPDxXiQEOsphMAV + DxcpT6oBrCvlU1/EgLGIAUNMDKVsK1+CSlm3lTJtJ3XX1WwaIcavk2UxiRZXLeb56rPMX57PfToDti/T + YP0K6RZTCJdjIswmkCK/tSXpJXb0TuP88pl8skuPP5wx579vmPHn9/T57/c0+c8bM/i365r8y1U9/umS + Pn88r88/nNHm92enCt7gj+deE0yU7RP4h4uv8cNZHZ6/a879/Zac2WLN2rmmtFfNJDPxVUL8X8bHZzKe + Ili9vHTwVKIjPPSlHuqpowU4OiltitRNO2WocgN1mGJb+V22Njr4iEhKSgqgqCCOstIkqmalU1GZRkpK + IElSD5T6oNQVJQLYx9eaoqIE1q+bz6lT73Dq9B5OnNjNkSM7eOutNYyOdFJZrkQ5BVGYF03drAz6lTmA + h+rp7yilt7mAroZs2mrSqS9NoDwnjJw4T9LDXYgNsCXA1Qhny5nYmk/DzHQKJubT1Xl+dQWK+asawFIX + dETkzTR4GW3jlzCweAUz69cwtXwZC8l7N/vXiA0RoZ7jSLEI3vyoaVTETqcpcSZz803Y0OrO2wOh7BmK + Zu9QDG/1R7JJBMSaeh8WVbjRl2NDa6IBtTG6An0Vs0TMFou4KwmaSXmEbI83piPXlqYsC8qkDOeGK19E + iyh10sbbbgZ+zjpE+FoSI21KiI8NbtK+OtgaYm0p5c3OiHB/BypzoumqSqGvMp45VbEM18QwUBlOX3U4 + w63JbFhUy9HdC0W0rODNzYN0t6SSneJEVpIdI7Mz2bO+mW2LS1jQGslghZeQyVA29iSxpTeJje3RquG7 + ti70BQLZKPt3dStDPmdwbXUFdzbW8d7qSs6PZIuYimBjhRPryxzYUOnMpmp3Ntd7sbXRjy1NAayXNmKs + 0ptFpV4M57vTl+kspMyFjkx32rI8acnxoz4vkOq8UEqzg8lOCyQ5QYRyfAAx8UoUsDIP8F8M4MTEcShz + ACckZxCvGMCq8ZtJQqYCKX8ZyWSkKeZvPHnpSRQI8oVU5giBzRbymiPXyxNSm6McI/syhURmZcp2QV5m + lBwfRmF6IMWpfpQme1Cb4UpvgSeLK3zYMsuDEw1u3Gh24uM2e5622PC8zpynFfp8LLzldtYkbma/xns5 + b/B+7hvczp7CvcxpfCTC/FHmDD7NmMrncsyXgt/kT+b7QkHRZH4sm87vKjX4XZUGv5+lxe9rtPiDcJYf + ag24njudPQmvsyx0Il1+E6kOVr78NyY2zJLQIBv83KV+ORrjZqOHm/TFQa52xPh7kRodijI3UU56tBDa + UEn9KUjzkt/kRGmiFcXRJuSGaJHqO4NEXw3ifTSJ99MjPshENYDD/IwJ9jQgxEtPjQKODTBUv6RPjzAi + PdKAjCg9shQDOMmckhRrKjOdqMlxp7U4gOYif2rzfKjK9qQiw132O1EYZ09+tPCiCGvyw60pDLejMMKe + oig7SqNsqIq0oiHKgtnx1kLsXViZ7siKGDPWhRmwTfBOmD5HBeeCtLkaMIP3BLf8pnEvUPqSMC0+idXn + aYopzzIs+DTZlA+idLgROJnzri+9MIBf5brvG9wMmsqdCE3uRGpxO1qb9wQ3Zfly6HTO+E3iqOfLHHKb + wCHnCRwVnHJ/icty3nv+ci//6XzgPZV7bpP4UIHrG3zkOolPvOXd+mvyNECb55JHT4P1eRwsHDdYh4ch + AiWV534o+x/5jxvAnykGcIgxX4Sb8YX89i9ibXkaa8OTBHseJjryIMmJD5KduZ3gwKUIG074mrLX04Qd + 0t6tjXClX/qmEuEUEcrHgQZa2GnNxMVYeGhYBO019SwbXsjowDwKsvKFf3igr6OjzgH8swGsDOns4GCP + qakpFhbCSwKkfBQXMW9kRDWBu3p7aGppoaZ2FllZGXj7eGJhaSb9ghNx8THk5maTnp4qfYe7cE3ZFhtJ + a3M9q5cvY/XSxSyY08dwb6eI4AHWL1vMuqULaKkqITM6jLxEEWvNFbylmG97V3FMNYCX8+6RsRcG8PJf + DOBT+0d5d1sPBxQDeGEel5bmcWd5IR8uL+L+4nyujeZwYiiTt/sz2dibwViPCMWBApaNVrNiaTurxwZZ + vmSIJaN9LJk/mwXz+hmZO8CQiN6B/h5Ju5kz0MXwYKdqAKtf9KcrBnA8rXXFrFjQz9bVi9i+eoGI5kEW + 9DWrEcAdNYXUFUufl5eimsCKAVxXlq8ayLNKs6mvlD6rrZ7heQP0DPdR3NpATHkxCXWzCC8rJSivgOii + UrKramnp7WfRwkWMLRyho6GG3JR4kqJDSEuMIiMlgaTEWGIiwgkNDCDY14sgeRdBXh6iIdykn3AjOWrc + AG6rK2Ogs07yvZGFAy0sGmxmtKeOke5aFvQ3sWi4nZVjw+zZs4NzV85y4toVNh47Q/+WvTSveoumNXto + 33qM2Xuv0LPvBg3bz1Kyej+pc9eTNHspRfNW0L5yE4t37GL3iWOcu3ae925f4uypA2zdMMboUOcvBvBg + Ry0DrdXqvMl9jZVq9ESPLHc2l6nmb211rnCGLKqq86ioyqO1XZ5x2ShLVi2jpX822ZUVJBQUkFpcQnxu + DvFSBnNL8umZ3cn69Ss4eGAHB/bvYNuWlSxfOsycoR46OxqoqS7+lQEcSFSUn3CPdLrluebN62becNe4 + ASz5MWduK2NjA+zatYLj727jxLvb5Zrr2Cdl8uS7W3n/5mE+eXCeLz6/wdfPb/Ll02t88/wa3315Q8W3 + X8o2wVeC57L++RdXePr8Ep89O8+nn5/h8dNTfPL4pGoAP39+WY69wZPHF/nss8s8/uQCZ07vpHd2NZEv + DGAT4xnCXzRVAzg0wImS7Cj6G3NZM6+eDQtaGJtTx+I5jczunEVL8yzautuZPTzCnKWrmDu2jr7Fq+gY + XkJz/yg1yrDO3XNo7J9P94JlDC5bTffIUqrb+6ho6mRWazetvXMYGFkk6QBFs+pIzy8mM7+ElKwCohJS + 8Q+NwsHFAyc3Tzx9/dXI3+j4JGISUqSfzaS8epZqAC9btYLVG9eyffcOdry9g0XLFzGrvgq/EF+MLI2F + fynmr/YvJvD/bgDroGOq7Bs3gHVFbygm8P9mAI9DTzWBLZx0MRf+ZCaa2uyFAawM0WvppBjBmtgqkcDC + 6x2ctbAXODnr4upugJe3KX7+5gSEWBMYZktorBMpOUFUNwvP7Je87a+hpr2SXCmbWeV5ZFcUkVtRSn5V + GYVV5YIyymoraelqpbG9gUI5JjY5DCdPK7m/PmZ28kx2yr11sHdVoI2DuzauXqLd/M1UEzhE+sBQ5UMu + QUikHWFRDkRGi55UTMM4F0kdCQuzFt0rXNxRQzADJyfRdW7aonuNRLtayH4bIsJtf0G4rIeFWosWVeb9 + DSa/MJzS8mgVeQWh6vDPhcUx0tbHkVsQQ0Z+LDklSZTWSrvVXk1zXzsdc2czODaPkfVrWLnzENsPXuf0 + zWfce/YH7n3599z45AuufPiI9x98yL0Hd7n+/nmOn97Lnv1b2bJrDVveWc+Og1t5+9ibnLl8nDsfXuXe + vYtcvrCfEwc2snPNACvm1DDWV8q6oRJ2La7izSWlbBvN5K0FGexblMmBhansX5jG3gWZ7JqXyZLGaKpT + XPGXfLAznyI6X0PetQHGorGNvM0x9DbDRPlYXZnCKtQRt3BnfKLd8I50xi3YBmcfc+w9jbFVDWCTX+Dg + ZYaT7FMifn3CHQiMdMEvzAkf5T+RIFt1miwnb2M5zkjO1cNadJwCW3cd7FRTX/SSCsUA1hZojhvA0r/7 + hZoTFudKVGoQicWp5El72LpyMfP2vcOaK9dYf+cB6z/6QvA9GxQD+KMfWXv/R1bf/YFVd39k4+1v2XXz + ESveOUz74DzSM3IIDQ5BmQs+Jy+bsqoqisurUeY3TEotpr6xn81bD3Dx8gfc+eALbtx+wrtnb7Bh+z6G + F69h/tL17D5wRjWA7z/+ltsPvuLqvaecvfmQoxfucODkDY6cvs2Ji/c4e+1DLt/+mPuffs6Tb7/hq59+ + 4Lu/+5EffvcDP/70G3766Xt++vFHfvfDb/nx2x/4/ouv+f75F3z39BHfPr7Llx9c5qv7Z/n+wxN8f3s/ + X51X5gBewRfHFvH88DBP9vTy8a42PtjZyt1trVxaUcOxObkc7k7iRE80V+bESP8ez+MV8TwZi+XRolA+ + HPbhw7kePFngy1crQ/l+fQRfrw7j4UIfHsg2xfT9ck0UX6+L5vMVcvwCH24Nu3FtjgdXR/w5vyCCowvi + 2dAeRF+RA3Up5tSm2jArxZ6yRHtyhZ+mCddSDODECAfiwhyI8Lf5xQD2/pUB7P7CAHZXRp9ShhP2MsZH + +LK/h5ZqAEepBrA+2ZFGFEYbURatT020Dt1JhgylGDIv1UCgx3CaHnMz9JmTZcRAphG9mYb0ZBjQnWlA + T5YxnZmKCaxPfYqeagDXJOlSmaBDSbQm+ZEaqvmbp5jBwndzIrTJCtMlR+5VKFqzOFExgE0piDNSh4ZO + DRGurxjAovnj/BQD+A11aOicaNGpqgFs9P/FANanKEaHokhdCsLlPiEaZAj3VuYCViKB49xfJ8r5VSId + Xxs3gR3fkPU3fjGA0wN1yZD8SA3UJyVAj9Qg3XGEKM+lRAQr0Jbn0XxhAM+Q46aR7K+YwJPlvL+GMgx0 + etCvDGB/xVw2IMlPlwQfHdEymiQI306U+ybKfWID9YgLMiLS35hQHyN1Gr4AZz1pT3TwtJqGl+UUgmQ9 + KdSBrFgvUiLdRItbEyYI97clzF/aaIGftzK3ryn2NoZYKf9fSr9lJv2ZYgCrUcAmBthZGONsK1zZ0QJP + D3sCA90ID/cmNsaPWOnrwwPs8XVVhoBW5kueQl6oFh3ZFiytUiJX3Xi70Z7ds0zZVaLNquSXWZ3wEmuS + XmVd8utsFR25PVeLXYr5m6+Yv9pszdVUsSlb4xcDeHuuBkdrrTjRKNqh2YazHY5c7HbhvGICN1hxqNKI + Q+VGXGpz4kq7K+flnierLHgzYybrFQM46hV2poj2zNLkSKEel2ss+bjblR8XBvG7Rf58MduWD+u1uVU1 + nRtlk1Xz93z+q1wrmcIHdaLHWvX5vMeYr4fN+H6BJb9dZsvfr3Ll71a589USZz4csORqmyEna/R5M3ca + K6JfYV7AywwHT2NItFNfsDG9oWZ0h1nREW5Fa6QlDRFSnqVeZblPIcn5FeIdJpAoKPZ/lfYETXV+bcUA + 3tXmzv4eH44NBXNkIEjF/r4g9nYH8o7U/b1twRxoDuJgcwCH2/x5tzuE40NxHJ2bzpt9GaxqTWNpey4r + 5zSwf/sqjh/YyU7hnKOD3SwRPr9qyQiL5w8w2NMmXKyFssJckpNiSE1OoLa2hjVr1nLjxk0ePfyEEydP + s3f/QY6+e5Jz56/z7qkr7Np9lDXr3mLFyjdZt2E/6zcdemHoHmHjlqNs2naMzdvf/Vso21X8vHyU9RsO + sGrVOyxdtou5w2tpah6muKSNjKwaFOM3KaX0BcrU9fTMatLSq0hMVszfIqJjComJLVIRG1dMbLwcm1xB + WkYN2blKpHAdWdmzSM1QrlGoIjn114buOFIzFLNXMX0V8/cv+Hn7/zxePUc1Yv8avzZp1f2KqfwCSgTy + r5GUmk9CshIFnKOmiSn5gjwVPx+Togz3LEhPLyY9Ta6jXPMF/soAlj5UiTT+xQCOyyQ2Mhk/r2AcbF3V + IaBVA1jHCDNDM2xMlQhgJxKiIqgqKWCgu0XVl0vm94j+HWTd2BBL53cyv6+egfYyRrpmsVbW31o+xL4V + w+xe0scW0WNr+xpYIfuWtJYz2lgsKGFxW/kLA1jQWcNy0ZtjLRWsaJ0ly5Xq8lhLOcvknBU91ayd28Kb + cl1lGOgrB3dy/+xhPr54gttnjnDm7e28tXaMDUvms37JKCvmzRFN2MVAUyM9NdX0VlfSLXy2o7SQzuIC + 2ovyaM7NpC4tmeqkBCrjY6kSzIqPU1H7wgBuUBAbS31UDHUR0TRGxqhoiYxS0RoVraJd9ivojIlT0RMb + R29cPP2JceOQe/RLvRlISVIxNzWJ4fQkFmSns7Qgh7HSPJaV5LKoIIPRnDQWZKWwIDOZ0YxEFmYJsmVZ + MJQWy+yUKLoTI+hOjqAjJYz21GC6skLoK4yS/j6Wnnx5jrw4KmIDiXW1x93EEDOtGf/PBrC2xq8MYMX0 + nf4rKFHAf8HfGsCPZvF/3svhp0OhfLrJiduj0uh2T+di1zRuDxvwaLkNX2zy5IvNPjzfGMAXG4L5bGUg + 90bcuTLbnhNNphyq1mVfqSYHimZytESXM+WGXKww4VKFKZerzLgujfN7LfbcaLfncosNZ1osONVsyek2 + W851OHBGcKLJkuMNsq3RgYutzlxscuR0tRXHy8w5XGDE/mxd9qZrcSBTj2N5JpwrsxFYc67cnHOzTLhQ + Y8KVBhPu9tnyeKErX6/y4Q87w/n3fVH8+5vB/NsWb/601pV/W+XMf425wFJnWCLpqBP/MWTH7zvN+KbJ + gKfVWjyepcPHNUbcqTbicoUOp4o0OJI3jYN5UzicN51jBYrJrcnJQh3Ol+hzuVLuL7/1fKUpF2otOVNr + wcFKY96uMGJXhSGby3TZUKzFmvzpLM96nRU5k1hbOIVt5ZrsrdXnUJ0B71YbcGqWLucqtbkyS5+b0vHc + qtPn/Wpt7tTq8WGLCY+6LHnYYcEnHdbcb7SQfNZTv7rqC5xAjdsEihxfosR3KvkBumQHmQhJsSAlyFQI + jCkpocakhBuRKoQvPdqMzDhr0mJEiKkGsAnBPoaqAexkNxU3xQAWwRKmGL9BdkSKaBk3gG1+MYC9FUPQ + WhsvGx28bPVwt1HIpxGezuMmr729oYggZWjQmVjJcY72IkKcxo3fnzE+X64lni8MYHsRv3aO2ti76OHi + ZYKHnwXu/la4+Vni4m+Ja8B4qggiJ3k+RznGwVsRSYpYMpVlITXeFti7mYi4lspjq4uRhTZ6JiLUzbRl + WVn/i/mrQhnu+Vf4fzKA3VytcHI0w1YIlrWVPnYi+l1cld9hKyTbVjWAvbys/sYAdnSUZ5RjlbywkTyz + sRWBJnmoGOPOjso8psa4uYxH/yrDMf88JLMy/HN0pIc63HNGmlT+jDBysyMlDSctOYikRH81sldFvJ9q + FAf6K8M7j18nUEhheKiLOvSzYnr9bAD/PM+vMgewko5HHpup5q8CxQxWtinDdismsIcyX7GrKSHe1oR6 + WRPkZI6vlQFuxpp4GOngZ2ZAoIUR/ooJLMv+knd+5jPxs54mmIqvjcB6Oj6WMwVa+FjJPouphFm8TrGv + jjSeHuxriuN6TyYfdqdzuzKcY3EObBQRu1zK43xrTfrMNemS63ZaivCwtqDLxopuW3ParA1pMptOvdFE + OmwnsjhIg70FDtzrD+O7ZZH8w1gIfxrz559G3fjnQRv+pc+Cf+sz45+6DfiHdl1+bNHlqzptnlZo80mh + Ng/z9HhSYMrTAmue5trxJFuulWLDhRhTtnlMZczpDebZv0qPzQRm205gxO011vhNZ0eokMUIQ7aIyFkT + PJPF/lPokzrZYf0SLWYv0Ww+kT5nHeb7WjLqZ8OglNUuD0Ma3XSocppBgf0bZNi+SroIlEyP6WT7aJHp + I0LNU4toVyX6dzqBzlr4S13x9zQhQK4TJHVTMfmV4cKDRQgoos9FxJ+TwN7WABtrIyzMDTAyVOZv1cTM + TBnGV1+gi6PkWaDxJFJMJ1Ntp8lsV11GPfSY5zyDPttXaLB+lSzzKUQbvUKc2QTypI2Zm/sqx0b1uLfV + lO8OWfKvF6zhhhm8r8+fb2ryX9dn8J/XNPm3Kwb862Uj/nTBiH+6oMc/XtAQTOWfL0zmny++xj9fmsg/ + Xnmd313S4+sz5jw6asPV3U7sFCI+2GJAUdZkosJexd9/Gr5+OgI9fKSN8hJxpAyRp3zV7Kp8oCB1z1Vp + T5QPS6QeKcPNKx9VKAZwRKS7dJbhlJcl09ZeQk9vFUWF8UKggkToeKp1y0PKeaDkX3l5KqtXz2XHzpVs + 3LRYluexdu2IkOX5dHVVSZ2LIl7qT05mGFVyva6WAub2VTO/v4a53RXqUIjtdZk0ViRSmRdBfqIvWdHu + JATZEiR1zNliBtaSz2YmkzAxn4qhxXQMzDXQk3egZ6rM/TsFPeNX0TKcIOsTMJVyYOc8GXspCw42L+Hl + +KoIRC0qsu0oTzWkPGEmDcmadKRpMr/QmA3Kl7m9/uzpC2XfQATvSNl/syeULa0BrKzxZFGpM0M5lnSn + mtD5Am2JUvbi9GgWMd6WakFPtjX9RQ50FyomsBlVIq4zgw2IcNbAz2YSgVJGk0KsRYB6kKbMOy5C0U+Z + DsDRmAAPZa54N6pzhNyUxNBTFMZgaTjzKiUtC2ZwVigLOlLYsriWd3cv5PTBFby1aYCuphSykkTUJtgw + 0p3KW6uq2Tyaz6KWcIarvBlrCmFrTwI7BJvbItnQEMq62sBx1AWwpTmMt3vjOT6SxY01ldzdVM/ttdVc + XJjH4Z4YNlW4sLbUkQ0Vbmyq9mJznTdb6v3ZVK9cI4Bl5V4sLPZgTp4L/ZlO9GY605PjRpe0Rx15fjTl + BVCTE0hppj85KX6kxPsQH+9PfFIocYnRqgGckJQiSJW2OE2Qqi4npqSTlJZBUmYWyVmZpOZkkiYEMSs7 + idzMBAoy4ijKSKBEiGJhSjy5ibHkKMZVQhz5QjrzUhUTOJGs9HiyM2LJFeRLm1+YFkRJmj9lKV5UJjnT + kG5Pf66TEFE3tlW5cGyWPVdEWN8XLvVpkxVfSvpljTGflmrzoXCY28ow0NmTuJPzwvzNmsHDjBk8ydDg + 07SpPM+YxJcZb/Bd3iS+LxQUT+bH0mnjBrDg7ytnqvj9LG1+U6XL1fQ3eCdaRH3wS/Qr01AETCM/SI+E + QCMi/UwJk3Yq2FX6BGmPfKX/i/J2Ei4ieZkQTaEQ5IJs+e1ZkRRkBUte+FCZ4kxFvDnF4XrkBkwnw2ea + +idOsr+0gwH6JASbjhvAvkYEexoK9An31ifW30j2GZAeaUxGlKFAn0zlj6YkC0pTbamS91qX60FbaSAt + JYHUFfhRk+cr5dWbikx3SpNdKY53pDTeifI4J2bFuVId705tkjuNSW60JbnQm+jAaJoz6/K82ZrrxsYE + KzZJe78tTJ93QnU4LDgdOJPL/jO44T+d9/2mclf6oo+kP3gUa8TTZHM+S7HgUbwJd8I0ueLzGmedJ3De + dQJXvF7jqu/rXA+czK3wGdyO0uZ2jC7vx+hxM0qLy2EzOOM/mSOeEzno+jIH5bwjLhM45fEqF32m8H7A + DO4K7nnJe3WbxAcKXN5Q8bHXdD7xm8mTAC2eBunzRN7PgyDhuEFSJoK1+UDalfv+mnwoePgrA/hZsBFf + hJrwpXDEL6Ot+TzGkifCGR9I+nGsNR/F2XA/1pZbkbZcDbLilHCzPX5WbA61Z16gFVVuxkSbauKlp4GL + tvT75hZki9jqqW1ibHghIwPD8v7zhWd4Y6Crh56ONnY21jg7OahDQNvZ2WJsbCx9lvArX1/yCgtU8/dn + A7i5tYW6+lpycrKkn/AVXmWFMhR0fILUJdmWIoJNiQx2d3cVbhRFR1sTa1eMsU6wfME8Fs0dYNnIXDat + XMam5YtpryknOy5S6mMsg22zeGfLEo7tW8Ox/Ss4enA5xw7/bACv+MUAPrlvhGPbe9ivGMCL8rk4Vsjt + laXcW17G7WUlXFpYzLvzC3l7bhEbB4sYGyhk0XAFC0cbWLyokyWLlIjfARYM97Fgbh8jc/uZN9TPwOwu + Zvd0MDi7g6H+DuYOtKsGcEN1kdoWFGTG0VJbzOK5naxbOpcNS+ewfF43o7Ob6GupVOf/rS5MpSxH+qOf + DeDyfNX4VYaDVtKeziYWLBlhSFAp90usryG1rZWYugbCy6tJmlVPYWM7HUPDLFmyVDWAW2uryE+OV6N6 + 0xIjBbGquR4RHEygrw8Bnm4EeLlL6iocxYVQXzc5VvrMoizaGyoY6qqXPrOJJXNaVSzsq1ehLC8d6WbN + yhH2H3iTSzcucvrmdTafPMvQ9v20rX2Hlg0H6dhxmr4D1+k5eIuGNy9Suv4IaSNbSRlaSfHoGjrXbGXp + m7vZc/oEF25e4tadK5w7fYhtG5czOqdLneN3UJnrt11BrbznagZaZ9En77u7pYrWhmLqa/PV6N/qWsnD + ugLKZ+XR2FbDvCXzWbByjObBAfIlj1LLq0irqCahsITEvHzyq8rpkzK1ees6Dh16i337trFpwzKWLBxk + QN6hMgT0rw3gqEh/IiP9KC7OUIeYHpnfy/Bw5y8G8MBQkywrcw8PsX3bYrZtXcS6tXNZs7qf7VtGOXZ0 + E/fvnuD559f5zdd3+PaLW3zz/KZq/H77xU2+/vJ9vnx+iy9k+zNZ//z5tV8ZwGdVfPb0HJ9/fkmOucrz + 59dVA/jTTxUD+BJnTr9FtzoHsLuq5QwNp2FqoqHyysgQN6oKE1g4u5JdK3t5a00/m5Z0sXyklaG+BjXa + uXegl9GxFSzfuI3lW3axcP12hpato3t0jNY5C6jvHaaxbx79i1cyunoTc8fW0jowQnXb7PGho7v6GFq4 + lM6BuZTW1KsGcHpOIYnpOYTFJOIbEq4O+eztL2UvNEKN/E1MTRdkkCXvo7qhnjkj81i+eiXrNq1j21vb + Wb91Pf1S15Thn119XIVr6aGlmr8/m75K+msDWO8FxvdpG2uMRwGrBrDGXxnAJrb6mDn8GrqqEWwmmlaB + qcOvDGBZV6DMB2zjpIW9wNZBtK+DDs5K1J6nKX4Bwk1DbccRIfo7wZ3swgjJizRBBrllqaTmJ5CYE098 + RjxxgnjpU5OykknKTiY1N5VcqevZRZnEpkTgF+qGg7s51s4GmNtrYSacX4lGVu6vQDGjHUWLuHsb4RNo + hl+wJf4CvyDRhIGKGW2lGsDRsc4qomKcCAqylPZV0bLTRfPPEG2sibubLt4+xgTK8wcLXwwNsfkFwcGi + HeWc2Bg3aaNDKatIoLE5i5a2HKprkikuEZ5TEENOfjQZ2eEki95NzYogqziZ3MociuvKKG+eRU1PA02D + vfQtWs2KLYc5dulDPnz+E09/+0ce/+YHPnr2Gfce3eXqzTOcOruHPfvWsUXq0Iq1c1ixcR6rti9k425p + 10+/w+0PLvDJ42t8dP8sF0/uYPeGQZYPVbCoM4fVA3lsW1DMjgX5bBlOYde8RPaOJnFgJE7F3pFEds1N + YlF9KLOS7QlxmYGL1RRsbTQkn6UMeJhg7P0CXiZY+FpgFyh9XIgDnpHOeEY44hpkrf6n4ehtip2nMgT0 + OBQzWIGjnKv87+Ed5kBQpCuBcp5/uBO+0s96BFri5muGi48pjl5G2It+U+DopY+jpwHOXnoqxg1gLZy9 + Z6oGsHeAIQFhlkQmCo9PDSIuX7hmYxn1i+fSv2sri06eYOzKTVbefsTqu1+y4ePvVSN43Qe/Yc3937D2 + 3m/Ycucrdlz/mGVvH6K1f5jU9CwC/QOICA8mPTOVopISCorKSUhQ5izMo6S8maVjW+VdnOHoiescOX6N + PYfPsmLDLvrnL2fuojW8deA0V29/wv3H33Dr4ZdcufsZZ2884Mj52xyQcw6dfJ93z93m1OV7XHj/wxcG + 8Nd89dvv+e53P/DD777nh98qBvAPgp/46fuf+OHr3/Dtsy/4RpkH+PHHfPnwNp/fvcAX906pBvAPdw7w + 1YVNPDu+jKeH5vF4z2w+erOdO9vqub6hmtNLitndk8aW2ki21YSytzGYs7PDubcwlifL43myLIZHC0P5 + cK4XH85x59F8Lz5f5s+XKwJ4vNib24NO3BpwVk3gpyvCeL46gs9WBPNg8bgBfHXIjUvDvpycGyS6LZSV + Dd5059lQk2RCbaq1lCs74aU25ERZkRphRXKEEgX8wgAO+FsDWIGntD/uss3DTdHLhngrddpTD38PzV8M + YGUe4PxYM0rjzKiMM6Yh3pBOQX+iPsPJglRdhlJ0GEzVYSBDn9mZ+vQoBvAL9GYZ0Z1pTHuGgWhRPXle + bWoSFQNYm9LomRREKAbwDHIiNMfN31BtMoRvZobrkhttqE7P8lcGcLAGCf5TifOZRKzvJDUKOFWJoo2Q + a8XqUip69W8M4JS/NoCLo/RU5EfqkBumQ6Zw2zTRDwmek4lxfZVIJ8UEHo8EjnL6awM4U/IjVfixYgCn + BOqoSBaOnCJIludOCdaUZYE8p4Jk0SeJwvET5HkT5Xl/DcUYTgucIdfVVq+dEqiYy4akKvMvByiRv6Jn + BInCwxODdYgP1hX9YkxskKnoJmNCFG3jZkiImwH+DlqEOOsSH2BJQbIvZZkh5Cb7ExfsQFSgPdHBjkQF + OxMR4kxIkBM+XrY4O5pibaGHuYkSCayjmr9mhjqY6GthbqSDtbkB9jbK/382+Pk6ERbqrkb/xkd7qtcK + 9DAjQPqmWK+ZFEXKe8+3YUWNM7ta3Hmr3o43K43ZXqLJ6rSJrE5+hXWpb7AhbTJbMmeo0b7j5q8W23I1 + 2ZIzk83ZGmzKnM5S0YqrEl5hR95MjtRZcqrFTo3+VQzg813OXOxy4UKHE+da7DnfbM+1LndudHuqJvA5 + ue87OTpsiHqF9RET2ZUynQN5upwqM+Z6ox0Petz4zYgfv1voy7eDjjxqNuBuzUzeq5zOlZLJqgF8qeB1 + 7sxSooB1eNKpz7MBQ74aNuG7hRb8uMyB71e68tVSVx4O2/FerxUn603YlT+TpZGv0u8zgV55110+WrT5 + GNDqY0KzvwUN0s/VSX9ZEWBMjqcWKc5TiLWfSKTNBKIFed4TaYqZwdxsY9UAfqvDk0N9/pwcDuPEcDjH + 54ZzeDCMvT3BvNUqaA7mncYg9jQFsl8xg7tCOTA7hndmp7CuNYmRmkQGpf9XTLtdG5ZydN9OdilTjYzM + Ye2yhWxbt4oNq5axfNF8Fs4boqmuhsJ86TsL8+nq6mLbth3cuXNPeN7nXLx4mSPHjnNCePaFi4oBfJE3 + 3z7CmnW7WLFqJ+s27mf95kNskD5WwcatR9i07Shbth/7/wmbtxxh7bp9rFj5NosWb6evbzk1tQPkFTSr + 0b6K8ftrAzgtvZrklErRcKXExBYSHaOYv8W/IDZOMYArScuofmEA15OZ8/8fA1jBrw1ZBf9zf6oSRfwC + KWok8V8bwYrpq5q/ypDQSsTvCyjHKVCHrBaoBrDg1/f62QBW5y9OylGN358N4KT/YQCbGlpioGPywgA2 + x8ZUtLCjM4kx0VSXFYt2bGdswSArFg2K/h0WzGXxvA7mCVef01nF4v4Gti3tZ9/q+RxYOY+3F89m63Ab + a3pqGWsXLtRUzEh9wbgB3PoXA3hFh2L6VqnG789GsIrWMpYKlnVWsmagnu0LZ3NQyuq1Q7v44OxhPjx3 + jBvH9nJo82o2LprL2Jxelg71Ma+rnd6GWtorymiR524pLqChIJfa7DTqhFPUZ6VSnZZEZVIcFfExlMVF + Ux4TRYWkCmbFxjArLoYaSWtiYqiNiqYmMoq6yGjqBU3RUSqaJV8UtMkxCtrj4lR0xcbSLWlv4jhmJ8Wr + 6EtJVDGUmszcjGRGczNZUpTDktJcFhdnM5KfLvU7Sfb9jETmZQtyUyRNZnZ6PJ0pUbQnRNCaGE5LUigt + yUG0ZARKXx/O7OJYegpjac+Llb4thHhPZ9xNhadrTcdQ8y8GcFREiBpAEhsdjoOdlToE9P80gLVmTvsV + lPW/xl8bwE+q+K97efzD6Wi+ftubB6usuTqgxYXu6dwY1OX9YUM+XGTNB4sd+GCRCx8v9eHDhT68L0Tn + Qrc9B2bps6dMi73FMzlcqs3pKkMu1ZhyrcacGzVmKt5rsOSONPK3uhy51uHAxU5bLnQ5cL5HGntptM91 + u3Kq1YHjTfacbHTkTJMTx2tsOVRiyt58Y2n09XkrU4fd6drsFdJxON+MU+V2AhtOlplxotyYkxUGnJFn + udZmzsdzHHi2xJ3fbgjgn3eE8K/b/PmXTV7863oP/nO9J39e7w1rvGC1YKk7/zHPkX/oteTbViMez5rJ + x5Va3K8y4FaVEZcqdDlZpKkavwfyprE/d5qkM1UczpVOTI14Voa+1uNYqQHHZ5lxpNqMt8sN2SHrG4v1 + WFWozXI5fln2VBamv8aijNcZy53E+mIN3q414qB0MkdqjDhRbSD5p8v5Sn0ulutyVZavVMzkWpU2txoM + +aDNlI86LHjUbcu9FivOyvPtyJrBSNRrtAW+QqXXKxRJB5Xjq0lmoBHpweakhViQFmZBeoQ5qZGmJIcZ + ES9EJzHclMQIC2KVeXv8RAx46uLpOANHmym4O2kTJIIiXIRJVLAtkYE2RAfYqgj1tiDAzQQfez28bXXw + tlGiw/SEdArsDeVcI9WAsbUVwmExU4VieDooRueLyN9fG8Be3iIgPUXAuMs5iii2kQJqNxM7Fz2cFPHj + aaLCXsTT30AVSoYvUhNVNNm7G2PtJBXHTnfcALb8lQFsOW4A/5UJ/P/CAHZ2tcbF2QJ7O2U+X10szIVI + WYvYcjLGw0P589FKfovF/2oAKxHAvzaAlejfnw3gnyOAPRRDXDFfBT6KEetlSZCf5Hu4O+kpweRnR1GY + G0NhngjkzEiy0kKlMQghPVUE1wso0Y3hQuDUuXwlb5W5gJUhpKMi3FTzVzGClSGgfXzkeVUD2FDS8XmA + Ffh4mKsGsHKul6c53vJMignsJe/L192cUB8R8ooB7GyOj7ViAIvYMNZVTd8gcyMCJQ0w1SPITItgi+mE + SHkKtZlMmN0UwmynEWKtIRARYj2TMOtpxNtOoSbYiBXFfhxpS+Fiewo3WxO5XBrCnkgb1rnpsUKEzCJH + I+baGTHb2ohOaxParM1otjal0caYGks9KkymUmrwErMsX6LLcxJjica8W+/Ox3N9+Ubaq98v9eUPC935 + 5xFH/n2+HSx05L9HbPnPuVb8y4Alv+8254dmc76aZcLnZaZ8XmLJ0yJbnuTZ80GGENEkG45HmbHebToL + HCYxYPsa7RYv0WE1kSHnySz30mZjoImK1f56LPSZyZDHVHocX6PDTuqn1Wu0Wk2ix0GTQSmr8/xthFBa + 0CHlt85dh3KXGeQ5TiLL/nWy3KaQK6IkT0RahrcWCW4ziXCaTpDjNAKctfF11cfLVcSdi9Q31bw3x8vN + fHyObRF+zlI3lQ8uxg1gQ8zNpJwbaQk0x+e0ttRX56O2N5uBj9EbxAmKzKbQJHWv33EmA/by3DavSt6+ + Ro7pG8QbvUya5QSqhACvKJvC5eUWPH3bgT+eduG/rtjDDQt434A/39Div65p8H+uaPEfVwz59ysm/Nsl + Y/71kiH/clmXf7miKamGpNP4l6tT+Ofr0/njdSO+v2jNZ6ccuH3IgwMb3JjfZUK5tLWxka8TLEIrUERZ + gIgnf38pg/6mePsKlPnRfMY/tlChRt6P1z1/qXuBQfYCEckxPkJ+Y+nsKmPO3AZKihNITvQnMtyVoAA7 + uZYVoWEulJYIsR7tYHS0i8GhZiGqSnRUO4sW9VIvxEcxjRUDODsjjMrSJDqa8xkeqBFS1c5iue5gVwmd + jTk0VSZSXRBFcao/ufGeJAXbEeRqhIvldKyM38DCdJK8g8nSBk0VTBdojKeWU6X9Ueb8nYiZ5L2jx3R8 + ArTlN2tKnZxMsAjYtHAdqnNsqBbR3ZCuT3e2iPUcPUaLFGHhyJud3uzpDWRfXwjv9AazuyeE7W0BrKv3 + ZOUsNxYU2zGca8VQrqWKgWwLejNM6c+yYm6BPfNKnJhX5sJQqZMQEgfacu1ExBuIcJ6Kv5TzQCmbmZFW + lKZ5U5LuR06cFzGSh0qfECv5nZ/gQ112CC25gXRk+9BX4MtwaYBcz5951aGMdaezY2kdJ3ePcvbQCt7e + PEhXYzKZCfZkx1kxvyNJ9pexcTiLJS1hLKj2YXljINu6Y9Uo3y2tEWxsCFGN3/W1CvzY3BTM210xvDsv + g6sry7m1oZr311RyfkEOB7uj2VTpxppSZ9ZXeLCxxpvNdb5sqvNno1xjbc24ATxa5MqcfGcGshwlP13o + V6KB8z3pLfKlrSCA+twAyjN8yU/xJUN+Y3JigJDyUEEsiUkJgmQVyQmpJCUkk5Aoy8lpQvDTSc/KIjM7 + S4RKBvm5aRTlJFGSE09FlhDYLEmFKBanxpGXIG16bJSksSLy48lLTSA3LYHstHhJY8lPj6YwPUyODaQs + 1Y/KFA9qkh1pTbNlKMeOVSWO7Kiw53CZOefLDIW7GPOwxpjP68x4Xm3E0wo9HhbO5IOcKdzNniyYyv2M + 6ar5+0n6TD5L0+Bp6jS+SJ/MV+mT+E3uZH4omKwOAf1TyXR+Vz5zHGUa46jQ5Nsyba6lvMaB6IlsDnuF + BQGv0xYwjTJ/LTL89Ej0NRQYE+dtQqT072EuxsT7OpIe7kd+UrTkQxJFuQkUSL9WIuWmItOX6lRnKmNN + KQnVJN9/Mrl+U8gOUP5I0SE1yICkEFN1DuAIue6vDeCYAOE1wYakRZkIDEiP1icj2oCCJEtKJI8qs5yp + zfOgudifpiI/WZZ75fowS1CR7UFpqhuliS5UJLlSk+RGQ7IXzSk+tKX50J3uzUCGF/PS3FiR6c52Kddv + 5XuwXfqELRGGbA/V4+1QbQ4Ga/L/4eyvw+w4smwPVO02CAulYmZmZmZmZmYGVamkUlWpqsTMDBYzWMyy + ZZllttvQbp47PdT3DvTM3N/bmSUZerrve9/7Y32RJ+nkiYyMWOus3DsuybXeDNTgfsACHgbM53GwFu9E + 6PNhnAmfJVvySbLw01hjXg/S4pbni1xxnsU1t59x2/sV7vrO5l7gHB6GafA4etEzA9iA+9ELuRWuxRU5 + 31mvlzjl/iInXV/gtNsLXPZ8hRu+8+W7tHhT8MRbiQCey7se83jHba6Kd701+NBfh4+DFvKZGv2rr5q/ + ivH7JEiHx4E6vOEnx/oL95Ux58MAZT7gHxvAlnwdLeNhjAUfyRj4XpQp70g9vxNrwXsJtrwb58CTKAfu + RzhyTvjioQgHVoXa0CYcLcNGjwhzA0ItpB24u1GflcOK3kG2r1rP6vFpEafVhAaHY2NphaW5Ge6uLtKX + e0g/7in80E34lY3wJHtCw8OpqK5icuU0K6anWDw8RHdfL51dHZSVlRARESac0hkl5XOiCDdlzuykpAR8 + /bzVKOCUJBF2XW2sXz3NBsHayTFWTSxj3dQ4uzatY9fG1fQ0VpObFENxRiIjPY0c3bOGC8c3c/7Ees6d + WqdGAV84PTMP8KVza3nt7OrvDeBja2o4NVnIjTWlPNpQyWPpix6treDmdCXnJis4MlHJjuWVrButYnp5 + HSvGW2Ws6WR8eT/jywYZG5nB8pEhlg0PMtTfxWBfp1qODHXJWPPcAFYigGMpyIyjVZaXD7ayeqyfdYLJ + oXZGexsZaK2cmf+3MJWy7ESq1BTQWdRX5NFYWUCtCNaGqiL6e1qZWjPFsrXT1Mh3J7e1kNbbS2xLB1E1 + LaQ2dFDePUTf2AqmV61m5fhy2morKUpPIiMhUjWA0xJjiIsOJywwkAAfb/w9FOPXXTV/A7xdiQz0Uvet + E6Hc01rN0t5mxodaWbWsU8X0cIuK1aNdck8G2LJpBSfPHOb+47tce+MRu1+7wdL9p+jefpzOnefoOXCD + 4dNvMHDmLVoO36Ni+yUyJ/eTMbqZssmt9G7Zw+rDRzh27TI337jDG0/kPFdOfh8BrBjAIz1NLO1uYlTK + ka56lnTWMdRVx0BnDd3tFXS0l9LRKWVXDS0dVVQ1lNDUKXxgaoKJjRvoGB2jrKuf3OYusps6SKtqIKOi + mvLmZpbKPnsO7ObUmVd59ehuNm6clHs8wEB/C81NFdTWFFFUqEwDEKWav//TAO5hyUgni6WOBqVe+gca + pJ10s3btMCtXDci5Ohhd1syqlT3s37eS1x+e5RdfPuC3v3mXX//yLX7x2T2+FCjlF58/5PNPH/LpZwoe + CO7y6ec3BdefmcDX+eLLm3zxxW3Z9w6ffXqHTz6+zaef3uPjD+9w5fIhuroqCQl1xdxcB339uZgYi0YU + Hh4f5UNzVSabVnRyeu8k5w6s5Mi25WySaxxb2sHiwQ5GRpewdutWth18le2Hj7Nx/zGmt+1jZM1maVMr + aV0s7WloTDV+V2/fz8qtexkYW0WDtLmK5g5qO3qkPlfTv3SMyqYWsorLSMvJJz41k5DoOHxDwgkMjSAs + Ko7o+GTik9NIz84lIyePwrIymjukribGWbdpA1t2bmXn/l2s2rBKTYccnxqHrYvts8hfxfBd9L3J+xMD + 2MRgBn9hACvmr4GV5v8wgM3sn0H4t5nwcMUENncUHamawD8Yv1ZOi1TMmK8LsRPYOoietFfMYH3Rw8b4 + +M8YwCHhoiXDbAmNdCQuxYfM/EhBNCnZUSRnR5KQEUFkYjDhcUFEJAQTlRQ6g+QwYlPCiZEyMMITV9F8 + 9qIRFGNSMYDN7LTVtNRWiiktsHHSUlNSOyvpnP1FEwrf9pJx1tPXCHcfQ7xkXWS0M7FxbsTEuhEVLTrT + 3xwXV12sbedjZ68hWlhH+m3RJzLmBwRaEhhsLTzc5nsEBinZsSyIjHIhW8b8xuYc6ctrWLa8gb7+Msoq + k8nLjxHeFEGycJ0EJcuV6NqUbPm9eQmkFcg9LhFOJX1ZblUZ5U2dDCxfx8FT13jy8df86p/+N7/+53/k + y998xTtPH3JJ2vDRV9exY/sIq9d0SXtoZPlK6XvXdTG9aTH7jm7k3uvn+OzzB/zi8/s8un2EV3eNsGqo + mNHWZNYMZLFjrIBdYzlsX5LE3iUJHBlN4NjSGI4ti+Hoslj2D8cxURdAdZKV8BwtPO0XiP7Sxk50mpVo + PTNvE0wFJl7GmMuYaCPaxTHIHs8IZ7yinPAMtcdFyWgWYImTr/nMC+1eJtgKZ7KRc9h7GuPsZ65mPwuK + cpa27/rMBHbES+rXQ+rT3U8gx7r6mjyDMrezAkPV/P1LA1iJAA6MsCImxZOY9EDi8mLJbCigerSHrm3r + GD56mInLrzF163XWPPiQTW99zZa3v1WxWbD1rW/Z9eYX7L77DtMHTtA6MEJKWgYBfr6EhwaizL9fWFRE + YWGZcONcYhNyyMqtom9gQsbw7azduI/1mw+wdst+RibW0TW0giUrNrD36AVuPnqfN59+xcP3vuT2m5+q + BvDZa485fuEeJ84/4OyV17l4/Q2u3X+Ltz/7nM9+9R3f/t3vfmIA/+4Pv+V3v/sdv/3Vb/nVV7/km8+/ + 5KuPP+Grp2/z5XuP+PiNq3zx+AK/evs8v318nK9vbOfz8yv58Ogw7+7v4vGuZh5sreLK6iIO9SextiqE + yVxPNhT7cqAuiCsDETxZEcenaxP5dGUMH02E8f5Sb4EnT0e9+HiFNx9PevHmsAO3Oi0EljwacuHpdCCf + rQ3nkzXBsuzH41F37gy7cW3Ym9MDPuxs9WRFpTMdmRZUxxtRn2ZNTaoyJYoNucLBfmwAJ4T9YAAHiMZU + DGBlzlgF3k4z/w/81ADWI9BTe8YA9lMMTUNKEm2oSramPsmSliQzuuKN6U/QZ0miHkuSFzKUrMNgig4D + 6Xr0ZejRq0T/CvoFA2o0sAldGYa0pOrRkLxINYCrExQDWJOCCA1ywxeQHaYp0CYzSJs0QYbwzpxIAwqE + Excnmj4zgIXfKwaw/wLifeeqBrACZZ7ddDleSR9dLPVRnmxCRdIMqpJNqUkzpyplxgBWUkCXxOhTGmco + n40okfPnCzfPEo6bqqSC9phNjPPLRDspeIlol5f/nwZwihKhG6g7AzlHklx7spTJwumTgjRJCtAQPTNP + 9M1s4oS/P4fyOdFvLimiAdKEWyvnTle0ifDpdNEw6neE6KlIDl0o0CMxVPRSqLHAgrhAcyKl/1Reno2W + ZzpS+oJ46R/y4j2oKYimoTiOkqwwEiNciVECRJ4bwGEuRIS5ERTgjLubFdZWMv7I2KYYwJamMj4ZLsRQ + Twsjfen3TWTssZL+wUUJ9lD+I5wJEkmK8yU+3EM0vQ2hbvpqxHJ5rClDJU5sbPRkX7M7++ps2FtuyK4i + LTZnvszm9FfUOX23Z2uwM0dbNYD3FMxE/irm77ZsTdm+gC3p85hWDODkl9lbqMvpRuvvzV+lVKCYv3f6 + 3Lnf56Hi0YAvD/q9udvtzo1WJ44VGrA55kU2RvxM9Nd8Tsvn1yrNVAP4/V5Xvl7iwe+We/KrYSc+aVey + eC7ijVodHlRqqFHANwpe4mHlfN5p1uVp5yI+7l3E54v1+WqpCd9M2PDNKmd+MeXK0+VOvL7YgQtNZuq1 + TkW9TJ/XLNrdX6LVXYNGj4U0eBhQK316tbcxFdLPFnvrkekubdhpDtH2LxBuM4sIq1lkuf+M+oj5LMk0 + Ymu9M4e7vTk7FMzVsSiuTsRyZTyG80ujOTYQzv72MPa3hHKwOZTDbaEc747gWF80h3vj2NWdzIq6GHpL + YmgvTaa/qYyta8c5cWQPB3dvY+OqKfZs2cjxA/s4un8ve4XzbNm4jqGBfprq62hqamB0dFR46XHefe9D + vvzFtzx6/TGvXbvB1Wu3uHX7IRcu3+DA4dNs3LKXtRv2sHnbUbbsOMnWnYoJfIptu06zffcZdu49+/8T + du0+yzY5fsPGI2oq6ImJ7XT1TFJR1SvjfKNq+qaklX+P1LQqGS/KhWMUq+meY2IL1eUfooBLmYkArlVT + QOcUNJKZV0NqlowzaUWCEpLTi0nJLPoJUhWDVjFqs0t/gufrVfNWkKIYuM+gGrR/CdnnJ/gr50rJkO9U + IN+bpJjA6QXyuVDF8/TSz43n5+dNV8xpBc8NYGWfNDlONYCzSRWkpeaQka7MPZxLspICOlpJAf3XDWAb + c2Web1dS4uOorypn6VAva6dHWTe9lE1rlXKYUdEYQz21LOmqZuWSVvavXcrpLZOcUuYAnh5kj+iz9d01 + rGwrY7yxkOX1+Uw0FTPdVs46OW59rzIXcDWrOyoFVWqpRP3OoJzpjhms769jx2g3xzZOcOf4Hp5cPMaj + c0e5dngX+1ZPsGqx8LKuFpZ2ttJbX0NrRSmNhXk0FOZSn5tFVWYKZclxlIo2r0qNl74/VsbDaOnnIwVR + lMZEUhY7gwpZVgzhqpgZ1EZHUyOojYlRzeAm2aagWZkjWND2DO0JcSq6pL66E+LpTU5Q0ZeSqKI/TZ63 + 1GQWp6ewJDuNscIcJkvzWVGaw/LiLEbyUxnMSmAwI1HFQGY8i+XzQE6CjJUJtKfIdyaE0xgXSn28ICGI + +sQAGtP96coLY6A0jh7p19uF+1YKZ0/yc1UNYMuFmhjramJlaoSX2/8/BvBfQgNrSzNpT3KNfd3M4stq + /u/TQv7ldiK/OxPCZ7vceDhqyM1+TW4P6nKtW5u7i014MGLNvWF7Ho7I9mFPbg+4c6XDgUMlizhYqM3R + Eh3OVuhzvd6Ye03mPGg05/UGM15vNONxqyVv9zjypN+Zh70u3O2TTn7Qg7tLfLk77M/NQV+u9nhyscOd + C80unK134GiFBQfyZJDJXMTOdF12pOqwK1WXg1nGHCuw4FyFPefKbTlbbsmZMlPOlhpyvmwhNxtMeNJn + wyfLnPjNWm/+aZti/vrzp60+/Ps2H/57ZwDsCYbdISDbWO/Nn1e48g9DtnzXZcrTGm3ertDmsfyWR5XG + 3CjT42KRDqfyNDmWq8nhnPkCpRRkaXAgYx4HM6XM0uSIDHrHKkw5UmXGrhIDthTpsyZ/EVMyEE7KwDiW + OZ9RGSwVTGTPZV2hFoeaLDjeZMmpenPO15pyqdaYK1WGXCldxLWKRVwt0+Fm1UIe1BvxZpsZ73Rb83TQ + mSfd9up8ySfk+zZk6bA0QZNWIVuFvrPJ8tEgzV9fCIwpmRE2ZEbZkx1jT0aMNakR5sQEGhAVIAgyVs3f + IM9FeLto4WI3H0ebeXi5zhjAkaoBbCv72XxvAIcrUYceZvg7GeArgtVXNYCFeKoGsIGaLthJhK9idJpa + amIhAtlWtjvKesUAdnH9wQT28BBRo0T/epriIkTV1lFXjpmLmeU8rBy0VGFs62ogQsoQG/cZKKLox7D3 + MsRBBuHv35hVRJeTvmoAW8g1mdroYWCug5GlHiY2+phYGQp+MIANTXVVKOavUv6lAWyhREvam+LsYq1G + ADs7mmNrY4iFuQh6MxH0VgtVY9fV1VyErzKfqLmaAjog0IFgIWX+/o6qAaxERNvZGfxNA1hN/6zM4yH1 + oUb/yrKvnMtHEBbkRGpiIEW5MZQVJVJamEBBTow6J6libhXmx1EgAq4gT4RzaohqGCtz/Ab42+DvJ8I7 + 0J5wIYdKdPBzA1hJL60YwEqKIEUkPDeAFcNX+W4f75l5hNVlTws1lWeAtzWhPkoUuDWBzuZ4WxviJkTS + 00R/xgC2NCLEXJ9gqccIcy0i5F5G27wieIlY+1eItZtDjO0CKbVUJEh7y3KcT3ukOdsqQ7jUm8nl1kSu + N8RysTCIveHWrJX7ucbNlFXu1ky42TAs39ttZ0azjQl18v2VNgaUWOqSZzKXbINZ5JvPosrp5/SGarG9 + 0JLr0ke9u9iRr5a78dsJd/5h0o1/m3aFdV6w1gOm3fivcRf+dcSJf+pz5DdN1nxdbcmX5dKHFNvxXr4D + D9LtuZpsx0kRYGtcNVkiv6Pb6mWazH5Os7kQQwcNJtwNWCfCXsGUpyHD7rr0yr49LhoCLbqdNOly1KZH + 2ni/tOdhfysG/CzpEJFe5ykkW4hjnvMccp3nkuepQaGfDkUBemR4aRMv5whzmEeQwwKCXPXwlWfCw0kP + Z3tlfm2BrR5O0racpFTma3ZSnjd7AzVVnxKlbm62CCMTbRWmFnpYijCwtJI2KPfI0/AVIgxeJt3g51SY + zqZd7lmP9Vy6bV6WOp5NnvGLpBrPokDIbGvgLLZVa/DGBju+O+bOv133hrvOcN8KHhny3/d0+K87mvzn + LV0pjfjzHTP+fNuM/7hryr/fM+Hf7xvyb/f0+bf7evz7g4X86yMD/vS6JX9/34lvb3ry/qVAzu/xY7zP + gop8DeKEdIeFahMiwigk1JSQEOUPJUt5tqzwD5D2Lf1RQIDDj2BPWLg7cXF+REtbDwxyUNt+anIgDY05 + 9PVXUSADrBItHxXpTqiIJ+U8igGcnRNFa1spra0ltLSU0NFRweDiJpYv71KjgTLSQoV8haopoOur0+nt + KmFitJltG5awfrqH0cU19LUX0FaTTENJLJXZIRQm+5AaZq++xetqtQAbk5exNHsFC8vZmFlJP2e9AHMb + LSwU2GpIORdr+zk4eywgOMKYBBHmKcmWxIXrkRSmS5GI3sYCG5pzzeguMGO03JrRImNWFJuwudaBfR2e + vNoboJrAh3oDOdgdyO52X7Y2ebK5wZPVVc5MlTqoRvAKwXiRLcsKLBkrsmNlpQsrq92ZqvJgvNKd5VIu + qXCjMtZAFc6BFrMIsHqB3EgzqrM8qc8LpDLDn8xIZ5JkjMiKcZH1gdRn+tGU5kZbmiMDuW4sK/ZmpMSb + 8doQNvZncnBVPVcOL+f6qTW8unOInsZEdS767BhzlrXFsXO8gC1DqaxqDWWqzoe1jX7s7o5kf3csu9rC + 2dYYzBbFwK0PkN8sv63ej70imE4tTuHGdCH315dzZ3UxF0fSONIezhb5LRvld2yu9GRrnS/b6/3ZKscr + 2FQXIL/bi7FiV9UAHs51YrjQlaVKRLBc83C5P32lwbRJX1ST5U9xmi+5yX5kpQSRJiQtNTVW7k+8IImU + pCQh5ckkxyeRlJBEmvJndHoaOVlZ0k9nUlaQSWV+GtV5idRKX92QG0dDTizVGfGUyXmKhNDmC4EtSoih + OCWOIiG6hWlx5KfHU5Qm29MiKE0NpTzZn6pkL+qU6N8ke3pSrVieY8OWEjsOSHs4WWTElQJd7gkveyIc + 4oNyPT4SXvRxqQhe4Wnv5or4VcxfEeTvCm/5MF2TT9N1+CJNiy/TNPkqfT7fCqf5tez3u4L5/L5wAX8o + 0eLvyrT5Q5mWLGuq+L2s+7ZYm9fTZ3MpcQ5HYuezJVqbJaE6NAXpUhKwiLwAQ3KDTcgOMifF34QEH3OS + /O1ID/ciLylcNcKLpB4Ks+W3ZQdRleVLbYoD1TFGlAXPp8jvZQr951AUIn1jyCL1D5rUEDlPoDFRfs/e + kvc0IMxHn+gAI+KVaS6ihNxGSakawEYUpVhTmmFPVY4rdfme8vz4Stv1ku/ypEKJ/M10pyTDlcIkZ4rj + nUVcuFKb6EZjohcdcr97M/xYnOnD8ixvJtPd2Cj77s/z5pC07b2J1uwKN2Bf6CIOh+pyPEiTCwELuC64 + G7iA+4HzeSNY+5kBbMqniZZ8lGjOO1GGPPLX4Ibbz7msGsAvcNPrZe74zOZewFzuhSzg9aiFPI7RVyOA + 70Yu5Ib0g5fkvGe8XuGkx8ucdH2RU64/56I8m4oBfD9Ak8d+WrzppcFb7vN410Pus9s83laWvTR56r+Q + j4L0+DTEkI9DDXgaqsfbwQt5PUCL+36aPBDO+LqvJu8GKPvp81mwEb8INeHrcFO+jlLSQJvxSZQxH0Qa + 8k6kAU8i9HgrVj4nCR9NcuBpojPvSr3diXPlQpI7O+McGQ6ypMbTigIPR/J83KiKjWK0qZm9q9dxav8h + 9m7dyUB3H1npWQT4+Qvf8CIyPJSYqAhioiOJiAjH19dX+vUAEcsZdPZ0s2nrFjZs3sT45ApGRpexdOkS + mpsbSU5OFK7lg58gQYRcRkaKjAMx+Pl5q1HAaalJ9PW0Mz2xnOnx5UyNLWXVxFI2rppk7/aN7Nmylt7m + WvLk2SvNTma0v4Xj+zdw8cRWLpzcxLmTG1QT+MLpdVw8u45L59bx2tk1XD46ztk9fRxdU8OJFcVcXVPB + vY01PNhQxd0N1VxXUkeuruPIdD27JuvZuKKRVePNTCxvZ1QE9ujSHpYvHWD5yOJneGYAD3Qx1N+pRgAv + Hepm2VAXw/2tNNYUkJshfUWGCNjqfJb01DMx3M7UcAfL+5pY0llLX3M5rZW5zwzgpGdzAGdSV55DfXme + Go3bUFUs9dHGitVTLFkzTcWSQeLbWkjs6SOiuZPQ6lYSG7qoWjzG4qk1rFyzVp2buKWyjGKp26ykaNIS + I0mJjxS+GUJIgJ/wQ2/8PWcM4EBvN4K83IgJ8SU7OVqNOB7oqFXrdYVc75rl3awd7WLVSCurl7azbryX + DSuH2LZ1itPnX+XRkwfcfPIme6/fYfTwOXp3n6Z77yX6Xr3DyPm3WXzhPdqOvU7VrqtkrzpM1vgOKlbu + pH/7AdYePc6Jm69x58k9Hr15h9cuHWfH5pWMSR0ukTpa2tvCaE+L8IxWlvU0slSJCFbSQvfVSz23sGyp + rF/eyfKJfgZHumlor6Wpu5WR6Ukmt26jZ2o1NcNjlA0so6hnCbktPeQ3t1PX18fE+nXsf/UQJ8+d4NDR + vaxZOybn66arS4n+LaJWUFyc/r0BHBnpS5F87utrZnxsQJ0DWJkLeHCojcVLBEPKiwK9rJS6GRvvZslQ + E0OL5Z6Pd7Jr5yQPH5zl66/e4A+//5Bf//JdPnjvuhrJ+P47N3jvvZu89+4t3nnvFu++e5N3ZdvHnygG + 8E0++1KZD/gGn36qRPze4qMPb/L0g+t88oliHD/ikw/vc/nSIdraywkMdMLURANd3ZcwMtLExdFUxrkA + upsK2bdpRMbyLdw+u53zR9azY9Myplb0ye/oZ2JyjE27drH76An2njjDzqNn2HTgGJNbdjM8tZ6OJeMq + xtZvY8uB42zaf4wlsr6+azFFtc2qCTy2ah2LxyapbWsnr7yS1Ow8YmVsDYyIwjckjIjYeBJS0kjJyCEj + N5+8ohJBKRW1tXT29jEm/cR66S+27tqmGsDj0+OUSNsPCPMXPWjyvfmrZ/ZDlO9zA1hNDW0s6wU/pInW + /okBrMwDbCQa10S4t2IAmwjnVmAqHFyBmWhkFU66WDjOGL+Wz8xfBTYC22ewkf2s7HRVI1iZCsnDx4zA + EBvCIkRLhturZnBEnDspmcGkZYdJGU56bpTUSQTRCf6ERnsTEuVNaKwfIYLgGB8CI70IjvLCW7iwo6eZ + 6GMjbFxEGzuI1rXRlGvWxEyFcFB7TaydtHAQ7eLmI9rO1wg3LwNcPERryDpXL/1nBrA7MbHuREY5S99q + jIMcY2k9RzWBHZ11cJVr9/I2nZnDONBSOLbo2eeQdYo5HCq8ODMrhN6+CqZX9bBh42JpL+1UCrfOES6e + lBZMXKIf8UmBJKaHkJQZSUJmFLHpMcSkxxGdkUBUaiIxqRmU10t/snUvtx+/wx/+9Cf+6T/+xHd/+Io3 + 377OsVfXs3PLYlZPNzAyUkLvQB59S4oYHCtneKKelRsHuXBlHx9/fItvv37IO2+c4Pi+EVb057C4LpKV + valsH81l52gW2xYnsHtxHIdH4nh1SRRHl0RyZDiKvYNRLK/2piLehBjRbl6OC3BVUnp7iP7yNMHcyxgz + b2NMha+YeRhj5WWGg+hz9zBHNQW0d7ijGgXsLnALsFantnKUe6/8n2HpLG3CVV994V2Z+iow0lHuq4tq + BAdIu/CRY7ykXj0FXqIpPfzNnsEEdz9juYfKlFqLBAtx9tL5wQBWXqqNtJD685D69CMuL5K02izKpX9p + XT9G967NLDlxjNELV5m89og19z9g4+ufsPnx52x98wu2v/k5ux9/zM5bj5nYe4TG3kHRKykyjvsQGRZE + ujK9SXERpSWVZGQWkZiUR2pGCWUVrdQ39dPSMUx7zzLae5dR3zZIc/cISyY3sPPwGa7ee5uH737O3bc+ + /T4C+Ny1xxw7f5djZ+5y6uIDzr32kMu33uDtTz/ji9/8mu/+/g9893e/mTGAlfIPv1MN4F/98td8++XX + fPmJ7Pf0Qz5/700+ffs+Hzy8zEcPz/LLJxf4tWIA39zBZxdW8s6hAd7Y1cq9LTXcWFfKydFMNjWFsSzH + g8XCt1fmebC3PpjXhmJ4czKBT9Yk8elUNJ9MhPF01FfgzQejHnww5sa7o87c6TLjYr0eFxoMuNFpyeNl + HjydDuKj1YE8nfJX5wC+vdiNS/1uHOl0YV2VnWgRa1pTjKmKM6Q21ZLqFBtKE2zI+RsGcIiPBUEeps8M + 4EUqvJ3/lgGsQ5i3LjH+i0gTPl2RYk9tmj1N8h2tSeZ0xhvTE7eIgThdBuK16UvQoi9Jk96UhfSkLaQ7 + XZ9eQV+GPgOKEZxhIusMaU3Vk3PoUZ+0iBrFAI7WoFAxf0PnkRGizI+7gPQADVIEqcI5s8JEH8QYit55 + bgDrkRaiLfpAkwS/+cT5zZjAScKHU+TY7HBtChRzN9GY8iRT4emmVCeLFk01pzLZmJJ4A9muS3G0ntSV + sawzozLFgtJoY3KFn2co3+0l53R+mRinlwQvEuP8EnF/kQI6PchArlFPNX+TA3TVVM1xwqvj5ZoVJAYq + qZu1SBC+He+3gFifecR6zyba82XBS0R5vES0cPlY1QSeJ7pHR865iMwwkxmEGpMhSA8zlPpXTF9dNQI4 + UTh5SrgJqeFWJIdYEyvPcrSvJYnBtgIb0deu1OSE0VadSnuV8LrcSJKi3IgOdiRKEBnsTESoIEx5sd0F + N3crLC31Zgxg1QTWx8xoEUZ6Ml7pa6vrbSwMcHY0w0uZ0i3ISf1/MEWZHkvGi0jRaeHS/6QGGlEVb8mS + Mlc2Nfuyq8GV3VWW7CrRZ0e+Jtty5rI1aw7bczTYkTMT6auYvjvzdNTlrdkabMqcz8b0uWxInc3K2J+x + Ucq9Rcr0h1Zc63HhWpcTl9vt1VTQ1zocudvvwaNBb94Y8uXxcCAPB3250+PO9TZnjpUYsSn2RdZFzGKH + 6E7FAL6sZBqtt+atDns+6XXkuyUufDfkyGed5nzQYsSThkW8XqPN7dK5XMt/kTulc3irSZcPOhbxfoc2 + T7t1+GyxEV8ss+TzCQc+HRMts9SJR0NOnG82Z2+xHtMxs+nxnkWT8wvUOb1ClbMGlS46VLjpU+auR7Gn + tGd3bdJdFxDv8AoRtj8jxGoWoeazSHGaRWXgbAbkGdlc68SRLh/ODQVzbXkUt6YSubYigQvLYjku48je + tlD2NIeyvzmMwx2RnOiP44hgT3ccG1vjGSwNoyE7VPRsLC1VBaxdsZSjB/ZweO9utm9Yz5G9e7hy5jSv + nT8neuUEhw/sZ3pqkv6+Xvr7+1izZg1nz1/k6Uef89U3vxJu+AG3797nxs273Ln7iAuXr7P/8AnRWLtZ + vX6n6K3DbNl+jK07jqvYtvME23edZOeeU+z4MfY+L0+z88fYLet2nWDLtqNs2HSIdesPsHR0Iy1tIxSX + tqHM/auYwM+N4KSUcuITi4mKziciUpnzN1+dAzj2GZS00Eq0cHpmDVk5deQWNpKVVyNcqJSE1EIS0kqE + LxSRnCH7ZRaqJuz/NIDLnuFHBvAzpMgY9WMoY5aC7w3bv8RfM4CffadqAGcUqvj+Op5HDv+1cwmeR/6m + KUZvWr7USe5PDOB0+awsJ8enExeVpM4B/JcGsJmBOTZmVtL/u5GelEBTbY06rdDGNStYPbWUNStHmFze + J9q7lu6WUgZaypha3KwawOe2r+TsxgmOTQ2xd2kn6zqrmGouZrQuj2W1uaoRPN1WyrqeGhWqAdxZyequ + KlZJqZq+7WUqJhXIvmt7atm6pJ3Dq5dy9cBW7h7by9WDOzm+eTWbRheztLWW3tpyumvKaSjOpyY/h+qc + DBUVaUkUJUaTFx1KbnQIxfERlIrmLImLoDg2nKIYQVQYhVGhgjBKIkMpjYqgLFIgZWV0pIqqWMUEjqY+ + NkpFY1yMiua4KBUtCdEqOhLjVHQnJ6roSU1S0ZueQm9aiox5qQzlZrC8WOqivIDlpTksKcpgIDeRrow4 + uoSbdqXJOYSnKmhJjaQhMZzKmCC5pgDKIvzl+vxlfBS+GOct47svbbnCg0ti6SmNp7UghopU4faB7nha + GmOxSBMTXeHligHsqgTyKQF/SdJXh2NvZ/W9+fvcANbV0UBHaz662n8LC7C2NJU2lKBmGJvFN1XwWQn/ + 9jidf7wWxy+PBPHWSmtuD+lxvW8R51o0udplJMuWXOmy5op0slc6nbkonfGpBht2K+ke8rQ5XqrHpVoT + 7rZa8ka7FY/bLXjSas6bLWa8Kcvv9jnw1oAzr/e7ck/Izh3p4O+NBHJ3JITriwO53OPLuTYPTtQ7cajC + il35xmzNWMT6JC3WJ2iyPl6DDQna7Mow5lCBJScrHAR2nCi34USZBadKjTlbose1GmNeb7fkgwFbvp1w + 5e/WevFPG334l80+/Ns2f/57TwgcjILDsbA/ErYG8OdVnvxxmQPfdcuAUavL41ItHpXo8qBUfnehkLd8 + bU7KYHY0S5P9GfPZm7FAxY7UuWxJepnNSbPZnDyHHdna7JUBane5KRtlYFqdr8d4ji7LZf14ri7LsrQY + keOXpM9madY8pvO12FNnwWEZCE9KXZ6pt+JcrTnnK424oNRn2SIV16r0uVNvwqM2C97qtuP9IXee9Llw + UwbMC0327CkzZ1WOCQNJBhQJccrw1iDZZ5EQKSMyIuzIFsGQG+dCdqwDaVGKmaukT1xEsAiDQM+Fz+b+ + XYCD9VycRMR5uy0k2O9HBrCUzw3gCH9rQkRIBroY4uegh58SBWwvhNNeX4inPm6OigGspxqd5tbaWNkq + bzbrqwaws7PJjAn8DO7uZrh7muPiboKTq7HstxBjszkqzGwWYGkvx4swtnbWE9Gqj7UIoefGr50IKUUg + KXPfOHqbfD9/jmIWWzsbCKR0MhJRa4ix1SJMbQwxtzXC1NpYNYFV89dcDwMTHRXPjeDvDWCzhWq0pJWN + EQ6OFkKobPHwtJNlM6ytDbBUooPNFwrJEsFuI7/P0RgXZ7PvI5t9fW1F+IpA87HDzc3iewNYmfvX1lYP + O8GPDWAl+tfb00qNvFUjgD0spAM3wdXRQDp5K+KjPMnNkE6tKImy4mSKC+JUI7iqIo26mmzq63Kor82m + KD9OBgd/IYEO+Mm5lPMF+NkQ8mwu4BkD2FVdpxi+ikD4sQHsLfdE+W7lGpTvVUzfAB8bgp8hxNuGAHfZ + 7ii/09IAVxN9PEzkGlUD2EAIz0JCTTSIMptLjOXLJNq+SJr9i2Q4vUy64yuk2s0RzCdV2lmGzRxKXOYz + EGPJ3ppwrg5kcb4pnvPVURzP8WOLEOFV7qas8rBitZc9k4Ihd0u65LvrbAwol/taKPWZY6lFmslskg1f + IM1sFrlCvio9ZrNERMzBcmMuN5nyqMeaj4cd+OVyF/446c6f1/nxfzf6wzrBKh/+Y8yL/zPsye/bnfiq + zo5Pym15u8CWe5m2XEy04XisNbtDzVjuqEmP1VyazF6m0uglqo1n02qjw5CzMZOeliqWuoiIctKn3Wkh + He76dHsa0u1uQLe0zQ5Z3yntuU8EfbefOS2+RtR661MpoqzIQ0OgSbGXFiV+CykJ0CfDQ4s4p/mESr0F + OWgQJITT19VQntdF2Mv3WlloYWGmha2FDnbSFh2sF6lQzF87aZdWylugZroYmWipmIlqF2FgKc+VuSau + hq8QqPdz4nRnkbfoBWoNX6Td/BU6rF+h2XYORSYvkGsqBNZhFgNhP+NAvTbvbnTkDyd8+K/rfnDHBe5Z + wX0D/uuWYv5q8J83dfiv20aq+fvn2+b8510L/vOelPfN+fMDWffAVGDMvz+y4F/fcOAfH3rwq1t+fHA5 + lPO7AxiTe1WWrUl02MuEBs8YwKFhZoSHSd8TJu1Q+iTF3FUQHOwicCY01JXISC9ycmIoKUkhKytCjnHG + Q9p0eLgLeQXRVNcoqReDiBGhEx7uSogc7+8v5xMBFRvnQ25uLOXl6arh2yFkRjGAlRSMDQ0F6gsWSuR9 + ZVkyzQ05DPSWMzXRzu6ty9m8ZpCx4Vr62wvoakinpSKRugIhKukBItjtCZM24GI5BxuTn2Np9hI3vrgA + AAD/9ElEQVTmVi9havWKYC6W1tLP2WhgbbtA+kgNXOX+ByhvBqfaUVDgRmmRKwUZNhQkmVCZbkpzviVt + +aYMlpgzVWPPeIkpk0UmbKqxZV+bO0d6/AV+HOz2Y1+7D9tbPNja6MaWRnfW1TgxXWbHVKntDEpsWF3p + yNpqZzY1uLO+wZO1dV6sqvViWrC80o2a2IWkerxIiOUsQqxfID/CkLosZ5ryfajJ8hEBL3Ub7UhpshsN + 8szWpboK4bGlNdmKwSwHRgtdhSy5M10XzNaBDF5dXc/1w8u5fXoNJ3YO0VsXS3a0OdmRJixtimT70iy2 + 9CewqjmAlTWeavrq3e2h7OuMZFdLCNsU87bOj22CzVXebKrwZFu1L4faIzk7nMKVsSwuLkvnaE80u2Wf + jWVubKhwY2Olp4gvH7Yox9X7s0mwvs6faVk/XuLC0kJnRgqcWFbqxricc3mFN6PVASypCqW3LISmvAAq + MnwpSvMnPy2YrNRwMlKjSVOMkKQ4UhPipd+VvjdO6X/jhHgnkinEMV8IY1lOirSHdKmzZFqkjbWKeG/L + iaA1O5yG9EiqU8KpSAijNDZUSiGtKdFUyrkr0iIpFxJZKftUpYUIWQykMdmXlmR32pId6Uy0YnGS9I85 + FuwpteFoqfCgPOEM8uzcytPiQa4mj/MW8GbePN7JX8C7BRq8m7uA93I1eCdTlpUI4FQNPkvV4cs0Lb5K + 0+brdA2+FY7yq5wF/DZfMYEX8IciLf5Qos3vi7X4bZGGit8ULuDrAk3eyZ7PrXQtzqbosi9Zn6moRfRH + 6NMSYUB9pBl18TbUxtsLSbcmM8iC5EAr0sJcyIr3k3Ydoaa1zk8PojDNhzJpOxVx5lRHLqI6dD7VwXOp + Dl9AVYQOxaEisJU/TYINSAwwJFq4Tbi3IaGeMub46BPpb0BssCGpkaakRBqRpkYBG1GQbElxmi0V0mar + ctyoznKnPM2J4iRHChLtyU2wIyfeVjiSDfnR9pTHy36xztREu9AS70ZPsgeLU6RNpLmxKsWRzYL9Gc4c + TBPeFW3KntCFHAjR4YjgeKAG5wMW8Jq/1EnQAu4L3pD170hdfBhrxsfxljxNMOOtSH0e+i3guuuLXHH5 + 2Y8M4DncDZjHvRANHqlzABuoBvCdCOGA0g9e8l/AGe/ZnJSx7aTrS6oBfEExgH3mc99fk9d9nxvA83nX + YwHvuCnRwLIs44mS2vkjqbtPQoz4ONSID6UunwQt5J7PAm55zeOO13weeksbCdSTfQz5MtyUb+T+fSv4 + KsqYLyIN+TBcj3fCdHkSIdcWrsNbcm1Pk8z5JMWOz1Od+DTdnXfSvXgg/cCZTA82xruwOMKTrqggqccY + lpUXsWd8nEuHDnH7wkXOHjvB6slp6mvqSE9JJUWembycLArzcijMzyUnO5vExERSUlKorKlm2dhydu/b + y87du1i7fi2T01NMTU8yODhAWVmpOvdvZFQ4KanJZGSmERsbI317oIqc7Az6eztFCA8zvmyEFcuXMj2+ + lC1rpzm0ZxsHdm1mpK+dqsIs6svymF7azenDW7h8egcXTm/h3MmNnDu9nvOqAbx+xgA+s4YrRyc4u7tf + +rVaXp0o4eKaSm5uqBFUcW1jDZc3NHJ2fTNH1rSyd1UbW1Z2sHZFBxOjHYwu6WLZSA+jzyJ/Z7BYNYCX + DPYIuhlZ3M3S4R6WLlYM4BbVAM5JF0GcFk1DRQ6DHdWMDjQxJttGuuoYbKuUMaiYZtmmGMAV+SnUiEBV + DODasizqynKoKs5SDeDe7naWS/31Sz0WDvYT2dRMTGcvwQ0dBFQ0EVvbSe2yaUbWbGL1ug1Mj43SXlNJ + aVYqWUkxpCVEkiRCPDosUDWAA328Z9I/C5T5f4O93IkPC5BrVaKVS9R5d5cPtjC1pJO1Y72sW97F6qUz + BvCGiX51bqqtWxQD+CiP3nrErXfeZu/tB4wev0Tv/vN0H7xC/4l7jFx+n+ErT2k/9YTqfTfJXXuMnMk9 + VK3dy+DuI2w4eZpTd25w/+2HPHx8m8sXjrFt4xTLBtvV+X+VKOTlvS2sGGhTU2aP9TdLHQqGWlg9NcCm + DaPs2LWK3Qc2Mr1unLb+dhp7Olg8NcX4tp30rtpIndRLxfAkZUMrKOxZQlnPEC1LlzO9bTsHT57g5MUz + HDq6j5WrRhke6qC1rYrqqnzhFsWUlmaRJvcvKspPeIg3BXKPuqVulo7IvRbMGMAdDC/tYvlYH2tWL2XD + hjFWSv2Mj0l7WdbB9OQAe3av5vWHF/nm67f4w+8/4btv3+PNx5d5eP88D+9d5J6Ud+9e4Lbg7r0LPHp0 + kacf3uKzL+4K7vDRpzd4+vQabz25xIN7p7l39zTvvnODTz9+wMcf3ufSxYM0NRXj5+uAmYkmixYKZzHR + xs3FgvTkEAY6ynh15wT3L+3h9dcO8NrJbezeNs6q6SEmxoeZWrWCLXt2PzOAz7Lr6Gm2Hz7Bmh37GV2z + mZ5lk7QPjzG+fpusP8n2IydZtnIDtZ0D5JTXUljTyLLpNSyZkD6ivZOc0nLi0zIIi43HJzgUv9Bw4lPS + 1ajfrLwi1fgtqaihrKqWOmnLvYOLmVg59b0BvH3vToaXDZGWk4qLlzMGpvoo8/4q5q+++Q9RvotEByqm + sDonsLHeDJRl1QDW+R8G8EwU8CI1Clh9yViB6F4TW9Gd9gtVmDnqqqarpeMiwULRps8MYPls66SnQlm2 + spNtdkoU8CJcROcqBmpohANhUU4ESxkZ70FyZhCp2SGkCX/IKYxVkZQeTGSsDyHCbUNjvAmOlWcxygs/ + GWv9QoUHC8919DR9po9FA9jLNVtrCObPQPinqZ3wUEct2UcXF2/FOBR96r4IR1e5HhdtXD31iZDrUKN/ + Y1wJi3AU/S6aXHSJagDbKFOWaOMiGsVTmXNU9I2vvzk+vqIrn0FZ9hDtExhsQ3pGMIuH6tiwcZjtO8ZY + tXqAyuoM6bsjiEv0JzrWV8oAkjLDSUgPJ0raXGhcEMExgQRGB8tvC8QzIEDqI5fBZWOce+0qv/3jH/jn + f/sHfvnbT3jw8DT7di5l/VQDy5cU0N+TRltHAh19qXQP5wgKWTxaw/7DK+W5OcMvPr/J+09OcOrgCMu7 + U+mpDGS6N4mdy3PZPZrNtsWJ7B6M49BwLIeHI3l1KJyDA6Hs7AtlebUH1cLRE/y0RB9r4+W5CGfhJjZy + Dy08jTD3fgYPY6y9zHHws8U92AHfSFe8w53wCLXHO8QBrxB7db5fJeWzEgmspg6XdmPrbqSmifaV/QLl + HgRGOuEfLho/xA6fIOsZBFrjFWD+DKZ4+Bk/i/yVa/HS+akBHKIYwOZEpTgTne5JfH4o6TUplA1U0bRy + gI5Nk/Tt286QjNHLzlxl6soD1t56woZ777Ht4VN2vfkx+598zJ47bzC19zCNvQMkJaeKpgogJlLOlZFM + UXGh6Kka8vKUyK5CEpMLSEjKJzGlUI3SSssuJz2nguyCampb+lUDeMu+45y5ep9rD9/j6oP3uPHGR7x2 + /33VAD567g5HT9/l1IX7XLj6iKu3H6sG8Je/+w2//of/Jff+9/zu73/Lb//+d/zu7/6gGsDf/fLXfP3l + 13z+8Sd89sEHfPLuG3z05l3efXiJD+6d4ZdvXeJXj0/y9e3dfHZpLU8ODvJgRzM31ldycaqQg4MprK4L + YWmuN0PCT1cVia5qDufyknjeWJHAx6uT+GxyxgD+cLk/T5f78MGoO+8uc+bJsB1XWww4XanFySodrjQb + c2/AgXfGfNTo3w8mFQPYm1uDbpzrcpLz2jNVbMZApgmN8fpUCL+qSDChIlE4bJwV2VGW3xvASdIXxIc6 + EBVoS7ivlfqfnK+T8h/c3zKAjVQDOMhbl0ifRcQH6JMZbkJVigMNaQ40p9jQlmhOR7wRXaL5emK16I5Z + QJegM36+aA1tulN16UpdRE+qnmoC92cY0J9uTE+6IW2yrlm2NTw3gKOeGcDC4TOC55ARNI/0AGW+3AWk + BmiSHqpLTpQBhXHPDOBIxQDWITlAS56hBcT7zVNN4ARBcqAcG6JJtvDOQqmTkgRjyhOVCGAzFeWJRhRJ + fSlzDSupn5Xo3+oUC2rSLamIN6MwTJ/sIC1SlbmAXV55ZgC/pJrBCcKTFQNYmac3I1hfSiXqdRGJfjrE + +WgS7a0hWECMnyax/ooBrEvCMzM4Tq4zRs4ZLZw80vNlIjxeItz9RcKljPR6RY6fq54nVYkulrrOFk6d + HWGqGsCK+Z6qpH4WXp8gPFwxgFMjzEiPtCEtwl6dOipe7m1qmBPpEc6iY3xoKo6lvTqN5spkiqXvVwxg + xfwNV7JwBcoYEeRIaLALgX6OODmbY2Eh/byx7rMoYCUd9IwJbGa0UF1nZa6Pg620DzcLAvzsiIpwVyOA + EyI9fzCAg6SeE2xYUubBhkZf0d3O7KwwZ1exPjsLtNgp+nJH7nyBxveRvtuyNdiSuYAtGfPYkD6X9Wlz + VKxLm82ahBfYJMuKAXyy3vJ7A/hiiw3nGi250mrHrR5X1QR+OOjNwwFf7vR5cL3TRbY5crTEiI1xL7Em + chZbE17hWP4izpUaca3KjIdNVrzXZsXnPTZ80W3Jhy1GvNtkwJP6GQP4XqUGt0rmcK9c9HCzHk87DXi3 + VYt3WjV4v2shH/QZ8+ESG94fceCNQTtu99hyut6E3UWLmI6bTY/PLOodZ1Fu+wIldnModdSkzHURJW4L + KfZcSJ6HNhluGjMGsPUsgs1nEWI8i3ibWZT4vEhPgq5qAJ/oC+DKsghur4jn/qo0bk+ncnUyhXPLkjnY + EcneljC1jznSFcfJoWReXZzC7r4U1rUn01cWIRo2jJKsGOHzuUwuG+bI3r0cP3iIAzt2cebocW5ducrd + 6ze5fvk1Tp84weZNGxlbLjxLtNe2HTu5cu0Gn3z2C7765js++uQzXn/8Nnfvvy4c8XXVAD4gHG3T1j2s + 27ibLdsPs237ETnuqIzRrwovPib66zi79p5g54+w48fLe46r2Ln3JHsPnGbPfsUEPsaWbYdVTK/awcDQ + JLX1vWTl1JCRVU16ZpVqACvmb0xcvvCMHCIis4iOyVM/x8YXEKcgQcaO1DLSMqrk2FrhfE1k59eqZm18 + SgHxqcUkKpHAMr7MGK8z0cDPzdkZ47f8Gcq+X5+apRi4pbLvT5H6DGnPoaSN/jG+N5OVcz0/xw8RyMly + DcnPooF/agDLsSr+hgGc9v82gJPi04mNSsLPOxiHHxnABguNMNU3xdrUUjWAM1KSaa6vZ3xkmHWrJhgf + Fa25rJfBviYaawukDWXSWpnNsq4adk4t5vy2VZzbOMHRySF2Ky/qtlWworFINX9HqrPVKGDFAFaM3+cm + 8Jqualb3VLNKyqnOcqbay1gh+0y0lrCitZTV3bVsWtzCvonFnNmyigs713Ns40q2jy1mqruF/poSWkvy + aCrJpSo3g4osQaZoV0FpSjwF8ZHkRQWTKyiKC6c0Iep7E7gwJlz6/DDyhXMoKIwQRIZRHBWuoiw6QkX5 + s6jgmtgoFXXxMSoa4kVHCxoTZtCaJFpV0JEsPFHQmZpIZ1oS3XItfVnpDOZnMFSQxUix1EdpHkNFmfQW + JNMhz2NrehRNKVE0JEdSnxJBbZLyvUFyPT5khbiTEehOVpAHOaFe5Ia7UxDtTnmyF425gXQWR9FdlkBz + fizlqaGkyj6+dhZY6mlhulALK1NlPHdUDeD01CS1tLWx+KkBrKOBEuGrGMB/C//TAP6uHL4q4b+e5vHn + x9n8rwvxfLLNi/vLpHPuM+JsyyIutptwvs2ckw1mHKu24NUqK45UWrOv2JSt6drszdEVkmPKrTZb3u53 + 5YMBJ55KB/pBnzVvdyoGsClv99ryVr8zb/S7cVc69Jt9XlyXzv3qQCAXun050eLO4VpHdpdasyXXmLVp + i1idpM1krAaT0QtYETmXyagFbEwxZHeeFYfLnDhS4cCr5XYcK7PiRKkZ58pMZCAw5UGjBe922fD5Ynt+ + OerI7yZd+eM6T/5lsz9/3h0GRxLgVBqcEewJ4z82+PLHCWe+7bHgvdpFPChYwN08De7l63E1ZyEXsnU4 + laXDkQwtdqctYHvKPLamzGdd4mxWxb3IVMzPmY5/hXXpmmwuMGBTsTHTUi7P1WNYjhvO1GY0T59lguEs + LQYz5jMkA+VYrhbrSuX3VJvzar0tJxpsOV5txolyQ86UGXCmRAa3cn1eqzLmRr0Zd1uteb3LnrcXe/B6 + ryvXWuw41+TAgWpbNhTLIJ0hZChIkywhHcm++sT7GJISaktmlCs5Itpy4lzIiHYgJlAEmMci/Nx18XXX + wVsEn6uIOCX619VRGx93vZ8awCE2xAghURDlb02YtxmBbsb4KfP6OejhK/BxNMDLyUA1gJ0d9NUIV1sF + 9vrYOxjiqMzPqRrAZjg5mahQPju7CtxMRPAaqgawqfk8TASmVgswt9PGStZZKyLZ1QBbEa8OQkocPE1E + HJmp8wC7+ppLaTaTBlq22ct12bvLspuIXVdlLmAT1QS2sDPG0t4Ec1tTTKyMfmQAi5g31vqbBrCdnalc + swgrLxFo3g44OpqpUZVKehXlDTvFAFbS6draGmBvJ9en/FZH5bcqx8k1Sqn81h8MYKmTv2IAeyumsac1 + /j42+HmJmPMwx93ZCCc7IfTyW6JCnElLCKA4P56K4mTKVSM4ifraHHq6Klk8WM9gf5109nnkioAOC3bC + y33G1H0+l/CPDWAlNbSPl8VfNYCV71bSQCsGcJBi+go5DPW3J0SWgzyt8JHrdbeV+yz142ymj4eZAb5C + JoMsFxFurkOY8RyiTH5OktXPyRWiXeE9lxo/DSo951PsPJd8u9nkWL1MntWL1LvNZzTOmsN14dIfZHG+ + OYGTFZHsS/NmjYjaVd7WTD8zf5d72jLgbkG7oxFVNkK6rLTJtRHybqVJoqmSyvhFEs1fIM36RbLsXqTK + 8xUmUzSFqGpzokqfG8oc4V3WfD7kzN9N+vC/1wby3xvD+e91IfzrZBD/siyQ33Z78lmDM28X2XAzw5IT + IiB2hhux1k+ZG1ebHuv5NJvPpcJoNoV6L1NsMJdaIdrd9qYsdbNhqas1vQ6mtEhbaHQwoEXqs93bgk5P + EVfupjRLO29y0qPNw5AWHxMa/Ayp8denWoSHgkrfhVT46FLht4gyEWlZHiI2XDQIVyKAhXAGus4YwC72 + i7Cx0sHCTANzU02szLSxNtPBxlwXW4GdtR42cj+UNOU/MYBNF8kzpifQlUFFE0fD2fgu/DkRmrNI1ZhF + qe7PaDR+iTarubQ5zKfa+iWqhMy2uc9ihfR1F9oN+XSzG386Hcj/vRYAt13gjiX/fUePP9/Q4D8E/3lT + mz/fNBCY8udb5vz5tiX/ec+C/7xvxX89ENyz5j/k87/dt+X/PHThj3e8+fo1P946GSzEwJel7dYUpWkT + HvAyQf6aBAcbEhpqJu1W+p4IO0KUP0GC7NU060FBzoQo6Y9EtKRnRKiRuwMDDdQIWYmK8sRN+hY/6bPi + E33IyAwhIlzavggmP+UFCGn/Stpo5WWNQBFPUVFe5OXFU1WVrUa+KOkXlXM1NRdTVppCaXEi1ZWpNDXm + qhHAo0sb1AjgddM9jPRV0NWUQ3djJm1VydQXRgqRCRRBZ0+oCARHsxexMv4Z1hYvYi7PhZHFCxjIOjOL + 2XIvZkufMgc3V0251oVCeE3JyXGiosxTSJofjVWeQoxsqEiTNpVjREe+MYuLTZiotGS8yJjJIiM21dg8 + M4B9Odzlw/5OL3a1uLFF2vLmemc21jmxttqeFcWWTBSZM1FgxrQs72r3YU+nr5TebG3xZmODJ+sbvFhZ + 485woQ2VkQtI9/iZOp9NnPMLlMaI0M9xoDnPndoMV9Q5W1OcRWy70pDhQn2SjRApMzpTzGWMs2K80JGp + cnc2NIexZyid0+sauHd0nEfn1nJu9zCL62NE1FsIiTNmWX0o24fS2Nobw1oRm6urXNkg17G7NVB+Wwi7 + mgLUNM5bq+VaBVsqPNlY6srmMnd2VHmzrzGQwx0RKnY1+Kvb1pc4s67MhXUVHqyTetwgx62r8WatYHW1 + F1MV7oyXOTNa5MjSYic1+nmqxpMJ2T5RF8hYXZhqAncUBVGX40el3NOSrBAKMsLITYskKymSDCGk6XFR + pMZFziA2gnQhmVlCKIvTYqnJElKZl0hXbiw9OZH0ZAbTk+FPV7ofHemBtKQESp0FCBENoDkphJa0MCGT + 4YIQ2qQvb8uS788MpDczgOHsAJZmezKS7shIsjnjSQZsyxNeVmHD2VILzgoXu5ypyY0sDW5nzuNe5iuC + l3g9ew5vKSZwvhbvCe94R7a/k67B02QNPkvW5ss0Hb7J0OXrdC2+zVigGsBKFPBvROD/rkCTPxRp8/tC + LX5boMGvC2WbYgAXavJBvg73sxdyKV2PA8mLWBO7kIkEuZdpVoxkOTFa7CNk2V9+hxslkVZkBJuTHm5H + RowrWfJM5qX5k5viTW6CC/nRFpSEL6IuQpuOuIX0pcz8wdQcq0dZqC6FoXpCoheqacli/fSI8jYg1Euf + UG99Inz1iJb+MyHEkOQIA9KilShgQ7Lj5VlKNKc4xY6SNEdKUhwpkPEmN8qKzAhz0iLNSYkwJS3cQkSG + LRXx0p6jnagMs6Mm1Jp2eX4H4xyYSHRgbaId2wX7Em04EGvOXrmefcE6HArW4kiQFicCF3A2YAGX/Odz + I2gB90M0eSNsIe9EzRjACt6PM1GjZx/6L+CWx2yuub3IDY8Xuen1imoA31ENYC0eqRHARjyMNuR2mB6v + KQawr2IAz+Wkh8D1FU65vsRFr2cGsK8mD783gOU+f28Ay7KXDk+lbj4ONuKTEBM+CjXhfelTXxeeeNtz + Htfd58i1zOO+1wJZb8Bnivkr9+JX8lx+F6NE/0qfL/flg1AdngQv4HGYJo8jNHg7TpcPk5S5jS35KtVW + 2pATn2R58F6+H/eL/DmZH8R6ETNTmQmsrchnV28757Zu4Nap49y7conLZ86yZcNGejq7KC8uoayoiPrq + ajVdWWNdHVWVVeQXFFBcUkpzWytjKybYsXsX23ZsZ+26tWo66KmpKVasWEF/fz8VlRXqn87FxUXk5eeR + mppKUkICyclJlJeXsHigTwTwUqYnJ1g9vYJVK8bYvnENxw7t5fiRvWxZp5iEXSxf3MX29RNcOLmbq+f3 + cuHsNs6d+lsG8CRndw9yeGU9B8bKOLWygotrqwTlnFtXxZn1DZzY0MrhDZ3sXdvD1tW9rJvsYXJUvmdJ + 9980gJcO9alYtqSXpQoWdzLcpxjARWSnxZAjQrOuNIu+1go1CnhpbwOLlXlsm8tpqymgoSyL2uJ0QSZ1 + JVkzBrDsX1uW/RMDeNnUCnqmpsnpGyCssZWozgGCGrrwr2gmpq6bhvG1jG7YwdqNW1g9MUF/SyMVItK/ + N4Clr4sJCyQ8yF84oi+hvt4Ee3sJ3OW5dCcxIoiijCQ668vUtNrjg62sHOli/TMDeM3SVlYp89wqn6eG + 2LxpitPnjvLo7Te489677L37iNHTr9F7+BLdR67Sf/oBI1efMnz1IzrPvE3twdvkrz9B3tQ+atfvZ3jv + UTaePseZe3d4+O5j1QC+dOEYW+R+Dvc20Sd1pET7jg+0MrW4g+nhDjV1thJFvWJZl7THUY4c2szlq8e5 + dvs82/Zuomu4j/qeLnpWTLJk4w7apzep5m/RwASlwyulHKNycIz2idWs3nOAw+fOc/rKBQ4dO8jUylEG + Bttpbq5QDeCGhlIqynPIyIgVPu5HmAj9/Nwk2tuq6ZPrGx6S+7ykiyGlbYz2sXr1cnZsX8P+/RvZtWsd + WzZPsXbNMtavG+PA/k288fpVvvn6PX7/u8/49tsPeOut69y/f4Gb189y+bXjXLh0jDMXXuXylePcuXee + Dz68w2dfPOCLL+7z0cc3VfP30oV9HNy/loMH1vPapcO89eZV3n/vDufO7KeuJl9NEWkpHNLMRDimaB4v + Dxuy0sJZ3FnJkR0T3L24l0evHeDS8S3s3b6CNSuXMLlihJVrpp4ZwMfZfew02w/Jfdj/Kut27md87Rb6 + lk/RMTTK8jUb2bTvMFsPHGXZqg3UdfSTUVwpqKBv6RjD41PUtLSTmJlNSHSsGvnr7h+gRgGnZOaQnV9M + bmEpBbJ/VV0jNQ3NtHR0MrhkhKk1q1UDePOOLWwSdPZ1EBkfgY2TNfom+t+bvz81gHXU8qcGsIK/bQAb + qQawkmXqGaxFQwpM7XRVWDw3gFU9u1CN/FXx3ABWXnKWZRv7GQNYmQ7JSTSvl6+pGv0bFuNEeIwLMUle + JAhvSEz3l98eTE5hDAVliWTlRxKb5EdorKdAiQKW5zDaC79wF3yC7XHzs/reAFaMZ1NbLdUANrKch5HV + PIxt56vRwKoB7KKLkzKPrAK3RaLNdVS4exur0ciKCayYv4qJ6+Iq128v+sNmPja2C7Bz0BY9L5pQ9vX2 + MxeIrpTf4OWrlArMZZtoUtF2ySkB9PZVsmbtYjZtXsb4RBdlZWmkKFmsYn2IivYmJt6fBBlDYlNC5Pd4 + 4xPihlegG56B7uoczs4eLkQnxNPe282RE6/y5bef8Hf/8C2/+PoJt28dYMfGLqZGihjpTaW/M56WFtEI + PQl0L86go1/6z+EiaR+9XLy0lffePsV7jw9x5tAwIx3xdJb7Mt2byJ7xAvaO5bFtcbJqAB9YHM3BxeEc + GgxmT68fW7v8hCu6015oR1aUEdEytgb4G+Ai9WfjYYCVpxGW3jOw9jLF1tsSB9HU7oEO+Mr98Q53xivU + Udq1E76hTngHO+ARaIuzjwXmykvxonEtpY3YiU5397dS5/4NUA1gJwLCRMuE2OIbbItPkI3A8hnM8VQN + YGUO4B8ZwL66eAQsku8xIijSjPAkW6IzXUkqDiKrPoGyvmLqx1poW7OYri3T9O/dw/Dhk4yfuszKi7dY + f+0B2+8+4eCTjzjx3me8+uht1h8+QefQCNnZuUSFhREbFUZaaoKMwbkyFleQm1dOSkq+3M8MfP1j8fSO + kLYUrsIvOF7abS7ldZ0MyVizZut+9rx6nlfP3+T45btcuP0Wl+++y/nrb3L0nBIBfI8zlx/x2u0n3H3j + fd75/Au+/P1v+O0//5E//p9/4u/+8X/x+3/4O/7uj3/PH/7wB3793W/45hff8MUnn/LZ06c/GMCPrvD0 + 0QW+ffc1fvXWWb59cIgvrm3l7aPLuL+zg9dk7D49UcDuvmTWNEYxXRXNmqoYtjUmcLg7gYsjiTyYTOTD + lUl8/swA/ng88JkB7MbbI468PmjDlSY9TlVocqJSm8tNRtzuseGNJW68O+7JexN+qgF8e7E7Zzud2NNg + K1rOlF7ReXXKfLbCAZWUxsUxJuRFzkSQpoZZkhRmQ1yIDbFBtkQFCPxtCBctG+hqjI+DHt6Oevg4G+Et + n2cMYFnvY4S/j56Mz3rE+OuTHGQo57RQ561uSnOgJfkHA7hDOHxnjBbtUfNpi5xDa8xc2hM06RSd0Jms + S1eyHr2p+vSnGdCXbqgawO2perSkLqJJNYB1VAO4QDGAg+aSFTyHrKB5wt3nkyr8OC1Qi7RgXbKEp+fF + GJMfa0ROpD5pIbr/wwBW0kEn+s8lVfh0mmICh+uKTpA6iTOkLMGEckFxrD75MYvUuYbzInTVz9WijRQD + uFKZZ1i+JzdkIel+GiS4zFaN3ziXOSS4ziXpmQGcqhjASqpmZX5ef13ivLWIcp9PuPs8IoUjR/loiubQ + JlH2SwjQIT5AWz5rEuOzQHTIXMI9ZxPm/rLgJdH7LxHm8TJRXnL9flpS13qq2Z4tz1t2hJn8DtEosi5B + zhHnr0GcElWsGMBRFqRH2QmcSA5zJCnEUXSJCxmRrhSm+FKdF0ltQTTlueHC/wJIlPWRgfbCu2wI8rMl + UPqUAD97vNytsLU1UgNUTI10ZNxeiJWZAdYWRlIaylhugLnxzNzAdtaGuDqZ4eNlRWiwE7GRHsSGuBLm + Y61mLlMNYNH0w6Win+t92VLjxM4KC3aXGLKneCF7CrXZJZpSMYA3id7ckDaHDemzWZ8yh3Upr7Am+WXW + pcpnZX3GXDamvswWKRUD+ESdxUz65w4HzjVZcbrOjPMNFlxqseW1NnuutjnIM2PH+Uab73Go2ID18S+x + MnIWG+Je4mCWPFv5i7hcZsS9enPeajblvSZD3qlbyBuVC3hUqcEbNTqqAfxI8LhOl7ea9HnaLlqox5j3 + 2nR50rSAh7XzuFu3gCc95jzpt+N2pwXn6gzZL7p3S7YmK2Jfocd3FrWOsyi0nEWuxc8ptF+gGsBlHnpU + +BhQ5mdIjpcuCY5zVAM40HQWQYaziLWQYzx/Rne8DlvrXbi4NJIHa1J5e1MuTzbl8frGPB5tLuLuhhLO + jaRzpDuOg20xHOtN5vRIJqeW53FktIidS0oYa82mtSKFqqI06isKWT48xKE9+zkr/Or0qye5euEqt6/d + 4vb1W1y/fI3TJ0+zY+t24ZFrhDNu4MChw9y4pXBAxQD+JV9I3/j0o8948vZTHj56iytXb3H0+Dl27z3C + jl2HpTzG7j3C3/YeZ69g/4GTHDh4Ss5zmn2HBYdOqdh78CT7lc+yfcfuI2yTY/ccOMGxk5c5fPSCHH+C + zdsOsmnrAdas28no+Do6updRVtEm40QDmdk1pKSVEhufT3RsDhHR2URGKwZwDjFxuer6uATlBSLFAC4h + LaOCnNxa8kuahPvNGMBxyfnEpxT+YACnF8l6xYxVDF7FoH1u1lY+w8y6H+P/uwEsx/8Yf9MAViKBS2Yi + kZ9dg3odcp0zEcXPz/k3DOBnEcCpaYqOzZXxNJd0WX5uACcmpIt+SMTHMwhba1eM9S3R0zVGT8dAlo2x + NLHAw9mVdNG+DTU1DA/0snzpIP29raK3G2ioLSYvM47slHBKMmPori1gw0gnZ2TMPyta6cj4ANv7m5lu + KmG8voClNTksqcpSjWBlPmAl6ldJAb2hT5kLuJY1gtWCKVk/0VrK8qZiRhsLmWgpZVVnNRsGmtkleubA + 1AiHFE0zPsRUdxND9RX0SDtuLcmlqTiXmvwsKnMyVfO3PCOFivREylLjKUuKVlGRGkulkgY6JY7y5FhK + E2IoiY+W8SCKorhIikSPFsVGyrooFUqK6LI4OU72U+YIrk2IVVGXFKei8S/QkhJPq5y/TfiLgva0RDoz + kunOTWewMIfhsnyGSvIYLMqhpyCdtswEGjOiqBc9VJcSJuNNiHxnMKXxwXIdQdLf+0gf6kqcr72MB7ZS + OpEU6EJqqKv06y4UJrpRle1Hc2E4nWVyrvxY+b2hpIf7EOBii42R9OH6Omq/7e7qQIxwq4zUJCLDg1Uj + 968bwH/bBP6fKaC/K4JvBZ8LPizmf9/J5JtD4Tyecub6oCXn2k0422rBsQYzDlaaSKdvyo58E7bnmLIl + 04ANKdrszdPnYr0tj/rc+WS5P18s9+LL5a58scyBp/0WvNlhzJtdUvY68qjXlVtd7lzuENLT5s7JVi8O + 17uyq8KWzYXmrM0yYiplIWPxWozFajAaqcGy8PmMhM5hadg8phP02JxtwZ4SR/aWObK/zI7DSvRLiQVn + yyx4rcKUe7UyELRa82GnDZ/1WfP1sC2/nnDm96u9+NOOUP771SS4kAOvFfB/D8fyH9uD+IeV7nzVZ8Hb + 1brczHqFa2mzuZmhxfVMXS5nLeJclh5HMxeyK1WTTcnzWJ80X65lrgwML7Ms6gVG415hRZoG07l6TBUY + qobvUM4ietN16M3QkWUDluQbMZCtS1+mFv1ZGgxnazGeq8MGGUx3VVpwsMaSA2XGHCzW53iJAceKhDyW + G3Cx2pQrMjheb7LhTrsdj/pdudPlzIUGa45WW7OnwoZ1xbYMZQjpCV9EfpCQqQBj4n2MiQtQUoo4PjOB + pdEpb/AGmBPooY+vmy4+7rr4iVDxdNXFzUkTTxcRBx6GhPibf28A/wQB1oSLiAtyN8XfxUBNBa3ATyGc + ztJIFUNTjQI2Uo1QJT2yYn46OSlGqKkaJausV6Csd5B9HV2U6F8RSyJ+zUVUKzBTRI+dDtYigBShbO8u + +3oY4yzi0cXHXAStpQgZaxWuypw6nsr8v3JeDzMROhYiXkVkuZtj52qOjbOpCFszEdjmWDmYybmNUeYB + NjBbpJq/Cp5HARubzJjAz+f/dbA3w81VhJW3Es3rgLOQJSUFtALFCLa0FHJlJaLdepFqBM8YvPoznwU2 + 1orRa6hCMYCVaOHnUD4rBrAy/68yh6u/lw0BPrZqqRix7lKfipnu42ZGRJAjiVHe5GVEUFaQQGVxsmoE + N9XnMby4kcmJbiaWdzLQXa2miY6JcJd7a4anm6lqACvpbp8bwJHhyjwh9mp0sJeHMv/vD3MAK9+rQEn9 + rBjAStSvYv6GBTgQ4murRv96ORrhKtfvpBjA5ga4m+vjba5HgIUO4RaaRBi/RJzZLPIcX6LOdz59UYsY + FsLeH6pHm482tc5zKbV+kTLLF+jw1GClEmFbrxjAmVzqTOVEdSw70nyYEhE85evApLczy70cGBZi2y11 + 1WSvR5m1FgXWGmTbaJIqiDOfQ6zZK8RbvkyS9WySLV8k21bOHzqb0QSFgM5nf54OZ+V5utdsxYeDLnw3 + 7sc/r43kX1ZH8scV4fxhaSi/6PThnWpnbmZacFyEycYQPZZ6ifixm0OD2cvUmc2lymweBYbzyF40m1z9 + +VRIHbTZmTPoak+/i526XCPto8reiDoXcxqlLpsFja6m1DiKOHFcSJ27PrXehlT76VMVIMsiyBvDTKkL + NKBGRFq1MveKrM8R0Z7krk20iybBTlryrC3Cy0kPBxtdLM21MDdRDGDlDSFtFYoJrMBW2qSVmS7myosM + 0p5nDGDt79u2iexjIevsDObgqfsiIRo/I2HeLPK1fkaN0Su02mrQ5apFp9s8KX/OSOALbEufw70+S77d + 6sWfz4bC1QC45SKw4D9vLuQ/rmuo+PMNbf79ur4sm/AfN835d8UEvmPBn+9Z81/37fjPu/b8n1vW/MtN + e/7xphu/ec2Lj0/5cHevH7vG3OmrsyQnQZcQn9n4eS0gQOoiONiEsGcGcFCwHX4iembm2nYgKMiJ6Ghv + CouSWLa0nampAdrby9VU0O5KaixfSyJksI2J9SBABJOnMue4m/QV0m8pEfuecm98pJ0rc3anyCBeWJhM + jRCd1rYyWoXM1NblUVycSH5eDKUlCdRUp9PckE1vZwnT4+1CwuvV+X+bq5JpqZZnsiyOmrxQyjL8SA23 + JlDunb3JLKyMZ2Fn8yKWNi9gZD5L+pxZ0t/8HEPDn4koexFXeS5ClLmHki0oyHeiqsKdjpYgeluDaCl3 + ojJNn7qMRXTk6DNQYMCyYiPGCg1ZUWTIhior9rS6cajbm4NdXuzt8GBbkxMba+3ZWOfAuhp7VlfZMCHj + 91i+MctzDdW3zQ/2BXBkIEj292ZHi5fs68qGOjemyh1E2IuoCXmJLM9ZJLnMItv35zSkGNBT5EBXsStN + WY40ZDrRmOVMo5QNqTY0JZnRlmzCQLo5S3MsWFniwMZ6H/b2xvDqaBaXNjXx+OQK3rm4gdf2jbC0KZaq + FMV4MxOiGcKuxcns6IlkQ4MXa6uc2FTjyt5WP/a3BrC70Ydt1e5skXrZUq7AjY0lzmwSbCx2ZnOZC9tr + fdhZ58cm2WdVgfzmQgdWC1dYXebKynJX1sj6lQoq5TdWuLKi3IWxMidG5TqXCZ+YrJVt9Z5MNXgz1RjI + VFMYy2tD6S8Loa0giIa8YBHiYZTlhFGUHkFecgTZ8eFkxIWRHivETUFUCGmRwWTHhAhJjaApPZKu7CgG + cyJkzA9hKN2PxWmeDKV6MJjuRX+qF73JnvQl+zCY5s9gRiBDmUEMZQUwkhvCSF4Qy/P8mS4IYGNpEFtK + fNiQ58T6THMR1HocLjLjUo0tV8stuJyzkKuZ2tzK0BTM5U7Gy4IXeZAzhycFmrwnwvs96QffFlH7VtoC + PkhewKfJWnyZrss32Qv5JksptfguV5PvcubzaxH2v83X4HeFWgJt1Qz+baEmvynR4psSHaGMejwQznMx + fSF74zVZF6vFujRTNiv3o9qXbS0RbGqOZFmpL3XKPGZhJmREWJIebUdanDM58rtzkt3IibEhO0SfkhBN + mqK1Gck0ZWWpEq3uQHeSIZWh2hQG65Dpp02Kn4hs34XE+ugT7q1P2DMDOMpPj9gAPZLChf9EGatRwOkx + RmTEGpMXbyVk247CeFvyoi3IDjcnLViZc0uZO9iQ1DBzCmMdqE7yoFp4UkWoDeV+JjQHmzMUacNkrDUb + 5fr3xCvmrxkHwg3ZH6DNgUAtXg0SBGpwImA+ZwLmcUFwNWg+9+SaH0fq8a6MIx/EmPJelJFqBj8RjvZ6 + oCb3ZWy85TVbxW3vOdzxkfvlL8cFa/F6lB5vRBtxP8KQmzIGvRaow0VfDc75zOeU5zxOuc3htOtsLnnN + 4br3Au75avHQZ8YAfttDg3fdNXjHbcHMspcuH8q4opi/n4aa8mGwEW/5LeK+7HvLbS7X5Vw3BHc9FvA0 + 1JAvo8z4Zawlv4235FfyW38RKceG6fC+3Js3g+bxZvg8nsQs4L0EHT5K0ucLed6/TjLnq2Rrvsxw5qNc + d94p8edWeYSMubFsK85ib3Mlx0cHuLB1DVeO7OW100c5ffRVNqxZQ1d7B+VFxSpa6hvobG2jvaWVBlku + K6+koqqappZmhkaWsGrtGlauXsX4igk1Inj58uWsWrWKyclJent76ersorm5mcrKSoqKiigoKFTLxsYG + li4R0blinPVyjg3r1rBm5STbN6/j+Kv7uXD2KGdOHuTg7i3s37GBk6/u4vqlV7n52mEunt/OuTObBBsE + Mwawgiun1/LaMRHMu4Y5MN3IntFyjqwo49i0ghKOrCwTsVvLgbXN7F/fxe51A2xd3c+6yX6mRrsZW9LL + suFeRpcoKaCfG8CD6ucZDIpo71dN4JEBJXq1hYbqIrJSo8lMjKBaefu4pZzh7jpGeuoZbK+mq6GE5spc + 6ssyVRO4sTxXNYoVA7hahQjsQtlWVUxPTwfLpqfpWbmanMFhIlp7iOlbRkjLIIE1XcQ3D9I8sZHxLXtY + v3kba6WOl3S1U5WfTbaIb8UAThbBHRseRFRIkOiFACIUE9jHmxBvDyk9SI4IpiQzWa6rQk29vGJxB6uW + drNhrI/1Y92sXdqqzj+1elkXa1YMsmnDCk7JvXj0zmPufPABe+89YvTsdXqPXqbr2DX6zj5kyfUPGb7x + CZ3n36b20F3yN5wmb+UB6jYeZMn+42w+c55zD+7x6L0nPHzjNhfOH2XjuuUMdNXR1VSm1pdi+q4c7mSN + XMtKwdQyKcf72LtjJRfPHeTxk5u89fR1DpzYT9/YEpT0zh3jk/St3U6j1ElB/wRZXcspWrxSlldQtngF + bSvWs2bfUY5cusKZa1c4fOIIU6vHGRzsoLWlSk3/3NRYRmVFLpmqAew/YwDnJdPWUklXRy1DitG/pJuR + ZX2MTQyzVZ6XI9IWz549zMlTBzh0cDtbt69ly7bVHDq8gzffvMk333zIb373OV9/85T3nz7kjcc3uHnz + IpeunOL0hWMcO32Y8xcVA/gSHzy9y+dfPOJLwccf3ube3VPs2jHFkqFmQSt7dq3m1o3TPHl8nRNHd1NV + no2Ppx02ooWUP4sd7UyEk9mTmx7FQEcFezYu5crxLdw4s4MTB9awZ+uMAbxCrl0xgDft3MmuI0cFcl/2 + HmLDrgOs2b6H8bWbGRybpntolOEVq1ixYSurt+5m2ar1NHYPklVaTWq+tOWeAfpGRimrbyQiIQnf4FDc + ff1x9fFTzeCM3ALyi8sFZRSWVqrmb2Nrh5r+eXjZKKvWr5e2u5ENWzeydvNa6lvr8A/1w8LWHMNnxu9z + zKSBnjF5VbPXWA9dBUaLZkrjmW165troic7Rt9T43gA2tFaMOuHVovlmIDpSYGqro0KJuFVgaa87o2l/ + FPmrwM5FNKFSKiawbFcMYHvnRbh5GeEfbE1wlD0Rca7EJHsRm+KtIiHNj8z8CArLE8ktjiE+1Y+wOE+B + t4pQ0XqBEa74hNirxqGinRUdrWTU+t4Atp6Hic0CNQ20Mh+wjZO2agA7euircHITreGyUIVi4IaE2atQ + zF8lmtdRmabJXgsbOd5WYOOgpR7jLtftpZi/Ak/FAH627OVngbfAL8iGuEQfGhrzGF3ewYrJHvoHasnP + jycxMZCYGB/1hcyoWD/ikoKJFQSGueHh54C76HA3H0epG4GnM7GJ0bT3tHLwyG4+/OQxv/7dh3z++V1u + Xt3BtjVNTPRnsqQ9nsWdsbQ2h9HTl0j/cCbd/Rn0DeWzfKKK3XuGuX1jO2/e38Wp/QMMtUbRUe7FVE8C + e1cUc2BFEduHUtjZH8uevgj29Qezr9ePHV2ebGxzZ7LJg8V1HpSl25Aaa06IjLEunnIf3fXUKGAbL2MV + dkr0r7cljkpmMNHVPqHO+IQ54x3qNGMAC3xEq3sG2uHiY4mlo57cJy25P8r80frqfxyeyvQ3EUoKaGcC + wx2emcB2qgnsF2KtwjfEEu9AJRW0Ee6iMd18pS0J3P1FqysGdbiJtA8zwhKtictxIq08kHzh4qVdOVQN + ltE43kT7miF6Nm1gYMceRg6+ysSxM6w7/xo7bt7nyJvvcfb9jzn5xttsPXaagdEJ0UblJMbEEBsZRlJC + jDoFSlZ2HmnpylyOGaKv4nFyDZL24oOVjRfmVu44uQcTFp1OYUUzvcOTLJ3axOT6XazbeYRth89wUkn1 + fPc9Lt58ixMXH3DywkMuXn+TW4+e8vj9z3jviy/5xe9/y+//9I/86T//lX+Q8u//+Y/8wz/9I3/84x/5 + /W9+z3fffMfXn3/Jlx9/zKfvv8lHb93jg8fX+PjJa/zyg+v8+r1nUcB39/H0zEpe3z/Ia5saOTVZwp6h + DDZ1prClI5t9AyUcHSrm9NI8rkxk8GBlKk+nE/l8RTSfToTx2UQQH44pKaDdeWuJA48GrH9iAF9sMuJm + lxV3++15Y4kTb416qQbwvSVenO92ZV+TPavKrBjIMqExQZ9SZd5b4YH5EQZkCgdMDdInKciUuCALogIs + iPCzJNLPmmjFBPaxIszTnABnQ/ycDfBzMcHHXZ47T4G3KX5+xgTKvY8MMCRB2maG8PDiGGvqkh1pTrWn + NelHBnCcHu2x2rREzqcpYjbNUXNoS9CgM0lbMGMAKy9nKlDM6u40AzpT9WeigJP0qInXpixSg4Kw+eQG + zSUnWMF8soI1SBeenK7MBRy8UK5Bn2zhlgqyIvTVqOBk4dQJilHrN59433kqlCjgJOHUScKv04M1yQrT + JU/qpTDGkOJYQ/IjF5IToSPrtcgO1aJA6q0i0YSalBkDuFTOnxeqR7qfJomuc2bgNp9k4cbJnhqkKAZw + wEI1ClhBsq82sR6ahDvPIcR5NhFu84jyVgxgXRKD9IgP1CUuQJdofy2ihZNH+SwgXDh5qPtsFSFurxDs + /grhHvNEo8h3Bi4kLcyIrEgzMuS5Swk2IMFflxhfTaKVNNLPDOCUSEtSo+xIjXQiOdxJtIkzKdIvKFHA + 2dKv5yf7kZ/kS2a8F8nR7sTJ+nB/W4Kkn1CnavOyxsvDAicHYzU4xdRUB2PFAJYxzdbSGHtr6f8FNkpq + UZOZ+YFtrQzUKR2UKegCfG0ID3IUDudAsJwn2E2u6ZkBvLjEndV13mwSTb6zwoo9ZcbsLzNgf8ki1czd + nq/Jxow5rEt9mdXJP2d14kusTpqBYgAraaC3ZGuwNWueYL56zLEa0a3PUj+frjfnRLUxxysNBcaybMLR + cgMOFi1if5EeRyqMOFZtxr7CRayJf4nJiFmsiXmBXWnzOJKlxQXRoffqzHjSaMrj6oU8LJ3HncKXuSW4 + X76AR1Wa6lzA77UY8VGnOZ92m/FFvzkfdunLMVqiVV7hcvFL3Gs24EGHFZfrjTiYP58N6m94mfGYl+nx + n0W9yyzyLWaRYfozCuzmqQZwlY8R9aITG0QnFgcakeK6gEjbn80YwAaziDOfRZHnz+hNXMiOJneuTsTx + 7rZCPj9YxUf7KvhwXzUfHmjgg/2t3N9QxYVl2RzvTeHk4gzOjuZxYbqC8+uaOLW+k21jzSzrqaKjqYLO + 5npGh0c4vPcwl85c4cq5q9y5do9br93m6qWrXDp/meNHT7Bj6w7WrdvA5k1bOXrsBLfu3OMz6Te//lb6 + xW9/zZdf/ZKPP/mad979iDt3X+fCReF+J89z7PgFwXk5RikvcOLEBU6dviS4rOLkGTm/fFZw7JRsP3OJ + IzJG7NxziK0797P34HHOXrjGCdl3977jbNi8hzXrdwgv3MbYinX0D05Q19hDYUkTWTlVqrGrmL2KARwd + l/0MMwZwfGK+QMkiUURSSjGp6aVk51XPGMBFdc8M4AI1CliZCzhZPitQ1s8Yv8+jfgVZlTP48bpn+EtD + +C/x1455juf7PP/O58s//pyW+VOkZ5V+D9UAziiWcVOQUaCOm+nPkCHIzCiUUsbT1BySkjJVA9jDzR9L + U0f0dU3R0RT+qmOAkb4RVqYWeDq7khwXT1VZqWjqJtHZjTSLDquvKaEgL5XYCD9igt1Ji/ajriCZFd31 + HFs3zvHVy9m/rEfGvTpW1BewvCZXNX+HK4VHSTmTBrrsmQHcIGU9a3rqWN0ruqqjktGmYpbU5bOkNo+x + phJWtleyrreRbSNdbF/ay47lA6wXnbO0qVI1fxV0VRbSXl5Ec2khdYW5avrnyqw0anPSqM/LoDE3TUVT + fjoNUtYL6nJSqZV9ajJTqMlIpio9iYq0REEClVIqqHqGatlWm5ZEgyyrkM8KWuS4H6MtI4k20avP0ZGV + QldOOn3F2QzLdS6tLmVIud6CTJoy5XsSwygTvloqKEkIpEDqMjvSl6woXzIivUkKcZc+3pFQT2sC3SwI + 87IjSj7Hh7iSKPwtK96Z4gwvavNCaC2Noy4/hpLUMNKj/AjycMTe3FB9Wcfa0kjutRwXG0lWRgqRESFY + WZj8YP5+P/evJooBrK254K9C2W5taU5qchIDvT1KCugc+DYfviyET8r4jzcK+PWJeN5e58WNYTtOt5lz + vNmKQ7WW7K0wZ2u+KRsyjaVTN2KNEIF1ybocKDLlaqsrbw358uVUMF9P+/LtlAe/nHThsxEb3uo25vVO + E97otuNelzPXWl2kw3fmSI2jnNOBbcU2rMsxZTrDgDEhGCOxmgxFzWcoYgHD4QtYHDqPgeDZDIbMZzRm + IavSzNhSYM/WInt2FtuyV44/XGzJiWJzLpaYSGcug0C9JR+02khnb82nvZZ8PmTDV2PO/K8tQfzHkUS4 + mAfXiuBkMv+5N4J/WufDLwYseVypxWupL3Ap7gWuJs3jdpY+13OMuZxnyqlcY3an67A+WUMGOU2mkhcw + ljCXJbEvMxT7CiMpC1iaqcuSHD0Gs/TozVxIe6qOiq6MhfTIum7Z3pWpTU+mJv2ZWizN1mFF3kLWFBjI + 7zFkR4Eee/IXye/R57AMfq+WGnCmyoRzNaZcqLPktWYbbnU6c6XVgeNV5uwpkbooMmdlviUDqSbUK6Qo + wlgIoznx/uZCXAS+VurbZJlRzmQIYgIsCfI0xMd1oZDERQSo6WEM8HKXz276QiaMVAM4PMhanf/3ORQD + OEZKhXgqKWcC3IwIcp1BgKsQThcj6XSMcXcyVkmFYvgqJq9i9j43gBV8b/4K7Bz0sXcyxMZeD2u7mTmQ + rEQwPxfKz8Wxau56mqhm73Pz1zPQRoXyWdmmwEkxd4QMO3tbPTOBLbGXB8/OxVKFtaMFFnZKFLDh9wbw + j9NAPzfIlOhfxQC2l31dXazx9rLHSx5eF2c5l61ct0Axga2t9VQDWIESDfwc6jrLhVhbyfXbGagG8I/N + 3x8bwDMRwBaq+Rvoa6cawErUrxIB7OEixN3LiqhgZzU1S2ZSEEU5MVQUJVFVkkJLg3S0w01MrehhcqyL + ob46qsvTSI73IyRABKankt5FiJ2QSSX17XMDWE0R7av8LsX4/cEAVr5XgZIG+scGcHigdGJSzhjAch/k + tztL/ThbyvVb6OMp9eVnrkWY+XyiTX9Opu3PqfNdIM+FPmuyLNmUZ8faVBvGI03o99Wh2fEVGmWfxT7a + bEyWfqY+nBt96Vzry+FkQxLbsgIZD3JguQj9US8nhj0c6JW6b3EwoMZGmxIbDfJtFpBlp0mqrQaxFnOJ + MZ9DvNVcEqznkWg5m3SbF6n0fpnWwJ/TF/QCK6JnszVVS/oJI2412fJOrztfjQbzzWgoXy0J5XMR9W/W + uXM9z5bjMUZsCdBhiZemXOtsys1eoMToJUpN5lFsuoBsIw0y9OaRqa9JmXTSTfYW9Lo60OViR6OdOWU2 + RpTYGVHuZEa1myU10gYrnYwotVtIqb0OlW56VHjpUeqziHL/RaoB3CCirEHEWX2AAbWBBlQGGlLgK8LF + ayFxHrqEuGjj46CDq622mr7Z3FQDM2Ol/MEAtpI2rMDaQhcLKRXyb2Kii7Fs+/HLDUppLm3exnAebote + Jljz58TPm0WO1s+pNlaif3Xo917EUhE7Y8HzWBc3j6NF2rwpovY3W7z4z1MhcNkXbrgIzPjzdd3vDeD/ + uKbDv10z4N+uGvFv10351xum/NtNM/7tjhV/vuvAvyrG7xVr/nDBht+cdebLEyKY93pyab03a3odaSpU + IvMWEeg+T9riPHy9dQkIMCI4WERJqDX+8ux7e1uqqdZnTGB71QAuKExkaKiZ8fEe2oSgxCcE4CH9lLeP + BSGhDoQpb8wHKs+xxfcGsJKaXjGBvUU8KSnbo6N9SUuLIC8/nrLydCoqMiiSZ01JKZ2WHkpudjglRXFU + lgmJqElnsLuMntYC6ssTqCqIoDI/nIqcIErTfSlK9iAxWMS34zwczWbhaDkLF6eXsXd8CUvbF7CwmiX3 + ZxZGelIazsLZ9kUignXJTLWktNCJmkpXetqDGOoKobfBnSYZg+rSdGjN0KYvV5fhfD3GCg2YlPa8tsKC + nS0uHOjyYn+nJ7vb3NjcYM+6ahvW19iyod6BtbW2TJeZs6LIhIlCI1aWmbJX9t3X6cXOZhe21juxvkqO + EYzLPehM1KAs4GfkeM0iy3sWJWEvCyEyEiIkz2OVu5AgR1pzHASOtGU7CIGypC3NhL5MM5blmDNZaMWm + alf2doRwYiSJs5P5XN/axLtnJnh6ZQM3D44w0RpHS7YTjWlWTDUFs3coid29EWxqUCJ2HdhS7cyBFl8O + tvqxu96LLRXObCr9EYqdVGxUyjJntlZ7sa3Gmw2lrkzl2zIpmBKeMCXbV5Q4MVXqwooyFyblPCvKnBgv + d2KsTDF/7VkuXGSqzpVVjR5MN3qxssmPVU0hrKgLFeIbRn9ZGB0l4TQWRVCTH0GZtImi1HDyEkLIjg0h + MzpoBpH+ZAi5zo32pzohWMb/EAYyQxnJDmZ5lj9jQvjG0tyYSHNhLF2Bq1qOp3swmeXFZLYP0zm+rMz1 + FV7gz/oif7YW+7GvPIBjtUGcrPHhqFz74QJLDmXrcaHcjDv1wq0qLbiZp8ftbF3uZelwVwT33ew5gtk8 + EDH7ZpEO75fo8W7+Qt7KkWc5YwHvJs/no5SZeYC/kmO/zVskdFBXoC3Q5LsCLX6dr6R81uS38vz/Qc7x + hxIdfl+2kO/K9fmoTARzvj5nU7XZHTufddEL2Jxlyr5qd7lnwdIWI9jZEclUlQ+t0v8XRBhK/ZiK6LAi + Ld6B7CRXcpOcVVM2N0T6xFAtOhMWMV1kLe3RjQ01LgymGVMTpiniWpMsHw3SfHRI8llIvGL6+hoSqcBP + X7BoxgAOU1JBm6gmcHq0MRkxJuTGW1OYYEthnA25UeZkhZmpBrBi/sYHGagRwCUJTtSneVOf4E5lmC0V + /ia0yfO7NNKKlTGWbI2z5KDgcJQRh+RaD/prcdhfg2MBWhz1X8Ax/3mc8pvDef+5vBY8nzth2moa5/fi + jHlXruVJmB5vhi1U8ThYh9cDtbjnN5+7vvO+x72ABaoB/EakPo8iDbkbZsD1oIVc9dfloq8WF+T3n/Ga + /8wAnsMlz3nfG8APZKx67PHM9P3eANZSDeCn/vqq+auYwO8H6PO6pya33eZyU85xzXU21wV3pL/9sQH8 + m3hLvpX6+zJCXzWAPwjV5C3h4m9HzuOdeC0+FO7/SfJCvkjU56sEQ75JNOOrVDs+zXLk/Xx37pcEc6ok + kQOV+RxureHksl6OrVzGiW3rOLFvB/t2bmVs2VJqqqrJTEkjKy1d+rwqWhpbaGtuo76ugfLKakrLK6io + qqKto4OBocUq+vr76enrlf5+SDV/lSjg4eFhBgYG6OrqoqGhQTWBS0vLBKU0NjUyPDTI2PJlrF45zepV + K5mcGGPDupUcPLCTixeOc+PaOV67dIoLZ17l6qUT3Lt1ltvXj3Lp/E7Ond3MmbMzBvD57w3g9bx2dBVn + doywf6qRHUvL2DNWwp7xYkEROydK2D5ZxdbpBnas6WT7mgE2rRxg7cQAK5b2MD7cx+hQ/zOzd/EzPDd/ + FVNYrnfZgDoH8JL+NhlrmqirLCAjOZL0+DAqCjLoaa783gAeaKuis76Ypooc1QBWymape8UArioWQV2U + LsigPD+D+soSenq6WLp6NT1r11OwdJzYvqUkLJkmons5Yc3DpHSO0jK5mYmte9mwZfuMAdzZRnXBDwZw + YnS4agDHhAariAr0/xsGcCVLe1uZHOpi9bIeNiopn2WcXresjenhFlaOdLBqvJ+N6yc4KfX/+rtvcufD + D9l77w2WnbtB97ErdBy/Ts+5Ryy58RGLb35G+4V3qT18j/yNZ8hbdZC6TYcYOXCCLWcvcP7hfV5//wkP + 3rjFuXNHWL92lL72GtprC9V5khXzd/VIN+tGe1kjWDXaw9oVgxw7sIkbV4/z9rt3effjNzl24QTDKydp + GByibXyl1NVOGldsIbd/kvSuMXIHpsnpGadoYAUtExtYtf84hy5f5dT1axw+dYxV66akXXbT0V5LY32J + agCXl2ULx4hW5/+NiPARfpGumr/9vU3C5XsYWdrHsrFBJlcuZ7+0zfNyDddvXuLK1XMcO3aAnXu3smPP + Zl49vp8nb93j628/4Ve/+ZIvv/6Qp58+4Z33HvHg9dvcunudyzcucebSaS6+dpZ7D67x/vv3+fyLN/hC + 8NHTu1y/dpTV04vlGcylsjyLtauXcvnCqzy8d4UjB7dTIW3H28NONX+VdJFuThYE+Uh/Ldff21rKxske + ju6c4MT+lezbpkTUL2fl5GJ5zgaZWjXB+m3b2HHwMNsPvsr6XftU83fVll2MrdnE8IrV9C2doG/ZCgaW + TzEytVZF28AIRTVNZJVUUtfeTUtvPwXSL0QkJuGnRP/6+OPq7Ud4bALZBcUUlVVSWFpBcXk11fXNNLV1 + 0jMwyLLxcdZu3MDaTetZs3EtU2unqKyvwDvQC3MbM4wsDJmJ+v0Bz81f1fQVaBsu/BGUbT81gGcigbUF + ujMmsOi+GeioMBGtokAxXBVY2P1PE1jRt88NYAdnWVbWOc2YwM7u+qpx6q+8/BgrGu4nBrAvmflhFFbE + k1scRXyqD2Fx7s9M4BkER7mpkaJeQbbf62QlCliJRlavyU4Dc3stLB11sHLSlevQxd510fcGsPL9iqGr + wNvffGb6lWAbNb2zu4e0CScd7OT451AMYEc53tXT8CfGr3KsAp8AK/wCrQlQsonFelJSmiz9UDWDi5VM + O4VkZEYSF+8v8FM5fWS0DwnJoSSmhRMuyz4BLnj7OgqcVfj6uZKcEkOXPDuHjmzjw4/u8+vfvM1nn1zj + xuVNbF1Zy0RPGsMtMQy2xdDZEsHgQArDI7n0DWbR3Z9FT38Ok1N1nD4xzr3rGzi2p4vFSqRwmRdTXXHP + DOBiNQJ4a08UO7pC2dXtzy7hzVvbXVnf6sx0izsjzcIdhBNnJlmK3pZnxUMHB/eF2HoYzExP5WGKvehx + R8Wk8bTGzUe0SJCjavh6BSnLP0AxgJX/MWxcDL9vQxZK1idpJy7e5viFKWmgXQiOdFKhGMH+SmakcDsV + SnvxC7WSc0vdBxnjJVpSgXeQkRxrQnC0GREJlkQJJ0sscCKr2p/C5ihKWpMpapNxYqCI5vE2OqbH6F67 + lv4tWxjZtYfVJ06y9fIVDtx7wPE33uTI7ftsOnyUxaPjVMlYnZqYQLyMCcoflcpc/AlJycTEphISkoCP + bxSOLoGqAWxt642ljScOrgEEhiWRXVhDc9cS2vuX0zE4Tv/YGiY37+XE5Qe8du99Lt9+h9NXXufslcdc + vf0u99/8lLc+/JIPvvgFX//+t/zdn/5JNYD/6V//mX/83//EP//pX/jnf/5n/v4Pf8/vfv17fvX1t3zz + xed88dE7fPLuAz586yafvXOdX310m99+eI3fvHOe7x4d5bMrm3n72Bg3dnRxdnU1h8eK2TmYz67BUo6O + NXBhupGrq2u4ta6IN9ZlqQbwZxORMwbwimA+Gvfh6XIPNQL40eBPDeDzDQZcbTfnWocFt3uteH3IhcfL + vHi4zJ/L/Z4canNhU50Ty0ts6co0pzbBmLIoQ3KFN6YI/1NeeowTrhvlZ0KotzHB8iyHeVsQ6W8jPNia + SB9LQtxNCXI1JtBN+gxPc3xF+/rJsxoYaEpooBGxQUoUsanKgcvibKlPEg2XYk97kg3tCea0JRjRkWBA + W7wOzVHzaQifTVPkbFrjF6jmb2fiov9hAD83gTtS9VUDuC5Om/KIBRSFzSU/eA55wfMEC8gRbp8p3DZD + uG966CIVGWE/YCYF9A8G8E+hRAPPIdl/PqmiA7LDF5IXqUe+ICdUm0zhphkhGnJ+DTUKWEkDXZVkTmWc + qWoA54bI9/lpkiwcV4Vw5BThy6neWqqeSPPTnTGB/ReS7KNFrPDnMKfZBDu9QrjrXNUAjpPtMwawojMW + yn3QFu2hRYSPJuHeGoR6zCPYfS5Bws0VhAq/jvLUIF7JyKiklw4zJjXEgKRAOYesi/HVJlpJJR2kS7zo + kETRJEnh1qJf7EkMcSJB+oUE6QcSAm1JCnUkJcKZ5HBn4mU5JsTh2fzP0p8qgR4upri7mePiZISN5ULV + /DVRXvg30cXCXA97Ge+c7a1wcbCWcdwcGwtjLM1kvLEyxM3RdCYIxUPaibc1wV6KWWEm7Uif5EBjKhKt + GSh2U6eG2ljlxPYKa/aUm3KgXHRQuQEHRFPuLNRmc/a8HwzgZ+bv2uRX1DTQW3M02Z6nzBGspIpeoBrA + ryr/azdZcbbRkhM1JryqGL4lC9lfuJA9oj+3Zc1jY+ocNqfPY2eBLvvLDNkl5eqEl5iImMWqmJ+xNXk2 + +2X7OTnmbq0pbzaY8bh6EY/KFnCn4BXRwy9yu0j0b/l8Wa/N+82GfNhuymc95nw1aMUnvSa807yIe1Xz + uVo6h5s1C7nZYMJp0bc70l5mOmoW07EvqBHAg8Ev0uT+AoVWs8g0nUW+7RzKpX+vDzClPdqezmRXqqOs + yPCR++rwopoCWokATpT9S31+zqA8HzubPLiyPIb3txfy9dE6vj7exC+Ot/L50TY+fbWLd3a3cmO6hDPD + WZxZks2ZZfmcX1nNlS3dvLZrhCMbFrN6eSdLBtoZ7u9jXHj70QPHuXbhJtcu3uTu9Qcy7t0WfXKZMyfP + 8eqho2zdtE30zlo2bBDOeOyEOufvp59/yTe//LXgN6oJ/Iuvfi3rvuHNtz7g1u2HXL5yU3CLS1IqeO3q + bcFNrl67/RNcvnZLxSXZpuCEcO/d+w6zZccedu07xKlzFzl28iw7dh9izfqtrJhex9gK4Xmj0zLujlJT + 30lhSQPpWeWquRsbn6ciLjH3J1CmD1CQpEwfkFpESloxmdkV5BXXqwawYq4qkb8Kfmy4Psf3Ru1z8/dv + mMB/edxf4vl+ytQFCv7asf/P71dN35nyLw1gBZnfQ37fj5CdWUxOVomUMyawEgUcG5OMi7MPpka26Goa + ojlPFz1dA4wNTLAxt8TbzYP4qGiK8nKpr1aM3zKqKvIpK8kmPTWaEH9XgrzsiQl0oSQ9kuGmMvZNDnFQ + sGOojTUtlar5u7Qqm6GKDBaXp6ulMh+wEgW8pqtKNYDX9dWzqqeW6e4axlvLGKkvYLA6W8Vog2IWV7Cm + u55Ni9vZMtzF1qW9rO1rY0l9OT3lBfRWFtFfV0ZfTTldVeW0lBfRUCjXXCD6tSiH1pJ8Okrz6CwTlMuy + oLOiQC3bSwtok+0KlH2bCrNpLMj6q2jOz6IlL0NF6zN05GeqaH+Gzrx0QcazMp1u0cq9xTkMVhWxVK53 + WUMFg3K9LblpVKZEURDjR26MNznCVbMEaaEeJAW7kxDiTlyIK1EBTtJH2+IvnM/XzYJALxtC/RyJDnEh + TvhbapwTOdJvlGYHUFcURVVuJEXpYaTHBMhxzjjZmKqp+u2k9PZ0UV+sy8lOJ0Y4lo21+f8wgJ+bv1oa + 8/8q/ocB/Oev0lFN4K+K4MtK/vx2Kb85k8zbG/24MmTHsTYrDjdas7fKmu2lVqxRInSTDViRoM+KuIXS + wS9SI3Bvdfnw3rIgvlkdzndrA/n1Wm9+s8aDryYceX/QnNe7THjUZc3tdgcuNjpwuMxGOnUrNuaYsTLD + hPFkfZYlLmRxlCZ9ofPpDp1LT+g8ekMX0BM8n67AOXQLiVgcuYixJFPW5tqxLt+OTQU27JDz7C+05Ei+ + KafzjLicb8SDCnPea7LlaZsNH7Sb8UGPBR8O2/Ldej/+96FEuFwAN0rgQhb/dTiWf94UwFdD1rxRqcHl + 5FlciJ7F1YS5PMwz4UGhFbeFlF0osWFPpgHrU3WYTtFhRZoO46laDCfOoz92Nr1S9iRr0pmmTbtsb5X9 + GpK0aUjUoj5Bg0YpW1K1aU2X7emadAkGMrVZlqXLRPZC1gg2ZeuwI3+hDKpGHCw15ECpAUfKjDhRZcrJ + KnPO1QupbHHkbIMt+4qN2Jirz8osA8azTISQGdOYYEJprDk5EVYkBVkT4SUDuZsx4UIOU8IcSI9UDGAZ + 4EWQeLko6YX18BcyGeBroprAfiLq/L2MVQM4LNCKSNlXhYi22FA7adQi3OSzkgY6yMOEEEGoCJtgDyGc + btJIXU3xUNIfqwbwTKpnxfR1dlZSP/9PA1iJ/H0OG3spHfVkWYSOiGBFENu7GIggFaH5/zCAlbebnbzk + vD8ygF19bEQoWatCS4Gju42IMWs5r5UIcDPVAH4+B/Dz9M/GZkKczH4wf5XS1sYYJ0clVbINHgLn/x8M + YAsLEdPP1inb/1r0748N4OcRwEF+9irUCGCpRy9XE/XNvvAAByF8riSEe5AW60tOahhleXE/GMBDTUxN + zBjAIwMNNFZnkZ0eTpx0TEEBdioiw12Ji/VWDWBlrg8l3UuAv+2PDGD5Pik9RUAo8JbvVa4jyNdG2oI9 + EUFOahSwkgLaT+rA3U7uhbUhTtZGuFga4W61CD9zTUIVE9bi55S5z2EwxoDNBfYcFeJ4psGf4xV+7Mp0 + YnWUGSNCsgdd5zAVuJDdqfacrw/nZm8aNxbncbwxmQ2ZgQz72dLnZkOPsw2dDlY0yb2ostKh2HI+RVYi + KmwXkGk/YwDHmc8l1mwuCZYLhHBpkChlqo0IEOdXKHX5ORXOs2j3+jnLRJBsTNDhsDzXV2oceNDqwcM2 + Tx61+fGwyY8L+Y4cijdjowiCEee5NDnNocTmJXJMXiDPeA4F5lrkm2uTIeQ6zUCDdEMdSuT3Nzia0+Vu + T6uLDdVSN4VSN7m2huTbm1DsaEapowlFcr/zrLWFOGpS4qKrzhtS4CXH++pSGWxAbagxTaEmNIWY0Bhi + TI2UyhuFWb76JHovIsxNF28HTRxtFmBlNh8zE4HxAizMFONX2pxAMX0VWJorkb8zb38qxq+xtHMjWW8k + 7dtE2r2JkH9z2WZluADnRa8QqPUisfN+Ro72S1SZLqDDTZ+l8v3rEy3YJkLvcJ4B14Rcf7DEjj9s9eS/ + jwfyf896wjVn/u91M/58VTGANVX8+1VtgT7/+poh/+eqEf/7mhF/um7Cn25Y8C/XbPhfl6z49rgJnx80 + 5ukuSx5vtePqSnsOLnFipMaa0hQT4oP08XPRxN1pHl7uWvj6GhAgRDsgSAZS5fkX0ePsYqyawEr0rvJn + UX5BAu0dMkAPNlJfn0+MPCvu0i95ShtXTOMA6Sv8lDbvbYmbu4lqACtp2J1ENHkoA7SfHeHyjMXG+pOY + FERmZqSKlJQQ4uN9iROk/H84++s4La506x8mk0lw2t3d3d3d3d3dvZumobFuGvfgFjyEhJBgQQIkIQlx + 13F3OTPnzPN9r6oGkpwz5/c+n+eP9dlVdZfXrr3Xuldd1072JzcrjMJ8ZTzuOBqr06gtS6QkR5al+1OQ + 4kNhiif5iS7kxjqIeDMmULkG+7kEuotADNDC308DT6+FuLvNw9H2cSxFJFgazMHF+jFiQrTIz7CWd9uV + hmp3+toDWdoTxmi7D93SZ7Zk6dKSupieLA2G83SYKDRkdZkp05WW7GxxYb8S/asYuq2ubKpXxvi1Yqba + mi3S525udGC99ONT5eZMl5mzvspCtnFip/y2Ve77RtnHhnIrNojAWyH9aFfCfKoCRej4zKEkeA6NiYvo + zzdhotaZFQ3uDJU70SPvd0+BI7359vTkWtGfa8Z4gSWriy3ZXOPEvjZfTgzG8NxkBs9PFXBpay1vnRzn + 3fPruHpgmOnOeAbKPOktdGR9aygHhhPZ2xvBtkYPNlU7sL3aiUOtPhyW/eyp92RrmSObih3YXCLXI9hS + 7MRmBaWzBvDWKk+2VXsyU+zCily5DgWFdkzKea4ocmSyxIkVpU5Mlsu07Gt5uQMT5fZMVMq8HG91nQtr + G92YavJgXbMP041BMh/KyoZIltVFMVwTS3dlDM0lMdTkR1OREUlRUigF8cHkRgeSE+Wvpn3JjpL6GOtL + Q3yAcAJ5hpnBTOYEsCbHh3XZHqzPcmNjphLF6yhwkH7fSQS0Czvy3NhZ4C6cxlP4kRd7S3yEK/lxpjqA + i03BXO8I5WZ7ANea3LhUZcvFMmNu1ltwT7jOa/I8bxUa8EqeCOBcPSl1uJm/hJsFi7ldrMG9Uj3eLjfk + fpE+9+S3u1KH7qUt4n66Bu8ID/mkyIAvSwz5qkyfr0SIf1WszdfFWvyoUIMfS/nzEh1+Lfv4TbkBv60y + 4qc1ZnwgvORGsQEnpE7uiJnLuhgR7LnGHG7w4ERPKEd6w9jTFcZUjSedmZYUR+nLPTImI8aCjEQ7clKc + KUhypFD6hMJQPeqjdRgRPritzpUj3YHsbvFiPMec+ogllAYsItd7EZnSZqb56pPkb0icvwmxASbEBBoJ + LzEgPkiWhxk/MIDN5DimKhQDuDDBVgi7DblR5mSHmZEeYkxisLFsY0hGpCVlSa60ZgfQmupNTZQ9tcHm + 9Eg7vCLKgo1yvrtizTkaZ86xSAOOButwVN7jp/0WcTJgCSf8F3Pcbz4n/eZxzn8eLwQv5FqEFq/GG/FG + vDGvyja3AjW5HazJq2E63FOM4FAddf5moDwjBQGLZR0pZdmdCH1uRxhyI9SAy4HavOinzQU/LZ7z1eKc + 9xJOuy3ktOs81QC+7LuEG/4aagrnWQNYnqmUqgnspcXbPrq846+vGsBKGuh7PtrclO2vSv+rGMCXZD+X + pVQM4DeD9fg4UkkBbcHXsWZq9O8n4coyXd6L1OTtyCXcj1nMu8nafJSmy8epOnwmvP3LOD2+TjBSI4E/ + Trfm7Sx7Xin05UJFEk/X5HNUxOTTg20cEPG3b3qCvVum2Tyzht6udhG2WUSEhhEdEUlBXj5VlbU01DVT + XVNLSVkF2bn5ZObkUKRECVdVUlVTo6K2vo7unm6WLVvG+Pg4/f39dHV10draSnV1tRr5m5eXJ214ljrd + 0tIk63cyMjrE6NiIrN/L2NggGzeu4eSpg1y//gK3bl3i0kvP8tILp3n5ylkuvXiM587v4dwz2/8XA3hG + NYD3r25h+1g5OybKBMVsnyhh0/JSNq6oZP1kPZumOtg63c/GNYOsmxxi5dI+Voz0s2J0kOUCxfxdJuXD + 1M8KJsYGZiOAR+U8BzsY7GmirjKf9KQI0uJChQOm09Nc+T8N4KpcmipyaK3Op62miPoyJe1zJhWFaYJ0 + KkTYNlaW0tvXw/iGjfRv3U752g1krFhH6uRGYkemie1ZTdbgWtrWbmdyx142bdvBzOqVjHa0UluYRV5y + HBkJkd8zgOMjwogNCSLcz0fEq5eUXv/GAO55ZABvXtkn96hTjQBeM9rO1PI+NisRwOeOc/fte1z/4AP2 + 3nqV8fNX6DnxIp0nr9D97F1GLr/P4OWPaH/uPrXHbpC/5X8awOdeucntd17n5t2rPPPMYdXY7G2rprUq + n2G5T4oBvGFCnsfygVkDWM5p46ohThzaJs9cjv/6Je6+dZOnz59m6boZmkeW07lqE4NbDtI6vZfCkfVk + 9a0ld2gduX2rKRqeomX1VqaUFHkXLnHy8iWOnj3Jhi0zLBvvp6+ngZamChobyigrzRJOEaWO/xsXF0R1 + ZR5D/S0sHeliYtkAE8tHWL5qjKn1azhx+hhXrr3IK3dv8vKNa5x55iT7j+5j/5F9nDp3gtfeeIUvvv6Y + b376BZ9+9QEfffEu73/0Nm++9yav3Zd7ePcVLl59kRevXOTW7Wu8ff8Wn3zyGp99cpf33r3O5ZdOML1m + mPKSdApyk1i5YpBnTh/ixrULHDm4k4rSHOFfDrMGsL0JXm42hPm7k5caTWdDESuHG9m8qpsd6wbZum6I + TetGWTUpdVaueXL1BDNbN7N93wG27j/Eup1PMbVtN2u37GJyw1YmpjcxunKa7tHltPSN0Dm8jJHJKfrG + V1Ld1k1hdQOVTe1UNbeSJe9+VHIKAWERsxHADwxgZdzfsqpaSitrpKxTDeDWzh76h0eZXLuW9Vs2s27T + etaun2Ji1QTFlUW4+7phZm2KoYUBusaK2atE+z6ElkAHXSM9dAxnjV9NQ51HBrA6PrC5tmr8zkYAK0bw + QxNYOLbVQ2gJlCjbWfzfGMD2LgbfM4CVCOCHZqp3kDlhsY7EJAs/lf5JQWK6D1mFoRRVxpFXEjlrACe4 + PTCBPYhI8CQszoPgaFf8whxVzaxkz1J0shIFrJjAlk6iHZx1sHVVzEU9HJSUz+76/6sBHBRsg3+gFV4+ + Jri6iraV7b9vAGvhKPtRxi/28lXMXwsVvrKNnyAgxI7AUNGkcj6Rse5k5UQIV5d2qr2Uiso0eS/CSEwM + JDEpUI0CjlSiKNIiyMiJU43goBAPAgJcRQu4qQgL9yIrO47+gQaOHNnMO+9e5sc/vsNH7z/HpfMb2La6 + msmuFIYboxhqjmagPZ7x4RxWLCthZCSfzp50mlsSGRjMZc/ubi6eX83hXW0MtkTQUenDqs5Y9iwvZP+K + Qrb1J7GpPYytbYFsb1OGTHFnc4sz64VDT4uOnOwMoLvGm4J0W6LCRdd7ilZz11ajgB08jOTemsm0hdxf + c1luhYuXLZ6iObwD7PEUXeLhZ427v/K/xuy88j+GMpyVuZ3oNisNLNQoYHk+Hib4hNir5n5EnAJ55rFu + hMpzjohzlWkXmXZQo8aDo2wJirQiMNKCwAjlQwJTgoT/hCVYEiPnmZjrQEaZK3l1fhQ2hAgiyW+Ipbg1 + lbqhSpqX9tC2YlQ1gvs3rmNy725mnj7M9nNn2fPCBbafeYY1u3bRPzqm9rmZqckkxkYSGxNOdHQ44VGR + BIdG4+8fJTosHGe3IByc/bB3fAAXf7yDY0nOkr69oYvyhk6Ka+Wdb+tnaNVGnn72GheuvcH5y69z5sJt + nn3hNV56+T63Xv/4kQH89S9/wW/+8if+8l9/58//8Rf+9Pc/85e//Y2//vWv/OkPf+L3v/k9v/7Zz/np + N1/x1Sfv8vHbt/ngzWt8ev8qP/nwBj//8Bo/ffsFfvLaGb64uo+3n5nhxoERntvcwvE1texfWi6o4dTa + dl7a0svVrW3c2FbJ3Y253F+TwAcrInh/MowPVgbz7gof7i9z57VR4T8DVrzQYsCpCuGHlZo8U6/PhRZT + nmsy4vlWQ652W3Nz2E01gF8c9udErw97O3xZ3+jJmGiUjmw7quLNyQsX/S+8L9pTiygvPcK9jQjyFD3s + YUyIpxnhvlZEKvCzUlNBh4k2DvWyJER0bnCADSHKOOKhFkSHmpEYLtw3ypLCOGuqEh1pTnGhI8WBzqSH + BrAJHUlGtCXq0By9mMbw+TRHzac9fgndSToCPXpTDVTzdyBt1vz9twZw1CJKwmYN4ALhwooBnPcdAzhd + uH56qK5q+j5EqvDe5AAlBfSSB5G/3xrAynycz3wSlZTQMp8p6+cIh84N1yFb9pkRrEF6sBJdrEFuhC6l + ccZyfeZUCV8vizJSDeBM2Xea1+JZeMu0j5Zq/mb46ZDhr/vIAE4Tnh0v7+6/N4AN1PGTY2S9aH8duefa + cv+1CPfRlHu+mGDh3kGi8xUEuy4g3H0RsfJbkmybokRwS5ko2yoRwIqRPGv+6hEXYijcSbRMsIWa2jtW + 2oBYaRui5RlGelsQ7iXvrPcsQmQ+TJ53sI8lAfL8fVxNcXM0xtXFBAc7adfNpM8x0VQNYHNzJTOhEU4O + Vri72OHp7qiWTvZWONiY4uJghruzOa7OpmrAibIvP1czNaAnxM2QlCAzKqVuDBZ7MF3nw+Zql0cG8OFK + U45Vm3Ckwog9og135C1hU5Yy1u+TgrnMpD3JxrR5bM1exO4CbdW83Z2noZrAigF8tMpEjfw9XW/O01Wi + GZVo4kLFJNZkU/o81ib8gMmYHzCV8EPRxkvUcYd3FuoynfgkKyLnsDb2MbYkPsHe1HmcydfmWo0przaY + 8XqdAXcqNLheMJcrOY9zOe8JbpTO526VBvebDHinzUSNAP5y2I5P5B19u92I23WaXK5YzIsVWlysET1b + rMm25B+wNmoO65OUNNZLmIxdRLvvE5TaKSmg51BoP5cqbz2awyzpT3FjKMePlhQnCsJEh7rNJcx6DmEm + c0iV9asCn2As05hdje48OxbBm9vy+OJYHd+cbuXzE628f6iJtw808+rORl5YVcTpkQw1Avjp4SxOTpbx + 7OZOLuxeypEtY8xM9rJ0uJvRwUFWLRftcuQsVy7c4MoLL6sG8EvPXeXMyfM8feQkh/YfZsvGLaxZM8X6 + 9Zs4euyEGgH8XQP4IT7/8kfcf0cZO/81Ll+5weWrN7l6TfDyLeGerwiEg16XaYFiIiu4LPt6iEtXr3NK + uPeufQfZuGUbW3bs4PDTT7P/8BE2bd3BpJzD4Og4fUNL6RkYo7VjgIqaFgqKlRTOJQ+ifGfTPCelFn4H + BaSkFZGSPotUBRlFZGSVkVNUo44hr6RgVlMsPzBb/51Bq+L/0QB++PvD/WbmVal4OP/dY6kpox9MP1r2 + cJ1s2UfObKnuV4n6zSkVfVtKVq5cT245uXkVDyDT+bPIl+WFsixfWSdbiQjOIyE+HTdXP8xNbdHVNEJr + sR6GeiaYGZtjb2WDn5fwxKho8kRfV5QVU1aSS3FRJkUF6SQlhuHv5YCvq7UalZqfGEK/6PTtS7vZPd7N + 5r5GVjeWMq5E/lZmMlSezlBZmloq6aBXtZQw3Snatrdejf5d01XNys4qlsnykdo8+mSbvooMltbls6at + gumuWjYNtLJjrJddy0R3DXYy3jQbATxQU8poSw1jrQ3C0erpqa+ms6pE+FcJvTVlDNRXMNxQKRxOyodo + qmRIth9srGZAQYPsq66Cntoy4WClj9Al+3mIHkF3ZaGgiB4pe6RUDOjvobzge+iTZUPVJSyVYy1vr2dZ + a61qWNdmJ1MQH0pamAcp4W4kh7lKO+4q/YITEX6OhAlClUwKip/ja6v6Kb5e1jJtT2iQM9ER7iQI/01O + cBE970xOhjel+aGU5oZTmBVOerzo6EB3XB0tsbM2lvbbEn9fD9JSEijIz5ZnHy1tvdWs+fu/GMDfjfx9 + COV3a0tzUpOTGOjtYc7fPknmX19mwzel8HU9/3ijnB+dTeK1Tf48M2DHkVZrDtTbsbvKls1FVqxM0WdZ + vC7LYvVYHqPDBiECT1c5c70/gHdXhvHNpmh+uiWMn2/25xebfflm2o0Pl9vxmjS0t7ptuNTmwNlaO/bm + m6lRxKtTDFieZMBYgg7Dsdr0hi6iK2ghHUIaOhUIcegIXkx70CKZXkJfpJ6sa8rqHHum8uzYkKeMGWzJ + HsHBXFOOZhpwJlOfayXmvNFgx/0WG95oNedelwVvDFjz6ZQ3fzyUDC8UwdUKuFTIv06m8OcdoXy91J7X + azV5Mf0HXJDO52rKIu6VWHOv3Ik71W5cqnHjYIGFdHIGrEnXY0WWPpNZeoykatATu4D2uPm0xC9Q/yiv + jRMkLKFaiFNlzCLKIuZRFjmf+mRNGlM1aU5dQlvaYnozNRnN1GY8Q4NV6RpsytVmZ5EuB8pNOVJtxn7p + XPdKx3e4QjrbKnNO1tnyTLMzx+vs2J6vL/dvCRPJ2ixVSFiqKU0pFlQk2VAQa096uAORPhYEuBoR4G5C + dIAVKZHOQi5sCPQWMS9CzUuEnZ+SZspXMYCN1ehf1QAW0aYYwJEBs1BM4DgRbnHKl7uBtkJ6FJJpSoSP + ufrlYZgcJ8hThJ6IGy9l7FtH0weRv7MGsJL6+d8bwIbfM4HtRZg6KHCTaYGjYv4qY/8+MIDd/b9rAM+m + gFbmZw1g2b8QJDc5H8UAdvO1wcXbFldvO4EDzp522LrYYOVogToOsIW+avwam+uqMLVQxkfVw9xKSJS1 + oWoAK+RpNgpYCJQ0ls5qCuhZA9jWxgBra71/YwA/hIh9KxHy/5sBbPcgAlhIlzIGsGoA+z0wgJUUPm5m + hAkJjAlzIz7MXTWAU6K9yUwIpDAzkorCRFrq8hgbamTtZA9rlnexbLiZNllWlBtLRmqIavgq0b+K6Zv4 + 3wzgYNUAnjV+H8JLBOd3DeCgBwZwVLAzEUHSsPnaEexhjY+TOR528nxtjXCVe+Qh1+9vsYhwiydIsfkB + TYEaTGVZcqrZj5cHorg7ksDN3njOVwdxOMeN7bEWTAdqs0WJpEq350J9OFd603hpMI/D9UlSr31pk+uv + k33XWAiZN9Wn2EiTfOMF5JrNJ996Afn2S8hynDWAEywWEm8uYsFyCYkilhOtREzYLCHFeh5pVj8gQ0nD + YjOHJucfMuS/gGlpu57KtuBIgQ1HC+04WebGqVJPnkqxYSbYkBHHRTSa/5ASm7nk2Mwjy2I+WeaLybUW + wWGpR5rUl2RjDTKMdSiRutTgYkGHpz2NbpaUyXPNtdYnQ+5JptSRHFtD8uR550hdyJJzy7JeSIGzXIub + JrkeGhR6a1AqoqA6xIhWEeotkeYqGiPkXQ43Iz/QiBR/faKFbPq5auGq/NlivQRLCyX980MDeDby96EB + bPnAADZ7YAAbC4yUsYDNDaSOGwoMVHFgYbQEJ735BGg9SfSix8jWFlJroUmPjwkrY204UOjKyWI7Lkqb + /Ua/G59MOPO7HT78n6cD+dcpT3jRFV6y5D9f1OMfl7QFWvzHRW3BrAH85xeM+eNFY/7woim/f8mKXzxr + yRdPm/LGLm1urdfi8kp9zo2bcKDbhHUiBNpzzcmJNiVKju/jqCPXukjeu8VST/XVNFb+AYqhK+2Jq5I+ + Xt4feU8U81YZAzg/P56qqiyamoqE6KQQInXcQ8SwEgXs7WuhRgL7+UndFZHs7iFtkLO8h/bKBxoGsj+p + /0rEe4g7kZHeqqGckOBPXJwfkbLvCOmwIyPdiY1xJyXJj/S0QPKzwyjOkQ47M5QcZYxhJcV+jDPZsY5k + RduRFWVFcrAxEV5a0g7rSNtrRmayNSkJ5sRGGxEpws/XfQGOUjftjObgYfuYtLGaFGdZ01DhRlOVG52N + Xox0BDDW5kN/lT3d+YZqv9GZvojBbA3G8vVYWWbK2gpLtjY581SXF3u7fdje4sL6WmvWlJsxXSW/NTuy + rdWJzdKXz8j8BsGmWku21FmzpVrmZR/rSo3YUmnF1mo71haZMpC0kNqgOZQHzKEu6nE5pgaDBUasqLVn + ZaMrY1VODJU60F9kx2ChLUMFlowVWrCq1IoNso+9bV6c6A/h/HgCL67J4uJUHi9tKOXekQHePTPJlae6 + 2dQTz4p6P8Yr3dnSEcah4QT29YSzrcGNTZXSx1U7cqjVm8Ny/XvrPdhcIn2+vLMbpU5uLLZnU5HjAwPY + iS1lrmyW/ShYW+jEeJYVS7OtGM+zZVmBHeMK5F0fL3ZgmZz3csFEmR3LBMsr7R8YwM6sbXRhusmVdc2e + TDf4sa4phJnWaNa2xjHZksxoQ5KQyURaS+KpzYqiPCWUkoRgCqMDyJe6oyA3ypOSWE9apc0dTvZlMjOA + dbm+bM7zZHueqwhhN/bmOLM3115gLbzCnkOFDhwtcuJYiRNPlzrzdIkLp8vduVDjza3WIN7uC+PTkUg+ + HQ7lw15v4TYO3Ks3450WSz5steF+lSmvFxvyWqEhr8pzultgwK0iHW6VanOnTJc3Kgy4L3zirWIDXs/T + 4U6WJnelHr2etYR72Zq8X2LIZyLqvxRR/1WVIV9WKEawDt8Ua/HjUl1+XqbPr8sN+Z0I9z/WmfHLBis+ + qLfk5TIDjqYuZHPk46yJeYItucJXpH6c7gviUI8/uzv8WCMcsT3NiOJIbXIiDUiPkXch0ZbcFEeKEu0p + jjKjNERHOJQeqwusOdzpx4VlMTzdE8Aq4VzN4Qsp8Zsr7eU8sr21yPA1kDbRhMRAcxKCzIkPMRVuopi5 + BiSFmfxbA7ggXhBjLce3IDtUfg82IinISLY3IlMxgBNd6MoPpjPTj4Y4BxrDLRgMNWaN7Gur7GtvtDHH + Y405KRz0ZLAWT/su4qSSkjlgCSf9FnHcd77Mz+UZxQAOWcjVcE3uxBlyN9aAGyHaXJV1bwQs4m6oNm/I + Pt6I0FfN4DshWtwWvBKkoRrAt4LkuYTpcTvcgJvB+lwJ0FIN4Bf8tHjeV/s7BvDcWQPYTzGPBd6LeNVz + kWoAv+W1mDdVA1hbNYDf9tPjg1AT3gnQ547HYq67zPvWAHaZq5bXPRbxmr8W74Ua8WmkMZ9FGvKRnN9H + YVp8Gq3LR9JnfhCjzXtxmnyUqsenwoE/VQ1gbb6K0+JreXZfJhjzUbIp91PNuZ3nzksV8RwXMXiwrpD9 + HTXsHmpn16oRdm1YxfTqZdRVVxATFYG7iyuebp7SviaQmZVHcXEFxaXlZOXkEpeQqP6RHCliNjY+jqTk + FFLT08nOzaG+QQRjT49q/DY0NFBRIdsVF5OZmUliYqL0C1GEhoZK2x1ORkYaJSVF1IrAbGiso6KqjAoR + mT29bezcvZFLV57l1iuXufDCGc6cPsizzxzkwnOHvmMAb+bc2Y3fN4CPz3Bm1zj7VreydbSCzUtLBcVs + HC9m3Xgpa8crWLOsjumVbaxf1cO6lf1MrRhUDeDlw32qAaxASfe8dLif0aEeRge7GRnsYelIHxNL+x8Y + wO0M9DRSW5FHWmI4qbEhlOWl0tM8mwJ6vO9bA7ilOo+Wqlw12rWt9rsGcCoVBWlU5KXTWDFrAC/bvIWh + XXup37KbwvU7yVq3i6QVW0ke2UT++CbapnewYsceNm3bzrpVk4y2N88awElxZMRHkBgdro4BHBMWTEJk + mPDUUCL8fQn1E94pSI0KpSxbzrOximWPIoB72Cz3YdYA7mJ6qSwfbWPNRC+bN6/mzHOnuPvOG1z/8AP2 + vPIaS5+7Ss/Jl+g4dZWu83cZuvI+/Zc/ovW5+1Qfu0ne5tkU0HVqCuhZA/iZV27yyjv3VAP43DNHHhnA + ijne31zOmuEONslz2LhiQDWkp5QI4JWDHNw9w7kz+7h09QwvvXyBvU8fYXDlWpqGJ+mZ2snEvjP0bDtO + xeQuCpZupWh8O4WjG6mY2Ez7zFNMHTrDwQtXOHnlMkefOc2W7ZtYuWJENXg7WmuorymmpFAZmzpMeLkX + qUlhNMszWzbWzcrlUi8mR1m5apyVayZYv3kdz5w/w43bN3jtTSWd9R2eff45jpx6mqOCcxfOyfLbqgH8 + tWIAf/0Rn33ziZSf8uGXn/H+F5/x+rvvcu2VW1y78TK379zk/v1X+OTje48M4KuXTrN+eik1lTlyXulM + Tgxy5uQhbr58kaeP7KGiNFc1gO0eGMBKOujwIA+ylaENqnOlzpWxtLeKyaEGeX4dzKwdYoXcy9HRbpat + WMr05g1sfmovm/bsZ+3WnazevIM1m2fLlRu2MbFuM52jE9R29NHQNaCawUOTa2ntH6WiqYOS2kYKKqpJ + yc1TI4B9QkJFy/mpUAzgwtIKKmsbHqG2sZX2rl4GRsZYvW4dG7ZuYXrjelZOrWJk2SjZhdk4eTjOpn82 + 10fbQBNNfU0ptdAx1EbHWBNd4fQ6RrqqAayYv7NQprVQUkTPGsBa3zGAZ8cCVjBr/M6av4pp960BrKFC + MYCthdf+WwNY8NAAdlCMvgcGsGK+uiljeIbbEJPsTkKaYgB7kZjurRrAxVUPDOB0nwcGsLuKiERPFaHC + S5V0wYoJrHwwrZjAShSwEk2qmL52sn8HT0McPAxnjV8PJeOWYgLr4+whpbuch0CJ5PUPtBQebY67rO/k + ooO9o2gRe41HsHHQFv2uRC4b4eljgZefpWwnvFt0ul+A9QPz14HQSCciY91ITgmgvDyVurocCoviSUsN + JSUlRDWBFQ4eGelFSlo4+YVJZGTHEhbuQ0iwol89VcTH+VNYkMDQYD1HDs3wjmLk/egmH7/7DJeemWbL + ZAUT7UkM1kYy2BDNaEcyq0aLWTtRybKlJXR1p1FTE0lbayIb19dz9qS05duaGGhWDGA/VrTHsHNpHk+N + 57GpO0H9IHB9gw8b690FzqxvdGSmxZnpDm/W9oYw2hZCeZ4zMRGKASzayl2JAtYXKB+ym2AvmtbBRcGs + CezmbYO76A4Fzp7KfxjK/xfKB+xKFjMreQ5mWNjrfs8AVtJ4K/97KAZwTJLo+UQvtVQQl+KjjhMdnehG + VKIrEfFynxMciBSOFS4cKCzWSkorolJtSMx1JKPUjdxqD/JqhbNWe5Nd4UdOTRiFdbFUtudS1VNF7WAT + jUu7aV85Qv/MJGNbp1i+cxNr9u1icud2hteupq2nm7LyMjU9YVJ8lDy7UMLDgvAN8MPLJ0A0WzAensFS + LwJxcg2QuhMo9TtA6r8vbv7hRCVnk1deT64gOb+MnIoGupeu5tCpizzz4iucef4VTj97k3PP3eXilTe5 + cfdDXnv7Y9799HO++ZViAP+Rv/zn3/nbfwmk/I9//oN//POf/OPv/+Bvf/kLf/rdb/ntL3/KT778kM8/ + eJWP3rnOp+++zE8+vskvPrnBz967xE/eOMc3N4/x4YXt3D6ynAvbuji6qoY9Y+XsW1bL6akOru0c5vrO + Tl7eWiH6NZvXJ2N4ezyU+8uEn0/489YyL+6Nuajpn6/3mvNCswEnFQO4QoOztbqcbzDimTo9ztRocb7R + kEtKVsRRXy6NBnJ2KIijA6Hs7glhjeiOoRIP6pJtyA8XXuulSZjLYsLctAmV+qQYwAFSD4I8TAlRzUEL + IkTfRvpYqqmgFUM4wt+acCVjX6gNURFWJERYkhptRb7o+lKpD7XJzrSluNCZ7ECncHHFAO5INKUjWTGA + 9WiOXiIceAHNUQtpj9dQDeCeJL1Z81cwmGZMf/osHqaBbknSp064YIVsUxKmmL/zBAvID1lEfqgWWcGa + ZAp3TgvWVdNAK6avghThvsnCfZP8NUj4dwaw70LivOcT57OAeN8F6jaZohcyFUNZNX81SAtaopZKdHBp + nMmsARxvSXmUiToGcJbw6EwfDTJ9NUQ/aKvI9Ncl02/W+E1XUjUrBrC/ttxvDcKFI/9PA9jwkQEcpRjA + so8wXy3CfDQJ9lwsz2OR+qG3agK7LiBEEOWpQZyskyDrxyul8Phk4fWpYcYkC8dPCDckRnRLhL++cCYT + IqXNjPCzJsLbihB3MwJdDPG21cHdRgMPOy28nPTxk7YkwNMcXzdjPJyNcbY3wNnREFtrbcyMl6gGsBIF + bKVmMTTH1cUWLw8n/Hzc8PF2xcPNQTi3LW4uVjJtgYuTsg89XO308HSYHdLvoQFcneLASJkPMw3+bK11 + Z5ei7SvM1f+nj9ea8XSNGQfKDdhdqMXW3EVszlogmK+awVtkemeehmr47ivW4ak8TYEyr6OmdT4l25+o + MeFouREHi/XYW6DN9uwlKGmXl0fPYSRkDstjfsAmWba7xIDtBbqsSXiCiYg5rIl9jM3xj7M7+QlOZmtw + RXTp3XrRwHWiuSo1VQP4UuYPeCn7cV6WaSUq+K0GfTUK+MMuM74YtuOzQTve7zbnToOObK/Ji5U6vFBj + xMkSLXak/JANsv8dsu+niozkHAzpC1lApTIOsJ3A4QmqfXVpi7RiNNub5WWh9OZ5URlvTqrfYiIdHyPS + fA7p9nOoCZ7LsmwTtteKru/25dZ0Eh/tK+ezo3W8u7+KV3eUcmNTMc9N5nBsMIkjfQk8PZjGgf4UDgxn + c3hlNUfXdbJjdRfLpD3uaK2lvbVFOOMqTh07x7WLt3j5xVvcuPwKL56/wvGjZ9m/5zD7ntrPhnUbmZwU + vTU9w5Fjxx8ZwF9+82O+/PpbA/iLL3/Eex98wit3XufytRuy3k1u3rrLrdsKbnNTcOPWKyqu31Q+SLzJ + leuy3g3hkTdvcPn6yxw/fYatu4TfTa9l7cw0O/c+JfPC9daupW9omJrGJqrqRcc0tQlfa6JYafMLqkhO + KxBtl60awMmpxTJf9B0UqqZvSrr8JuvNIl9dlp5bRkZeOWk5iukq04rR+tCcVYzXbMUYLiMlSxmDt4zU + zIrvQ1n2HTxMHf3f8fD3/24IP5x/eJyH+/jv66fmKeaxsk35I7NYWZ6eVSLnWUJWbinZeWXky3oFhZXC + haoFlRQ8QFFBJSVFVRQVVpCfX0J2dgEpyVnyLitjADtjrG+Bvo4xJobmWJpa4mBjh7+vr/TFcRTkZlNa + UijbZglXSqcgP42EuBC83G3wcDQj2MOG3PhAeoXPr+tvYoNgur2KFaLZx6qyGKpIZ7BcUJamlmM12axo + KmJ1WylTXTVM99SyqrOS5e3ljDYUMFCdTZes21WcwnBVNqtaypgSbbqxr5m9K4Y5tGaMHeMDTHY0qCZs + f00Z4231LO9qYby7lZH2JvpFL/bXVzHSXMt4e71wuHqWtdcK6ljWMYvxjnqWdjQKmlja3shIWwPDrXUM + yTaDzTXC4QRNDwxigWoWN1TQ31Au+y4TVDAgpRJ9PCgYqJPlNaWzqJXfBQOCMdnH8s5GVva3sby7iZ7a + Esoy4kmPCiA2wInoQOFXAcKvAuwI8rLGz3MWvj62+PvZ4SPw9rXB18+WACUiOMyN6GgvEhI8SUoWDpyk + DD3oQW5WAPnZIeRnib5PCCJC+K2Hqy0OtqY4Owl3DvAiIz2J4oIcNRLY2dH2gQGs8f9gACfSrxjAf/kg + nv/8LAt+VAbfNPLX10r4/EQsN9Z5cbzbkgNNVuypdWBHlR3rCyxZlqDLWIwO44KJaG02pZtIA+7KzcFA + 3lsVzo+2xPCzbeH8cnsgv9oRwE83e/HZlBtvjjlwo9eWF9scOFVpw45MI1bFaTMWq81IrA6DMZr0RWjQ + GbyIjiAhHMFLBItpE2LQokLmQzToks59UDr35Zm2rMqxZTrHmk05luzIMmNPpgn7k3U5nqbHS4Vm3K21 + 47UGG+42W3C7XdBjyfuTHvxmfwL/eq5w1gC+Ktd9Nou/7Q7nx8udud+ky/X8eVzNnMutHG3eLrfj7Wo3 + 6VS8eLnem6OldmzOM2VVlgHLsgxZnmPEcJoOnXGLaIldQG3MXCqj51ES8SSlkQsoiVxIkRCh3MAfkhv0 + QyEki6lJXExd4kIakhbSnaHJSJYW4xmLWZ2hwY5iA/ZVGHGo2pyjdebsk05yq9IpFunzVLkp+2tsONrk + xIE6OzblGTIev4jhBA0GU43oTDWjMdWKyhR7iuKVaF9HIRMWQhRFuEtnHuxlImTDkehgG9XkfWgA+wiZ + 9PUyktLokQEc4m9BWKCQyIBZRAZaEx1ko0b/RvmLiBARGOZjpprKyrjA4X5WBHuL0PuOAawYvP+bAfwQ + ji6KEWOMndOsEayIX0UEK1G/auSvu7EKxeBVxjBSzN7vGsBewXaPxjdSDGAnbzmOkGElBbSrwM3HXk21 + 5OHvItOOIrJtRIBbYGZtjKmFwazxq0ZF6mFmpf8o+vehAawQKDUK2NlCrsFSrslU5mfH/1VSPH/XAJ6d + f7DswbQSAaxs4/BvDGCH7xrA7hYE+syO/6s0Ht5KWmhZHh3qSkKUiP0IaSxEDCdHeZMW60t2UhCFWVE0 + VGYy0FXFxHAz40ONDPXU0CgNcGFODNnpYaSnBBMb7fngixPF2PIiItyV0GAn9etQX3mGPt6meMtz95Z7 + 7KWawA8NYBvVAFYifxUDODpIygAHERjWBCgRyg7GuNrq42ajg5cI1EDzuYSbPka67Ry6wjXZWWrPy0OR + vLcmnc/W5fHhZDb3+hK5XBfC2Tw3DsRbcDDWjNPZzlxuiORqTzrP9WazszKaoRhXSm11ydFbTLb2EjI0 + FpKy5AnSdJ8g02QeeTaLKHTSItdZiLyDFklWS0i01CRBEG+lRay1FjFyThGm84gwfoxo4zkkCHLMH6PK + 6Qk6fRczGq7PRJSBEE1D1iZZMZ1sz/IIc/o9damzmEue4Q/IspxHmvVC0qwWk2KxREoRCFIvkqXeJBpr + kmGqS7HUpXo3a1q97KiV+1IoJDpDziHJfImsJwLHXIsMQbqZiBXLJWRaLyLXcQnZTovIcllAroiFAhEY + ZSJGGsPNaIowE9FlQVOMJVXRFhSGmpAWaEi8vwEh3gZSV+SeO+lhb6eDhYXG/4cBrPOtASzlbPSvEWYW + xphZGmNuIXVchIKDwSK8deYTpvk4qTpPUib3rSfQgnVpzpyr8+daoxevd/vw6fIgvl7lyR+2+fFfh4P4 + 59Ne/J/n3eAFG/510Zj/vGjAf76ozz9e0OfvFwz5y/NG/OF5Y373vAm/ft6cnz9nw6fHLLi305CLqxZz + fHAB+zo12NSkzWSZNr05elQkGJMSbEKYu9RDe10RJYtwdV4s9VIPP18T/PzM8fCU91FEkRq9q6SclzYn + TBlUPzNShTKOWGpKiNRrazw9LfCSdkmJAlbG/lWif9UU0CKgHB31sJE6Zm+vL++3sToWcFCQq+zLg4gI + Be6EyvsXKHU/KEQ67lAnwsOciYlSouk9SU/yJyvJj8x4H9Jj3EiJcCAtwlaIga06zmlmpHS08uwUwZgR + aUFplivVRZ6UF7hSlOtIbroNMSJifV1+KOJuDn5Oj5EkfWBptiVNFS6zqHSiW4m2bXSnX4RXf4kJ3dna + dKYtpDdjEUPZWqyQZasrLFlf78TWVnd2dHiyqdGJqUpLVpUas1bE2tYW6cPb5fdGOzZUW7KpRonQlbLK + nA3lso70L1OFeuyqt2NPowubK6wYT9ekNfwHNEc+TmfSAjmeBgO5OiyrsGCy3oGJGgeWVToyWmbH0lJb + Jsps5DxsWS98YXebG8f6Azk3FsHzE3G8uCqVl9ZmcWkmn9f2tXL/6SGu7GhmZ18cG1qDmG70UVPrHRmO + Y193KFtEKG0ss2ZHjSOHWrxV7K1zZ2OxDTOFVqwvtGF9kS0biuxlmSMbS53YVObKhgpBuSur8h0Yy7Jk + LNuKpbk2jOXZMJJnzUiuiLUCOd9ieyakfZqQ/nyizJbl5bZMVtqzps6Rdc0uzDS5sK7FnekGH9a3BLGp + I5qNXYnMdKYx2ZoqRDeF3spEmvOiqE4LlXobRGmsH8WRngJ3iqLkWUe70hXrzrJkL6az/NiW7ysC15ND + Bc4cE5wqEC5UYMOpQgvOlljzjNy/Z+VcnhGcE450rtyGF+SZ32hw4e1uP74eDeHXKyL4zYowfjHqw9c9 + DnzWZsGX7ZZ83mrJe1VGvFVkyL1CY14rMuZuoRGvCJ+4VabP7QoDXpff3yg3lN9kPlebG5mLuS716Fbm + Im7naPBWmSGfCOf4vNGCL0RIf15ryJeV+nxVpsuPROD/rMKQXwkf+a0I/z82WPGrZjs+kPKq/HY4ZT7r + wuawKuox4WM6HGxwUCMa9rW7Sp1zZnmxJS2J2nJvlpATqSPviBHZ8dYUJNlTkmArXMmY6mBNBhP02CLP + +HxvIHdWxksZwMYCU7rD54nY/iFFnvPI99Emy9eANH9lPC0rkkItSQy3IDHMnMQQk39vACvHird5NP5v + VohsG2hEkiBZ2ptseV8rEp3pLwqhN9ef1mQnOqTtHQ8zZEOEIbsijTgYacDpWEPORelzVs71hM9CTovQ + PxugKeVCmZ/PSe9ZA/hCyEIuSx94M1qPG3K9VwKXcEnWv+a/UDV8FQP4Lel7lPGAFRNYMYWV5Y8M4BBd + bofqczNQT7bR4pLfbBTwC48M4Pn/wwB+Rfq0V70X8Yb3Yt7yWcybXkvU9M/3fXW576enpn5+3VuLG67z + ueYyjytSXlLwHQP4trcGb/jr8L4c+4NQXd4V7v1eyBI+jtLhk1g9Po7T5aMEHT5LM+DzDEM+T9VVDeAv + 4zT4Kkabz+Nku3gD3kg0lHrlyAvFERwrSWZfeSa7m0rY0dfIjhUDbF+3nNUrRijOzxGh6o2NpaVwJht8 + fAOJik0UYZwroriQ6LgEaXtD8fTxxs3TA09vL3z9/QkJCyEmLpaioiLq6+vV6KPCwkLS09NFWCVIGx4m + fYUfrq6u0r7bS19hJ/PKRz1xZGVnkJObRVJKguw/kvyiLFasGuXMs8e4dPW8Gg28d88mDuxXzN793zGA + lXGAv28Av6AawMvYu7qNLaNVrB8pZf1oMevGilk7WsrkaDmTYzVMTbazfs0AG9YMs27l8AMDuOeRAaxE + /I4MdjPU38lgb7tajsrvE8o4wSO9agro7xrAKbEhlOSm0N300ABuYrizlp7mMtpEuLfVFNBVX0JrTSF1 + pbMpoB8awOV5aTRUFNPT183E1q2M7j9My1OHKd9+iPwth0mf2kv68l0Ur9pJ28xOVuzYzcZt21i3aoUq + zmsLM8lLiiUt7vsGcGJkmPDUMKIC/UUPeIv2EK4aFT5rACtfUPe1sXKonemlner4v5tWdLNxovOBAdzK + 6mXdbN26lrPPn+LOO/e49uEH7L79GmPPXaXrOwbwwJX36b3yEc3P3afy2E1yNp8h738xgG+99jLnzx9j + 48wy+tpr1PGRextLWTnQysbl/az/jgG8bkU/29ZPsH/Peo4+vZvDxw+wbssW2ofHqRtYTs+6p1h97CJj + hy7QvOUEVeuOUDkl9231HurknvVuPcLUkXMcvHiVU1evcvz8WXbt3sq61eMsG+6ir7OB+qoC6fuTSIyd + FfjZaVF0tlawcvkAU2vGWbtmgtVrVrB6aqXc842ce+4ct+7e5vV33uL2vdd5/tKLnHjmjIrnX3qee2/d + nTWAf/I5n379CV/85Eu+/Pk3alrUL3/+C9797HPZ7k1u3bnL3dfu8Nb9O3zy8et8+t8M4LrqfCqknkxO + DKkG8O0bL3H6xEEqS/O/bwB7C/8P9iAzJZz6yiypazm012dJvStgtL+WtSulvo53MTTSxdKJUdZunGHz + U3sE+1izeTsrN25Tx/ud2rqL6W17WL15J92jK6ho7qS8sZ36zn6GJqfUtND1Xf0UVNaSlldETGo6kckp + BEZG4eEXqEYARyUkqemfq+ubHqG+uZWOnn4Gx5ayZt0Mm7ZtYXrTBiZWr6BnqJfUrBRsnW3QN9VToaG3 + hCU6i9HU00BLXxMdQw10jbTRUfA9A1jBdw3g2Sjg/zcD+PtjAP9/GcCOSjpmxQT2MlCjgKOT3IlP9Zo1 + gDN8yCmW96s2gYKyqAcGsDvhie5EJnoQlexJZJIXobFuahpo/3BlbNnZIZMUPa18VO0omt/JU/S1jwku + Xia4ehtLaaialk6iMxTzWTm+Ak9fU3XcX4VLu3vIdi466vi/yti/D2Ej1zebuvqBAexriU/AbORvgGj1 + 4HBHwiKd1ejfmHhPUlKDqKhIkzY8h+LiBOHvEWRkRJAs+lZNAS16Nz0jktKyNPLyE4mJ9iMqwodYFfKb + 8PzKshTGhus4vH819994hh99foUP3jzJi6dWs2lZCUub4+iviqC/LpqxjlSmx8qYXlHL8rFSOmS+siKE + 5sZY1k3VcuLoCDs31UsboRjAAYy3xLB1NJcdY7nMdMSxssaPVVXurK10ZqrKgRnh2etb3Vjf7c/MYAQr + eqOpL/OW99sUTy8NXDx1HtzP2f8z7EXT2znNwtHVQu6TFa5eFirsXYywUXSNaB/lPwwnT3N12spBH1Mb + LdUIVkx7Zy8z9T+PoEjXB+avL3EpviSmB5CcGUhSRoAaHZ6QrkSLi1ZJcyUhw4XYNEd5jxyITbcnPtuB + 1CJXcis9ya/2VE3grDI3Moo9yakIpKgmmlLhuEXN2ZS0FVPZU03dUBONI620SPvduqyHzslhuifHaBno + paapjsLiPHJz0khJjpZnF0JIiB8eXu64unvg5uGLm7u/agC7uAfh4hYoddsfWxdfXHyCCY5LJq2gnMzi + SuIy8kktqKC1fynb95/k8MmLghc5duISp85e5/yFu1y5fp9XXn+Xdz/5jJ/8+pf87u9/5G//9R/8x//5 + B//41z/4p+Bf//oX/+e//sV//lOW/+UP/Pn3v+SXP/mUrz69xyfv3eDzD27w8y9u86vPb/Gz9y/z4zfO + 85O7Z/jiygHePDnDlT0jHF3TwO6xckEFx1c1cXVnPy/v7ODKxjKurUnn1tJwXh0O4NURH14f9ebVUVdu + Dzvwcq8FlztNeL5BnxMPDODTNTo8U6urpoN+umwxJyq1eL7disuDHrw4EsCzo6GcHInk4GC06I0wJqoD + aEl3ojDcnFgPDYIc5hPsokmwu+6sASzvrWIAB3maqUOyhYuuVQxgJegjWt7xGOX/ulA74sLtSIiyIS3G + lpw4O4oTHahMdqY+1Zn2FCe6khzoTrQVWMm0OZ3JJrQnGtASo0lTxCI1ErgzXoueZD36UgzUyF8Fg+km + /9MATtSlLk6TiogFqgFcFDyPwtAFFCoGsBKpG7CYNOGqqQFawr+1SJZpBUmyfNboXTKL/2YAx/suJNZ7 + PjFec6Wcp5rF6cKX00M0BJpqmRq0RDWBlTGCS2JNRJOZURlnQZloizxlaKUAbTL9tKTUITtAbxaB+mRK + qYz9m64gQJdUxQD21iTSbcHsGMAes2MA/08DWHvWAPbRIkS4dqCsH+C6QMoHEcACxQCOdF9CjPDqGNmn + UiYIj09VxgSOsSAz1oykSBMi5ByCvLXlWRqomRWDPMxlH2b4ORvhZaeDk/ki7EzmYmc2H2fpc9wd9PBW + /vtwNMRN4GgvfYe9PtaW0tc8MoCV/x+NcXK0xt3NXvpuF9VE8Pf3VI1gXx9nfHwc8Pa0Vc1jO+mz7C2k + zbJWMs3JeUhflOgv9zHRjkFpF6brfNlc7cqOKlueqrDgSK0Fx+stOCUa8GiNKftK9dieu5hNmfPZnDmP + 7XmL2ZmvwZ4i0YOl+mp6530FWqKBNTlQosNR0ZOnqk04UWXMEdGeB0v02Vuoy9ZsDdYmzWM8cg59AXNY + Gv04m/N02FNpqv4/viZ5PhPRj7E27nE2xv+QnYlPcDxzCZdFm96uN+G1OiPuyrt1vWA+LykGsOBqzhPc + LF7IG3X63G824v0OMz4dtOVzeVc/7Lfm9VYjrtfrc7XemEsN5pyp0GdP1kJ2Cg6VGfN0vT17K+0Yj9em + zv0HFDvMocjxcark2bdGWTKW6y39QjgjZQE0ZdqrHyHEe/yQGOs5ZDs/RlP4QlbkmbKtyp59TU68uDSE + N7dk8c6uIu5syual1SmcHo1lV3MAm6q92Nbgz57OKHZ1xbKtM57NPZms7ytioquElppcSooyqaooY/Xk + Gs6dfp6bV+5w/dIr3Lz8ChfPX+bYoZPs2bWPp3buYWZqPRMTk2oU8JFjT38bAfyjH38vAlgxgN99/2Nu + Cee+dFWJAL4u069yW7jjrTuKAayYv7e4fkuJ/r3Oyzeuc+XGy9IWX5XyGi9dvcTBY4dQsq0MjA4JBtUP + 71asmaR/ZFC4WRNZ+Xlk5uaJ5iolr6iMfGnvc/IrSEnLJz4xW03vnJEl/UBOJUqq5Izs2TTJWbmz0bJp + mcVq9G9aZpHMy7qyPFO2z8qX/RRWkVdcp6aEzpUyp6DmUZRueu7DyNvqb6N/FSim7Hfw0LB9iPQHUMxk + FQ8ieZX9Ptz3Q3zXFH44rc7nlJGapxi/yvZyvnnKuoo5XDp7Dd81gKXfUwzgouIqFYoJrKBYUCLzxUUV + onPLyM0tIiM9l+CgSNxcvLG1dMTc1ApLMytsrWxxcXQiODCQjLRUSouF25cXyvaKESz9udSdtORIgv2c + CfSyJTLQmaK0CPrqCljZVctKxfxtLmG8Jp+hygwGK9IZKE+nvzxNLYerM1lan8fypkJZt5zVXbJ+RwXL + WksZqsuntyqTjtJU2gsSZf0MJptKmWqbNYAPTy3jxKbVHFw7wbrBDvqqSxhsqGCVaMOpkR5WKZq3t0N4 + WiNLO5uY7GllzUAHU6J/pwbamB5Uylmslem1g12sGepm1UAXk6KZV/R3sFz087LeNsZlWwVLu5oFTYzJ + /sZEg4121IuOrWOkrY7Rttpv0VrLcIuCGhVDghFZPi7bTvS2MinHHJXtW0XD5aVGEh8m3NrHjhBfGwJ9 + rAlQ/lt2t8DDzRxPDym9LPH2s8HL3w5vgU+gvfBgV0LDPYiM8SYuwZuEVA+SUlwF7qSn+Qj/DSI7M5Tk + RNGHoR54uFqrBrDyAU9wkA9ZGSkUF+YKx4rH1dkeA33t2TTQOgq+Hf/3/9oA/uP9OP7+QTr/+rQIPqnh + DzfzeO9QGC8sd+BgizF76i3ZVePAjgp7ZvIsmIjXnTV/Y7RZEaPF1ixTTte7cnMokLcnQ/hiYyQ/3hLK + L3eF8Js9wfxiVwBfbvLm/goXbvTbqQbw8XIrtqTpSQO/kH4lzXO4kvJZifBdSHvgQjqCFtEhnXu7oDVI + i6ZATZoVEzhYgzbp3HtjjViaZslklg1TOdasz7Jis5CQ7SmG7E7Q4ViqARcKLLhRbc+tGhuuN1hyrdmM + a21mvLXMlR9tD+evJzLgglzzpVI4ncnfdobzs0lX3msz5NXyJdwuXMKr0tm8U2HHOzVuvF7vxbUGH54u + d2JzgSUrso0ZyzRkXMrhNH26EjVpUczdmHmUhD9JXvAPhXRIGTKP3KB5QjweJ9P/BxSFz6Usep4Qk3nU + JsyjJ0uTpbnarC3QZpsy7q/c7zMttpxqseaYdERPlRswJZ3QiowFrCnQYUOVBdvq7dhRa8+GYgvG03QZ + VL7MSzWiLcWMulRrypMdKEhwJC3KnggRbIFeItw8DNW0zzFhsizIGn9vEzX9s7eHgWoAe0qpTPsKqVR+ + C5btQv0tCVdSQSsIFCimsGL8+pqpiJTf44JtiBVxF+Fvo6ac8ZOKP2sAmwjxUMb/nTWAXZy/bwArxrCr + rOcm67vJS+PoajIbBewkgtjJAAcRQwoc3WQfQnLdhNi6+yrmr5ImyRoPOZ5noC0BkS74hDni6meFo5Bg + BxUinrytVCgGsIc0dD5B7iqc3OywcbTA3MYEM0tDTMyVqF99mTbA3MoACysjLAVW1kppqBrAtraKkS1i + 7ZEBrJi/et9L9ayavdZ6OChETK7bRa7Pzc0Cd3dLuU65vodjANuIwJdSgZNiADsa4e6ipHu2kGdkLZht + RDxley8XU2LD3UmO9iYl2kuN/k0RQZwqpWIC56QEU1OSQnNNDq11eTRJWV+ZSWl+PLlKHnn5PTUxgJhI + D2lMXERMexAe4UZwsKOa/jlAhLliqPnJs/QW4e/jI6XUFS8RFMrYwcoYwMF+8myDnIkJdpFn7UhsoB1R + Ik5D3I3xc9TF01YTT5uF+FrOJcj0B4QbCuGxncNIrCbHG115d00KP91ZzK93V/KzTcV8tSqXt3pieLnS + lxfyXLiY68rVcn9ut8VzvS+Ls10ZzBSH0BRmS4a1JvFaT5KwaB5x858kduEPSdJ5kkyzhRQ4aFMiYrjA + VZ9sJyHtttokKsavEOBoKSNFMIeqpvR8/E1+SIDRYwQZPka0nGO67VzynRZQ6raYCvdFVHgups5HhwZ/ + Q+q8Dah00iZXtksRwp1kKaJEECvHjDVbTLyFDolSXxLMpDTWIkNIdrE00PXudjR52VHlZkaeCPVky8XE + mswnzliEjMkiko0FUubYaVPorEu+swaZdvNIc5DrcVYi2+SavJeoJnB1sAENUWY0xFtSJSKhUARCeogI + jyAjeedEHPia4OOh1DFDtQ5amks9NNdRYSnno0KJZJfS1EwPE9NZ89fE3BBTS2MVZtZmUt9N1XVsRSy4 + GizGT/dJovQeJ9dmEd1hlmwr9OVlIaHvDUbx1fIYfjoVw8+ng/j1Bj/+tMOPvx3w4j9Pu/Bf56z413lz + /uu8Gf/1vDn/fN6Mv5w34Q/njPnNORN+ftaUr06a8cFhC17dZs4Lk/rs71zA2sonGC1ZQGf+EurT5NqF + XGeFGhDrY0igCB93O8UAXqwawJ6eeiJYTPCV9kcxgF2kbXByMsRV7reHpyVBQU7EyDsRJR2rMoZYlLwv + yhdXvtIB+/pZq6avj7QfPlKnFUPYVdobBxFRDw1gFxFTigGsfKEVHOxKSKgbQcHO6rjAvv6O+Ac4ECgd + eJASBR/iSFSEK4lyjNRYQZS8o+FOJIXakBJuRVqkFenKGKORZqoBnBJiLO2xHfWF3jSU+VJf6kVDhRd1 + Je7kJJuhRP2Gej1BmNfjpIvoLs02l/UcaBTUFlnTLH1Qb60zg7UODFWYM1BoSLcInu506TszNVhWbMzK + CiumpJ+eqXMUoeYg0zasLjNjssSI1aoBbK8awNuapN+otlAN4E1K5G+5MdMivFblazNVoMteEScH29zZ + WWvHqhzpWxLnMZCykCHF/M1YQr8cd1SOv6LaipWyzup6Z9Y0ODNV78L6Rhc5jhtPdXpydMCP02OhPLs0 + nHOjYTy3LIaX1qRydSabV3dVcW9/My9vq2T/YDQ7uoLZ0RHAvr5Qjg5Hs78rkM0ilNZJ/7az1on9TV7s + a/Rkd62bagCvK7JiXaENM0W2AuElxQ5sKHFifZkr68tdmSl1ZWW+PUuzrdXo3/E8O0bzrBnOtmQoy5KR + XBuWFj40gO1ZXmrL8jJrJitsWVtnz/pmJzY0OzPT6sK0HHd9i4iyjgg2d8axoTOJNa1JTDQkMFwZT0d+ + pNTdEGqkzlXGelMe6Ual9ElVkU40RTrSH+3MZLI7m7N92F/gw/Eid84WOnJezv9ioRUXi8x4scSUSyKo + L1VZ8pI8kwvyfC7WyHtSbcrVOjPuNFnxbpcj3wx58LsJP/48GcAfx9z5VZ8NP+u04Oft5nzZZMIH5fq8 + ma/P63lK9K+I4QIjbsqzui684qb8ppjAt0v0uKmky8pawksp83gxeS6X0uZxPVf4jqzzQaMFn7RY8mmT + COQGIz6vEVQa8FWlIT+uNOJnlSb8qtqM3zZY8wupU+/VW3FFEfdJc1kbPIeV4XNYL/XkKbmOw+0u7GqQ + 51RpzmiOHs3Cj0qjF4s41pB3Q4+8OEtK4m2piremOsKQFnkPJpMMOFhszcsdftwfjeBis9QnuZ4VMYvp + EX7YIHywxE+XbB8D0qUtzIiwFZ5jK++gNSkRVvL+Wci7aCLzpqQ9MoDNyI2zmjWAoy3JkXUyg+W9lPY+ + OdBI2lZz8iPlHJJdGJK+Z6jAn550JwbjLFgj57UjTI+9EXocFVF/LtaAF+IMOR+mzRm/hTzjv4RnAjTV + 6ZM+8znlPZez/vN4Ts71Urgm1yK0uSLXdSlgMZf8F/GylHdCtLkn+3wj4t8ZwEoUsCZ3gnV5RXAzQJdr + frIPfx3ZXoeLflo867OYU+7zOO2mGMALuKIawBrclfO456vBm76a3FehpZq/b8n9etNPj9elj7slfd5V + p3lcdZnHZWd5/oKXFDPYbQEveyzipmoCL+HNQG3uy3m8Jdf3dvAS3g/X4qNoHT6M0eXjRH0+TzPiywwT + vhCurRjAX8Rq8HmUJp/JOu/F6fJqgh5XU614JieAo0Vx7C9LY09DIdtFYG4e6WD98kEmRPDlZaXh5eEm + 4tUEU1NzXD18CI2MJSk9i+SMHPyDw/D08cXF3Q1HF2fsHR1wcHLC3dOD4NAQ0tMz1DF+S0pKVPM3JiaG + kJAQae+9hbM5C3+zwtjYGBMThYs6EhGhpBhNID4+luCQQBFmXsQnR9M/1Mnhp/fy7PMnOXhoJ5s3r2Lb + ttWcPbuH8+f38IxiAJ9VDOBNPHt2I8+d3cALZzZw4fg6Tu9axp7V7WwerWVmsIzpYRG8glVD5SxXMFLD + zOpedm9dyVPb17J1/QrWTMj1KwawkuZ5dICx4W4G+zro726jr6uFARGwI0NdavTvuKw32t/OQPcDAzgh + nJSYWQO4o7Gc4W7FAG5hRMr+tiq6GkvpqC8WlNAk69eWZKnj/84awKlq5HB9RSHdvZ0s27aF8aPH6Th4 + ksqnjlO86yTZG46QtXofZdN7aVu/SzWAN2zdyrqVyxlub6SmIIPcpBhSVQM4bNYADg1Wzd8kQXSgv+gO + HyJ9fR4ZwL2qAayI6FbWjrSxflkHG5ZJOd7K9FIR+WOKAdzF9m2KAXySV955nSsfvs+u268x+tw1Ok5d + ov3UNbrOv0r/lQ/oufoxTc+9TcXRWQM4d+ogtZsOMXrgFFufeU41gG+/c4+7b97kwoXjbNk0yaDUPSUt + dm9DKSt6W5gZ72VmuWIA9zE1MQtlHOJ1a0eZnlmujmE7tHScus4BqnqX0Tm1i5XHLrLy9HUGj16hdc8F + 6rY/Q9XGp2nYfIx+uXfrjj/PwZeucebl65y6cI4D+3awZXoFq5f2MdrdTFNlPsVZcSRH+RMd4kF+ejQ9 + rZWsmRxi/bpJ1skxp9aukmOvYdP2LZw5f041ft/6+H3uvvMWF65d5vRz51RcvHKRN+6/yhdff8TXP/6U + z776hC9++hXf/Ppn/PT3v+Mnv/sjn/zoZ7z1wSdyH97i1Tde46237/Lxx6/xyce3ef+9l3n52mlmpkao + LMuiKD+VZWN9nDp+kDs3L3H21GGqyvJFj9hjr6SRVA1ge8LlvLPSI6kTrVFXniJ1K07qUzJdrUVMjLUx + NtrO0GgXYxMjrNkww7a9ewQPDOD1W1i5YQsz22XZvsOs37lXTfmsjPmbUVxBWX0bwyumWLpmHS29Q+RX + 1BCXlkVQdKxqAidn5xESE4d3UCixKWkUV9ZQ09hCTVOrWtY3t9H+wABeOb1O7qHU2y2bWDq5jMb2JuKS + Y7GwM1cNXiXSV0N3ySweGMDa+hroGGjNmsDfM3+1v2MA62BgqauawIaK+atEAitmsGr6PoTGrAEsGkaB + qa2GCkt7JfpXMX9FAwqHVc1e0TEPoX78rCxzES0psHfVFQ08m5LZK8CMiHhXIhPdiUnxIikrgNyyKCob + UyiqiiMh00c1faNSPOVeect9k3cwSRkH2A3/sFnzV4n+VaAMpaR8NO0ims9VSjeFV8tyD2Xey3j2mK56 + OIu+cnoADy/hyN5maiYdLyXblpyfnYMWtvaaj2Bjr/UdA9gcL9mnX5ANIRFORMbIeSf4EJfoI22uH0mp + ARQUxtHcWkhHVznVNZnk5sWRkxOjjgWspICOi/WjoCCemuosSouTSUkMJCnOnxQVvmq0RGN1OhOjdezf + Pc7dG4f48P4Z3rh1gPPHJpgZK2C4Qd6xqjD6aqMYa01lerScdSvqWDZUTFN9PBWlwbS3JLJhXQNHDw6x + eaaOjroIWssCGWmMZcNQLluGs5lqjWG8zItlJcLpShxYVW7PxhZ3NnX6sqkvhPVDMazsi6W9LpjsNHsC + g+SZ+Rng7iPvjug1BzdDeeYmjwxgJQrYWbS+s4cFTu5m2DoZSP3QxUb5/8Nd9ImbrCsaTzGAze201N/s + 3YzkWcn9D7QmUO6pkvo5Mn42Ajgh3Z/kzIcmsC+JGV4kZLiTlOkm740biZnOKpKynUnOdSK9yI3scnmX + y90ErvL+ucoyd7JKfCmoCKOwOob82kQKGjIoacmnrL2Q0rYiytqKKW0vpbyziuquesoaqyipLCQ/X/qF + nBRSU6KIjg0iOMxHrt8DN0831QR2dfeW/j1A+vIAqU9+2Ln4YOvqg7N3AP5RUn+z8+W8iohNz5NzLKG8 + oYOV63awccdhtuw6yo6nTrH/0HMcO3GZc8/f5NK1O7z1/of8/De/4i///Cv/8S/FAP47//yX4L/+zv/5 + 13+B4F//+Q/+8dc/8Nc//pLf/eoLvv78DT59/wbffHyT3/30Hr/96hV+/M6LfP3aOX5x7zw/eeUUn7y4 + l9dPruP5nQMcXl3PrpESDo5XcGFDK1e2NHNlppRLK5K4PBDI9T4vgRu3Bly50e/ItV5bXuow5UKzIedq + dTleuYTjFUs4Wa3NiSpNjpUv4XDxAo6ULuZcixkv9Lnw/LCvagCfGo3i0EC08KQI1tSH0JnlToloylg3 + LQLtFhDkrEGQu45qACsBHco4wCHyLoZ5mRPhZUGUjyUx/hbEBVmTEGJLYrgdKVEOpMc6kBvvSHGiM+Wp + LtSmudGU5kJnihM9SQ70JdkJbOlNtqRLNGlHohGtsbq0Cqdri9WiJ1GPvlRD+hXzN91YxWCmqWhCExXf + GsA61MdpzBrAofMoDZlPcdhCikMXUxCijLm7gGSfhST7LiFZeGuS72ISBUqErwrhtir8FpGoQPinUsb5 + LiDGax6R7j8kVspE4dEpivEr/DotXBCqQarw1BRZrqSHLoo2ojTOlJJoY4rCDcgN1iEzQNZTDOBAXfJC + jcgPMyE3xJCsYH3RA4ZkBOmTHqgvukBHzkFLjrOESOHDMVLGCJ9+aAAnynsdG6BDtOwrUtYL89YkxHMR + /s5z8XWaS4CLPCf3hYR6LibcYzGRnor5q0G012yZGKhHZqwFBcl25KUo2sWccH9d/Nw18HXVwc/VEF9n + I3wU81fefTdrLZwsF2NvtgB7i4UyvQRH6WOcrHVxspU22k5fNYDtbHSxMNfEzORbA9jKRtoRRytcXR3w + 9nLFX/iuYgAHBngSFOxJaJjM+zni5GCIpelCrIwX4GCugaedLoFOenLtcu9CjWlKsWKswJ6VeRZsEM26 + u9yCI3UWnGi05GyzLaebrDks+nBH7mLWK5GzqU+wO1+D/SXKcIb6HKlQhjLU41CJtug7bY6UyXuhGsDG + nKwy5liFEUfKjdhbZMCWLC1Wxs9jRLRkb9AclsY+yZYiIw412rNXdOX6bB3VBJ4RbBbduTt5ASeyNblc + ZcLtRjNeqzPmbqUONwoWcjnzcTUK+Gr2D3k5fz6vVosWajTknQ4zPuy15lPFAB6y523R0q91WXOzzZor + LTacqzHlcJEOh8sNeabFked7fDjR7s1UlinNfk9S4jiHYqcfUO6lpEk3oS/DWfqGAMYqg2jLd6Eo0ZgU + 33kkOMyh1PdJebf0mCqyZFuVLfvkOp4b8OXOVByvb0jjyqpYTg8F81STO6sLLBmTd2s824LVJS6sr/dn + pjGU1Q0xjFTF0lYaK/wxiuyMOOpqK4TXbuHqS9d5/fYb3LhyS8XF5y7z9OFT7NtzgD279zGzbgPLl69U + DeCjx57m+o2bfKJ8OPOTnwl+wY9+/DO+/uanfP7FN9x/+31uvvIqV67dVHHj1m2Zf0U1gF+5K+VtOcat + G1y/eV2W3+T6Kze4ev2ytMUv8dzF59i6a4twr0FqGqqpqC4TPlZHk/CuhtYGSqvKScvKJDk1jfTMbPUD + 39zCMnLyFZNVSelcQn5RLaUVzbJtB5U1nYI2mW6VspWyihaKShooLK6nuKyBkvJGigUlFU0qyqqaqarr + oqa+h2pBVU0H5VUdlFW2C9pkv22ynqC89VvIsb6L4rKmWZTP4uHy0sqW/4bWWcg5PVymbi/bFMn2RUop + yC9RzOhqsgorySqoJDtfSiUaOEdJV108e905xWTmlpCdV0peQblwojIKi8q/h6KiCoqEHxcp84Vyn/KL + yc7KJyI8Dj+fIFydPXGwd8LBzhE3Vw8CfP2IiYomPzeHyvIi4U8l1EgfXVsl05UFlBamk50aRWZyKAXp + UTSUpTPUXMZERzXjLWUsbShgtCaXgcoMBioy6KtIF6SpaZ0HhPcP1mQzUpfLaGMhS5uLGGsqEq5UwKBq + AGfTVZpOe2Ey/eWZTDaVMdVRw4b+Zg5PT3By6zRHNqxis2iiEdGFE6Jrt0yOskt00rplg6wc6hF0iy7s + Z5PMb10xwq5VY+xZM87eteOitcd5SoFM7147wU7BlskxNsl6m2U/m2R6w4ph1i8fYnrZgGivXlaP9rBK + sGaslzVy3NVSrhzpYnKwg+X9bYyLHlwuGnvFYCcrBjqYkGXLBMo2k8NdLBXtOtBWS1N1IcW5ScI9g4gI + ciPAywZ/b2vRRVb4eFni6W6u/iftrvha0h+7+9rg4Wcr3N0e70AH/EJdCQpzJyxKeHqcJ3HC1ZPSPElM + 8SA5xZu09ADSM4JISgwiLNQdZydz7G1NcHe1JzTE93sGsJurI8aGehjq66gwEOjpaD0ygf8d/ocB/LtX + Y/njvUT++kYGf7+Xzy8upvHaTl9ODZqyu06XXbUW7FTG4iuzZybHnMkEPSbjdJgUUrAqTpPtOSacaXTh + xpA/9yYC+HAqiC82BvKL3aH89kAEvzoQylc7/Lm/xp0bgw5cbHcQAmTJxlQdRsLm0h34BJ1BT9ARNJe2 + wHm0BSygI3AxXaG6dITp0xKkQ2OAFk1BmjQGLaElTIvuaANGkkxZkWHFVLYN0xkWzCQZsjFel+2Cw6nG + nC+QhrzSgWvVtlyqteSidAovNhpxd9iRD9f6yvlF8c8T6fyfc7n855Ek/rA5iJ9MOPN+uzFv1urwermg + zIi3K2y5X+3C3ToPLjd4S0flzMYCK8YzjRlK12csw5iRNEP167i2RC1qY4XshD9JdtAPyQ58UsjGPLLl + mjKl08j0f5ysgMeEkDxBWcwT1CY+yUCe3McSPXZKh/N0izUv9DpzfcSTlwadONVmzk7pKCfSn6Q74TH6 + MheyrMyYVeq4jvasU8YuzLNUSVlniglNyRZUJVtTFG9LdqwdSeHWhPmZEuhjKpXUmBA/c6KEFCqRvUq6 + Z8X4fQgPD32pvIohbISfkMpAPzN1/VARnQ8R7GtCsI+xilDZb2yIkMwwO3Vc4MhAW0J9rfH3lJfAxUw1 + gJ0dlD/dFMP3W3xrAJvJMa3wVKL0lGhdZXwcJ0NshfDY2IvwlWkVitHjIS+UrOMhL5O7n82jFEkeAXJM + ET8B0e64ybRi/tp7WqhwkJdRgWIAe/q74B8qREfIjrO7vRzDAktbU8ytjDAzN1AjIRXjV4GVtckDGGFt + YywEykCErbEIYRHMbla4KOmbhCxZq6meZw1gJcpXgWLwusnLrxhJimEUHOJCUJALnnKdyr1QTF87axH3 + doYqnO2McJF9ezgrUdMi6gSK+eulfEHirEQAWxAT4qoav2mxPqTFKZGGUkZ7kRbjTXZiABX5CVTkxQsp + iCYvPZzctDBp1IPJTAqSRsqP2EgPwtVoX3tCpAwMclANMV8/ZcxTCyGDFgQEKOOoKuaawMdMGjOlvpgT + IGIi1M9Ojf6NEyQE25MQYEmstxHhbroEOS7Gz3Ye/jY/JNhqDuFmc4g3nUOl22NMZ+rxUp8vP96ey1+P + VPH3I7X8YVcZv91YxKdD8dyrD+BOhQ/3akN4qzWWt/oyuDOcz5mudFbl+1MRbEaSnQaR2kpq4nnELJhL + vMZ8UgwWkiP3vlTqRZnUmSI3Y3Kdhbjb65AoRDnKQoNwKUNstQiwXoKfzSK8LefjYfI4HsaPE2gxlwjb + hUTaLCTGRkSFzVxi5BriZDrBfjGpDlqkidhWxhCOF8RaC3E3FzJvNI9wk0UyrUWcuZ5cp4gBYxEVFgaU + OljS4OFAvacd5fLsch10SbBYQLTJk8Qai1gxWSDrzifZRNoGF0Oqfc0ocdMh22YeqbY/JN1xLjluC1QT + OMddhJO/NjVRJtTEW1AeY0Z+pBFpIlTig4yIChTB52+qvqOuIhDUlONms2P+qjDXV2FpoS9iQA9TM31M + TPXU1M9K9K+JlbEKMxsLLKzlPZBlNrKeg4kG7kYiXgzmyDnNoyPKij2VIbw5ksrP1mTxh0058uxS+NX6 + aH68xpefTHnyux3u/OWQPX992oL/OGnJP09b85/n7Pjns/b88Ywlvzplxk9OGPP5MWlTnzLi6ow+55cb + sadNm8nCubQmPUZpgrSVcQtIjVgk4kpT6pY2oS46+Njr4mang6u9hlynhrQVuvgobZbcO0+5dnd3uX55 + 9kpH6yVtSIBi0AZJ/VZSm4e5EhohHW3obH33l7ZBqfN+/jbqeMHK+krKZyWC2E7aGidlHG7puH18lPHN + nAiQd1aBMu0b4IiPv3Tc8h74+9urxwkWRMi7rXyckRjpLu2si7wb0g4GW5IUak5KuCDUhFQRmMlBhioK + 4+1oKPShvsiThhIP2qp96KjxoSrfkfxUMxGBmiLY55OTJHU7x4zaEhvqim2ozjOjQYRDd40jw/VOjFZb + MVIqgiNPh56sJfRmabBUxNFkhSVrpE9YVWnLshIzJmSd5cXGrFAM4EpztjTPGsDbmx3YKCJqY5WFivXS + x00V67NK+iHFAN7f7MzRDg+eqreXeX2WZ2kyka3N0mwthjIW069EHedos7zclKl6W9a3uLK104sdHV7s + 7vRmnwilI4MBnBoL4ZnxUJ4ZDeaktANnh0O4tCqR6zMZ3N5SwJ3txby8KU/WDWNvTxD7e4M40BfMUZnf + 3+HDxnIb1haYqgbwUw0e7K53Z3uNCxtKbFlXbC1QSgWKUWzP+mJnZkpFMJW5s65k1gCeyLVleYEjEwLF + AB7KsmAw05KRHBvGCxxYXuIosGdFqR3LS62ZLLdmbY2tCC65RyL6NrQ6s65R9tfkq0Ypb2iNYKY1hjVN + MUzURMlziKYrN5ym1CBqE/yojvGgKtKZukgHmiLs6Ai3ZSTKgbVJLuzK9uRYgSfni115sdCOK4VmvFxo + rI6fe7PcmFs15upYvtcbzLgiIvZqkwmXRagqXyXfadDnzWZDPu2y4BdDDvx5mRt/HnXk970W/K7TjF+3 + mvBljT7vFQtnkWd1N0ufV3IMuZFrwJU8fV6S53pZRPc1+f1qoRaXshdxMXUB5+If55m4H3A+6YdczlvM + rXJd7sux32s244NmUz6sN+LjGkM+qjTgU8HnFQZ8JYL4JxXG/LzOmh9LnXpHuNWVUgMOJ89jOmQOk2Fz + mEqax9YSQ/Y2WLO12pQ1xbpq3WlLWkhl7GJywxeRGaFNYZw51fE2NCdY0xlrwmicPtszTDhfasObLZ58 + 0O3HtRolQtqYXRkGrE02ZDDOlKpAfXK8lC/3zciNchSu40RWjD3pSpRDpCXJ4aakRM1iNgrYnJxYS/Lj + rMmTdi07VJYFmohANyQtyITcMEtKY2xpTHNjpDiIpYV+UlecWJZowSZpe/eG6nBQeOfxcC3Ox+pxOcGI + i1G6nBeeej5Qg2cFZ/0Xccp71gA+4zeX88ELeClCk0uyzaUQDS4Ld70auIQbsu6dYB1eC9HjtdDvm7+v + SPunmL8KXgnSlVKHm/46XPOV5+anw5UAXS5K33DedxEnPeZy2n0uz8sxryrj/wZo8ppsc1/Wedtfl3f8 + dHnXX0+m9XlLynt+Uic8NLjqvIBLjor5O5+XpN95QfCiq5IKeiFX3RdxTfqf64JX/TS456/JG/5LuC/n + rpjA74Zp8l6kNh/F6/N5ijFfppvxhXDPTxN1+TxGk08iNPgkSpv34vS4m6zPi8lmnM7w4nhxDEcq0zjQ + VMj2jirW9TSweqidURFV+VkpeHu6zhrAZua4e/sRGh1PQkYO8alZwvkCcHJ7YP46OQofs8bMwkI4mb20 + y8q47AlqFLAS/atE/oaHh0s77S/tuTt2dnaYm5ujr6+PgYGBGgkcFhZKXFycagR7+3jK8VyJjg+nq7eV + vQd3cfrs0+zbv52ZDSvYsmUlZ84+xbPnn+Ls2W2cOaOkgN7E+TMbeO7MDBdOz/D809Oc2ilidFUHG0fq + WTdQwdRgOWsFk4OVTAiWD9ezZd0wJw/LPo7v4cCeDaxbPcaEiMvlSornMRHCIjz7e1rpbm+ip6NZplvU + ZctGehgXMTzS18FAVxN15Xmkf8cAbqsvYaCzTjWAR3saGeqoo6+liq6GMjX9c11plhr9W1mUrhrA5fkp + lOYmy37y6extZ+n2zSw7cYruo89Q+dQpyvY+Q+6Wp8mZPkj5zAHaNj7F8u271bFUp1cuY6itnur8dHIS + o0mNjXxkAMeGBBMfHip9YQgxgX5E+PioSJX7XJaZQm9DFcsUkd3XLM++mZmxVmaWSilQDOCp8XbWruhh + xw7FAD7Bzfuvcun999h553VGnr9G+6nLtJ16mc7nXqfvyod0Kwbw8+9QoUQAbzmjnm/tpiOMHjzNlnPP + PzKAX3/7Ni9ePMmOraulvjXQVlMo51LOcrm/02O9rFvWr2Jqop81471MjnWzdLidfhH/3T0dtHZ2U9Xa + S2XPOC2rtjN+6HnWnL/D8vOv03P8Jg17L1K9/Sz120/R99QZ1p95iUOXXubM9eucfuEcR6VO7dowyfqJ + ASZ6mmmtyJP7ESttldTdEHfp+yPUNN5rVgyxcWYlM+uUVH2rWbturWpenjp/jrtvv8V7X33G6x++y4Ub + Vzl94TxnLpzjxWsXefPtV/niqw/45kcf8/nXH/HFT7/kR7/5Jb/481/4+Z/+xpe/+B0ffPljXn/3PV57 + 63Xuv3OXjz66y8cf3eKD969x6+YZNsyMqGMA52UnqnXu+NH93L5xhbMnj1BVlid6xE50i+gV0TD+3qIH + wr3IzY6hviabypJEinLCKS+MoaU+h4HeWoaHWhkZ62FsYlg1gHfs3y84wNpN25ic2SjYxIade9hz9ARb + 9h5SUz4XVDcQm5FLcXUTIyumWLFuI+39wxRW1hKZmIpXUBjx6dmU1zeTlJ1PkNpGZFNSVauav7XNbY/K + 1p4+BsbGWDE1xcYd29RxiEeWj1FaU0ZYTCimViZoGWiibailmr7fhbbeLPQMtdW00Ir5q2Ewa/4+NID1 + hS8bWBoI9DCy1BQs+R94aAA/xMNIYEs70YuO+qqudXBVMmDNmr7/Hfauivmrh62zDspwSEoUqWeAOUHS + 3wVHO6kRvsk5QeSVx1DVkk5pfRIpuYHEpfuoxm9Cpj+JWQHEpPiqqYL9Qh1Vw1dJ/axE/yoRpOrwSb7K + h9Wz8PATPa6YwV4mOKlmtB7Oci4PoXx4qWTRCQgULiyc2k32Ze+ki52jzvegjAHspqzrayFttJVwcnui + 4jxIyQgiIztCRVqm6NTcSGobchkcaWR4rJnmtmIKi5KkLZc6VZyspoFOFS1bXZlOS0M+VaUp5KQFk50S + +AABlBVE0daQwYqxGp7a2s/l57Zw59oeXr6wmVP7h1k9nENvXTidFUH0Vkcy0pTC1HA56ybqGOkpoLI0 + jNLCQDrbUuX9a2L/nkFpm2toqgqnriiAvtpo1vZlMdOfzsqGCIYKXBjJd2BZkT0ryx3Z1hnA9r4QtgxG + smE4gRU9cfS3RFFZ7Et8nI1oENHyvspH7IbYyT20U7OdzRrA9s5mOIpeVKDUBaVeWNhqYyWaRDGD1Yhg + WabUGQs7TXXsaCUbmvKcfIJE84SJFhG+GRLloo79G52k/KHoLf2mjxolHpvqTnyaaJMMxfhVSicpBcJt + krIdpb64kJLvTLJcT4pw5LQ8Z4GrwJ3MQn+ySuRel0eRq6QYr0smtzaJnOpksquSyK6UZ1El/UBVtqyX + RVZBClk5iWRK25acFEZUbAAhEd4EhHjj7eeBq8esCezm7ouzm6/UGy+5TjfsXL1w9PLFJyyS6NQMolIz + iUnLkXpcQFZRNT1Dk4xNbmD56s2smt7Fxs2H2bn7FAePPMvpZ17kzutv8uNf/Ewd+/ev/xT848/8/T8U + /In//Mff+K9//p3//Puf+duffs2ff/8T/vjbL/jmi3t8+v51fvL5Tf78q/v85qtbfHnvPJ++coqfv3ae + n999lp/cOsnHL+3l7skpzm7qYPdIMbsH8jg9WclLMzVcmS7k4tJYLnR781Kni8CJy132XOq044U2S55t + MlJTPp+s0ubpSk2OVSzheJUWR8oXc7h0IQeK5nOwRDhjownPdjtyfsCbZ4aCODEUzv6ecLa3hzJdH0pv + tg9loiUS3HQJsVtMqLM2Ie56hCj/wfgo4/+aq4gURMv7FiPvW0KgNUkhtqSE2alZAHPinChIdKM42Y0K + qRM16e40ZrjTmu5KT6oL/SlODKQ4CuzpT7WlJ9mCzgQT2uIMaY/Royteifw1ZjBdMXy/NX2Hss1UE1hB + b4bRgxTQ2jTGaVAZuYiy0HmUhy2kLHwxpeEaFCgmrc88Er3mk+i9SEWC90LivQTCYxU8Wq6awotJEl6r + lLG+C4jyUtIxP64awAkBi0gO1SQzRl/6Ul3ShJsqBnCS3yLSg7TIjzCgOMaE/HB9ckN0yFHSO/trCedX + opB15XcTCqPMyQ01IivEQGBERpCBipQAPRL9tNVIXSV1c7xSCu9WxuxNlnWTgvXVecUUVgzgCMUA9liE + v9OT+DrMJUA4thL9G+6tQZS3lqwn2/vI+jIdK9MpocbkJdlSKu9ksSBdScsunN3bZQmeTpp4OuriIW2A + h70+7va6uFhr4SrtgqvNbOkkfY6t+RIsTRZjZ6WFg40uyti/NlbamJspY/9Kf2Mi/Y2pDuaWhtjYmuHg + aIurm6O03274+LhJG+5JSJgP0bGBBAY6qwayufF8LAznYW+2BA9bHQLkPCJcdYj3WEyeaJfGaG1645Yw + ma7DjhITDlWbcarJmuc6HFScqDNlV94ipuLnMJ34GHsKNKTuG6o4XmUk74IBT1foqjhZoc/pKkPOVBtx + psqEU6ITj1eZs6/IiC2Z2iyPmctg6GMMhj/G8sQFbC0241irG4candhWYsamHF02Z2ixPXUx+zM0OSMa + 92qtOXeaLXm93oS7FXrcLFzM1awnuJL5OFeyf8jVvHmicbV4rcGAN9tNebvTkg8G7Hhv0J73hh25P+jM + rU57Xmqx5VydhZy3MWeabbk06M/LyyJ5fjiczaV2dEUspsLtB5S4Pk6p50JqgvVoirOgL8+NwTIfmvOd + KE40Is1/Lmluj9EUpclkgRWbKuzYUWXD4RYnnh/04daqCO5Ox/HieDBHO13ZUGbG0gwduqIW0BYxn54E + XZYppnuVLxOVIXTlBVKZ5ifcW0kVG0+/8Pejh49w79U3eff++9y6fpsb127x0gtXOH3iGY4dOc6hg0fY + vHkra9ZMq2MAnzhxgtuv3Obzz77gFz//Fb/65W/42c9+wY+++Rmff/4Nb7/zAXdefUM1gZXo31u37/DK + ndu8/sY97r35Oq/de5U7r91WoUy/eu8u129d5aUrL0h7fJLVU5M0NNeSLrouPilGEC39fBol5YUUlRaS + ky/6JTOLjKxscvOL1CjgvKIKcgvLKS6tEz7QKTxggM6epXT3LReMP0Jn9zjNrUM0tQzS0jZMU9sgjc29 + 1Df10iBoau2nvXNMtNyEio7upbR3LZNlCsZp61hKa8eIuu3/BuXYClra5RiC1o4hFW2dI/8r2rsUjKrT + Le1D6vaNsm1DWz81jV1U1LZQXFFPQVkN+cXVquGdlauYv4WPkJFTpC7LySshL7+Y/IKS70ExhQvkXhUU + lZJfWCTLisgRHhwTnUBwUDi+PoF4ePjg5akMkRFGgmjcjLR0SoqLhD+V0FhbLhyqQkWraEMVog+ba/Lp + qC+iv62c0c5qxgVjLWUM1+erqZz7yjNU9FSk0SMavqcyU6ZlvipT+FTW99AnemCgrkDKPHrKs2gvTqWv + IpvlypA7HbXMDDSzd/UoRzeu5sD6lWwS3TUuy5XhePZsWMmRHevZsGKEVaO9TC8bZPvUBHtlvQMb13B8 + 2zrO7NzA2d0bObNrI6dVbODEzo0c3TbDflln34ZVHNi0lgOb17Jn4yp2r59k2/QEm9cuZdOaMTZPjbNt + 3SQ7169iu6y7Zd1yNqwaY61iOoteWTsxyNrlQ0wJ1oheU6Y3yTko5bBot8aqQnIz40mMCyYy3IdAPyd8 + PJXxfa1VeHsKh/awwMXdTPjvbFaX2aFIbYW7O+AV6IhPiDN+IS4EhrkIb3MjOtGTJOHsSWleJKd6k5ru + T0paIElJQYSEuOFgb4K9nak6dnt4mD+Z6ckUPUgB7e7qhJmJIabGszAxMsDIQO+RCfzvoJjAVhZmpCQl + 0NfTzZzf3IzmV9ej+eWVGH7xYgKfHY/k2pQzRzp12F6lyQ5p5HdU2qlp+dZlmbA62YDVibqsSdRmKlGT + nXnSgDc6crXfk1sj7rw56clHM978dHcIvzkcxW+ORvL1U0G8vc6Tm6NOXOh05EilJevTFAP4CboDH6cz + 6Id0BD2hGsCt/vPpCNSgJ9yArnAjWqXTbZDOtjFQm3pZ3iSdfmekHoPxRkykWbA204o1aWbS6egzHaPF + llh9DqSacDbfhotl0pjLub9QZcFz1cY8X2fEzV477i114bNpX373VAx/OZjA77eH8ZNVHnw+ZMO7bca8 + JR3EvSo9Xisz4o0yK16vdOBWtRsXaz2FwDmzPs+S0TRDIUsGDKcaMZxurH4d15GiR328hpr6OTdkLtlB + 88gKXEhO4CKyAxaSFTBX5h9/ZADXJ85lrFiHjTVGHGm14oU+R15d7sM7awJ5daUnF4fs2FNtwLLMubRI + p9qcPo++YkNGyizUlJUr5PrG5Dp7MsxoSTGjNsmC0ngLsqKUdIhCBoNMCfEzkopqoiI4wIwwEQ7BARaP + DGClVOAupNJdSKaXuyzzMlXHBA5STGD/WcNJQYCQziBBsAiaiEAz4sNtSI50JCHcjqggG0JFRPp7iuBx + MVP/LHC0N1IjZhXjVylnoaReVYxhEzVCVjGAvZSvJOSFcVJEkBAfSxtt1QhWIULI0c0UN28r1QR29VHS + V1mocPW1IihGxG2kq2oAO/p8a/zOwgoXb4fZCOBgdxVO7nYiUi2xsjPDwsZENX8trYwfGb/WNqYPYIyt + vHg2diLURay5ulvj4WWnmtbOzibY2enJOjrY2oiYtzdUoVyXj7zsSuSgkkJWGZdUSSfr5WmtGuLfNYCd + bL81gN3l/ni6WMwawSIGFRPYx9WcAHcrooWcKamf0+N8yUj0Iyvej0xlWpAjArk0O4aSzGjyU0LJlPmM + +ABS4/xIifUlKdqb6HB3gv3t8PW2xE/unzL+qYfnrImmRPwqBnBwkBUByvOVOqLC1wR/Hym9TeWZWhGj + GL+CJBEWCb6GxHloEe22iAghvKH2PyDKfg7xdnNIsZ1DqfMcRqLmcqTanDdWBPP7/Xn863gF/zpWwV92 + F/KnTfl8MxzH+03SJtQF8IGI5Q+7k/lwtIA3lpVyujONiRwfigKNiLVdTJjmD4lYNJeYxfNJ1l1CtpkO + RQ6mVLpbUikNbomrKTlSR9JEJMdbaRJusYRQaw0CbTXwsV2Ct90S3G0W4mz2BE6mT+BpuRA/myX4Wi3G + 13IRfhbz8RX4mc0nwGIB4baaRAnRjrTSINJGg2hrbaIsNQg1FUJvuoQoCy3i1AhgfVIFOVJnKlxtqfd0 + otrVhhIXE7KFOCdYLiDW9EniTeeSbLqAFJP5pJsvptLDVNoyK6q9jMi3W0Sm7ZNkiWDId19Cnudistxl + 2k+T8ggjKmJMKY42JjtMX+69nog7fSIDjAmWZ+SrRME6GaofIFiY/y8GsJnBIwPY1NxITftsZmWEqZyz + mY25agBbW5lha2mEnbkmLqbz8DacQ4LtXFqjrNhbHcYHk3n8fnMZf91Rxu+2ZPPTdbF8NuHDR+NufDPj + yi922vKbvZb8/oA1fzpqx99PufDXM6789rg9Pz1mzccHTHhjtwEXp7Q5MrSYHc0aLMufJ6T4B+T7y7EC + f0howJMEeotwkmv3d5RnIs/NQ56Bm53AQRNXJy21fVJSlfuIyPX2kTZGOle1HitfX8k7p5izqkEb5ESA + 8sFDmGIEO6sGsPqHlUAtZR0fH1vV8HVyljbK0VA1g5WPNhST96H5+z8NYHuBUjpIW+pIWKALkcEuxIYq + kfEORAdYE+1vRpy0uQkhxvK+GKpfC8eJsIv30yU3xpq6XA/qC0R8l7jRXu1NV52IhQo3qgvtKRZxnZek + S1GGAeV5ZtQUSR0pMKcyx5iGAjMhXPaM1jsyXmfL0gozhooN6M/VFGixtNiYyUpr1tQ6qFGsS4tMGC3Q + Z2mhAZNlxkxVW7KtxYGdHc7saHVkc40V6yvNZ6H8Ln3K6lxtpmX9fS3fGsDTBQaszNZiMkebZdnajGQs + YSBdSTutyXLZbqZReEG7Ozu7vdnd5c2eTm/293hzZMCf0yNBPDMWzJkhf57u8uD0QACXJuO4Pp3C9XWp + vLwuhUurEznSG8C+Ll8OdvtxoDuAI33B7GvzFDFkxVq5bmUM4J21bmyvdWVLlZMst1ON3+mSByiW81RM + 4JJvDeCpUlcmC+VeKOKpyIUVRc4szbd9ZAAPK5HBigFc7MyKUkeBg0DpT21YXWXNtNzjDc0OAifWNbky + 1eDJTLM/M00hTDcpX+ZHsKwyjJGiMLqzQmhK8acu3pvaGFfqohykbtvSHmlNX7gVE9H2bEh0ZG+GK6fy + XXlRzuVaoTU38424la/H3WJ94RdGvFZvwatNltxpteCVNgtudZhxo82I6w1a3KxZzKu1S3i/WY8fdZvx + u2E7/jJiz5/6LPiDrPerJkM+q9Dmfr4Gd9M1uCUC/eUMPS5n6nJBRPL5LA2ez13MC3mC3EU8lz6Xc4lP + cDJmDsej53A64TEu5i3kWpm2mj7rzXoj7tcb8la1Hm+LWH+7TId3FZRo86Hwlc9K9PiyyozP6615u9aS + G5WmnMrWYIu806vC5rAy5gesz9Fid40FG8sNWFWgwXDGArqSF8p9Wkxh2ALywjSpSDClPdVO6pU9k1m2 + bBFedarEklu19nwq9eqLLk/eaLLlSrUVZ8qt2SvPfUWaFQ2hhuR56ZHlJ+9MtBO58S7kxDmSGWNHRrQ1 + qRHmpEQp+NYAVtKt5cVakhtpSVaICWnSjqZKX5YVZEZRhDXV8fZ0ZLrLOxPA8gJvxrMdWJVswY5IQw6G + aHEkdAknw5dwPlqbqwmGXBGe+UKIBheCNXguUPOBATyXk95PPDKAL0Ys4WKYBi+FanBZeOvLwZrcDNLk + lUAt7gbpcEdwV/b9rfk7axAreGj+XvfV4YqvEgGsyxXhwi/I8mf9FnHCcy6nPOQ43gu5HKCsr80boQa8 + K23Oe0GGvB8okPIdKd8IEC7rp8fL0mdfcprHRce5vOQ8Wz7v8AQvyPQld9mPxyI1FbQyNvArPot5LUCL + N+Vc35RzfiNgkUwv4r5czwcxunySaMQXqaaqEfxpgj6fRWnzcbgmH0fr8r78di/DmKtZSgSwF6dLozle + ncbhlkJpJ2rY2NvE1FAHywbaKM1NF77hoX6VamklXNAvkNDYROLSs4lOTldTvdo5OQsvtFPNXxMzU3QN + 9KU/M1ejgqOio8nNyUEZ81dJ+6yYvx4eHjg4OGBpaYmJiQk6Ojro6upha2tLcHAw0bJNWFgInp7uuHoo + kWmhtHc3s2ffDtUA3n9wF+s3rmTz1pWcOr2bZ87NGsDPnP6+AfzCqVkD+MSuCXat6mLDSANT/VWsFawW + rByoYVl/NZMjTezaNMFzp/dx+cIJTh3bzeaZFawc72f5+IBqAA8PdNDbpYztVa+awA8NYMX8XTrYxXBv + G/2djdSW5ZIWF0ZydBDF2Uki4Avpa69WzV8Fw531DLTV0N0ogr+6gOrijG+jfwVlecmU5CSq+2nvaWV0 + 22YmTp6m++lnqdpzhop958nbepycmQNUbDhA+6Y9LNuxm3VbNjK1YpzB1jpqctPIiY8iLTpCuGko0aGB + whGDpC8MJiE0iCh/H8K8hPsKkuU+l6an0F1XydLuJibkHFcPNDIz2iJoUg3g9RPtzCzvZnpVP9t3TakG + 8I037/LSu++w487rDF+4rhrALadfpuP51+m9qhjAn6oGcNXTr5C79Ry5M0eo23Ls3xrAl146zVM7plg2 + 3EJHXTF9TRWs6G1VDeDp8T4Va5f1sXK0m7H+FnrlHra11NDYVEd9SxsVrT1U9i6jedU2xg49x+rn7zLx + wpv0nLpN/cHLVO8+T92us/Tse4aZZ65w8NINTl67xonzZzh2YCd71q9g40Qfk72NdFbmUpUVK+2RH8nh + nuQmh9LRUMyqiX42TK9g/cxqptatVcdQ27BtKyeeO8+dd+7z3tef8dqH7/L8zaucvPgsZy6c5cVrF1RD + 94uv3uPrH33IZ199wOc/+YJvfvtLfv6Xv/CzP/2dL3/xez78+qfce/9DXn37Hm+9e5sPPrrNhx/d4IP3 + r3Dzxim2bV1GU0MRFaWZjI/2cvLpQ9y5eY2zJ45RWVrwwAA2UDVdoPCfuGg/igoSZJs82SaRwuwwygqi + aa7Poa+7hsHBNkaX9rJ0+QhTG2bYffAQuw4eZu2mLSyfnmH51HrWbdvFU0dPsP3AUZauXU9pQ+u3BvDy + tazasIW+sQlKahqIknbAOzicxMw8atu6yC4uJyopnZTsfIorq/+HAdzS1Uvf6KgcZy2bdm5XDeDB8WFy + S/PxD/XDWDSfkvpZU3826vffGcBKFLBiACvm7yw0VSgGsIGFAYbCmQ2tDDCy1P6e8fu/GcAPYWErXF00 + rhLZae8i/NPl+8bvQzw0gG0ctdXS2dMAd9Hj/qK1AyLsCYtzVQ3e3LJoqlsyqG7NVKOBk3MC5T4FqOZw + Sm4ICenBRAg3UVJAK1G/StpnJQJYiQb2VoZP8lOyZFmocJflHt5muCopod1Eo7rqCzcWnSrno0DRjMqH + lGHhLoSGueCtpClWIpddlIjlb/Ew+ldJ/ewvxwkNdyI+2ZfM3HDyCuPIL4ontyCWgpIE2rrKmZjsYnx5 + h0yXUVycLEihvCKDtPQwsjLDaKjNokv6DiXavDg7nKLs0AcIkXYsls6WTFaMVrJ9fQfPHl/DpfMbef7k + ag5u72T5QAYdNSG0lPnTURlOX20Cq5UsDeN19LfmUJIbREG2H62NSaxb08iu7f2sWl5FdWkIZTm+tFVE + sLwzndVdySytDhK+Z8dgth3Lip1YXe3Gzt4wdg5FsWU4Vtr/JHnHExjtlOtqiCIv14uoWDvVALZ3lefu + oIOto5HARGCslvYupirslI957UXL2Wqrhq+VwNZJtJxi/sqyhwawkkZaeU6KAewXInomVHRPqNSJMOnb + okSXxDgTHusiz9yF8HhHIhPt5P2xJSbFTvpTW2KFbynTMSk26nRUqrXAitg0a+JkXkFsqgMJGW4kZHmS + nOdPSkEgqcWhJBWGkFgQSkKetPO5UsrzjM+JJC5DkBpGYoq8o8nBxCYEEBHrS2iUN0FhXvgFeki9csVN + MYHdPKV+e2Jt74q5jSM2zm7Ye3jiFhBESGwcoXFJRCZnEpeWT3peOY3tQ3QNTNA/vJLh8WlWrNzC1Mxu + tm4/wIGDx7l05Rofff4pv5A279e//yW//8Ov+ePvBX/4JX+R6b/96XdS/pLf/fpH/O5Xn/H7X3/Kj758 + lU8/uMqPPn2Z3//kLj//5AqfvnqaD64d46sbJ/jRzVNqFPCXLx/mtdMznN3Uzq7hQnb0ZvD0sgIurCnl + xVVZnB8K52y7K+dFW51vseO5FhvONwtXbTDhZI0+T1dqc0x4+TEpj1ZocqxKi4OlizlQsoj9xQs4WLKY + Y8K3T7fb8UyPaKQ+f472BrO3I5itzUFM1QTRl+1Lebg9yR76RDhqEuGmR7iXIRG+JkT5WYjutFQRI4iX + 9y0x2IZUqQ8ZEQ5kiRbJj3OhONGVilQvKtM8qc4QDSo8tznbQ/iuG/3pbgyluTyAE4MZjvSmWNGVaE5H + ggmdcUb0JhkzkGbOiGinWQ01a/oO55irJrCChwZwa7IOzQma1EQvUaOAKyMXUxWlQUWUFsXC+TP8F5Lk + vWDW9PVcQKzHvFkIn1WgLFN+++8GcIzPfCI9n1AN4GjvecQHLRZuoS3c3kB4iC4pwj2ThYvH+ywg1V+D + 3DA9CqOMyAvXJ1tJ/yxcO81P1vHWEO6vQ06YEbkRJvKbIZmPIoBlX0oEsGIAB+iSHKin/u+iIFG4d1KI + ASmiPb5rACvmbpSvlhrtGyA82t9xPoEuiwjzXCLPRzGO9eS56JMgiBcun+ivT0akOUWpjlTkeVKe60Fm + oi0RgQaqAezuILDXxs1W7xFU81egfBDvbid9gfK/o4WmagDbSKmM+2sv61nJ9KwBrIWxiTaGxloYGeuo + QS5W1ubYO1jj4uYovNcFH393AkO8iIjyE87sqBrI5sYL1AhgR4tvI4DDXbSJdllAsvuTFPo+TnPYk4wl + LGKzaNf9FcZqtsqLPc4qnhH9urdgCWtFV66NncO+/EWcrjHgTI2RirO1UlbrqzhXbcA5WfZsjbHATDVc + z9Rac6hMNH+2HisTFjAa+QRLY+exOl2LbSUWHKh3Zm+to2oGb841ZGuOPruz9DiSq8/5MmNuNFrzaqug + wYy7VfrcKtTgas5crmQ/waWcJ7mcN59rpRrcaTDktVYzXm+34M0eG94Q3Ouz5W63vRr9+3yjjZyLFScF + z3e7c2Migjtrk7m8IpFdte4MpxhSH7CACqmHJVJXy/w1qY40ol10bHueM1WpFuREaoq+/AF5fj+gJ0Wf + 9ZWO7KxzEk1sy7EWR14Y9OKVVaHcXhPJhWEfDjbZMFWgx7Bo5JaQH9AQMIfW8AXy3hkzXuTKaLEv7dk+ + lCR6kJ8UIP1ThvRTozz37LO8c/9dPnzvQ+4o4/XeeIWrl1/m+Wdf4NyZc5w6eYY9e/axfdtOnnpqL+fO + neP111/n6y+/5pc//zW//tVv+fnPfqkawF999WM+/uQL3n7nQ958613hlu/x1jtv87bw8I8++VDF+x++ + x9vv3eed9+/z7gf3eVvKO68p0cIXOX7qCCNj/RSW5BARHSLtvpdazyJEXymGcEFxnvxWKCihoKiYopIy + isoqKC6vEdRSIdyvpb2frt4xBkdWyr6mGFumYJ2K0aXTDAytpm9wJX0Dk7LeMto6hmltH1RN2K7epery + weHVgjUMqOXUIwwMraV/aFLWWfEt+mX+O+gdWKaib3C5iv6hFSoGpP/57xgUDI2uYnhstQplWt3/4ATd + Q8vpGhynrXuE5rZe6praqVDHPK4lt7CUrDzF+JU+7hEKyBBk5RSSnVtITl6RitwHyMsvIa+gWCDTBUq2 + DVkvK4/4eOkvI2IJC40iOCiM8PBIEhOSyc3KpjC/gIqyUmqrRQvWV9EhmqarrY7e9lr6OmsZ6Kilv6Oa + 4Z46loomG+9rYEz0+XCLMj5uPj3VWXSXp6voqkijsyqNrqpMOoWbqWVlhoqOinQV3bJMMYD7a/Pprcim + vSRNNYLHm0qZlONM9TWxc8UQB9Yt56kpJTtLD2PtNawcbGX71Dj7Nq9l/UMDeGKQp9av4si2GY7v2MDZ + pzZzft9Wnjuw/RHO79/G6ae28PT29arpe2DTGg5tmRZMsX/LrAm8Q3T2jpnl7Ng4ye7Nq9m/Yz2Hdm3i + wFOb2L9rA7u3TrFpejnTK0dYOzmsYnrlqGjRUTZMLWO77FP5WHuwt4mq8lySEsPlHnsTGKik0HfEy8te + YKfC01PxiKyEPwuf9rZUPSvF/HXxs8XD316FYgIr8A1SooEdCItVPtLzISXDl5R0Bf4kpQapBrDiHbm6 + WuLsZImPl4s850DS05IoyMsiKSEGDzdnLMxMvoWpCWYmokv0ddHVFh3zf2MA/+7lWH5+MYIvzwbz8bFA + 7u3w4vyoOfsal7C1fDE7Kk3YUWbFxgJzpjMNmErTF+ixLlWH9ala7C4w5EyTLS/2OHKp145XljrwzlpX + vtkdyK+PRvG7k3F8cyCMdzf5cmvClee6HTlUaclM+qwB3BP4A7qCfkhX4BO0BcylXYkADtJUDeCeCGPa + pYNu9FeigLWl0dWgKUSTjghd+mMNGE8xY5UQk9XJRqyO0WG1NLqbovXYm2zMyVwhY0V2PF9ux/lyc86V + G3NeOpxr7da8Io3920td+GZdAD/bEMhXqz35aNiOd7rMeKvViDeUDqJKj7vlhtwtteB2uQ3XKp15vspV + CJwj09kW0lDrCTHSZyBFGQPYlP5UIUApBjQJAaqIWUJB+EJyQxaRG7SEvGBN8oWc5AUr42BIpxE5j0rp + 2JqT57OqUo89raac77PjzjJ3Pt0Qwtdbw/hkcwB3V7lxtNmUydxFNMU/Rm3KE7Tm6dFZaEqfPI+BAit6 + syxpSzWjVsiakvIkJ9JYiIoxkQFGhPsZEeRvRIC/CHd/EwIDTKWRsCQo0FwqrxHeIiq/awC7PTCAFXNJ + NQB9ZX3FOH4AxQBWon/D/M2IDrEkIVJJLzNrAEcHKxHA3zeAFaPzW+NXibgzwcHe6JFh6uxkirunJV4+ + 1ngqL4u8OHYOShpmETsilBUz2NpBGSfJCBfZr6uXJU5KimcP2ZdAmfYOlRcqxFE1gJ3l+E6yr29hi6u3 + owgmJxHPAikd3Wy/ZwAr5u+3pq+p+rXcLEzkXMywF5Hm7Krkc1cG83bC11cxgS1EEMv1OYpIVn53NsVF + RJxiaCtjhkZFexMT50tsnJ80Fp54edr8/zWAFfNXgWL++nqKcPawItjLluhAJ5IivFTDNysxQDV9FSjR + v/kpIRSL+CpOixRSEEJmvDQQcszkGF8SlXGD5TxiIzwIUr5AUcZUdZfjuCnGu7H69bYa7e1rrhrAwUHy + rKWeKFDrjK8Bgd4G8kxNiJP6khJiQWqgCck+WiR7LiTVaz4pHk+Q5v4YOZ6PUerzOHW+jzEc8Ti7CjW5 + 0uvAZzMh/O1QJhwvgMP5/G17Bn+YSuEbEc0fNfjxQW0An7bH8NlAOp+vKOXtySpOdaQxnuVFvp8BUVYL + CNN4nKjFIgy0FpFhpE2RrTEVrjbUeNpSJQ1usdz7bHsh7dY6xFouIcx88bcGsJ1iAGsIiV6Ek/lc7E3n + 4mK+8P9H2V9G2XFmWf6wzMJUMjMzMzMzMzMrWUqlmBKlTDEzMzOTLVkm2ZbtMhV3Vff0TM9M/7tnDfze + E5Gyy1VTPWu9H/Z6IuLGjYgb8cDed8c5D+5W83CzmIur+VzclXXz2biZzsTLbDYBNvMJsdYkRDF9reYT + qRjAcuwoKWOsdIkVJFgbkmwpgkHqToG9hVyLE7WCMkcL8qW+ZolQT7aeQ6LFTJIF6XL8TDl2nrUWDb5W + tItob/a3oNRJS/afS6G7JiU+OhSLQMjzEfHip0VRmAHFkYYiZPRJC1LeIFXeNNWW52GgtkMv5Q8aOZe1 + XJsy36+VuQgAFX9tAJspJrCpvogAI8wtjKVtGWKmvPhga4qlUuetTLG3lDYpwsHFZBZehm8QZzuL5ihr + dtVE8NVIGf+yrZb/uq2Sf5jK5auVkTzvc+fxAjueL7bhq1ErfthoxW+32fGH3Y780yF3/nzYg9/ud+Kb + PXa8v9GQq+s02ds3k+Hqd1iY8w4N0VJnvGaQ4DaDUI838fF4S9rA2yJy3sHTahbeVvJM5Bn80gB2E+Hr + 422iGsDTJrCV9BtKOR3V+1OErr8Mrv5BjiJuFDgQ8NoAVhAYpKRwdlL3UwxfJVWHi6uJ2p6VYyjpngOD + XV8bwK6qAeynmMAikPx85bi+MmgLAqQfUebPCPeXQTnImahAe+lrLQj3MSVK+tkYZY4gEY1xIvqifERA + eWmRGWFBlQhu1QAuVQxgTxbUedJe66nO9VtbaEdlngUV+WYqqgosKM+Rup5tSEOBqZAxG4YaHFnZYMeK + GguWyHi2qEBbhZoVosaGsQZn1tYoKY3NfjaA11aaMV5nw7Z2Z3YscGNbmxMb621+NoDHlUjeIhk/83QZ + LTJmd4sLhzs92VnvwFi+AauztFglWJ6lzeLM+SzM0GAwV7ZVmDLRZM+WDne2yf47OjzZ1e7B7k4P9nd5 + c1wxgRcGcLLXh8Ptbpzo8eXaikhur43nxspYLi8L5+yiYPZ3eLGnzZ098t097d7s7/RjV4s768utGCu2 + ZGOlA5urnJkSrK9wYKJMMXztVIyU2jNS4qBitNSZ8TIXJsrdGX5tAK8ucmSNEg1c7MLSAjsG1T8vrBjM + tmZ5oRMrZfuqUgVOAntWldmypsKadVXWqrm9vsmJ0UZn1tW6SunLeFMgo02hrKsLY1lFCIuLgunJDqE1 + 1ZeGBC8a4l1piXOkI96Bnlg7FkfbihC2Z3OiPXtTnDiZ7cD1PDvuF1rxpMCYJ0q65hJDXlQa86Leig+b + bUSUioDtsOHJAisedphyr0GH2+WzeFA+m4+qtfi2xYg/dFvzn/vt+Jdea/6pw4zf1xvwSoTts5y5PEjV + 4E6KFjfStLgs/OxM8lxOJs3mVNpMTme+x7nMmZxKeZsTsW9yOHIGhyJmcCLhDS7nzeFmqRYPq3R5LHhS + qcOjMk2eFmvwfuE8PlAggv7DvLmq0fx5qQGfV5nxWYM1H9TbcrXUUHjXLIbD32Bp6AzWpsxia5UpU2X6 + DMt4sDxnHosyNWlL0KBKuFF52HwaE41ZnGfPeInUTXm+x2rtuSF180WLPT90OvGbbmdedTnwQbs9t1ud + OdPkzlieLa1R0u/66JLpZ0xezLQBnB3n8NoAtiFV2lpqtIJp8zcjxkI1gHMFyvy/mcHGpMkYl+FnSF6Q + OeVRNjQnOdGb5cHyAh9W5XuwMlvqVooFO6IMOBQynyOKARw2l/MR87kdZ8BdwfVwLdUEvih89Yz/nNcG + 8Nuc8n2X80GzuBw+TzWAb4RpciNUkzvCA+8Haqrpmh8HaAq0eCLffSzbfzKA7wW8RqA2d4X3KpG/yvy/ + NwN1uRmiz6UgHdVsPur1Hsc83uO891z5TL4bpMuLMGM+DzflVagZX4WY8WWYKZ8GG/Fc+qInShSx21w1 + 5fMVp/e4+rq84Pg2l2X5usccbnjO5YbbLBUPfObxvpzroxBdPhTO/b78vvd9Z/KhcNjPIrT5Uvj3N8km + /ErwTYIh30Tp8koxgGX7V8LJP8u35Yk81+ulAVyqiedcUxYnu8o40N/E9sUL2Li8n5ElPTRWFBEXGSK8 + RPiZuztBoRFEJaUSl5lLdEo67v6B2Du7ylhljYm5GfqGBmjqKH9uGeHg7ERUVJQIYRFESUnSh/vKOOGm + RvpaWFjI2GeGkZHRawNYV8ZKaxFugURERBASEiTnc8XZzYHwqGBaOhrYsWsz5y+e5sixfWzeOs7WHaOq + AXzm7E5On9miGsDnT09y8cwGLp2e4OrJiZ8N4G2qAVzPut4qhgVrFPTVsKxXBO7iVvZsXsuNC4f54P5l + rp4/wq4tY4ysGmSF8hb0UA8LB9rpXvD/NoB75RprSnNIjQ0lKSqQoswE6ity6WqpYGFnHYsW1Ev5CwO4 + qkA1f3+O/i1M+RsDuIWhLZOsOHmSbsUA3nmayt0XyN+oGMB7qdywl46pvxjAwyuX0N9SQ01OqrS3SFKj + wv7KAFZN4OAAwrw9CPZwV5Eo97koJYmOmjIWy7Ut66pXDeCJoVYmFk9HAE+t7mJqbT8TIwtVA/j05ePc + e/GEa599yrYnzxm8cp+OU7doOX2PjkvP6b79igW3vqH58qdUH39KwdaLFKw/SsOWYwwdOM2m85c5+/gh + jz+bTgF9/fop9uwcY9VQB50NJfQ0lbOy9+8ZwAsYkHvY2VxFU305NbUV1DQ2UdaygKq+ZbSMbGXxoYus + vPyEoSvP6Tz1mPpDt6nZc5X6XRfoOXCJ8fN32HvjPodv3OTQqWMc2j3FrtEhNizpZFVXrfp2fH1uHAXx + AWREepEtZUt1HiuHFjC2bplqACvRv2tGh5nYspljly7w6LOP+ezHb3hfiQB+cJuTV89x+soZrt9VDOAn + fP/DZ/z615/zqx9e8t3vvuU3//wP/PFf/5Xf/9d/47t/+M98/uPvefbFl7z/6TNevHzE568e8uWru3zx + xQ0ePjzOvr0jLJE62tVZzahcw7nTx3h8/w4njhygojQfT1fRTGoEsKIJHYmP8ae4IJHmRmXe4EQKciIo + K4yhuT6XPvmNvzSARzeMsfPAAXYcOMjw1CaWrRtj6dpRWd7C9gNH2HHwOCsnNlLT3k1iThFFVY0sXjUs + 9W0bQ2tGqGxsVV8G8Q+PJiWngPrOboqr60lW/jArKH5tALf8hwbw1PatjG2apGewj/T8DNz83DEQfjxX + Zy4auhr/lwH8ExTzVykV81dDXzGCNdE01ERfvquav39jABtazFcxbQArpRIZrPl/GcDmNlqvo4CVCE/R + x68N37+FYvrauehi66ijLispoN1Ei/mEWOETaq1GAcem+aimb1VzJo0LCiirTyWzKFI1flPzQknLC5d7 + Fk5cWiBhcZ74hYlWDrJVoUT//hQB7OIl+vU13DyNcVWmlxF9qEDRiS6uhip8fMwJCnYQXeujQpkSRdnX + Wfb5GaIpFRPZN8BanfM3KMyBiGg3kuUasguiKS6T/kcxcsuTqajOoG+h9JmjA6xc0017l5LqMEk1gKtr + ssnJjSYvN1LqVTbd7UU0V6dRJfWsqkh+s4pIGqsS6W7LYuXiMiaHmziyewlnjqySciGbRmoZ6k6hpTKQ + uhI/mkpDaK+KYdVAGcNL6uiszyAv3Y/MVG9qq+JYvayOjRt6WLq4nJL8APnMk9qiUBY2J7GsJY6+Ml9a + 06zpybJluXD40XpftvVGsm1hLBsXJUj/nyx9fhJL5Zx9nUlyzHCSU13xEp5i5aCBqbWGPHvRaKL/rUT7 + W9sbYes0DSXS19xG+2cDWIG1g2L+6vxsACvzR9tL3VCek1eAJT5BNlKKDpJl70DRRcFW+IXaqGZwYKQt + QRGi66MtCRHeExprKVBKC3U9JMZMYE5gtLTpKBOCY0T/C18KiTZXPw+LtyE8QcbGFGciUkTnpLsTnipI + 8SAs2Z3QJA+BF6HCe0NjpxEhdSI6zpeoWG/CYjwJi/YiJMKLgBAPfPzd1Gwbzsqc/I4u8lsdMLW0w8Le + CRsXVxw8vfAOCSUgIkbqagrxqblk5ZVTXd9JU3u/+kf6gv5lDAyuZemKMYZHN7Jpyy7OnLvAhx9/xLc/ + fsuPv/2eP/7x1/zpDwp+4B//+CP//Off8E//8D2//82X/P7Xn/DH337MN1/c4rMX5/n604v85tVVvvvo + DC/vH+KTa3v48tpevrlxkO9uHuRXN/fw5Og6To41sWUgh01dKRwYzOTcylwuLk/mVE8gR5ocOSGc9aTw + 95P1FpyoM+dIjSEHK3U5WKHDgQptDkl5UCkrtdhXOo+9JXPZUzxHyvkcqNLjaJMlJzpcONbpJXrIj+0t + /kzW+4sW8acn3YsyeZ5pnobEueoQ46lPjI8Jsf6mxMozjw+yElgTH2xNSogd6REOZEc5kRfrTEGcMyWJ + bpSnuFOb7iOQ+pzpQUOWOy05oj+l7E/3YJE828EMBW4CF3pT7OhKtGRBgpmUJvSlmrNQdNPibBsGc6xY + mGWmQjGAfzKBFQO4K92Q9lR91QSuj9OkNmYedbGaAi1qYnWEZ+uSLzw4zV9DjfxVjN9Il3cEbxPt9g4x + 7u/ItlnEKSawz3QU8E8GcLT3bCI8ZF/ZL9pnNgnB80kO0xFubzhtAAvHTgqaT6zsl+w3j2zhrfkRwu/D + 9MkK1SVDuGyq/7QBnOKvTUawPhkhBqQF6ZEaoEOaaHUFivmbohi+gpQQQ1KVfUKNSA0zIk2glIoBHC/H + iPXVIkH2jw3QJUKOG6zM/esyhxD3earuj1dMY+HfSaI3kgVJirks6zmx1pRlulJT5Cv9mQ85og2jQozx + dVf+79DATdq5q2r8voadDm522rJdBw8HQ1ztZXyw1sHGXBMbC21srbTV9M/TBrAWpqbarw1gGa9k3DI2 + 0cXMwhBrW3Npeza4ujvh4eOCb6A7AUFueHnZqAaykgLa1mwerjY6+DoZEupmJPVNjzgPDRJd3yHbfQYN + wW+zKHYWEzna7Ck34mybPTf73bnZ587FVlsOFGkzFvsGo1Ez2Jc3m/P1hlxsMOZCvREX66Wsk3XB5Toj + gTFX6k0F5lxusuZCoz3Hqq3ZWWjEeJomqxLnsEY07HiuEZtLLNlcasVkkRljWXqMZ+gxlW3IzhwjDufL + sSvNeNBsx/utNrzfaM6Tan0eFs3nVs573Mx+l+tS3hD9erNU9Fe9CY9bLHnSbsnjdisetFlwq9mMq/Vm + nK8x51StFcdqbDhWZ8elHm/urYzm8UgaN9eksrs1gGU51jRHalMZMI9iqacFosFKpH7VxptTlWROodTz + 9MD3SPd7g6rI2SzNN2droxt7m1zZU2vNUbnOa/0ePFkdzCPBpX432W7Kuuz59Me9Q2PgDOp8Z9Ac8g4L + 4rUZFI28uMibrlxf6jL8qcmLFs5fzubJEa5evqAauh99+BGP7j/k/p173L19hxtXb3D10hXOn7vI4cNH + ObD/IMePneDqlSt8+OGHfP/dj/z+d3+U/vJP/O63f+D773/Nd7LtWylfffUrXn7+JV98/TWvvvmab76T + vvU3P/Dr3/7Idz9+x9fffcU3376S7a/4/OvP+ODDJ9y4fZm9B3bQvqCJlIx4fALccfGwE31lh1+QJzHx + keQWZFFaUUx1nWgIQVVNDZV19VTVN0k/36yapAt6BulftEI1fpevmmT12inB5p+xQrYtWTHBoqFhevpW + 0tE1pKJ3YCULF69laKliFk+oWLJcsGzDzxhaup7FS0dVY/k/wk9m7uCSdSoWLx1WMbRs9GcsWT6NZSvG + 5RonprFyQh2XFi9VjrGOgaHV9C9eQVe/XN8CJaK4i7qGVsoqa8krVFI+55ORlUt6dq5aZmTnkZ6VQ4bo + 3vTMHDJlPSsnj+zcAtUQzst/jYJp/GQAJ6ekkZCYQmJCKgnxSaTIeo58t6S4mLLSMqqrKmior6atuU74 + fQN9Pc0s6hVt2dfE4t5mhkSPL1vYwgrRYysWtbK0t57Bzir6m4vpbhBtqZjAgu7aTLrrBPU5six8rC6H + Lim7hKctqMliQXUmvbJtsLmExc2lDNQV0FOZTb/onRXtVazraWBiUQfb1yxm/8Qqdo+tYEI0gqIHFQN4 + cs0g28ZXSrmEkaX9jK9exJ5NI5zctYkzuzdxdvdGzu3dyAXF+H1tAJ/bK/po23oOTK5j28gyNq8ZYquU + O8ZWsntyrRoBvHViJTs2rGH3lhEO7tzAsQPbOHFoJ8cPCw7t4PD+LezYOsbU+lWMyLWtW7WI8XVL2SDX + slmOu33TGJNyvIV9rZSWZBGjZkxwxcfXCR9vB7wEnl6OKjykH/XwshYO/dr89ZZlHztc/Oxw93MQKNOR + 2osGEf6tzA0cYCMczZko4VHJMj6nZvqRKu07MSWQpMRAIiO98fd3wcvTkQA/D6KjQshISyI/N5PE+Gg8 + 3Z3VF+dtLC2mYWGhmrtKJLC+rg7amtNzAk+X0/i/DOB/fZDGP1yK5tVBP55vceXmKkuOdmizo3o2m4Ss + bK1QOl8z6fANGcnQYSxDlwnpgNdn6jCZqcXOIn1OCoG50GHF+TYTbg6Y83yNPd/t8OfPRyP5l7NJ/P5I + DF9sCeLxGi8udDuxv9KSsXQt1QDuCXyDroC31FTQHQHv0hk4hwVBWqoB3BtpQqcMuI0y2DYEaAk01DTQ + yjzA3dF6DCWbsCrJhNXxBqwIn8+qUA3GI7TYnmjIkSwrzhTYcKZEUGzO6VJTzlWacEMGh7ttljzttuHl + Ehe+XOrCpwvteN5pxgctRjwTvN9gyONKPR6VG/JQfvtdGXiul9tzrsKRvcX2rEs3YSBOm+54HRammrIo + zYy+FGO6U41pSzWgWjrtkkgNCoWUFIZpUygEpFhK5Q24EiV9RMxc6hLm0pk+l/X1BhzrseDBMle+Gvfn + P+2M5l/2RfOnPaF8MeXLuR5b1hXOpyl+BuXxb1CdpkF1ugw2Kbo0pBrSkGRMVZwRRZFCdMIMhARNRwoq + RlGIrxGBipkXYIS/QDWAgy0ICjTF18cQb+9pA1iJBP57BrC/CM4gX2MVwUoqaSkV8zcyyJL4CFuSoh3+ + /zKA7e2M1TTJNjZ6WFvrybqhDBBm0mgs1ShgBU4uJlgpIshaC+vXQkiZM0lJkaTMk2PnZiyCwVCFrSy7 + +ksjC1DesrBWl12lcbn628k2O1mWRufjJMLZCWcvO5w8bHFwsfkrA/gn49dWyJECG9mu4rUB7OhshpuH + Dd6+0giFLAUpxpA0aC9p4Ipx5OFpNf3mh4cyz6gtsTE+JCQFkihIUN6EFQHk4y0DodwPOyVN9H9gAP8U + BezvbSP32Y5g6TjCfEVsBzqT/NoAVlJ/5CUHTyMlmMK0MHXy9qKUcPISgoQM+5Mq50+O8v7ZAE6K9SXY + 3x53Z2PcnI3UtMGuLiLsXQ3wdJuO9lYiwkODTAgNlOcbaESIEOEQPx1CfLQI99Uhzk+b1GA9MqQNZvrO + Icf3PQoDZlIa+C41we/QHvkei4WsrU2dxXYhWRelDX20zJHfbvDj3/fHw+FU2JfGv00l8KehEL5p8uDz + chc+r/Dhu844fhjM5se1lXwxXMfxthSG0tzJ89Il0uxdwue/Qdz8mSTraZBjpk+5owU17nbUedpTJfe8 + 0NGYDCG/CeZKqua5f8cA1sTNVgMni1nYm8zCwXQWzuZzcDKdjaPAWYHJTJxM3sNNln2t5hNgrUmgpSbB + SjppIdcxUl8THA1JkmeYIqI9Repxmo0xWVJvihytqRVhW+XhSL6tEVmyf5atlnw+j3TrOWRazSbHYg75 + VvMok3rcEWxPf5QrC0LtqPEwoNxNmyof6TOCjKkUcVAs7Tc/UMSLCJfccBEpQiwTRbhEecwn1F2TAE8d + fNwN5Hkq9UgfK8ufDOBp4/cvBrChagArMDfVx9xc1i2m57W2sDGSNibtSH6DnZW0UwsD+f3zcTOahY/B + m8TbzqY5yoYdtVF8MVHNP21v4E9bKvl2PIcn/SFcFqJ+qlLIf4Me9xaa8OEaKz5f78hXm535Zps7r7a6 + 8ulmBz6YtOHyCl32ds9kdcUbIg5nUBk5g1y/GcQ5zyDCaQYBTm/i5fy2tIW3cLR8C3eL9/D8Owawq6ue + tDMjaXfmMvgq6ZqtXuMvBrAC3wB7fKW++ynRvkHTxu9PCAp2JERNy668yCGDsNp+LdRjBAY6yucuvzCA + 3fAPdJHjiFDyd8ZP+hD/XyBQ+pVQXxfCApyJkPMF+1gQ4m1KuJ+xrBsQ5a9HlJ8eYV6aRHhKfQg3o1zE + dV2BOw2lbrRVe9BRN42WaleaK11orHCgrsxWRKHsm29CaaaBCEV9GgpM6K6yZInc99VNdqyqt2SF3P8l + RToCXVZVmjJSZ8uGFlfWNzozLCJqebGxQMbsaksmm+zZ2eXO7m4PdrS7TM8DrKR/rjRnTDWAjVmVq8uw + CK9dLS4c7PR6bQAbsjpDi1WCFVnaLMnUZDBLk6WFeqyrsVTTJG/pcGNbpwfbO+TYbW7sFOxud+ewMmdO + ny/Hur042OrM0QWeXFoawo1VUVwaDOV4jw8H21zZ3eTCriZndjQ7s6tZrrHFnR2NrkxW2jBRas2kjLuT + cl82lDkyXmbPWOl0xO+0Aew4bQArpWCszFl+jzvDxc7TBnCJE+vK3Fkr93t5gT1DOVYsyrRiKNuGlYUu + rCp2k31cpXRmTakTa+T4ayumTeCRWhvG5R6sq3VkTbUzIw3eqgE81hTKcF0Yy18bwH15IXQKaWtJ8aI1 + Wdp1ijP9aS4MiqhflejApGB7gh37Em05nmLJFTn//TzhH/lmAmOelZjyQp7Fxw32fCT381mbA0/b7Xjc + YcND4Sl3RUBfLZrN9YKZPC6Zz8taI75rteQPC2z5x247ft9hwbe1Bnwqnz3JnsOt5LlcS5rP5ZT5nE2c + x7HYmRyKeZsjCW9xNPktTqa+w7GkNzkSPYP94TM4qBjAiW9yOX8O10s0uV0mKNHgTsk8bhXM5k7eLO6J + eL6X+x53s97lfsa7PM6exbMCLT4sNeRloy2fyPO9L6L5eK4OE1HvsMh/BkvlnJvLjNlaacxUmZ48S331 + RYP+JE1awufQHD6P7kQDRuV57mty40ynO9c6HHnQYiXHs+D7Tkt+3W3F1322fNwrwn7Ag1v9gWwud6Ir + wZRCGZ8y/QzIi1FS3Dmr5q+SAlpBaoTlawNYMX8tfzaAc2Q9O9ycTOlr0+W7WX6GlIRYUiffXZDszMJ0 + V1bmebAm14W1WfL8U8zYFaXHoVC5j2EaHA+ZzdmQOdyM0eN+ghG3InW5FqbFxSAlBfTs/7cBHKLBLeGu + d/01uOc/j4d+Gjz2n8/jQCmVqGDFABbcEY57W3ArUJOb/lpcl7H3quBakHIuA86H6HBKPj/sNYsjHjM5 + 5z2PG4Ha8l19XoSb8mWkJd9EWvNNhDWvIsz5NMSY9wP1eOijzS33uWq072Wn96R8j0tO73LO8W0uuczk + moc8f0+pOx6zVNzznc/TEF0+jjDgw3BtnvjO5oHXO7wvv/Mj+T0vhX+/SjRWTeBv5F58E6XPl7LfN/Em + fCvt6xtphy/r/XnSFMWDzgzu9JZybXEDZ5Yv4PDqhewdWcq24WUs7RFRnJdBfHQYMVERxCUkkiKCOCWv + UE356hcajqunl4xXNhiZmqCrr8d8LU3VCFbmA46JjSUnJ0dN/6wYyDY2Npiamqopn5XoXwV6enoqlAhg + JUI4NDRUxgM/nJwdhAvaEBzmT0NLNVt2THLr9lUuXjrNARGHBw5t4dSpnZw+vY3TpzZz7tQUF05PcunM + Bi6fnuDaqb8YwFvXdDK+sJa13RWCKlb3VLGqu4blgnVD7RzaOcHjW+f45tMnPL17hSMiYCeGl7JieS9L + h7pV06y76z82gBfKfer52QAOUQ3ggvQEWc+io6GU/tZqBtpr1RTQf2sAVxSm/Zz++ZcGcIecY+mWDaw6 + eZLeo+ep2Xmaqt0XKNh4jNzxPa8N4N0/G8DrVi6mv6WK6pzk1wZwqGoAx4T9xQCOlvsa4ulGoKurirhA + f/KT4mmtKGahXNeyzl8YwEPNTCxrZfNwL1vGFjE1IQL+JwP4oydce6kYwB8yeOUBHafu0Hpayksf0n1z + 2gBuufKS2tPPKNp5lZKpk7RsO/lXBvDDl8959PweV66dYN/uCYZX9NAp96pH7s0vDeARxQRe3scaeQ79 + nbV0NFfSVKfMSVpORX09Jc1tVA0so2P9DgYPX2D5lUdyTR/QcfoRjUfuUrfvBs17r9B/6CrjF++y+8Y9 + 9l++yp7D+ziwfYxdirm9qJkV7eUsrMujpSCe0qQg6Y+8yIr1kXE/k6WL2hheM/R3DOBzPPzsBZ99/w0f + fPkJVx/c5vTV85y9cpabqgH8mO9/+JRf//ol3yoG8O//2gD+VjGAf/gdz774gvc/e8aLzxUD+D5fvrrN + F19c5/33T3Lm9Ba2bl7J2Ogge3dNcfPKeR7cucHendsoK84TnfBTCmgTvEULRYV7kaekgK7NnjaAc6Mo + K4yjSTGAe+rUujydAnrhtAF8cD87DioG8EYWrxlmcOVaVk9MsXXvQfYcPc3Ipu009SwkJb+UwsoGlqwZ + Zf3W3eo+SsRvUlYeQVFxpBeU0NLTT21rJ7mllWokcFFFFTWNzX/XAF752gAemVpPZ38XCemJ2Ls7oGuq + y2yt2czVnftXpu8v8R8bwIZ/xwDW/IUBrBi//7EBbCbaRDX5Xqf5Vcze6XTLf42fDWAnHbV09NDH1dsI + zwDRy4HmaiRwZJIH2SWRqgHc2ltCQ0c+RVUpZBZFk1EYSZaUmYUxP5vA4fFehMS4q9HAigns7m+Fs6do + c3cjFcoctcq1KNG/LsK13UUbKmmfFRNYga/sHxHpRnJKkIrwCFc10tfd20SFkjra3ctMdLylcG97gkKF + b0e4EBXrRWpGqBr5q5i+VbVZVNZmUt+Yp0b+rp9aytqRfjq6KsjLj1ejgOvrcyiS/Qvzo2lvknq1oJj2 + unSayhNpqkiYRmUcrXXJ9HZksXxxKaOr69i+fgH7tvaxZaJZ2nMBA52JNFYGUF3sR21JMPVlESwbKGf1 + UANN1SmkJXiRHO9OeUkMSxbVMDaygH4Zq7Iz/EhNdKU0J4AFtbEM1EXSUeBBo3C4BYoBXO7BeHMgW3uj + 2bowno0Lk1i/UDGAU1jel85Qbwadbcnk5PniH2Iuz3seBmazMLXSkjqgJxBtZmOAlb2C6TTPpmr90MTS + dvp/j58ign9pANs66alpoN1FA3n4WeAi99xVeYHfV56Vv5La2xwvgU+wBb4hZviGmuIXZir1RcpQY1k3 + wjvEEO9gAxVuwg1cA3Tle6KvBF6BhvgEGeEj3/MNk+MIl/KLssQ32hrfKFuBnWyzxTvcBu8wWRb4hdlL + nRI9FO1KRIwHEdHuhIjGDZNlxQQOjvDEL9gNLz9XqdtOWNvaYWJhjaGpBcZSWtg5YOXoJL/FR649hKCI + eBKSs8nOK1PnfqxvXkBTex+tXQN09Q6xcNEKVqwaYXz9FEeOHefx08d8/tXnfPWrL/nxx6/57feCH17x + u19/xR9/I+WPL/nxVy/4/usnvHp5k/cfHOXBzZ18cH8Pn79/hE/u7+X9q9t5em6KD89s4pNzW3l5bgsv + z2/i4aFVHB+pZ5M8z6nOBHb3JnFyKI3Ti2I53O7NPtFd+6vMOVhppuJQlSn7RZvtrdBjnwodge50WanF + nrL57C7VYHexQDj7njIt9teYcEi03UHRb7tbvNjc4CXazIvlhV50JjpTJhw1U9pjsrseCd4GJPqZkhRo + RqI848RgK5JCrEkOtSEz3IHcWCcK410pkbpbppi/yW5UpbhTn+4lmI7+bchWDGAPFmR7sDDLi8UZXgxl + ego8ZNmV/hQHuuKthWdb0J1izkC6lTptzuJcOwZzrVXDd5ECxQDOtWDgtQGszgOcYUhHqj7NiVo0xmnS + FK9NU6IeDcL1a+ONKBOemB2qq879G+32LuFObxHm+CYRLm8S5foWMe6zVBP4bw3gKK/ZRMj+kR7vEesr + nwlXVgzgzBgj0qL1SQnTVg3gGCW9tHw3M0ib3DDFADYkK1RP/R8lRTGAfbVI9tcmRThzSoAOSbKcqEQG + ++mSIkiWtpAkbSJZwCpNtQAA//RJREFU+LQy7VZ6mBEZ4SZkRpiq+KUBHC/HUrJ8KYgRjq7M9xvmMZcI + r/lq5q/kEMUwNlG1f7ogVdpfhpT5CfZU5HrQUB4kej+QQnkmcREWBHjr4+aoiZuDLq52ivErfb5a6uGm + TIkl2z2dTfB0MsHJVh87K+kPLGWMsJIxwkYbKwslBbRiAOuqBrCRsRYGRrJupo+FtTHWdubYOlhJG7SX + vtoJT18ZB3wccHW1UA1ka/N5OMiY5eloQJC7KdE+FnI/5Lr95f7KfZ82gN9hcfxc1udJ3a4y40KnE3cW + eXF3wIur7Y4cFZ03Gfcm45EzOJAzkyv1xlxvMuVakwnXGo2llHUpr8u6gltN5gILbiqRxK2OnBUdfLDC + gk05Boxlast5jNhUbMFGwXCWHssS5zMUPZsVcXNFn+mwNV2P/dn6nC014U6DDU9arHkqx1QM4HtFor1y + 3uV61jtczRJdk6/B9VId2c+cB602POq0426rNVfrTTlVrseRIl0OlRhxqNKKw7UOHKp35miLm5r6WZnv + +9KKZPZ2RbCi0JmWOCPKg7Qo8JlHptTZLI/ZFATqkBeqTXbQXNGXb5Mb9La0BT1GqxzVrGYHW1zYV2vJ + 8WZrrve78f7qIB4u9+F8tz3b5fxrM2fRFzODer8Z1HjNoDFoBu0x86TtWbOs1JeFJUF0lUTRVSN8caCZ + HVvXc/rkUS5fvsy1K9e4eukSN69d586tW9y6flOWb3D50mVOCL8/efIUly5e4vq1azx7/pyvv/mVagL/ + +ONv+O5XP/Dqy6959eprvv7Vd8IPv+Ljz17y8tUrXn392gD+7Q/85g+/kfJHvv/1d3z3468E30i/+ynv + P3/MhctnmNwyQUNzNbFJkaLZ7LFzMpPxygIPH2dCIwPUKOCyymLZp57WjhaaW1ukX2+nuX2BoIv2rn4G + BpezZPkwK9dsYM3wFkbGtgm2C3YyOrGb0fEdsn0zSkTwtAGspIdewaKhEZavFC2zduNfYeXqTT9jxaqN + 6j5LV6xn2X8AxcRVsGzlhOAvBu/KNZMqVq39BWR99bopFcryilWKwTyiGtEDgyvpH1xGV98g7Z098ls7 + qa1rokz4qpLCOTM7R02DraTDTpcyI1sxfrNITc8kJS1DXVY+nzaB8382fn9CQX4RuTn5ZMp+CnJzC8jP + E+QXUlxUSllZmYrq6koaG2poF13Z093M4kUdojcXsHRxJ8sHO1m5dAGrBGtWCJZ3smqojRWiVZZ0V7Oo + s4yB1iIVi9oKWdhaICh6DUXPyWct0+uLpFzaUcHqPtF3vQ0s76hkqKWUVV016suvm1f2smPdYg5OrePk + jg0c2zbO1nVLGBOdMC4aeOvYcnYppu36tWwcFj29fhXH9mzi8pHdXD68kwv7t3J+3ybV9D23Vyk3cVox + gHesZ9f4CkYWy29aUM+y3hZGRNdtXDskx1nKlvGV7N40wuHdU5w+skP0+wEunDnExdc4e3I/B/dvYduW + EUbletauXszE6Eq2bR5j7+5N7Nm5kc0b1rFooIO83BTCwhQ/x0GN+FVL6T//YgDbvjaAX5u/rw1gV187 + 4WcOsiz9rsDFx3o6PbSPFX4h9oTGuJGQIhxZMYAzA1UDWPGOYmP9iYz0JTDAg+Agb2KiQ0lPTSQvJ5ME + xQD2cJF+21q0mdU0ZNnW2lKNBlZSQevqaKGjNR9dba3XEcF/xwD+X08L+OcrSXy9z5+nEw6c79dnb91s + tpXNYlPRXLaU6jGVry+dsRajGZpMZOkwmau8faPDxhwtdpXqckI6+NOtppxs1uVyjwFPVlvz7U4//nwy + mv92KY0/n07iqx1hPFmndHbSGVaaM5quOR0BHPAGXX6CwHfoCnpPMJeeYG16XhvAHUJYG2SArvPTkI5x + LvUBc2gO0aQzQptF8YYsF6wQArAkeC7Lg2YzHDqPLXEGHMq0VKOAjxdYcizfjBNFZpwuM+WykK0bDWbc + bTHn/S4b3u+24km7GfebDHnYYMjTZmMe1Rtwv1yXe+VSlplxu8ySy2U2nCi2YUeeFSuF0HRHzKNDMJhq + ysI0M/pTTehLN6MjzYj6JH3KY7QoidShNEqP0ggDyiL1KI/UpTxai+p4IUbJWvRmz2dzswHnF1nx0Yg3 + v98Szr8fiOd/HU/gvx1VUmcHc3upGxNCEluTZlAsg0NuzDtkR88kO2IOBZHzKZRz5AkRShfCo8xbEeWr + Q7iPHsE+BgT6GuHvr5i/hvgJAgNNVAM4MFBJ/ysiwEcfHy8jvDwM/soA9vFU5noS0eAzbQAr0b+hIipC + BIr5GytkM1GEQHKMI0lRDn8xgP2UOYDN8XQ1w1mJ9LUTMevwl+hfxQC2EdGjpK1V5i5VjGAHITSuHiJa + fGzw8bfDxV0hKSKIrLWEtGi9fmNaRxXLdi5GWEtp6aA3DSd9HL3M1chfZ18rXP2lAQZKQwu0x10p/aej + f119HEU0SUNxscTeSRqKoyXW9uaqAfxTxK+tQo4Edg5KFLLAXpk3QwSWmyWe3vZy/1wIDvUkXDoAJco3 + MMhxOuJQiQ70c5D7Ob2szluUHkpqWijJScFERfnIdhE3ypw/ryOAlfsybQBPm8Bucn+U6F8fucYgP+kQ + ApwIl+9EBihz77qQ8ksDOCVEjfwtlHMUpU8bwIXJYeTGB5IZ7UdKlLc6Z/BPBnBKvL8czwF3JyNcHQym + DWCBm4uBPCdDfEVMKnM7hwYYERFoRJSQ3nAhMhH+GoT7ziFaEO/7HhmBs8kNnEVx0Eyqw2bSEj1HBMI8 + lqZpMp6nw+4KQ47W6XOp1YCnC834ao0tf5x043/sDYUDMfyf3XH899Fwvmt34eNiSz7MseSTYnd+7Erk + t0vz+c1ILa9GGzjWksiiZCdyXTWJNBJRMP8NkrRnkW6oSYGlIdVOltS721DvYUuVqxUFcg9TlbTMJnOJ + NJ1DmPlc1QAOUFNAz8fbTht3Wy2cLOZibzwHW6PZOJjMwU5KBfaGswTvyWczcZbve1rK90Sk+1lqEWA+ + X46nRazU03RnMzKl/mQ7W5DlaEaOgzl59haUOttR7eVCmYstWZZ6pJlpkGGlQZaNBnl2GhTYalBsM58K + Bx3q3aSPCHNmSIRxvwjmZl8z6qSNNgWa0xBuQV2EOeVhxhSEGKhvrmaLcEkL0CbWR67DXYNgF7k2V20R + Afq4SBuxt1GMXsUAlrYgJF/BtAEsbcTcSAYCQ9k2bQBbWMiy8haotQFW8nuU1OV21no4WuniLL/R3WQe + XoYz8dV/kwSbaQN4e30MH6+v4dfbGvhuqoIXqzK52OrP3iILNstYsCV3DofrdbnYbcadZXY8WuPEg7XO + 3F5lx9XllpwbMmV3uwZryt6kLWUGRSEzyPSdQaIIiTDHGQSK8PN1fBcvx1k4274nz+hd3JT5mq3m4ibP + 0NVWEUOKAayNi7MIIDcDPDxMpN8ye23+ThvAStp1X8X8ldLLTyDbvKUv8vG3lrZpI21Xie6dNoDDlPmB + pf0qc/n6vE4frSwrxnBomLtqAPsr6Z+VFz0ClChgN3z93fDzlWUf2S7wU+DtQpC3q7QdZ8Kk/Qd5WwnM + CPEzJtTfQNqOHmHeugTLcwv1FIEpIrI0w5maAhHjpW60VnvQVusupQvNlVIXqkRUVDnRUGlHZYEZpTmG + lGToUpYp4jnfgK4KM4ZE4KxptWNtoyWrqwxZVqzD8mJdhqvNmWiwY1ObG5tbXdlQb8/acnO57yZM1Nqw + uUXG3F4v9vV5s3uBO1tbHZiqtZ42gCtkLC41ZZUIOsUA3tniygHVAHZkLN+I1RnaKlaKGFuapcWQMv9v + iSFj9bZMtjqxWdrztnY3tsu5t7Y4s73ZmR0idPZ3enK424tDCzzY3+LEwXZXzg4GcHlpKKd7/WSbCzvr + 7NhRZ6+mm95a7yD1zZEdDU5qqqTJSls2lNuqKZ8nFJQ6MFZqx2iRPSPFr/Ha+F1X5MBaWR8uc2S0zE3W + nVQDeE2pC8PlHqwtcxfRZs+SXFsGM61Ykm3HqiJX1pR4CNxZXezK2lJZl2OtrZDvlVuzrtpGnQ94dZWs + VztNG8DNgYw3hTJSH86KylAWFwezsCiEntwgOjN86MpwZyDTlaFsV5ZlOgtfkt+S6sSuRFv2JVhxNNGM + i6nSVrJFgOaY8TjflPdLLHgm53rR6MQzuX+PWhy402TLbRGJt5utuFFnyvkCDc7nzOZWoSbvVxjzssGS + X7XY8GOnvfSnVnxea8jzMm3u52hwJXE2F+PncT5xHidjZ3Mo8h32R77Jwbg3OJz4BsdS3uZogixHi0CP + mKGWp1Le4XLBPBHHmlwvni9CeTbXCkQw584U4fwuVzLe4mr6W1xOfZNrgtuZ7/Egbz5Pi/X4VOrBS3m2 + HzQ7clHq0VSsiFgRr4tC32RzsRF7ai2ET1qwT+rurlpblgvv6QmfRU/YHJYm6rCzypaLPe7cWeTGwx47 + EfDGfNZiwHdthnzfacRXvRZ80m/L80EP7g0Gs1PaTF+SGUX+igGsT16MA9mxDqRHWpMSbklauDVpEVak + RstytAWZMVaqCawYwNlR5mSHTRvAinmcK6gKtaQtzp7eREcWJtixJsuV4WypR8Ifp1JM2BOlzSHhecfC + pw3gU0GzuC6c636CMXejDLgWps3FII1pA9hn2gA+4z+Li6FzuBapyTVlDuCfDODAedz2ncs9wUOfeTz2 + 1eCR7zweKimcgzV5EKLN7SDZN1CegeCy33wuSt9/XimF310MM+B0qC7H5LODPnM56DWb03KMq8G63Bee + /DzSgi9ibPk61p6vo+34QtY/CjXhcaAed33k2brP4aLze1xwflfKdznv9A5nHd/mgut7XHafzRXPOVz2 + mCXlLO4GaPJUOPgncaa8iNLnofCAO55v89B7Js9C5vGR8O+XcYZ8nWTKN/HGqgH8KkKXXyWY8n2ePT/W + +vJdRyRf9KXy6ZJiPl7VxAfD3dweX8yF9cs5MbWWI5tH2Dq6nIH2eqpK8igpzBVxnE9ReQUF5VVk5BcT + FZeAX2AQDk6OmFqYo29kgLaujhoB7OzqQlJyEgUFBcK7EtXoX8XwVaJ9FcNXMYLN5TuGhoZqJLCDg5L+ + 34egoEAZM7yE49lgbavMaelNTX05W7dP8vT9+zx4eItzF45x5uxBTp3azanTWzl5ctN0BPCpDdMG8JkJ + rp6eNoCPbVvGllUdjPTVsqqzXFDJygWCzmpWdNUyOtTJsd2TPH9wld/96lM+++A+Z47tZdOG1axe2c+y + JdMRwF0Lmmhvqfu/DOCh/k4GulrolvtUXZJNSkwwiZEB5KfHq/P7KnM59TRV0NtWzcL2WtUI7pb11qoC + 1SBWDODygmnz95cG8ILuVpZv3sDaE6cYOHqB+t1nqdlzkaKNxygY20P1hr10btyrGsCjU+tZu2KQ/pZK + qlQDOIK0GCUVdThxEcGvDeBgogN8CfaQsdLFWUWMv69w01iaSwvpb65kaWcda/oamBhqYcNQM5MrO9g2 + 1s+ODUNsnlzGth2jnLp8nLsfPeHqy0/Y+njaAO48dVc1gNsvfsiCG1+w4NbXtFz5nIZzLyjbe5OyzWdo + 3X6KJQfPsvn8Fc4+eciDz55x/9kdLl49yt49E4ys6vu7BvDwUDcjr1NADyyQ+99WQ1tjFfX1VZTX1VDS + 1EKN8mfOxp0sPnKO5Vfus/jKEzrPPKD56F0a91+nbd9lFh2+wgbFAL5+m91nz7F99zb2bVzDjlVdjPfV + sKKliKH6HDoK46lMCaIgzpusGG/hA6nqm/hrVy9iYmINI+MjrBkdYcOWLaoB/OiTD/nsu2949sXHXHtw + i7NXz3P+6llu3b3Mp5894ofXBrCSCvq7PygG8J9UA/h3rw3gl39jAL/88j5ffHlbcJ2PXpzn9q1DnD+7 + ixPHtnHp/FEe3bvB7euXmJoYpSg/62cD2MneWDWBlSkwUkXbVJSkUFGaTFFeDKXymxrqc+l5bQAvGuxk + 8bIB1QDedXA/Ow8eYHhqisFVa+hftkpNA71p9372HT/L+m176Fy4lJzSaoprmliyeoyJrbtYu2ETDQt6 + Sc0tJCQ2kczCUtr6FtHc3U9JbSN5ZVUUKRHA/4EBvGp02gAeXj9BS1c7kQkxWAtf1zbWYdZrA1jzF6bv + 30L5TENfGw09LSnnM99wPgbCoQ2tjP9iAAv/NhKtYGiuqUJZ/sn8nTaA/2ICmwgUk89c0baiaZXsVkpE + p9MvjN//ywB2+WsD2FW0uItocu8QKzUNdHpBGFWNmbT3lcm9KaWmJY+i6mS5l7HklCiIJz0/Su5hBAkZ + wSqiknx/TgntIBrQVvSEAhsnOaejDg4uerh6Gavm7t8awLGx3mRkhKmIifNSI329/ES/+1ng7a+8yG0l + 3NuGgGAHguUc4dHuxCb4kqGkbi5Nor4pn8aWQhqaC2jtKFWN383bVjM6vkg1gLNzoikqTqCpKY/ysiRK + CmLolN+0sLuEzsZ02mpSaK9JnkZdomxTom2zWDZYzNrlVUysrmfTWAujqypZ3JNOd0us9HX+lBf6UF4U + KGWItLVKVkjfU12eSHy0G3FRrhQVRLOwr5o1qzvp7CwW7e5NbJTo0HQf4eeRLKgKpSnXhdpkCzqybFlW + 4clYSxBb+qLZsjCBjQNJrB9IYW1/qpp2emlfFr1dGRSXhhAmY7GNkyb6pjMxEk1pYqErkPHJUl/qgq5A + BzMrbflMA2MLpX6IprMTTSdQIoCV/0CmXxpQDGBdNQ20m2gNNx/FvDdU4exphItSP3yMZbsyT7AJngHy + DEXTewWJZgpW1g3x8Bft6KODs5cOTl5a2Ik2sfWYj73bfBzc5+PkqYOLl57UMQMVzv6GuAYKguTYgSYC + U1wDTHEJkHroZ4qbv6kc1xzfUFuCIx0IjXQiVLRtcKRorWhXwhUTOMaTwHDRUaKlHJztsbSxwtjMAj1j + E/SNzeQ+2Mjvs1Mzfbh5+OAfHElCUia5eeVU1bZKXVlAS3svbV19MmYNSP8yxLIVSp2Z4MiRwzx89IDP + vviUL7/6jO+/+4IfvxV895LffP+S333/Kb/59gU/vHrK15/e5sndw1w6NcHpIyu5fGoND69Ocv/iBLdP + jXLn6FoeHhnm/WNjPDsqODbM3X1LOLK2msmuFCY7Ytm+IJYjA4kc6YlgT6Mr2yss2FpizM7SaewWzbW7 + zJg9FcJ9Kw0FBuyu1J9GhQ67y7XZUabFzhJNdigoEpQp+1iwu86R7Q3uTFYrGsaVwSxn2mNtqAg2J9fL + kAxPA9L8jEiVe58WZEZqiJKZTbiucN70MBtyIu0pineiNMmVihQ3GWPcqEp1o1Y1gD0F7jRkutGoGMCC + zix3BnN9WZqtQJn2xJvBdFf6kx3pjrehK8GSvnRrBqS+L86zYyjfnsX5Nn+J/M01Z0DQl22mRv+qyDSi + U8q2ZF1aErVpTdIT7W9Ea6oJzWnmVAs/LIo0JNVPkyjXd1TzN9ThDcJd3nhtACspoWeppm+i/3ySFQPY + TzGAZ00bwMJN42Q9IVjrtQGsRAAbkCLLicKLoz1nEu89h/RAbXKEL+eGG6kGcFqQYvZqTRu+/sox58s5 + lJTRGsR5y7KPFom+8lmAchw9UoLlXofIPX9t/mZFmqn4yQBOkOMkiAZRTN60MFMSAvWJlmNEeU+nhU4K + MpB9TdV0z1miRRQoy9nRVhQkO1CZ501TZQgNFSEUZ3uSGGWjZt/zcNbB3fEn89dALd0UyFjh4WSoTg3n + 5WqGq4PwWVs9bK30sJE+xFbGlGkDWBszM+lfTHWEC+sIZ9ZXA1zsnCylfVlj72QjpR2uno64e0+bFs7O + ZqoBbGOpoaaX9nE2JszTkljpxzOkXeeKZsoJ0KDQ7x1ao+awPFVbtJ0ph+qtubjAmfuD3jxY6M2NDidO + Sb3fmvgWU1EzOJT1nuhXI9GxZtxqMRWYcKfVlLuyfFcpBfdaLQSWsmzLzTZHrrQ4clJ04s4iEzYXGrG9 + zJzt5VZskPVlSfPUbKHtPm/RG/gWKyJmsz5Ogx3JmhzL1eNatRkPGy150mDK42p9bheJNsoRbSsa9mLW + bNG4oqmkrV1rsOJWqz135XqvN9typsqEvflabM9SprSUtlhmzf46F/ZKW9xSYc++Fh9p7+Hs6wpnc6vo + /kI3mhIsKA7WI1OJjnaSOmv/NonOM0kVTZbhO5PswPcok+tbXGDOliZ3DrZ7cKjJgQM1yrzJFtzodeaD + lX7cX+zKmTZztoruHs2ayaK4GbQEzKDBdwatoW/Qk6Cp/ncxXBvMyloZo6oTWdRSwDLhi+NKitpNG9i2 + bSs7t+9g/569XDh3nmtXrnDtskDKixfOc/zECU6fOc0VWb906ZLom4d89PEnfPrpSz7/7As++fgznj97 + wfPnL/jwo094//lzHj55nw+ef8iLj5V0zy959c2XfPP9N2oE8DS+VQ3gT16+4Pa9mxw6uo+Va5dSXVdO + dHw4zu622NibYOMg45SXI0FhfiSnxasGcFNrI919XfT09dLV3093/wBdfQvpW7SEpSvXCSeYYmz9dtZP + 7mFy477XOMCmLYcFB2X7blatnUJJ8ayYv0pa6BWrpxge287oxA7hz9tfYxvDoztYN7Jdxdrhbaxdt5lV + 6zaxWsq/wtpNcsxNqvGsQDn+6nUb5TubVKwb3axieGyLWq4d2cSa4b82f5csG1VTQHf3Kab0YsEAbR09 + NAknratrpKKiipLSUvLz88nIzBQOlUF6ejppmRlkZGVJmU6KrCenpZGufC7bfjKA8wuL1bTZBUopKCos + Uc3evNw89XiK2VtZUSllxWuUUV5RRm1dFc0t9SzobGagv51ly/tYKZpTweoVvaxbPcC6Nf0MC0bW9TEq + GFndy9pl7awaamTFwjoVKwfqWC78aHmvQCkVPdNfy0r5bPXCBtYO1IueamNyRRdTy7sZX9zGyMIWtq0d + 4PDmNRxXXuzdM8mlwzu5deYA10/s5fiuSfZOrWGPaKTDSnTu3s0c37uFgzsnObZvM1dOH+Se6PBb5w5x + 9dguLhzayhnZfmbvJhWn92/h1N6Noh+XMthRQ0NxOrXFmaoWXrWwg/FVC9m1cVg1f88e3cXV84e5efUU + N69M49bV01y7dJLTx/eyV65lav1qJsZXsXXzOAf2b+Pk8X0cPLCDzRtHGehrJy0tVo3+9fJU0j3bqgaw + p5eDcOSfDGBZ9rIT2Ag/sxVI+dr0dVNetPGWflcJBvS2+jmjrU+ArXAj0ckJ7vLsFQNYtH1KIPEJASQk + BBEXF0RYqA+hIb5ERQaTkhRHdmYa8fHRch1uONrb4WhnOw1ZdrCzwcbKAnNT0SgGehjo6WCor6emhdbX + 1VZNYGvLXxjAPC7mX69n8utD4bxY78blPmP2Vs1mS+F7bMyfzWSuBmMZcxlJm8t41nym8nTZUmDA5jwd + thZoC9HR5USzMafajDjeosWFbh0er7Hm+30B/MulJP79bgH/fDGDr3dH8HCNNyfbbdgpJGkkTZPB8Hfp + 9JtBp3R2igHcGzKbnhANKXXpkcG7W50DWJ9aLw2qZVCv9p5Frd8sGgLm0hYyn/4YPZbG6rM0UpfFgXNY + 4vcua4PnsDlGn4MZlhzPseGwEJWD2SYczTPleKExZ8qMuFJjyg0ZJO40yaDUaMStOgNuCu41GPFItt2v + NeB2qQ63ZbC4X2XJnSpbLpXacEjIzmSKAUsi59MRNJMW6eR74/SEMBmxMM2UgQwzOtMMaZJ9auL1qJRr + qxCCUhFlRGW0oUCPqlgd6hVilKrHQI4WW1oMuLDYis/Gffnzjkj+/UAsnEzkf5yK5c8HI3k27se2RgM6 + 0t+kIHoGSaEziA1+gzi5X0mBs0gN1ECZ80IhM1Fe8wkVYh/sraTvNcRfhICPnwG+foYCAwJEDAQLmQwM + UAwUI6nEeni6C7Fw08PNVVeFagB7GOPrNW0AT5u/ZkQEW6qICbUmPtxWNYCVCGAlDXScYgCH2BIeaEuQ + jwhANwvV2FQMKkc7E5wUA9heiQA2wdbWSAiLQloE8rm9kzFOrkoqaCsRnDaqAWznaKjOA2wmAtpMBLSF + 8nabmg5aEUUimEQUmSnCSJbt3EymTWAfSzXy1yvYGY8gITeBjqoBPB39ay9C10pErgW2DtNQDGBL2+mU + zz+ZvwocnKxwdLJWzV8nZysRJLZ4yzGUlLCKARwR6S3wJCzcg5BQN7mfrtIpOKsmcECAE0nJwWRmRkoH + H0lKcggxMX6EhLjj7WmDqxAtextDgQEOSiSwQDGCXZU3692s5Jk5ECbHipRzRQtigt1IkHOoBnCsD9nx + fuQmBZEv51DM32JBSfp0BHBBUgg5cYFChn1ep4H2IV6uMz7KS4ilHe5KGm0hka7OhmoksLuUXlL6uhoS + KMIiTMRedIAB8aH6cl4tWZ5FlO87xPu+LfXrDQrD3qY2ZhbtSXNZlKXFmkIDpiqEBDbbca7Tgdt9jjxa + ZMOHSyz5arUlvxm35p82OfI/9/nDvlD+x5Zg/rTEg0/kOw+EQD5INuTDfGd+05PM71eW8JvROl6ureFo + UzwDcbbkOMwhxkDquuYbpOnNJtdEm1JrI2qdzGlwtaRe7le1iwWFtkL+RVTHmswmwmQWYeazCbGah7/N + PHxstfCWOuIupNZJ9rE31sDGcB52RvOknIu1wRysdWdiozcTO8M5OJpq4G6hhZelkGArHfzMtQgz1SLB + Sp8cF0sK3GwpdLMh39mSIldbSlztKHO1p9zdkQIHc9LNRRCYzCXdYh65NvMpdtCmUsh8vYshLR5mdEjH + vyjMhSXRHiyKcBYya0NbkCXtIt5aIm2oi7CkMsKEIhEZBdL/5YToq+mJYry1CBWBHuishaeTtggEqTci + CpR52SzMdQWKATwNK8UENjPESgYAK1MjgaFqAFuaG0jHL99RRIO0JwdrTewt5+FsMRc3uWe+ZrPxN3kP + f/03SLSVvi3Glq2NsTydqOXzzQ18NFbOjUWp7CrzYDjFmKXR81geP4uxnPlsLtdnb6P0sR1WHO2yYX+H + ufRZ+myo1mRZwXu0KS+vhMwg1XMGca4zCFcifx3exNfhPXyc5uHtpIm7w3x5TnL/reYKNP7KAHZz0sXZ + UQcXJxFGci89PU1l8JXBU4FiAPtY46uYvlJ6SP/jLgOrh7cyn5mSIlr2UV5MUQzgEEdpt26EhrkRqMwV + HOggbddJtrvIdnc1XbtqAMsgr0T/+ge4Czzw8/eQ47tLn+j2GsqyOwGCQB9XQnwdpe3KQO5rKW3NjBB/ + I0J89Aj00ibAbS7B0i8nhhtTmO4ows9VSIoLzVVuNFe7igC0p67UlloZX2pLbKgqMqcs15jiTH2KM7Sp + yNalIV+XThm3FtdbMNxhx0izBWtE4Kwo1WJVqS7jtRZMNtqxpc2ZbW0ubGp2ZKzakpEKMybr5Tm2ObGv + 35sDC33Z1+vFdlnfJNvVNNAVlgILxkpNmSizYFezKwfalRTQjowXGLMmU0c1gFe9NoCXyvi/SsZvNUVy + iwNTItg2tzixpVmO2ejA5gYHqTdO7G5zZ3+nBwc73UVAObO/1ZkTvd6c7vfjiGzf0+jIjjo7ttXYsr3W + js3VtmyqsmFLtbLswIZyO9UAnpB7My73RTF/R4ptGC60ZaTIjuESB8bKnRgtdWJ1gR0r8m1ZI9uGS1xY + U+CoGsDryt0YrfRSDeCVRY4sybVTo3+X5jqwqsiNdWVeDJf7yH5eAg/VMF5T5iiwYU3lNFbK81lT7cJo + ow/rW4MZbw5ltD6MlSLel5SGMigYKAyhL9eP/lxPhvLcWZ7vyqpcZzbkurAny4VD6Q4cSrHmWLIF51PN + uJZlzq1sEcD55twvtuSBnOdBrQO3RPheqrTgjDy3szXm6rxIZ0WcHi/U4WSeJheLdLlTZsqTags+FPH9 + aYsdL1useVFnyiNpgzdzNTmXMIszcXM4HT+HYzEzORT1Dgej3uJQ/JscSXrrLwZw7AzBGxxPfJOzGbO4 + UqTJ9TJtrokQvZIn6wpyZ3Ex8x1OJ78hlOQNTifOkOt/k+vZM7lbqMnDYj2e11qpBvALwY1qazbGzaXb + bQb9AW+KgDfkSJM9ZzpcudTjJULXjXHp+5eEzWQoZCbDCRocq7Pk3oAzTxc78kG3Oc+adfm8SYvvmrX5 + tk2Hr3vN+GTAhsd9zlyWurS92lk1gEukX8z0lz5SeEhmtD2p4VbCjSxICbMkLcJaxkErGTOtyIz7yQC2 + lH0tpv/MCDYhx9+QQkGdfKcr1o4+GXMGosxYl+rAeIbUvXQR5cLr9sZocThy2gA+ETqXk8K5roRrcTfO + kLtRhlwL0+GicLCz/nLPhZsq8/9eDJmrmr83Y3S4ESkIk+VQLW4HzueO3zzu+8zjofc0HnhNr98LmM+9 + EB1uCq7K+HspWJOzsu8Jr9kc95nDqUBNToXocTRUh4NBmuyTz/b6zuWocL/zoXrcijThqfzeTxMc+Fzw + abQtH4eb80GYCQ+DDLjlq8lVz7mcd5nJWed3OOsicH6b08qy63ucd5/FeY/ZnHOfySWvWdwJ1ub9GBM+ + SbLkRYwR9/3ncsvzbe56vceT4Lk8k3vwaawBr1QD2ISvIhUDWI9vEkz5Id+B3zb48ZvuGH69NIcfhmv4 + fqqbb3cs55M9IzzYNcblHeOc27VehOEYk6sGGepppW9BCx0dLbQvUNI+dlJV30hGdg5R0TF4+Xhja2+P + uaUFpmam2DnYExQcTF5enip2U1NT8fLy+jn619jYWJ0DWIn6tbK0UiOD3VxdVQM4IMAfL28P4Xh22Nlb + Sf/uSU1NKbt2beHFi6eCJ9y5e4Vr109z/vwBzpzZwYkTGzl1YgNnT23g4hklCni9CNT1XD46xrGtS9m8 + op3h3lpWtJepkZ7LOypY3l7Jiq46RgY72bdpmPvXzvCrl8/4+MkdLp4+xO5tEyK2F7N8qI+FfR10djT8 + bAD3d7cyuHCBagAP9nbQLwK+q7WWquKsvxjAGXHUlGbTWltMl4jentYq+ttrVSjrrTVF1JXnqFHASvRv + aV6yagQry/WVBXT3iMjfNMnwsVMMHr1Iy74L1O25RMnGE5SM76Nuch8LNu9j+dadqgG8ZuUgfc3TBnBO + QgQZigkcF0VidBhxocHqHMDK/L9B7i74OTupiPbzEV4aQ1NJAX1NlSz52QBuZWpZG1vWdrFr/SJ2b1zK + 1o0r2LFrXDWAb794xOVPP2LLo+csvvqIrjP3aDl1n5ZzH9B65VParn1B0+XPaTz/CdWH7lG57TwtO06z + 9PB5Nl+8xtknj3jw6TPufXCbC5ePsGvnqPqme0e93Kv6Ulb2tjC2pIfRJb2sWdTJciVqtaeJvo5auttq + 6WyuobmxhrKaSoobGqkbXELPpm0sOXqGVVfusvTKQ7rP3KXt6C2a912mY885lhy6wOZLt9h/9Tq7Tx5l + 27YN7BlfxvalrYx3VbCqKY8ltZl0FcVRlxZEcbwPuYoBXJzC4t4G1qwaYPy1AbxufIypbds4ceE8Tz76 + kJe/+ornLz/ixv3bnL96kYtXz3PnzhVefvaYH1UD+HO+++Fzvv/Dd/z2n//MH//1/+N3/00xgP8Ln6kG + 8Jd88NlzPvr8MS+/fKAawF9+eUO+f5UPPzjP+0/O8/jhBR4/uMbzp/e4fvkcI2tWkJ2eJHpBecvcAEd7 + 0W5WuqIhTIkQvpSbFU15SQolBQmUFiVSX5dLd3cd/f0tDCzsYHBJv2oA735tAI9MTbF45Wr6lixn6doR + JrfvZt+x00xt38vA0tVUNbZT0SDPYcWw7LuFVWMbaO0ZIKuojMjEVDIKS2mR9ZbufsobWiiqrqestp7a + 5lZqW35hAHf10KcawKNy7G2snRinvq2Z4OhwrJxs0TLSYbbWnGlTV4n0/Sto/gwl6leN/tUTyL6aBkqU + ryHGVsYYWRphZGWIkYWeLOtgaK6twshCgebPMLHSEiilJqYCMyXKU0pLW9G0ok1sRR/YK3BStLDo5b8x + gB1Emzu6G+DsLZrttfnrJNpeiQIOinJU5/otq0uVe1JMx0C5lKVUNWeTX5FAen6EavwqEcBKJHB+eRJF + ValkF8cRneyHR4A8V1cDNapUgY2jkm1LC3tn0Uyi/72UOYE9TXB1E40q8PWzIiHRj+zsSBUJSf4oc/z6 + vp7rNzDEXo389VVeuAy2JzTSlahYTxKSA8jKjaSkIoWW9lLaOstp7ShjQU814xuWsH3nCGMTg9LvV5CZ + FUlhUTwtLQXUVKdSWhhNa3269H/50ibTaa9Lpr026TUS6GxKls8yWLaoiLXLKxldVcuGYWlLy0qlLSfT + VBNKYY6b1GMXcjK9KMgNYlF/NUuHWigpTiRK9EBkmCv5ebH090n/vWoBzW1FxMR5EBpqR1qyJ7Vl4bRV + hlIvfK4mRfRath1LKjwZbgpkU280mwbimVqYyMTCVNUAXt6bzmB3Ol2dqZSUhRIZ5yjPUhsDxQA208DY + TEegi4kCqS8mojmNRWsaiP40NJuPqaUS9as/DRu916mhdbG0V16E15c6YYyrlxmu3tPR20rktqPA2fMv + cPFSzGAj3HwNcRc94uGvGMOy3Vu+764tz10TWxcNrAVWzvOwchQ97DQXG5f58pl87q6jwtZDSk/Ri946 + OHhJffSW+ugtddRH4KXUS6kbPorRbI5fiCUBodYEKgh/bQhHOxMW4ybLoqlEWzmJbraytcDcwkLuhSmG + JuaYKQawjWIYOOLsLFrLL5j4hFTy8yuormmlqaVT6kYvC3r7ZczqZ+HgECtWr2b95HpOSj/7wbPHvPrV + 5/zqu8/58fsv+I2CH17yux8+40+//ox/+PFjfvjyIZ8+PceNsxs5smuQ3Zs6OLC1g5P7+jm7fyGXDi7h + 1pGVPDq6hvePDfP0yFoe7F/OxU2d7BoqYKI9gfVtMaoBfKAvVjRuMFsq7VlfYMT6PH02FRiwSfjuliIj + tpWYsLPClF2VxuyqMGZnpeE0KvSl1Gdbma7so822Yi0254t+LtRmS7Eh2yps2VzjIjrMiZWiUfpFM7RF + W1ATIprQ34TCAFNyg0zJDjYlK8SUzDAzMsMtyYq0IjvCijzhfCXxjpQnu1CV6k51qis1aW7UpYjOVMzf + dCkzXWnOcqc1212NAF6c68uyHD+Bj4qF8p3+ZCe6E+1YkGhNf6Y9Azl2DCrmb4GDQIkCtmRhjgV9OWb0 + ZpnSk2lCZ5q+wIAuZS7gdCM6UvRoS9ahPcWABakmLMi0pDPblqZ0G8rj5LoDdYgVrqlEACuIdH2TaNe3 + 1LTQCd5zVeM3JUibVDUD2vzXKaDfk3IO8X4aJAg/VQzgtCg9UiJ1SQrRJDFwnhoBrJjHyrRZWeEGZIUp + qZ51SQnQIsFPk3jhwXE+GrLf3L/AUzGBlc+05NiKQSz7BxuSqkYAGwumTeCMcFNSQo1IClIMYB01UliJ + 8E2PMJftxqoJrET+KvP+qsZwuJlq/GbHWAkHslFTP+fE25Kf4iga34u6siCqiwMoSHcjIdKGUHnGni56 + 6v87LnYGuNgKpHRzMFDNXy8XE3zdLPByM5cx2QQnB0PsXgfUWFtqYSl9iGIAm782gE2ltLIxEZ5rhbO7 + PS4eDtL+7AUOeHg7qxHAimHh6mouY7uMOdZacj49fJyMCfNQDGBbuYcOFMfYUiXPrCFOn4VphqzLNWF7 + uSWHGm043+Eo+s2TBwNe3Gx35EKliejd2exNeJvjme9xU4nEbTLmXqsp99tMedhuxiPB43ZTgVKay7ol + 91utuN1qy/UWB8432nGk2pL9NVYcqLVmZ7WVtDMDlsTPptlrBnVOM2hymUGP11usDZ/FJtG7+zM0uVQu + OqXenMd1xjyS894snMulnHc4n/0OZ3JEFxfMV///P1tjKdraVmDHSdGsB0tN2Jary1SmLhuyjdhYaC1t + 24Ut1R4MF9gwUqy8YO7EUqn/A3lONKfYUhFlSW6gEYkumkTZziLY4k1CLd8gzultMnxmUhQ+j+ZkXYal + j9jT6sXRVlfVMD9UbcSZRjNudtnyZLELd/vtONssOrNsvvQhc1mZ/DYLo9+kT8mklTibNQUWTNR5s7Ej + hvH2FJY2pbOoJZ+ellK6Ourp7+1i4aJ+Gc+GGB1ex8EDBzh+9CgnFBw7yuFDB9m7Zw8HhX+dOH5MfWHm + 3NmzXLt6levXbnDzxi2uX7/B1cvXuXrlOpcF5y9c4uy5i1y5eo3bd+5w78EDHj99yPvPnvLJy0949fUr + vvn2K77+1Zc8fv8hx08dlXF8HZ2i4YpKc4mMDVUjgG0dzFQoLxoEhfoSnxxNSXmhcIAmFi5eyLIVyxla + sZKh5SsYXLpCylWsHdnAho07RQccZd+BMxwQPr//0Dn2HjjH/oPnZdtZdu45weSmfapxu2zFBEqk74aN + e9my/TDbdh5l6/YjKpT1LduOqti89YhqIE9tOiD77mPDlEDK9VN7mZjczcSG3fIbdqvGs4LxDTtk+y7Z + f6/st0dd/+mz0XHhlCMbVfNXiQ4eWjqiGr8LupfIbxugubWHxpYFNDQKH61toKqymjJlvuOiQgoL8snJ + ySZDMX5TU1SkpqeRlpEmZaqU6eq6Ev2rRAkr5m9uvnyvqJSi4r+gpFg5XolsL5L1YsoryqmsqpKykrLy + CtUMrquvoU3udXd3O4tERy5b1s+atUOsXTfEuuHFjKwbZGx0iPExwehiJsYXMyl8bHJiiPWjokWGexhb + 3cXo6gWMCS8aWd7GsGi2YdEzw0vbGF3RwSbZb/PoQjau62PTugG2jixi+8gg24YXsVOOfXr3em6e2sP9 + Cwd5fO0EH9w6z4t7l3h++wJ3ReddO72Py4Lr5w5z4/xRbl44xjWllM8eyr7v3z7Pg2unuHlmHxePbuf0 + wS2cPjCNs4e2cfbwNraMLWVBQzG5KaJHY4OoKkxnsWi5TaPLOHN4J1fPHuLO1ZM8uCP65v7VX+AK925f + Eq1zkjMn93P4wDZpP9s5eeIAF+Q6Ll44wZHDu5maGmZBZwOJCeH4+TmrBrAy96+P8gKN9Kkeng54yrK3 + j7M6TaiPnwNe/o54Khlof478lX7Wx1b4l41ws58MYOWlSRvhTI5ExriSmOIrzz6IZGUO4GTR+IkhqgEc + GeFPeJi/aK5A4mMj1ShgpfTx9sDJUfp0BzsVzrLs7GCPg62tjAcWmJkYY2JkKKUyR7Ap5qYmampoGytL + UpOT6OnqYsb/uVvE/7pZyH86kczXmwO5P2QvnZQmm6Tj3JDxDiPSIa1JeIt1ye+yPmse20sM2FVqxI5i + ffZWGEinZsDJNiNOLzDkZKcWF/t1eH/Uht8cDeZ/3M3m/3xQyb9cy1UN4NvL3ThQZ8rWIkNG07QYipxJ + h+8bghl0B73LgHSafWGaAj26Q/VZEGpAkwy0Ve5zKHd/lwqPd6n2eY9a31k0K5HCkdoMxegxFK7NYMAs + hnynDeBNMfocSLfgWLY1BzLM2JtmJAOEIQez9DgqA8l5GaSu1JpxpcaQixW6XK7U4bos35WO+V6jObeq + DblWosvNMkPu19pwr95JBhdb9mUasy5Kg0XBs2n3e4dm37dpDZlNV6w2A6lG9Mt5FBLUImWTkJ76ZFNq + 4kyoijGhOtqQKiErNXG6NCRq05Y2bQBPNehxZsCcj4Y9+f3mEP5lVzj/62g8//NMIv/leDyfbw1hf5cZ + XdlvkRs9g+iQGYQFCQLeJtJvlpAZIUQKofGeT7iXFkGeeuocoX4CH2/lLV59qZgG+Pjo4edvSFCQGYFK + iiB13l8R8y46uAmUUoFiAHu7m6hRwEp6aMUADgu0IDrMipgwa+IjbH5GQqQtcVLGRtgSLWIpUgRgWICd + On+tktpYNTltlbfGRag4mONgb6ZGAdvZGmJva4SdncDRaNoEdjHDRciNk6uZus1CeStWhJGpMq+FlZAa + G+VNWIG1tghpEU1KKevWziKA3M1FFCsRwHZ4h7jiGeSMW4CjmgLaRYn+9bAVUWspYttMNX5tBEoKaAW/ + NH/t7BXT1wZnF1u5HvkNrkpOdwdp0NMpYYNCPAiL8CQ80kvgrUKZqDskxE01fxUob21kZkarSEqaNoAj + IrwJCXLFTzoCZyUVto0RthYiuM11cBQCp6R/DpBOJTzAVZ6vJzGhHsSFuBMf6kmiHF8xgNOjvMiM8SE7 + zo+8xECKUkMpTQ+nLCNKSgWRFCSFkh0fSI50HhnxAfJsPAgPciLQ10aesREuTkIoBUo0sIfAW0ilrwjK + QFddwqXexPoJqQ3RJilUCHbg20KIZ5DmP4PiyDdoSZkp5F+HUREy21ssONrjxLXFXjxfF8LLkWC+GvXn + 21F3fphw5I9T9vzTNnv+624n/s9hX9gfyH+Z8OCbTgse5WhyJWomN2J0+CDPmd/2p/MP6yr49VgtL1aW + c7g+lj4RNDm2M4nXn0GS9ptkGc6hxFyXaqlLDU6mNDoLGXUxp1ZQLAQ53WI+caYiEERgh5rNJNhyDn7W + igGsjY+dPu6K0S6i295IGxsDzZ9hqTsXS+1ZWOnMxt5AAycTbdwsdPGUZ+NlpYuvfCfCWESIpQGFLjaU + uTtQ6qYYvzZUeDpLX+SqbiuUOpNlY0yakO9k47mkm82lwFaTSiHyzW6mdPna0h8ggk4GhaFQF4bCXBkM + c6I/zJGecHs6RSgrBnCtiLmKcBOKFbMw3IjcUBEhIiZivHQIddXCXzF/7XVVUaC8OKBEZahz/apRv9MG + sLWpCAIFJkY/Q4kCtpLPbCx1cbTVwdl2Pi7Wc3CyeBs307fwMnuTIFkOt3yHUOMZpDjOpF2EyubmWO7K + c3l/spHba8o42pHAqjR76Zf1aPGfS7v0gz3RcxlI1GBJhhZr8vUZLTNljYjZRZkadCa+Q23UGxRKf5Uq + xD1GSHuI/Rv4272Bj/1MvBw08HYWweFiKDBS553xtNHC3UoxgzVfp4CW3yz7ONvr4GSvLf2ICCQ3JRWh + Od4yiPpKu/8JXsrE+14ysHqYCUxVuCkp6Xws8Q1U/qByJFjufUioqxBSJaLfRdq0m2xzV9u1AjX1c8A0 + AgJlPUCZh8Ebb29POacHXgIfT08Vfl6e+Hu7EyhiKtDHgSARTMEBVoT4m8q6Pr6eWvi6zyPIR4RlhDHZ + IhyKcxypLHSivsKFhkpnastETBRaUCKiqijLkIIMXQpFiBSmaVMsoqZahElDgTbtpTLONZgx0W3PRJsF + a2v0WFWuyUilHpMiejaJGNvSYq/O8bu11ZENdVaMV5mzUcTU9g5n1fw9stifQwO+7Gp3+dkA3lBpxcYa + G7a+jsLd/QsDeKLIhHXZuj8bwMuytVlRoM9a+d54kx2jDUqaZBvW19mwQcbJ9TXWAls5tgPb5TjK3L77 + OwQifhQD+HCHGwfbhQO0uqgG8K4GB7bV2rG1xo6NFVZMlluoc/9OVtixvsyGiTJrxoqtGS2yYqREMX+t + WSuCTDWBS+X6RKSNlylpe+1YkmOlmr5rlejfvGkDeKTSg7Eqb9XcXVXkzNI8e9nPjmUi4lYXe0hf5stE + TZCKkQpv1ShW0kavLrWTe2sjsGVluRIB7MpYkx8b2kKZaAlhtD6UVVUhLCsPY6ginMHSEAZLAllc5MOy + Ik81unhtoTObCuX3FrpzSsqT2Y6czBKxl2kpotSKK7nmXC2w5EqRBZcE54qlT803ZI/c4x2CXUUG7Bae + tUd41q4CXQ4W6XNM2tX5EuEt5ebcrLLirtzvR/VWPKi14GapgRxXmxMJszkeN4sTcbM5GjuTI3Hvcix+ + JsdT3uNEqpSp73A06U2Oxr/B8aS3OJ32HpdyNbharMONcl2ulWpyOX/2a8zhXNa7HI6fwd7IGWp5OuMt + rhfO426ZDvfL9HlaY86nHS580uXBHalDk7Fz6FTEue+bbC4w5Gy7O7cXBfJ4aRh3ev3YnWXAaMRM1gW/ + zca4mVxpNOGDAWs+FA70Yac+n7Ro8appPt81aPCtLH87YMGni+y43WHDwQqp/3LPuuKNKA3UJVsEeLbw + j/RIO5JDLUkINpexy1w1g9NjrMmMsyEzXhBrpf4JkxdlRX64GQUhphTId8sChKfJ/j3R1gxEWTAYYcRw + giWTKZZsTTVjV5IB+2K1OBI1XzWAT4ZpcCpoNhdD5nMjQo9bgqsyXl4ImM+5gHlqFPD5oDlcCZ/PrVg9 + 7sTpcztaj5vCT2+H63I3WJt7AZo89NXkkc98HnpqcN9zHnc853LbV0kRrc014b6XwnQ4K+c46j+HfcJ7 + 93nN5FCABoeCddgXosWuoPnsDNRgu5xzb6Amx8PlO9Em3Iu35v1EB57F2/EkypLHoSY8DDNWo4Nvyf26 + IhzxnNtsTrm8yynXd17jPU66vcdpD9nuPovT7u9xwWc2t8J0eT/BnI/lXnwYZ8TdIA1ueL3LLZ+ZPAye + y9NwLT6ONeRL4bhfJZio5q8CZVmJAP5tgy+/6Y7iD8tz+eP6ev60o58/Hx7lx5Ob+eTYZu7sn+TKvg2c + 372BgxvXsXlkGRvWLmV07QoRqStZukJ5s3sRNXW15OblERsXK31xgGryKggPD1dTPzc2NqpQooAjIyNx + cXHByclJLZWU0L5e3sJjfQjw8xcOFiTfC1MRGOivRgF7ebsRGhpAY0M1Rw7t5cWHT3n52Yc8f/6Qhw+u + cvPmaS5d2s+JU5s5dmw9p09Pcf7slBoFfOW04Nj4tAEs4nhdTzXLWksEpSxtLROUs6yzhtX9rUyuHuTk + /m08vnWJu1fPcu7EPg7s2sjYmmUsG+yjr7tNTf+sGsAdTSzs7WBoUQ9LBrpZ1NNJX0cz3S21VP/CAC7M + TKCxspCOhgr5rJqe1mrVwOxtr6GzqVyNDG6ozKNWiQIuSKUsP1k1g5Wo4ebaEvoGOlm7eYrRoydZcvQS + Cw5coXHPZco3nqB8/ACNk/vp2ryPFdt2qSmg165arEbPVmYnkZsYSVZCFJmJsaSIGE2MELEaFvR3DGDf + aQO4tJC+pmqG5Pp+MoA3r+xkz8QABzctY/+WlWzfvIqduyc4eekYN57d48LHH7L50TOWXH9K97kHNJ+8 + R+Ppx9SffU7duY+oPfcJjec/pvHEE+r2XqVl51mWHrnIlss3OPf0iWoAKxHAFy4dYdv2dQz2N9Jak09n + bSHLuxsYVSJ/F3ezoq+VvrZqOhrL5L5V0NlYSXtjFU0NVZRWllJUW039wEL6Nmxk2ZFTrLl8ixVX7tF/ + 6gYLDl+hfc85unedYOXB0+y6eJUjly+y//hedm0dZc+6hWxf1MjkgjLWNeWyrCqVgZJ4mjNCKE/woSjO + h8biZAa761izcoCx8bWqATyyfpxN27dz6vwFnn74gi++fsWLTz/m7v27XLx6iStXLnDvzjW++Owpv1Hn + AP6C73/8kh9//wO//+d/5I//+m/8/r//O9/96V/49Pvf8/zLVzz77AUfv3zC568e8eWrO7x6dYtXX9zk + 1ee3+PKLu3zx+QM+efGAj54/4OrFM6xZsYTE2HDRcKbCHaen7DE3E95sqS18yJpE0RglRckqykpSaajP + p0d+R19fM3397Sxc3KcawHsO7GfXgQOMTk2xRIkAHlqqGsFjG7ey6+AxNu3Yy7I1Y3T2DdLY3s3A0pWs + HB6XfYfpHFisGr1KGmjFAK5r76JeoBjAFU1t1LW209DeqZY/GcCt3b1yjiFWj40xJfdwzfg4Nc0N+IcF + Y2FvjZaRLnN1NNT0zpqGOn8Drb+CYgL/MirYyNwQEytjjC2NVBgJ/zYSzWAoWk6BkWgGI3Otn6FEdv4S + 5laKntXESnmpWYFoFGuBjfB6Bb80gBUokZ2uSorlAOGxQRaqAawYb0oksF+YrToPcEFFvNyTPFp7S2nr + Lae+rYC88nhiUn3VtM+xqQFqJHBdWyHNXWVUST1UjGGfYHs1mtTeVfS4wM5ZHzsn0aQuemr0r4+/FZ5e + wqFfRwD7+1uTnBJIXl6MiuTUYPWlSv8A4b2hTmpKaCXlszL1ioLwKHdi4n1ISQ8mpyBGTf/c2V1Nd28d + C3pq6Fso7WLjSnbsGmN0fLFqCmdkhVNUlEB7e7HUp0yKCyKoLo2mrSFZkERLtbSdylhBjCBa2mwi/QvS + WbG4mOGVVUysa2DjWDNrlpXT1Z5EeaEvyQk2xMr4nxDnSHZWMAP9tSyW/ie/IImwUOH+gtz8ROkPm1i+ + upf61mI1cjUg2FY0vCfVZRG0VoWr07fUZtjSlmvP4gpP1jT6s74rgsneGNb3JzDan8zK7kQWtSfQ1RJL + U30MuQUy7oi2s3VW6sNsjE3nq+lZlXk51Xk6TTV/hoGJhgq13ljrYf4TbJSIYNF49nryjAzV6bBcPE1x + EW3j5GGCkhJ6GtPRwMoLA0qpzBvt4qUYtFJffIxxlmVHDwPsXHTkekQDO81XYeWoocLSQTGClXWBfK7C + RYEGNu6yv5smtu5a2Hvo4OCpKxBN5qnMT62Ps5zD3dcA7wBjfIJM8A+1IED0bFDEtBEcHOlEQKizaDIb + 7B0tsbG1Uuf1t7C0wdLKFktrW6ytlT8yXfH08CUqKl7qWCmVlQ00NrXT0d1DT/8AvQMDDC5ZwprhNWzc + MqlO1/DZyw/58Xff8Nvff83vf/ulmvb5j7/5gj//9nP+5R++4r/+8Ut+8+o+H94/wpUTIxzYtIAtIzWC + KnaM13B4ayuXDi7i0ZlhPr4wwacXNvD8xDpu717IodWVrO9MYaQpWrh/NDu74tnXE8POlgDGC0VzpGuz + LlOH8Rw9JnL1WZ9nwFShMVvKTdlWbiZQzDJBhRHbK43ZUWXC1nJDNgvf3iy6bkq494ZsDSbzdNlUYsFU + paM6xc2yTBt6hX+1R5nTFG5BQ4Q1tZFWlEdYUhxhQWGkBQXCWQujLQVWKopjbWVMcaQqxZXaNHfqFPM3 + zZX6FBcaZbkxXTSnYgBne9CR60l3rheDauSvYgL7SOnDgHxXMYB7kh3oTralP9uBgVw7FubbsqjAnkHB + olwr2W5Bd6YJXenG04Zvqr6KBWlGLEg1ojNFX6CnLvekm9GbY0NfgTML8l2oSbYmJ1SfJK+5r+cAfodo + t7fVOYDjveaoqZrTQ3TJDDcgPcyA5EBlvl3Z12eWlPNIUCJ4g3SE8+uQJDw0MUz0daBsD5irRgunBGqR + Jlw5M1xfjqNDqvDqRN/5xPpoEO2lQZTnHCLdZ6uI8phDlGj0GC9N+VxLoKR2lmMHyXkFKUGG6ry9aSHG + KpKVlM+BBiQqJq98ppi8mfIc0iPMSJbPE+U7CfK5Ygj/0gDOTbBTkS38XEFumgtF8hzy5JmkxNgSGWRK + oLcRHs5Kumc9HJXsiNL2lVTPro5GeLpIu3Izw8fdAg83c9xdzXBxNkGZTk55KUs1f6VvMTOVvkOJ/n1t + ACsBLsp/mq4eDmraZ1cPJ9w8XaRvd8cvyEOd2s7T0wpXZ+kfXqeb9rI3INjVlChvSzJC7SiNd6Q124WB + fEfWFNmxodSG7VVKlKwVp1vsudntwv0+D2612XNNSQst9fpMlqIdZ3GzXJsH9QY8ajHhabspH3RO43mn + Cc8XmPKsXba3mfKg2Yw7jeZcb7LmcpMNZ1vsONXqwFFZ3iUacyJfj6WKAez5BtX2M6i2mUGr0xusCp0p + OnI2+zI1uVBmyN1aUx7VGfOgSk90quix3Lc5lf0WR3Pf40ieBoeLDNlfbMKeQlN25BmzTZlfOEfabLYh + Y5lGrM0wYXWGJWukzq+R37sky5ruJBPqInQoCZxPjtS9TH+pV36GJHoaEuGgNf1/o8lb+BnPIMr2LbJE + P1WJ/uvPs2BzgxtH2r040ebCEdHpR6sMON9gws0Oc+51W3K3x5IrbSacbjDgQJUuG/JmM5o9h9FcTcaU + l0kaPdneGcq2ngSmujNY3pJBV00atSUpFOWnUlKYR2V5KQ11dfR2L2BsZJjJ9RNMKdgwwfrxMcaVbDLC + J6cm1zO5YT2bN06xfetmdmzdyvbt29ixYwc7d+xix/ZdbN26XfbbxMapLezatYfDh49w9OhRjh8/ysmT + x7l+4ypPnj7iwxcf8MEHjzl74QwbNo7LeN4mXLmQ1IwENd2zYvraOZlj72Qh9c6BwBAfYhIiKSzJl3G+ + maFlQ6yT61on3Gyd8LTVw9MY27CZbTsPcOT4Rc5fvMPV64+4eOWBnOcup8/d5tSZmxw7cZV9B8+xdcdR + Noo+2brjMAcOn+PoiUuCKxw5dvlnHD1+TcWRY1c5dOQy+w9eZO/+c+zZd5Y9+8+ye+8pduw+LhzkONt3 + HRMc+Rk79xyT/U6qZvTkpmkTeGR8K8MjW9QoYSVNtJLuubNriLrGbsqrWqmobFJRXFpNofDV/LxC8nPz + yM3OUpGTlUFmeirpqSkkJ8WTkpxIamoyqWkCKZWIYAWZ2bmq+ZujpHUuLFLTOiumb2lp+V+hqLSE4rJS + FSWvy7IK4YB19XR2tjOwsIehJQtZtWqIkdEVoi9WMTK2XPjWMsal3LB+OZNTK5mclHJyGRuFj22cknJy + idSfxUxNDDI5voip8QE2jPayfriP9eukXNvLxtEB9m9fywHRVrs2Lmf7xBK2ji1h58Qy9k6t4uj2UW6c + 2suz22d5+fgqX390l69f3OerD+/x6tldPn3/Bh89usqzh1f44MFlnt2X5QfXePb4uooXT27yoXz+9PZ5 + bl44yMUTuzhzdNvPOHd8BxdO7maznK+lrkD60QDpR90ozklk+WAHR/Zu5MmdS3KsGzx/eoMXz27z8YeK + xnmo4qPn93j29C5PH97g4b1r3L99STTVZR4/uiXa/zrXrp7h0MGdjMp9q68rFQ4ZjJ+v9J1St318lDmA + naTvnI7+9fVXAgE9VY8oKMRduI47/iFueAU6TxvAvrbTEN3k6iX9rZICWvpXbz9b6YftCYt0JlaZjiTF + n5TUINLSw0lODiU+PpiYaMUEDiRCEB0VqkYBx8VE4OfjgbOTYgDbq3B1chQ4ybIDdtbCq8zMZEwwlbHB + QsYJexzt7TE1VqZmtZP6lyb9RQ8zuFMGt8v5b2ey+WF7FE+XSodVpcNU+puMJ77B2pgZrIqewbrEN5nM + nMM+ITIHq804KB3tkUZTjiud1wJjzvYacqZHhyuL9Xm+3o7fnQzlf97Pgmfl/Mu1LD7fGcqVQXv2SAe4 + pdCAiQxdNY9/b9DbLAh4g97gd1gYoUF/hDZ94bp0hQmhCNaj3mc+5S7vUeLyFqWub1Hp9S41vu/SFDiL + 7ggtFkfrMhSuyVDQbJb6z2Q4TIMtsQbsTzPniHTe+9Km/8jbmagrpRb7M7Q5WWLExWpzLlYaca5MTzWB + r9UYc6fJktuNljKIyeclsq3MiLt1dtxvcuVSlQP7s41ZFzGXwaBZLPB7lzbfd2j2lzJ8Dp0xmjJQ6KoG + cEemKQuyrWkTEteQZEFVtDGVkfpUyCBSFaNNXbwmLSla9GTNZ6xai8Odxjxc6shXo978eWsw/3Ywjn8/ + ncR/OpHAy61BHOg2pivnLXLkWUSGzSA45A2CAt8j1G+uDNJzifHRJNJbizA16sxQKoYpvr6meIlw9PTS + x0Pg7a2LEgWspH8O8Bdxp7wh6ioE3lFTiISSYlWBjpoW2MvNGG8PI3xEfAb6TEcAR4VZEhNuTZwgNsxK + oJTW6jYF0SJGY8IdiBJBGKSEvjuKMFEiXX8ygB3NcHQww8FeSQX9F9jaG07DQYSofEcxg20dDFUD2FRI + jamZpmoCm1hq/RWMlTerrUU8O/3FAHYLsMcr2AWPIGcRytIofGxFnNiJyLVWByNre1PV9LV+bf7+vwxg + V3db3D3keEpD93NRU0ArkYFBIUoksAeh4Z7SaL3+ygBWUkArKZ/T0yNVxMUFqOvKPMBh0ikE+TsJcbOU + Bii/UUnNYiZCylqej7M5wT7y3WAPub8+cl+9iZdz/GQAJ8m5UsPdSYvwJCPKi5x4fwpTQlQDuDxThHVW + rCCGkrRIClLCKMyIJDc5hIRITzX9s7+PNe5CIJXo358MYE8hlT5OUlcc9AgS0R/hpqQa1lDfokwNmy3E + +20yQ2dQHDWDjuyZrK7WZWu7OUcH7LmywpVHo/68nArntzsS+NOOOP5xewT/tM2ff97hwX/f68a/HXbj + fx7zgJP+/O+DgfzjqAufNBtxI20Op4Lf5kK4No9z3fnNYA7/MFbDjxN1PF9ZLv1KDD1h5uRZzyTF4A3S + 9d4mz2QelXKfGh1MaHUxpdnFTGBKnZSlUm+ypR4kWAixF4EdZqa8jTcXPysNfEQ4+whBdrcywslUHwdj + PWz1tQQigAXWOiJ8teZiozMXR0MtXGUfDwup/xYiZC318BcCHWMiQsLKmFIXeyrdHSh3E5Hlaku1t4gs + P3fVAM6RupNuJWLFXMSGyXyyzTUosdWlzlnEkJDrhVIvFge5sFgGgyGlDHJkUbAjC8Oc6ItwVA3gJmlL + 1SFmlIWaUCTioSDMmJwQI1KkzUaLyA4V0e7roIObEHQnJRrDxlg6eSOs5bdZWYoIsDTA2lzq1N8xgG1k + 3cZUV+qcFs42mniI0PdxnI233Vv4Ws4gwGIGEUKo4+zfIE7KLLeZdCbZsKk5misilG+M1nNqSSGb6iJp + izCn1G0+hU6zKBEBVaGQ3YBZ1IfNpS1WiwVJerTGSz8nxLzQ/02yvN8g2UMxf98i1FHOZ/sOXrYz8bCf + L9ehj5eTKd4u5vi6WuAnz9NLxI+HYgL/ZP466akGsIuDroghbewUA1vqsIer9G0eIohkIP3ZAPYSYeQp + wsjdBGfpw1Qo82XJdm9/azU6wT/YiUAFIc4EKUawYgDLYB0SpsBT2rgbfoo4Eijmb0CAr7RrP+k/veR8 + Xnh5euPt5SODvw9+Uvp5ewqk/QsxCJbnHCLnCA2wlHUjvD21BZoE+0k9ijAhLdGSvExbSvPsqS5zpLZc + xHqJNSV5phRkGpCTpivtVpO8NC0KUudTnD6fugLFANais0xHyL85mxc6sbHLmlERDOuqtVlfq8+WJgu2 + iXDaKmJpe6s920WIbWqwks8sVFN4V5crhwf9ObE0iKML/dnT4cbGOlvGK8yZrLJUjd9dLa7sanZmr5QH + Oz3Z3eDIhhJTRnL1WJ2pw8osbZbn6LBaeXmrxoqJRjt1HuB1VeaMKFM6KFDSSVdYsqHGjs31TuxocWNf + uwcHFNNXBNCBVuX4giYn1QBWsL3OgS2y/2SZBRNyvrESEXuK+VtqLcuW0+ZvoZynyJK1BVYiyqxVA3i0 + zIkN1e6sr/Rgdb49S7Msp9M+FzmxIteBlUUOMrZ6Ml7jy3CFp1y3C8vyHVia68jyfGfWlHgyVuUv9yiE + 9TUhDJf7srbUi9XK/MElDqwotWVlmR2rKpxYW+PGeLM/k+1hrG8NYawxjDU1YayoCmOpYElFCEsrglhW + 5ivfk3MVu7Ku2JFNJa4cKfPgbLk7pwqcOZnnwKk8W84XCAqtOVdkwwkRiQeFV+xM12ND4lzWxr7HmoRZ + rJVnP5ytxWiOFmNSbszTY1u+AfsKjDlcaMwJuU9nBBfKRHCXmXBWBPLJTC2OJM7jSMIcjikQwXw8aRan + 0+ZyJnMupzPmcCLtXY4lv8WxpLc4lfqOiPQ5XJX6pb7wVq7P9VJtrhTO41KRAg1O58xkX/wMdkTMYG/C + DE7mvsuNCm3u1RhyT3jS01ozPulwnjaAG+yZihNu5DqDXt832JJvyNVub95fHsFnq2N4viiE0wWm7Iqb + w7aId9mfNJMHTYZ80msi39fjo1YtPm+ezzeKAVw/l181a/GrPks+kTHnerMF2+U3rkiR/iVKl5IgaS/B + JmQJ90iLsFXnQ4tX5kWTPlQxgDNibciKt5tGnLX69r1iABeGm1MsfWxJkDFVgUa0hZpLH2wufbExS8MN + GIkxZnOiKTtTTNmXKKI8VpsjUZocC5/PqTBNzoRocDZwLpeDNbkWqsWlIC3OqwawbA+Yw6VQDa5FanMr + Vp/bcQaqAXwrQpe7EfrcD9PjYZAOTwJ0eOonpY8WD73nc8drHjcE1wI0uST7nAvT4XjIPPb5zWS7+9ts + 93iP3f4a7JZzbQ/SZHOQBpsEG4PmsU2uY5/w5WORhlyIMeeG/Nbb0VZcDzfherAht+S33o804478viv+ + 2pz1nMNJ1/c44fo2x93e5oTbexxzl3WPWRx3n8UJz5mc95PrCdfjSYIZz5Mt+CDemLtKGmvf2dz0n839 + 4Lk8Fu79ItaQLxJN+DLeiC/DdPlCrvtVnBHf5tjyY403v+4I43dLMmR8r+bP27r5x8Nr+f3pTXx5aiuP + Dk1yY/96Lu9dz5md4xzbMc6BbePs2bqerVsmmZqaZHRsjKGhIdo7OqisrFSjfbOylDmPMikrLROB28ni + xYtVtLa1iuAuVFNBK/MBK2VycjIZInSy0jNEeGeTl51Dfn6uHCeHjMw0EVpJJCXGymdpDC7s5dzp43z8 + 0VO+fvUZX37xghciVB+LcL116zjnLu7k5MkpTp/ZxPmzG7l0epIrCo5OcHTLMjYta2VtdyVDTUWvUcLi + pjIWt1WyvLtRjTLdKuL79KFdnDy4gwM7p9ixaYyRlUtYIiK9u6P5ZwO4Z4GS/rmLpYMDLOnvYbC7k772 + Frqa66gq+ksKaMUAbq0ppbulht72enpaa+ntqFUjgRUzs7mmkIbKXNUArixKV+cBri3LVqOC2xrKWTjY + zfDmjUwcOcmKI5fpPXidlt2XqZg8TsXofpo27Kd7016Wb39tAK8cVKNnKzMTyYuPIluBiNHU2Ki/MoAD + 3ZzxFWHqJ4I02vevDeDF7TWs7q1XU0BvWd3FwY1DHN++miM7h9m9fR07dk9w/MJhrj69xdkPP1AN4GW3 + ntF74ZFqANcev0/FsUeUHHlM6dGn1J55TuvZ57QduUP7nvMsPXKBLZeuc+7JY+5//D4Pn99VI4A3b11L + f3ctLdW5tFfnsaSjhnWLOtTnMtTdRKfcr8bqApqri2mpKZF7V0Z9dRklJQUUVpRS191F3+g4qw6dYOTi + DdZcusPgyStyz87TvfskC3ceZt2Boxy8cJ4zl09z/MROjuwY5sjYQvYtbWZ7fxWTHYWsqU1jqDxeOHUI + lQnelMb70qREAHfXsXbFACMjqxkeHWF4YpxN27Zz5twF3n/2IV9++aXUzY94cO++msrv+pVLPLxznS8/ + fcpvv/+M3/76S3749St+/Ycff2EA/w++/fN//Q8M4LuqAfzVl7f45qt7fP3VA6n3T/ji5WM+/vAhly+c + YuWyRURHBKrc0lK0iq3wTlPht6am83FyMiE83IP8vHjVAK4sz6S5sZie7gZ6elvo7mujf1Evo+v/2gBe + tnYdC5cuZ9GyFawZ28DWXQdUA3jt+JRsX0VH7yL6hpYxuHw1/UMr6Fm8nJrWTnJKKsgqLqe6uZ2KxlZK + 65rU+YHbunvViN/6to6/GMBdvXIMxQAeZVLuoWIEVzbU4RsciLm9lWoAz9NVDF4d5hv9LbR+hqZS/o0B + bGhm8HcMYL2/NoDNtKfxCwNYSeurQJnWSMHPBvBrWNvpqvh/GcCevzCAldIn1JrwBDcyiiKobMqgqauI + lu4S6lrz5V5FExzrgnewnTrvb1ZRDI2dJbT3VdHQUaxGAQeEi072Er78Gk7ClZ3cDHAV7a+kdvYPVqZW + sVRNYAWBQXakpgZTUBCnIjUthJBQZ5TpVcLCXIiK9lBTPivRv4oBHCHr8Un+pGeFkV8ST3V9jtSLOvoG + pI7017NwcQsbplawbeeo1PlBWtpKycqOkDaXyAK51sbGTAryQijMCaCyOEz4cji1JWFUF4cKQqgpDqa1 + PpaBrkxWLytj/bp6No43s2WynXUrpQ9sTaQgx4uYKAvCwyyIjLSXfj+Uvr4GFi1uJ6cgVbi/l/B+0dTS + N/YNtrN83SIa2ssJi/XGL8SOpGRvqiuiaa2Lpr7Eh9ocR1ryRbsJ71zRINyyXfjggnCGO6NY2RHNouZI + OmvDqK8IpKw4gNR0N3wCjLFy0MDUci7Gppq/MIB1MDBRjN/5rzFtABuayT4WSr3RnYa1MhewnjpfsGoA + i5ZXjF8nD1N5ZkoUsAJj1cx3kOfn4KZECSsmsIHs81NUsLK/8l+JYvQrEd862Dhqq7BykPooWsvSXvP1 + spROUv5kAjtrYO2mqeKvDWBtnKRU0kY7euvi7K2Du6/oN399fENM8BXu4Rdqgb9o28AIO/xDHfDwscXZ + 1UrNvGFja421tY3AFiuBjZWSytAFV2dPQkMiyMzIo6K8lgZp1x093fQu6pc6s4gly4dYO7KKjVsmuHL1 + jPRlL/jdn37FH//8K/70x6/5xz98xT/94Uv+8x+/4P/7x6/5t398xZ++fcQXT09y+/Q4R7d2sXO0lu1j + VezbWM+Z/T3cPbuKT25O8f2DnXx7ZxufnB3h5o5etg/msa4pltXyTMeaItnZncje7li2ybNfl2vBUtFr + q9I0WZupy7osPYaz9BnPM2SyxIRNomk2lZuyRTj6ljJjtsrydtFL26vM2FpmxOZCXdbnzGc0Yy5joq82 + FJqoU94oGY6WZVjSl2jGgmhz2qMtaYuxpUU4bH2sLbXCbasSbKiIFyRYS2mrojLRnppkJ+pSFbPXg6Z0 + d+pTXahPcaZRysY0Z+ozXGjK9qA914OuHE8G1Ll/vViS5S3woj/Zhb5kZ3pTHOlJc6A3y4G+HDv6RbcM + iG5R0J9rTXeWOQvSjelINRAYqpG+CjplWYWynKJPd4oRvRnmDIhGW1jsRm+xBw3pduQLX03z1VRTPk/j + XWI93yPJbz4ZwbpkRxiSG21CZpQxqSF6xAvHjvGfS5zvfBKVaF7FAA7RJSlce9oAFj4cH6CYwxo/G8AZ + SupnKZNlPV6+F+MzjyjPeUR6zCHcddY03GTZba5sU4xhJYW0XJO3lmrwqvBTSn2SAwxVJAUYyPn11W2K + MaxE/yomr2ICK4avYvwmKqaxlEp0cEakxbQJLM9Hif7NSrAnXZ5fcqwVKcLV4+XzcDlugLQjbxddXB10 + cLKRsdZSG1sLJUBEHzcnY7zczPD1sMLLw0I1fxW4uZjj7GCMnexjIf2KqZEGxsaamBhrYWSi/Hc6HQHs + 6GSFi7s9bp6OAle8fN2lf/YiMNRbzXTmI23Sw80UN0fD6fmGZZzyczAgzN2E5CArimLtac11Z7DYXXSy + C1MVDuyosWVfrRXHGq253O7A3R5X7rTZc0vq9o0Sfa7mKemX53C7RINHNTq832zIs3ZjnncYqXihoNOY + D9sMedpixP0G0Sq1ohfrTbncYMH5FmvOttlwrNmKndXGjOVoMiTauMV7BrWOM6i3n0G7y5usDpvNlqT5 + HM7V5WKFEbdrTHhQZ8LdKl2uFM3kTJ5o3Zw3OZj3Hntz57EzV4epDF1Gk7RZHa8pmM/qRC1WJ+myPMmA + wURj+uNN6Ukwp0vQKnqwNFCTVNd3iLF/kxAbgd1sQqSvDLKX+2SlibfpXLyM3sXbcAbRdm+T46tBXbwh + S0Tf72jy4FSnl5oF60SdJSdrDLjQYMStNiPuKv/791pyt9eKG12WnGszY3+tPntqjdhbb8GuRnv2tPuy + rT2Yje1RjLYl0F8ZS11BJAXpYSTFh5AgHDwlKVE1FstLi1nQ0Uav6AXFDO6TPnOgr5eF/b0sGuhXMbhw + QMWSxQsFi0Q7LVI11tKly1gytJSBgQEZe7vpXtDD0OIhVq1cxerVClaydu1qtm3bwpGjhzh16hhHDh9g + /dS4jOULKC4rIE10QVxiJMFhfqrpa+tkhp2ThZoO2jfAgwjRLTn5mTSIjlk0tFD68HWMT04yJhif3KRi + /cZt7NhziJNnr3H1xiPu3v+Qm7c/4Mq1x6oRfP7iPdUIPnr8imoC791/ksNHhXOfvyWf31P3uXDpPhcu + CqS8ePmRiguXHnLuwgPh0/c4efo2J07d5PjJm+pxDh+7LLik4sjxX+IiB4+cY+ee42zYuFtN/7xi9fQ8 + wQuH1tK3cCVtnYNU1baTW1BFZk4ZObmlZAvSM3JFf4rGTEohLTlJdGgi2WkpZComb1IC6ckJJCfEkpwY + p6bjTUmZNoLTFAM4I+Pn1M8/GcBFRaXTJnBJGaUlPxnAFT8bwEpZWFysluWilVtamunt7VbN3+Urh1g3 + spzx9WuYEIyNrWRkbClj4ytYP7mSqU2r1RfxNmxc8doMXiblEjZMDrFh/SCTE4vYMDHAhvF+NoiemRwd + YHJkgM0Ti0XHDnNw1wh7Nq9i+4YlbHltAO+ZWiX6Z4ybZ/fz4f2LfPnsFt999ohvPnnE1x/d59WLe3zx + 4i4vn9/mkw9u8dHTG3z89CafPLvDZy/uq/jk2V2eP7nGk7sXuHnlCJfP7uXcyV0/48LpPVw8t58tcs3N + 9QUkxvgRJVyusiSD8bWDXDpzgM+e3+fzTx/z8pOHfPHZY159/oyvvniu4ouX78t2gejEzz/5QPb7gE8/ + fsJnnz3j2Qf3uXrlNDt3TEr76KGoMIOIcD/8lakAfV3U0tfHWY369fNX/kP2JjzCn4goPxXh0X6ERfkK + 9/F4HQVspxrA7j5KemhljmAFlq+nPrWVvthe+LIbcfFeJCb5kZwSLPVH2ndCsBoFHBOtTCcaLFxW2n1C + zM8GsIvztPn7kwHs5uyMs6MT9jbCqcwtRLeZY21ljbOTs3zuLFpOzuviSm5WNoMDC5nxv2+U8r+vl/Ff + jmfxq00RPBxw4nCpFpOJMxiLmcGoYv5KOZb0JlukQz9WZ8apZmtOt1lzqt2C011mnO014Vy/IecGdLm+ + wpAXG+357alg/vVOCv/7UR7/dCGZjzb5ca7Hgt2VemwvNmAq14CRFG2WRc9mIPQd+oLfVQ3ghVG69EVO + G8BtMsjXy6Bd6vIOJdLZKwZwhec7PxvAXeGaqgG8NFKL5eEaMhhoMB6lzVbpfPemmnMo3Yo9KWZsj9dn + c6wWm6Lnsj1Bg4M5epwRUnauwpRzQsQuVsjAU2vG7SZrFZdlIDlbosslIW03a2250+zKpTonDhWYMyHH + WRY6j/6AWSzwn0V74ExaQ2bSFPKekDQNNRVKb64l/YX2dOc70ZJmQ7WQmPIwXUpCNSkNm0tl5Bzq4ubS + njqHlcXz2F6ny4UuC54MOfD9en/+aXcU/+loPL89EM2z9Z7satOhM/sNcuNmEBU+g6Cwt0RkzSFYiFCE + rxbRvtpEClEJ8zci0M8UPxFtfv7K2wXK3LoGeHjriYDTwcdXn4AAIeX+pngpItJFCIbjfKkw2lJBpg1g + d2cD3EWAerjqq/DxMCDA25DQQFMiQyyICrYkSspoQUyoLIdZEq3ChrhIp/8fYf8dX8WZZvviOBMVUM45 + 55yzUM45IgnlLJSFBEgIFAgi55xzDgZMNMFgDMZgg7Pdye3u0zM9c2bmzpwzv3O/v6dK4HafM/feP9bn + rbRr76p6w1p71fO8xIQ5y++ww8vVXI0CdrR7bQALEVFTQZsIjLFXon8FNrb6WAusROBY2xqo5q9iCE8a + wFpCZGZNwkx5M1ZThJEijgRW2hhbi4BxFuHzKwPYQ3njwt9B1m2w97TC3k3Ehosy568plrbGatrn1+bv + f2UA2ztYqgawu+ffzN9JKMtO+Po74qeYvYFO0miV+UTdVQNYnQtYGrqynCCNVmm4SkrZkGA3dZsSAawY + wF4yGDo5mmFvNRkF/NoADvFxJPrvDGBPFfFy/njlnPJdyWFupEZ4qFHArw3gSfN3EnMzoinJjKYsL55C + KVPkuPBg+a1KWlzVAJ6MAlYMYC9HI/ychHja6xEi4i/KRUMI+HQSA6eTFTWDosSZVKROoyN/BisaDNjX + b8vZpS7cXu3Dk00BfLUjgt/siOYfdifw3/cm8q97YviX3aH8+z4//vOoN//rjDec9YczIfzPQ6H8YYUb + D+qNOJM4nb0+b3MkcDbXMzz4bkEOv1sxj28nqni4pIQ9FZF0hJiRbz2VDOO3yDaaSrGFNjV2hjQ5mdIm + RLjFXYE5tW7mlDmbkmcvZFxIc6ylljoHcLCFphAzbXxs9PCR+uduZYKzqQhnY33s9XQEUurqYaerjd1s + LRz1tHCTfV5mxvhYiHA1N8TfXJ8QMyH/spxra065qz3z3O0od7ER2FLp7UrlqwjgLFszMq2NyFJSRVvo + UmipQ4XU40b5fV3edizwdWIgwEXgTL/UnQV+9vRKG+kJtKMj1I7GEOkjAs0olfZbFGhEQYgxeYKsICOS + fQ2J9tAn2EkXHyGcbtJWnKwNcbQ2xc7aBFsbU2yltLNSXiow+i8NYDsTA+xM5bqlDbnazMTXeSYR3vK8 + faYT4/om8c5vkur+Jtneb5Mrz6Y0aKaINmvWNUZycqSM40vL2daRzqJ8fwq9RQBZTiPW+G3iLN4lye49 + 0pzeJdtzBgUivoqELOf5zyLdQ8SckOY5Lu8S5fyu1LGpUtem42k7Ew8ltbO9ktrIFE8RJ17Olvi4WOEj + 7cBH6qWXgy4eCuSaPd308XSVOiv9khIFbGejLX2H0lcZ4iECxUuNArZUDWAfTyVl3d8MYEcXuU8CZdnD + xwLvABu85b77Sj+hwE+ZxzvIhUBpm0qK98BgxfhV5vx1x9fPQ/pKHwIC/fEPCMDb2wdPDx8Z8P2kHw1Q + 4e/jL23eR+Alfa6QgEBX9Y+w8BB7aesi2Lz1ZZ+u9NP6RIYbEx9rSmaqFQXZ1swtFMFebEtpoYWsG5GT + JqI3ReeVAaz1ygDWoKZQh/pCLTpF0Iy1WbFj0J1tfQ6sazFhda1i/hqzs8WanSKWttZZsU3G5u3Ndmyu + t2KdiAjFDN7T6c6RhYGcGArhaH/gKwPYmlUy/q2tkGPqHNnZ5CZwYZ/sO9ThpaZtXl9mzsp8fZZl6bAk + czZLsnUYLTZWI34namwZkc8PlxgyIuOkMt/waIkCM1aWSd2pcmBLvQu7FQO41V01gPf8FwbwtlpH1QBe + 82sDuNhKNYCXF5oznm/BaK4ZI3lmLMsx/8UAXlXmxLpKL9ZW+jBa4MSQ3NNlhY4CZwZz7FQDeKLKW36r + P8vLvRgpdmUw35HFuY4M5TszUuLNynn+gmBWVATKug9Lizzlc85SOrFEns0SJRK4zJmxVwbw+lbFAA5j + oiGcsepwhhUTuDKUJfNCBEEMl/syPNdDNZHHiuxZV+zIvjJXjohoPlTgwMFcWw7l2XJUfv9hEYeHCkQg + pstzFDG6VPrcvpC3aQ96Q3jNW3SI2O1KlG2ps1ggGEwXoZquzcpMPdZl6bE5x4ht2QbszBbBmK3L3nQd + 9qVocSBJm0PJWhxN1uRY0ixOpMzkTKYyh7AmpzIUA/gdNQ30UcGJ1Hc5mzWL9wt0uFKix7W5hlIqwlmL + C0VanC/W4njOdHbGTWGL8MDtiVM4XjidD6r1uV1vyi0R2vdrzHjS6sSn8925IYJ1U5L0HV5T6PZ/g815 + BnzQLePFcBRfjcTyxcIwbpTbcFp5CU9+28UcTR6L+H/RYcSzltk8q9fkRZ0G39Zq8kO1Bt/Uzeal8KJP + Ou25VGvBphx9emO1qA3ToVj6x5wQc9LDlbl/rYkLMiM2wFhKU1lXDGDlzxYHMuPsyXyVfk0xgAvDzYWH + mVAWbEJNoDFtUvbIuQZCDBgWzrkyykD4ozG7k4w5kGDAAdUA1uZIuDYnw2ZzOkybU0GzOBswiwvBmpwN + nIz+Pa1AtivRv4oBfFV47FXF/I2ajBS+GWHAh+EG3As14IF816NgQz4JkuUAXW77KeaqFhcDteX8uhyX + 79kXNINtvu+w3v0tNkhfutVPk62yf32ABhMBM1kZKJB+enWIFhvk+K2hOuyS33843IQTguPyHafk/JdC + TLgVbcmtGEuuhBlw2nuWGvF71PVtDrtJPXB/j0Ny/iOKASzj/zHvGXItmrwfLs94jjzfeDPuSXkzQpdr + gRp8IN9785UB/CjWgM/jjPg8Wp/nIfL8gjT5XK73q3RLvi9z54eGIH7ojud3Swv4/Zp6/rCznx8PreD5 + 4TXc3T/BB3tXcWn3Ks7tWsWFAxs4d2gLJ/dv5fC+nezfu5s9e3arb6dPTEwwPDxMf38/fX196p8UQ4PK + 28tr2LBhPRs3bmB8+Zhs71FNYQXz58+nvb1dfcu1W9DT2U1vd498voee3m46OufT0tpEc2Mtne0trF+7 + SgTfGZ4/e8QP333JD9+/4MWLj3nyRDGBL3D1gwOcO7uFM6c2cu70RhGX67h0UiDXohjA6wcbWTZ/Lv21 + +QwI+msLWVBbTF/9XBa2VjLU1ciKoR62rR1ly+pREdBDrBxdzMiiBQx0tdHRUs/85lpBnRoNvLCvk0Hl + T5qebvrb2+huaqS9rpqKgr83gFtr59LTVktfu3yupVqdB3h+QxlN1cXUVuSphm9lcSbzijLUyN+auTnU + zs2ltb5c7mcXKzZuZM3BEyw9dIne/Vdo3n6RslWHKRvdTf2qPXRs2MXi1wbwkgW0VhYzNzWOnNhIMkWE + ZsZHy+8JJz5cRGqIP+G+nvg5O+DtIMJWROmkARxLfWkB3Q2TBvBIVy1rFjWxeaSDAxsHObZjjMM7VrF7 + 2wq2bFvJIRHu5z+8wokH99l87xHDt57Qd+kBTSfvUHH4FkUHbpO9+4bgJqWH79F05hM6TtylY/8FFh88 + w8Zzlzh99za3Ht/j7ie3Jg3gTSP0dtXQWJlHU3kufQ0Vahrooe4m+tqqaamR+yXba8vyqasooL68SJaL + KC3Iobi4kNqWFnpHlrNi31HWnLvCyvPXGTp2gYF9J+nfeZAl23ezdt9ujp09yvsXD3Ph5FbO71nB+Y2L + OTHezsElDezsK2eiMYvhikQ6ckIpj/NUDeAG1QCukfvbx+joMCPj44ysWMm6TZtVA/jhw0e8+PwFTz95 + wp1bH3L10mU+uHSJuzev/mIA//43L/nxN1/ym59/5A9/fW0A/0+++fO/8PTvDOCP+PzlPV68vDUZAfyl + AiUa+DYvX9wVfMTTJ3c5f/YYiwe6iAjzw0J4sKmxJlbCbRUD2ERgKzxUeelVme6msCCRynnZNDeX09lR + T7vcVyUipKu34/8wgIfHVzKwZBm9i4YYlPs5sWEr67fuYtX6LSxetpyugUE6FyymvXdAjQjuXryElp5+ + SmsayC+voqK+WY0ILqiopq6tU45dKMf1UdvcSkVtA/PqGmls66BzYIDhFctZu3kzS5cvV+dy9g72/8UA + Vub11Xpl+mr8Corx+3f4Lw1gE4wtJ03gSQNY/38zgHUnoRrAOpiJTn2dwer/ywB2EO2t4LUBrKZ/Vkxg + PxM8AkRT/2IAG+ETakVglAMJmf4UVSZQ25ZL3fwCKptySC+IlH1OuPlZ4CN8NDErhHkNOaoJXNmYpxrA + wVGuuPta/AJXL1NcPY3x8DYVXmwzmdJZmePX21xFULA9yclB5OXFqkhOCSYkVJlKxZawcBeiYzyJjPFQ + M+0oL1tGxXqRlBpMZk4URaVJ1DTk06kYwH21KhQDeNWaxWzaMsaysR7qGgvJyo6U9hZHS3Oe1KkEMtN9 + yEhxF37sTkGWN8WCokwv0beeFGd706DMi9iZxfiyCjatbmbbxnZ2beth1YpampsSyc7yJCLCimBlzuQI + B9IywuU31NPb30ZWfhqBYT4EiebOLkqXutfO8PLFNLRXERHvT0C4k1yjP1WV8nvq46grC6Qq15l64Y89 + 5R4sqvFhuCFAxaLqALqFT7bM9aW60JuSbDey01yIFR7i6jEbM5vpUhdm/W8GsO4rA3jS+P3FAFYigpUX + 30VHvjaBlRTQVqJzbRxfmcCur2EyCcX8Vdel7rjovTKCJyOBlTTRjqKJHEUHObiKHhQtpaSStnFU0n7r + YSVaS4GSYnpyWeqnk9TLXwxgzV8ZwFp/bwB76UxCmVdY4OorGtV/Nt7CPxT4BBvhG2KKX5joM9G5Xv62 + osXs1FTQdg4COzvs7R1wsHfE0c4RF0dX3Jw9CAoIJTkpjXJp8/VNTczv7qB3YS8LhwZYsmwhIzJ+rt2w + nPMXj/P8xUN+9/NLfvrTl/z556/4yx9f8g9//IJ/+uNz/uXn5/zzT5/yl+/v8ttnF3n4/ibO7R3g8MZm + Dm5p5PyhXm6dX8qjaxO8uLOJnz89yE8PdvP5hVVc2drBhq4MhqsiGCwPYrw6jK3t8exuj2VTtQ8jORYs + TNRiUPj2sOi3pel6wtF1Gc0UHplvwpoic9YUm4kOMBWYsF700eZyC7ZViU4T3bW52IjV2dosT5vJeJqW + ahwrGY+UtLNDGVYsSLKgO86CjjhL2uJsaIu3piXensZEB+qTHagV1CTbUZPkSLWgJtmRuhQn1fhtTPcU + uMu6sxznRK1sV1CT6kJ9uhuNma60ZrjRnepOf4oHA2meAg96kpzpThDIZ7pS7enIsKM9y5YO0VedOdZ0 + 5drIshWt6aa0phjRnDRp/P4CxQxWDWAFrw1gC/oUA7jYnd4SLxqzHCmKMSFdiez1mM4cz2lSvkec9zRS + ArTVuXvzYkwpiDMXniEcP8KIxBAd4gK1iJf9CfK5BNUAVtI/65Mk/Dpe+GdcgBZz1AhhTZJlf2qwrmoA + JwRpEyf8+bUBHOExgzDXaYQKQlymC2RZyjBXJTJYg2hPTWK9tV9BfqMgzk+XeD/5nleGsGIEvzaAM6L+ + 3gBOFG6vpIBOfpUGWpn7N0M4uDIVTWqMFQkRFkTKMRFB+gRJm/F21cTNYRbOdhrq1Fw2lppYSh9gbTb7 + VYZAU7zcLfDzlPbjYfnKADbHw80SVycz7G0NMZPx2VB/Jgb6szBU5qoXKCawuYW0dTszHF2V6fXscfdy + xdvPA/9gb4LCvNX/PXx9pU26m+LhLOOMvR4uVrPxkjEr0MmAWF8zsqX/rExxEM7iyFLRtKvn2rO50oZd + lZYcqDLnTL0N1+c7c6vFgVuyfqNEn2t5ohVyZnCzeAb3K7X5uEGPT1pE9zTr8ahJl09UyHKDLvfq9LhV + KZqpfDYXK/S5UGnMmWpTTtaacLjOhG1zdRhLe48FkW/S7DuFetc3aHV/mx6/qYxHabEtVY/jRSbyWVOu + VYreEV16fZ4u5wunciz3TQ7kvMWe3Kmil2eyTnT0SJwGC8Nm0B08jZ7g6fSFadATrkGH6LbWcD3qQg2p + CDagVOpajtcsEpzeJdRyCv7mU/AwexN383dxM5+Fq5kmrqYCo1l4GE7F2/BNomzfJttrJjVKZtIcS7ZW + O3OyzZOzba6cqLfiRLUh52sNuNaox535RnzUY8X9fns+7HfgWp8dF7psOdPlwJluN451e7OnzZeNSraB + +hCGqyNoyQ+mLDOY3JQQEuOCiY0JJTY6ivg5MTJWpjC3pJDyshLmlZdSXVlBvWiGxvpamhrqVDTW16to + bpxEo4pG9QXahoZ65s2bN2k0CiorK6mtq6G2tkrKauobauju6WTJ8CBLlw0y0N9LU2u9mtY5KXUOMXHh + MuaHEiB1y8XDVs24aeOgzD+tcAsnGWt9SU6Pp6S8WDjifAaXDbFq7RpWb9jAhi3b2bRtJxuFC+7af4TT + 5z/gg5sP+PD+p9y6/Vg1ga98cJ9Ll+8Kn7/NiVNXOaSYtkfPc+LMVS5dvSfHPxQ84sr1j/ngmkDKazce + q/jg+idcuSb7rj7k/csPuHjpPhcu3uOMEll8+jrHT17h6PHLHD3x/iSOK5HE59i55yjrN+5mbMUGBpes + pKt7iLaOARpbeqit76C0vIHsvHISU3JJEKQk55KYnEVcXCIxUTHERkUTHxNFanwsWYnxZArS4+eQkRhH + qpI9KVFBPCkpCaSkJpOSkUZaZsavDGAlBXQ++fmFKgqU+X8Li1UjWIFi+BaWTBq/BUWF8ixKqKicR2tb + s+jcLhaKvhxaOsCojJfLVw2zQqBEAI8uX8S4YgJPDDGxbolgUJ6FQPjYyolF6pQcKyf65NgeVi7vZsXK + Tlau6GLV8p7JKGDBulX9bN84zA4le5N8boOsr18xwKYVC9ks2L5mCWcObeb2lWM8+vD8ZMTvvcs8vnOJ + jz+8yIM7F/jo9nnV4L1386y6rEb+PrjG44fX+Pj+FdE757hx9QTvXzjA+dO7OH1iJ6de4cyp3Zw9s5eN + 65fSVF9EamIIaUnhNNeXsHndCFcuHuXTj2+InrnNp4JJE/gBL54/VPG5aCfFAP782UO+fPGYb758yhef + P+K5rH90/wanTx+Ua14i7WOePNdogoM88fdzxd9/En6yrPxfHBTsRYTo8ejYYKLnBAmkjAsiak6gcGxf + vAJdXqWBVgzgV3MDe1urJrD7K3j5C5cXvh0a4URUjBuxcd7ECQeNk/PMUTAnRG3rcbERqgEcHRmqTkPo + 6mSvpn3+xQB2cfrFAFbSQCsGsI1iADso5rALzsK1lIxoxfkFDC1azJT/fjyNfz6Wwe+2zeHJMm8uN1mw + J3sG6+KmsCZmCmvnvMHaxDfZnDGVPcXanGux5WK7A+fabTk934LTnWac7jHmVI8+Z/p0uDZizONNdvzm + RAD/dDWWf7+Zxk8nY/holRvHWw3ZWabDjhJDthQasyHHmJUpugwqaURDp9KnRNdG69ITpcv8UF2aZOCu + 8ZlBieubf2cAV/m9R0PQdNUA7o+azVC0DiMxOqyM1WN9nAFb4g3ZlWTO3mQLtdwyR5+1kZqsDHmPdZHT + 2CGE7XCeESdL5bfPNeVcmZIS2pJrDTZ8IDhXZsSJIh3OzjXmUqUVV+tduFjjzOFiG9Yn6jMSqc3CkFky + gMykI2Q6zSFTqQt+h7qIaUKCdOgtsKK/xFkIj5uQLAeqYs2YG6pDUeAsCgLeo0iOLY98l9q49+iV+7qi + aBa7K3U522LKx0vc+HJtIF9vDeP5pkBujTuxuV6D1swp5MZPkQc/RQTL2wSEaErF0yMiQI8oISURAUaE + BplKJZWKpIi3YDsZ5K3xDjDBy1dfRJ0QDSn9Zd1XmWtCRKSzagBrS4UR8q7ASRdXEQQuSumkI2R8tpAC + IQOus/H30lPntgwPMCVCMYPlu6KCzYgMNSMq9G8G8JxIF9kulczDWoiLGU72igGsmL8iXB1FqDgYC+E3 + xE4xexXz10bEjfJ2tJAOK1l+HRGsbDORAVbfcDr6BgLjGRiYzhRh9MoIfhUB/GsDWEkB7R7gJOLYTsSJ + NXbulti6WGDjZI6FjRHmSsrc/xcDWIGSMkWZA1hJ/ezr7yJwVQ1gJVWKt6+S691WINfmJffWzx5lft/X + BrCPCBvlT5HISB8ipeEry77S8JV9QbKsGMC+cl43F0she6Y4WIk4E4L3/2gAh8h6sIjIQGfmBDmREOxM + yv+LAaxEAVfkJ1BTmkZZYSKZQhLCRYz7eVvgJuJQmT/VVYSfOp+IYgA7GhJop0eorSZRjjOIdXuX9JBp + zE3WprnQkAWVRqzpMOfwEkeurfHh4ZYAvtofzm8PRfLHQ9H8aU8Uf90dy7/ujef/2hvDv+0N4z8O+fOf + p3z5Xxe94f1AQTT/fiya71d4cqvGmAOxU9no9hY7RDSeTXTnWUcaXy8r4fnoXG4P5LF9bijzg00ptJ1G + rvl7FJrPYJ6I3wb5va3OJnR4mNEu19Muz7tJMM/NgkInE9KkzsTb6BFmoUmwpdRXa118bPTxtjXGw9oE + F1MRwcb6OOrpCkQY6wp0dHEWuOrr4m1qLATPjABzEwJNDQkx0SfKVJ8MazNKHG2odLOnys2WSmdr5jnb + UuXtQqWgRLbnSr3JtzejwM6EIhtDyoWQ17mYMV8Ie4881wU+TizwdZbSUdbt6JYBoMvLavIapOOv8jOn + 2FtEj7SxfD8D8oOMyBVxkRkowsfbkCg3fQJFmHvLfXCVa3KWuuxko6QSN8fBdhL2iiFsZYqtmSE2CuR6 + 1OhfE2lrci12JrNxMJ2Bm9VUgtxmiEDRFpE1m+JI5YWU6dTEzqRJxGxjvCbNiTosLrJjY1skB5cUsFOe + y2hNLLUJTiRJnxBk8C6+2m/gr/c2QcZvEWr+DtG2U5njNJ14l5nEOM8gymEq4fYirBxmEuygga+9Bt5K + VK9yDXJ/XO3NBVZSF6U9Odvg42KNj7Mlvi6mUhrgrUB5AcVTmZPcCC83ESdOetjJOeysNXCU+6HUaU93 + M9X4VQ1gLxFHHqa/RP+qkRSO+tg76+PqKQLHV/b7WOPpa6NC+TPCR9qmr7+z2taVt2GV9u4XoMxDpaR/ + 9sE/yB+/wAC8vH3x8PSR44Nkfwi+ggD/QCEE/gIf+Zw7QUHu6vzgUREuhARbyX4TAgINCBaEiaiIUd56 + lvEoN0PqbJ4VJTJOFOaZyrrUM2lzGXL/s38xgDUoShMhUSjPpFiTBTWGrOl14OCYH/uH3NjeZcnmFhN2 + tYkI63Bg33xbttaasbXOgh3NdmxrtGZTnRU7Wh3Z3+XB8cFgTi0J42h/EDtaXFkr492KUmPWlJnLZ+xV + 83dXiwsHOzw52u3L/lZXNonAW1VkwEiOYgBrM5wzm3EZE9fU2rJSPr+01JChIj2WFOuzpMiQYekzlhaa + MF5iweqKyShgJQ20agDLufc0KwawfE+DEzvrJ7GtVokAtmFNqWL8msr3SSlYVaxE/pozlmvG0ixjhgVL + Mk1YlmvFWKGSvtpFzu/Dhhp/+T5XlubbM1riokb6Ls6xnTSAq33ktwawvMKbkVJXhgqcWJznIKULo6U+ + rJgnny0PYGyuH8PF3gzlu8k+Z4aLnOWa7Bgqsf/FAJ4QEba+LZw1zeGTBnBNOMuqBDVhLKsOZaQ6mGUV + PiwrV+YSdlJ/49oSO7YItsvy1mwLtmSaiwi1ZEe+JdsL5PnlWjKaoMuCCOEQfm9S5TmFMg+B3xvMC5X1 + mHepT5xBQ9IM2pJn0Jk0iwUpWixO0WZZqohi4TErpL5MJGmyIUlbeM1sDqbpczRNBHHabE5IPTolgvds + thZnsjRk2zSOprytGsAKjqsGsAbvFyjRv4bcKDfhSokBFwtnc75oNueKZ3M0bybbE95gY+wUtiW/wYnS + WcKRjLjdYqGawPfqzXjc5siT+W7cbHBgh9STBQHKHMBT2JSrw9VOL54uCeebpZF8vTCExw0ufFhszI08 + XR6WG/CiyZiv24z4okGbF3VafFWnzXc12vxYNZtvavV43mrJg/kOnJX6tjbLgPmRWlSHGlAcYk52iCVp + YVYkhVsQE2hClL+BWiaFW5Iea0dGvCMZc+zIjLX9OwO4NNSUyhAT4ZDGdAQZ0heoz+JAPUaEc66O1Gfb + HCP2JxpzONGQQ7G6qgF8NELuZ7iOagCfDpX7GTCLs0GanBJOdypwJicEp0M0uKgYwBHaXJRjLsqxVyJ1 + uSbnvBVpxIcRRtwPN+bjcBM+DTflaZgJT8KMeSDXc1Pwfpg+x+U37A/RYnvgNDb4vs2Ex9us8Z7OxkAt + wWwm/Gcx6jeDpQGCwBmMyrFj8l1j8ntWyL51AdpslWvZFazLgSB9zoUYcz3akg8TbLkRK3zdT5Nj7lM5 + 4vY2hwSHVQN4Koc9p3PUexbHZP/p4NlqJPLVKCNuxZryYYwxt6IMuB46m2tBs7gp3Fc1gGP0eR6rz7MI + HZ4GavKp/0w+C5fnmGzKt8UufFvtxzetkXw3kMGPyyv4ccN8vty+iE92LOX2jlGuCi4KLuxewY0TW7l7 + 8QC3zh/m2vmTIt7Oc/Xy+2q046lTpzh06BD79+1n37597N69mwMHDqjbT58+xdlzpzly7DDbd2xj+/bt + 7Nixg507d06W2wXbtgt2sGvHTnbt2iHbt7F580Y2bFjL+nWrRECu5vDBvdy4/j4vX3zK73/7LT/94Vu+ + ++4ZL1484PHj63z44Skuv7+bc6c3ceHURi6eXs/7p9Zz6fBa1QBet7iRpW2lLKjOo1/QV5VPT3Uh3dXF + 9DbMZeH8WoZ7W1g+2CPoZdmiLpYu7GGor4sF85vpVOZqaq5TI4F7VAO465UB3EN/+3x6mhrpqKtmXkE2 + KdGhJEYEUJihpBotp7+zgYXdjfTNr6GjqZyW2hLqKwqoKs2mojBDTRtdVZJN9dwc6srzqZ2bT6sSjdvf + w6qNG1l/8CSjh95nwb4rNG8+R9n4AeYu3UH98p10rN/J4q3bWSn3aGRoAc3lRRQnxZIZFU5aZDjpMeEk + RQYLV/UjOtCbEOUPRgcb3G0s8LSzVucAzomLpUG+s6exgoGWCjUF9NrFzWxZ1sGetYs4uGWE/VtWsH3j + GBs3jbP/2G5O37jEkbt32PrRE0bvPGPgyiOaT92n/OBN8vfcIH37B6RtvUKBLNef+IiuU/foOfw+i/af + YP3pc5y8dZ2bH3/IvU9ucv6VAdwn36ukxW6Ym0tHVan8lhoGOupU07yxskCNjFbujWIAN5QXUj+3UPh0 + NuWFBTQ3N7No2Rjr9x1ly7nLbDj/AcuPnWNU1pft3MWK7VvYtmeL1I893L60h1tnNnLz8Epu7VnG5Q0L + OLuqgyNL69nUni/jSTLduaFUzHGnNNabxsIk1QAeWbKApUsHGR4ZYenYOGs3bJL6fY6PHzziy+cv+OyT + J9y99SHXLl0WXOLerQ/+zgD+zW+/4rc//4af/ukv/Onf/wc//dt/8t1/+1c++/EnPn75ko+fP+HJ5w/5 + /OV91QB+8eW1V7g+uf7yDl9/9THPnt7n7JnDKHNQhwZ7Y6KkqjWcibmpaC4TDRVKGmhPLxsSk4LIz4+n + piaP+R1VdHTV0y51UZkPrqO3fTIF9P597Ni/X+rQBkZWrmax3MeexYOqEbx0xQRrNm1n7eYdsm8tA8Oj + zO8ZoLa5XUXnwkH6hpbR0N5NeV2TGgGcVVxGTmkFTR096jm6BxZR19JGWXWdagI3tM6no7+fJcuXs3rT + JpaMj1NaNQ+vID/MHKzQMtZllr62WioG8KxfQcNY++/w9wawtuhPQ0wsTTG2UEzgXxvAShroV8avmd4r + KJG/un+bvkiFtgplDuBJ6KhQ5gNWYK8YeComDeBJE9gQFx9j3PxM/2YA+xniHWKBX7g1MSmecj+iqGrO + om5+PtWtuXKPogmJccXV1xyPAEuiknwompcs9zCb0uoMMvJj/k8D2Pv/2wBOSgwkOztKRXyCP6FhjsJx + bQgLdyY6xoPoOV4EKaaw6M7YeF9SM8LJyY+lpDyV+qZCOrqV1M+KCaxEADewYmIhG6RtDo90UVOfT3pG + GDm5kVRVppCfF0JCvBOJMpanxNmSkeRAdrITWYmOZCppVJOdqa+MYkF3DivHa9i+uZND+wY5eWI527Z2 + 0zY/g/R0T4JDrYXDW8nvciQlI1J+QyPd/e1k5qfL/ROdHuFHdnGG1LUOlq0aplnqcLTo66AoN/n9QVK3 + E2lrSqKhMpTKAjfqCl3pmufFQK0vC2t8WTDPk7YiFxrynKnOcWFulgv5qQ6kJdgJ7xed7zQTU8upqgGs + /KehpGf9dQSwoanm/wZlm5Y6P7Bi/ippoNU5gEWrWzsopq1i4E7O22wrWl6Bkr7bXtE7ShpvZfmXeiRw + MfoVlOOVzxvIeRQTWF9NLa3AUqmDyrLDbKycpE4qUcCvIoH/ZgBrYu8hWtJTMYF/bQDPxtlXR+rlbNyE + g3gI/1DgHawnUOqqGZ7BFtIGbfELdcUn0F01ozw83NUpHXwUbeXpi5+3n+g4X8KCI0hNTqeysprmtla6 + FnSzcMmA9ItDjK0YYlye05oNY5w+d4hPn9/lx98/53e//5yff3rJn3/6gv/2h+f8wx8+5U/ff8Tvv7rJ + H15e4+evrvDl/QN8eHo5Fw8s4OLhBXx4cYSH11bx+MZqnt1ay5+eHuRPn+zjxfsTXNrcxuq2JBaVBTNQ + 4sfSeUFsbo1l1/wYNlR7szTbnAXxWixM0GYwRZehVD2BLsPCv8eU/zbzRc8UmDJRYCIwZrXyn2eZ6ADR + O9srrdUU0WtydFmeNouxNC2WC78dz1M0j7VoHhsWp1nTn2hFb6I13Ym2dCfZ0JFkT1uKI62C5lRHmtIc + aUx1piHNmUZBU7ozzekeUnrQmO5GfaqLagLXyPGTcKZWUJfmRJN8rjPJVc7vTl+ymwolArhL2ly3kgY6 + xY756ba0ZlrRlmHJ/Cwr2rOtacu0lM8a05RkSKOgKVmQYjCJZCMVajSwbG9P+XsDuL/Ml9Y8V0rjzMkM + 0WGO8M7XBnC8z3TSg3TIizSmKN6SErnugnhrsqJNSQnXJ1E1c3VIVCB1KzFUj7RoY1KFWyeG6pMQqKOa + vLG+GiQKV06WY5ToYSVaeI4yj7CPBpFeswh3n06o61SCXKYS6CxwfJcAh3elfO+VCTxLTQutwkNThRIV + HOurpIfW/SX6V0kJPWnwWqgmr7KsGL9KGujXJrASBawgNcKM5AhT4kJFp4juUIxfXw8N3Byn42g7HTur + aYIZ2JjPwsJMAwsTTaxk/HCwNcTN2QxvDyt8PW3xcrdSzV93V2lLyrKblRpUY2ysga7OVHRnT0dPbya6 + erPQN5SxWvoaK2tj1YRzdLOVNueEt5/7f2EAm+Ah/YOb9C9uMi65WWrha6dDhIwHKcFmFMZYUJssdVF5 + 0Vr06+oSMzbONWJPuTEnqi3V+X/vtDpwt86KD8sMuVWoyc28GaL1pvOwUpNH9To8btbl40ZtPq7XnIRo + vQe12typ0uZG2SzRnqKfSrU4V67DmQo9TlTqcahKly2FM1gmGrQvbArz/d+gxett0ZezGIrUYSLOgJ0Z + xpyaa8nFeeZ8UGXKjRpTPqjU50zRNA7lvcmenLfZmTuNzTmzWJWmwVD0DNr936XR821afKYyP2AmrUEz + aQrWpNpfm2Lv2WS4ziLR4T0irN4i0OINPI2n4G4yBUeTt3EwmYqdqQZ2xlqyrI2TkQbuhjPwMnibINM3 + SHF8h3I5V4/U/3UlVhxucOR0ixMnG14bwPpca9TlbpsB93tE3w7Y82CxC/eWuHJn2JNbw17cGA7gynAY + x/tD2dUZzrqWCJbWRdNRFkF9SQzzihMpyk8mNyeJrIwUNa1wfm4WZaV/M4Cr5pVRV1tJfW3VL6irqXmF + amqrq2Rsm4QyX2xlVQXFJUXq1Do5ObmyXEjJXOH7xfmyXCDIp7yiVDWC6+qrKJXvyshOQZnbV0n7rET+ + KlHlXr4uOLpaqeavpZ2xwAQ7Fxs8/d2Ijo8guyCL+uZ6+gf7mVi3ho1bt7Fjz172HDjMnoNHOXb6Aldu + 3uX+o2c8+exrHj1+yb2PnnPn3lNu3XnC9ZuPVCP4zLkbnD5/nYtX73Dz7qfcffg5dx5+we2PnnH3vizf + +1zKF9xT8JEyX/FL7t//gvv3vuCe4O7dz7l27REXLt7h+PHL7Nt/hh27joqOVLTkIbZu28/qtdtYNrqG + /oXL6OhcSE1tm9yDBrkX1cJ7K0jPLCIpNU+4TjpzEjNITMxiTnwq0dGxRISFERkaQmx4CKnRwpniYshN + jCcnIY7sxDgyk+aQlhxHSko8aemJwjVSSM1KIy07k8zcHEEumTnZZGbnqM9DQW5unnxvPoWFihksKCqi + oLhANYELigooUbIViU5s75xPb38XA68M4KXjixhZPonRFUq5UMoBGUsXMj6xSDAwiVX9sk1Br6CLkfFO + Rkc7GB2bz5hgXJZXjAiknFjew4Y1A2xcPaBGBa8e62ZiTMqRHlYOd7JKsFu43ZmjW7l6fj83Lx+V8iCX + z+7n/TP7uHh2HxfO7OXC6b1ckuXLsu/qxaNcu3yc61dP8IEcf+Hcfs6c3M3J49s4dnQThw9v5tChSRw5 + skXFujVDtLWUUZAXT2lRqujnGraIjrxw7iC3bpzh1q1z3L51nrsfXuT+nSt8dO+qCmX53t0rPHxwg8+e + 3hOt/0jK+7J+i6tXzrJr1wYWLJhPgWjoSKnfyrSAfsr/w7+Cb4ArgUGeavRvVEwQUXGK+fs3hMUE4h/q + hYe/46QJ7G2Lm9dkKmgFLp4WOHso8wELP/KRfj7AHGXqkZBwJyKi3ImM9iU6NpC4uDDmxCpR/5EkxkcR + FhKIp5szLo52uDjY4uxgh5uTA+7Oykt0DjjY2Mh4YiljiBm2Vla42Cv7nOQYR4L8/Jgr9Wbp4CBTvtsY + zLcbQnm8zIsrreYcLdFma9LbbJjzBpvj32ZH6lR2ZU3nYLE2J2tMuNLpxNVuZ8532HCm3YIzXWac6jHk + RI8upxfM5sZyE55steeHYz785WIE//1qAr85Es6Ho/YcadRhV9lsdpYaCczZUWLNZhlMxhJ06A+fTm/Y + NAZiZtMXo0tbqDZNQVpU+06n2OUNCp3foMT1Dcqk0/6bAaxJf5Q2w7F6rEiQzjbJlC3JpmxPMmZnghm7 + BbuSLNg6x4BVobMY8X+L5YFvsyl2JnvT9ThaaMJJ+R1nys24UGXFlQZbFafLjThapMPJuYacrbDgYq0j + F2qcOTLXnk1CfJbH6rAkQlt+s3Ty4bOYHz6DhtCp1IZPpSlBi75CSwYr3Fhc4U17liO1QnYqwvQokoEm + 1+ct8mUQKwl5k8qot2hNeJtFGe+xumAGuyu0uNRpqQ4E98c95Z65cnnIlnU1M2jJmEJB4hRio6cQHPk2 + /mEa0tnqER6kT0SAPqGBxgQHmREWZkdohCMhkU4Ce3xlm4+IRS8/PXz8DfEPNMUvwBQvHyNc3fRU09fZ + URcnBx0cBUqUnbOUivnr7KCNq72mkBQNPF208PfSJdjHkFA/Y8IDjIiQ7wwPNlEjg6PDrJkT6Uh8lAvR + IrT8vW3wEOLi5GCIo73RKwPYCAdZt7MT8WEjYkbEseUr81dJ86ws/70BrIGewTR09N5D13AausbT0TdR + TOBZqgFs+r8ZwC5+0rCkoSmpn+3cLbB1M8fayUwEjakIKQMRYSJ27EzVeYD/KwNYMX+tFWPNQUl7pUT6 + SgOXRq4YwF4+ivkrjcxDGq2c18FZmWPUktBQDzXKVzF5vbxs8JYGHhTsSnCIm7ru5iZETcoAPwfVAA7w + VaKAbXB3tMDJxlidy/XXBrBi/iqYo5i/QW7EBDoR5e9AlJC0OVImh7v/nQGsRP2+NoDLs+dQXZxC47xs + qsrSyc2MlI7CAW/pXFxFHKpQUuqK6PNyMFDTvATazCbUeiZRdu8R5/ImhRHTacszYKTRhs19jpxc4c6t + TT483xvO90ei+NOZGP7xVDR/PRbBX/eH8U97wvmX3RH82+5w/nVfEP922If/OO3Nf17y5H9dDYRr8fzr + yTi+XOnN5WpTtka8y7jTG6x11eZgjBN3G+bweCCL+4vyuNiZxqbiIFqkXhXZz6DQZialNprUiOBtdDKm + zdWUTi9zOn0s6fAVUeJnQ5U8g2IXC7IcTUkUshFuKXXUSg9/Ec2+1gZ4yT12tzLG1cwQZyN9nPT0BFLq + GgiE7Ao8DA3wNzMh2EKeg5kxocaGRBjqESfHF9tbU+3iQJ2rHXUuttQ6ybqzlN7OVAlK3OwokPpS4mRJ + qTzTcntTqh2VCGURbd4O9Mrz7vN2okfqU5eHCCoh7W1ulrTItTS6ybHybOYKyc51E9Lppk22tx450k6z + 5R6k+xszx8OAcBH0fkLGPaW9uMi1OQmhVwxgRzupQwJnexEBiglsY4a9pZAtc2NsBdYm0pZU81cXexOF + rE7H1fJtwj2mkR09m1oRnD3FhiwuNRRxa8xYtQVL5hozWGLCiloXtvdGs3NRKmva4+ktDqBAifi3m423 + /lRctd7Gbfa7uOm9jYfBO/iZvUeA1XQCrWfIvZ9BgI3AVgN/e2387PXwtNNVo5ddbI2kzpvKgGSFq4OS + Kl7Eh7MdPq42+LlZ4+tqhp+7EX4eRgR4GuHvY4KftzLnrzxHqb+ODrNVA9jBTlv6LqnLSipouY/eMpB6 + CdzdTXH6lQFs56gn4kfumYeJOsi6KvMES1+hvn3lay3tWkSVtD1veU6TRrArAYFeMrhPGsB+Qf4yyAdI + 2/fBw8tX+oRg6UNDBSFCCBQzOEDgK8cokQ8eREZ5CflzJyzcnuBgC4KCpF6JGAwN0ScyQp+kBBMy082E + zJkJYTEnL8eIzDQRqomapMbPIitRg9xUDfJTZlKUNo3qgpm0lGqwuNGEzYvdOLk6hGOjXuxbYMeuDksO + dtlxRMbjgx12bK0xZnudBbtabNnZbMs2acO758u+Hk9ODoVwejhcNYC3NzuzWsTSeLGMiyXGbKqxZnuT + A7tbnTnU6cmJPl85nxtba62ZKDFkLE/GuyxNlubNZkW5CWvqbFheaf6LAby4UJdF+XoM5ukzmG/EskIz + ls+djALe0aSkgXYXuLK7yYmdDc7sqHeUUllWDGB7Ns6zYk2pKatkPF4ln50QrCi0YDzfjJFsE4YzjRjK + MGAww4jhHAt1HqIJGV831fmxqSFQfpNiujqzvMyd0RIZd3PtWFLkwESNr/zWQJbP82bZXBeGCh0ZLHCU + fS6MlfkwXuEvpR8jSurmQk8W57kInGS/M0PFDqoBvOzXBvB8xQBW5gEOY6wmlNGacMbqQlleH8Z4XTCj + SjTyPA9G5ypzJSkprK1ZVWDOCmXqiGQ9xpL0WJluxIRc0yp5/uNZJvREa1Af+A7F7lPIdJpCqiDdcwpZ + gVPIi3iHufHTKU+YSWXiDGoTZtCcIHwjQYNuqS+9c2bQHzuDoZiZLI/TYmOyLgezTTku33cyQ59TGTqc + ztDmbJY2p9JncizlPY4ItzuS9A6HlShg4XZnsjW5qBrAJtwot+D9EiMuFOpxtliPMyW6HM7XYEvSm6yP + m8LW1Dc5UabJB43G3Gmz5E6jGR81mvN4vj2fzHfhptShfUo9CBWxHjSFTTnaXJnvyqcLA/lycRDfLAjg + q/kePKu25mmZMV/WmvJ9kwk/NBvwdb023zbo8l2DHj/U6/GbWgO+qTfm0xYrPmx14ITUkZXpBrSK6K8K + M6UoxJqMECtSw6xICDMnWuEjvvpqqaynxtiSFuegpoLOiLEhK9aKvChLCsPNKAsxoTrEmOYgQ7oC9RkI + 0GVJgA7jwbNZF67HjhgDDiYYczTRmCNz9DkUNZuj8r3HIoQThk9GAZ8WgX86UIMTgbM4ETSLY8GzOCmc + 7GyEFucFJ4NmqJHClyL0uBZtyK1oE+5EmfJRpBmPIs15GmnBsyhznsVa8DjGnHuxZlyNMeWwcLrtQZqs + 85/KKp93WOE9lQk/DdaH6LI2ROqQvwaDwokX+gkCZ7I4VIuFIZos8JnGAo93GfKcxri3BmsCtNkWpMuJ + UGOuyHV/mGTPh8n2nJVrPCbHKNG/B93eEbzHIffpHPacyVFf+d3yPafDDDgbbsAFwQcxJtyMNua24Ga4 + Ljfkum/J930UMZtPYvT5LFqPp8LVH/vO4JH81qchWnwRZ8w3eY58Xe7F1w2hfNOdyPdLi/luVS1PJ1q5 + v7qdm+t6ubJhgEubFnFl5ygPz27ji1sneH77Ap/dvc6zRx/x/NMnfPr4iQiyB9y5c0fF3Tt3uXnzJrdv + 3+aBbP/44wd88vhjPnpwj+s3PpB9N9TjPvzwQxF+t7h1/QY3rl3j+gcfqOWN69e49sEVLl28wIXzZ7h4 + /jTnz4nYvHJezneLb756zh//8D1/+vl7fvObF3z77RNefHGfTx5dETF5RMTqVi6c3MilUxu4fHIDFw+t + 4dCmIdYubmK4dS4LqvLoF/RW5tFTWUB3ZRHdNSX0Nc5j0fx6BruaGexuZbCnjcHedhZ1t9PX1kR3WyNd + igncphjALQz0djHYv4DF3YoB3E5PUxMddTVUFeaSppiuEYGqAdzRVMHCnkYW9zazoL1Wjf5trCqkZm4e + FYXK3L/pVBRlyno+9RWFKmrLCmlrqGJhv4j1DRvZePAkyw9dZGDvRZrXn6Bs2S7mDm2ibnQLPeu3M7x5 + K6vWrWZ0sI/G0nwKRICmh4eQoiAyWNpbALEyZkb6uhPk7oincBFnC2PcrM2I9vMiR46vL82hu2Eu/c1z + Ge6qYtXCRjYuaWPr8l52rRlk+5phNqwaYs3aEXYf2snxD85z+M5tdj78lFV3nzF09RM6Tt+nav91inZd + JWvrZdI2XiBv+2WqD96k6/gt+o9cYuHeI6w9dkI+/z7XP7rB/U+uc+HSITZtGmFBtzIHcCF1Jdk0l+XT + 1VBBb1s18xvL1ejfyhLlPuXRIPeoqbyQxrmFVOZnyT3Po72pgaXLlrFt30H2nr3ArnMX2XjsOOsP7GPd + zk1s2S71YM8arp7czMOLW3h0djWPTozzyeER7u5cyPWNXVxc2cz+viIZlxJYkBtEVawLc2PcaSpIYOH8 + KkYGexkeHGBoyWKGlw7LvVjL6ZOn+eSjB3z97HM+f/QJ929Ifb54kZsXpb7eusJXz+7zhx8+4w9SV3/7 + 26/4/c+/4Y9//W/85d//B3/69//kh3/4V5795icefvmSR1885dMXH/P8y3t88eVrA/gDFV8oKaG/vMt3 + 3z3h+fP7nD51kJ7uFgIDPDE20kJff7r6J7Ox0SxMTGZhZqaFi3DYmDm+5ObFUVdfSKeS2rf3lQHcJfW1 + 75UBvG8fO/btZ5XUtdGJtQyNLadvaAl9i5ewcHiUFWs3sm7LTnVO4CXjq9Q00GXVDZRW1dHa08/g2Ep6 + B5fS1NlLRUMLqbmFZBbOlX0LGF6+kv6hYRra2plbVUNFbb1qBrf39cn3jKkvOChlSeU8PAP9MBM+r2Ws + x0yD/9oAnmms9Xf4PyOADTG2MMXI3AQji18bwEoa6NfG72uItlXncVXKV3hlAFvYzlahmG6/hjofr5sS + yamYeIoBrKtGcjp5Gakm8KQBbIirn5FqAPvK+BeR4EpGYZjcm7TJNNCdRRRVJhKd5C3XLDw3wILweA+y + imIoKE9WkZobSXCUGx5+Fr/AzccUdyXds+/kn1CvDWBvH3OBhZoCOiHBX03TrGBOnM8rA9hWLaOkLitz + /gaFOhMc5kxCcqAa/ZtbMIe589JobCmWujGPrr4q1QTuG6hnfGU/azcsZWhpJ1U1uSQmBZCcEkB+bgRJ + ie5ERVgSK2NlYqylmjI1PcGO1Dk2JMdYqQZrXWUUA335rF7VwN5dA1w4u4ZbN3dx9Og43T1Fci5v/IOs + 8PSzxDfYkSTRy+09zXQNdJJZkImvktYvMoAsaftdi7sYXTtKa18Lc9IiCY31Jj0njPrGNNrny++viWSe + 8MTaIjc6q3zoq/Wjp8KL+cInqzNsKE+1pjzNkdJMxQB2JCXOjgB/A2zspmFmORVzK41fGcA6GBprvzKA + /2u8TgOtGsA2r03gyUhga3vdSTi8NoVfG8KTsHNRjGADbEU7vjaJVaNYKR0N5TMGv0A5n4LXUcZWcl4r + OcekCTxpBFuLNlWgRADbeWir5q8Cx1dw8tbGyVc0mb8WrgGauAdp4x6ohWfQbIFo7CAjPALN8A61I3SO + D+FxwYRGBREZGU5MdAxzomMFcWoZGR5FfGwCudm50q8oGQU6WbC4n6XjS1i1doyJdUrq0BHWbhznxKl9 + PHpyk29/+JQff3zKT7+X8ft3z/jT7z7j5x8f8fXTyzz/6CRffXKGn7+6yk9fnOfZzW3cOT/OnUvjPLg2 + wUfXVnLv/TEeXBrlhwfb+d1HO/jswjhn1zewoimO/tIAegu9RSf7sr4pku0tkayt9GRJpqlwcE364xUD + WJ+hVAMWp+gK9FiaKbop14TxPFOW55kIjFgh2mhNiTkby63ZphjAZRasydVnPE2TsTRtxjMNGBNdMJpj + JbBlaZYdg6k2LEy2ZUC4W3+KPb0pDnSlOtEhmC91rC3dmdY0F1rSXyFDieyVMSXNjSYl2lcxgJMnDeDq + ZAc1UliNFpb1hmQ5R4IzHdJ/dKmpn13oTJL1eCc6Ex1pT7ajJc2axnRLmtItaMqwpDnTUtbN5ZyG1CUa + UJdkSH2SAfXJ+ioaUozkvEY0qhHBRvIbjenMsKAnz041gAfK/Zhf4EZFkiXZobrEe89Q5/2N85pKgs90 + MoX/FkSbUpxgxVy57qJEW3LnKAarMcnKvMGK8RusR4Jw4QRZTxfunBZtRnK4kbo9ymsm0d5KFPBskmQ9 + WXR3vHwmRupktK8mEbIvTPhusOt7BLq8S4Dju/g5vI2v3Vv42b9NiLOSGlpJEf0KbjOJcFMihzVUE1iZ + H1iZA1gxf9NCTUgNNxUo5q9SmqrGrzIHsFImhhipJrACJTI4PtiISD99Qn308JN2pJi/dlbvYmX+Hhbm + U6WcgYXpTMxNNARa6rQLDvZGuLla4O1hjY8SAawawBYqPGXZx9seZXo9IxmXtbTeRltrKjo609HRnYme + wSzpZ2ScsZJ2bm+KvYsVrp4OePu5ERCqGMBeBAa74utng4cyVZb0F+7Sj3hI+3ez0sZbxqcQN33m+BuT + EWpEcbQRTaKLelMMRJPrqvPUbi/R51ilKZcbbbnTYs9HddbcrzDiXok29wpncr90Oo8qZ/G4Tlud4udh + /Swe1M4UzOBBjQb3qzS4XTGLa8XTeL9wOheKZnK2VLTVXG1OlGtzqFyTTdnvsDR2Cv1hU+gKeJMOv3dZ + FKHLeIIp65WpenLMOVVmzYV55lyuMuNajTlXqgw5XTKTg/nvsiv3XbbnTWdTnhYTooeHRDO3+L5Fjcsb + NHm9R5toqeaA6TQEaFDmrUmWy0xird8m2OQNNa2zu9EUnKV0NHoDO5N3sTGZiZWpNlbSh9sKHIUnuBrN + xEPvHTy1pxBp+gZ57u/SGqWhpobfUWHO0XobjtVacLzGiHN1hlxt0ud2ixG3O8y402PNg0VOPFzqxsfj + vjwY9+Pe8lDurozl2opkTo+ksWdhCmu70hjpyGCws5D+rgp6OmvpaK+jpbmWhroqWhrrmN/aQLvoiY75 + zSrmy3KbbGtreQ1lXdDSKJ9roLFJiQCuo6Gxlvr6aqqqKygtLWJuWQmVVeVUzJsry8p6EcXC/QuLcikV + XqyUKamJhEcGqRG/Xn6uePi44ObtgIuHHTYOZljaGmGqTBsisLQXTSB1L1h0S2pWChU1FepLPWs2rGP7 + 7t3sP3SYo6dOc/L8Rd6/cZuPnjzj+Vc/SL/+R7785vc8/+I3PH3+HU8++4aPH3/Jnfufcf3WI67ceMCN + u4958ORrHj/7QfA9jz77lsefyrLgydMfeSr47Nlv+ez573gu5efPf8sXn/9OxcMHL7hy+R4HD5xlw/o9 + DA+vZmhwBUNDK1gytJxFC0fp6RmkuamLqqpmCgoqyM4uIS0tX/hJNnEJmYIMYuPSpUwnIVFZTiEqKpqw + kGDCAwOICQ4QrRRGdkwkxYnxFCclUJAUT56aFjqB9PREMjKTSctOIy03nfTcLDLzc8jIzSE9K5P0zEx1 + 6iMFijmvTIWkmMAK8gqkLMqjoKRAxdyKuTTIc+3s6aBvYQ8LBxUDuJ/hsQGBlOPKODrA0uX9LFshy6/K + ZSv6JrFcQY+gW45rZ3hUMDJftE8LywSjy+Yz9gorRjtZvVI0pGi4lSMdLF86X9DJ+JB8ZqBJ9G09K5d2 + sUO01+F9azlxeDMH96xj/641HBCo5e61Kg7tWy/HbODw/s0cPrCZo3LskYMb2b93HXt2r2HPngkpV7Jz + 9wQ7dq6axC6lXMmqlQN0d1VTI7q7sb6EgQXNrFu7lAMHNgkP3K5Ox3Ps2E5Ontgtemo/Z08fUHFGls+c + OcClS8f58PYlHj68wd07V3n//VPs37+N0dFF1NaVkZAUqZq8r/2g1/ARKFlifaXuK1HAoRF+hMcEEhEj + vEZBbBBhguBIP3ykn/Xwc8Rd8ZAUA9jLBhdPK5zczXB0U6bwMFKnX3Fy18PN00jak7nwVjvh0a5ERPow + Z04ocXPCSE6IIiEugiB/b1wcbXFxsP7lv3R3Jzs8nO1xc7DD0cYaBytLbMyl37e0wMXOVo6xw9nOhgBv + T0rz8xheOMCUj5Y4cGehPeebjdgvHfaW5HdYGzWFjXPeZFfadI4W6nKyTMlbb8qV+bbc6HXlep8rF7ts + OddpyZluU052yyDQPZvT/TrcWmXG0x2OfH/Um5/OBPGnM+F8vdefG8PKmzDa7JZOfUeJAbtLzdlTZsfO + UnsmUg1ZHDUZBTwQo0V/nB7dMfq0SSdf6fMeRS5TyHeaQpHzFMq93vrFAO6I0FQN45F4Q1anmLIlw5od + GVbsFoKyK8mM3Ynm7E21Ynu8CStDNBj2fosl3lNYEz6dncl6HMo35XippQwelpyttFInn78kOFFmyKHC + 2Rwr1edkuSlnq205U+3I4TJ7NmeYsjJej5EYPZbE6rJojo6QQG3mx2jQHDuLtmQdFhRbsazWk9G6ALpy + nWhMMKc60oBSJQLY5y0KfN+gJHAKFaFTaIp5m76UdxnJepd1+e9xuF6fSz02vN9vz9leK453mzFRMYO2 + TPlMyhskzJkixPlNAiKmERiuRagQoRAhHIHKPBIBJoRF2kvFk0ozx5XwWCf8gkzx8TPAN0Afv0AjEWtm + IurM8fE1wcPDSDUFXZz0cXIQ8WknZN5WiLySYtVxEooB7OowS8iKJt5us9W5KoK8DQjxM1RTTocFKSaw + uZoGeo58d0K0C7HhTgT6WktlNMHR3gAHOwM16leFnRL9KwJERI2ViBsL68kIYGW+X2XZVgiPAgsrHYyE + COkZCJnRfw8dQykVE1iJCJYBWDWAlYhhF/kOD2VuJGlQfrZq5K+NuwWWTsZYOMp57IwxszHE5NXb2ebW + st3GRMSOKZZSKoavre3fDGArJa2uLLt7KBHAvzaApfF6Ts5f4+gkx9vL97qYEhjoInDG19ceT/luDw8r + Ect2eEsDd3Y2UyOe3dyUFLV2BEoHEOjnLETOVk196yzn+K8NYC/mhIiYDnQVwuhAuI8IbE9LIa9WxIe4 + kBHrQ15iEMVp4ZSkR6om8NzMGMpz49To35YqEU7zMinMiyFaRL6fEvnoZoirqwFuIgg9hOQphpyvCD5/ + SyHEltOIs3ubTPc3pa7OYkwI3cEBV66s9ufx3jC+PhLOH07F8o/n5/CvF6P417Oh/Msxf/7loC//fa8P + /32PlIJ/3ufFvx335D/O+/D/u+LF/7oexP99I45/OhnL85XenKsyZU3oOyy2n8IyIb9bwy14vyqUm52J + XO5M4VBDrJBKL+qEJBdKnSty0GKugw61ziIqBC3SUbZ7mdPubU6rlE3ellTKs1YM4GwnC1KEdETZGBNq + LW1BSK+vwNPKEHcLuXYzfSFpUs/1df8OLgJ3Y2kbZsaEWJgSaW5MlJERcfr6ZEpZb29Pu5OIISd7Whxt + aHKyod7VliZfEVVCeOa62lDiaEW5PM8KKWucRCy52dApZGeBPOs+Oa7XUz7vLp93saTByYxaJ1OqnIyY + J9c0V4h3oTybDCctUpy1SHXXIc1TjxQfERJehkQ46xEkhNzLWhs3ZU4YqccOloY4Sj11knrqbG+pDgJO + UiqGsKMSFaxEAkvHb2OmpH7WE0i7NtUUTMXd8g0RMu9SlqpDf7UFG3od2TPozKGlrhwa9mBHnyOb2u3Z + 2uXJroURbOwOZ0mVL41pjmT4GhFsPRs3gxk4zJ6Kve407A2m4WQ0Xe7xTDyttfCw1BDxoIGHLHva6ghE + UNiJiBE4KZHLtsbYS9t7bVy7yP10l/vpK6TRX9qFt6upLBsT6GNKiL+0iwAL6UvM8PVSjF4lhbmuXKMW + DtaaIo6kj3IyQJnb2t1NBIzA1dUYJyXts5TOUtqLqHFwkefuaSoDrhLhYC6lAukzvERIySCsvNjhI21T + mec7INBd2rOXlK8igAP9ZID3w9PHWyDrAUJ4A0MEQZMGsBA830Bf6Wc9CQp9ZQDHuBMR5URomDUhIaYE + hxgSGmogA7kBCfEiHNNMhcyZkJtjQnamiFh5FklxM0mKFQGcMIOCNEHKNIplXKgtkHGuTJOlraZsG3Lj + +MpAjo94cWihE/t7bDna48jxXmeOdslzbLRkb5MVe1vt2Ndmzx4RZPs73TjU68XJxcGcHlIigP3Z0ezI + RLkJozK2jwvWVZqwpd6KnS0OqvF7YoE3R7rd2Cmibs1cQ8YLdBjO0WREyol5pqwVkbeiypyRcmOGSw1Z + mKfNgmwtgdSpHH0G84xZVmwh45YdWxpcJtNLN7uwo8GB7XWOAoe/M4A3VFiwukTG6HxjVhTI+KoYyPnm + jOWZsizHlCVZxizOMGBRuhFD2eYsU6J753mwqTGAzc3BrKr0ZqzMTUovlld4saTIiaWlLkzU+rFGxuDl + sn24xInBQnvV3F1a4spYhTfjFX6MlvmwrMSHwQJ3FuU5sTDXUY5zYqjYiSUlDiwrd0adA7jen3WtIaxp + CmZlfRBj1YGM14awvCGY1U3hrGoMYbzGl+XVXoyVOzGcb8kSeb6LM/QYSNKmb46G8AQNFibOVv8gWphm + KOO+AfXCRYp83iRF+E2M3RQiHKcQ7TGFOb5TSAp+i6zo6eTPmUlx/CwqpG+uidegNm4W9VJfGiLeoyns + XTpD32NhxAyWx2qxR+rVcRHEZ7KNOJMlvC1Th3Miek+lzOB44lSOJL3LkeT3OJIylaPpMzmZpc3ZfF3e + LzbhcomZCHARqAVGnJLyRLHwtKwZrE98Q50SZGvam5yYq8UH9cbcb7XgQYs5j1oseNxmy4Nmez6otRTe + pM9oxJsMiVjfnqOtvhn+tM+Hlwu8+K7Xm99Kv/JDswPf15rzuzozfmowEejzmzodftdswG+aDflRhPEP + zSZ82WrOx62WXG+x42iVNSuzTGiPM6YyyoL8UBtSgy1JDrckPkz6/QADwnx01TIu1JTkKGtSYm1JjbYi + PdqarBgrCuRzReGmzAs1pi7YiNYgfXoDhMMF6LDUX4uVSpStkko5Sp9D8j3HEgXCLY8I1zsSqcuRcB2O + hc/meJg2J0K1OR6owbEgDY6GaHIkVJOjwkePK9HCUVrsDZ7KAeGoZ6P0+GCOCTdjRejHWHA/2pJH0RY8 + kd/yWawFzxIseZpkw8NkG64nWXEwQp/1AZqM+k5n2Gc6YwFarArWE04u7SLChKHA2fT6zaTTdwad8v09 + obPpDNKkzWsare7v0OX6Dv2uU4XrzmRdwGwOhZpwSe7B7RRH7qY7cz5cj2Pe0znk9g4HXN5mv6sSATyT + I15aHBeOeCbShLPRZpyOkPoTbsj7USZcjzblloJwA24Fa/GhXO+DiNk8idbnqdyXJ8EafOw1lQce7/KZ + 7H8Ra8w3mXZ8VezGl7VBfNUWzVf9WbwcLOThohJuC24ureTqWD0frGrl9pYBnp1czw+3jvPDR1f49pO7 + /PDFZ3z35Zd8+fkLEezPefbsGc+lfP7sM548eSKi/lO++OJzXr78gm++keO+fMGz55/x+efPZFnWX77k + 5YsvePnFFyL0n8k5ZJ8C+fzzp495/OhjHj28xycfCx7d5emTB+q8vz9+/5I//fwD/+3PP/KHP3zN7377 + uWz7lJef3+XhvfNcPreTCyc3cenEJq4Izh+YYP/GQVYvamJpWxmLagtZXFfM4vpSFjeUCSpY2FTF4rY6 + hrtaWNLdylD3fIZ7Oxhe0KVGACsm8OK+DhbK9gU97Qz0KumfF7BkYIDF3b0smN9Od2MT7bWKAZxHemwE + SZGTBrASAbywu+EXA7itvoy6inyqS3MoL8hQUVmSTX1FMY3zSqUsoa6shLaGGhb197J2w0Y27z/Kqv2n + Gdx1kpY1eyhfuoGywZU0jKxl0drNrFi/mbVrJhhb2ENdYRZZUSEkB/mTGOxHfLAPsQGewk2dCRGO4+9s + hbuVjNPm+sIDjAj3ciJzTjB1Jel01RXR11jE4vYyRntrWb2wifVL2tk02sf6kX5WLhOsWsL2fVs5dvks + Rz+8xb4HT9h09ymrbjxh6OJHtB+9Qd3eKxRvOUf22pMUbT5D9a4LdBx8n4HDZ1m0ax+rD+7nyMXTXL39 + PncfXObC+X1sXDdMX0cNDXJvaooyVRO4rbaU9qYKmuR5VZVlUV6UTlVJDg1lBTSXF9IkZU1RFrXFOXQ3 + V7N82SL27d/ByTPHOH7uKPuP72H/4a0c2LuGo3uXc/HgCu6emuDp+VV8cW6UF6eX8PL4Yj470MPD7a3c + WVfPheESGX/jZXzwo3GOA7UJ7rQXz2GorZzlCzsYWdgtwryHoYW9rBof5cyRwzy5+yHfSp396uP7fPzB + RW6fP8Hdi8d5fPMCPzy/y5++f8Iff3ymmsA///FH/vKPf+Yv//Iv/O4f/omXv/uZx19/xwNpC49ffsbT + Fx/z2Zd3eP7lTb5QjN8vr6h4/uI6X7z8kG++fcTTzz7kxIm9dHTUq39uGBpooKs7HQODmbIs2stIINrM + 1sGA0Eh3svPn0NBcQs/CBrr6G5mvGsDNdC3oZHxiOdv37mbb3r2sXL+e8dVrGB5foc4D3LVgoZTDalpo + JQX0uq07ZP8G+Xw/ReXV5JXOo66ti4XLxlk8spzuRUvUFNCJmbmk5RXT2jugRhQvWjpKc0c382rr1Qjg + WsUA7u2Tz4yq36lEAM+trsZL6qyprRVaRnpoGOhIqYuGoQ6zfoWZhtp/h9cG8GxZnm2gRAAbYGxhjJG5 + kcDglQE8af5OGsCTOnMSomtF45oqLzi/wt8MYB0Vr43fychLJXWv0SsoRrC+QNkmfF+0uhL56+xjJBC+ + K1rfJ1SJALYiPN6Z1LxgyupSmb+gnJ7Bampac0nJDSUg0hHfMFsi4j1kPZyswhiyimJJzApVI4C9AoT/ + +ltKaYmHn7lq/nrLekCw6NVXBrCPr4UKxQCOT/AT7hquIu6VARwYZK+W4ZGuwns9CApxJCzCldT0UDKy + I8nNj6W8KoOWtlJ6++sEtfT01bBA6svo8l6WTwyo6aBLylKZM8eHmBgP4cleRETYEB5qRnSEOQnKnJlx + tqQl2JMSZ0NCjIz9CXbUVsUwuKiUzRs6OHZ0jNu39vLJJyc5e3YjC/rnEZ/ki5e/NS6iFT0DnKTuzKG9 + r41uaWNZRTn4hgfgHxVE1txsepb0MrZhOW3984nLjCUs3p/03AgaW7Lo6MqhsS6askJPKvJdaSr3pF14 + Z2uJG/U5DpQliw5NtGJumhMlGW7kJjuSILzD02M21rbTsLKegYXoIjML7VcG8GwMjJR5f7UwMtUWKKVi + /EodU9bNZmMies/MSnmBQB8LGwOpL6+NYH2pM0rE7mTU7uv6Y+2g+8oAfmX+KlG+DopZbCil0d+VynzC + lnavYKucWzGAlUhgQ9kvn3E0wFo1gSeNYGtXgZsOtm6zsXWfjYOSBlrg+ApOXooJrImzrwYufrNwC5gl + dVSBaEHhIcq8wB6BpgTGOBOTGkxyThzpeSnky3hWXFREiUBJO1qQV0BWRrZq/paVlzO/U8bFwcWMrBhl + YsMqNm5dx/rNa1gjz2ndxhUcPrqL23cu8dnzezLuP+D7bz7h+68f8ptvHvL9iw95cOMwdy/v5PHt/fz4 + 9Cw/vbjIlx/t59EHG3j4wVrufTDBtbPDajTw5cO9PLm8nOeXV3LvyEKOrpzHeFMsC0r96c73or/Qi9W1 + YWxuCBNt485ghildMRosSJjNUJqSociUwVQDBpL1GEo3ULMWLRMNMJpjLDASGLIi31S0jgUby63YOFc0 + Uq4Bo6najKbpMJppxJhwd8UAHs+zlWVHhjPsGUwTpIoukbq1SDjcgnQXulOd6Uh1oEPW5wvaZFtbhgI3 + WtJdaUxxoVGZ+1dQq8wLLKhMdKBSmSc43p4qWa4TNMU70prgTGuiE/OTlFJZd5DSnpZkWxpSrKhNtaAu + 7W+oTTWT8xnJOQypSTKUZX0pJ1GXYjhpDguU6ODWVBPmZ5rTlWdHrxIBrBrArlQmW5KrRPVKXUnwmUWi + 8NkkWc6JMKQgxlSNAC4VTlyUZEt+nBWZwn9ThH+q5q/w9vhgfRJCDUkXTq0gJcKUhGDR2OocvzOJ9dYi + 3k+H+EA95kj9i/SdRbhi/nrMIMR1GoHO7xLo9C7+Du+oxu9rAzjIYSqhztMIcZ6umsEKwlymqyZwjNTx + eD9dkoKMSAk2JjXE5NVcv/LbwiaXfzGAlSjgV1AjggWxok1CvXQIcNfG20ULR7vpWFtMxdxMYD5dypmC + WZibaApmY2mui6O9Ce6u0j97KOmfFfPXUp37V4WrBf7+zri4WMqYrIGmhmIAv4uOzjR09WZi8CoC2NxS + 6T+MsHU0x8Vd+a/DjaAwH8LCvQkOdZc+3lb6KWM8pM/wkL7Dy1Haqp0O3vY6BMkYFO1nTLJcV26oPpWR + erTEiJ5N0GBZ2ky2FulyeJ4RF0T73aq34b6UDyqNeFShw6MyTR6Vz+Rx9Uw+rdPkSYPohNrp3K+ewb0q + QeUs7lTM4sbcGVwtmsalgqmcL5zOuZJZnJ2ryZlybQ6XzGBTxhuMxExhsWjKXn9BoOibWAMmUszZnG7O + vnxzjpdZyPGmXKg05UqNOZeqTDgpWvVQ8Uz2FM5gZ5Em2wp1WJejy2iS6CbR1i2eU2j3e5uOgPdo9X+X + eqmDpZ4zyXCcSoTpFLz1puAmcDF8AyejN7A3fhtbM+nLzTTl2cjYLRzX2lQPe9PZuBhJn6f3Nm6zphAs + n0mzfYMqv3cYiJ/OetHE+6otOFhtztEaJbW1MZeaTLnRZsW1Ngs+mG/GjS4LbvfbcHeJMw/GvHm0OpzH + G5J4vL2QD7eUcW51KQfGy9kxXs3mla2sW9XD6lWLmBC+PD42yNIlwoWGFzM2MsTy0WFWjC1lfHQJw0MD + DC7skzGyjyEFi/sZGuxnyaBsX7yAhYt6GRjoUaeD6RMt0iPao6Ozlc6uVrq622ib30Rrm/A5KRuba6ms + mkvpXOmjs1OJjgkXXuCGm4eDmtLfUeDkZoODi5Va34zlHhnIOGakTB1iY4KtkuUvyJu4lDgKywpp7Wxj + zcZ17Dl4gONnznL+6lWu3LzFnUeP+fyb7/n+93/ipz//M7/741/58bf/wHe/+TPf/vAzX377Bz77/Ac+ + fvySDz/6jPuffCG89je8+OaPvPz2TwIpv5bjvv6z8Nm/8K3g66/+JOPDz3z99Z/4VvZ9+/Uf+ebLP/L0 + 8Tdcvnib7VsOyH1aTn1tBzWVLdTWtNFQN5/G+g5qq1soLa4mP2cuGan5pCRmkRCXTmx0KrExKcTOkTI2 + jTlxKcJfkomOjScyUgm+CiI8wJcYQYos50aEMS8hnqrkJMpTEilJSyY/I5nsLEFOChl56aTnZ5JekCXI + Ji03m5TMdOFRaaQpcwMLMjMzfjGB8/LyhFvlkFeQQ0FRPsWlxVTWzKNlfgs9SvTvYuHAS+RZi65aOj5p + /i4ZE105ukCW+wTKC5RSKljRxxLhYsPjPcKXOwWiTcfmMzTSyuAy0a1Lm1UsW9r6C8ZH2kWj9LByrJvx + 4fmMDrUKRNsuamGgp5be9nmqCbxqvJfN60XXbR5lw9olrF89xMY1Q2xYs4RNa4dVbNmwTDjciGCMLRvH + 2LpllK2bRtkk2zduXMamzQqWyti/TMb9pb9AmbN4TM7fP9AkeqWK7u56Fi2aL9v6Wbt+KRs2jghG2bhp + jM1blrN16yp2bJtQsU2Wd+5cy4EDWzh9+gDvXz7BubNHVPN3YmIp3T3NFJVkEhkdiJIhUgkS8pFSgbef + s+oJubrb4u5hj5evM35B7gSH+xAS4Se6yF9FSNQkAsI88Qp0RpkP2NVLmRbEBkd3C3X6DnsXY/WFPWsn + 6fMdZglv01KNYCUiODDEQXiwJ3Nig0mMCycjOYak+AgCfdzUrJ/2ig9gY/oqm6aMEc62eDjY4GJriZO1 + nN/SDEcrMznGAkdrczUwzNvFgaLsDAYXdDPlSp85p5v1pIN8j3WJb7A8fAqrBJvmvMWBLE3pUC240mDD + lVZbbvY48eFCd24OuHK5x4EL3Vac7jblWKc+R7sUA1iX2xOWPNvlwvfHfPntCT++O+TLZ1vduDpoxqEG + LXZJp75VOuIdRabsKrVhZ7EtazJMWDJHkz4lAjhWi8XJSsSPJX1JJlT5vkfxrwzgCu83qZbOuiFoBp2R + ysTwQpzkuLXpFuzItWdPnj0Hcm3Zn2HNgXRbDmbasUPI+coQLYa932GxdPqrQmewXcjJoQIrjpVac3yu + FScqrDhbbcPZGkuOlOqxP19DBh8djpUbc7LKguNVNhwqs2NrthkTCQZqxPHKFFPG0k0ZFvI3kGJAb5o+ + fbkmLC6zZXmTDyuagunJd6I50YL6aCPmBWky1/cdSnzfVNM8VgZNkcH0XQbSZ7As+z1W5rzF3hodTnaY + c7LTioPNJuyoN2R5qSYd2e9Skf4OqXFvEBH9BoERbwqmExyii5Jm1NdXXyqooVQ+WyLnuBAd70pkrCN+ + gfLAfXXxC9DHXzGAA0zx9zOT483w9jbDQzFNnA1xViLlbGdjb6OJk5SK+evuIpXQWUeIgSxLpfQWAeAv + ZF81gH2NCPM3JizIRDWAlTTQsRF2f28AS8V2sBMRK+LCTkol8ldJ/WxnKyLEWgSGCBtLBTb6QlJkQJXS + 1t4YGzsjEUrKG7Ia6BvOFMxAz3gmukYz0FHTQc/EyFIEtQgWO1dTnDwtcfWzVQ1gcxE4xvJdxrLPyFoX + EytFoOtiLGLcUAZqYxm0TSwMMLM0xNzKSDV8bWwmI4EVM1hdtzXDxdVOGvjr+X9d8PJ2koFOBjhnxQC2 + xE6Z19jZDE9PG9X89fa2+8UAVqJ+HR2MsZVrtRHh5uQkx7nLcV72agTwrw1gZ7lWTxcL1QCOkg5EMYBj + QqXBKwZw0KQBHCrnDXIzI9hdxHCAAylRnuQkBFKUFkZxeqQgSkRnFHNz5lD1KgK4bl46pUVxpKYEEh4m + 3+ltqprAngoUA9hGG18rTfyF0ERZvEOa41vMC3yPJdmz2S/E5M4qL77eH8VfzifxTxfj+ddLc/iPy9H8 + x8Vg/uOsN//XMVf+7aAj/7LXgX/e68hfBf+435F/P+vF/7zix/99w5//+04Y/+NGFP/tZASfrvTipJCz + 8aB36LWbQr983yohlCdFEJxvjuZ4QzRb5gayKMmRcs/Z5NrPpEDqYImjLpVSP2ucjaiTutriaUqTkNU6 + V2PmORlR6mwqfYMZWY4WpDpaMsfejDAhG4HyfFUDWJ61uzxzVyFqbka6OBmIWDUQsWogBNxAG0dDbdxM + dNV5f0MsjIizFCJvYqyav/MsLOmxE9Fl60i/nQNddta0SifbJHWjVTr8Bqkf5UJqyhytqHCwpErKRiFB + 7V5O9Pq60O/vRp8c0+nuQLOzDbVSZyrkeZfaGVIkQrtQrinf3ZgcNwNSHLVJkDYW76xNnIs20VKGyfUH + 2WnhY6WFm5kGjsaa2BprYWcmwkB+q5PU20kDWKlL0uELFFPV0dYCWwup03JN9mZCUM20cRLS6mL+ngid + N0XAvEtrqREbFrtyblMgH+4P4+HhSO7uDeODLUGcWenDwSW+7FkcyESzK915FpRFGpDkroOPufwOg1lY + 6U7HQn86VsazZICRe2ivJwOPAa42ujjb6Aj0ZBBS0lVL32JrLPVcBjohhfY20i6ktJNtDnamODtbSh9k + g5+3Pf4+Mni5KCmfjQnyNycizJrIEFtCAyzx8zLF290Id6kLriJMHBUD2EaeoSw7SR1xFuGiRAQ7OxlI + +1TS278yg13l+5UXXaSvU9JAu3pI21bSREtbcnY3xc3TQjWAlXm9A4LcCAnyIDDIS33jKyDQWzWBff2U + uX+9pB9Q1gMIDFRM4EBZDlQjhP2CfPEP9hJR5U6ktE3FAI6KdSYs0paQ0FcGcJghUTIGJCSIcEwzJV3G + vKwsI7JeGcDJcSKAY6eSlThV2vIMIYdSprxFY8E0eiu1GGk1ZsuAjG3D7hxZ4saRRc4c6nNQDeCTvc6c + 6nPlRLcLh9sdONDmwMF2Rw7Md+JQpweHerw43u/HyYWBHF3gw65WJ9ZUmDBaMJvRfG1Wl+mzodpUTRu9 + v92J4ws8ONLtyp4WW9aWy/hTpMOyAm3Gi/VYLW14bZ0Vq2otWC6CZmSeCf15WnSlz6QrQ5OezNkMZBsy + VGDG8jIbNtQ6sbXBmS31jmyplfFToJi+vzaA15dbMFGspEwzYnmBCSsKTVmeb6YawMrcv0tyTFmYaSjj + pBGLssxZWuTIqkpPNsn4uqUlTE31PF7hrparqv0YLfdgvNKL1fUBAn+WV3mypNiRRQV2UrqwrMydsXne + jFX4MFKmmMOess+VgTwHgSOLC5QIYGeWlDqyrMKFkSo3Vtb5MNHoz+qGALluH0ar5Dtr/FnVEMSG+ZGs + awtX5wmeqPeV87owKG2mO0mH+fEatMXNpDV2Bk0xM2iJnSXQpGmONnWx2pQETyPVYwqR0icG2U8h0HUK + IV4iIn2mEOH/JonCiTKjpC8UflSWoE1lojYVcbOYGy31I1h4hP8b1Mhxrf5vMSDtemO8DkeyzDgj9+xc + tgmXMvW4lDGbM8mzOJE0naPJ0zmSMoOjaRoczdTiiDyvY9nCOXL0OJEtyNHnRK4RR+RZ7M/VE074LqsS + 3mCNcMOtqW9zskSLa9VGPGg040mbJU9aLXncKuNFnTnnS/WFe2kzEfUmE7FvcrBAj9tS1571evFVrzs/ + 9Ljzh24Pfmpz4qcGS36uNeUv9cYCfX6u1+VPrUb8vs2Y79tN+LrDjGedltxvt+Sq1MNjdVJPSm3py7Bh + 3hwrcsKtSQy2IDHcgrgwUyKVLCg+OnLP9GTsNCEx0pKkaEuSoyxJi7IiO9qKQlkuDTejOsyYxmAjOoL1 + GfDXYchfm1E/TSYCNNgUqs2uCH0OxSrmr4mKI7HCFSP1OBCmw8EwbQ4Jjshxh4JmcShYg4OhWrJPIHx0 + X4w2O6M12RA2lc3BUzkWpcvlBHOuxZlze4419wQfRVvwQIkEjjbl03hznqbZ8XGGPdcz7Ngv37syUJtF + Ppos8NViaaisR5ozMceGEbmeBSH6tPlr0uA7k8ZATVpCZqtlg9cMmr2m0+L2Hm2O79DnPo0V/rPZFyL1 + IMaGm2ku3Ml04Xy4Acd8FAP4PdUAPuA2lUNeGhzz0+NkqAnnY605O8eSE5EmnIww5nykKR9Em3EzSjGA + DbmpGMByzQ/CtXkaqc/TCB2eBM3kY693eejxDs9l/5eKAZxqy1f5zrys9OOLuhCetcTyZH4cd5rmcL0p + jhsdKVzvy+L2UDEfTTTwfM8w357byXfXT/Pywyt88fE9nn78MY/uP+DhRx/x+NEnKh49lPUH93ny+BHP + nn7Ks2dPef7K+H0uePHF53z18gVfv3zJN1+95LtvvuG7b7/i22++5JtvXorwF3z5BV998ZzPnz/myy8+ + Vef7/f3vvuF3v/2KP/zua/7hL7/hH//xt/zp5+/4+aev+On3L/n+60d89skH3LpyiPdPb+PS8c1cFpze + u5Ld6xaxaqCR4dYyljaXMTq/ipWdInx7m1nd18aqBSKUF/WwRsT4ysEFLF/Yz4rBhawYWsi4YHRwgBXL + Blm+dDEjSyYxOryEkcFBBnv6WNDWTldjE/Nra6gsyP2bAZweT1v9XAa6RPT2NLFgfo2sl6tpnlUDWE3/ + nK1GtdaVK+ZvqZQl1JeXMb+hjoULelm/cRNb9uxn9a6DLNmym7aV66gcHmXekmHaxpYzOrGOjas3sHli + BeMLuqjJSyM91J8kf28SA72I8XclSrhxiLs1gS7m+DmY4GEt/FJ4vbetIcFulmTE+FJfmkJ3nZIGOp+F + bcUs7api+YJ61ixqZe1QJ6uHehhf0seqFYNs3bWRE5dOc+buhxy594i9dz9l573P2HTzMcsv3WPRsQ9o + 2H6KuWsPUr7hCHVbj9Gx5xQL9x9naOdOVu/dxsEzh7h07RTXb5zi9IntrFsxQHdLBXVlWVQXpVNbmkVb + XQmtDXJfqvOZV5bJ3KI04c+ZaorolooCWufl01SeQ1NFLv1t81gz0s3xA2u5cnYnV85t58KJ9Vw8upor + x1Zw/dgID06N8fT0Mr46N8T35xbxw5lefjzezndHmnmxp5anmyukrpdwpjeJ9XN96Uu2pyfbl0Xz4lne + XsrahU2sWtjGeP98lvS0smqon/MHdvHZrav88OhDvv3oOk8uH+P+2T08vLiPz2+d4I+f3+Qv3zzgT99+ + wh+/+5S//OEb/ukvf+Snn3/i2cuvuPPoCbel3dx7+oTHL57w9MVDnr78UPCB7H9fcFHFZy+u8OyLG7z4 + 8i6PPrnO4SM7aGmtwtPLAQMDDXR0Z6Crp0D5Y3mmaLOZWNjMxj/Uicz8GBrbSlgw2ELXQDOtXQ2CJtUA + Xrp8hE07twl2MrZ6NWMTqxkeXU5Hbz/N7Z209y2ke2CQobGVrNu8g9XrttDTP0jJvFpyisqpaWqns38x + C5aMqFHASgRwfHo2ydn56tzAy1ZMsHjZKO1yPmUeYGUO4BrFAO5ZwKJlI6oBPDoxQVVjI74hIZhYW6Jl + qIemvi5aBrrMEi3w/wYNfU3V+NU11kHfRDSlcGo19bOUr6N/FX352gB+PRfwa5hYKdD+Bf9Pkb/WilHn + qP+LAWwvXNfeXfi7CtnmYYiDpz5O3oaicw1VM80n1Bz/CCvCE5xIyQuivD6NhSONLF01n46BCgoq4olK + 9CI8zo2YZG+SskJIzQ0nMSuYmBQ/AiOc8A6cNIB/KQW+gdaqARwQbI+fv5XwX0vVAFYifePjfYWzhqmI + j/chPNxZOK4jYaL5Q0RnKmmig5T5f2M8VJM4XY7LK4ihqiaTzq4KlgzPZ2BhI729NQwsamTJsg4WD7fR + 3FqiRgtHRytz9roQFqpk0DEnXK4xRsbvxHg70pOdyRCkiUZMkvVUxeCqjWfpknns3rmYS5e28OjRKR5/ + eo5TZzbRN1BNbIKfOu+ag6LLRccnZiZKnWune2EfWUW5+IQF4KcYwGV59C0bUA3gVumz56THEDrHj9Ts + cBqas2nvzKWmJoqiPHdyZZwuzXVUI4FrhStWpttRnGBJUaINpWnOFKW6Sh9tS2Sw6AsXTezsZormmYWl + lQbmlrqYmirpnycNYEPRc+qcwKLRFCjGr2r+mstxUq/MrPQxtzZQ/1BXTWAbxcxRDODXBu6kEfw6jbOS + 0lkxfpV5gicNYCXC10hKY7W0FliJ/rQUWKjGr3JOA8wVY1nOO3ms8jlD9VzWzgp0sXGRc7tK6aqYwDo4 + uOuqcPTQE4iuVlNBi8b00cBFuImb73Q8/Ge8ghYewi+8lGk6kr1Iyo0kvyKD6qYK2rvb6O7qEHTS0dFJ + c1MzVZVVVFVV0dTSzOIlg6yQ9rtx6ya27dzKth1b2LxtE+vWT7Buw0r27t/KuQtHuHXzAg8eXOWTh8r8 + gVd4+vAyn9w7x/snN3H5xDpuX9zCk1v7ePHRYT69tZs7l9Zz4/xKrp4Z5djuTvasr+XwpnquHezl9qEF + XNzSxO4l+aoB3K8YwHle9Bd4s7IqRDRNMBOiIQYzzOgULr8gSZeloktGcq0YSjelP0mPgRR9FqW9ylok + 2kXBkgx9lmUZMp5vzOpic1YXiUbKNmBZymxG0vUYyTRmLMdCTQE9nmfHeI4TI1lODKc7MpymmMGuDGe5 + s0jKPuFzncq8rLJ9vuxXIoFfG8DNsq8+yYnaREeqExyoSnSiMsGR8gR70Q52VMyxY16cveyzpzbegQbZ + p6BJjmuQ4xtke0OCrZzDhpokSyqTzalKtRQopTmVKaZUJBtTnmhEZZIR85L0qVJhQHWyITWvkWhAQ4oJ + TXKf2nPt6C52o2+uD63CCxUDOD/SiJQgLZL8NEgVDpsmy7myLV+Z/3eOuRoFrLSpSQPY5FUaaH3VYI1X + jFXR1enCpdMEKeGmqtEa4alBhPtMNY2zMpdvtI+28BNNQjymEyScONhlGkHOUwlwmoz+VQxgf/tJE1hZ + VgzgYEeB0/TJUhAiyxFuGsRIHU/wNyApyJjkV3gd3atAWf7FAA5UUlLrqYgLEMh6jLSBUM/Z+Llo4eUy + G0c7DWwsZRy1lL7BUhNzc+kfLLQwl/ZvbibjgowtjvZmappnDw8bXF0scHIwFZiocHaS/t/fGTdXK0yM + NdHUfBtt7XfR1Z2GoaGSqUMbU+lHVAPYWtqz8n+Lqw0+fq7SV/sQFelHeKQnwUEO+Hqb4+1hhLerIT4C + Lyfhb0rwgWyL9jeVazMmV/h/RbguTVFa9MyZyViaJluL9DlcYcS5atE4gjvVpjyoMuLTaj0+q5nNp1Wz + +LRmJk9rNXhSN0s1gO9VTefDyll8WKHB7XINrs2dydXiGVwqnMaF4plcLNXg0jxtLlXpcLxkGtsz32Bl + 7BSGw6fQHzCFhSHTGY0zYCLZhE0ZJuzOM+ZQiRHHSgw5XW7MhSozzleLfinX40i5Lgfm6rC/3IC9ZYby + ew1YmzWb0fhpDEa8yWDkWyyMeIfuoLdp8Z9GhfcMcqR+RJu/gY/BFNz1p+Bq9BbOpu/iYDYVW3lWVjKO + W0q/bGlliLWFHvYyzruYzJRj38Jr9hTCjaaQajmFue5T6I5+h4lcHXbMM2dfjSUHayw4UGnKScVT6XDh + cpsdFxqNOV03m1P1cs2dxtxb5sbT9eE8357Ky4MVfLq/ntu7Grm0vY1T27s5vGMRu7cNsmPbGNu3r2bL + 5lWsXzPGxnWr2LZ5Lbu2b2T3jk2yf4NsW8naiXHWr17O+rXjbFi/go3Sb27aOMGmTRNsFmyQvnTtmuVM + TIyxWsrVa8aZWD3G+PJhli5bxOjYEsZXLGV46SJ6etuprasgPSORUBk73TwccXCxwc7RUi2VFwzsnS0x + lTFFz0QLHSMNDOT+GFkbYeloIWOwGxHxEWQWZFHb2iD8bA37jh7hwtWr3Lx/j1v3P+LhZ8/5+sff8/s/ + /5U///Vf+dM//Bs//+Xf+ONf/pWf/vzf+e3Pf+WbH/4svPU3fPzpVzx+9i0vv/uJH37/j/z+j//K73/6 + F37zu3/md3/4F9Fw/8HPf/i/RAf+mZef/54Xn/+OF89/5PnT73j6yVfcv/MpRw+dZXTpahpq2shOLyQj + NY/czCIKckspziujMKdU3ZaSkEnSnHQSY1KIi0kmNjpJRUxUIjHRicJdFOM3lsioKOEwEcJhlAhgH2IC + fKRvC6AoLFT61QSak5OpS0liXnoqxZkp5OekkJufKvdEMYAzSC/MIrUgg+TcdJIzUklOTSJVkJaaQrp8 + JjMrnZwcxQTOkc9lky+asLAon4qKcuEqdXR2t9O/aNL8HVq2kKVjCxlZoWDRpOk7toCl432CvzeAh1UD + uPsXA3jJWDtDI22qATy0VDGBW1i6tFXqxCTGRjpUc3flWA9jw+0sG5Lti1oYFC3c11lFV1sZ/d3VjArH + m1i5QOrhIlaM9bFcoJQr5ftVLO8X3TfAqpULmVg1yOqJIdasGWLt6iWsWb2YibWDrFk3CWV51drF6lzF + CpbLZ5aN9rJ4UK55YQsLF8+X6+5gaLiLpSM9Unf7VDN4bPmAHCvfv0o+9xorF0u9X8bmzaLhd2/g8OEd + 7Nu7hY0bx+U6+4Tz1ZNfmEpsXAh+QW64e9sLP1YMYGc8fB1x9bTB0cVKfeFBefHBzcteuLObHOuBf4jn + LwgM9cIvxAPPAGUuYEecPWxxdLPGztUMWxdjbISrKS/ZWThoYqq8LOg4A3s3bdy8jQgOcyAqyouE+GDh + v1HkZyZIXYwm1N8NB9EhVsazsbcwwMXWDA8H4e+OwuOl9LAzx1Uxhm2lz1dMYmUaADnOymg2ntJWC7OS + GerrYMrVRTYcb9Fjc8HbrIqfwnjEFFZHTWFrwrscydHhap0tN1oduN7hwM1eF+4s8uDGIlcu9zlwvtea + k92mHJqvK9Di1AJdPlxtw+d7PfjhRCA/HPfji73uPNrgwKVFxuyv12T7XE025GqyKdeQbYUWbM23YrV0 + 4kvjZ9MfOYOBuNlClswYK7RnMNOCuqDp0pEqKaCnqEbwawO4KWQGnTIQLZyjy4gMBGszLNme78CBEmeO + FjtzotCZk0WuHMl1YmeqFRNhcl7fqQz5vM1EhCY7hMQcLrLnaKkth0sU09dCNYFPzjPjQKE2u3Onc6BY + iyMVhhybZ8LhedJxl9mwPdecNUJuVgsBWp9lxbp8O1YV2DCSZ8FwvpJC1ZqllY6sbPYVBNFX4ERrkgVN + MUbUhGhR6f8e8/zfpsr/TWoC36AzbjrDOVqMF8xgdeG77K6dzfEOM451WLC3wZgt1caMl+rSlTuTqvRp + ZMa9Q3TUmwTLYBgU8R5BITr4BRjg6a2Lu6csB5oRHmVPdJwzETF2qunr5asjIk5PyIIR/n7GMtibCMzw + 8TLHy0MqibMRzkL27Wy0sbWapRorigHs6WaAr6cRviI+vd31pDQgyFt/MgW0kAJlPuDwYDMiQixeGcAi + EKOdiQ13JNBXKqGLCFcRt/aKUSsixU41gicNYFsFImqsbaXyy2BhqRjCsqyYv8q6samWCKRZIpA01WUj + M1k30URXthmYaPxiANtLI1IMYCUCWEkDbWSji76ViCuBvsXk20eKEFfexlYMYEMRX0p6LhNzfdUEtrQS + YfTK9P21AezkbIOHp5Nq/r42gJU3PZxdrFUoJrASDeyqvJ3nZSOwVc1gxQB2djaVaxMxJeLfylK5diO5 + xxZyP4V8edqppZujuRoN+X8awF6/GMCxwW5E+Yu4lvMHupkS4GJCuJ8NCRHuZCcGUJAeRmFGJAVpEYJw + ijKjKcuLp6okhcqyZOYWx1OQF01igq+QPBu8vUzwE3iLqPOSZ+0n5DPI7D3mWL4tpOdt2iKns3muAVf6 + bXm52Zt/PBnDf15O4j/fj+N/Xo6U5RD+5zkf/ucpZ/7jiA3/dsCCf9ljzj/vteSf9lnx14M2/I8Lnvyv + 6/7wYTDcj+DfroXyx+NBPF7uKe3IlGVB79JpL8RI2vOyEE32FrpxqCqQHeWBLM/xoCPamgJnDdJtZ5Dt + oEW+3WxKHPQoE1E6z8VQNYFrhKCWOxpQaKNDrgjYLLmHGXZmpDhYEG9vTriNmWoA+1ka4GWmj6eQaQ9T + Hdyk83Mx1MbFQAsnQw0cFYgId5d9gdKZRkknmWptRq6FGWVWlrTZ2TNkIyLMQkpre/psrWlzsKbZ1ZY2 + HyeaBPOE9JRLh1tuK+JIOt9WT0e6heQsCHAXsupBr48rbUr6aPUYIwqt9MgV8pgpbSHTyZAsuZ40N0MS + HHWIdRCxYqdJuP0sgmxm4i9t0UcIp5vpTPmdM7DVn4Gl3kzpxLWwNxVxYKW8QCCi4JX5q6aCcLRRTWB7 + i8m3fRyEoDpZyDWLwPCwmkqY27vkxs5gcZMVRzcE8ehMPN/fSuEPd9P44UYiLy7Fc3d/OOdWB7J/iQ8r + 6y2Yn6ZNfuBMYp1m4mE2E3u5b+YGMzE1mIGFmSYODvq4Sd10Fzg7GImwMcBRrlWBgxA/Bxtj2Waitne1 + zSvp36WdKn2Bk5PyYoIVfj52Ams1zbOXiI6QQEtiIu2Ji3BUTeAAH3NpO8YiUIzxcFIGPBFQUocdbAX2 + sqyYwg5SKlEUAmcZVF1cpd25G8nAbCIDtoUM4DIoKiawuwku0p5c3JWUd0p0gx1BwS6EhLoTJgN1sAzg + wcEycKtRwEo6aIGfF/4B3rLNX44NICgoUEVAsL/AVx3kQ8IVA9id6BhXYmKl/420ITjUhBARquHhxsTG + mpCYZKoawKky5mVkGgr0SU/TITVhJmnxU8lPmUaljI/VuTOozHyH1sKp9M3TYGmDHutkXNjVb8+hRU4c + 7nfkcK+MX12TBvDZfnfOL5Q21uUsY7Ec0+4okOUOdw52unO4x5Ojfd7yGS/2zXdlQ6UZ44UihAq0mJgr + 566UsabenP3y2aO9br8YwOsrjVhRqsd4iR6rRECtFoG3ts6StY0ypjZaM1ZjRl+eFm2p06WezKIzXZu+ + LH0W55kwUmrNmioHNtQIqu0ENmyqtv6VAew8aQCXTRrAy/OVaGMZ7wpNGctXYMaIMqbmWjKQacyCdBMG + smScVQzgKm82NYeytTWCiRo/xis91Yjf1XUBrJT1NQ1BrG0KUQ3gsUoPBoscWKgYwMo8weUejFZ4MlLu + ydK57rJPMX8dWZBjp5rAiwqcZZsLQ6XODFe4MlLpxnitJyvqvJmom/yuUTnn8hofNSJ4S1c0mwVrWoJZ + 0yjfN8+VhTkWtMRpUhczgzppb7Ux06mMmk5FxFTKQqdRGjKNotAZZAW8R5wIxWDpE/2lT/T3eoNAvzfx + 932TEL+3mRM8nbQIDQpiZzNXOFJZvDbFcr788HfJCXiDPB8RmoI6nzfoEIyHz2R3qhGncsy5IFzl/Wwj + LmfqcTZVm1OpGhxL1eSICPdD6bM5mKHNXmnbu9K02J08i51JM9mbItvSddmVoctm2T4e+zbL499iTdJb + bE19l5NSX65VGPBxnRnP26z5tMWSR00W3BDRfzJPgz3p01kX8yZbk6dxaq4JH7W78UWfF98oBrDUqd91 + OvP7Fnv+UGfBz9VG/EOtEX+tN+C/KSawEgHcZszX7cZ83mXKJz0W3Omy5sp8O062SF2pc5Nn40hlog3Z + UTIOhlgSH27OnDAZFwP0ZAydLbxEl5hgI+IjzUkQJEZakBppqRrARdGWVMh6XbgpraHG9AQbvIr+1WS5 + nyZr/GexMViTnaG6HIgy5Ki012NxZhwW7rY/Qo89oVrsVcYsgTJP757AWewNlmsO1WR3mCa7hI9uk+e0 + PlZTePRUVga/x95Ibc7Fm3E53pLrcdbcjrflw2hzbocbcTtMj4cxxjxOs+VBtgPXhKvuS7BgLESfbuFs + XQGGLImwlmdgz1i8PYtjrOkMlTHQX5t5PrOES2pRE6QtXFKTGh9NWmR7s+dMGp1kjHWbzqjck12hZpwR + Hngt1YVb6c6ck+884TeTo56KCSwc33MGR321ORFkxOkIc87F2XFGfufRSFOORZhwNsKUy1FmXA834Yb8 + ruuBmtwO1OBBqDZPw/UEs/k0aCafCLd+7D2Vz0Nmqwbwt0k2fJ3tyItST55V+PJ4XgAfCW6WevPBXB9u + VAdxoyGMDzvj+Ggon09Wt/J45wgfH9rI9UM7eP/oAc4eOcLxQ4c5fuQoZ0+d5vzpM5w5dYKzp0/y/qs5 + gq9+cJmrVy9z/foH3Lh5jTu3b3JXcP/ObR7cv8ujhx/x+JNJPPnkAU+fPOQzBY8f8umT+3z98il//Ol7 + /vqPf+DPf/pRTf38z//8B8FPsv49f/z9S3774+d89+XHvPj0Fp/cPc/N9w9w5dR21QA+qaSlWi3isq9e + xtRSRturWNXdyIaBdjYOdrNlyQI2KRgdYvPypawbEVE7LOJ2ZFjFqmVLBLK+YkTFqvERVowuE4wwPjws + Im2A/vld9DS30l5XS1luFqnRYa8igBPU+X4XdNQy0NVA72sDuKJANYArijOpKs6lpjSfmrlFsk1BIY3z + KuhsblQjgDdv2sSWHTuZ2LKFJWtX0z62jJolA9SOLKJv5ShrVk6we9VawTgr+ztpKswkPyaEzDA/MiN8 + SQ7zJCFQxjs/e8KFhwe7mOEnfCBQuE2IqymRMqbnC1dtLk+htzGPBc35LJ5fwmh3FSv6G1QDeM3iDlbL + vVqxpFe+b4jtO9dx6tIpLt+/w9n7H3Pyo0858fEzDn30lN23Pmbd+Rss3H+als37qduwl6ZN++jctp/F + u/cxsmsba3ZtYP/RnWrq54sX9nF0/xpWLuugvb6Y2rlp1JSk0VSVS3dbOR2tZTTV5lNVnkFZcQrVRbJv + bjbt1fl01RbQ01Akv7uAZd0VbFvexqWDY9w7u5aPzk7w4fER7h4f5uHJIT45uZAXZwf55swAvznTze/P + dPDH00388UQtPx2r5DcHyvl6RzFfbCriztJ0DjcGi250ZUV5CBMNyWzsLmbbojo2L25i/aIWVvQ2sXGo + lyv7t/DFjXP85qMrfH/nHJ9d3M3HZzbx6cUtfH1rP395/j7/8OI6f35xmz+9vM8//vicf/z9t3zz4pna + Jk6cOc3FD65w+8EdHj69x6df3OfTz2/y+PP3pTwv62cn8flFPn1+lWcvbvHRx1fYd2AzdQ1zhSfZoPfK + AJ6tM53ZyvyChjPQN56OiXBT70Ab0vIiaVAM4KFW1QBukvrY3FFP54JOFo8Os2bzJhXDY+MsW76SRUNL + aWiZr0bsVje0UN2kpGxeyOjKtaxZv5XFw2NU1jWTV1JBbfN8Wrr66OhfTNeiJVQ2tpKQmUuSoKFDiVZY + qRrAHdJO6lvlnHWNcr4W2rr7WLR0hNUbNrBK0NTeTlBkhOhGc7QMJg1gDT0dNBST91eYpf/30NCbNID1 + TBQdaaBG/RqLtvh19O+kxnyNXxvAoj9FhxpZiX610lbx/2QAK2adAjUFtALVAP4bVANY9LdqAPsqBrAJ + XiGmvzKAA9UU0Ir5u2JjLwPL6pnXmEFydjDxGf4kZASoy5Pmry8hsW74hohuDbD8xQBWlhXz1++VAeyv + zNf62gD2UwxgG9X0fW0AJ8hyZJSSos7lVekqXNdBuLMDc+K9yc6OIDsnkuLiOGrrsuntrWLpcDv9/fV0 + dVWyQEolCrijp5LyqnQSU4JUA1g5V3iYg3BmW2Ki7Iif40BKkjOZaR5kpXuQIUhPc5ff4ENDfQqjI3Xs + 2zvCB9f28OTJBT55cpGjpzbRvaCGmIRg9U83Rw87XP3cSUhPoq23XeppLxmFOfiE+asGcI70mf3S5y1b + PUpjZyNRSREEhHsSJ7+pui6D5tYsysrDyEx3Il44QVqSBcVZDlTkODI3zZ7CBBsKE+0oSnUmP8lFzUAS + Ic/IQzF67DWxtVZMnllYWCrZzvT+DwPYxExbhfI/hQIzS311yqq/N4AVGKqwFM07CcUEVozb/8oAfh3x + +zcDWIFi/lraKueR86rRxcp3KAbwpFlsLZ+ZNIANsHZWoI+Ni8B10gRWDWA35WUF0aDuCnRx9tIRaOLi + rYGrzwzRW9Pw8lMwHS9/DSl18JH7EZfmS0ZRLBWNRfQsamds5VJWyDizYsUYY+NjDA4N0t3dLehi0eAi + JtZMsGXbVvbu38OevbvZsWs727ZvZdOGdWzYMMGu3Zs4cnQyteOF84eEFxzl6qXDXLt4iMtn93Bi/wSn + DqzgwrHVfHBmPbcvbOLG2XWcOzzG8X2LObKrjy2rali9pJCtY6UcWVfDqfX1HBwvZWNvKstb4lhUFkRv + vg8Li/xYMS+Y9TWKAezJkJLaOE6HhcK3R/NsRLvYM5xlyYJEA3oT9OlL0qE/WZ9FqXqTSNFhsTJHsGi+ + 0VxjNUX0SKYBS2T70nRDRrJkXXTDaI7oqlw7RoUTjmY6sjTDQfY7sizTlWU58r2Zbix4ZQDPT7EX7eVA + S6ojrWlKOmgl+teJGsXsnWOnGr7lcY6UxTkwN86eMtmmoFy2VyoQXlmT4KAerxjGNUpUvaAmwZrqJGvm + JVpQnmRORbKFwIyKFFlOMaUsWZBkIvuMBIZUqDBgXrIhVa8wT+5DleyvSzOjJcua9kJnOovcaZbrqpD2 + UxAt+lf4YnKABunB2uqyEgGcG2lMbrQJ+bHmFMRZkSNleqQRSaH6qsmrGsCKyRpsSEqkGSkRZrLP+JUB + rEm4xyw1YlcxgSO9tIjw0iDYfRqBru8R5KwYwNMIcHxPhWoAK1DMYMdJA3jSBJ6uloH276nLqgHsrcz/ + a0hSoLGKxIDJiF8Fr1M9JwS9NoD1SAiQ4wVzRJPE+usTLQj11sPPdTaeLnoo0+4pQTc2Njrq/yHKFHiW + SkZES2mLlkqAjDJtngVu7ja4ultj72Aqx0q7fAUHWff2sleNYRMTLbS131ENYGW6BsUQtpAxSDF/VQNY + SQOt/A/jLH29rzOhod7ERPtLf+tNeKgLIYG2BMg4EOhthr+nCT5uRvjKuBPiY0psoAUpYWbky3OpiNCl + KVqb3jmzWC4acnuRAUcUA1iJvJ1nzK1KYz6qMuCp6LkvGnR5XqfJ05qZfFY7iye1M/lYSiX698NKLW5V + aHOzQvRkmQZXyzS5XDqLS2VaXKmYzfVafW6ILjw9VzRp7lusS5jCaMQUFge9wXDETNGk+qxMMGCdtKet + WbrsyZvNgXwdjpYYcKrCmLOKASy/5USVMceqTDhea8HRWnP2VZjKb9Znc5YG69Omsjb1PVamTGVZ3HQG + ojVpDJ5Fidc0kuzfIshkCt7GU/Awexc3i+k4W87A3kYLG1td9b9qa+U/bOk/Hax0cDWfiZfxmwTK8XGW + U8ixm0K55xQ6o95iPEubzWXm7K62Zk+VBTvKTNlbZcvpVjfONTtwWjTw4Xmz2F/xnmzT5u4yJz7bEMLz + 7cl8fWgezw818tH+Nq7v7eL87n6O7lrE3u2D7No+ws4dE2pU4+YNy9m2aS37dm3h0P4dHD6wk4P7drBn + 5yZ2blvP7u0b2L1zPXt2b2DPnk3s3buZ/fu3cvDANhk7t7Frx0a2b9sg/elm6Wu3sWffNnbs3MCWLWvZ + uWsTO2T7xk0T0kcvYX57I5mZSQQF++DkZoedk5VqACsRwH8zgA1V81dLfwZ6SkYLa0PM7c1w9HYkMDqQ + xP8/a38dXceVbX2gYZOYmZmZmZmZmWWxZFmyBZYttmXLzMwQU+IwdhibIU23uZNOJ+nuJA1f/96qkp2k + 77v3+8Yb4/0xx65Tp07hhjnPrLV2fjo1bfVM71jgxMVzPP7cM7z0xhu8+PrrvPn+d/jJf/2a33z0CR9+ + 9jc+/PQLwZd89Onf+fCTL/jdn/7KL37zZ37409+pJvD3f/RrfvHrj/nDn77kk8/+xZ8/+Sd//PBLwd/5 + 5ON/88fffcFPfvBb3n3jR7zywru8+OwbPPvEt3jy9vNcPnedxZll2pu6yMssICY8jtiIeFLiUslIySIn + NYfs5GxS4tNIjEkiMSqJJEFiTLL6OV7KuOhE4mISiY1OIDoqRhBFdLQgIpyoED8Sg33JDQ6kOjycrqRU + +lLTVRO4KSuDqtwMSvMzKCzKJK84S7h05or5W5Ql9yiDtOx00tJTyBBkpaeRJb/JzskUbpVLoWjBFfO3 + hKqqClpFH/YOdAmnGmJ8chOTCp+ZHWN6foK57RPMCqYXRtk2PyLrVrB1ceMKFjbKeiUN9BBTSvpnwdbZ + frZM98l+ugVKGugetk5/jdmZQXbMb2TH3DCzW/vZNrkS/bt5YytDfXX0K1MiDTWyTbTX/NwGti+MMDu9 + gZm7mJ25i9mNUg4zN7dReMBmFhY2s7h97Css7Bhn8ZtYumsESzkr225TopqnhC9M9DG+pZ8JWR6flFKW + t2yV69i2Qc53eOWa5xQz+C7kuPNzYywtbWPv3nkOH97Jgf3b2bFjC5Nbhhjc0E5VjZKGO5GYhGACwjxV + Izcg1B2vQGdcvW2FY1kJV7LEzsUKJ+mHPXwc8fJzxivAVYW3/wqUZdX8le+dPOR30kbs3SyEWwkvc5X+ + 3lm0gbMWlk5rsXNfh4uPLt5BpmomyeTkQDLTIyjITaS6NIvy/BSSo/zxdbbCTvp5JcOnm/Tv3o7m+Ekb + 83OywNfRDG/hi76y7Cn9lKv0U46Weur2vq7WVBSksnW0l/teX/Ln8c0OnGjUYnfuA+xMvZ89KQ9zNEuT + y6UmPNXmxHM9rjzb78JTA648s9GDJ0bduDHkwNVBG873mnO8XUegoaaBfnG7I9896c/Pr4TxweUQvn3c + i1d2OXNj1ISj0vnvLtdgIXsd27P1Wc43Z7nASj6bszXNkE0J2mxONVDfpJuvcGVLoR1dMTrUBTxMpdd9 + VHh+bQB3Rq6lL0abTYn6bBGSsT3bmv1FDpypcudSjRc36vy4Ve/PBSEdR7Js2R4t2wWtZWuo8geloayz + 4UyZM2fL7Tldas3pMgvOV1lysdqME0VaHMp7hBNlmpyrMZLO2YyzdVacrrbhSIm1DBxmAnM5nj0HKt3Y + Xe3GYqUTs1X2TNU4sK3Bmbl2X+bbAxktd6M7w5rOBCFCkTo0hq6mIfhBGoMfoCX0ASGJmsyW6bNUo83+ + Bi1OrTfg0WFrrm6w5Wy3DUfb7JivMmcwX36boUF+4hoSYh4WoXU/YVFCZsINRKQZ4e2jh4enNl4+BoSE + W0nFcSAqzoawUFP8A4R8++sR6G9EgK8x/t6yztsCfy8rKZV0ImaqAexgp4Od1TrVBHZz1lEN4CA/czUd + a7CfqZRmxIRaEhduQ1yErVrGR0opiI+0k/OyJynWhfgoZ4IDrNRoPicHITmq2bNiAqtpoKVCOjmZqcao + YviuDKYrUMzfe9G/igFsLpXWUgS2hY2BmhLJVHlT1loPMxl0Ley/NoBd/YUgybUoBrBi/poImTK2+U8D + eMUEXjGA70UCW1mLELIVUWRr9h9msIurnZraQiFL9wxgbx9nWSdC0ktJBW0n99sBLyFmSuSvYgArUAxg + V1fF7BLSZaOLlRzbVkScq5M5ntLofTxlv1IqEZHOMij+dwNYMX/vGcCqCRziSnSgE2HeIsA9zQnzsyEx + 0oP8tBDK8mIozY2lKDOK/PRwCqSTKM6KprwggYrSxBWUJaliPT7Og1AR+GGKkPcyI9DJgGAbDaJsVpFq + /xBlng8zLKTudJMF35p04peH/Pn8agz/vBHLP25E8o9bIYIA/nHVi39cdOLLU9b87bgZnx015bMTFnx6 + 0opPztrxj9ve/FsxgF8KVw3gvz4Ryq/PBfLGNi9pS+ZMha2iz0WIkft9TIRpsSfHiQOl3uwo8haB5EJr + pDXZTuuERK0h3V6LTFtt8u31KBKSXO5sRI2bKdUibksdDciX55sl9zfd2pA0Icwp9uaqARxjb0mojQlB + 8oz9zPXxNdeVUjpUUx28TLTxNNbC3URDhafUsSDZR5yDBVny21InG+oc7Vnv5swGF2e22IsIs3Zkws6R + DbK+08mWdncpfZ3pEDJTL/WgxtGKansLmtzs6JZ6MhjkxXCIINiHAX8POmT7Btl3uTzvfKuVc06T+psm + gj3DXYSDhykJLgbEOOgSbqshz2Ut/lYinC3X4WW+FheTNTgYrcbOYA3WugJDLRzMRISrUcBWqKmf5RyU + VNCerivzAjjbyIBkbY6L3UpUrpe9MqfLWhICNNT0z/NDbjx+Mp6fvVLIpz8o5fMPSvjLDwr44zu5fO9O + Is8fD+fynC87OszpzdGkMGgV0Q6P4GutiasQOmtzLSzMNLG2lgFInou7uzkeHhbqXN9KG3eWAchZSfcs + g5AK+XxPuChzf9vJM7WXvsHFWZnjRvohXzv8fFb6DF8vEyJCpT+RwS813p2EaGfCgm2lL1LmBzbHV+6Z + lxL1q5jAdw3gr2GgQkkN7e4ug6KS2shPhJL0Rz7+0tf5muMl6zylLXlJH+jnb6NGNkQocy1EeQlp8yZC + BvoI1Qj2IjTEW773UaOCQ8P8CAsPJDwiSH37UYGyHB4RQESUL1ExXsTGeRIf70ZiggsxMXayvRmRYaZC + DqVuJlmSnm61YgBnm5GTYywwJEeEVG6GFoUZa6kp0GJ9tRE9Nfr0yFjZX7GGjTXrmGzSYbHTmKMbZLwa + duTskBPnBhy42O/M5SFXGV+9VVzoc+H0etmm20ngwqkedxWn+zw5M+DF2UEfzvR7s7/ZloVKA+bK9dhR + Y6JGAO9vtVZTR18Y+toA3tNkyaJ8v1AjY6yMg4r5u9xux54uR3Z1OzIrv9lQpENX5hq6M+V8s/TYkGfE + 5kIztlbIMWodWap3YGe9ncCWZcH+JkfV/D3a7s4BWd5VZcNimTkzxSYCM6ZLFOPXQkobtpXaMllsy2ie + JUM5Fgzn2ajRvItN/uxdH8GBnmh2tAQyV+/DgpTbW0NYag9jX08MewSKAbyt1ovNpY6MFDswXi68ospT + xWSlp2r0bipxZTjfkaFce0YKndhU7MpYqTtjFW5M1LgzVechY7oXM02+cowAZuu91XmBF1r8WO4O5/Bw + AoeGE1nuiWRnZ6h858XGAms6kvWoj1tHXew6qqPXUB65hpLQhykMfoi8gIdEFKwiU9pVnPf9hLrdR4hS + Bj4sde4RQoIfISp4NSnhmuRG61GWYEhFoi5l8ZqUxK6hKEL2E/oghYH3UxlwH03+D9Id8AAT4avZk2zI + xXxrbpXY8nixJXfkWVzPXZkT+GKuIWdz9TmuiPdMbXYL/9iRvJYdiasFa1hO0WQ5TZtd6drMp2qwVdbP + pKxiR/oqDmSt4aqI7GeqTHhTBPV3pA6822HLa1IHnqo15kK+BvuTH2Jn/P0cy9HhdoMdbw748N0NPvxk + yIsP+t34qdSZD1pt+ZmI8l/Xm/ChiN+PWk34bYsRv2g14Mfthnx3vSHv9Brxar8pLw3a87Rwz+u9nhxb + 78u4PJOGdAcKExxIV144i7aU8dKUqCB9GRt1iAzUl3HUWPoMC5JiLEWsWZAeZUVerA3l8TY0xEv/HWNN + b5Q5GyOMmQjRZzpIm4VALZYChZ8GaXIoVI8TUcaci1Wif604FWvCsSh9DoZpcjh0BUcEB4PXcShEQ12/ + X57TvmgdluN1WYjXYkvkKuGaD7MvQpOLCWbcSLbhTpIdTyXa8XSsJU9GGHEnVIcXYgx4Ld2Gb0n9e6rI + jZMZ9kxHmdEXZEy/cK2xGCd5Bm6MJ8p4JP1Jp/C5ugA9yn00qfDXoSZIECjcMFif9WHGdMl3bR7r6PPR + Ypv0O4ejrLkS78jjaS48merAoxH6XAnR5kqA8Ht/Da4E6XI1xJCrEeZck/tyTc7vcoINZ2MsOCf36Gqk + ObflHj4p/dhTIXo8Kb97Vu7Tq6G6vB2uy/uRArn+9+Q+vB+swfcj9flRvBk/TbXjgxxnflDszvulnrxZ + 4sG3itx5Js+Zp/KdebbMQ+qRD8+2BPF8XxLPbS7nqW0dXJnu59C4CMtREWybRpkYHWVybJxtU1uZm55h + bmYbC3Oz7Frarv4JvG//bsEeDh7cy8FDezl65ADHBCeOHeLUiaOcPX2M8+dPcOniaa5eOcvNRy9x+8Zl + 7ty6yjNPXOe9d17hN7/+CZ9+8js+/tOv+NNH/8Vf/vI7PvnkN/z2tz/igx+9zXff/xbfeed5vv/uC/zw + ved5++UbPH/rFHcuHeDysUUOL46wbaCRDU3FbFlfx3x/K0vDXewUgbW8SbmWAZbGR9g1JaJ1bBPzm7+O + AJ4ZH2V6TD5vHWdh2wQzss3WCRHuE+MipsfZPDjMcFc/A+3r6W5spDQ7g9ToUFIVAzg3dcUA7lUMYBHd + 3Y2qAdxaV6oawHXledSXF1BfpqSDLqCqKI/a0kI66msZ6lkv93aj3MNldu/drabqHZuZoH9qhPaJQbpm + NrFlaZr92+c5u307Z7ZPs2tzPxsaymgtTKU2I4aazBgqlRcPU8MoTAwgJ9qLlBBn4vysSAi0ISXUgdx4 + TxqLYulvymZzVwnjvWVsHahmfmMz2ze1s3OsW9DHjokBFicHWV6c4PChJa7dusTTr77AE2+8zu033ubW + W+9x7fW3ufjSaxy78yw7Lt9k7Ng5uvccpmv5EAN7DjJ+6CDzx/axfGSJk6f3cPP6Ma5f2sfpQ9PMTXTS + 21JMa1UGbdVZDHaUMjnSwmZlPtKuctoblPl/02mryKC3JpeR1mKmuiuYG5LnuaGKPWP1nF/q4oUzE7z3 + 6CzffnQr71wc5b1LQ7x/sZfvXujiZ9f6+fW1Hn53rZ0/Xm3mo6t1fHSlmg8vlvOH8+X86kQpPz9cyns7 + 8nh6NJHTbSEc6YjhaF8WJ0fKOT3RwInJVo5OdnJ4opuzC6O8cHYPP37mIr9++VF+/uxZvntjD+9cXeQ7 + t5b4+XMH+dPbl/jTe4/yx3dv8Yf3nuLjH73Kb37wGm88/xjnjitGyQ4uSN1/8pnbvKREyL3/nOAp3nz/ + lpSP8ta3r6p4873r8vk27373GV565TYHj+ygqrZQuJ2lOpegEv2rq78GXSn1jNdiYLoGE+u1eAVZkZYX + QdP6UobHOunb2EZrdwOtXU30buhj89YtLCzvYnbHDjaOTTA+Nc3A8Cg1Dc0UllaQV1xOfmkVtc0dDG2a + UCOAt83toL17gLKaBlrW99LZt0GN9lVSPjd29pBVVCbHLFKXN2+dZmRySjV8mzrWU9PUQn1rB539g4xu + mWJp7152CLoGBwmPi8XIylw1fxVoGigpnvXQ+Qa0DHX/A9r/YQArZu83ocz9+7XZu4J7nxXoqi8qm9ro + fIX/lwHs6Ga0Ak8TwX83gE3upoE2xjPYBJ9QM4KibIhKcSGjKIjatkwm59erBvDYTDvN3QXklceSVRxB + RmGY3LNQkrKD1fmAAyOd8A5emfv3ngGsQDGAg0Lt7xrA9gSFCILtCBT+HSLt+b8bwHEJolETvElK9iM1 + LYDEJMXA9SQlLZCi4jjKK1KorkmnpbWAgcFaNkqb6+2tobOznB4pu3qraZW2WFqRSnJaMAmJfiv7ShGk + epOW5kNmuhfZmT7Ck/3Iz/UnPz+IwqJQSksjaW/PYXq6gxMnZrjzlDIf7GOCJzh/9SD9wy0kpkfL9Xnh + 7ucu1+tLQmaK1I0ueob7ySzKwU+4u2IAF9aWqgbwxNwkzVJ3IxPD8VcycCUFUFOfSUtbNqVlYaSkOBAV + ZUJivDn5mfZU5rlQnuVKSaoTRSlOqvlbmOpOZpwTiRFyL31Fq7gb4mivja1oJxupD5ZSd/6fBrDtivm7 + YgArZq0pNqKn/r+gRvP+pwF8zwR2cFkxfu/hmwbwSjSxsWr83oPyWflO2UY1gAUrBrDxigGsmsBKFPDK + vNQrUFKUG+Luo4+Hrw6eftqis9bhH6hBYOAaAgPWESB8ISBAX+qROUnpflInE2ntq2Xrwhj7D+/m0JF9 + HDq8T8bv/ezes4s5Gd/n5mbYvXsnR44c5MTJY5w5c1Ke8TGOHjvMkcMHObB3D/v27OTY0X2cP3eUC2dk + rD91gAtnD3Hl/CGunjvIJRkDzp9Y5MKxWS6emOPqmXkePbPApRPbOLZvhP07e9k938a0cI8tQ3ksjBaw + Z7yIo1PlHBorZFd/Gos9qUzURzJaHsREVchXBvCOGj8mc+0YVbIV5lozV+rMgmiLrQUODCcLd4vXYyBB + h6FkfTak6DGcqkCHDQLFCFZTRCtRwVKOZxhIKXop31JgzVSurcCBLdn2TGU7MpHjINs7yfbuKwZwnuiL + LHf6MpxZn2pPR6ojbWmOdKQ7CVxokbpYmyh1M95OOK89FQmOlCc6URG/gsokR6pUY1i2S3agTup0XYoj + DUq0cLK9lPbUp9hSm2pDVaoVlQKlrEqzEFhSna7ASi0r08yoTjVfQZqJrFMigo1VVKcYU5NqQmO6OW3Z + 1qwvdKSzwIlWua6qVEtK4ozJFT6qRP8q5q+ynBdpTL5w77xoE/JjzCmIt1LTP6fL+pRQJZr2Gwaw8PwU + xXQVnrtiDBsR46dLjI8OsT7axEp9jBc+rEQBR/poEO61lghPKT3WEuK6egWqESx66y7+bwZwgr8ByUEm + pErfuwJTku6ei5rm+W707/9kAMcrBrD8JjLAhCBvI3ykLbm5SPtxNlKnxXNwkvam/h8qbU7aup29uSxb + qYEmyv+NLm5W2NqbqP+F3oOdbO/upmQbNFcNYH39VejpPoKx0TosLHSxkW0U43cF0kdIP+Ik47mPjzPh + 4d7ExfmTIIiL9iYm2l36NWeipN+PkL4+1N+KED8LIoOsSQyzITva6n8wgPU5XCq6r8aUG3Xm3Kkz4bk6 + U15tMOK9NiO+32HAd1t1eL9ZMYA1eKdZkzeadPhWozYvNujzXIMBz9Qp0OOpOn2erBV9UW/Is6IJX+60 + 5OUuK27Jd2dLRHtm3M9c7H1sCXuAGdFXi6mGLEjbWhKtujdbmyMF2hwv1OJ0iT4XqkTPNJhxtcmCq81W + XG2x5kanPdc77LnSYsfZWgtOVRhwolSL44LDpdrsLzZkZ6E5m9IMaQ5fS77XQ8TYiCZXIoFtVuNrp4GX + vRZuTvryzGSclnuuwFmel5uDAT620t9ZPUis3f3kuT5Atc8DtATfrxrAU1la7Cw352CtLQdqLdkl92xZ + yYBaZ8+ZBmsuNJhwoUmX883ruNVvwKszLry/O4T39yXxgxMVvHeiiZePtnPn0Hqu7O/j1J4BDi1vYP/y + ZukDt7K8vI09O6c5sGc7J4/u5czJg9IXHuL0iQPyWYkGXub4kd2CZekvBaoJvIeTJxUTeD8nju8Tzr3M + wQPS3x6T9afl9+eOcEbB2SOcv3CCE7K/vft2MDe/5SsDOCjEByc3O9X8VeFqi4u7nWoAWzqYqhHA2lIX + FSPYROqgpaMFDt4OMub6EZ+VQGlDBeNzWzly7hS3nnmS5994jZeE77/9ne/y01//ht99/Akf/+1zPv7r + l3fxT/70l7/zxz9/zq9+/2c++OWH/PBnv+Xnv/yIP3z0OZ/9Db74B/xNyj99/E/+8IfP+cNv/8bPf/wH + 3nn1+zz7+LdkTLjOmaMXOXnoDIf3HGNmcp6OpvVkpWQTERiBn5svId6BxIQKv4lNJDM+lYy4FJKi4okP + jyE+NJqEsBgSImJVxEfFCaSMiZN2FEtsdDQxUZGCCGIiQogRzpEc5ENBUAC1YeH0xCfTn5hKR0oqzemp + VGWlUZKTRkFeGjkFaWQWppFeKBqvIIMU0Xep8n1qWjIZaSnCg742gPPUKOA8ystLhV9V0tTcILxqxfyd + mNrM1LToyNkJZhcnmd8xxfZdW1nYOSXL48xtH/sKM0uiQe9idvuoYCMzi8MrmN/A9Nwg22b7VUzP9DM7 + O/AVFuaH2bljMzsXN7Ewu0G0a99/GMB9XVUM3zWAF+aG2S56Zn5etO5/w8L8qODu8qJiAI+pkboKFrZP + CEQb38Xijkm2L20RnbCCxR1yjfMrUcBK1O+kYvjKshL9q2J6WDV/FZN4Ro4/K8ea+QbmZjezKPdop9yf + vXvn2Ltnlu3bJ9m6bSOjm3to76yluq6Q/OJUUkTvxqaEER7rr87p6+7ngIO7NbYuFlhJX2wtvMnBxVKt + /4rJq0CJDlbhaadCWWfvaqUaxnau5gLhY85K9K+O7EfgpoWLtzaeStbeMHMSkz3JygwR3htDWWEyjVW5 + NJRlkp8STkyAC572hrhZ6+FhI32QgzEBch4BjmZq6S99U6Ccm5+cl4fwO2crHZwttQn2tKGuJJ35iX7u + +/nFDN7aE8bNYVtO1ulwsGANh/M0OVNkyPVqa55qd+G5Xg+e6nXhVrejdFDO3NjgxKU+G852W3K83Zi9 + devYV7+KU906PLfgzLePB/HTSxH8+GIYbx/15vklJy5vNGF/owYLRWvYkrqKrdJxz2WZsJBrKaU5Uxkm + jKUaMCHr5sqc2F7jyXS5CxsyzGgOW0uN34OqCVzn/yDNIavpiFpHb4w2GxN0GU8xZC7TguV8G06UO3Ox + xoubTQE81hzE+TJ3DmfZsBCjz5aQdcxH67E3xZyjOXacEtJ2ssSW40VyHcUmnC4z4Wy5EUfy5XqyH+Ro + yVrOVMsAVC/r6yw4XWPN8TIr9ueaszfXgsNljhyp9eRAvSe76lyZrxXSVm3Lllp7tja5MdPiw1iFO71Z + 1nQkmtAcpU1D2CoaQu6nIeg+WkMfYCxHm501xuxvMeBklyHXNlrw5FZnntziyvWNLpzucmOhyobBbD0a + kzUpiNUkKXINESGPyCCuRViYEUGBxihzzXi4a+LuroWvrwHhUnmioy2JDBeRGGhAgJAhP29dfD0N8PUw + FijpPiwI8BIR6G6Bu5B9B1ttrC1WY2u1FmcHTZFfeLQAAP/0SURBVDzdpBKK6FQM4DB/cyKCLEiNcyY9 + wZWUBGeSY51UJMQ4kBBtT2Ksw10DWEl1/E0DWB8nJwOBkWoQKemRXVxk8JRSSfms4J75a20rwtpcWzV/ + lVIxg5V1/5muyAhzJb2zwFHOXZkD2NnXBntPC8zkeIr5qxrBdw1gBWZWK1DMX8UENpFSWba0WjGB70Ex + gf8nA1gp75nASiTwvdzvPj6K8bsSAXzPAFauUTGAraTBKURMeRNPMcHcpXNQzF+ldLEzxdHGSJ0DWDGA + w/yciQnxVOcBVucCDvMkKcKbxHB3YkNcifS3I9RHSJkgIcKNgowwqooSKcuLoyAzkszkYDISAshOkc4i + M4L8nAiKlLevSxMoKYkjIzOQWCF4sRGOsi9rIb9GhAmhSbBfS5bjQ9T4PMzWLAOudtnx9ow7vz8WyN+v + RgnC+OJKIF9e9ZdlH/5x0Y1/nLHni6MW/PWQCZ8eMuazo2Z8etyST8/Y8s9bXvB0ILwYzr9fiuYvt4P5 + 1clAXpv04EyFGVOh9wzg+9kcqsNihj1L+e5sy3FjIMmBmhALEm1XE27+MLGW64i30CDVSpsMuZd58lxL + RNQqUJYzRTAniYiOF8SZ6pBgZUSig4Vq5kbIcwy2NMLfTE+gQ4B872eija+xJj5GGvgYr1URZKZBrK0B + uUKklfl8mz2c6PV2Y9TXk00eLow7OjJp68gmKZUU0G2O1jQLKW8VItPq60Sdu4gkB3PqHC1p9VyJDO4P + 9FRN4AEpu/3caXGzp9rJkiIh4BlSH5IFCVYCaRfJItQTRWBHC7EMt9UiwFLOy3w1XmZr8BC4Gq/GSTF/ + DVdhq78aax2Bvgb2pro4S31V8v+7KvVVju/uYvuVAexkZ4mzzUqEuZe0bR9pfwEuGiQH69CYZ8bymD8v + Xc3ko+9X86/f1/LvP1Xxf35fyt9/Ucxv30zn3RvRPL7fj70DlgwValMU/DBRyjw5dpp42OphZ62NlYUW + NjY6OIiIcftvBrCTDDoKlPm+70FJh67gngGswMnRCHdXOT8vS7y9VuahWTGAlf7EjbQEaQexrkSF2xMS + aC3iyUJ9O1URUB5Oerg66eLqIqUCGUjdnGRAFLjLfjyln/PxkW2l7/IPsMBXSi9fOYa33BMlFbqP9I1B + NtKPOhIT4y4kzouYSE85loihcA/VCA4XhIlYCo/wISLSj6hoIYfRQcTGBKtQlmNiAoiJ9SM2zov4eA/V + /E1KcJLvbYmQ/jdKEBdjQUqSJRkinLOzLITImZKdbUROjoG0VT2Kc3WozNOmo8qIkVZrJjqt2NJmyuYG + Gd/qtdjWrMd2GWuP9Nlyql+EQ58DZ3vtudDnxJVBV25u8ub6qDdnuuxX5gIWwXOi05Hj6104sd6V491u + nOhx43S/N+cG/Tjc4cRSrSmLVcbqHMD7RCQdEoF0stuFC0NKxLAnx7qc1PVLIu4Was1YkHJvpxP7u13Z + 3+PK3l5X5hQDuFiH9aoBrLliAOcas1nE1FS5DbPV9izW2LG91oYdtdbsrLNjb6OMmx0eHO30ZH+TnEel + rZr2ebrYVGDOtmIrpmRM3lpqy1SZLeMyRo/kWzEoY+4GGeMnFAO4OYC93ZHs741mR2ugmuZ5TtYttoWw + uzuKo8MpHBxMVOfu3VrrwaYyBzYWO7C5zJlxZT5gweYyV0ZLXNhYJG07147+bBuGC5wZKXJjc6kbm8pl + mypXJmvcZUz3ZJscY74lgJkGb6YbPOVY/uzpi+DIaJIghb39MexcH6ZGBw8V2tAmfKY6Zi2V0Wspi1xN + cfhq8oMeISfgQTJ9BQGrSAtcRYz3/YR53kdEwCMiwNfJmK0hpYaIDQ0yI/UoijGiSvhDVbwe5bEalMWs + kXI1FdFKGuiHqQ56gAa/B+gKfIhNcozFOB1OZltyvdSB22V2PCb382qBGZfyTThfaMqJfEP2Zkrfm7KW + rQmrGI99iPG4h9mSuIZtKRpMp2qyLU2LLckaTCStk3Xr2JGuwUERsleLjXmmypw3mu349npn3m6z41tN + VtyRenQ6ex1L0fezM/5BThUZ8WS7K29KXXt/0JsfDHry/W5nvtdux/earPmB1KefS737XevKPMAfNBnw + vQYd3m3U4o0WLV5p1+KF9Xq80GfNs4PCPWUfp3oDhF950JzpQEmyEzmJCgexIi7ShKggPeEo2oQH6hIj + nCg+SshztIwlkeakRVqSH2NDRbwtLYn2dEk5IO1xNMqYLaH6zIRosxikyY4ADZb9NdgfpMOxMENOR5lx + OtaC49HGHIzQYU/wOvYErWWvlAqWA9eon3cLr1wKlXsUqcWicNLpGA3G5LmMBT7AQvBqjscYcynJmusJ + 1tyKtea27PdmmAE3grV4IkKbF4WPvpBnz51iN47LtW2NNqc32ITeMGtGYlwYS/Rgg/Cu7kgbmmR9hZ8u + hV4aFPpqUSHXWxNsQEuYCd1RlvSEmtDpq0u/CIgZue4jMXZcinNUI3uvx1lxLUyfazLu3hDcjjDklty7 + m5FmXJP7dSXGkkvxlpyPs+CUrDsdbsKlMDNuSP/1eKgxd+S+3PFdy9N+a/lWkDynUG3eC9fmO8JDvxep + y/cFP4w25Cdx8mxTbflZlhM/znPmOzlOvJllz7fSbXkmzYZnM215Lt+JZ0tcuSPP83ZTEI92JHGhp4Cd + zflsLM+hOTeLiuxsCrOyKMovoKyklKqKSmqqKqivraGlqYH1HW10dXfQ3dNJT6+CDnp7OuiT5f6+FQwO + rGdkpJfJyWGmpzezfX6KXTum2bd7Qf1D5MknrvLDH76tmr+ffPxrKf+LTz/9NR9++DN++sE7vPHqUzz/ + zKN867mbfOft5/jFj17nR++9wKvPXuHOlcNcPr6DQyIkJ3pq6a7KYaC2kE3NFUx21DGxvkH68SY2tTew + uauVib4uRtd3MNzZxsYuKeXch7raGVwvn/u7GBnoYVgw1Nct6GWwp4+e9i7WN7bRVtsgwq+c3KREEsID + SI4Opiw/la6Wyv+rAVxbmkd1cTYl2WnkZyRRnp8p+6piQ896JjdtZMfCNDPTk4yNb2R48wADY/30jvcx + LKJ6Ydc0x3fOcWV5gUs7t7FfBOPW7jpGm4vpr86mryqLvtpMuivTaC9NpDE/isqMIAoTPSlO8aY83Z+G + wnD6G9PZtL6AbQMVzGyoYmFjHUubW9g51s7yeLdwkV52jfezNDnAbjnuoX1zXLpykqdfepJn3niZJ15/ + lTtvvsHtV1/j2gsvcvaJJzl88zaLZy8wvPcAvUu7GNq5k4l9u1g6usyBo9s5dXKJW1cP8OjZJU7tn2Bh + op2hjiI6atLpqs9irL+SxS3tLEy2Mrmhmg0dBfTWpdNXncZoYzazXSXs3VjL6ekOTm9r5sJsC0/u7eGt + 06N8cG2Kn10d40fn+wWd/OhcEx+cq+e3V1r46GoTH1+t5c9XKvn0SpmghD9fKuZPF0r545lSfnu8lA/2 + FfLuQg5PbUrm0Q3JXB3N5ep4GVemarm4tYnz0+1cnuvhzt4x3rywi188fZrfPX+WXz5xiB9cX+C7V7by + o5sz/PrZZf70ylE+eu0kf3j9LH944wofffsJPnjtJo+f3cP8WDej/S3sk+d4/dFTPPf8o7zx1hOqSfbG + O7L87mVef+8Cr717gVfevsyrbz8quMWdpy8wvzROZm4CSvShoakW+sKbdQ3WoiPQFd6sb7oaI6s1uAuv + Ss4Job69kMFNrXRvaKaxs5bGjnq6BnsY3TKhpn2e2DZL9+AGhjeN09HdR0FJBUlpWcQkpZOQlk1eSSXt + PQMs7twrx95Nz4ZRKuubaV3fR0fvEK29gypauvspqKgho7CUmpYOOeYYvcNK+uduqhqaKK+tp6aplbae + XobHJ9ToXwWd/f1qBLCBhSlK5K9iAGvo66gGsK7R19BWTd970EHHSK7dRAcj5cXhu1rya9xL+az7DawY + waZq9qmVF5VNbRQjeMUAtnLUV2EtHFWBzV0o6Z8V2LsZruCu4ebsbXYXwqm9jKUUDe0r/DbQCK9gY/wj + LAhPdCA135+q5lQ2TjUxvdTH5ulWuV9FFNckklsWRXpBCElZogHTfAiNc8UnVMmaJXxYeTHyfzGAg8Mc + CJFyBQ7Cg0XvJ/p+ZQArmaUSkrxV4zc7N4z8gihy8sJITQ8kKzuE8ookauszqJV21diUzfquMumvy2U5 + VzWF6xtzqWuUPqohl6LSZDUCOCU1SLRqGLm5EeTlK5D95gbL52DhykFy3GAKisIpq4ijpjaZ9o58prZ1 + cuz4HHeePM3rb9+Ruv0U568coX9jOylZCfiFBuAV6INvWCBx0ge2yjixfqiHtPws1QAOigujuLZMNYDH + Z8dpkn47MiFM7ocH0aKpq+uyaG7Jpbg4XLi9PeGhRsTJGJ6d5kBZrjul2e4UpbmQn+RMQYo7+ckeZCa4 + khbnQpySyjrQDg/RI0q0n5IVTEkDbSYa0Fj5Y1y0qTJPp4XUGQX3/qf42vxV/vP4X8xfBY73DOAVrKRv + Vsxfk/+/GMC2rrJfgd29OnnXAFbqolofPY1x8TTE08cQb189/AL0CAzUIjRIuFiQBmEBmoT4y2fhIyFB + 5sQluJFbHEv3UCO7pJ8/f/EEly6f4dLFM1wUnDt7Un2J68jhA5w5c4IL50+rUNafOnmMEyeOcOLoIQ7t + 3yvjxDInjx3kyvmTKs6eOMDp43s5d2IP544r2MV5GQfOHV/k7LF5wQwnD23l8J5Rds73MjfVytSmGjb2 + COfozGCyJ5PZ/kz2jORzYFMhu4eyWZLPU02xjFWHsrUunEU1BXS4agBPFTgymWsjmsWR+TJ3Fis82Fbo + xFCiIV1RGnRHa9Abr0tfgvYKEjVVDCfrMJJmwFiWsUA0XoYxEzkWTOVZy/6smBAdMpEtukd40nimPZsy + 7RgVXjiWI1qkwJuxfC82SJ3rSXeiPdmO1iQ7mpPtaU5xoCXVUTVxy+OtKRGuWRRrS3GcHcXxjpQIDyyL + c6I80ZGKRCeqkh2pTrKnWravSXagVj7Xyf4U1CrzWadYU5FiRVmyJeUpglQLKlIV09eKqnRrqjIsqUhX + TOF7MJX1JmpEsIKqFBMqk41lv6Y0ZVrSKveqKcuGevl9pXDe0ngT1fRVon+zhZfmCHLDDWWdIdkRxuQI + N80Vnp4tbS1F+HiicPzEIEPVYE0KNlJTK8cF6qtQTFbVaJV6Fucn6/x1VfM3MUifhAB9Yv20iPIRXeWt + RaTXurupoFfm+A11UUxfxfxdMYDDXNZ8ZQDfM4NXIoDlOAFyfOl7FSjpoBOV9M53z+U/opOVFNBBCpTz + /toAjgo0JcTXBB8PYzXzohIs4uJqibObwMVKfeHKwclCnZLO0dlGNYDdPezkszmW0i+YmOt8BeVFEiWT + op30E8ocwIoBrK+36r8ZwNJ+lXZta6gGojg6muHlaU+I0rdF+xIX46MawPFxXsTFuZMY50lCjBux0m9F + yHgQHWJDouiQnGhLSqJNqYvWp1P05XCiBvPZehwpMeZi9YoB/Hi9Kc81mPBqoxHvthvx3c4VA/jbrZq8 + L5ru7WZtXm/S42XRei80GfFskzFPN5qoeEopm+T3rRa83GnH6/1OvD7oxBMtJlys0OBo7iMsxt/HdMQD + LCZqsyNNn6VUXXZlaLEvV5OjxTqcKNHmZImOmrnzUp0xV5vMudYiOrjNmse7HQTOPNblxI1WOx5VIoRr + Dbhcb8AlOfalFmvOtjmxp9qWoRRt0VUPkOJ4H1F29xNqt4YgR038nXTwdjVcyZgpz0uBh4sZ3s6GBDho + Em4v2t57HfWhWnRGatITvUpNAT2WJveq0IhdFZbsKDNlKkuHqXQdFvIM2F9myCk518sdxjzaY8iTG814 + Y86V93cF8c7OGN7dn8cr+yp4armGKzvqOTnfxN7pZha3tkn/1c3s9CAzMxtZnBtjeWla+sTtHDu8SzV8 + jx3eKZ8X2bs8dxez7N79NfbumWPf3nl1eWnHVrYvbmHn8gz7DyqZFXar6fUVE/jsuaMcOLiTmdkJRkb7 + aWisIjk5Bh8/NxxdrQVWOChRkEq9dbFUP1tLPVO4kY6JpkADYxtDzGWdjbs1nsGeRKZEkV9VJHxlEwdO + H+XmM3d44c1X+dY7b/L+D7/PL3//Oz787DM+++JLwT9W8Pm/+ORv/+Tjz77kdx9+yi9+9RE//eUf+PVv + PubjP/+dL/4Of/8H/PWzf/OH3/2VX/zsj3z//Z/z6vNvc+PiHY7tO8X8xCJTG7cyMTTOSM9GmiqbyEnO + JtQ3BB8nD9xtHAlw9SQ6MIS0mDjyElPIiU8iLTqOpIgoEkMjpD1EkhQuy8rnyOgVRMeQEBVNfHQksVER + gjBpQ8I3goQfBXhRHBQg9SJMNHocPbEJtCUmSD+dJP1pIkWZieRnJZOVk0x6nvCgvFSS89JIyk4mOSNF + OFESGWlpZKanf2UA54o+LihQeFSFcJMGVQOPjG5gcqsS8btFzawxuzglfHqbYCs7lrexXbComKY7J7/C + wq7xrzCvplbezMIO0X6C+cVR5heGmZsf+gqL8xu+wg75fveuSal3E6q5O7ttiEnRc5s2tjHYV09vdzXD + Q01sm+pnfla05uJmduwY/28Y+wrbt29WDV3F5P0aisn7NbYvTbFDrmdp11Z27hbs3MLC4ria5nnbtg1M + S1uYvRvhq0T7bpX1Cqbn5Pzk+POCubtQTeaFMfX3ynF3LSsvU0g7UKKlRYdOyf6GN3XRM6DokGpqm0vI + L88gNSeOyPgg1QR283fEwdMaK+FMSkCilfTHNtJX2zpbqFCig1UokcJKO1FKaSMrULYT/uakzP2rg4O7 + nvB7PeHkhvgLx4yIthIu7ENhfjjlxfGi5VNpq8mlvTqHypxYMqJ9CPO0IkD24e9gRICjMcFOJoQ4yxgj + CJW+KdTdgmApfRxEM4j+8LLTI9rfnraqbHZPb+C+v7zSzC+v5PHqjmCuD9hxqlqfMxXSIdVYcbvRiac6 + 3Himx4Pb0nFeabfhcpc9F3vtONlpwZFWM/Y1GLC9fJWQn4c41KbF0/NuvH88jB9diOb75yN57ZAPT253 + 5uywGcsNWmyRjnw44SE2JWmyJd2Y6WxLFVPZ5kwKGdpaYM1ilTs7G3xZqPViUshVZ6yuGvWrRP/WBzxE + a9ha1QDujtZiIE6L0SRdtsq+FnPM2V9ow6lyV641+HGzKYiz5e4cFEI1F2vAVJgmS4nG7M+04Wi+AyeK + nThaaM2RfHOOSAd9osRIBhB9DuSsYjnjPg4UPszpGh3ONRhxpt6MM3VWnKqw4lCBOQcKLDha4cjhWncO + 1LmzVOvEbLUdE9LJb66yZqLWgal6N8YqXOnPsaYz2YimaE3qQh+iIeQ+1QBuC3uArUW67G8y43iXEReG + ZCCcceDVZW9e2+nP01v9OdfjyfYqO4Yy9GmI1aQwUluIhhCZQA0iQwyICJWHHWiCn1QcTzdNGZDW4emq + SYCP3orxEGkpRFwqh7c23u6aMoDJIOZiIDDCx82MAA9rfN1lIFPeQLMWUmG6CivzVTjYrMNVBjxfdwMC + feQYfmZEBlmQm+ZNfoYvOeleZKV6khznrBrA8dFKBPA9A1jEY4AlXorosddTU0s7KSlaRZQo6ZFXYKmS + HycXCxXK22/KfMCWIpqVeX9NzJToX11VLCkERklL5KBE1roqjcoMS6nwSoOzdxVx7CVkycsSa1k2sb9r + ADsYfJUCWsGKsFoxfRUD2NhcX4W5hSEWlkZflUo08P+UAlo1ggPcVQP4Hnx8Xe4awAocVSPYy0tImwgv + xeSytNDGzExbJWP2itnrZIabdAYuMhAqedvtLeWeyLV5u1kR6udMVLCHagKrRnCoB4nh3iRFehAf5k5M + sCPh/jYEeYqICnORQSOCurJUyvLjycuIICVWSR0tvxEyl5YYQJqI86yMEAoLoykrT6CwKIqMVF8yRLAn + iKCP9DIlSp5vmrMmBa6P0Bq4il0lFjwx5MJ3F734+GQw/3o0gi8vBfL5RR++uOjNlxc8+ccZZ/5x3JYv + Dprzl73GfLpPcMCET49a8NkpW/55wxOeDIDnw/j3C1H85Xowvz4axOvjnpwtM2NLyCp6ne6jz/1BNofp + MZvuwHyeB5M5ImgSRKQEmBJh8TB+RvcTJHUxxGQNUWYaxEl9SBOBnCv1NFfuY7qtAUnmukQbahBhuJZw + KaPMdEm0tyBBnl+0rRkh8qwDzESQisgONtUhSMhIgPE6/GT7AMPVBAmiTNeSLuK3xsee9YFuDAV6Mh7i + y1SgN+PermxysWfU0YENrs70uNjR5GRFrXTs9Z621HuJcJIOvVqeZ6OLNe0+TnT5u9DjL9cidaVbyjYf + F+rd7CgXcpRnZ0KK1IU4OZ9oC4GtHnEi2qOFQIZKGwmwlLZruho340dwM1qNi2L+GjyCveGquwawtE3t + R7DWW4OdsTZOUl9d5DpVE1iJAHax+Q8D2MnOTCWoPkJY/aUtBrlpkRSkRVO+Bfu2hPL6rXw++aAaPhb8 + pVzKQviwmM9+ksVPX4rj5XPBnBgX4VllRFnEGmJdHiTESfoQB2nTtloiMDQF2tjLNbhKX+LuYYGztFMn + J2MRLMYrpbTTe7CXQche2qydtE87Ne2R0jfo4+psgKe7EgkscDXG19OM8BB7kuI8SE/0JiVexEqEg6yz + FfFkRaC3Gf6eJmoUsLuLvhBygxUo5NxFhJXASwSWl4chvt6yP39TAgLM8JPS28cIby8lZbUBPkpK+2Br + oiMdRfi4S98lbS1K2pq0r5hwFzmmO1GRypuxQghlsI2N8SM2NkDEUiCJ8cErSAgmISGQ+AR/KT1JSnRT + zd+kRAfZ3lr6YGlngvgYc5ITLKQNWpKdYU5WpjHZWQbk5uhRlKdLZYEeDTL2DDVZMjvgwvKIG3s2OrPY + ZcF8uzE7OkzY3SHjVLcNp3vsONttx7luGYv7nLh61wC+scmHY21WHBbRc6TNRsZnW452OHOs01k1fA/L + 8gkZyxUDWDGEdzdaq3MB72lSzF8HjnW5yL7dubDBhzOD3hzvceFAuz27GqyYr7FgUcqD8v3hPi8OCQ70 + ezDbbMVgkQie9FV0ZWjSm6XLUI5iAFswVW7LTKUtc5Uy/lZbslAlAqjWlt0NjhxZ783Rbl/2tbiyKNvM + llqytdhMIFyg2IrJIku2lNgyWWbH5hI7hgvlOHlWDOVbM1buzHyzP3t6ItnXG6XOzztd78VcUwA72pWU + zPGcHMvkyMZU5lsD2FLjphrAIyUOUjp9hZESJ4aLHBnMt1Vf0urOkP3nKetcGS11Y6Rcfifj91iVKxPV + SiSwl2oATzf4qPMCL3YGsm8wimPjqYJ09g3FsWN9KFsbvBkQHtKcakBZ1BqKI9dQFL6GQkF+yFpyg1eT + FbiGrOB1pAatJdrnISJ8HiQ2VJP4SF2pg9KPReqRGq5LQZQR5dEm1MabUh2rT1WsFjXxmjSkaNGSqkOL + LDdHrKIp8EG6pW8diVzLTIwm+9NMuFDswNVSB64UW3Mmz5yT+WYcKzRlT44+M8lrGY15kIHoB+iLvp+B + +IcZTl7HSJomo+nCqUSgjqYo0GIqVZvFDF0OZOtzudScJ6uteb3FmffWu/N6qz3PN1hzq8KEYxnrWIy8 + n2XZ97lKK57sEh4zGMDbg76qCfzOekfeabHl3UYb3qu15Efyu1902POzDhu+3WjA6zUavFS9ihfrVvFs + /SM82biGZzpNeGbAiceGfaTeBjMrvLAz15XKdDc10iYlzvo/DOCwQB3VAI6LNCMh2lw1gNOFAxXE2FCV + YEd7shN9SdKfx1uxOUbqW7jci9CvDeCdPuvY46/F4WA9joUbc0z2fSjCkD3ybHYGrmVJnptS7pRyu/8q + dgSuZkfwWubluc5FaDIbpc2WSLmPQQ+z0fd+tvg/zN5IfU7Fm6vG6iU5r8vhRlyU/SupmG/Ifp8STvpU + jg23il05kuXAeJQp64WzdYZKnY9xkXOV8STKSXivNdUBJhT66JLtrkGucLrSIAPqwsxoF7HQE2tPb4Q1 + XQHGDASbMhtjy7F4Ry7ESj2Is+NShClXQvW4HqbD45EGPB1nrs7v+3isJdeizLgYbcoFWXc21pxjcg+P + hxhyPtiYR0OMuR2kz+0ALW57reIJ71W85L+WV4M0eC9UMX91+FGsoYofxxrzk1gTfpEizzbDgZ9mOvK9 + NDveTrLklQQznhO8IH3gSzlSbwoduVXiyKUyV+HVARyojmZjZgg10X6k+LgT4ir8ytVV+nAfggICpa8O + ITI8VH3DOjE+lvTUZBFIqSvISiEzI4mU5BiSkmJIFiQlRgkPiiU3O4ny8hzqaotoa66iZ30jG4fWs3Vy + g5oS7eWX7vCLn3+XP/zuAz78w0/56KOf8atffpf33nmBW9fPcPH8IW5dO83brz3Jb372Lv/1ozd499XH + efrmSS4fX2L/zAgjHZU0FaZQnRlHo4j49uJM2kqyZF0mdXkZNBbn0FxWRF1hPtWFudQW51MjqC7Ko1I+ + 11UU01hdTlNdFU211YI6QQO1FTVUFVdQkldIQWYGyTFRRAk/SYwOpLwwjZ62akb6Wtg02K4awL1ttbTX + K6meC4Uf5lFTmktpbgrZKdGkxoWSl55AQ0UJg52tTI4MMLGpn6H+Dvp6WugbaGWDCN6RyX6mRCAvL09x + bs8cN/cv8OiebRyZ6mNpqJHFwTpmlDTO3RXM9lWwrbecic5CRluyGahPoasyhp7qOHprExlqTmWiWzF/ + S9k+WsPSWD3LmxvZPd7MnvF29k50CXrYM9HP8pZ+dk4PsG/nJOfO7OXOU1d56uUneOKlp3niW8/x2PPP + 8OhTd7j0+E3O3L7JgUsX2HroABt2LLBx+yxTu+fZd2wnJ07s4PypRW5fWubG2UXOHZxgz3QHE/0l9Dam + M9SazcxINbtn2tg/387OiTpmh0qYaMtkk5zzttZ09g8Wc36qgaf39vP0rk6e2dXOm4d6+OGpQX5zZZTf + Xx7iV2fbBXX815kKfn2mhD9dquDTy2X89XKRIJ+/Xc7jr1dy+exKAZ9cLOLjcyV8eKqE3x0r5ReHSnlv + ewHPb8ngqclc7kwVc3tbObdm6rg538KTu3p44/gEP7i6xO+fOcpHzxzhN48t8bNHp/jxlU38/MYYv396 + lj89t4OPnl/mDy/u4w8vHeVPb13ih08d5dz2QdXMri+IYXKoiXNHF3n2ybO89cYt3n77Bm++fYXX370k + OMer75znW29f5FtvXeWZly9x4dohNmzuJDTKFxPRKPcMYD0jDbT0V6NttBZdk1UYWKzCVXRhYlYgta35 + 9I400TnYQF1blaCGjv4uNkxsZnJ2TvY3QVNnF31DG2ls7SAlI4eQiBj8QiMJjowjKUPaQHMH2+aWWFTm + Ad48SW1zO61dfbT3DKrRvo3re2mWz8U1DeSUVlKpGr19NLR3UlZTT0FZOQUVVVTUN8qxlPmIN7F1YYFt + gsaODnxDQtAzM1ENYC1DPTT0FINX/2sD2FAXHQUGsl6FFnpy3fqm2hgpkZlfGb93YaOYv4rh+00DeAUr + kb/3DGDZRrS1YgBbOhli6WiAtXBmBTbC/RXYih5X4Sp6V4W+insGsIuPaEYv0dOeBjh5C2f2F74bKBw2 + TLR5nC1JOd6U1MbTM1LB+GwHG6fkHnTlUyTtMKs4jMRMX6JTvAiNcyEgUnSqaPl7BrCS+vmbBnBgqJIC + 2oGQcCfCIpwJv4uISBfVAM7PjVShGMBJKT5kZgdTXBZHZVUyZRUJ5OVHquZtRXUydQ0ZVFWnUFWTTH1j + FnX1WWpkcE5uOAXFsfK7ZNkug9LKNLLzosnMDCMnJ1r0apzsK5FS0a5FxdHk5IWTnSPfKUZzYRSVNak0 + NOXQvr6Yiakujhxd4ImnLvD620/y2tvPcP7KcQY2dpGak4x/eBDewf74ShmVGk9jdysdA12kSL/sHxVE + SHw4JXVlbJoeY+v2rbRJfxqTHEVAmA9xyaHUNxXQ3l5KmVxjonD78FBT4qKVNNAuFOd6UpTtSX6aK1mJ + LmQluJKd4E5GghuZSZ7kpgeTkuAnY5cDXp5KCldDrJR6YXH3JXfRrMo8nYr5q0T13TOALWwMVVjZ3YsA + XoGN8gej4F5K6BUDWEndrBi3Jmq653spnxUDWPnf5B5s1G1WfvM/GcDKsZSX7JXv7ZxX8FX9VOcB/p8M + YNF+8lnRVUrggRJsEC4cLDpYl1jRmjGB2kQKL4sONCJCNFhEqA2ZWcEy1tRz4NB2bty8wO1bl7l5/aKK + 61cvcOHscc4Jrl09z81HL6vrLl+QcfjcKTWjx9ljhzl+cB9HDygm72FuXjrPY1cvcuXMMTXrgWL+nj22 + hwsn93D5zD4unZHPJ5c4eXSe/XvG2bk4xLYtHYyPNLCxr5zeliz6ZJza1JHGVFcauzcWcHSygkPjpewZ + zme6NYHJughmGqNYbAz/KgJ4W7EzM8WOLIhGWKzwZKF8xQAeTDCkI3wt7YKuaNFGsRp0xihYq6JXOHt/ + oi4jyjzB2RZsyjRXp7ubzLNlU7Ylo6JDRjMsGUm3FtgwnCZIt2M024WxQi82CYZy3elKd6Q10ZbGeGsa + E2ypS7SjPsmeKllXLJyuINqCvChrckWHFgg3VFAc50iJcMKyRCfKhQtXJtpTLr+rUCKGVSNYkGJHdaod + lam2lCRZUJxoTnGSINmMsnQryjOsqRBUynmWpyumsIXwcQXmAtMVI1hQmWoq+zaSYxhRJ9/VZ1pSkyrb + JJlSkWSiGsB5UYrhq5jABmSHSqkgTI/MMEOyhCdnCV/ODDchKVif+ACdrwxgpYwP1CfSR5NIXy35TpeE + AMUENpLSkIS7pnDSvQhcqYMxvispoZUU0RGeKyZwhPvKXL+hTg8T4nTPAFbW/acBHOWpzCmst2ICS9+r + IEk9zt1jSqkYwcq5qdHASinnqJjA6rkGGRMrnDwy0IxQf3N8vZT/O8xxd7fG3cMWN09bXN1sVcPXycVa + oJSKASzr3GywkT7ATPoKQxNNjEy0VCh9h7W1tFtLGV+MNdCXsdlAoBrA5jrY3A2eUf8/VYxgW2m7SkY4 + N2sCAlyESysvvHsRG+FBXKwnCfGepCX7kZHiT3qSl2goR6JDrEgItSAnypzSSCMaRJuuFw06nLCG+Swd + Dhcbfm0ANwi/bzLhlWYT3mk35tudhnxHNYC1eE/Kt1p0ea3ZiJfk++eaTXmuzYJnWq0E1iqeFx34crcj + bwy4885GL94e8eKZ9dZcqdLlRIHorqQHmIt+kKUk0WKpuuzN1uNggWJC63K6ypCz1QaiI2TbMk01cOty + gzFXm8240aZoUQee6lWmsnTh6W4nnl5vzx05/mMdptzpsuHJAReeGPHhmmjV+RITmsIfINvlPuId7ifa + fjXhThqEuugQKH2gMg2Zr6c1vh4ydrqbEyjjdYizBvGua6gXTTkobWM0w5xR0eejoqlHk9YwlaXLXKGS + 5l1f9NwqBiIfYlTKhRxNDlcbcqXbnDvDFjw/bslb8668t8OfN+ZCeXk+kSdnMrm2NY/j4wUsjxQxM1jC + pv4yhnur2CB8a3i4jfHNvcxOb5K+bQu7d21jn/D2vbtnmJd127YMq1pnamKQyfF+xscHVEwK594yOSjL + fYyOdrNxuJNNY31MbdvI9h2yH9nHoSPL7D+4xDbZT3dPK7V15TIGp6rpn909lPTPVqrpa+topo5HSml/ + 1/yylPFK30J4lIkGBsKVTGVssXQxx8XPmaC4YLJKchgcH2LfiYPcePoxXnzzVV57/y2++5Pv8+sP/8Cf + //ZX/vb3f/C3f/xrBX//P/z1y3/z2ef/5MM/K3P9fsjPfvFbfv3rD/nkky/58u/wNyVK+I9/5ec/+R3f + efuHPPvYS1w8fpmlbTsZ7R6hs6aNpvJ6GoqrqMwrITM2lWj/MLwd3HCztMPFzAp/JxfiAoPJiYunNC2d + ouQUcuMTyIiJJi0ykrSIFaSIDk2OjCBZlpNlfZIgMTKM+MhQ4qNCiAv3IyHIi/QAT8oC/WkMCaU7PFq0 + fAytsTHUJcRRLjq1MDVOeEK86NcEUrPiSc5KJDE7mcSMRJLSRNOqBnA6mekZZGdlkJWtzAWcoUYBNzbV + 0tPTycaRQbZMKeavEuW7TTDNwpJi/k4LViKAFagGsGDH7qm7mFzBni1sl3JpWcnCM65i+9KY1INRFreP + fIWlxdGvsGvHmNSxKfbI/pa2j6npnSfHexjd2E5/r2IA1zA81My2qYGvDGDFsF3B1F1MfANyHvLdDjlP + xeT9n7AkdXvn8jQ7d02zvGea3btl3dIkSurouVklkliJ6B1jXolwluMp6a63Kmbwwihzcr6KAaxGGcv3 + ium7XTWcBUty3ctyXsq1yP6U9NJKxPH0wiYm5bo2TfaKJllPS1ct5bUFpOXEE5UYJJzSA/dAR+FHFuqU + pObSvyrRwF8bwBYrL0fcNX2V9uLoYoWTWppjr3I2fRxc9dSpNDz9DIWDmxAaYUq8jMmFBUFUlUXTUJlE + a2UG6+uyWV+dKboujoJE4d9BTsT52sj4ZEmEmznhLiZEuJqqiJK+KUrGmHBXMwIdDfGxlf5LuFxKqAs9 + 9XkcWhjhvn//cAOfvdjE90+m8syUD5farbncZMPNVmfpNL14rs+Xp/u8ebTDnjNNFpxus+ZkhxUHW0zZ + 02jMjmp9potXs7XwIXbWrePWNnfePBrBd8/F8e1zsbx8MJDb0qEdGzRnvlqbjZmP0BXzAD0xaxiMlw5S + SMJ4pgVbciyFAFkxXeLIUq2XkCx/ttf5MF3uSn+yIa1ha1QTWME9A7gzWpOeWE0ZjLSZTDdgJtOEHdmm + HCy043yNF9eaAjhT4c4BIVaz8QZMRWixlGzCvmxbjhQ4cKzInkP5VgJTDhcacbxEUKwr3z/Mzoz72Jt/ + P6frdTjfaMiZBhPONlhyutqKI8XmHCo053CZLfsrHNld6cB8hQ1byy3ZXGrKSLk5myutGatyZHOZg/qn + 9fpUI5qE/NWF3k9D6H3SGdwn1/AAs2W6HOk05+JGC25OWvDqHne+ezyI7x2L4LVdEVzb4MvuGnsGU3Sp + lusuCNEiLVCLaF9tooRURwaJAPRX5ujVxdNFA3eHNbjZr8LTeQ1hyttwIlYihagEemnhJeu8HDXxcpBt + HfTxcTbG390KP8UAFhFhb6UYwKtVA9jGcg2OdhqyHx0Z6JTfy7ECzSnI9KM0L5iSvEDys/1IinNSo3/j + omxJiLIjMUaJMhUR6aeYT1Kx7ZT5b3RwdNQXMmOCpwycCry8hPjIsV2FADm7Km+9yQAiZMVcBowVA1hL + Tf+srFPmWnBU3pLzsMbFU4iRmww4ImisZECxlQrvJJXf3t0MC7kGxfxVYCaN0UQElJmNItaVlM8raZ+/ + MoDN9DEyE+IkMDM3+NoAtjNV375zc1dM3a/NXx8/F9Xw9fJ2UtNAf2UCKwawagIr0cB2eMg5KiaY8qav + hYg8UyFsSnoWWxF3znIdSlpcRyFz9iLy7L5hAIfI7yOD3FUTeMUIdic+zJNEIWeqARwqAjzAngC5ztgQ + Z9UArq9IlWchAj9FBhvZLjzAgYhgZ3kW8hshdEki1pU3sYtLYiktjaUgL5T8TBGkUW5ChC2JddUny02L + Cs819EdqcqzWgRc3efKTnT785Uww/340hC8v+PD5eQ8+P+vOl6dd+cdxR/5+yIbP95rxl2VjPt0t2GvC + Z4fM+ctJG/71qAc87g/PhAgi+euVYH61P4BXhlw5kWvERMAqehwVA3gVm4Xgz2a6MFfgw1iuN50JLuT5 + GhNo+hAe+vfhZfQw3oarCDJeR6gQ3DipD6kiTtOkriSJYI0x1yXEYC3BeqsJ1hfSbqxNop05ifZybTbS + CcqzDpHnG2qmQ5ipNqGmGgSbrCFQ9hls+DBh+g8TL58LHIxoD3RiJMKXyUg/piP92RbsxbiPC8Pu9vQr + c/u62NPiKKJH6kepEJsqeWZVSvSv1Mtq6eQb3W1pv5sWusPPVS3bpb40ejlSLcS+xMmCbHnuyVb66nlH + WuoSIXUkUo4d5mCAv7UOXmZrcTFahbPBI4LVOBquxsHgrvkr62zkfG10lc/rcJLrcpdr9JS66uFkjYez + DR4iFr5pADuqBrApPm4m0s7lvsqzjvVdQ02mEbvHg3n9dj5//qCcf39cAp8V8O8/Z8GneXz5uyx+/+0E + 3nssnCvbPZltsRayok2S1yMyyGjh66yr9g021utEgGjKIGYo4sVU2ozZSnocGWyU9M4rpYgOe4FSChwE + dnZK+mfl84oBfC9ls4ecp2Le+sigFRJgR2ykK0kx7uqc4lHhdkSE2hIaYP2VAeztboiXm6FarkBJrWSy + kt1A2cbHhCDphwKVec+VPlIGVz8ffYGU3gYE+hsTFWpDQoyjCB530hM9SIyS9hPmIO1JgfRlStR8tLSn + OG8RSL7SroTUxfmTmhQsYimEtJRQklOCSEr2l/bmQXKiEv3rIMv2xIoIj1Lm/xUkiDBIircgI9mcLBHH + mfIMsjP1KMzVo7xAl/oSA7qqTZgScbJ3sw8ntwVwepsfBzc6sr/fhv091hzqsua4iJUzXXZcUMzfHgcu + 9TmrBvCNUS81AliJ/j3SbMHBZkv2y3i1v0lJuWzLvmYpW+xlrHHlVJ8Px7s9ZJ09u+utOSDrj3W7qmmi + zw/4cGHIl9P9XhzvceNgpzO7GqyZrTJnrtaCA/K7owO+HB3045BsM11vwUCeBh2pMq5naKjzRSsG8KZC + GdNlfJyWcXG6wpqZSnNmKy1YrLFhqc6BfW0e7G/3ZFejM7OyzbYSS7bIuLqlxIrJYhk7iywZK7ZlvNSO + TSX2DBfZMCjj6IBgpMyJ6SZfdnWHs9wdyXSDtNsaD2YbA9jREc6hDcmcmczh+KY05pr9mah2Y3O5jMUq + nFfM31JHNSJ4sMCO3hwr1qdbyDVY0J/rwAZlPuBSVzaWucmxXGQ8l99UujAhx/jvBvD+oRhObc0UZLNv + OJ6F9SFMNnjTW2hNfYo+BaGryA1ZRb4ydkcoL3DpqMiP1CNXMXlDtUWArCY6YLX09XokRwtBizUSYWJM + TrSJ+tZ1laAp3pzmBBNaU4zozDBlQO7vSKkNw3lm9Kfq0RW9jr5oDTZGaTApvGghUZ+D2VYcE051JMeM + fRnG7M4SvpZtyLY0bTbEPEJn+P20Rd5Pe+xDrE9eQ7es703XoeculP0OCcbS9IVbSZ+RbczZYituVdnx + cosbb3Z581KbC0/W23JFOM/+NA1mIh9kZ7oeZ2uduN0TwHMDgbwoHPLlHg+eb7XjpUZbXm1y4M1mR77T + 5swPpd59t9Oe1xoMeLZiDU9WPMjTVQ9yp/J+blc9wBPNusI/7UQc+3JpQwg7mgPpK/KiPtub0gyvFQM4 + 4q4BHKBDeNBKBHBspNlKFHCEuTp/VWGMDdV3DeCBFAcR5nZMJliyLVJ4Y5gOi8ErBvCSz1p2+2qwP0Cb + Q8FyD0P12Ruqx84gDRYD136F7YJ5eW7zgWtYUDLLhGkwF6XDtmhdJuU5jwSvYsjvQcb8H2ExTJsDUUYc + k+d4ItSIE8F6nPDX5LTfGq6FanIn0ZDHsq25Kpx0T5o1w2EGtPjp0xxsSXe0M90xbrSGOwl3tKHE35Qc + b13S3DXJ9tGjOER5K9+GjngnuuNc6I1yoDtE2mSYcGnhZcfiXbgQ48DlaGsuhBlzJUSPm2G6PBltzPOJ + ljybaMWdOAuuRZpwLsKAU3I/jkt5SO7jkUB5joH6XAnQ57qfDrd8Nbnp8Qh3PB7mee9VvCLn/57w0e9H + 6fFTqZsfCBQD+Mcxxvw82Yqfp9rw01Rbvp9kxTtxprwm370cZ8wr0s5ey7HjxXxbbkh7Pltgw+F8Z3YI + B+iKdiHf24Zg4WP2utqY6etjbiJ8ysoKextbnBzscHV2xNPdVfpxL0JC/FfS8gvCQvxkDLGX8cRGIFzR + yQofGX9DhVclxYeQnRFLcX4q1RV5tDSW0dvVwPzMJq5fPcV7b73Az378Lr/91ff53W9+wE9//DavvXyH + 0yd3s2/3NOdO7ZPPj/G7X3yb3//yfTUK+KWnLnH11G72z21mY0c11TkJZAiHyBThnx8XQmFCODmxoWRG + hZAVF052QjTpMRHSxsNJjVXm8Y0kNTpCxrhwGXtiyEpV3gRPpyA7W8ocQR7Z6dlkpmSQEq/MORVDTEQo + YcHexMcEUl6URk97NSP9igHc9t8MYCXtczZl+WnkpceQlhAiY5u/agTXlObQ1VzNcG8z3W2K4Vyooq2l + jA2DTYxv7mJ2dgO7RSCeE2F+Y88Wru3azPEt69k/0sj+zU2CBvZtqmeflHvH6tm1sYodG8pZGCxmW28e + MwN5zA4UMNNfyMKGUhaHK1geq2X/lmYOTDazb6yBPaMNLMv+do82s2u0laVNbcxtbmH71h4O7Znk0oV9 + 3Lx9hhuPXeDmY5e5fvMSV66f58qj57kgOHH5FDuP7mXT4hZG5TluFeF/4NAcZ08ucvn0PI9d2sFj5xa4 + dmyCo9vXM7exmOG2FMa6s9g5WSXrWji93MGx2QYOjJWy1JPBTEMMuzqTOT1SwONzdbx/fJBvH+3h24fb + +fGx9fzXyfV8dKGbP59v48NT1Xx0qoQPT+Tz0clsPr2Qw98uZvLFxXS+uJTKl4IvrqTz+ZVs/nIpj8/O + F/DnM4V8fFp+c7KcXx0u4zs78nh7sYDXFop4ca6E5+creX5HA6/u7eR7pzfxq+vzfPLMHj57ahcf3trG + 767Luqv9/Ob6AB8+PsLHT4zx0Z0t/OHJaf7w1CJ/fH4f713aKmNgCfXJruSGWtFZFseBuT6eenQ/b79y + mTdfu8grr57hpVdO8sIrR3n+teOC0zzzrbNcvX2EvYdnaOoow8vfEWPhqooBrGe0YgBr6q9Gy3AN2kaP + oGf2MMq8tHFpvlQ3Z9M1VE9bXz21rZWCatp6OunftJFNU1vo3jBMTUsrXX2D1DW1EpeUKvsPxN03EJ/A + MKISUimprGPTuPKn1T4mts6pxm/X4Ea1VKJ9qwR17V1UNrVRVtekrqttbqWospr0vAJSs/PILSmjsqGJ + lq4e+kc2ybGnGJ3YQnltHa7ePuiZmnyV/llTTxddQ4OvDGA9WaerGL/62nehib7oDgO5fmPRHqbKFERf + GcD3jF3d/8RXBvDK92a294xi5XsdzIX3Wgr+NwPYxsXgLvRVqOmfvcxx8TFX77W9hx4OovWdpe9389fH + M8SIoBgZAzPdyauIoHF9Dj0bK+gcKqG6JZWcUulvcvwJT3AlUMYGJfJXgVeQJV6BX0f/+ofaq1AM4HtR + wIoBHB7hohq/CqKjhSOnBamZpfLzokhJDhDu66uaspXVKTSoBm+6aM14CouiKa9MoKZOnmtpHPkFERQU + RpGXH0VqWiCJSb6kZgSRkxcj26VRXZ+tmsE5uVF3DeAE2Wea/D6TkvIksvIiSMsUvi3IUTIN1GTS1FpM + Z3clE1O9HDy8yK3HL/DaW8/w6pvPcu7ySQZG+qRepBMi/WtgZBhB0ufGpCVQ19FEc3c7CVkp+IT7ExwX + phrAm2fGmN89S+9Ij/wujdjkKDKkT2/rrKJP6rUStZyS4kV0lK1wfEd1PuKSAj+K5P7mZXiTpUT+igbI + SvIiJ8WPgqwQquSaCvNiRTP4it6wx1H0npXyYrq5pmoAK+mflUi+lbSuhpjffVHdQpYVfDMS+D/nAr5r + ADsoprAJtsqfjgpEGyuwdzZXTeB7Ub/3jF9lm5X5f1dM4P80gL8ZBaxAlu9GqCsvJahRwB6i4TwM7xrA + Rjh5GuLiro+PtzK9mCHhAaLLhTckhSjpb4XPKlGb/nokBJgS429GuJ+5jEXCjzsrObhvnpuPnuExxQS+ + cY7Hb13k8ZsXuXbplOA0d25f5uk7N3jy9jUeu3aJm1cucO3Caa6ePs65Ywc5c3g/V2T5qUev8Pzt6zx+ + +RxXTh3h0skDXD55iEfPH+W2jO3XLx/lwrn9nDqxk73KH90Lw0xMdDIy1CDnUUx7bSqdtYkMNiUz1pbK + 8nARp2caODvXxMFNZcx2pDBZG8XWukjm68PYWR/C9mpfZkpcmC9zZUeVh2oAz4te2FbgyFCSMesjNdX/ + KdsjNGiNXCtYc7eUddEKNOhN0mdDhjkbMy3ZlGujYijdnIFksxWkCI8T9AuXGkyzZTjbldFCL0YEg7nu + olkcaUq0oVZ0Zq3w4MpYKyqVyN84KwqiLMiJFK0p3DczypKcGFsV+bH2FMY7UJzkqGbRKU2wpzjBVmBH + aZIS9etAVao9Fal2lAt3K0gwF5iRl2BKfqLokXRL4d3WAivVBC4T3VSeaq5GAq/ATEWVoDLVTDWAywTV + KUqqaOWzMSXxRpQnSClcMD/aiFzhmznhigFsQKbw04xgXTKU5TBD1fxNE86sRP8mBOp+ZbIqpm5cgHB+ + j7WEea5Dmfs3zk+J+FW+UyKE76VmXknLnCS/VwxkJTI4Rvnv1FuTSC8NIjzWqQZwiNPDBDs+QqiTYvgq + 69YR6rxGhWIAR3poEiu8W0GcIN5XnwTh6PHSB8dLnVegGMHJISakKPMCyzGTvzKAjYgPMiE62JQI1QC2 + xM/bHC8vq5X5fb0dcfd0wNXN7q4BfA+2OLvaqVHByjy+pmY66nQM9wxgYxMluERP/X/RWBmnDNYK1qgG + sLJOyTz4lQFsZ4Kd8l+q9CGurkoaaAdCAl0ID3ZV/zOMinQlLlb692Q/cpSUo1mBal+WFGlHSrhSl0wo + E33aGKX8576OkUTRPZlaHC424NI3DODnm015pcWUtztMeL/TiG+36fC+4N1Wfd5sNeTVNjNebLHgqSYz + nmq24MlWG55us1PxbKeD6ERX3hj24e1RP94d8+eFXmeu1hlxsliTPakPsyPuYZaTNdidKvosz4ATZQac + rjbkcpMpV1pMRHfqcaxsLScrNLkgy1ebjLjZKsdbb8szPQ6yP6cV9DnyXLe1rLPk+UE57pgnr2wN5oWp + MA43WtMb+wAlHveRYn8/SY6riXfRJNpVmwh3Q0I8zAjxtibQw5Igd1l21SfceR3pUp8Gsp2Zq/RivtSJ + rbnGjKVqsiH+ETbJOW/J0mc8Q0t0+oOsD7mPPtHfW1IfYW+FPpd6LHhmzJaXp2x5a86Fd+a8eWXKj6fH + w7k+Gsu5kRQODKYy05nC5pZ0+luyWN+UR0eLjIHtFQz0NTGxuU/VMzsWxgUTzG0bZbCvlb7uJimb6O9p + lOV6ukX3KOiR5V5Z191dR2tbJfV1hTKGl9Il60Y39TAzu0mNCJ6ZH6e7p0XG5CwZ/+KIig7Gx9dNDZJS + /pe3d7LASh1LBDImKZ8d3K2Ez1hgbGOAgYXU27sGsLnyYpIybWKYN4nZSXRv7GHp4DKXpI9/7rWXee29 + N/nuj7/Hbz78A5998Tlf/PMffPGvf6n4/B//h799+U8++evf+fBjxQD+Az//xa/5r1/+lj/+4WM++uhT + fvmL3/G993/EK8+/xuNXH+fY7qPMb56hr3E99QUV0mflU5ScTZ7oqczoeOlTwojw9MPP3gkPC+FFllaE + u7qRFhZKcWIC1ZmZVKanSV+ZRH5CHLmxMWRHR5IVFUGGID0ynLSIMBUpwjGSI4JJiAgSrSUcR3RgSpAX + 2QGeVAX40RocTH9ENP1RMbRFR1EXE0V5XASFidHCF6LJTI0lJS2G5LQ4EtMTSUpPIDk1WdbJuaZnkJWe + SW52pnCkLNX8LS4uYP36NoaHB5iY3MTsnGL+KsbvLNt3zbC4tE01geeXtqjpn1cwqWLH7nsm8IoBvPSV + ASyfdykm8ATblbl2d4yxqETm3oVi9N7DrqUJ9sh+lChgxdyd2TbExFgPI8NtXxvAG1qYnhpkYVYxj+U3 + u7bexdRdTH4DU6rBu2t5WjBzF8ry11hWyt0r3y3vmWXPHimXt7Fj+yTbF6XeS7kk17tdiQxW5zwWXTin + zHu8EgE8K58VE3heTSetXKP8bsc941kxpld+v7Q8xbJiLu9ZMc1n5F5sld9u2NxLR28DFfVF5JamEZ8R + RWh8AJ5BLjh4WuHgZo29m5Li2VI404oBfO+FCCVC3s5JSe2vZHiQ9QpvUwKiHPWEQxni5WdMYLAZkTJm + x8hYnpHhKvwxnMaqeNpqU+isyaCvQfh9bQbNhXFSJ/3JinAlK9RJxksnUgPsSfG1JsXPRkWqvw1JvlbE + e1kQ6WYsY5ye9F/GZMpvhhrzOLZ9hPv4YIR/vtvDz64U8OJiCNcHXLjWqaRK8OCFDcG8vCmcZzYEcKnN + nqN1phxpMudAsznL9absqDVmtlyfyYK1bM55iKniRzg1LB35cghvnojnrTMJPH8wjKsz7uzpMmOseB09 + qatoiHiAuuAHaQh5hPYoJTWKEaNZFozlWbOtxJmlGh921fsxX+nJlkInNqSa0iGEqiV0jZr++Z4B3BGt + SXesJkOJ2oynGzCVYcR8phF7C6w5Ve3O5WZ/ztR4caDQntlE+T5ai/kEA3ZlWKim8OEC2xUDuMBMBjIT + GUyMOV6qx74cGWSy72N/4QOca9LlYrOhlMacl2s/W2vJkVJTDhaYsF9+t6vIgsVic6aLzJgoNGZjoSEb + iqQsNWOkxJrREhuGC63plvNqiV9Lfdh9NEXcR1vkffTE389CpTanByx5bNqeF3bZ852TPvzscgS/uBTH + 947G8fTWMLnnLgwkaFHm9xAF/utI89Ui2lNIjK8REb7GBHkZ4uumhYf9alwsH8LJ4gFcrR/E320d4d7a + hHpqymC1Di/HVXjZrcPTVhtPO118RID6S2X1c7PAXTpne0shDWZrsTZfg5XFauxs1uDqoImXmx7+Qvwj + AszV6N+KojDKBXkifJLiV1JAK/MAx0XYEBthL4TCEl8RBy6O2tjaaAjx0JIKr4+Lm4kaIaukSfbxsZfS + ToiP8oabNJy7BrCZua5KblZSIykGsBI5aK5OsO3qaYeb/MbFQwmjNxdhIsLGxVQGG0vsXM0wFwFjIgON + mZQWyttGDqaYKcTpPwxgY0wsjFYMYBM9jIx1VBNYMX+VFNDKHMCKAay83eTrp8z964aXt7M6569Cztzc + lXMW0iaETYG31114O+GlnJ+bJU6KEJPzMP+GAWwnAk9JA62Yvw62xtgKOVPW3TOAg30c5f66EhnkJiTR + jaggVyGMbsSGrUAxgCODHOQ5mBMd4kxBZjg1pckiPqPViN+oEBcCfawJ9rMjMlTEukroPEkTsZ2bE05h + QSTFgvzMUFJFyMf4WxMngi5H6k29z1rGEvWlfjvz+rgXv1z24/Nzgfz7qj9fnnPj87MufH7KiS+PO/Ll + IXv+vs+Kz5fN+OtOU/6yy5i/7DHhbwfN+eKELf++5gG3/eCJILgTzl/PBvHTBU8hfJbsiV3LJs+H6HG8 + nwEh7eMiUmazvZgpDGAkx48WJb24pxG+xg/jovcALgarcNVfhY8Q2gAhuBFyv+Lk3saLOI2T+xZhqUeA + kN4A3dUEGmgQZqK7YgDbWhBvY0qcPNMoc32iLHSlFPJmKu3BRAi+0SOEGz5IlP6DpMnnSmcT+oJdmIzy + Yzral20RPkzKvR8RktynGLsuVtTYmlJsKUJF6meunEeJkJsy6ewrpJOvcrWi3sOWFl8nWvxcpHSh2ceZ + RqkTtR4OVCgGsOwj28GMVCFJsdZGRNoZEW5vRKjU0wA7fSEeOrjJ+TkarsJRMX+FyDsYKnP/rsFOYGv4 + iApHqU/uUp99HCwIdrcn1NeVICVVuRzHR+qsj7sjni52ODtIPbQ3w13ulberET4uBvgJSQ33eEjEniaL + QrK/dTObP/20jH9/UgR/zeHff0mDv2Xwr08y+PhnCfzo5UieOBzIcr8LHdlGZPivIUr6HX9XxQCWPsJy + FdbW64Tw6QsZFGEh7dvZWUlLpKR31sVeYOcgUJZlnQLFAFa+d3QyUOEkn12kH1LSQCtQo3elLfuJOFLq + c6gMYmEB1uqb44oBHBZkTYC3KX6exvhIXVkxfb+Gn6eZ/M6SEH8rokLtiJH+KDzMUp3/3M9HV9qHvvRP + pkSHSR2JtCIl1kGEjjP56Z4UZHiRrLzEEmYjJM5WYE9CpAOJ0a5qNHKCkuI51luWfUlPCSY7PYzsjHAy + 0oNITfUjOdmN5ERHkkRMJ4kwj42zICrcWDWAE2PMSI63kLZqSkaKMVmZhuRm6lGWb0CtiKiOSlNGW21Z + HvHm+FQAF+ZCuDgXyOkJd06MOHN8wIETPbac6rLhfJcdV0XEXJPncnXAlWtDblwf8VJxXgTTiXYb1QDe + XWPG9gojgQm7ai3Y3WDDgVZnjq5350inG/uaHdnbYM+hVkdO9cpvh/y4OBTA2V4fjnW5y3ZuHJLtdtbZ + MFVqzGSxEXs63Dg64M/xoUAO9fkwJcfoy5HxWMSZYgD3ishRDOCN+eaMF9uwteyuAVxhwUyltPcqKxaq + 7VTMCZTvtpZZsaXEkoligYyZ48qcv0WWMpYq46etjKOODJfYM1hgQ1++NUMlDkzUebHQEcKO9eFsqfNm + c6Ub0w1+bO+I4OBwylcG8Gyjn2oAj1U4M1Hlynilq2oCKwbwcJEd/Xk2dGdZ0ZFmTluyKb05dgwWOrOh + 2EWO6SKlE0NF9mwodVCPMdsSwNYGue4GT+Y7Atk/HMuZ2RxBHvtGEpntCGZznSfrhYNUJ+mTEfgQ6QEP + CUlbS16EDsUxRpTEmVAcb0q+lKkR+sQGaRATtE7EtgGpsSZkxpmRH29JSbwVFdHm1AvaE6zoy7BjY4Ej + E+WuzDV5saPNl/l6F7l31owIvxhM1GFDjBYjwovGlVTE8QbMSb8+l6jHtkRdtiTpsjlZh6EEDTqjHqYp + 8mHqYx6iKWkdbRnatGbo0ZquS5OIawUtybqsTzVkKMOYiSwz5rOF++VZcr7MnieaPHipy1+Euwc36h05 + XWrJYooWm8IfYibNgMN1biJqg7nWHcDVdncR4g5cqrHgerUVTzU68a1Ob97uFZHf78PrHY48VavPrdLV + 3Cp/kCcqHuCxsvu4XX4fTzRo80y3LU8P+3JtMJRdLUHyTHxoyvGhLN2LFOXP77sGcESgLpEh+l8bwJFf + G8BFigEcb0d7kgP9KfaMpTkwlST1MsqQuW8YwDt917Hss469fprsC9RhT5A2O4O12R6owXzgOublOSlY + lGc2J5/nggVhmixE6bIQZ8i2WOHDsjwarsFQ8Go2B61lOlT2HabLnnBD9gbrsddfi33eqzns/TBXw7W5 + k2LCrRwbzmbZMBtrTE+ADnXegiAL4YnOIhbdqA93piLUnjzhYBneBiS665Dpb0xxuDV1wsE6kjzoiveg + J8aZnjA7BiLs2BopnD3OhQvRKwbwxTBTroYYcDNMn6djTXk+0YJnBY/FmHIlXJ9TQVoc9FvNPt/V7Jd7 + cVjO47S/8F8/Xa75aHNDeOQt91XccXuY5zwf4Vteq1QD+IdR+vw80YyfJZjy41hDfqIYwLLfDxIs+LHg + e3GmvBttyJuCN+JNeCPVgrdybHkx25Kb2WZcLLDiWL4DS1lu9EQ5kudhJuO9JlbrVmGsrY2Rnh6mRoZY + mplibWUu3MoSezsrGTts8ffzJFIEd0x0KOGh/sI5rbA0N5BthV8J9/MWThYmnCo5Llj621hKC1OpLs+h + obaAtqYyJkZ7OHdyH996/jbfefclfvHBe/zq59/hgx++qRq+J4/tZLsIyFNHd/KtF26qBvCff/9jfvmj + N3nz5dvcuniEYyJAx3qbqMxNIFF5gc/bkfggD9IiAkiO8CcxxF9N2xwviAn2Fx7nT1RwgPA74W1BATIe + yefQQOHQoTJORJMQG0tslGL2xhAdHku0lBFhkTL+hUoZRGiwN3ExgZQpBnBnNSMDzWzsb6a/q56u1ipa + 6oqpK8umNDeZrORI0hOF8yUEkiYozokT3phOS20+bQ0F1JanU16QIONQHFXFSfS0FDPaU8O2ja0sbW7n + +LYezs/2cm6mi5OTLRwZq+fIeD1HJ+qkrOXQWA0HBfs3V3BAsH+sjOXRYvZuLmGfLO8ZKWP3aLmMaxXs + 21zNoS1NHBbsG61hsbeIrW05TLXnMtWRz5b1BYx1FTHWV87sWAv7loY5c3yec6d2cP6kks5zWZ7VMhdP + 7+Hc6b2cEuw5MM/Y1gGGN3UwPtbJ7qURTh2a5NLxrdw+P8edc9PcOjXO6Z0dLG7MZawznqm+FA5Ml3Fx + Xys3DnVwdWcDZ6eKODqYyv72aE70JvDoWJbo4XJ+fqabX50TnG7ld6da+OPJej45XcNfTpXz6bF8Pjue + LWUan51I4m+nE/niXBxfno/h7xei+fJiDF9cTuDLK6lSZvG3Czn85UwOn57K55OTxXx8opTfHynlvw6V + 8sH+Ur6zXMxbOwTLVXx7fzM/PdnHhzcm+NuTM3x+Z4rPbo3wyfV+PrrWwYfXWvnT9Q4+udnNxzd6+fDm + IH+8Ncp/PbqJVw+0sbcthlrpbzI81lCX5ML8QAk3T2zl1SeP8NJTh3jyzh5u3N7B1ZvzXL+zkxtP7uHy + rd0cPjUr97OLwvJUPHztVQNY33jFANYVjq2hvxpN4eSaBg+hbfIg9u76RCa6U1KTSntfNc1Sd6qay6lu + lnrY1U7P8CBDmzfR0TdAbUsbnb0D1DW1EZ+ciruPH25e/nj6BhMaFU92fgl9AyMs7NjD/PbdjE5sY3Ry + mzoHsGL4FlbVyX47aLobCdwiUNI+K+ZvjOwvLiWd3OIy6lrb1bTQw+OTDG0ao2domJyCYhxc3dA3NUXX + yEjOXw9txQDWN5Dr0lOhb6CPrhIV/E0D2FAxgDUxVuZntRZNJ9xfwf9uACtmr/KdAoO7BrAyf7DoTUvR + tYoJLHxfyWD1fzeAV+DgIZz6rgHs6ida11MfRy9dnLx1cfHVwzPIiIAoS2JSXcgqCZbnEE9lYwrlDUkU + VIo2zA+W77zwl/HA3d8MN2UalCArgTW+wo8DwhxVBIY7rSyH2OMfJOuDlTTQigHsSkSkaFJFT8Z5k58f + Q2lpEnl5UepcvYoBnJsbRlVVsprmubExg4qKBIpLomW7GFlOVL9PTvYhMdFLOLEnMbEexMV7kZjsT2Z2 + JJVVGTQ05VNVk0mu9ENZ2VHkFcRTUZVOQ3M+5dXpZMrx4lP8iU0KICM3msqaXFraK+jua2Bi6xC79y9w + 8epJXnn9OcHznLt0moHRAbKLcolNSZR7kEhCViopuenUtTVS29pAdHIcrv4e+EUGUlhdzMjWUWZ3zUp9 + HaS4qoi84myKy/OkTrYxOtpFi/SNOTlhpCR7kp3tR3lJJFUVUVQURVCSH0pBVpDo6yDR5KFUFMRQV5FC + a2M+1RUZohHCCQlywlkxVu2kXlhoqQawhWhKxdxR/udQDGALK6O7BrCxCkv5ToGVrbEK5QV1Ffbm/4sB + LOOj8iej+ofjyvK972wczf5/MIClPn7TAJa6aOeij72b1Ek30XgexgIjHN1Fv901gIP9jIgJWEmHmx1m + Qm6oMTlSP7MCjUkT3pLsb0mcnyXp0R6sry9gz8I4l88c5PrFY9yWZ/fM4xd5/omrPHnzAk/dvMiLT1/n + 1efu8PLTt3nx8es8ffMyT167yOOXznL99HGunTwqffxpXrx1ndeeuM3zj17h5ulj8t1Rbp07yZ1r52R/ + j3JbyeJx4RCnzuxl3/5Z9U/tqal+Rja00NFcSH1ZIg1SVzsqYtjYmMzSQCFn51q5ttwj41y18Pw0xqoi + 2FQWyLbKIBarApmv9Ga2zI2Fcnd2VHmuGMClrmpa6OFUc3ri9IW7adISpkFT+BoVzRFrhXNr0Chlfehq + KdfRGW9IX6oZQ1nWDGZY0pVsQqfwSBUJJqwXvtQtXKo31YaBbNEkhV5syPcUneJKe7oD9aIzq2LNKY8x + pyTKlMJoU/KizFXzNzNStKaUaVEWZAj/y4i2ITvWmlzhwYXJjgInChPsRYfYit6QdQm2VAgvLk+zpzTF + jiLhxzlxsi/hddmiV7ITjMlPMaNA+FtxuhVlGdaUpFtQJterGMGqGayYwJkWVElZKesVw7dMUJlkRkWi + EvVrRFGskZTGFCkGsHBFxQDOE+2jpH/ODNUnXTiyYgArSA81UufTVQxgJQr4Pwxgfz1C3dYR6q78r6FJ + lJc2CVLXkkPMSAszJz3CUq5frl2QLvciVbS4EhkcH7CSIlpBhIeGavAGOz1MkMM9A1hZp0R8yr5VM1iD + SA9toj11iFH+dxWoZrCPQPrgWF8lwvieAazMR2yqmr+JcpzkuxHCcUEmRAaaEB5gRoi0AX9vxYS1U4NI + PLydcfV0wFmZT9XZGgcVyryqigFsi6OTlfQRxnfnDdf5CiZmuuo6db2JFoZGMlYZrZNl5cUSXSxVA1ja + sfQTdg5mrMwtbIqziyWenrbCjW3w97IhyNeWEOnvIyMcSUr0JjcrVPqzcMrygilM8yIvXupIpDxD0a+t + 0RoMJqxjMk2DHVnaHCnW/w8D+IVmc15rNf/KAH6vTU/F263C/dtNeaXTiufbrLhdb8qj1UY8WmvGzQYr + FbcarXiy3YEX+zx5bdiPNzcH8eKgJ482WXCqVJf9mWvYnbSavcka7E/T5HCeLidK9Thfb8T1Dgse7TTj + XIMux8pWc6J8DedrtOS3BjzWasaTHZZqNPGLXXa82G3H8102PNdtxXM9VrywwYFvjXvw2lQgL28JVoPc + Nqc+QIP/feQ53k+euxa5PvqkeugR525IlLs8Sy8rQj3MCZPlMFddopzXkOuryVixO/uagthb68Fcvimb + EtcwGP0AQ7Gr2JyiyabUdaK/H6E36kH6Iu+T7x9gZ4k2F3oseG6LI69us+etaSfe2urOy2NePDkcxKND + kZwdSuBAbxJTjbGMytg+2JJFT3Me7Y2FomNK6F1fx+aN69kxP8bOxUnmtg4zMtRBo2iB5voSutqr6e2s + oXt9Nevba1Ygn9evr6VTylrRQ7m58TL2ig6oKVCzAW2bGWVp5zTjExtkXbGM26HqC7cBgV54ejnjIvVV + MbVspW7de0HpngHs5GmNo4c1FjKWmMp4ZyJji7mMPZbKi0lS99wD3QiLD6VhfQOTC1s5cvYEjz/3FK+8 + 9Trf+ZFiAP+ev/79c/7+r7/z5b/+KfgXX/zjn/zlb1/w0Z//ym9//yd++V+/5uc/+yU/+eEH/PB7P+Sd + t97juWde5OqFqxzZe4gdU/OMrh+ku6aFhrwy6ZPyKE/JpCg+ldyoWDLDI0kNDiPRP4goDw9CHJ2IdnUl + LTCAwphIKpITqM8UvpCRRlVasvw2gdLEOOm3hJ9ER5ATFUa2aLasyBAyI0KknwkhTbhEqoIof1Ij/KQ/ + 86YwyJOaAB/aZL8jMbEMx8SxPjqKhqhw6bfDKFRfDg4nMymSlCThVUr2qtR4ktISSElNJu2uAZyTnkl+ + rnCSIuFEZcU01NcwNNTL2NgIW7dNsLA4w/Zdc+xYXmBp9zzbd84wv2MrczumVBN4BRMqti9vkW0VE3jF + AN6+PMHishL1q0TEjgsHH1OhRNMuLipRtSvYvl22uYsl2W7XrgmWlsbV+Xu3Tg3IuXSrEen9fY30dNcx + vKGN6W0b1MjcpR0TaoplBf+bAaxE9yom7/Lumf839syxZ4+SznyGnXKNqnEr5c670cJKyuiZhTHVAN4y + PczUzEa2CqbnNwnGmBP+Mb8o17tdiQSW+7FD7oMs75BSmRN4eY/sd+8MS3u2MS/nNi3XvHlqWDWBezZ0 + iN4Rzd9YTHZJmvDLcAKjfQiK8MUr0FWd69fOdSUyXsnYorQNS2UebOF4VsLvFFiIprCw1BY+qI278KmA + QHOiIm1Ikv42TcbnonwfGqoiaamOo7MmiS7RWEPCsTc0ZNNRGEdFkq+Mmy4URrlSIpy6ONqdUuFW5TGe + lMV4qMsF4c5kS9+e6mdFgpcpcaInciOcGWnM5dT24RUD+P/8YIhfP17Ba7ujuTXiyZUuF271ePL8cCgv + jkXylHRC51ocOCAd/Z4aE3bWmrBQbcJspTFbivXYnKvBcMbDbMh6gB1Nhpwfd+fpvZG8dDyBO3vCOTXp + ylyzEX05q2iWzq88+AGKfO+jyOd+yoOECEXq0JViLL+3ZKLQiYVKLxarvdlW5MrmbDs2pgsxitGlLXzd + V2iPXkdHjCbdcZr0J2kzlmHAlkwjZrON2VNkzYkady60BnCuyY8DJQ7MJOkzIdtPxWgzl2jAshxrf64V + B/ItOVxswdEyc05VmgkMOViwmn35D3CsYhWXWvW50m7ExTZTLsrAdlYGuqOlRuzLVfahz3y2Ptty9NmS + py/3QZ8hGZQGZHmgwIiBfBMhbJZsLLamL9eE9mRNmmMeoC3+ProS72ND+n3srNPi8iYbXtrtwjvH3fjp + FX9+91g0f7iVwM/PJfLGzljOr/dkY7I2FT4PUOizmjRPTWLctITwGBLuaUCQmz6+Thq4WT+Ek8l9OBrf + h4v5ffjYP0yg8yMEOD2Cv5Te9gLbtXjaaOFlo4OPoxH+QgZ8nUUYSgftIJXRxnwdNhYagjXYWa/BxV4D + LxngFAM4XARkTqpUrsJQSoul88v0UecCTox1VA3g6DArIoIV48YIdxcdHG01sLJcg63NOtX8UaIEFQNY + IT735s318rFXo4CVCfVXDGCF5GirBrCybGVtpJIXJ1fFAJZt1Qhgq6/fbnUxE1GivGGhGMCKMBeBrogp + aXQ2IoLMpdGZyj4U83cFMiBZGGNsZoChiZ6QJuVYeupcwDZ2CkmyEMKlpGVxxMvbRYiSsxAmacxyDja2 + Jjg5W+EmA58Kdzs83O2/grubEDY5pjIvhzL/hmL83jOA7W0M/8MAVv6ctJfzVOYAVgzgIG8HwvxdVBNY + LQNFfAc4E6m8nacYukoEcJADAUIco0KcyEkLoTQ/lrzMcNWQUt7i8/eW/fjZqsuKAaxEAStpujLTg8kV + 4VqUHym/CyQ5wo0YfxsSpNPJdxOR4reWbamGXGmVOjjuxW/3+PHFGT/+ed6DL07b88Upez4/bseXh+34 + Yp8tXy5b8cVOSz5fMufznaZ8vseUvx+05F8nHeCKJ9zwgVv+cD2YTw/78L1RBx4t0GXB735GnB+g31H6 + Ch8dJmJtmc31Y1thiAggf+qiHYl31cfbeCUKVjFCnQzW4mGshZ+ZNiF2RkQ6mQlMiZJ7HCKdqZ+xBv4G + 6wg21iHSXEi3rQhNG3OSrM1IkmeaaGlEgqWQfgsdYs3WEW22mmiTR4gxepB4gwfJNV9Lo7sFGxQDOFL6 + nAgvJkPdGAlwoM/HmnY3S2qlE8+T+phiuI4kIdjpljrkO5tSJN+VSt2r9LCiWshOvTzDBl9nGn1dqPdx + otbLgSoPEVRST4qFyGdL3UmT+pHgYE601PdwqbPBsh8fO33cZTBwMdVcMX0V81euyUEIvWL4Osp6e7O1 + OJlrShs2JtjDjkg5RlywFwnh/sSEeBPq5ybtzlXqhzO+7g64iYhwFSLmJiLew9kADwcdvOxXEexyv5CW + R5jqdua5K2l8+EEp/+fTIvgiV5AKn6fw77+l8pffxvOLt6N5+XwER8d8GCgRIRgs989LiwA3banLq2UQ + exhrpW1/ZQAbS1sxwkE+28vx7OxXYC9QTF/V+HXUlzakj4uLoYgbQ1ydjeUcTXF3NcXVRUonE4EpntKu + 3eXcvV2N1Tl/Q4MUE9hWSis1sld5wcTH817U79fw91TesLWWdmOnzh2cmuhGfIwdYcFy30TwRYeISIux + IjPRntwUJzV1W1GGOxV5vlTm+5ERYyMEzpqUKCmj7EiJdiA1xoXUOFd1TmIlTXRqgg9ZqYHkZYWTnxNO + TlYQGWneJCe7iICyIzHBWmBBXJwy/68h0RHGJIlAT4m3kPNZMYCzMw0pzDGkqtCQljIjBkUAzfa7cWxL + IOe2BXFpVjDtz4UtnpwddeH0oNNK6uf1tlzqduCGbHtryINbGzy4sdGTG6PeKq4Ne3G225HDLVbskjF6 + pkiHWRmjl6qVl7as2d/ixMFWZw62OYtQcWRfgwOH5fO5fj8uDQdzfiCIYx2e7G9WtnPlQJs7O2rsGC8w + YDRXl53NLhzqDeC4bHegx4ctwgkGcjRYn7GKHhGEfdkGDOaYMJRjxqYCS7aWKWmgbZipsBJYsk0pK22F + N1gwXmTOeKEZk6VWjBdbCqwZL7VhU4mtOm6qKZ+LbFTzVTF9+wtt6FZM4CJ7RqvcmW4NYqEzjIk6bzVV + 89Z6X+bbwtg3mHQ3BXQKM42+qgGsGL9TtZ5sqfFgrMJFNYA3FNrSm2tNV5YV7WmmtCSb0J1tK+O2E4MF + znJsJ1mW4+bb0i/HHJFjbGv2Y7LeS44px2/zY89wDKfncgX57B5JZGtbIMPV7rTJuZcn6JLk9wBJvg+S + FrKOnEhdCmNNKZZ6UCj1I1eQGm1EbKg2UcEaJEQYkCbf5yZIv5JkR1WSPTUxlsIZhP8k2jKS68p0la8a + Bbu/O5RDfWHsbvNhvtqRiXwLhpJ16ReOo2RzGBQMhWuyIUK4WaQGQ7J+IFaTnjgtOmI1aIxZTX3sWqpF + zNen69GcY0SD1MnadF3Kk7SEXAoStalPNqQj3ZShTAvGhDNNZ5hyQJ7BRbn+xzoCuNHmzbk6F/bLs5tI + 1KIr+EGGE4UXyT0+0ObPwRZP9tXZsafcTHiZIYdLhEfVOXBnvS8v9ovAl3r3ZKs9Vyp0uVS8muvlD3Gn + QjGB7+Opqgd5tkmPF3oceG6DH48OhLLcGMCGAi+aM70oTXGXdmpJbJiSXlD6/0AR4t8wgOMizEgMN1MN + 4OIYW2ribGlLkGeebMumNDu2JlszE2PEfLgu20O0WArUZNlPQzWA9/jJsr8mSwFK5K9i/mowK9/Phaxg + PlRLSi1m5bnNhumwEGPIgrTt6QQTJuMM2Sx8dWOkFpvDtJgM02ZGme8+RJfFAC0Wvdex6P4Quz0e4HKU + LncyLLmVZ8fxDCvZVpd2H00qheNVBZhTH+FEgxD56ig3SlUyb0WKrwnxwv0ygi0pkzGzIdmTjhRfOqVf + 6opxoyfSmf5oJxnPHDkk35+LtOOi9GnKfL7XQgy5JX3SM3Gmajrmp+KUOYANuSjneNxvDbvd72OXx33s + 91/L0UBtTvlrc17G6qve2tzw0OC2+xruuD3Cs+6P8LLnKt4N1uRHUfr8ItGMnyeY8pNYQ34aZ8zPpO/7 + UYwJ35f7++0oQ96J1OdNwVtyf95KteCdbOG8meY8lmPKjRLp10pc2JPjLvXUmWIvM8JkvHfS1cBCXxdT + A31MBFamJsKrLLCztVThYG9NYIC39LWRpKXECd8Jw1vGWztr4VfC+TxcraTfd5d+O0B4UgwVItQaavJo + qiugua6Q1oYiNomQO3F4B08/fok3vvUEP/7eG/ziJ+/y0x+9qaZ8PnNimUURjaeOLqkG8G9+/j6fffQz + fv/L7/Cdt57ludsXOH90J1s2tFOem0BSuBdhXvZE+buSFBGgIiEsgDjF/A3zJzIkQMamwK8QJYgIWUF0 + eLCMFeFEhocREhRMkH8wwQFhBAeGExIs64JDCA8LJDTUm7jYIOHgaSKya9jQ38iAiO3u9irV1K6vzqei + MIW8tCiSogNIifMnI1nGq4xwqkuTqS1Lpb4iTZYTKc6NpCAjRMbBQEoyguioSGGoIZctnaUs9lVyaFMD + J8YE43WcmqiVsoZjmys5urmcI5vKODhayoGRYimLOLhJyrEi9o3mc2BzIYfH5bNss1+22T9axoFN5Rza + XCOoZc9ACVONydKvh9MvGCiLZKAqisF6JRIrhZH1ecxsqmX/9l4OLQ1xZGmYY0sjHN+1mVO7xzixd5xj + +7awvH0jmzY2yPWXsqG3jPnJVg7u6OPUvg08enyMx06P89jJUc7vamb7cLpcVxTTPTEcmSng9pEWnj3R + xpN7a7g5myc6LIlLgzHcHE3g2akM3loq4Ddnm/jwYgsfnavj49NVfHyihL8cz+PzY5l8fiiFL44k8fnR + WL44HiUcOVz4chhfnA1ewfkQvrgYyd+vxPOPy7Lt+TQ+P53GX05kyj5y+OuJAj4/U8Znp0v547ESfnEg + nx8s5/D9vcV8cKiWX51o4ZNrA3xxayN/vzHAl9e7+OJ6O3+72sAnl6v45KKScrqGT6808PFVOccrnfzs + VDOvLpVwtD2Yrjg9Sn1X0ZIo429rMhd3dvPs5XmevDLPtQvbOHl6lCMnhjl5foKTF6Y4cGKcuaV+2uRe + Joi+cPG0xlC0mGr+Gmqgrb8WDb01glVo6D+EhuH9WDlrExjlSE5JLI2dJTSsr6S8oYTy+goaO1pYP9BP + 3/AI7T391Ld20KmUze0kpmbi6ROAu1cAXr5Sz8NiSEnPpa29l+nZJZaWDzK7uIvphZ10DWyksLKWrMIy + Khpa6egfpmd4E11DG9X5flNz8oiITyQmKZWCskpau3sYmZxi89ZpOfYmWtb3kJSWiZ2TCwamZnItRmjp + 66Otq4eulPegr5R62t+AJgZy3Yam6zCx0MbMWg8LG30VyrICxQT+D6jm8ArMRPPdg2IAGwh/N7TQUrdT + pi/6pgH8v8FOOLWjcFrFAHbzM1+JuvRW0kDr4XzPAI60IDLJkbQCf7JLwsgqDiWrJJSMohASRVeFJ7jh + E2qtRhC7+prhqUT+KumeZXwIkXFFQVCEC4EyvgSGOOIfpJjA9gSGOhIads8AdiMx0Z/SMiXNcxq5+dHy + 2ZfkJF+ys0IoL4untiaNutoUWY6lqCiSosJISoqiyUgPJFbGpYgIZX+OREaJNpWxKjlZzjcniurqTJqa + CqityyY3L5a0jAiy8+Mol/Ut7SVUS3+UXRhLnPRh0YmiZ/PiqKwtoKWzhr6hDia3jbBr7wKnzx3j5Vdf + 4OXXX+TspTMMbt5AQXkJabnZpOVnk1NWQH5ZIc1dbdS1NqoGsKO3K16hvvJdHn2jA4zPjNOzoYeSqmKK + Kwqpkno8snlA/TN8YLBZri+bstI4amuTaG/Job01h0a55uryBCpL4mWMiadG+tDm2iw6W4oY6Kmhs71M + +uoUYqN98PK2Ed2jvOyuj7noSCupJysG8Mqfg4rpq/xPcc8A/toINlFhZWuq4p4BfA/35gS2VeafE6h/ + zN9d/o85gwX3frPyp70SZazMOSzn8Q0D2MZR6p+j1E9HA4E+tqLZbJ11sVONYAPs3YywE/3m4CLaz11f + 1WNhforBZkJmiHDcCAtKI8wpCTajOMic3AArsgNsyAi0JSvCjRYZixc293Jy7zwXj+3m1oXDvChj8OvP + 3eDlJ67wkuDN5x/j3ZefkvJxXnvqJi/evsLz1y/z9NUL3Dl3ilunj/PE+VO8fPMabz5+i5euXeb2yWPc + PiXrL5zh6esXeeGpGzx69aT0dfukr1tm1x4lJeYkM3OjjG3qoq2xiOriRKryImnID2NDXbL6YtKZmTZu + 7Bng2GQNs22pjJSHMJDnxWSJHzNlvsyUe941gD1YlGVl/t+5ElcmRTtsTLemP8mETuGALRHaNAoHV9Ac + pUljpDa14RpUBq+iPOBhWdaiNc6IziQzOoQ/tcQZ0CicUEFTtAHNgrZ4UzpTrOnJVnSJJ3157nTKcnO6 + HTWJ1pTHmlEYaawaqDnK/LmRJsJ5TVXTMy3aXDSGojNE00Zbka5o33hr8pLtBY7kJdiRHWdDTrytLNtS + muZISZoDhUmyTnRIZpw5mcITM+QcMuKN5beiXYXnFqRZCl+woihdnnGaufzuLlQD2JJK4bRKZHBZkqmK + CvmNEvV7zwAuFo6olAUxxuQJ/1SgzP2bGWZAunB4BWnB+qQqkeRBSjpnJap8JcI2KdhE6pkhsX76hLlp + rJjASrCLuybx/rKN1Ln0cAsyo6zJkmtWESOf5V7cSwmtQDGDI4Vnh7uuU83fQPuHCXFUIn5XDOB7CHfV + JNJdW0WUp5YaDRzjpa0i2ltXoEecn6GaeloxgJOV8/PXI95Xh0RlHuJA5cUIY8L9DQn1M+H/Q9tfh0l2 + nVcf6IgGu3uamZmZoaq7q6uZmZkZp3m6e3pmepiZGTVitCWZJJMMcRzHdpw4iRPHTmJHBrFk/e67T8/I + UuJ897vf89w/1rNPVZ06Z9c5G9aqdd53x8pYHhXqqmUOVFkFg8L88Avykr7kjoe3MtSE4/q44+Xrga8y + gn3dtP8mVZCKylb4AFrWQldr7SESlQ76QWSwvcPqf6fqfTWueHo5akE0XjIWqPWFVYpplXo6wM+RID+V + Sc2RyAgXYmVe0Ov9KcyLpVbG7rZaHW2ViTQVBFNvEC2SZsWIaNrFXAv2FltwrNSCC1VWPN7owNMtjpoB + /NVuV77V68J3Bxz4q347vt9nzff6bPh2rz3f7HfhjUEV7evGk012XK0052q1FTdqbT/FvRYXXurz58sT + EXxtRvThTBTP9nlxvd6Ws8UmnMrZwOlsE87mq3WBTblUbcaddmueHXLi6QF7brebc7l2LVfq1nO32ZTn + uqz5Qp8DX+h34lXBV6QOCq/2OfLqgGDQmVcnPPjKrB+vbw3jq1sjuTvgwf6y9YzrHqY9Yj0d8Y60iX6q + inEkJ8SG9ABbdIGO0g4EgTak+G8mzXcdFaIZFyv8ONsdw7kOGRPKHZhJfZSxpDVyrEeYydjAXPZGDZMZ + jzGRuobpjDXsr9jEjUEHXtvmzTe3e/HmsjdvLvnz+mwQX9gSzZPjSVwb13NyMJ3trToW2o3M95UyNVDF + SG8tgz31wn/bWZof5vjh7Zw8soNdyxOM9DdTX5Uv81Gx7NPAltE2JsbaGR/5DMY6GR1t1wzg3NwUMjLi + qKrO1wzgXXu2apGW8zL/VVYVacZvRESwzGFBBAb5am3TTdqWephodS6x18xgZQD7hbrjH+aBe4ATLr4y + f/nIfOMn81Ggq3AXLwKj/IlMiqC8sZLhmTH2Hj3AnWfuydz9Bj/8yd/wr//+S9758B0++Ph9PvjoA8HH + fPDhR7zz3vv89q3f88///Et+/JO/4wd/9QPe+OrXePG557l17Qanjp1kZWmZSeF8gy2dMqbX0FxQTnNu + Ca35pbTkFVJnzKEy1UBZik7GzBSKE5PJi40hO1J4QFws1Wk6GoUbNOdm0FWQTWd+Nu0FWbTlZdKSY6TB + mCrjV7KMXQmU6UQ76eMpERTr4ihKjRXEUJAaJeNOlJwjkrqEUFqjRaNHR7CYnsbWdANjeh3dKUnUp8RR + Lt8tSouX8TWRbEMSRkMKxsw0MkXTZmcbycvOpDA3j6LcfMpKi2mor6ajvZnRoT62bp1m+w7h7Xt2cvDQ + XuFB+zl68qCGw8f2rUYCqzTQ0iYUDhzdruGgKo+oCOBVE1gZwNpawAdWUyfv3j+vYd++rZ/DqiF8H7Lv + wYPKeJ5n164ptm0bl7YyxJRo4fHxTkakfc1M96+uUb1/EZX6+aiKrBV83gBeuo/tHFJpngVamuf/Cxw5 + soqDB+R3HJDfo5XLmvm778A2VvZuZXnXLAvLk4ItLGyfZGllhm2CHSuzrKzMybVT6aNXsVuwd++C9l21 + 3rBKn71PyhWp/7JwBmUAKyzsUJmNphiZ6aetv5HyBsUxM8grySTFEE9o9KoJrHiWWsrDUfi/o8vqwzpO + jqtwVFluHU1wdzcjOMhOdL6LFkxZkOVPaV4ADZXRdDYk0V2fwkBDOkMNGaLN85htL2CoMpVGY6jM+z5U + 6f1oNATTlBFKZ040vflxgli6RdO3GMOpE+5dIdy7OM6DvEhnqvUBLHWXcvPgFGv45wU++flWfvPVTn5w + MUfEbzC3B715YtCfF0YjeHE8mmekvNLhxYkGRw7W2bC3zpadMlgvV9sxX27JdJEp47nrGMl5mK1VmzjU + 58TNHeE8f0LH3X0xnJj0ZqHZSiq1jgbdo5RErKEo/CFKwh+lPGaDdBBT2vSWDGY7MFvixY7qIHbWBLNY + 7M1cgafAg3GjnRYFrFKqaNCvmsCD6aaMZW1mvsCapSI7dpXYc7TanUutwdzqjeZ2Xyynan3ZkWXFvOw/ + n7JRM4L35dhxpMiJE+UqoteVSw0uXG924UaLAxdqTDhXvZYbrWY8OWDL00P23Bt05HGZQG602XNRJq3j + hWYczDFlZ44JS3lmbC0wYzrfjPEiMyFqmxkusmC40EpIoyMz1W5MVToxXGDOQNZjDOc+wkTBwyyUPcLp + PkteUE/9nA/iJ3dC+dfnovndq6n84YtGfv1EJn97JoNnJiNYKREyGPco1WFryQ/aRLq/kBAh3kmBVloK + imhfU0Lc1uLv8BB+9msIcl5DlPdjxPmuEptwz4eJ8JDSbSNhbmYCc8JFhEbKoBzu60CgCAAfV3M8nU3w + dDUVbMJb9lUGcLi/BTHKAI4UUpkRQEVJDOWlMeTnKDPEXzOA05LdSYlzJjZCGZrm+Hpt0gxkF+d1uLlu + 1IwgtQbwavpn9/uRwJ6ERXgTGKzSnQjxEfHh5Gylmb8P8IDEaE8VBSrz1wWV3shDEyky4fg7ihARMSTb + nzWA1SL0Hn4u/6sBbOtg9TkDWEX/KvNXrf+rCJd/gDJ4vbVJbpV8rRItbyFnKhL4AQKEtH0WvnJeL/V0 + rXR4tfavMoBVqUxfZQCrFNCqfIBAmRhDA1yICfXU0kAnRvqtllE+GpJjRDDH+aHWJU2K8ZTrq8wtlbJW + pZ0SkZ8dJ4NGmGb6xkZ5kBDjjS4hQAR3MJkisj9rAFeUirCWAcKY5K8ZwJlhDlQLmR2I3sieXBueEeL1 + w+Uw/uNkBO9dDhV48+4lV96/5ML7591474wb7x935/3D7nwgeP+QvH/IiQ+OOfHROTe46gt3g+GJELgX + zCe3wvnPQwF8T0jWbSFtu4PWMOf7KFP+m5gTsrw9w0f6azTbhWRuKYqhSedHio8FIQ4b8LVV0a8b8bE1 + JdDBggghunFy7RLk3sf7OpIo1zlW7nOE42ai7DeTKIQ41c2BTHcRPB6OZMt9znG3I1fEc64I6xxXS7Kc + TTE6byTDcS0Z9o+QbfcINR7m9Ison473YyFJxhy5djNyDUfCXegLdaJVxHq19JNcBzPSrddjsN1EtvNm + SqTPlAc4UyX3rk7adH2QK42hXrRE+NAm5EaVzWHeNIT5UBvqTWWwNyVBHuTLpJAl7Tg9yB2dkPC4QGft + QYwgd2v8nDbjZSf9Rn63p60J3kLm/Z0tCXSzItjbknAh6wnSTtJj5d4mRpCdHEVWSgyGpEiSY0NJiA4i + LjKQ6FA/QgI9CfJ3wd/PBn9vCwLc1QMijxDts4a8hEeZ6/XkhWsG/vVHFXzw23J4pxjez4H3Mvnk3Uze + /c90/u1H6Xz3WQO39sQz1+hOuYy7urBNRAaYEOCzDg+PtXh4muLjb0OwkGGFwCBp40KQff1UxK+5Bh9f + C+21gp+/SgVv/alhrIzfIH8nDf6+TgTIPVZR8QoB3raEypihTN34GDcS49w+ZwCHyZj0WfNXITrUQYsY + VtG/mel+FMoYpSZUo4hgtVZoTpozpdleVBf6UVcSRENZCC3l4XTVxtIpqMrxoczoJfCmLMtPRHIApZlB + FBoDyTX4k58h21lCFHOF3BUKeStJoFTabkFeMNkiqDNFkBuNzkKk1bq/9uhE0KbdN4Bzja7kitAvyLGn + ROaqmjI7WqpsGWy0Z0FEzpHZUK7tjOP2zmjurkRwd3s4t5eCuTnrz/UJX64Pe3JLBNS9EV+e3xLES9Nh + vDQXzgvzETy/NYLnFiJ4Zi6CO+MBXOzz4FizA3trrNhXa83hFmeOt7trBvADnOjw1gzg870B3JqI5vHp + JK6PRnOm05+jLZ6yvx/HZXt/oxeLZbYslNqyv9WPUwORnB+N4eRQGDuanZkuN2dMxNlEqSUTJbZMyG8b + L7BnpsSJHbWe7Grw1NI876pzY0edKztle0mleK50ZaHCmQWZH7dWuQiklP1nqj2YLHdltMSF0XI3xuX1 + mGC00l2Ijyo9mW4IYEdPDHsGEtjWFs5CYxDLreHs6orjyGg6F2ZzOD1h0NI1b2sKYqkxkB2toZoJrMxg + ZQBPqvTPJR4MFrjQm21PV6a9bKuHtbwZL/VhotxX21b7jJZ7MSU8Ylt7KFvVmsJNfmzrCuXIlhQu7yoS + lHBoysBidxTjcvyOYmcq0jeTHvEwhojHyI43oUClfU5Tkb/OlAgKM5zJltepSZYkx5uRlmhJjt5O2p6r + th5XS5Y3rWlu9AhGMoUHFQewryWGIz1xIgbjOTMkv7UrRLu2C8J7xoUHDaUIJ0oyWUWiqVYOCfql7/am + mNAl3Kc91YTG1I1CGs1ozLGktdiejlInWorsqc22oDzDbBUGc6qM1jQJL+vJc2Ykz4ktWbasFDpzusGP + G92RXO8J50xzAHsq3BlNN6M19jG6U80ZL3Fna70vi/Uecn/t2VphxWKROSul1hyX+l7pCuLxgXCeGAgR + nuXKxUozrlSs5cm6x3ip8VG+1PwIr3ds5OsDDnxjwp+vTEXx9Fg8R5ojmCwOpDsniJoMPxkDneS62WgG + sMIDA1if7EBakoNmABcmu1Cd6kFLmgfd6W4MZ7gyk+XGtiwXdqXZsS/ZSjOAVQTwsShTLQW0wpFIE/ZF + bWJv9CbN6F2JM9PWC1ZQpq8qd8aaspJgwW69LXsyndiV7cKy0ZGFDFvm0oRz6ixYTLZge5IFK/Hm7Iw2 + Y2foBnYGPML+wIe5I/u8VOzGs2pJknwXFhMt6AkzoS5YIHyrIdGbptQQGtJCqNYFUZToRbYIBUOk/K4k + LxGjIXTlRtMnZL/PGEm/PpghXSBjqUEsiDA4nuTJ1QQ3bia6cCfBQTOAX5Dr86qMTa8Z7Hk51YanpH63 + Eky4GLmO4yEPcTzsYc7EbuJSnDKAzbgZtvkzBvBGzQB+JfAxvha8lu/FmGgGsDJ/Ff4+3Zafy3FVFPDf + 6qz5azn29+Q3vSnlN5PM+Xa6DW9Ke/qu9LnXCxz5YpkzLzaodYD9OVnsz7QIoLowJzKEj0a72OLtYIuz + na1mALvYqzR2ws+83fHxcsPPR0UuRGrr/ar1fzONKURH+BPo50xwgJuW4i5DCfGcJOoqs2hvLqavq1JD + T3u5oIK5yR5OHdvJU49f4MtfvMcPv/cV/v7Hb/IPP/k23//2K1y/dIR9K9NcuXCQN778DL/4h+/z1n/8 + Pb/9t5/w9z/6Jt/66vM8eessy7ND1BRnkKWLIEnm/mThAOmJkaQlRKK/j5TEqE/N3pT4WFISYtEnxqFT + xm9SPCq9c2pK8qoBHB9PbEw8cbFJGjQDWN5LSo4lMSkCQ3ocNdW5jA63MD7SylBvPb0dVXQ0l9NYU6BF + +hYY42XeiyAnPZKSvHiqS1NpqcsUZNFUo6J+kynLEx6ZHUZFThj1+VEM1qYx05LLzp5SDg1XcXG+masL + gsUGQb2GS/M1XJyrlDG2gnNzFZydLdVwZq6EM/MlnJjO59RsIWfnywSVnJlVqNJwaqpSUMXBwUIZH5JF + K4UxVBTKgEr/XRHBWEMiE62pTHVnsWNLBUe2tXJ8uYOTy52cWe7l3I5+LqwMcG73IGf2DnN4uZuZoXJG + O3MZ7ylg+1Qdh7d3cHpvD7dOjvLsxSlevLSFO8c6ZH7NZcdAIruGkri4s5iXzrXy+uU2vnq6hi8dLOSV + lSxeXTbw+kom3zuQz09OlPKrq3X85406fnutkrcul/D7i/n8UZm+59L54EwqH5zV8cG5RD64EM97F2N5 + 90o071wL54+Ct29E8M6tWD58XMdHdw18cNPIe9eMvHMlW3h1rvDrAj66Vsp7V4p560Ih/3Y6j388nss/ + nirhl+flvFea+ePdbt57vJcPHu/ko8fb+OheEx/crebtW8X84Xohf7xZItvV/P52PW/dbuZfL9fzw+Pl + PDuTLGOyK+MZNsyV+nOo18CNlRZeujLHs9cWuHlphrNnRzl2eoiTFyY5fm6KPYdGmF5op7Y5l9ikQM0Q + Umv/WtiYYm61CTOLDZiYr2eThcDyUTZZrcHRY5MWTZpVHE9TVyktfbVUt1RQ1VRDa08nA+OrBnDv8Bit + 3X30DY3SLmVWXhHh0fGERMRKmUBsop6MrAJaWntYWFrh0NHTHDx6Sup0jJHJOcrqmsgtraSmtZPesUnG + 5xYFC5qpXFBWid6YjSEnn6rGZgYntrB1x0627doj556jubMbvSETT98AbB2d/4cBrIxfzfy1sNCMX3ML + s/tQEVUbsbXfiL2LGY6imZ3dLTSobYX/WwPY1sUSa9EqnzWAXbztcPdT+J/G7wOoqGCvIHtW1wFWkcAO + +EcIP46w0dYBfmAAJ2fIvFAaQUFVPPkVcRpU9K9Kzx2f5qcZwIFRoje1CGA3opN95P0AUgyiHdNFO8ic + EZcSQFyiH9Hx3poBrMr4BD+SkmQ/mXuysmOorcumviGP0rI04biRGEVj5sn8ozJM1VSno6J+KyuSKS1N + oLwskdISFTEboaUX1aX4olJJqyhgtWRKbl4sZeVpNLcUagZwU3OBFv2blZtIoRy/obWY3qEGaUeVlMt5 + c4r1ZBXqKKnKobG9hu7BdrbMjbJ91yJHTx7ixu1rvPGN1/naN1/n2uM3mVqcp6alkaLKcgqr1XrIKj14 + E6MzE9Iuh8kpyScwJoQwGafzKgroGetjbHac9v4O8kpyyS/Jo6WjieWdCxw9vpeV3XPMzso+Y41Mbmli + fq6Tmek2Rgar6ekoobOtmC5Bb1cFAz3VjAw1srw0xPK2YdluoqoqC31aJJExvqKRnLT0f66i+5Tx+wB/ + /p/i8/jfjeDPG8B/CQ/2ebDfg+3/bgB/1gR281bGr61Wuon2VCawm4857r6yLVg1hK3wEm3nrzLEhdiS + HG5HTpwT5cI1GnRuNKeIJo53piHWhapodypjPCkTFMf50pqvY9tQG6d2z3Pl2ApPXz3OV567yXdee5qv + v3yXN168w3e/9Bx/9bWX+I6U3/rCU7zx3ON86cmbfPHONV68epFnLp7hhSvn+fK9W7zx1D1evXGN5y6c + 47mL53np+lVevnuDZ5+4zsVLxzlyQkVG7WSHnG/n3q3s3b/Iju2Tcp/qaKnJoaFYR6u01enWXPaP1HB5 + ew/3ZDw8O1/Pzi4j0zXRbCkNFs0SxnJVCDtqAlmp9tdM3z3VgVr6591VgSyV+DKb78FEtiND6db06i3p + 0ptr6ExVxq4ljYlm1MZuoDJSBcOY0CTcsCVZeHiKlZQWNCYILxc0CcdU73cIR+3OdGGwUGmRQIZKAugp + 8KYtx42GDPVwo6OWQjk/wVI4oTWFKXbk6hxESziJvnAhK81V4CYa1EXLmJOb7kqh6ImibG+KpSw0uGso + zpB7lOsrXEDel+PmG5zIS3cU3atgT3a6ncBGNLAdJdlOVOS6CpypynWkOuc+RCOoSGBlANfKNahT6wZn + rpq/WtrnDPtPzd8HBrBKA60MYPUbVNpnZf7mxFoKz11NIZ6p1vf9NP2zg2YAG2Ts04dbkBT0ZwNYmcEq + GjcjWkUBO2hRwCoCWkUAF+jUg6CiB+6bvwqGaEv0IWaaAaz+I432fFQzgBN8N34OygRWS18pKPNXQX1P + QRdqoSFVzqtMYFW3rBhb0X3mpIaaamV6pBUpkdYkhFsRF6YeUrcnPMhFyxgYEuZDQIgPPsr89XH5c7/2 + dMHdy1XLRqj+j1T/S6r/KJUJrIJVFNRr9d+oeoDks/+baiaDvFb/V3p4qqjfVQNYpZL29Xdd/d8ywEVb + qs7X24YgmWeUAREe5kBCvAc5meHUlCfTVqunt05HT3kkvQU+DMr9nC9wYF+ZA8cr7Tgjmu7SfQP4mWZH + Xm5z5Gs9bny735XvDjjxvX7h+X22fKffnm/0O/HGoDtfHfTmxS53btbYcKbIhNPFZpwuMf8Ul2vseaLD + h5eGw3h1Mpovz8bxwkgwN5udOV8m++Rt5EzOBi4UmnC5zITr9Wbc67TiuWEHnuq35U6bGVdr13Ktfh33 + Ws14sUe0jtRFQ59ad3gVavuLfaJ/pHx5yI1XJrz48kwQr2+N5MUxfy40W7FTzjUjbXQ2y58J0Zudem9K + wm3J8Jd2I9dMH2CHTrZ1fqYYfB+jKnKj6HAPznRGcKkjiCOVjsymPaIZwBMpDzNjWK9FAM8JpjIeYzx1 + DZOGNayUrOVyrzUvz7vz9SVPvrXgybe3+vLGdCAvjUZwZyCasz0xHGyPZ1tTEoutBpb6y9g6XM+kzDET + gy3MbelhZXmc08d3clr0zMq2cc0YriwxUl+VR79a3mW8Q1uT9VNs6WJS9I8y61pbK8jPFw5miJN5Kp/R + 8W7toacDh3YwI3NsaXk+YRGBBAX7ERjkJ23SA09P19X2KvPIg7lF/U+v1gRW5m9AuCdewdKOA51wl/bm + qczfUE8CIv0Iig4QThJGVkkOLT2tzC5v5dwV0WBvfIW//vEP+cWv/oU/vv9HzQD+8CPBhx8KPuZPf/qE + P/z+9/zsp3/H19/4Os8++RSXz5/j8N697FxcZGp0lP62dlorq2kqKqMuO586Yx5N2XkyXhbSnldAc2Y2 + tekGqnQ6KlNSVktdMhUpidTqU2jOSqcjL5OOfCM9oisVuguz6BJ0FmTKcdJpyNRTa0iiJi1BxrNVVAgq + MxKpEN1VnhFHeXo01amRMo6H0B4dxGBUONvSUtmWns5Ump6B1BQaU2LlvDEUK9M4LY6ctHgy0xNFywrX + yUwnJ8tAXlamaFhlAOdRUVZMa0sDQ0O9zAqP2bFjkb37Vjh8eD9Hjx3k+OlDnDhzRMPxU4c4dmq/9nDc + 4RO7NRw5uUfKFXlPvnNcePbxHZ9GAavU0Co9skqT/AB7934enzeDVSTwkmzP/dkAnv+zATw22iF8aYDd + u2e1/f5s+v4Zq+sBP1gDeFkzXVex4/8C2zl4cBX792/7FPv2LWmRvSrCd+eeec0AXpS5fn7bBHNLUsdl + 0QeCpeVJlpen5BpOfw47d84I15Pfv3dBiyBWfGFp1wwLO6dWzV/5fGllTt6bY1qOOTTVS2ufevC1gvrW + KtEj2aRkJBARF4KXSt+vRf/aauO0h3C3B1AZYL3crfBT/+0Lx0+Ilvk53Y/SnECqCoJoroyisy6eruoE + +mt1DNelsqXJyGxzFqOVwlcyQ6hJ8aZW50uzIYhWYwh9+TEMF8V/it78aDqywmmSz+v0flSn+NCWHc7K + YAV3DysD+F8W4Rfb+OO3BvjJrRKemg3kaq8r17s8uN3ty+0uf26qqJ9mNw7L4Ly70ortFdYsCObKbZgs + sWIs30wmh/X0Gh9hOH8ts9VmHBpx5+rOKM4thrDS78JYjTmtWespiXmIzKA15IQ+QkHEekpjTalMMKcu + cTMd6baM53mwtTSAhbIApvPcmREsFPswlScEKNVc+xOzT2eqmb89gn7DqgE8Wyh1KrZjpdRe6unOhfZg + bvXHcmcogVMN/mzLsmAyZR3TyeuY1W1g2WDO3nxbjpQ6cq7alcvNMim1uXG7w5mrTZZcbjTRon+fGbbj + mVGZlIYcuCuTxfVWW85XbuZY3gb2GteyzahSO2xgNncTW2RgH8nfxEC+Cf1yTfpyzRkqtGWLSmdZ48JE + mTXjhZvkmq1jruIxVurXcn2LPV897M+Pb0XwL89F81+vJPDBG+l8+LUs/vBiNr+4nsWXtkVr5vtE+kbq + 5LoV+q8jw3cT6QEW6INshGjYkxxsTYy3KeFu6wh1fYwoj0eFsGxEFyAkxmctEW4PCR4hzGU9Ya6mss9m + wjxVWlgnDSFCBAI9rfB1N8fbzRRPl034uG0kwFMZwObEhdiQGGGPUeclA1EoBXmhZGX4k21YjQBWBnBy + rBMRwZYEeG+Uhr1eM4Bd5XwqClgZwGp90CAhPg8QEuKuRQCrNNB/yQBWkcAOTiK4XUWMeDtonUlF/qpt + JVJUBLAyf5UJ7OIlQsnD6lMD2F2lPrpvADu6y3FFPCn8bxHAikwpkqUI1wOo127uDjg6W2tP1am6+AhJ + 8wtw04iUigb281Upn1ehtn1UPf8XA9jfx0mLyvwznAjyddQM4OhgDy0NdLxARQPHR6qI4M8awAGaARwf + qa6zl5D5EPKMkWQZIknXhWhpn5NEWCXHy77JwTKRh8nkISI7R5lTnzeAM5PUIvee5EQ6URe2mZG4TRyQ + vvDCoLTDlQjeOhPF+xeCeOeMC++et+e987a8f9aR9046a9G/Hxz04KODXnx40F3gwodHnfnTWQ+44gO3 + g/jkViAfXfXhvbN+/IsQmjearbmiW8uK7xoW/NYxH2TBogjFXUKqVsri2FaVzERxPA0p/sS7mxFkvwFf + exO87EykNCfA0YpIIbIxco1j5ZpFyTWOVhCxGu5iQbSLJckyoBo8ncnycCTPXSD3s1Due7G0BYUiaRuF + bpvJc91ErvNachylHzmtpdHHmoEwdyZjfZmJD2AyxovBcBe6QhxoDXag1l+O4WmJQeqTYrWOVKmT0cWc + Yukz5YEulPs7URXsSm2wm1xLLxojfGgRctMU6UuTbNdH+FEb4UtVuC9lcm8Lw73JlftrlH3TBAkhbkTK + MYK97fCT3+Il7cXdbpMGLwfppzJ5RMvn8WGupETL9xJCyUuJJE8XoxnAKsIoXTOAQ0iICiRWSFpUiC8h + AR74+zlrEbfeHmb4qmh+14c1Azg79mEm2ly5dyaFf/hOMX/8VQl/ersEPsgTZPKn94188Hsjv/2HbH76 + pUKePZbKcocXVTLe6kLXExG4gSD/9dLmBX5q/QJHwsLcCA93JyTUWUiiMoJt8fO3lr5iKbCSfVSqMGsC + gm0IkM8C5doGBTmI8HAiUNq/gr/qR56OUl8bvN1t8JP7G+Kv1jd3Ii5aRXP9JQP4AaQtCKJlLEyMcUGf + 4E5mmhflRWFUFYdSmudLSa4nVYW+NJYF0lYdSmd9JD2N0Qw0xTHWkcJYezLdNRG0l4fSURFOR1WUII7W + ijhqiyKpyAsTwRtGeV6klgpfrYdeXrK6FnpBfiDZ2Z5C2pyEvNlL/xMRmGpLqohaZQBniRjPz3SjINuZ + YhHJlTLv1Fc60FZjx0S7CytjAZzaGsG1HVHcXA7lzrYg7i4Fc3chkNszMgeP+3JzyFPEgCdPDn/WAI7g + hdlwnp8L1wzg57ZG8cRUCFdEaJ1sdeJAvR2HGu051u7GyU5PLQX0qa5VnBChdbLdh/O9Qdwaj9UM4Gsj + MZxq9+NQkwdHW305Ithb78lSuQPbKlzY1+TH8e5wzgzFcHwgjN3tnizU2jJTaclctR2zlU5MlchcVWDP + bIkT22tUBPBnDOBaBffVaN8qd7ZWuTIn23OVUla7M1/rzXS1J+PlbgyVOjFY5sKQfDZY6caw7Dcsnw1X + eTLZEMBydzS7BxNYEXG03B6hRQIvt0awrz+ZE+MGjgwms7Mt/NPI3/+zAeygGcB9uS5CnLwYKVZ/tnjL + tnxeKOctcWe80pO5Rn+m1Lr+tR7MtfpzYDyRCzvzBYXs25LKrIi/4To/mgocKdartfofITVyLZkJZuSm + WFGQai+QtiDIMziTneFMqs6GZOFAugQLsnW2qwZwtpfwJW86DB7CcTwYz/Zmttif/a0xHOqM5nBnJEe7 + QuW1PzuqnTT+M2o0o0elmkvcRFeCCZ0Jphq6BO1JprQmm9KkM6M+1UyEiSm1Rgsa8u1pKXOVNu9OS7EL + FcKLiuSzgvTNIkhkvDRYUpppR22OAy059rSnq7WBbVmRe3CsNZgTXeHsbZTrWeZGm/ze8ujHqEw0oTbD + mqZcG1oLLGjPlzoUbKQ/dwNjBZvZWu4obcGDI83eHJd2drjSmsMlIuzL13K3dh0vN6/l610b+F6/Bd8f + d+d70yF8bTqGZ0fiONEUyWxREH3ZQdRn+GlP92epaN94a/RxVugTbUhLsvuLBnCT3o3OVBcG0pyZlOu+ + kOHEivRRZQAfTNj8aQTwA/P3UOQm9kRtZFfMRlaEp+6IM9VMXA1yr3bGb2ZbjAnb4szZkWLDLqMzKznu + 7Mh2YyHTkTmDHXOpVmzVWbGYbMmyfGd7rDnLctzl4LXsCXmUmwYbXiz14OlK6YcFriwkWdKtGcCmVIfb + URXvSV1qsPzWCCrTQilOCSAnwZOMGFeKdX60COHvK05ioCBB+Hc0Pamh9OtDGJV953WBHI734EKsM9dk + vr0VJzw2TuZ5ZQDrHTQD+KU0G55I2cyNxI1cilbpnx/hlNzD89J+rkibvBa9mZthpjwRbs5TIX+OAP5i + 0GN8NWTVAP6J3oqfGx34ufxmtQ7w36fbyXvW/DDZnO8nmfHtRDO+kbyZ16UNvpFmydczbflmngNfybfj + S1UufKHRhztV3hzN9WBLkgt1QXbk+tiT5u9GmJcbHq7OONqLgHJ00Ixff39vDYGBPtrav7k5BoqLssnJ + 1pMgoitKW98sUIR0DEV5KVSXG+loKWaor4axoXqGB2ro6yynu71M+1PkkAjY65cP8+yTl/jG157nxz98 + QzOAf/Cd1zQDeM+OSS6fP8DrX3qaf/zZd/ntr/+O3//m5/zyn/6aH33/K7z83E0t5VpzTT65hliSo/xI + jPRHFxcm83IYSYJk2U6Ij5A5LJqkhBhSNOM3XtqpMn0ThMMlkq5PIk2vIyUliYSEBGLiEoiLT/ozEuJI + TIkhMTlS5pd4qqtyGBpoZLC/QX5LBW1NxVKHAmrLMmV+0pGTLlxPF05eRjTVRTot4retMYvmWiN15Sky + f0VTkhVEWVYg9fmhdMlctqVez1JbFgf6Szg5VsHV+QauL9RzfbGWqwtVGi7PVXBptozz08VcmCvh/Fyh + hjOz+ZyezePYRCYnJnM4PVPI2blSDeeUSTxdyomxAo6PyVjZI0JWBO5grh8Dub70yvzcWxzAeL3UoSWJ + 6a40VsaLODxXxdG5ak7M1XFmTkUkN3J2oYmzS82cXm7hyEIDc305jLWmM95uZGmkhH2y77HlJq4e6uGp + MyO8eHGEeyfaObk1j5WBOO2hocvbC/ni2Ua+camGb50t5FvHcnjzUBbfP5TJ3x7N4R9OFPDPZ4r41eVi + /uNKEf9xOZffXDTy1nk9vz+TyNun43lP8P7pOD44G8sH52N490IUf7gUxluXg/ntlQD+61ogf7wRxgd3 + 4/nTXR0f3Urjg6tpvHvZwPsXDXx4KZNPruTw0aUs3j6Xzm9PpfOrkwb+/Uwev71Yzu+vVvP29VreuVbL + +9eq+Oh6OR/dLOGD67m8fSWdP1xM453LRt67ns/bN4r5w41y/v1yGf94rpRv7jFwQ+b1Y3X+HJc548JI + Fre21fLs6UEel2ty6eQQx4/1su9IF/uO9rNrfx+zi630DlVSWKYjWLicnZNK/WyyagBbmLDZfCMm5qsm + sIn5Y5hYPIS18zp8hXOlZIZT1ZRHQ2cV5Q2llNWV09DeqkUAj8+uGsAqBXT3wLCWAjqnoITohGQiYhKI + ipO2naQjLSOHqppGJqfmOXT0FMdOn+fAsZOMTs9RUlOPsaiEiuZWOoZHGN+6yPTSdroGhymuriE9N4/M + wiJqW9sYmZ5madcuduzfz/jcHDVNzSTo9Hj6+WPn7Iq5rY2WAtrM0gJLKyusLS0FVlhayGuLzViYm2n4 + 1AB22IiDqxlOoo2V+et03/xV+F9TQH/GAFbbygC2cTKXUnSkSiXtqbJUKfNXQUUDq3WB/4wH762uv2qL + T8iqCRwY6XzfyLUjMNqG0Dg7opKdSMrwIqtY+npFLLnl0eSWRctrGWeMwcTqfYhM8pB9XQiLd5f9RVum + B6HLCiM9O5rUzEhSlAmsDyIhOYDYBF8tEng1Alh0ZVIAetGbuXnx1Kv1epsKKK8wkJkZjUG+p9KGFuRH + U1gQR2Gh6M38KApkbCkuipXtWIwZobJfsBYFrNI/ZxgjyMmNpbAokapqI61txbR3lFFXn0tOXhIZ2QkU + lRto6qigf7SFjoF6attLKa3Lk3aQT3VTubbGdM9wN1MLU6zsXeHEmRPcvneH17/5db4muHb3NjNLCzR3 + d1DZUCttsob6jha6R/pZ3LWs/eFc2VhDjD6OaF0sOWV5tPS1yec91LTUosuQ9piZTkt7E7v27eTC5VOc + OnOQw0e2s2vXFlZWxti3d5Ldu8dZ2NrL9JZ2JsaaNUyOq+02pia7OHJ4kQvn93H0yDa2bOmktj4fY3Yc + EWo9YD8HnETzOTpbfgp7F2kvggfGr9r+7Ov/kwH8YPsvvVZ48Ee9itRS0NYX9rLB2dP6U6jXCm7K/PWx + k20rXBW8LeW7FrJtvgrvzZohrB7wDRCNFyW6ThdmT1GCK3XJ7rSnetKl86At3pUW4SoNMZ40xHlTE+dF + SZSHcNBIpprL2D8zyKmVGW6f2cNrT13izS/c4+vP3+T1Z6/znS8+wfe/9KyUT/KtF+7ytadu8cWbl3jh + yjmeOXuSx08c5olTR3lJXr9y/TLPnT3DkyeO8dTJ4zx3/ixPX7nA+XNHWdm3xPzSFma2ylg0PcicbO/a + s6gZHCp1altdAXWFKTTlJ7ClMZddfZWcmm6VOaKDoxNlMh+mMFkdwVR5EPMVQSxWiPao8mN7pTe7Kv1Y + EeyuDmBF3l8s9rlvADszLBqwP82W3nQbegRd6bZyXaxpSDKnKnYj5VEbqI41kWtiRpXwzFrhUrWxws2l + VKgRzlkvHKxZb0O7cNWePA8GCv3oK/KlU7hSU6YzVemOlKTYkRdvSY7w0HyV9l9nR47wuyzRGJlpLhjT + XMlIc8OQ6qptZxncyMvyIl80RWGWJ/kZ7hoKjR6UyXslWR6a+ZudZq8hS0Hqbky1EVgLr7ClULheSY7z + pwZwpegDhQcGsFoPWEUA/98YwAoq+rcwwfK++WtBZpQ5mZHmZAhUJG2a2o6x1gxWBWWq6sI2awZw4n0o + E1gzY8NX1+XNjBUeKRogVzRAXrK9lgJapSd/EP2rrQccupnkQJNPI4DjvNf/fzWAk+Vc/90A1odZyXmt + tWjfjEhrOa7sGyT1CTGVepqTqJafCrEgWv1XEaD+13AkKNANtZycSv3sqdI8S39+0M+dXB1wdlvNSKgy + EKrU0B4ejtr/lO5SKqjl6pS56676slri7v4Yooxf9Vo9UPJp9K9A/W8ZoLIUCq/283PC19deM4D9va3w + 87UUPm1DdKSLcNEAyoviaK3W0V+nY6QyhonyYKaLPdlV4c5x0fDnah25WGWjRfDea7Tn2WYHvtjqyBs9 + 7rw54MZ3+5357oAjb/Y78O1+J74u7311yItXBrx5qtWNC2VWHMrewAHB/pxNn+JYsSVXRRM+0RfCC+NR + vDKbyMuT0dzu9JTzWXMmfwNnc9dyqWg91ys38mSbJc/2i6YZdeTpfmvutJpwvfZRbtSt5V6LCV/ot+fL + Q04aXu0TvdG7CmUAv9wj9e6049luZ14Y8OALY/58bTaC1yZDuNfjwvFyS/YXeXFA5tPlkihGjAHUxTiR + I+Ndqrfcdx+Bv8ImjL6PUB2xjvkCZ06LLr7aGcCpGmfNH5jRP8rM/RTQS4XmLIkGns3ZwKTxMcbT17BY + 8DBn2015ftKJ17e68405d741480bWwJ4YSiUqx0hHGsKYaU2lK21MSw0p7FjoJztY00sTrSzsKWbnQvD + HNozy8XTuzl7Yic7l0bp66iiOFf0T2kGfd01zGzpYuvcAAvzf8bc7ACTW3pobxfeV5im6YrKyjyGRzvZ + vnNGGycnJgcoLM4mOMRX2o+PBi9vaY/uqw8sqAhgNd+orBPKAPYJcNUM4MAIL3zD3PEKcRO44xfuSXC0 + n3CQYEJigwTBwkF0VDRUMDAxxMHjh3nly6/wwx//Nb/41S/447t/4MOP3tMM4I8//IAPP/iIP338J/7z + 17/i29/4Ok/cucPBPXuY3zLBUFcHPc1NNFdVUis8sConl5qsHKoNRmrSjTRnZtGenUuH8MS27BwaDOnU + puplHtLRkJZKk0GQkUqbMY2ObMOq6Zsv1y1vFb2FmRr6BD3yfnuucINMHY0ZyTQYBZnJ1GWn0Jgrx8sT + 5Mt2ToJo93CaEoLoig5kODJU9H0i20TjzaenMmbQ056WSF1aPFWGRMrlWEXGJPIzUyjITqcgN1P0axbF + eXmUFhRRVlRIQ10Vfb2dzM5NsnNFrVe7j+MyD546dYyTMheePHuU0+ePceb8cQ2nzx/h1LkjnDx3SD47 + yImzB4RX79Vw9NQezQhWJrCCigxW6+bu2a9SI69i/77P48D+pU9x6KAyb5UBq1JAz7Fz5xSLC+PMzg5J + m+pjYqKXrfOjwpNU9O9O0Ru7Bbs+h2PHdgp2aFBrAx86ulNLO/5/iwcG8EGpywMcUCbwgVXsPiDz/N6t + bN81y5LUT0UAK/N31QDeohnA27d/HpoJLNxARcCrCOIde+ZZXFHGr/y+nbNs2zXPtt2r2CrcZWppjMHJ + HnrH2ukd6RDeWkdZTREZuamERwcTEOylpUsPkjIsVNq/ytIpZUSocOwwL2LD3UiK9iQ90ZuizCBqCkJp + LAmnqyaWvroEeqviGahJYqRWx3RTBovtOczUG+gvjKYl3Z9WQwDdOWGioSMYLo5loiyByfJEDaMlCcIZ + oumSz9syg1ezxRXHsW+0mieOTrPmk3+cg39a5J03h/i7u+U8MePH+Q57zjXZc6HJifMNzpxrlEG/3pG9 + FdZsL7FgvtiCmWIrpkpsGS20oS93M13GDbSnP0pX5lr68tcxXW/O/lFv9o8LIWqzp6/UnDrDBrLC1qD3 + W4Mx9DHyokwpS7CiUkhLVYKFEB1bBrPcmCr0ZbbIh4ksJ7bkuLCt3J+FUm/GsoRMpaxGsvTqNt43gE0+ + NYC3Ftuyo9SOQ7Xu8huCuTUUx+PjOk41B7I105yRhEeYSHyMyZT1zOk3spxlzj6p/6lKJy41u3NLJpnH + ZQK72WHHjXZLVPTvMyP2PDViy+MDNtzpseFKkzmnyzZyJPtRdhkeYtHwCHMZjzKVtZ7x7PUM5W6gN1fq + lmsmF32z3BQrRkodmKp2YrLKjumKzczXbGJ7w0YOtm/i6UVXvnc2lH95Jp63Xkvm3ddT+OQ7GfDtbD78 + cg6/fTKXb++L40qnG0u5FjSEPESRz8NkCWHJDDAjO9yevFhXLSokPUylprAgSS1YH2RKTpQ1uYI0ISyx + Ho8S4XrfAHY2IcTZlDAPKyL9HIkWMhAhQjTCz54QEZwBnmb4uJrg537fAA7YTFyoMoDtSE1w0UzfzAw/ + 0lO9MKb7CKn01gzgpBhHQvzM8PVY9xkDeBXKAPaVcwQEOOEv5/TXCJCLZgAHh3p+zgBWRquCMoBtHcxW + 05koU1cJGbV2knpC9b4B7BEgBMhfyJKIlv9uAKuFuJ1E9CgD+METtP+nFNAPDGBFupTxq562c3C0ws7e + QvY11Uxp7Sk6IVI+furJPBd8fGTCE3Ll7fUA9p8awC4i+h2k/p81gIOlTiHy/ZBAdwLlWCoCOFiuf5SQ + wbgwH4H3pwZwUrTvpwZwWlKgZvyqNVGVEZyW5I9RF6yZv3r5TJcYsBr5mxKMQR9Gtoh6Ff373w3gkrxY + slICMIrALxBh1hhpKX3CjCOFdnxhOICf7Yni96cjee+0H28ft+edU1a8c9qC90/a8v4xRz447MaHBzz5 + +IAPHysT+IA7Hx5x5ZMznnDZB24E8clVP94/68ZbB9346Zgjr5Rs4kLsw6x4r2F7wEa2hVmzI8md/QWR + rJTHs6QZwAk06AKJcTMlwG4jPpoBvBlfByGmcr8i5d5E+rgQIYQ2VO5viIcNoe5WhLlZEi3bKXIPDEI+ + soUU57s7UiT3r0zue4WnCA1BlYjYcs/NlLpvosh1LYUuj1LmtpFGX2v6QlwZifRkLNqH/gh3WoLsaAiy + pUbKUj8bsj0sSJE6xVuulXITGSLai+Q+lge5UezvRKm04yohOLXSlusjfWmOCaQx2l9DQ7SQRkG1EJ8K + eV0c5UthlJ/0TV+MUibJd6KDXQmT/uAv7dfLUYS1/HY3OZ+XgwlRcvyUCE8ykgLITQujMD2GQr3cVxX9 + mxRJenw4urhQ4qMCiAn1JTLYlzCZbAJEUKi26OlpKUTNBJ8HBrDvGrJiHmZExvUbRxP40ev5/NcvSvjo + D2XwQRF8mMvHH2TykUoD/ctCfvlmFa9dyGRfvy/16RtF2DwqbXUdYUEbCQ40JUiuU3CoK5GR8juivKVU + Kd5dZJJzFMJoL5/ZEiQIlnEqOMxOK4NC1bYzISHSH4KdCQxylXHBVVu32FMJHFdL3F3kWrhbS9+Qe/8Z + AzhexrnIsL9gAAeulupJ9EQZh/QJziJ+3amviqK5JprGyjAhhyF01IXT2xzFUEcc492JbOlOZqpXx9Yh + mViHM5jrT2W2R89MXxpzA0ZBLpPd2Qw0pdFVl0xTWSx1RZFU5odqawZXlERQVhxKQb7c02wZh0XsZhpt + MaRby/goQjDJ6lMDuECtqZTjJuLKldoKV5plTuhucGS+z5sDUyGc3RrO5aUwri4EcHOrH3e2+nN3XjDj + z61xX24Ne3F3wOtTA/jFqVCemQzmyYlAnhCx8MRUEM8vRPP0bDjXZJ+zHa4caXbkWKszJzTz14czPf6c + 7hZx0uXPyQ5fTrX7cr5X5srxWO5NJ3NjLI6zXUEcafGR7/lzqNmHPbUebKtwZnulO/sa/TnaEcaJ/miO + 9YVxoNufHc2uLNbZsyxtaqlORfO6MVPiyFyZfKfGnRXNAPa4bwCrdYE9War2EHiytdpdM4BnK+U78t5c + ra/MlT6MlLvRV+IkvEEgx+mV8/fLfiN13hommwLZ1h3F3uEkDoyksLtPxhEtFXQQOztiODiQzL6eOHa2 + hWmm7w6F1hDZDl01gOUck+UqBfQDA9hRM4C7s50ZKPBksNCLIRF//QWuwmdcGZB7NlzmxpZaOb9a01/q + s6XBiz2j8ZzbkcfZHQXsHtMx2RZOX40vtbkO5Os2o4t8DH30ejJkjM1KsdIifHN0DtIeHGQedSbL6Exq + mj3JiSIkhQPl6O01A7guZzUCuNModTDK2JTjI5zLn5XGcHY3iBisk225Drvk3iyV2TMl3GAgdRPtCetp + jt9AS/wmKU1oTjDT0Ji0mbqUzdTozKlM3Ux5mpRGKxpEsLaUe9Fe6U2LXItivTl5KaZkp5pj1JuRpkqD + lYgSG8oEpckbac1Qy1y4yv2WOrSHa+m3+4tdqdTJb5Tfa5TfmxYnSBCOkvIIuamPUGoUgSzcsCXHhK5c + S7nG1owX2zBduCqGt+ev5UjJY9yqXc8X2zby3T5zfjRqx4+nffnb+Ui+MR3L8yPxXOqIZ0dlpPDOcNpy + QqjO9qVErk9emoucy4HURBvNBNYn2cu2/ecM4AadC206R+GODoylOTCbbv+pAXwgYTMHHxjAgs8awDti + NrIzzpTt8absTDBfhdyv7XHmbI3exHyMGYuJliynObIjS9p3rieLWS7MGeyZkTFgVmfNgmBJxoLticKh + 5bs75Tv75LjXMmy09M9PVvpwVtrZgtRFM4CDzKiU8bI03oNKfTC1xigqDBGUqD/ik/3IivekNC2IjuIk + Bsv1DBYl05cVR1d6JD0yTwylhTMj8+l+2e+sjIeXoh24EW3LvRgbXkiw4xW5Bq/K738hzYZ7KWarBnDs + Os7EPMrZ+HVcTjblapIF1x8YwBGbeSpkE88HreclGf8/awD/WG/FP2gGsINmAP9UfvPfpFjwvQQTvp24 + ia8nmfC6tKkvJ2/iy2lmfNVoyVdzbXhVuPGrFY68WOPG1UIn9qTZMRhuQaW3Ofk+0k/CfEkIDSLAzxdP + Dzc83Fzw9xUhFeSrPYkeEiqcR5dAQUEWZaU55Oelk5IYTkKsSvsfSWlRGrWVRtqaCzXTd2ZLGzOTbUyM + NtDfXU5XWwlbRlrYs3OCU8e2c+3SYV5+/gZ//b0vaQawKlXqZ5VO7eKZfXzl1Sf4h59+m9/8+qf88a1/ + 4j9/9VN+/ndv8vWvPseZE7sZ6mmQfpJIoszrseF+JEYHybwcRFxUsMxfgtgw4uOitDTOKcnx6FMSSNUl + kqZPkvomy5yRIv3tvgGcmEBMfAKxCYnEJSRpZWxiLAkp0asGcIYygLPp6aqms72C5voC6qtzqK/Ioqo4 + jdK8FHINUWTrwigyxtJQlk53cz7dLbm01qVTLUKxODuI0kw/6vKD6CqPYLwmkaWWNPb35HB6rIxLk5Xc + mK+RuUiwUMm1rWUarsyVcGm2mAvTeVyaK+DCXB4X5vM5M5vDyaksDo8aODqeyakpGReVCTxbxHnBueki + To7ncnIsT+aNdBn3wxnK92Ewz0t0kqf2x/ZMcxxzbYlslTl475Y8js+VcmK2hNMzFfL9Cs7PVHJ+rorz + C9WcX6rlpJRLvUamWnWCNJYG8tk3XcWxxTou7+/g3olenj8/wFMn2zi3lM+u/hj29MVyTbZfO1XLmxdL + +P65TP76lJGfnMzkn8/m8qvz+fz7hUIpZftiNr++YORXF1L593OJ/OZMNG+diuAPgneFJ79/KpoPz8Tw + wbkY3rkQyX9dCOE/L/jz75d8+A/hw7+7GsR7tyL5051EPrmt48MrKbx3Sc8HF3R8fFEPV9L55FKq8OVE + /ng6id+e0vP781m8c6WY966V8M6lIt4+X8C757PlO5l8eEmZxyn88Wwsfzgt5zyXJMdL4+0rGfzhSg6/ + uZAjdc3np0czeW02RvRrAvfG0mRuz+PxpXLuHWzm+uFWzhxo4+D+VnbsamTbrlZmtjbQM1BCQ0sOWblx + +Ae7YCP8U6V+1gxgc2UAb8JUM4GVAbwWE4uHMbd/BFc/4eCiKYqqjFQ3l1JUnU9hZRHVTQ2fGsA9Q6M0 + d/XQ1t1LU1snuYUlxCfriUlIlnadIts6Ug1GikorGBweZ9/ho5w8f4mjZ84xNjtPYXUNaQUFlDU10TIw + yOj8Vma376RndJTSulqMBYXklJZQ39nB2Nwcy/v2sXLoIMPTU5TU1BKTlIRXQAB2rq5strXG1NoCU0tz + rKyU+WuhGcBWFhaCzViam2lQBrCV7SZsHTfh4Lr5fvSv5X3zV0UBK8P3v+P/YAA7KwN4NUpYaVRnpWX9 + FP53A9hNRV76rabcVSZwULSzQLh1jOjGWDvC4u2JTHYiURnAReFyDaLJLonUYCyM1MzfmBRvDWod4Bid + L0kZIaRmR5BZEEdWQQIZog/Ts2RcSg8mMSVQiwJWUCZwgpTKAE6TOSW/IEkzgBsb81cNYKPojzTRoDIP + ZRhWS0N6gGwHkpMTLuOx1ON+9G+GIUSDlvo5O0qOlUBJaYqWUrpVxuG29hKqa7IwZidIXRIorsiktbeG + gfF2umWMbu2rpa6jkpq2apq6mugY6KBvrJ+ZbXPsPrCXU+fP8PjTT/G1b32Tr37zG1y7c4fZbYt0DfbR + 0N5MbXsTbQPdTMxPsf+4jOmH9tDW14mhMBNddip5lYU09ajztGkPLyTIuJySpqO+qZ7de1e4dvMSV66f + 5cKlIxyRuWL/wXkOHV7gyNEFDh6al740x66VLazsGGPHjgkW5gdZXBzmypUjfOHlOzz//HVOnNjJ9KzU + R+ajdGMMoeGe2DuYYm1rspq6VbSfnXrYXPDACPp/NYD/Ev5sAKvI39WoFPW/icqc5uSxCvVaQWVUc/O1 + l20rXERDunpZ4OahUlabCUxxFR3t5ika3Xszgf4WRIn2ShW+Up7gQbPOm940P+GjvnSJZuuIdqMl1pPW + OB+apE1ViEasjvdjqNzItv5G9k71ckGu3xdun+Qbz13jy/cu8Nrdc3zzueu8+eJdvvHsTV5/4gqv3brA + M+eOyZh+kFsHd3N19zJX92zn3rH9PHPqCHcO7OPGnl3c3rebe0cOclPu847tswyMddHR00R7dyNtXQ0M + j/eysE1F+8zJ/N8pmrCIurxk6rJiGKo0MNeUz+7eCpnDqtkn+m++KYZJ0Y5TlYHMlvkxX+rDYpmX8G53 + tpd5C3zYUe7HDvlsodhbM4C3ZDkzIlxoKMORAaNwTuFH3bLdJnyrIdmCithNlEVvpEoFwESbUhq2ntLw + 9ZRFbqT8Pio0g9iUetENzel2dAin7Mn3pitfrmWmC3UGJ8pEL+QLp8yMNRdsJjfJhlzRGNl6Ry3rVIbw + 4ox0F9LS3URnuGrbmQY3crK8yM32piDbk3yju4aCTA+KsjwoFP2Rne4o/N8Gw6ewJk1nSbpAmcAqIrgg + W6WCdqIy15GKHAcqsu2plu2aPCdtLeC6HEfqhBPWiq6qy7D9jAFsT6Vwvc8bwLYUJliRGWVKRoQJBuGc + hlCVatlMW3ZKF26GWvPXGKdM3PsGcPhmbQ1fZQI/iAROVEatWq83zEL2sSRbuO4qbMlMUAay7acGsDKV + PzWAfVYN4Fjv9VoU8INIYK302/R5A1j214xdhc8YwAoGqVe6cNgUlZrab4PUR+ok9Y+X80QFmRPub6kt + yeXvY4u/n5MWjevt5yp9yREn6d92TlYabB2ssXO00UxetQ6wr787Xl7O8toRT2X8CtT/lV4+zprJq6LL + VKCMMn7Vtvv9yGDNABZ4y35BQV6opetU8Ipacs/PV2UktMVP+riP9G8/XwvCQhxIiveiMDuSpvIk0dyJ + jFdGM10RzFKlL4frfDlb78nlBheu1dpxo9qaJxrteK7ZnlfuG8DfGXDnu/0uUjrz5oAL3xxw441BL74y + 4s8LvT7canTleKEFK+nrWE59jKW0tWxLX8uSYFe2KSeqnLnaEcATw1G8MJ3Iy7OJPNEfyNV6B84WbuBs + 3iNcLn6UW9WiRfrt+cKIIy+NOvJMvxV3WzZxveYxbtSu5V6zCa8MOPLVYReB86cG8JelfK3fkZd7HbnX + YsvjUu8nuzx5ts+HV0aCeW08mGf6PLlQ48SFujAuNOk5WJ3AVHYwbQlulATbku5pRpKHKSlyzXT+JmT6 + ib4NX8tMth2nm/y40enPBblG+wrM2J5pwvZcc3aV2LGn0p5d5bZsK7ZgPnejZgDP5azheP06nhy246sz + bnxj0o1vb/HmjbEAnuoJ4GyDL/uqfNla4sNUeRjzDTpWBsrYPdXGymw3O7cOcFDmntNHlrhxcT8XTq2w + Y3GQzqYSstNENxam0t9Tw9aZHrYvjbF92yjL28ZYXhplaXGMudlBurtrtTWAMwwJVFTkMjzawbbtk2zf + Mc+ojJd5BRkEBHr9NwPYWZuDVECWWm9+NcW4y+cMYL9IQYSnhqBoH+GJocJBIgiLCyYkJogkQ6JwxUI6 + +trZuXcHz730LH/z47/mX3/9L7z97h/46OP3+PjjD+DjD/nw/fd567e/5W//+gc88/hdjuzby1BXF81V + FVTl51KalUmRIY2iVD1l6WqtXgNVej21qakyXmbK+CnIyaYzJ4cWY5pm+rZk6DXTtz0zjc6sdLqy0+nJ + MdCfnyGaJIP+XNlWKDRqGBS+0F9gpE/QlZtGW7ae1hw5Rp6coyBN9Hg6HaUGOsvlWMU6GlPDZM4LpDcq + gNGIEOZjo9iWLDrLoGcmK42BnFQ6cqUe+ek0yjWuKTRQWWQUDZdLVVkBNeUl1JWXU1dZSUNNFb3d7UxN + jrF7zw6OHT/MxUvnuHT5HBcunuHcuVOcu3SKi1fPcOnqWQ0Xrp7iwhWFk5y7fIKzl45x+vwhDafOH+TU + uf2cuI9jZ/Zy9Phu4Te7hNesaOm/j/03rJq4qzh5Yo+GY8dWtPV3VYTw9uVpFhbGmJ1RawEPsrS0RUvJ + rMze06f2c/rkPoEq72+fEu4m0MqTezhxWupy8gAn7+PECXktOP6/4JjUYxXKTL5vKh9Z4bDUSfsdossP + SalSOe85sKSZucsrMxp2CFZWZtm1a15LBb1TXius7BJOqdJC71/UoKKAt2sm8Ixm+m7fo14vsHPfEst7 + t7J11zRTi6NMLowwOT/KyOQgfcPdNLTWkCPtSJ+WSLIuFn1qAsYMHVmZOnKMCiky5ybJfBstGj2aspwo + 6gpjaK+Mp1e0+GhzKuNNOkbrUhirT2GqMY1tXbnsHSxlR1c+07V6enJD6csLZbQslomKeKaqk5mt0bG1 + Vsd8TQrTlTrGy+IZKIzSTGJlGo9VJXFoooanjs+w5pO/m4a/n+eP31YGcAX3Zvw42WLF4UpTjlRYcKzS + muPVjhypdmClxJKtBZuZytvMeJ4FowW29OfZ0pFtQUvaRhp0a2mSwbwl41E6C9Yx2WDHXIcrg9U2tOaZ + U6nfiCFkDTq/NWSEricvRohQigPVOieqhQA06ezpz3CVY3sxJSRqVMjCqBCnBSFYC0K4xmVw7UraKNhA + j24j/ambGDSYMJ5jsWoAF9myvdSOg7XunFUGsBK/E3pOtAYxY9zMQOwaBuMeYjx51QSelzrvyN7MkTI7 + GeRdud3jzb1+L+72OHFHJoqnRxx4ZtSBe0PW8tqS212WXGk05WzZeo7kPMQuGbwX1ABuWMOU8VFGMx9j + IHs93dkbZZAxoz3HnM5cS3oLbRktt2dLtS2z1eYsNpixq9WM472b+cKKJz++EsFvXk7i/Tf0fPRNHXzX + IMiCN/J458UifnRcx71BH3YX2tAc/BAlXmvI8XyY3IANQrgdqEnzFFLlKSTKmYJYB/JjrCmKt6M2zYOa + VCF30Tak+G0kyvVRIlzWE+q4kSARtaEiZCOFiMQGOBIX5EBssAORAbaEKlLvbkKA+3qCPDfKe8oAttYM + YF2ckEq9l2b+6lPUU4VeQjK9SU12J0GJUl8TfNzX/g8DWC107e1jo6Ud8fGx054+81eRj6EyMdyPAPb0 + tv+fBvD9NS0chNw4qzRJn0lT9GANYHc5phItmgHsrkSMfOYnx1MG8P0I4P/NALa1U9HGInJc5TvaE3XO + 2tN1an0Nzfi13bwKe1OpkzKAnfGVCU4ZwWo9DUWuFDxlIlT41AB2s5LfbamZv66uKgrTTkv/rNLyhga6 + ExHqrZnAyvzVIoCDPDQDWJm/nzWAtTWA4/01A1gn4ikxWq5ztIeWBjot0X/V+BUoE1jBmCYC2xClmb/Z + WQpR5OXEUFKUSHlJ0moEcHIAWfLd0gRPWqRtTKdYcKLMmdfGQvj5nmh+dyKcd457885RWynNeffkZt4/ + bs37R+z58KAbH+334pMDfnxy0I8PD3jx4REPPjntBZd84XoQH5/35e2jrvz7dme+127Js8bHOBu2hn0+ + a9gVtIkdETbs1ntzuDiWlfI4FiuSGC+Kpy7Zn2hXaXfKALZTBrA5vkKEg92ciPKVa+blQoiHPYFu1vi5 + yGfOZvLaimhpTylyXQ3ShrK9nChwF2Ei96JaUC/3osHLVov0rfM2p9pzE+Xu0m/c1lPjZaYZwF2BznQH + u9Id6kpzkBNVQtDLA2woCbQh38+GdHcL4m3XE2P5GEl2mzC4WlAY6EJpsIgmacOFgU6Uh7hRE+lDfUwA + jbFBgkAa44Jk8g+mXlAbF0BlrFzzGH+KY/ykT/qRKfumRPgQEyq/LciZQOmL3tJe3BxMcZPzeDubkiB1 + MiT4UWAIpyw7lrLMeM0AzkmMEEETgS4mmITIACJDvAgL9CDUX/qTCAr1MIKH9AV3d3MR7nIt5Tf7uz1M + lNwDY9TDDNQ4cHl/LH/1Wi6/+ccyPvpdNZ+8Vw4fFfHxB7l89F4e7/+mhP/6UQ3fvJXF8VEfWjPWYQx5 + iHj/x4gRwRUZYkVY6Gr0b1SUJ7HRXsTGeBAd5Up0tCuRUU6ERzkSEelIZLQzEeq1bIcJwiNdCY+QviC/ + L1iunTKA1YMU7i7Sxx3NcZX+7+FqSaCfLdHhLjxIAR0j340Is9UMYLUGcGSwjVw7Ff0rdQm00sq4KGkP + aq0gEbwttdF0N8fTLSK+r0UEfnscYz0yUQ7KBDmcytKogeVxI7tn8zm4UMzhxVKOLJRycLGcI9uqOLqt + gX2zNSwMFzHRlUlXbSJNpZFU5wdp6wdXFAVTVhJIUb6X9DknsjNFoBqtMaRbkqa3/LwBbBTxkOdOZYk7 + DZVutNW6MNLmyY6xQA7PhHJ6LoSL84FcnvXl6ow3N2a8uCPbd6f+pwH83EQgz24J5M6QN9cHPLg26CHz + nQ8vLEbz7HwkN0b9Od/tsWr+trtyqtubs31+nBchda4viDM9gZzs8teifR8YwE/OpmhRwFcGozjdHSTf + C+RQsze7a9zZWeXOrhovDjYHc7QjnGO9kRztCeVIbyD7Or1ZaXVjt/yW3W0+7Gj0YWuFi+C+ASyCcdUA + 9mCl1oudtd4sS7ks5VZl+tZ4CFG5bwDX+wmx8WO00oOeEkd6SlfRVeZEr+wzUu/LRJM/0y3BLHZFsn80 + hWNTGRwc0WkG8GSlD4tNYezpjmNXR9SnUb/KAN7eGsK2plAWGgLkXHKczxjA3VmOdBrt6Mx0FELlTp/w + j4ECD3rzXYRkOdNX6MxAiZuWfnpQxsoBqc+Y/K6dw7GcWsrmxFIuO0eSGW8JpbPCl8psB7JTNpMSvQ5d + 7EYZv83ISLYiUyftQ2AQZKQ5kJ7uQGqqMoAtZfy2Ij/DhfJsmbdzvGhSEcBGL3qMngzn+rCl0Jf5igC2 + lnozW+TCfJEzSyVObC20YzzTnJ7kDTTHraM+dj11cRtkzDHRMqvUJZpTkyT8K8WccmmTpakqFbUVZUYb + 6grcaC6Xvl3pR1OJFwXymap3hs5c5ncRubrNQl43k5ZmQVa6hYw56ylP3UyHXI+xGl+mmkMZqg2gudCV + Ar2I4ch1xIc/Jn3zIUKE60WEryFOeFdq8hrpA49RnL6RyjRTajNMaRD+1ax7hF79w8xmP8KB4se4Xb+J + 1zo381eD1vxs3Il/mgvm5wuxfHcqnpeH4oWHpXKkKYXFaiHI5fF0lUfTXBZOdUEgJXK9jMInVX9L/V8M + 4JZke+GPtozo7ZhOtWVHqsxFOiv2JWxmX4wJh++bv8oE/qwBrKJ/l+NN2Z5grmFHogXLcebMyj4zgtnY + zcwnWYuwc2F7tjKA3ZhLt2dKjj+jt2Ex1Y7lNHv2ZDizV7Bf7v1hvRWXZbx4qlT6tdyDU7muLOps6Qk3 + o+G+AVwc70GpPphKZQBnRFGcFkpuij+56o9U2e4uTmG4PI3BIp202yS6jLF0GSLoS4tgiy6QvfGenI52 + 4nykHdfCrXk80ooX4uz4Yoo9X5Br8FyqFXdTTFcN4Ph1nItfy4XE9VyVe35DeMFN+V23I0x5MnIzT4eu + GsAvB63jFbUGcNh6vidt7Ec6S35msONnGbb8XbotP5bXf5Voyrfj1vP1+A28Lpz9a3oTvqTfxKvpJrwm + XPy1HEteFn78cokNT5XYccpgznzUJlq9pI0IX8wXjpcb7o8+OoLwsBCCAv3x9fEg0N+b0BBf7UnaiIgg + 0tOShNvkUFmeR7EIdIM+ljRdJPk5SdSrtW6bC+jrLmdyoonF+S5BN9NbmunvKaOjpZAtI03s3DbIgT1T + nD6+nSfvnuXNr7/ET374Bt//9he5fO4AO5fGOHtiF6+9fJef/fib/Psv/5bf//bn/Nd//Ix//acf8IPv + foknbp9jWcRfeZGBJJn7Y8J8iZN5OToigCj5HVFqjf7oEM0ATlEpn3WJpOqTNBjSUmS+0JFh0H/GAI5f + NYCTVHpcVcYLYu4bwOFkZMRSXZlNW0spTfUF1FZmaU/6V5caqCrUU56XTGFmLDmpEZRkxtFYbpD5r4Ce + 5myaq1Pk81CKMrypyPWloyyEicZ4tnekcag3izPDBVyfquTWjGC+gptzgoVyrm0t0XBlrpBLM/lcmMri + 4kwO52cFc7mcmc3m+JZMGYvTOTyayYkteZybLeDCbCEXZ4ukVCawvDeVz5F+A4v1kYwW+TAiGCr0Ybg0 + gMWORLb1JLN9UM/+yRxOzhVwWubmc9PFXJwq5tJ0iYbLc6VcVusMS/129WWw0J7CXJuebX058r1yji7W + cGlvC7ePdfDM2W6eOdXC5R0F7O+P5lBfNHcWc/jasTJ+eD6fn1ww8A9nDfzL+UzeulLAH64W8LvLefzm + gpFfn0vnV2f0/NvZRH59OobfngznrROh/PFkGO+djOCDk9F8eCqGD87E8s65KN46G8p/nAvg34UD/8d5 + H353KZB3r4bypxuxcCOJjy4l8cHFZD66kMwnUnJZ9N7FFD46G6dFFP/hTBLvXMjgw6t5glzePWfk7ZNp + vH1KJ58na+mm31Pm74kwfn9c6nEiirfPxPFHef8P5/T89kwqvzln4JcnDPxwVxLf3Z7B12R++sJiLk9v + K+D2zjLOrwi32V7Jrm2VLMj1m52rYni0lObWTKpq0zGKblAGsK2jGRY2m7Cw2qSZv6sG8KbPGMCPYGr9 + sOiuzYTGeJFZqKOoOpfsEiPZRdmUqWiFsRHGZma0dXmbO7to6eiiobWNvKISklPTpD3riU9OIT5Fhy4t + nZz8Ajp6eljes4fjZ89x/Nw5xubnyK+qQpeTS3F9PY19/QxOzzC1vEz3yAgltTVkFBbIeYtp6OpgYusc + Ow4eEOynZ3SEvIoKYpOT8QoKws7V5f/BADYR/anMX7X+rzKAFT5rAFt+Bv8/GMDKaPO1/Qz+pwHs6mMp + sLqfCtpWM4BDYpwJFR0eFu9AWMKqAZxg8MJYGEpWcaQggqySKM0AjknxIipJuLnOh7hUf1IyQ8nIjyWr + KIHCcj2FZXpyi5PJzIsjJT1EM4BVFLCWCjrWiziZZ5QBbJA5Jb8gUUsBXVeXQ3GJTjhBsIxfoj11/iQn + +5KU6C2ll7znS1ZmiGYCK9NX7aPKrMwwaVuR5ObFUFScRHllGo1N+XTcX/+3rDwDg4xVygAuq8mhc6iB + gclO+iY65T630jbQTEtfC+2DnXSN9NI/PsTMtnl2yX0+c/k8Tzz/HK+/+SZf/eY3uXJbGcBL9I4Mauv9 + Nve2S1sYYGHnEicunObIqaMMTY5SUl9OjswdpQ0VtPZ30CYor68gQZck7TOZyupKdqzs4Oada9y6e4WL + V09w6MgOdquUiPvnOSZzxpmze7h0+TDnz+/n1MkVbY27vXvmtNSITz55ke9/7zW+//3XePa5a5yVfWa3 + DlJTny/XOQQ7exPpXxuxsTPF1l7gYKEZQP//NoBdBOqh+tX/TKTdqras2rS8/rMBrP5XscLFQ9qgh+hI + Zf66mIhG24i763o8PUSne5sS4m9BrOgug2iyynh32lJ8GEwPZDQ9gF7RbF3RbrTHetIe50ObtKt6aVe1 + sd505yUKfyxmeaCB40uDPHluF6/eOsFLVw7zwqVDfOnWSb569zyv3TrNK1dP8sL5I9w+tJOru5e4sDzL + 6fkJTs6OcWn7LNdWFrmwMMPZ+UmtvLpd9lnZxvRINw2NZZSVZVNSkiltLpf2znomJvtZWphgelTakjKA + hS9UCWfqyEtguCyVmfpMtrfnstyuZ6o2lIkKPybLRZsUewpEpxS5sVDswqJsLxZ5sVQseqZEdE+h16cG + 8GiGIyMqdbOgT153ZzrRkmZHXbIF5bGbKIneSEWsyppjSrFwqcLQtRSFrqM4fL1gLSUR6+SzTdQIf28Q + HtlmdKIr15OOXHcaM5yoEQ5ZkmJLbqJKaWyOUfhodpKNFv37WQPY8BkDOF22Mwxu0he9yM72Jk8ZwJke + n6IgU5nBrmSKLlHGr140i4YU0SfJ5sLjzUW7WIq2tiVP9FKJMoGzHSnLUaWdFg38Pw1gO2qEG9Zk2N83 + gGVfuQ7l+j8bwGXCR4uk7obwjaSGrEcfshF94AZSgk1WEWpKWoSl/E47jDHKAJa6hVuQHGz6OQM43t9E + g1oPWBdqJvuL5opVqZltyUpYLf9vDeD4/wcDOE3qpI6p0kon+K5frZPUIzZ4MxEBm6WvmBMgY7q3l8Db + AW8fF9x9nLU+rfq5naOlYHV5OrVMnZv7ZwxgZfh6ry5T9yBYRfsP0tvp01TQbu52WkSwp+rz8p4ygBXU + /5UhoT7/zQB2xNfbDh/p496eFgIzggJsiI12J1PG67riOHrL45iojGSuMoiVmgBONQdxucmXm80e3Glw + 5Ha1NU/W2/JCkz2vtDjyRpcrb/YrA1jKAcGgB18f8OIrg768OhjIE+1eXKhyYm/OZhb0a5lNfpSplEeY + Sn6ELSmiA9PWsavQhpONXlzrC+epyURentfz7GgkN1vdOFeykXMFD3G55CHu1K7llSF7Xh1z5OURR57p + FS3TtIkb1es0PNlkxmsDLnxt1I2vDLvyap/s2ysYcOCVAWee73XmRoMN1+rt5dju3G3z5KkOH57v8+Op + Ti+uiL6/2RrL9XYDx+uSmc8NozvZk8pwRwxyreJlHEz0Eo3vqwzgx7QI4Oksa840eXO7259rLe6crnLg + iMpKWunMUZX1qtGdA7XOmhG8vcScqcxHmM9ew8HKR7gt9f/SFle+PubGt0e9+dpIIHc7/ThW48XOUg+m + 8t2ZKApka0MKu4fKOTDXwYGlfvbvGOH4/hkundzO7SsHuHh6JzsWBuhoKCRTH06l6IHhvlqWFwbZszLN + rpVJVnYKdkxIOc22pXEGB5upqMjCmJFAhYyRygDWUuTumJPtHrJz01ldFtFXg0oBrf4vV/OJuzJ+A6Qt + qv/E/T9vAPtHqvV+vQkQhMT4EZ8WSYJaBiEhlPDYYFKMSeTJ/Nvc0cTC9nnuPX2Xv/7RX/HLX/+CP77z + Fh9//D5/+vgDPvnwfd7+3W/52x98n5efeYqTB/YzNTREbXERJUYDBaKbskQrZSfEki9aqUyvoyo1lRqd + TsZOPR2ZRrqyMujKNtKdm0VHVpqMp6nyfhrdst2dlaqVPdlp9OekMSC/tz8nXSsVBvMNGoYLMhjUoEzg + dLry0ujIT6NLdF9XSQZ9FfK+aLHBmmwGKjJoTg2jJc6f/qgAxkWvbo0JZ1nqtyNDz1JeBjNluYxX5jNS + XchATTHdtUW015XQ2VBJZ1M1XU11dDc30t3aRE9HG1Pjo+zcsciJk0e4cvUij9+7zZ27N7h+4zJXr13k + 6s2L3Lhzhdt3rwquyfYlDTcF126dl8/Pcena6VVcP8Xlz0Bxm0tXjmtLJpy/cERwlIuCC5/BpYvH/ozL + x7X3zp5VZu0eDh3aJu1pjuVtkyxsVemgpa47ZzWz+OyZA1w4f1hwRHDsPo7I8dVrVa6eS5374qWTcuxT + q7i0CvXeX8KDujyon3a8c4c5e0H42MWjnL98QnCcU+cPcfz0Pg4eW+Hg4QdppgX31wzep6WOXtSg0khr + awkf3qHhgPC9ffKdnfsXWVFRxQe3a9h7eKdwzyW271MpolVk8CzLK/Ms7ZhnQfjJlukRunpbaWyuEd5c + Rn2d8NzGajrkdUdLDd2CvpYqepuK6WnIp7de2kxDFuOt2cx05LDUV8hSTy4LHVlsbc9iuSObvQPFHJus + 1R5O29NbxHRtMtM1iTIm6FloSGWpWa0TbmSlLZOdLUYW6tOZrkxirCyO4ZJYJqqSmGlM48h0HU8en2LN + Jz+ahr+d5Q/fGOTv7lby+Iy/DFKbWSl6jO1569hfbM5RGcQOy6C9o8iaGRm4xzPNGMgwo8doIR3IipYM + S2p1G6lMXEtl0qPS6R6l3riezgIrekrtaMqxoDpNSE7yBgxhj5Aa+AgZYZvIk8m5QudMjd6VOiEszUJc + eoSgDGe5MprjypDBToikDWNCLkazbenVm9IW9yjt8Y9pBvCwSv+cuZnJXCtmC6yFfNnKoOrAgRoZeDuC + uT4cx+2xJI42+zMtde6JWUNP1BqGEx5mTDOB17I1YwN7iyw42+DEzV5v7slkdW/AjSeGnXlm3Jmnx514 + fMiWu/3WPN4r6LLihlyfs6WPcTDnIXZmPsSicQ1T6Q9JfR+m17hWrskG2rI305JtQWuuNW0FNvSpaOkK + K6aqzORGmbKrfTOnBi14dZcHP7sczltfSODDryfz8dcT4Fsp8O0M+Ho+H3+xjF9czObl6VAOybXsCnuY + Su81FHmtoTT4MdoyHOgu9KBT0JwlxCvVQWBHixC5/uJgevKDqNYJ4ROSEuexniiXDYQ4rCfQYQOhriZE + eZuTEGyPTia1xBBbYoTMh3uZECL7Bro9RqjnBqKFuCSEWpEUqQxgR1KT3NAlK7iSpvfUTGC9vJcQ/T8N + YLX+r2YCu5ni4WGBl4gLT09rrfQRkREQ5Ia/WhvAX4iMjzJeRfw4icAWPDCANRNYmcIqvYmIa1cR1Srt + hHrqyEOIjLuPCBVPZQCLsPa0FcGsUkO7rBrAQogc3f5SCmgbjWDZ26vz2WgGsJu7iCghXK5uDvKeiHY7 + c6ysTbC2UeLMTOompE3OqeqqCJTa9pIJUMHTQ61PZ/+pAezuLkJe6uoudfUUoeUj+/gK4QuQ74YGexAd + 6UdMlD8xET7Eq0jQ6ADi5b3YcG8NDwxgZf6mJgaSnhwopT9JIp4UdAm+ch9Wzd8HBrCK/s0xRpOXFUtO + dgxZxihtjSYVDVysnrguTCBDF4Qh3o/clCAqk/3pjHdkq/Szc3VCOKaj+PmeGN46Gsbbx7x4/6gd7x3b + zAfHzfjwmBXvH7Llw32ufLTPm08O+gsC+eiALx8d8YbTPnDJD64G8+EpP/5rtzu/mHLm9QoT7iQ+xKkA + ITl+a9gTvIGVaBv2p/twpCyWFcFWGZyGciMpE6EY5bxx1QC23YSX7Wb8HWwIc3cm1s+DCC9ngoXk+rlY + 4ekoQtRho5a2PMrXnhS538oAzhEyXCj3odrTkSYvJ9qEnHRIe+jwtaPVx4p6L1PqPEyo9TSlwduSRl9b + WuVeNkjbqxYyXCJts1AIcYG/LfmBdmT725PqbkWs7XqirR8jUQS7QV4XBLpRFOROQYCzbDtRHOqmRfkq + s7c+LpgGKRsTQ2lKCqNBUBcv1zsuQIRfwKcGsIoAVgZwnJClyGBXQlUUsGovTmba7wsUUq6P8SRXH0Rp + VhQVcl/LMmIp0Ms9VumfE8KlTwYQHeot33UlSAiYMn/95DertujqpgSECHf1pLaIdX/3h4mUsSMj4iF6 + y6w5vyOS77yUzW/+voqP3mrkT2/XCtGq5OMPivjo/QI++n0pf/j7Sn7wtIHzUyLkMx4lP3gNep9HSAwQ + URO6Gp0bFuZCRISrtGlX4mJciY91JiHejfh4F2LjXIiJlTLWVSujY5zuw5UoERoR4e6EhXqI8HDTDGA3 + tda2g7lmAru7WhAcaC/H8yQ5yYekBA+iIuzkOzZEhtsRE2lPbIQj0eEOUg9bwgItCQsyl9eWJCqRp5f7 + WhFCT2scg50i7LviGe2WSbA/gbkRPYvj6eyazmb/1gJO7arm0qEmrh1pE7Ry5Ug7V490ynYv5/Z1smem + iqmeTPqbkmktixCh66utn1Sa70NZsWwXuJMrgjc7y5ZMo5VmAOt1cv8SLVEpabUU0BmuFOe5UVXkTkO5 + K+21rsz0BbJrIoSDk0EcnQzg7JQvF6e8uDTpwZUJV25OenFrwodbowJlAA96ydzky9Nj/twb9eVarysX + u5y4KGJG7fPAAL45FsilPm9OdrhxqlPmwx4fzg8EcGkomIuDoZzvD+KUiJRTHX6c7wvmxngMT86n8PSC + nttbErgwEM6priAOiZjZU+PBPhkfDrUEcqwzkhPd0RzrjuBIVzDHegM5OqAgvKE/kOND4ext82dBrelb + oVJAu7EiwkeZv7vqPNld5yulHzul3F7nw0K1F/M1nkxXuTOtDOAGP+YaA5mo8ZY5878ZwBUqAtiXyeZg + ZlvDWJS6HBpP5cx8Dscm0tnWGs54uRdzdYHsbI9iR3skyy2hbGsOWUVLCIuNoczXB8r5/Bgt82SkxFPI + vCudmfa0GaxpNwoHyXGhO8+VXhFcPXkudOXKuQsExa4MlrkxUObMYIULE/XeLA9EsX+Ljn1TqWwbSmRE + jt9S6kupHMeYvJnk2I2kxJmSEm+mRfgakm008zddkKqzJTnFhhRBcpKVvLajKNuDijxvqnI8qc2UOd3o + TofRg75cb0bk/ZE8D+FCjowabZnItGUu14HZXDuG083pStpEfcw6GYfWUxW7gYo4E6qSLTSUJ5lTIijW + W1KUaiOwpdhoT1WeO/UlPjSV+VMnZYHMBZl6C9J05qQkm5GQZEZM/EYSEjdJezYlXc6Rq9+s/dHTKte6 + qy6I1kp/KuVa5chxE6M2Sl9ci5//GpnP1+AX8BBBoQ/L+PAwsVGPkB6/jnzhcaVpmylNWkdp9Bpak4Q/ + ZQufKtvA460WfLXPhh+O2PNPEx78ai6cX84n8NcTCXyxJ5a7XTpOt6Wxt8nAQqOByZZ0xtrS6alPpLE8 + nPJ8f219M6PeRer6mRTQ+lUDuDHBVvijFUPJ1kzqrVlKt2aH/N5diWbsjt3EgahVE1ilgV41gDdpBvD2 + +wbwtgRzDcuJFmyLs2Au0pTpiI1MyvemlAmss2dbhhsLgtlUe6Z0Nlq5nOHMvnwvjpVJHymRfpTvyfFs + Zy7kOHG31IebZb6cyHVne5oLg1FWNMk4VhVmT3G8p9yzYMozoig3RFEoc0FuvC/5sT7C88JEhKYIsRfB + WqSX9ppCZ3Yc7RmRdMpnI8kB7JLvn4x25pxwt6shltwNs+SFWFvNAH5RrsHTMkYpA/hmsglXkzZyKWkD + V5I3cUPu8W357Lb81sejN/OM4Dm5Js8Hr+cLIev4Uuh6viHX53sJZvwoxYKfpFrxkzQrLRr4b6Tdfydu + A9+MeYw34tbxNTnm63oTvpJuymsGM141mvFF0QQvipZ4vkDqlGfJwfj1jPg+TK3zGgqd1pHnYUNWiA+6 + qDCiIsOEMwUId/KSecKbCJXpItyf2OgQsjJSqCrNo76qiMqSHApyUinMFfFfZqStqYjernJGB2uYmWxh + aWsXO7b1MjelDOBS2pvy2DLawLatPezePszxg/Pcu3mCr3zhLt9+/QXe+NJTXDi1h52LY5w+upNXX7zD + 3/3oG/zqn/+Gt/797zX86hc/4qd/8w1ee/kep46u0N1eRWZ67H3z11+ra7j8jsgwf3kdJHNZFPrk+Pvp + nv9sAGd8agCnrBrASXHEJijTN54YtZ0cI9vRJKZEk5wcTqbwgJqKbFrqC6mrzJbfnk5lYarMLalUF+pl + DEmmNCeRfEOM9tBYfXEqbVUZtFTqqS6Kkr7vS0mGJ/WFvgzWhLGtW8/RkRzOjRVwdaKIu9PlPD5bzp25 + Um7NlXBzoZTrW0s0XJnL59J0Due3ZHBu0sgZhelMTk1ncWQik71DaewfNopIzeXi1mIuzgmmC7g4my/b + BVyYKeTooIzXTVGMFnszUR4guiiE6bpwlruTWRnUs3s0jQOTmRydMnJyKlPOkS3ny+HSRC6X5LhXtuRx + ZbKQC1uKODQgYrdTz7Z2Hcs9RvZK/Q8vVHJ+dwPXjzbz5Nl2njvdwq1dRZwaiefiaBwvLGfynaOF/MO5 + XP7lgoFfnzPwX5cyeedqHu9cy+UPl4z817k0fn0qmX87kcivTsbxnyeieetYOH84Gs67xyP54FgUHx6P + 5cMTsXxwKo53T8Xwx1ORvHU6lLfOBAsC+eOZEN49H8rHl6IFcXx8MZGPzifwpwtJcFFwSbTeBdF9Z+O0 + dNLvnknkvXN6PryQzgfn03n7RJKcL54/HIvl7eMxfKgZxdHyXgi/OxzM746E8vvjUqcTUYJY3joRz1un + kvjtiRT+7YieXxzO5G/3ZPHGDiMvym++uSj3aWsmu+V+bR3PZGoom/GhPPp7c2lty6S6Nk0z6QJCXLB1 + 2oyF9UbMLTdiar5BSwFtZrEJE4v1grWYWD6KidXDOLiZERDuRrIhGqO0wTTpf4bcNIqqSuga6mdibpbh + yQk6+no1NLW3U1BWSlpWJnpjBslpqSTqdaRIacjOpLapkcmFefYfO8L+48cYnp0mp6KcpMxMcisrqOns + oHt8jNH5OdoH+imsqiQtL1fOXUBtWzMTC3PsPHSAbXt3y+d95FaUkZCqwztYGcDObLazxkQZwFbmWFop + 81fBEiuVEloZwBZmGpQBbGkr+s/RFAdX0Z6i6ZyEUzsKHJSRK7B3sRCIjnwAV2sNDm6iR+9DbdsLr7UT + /Wj/wABWEVvqQeb7qXbdRJ+4+SrTdxUq9bMqXX2UCWyNh2x7BVgTGOFEaIwz4XHORCYI906w11JAJ6R7 + kp4XKNdA9F5xBLmiq3JVCuiMQKKTvIhO9iIhLVCL+s0r0VFYnkZFXRYVNUZKKtPJLVARr6sGcJIumDjR + lJEx8r04HxJFWxoy5Jj5CVTXZFIh+2dmyVgknFyt66vX+ZGY6EligqeMXd6kp/lrBnBWlkr9LLpV768Z + wLk5kXKMOM38rahMo6Exl/6BWgYH62luKZL35f5nxmHMTaKqUcbusTaGZ3oZmuqnf0sPveO9dI/2yL3v + p2digP6JEaaW5tl9+BDnrl3hqZde4o3vfI+vfONbXLp5h+nFBdr7emjp7qC1r5O+sUGWdi1z8sJpjp09 + wZat01S31lFcW0pNa71mKncN9VDZUEW8LpH4lASKyopY2r7E7cdvcPfJm5y9cJTtK3PMbB1jcXmCA4e3 + cebcfm7ePsPdx89z5dpxzqqImlO75P19PP/iTX78k2/yz7/4Ad/7wVf44itPcP7SIfqHmkhNj8ZRtSFH + CymtsbU3x9puM7aO8p6zMnztpI3Z4uAs7UhK9fp/GsDK+FXLYq2Wq2av/V8o5TvK+JVSGb9O9x9MsBON + Zeuyuja1tj61m7Rz7cEEe+3Bei0ltIelpiM9XE3xcN6Al8s6fFzX4e+5kSDvTUT6m5McZElmiA2VMS60 + JnoxlB7EhCGI/ngPuqNd6Yr1oCPOmy7hJG1JfsL5/OnKjGaiNovl3koOT7dzcfcYT5zcxr3jSzx+bImn + T+2QcXsXz5xa4enju3jiyHauy7U/vzjBiclBDo50s2+gjUOj3Rwd6+PAYBcHhjo5MtrHmalxTs9vYWGg + g8bKPPIy4oRzS9/ISqCutoChwSbmZ/qYHmqht6GQepkrK/VhNBki6c6NY7g0mcmqZLZUhYtOEN6tloAp + dmci35kt+U5M5TsyK5jPdxG4CdxZKPBkTvj5bK4Hk1kujBldGMkUzSDok9ddmU40pdlRLXy8LNaEEuGV + ZTFmlAiPKgxdR0HI2s/gMYrD1lEm/LMmYTP1+lUDuDPXk/ZsN+oNTlTpHShOsSUvSbhSgpWG7GRbcvSO + mt58YACnC9LSXUjVSlcMBnfRqJ5yLbxWDeAsTwpUKuisBwawWj7JQXSKWprGQnS3aAHRDilJm1dNYOGF + hlRr1HrABUY70cH2lGpGsB2VopWq85y1NNC12U6iYRypkX2qDbYCB6oM9lQo41q0jzKvy/TKCBYIb1ZR + wIawTSQHrCU5cB1JAY9Ju9ooUKmd1Xq6lhijbcmIspdtW1JF5ycHm5EUtIqEQBPi/DZpiA/YoKWF1lJH + C59Wxq+KAs6Kt8MYa6MZwKnaOr2rBnDcXzCA4+6XKhL4UwM4SBnAah1gZQaLpgsRja8gvFozgZUhHLKa + mlqlik4IMSM+bDPRDwxgP3P8vVRWNguBLe6eqs86S3+0l75np0X/q77v4CR931n6rbv6v9FDWyPY09tV + NNUq1LanjzKBV9M7K7NXg6c9Hiodr3pPbcuYoODj70pImC8BwZ74Brpr/1/6+jrh422Ht5c1np7Svz1M + 8fOxIjJC2ok+gMqCaLpKpI9WRLJUHc7++lAudkRwqyOYe20+PNnkyuM11jxVa82Ljfa80uzA653OfKPb + le/0u/HmkBffGvThq/0+fLHXmydbPbhU7cThQmu2GUyY0W1gImmt9l+8+k++P+4hhhIfZjrDhJUyR062 + BnJ7PJEX5lJ5fotov05PLpRt4nzhQ1wpXcPjdWt5sdeCLwza8vKAPU93ipZoNOVW9SZu15jwXJstX1aR + x8OefLHfmZe77Xmp157ne2Rf2b7T5sCFaitOlllxutKeS7UuXKtz51ajJzcbPLlc682Vhigu1CdzuDKO + rXnhdMs8WhHhSJqnCTHO64hxl7bmtZEMv3XURG5gLseW8y0+WsTyvS5fbrX7cbU1gAut/pxuFo3X4sXB + ehcO1Dqxv86eHSUmbMt7hAPlj3Kz05pXR915Y9STbw758OWBQG51BnCw2pOFQhfG89y0dciX2zM4OFnD + saVuTuwa4cS+LZw5PMflU8vcvLibs8cW2D7fS29rMYVZohPK0tky1MieHeMc3j/Pgb2z7N09zZ5dU7It + 86eUE+Pt1Fbny7yt5vh8xsa62abWR921lcGhLuGEes0ADg71J0x0TGCwr7QzZy3618PXGd9gDw3egS74 + BP7ZAA6IFM0W5U1wlI9mAMekhMncGi56Jkx0TTjJGYlkl2RTL/Pw9MIk129f4ZtvvsHPfv4T/v0/fsm7 + 7/yed//4Fr/7za/5p5/9LS89dY+zh/YzPzJMR3WVaJh0CkUz5ct8nZMYR25cDEVSVupTqE9XUb7ptBnS + 6MzMoDvLQG92Or05GZrR22VMpUczffVS6uRzHb2CgRz9pxgUHqswlJeuYThPXucrQzid/oJ0evLT6C5I + o6/EQF+5kcHKLIaqcxmrz2e0JpvW1HDaYv0ZiPRnMiKQbTHh7EyOZbdRz0pRFnuaKtjRUctSZz1buxqZ + 7mlgS28Tk/1tTCj0trNFuMuWgR4mRwZYXpjl0ME9XLx0ltt3rvPUU49z74lVE1i9vn33Onfv3eTJp2/z + 1NN3ePKZ2/dxi3tPXefxJ69x5/H7uHflz3j8MrcevyjlJTnGRTnWBW4Kbt06x83P4PbtC3/GrQvcuHGW + 69dPceHCYW1NXxVRu13azbalLSwtTWhm6uVLx2W/M1y7dnp1/xsX7uMs166f4eo1+UzK69fls5vnuSHH + vXVH6nHnsnCqq/J7rspvvP4X8bjUXeGu1F/hzm353q2Lwscurh5D3rt99/J94/sU5y8e5/z5o5w7d4Rz + 549w+tRBThzfx5HDKxw+tMIRBdk+emQ3R48Jju/h+Ml9HDsl+5zcu4pT+1dxcr9mKO8/soO9h7drJvH+ + g/JajqGwZ992tu9cYGFxmtnZMeamRliYHmd5bpwd8xPsFuyZHWVlup8dE50sjzSzPFQv2reevWN1HJlu + 5PBkHQdHK9k3VCZcp4SDUp6ZbeLiYjvn5po5PFLOvv5CdnXlrhq/ndkc6Bf9O1AquriUHa1ZbK1LZb4h + lUXRd8vdeewcKObUUhv3Tkyx5t03x3nvOxP89st9/Ph2BXdnZMBpMGMp/2HmjA+xu3Azx2TQPlLtys4i + O6azNjOcbkanfhNNyRtpTDUXcmJORdIGiuOEtMQ+TFniOqpln7oMK2oNFpQmm1AQt46c2LUYI9ZiELKT + GWFKXoy1fOZEpc5FjuFEsxCXrjRnBjKcGMh0YFBIQ1+aJb16Mzrk+E0xD9MUtYZWmSj6U9Wau5bM5FkL + +bJla4E1i4W27CyRgbXagxNtAVweiOLyYJRMXB5MGU3pjl1DZ+QaIaUPMZz0MGMpjzBjeIyd+SacrHPg + Ws/qGouPD7rx1Lgbz2xRcOHJUQeeGrbn2RFHXp5w5/lBF+62WMjksYkjxWtZkQF8On0Ng/o1dKc+THvG + epqzzGnMsqQx15bmfBu6imwYKNnMWPkmZms3sqPNlBMD5ry07MJPzgXxm+eieP/LIvC/EsknX4uFr+vh + 9Tw++UI5/3GjiK8uxXG8wp7hmMdoCnqYuuCHaYlfx1ixI5O1boxVqSglGzoyLWWws2W4yJvZumghsVG0 + Z/pSJMQpRch6jOtGgu3XEeiwnnA3ee2jnqyzI1sEZXq4NQl+pkR7rSfC/VFC3R4hUrZj/U1JFGKTHGWL + Ls4BXaITyQJdspBKnYdmAusSXUmMVimgTT9nALvLOZQB7OS8EVdXM9zcLARCgFS6WxEXXj4OePs6alAG + sLOI6AcG8IN1gFfTI62uC6wMYrW2hRI2ar0Bte6A2lZPVKunrV28hfQIufGSSWjVAF59cvbPWDWA7Z1s + tShgR0cR4i5qDQ0RVG5qjQ1HbftBBLCV9SasbUy0c6v0Kqqeq+bv/TqLoFLwFHGl8GANYA8PEfFSH/Xa + V/ZT67H6CeHy93cmLFTEeGyQXL8I0lIihGzHaEiJD9bM4FhlCt83gPUJARiSgzGkBAlUqmc/9CKeDKnB + Qu5DtRTQyvhVyEgNoyAnnsLcBHJk4s/MiBQBHqqZwIUiagpyYkmM8kAX40OeLpQaEfz9eg+Wc9242hbC + 17cm8A974njraATvHfPlo6OOfHjMQkozgQXvH7Thg73OfLhXGcABfHIgiD8dDORPx/zhrB9cEFwM5r0j + /vz7gjc/63fllZz1XI1YwzHvNRz0XcOeoLXsibXmcJYvR8ujhejFMFccRY9KGxZoQ4TDOgJs1+NjsxFv + GzMC7W2IdHMm3teTKG8Xgtxs8XGywNV+Iy7Shv08LYkUoZoc6KQZwLnShoqECNcLAW73daHPz5UBaQf9 + /k70+NnS4m1Ok6cZjV5SelvT6KMihEW8CAHPk+ManczIkraZ7WdPTpATWYHO6OVexsr5YmzXkehghsHT + lgIh0coEzg9w1lAkhEdF+NYnhFIXH6KVjcmRNKVEaaV6ryouiPLYQOmLvuRF+pIh91kX7kNiuJcWBRwZ + 5Eqo1N9PRLmfqwgGf1uMIpZLMkKpyI6iVO5ncWokhXplBMRgTBAyFeFPeJCQLekH/tK+AlU7EwHg4S5i + 381q9cltL1O8PDfh56H68xoRWWvoyDfjxGwQ33w6k9/8tJaPftvGx79v4k/v1/HRB+WCIj5+p4x3/6mU + v/tCKjcWnBjOeojyoDUYvR5G57eZuGAHooKdCQ1x0lIHRYY5EBvlQIKMESlJriQnu5KU6EZ8nKuGhHgF + ZQ67EBcriPEgJlLuq/z+cBEmKm21p/QZN2dLgblsWxAR7oouRfpAejB6nTdRUXYaYmMd5dhyjgQPkuLd + V1NDh1oTEWJOVJgpcdGbSRVhXCqCvKU2hIH2WIa6YxnpimK8L47Z4RQWx9PYO5/H8Z3lXD3Swt0zPTxx + rp/Hz/YK+rh7eoB7Z4e5cXyQQwu1TPdmMNyaRFtFmBalmZfuKILZmdICD0oLpS3kOZKTLfcsw1IzgHUi + lpXpl5poS6bOkVyDC4XZLlTku1Ar81R7jQszvQHsGAlgz4gfB0Z9ODHmyTmZY86POnNR5psro65cH/Xg + xrDX6hrAImjuirB6fNiHmwMeXOl25nyng2YAP74lgOcWInlqJoxb40FcGfTlbI+XhjO9vlwYDOTySIgg + jAsDygD25WSnj2YGXx+P4omtyTy7nMbjc8lcGorQooAPN/mIUPHiSIsImJ5ITsu1O90Xy/GucA53BXK8 + L5Cz42Fcno7m/JYoLk7FcaBTGcCOzJc7rBrAte4adtV6safen90qfXGtH9trfVms8Wa+2kuL/p1SawA3 + +LPYGsJMoz+D5S70lkm/LVeQbZV6ucaXLY1BzLYoAziKwxNpXFwq4NR0Jtvaw5mo8pJ5z5/l1nANS82h + LMj+GppC2NoQIp8HMVnpz0ipN8MlXgwUuNFutKVJuEarwY6uLCc6c5zpznXV0JnrKERf6lDkQk+xSkut + 1iUWMdbgK6Q9jG19USz1xzAv12WwIZSGYh8KMxxJTzQnKc5M2qcZCTEmJESbok9cNXoVkhKtiY+3ICHB + kuQklTJcxq5cb8rzvCnNdKdM2kutwZVmowfdOd70y2fdBqlXqg19emuG06yZynJgMstOti3pSjajNno9 + FdEbKIsRxJtSkWJNWYolRQmbyU8wJz/ZkgK9HQVy/oJ0B8qyXEXoe1JT7EdVsa/Wno1pNtrDC8lyvPh4 + EyIiH5M+9xiJSZvQJwtf0JmSI9ertMCVqlIfKkuEX+R6yBzmKL/TjIiwDfj4Poy7jDVevo/hq9YLD1hL + UMDDxEWuI1tvQYnBhiLhj0XRa2hJeZiZ/I0cqzXnmV5HvjHiwo+Fe/3rlB//MRvJv80k8YOhOJ5vChOR + HsnhugR21aknHtNZFOK7bbBY+mY2fc3JdDUl0VgRQWGmt/Q5ZzISHShIcqZK564ZwA3xNrTFWTKYZMUW + uYbzBisWUzeznGTCzviN7I3epBm/R8M3cThCGcAmbJf3lmNFqMeZsBS/WWDBNrlnqtwq48xMpCkT4RuZ + iDRhLsGGJb0z86nOzMg1nk6xZT5drQ3syfEqlU4sjvP10Zwu8+dkvidn89y5UerHNXl9It+b3VLv8XhH + WoIsqQ61pyTBi2KZp5UBXJYWIb8lgLwoLwpFWDeJkB7ITWGoSBnAqXTmy9iUE0ezzBPN+mD6En1ZjvPg + mIyN5yLsuRpsyd1QS16Os+dVnRMvKAM4xZx7us3c0ZlxK8WU6zoTbsr9vS3X5K60gXuJFjwda8FzMcJV + o8x4MXQDr4St53W5Rm/GmfKDJHPNAP5bnTk/TlWlJT9MMuNN4frfiH6U16X8WqLsrzfh9QxzviL89LUs + C76YY8WLeRa8UGjN3VxL9sWsZdBzDbUuD1HqJnpBOFRGoBdJEUFER4YSEuhLYIAXwYHeMs8IR4oKlH4V + Rr4I+frKIlrqyqmrKKS6LJf6qjxaG4robitjqL9aM3lnJptZnO9g13IfW6dbGOguob0xly3DtSzMqPcH + OXZglttXD/Ps42d5+ZkrvPj0Zc4c3cHK4piUu3jtxbv83Q+/wb/949/wX7/6ew2//pcf8/Offpdvf/0L + 3Ll+mm3zI9RW5JAic3NkmC9hwd4yN3rLvOQn81Kg9I9IUpMTMOiThbslyTiwagQrA1gZwempyVpa64Tk + WOIS44hNiiNamb/JUcSptf6FT+iFN+YY4rS1fpur86gtNWpP+VcW6Kgq1FFToKcqL4XK3GQZRxKpyEqg + Ji9JkEh1XjQlxgCK0j2oyvaiTfrueEMYewbSOT+Vz7WpYm5uKeTeZDH3pku4O1vErfkibmwt1nB9oZjL + c3lcnMyUcT+NU2OpHB9N5ajgyJiBvcMGtvfqWelTJnAW5+dLODdTxOmJbM5sWTVyT2/J4WCfTsbmSMbL + fWXMj2C5I55tnQnsHkxl37iBAxMZHJrK4PC4HF9wcjyds3L8iyMGLg1ncGU4U5DNxcFcTg1maSmld3Xp + 2dljYPeIHH9ORO7OKq4ereeJM828eKaFp/eVcnM2lWfnU3ljJZMfH83j387m8NvzBt5SZuslI+9eyeLt + yxn87rye3yjz92gsvzwcw6+PRPMbwe8OR/L2YdFq8v6HRwRH4/jgmOB4PO8dj+Pd4zG8fTyKd07KfifC + eU/w/ukIPjoXxYdno/nThQQ+PhfPJ+cThS8rEzgZzqfw8ZkE3j8VJ5DydJIgUbYT+f2RKH4v5/z94Qj+ + KLz8wzNqn2jZDuN3h4J5S/C7wyGyX5ggXCD7Hovhjyfi+OMpHb87mcG/Hs7gB3vTeG1nqtzLZI5tSWJp + II7xTpmvmhPpbdXR2ZpGW1smldU60oxh+AU7odarNbfewGbL1bTPZhar26ZW6zWYWD0meAR7t834hroS + lRRESmYcSRlx6DKTyS/Pp2ekn/kd25jbvsjw1DgDE6O093VTUlNJdnEB2YV5mumrzzAI0kk1plNSWa7t + t33fbpZ276JvfJzsslLi0tNIL8yntLGO1oE++rdM0NjVqaV+TsnKJC03hwr5bHzrDCuH9rO4e4WOwT4K + qyukTml4hwRiK1pis2iKTTYWWhSwhcDK6s+wsNz8GZhqBrCVcP4HUbuOrqIZlcmrzNxPsZq2V+G/R2w+ + gHpv9XMV3fkgm5WtcPNVuIsOcfdR5V+GZgD7W+Mf6kCwyqBz3wAOj7cnOsmJxDQP9Fl+GAvCyC0RfVCR + QHFlErnFcSSm+hOV4EmCPoCcwiSKytMpq86irrmABkFNfQ4FxSmaAZyklhSSeUaV0XG+GhKVvsyIIDsv + nsqqdIpLZIzSBxInc0tKso9mAKvIX838TQ8Q/hv0KdTrNDm/MoDzcqMpLpVxqcpAU7O0jb5K5tT6uTPd + dHaWUyRzWGa2aFcZy+rbKhia7GFi67BglNH5MUbmxhmeHWNwdlwwwfDMFqa2LbDv+DEu3r7FM698kTe+ + +z1ee+MbnL92Q4s8r21p0tDU1UbnQA8zS3McOnmEA8cPa+mgq5vrKK0pp769id7RAbqH+6hoqCImOY6o + +Ghyi/KY3zbPzTvXufPETY4c38/41BDdA20MTXSzuGMLB48sc+nKMW7fPc+1m6c4e/4gZy/s5+qN47z4 + xTv89B++w29//0/88tc/4a9/+AbPv3SbmblBMrOStagpP9Fv/kHewpeccHjQlpxUm1Em0Op/FapU/12o + LGafN4BVFNZn8flI3wflA6jsaOp/EhWlrqLRVR9Xxq+1k6kG9UCDMoCV+eshcJd52N3TCk83c3xcTPFx + Xo+/yzqCPTYQ7m1CpI8y28xJF76SE2JNZZQTLdIuhlIDNAN4INGLbuEf3fJeV7wXvaLleqTt9KaH0JsZ + wZaqNFZ6yzg03sARmaMvLA9waecQl3cIdo5wdecY13aOc33nJNfkWl9aGOPElh4O9Leys6OOba0VgkpB + NYtNlSy1VMo80MiJ0T7RBMPsGe6muyKX3JRQ4RIe2v8klaWp2hIQcxOtTA3UMdhUSEtBMrWpYTQIOoyR + 9OXHMVgYQb9wtP4CJwbyHRkSDIu+G8myZTzbhi1ZNsK/7ZnJdhK4MJvjykyWG9OZbsLJXRkzujKc4Ux/ + hmgXowsdGU40ptlSJbqwVLhkiRYFbEJR+Abygx/7H1BRwWXCP2tEQ9brbGmTY3R/xgCu1DlQJPyyIFmZ + wGq9WztyUuzJ0TtpBrBR76gZwGnCRVPTVqEigdMNHhgNnmRlemoGsIIygDUT+H4ksOLy6XLspHhzEuM2 + k5y4CqVplTYw6K1W1wMWHp9nsKU4y5GybAdtTeDqPBdqcgXZztSIlqrSon7tqBS9UZFmT6nengLRPgWi + hUpT7CjT2WsGsNo2RpiS5L+WxIDHSPB/lKTADZpBq4xaQ4QVGZG2Utppy92lhVlp6Z4fICFQdL/fxlWI + 5lhdE3izli5aGcA5iXJtBGrbEG35OQM43nfd/zCAH2wrAzgpQBm/qybwqhG8WYM+WK6H4EEUsCpTQsxJ + CTWT41tKm7MgPtyCKM0AtiDI10L7z8rDzRJXF2vcVB/2VJkKHQVOOLk5aHDV1ld1lf7ngo+/p4wTHnj4 + uH0Kdy9Xrb+r6F4PTznGAwNY+ruHj5MGta0eDFHbPoFuBIcLhw7zIUCtOxzgpgWyqIyMvr4qVbSFlqXR + x8eK0BAH0aN+lPx/OPvr+Eiy8+wbn8VhMTMzt6QWtNRSt5iZmZlGMCONRsPMzMywAzvLTF7wmhJDHHMM + cZIndgyxvabv7z6lmdldx3l/7/v8cX1OVXV1VXXVgevqq+775MbQURjDijIdG+rj2NsSy/meOG71RnGn + M5h7Ld7crrPnbo0NLzQ48FqzE+90uPJelztfHPDm45FA3h3w59VeP+62eXKm3I59uVZsMi9jJnUJUylL + GTUsYkTQl/AEHTEL6BQ9OJD0lLQra7ZUeXF2IJbbU0ncG4/leqcPZyqWcbrkcS5ULOBWw1Ny3MU83yM6 + otueO63W3GwU3SI68najPS/3evPmcCCvDfjwbKcTd9rteabdjmstNpxrsOR4tTX7ii3Ykr2ELVmi91Tk + cYkLRwXHit04UurNoZIgdheFsyk/XNp2GB1J3hRHOGDwWkKM61NEeixE572Q9MCF1OmWsq7IlfOdITw3 + FsWLI5E8P6zj7nA8V/uiOdEayIFGT3bVuLCnwZUjHV4cbHZmR/lS9lct4apc4yvDfrw9EsC7/QG81B3E + hXY1t7j0J/kujBV4sao2hp0jRRxd18bxrQOc2jPJyX2rOLl/NWcOznHm0Br2bh1jdqKV/o5iqmRcb67N + Yma8nX3bpzl6cD0H986xd+eMZgTv37uO3TtXM72yh+bGEvJFNzQ1lWpzuKp0vpu3ztE/2IkpM0XGKF8i + VCajhChtblO/IKmHqn6p/xzDfQiJ8scv1EMgY1qEF8FRsi3al9AYP8J1AUTEBgpvCSYuMZzElCiSjbHC + TeLJyDdR3VjJyOSQNoftvfs3ee+9t/jm17/Gj3/4PX74nW/xja9+kXdffYGzB/eyfnyUvrpaanKzKBId + VSz6qdiYJH1hIkVJCZQZEqQvT6E100yXcMvuLDM9styXY2ZARfg+QH9WmoxBafRmpWjoEwwIbx3MSdEw + lJvKcF7a/8Bg/jwGCuT7CoWyXGpmsCKT4aocRmtEVzYUMlGXR0daNB1xQQxHBzEdHcKm+Gi2p8SzM8vI + ztJcDnTXs3eolZ3DHWwb6WLTii42KPN9oo+58V7mRvtYt2KIDStXsHFmkh2b13Ho4G7OXzjJ1Wvn501f + wdVrF+eXpbxx84pm/j57/xbPvXD7AW7x7HPXuffsde7eu6F9fufuVZ65c0XDrduXBBe4ffey4BJ37l2S + 7Re1bTefOc+NW+c03Lp5QcPNG+c13Lgh226d58KFI+zfv1mbP1fNo6uigJURfOjQNtnnDHfkWDe1fZVp + e1mDMnaVyXv12jyuKcNW9rl+U479zEWekWu6d19+x3M3tOv/e7j//E0Nah8F9Ztuy+9RuHNXYX79qhxT + RUJfVebw5dMarl45zYXzxzl18iBHVErpgzs58gCHhecdPizLx/Zw/MQ+jp86+CCa+FMcPy3fO7Gbw8fl + u4Ijf5O++uixvfLdgxw7up/DB3ZwZN82TuzfKe1UuOHh3Vw8uINzezdzaudajm2Z5vD6MQ7PDXF87SDH + 5/o4s3GA0+v7OTHbwaEp4UdjNRxYUc3ZtR1c3TYkGOTSpl5Orm5lz0gFW3oK2DFQwqEVtZxY2cSJ6Wb2 + DJaxtTOPnbL94Mp6jqxp49iGbq4cmOS5cxtZ8KPn2vjJS1384G4LXzpTxLXpEHZLJ7q+6Cnmcp9gR6kN + h+s9OFjvy7YyNyE3NgymWdFmWEptwkKqE5dRlbycsoQlFMU/RbGgVJbLUyypFKJQKqQhP24xmVGPkxH5 + BBlRC8mKWUqOzpLC2PlUxeWJztQkOdCk0vOZXBgwCzIcGDLbMWCyplcGChX12yQDRHP0Ajr0jzEqg8hs + kRPrSl2k03VmXbEj60tUfn13dlZ7sb/Zn+M94RzukkZX6cJExlJ6Ex6jSwaYPv0ChgyPM5b6OCvNT7E+ + bxH7au053eXB5X4vrg158IwygKe8uL/Km/tTHjw/6cGrq3x4dy6Ud2aCeXXUm7v90tk3WbG3bBGzmQsY + UQZw6gLa05+mKdOChmxb6vMcaS5wlIHUlp7CZQyVLhLSu5B1zYvZ17OEOzOOfOWAHz++LmL++XB+83IY + n7wWxZ/fTOYvr2fxh+dL+PnFfN5ZH8+RGmdWGZcymLiY4ZQlrCywYX2DOxvbPFjT6MREmZV0Wsulk7Jj + VbkvG5vj2SACf6gojOokd0wqlbPnUiKcFmppoOP9hMQImSkQEVmd7kV5sgtZkULygpeS7LcQvd+T6P0X + CsFfSpJsT4m1xxDvhEH2TxKkJLlqBrBCSqIbSXHORMg5PjsHsJp/VBnAzi4LcXVdipuIDTc3lU7IGi8v + GyEt9hq8fEQIS/kwAvih4asM4M9CffbQAPb2E6IjA5C7EB/1lrUS6WruX2X+KqjlvxXinzWAnd3mzd95 + 41cIkxb9+9AElmO62j5IzaSif23xUhG+f2MAK4P3oemr8HD5oSGsTN/gYHfCQr0IFYSFeRETHYAhMQKT + MY68zERKZRBRUJEjygTWxwSgj/LVDOD05FCyjJFkiCDPSgsnQ5BljqIgN05DToZOvhetIS8rjlIRMgp5 + uXrNADaJqDeZIsgVUZNrjhYy6iHP0Zc8YwR1GVGMZAezVUjOpc4Y3ltj4Ls7kvivQ3H86XAwfz7ozl8P + 2PKnfcv5415LPtllxx+2u/LHnT6wNwT2hMO+CDgs5YlQ/noskL8cDebX2/35yZQf3+zw4AXTU5wJXcB+ + 7wXs9lvAjtAn2ZPswJGCIA5V6tharmO6MEr6E18y/S2IdHiSILunNQPY396CMGc74jzdpS56o/PxINTd + Hl+pB+7OS3B3WYy/txVRgVIfQ1wxPTCAS32caPYXsRTkxUiwD+MisFcIAR4KcaErwJ5WP2uahYQ3+thT + L8+o2suRQqkLmc4iZKXOmaUeZga6kBPuQXaoJ0YRzQkuy9A7LSbZ1YoMecZF8iwV8qSeKRTJ86rUh1Cf + HEldUqSUUTSlxNKaGkezIVZEXCRVcWGUx4VQrAukICZI+kF5voIUIeZJKuo7wo84OWa4nC/c1w59uBsF + IpYrs6OpFjJeYoqkKDWSwpRoClJ0mOU8+qhAIoO9NPNXGb/KAFbLWgSwl502d5O3n4VmAAd5PSH3cAGm + cOlHMxcLkfTmnetm/uMbDfz533v48y86+MvvmvjTH6r50yel/PX35fz+xyX88K10nt3hzZrSJ6gPW0Ce + 7wKMcsyEYGd0ct8jQ10EKiWzA7HRDiSIwEo1uIlQdCcl2V36CukbEtylzntKnyH1L9GLZL2H9BcqnbmK + dvfXXnqIlOcU7C/tSe6/n/QNAX52cixfsjKjyM+LITMjGL3ehYREV1JSvKRe+0kdDybTFEJ6qtxDvTvx + MXboIpfJdSzFoJdnZbSjrMCDtrpQelsjGeqMYkxEzKrBJObGjOxaU8DRrVWaAXz1SNcjXD/aw41jA9w5 + PSblMIc3N7J2NJfJrlQ6qyMozXIj22BDjhy/ONeViiIPigvdREyLiM2wwZSmon9FLMo1pD8wgHPSXUVc + S/3MdaZaxq42GZdWtHkz0+3Fhn5vtg95s2/Yk6Oj7hwfdubUkCNnh2WMGfbQUjxfGvTSTN/LA14yTnly + odedc71unO5x4dyAh2YAq/l/n1kZzrWJMC6NBnNuOJgzA4GcVOmfB2VdM4BVBHAwR7r9BL7a9ksT0Tyz + Jon7G9O4NZss+0Sh5go+2BaomcBHusI4Oajj1EgCJ4fiONwbwYGuIA6ruXmm47ixIZXLc8mcWRXPrk4/ + 5qodWVvlyKYadzbXeAq82VKrIoAD2VoX+L8awCoF9AZ5RnPt4UKkvemvVMbvvPmrMFTlx5h8d2VzGHPS + ZykD+NzGEk6szmVTt44pOeZMQzBrW8JR5u+aplBW1wfPoyFMynBW1YUxURnMSKk/wyU+2hy/bWZbGoSv + tKTb05npTIdKCZ3jpqFTnm93gRs9RbIuXKOnxJWhSg/G6/1Y1RbCbFcEM11RrOzSMdAQRX1xAAVmGRsT + bUiOtyRRb0FczBKpk4uljlqTmmxPisFe6rYNcXEW6OOtNAM4Q+pHYa6PFgWcb5K2n+pEeZor9ZmedOUH + 0JPvT5fZnY5UB7pTHBhOc2Qi25XJHFdGMxyFe9hSo8xf3SJKpSyV85YbbCmRelogy7l6S3ITbclXfxip + SAE5TqGcsyTbg4p8XyoK1ZxgHmSanWRMt8VgsCQ+finh4Y8REbFAlheSmLCUBOF36jOz2ZG8PA8K8n3I + zfFCpZpLTLAlOmo5/gFP4eX7BL7+SwgItMAvcBlBIpLjopfIeGZPcYYTRSnLhCs+SWfGYubKrDne5syL + Y/58aWUQ35sN4Wezkfx8VSw/mkzio95YrlYEsEvuz9q8ICZyQhkpiGKm2cymkXI2jpcz1Z/Lir5szQSu + LA4nz+RF5v9iAA8m2TCeZseM2Zo1JkvmhE9tEF61VYsCnjd/lRG8VbeM9XFLNfN3fbyFZvo+NIAV1sqx + VsdZsTJqKRPRy1gdb89csjOrU4SrpTgxk+rM2gxPthcHcqQ+lnMdKZxpSeRETQSHi/05VujDhQppQ9Kn + HCsNY09BKNOpPnRG2FMd4SCczJ9ScyQVmdGUCg8oTAggL8qLkkhvWmWsGcxOZqTISH+JkfaCRBpzYmVc + j6Q2JZBOvQ+zsZ7s0blyMsqZi+G23I6y4zXpk9+Se/Oi0ZFnU2y4Y7TmGeH0zxituKGMX8EtWX4m1Yo7 + ydbclzrzvPzGlxXkd74h9+UDqddfTbLmGym2mun7Ldn/bw3gL+ie4J3YpzQD+L205Xwhy5Z38ux5S/B6 + gT2vFAnKnblb7MRBwzImQ5+mTepLrb8dpTKOZYf5kxITJm0nkkg152+oHxFhftKOgrUX6IzJ0dK3Z2rm + b1dLLS11pTTXFdHWVEJPRzmDvVWMDdeycqKZ1atUBHAX2zcNsna6naHeMjqbcxkfqmZ2qo3N6wbYt2NS + S5928fROrl/Yz/WLBzm0Z51mAJ88uJ03X3qGf/rae/zsB//If/70u/yfn36Hf/vJP/Hj7/8D//iVt3nx + 3mUO79vESH+LcLREGQ/9NANYi1iOCNIM4ITYKFKTVDRS8rwBbEjEKDAZDY9M4dQUPckpcSQa4tBLGaeZ + v9EkyvPWXhpMiibfnEBDWSYtlTnS35ipLkilRlBbYBCkUJebQq2gOsdAdXaSlAlUZccL5J6ZAqnK8qel + OEj61GCmmyPZNWDk9EQul1cWcX2igJsThTKeyPKqAq6sLuTymiINl+aKNAP49GQGx1YYOTCYwp7+JLb1 + JbGpL1n65GRWtuiZbktkXbeR/eP57BvN1o6/U/bZ2WdgZ38qW7oTmGuJYXVTNFtlffdYJjtGTOybyuXA + TL4gj4Mz2SJ8zRyeTOfYpImT4ybOjZm4MGLm0nCmIJvzg9kyTmZxqF++O2Bm96AyoTPYszKPIxtKuLS/ + lrvHGnnlRDMv7avgxc2ipbbk8A+7c/nBoVz+82QOvz5l5ren0vnv02Z+d1aWT6fxi+MG/u1gPD/eHcWP + d0byr7uj+ffdMfxyVzT/vVvHJ3vjhRPH88k+ZQQn8IcDDxHP7/fH8oeDggOxfHJIxx8Px/Kn4/P4y8kE + DZxM0vDXUwb+csLAn44l8MkROd7hBP54JFGLKFb4zf4Yfrs/WhDFfx+M5s/H9fzxWLwWgfxr4d6/2huu + QS0r/GZ/JL89EM3v1PmPJvPJCRP/eSSd7+xP5wvbjaLv49g7FMV0ezD9tUG0lYXQWCH9RVUs1TVJ5BdL + vTMG4xfqhJOnFdYOS7C0X8oym0VYKDNYli2EmyssE56+3OFpnH2s8Y/0IDpJ+Fl6NLGpUehFy+SU5TC8 + cpSt+3ewbf8uZjetY3J2hv6xYWpaGiiuLqe4soy84kKyVARvXg7pWRkUlBZrkcKzGzewcm4tXUMj5JSU + oTOkkJxpJqe8lNr2VjqHBuU4rWQVFJFkMpOamUVZTQ0rZqbZtnePZh73jg5TXl+HMTsL//AwbQ5gK0dH + ltvZagawpZTKBH4IK9tPDWAr2+VYO1pgq6Yg8nTAVTj1Qx35WdP3s/h/awAr83ceall0q2YAf2oCeweo + KY5EQwaIrhR94xfsKHAgINSR4EgnImJdidIrA9hFM4AT07xIyfTXDOD8sjhKqpOpqE+jqsFMZn4M8QZ/ + 6UuEK+clUFRuorohn+aOUjqlj2yVsqzSRLqMMUaT8Oxs6Z8yYqX/CSVBmfoy7qSJ5lRzQ5eVp1JYlCDb + gtAnegtv8dcifNPSAjWzNyszTIPZHCIcOEgzf1UUcFZmBIUFcdTUmmlpK2RgsIaVqzrYsnWCDRvHGB5p + oroqmzzpwwrLZJ/uWsZXDzGzcYrZzdPMbpllzda1zGxdp2F6y3pmNq9nzfZuOnGSAAD/9ElEQVQt7Dt5 + nEu3b3P/jdd5+4tf5KW33+bImTMMTUxQXletoVbqW3NXGyNTY2zcsZkNgsHxEaoaayitKaehvUnqyiDd + w31SX6rQJcXJ/Y2RepnNytlVnFPpFS+fYaOcu72nRe5tMfVtVQyMdrB63Rh79m/k2Ok9nDizlwMqDfSR + TZw6t4cXXrnGP33vY/7rdz/hl7/9Md/5/ld48+37bN66morKPOnXo0gx6UnPUPNgxxIWGSjP3AMXN2l/ + KhLw/9IAfoj/zQCej/611SKAHd0scXC1wN5luZzTSvazl7qnXrB3wU/0tL+sB3nbEOJhIfp7MZEei4nz + U6aZBUmByzEGC68UblEsnKU2xpU2vfB00WMr5NkPGfzoFa3XK9qvV+rLQGoQA2khDJjCGZA6MVWZwuau + InYNVbFjsJI9Y3XsW9Eg40YD+8abODDezMHxVhkDOjgy2cnBsXYZQ+rZ0FrBTE0BU1JnNFSKNqvIYaIi + m7XNZRwYaufo1AC7hjsYKM8kPzGQ5HDh5KInK/Lj6GvNZ2a0nplBqWdtRfSVC3/K0tGcHk6HOZyenCj6 + coPpznajO8uB3iw7Df3CFwdMVgybrBkx27Aiw55J4d5Tma6szHJlKsOdKeHoE5kejJndGBIe329ypUf0 + QLvZRUvlrAzg0oRlFMcvplh0QcH/iP59WosILhOeVSX6oD7ZliajEx1Z6oXUeQO4Uc5TbXShRDhmUYqj + hgLhnPmCvFRXzQRWmlNpCmUAP4TJ5IEp3YsMk7doZy9ys7015GfNIy/TS0NmmrP2ArUyfxOE9yYnipb9 + jAGszF+F7HRb0bW2FGU5UyqaqUK0UnWum2YAV4suqZbtlaITqtKd5lM9y+8oFu2TG29NrvBJFfVbYXTW + TOAy4crZOitSQxdp5m9ioDKBF2nplJVRqwJUTFHK+LUnXepamtQ5ZbY+NIBVFLBK//zQAE4IFp0Stlwz + YpXpmye8XOGhAWyMsvy7BvBDxPkufGQC/28GsAY59+cM4EjReNFyn2LsMOjsSIyxJTbcmqhQG4L9rLT/ + rHy8VIZAR7y83TQz18PXXaDmAnbX4O3rjbefNz7+ntIOvTR8avzO7+fh7Srflz7AS9q2l8M8fGQM8XPB + U+GBAewb6E5QmA/h0YFE6IKJiAnS0kGHRXgTFuZBaKgLwcHOotlsBXYEhziIJvUTjhlOU3YEw0XRrKnR + satF9EtPPDc0AziEZ9t8udfgxO0qK56rs9UM4LfaXfhCtwcfD/rx8UgQb/T68Vy7F1dqnDiQI3oqbZFo + rUWsNCxh3LCUYcNi+kUfdMY/QXPUAhpFZ7brHqPfIPvk2HCgOZCLA1HcGAjncqsHp6uWcLrsMS5ULeBW + 05PcblnInbblUopuabDgZqMNtxsdeb7Dk9eHgnltKIjnOj241mDDhVoLTlcv5WjZQvYWPcW2vKdZZ36K + qcTHmUx4nHVpcn0mC4ElW9Nt2JbhwOYMN9aavZky+kif5iv60Z3sEGviPRcT4fY0Qa5PEun5JEbRu7Wi + G9eXeHK5L4rXViXy1nQib04l8+K4Qa5fx/HmAHZUOLCl1I7d9aLJ+gI41ePLIbne4432XJf79tJAIK8P + BPNKZwC3mv04XO/DdKGT9JX2DIjWnhXtuG9VFae393Fm9win9k1xYu8UR/cIdk2yd/MQ61a2MtJTRntj + NrUyXnc05bJ2VTdH9q7l9PGtnDi8iUP71rJ/zxyHDmxkn5SzM/10tKlU+Vl0dtYwMz2szZ++cdMa+gY6 + MGelEio6JjpeZQmJJS4xmsAwX6mzUsfUf49/xwB+GAX80ABWiIoTHaQPFW4RSbJRR2KKjhTRSoXlebR3 + N2upc/cJX7x44Qwvv3if9956nTdffp77t65y6cRhds1OM9baRFNBHuWmVM38LRGUpiZSmqLM30SqREM1 + mY10ZJvpzcnU0JelUjqbGcpJ/xz6s41a1G9fdgoDgqFsg2w3MJKbykheKqOfwbCGNIY+YwQrE1hhsMTE + kPCWkcpsRqtEV9blM16dQ5cxmi75zaNRAcxGh7IlPoZdcp17stPZW5bH/s5a9gw0y/jXxnYZqzaNdbBx + rIsN492sm+hl08Qg22cm2LtuVp7tOg7s3MrhA7s4dfIQZ86o1MgnHkHNBXzu/CkuXz7PrWeuaEbvc89/ + 1gC+wb1nb3xqAN+5xjO3rwiuckvK23cuc/fZa9y7f0X2vSrLV7gjmlYZwvNm8EWeuSWlZgDP4/Yzl7l3 + 9zJXrpzg8OHtbNo8bwArbBbeduzYLm7fvsBz969x5/ZlOe81Oc881Dlvyvdv3Lw0j1vz0b7K/FXXosxb + zQB+/v+9AXz7rjK0L2tQyw/X1fQdKg32tWtntShhDcp8vnJ23gQ+pYzaPRw/LBzuiMJebf3Eyf1a1PDZ + 88c4f+E4Fy6d4PwDnLtwTO75YS0V9hmFs7Lf6YMCVR7WjnvtqpxTeOPlc8e4evYoty+e4r6sP3fpFHdl + /dbxvVw5uJULuzdwdvtqzm5ZyfmtU5zfMs7l7RNc2DLKmXX9HJtpFw7UyNFVTVzaMsCtPeNc3zXK1W3D + nF3XzaHJeuE65ewdq+HEymbOzXVyfn0PJ2faODRex7HpZi5sG+Tq/kluHl/Dqzd289FLp1jw9qFsPjpd + whdPl/LG/kwurwxlT7Mdm8uXsrlkKburHDjS7MuRpiB2VnmzKlNIkNGK5qSlVOqepkS3kJL4JZToF1Ok + X0hxwiJZXkpRwnJZXkp+7FKyIp/CFLaA9LDHyBBikxO9jFydBYU6G4pibSmNs6MyzobGRHu6Tc4MZEiH + Z7Zn2GzLoJCt/pSldCUupC32MVpiFtCbJJ12rjWbKjzYXOnBplI3NpW7sKXcjR3VXloE8O46b/a3BrCz + 0YfVRbaMmpfQm/w43QkL6BMMpT4hBPVJVmYuZC5vIbuqbDgmg9e5XncuDrpwfcyd28oAnvHlhRkfXpr2 + 4fXVAXy8WceXN8XwxbURvLs6lGeH3DndaMXmgieYNMuxjQvoSHuKRvNS6rNsqct1lM7KkdYCazoLljFY + upiJqoWsaVjIjpanuDJmxbvbPfjns4H87GYw/343mP96LoLfv5TEJy9n8l93c/jRGTNvro3maJ0T63It + WZ1lxaYyB/a1+XCoz4+D/d7sbHNmrsKSlXKO6QI71lf5yTY9OzpSmCiLoN7gSZYQEGUARzktRuch5CfU + noI4e1qyPBkuC2WoOJhGIY6lQo6yw5ZiClpIsr+QsGAhYVFCgITMJMc5kCjQC5ISnTGmeH3GABZh+hkD + 2NdryecMYCenRbi4LMPVdTnu7pYaXN2tH8FFxIezi7U256+ji6VmACvzVRm/Dw1hZQAroqOIjUZ0fJ1w + 1cSMjfZWq3obyS/UC58QIUj+zo/E9yMhrozdB6LKxV3IkhAwHyFU3op0CTRCpsEFN9lfnVPNR+zh6cD8 + JPcu2ptzKv2ztqwEkp+zNp/HQwP44fJDAzg0xJNoGRyjowPQxQQKuRJRnRSlGcAl+UZqRbwoFMuyWQ2K + sUHER/loBrCK/s1KiyLTGC5EO1IzcgtFiJcXGygvMch3kijI0WtQy5WlaRoKC5LIyYrVDOB0FS2cFi7H + CiZRRVTGKQM4nDoR/GMFkWwpC+dsezRvTifxz9uS+KWKaDgYyp/2e/Lnvbb8cfdyPtllySc7bPn9dhf+ + tMt73gBW5u+BaDimEM4fD/jz+91+/PucN98d9OCrjU48n/Y0Z0MWcMBnAXsDFrBH+oIj6c5C4kI5VhUj + hEjHTEEETSoC3VtIlf3jBNo+hb/dYoIdrYh0cRCy5UGCt5fUWXdCXGzxkTrhKfXI030pAT7KAJa6+HcM + 4L5gb8bD/FgZruDDinBP+oJcaPO3o0EEba3Um2pPe0o9RJA422CW85mkfpmFVGdJPcoJ9yYn1Ic0ITmJ + IpATnJaQKvU0W55pcZiXQASTMoClvhXLs63Uh1EnxKY2KZq65BiaUuJoTY3XytqEKOnjIiiPDaMkJpRC + QW5MMBkxIaRHB4sYCSI1KkTEQzDxQV4CEasxPpRlRFCXr6MmN0bITjj5SWHkJUldSIrElBgh9STgfxjA + wQJfHxfNAPb0tcHHz1LWlxHi9aQI9wWYpS+uT32aDR3OvH4ulZ9/tZ4//byPv/yim7/+tpU//76WP/2h + nL/+vpI//KSMn76fw1tHwqUvXU6LkPRC38dI9V6K3t+RGBEOnxrA9sSI6EnQ24tQdJF+wZXUZBcMCc4C + N1ITPUhP9BR4k5YgfUa8Dylx/hhi/UkSchgf6Uu0tNvwAGdCAxwIC3YkxRBAfp6O0uI4crLDMKR4kmoU + AZsRQG5uKEWF0RQV6MjNkvqd5i/9kAsJsVboYy1EvKroy2XSdmyoKPKkrS6Y/rZIhjt0TPQmsHo4le2r + 8zmwoYxj22o5sV0Gyu21HN9Rx9ndzVw+2MmdM2PcPj3Kqd3tbJ8uYXogna5aNX+iMyb9MjKSLMjPsKc8 + 340yNQ9qrhNZMm6ZjCIClWiOt5Lf60i2CPOcNJUG2lnEsoPsb0dzmSN9tU5MtLqytseTHcO+HBj15vCw + O0cGHDk56MgZGYvOyhhzfsCTC/0eXOjz4Lwyfntc51M/q1KgPr8+HsitqXBuToZyfTJcEMHl8UgujoZx + aiBIM3rPDIdqON4bwKFOOVe3j2wP4uJEFLdmE7m/MVXKJM6PRWgpog91+LO/RYRIdwinhqI4PRrLyREd + h/tCOdAVwOH+IC6v1nN3i4mbm1I5ORnJjnZP1tU4sLFWGcAumgG8qXreAN5S689mwaa6ANbX+rG21pfV + 8tm0SgEtUAbwpp4YNnRHM9UUyECVtFkZ5/srPOmv9GKoypfhaj8mGoJYLc9yzwqjZgCfnitgW38CM8rw + bVTz5IRqmFZmcXUAq2oCmK4JlvWwzxnAg1IvenJdaE6zoS7JkqZUW9rMTrRlOtOe5fIAznTkucj47UKH + jOWdRU70l7kyXOPFZKM/Uy1BTLaGsKI1gv6GyAcGsBvGBFuSYi2Jj11OtPCeqPCFWr1M1tvI2CljcZwl + cbplUlrJeDBvAOdkepCd4Y45xYEMzax1pFq2dRYF0yPjc3eOL50qCtjkxkiGB5N5PkzmezOa7U6vcKdq + 4VtlMYu1+cVK9JaUJqnoX2tyY6UdCLLUHy9yXTly7KwHKePyjc4UCwcoyfWmINtD6q8L6Sr9m0GuUep4 + RMTjgseIj1skWEKsbhGxcvzEBAsZWxwwy/VkyjWnp6sXPRyIibbCP2AR3r5PyZi5jIBAa4ElQUFLiIte + TlaqE8Vyj0tSLagxLhEBJfyp3kV4V6CMQVF8dTaK76/V8eO1cfxolZ5/WpHIa62RHM11ZzrZloFEB1rj + HWlMcmOgRMdcrzz7lTWsnyhnerhAi2irLImQ9ubxvxrAA8mfN4DXpCxhfeJiEWhL2PUgCnh3zBI2y/K6 + +E8N4LV6a4GVZgJvSLIVOLBW7ueM8NmVMcLNHhjAswZnpqXNz6apOYF92V0extGmeM53pctYa+BkQwxH + yqV9FflytjqCiw16TlbHsa80hrkMec7R8izDHalICaRMxulKQUlKGAU6X3LD3CkRod2cIJwtK5GRohT6 + SlJoLdRTnRNFRUYI5QYfGmM9mIh0YXukE8cjnbkY6cCzsc68ne7LF3ICeF2e2QvynJ8z2vFs+jzuCe6q + UvrMZxWkDjwv9/wF6ceUAfx6zHLejbPgY6lXX0+x49tpjnw73Z5vm2w1qBTQf9cANlrwfrY97xc6816R + C2+XuPBmqQtv1XrxsvD1c7nObJL6OBztQHukB1VhPuTJWJgWFyl8KFozT2MiVBRtAAm6UOnXpb83xlJb + lk9Paz2DXU10t1TR0VJOd0cFg301jA3VMz5Wz/RkK3OrRViv62XnlhHWr+5kpL+C7tY8KauYHm9h41wf + u7aMsX/XDEf2zXHq8GbOHN3Gvh2r2Tw3xpnDO3j31bufN4B/8h3+/cf/xL/9+Ft871sf8+7rz3L1whG2 + rF8pfK6AeBnfo8P9iY0KJi4qVOp+mGYAJ8frSE9JwJSaRLohAWNSvJSJ2ropJQmjIY4Uba5fHQkpAkMM + icnyveRI0qTMSIqhyJRIY0kmrWXZNBSaqM1PpSYvlbo8gyBZM4DrcgzUZidTk5VAdVY8VcIHq7MiZT2E + tuIwBqXejddHsLY9hr0DqZxaIfpvKl/GjXxuTBRo5dUHBvClWcGaQi4Kzs7kaemfj6gXqHoS2NQey5oW + HVONMdI3R9NTHk5vZSSjdXGs7zKyrsPAbLOOaTnXdF0Eq2V5TZt8pzWOjd0G9k0qs7eY/XLuw7OlHJkr + 5/DaYo6sKeC4nOvYqixOCs5MZcg4lcmVFRlcG8vScFmLBM6UcSlDrj+Ho+PZ7Bs1sVf2OzKXx9W91Tx3 + rIG3Trbw7tFaPtxfwVf3lfLdQ4X87Gg+/3Uqm98qA/hkGv99SnA6jV+fSOH/HEnkp/ti+OGOMH60LZSf + bo/gX3dE8p/bI/nNjmh+v0vHH3bH8sf9euHJiZr5+3tZ/sP+OH63L5bf79Np0Mzfw3H8+Vishr+eSOCv + J/VwIlGDMn//fFy03hH5rkol/cAA/uNRvYbfH5JjCf5wKEY+18m+8fzpWDx/OBKrGcK/3S/XIzz8tw/w + +4NRsr9c30EdnxxN4E/ym359Ip0fHzHz5T3p3JiWZ90XzFS9Fx3FrlRni97L9aEoP5C8/DDSpG7okv3w + i3DG1d8We7fl2LhaYuW0FGvh3Gr5IaxclmDtthTXQDv8RVdEJgYSkxpGRLK01dQozCVmBqeH2X54J7uO + 7GPDzq1Mza1mYMUIta1NlNRUUlJVTn5JEdkFBWTn55NqMpGRk01dUwsrVk4zPLGS9r4hcksqiEowEJ+S + RlpuPiXVdTR0dFNR14QpO1/aSTrJ6ZkUVVQzNjXNjr372bR9F0PjE9Q0tWKW74RERotG9MTawQkLWzuB + DZZ2dljZ2TyCpa0VVjZWWAss7SxlX0tsna013ejipfSk6EeBk6u9BkdX0Z6fwd8awX8LZf5qEcCiYd1U + xirveXiKZvT0cxSoZXt8AkU/CvyDRWOGuhEULjozRLRlsL2sOxAaLVo7Trh3ggu6JJe/awBXNZpo7S6i + tDoVY2YEBlMEWfmJFFeaqWksoKm9jMHRJgaG66lvytcifLNyEygsNpJfYCA9Q4fRFE26WUeaOVozgIuK + k+QzPWmmUOmf/DQDOD0tmMxM0SV50RTkx5CXK3pV1pX5qxnA5hDU/L9FhfE0NObQ21elmb8bN42wd98a + tu9YxdRUJ01NRRSXqgjwbDr6G1i5doyNu9ayde9Gdkj/u+vIHrYf2cu2w3sEqlTYz9FL57nxwn2ee/N1 + XvvCuzz76svsO3aE3pFhymorqaivoralnsbOFm0e4NUb51i9fo7uwT5qmuu0z5u6WrU5hVUUcFVTrdSz + BM0EzinMYWr1FCfPHOf46SNMzU5InSuV+pRKVmE6VQ3FdA81s3rdCrbunmP7nrWs3zLFus0T7JJx5Mad + U3z01df46X/8E//xXz/gOz+YN4D3HdhKb38z1XXFtHTU0tXXKmUDBSXZJCTrCAj2wcPb7dF/FZoJ7O74 + vxrAHqpUms9XffbQ8HXQ/qB/aP5qLxzINlfRvPPpyaWeqvms3dT0WlZyDktcRN+qF/F9RYOpFLHB6v8L + 0dPhPrZEeloS7bEEvddSUgKE+wVaYApeTnaIJcURdlRJnWzSudOp92RQ6sZIqvBr4SE9CR70JXnRl6wM + 4ECGjCEMqujgrDAmSxPY2JrF1q5CNrTmsl6hRdCWJ8hnQ1uhjC/FbO4sZVtXOVs6y1nXVMjKikxGClIY + lPqsQca8wbwkBgSrqrPZ0V3N4bEOdvbXM1CcQkG86M1Q0aUxLpTJeXsaTKLlypgdqGBlewGj1en0FcTT + nhFGuylIOLaCtyw70ZFuS2e6NZ1pVnQLZ+1JXU6/lANGK4blszHhS+Oy34TZmRXpLowLVpjcZbsLQ8KJ + +4XX95hc6XhgAFclW2r/kRbGL6IwehF54fMRv0URT1Ec+bRgIaXRS6gSvlkrPLPBYE+LSbRHlgfd0lc/ + NIBr5LilWhSw43wksPBNhfwUV80Ezk51ITNNuLzRVfToPMxyPaZ0T9EanmSZPMgRDaHBPI9cVcq1m1Md + RL/akCjX8P/PAFYoFL1ULDrpoQFcI/hbA7jc6DCfslp+U5ZuOZnRyygR3VMp11hhlM9Vlqx4O0wRSzUD + OCHgafR+T5MYuITUMEvSI2wEdqSHC6Q0hikD+NMI4P8vBrBJZ60ZwMbw+bTOiYHK9FVpoOdN34cGsMJn + DWB1juQQWX5wTu28cg3K9FVpoFWZouYmjpFlnTKA7YWv2hMbIe0nxIYAH0v8vKzxk7bo662mkPPEx98L + 78B5KMN3Hj4aVOSvb8C8Eezl54GXZvy6SVt3k35A/cfjpAXEPIQaV1RAjIL6b1QFyASo6F/hzVGxwcQm + RAjCiY0PQxcXjC7Wn5gYP4GPaDw3goOdCAx0FA3nhTk5iMr0YLpyw7X/kLc0RHOyK47LXZHc7AjmXpsv + 9xtdNQP4fo3ogyYHXm114u0OVz7o8+GDwQBe7fTiTpMrZ0tt2JuxiM3Gp1kvmm+1cRkTqcsYSl5Md/xC + WnWPUxexgOqQBdSHz5vAg4an2VTizLEWfy60+3Gu0ZnT1Ys5Vb6AC9ULuNH0JDdbFnK9aQlX6pZwST67 + XmfLnWZXXuoJ4K3RSF7sC+RGgzMnS5ayv+ApduY8wZbMx1iXsYBZ02OMJy2gL1Ig5xyPf5xp/RPM6J8W + LGImcSmrRCeuSHSkR/RmU5wTFTLmGqXfi/ZeTIjHInydHyPE9TGSfJ+gUjTjXIkXlwdjeWvWyAfrTLw7 + k8YrEylc74vhUJ0P63KXsyZ7Cduq7Dne7c8Zub4T7Z6iCT250aPmHw7hue5gbjf6cbbGi42ikfoyrWlJ + k/5HZRkQ7bh3tpbTewY5tW8FR3aKZtk6wq5Ng2xb28vqFQ2MdJXSXp9Fo/RpDVVpdEsfumG2j+MHN3Dx + zB7OntzBiSObOXJwI0cPb+HAvg3MzQ7T01VNXV0hfX2NzK4eZf36VcyumaKzq5m0DAMhaiqb+AiSUuPn + DeBQXy0riodwF/9QL4IifDXz10/06f80gFUaaD8iYwOIjlMvj4UJf4jSXmxVGseULZq9RsZSGQfHVgyw + ft0Mxw7v4/zp45w4tJ/92zayadU4031ddFWUUJOZTpnRQKkxSZBMeUqiIEEzf+vTU2nNMtGljN9cgZT9 + 2ebPGcDDuSYNWprnXGXqGhkWjIqOGhMdNZ5vZExbllLGemUAK0N4RPZVeGgEP4wGHiqS4xbLMctkXCrP + Ykw4zFh5Bt3GGHpigxiT9jcbFcbWuBh2y7XuyTaxvzSXvS2V7OqqY3tvA1v6mtgw2MT6wWbWDbexbrST + bZND7FuziuNbN3Fyzw6O790l+lRFqaqI1V0cPLT3EQ7J/Tp2/JBmAitDVUUAv/jSPV58WeEuz794WzOE + 7z/3DPeevalBmcF3782Xal2Zqc+/eIsXXnpGK5974YZsU+bqdc2MvXf3GnfvXOXu7Xk8d/8GL7xwi1s3 + z3HyxD62bl3D5k0zGrZvm+PM6YPcv3+Nl+V4z92/Kdc0f14FZUKr896+c30eWkTyVc0kvntPRSur88o1 + KTyvzN7/iWfl/ArKuFZQZu/D9NAPjWAV3XzlxlktJfT1a+e4oUUvz5dq/crlU1w4f4xTJw9w6vg+zhw/ + wJkTBzgt62dOzc9JfPHiCQ2XLp/UUlVfvnJSvieQ5SuXjnNZoMorF49x5YJsE9y4coY7ty5yV0VNXz7D + 7UuneP7aeV4SPCef35ZjXzm4nXO713N66ywnNq7kxLpxTq0XrBvl7KYVsjwoGriHg5Mt2otxygi+tGWY + qzvGuLB5kDPrejg+286BiXp2jagX6Go5urKZ02s6OSefnVnbw9HpNk6u7ebK7gmeObaW5y5t54OXT/NP + H99hwcWpcO5uSuaFHSYpDVyYDGdfmys7a+3YVePA3jo3jrYFCcLYWePPZIY9PQZL6uMWUxL5JLkRj5MX + /RSFcQsp0i+mOHGJlEvI1S0kW7ZnhD9JeshjpAUvkHIBGUJ0ciLl85hlFMRYCgGypFTK8hgL6uKEYKU5 + MJihon9tGTbbMGSyFNK4lO6Ep+mIfUwGhgUMpy5hbbEzO+v82F7tw7ZKL7ZWurO9ypPd9T7sqvaSbe5s + q/FgQ4UTk7kWQsQW0298ij7DE/QnP86g8QnGzU+zKmcxcwWL2V5pxaFWR052O3Om34mLIy5cH/fkrooA + Fjy/0ptXVvnz8SYdX9sazz9ujeUrsvyGbLvZ48Th2mWsK3iC0czH6TY9TZNpKfXScdflOtBQ4EBzviVd + RcsZLl/KVI0MgHUL2Vj3BKf6lvPyehf+4VgA378UzA+vBvKzZyL45bNJ/Pb5DP79ponvnEjhtbkIjjY4 + srHAkk3FNhxs9eTyRARXVoZxcdyfY92ubKu2Yp2cY1OJA7vq/DncncDu9mSmSsOpT3InM8SKOPclRLsI + wfK1J1/nRlu2t/an+I6eZHb2GJiuFHIs5LJWb0ORmo/D9zESA54UUqMMYCGEOlvi1Bttshwvg+KjCOAE + NxJi/58NYEdHZQIvwdlZYakGB6dlj2DvKOuOFtg5qvX5uX//1gBWBvFnDWAlop1EwNiJeNEMYGXOKgM4 + yB03IUCfM4C1+XTmDWBl/rp5Omvmr5rQ3t/fGz8hYgq+fp5SKrKlTGAR6+52WqoV/0D3+bkz5BwBQZ83 + gB9G/n7WAPZVBnCgG+Fh3sTHhZCYGEFiUiTJglQZ/EzGWMqLTDTVFtJUV0RlSQa5WYlCvMPlPvtjiPus + ARyhGcB5WTqKChKoKDZQVW6kosRIWVGKBmX81lZmUF1uprQkVZsHWKWATksN0dJGJ8V6kxjl+TkDeLgg + hnUlYRxpCueFFXH84wY9P98dy6/3BPO7Xe78focVv9u2VGDB77coA9jpgQEcBAci4JAOjsbwl/2h/G6H + L/+10YufTLjy9TY73i+35OXMxVyOfozj0v6PRjzGYSF7p7JduVAZyvHqSHZXxjCdH0pdjCNGj4VE2C0g + 0PYJAu0WEe5sg87ViQRlAHuq+YFdCXKwwsdhGd6uFvh6WhDkZ01UoN0DA1iEjzyPks8YwJORgayODGY6 + KpCpqAAG5Fm0BzhRI8K3wt2WElcb8l1syXK0It1eGcC2ZAgxzwn0JFcITk6ID2lSDxKlfiU6LyPN3YY8 + qVsl4d4CH/KEXOdLWRIjZFmIdZ0hmtokHXUi4ptS4mlJ1WtlbUK0kMcoymMjKYuJpDgmQvq/cHKkzIwO + J1PIQYZsz9BFidgJwihkKichWERUDE2FcdKPxFCUHExOXCDZ+mAy9KGkC4mPiwiQNuf5OQNYwVfqq2YA + q/Rdvuqt02WEeT0pbflxssMWyPU8yYyQ5ReOJvDTD2v408/64Be9/PU37fz5d/X86Q9V/PV3NfzhpzX8 + /KNSPjqbyJFuJy1FT5H0CUZp33pfeT5BjkSFOhEpYiwq3EaEhDUJcdakirBLSxYRmWBHarwtaQlOpCe4 + yHV7CLzISPDFlOAnv8GfNBEhKbF+JAtZTIySthLuQWy4KzGRLqSm+lOQH0VJcSw5OSqlnB9ms7+2XFwc + TXVlkobSolgKcsPITPfBKCI4VZ3bIAIxUaWCtiQ/04nGqgC6pZ4PtEUz1qNn1WAKGyay2Loql+3T+Wxd + mcumqWxtfe+aEiFd9dw9u4L7Fya5dLiPAxtrmR3NoKc+kkKTI6m6RaTFLxGhbU2JCN2yfA8Kc0Rgmu0x + pdpIOxbBHC+i9YEBnKcMYLMzBTK+lWbb0CD9eE+1I5Otbmzo92X/RAjHVwZxbMyLwzIGHe9XBrCMRwPu + nO2bj/Y90+2ipXw+2ekkcNaWT8u2c/0eXFsRwA05hsLNlRHcWR3LrZl4rk1Gc3owmBPqjVMpVTTw4S4f + DojoONzlJdsCZQyJ4NasnnvrDdxcreeCZgAHsKfFg51qzpoWLw51y/dFVJ0ciZTrC+ZAtx/75DgXVuq4 + uzmNW5tTOD4WxPZWFzbU2bFZzXFT4yLwYKOMyZsEm2t82SBj9voaH9ZWe7NGsLraU8MqwWxDIFt6dGwb + 1DMnQnOoyps+Zf4KBj9jAI8JF1nVFMrOEQNnNxRzdn0xu0dSWNseyZpmFekrbb42kEnZf7zch4kKH1bK + 81fm72cN4L48d23+30Z5XjUJy6X92mhp2prk+bZkOGtozpDlbCfa8qTMtaNNxvPuYke5JjfG5DeN1vow + IlxkuCGEvrqIBwawO0a9LQkxy4mNWkpE6FOEhzwlY+cyaR9WGuJ18ln0Ui1duSFRvTTgrEFLD623kv7f + ggxpR+WZHrSXhtFfFUVfSSh9BQEiOgKZKJTfKGP7qpIQxgsDGczxoVqOpSIHSmOXUxhrIVzMioLYZVrm + lbTIhdK/LCc7zpLMeCvMUpqlfmYm2knddKEg0508ZUCb3EhXfwAZ7LQ/feKkniskS31OSrCQ5aXoIhej + i1qs/TmUkmwv+8t1p7jIdTtIH2BFYNASGUeFA/gv1wzgwEBLQoLktwrfy5F9S0zqjX8rmjNFYJc5sLvD + hzur4vjC+kS+si6Ob6/X8925RL49nczHY0k8Ux/CdrMDw3K+1mgLKsOXURQuPDRNnm+jkU0rytk4VcnK + wTwtArg0P1janRPmBMe/awD3PzKAbR4ZwGsTF7Mxbj4N9G65hztilmjpn9d+zgC2emQAb5Rns9ngJKU9 + c9LnzcRas0bO99AAVlHA69K92SrP6kBNNCc7DFzsz+RcTzqnWvUcrYlgX5E/Z+p0XOtI53xrGgerk9iY + J885zpOaCPXHWJA8/2gqzVEUJwWTFynjUpAzxYEuNMYGMpSlZ6TIQG9JMs1F8ZRJv1gkfWRhsjvVMU4M + htiyMdSOo5GOMg478XKSFx/khPBxUTjv5fryqsmFl9OdeEmex0vSN71kcuZFsxMvptvzotGO51JsP2MA + W/Km4INEG76SYs+30pz4XoYL38t05ntZjnw30+H/wQC21Azgj4rc+aDUgy+UefBupSfvNwXwdksoz1QF + clDq70yyN/36AOqigiiKDpWxIoZUfZzwoQjiIkOIl+3J8eEyvkRJPU2gpaaM4e5Wxgc6GOxqoK+zlsHe + OlYMNzE11jwf/buyXYv+3bJxgD3bx9g018P4cDW9HQUM9ZYzNdrA+tXdbFs/xM4t4+zdPsXhPXMc27eB + 3VtWsnluhHNHdvHBG/f59j984XMG8H/8+Nv858++w0+/93W++uEbvCJi+czxPXL8LnLMySTGhqKPCdWu + P0kn3C82WpaF/yXoSE/Wa0hLihXEYTLohe/JNkOs8DUdhuQYkgwKUbIcJe0sSup0FFlJMZSZEuV5Z9Ja + kkVDfjr1ygDOTqYuO+kBDNRmJlKbkUhNRjw1Zp2U0dRnR9JeKP1qdSyrmuNZ36lnZ3+yjDlmzk1kc3kq + j6uTeVybyufqynyuTP8dA3haGcCZHB5NY1NHLKsbIllRLf1SaTCtUtdrM/2ozQmgtSiMsXo9Y7U6BstD + 6C3yo0/q+1BVGJONOla3J7JpwMSBVSUcWl3G/ukSDs9Vcmx9DUfXV3J0rpQTs8WcWK3mDs7n/HQOl1fl + cGMyixvjWaLPMrgq131Fyisrc7i+ukius4ATkxkcHk8X4ZzJzZ3lvHK4jg9PtfCV001860QD3zlezU+O + l/DvJwr51alsfnPKzK+PG/ntyVR+czKFXx5J4ucH4viXPVF8f1sw398czL9sCeUnW8P49y1h/HJLOL/Z + Fslvd0TNG8AHHhjA+/T8bp+O3+6J4Td75HPBHw/F8qcjcfz5aCx/ORYLygA+rgzgBIGev5xI0qJ/f38o + Tova/VsDWIsKFvzxaJyGPz0wgFUU8O8P67RI4P8+EPUIn8i2T47o5HjKAJbvnjLKbzLx8xMZfOOAmXuz + sRzqD2Kq2oXmXFuKjFaiKxyEs7iTZvYhMc2bqETRP9HCH0NEL/la4+Blg52aJ9TTCkdZdvSeh723JY4+ + 1niGOhIQ40F4oh8RhiCCE/0JN4SQkp9MQ38j01tXs373ZqY3zjE0NUZrXyclNRVkFeWTWZBLWlYGKSYT + qSYz+sRkQRK5+cW0dw3QN7iCzr4Riirq0CUaiU1SRm8OWQXllNe2UFrVQFpGHvFJRhJTzBSUVDE2Oc2u + fYfZsfsgK6ZW09DSTXZBMRExcaIDvbFxcMHCxv6BASylne2neGgA21lhaW+NtegNW9EhTh6iJZUBLLrx + s6bc/60B7KqZwPaPzLm/NYC1qF/p5wPD3AkSPhwa5aGl5fYRreMTaENghD2hopki4501AzjhbwxglQK6 + qsFEz1Altc3Z5BYnkFOYSFF5OhV1OVQ3FtDYVsL4VAdT09109VZRWmGiSL1AXJ1FeYWZvIJksvMSycrR + Y8rUkSl6Mi9fT26e6MqMcAypAaSkBJCeFqKZv6VlCVRXpVJRnkRBgeyvmcCBnzOAG5tyGRisZW5tPzt3 + reTAwXXs2r2aVau6aWktkWvIoLwml64BqTfrVrDj4Bb2n9zDsYvHOHX1DMevnOPoxdMajmg4w4VnrnPv + 9Zd46b23eOmdN7j1/D12HNhL12AfDe0q/XMb7VLnVArogYkR1mxex+zGtfQM99PY0ayZwx0D3ayYmWRs + 1ThNHa0YMqQ+pSWTX5rP9NxKTp49zqETBxiZHJR7mSn1MJI46Zczpd+tbiqhf6yDVXNjjK/so3+kVdDM + 1Ewvew+t48bdU3z0lVf55+9/ia994z1eee02J0/vZ92GSWbXTrBjz0YOHdvNvkM7WDU7Tn1TtRYRHBkT + JvXNEQdn20cGsLua2ufvGcCyPL/dAZVeXNUpZQZpZvADQ1h72eCBAaz2UfXPRc35q+a3VnC31qYNUgbw + Q/M3UrRklK8jMaIjYz0tSfBYitF7KZkBFsJDLET/Lqc4zJqqKAcaYl3o0HvSI/1Hf5I3A2osT/aSdXf6 + DV70pSgDOIAh4TRD5mCGs0KZLNaxvsHIhkYz0xXJTJYkyLYEJsoSmSxLYrIihanKVFZVGZmpNTNbl8XK + ynSG8vR0mSPpSA+jMz2cTlM4HWlhdJkiGCtOYq4+h929lWzrKqMvP4584T6GwOUkh1pKn+dNe5Weyc5s + ZrryWNmUyYqqFAaL4+iWa2pP86PV6EmL8LfmFOH7KTYClfXQgvak5XQmLaUnaRm9sj6YYs2QaIeRVDtG + jfaMCm+ehzPDRieGhFf3pbvQa3KVa3R+ZAAX65cKL19IQfTT5IU/QUHYExRHPiXcXaV9VubvcuqTrWlI + tqMxxYG2DDfNAO7M9fqcAawiZ0uEiykDuEjB4EiBcM88OX+OfJYp12DWdIWTpi3Mci0Z6W5kpLmRJdem + 5gl+BOOD1NGpLtpUNYYH0b9/zwDOeGQA22soFJ309w1gl88ZwEXye3LkeBmie9IjFpGvt35gALtoBnCB + 3l60iiXJwQs1AzjW50nNjFUGbKpKtRwqulpgDFOlNYZQua6HRuz/pQGs5urVIoD9npLzzZvACmpZQf/g + /MoATpL6nhi87NNzChIfGMAPkRxlTVKM3D8VMBPrSEKsA7oIOyKCbfD1XCawxt/HiQC/B/89BvngGzyP + h+me/QL98Avw+1z6Z09fd2nDrprxq+D2IFOh+n/SXeHB2OLiobJM2GovfKgU8yERvkTqlPkbTlKq8Mq0 + OFKMcdJ/y7IxiuSUSOnHw0lMDCIqyovgYBciZcxRmQLzk/yoNwfSXxDMXFU4RzvjOdcZxeW2QG63+fJs + szt3qq25V23Jc3U2PFdvzUuNtrzR7spbXZ682OrGzTpHThdbcjB7KbuylrE924qNWTbMZFgzbFhKV9zT + NEXOm7+l/guoDFxAY9gCOnWPMW1eyp4KJ07UOXOq1pbTNYs5WfkY52oe42rTU1xpfJJLtU9ztuIpTpU+ + xcVKFQnswou9wbw+HM3ddj/5zJZdGU+yzrCAVUkLmBJMpi5gQtCvW0BzwAKa/GQ5XLbFLmBl/BNMiX6Z + iF/EaMJyemOtaIy2ojzalrxoe/T+ywj3XUqA1xI8nR4jwHkB8V6PURyxmJUFHpzrj+XNOTMfbc7hC7Nm + Xh4X3dcRxs5SJ1alL2TC+ASrc5eys9aZo6J7j7Z6clru5dXuYG71hHK1OYDz1d4cqvBiIs9e2v9SalIs + aVbzijcnsHW6iqM7Bzi8e4xdG/vZLNpmzWQLk0M1on3zRBNl0FiRRoP0k41V6fS0F7F+rp8TRzZy9dJB + Lp/fz/nTuzh5bCsnj+/gyMFNbFg3Rr/opkY1lvU3axHAMzNjrFgxQH1DpZadQs1DHS76KzYhSupTqNRJ + dxzdbTQTWP3fruYA9g/zICDc838YwKE6Hw3hMb5E6PyI1QeTkKReRoggXnSNIS2e3AIT5dUFNDRW0t3Z + xPTkqGi1GdasHGe8v5Oehip6astpzM+kIt0g/clD4zeRSkGVoM6YSovZRKcyf/Oy6c/NpP9/M4AfzOmr + MCrnVhgvTGeyIE2QzoSUK/6OATz6wADWTOAHBvCw7D9UKMcsNjNcmsFImZnR4jR6jTFSf5QBHMRsVDjb + PmMA7y3NZU9DGTvVtAWdNWzqqmV9by1r5Tms7W9ibqCFrXL/D65Zxdkd27h0cC/nDu3n+IHdHNq3nX17 + trFn70727t/F3n1S7lMpiPdz7twpLQJYmb9vvvXyI7zxxou8/sZLghd57fUXHpWvvvaihtdef5E33nqB + t95+UcMbbz7Pa6J5X339OV57874sP8cbrz7P66/IusLL93n9tfu8Kfu98PxNLl88wZ7dm9ixfR07tq1j + z65Nmrn6huzzztsv8eqrz/LCi3d5/oU7Wqnw8iv3eenl5zQoo/qFl+a3P//8Hdnvtrbvp6WC+v6neO75 + WxoepYC+95kU0LL8cP2amif41gUtgvn2M5fmo5EFN29emJ8z+NJJLpw7yoUzR7h09hiXzikc5eLZo5xX + pYr+PX9MyqNcEijz9/qVE1yX8saV49y8dpJbClcFV05ruH39LHdvnOPutbPcUIawHOv6qUNcO36A8/L8 + Tm7fwKH1q9g7u4JdUwPsWNHLtpFOdox1sWO0nX2TXYIOdo+2sFn4+YbucvZPtXJybR+n1vVzeLqD/ZNN + 7F5Rz47hKjb3lbJ1oILdY3Ucnmrh2EwHRwV7J5o4JOXZbSu4dGCGZ85s5t0Xz/CNj++xYGujM8eHQ7k8 + o+fydDxnV0RxoNOHvc0e7G/25kCzL8c7wjnWGc3O+hDGZDDvEDJQJcSlIPQxMqXTzgp/jDzd0xRqBvAy + 8uMXkxn5OOmhCzTj1xg0b/7OG8BPkh25mNwoIUBRyyiMWEpp5FIqZL02RoiVURm/KmLXRmDJSLolg6lC + tvQL6Yp9nH79k0yZrdla4c3+piB21/qxs8aXHdJh7lFzFTYFaBHAm8pc2FDmxOpCa8ZzljFiXsywaZEQ + soWCp2X5aSazl8jny1lXupxt1Tbsa3XgaLcMNn1OnB1y4vKoKzcm3HlmhQd3xjy4v8KTd1aH8vGGaL6+ + LY5v7Ijnw7WhvLTCiys9TnIty5gpWsxgzhJaM5ZRn2VFnYjs2gJbmvIt6S21YqzailW1FkJml7C2+ikO + dVpwZ8aFD/YH8PXTQXzrfADfvRLOT24m8G+30/mXy6l842gir8zJ4NvkyLqCpWwus+Jkry/31sXy3EYd + d1YHc2HAnYMy+G4rWc6uMnsONvjKPnHsaIqVTi2EmgRn0gOWEee+mBi3ZaQGCumSwX2qOoKDwwaury3k + 5rpSToyY2NIQxYp8byHAdvKdJzAEPY0xWgiPMn2F3MREWhERaUmUDIgqAlghOd4FfYzD5wxgP28hO97L + tXmAXV0XaQawo8NinBwXY2+vsBAbu0Wfg5pv19Z+KfYOyhCeT7/89yKAH85z4aTmsXFRabqWa2mN1ED0 + MP3zw5RdTkKONAHuNi/aH5q/Ht4umtmrSFhQkB9BwQIpAwJ9CAzyxlcGOJX2WUGZv0Eq0lKOrRAY7DZv + Bvu7aIbvZyOAP4vgYA+iIv1ISowgVQhXqjGWFEO0ZgCbhYiVy4DRVFNIY20hVaWZFMkgk5kWi1EfSmqC + mv83XAh2tBD0SLLTIsjJiCZfhHhJgQx6pama6VtVli4waeZvvYj3uqosqirNWhRwVma0ZgAn62XQjXIj + IVoZwP7kpkZQLZ/15EYxlRfEzopArveG8+F0NN/bHMHPt/rzy83O/Grjcn69cTG/2bSc3222mTeAd3vB + Pn84GAaHo+FAJJ9sD+RX6735t2l3vj/gwJdrl/OOtIW3Ciy4l7qQy0KqLiQv5FTqUs4XuHGxKpDjVWHs + qYySdhhIVYTUJfeFRNguIMjmCUKkfkS72hPv7iKi04MEd3d0bi742yzHR+qHr5sl/l6WmgEcGWgnpNyF + 9CCXRwZwo58bffIMV0aFMBsTzowujFVCWoajAmgPdqdKiHKRizW5jpaa+Wt2sCLdzhqTiwgbL1dypU7k + hfiRI3UhXepJktS9ZFdLzCKa1dy/ZfJMFQpCvckXgl0iBLsqKZI6IUp1yQIplfHb/MgAjhFRF0NlrEAX + Q1lsNMW6KAplPU/K3JhI8oQc5MfHkRUdQXZsKCWpUdTn6mgpiqM2O4r8BH8RTt6YYvxJiwkkVaAL9SVM + 6mawtIVA+e2fNYA9pT14edni42NFgAiPcK+nSAl4ilzpl2vjhOSWS9+zV8cP36nkTz/uh18M8NffdPGX + /27iz3+o5a+/q+d3P6vn375UyVevpHNhhS9DyU9QIiQ93fMpLZtAXIAN0SG2RIdZEB0u/YtKvRy3HJOI + xYwka8wJFpjil2GOF9EYb0t2vLNAhKbeS0pvMuN9Mccp+JAWK/daltNkOVXvSWK8u7QZb3JyQigoiNLK + rMwgsrKCySsIp6wslvqaVBrqjFSVJ1BapNKgB5Jt9tHeblYRlRlpjphFnOeZnagt86O9PlRIcgTDHXGM + 9ySxaiCVmYEUpvsNTHYnMNYey1SnnnWD6exZXcq9s+O8dHU1t06NcmJnK+sncumrj6Ew3VHu/2K51qVk + JluRn+5AcbYrhSJ4s80iMOWcav5fY7z0oYlOZCtRLiI33+REgcmO4gwrqvMsGBARMCPj7baRYI7PxnB+ + LoozqwI4OujK8b5PDWA1x++ZXlfN8D3R7sCxVjtOdDhyotOJU90unO135+oKf4G04/FgzQC+t0bPvbXJ + 3JqO0+b/Pdo9PxfwsR4/zfzd1ypjRqcHJwb8ubginJur47k9l8iNmVhZj+B4rx9ba+3ZXGXHlloH9sj+ + p8bCOTkapmWe2CcCb5uMSceHg2TsSODG+gSODPuyrdWeTSICtzW7sKXelY3Vbmyocmd9hbuUnqyv9GCd + YE6WV2vwYLbakxnBmsZAtnRFs2skiY19OkaqfRhQ5m+VN8OyrMzfEYUqPybqgtg2mMjJdYWcWVfE3jEj + G7t1zLVGMCOfTVYq89eLFWVejJV6MlEu411NKCtrQx8ZwD25brRnOtFgsKZav4wa9aeL0Z4GZQIL11Go + TxcRluFAc46UIlzVH+ftBXZ0lzozWO7GoIpQrvSivyaQ7upw6osDHxnA+uhlMl4uITzkScKCn9SW42KW + o9dZEB8zn6o8IW7eADYapE5paddknBUuFC+fqSjiIrMHbRWRDDdK/azXs6I2TsbtOKY1xLKqPIrxknAR + OwHSv1hTEr2cUhGtRYJCOXZezBJMEU+SFvYUZjlnRqy0Sd1yjHIOY4wFRtnPrP6YSXchN0MZwO5Sfx1J + VzAqE9hKg1nakooMTkqw1Np5dMQi+T2L5fotSEm0JzXJUdqsPboYa4JDlhEgfMM/QPhAoBWBgRaEBslv + FSGdk+JMcZr6Q0hlRXEULuTBkcEwXlxv5P3NRj5en8g/rE3k62uS+cq0kTeGkjhV6c9MijU98ctplHtX + JrwxN1S4Y4ITPaUxTPfksGa0mOFOE01VMeSYPEmSc5ni7ClIcqHa6KkZwE1/YwCvzrBjjcnqgQG8lHVx + i9kSt4TtuiVsiV3ChtilzMXLdqkb6/7GAN4k92yLtOvNycLLEuyYlbY+J239oQE8myocVPqirQVBHKyL + 5VSnkYtD2Zzvz9DM4CN1IgaLgzjVkMDV3mwudGXLfqlsKIxjwBBAXYwnVWmhVGRFU2mKFH4dQE6oejnJ + gSJ/BxpEXA9lxjJSlExvSRKNRTGUZAVIP+NFXpIzZVE2dAZYMBdkzeEoR67FufOmKZAvFUbytfIYPioM + 4s0sD143uwrctIjg16XevmZ24VWTAy9JH/a8wZbnk2x4QW/JK/GWvJNgw8cGB/5Bnt935Ds/zHbnR9Lv + /SjXmR/kOPGtVGu+Jhrgw9ineC/mMc0AfjtxIV9Is+KDHAe+WOTBh9IeP5B2+YHw9o9agvigK4oXmqM5 + VxbJRnMIw8mhNMSEUBITRk5inIwlidKPxsjzDCdJthkThDsZdORnJNPZWM2K/g6mhrsZ62tlpLeRFYPN + rFrRxsxEOzOTbaxR0WZzvezYPMT+nRNsXtvLxEiNZgAPdpcwMVTL3FQ7m9f0sXPjKHu2TnJo1xoO717L + zk2TbFozwoXju/jwzecezAH8mQjgf/knfiHL//ajb8tnH/HlD9/g+TuX2bdjA53NNeSak0mOiyBZpX6O + Ey6m12nLBhn/05QJnBSLKTGG9IRoKXUyZsp6sjKHYzAKUg0KkaSlRJMuyFDpn4VbVJoSaSkw01qYQWNu + Gg05KdSaE6jNiKcuQy/LidSaZDk9npp0HTVpUdSZImjLi2G4Ss9Mi4FNvUb2jZg5MZnNxZl8Lq/K58pU + HlcmBcr8VeszBVxaLZidN38vrSni3GwBJ6eyODCcxtoWHSuEx3UX+tGQ6SVt2oP8JDfyUzwoNfvRVhJJ + W1EojTl+ck3uWjr79qIghmp1rGw3sGEoi91TJRq2TxSye7qcA3PVHFpbw5G1lZyYK+f0XBnn1xRr5u7V + 6VwZ27K5OZnB9Yk0rq0wcmPKxO3ZXNFCJdzbWMrVmSzOTqVxbjqde1uLeOtANV851ci3zrXwo/Mt/PRs + Pf9+upxfnFYGcBa/PpnOr46l8qvjBn55NIn/c1DPz/ZF86NdEXx3SxDf2RDA9zcG8aNNwfyrlP+5MZRf + bgrj11sj+eO+Tw3gP+zX85vd0fx6VxS/2hUuZTifHIydjwI+otNM4L8e0wvi4aSKAE5Azf37x6Px/O5A + jJbu+ZMjnzeAH0KZvhpk34fLyhD+RKAigx/iTw+MYmUO/+GIHPdkMr86mcbPT5r55yNmXtuYwNnRcObq + 3WnPtaYwZSlZ2h/6jqSkuaFPVamchU8K9wqIccEr1AGPIAfc/O1xD3DAU5Y9gufhHmyPZ4gjvtEuBMd5 + EpbkS7j0W0EJwkmTA0nI1pFZYaZ5qJmBVYN0j/bS2NVCWX0F6Tlm9ClJxBsSiIrXER4dTZROyshIQsLC + iU8wUFJWQ2fXAN19I1TWtpKclkN8komElEyMGQUUlNRQUl6PKTOf+EQjCckm8ooqGJ2YZu/+o+zZf4yp + mXW0tPeRW1iqGcCuHj6fMYBtsbCX0l6VD2BrjaWNNVb2Un7GAHZ0d8RFNOO8+euIo4v9A9h9Dv+fDOAH + Rp1mAPsqM89JIPfYz+6RAazM3+AIubfC+4Mj3EXz2oi2tcAv1IagSDsi4hw1AzhexjdDhu/fNYCbOgqp + rM+guiGX2qYC6lqKtFIZwNOr+5hbP8LwWCsNzYXU1OfR1FpMvXxeJnqyqNSoGcEZKptUpo7snFhBDOaM + CC0NdJpRNKopjMLCWGpqjXR2FtDamkNVVYpmAqenB2JKDyJb9i/Ij6O+Pou+/mrm1vaxe488p31z7Nix + isnJDpqaiyivzKSyLl+uu4U1m6Y4cGIPJy8f59KdS1x/7gZX7t/k4p3rGi7cucalu9e5+eI9Xnj3dV7/ + 6F3uv/4yV+7cYNOurbT3ddE3OsDoqnEmVq9kas00q9atZtu+nWzdu4Px1VP0jvTTOdijpYZes2ktqzes + 0Yzh7OI8zHmZVNRXsnbzHGcuneLIqYMMjfeSkWckXBdEqCA5PY6CskwaO2sYGOuitbta7nOBIF+WpS7K + +LN19yquPXOCN965x2tv3OXOvYucu3CYI0d3cu7yUe6/eJM3332J1996gas3L7J5+wa6+jrIyc/UIv3s + nWwevXDwtxHAjyDb5j+z1+qWu9e80atKDT4PI87nDeJH20UfeirTV0G+5yGlt+wbHOBGuOjIuGAP4gOc + SBK+keptLbpvOdk+SykIWE5JkAUVYZZUR9jQGO1Am96VHhXpK+hN9KAnwX0eia70GTw1A7g/xZ9BYwDD + 5iBGs0KYKopkbU0ic9VJrMiPZFDG/35zMANZoQxkhzGYE8VQbjQjBTGMlcQzWZ7MaJGe7owwmuVYjdLn + NCX70WTw05ZbZVu/7D9VbmBzSy5b2vLoz4ukQK4xxfcp+R1Pky8crbk4nJGmFMYbUpioSWKsPJ4huZbe + rCDa07zkmM40CPduEA3XImhOtKQ5YRktwgPb9EvplLJLeE6f6Nx+0X+DgiGDjehj2wewFw4nSBF+ahQI + t26XPrZeOFVlksW8AaxTBvBT5Ic/SaGgNHohVaKVa+VcDXKsZtEhzcLBWwTKAFZzALfneNKW7fHAAFbG + qSNlwsmLU+wpSrGjSM6pzQmc6iA8245M+VzBJPuYUhyln3dGpXfOkGvKTHXW0kSrMkM4udngRIbAJHw2 + JcGK5Afmr144t3r5c94AthB8OgdwjvBEBfVic1GmMoDdqMqVa8v1oDpHyiw3KuWzas0AVnP/2movoJqj + lpIWvohsxeXl3BVGZWa7UpDgQFaMDYbQJZopq/N+cj4K98E8vMlBlhoMwaJJBMkhshym0kBbPzKA4wMW + Ex+4CH3wYtm+jLRo6wcGsJNmAGfLOTLiVApoNQewFSlhDyKApW48NH8fGcDe82mhPxsBrOYafhj5mxQm + 67JsiLQmKcIag3DuJDmfCpRJjrUjMdZBtJ4j0eG2ov9s8HZfMj+ftvT3Af6eoo18CAj2xV/gFyLLIcr0 + lfWgAIG/tuwX6IWK/lUGsBqD1BzB6sUQ7X9Md2nPMt4ouLrZyBgjfYWbSutuLfvayfG8CI30Jyo2BH2S + cFCTHlOWQfpzA+bMZMxZiVLqycwUnm2OISFBpYf2IDLMHX2kp+gnT0pTpV1lBzBRGsy+tniOtUVyutmf + a22+3Glx506dHberLbldZcGN8kXcFNyrseK5Bnvu1Ttwo8qOcyWWnCqx5nipA0dKXdhT7MKmfCfGjRb0 + xi+kKXwBVYELKPZeQLnvAuqCFtCmDNnkJ9iWv5yD5VYcq7TgTP1STtc+ydn6J7nc9DQXah/jdOXjHCt+ + jMMFj3GyZDEXq+y50+7Hc91hXG3w4nChJRtSHmNCt4ChGEH8AkYNgpQFdMg5auWctV4L6A5ewJSKAE56 + mlVJi5kSPTikX06HaOSaSEuK5dma5BlH+y8h2HepFuDk5vg4vk4LiHFfQE7QUwxmOHK0PYoXZ8y8tyGH + N6fTuDcYx/E6HzbkWDBlfIKRpAUMpzzOTM5idtQ4sLvWicONXpzrCOFCezgna/05VO7D9lJv+jLtqJBr + UVNq1kpb6qiKYnIony1r29iyvlu0TStTo3UMdBbTKmNrdWmKIJWGShPNNZkCGW+7yti4bpCTx7Zw89pR + blw5wpULygTezdlTuzl+ZCubN47T11Mr43MhXV11jI/3MDbWQ3t7AwWF2USKHvP2ddUyU4RFBREoddXF + wx57NyttSgGVedNXxoqAMKnTYV6fM4A1xMiyICxqHjFxAcTGh2j1Ur2YkJgSQ5rUzcycVIqKhAOUFdDR + XMdYfxeDXa201ZRSnZ9BfUEWVZlGytOSpc8QJOmlP02gKln0TnISLenpdGVl0p+fw2BhHkN5WQwoA1jN + //vAANbM3zxl/poF8yawMn9XFJqZFD21ssgk45JZgzJ/HxrAGh4YwA8jgUe0SGBlIssxC+TYcpxh+f5I + kdqWSm9q9LwBHBHEbGQ422LnDeDd2Sb2lOawq6aY7Y2lbGmpYEO7cI2OSuY6qlgjz2C2q4GNfZ3sXznO + 2a1buHZwH1ePHeXckYMc3b+L/Xu2sXfPDvYIn9kjfEaZwEePHdRSQKtI37ffeZWPv/QFvvTl9zV88eP3 + +OiL734OH374Lh8I3v/gHSnf4f0P3+KDj96U5Tdl2xu89/5rvPeF1/jCh69r2z+Wfb/0xff40sdy3C9+ + gS/K/l/84lu89daL3L59maNHdnPwwHZtPt1jR/Zy795VPvrgTb78pff4QI731tuvaFDX9sabymR+hTff + elW2vSZ4VTOq1edvvvmyZlA/NKk/D9n2mpSCV19XBvV9XnntWQ0vvHSb519U0cvPaMva+gvPcOf+dS1C + +Nlnr/PsvRvcFzx77xq3bl2cN4Avn9IM7Mvnj3P1/AmuqjmWVSTvuRNcuiD8U5YvnVfRvUe5evEY12X/ + m5rZe5Jnrp7gzvVT3L0hUOW104JT3Lt+mttXZL8Lx7gq3PHi0T0c3bGBvetXsWVymLXDPazua2VVVyOT + bdWsaKxgRV0pEw1lglJWt0ldEF4521bOpHDKCeHmW4fq2TPZzq7xZjYqHt1ZwmxHMauF468SvjPTmsdc + dwlb+ivZNlTHloFa1kr73zBQza5VHexa08PhHRPcubKX9964zIKRzCVsqlN/wEVxYkTHiaFoDnQGsb89 + gEMdwRztDOdMv54TfQnsbo5iRbY7rUIGyiKVkfAYWQoRj5OrDGA1p0XCcvLiFmEOfxj1+zgZ4U+RGfEk + GRFPSPk02VGLyItcQkHkUu2tmXnzV8iVkJ8BlVIlw4aJTGvGMy1ZkW7JqHE5o8nLpMNexrTZho1F7uyp + DeRwcxj76wPZJ9jfEMThtjCOtIexp96PjWUurCt1ZHWRDVP5loxnL2MsayljmQIpp/ItWFNiy/oKOzZV + 27C93p69bY4c7nbmWJ8TpwYdOT/sxKURZ64NuXBj0IVnBlx4ftiL92ZC+PrWOL6/L4Vv7ojn/bkQnh3z + 5HirrRzLmskiS7pzLWjKsaQu31o6LmsaCywZqLRjUgbEmQZb1tRbsa5mmQyoNlyedOelrX68e9Cfj08G + 8dWzYXzjvI5vX0ji6yf0fLw/jhdmwznS4sia/KfZWL6c00O+8p143til57XNkdyd9OZcuz0Hqpazr8yS + QzXOHG0NYWONItEBVIpQNPoJMfJYRKzHctJC3KhNDWJjSzxXZ7N5e389Xzjcyis7a7k+k8v+zlgmirwp + ibUmUwhZepwdyUJqYpX5K6QnOGQpoYr8JLgKOXQTouNEXJR6y82KIN/F+PssIcDXggA/K3x9LHAX4uPi + sgQnxyU4OizBzm4RtrZPY22rTOBPjWBbu6WCZdjZL8fe0eKRAawif1UqZncZdLx8nPBRBrCfi0Z27J1l + P1er+TeRAkUky2CkUh+5iCByclOpukSUa1DLD1Mpqbfo5Bg+7lrUb3CwPyGhAVoZKKQrOMRXM4H9A1TU + rztBikiFyeAX4UOIDHDKBNbmAn5g/M7DEb8HJrBK/Rwk1xEWJoNdTAAGQ5SI4XiMxli5XxFCpiMxp8Vr + BnB9Vb6WArqiOINiEZdqXmBTchRpSeGYUyLJTo8hKz1KM4Gz0iPJeZAGuqzI8MgArqmYN38barLnUZdD + razn58aTnhpKYrwvuighdZoBHEBWcgRlpihazeEMpvsyl+vF8QZfXh0N4R/XBPPD9d78fL0D/zG3lF+u + XcyvNiznvzfb8Icdzvxptwfs84FDwXAwnL/sCuE363349yl3fjTkxDdbrfhi5WLeFzL2YYUtbxVZ8YKQ + nzvSHi7lWHO5zI1LtX6cqglhb6X0KRn+IiStSXV7ijDrBQTbPEGow1Ji3IQ8e7iidxMh6upKlIsTfpbL + 8JE64uduqc2logzgiAA7If5OpAc5kyP3v9jbkTofF7qFYE9FhjATE8EqXQRTunCGY4JpC/GmwlOEi4Ml + JlsRInbSHuwtSXO0xST1I9tLpZL2oUDqQo6/N+leziRL/Uv1sJV1F0rCfalUEb8xgRSF+1EY6UdpXAg1 + hmjqU+JEvM1DM4AVkuNFSOqoT9BRp4+jLj6Wan0slfoYyvQ6SgTFcTGUJMRSLkSmOCGO4sRoqtJ1NGTH + 0JAXJYQnmMxYL4wR7qREeGOI8CVB6mNkkAch0g5CpT0o4zcs2F0r/Xxd8FYGsKcNfsoo91hKpMfTpAWI + AJY+uVb3OBOFy7m1I4bvvVnJH380CL8Y5a+/7eUvv2vlz5808Nc/NPPfP2/g375Wzbefzef+pmjWFlpR + G7oAs/tjxLs8SbzvEmJVatdQEVART5ES8zQ5ycspNVtRZrakXFBoWEyOfjFZuiXkx1mTHyv3UURRdowT + ObHuIgg9yY73JFOQIyI+T8R8loiOdIPKLuClRfxm54SQkyuQUqV+zi+MoKQkhqqKRKqrk6goi6ekMJqC + nGBpP/7kZviQbfbUDK3cDBeKst2oLvGluSqY9rpQehoj6WuJYbgtjmEph2Rs66sLo73cn35lEnYksHUi + j2dOjPLatTnun5/iwv4edqwuZ6AhjiIR0aa45WToLclOtiFXBLYSwfkZrmSbRESLADeqKGgRm8oAzjI4 + k2t0Ji9dxHK6DUUmCyqyljEo/fRctz+7VoRxem0cl9bruLgmlFMynpwccNJSQJ8b9uDcgCdnBzy0aN+T + HY4cb7PXyhNdnxrAl0d9Bf5cHQvkxgMD+P76FO7MJnB2JEzGNl+O9vhxpMtHM393N7mwr92NY/1+nJfz + X5+O5dZsPNdWRXNxPIyT/f5sqrRiY4Ulu5qcOdzjy9mJCE6OihDscmdroy3rqmQM63Lj4spwrq6J5uCg + B9tarYXQ2rKrw5WdIhA3VruwvtKZtWpMrnAVuLFWyjWV7swIZqs8WFPrxZoab+YaA9goImhLXyzrOiMZ + rfFhsMKLkRpfRkUYjdYGaNG/ygAeFw6wRbjJoelMjk5ns2ckla29eta2RTFdG6RF/irzV2G0xIOxUh8m + qoKYrA5mRUUQI2UBMk6705bhRF2yFVV64SFSNqTaUZ/moJnACnVGWTfZ0ZBhS22GNfVZ1rTm2dJZ5EBv + iQv9pW70lnrQW+lPZ2Uo9cVBn4sAVibpvAH8BFHhMv5GL9Wif1U6aBX9m5JkT1qKMn8dMCTYEi+CUxnF + sdHLSJFj5Ka70Vwh/WRHGrO9WazvzWF9VyazTamsqIxluCSSntwgmozulERbSH+0jLJ4W+mPXChLsKMg + zoIsNfeunDdbzpcZJ/2enD9FtiUL90oW7pWit8KUYk+WyZ0sswcmqd/mdGcyM5xRaZ4VcrLksww3UlPs + tPTVMVFLiBL+FhuzVMYXG5Lk2vXCE3TRNjLuWRAkXCAwyEZKBSvCQpbL/RA+kexEgbSPcqMVfaWubGoL + knql56VNGbyzKZ331xn4aDaJj1YbeGcqnWd69GzNd6dbrrdRUK+3pkLOpzLIFOntaS0IY6wljQm5N10N + iZTnB5Iin8eGLCZdZ0N+ghM1Rg+aUhV3daBL2uWQPONJkwOzmfasFb65NnUZa4VjzgmH3RAnnFiwUZZV + +uc1grkE+SzBQmDFWsG6RGs2JgvfMzgKnFgvz3BNgj1zSdKeP2MAr5d+aGNuADvKwznQpOdkr4nj3Wkc + UnM51USzvTiY/dWxHGsxcrgxja0VyazKi6XPKPVI7091WgRVWToq0yPkOfqRHSJjXID9AwPYm6GMGEaL + EukvSRCOKX2inC9Pfmee9DslkRa0+C9hJkj4YIwzN5J8eCcngi8XR/PVCh0fFofwdrY3b8ozfTPDnbcy + vaT05A2TK68Y7XnBYM1zSdY8nyjjt96CVwRfSLLlK9KPfVO+870sD36U48G/5LjxL3ku/DDHmW8YLPmy + 3Lf3Y57gnagFvBXzJG8nLOQLwuOVAfxhoasWAfyhtOkP6/z4YksQH3VH80qrjkuVOrZlSZtPDpXnHEJp + jJryQE+2IVnqjB5zYiwZybFkpyZIP5pESU4aPc01rOhv1wzgiYF2QSsrR9qYnehkdlKhg7XTXWxZN8Du + raMc3L1SlvuZGK6hpy1f++NkXITU7IpmNsh+O9YNs2fzBId2rNZM4O0bJh4ZwCoCeN4A/voD8/fb/OsP + vqmVP//RP/Gj73yN73zzYz585xVuXD7NxjVTNFWXkinXmypjfZog0xCPSX6HMoLnTd9oMhKjMCcIH0yI + IlOtJ0VjNsTMI1UnEP6XJr9buGO+8IvS1HhqTUm05qZraMxKocGcRK1RtqcJx0iPk+U46cNiaVDrxijh + +mE0pofSVxLLdFMKW/syOTiex6lVhVxcXcz1uWKurS7Son4vrczj0iopFWYKuLC6gItzDwxgNQewLB+f + kv5WvTxVH0VvUYDUUxfRfTZk6OxJibTDEOOISe9KgdFb2roneUkuwgFUlJIL1Vn+dJRHMdpsYG4oj01j + BawdyGG6J4M1gzlskPWdK1Ua6FpOb6zn3PpqLqwp1Uzoq9LP31yVyc2pNG5MJnNzwsDtaSPPr8vmtS3F + vLqlhGfXZHFjlVH2S+Xlzbm8v69MdFQdPzjXzM8vtfKfF+v5r3MV/OqsMoAz+K/jRn55xMAvDifyHwfj + +fk+HT/dG8WPdoY/MID9+d7GQH6wIZCfrg/k/zw0gLdE8gc1D7CW+nkemvm7M/KRAfyHAzo+OahSQcfw + J8GftWhgZQDPzwH8ZzX37+E4frsvil/LOf82AvghlNH7yZFYzeRVy48M4QdGsBYdfEyOfXzeLP79ER2/ + k23/fTyBX55I4V9PpPP9oxl8sD2F26vjOdATxISMwfU5tpRmOwhnciYr04P0TG9SzMIt0/2JNwYQneRH + lN6XyLgHiPchQu89j3hvwoSzheo9iEj0JjrFT+BPeLIv0amBxGdEkChaJbcqg7LGYsrqSymuKiSrMJN4 + 4ccRwsfDpJ0HhgXiG+CLn4K/L77+foSGR2BMM1NT20hrRy91je1kF5SSkGJCn5xOiimHvMIKzSTOVCmg + k1Nlu5GcghKGxybZu/8w+w8dY9XsWlrbe8jJLyQ0Mlq0nyc2WgpoZfY+NIBtPoWdtQZl/j4ygJ1scFA6 + UnTjo9TP/6sBrDJS2eP8ECrr1CN8agBrEZifMeLmzd8HBrCvivJ9YACHKQNYtGfUvAHs5W+Np/9y0bgW + +ItmClfRZdK24lI9HhnABeXSR9QYqGnOoHuwgo6+ctp7K+jqr6G9p4qWznLqW4po6ihjdm6IdRvHWTHZ + RXtXFW0dlfT019PZXS33vFCLyM0vSsGcKX2WWfqlDAXprzIitTTQZtGPOTkxlMu41dKSzYoVtQwOltHc + nElZmehYUzBpUo8yTWHk5eqorjHT2VXK9EwXO3et0qJ/N28eZ2xFC41N+VTX5dLQWsboyj6279/Imasn + uKLmoHvpGe6+epdnXrnLzRfvcuule5rx+8zLz3Lv9Rd48b3XeeWDN7nx3G1OXj7Lqg2ztPS0MTw1xuym + tWzZu53dR/ax+/B+jp07yfHzp9h1aK82H/Dc1g1s3rWV3bK+88AeVq2b1dJFVzfV0jPcy/Z927lw7Syn + LhxndGpAS/0cFR9KhMrqJf1zdmGa7FtKZ38Tje3l2hzLecUplNdk0dRerJnA+w5v4NK1o5y7eJhjJ3cL + 9nLpijKFn+cfv/UR3/3hN/jn7/0jX/zK+9y6d4NtOzfT1NpASHjgo4hzB2c7rU65eTpJnVERv86yrP7L + mIergsd8HXtUSh17aAS7ieadL+eNYDWtlaf6817WH8JTNK6fjyNhAW7ogqVOhXljCvcgL8KDIuEehVL/ + SqT+VQQsozbYgsZIa1qibWnXOdCd4Epfstd81G+CG51xzgLR4QnO9Ca7068igKWPGDQKjzcFMpYVzMrC + cOaq4lhdrmM4K5Bu2aczxYsuGTc603zoSvOnR/btzwphMC9cM4IHhMN0pAfQKOepS/CgPnEeddIPNaf4 + 0JsTzpTowi0tmYIMhvPDKI+2xhzwJMbAJygQTt2UHyDaK1Z0hI7R8mjRB1EMF4TQJ9qxI024YpID9fFW + GpqEGzcJ92kUHtgUt5QWQVvsMtplvVu/XH6rBX2C/gRrBhJtHsCWPuFKvcILOw0O8psctWjiWtGKFYnK + AF5GYexiCmMWURi1kJKoRVTGLaNe+FaTcOM2k7M2Z3Cr8PDWNCfNAG5VEA7eImgSvlZrchFe6EiFcPNS + 4WslwmmLpSyWMj9FNHaKNTnyWbbAnGorfEL4vVF0tyArVcFFuJT0+ylOmJMcRafaa0gTGOQ3JwnHVy93 + 6gVJsm6Q604RbZ+SbCnHsyEz3Z4c0bo5cg2aASw6uzzXg8p8T2rzvanJkTLbg+pM0d7yWyrTXCmWe5Gr + sg6JxlGpnlVZLOcuE15QmupGkXDnnDh7UsPno3J13vNRuSoKV5nACVLvEgOWkxQ4bwQnhyrz14aUcDtZ + lusNWk687KegooCTQpdhlDqaGS/6RXR4rvDzbNEDmerF7BgbTFE2pEVakSL7JQUvITFQtIx2Hvm+/2It + /bPaZpBjG+Rcap5fgzJ6w+X+CBLCLEkMtSY5wobECFuSouxIFP2jDODEWDti5fgx8p1I2Sc0SM39uxRv + Lyv8/VzwD3hgAKugk2A/6e9VtK8v/oFqPVCDMoF9/b3w8lEZCT2kTaugFietP1DjkIurjCdaKWONizWO + rtY4uFhpcHKzwSfAXfoQPy0COF54Zkp6gozxygBWfboBU0YC5iy9luUhKzseQ0o40TE+REZ4EiPtPlkn + bT/Fl7qsAAYKA1lXE8HOuhAON/hyvsWbm60ePNPgyM1qK66VL+F8weOcy3+ci4VPc61sMbcqLbhZac3V + Chuu1jhxrdGby03+nBA9v1s0+ap0a/r1i2gJX0B1wAJKPBdQ4bOAhsAFdMu2mZQn2Z63lAOlyzlWtZxz + TVaCpZxtWsTF5oWcqX2MY2ULOFS0gAN5UhY8xYlSSy7WuXJVznW60pU9uRasNTzOeNxjjAiGkx5jRdoT + jBmfpCVkAfV+C2gNWsBQ1JOsNixmNmUx04YlTCYtYyB+Oa2iw6siLEVXqwj05URIXfTzWoSn+0JcHB7D + x3EBka4LMPk+TluyNVtrgrk8mMTzkyncHYzlUlsIB8pdWZe1lJVpT2oG8IBgRfpjrCtczpYyO/bWenK8 + LZQTLVGiB4PZXuLPTJ4XLem2FEubKzLaUCbtqKJQdH5DEn19BQzJ2N7TXUJLYzbV5amUFiZSkp9IbXk6 + bY359LaX0Sdj/eR4Czu3T3Lm5HZu3zih4ebVI1y7dJBL5/dz5tQutm6e1FJAV1Zk0dBQTG9PI93djRQW + ZZOcEk9wmJ82xYCvqrPBPnj5ugrfUZlRhMv4OGkBV+p/d58gZQS7ExjuRXCUr0B4iyBEgxchUq8UIqN9 + iYjy01KTR8equilcMTFS6p+OzAw1raFJfkcR3S11dDRUUV+aS0W2jLPZ6VSaU+fNX0MiFfo4qvTx1CTo + aUxKptNkpj8nh5HCfMaKChlRRnBOpowdGQ8MYBNDnzOA503g0QIz44UZTAk3XVlsFmRomE8BLVCltpz2 + N0hnJM/MaH6GYD6aeKRAIJxARQz3pkTTExPIaITKRBnK1tgodhn07M5MY3dRFjvK86W+FLBJuPG6xhJm + mxXKWd1axUxrDXNtjWwf7Of42rVc3beHZ06e4NqJY5w8sJf9O7fIc93Etm0b2Sbl7r3bOH7iMM/cvs6b + b73Cx196n2/909f47ve+yfe+/y2+/c//wD9+/WO+8tUP+PCjt3lXONP77yvj912+IOW7772pGbNvvv0S + 77z3qmb4vv/hm7L9NW39vS+8zpc+fo9vfONL/PM/f53vfvebfPvbX+Wb3/ySZhirVM1nzxzRcPHiSa5f + P88bb7zwYP9/4Buy3ze/9VW+/s0v8+WvfMBbb7/M8y/c49lnVVrqu7z88nOawfvhR+/w1X/4iC8JF1JQ + JvZDfPFL7/2Nkf2OBvV7Pvzi23xBM61f16CWH+IN+U0vvXKPF1+Qc927xTM3r2jz814Rna5wSa73/Gm5 + 9uMHOSU88dThfZyT5UtnjnHl4iluXjvHvVuXee6ZS9x/5iL3b10QnOf+zbOCMzx745SUp3nu+inuXT3O + vSvHePbaCe5cOsbNc4e5cfogl4/tYf/GaWaHuhhsqBQNXEBLUSbNBeol7nTqs4w0ZKaKnp9He14a3UUZ + dBWZ6Ck1M1ydwxrh6Ov765iWtj1QlUlHoYHOYgPdJSkCg+yXQl9FGsNVUq+Ffw4Jf+8pTqVPOOlQQx59 + TQWMiw44sHMld24eZkFT7GNMFDiwvTWEPd3S+fTEsLcjgn0dYRzsjODUQAKXxk2cHjKypz2elSL221Lt + KYteTH7k0+QLgclTRCZ+iRb9WyxEKD9uMRnhj2MW5Mh+hfEWFAq5Ufvl6ZaSG7OE/OglFEUtpTJmGY1C + NDoSrRlMs2M804GpbFtmcm2ZzrZhVYY1K83WzMr2dXmu7CjzZb8MQIeawjjWEsmRZmWMynV2RnNuIJ7T + fXHsbwlhc4UbG0XgbqhyZXWpvTRsK8ZlIBjPXa4tr69yYWuDB9ubBU3O7G51ZV+nK4d6XTk64MLxQfXn + uyPnpbzc78TVXkeudTlws9ORN1b48fUtcfz0sJmfHDHxzZ3xvD4dwKVeF/a2OLG2yp6hYis68i1pKLCk + Om85TdLRD9U4MtPmzlyrM+tlv41Njuxud+bkqBfXVntxd4sXrx4I5M1DQbx9MIx390fy1q5wXt8aya2V + Qexvtmc673HWVy7h9Jg3r+2K5/1DSXy4P543N4ZyZ9SNMy1WHCxbyL7SZeyscGG2NIBuEfTlOiF2/kJs + vBYT77WctDBX6oyBbG2N5c7aHL54tJl/PNvLP57r54PDzVyfEfLcFCmE00eImTdmvQtJMWoui/k/cgMC + FmtpHlUUcHysI/HR9uiEBEWGWBMWuJzgAAtCAq0IDbYjKMAGL8/leHhYaHMAOzkuw85uMTbWT2Nrvxg7 + B4Ul87BfLrDAwdFSYPUo+ldF/rq62+Lt64yPkCdfP1etdFZvu7lazr/dqgYi2e7ho96SE4IkYulvBbqj + i0rbJWLcTYiUu7MIIFctCjg4ZN4AVlBRwMoAVggJ9SE03JfwSF8ZtIRIRftrJnBwqKdmAKs0zz7KeBZ4 + e9tr8/5qkb9B7trcv5GRfsTJAJeiIjhU6pXkKLlfwSTGh2kRwBWlmdRW5kmZRXGBicKcVHJlAExXBnBy + JKbUKDLTYoRsSynIUEZwRgz5eQmyfxLl0rgfpn5+aAA31ubQ1lRIZ0sJJYXJcoxwEuPkOmQAjhcYYgNI + 04eQlxxKtSGQVhFrIyI6thc7cafHl49WBvDPa7z48VpHfj67nF/MLePXG6343VZ7/rjLhT/tdoe9nnDA + T8pA/rTZl1+s8uSHfQ58s9mSjysW8WHp03y5ahlfq3fgH5rc+KjBndeqnLkn7e52vRc3WgK52BrJwbo4 + JjKDqBCCnOT8BKFW8wZwmNSRhwZwvKsrMc5OhDnY4Wu5VDOA/T1UWuN5Azjc3xZ9oINmAGdLHSiSZ18t + IrnV242x0CAmZeAdjwplNDqU/uhgmuW5lno5YrZbjsFqEcnWS0mROpcuAjtD6kWulwcFAb4UCfnO8fMi + 3dMZg9S/dG8ROsGeVEQHURMXTpUuhBIhMEVRAZSr+X9TdTSkxtJomEezIY6WZB0tSZ+iNTleQ5MhnsaU + OGpkn2opq5JjqU7VU2cyUJumUproqE6PEZEXTll6oIgiDxEqLiSHuYjg8BB4oQv0IFzaQLDUufAAFyKE + eEWEeIjQcCdA2omvJu5tCPC0JMRjKdEeT4sIXkhxyJM06J5gqsCCO9vj+cGbdXzyw2H4r0n43RB//UMX + f/5jC3/5pJX//o8GfvHtWn7yVgXvH0/ncIeHiN7HyXRfgF6Ib4L3YyKQHhPB9him6AUUJD5FQ6413eUO + 9JSLAK6wp0UIfHnK49L3P0Zx7CKKpP/PiRTxF7ZUSltydSIK45zIS3AR8epNabofhWY/EZY+ZKR5Y0zz + ErHiT26BijSIpKgoivyCCHJyQ8nLC6dART3Iem52CDmZASJKfchO9xQo81elZfakLN+HymJfGsqFQFcK + ygNprgiivSqUDik7ygNolc9rc1xpK/FjrEnHhuEMLu3t4cUL07xwcYYbR0c4tLGRoSZpe+mu5CTZSRuy + F7HtQJ6I6rx0F/JMbmRJaRZhnS5iVpm/Csr0Uim5cmWMy0sTMWFaRkXGEhms7VnT4cOu0VBOrdFxYW00 + l9aEcn7Kj7MjbpwfcefyCh/N3L004sOFAS8tFfTZHleBG6dVVPADA/jikLfAl8sj/lyfCufO6nieXWfg + 7lwiF8ejONrrz5FuXw51eLGnWcbSehl/Wl042ufL2bFQrqyK4ca0jisrI2XMD+P0YCBbapSgseF4nx+X + V0ZzYVUkx4f92dlmz1zF08yWPMm2BmtODHtxfmUwB/pd2NJiwbY2a/Z3u3Kg05NtdS5sqHRkbakDc2Uy + PpY7s0awutyFGRFoa6rdWVvvzboGP+YaBc2BQoKDWVnvL0TGW0v9rEzf8fogVtQFMV4XyIqaAKbqgtnU + G8uO4WR2DaUIUtnen8T69hhW1SgD2JcVZcoE9mG4yEMgxyn3Y7wigLGygAcGsAetZidqkq2oTFhGfYr1 + AwPYUcZHZf46UJtqK23ShmqjjOUmK2ozrGh5EAXcU+xCb4krPSXuUud9aS8Ppq4okHypB8oATtRZaoZv + ZNjTmgmsSl3UEs34TdJba1G/uVleGkxGFwx6O3SRy4iOWEqczkr2scMs2+vKIhnvkTF5ooI9U7XsXFHO + bHuGEMQImkScVxncyI+yIjt0ETmhS6hIcKA9J4AGaQeVUu9KDQ6UpjhSlKzehLcjU2+FUbeMROFhCcLJ + 9HHLSU6wIl32zTC7Yza7ihBzIyfHnYwMFw35ed7k5kh/KPcmMdGGWN1yYmKWaoiX3xMXayWlDTFR1kSI + WA4JsxXYC+wENoSHWRIfYy3twY7cZBG0cj8Hhaft7Ivk4nQq99eZeWUulddWG3h9ZaIghfsr0jjZGsN4 + uh2l/o9RIvevVn5LndlDixwoTpJ+XqWabTEy0p5Oc2WMNveZLnQh0YFPkhZtSYHeUZ6hBy1GdzpTnOiT + tjpmcmRlpiNzWfasy7RlrdGCOcMyZvXzEb9r9UuY0y9ijdSJ1bJtVrjtbKIFa4SnrhWsS7JhvYK0/w3y + DFU5p+YDljb/WQN41uwl3NWb2Wwv1hUHsbMhTtqdji2V4WwsDmZdfgDrC0JYXxTOXEE0kznR9KeH054a + Sm1ysIwBUdRmx1NliqIg1leerzO5gfYUBzrSHOPNqHCB8UI9QyUyruSHUWb2pCBFpdKzpTRyOS0Bi1gV + bMWhOFduGgN4Oz+Kj4qjZXyO4N3CIN58YAC/If3kG3Ktr5s8eDXNhefl+dxPsuDZREvuC6d/Qb+cVwTv + S935mvR938r04PvZnpoB/KMcN36U68IPsp34h6RlfDH2ad6Leoy3I5UB/ARvJyziC+kWvJ9lx/v5Tnyh + 2JUPKzz4sNaXLzYF8lF7FC83St8idXx7ZiQjCcE0RQZRHhMh9TaRAmOKIJliEf5lWWmU55ipFNFdU5RN + b3M1Yz0tTA12snKog1XDnaxe0cXcZPc8VnaxYXUvOzYMs3/7JEf3zrB9wyATg7X0tBQw0F7MeG8V0yMN + rJ1sZ8vqfnauH2X/lkkObJ9m69wYm2aHOXdkB+++cpvvfP1DzfRVBvC//cu3+en3vqHhZ99X5df5l+9+ + nW9+7SPeeuW+iMkDTA33U12UR1aKHlNCDLnGRA3KxM4SbpCZFENWknC6RGX+Rs4vq/TWMv4r5AhHzE2P + k/EwUZv3t1y4QW16Io2mZFoyUgUGGmW9PjVeuISOOuGZ9cJD6uW7ios0GaNpSAmjMTWENnMoKyr1bOhM + 5+B4IefXVHB5TRnXZks081dBRQFfWJXHhelczgsuzORzfraA83MPUcjZtYUcncpmW28yoxUhNEr9yY6x + ICHgKeKDlhEZIAiyRCdtPl76gDhVhlqiD7XAGCPjX4onNXmhdNUmsnIgn6mebAYbDXRVx9NTl8hgk4HZ + /lz2z9Zydksb5zfUc3amVK4nT8aoDK6vSufGVDK3pvTcXZXIc2sMvLrJzDvb8nh3cx6vzpl4fjqFlwTv + bMriy7sL+eejVfzr2UZ+camZX1+u47cXK/jt+QL+65SJ/zxi4D9FR/3bvnh+vlfHz/ZE89O9kfyLaK8f + bA/he5sD+P6mIH64MYifbQjmPzeF8avNkfxmazS/3xPHH+R7vxf8bm+cZgArqBTQCp8ciOGPgj8dipZS + 1g/ptJTQ2hzApw385WgCfzgYy693R2j45ND8PMDzaZ8/NYB/d1j3KM2zWp43fOM1w/ch/nIyQZCoLf/+ + aAz/fSyW3x6L45cnkvj5CSM/Om7mq3vTeHNrGrdmEtnXG8FkU4A8hwAZX/yoKg2kvCyMkvIoCst0FJTE + kVekUvMJ8uKFb8WRlRdLZm60hoycKFIyQkk0+qFP9SHJFIA+zZ94QZIpmOSMMJLNEaRm6UjL1pORm0J2 + vpH0rCTiEiOIEB4dKvooKNQX3wD1B7doN+Htmh4LDkSn05GbX0BNfSN1Tc2UVlWRbExDb0jBaM6koLiU + 4pIysnJzSDQkE5+UqC0PDA2yc89u9h44wMqZGZpbWzFnZcp5QnFwdcHaXs3/a42lne08Hpi9fw/KALZx + tMbe1Q4H0SMPdeTDiMzPa8tPtz/EwymHNPwdA/ghHkYCe/ioZeHtAcLfA9X8jSoFtNyPCC8tBbS3aGlP + fwvBMnyDLQgTXR+T6Ey8jG+pivtK315SnUhNs5mW7gL6RmoYGm9iZLKNsal2+kea6Oit1qJ/W7oqmF0z + xOo1wwyPttPVU0f/YDNjE10Mj7TR1lFFWUWWPH8D6eYYUtMiSUuLIC09koxM6aeyo8nO1VFalkxDUya9 + fSWsXt3KxHgtXZ15VFcbyMwMxZjqjyktmBzZv6raREtrISsmWti+Y0qL/t24aYyJyVY5XzGtneX0DrUw + t3kVJy8c4pnnr3H35ds8+7qa4/c57r1xn7uvPcfd1z/Fs28+z/23XpTPnuPU1bPaXMH9k0PUdTYwODnM + um3rOXD6EGdvXOTyM1e5fvcmt+7f5sazz3Dl9nUu3rzChRuXuSg4e+US+44dZnbTOi1CeNOuzRw7d4zr + d65w5dZFVm+YorKhhLSsZAzp8aSa9eSWmKhrLadL7l1Hbx1FZWbMOXoKSo1UNeTQ2V/Nxm2T7Dm4gc3b + Zlg9N8r23eu4eecCX//2x/zsP77P//nVz/i3//wJP/rp9zQT+MKVcwyNDpAgWlHNAaoylqlU0HZOar5e + B1w9nDQ8nNpKKwUPI80f4uF2lSpWg9S1h/BUL9OLVvaWz309HbVSvTQc6O0kfbgriSFeZEj7LI6T/iEh + iOY4X+rDnagNtqQpeDntwue6o0XjxdrRF+fIYKILg8me9CcrjehMm9RNhc54B3qTXBkweDKY4seQ1Icx + k3D4rCBWFYaJjohhuiSCAbM3nbJfm0Kyq+hkF1qT3OhI9aLH5EdfViB9mcF0ST/Tnuor+loZv65ybcKP + Nch3RC8OyNiytsHAHhlXtramMSVcR6VzLhLenRu1iLJkW9oKfBmpjmS0MoLRUuGPRaGM5MnxM5Tp7C5a + 3ZGGOCvqhdc2CK9tiLOgPm4pjbFLaRK+3CKctzV2CR2y3hm3jJ54FcloTZ/e5hG6E6zlt9vQlmBHs6zX + yXq1cOzyBEuK45dTJN8rlu+XyvEq1fHlulqMTrSb3ejK8qBLOFabSX5TurNm/jYLJ2/OlPIB6jNcRY84 + Cjd0pMLkoKVarsxwEg7oQKHRhvw0a4pkW758li0aJtNgK5zCXviHIzmCXOF5SpNmiy4wJdhr0xUpKN1i + kOtNkt+vdIqCigROEv5nSFquRQGrFNDZcuwcubZs0QMFZhfNAC7LFb2R702t3N/aXGUCe1Gb5Um1/JZq + xdlFyxQm2ZMTp0xgS7JirMgTjVMifLkk1Y3SNE/yEpxIi1iuGcAP0zCriNz5uXlFr/gvJSnQYj4SOEyl + gbYlNcJBW04IsiA+QPSIQKWCVtG6qRHWZMTZa8ZvdoIzWXplAKsoYHsydaKFBBkxtqSLbkmLUOmlrR+k + mxaNJKUxXNbD5d5EyH5xLqTHOpESaUOibNfL53rhN4nhtiRE2pEY5UCicJwkaRN6nQ0RocsIDV5GWIil + ZgAHBFjL+GZLgL/bpwZwoIr69cPXXxlrXloZEKSiLIMJCA7Q1r29PfH0ctf6gYcGsJYaXoOMOwJH6Rvs + na2kj7DCXmDnaKn1AX6BnoRGqLlXw2WM1GlzjCenxGnTiyQmR5CcKv269O9qzvfkVGUA+xIh441KA50Q + 40mWtNdKaattuf6M5PuK5vdhd603J5u8uNLizo1GB65WWnC+9GmO5y7gWJYgewGncx/jaukiblVYcKfG + nruNbjzXFcT93kgutShT1JPZdGuG4hfSHr6AOr8FVHrOlx2hjzEe/yTbspZzoNiSE5XWnK634VK7Axfb + bTnXupTzLYs51fAkRyof41DpAvYXPMa+/Cc4ULCYw0XynTJHDhU7sD3LgnXGp1ltfIpV6U+L7lvEdM4y + pjKW0Bn1BD3RjzOevJC1Jks2Z9kwl7qUyYSnGY1dRJf0F/WiqUuCl5ATskTq3RL+f5S9BXQcV9a17ZBZ + zMwMLakltbrFzMzMDBZYDGZmZo6T2LGdxGFmxgnTTGCSSWYygQnT5PlPlexM5n2/71vrX1p73erqquqC + e+/ZW7vuucFSH90cr8LR7krsrebgbj2HILs5xLhcQaW0ldEsV3bWBnGyLZTj9T4cLHdlR5E9a7LMmEqZ + x9I4xYC+gpGUq5jJWsw6Oc+tVe7sadKwpyGcjWXBTGd70Snts1TabU68pegAaTPS/tPT3IXj+JJVEEZB + SYxwIANpaWGiz0PV/wsXSKxuaRBNs6SeqfEOZiY62Six5+D+NVx7cju3nD/CxQtHBUfUZWVE8PWnd7Np + 4xhtLaXk5cRTmJ9MVWWexO88DNHhBAXPjvh19XSUWKTMU+2KkoXC1sECJw97nD0dVAPYxct+dk5gKZWR + wMrIX1+Ni4oAjatwGFlWprQQ+CsvtgUopTvBIVI3w/wI1/oTER5AbLTopNRYSgsy1Cl+6sryqZLlctF8 + igFcnppAWUIMRVGRFGvDKAsPl/5ZJ7Eihi7hhQNZ2Yzk5wnyGczJZElmGkuyZ03gPtGOvXIMxQC+DMUE + HshJYWlOKqO5aQJlFLAs58m67ESGMv9fSGYwK/USlOXEWeQmSBlLV0yI1C9v+oO8mQz2Z51Ww2aJ6VtT + 4tkiv7shP4M1xRmsKsthWXkOk5WCqjzGqwsZqy5msqaCFcJfdw6PcN2mjdx88BDnDh7gyPatbF61nFUz + 40xNDjOzbIwNm1Zx6PA+1VR97vmneOPNV3jv/Xf4x2d/4/MvPuGTT97n9ddf4smnHuHOu27m3PnruOOO + i2r653vvu4vbbr+ZCzfd8Pv8wQ89fLdq0t555y2/zxGsjM595dXn+eCDd+R4H/C3T97j/Q/fVkcY337n + TZy+7ihnbzyl7n/vfbeppu0HH74j273PXz/6M5/982M+/fuHvPnWy/K7d3D02EF27NjGrl3bOX78sDoX + sGL6fvjXd3jvg7d4/4O3f8d777/Fn997QzW033n3tf/C2++8quKtt19Rje5ZKMuvqN8r5/z4Ew9y7923 + cuHcDRw9vJ9dyojpPds4dngvRw/tZs+OTWzbsJr1y6dYJ9ixbjVHdu/g+pNHuPu2czz10D08J9f/9IN3 + 8Pg9t/DI3Rd45I6zPHj7ddxz0wnBce6+8RC3nNrNhRM7uPX0XsE+Ll67j9tOH+SmE3vZs2aSoaYqiYsJ + 5Covs2sDVaSFCaTMULKeXSoztUHkRASTExWsTufUXZbNcEMxw41FtBenUpqolTjqJfHTmwJDIEXSdxfH + B0sZLP2GlDFBFIrOyosKIE8fSI58zpC+vig7mpGBRukT1jKnQjq/JRk2rKqWytmgEcIUwoaGEDbVB7NN + lg/3xnJqOI3DfQlsbtIxURxEW7ITZUIQihUyI6SlOFaWY80okbLAYEKubrFcwDwyw+aTr2wTYynbmVMY + bap+LtCZUhhpqpKeWiFFHUJKBoRAjGU4MJVlz3SONctzBdlWLM+0YmWmDWtznNhU6MHuygAONoRyqClE + oMyrFsaxtkhO9+q5YSiOU0ti2N0cxIYKV9ZVuLC+Rplv0IHJIitGck0ZzjWRZUvW1rqwpdmTLa3ubGuV + DrrNlV2dLuztdWJ/nyMHeu042mvLiR47TnXZcLrDmuuaLbmhwZx7+lz408pQ/rojgX8cSuP93XE8uzaE + O0Z9ONrloqa+HC21pLPAVDV+y7PmU5u3kL4qa5a1u7KyzYU1La6saXRhU4sLu3vcOTzszIlJJ25Y7cq5 + tW5cWOXBTSs9uXmZFxcmfTje58GmKgtGJKhOl8zn8JAL922N4IXDMbx6OJoXtmt5YJknZzot2Vt6DZuy + r2RllhHDWS40xbtSJKQk2VeIk8cCojyMiA+woyzWg9U1wVw3HMtDm0t4/kAzr53s5vlDrdy6KpdtbTra + sn0pTvQiWeeAIdQSrZAexQD28pqvmsCBQaZoZX24xkI1gEOEDCkmcJCfQn4sCA60EQJkhYebiZAYM5yc + hJTYGWFltVA1gGfTPi/CykZJ+SywNhaYqGRGwR9TP6tz8V4yf383gNWUJ+aqeFbTaLnZi7ixVYmP8oaS + QpL+G1YqbOyVt2ptRRTZ4e7urI76/aMB7B8wi2CNN5oQH0K13oSFK6WPagYro4CVOYDdXBURpYy0tFTf + nnWTAKgYwP7+zgQHuRMqnb9iACsjgONihXBFBhAa7Emk1k8dAVwqnX95cSaFEmyyMmLJSNKTEh9BnJIy + Wh9EYmwwyfGhAs0sEv5jAOflGCjMjUWZB7iiJFk1gBWoBnBtDq1CBAqFECgGcFS4B1qNMxEShKNCvYgO + 8yYxzIscrRslQlqbwo2YTjXj+kZXHh3y4PVpN95fZsenM2Z8tdyU79Za8pOS/nmbg8CR36RkmwtsdueH + 5c78fcCeN+tNeb54Ho9nXsmTQsReKl/Mm412/KXLk7d6/HiuzZNH2ry5rzOAO3o0nO+N4kCDnvGMAEoC + zIm0voIAszn4W15NkK2RmgI6wsmeCDt7NNZW+Jqb4mG6CA+rxb8bwD4e5gR6yr7eViQoBrDUgTx5/iUi + kmvk2XZ6e9AX4ENPoA+dQT60CKqEdOe6iuixMsFgtgC9HDNGlhNtrUhztCfH1YU8LxG+Pl5keriQKMeJ + UeYGlvqWF+BOmTaAikgNpUJaFAM4P9SHUnleyj9ea+QZV0eHUiuoFzToQ2jUa2gRUtMi37XGh9Mmz7c1 + MZKWpEgaEiOoS4qgJjGc2mQdDWnR1KXoKI8PkU48UPpOOYdIBxKCrEToiLiQdqvzd0Tn50yolxOB7rYE + eNig8XUgTEhVSIALgT6OqgHs6WqNp4sFfi6mBDsbEeE8n3Rps8UBc2mKmM9MkTV3bI3hr4818MuHQ/DV + BPwg5Y9d/PpTs6CJH76o5ZsPqvj8+QpeO5vB6WFPliZfQ4H3HJKErCf7KFMAzCEnfA6FUXNEmM5joMKS + 6WZ7ZlpsWNZqy3CVMS1SJypj5lARdYWQtqvIVl4O8r+GzKBFZIQYS7AzVdM/FcU7UZToRn6yu4hKN9KT + 3IiPUwwpeWb5wRQXRVBcHKEav4mJniQkepCU4kVSsvJPJneSpK9LjnEmKdqe5Fh70hOdyM1wpzhHREye + J5UFPgIp8zyoyhVku1OZ5UxVhsS0VFsRoBZUZzrRWerPeKuBfSsrObunl9uOj3Pz4VH2rKqlpyaS/ER7 + smNtRWhLnRCinpPgIILbkUz5vTQpU+McSIlxJNngIOLaTjWA02OtRXibk5VoTF7SIkqS59Oeb8ZEvSMb + e7w4MB7EsalATk37c/2UL9eNuHP9sDvnxrw5J7Hl7LAPNwx4cf0SD84MeHKdxISTva6qAaykiD7e5Sxw + VU3gsyNB3DSp5ZZlUaoBfMNYBMr8v4oBvLvZRTWAN0o82tJgx75Od44N+HPtWCg3jIdw3WiwagCf6Pdl + U40lm2usONbnwxk53rXjwRIf3djYaMZ08ZVMF17JuqrF7Ou248iQG7u6rFhbv0h4hDG7uxRzeXY6ibXl + 1qyUuLtM4vDyYmtmim2ZKrZhqtSWmXJHVtS6sarekxmJ15PV7oyKIBoqc6Wn2JnuEmcGyr0Yrva7BH/G + agKYrAuSWKpldUcE6zqi2Nwb878M4MtYkudCX64LSwrcGCh0p1/qgIIOiY+NyXZSN80o0xur5m9tvPX/ + MIAtqZDnVhanGMDmVF02gHOtZg3gfMdZA7jInaZCb/WfH0q6b+WfKYoBHBG2WB35q8wDfNkAVtI+xxos + VeO3tDCQEkFWugexOuVFKiVt9GJ0kZboo6yIjxEhmBfEQFsq68eq2DndyNaxaqbaMqnLDKAgxon0UHPi + vOcT732NxPl5FOmsac32p0XQkOFJbYbU9XR3ylNcpH05khVrQ3KUOQZ1JLIR4eGLJU4tJlqZizhJMX+l + Hqe7kJnpIuJS6rIgR64rW9pLSrIjsTHWcn5msp8xWmWeY60xYWEmUpoRqjFFI3wgSGMl4s6WoBCb2WXh + BxGhZsTKfmlRJhTEGdNVaM/69gCOLJU6OhLN+aU6bh7ScXEwiotDsZzui2VrbSjtsZakecwhVxkFnO5K + Y54fFaluFMU60lKoEVIdT2+9iMYsH+LCTQnxvZowQbz0LTmRVlRJH9Ic7yyi2oElIqRH0oQTptuyPE34 + ZYoFyxKMmY5ZzGTUIiZ1C5nSL5Dl+UzqZ9dNGRYLJEYaTFmmmMDCZ1XIM1webcUKgVIul3auGMAzigkc + Z8+49AXDcr/7pe0Pyu9O5HmrGMlwZVju8VJ5HkulnxtIcqcvyYeOeHleMT4SQ/woi/YXoSuxJENPVXI4 + +ZHe5CgjcSQGlAjaIqVNiPAfz41kqCCC9uwAypNdKIy1o1D4eanUoybfhYwLJ9sV6cTZRB/uzwzmkexA + Hsr24YFMT+5Lc+b+FEfuS3LingQn7pZ6e0eMDbfI87lFePwtUUbcqjPijsjFqgH8eLQlLyba8UaqI++m + O/Ge9JvvpSnmrz3vpljxSvRinom4hidCrlBHAD8iff2jhgWqAfxYihmPZVjxWI4tTxU78VS5K89Ue/FU + fRB3VgRxPC+ADUkB9IV7UxfsQ7mI5bL4WIqSEgRxlKUnU5OXSW1+NrUFmdQX59BVV85Aay3D3Y2qATw5 + 2MGy4S5BB8tHO1g50cG6Zb1sXTvEni3jHNw5w+bV/Yz0VakGcG9TPkMdpYwvqWZmqIE1E51sWNbH1tWD + IgBHWD3Zy6rxHg7vWssDt9/AWy8/ySfvv84XfxMx+5EI27+8zgciZj986yU+FNH51z+/xrtvvMSLTz/C + 7SKmd25cS19LA0UZSaTFREq/oCc73kBOolJGkhknsSwmTNpjGJnCEbNiQ2bLuDBy4gXJkeSmRFGYEk1x + cjSVSdFUC+oTo2lIUKCnTnlxzKClMjpklnvI8erkeHWxWhqERzTE+dOcGEhXpoaJKgMbO5M5OJbH9ctK + ODtTxNnpfOnbc1WcnlDm2s3k+EQ6RwXHp7I4Pp3FMcHRmVkcW57DnpFUVrVF0ZHjSZFBuInfPIKFDwS5 + L8DHdSHe7kb4epvi72GMr8diKRfi77mAUD9jaZ925CRJP1mgpbMphbbqWKryQynO9KdU6nBVXjB9tbGs + HSxk//JaDk2Xc2gkjyPDqVw7Es8NozHcOBbJTWPh3D6l456Veh5Zn8DTm9J4Zn0Kjy2P46HJaB6fjuW5 + 1Sm8tjmT9/YU8vcjFXx1qpJvri3lu1OFfHsiiy8PJ/KPPXo+2xXF37ZqBSG/G8AfbQvmr1uD+WCTPx9u + COCvawP4+9pAvlyv4dsNWr7bFK4awD9sj1DN3++2haspoBV8uz1ExU87Q1X8vDtENYB/3B2mpoT+94HZ + UcC/7ovkh51hqvmrGsZ7dP/LAFaWlbl+v90pvytQlpXRwIoB/O9DUb/jt6PR/HbEoC7/cEAxgLV8eyCc + rw7p+OxwHB8dSuKN3ck8vy2VRzdlcNPyVHYNRzPTraOvPpTW6hBa66NoaYylqSGB+rokQTJ1NYKqFNEV + ojEqk6gsjxfEUSHIL9SRLvw9MVn0hCBOKVP9SEr1JzFF1qeIjkkUJASRnBJBerpeykgMhkDCI3wJlbYe + rIwUEd7q6SV6StFPUvr5uRMSEkBKWhIl5cVU1FZSVF5ETFIsulgdsclxZOQqo4AzSElPUo2ysIgQklMT + aOtsYc2GVWzYvI6h0UGqasuJTYxRR1pZ2ltiKlzf2MJ41uRV5/r9v+OyAWxpb4GV6JHLOtLW3krFZeP3 + Mv6fBrBoEiVt4v/bALZW4Sr3wN3bDi8/4fIBTqoR7OUn63xEa3qb4eJtpBrA/qLrtQY79AmuJCnzv5eK + dqhLoLkzl96hSoYnmxmdbmd0qoOl4630DCgmZTn1LcU0tpcxuLSV/sEWWjsqaWouU43g0fEuWd9GS1sF + BUUppGZEyTMMxRAbpM4VqRjA6enhZOfohJPrqahMpLk1R/YtY9myVsZGa+jsyKG6Ol74QwjKPMCJCX6k + p4VQUppIdU0mvX2VrF03qJrA69YvZWZ5J/1DNSxZ2sj4TB+bd63muvNHue2+m7jtgYvc9uBt3PHwHdz6 + sGIC387N99/KTffdzAX5XoGyfPbOG9l5dCfT66Zo7GmivKmcbokFM+un2XlkJyfPn+Lmuy5yx313cs/D + 9/Pgk4/wkIKnHpXlh7nv0Qe44/57ufHizRw9fYK9Rw9w4swJzt12jtvvvZVb7rzA1j0b6B/torKhlLyS + TDX9c1ltPq09dSwZbqddyrziZBJSpa4r+rwsRe51IZPL+1i+dilLhlpokXs9vWIpFy5ex1/++jpfffd3 + vv3pC77+7nO+/Pof/PmDt7nzntuYWTEj7ShR2kegahA5uztgqYxGl/qnZDGbhVLHFON31vy9nIL8f6Yi + V1PFChTj11nqoAJXWa+avooB7GyDu3zvKev93ewI9RaOF+BGlsaL8khfmgwBtOu9aAl1oDnYgo5gM3pC + zFgSZkF/uCX9kTYMitYZEC7aHe1Am86WRvmuMcyclgjhyXo7We9IT4w7vbEeDCZ5sTTNh4kcf5YVhzAu + sb9b+EezaMDGKBsadTbUCxdW0KgcT3Rdh3CkNkFTnPC/WBfR145US92virKdhd6WlmRXBvICWSt92O7e + DDY2x7G8UktfppvESDN19G1Nso3wTvl94RxLywIZyPejP9ubJWkedMv+HaJBmw3W1EWYUSO6tFY4bbXw + 3CrhxzXaxdSGXTKAtYtoFrTI+vYIYzpk+8vmr2IGt0WY0iT71oWbUSn8uFyOURJpLNx81gBWUCjcW1lX + JTyyIcFOzt+Jjgw32tNcVANYMYMbhG81KOavoE54uIo0R2pS7alIFn2SZiOwFd3qQG2Oo+hZB0rSREun + WlEsHLcg1Vr0qWiNWGX6FQvhIMoLy9aiV+3IjLclQ7h8ks6CODnfOLkGRbf80QCOlHPXRSh6RDGATUiI + M1PN38xU2T9JNLZiAEuZJ+dVKHywOMuV8hxFV18ygIWvV6TJsqBU9HGB6OZsea6KCZwm9ydDdE6e8Ob8 + WNlXnm+O1KPEEBP0PgsupWP+Y2pmZVSuMkr3UjroAHNiAy1nDWBZVgzgCK+FKhQTOMpvMbFBpiRLHU2T + OqVAMX8vG8Bp4VakC5QyRWtJcqgVSRpLEkW/JAmSQyxJEiSEyD0Kk311jiRFirZTRvoGmREZIBoo0IyI + IHMipV3oQ62J0tqgl+Ppwi0I9l9MgO9igvyVwTCm+PpZ4u1jLVAyC85OP+elZL7w8cDd0w0XdxfcpPTy + 8cE3wF/6fR/1u8sGsDL3r5ICWoktSmp4axtzbGwtVFhLnLKwMcHc2hgLaxPMLBernx1dbfH2cyNA40Ng + iB+BGl/RY8r/Mb2kb5E4q/VEp/dHHxOIzuBPcKgbgYHK/y9d5Nm7kxznS0GaH9Xp3rRJvRzOdmZ9mRv7 + qt04We/IdTUWnCpZyNGCq9mXNYe9aXPYJziUPofr8q/hfIloiCorbq9z5J4OP+7uDuFMkz97i5xYFm/M + YMRc2gPnUCv6TknF3OQ7h/6wa1iVZMSeAiuOlFlxus6W65vsONPuwHVtNpxoNuZYo/xm/XwOVl3DvtKr + 2C2/vyPnarZlXsPWjAXsyDZjW5YZGxQDOGmhaL2FrMwxYWWBBSsKrZnOtWBpohGTKUZsyLdhd5kru0tc + WC36fij8SroCrqTe+0pK3K4k0+Uqkt2vxiB1MMT1Gtxs5+BoLbCcNYAD7eagc7qCAo2RaEw7Vkr/srcm + UM7NS87NmV0ljmwqsGFlphHjydcwkXo1E+nzWZZtwtoSezaJDtrWEMqmGi1T0hf2JEobEt2qvCyhjNhP + TrAWDmWHId6RCOljw2PdiErwFS7kS0SUN4YY4Uop4VRVZjE20sH2rTPs37uWPbtWcfTIJs5cv4fzNx7g + 4k1Huf3m49xx8QS33XqCizcfVddv2zpFR1sZOVmxZKZFk52VQGpKLKGhAfipacldhY84C1ylfrqoBrCD + xA1nT0dcvBxVA9jZ0w4bZwschcd4KuZuqDs+olcVKKN+leksvAMVPuOAj7+STlp4njJgJchTuJ4vYaF+ + aMP8iI4KISMlhpL8dGpL8qkuzqYiL001gMuUEcAp8ZTEGSiKDKc4NJSKsHAaIqJoi46jLyWN4axcxgsK + VAzlZv2fDeDMRIkJSpnMElmvGMBD2SmM5KSqUIzgkZxkhpWRwVlJvxu+S/8I0XRLM1JkOfUSUhiW4w3L + 9ktzlO3j6IrW0BHiRX+g6P4gP9aGBbPFEME24a+bM5NYn5PGqvxUlhdlMCOYKMlgrDSL0bIcQR4T5aVM + V9ewuaeP4ytXcWH3Xm7cu4fDmzeyZnKMscFeBpZ0MDyyhNVrZjginOX+B+7mtdf/pJq/n376Md999y9+ + +PFrPv/8E1579UV1vt3Dh/exfccmjh0/xLnzZ7hw4RynTh1X5xDevWcbx08c5OLF89x62wVOnjzC3r07 + 2H9gF7dcPMfzLzzF+x8oxvLHfPnV3/n0s7/y6msvqPP53iB86fyFG7jrnlt55LH7eOPNl1Xz+etv/skX + X/6d777/gq+++gdvvf0qt91+k3C/1fT397Gkv5fVq5dz6tqj6vGVY3/+5afqPpehHOefn/9NNZH/8dlH + /4W//+OvqrH86d8/4JNPP7yE2WVl+w/++g5/evlZ7r37dk6dOMK6tSuZnBhhzYoptm9ey44t61i/cobJ + pf0MdrYxIJgeXMK2Nas4ffgAj8o9e+fFZ3j/led494Unef2pB3nl8Xv50yN38PxDN/Hk3Wd47M7T3Hfu + ADcd28KZA+u4cHQLt53azZ3X7ee+s8e48/RB9q4ep6e6mJwYLXFS73UejkQp8HSWuCaQ9hXldQkerui9 + XDBI28tSfIT8NPpqiuitzqcmK15ilq/EOFuJk3YkBLlKzHQXuBEvy/HSd8f5ORPr6yz7O6H3dSTS1wGt + tMvYKH/Rd0Ws3zDOnKrw+dIonJgpD2R5VbCKFZXBrKoIZJ0s724zcKg3iT0dsaypC2e0JFiCgDtVcQ5U + JToICXGiOs2B6lRBih2lCUI6hGQUxZhRHGNOeYKtmqqkUpmDURlpI2SmUjqy6ng7NdVJmywPyjEmhSws + y3FhVZ4zqwvsWVtoz7p8O4EDG/Od2VLkyfYSHwk6QRxuCONYs5ZjLeGc7Iziur5YbhxO5MJ4MtcOxbGr + KZANlW6srVTMWE/W1rmyrNyOsUJzRgvMmS6zZV2DO1vavNna4cX2Tk92dQl6XNnT58zeXgf299pxuMeO + o922nOiw5lSbFacazSUQmXJ7lwPPjPvz1rpIPtmvjAJO5PVtBp5YE87ZIR+2tzozIwGvp9iE+vwFlGZd + TU3+PHolUK7scWdttxfrOrxZ0+zJumZ3Nra6srXLnu29NuwctGLvsDX7B205OGDP0SWOHOmVwNTkzKoS + c4bSJXAUL+DAgAv3bo3g1VOJvHt9Im8fi+G5bSFcHLbnYM081mXPYTL1GukQbag1OFIgZDxVyEiMECOD + lxGxfrYURjkzVuzDrtYgrhtO4I41RTy0rYb7NldzdjJbyHMUDWle5AnZToqwI0pjLhXovw3gIMUADlFS + Q88awGHBloQFWRASZCmwQhNsO2sAe5ipBrCzkxn29sa/G8BKCujL6Z5VCHH5owGspn4W/C8D2Os/BrCd + k4Uqnl3lszIfjoOLkvrZUn0LTiVJv5u/AlsR8QJ1JLC9DQ4izJVRwJ6errOpn/28VAM4INCLwKBL5q/y + dlKkvwpthJ+QJs/fDWDF9HV0MFXh5CjX6Gp5yQB2mTWApfMP1/piiArGYAgmIkyIl3wXJuQrKT6CsuIM + SgvTyZWAm6LMz6F0DHoNBvmtGF0A8YZAEmKCSYwNFASJkNb8lwGsvPGljAIuF9F52QCuqZg1gZUyNzNK + 9vcnItQVTYA9If6OhMt5RQZ7YJCOIkmZU9DXlLLAeQzGLuZQpT339bny8qQb7y1z4B8rrPl6lRU/brDj + l80O/HuHE79us+e3bXawVT6vc+SbcTs+6rTgTyULeCLjKh5MnMNjqXN4UT6/1+bA34f8+dt4GH8eDeWV + MS3PTeh4dELPnWPxHGmLYSonkGKpV1rzOaoBHGh9DRp7E0IdLNE62BJmY0OghQVeJsa4my7C848GsPt/ + DOB4IRRZPo7ku9lTaG9Jmb0VDa7OtHq50+ztToMQ6Woh2yUezmRJHUkS0hxtYYTBzFhKE+KtLclwcCDP + 1ZUiL08Kvb3IFEKe6KQYwJb/MYDDAkXMBVMY7E1ekBcFob6UyjOrigkTERpCpT6Ymqgg6vVBNOgDadb7 + 0R4r/WZ8MB2JGjqTQ+lKj6AzI5x2KVszImiRsi1TJ9DTmKqlXIhdod6NnHB7kpS3XEXYGHzN0fvZoPOb + NYC1IiKCPOzQSBAIk449IthV2p6Qdx8hWLLe29UGXzdrgt3kPrqYYnBZSI7vIiqDF9It/fMGIfD37Urm + b4838+sHI/D5OHy3FH7o4d8/K6OAm/jp61p++LSar18v5707srhtXQBryoxoMVwhxGsOVZFXUBt9BY0J + V9KRfhWTlSZs6nZg34gbB0adOTDmwrYlViyrW8TSwmvoTL2Ketm3VPYt0FxNjmYeGZoFpIcsICvCRMSh + DQUSW3ITnckWsZie4EyCYuYmuJKfp6FSSW1XbiAzM5DoGGf00rdFxzhK23IkRu8gbcaO2EhbYiKEMOtE + 6Mn+uekeFOd4U6qkqszzoVTEaXm2QMRpcZID+UKuC+KEbEebqChOsqY+y4We8iDWDWayf7X0h/uWcMuR + CbZOV9JeFkaexK/ceKkrCU4qcgU58c5kyHmnS5ke50SanF9qtBPJUfaXDGCpX6oBvJh8xQBOmktT1kKG + qyxZ2+HCbokdB0a8OTHpyw3Tfpyd8Oac4OYpX26e9Jf4Jhj14/ywL7eMB3BhxI8bBj05JvHoaKc9R0Qc + He1w5GSPGzdImzs3HsJN0xFcmNZx42QkJ4aCONDlxa4WZ7bWK6JDMYDt2dflMWsAj86av9cOB3B6aQCn + Bv1ElFizrd5aYqG7uv7EsD/7epzZ1GjGqsq5rCyfy+Z6I/b32HB4wJHd3ZZsaFjIxsbFsp0DR/o92d/h + LsLGjtVligFswfISS2ZKRYAVC0pthHvYs7JOMYA9mKpyYbTCieEKV/pFOHVK/O8sdGBJqTtDlb6MVPsx + WhPEZH0I040hLG8OY0VLGGvaIlXz9/9uALvSK8K1N89FIMt57vQJOrJcVQO4KsaCMoMpNfHW1Irgqhbe + 8h8D2IqKeAvhMmbCYSyoSbegOduaVhGNswawEx0FzqoB3CjHLE93ISPamlitKXqtMZHhRoQGL/gfBrAy + l5YVRQX+1FVHCnTSjwcSr7chPHgxWhGSeqm/hihbYg32FGQF0FWfxIqBUjZN1LNhrIax1ixKUvxI0doQ + 7bsYnfs8DO7XEOt5DXlaS5oy/OS8QgTBdBWH0FIYRG2WlwgoN/KSpI7G2kobMSMq3JSwsMVopB1GSBuM + i7MhJVnqcoabtDM3koW/KVAM4NwcT9JShWDG2anmtDLqVxummMDGhIWYiIgzVQ3gEI3E/lAbQrT2Ej8d + CNXaicizlms3wxBmInzCmGz9Yqn/FkzWuLG1zZ+9bSKYlSlH2jSc7ozgup4Y9nVEs6I6VLii9Nc+V5Jn + MKe5OJDWslCqs6RNS3vrKAllaXM8XVVRZEvfodcskv5wLuH+ci+UuYK15lTGOtAc70R3kqPKN8cyHJlM + s2NZqhUrkoUTxhsxEb2Qcf0iRvULGDfMVzFpWMyEYRGT0YvV5akYE3UU8LJo81kYpC4bpE7/bgDbCOxU + KAbwsKAvzpZ22acjxpIeuY/dgvZYKxGsFrLOlq5YJ/nsQosyqiXamyqDNyV6X4qi/SlJCJW+KJr6DD1l + Ev+LI+T5hblSK/F8iXw/lSr1Pz+CyaJw+nIDaEh1kTqr/FPUnBqpQ22BRoyHWLJD58R18V7cnuLP3ane + 3JnqJsvOAnvuSLLjduHyF+WZ3iTXcF5vznmdETfpFnOz4KIs36lbxL2Ri3lU7v+z8Va8Jlz+zVQ73hHu + /26KrYq3kyx5LdaY56Lm8ZT2Kh7XXsljuqt5PGYhj8Uv4uEkIx5JM+fRHOtZA7jUhacq3HlC2vTtJX4c + zfJhTZw3vWGe1Af5UBuppSYpicqUFCpSk6jOSKOluIC2siKBlJVFdNeV099czdKuetUAnh5SDOBuVox0 + sWq8mzVT3WxYsYTt60bYt3WSw7uWs2XNIKN/MIAHO0pl30qmBupYOdY2OwpY9tm6apBlI23MLG1n75bl + 3HH+OK8+9zAfvavMAfxn1QT+21/e4L03XubdV5/jHRGH7731Cn9562Vef+kZHn/wLs6fPs76ZZO0VZdR + kJYgcS1aYJD+X7hbspTJURQkRFKQGC5xREt+YqjElRBZDpV1YbKNjoKUKIpToilNjhbNZZC+KYq6eOHm + cQp01MWEU62X9mAIoSY6hPqYEBpiQ1U0xWtoTQykJyOEwYJwltfHsFWZg3pESe9cwI3TBZybypX4kMuZ + 8WyuVQ3gDI5OpHF4IpXDU1JOpnFIcFCWFRyeyWTHcBLTTeHUpUo/Iv1cuOfV+Dldia/LAtydFggPNsLd + XZn+xQR318V4ui4UzBO+Jm0zULhalCvZqYGUFcq1KfP7J3qRKLEyRdpBVoI7NXkhDDcmsWGggO2Duexe + ks6+vjiOD0aLVomSuBjBrRLb7lkeycNr9DyzKZ6XtqXwp81JPLcqmmen9by0LJY3Vifx7sZ0PtyVw6cH + CvjyWBH/Op7PN8ey+PpYGl8eSlAN4L/vjOTjLWF89LsBLOUODZ/skHK7RjWGP92o4fMNIXy9Ucv3myP4 + YUvkrAEsUAzgb7eFC8L4Rva/bAD/uFMjmDV/LxvAPykG7h6tmg76533hfCe/oZi/320PnTV///8YwIeV + kb+z4KgBjikmsOx/UI57IJTvpfz2aJRcdyx/P5rEX/an8cbuLF7aXcTjO8o4v6GAvZMZrOqJl/utZ6Qj + geGuNGkTGfR3ZNHXlkVvq7ST5lx6GnPoacqmszFDkCntJ4PG6kTKC6X+ZmvITvMnKz1AtEwwOZnBZKcr + CCUrNZTMlBBy0qUuZ0eTJ0hP0Qqn0xAvnDjG4I8u0lvigysBolH8/G3VESLKy7bJ6dEUlmWpoy7zyzKJ + S9UTERuCPiGcxIxoktJjSJB1kdEagkRbxSbqqG+uYHxmiMnlw3T3t1JckYM+LgxPXyfM7YwxFu2pwlqW + L0MxhQUmsqxAMYkVXDaALRQDWIFoSAXWoi8U/NH8VXDZ+FWyTF3ONDULxQC2wd5ZwX9S8yppeWcNYFsV + TqJjFSiZrFy97XD3Eb3rK/pU4OFrK7DGzddCYKIawL6ivcOEH8SmepGeH0Z5XSJNnTkMjNYwtbqLFesH + mF7dpxrAS4Ybae2poqmjjMa2Upray1Xjt7mtgpr6AmrqCujpa2B4VLYdbFZHAOfkJRCfFE50rIYoiTfR + 0QEkJoaQnS39VmGcOqK3rl7qQ3cxwyO1rFzZwfh4PV1d+erLAwUFyvySol0TAkhLC5F9YmSfZNrbi1m+ + oocNm4bZtGWEDZuHWLm2lxVr+tmwbYo9RzZzw03HuHjPOS7ed5PgFm598FYuPqQYv7dw5s6zXHfbaa69 + 9VpOXTylliduOs66vWvpGeuirKmUIiUts1zH8IqlrNm+ht1H93DDzWfkmLdyjzLf3DOP8/jzT/H0n57n + udde4rlXX+LJF5/j4aee4O6H7+eOB+6S7e7hgSce4EHB3Q/czonrD7F513rGpW619zXT3FlL92ArozP9 + TK0aobOvkaKydBLTI0nN0pMvurymMZ/hiU7Gl/VS31JKSWUWS8d6VAP4w0/e4bufv+Cnf3/DDz8r+Jq/ + /f1jHnvqUbbu2EpuQa7cewOR+kg02iDV/LG0Vl6Mv1S3HGbTQyulkh769+mu/i8GsLPUNVfF/P2fBrBi + /gp8ZTlQ9LOSXSpetG6exotKrTetOl+6ojzpDnekT2vLoNaa4XArRsKtGY2wYVRny5hosKEYB3pVA9ia + xjAz6oUPtoRbXjKAlVHAwr1j3RhM8mA4zYvxLF+mCwMZy/GlM8aORuGT9eEWKmrDzagR1EfZ0BzrSKvo + qmbRWQ0xTqr5W2ewk5gnHP0SqoVzt6e5MlwUzIYW4Y796WzviGNjk46pUj9ak+Wcki1pz3FkoMyb4TJ/ + hop86c/2pE/260sSbZDkSmec/JYcrz7CjDrhjqoBLDGuSruYGiVjYajRJQPYiGb53CL8vl3QIdz5sgHc + EWlGi9aEeuG6VbJ9aehiSmTbovDFFOiM/2MAy3KFcKr6eFtaUoQHinbozHSfNYAFigFcl2g3O/o3xYFa + 4Ws1SpnuSI3w18pUue4MG+pzHITfu9FW6kGLoL7Aiepceypy7CmV7wvkunPjTYUfm5EVbymwIifBRjWC + M4SXJosOiFM0idxvxQCO/S8D2Eg0zGyWoNhoM1JEH2elO0jf7kBW8qwBnCWcNjfFUTiOYgI7U6qYwJkC + 0dgKKjLcqVQM4GQn0dp25Ojld+V30uT3MnRybr8bwB7kyfNNDjMn2m/RJdN3/v/dAPb/gwEs5f8ygEUX + qQaw6KHLpq9iBitIkfqbqkA7ixRlfZh8rwyWCZVSQZj1JdjK93akRDqQHGFHXIiVagCHB5gRJqU2yFx0 + mwWRobNz/uqkXUTKsUOClSnzzET3WRCoZEQKsMHPzx4fPxeBYvS6zxrAAsX4dVFSPXu4ynov1QD2DfCd + HQUs37m6OasGsDIK+P9kAFsqGSusjDCxWKTC2HyhagJb25urKXu9lN8TePi44O7hKMd0lN+xx9ffSX0J + Sx3gEu6Nf5ALvr6OBEgM1mrdiIv1ITvFh1KJMU2i/QaynFhZ7MquSjeO1dhzosKEY8XzOVJ4DQfyrmR/ + 9hUcFBwTXF9wNedLFnFrlQW319lzb7sP93QGc7bBh32i61fELWJp+NV0+s+h3mMOta5z6Aq6kulYI3bk + 2HC41JbTNbZcaHXm5g4Xznc5c0O7LSeaTTnWvJiTAmU08JGaBRwom8/uwnlszZ7L5vT5bM40YlOGCRvS + TVmRasTyDGPWl9iyodKZtYI1pY6sK3Zga7kThxv9ON0ewunWYLYX2DMeNZdOvznUuc2h1GkOWfZzSHW+ + glg30e9OV+NpOQcXgbP5HDys5xBgN4dIxytJ811ATZQlw9KGt1aInq305VC5O/sr3NhR5sT6AtGKmYuZ + yZzPdNZi0W4Wci8dWF3uwZrKQKaKAulM9qBc6lim6LYU6fuU6aFipJ1GimYMipI+WvpbX6mH/jpXgnQe + hOq8iRGtkFeQzMBAC7t2r+PCzce59bZrufHcYW6++Sh33H6K228T3HqKu2T9Xbef5s47pBTcessx9u5e + RW93tWoAJyrTFBrCCJd4ExTsh6+fp2r+ukgdUuahdnF3Eq4y+792xQB29Xb63QC2djTDztUSd+EryjzA + lw1g32Cp74FOeErd9/C1k3onkNLHT+qZ+n9yX9X8VQ1gnYYM0UcleWnUluRSWZxBWU6K9GMJlKTGqvP/ + FhoiKAwPoyQ0VGJEBC06g+joBAZS0hn5gwG89H8YwL3KXMDpiVLOYklmiorfDWDZbiRLGQU8awCrJnB2 + EkszZzGcmfgfyLGGM2R7Bemz5agcazQrSY6hfB9Hl0FDh8TQ/gBPJoJ8Zw1gfQTbEi8bwKmsyk1leX6a + xME0JorSGSvKZKw4W5DLVFkJM5VVbGht58DYBGc2b+H67dvYv3YNK4YH6W1voqOtniVLOlixYpJjJw7x + yKMP8Oe/vMWnf/+Ir/71BT//8hO//PojX375GS+//AJnz14nPG2Z8LxB4V9rOXL0MCdPnZB6s5MZ0aoz + MxNs3rqe4yeOyPpjrF+/muHhASYnRzgh65R00e9/IPr3y7/zw4//4l9ff6ammH700fvV0cMXbjrD3ffc + xmOPP6gaxYr5/Muv36vljz99rZ7H62+8wvkLZ1k6MkhJaTH5Rfl0drWz/8Aenn3uKT77/FO+/1H40I/f + /o7vf/hKxXfff8m3313GFyq++fZz1WT++pvP+ErO5zL+9fU/1e0U4/idd17jnrtvZ8+ubQwN9tHZ0cLQ + km6WT42yevkU06NL6Wqqp76smAZBd0MNq0eHObV3F88+cA+fvv0aX8h9/eztV/lYGQX90hO899xDvPPM + nbz2+C28+OBZHrhxH+cOruXk9imu27OcW45u4e7r9vHQ+ePcK9xx94phOspzSY0IIEI4fohwsBDhXaFO + tlLaEix9e7CTvYogpZTPGunz40L8KEmLp72ygNbyPIpS9BgC3QlytkDjZkWkj4PAEa20wRB3axWhLjaE + iL4IFs4X6GKJv7RLxQ8IC/YQDp7F5LIB5lRHmkiDcGO8OEgqnBCxkiB1eaIogGn5vK5ay9YmPevrdEyU + BtOX70dDijsVQsSqJaA3ZnvQmOdJY64HDTlu1GW6CFxplOWmXDdacr1UtOZ70JrrSXOOIEuWM93UN92W + CMaz3Fme58XqfFfWF7qwsdiJTSXObJFyS4kr24o92F3uzx5l9G+thiMNYRxv1nKyXcf1S+I4P5LCxalM + bl2WycnBGDbVerOy1IHlpfasrXdnXaM7K6udmCixksZlybJKBzY0e7Gty49t3b5s7/FmV4+XagDv6nWW + 0p49PbYc6LbjUJcNR9utOdFqxfEGM07WmnBLmy2PDLjz0nQQH+6K4697E3hnZyzPbdZz03gAuyVQLau2 + oKdIyGLBNRRnz6E67yp6a81Z0+/FxiV+bOzxZ12bH6vk/JbVOLCs1oKpOgkMDQtY0bKQlU0mcu6mbKyz + UP9Jv77Snqk8M/rT5jFeZMT+fnfu2a7jrXPpfHxbJh/fnM5bJ2K4b6UE5fZFch/nMJxyBe1xJlQK8ckL + MVMN4DifRQJj4v1tyNHa0ZHmyHSpC5vqAtnXFc2xgRSOL81gV1cCk5VhVCe5kSPEPk6IUUSgCWH+f0gB + raTDEHIVJiJUmf83QqMYwdaybI1WiJA2xBaNxpYAX0shG+a4uZni7GSKvf1/RgCbWSxQR/3Opnw2UdM/ + /9EAVoxf1fwVMaMYwIr56+nlKITJ8f9qACspj2wcRKhfMoD/ywT+gwFsbSdi3U45rq2c2+xcwGr6Zz8v + 1QAOCp41f7XSWHX6IBWKAaykgQ4IclMNYEcl4NkaqVCMbWUk8GUDOCjQ7XcTODLCH50ugDCNp9wPR4ID + hFhFh6qpn5XRv+kpBuJiQoV4BwnxDkAf7kt0pJ989idWH0CcwY+EGBHf8cF/MICj/2MAlyRRU5GqokoE + dnlpEiUFcWSmaWV/H2n0TgT4WOPvKR2CdBQhfq5E+Dmh97Iizm0hOd5Xi4AR0pRrym0dTjw/7saflzvy + z9WOfLfWkZ83u/DvbS78tsNZSnvYZgtb7fhppRWfD1rwbv0insm6igdjruCeqDk8nDiHFwvn81GnI19O + BPGvVTr+scbAXzfE89aGBJ5fE8+Dy5M43h3PVH4g+VKnQkzm4G86h2Cbub8bwKHyrDSW0nGZmOK5eBHu + Jgv/YACb4eMuxNpDiLe3NYkBjuTKfS8Qcpsnz7rAypxye1uqnR2pdHGkzNWZIilznUW0ONmQJHUgTsR0 + tIUpelNjYs1NybC1p8BVhIqXF8WXDOB4qR+xIq6ThQDl+ntQEhIoCCAvwIvcQE+KtP6UGUJFyAl0wYJA + aiIDqBPR3BjlQ7PBg/ZYb9rivehK9qU7LYDebA29OSH0KHMaCXrztNK3htOTH0lrhoZyEcq5IrJTAo2J + 8VpAtPrihvJWrDVR0tlHyXWG+zoRInUwzM+OSI2riA931QAOElLlK23B19VW7o2tBAVbouQ+JbiL4PQ3 + VkXpcKoDu1oCeWBPBh893MIP7yzl178thS8H4Nsefvu5nX//0sgv39fwy5fVfP9eOX9/PJenj+k4vMSa + yYIrGciYw1DGlYzkXsOEEO9VVQs5NODI+dV+3LVNw93bA7l7VyAXNnhwdMyGnd1mrKwUwp85V/qlq0TA + z6U44hpywpQ54q8iNWw+2SKIc/QWZAvpzRCkRNsQp7MiMcaB/Kwg6mriqa2Wep3lT4T0a2EiFMO10v+I + wNMJokS8RYVaCJTRlxakJriQmy7PMlsCaK4vpdleFEnsKZG4U5ziTF6sMi+QiOIoefaRi6U0EQFqRlmi + LfXZ7ow1G9gwnMOhDY2c3T/E+tESmos05MbZk58g+8c7ibCeRU68C5mCjDjFXHMiPdqFVIMzKXoH0gy2 + 6tvXmfFmZCcsoiBpoYjdq6lLu4olJSIEmu3YvsSNPYNuHB314rpJH24UXJiaNYBvmfTn5vHL8OP2aQ23 + TQerUwNcu8SZo512HG6bxbFOZ66VOHNmNIjzU+FynAjOToZzalTD4T5fdrdJbK23ZWONlTr1wb5uL44O + BvzBAPbn9FJ/Tg36slPOa0eTLQe7XDnW78mRAS/2djuwudGUDbULpVzMni4Ljgzac2zYkYP9NmxvFfHW + bibHdOHaER/Zz5udrSJ+qq1ZXmzGMsFMiYXwC0uJPVbMVNiwss5FHQU8XmHPkIi0wVIneoscaMuxpS3X + VmKpC/1lPoxU+jNaFcRkbQhT9SEsEy6wvCmUVS3hrO+MYkOXXjWAxyp85Tj/bQD3iHDtyr4MF7oFlw3g + yhhLSvVm6sjfGkF1gqyLt7kE61kDONGC6lQr6rNsaMuT2Flop6Z/Vgzgznw5VqEbDXLMsmQH0nVmxIYs + Jko7O7L2fxrAyvy/cTHW0k+H0twUp466qigJJUFvR3iwEVqNknLNRvpuBxXZaX40VcSxtC2HZf3lLB+s + oKdO4obeFZ2v9JVuC9C6ziPS5Rr0rleTFWJOXaoPXUValpRHMlQbTV91FDXZPhQnu5GXqNRTexIMVhgi + LQjRLCIgYC6hUupFwCYmOJKR5q6mnEqIt1WhmMHZWYoBrIzKt5ftJNaHmxEWqpi/xqrxq5q/wWYS84R8 + htmjDXciPMKZyEgXEXf28r05umAlFawx6RGL5J4uprfAWk0DvqrEiXUilrdU+bC/PpQDrdL2mgwsrQil + LN6OWL+ryY6xoq1SS3t1JNU5vuoo4J5yLSPKPZT7lxxhTpTc64igeYT7X43efy6pGiN5tjY0yjn3Spsf + TndWs81MpNoynWzBskRTJmMWMWKYx4h+gYqxmFlMRhvJd4rxK6W6bMJUtCkz0eb/hf8YwNaslLa+0mDH + dKwdA9K/tEndapB+rUH6mCaDJfUGc6ojjKgS1OmtaJDnWy/9RI3BjQq9JyUSr/P1vuQZ/ClODJU6FUtz + bix1KeHUxAbLPv60SVwZTdSwJjOCjYWRrC7RMpYfQFeaCy1Sd5ulD22Rfr47xIRx6Re36hw5HuPG+XhP + bklw52bh7+dlu/OJNrJOgR1nYq05pTPlZKQxN+iMOBdlzM1RswbwXVLeG7mQh/XGPCn9458SLXktyZo3 + km14I9GaN+XzG8o64ZsvRS/iWd1cntJdzZPR83g8biEPxc3n/viFPJhmwqO5VjxV4siTpc48WebCYxXe + 3FrozZF0T1bq3enRuNMY7CtxM4qm1DQa0jOoy5AyO5O+qgr6a6voq61gSX0lvfUV9DVVsbSjjrHeZmYG + O1i+tFuEWw/rpvpYP72ETSsG1NG8+7ZMcWTXCrauHpJta+isz6O3qfCSAVyhGsDLhptYPd7OhpkeNi3r + Y6K/kdElDWxbN87N1x/kmUfu5N1Xn+HT99/knx+9y8d/fp333niJN158ilefe4I3RWD/5c1XefvVF3jx + 6cd49N47OX3kAMuH+0VUFkjcSaQ4LU7EnDKiOZ7yTGn36dGyHEVJaoTEpDCKkkIpShYkaSVGREop3yXp + KUuIolIZ7asYvtHKFBORNMRGUhsdRo0+REVtdLDUpSAapGyUutKaFEJvRhhLCyKYKI9iTVOs6J0UDg2l + c3I0WzV+z0/mcONENmfGs7hWGf07mc7hyVQOTiRzYDKR/eMJ7JlIEiSyZzKJfVOpbBmKZ1TaaLHE6NiA + RQS6XoWX01W4Oc7H0WE+Ds5GOLua4eRqgrPzYsEi4f4LhB8vxNfbTPo3e+JjvElLDiQh1kvit4jfQNES + wdJ+Q63IinenpSicqZZk1rYns6U9gV0deolfOolNEdw0HcmdyyN5cFUkT67T89LWeN7YlcIb2xN4Za2B + V5freHtFNO+vS+LDjSl8uCODvwnX+efBbL44nMlXh1PV9M9fHo7ns716PlEM4K1h/HVbyCXzN5RPdoXw + 2e4w/rk7nM92hvPPrVr+tUnLt5si+XGLTvAHA3iHYv7Kd6oBrLlkAGv4Ycd/G8A/7Qnlx90hsn0I3+0I + 5sc9YVLObv+9/OZP+3T8LPg/GsC7glX8sDdU1mv59WAEvx5SEKmWvx3RqwYwR/X8LJ+/PyjHOxrBjycM + fHMqli9PJvOJXPsHB/J5+0A5Lx+o5bH9Ddy0qYJDE3ms70piVW8qK5dks6w3l+nePCa785jozGe8vYCx + 1gJG2/IZbssTSNmaS39DOu2V8dL36qnJDaMyJ5Qq4bLVeRFSRkgZRXWunso8PVWiR+rLkmgoT6GmNJHK + ImkHedHC6yLJSlemt/EnxuBOeLgjoVpHtDpXEtJCyC2Jo6gqjZySBOLTtYRF+xAeI/ooKZiYZA1xKaHo + Yv0IDHNBF+NPeXUGvUMN9C1tpEnadk5RPJExfnj522JuNx8jq7kYW88TLBAsmoWlkWCxumwiUEZRmVvN + mr+qASx6UhkFfBlKSug/wvoSbBxFewqUdNEKbJ3sLsFGhZ2zLXYu1thfgoOrjcAaJ3c7HP8AZVSNklLR + Vfi9MhrYzVeBLe6i2939rfEIsMBD2ouP6O5QgwMJmf7kleup78yhb7SaFRt62bJ3io27Jlm2rp/+sWZa + esqpbS2ivq2Mxo4KdSRqXXMxVfUFVNTkUlmbT0t7JX39DbR3VVNVk0d6ZgzRcaFEGQKJjPJFr/cjSfql + fEVzlqdSV5+lzunbP1jN1HQra9b0MjXVRG9vIU1NaVQKZ8nODiNFmStYnnFeno6i4hgamnLVeYDXbhhk + 644xdu2bZue+KXYdWMG+o+s5fHo7Zy4e4+a7b+Cme2/kprvPc9N9N3H+3vNcd8cNHDl/lP3X72PP6T3s + Pr2bPdftYeepnUxsGqW2u5KcqiwVFe1ltA41MzgzyMyGZWw7sJ1Dpw/LsW/k4v13cO9jD/LIs0/yzCsv + 8cIbr/Lim6/x4huv8fzrr/DCmy/L8ks8/9oLPPnCEzz4+H1cuO0MJ88clXPcxbotK5leNcrK9VNs2rGW + LbvWMzjaRUW13LfsGDJyYygoVUYAFzE80cHYdA9VDQVkFyTSN9jGLbffwEd//zM//Povfvnte3785Tt+ + +Plb/v7Pv/PM88+w7+ABqmqrycrJJjMni+S0ZPwCfbG1U8wfK+wcFCNIScU5m81MffHg8osI/xcDWE37 + LJ8v448GsJfAz9mGYHcHIn1dSPR3ozDYk5pQT9ojvOmL8mRI2uSozokJnT3TUbbM6OxYFmXPjGAq2okR + 0Wn9MY60RwqvCTWhTjhIk3CyDuFfigHcG+NEX6wLQ0nuDKd4MCrabDLXj5FM+Q3hQvWhisFqoqI61IhK + QU2EBQ3CqZpi7dVUzvUx9qr5W6sav+ZURVtSHWtJTZw1XcJRx8uC2dwey0GJcft7E9nVaWB9g4aBPEfR + 2XJ+xa4Mlcq1FHrSn+NGX7oLvcmO9CU6C1zolN9p1V8ygMPNqRFUa82o0hpTI7y1VvhuQ5gRjfL5sgHc + pl1Eu/B8ZeSvgvZIU/lOtg8xolyzkCLNAgpDF5Av2+WKzlSQJygymKjnraR6VkzfjgxXOtJdabsEZe7f + uiS55hS55lR7alPtqBHUpttTnW6r6pHaTBtaCp3prvRmoCFA+mThgdWetJa7USf6pFL0SmmaBYVJZqJX + TclWNKjomdwEK7XMEj6XKvw0Qa4jPtyUeDl/xQT+nwawkgY6XplbWM4jN0P0brojmZcMYCUVdLbonrwU + O/LTHCgWjl2S5kxZhughQXmGuzoCuCTZifw42Vbub/p/GcCy3yUDuCDOVTVkYwOMfjd9Z03g/50C+rIB + HK8RHhJkhd5Pzvf3FNBG8tlINYCTwqxIibCR0pKEUHMVSWEWqjGsGL+KGZwidVYtldTQ4TaziLC9BHvS + IhzUFNCKERyvmTWAwwLNZvWOMvhFGQQTaklkmGL+2qLVKv+fsBAtZIVGY02wnGNQkD2BAUr6W1d8/ZVU + z8qcv+4qlNS6irmmGsDK/yED/QgI8ldLJU20h4cbzm4O/2UAW1mbqSawtbU55hYmmJgvZLHpfBaZzFNh + bLZANYXtpC9QUvi6ezmpRt7llPDOrla4e9qqGTiUzIYKvP0c8fSyU0doBoU4S9/vSWqiNwXSZmuSnOmR + 5z4jendbmSuHK204UmLMkeKFHC9ZIOU8Dhddw9GiqzlZcDU3yPL50oXcWmXO7XV23NvmxT2dgZyr92J/ + vuik2AUMh11Fl98cGtzn0CRYqp3HpgwbDooePF5mw5k6W27rdOOuXi9u6XbjbIcdp5rMOdFswvXt5pzp + MOfaJlOO1xpzoHwROwsXsDV7IVuyjNiUZcqGLHNWphuzTDGDK5zYWOPO+mp3Nla5sbPWkyMt/pzpDefi + 0hguDho4XufLulQLBkOuotVn1pgucb2CXLdrSHSZS4TdlfhazMHdfA5uAk8rZQTwlYQ7XqUaxPmi3VuT + nEST+XOgwp/jlT4cq/PjoFzz9nIH1immb64RK3JNWFlozVSBLaO59gznutGd4kqlwZEsqS+JwZbERtoQ + HW0j/MYSjfR1HmGmuEod9pC66BPlJuv80CdqhSOl0dpZy0aJSTfedIrHnryHJ5++l4cevZWHH75Fxf33 + n+duiaf33HWGe+6exQP33Sifr+PIoY0MDTSRLfE+ShdAcJAnPj6uKFMjKmnKlTqjDKxSXkBS6qBSl9yk + Lrl6XzaAHVUD2NzWCGsnM+EutngFzpq/qgEcJAh0ws3bRviMtdQ5iTleNlL/FQPYjdBQ4XRaX9EBfhh0 + waSL5inOE55Ykk1FURql2aKb0mMpTDZQGKuTvjOUgrBgyrVh1Ot0dETH0hufyECqYgDnMJ4vnPWSAdyf + lf67AazMA9wtGqwncxa/G8Dy/ZBi/manMSrbj+VImZ2iYiQreXZkr4KMpEtQlmcN4NH0/2BMjjWWmSRI + ZCQ9ji69hvZgD5ZILJ0I8GZNaBCbo8LZlhh7yQBOYbVgRX4qM4WpTBalM16UyURRtiznsqysRFDB2vom + dg8s5fS69Vy7eRN7Vixjur+H5ppy6mrK6OxsUtNAn7j2KE898xgff/ohX33zOd/9+B3/Vv7+/TNfffU5 + L730IkeOHFZH3TY21zM8NsSOXTs4cPiQcLG1dHS3q0bs5PQEO3fvYO/e3QwM9FFaVkStcJHt27fywEP3 + 8+GH76kji//924/88OM3/PWjv/C06N2bbj6LMkr4vvvv5MmnHuXjv33Av3/9CeQcfv33j6oR/NWXX/Da + a69ww9nr1d+LT4onKlo0bnkJm7ZslHr7BP/4/B/8LOf8628CpRQo+/766w/8LDzpp8v4+RJ+UvAtP/70 + r/+Csu4X2UcxiT/48F3uvutWNm1YQ2d7M/W1lbQr90Cub3pihLHBJdSWFFKQnkxhehL1hbnM9HVzavc2 + /vTg/fzr/Xf58eP3+f79d/jq7Vf57PXn+eRPj/LRi/fy3nO38eZj53jw7G7O7JnhyPoBDgvO7F7OXSd3 + 8vCFozxw5jD7lZcEy7NJCvEmxMmSINEVQdI3a4TDBdrZ4C/9uq+9jcAWb+F03rLex9EWXaA3eUnRNFUU + UF+SQ0ZcOBoPe7zsTPETHhfsJvrZ3Va2tcDT3kyFl60Z3nbmgtnP7g5mos8t8fdzJb8wneHxPuZUCjHr + EBI2UBBMX14g/flB9BdImefPUL4/o4UBTJWHMFocTFeWtzonbFmCEyXxjlSmedCQ5y3kw0fgTXOBN21F + fnSVyzFqwhisDWOgKoz+ylD6q4JZUhFMr5Cz3pIg+mS7gQIhfrk+TMkxVuZ7ScfoxqZCF7aUOKvBZbtg + W6kH20u82FcdyP7aYA7Vh3KkUauOAD7RoePccDK3Tmdz16p87lydx9ElUSwvcZSGbMZonnT81U6sbXRn + dYMbM5UOTEhAWVnrwsY2xfgNYEdfANt7fdghwWV7t4vAkW1dtuzssmZ3pzUHBIfbrDmmoMmSE/XmnGux + 4W7Z7olhL97eFMWft0fzpuCZzVFcmPBnT6cTM9WmdBXOoyb/KopUA3gOS+rMWDfozabBADb1BbGxM4hp + CUIjxdb0Fy6it+AqeoqupL/kKsF8hgoWMJK3mOkiK6bybRiUINaTMp+RfBN29Xly5w49717M5Z8PFPHF + fQX89UIqT2wP4Ial5mypuYKhjDk06hdSGmZObrAJqX6LiPdZQKKvMcm+lmQFW1ARaURnsplsayednhtT + hb6sqAhlvCSYjiwfyuKdydLbEx1ihtbfiFB/Y4L8FuPjvQBf34VoRISGXjKAlXmAI0OlsobZqf/QiZBS + I6THz1cCl6cELldjnJwUo3TRJQN4npAWWbaene9XgToaWMT3Hw1gB6nUTiJcFCgjfxXzVzGBleXLBrCT + iGglBbRiACuCZzb9sxmWSvouwe9G8B8NYKW0tZDfkH0vzQWsvO3kF+Clpn8ODPYmQqcYvxr00RohQsGq + ARwS5kVAsPL2ngRFB1N1TmMFdv/DAA4UkqfMAxwkAS5MTQXtK2TRHX/ZTxkFbJBjF+Qmk5sVT6I0aL0u + EL0EQH24v0ACYYQvMZH+REdKGeWjmsCKAZyeqiUnW0++IjBzoi8ZwAm/G8AVpYkUFcSQnxVFWnKI7OtF + SKAyKtQSbxdz/NxsCPB0QONpj8bFlHCHuSS7Xklt8NUsS17A2SYHqduuvDXjwufrPPl+gye/bvXmt51e + /HuHK79td4Dttvy2xZZvZ8z4pNuIV0qv5tHkOdylncPtoXN4KHYOL+XP5eNOe76aCuD79Tr+tTmGL/ak + 8eHOFF7ZFM8jq5M4sSSRCelvcqVOBRnPwd9sDhrbeQTLvdTIM9RYWRBoJh3ZYhM8Fy7E03gRXlJHfIVk + eLta4OtmRZCH1DtvW5KFcOQHulPo5UyOPOscM2MKLc0ptbGmUERzvnSsOXaWZIpATpOOMNXRSh0FHGdp + QpTRQvSLF5JhbUORixvlXl6U+niT5elKvBDlOCE/KR6O5AoxLwoOoECEeLa/J9lST4q1gZTqQymN1FAW + EUiZ1oeqcG9qI91ojHKh2eBAqwjjNmU0WLo7/dle0r/6SP/ny6Bc+1BREEulTxwu0UgZSkemLxUicHOE + SMZ5Xo3e7SpiRPhEe5kSIwTK4O2Awd8Znb8T4f4ORMizjQpzR6f1IDTIBY185y9tI8DdnhB5zjrZPlb2 + S5H9S0SwNEdYMpXjyaGeSO7flcV79zTz5Uv9fPv2En7+Wx+/ftnNbz+08ZsyD/CPVfz2TSU/f1zM1y/n + 8pc7Erltgwu7OuaxofYqIdNXsa1xPrtaF3C415i7Nvjw7JEIXrvBwGtndLx6LpKnTwZxz043Lqx25OiA + FdsajFlRspilOYtoTryGcsOVZIfNIS30SjK015AZsZBMnQnpejOSdSLwtKYkRFmTl+FHY20cjXXxZGf7 + EyaiPDhwEZqgxYRJ/6bViGANMUenMSNSoAs1Iz3RTfbzoTg7QEikH8WZnhLc3ShMcxUy6TRrAOvN5ffM + yBSBm6UzJc9gRrEy6jPFge4y6aM7Etg2WcqxLe2sGsijIV+ZT8GeAsVcjhMhHOsokDJO+spYFzJinEmL + diLNoJQupOodSTfYkBljTlaciQjvhSLG51OSeAXV0ma68q5hSmLDZokpO/ucODjkyskRd24Y8+TGcXfO + j3lxYdSH8yM+aqkYwHfMaLhzeQi3TAVyZqkHx7sdJE7ZcqjVliMdjhzvc+P64QBunAzj7ISWG8bDVINX + Gem7t8OVTQ028vys2droyL4eb44OBXJ6PJTr1RTQgVwn+54a9GFfh5M8W3sOdLlwqNeV/T0u7OmyZ6sI + rq3NRhxcYsOJUUdOT7py/bQbJ8ecONBnyaF+W26Y9OLcTIBqAh/sdZPfspHnbsRMkaDERGDKdKk5MxXW + rKxzYnmtM6OlVgwUWtJfZEe3CKOWTCuBNV35TvQp8/eW+zNcEcCY8ImJWg0zdWEsbwxlRZOWte061ndF + qQbwaIW0rcsGcJGnmgK6K8uBjgx72tKlLapwlLbmQlOyHRUxlpRcNoATldG/igFsK1AylthSHm9JWaIl + del2NGU70l7gQFeRI10FgjwnOvKc6ch3pT7TmVLZPj3ciNjg+er8ulrtQkKCpE/73QBeRFSEKfFS98rL + wmhpjqe1KY6KkjASdLaEBxkTLvVZGc0eL3UoNkrqUqL0KQVRtFUmMdiSy3B7oRDUaAyBNgS5LCDQaR4h + zvPUt5Mjna8mLchUztuDzkLhXxVRjDQmMNQYT3mGt9RTJ9Kl/qZE2xIviNYpmToW4edzDYH+CwgPMyNG + +p+UJDdSkl1lWUSowVqWXVTzNynRWT7bEin9SLi0sRCNicQ1BYr5a6qmeg4JsSUk1AFtuDPhEa5ERXmo + BrBGeVs+wIiYEBNSwheRFz2PpnQT+rIthd9YCG+zZ6bAjc3lwWxtMMjz1dNdHkphgvR5AfOkLVnSWBZK + S2U4FZleKgdVDOChegP1wlcTtMZEaeYTGTyPMN8rifC+kqSABRRGmFMfY8uAtPuxTFcmMhyZTrVhKtGM + 6ThjxgzzGdbPZThKKRcwGrtQxXisEROCSdlmIkaWY0xUTEtbVhEt+0t/MRNtqY4GXibnt1L6qhU6Obbc + t55oKxqVkeURi6mKNKE60pRy6WeKQxcIFlKhEw4mz7xC50iZxIpiuU8FEq9z9PKconwpSgilMTtW6lsi + rVkGWlMiaJd1fbFBzKSGsTkngp1FkWwp1bKyIIClqS70Sf3rlfPoCzdjifSdE1oLNobbciBK2qnUpzPS + P52Jc+C6eBuul/p+Os6aa2OtOS7XsD98MQcjFnFSb8INct7nok242WDEndGKCbyQB/WLeFyu//kEc9UE + /lOCBX+KM+flODNekeVX401l2ZjnY+bzjDzbp+MX8rj0d/fHzuXumLncn2rEI7mWPFXswJPC058oceKR + UnduyXXlUIory8Id6ZY43hLiS0dstLTXTNoyc2jOyqI1L4eRhjpGmxoYbqplaUsdfQ2V9AiG2moZ7W5k + pr+dFUu7WTPWy4apPsESNi8fZOfaEfZvmuTIjhVsX72Uib46uhvy6WsuYqiz7JIBXKumgV4xqswF3Mn6 + 6R5GeuoY7Kph48qlnD2xh/tvv5GXnnqQ9998SU3/rIwA/svrL/LKs4/zwhMP8tKzT/D2a3/inddf4rUX + n+WV557iwTsucnjnZkZ72mguy6euMIO6/HSpr2k0FCbTKKgTDlctz7c8PYIy4XcKSpPDBJESJ3TSp+go + i42gIlpLZZTyolkIdQYtDTER1ESFUK3TCIKp1QdQF+VHvd6fxhh/utPCGCnQM1lmYFm1gfXNcezoTmb/ + EuVFz3TOjGVfMoAzuUFw7WQ6R6dSOTiVxL6JOHZPxLBrzMD28ZhLiGXnRCLr+2MYqAmWeGlOhNc8vB2v + wtXxahwd5mFrvwAb4fl2wjXtnJV56ITzK3BchKPTItzcTYUf2xAu/EinjGAIc8Lbx0Q4+Dw83efh57WQ + GNEPpekBoh2jJTbGsq4xmm2tkezrkjg2pOXisijuWaXj0bU6ntuo57Ud8byzO4l3dsXx+oYo3lwdzl/W + Gfh4cxIfb03mwx0pfLgriU/3pvDZwRQ+P5TEF4cT1RHA/9wXzd92RfLxNu0lA1jD33aG8OnuUL7YF8FX + +3V8tVfHl9si+GZzJN9t1vHTlih+2qrjh21KGmgt3+8I49vtoXy7TUkBHSSlYuoGXzKAZ81f1QDeHcIP + u5R0z4F8tcVfljV8vzNYNYS/l9/8SRkVvD9SLWdN4Nnl7/fIsXfJcQW/G8CHIvjlULiU4Wr52xEdHDOo + BvAvh8P58aBsd1z2P2Xgh2tj+PZUMl8ey+QfR0QrHinl3SM1vH68hcf2NnLLukoODWextS+NTUuy2NCX + y7q+PFZ357GqK5eVHfmsbM9nRXseyztyWd6Zx7L2HCaa0xmuS2RpTTy9pVF0FEcIIukqVeasMtBbHkdf + ZSK91Un01qYy0JTBUHM2Q6059EvZWZdKU2U8tbJvRaGW/MwAUpM8JDa6EC0cKiFZ+sECLUXl0WQXRJCU + FkikwZUIvQv6WA9iE7xJTg0iPtFX4owjkdKHFhUbaJfzbessoKY+lYysUHSyj1+ABZa2V2NicSVmVldh + Znm14JpZWMwTzMXUUkrL+aJPF4sWNcFCMYCV+RQdLP/LBL5s/CrrFfxuBF8yfm0cbVTYOYseFfy3AWyL + rYv1rBHsaqPCwc1WYIeT8PXLaRUVA1iBk+hJFx87XJURwIG2eAbZ4iW62ivECu9QS0KiHUnMCaJIuHH7 + YAkTq9vZdmCaQ6c3sHX/MibX9NLeX0VFYw6VDXnUtpTQ2FGpzlerGMAVtXlUKqjLl/tVSHNrGbUNhWr6 + 56SUKAwxIaKBA0T7+qCTmJQiMai4WBn5m0NLawHdPRWMjjexYlU3GzYMsGymjSVLimltzaRe7n9RkZ7M + jFCys8LIyQ0nNz+S6to0lo7Us3JtD1t3jnLgyEqOnl7PybNbOXnjNk6c28mZ249w4e7TnLv7es7ddYaz + d5/h9G3Xcvj8YXac3MHGg+tYt38N6w+sYcPBtazZu4remQ6Km/NIL08htTSJzMo0Spqkz+2uoW2olf7p + AabXT7Nl/1bVCL7h4jluue8O7n38YR57/lleePM1Xnn3Ld54/y+8+7f3ee+T93nrg7d58Y0XefKFx7n7 + odu55c5z3HT7Wa49e4w9h7YJtnP45H7BPlasHaeptYKi0nR19G9JZbqacnt8pkfQq97vzNw4daTwTbde + z/sfvcXX33/O9z99zdff/YvPv/on7//1Ax594nF2791HY3MLJWVllFaUyzGL0ccYcPNww9LGChu7y8bv + ZUid+38ZwKJ3XWTZWda7yrKCywawm6xXRgArBrDGXTSjrwtJfq4UBblTH+JBR4RoVr0X49EeTEW7s1zv + xCrRNWv1Dqw1OLLG4MSKWGfGYhwZFK3bKZyyIdRINUsbI8xoF07UFW1Hr9TVPtluSLjlcLI7w6nujGV4 + MpjiQkukGTWaBVQHL6Ras5DK4AVUaBZRpTVRX5RrjLERDmdDXbSS1c6aaoMFlXpTqoSH1cRZUBdvRU+W + K5PlQWztiOHYSCbHh1I50BvDtnYtM5WejJXK7wqGilzpz3WmL8OZ3lQnepMc6VUM4ATh8jF2tOgUA9ic + OkG1AuFSFcpoXkGtoF54pmoAhy5WTeDWsIW0C59VRgEraFMMYDnvyqCFFAtvLRD+n6eZR652AdnCrxQo + JnBJjBm1wteaU0SLpM+av+ro3wxXFY2pswZwXYottQpUA9iG6jQbqtKtqUyWcxR91CHXNFDvx6TEx4mu + UEZaFCPYm5YSJS20FZUZZsIlTMiPNxLNaiwwIS9eMYTNyI01JT3KiCThfolyTQly/rGiT/Thyvy/xn8w + gGWbBCsyRTflyX3LSXciQzGAE21Il2tQ0kHnJNmSI3qqINWBIjn30nTRQ5cM4DLR3cWXDOCs/2UA2/9u + ABfGu5EeYUN8oMkl41cxgGfxPw1gwx8MYGUUsMFfMYAXq1BGAytzAMfIcRJCLEnSWksp24u+UhCvmU0N + rRq+kdakKhnDlFKQJtorTWdPRpRAuHmGTjRTpKNqBCeH28u+8luic0JFzwSL5tFozNDIscNCLUQ/WYk2 + siNMayOax0bWWaMJtZXvRf+EOBMU5KpmEPTzd8fHzwMvX3cVyvyqruoIYBe8fDzxD/InUBOglr5+3nh6 + uasG8awBbKWmg7ewVAbNSHyyNMXM3Eg1fBXjd4HxXBYKFsuyqcUidV5gJ4kvbkps8XAQriWxRjWBpS9w + t5HzUFLxuv0+sMXVXfoEL1t8gkTDRbmRGO9JTqIrlYmOdMpznRK+vrnYhYMVNhwuMeaoMgdwhQknKow4 + XrGQE2XzOFkyl+uL53GubBEXfzeAPbi3K4CbGrw4kGfNqph5jIZdSY/vHJrc5tDhNUf01CJ2i6Y+UeHG + qXJbztbacGe3O/f3+3Jbrwc3djhwusmSU02iT7ptuLnHjrNtlrLOnKM1puwrM2J3gRE78kzZmmvOJsGq + DGUEsAlrSx1YV+nKWoGSJXR3vTcn2oM4NxDJHWNx3D2ewLlOLftL3FkpbWM4YiF9IQtpDVpMdYAJaa5S + H23nEGA5B0/zObhbzI4A9rO7mlDHa4hymav+n71c9PFYng97KgI5URPAqRYNJ9uD2V/vybYKB9YXWbK6 + 0JLlhTYMZ1rQEW9Mk/Rj1VFWFIbbkKaROh1sgSHcQrSzhXAeU4JEN7ppjHAJs8BLJ/Uoxo+YtCjySkUj + 9TaxbPUEx649xD0So1545Ulefv0pXnr1MV586WGeee4+Hn/8dh544AL33Xee++49p+KRh2/moQfOcerE + dsZG2slKNxAa4omnhz1uUs+8vFxx93BW04ir8UQ4jTIKXTF/lZHkbj5SX/9gAJtaL8LC3hgnD2s8/B3/ + lwGsmL/O7kqdU7J5Wku9c7hkAHsTHu4j7cYPfVSgcMBICnOUlwQzKM9PoTQznuK0GAoSo8gXzZMboSE/ + NIjKCC3NBgNdcfH0JSYzmC58NDub0bx8xtQU0Jn0ZysGcNrsCOCsZHoyhYtKqaBP1s0awGkMCUZk21kD + WJCVpmIkM3UWGakMKSmfL2H4EkbSBOlKmSqxLFmQqGIkLZbuqCA6JIb2Syyd8PdiVUggG3VaNifGsCkj + iXXZSazOSWJlbgrLClKYLkhnsjCTqcJspovyWFFawrKSUlZV1bKjp49Tq9dwasMGdk1PMdHTQXVJPuXF + ebSKFp6aGeHU9Sd47qVn+OzLv/P9z9/y068/8pv8/fvfv/Dll1/w4osvcODAfrq6OikrL6Wzu4PNWzez + 79BBlq9aQXVdjYrBpYPq+u3bt9Hc3EBCQhxZmRmsXLmc226/lQ8+fI+ff/4B+EU1YBWj99nnnuSWi+fV + uYQfePAenn32yUsG8M+yHfz7t5/57bdf+Obrr3jttZc5ff21wtHb1OwmgZpAsnKz5ByW89iTj/HpP/8u + 5/6TbP/r71BMbAWKkfw75Pr+iF9+VQzf/0AxjH/jZ3X08Ucfv8fdd15kw7pVtLU0UFlRTH11BUu6O5ke + HWZsoJeynEwyYoWvxooekXoxI/f4+t3beO3B+/j2/bf5RY7x43tv8/XbL/Pl68/y2SsP8Y8/3c3HL97K + X544yyM3bOXsjhEOr+hg31Qz164f4K7D63js7D4ePXOQE+snGKjMkfbtSZi9GSH25oSIbghxsCZIMYDt + rPG2txEIzxdO5yHrlDLc35vsxGjRSsXUFOeQZAjFR3ibq7UJXsL3FN7mK3rCVfSKo8QEJ4kHTlK6Wpnh + Zm2Ki6x3tjXDSbSLt8SZ7Lx0Bkb6mFMS50xdug/NIiAasvxpygqgKceP5mw/2qVsy/GhI9eXJgng5fES + 1GPtyRWClB/rQFmaO3V5vjQXKpBjSNlZoWGwPpKpjniWdScy3R7HRJOB0YYIltaFM1StZahKUB7MSGkw + EwUBTOf7sSrPi7V5bmwscFFH/m4rd2O7YGuJB5uLPNlR7seuKn92Vwexvy6EAw2hHGrTcm40hduX53Lf + hhLu21jCwZ4IRnMs6E6cR1/qAiZLbVhVJx1+sydrGtxYUe/MmmYPNnX6sb0vgJ0DAVL6sK3Xky2dzrLe + ns3t1mxpt2Rbmzm7263Y32bNkQ5bjrbZcrxZmQvYmguyfGevE8/MBPLCKg3PrA7hwVUhnB5yZ4dsO1Vr + RHfxVdQVX0l5wRXUy/JAgzkbBn3YMhTI5t4g1rb4MVRoS1e6EY1JV1OfPEeI3hwa0hRcLeuuoiV+Lj3J + xvQJeWuPnU97wgL6s4xZ3+LEjevCePOWXL54pJx/PVrGP+7O4dWTeu5Y4yLnPZfhnDnURs6nUGNCToAx + qT4LiPe4hji3BSS6GZHuvYg8/yupCZ9Lo24hdULy6oT8NcnzrY+zp1QxoXS2Qnis0AUaE+qzCI0yn4XA + 11t5k38hwf6yPths1gAOU+a/sEMvJCkqUkSElMFBVvj4mOLmbqyOBHBwWIitrWIACymxWHjJ8FXMX+VN + NhHbFkZCZi4ZwHaKAWyBgwQede4aqeCqASzi2F0JUB4irh1nDWAlnZaTm42QIxHZImaUCeoVKAJewX8Z + wJfmALaRxmZzyQB2dVNMZSFmAd4EBPpcmv/XhyhDCPpo5Q1oDZESmMLCfYXMeagGsPL2kpL6+fLoXycn + c9yFOHmLaFeMX8UA9vV1Upc1Gg8hgj5ogjzw93Ei0M+FiDA/0pINJCdEqGZweJgPERpvdGG+qgkcHeFP + rPymIdIHfaSnagInxgWp6dNysyQQ5kSTl6WnKDeG0uI4qkX0KigtipPvI8lO05KaECzH8CIkwB4fCbqe + jmZ4OVni42KLn6sQP3sjAmyvxuA4h2L/KxiKuYYjVbbcP+DOa9PefL5Bww9bNPx7RzDsCeC3nR4CZ9hp + z29b7fjXlAkfts3j+YI5PBg3h9tD5nCH4OGYObyYexUfddrw9YwfP27S8t1OPd8eSuGT/Um8tSOBx9cl + c6I/kdHCQLKFNAWZzCFQCJVqANstJtDGmCBzU/yMjfFdZIzPokX4mRrhb2VCoKMFAc5WBEid0Mhzj/J0 + IEXud36g5yUD2IJsMyMKLMwotrYg38aCXKln2bbGZNkZke0ky87mZDqYk2JtRLzJAmIWzSPTypJSV1dq + fHyo9PMl38+TFKlvSUKc0+S42T5eFAT4kevnRZavJ5n+HuQG+5Ab4kt2oJe0M3dyfKWfDLSnUtpDrYjH + Zr20XSGTPWlWTJV5MlPlw1SNp8CLqSpPJgVTVR7M1PgyXu5NV5YTlVFybv5ziXGZI7iKBE8RMUqaax9H + YqX+xAS6EB3oTFSwI1EaJ6LC3KT9uYsgcSbE35lA2SZEzlfn40aM1LVEIVqp3hYU+BnTGS2ivUwI6VAC + D+zIlz6khb8+3MvHT3Xy5Zvd/PC3Tn79uhV+qIcfK+DbEv79aQ4/vJ3G508l8sJ1fty60ZozM6ZcN7aY + sxMmnJ824fbVZrxw2I/3b9Hx2X2x/OMBA39/OIq/3B3Cyzf68PQxL+7b6saFGQeO9VmxvdmEZWXzWZJz + JXUJcygxzCE3fA5Z2ivJCJtLWsQCEWci1EKNSBYSXJDuRWtdDJ0tSVLfQ4lRTCgRkIoJFSqCLiRAhJ+I + MGUEsEHufYyIyMxkDwoy/CiWuFaS6UdhuqeIU3cKUlyFTDqrsSzbYEmO3oq8aEsKYqypSHKgRkRrbaYI + 8iJ/RhoMrBvIZfeyaibaU6nO9FYFrGIC50oczIlR4KQiM9qZDIMTKXpHUqIcSZfP6dEiIKOt1Tets+OM + yEuYT0nyNVQkSn8vfX1P/pVM1BixSXnxqM+RfQOOHBl04MSgM9ctdeGGIVfODHpwZkjEz5CnagLfOh3E + HctDuDgdyI0j3pyUWHSo3YaDrTYc6rDjcLczJwe9uX5Mw5mJEHlOoaoBfFxiz/5uDzY22LKuxobNjY7s + 7fHm+LCG66fCOTsdLttruGE0iNNLfSWeuqom8IEuZw50O7Gn05a9cp57u6zU0b5nl3tx01pfblnnx8UN + /lxY5cXpCWc5ljsX1wRy29pgzkz6cmzQVWKStTpf8OqKxayqMGZlpTHLRDQur7ZibaMDqxudmBRBOSox + e6hI4mKOJS3pZgIRSNmKIezCQIk3g2V+DJcHMlatkTYUwkx9KMsataxui1TnAl7ZrGW0QmJriaccx4PB + Ag/6cpS36+1pTVX+2aLAjpYUe9oznWlMlbYaa6WOAC6LsaAy3mrW/E2woyrRXkVFoq3UCxsapW225ki9 + yHemu9CF7jxnunJd6MyT44sobkhzpCzOhuxwIxKCF6gGcFjoAtX4DfK/Wsp5hIcYSX9vSUKcA8VFwdTX + RdMo9bq8KIw4qbMREqt1QWbER0q/Y3CTUpnT2oO8lGAqsiNpK0+iqzqDysxIIn2tCXSSvtJpAUFO89E6 + XaOOAk6WYxQZHGlQ0kAXhjFYFyf8I4HiFA9SdDbESJuJEXEZK23IECl9aJARvj5zJabPJ0jaUoTyBr7U + 27hY6Vtk+6goG2JjHIkXvhhjcCBcvg8NMZP9TNQsIMroPRWyHBRoTnCwjcRPe0JCpR8KdRZx50qI8ga8 + v4n0T3L9sm9yhBGZUXMpT1hIfZII4AQj2hMtRMC5sqY8jPWNsYzVG9SU6wVJLhhEhCdEWkhb9qYsS/pc + 4ShFcg9b8wNYUhVBXY43iXLf9Zq5RARfM2sAe11JYsA88pSRG9LGhzM9mMp2ZybTieXpwtMUYzd6EaNR + 8xhWMZ8Rg2L+LmIkbhFj8UaMSZsdF4GulrFSxpgwKW1ZRbTAYMaU3pxp6bOnI82YCTdnRkT6eIQFnbK+ + Tknzp11MadhiSrRGFEmZr1kgcWMhBWGm5Au/Kgi3pzDSifwod3J1HmTrvMiWuF8Up6EhM1rqWyLdubEi + WvUsSY9gJDmUlRmhbM/Rsq8ogj0lYWwt8GdZihMTcbZMSP80LvdqTCvnFmLKWo0ZO8KtORxpx/EoO05I + v3dCtjsZb8fRWBsOyDXslr52m9TVndLvHog25VisBacTLDibYMbN8SbcJtd/n+DReFOeTjTn+SQrnpW4 + 9oxiCMea8lKCOa8kmPKy4MX4RTwbt0C2W8gTSYu4P24ud0Vfyf3JC3k024KnCu14usSBJ4vsebjImQvS + NvfFyvPQWNMd4EincKO++FgR7rn05hZKG8uX9lbIeGM9k63NjIooHWiopqe2XE0DPdBSzWhnAzN9bawc + 7GL1SDfrxrrZMNHH5pkBdq4eZt+GcQ5vW64uTy+pp6c+n56GPAbaihntKWdySbU6CnhmqTIXcDtrJjsZ + 7q5hoL1alvs5vm8zF64/yoN33cyrzz3G+2/+SR0BrBjAf3r6UZ544E4ef+BuXnr6cd7403O89fILvPPq + S7z4xCPcfuNpdq5bwVh3C/3NlfTVldJTU0hHZTZdVdl0VmVIPU+ROmygOiNC4k8EValaqlJ0VCVHSV+k + o9ygmL8hVCgvmmmDpE4FUhURTJWUFeEBVGr9qInwFnhRr/MWHu9Lf2Y4UyWxrKyKY3VdLBtb49nZncS+ + 3iTpk1M5M5rNeTUFdJb02Rmcmk7h8HSyiNdYdk9GsX1cx9axSDar0LF5VM+W0RhW9EbSVeFLkrSrILe5 + uNlfjaP9Ndg5LMDKXri9owlWwq+shGcpyzZOAkdlJIpoABcT3LyEgwpH8hV4+lnh4LYIW8drhOdfg4fb + fMKkD8kwuIoWDWFJkZapci1rRfftbBfeMqjljpUGHt0Yy/Pb4nl1Rxzv7Engz3vj+fOeaN7YGsGbm8N5 + b2cMH+9N4aPdKby/O5G/7Izjg52xfLxHuMmBBD5XRwAn8dn+WD7ZrePj7eH8dXsIH6kGsIZPd4fw1QEd + Xx+M4tv9er7eEcU3W3R8qxjA2wz8sl3PDzvCBLMjer+R/b7ZFsy/tgZIGcS324Pku2B+3BnEz7uCVfyo + mr2BfL3Fj682e/P9rkB+2C3rd4Xw4+5ZY/fn/eH8tE8rCP99+fs9Gr6Vbf9oAP9yUEkDLdsckGUpZ0cB + R6lG8C+H5TiHw/jleCS/nIri51MGfjwVx7fHU/jX8Qw+O5bNx0cLef94LS/vr+OhzRVSB7LZ35fMrt50 + dvZms60vR3RxnpR5opEL2L6kgK29uWzqzmJDZ4bE2jRWtyaxqjVBxbKGaCZq9Sqm6mOYkf57RWsKqzsz + WSP7rV+Sz/rBQjYOFbFxpJh1Us70ZLG0LYk+6ee7ayJpKQuhKt+f4gzh0cnCz9LcKc0PpFL6t5ICjWoQ + pyd6kBzjQkqcC5mynK/MfZvmS1qsG8nCt0pzNTRXx9IgqCyOIDPJU7SUDRrhvo42V2BrPgcH0RkqLC8v + X6Eu21tejZ35NdiYzxN9ugAL0afmohmsFC35uwFs/rsRPLss9Vy++6MBbOesmL3/ga3Axml2dLBiBNuI + BrN1lmWBneusGayYwC7ejrgJd1dKF2WKISXLlJcdzj52uPjb4R5sj1eIA75agcQMH601oRKjE3KDKKqP + p3e8ilVb+9l7cjVHb9zC5v1TjK3uoLmvlOLadMpqs6lqKqSurUwdCVzTVESlkv65oUAdnVpenUN5ZQ4l + pRnq6N/4RNGmsZcNYG9iYgLJyNRTKn1VY1M+be1FLOkXXjzVyuq1fWzcOMDKFZ0MDVXQ1ZVHc3MmZWXR + 5GaHkZsbRlZOKJm5oZRVxtG9pITJ5U1skPPdf3Q5157fwtnbdnPm4k6uu2UXZ+48yI33nODM3Sc5c9dp + Tt91iiM3HWT3dTtYd3ANMzvGmdwyzOTWEWa2j6nLbaN15NWnkVQaS0KRQS2zq5IprJdrai6ior2C5iWN + 6ojgFZtWsOXADvadOsypCzdw092389DTT6ijgV/989v8+ZMP+PAfH/GXv73Hmx+8yctvv8Tjzz3MA4/d + zUNP3qf+o/3GW05z3Xk5x5uu5ezN13LgyHamlw/R0VNLrdxbZfRv72AD0ysHmFoxoI66zspLpKGlgmOn + 9vP8n57gvQ/f5uNP/8qHH3/Iq2+8xhNPP825CzexctVaqqprKSmrpLq2jsqaGpJSU/EWXWppbS1Q/s+h + mMCXYfu/DWBHKxUOUvfspXSSeuco2lkxgRW4yGcFymhgZQ5gP5dZAzjKx4VkP1dKgtxoCHGnM8KTQb0X + 03HerIjzYl2MOxuiXdgS48xmwaYY4WxxrsKnnFka50hvjC2tOuE+YSY0Ch9SDOAO4ZrKKGDFAB5McmUo + 2V1KFwaTXeiJs1MN1Wrhx5UBc6kQvlyulIoZHG5Mnd6CxhgrGgR1MZbUGiyo0JtSqTemSvhHXZw5jfEW + 9GU5M1MewK6uaE6PZ3HdeAbHlyZIvNMJn/RjuaK3y9wZLnSlP8eJvnRn+pKd6E10pDveiW7Rc20GO5qE + E9dHyO8IT68WHlUpOrNcrqUyVM5RMbaFwzWELaQpdBYtsjxrAhuraFX+jxZuQpli/vpdTa5w/6yga8gM + nUdG+CIyhfvm6owoVcxr0RaNyfK7ac60pbqoZWu6i8CZhhRHapPsqE62VlEj2qU6xZLyZHNKkkwoTVhM + XaYlvZWeok01rB82sHapnpVLJGZ2BtJd4UBjvgVV6UaUJS2gIEHOJ154Z/wCioTbliSaUiR8LctgpL6Q + mSz8NEHOP1pKnVxjhGL+XjKAdRGLSEqwJjPdidwMZ7Ll/BQDOE01gC+ZwFJmyja5cs4FKaJvUhUDWEkH + Lf24agA7kx9vL7932QCWOK9Tpl+aNYCLEt1VAzhTZ0disDk6JZ3z/xgBrLuUAlrvY0SUn+iYAIvfDeBo + fzPV+L0Mvb8xMaJL4jUWJIRaqqOBDf6LVUQHGpEoPF1BklYxiC1JE26crkB5aTvKgQy9ExlRAp0zacLP + lRHAidL3xoWIblKnuxOtE6iYwLNQsiGGhVii1doSGqqYv3aik2zRhCrmr6KFXGU7VwIUA1jal4+vG14K + fNzw8HbB1UMZAewsy+74BvgQGByAOgrYz0dNFa3Ov+pih42dBebWppiaLcbc3BgLCxP1f6cmZrMjgBca + z2ORQDGAzRQDWJkLWHnRw1OZe3j2d72l9PJWXr5zwc9fMX/d8Q9wxUN54chNmZbAGnd/OfcIZ9GBEo8T + XalKcqRHnul0ngebi904UGHPkTILjldYca3o+GurLTlVbcrx8oUcLZnLqeL53FC6mAuV5lysteXuFnfu + 7wrg9hY/Tijz4iYuZiriavr95tDqOocerzmsjF7M/nwnrqvy4PpKO87IcW9tdeLOLnduanPkugb5jVpT + TjeKLulx4PYlTlzotOGGZitO1VtypNKUQ2Vm7C+xZHexJdvyzVmdvohlaYtZlmPOikIbVhTZsqrIjs0V + zqope21nEDcNRnLHaDy3LjFwQ1Mo+4q92JLtxtoMN2ZS3elPcKdEGZXrovx/8ko8ra7AzVpgexVe9nMJ + cBTdKdw13ncxuaLputOljyzxZX+1L4caAznSGiQIYF+jJztrpO+sEg1aaEtfkhE12qsoDZ1LsfSBeaLN + 0wKNiQtYREzIIgzahdL+5ksdWkCA9EGBOnsiEvxIzomhTDRE95IOVq1dzv4ju7l41wWefP5RXnvnBd74 + 84u8/s5zvPr607z48mM8+9x9PPaYxLiHb1GNYAWPP34rjz16Mzdcv4eJsU4y0/Si311wlpjg5GCFm5sj + zi5Kpk3hKmos+d8GsAJ3X8UIdhDuY6aOAHb0sMJVSfMc6KQawH4aqWPBUr+9rHB0M8NJ4O4l8SbAgSCN + u7QVL7ThXkQq/+sWrpGcoJU+Jlq4XBKl2Qnq6N/i1GjptyLJi9aSJxqoMCyY6qgI2mJj6UlIpD8llcGM + DIaysxnOzWU4T7RddqZoyAyW5KSLdp4dBdydmUyPMhpYNYRT6ctMnTWAs5T5gy8ZwFmZjMuxFIxkpKlY + KhjMUH5Dtk9PYSgthaVpqSqGU1MYls9jacmCWQN4NDWWbl0Q7YFSd3xdGfP3YkVIIOt1WjYkxrA+I4E1 + WQmszElgeU4SM3kK0pjKz2AmP5tlBXmsKBaOXFjMcuEAG1taOTQ5xaHly9k6OsJkdzu1pQVUFOXS3Cgc + bGaY686d5sXXXuSf3/yTH/79Az//ppivv/Hrr7/wxRdf8OJLL3Ho8GF6enuEw5XR1qEYwFvZf+ggM8tX + UFFVKdyskt4lS1i/YQObN2+muqYSXVQkiUkJjI4Nc/HiTbz//l/kmMrI3l/48cdv+ejj93nm2Se4+Zbz + 3H7HRalj9/PCC8/wifCaX1UD+Dd+uWQEf//9t7z++iucOn2K1o42wnURapaDNLm/M8tneOypx/nkM8XA + /oF/K8bv71BGMitmsGIk/5/xb7nmP+I/BvA3fPTRB9x1562sX7uK5qY6Sorzqa0so6+rnenhpYz191CV + l0V2bJTEp0iqMpJYs6SbC3t38OYDd/HtO6/w8/tv8MO7f+Lrt57hmzce51+vP8C/Xr2Tz1+8mb89fppn + rlvHxa19XLusnuOTNZxb0859eyd45tQmnj29g3PrR1lWnU1xiCdx0laibE2JFB0R7mCN1lFihJM9/k4O + eDs64Cmf3exs8XC0I1xiQXZSPE1VZVQV55EQFSbfW+NsaYKHrWhpZ1t8XaXftpU2amGGnaWFCicr4Xk2 + Uso2DrayzsZc+nx3snIz6BvqYU62knIjzYfCdGWid2/yk70oTPOkNNOHymw/KpW5E9PcyBWClqazEFiS + KURO+cd3iYiz6lw/6vN8qc/3oaHAh/byYAbrdCzrSWbNQDqr+lKZaotlpD6SoZpwBqvCVCytCGG0NJjJ + gkAJJn6szPVilXS264SUbShwZHOpm4qNhS6szRXkyXcF7qwr8mRzmR/bqgPZ2aTh2qF4bp7J4t5NZdy7 + pZz9XVppxOZ0xF9NZ9JcRpW3bKqdWNfixYYObxGuPqxv92aTkv65z58dA/5s7fNhc48H6zscWdtqI9ta + sr7FnI3NpmxrsWB3qxWHlDkWOx04pqTYbLbmZJMV18t2t/U6cfeQG3cOe3Bh2F1+34YNreZM1C2kt/wq + miuvpLFyLp01CxmRfTYM+LB9KIjN3X5MSwDolKBUq7+KEu0VlETOoUh/GVdQLJ9LZX11+Fwho/Ooi7iG + ptgFdKYuYrzUgv1DHlKxUvjk3hK+eLiMf95fwEe3Z/PY3mAOD5gyXniNENgFFAaZkBtgTJq3BCfXK9Hb + XEWcIMPlSgok4FYHXUm15mqKJAjneF5Bju9csgMXka4QJNlX729CqJLu2XMBQd6LCBLi5SskzEfIWZCf + ESFCqpQ5gJW5L/Thdhgi7dHrHNFFOqjzXnh7m+DqtljExyLs7Bdga7MIa6vFgtl0z7Pmr7kK5S02hcwo + o4FtRVjbi6h2kMDjLCLZzd1OHf2rpIFWlhVT2NbRXMXv8yoJyVFSQCspTxRYyjH/5whgZfSv+sasvYgm + O+X4NnI8hQi5q+ZvYJDvpfl/fVUDWEGEkr453Fed/zcwePZNOcUAVkxfZe5fFxcLPNxt5Frthaw5q+mf + FSjLAUKqFANYectJE6ikgBYC6Osi980LfWQgUREirkOU7yQQBnjKvfRFr/UnJjKIOH2QagBHhXugFxGm + pIFOSwojJ0MCYZZOLfOz9RQXxFBRkqiOBC7MM5CVHkZGikY1gOP13mgDHQnwtMbbWZ6H3B9vZ3vVBPay + N8HHbh7hjleQ5TOHzsir2FYk9brHkxcng/l0vZ7vthj4ZWcE7A2BPT6w213gzG87HPnXjBkfdMzlheI5 + PJQwh7ukzj4QNYcnZPmlvCv5m7SH71b68ss2DT/tj+Cbw9F8diSO9/Yn8eSmFE4MxDNS6E+2n9QvZfSv + 1RxC5Hw0NvMJtFxIoMli/BcZEbjYmCAjYzRmpoRamxMm5CREOkCNEJNQuQ69EOdkIbW5vh7qHMA58txz + pS4VWppRIstFUp/ybYSY2S4kz34+Bc6LKHRdTKGzMbkOi8m0WkCqyXyyLU2pcnOhKcCP2iA/SjU+5Gq8 + SPdzI93bjSxvL/kN6Yx9vOR+eZIuzzJJyFC8mx2xci6xDubE2MqxnOdTFryI+khp+/FzWZpjwrJKe3b3 + B7NvOITdS4PYORjA5i4hmC3S7zTbs77VRfoEeyErltTojcj0uZIEpzkkC6lME7KU5ifXKKIh0d+VuCAX + 4kNciAlzwqCkvhNhESEkKyxw1gAOkW3Cfd2JEdKREOBOkq8DyZ5mZHnOpz/Vk12tsZydyOKhnZW8cqaD + 12/p4tXbmvjwyTa+eKOFHz5t5Ld/1Ui0LoVv8vjt7ykS+KL55uUoPn0klDdu9ueFa9158qA9Tx6w4+mD + 1jx/2Jq/nPPis/tC+P6pKH56IYrvXtDyxTNB/O1hfz68J4C3zvnz3GEf7l1nz/kJc04OmbCzfT4zFVfR + l3OFagSXGqQPkn4vO2KuKpZTRGCnR5lRLHGosz6aoZ4MWhviyJP4lCmxKjlOuX5LQqUvUgxgQ7g18ToH + UuNcyUnxpiDdn6J0P4EvhSme5Ce5U6CMDI4XESuxTDFz86JtKU5woEp+o70okP5KrfTfISypCJW4pWNF + ZxobBvPprYgU4exIqhDxVK0ZOdF2qnjNjXZUkWVwIlPEY5L0gQrSo+VzjBNZMTZCLMxE/C4WkbuAqlTp + 09OvpCPvaoYrFrCi2YxtvfbsG3TmwKATh/rtONJnz6kBJ073OwtcuU5wwxI3zkq/f2HcVx39e9OkP2eG + vTje48iBNmv2t1pzoMOOgx0Osr+73F9/rh/XqAbwKWUEsNQ7JeXzhgY71lTbsLHRiT09PhwfDePssijO + L9dxblqWx4M5PezLkV4PDna5qObv/i5HdrVZsr/bWo7lwvlV3ty9PYx7d2oFoSru3BzEBVl/8xo/7tkS + xt2bQrhphS+nRuS6eqxlfwu2S3zc2mTGhkZj1tQZsbbRis3tjmzpVF7UcmZ1owtTlQ70ilhrSzcWmNGe + aUlnjqwrcGOw1Jel5QGMVmkYr9EwWRfKsibFANaxtl3PyqZwxir9WVrixUChB0vy3dR0z23p9pfMX1ua + UuwE9rQpBnCaA9XxNpQZzCiINKJEStUATrSnOlmBAzXJjtSmONCS7Up7jps8Nzlmnivdwk26cl3pkuUO + +a4h1ZHKWFsKdCLiwozQhy2Svn2+Ovo30O8q6ePnExFqiiFK6mis1BfhWeXl4dRU6SnNDyUuwpYIibeG + IAtSIl1IM0jblTI+woXECKmzCYHU5RpoLkqkMj2KaOnXw9zN0bgYEey0gHCX+Rg8FpAk8T430oaSWGdq + 03zpKtXRUyUCSup9XJglYdLfRoSYEK23kfhjLbHIBF/fBerc/r5KX6y81BWuGL/2IspspVTm/HXAIPVb + JwI0RGMpsd1E4psRAXK+gQGmKoKCzKS0kNhnTVCArcRT+1kE2BDobyH3QHlRw0jaqCUpegsyoxeSL5ym + OF75Z5gR1TGmDOQIF6w1sKY1ieH6GFpLtRQmexCvtZD7IPtJm00WHhqvkb4hZDE1qa7SLsNoyPWWe2aM + IeQaIoKvEtJ8lXCXq0kOmk++Vkm3bMFIpjszWW6syHBkZZotU7HG6hy/o7r5jEYpWMB49CLGYhczGreY + MWmvo4KxBBMpZ03g0RhZvoSxaOFZggnpn8YjTZgUAT8RIgg2YUTur5IOsFbOqSxUYo1GrjVEIMt5ct6Z + wYvJCJRS+qycMBt5Xo4U6N3Ji/IgR+dFjsT94thg6Sf0dOTGsSQvjpH8GMZyophKD2V1RhA7sjQcKgzj + cEkI+wv82JTsxNoYW9YZbFijs2KV3LPlwuNWByxmS6g5e7TW7Au34oD0eYdjhdPG27M/xprtUu/Xaeay + VnMNG7Tz2WowYU+iBYdTbbg23ZrrU8y4OcWcewWPJFvwRLIlT6dY81SCOU/FmfGsMiJY1r0i37+SZMZL + iUayTjGABSlGPJwwn3tiruSBpPk8lmXB0wU2PFdiz9NFdjwifP9cqjU7IkyYCDCnP9CJfuFFgyJ4RvOL + WFpUJu24hCXFpYzV1zHV2sxwUz1d5SW0VxTRXVPKksYqRtsamOltZXl/BysH21k11M660R42Tw2wfcVS + 9qwdY/+GSXbI8nRfHV21ubRVZdDTkMtQewmj3RVM9FUz3V+vzgW8eryDEcUAbq1i+XAPuzas4Oi+bZw7 + fYRH772N155/UjV/3331eV584iHuv/0Cd1w4w0MiMp977CFeFwH85kvP8fLTj8u6W7ju0C42LRtj9Ugv + KwbaRMDX0VebT3+Dkk63mOHmAjqKEmjJjaY1L5rmLD1NGQZaMmJpSo6mxhBOtS6UqggNZRp/igO8KQ70 + olx4anmoDxUhXlSFuVMT7k6DzpOWWOknsyNYXh7HurpkNjQlsaU9Ufr7FA70JXN8MI0z4zmcn87jxpls + bpjJ4OSyFA4ti2fPtJ6d0xFsndSyaULLZgXjEWwai2TDqJ6pnlCaSzyIDlqIj9M1ONldg63tPKyES5nZ + GWHmaIqZk5mUAgfFBDbFytEYa0clRZwxNq7m2Em/Ze9uga27KdYui7FxXoCTcB1Pz0UE+5kQE2JNUZxc + S6q3cANfJkt82dISzInBcO5aFcfzu9N551A27x3K4INDKbx3IJ4/7zfwxm4tb+6P5L3jCXxwIpX3Dqfw + 7v543tkRzVtbIvnLdh2f7I/j86PJfHEkmc9kv0/36PhoRwR/3RHKX383gDV8eSCCrw/q+OGAnm936fl6 + q45vFAN4eyy/7jTwg8S8H3YGzpq62wMEgXy1zV9dVkb5/rAjiB93BfKzYgILftgRwHfb5fst3gIfftgd + yI97gvhpj4Zf94fxy4Ewfhb8tD9UEHKpDOV72ebbXbLv7v+kgFaMX6X8Sfa7bAjPzgespISWz0fC+PVY + OL+ejOCXkzp+OaHnx+PRfCf48mgM/zicxEeH8nhzdxFPrM/llvFkTvbGCW9I5lBfBvuXZAkPyefoSCEn + xos5NVnCsdF84ScZ7BJ9v6Mrke3d8ezoS2CnYEdvPFu74mYh67f3JbJ3aSaHJws5vryMa1dVcnJtFSfX + VHJ8dTkHlxezYzSLtUsSWdZhYLolktF6Lf0S1zuLvWnJ96K1yI+OsmA6y0PpqNDSXhZBS2EItdn+1GT4 + UJ/lR1NeEE25QbLsT22GL405gbQWhNBcqKEuJ0B4ncTRSCuipQ8Mdr6CQAfRGY6iM6QMkzLM4QopryTU + 6WqCHObjZTkXO5MrsTS9WrToAixsjLCyN/vd6LWUZQu7WSjLs1C+E30pmtNa+Uep8iKywNZZNOolWDvJ + d7K/CkcL1QS2UV5WFu2qwMHNBhcvB1x9HHFWYY+LwMnXHmc/WQ6ww00xgEMd8It0IkA0tm+kxG7ho7E5 + fuTVRtM7WcmaXYPsOLaM3adWsWrnIEPLG2leUkRJfRrFNemU1udQ2VhAeV2eIJeK+nxqmwqpkXVlNdkU + FKWSm5dIqsSduAQthliNagArKaBTUyPIL4insiqdpuZCunvKGVpaz9R0O2vW9bFhQz+rVnUxNlZLf3+J + Ogq4tFRPTk4IObkaMrIDycgNpLg8kqbODPrHyplZ08z2fcMcO7OW627ZyulbtnDqZsHFbZy6dQ8nLu4V + HODIxX3sObONTcfWsGz3OMMbe+lf3cHAmk51eUTQOl5DRm0C0flhxBRoSauKI7s2mdzaNPLqMslXjGC5 + 1vqeWrpGuhiYGWJi7TTrdm1m97EDXH/zOW574G4eee5Jnn/jT7z23hu8+eHb/PnTv/Dux2/x0hvP8fwr + T/H8q0/zzEuP88Bjd3HXA7dw+70XuPP+W7j1zhs5df1BNm5dzvC4HH+4lbHpPlatHxdM0NFbT15ROiXl + eaxYPcWZ86d54JF7eFp+78lnnuSmizdz9MQJ1m/cTEtbJ2npOeQVlFBT10h1bT1JKal4eHljbmmpGsDK + /zL+g/89AlhJFavAXuqZ8mK8kk1NnVbLyUI1ghU4CZTU0MooYGXaoMsGcIpoyNLgPxjABm+WxfuxJsGX + TfHebJW+eUesK9sFW2Pd2BDnxvJ4N+FJTgwkOtIX70BjhDlNwtnao2zo0M8awL1xzvK9Mg+wO0sSnOWz + Ix2G2fTP1QHzqPC/hjIVV1MpHK820pR6gwVNsVY0CupiLanVm1IRZUSl6OSqGGMa4s1ojbdgMNOJlWW+ + olWiuXEqm5uX53LT/8fZX4DHcWVd/6gTs2UxU6vFUotbzFKLmZnRYpZMsizLKDMzxw4nDjMzM9OEJxOc + MDjJ7+4q2ZnM+73fvff/t5/1nOrqUnV11amz1+pVe5/JLE6PJbCrI0h0j4511T6sKvMWbuHOQLoLfQYN + 3XIPdYiOa5djbBWu2yTcuUHurVrh6dXCNStDLVQDuDJYPk84XK1w+vrgeTSFLKQ5eCEt0rYKlLmAFbQK + D2wKNaVc+H6BYv76ziFd2rTAeWSECucTrpgXbUpprAXViTbUif5oNjhInHdSs4Fb0pxpFi3RYHCiJlmp + QGSpotIgx5KiVKhaLH8/l+L4+TLmWTJQ68HagXCJ2cnsWJnA5qWRrO1XknE0LCm1pjZrEZWpcylLmUNF + 6gLBfNGgCneW7yV8rUC4d0bEIlLk2JRS0DHyHcPle4XrF6sGcLjocMUETkqwJjPdmZwMF7IFGQZ70pJs + VBM4Xb5DhjKnsCAn2Z58+T5FqRpKM7SUXzCAi1NcRHc7qgZwumoAW5IZafOXAVyUJNskuZEb7UxKiA0x + PvL5Hor5OzMHsGIAXzSBFUT5mKlloBXzVzGB44Q/RvuaqaWgowRKG+dvLu9bkhBgQYy/CVG6xX9ByQ6O + FcSJ/okPNCNNyfwVnZMe5UR65EybJm1quBxPmOj6MAcSQhyEm4geks8M9bckSD4zUPYdJAgRXaQgKMha + feA1KMhBtJQ9gcGOAo06z71iAPsrBrCPi2q+Koash5cL7l4atbSuYgC7eck6H3f8AnxFP+lEm3mJNnNX + qxQqhpyNnQVmFsaYmhlhbm6sZgEr5aAtLBerZaBNzBbKezNQ1lkrBrCzkkCjUZNbgkN0hIYFEKr3IyTE + V47JC/9Ad3nPVT5DYo3EImdXG1x8RbfJ91YM4PwUNxrStQzKtVxT7MPOci+OVGk4XmXP6Wp7ztbbc7ng + dK3ohrJFHCqcw7Hi+ZwuMeLKSnOuq7bhjhY37u/y557OIM41eHMox4YNsaK7AmfR7TaLPs9ZrIuRv813 + 5KoaD66pdeKqKiuuqLTgyhorTpebcjh/gWiehZypE03S5chtfRpp7bmmxZorGqw4U2vFKdn2VLUdxyrt + 2FdiyaYsI1anLWBl6iJWZJqwXKC0EzlmbCiwYm+lhhPNPlzdHc6NvbHc0BPHlcJHzjRFcbwxmn110Wwo + j2CJwUN0mwXBLvPwcJiLxmEeGseFuDopVXDmo3c3Ik40caZorfoke+Hfzqwr1jJd5sq2ancOt/lxuF0n + rY4DrTIWlcn4ZzCmLvRSqsIWUBVpRrGMHdl+c0nxuRRDwKUkh1xKvCAqeD7xottSUrwoKk6go6OaFSuH + 2Lp1E8eOHeLa66/gkSfu55U3n+etD17mjfde4OU3n+bFV57g+Zcf47kXHuTJJ+/mscdv55FHbuHhR27i + yadu59HHbuKqqw6wdOkSMtOiRLe7qDHBUeKIMj2i8vu4nfLgmsSRiwawkkWumMAz5q8LHroZuApvUSqW + OLnbXMgCVuYC1uAr/V4XpEXrJTFIa6rCXZmS0N+JAIkvwSHuhIS6Ex7hSXS0TsaZYLJSIyjIjKVIQVqM + jB3RFCUI/4jVUxQZTFlECPWxUSxJTqQ3xcBghmLQZjGUk81IXg6Dyvy/2Vn05WTRm5tBT3a6II2urJS/ + 0C2ve7LSZDv526x0RrIUAziT5VlZLM+QVrBUySoWDGdmyP7TGciQ7dNTGExLYTgtTcWoxOVReb0sLVVg + YFlGsrTxdIuObZd7ql/u86U6D1YH+7E+Ss96QyzrMxNZm53ImpxEVucmM6EgL43x/Awm8rNZXZDHmqJC + JgpLWFVSwZrqGrb39LB9cIDpgQFW9XTSUV9Fg2jgtpZaxieXctUNV/DCGy/y+Xdf8MPvP/Mr51Xz9ffz + v/PVV9/wwosvc/zkKQYGh6iqqaGzu5dtO3Zx4NAhxicmqa6tp7yymu5e4SzrN7Jh0zQVVZXC/SJJTklm + ZGSI22+/hQ8/fJ/z55UM3fOqofvRRx9I3xL+csN13HrrzTz88IO88NJzfPHFZ6ppq/w7/7tyLPDrb7/w + xptvqAZw65I2omKiZewJIF3O77oN63jiqSf51xef8/Ovv/CHHPvfMZMNfP4/4Lf/wh9/yN/8DefPKyby + r/z083d89PH73HnnbWzcuI76uhqKCvNpqqtluLeLidERVgz0sKS6hLLUeIoTo0WHZ7B9uI9bD+7k7Xtv + 4YfXn+aXt57hpzce58c3HuKXN+/nt7fu5ZdXb+X7567hi4dO8PLZSe7b3sFNa6q5ZV0t929r54l9g7x8 + YpKXT23k5qketlRl0KJ3p8DFilQ7UxJFO8TIfRXr6kyUhyshbnKvaDV4Ocv95eiAu7Mj4YF+5Er/aqwq + p7Ioj8TIUDyd7HGxNMPdTuFtTujc5P5zcsTeWrietegPGzucbe3R2Ms9K3CwE/0hcUIxgHPyc+gZ6GZW + igxoqSmeKG1KshvJCVoMIpgy0zzIy/YmP9uTzBRnEqOtiJWBKTHcnPQY5cdspcSHGxWyTXW2F9U5HtTk + etBU5EtXZQhLW+PUDOCJziSWNscwVBNKf2Uw/RVBDJQLMRGMKPMOF/izMteb1TnuTGa6MJXpyPpcB3Uu + YAXr8pyYzHJgVYYjK+W9ldmOTBZoWV/mxeZaHYd6Ijm71MCNa/O5aUMR+7tCWVFoR1+6EX1ZxowVWzNx + wQDe3O3Dtj4/NncJge32ZmufDzsGfKT1YlOXlnXt9kw1WzHVaMHaRjPWN5oIYTRle4sl+9vtONzpyJEl + DhySbQ7Um3O4zpTLmi25aoktl3cqcy/asqPVjLVNi1nWsID+url0Nsyhp2kRI23mjC+xZ+ugN7uH/NnS + 4cnyEmtaE+ZQFjSLXN9Z5EubFzqLHAUhshxyCQWBl1IcMJdSQXnQHCGkC2hLWkRfphHrG2y4ZWs4L1+V + yUe3F/LZ3cV8fm8pT5+M5vRyR1ZXGNMoBLk00JxCP1OyvReS6iLBxHoWaXazKHWfRYNuNp2hC2kLF/Id + tIA8j0tIl0Bs8JhNkvcCYrwWEuK+CD/Xefhq5+PrvhA/xQD2MBLIem8jgv3MCFWe1guVThxhT1ykA7FR + zqoBrNOZ4+lhjIt2kQSShdjbC+yMsbM1EVzM/J0xfxUopEZ5ou1/M4DV+X8vGMBaNzsJTorI+Y8BrGQC + K+avagArEEFjYy+d/uL8vyr+ZgALlOxfZ429SqyU8s8z5q8PgUE+BOt1MvAFqWWgQ0K91fkxlLkyfHQS + 0CTYKSWgtVoRTgJPT3shdM4qsQsUIqUP8RQC6EGALCuvlSecFKgGsPLEnZA9f183lDmB9UHKejd5rSHA + R4ve34vIEKX88wUDONyHSBkwwkO0ahZwSmIgWWl6stND1TYnM5zC3BhKixIoLoilICeKrPQQMlIDyUgK + pVQXjwAA//RJREFUJDlW/l4CcLBSbkPInU4Enp8MFj5uTnjKefN2NiLEeTYp0h8a9bOZyjLjyhZ3Hh0J + 5t01sXw+HcuPu6L440AYHPKHg14CV/7cr+WHddZ8PGDEKzWzeTx7Fg8aZvFE6iU8m3kJrxTN4bMeW35e + 78353TrOHwnm++OhfH0qjo+PGXhqWyqnh+JZVuRDnt9C9Faz0NvMIsx+rrTzCLKcT6DxIgKNFqM3MSPM + 1IxwC3OibayIkusWIdcx1MGacHXwdCLVQ0O2qyO5jpbkWJuQZ2FEkZDfUpvFlNkYUWq7gCI7EU0Osyl1 + nkuFy1wqXRdQrlkk60SoWcn71nLPSF/oCNTRJH2gUu9DsSBb50amlytZXh6qCZzlKeOiDKQpQoJi5fpH + 2smxWRuhN5NjN5lFsuMsavXzhZjMY0XBAjY1ypgx6M7122K4aY8QzN1RXL8jnMumvDkw5sjufit29dmw + vtmcpcWmtCbK8QbOJdt9Njle8l18nckV4p7p506qvytJARqS9RoSwuTzwzTSXzSEBzgRJuv1flpCda6E + ebsSLcccK8cYL2QsUWtMtudCVhQFcnI4m5vWlfPgvmaePdXNE6faeOh4JS/cUM0/Hq7iy9cq+PnjEv78 + dxF8m8WfX8Tz6/uh/PRmED+8HMyXTwTzyb063r/Nnfdu0fL+LU58eLMTX97jyY+PB/D7S6HwZii/v+nP + L6958/0L3nz3jB9fPRTIhzf58fJxFx7bacsDW6wkKJpxcmgR29sXMVG1WMjaIiHP86iMW0iRiNJMIb4Z + YXKNUhzoqo9iWV8Wg50ZEgyjqCmPpDg3CEOsRgiyMv+vFfERdhjiNGQZPMkTspyX6iPixVNFgSIuE7UU + KOawCM7saGU+IlsK451EILvSVhjAaGMskx2pjLclMSqf11cRIm0MK1uTacz2ITNUBKXPPJL9F5ETZUuu + iNfcWCeBCFsRrlkiGg16O5JD7UiPlnXyObkJIohFwJekmFCVvpiWXCO6ChcyWmXM2jZrtg84c3DMjWPL + PTmutENOHOt35NSAhstUuHCmT8uZXhfO9mu5cljE0ZgXV456cdmgK0c7HURQWLOvRfqZxJmDHY4c7NbI + Pjy5bGkgl6/Qc2a5npMjQezv9mJaybitsWNjgzN7unw5MRbKVatjuG5NNNetkuVlAZwZ8uZ4rxtHVANY + w0ERW3vaLDgi/fTaSU/u2BbIAwciuH9/uCCU+/bpuXtHkMRhb27ZpOPeXbJuh57bZPnqCa0chwOnx5w4 + MSIxtM+aPZ3mbF9ixg6Jm/v6XTgw7MkeOd5dfd5sbHFlpNhKSLoJnTIedWSZ05FtS0++hqESb0bKdSyt + mjGAxxv0TLZFsL5DRNpfBrAfw6Ve9Be50ZPnwpJsZ1rTZwzg1jR7mtMcVbRmOtOS4URdsj0VcZbkhy4S + cWFCZaId1dLfatOcqFF+iEnT0JjuQlu2lvYcV5bkutEp6Mp1vQCtHJ+r+sNNXZIj5bHSL6IsiFUMYImr + gbr/NoCjI62Jlb5nSNZSVBBIZUmY9ONAksIdiPRTfrCwITNSS3aMO2nSJuidiAu0l9deVGaE0ZAbR1Va + JEmBWiI8bQgRQaXXGhHlvpgEXxPSAs3IDbehKMaRCoM7jXlBNBeFkZfoSlyIJSGqASxjaaQtkWE2EqvM + JaYtljg2YwIrxm5QkAUhemvCJK5HRjoSJf06OtqF8HAn2d4aP50ZXl5GEveMJc6byN+Y4CfHrhjA/job + /HyFmPra4O1jI9tZ4ONtLuuUuYJNiYu2IyNRKRlnRV6yUhbdgoJ4C8piLenN92WyMZ7VbSKyamLkuPWU + pHqSIecrRe63pDArORdGxPjOkfvwUiqTHegTztlc6E1WrDnxofOJDpkn534BSXoZP0KNKYk0pTHWipEM + jXBJZ9ZIX5hKsWFVrAkrohaxLGKB2q6IMlLn+lXKPi9XoJq/AjnGpUkmLE0wZjROgYmKsVgzlgqWRZkx + Fm7MMr1sGyDwW8xooDFdEeY0RphJHDGmOMiI/GCB3kRgRmaQCak6IzLk3OfIOc6PdKYk1oOiWC8Korwo + jPahQskATo+kKyeW4fx4xovjRRxGsToriPXpvuzO0HEsP5DTxQGczPfhgMGFnbH27I6xZ5ecq21h1qzX + GQsUA9iS3TI+7gy2YFeYcFrZ5kC8A7uF22+S87TG71JW+1/KmuB5rIs0ZkuSOXsz7DmeI/dtpjXXZdlw + d5YdD2bY8LDg0XQbHk+z4ek0W57LtOflbHteybJVTeAXDCY8a1jEM6mLeT7bgifSTLg/cS4PJC/gMbmX + n8635vkSe54ptufRIifOyb52h5uwyt+CZSGuLIvTM5ZuYFVpOePltSwtq2a4rIql9XWsaGthuLGOtpJC + Worz6BbRpswHPNrawKruVtUEnuhrYXV/K+tGOtm8rI/tq4bYPTXK7jUjbBvvZ0VnDe2VWbSUpdJRnUlf + UwFDbaUs7apivK+OyZFWpsaWMNpZy0BrNeMDHUyvXsq2DRMc2DnNNZcd495bz/Hso/er2b+P33cHt1x3 + OVeeOMK5y09zz83nZN1dPPnAPWp71w1Xc8XRPezZMMmOyWWqKb1+tIPB+gIGG/JZ3l4m+qCUoapM+ktT + GZDj6i8y0JdvYLgwnf7sVNpElDZGhdIQoacm2I8KPx/KdJ5UCU+pChYNJlyyRs5dQ5iMQ9GedCbqWJYX + yfpqA9vbstndmcW+7kwOD2RxfDiLM0tzuWaigOvXFHLdVAFXT2VzaiqNI1MJ7JM4sHtNONtX69m6OpRt + E2FsWxXBlpWRbFoexfLuAOoLZSzwnY+b42wRl3OxsVuIhaMJpvammDqZY+ookNZMWitprZ1M1WxgBZYa + CyyczdXW0sUMKxm/bIWfKJnAHl7G+HubEi7jS1qYndwTTjSluKjzNW5q9OPEUDh3rEvipYN5fHRZCf88 + XcCnpzP58ISB947F8trhMF4/Fc27Vxt4+8pU3jxl4I3Dcby+K5KXp4N5Y6uej/bH8eXxVL4+lspXh5L5 + bF80H+8O48NdwXy4M4BP98wYwF8fDOG7QxH8ciiaH/fG8O2OSNUE/nl3Ar8Kj/t5TzA/Crf9YY+Ob3f5 + 8u1OHf/eobSKAezHz7uE/6gG8Ax+lm1+3OHD99u8+GG7N7/uC1AN4N8OBPHnYb1wZMUAVozfIH45GKi2 + Cv5XA1jBgVB+OXDBAD6kGMARAiUbWM8fxwUn9Px+UskEDuP8CdleXv8s+OHojLn92YFk3t2RwdNrk7lt + JIZre2O4oi+Zs31pnO7P4vLhfK5ZUcK5yVJunCrj+tVF6oODl42kcWrIIHzCwKmxFBWnlwrGhNMLTi1N + 5bIV6Vy9poAbpyu4dXsNt++o49Zd9dwi7Y1bK7l6YzGnJ7KF9xjYIzpgR18027qj2NwRwbrWENY0hTDV + EsFUaxRrWqJZ257A+iUprBNeNiEcbbw2ipXVkYzXKJBlaZXXyyrCGSsPZbQilMGSYInNvjSkaimPkTFW + L7EmxJhCGYOLQkwoVRBsSqnekuJQGzJ0Eu80JmgtLsVWMYEt52GplDW0M8HKwQxr6cvW0lpJH1ehLF+A + st5G3rdRqlJprFXYiSa9COU99W/tTNX92CiGsbS2TqJ1NZY4io5Qsq6cPezUks8aH3tcFONXN2P+uvjb + 4Rpoi0eIPT6RTuiiRMvFSOxPciI2x4vsqnBaRwpZPt3O1K4+1u4ZYHR9M+2jJVS3Z1BYl0ShjAVFtemU + 1GRRWJlBkaCsLpe65kLqW5Rs4HwKS1LJyo0nLSOShKQQouOU+X99iYnzIy8vnioZo1pbi+nprWbZshZW + TXSydn0f01uG1Azgdes6WbGigeHhctpaMyktiyAnL4DMXB0Zci2yCnQUV+ipbkmgvT+bwRVlrJluY/uh + EfadWsHeC9h1ciU7Tk6w7eRqwRRbTq5hw+GVrNo9zPB0F12TDbSvrKFzop7+9W0MTS+hdWU1KcIZwrJ9 + icoPIKs+gdxGA7l1BnJqU6WdMYJLWwqp6qikrruWtqE21Qge3zTJln07OHj6KGdvuIpzd93MvY/fx9Ov + PsXrH77OWx+9xmvvvsAb/3iJt95/lTfee5EXX3+Kp194hMeefYBHn7mfx566j3sfuoWrrz/J3kObmd42 + wZYdk+zav4ld+zYxMNpJeU0RBcXZtLQ3snbjJIeO7ufslWc4ffY06zZuYHBkhObWdjKy84mMjicrO4+a + 2kbVAE4ypODi6oapucX/YgArr/93A1itiqaYwE5KZTRztT8qyw7KD/0CZXotJQv4LwPYSzGA3USDutMQ + 7EZHuAeDigGcpGNDsg9bk73ZmejB7gQ3dse7sVOwJcGdtaKvliW5MGLQMGgQriw8r014SIdwt84YB3ri + nFQDeOCiAZysoUfJuo2yVA3gWuHHVcKVK/wUzFOzbRvkvaY4K9UAbhE0xltREy0cPdKIauFrdcLhWhLN + JN5ZsjTLiY0VPhzviePmyXzu31rBQ7uquHVDHpeNJXKgJ5IdLSFsrAlislQ0QrorvUkaOuMcaBUurGT+ + NkfaSYy1pV50ZK0cd7Vw9fJQC8pl7CgX/lYVvICaoHnUiT5vkuVmgWIAK2gT/qegWY5bKYGtlLAuDJhH + tnynVOH/Kf5zSQtdTGaEqegDM4qizUQrWFAlvLc+wUZ0r3y2aJFGgwMNSuZvkuiSBGuUuYKLY0woiZfx + KlHGr5gFZIdfQlGcHIfwqcFaDzYMRrBnIpmdK+PYsjScdQOBLG9zY7DOgY5SC5rzjWgSbd2SL/ozT44z + 35zWHDmXKWayXyPRsotIC18sGsSY2JAZAzhC9MtFAzhc3ouPsSQ91Uk1f/9PA9iGNDnWdPke2fI9coWX + F6Q4USTaqTTTleJ0LYXSL3ITHMiMVubaNZdzYUlmuDW50jfypW8o2b+KAZwf50q6xP440RX/mwF8EVHe + Skbv3w1gS9EF5gJTwYwRHCeaJD7AQm2j/U2Jkn2q8FMyiGfmCY7yXUyMnwmGMFtSlDLPAkOY6DNBsnDz + RL09CSF2AntiZQyODrIjMmDGAA7xsyBYeGuQICTQSoXyAGxggP3MnL8KAp3wD3IhMFCZEk6ZGk6Dt5ez + Ws3Qw1Ojzs2rYMYAVlplnTJtgbdoKx/RTzNzALu7a2YMYFsL1fhVM4AtTdREFnvl/reTGGMjccnaBEsr + YxXKsrJeNYA9nEXnuRMS5k9UtJ6Y6FAiI4IICdEREOSJX4C7+hurq5uDxCJbiUG2+IU5kyj3dmGap+hf + L5aKzthY4c++Gn+OSb87WePCqRoNZ+qdONPgyIkaa/YXLWRPziXsy5vNkcIFnC415coyS25rdOWBzgAe + 7NVzV3sgZ0qc2ZlizGT4bEZ1sxjzm8V0ghHHi525tsGL6xu0XFFhzbG8RRzOW8Du9Dlsjp/FjpTZHC02 + 4toWW27pduKmLkeua7Xh6kYrrm6w4aomO65qdOBsvQPHKq3ZUWDC+qxFrEpdwNLU+QwlzWEwYQ4D8XMY + FV2yOt2Ezfl2HKzy4rKWUK5eEsOV7cKFWuM4KXHqYFM8myWu9GT6kqdUv3JbgKfLQlw0i+R6LEbrIq81 + 8wmWPhnta4Qh0JSCSDPq403pTbNiLNuO1UWO7Gr0Zl+zLwcUA7g9gK113owXODCSactQtiOdqXLfx5lR + pp9NUeAsisJmURx1iWjB+eTJ/a9MW1YnOn6kq4xt65dx8tBOrrviNLfdeC333XMLL770BO+8/wrvfvwa + b/5DiU9P8vwrj/PCK0/w4suP8vzzD/Lsc/fy3PP38eyzd8vy3Tzy2A2cPrOLgYFG0gzhBPi5yveyUQ1g + pU8p+CuOONniqLFTS0IrJcU1Ho64+2rx8nfFO8ANH4kX7joXNJ6yjbs1rsJhPP2dZgzgYFe0XrIPF2V6 + GGPcfWzQBSj3hZaAYLk3QrSEhrqp00zEx/qTmqxXTeC81EjyDREUJoVTGB8q+lhPqfTdqphwmhNj5Zwl + 05eRymBWhpxD4RM52Wrp55ms30x6BF056XRlpdGVmUZHRsp/kJlCp7Q9maK5MtIYykhnNDODZUr27/9i + AA9kptOXnipIoT8thcHUGQynpgpSGEtLFRhYKtpVyQDuCvejXael19uFMZ0Hq4J1TEXpWWuIZW1mPGuy + E1idk8hEjnBaBXmpjOelsyo/W3R+DqsL8llVUMSqYtGHZRVMNQpnaGtlbVcnE90d9LfW01ZXTueSRvWB + smtvvooX3nyBz/79Gd8q8+KimKR/cv78eb5UDOCXX+XE6TMMDo+qfKK7t5/tO3ez/8AhVq5aTV1DC5XV + dfT0DTC1biNrN2xSM4Ijo2MwyHdUDOC7775DNXx//VUxV8/z44/f/5cBfNttt/DoYw/zyisv8fXXX/Ln + n3+qxu/vv/8uRwK/nv+Nt955mzNXXE5Hd5dwmmTCIsLJyc9jevNmnn7mGb746kt+/e1X/pDt/46/l4RW + 8X8YwPI3f4NiACulon/86Vs++vgD7r3vbrZsmaaxqZGK8nK62tsYHx1m/crlTI0OMdJWR0NuGnXpCQyU + 5rJvtI87D27n3bvO8f1LD/HTqw/x48v3SnsHv71+O3++cTvnXz7Hj0+e4et79/P2mZU8tbOVBzZW8PjW + Ol7c285rB3t598QK3jo+wR0rm9hbnsxAqCv17jYUi1bIFd6VppWY4+VKks6LKB9PGUdc0blqcXd2lnHG + mYigAHJSDdSWllBekENSVBi+Lk64WVupJaN9tc6yvSuuzhocbOywt3HAztYRRxV2AltsbS3Vh4S8fT0o + KMyjt7+HWXFC3BTECmJiNURHO0nrRFKSlrR0d9KFICUJCYmJtCBSCE1sqCmGKGsy45UnvFwokvdL0two + SXehLF1DZZarmg3cWRFEf20oAzV6eiuD6C4NoKvEj56yAHpLlDmA/RlQ5iwTUbAs25MVQhBWpjkxnmbH + ZJYt6/KdWFfgzGSOI+MZdjJo2zFssGE4zZplWfaM57uwpsxDyFwQB3sjOTGSIAJUhGSnnslKF5aV2LKi + 3J7lFQ6sqtWIoHRnY5eXagJv6vYWeDLd46Wav9M9HqzvkM9qsWGiwYKJOjMm60wEi5mqXczGBlN2NFux + t92eva227G4wZ1u1MbtrTTncYMbxJkuOyPv7WizY1Gwi4nQhSxslyDTNY6BlPsNLjFnZZcNaCVTbB73Y + M6hjyxI3xkssaY+7lDIZ6HN9ZlEgbYEM+IoJrKAgbC4lIUaUBBlTLMS4RAhxRch8mmKN6EhexNICU46O + KFlYEbxwNoX3bi7goztKefJEImdWerC22pq2OAuqg60p8zenSLeYfLd55DlfQpXnpfToF7BcgsraFFsJ + gI6MJAv5FMJX4DsHg8csErznEem5AH/tAnWOL0/NXLwl8Om8FuPrYYSvp5EsLyLIz/RvBrADcZGOqgGs + lIH2FRLm4bEYF+1CISALcXQ0EphIcDHHwV7EiBAXpWPaqLBQCY2SBfw/DWCtq91/GcDKE2p/N4AV8/fv + BrBqAiuCR5kXx1GIkQJFGEkQU8TSRQNYebpJIVRK+WdlwvuAQOVpOB1Bwb6E6P0IC1fKPusIDJ4xfxXT + 9yKUuTLc3e3k+ylz/mqE8LlJAPMWsqwjKlJHRLiOsDBf9HpvQgVKFnCAiCrF/PUSoqeToBAsfxMiQVMp + Ce3r5YhOSGCQrxthgZ4zZaAjZF+hPoQFuaIPdJZz7KbOBZyaFEBaciDphiAy0/TkZUVQlBdNfo6SFRwu + 5DyErPRgMpODSE3wIy7cUwYRd/R+8nm+QgB9PfH3loDtZo+31pRgl7kkaGdRGXCpECIj9pc7cUunH8+M + hfH2ZDhfbIvk5/0RcCwEjvtI6wZHXPllmwOfr7DgnY5FvFgzh+dKZvNSyXxeK53PG5UL+Fe/HT+v9+S3 + Pd6cP+LPT6f1fHs2jk9PpPDszjTODis/antTErCQaNtZRNnNItZhDlG28wi3nE+YqQgREyHoZhbEiuhN + sDInycaKRCElsXaWRNqaE2Uv651tSXOxI1PEbbbtYnKtFlJoMY9Sy7lU2syj1n4+9Y5zqXGapaJWM4sm + t1m0eM2lWQRGrXY+FfbzqHYyZolci95gH1qDPamU614g1yfbx4V0uTbpMjBnuLsLPEh115IoJDlaY0q4 + rRGhlvMIMZ1FmPkscjxn0yPEdkOtBfu6LTm9wpkbtvrx5NUGnrkhhaeuTxTEc/8pPed2uXPZWiG54+bs + 7jdlbYMxQzmL5N5dSGXgfMoCzCkT8VAkfSLX34MMERApIigMoTJORzjLtRXBHuxIeICjXGMN4f7SD31d + JYg4EehkQ4ijBRFOIoQUozvIgrW1UVwzWcE9O1t48OASHjm8hDt3VXPthgzu2JvOU1dl8vb9WXzxUgbn + P82Gr9Phixh+/ySYX9+Xa/i2P9++7MdXT+v48glPvnjCg6+e0PLvx1356Tlv/ngtEN4Lhg8C4EN5/Z4b + P7/hys+vePLzszq+eVDHpze5S7B04tUTtjxz0JZ7N1txw5QdZ1a4sKPDXsZuc/pylNJeci2DZ5MWMJv8 + WHOWVOoZ7UhltCuLjoYk2hsM6vxx+em+GGKcJT7ZkBBpT4oyF2+yO5mJCtzIVspKJbiSE68lK86FHIl1 + 2TFO5Ajy4xwpTdZSm+FFb0U4q5aksmkgl3W9maxojqezOID2Aj+6S4IpT9Jg8BeS734JBr9F5ETayj4c + LsCR7CgnsmT8M4TIcci4myrHohjABcmOFKfYUJVlJULckv5yiWN1Nqxb4sDOIVeOrPTl1Go/zkz6c3al + D6fH3DkxJMJqwIXTF3BZr5ZTPbJOcFmflssH3bhswI0TvS4cWiKxSWLQnmZL9rXbsX+JI3slph3sduXY + sOx3RQhnV4RxaiyE/b2+Eqc0rK1xYF2dCLAOH9lGz9nxKK5eHclVy5WpDHw52ecxY/4u0ahloPd3OEgM + tOD4oD3npry4a3uQavzevz9EoOe+fcHcvcOfmzZ4cssmH+7dFcwDe0K4e3sAt077cOMGD25Y58l1a1y5 + bJk9R4esONhvySHZ34mlbpySc3B8uY7jywLY0+fD6loH+vNM6Mk1FZjTlWtDb74zg8WejJb5sqz6YvZv + OOs6otnYHfdfBvBQiSf9ha5C/p1pVbJ/0+1pS3dgSYYjbRmyLtOZ5gwnWrOc1VJrlQk2agawYgBXKHMB + pzkKEdRIK+8Lv2nK0NKS4SJ/p6Uty40lgo4cVzovoCPbTZ23qzFVQ3WSo1pOPE6/iFD/+QRKTA0QKAZw + WLAyr5Y54aEW6ly7OZneFOf6kZfmQ3K4A7H+liQHKw8muJEXK2NNpAvJIY7EB9qSHuZCqSFALRNbkhhM + or/EBA9r9K4m0poSrzMnNdiK7DBr1fytTHajMs2DynQfKjP9yJa+HxtiKWOFqcQXGbukf4bLtsr8VX5+ + xqqh6yHjoacS2xVDV3hDUJCVxDF74YbOxEQr83ZqJJ7Zq0avl3ABBd7KQ2GKESzx3k9nqZq/Oh8rvH2s + 5X0hqV4WeHvNZAmHhVqSpGQ/p7pSKNehIN2OPIMtefFWlMg5W5Lrw9LqKEZrY9Xy1fU5AZSmeakPbGTK + d8qQey5Fb0qi33wSLxjAysOFbcU+FAqXSY0xJiVmMWnCfbLiLCmMtaQy1oKWBGuGRGCvTLVnUj5vTaIV + E7LtysiFLI9YwHiUEauiF7Mq1pjxuBmslPFnhWICXzCAxxQDOH6xwETFSKwpIzGmjEYJwo1ZGirbCl9b + 5m/MmFznXuHNrYLaMEXUm1Ik/LkozJz8cEuy9eYylhuTGSSvw+wojtVSkegtfc+X0lhvSuN01CWHSF+N + FCEbw7KCOCaL45nKj2RNVgAb07zZn+rF6Wxfrsr340o5b6dS3Dkc68DhaHsORTuwP8KOrf6mbJHrvTvM + ht2h1myXGLA12JydEdbsjLZlW4Q564MXMek3m5W6S1gVMJfVYUasjzVjp/DxI7lOnMyx45ocW+7IceC+ + bDseyLThwXRrHhcu/lyehpfkPnutSMvrec68kmXNS6lmvJBmwsvZFrxZbM9LeTY8lmLEI8kLeSrDlOdz + rHix0JbnS+x4qsyJ23IdOCr33zq9DWuUH5pTIhnPTmNNZTWT1Y2sqKhlrKKGsfo6lrU2/2UANxfmiNYo + Fq1RyUhznfDsZlb1tAqamehtUTNtN4x2s2XFADsmhlTzd9PSLsbaKmktTaO1PJ32qiw6a/PoaSxkuL2c + 5d01rBpsYvVwG4NtyhzDFYzJPqeWDTAx1s/6iaXs2bKe04f3cvu5q3jgjpu4++bruO7yExzfv0vW7+fq + y05w01VnufnaK7jl2iu5+uRhDm/fwM41K9k5uZSdq0fZvKyHwdp8BquzWd5UxHhzMSvqC1ghxzJek8fK + yhwR/blMVRYwUZzLYFoSHbGRtEdF0BaupyU0hKaQYEEgzXp/gY6WMG86Ir3oidcxmBLE6qJ4tjXmcKSv + nFMjlZwZK+fKleVcM1EmY3glN2+s4rbpKm7ZUsG5LSWc3ZTN8Q3J7N8Qy571kexcHy6IYOe6KHaujWH7 + mng2j0tf7A6gusCJYOFPGrvZ2NvNw8reCDMHE0zszTFxtLwA4fTC462EoytZwBdhqbHEQmDpYoWl1hIr + rQXWLqbYa4zQui0SfWFMiI8JccJ9skKtqIi1pV00ypo6H4kbEdy+3sBzB/L58GwZn15exD8vz+XjM+m8 + dyqBV4+H88qZSN68JpHXr0rmFVn3yuFoXtqp57lNfrw8Hcj7e6LVDNhvjqfx1WED/zwQy0d7Q/lgTxAf + 7vTnk72BMxnAB4L5/qAyn24MP+2L5dtd0YIovt8dx497YvhB4tv3e/z5bq8//97tq2b/frN9pp0xgP3+ + MoB/leWfdvnw4w5vftiuGMBe/LpP1u8P4PdDQfx5JJjfj4bwmyz/ejCQnw8EqK2C/5sB/OuBEHkd/JcJ + rJSBVrJ/lf38oWQAH5d9qggRBAlkf8cD+OWoHz8cCuYr+U4fbk/ixak47h0K59beaG7sTeT6vhSu68/k + hpFcbllRzB1rSrh7bQl3Ce5cU8itq/O4ZSKHm1cryFZxy2Q2t07mqLh5jbRrC9TKXA/srOXB3bVqe//u + Gu7fWc092yqk3xVxbm0216xK46pxA5ctTxBeEM+ZZQnCBxI4PpLIsREDx0bTOCo4PprFibE8afM4OpzD + 4cEsDvVmCNJVHOhJZV9XCns6UtjVkcyuzhS2tSep80dP1oazojSA0QIfRgq8RDt7szTfmxXyekWBr/pQ + 5FhRCC3JvmQKj/Z3XIjGYjZ2oh2sbRZiYWOEtb0JNg6mKpTl/w020v9t5X3VZFPMXVm+CBt1G2MsRZ8o + 281AWTaSfm8qmtUMRxczHFzN0XhZo/GZycBy8bPD1d8OF38rtMIN3IKs8Zax3DfKFv9Yif3CLWOzRReU + B1PZYaB9rJD+iUoGVlfTNppP5ZIk8qoiyC6PIK8ijoLqZIqqUimoEJSnUlqTRX1LIS2d5WrJ4rKqTLJz + Y0lJCyMuIYCIKG/CIjyJTwykpCRFzfwdGW1ick0vW7YuZfuOZezaM86efTK27Rhj48ZuVq1qYnS0kvb2 + TCqroskrFK2a7UVmni95Jf6UVIVQ0RBF/ZJE2vuzGFpRxsr1DUxubmLVBayYbmLpJhnrNypoZWSjjMfr + mumerKN1RQX1I4XUDxfSuryc3jUNDGxqoXlFOYbqCPTyWRF5PqTXRJJZF0tmTRwZVfFkVieSXZtKXkMm + BY25lDQXUN1RQdNAE90yHo9OjrFq02o27t7EjsM7OXXdKe585HaeePlRnn71MV54/Une+MeLvP/pm/zj + kzd475PXePuDV3jr/Zd55a1nefHVJ3jyufu47+GbueHWy7nsioOcOrufs1cf5fTlyjx7y2jraKCiulhQ + opbvXDW5kg3TG1izdpKGpkay8/JITE4hWB+hIi0ji6qaWpQy0DMGsCum5ub/iwE8Y/7+Xw1gdZ0Fto5m + anvxdxPFAFZ+S/m7ARytGsDulAR6UBciXDfCg4FYL8aTdaxN8WFzsjc7Ej3ZneCuQjGDtwjWJnuwQpnf + 1+DCQLILXcLZOkVfdcU60nMh+7cvUXlvxgAekO36lOzbGGu1ZHJd0CJqAhZQHSgIWkid8KXmWJsZ8zfR + RjicjWoGV0cZUxlhRG3kIppjTOhIMKc/yZrVORp2VPtxxUAS92wo4YXDbbx2sotnDjVx13QJV6/M4rDo + hO2NYaxXklBS3eiWY1SM6mbhwU3CjxojbKgPt6Uu0oEa4VJVUTaUhVlQFmJCWfBCqoLnUxM8l/rAOTQF + zVOhmMCqERxspKIpePGMoa1XHjBZRJ7wfiUDONV/Hml6IzLCjMkONyMv0pRi0Rtl0lbHWFITb0NtgmgP + +Z418n3L4oTHR5uTG76I3LD5sv0C8mMWkBc1T7TnpaIBFlCfrRjA7qzp1bN1eSybl0awfjiYyR4/xjvk + erRrhTO5MFRnx0CNrWxry1CNncCB7mL5nqnGlMYvIDd6AVnCf1Pk3MYJ/4sKWUik6JeLJaAjRBvFybGk + pYjO/R8GcKpAaRUDWEFWoi3ZyfbC6x3IT3GiUDSUYgbnJTqSFSPbh5uTLOfGEGJGmuigLBnLlAepCxNc + VAO4SDR7lpz/eD9T1QAOc5tLmOvc/8MAjvYyIdp35oFZxQBW5gNWTOA4nZIZPGMAK61i/qqvFRP4ItRs + YGN1nmAVon/iQ6xIFO2uQNHvCuJF/8Sqc/5aC2yJ8lemxLMl3H/GANYrBrCSBSz7DJbXwQHWBPjbE+Cn + VEB0EDirRpdfgIssu4jOchG95Cg6a2YaO1d3R7QX4OLmcAEzmcDevp6yrads64arqwtarZOasGJrJ5zJ + SriUtRm29lY4aSQ+aB3VeX2V30uV303tHSxV4/eiAewo97fWVfmtU0NAoDKmB4r+CxH9F6T+3hkQ6InO + 3x13Tyf5LEc0rrZolCxNJdEg3k2uobdoM53ESn82VwdzoD6I4/W+nFRM4Fo3Tta7cKreiaOV1uzOW8DW + jFlsy7yEvbnzOFJgxOkiM26u0/JARwCP9ofxQGcIV5VrOSgaYYv046nwS1kXNZv9WVZcXuXOja06zjW5 + c6bMhoNZC9mVOodN8bOYDJvF+uhZ7MmcwxW1FtywxIFbOp25oc2W65utuaHFnpvaneS1E9e1OHJFgz1H + q6zYU2bBxlzRdekLGJD9dMk+WvWzWCL765XPXZpgxFSG6KVCD/aU6thXHsjukiC2FgWxsSiY8cJgmpNc + yQg0I8RtPj6ui3BzNcbVbTFubgvwlnVBysMKXvOlry0kJXAhOTJOVMcsoivNSjiHIxtr3Nlc58HWOne2 + N3iys9mP3a1BHOiKYG9XJJMVwk9yHelOWUxH4jw6UufRm2VMX64tPQUauop8WNaczN7VS7j2yBYeuOEs + T9x9I089dAfPPnYPb772FO+9L/Hp41d5V9pX33qKl18XvPE0r7z2OK9IDHvl1Ud4463HeeONR3nllQd4 + 5NFzHDqykfa2UtHlwQT4uqJ1scfJUWKG9C0VfxnAF6D8ti5Qpq1QDOCL5q9PkAeeflpcfaQPe9qh9bbF + zdce70AX1QB29VKmxDBWMWMAO6r3hnp/BDpLP3QhLMyDmGhfkhKCSFNM4ORQchJDyYvTkxcTQrGgPC6c + uoRo2lIS6MowqBm8g7nCI5TM35xsBvOyRDOn05WZTkdGKksyhRdlJIuGSKEt7W9Il3VpyXSmGeiR1wNq + Rm86Y+kZLFWQJrhgACvmcG9mGj2yDwWKCdyXalBx0QgekX0oGJX3RlMT6Azzo03OT4+XlhFfd8aDdUxG + hbLGEMNkRjyrsxNYlZ30H+SmCNIYl+NXsEq+z0rhA+NFxaxUHoaurmZcNPB4SzPL25rpF827pKGS/p52 + Nm2e4sbbrlOnqvjk60/5+qdv+VUxReX/b7/9xpdffc1Lr7zKKcUAHhpTHyq7aADvu2AANzS3UV3XRN/g + COs2bmadYgCLBo+IisGQohjAw9x114wB/MsvP6HMLfzjj9/9ZQDfeNM57rjzNp548jFef/1Vtez03w3g + 32VZMYDf/cd7XHnN1QwMD5El1ys+KZHi8jKmt27hmeee58uvv5Ltzv+X+fv/zgD+STWAf5Bj/PiTD3nw + 4QfYuWs73d1dtDQ3M9Kv6Plxdqxbw7aJFazsbGJJURbtOUksq8rn8NJu7j2wmXeFy3375O18/+xtfPfs + jfzw3LX8/MK1nH/hGn55+izfPXCIr27dyvunx3hpdzPPiJ5+WfTO2wfa+MfhHj4+Ocb7x5bz4Hg9x6vk + Okd70OfvRKvEgRpPR0p8XMhTErwCfUgUROo8CfbxwNdVi4+bC+GB/mQmJVBVmE95XiYp0REEuct7Dnbo + nO3RaZzw0Uh8cHLG3sZe4IitjZPoFwdsrW2xs7bBxlriga01fv4+lBQXSh8YYFZ4pDMXERrhQGioBLZw + O9UETkzSkpysIT7elkgJ2OHBEiRDjEkMtyAtxpasBEdyRHzkJUlgV572SrKnQIJ+aaqGmixX6rLdacx2 + pTHHjeYcD9ryvOgo0tFV6Ed3vo7eXF8Gs70ZzvSQG8aFMSELSw02rEy3YY0MglP5zqzKcWRZupCWJCu6 + 40zpTjRhIMVS/saW5fL+2ipPNjfp2NYWKIJPL4LPn6k6NyZqNaxpcGWizoVV9VrWNLsytcSddUKIZuDG + hi53prvd2dgp77U5sKrJipW1ZozXGLOqxojxqoWMVy5gssqIDXVmbJH3tzaas6XOlOnqxWyvNWWPYF+9 + GXsbzNjWaMq6JgkwjUq55/mMtMxndMkiVnSbM9Vrz3SfCzsHPNg34CPHqWWixJyuxEupDplFkW4WpdJW + SlAqE5TGXEJ5jBE1cp6rI+woCzKlxG8RpQFCioWItcZLUEiX42h24uQyL+7YEc6zZzN49boCHjqUxKll + PnJuHOgUMtmgt6Mm0IpKIVPVPoup815Aj5DQtcnW7Mt25lSpN0crfNle4smInP/a0IVkeM8i3utSQj3n + o9MuwMNpNh7Oc/4ygC9CyQBWDOCLJaAVA1hBjFICOtwRX52pEI7F6o86LlojnJ2N0YjQVUpMOAlJUTJw + 7e2VQGONjZAac3Nj9Ym2vxvAypNrSsnn/6cGsKOLLQ7OdrJego4CNXjNGL//3wzgoCC/GQM4xA99qI7g + EB8hRlrV9HX3tMfNw+4veHpIcPN2Uss960O8iIz0l+AVSFxcEHGxwcQqcwdHyH703jNlX7yE1Hk44Skk + T1kO9HNV4SODgKebndzsQhq9XQjxdyMixJuoUG9pPeW1hiCdg2oCK+WgE2K8SYrzxZDgpxrBSsZvXlYY + uZmhQsz15GZJ0MzUk50iQTTRn+QYHXHhOrl/fYmS7xYRLMckA4GfHIOvqxBYITMx2ksp9L2EjvC5rMuy + 5HStK7d3evPsskDe3xTKv/eG8+fJMLhMB6fd4YQrv+1z4ev1dny81Jx3eox4u82Yd1pMea/JlHflXvhs + 0JafNrjz2x4vfjvqx2+Xh/PDFYn867J0XtyTwTWjiawt9aFGhJ/BbhZJ9pdgcJxLot0C4q0WEm9hRKKF + GcmWlqQI0q0tSLeV8cfekiTpI7FWi4m1NiLZ3oxMEbY59ovIt51HsaDKbg6Nsq92lwX0exkx6LuQPp/Z + glkM+M1iOOhShkPmMSiirtt/Ia2eIuA8TegN1NCv96Q1UEu5EJM8nTOZXg6kyDVLcdWQKgI8VetOsizH + as2JcFpIqM08gs0vRW82izj7WVSHLWZNhb3ch1punNZy3wFvnr4qjA8eyeSjpzL54MkUFW8+kMDT54K5 + /5SWG/ZYc2bKnN19i5mUcWc4cwFtIsoaZeytDXMW8elGfoArWdIX0gIdSdE7khzpSHy4A9FBDkTJuugQ + V2k90Htr8ZP+7yXkX2djRIiDnCftIqqiHdnSYeC2nW08cXKIhw93cfeeJq6YzGV3dwhHRgO4cVsoT10Z + w3v3x/HDGwb4TPCvaP74LJg/Pg3gt4/8+Pk9f354S/C6N9+95sn3r7vx0+senH/HGz7wh0/94J+y/Jk7 + v3/szM/vOvHL6878+pI7Pz/txfcPevL5rS58eoMjH1yr4fXTGp4/6s7jBwK4ab0Xhwcc2NhgLaTOjLKI + OaTL9crSL6Ahx4veuliG2jLoahQi1pJJc1UCJdmBZCS4iXC1/csATk90JSVGg0GZj/cCMqKdSVfm9JFl + pVRzXqyziE2tapI15vgxVBvDmu4sto4UMT2Yx0S7gc7iQGrTJJ4JCqJtSdItINZzNmlBJuRG2YlwtleR + pxjKcn4zZfwzhCjC0QJDuC2ZsY4UGZyoyHSgSURAb4UTq1rc2NTrza5Rbw6N6zi1Jpiza0O4cp2eqyYD + uHyFD6dGRVgNunJqQKvidJ+IrF5XTna7qFBen+pz5Vi3hgPt9uxRDWBBqx172uzZvcSJfV2uHOxXSjwH + cdmKcE4tDWVfr45NzRITaxwFThI7lfOt5/SyCM4uD+WyYX9O9HpwROLiARFR+1ud2Cvxca9iLHdYc2rE + iRvX+3DPLsX0DeG+/UGCYO7dF8hdO3TctNGTW6a9uWdnIA/slfd2B3L/nmDuk+UHpL1rm47rpjScWWHD + iTEruUccuGLCg6vW+AkCuXpNKCeWBrKlTUhzkSkDBRLzCy3oLbChr8CJoSI3xkp9WV4dyKrGUInd0Wzs + imW6N4ENnXL9WsIYq9IxWOpJX74LndlOqvmroCPLma5sDR3ZWpbkaGnJFBImr5synKlOsqUkxkwtAV2R + bEddujP1GS6qCVwvUE1gQXOGluZMV9oytbRnu6j7WZLtJq27QLiOvFcrHKgk0Y44GVvC/OYSrJst4/dc + GccXERq4mJBAiZuyHB5mRqpwrJw0d+m/WgyRDiQEWZMe6kh+rDsFcR5kRcmYo7cnXmK4IdiOgngPygz+ + 0ue8SPSzJ9rTkggPE1m2Ii3UjhzZR2GcE5VKya5sX2oyvCkR4Zov90O69PmYEAsZJ6xIkOXYaAfCwv9j + AHt7K1nAi/BwX4SXp/Jaxg+dGYGB1hLHZHs5ppgYVzULWFmnvO/poZjAM9v6+pii85V9/d0A9pZWMYC9 + zQkIsCAqwpaUZFeJV14UCj/MT3MgM86atAhTspWSySlKee1A2vP85bx7U53mRalStj1BQ368s9yz9mSH + y3eVc5jsO4dq4aD9FcEsKdFRKXwmN8WKvFRriuTalmU6U5lqr5bYa0u0ZiDZhuWCiQQrpuIsmIhezEol + +zd8AasijdTXq2OMmYg1mUGC8LlEY1Ymm8yUg/6bATySYMJQnEC2G4o2ZizSmOXhJizXm7IixIxlYeay + 3oouZf66CEuJCeaUy1heKstFUXKMYRZkB0vMCpHXEfaUx7tJv/GlLtWPqgQfgY7mlFC6s6IYzo1lVVE8 + 64pjWVcQztosP6ZT5b5NcuOKNE+uz/Llhhwd18i5OiXX/riMRydkPDoW5cAeuba75ZofjLJnv3zOzmDh + sUHmbNVbslXO45ZQsxkD2H8eK30vZdx/LqtDF7M20oztcq4Oybh1Unj4VTn23Cy4M9uOezKtuTfdioez + 7Hmm0JWXSt15tdSN14u0vJZnz6tZVrySZcG7xQ58XOPGe2UaXsg05ynDIp5PV4xhS14usOLFMluer9Zw + f6mWKzM1bBfdMW3wY0NmLFMFWayrqmFNbTMrK+tYWlnLaMOMATykGMClMwZwR3kRfTUVjCjzIImAmzGA + W1Ss7mtj7VAnm8f62bZigC0r+tk41s1oaxVtZRJD6grobiikQ9rO+gIGWkoZU0qr9TWycqBZ3iuhvbqI + gfZ6xoe6GRGhvVzadavG2DW9lrPHDnDT1We49dyVXH32OId2bxNs5+j+XZw8tJdTh/dz5uhBju/Zxo61 + q5hePizHMcTuVaNsW9rLYFUeA+VZLKstEGFfxGRjCWvqi1lXJ5DP3VRVzPa6cqYrSliVncFAXCz9MTFq + q6AvOpreqEh6o8MFofQJ5xxOCGJZaigrsyLl79I4tKSca5a3cstUN7dv6OSeLV3ct72TB3Z38/D+bh45 + 2MWDhzu592gr5/aUcWZ7Noc2J7J/OpY9W2LYtzWefVsS2bc5mX3TqeyYSmZ5bzCV+U74e8zB0Wa28PcF + WArHULJ/jR0UA9gKY8H/3QC2wkI1f61VWGktsRZdYOu0CCfNArxEL/h7GBHmtUjGtcXkhJpSk2DJimrp + 8yNR3LIxjacOFPDOmVLeP1vAB2dzpE3n7TOJvHg8jOdO6nnpbDQvn43jpeMxvHhA9NGOQJ7a4M3zm3S8 + syuCzw4l8s3xdL48YuCzg3F8uE/42d5gPtgVMGMASzxTDOAflCzbwzH8fCCO7/bG8e890fx7Vwzf7Iri + 37sVXhzCt3uC+Ga3P9/s9OOb7UoW8IwB/Ius+2WP8N7dsrzT978N4B1e/Lpf3jsYwB+HA/nzSJBq3J4/ + rGQA/w8DeL8/P+71V43gX+SYzivZwmqp6GBZp2w7Uy76/GHFBA5Vzd8ZCGe7iOOBggDOC3496s/P8jnf + 7o3k022xvDYZwSMDIdzbF8ld/fHc3p/CbQPp3DGSwz0rC7l/TQkPryvj0Q1lPLahnMenK3hC8Nh0GY9v + KlXx2N/aR6al3VLBk7vqeHpPI0/uruOxndWCShUPbSvj/ukC7lyXyZ1TGdy1Np1bJg3csjqJ26YM3Lou + ndvWZkqfnTGSb1lbyM1rirhhsogbJ0u4aU3ZDCZKuHGVrB8v5NzKAq5dlsfVS/O5cmmuII8zo9mcGs7k + 2IDcBz1JHOiMF8RxsCtekMDhrmQOdRs41JfB3p5s0fxx1Cb6EOdjgZf9PDTSr+3tFmJpsxBrZeoiu8Uq + lOX/fn0BF17b2BmrsLZd9N+QfVkJlHYGC+T1PGwdF4oeXSQ6dRF2LnIPeJji5GWG1scSF50Vbv7WuPiZ + o9GZoPU3xVNvhrfESr9oc/RJNsRmaUkv86OoIYLKdvkO3cnUyfeqaI+loC6UzDLRiGWiESuiKKxKpLjG + QGGloCKVirpsWjpL6B6sZUl3JTX1ueTmxZFkCCYq2pvQMDcVhpQQKirT6ZZt1q0fYN+BNZw4uZnjJzcJ + NnLsxDoOHVrNzp3DbJBxZnxVPT29uTS1JFFSric924PsfB+KygMpqw2loj6cqsZI6tviaZfz3zsm4+/y + AnqW59Mt165D0DaaQ9NILo3Dsp/hfBqH8qgdzKGqL5Py7jSqeoX/jxXRu6aW4c2ttI2XkV4XQUSeF1H5 + 3iRX6UmtDiO1KoKUikhSK6PVstCZtUnk1KWR35BJcXMepa1F1PfU0j7UStfSTgZW9TO2dpTN+zdx9sbL + uPWBG7ldcM8jt/LUiw/y+rvP8dYHL/GPT1/jg8/e5KPP3+bdj17hrfee55U3n+CZFx/ggcdv5Y57r+e2 + u6/ltnuu46bbrmLf/q0sXTZA+5JGahsqaetsZnhskBWrljMw1E9mdiaBIcG4eXri7OKKt69o9xQDlVVV + 1NbVkWwwoHV1wczcFGsb5cf5md9OVDhY/gV7GXtnoDwEb63O/zvz2kLe/28DWC0HrRjAGht8XO0J8RCO + 6KMl1c+DoiAPqvXutEV60Rfnw3LhnZOpoh8M3mxN8mRnomL+urNdljcneTBl8GRlijtjBlf6k13oTdbS + neBMj/C2XoFi/vYnaVUoBvCQcL1BgzL37sycwY16Y+pCjFTU6hfTIHypJc5WNX5bhJ83J84YwDVK+eew + RfL+IpZEm9Ifb8lS4eyb8j04VK/nhtF0GX+qefeyAT65dox3Lu/nmYMt3DNdxZmhNHbJfbKuOIAhOT4l + M7kl3EY+20pFg/BhxQCuFW1dE+dIZbTd3wzgBaoBXBs0l/qg2TRJO4P5KpqDFqlQDWDl+CVuKdVfCgMX + ke0/n/SABaTJd0tXykCHmZATLu+FLxZOaEyl8K3KGCuqYm2oirOkQvhpoazLCZXtg+aQGnAp6SGXkhk+ + Rzj+HHJj5ooOMKIh10r4jyuruoPYMKqYv3om+/0Z7/QWeDDe5c7qXk9p3VjV4c5Ep7yW9auXeDJc5SC6 + ZjHFsRf2qZSCFj6bGGFErJzfKPnsqDBjIuUYoyJM/g8DOF2WU+S6pAhPVDOBL2QBK6WgVRM4SfRIsoNw + ckf1N+KcODt1KsFkOS8JQUYCY5IVE1g4cXaMvWib/2QB5wp/TQwwJdx9HnrtpehdZhPpsZAozwsQfhAl + GiXGx1y2syI5yEZaaxL8rYiXsTJOd8H8FShlopX5gaP9RPv8hb9lAwsi/aQNMCPaX97ztyRKtomS/UTK + 30XKcoQsR4jGCtdZCqwJ9bNWzV8FQbIuSD4jWN4P8lOmv3EQCD/yd8TfT4NOMYH9teiUCoK+zihllpUq + hsrvmC7K3O8X4KxVSuwqrT0aVyXRxF30mDtublo0mhnzVynLq/xmqiTOKKacs4sDbh4aPLxccfd0xtVN + mSLPUTV7ld9PlSxgJSvY3lHJ9LeVz3UQneZKSLAv4aGB6EP81SnvdH7uote08nfy2c62OMqY4OhuhU+g + jAcxWvLk3m7P9WOZ3DfTNSHsawjmSEMgx+p8OF7nIa0rx2qdOVRmxfac+WxKmcV02ix2ZM5hb/Z8juYt + 5vpqZ+5d4scTA+E80hMmr105UWjDvkwT0RqKyWvMqVJnrmvScYtSJrrZi8vK7NmbacSWxNmsi54l2mQW + a6NmsTN9DqcrTLmuxZ5buzTc3C76pM2O2zoduatbw52y7rYOZ25qd+aaVmfOtmg4UGnHxnxTRpNm0yX7 + qA+cQbN+Fp3h8xmINmMk3obRWDuWSV8cEz0yEuvMYIIrPQYPKkRbG3wXE6ydi85tId7S/5SHpr09F+Dn + NZ8QL+mrnnOI9JlDvOj9JB8lmWsOTSmWjBRqWFPjzlq5V9dXubChWssO+Z4nBmO5cSqPm9blCxeJZFuD + D+vKHFhTaMnaUku21GjY0aJjR0coWzpi2T9SwLkdQzx29V5ev+9a3pSY9MYTd/L6U/fwzquP8Y/3nuGj + j17m/Q9f4M13n+H1t2bwxptP8uZbT/H2O8/wj/ef5f33n+Hdd57gkUfOsWfPamqqM4mJ1KkVKt2k7ygZ + wMqDBkpsmakuoeDiQ0YWKuxdbNB6Oavmr6/ECl2Il2oGu+uccPV2QOOpzAVsi4efso32ggFsosLN2wZv + P/u/4CP3jF+gIyF6LRGRnsTF6DAkBMqYEkxmfBBZ0QHkRPhTGBVEZUIETYZYlqQn0ZOVwkBuBkP5OQzn + 56pGcH9upujmNDrSU2lNMwgSaRY0pST9DyTSYkikPSWZDomzvSmyL0MqI6npKkZTMxhLz2Q0I4vBzAx6 + MtPpykhV0aNANY4NaknogbQUhuTzhmR5JMPASFoCHWH+tPq60uXpypCvOyuD/ZiICmF1cgyrMhJYlZXI + yuxExnMMf0Mqq+T4x3MyWCF8YFl2Nsvz8llWVMzSMtGnVRWM1dUw3FBDr6CzsZrRgW7hXZu4/e6bePWd + l/n4q0/48ocv+eXPn7loAH/11de8/PKrnD51hqGhUWpqlQzgAbbu3MOeA4dYMbGaxtYl1Da2MTCylA3T + W4XnTVNeUaMawMlyboaHh7nzzjv58MMP+flnZZ5dpQT0fzKAb77lRu6+506efvpJ3nrrDb755pu/DGDl + GBRT9+dff+O99z/g2uvPMbJ0jNzCApLSUimrrmLTtq088/wLfCF/98vvypH/TwP4jwu4aAL/dyno/2kA + /3b+J87//jPf//AtH338EQ8+dD979u5iaHCAnq5OVowKx5taI7p2PXumxiUuNtFTLH0nN4Hx6lyOL+3g + gX3reefcUb5+8Br+/ehV/PuxM3z76Cl+fPwUvzxxkh8fPsTXt2/j8+vW8OHJQd7Y3chrOyp5d189Hxxq + 4eMjXfzzxBAfHR3l2bXNMl5lsCMtkDUx3iwN86Jb70mT3kt4lg8l4f5khwdi0PsRG6wjxMcdf083IgL9 + yIiPFc2dQ0VeJplxUUT6ehLsqiFIK3FGMYDVktHO2FvPGMD2NhrsbZ2xs3WQVmKGrS0O9vYEBQRQUVrK + 6MgIs4KD7biIgGAbggItCQlRfuyzI1YGv/h4R2KirSVQKFmei+VAFhGrNyU5UpmLTQK+kLNMBfHW6o94 + WbFWZEdbkSckLV+Wi2ItKRbypkwe35jhRrsIgCX5vizJ8aEzy5u+LE8G0t0YSHVmSMjCcLIVS9OsWaWU + es53ZjzPUW5AG7riTWmJXEBL1Hw64hfTnWLGYJYNywucWFWuYVWFC5MyuG5s9mGq0YPJRhlom4XoNAox + atAy0ejC6hZB63+wZokMwh1a1rdrWN1sy4p6c5ZVG7O80kiwkGXl8xkrncvy0vlqadKpWmPW1RmzvtaE + DTXGbK41ZZtge50J2+pN2VhvLJ9rzHizEUtbFzLWvpAVXcas6bNi04ATOwbd2D3gzgGlzKXymSXGDKbN + lu81i5qQWTTEzKI1ZTbNqfNoSJsnrQXtaa60CMGuCbej1N+EYt0idR6SxihTOpPNWVlmx+ZmR46PeXL7 + zmgeOGyQNp4jwzomJJD2JDrREuZIQ7At9f7mtAaY0x1kxkoJcvvz3DhXqeO+5jDuWBLB5UppnAIX+Rsz + ikNmk+A9S4LZfHSui9TsX0/NPLzdF+LruRg/FUb4/18M4GgJlBFh9ur8gF7exrgKWXN1U0pBm+LqKqJW + AodGeYJIMWWVEhP2NhJsrDC3MEGZA1ghLMpTawpp+d8ygJWS0P+/DGCFSDm62P8F1Qx2kptDYOtgJ1BM + 5Jkn5/4rAzhIyfj1kXtixvwNCPTCRyekzVN5Wk8hUHLsWisVigHs76dVyz0rGb+xscEkxOtJTAwlKSlM + baOjA2VfnmqJaC93xeh1wEOOTTGClbmAFXi62+Mu58RTiJ+vrA+SoBEa4EF4sDInsDuBvooxbEugzp6w + YBdiItyJi/IkMdYHQ6KfEPFAstNDyEqTYCltfk4oedlh5MjrtMQAIeWBpMaFkBQVTLwMMDFhwUQK8Qv0 + dcPP3ZoQd2Oi3UQEeF9KXdClDMUtYnueNaeq7Lin14NXpwL51+5Qfj8TAVcFwJXucFbL+aNavtnuwGdK + KeiVFnw8Ju2QDR/3WPJ+pxn/HLbmhw2u/LrHk1+P+vH7VVH8fI2BL67I4tX9Wdy4NJEtZb6qaMqynUW6 + 3SwyHeeQbjufNKsFpFsZkWVtTra1JTlW5uRam5IjfSPHzowM68UkmQnJMpPtreeTb7+AEsd5VDrNo176 + apt2DsNyv6yS8WpaxqatSdZMx5uwKX4+mxMXsDllIRtTjFibaMRE7GLGROj0+hkxpLdnKFxLa6AD5ULy + 84SoZAgRTnaxJknIdpKLhgRnF+I1DkQ6GxHqMJsgy0sIMJ1FhLUcv+dc+jLsONDrzV07A3jylB+v3xjK + xw/H8/3rWfzwTgbfvpvMt++l8O+3M/jn8/G881AQT59z4+6jDly+1oydHfOZlLFnIGUenXFmMu7ZUaV3 + pjDAiVxBRpA9KSF2GCLsSQy3J0ZexwU7Ex/qKYHDixBvDd5yP7haLMDHehF6IVwJXiY0pXpycGkRD50c + 4qVzq3n4WC83ball/4AQkRJnVpVZcHDAmdu263j+qmD+9WgU59+O489PIuGzYPg8iD8+9+ePfwVx/rMg + fv3Yl58/8uTnjz347WN3zn/qyZ+fefHHFx788aVWWg2/fWbPz+/b8tNb1vzyqiO/vaDlt6ddJXC68MP9 + Lnx7jztf3OrJpzf58dG5CF44HsQdm905OeLMhnpb2gwLyZfxMSvoEkrjRKjnBdBZGc+S6iR6m7NoVn7Q + yvInLU4rotWW+Eh7DPEuqgmcKGNRnJIVLEj8W3mndFmvGMAFcRoRmzK+ZnjTWhjMSH08U91ZbB8rZctw + EavbU+kt01Od4kJxjB25EVZqBnCS3wKyQi3Ij7InTzF/BfkxjmoWcKZcE4PemrhAMxL1VqRF21JkcKRW + mS+2wo2lTV5M9wdxYGUER1frOTml5+zaMK5YH841GyK4Zp2eK8b9uWypDyeH5TxI3Dg5oJi9bhzv0XK8 + 24VjghO9SvavG0dVA9iBPU3W7GqyYVezHTtFFO1oc2J3hyt7uz04PBTAyWVhHB3Vs7vLlw1KTKx0YHWl + E9PNnuzvDeb4cBjHh4I41uvDYYmL+0U07W22l/06sLvFjt2tNhzotOXy5a7cssmP+/aEcv8BPfcfDObe + /YEXDGBfbt7kwa1bvLh7lx/37w0QAhXAY0fDeOpEJM+diuGxQ6HcttmNq1fbcmaFBVeuduD6te7cuNGP + mzaFcMt0JFdN6tnb587yMlOGi40ZLrFkoMiagUJHhoq0jJV5s7I2iMnmcNZ3xDHdG8/W/iQ2dcexpi2c + 0SpfBko86MnV0JGplHu2ozXDXp0LuDffnd4CD7rzPWjL0tCa7UxTpoYagx0VCVYqqlIc/jJ+lQxgBfVp + mguloLUz2cBZMkZka2jL0dKW7cqSPA868j1py/WgPtOVEoPEwsAFhPnNQe83mxDdHBnT5V6U/uPvOw9f + r0sJDFxIfIwtqQlOpMQ4kBotkFifE+VMUby7cCd3WXYiXXmwIcCMBInh2ZGKOewm65zUHztivc1J8FNK + qcl6uQeKE7VUpLrTkONLe3Ewddk68uM1pEbYkiyIDbUiQeJzsvT9OPnMiwawTqcYuUZ/GcDubko2sJFq + 7up8zdHLuJiQ6CWc0IPIKBf0Mv54y5jiqYhg4QM+Pqb4yGul1LNi/l40gNUy0F4W+PpaqNnEMVEOZKR7 + UpAnx5Uj30P4YYJeKcM2lwQ5L0UR1tQkuFAe6yj3nAOl8c6UKEhwpjRJI62jiEAbskOUEspzqU12ZLAy + hK4yfxqKPCnPc6ay0JW6Ui8aS71pzHWRcc+B9kQb+hItGUuwZDzWnDUi9iciFzEeNl+wgInwherryajF + 8p4xqwWT8cZMJCxmIsmU5cI7lbmBR+OMGJE4MpxgwoC8HpDY0R8l6+Tvlkeasixc+FW4JSujrBmLtZH3 + bWiX5cYIS2qFN1fJcplw50J5na+3oCDUmlIZR6oSXKVvSSxM96c+yZf6BLl+qaEM5kSxoiCOtSXxbCyO + ZkNBKOszfdlicOOYjHHXJLlxc7oPt+f4c3OGjiviXDgd7chlsc6cjnHmsIx9h8JsOCHX+6i8t0/6144Q + S7bKNZ8ONmNTsCkbQuQ7+y9gpfdsJvznM6U3YV24BVvl2uxLseNEphNXZDtxLseBW7LtuD3ThjvSrLhb + uPojuU48Lffk80UuvFKk4bV8B17Ps+PNfBv+WevBNy3+/KvOi7fz7XghZTEvpRnzWpYFr+Zb8Fq5Da/U + a3m81pObi704mOLGzswgtuTGsbEkmw3VNUzVtTBeVc+yqjqWNjawor2F4eYG2sqKaC7MpaOsmP7qSsYa + axnvamaip13QNlMKWjA12Mn0aB9blw+yc2KErSuHWNHZSG9dIWOdtWqZ5/6WcnobSxhoKWOkvZql3Q0s + 62mkvbpA+lAOnQ0iumVf/UsaGZF9r146wPSalRzZvZVrzxzn1huu5NzVl3HswB4O7NrKvu2b2bt9mr3b + pjm8exsHt25g8/gyJvs6WT/QxY6lQ2wb6WOwPJ+B4iyWVxWwqqaYNbUlTEm7obqYjZXFbK8uYW9dFTsq + ypjKzmQ0Pp6x+ARWpqQynpLGimQDyxOTWZ6UJIhnhSGGifQY1uYmsqEwmT31BZwdaOaOdcM8smMlzxxa + zcsnpnjlsjW8esUUr129hleuWc1L10/w3A3Lue9sB9cfqeTUnkwO7zRweK+Bo/vSObo3k6O7szm2u4B9 + m7NZNRBBVaEyjcgc7GwuxdZ+4f9hAM9gxgC2dDQXKOWf/5MBbO6iZADbXIAV1hrh/Q4LRA/Mw81lAd6u + SvWhuYS6zyFR+mZBpOilCg/2j8Vww+YsHj1UxIsnCnj1ZDavn8zgzdNpvHI6niePBPPIAV+eOBLEs8fD + ef5IOM/sDeGJbToeW+fOsxu8eXNHmGoAf30snS8OJ/PPvwzgED7Yo2QAB/CZxK1/Hwjix4Nh/Ho4hl8O + JfD9wUS+2RfHF7uj+XxXJF/uieCrfRF8s1fPV7sC+Vr43jfb/WbmAZZYqJi/v+7W8esu4Uk7vPlx53+y + f3/c4cX5A/78fjiQP47MGMB/XDSADwXy88FAtQz0LwcD+Gm/Hz/u81MNYMX0PX9Y2e6iARzAz3KcM+v1 + Myawkv37Xwaw7Fs1gGdw/mggv8k+ftgbplb3eXNVMI/3+vFIbygP9sfwwGAy9w2mcv9IFg+vKODRySKe + WlfGc5sqeHFLDa/vauSNPc28vrtBUK/itV31vLqzjld31KpPv78q617Z18wre5t4fnctz+yo5NkdFdKW + 8fiWYh7dmMsDa9N5eF06j2/K4OH1qTwwlciD65N5dEumXK88Htsm220r55FtlTy0pYI71xZy97piHpDj + eGhLNQ9PV/GQLD+4sZz715dxz1QJd0+VcueaYu6YLOaWiQJunsjnRsENq3K5fmWOIJtz47ncMJ4n64q4 + bqKE69ZUcuVENds6s+gvCKMgSkuYu8Qyl8W4OC3GxmYBVgLrC7ASvaHgP6+l/1svmIHVfGkVzMPCag7m + lnOwUCDLljazVVipkNfWs7GwvlR9bW07WzSp3E9Os3GUvu8kWttFtLPW1xQ3ifsuvsY4es/HWSm7HrQQ + r1DhERJz9InmxGU5kVbiSU6lH3k1AeRW+c2gWkd2hS9Z5X7yXhAFleEUVcdSWptESY2B4koD1Y3ZdA5U + MLKyhaGxRhqb88nLiyFedGV4uDI/n7NwBC3pGaFU16QzOFTHzt3jXHn1bm646SDXXL+XK67ezhVXbeXy + y6c5fnw1e/aOML2lkxUrK+gfzKWuMZrMPE+y870oqQikvC6UyrowKur0VNSHUdsaR2t3Cu39qbT2p9DU + m0x9TxI1nfFULEmgvD2esvYESqQtaVPaBErbEynvMtA0ksfA2lpW7FxCz1QluS1RxBX7EFfiQ0J5AEkq + gkgsCxaEkFwRQWqVHE+tMj+wUh46VS0PXdqSL59XTn1vNU0DdbQNN7Fi4xj7T+/i1HWHOXHVfk5eeYBz + t5/lgSdu5ckX7uOVt57k7Y9e5IN/vc4/PnmF9z9+mXc/eoHX332K5159iKeVeRefu59Hn7qbBx+9neuu + P8P27RtYtmyQnr4lagbw6PJhVqxaSt9AD1kyxnv5est4aid9Q5n6ypXY+BjKy8toaKjDkJqM1tUZM3Xe + T3Ps1CpqF41feX0BSmlnB8eLmKmiprTK/L9/N4BtnWV7Z4sZA1jGYaUiWIinM9E6V1ICPCgI8aQizIMW + papEnA9LU/2ZSNWxPsWbTQZPtol22i5QzOBNSR5MqgawB2MGdwYNLvQnu9KTJJxb+JyCiwaw0irm72ia + GyOpyjpHOoUntUaa0xhuqqJe0BRtRUu8nWr8qgawgnhr6qJMqA01olnuge5IM0ZE30+IxtpZrON0SzR3 + LM+VcaaBj68a46ubVvHJdUt5/VQvT+1fwvXL89lVG8GqbC96Y4UXhtvQIFyoPsicBuFFDWGy/3Bbai4a + wMJBy4TPKSWgFQO4WlAXNE+2VzKA/2MANwbOo0n4fpNw+uYLGcCNYWbUhZlTFmJMnqzPDFxERrARGSFG + oh+VB5uMhP8tpihsMWVhSiawBeVRlpQKNy2NMiVHb0RqwFwSfWYR6zmLBN0s0f2zRGPOEU6/gIo0ExoK + bOmq1rKs05/JAT1rBoNZJWP5ig65Fh3uqgE82e8lPMiHjcN+TI8EMD0sGPRnZZMypY0JJbGXqiWlCxKN + yRZuq1TQiY9YSLQcV4wcl2L+KoiJMvtvAzhVdEuSHSnJtqTJtVHmAU4TzqggXflNWNqsRDuyku3ITrCb + Kf0s5yRRzk9cwAJiA2ZMYIOsyxBerMwFfDELuEC4bXKQmYzDcwjSzCLI+RIiPRYQ7SnHpUC0iZIBHCe6 + IjnAipRgG5IDbYUrXDSAjYlVMoCVctA6CxWKoRv1lxGsmLtmfyFcZ0qYIFS2D/UxQ+9til72HyLaRi/j + cIi3CXplvSDUV5lGx5JgXzOB+QUDWF77iZbS2RJ40QD2c75gALuoBrAyfZySSKIktCi/YToL73HWCFys + VTjKsqNG7lU1gcUed0+l7LMrWq0GJ0cHHB1t5R6W9y60zq6OuHm54uPniS5ASVTxEL3lJp/jJtrLFRet + vfpbqpJQY6uMCzIGOLvY4umuHJsHQYE6AgN81b/xUuYi9pTPcbbBwU7GB3sZG1ws8NLZExkh1zvRndYc + P5aWBLGpJow9jaEcbNJzqN6fI3XeHKl153C1E/uKLdiSOZ91ybPYaJjFlrRL2JE+h30ZC7ii1JY7W314 + vD+cx4VDnqvRcpmsO1pgzv4sYw7nWXJVrRs3tQdwe6+eG9r8uKxSy+4sczYlzmNjguw3Zi4bE+ezJ3sx + x0pMubpRMYBduK3Dibu6nbi3z5mH+rU8NODK/X0u3NPnzp3S/28b8OXKNuGPVQ7CpUW/Jc2X8WMO9SFz + aJS2NdyINtE9TQGLqZZ+VuO2iFrRwvU+JnJvW8m44ECR6NdEj/mEaGYT6DqPAO+FgvkECoJ95hLmLRrf + 8xLCBVHel0o/lXtV9l+XYsVwmTsTooMma9xYU+XCVKULW+q9OTOawP3by3l0TzU3jhu4fCCMY22iheo1 + HG/WcnmPP9cvi+WmiQxunCzk1g21PHp4KW/dtJdPHrqKjx45xz8eu4F3n7yVf7xwDx+8+QiffPAcH3/0 + PP+Q9p33nlXx7rvP8P77L/DRhy/xyScv8tlnL/H+P57m/vuuZtvWZZSVJBMZ6iW63UW0vxOO6u/yM0la + iumrTKFoLf3CWskqtxUuL7CRuOHs7qCavn4hXgSE+aIL8sBT+ru7ryOObhJb3C1xk2VPf80FA1ip9GOK + 1tNGthH4XIC3tfRjOwKDnAkV3hEtMSchVochzp+0GH8yInzJDPWhMDKA6qRIWpUSy1kG+nLTGMrPYqQo + l+GC3L+yfzszhU+kCj8wJNJoiKNeUJs0g7qLSI6nQXRTU3ICrcmJdBtkf8kpDBlSJT6lMZImmis9i9HM + bAazsujJyqQzS/YtULKLu9JS6E430JueMmMCZ6QxIO2wfPaIknEcFkCz3Fsdnm70+3qwPDiA8Sg948nR + rEgXHZclui07kRXZySpW5giyU1ilmL9ZaSyTzxhVkK3Ma5zHUGE+g6VF9FeU0ltZSk9tJT2K7h0e4MDe + Hdx73+288Y/X+PjLj9Uy0D/9/iO/XzCAlWzc/xjAw9TU1NHV08+WHXvYtf8gK1ZP0rKkh8aWToaWLmfj + lu2sXT9NWUU1kdGxwj3SVAP4rrvu4qOPPuKXXxQD+Le/5gB+/InHuO32W7jv/nt47rlneOedt/8PA/in + X37lx59/lX75EeduvJmRZUvJUQ3gFMpEw09v387Tz7/Al99+y6/yZ79fBH+qUPY1g4sG8AX8zQD+/fdf + /sJvv/0k+JnvvvuWjz/+iPvuu4fdu3cyMjzIQG8342OjbJ1azf7ptexZs5zVbbV05yXTlRHFeFkap0Za + eGjXat65ai9f3X2Kr+87xjf3H+Sbe/fz/QP7+PHBvXx/9za+vHGKf125nI+OdvGuaJ33dlfz6aEGQRP/ + PNzGv470SDvI29u7eGComDOlMRzMjWB7ejirk0MYigsQ/hNIc0IY1YkRFMWFkRUTSrzejwh/4bL6AHKk + v9YU5FBbkE2hQa6H3p9Yfy+ivNzQu2rwd5F7ztEZR2s7HGyccLJzRePkhouzFq3GRZadcXZ0JDgwiKqy + CpaNjjHLX4LlRej8LSUoKNkeloSG2hAZpZT9syNKyE9YsLH6w2V4wEKighaTIAE7OdKSFCFoaTFWpEdb + khZlQXqUuQR4UzIE6UJuMvVCciJMhWDYUJXsRFOWB6253rRkedKW4S43kTs9QgC7kx2FFNoKabRmJN2G + 5VkOjOc7sSLfkcE0IYExRkKk5gpm0xyzgCVJxvRlWDGWb89YsT1DeUq2mBUTQoRW1boyXufKxAXzd1yw + skHDykan/8JEixNT7RrWtDkz3iSfWWfKaNVixioWCRYyWjaf4eI5jBbPZXn5IjUjeLJ6MWtqTVhXa8qm + enM21wnqTZluMGNdgymrm0xY2bKY5W2CjsVMdJuxvt+GLQNO7Bl2Y/+AG4f7PTiwRMPGChPGc+fSl3QJ + bdGz5DvNojdrLr0FRvQULaa/yJ6BQl96MvxoidNSrbemLMBMYEKNnP+WGAv60pVzYM76OmsOj3pydjKI + MxOh7O72ZbxYmd9ES0u4hqYQOwls5nQHWzIWYct0lpsEWj2PLYnh1QEDz44kc5cI/4O13jIQ2VIXM099 + einEcx46NyO8XOar8FEMYCFefhfg7734vwzgGMWMEkRF2BMur5X+5C0B1F1IlLsIag8PC2ltcVOeflOI + zoUyE7Z2MwawhaWpCOgZA/jvWcAuWvkbCTTKnBn//xjAankKaZ2ERF2Eg8ZO1tvPQDWC7dQn6lxFUHl5 + u6HzkwAWqJRCEQR5SysI8sQ/wH3mqT0l+9fdDleBYgIrGcC+vhpCgj0Jk8AUHRWgZv0mJOhJSgonJSUS + gyFCzQIODHRTzWIP1xm4KyTMTQKnh9NfGcHKOi+tw19loINFhOn93QkR4ujvYz9jAEt7MQtYNYBjfEhO + 0JGW7EdGSqA676+SDVyQEyoIJycthNQEf9KTgoWERwhBjyA5OpS48FCiQgMJERLo72lLsIepEOr5ZHjN + odR/Ni36OaxIMmJzphFXNdnzxLgvH+wJ4ZcrI+BcEFznxp9Xa/jtMi3fHXLky112fD5tyxfr7PlytSOf + jdnw0YAFn4xY8e06DT/vceeXo778fnU0v1yfwtdXZ/PWoRzuWp7MvnI/ekUslTtdSplmDuXahRQ7LaLI + zohiO2PKpQ+USx+psLeg0t5MWjN5bUqRzUKyTS4h0/gS8i0uocT2Uqqd5tDmNpd+v4WsDDVmR4odR2Uc + uarKnWtrPaR14my5JVdUWnCmypyj5aYcKDZlV54Zm1LNWREh922UDSPSf5tEKJR6mpDnZkKGm4x3GnOS + 5BoluDgS4+yozkMc6rCAYPtLCLCcRaCS/et4iQhFY6ZqPLlubTjPn4nk3ZtD+eyhaL57IYHfP0jl/KfJ + /PpZDL9+HscfX2bwyycpfPduDJ8+E8Trd3hx/xF7zo4vZlfrfBkD5woRWUxHrIUIXltKAuwoDBIBJmIn + NcSalAg7tWxsfIgDyWFuMiZLsAj1FpHigo+ICQ/bxfg5GBPhKWOzjAF9paFcMd3E09dO8Nqt63nweD9X + b6xmc2sUnUlmtEZfykShESeG7Ll3lwfv3BjED09H8Md7ct0/DYEv5Np/5QffBAqC+P1rX85/5XEBbvJa + oLTfuPD7v53ktQO/fmHDLx9a8tM75vz0uiW/vmTH+Rdk/TOOnH9Kw/kn3Pn5EW8JqH78+54wPro+iOeP + e3PHtCuHBxxZVmJCXbxcY/0sskMWUBLnTG1mEPX54TSXx1NZEEZ2sgdJkQ7ESNxS5gBOidOoSAi3I1rG + vOhAc2KlTdTPmMDpsq1qAIvIVMRmbaYPHaVhjDYksLojQ8RxIRv68ljZbBCyFUadUq420oa8CGsR8CJW + Q8zIjbSmMNqB/L8M4Jky0Jny+YoBHBtopiI5wpI8ZU7ZHEe6K91Y0erL9pEwjk/GcnIqgtNrQjkzKZgK + 4woFyvKKAE6P+XFyxJMTgx4c7/PgaI+rWpL5SKcLR7u1HO91V6EsH2x3Zk+THTsFu5rt2dnsyPYWZ7a3 + ubJriQf7+kSkjYSwvz+IbW3erKl2EYLjwESlMxsbvdnTFcTBvhAO9QRwuMuLQ+2usj9HdjfYSWuvGsB7 + 2205Pqjh6glPbp0O4J5dwdyzJ4h79sryHn9p/blrhw+3THtw21Yv7tmt435Z9+DBAJ44Hsrzl0Xz6pUJ + PHMigrt3KOWg7bhm0pLrZMy4aaMrt2/Vcc/OMOl30ZzbIMcy5MZElQmjJUaMlJozWGzJoMTEoSINY2We + rKoJYLIpjPUdSvZvPFv6Elm/JJpVIkqHK7zpL3anO1ejlnyeMYAd5LVW9uPDUKlO3vehPVsxcmcM4NoU + e6qT5ToJalIdVdO3MdNVNXPVTOA0zYwJrJaDFmRpac5yoUXZh5JRnO9BZ5E3bQVeavUTZc7qmID5hOlm + E6qawCIOAxfKmLsQnfdsGfdn4ec3X4SOJUnRtiTLuJMZJ/e29KFC6Zdlye6UJLpK33IkI9yGJIn78X7G + wqusyFL6WLDyQ4epiowwW/XJ+fJUDxU1mcKxCoRUKn1XRHu29M24INk21JL4cFt1jmxDgsv/MIAV83eh + WgJ6xgCWZfcZA1jJ7g0IsJLY5inwICbWjcgIZzl+C9X4Vba7CC9PU3y8LVUDWDF/VQPY+z8GcFSUg8RG + dzIzPEgzyNgVbiIkdz6hHpcS4zGbDP/F5AWZkeVvTFagjL9yzPlyrxXH2FIWb09pnB3FSgatiPUM3TwR + cQ4MV4XQVxVIa4WOeukbjZW+tFb701alo7XQXbimk/ArW/oSLBmVsXRllBmTESasDlvIKv18JkIXzEBe + T0YYMRUpPC9qMeviTZlKMGFKxsYJaVcmmKpZwCPSDsnrvngjemMW0hOxkL7IRYxEmjAWacqKKEtWxtqy + PN6OETnmbjn2tmgbmqStV6q6xNpRFm1NSYQVpcLHymX8qI4XnpbqTWuqjqYkH5oSZExKCWI4O4LVRbFs + LI1jS0kU0/nBbJLxanuyCydjNVwnuCnRjVtTvLjJ4MVVMRouj3Li8lhnzsY4c0zGwGMSz87IOHdWtjki + 4+ceGSeVLOANcq43Sb/aFGLKxiD5nsLx1wUasV5vxoYwS7YKb9+VYMPhFEdOpztyVaY912bYci7NmhsM + FtyYZKoawQ/mOPBYrgPP5inlnu14Ld+Otwvt+KLRhx+WBPPvZj8+KtPwSqoJr6QZ80aWOW/kmfNmuTWv + N7jwXJMP99X4czrHh705gWzLi2ZTSSYba2pYe9EArq5jWVMjK5e0MtLSSFt5Mc2FeXSWlTBYU62+N9Gl + mL9LBB1M9Lazuq+dqcGuCxnAw+ydWsnuNStYM9jJWHsNEwNtrBIs7axnuK2KodZKaasZ62pgtLOB1so8 + 6ooyaa8tZaizSTWAhxVzebSfDRNL2bt1PWeULOBrz3LL9Vdw1WXHOXF4H4f2bFfN3x2b1rJ7eh07106w + fmSQpa0NrGxtYn1PJ+u7lzBQIoJeRN3yskJWVRSzuqKQybIC1pTms744n63lReytqWRnWSlTGRnSnxIZ + T05mXVYOG7LzWZuRy5rULKbSMuX9dNZmpbAhL036SSbbyrM53FLB9cv7eHTnWl49uZOPbjjMv24/zud3 + H+WL+w7z+f2H+OyB/Xz44B7evn8LT96yjDuuaOPKI8Uc35cp3yWbU0fzOX2kkNOHirnsYCWHdhSxeiSO + qkLhtK5zsBXeZevwHwPYxMFcYKXC9H8YwBdhoZH1yjzAwtEVKBnBVs4mWNrPx85unmiDBcKH5+LlPBs/ + 7SWEe88hJWQhS4pc2DYcxVWbMrlnfwEPH8jisf0GHt8XzxMHY3nkQCh37xbusN2VB/b68OThEJ4+qOfJ + PYE8utmbh9doeWa9118G8FdHUvn8UBKfHojlw33hFwxgPz6RuPWZUtZ5fyA/Hgrj1yOx/Ho0me+PJvH1 + wUQ+2yd8bW+02n65P5av9kfw5R49X+0M5Ou/DGAfftmj4zeJg7/s9OGnv5V+/mGbJz9u9+T3iwbw4QD+ + VLOAZwzgGdNXyfadwYwBrPvLAP7tUIhq4P564O8GcBDnZb1iAiuZxGoZ6KPBM/jL/J0xgn8/KtvK3/8s + 3/ff28N4fzKQF4Z0PDsUylPDMTw+nMjDg0k8MpzGY8tyeWJVHs9OFfPSpnLe3F7L+/ta+PBgOx8caOH9 + A80q/rG3kfcE7+5p4N19gv1NvC3bvSGvX9lVzYs7lLJoFby0o4xntxTw1PpsHp1K5cm1aTy7KY2nN6Tw + +FQCj62L55ktabywI4fndxTz7M5yQRVPbivnnjW53L82n8c2l/Hk9kqe2lrJk1vKeVJeP6FkHW9SspRL + eXB9MfdPFXHXZB53rs7lrql87hbcsSaPOyZzpZXl1YVqaetb15Zz6/oablhbL/o8n1XVcbRkBJChdyRC + mcveyxpXFzOcnBZfmMLICAeHRSrs7RdKf12ArVIq2nouVgJLy9lYiB4xNxdYzFJhIbC0noW17SzRtTOw + srlEXWdhNfOelc0s0buX4OA0CyfX2Ti7zcHFaz6uPhKLZZx21S3ESXiDk/cluAZcimfwbPwjhV8kGZOQ + Y096iSvZFZ7kVEhcLXYRaMgs06rrciUeFghfKm+IpKopnmrhtRX1BkqqEqhvzaZ/rJrxtR0sX9VGc1se + OblhxMV5EhqqITDIXjiChqwsPVXVBgaHa9m7b5zrr9/Lzbce5NyNe7nm+h1cd/1Ozp3bwbXXbuWyM1Mc + OjzG5i2tTExW0tGdRG6RF9n57pRWBlDXFElTayz1zUoGcDSNHQm096TQMZBC50Aq7X0GmnoSqBVuV9UW + S3lLFGWCItm+qCmKYgXN0VR0JdIymsPIhlom93QwuKGK4iUxpFT4YajyJ6nSjyRZTpLPTKoIILE8cMYE + Lg8ltTqSzJpYMuV6Z1TFkaucj5ZcKjsKBIXUdpcyOtXLjqMb2XtqM5v3TbB2yxhb963m8OltXH7uMHc/ + dD1PvHAXL7/9KK+/9yTvffg873/6Eh/88yXekeV3PlCysJ7jxdcf49kXH+KhR+/kyqtPsnPXJqbWjTMh + 8WjdpknBajn3Y3JeaomOi8TVQ6s+oO7i6kJsfDSVlSXU1VWSlByHi9YBM3MjbGzMUAxe5SF51dRVoZQf + l/VOynuK4aM8QP/fBrC9YhKrv5uYYy3bKctOMv6qBrC7PcFeGtUANgR6iObypDzMg8ZID9GgXoyk+rEy + 1VdijhfrDB5MC6fYLFDM33VJ7kzIuhVqBrAbQ8JP+pNc6EnSqKWf1fLPF0xgBYMpWkYz3BhJcxWNK+8n + OtARZy08yZKWGIFwqFY1+/c/BrBqAsdb0xBlQn3oIlr1i+iLMGNZnA1rUzUcqAjiSulLd48X8MyORt6/ + fJjPb1jBJ9cv5+2zQ7x4rI+bJ0rZXhXKaLKGNuE4TcKDaoRX1wjfrAs2p074dW2YDdXCmapjHagUlAlP + Kw81pVxiUI2gPng+DcEXzd//GMCNwvcVA1gxktrCLWgTTt8surFK+FRhkBHZwq1ygo3IFGTpF5OrTLkm + baGgVP6mJMyUYkFRuCmFYcJvA+eT5HsJsaIVItxmEeczi+TgWWREzCU/fhHl6WbUFzrQXqVlqM2XFd3B + rOgKYFQ03nCzC2MtGlZ0uLK614O1Qz5MjwWwbVkQO5YFq5jq9KKvxJLK5DmiMy6lJMWEwlTRt4nGxEcu + JCZ8seA/BnCiYuqKLvqPAexMqvDvVIOMP8kC0blp8aKx5Toa4ixJl1YxgRVkyPo04e0pYWZq9m+s/wLB + IuLlnBjk3KZFWFzIAp6pypUvvDYp0JQwt9kEypioINJd9JJolBgvgaccm7cZ8TpLkgOthR+Ihgq0Uw1g + NetXmd/X+wJ8zVUo5m+UsqwawBZqZq8KWR8mOibYy4Qg0TtBsu9ADyMC3YwIEB0U6L6QAA9lnfKeMcHy + uUHe5gR6mwpk2VcxgK0I9rMhWGdHkJ/jBQNYI5gxfxV4+zqjTB2nZP8qhu/MAxrmElPkPlXuY1m2Ux7S + kHtWmW/V1c0FratGtnWS9+0l5igJMzZyP9vO/HbpocHL14MAJWlF709QiK+avKJA+f3S08tFtlceEpF9 + Cg9TS0HLvl1d7PD2dBFNpiSmeKjGrzI/sJI1rGxrY33hN1hnC9y97AjTu8j1Uyp6+jNcHMzamjC2N4az + uzmUfQ1BHKjTcbDWi/0VTuwqNGdzhmIAX8JGwyVsSb2ErSmXssswh1MF5tzS4MbD0k8f6Q3humpnLi+z + 5YzgRIkVp8vtuLbJnRuW6LipK5Dr2gI4Vu7Otgwr1iUasTnNguk0c3ZkW3OoxIFDxeZcVm3DuTYnbu9y + 5oFBLY8OufLkiCtPjbrxxJAbjw578dCoL/eP+XNzn47Tza7sKLNmVZYpPaLfWqMX0xi+iGbp53X+RpRq + 55Ep8TpT4neh/SWUaRdQLde52t+SQp0pCZrZ6GV9qMtswjznEO41m0iJy1G+l0qfmyN9UnlQYRZRAsUA + zgiZR02KLUMVPqxu8GONnKc1Na6srdQyXevBZcK37ttcyOO7yrh3KoXbl0Vy04A/57q8uE2O9/6lYTy+ + NlU4UxEvC5d6aX87b5wa49ObtvDF3Uf4570n+PCB07z/8JW8//Q5Pn7tHv75/hN8+sEzfPj+M2pGsIIP + /vEsn3z8Ep/981U+/9crfPXlq3zw/lPcfecZNqztpyAvjrAQD/x8tKLjFbPowsMG0tcUA1gxfy1tzbGw + NsPcyliFjfQlJ6U6p06DT5A7AeE6/PXesizawE/24WGNxlP6m4+DagJrPWWfLqYqtEp2sHArraclLh4W + uLib462z/SsLWHn4LEYxgaN8SI3yJf2CAVwUGSiaP4r2jCR6c9MYKMhkpCiHseJchgtnDOCebKX0s4GW + lGQaE+OoTYimOiGKyrj/AYmtVYLquGjq42JYkpRMd6KBviQD/YoRnJrOcJpS/jmLPtFfium7JDPtP0hL + oSvdQHd6imoC92WkXWiT6UtNoDnMn3pfN9o83ejTebI0JJAV0aEsk+NflpbA8qxklikm8AWoRrBouHE5 + /uWZqSyV/Y1kpMrnZzCYnUV/Xg698h27SgroLCmkq7KU3oZappYOc+LQPh568G7hG3Jd//k+H3/+ET/8 + +gO///m7ar5+/fU3fxnAw0Mj1NY10NM3yLZd+9h78DDjk2tp6+ijpb2bpSsnZP1eNm3eRmV1rWoAKxnA + IyMjfxnAv/76C2oG8M8/qPPrPvb4o6oB/MAD9/HCi8/z3nvvqAbwH38oubv/iwF8080Mjo2SkZtDXHIi + xRVlbN6x4/+9AfynYgArxu/Pf+HX335S5yr+9tt/849/vMdtt92qzgHc39tDb+cSlvX3snnVMvatn2DP + qhFWNZXRkRnNEkMwKwvjOT1Qy0NbR3nr1CY+v3kvX92+m29u3y7Yynd3buaHOzfx3a1r+eq65XxxZpBP + Djbz4e5K0Y+VfHGoln/tr+Gz/XV8fqCVzw928899Pbw8WcM9HZnc1JTGFdWpHChNZDovmoncWMbyEunN + T6YlWzh6Rhz5iRGkRgZJ3AymWPpLY0kOTdLXK9ITyIvRkxEWQGqwL/Eyjod7uOPt5IyLtR0aOye0jq64 + a73w9lAe6vDFx8sHTzd3IkPDqa+pY2LlOLN8JfD9BT9z/PxM8fc3JyTEivAIOyLDbWRQMEPvv1AC2wLV + AI6U4B0nZCUx3BxDpIXcnBLoIy1JjTBXkaY8zRVqRnqosQx+xmSGGZMbaUaBELtKJRM4050mIX7NSnar + EL82IRDtQvI6E6zpS7FmMN2WkUw7xnIcGMmxoyvZVAifDMJhs1U0xi6kI9mM/iwbVpS6sLzchd5sIYxJ + C+jPtWSoyJbhMnuWVjuxvE4IUINs0+DEsnpHeX0B9Q6MNzkwKYFjdasjKxqtWVprxnDVYkbKFzFSIShb + yFDJfEYES2XdssqFjFcvZlWtCVP15mxosmRTk7XAko0tlqwXTLaasbLVhPE2E1Z1yHY9Fmzqt2F7vwN7 + B1042KfleL87x3tc2d9sy3TpYrnZ58hgM4vulFkM5M6Wz13MshpzVtZqWFbuz1BeIJ0pXrTGa6mPdKA8 + 2IIKIarVIaZCVI1oip4ng848VpabsbHZic2t7qyrEyIugqs32Z2WcBfVAG4JtKA3xJJVcU7sKw/gHhFZ + by/P5Z+rC3h3dQ5PLDdweXsw64qdhGTPx6AYwO6z0bktwsd1AV4uC/B1Xagawqr5K4TIX8hVkPSbsCBr + 6Vj2RCnmb6gtEeG2hIcqpVDMhGCY4empZAqZ4eNtLcTDHo+/DGCljJFiAM/AyspUxPAF8qEYwMqTaEKI + nLXW/48MYFshUzZCeNQJ6/9uAAtpUuCsdULjKjeJtO4eQoRkcPYPUEiTL37+3gIhRn7ucj+4qfD1dZHj + n5m3w8vLGZ1OS6AIpFAJSOHhvkRF+quZvn83gNNSo0lNjSI+LkQ1gN3dbHFzmYHrhdZdaydwwFMp9yLw + lcAb6OMmRNJDzQJWTOBgIZABEkADfB2EZDrKudYSHe6ploFWDeA4X1ISfElN1JFpCCQnQ09hTjhFeZHk + poeSEu9PWlIwuWnRZKfECEGXY4oIJ1KCkWIAB3jbESzXJtrTiBSvBeTp5lLpP5vOsLkirGZzoMyUe8Y8 + eGtPMN9fHcEfNwfCza78caMTv12r4ZfLNXx3wplvDznz3V4Xvtvmwpdr7PlkqQUfjZqryz/s1PDzEW/O + XxXJb+dS+O7aHD48ls/jkxmcqglkVbT0TZ2IuQBzegNsWOJjRYubCECtFR1y3jpcZXwQdLvb0uVqzRKN + BU32i6g0n0W52Sy1rbaeRaPDJQz6zGWjiI/DBRpuavPn/r4AnlgawjPL9TwxpuNhIYgPDDpwT78tt3Rb + CdGy5WyTrRBKS7ZnWoiQtWREBEmNMl+2w1xynBeQqTUhVWuGwc2GRCE8Uc5CiqWPBdsvJMh+DsHWcwix + vASD6xya4i3ZJeT1/r3JvHdzMv+6P5pvHo/ix5ei+POjOP78Kpo/vtFz/tsw/vw+XpYT+OPLaH79MJyv + Xwjm9ZvduXevNZcvM2F73QIhBAvoErGnzIdUIfdZRagjBWG2MsZaSWAQwRXpJOOuhowYL1KjfUkI9yZU + +qufnLcAN2uC3BSxY0Nhogj0JancdLCf529ezyu3buDe44NctrZSSGmYiHxjyr1n0RlxKdMy9l0zZsvz + R735/K4Qfns5DD4Mhc8CZgzgfwu+8+ePH3z480cPFX/86C5w4/z3WoGG37934vx39vz2tQ2/fmrOz++b + 8fNbpvzyqgW/vmzJby9Y8/vz9vz+nIbfnvHgl8e9+P5+Xz6/zZv3rvXgqSNuXDPpwI5OCwYL5lARPUvE + 8yVky7iXH6URoehJXqInabFKpq89MRKzlNK28eF2aunn1L8ZwJH+pkRL34oPsZGA6kimUq5Z/q5QKTeV + 7KZmSfZURjHWKASsNY3x1lSWNyUzWhtPb1kodanuFEfbURBpR36ELXkSFwuj7SmKdZC49t8GsGrOXTCA + owKMSRTxnxljQWGyOS1FDoyKANrcH8QhJQN4ZQjHVgRybHkwR5cHcXxZIMfHBKM6Toz4cXzYl+OD3hzu + 8WB/hwv72p050K7hcLc7x3o9Od7nrbYHO7XsaXFkZ5MjuyQG7GxyZluTC1uaROy0erC7y599fUHs7PRn + Y4OHWjVjZZkjE1WubGzUsWNJELs6gti3xI8jXb4c6fBkb6MTuxuUuYUd5HMdOdTtxFUrvbl+rS+3bPLn + ts2+3DztKXDnju1KtruvwJvbtnhwxzbFAPbhgb1+PHTQj8eOBPHMyTBevjyaZ0/ouX+XbLPFkVun7bhp + k63sS8M9u3x47FAEjxyMkXVBHBl2YarOhKWlCxgpNWaw2IyhYhFSRY6MlbixotKHifoQ1rVHsqk7nmnB + eF0wo+W+DJZ4ClF2pUs1gJ2FazjQmuFEd66rcAN/llYFq+2SXOEhWZoZAzjNUYSawwwuGMAteV60FfjS + mutFfYbEXzUr2IWGjAuQv2sUKGZwm5IBXKwYr15UZ7lRkGwn138uYb4iFP3moQ+Yd8EAni8iS+KqiMZA + /wUSM82JU8qiCY/KTXKiMElDWYobFWmKAexCgfSxzHDlCXcTkgJkjA42JU36VFLgYhL8FmIIMqYgzoGq + DE+qMr0ol76qZLS3FAaxpDxM1vmQFm5NuK/y8J6ZjP22pMh+DUmuxAkXCIuwJjhkxgB2d5+Pm4x7Fw1g + T/eZ8s5KFQ9lPv+ICGdiY10FbiqUUtD+/ha4Ci9wdJgjMX2+/K38jeeFLGA/uxkD2MdCWgsCg6wIlc+P + lHspMsqKiNBFRATNJ0rOS2KwMemCDP9FpHrNxeA+R+LRPNIlLmQFGpEbYiLjnimF4WbqD2T5IYvVsnr1 + yfaqATxQq6ejxp+WKl9aqnW0ClrKvWkvcqdDrnGXwY7+BKv/MoDXhC1itX4+kyELmQhewKR+IVOhRqwN + N2Jd5GK2JFiwWeLBxmQLNiRbMpVixXiKBaOJpgwkGNMtXLQzej4dYYLQufSGLWQ4wphlwnWXxwo/TRAe + muDIYJy9bCs8V9oWQWO8A/Xx9lTH2FGtVHcQ1EY70JTgSmuSJy0ytjXHebAk0YfhjBDWFESxuTSGHaWR + bBM+uEWu8+5kJdPXiWvDHbha4sHVMtZdHeHAVVGOXCkx4cpoZ85EOXFU+NhxWX9FiifXZPlxKsmNfWF2 + bPE3YYOPEZsDTdmmt2K3XJcdETZs0Zszrbdgo8SXrZHCXaPlvXhbDgo/Py7n4kSiOacTTLksdjFXxC7i + ukRj7ki35r5MGx7NsObpbCtezrfhjQIbPpbx5ZsWP75vC+TzWk9ezzLntXTFADblzTxT3iq15A3h5S+3 + +PBEi55rSgLZn+3P5iw96/MNTNfOGMBKCehlVbUsbVIygFsZaW6gtayIxoJcOktLGaqpYXlzExMi6lTz + V0U7k30dFwzgAbYtH2H3mpVqqacNI30z8wX3trKqr1WWmxjtUEzgGoZaq9XlofY6WioLqS3Koq2mlL72 + BgY7mhnsbmXZUDdrVgyzZd0q9m3fxJnjB7jhqtPceM1Zrj5zQl4f5NiBnezYuIbp1ctZNzrEys52+qor + GFBLeFWztKZKxqgciW25LCsuYmVJkXD2fFYUKPM+ZbM6N5v18t7OilK57sVMpacznmhgMiWNzXlFbC8q + YzqnlHUZBWzMymdjTj7Tsv2W4jy2VxSws7qII2213Dq5jJdP7OOz267kl6dul7h7J+dfvJXfX7iB8y9d + zy+vXMuXz53m3Ud28+TtE9x5dTdXHKvg2P4cThzJ59SxIkEJlx2p4PShag5sL2XlcAIVBe54KAaw3X8b + wKaKASycXoHZ/zCA/z+c/QV4HNe2rQ3LiVmWLGapxczMzMzMzIxmkEm2ZMvMGMfhxMkO0w4zx0mcZIeT + HWaw4zjvP6tkO9nnnHv+e7/Hz/AqVVdXd1etteYYPXrOpa9CFwPh7PpW+uhZyTECdU1gy0UYms3HxGwe + 1sK5bDVzsLe+Wnjx1Xg5XSXxew7l6eas7PDnwOp4btoqInprHHdsCeX0Rl9u3eDBTevsuWGtBbdstOb+ + aWee3OvLM3v8eGrak8c3OvPPlTY8u9aRs1sD+HR3lIjyOD7fEyPbigEc/DcD2IMvBN/v9uIXpdTyoUjO + H47nR8HXB+P4bH80n+yL4TN5/pd7Y0XsR/LNnlC+mvbl60sG8M9bXfn9kgH862UDeIvjjAGstJNOXNjl + wYU9Ctz5Q9o/9/nyu1Lyeac8f7sb5xXDVzWA5X1cMoB/u2QAK0bw+d3enFOPUQxgby7Ivov7ffnzoJ/A + h4sH5G8FVwzgme0/Dyqmsw8Xdvvxy3Z/vpkI4KPV/ryzIow3lkfx/EgUT/ZF8+RAHE8OJ/HUWCrPLc/g + tXV5vD1ZKtephk/3NPDx7lrZrlLxwY4q3heo27urBTNG8NvTlby1rZQ3t5VwdkcpZ7eX8PpkLq+sT+d5 + 5YvNtQm8pKzpPB7L82uieG5NOC9uiOWliURe3pLFi5N5vLhVMXhzeGhlKo+sEa26KZ/ntxTy/OYinpso + +BuKeEYpQb0uV47L5IEVadyvYFU6D67O4H7BvXKOu5elcueSNO5clskdK3K4fWUht6ws4fBgruj5eAby + QoTzeZIW6Ux0mJPEKTv8fKzw8RINJvD2VGCOm+hZJwd97G11sLXWxtpyHhaiB0wMtTA00MJENIm5qRZm + AkvLWWg0V2NrczXWVrLfXAtT2a/AzExLnqel7rex0UJjp4WtvbSOs3Bwno2zcAdn73k4eFyFvbsWjt5a + OPtp4RM2h7AEbZJyzcgqtSVP5ti8Kieyy21V5JTbqfvyK10pqvaioSOatp4UmrpSqKqPo7QqlqaOLIaX + VzO+qZOlKxupbUojJd2b8Eg7ApSlHnxNpbUkOcWLwqIIOrry2bSpi6NH1nLNyfWcuGY9J0+t54YbN3Pr + LZPccbtiBE/I/uXs3NnO+g1VtHfFkiOcLEticVmlr/wdR/9QOgPD6Ywsl3lvVSGjKwoEeSxbUyR/F9A3 + lkHbQBJNSkZwRww1bVFUtEZS2hxOYV0w+bXCy+U87UuyGNtUydqdzQyuL6WoLYK0Kh/Sa31JrfYmWYWf + wJekCj/iS31VI1jJCk4oU8pDB6klolMrwsmpiaewMZmChmRKWjIYHu9g+9H17Di6gRWbeukaqqJzoIKe + 0RqWjnex79gmrj+9l3v+eYpHn72dF19/iLP/eoqP//0qn37xBp9/dZaPPzvDO++/yJmzz/Dya0/y6OP3 + csutJzl4eCf7ZV5WsHu/xIodE3L9R6msLSM6LgIvXzcCQ/xIz0qhtr6c0tI8wsMDsLI2xsBgARYyz1pr + DLGwNsDUXCk/ri1z8SLMZH41t9QR6KqG70w2sLFqBKl/qwaTAj2MLmUDW2n+ZgC7aAhXDWC5XwFOFAY6 + UhEkPDnUjt4EN0YSXViW6MjKeHvWxtqKXraV1p6VwieXyvaI8JJB4bB9MYrpa02n8J/OqBl0RVvRHWOt + GsOKATyQLHxc0J9kK+e2oTPWnPZo0fsxprQI52iIUtb/NaFWuEddjGzHSCvavkq0apXfPJp9F9KrVFyJ + NGFDsi0HKgO4oTOee5fl8NSWSl472MK/TvXy3g2DnDnRwwsHOrh1WR4b5P53RZpSI9y5wkObUreFlElb + 7q1Lua8+ZX6GFImWLA4xpSTcXFojCkV/lwo3rBLUBSygIXA+jcIdVQh/VMtAeytrAS+kXbhtn3zOPrkW + rRGWVAXK84W/Zwtnz/IV3irI8Nch01ebHD8dcgUF/rrkCZTtHHksS/htkudc4hRjyVmLcNHmsV6zRVvO + ISV0HpnCvQqTDKjMtaC+xJbOOlfhLF5017nQUmZNU5ERnRWmDDVYsbzDjtU9jqwbcGdiyJOtojWnl/qz + oduNQTmmLl2bksR5El/ls2eZkp2kT2zYQtEliwiXa62YvxHCmdNTbMhKtSNdNFCa6KPkhL+QqrQxFqK7 + TYkTzhgbrk+ikhwk90ZBkiAx1Jj4QNHhPosI81xAhEAxg1UDOOSSASzXKyfSmjTR2JFu2gTaXoW3hcx1 + looBPJ9w54VEuGgT6TqT/asYvnHeJv+jARzipK0i1GUxIS6K+WsgMJTXNiLMw4hQaUPVss4G+Dvr4e2o + i6fy/abdQnXpO3fNAmmVZfBEsynLUtgvwstBB0/lOEelFTjp4uNqiI+H6CgPU3zdJUZ4WP3NAJ4xf68Y + wJfKP1taK8as/n/A9BLUcu0WJljZWMrYtJJjLWSfOWayT4FiDiuln9XvLj2c8fH1xC/QG/8AT5mrvVT4 + +Xvg5u6AjUZZ6u7Sd62memppX2srE+w05jg52qqwd7BCKRutHGtiuhhDQ6XCwGJMLA3VhBd/Hw0J4U6U + p3rSluXFSJEPa0RvbZI5eGuNH9urvNkpMWZHkTVT2QZsTF7A+oTZTCRdzRbB5virmIydxaHMRdxWbsWD + Ta7cL7ih1JzrSky5uVrDTXW23Fhnw81NdtzYZM+1dfYclXNOZdiwSjTHskhdGeOiWzKt2VnowKEKJ/YU + mrA3X48TFYbc1WbFE4OOPDfswEtjDrw65siLsv3ckBOPDznzYL8Tt3c6ck29FTuKjVidqc+gaLnWCH2q + /bSpEN1ZYD+bdOOrSFikRYquFoUWc6lx1qfB05ha0blFLouINZtFiMT3SOtZRDnMIkbGZoKrHO99NWm+ + 80j2nE2088yPNiKdtEiUuF0ic1dPoRuranxZW+3JuLz39eUObJbYfLQrkDuWxwk/ESwN5sFhX/455CWf + xYMXRnx4bXkIZ8cTeG9LNl8cqOWLw818dqyLL06N8OVNa/nstk18cuc2PrxvNx8+fpzPX/0HX7z7CB+/ + 8xjvn32Ud88+zr/OPsEH7z7Fpx+9yBefvcpXn7/Kt1+9xocfPM09dx5h+ZJmUpIC8fWyVUtAOzlYi5a3 + wFqBWjHTWDWAZ8zfxegZ6Qh0JXbMrANs7WiGnav09wBXFW6+9rj62Kmlnx3cLVUD2NbFXPiMMdb2BipU + A1hgI/zJ0k4XS1tdNQPY09tS+rMNfgEagoMcCA92Ij7UTeYHdzKC3SkI86UmIZzWjHh6slPoz0tXzV/V + AM77ywBuSY6jPiFWNYDLIkNkHg+iOCxYEEShgtBA8qXNDwtUt4tDAqmNjKQxMoqWiGhao2LpiI2nMy6B + joREWhISaEyIpz4xjjpBfVI8DdI2CVoS42lLTlDRquyLjxT9HkilnxvlrvbUOTvQ6enKUIAvo/J6w3Gh + DCVFM6IawIKUWMYES1IVAzhR2kTVAB5OTrxkACfTk5ZCV0Ya7fL5WkUjtijaV6l+VV3B+rFhrjuyn6cf + f4i3zr7Ku++d5YNP3uPH337i4n8xgI8du4ahwRFq6xrpGxhh5+79HDh8jNXjG2lo7qS+uUN4yBp27j3A + 9I5dVFbXEhwaSmR0tGoA33PPPXz44Yf8fl4xXS/w67mf+eTTD3jyqUf5x5238/DDD/Lqqy/xwQfvzRjA + F/5nA/iW07fT1d9HfEoKoRERwg8L2Lx1G8+8+CJfff//wQC+qBjAf5m/Mwaw4PxvavbzmTOvc+ONN7Bq + 1SqaGhporK6kp6letHk3O1aOsGOsm2XVObQmBQj/cGdZVjDHOwt5dH0HZ/aM8vHJNXx96wa+Oz0uWMP3 + t6/gx9uX8+NtY3x/fR/fHW/j813lfLa9kC93FPDt7kLRg/l8ub2Ib0QTfbu7ge92t/LxRC2vLy3muYEC + Hu7K43RrNicbMthfn8W2+mzW1WYzWpZKV2EydVlx5McFk6NkBqfF0FSYRmN+KhUpUeRH+pMb6o2yJnZG + kDfRSgVbK0scTc1wtLDC0doWZzsnGc/CI339VONXaRNjhDM3t7JxfD1a7jKpXYFqAOtdMoANVQM4ONAY + P28d9UtLX/d5MxnAQkwihKRESyCPE/IVr5i+wQbqwv4KkoMMSA0QBOpJu1igQ0rAImkXkSOEoFyIQm2K + HXVJdlQIyauMMKImwpD6CJmMYw3pTDRSM1t7UozpFIJTH7mAytC5lIfMoSJkLvXKF28pJgwo5Z/LnVhZ + 6Uxvtgk1MXNoSFhAa6ouHVn69BeZMVxhyWi1NSNVFgLZrrwMM5bUWLCyUckEtmCsxlCO1aO/VIeBYm0G + SwUlC2V7IUPFCxgp0Wa4dCFj5YtYWqnLqloDxhtN2NhkxsZmUzYI1reasrbVkOUt+ixv1mVF62LWdRqw + uduEacUA7rZif4e1um7jyV4JRJ127Kk2ZqJIm6UZVzGQOouhnFkskddZWavP6jprlpW6MpzrKYPfla4U + F1rjFTJuTqG3AQUeQhRdZ1PgqUVlsBZNcbPpzVzMQJaxwIbBDBfaYx2pD7KmxtdEyKkBXQFGrIyzYX+l + H48OpfLx2iK+21TCJxvyeWllGjd3BrGp2IamyHkkCuH0tZuFm51i/M7HRUiQ0iprH6gGsNOMAezrYUCQ + nD800EJgpmYCBweaEuhvjJf0JXc3xfgVOCtrA5pJK8TD3gSNtfKLVCE66ho2igFsKKRDRIlAMYAVKL9Y + U36RZm1jrJZNUcxfxQhWDGBLETaXjd8Z81fOZzOT/asYwEZmeiKOTP/DAL4MWwcb7Jw0ODho1OxfxfxV + oJi/rm6OavkUpSSKqwRDdzdb3FyFvDlbq/Bwt8dfJvaQYC8RZD6EhUkb5q0awMrfiuGrGsBJYSoUQ9jP + z0k1gO3k/V2GrbxPWyFi9goRs7fG1dEGL3kvgd4yYH1c1CxgH3ltXyGQPu7WAisJ0NZyre3VoBgd7kZM + mIsQdUG4M3ERzqTEepKZ4k9eZgiFOWFkpwarBnBClDeZiWFkJkWSGhspzwkh1NdHxrQD3i4W+LsYEOai + K2RGm1S3+eS6zqFKCE13iBYT2Qu5vd+W16a9+ebGAH6/ywvutefiPZZcuNOGi7fb8fvNDpy/wZHzJ535 + bZ8d305Y8vkKAz4a1pXWkB8mLfhlvxPnTgVw4dZ4frk5iy+PFfD6pmxurvMXcmjGGplDxsOtWRMmQtLP + mkE3c4acZWwKsVCw1M2GFZ42LPOQfU4m9Gt0aDe9ihYTLZoFTaZadNposUoE2cEsa+4UMfTSqjDObgrl + g63hfDIdzofbAnlniztnNtjy8rgVz6624KnVttw/YsNNMpaPlZurJvCQnKPcSos0A4G5EDtbuS5OhiS7 + mhEn/TfU1pQA6ZP+VrqCRQSaaxNsNpc0l4VCFMzY1eXH43sT+OTeZL57Ioofnwnml1cD+OOjQPjOH37y + 5I9fPLnwi+z7Sfb94AffyLV5L4AvHnfntes1PLDZhCOdOqzJmUNH1NUieOdS4SdkNVQpS2VFZrAJqaHm + pIbZkBFpT0aUK0nSJyJFtPu5Sj91MJVWxIiTEeE+ZpSkebJpOI97jo3w0l0bePmuddx7uJeDy4sYLfSh + MkAEqJ0WNUJmR6O02Fe1iIfHbXjvlAc/Pe7PxbPyPj+Re/+VO39+J/jJlYu/OvHnOXv+PC/94bwDF2X7 + j3O2XPhNw8XfrOVxCy78YML5Lww597E+599bzLm3dPntjcWcf02P31814vwrZvz+sjXnn9Xw06O2fHu/ + LZ/fZcvbN9rxzx2WXLfalImWRTQnzyI/SIi21xySvSTm+JkR5WVIsIeuxKXFBHvpEeJjSESAiRBGKxKV + XxCHzJSAVjKAFQM42l/EqPSxjGhbcmIcKEx0okiglJXuq4pkpE5IV208/eUR9JSE0lMcSluuL5UJDhRF + WglZtKRArr3SFsp58kSsqlnA4RaqcFUN4BBz4i4ZwCFei4j2W0xisA5p4QupSNOnq8Sc1U1ObOvzYveg + F3uF6O8ZkO0+D3b3uLO7y409PS7s73XjQK87B3tlf7sDW5WM3loLdjTYsLfDmUM9bhzt8+SIPL6/05ld + jRqmRUBN12nYJmJqUjBRa8eWOke2Nnsw3erJlgY31pbbMVZgzZIiGU9lIkRqPdjc6COPeTHd6M6hDm8O + d8j7kPNsr7FUS0Hva9eopahvWeXJbWvd1TWAb13rwI2rrLlptZVqAt+9xVk1gO+ZdOLeqcsGsBuP7HLl + 8T3uPH1AxuMxP5475MUj2x14aJuNwIp7tphy76SletwLR0N45lCYnMuHo8MaNjYsZknxPAYKFtCvlILO + N6I/11TIvobRIkeWlnuyuj6AdS3hrG+JYKjIje5se3pyHWnPtqNdWZ83xZqGJEvVAG7PdJA47svSqiAG + i71pkb+VLF7FyFUN4MS/UJkscTDXjTYZGy157tSk2KploS9Debwy2ZpKOX9Vig11mfY05jpRLecskv1p + kUYEKZm/igHsqZi/82YMYM95+HjOwVf+9hfhGSocKiJYj4RQA7LjrChMsqUs1YnSNEe15HFOpDlpwUYk + C5dK8NUm3kcxgUWIes0l1nsOKYE6FMZZUp3hTHm6MwVxthTH21OT4UFdjo8QSDuivXXxcZgt72MRkTJv + xEVpiFf2x2gICRWBL7zAQ8aRg+N87OzmYi8xXjWAL63vq0DJ9PXxMZG4Z6Oav0opaKX19jbC1nY+JjIH + W1ldLc9TsoCFS7pL/Bcx5+ZuKvHUUCD7fAzwkdfy8tWTWLsAT7dZBMlniBUOmR1tQWm8fF7hlfGOVxNj + q0W8w1UkucwmTfhnhnDPHP+F5MrnLQiUuUp4ZZbPfKrjzekt8Zbx60d7hTuNpS7UlgiKnajJs6Mx25a2 + dBu6kywYECE+EmnA8nA9VocqZY4XsVYxfX0XsMp7Pmv9FrLOfxHrArTZII9tizFiOs6YLXGGbEk0ZkOy + KauTjRmO1aNHeGhrxAKaw+bRGDibBp9ZtPrOoSdImyHVADZWDeDRaEuGoqzoibSUedxchKUFTQpiLIXL + WlATZkZliLFwOFNqZf5oiNTQEG5LfZiGJml749xYmeHP5oIQthcGsVXmqqlUR3bF23JC5qHrZU474bmY + Y3L/TvoacqPMedeHWHFK5sBjQRbs8zXiYLC5agDflO7JiThHdisGsLsum9x01HLQu0MtOChz4n7pF9uk + f2zxM2KTYIvw/83KOsHBhkwG6bI9RJsdwQvYFTyPvYFzOBw8l5NyDU7H63N3ogEPJerzZIoeL2Ua8kqG + AW8KL/9YMYHrPfim1o2zWUa8kfKXAXy2UI+3Kk050+jCCy2B3FHmz74MTzYmebEqNZwNFWWsrqhjrLhC + eHg5gyLaRhrq6KuppC4vi6rMNJrz8+ktK2ekVskOblKN1hk0srxdyQJuZcNAt2oCbx4bZHLZMGv7Ohlr + rWO4sYqR5mpGm2sYkO2++kp668rpa6yku66ChrICqgqzaKooorOxmt6WOrpaaulpb1BN4FVLBli/aozt + W9Zx9MAObjx5mOtPHOTk0b0c3jfN5rXLWSWvO9bRQn9dNU35uTTnZNOel02bIuAzU+nOymQoN48R2TeY + lcFAWqqI/mRGBSvSU5nIzxPksio5maVxCdL/0ticU8C2wlImskoYT81nXXo+GzLzmVBEdGE+k6UFTJYX + sLehijvXLuPsdUf58bG74cwTcPYx/nzzIf584x4uvnUXF965i69fuY63Hpnm0dNLOX2ynaP7Sti3I5P9 + uzM5sCdHkMfBXUXs31HM1g25DHSFq+t3O9pejdnfDGA9xQA210fH3FCFYv7+hwFsoatCz0JPWn0WC4dX + oJaEttTB0GwhJubzsbJegEYzH42tMhfNw9VJ5lHP2WQniDasc5f7GM7BjXGc2BTB8XFfjqx05sBSDQfG + TDg0Zsh145bcs9WJJ/b68aySASzcVTGAH1xmxRMrbHlD4ssH28P4bFc0n+2J5uPdwg3/ZgB/Ivhihzvf + 7RLuI+c4dyiCc4fj+f5IAl8KPj0s3O5wEp8eTOWLgyl8dTCBbw9E89X2AL7e6sl3U278POXCBTmPagAr + 5Z8vGb+XW8UAPrfdhd93KJnCLpzf6coFJet3pwc/T7vyo7JG8C5Pzss+ZT1gJQv4crbvXwawl4rf93ir + uLDXZ8YAPuDzH7hsAP95ZMYA5pBiAstjSsbwbn95zVB5vUj+PRHDe+tieXlJBE8NRvLkQBRPDMXy+HA8 + T4wk8OLKVN7cmMe7W0v4cHulXMMy3ttW8hemS/hgupz3dsh+wbvby3l7uox3tpeoeG93OR/sKeed6QLe + 2pLFaxtSeGVdvCBO+HgMr6yN4qU14by8LpoXN8i+Tem8uDmHlybzeWp9Jo+sTuXx8Qyem8jnxclCXtyi + ZBMXqHhJtl+eLOGFiWI5No/H1mbyz1XpPKSav9KuyVBx/6o07l6axB2jiYJkTo+lcsuSLG5amse1o/ns + bE9nTWUsAyVREj9CKRYdlZsRIroqgLRE3ytITfAhMdqd6FAn0b0a0WWWeLsZ4u6sK+NiPg4283CS/usq + MVWBu/M8vERbebrOx1nimp3EN41oDAV2Gi0cBI7Cv53sBU4zcHTWwsXtKjwlrngHzcc7QNrAq/AKmoVP + 6CzC4kSnZ+qRW2JFaa0jVU1uVDW7U93iNoNmV4G77PektsWPvpEk1WTtH82hqT2R+uZkegYKWTXeyMTW + HpatqqemMYlk0QphkbYESwzxEz3vH2RGTJwTGZm+1NYmMDRcwoaNLUxsbmdyqpMdO3vZu3+Yo0eWcsP1 + 49xww2qOHBli27ZG1qwtpqlVrmGBAwUSkxuaQhiV671+QzlbpmrZta+TfYd62L67jemdLew7KOc62MPk + 9iZWyzGKITy8Ipf+pVl0j6bTOpBEbXsklS2htA6mMLg6n9WTNWzc3cLoxlLKOyPIrfcnvzmQnEZ/MlUE + ktkUREZDICk1/sSVeqqZwQnlcg8r/EmqkHtbGUR2TTj59THk1cVQJNdmaG0LO46Ns1MwOt5KXUcu5Q2p + FNckUNWSyciqRtZvHWT3kbWcuHGaf9x3nMefvo3X33qU9z58js++eINP/v0673/0Mm+98xxn3nyOV19/ + iieffoC7772Zu+6/hTvuuYlbbj/FDbeckM+9nRVrRqltqiCvKIOSijya22rpH2ijQrbDwnywtjbAyGi+ + tHpYa/QxFw1qaDIXAyUDXVoT8wVXYGaui6m5nvodiomZtDIPXzaATS0VA3ixuq1kI9qJpnVztMBPMYA9 + 7IVnyv0WLZkXKHw2QENFkDWdcc70qSWe7RiN07As1prlMdbSahiLsWE42ooB4Tu9wm+6Vb5jQXuEGW3h + M2gXLtsp+3qE1/bK8/uE6/YrBrAKZSk4K7oTLOlMkOcJp60NN6Q6XJ+qCAOqFOM3Uo9K4W2lAfMp876a + ZuF/fcKfl0WZsjHNgQO1wVzfm8Cdy7J4eFMJj09X8Nz+Wp470Mhju2p5cKqSEwPJrMp3pS3CiCrvRZQp + y6p5LKRMtJqCEi9dioRL5QhyfQ0oDDFSS0ArBnC5cE/lh9LNYcL9wnRpDdaeQZAOTcIZG/0W0SLctE+u + wRLh8GMpznQJx64Tblfqq0+evF62zyIyhb9n+gp/lTZH2jxBvq+8nr+8rmxn+ynm8CLRuvNJFK0Q63kV + 8b6zSZHXSg5dRFqEtkC4cIIBpVnm1BTa0lrtSke9O02i7ypzTShN16YuV4euCiOGGixY2mrDyk4H1vW5 + snlEMYF92STbS+vkmhcb0pinR32BCfXF1hRlmpAYpUOUvFaEfN6wYF2ilB8xZzpK3HcgPdGGlHgrkgQz + BrANqcLdk4XPJkaaERtqREyo/kyFyEvmr4pQExJEyyiaOMxrIZHC6WPlsypZwamhxmReMoCzlKVwfBYT + 6jiHAM0sfC218JN58i8DeBFRbosFigGsZAAbkuAnut/nLwM43EWbYMeFKpS1gkOc9Ql3MyLC04Rwb1PC + pA3zNCZUdIq/aBMfRz087XVws1mIi/APFyvhHTbzcdPMU6EkwnjYLcJLjvFw0JG/F6nJMIoZ7C36Zsb8 + NZ8xgN0VA3im/PPfDWBnVyXT1hJl7V/l+0vl+83/CWq2vmr0KhULLbBQDGDZVtb8vQxLG3P1+0vl+0pl + 2Tp/f28CAr0IDPZWoZjB7h6O8nrWf5nAZgaqAWxlaYzG2lTGvJXoNRvV/FWgrBGsfO+qbzBTYl4x/pQy + 0t6eGmJCnESbeojWdaVRtGl3rgsryr3ZVO3HlGBbpQfbijRMZik6ScnWXcBk2jymUuayJeFq1QA+mKHN + LWUW3F3nwO1VGq4vNuGGcjPuaHLgznZnTrc5cmurHacarNhXasJUpowjpdKl33x6AhbKPGPKuGj6bSWu + 7K1yZ1epYjjrsCd/Ibc1mvHkoBMvjTjy+hIH3lzqxKsj9rwwZM/j/fbc227FDbXGHCxZzJbshaxI0RY9 + qEej6JoSl7nk2c4m01yL5MUz5m+O0dU0OBmoy8ENhduLrjOn1l3Gnuks4g21SJd4nS0xOsddi0LvWTI/ + zqdS5oTiQBmb7rOJd55FrPNVJLjLuUMNac1wYHmlL+PVPqJr3NhU7szWameOtPlw80AQdw76cW+/Gw/3 + OvPMoAuvDrvxzqgXHywL4ONVkXy2LpEfdhTw/Z5SvtpTwWe7q/nkQCsfHuvlo1NLef+WtXz4wC4+f/4G + /n3mLt595U7eePEfnHnpLs68eA9vvXI//3rzET7815N8/P6TfPbRM/zr7CPccdt+RgZriYv2Ej1uJVzb + Ss0AVipjqtnnNpZqf1MzgI31JNZcgqk+ZtbSpyRumGuUTGCJH8o6wMpyh772l+CAi7L27yUD2NZR4oyz + ySWYYu+iGMAGcg4dLDSLcPO2wMvXCh9fa3z9bAgKsCcsyJG4UDdSwjzJCfemOCqAuqQoOjIT6c9NZ+hS + 9q+CQdGE/80AjoumLEJ4XJhiAAdRFBpIQVgg+aEB5ApyQvzJE+QH+1MeFkp1WJho70jR4FE0RkaLVo+h + MUYxkmOoiommIjaKckGFnLcqPpoaaevjYmiQ12qIj6UuLorKyGCKgzwp8nSmxNmOamcH2j09GAgMkL4U + zEBsGAOJUQylxDCcGsdwimICxzGWGq8av6PJCSqG/sMATpbPlapqxlb5jC3ZGXQW54sWrmBiyQg3HzvI + c48/xJuvv8jbZ8/wwUfv8uMvP6CUaVbMV8WMfeWV1zh29BpGhsdoampheGSp8LbDHD1+Les2bFZLQCsG + sJINvPvAYXbu3ktVTS0BQUGEhMt7Hhjgzjvv5L333rtiAP927ic++fR9Hn/iYW6//Ta1zLJiAH/44fvq + a/5xQTFp/1Tfwzl5zmUD+OZbb6Otq5uo+AT8g4Vf5+YyMbWVp55/ni/leecuXvzLAJbnK/jfDOCZ8s// + aQD/fuEc5879wldff8ULL7zAieMnGBsZpbq8nMqiAtqqyljZ1cy2sV62D7fJ+MygLdGbtignlmf4ck17 + No+vbeS16W7ePzjE19ev4NublvHdTWOCIX64aYCfbuzlp5Md/HCknq92FvHltmy+3pbBt9PpfDWZytdT + WXwvuvnHXVX8tKuBb4TzfjRewdvLy3h5rJSnRst4YLiMO4YquW6wkgN9wovbCllRn6uawBXJYRTHBVGb + GUOr/N2UnyhzcDhFkT4UhXtJfwyUbeGw3s742Vjgam6Ki6UlTtYanDR2eLq4ESHXVzF+46Uv52ZmM9Tb + z/TmSbS8fIy5DE8vI7y8DFT4+xsRIqQ/JGDGAFbMXz+P+eoawGH+OkT6K+UE9YgJ0CU2cLEawK9AHkuS + AK8gWYL7DLRJ8l1Iuky2BdFmVKco653ZUSgTY6EQuLIQhdjpUB+pK4NNl5b4xbQKGmMWyf45VITOpTJ8 + PtWRC2kS0tOTbcVwkb3cMBfW1LoxUmRFc/Ii6uLn05S0SCZbXXryjRkst2C40lJgrhrAIxXSqjBVs4CX + 11uyrM5MHtNnsEyIW8ki1QQeLteZMYEvQSkNrZaHlv1LqvRYWW/IGsX4bbNgY7slGxR0mDPeYcqqdiPV + /F3ZspgNnYZs7TFjZ68Vu7ssOSDHHe/UcEO/Mzf2OnKi1Yo9NQZMlCxgdcEcVhbPYVXFQvlMuqyuNWVZ + iS0jec4MZbvQn+kmk4C7kGIbiryNyHNfTKbTHLJFIBb4aMk1koAVq01TnD5NsRa0xDnQFG1PTbAllX5G + VHvr0xFkzLJ4awmcXtzVGcPZlbl8vqGYDzcU8OKqDG7qCGKTBPG2qIWkuGrhIyLVzW7G+P07VDKkloCe + MYCD/cxUA1g1f/1NCBL4+xqqfUnJKldMYCUjyFMIkqtM/I52RiJ8Z8iIQnQuG8DGJvqXTGBdFeraFUKI + lGxfhTQp5q9iBKvrZfxvBrDFzFoFFkJo/jcDWFn719XV8YoBrGQCO8mErfwiToGzBENXFxsVivmrtF6e + Dv9hACslnhUoBvDlLOC/G8AxMYEEBrqJoJcgqJi+f4NGAqudvB8XRxvcnW1lnDkRFiDnCfSQ8eagGsB+ + nvZqGWhfIZR+XhIULxnAUWGuRIc6EyXELCrEgegwR/ULCaXsc0F2GCV5keRlhKoGcFy4p1oCWjGA0+Mj + hdxHEB7gL6/hiK8E/UA3E0LkHkW5Chl3XUiayzwKvWbTFqzFeNYCbui24oWtHnx+vQ+/3e0BDzvCQ9Zc + fNCWP++zF7jy5z3u/HmHJ+ePO/D9tCVfrTPi4zEdPl22mG82m/HTPgd+PenH+Vvi+O2WbH64toT3tuZz + T3MIexMtmQozZjrKlq2RjmwMtGWlhwWr3CxZ627NuGCjt4bNfrZM+FmzwcOM1U56LLWZw6i1FiOCISFk + Kz2uYofMG7dWufDkcBDvb4vii/3hfHcsip+uieLHk2F8c9yXzw458+E+e97dbce7e1x4eYszD49quKVZ + xmOuAUuCZlMr58vQ0yLVWCF788kQkp/maUa8mxnhTmYEO5gTLH0yxFb+lv4YZbOYHOnv7cmWbG/z5oHp + KD64M5FvHovmp+fC+PVMEL9/oBi9Xvz5sxsXf3Xhwjkv/vjVG36Sa/qDD3zqx88vefLJ3S68eMCWW8YM + 2FIym+5oLap9taiRubQx0lrIiC15IpLSQy3UTNacGCfSI51EXDkT6mOHl7w/Vxljnk4yrzuK8PEzpzzL + h6kVJdx/ahkv3beJF+9exz/2dzI9lEVXhiulIk7zZbxXOWrRLfPJxuSrubndkBe3OfD57d6ce8GPP973 + 4uLnbvzxrQcXf3KR9+7AH+fsuChQ2is4r5F9Gv781Yo/fjTj/JfGnP9Un98/FLyjw69vLeK3Mzr89rq+ + wJhzr5pz/iUrfn3Ghp8eteH7hzV8cb8DZ6635Z/7bDixyoil5bMpj9QizVuLRLf5xHvqE+aqi7/LQvxc + tfEXQRgkQjDM31g1fhPCrVUo2cGRfsYi+gwkVpmRItcrK8aRgnhnylLdKBc05fszVBenGsCDVbH0loRJ + 8A2mPS+ApkxvqpIcKYmReTfyP5Ev90IxgdVfLV8ygFNCzYmVuKkYwGESO5UM4KQQXTIjdShLkbgmcWlJ + tYZNbc5s7/Vkd58nu3q92NnjwY5ON7a3uzLd7sTODmd2d4rQkf3bWx2ZqLFik8SxqXoNu9tdONTnxTER + DUf7fTjQ5cGeZke214s4qrOTY+yYrLVnotZBnufElgZXgTsbRHCsKNEwlCuxMF/D8lIn1la7s7HWW471 + ZFuDJ4c7/Tna6cOeent21Fqzp8mWg50OnBiUmLXcnZtXuXHLaiduXGnLdcstuGGlJbeO26mln5U1gBXz + 975tTqoB/PAOF4ETj+505om9rrxwyIvnDrrz2E57Ht2hkdaah7aa8PA2c57cJ+PweBAvHg/l4Z1+XL/S + Qc3+Xlm+gMH8eQKJw/kGDOYaz7z/QntGi0WEVnmztiGY8aawKwZwV46DEGVb2pW1ef/DAHZkpMyP5TUh + qgHcmuWolm+ulmMqEs2vmL9lgvIkaxpzXFUDuDnPXUiXrZoVfBnlydbqcSVybgUVaRqqM+woTbUhW4Rq + fLD0TbdLa/96zyPQZ75qACsI9F1AsAjFEDkmPGSxELTFJIrQzYw1p0i4UVWmC+XpjhRJrM6JNCVDeJKy + rEai3yLi5bkK4nzmEO83h8xwXcrkvdRmKQawIzlRluoPEhQTuDTFmXSZJ0LdFuBhexUB7tqqARwTYU1c + rC0xggjZVn7s5y3jw8VlkZr9aycxXoGyrZjACi6XgQ7wtyIsVMkedpBWI88TUSfHmpvPwvqSAays+esl + c6W3jxXuHuZXDGB3L328/eQxX33VAPaSaxPqt4AU+YwlKfY0ZLlRFm1JqvDNGJl/kxyvJsNjHrm+2hQG + yvgJ06c83JCKcCPZNiDXf6FqAHcVutNd7kVLmQu1wgurpG9U5Mn9yrKmPtOa9gxr+lKtGY43Y0mMMSuj + DBmP0GeDjMsN/tqs853PWrkv64WnbhROuzFgEZsCF7Et0pDpaEOmYgzZEm/EhkQT1QAeitenO1Z4asR8 + EYpzqQ28mhovLZp8ZtMVuJDBUH3VAF4WZa6awCNRVgzIfemOtqBT9rUImmV/s3zW+nDhw8r6wIFG1Iaa + yd/SV8OsqBfe1hhiSWeEHcuSPNicG8COwgCms2WcpjmwJ16jGsDXynx33HMxRz101e1bZM67UTjiyVBL + DvmbsstTj30BJpyMd+TGFDfVAN4TZM5WuRdTgl0yPx6OtuOYPH4wSsPOEJljZL7c7GvEZjnfpgBDuS5y + naTPTfjNlf2zmfS7im0Sj/YEXMXR0HncGKPD7XGLuT9pMY/JHPdcpgHPpS3mRcEbuaZ8UunIFzUunM0x + 5vX0xZzJkP05i3mrUJe3yo15o96JF1sCuLs6mKN5fkwke7EiOYS1pcWsKK8Rrl9GX1EJveVl9NdU01lR + RlVWhszdKTTk5NBVWspQTQ0jjfUMN11GHSNNtSxpa2B1dxvjvR2M93UyPtDNso5mBhuq6K2W89WW019X + Qa8I6a7qcjpFFHbWlNNeVUJjWSE1xbk0VRXTUV9Je2MVrfUVKroUA7mvnZVj/aoJvG3zWvbt3MKBXVPs + 27GFnVMbGF82xBI5ZrC1gW45f01WOjUi4hsy02jISKEpPUXmpAx6Rfwq6zt1Z6TRmZJET1ISfUkJjKUm + M56bwzrBspRkxhITWZWWyca8QjYXlLI+s4TVaQWsEazNLGBjQREbigrZVCLbpQVsq62Q+XoJr1x7hC// + eSc/Pf8AP754Lz88/w++e+42vn3+Fr595RY+fvYEL9+/lXuuH+G6w83s31nCrq1Z7NiaPgMRsTsmc5me + yGP9ynQ6mgJJTbDE3mbGAFZMWwNz7UsG8Iz5q0DZVgxgfdXw1ZXHdS4dM2MUK+avvqViABupBrGx+SLV + TLay1kZjq42N/QLsHBbgJHzU01Pmu2g9akrtWN4fwPbxaPatD2XPaomdyyT2jYrGGjFh34ghJ1dbcucW + J57eF8CL+4N4QeLJU5tceWDMnEeWWPHyenfemQrkox2RfLI7ko92h/03A/jf2934Zocb3+/25Zf9Yfxy + OI5vj8bx+dFEPj6eLEjls2NZfHE0i6+PpPKdkh0s51DKQCsG8E+TzlzY7sEf0+5XTN+fNjuo2woUU/jX + rU6c2ybb0878tt2Fc/Kav0678tM2F9UAPrfLQ8V/NYBV8/f/YADPmMBKhq/3FQP4j4PCMwVXDODDvjM4 + KNgfwMW9ofy2O5qvtsXwwaZoXl0RzjOjETwxHMkTQ9E8MhjFw/3y96hi0KbyxqYc3p4s5N1tBXId869g + 5u8C3pK+8uZkDm/K9tnpIt7ZUcK7u0Rn7qvgkwMVfLhHuP/2PN7aks6ZjUmCRF7fEMeZdfLa66LU7Vc2 + JfLqlixemcrjlW2FPCOv+dh4Jk+uz+aFySJe3lbGq1dQyplt5bwxXcGrWyt4YXMxT2/Ml2NzeXzDJWzK + U/Ho+hweXJPOPctTuGtJMneMJXPbknRuWZrDTcsKODaUz46OLDa2ZjLakkVPUzZtdZk0VadSX570NyRS + VxZPZWEsxTnh5KcHkBrrRqLExdhwDTGh1kTLXBotc7qKMBNpDQkP1BMuoC2abg7ewg8U+HjMFn03W/YJ + XxDd5Sex3VdiiY8gIGAeIeESt2MXEyPaJjZROGWCNnEp2mQXGFFSZU1NkxPNnZ509PrR2e9H14ACX9lW + 4E9HfxA9g+EsX53J2o0lrFhdTN9QJt392Ywtq2Dj5na27Rhg5ZpG6hqTSEn3JDLalrAIGwKFG/gFGhMq + PCE+wYnCwiAamxLpH8hlaDif4dECxpYWsmJVGRs31rJrZwd79nSydVs94+uKGBlNobbBj1yJy6WV7nR1 + RzE+XsTOnU0cPdbHTTev5LbTa7nhphXcfPMq7rlnC/c+sJXb7ljP0RMj7D/Uw459bWyV4zdN1bBqYxkj + q3IZWJrBkjX5jG+uYHJXE9sPdrJ6qoqG/lhK24Mp7wqjuC2I/LbAGbSHkNcWTHZzEKm1PiRVeUnrS1pd + AOmCrLpg8hpCKWhS1hmOoqQtgf7VtWw5MKpicFUdVS2plNbHU1Alx1RFU92aRvtAEaOr6lm7uZtd+1Zw + 6sZp7n3wJE8+eztvvP0477z3rOA53jj7NG+8+azgGV478xTPv/RPnhU8/cI/eeq5h3jimQe44+4b2XNw + K2vWL2FsRR/LVg+yfuMyNm5aRnt7FYmJwTgpZTQttLG108PKRjF4F6BvPAs9Jevc5CqMzeYI5mJkOhdj + kwUYGWtLq4OxqY4cuxilVLRiAisGsLFiEEurfJ9ib2+Ku5Mlfi7WhHraE+vrQKq/A1n+tuT6WVHkb0FL + jAOdcXb0xtowEGPFsPCZEYFq/Aq/6Y+0oEcxeSNM1WUv2iLMaA0zvQLl7w55fCYL2IbeRBvVBB4Q7qeg + P0VDX7INPcJnOxOtqBa+VyEcrVxQFrpYsIgS4VeFPldT5K5Fg/BqxQBeGmPGBuH2++pDONmXwK3LM7h7 + QwH3bC4QPVLA6Y05XL8qXfRKGrvaI1ia40ibspaw8JoK0WgVPtL6yvmlLfbUJtdlAenOC8hwUzJ0F1MY + oK+WgK4Wnt4YoUdHtAFdwgu7ZFuFcPf2UD3aQmS/cNNh4WbL0pxYKvy7L9ZOeJxoC+G8BV6LyPbSJst7 + BooZrCBXtLcCxfz9uwGcLrw31XchqQELRVvKY7HGZAkyY/RIjZZj4vQoTDelUrRcY6UrzdUu1JVqKMkx + Ij95vvD/udTlLKS1eDF9NcaMNluxstOedX3ObB5yZ1OfC6tb7Birt6K3yoK2cktaKoU3F1iSJnNNTJjM + O6G6RIhGiZbPmJ0u/UHuU0qcNUkxorFjLUiMs1SRHCuQvpAk3DYuXDRGyKUlAv9mAKcI11VM4Fi5nhHK + UoKXs3+DDeTzmaoaOjfKmkyZL+O8dAi0nYW/jZaKAJtZBNvNvVQCeiGRLjpEK99ZeegTIxw3zseQeB9l + HWBjdVmcMDkmVMn+VaEjzzEgylPel6+yZJYl4V5mBLsbE+hiiI/TYrzsF+NuKzrHagHOlvMFcy8ZwAv+ + +s7zvxjAbnayT7ZVA9jdTDV//zKAbXB316hw81CqDNoJj7G+ksCijkEz/Svfcf4dlw1gM0szFTNL1v2n + AayWiLazVr+vVBJXfHw81Kzfy/DxdVMNYKW8s8bOXDiVyRXz18ZKScAxFZhjL+f4TwNYH32DxRgZyfuT + 96CUmnZzsyY8SO59nBt5cQ7kyX0ui7egN9+FNVXC12v8maz0YqrQjqlsMyZSdZlMWcTWdG22pc5jKnE2 + W+Ou5nCWLjeXWXBHlUY1gq8rMuLGCsUAtueuTifu7HLhdIcDJ5Vlp/L0WBKpS5PrXCrtZ1HjOpvuMENG + ZX5YJ687Ve7B9gpHNueIjsmcx7WVBjzWZ8/LI/a8MWbL20vteX3UlpcG7XiyR8PdjaKTCuazPf0qxhNm + yZxxFb2hC9Ss/XzpZ1kWWmQYaZGup0WOzKXllgsY9LNmfYInW9L9RPu50BegR4X1LArNtahx1qLFZxZt + ov26wuczEGdAf4KZaEJDikVLZrjOIcllLsmCbJlbamV8LCn0ZLzMiw2lMvZKndkh4/VYszu39PpwV78n + 93Xb80inDc/1anijz44P+p35bNCDL8eC+Hp5ON+ujeGrdfH8e30CH21I5v0tuby7vYx39jZw9lgP7/9j + Ix8/dpD3n7mWVx49wbMPC/55rbSneP7RG3jlyVt59bk7OPPCnbz1yj28LNs3XLuN/p4KYqM8cXexUJcj + tLezVH8YYG9vi43GSu1rl9cAVloTM4G5EUoJaDMbY4EhlnbGOEpfV9YDVsxfdz+HKwawUv5ZMYEdXc1x + kvHxF8ywczbG0nYxlhoZUz6WeMs1VwxgBYH+dqoBHB/mTlqEN/lR/qjr/6bGqOWfL5d+/p8MYKUEdGNS + vGoCV0ZHUBqhZAEHq21xRDBFgvyIIPLChSMIFFO4LCyUirAw6sIjVdRHRFEXGUVtdDRV0VGURUdSLOe6 + jJKYcNkXLucPp0opNR0TQXlUGEUhfhI33Mhxk7HiaEeFoz2tXl70BwUxGBEqMSFc+kokA8nRDKbEMiQY + SY5lNCVBxYi8bwX/kwHcnjFjArdlp9NbWshQbSVbRoe56dA+nn7oHs68/DTvvPkqH334L3766Tv++OM8 + Fy78zvfff8/LL7+qloBeukT4RFsnS5au5OChY5y45jo2TkzR1tVPc3uP8MRxdu87yLbtO6moqhYOGERY + ZISaAfx3A/iPi7+rBvDHn7zHo489xOnTt/Lgg/fz6qsv89FHH6gGsGL8XjaAz/+uZAz/znsffMSNN98q + r9VBeEws3gGiJ7Oy1RLQTz73HF98+y2//fEHSvLwDC6q+L8xgH+/8OvfcE5do/jLL79UDeBjR48xMjRM + ZUkJ5fm5tJQXsby9jm3DHWwfaGJFhVzfBA/ao+xZmeHFde0ZPL22jrPbu/jk0ADfnBrlm+sG+e66fr6/ + rpsfT3Xy47Vt/HyimR8PVvPtzgK+mkrjq80Jgji+mojl2y0p/CRa59dd5fy6s4bvJ6v4bE0x768s4e2V + 5by2uppnVlbxz5V13LOyUTRIA4eGq5nsLGWgOJnaFOmTCYE0ZkfTUZREa168uq8s2pvySC9q4gMojfIV + ruBCsK05HjLHu5ib4mxlhaONDd7ubsRFRpKZkkZmsvDXgiLGBofZObkVLT9/cwkWM/DxNUVZ//eyAays + 4xoaaEKAkCI/jwUECmFRyj/PZAALKfDXlUCqZDjpECfbVyCBPf4SEr0XXsICErzmkyxkJlNIUlm8NZUJ + NhSEGqhrXRQF61ISvFAG3wKqwuZTGymImK+uRVsWevWM+RutTV2CkK90MwaLHVhSrtTUd2ddoxcrqxzp + zTOlIUmbJgk8Hdn69BSYMFRheckE/u8G8KgQnqW15oxVK0axEKQSbXqLtWcM4EpdaZXtGQyWL1IxVKEj + x+uxosmI1W1mrOuUAKHCkvUdlox3mbOmy4TV7QasbTNgotuY6T4Ldvdas7fTioPt5hxrt+LmfiduFVzf + reFYqzn7GgyYqtZmo2BD7SLW1WmzSl5nWakpYwU2LCt0YUmBFyO5vrTGOlHmZ0aeuz6ZTgvJcp1Pjuds + igLmUi5CsSJCSHO4BdWRdjJx2VOhZAwGGFEuQagx0ECIuxmbhAAfr/bl0f54XluWwaursnhsaSonmgNY + l6ehPVKHdPer8BPSpZZCsVdKofx3A9jLVfqGpyEh0n8uG8CBvkYECPx8DC71J321TKSnu8lfBrC9gZAP + pRyJIebSYRXzV4GJqYFKQC5nAKtloM0NVANYIU2K+XvZAFb2KcbvTDmjy2WgJRhJUFIMYBNz/SsloK1t + La6Yv5by998NYDdXJ5VAKWsAK9nADo4a9VdvCmlykGColH5WjODLZrBiAPv5uhIcNFP2+X8zgJOTI4iL + DSYkxBNXVytslUzmv2UAKwawkgGsGMAe8toBXq5ESfCIDPGRbWchk3ZXDGA1A9jDCn8vjVxneyHlzkQo + JTIC7QkLtCUi2I64CBfSE30oyo2gsiiOwuwIIerexIR6CDH3JyMhnPT4CCHqEUQF+xMorxEgRDXYU+6d + hyHhbkL0nWXsivjJdL+a+kAtVmXM53i7GU9OuvLx9Z78fK8bPOEs0MDjdvCYo2x7CLzhYV8u3uzCrwc0 + MtGZ8fkqfT5driMToQk/7LOTidKb326K4vytWfx6fRmf7Sjm8Y5Irkm1ZV+kGQeFXB6IdWFnqCMT3tZs + 9LRis5c1k57WbPezZU+gA3vkc+4UEr9V3u+E9P9NznPZ6HwVG9xnsTNiIdeJeHmk2583NkTy1eFYfjoV + Ia8Xwx93xHDxzgjO3RHIj7d68O2NLnx1nTPfXO/Nx4d9eGXChfsHNJyoMGI8ag4tTlrkKhnAQgZTra4W + QahLiocRcR5mIiSsiBCyE+niJNfLRa6XA8nOliJOrelOs2dLkxenN4Tyxk0xfPpAJN8/HcGvr4Vy7j0/ + Ln7pCT+7zxjA591V8Ktc059k/2de/PGWDz897ssHN3nyz02WHGpZJELyKpoCtAQ6tEdb0xRvKwTGkuww + a3JkjOdEO5IcYkuUjy2B0k/c7Y1wstXH2V4PVwddwgPMqM73Y9c6CTS3rOLlBzbz/F3j3LyzmbWtcTJP + WJPnLERYo0W1vRZt8tmX+GtxIG8hD4xacvagXKeHPPntjCcXPnHn9689uPCDKxeV0s+/2fPnrzO4qED5 + W4WdPG4jx1lw7gsTzn1qyPmPDPn9PT1+fUeHX97S5ac39fj5LWN+PWPOb69Z8dtLNvz2rIbfnrHjpycd + +PR+W16/xZZ7dpqytWuukDq5J/K+kqVvxnvqEOysja8IQh/pB76uiwnwNpK5yET94k1Z5zQ5ylbIoxUx + gYoJLOIwyIKUCLsrBnBFmjuV6R40FwQxXK9k/ybQVxY1Y/7mB9Cc5UNDuic1IuTLE+woi7WnNMZOiJ8t + JdG2FEZrKFDWLBIowjUrwko1gOMkbkb6GkicFGEqc25quD65sfpUphnQkmfCcLkV4432THW6s6NbhEyX + B9Oyva3NlalWZyZbHJlqdmSbYLrdWbYd2FBjxYZKCzbX2bKz3ZWD/b4cHQrkSL8fB7q82N3iwnS9PVvr + HZiqkz5Yp5jGjhJTnNlQ7ci6KmdWldozlm9NX6a5WiVirMCRlWWujFd6yrnd2VrnyeGOII52+rOn3okd + NRr2iDg7KOLsxIAL14+5cuNyF25a7sD1S224dok5p5aZc+NqDbdvUEpBu3PvNjfu3S5jadqFB6YdeXDa + gYe22/PYLkee3e8mcOGJ3fY8uceOp/ZqeGyHGY/vNOf5w668fm0gZ64P49kjQdy12Z19fSaM1yxkqGA2 + Q3kLGBFROJxrxGCOGUP5GoYKHVgqQlDJAl5dL/ew2J2eXHs6cuxoTZc49n8wgJdVBzMgYux/MoDLE0Tc + JvzdAPZWDeDKZFt5zEpFWbyMdTmmKM6cAhF9+fHmFCVZqUZwXrwpyWGLCfeZh6/zLHXtX8X8VeG1gCCf + hTJXC3cKMyBcOS5ER/2VfYL0kbRoY4pkLqyR163McKAkUSl1bkKmHJsiPCnRT5t433mXIAIzcC4FcfrU + ZGloFFFcqpRnCzMmyU+f9BBTcqWfJgeZyDiZj4ft1eoPJSICTeW1LYmKtCJa+m9MtIgsmUf8/U0lthmo + SzbYS3y3tV2AncDebqEKJ6dFuLsb4OtjIbFPI8+xIyjQSp5jLHFyITbWc7HVzMfJUYScmzG+aikna4n9 + Fri4Cil1nak04+1rOGMCey3Cx3MeUUpZ5wQNdbmedJcE0JjmTEGgPikus8nymE9x0GKq5Ro0xFvQmmw9 + gxQbmuQ+FAYtojLWhLZcR7lPLjQW2lOZZ01ZrjUlmXIfU82oS7egU/r6UKYdY8mWLI83Y408Z0O0EZvD + 9NkcuIhN/gvYINd2QubXzUF6Al22BOswHarHNrlHUxGyL9aAjfHGrE4yZijB4IoBXB82m6qAq6jy0qLR + dzYdQX8ZwMujzFQTeCzSgiFBn2x3S5xrizKlVR5rUzKBw0ypDdKnOsCAuhATGsPNaRb+1ij8uynQjI5g + C8ZiHJjI8mZXgR87s2W+SHVkb4ItR+XYEwGGHPXS47DMh9fKvT0tc9TNMjddI/d4n3CwabdF7PJRyjZr + uC5ReF+MPftDLNjpZ8SuABMORdlwMtFJ4Mxh2VYM4W3y2KTcpy2iAzbJvVrnpc2453xpZ7PeZxYbfLWY + EOwImMWhsHmcitXhtkQ9Hswy5vFsI57JMeLJNF2eED7+TKourxeY8W6ZDW/km/CqcPNXsnV5LVeHN/9u + ADf782BjBDdWRLArJ4R1WdGsKStiRVUtw6UV9JaU0V1WRk91Ne0V5VRlZcr8nUpDbi7d8vdQXR3DDXUM + Nl5GLf31lQw31sxkAne0srJT0N3OSEs9PTXldFWV0l0j55Xt7qoKOivL6agoo72qnNaKYhrLCv4ygOsq + aKkrp7GmlCZBS30F3YoJ3NvG0uEe1qwcYdO65WzesJItG1exed0Klsn+4a4Weptq6agsk3GdQZWI97qs + dOoz02jMyqAtJ5vuwnx6C/JEt2TSJiK/Qyn3lZYkfTaNVfLY6oIClmSmM5aRxsrsXMZFxI0XlLI6u5Tl + mUWsFCzPLmJ1fgGrigpYU1rI6tIC1lWXc3hsiIcP7uS120/y5j2neOu+U7xxzzFev+sQr921nzcePMTL + 9+3m4VvWc/2hHg7uqGH7ZAFTExlMbkpjckKwUbY3ZrF5PIdVY8k01/iSEK18gXiV8PZLBrDZIvTM9FTT + V8fcWIWyrRi9iumrGr+mujMwV46T/ZZGGAhfNxZebGylL7xdBzNLbeHsOsL3dbC2X4TGQeYfl4W4eMwT + Hq1NbpY5PR2ebFwVzo71YWxb5cvUUme2jkjfHTNn7xJTTq614e4pN54/GMLrh0J5ZU8gz23x4J9LrXh0 + iRXPr3HhzQlf3t8exke7Ii4ZwIF8uNtXWi/VAP5UYtiX0858u8Ob7/eE8P3BaL4+EstnxxP58GQKH51M + 59Nr8vj8RB5fHc/k+2PJfLsvjG+nffhO4uBPUy78Iee5bAAr5q+CmfV/nflFzQp25FfBL9tkn4Ktzvw8 + 5aSav4oJ/NtO9xnsUYxf4V+7ff6fDODL+LsB/OcRHzh6CcJ7ORTAnweFm+6P4ptd0Xw0FcXra8N5bkUk + Ty6N5LHRSB4cCOXungDu6wsUnaiUaU7m1U3pnJnK5MzkDN6YyuJNweubM3lhfRLPjsfzwoZUXp/M5q3t + Bbyzq5AP9pXzycFyPj1Uzsf7inlnWzZvbknlrc0pcj+SeGtjImc2Jsh2Cq9tSee1bfm8Nl3MazvLeW6q + iCc25PP0piJemq7k1V11vLmnjrf21AvqeFfaf+1t4K3dDby+vZqXtlXwwrZyQQXPTZfz/PYKFc9uK+WJ + zYU8sj6be5clc+dYIrePpXDb0kxuXZHPdUuLOT5Wxv7RcqaX1bJpaT1rh2tZPljFkp5SRrtLVCzpLWNZ + f4Xsq2CwrUjGeBYt1Uk0V8XRXB1LY2UUNSXBosP8VFQIjyjJdSFf4npWsg3pwhtS4oxnEG+iIlXii4KU + BGOSE2eQlmpOdrY1BYXCO4W/lZULBy3XUFGtoa3Lnb5BP4ZGgxhdFsaylZEsXxXF8tUKIli2Svk7mqWr + Y1mxJomNmwvYKtdmYrJK9heyZHkRa8frmdrWw87dw4yva6axOZmMTC9i4kRjCqcNET7r529AYLBwWokP + WdnelFeEU98QS0trPE0tMfKcSJpbo+npTWSFXMO14zJvr8xhZDSJto4QKqrcKCxxoLLGg8HBOCY3V3D4 + cBe33bacB+7fwsMPbePBB6Z46sk9vP7aKc6+fQuvSvvII7u5Xx6/8+713HZ6DTfcuIxjJwfZc6iT7Xta + BE3sO9jBkRN9HL9+iOn9zQysSKN5OIaWsXjq+iOo6g+joj+UioFIQQSlveHkC8fNafEnr10xhkMpaA+h + oC2cYkFpezSlHdFUdifSs6KYNdNtrNneTt/ycipbEilviqOkPpr8KjlPZRhl9bE0dKbROVAg96CGTVN9 + 7D+8lutu3s79D1/Lk8/cwYuvPshLrz7Ma68/zhtvPsXZs4oh/AxvvPscb733Mu+8/wpvC1549TFuv/s6 + jp7Yxb5DUxw+vpNrrt3LsWM7WLWyj/LSdEKCXXF1NcXDwxx7B2X93oWYml+NiczD5pazsRAeZmE5FzOL + eao5bGKyULAIU9UA1sXcQikNrcy1l35wY6mLtcYIBwczPJwt8He1IszLnmg/OxJ9bUn1tSLDx5xcX1Pq + I21pjbYRDWpFt3CZnkhTegU9wmm6I0zpCjelI8yEduGgbaFGtMh2S6jJfxjASgawUgpaMYB7EkSLyFjo + T7FlQLhrX6qGPuHi3cKj2xMtZso9C/eqEA5WFqZLqcz/xQELKPC+ikJ3LWqFY3eH6DMqPHw8x4ndjSEc + HUjg1KoMbt2Qxy2bcrhxYybHViSwR+793oEoNjcHi45woF14em2oITUhhtSGGFETLK8VZECJ9yKynOeS + aj+HVMe5ZHsupChAj3LhaI0RhrTFGNETZ0KfjNs+2e6NNqQ3ylh4newXXtcfY86oaMWlKY4sTXaSY2xp + FA5e4a1LkWIuey4gR3RAlrSKCZzptZCsS8j20SXbT8GMAZyplIIO1iM/yojiZHPKhcMWi67JTTIhLVaP + tBg98lKMKc2zobbcmboKJyqLZa7I0ic7YY5ozlkUJ15FedocGgoXCscxYKTJkhUdtoz3OLCxx5l1HQ6s + 7pT32u5Ib50dXQ2iiSpsyU0zJC5cm+hQHdELi4mNMCI90VZFYrSl6GszYhWzN9pCYC77zK8YwPHSF2JD + jUkUDpws10RpFQM4NdJc9Lc8J8iQKF9dYuQzKklDyXIfsqVfFMTIe4/VkCl9Jsp9IQEaLQJsZ6lGsJIJ + HGw3m3DHeUQ4zifSSZtIF10iRPdHuekQ66lHvOj/BB9j1RC+nCkcIcdEuukT7WFMrPTj+AArYgNtiPSx + JMBFtIjDpcxfW11cbLRxtFiAo+U8FS7WM1nAatVDB2U9YJ3/KwNYSdbwULIp3axlrNrg4iZw1eDgZIWt + YsYqppnwH+X7zf/JAFbKtSuVEU3NTVSYWZqqUDJyFVw2gW1slYqIGjm/o2irmXV/Pb2cVajL2Lk7/O8G + sJXZjNF3qQT03w1gQ0N5f2YmWFiZ4+hsRWCAIwmRLiSFa0gSnZIWYkBtsobRUm/W1QSwpdqXLaLHJ3Ms + mUzTZ0p4/3SaaKiUeWxNuJpt8VdxNEePWyqsOC24sdiEU4UGwvdNuL3Rlrs7nIRfuHO79McTSmXM9EW0 + eM6mwEKLTFMt8uT+10qfUaoKjGY4sbbIjYkyZzbkmLAxbT4HC3V4sMOaF4Y0nBmx5p0xW94UTvjqoC1P + dVlxe6UO+5NnMRmrxbpoLVZFz2IofD7NMoeU2GmRby6vYahFoZEW5TKfttjrsiHKjQN5YZysiOZocSAb + Y2V8u19Fh5MWI6L51sVpsyl5MVuyTNmWb8fmPCeWxFvRGLCYIum/mS4LyHCaT66brrqu+FCaEytznFmb + 68zGAgd2lDtxtMGZW7s8hF+5cF+7Jf9sNeGFdlPeajfn0w4N38jY/KHPk++HfPhq2It/Cz4Z8eb9MX/e + XRHBW+uSOLM5l9d2VfP29aO8c/cWXrtvB4+d3sYDN0/zwC07BDt58NZdPHL7fh656zCPC/9/8oFrePie + oxzcu4aO1kJiItxxdTJTlya01ZjjJP3KwcHuigFsqnxPL33PXPqOWoZc+p9iAM9A+q2NARonCxykryvl + nz38HVUj+O8GsKu3De4+mitw8bLE0c1UzQJWSkGrGcCXDGAlA/jvBnC6kvEYG0R1YgStmTPln/9u/ioY + ys+mPztdNYDbUhNoTUmiKSlezQKujAoXCBeIlhgfHaaiKCqUwmhBVAhFkSGURYRTER5OTXiEitrwSKoF + VZGRlEdGUBwZTkFkGPmRoZcQTEFEMIVKeenwGVO5IDSAbH8v0mT8pTrZkmmnocTJkVYfX/pDQhmMiqA/ + PpK+xCgGkmMEcQxdwnByvIqhK+1/GsBdoncvm8DtlwzgQdGVG/p6OLldONRtN/LC4w/xxkvP8d67Z/nx + h2+4eOE8f/x+nh+//4Ezr5/hhuuuZ93acYaGRoSnbeCak9dxw023sm3HbobGltM3NMb4xs3sP3RUzQCu + a2giOi6GZHntpUuXCh+7n08++UTN7L3wx3l+/e0nPvr4PR559MFLBrCSAfyKagB/8/03nL9wjovy7/yF + 3wV/8OvvF3j3w4+44ZbbaOnoIiI2Hp/AYFJzcpnYNs0Tzz3P599+pxrA5y/+KZDn/nmRC3/+gbKesYKL + KLhwqVXwu+w/z4WLv/G7YgL/cW4G8tq//PIzn//7S1588UWOHz8+kwFcVkaV6Op20firOuvYOdrO7qEm + xmvlmqZ50ZvgwPocb27pTOfFdXV8sKuLL4/285XwzK+u6eKba9r57ppWfjjRwo8nGvn5aD0/Hazk+52i + BTcn8cWGcP69LpgvN4Ty/ZZ4ftmeyfmdxZzfXikasJzPV+Xz0YoC3l9Vytm1lby4uoKn19TwqPDvu9c0 + c93yRvb0V8rcmkhzegh1yYG05UXJ/U6iqzCexrQQquO8qY71pCHJn6pYH3L8nQm3N8NL4oqzzOGOFqY4 + a6wJ8PEkLSmB4vx8inPzqa+oYuXoUvZs3Y5WYJBM7JfgG6BkbMxkAfv5G14xgIP89Qny0SHUX48wISZh + l0pAK4j0lSDsu5BoCeRR3guJFER7zhcsUBHnMVcw7wri5bEUf10ZNGaUxVrKgDIiP0SPwhCZMIMXUho8 + V3C1irIQQejVlIfPoTpKm9p4XZrTjOnJt2G0woXltZ6sbvBiQ6sfa5s8ZJ8d7VmGdGQLISs0ZaDUUjV9 + B8osGKpQsnwt5RiLGQO43PSSCWzKcIUBfcWL6C6cT0/xQnmejuxTsoEX0qcYwGXaDFQskvNoM1ihw4hi + zDYasbLNjPFuG9Z2WTPeaSlEasYAXttlyniHMRs6jZnsMWV7nwV7eqw50GHFIcUAbrPg5l4Hbhtw4qY+ + DackOJ3oMGNfsz7bm/WYbNJhQ/1CVlUuZFmpvFaxBavLXAS+rCoJoi/Nk/pQGyGTJuQI+cl2F8Io1zrf + fyHFch1LwoQsKqZvpD0VMfaUhFtRFCT7/BdTLvesKUSX4ThTNmdrOFnjzd1dkdwvpPn2vhj2ShBfkWlD + kxC+DLer8be5CndbIT/2M2ti/N0AdndYiLfbYvy9FNPlbwawj6Ga/fuXAax82Sv9St6vp5CkywawjfVi + ISQGEkyUX8L9LwawPH7ZALa1M1PXz/i/M4CVtW3+bgCbY6H8Ldu2jhrsnW1VA9jFxXGm7LOLA/ay385+ + pmSKja0EQ8UEdrC4YgC7CYn7vzOAA68YwPFxwYRH+ODpaYedvG/F+FVN4EsGsIO8P1cnDZ6uDgT7eBAT + FigIkG1X/Dzs8VcyjuW56q8KJYj6ulvLNZ4xgUP8NAT72gisCPazIjLEntR4LzX7t6EihdLcaJJlcogO + diM2zIvkmCAh6SEkSvCKCvaT58vn8LUjRM4R6mlKmLuBEGch1M6LSHGdTZWfFsuEXB1oNubhCQfeu86D + H+5z48+nneE5DbxgD887wUvuAl94WnCvB39c58jPe6z4eqMxn67W4YvNRny3T8NPJzz49cYILtyWxe83 + lPPN7jKe74nl5kxHjsdacU2SMycS3TkoRHNHgIYpb0u2CkmY9rRij58txyNcORHlwtFga/bLXLXHU5c9 + IqZ2eV7NLr9ZnEoz4H4hVGdWRvL5nkR+OhXD+ZtD+PPuSHgwCh6N4M+HAzh3vyc/3+3Mr3e78vs9fnx/ + sz//2uvB06scuF1I2Pb0hfR6alFiokWusRYZVrNIERGQIOMtRq5TrL+GWF8X4n38SPYOId3LlxxvVyEL + rvRluLGx3ovrVwbzzNFI3r0jgi8eieLHlyL5/f0w/vxcKQHtzcVf5Tr9rsCdP8+78udPcl0/dYN3fbn4 + aig/PhTCmSOu3Lncgm3lMvfEXE2fiOH+eGva4m2ErJiTL2M7L9pOBJM1cb4yBkV8+LlKf7IzlH61WMic + CBoRKWEyLmsLA9g/Uc+Tyvq/D03y0l3ruW6qTubBIAp99cmwuZo8Ky2qbbRottaiR0jxRPhsrq/S48m1 + lrx3gyPfPenKb++68/vnHlz4VikD7cSfP0sf+GkGyvafvyhQ1gVW/tZw4XtLzn1uxm+fGHPuIyMufGjI + b+/r89M7i/nhbT1+fMeIn94y59c3rTj3uoZzr9jy+8v2/PaCHV8/acUH99vwxHFTDi2dz3CRlpC4WUKw + riLJewEhzvPxV0xg6a8+rnr4exsT5CfiMdhCNYBTZf5LitQQL/0lRuan+GCr/zCAS5PdKEt2pTHXn4Ga + ePorY+gqDqc9L5DmbB/q0z2oT/OgNtWFahHzlQlOlMc7UBprpxrBxSLuFRM4P9pm5pfLEVYiZkUYB5gQ + 6WdIdKChuu5RRrQxhYkmNORZyvmVOGTDmnp7Nre6sK3dnak2dyZb3djS7MJEkyMbGxzYVGfPxjpbNtUL + GuxYV23FeolhE7Jve7sb+/t9OTwUyKF+f/Z1ebGr2ZVtivkrAn6qzpEt9U5q9u+GKmfWlNuxstSOpQUa + hrOt6E4xpTvVksFsW5YUiigpcWFtqTNb65Xyz8Ec7Qhid70rO2rs2dPkwMFOZ471u3DtsGICO3H9EntO + jdpwYsSca8bMuHa5FTeP23H3lAf3bvcUuHHftJIJ7MC9W225d8qah6Y1PLnbkaf2CvbY8+wBR54/aC/b + 5jy915KXj7vy1vUBvHNLJGeuD+exPT4cX2LORKM2I4Wz6M+Zw1DOoksGsMT3XCsG8jWMlbqystZH4Mdw + qWIA2wkH0NCirPua/l9LQDuqJaDHKgLoLXCnNfvvBvDM+r/KL5sVA7giWeJgjlICesYArkixpTjOQkVh + jDkFsebkxZiQK7E0J8aMvHhz2TYhPcqAuMCFBCmZPc5aBIiIvWwAK0tohAhXio0wVA2UqHA91QCODNUh + IUKf1GhDilI11OS4UJmhrANsTXaUUhpNn5TARST6Kdm/c1UDOMF/LmmhCyhNMaZJxGR7qQdFcnyC8Kso + dznOW3hBpDVJAcYEO0usdpijGsDhyo8TQs0JCzEjPNxaYpUDkZESA0IkrgRY4O0l8dlBRy3Bqpi6Gpv5 + KuzttHGW2KBk9vqLSAsMtJY4aImnh5F6vGISK+v/urroyznM8fexUUXcjAFsLDDEw9NIxJ2xagD7+Cjc + QZsEGR+lGa50lIcyWhdNT4Ev1TFW5PvqUOSvQ12UqQgfe7nfLgJnBqUdKXCT/uBMiVy78hhDmjI1NEhf + rs2ReTFT7lGmOYWpJpQkG1OXZkFPjh2jOY4sS9ewMtGSNQnmbBIxPyXXdmuoCPigRWwO1GEqWJdtofqX + sJjtyt/B2kzK60xE6jERb8LqRGNG4v+LARx4FZXeWjT4zqY9aMEVA3hFlBnLI81ZEiF8UzjvoPKFaYQJ + nVFGtEdJq2TIhJhQH6hHnfDshmBjWsNlX7g5LcFmtASa0iFzyUiENRtT3diV582ebHd2pTmyL9GWQ3Lu + o8GGHPLV44CXLiflnv4j2ZlbExy5JtySXdIHptzms91ThyMRFlwTb8sxma8OyWN7g005EG7BcZnPrpNz + X5/qzhF5bLe87rRqABuwRXTAJj99xr0WssZ9Lmslzq710VKxXrBNePrBqAVcK9z8thQDHiu14ZlSa54u + MOORNF0ejJ/Hw4kLeCJDhxfzjXm5wIiX8vV5IV+Xl/N1eKPokgEsMful1kAebYvjzpYUjlclMVmSyuqK + EpbW1Al/r6KnvJwOEW5d1TW0lVdSnZNDVWYGTSLkeiorGairY6C+mr66GfTWVtFVVUJvTTmjTQ0z5aFb + Be0t9DfU0FFZqkLJ+u1Ssn4rK+ioqKCttJS2irJLBnA+1UXZIpoKaVGM3+pS6iuLaKiSxxQTuE6e11xD + V3s9A72tjA51sXS0l9UrhlmzfJih3jZ6Wutor62gqbSA6txMKkW410pbn5Ml8SCb1vw8usoK6REx31aQ + q67t1JqtrPWUQl9eFsvLi2XuLlZLRI/kZqtrBS8rLGRpfhGj2UUMZxUyIhjKype5MVfGRi6jxfmMFOex + RK7fZF8n12xcxW17J7jj4BbuPDLJHYc2cnrfWk7vX8XdJ9Zx54k1nNo3xO4t9UyuL2Lj2mw2jKexUbBp + XbogU8XG1dksH06Uz+9zxQA2MZ2FiZliAOugZ6aPrpnBFQNY2VaNXrP/YgCb6aFrroe+pTEGVsaYaEww + sRYeb7kYcysd4eyLhbPrYmUvrcwpGqUygcdCfETjJCQYUFvnxIqlIUxPxLB1XQhbVniwdYkje5bbcXCl + hhuUcs87fXn1SCRnj0k82R/Ky9t8eXK1xJuVdqoB/MaEN//aHsKHu8L5cHeYiPxAPlAM4J2efLTdnU+m + Xfhsyokvt3nw9a4gvt4fyZdH4vj0kgH84alMPjmZz79PFvD1NTn8cE063x2M4LvtvnwvcfDnKVcu7vD8 + TwNYKf18qfyzuhbwpAO/CH7eKvsEP2xx4EcFyvHTwrX+wwD24pzExN/2KOavUgLa54oBfNn4/T8ZwBcO + eqr486ifCo75zOCwF38e9uOPwyH8diiCb/dG8fGOKM5sDOel8Sjhw5E8uiScu/v8OS0c43S3F/cMBPDI + skieWRfP85uSeHlzsopXJ9N4TfCS7HtydSQPjgXyz2WhPDMezyuTmby5PVc4djEfHyjj30cq+exQOf/a + mcdbWzN5eyqdtyZTObs5jTcnUmVbjt+Wy+s7i1Tz97U91Tw7XcYTEyU8O1nJK7uaeGN/G+8e7uC9w528 + d6SDDwUfHe3ifdn39v4W3tjXyOt76zkj7WsHmnj9YLPavrK3jhd2VvLMVDH3rUjhzrEENQv49mUZnF6R + xw3LC7l+VRWn1jVxcrKHw1P97N3Uy/R4J5Mrmtm8vEnQzOTqNrav72HH+j4mV3UyIfu3rG6R/tjC9k3t + bNvYxNplJawcyVGxYjiLJQPJDHXH09sWSVdTCG0NgbQraAwSBNLaEEBrnR9t9X40N/jTIuhsDaa3O5LB + gWhGhqIZHY5kZDicJUvC2LgpkS1TKUxOpTIl2Lo1na3bZjC5NUUeSxWkCzLZsi2HnbsrOHiohT37mti0 + uYr1G2vkuR3s2jPEvgNjbNjYSktrKlnZXsQl2KkGcGjYjAHsH6BPVIw1WTmelJQGU14RQk1dGFU1QZRV + eFNa7kWlzAvtHZEMDCbQ1x9Dc1sgldWuFJfaqyivlPg9GMO2rZVcc7yXf9yxmkce3spjj2zn8Ud28Mar + J/n803v5/ttH+PLz+/ngX6d59+z1vPn6Nbz28jFeev4gTz+9h4cenlJN4dN3rOT06ZX8485V3HnvWk6c + 6mfthMyJa9IZXZ9J17J42pbG0rJMsDye5uVx1I/GUD4QRkmvvO++EEE4FYKynkgquiOo7I6iqjeGmr4E + 2pdkMrK+nJENFXSO5VHdHk9VaxwVzTEUyWfPER6ZXxVEaUMEta0JNLWn0T04YwSv39zN7gMrOXXDNHfe + d5yHHrmRZ5+9m1de/SdvvfUUb7/7LB988iqffPE2X3z9L7767n0+/fJtXnrtUTn2NHffex33P3gzD8v2 + gw/cxMH9E3LvmynIiyUm2oPoKA/hV9a4eyjcSg8Hp0XYOy7A3mEBtnYLsLGdqaSgZAubKWsDK2sEmwpM + FsicvRBDafWN5mJougALq8XyHGNcHU3xdTEnxFNDhI+GaC8LYoWzJXoYkOapT2WYJfURljQJl2gVftMW + bihcxZC2MANahPO0BBvQJFymOUi2FcNUuElTsJFqAqtGsGIQKxnC0ZbCn6zpjreiL1kxgTUMpNqqBnBv + siWdiea0xpvRKHy6LsaI6mgDKoR/lYUJJwxcQIHv1RR4aFHhPYdm4Wh9ctyyHHummoLYNxDH0VVpXLcp + l2s3ZXNyUyYHV8QxKfd7sjuUdc0BDBU60p5iQaNw+MZYZTkOC5oFdZEmlAl/znSZQ4rd1aQ6ziZXuHSZ + fJaaMCNahe93xpmprzcQZ0x/rImKvmhpY0STxFkyJJ9pVHjWmIyf0Xh7ekQTNgrfLffUplhiWL7HAtUE + Vr6zy5DtNI/5l6AYwsLZ/RfPGMB+i8gK0CU3woiyJCvhDM40FntQXeBCQboV6QmGom/1yEw0pDDHmsoS + J6rKHSktsCA3XZf0uKtJi9AiS5AdrUVxylXU5c+ns0KPgQZTlrVZs6bdlrUd9qzrd2N80IuRNmf6W11p + rXWkKNuUuAjFAF5EdNhi2TYmWe5ZcqyNaGsLYsKUH5KaEi0cNloeixNum6yYwFHmJESaER9+KetXMYDD + jUkS3qsYwAoSQoyI8VtMrFxrZdnAFLm2ucL5i+M1FMZpyAgxJtx1nmr8Bjlcjb+tFn7WWoSoBvBcIlTM + J0zJ7FWzexcS7aYjmseQJD9jafWJdJH37qZLjLuB2oeV9YET/K1ICNIQH2hLpLKmu6M+7krpWYGzjQ6O + Vguxt5Ax9DcDWMkAdnfQnql46KCLl72y/q8uHopprBjA9ov+MoDdzPFxt8TX00Y1gF1cBM7WqoGqQDFZ + le8WLdSkl5ml7v5uAF82hJWkFzMzI+FVRhibXjKCLRQo320aqeavYsYpCS02dlbqd5ku7jNL1zk5K8va + KZB98vf/vwxgR8Xoc5zJAv67AWxgqC+vbaquPayRx7x9ZtZjjQqyIsLPkCgfHXJCZUxkOrG8zI9NVb5s + LnRiUvriVLoRW1NFP6X+ZQBPJ1zFNQWG3Fppza3l5lxXYMDJAj1uUgzgBhvubnfkgT53TrfYcqRMj3VJ + 8yi30yLRQIs4fS3SLLUodNemOtiEduknozlOrCxwZE22GevSdNidq80/Gk15useC1wbMeHvImrMjNpwZ + 0PBkmyk35s1ll4yDrQriZzEl51+boMtA8AIaXbSolP5VZqxFjZkWzTZzGHTVZ1+a8J7qeO5vT+WepmiO + 59iyJWwe6/y12BE3n1NFltxcac9tdW6cbvLjZI0fkxmODIQZUuO2kAKnBeTYz6fAcRGVHvoMyPhZkqRh + hej0cRnDO4vtOVrjwC2tztwt4/C+ZmP+2ajHC836vN1kyBfNFvzQrOGXTuGHPS580+3A5z22fNZjx4d9 + jrw34s3bK0J5Y10Cr20t4M2jHZy5aQXP3LSGe48v5/ShFZw+vIbbjqzmtsNrBRIzj07wj2smufP6aW65 + ditbNw8J18hRlxR0lhigsVLWgzf7bwawmfSby0sqWljPJFMpa0Qbq1iMkcDSzgRbZ0tc/gcDWIGnnz3e + AY74BM7A3dcGF08LHFyVctAmuEm8UQ1gGZt/N4CVEtCKAVwSH0J9SjQdOcmijdIZLswSvSMxWoFqAv9l + ALenJc6YpSnJNCbGURsbLYiiJj6aCqVMc3wUZXGRlMZHUhwXQUl0GGWREZRHCAcIVxAu8U64QZjsDw+j + ODyU/PAQcsKDyA4NVJEV4i/wIyvYl5xgP7KlzQz0IsXLlQQXexLsNaTZaSh2caE1IIB+OfegvIfBpGj6 + BQMp8SqGUhIYUks+z5i/KtT9lwzg1P/BAFYynfNz6BQ9uLy5kX3r1nLL4QM8etdpXnj8n5x97WV++fFb + uHiBP34/x4/ff8+/3n6bO07fzvTUVtauHWdy2zS33f4P4VL3ceDwUdasn2DZqnHhijs4fvIUx06cpKdv + gOy8XOF3ZfKctTz++ON8/fXXKJm4F/44x6+//ciHH/1rxgC+/Va1BPRrr73CRx/PGMC//3GeP+TfeWnP + /fEHv/x+gbc/+JBTN91Ca1cvUQlJ+IWEkZ5XwAZ5X4898xz//uY7fpVjlTLQ5/68wHnV7pV/sq1AOd8f + iul75d/vsv88vysGsOD8RWVbcOE8v/zyi2oAv/DCS5w6dUp04zLRr5XUlxTSK3p+Y28jB5d3cWRpK1tb + c1iS68+SdBe2lfhxZ3eqaKFaPtvfxbfX9PPVsU6+ONrK18ca+Vbw/dEGfjhazy9H6/j5YAU/iJ75ciKB + j1cH8MEKT75YF8T3k3H8uj2D8zsK+GN7Gb+IhvliVQ4fL8/mPdEbZ1cW8eKyIp5ZWcaT6xt5YLyZm5c3 + cGCgghUVCXRmhdCSFkhPQRTDFUn0F8fRlh5EQ7wn9fHutKb40pDgTYGMpyg7I7xNtHEy1MbeRA83eytC + An3Iy0qlrrKC+grhsY1NrF++koPbd6EVFGLNZfgFWMjAu2QAywSvrOOqGMAhgUrZIgOiJShHSbBWMn9V + A9hnkWAh4d4LCPeUYOw+l1BBuCBCgreCKLfZEoTnEHMZ8liSPC9X+dJPAn65kK9SIQglEYaUKOVdgudS + HDiLAplgCwO0KFWyfyMXUBunS32SAZ05iqHryJIaD1Y0erOqyYt1bb6sbfVieZ0TAyVWDBRbMlxuw0il + Ri3/PFBm/pcBLH8rBvBQuTGDpcq6v9JKsOkpXCiDaS49RQsYKNWV5+ozqJSBrpAAUaHDQKUOfWXaKoaq + dBmrM2RZswmrO61Y2W4hRMqSNR3Sdpgx3qlkBpuyqct0pvxznwX7eqw52GHFYcUAbjHjxm5bbut34OZe + G7W87qkeK453m3Cwy4gd7YuZaJzP6sr5rJD3sqLEnLUVLmyoliBbE87SggA6Yp2pFDKT72koZNKAbC8d + cv11KBACXiDXVikPWxg5Y1AURFpRGGYsHWSxEOeFlAppbgiSzxmtx4ZMK/ZUuHO4PpB99QFsKHSjP8GC + 6kAdUl1mC/GaLQRnxgBW4KbgkgnsKlAM4JmsOxENAqX88383gBUo6wGb4OlhiquzkjGkL0REFwtlfZr/ + BwNYKQP9/9UAVluNhRAmy5n1f1UDWPlVntLaSbDTYGtriUaOsZZApxA1ZV2cywawkv3r6W6Ht5ejfDYX + AgPcRRx7oazLoyA01FuFsh5wdJQ/8RKsFBM4MSGEyCg/fH2dsVN+XXXFAJbP8zcD2MvNkVA/L2LDgwVB + hPi54++lmL+XDGAPKzxdzfEWgunvrfyyQwKktyUBEjQDvMzwE4QEWJMQ5SaCIFwGewollwzgyCBngSux + 8t5iw3yJDfVHyTQOC/IgLNCJUH9bQr2VLGATQl0MiBTyo5TZLfedxWjqfHY1GHDPehvePuXGd/e7cfE5 + Z3jVDt5whDNO8JYLvOkJLwsed4c7nfntuA3f7TDl0026fDZlwFd7rfjxhCe/3RjJxduy+OOmcn7cV8Ur + /QncnuPCyXgbrk125ppkD47EurIn1I4pIe1bpM9MeZqxy9ea41EuXBPlxIlgK45JHzvhq8c1ftrSzuWa + 4Nnck2/C8x2ufLIhil8OJ3LuujAu3OIL9wTCP4PhKcGTvvz+mDu//dORi4+7yfv15dw9vvz7Gg/ObHXh + saUOXFNpxMqw2TRqZlEqxDNPI2JQ+nu8iwgKeS8JgQ4kBnuTHhROdlCsjK1wSoL8qY/xpjfDk/FqL46O + BHHP1lCeOx7G2/+I5vOnYvjtnVgufBLKxW8DuPizDxfP+6gm8EXVAHbl4mdyXT/whn/JMS+G88Vd/jy3 + 25nrB0yFXC9iPMOIVekilhOsaFDmTRFdeSLGkgOMiXQ3JEiIlL/0ETd7Q+lfOkL05+FgO5+IIHOaysM4 + vq2dF+6e4M2Hpnjx9nFObKikJ8eDbOcFpFteRa6Q32oLLZrMZ9FprsVqz1kcSJ3DXV16vLLTis/udODn + V9y58KEHf3zhxp/fyv3/3lZgDz9If/jRTj6HAodLsOOP76w5/4UFv31qyrmPTbjwsSnnPzLm5/cN+OE9 + A378lzE/vWvBL+9Yce4tDefO2HLhNTvOv2LLd8+a89mjVrx8kzk3blzEusZZQn5mURJ+FWm+c4h0W6CW + Lg8Q+Mjn9/M2IcDPhIhgC+LCbUiJsVezgBNDFRPYSiD7LhnAeXFOFCiItac6zZPOkgi6SsJpKwimJcef + RiXzN9WV2hQ36tPcVBO4KtGZinhHIY4zmcB/N4CzoyxJk3k3UQRKtHI//I2IDRbRLII3K96c4lQLOsqc + GKpxZHmtA+ONTky0uDDZ4sbmJjeZ813ZWO/E+jp71lbbsqbShtUVVtJaMl5jI/tENNRYs6nBnm0dbuzt + 9RWSEMD+Xj/2dHmxo9mVrfWOMwZwgzNTjc5srlPihjOry+xZViSiKc+GoSwrOpNNaU80o1dEyHCuvcQU + B1YVOzLd6CdxKoRDbUHsqHVlutqRPU3OHOx04bAIkGMDjlwzZM/JYVuuGbbhyIA5R4bMODZqzqkVNtw5 + 6X7FAL5n2ol7puy4c7MV/9hkxt1bzHl42pbHd9nx9F57njvkxAtH7Hl2vyXPH7Tm1ZMunL3Rjw9OR/Lu + rZE8e8Sf61ZZsK1tESvK5zBcMFcIvg6jBRKzc03oE+HXm22hZgEvr3ZnZa03o+WKAayhI9Oa5jQr2tL+ + MoCbUq3pzHZWDeBhEaxdea60XDGAbdTs37K/GcCX1wBuLfCiMdedshRb8mPMVeTGmKnIiTEhO85M+pMp + WdJmxBiRFL6YKL8FBLheja/rLAI85/6HARwm/ClJnpsSZy6iS18tsRYbsZikKAPSoo1UA7hKxG2FvK9i + eT/ZUYaXDGBtEv3mkyBzXaLvfJKD5pMZoS3HmdFW4ixkVgSSfI544QHhLjI2XOeTHmomfwuXc9XGz3ke + AR7C24JkfIRIrFD4nYyT6Ch7Fcp6vuFh9hLXrCXe6ammr5XlbKxlDlFgY62sC6yjLuWgGLy+Ppb4SMzw + kHHn7LRYNX+dHHXVx5X9/iLu/rsBbIKPn6nASDimAcEyf6cIP6nK9aG/LpY1baksqYwQgitjLdyE8qDF + tMYJZ8t3l7EQIGPBX8XqKiHpxR7qF4Ll0YbUpVpSLeOrKt2cslRTGWvCd5IM5Z6ZyP21FLHowFiusq6L + nYhvS1YnmrMxzpRtsaZMy7WdDNZhSlnzN0SXneEGKnbJ/p2Bsi9wAVsCtJkI1WFznDFr44wYizGgL1qX + 9ogFNIbNpSbwKqoUA9j7atoC5tEfvJiRMENWRJgITFkWbsySMCNGpR0MN6JXzt8dYURPmAmdQUa0+OvR + 5K98gWpMe5iMTSVbRvmiI9CYbplLRmReWZ/gwM4cT/Zku7EnzZH9ibYcjLbgiJzvkPDzg376XBthyT/S + 3Tgt89a10dbs9NFh0n0e2zy1OSDX82isFUeirDgUacnBcBm7sTZck+jEdXL8DenCA2Ue2yN9ZkegEVO+ + +kwF6LNZ3tcGHyUDeA7j8vnW+kpc8NFiXDGAQ+dwIGYRJxJ0uTnVgKdkbnte8FSxBQ+kLeKu2Ku5O24O + 9yXP5bHsxTxTYMBzhfoCXV4UnCnR561KM96Q+e/ljlCe7k3nn0NF3NFfzpGuarZ2tbKup0s4djtjLc2M + tLQy0tZBb30zTSVlNBUV0VNbzdL2Nlb2drO6r4sVPR0s725naWcbo60NjLU3sqq7gzVynjVyzNr+XpZ0 + tDLYVKdirL2ZJe0tcmwzQyKkh5qaGG5porehRl37VzGAG6uL6Wypobe9Qc367WmvV7d7pVXWA+7uaKC/ + p4WRwU7VAFaygdcKlMzgQdnf11pPV30l7TUVgnK66yrprq2Q917JYH2tfKZ6xuSYwYZq+mrLGagpZUjE + 6dL6KtbJ+98oWC2PrZTnrRasqq1iRVUVy8prWFImn1+wpKyCJRXlMn5KGasuY0Sev6Sxmg39HUwvG2TX + +Aj7J5ZyeGoZB7eMsX/jIAc2DXBixygndg2zb6qTrRtq2ThewqbxAiY25DM5UcQ2wfbJMnZMlrNtcznj + K3NobRBuG2elGsBGxkrp0TlXDGAd4fDapoYqlO0ZA3gmC3jGANb7LwawCabCtdVSclb6WFgppU2Fu9tK + a2+ApcNirIV3ObgvwsNXNGeUvmomDQ+FyXtKY/dkIjs2hLJn3I8jG7y5dpMHd2zz44n94bx1LJb3TsTx + zuFI3tgZyEsTHry8wY1XNnjy5qQ//9oexgfK+r97w/lgTzDv71Kygt35YLsrH08Lj5xy5t/b3PliVyBf + 7ovk878bwNdm8fG1+Xx2bQFfX5vLj9dm8MOhKH7Y7s+PU578MuXOxe1eVwzgnzdfMn8vG8Aq7GdwyQD+ + bsKOHzbL38rx/5MBrJi+e3y5sNdPNXr/Xw3gi2oGsOCoj0AeOyw87rAPvx8O4rfDEXy3P5KPd0Xw5uZw + XtkUxXPronh8ZTh3D/hyS6e7itt7PLlvOIDH10iM3hjHixMJKl6ZTOFVwQub4nlsZRj3DHpz75A3jywL + 5fkNSby2NZN39xTy0YFSvjhSzeeHK3l/dwFvT+fw9rZM3p5M5+0tGZzdLO1UDmeVdYL3lPPmvjrePNjI + S7vreHqqkue31vHa7nbeOtTNB8f6+fhYHx8f7+WTE718erKfj4738K/DHbxzqI23Drbw9lHZPtHNuye7 + eVvas8c6eONwEy/vqua+lWncORbHHUsS+cfyDO5Ync8tq4s5vamBu3b1c9ch5UvUlVy/byXHt49xaPOA + jKE+wQCHt41wcvcqrt2zmmPbl3FkepSbjqzljlObuPfWKcEEJw8OcmRPF0f3dKg4vKeFAzsa2TNVw47N + lUxvkjG1qUzaMhl7RUyuL2TLeL6KiXUzmNoo42+qjJ1bKwSl7NhaxI5thezZWcDhQyUcPSo4XMyRQ0Uc + PlDMIRWF7N9fwN59+ezdU8CePUXs2VfKoUP1XHOyk8NH2tku72NqqknabjlumP0HxpiY6KCzK5P8Aj+S + U5yIkngQIfoiQOKLf8BiYuOtycv3pqIylJraUOoawqio9qeg2IVcibF5+Q7UN/jT0xtJV3cYVbVulAj3 + LC13oLJSuHOFEz09oWyeKObooXZuvWkp99+9ngfu2cSD90zw+ovH+PzjO/n5u0f45ftH+enbR/jx6wf4 + 5t938+Und/DFR6f55L2beeeNa+TYQzz/1A6eeXwbzzyxlWee2so9d6/mgNzzrTvLmdxdwerNuSybyGJs + cxYjmzMZ2JhO99oUWlbG0bAsisZlMTQujaVZ0Cj9oGkkViDtaAItY8l0LE1nYE2+oICupZm0DKTQ3JdE + Q08CtZ2xlDeHU94URnVbJPUd8TR2JNHUmUxzZxq9Q4UsWVnL5q39HDg6znU3bee++6/hiSdv56WXH+CN + Nx/lw09e4fOv3ua7Hz/g598+EXzKR5+9xpm3nuDFFx9U8fqZx3jj9ce4/95rObhvPaPD9dTXZ1JTk0ZW + TojcJ2/iElwIi9QQGGIu90nhWMZ4eRviLnre1dUER0elxLMhtho94XGLsLRaiJnlQkzMFmAqrZXNYuwd + jHB3NsHXTbiht5IhKRD9HeVpQKz7YlI8lRLMFtSEW1AXZia8x5Am4TEKWgXNYYIQ2RckXEagmMHNIcZX + MoCVbOC/DGBzuiV+dAvXnjGAlSzgmezfnmRLuhUTOMWKjjRrgQ2t0janyOsmmMwYwSELKPabQ2XAfJoi + 9OV5FiwrdmayI4y9o4kcHc/iuq3FXLu1gJNTuRwcT2JyMJSJnhDWNPszJMcqy4K0CtduT7WjI8VOrdzV + lmhDnWjqEv/F5HsupNB7EWV+i6kT3tYUJXxMeH6XcMZe4fkz2b9GMwaw7B8UPj8kulwxgIdirRmKsWYg + St5/iCn1PvKe3RdS7L6AAg9tcmU722MBqcLTlTKxClLc5pGhGsD65AYuJkvGW5Zcxzx53co0DS3FXnQI + 760r86Qwy5aMJNGWcaIL4uX4TEtKixwpl7hYmGdGZsoi0RizSAjVIjlYi5QwLbKitChNnUVd/jzaKhYL + 1zBlrNGcFW02rB90Z2JJIMt73BnqcKdddGhxjglxkQuICtWeMYCFPyZEW5IgOjdW+kC0fK6IECMiw0Tr + Sl+IkWukZgFHzWQBK2sBK+bvXwawMalybVNlf7I8J164pZL9mxSsT7o8li/9oTjBVs0CTgs2JMJ1LiGO + swlzFv1kf5WaCRzuILrGae4lKOsBCx9w1pZ2PlGicRJ9DUkRvqy0sR66xHvrkeBtJK28no8Zicr3Y0F2 + xAXYEu5thZdwCzcbbVw1OjhZa+OgmL8CB8t58rdS9XABnvaL8HTSwVNeSzF+L+OyAaxkAnu5GODjpowd + xQC2UtfM9XTT4OJkJZpIydJVKhdaYKOZMWLNzJTvORcLd9K98j3nf0A1g+UYOc7QxFBaIxX/1QA2E+6k + GHHW6neaitFroVYvtJXWzsFSNXaV7F7FAFbMXWsrxfw1xVa2FZPP3tYKZ0fbKwaw8t6U71+V7F99Q0MM + jU0xNTdX1xt2kc8T4GenfscY7GNIiKeOaFFdKkSfDeR6sK7Mh4lCF7aK/t6absT0fxjAs9khuK7EhNuq + bLi51JRr8/S4tmAxt6gGsBV3tdpzb5cLN9Vbsa9AmxUxV5NvpUW0nhYxhrNIEa6Z47aIQn8DKpTy8sky + X2TYMJZmypo0fbbn6HBzjQGPthrxUrcRb/aZc3bIljN9Gh5vMOJU+lXsjdZiX4IWh9Kv5nC2DrsylapO + OiwNmkO/x1W0WGvRYaNFn8NsVkrfOZnrz8PNCTzfn8HzMu/fV+3OtfK5jsbN5dYcfZ5oduG5bl9eHBCO + MxzFvS1BHC5wYlw0Yo/fQhpljFe5zKNS+me9mzb9MhcOiyYcjRBtGGvIdI4Vh8tsuKnRjrtbbbivXp9/ + 1mrzQv0iztbp8kWjCT82WPJrmy2/djrwQ7st33ZY8bXg3102fNLvzAdjvry7KlI4Wzpv7K3mlWOdPHqw + i1unWzi1uZmTk51cs7WLkxKHTgpnuXZ6Cad2ruTUvjUcE2xc201TfbaaAexoa4S1hcH/wQA2Ub9DV74/ + V2AlfUwxgI3keGUteQUWtsZqFrCzlx0efo6q+evkaYO9qwX2bhZ4+TvgF+xMQKgrgWHueAfaC6e3wcVL + +qGHJR7elqoBrCwdpRrAgXbqjw7iQt3JiPKlLDGMxrRYOnNT6C/IYKhAyfqVVjCc998N4K6MGcO0OTnh + yhq99Ymx1CTEUJ0YQ0VCNOWJUZQmRFGmlHOOiqAsIkL6VwTl4WHqmsBloSGUCApCg8kJDSIr2J+MID/S + g3xJD/QhLcCLFH9PUi8hxdedOHdHomVcxdhqSLKzId/ZhYYAf3qjIhmIj2ZAMX+ToyXmxdOfGsegtIN/ + N38F6r6URAYEff+TAZyRRougUf7uLS1h40AvByc2cPr4ER7+x2lefvoJfvz2K/7847yaBfzrLz/x+aef + 8vgjj3LNsePs3rWbw9I+LH8/+fSz3Hb6DvYePMz0zj0cPHqCW+Tv03fcyYZNm+no6mJgcICdO3epmbQ/ + /PADfypZuYoB/OtfBvAd/7iNRx55iDfeeI1PP/uIb3/4RjViFYv2vBx77o/fVQP43Y8+5sbTp+kfW0J6 + bj7RiSkUVVSzeXoHjz3zPJ998x0/K2sGX/yDc3+e5zyKCSz/K1m+ghnz9z/xdwNYeY6C3/+4wC/nzvHl + l1/zykuvcvqWW5kYX0dfSzN99dWsEt29e7STU+MD3LhWePpACZOVEWwu9uVoXSgPDqTxzuYavjnSJfqu + n6+PtYl2aeLrow18I/juaCM/SPuL4NfDVfywu5Avt6Tw/sog3lnizefrIvluMpnftudxfkcJf2wv5+eJ + Qr5YmclHS9M4O5rCa6PpPDOUzmOjuTy6qor7V9Vz85JqDvWXsK5a7r9wvO50f0YKI1hZkcDSklgGMwPp + SfKiK96V3mThBfEeVATbk+hgQJBwOg/j+TgaKz9YMicqxIfSvAzaG2robKyX+N7BltVrOSr3+b8ZwL6K + ASzE0U8CaKC/sWoAh4eYEC0TV4JSukMCd0ygPlFCipRfACkmsGIAh0iwDnKZTYgQmjBBuGyrcL6aCJer + iXS+iihpoxUDWER8jpyvPF5DdbIdVQk2VAiBqojQoyR4HkWBs8j11SLfX0sG32w1+7cuUZ/GVGN6Cm0Z + qnJhSYM3y5oFje6sbPZgRbMbS2sdGK20VTFWbcdotY1q/vaXmjGoGsAWsk8xgM3oLxMCV6LPQLkhfaV6 + dBYsoC13jpx/AYNlixmrNWZpgwlL6o0YlqAyVL2YvnJtGWgL6a/QYbhan5FaA0YlsIw1GrOixZyVrWbS + oUxYIxhvN2ZjhzFbu8zY1WvJvh4rDnZYcKTNnOMtZlzfYc0tPRpu7rLixm5Lbuyz4YYhK04MWrC/14it + LQvV0perygxYUWLJmjJnNlb7MNUYKduhQpg9qA+1pcjHhFwvQ7K8hSz66Qpp1JcJypBMIdzZkZbkx9io + v6wrjDKjIESfPH9t8r1nU+Q1i2rfufRE6zGWKiQwx57luY70JWmoFzJXpJTtFvLlbztXCJBCghZKZ9JW + y6C4yd+utvNwsZt3xQAO8jVVESjCw/9vBrCPt+CSAeztZYKnlymuLkbY2UmwsFiEudniS792M8DUdOYX + cMYmM7+MU4mRmWIAz6wBfNkAVnDFAFbWAf4PKCUq/mYAC9FRTGBrIUU2CjESwmOr/GJONX4FlwiSnb2Q + JFtLrK3NsJJgpxrA8lzVABbiphjAHu52+Hg64uftjK+Xk4wRF4KDPQkJ8VKhbgfPtOGh3kRFBqgmcGJC + ONHRgeq6wfbKe9DIeRVzWSFh8loOGgsUA9jb3UnGm48Q6WAZb4GE+LsT4Os0YwJLQPXxssHbQyGXlvIe + rPCToKmYv/6e5vh5muIjYi/Ax4KoMCey0gIpzosiLzOc5FhvIkOcCQt0JiLQjYggD6KCveV1/ORYeSzU + jVB/O4K9LQjyEPHnKoTeQwi7ELyKgLkSjBawtXYxd6y15i3FAH7Qg4svucFZZ3jPEd63hw/tpFWMYMGL + gkccOXebDd8fN+eLPYZ8ttuQz/dbyCTqxflbYvnztiwu3lTOb0fqeH0khdtyXTkqwulYkgNHkl05GO/C + rkg7NnoZsdZFn/Vuhmz2NmeXzFO7/Ew44KXPSV89bpG56HSQLneISLk7ZgFPC8F8q9Oeb9b6cW5vCBeu + 8eOPm9zhbk/+/Kf3TJnqZzz541k3LjzvMpO5/JwXfzzqyc//8OLjI+68OuHK3TI2d2XJGPedT60Ij0LN + VWQ7LiTFXZ9EH0tSQ1xFtASSFxFDUXgi5RFxVEeGUx/nQ2eaB8tK3dne4cfxMX9u3xTA44fCeP2OSP79 + bAzfvRnGL5+GcO7bAH7/Wd7fb15qNvCfP7lz8Qt5T596wEe+cn2D+OWpAN65wYWHNltzba8xB+os2F1m + z8ZMW4YTzKiLMaBQBHCyzMfhLosJdpVxKETK09lY+pYIe8vZQvBlLEfbM9iazOmDw7x+3xRv3DvBk9eO + cWhpAe1JduSIsMq1lnnB/CoaLOfQZT2PIc0cxj2uZk/01Zyu1eW5dZZ8dK0dPz0m1+4Neb/vO/Pnv+W+ + f2kD39jCtxr43oY/f7SVz6Jgxgy++J2GP7605ty/zTn/qRkXPrXg94/N+e0jU37+0ISfPzDjl/et+PU9 + OeZdDefP2nLhjC2/v27Lzy9Y8+UTGt6+y47795qyvXcugwVaVETNIsPvahK8FhEpc0uwwMfTBG9vE/z8 + TAkLthCRai0iVAhYlIbEMA0J0ncSQjSqAZwR5Uh2tAM5UXbkRttSmuhCfZYfzblBNOUE0JjpS12aJ9VJ + Lirq09xVKAawmgEcN1MGujjGjkJ5fn6UjTrfJoeaEx9kTHSAEdFBIjxDTUmT+Tcn0YqydGt6qtxZ3uLN + eIsnG1s9mGgR4S2xa6LRjU0NrqyrcWJtlYYV5VYS6C1YUmzG8lJzVlVas1bi2biSDdzsxLZOd/b0+rK3 + z4893d7s7PRku2IANzipxu9Uo4vabml0ZVOdK2srnVhRas/SIgdG8uzoTrWgLXEmC3gox44lBY6sLnVm + ujmQve0h7G0OYGu1K1OVjuxucuNAhzv7OpzZ32XHoV4NR/pthSzZcLDXnAP9ZhwcNOHoiIX0dRk7Wz24 + d3rGAL5r0pbTG825ddyQ2zcYc/dmCx7aas1ju2156oAtzx7S8OwBS144ohjAzpy90ZsPbw/j3dtEUB3z + 4eZxc/b06LK5aREbGgxZW2Mq18OUwTzhAhlGQoYNGcizYlmVM6vrvVha6UafCND2DEuaU60ENjSpBrA1 + rRl29OS5qQZwX5EXrdlONGU6UnfJAC5PtKQ03kJFWaI1lSkamuT4pnwP6rLdKEuxIy9Gyfo1J1sxf2Ol + VRBnTmasGZnSpsUYkxCmR6SfNkGecwnwmEOg5zwRzAsJ8lkgc+wCmXv1SY2zkHnZjOhwPfXLlcRoQ1Kj + jeUcinmpoSLTnpJka4nfJtKvLhnAQTMZwEm+C0gJ0CY9dBFZkYvUMsetJS701wZQn+si+0yJdJ+nfnkS + 5yPnF24QIuIz0HWhvP5iiQXKFzfKj4VMCQ0yJ1zGRmSEvcBB4CQxzBZ3NyM0Nsr8MRdrywUCxQRWSkLr + 4OJkKLHQVOK5hYw3Czwl7ihr/jo5LlahGsSy3+9SGSfFAHaWfc6KASwcwMffDF9/U/z9hVsGmJAea0d1 + nh+9NdGs68xgTWMCA4V+NMZaURGoQ5tc1+WFnmxpiGB3dyLb22LZWB8iY8OdykhdKmMMqU02pyrJhMpk + Y8qSjChWsiISDKhKM6c1y4bBQmfVAB5L07A0QfhOvCnrYoWfxRmzLULJANZmS8ACtoUsYrdc673hBuwT + 7BS+NC3XfIv/QiYCBTLXros0YHmkxIYoXXoitGkNnSfi7mpqFQPY6yra/ObSF7iI4VA9lismcJiRiuWh + hiyVv0dDDRgOWcyg8LGhEOGhgYZ0+uvR7m9AR7AxncKNFSjbXYEG9Acq5rEZ6+I07Mh0Y3emC3tSHdif + qOFwjCVHhdsdCTXmsJzrOuF7/8jy5PYsd04lSAwL0GVK+t+U1wL5TIYckr57IMqc/ZHmHIq24GiCLScS + HTiR5MhxafdFWbJXeP6uMBOmgwyZ/v9R9hfQXSTdGjfKOBri7u7u7m6QhECIEieKQ3C3ECy4BHd3Gxic + UXxglDHGFR30d3d3YN55z3fOvd/NWs/a1V7prq56dj//vUu45NwAHWYpKbF9u8g9eIsp8r9O9OrAFO9X + mRPckSUR3VgZ1Y2N8d05VWDDBeHhZ6TvOpjYiZ3hr7BD+up9sa9xPK0bZ7O1uZCjxYVe3fmotxYf99Xn + 02JzPq5w5VJtKB+NyOKDyZW8O2sob88ex54Fs1g3v4WlM6bROnkyi8QZnTt5GhOHj2Ro/zqGVFUztWkE + i5uni0Mzh/WLW1m7YB6r5rWwYvZMljZPVbG8ZRorZglaprNS1i+cOpHZ40czR7BwygQ5/1RaJ42X5TFy + jSksmDqJicMGUVdaQFl+DgNqSpk0bhizZ05g9gyB2DnNE2mRcvPUccxQ0j5PH8/s5knMbZnCwnkzVCjz + AM+ZIdeaNp6WyWOZNXEMzRNH0zJJKYudOIo5sn7etHG0ynnmTR7DHFk3f9JoFgiWyLq2mRNZPXMSK6S8 + dPIolk1oYsn4kSwaM5KFI6X+I0e9wEhaRw1n7oghtIwYxMzhA2kZPZQFk+VcU8ewcMZYVsydxOoFU2ib + L+ebO562eWNZv2Q865eNY82SkaxcPJglC+pZurA/y5fUsmplAxtWDWDzuiFs2ziczRuHsWxJf4YPTSE1 + 2U76gzfQ0e2Aps6ragpoLaN2AbiTnjYdddvL/wjABt1VdBd+rylcX0PW/UcANsLI3FD98aax8HglRaKp + pa46r5iJtQ5m9lpYOWng6N6NgFA9srIdGTwogoVzc6TeufLcM9jUGs/OhdEcWBzOO8si+Gh1NLfWx/Pd + +ji+WR3B50sC+WSeL5/M9uazuf58sSCErxZF8PWSCL5dFi42mFsLvPlyrgtfz3Pm23kufDfXle/nuQuH + 9eenZaF83xbJdy8F4PWpqgB8e0MWP2/I5M/1KdxZEcmd+X7cbXHn/ixnnsxx5fFsZx602POg2Y77zbaq + /Y8ArIjBivgrZcFfM6y4M0Zc9fAAAP/0SURBVNNGTQ+tzAX8UgD+W43+Fe682J2nizx5vsSLZ0s9/x+p + n58q2xUsfQnhugqWtePJsvZU0E+Xy/IKwUpngZxjpS8PVwbxx9Jgvp0fyI3mQK7MDOHSzCg+mB7NidEB + 7B3gxo5aJ3Y3OHNoiCenx4dwcVYcV2YncKUlnmtir7YkcHFGNOfGB3GiyVfgw9mxIXw4NY6P56Tx1ZIc + vl/Rl19WtQvA3yzM5ou5GXzWksqnzcl8NiNFoAjBafKcenJraQm32qq5tbaBT9vq+WheOR/MKuPKvBo+ + Wdog2wbwdVujoIFvVglWN/DVyjo+W1LJjcUVfLy0gs/W1HFr0yC+2TqEb7cN4/aO4Xy7ZSA3V5RzbFwS + +/4RgJM5OCWHw83FnFo+iA+3T+PdnS2c3t7Csc2z2Ld2GjtXTGD78nGCiexaPY0DG+ZwcONc9qxtZvea + GRzfPZ/zR5Zz8cwaLp9v4+290zi8cwJHdo0TjFftoZ1jObBtFPu3jmSfYO+WEeyS92rHugFsXdPAllX1 + bFpVx4aVNaxdUc26ldVsaOvPxrYasVWsX1XBhtXlbFpbxpYNJWzZWCwoZPOGAjauLVSxYW0+a9b0lfc3 + j5XL81ihYEUhq1aVs25tDStX9qd1XgUts0qZPVvKrQNYtFD6jZZ6Bg/JJr8glMwe7sTImBAu/NVPxgBv + GYujok3o1cuLqqooGhriqamPJr/Im/Qe1iSnmZGdY0dNbTAjRsbLeSIor/SguJ8zZeXu9K/yoaJMbH8f + xoxOYvH8YvkfBrJT/v+dm5vYvWUUZ4/P4dqHbXz/5U7u/Xqch3+c5O8/3+HuL0f47bs9/PLVDr6/uZGv + r6zm1sUVfPLBYj75aAmfXl7MzUuL+OjcbI4dGMuubQPZsrmelWsqWLK6lPmri5m1PJ/Ji3IZNz+HUXN7 + 0DQng+FzMmma3Y6Rs3owsrknTYIRMzIFWTTNzGZ0c28Vo2bkMnJaDk1Tshg2MZOh43swaEw6A0anMWhs + OkPHZjJ8bE+Gjpb1TbJ9lOw7No9J0yqY3TqYZW3j2bazlYOHVvHOyc1ceHcPH988zdfffMgvv33C3Xtf + cefeLb7/8Sqff/ke16+f4vq1U3x16wNuf3tJysc5cnA1q1fKmNIylOkzGhg2Ip+6hh70K48jt28QWb3E + JxXulN7Dk5R0dxKTPIhL9CQqxp3wSFfCQh0JCrYlMNAa3wBrvH0shY+ZCx8zFz5mLn6TlfBDK6KC7IgP + tSNROGFSiDlJ/oZkBhpSEGFBaaQg1Jgy6YcrhZ/WKBGxwp0HxZkzSDhJY5QJdeGG1EcaM0D4xUCBIvYq + Ub+1wlcaZHtjjCmN8eYCMzXyd3CS7CfcbECiGQNTLBmWaavyu5F93BmT78XYYl/GFvkwPM9NOLwt1Uly + /WjhSvGGDO1hw4RCD2bVh7JsTArrpuewrbWA/W1l7F4h78aCXFZNT2XBmChahoQyqdqP4X2dqMu0ojbd + hoY0expS7RmY4cTgTGcGpTtSn2xLbZwlNTHmVEudq+X/qZL/t3+o+BzCx+tClB/waau2IUwRgw0YIn6D + IgAPipb/LcxYuKEhtQH6VAq/K3Lr1i4AOykCcFd6OHcl1VG4vM2rRNu8RpTN68Q6vEGKjG8Z3lr0kPet + R4AeGcoUeUoEsOLH5LjSv8Cb4jxXeqZbkhyvT5xw3LhoLVLlfuRkWdEr24LMNH0SYjsRFdqBqMAOxCoi + sCApuANZMR0oyHiD8txuNBTqMahYnxGVJkwe7Mys0X6MG+jKUPEtq4qtyUrVJjLkTcICO6spoCOEw0YJ + b4wMNiQiUBGADQnx1yU0UFesjuwn/q5sj5fnrMwPrEQDJwg3VVJARyvisPDPhBA9ksU/SVIEYfGD4v00 + SQjQFp9Fn55y3xQBuGe4qSoAh7t0ItypI5EunYlwbi9HyP1TygqinLsQ4aIh+3VTf+yqpIxO8BE/Svhy + gpcO8V7axHvLNb3EJ3PXQ5kbONrLmEgfC0LEN1GmPXO10cLFSgMnC/FdFAFYfB07087YmynfOLviZtsN + TztNPBw0cLPvhpudBi523XC27YqzTXsKaCfrrrjYd1ejgD3+JQC7OVupArCtjQkWloZqQIkiwpqY6qnR + vrp67QLwSxH4v4Tg/xKAtdE1bBeB9RUBWDiTgSIAy3naU0Ery0pZrJI6Wqwy9Z2ZXM/CUhGE5fpWJu2i + sJQVWFubYGtrLn6btdTR6h8BWKmbvnI94W86erpo6xmgZ2SIgZkhVvK/uLkpUZkWBPqYEKLcVx9teklb + rxefZLz41M3yzs7tYcmcfwTgrsxP6MjcmDeYH/sGm3sbsafQgu29DdnYU5PN4guoAnA/E/ZVWLG3ypZ1 + +YbMTe3EsMBXSDeRNqz3KnEm8m7YKlHzmqSJT6u8I32C9SkTf7kuSptRCZrMzujO5nwlA6Am71ZrcrlW + jxsDLbjeYMmZEj22pb7GuoRX2JDyOpt7vMXW7O5sEH9kVQ8tlqZ0Z350N8a6v8pIxw6McXqF6eL7bclw + 4HRZENcGxfLZ8FguVntwvJcRRzI1OdfXiBt1znwxxJevRoby+ehwTle7syXXnMUpusyK12ZSpLb4e91o + 9OxIg/j+g3zE75NxdLB/F0YEdWZ6rBbLehqyrdiMQ+UmHC3S5GRBJ94r7Mi1gs58V6rD72WG3Ks240Gt + FXcrzflLjQo24rdKY36qseD2QAe+Fp712cQIbsxJ59KC3hxrzma99IWLhyUxf2gaC5pyWD6hH6um1QkG + sGLaYPGLhrJ03kimTaijqiyDmAh37K31/58CsPlLAVhpU4r4a4qFtSnm0l4MTXRUEVhfmc/aVBszJUOn + 8qMHZwvh6lbYuZip4q+VvQFWDga4eFri6W+Lf4gzgWFuMgbZ4+lrjZuXJa4e8s7Ie6kIwG6e7QJwgOwb + FuRErOybGe1LfmIoZSlRqgDc0COJxgxBWqKKgRnJDO6RKjaFupQEqhNjVRG4f3I8FQkxlMVFqZHApYIS + RQQW5Me2C8B9FAE4MoQ+EYLwEPqGhZAXGkReSDC9X0T/ZgcFkBnkT3qALyn+PgJvgReJPu7EeboQ6+ks + fY4rcR7O0j/ZEmprTYilJREW0p9ZWdPHTfpvOWeDXKchOkTGwBDq5doNceEMUCKCYyMYHB/1DwYmKIhh + gKBBEYAFdUnCuQSqAJycSHliAqUJcVSmpzG4MI9pgwewdPpUtq1czjsH9/Ltrc+5p6SBfvyQp4r4ev8e + n336Ce+cOM6ePXs4cuxtLl+9LnzjKy5evsqRt0+w7+AhDh87zulz51Rs3b6dRUuWsGTpEjlmN598cpN7 + 9+7y5Mkjnjx+wIP7f/H1119w+tRxDhzYy5mzJ/nk04/58afb/Hn3d1WQVQRaRQB+oKRkfvyY2z//zLGT + J5nVOp/+DQMoLCuncehwVq5bz4dXrvHj739y5++/+fvZY/5+/jePkDIPeSxlFbJGwdN/QRWAlX1fCMAP + nz+R5edyzaf8Kuf79MannDxylDULFzJ79Ghmi5+8fOwwNk8dwb7mERyeMYgDY0vYXJvMxooIDgi3fW9U + Bt/M68eddfU82DyA39dU8avw71+FV/4u+GN1JX/J8n2xD1aVcmdJHr/N68HtqQncGhfNT1NT+WN2Dg/n + FfC38N2Hc/ryx9QefD8miVvDY7g6KJz3G8M5WRfOkfo4Dg3uwf5hvdkypDerBuTQXBJHU88AhqR6MiYr + kOl9o5nRJ4rpWUFMSfNhfLwro+NcGBbtSI1wtVwPGX/ttAi2kHHLtCu+9jL+BrtTlCXvSXkBg6tLGd1Q + z/xJk9iwcAkdfP1NeQlFAPby1FNT9CkCno+XrioAhwXKAC6ELyHCTI1mUtJ3REoHrKTwUOZxCFbmBlYE + YPvXCbRXBOA3/xGAg+xfUxFi94oqAisRwPFe3cgUEpEfa01Jsj39Em0oijGhQIhU74BO/yUA9w18k6Lw + rpTG6VCRbERjLxuGFDoyQhyJERVuDCuxZ2iJLcOLZX2BhRr1O7zAUmDBkL5CwnL0GJBrwCAZVIYVGDG8 + SJkP2IABvXVozNVkYB9t1dZkdaJKiFF9VmeG5GkxstSAibUWjKsyUcvDi7UYnK+hisAD1chgTQbldae+ + T1cGFWgyokSfUWX66tzAY8q1GV+hzeQqbWbVGLCwwZSlDSYsqzFiVZURaysN2FhtzLYaY7b2N2JLnRE7 + B1mwa4QVm5ssWD3MmAV1ShRwdyb0NWBMjiljc6yZnOfCrH5BTOzjz8BEZ8pDLMn1NqCHhw6pMiimyLNI + 8u5Ogm93EgN1hLjrkxZpIjCmZ5QRPYW49vDvRg/vjqS7dCDD8RX6+naiKKgbxaHalITrky/Es6cyL4lC + vISU+li+hZtVR9xsuuAupMfNTsiObRccZL0SBfxSAPYRcqXgpfCrwNNdqx1uOrjLNg8Pfdw8DHB00hUy + ooGRURcMDcQK2VFg+C/h9yUZMjDqjqGxpir2KqKvIv4qQrBSNjHVwdhE939Fe1SxIhzLvkK6FPKl/ArO + ykqIjsBGSQGtzAMs5EwhPsqv5pR9lPQoSpoUJUWKAvVXckKelDQuri7WeLnZ4e3hgIeLDe4CH28n/Hxd + VCgRwQqUdYoN8Fcigf2Iiw0hItxfFYBtZeC0kmspUM5tJUTNVgiZIgB7uNrL++YphNqXYBlY/H3knF6O + eLnbCKzknlrK/ZUB1MNMja7yUqOATfF2N5F6GePpaqSWgwNsiI9xIyXBm9REuX6U1CPYiSA/ewK85RpS + v1B/NyHz3kSHeREe5CrrrPERQuzjZIi/kwFhboYkeGiRL0RloDgTM/K7sXuCOTc2ufL7CXeeXXWDWy5w + 2w5+sICfTMWawVeCG5Y8/8CKh2+bcWe3CX9uNuHnNYb8uEqWt3jweE8Uz3an8nhLLx6uKuHy8EQhWvYs + ijBikTgAi+LsWBhjz9wIaya4a9Mk7W2UEO/xLrpMdNViku2bzLV9nQ0eXTkoDtLxEC3ORAnpS9Lgep4e + X/c35s/R1vw9y4FnKx15ttmW5wfsefa2A89P28N7DnDZCa5L/T9WUlfL8rtOPD/pxh/bXflioTMXxjqy + vdSaWbH6VEmflmMm/ZEy37a7Psl+VqSFCCGJCCInMpq8iHgKo+LpFx1BcZQnFXGODMi0Z0KBK7PK3VjS + 6MaWid4cWejNRzv9+fy0Lz99HMCf3/py/1cvHt/x5Nk9TzUtNL9JfX4R/CD1+8qNR3Kfbx+259JqC07M + MmdvkxU7651ZV+BES6YlDfGa9AntTLK3OEEO3Ql0NCBI2oWSjsjSVBFuXsfVuTs9El2ZMiyHdzZO4PO3 + 53Nj3zSOL6mXvimRSunTs6zfoI+8z0VmHamTd3Okg5BXl+7M8ujEkpC32JOnzfsjzflqmQ13Djrx+F1n + aQM2PPvSHL6VZ/6T2F/E/i7t4E8p3zHj+V0Lnili8B+WPPvVnEc/mfD4B2OefC/2OxMefWfKQ7EP5PiH + 31rw9zeW/P2VBY8/t+TJTQue3LDi7yvW/PGuLd+dcOJDeY4rR3ZjVF4HiiI7kO7zqvR3GkR5GhIoA5+n + mxBMN308vWXZX4muNCUqyJSYEHNiVAHYnLhACxKDraRvtCY52JJUWa+IwNnR9uTFOct45PkCbhQmuqiC + rwIlDbQyF7AiBivRv+pcwOFW5IZbky02K8xSTbcbL06xIgBH+skYKc6/8qOp5EgzesSZk5diTmOhCxNq + fJle70tznTfNVe7MqHBRMb3MmUmFtozrY05TL2OGZekzNFuPplxDxioCcLElU8psmFntyNx6VxY0etDa + 4MH8Glfm1bgwt9KR2WUO0uba0VxmL1aJLnZhWokLk4qcGJ/vwqhcaZ+pFtQkyPiYZKZGAI/u5cgkaa9z + K/1orfJnXqkXM/s6MiPPlvnlzizu70prhR2t4oAsrJHxrN6CZY3mMq4Zs7jRQKDH8kH67Jhiz/5ZThya + 0y4A72+2YOcUA7ZN1GLnZF12TdHjwHQDjs424Z0FxpxdasqF5aZ8tNqcK+vtuLnVlS93+3FzuzfvtTnJ + /gasGKLJwkYdlg6xpLXRVt4rY4Zk6lCfrEn/RA0G9TBkTJEtk+VdGyf/o5IWujrZmMoEE0rj21M/VyRa + UifO3OBe7qoAXJvpSGmSFf2SreU5W5Afb0bvGCW9swm50cr8v7Iu0YrSTCcVReLg9k6wlnfeWEW6jKkZ + sm+aCmNSohWYkBRhQEywDmG+GgR4KYJr5/a0zx5d1HKAZ2eiZLsiAMeE6hEaoEFEsCbxclxypCGZUt/c + JEt6S317yjnTQnRID9FV5wBO9NcQ7tSFRHnXUwO6kxEiznBIN7Jj9CjracuAIh9qenuQl2BFlPSNfrav + EuTYkRCXrgQ4S12cuxLkqUmonz7Bfkp2FyUK2FjGKROCAi1VBAfZEBhgqUb4Wlt1U0Vgc7MuL0RgRQDW + wN5WBxcZIzzcTdVIXyUltKODDna2miqUsquMH55e7U6cm5sJ9s562Mu47yz9p4ePIgAb4iM2RK6dHGVL + XpobVbn+jKmIY3xpDENzfCgT7tLbqxOV4XqM7unM7PJQ1o7IlHaWxMzSQIZnOVAY1p3CSB36xRlSHKcn + 76oOeTHa9IpuR79kU+p62DAsx4HhGTYMjpP3KlLeqQgdxoVrMTNCOJrwn+nebzHD603m+HVhQWB3lgZp + sVywQJ7hPM9OtIid6S0Ou183pgZqMUGe2agQceaDNajx70iF12uUebxChesr1Hi+yQCfLgyXZzRaxqdx + wsUUjBeMkeXRAVqM8u/OSF9Nmvx1GOqrw0Dh040+0qal36gXfq3CTziqjxbDZN3oIAOmRZszP9mBBUky + PsZbqQJwW6Qpq8JNWBWqT1uIHpujLdmf6c7eTBc2xVuyUK4zy/0tmgULgjRZIvdyUZhwUuGGS2W8XSnj + 7SolkjjKnAXBBswP1mdRuDFLIkzax+NwebfDDcXqsVju2/wwDVqCOzHd/3VmBLzJ7JDOLBB+vjiiE23R + XTjYy4STwsFP5BiwJ/4ttoR2YFNQB3bHvsqx9G6c7qXNuVxtzvfW5FKBLjeLTfm01IYrwuU/qA3jytg8 + bswbwudrZ0kfsJIrh3dwev8ODm5Zz651a9m7cTNb2taysGUu08dNZMa4caxZvIhDO7dx6tA+Lrx9mHOH + D/DOvp28vXsbx3Zu5ejOLRzdtYkj2zdwdMdG3t61hf2b1rJj9XJ2ti1nz9o2Dmxcy65Vy9khOLJ9E/s2 + rmHBzMmMaOzPgOp+TBw9mJVL57Bj62p2blvDzu3t2L5lDds2rVKx9V/Yvnm1ih2bFKxh1xY5/2axG2V5 + wyoV29e3sX3Din+wc/0Kdm1YqWKfnGP/ltUckuOOCI5tXctRweEtbRzeuJKDG6TO69o4uGbVf2Hf6mXs + XLGYLctaWb94LhuWzmfTioVsXNnK5lUL5ZrixG+W62xcJnVYKtdaKMsL2LO1lX07WtmzYzY7t06X/3MS + O7ZNZv+e6Rw9MIsTR+dw+p0FnDo5n/37ptDSUkqfPF/sHTqho9cBDZ0OaAuf1zHRQpn3t6OuJm/paPyX + AKwl/F5Bd73uYmW9bNMUrt0uAJtgLDASvm5kpvfPjzaNLQ0xUX7waaeLhYMWtsJJ/EOMycr2YsigRFYs + KWX35jqObKvm2MYiTm/K470t2VzcnMknW9K4LfhpYxLfr4nh6xVhfLUkhK8Xh/Ddiihur4rnu7YEvluZ + wO22OFkXKdsC+GaBN7eFq30v+GGhDz8t8uPnZSH8uCKc2ysj+Xa1nGttPF+tTeab9Zl8uy6TH9al8eua + ZO7Kee+0+nN3tgf3Z7nwqMVZeKgjD2fZq3jQbKtaJSL4f8PL6GBV/J3n9I8A/DLSVxF7ny32gKVePF/W + HgX8bzxb7KbiyZKXcFHxbKmrikeLhLstdhY48mSpE09XKBHA7QLwg+X+/LYogK/m+PLxTD8uzwji43kJ + XG9N4f3p0Rxt8lXF330DnDk23Jvzk8JkezKfLkjj09ZUbs5N4uPZCVyeGcP7E0N4f0Ko2HAuTY/j+qxk + vlyYxQ8r8vilrZDfVhfx84oCbi/I4dbsDD6f2S78fjYtic8Fn05L4cbMTL5ZUc7t9Y18v3k4321s4trC + Ot6bUc5HMyq5Pq+WTxYpqObTRZV8vrjd3lxQztU5xXw0q5BLrf24sbI/tzYN4fb2Jn7ZO46/jkzijwNj + uLWulrcnJLF3eCR7R8SwZ3QSx2bmcW5ZPR/vmsp3Z9r44tQqrh1fyUeHl3N+32JO7259gUWc3b+cdw+v + 4d1Dazi7bzmn9y7j3WPSZ51dx6cXN/P55U1cPruED0/P56Mz81R8ePo/+OjMfC6dbeUjKV84PoszR6Zy + 8tAk3jkwkWP7x3Nk92j272hi77Zh7NkyVMXerYNlebC8q4PYt30Ae7fXCKrYu6NSUMHubVUqdm2tkH6o + jI3rSlm/uh9rxM9au7qc1WsqWdVWzbKlVbTOLWfWzH6CSubNbWDRwsEsaB3I2DEFVFcnUlAYQmqaC1HR + FgQE6aoCcLTynSbfj2FD05gwIZfhIzMoKfMnXcbY1EwL+pX6MGZcGjNbejNhchpDh0UwcGAQQwaH0zQ8 + hsEDQulf6c2QgeHMndmHdStr2bCqgfUrG9i0agD7t4/m6N5Jcn9a+f6LHfz5/UHu/XyYP27v4fbN9Xz+ + wVKuvzOba283c/OdWXx2bh7fXFrG7Y9X8M3VpXx1eTGffCD3++RUzh4Zx9uHR3HwUBM7Dwxi/a56lm+p + ZvHmKhZuqmDB5gpaBYpVlhdvkm0ba1i0sT+tayuYL/dq/lrBagXVLFzbnwVrqliwqpy5K0oFYpdXMGdZ + BbNfYO7SSuYuEUhbbFlQRcu8Kua01rFw6RCWt41m4+YZbNsxl73Slg4faeP8hR1cvXaUr76+wE8/X+aH + Hy9x69Z5btw4yaWLh7l+9TjffvMBP/94mW9ln4sf7OH0yfUcOriUnbvmsGrNOOYvGsSkqaUMH9WLYSOz + VQwZkcXAoT2oH9CDmoZMqmoyKK9Kp7w8WZ5RAiUl8RQJ8gti6dU7gh5ZwWRm+JGV6U+22F6Cvj39Kc4J + pF+OH0UZbpSmu9Bf2kNdqjM18dbUiE/TmGTBsHQbxmY5MUm49aReHozr6UJTqh2j0hykLJxcMELKQ5Nt + GZpix/A0O5rE3x+R6aCiqYcTo7Ic1R/oDROO1pQtvkihNzMrQ2gdGM+SYamsGN2DtjFZLGpKYVZjFJPK + hSsWeTK1wo+5A6NYPiaNTbP6smdJGYfX1HFi60B5X4dzZvcg9q8uZdO8HNqmp7NgdAwz6oMZVeLOwBx7 + Gnra0Sh1aBDfYGAPF0bn+Yl/ESDwY2JfX8bJ/6PMN1ofYUiVcPAq4Yb9AzSpFm7X309DtbXCExvC9NQI + YCUzV2OEKTVKhKJwOyWrS4mnFvnCwXurAnAXspy70dOlGyn2HYm1fpVIy1cJs3qVKLvXSHbtSqaPNllB + +uSGmZAlvC5drpstvkBBuj2lvV3JF18tI9WchHgDYmN0VCQmGNIj01xgSnKiNtGRbxIR0oHo4A7EiU0U + q6SD7hHTgfyMtyjLlXrn69JQKD5muQkTBjjRrAjAg9wY0t+BcvE30xO6Eh74mvgo4kMEdCMsQFtN+xwe + KAgQ/1oQ6q8v23UJEa6q2Cjxd+Pk/4+PMiVB+Ls6J7BwyKhgXfHBtUgQXyYlTJ9k8X0S5P9K8NciSXhx + unDSrBizfwTgFCXgyFODWPeuxHt2J9lXW4VSboeG+EHiN8n9jfXSJNKtq4ok8b2TpU7JPuIzKdZXl0Qv + JQJYm3BXLcLF/wjxMMbf1QgfZ0PchFe42WrjYq2Fo+LbmHfFwaIbzuL7uIov4+6giaejlqC7lDVUONt3 + xcm2C052XXC06SzoirOdhhoF7P4vAdjdxQoHe3NsFLFM4TPmwmP+EYB10NXT/L8FYOFQChQBWIGusRJp + Kcsmynyrytyr+hiatUdlKhHB2sKrNLS6oqUr55H9FcFOjQw2V75rGqvfPJXp7uzslRTR7XByssPNxUH8 + tfZ5gpVAGKVuhi/EZj0DfTmvATpGBnI9Q8ytjeUY5dujJWFByrysFiQHi48WJb51miNjc9xo6e3G/J5W + zEvRY16CIgB3oTWxE/Ni36RV/IGteSbsL7Fmd74p23J12d5bjx35+uwuMWVPuSXby6xYkavPzMTO4vt0 + UAXgRNM3SJP7neGiRYaHDkluGsTJe5IkbSNHxqSSwC4MiurKjLTurO+rw4Hi7pwu0+D9Si2u1plytd6K + 82WGHMjpwq4eHdmdJVbKe3M1OFioy6FiAw4WGbOnjzErYjsxV9r8LJ9XmB/wFttTTDhT5MqNxmC+GxHB + rUYvrpZYcDnfiJul5nxd58DtwZ782BTEd6OC+KC/PQf6GrBd/rcdBaZszrNkSZoB08O7MT6gCyO8OzHU + 8y2GiK/Z5PcGU8I6sjxdR+6BCYf7GXE0vzsn+3TkXJ83uNjnTb4s0eTHcn3+qDbhbrUFf5WZ8GeRIXeK + 9MXq83M/A25Xm/LNQAc+b/Lik6kRXJqRwJFxEaxq9KG53J2JxV5MqwindUgWK8aVs3y8jGNja2gZV8P8 + GUOYIra6LJPEWB+cHYzVFNDK92klMtza2hIzM0XoNZQ2pWTQNFWhCsBWwtmFq7+Eibk+Fsr3dDszbByk + vTmaYW1vhIWtAeY2OiocXE1w87FSBeDgCDcCg53x9bfD288WLx8bPLzlvVG+GXi1/3g8JMiRmAgPUmJ9 + yU0OoSQ9mvL0WFUArs9IkLEoQY32VdCQniR9eKqKurQEqhJiqEiIojIxhsoEOS4hkvL4aFUA7hcXpQrA + BXERqgisQIkGzn+BwuhwCqLCKIiU5Yhw8iLCVGE4OzyUnmEhZIbKeCnICA0gNdCHBB8P4rzdSPBttxGu + joQ62BFkZUWIuSnRFtI3OzpQERxATXggNREB1EaKjQqiNjqYutgQGmNDGRgf+Q8apb6NUt96qXt9Qhx1 + ghpF1BZUJyeoqEgSpCRRmpJIWXoyQ0oKmTiggQWTJ4mfvJyLF87yzRefcu+P33j65DHPnj3hDyl/+eXn + wjuucvPTz/j29g/8/ucdVST9/NZXfPL5F4Iv+fzLW9z8/DOuyH5nzp/n5JnTXLl6me+//44HD+7x+PED + njy6z4N7f/LNV59z5vQJDh/cx/lzp/js8xv8/Mv3/HXvdx4+uccTRZh9qoi/D1QR+I97d7hy4zq79u+l + dfFips+axcJlyzj2zkm+/PobfvvrDnce3lfF37+fK4KuUr7HIx7+F57w939BiRJu31+2PldkYXj4DP68 + c5fvv/qa6+9e4OSObexbspjd82ZxZNEs3lk0jbMLx/N+axMfzqzl7Og+nBmezgej0/lkWi6/LK3gwaYG + Hm5p5M911fyxtoo/xCrlP9dWc2dNf+4KP3wg5XsrS/lrSRG/txbyU0shv7aUiD9YxYMFtdwXLvjnzHx+ + nJDON6Pi+HRoOBcHBHG2JoCjVQHsrQplV/94dtSls6mxJ2sbs2gVrjZRONjYDE+mZwewsCCa5QUxtOVH + 0ZYbyuJ0X+YkujM93pmxsU40RtpT4G9Ghrsh0U7KVAim9Iz0pLJXIoPL+jBS+SH7wHqWTJnMtsVL6eDj + a8J/QY3MaI/kVCKAlQ+FEUGGMogLsZCOPkUG94QQQ2JlwFdSeETIIBzq2Y0Q184EOnUkWBDi3Ikwp7cI + dXxThZqO0OE1NQI4yrWjDNwaqgCcF2tNWaoTFakOlCZYUBypT15QF3J8XlPF3xwZABQBuCSsK+WxulSl + KIKuNYPyHRlW6srQMmcGFdrQmG/OgL5mDMgzZXDfF5CBRhF+a3tq09hLn4F5BgwpMGBYgaFs02NAb61/ + 8D8FYGVO4FGlhkyRgWNSrQVjK01oKtVlWJEWQwu7MyRfUxWJB/TSoDa7Mw25XeXcOowo1qWpRIuRMgCN + KenGhNJuzKjSpbXeRBWAl9caqwLwmgp91lUYsKXasB0vBODdTTZsH2PHhlGWLBtswNwafSZJfUdlGQlJ + NmFstjWT+rgxuocbDXG2lIWY08fPkEwvbVUAThIipIi/8X7diRNyFReipJQ0IFmJVoqS/cL1yAzqToZP + ZyGar5Ho+AqpYtM83iTZ/S1SPbuS6taFeIc3ibWTZ2b9Jt7WHXG37qQKwJ72Gv/8Es7JqpM6D7CbowZe + rjp4uejgqcBd6/8pAAuUVNBenkrqRyNcXPWwsm6PAP7/VwB+Kf7+vxGA21NH/+8CsLV1u1XWKVD2eTlH + hrESOWyip0KZJ+N/CsBK9K+rkxWujpZ4uMvg5eWkQpkX2NPDXl33cn1wsFd7BHCYr6yzx85GrvsvAVhJ + /6wIwM72lnJuB/y9PQjy8yLA1x0/b1d5D+XcHrYCa3k3bfDzsVXTYvj7KWWxPpaynwV+Mlj6eprL8RaE + BtoRF61M/O1JSoIv8TEeRIW5CYl3xM/TFn9PB4ID3IgM8yYu0pfIEA8CvW3xdDaW56uHn6OQeldDIdk6 + 9BUHpz66M1P6aLBznCXXN7rz6ztePL3uDd+6wy8O8Lu59LDGYg3hRyO4Zcrz61b8fcGc+29bcO+gNX/t + tOC3Lbb8tcOLR/sjebw7kXsbMvl1cR/ODYikLdmKFnF2ZkeZ0SL9wuxYO5ojbRgj7WiQ9VsMkPY2XNra + SMeujBGnabbdK2wSMnU8TJvzUdp8FK/NlTRNbuXr8GO1HnebTHg0zZxnSy14tt6UZ3vEHrHk6WkreN8G + rtjBx45wQxGDZfk9WzjrxN+H3PhhtRvXZrpxQpyhtiwrBnt0obeZOE/yPmRJ+80MsqdHuDfZMUrqkFgK + Y5PoFy+DsAzWJTHeFEXZCemQ43o6MkYctmnFbiyod2H1GAf2L3Tm/HZXPjnjze1rPvz5rdyP33x4/pcP + /OUl99FV4CL3Uur2ozNPv3DmtwsOfLnfjivrHLgw35WzU/x5e0gAG4Xcjc3UpVBIZJqXOGtOWgQ5GxDi + ZYmPmwnW5p2l/b4hbUebvpk+zBtbyPs7p/HtycV8tm8mx1trmVsWSaWfLr0t36BEHJlaWy1GyDkme5rS + 4m3EHI9uLAnszK4sPS4MMuezOdb8ttWRB8eceHTeiidXzXj2uZm0BWkDP1q+EIEFf5rK/2PO8z/Nefq7 + BU9/M+fJz6Y8+dGMx4oA/L35P/j7e0uxgtvWPP7WkidfSvkz2f8TKx5/bMO9iw78et6NTw+4s226LlPK + XqMqsQPZAR3I8NUQJ9CQYE8TVQB2lr5FSTEbIP1iWJAxkQHGRAWaq1AE4PhACxICLcX5FMhysgyWaSGW + 9Ii0IzfGkcJ4VwoTFPHXmb7xTkIG7f5LAC5KcFRTQCvIi7KhT4QtuRE29IqwJiPMgsRA5QdS4vCKkxyj + jJvixKdEmdMzXonqtFAjgMfX+NLcGMicxgBm1bSLwKoQXO6mCsBjcs0YJn3+kB66DM7SZ0RvQ8aq0b/W + TKu0Z1atK/MbPZnf4MncOjfmVLswu9qZ2RVOtAheir8zSx2YWebIrAo3mis85fxeTC/1ZVy+p5zbjoYU + S1UIHpFlz/i+bkwt8ZRz+Ms5fJlZ7MHk3vYCeRdLnZlf5cbsfjbMKjFhToUxC2vMWVwnaDBlUYMhC+v1 + WTJAny0TbdgzQ5ygFod/RQAbsmOKLjun6LF9kg47J2mxZ6o2h1p0OLXIiHPLzPhgtSWX1tnw8WZHPt3p + wfWtblxYaSvn0mftKG1WDNNn9Whblg9zYHKJEYMzNKhP6UJNcheGZuszTuo2vdqNiWUuDMmxon+qCRXx + xvSLNVZTPytz/w4SB3V4nrdqK1NsKIwzbU/9LLZPrCL8Gqlz+yoCcB95XvlJ1uJwOKjom2xLr3grMmR7 + uiA1woQ0QUqUqSr+JscIok1Jkm3KvFcRAVoE+3QjUMZUVfh9IQAHeXclJkSPhEgjIgKVfbqqv65XooHT + YkzISbZUBeDsGFPSw/RJkX3SgpWMHjKWB2iSKOdM9tMkU8b2rAhd0kO7y7iuTUGKObV93Omf667WO054 + QKDj6wQJD1ME4CDXLgINgoUnBEm/HuStr0YA+8k77iPWx9sEXx8TGVdkDPGzECdfmfNeS8Y+DRmnlFTy + XVTYWHXHScYIN1flx4LmAlNVLFaifhXx19ZaQ40GdnYxUAVgb28ZIz3NcHI1wNFFXxWA3bwMZZ2hbFME + YOGT4TZky3tVlO5OY59AhgrqU53Jl/87x/1NyuR/H5Zqw7QCX1YMTmZRfQxTi30ZJm24OEyTkkgdcewM + KYs3oDhOl3wZD/pECqJ01DTgA7IcaMp2YFiaEo2iz2C5X8PluDGhGkwVTPOX8c3jDaa5v8Fs3y60BnRj + WZAWK+W6i7xl2asLc8W2yL1vFm41XZ7tFNk+PkiTEcGa1Pt1or/n61S5v0q18Kl6j7cYLM91pDyvcUE6 + TAzSFegw6QUmBmoz0V+b8b5ajPXXZZSfHiN8FSFYxjpZP+AFGv20GOSjSZOfNhOCDGiOtmBegg2t0g4X + xpqzJNqc5dIGV4SbsFLaioKNsZbs6+HOnh4ubEiwZL6M39OF36n/W6AGraE6zA/RZZ7c29ZweWdlvF0a + bcaCcCNmyf/V7K/FPOGMy+LMWSFjWJu8H23CzVfJO7QqyYzlcp8Xx2gzTzj57NAuKuaFdmZ+6JssDnuT + 7ek6HM414pDw7u2xr7MhuAMbgzqwK/ZVjmZ043RvHc700eRCniaXSgzUjygfl9vyQZmMa9XBXByXz8et + w/ls/Vw+2bWay0d2cObQTo7s2MS+zRvZu2kzW1atY1nrQuZOb2bxnDnskvWnjh3iwjtHeffEMc4fO8zJ + A7s5vncHx3dv58S+nZw8uINTB3dy5vBu2b6Pd/bt4PC2TRzatI7961ezb/0q9q5tU4VmZdu+zetYNGsq + Y4c1MmJAf2ZMGsmqlfPZuX0tu3YIdq5TsXPbOnZsWfNfUEThl+VdW2S/revYs229ir3bN7D3RXm3rN+9 + VfZRsZo9W6Qe29aqOLhjPYd2bVSF62M7N8n/sYkTe7dwcv82Tu/fysl923hnzzZO7tr+D07t3sE7uzZz + dPtGDihi8/qV7NjQjm0bV7Jzi/yPO9dyaM8mDuzawB75X3ZvXSl1Wca+7UvZv1vs7oXsVkTg7TPZuWOm + rBMn+cBcThxr5bTwhjOnF3Hs2GyWrxhIdV2cjLUKP++Apn4HdE06oWeujZaJFp2Fv3fU7UpX4fBK6mdt + w+5oGbRDEYC76ylCsBZaRrpynD6GlmaYWJqqHy2NFS5ubiIc30wVhU2sjDG1aReBrRy18AkwJbOnH0MG + Z7Bp3WB5tuN47+hoPjg4iGsH6/jscCW3DpVwe38eP+/oya+bU/hhnSL2RnF7ZRQ/rY7lt41p/L61J79s + zuKn9Zn8uC5N1ifyw4ooflwexq8rBMtDxCoI5ddVkfy0Korv26K5vSqOr1fHc0v2/2ptGl+vSeW71Un8 + 1JbAX8sj/yMAN7vysNmJBzPbhV8l8rfd2v4/hN8HSsTvv6CKv/8SgP9e4KLiyUJXni5y4/kSd54JXkYA + v8T/JQC/xEsB+MliRzneiWfLhGMu9+DJch/uLfXl5/k+fNHsybWpXlyc7M9nC1P5dEkmV+YmcWZiKPsH + unJQ8M5IPz6cEskn81L5sjVdkMbnUv6kJYGr06K4ODFMxeUp0dycncKtBYr425dfVxfy+6oiFb8qAnDr + CwF4ejKfKsLvlEQ+n5ooNpkbMzK5tbSUb9Y28N2m4Xy7YSTXFzVyYUo55yb248PplVyaVc7FWSVii7jS + Usyl5iI+mlHAu5N7c3ZSDhdm5nN5cQWfrxvEd9ub+P3AZO4fn8HdI5P4etMA3p6Uwp4RUeJ7x7JnbArH + ZwtHXjOYLw/P5vePNvPTR9v46r2tfHpuEx+fWs+1U+u4fmY9109v5ObZbdy8sIsb53dx9dQWLp+Ufd7d + wmcXt/HNjR1898l2vrq+ni+vrRWsVvHF1VX/4Nb1NXz18Tp1/c2PlnPt3YVcPt/KpXPz+fDcPN4/PZvz + 78zkzLGpnDoyhZOHJ4udyKlDgiPjOXV4LCeOjBAMFQwRDOb44aEqjh0czMG9A9i7awC7tjewfatgywA2 + yf+8Tu5n28o6li2uZcG8/iyc38CypcNY1TZS1jcxbWoZgwZmUlEZS3aO+IjxNgSF6OMvXCQ52ZqKijDG + je3FrOYSxk/qTf+6CPrku5NX6MbQ4QnMX9CPFav6M29BAZMmpzFuXAITJ6QwbXIGTcOjqe/vx9AB4cyd + 0Zu1y6pZt6I/a5f3Z/2yWunbB6jYt7mJD07P47ubm/n1qx38+NlGPv9gEe8fnMjJzcM4tX4w78nz/FTu + zw8XF/PrjZX8fH2pituXF/H5hRY+Pj1N7ud03j8/jdNnx3HkxGj2HGti57ERbFfw9gi2KTjeXt55fBS7 + 3h4j20ez9VATmw+OaLcHhgua2H64ff3W/cPYtHcIG1UMY8Oe4f9g427BriYV66V+a6Xdrt0k5S1j2bBl + Ipu2TWHLtuns3DWLvfvmcfxEG+++u5mr1/bzxZcnuHXrJDdvHubSxT289+42Ll/cy1ey7vvvzvPNV6f4 + 5OYhrl/dzYcfbOHs2VUcOjqfbbun0rZ2BAuWNjB/cR2tS+rF1jN3QS2z5tYwY3Z/ps3sz+TpVUyWd2fC + xFLGT+gnKGHs2GJGNBUwaHAvGhsyqe2fTG1VInWV8QyUclNjOqMaUhheHcfw8giaCoMYkefPsGx3hvZ0 + ZmSOCxPzPJhR5Cd+QpD4CMHMLPRnSm8vFTPyA1RMFt49qY8Xk/J8mJLvw1ThclMKFfgxVfafXuzH5Hwv + JohvMrXEjzk14SwZmsTW6QXsmVvBgYXVHJb2uru1nM3NBayRd3v52AzWTMlmy+wC9i2p5PiGQZzdOYIP + Dozn4tsT+fjsNK6enMyZXYPY21bC5vm9WSHtcfbgCCZU+gjPdKZRfJ/6TEG6PQMynRib78/EokCmFPkz + rUjqLXUeKdvqhRNV+Henwq8rVeJzVvh2o8yzC6XCDSuEF/YXrtgg/KshwlhNcV0RoEs/b00K3TXo66ZB + rlMXcpw6k+3c7R8BONWxC3E2bxBh8QohFh0It3qFROfOZMhxOcEGFMRY0kd8CkUAVnyAXsLD+maKH5Jp + TXKiCTGx+kQrAnCcnryj+qSmiS+SbEhMVDfCQl4jIuQVYkI7kBjWgWRBiiAjqgO9U96kX7YGVXna1BYa + MKjUjLENjkwb6cOYQa4MqrShtI8hqTEdCfHtQJDv6wT7diZYuK8i8iqib3sEsCICG7SvewFFAFbmCU6M + MReYkSD8NC7MSBWAo4SLvhSAU8P1SFK+TwbqkCzbMoR/5ginzY21Fr/GnPQQQzUKOMlHixQ/XdIC9ckQ + DpwWoP8CemQEyzq5T4pYHK+Iw8KVUwL1SA2U/f1lu/jfigAc76lFhDL1jZPARYdA8UX8nA3wdhI/xEGZ + 81r8GSWrkY0WzlaaOIt1E9/HXfwYRQD2UNEu/irfO10duuFi3wUXB0UE7qrC9UUEcLsArGTqs1IDRJwc + LdVvfi+/L7ZbA1UA/p9T3bV/79Rqh8nLiN72lM+K8Ptv8fffArAiFGvqdKObZme6a3dFx0BLXW9ioXzX + NFIjgG1sLXB0shW/zP4fuLo54enhgrOTHcq8wYoArNTPWL22IiwbomNogI6xAfpyLXMrI/HtTPB0tyBM + +cYYYiP+sDUF8XY09nBlfG8P5uS50ZplzfxUXVqTxN9I7NQuAMe/yUKxOwrMOVJhz6FSa/YUGLM734id + BYbsKjJjV6kVGwvFr8nSZ2p8V2q8OtBT3osMm470cNagh4cumZ7yPMWfDbN7gzAb5Rv2a/T2eI2akLeY + ktSNtX202VuowfGSLpwt1eDDSkMu11jyfqUZJwr0ONxHS6DNIbFH87U4V23Ku7UWvFtjxdlKK/b20mVD + YlfaIjqyUnyafWn6vFtkz2e1Xvw0JIBfBnnxTYUVt4pM+K7Mgu/72/BTgzO/DpHtw735pM6O8yWGnBJc + 6G/N2Rpn9udbsiZF7kdkd6b4d2Kc15uMFF9xjNcrtIR3Yo34THvyjDhSqM+xPt04kfMmp3Je5f1er3Oj + oBtf99Plpwojfi8z5ld5X3/to8vvvbVV/CR+1HclenxdY85nAx34ZKwPVyaFcnyUP+vqXaQvtmZsrg0T + +nrSLH344uH5LBjRj1nDSpk8tB9TxlQzelg/yovTSEnwx9PNEhtLZerD9rmhrawsVAFYmX9aEYFNpKxy + 8xdTKppaSHt+ATM5ThGALW1NsbI1kbLyowE94fU6wuM1xWqq8/w6e5rjF+xIULgrQaEuwisc1EhgH0UI + 9rXGU81KYYGXIDLcjeR4f7JSQynOjqMyJ4n+WUk09EplQHYqjZkpNGQkqxiQlcbg7AwGZqdTn5FEdXIc + VUkxL2ws5UnRlCfGUpYQo9pSQYlsL0mMpp9sLxEo9h8kyrYEWS8oFhTFR9NXbF6cghgVuXGRZEWFkhEa + SEqwLylBviT4exLl6UakixNh9nZE2NoQa2dLlpsLlaFB1EYGURcVQH10IPWxIdTFhVKfEEZjYgQNCZH/ + QWJku/gr9VME4Np/CcBKBHC1oDI1mcq0FCrSkilLS6ImN5vB/YoYP6CB1qmTOSI+4UcXzvLVpzf587ef + +fvBPe7du8Nfd/7gt99/4bc/fuePv+5y78FD7j98xJ937v0Ld/njzl/8+vtvfPv9bW598zU//fwjd+7+ + yZMnD3nyVPDoPvfv/sHXigB86jiHDuzh3Nl3+Oyz67Lvd7Lvr9z7+w8ePb0veMCDx/f4+8kD7v99n29u + f8OHlz4UDnOInXt2c+TYMW58+onU6Q/uPrgvx93l8bMHAjn2uZSf/8UT7qt4/AJPefAvKCKwIv6+hBIj + jDqPsJL++o/b3/LDx1f5/ORxLu3cyoW1y/hw/SKurp3Lx6un83nbeG4tGszN6f24MSmXL6bn8u3cvtxZ + Vc0j4c73N9dzZ0P/F6jlzsZa/lpfw511dfy1toZ7Gxp4sK6We2tkW1sjfy0byJ2lg3mwfAQPlg7nr3l1 + /DA5j69Hp/CF+BsfDw3jgwEBnK7152i1P3uqQthZFcv22hQ21WWwvr4Hy8oTae4dxIwcXxb1DWFdvzi2 + lsaxoyRW+sxotvYOZX1Pf5ZlejMv05dJ6V4MiHGkn/TNvfwtyQ6ypzjRn8a8ZIaX5jKufwnTB9axctpk + di1dSgdvH2MU+Pqa4usn8DXC38+YADU6RPlAZ6gKwPHhpqRGW5EebaGKwIlB+sTIoKsIwGFeGkR6dSfc + Q6wgShDt0ZVI184qlFQekS5KKo+OxLh1JkFJVSwDeE6EGWUpztKAnShNsKQ4Uu8fAViZAzhXyEdBoJCV + sG6Ux7QLwHVZljT2sWdIsRMDSxxokM61tres72NEXW8jGlUY0phrQF22LjU9tNQoYEUAHlSgr4q/avrn + 3i/TP/8fAnCZIVMbrAU2TKyxYHSFASNL9RhVqktTsS5DhTw15nST83eSOnWRc3ZnWL42wwq605TfhaaC + Towp7MSUci3mKwJwvZIC2qRdAC7XZ22ZAZuqDNn8IgJ4+2ALdo60ZcdYRzaPsaVthDkLBpoyuVifpp7a + DE7VYliGIcPTLRicaEn/KFNKQ03JDzR6IQBrtf8iTplTQ6D82i4mWEvIly6J4UK4lFSSYXpCJjVJ8+1K + ovtbxDm/SrRDB6IcXpWO6hUiHd8g2rEjEXavE2b7BoHWb+Elg68qANt2xcuhO97OWng6a+KipECx7SJk + qKsaBezh/AJumkIq/iP8/lsA9vYyxNvPBA9PGVyEYJmadsPIoBvKPMD/UwBWyZCyzlhJAS2Dh5oWrl0E + Vqypha66TvnF2kvR10hJf/ISJu14SboUqGKvkKF/w1xJzSJ4SdBeCsCKfRkJbCWDnSIAv0wB7eZsjaO9 + OY52yjrrfwRfZW5gVyF9yjoF7m52amroqMgAQoK9cHOxVcmgtZWxCjW62NwQOyvTdgHY1R5fGTj8vNwF + rioUAViJAPbxtMbPx54AP3sCA+wIDnIgSBASYEuwAn8bFYr4GxnqpArALyOAk+LEiY/yJDzIRRWA/Tzt + 5RhXIsO8/hGAA7xt1fQ1rrba+NjrEuyiT6ybNrlC+qsjOzO+V3e2jrHk2gYvfn3HjyfX/OE7L/jDGe6a + w31jsUbwm9jvTOFzax5fFpy34/EpR/4+6sC9fa7c2ePNwwNh3NsZzc+rEvh0Zhr7y/2ZG2vMJGmzU6Vv + mSKOz5RYW6ZE2dDkpUO99RtUmr1BnbTFIfYdGWXzCnOcOrA1oBNnYvW4mKjHtTQ9PpH3/btiPX6t0eX+ + MCMeTzbiaas+T1fp8HS72AOGPD0tdXvfEq5awQ3b9pTVV6xlnSyftePJMTf+2uqtpgL8YIwP24qcmCD1 + KrRU5gF+lVzpK3PCnMiJ9qd3fBT5CQkUJSRTmpQkiKFfgh8FkQ4UxShRiLZqWqmROc5MKrZjVp0FK8eb + s2eRDed3uvDZWU9+uenB39/7yH3zk3sp9k8PuOMi99JRvbfPvnfhzjUnfjrnwreHvfh8axCfrorm8uxY + jo0OZU6RJZXRXUn3kv5W3s1gcWxCvSzVuaFtLLtgbfEmQT56lOUGsmJqBZf3NPPDyaV8uWcmJ1qqaMkL + oMqjO/nmr1Nho8FgJwPGe5nR7GfD/ABL5sq7vEic3m1yf0/1N+PqJAtur7Tjzx323D1swd/vWvD0qgV8 + IffvO7mfigj8qwXPfzPl+Z9mPPvDjCe/mfP4N7GKAPyTGY9+MBEoQnA7Hr0QgJ98b82T76x4+o0VT26Z + 8+QzWf+JNQ+vOfDXh258944Px5dZ0Tqgc3saaHFue/p1FidRjxBPYzUNurOLksFCmbde+aWyUbsAHNAu + AEf7WxDrb/Yf+JiSIEiRbRlhtuREOdBXBs/8OGeBI3kx7fP9vhSAy1LchCw6/5MWuiBO2S6IshNH3Y6e + keKYS58cF6xEdxoTG6akwZLzR5mTJeObEgFcm+cgY4knMxsCmd0QwMxqT2ZUuAncmV6mzB1tx+gXAvCg + /xKALZhcZsuMKmfmNngyv9Gb2XUezK5xZVaVC82VivArqHBS0z7PKLVjmrS5af0caZbzz6pShGZ/ZlYE + MaHIh6HZjgxIt2FAmpW0T0cmFnoyvdRHtvtLPbyZUujK2BwbxmZbMaNYib50ZWaRNdPEaWvuZ8S8ajMW + iOO0qN6chQ3GLKw3YMkAQzaOtWTHVBv2NdtxaI4tB1os2TvTmD0zDVXsnKrH9okabJvQhT3TNHhngRHn + llvw/mprPlprw5UNdny81ZnLmx05t8KSg7NljJygy7oxRmycYM+qUY7MrDRmaI8u1KXIeJ3eSe6PHhPF + KWuuc2NKlSvD+1jTP82U8jgjNQK4MtmChkxHNfJ3WB8vcVadKJMxtG+MEXnS7/SJMqJXtJE8f0Oywg3p + FSXrXgjARal2FKTYkJtoRXashSoAp4YbkRJuIjzIhORIY5Jl/0Q5XonqTYwwJi7UgIhAbUJ8NQjy7EqA + cJ4A93Yb7N2d2BADYkP1CfHphr9HR+FY3YiX8Tkt1pReydbkyLWV+YVTgnVJDpCxPUhX2qgOSf5aJEt/ + nCbnzpYxvZfUu0eErjgf0k/HGVPW04Ey+d+UuicGaBLq+pb6w7wwNw1C3DUIlXE4yF0TXxcN/GQ89hVn + 2kfeFU8PHVxdlWkadKWsROaa4uVh0h7Va62FjZUmVhYaKpT0z+7KlANeFvh6Sz8jVkkF7eyoJ2Ob1v9D + APbzs8bHV0nvJPu4GQr0cHY3wFWJ1PdQIpFNhacoPyy0Jkt51xIdxVFzEC5oSpZnJzKdXqNQ+EpDjAmj + 5X9r7hco7dqX0dKnNiabURLWnbJIHaoSjKkWlMbpUxSpTX6Elgpl3rjBPe1pynJgmLx/A6P1GByuxfDQ + 7owO7saEwC5M9O7EBLc3mOz6Bi0+XWiV59EuAOuwxLc7C326s0DsPD8t5shzmCXrZ4ToMDlYm9Gy3wDf + ztR5vEGN22vUyTkGSb1H+GkwVhF8Q/SZKu1haqge00PaMU2e6zThv1P8dZkUoMsEfz3GSXmknw7D5RqD + /TRVDJJrDvXWYLTwuSnB+sxWIoClDc6PkXdP2toiaWuLwwxZokCJ6JU2tVbGnd2ZruzMdGJNgjmz/TWY + JP/bBDclYrcrs0O0aQlW/gdtZoXqMi/SiPnRpswOM2Caf3cmSZucKfsskLa4IsWaNWk2rE23ZV2GNevT + ZTnVnLZEI5ZE6zAvXIkG7iLneouWwNeYF/Qqa2I7sitTiz3p3dgc/RobgjqoIvB/CcB5mlzI1+JSmREf + V5hzucKWM6VOHC3z5Z0hGZycUMGpWU0cnT+JbQumsWr+dJbMmsLCmVNZ0jKbhc2zaZk6nRkTp7Bo7ly2 + rF/L/l1b2bd9EzvWrWbLqhWsX76QNYvnsW6xEgG7mG3rlrNr0yoObF3LkZ2KkCz7yfoVs6fTOmUccycq + aZInsGJuM6sXzGbBzEmMG9rAgOoS6iuLGTmklqmTm5jboqR4FsyZrGLOrMnMnjmRlv+B2bMmqemg5zTL + PoJ5LZOZ3zKF1jlTWTBnGgvmynXFts6ZwvwXaJ0t/6NsV7BE/udl82ewonUmba2zWL1wFmuXzGHzygVs + W7WQLW2LpLyILcuk/ALb5P/ZunIhG1csYO3iOayUY1YuaqFNyivk2FXL5X6sXsDm9cvZuGYpa2XftmWy + fmkza5bNZE3bTFa3TWHl8rEsXzZS0CTHjJJjxrB543i2bZnE7l1T2L1nEstWDmDA0FSCpG1bWL+Gnskr + 6Jt3wshaGx1zbboZdaezQVe6GWqgKdA2ECtcX4GGbje662moIrAiAOuZGmBkaY6plZn60VKZb87MXIk0 + sJSyGabC082shaPb6GEh/NTDx4zUDF+GDOrJ7m0TeP+dWVw9PZ2P3xnDlyeH8/3pwfx6uo4/j5fz265e + /Lo5lR/WJfHdyli+b4vl1w3Jwj9zebi/UDhpMX/s6Cv7yH7revDrqhR+E1765+p4Qawgmj9Wx/D72lh+ + luWfVsWq0cJfC75si+fLVUncakvim5Vx/LhC9l8WoQrAd2Z7cn+mC/emO3B3mg33ZlgLbGSdrUDs/w8B + +MELAfjB/Ha8FIIfL2jHk4UCsY+UtNAKXkQIP12kCMSuL8RftxfRvrLvCwH45bIq/gqeL3fh6XJPnq7w + 5f5iX75vceez6W5cnuDGe+OEby5I5YslPbnRms57U6M4NNCNIwPdOdMUyKXJ0Xw6K4UvWlL4crbYWUoE + bxwfT4zkythQLo0N4fqUWDXF8+0lvdW0zwp+XVmgir+/LO3Lt/N6ynFpqvB7Y1IcNybE8MnEeG5OSuT6 + 1HS5bgGfLK/iizWD+HzVUC7Nq+Od8SUcberLybGFnBrfl9Pjczk9IYezCsb34vTYLI43pXNkRConJ/Xi + /Xn9uNnWwFdbRvDz3oncOTKd3w9M4Iv1jRyblMbuphh2jYxl19g0js0p4v01Q/j67Vbh3bv488YBfr62 + n+8u7eHrD3by9cXdfCPlby7t47vLh/ju6lG+vnyYLz7cx+cf7ObWFdn+8U6++2QHtz/dzvefbxVsEWzm + hy8Uu0nFD19s5scvt/LjV7KPrP/6k/V8fm01n11p45PLK7l5eQUff7SMq+8v5tKFBYJWLp6fL5jLh2dm + 8+HZFkEz75+bKpgimCyYxHtnJ6p498xEzp6ayOmTEzl5YhLvHJ/MiWNTOXxoEvv3jWfXjjFs2TSS9Wub + 2Lh2NNs2T2LX9uls3TKZ1vn1jB2Tx8BBmRQVh5Gc4kS4jDUhMr5kZ7syYEAi02eUsGBhLTNnlTCsKZX+ + deHUD4iW5QI2bBzMjl0jaVtdQ8vsXGZM7yF9Yrb0gb2ZMDaJwQ3BjBgUybzpuaxZUsnaZZWsWVrJuiXV + rFlUxYp5pdIHV7BfnteN9xbz9dXVfPHREi6/LfVfXceOeUXsbMnn8KJyru0fz/cX5vH71aX8dmUxv11d + zM8XF/Dtuy189e4seS4t3Lw4i0sfTOPddydz9r0pnH5/KicF73wwleMKPpzKCbHvfDSdkx/OlPUzefvC + VI6en9Ju5f4elft8/L3p6vKxs5M4fHoCh84ITk/k4KlJ/4Hc74Mnp7zANA6/M5MjJ5s5fKKFg2/PZt/h + mezdP5P9B5o5eKiFE+8s5PyFlXx0cQPXru/gY8FHH27g3JmV8uyW8e75VXx8bTuffbqPmzd2cfPmLm5c + 386Vy5v44INVnDq7mENvt7BT2vWm7aPZsGUUG7eNZuPW0ayX57tmw0hWyTNuW9PE8rbhLFsxhMVLB7Fo + yUAWLxG7eCCtCxrlOfWXZ1omz703Y0bmMLYpi4mjc5k9tYi5UwqYNbY3M4ZnMLU+jsmVkUwsCWZ8oR9T + iv1oLg1kXlU4i2qjWFQTzfyKcGbL9pbiIFr6hTG3TJbLQpkn6+f3jxK/IUYgtu5lOYaFdXJc/3Dm9A+j + tSGa5SNS2Dgpl+MrGjm3oYl35f/6YPs4zm8Zyan1Qzm2egCHV9RxdHUD70h7O7t9BB8dnMjVE9P45Mws + PpF344v3Z/P5ey1cPDqGd7bWs2d5CRtaclkwKo5ptYGMLHSnsacdtcJvaoTj16XZMqKXB6P7eDI2150J + vT0YlyP+hHDyOuFvigBcJly0XDhSmXdXitw6UuD2FkUenWS9BtXC06uDDakI1KPER4u+wrl7u3Qjx7kr + WU5d6OHUmR4uSvpnDTJdu5EuNt6ukxoBHGzagSBBnEMn8eU16RViREmCLUXKtDNy7eRATTIiDekhfDZN + +FdcjD5R0bpExeoQE6+visCJSUbEx+kQHio+hXCxyNDXiIt4jZTI10mLepW0iHYBOCfhNYp6dKM8V4v+ + SjbEfmaMqnNg0jBvRg9UBGArSvvokRrzJqG+HcRPeZUQv06qnxImfDUsQJ/IIJN2Adhf/Bjhr0oK6H8L + wEnCUxUkCo9XBOBI4cKRSgYj4Z6p4QaqAJwcqkOy4tsIJ84Uv6pXnIX4LuJrKVHA0t+kCedNC9BRhd+M + YCWDobH4PSb0Ep86R2yunLtXlBlZEaaky31PlfueHqRAh3QpZyoCsLc20W7dCHHoSIB9Z4KUabKc9PB1 + 0lcFYC+Bp6M+Hk4GuDno4Sr+jQJ3JZpXEYDtNXGz696e/lng6tg+F7CbowLl+6csC9ydlOhfXdydFQFY + if61fiEAW4tfZP7P90Uzc0OxhhgqvMdAq/0bp5H2P98tjdUpMASyj7Eq8LYLwf+nACxWT47rrgjA2v8t + ACsinYWFkuHQDAdHG1xcHXD3cP4HHp4ueHm64uJsj72DJTY2ZiiZEJW6KhzM2MwYA1ND4WdSX0sDNYW0 + g50xbi4m0h6sSQixFZ/YkdI0V/GtvdQfdszt68aCbCta0/RYkNxNFX8XJHRi/r8E4KOVjhyrdOBAPwv2 + Fpmys8CYHcXmbO9nzdq+ZizKMmJyvCb9vV4l1/ZVejl1I9dTh14+BvT00iPOuRPBVq8QYNKBSLMOZDp0 + oDLgNSYldGF1L2125nXjcEEnThZ141ypHu9XmPFepQWn+plyvMiI44WGvF1gwDslhnxYb82VgXZcHejA + pUYnTpVYcCBHn12p2myJ7szbmQZcLrTjVpUbvzZ6c3eABz9XWPGDnOfnUlN+Kbfg1yob/mhw5jfhRt83 + OHCzwpTrleZ8PtCJzwZ78UGVM8f6WLIl2YDFod3EJ+vMDO83mOH7GktiurK1hx4H84w4mqfHsZyuHOvx + Jid6vMq5nq9xKbcTnxZo8U2xPj8U6vF9rja3s7rzQ08NFd9md+Grvpp8UWrAzRpLPh7qLLzLj5NN3myR + Os0tsGB8jjljchykrw5h3oAsZg3ow4TaXIZX5zC4phf1VVkU5iWQlhxIUIAzjko6cEUAtjbHUuHlptIO + jJUfBAhPl7ZgbKpwdMN2WEhb+ZcArPxIQIkUNxe+bmKhh7H4Aoam3TEw6SpWQ+XvDm4meAfYERDqQlBI + uwDs948IbIO3vzI1gRW+0sbiYrzITAuhMDeBupIsBpVkM7Qoh5H9ejO6pDcjC3rTlJ+rYlSRrBOMzO8l + 7bEHA7PSpX9P+8fW9UimvkcqNRkpKqoFlRlJVChIT6Y8PYlyKf8DWS5ThVXZJihNS6IkLYVigWIVFKUl + 0jc5VvquSHpGhZAREST9mR/xfl7EeboT6+ZKvCDV3Y2+/j7Ux0YwKCmSIUnhDEkRmxLN4PQYhmTEMSQz + noFpcf+N1IQXaE9z3SB1UFCfkUpdpvwvPdLpr6BnBlVZGVTn9KQ+vw+Dy/oxcehgVi2cL37xZi688zaf + 37jGzz/e5u6dP3n65G8eCx4++pv7fyvi7988+PsRj5485fHTZzx59lzFs+eKfaruc/fBA/5+9JAnTx7w + 7NnfPH36kMd/3+Pend/56tZn7QLw/p2cOX2MT25e4scfv+bO3V+4c+9Xuc4dHj29x8PH9+T891Xx+I8/ + f+W777/m5mfXuHrtMp9+dpNffv9Z9r3Po8f3+fvxXdn3juAuTxTx97nU+/nddtCOZ9z/Fx7Itge8jA5+ + rKSEfvZY/k+p8/2/ePjjN9z/4ga/f3CO797exyc7VvPJliV8tbmVbze18NPGKfy8cjjfzinn65l9+X6O + +IWLini4vpbHWwdwf2MtDzYJNtdyf1MddzfVc0eW/9pYz5/rpbxxEA+3DOHh1hH8vXUsj7dM5NHmKTze + MIV7K8fwy9x6bo3vw6fCl28Oj+XykDDeGxjIyYZAjtQEsqc6hN39Y9hek8zm2nQ2ClZVJNKaH8zCvkGs + L4thT/9kDvdP4VhVEm9XJnKkNJb9RZFszQ9hbX4YC/oEMyHdi8HxrlRFOVEe405tRhBD8xIZUdSDceV5 + TK+vYMWkcexcuIAOXj5GeHkb/5MGOiDAlMBAM0ICTaUzENIf8EIADjMVQmBFZqwVGdGWpMhgHOenQ4SP + JpHeykT+usQHCAkRMqAgyb/9F1nxyjav9pQd8R4axHl0E2iQIOsUEbg40YF+iXbkR5rQN0SbPkoKaEUA + 9upAb79XKArqSL8IIVzROlQmGUqDN6c+x4YB+fY0FAhxyzOXRm9AdS89+ufoUZv9ErryUmi/EIB1VQF4 + QF9dGntrC3RU8XeYdKj/WwroYX211ajf6Y12zBzkoIrA46tNGFdpzIRqY8aUGTIsX0f27UL/9I7SmXSi + UTruIb01GNKnG8PzOjG8z5s05b3BpJJuzKs1Ymm9GctrTF8IwIaskQ57Q4Uhm/qbsKnelG1Drdk52oGd + E1zYMt6RNWNsWTLMiqkygA3r2ZX6xI40JGpQE6tFdYSOOv9KvxBDCoKMyVLSnXhpkaAKwFrE+GoSFdid + qGBtYkKVSGAdksQmi1UjifyUZ6HMofE6oXZC8GxkMLXpQLDda4Q6vEWI3ZsE2r6Fn23HfwRgD0UAdtTE + 101J96wr5Kc7LkKEnO06CwHqopIhdyFH7i7d8XTTwsNd838VgNW5pn1NcXTSwdy8G0ZGGv/vBWAhRqoA + bKarQo0AVsjSCwH4ZdSvgpfC8L8FYDNloBJipfwq7j94sU1gKmTqpQD8UgRuF4CVX76Z4exkpYq/Lg4W + 2Mkgp8DR0RI3VxsVSoSwk6MVjkKmFCiCsZIKOizMl8AAD/V4GysTlIjilwLwyxTQigDs6WqPt7sLPh6u + eHs4iXUW66AKwL5etvj7Oco76aimxQgLVc7rTESIoyr4RkpZQUykG/HRHiTEuqvzAKcnB4j1JzFWSffs + 0S4Ae9kRHOBCVLjnPwKwv7etkF5DnK3l2VlrEmivQ7RTdyFcGtLWOjM6W4tNo2y4ttGP304G8+R6MNz2 + hbtu8NAK/jYTawp3BD9Zwld2PL/hyPPLrjz/wItnZzx5dNybO/t9ubs/hF+3hfLl0nDOj41ibZ4rE8K0 + Ge7XlbFC/EdHWzAq2oYxUbYM9dWjyuYNCoxeoZ/Zq9Rbv84Iaatz3DqwPawz76cZcb2HEZ/2MuLrfGN+ + LDPg9zp97g824u/x+jxu6c6TZV15skmTx3u0eX7SCN6Xul41h5vW/xKALXl21obHx5x5sMeXH9sCuTE1 + kIOVbsyNM6LG5Q1ybV6nr58pfSJc6BMXTF5iDEVJQggEpWoajhj6JQdRKPc+L9KGolhrKuPtqE+xZUiO + BWOKjZnZoM+qiaYcXGHP5YNufPOuK3c/9+L5jwHtIvCfPnIPXdsF4PsuPP3VjftfuvDXNS/ufBDKHycT + +O1gBt9szODD+YmsEUI6NEMcI38top01CXU2JFQRZ9yNpH12xVHe35ggM+plkNgwq5aru5r54e1FfLZl + EkcmFtGS5S3/mwbFZq9RLfsPddZnorc5s4WgLQiyZZ6Xvip+bEzS55g4iu+PMOfLebb8tNqOX7dbcP+E + FY/es+LZx7Y8/9Ke59/aqPMCP1fmBf7dnCe/mfJY8OiXdgH48U+m/P2DiYrH3xsL2qOBHwme/Cjn+V5w + W/CNJU9uWarpoB/JM7p3WQj4u/5c3unJmrHSP+d3oCymA9l+b5Ak40yopwFeruLAKQKwuz4B3gbinBoR + JeOZMu9vVKAlUX4WRPuaEOUtDqlASR0d42VMgvRHacHW9Ay3IzfKnt5RSppnxdqoAnBhrD2lSS6Up7ip + UcDFiU4qlGjgonhFEHYiP96JXrF2pEaI4xuu/PLZjHglW4aUFQE4O9FKFYArsqwYJGPXpCovZtb4MLXc + lSn9nJlS4sTkYicm5NsyKtecYVnGDOqpz+AsQ0b0NmZsoSVTKhxo6e/O/EYf5tV7M6u/G83VrsysVFJI + O9GspHsuU+YTdpTz2TKxwIrJ4rwowvLMCrleVQDTK4IYX+TH0CxnIZJ2AmtG5DgxvtBT6uHDlDJfJvXz + VFNFN2XZMLKnFVMKnWkudWVqgTWT+xozrdiIlnIz5va3YKEqAJuysNGIJYOMWDvSnC0TLdk1w4aDs205 + NNeGA7PFqZprIWVz9s8yYtdULbZO6MTOKV05vsCYc8uteH+1LR+useXiOluubnLgow22nF0uzuJ8E3ZO + NWDLJGO2TbVTo4Dn1pkwsndnqfsrDOz5JqMLdZgmzs/cQe5M7+/KyL421KSbUibvrRL9W5Nuy6BsxUn1 + UFNA16bbUxJvTl6UgTxvQ3pFGJAdoU+WAkUAjvyPAKyIv3lJVmTHm5EZLe0kwojk8HYo0b6JYpV5rmLD + 9YmLUHiSMTEhigCspIHWJPiFABzk1k1sV0K9uxMTrE+k8KMAt054u7xOkHcXGad11Uhi5YcCmdEmpIbq + kxQoY7Xs91IATlbKAdrqByFFpO4dY0aOHNND6p0dbURhqrU4J3b0ijElUY6N9OhCmHtXwpV5gD01CfPQ + xl8Znx064ylOtaerjNHK/Pwumjg4aAi6yfilKWO1/j9pnZV0z/Y2OuIMaqtwlf7F29OCAD8lVbStKgK7 + ucg4aK8IwMo+/xGAvX3MCZQ+JCDQBk8fM1w9jHCU99PBWQ9HZzmXcAl/bxNC/c2IDjARDmlIcoABWUHi + 6Mu9S7J/lRRb4YEeb1Ip3LAx1pQh0l4Hp1pSF2tEWZim8MOulAkfqks0pS7JlMo4AzUiuDhctoVqCgGW + d0hJK9jDjuHJ5gyO1mNouBYjQrszKrArY/w6MdbzLcYoIqnrm8zy6Uarf3eWBOmwIliPZXLfl/jrsDhA + R/pDJXJWn9kh+swK02damB7jgrQY4t2ZAVLHBtfXGOj+FsO9uzFWntOkUAOmSRuZKe1pZqQRs6R9KGiR + 9jJLuFtzsAEzguQ8woOnCsar0cCaDJf+VsEwHw2avLowVqwiGs+V88wTzJVzzJPrz5M20hqixwIFUjcF + bVFmbM9wYWuGIyvkfs3wlTHV5TVGubzKZL8uTA/SVFNYTwkQK/xwprSdZqnjNDnHeF8NRsv1JgRoyHoD + FiaZs1ru25oeDqzrYcuGTFvWpVuyWu7zcrmvrXL/m4WvT/d/gxn+rzDLrwOLQl5hQ0IntiV1YmPkK6wL + 7MB6JQI45lWOvBCAz/bV4j15Z69UmnKtvxUfVFhzrNiWXYVubCsLZ0NVCsvKezC9pAfDizKpL+hJ//ws + qsXZH1RVwbDaeoY1DKRp0BCmT5rIwnmzWbJwNnObpzKhaQijBjXI9v4MqS1nREM144cOYPrEJubOGM+S + 2VNZ2drMwpkTmTZqCAMrCqnMy6IkJ52KPlnUleTRWJpP/6LeFPdKJy8rmb45qZQV5VBR2ofS4l70K8ym + X3EO/Up6UVzQi6L8HAr/B4qKZFthL0peoFT2Le/Xm8qyPlSV96W6Il+1/0Z1WV9qyvNV1FUV0lhVpArQ + g/uXyv9SxvCGSsYNq2Xi8HrGD2tg7NA6xg6qZZyCwXXi8DcwacQAJgxvZPTgWpoG9mfkkBpGy/6jBGNG + DmDiuCGqkD15QhMTxgxl7KhBjBvVyMQxjbKugYnjqxk3upQxo4oYPTKfsSMLZL9COaaEGdNKmTevimUr + Gpg9v4z6wQlESz/q4NoJQ4tX0Ld4E2MbLfSstNAw1aCLYWe6GXahm0FnNPW7oKHXWUU33c501+sq6P5C + ADbExNIcMxuLF5EFSvSvlC0sha9bYGpu1r7eSri8lfRXnuYkp/oweGAW+7ZP5eLJ+Vw/raSEHc/tc2P5 + 7cIo7l4Ywv1TNfy2uzc/b05vF4Db4vh2RQy/rE/h4d4Cnh+r4smJOh4crOKvHcX8vqE3v67O5I/Vqfy1 + OoW7a1O4I8fd2ZDEn+sS+HVtPL+sjuP7lbF8vTKOWyvi+ELsF8ulvDSGH5ZF8scLAfivWZ7cneHEHRmz + /phkyZ9TLLgzzYq70625rwjBLfbc+z8FYFme2x4F/G8BWLF/z3f8byxw4aEaHewmaBd//0sAXvL/RQBe + rAjAbjxd5sXTFX7cW+TLNzOcuTnZmY/GOnF+lBs3WmL5rDWDG3PSeG9iBEca3TnW6MH54YFcGh/FzUmK + WBvLJ4JPJ8Xx2YRobo6J4MqIEC41BXNtYgxftKRze3EuP63Il3vUh9uLevH9wl58Ny9bTf18fXIcV8UP + uDQ6nEsjQ7kyKoLLo2V5XAIfNOfwYWshVxfXcGVhPeeml7NveG92DOjJnsHZ7B2cwb7BqewbksyBIUkc + HJrCgcGJ7G6IYXt9FIfGZHKmuZArS2v5fMNQvt0+hp/2TOS7baO4trxaOHAGu0fFi++dwI5x6eyfmc/Z + tkF8dWIh92/u48EXx/jz06P8cuMQP149wPfXDvDD9YOCw/x4/Sg/fPw23149xq2L+/jyo918eWUHt65u + 5YsrG/ji6jq+ubmR7z5thyL8/nRrK798vZ1fv9nBb9/u4rfbe/j5m13c/mIrX93cwJcfr+Xz62sEa/n0 + ympBGzcvvRCFLy1X8fHFJYKlfHxpEdcutnLtkoJ5Up7L1Y/mqFCWL1+az+WLC7j00SKxS7h0cTkffrCM + 995dzOlT8zh2ZBYH9s/g4L5m3j4yj1PHl3Dk4DzWrBpJ88xKxo8rpKE+lawsT2JjLIiMNKGgMICRI7Np + XVDLqtXDWLCohglT+jBiVBrjJuawoq2BAwfFtzg2lc2bB8t+hcxp6c2CuXksaS1gxuRM6bcjGDUkmnnT + c1i1sJTVi0pZs6iMNQvKWTa7iPlTc1kwvTebllbz4fGZ3DjfytV3ZnJuxwi2ze7LqnEptI1MYOvkHry7 + rpGv5Fq/vj9fMI+f35vDTxda+P78TG6/18zXHzbz+YczufbeFC6+O5mLH03no8sz+eBKM+9fbebdqy28 + e00g9r2P5/De9XlSnsO5S82c+Uiu+cIqOH95lrp89sMZnHqvXUQ+qQjH7037H5ip4tQHs3n30kLBIs5I + /U5dmM87Z+Zw4kQLx47N4Kjg5KkWzl1o5d33F/G+PJt3Lyzi9Mk5vH1Uth+aJs9oOufPLuAD2XZBntt7 + 7y5Roex37tx8TsjxB49OZfe+cWzbPYptO8ewfddYwRi27hjNFsGmraPYuGUU6zc2sXb9cFatHUrbmiFi + h7FmnSyvHsyyZQ0sWFjNtOn50tf3YdqkXJqn5rFc1q1cIH3+rH4smtSHuSNSmT0wnpbaaPElQphZHszc + yjAWyfLyAXEsa0hgUU0MrRURzCsLZXZpOPOromV7LMsbE2kbmsbq4RkCxSpI/6fcNjSJFcOSWT0mgy1T + +7BvXhkXNjVxadcEru2fyvXDM7h2cBqX90/mo32T+GDPBME4Ptw/QRV/rx2fwSdnWvjs3GxunpqpisA3 + z0zn4tFxnN8zhCPrqtm1uJi2qRlqFPD4ch8GZNlRI7y5OslSRX2q8qNYOwaJHSpcU8k8M0D4tBLhW+7X + nVLhhyVe3Sj26kpfl7fIdXqDPq5vUSjLpX46lAl/LfbVoa9nd3JcutLTpQs9nbqS6dyNDFnOcBXrrEG6 + W3d1PtNEx65E27xJoHEHfPU7EGPXkTTh6n3CxX9JdqA0xU54vok6FYwimCaEaREbqUWkcNiISOH4igCc + YEB0rK4qAkdHdSck+E2CAxUBWHzjmE6kxXYmM+ZN0qNeJTPqFbJiX6MgvQv9sjWF++hTX2LG8Bp7xg/x + ZPQAN1UALsnVJTn6NfFjOhARIDaos6A7EcKJle/BkUGmqgAcpgjAfnr/lQK6XQC2JDnOkqRo8xcCsNTV + X0PNTNguACtpoNujf1UBONKQXNk/P8mOvgk24teIvyU8OVP4ds9QQ7LCTMmJEJ9N+qH8WCsVhXE25Mu+ + eXJctmzrEWpMppwrI1iHzCA5Z6A+iR5SZ6dOBNm+jq/1m/jZdcNX/BofJ712AVj8GRUuRqoI7C7rFSFY + Sefsaq+Jq60GLtbd1GnvXGy6oKR/Vr57qgKw+FAezpoqPF105Rz64lOZSNlS/KqXArCN+EXCZcyN/vn2 + 2C4A62NgqHy3VL5n/ucb5T8BKVYmwoOMXsy9qv9/CsCK1THWEU6lCMBdVAFY10BLjlME4HbxV0n3rIq/ + 7s54ebup8PRybS97uopPZ4+DoxU2dmayvwmW1sZYWCkpfs0xtTTFyEK4l7WRbDPCwc4QVwcDgrzMiA+2 + Ji/RlZpsb/HB/Wku9mN+gRsLcixYkKHHQlUA7sjChLfU9M+KAKzMAXywzJ5jVY4cKLVmd5E52wtN2FZi + yZZ+tqzqa0lrlikT4nWp9e1IgbxjBZ5aFIlvmB9oQra3LolKdlGLDvgbdCDMsAMplh0o936FKQldaJM2 + va1XF/b36cTbBd04UaTDqRIjzpRbcFr8jNPlVpwsteSdfuacKjfn/Tpbrgxy5MZQNz4e7MF7lXaczjfn + eI4JB5O0OJ9lxM0CO74tc+aP/m7c6+/MbyWm/NRXl1+LDATG/N7PjL+q7fir1oHfau34rsyU21VW/C7v + 028jAvi60ZvrFa6cyrFiW7Q2q8M0aBOsCOsivpIm+7KNOJZnxNu5Ohzp0ZXD6W9yLO11Tqa/xrs93uJq + bjc+y9Pmy95a3OrZnS/SOnMrtR2fpb/FpzlduZGvzbVyYy7V2/DRCA/ODHdnV6Mzi4utmZxjzuie1kzM + 92FOfRpT+vdgaHEy1XnxFOREkJ8bTW52NOmpwURFeIs/b61+p7a1NsfCwvQfAVhfFYHbobQvpW0ameu9 + mLKlXQT+D/QwNNXGwKQ7ekZd0RNfQN+os3D47tgq00f5WqtpoAOCnFQBOCDIEX+Bb6AdfgoC7AgMsicx + wY+cnpFUii84akAJkwaWM3VABc2D+jNrYDXNjdXMqK9SMbNBsRVM7V/GhIoixogvN6q4zz+2SXy6pqI8 + hhX0YWjfXAb17cWAvGwaBfW9e1KX24O63v+Nml49qclRtmVR2ztb0IuaPr2ozct9gWyqemVS2iOVoowk + 8tMT6ZMSS05MJNmR4dJnKXMLR1AcHUldcjyjsoUn9UpjfE4K43NTGJubypg+aYzOy2BUXiYjZNtw8TeH + yfZhipX925HOUPFRh+ZkqBgidRoodWvMzaahl9RfbG3vLGp656gC8ICSQkbW1zBz7CiWt85m79aNvH/u + NLc+v8mdP3+D54949uwxj5485uHjRzx49Ii/Hz/mybN28fcp8Eyg/D0XKGVFDH7+/AnPnj78PwXgA3u3 + cerEIW5c/4Afv/+C+/d+4e7dn/n77z94/Owuj5/ck/M8kHM+4tGju9y7/7sqEv/x589qtPDfj++o2589 + v68KvU+e/in4S67/53/hOX+pgPv/wj1Z9+BFlPBDqesDnj65y/OHsr9c49lPt3j6+WUefnSKv84c4KcD + 6/hu+2J+3DqXX7Y288fmyeL7DeeH1nK+a+nLL8JX76wo5cmmeh5vbeDhxloeb6nnybZGHoq99wJ3Njfy + x8aB/Ll5KA93jeaJ8JNnh5pBOPXzQwt4unM2f7aNkXPWcmNsH643ZXB1RAIfDonk3MBgTjQGcag2kN2q + ABzFjppEttaksrk2lfVVCawoCmVNSRj76pM5Magn5wZl8e6AHrw3IIPzws9Pyf6HK2PYXRHDun6RzOsV + yOR0H0YkezIoxYchPYKlTUUzLDee0QWZTK4oZMmoYWxraaaDMhebp7eRKv76BZgTHGxJSIgl4YJg6XBV + ATjQgLiQFwKwDLqZYlNlQFZE3yg/bWL9lEHciDQhLRmyPj1UbKgsK+k5ApQ5GYRMCClK8tFWxd8Y967E + uHZWxeDekRb0DjchJ0iHXv7d6CWdfq7fG/TyeZW+gW/QL1SIiiIAR2lRJgSnf7optdlC1PpaS0O3orq3 + KeU9dSnvoU1lT22qxbZDh+qeWv8IwAPyDGjso0tdjiaNvbQY3FeP4UWGqhDcmNud/j07/0cAls50XJUZ + 0xptaR7sqNpJdZZMqjFnSq0FEypNVQG4To7pn/YWNemdaMjqwqCczgzJ7cLQ3m8xrPcbjMh9nfGFnZhT + rc+SOiUCuF0AXq0IwGUGrK0wZGN/UzbWW7B1qC3bRzmxbYILG8Y7smqMPUtH2DCtUpkHsjO1ia9THduR + svBOlIZ2lfuiQ2m4IUVhJvQONCTVWwtlboxYRZD3FQQI8VE+AgdpER2oKcRLS51zI1Huc5wQ2WiPzoQ6 + KULvqwTYvIqfzWsEKHM4O7xFgN1b+Aq8bTviadMJd4GnECdvF238PQ3w95I246otJEgDJ7tOKpwdlHTQ + QoqE3HoIsX0pAKsRwS8EYF8fQwIDzfENMFPTQFvKYGBioomxkZICWvu/BWApKwLwyxTQarSvGtGrqwrB + 7dG/LyJ9X/x67qX4q5QVAVjBS3KlRvfKspGxIgwrywraI3//gQxq7QKwzv8QgP8TAaykfna2N8fWykiF + g5RdZJ0CZ0dF+LVQ1ylwdFBSZDoQFOiBj7ezuq5d/G2HmgJazq1EALs5Wcs9dcBLScvi6qTOB6wsK+mm + lRTQSvSv8uus0GBnVfwND3MhItyFmAhX4qLdSYj1UpEc501yvI/ASxV+M9KCyUgJICnOh5hwT3l29vh7 + 2xMa5EpMpM9/BGAvG9wdjHG2kmclz8XfWpNwu66kuXejUMj/CHmP1o6w4/KGYH45GcHj6+FwO0D6XC94 + ZCewhL8t4K4SASrL37rAZx7wsS9cCYL3AnlyOoi/Dgby574wftgSzLUFQRwc4s+8njYMDuhGnTI/RoQR + g6MtGBgt66JsafQzoJ+0w15GHegjTlKF5SsMse3AHM8O7IzuzEfZxnzSx4RbRaZ8X2rGL5UG/FVnwINB + RjwcrcfjGV14sqgzT9dp8HinJpwwlLqYSp3M2gXgG/ZStuHZ+xY8PWvJw6N2PNzvLR16MLfmSudc78GK + TAuaAjTo59KREmm/RXK/8xPDyE+Jpzglg+LkVEpSkuiXGke/lDCKEv3Ii3YhL9Kewkg76bdsqE41l/7B + iNHFOswdZMimZltObXDhxhFnfrnkyaOv5B79EsrzPwJ5rswJfNeF5w/cefy7Ow+/dePB5348+TSGJ5cy + eHShF78fzuHT9ZnsnRjO1EJnCsONiHXRJMzFkFBvS3zcpW3adBWnpjsZ0Y40Vcqg0lLHla1T+Xb/bK6u + bGLv0Gxmp3kwQN7XcvM3qLHqwhBH6fs8TZjhZ83cQBvm+BgzT/r41fEG7M0z5VSDOden2PL1Inu+X2Mt + z9KW++/Y8ugDB55cd5QB1p4nX1nx9LY5z38x49HPxjz6xUgVgB//bKrOA/z3D8YqHv0g68U+/lHW/2jG + k5/MefajRTtuW/LkWws5lzmPPrPm/nVX/rokZPp4MLtmSf3KX6MhuQO5/q+Q7N2ZMA8tvKVPcnfRk/5G + n8AXAnD7vL9WYhUB2JwIHyPCPWRME4R7GBDpKft4GpMcYEFGiDXZ4XbkKOmgIwSR4uBE24mjaU9psgvl + qW5UpLmrInBpiqsaFdwvyU2etysFUs6V/dIixfEVZzQx0lx1hBUhODXK4oUAbElJuhlVPUwY1teWccVO + jCu0Y1xfm3bk2zJW7KhcCyF/ptLvGwtMaOpjyph8S6aUOzG7xpP59ULka7xornJjeoUz08udVQF4pjKX + cJkT00uVObRsGJ9nKecVB0CuM7XMkxmVAUwtD2RcgR9DerpRm2onsGFIthOj8z2YUOLDhH4+jCvyFELq + wrCedqoIPLHAlen93JkijtCkAjOmyrs2s8yM2dXmtNabs6DRVGDEInnn2ppM2DDOjK1TLNjXYsPR+Q4c + mW/HkYW2HFtoI5zInAMthuyapsGe6d1fCMDWvLfKlg9W2/LRWnHINtrz4Tobziw348Qi2V+e9+4Z5uxu + tmf9OCuWDDFlclk3uUcdGNn3LSZX6jF3sC1LRnrT0uDB2CI7GnpYqHMAVyZZ0NDTURV+ldTPjT2dqXqR + /rmPIpyG6ZEVqksPGU8VZEe0C8C9XwjAfZOsyE20oEeMcftcv9I/JYUZkiRjb0KYwosMiA3WV+f1jQ7V + JzZESTluQESAIgBrqQJwoBL569ZNFYFDlWwp/jqEeHbDx/ENPJ1k/PXopH4gUeYPzogxISXcQB2n1fmx + BKlSTgtSUprpkSnXy5E69ok1Jz/Bkj5x5uJsCH+KMSUvob3OOdEm6oeVWO/uRHkLF/DREehJ29fFX8Zj + d/vOOCtjtn0XGbe7qbCz7YqNjPM21p1knOou0FZTQNvb6orTr0AfJ3H8FfE30N+OsBAnQgU+Xpa4Oisf + BnT/KwLYxdUAXz8LgoLtCApRftmrRAEbYe+si62DNraO3XFy1sZT3kE/eVcDvXQJdteQ/qsz8e5dSBDH + P9qqAwnWHch2fY1+wg3LhcOUhWrRL0iDAr9O9PF6g74+b1EWpsWARDMGJJlTo4j+UXrCjbSFI2lSJeVB + yRYMT7NieIIZQ2V5qOw/Irg7I/w6M9K7IyPd32S025uMd+tIs293WoU3LQ7SZYXc6+XybJcGCX8L1mOh + oDXUgLny7FvkGc0I12d8oJacQ/pNz44MlvMME141SvjXRHlW00INaZa2NDvKRKBYI+aKnRdlSmukCfMj + TJkrvHl2oD7Niggs7WKcnyajfTXkHAKfbozx6swEHw1mBmvJdeXaYfpyjC6zpb3MEcyTspLSea7UY26A + ljqv78Y0B9bJu71IrjfFpwsjXV5jhMurjPfryoQgTcYJHxzr102t+6RQPYE+Y+V/bvLqKv9HJ4b7dmNC + iA4z40xYmmkv4589qzJtWJthy9p0S1YlKgKwgdwLTZr9OzLN73Wm+3Vghq+My/4dWBX1Olvi3mJD5Cus + VSKAVQH4NQ6ld1UF4HPCnT8s0ed6jQUf19vyXpUVBwss2JRrS1uuF/Oz/BgZ406/AHuyAxxIDXCR9uwh + /kUAvZLiKejZg5K8vlSVlDCkURE2hzFqxGAaayvpm51BdmoimYmxpMdHkJ0SR0FWGpX9ejOgfwmjBvZX + xdMRDRXU9csjP1P2jQ0VfuxNtL87sYGeJIb4khoZSFp0MKlxoWQmR5LTM5Ee6bHCmfyJDBfOFOmnQpna + IyzU53/Al3DZR9kWKWUFMbJvbHSAcLRAEuNCSEoIJTE+pB1yjcT4UJIEKfFhKtKTIshMiqRncjRZKTFk + p8WSmyH/e3YSRTkpFGanyv+VQn6PJAoEii2Sdf16Z1KSm0F+dgp9ZF3vrCTyeklZjunbO53igp6U9cul + X1EuxfnZspwj5WxKS7KoKO1JRb9USosSKC6MoaggguK+YfQrjKCiLIb+1TEMHZrCxCm5jJko+9ZKvVOt + cJe2ZCp+hJH165g6CF+3646WZVc0TDrRzagTGgYd0RRo6ElZ0E230wsBuBuayhx3qgBshrmtJeZWYq3M + sbC0xszCWji6Akspm2Ki8HgrPVzczElI8qGxvifb1o7n3IFmPjw0mUsHRvLt6XH8em4Uf50dwp0TNfyy + uw8/bMrg9rokvmmL47PF4dxelci93fk8P14L54bx9PggHuyp4vcNfflpZQ9+WZHCr8uT+HNVKn+tS+HO + hhRVAP7thQD8w8pYvlkZw61lMXy6NJpPF0Xy2YIIvlsUxh9Lw9sF4GYP7kx35I9J1vw60Zw/Jpry11RL + VQR+KQAreDjbgfuzpTzLTp3/V7EKHsx5kQb6fwjAD+cp6x14MFcRiQVqpLAzf7e6CJzV9M9Kiuin/0sE + 8MvyfwRgZ54vc5d9PXm81Je7C334apoj18bZc2G4LSeH2vP++ACuTI/jypR4zo8M4e1GL04ILgwJ5MOR + YVxuCufS0BCB8PkR4XwyMpKPh4dzZUgIF2Xd5bGR3JyWyK05mXy9IJtb8zL5vCWNz5tT+XRasioQfzg6 + jPeHB/Hu0ADeH+rHe0MCeG9QIOeHhnFiQhLHp/fkXEsRZ5r7cWhMHpsa0lhTlcSGmhRBApv6x7KpJpqt + ddFsa4hja30MG6vDWVcZys7hKRyb3Id351dweXkDH68ezCfrhnG9rZEL80o4NDGTnaMT2T4mma3jM9g2 + KZejixv49Ggrf93Yy4Mv3+avz46pAvDtK/v45tJuvrm4S7CXrwW3PtrPZ+/v4cb5LVw/t4FrF9Zw9fxy + Lp5ZyMWzC7j+/hI+ubhMxWeXV6oi8I9fblGjf3+6tZ2fvt7JD2K/+XQzX1xfx2dXFdF3FZ+q9j9Q1n92 + tU3Wt/HJlRWClXxydRk3rizl46sKFqu4fnUh168Iri7imoIry7gq+1+7upLr19aIXSvLa/jg/WWcP7uY + U++0p3Z/9/wKPnpvLWdPLmPrpoksaG1g5oxKRo7MpaBvIMlJdiTEWVFVFc2UKUW0tQ1l69ZxtK0aQsvc + cqZMz2f23FI2bx3J8RMtnDgxi+3bh7NgYRFzZ/dh4by+LF1QyNwZ2YwbFiOIZd60bNrmF6tYJc+ibU4R + C6fnMmtcOnPkWayeU8iZPWO5dHQqH+wfx4l19WycnMnyYVEsHRjKupHxnFhYwo2dI/jhnWn8dGoGt9+Z + rOL7k5P47sxkvjwzkZvSJ1x+ZyTvn2zio/Pj+fD9Sbz3wSTe/XAS5z+awrkXOH95GucvzZDyNE6/P5mT + 7076xyo488Hk9uULEzlxbhzHz4/jbcExKas4O5ajZ8eLnaDixIUpnHm/mdPvNXPs9GSOSp3ePjmF48en + cPDgWPYfGMXhI2N5+/hEjh2XY96ewOHDYzm4fyT79gxn947B7Nw2SJZHcfToeA4cHMO+faPkuNFy/BgO + HBjLblnetnMYm7YOYt3mRtZtGigYLJDljYNYK1izYQCr1zfStraB5avrWNZWw9KV/Vm+spa21fVia1i8 + pJJ580uYNiNXnm82Uydl0Ty1FyuXVLFqcSUr5xazbFof5jUlM2dQLLPrImmuCKG5PJh5igBcE8WyxjiW + 1sezsCaG+eXhzOkXTHNRMHMrIlUBeOWgFNY29WD9qCw2jO75L/Rg4xhZPzqD9WMz2Szjy745JRxdWsPZ + 9cN4b/toLu6ZwKX9Sh8/hYv7JnNRsbL84b4JfLBvPO/vGydjwCQuH53M5WOTeV/uzXv7R3Nh3wjO7RnG + mZ0DObq+mgMry9k8pzeLRicwtSaIQb3s6Z9qSVWiOeWxJpTFGFEmvKki0oCqaANqowypDtGjzK87Jd7d + KPTqRoGHQHh9b+e3yHJ4nWynt8gTzlrgpU2hnz55SrSimwY9nLuQ7tSFDKdupDkLXBVokObSnTQ3LdLd + tEmRcox9JwJNOuCt24FImzdJ89IiP9qSyjRnylIdKUi0JCtS/I4QbSIDlCljuhAa3I2wsO6ERykRwAZE + x+gSFS08P1xDeHlH2f4G0eEdSY3XICNB6hLXSRWBe8a8QZbYvJQuFPXQpKy3HjXizw2usmPMIHdGD3Rj + cLWt8Ag90uJeJyHyDRKjhJNHdidWOHW08M+oEEUAVtI/G6oCsBIRHCb8NTxAl8hgI2IjTEiK+R8CsPhH + kf7tU9Mp4m+a+DApYf9DAI63pCDZTnwYW3JjxecKN6KHHJsl6CW+dO9o8W+kDypKsKU40U58bweKU+wp + TLSlT4yV+G4m4h/pkhGsTabw90ypjzJXbLj9WwTavIaPxat4W3fGx1YLLwfd9uhfZ0N83IzxcTfB29UY + TxdD3B31VQHY2U4TZ2tlurvOgo7qlHdO/xKAPeTZebvpqPBx01d/dO/rYSGwwVvg7mKrCsBKKt3/TQA2 + MlK+OxqqUbeK8KpAScOswNJWOJC1wnmMMFIEYFM99MQqEb8GAlUENjNQ1+sYawun6kpX7S5o6mqoKaGV + 6EwL6/Z5f5XUz65ujnh4ueDj64G3j7sq/irW091ZFYAdnayxc7BQ5wJWhGAbW6VshbW9JRZKfWyMpV4G + ONrp4WqvQ4CboXBlcwpSXGnsrXw3CGJ2mT8Lit1YlGvBwkxFAO5Ka8KbLIhvn/+3VXyCVRla7MwXn76f + LXtLrNhRZM7WQnM2F1qyvsiW5b0tmZVuwpgYPQaEaFEh712ZtK3yEBNKQszI8tAgWd65KPMOhOh3IMqo + A6lmHajyeoXpiV1oy+rG1pwu7OvThSP5Ghwp0OFIkSFHS0x5u8ya44JjpVYc62chZQs17fOHdfZcG+jK + x9L+L1Y58H6hFedyzTidoc/FXqZ8WWDLD8X2/FHmwF9y7K999PgpW4NfendX0zH/ka/PnX7m3Jdz/VVu + wc9FSrpmSx4PEl41XLjgIF9+rPfmZpETJ5ONORCvx/5EQ3Yn6LIvVY/juSa8owjA2VocSuvMwZQ3OZz8 + Bm8nv86Z9Lf4MKsrH+dqcTNHk5tpXbku9/SG3FMF15Le4Fp6Ry7naHCxUI8Pq8z5aIgT54e5cHCgC2sr + nGjpY83EHBumFHgzuz6F8RXJ1ORG0CfVn/hwR/VbcWa6+DrJQcTF+OHt5SD+vIU6B7AiAJuZKnMAG0i7 + kjZoqKdafaP21OSGZgIlCMtcX4XRS6jiryb6xl3RMeyCjkFndA07yTYNrKT9OHuY4yP+nRL166sKwE6q + CBwQ7EBgiCOBoY6EhLuQkhpMfp9EBtbmM3PcABZNbWLZlCZWTRvDqqmCyaNZOXEUywUrJo1i2YQmFo0Z + JuPUQFqG1DFrcO0/duagGmYMqmP6gFqmNdYwpbE/kxqrmCiYUF/JhLoKxr1EfTvG1lUyVvzK8fVVjG/o + z4SGWiY01jFxQP0L1Kj7NFWVMqyyhGHVpQypLGZAUQEDC/MZLBguGNOvkOmVpcyt7sfcykLmVeSLzWNW + VT7N1flMEzu5sq+8R70ZV9yLsUUKcl+gt2rHFPYR5KkYLWgqzmN4UT5DiwWFfRlYlMfA4gI1BXRTdTlj + B9QxdeRwFjZPZdu6Ns4cP8KnN67w5+8/8/jRfZ48esijx4/b8fQJj58p0b9i1fIL+6TdKsLws+dPef78 + kSr8KnimRNa+FIC//IQzp46xb9dm3jm2X/jne/xw+1Me3PuJu3d+4L7YR49+k+MU8fYe8EgVaJ89u6ta + FaqA+29BVxGD/xD8JusV/P4P4M8XuPs/oJyjHTy7w3O5JnJt/vwOfvgEblzg8XuHeHBqB38dbOOXbXP5 + bfN0Vfy9u2kcd8Q/+Gl+P2639OHXBQU8WFXO0821PNpUw8ON/XmytZ7nOwbweFs9D7fV8XB7I/e2DeSP + LYP4Y+swHh2czPO3Z8OZRXB+FZxq4/G+Vn5uG8NnM/tzaVQfPhqRwQdDEzg/OIp3BoRwrDGIfTWB7KgO + Zld1FDtrEtlRk8y2/klsrIxhbXEI2yuiODEonfdG9OLiiN5cGd6La8OyuTw0kw8Gp3K2QfykukR2V8ex + uiCU+dkBTM3wZWyaL6MyAhmZEcLQjDBG5CQwXtrWgqENbJo+iQ7ungYoIrCS/jkgyFJIhS3h4bZEhFqr + AnCwv4EM7spHTlOSoxUB2FaIhLUM4mbEK8JwoB5JwYZkRJjRI8qSnoIeERb0jDAnM8yEdCEEqbJfir8u + iT5axLh3I0pJCy2kKcpZCIqvDhl+MmD7aJDl01kVgPOCOlOszPsbLQNAlJAUITX9IjQokeWqNGNqss2p + y7OkvkCIm3SexRnaFKfKfumaVKRpUimDjCIA98/SpjZLh/ocXRqE0NTn6lCb3Z0G6UgH99WXl8dIrGzr + 1Z3qjM5UpisCcBeG5uswutyYcdVmTK61YlqDrYqptdYqJlaaMayvnLdHV2rSOlKX3pnGnl0ZmN2Zwb0U + EfhNhuW+wfBerzG271vMqtARgmyiCsBtlUa0lRnQVmrA6nIj1vc3Y12dBWsHWLFmkDVtw61ZOsKKhUMt + mDfYgikV+gzN7UKtDApV8Z3knnSlKlab/vEm1CYpEYY2FMizSPfRIdZdg2gvDSJ8uhPhpynkTJNwgfLL + u+gATRmwtYkJFKLoq0WYR1cC5Bn42L6Ot8DH7g187BW8hbddRzzt3sJTif617Yy7XRc8HboLwdEl0MeI + AG8jNQpYSf2siL+Oth2FGHVW58RwcfqXCKzghQDs5amvphYPDrIgINACd3cDbIWImZsr8+22C66GBooA + rPEP9A26o2+ooYrARsZaKoxNtFUYmciy4KXo+1L4VQRhJfL3pfj7Eso6RVDWN5B9ZfAyEQKliMDm5v+C + 7KeIwGYmemIV6LdH6AoRc7S3wM3FBlchSs5StrUyVuEgZEkRfhU4CYFSRF9FLH4JJTJYEYGV9ND2dqbq + L6tUyDlthPA5CNFydbDFSwiaEvGrCMDuzg5yHeVaColUyKQt/r4OhAS6Eh4qCHNRP76HhTgTG+lGYpwX + KYl+pCb6q6KvgtREX9KTAtT0GRkpgeoE/1GhSqpnGWB9HQkPcSc22k+O9yU82F0VgD2cTHGx1sHdShMf + Sw2CLDuR4CyOjn9XBqVqsaTRhnMrArn9dgQPrkTy/JsQ6aN94aGTwBoeCP6whZ9lWUkP/UWAdLjBcCWU + 5++H8fhMBHeOhPPbvii+3hjKe3MD2VjnwcRkU6p8O1Hq3YnaCHm/xfmpjrahf6SNrDck374LPc1epac4 + ScVWHRjs0IG5/q+wK74jH/Ux4Ashd7crLfipyozfqgy4W2fI34OMeDRSl8dTuvB0fheer+nO0x3a8Lax + dMymcNEcrkt9r9urcwA/ec9M6mfGg2NWPDzkwb0dwdxeEsz5oR5syLVkYpgmVe6dqAyxoCzWi5KUSIrT + EylJy5S+J52itGSK0xLolxpFcXIoebG+9Il0Jz/KneJYceTESalJN2NwrgETygxpHWbB9tl2XNjsyFen + PPnr41CefR/L01/CefqHP0/uePH0riePfldSRAu+9uf5lzHwcSbPLuVy73Qvvt2Vw/GWROZV+0qdxNFy + lffaVfprb3FC3Ixwsu0qVpzRRDfG16SxvbmGS+vH88nGiZxt7s/myiRmJbowzEOXetm33rYbAx00aXIz + YKyn6f+Hsb8OzOrKwr5h2qLB4u7u7u7u7gkJJCFAEpIQIUhI8ARNSCC4VSg16tQdKrSdqYy005m2M22n + NjWK/761T6DTeZ7vfb/vjyt7n3P2fc65z95nr2vlutfarA+0ZpO/OVsDDBmNNuJoljFnFpjzcpctf9zs + xN/GnfjqHhe+f8yNn19w59KbHlx5z43Lf7bn0t8s+fVTcy7+05RfvzTl8tcWAksufWUuMNNw+Wb98r8t + uPJvK65+bcU1KRWuf2XNNSUKf27J5b9Zc/HPco33g/n3a1G8cMCRvW2z6MmfQlXYFHGYpxEj81mg53x8 + PcUh8zYm3N9EnGVzksPsSAl3IFETgK3k2YjT6mOiib8KMb6mxPuakSLHMqRtvti/ghhHisQGFsXYi9Pp + TFWSC3XpXizK8hHb4suiTJ9JZHhTn+FDbZqXJgAXJzprEcD/IwALMhMmBeCKTDsZI1bUZxrTnG1Ca44p + y8XJ6Mw1pafIij5xflYLWV8l461XnCiFnmJrVpbJsTIb+qsdGG7y0cTfbVKqyN6Nda5sWODK5nolBHuy + daEHmxa4MShOS3+pnXa+dZUubKjzYfOiEDbWh7GmIpiOXG+aM1xYnOEktsuNnnIfVtX4s2aBEIZqP3rL + vLQ00X3FrgxU+7CpzpcN4sBsUGmgF9iytd6G7U1io1psGWmzEpizp8OEAz1mHF9tzp39ZpzeaMlTI648 + O+bG03tdeFbGy7N7xAEbtZL9Zjy124znxyxlTrHn/BEHXj/qwDsnnDUB+I1jdrw4Yc5L+214Ya8Dz4w5 + 8/SYOw8Nu3By0I7dHXqsr5/K1iXzGFlhzsG17hzfEMa+vlAh015igx1pTremKd1Ovp8HHUXeLC/wZFmu + KwvT7KhMMKc4ypDskPmTCNMlJ1xPE4CLYuVYopUWBayE4MIksa9xpmTIMSX+pkaakBKtxF8jsadGxIUY + EiP2NUb9Al64UmyIWgPYQGyvPuG+Mo96z9EE4AiveUT4zSVK7HOw50z8nO/A1/V2gr1nSls9kiOFS0UZ + kxxuSFKInraOb0qgLulis3MiTCmMNpcxaUlZvBVVKfYsyHSiJt2R8hRbSuR+VeRvaZK1VmZHCecKNyZd + +FdapKXcszUpkVbEBJvhK/bZxX4GTrbTcbKfKTZMBycHtb7vTHH4pmMn87693VyxT/O0qF4XZ0Oxb2Zi + /4QjBgk3jPIU2+Gnrc/j76t+AGWiRQqr9YGVAOzmaoiXtxlBwbaa+KsJwCF2uHub4uCqj72zHvbCJ5zd + 9PCQ+cnHW1/s3jz83WYSpLKQuN5BrPPtxDlMId35Nkq8p7MgaC61gXOpEBtR6j2VQvcpFLip6OA7WBSh + S3uqNR1pNrSlWLIkwYTGGEMWReuzJNaI9iQLumR/d4IF3dGGdIXr0hsyj27/mfT4zKDHazqrpA/W+eiw + TTjSaLgRe8OMORBpxkHBAXn2KsXyuPT3uIyNPfJ8lZC7NcqIQemn/sB59AXM0aJ1V/vPZ530/UZpv1U+ + Oyz2bIcSgWPN2CFjaCTenDEZT/uSbNifaMde4ch7hD/vEn48LDx4o/T3gJxvnXzXdXLOQeHEm6S+LXQ+ + uyIN2Bmhz64wPXYowVegBGCFnaG67Aier4nBEzIW9ibKPcYYMxg0h15NmJbvKDxwdZg+K6VtjzzPlTJm + V8l37ZPx1iV8cbmvDi3eM2iR79GthGK53+0Z9uzJcmBftj0HpTwic9ihZEsm4pQArMe2kFkMhcxgKPh2 + hoLELofcxuHYOzQB+FTCVE7FTuXemKk8lDSNx7Nm81KZIedrjPlDgzl/ET7x53Z515vteKzCguN5Foxn + Cc+Od6TVX8a5qxGZrqYkyrhL8LEnNciTjKhQchLjyEtPpShH7G5FCU2LFrCwroqSghyZbyOJDwuW9094 + TbCv1ANIiQklKzWaoqwkLap3UUUBDZWFLBanur4kl6K0OBJCfAj1dCRI+F2op5O8o+4khPmRHB1ERnKk + Jv5myDkiwrwJCfYgJMRTQ1CQB4GBbr8hKNBd2xcsUPVgOU+wvxuhsh0q7SNCvQTeRIX7EhnmQ2S4z2Rd + SoWYm4iN8BW+5kd8RAAJkZNIjAwkJSqA1OhA0mJCyIgLIyM2VOxNMMnSLiUqiHS1T5AaF0qSEp8j/IiL + 8Cc+JlAToNOSI8hIiyY9JYb05GjZjtKE57SUcNJTQ4Q3Bsj39JW6l7TzkO/uKvvcyMn0ID/Pg9oFQSxb + Hsey9liqF/qTmm1NcLQurn4zcfSWecRPDzsffSzc52PqKDzedg7G1nMwstRB30xgOhs9ga6JwGgOuqbC + +S1NUOv/2jjaYudoh52DwM5J5iIn4eiOWFoqEdhaS0moUsy5eVgTF+9DQ30648PLOH2giyfEcX/+RAvv + P9LFJ0+2888nlvHVY4v44r5SPjuZwz+OpvLXAwm8syOEv+5N4Jt7S7h0drFwwT54aSWXHl3KNycr+NeB + HP61N5V/jSXyhbT7ciKBrw8l8u3RRL45lsTXR5L48lACnx6I4+O9sXwwGsX7uyL4YGcYn+wO5ZvxiN8E + 4B82u/Cd2KqvB6z4bsDityhglQL64nZnLu1w4couN00E/mmrvbS31cqfhxwnI4GVCCzHfy8A3xJ+f9np + dBOqjSuXdgvvkuNqbeAb+9Q6wJ5c3evBpT2uXB4T3Fz7938E4H0eXJvw5uq48MsxP34Y9eOTjS68vdKW + Z5aa8UiTGc+0q0jgUN5YE8VrPWG81BHES22BnO+UfV3hnF8ewrmlgYIA3mwJ5t22MP7QHsE77eFc6BCs + jOYP6+J4f2MK721O5Q/rEzS8tz6RPw5Mir/nekI51xnEa4JzHf681hbAy0v9eGqpP/fLOe5dGc+Ztdk8 + tDqPO9sy2d+QwHhdPAcWJnJwUQJHGmI52hjDiSXx3LksiZNLEzjaFMPhhijubk/lgVX5PL6+nKe3VPPs + UC3Pb6/n+eEazm4q5eF1OdzTm8yJnhSO9aZzTK7x4I4m3rx/K5+/fjffffg4X7//OH9/8wE+eOkkf3zh + GO88e5h3nz3Ku88d461njnLuiQO88ug4Lz+6m5ef2MGLj23m6TPreOqhtTz/2ACvPLWR157ZwhsvbNME + 4Q/f2s+fLuznzxcOatG9H759kPfe3M+75/fy9mtjXHh1j5TjvHNOYa+Gd1/fx7tvyPb5Md55XXB+Dxde + H+Gt87t58/XdvPH6Tt58YzdvvblLyl28fn4H589tl3K3YEywR6AiSPfK/r2ck/O/9upeXn15jNdemeCN + 84e48MZRXnlxgnvvWcfYnhaGhxtZvbqU+roocnPcycv1oKszh907F3PnydU8cP967rprNQcPdbBnvJmJ + /Ut54IG1PPfcDp55Zpj7TvewZ7SKXdtLGN1ZxoTUx7aVsnl1Ghv7UhjZVMiBHVUc2F7B/qEy9m0pYnR9 + HttWp7NtVQpj63N49MgSXrq3i5fubufsgUXcNZjBwRXRHJTxdaeMi2d2lvLu8aX8/eE+Pn9iLZ8+3qfh + s7N9/P3sSv78ZA9/eKyD1x9p4eVHlvLKE+28/HQHzz/dLvco53ymgycEj8v241p9hdQ7efRsO488uXyy + fGI5D6v6U+3a9pkn2njw8RYNDwjue2yZhtMyh5x6WHBmiYbTcs3Tj7Zx+kwbp+5fyj33NXP6gVbuu6+V + e+5p5q67m7jnVBOn7m3m1D1Sv7uRu+9s4J6TDdx9chEnjy7g+OEa7jxez91y7PiJhRw7Vs/x4ws5cWIR + J042cfREI4eOLuTAoTrGD9QwNlHDnn21GsZUuVdtVzG6t5JdY+XsGC1j++5Stu0qYceuUnaPlrNTbe8o + ZvPWfAY3ZLFuXQaDa9PZPJDFiPTXmPTf+NZCRgeyGWqPY0NjCIN1AeJnBDJcF8KuheGMNkYx1hzL2OJ4 + LdWzSv+8tTKQTWWBDFWHsmtRNHuXJXJ4RSbHerLlXVORv5P141JX4u+JVVJfnSV9nM+ZHTU8ubdJ+nwZ + Tx1u4ekjbTx1rJ1nT3by3J0reP7uLp6/q4tn7+rk6Ts7eOrkcp6+q4Nn7xbcs5yzJ5fxxIklPHaskceP + N/Hk8UYePVzPIwfqOLWrjP39GWxdFiH+uAtNGdYsSragJsaIKuFYleIHVAv/qRHUCVeqFU6mInwrvHSE + e86h1Gu2hkLhqznO08l1mUGhhw4lXvMpEi5b6KmrRfyqNX7TXWaT4TqXdDeB8O50j/lkyPFML32yvQ20 + MkmORdjcQaDJFGLsp2nBHFUJ9jRle4qf6a5xfOWPpAr3iwrUISxoJmEhswkPn0OE2N64RCUAGxMbpy+c + XPyQ6LnaOsAZyXrkpRmSn6ZPfsocCpLknpN0BMKh0+ZQmaPLgmIDmqrMWb7Inr5WD1Yt96RrqQtL6qwo + L9ClJM+A0gIzCrLNSU80Ikk4pfqha0yoMdHKzwmdzBAZEya+tHDm6FCTm1HA4gPHi88h/kpipPjYwjHj + ha8mhRmQLr6JyqSkpYFWArD4PbnCNUvUD1jlu1akOWgCcL60yVcCsPg9JXK+snjb/wrAaU4sSHMWH8iZ + 2nRnKpPtxW+bFICVL5crPD5b/K9E6ZcY6aNQeyUA34a/3Sz8Hebj66SPj4uRJgCr5bICfSz/KwLLPrWe + r4eTLm4qi5qdjmAm7g7qf5xztcAXX0381ZPPGQqMCfIxJdhP/CN/e4H4O75OeHs44eriIH6RSqNrioUK + PJHS0spME3/NzU2xtjHXhF9HJxucnG1xdrHT4CCwc1QZUSw0MdfE2gRTKc1VVLCUSgA2upka2sBMn7kG + kwKwvrGuJhKrCGJ7JeK5OghfchY/638FYBUBrNJAe3m4iP/mhLuHI67u9loksIKriz1ubo7yWUecXK1x + cjQXGOHuJP6a+G8hnoYkhphTLeOzvcxffPFQdjYEM17vxb4yW8ZyDRhL12E0eSqjwv1HE6eLz3SH+D4z + OJptwOkyK+6vtuG04K4qG05U2HC43I6dORasSzCkR3y3rngzlsdbsER8qCYZAwvFl82Tdy7D4XZSbaaQ + bDGFbCnLnafQEXK7+CqzOVY0j/tL5/FYlS5na/Q4u8CER2vMuK/cmNOlxtxbYqSV98v2mQpTnqg05fkF + lpxvdOSdxS682+DEhSpb3iy24O1Cc/5Uas1nVQ58WW3Hd7W2fF9lxr8L5/FF9ky+zJvB14Vz+b5Ulx+r + TPi1zpKf5Fo/SP1nOeeNJa6w3Icry/25uDyAb5p8+HOpk5zXjvN5trycZ8nLBea8VmbBK6WmPJs3n8fT + ZvBo8jQek2d2Nm0aL2br8HrBPP5YYsB78j6+lTKDt+Lv4B15lu/ET+XtJEHadN6UdueK5/HWInPeXu7A + G50uPNfhzgMt3hxq8GJ3nbf0Txi72jJY05DMgtwgkiLs8FNrYqul0eK9SU4MlHkjkCDxWdxdZSw42WGr + fphpZYla/9fY1AhDEwOMTA0F+toPDUxk/JkqqOAqganVJEws9DA2n4z+1Reur2+ig4Gpjhybh5W9Ho5u + Znj42uAbYI9/kCPBoa6aCBwa4UZ4lDuRsZ7EJPiQl69+fJrPupXN7N81wKmJ7dy3bztnDuzi4YMjPLJ/ + hIcnRnhISoUH9u3mvrEdnBrdxp07N3Ni+0bBJk5s28ix4Q0ckfLIkJQa1nNo+H+xX9ooHNh2CxsFmzgo + 5zi0fTOHtm3lsML2SRySYxNb1zO2YS0j69ewZ2M/o1LftXY1u1avYnT1SkZX9rBvVQ/H+vu4a20PJ/s6 + OLmyjRN9LRxd3cah1a3s7V3G7u7FbG9vYLh1IUMtiwQNWkSzgqoPLWtky7ImDZuXLWZTSxPrpdzQ2syG + FiVON9PfulQTpodWdrGjfxV7t27i5MQYj953D68+/xR//fCPfP3VP/n5p++5/OsvXL16lavXrnHt+nWu + 3bihib0qKvjyFRURfFlLEa1w+eplaTcZ9ft7Afj6lV/4+cdv+eSjD3np+bM8fP9dPHf2Yd575xyf/+MD + vv/m7/z7q7/y5Rd/5puvP5LrfsbVK18DFydx40dNtJ2EiuhV21Le+A83bnzDjetfc/3aF3Kf/xT8S677 + JdevfyX4t4Yb17/VcP3aNxpuXPtOtr+XzwuufQuXvpRTfgrf/AU+vQDvPcuVl+7lp8cO8N29w3xzYoDv + jq/ip5N9/HpnLz8fXsa/d1byr6Eivh0p46Jwhqt3LeZX4WQKV+9u5sbpZVy/r4Wr97dw5YE2Lt7fzn9O + d/D9fT1cfXYYXhmHN4/CO/fCubu59MR+/nl0gD8ONYu7WcIL7ek8vTSGp4R/nG2J4LFloTy4OJT7msJ4 + oCmOM0tSOLM0TfalcNeCSO4WLvWY8KpXOrN5u6eQP/YU8UF3IR925UuZwx+6s7jQmcW59gw5byr314rv + UxLG7rwgNmcGMJAZxJqMYHozwujJjmVtWTaj7Yu5e+Napnh6GYlhMBPDYEVouAOxMc7ExboSHWmvpYAO + DTQmMlgZcAtSY+3ITnQgO95OjLglyWFmpKq1F6LE8MaKwf6dAFwgyFXRwDJpZ4SYkBKgR6LvPGI8ZxHl + NoNw56lECuLddUgVUpXtN5eCgNmUhcyhNkaPpWky+Wda0ZxkzKIYISrRc6iOmUtDpilLiqxYJkamVSZl + JQBXZepSmTqXBRnzWJgxn4ZsPZYUGGppoCfTQRuwrFjqRUoQ1qVVykkB2JxumdCXy+TanDeXxbmzaJVJ + tKPCgK5qQ1ZU67NSDMiGZjs2tziycYk9mwSDi6zpKTekrWA+y3Lm0Jo7l+UySbcXztEE4M5iJQBPp6fo + DtaUTWdL3XxGF5uxv9mCAw2mHKwzYv8CIw4vNOXoYksON1uyV5ztkQZjhpsM2dJsyCbB+iYjVi/QY0Xp + XFrz58i19GjNNqEj35auIje6i31oy/GiRq3NHGhIgtdcYrznEu03n6gAXcIDJsvooPnEBAtRDDEgJsSI + qCCZ9KUv/N1nijGfgbfTdIEqZ+DlOFPKmXgpOMzC00lHW/vCz02PIF+1Zp+FEBz1SzcjTQB2dZ6FixKA + XXQ0uAvpVSKwSgWtoARgP5V6MsBMxpOlFl0eHiaGx9cMFxdD7O0NxcAYYaEEXFMxGCZzMTSao5W3cEsE + voVbaaEn8V8B+Jbw+/vIXwW1rdbZMDCcK1DCsp62Tx1TUbi/hxJ8HYRkqbTPCio611WIlKcQKR8hdOpX + fR6KpDlY4qSEYScrPFxtNajI4P9TAHZ3s8XN1UaDEoDVGsAaHKWtED4vd2d5rt4E+6s0zELOvD3kWk64 + yTHtum7yrLwdJgXgME8h+N7ERHloaaDDQ12Ij/H8TQDOSg/WUj7/HjkZ4WSmhpAc70dMuKdGTiOCVLpo + XzH2QcRF+2vRwEoA9vOwkr43xtdeH1+b2QRYzSDOaY6WBnpxoh5D9RY8vtOHvzwSxXdvxHHt42iZWIPh + ew+Zsx0nxd8vnGWidYe/B8FfomTCjeL6m1Fcfi2Gn5+P44enkvjnA3F8cCSC54aC2bfIjRXiwNQEzqAi + SEX7W1AXJyQ/3oHqaHuqg8wpdtclx2GmkL3bqXSYQqfnFEajbuehrJlckPf00yVWfN1qx9dLLPiu2YRf + lplwpd2Eaz36XBmYy7Udc+GwPtxrDGct4SUreN0W3rWHPzpx4217rpw359LLFvz6nC2Xn/Hi1zOhfHUw + hAt9Xpwut2JT1GyavaaxNMqG5pQAGrPjWZiXQV1OHjXZuVRnZwqUCJxETUYcZYkR4rCEUJ0YxoLkIOpT + fWgQR6VFiN8KmbP668wZXWHJo6NOvHvGj3+ei+WXv6bx6+eJXPp3FFe+DxUEcPlbPy7/y5+rn4Zy/eM4 + bnyQwfV387n0agFfPlrEi7vTGG0Ooi7eXJydeUR7GBPlZ02gpykeDnMIFSezNNWDwaZ07tvSzFuHVvHG + WCeP9ZZzqCyKzXFO9Mn73O1twnJ3fVpc59PiMp9WF33aPYSIC9FfJY7OQOB8tkbN4UCuHvctMObZTive + 3ujI3ybc+OpeH3543JeLL/ly+U1PLv3BkZ8/sOL7Pxnz09+N+eWfJlz+2pwr31jIdzPToG1rovDkfpUq + +ve49r0V17+V/UosVkLyR4788id/vnszgndOeXLXal0GK25jYcwU8vxvI85nhpZiN8BT5ilvIyIDjEkI + tSQ90lHgRGKo3aQA7GeqIUYQK3ZPlfHy/RMDLEgLtSUn0kHsl5M4nQ4aitUav0mumsi7MMuXhhx/FmX7 + 0ZDlxyJBXaaPFgFcnuJKfrxcK0ocdWUboy3FWZZSnNKMBCsKU8R5zbRjQba1fM6U+hRdauN0qIudQVOS + 2I8cYy3qd3Wpg0Cc8TIFB1aW2mlCcLfYvO5CSzYscGdokRJ/vVlf4866CmfWVjhp9Y11nmwRB2yD1Acq + ZX+JiiZ2FBvkymCNSvEcwobacFaVhcj1fFic7qaNySU5riwv9RZb6E9fbRC9UnbJdmeRh9yDN+tqxMFb + 4CeQcy9wYVOdo1zfjm2LbdnZYsfuNmt2Lzdnj7xz+1YYc6hXbFuvHsdW6fPETieeGXPl7JgTT+9x4Nkx + e57fa8crB50Ejrw8Yctrhxw4d1RwxJ63Tzrz7l3OnD9izTN7jHj5oC2vH/fk9WM+vHbMn+cP+vLIiCtH + BowZWTGb/atMODpgz11bfLh3WyR3bopj1/Ig+irdWJZlx2K1tleOG60FXrTke7I424XaFBvKY03JD9cn + 1W8Waf46ZATPJStMT/rclMIYMwrF8VSRtPnxVmTHmmtRuUqcTYkw1gTgpEhj4kP1iQ3SJ1r9oCpwnpby + OTpApTozIjZUicIGRPqrNNDziPQRWyxQKaCVCBzgNg1fTQCeSrC3jnaOhDCx4SH6xAerZRzmkyDtkmTu + TQs2JF84Vmm8WrfYVvsHyMJMN5pyPWnM96A2w5HSBEvtvjURONmGIpUeOtGWomRHGXsu5Ke4kZ/qRpqM + 0SBfI1zsZ2JneYfYu6k4KjHYXgcH25nY2M4QezwDG+tZYg+VKDxf7JZK/WwhdtxWsztJCf6kJAVqArCv + j5XYNmNNKFZrBCsB2N3VEG8fcwKDbAkJdyI4TGxngBXOKuuHs64GOxc9HFx1cZG53UPmLU8P4Rku8kwc + byfIcQoRgmT3OyiS/qkN0WVRmAH1UlbJdpnnVIpcb6PAZQpl3nfQGKFHR4o1Hak2dKZa05ZkSnOsMYuj + hffFGLM8zpTOODM6o0zokj5bEaTE3zms8JnOCpnTu5UA7DOLAXneO6RvRyJNGQ83YSLCjMMxVhyS93lC + 9o9Lnx9IsuFAmgPj8oyHZDxskPOtlz4bCNFjnXCs9dLvar3eLXKtoShTDSrls4oY3iH3tFvuZW+yFQdT + 7TiS6sghOf8Buc64jJndwtWGhbNtkb7fHDRXwxaxicNBc9gpvHh3uC67wuezS4nBMlZHZfyORhkyEmXA + jrD5bA+dJ9BjW4Q+Q5H6cg8GrAuZR0/gbLrlHN0h8+mS59gpbTrkWaqyS+61M9yIFrnmYl8dGjyms9B7 + BkuEi6+IMGAg0YKhdHnHZe7am+ko391enoE1e+X9GdOuK88sfLZgBjvDpzIRO53jiTO4L202D6bp8EjG + XB5Nm8Nj6To8mT2HV4R3X1howZ+W2fHJChc+7nHjwlJbnqwy53iWPJ8EE3mO0mdijxZ6mlHiKb6Fry25 + QS4URvlTkBBBdkI0aYLUxFjhOMkUF+VRWJBDWlI8cRFhxIaFEBMWRGxIgLyHfpOI8CM+0p/M+HB5D2K1 + KNnO5jpWLK6jsaKAgpQYEsP8iPRzI8zHRUNkoIcmvKYnRZKXlUhmWgzxccFERwdoiJL7iYz0FU7r8xvU + ttqvoO0L8yY8xEs4r5QCJf4qKPFXK8N9iI5QArCqexMtbRRipK4h1Oc3RAd7yxzjRozwN02cjgwkNTqY + pHB/mXc8hOt7yNzjLfOSL/ERsi/YixA/V0J8hSvKPUSG+wrfCxAECoI1xMgziZb9akmQsFBnosLUj38d + iYtxFH4oiLElMdaWJPHrUpNlPil2p3ZhAHWNgZTVeJCWZ0lcmjFhCfoExhjhH2OCd5Q5rqEmOPkLxL90 + dDeWd14fK3tdLGx1MbfRxdBiLvqmc9ETPm+sfqRpZ4Wdsz3Obs44OzvjYO8i84kLVpZOWJo7Ymlhi4WV + NXZ21ji7WhMS4kJJXiR9bQVsXVnMxGA5p7ZV8sLhhbx5Zz3v313DR/dU8MldhXx8NJM/H0jmD3tieGmD + Dxe2R/DJ0Wy+e2gB11/qhpf7uPjoEr46XsbnE1l8PpbMP3bF8PH2UP62I5RPR8L56kAs/z4Ux1eHEvni + QBx/3xvNn3aH8+62EN7ZGsgftvjzlyE/vtgdrAnAP27zvSkA2/KNEoAHLTUBWKWAvjjsyKXtLlzd5c71 + EQ8u73DVooO/W2+llf+NEHbiFyUE7xIo8femAHxL/P15h3AiKS/tdOaytLk6Krx7whv2qTTQ7lze48Iv + uxz5dUTajLlowu+tVNBKAL4xMZkq+sq4N7+MePP9Lm8+HnTifIc5Z2rncrJkFmcaxA63eWkpn99cGcXr + SvRtD+ONFRG80RHOK0v8ebHRh5cafHhZ8FqjH28uDeat1lDeag/nzZ5o3loVzZurozkn5Wu9Yby+Sjjc + 2lje6Y/lzb4ITQA+3xXK692CFYG8tjyAFxZ789BCdw7WuzHe7MvB1kgOtMQwWh/FtspQhivD2FUVxUhN + FGMLItkr+w80xnKoOZ6DTXHiV0QxXi+fWRzHoZZkDremCFSZzLHlaZzsSuee3kzu6k5hf0uUcOgIdjVH + s6cjXfhEFY8f6OXCo6N8cv4UH5+7lwtnD/HsqW08dc8Qj53cyOOCs/ds5dGTm3jgSD/3H1nDg8f6ePDO + Xu4/3sE9h5dx58FG7j60mPuOt3Dm7hU8ft9Knnqon6cFz5wZ0PD0w+t56pH1PP3IBoHUHx7k7M39anty + v+CxjQI5/uigYD1PPjLAE4/288Rja3lc8Oija3j88XU8dVZFkfZrkaIPn+mb3P/YII89NsCj8pmHz6zj + kYelzeNyvqeGeO6Z7Tz/zC5eeFZht5xziEMHOhjasoCBgUq6VuSyaFE0RUU+lJX6s6avmLHdSzl5bCWn + 7lrLPfes4cTJXg4eWs6Bg63cf98annpyC088sZF7T3UxvqeakZ1lWgroiZEqJnZVsGtDLsNr0hnZkM/4 + Fjnfxjx2r8tm15o0dq5OZXtvEltXxGg4uiWfM2O1PD5RxyO7y7hzXQpHOiM5KmPv9KoEnh0u5I29tXxw + Ygkf37ucv93XxseCvz3Qyl8faOH9+5fy1r2NvHxPHc/cVcNTdy/giXvrOHOqhvtPVXPqnmruFtx5VwUn + 7yzn5MnK/8GJExUajp38L46eKOew4NCJMg7JnHHgeCn7BfuOFrHnYD6jB/JuooCR/fns2VfIuGBsbwF7 + J4rYt0+wt1DD3r357N1XwMR4HhNjgvF8DtzExGgu+zTkyHPMZY9gdETOO5rHnlG5zlgxI2NFjIwWsmNX + HkPbc9g8lMmmrdm/YeOWLEEGGzansX5TCgMbU1i3IZn+wSQNg+uTGBhMZJ3a7k9g1Zo4Vq2MZW1vLIN9 + 8WxYk8zmtckMr01ic1cM6xqD6BF/YkWhI2vLPBiqDWDHgmBBCDtUFGBdBEPVIWws9WOg0EvDYJE3myoC + 2V4fzp4l8m62JLK3NYHxljj2Sn2iNUlL/3yoK5UDnYniO6Ryz8YiHthezf27ajm1Q/pnqILjQ+XcvbOK + UyM1Gu69Wd6tsFv6UW2PCvZUcc9oBXeNyHjZXaLhHsHdqtxZzJFNuYx0J7C+MZg2+R4NaRbUxBtRFj6P + UuFQZcKZKhSE05cLDyr1mUOJ1yyK3GeS766jIc9tFnmus8h0mkGm4wyyXGaSrcReZ4HLHNKkTHbSIclx + toZE5zkC4fMu80j1mE+6pz6Z3oYaUr30iZO2oVa3Ee0wjXR/FQFsJ36ip/B8D2rSnITLW2vr50YGSrsA + 8XWDZokNnEVoxByiYlX0rxKADYSfGJCYYEhWuglFuZYU51hQLP5mYZoeRanzBfMEcyhOm0t51nyq8/VY + VGbK0lor4ULO9C5zpUfQJVjWYE/zQkeWNLhTV+VMXqY5KXHio0Sq/yMqqIhfU03wjYsw14RglQ46Uvhb + vFoiUBN/J5fESQgz0vybZOGa6ke0meJnqVTQ6RFGZAiPzo03ozTVlvJ0e61UvleetMkTLq5E4GLhySpb + ZFm8tZb+uSrJXoOK/q3NcNHKEvHV1PI4WcKPs1XmJPHHEj1nEesygzCHqQTa3k6g3UwCHObi66CHlxKB + 3YwnI4B9LTUoMThAiwS+GQXsOFcTgd2kDyfX+p0vx4Tr+BqKHyXwM0JlRAz2M5d+sSY8yImwQFc5lzNK + AFYimr2tDRYWZprgq0qVUlfVbwnADo7W2hq9KlLXzd0JV1dH4UGOOLrYaVG8Ssy1UEtg2Ftg5WCl1U2t + TTTx95YAPM9gLkoAVnUlEtvIOdXn1Xlc5Zxuns54qgATlfZZ4OXtpl3PVTiXm1zPw9MJTy9nrVRisKe7 + I16y7ePrgqenHe4qO6CzET7C4wJd9cSfNSQl1IyqdGfaSuQdrwtgZ4M/+xo8OFBly7iMq/EMlf55GmNJ + 09gdP5Ud0bexLfI2RuNncDTXiFMV1txTZaeJv4dKrRkvsGIw0YCOUB3awsRvSbGiR3yOlkQrGmSMLAia + T57THeTYie/neBvFggWet4kvcwebknSYKJjP6WpDHq0x5KmFJjy9yJSzjZY8WGPK4fz5jKZNZ1fiVMZS + Z7A/cxZHs+dyt+DBfF2eKjER38SSt2tseKfcgneLTPlLmRX/qLDli2o7vqoWDldtzvdlBnxdoMMXmXfw + z6zb+HfuDL4vnM0PZXr8qkTgSmMuy/Wu1JhxXYnAjY6w1Isb7X5cWebP9w2+fLHAi79WuvJ+uT3vllvz + tlzvfLExz2bN1YTfhxOm8rA8ryfkPl/KncfrRYb8ocyEd/L1eTnuDl6V5/h61O28GXMHb8RP442k6bya + Op2XsmfwZo0RF5oteLPFllfanXmiw4/7O8I42S78qD2B0a4s1ixOoizTUwuYsLeZJuNtPkGBtuIfeAi8 + CPBxlTEhXFyLAJbxZ2mBsZkxhiYy1kz0BPqaAPybCGx+MxpYi1CfjAiejP6dj5HZXGkvMJ2NodkcTQBW + /N/awRA7F2PcvCzx8bMlINhJE4FV9K8SgKPjvElIDqCgMI7mxSVsHmjn6N4twrH28PDRPTxxYi9P3bmf + p+88JHb9sNj1IxrOSv3JOw9r5WMnDvDwkX0azhzey0OHxnngsODgHh44NKbh/iN7eeCowj4eFNx/dGIS + x/fzgODB4wd46MRBDQ8KHjgqOLyf+w9NSDnBfQfHObV/DyfHdnBidIeUOzUc37WNY9uHxGZt5sjGQY6v + 7+fezQM8uGUdD21ay4ObhCtu6eOB4TWcGl7N8U29HBjsZHxNO2OrlzO2qkPDSJ9Ayj1S7lkp9ZUrfsPu + lZ3sFOxe3c2IYNeaXnas7hEutYqDw5s5sWeX3P8RnnvkIV5/4Rn+8OZr/P2jP/PlF5/z04/faRHAN7S0 + zv/FtRvXNUH4iiYCK1zSoNYLVtBE39+Bq7/w8w9f8/Ff3ueFpx/noXuP89Rj93Ph/At89OEbcr0L/Om9 + V/njOy/wwXsv8unf3uS7r/7E1Utfcu3aN1y5+C/BP7n8y+dcvvgZ1y79U7Y/5+KPn/DLDx9x8aeP5fx/ + 5vtv3+O7b/7ID9//iZ//81d+/M9fJvH9Rxp++O4vGn7+zydc+vlzuPyF4J/w8yfw3Yfw+Zvw5+fgwkNc + fnKCb+7awOf7OvhqXyvfTSzj4uE2rhxr4+KBBv69rYh/bsnhm50F/LK/iqvHF3Lx6AJ+OVLL5WP1XLu7 + EU4v4caDLVwTXBSe+cN97Xz/YK/4kzvhzUPw3in48BG53oNcfu4E/7xrCxe2LeM58VUfFh/l3tog7qsL + 5MziMB5oDuO+xlDub4rgzJIEHl+WyhMtaTzWnMRd5YHcL3zqWfFjzrel8fbyLN5ty+T9tgzeFz/m/Y40 + /ij4Q2cGFzoyeHmpfHZBLPeUhHMgJ4Bdaf5sTQtgQ1oga9JC6EkLY21RKnvaGoRjrWaKu4ch3r6m+AdY + agJwXIwzsTEuREbYEhpkTkigiRh1E+LCxfjH2JIRZ6dFOKXIdmKICcmhxmLEzciOVlEnk8iKtCA7woLM + MHPShQwk+wsx8Z5DjKcOEa7TNPE3RCbvUIfbNBE4SYiVEoALg+dRFalPQ4Ip7dm2dObasTTFVBOAa6Nm + Uxk9m7p0Q5YUWrK01EYTgFUK6Ir0+ZSJAahOn0f9TQFYCb/Lioy1sjnfgCUF+pMRwTLZ3xKAe2ssWFVn + I6WVtt0uk7sSf9vL9WkvlXYlc2SfLv2LrDTxd0OTLRsFAwut6S4zYrkYnJbc+bTl6dJeOP83AXhFyQx6 + SmfQWzSV1aXT2FA9h52NRuxdbMbeRcbsqzVgvFqfiQXG7F9oyphgm+zbWDmXtZWz6auazcoaFYmsQ3vJ + bJYXz6WzzJAV5ZasrHRiVbUXq2sC6KsMpjXbm2rpk6ybAnCUp8B38h/N4f7zpFT/nNYjWv2jOlgIZLCR + EBQjISi6eHmoX7TNwsP5v3B31MHzJtwcdCa3hfj4uusLyTEhLMBcK1Xak1sCsKvT/y0AqyjgSQFYjwA/ + Q038jQyzuSkA22oCsPaPY0cjbG0MsFRRvabzMDKZownAhsb/xS0R+BZ+LwLfSv+sxN9b62ncEn+tbSZT + PKtjak1hXT0d9Axma3VLKyNtrQ2V3llBrcnrKERLibouQrKcnaw1uDurtM8OqPV5b0GJwS5CsJylnZuz + tSbSKqi1gZXQq0RgV5f/isBK+J2sq1KliJY2al0OOa8SfMODAggPDiAsyF9b/1cJwEr8Vfeizu/jaa+l + gA4PEcMY6YVKAa3EX5WKMybSjcQ4L1IT/chICfwtAvi/kcCT0b/x0fI5ZWADnGQMeMh5fIiJ8iMqwlv6 + xlX61JFALxv83czxczDAx1oHX/MZ4pDMI8tbn5rI+fSVGHDPehcu3BPGFy/FcOlPMdz4PJQbX3hy4ysX + +JcTqHVg/+TO9fcDuPZOBFffiOLXV2L48fkYvj0bz1ePpvCnE9G8OhLIg/3+Mu6dWaKcr+BZFAtxL48x + p0yIfnGcA0XRdpTIuCnwMSLbXUi94zTt135d/lPYmzydx0p0eLfJiH92CjnrsuObFiFozcZcXGrC1RYj + rrXrcnnVPC5v1YX9RnCXOTxqDc/awCu2MlE7yATtxPW3JgXgy68KXrbj2oueXH48mK+PBvLeOk/O1Fgy + HKdDq+9U2qKtaUkNoDk7gca8LOpz86gRVOVkCzKozkqlMj2J0sRYcUgiqUqMoTY5QhBMXYo3i7PEsZJ5 + raPQirU1JhxeY8uzh3x579Fo/nkumW8/TOanv8dx+atYLv07lCtfBnLln0Fc/0cE1z+KhQ/S4N1crrya + y5eP5PLctkQh3n7UijOV4DqXaHcjTQAO8jTB0342YeJcliW5ypyVxL2DC3l5pJ3nNi7i7uYMdmf7sSHK + njXB1qwKtaZTHJkGcV6rbadTaT2NGnsdFjnOoVn2LZe5ost3OhtiZjAmpPnOKn0ebzHjwmYn/n7Yh6/v + 8+fHJ/2lr7359YIrP75rw3fvGfHjx0b8/LmQ4n+baUKvgib6fiv4Tp7397Lve3Ou/iDlf2TfTVz90UL2 + mXH1O2MufWHCxU/suPgXb75/O5S/PubPo0Nm7Fg4jaVJUygOmkKS7x1EeOkQIvNNiDgnMf7KNlmRGeUi + 9sl5UgAOlDlI5p3fBGD/ybWA42VOUwJwaogNmRF2Ysscxfm0J0+ejUoHXZroSk2qhyb2Lszyoz7Ll4UZ + vtRn+lKb7kVlyuT6v9kxdlq0ZYrYv6QoCxLFJibKeE6LtyQ/yVrslC11mgBsRl2yHlXRM6mMuIP6uJm0 + ZBpo6Z5XlzmyptxRE3+VCLyyxJ6eIls68ixozzFjTZkzG2o8NfRXuLGq2IGVRfZafbDag4213gxWeci2 + K2tKXOS4oNRdtn3leAgDleFyzhBasn1oTHdnYZoLDTImlxZ6ie3zp6s6iO7KALF/PiyXfb3lfqytDhD4 + 0V8jjl6tG+vrnNm0yJGhxXZsX2bHrjYrdrebaxHAezsM2depy97OORzomsOZYbvJdYB3q9KGp0ZteHHC + nvNHPXj9uDuvHXLUBODXjtgL7HjzuANvn1Tr/5rzxE5dXpiw4q07PXnnngDeOhXIubsCeOaQO/fvtOT4 + BgNObLTg1JATp7f58sCOCO7aFMtoZ6i8W5605DjQnOHI4gwlcruxJN+dRZlO8k5aUhxtTE7IfJK9Z5Di + O5P0oDlkhemSL46mEoHzYky1tGs50n8ZUSakyv7USKPfBODEcBX5K7Y1QFeztZH+Kr3zXCLE9sYEGU4K + wKEGxAQqEVjsr98kVPtbArCP0+34SRniM1sTgOPEPscGzidazhXrO4dY79kab0oJ0NfWwCpPtJdxOCn+ + Ls7zlj7zo7nIh/psF8puCcDy3Sq01NWOVKn0cTneVOX5UZkfQFm+2IcUsR2BZrg7zcbeaiq2VndgZzNV + bN8sDXZaFLASgGeK4yd1qzk42utqaZ5VuufIcLE38b7CE5XdcMbby0JsnZHWxtZ6riYAq7WDVQSwWgM4 + INgO30ArXL1NsHfVw8ZpnmA+tloUsPolsC6ubnNxd58ldk+eifBCP/spRDjfRpbfLOqkn5bKd1sWZ0lz + lCkLg+dT669DpfRbmcdUqqTvlkrfdCbbaFiRbEV7ohlLY4xZEmnAsihDmbOF20nfLVfiZ8B8OnyEp3nN + otNzOh2e0+iSc/X5zmadHNsWacauSFNGw2UsC689Fm/H8ThbDkabsy/KjEMpdhzLcuFAuiM75HlvlnGw + OdxYW0NX1YdU1K+0HZYxtFXGzVa1T44PRRiyLcqAnXJfY4kWHEi15ViqA8djrDgabsZ+6fsxuf7ugHls + DxIEz5lEyGx2Bs9mV8gsRsLmyX3NYyR8PqMRupoAOx5rxGi0nFf2KQF4WMb0Jik3ylheL99/dZieFs3b + Fa5He4gubaF6tIbq0ybPYnmkMR1yn8tlPDcH6bJIxly1+3Qq3O6g1ns6zcLHV8aZsj7FWhOBRzMdmZBx + tT/RlnF5L8bkme6S845EzWdP7FzGxUYeS5nDPelzOSMc/IlcPZ7JN9TwtNSfK9DjfLUpf1xsw8ftLnza + 68E/+tx4t9WW5xZYcjpfnnu0HuvkHepyl/vztaJZxlhjrA9NKWFic+PE3optzUwkOyWW5PgokhNiyBab + m52VTpLU46MiJhEdRmJkKIlRwSREBhEX6a+JwGmxIeSlRGtRwH3tzfSvWEbPknqaq4oozU7WomeVgBqm + RFN/N1LiQsmX65UVZlCQK8fTY0hJiRREaEhKCptE4k1IPTkpQoPaVlG3iXEhJEipQa4/CbkvQWJ8KCkJ + qp1KER1Ectz/gRiFYA0JEcLjwrxl7vHRhN+shHCyk6LIkntOiQyU/f6aKKwigdX3TJB6ZLAXkUFemvCr + rpck11P3kyifmYQ8m5gAosI9iQh3FT7pTLz4f8mJbqQlu5Oe4kpakpPUHUhLc6BACcB1fixo9KNigTs5 + ZTakC5dJzjMnLsuKmEzh+Bn2BCfbEih+SWCEzAEq44+/JR4+5jh7mODgYoy5nT4mVkoI1sPUxhhr9aNI + Nyc8vNxxc3PTBGAba2esLCYFYCtLB6yt7WV+stP+YerjaUtSjCd1xZG0VkWyamEkO9sTOLOjiOf2lnBu + fwHvHMrjgyM5fHAglXfHE3h9RyRnV7vz4oYA3h1N5O8nirh4dhmXn+3gx4ca+dfRIj6bSOezPQl8siOc + P28NEPjz8Y5APt8bwb8movhif5zUo/loNJz3tgfz1iZ/3lzvw4X1Xry/wZNPt/nxw0gwP233+y0FtBJ2 + lfirxN2ftzr8rwC824PL2121498NTKaJ/nmLPT/fTAn983YpFXa5argl/t4Sgi/umBSAr+x24doeD038 + vTHuwdUxV37drdo6/P8UgC+PefHzbi++2e7Fn9fa8nKrIafLpnEo+zYeWGDGU0tceWVFEG+tjOFCr2BF + NBe6Y3izM4oXGn14dqEHz9d78ly9By/WefFaYwDnlwXzZns4b3RHcX5lNK+tjODlnnBekvOcWxnG22ti + NAH4wqooTQR+a2UkF/oieas3hPOdQbzQ7M19da7sKrNmS5UD2+q8GarxZX2JD2vzvDQM5PsxWCj7ioXH + lviztTyQ4apghiqC2Cj71ott3Fjqz6bKIDZVBLBBRSqV+rGpPIDh2mAtanGkIVyO+9Bf6ik8yYf1C6PY + 3p7N0c2NPHakn9cf2yuY4OydW7lrpIvD21oZ39TE3o2NHBxexsTQEsY3N7B360Imhheyf1c9EzurGBsu + YdfmXHZvKWB8WxkHR2o5Or6II3sWcXi0nqNjDRwZk+2xJg6NqzS7zRzd1yylqjdJfclNNHN8YgnHDizV + cHS/7BMc2r9Yw8EDk5jY38SBQ4s5elSOHV7MvolFjO+tl7Ke/QcaObC/kX175T7lHiZUWl8lUJ/s5N57 + VnL61Cop+7T6kUPtbN5YQXdXFp2dmbS2pFJfH0lRkTfFxT50tGWwZUMNYyNLmBhv5eDBdm392LGxxYzu + aeTOO7t4+KF+zpxZy913dbB/Xz1799Ro6Z8PjtXKc6hkZFMeO9aJ/7E+m92DWWxbncqWnkS2yLja0hHF + prZIBpoD6F/sx66eGI5Lu1NbcsX3TOd4XxyHlodytC2Y0zIWnxxI58UtebwxUsa7+2p570ANfzy4gA+P + 1fH+yYW8c7JOeGYNzx8p54mDRTx8oIj7DxRw94Fcju/P4chELgf3Zct3yWDfWDp7RzMY35Mh95ypYXw0 + XcMehT3pjI6mMTKSxm4pd46kati+O4VtIykM7U5i07ZYNt7EhmEph2LYuCWOrVsTNAwNJWrYPpykYdtQ + vIadWwVDCYwMJzK6LWkSw8nsHkpi55YEtm2Jl88rJLJ1i2BzElu2pghSZV8KGzckMjAYzxp5p1av/S9W + yXu2ak0UfasjWbkqjJ6+MLpXhtIl71lXbzA9K0Po6QmmV7ZX9oaxcmU4q3rDWdsdzkB3JGt7pC8EG7oi + 6F8WSN8CL5bn29KSZUlvoSMbKrzZIr7Flgoftor/sFW9a/KOrSvwYFW2K6tzXASurCv2YnNVANvrQ9nV + IHN1YzjbG0LZuShiMoV0SzzjrfGMtUSztz2Ow6szOLm+gOObizi0Pp+9a7PZI/vG+zPZN5CtYUIwPpAl + UGU2Y+tu1tdJ3w1I20Hpu8E0xgZSpH0q+6S+b20yO7tjGZQ5qqvcVTiFNfXJJpRH6VIYPIvCQB1tKboy + hYC5FPvOIt9zFrkq2tdluib0ZrrMItNZIGWq40xSHcSHkDLFfiaJ9rM0JIjvHCd8OtZWh2jbWUTZ6WiI + cZgjfvo8Utz1SPM0JNPHiEw/8StU9i7HGcQ6iy8i/oL6H0htuisL0t2oSBF/VHzIROFyESoCOHAmwXKv + QUEzCQzRITRCfI5Y8TkESYkmpKWaU5hrTVmRA+WFdpTnW1GSZUxRugGFaboUpcr3Sp1HifA0JQLXFhrS + WGFGa534mU0OdC1xZuVyD3oEXW3edLcHsKzRSziQNakJ+sRHio8iPFNlOFJRv5MCsIWWKTI80JCwAPF7 + wkw0ETg+TPzrcFMSpN0tAVj5TxnCPW9BCcGaAJxmS6nwzKIkK/G/TcgWfnlr2Zt8OVeh+NWFwsFLYy0F + ShC2ojzBluo0J00kLxNeWih8NkeeU0bQfNKl/9RyMvHiW0Q6zyDEcRpBDrMIdJyLn6Ou+F96eLsa4eNu + gr8SfpUA7GNJkIoI9p4UgT1ddfEQf8VLCb+e+lrmQxXxGxJgQrCCv9T9lQBsRmigNRHBzjcFYCe83Z00 + Ec3OxloTe29F/SoB+JYgPCkA22jCr7uHs5RqPV4HnN0cNAFXRfFq6aCFH9k6W2PrYqtxJXNbM+FPk+mg + Dc0N0DWar0UB/14AdnC1w8nVXqDOZ4+rhwtePm5a5K+6nlobWK1PrKKUlfjr7eOKj68c95bSywVfHxf8 + /QU+DsK3LPGV5xTkYUi4lyHxgSZkSn9UptqxtMCFtdVebF/oxf4md44ssGWiWI992TPYmz6D8eRp4vfc + Jn7QFLYETxE/6Db2Z+pyd7kNd9c4cKzCTtrbsDNH5hTxJZr8p9EUpEOnytyU6cCSBAvqxIep9J5GsfiF + VR7TaPDTYUnATHoiZzGcMZ9DJSbcW2PGk03WPNtoyfNNljwt5cMNlpysMGIkYyYbYqawVu5hQ9QUhuJv + Y3fCHewTHEucxn1pOjyVPZ83y0z5g5zrw2JTPq2y5osaG76stuLf1eZ8V2XM9yrtc8Esvsyawj8zpvBV + 9u18WzCTH0rm8muFAVcqDLku7a5XGnFdrnutxgIWOcBSd1jmw9WWQH5p9ufbRm8+q3Phr5U2vFduzhv5 + BjyTNotHE6ZyJk4QP40n0mbzkrybb5SZ8Y60eSvPgOdjp/JS9B28FjWV12Om8XrcDM4nzOBlecYvpE/j + XOk8zi/Q5fVGE15bZsvT7T482hPNg6uSONkn9q0vlzVLkyhId9H+929uNkV49TTc1ZrYvnYybh215QhV + gJK9rSVWVhaYmZtgYGygQUWYKxH49wLwf0Vgte7vpABsajkZATwpAs/DyHwuaj1gU+v5mgBsaauHlb2B + cH5TPLyt8PUXXyHYiZBweX8i3TQBOD7Jn7SMMGqqs+jramB0aBUnxrdw19hWTu0b5r79O3ngwAgPHhrl + /sNjGu47tEeDEnrvOzjKqYndgl3cs28nd+3dwZ37BFLeNbGTu2X/3QdGufvgCKcO7+H0kTHuPbKXUwpH + 92m4V+HYhAZt/+F93HNgr3xOCb/jco5RTo7v4sjuYcEQx8e2c3x0u/DELRzcsl5s1FrG+7rZ29vJ4VVd + nFyzgrvXdHL32g7uHujkns0rOSnf68imXibWd4mdEgx2S9kjtqybPet62NPfzfjaSYyt7f0No2t6GFHp + rhVWd7FrdTc7V/cwtrGfE6M7efDYQV49+zgfvnWef/zpPf7197/y5T8/5dtvvuLSrz/B9auoFX5vXL/O + jWuTUOv8qmjg62ot4KuXfxN+/58E4OtXfuan7/+tpZZ+9okznD5xgDP3HuOFpx7ijVee4PxLj/Dck/dw + 9rGTPHP2Ts6/eD/vX3iSzz8+zxefXeDLTy/w1Wdv8W+Ff77F15+/xRf/eJ1//PVl/v7nF/jHRy/yyV+e + 48/vneVPf3iCv7z/DH/78Dn++sGzGj56/3kNf31PtgWf/PllOdfbXPz2T1z59kP46m347DX481l48zTX + nj/IT6c38q99bfx9uJYvd9TwvXDzX/c1cOVQIxf31vDV1lz+uTGdb7Zl88t4KVcP1/DrwUp+OVDOpUNV + XDuxAE41wP1LuHr/Yn65bzE/3N/Kfx7u5fpru+Gdo/Dh/fCXJ+G9J7h67j6+fGA3b+/u4MneEu5VGYvK + /ThR7cc9i0I41RjGvYIHm6N5rDWFp9vSeFbwtLyn94nf8khNMC81ib+1NJG3liTxdlMC7zbHC+J4d2kc + b7fE8U6bHGtN4hU59nRNNA8VhXIyO5CJ9ABG0gLZnh7EhvQQ+lKChZslMtG2iNObVjPFzcNAjIIpfoGW + hIbZEx3tpKWBDg2zIijAjCCZ6MODTIgNNyc52pq0KGuSxdgnBBsT469PbKCethZwSqgxKSGTSJZtDUIE + Enz1iPWeS6TrDCJV5K/LTQHY4XbBbYQ73k6C23RyA+ZTFmFAfZwpzUmWLM+0oT3TiqVJJiyK0aMmQofy + iJnUJs9ncb45S0utaam6JQDPozRxFlVp86jLvCkAFxkJjLVI4MYcfRpzxbAImvPm0VqsT2elMb0LLOlv + dGKgyVlKe9YssqWvzpIuOdZepi/t5tIuE/7ahZZaFPD6Rhs2CNbVW9NVOikAt+bpCiHWo71QicCTAnBX + iRim0pmsLJ6uCcCDlbPYttCAPU0m7Kk3Yk+1HiOV8wX67KrSZ7hCj8GSOawqnEFXwXQ5z1SWF09jSf5U + FudMZ1n+PHqqLFlV70L/Ij/W1gWxujaE7vJgGlNcKZM+yfAXo+w1l2glAN+KNPKV5y7PP0r6ITrAUAib + kRAUE03U9/PVx8Njjhj/2bg5/xeujnNwvwkXx8ltTQD2NCDIz1SDFv3rrqvtd3XW0eCmziO4JQB7us/V + BGB/uX5IoCmR4dZER9r9jwDs4WqMs7Mhdnb6WFrpYmaqxF6dSQH49zCe8z8CsKmZEn4nU0BrEb9qEXoh + Q5bWKqrXWEiVCVYCrbwpABsazfsfAViL/rU3x9HBEgf1zycxeM5CttycVCSvnRhEew2KxKn1eP2EFGkQ + YuSlfjknbZUI7O7yOwFYpYEWKAFYCcH/twCs9qu1guXc7o7yfNR6vD5EhAQKgv5HAFbndrRVKaIt8XK3 + IcBP3skgl5u/0nKTZ6gigl00ATgu2p34aA+SE3zJ0Nb/nYQShNOTA0lJ8CMuypPIEJX+2UmupQTkSYSG + uBEihjc0wJFgHzHCHpb4OxriYz0bH/OZRNjrkSqkryhQpSHXYaLbhpcOBfDp01H8/Ic4bnwcwY1PfODv + HvCRK9ffc+byG65cesWHn58P4odnwvn2yWi+eCSSfzwQx5/vSuDcWDiPbfDlRLcvgxVO8s4bUhg6l7ww + fQpizMkVYp+lftQQa0dehA35QWZk+4ozIES+3H0KvWG3czhnNs/W6fKXLnP+vcaWH1bb8d1yM35YYsjF + ZkOuLtbnypJ5/Nw5l58Hdbk6Ysy1I0LGHrCDJ+y58bzgNSeuv+7EtTfsufqGJdfOW3H9vKPs9+LaM0F8 + f2cAf93sxVMN1uwRZ6knZAYd0Za0JfuxNCt+UgDOy6UmL4+qvGwqczOpzEqjPDWFksR4iuJjKIuPpTI+ + ShBOdWIQ9WneNGW5sSTbUd5zczYLUT25wZ1nD4by9oPR/O2lOL56N45fPknk8mfRXPlHEFf/Hsh19Zz/ + Egd/SOHG6xlcfCaVf9yTxMMDoWysdKUiTJwuJ3F03Ax/E4C9xAmN8NSlLMGJNbXRnOgr57H1dTzUXcyB + yig2xjuxOkTmlVAb+iLt6ZB6tbzDuZZTSDOdQqb57eQJOSyxn0GNOL4NblNp87+N/qhpbEudwcHiWZxd + bs4ft7nz2VFfvr7fl5+f9eXi6+788rYDP75nxk8fGfLLp4Zc/spMDLIF176z4up38qw1odeCKz9acPkn + M4Epl3804ZJAldr2zyZc/VE++60JFz+z4eJHHvz4h2D++XwIL084sL91jjgIt8l3n0Kq3FeU90xxTvQI + 8xFn+KYAnBHpTGqYE3FBNmKvbgnAKvJXib/mxAWIkxpooQnAySE2pIVPisBZkTZkq7EXbU9xnAuVyW7U + pHtSm+FFbZonCwSqrEpx19b+zZexmhllpf0walIAlvNqMCUlRsZvgiUlKdbUZFpSl2HCwlRD6hLnURs7 + i0WJs2nLMaK3xJq1VS6sqRQHvMyBnhJbusWBX1FgQ1uWOa2Z5nTni50qcxW40VfiQle+HV15Km202IYK + DwaqvLVyTZm77HOnr8iN3mIP+oq9ZJ/YjdJQuguCac7wZqHcu1pHqS7DnaY8L1rLA2ivCKSjPJCWYh+W + 5nnSUeJLT5mfwIfeMg9Wy7311zixYZETW8RmDi2xY4dKAd1pyZi8i3s7jRjv0GW8cw77u+dy7yZzHthq + wYNDFpwZNuOxnWpdX3vOHXHXBOBzR5145ZADr2oCsA2vHraWYzbSxogzQzo8M2bK+ePOvHOvH+/cF8Ab + p/x44ZgrT+yz5vROY+4eMuf0Nkfu3ebF6eFgjg1EsLstWBOr2/KcWJLpRFO6E41SLs51lffPnop4c23d + X5X6OUXGjIoCnowA1tVSiOVFGpOjfpUuyJb+S49U/7RQ4q/wnAgj7Z8Y8aFqTavfC8CT6Z2VABwVoE+c + Sg2t/jkiNleJwJPr8Co7LO2lXaBwnv9TAI4J1NfE3whvHSK9dIjymEW0INFvnsyD5pTG22mpzxZludOc + 78OyIn+aCr1ZkOFESZwF+VEmFMp3qxCnvDrThVrp0wXSZkFxMDXS75UlYWSne4kdsBAbMx8nuxlaBPAk + puNgO0OcvhnYKtjM0gRga0sd2afSOhtpArD64VFkuCvBgY7aesBe7qZi3wy0NtZWs6Wcg7OjrrYGsIoC + 9vazxM3L+Kb4Ox9rx7mTIvDvooCdlQAsXMTDdTpeDlPwtZ9CjPtUCkJ0aUm1p0u+34pUB5bHW9Esz79B + 9tcFzKHGdyb1UrbFmrMi0YaOeEuBBctjTVkaZUhzmB5LwvVpEV6pRM/WoPm0+Uz+mKVD+Gin9EG7x3Q6 + fWbSK32yVvpga7gp2wQ7w4SrhZtwPMGeE/LcVaTuhLzP+xNsOZrpzOEMZ0bkfoajleBrxrab2Cm2a2es + NdvFjg1FmrBJxsmmEH2BLlvC5msi8O54U/bKXHAk2Ya7xJ6cDDHhsFx7ImAuY4Fz2RM6j5HQOewW7ArT + kXIWu0NmsidsDmMR8xiP1mVvrB77Yg3ZF2/MWIyBFhl8SwDeLNfZLN9drePbK1ghz6Jdxu5SGa+Lg3VZ + IvfUEmkqz8mSdnlmbXKvzWGG8ix1qXCfQanM8xUe01goz3ZFrAlrhI9vSrFlZ7oD+2T8TSTayzWttFTZ + uyP0pa7P/mQDDqfqcU+WAQ/lG/JkkSnPl5jzYqk5L2ulKa+Um/CGcO73m235W4crn/V68OlKVz5Ybsc5 + 4dVPlltzIFafIV9d+t30We0vXDsliHWF8QxWZbGmJo/llXnUF2VSlJ1MWlIsCfGRZGQkk5uTQXpqImnJ + cZNIiRPuEyt8KJr0JEFypJQR5KREU5KVSFNNCSvbm1nf18Hm1SsY7G5jeWMtNcWZ5Mpn4kJ9tQhatRZv + WVE6C6ryqSjNorAgldy8JPLyEjXk3ERu7iRychL+i2yB8AQN2ZPIlfrvkSft8uVzeTmqHkd+9n9RoJAZ + K4jXkJsaQ05yBHkpkRTJdlluMhV5wjdyUynLEc6RlURxZuIk5DvmpcszSAzXkC3nyZP7yVX3JZ/NkTYK + eeq+5bqZ6dIuLYTsjGBpF0xRQShlxeEyZ4TL9w+iuMCXgkJPyqt8aVwSRlNrKHWLfShf6EzxAkfyxBfL + qnAgo9yFVLFPCQUuxGW7EpfqQmySK1ExwjHFr/QX7u8VYIW9uwmW9oaYqR9/2plh5yy829MNH18v8Us8 + cLB31kRfCzMHTQC2sXKUOckBO1t7OSY8Wvh0iJ/Y6lhXKtPcxU9yY22tP6c2ZPHYjhye253Ba+PpXNiX + xlvjCZzfFcMLW0N4pFdsx2ovXt4SxrtjKXx5X7U47gv55t4qPjuczacTSXy2J4ZPdgRrEb1/2uLDR9v8 + +PtoCJ+PR/DPvdH8Y084f9mlIn8DOD/ozfl+D17vd+Ptflf+JnzxP7uCubgzgJ+HPPhho+Nk5O9mO37a + YsfFrfb8OuzI5e0uXNnhypWdblza7sR/Ntnw/c0I4B+VADzkwE9D9vw4LDxKQdr8pNYK/n8SgEeEe495 + gkrvvMeNy6PquMP/JQBfU2mffycAq7WClQD84y5Pvt7uwZ/W2PByiz73l03lcNYU7q8x4exiZ15pF9vb + E8WFlXG83aMQz1srYnhmoRdn69x4qs6dswvceGaBJ88v8uXlJQGcWx7KuRXhvNIdwcvdYbzULbyt678C + sEoN/W5/DO+sjebdNdH8YW0Mb6+K4PUVwbyw1IfTC10ZKjJnXZElA6WOrClwpCfLkRVpwp1THOlIVaU9 + y5VtEDvRKXaiO0s4kczPy1PsaE20Fq4ux6W9Qpu0axV0Ch/oFS7Qr8TkEm+65JytabYsTbdnRYk/axfF + s6O7hOPbW3ni5GaevHML9+7tZXxwIVu7S1m7LJtVzen0t+UyuCKfgU5VZrGhJ5vNa7LZtCadwd541nZF + 0d8Vy/reFLauzWJ4XR5b1uSweVWmzDlZAmm/OkfaC9bmatgodYVNa/O07c398pn+fDYPFGjYNJCvYb2c + S2FwQDCYR/9ALgMb5PObCxncmMfadVmskvtYtTqNNWvTWbMmjdVSX71a7rs/mw0b8hkaKmPHjmp27awV + LNDKjRtKaGtNYOHCcJqaYli8OI7qqhCZm9zIlmdbK/WOtnQG1pSwcbCSrVur2bylko2bKti8uZy9exdz + 112dWvTv8WPLOHiggYMTCzk0UceRiXoOjlYysjGHHevS2DWQwfbVyWxSglxbJIMtwaxrDmBNgy8ra4W3 + VjuzYbEf410xHJRxd3BFlJb6eV+zHwdl7rlbxtdDsu9xedbP9Kfw/GA6L23M4OWtWby5u0De/TLePFDG + awdKeXZfIY+MZnJ6dxond6ZwdGciBwQTO5LYuyORke3x7N4Wy86hOHZsjWOnQJU7tsQKYtgu2LY1hqEt + UWzdLJBy06ZIed6RbNgUweBmwaZw+jeEsG5DqCCE/vXyfQaFiw6EsH4gTMPGwXANW9ZHslmwaTBMw9BA + OMPro9i5IZpdm2LYKdixIZZtg9FsHZBryfH16xTkOfWHM9Av11sXJYiRegxr5L1Z1RdKb+//oqdHCbxB + dHcHsqLLj84VPnR0etPe4SUQft8p2+3edHTIe7AigJW9waxZKfffE8pAtxKCw1i3IpT+1kBWN3rTU+VK + a64Vy9JN6cq1YU2hKwOFbhrWi5+hIn9VxO8aeb96M+R9Fc6wUrj3mgI5Lj7EluoAhmqD2boggE21AbId + qG3vbBTe3qwQzuiySPEj4tnfl8q+tRns6UuT9zGZoY54hlfEsa0r4TcMdcVr2Cr7N3fGatjYHs3mDkFn + JFtkfGztimC4K5Jt3VFsaZPv1ugrfo0DDfId6lNNqY7Tp1A4Vm7ANPL8Z1IYMJsiBb855HvPIlstVecy + gwyX6aSJH5zqrPMbkhx1SHTQIcFhFglK8LXTIdZ2FjFK9LURf9RqJqGWMwi2mE6w1XRtWa0Yx9nEu8wj + 2V2fdB9jssRXzfQ1JsFjHgnuc0kX/6E42oqKZEcqU5woThDfMtpUfIl5mvgbGjRLE4ADg6bjL9uBIbOJ + iNQjNlb8lGRz4Ru2Yq8dKC1yokJQVmBLSbYZhSoddIouBcnzbmK2FglcmasnPoKRlgp6aZ2V8CDxKZc5 + 093mRo+MjZUdAbQ1e1NZKv5xoi7xkXOJDpmrZTyKChGfRqWDDp2M/g31178pAE8Kw7Fhct8qLbT4Q0oA + Tgq/KQKHGwgMtejfzBhTchPM5F5sKEq1IS/OTPxvAzKUkCvcOUv4arZcI1fOkyPnyAs3Fn/IREoTeU6W + VCapH8Y6Ta4FLHy2QLhuhvDoVL/ZpPoqEXguse46hDvLc3OaTZDjPAKcdLU00F4uhuILGeHraSb+jIoC + tiLIRyB1f29TvD308XbTw8/LgEDpIyX2hqhl8AJMJhE4CS0KONCKsCBHaeMk7R20AI9JAdhKE3vVur+3 + BOBb+D8FYBWVq4RZJf7egoNs26vSzR5HdwetbmVvibmtufAnMy2Dir6pHvOM5mFgqo+pbCuRWInF9k7/ + hRKVPVTKZ4Gziz32DtY4CpdSUcBKAPb1UxHCHhr8VbpoPzcC/V0I8nMiWHy9UHkm0f5mJASakREhz1n8 + nxrps6Uy1tZUu7NjkScHmz04ttCeQ+X6HMjTYSJzlvg609geNYWNQVNYHzBFfKwp7JVxd6LMinvqnDlW + 6cR4oR1bMsUXCZtLtdftVPtOY7GM52XJViyMNqIicBbFblOo8bhdiw5eHW/G+iRjdueayedtOdPowNlm + e15cZi/cw5YXF1vzZIMVdwl/GS+Yz8bEO1gZNoUuuYeVIVPoj5zCZrmnnRFTmBDcGXsbjyRN480iQz4o + MeaTcnO+rLHm37WWfFVtxtfVJnxXZci3pXP5pmgGX+ZO4XPhR19kT+Hrgun8p2Q2Fyv0uFKux7Uyfa6X + 6nG9ROoVRlyvMefGIltuNAtHa/Hh8jJffm3x498Nrvy9yoYPy8x5Q97Bp5Nm8KgSf+OmcyZxJk9mzOel + YlPeqrLiQrkFr+ca8kL8DF6Kmc6rMTM4HzOTc3ECJQDLvb+YNpUX86bzcvksXqudy8uNpjzd6s6jMo8/ + uCqRk2sy2Lsml1UtSeQKR3J108HYZIqMyduxs5uLi7OJ+PnmODlYyJg1F/5tov1owcjYAD1DPQ36Rv9v + AvAt8Vd4vZWBJgIrqHTQZur/+1Z6mP9OALa005dxaYirhzleN9NBB4U6EBzmQlSsFzFx3hpyc6NpWlgo + tqiRXRu62bOxl72b+5gYWsP+4XUc2DbA/u3rNezbNqhhYvsG9g0PsndonYbxrf3s2bKWPVvXMirYI/vG + FIYHGJP24zvWs3enfGbHJsZ3TmJsxwb2yHn2SDkm5di29Yxv28ie4Y3yuY1yXim3DjKyqZ/tA30aRjap + VNCr2bpyBRvU+sCL6lil1uytLGH9gnKGF5Wzq6mC0SXV7GmvY/+qZUwMdDC+roM961YwNtjF+PoeQS+j + gz2MDKiI3i5G+rsY1dDDnrWT2LW2m52rVjDU287mFS1s6lzK5u52dg6s4siuYe4/dpA3X3yWT95/l6/+ + 8THfffk5//7Xp3z3zRdcvvgDN65d0kTgG1evcv3KVa5evsI1Vb9+DW7ckPIyV6/+ypXf8H8LwFcv/ch/ + vv2CP713gbOP3Mex/bs5fmA3p++c4MypA9x35x6OTWzm8L5Bjh3YwKljW3n49G6ee+wQL509xmvP3cWb + r5zinXP38+75B7jw6r289vydvHj2CC88eZAXnzrE808e4KmH9/Lkg6M8dWYvzzy8j7NSKjzz0ISGpx7c + p+Gls8d5742H+ezPL/HdRy9y5S9Pcf29M1x7/U6uPrOXXx7YzNeH2vl8xwL+vqGArzbl85/hIn7ZXcHl + vVVcHC3jq42Z/HMgiW+2ZPDLnkKuHZRjEyX8uq+IK/tLuH60Au6q5capOi6dquXHe+r4z/1L+M+jvVw7 + P8qNPxznxp8fhI+ehj8/y/ULj/DvR/fxzlgvj/aUcOci4bJl/hyu8ud4XZBsh3Lv4ggeaYnl6Y40XuxM + 5+XOVF5sS+TJ+hCeEbzWFMWbSgRuiOatBeG8tTBMw5sNobzeGMob8vnzTZG8VBfOM5VhPFEYzIM5QZzM + COBgRhBjmSFsE/SnBLKhQK6/vI4H5R2a4uYpBtDXFN9AS4JD7QiPcCAsXP0awxx/ISZBASrt738FYPXP + 7QS17oMY+gjveUSof16q1M7+84n1m0SMjxAEQYzXHKI85xDhPkuM73QilAjsOpMoNyFGztO0KGBNAPaY + SYEY+dp4c5pTxKCkWtGSZklLkilL4o1pUAJw+ExKQ6dRFT+bxlwTlpRImwpbFpdYUCkT5e8F4EUqBXSR + kcBY2upRnzmP+qzZLMqaw+K8ebQU69OhBOA6cSzFud241F2IoYIHm1pcWdtgR0+NKe1lenRVGLC+yZat + rdJuiT0b/18E4OUFs+ko0mFF8U0BuGRSAO4vmy6EV4/dDSbsXmDArgpddpTNY7h0PpuLZ9OfO4Pe7Km0 + Z9wmTuhtNGdMoSHzNurSplCfPo0lco3eKju5L1/WNYSwqjaErvIgWgt8qYq1k2dnLmRHnzgv6Qfpk2if + +UT76RLpI3VffalPRsTFBAlJk34NkdLP10hLvejiMkeDm7PCPFyd5uKm0p4IXBznaNseQlZ9vQyFAJkK + STLWfgnn7jpXjulo6we6Cqma/Pyc/xGA1RrAQUIGw0MsiImy0dLKRaq1pW+mgPZwMxIiIkbAXhdr63li + bGZhZDILQ+PZ/5cI/PvoXyX+WlgaCIEyxMpGRfIK4RHY2E2WClY2Kgp4Uhg2NTfQBGA9tUaG4RxtLWAl + ANs73IrIVaKtnRg/IUKuDprA661+EadIkafLpADs44av4P8UgN1c1BqISjBWwu7vBWDbm6LvpAA8GRVs + i4cQOC+VSlrO4+frTmiA7/+rAOxkb467iyU+XrYE+jkSFuIy+U/4CDctFXRCjKeWBjo20o0EMZopCb6/ + ITXZX0sPreqqXWSos1zDSeCs/QM/wM9BCJ4DQYH2GnGNkH1BnlaTArDNXLwsdAix0yPR1ZAsr5lURd/B + lkZDnhz15KNHI/hBpYH+IIrrHwbAhz7wnhdXz7vx87OufPeoB1/d78OnpwL5210hfHAsiHcOhXFuPJKn + hkK5b20gh7uD6StzljFsRG6YLulhQvqjZSzHWJEUa0uKEoFj7MmNsCI7yIxcmVMqvG9nVex07izV5bUW + Uz5fb8d/hhz5ZaMDP3Sb8dMyQy426XNl4Xx+rZ/Nd0t1+G7lfH7eYsyv4xZcv8eJ62ecuXpW8ILgVSeu + nnPg2ptC0N6y48YFF3jDmxsvBvHTvQF8ttOHF1tsOZg3n7VROnTJ/bUn+7AsK0bmkkzq83KoyculOj+b + Ktkuz0zVBODixAQKY2MpEpTERFMaE0l5XBjVSYEsSFdryHqwJMeBzmJzti6249g6bx4fC+L1U6H89elI + vrkQz68fxnLpTyFc+TCQa++Hc+PdWLnfeC49Fcc394bzx7Fg7uxwZ6U45Pm+KoXUHTLHikOmUkB7GOFp + J/OtzAmlcbasrAjhYEcOd6/I40RzKjtz/eiRuaBVHJuOIAs6ImxZFmZFuedcMuxuJ9rsNqJNpxBncRsp + tuIYO82g1PkOat2nsMRXiHTwbWxMuI0jpXN4vseWD3Z58OlxL/7zuC8/v+zBxbec+fkPVvz8kfTHpwaa + AKzE3xs/yHP+0YYbP1lyTXDlF3MuXTTl0i9G/PqLIb/+fAuT25d/0efyDyZc+tKGi5+488sHwXx3LpI/ + 3uXJ3SsNWFc8jQXRU8Thm0KszzTCveYT7v1fATg1TK3/ay+OixWRvhZir1QKaHNifM3FVln8JgAnCJKC + rUmWZ5AWak1amCUZoZbkRNhoqaBLE5y1SN+qVHeqkt2oFqiyLNFFHCFHcqKstEwYKeEClf4qyoy4SGU3 + jUlUv3QWpzY/0UzGhik16cYsSjeiIU2fhpT5LM3Qp0fsWX+NM4P1nqytcRH7YU9ngTUdeTa051qLXTAV + u2hGe5Y13fmOGlbkOdCebUeHjKOeQhdWl8lny720clWpF30lXqws9KSrwJ3OPHe68n3pLgiS8wXJdb2o + TXSjNtWVBRkeLMz1YmlpAK1lQSwrCaA535uGbBmjeZ60FXiJbfMQuNBZZC9jyZGBeic2NTqypdmWba1W + jHbbMrHSlv29FuzvMeaA9M3hVXrcOWDEXYNGnFpvzL0bDHlwqxlnR2x55aALrx+7KQAfceSVo/a8ctiG + 5yfMBWY8sVuX0xun8eRuQ9lvx4VTXvzhAX8u3OfLyyedefqgFWdGjTm1TTBkzYmNjhxf783B1UHsWOqv + CcDtcr/LclxYLM5OQ4aj2FQnapNtKIsxJT9C/VNBl1TfyRTQSvxVawBnh+mTI/NQVvgkMqXvVJoyJQAr + qH9eJIaqtX4NtPTPKruGEoHVur6/F4DjQ4xJUL98F66k1YONiQ8yIiZARQLPJ8R9ppYC+pYArC3VIOeK + 8JlDqMcswhRnclGcaTpx3rPJCjWhKEalP7OXPnOiUfpGRQHXZbnIGLTS7jk9aD6Z4fpa+uryDPmueV7U + FQdQWxJMVUkIlaXhFOSoaD8VQaePm5OK7p2Bg910bK0mhWAbq+nY2Kp1gHWwtpqFteUscQbniA3Tw9fb + UuyFnZb22dvTQov+1Wy4k760nyvtdbCx1pHzCXdQa2h5mohzZ4yd03ysHOZo+E0Advm9ADxf2s4T/jAN + d7spBDhOIVH6pSzKmI5MV1YKulPsaY+zplnep4Zgfer957BA5rxG+c4dcRasiLemPdqM5YJW+dzicF0a + g+exOETerxBdlkq7ZX5zWOo1ixbhocsdp9Eh11vuMYN2Hx16pP/WBhmwSZ7zlhAThkKN2Sk4FGvDYeG9 + Kh30HiUKy7t9MMWBg2nOjCbYsDPeSsPuuEmMxNsKbNihBGC51/VBugwGzhfMZX3wHLZE6LJd7N1Ikpwn + yYK7hU/fFWjIUbn+fmkzETJPrjWf8fC57ImYw2j4LEZCZzAaOou94bPZGz2fiTh9DiQaciDBiAnhx+Mx + +v8jAA/JWN4i43ggwpAuGbPLo41ZEm7IIrnGgoB5NCoBOMaS5Yl2YsvsWJ5gRbM8t/oQQ6rExlZ5qwjr + WSySZ7Y82oSVwssHE60Zlj4Yk7G3L8mRMXkmu8OFz0boMx4n73q6CXfnmvFggTlPllryfKUNr9XYc67a + lvNVNpyrseJ8jaU4LTaaAPzRcmf+3iXoduIvHfa8u1Te/wUOnBLOv0/ekx3e0gchjoyXJDC2MI89zaUM + L6mgr76E5rJcSnKUABxNfHw4WVkpFBXlUliQRXFh9iSKsikqzKAoP52ivDRBKsV5KRRkJFCcncSiqkK6 + WhoYXNnO7s397Nm6nvV97XQuqWVheQ756bGkxYWQlxlLRWkG9bUF1FTmUl6RTVllFuWVOYJsKqpyNVSq + UvaVVWRRWpZJaXkmZWVZVJRLG0GltFWouonftqtyqK7O1cqaqiyq5dy3sECO15ZnUVuRo6GmJIvKojSq + iuV+KnJpqCmgubZMUMqy+gqW1pVr6xqr9Y3V96uV51RWmKahSp1D7rFK7r+yLEdDlRyvkXPU1ORRWZEu + 95ks101iQU0yC+tTWbI4k9bmLJY2pbCwLpramhAWisPZ2hnH8p5YlnQE07jcl4Wt3lQ1u1O22IOSRi8K + F3mRI/NvltiirEIvMmWeSk0XrprmQWyyK6ExDrj5W2DrbISVnSE2jpY4Kc7t40VgoD9eXt4ynzhgbmaN + hakdVub22Fo6yvzkgL2NgyYAqx9GeruaEOZpRKbY6loZxysrvDjZn8pDW9N5clsyL+xO5NWRRF7ZFc0L + Q+E8ud6Ph3pdeHSlO08P+vPqcCR/OZzNv+4u4l8n8vj7/mT+sS+GT8fC+WRnIH8Z9uaDLR78eas3H+8M + 4NPRUD7bE87fdofw4bZA3t7ky7l+D15d7cb51S68sUrG8qA73+0I4tddQfwin/9pi+Nk2uetSvy149ch + By4NO3JlmzNXtjvz6zYngT0/brXlh802Ajt+2GIn22qfPd/LZxT+c1MM/ulm2uf/bwKwigC+Me7OtVFX + Oe7IzzvsNQH40qjzbwLw9QlPDTcm3DUB+PqE900B2INvtnvw13X2vN5uwsNVMzmRewf3i//7xEIHXmrx + 41xHOK+viOH1zmhBLOfaI3m83oNHhK88WuvKYxrceHKhJ881+/JCSyAvdQbzguD5ziBBoCYAn+8L1wTg + Pw7E895gnIb3Bybx9qooTQB+bpkPpxe5sbXIjDUyp/TlW9OZacVyLcW/Lc0y1zbFWbJI5tmFsQpmNMRb + 0pxow+IEaxZGm7JAbHVtpJTC2SdhxoIoCxbFWrEkSXhVljOdwg+WCCdYJDakTubBtkLhxTXRbFiqIgrr + efDgWh463M/xHa1sX1lB/9Is2qtjaC4NpaUqis6GOEEsnY3RdDdHs7I1hpVtEXQ1B7K80Yfli3xZ0RTC + ypYoVrXF0bsshu4lUYJIrexcEkFns0C2FdqlrtAhdYXOJdEaOuRzCm1LozW0ymdblk5i6bIoliyNZGlr + JK0dsSxbHkXT0jAWNQVSvyiARYKFi/zk3fWjoVG43VJ5h+UeO1bE092TTG9vqiBNQ1tbPDW1AZSX+1JX + J+eoj6Ss2JfMNAeZb23Iy3alrkY+25pGd2cm3d0Z9PRm0rcqmzVrstm8qZR94w0cObyEAwcWsf/Awt8E + 4KP76zi0p4rdm24JwOkMr0pkw4oo1rWE0t/sxyqZO3prXOkqV76RNX0VTgw1+TOyLIhReaZji/0ZrXNn + 7wJXTiz25fTSQB5YFsKZtjCBKoN5tCuc5wfk3R/O4vxYIa+MF/L0aA4PDicLT4zm4IYI9gn2bIpkZGMk + u6TcvjGCbRvCGR6MZGggQhNktw6EMbROyv4wtq4LY7MScNcFMdgfyOC6QPrXCs8UP3bt2gDWaAhkVX8A + q+XY6nX+rO33l31+rF0TwMCaQA0b1gSxYW0QG9cGs0mwUbY3rglmy+oQQRjDa8PZ1h/BsGDLmgg2rwoT + uxTKur5g1q4MYo1Cb+AkVoYKwlndE07vikB6OgPoEnR3Bf6GFSsCBH50dvrSoUTfdjeWL3eVfnahbbmC + O22tsk+wot2Hvh75Xr0hDPaEMNAVytoOuV6rP31N3vTKu72ixEH8FTOakw1pz7CgJ8uOvix7DatznFkn + /kZ/vocm+q5IsdWysnSlytyc60R/kQfrxS9ZX+7DoMzV68RPGSz1ZGO5N1sXBLK9IZjti0PYqbAsjN0d + 0ezsimVYxvQGeX8GloQzuCyc9S3qxwIRv2FAsFbG+2r53KrFwfQ2qvsNkLr0gYyPdcukv1qD5XNBrGrw + ZoWMqYYME8pj5lIZp0dJ5GxyAqeS5XsH2b7TyRNemS/8M094YZbnLNLdZpLmMkMwixSX2SQ7zxXMEcwm + 0WkuCcJp4x3naOJvlO0cDZE2OoQJfw4yn0GA6TR8TW7Hz+wOAiyVCDyTSIfZxAkHTvEW/0IJwP6mJPsa + kOyjT0aQsZbxpzjBlhLhaHkx6ofFhuIjzNbSPwcHztSif/2DpuMn2/5SDxXuFxttREaaFQV5jsKBXCgt + dKKkwJHCbGvy00zISRTfJmG+YJ5gjkC+Z8pcSrP0qMrXo67MiMZqU5bUWdLaIL7nUgdWtLrS0+bDskY3 + yossSUucR0KUEoDlOwbOI1z4bYTwZiX+KuE31F9PiwL+TQAWH0gtOxcdoi++kIH2w1m1zE2i+F5qPWC1 + rE6myrSUaD4p/iZbkSXfI034a6rw91ThzmlyjTTxtdIDBeInpQuPTQ+UUpAn/lVZnI22LE5dujPVKXaU + xMjzDJxDqs8sMsTXUhHVWnZE1zmE3BKAHZUAbKBFAHu4GOPpZoKP+Dd+4tsE+Fhr0cD+PmbiJxkIDPH3 + NSJI+ig0UC2LaP6bABwcaCxQ0cAqWMpSS6Ub4GuHl7strq62WoStEoBVxO8tAfhWGmgVXWlja6EJwEr4 + VQKwEn+VMGvnZIODsxJtJ9NBO6t00p7OuHq54OzuhK0cV+mgLR0sMbU1w9DCkPmmeugZ62oRwSpNtJWj + lZZC+hbU+VR6aQV1Te3avxOAlfAbECgcLNib4CBBgAfB/pNZA6MC7YkNsSc1zJbMCBvxMe20HxovynGg + vdSJwXovRpf4cLTFm5NNjhytMuJw0TwO5c5hX9oMhiOmsM53Cmt8prAxZAq7k3TkuBn3LvLgeI07e4oc + GEy3oCFAh0Ln28h3v01bh7s+1oRqGSuFXlPJd5rCIp87WBMv/lO+MwdLXbhXbMGjzcI32tx4qc2ZV1rs + eKXZmucbLXm03oIDxbpszlCRwrfR4jeFFrmH5QFT6AqbwlrBtuAp7JPyZOQUHk64nQuFBnxUbsoX1RZ8 + U2vJ17Vm/LvaiK9rDPi2Wp9vyubwTck0viiYwmfZU/hXzhS+LpzG96U6/Fyhy6+l87hcNJcrhZO4WjKf + KyoyWM5zpcGWK0tcuLTUnV+XefJNgyOfVlnxpxJTXs+ax9OJ03k0dhpn4mZwJnk2T2Ub8HKpOW9V2/BG + mQWv5hjwQqIOL8XO5BUl/MbO4lycDq8lzOLlpOm8lDqVF3Om8lLxDF6rnMHL9QacXerEQ+0BnOqN5nBf + Mrv7MultTSIn103Gkw7GZlMwMbsdc4uZ4rvPx97OQEojLGU8mZgaYGRkgIHBpPh7SwBWUcD//wjAZlb6 + mFsbarC0NdCgloCxUOLvTdg56OMkPN7dy1ITgf3U+xPsoEUBR0Z7EBMr/kNmuPgumXQuqxIb2cq2te3C + HzrYtb6LXRt62b1xpXCK1Rp2bFylYefN+i4pRzavlm21v0/sfB/bBMMbJkuF7dJu2yYppc22jWukPomt + 0mbL+pVsHuxly+BK4QS9DA32sXVwFcPrV7NtcDXDA3J8bbfmRw6uXM6mvg4GO1voaayjtbyQhWniT8VH + UR8XztLUGLpyElhbnMqGKuFKDcWMdjcyuqaV0YEO9ihxe1Mv45v7BHLfck/ad5PvOKIEYbmXPevlmNyD + wojc0441XWzuaWNdW5PY6QY2dLcKh+hhfOsgx8d28fSZ07z9yvP85Q9v8smf3+dvf/ojn37yZ7796nN+ + /s83XP75B67+epHrly9zWcqrly9x/doVuHFdcIXr1y9pa/9O4lc5dkkOXfwNly/+h+++/pwP3n2dxx68 + h7Gdm9g9JP709gHGd/Sza2uX8Jxm1q+uZ3P/IrZvaGJkqIX9u7s4ONLN0X19nDo6wBm1nMrpbTx41xbu + PjLAif2rOD6xkhMHVkqbXmm7gv07lrN/e7uU7UxIqXBgW8ckhhU6uXv/AE89sIc3njvJR6+e4rtzJ/nx + hX388Nh2vr93HV8fWs7nO2r4x/p8PlmVxD9XJfDNQDL/2ZIlvlQBv2zL48t1SXy6Opov1yfy484s8ZsK + uLgnh59Hs/h1LIerB/LhaCnXTpbx0/EivjtRxnf3NfD9E71cfXOM6++f5MZHD8Mnz8JHz3P93cf48rED + vDW+koe6ijlWF8u+En/2l/txqNqfE4tChMdG8fjyBF7sSudcdzqvd6dyviOBl4XzvHJT4L3QKP5XjfhP + Fb68XiW+p+DVGm9erhXU+fNSrT8vVPnzbHkAzxYG8mReEPdnBnBnZhCHskPZkx3ChlR/NhdEc2R5DY9u + 7mGKuxAQJQB7+5sTGGJDSKgdwaHW+Aea4etnRKC/GPZg9Y9sS5JjrEmONBdDYEyUry6hHnMI9phBqOdM + wrxVutHZRAjCPGYRruA+a1L81QRfFQE8i2h3HWI8dLSI4DDnOwhzvE2Msw4lUaY0pNrSluVES7oNS5OE + ZMYZ0hxrSGO0LjWhMygJmkpF1CwWZsr+Igt5wWxoKjanMn0e5ck6kwJwhhJ7dVlcYEhTgYHU51GTrkNt + hg71mTo05s1nWZFK9WxCzwJL1jbYi7PnxlC7N7u6A9gtxHq4w5t1TfasXGDOajEiQ60u7FzhybAQ502L + 7eivs6Kr1FATgFvkfG0CtQbw8jwd2gtm0VEkBqdkFr2lM1hVNp01pdPZVDOfHfVGbK/RY3u5LsNiKDYV + zWEgfybdabfRljyFxYlTWJgwhXpBtdSrBHViPJvzDIS0OtBX70ffgmBWlAWxJMebuhQXiqRfsoWEJPvp + EeejS4wSfwUxKvLXW5dYFQ3nY0SsnymxQlIigi0JCTLDz9dYCIcuzq5zNbhq0by6uDrNw9VhEs4Oc3AV + suQuRNXHU6WNNsHP2whPd5X6ebaQm5nSRq0BrKP9M3lSANbRBGAFlf45RIhhVIQlcTG2JMQ5ER3lQES4 + Hf5yPx7uhjjLue3lWjY2czAzm4mRyUwMjf9vEfj3ArC5hYoYNtQE3knh1wRbO1Ns7U21urWtGDAxOkok + VhHCJmb6kwKwwWwMpLwlADsIQVLCr/qlnqcQLAW1zq+PEDEflQ5F4Oc1CSX+avg/BGAXF2tN/HVT+P8h + AKt2Xp5O+Hq7EiBkK1DIVkiAL+HB/hpCA/3w93b/HwHY0c5M6uZyj5bSB2Ic/ewJCXbU0kAnxPloqZ+T + 4n20CGAlBCsROFm2FVKU+JvkS0qiL4myPyrUmcgQZ7nOZPSWt0rr4i2E199W3nFHYkJdNAHY19EIb9v5 + eFrMIdBWnxgXcUzcZpAvxKm3dA73bXbmj/eG8e1LcVx+K4YrF0K4fiGQ66/7c/E5b74948Fnd3rw1/0e + vLPHg/O7PHl+2J2ntvhwVkVhiLN9b38Uh3pj6C4XxyLejMxwAxJDBJFmxInzEy1zTUKcHRlxDmRH25AV + ZkGekP/KgKmslXf99AJj3u614eudrlwcc+XSNkd+XGXOT62GXGzQ5VL1XH4sn8lX9TP4avk8vu834qcd + Flw97szV025cecSNy2ddufKCM9dedeSGSgf9rhP80Q3e8YXXgvjloQC+3OvHuS57TpTqszFuNr0xZuLU + etGaFcWSvHQW5WdRm5tFTV4mVbnplKUnU5qSRFFiAgUxseRHR4szF01hVCRFMWGUJ4RQleJPbboPDVnu + NGZY0lFgysaFthzsc+Phnd6cPx7Ix49F8t3LMfz6ZoQYlVCun4/ixsvxXHwkiu/vCuFvo168tNaJffWW + tCXqkel0B0FGKqW+9Jc4L8Fu+tKHdxDlOZvSaEt6in0ZX5rEoeYEJmqj2JTmTou3IXXiEDV4G9AYbM5C + ecal/vpkeswm2nYaoRa3EWIxhRibGaQ6ziLLaRoFzlMod5U5ymMKbYFT2BB/B3cuMOClfgc+3OfBVw/5 + 8R8ZAz+dc+eXd1TaZhN+/YchV74048Z/bOEne7go5S9WXL9oIaRDjv9qzMWL+vxyUfdmqaCn1X+VfZd+ + NubytzZc+syNi38K4se3ovj4jL8YMHOGa2bRJPNkTugU4nxvJ9xzrtghA2LEdiUEqWUKbIgLsiXKz5II + b3PCvU20KOBoJQD7WhB3MwW0FgUcZCXtLUgJEYc7xJwUeSaZYVbkRtpSGOdIaaKzlk67PNFFgxJ/SxKc + yZcxqpY9SBNnNznMhKQIUxnHppoAHKPWPoowIiXamCyxZSVJRlSnGUnfm9KcbUJrrindJVYM1LmytdmX + TY2+9Ne60lVsx/JcK9pyrGnNtqI51YSmZFOWiZPUlqXspC2tmTa0ZNiwPNOeFXkurCxWwq+3Jvz2lfhK + 3ZeeIh868j1oyXITeNGW7U+LkIKFiZ7UJCgh212Lal6Q40VjkT9LSoJozPcTx07sS4Y7izLcWKwiTnNU + ujRHluXasKLYnrW1jmxsdBJ7aMvWZVbs6XHgwBonjvQ7cmydLccGLDm+zoTj8t4dX2vAyX59TqzR5Z4B + Qx7ZZslz+1TaZ1dePeLEq8eceOWoAy8dsuHsmDFn9xjy8PAc7uq/nUe36/LCfmveuMuNP9zvx9unfXjl + pCPPHrbi0XET7hnS5/h6Y/avNmdfryN7Vngx1Cz2W0hRZ6EbrXkq2t6VhnRHLfq3OtFK3gcTTQDOEccy + I2AOGYFzyInQJ0/2ZYXokRUq70DYJDKk7zQBOEqlfhY7G2YsY0T6VK1/FSTv2m8CsIoEnkeE8CItAjjY + iMRws0mEybgIlTERYkJcoBqbeoQKD/J3nYqf+zRCvHWIkM8qETlUuFCwzLUanKYS6jyVaI+ZpAXqkyvn + KpJ3uSTWiqpkBy0auDTemmyZOxN8Zgq3mqathZ0u912gUo5Ln1cX+FJR6E9pgaAwmOKCEGKiVaonE7w8 + 9MS2z9V+xOWgRF+bqVhZTtNSQtnYzMLaaqYmAqu1gJ1UVK+7sdgvc7FlxmL/FQ8wFTsnNtxJT4v81QRj + gZ1aO9hxvth2A+yFU1jZ6mAusLCbjZX9nN8EYC0FtLseLnIfHp7CKWR+8XCYQoj7VNKC51EZa0Z7qjO9 + yY50xlrTJtyzMciAOv/51HrPokbQFKRHR7SFhrYIE4G8I+HyfgXNlXbC9wLnsljqzdLPzT46NAlfXeIy + nRaHqbTK9Vo9Z2lRwT3yfNcIVxkUrrtRsEn6b0h47p4IC8ZCzdgVbMiwihAO1mckzpKxZHt2KfE3QcGG + 3fE2jEg5kmAnsGVHjAWbwwxZFzCPNf5zBDqsCdRhUEXnRhuwLcGYfQnmnIww46S/HoelzQEZhwcj5nMo + So+JqHnsjZrDeISK/J3OWPhM9kXqMBEzj/3x+hxMNBQYSd2Q8Ri1NvA8doRMCsDbwuQ+wwwYkHHbKWN2 + aZQRi2RM1/jNpdJ3NvUyxpfJ82xPleea7kRHih3L5Ls0ypy1KNiARTKuFwbN16KC22Tcd4vN64+3ZGuS + LaPJTowlOTIaZa1FSe+M0GM83oBjWeY8UGzDY6U2PFtpyyu19rxR78SbdY68uUDqdba8vsCaC4ts+WOz + LX9pdeTjDns+XmHLx532/Em2LzS48ES2LXfLGD8cbCXf1Z2TNWkcbS5i/7JyRlqqWLuwiCXlmRRlxJIc + F0JSQhiFhRlU15RQU1tKXX2FhgX1ZdTWFlNbXURNpRJvC6guz6MwO4nCrERNHG1rqqGrdZE4832MDq8X + R7WT/u6lrFhSS2NNIaV5yeRmxlBSlEpNVS7VlblyjQIWyD3ULSqhXrCwoZRFjWUaVH1BvVxvQQG19YVa + vX6htFlUSoMcV2jUUPobmprKWLy4fLJsKmWx7LuFJdJ2iZxzSYMqy1lcL5+pLaRpQTEtDRUsb66me+lC + epY1sLpjiYaelgY6Fi+gvbmOpYsqWSTtFRY3lrOkqYImOVfDQrkfQdOiMpqXVLN0aZVcv4jGpnyam/NZ + tqyA5cuL6OkuZ21fFSu7i2htSad5cSxLlsWwYmUKPWuS6eiLor0vjJaVoTStCKC+I4DaNn+ql/lR1uhH + Sb0vJZV+FJf5k1/oQ1aeD5kyH8WlCZ8WH9PJQ7i7gxEOwpHVOnW+ft6Ehgbh6+sjc5ANJsZmWJrbYG1h + h62Vw6QAbOuAo71wbwdL3O0N8bSeSazXfMrlnewt9+KEJgCn8cT2JJ7dEctz26N5ZmsoT24M5OF+Tx7q + c+GxVR48NeDHC5uCeHcklr8dSuWTg8l8PB7FJ+Nh/GMsmE92+fOXYS/e2+TCB5uFy6oo4F3B/GN3MB/t + COSDIbFFG7w41+/Oq6tcOdfnxOsrHfhgrTNfb/PnFyUAb/Ph5yEnfhmy59chJf7aaeLvZcHVbU5cFvwi + +xR+Glair60m/v5ni61Ays12fLvZhm82WWvl97L/h232aGv/7pqMBP5luyO//i4C+Noe4bYjk9G/SgBW + +H8TgK9NeHNpfFIA/na7F59tduO9lbY8vVCP+0p0eLBMn8drbXmh2YeXlgUKQnh+WTAvLAvj2SVBPFzn + xoM1TjxU48yZm3ik3o2npP0zMg6e7wjkOQ0BAn9NAL61BvB7gwl8sFGwIYEPpXxfti+siRa+HcozLX6c + bvBguMySNeLr9+QJz003Z1mKJUuTrFgUY0pdtCnVYsurYiZRE2cuvrMVdTJXVUWZUC7cq0xsQkWUucCM + crEN5eHmVMp2fZw1S2Tua8lyoSHJhlqZr2vEli4vDqK3Jo7Bpkx299XwwMQqHjq4hmPDy9jWXcrAsmza + q6JoFJu6uDSYZTXhLKsNpaU2mOULg+loVPCntc6TxVVy7nIXmqs8aakLpH1hKMvrQ2hdECSfCRTIOWp9 + WVzjS1O1D01VPiyq8tbQoMGXRZWyT7Cw2ldDnexbIKip8JE5zYdq+UyloKLSm6pa2VcfSFWdL6VVHhSV + CjctcqCgwI6CQlsKiuwoLnWUtq4yR3lR3xAg73wwjYtDaFos7/DicOrrgygp9aSoxIOa6iBqK0MoyvMg + VZ5RUpxw3GRbykuEJzbG0ro0niVLomlpjaNzRRLd3cn0dqeweVMRI7urGRmpZGy8hr1jtewbq+bQ3loO + jlaxe3Mu2wfS2LU+g+1rpX1PHOuXh9O/JIC+ek+6K51ZUWJHe74lXYU2bKj1YNsiX7bXe7OrzosdlU6M + VDhwdKEnp5r8Od0UIPDjbtk+UevCXYvcebg9hGf6E3l1Zz4v7M7nye1Z3LcpkQOrghnrC2RkdSA71wax + bU0wQ2sF/SEatq4JvSnGhrBZ2m7tC2bLymA2Sbl+VRDr+/zpX+mjYXWvl0B4do8SThWkvsqfVasDWLXG + jzWr/Vjd58uaVb6sW+XHQJ8fG+T4hr4ADRt/QxCbeoPY2BMozyJYwybB+u5gBuV9WdsZwOoV/vQJVnb6 + CXwnsSJQEExvRzAr2nzpFKxo86NL3rUuede6Ov3pbJf97SrK14v2Ng+Wt7nS1upC6zJnWlsFLaruQttS + VzpbvVgl11gn1xyU8w7IedfIO9zX5EX3AjdWlDnSnmdNc7IxTXH6tCab0JliwYpUSw3daXasynFhVbaz + 1O3pkPd0eYKlJgL3ZDqwKteZtfmuWjTw6kJXgWwXODNQ5MqGSi+21vkz1BjIcFMgW6VPty6RPmgJY/2y + cNbIOO1bpARcuaemUFY3hQhCWSVln6CnIYiuevm+C3xpr/Gko9aTFTJWehqkX2RsrG72l8/5saLGjaUF + 1lQlzqcgfAZFwqlyQ2aQ4Xsb6d63keE1lSzvmWR5zSDTcyap7jNJcRXcEn9d55HkOp8kl/kkOs8jXvht + nNN8Yh2Fvwu/jbCZS7jtPMKs5xBsMQs/k+l4G03Fw/A2PMU/9za9g0Dh2MHCryMc55DgaUiqcHElAqf4 + i48RYExGsFr71kL8SivyVTa0SDMSxFcJ859FaMBMAgNnECDwDZwUgP2kHhSsQ1SkPtkZdhQVuAhcKcp3 + Ij/bjqxUM9Li9UgRPpkeLYidS0bsbDLj5bsnzxUupUtZrh7VxQbUlwl3rhJfc4Hw6EYr2pdIPy5xpanO + QfiQCakJcs9ynuiQ2YQHzCbEX/ztAL3fxF8VAawJwKFGxIaL/yuIEl8pSnh6bIj4S8FSBukK5hMfqu7J + SPtxdE6iBYWptlJaki77UuRYknD3RDl/kvhGicL5E32l7j1b+3+xBqlnyPVUamj1w9gFqU7iszpRnmBB + VuBsUlQf+uuSKT5Xio9c003u1WkOIdJX/g6/F4BNxKcRf8bDTPthq/qfmJ+PBX7eppr46+ulsh8ZayJv + aIASgG9FACvx10gTgYOCTKVfLAjwt5bP2+DuZo2z8BoVYWtn/V8B2NTMBAvz/xWA7dUP2lwctNTPDg6T + wqxK+WznKDxHeJGLhxOu3i64+bji7uuOm7crjm4O2DrbYu1sg4VwIWNrE/TNDZhvOB89Ez0tPbS2bvDv + YKsyHTrZabC1s9Sij+3thHv9TgAODvElJNSPUClD1f8n/V2lP52IC3UmJcKFnBgnCuIcKRffoT7HmWXF + bvTJuzYsc/dEeyB3dvhx11JnjteacrRMj+PF8zmQOUv8kSms8ZpCn+cUBgKnsD1+JgfyTTnd6MOJOpnX + i5xYJXNJlbe8i/ZTSHe+jULp//JIQ4rFd8t2uY0c2yks9pvKJpl/jlW481CDH8+2BvCSzG+vdbhzrt2J + V1tseLHJkmcXmgsnMWN3zmxWJ06lJWgKC92m0OAxRfzAKbQFT0YCbw+dwqGI27k35naeSJrKu0UGfFpl + zrd1lnxfZ8F38h58W2PANzX6UuryTbkO35RO5YvCKXyeO4Uv8m/j66JpfFemw4/l8/ipeDa/5M/i1zxB + /kwuFerwa9l8fq005Nc6cy422PJzkz0/Njrwdb0Nn1aY82GREecy5vB0wnQejZkUgB9OmcMzeUa8XGbB + G9U2nC+14NVcA15KncPLCTq8Ijgn7+/riXM4nzSHV5Nn8EraNGkzndeKZ/B65UxeW6gEYAdOL/PkSFsA + 4x2RbGqPF78hlsw8d1y852JqeTsmZlMxlnnKzFQHS4sznDcgAAD/9ElEQVT5Mj5l/JjoYiBjSV9fV8P/ + CMCCWwLwLdwSgE0sDDQoAVgJvxY2RjL2jLC2n4SVvb4Ga3sDrOz0NQHYUd49FQU8KQJb4RtgQ2CII+GR + biQlB5BfEMuC2mxWtNYwNNDBDiX8buxmZPNKRrasZmSrQr+GXVvXalAi5O6htezZNsDenesZ2z7A6LZ1 + jAh238SI7FMY3T44iZ2DjOzYyMhOwY4N7JTP7hhaxzY53zY5906FoUF2ia84MrxBw66hAbZvXstWJQT3 + 9whv6BK7uYwV9eJTFWZRGh1KUbD4QUFeLIgMEO4aRnd2LGtL09ggPuKelc3sHVzBvi19TGzrZ9/2m9ih + BNR1jEt9XPbvlfvdJ/czMTzIQbkHhQm59siGVWxd1UH/8ib6WhbJ9Vcw3N/LzvWrGNnYz8GRYe4/cYiz + D53mhbOP8NrzT/HW+Zf40x/f4u9//ZCvPvuEH779misXf+byLz9x9dIvXL/yK/JHcJkb1y9x7SauX/9V + 2+b6xd/w68/f8c2X/+D9t8/x8Ok7NeF84xolhrewrqeJNV3iY7cUig3Joku4c9/yPNZ0FjHQU0p/lyqL + 2dpfzdhwMwd2t7J3x1J2bRaffED6el2V+OZVcrySTStLWS/tB9sLGOwQLFcoZEPbJNa3FklZzEj/Io6P + dHHmyHpeOz3MRw9t4dN7VvGPQ8v5++gi/j5Uzt/WZvBxTzwfd4TyyfJAPu8K4avVUXw/mMR3gs96wvlI + uNWn4tt+symBn3ak8Z/hRL4biuOH7fH8MprM1b0ZXNqfyff7M/j2cB7f37uAn57o4tpbe7jxwZ3wt0fg + H89x/S/PcOnCGT57eB/nRru4T+79UE00e4r8GC/1YaLCl2MLg7i/JZqnVyTz2sp0LvRl8G5fGn/oTuRC + ayQXmkN4R/j5O8J/Xiv35OUSN14udeNFwfPlzjxX6SJw59lyN4EHz5V580KxP88VBvFIbiCnc4I4kRfK + RK7w2zQ/thVEcXx5JWe3dDNFib+efmYa/IKsCAiyxj/IAh8hJF4+Bvj7GRASLIY80orkOFuSoi20X3SF + +84j0F0IjutUbT27II+ZGkLcZ2jRLaECFcUS7TmbSCX4us0k2mM2sZ5zUBEtUdIuzOUOQp1uF8M+hwpx + 4JcKcVxR4E5Hpj1LE81ojjFkSYwBi6N0qQ2eQUnAHZSFTacmeT5NeWZaGuiGQjMq0+dTIROmEoBrM+ax + QEUB5+qzMEc+lz6bypSZVKdOisANOfNZUmDA8jITOirN6am1or/Rkc1tXoz0BrOvP5LxNWFsF4K9UQzZ + 5hZndnf7MNrrx64ubzY2O7Cm1oLOEn3aCubRkjNHMJvWPEHOTJbnzaCjYAbdxTPpLZ1JX9lMVpfOYEP1 + fIZrDRiq1mWoQlCmy8aiuazL16EnYxptybfTFD+FuliBlAtS7mBh+gya5Xu0FJnTVurA8nJ3qXvTlO1J + dYKjkFdrsoKEPAYYkuSnT7yvAdFCdBRifIVseevLszYi3suYOB9T4qSPo1Sq7wAhN0I63T30cRYyq+Ai + hNZZyKyLoy7/H8reMr7O4+z6deLEJGZm3tLWBjEzMzMzsyVZMsjM7DA4DjMzM6fhtMGmGE7ThtP2f665 + 5aTwPO95z/mwfnMzzD2w1l77mgkOkGVBkL+VpNZCEOzQ6xyFELloRnC4kODgABXps1oIzho5x0KLAlZG + 8PJw0MsmsMkgxDDOlbQUbzLSfcnODCQ9LUCIqq+QJTf0EfZCeqwIEFLm47cOd/fVOLutxtFZmcBqKGgL + SS01/IcB7KkMYOlAfBx/MYD9/N00qGVlDKtjtGGihRS5uNrKtaywd7DAyckaV1c7vIUwBQZ6CVELENIX + jFGZvcYwzEKuzJFhWnSuyaDDrOG0+SvHqGPDQ/zl/b0JEkK1bO76yDuruTQk1eYAVul/G8A+hOv8MAiR + U8OrxAi5io2O1IaAViawglo2RoRpBrAaijpISJqKAA4OcCMs2A1dqHSQ4Z5ER/mRkqQjN9tMcX6MiHOz + iPNIMlLDteGgldmbmxmpRf/m55pEtJs1QzgzJZx0NX9wrDKAveRa8g307vJeXnJvPyH0AVKf3TAEOKH3 + tSPCywaTryPJQU5kqLlphDwNCcm4cMabJy+M5c/3ZvPNU9IgPpnAd4/H8e2DsXx6q5nfnTLwxvEInt4R + zF3rvbh5xovr1ntz3XwQt2yL4ZadqVy7NYvzpBGebIigPkcNvetMqogENY9MUpI7iSmepKXJdjW0bqqU + 82RPKkVAtMauYmuRFbcPevHW9mA+PzeUby8M4dsj/ny10ZUvR2z5qsOCr6T+fVx2Fr9vOIs/9lnw2XoH + vtrhxg8XBPLjVWH8/RY9P90dwU8PhvLT48HwfBC8HgpvRcCbZngplu/vjeaLy6J5ZSmEm4QIHiqwYlOm + C7O5OiZLkxitzKevspDOsgJaSvNoLsmhPj+LupwMarIyqEpLFSGXTHlykqQJVKbGUZcVR2N2FE05Blpz + w2nJ9KZbCO20kOG9vX6clDy6fU84z1xg5r3rE/jrven8eF8a/7wnE+7I5W+Xp/LHI2bpJNSwN84cKLdh + OH4NZT5nkiJCM1NETa7Jg3RpuxOkzc02WNGc7sFcZRgHOxM40ZHA4booeY9A+kTc1PuuoSFEiLbBkSYR + nrWxzpSaHUiXOhzvcxYxXmeJqF1Lpr8F2YFrKAg8k5IgIedqLhbdCkaEWO8rX8sN40JQ94fxwTVRfHpf + NF89aeKbl8L44dfe/PChG3//xBv+GgjfBsD33vzze0/hGK58/6MQ4x/s+eY7G/72rSXffG/D16ehlr/5 + zorvvnXkh7/48OOfw/j2nWj+9nIyf7g/lsfO9ePE4BpGC1ZQIUQ+3XAG8dLfxIXbkSxtX6pRRVx6aNG/ + KWZPkkTUJUQ6/4cJnKbmAf43Azgr1p3sWA9yBXmCwgQR4Ek+VEg5rMkIoDYzSBC4nGYJcoK1COBiKa/K + ANbMQWUSJruKUFZzI7loEcDZSerfzrZUZzvQWujMYKUX0w3+bGwLYUdvOHuHzBwYjWbXgEmLAJ6u8WW8 + 3IvRUm9GSrwYLHCjL8+NgTx3WfZeRr4yhtVoGSLSy0KZrdQxX6MXREq/E8VCYzTr5VtPVOgZKAqjTw2V + WSj9h5CAzizpQzJ1NOeE01ZsoL1UUGagq9xIe4letkXQJse354dJPxRGb3EovUUBDJT4MFHly3yTv/SD + fmzu8mDHoAfHZgO4eCmMa/ZEcs3eMK7a5c+V2z24Yosbl2924rJFWynbVly2YM112x2545AHD53rz1OX + hfLMFSE8eSqIRy/x5e5jzrLPluu2reGS2TO4frsF9xx15YmTAbx4rZ7nrwnnscv8efASH+46x52rd9tz + yWZ7jkv9PixlcP9wEDt7wtjcGsFMjTKAQ4VXhNBTEKBF/zZnuGsGsBoCuiLRXjOByxPsqEhxpCpFyn68 + vRYF/K8IYCdtnqpC2VeQ7EKeZuY6kyPISpB2Uc3bq4xgQaoaEs1sJ6kDGXHyzRPdyJG2LDdZylKSINFd + ypeUSalfCRFWwp9WERW+mhj15zmzlXAqK41DRYWcvYzAlUQHnKlNm5FlsKYgxpESKV8l8U6UJbpow6AV + q3/Wm9aRFHamcKkVJIaeIf28pTZvcUWuH9WFIVQU6ygvDqey1EiVEMJMEfDxUs7NJicMenvpl6wJkf5b + RQJ7eykDWKWrNfj4rMNXEKj+EBZkJ8eJYPO3k77PTvo8R+ENDtr2QOEKvt7LEcB+vpbSF1vhLxzC298S + D++1uEkb4ibX8ZR2RBnAvqFq/l85N8JBhJ8jkcIVDFJ3o+X906IsNPO9XvJ9QPJuPMGdUeERQzFOdBlt + aBPh2hqxlja9igB2YDzJjTGpe6MJygB2Y0jyqFPyoEW/iu4oK80E7jdb0GcQ/hexhr7Q1fQHnc1g8GqG + hY+OSN5Om+yYFx61MdqFLdFOLEU7skPuty/BjQPyzXfHOrJksmIhch1bJc/3pMo2wb5MDw5IG34ww5tD + mSoi2FczhPcJT96e4MCCyYI541pmjcIJzWtYjBPOl2zHrgxHjma4cbGUqYujrLnAvJYLYy25NNWWy5TB + m2nNhemWXJC6lvOSV3N+8houSFnHRWmWXJRuLfvtBLZyjB3np9hwLMmaI8r8jRGeKWV4n5SRrdKnqrmP + +5Mc6ZJnbpFnaTKspV2OGUpzZzLfj/UlQawvFG4pffCI9BMj8k6j8kyjKU5MpLgypQxg2bZF9u3O8uZI + tj9HM/04JOV6f5wjBxNsOJFhx8kiV26o9uTuBl/NAH6qI0AzgF/sDNTM3+c7fXi2w1uLAH6l35u3Rnz5 + zbgPb0968e6UD+9MBvH6kE6ESyC35fpyXaovVxcYuaGzkCsHK7l4qI7jQ/UsthXTXZlGWVY0WckGCnMS + aW4qZWCglaGRDobGujUMjnXSP9ymbe/vbaK/p4neznoaa4qoKs2ioaqAntZqBmTb5tlR9izNsXlumMVp + Ea0zg6yX89vkuiVFKVSWZ8o9SujsrKZHGbXDzQyPtTM63sHweDsjYx2MqGXZ1i/7epWhOyT3HG5hcEQ9 + V5sco46Tc7TzWhkbb2NcYaKdickOJiZOQ20bO43RVsblGuNDkg61MTooywMtTMry1LAcO9jKRH8bG0T8 + b5sfF0E9qhnA04Od8vy9mrk9KscrTI53MT3RzeREFxPyDBPyzGp5eqaP9evlnOl2pmZamJ1tZX5DO5s2 + dbF9ey/79wyyY1sH62cqGB3NZmwii/mNhSxuLWBucwZzW9JZv5TOxKZkhheTGJyLo18Edc94LF0jsXT0 + xdDRFUdLaywNzYLWeIqrTCRnCueOFQ4d5ib6w5MwnT8G4cVx8VHCSXV4eLji4uSEj6cXvl5+y5G/vir6 + 149gf+HXygAWbhrofAYJwk3r091ZbI3kyqU8bt+fx32Hs3jgYCr37Injzu0mblvSc/OmEG5dCOKeTToe + 3mHkiV0mXjoQy1snkvmN4J1jMbx/IpoPj0fx2yNG3tkfzus7g3ljZxhv7zPwwaEo3he8d9DMW/tNvLIz + kueXhKttDFs2gOf9eWMxiI/2Gvjb4Wi+OWjg6/3BfK2if/f5CHz5bn8A3+/z5wdJv92vonx9+Osegez7 + au+y8fvlbl++2OXD5zt9+HSHJx9LP/rxVnc+kfSL3d789YCK7A3i28PBmgGsRQEfWTaBfzgaKMv/Mn// + FQEc+l9DQC8vqzmAvz03QpsD+MvDBj4/YuK3O3Q8P+7F/Z1O3NHoyD1tPjzcF8FDfZHc3x3J3T2R3NNr + 5s5eA7d1hXFzR6CGW9sDuK1d+Gt3KPcNGXhwzPgf5u/D02aemF02gH8l5ea1bVm8tStHM4CVEfz69ixe + 2JLGU3NJ3D8RxQ0Deg5KW7KpzovZCg9GC6UPyHenP9eDzgwXWtNdhT+70ZQtyHITLuNBW4639ievRunn + G6SNa8jwpEna5KYsX9kmSJPlDB/as9QQsCEMFgu/yQuUdV86cwKYqotnQ2smOwZKOXexg1vP2cBt523g + ir1DnFhoYf9MLRt7cxhrTmC4MY7h5hiGWqIZajUz3G5itNPISIde1oUzNQTRXRdMb72O/mYDQ81yTIuZ + wSYT/Y1GQQQ9gu6GcLrqdHTWhtJaG6KhTUvDaK4KFYTQVL2MBlmvrwyhtiKYmspgqgWVVcFUKLOnRrbJ + dSrrQymtDqCozJv8Yg/yC100FBS5UVTqQXmljxwXSH1TKE0t4YIImlv0UkeNNDZFUlOjE8j2RrMW/Vte + GkpOlheZUsfyJX9rKyPoao+nrzuRru5Y+voSGRlNkbYsjbGxZObn89i6tZSdO8vZf6CGAwdqOSjp0YPS + hqvlXaUc2FnM0d1lHN5axL6FHHbOpLBtNIHNfWYW2/XMSd6tr/ZjriaA7cLl9rUbONAm5aFFx75afw4K + P75Y8vjavihu7I/i2m4DJ5uCuLDWh4vq/biqO4Jbp5O5f0extAHF3Lozn6uXsjgxHcXBSQP7pg3smTWy + e9bMrjnBfDQ7Jd0xKxx8bhk71kexayaKHdMmtguWZkxsFWyZMUhba5B+IpKN643SZ0QyPxUh0LMwb2Lj + BrPAxOIGIxvnBPN66VsiWZqNZNucgW2zJg3bZ4ynYWabXH+bPNf2ySiBrE+Y2SLYNGZiYczABoGKxJwd + jRSoVCD7ZseiWD9qZmooksnhSKZGjMyMmZcN4QkDk2OyTTAxGsH4iI6x4VBGh0IYGQw+nQZpGB0QzTGs + Y0HO2yJ1b8t4NFtFj2zqk/t2hDHdGMhkpS9jRe4MZAqnSLVnNNOZiSxXJqT+KSjDd060iIIyfSezPJnI + 9GQq21uLAp4XnrFQHMi8QkkAG0r9WSzxZ3NFIEtS3ndIGdzTZWRXj3yHHiPbeiTPpTxs7I1ivtvMbKeZ + uc4oNnTHsKFnGXM90cx2RzPTFcVkm4ExKcsjUq4VRpvDmGgLZ0rq40yXoCOC0Qapj6WeNGTaCP9fTWnc + 2RRFnUW+fgV54SvID19JYfgq8nRnkRt6NtnCFXNC15ETZimpNdlhdmSFCedWCLUXnexAWqBwfn8bEoX3 + JvhYEedrS6yXNVFua4l0XoXOcSUh9isIFYS7rMTofhZm7zXEB1qQJlo1V/RonmjVXGUCR4vWiHWjTPhV + WaonJSlS54THZcTZkhC1jjiBOWoNRvNqIs3KAF6zPAx09FoShYuVFgdQVREinEV4f6noUtGJOcI10xLX + kRKzmsy4NaJHLchNsaBA+GVxthWVBTbUltrTVGVPe60DnY0OdLc4MtC1bAKP9PrR1eJJbZmD8C0rslMt + SY1fS7xJ7iucOtZofdoAtidBeHOi6JQU0UepooNVJHCScOekKFsNidFquhwrDanCQ7OTRRenL0+RVJnn + K7zOS3SyGr3LgSzhxRlGCzIiLckwWJImnD81bDXJIatIDhZImh1uQYnw9OoUL5qz/TQDuEXaqJIYS9m3 + isLTEcDKAM7QWZEULDorxJboQFsiRZ/o5NuFBak/sTqInnEiPMxVM4ENenfRIy4Ywh0x/lsEsBrq+Zeh + n+W+mgEc40yM6JPoGA+iTGp0JC9ChNMEBLqLFvIUTeSh8RlXNydcXJ1Qc6p6errh5eWumb3KjFWmbGCQ + L75yvKeXK16+ss9frqMLIkwfQrgxTKAjwhxBuElHqDKBdQGio/w1E9jdz10bCloZwNaO1tpcwK5eLrj9 + Gzx91G+kXhrUPRQ0A/j0HMDmqAgSEqNITIomISGKePX7pClUvm0QmYlhFKbqqMoKpS5H+qbiYAaqdcy0 + SJvWZ+LYRJzo9Vium43iurFQaX9F+zc7cE2TPZdVWHI47Sy2ms5gUerZ5ugV7M9cxYVVblzbY+ASad93 + l/oxkeZETdhZ5PidQWaA1EvRZeWiqYtEJ+f6rKDYawVjsWdzqNiR6zuCeXBYz3OTkbwwFcaLU0G8MOHP + MyNePNrnzgNdbtzU6sr+wjVMp5xBr9y32X8FraKRu6Wej0SfyZaUtZyTvoars9ZwZ/5aHi1ex1v1TnzU + 7sFX3Z58Le/wN6kDX3U48kW7HZ+3WfN54xo+q1/Jx9Ur+KjqDD6pPYvP69ZoBvBf6i35omoNX5at4qtS + QdlZ/K1iFV/XWvJ1gy3ftDrxtw5Xvux059N2dz5q9eC39S68UWnP0/nreChrFXdJPt2esZo78ix5oNKJ + xxvceabZk+caPXi22omnSmx4Kt+SZ3IteTHPipel7r4keE6e/+mi1TxbsYYX6tfwUqsFz/c58cBIAFf1 + BXO0M4jtXeHMSBva3hxFRkEAIUY73H1W4+q+CieX1bi4rMPV1RJXFyk/jlbY2llia2+j4b8NYEdXew3/ + wwB2V8v2Ut5U5K+TlDll/LrgG+iKX5ArvkHO+AW74B8iZS/EhYBgJy0CWBnAoTplArsTYfTEGOVLfFIY + RSVJwk0KGRxsYNP8AMf2b+TCo9u59JzdXHbuPk6et49Lz98vOKjhkvMOaLj0PFkXXHbBYa645ChXXHyU + yy4+wsmLFA4vQ7adlG2nJL38kmNcdlLhhIaTlx7nUtl+iRx/0QWHNFxywREuvfAYl150nMsukuMuPiHL + R7n4/ENccHSvNmz0eQd3cGTbIlvH+5loqtGm/quK1lNlFG6XYGAkL4kNlVnCaYT7jLZzcuccVx7ezlXn + 7uVyee5T5x/gMnmfyy48yEnBZRfKuuDUhYc0XC7PoeYwvlJwubzfRUd2cnTXJnZtGBd+Mszx3Vs4vmeJ + g9s2sHPDJNs3THBoxybOPbCbS845xA2XX8LtN17NA3fdypMP3curLzzFb9/9NV9++mf+9sWnfPvVF3z3 + t7/w/bd/5Yfv/ib4K99/L+kPX/P3H/7K33/6mn/++C9889WnfPz7d3jl+Se4/YYrhddtFG40xHrR3hN9 + NYz3lTLclctARzpD3RmM9WTL9hzRrVkMdaYy3JmiLS9OlrJtQxVbBZtmymS9kIWJAhanCoSTFLJhOJfZ + /mzWd2WwvlPQJrqzLZO5VtGgLbLelMb6xlRpiwo4OlvHya2d3Hl4mOfOGeSVg628uquG1zYX8Rvhmu9O + JfO+6NMPRky8PxjB+8MR/Fa40u+nRfsJfj0UzhtDYbw3ZeKPi/F8tj1FkMTH2+L4bGcsX+6JF62WwBf7 + BEfT+fKCQr65poUf7pyEpw/yz5cv5Z9v3sA/f3MXP7x6G18+fhXvXH+YJw9Pct14BRc2J3G0ysDx2kjO + bYjklHCX28bTeGy+gBc3FvDGpkLeEby/kMfbE0m8NRjDm6KjX+s08XR9CI/WBvFQTSAPCO6r8+P+en/u + Fz5/X10ADzSEaCbwY40mQazsi+f2mgSur03gZFU8R4rNHK1O4eqxRh7aM8MKvdlTOhV36VRUxXMjUlIV + Daw3ORMRaY/BYE9MzGkDONNPyISP9u+ueOn0TTohISFnYRSiZNYJERGoHzXjwteQELGOVGnAs6XzzTTa + kq514kIe5LxskxUpEatJCD1TcJasW4pA82a8UseGeiGc5cGM53oyKiJvNN2RQWUAC3mpM51JTcyZNKVZ + 0FXsRF+lG50VLrQU2dKcb0VroQ1txda0CzpK5Zwia1ryLGjOXSPpOtoL19FTas1AhQMjNc6M1gqBbXAT + guvDtuEwDgv5P39LChctpXH+ZvlI0pkdEaJ/XAi99q/RORM7BwLY2CZkt9aWsUorRkvWMly8hpGSNYyW + rmZcGv+pylWsr1nNhoa1LAo2Na5jZ5sd+9ud2Ndmz74WgXSOe6Vz3Flvy9ZaG+ZK1zCefyYDuWcwVHSW + dv3ZZlc2tPkz0xzIcI0/3SW+tOcF0CjfoSrJixIhioVmJ/KiHMk1CWESpMr3StPgIHmu5gV2IkuITKaQ + zExlekR5kCDf3GRwITzcQYiKLSoKNyRY0iAbbf4+Fe2jEOhvTZAgJMiOCJ2DkCJFiJwJV/MH+quooTUE + +qkIYDVf8Dq0aOCgZQNYDQEdZbInMd5NM4DT03zIyvQnI8OfVFmOl+0G6YDCwq0ICrHET8719JLOyGM1 + jloU8DoNTi5WGn42f13drfHwssPT2x4vH4f/YQCrdRUdrMxfNVewi6uNnGuDiiJ2cLTA2ckGNzc7fHxc + NQM3XBeombvRQn5iY/REq7kvDDqijOGa+btsBC8bwGpIaGUYhwT5SN4IwRMEBXpo//RbNnvVMM/L0b// + 0wD2JSLc/7QBrCNaiFyMINqol/stwxwZLvkbqhnAymQOCfCWfPXUDODQYDe5rzKB1fDd3to8wD8bwIV5 + UZrBm56iE4SSnR5OXnakbDf9sr8gx6zNC6yigdOTw4iRDtYYKfVcL3VeUqNeSK9cW6+if/0d0fvYo/d2 + wOjjTLx02ilquKMwIVBJZ7BdxMEdu0x8cFMeXzyUzRf3J/L5nfF8fFM8b19i5sX9eh5eCOXGAW/Oqbbi + RJ0NF3S5cHLMnxu2xnHDngxObcvmwFQqQ7URVGf5kR3nTKLZVsi1A3FxQq6TPUhKVSMOeGnzjZQmq7ld + HGgT0ba9zIZ7JwJ4/2AEn14QwleXBPDVUR8+3+TEJ4OWfNy8ko9KzuSDnDN4r+QMPmw6m4+HrfhiwYFv + Dnnz3cVB/PM6Pf+8w8BP9+r46eFQeC4Y3gyHtw3wTgy8Hs8/Hk/gr9fF8u5BPQ+M+nBRtT3bc51YyAti + pjSeicpsBipz6SrLprkwnab8NOrVHIPZqdRkJlOVnkhFcjzlybGUp0RTmRpFbVYs9VmSpkdSnRxEbZI3 + bRluIqw92Vzvy+EeXy6WfLppYzBP7DPwh0tS+OpkOj+czOKfl+TxtyNpvLso+dvjzBUV69iWspLhyDNp + 8F1JsdSdEiFU5VK/yxJERCY4Up3oSH++DxuqQthWqyIqjOwo0zGd7EtnhBzru5YyEaKVEfZUi6ipljal + xCyCM8xaBK2IVO91JIqoTfaVNlvqfHrgarJFfBUEr6QsZAUtphVMZp/FkTZHbt0YwEsXmfjdrfF88WgC + Xz9v5sdfh/D3D/3gsyD4Wwh8rwxgT/7xgys//cORH/5hx3d/t+GbH6z4+nvL5fRHBZtlyDYVCfzDX334 + 8VMd330QxdevJfHR4/E8f3kQF0+dzWTJsgGcFnkGccpE0tkSr7MhIVxEp7RzKvo3JcpLRKcXCbIer0xg + 9WcYo7u0h26kR7uTFeOpDQGtDGCF3DhP8uO8KEz0ojjZh3I11H66P9WZgVRliMiWtqw2K5C6/GCqswMp + SRPhmugq5zr+YgDnpkufme5Jbqor2UnSRidZawZwe4mb9oeebf0mDo4ncGQqnv2j0eweMLCtR89CSxBT + 1T6MVXgxWrZsAA8VedFf4EFfnge9uV6n4Ul/ngh0IfOTZWFMl4sgq4xgptrAfFMMGxrjmK6LZbQikp5C + HZ25YYJwOnP0tGdG0Jyho0nW20qMtJcaaSoMpyE3lMb8MA3NAjXkdVtBGF1FoXQXBdJf7MeIGpa61lv6 + KFemGxzY3OPCoWl/6TfDuf6gCMD9EVy5K5ArtntzxZKXZgJfssGOi2etuWjWgpMLFly1ZMst+1x54lId + T18ZzpOnwnj0kiDuOurOTXtsuXR+JcdGVnBy/mxu2m3H/ed48filITx2qRCfC/20OYDvPObNNbtduGij + I0enpU8dcmZnrw9L7YEsNIZIHoYwKlxisDiIrjw/mrM8aEh30wzg6hQnzQRWaW2arKcLJK1MdtbmAS5L + dtJQkuJMcYqLNldVYZIL+fKN8+JdtG9dkCLlJNGFHPne6ptnxDlokb8ZsWpdvnmim3zz5TmhNSR5kBXn + KmXOkQS9NdHh6wRriRZuFGeyJlZvQZTiUSHCpxQCz8LkL2U66CxSwi2kf7eVvt6OXGkn1Z/o0oVjpevX + kKJfTVL42SSEKD51JimR66Q9tScvxY28DG/ypH0tkHJaVKCjIE9HhpTjxARPYmJdpS9ylPbfTvoVawID + 1uDreza+Igp9vCX1XqMNBe0rCAxQw0XLMQp+wgsChC8E2kn/Zq8ZwEEBNtrQzyoSWKXKAPaV1MvXQkTg + vwxgNQy0b7ANgeGOBAufCJO6GGlwwmx2JFHyLl3yMDfBnsI4OyqilNlrTW+4DQPCRXsjbekRdBps6Yi0 + oUN4ZW+ME0PxzprpOyzfZVTyfED6kjbJ08bwVXRH22jDRPdFWdFrsqBHLxxQ8r1L8rlXt47+CEtpP60Z + le8xIdddL/kxb3Zgg2BB+qJt8v12Sh1ekvo8J9cYCl3JmH4Vs7HWbEp0YEeaG3uknu+W+r9X8nqfQqY3 + O1I82CTvMWNax1Tkarm2tFMm4YWxliwkCedLdWSflLljUq6ORVtyzLyGCxKtOJllx6l8B07m2XBxjhWX + ZKzjovS1XJy2lovS1kmqYCGwEljKNmsuTLHhvGRbjsXZcjDalr2CPTGOLAlPn5D2v0+es1vysy3KklbT + WjokHUhxZDzHg/VSn2fV3Jd5Up9VtE6mOzPyTmru3/Vp8s5S9hckXUrzYLfkw3551/3ybnskv3fJ99kX + b8WRNFttDuDLCx25vdaT+xu9eazNj6c7/Hi23Zen2z01PCV4rsuLF/s8eXXYk9fHPHhrwoPfTHrx9lQg + b47peEK47p1FftyUE8DNlTHc2JnHFb3FXNQrgrm7lJmaVBpzjFIPQ8hOCKMsP4HOtnLGxtqZXt/L5Pp+ + xjX0MSbr4xPdjIrQHlWRrgPNdLdVU1OeTWVxBvXSd3c3VzA92slGJVrHOhmXYzbPDrFhupf25lJKi5Mp + L02nubmEwZFmxiY7mJzpZnZ+kLmFIWY29DM916dhclbuJ/vGproYn1aQZS3tYlKWf8FMpzxrFzOz3RrW + z/XK9fqYlfPXr+9melr2C6YmOpgabz1t2LYzKe8xN97D/GQvE4NtdLdU0lxdoEUDb5jqY2qoQxsOWg0D + PTnUzuLMoLyb3Ge8m/nZfhbmh1hYHGZxYZDFjUOCYTZuGmGTYMvSMEvbhtixc4Rde8Y4cGCSI0enOffE + DAf2DzA/V60ZwFPT2WzcXMzm7UUsbMlmw5Jgew5z27KY3prB1JZUJjanML4hmfG5FEYnkzRzaGgojf6h + dLoGM2hoT6K40kxGToT2Q09omAdhYV7Cr4MwCt8OFH7t7uaAm4sD/t6eBPr6CRcOIDRIOHGgH2GBPkQE + ehMhXD/Q6QySgtfQmuPF1p4ort6Wy537s7n/cBr370/kjh0Gbtmi46ZNIdy46M+tC/7csymYx3cZeH6v + iV/tN/Gq9FlvHo7mncNG3jti5LfHDHx41MC7+3W8sTOYN3eG8c6+SD44ZOb9QybhnWbeOSDn7I3iV9sj + eX5zOM8uBPO8igBeDOZPuyL5ywETXwsP/uveIP6625uv93jx9V5vvtnrI6lgny9/3efNV3t8+Ivs/8ue + ZXy5y4cvdvny+U5vPtnhxafbPfhoqzt/3OjEnzY5y7q7ZhQvm74hmgG8jAANXx+Qax/wXTaAD/svz/97 + PJgfzg0TCNc9T6cZwT+dt2wI/3heBN+eE843xyL56zF55nPi+Fje7deLYTw36se9ba7cL/X4oV4d93fr + uLM9jNs7wrmzx8AdfZECHbf1BHNrrzJ+A7mjO5g7+8N4YMzIQ1MmHpk+bf4KHpkx8fhsDM8uJvLSljRe + 3ZbJmzuyeV3SVwS/kvLznGx/fD6Ze6diuW7YwMFWfxalTZkpc2Ok0IXBfFd6hQd157vTmiso8BL97y38 + WyDLzcJ1m6Qta8z1EfgKJ/eXbcFyXAgtBaG05i2jTXhNh/Ad9ee2Ltnema/+JKZjsjqeucZ0dveXcsnG + Lm49NM3NUheu2tHHxZs7OGehmT3jJSx0ZzDeksBQUxSDgoEWI30tkVq0b39zGP1NofQ1COp1AtnWEEl/ + vUEgx9UZ6KkXTlYXLoigW9IuQXuNPJtwlpaqYFqqg2msCqJB+Et9WSD15cuoKQuiulQ4aEkAFcX+lAlK + BSXSZhaX+FEq+0rkuMJSP/JEU+QUuJElmkUhO8+F3ALhLUUelJT5UlbpT0V1oCCIqpoQqmt1VNeEUV0l + aXU4NdV6KirCKSoMEu3uKdrdXfiDD5VlITTKO7Q2m2htN9PZGUN3TwwDg/EMDScwOp7CxGQqs3NZbNqc + x+Yt+WwRLG3OZ/vmArYvFbB7ZwmHdpVzYEsRu+dz2CZaUA3lu20wge29cWxqM7KxKYLNzZHsblfzxkZx + ULYdbApnb1UA+yv9OF/y+Ope6SMGYrm2y8hFtYGcU+HNceHN59UFcHmvmWun07h6Pp3L59O4SNqjg6Nm + dgyGs3VYMKZn24SRbZNGtgo2y/rmceHgUm63TysTVrYrQ3RUr2HzeCRL4yaWJkxyvECO2TJjZvOUkbmx + cIFOi8zduN6kYWG9gY0zkSxOR7BxKpzNkwItlWsJtozJ+wk2jQjUPUb0LI3I9cdMcj+jbJNrDEcyN6TX + MCv1Yf1gpMDItGiFmUED02pZ0sn+SCYGIqUPkPUhE9PDRqZGZJucNzGsZ3xQz9iAjtH+UEb6QhjuDWZY + pX1BsizoCWK6L5R5OX5RrrFRrrtF9MkmFUXbFMJ0tR/jUp5Gc10YSndiUPjLaLoz41muAtEzgslsD2ak + 3ilM53hrBvBkppfwCm9t22yeL7P5Ai31YS7fm/kCHxZL/dkoZXFLfahm9m9ti2Rzh+Rbm575tgjWSzrT + Ju/bJu8l5W1GysL6jihmBNMdZqbaTUzJvjEpK0ONOgbqgpdRH8Jgg0KobA9lWNb7pbx3iZ5qzHKgKkWN + /nM2+caV5ISvIEenTOCV5OtWkRm2kvSgM0kPWUNmqCWZOivZZiNw0JClk1TnRFqIIylB9iQKJ45T5q+P + 8HgfW6K9rDG5rUPvvJoQh5UE2a0g+LQBHOku3N5HtHWQaOpwNTyx1E+DXNPoRI5og3zh5cXCO0vUn4qF + d2YnOJEp/C1FOGdstIVw5bVEGlehF6jl6Oh1xMj2hAQbCgt8KSmWNqA4gOICP/JzPElLtic+ahUxhpUk + mM4mNX4dGUmW5KRakZ9pRVmerfAhOxoq7aTdcaCt3o7OZgf62p0Y6Hajr9OD9kZX6sodKCu0I0/OSUtY + J5plFVGRa+W6KgrYQUOi8HHF45OFi6cI1G/FaojoBLMNsXJcjNGaeJOlhgRBmooCFj1WnOFJeY4PpVJW + ClJcyYl3JFP4ZZqaYlA0fapoIzWCZGLQ2cSLLooPWEm8v2idoFXa8M5F0U6i3zxpzw+gRa6j/tibHbGK + HNFCOXplBltpBnBqmLVoJtFfYXaEi64J8rEgWLRMkGgZNZVNeKgTkeEq0MVN+63ToH731NljjHTAZHSQ + d3Uk1uxMXIwL8cKBY4Vnx8e6EBPnJnrKgyijB/pwd4KDlbnqgrePK97ebnh4uuDq5oizcBplBHt4uuIl + 21UUrhYFHOD9S1SuOtZT7fPz0KJ/dZGh8q3DiRDoNQM4XEOIPliLBFZzAvsEeePh546tsw1WDlZa6uSu + huNVU+BJKnCT66p7Kri7q99JXbUhoHVhQegNIUTHRJKYEk1KaqyUpWgtQCXaECrfOYgM4doFqToqc0Kp + zwuhvSSYIekr5tojpT01c3wyhkukb7921sT149IuC8e/ps2J61uduLrWlouKLDiQvJIl8wq2xCgDeDUX + VXtwRUcER6VOLma70KWmYgo8kwy/s0nxF72rk7qhU6PRnUGa2wpKfVYwm7yW86qcuKXbh0cGfHh5zJ9X + x315ZcKHl8Z9eHbUi8f6PXiwx4Ob2tzZW7CGsfgVdIStoM5rBU3+K2gPWcFo9Cr25TlxRbFolhI7Hqm0 + 5/kae95rEo7V4cHXPZ581+fO972ufNPlxFcdtnzeasEXjav5vG4ln1SfoQ0F/XnDWr5stOSL+nV8Vr2O + T8rO5pPSs/isROFMvpD1v1Su4as6S/7aaMuXLQ581uLERy3O/KHJlfdqnHit3I5n8tbxcNZq7k5byR3p + Z3OHrN9f4cCj9a482eDK843uvFDnzHMVNjxXbMkLhZa8WmLLm2UOvFFqz8uy7fmSNbxQsZZXmix5rcOa + lwZdeWAkkFNd/myrEu4k+qy52IsCaYPNye4ESXvj6W+Jq4caCnodLu4WuLhaar+3/2IAO9ho+NkAtlMR + 5gI1D/D/PhfwzwawE+7eUsZOG8B+QW74B7sRGOpBcLgXIepPEgo6Zfx6atG/yyawmyyrAERvbRjoqpos + evuqmVnfw56ds1x4zi5uuOJc7rzpJHfddDm33XCS225UuEzDrdef5FbZduv1p37BbTdezh03X8HtN1/J + rTddIbicW248peGm6y/j5hsu4xbBTTcpyDbBjXKtG+RaN8j+6689qeEGwY3XyvbrLuPG6+QYubY65vpr + LuGaU+dz9clzuPHy87n2wqOcu32RpYFO4akZVEWFU64PoDlOz1RxGlsbizjQV8/lS1Pcdu5+7r78PO6+ + 5iJuufJCbrrqIm66VnD9pdx4wyXcfP0lsqzSS7n5Olm+9hJuuVrSqy7mRjn2mkuPc/Kc/Rzfs5mD2zdw + 6Yl9sr5PG/p6af0IixP9bJ4eYWlmnO0bpji2ZysXHN3PyfOOyfNewD23Xs9zTzzMe2+9yh/ff5uPfveB + FhX8yZ8/5NOPfs8nH/2OjwWffvIHvvz09/zl8z/x18/+hc8/+pD3f/Mrnn30Xm6TPDm2dyubZ4YY7aqh + u0H0dZNovsYkupoS6GlNEG2aSL+guzmG1loDzTWRtNWZ6G2JZ7g7idG+FEZ6UhjrTWKsJ4mJvmQme1OZ + 7k5mqiOJKTlusjGWqbpYpusSmKmNZ7oyjrEyM6OFkSxURbO3I43zhgu4Yb6SBzaV8sSGXJ5bn8ZLEwn8 + Whm/o1H8cczMn4Rj/X44gvcGQnm7P5i3+gJ5tcuP51s8+JWk74yG89tpAx8tRvPZUiyfbonm0yUDn4je + ++N8IB/O+vPprii+OpbB9ydr+fuNA/zz3s389MhBvnvifL59+jK+fOwkv731KC9fsoVH9w5x7XAx59XH + cqQ8nOO1es5t0HN5l5m7J9J5ZrGAVzcV8K5w5D9uKeCTTXn8YTKR3w5E8Xavidc7I3mmMZhH6wK5v0Z0 + rODuOtFo9f7cK3z33voAHhRO/LBokMeFGz3RlcBjXWnc15bGbc0pXF2XxLnlsZxTk8q1ow08smeaFZHR + IqTNHuiMUvn0zugMLtqQ0OHSOITr7dHrbYmKciIl2ZPsrABysvy0YT1izdbSQa4mMnQVxrDVmMPXaohW + kb/S6aZKh58jHWRhohsFcS7kRKshPey0uRwKYm1JN64jUbeSJOmks00W1Gd4MFahY7HBzEKljvWFfkzn + CXnMcWM41Z7WqNXUGFZQaZKGPGkVLbm2dBQ7SUfkKALQ7hcDuLXYWiDLkrYUWNKarwzgdZJa0i6NZo9s + 7yu1Y6DCkQEhNMPVTlKg3NnYGyDCTpm9CZy3mMT5GxM5Z0Msx+eiBCaOz0dxdL2R3YOBLLS4ilC0ZqzS + krHSdYwUr2G4eDXDJWczVrKKyfJVrK9WBvA6eR8LtjRbs6vDkf2dLhzocFqGkKtDHa7sb3Nmb5sL2xps + Waxey6xgsdmOXf3e7B8LY48agqczgsFKEbPZaghId8oT3SmKcSU/yoV8ISN5Uc7kyjfKNjuSZhT8h/nr + LOTHZTk1uJGmhkIVREWqISAdCA0V4vNvBrBm/AbYaAgQUqt+zFXkSCckKPIXA1jOCbD4xQBWy8r8VUNC + KyNYzQNskHITI2Q2OVHN/+tNWqqXCEhfMjJ9Sc/wITHJFZOUkfBIK+kELAgMXouP3xrcvdZKR6KGgFb4 + /2IAO2kGsBoC+mcD2MPTUTtWnePkLOe7Wv1iALs62eAhHZWfr5s8s4qCDdIicmNjDNqwJ7FReqKFaCko + I1gZwD9H/yqzOFiZv3Kev5zv5+suBMqdwEAPDT9H+mpDQmsmsIoG9taMYbXtZwNYXcusjGWjmlNYrh8h + 1z+NSF2IBr3cS5nAOhVZHORBWIjUzyBXyVs3TAZPbR7grAyDZuyqYaBV1K8ydpUBnJMRTmGemrcpitLC + OIryYgTRlBcnUFoUp80JnJwYTLR0soZIdyIjpL6HOhPqJ9/ZT+q8nwN6yVu9t5BhHyG3gS4khVhroqg2 + 5kymS6y5Yn24NGrZfHhLOh/cEMd7V8bw1kWxPL4zglsmArhMGtEjJfZsTl7F9lwrjjS4cdFwMNdvT+a6 + fTlcuDVXm8unq1xHSaoPaVJ+Y402kufS3gipjhYBlCACKDNB2g9BiRCWahGd7Slr2FnlwEPrw/jdcROf + XhrGV6cC+eo8Xz7f7szHY5Z81HoWfyxbwbs5K3g7fwXvC1n7Y/dqPpqw5MvtLvz1qDffXxrMj9fp+On2 + MP7+oA6eD4U3wuFdI7wXDb9OkG0pfHtbHH8438TT0uBf3eLC3nxHNuX5MVNiZrIijcHyDLpL0mjOS6Qh + O4HGnATqsxKozYinKj2WipRYypPNlKcYqUw3Up0ZLTBTmaynNDaAyjgfmuX9h/L9mS3xZ6nGm31NnpwQ + 0XXNkHRGi0be2xLDx1sT+Ou2FD5bSOA16azurrbl0uyz2WJcwVioEFzfM6nzXkWjzpmmaE9aUkUMiSDv + zfNmrlbHlgY1N1MQ26vCWCgIZDjei+YIR4qFaBcFWlES4UC52ZUKETFFRhfSQ21JEIEU5y3C1lvEmwjb + OPUPZ6nryUFrRRirf0avpELa5LaEM5iVdvC8ITfu2RvGq6di+P1dSXzxRCzfvxHJ3z8IgU8kj/8aBt8H + Crz4+48u/PB3B374hy0//NNaM4G/+8mabwXf/F3BRsPXP1hpQ0J//1cvfvwinO9+Z+brtxL59FnJhxtD + uHLxbBZqV1CbfDoCONKSGJ20PSL0YgVqjkA1929ajA+pgiSTG/HSx6k0xewu5e4/DWAV/auQl6DmAfah + 6N8M4Ip0fyoz/U+nftTkBFKXF0x1TgClaT6aOZgZK0I+wVnEtTv5WT4UZvtSIH2bGgI6L8mWmlwneiq8 + mG3XsW8sQfqWdE7MpbB3xMzmjhAWW4OYafBjosqbMRUBXOZ92gT2YbDIm758L7pzPenO8dCgvu9QQQAT + ZWFSHnVMVUYwVW1kfUM0sw1x2pCGgyqytzCc1uxQWtWwz1k6WjMjaMwIO20Am2kXAlWfp9MM7jol8nLD + aJT1ZjXncUGYNhx0d3EwfcUBDKjnqfBkuNyRkWobFjqc2S8i7PxNIvz2m7hyt45T2/w5tdWHy7coeHHp + gjMXz9txwaylYDUXzq/hiiVbHjw/hCdORfDkqXAevSSMu454c90OW86bOpP9fSs4b/IMrtxiya37Xbnn + uA/3nFDGrw93CG4/4sd1e725ZLMbR6ed2DvozNZOLxYbfZip9pP8k3JeGkh/oT/tOT40prtRl+ryiwFc + I9+kLt2Vhkx36jLdpM66UpPmRpXsr1TzBAvKUl0plnXNABbeo4zf/ATZluIh20VMJbuRL32ZMltzklw0 + wzc3yYN82fez8asigDXIOVkJ7qRGO0sZlLYuwpJo9YcFvaX244g53AJT2BpMUrfMAmPgWRj9zyQmaCUJ + YWulX1d/qLMhy2RNUtgq4kPOJjl8lWb4phrWCZdaTaKsJ6k/30XZkBrrSIo8W3qKFznZAeTmhJCZESAC + 35fERE/i4t00bqf+iKWigIOC1uHvv0qwWvo3hbXSv1nKuqX0eVanDeBlbvDzn8TUn8OUAayZwKe3Kagh + oNXUDr5yjo+0MR4Kfir6V7aH2REq/EMnfEQvXNNkciFa8iRN8i5b8jAv3oG8GFvKJE+aQtbSLtyiK8iC + TqnPg3Jsf7QrvQoxzvTFutEf50x/rDMD8a4MCd/sk/UWvRWNEWvojraV/fbaUNG9UVb0GCzpkjaiQ79O + S3vkGwzKsYMRVowoE1jyYkrBJDDbsSj1eCnbh8V0d8ZjrOkMOZNu3ZmMmtcxm2jPJikb21I92KoiftM8 + 2ZHuzfZ0L+n33JiLs2XcJPzQINzQsIph02rGo9cxkyBcL1mZx07sS3Fkb8w6DphXcV6yFZfm2XOqyJHL + hNNeWmDFyRxLaectuSzLgkszLbkk3YJL0mQ5TUULy/Gp1lySYsPFKfack2DPwShbdkq+7TDZsjHKnjF5 + 9wF5zv4EO3pi5fmjLeiOsaQv2ZbRDOfloRvzpY+QNmVW+ot5qQcLUk8W0l1YTHNhk9SHJcG2NHd2S17s + TnFlZ7wT26R8bZV32xVrycEUa87NtOGSHBtuqnDh7lo3Hmz05NEWTx5vdefRZlcNj7W68mSHG8/2uvHC + oDsvD7vx2pgbb0x48taUP2+Mh/JEawB3lvtyu7Q1dzbEc2N7Npd1ZHNuWxZ7mjIYKTJL3Q0ULeFFbnwg + 1UUJ9HaUMzXRxvxCP7OLg8ycxvpNQ8zM9zM1060ZqKPDLQx011FbmUNJfhLlRSl0NpYy1t/E9EgHI72N + 9HfWsHF2gEVBV1s5FWVpVFRk0Cb30IzfDf1s2DjMlq2TLG2fYuPWcRa2jGqY3zzCnOybXRz6BesXBgT9 + zMl5Cur8uQ19zC+q6ygMsCDPubh5WDNlFxYHmJdj5uW552Z7mFsv91T3FcxN97A4I88mGOlt0oaozk+P + 0eYEHuqup7OpnMayPJorC0VMN7Bp/RBzk3KvmX42LgyytHmMrdsm2L59kh07J9m5S9Jd0+zcOc3efTMc + ODTL4aPzHDuxwPnnbeKii7Zw0QWLHDkk77ehlrGxXNbP5rG0tZxtO8vZtFQg7y/YUcCiYMOOXOZ3ZDO3 + PZP5pQzJj0zmFtJZP5fFzPpcpmcLGJ7Mo3swm4bWZEoroklIChJt4U5IiBsRYWo+Om+8hL97uNnh5eGg + /dEyVBm+IQHow/wl9Ucf7ItRwd+VCI9VonOs6JV+ae9gLNfuyOHOA5ncdzCJe/dGc/v2cG7eEsLNm4O5 + adGX2xb9uG9zIM/sieSVA2ZePWDg1X2RvHXAyDsH9bx3KILfHtXz4dFIzQB+a2cwb+0K5V055reHTKcR + zW8Pxsj+WF7bbealrXqe3xjKixuC+PWmEP6wI5wv9kby1V4df9kdwF92ePDVTsEuD/6625Ov9nhp+Mse + T77c7c0XuxQ8NXy+w4svdnprkb+fCD7d5sFHW1z53QZ7frfgIDzQVTvn24NB/KAZwMr0VfDXooiVqfy3 + /b5a5O+3RwP54UTIaQM4VIsC/uE83WkzeDkq+PtzdcsG8PFIvj4m3Op4HB/vM/P2QhgvjPnzcJcHj/QG + 8uiAjvu6Q7m9PYw7RI/ePWDinmGzwMDdw7I+ouOeoVCBHDeiP234Ri0bwJNmDY9Mm3h8fTRPb0jkxU1p + vLyUyasCNR/w85tSeXZTCk9uTOWhuSTumozl6mET+6U9WKj2ZLLUleEiaeML3ORbe9EjfKi9xJu2Ul9a + ywNoKfWnuUQ0crEvjYXS10uf31SkECQIoaVYeExxBK1FCnpaBK2FetoKlRGso6sgnN4CvXCGWNHuSezs + LOTi9a3csHWQazf3csViGycXWzl/vpGDE2Vs6clkojWeoSYzA80m+rXhmiPoa5Tr1KvoX4GK/K3TCwz0 + 1UXSVxtJ72n0yHqP7FMGsEJXfQQdtWG0VQtHq5LnrQ6hsSL4XwawhiBqSoVvlgRRVRxIRWEAZfKOmvlb + 6KuZP8WyXlTsT0GhH7kFnmTnu5OZ47KMXFey84SnyLYC4ZKFkldFkmdFJXJ+WYAgkDLhS2VloYIQSkpD + KZT8y8kR3Z7uQbr0C4V5vpSWSLtbEUZ9bQTNzUZa5N1b24x0dJrp7Y+jf1AhlqGReCYmkpicTF6Gmnd4 + IpnZ9eksLuawtFHaktksNo2nMj8QzwZl/PbEs70/ie09iezojJPvkMD+ziQOdMZzuCOWw3K/fdXBHKgK + 5HzJ66u6Y7hxKJHremO4uC6UY6U+HCrx5GCpNyfkG5zbaeREfxRHB6PZP2Rme28EG7vCWOzTsXlQz+bh + SA0bZXlDv46FAdFJowYtAnf7mImtI0Y2D+nZItg8YpB1M9tGo9g2Hs32yRi2TcewRcr2vNSB9UPhzI9F + sjhhFBhYmNCzMB7OwphcdyyMjaOnMRIu0LFxWMfikOixQdk2qGPTkNx7yMCWEROb5L4bpW7ND0YyN6Bn + vWBmwMB0n4LxdLps/E72SyrLas7pqQHjL5gcNDA+EMmYXGNUjhnpC2e4V8dQTxiDUpcVhnpCGOoKZqQz + mMmuUGZ7wpnrjmChS8/GTnmXFlmvUXNl+zGa585wpjMj6YI0Z8YyXDTjdyLLXcNktifT2d7/Bi+mMr01 + qOWZHO9lqIhg4Rrr5fjZPC82FPmwIPV4Ub7ppjrRQPLd5hp1omFCmZRvOiYYb4wQyLs0ybtIOt5s0NIx + waho21HZP1gXLnUslF4pHz+j59/QWxVMt7QV7YXeNGQ5C8+3pShmDfmms8kOP5Mc4XW54WeTq1st+vYs + kgOVwbiG1BBLUsOsSA21IS3UQbSxAxlhjqSHCWcNFX0Z5EC8rzUx3lbE+NhIaovZyxqD+zoiXFYT6nAW + wfZnEOJ4BjrXlUR6ribKby0JIbaaAZwm2jtNL6kgS7hnTrSTpjEKhA/nJDmTmeAokGOEw8XGiE4Q3hUR + uQq9cEplAMcKn4uLtRJOb0d2luiMXNGiCjleZIv2TJHt0UbRE/oziNKvJDF6LSkJVmQkW5Obbk2R8DZl + 7NaV29NU7Uhrvb3wIuGL7U70droID3KhrdGZxmpnaoTfFQtHzRLumRi1RjOA1R9Ylfmr5gFOEu6tDOCk + eNHYccvDPydFO2h/cI0SrRMlx8Ya/4WkaCuyEh0pFP5cInq5WMpKvmip7HhHMoTLphosSJbz1CiSSaKB + EoJF9wSeTVzAWcT6rSTO90ySg1eTLdy9VO7ZLHq7VY18JPouzyiaKfQs0kQnpckxalSzzAgb8kQ7ZJic + MQRaEOSzZnmkQ9ElIUG2wi8ciNQ5YVQmcLgDBtEqkaHWsk1NgyeaTf2uaZT3kXeNl/eMF42VqAIW4twE + y/MGh4e5EBTgjK8yv1QUpJfLLwawk7Mdam5Vtf6zAazws/mrTFm1T9sv66HhQfKtlQGs0xBhCteGgVbQ + 5gOW/ZoJHOqHd4AX9sKbrBwssXa0wsHVHld3J/4VnemEh4dcW/CzARwc5IdeH4bRrCMuwURSSgzJgvjY + KKLMEVJmgok2BIqWDBVdG0p5ljKAg2krCmSgKoj1bTq2Sht0eMzIBVMmrpjUc81oCNf0iY7vcOHGNmeu + b3Tgimo7zstbzZ7EFWyPX8HBrLVcVOPDJS2h7JW2ejrVngbdSvJ8V5Am2jPBT+qG1KuUwDUkea4gw2MF + tSErRItZcapRNEafO4/1OfHaiCu/HhUNMSZ6YsyL50e9lucA7vfhlg4v9hetY0Lu1xm6gnq5TrNcvz1w + BWNSb44WenBzrRcP1rnxXLM7b7QIz2p14bNONy36V5m/P/W48l2XI1+1W/N58zq+aFjF53Vn8WnNSj6v + X8MXTZZ80WjNZzUWfFS5hj+XrOJPxWfzUfFZfFy0kk+K5bgyOadqLV/UWvF5oy2fNNnz52Ynfi/v8U6V + I6+W2moG8KNZq7kn7UxuTz+TOySv7i2z4eEaRx6vdeb5BldeqnfmxSobXiy15FfF63ij3EbOd9LwZrkt + r5Rb8Eq1JW+12vHrbgdeHfHkwZFALmkTfZdnSW3MWeTHr5Nyak9olCN+RiljgVJGPCylbFhIaoWLm7X2 + e7vj/0cD+OdI4P+rARzsRkCIO8Fhyvj1Ee3vqyFc7014pPB7g7dmAoeFu0t598Ic7UdapoHWDtFnE63a + H1UPHdzMpRcd4K5bL+epR+7g2cfv5glJf8HDt/P4w7fx+EMKd/CY4NEHbucRwWMP3s6jal3hYdn38F3a + 8kMP3MqD99+i4YH/wn333Sy4lXvvuUXDfaehlu+5d3mfOubeu2/grtuu4a6br+ShO67jgZuu4NpzDnBo + doyhsnzJ9wgqIgNoS4hktiyDna1lHB9u45YDSzx+9SU8I+c8dc9NPHj7tTxw5/U8cN9NPPCA3OsBSe9f + xoP337y8Xe77wN03cf9dN2q4+5YrueXqi7niosNcfGIf15w8wbWXHuf8QzvYsTDBlplBNk8PsWlykI1T + g7Jtij1L8xzYvolje7dxxYUnuPPGa3jmkfv41TOP8erzT/P6C8/w2q+e4/WXn+eVl57hpRef4lcvPsmr + Lz3FG688x69ffV6g0mU8/+QD3HPLNVx78lyO7dnCpqkBBltLaalMEQ4bS1OlmeZqM211UXQ1RotONdNS + o6ehMkzjs3XloTRVRdBWb5B9RoGJvlbh1G1RDLXHMiY8cFIw1RbDdHM00w1mZmqjWF8Tw2xNLDNlUYwL + lx/LFu5QGM7++hgu7E7hpvFs7pnK4JHxRJ4djeblIRPvCNf746iJLyaj+FLwiXC1D0WzvN0XwGud3jwv + dfKJKjuea3Tlrf4A3pO27A/rI/hsk5kvNpv5ZDGMP0x7886QA2/22fDHDYF8vitGdFMB31/axHdXj/DV + 9XN8euMW/nzTTt6/ficvXjDPY/uHRHe2cW1fPudIXhwqCZFUx/nCXa7siuL+yQxe2FTAm5vy+O3mPD7b + ksffNuXwxVQifxow835vJG90hUs7FcLjDcHcVxvAXXUB3NMYyH2y7X7BAy0hPNIewRPdJp4ZTJB3TueZ + kTweG8jh3q4sbmrN4KKqBM6vTeH6kXoe3zXFCmOsL/ooL8Kk4wqOcCI0wpEwvZPAgVCdMv6sMRrtRai7 + kakZwP6kpbgTK52zIWItBt0a6SzXYNZbYo5QES3SURutpAN3pjjNi/IMEQypXhQlOlOY4EypEJqSRCey + o61JFRKjoleyTWulw3ZmSDJFzVm4UCmkWUTIggiNDcV+jAnpbBWiVh25girzmdQkrKIh05rWAgfpiOw1 + A1gN/6wZwEVWv0AZwG0FkmrmrzUdRdZ0F9kIbOktdRARaUtfuR0jNU7SkXmzNBDKfiHzh6bNHNZg5PCM + Udalg1tv4NCUnj1DISy0uP1iAI9LoztaqqKAV2uRu6PS+E+Ur2ameg0bGiyEzFqypcWOXZ1O7O9246B0 + KIdO42iPB0cEB7vc2NfhJA2DA7u6nDgw4s3x9aGctyDPMBXLxm4RiiVe1KQ6UpbgJKTVmVyzGvbZmTxt + 7hAXcoU0ZkujnmFaNoCXh36WbREuZOucyQp3JjvSXfZ7kWzyFNLmQuT/yQA+HemjzN9lA9gWnZpT9BcD + 2B4V9et/2gBW0cDK/FVQcwOrOYLNiiTFOpOS5HnaAPYUEalMYG/SBYlSDqJibNCbrKTht5SOYR0BQRba + fIFunutwcv0/GcA2mgHs5avMXzUEtKNmAP8cBbxsAEtnJMeroaOV8at1aD8bwC62eAgZ0gzgQG/NAI4S + UhUXayQ+zvR/NIAjI0NQ8wX7+3nIuR5aBLGvXMPfT/2Lzp2AAOncgqQDC5WO7bQBrFJd2HKqzF99RIAW + RazXB2EQUqeWNbM3TLYJ1LIhPGTZDBZyF6kLQq/z134YiwjzlHxX/y5U0dveQtCCJF91ZKVFaOavGv5Z + GcBZp6N/SwqjKSuKpaw4npKCGIrzoykvSaSyLJGS/BiyMvQkxgfId/KQe7qiC3Yk1N8enZ/daQNYRQHL + 95b3iw4UIq/+jRexhqqosxjOteSc/kDu35/ACxfG89x5Rp4+YuSRXUauGvLlSI0DS2mWzESryKdVLKY7 + cLDen4uEJN6wO5drD5Ry3lKhCN5UmgpCyI33kDbDXsi1iKZIQZQ9pnhX4qXNSY9X88GoKDw3qtMc6Upf + xx4hRA9viOAP50bzl2sMfHeDnm9PhfLVQS8+3+DIZwNWfNp4Nh+WncF7RcoAXsHv2lby+6FV0oDb8tku + J7444sZXF3vz/fUB/HRfKDwfBq/r4F09vG+GtxPg5TR+vCeBP19i5qWlYG4QYniw2JHFHA8mC3SMlcYz + WJos7UmSCI8YGjKiacyUVFCXHkNVmpnKlCjKU0yCSCrTDVSlm6lIM1KaEEFRdDBlMf7UxfvTlebPSJYf + U7nubCh0ZkuxLYekbbql1ZvHuwJ4vS+M3w7o+UCE+Yt13twj7doVGavYbVzBnG4FwyJWu/3PZsDoTH+i + JwOZXgwXeDNfEyZtTyx7OsxsrZG2qziACRFZ3THu1Er9V+ZvvtT9Ir20y2YPSmO9KFCRsVLHY32kTfe0 + xuRhi1EErdFL1n0tiQlYJ+JViSsllldQZlpBR+qZbBKCe8mkG/cdDOWVK2P47d3Syb5g5NvfhPOPP0q+ + fh4B36goYD/+8aMHP/7kxA//sOfHf9rxwz8lleXv/27Hdyoq+B+2Wvr1T7Z8/Z0D3/3Nkx+/DOe7P5r5 + +p14vnwpgbfvjuDWPZbyfmdoc6ZnRZ1JosGKWOm7YsJFkAt+NoDTY/00qCHwlfmbbHYnJUq2R0ubGOPx + iwGcIyJOQRnA+Yk+FCV5/2IAayZwhr+GSvlWVTmBVOcGassqAjgv0UWbG1YZgfnpnhTl+lIsYrQ425ui + THeKpR7UFbgyIB33Yq+R3WNx0r8kc2Qmke0iouab/Zip92Wixkv6Fi9GSj0FkpZ5M1ziw0CRD73yTbvz + POmSMqjQk+fDYGGA9ENhTEq/OVmlFxiZrDExWRvDiJCvvmIDHfnhNGWG0Jj+M8KkjEqao6O91Ex7eRR1 + mgEcRG22MoB1NOSF/8sALg6nuziEnmJ/7QfYgRI3BkrtGaq0Zq7ViT0jPpzYEMTFW3VcvCSiY7Mfl2zy + 4bJNvpyS5VMbvTi56MyF8zacP7uOc2dXc9GiBbcd9uWhi8J47FI9j16s545Dvly91Y4TEyvZ272CEyNn + cOmGdVy9zYEbd7ty0z5Xbtznwa0HfbnlcCDX7w/gsiUvjs+4sXfQlc1t7kIK3Rkvk/Jf7Ct55qflUVuW + Jw1prtQKz1AGsDJ/VeRvfYabZgDXZ502gdPdpZ1xk3q6jLJUt18MYDVMvTKAC5PdKBFOo6CigPOVCZzq + TkGaO4Vp8q3T5btn+lEg+/NTpDylePyCrEQPUqX/jjfZae1dlIr6VYi0xKRbh0n6QaPULXPIGgxBZ2EM + WEl00Eri1RQaUrazzDZkKgNYt5r48NWa+ZtuttaQbLQgQb+WeOFhCUYVVWwj/dryn7DUFAyZ8m3T0v1F + 4PuQmOhFvLS70TGuGKTtVXPwBkvfHRgk/bmC+nFEoI0KEqSGf1ZQy4on2MkxthrUsooCVggNET5xOg0J + dRBeYU9AsB3+cp4276/AX9oVxTPVnw4jzZ4YpC6a1bBq0a6kJQjHjJf6E2tPkdSjmmh72oVLdPhb0Oq7 + mtYgK0akjg4nyHdN8KE/wYO+OHd64lw09Eqf0SfX6Bbe0RJpQ7Pkabf0JQNyzYFYB/qibeiRPOw0WNIh + +1Taq8zf0xiW7zFqtNUwYrBhxGzLjHz/DeoHSykLQzHCJ3Vn0qk/W1ueTnZkXsrGonx3ZRRvTPNks3Ac + lc5JWzARa8OwaR39xjWCtfSZ1jAQtY7RWGvWJyjz2JHtKY5si1nHzqhVHE+x4iLhtJcWOXKy2J6TwlUv + y7fmVJ4NV+TacCrHlpNZNpwU7nsqw5rL0205lSbHpNlymVzrgmQnDsXYsVPea0k41bxBOGq0reSXHUOJ + dgwmKjNcze1rzUCSDaNpDkxluTCb7cZ8tisLgk0ZLmxJd2Up3ZltaQJ5bxXlvEPyYZf0wduFu2+Ra240 + rGOTYTXbY9ZyINmKc+R5lAF8XYkDt1U5cW+tKw+KmHqwyYn7Ghw1PNDkIALFiSe6XHi6z5XnBpx5ccSV + l8fceW3Sh1fGg3i8I1D7N+v99Xoe6Eji5s50TramcLQ+gW3VMQzkhlGdKG2z9F8FSQE0lScz1F3B7FQb + Gzf1s3HbCAunsWnnuKyPsmHTINMznYyNNtPXXUVNZSaFObHCixJpbyhmqKeWUTVHb1sFve2VbJztZ8vC + CEN99dTV5FBTm0NXbw3rN8j1t46xdec0u/bOs3v/BnbsnWXb7hkNS7um2bJ9is3bJn/Bpq3yDNtH2bx1 + GZtUKs+05WdsHxOMs7RdxLpKt8n6kkDus2VphKUtI2zZPKxBGbjquZQBPNhZR2VhGikxOioK0mitK6a2 + LJuy7GSqCzO1/VvmhuVdBtm8YUiuM8rOHZPs2j3N3r1z7D8wx4GD8xw4vMChwxs5enyRE+du5rwLl7jw + 4m2cPLmDKy7fzSUXbebYkXE2bWxgaqqQhYVSdu6qY8++BrbtqGRpRzlbdpWdRjGbdxeycVcum3ZkSd5n + s3FLFosiZDcsFrBhoYSp2WIGxvJp7UqnqjaOlLQQIiIUdxbtGeSCv48Dnm7WeLvb4uct7UiABxEh3hiF + B5vCA0RrqmlK/IkKDSA62IP4EBtK4pwZrQrj8GgCN+zK4e5DGdx7MJ579hi4fbuO27aFcLvgti3+3LXJ + j4ekf3pxv4E3Dpp544CeN/ZF8BtJ3z2o4/1DwrMOh/Ph0QjeOxDKW7sCBcGaAfzhQRO/O2QWRPO7g7G8 + vz+Wt/ZE8fK2SF7cFMZL0v/9ZlMwH24N4ZNdYXyxO4QvdvrxxXZ3vtzhtoydahjn09il4LVs/Mp2hc+2 + L5vAyvz92QD+8xZXPtxgr+GjJRfNAFZRv8oAVsbvz1DzCP9tv49mCn+nhoI+EcyPpw1gNQewwrL5GybL + Qdr6t+eE/csAPmri8/1GPlwS/jbuzZN9bjzW48nTwyE8OSr1sVfHnV3h3N1n5L6RGB6YiOWBqRgenIri + wWkTD01GCtSwz2YeWx/NowLN/B03/YLH5NinZhN5cSGVlzama+kz80k8MZfAYxsShdcnc+/6BG6ZiOHy + YRP7WgNZqPaS/tyVoWIX4R2e9Jf70FPhR1eVH+2VAbRXBdFWEUhLubQHZf40lgpKAmksVgiisShEmw+/ + SThMs6CpWK+hWdBaFE57YThdwo968yIYLjQzURTNlpo0TvRWcNlYo6COS8aquHCymnMmKtk3WMBiewoT + TTGnDWADfcoAboqgp154Up3uF/TUhgtEvyvT938YwAr/bQCreftDaakOpbEi5L8M4BBqSkOoLgmmSt6r + sjCQ8qIgSooCKRYOWJQnvKPAnyJBQYEvufmeZOd6kJmtTGCBtPOZoi+yBDmyLydf+O5p5Ob7CKRdLfAh + P99f4Ed+XgA52b6i2UXDS/ufluoq2tJbtGUAlaXB1Mqz1tXpBcIVGyNoao6gvcNEZ7eJ7h4zXT1GenuF + f/YpRNGn5hzui2ZgIIbhwThGh+IZ64tlpDOKAcm7QcmH8ToDG9pi2daVwo6uZHZ3pbFfcLAzhcPSHxxu + jmaf1PUDVSGc1xTJFd2x3Dicxo2DyVzWauRImR8Hir3ZV+zDfikTe+tD2N2sY0erjs3tYXLtYGbbQpnv + 1bNxUBm/kSz06Znv0THXrWNDTzibBw2aybtjPJodI1FsHTKxbVj004hZ1tU2eT7h7jul/O+YimNJyurC + kIrOjWB+KJINI/IOIyqV6w7LNYcUQln8GYO6X6DMX4VNygCW87fIvbdIuVdz7y4bwAbmRBvM9OsFBqZF + N/w7JvsiBSo1MSWY7v8XJgUTsm9swCj9m4EReefhHr30lxEMSD1WGJJ3HuoMY7QjjAnJn+l2HbOSV3Ot + 4aJHBPWhzJYHMVnow3CWcCDhBaPCDxTGMpejfyezvTTzVw0B/Z8G8LL5qzCZqaKBFUQ7C6aFdyvMyLmz + omfmCr2ZK/VjXurwTGUgU1KnxyQdqQhiUL7jgHzvQfnu/VLm+qR+qLRXUrXcWxmsoavi/4720gCa87yo + kfcoT7GnRLhQUbQFeZGryIkQPRuxhpxw0bbBq0kQTZ0YuJqkwLUkBlsKrEgWrZwsHDdFOG5KqKPoZGc5 + zkH7g7RZ9HGUtw3RArO3NQYPCyJc1xDuvIow55XonM8i3P0sDD5riAm0JD5UrhUu0CkIfxekCQfNMNkL + B3bSRhfKEr6VkeioIS1RNHmMDUbjOuHrZxMuPNRsXkes8Mn4eBvh9PJcyS6kCV/LFE6qkCa6JVE4n1k4 + aGTEGdJ/nkmsaTWJsVakyrtnpViTJ3yyOM9O2hUH6pUBXOdAR6MdnaLrutqcaW92pq3RlbYGT5rqvagu + E52T40h6ghXRwgGVAZwoXD1ZeLeK/NUMYOmTFZKFx6t90UYrTKJLlNaJUVPdnEacyVKbHzg3SXRVujcF + wp9z1W/NoltSTZIvwmOTVfSv+l1ZkBi6liTRR2rah/jAVZLXZxDrdxZpoRbki6ZqyPCmvUD6ASmPJZIv + qcFnkByoIMfIN82TY8qTRaOJrk80OBIRZEFogAU6+bY6+bZ60SxaxK8yf+W7GJX5G2JJZJglhnAroiKs + iTHYil6xJz5medSipDgnyWNXEuI8MapRjYIcCfR1wEf4i7eXI15qPt7/iwGsooDV+n8YwLIeFhFMhCHs + F+gEag7gENmuoBnAukACwvzxDfLB2dNJM4AV7NVcwL+Yv8tQxu/PUNdX8/8aDOFEReu14Z+VARyfYCYm + yoAhUqcFopgiAkiMCiIrPojSjFDqcoNokv6hp9yPyaYgNneHsX8oguMjEVwi7d0Vg0Fc3efD9V3u3Nju + zI1NjlxV68jFJZYczjiLPSlncCjHkgtrfLmgUdrnEunfk2y1acWyvFaQ7L2KeKlPiX42pEr9S/NdQVHQ + GaLlzmJ/qRr+2ZOHBj14etCRN0eceXvEhbdG3XhlzIMXR715dtiXx4cCuKPHl+Pl1qLNzmBIv4I2uU6n + /wq6AlYwEbmao7mu3Nnox5Nt3rzS6c27XZ78scONzzqd+VuHC991O/NjtwvfttvzZbMlnzas5bO6VYI1 + fFK7ms/rLfi8yYpP6635qNKCP5at4Q/FqzX8qXgVfy5axUfKBC45m4/LVvFplSWfNSgD2OFfBrDUt1dL + bHgmby2PZa3iXnnW29NWcEfuWdxbaslDFTY8pgwpyb+Xah14qcqal0oteLV4LW+WWfK+nP/bGmfek31v + 19rymyZ73hd99cGAG2+N+fHwcBCXtHgyk7mWUp3krdR/Q+Q6AiLt8dI74Sll1dXDRsqGhRZcpQVOCf92 + dLLGzt76/2oA/4yfDWBnN7Vs9x8GsJef8y8GcGCYJ8E6L0IjvaUce0uZ9tWgNy6bwApGsx9xiSEUFCfQ + P1zPzFyPZgDv3btB9MgB7r3zKn713EO8+cqTvPqrx3/Byy89yiuCX734iOAxDS+98CgvPPswzz39AM88 + dT/PSvrCcw/LsU9oeFH2Py/r/xueffYhwSM88/TD/wNPPyOp2ifP8fTT9/PEo3fzxIN38OzDd/L0vTdz + 52Xnc8HWDUzWltCcZKYhWvqrNDNzZRnsaqng3PFu7jy2h1/deT1vPnYvrz31AM/KNZ55/F6efeZB7brP + PCfPLHj22Qd4/vkHeVa2PS/3fe7ph3jumWU89dhdPHLvTdxx4yluuOoCbr3uUm655mIuO/8AB3bMs3Nx + QoMyg7dvUFHAan2KXRtn2LtlnvMP7uaaS8/j7puv5v7bb+TB22/moTtv4cG7b+fBe27nLtl2y83XcPP1 + l3PzDVdwhxx3163Xcs+tV3PPbddw7+3XyT0v48qLjnHBkV3s3zrHgpp+qbmIhrJ4qgoNVAnHrikJp6FS + T0utUfqXSBqrdJrxW1kUIP2OcNsK4ec1EdLHRIom19Ml3K5HePVAq5mRtijhJlFMtZiZaTKxvsHIbK2J + uZoo5mtiWF8ufEc4/HR2IEuFYRyti+KyzkTuHM8QPZLGk+PxvCjc7U3haB8KJ1Om79cz0XyzPoYvZqL4 + 42g47w8G85a0Fy82ufB4mRVPVtnycqsbv+nz5cOxED6e1/PFYiQfz/jz3pAjr3eu5ZW2Vbw/6sqfNoTw + +a4k/nKkmM/Pa+IP53Xwzjk9vHFikOeODPDg9nbumK/jtslKrunK5JzySA4VBEoawoXC+6/piubByXRe + 2pTPrzdl84fNOfxlSw7fbcyW50zms+Eofif87a0uHS8Id328OZT76gK5qyGIe1vDeLAzggc7lvFodyRP + Cb9+cSKdl9fn8eJMMU+NFUp7mc/tXTmcrE7ggpokbhiu4ekdE6wwx/uhooCVARykhuWTzk+DEJPgEGtC + pPNTUcCx0rFnZPgtG8CpntJB2EmHuE46ybWSrsUUaYVZRbPItmTpuAtSvKiSjqIuX4RKlh9lqR6UprhT + KWmF+tE0zp4Ms4UQnlVkG9ZQHm9HT54f4yUhQjiFEFcJEdcQxqQQxHYhG7Wms6iLXU190joahbS0nTaA + Wwvtls3ffzOA1VDQWnp6e3uRLZ3FgsLTKLLTDOGekuUhoScaPVjoCmDbQDg7h8LZNSwY0bFnNILdo2Hs + GVcRWzp2D4eysV3Ibq29ZgJPVFhqc/+q6N/BwpWMFJ2lDQM9Xb2WDfWWLDZZs6XZnp3KAO5159CAB0cG + PDUc1+DF0T4PDvW6cKDHhaOjnpw3J432FulMl0TsjBmYaQ6mLc+Fsnghq0KW8swOmgGcbXImx+wqkDTK + kSzZnml2It0o5MzgrJnA/20AZxq9tCFRY/7NAFbm7/9mAP+MfzeAIyOcteVgIbB+fv9pAKsoYF2oFWpe + wZgoIcbxrqQme5Ce6kV6moIsK6R7Cll1IjrWFkOUECyTNaHhltpQ0L6BFnh4W2gdkpOLgjJwLaVjstI6 + KDcPWzy8bPD2sxcIydLgjK/6l1GAixYR7OFlr53j4KTmEV42gFUksDKE3Vzt8PRw+j8awMvDMi+bvypV + 5q8ya8MjgggK9sHHx02DGtrFx09FAbvgL+l/G8DhyrgNX8ay8Rt4GkLowgO1+6qI4uXhngM0qGUVEbw8 + LLRueS7iyGAhlf6S7z7yvaRzjPQRMu9HbHQgifHBpEpHqUX+CpQJnJul14Z+LiuOo6IknnJBaWEMJQXK + AE6gqiyRiqJ4OcYs3yVU3l0ZwC6EBzsQFqAMYCHBygCWfIz0c8Us7xUb7Cr11IkcgxXlUavpybRgR5MX + V8xGcPs2A7dtCeOmhVCunAhhV7k900mr6A47kxa/M+gKWcX6ZFcOSoN+ajaDm/dXc93Bes7ZXC4iPJ2q + rCDSzS7ERtjIc0hbEyFkW9oPoxDr2AQ1h4wjOepPD6luVKc70p1lyb5GNx7ZGMkfL4znm9sS+Pvdcfx0 + k5lvLgjhr7u8+Gq9M1/2WfKnprP5UJm/DYKOlfxu8Cz+PGfBR1ss+fMuaz4+6shfT3ny3Z0B/OOZ4NMG + cDi8b4R34mU9nX88KA3wqShe3xXGbf2eHKt0Zj7bidEcf4aLTAwUx9NVkEBLVhSN6SYRIJIKlBlcI+vV + qWYqUo3S5umpTIvUlkuTIymI1VFgDqHYFEhVVACNsX60xXrSGWtPf7wVI4mrWUg+m3PyrLlBhNljVZ68 + Wu/P69X+PFfkzIPZFtyUsYbzE1eyL/5stkWvZTHKikURUvMiuDcU+rGxMoi9HdEc7U/hYFcsW6pDRbB7 + 0ScCqznKhQpp5wtDpD0RIVsQ6UqR2ZNi6QtyDR4khzgSLSRc724lItZGhKulYB16r7UYpc5HCzFXwzGl + BK2Q9mUFFeYV9GatZEvDGk6ud+W+wzpeujqS3z1s4POX9Xz/vomf/mzk73/R8c9vgvjnj/78/UcPfvpJ + SPbfnQTO/PQPlTry4z8c+OGfdnz/Twe++bsDX3/vxLdfe/KDnPvDx/Kd34/lq9cS+N0jZh4614Vjo6vo + LT6DvNiVJJttiTeqCEsRaZE2xOtFhEp7lxHnryEt1lszflOjPTVkxniI2PQkK9aLrDhvsuM9NeQokyHR + h0IlFlN8KE331VAmfWC5igLO9hNIKuWgLEOOS3EjV8qpKqv5qa6UqB/K8nwpyRXk+FCe501lnhuNxR4M + N4ewsd/MjmFp38fj2DMSxcbOEKbqPBmv9mSsyoORCg8GS9ylfKnUU1L5boVe9KgI4P8ygAeERI0JgZqs + jhBEMlFpYLTCwLBARf/2FAmpyhMClhFEbWogNSkBAklluSE7jI6yqF8M4JrM4P/VAO4QEtdVFERXoa+U + dw+6C53kurYMCFmaaXRg16A3R9cHcnzWnxNzPpy/wYcLBJcs+nDZRn8u3+zPqS2esu7EBfNWnDe7VvZb + cM0uN+46FshDF+oFBm494CfH2nN4eCU7O1ZwqH8F50yu4sI5Sy5dtOXUJnuu2ObC9Xt9uPFgMNfvC+LU + ki8nZrzYO+DOQpMzU1JHRyXvBiW/+uV5u3O9ac300Izfnw1gZf7+HP37fzSAJVUG8PLwz06aAVwodUdF + /yrzV837rP6tnid1LjfZTTOAi9J9KJYyUpTpR776U4BwpWzhPD8jM0nKXpwLCWZ7og020t5bSjtvqaXG + MKlbYRYYQ9ZhCpXloFUYAs8iKvhs4nRrSDFakSG8K91oQ2LEWhIEaSYbKb/2GtKibUk0WBAjHCwqQv0x + bx1GZQLL/ZKTvUhNC9CQnOpHUrIv8VLGY2LdMZgcidALD5D+NzjUkhANVgJr6c9sT8NGYHca9nKsOt6O + 4GB7WXckLMRB+n5HDeHCN8KFd4TpnAgKcyBQjveXYwPC7IRjOqEzuAvn9MEU4yNiz10zgBOlHqbHqX/+ + u2iR1tVp3rSnejMQ5UafnNssbU5TgBVD8b4MJQVIG+ZHT5LUhQR3OuPdBC50yXt2xrnSGe1Em9FeYEuP + LA/GOZ82gG3pkjzskDzq0FvRJf1Zv7QRQ/+GwdPoj7SmX/JuPMWV6Sypl2kq6tiCZhHQ7YbVDMQJ90t1 + Ylq2z2Z4aJgTXjOX7sH6VHcmpB0YjJVrCMftMa2lx7yObvNaDf3RlowL351PcWKzXGNTrAVL0as4lGrN + +cJpLxJOe0mxHZeV2HO5cNsrC+25qsCRK/IdOaWGWs6x44psO67KsufKzNPIcOZkhisnhFftk/fcKnx8 + Tt5v0mzDmNxrNMGW0SQ7xpIc5J3sGEmS7Sk2TKXaMyv96oZMRzZlOLFNsEOutSfThT3pTuyWerJL2rOd + KS4aluRai2ZL5vWrmY9YydaYNRxIseaEMoBzbbhKePWNFfbcVe3EPXUO3FNvx111NtxZb8PdDTbc32rP + wx1OPN7lzJO9Tjwz6MxzI668OO7Fi2MBsi2Yh5XI6Ynm8eF07hhI51RbIodro9hSEclATgC1UodKEkVH + ZIXQVZ/O5EAlC+vb2bp1kB17Jtm2d5Kt+ybZeXA9uw/OsW3XJBsWepmcaKGnu4yqinTystT0GfF0NJcw + 3FfHcE8NHY1FdMr6wnQPWzeOMj7cTHNjIY1NhfQPNbCwZZgde9U1Fzh4bAuHTixx4Ogm9h1e1LDn0AK7 + D2xg1/75X7Bz3yw7989I+t+Y1rBj7zK275FUsPM0du2dYbekewTLqQj2PbPs2jrNxrlB+tqrKM6Jl34u + iOLMBBrKc6WPSZF2KIryXDWMViO7t8h1N42zY2mc3btm2C/PcvDQBg4f2cjRY5s4fmILx8/byrkX7OD8 + i7Zz4SU7uOTULk6e2s0VV+3l2msOcOrkNs45PsXWLc3MzpRJWsfBA+0cOdzFnr1N7NxdL89dJ6iVd6hi + 254ylvYUsnVXLlt35LK0NZctS3ls3lzMpk0VzC2UMzpVTGdfFvWNSWRmhWtTkAQGSPvga4u38H4vNwt8 + Pazx97ElNNAVQ6g3UeF+0qb5CwKI1gUQKxw6XudFtrQPDVm+rG80cnwqmZv25HDP4XTuOxjL3XsiuHNH + GHfuDOOeHaHctTWA+7f48/i2IF49aOQ3h028dSCCt/bqePtAOO8dCOP9Q6F8eEjH746G8/6BEH69K4Bf + 7wzivX16zQD+/UGz4LQBfCCGX+8x8/I2PS9uCuWleX/eXAzg/S0B/HFHIJ/uCuLzHT58tsNdUtfTcOfT + nf/C57s8NHympZ5yrGDnvwxgNf/vn/7LAFbDRisD+PvDwf9hAC/Dj+8OB/LD8WB+PCeUn84JW44CPm0A + /4zvTgQKgvnmRKhAx7cnIvnbESO/3xrEm9KXPtVjzwMt1jze68EL4+E8p4ZzHtJzz0Ak9wyZeWAigUfW + J/LofBKPbVDmbRxPbIjhiTlJFWZjeFQZw2NGHhwxaHho2MCjYyaenozn+bkUXphP5Rl1jek4HpqK5YH1 + 8dw3l8QdMwlcPxHLyREze1uD2KD+EFfmKjxIUCF9QrW0/zUBdNcF0VkXoqGjNpj26mBaqgJprgiiqVxQ + qhBMY0kIjaWhkuoE4YIIDU2Cln83gHPDpX3RM5wRzlyu3Ls6nWMNuRxvzOF4azbHuvI50pvPrs5M5pvi + Gas3M1hvoLdBT3ejXtoiuU6tjs6asP9EtWwXXtZVE0l3jUFDT62gTtbrIzT8bAC31gjfqg7TsGwAh1Bf + pkxghf/NAA4WfRck+i5Q+7NhYZ4fBcI584Rv5uQK98j2ICtLmcAeZGS5kZa9jHQNHqQJ71HIEH6UITxI + HZcpGiErU8GHTOEw6g//ylhKUcPRSj9XJPcoLwqkUp6pQp6xQvK7qjqE2rpQzQhublXzCetpbtEJhENK + 2iKp2rYMyfcmOa4hnKaaUO1b1RV4UyecuTXHj6FSyf+GODa3JLG9NZVdrWnsbUlhv6zvr49iV1kou+Xe + x+r1nOqO46bRLG4ey+LK3kSOSf4dkusdFO2zuyKQ7dWBLEk5WWwIYq4xUJtOa7o1lLleA4uDBhakPM/1 + RDDTEaphvkvHpn4DS1LGd4zGsHMkhu3C03eoVK2Pxgri2TGewK5JwXQi2ybj2CjHzw1Gaobt/JCCLEt9 + mRsMZ8OATsPCQOhp6FgcCNeglhU2DkVoEclbhowsDZvZPGpm44iRDbI+r4Z77o9kfb+RmV7Tf2BK3mOq + 1ygwMy2Y6YvSMN0fxWSfmXE5ZrzPxIgcN9wTqWGoW89AZ4SG4a4IRjrCGW0PX54vV77T+kYdswr1YcxW + BTNdEsB4jidDwi8GhQ+MZLhpGJXyMiZla0K+m9KVygieyvFehqyrKSUmM7yYEF40luYhkOOFUytMCKdQ + mJLyNJ3tzkyeF9MFPkwX+TBe5MtosS+DxX70FwfQI2m3PEN3SSAdJUG0y7a24kBaRfcotIjWVWgu8qdV + jmmXsvF/Qouc2yh6oEreoyzFkbJER0pj7SgwWZInvDBXeLiaVzY1ZA3xAWcR5y/c23+1LK8jNnAd8YFW + AuHfQcK1hfsmhzgTJ31XtI8VJq91mvEb5bNsABs9LYlUmtltrWjoVRr0nqsw+cq1gqyIC7EhQTh2vAYL + DYk6C1JEF2RE25MV70SmPF960jJSk5YNYINxLbrws9BFnIVZ+KXaFh8nule4WXycAwnxjiQJ/0xMcNS2 + RwtfMwlnjRTuGqk7E1Pk2cRHWZAUa0lakiVZ6dYU5NhInbajptKBllpH2hrtaW921NDW5ER7k2i+Vn86 + WgNorvOnqtSDvAwH0TBqGOh1ywZwnBPJCcr4lfufNoDVcny0nWgc0TV60SWidWJM1hpiVar+tGqy0v7o + r0ZIyhW9lCVcPi3agSTh4IkRliRHWAlUakmS5E+yaKSkMGXIr5N8lzzwOpPEgNVkyf4aKWdd0t53FAZo + U/xk6M4iNXilFgWcEbaGUtEI9dmB1OWGUJjqI/zJjgi5jj7EQov0NYTZYNRZYwoXbRYmqWghg+wzhokm + k3tHy7PEGuR7qd8ZRIup4a2VyZ0iGiQxzh19mGgjP1v8PK3xdLfF01MZwcrMdcXNXQ0Braams8fTy3n5 + N0Rfj19M4H83f382gHX6kOXIX2X+RoZqUb/K+A0KD9Kg5gFWUBHAfiG+uPu6adG/lvYW2Dnbaqbc/5sB + HBLoS0REKCZzuGhBg2hCMzFxBtFkevThIYSH+Eme+BNnDCA91p+itGBt5LPGPF+6yqSu1vuzqTNYtHc4 + hwfCOK8vmEt7/aUt9uG6bg9ubBet3ujAVbUOnKyw5byCdRzMPJsjeaJ1qr05vz6InUUeDMdbUe6/gnT3 + FSR6nEmcp9Q5r1Wk+p9FdtAK6gxnMZ1uxfkNXtzZH8AToz48P6yMXxfeFigD+NVRd14a8RY94ccTI4Hc + OxDAqQYXDhSuYyH2DIZDVzAg1xqQ+0yFncXhdAfubvTl6U4fXu/24f0eb/7U4cYn7U581e7It11OfNfp + xN9abPmswYKPNON3LZ/WWwgs+azeik8brPmo1oo/lq/ld8WrBWv4fcka/iD4kyxrJnDx2fxZmcCVlnKe + HZ80OfLnZmfNAH6v1olXS6x4Jm81j2edxX2pK7hTcFfOSu4rXseDpRY8WmbJM9U2vFhty4sVlvyqZC2v + y75fy74Pquz4vVxDXet3cs0PO1z5fZ8Hvx/24p3xQB4bDuayVi/mMtZRJO8eK++uCz4bb9H3bsF2uPs7 + 4Opph7O7JS7CuZ3dbTQ4ONtg94vxq+b9tf//ZQC7ejpqJvDPBrBvkKtmAvsrE1gbBtpDyrEn4XofIiKV + CeytmcAGsx/RKrgp00B1XTbD481Mz6ppc7pZXBzm3BM7ufuOK3n9lSf47bsv8947L/HOOy9q+M1vXuBt + wa9//bxArb8o6Qu88ZqKYn2M5559SINafuP1Z/n1Wy/w5pvPacv/G15XeO05Xnv1f+JVtf3153n1zWd5 + 5bWn+NULj/HSMw/zylNy/Yfv5qFrT3L53iXmmyvpyoyjI8nASHasZgDvbqvkopkB7r/wCG89cicfvPQE + 77/6DG9I+vorT8u9n+d1ea7X3np2GW88w5tvPac9669fl/dTeFPe7c3nee3lx3nx6Qd49P5buOf2q7n/ + jmu599aruPbUOZxzcCsHd2wQzC+n2wXbZHnrHPu2rGf/lnnO2bedKy84xs1XXyo4yc1XCq4SXHu5hssu + PZfzzz3I8cO7OXJwJycO7+Lco3s4/8huLpD0ohP7ZHknx/du0e6xa2Gc2cEW4cQFVBdEUZQZSnG2cNR8 + NXpNGA1VkTRWR1BfqaNG+Gy59N+V0pfXVQgPVAawFgFsoKtF+HGzgX5JBwVjLSYmZfu0cO3ZOoMWKDpf + bRJEMVtmZH1BGOuzAthWEMKJWhNXdsRx31gGT01n8KLwtNfGo3h31Mifxg18OWPi+7kYfpiP5a+z0Xwy + qef3Y2G8K+3Fq21uPFlhzRPllrxQb8+bHR68P+DPn6dC+XQ2lD+Pe/F2ry2vtZ3NKy0rebvPlg8nffh4 + KYpP92Tyx31F/GZXES8sFfP4xlLumy/l9qkibhzJ46bBPK5uS+GcYh0Hc/w5ITz+4rpwru+M4qGJNF7e + mMfbG7P406ZMvtqSxQ+Sfjebwl/GYvjTkInfCE99oV3HYy1h3FsfyJ0NwdwrnO2B7kge6Irk/g49D3Tq + ebw/lpems3h9Qwkvz5by9EQRDw8XcEdPDidr4rmwOpEbh6p5Zse4MoB90UefjgAOdyRA/VAnxMQ/xAp/ + IT0BgWsIk87WFC0EJFVEQYYfqdJRR0sHqA9fK4RiLcYIC8zSKUYJeVJDGCZH2VOcof6FKyJARFdNTgAV + GT5UpHlSne4j5MubokQncqKtyYpcQ45hLaUx1rSmu9OXI52KdN4LyvytjWSLfOyZ0gB6M5xoiregKcmK + FiEsLVl2dBQ40VoohKXA9t8MYNlXaEVbkZoP2IaOYjmuxJ7O0+gotKWtQPbly3H5FnQWWtJbastorSvr + W3xZ7AhiY1cgm7oD2dwbwJJ0aEt9gWwdCGbXUAi7hkPZ0u0rFduN2QZHxqVBHilZzZA08oNFygBeyXjp + aiarLJirs2axyVaEjAM71LDPA14ckY7r2LAvx1TElOD4sDcnhrw4OuDGEcE5U95cuBjMqZ16Lt0WxWK7 + D32lrtSn21AUvY488/K8ysrwzTY7k2V2FbiQFeWkRf8qpKsoYOOyAZylXzaAM8PlWL0IPeNyBLAygA0R + joSq6F8hs8oADgpcNnv/NwM4TIiNPsKZiHAnzTQOlLLhf9oA1oaADlxLaJCFlAlbokzOxMe6Lg//LIQu + PV2Zv55SbtxIFRGZmuou5NRJCIedlCshytG2Qm6sCdVZSdmzwttPOidPK+lIfjaBLWR52QB297TBw/tn + A9geH+nAfP0d8Q90EQip8rXHw8tWzlmLg9NqHJ3V+ctRxAr/bQBH6AKF7OiERBs0E1jN/btsvoZqqRqy + OVIIV6iQoIBALyFNipi5/IcB7Ofr+osBHBrqI3n17xG/gURGBmE0yHVkWS/XCg8LQBfqr0UU64IDCA30 + 06CW1VzAsWajQC8kOYJoU5g8kzrfX0i8v+Stv9S9AA0xUf4kxgaQkhCEmv83O0Mv4t9ESVEMFWWJVJUn + agawigZWw0GXlcRRpUxggdqWnRku1/fAIOUjItgBnb8dOt/TBrCfEwZ/1+Uoi1BX0iJdpezZUxFrRXu6 + JdNlTuwX4nTeUCDnDPhyVAjUngZPRpNW06pbQbnnCoocV9Dov47pVH+OdSVz/VINdxzt4rrDnRxbrGW6 + I5PiZD8S9Q6YpY3Rh64jXLdOyIA1kdKGRAuxTk1wIEuZL2muVGc60pNjzf4WDx7ZbOBPJ5P46YFseCwL + 7knh+6tMfH0skL9t8+LLaQc+7rfgz51CwLrP5k8Da/jj6Nl8NCvpJiFqS6v4w951fHqBA3+5wZ1vH/Xi + x5cD4J0weD8S3o2Ft9Lg8TT+cm0Mbx+SBnbCn/Pr3NiQY8+QCN++/DD6CmPozIuhLdNEU5p0bulGmjLM + NGaaqZPl2jQTVSkGzQBWKEvWU5QQLvU3jDxjCAVSvkojA6mM9KFS50RlyDpqQ86iKexM+iQfN0Wt5FzJ + 09tybHmy2I0XClx5Tu7/RJYl9+dYcGORJZeX2HJpiTPnF7tzuNCT/aU+HKgN4nBrJMfVjyL9Kexrj2Wh + IoweqX/NMU5UGxwplDqdL98+J9yN3Eh38kxe5Ju9pU32JFGErclH6r2rNSEuNoS4WgksCPNYQ4T3GiL9 + zibKfyUxQiiTAlZo80NXRq2gM2MFW1ssOLXoxf3nhPLKLeF88Liez183881vo/j+Iz0/fhnKP74J5h/f + +/HPH7w1I/jvP7rz95/cJHXl78oQ/ocD3/9DCPjfnfn2Bxe++9abH74K5adPTXz3YTRf/zqej5+J4ZlT + vlw8Z814zRpKUtaSrkRotBtJUSKETSKIDS6/GMCZygSW/i49RtqjWG8NWXHLxu/PyE7w0pCrDOAkXwqS + vSlM8aE4zY9i6btK1IgW0geWqT81Zclypq+IIk/yEqV9VfOuSlktynCnQgRSeb7sz/WhTFBT5E99iQ9t + FT6MtISwccDMtqEotg8a2dQVynSjNyOVLgxXuEnqxmCZqxZl21fkTr+gt9CdngJPzQD+xQTO9ZBlX/qF + QI0KoZqoUdG/BkbL9bJteX67bmXcFgqxytNJeRRRnORHpaBCUJUsz5QdhooAbiuX8irH1GaF/A8DuLkg + lHa5VkdBAB35PrTnutGR50BnvhV9xZZM1tmzvc+b/eP+7Bvx5MC4B8dnvDl31pcL5r25ZIM/VywFceW2 + AC7b7MnFiw6y3ZoLF2w4teTE9Xu8uetoKPediOSmvf5cKvv3969kqWUFu7tWcGBwJYdGzubo+FrpHy3l + PEeu3OHN9ftDuHaPCJylAE5M+7BbhM9cnQNjZY4MFbnSXyB8osCHrhwvWjP+/xvAFbK/JNVVM3/zpR36 + 2QBWI5qUCocpSVXz+rqSmyB9bKILecluy8M+p6h5n6UcKdM3xZ1MZfxqkL5Q9qu5seKlfYsx2UgfrH4Y + scIQbkFkmPCpsHUYlAGsIoGDVmMIOhtTyCpihGclGS1JU8OiGW2Ii1hHrPCv1Gh7MuOlf5dnU/PnJpiE + h8m1IkLPRifnheuFmwl3i4t3JyHZl2RlAEs5SJI0IcVPxL60/9JfR0obHBZmTVi4DboIqfcRNrKshoa2 + kz7SXqBSB1lXsNf4gDKDVbSvMnx1Kg1zQi/LBjWvvMGdCL0rocIZQoQzBOkcCVZ8I9INvbQxpjjp62Kl + TzN7Sh/kTrLUw8x4D4pSvLQ54TsLwxkT/jiTEcqY2YsOuWezcJWuaA+6ErzpTPKmPcmLtkR3WhPdJHWh + Pc6ZthiBcKEOQbegT3jIUJwrg7GO9EnedRks6ZQ86dRb0yMY0NswqMGW/ghr+k5v74q0olvyckTay/FM + TwalzLRHW9IQfhbNhtX0JdgxpqJgpK5PqMgWFQUjZWxCys9oiguDUl66Y23ojJL7RVnIM1nQal6nodNs + wUC8LVMpTpoJPBdryWLsGvam2XJOvgPnF9pzofBUFQV8VYkj10jbfl2pO9dI+39lgTNX5TtyVZ4T1+YK + cpy4LsdRll25Os+LS7Ol7kmZ3SXla1Gef9pso0UijyvDOtmemTRnptMdmEiSNjPRgmlJ51Ns2Sj33pJi + x640O/bK/sNZLhxMlz4+1Yndyc7slDqwPdmJzcLT503rmIk4i+mwM9gau5b9adYcy5L6nGvNKeHW15ba + cGuFPXdU23JHrQ2311hyS60ltwrubLbmvlYHHupw5JFuRx7rc+TxIWeeGvXg6VE/nhwM4ckBPc9PJvHc + +mxNxF3TncTxRhNL0n8N5/tLP+tBjeiJZikfg22ZrB+uZGmhkz27htl3aIZ9R9az9+h6DpzYwLHztrD/ + 8Dxbtg6xfqaN7q4SKipStWkzivNj6e+uYmq0lbH+ejoaC2kX4To32cHWjcNMT7TS3lZCa1sxQ2NNbNo+ + xv4jixw6ZwvHL9zBiQt3cuz8bRw5d0nDoRPKFBYhfHzzLzhwbKNg8T+w/+gC+xSObGDv4TkNyqjeI9gn + z3rg8AYNBwWHjyxwSO555OhGjh3dzKG9C2zbOEZ/RxWFmbEkGIIpy06iuTKfyrxUshKFa+SlMD3czrH9 + mzi4R663d44jhzdy/NhmTpyzxLnnbef8C7Zz4UU7ufDkHi45tY9LL9/LqSv3ccU1B7hScO31h7jxhsNc + cfl2zjtnPTu2trFhtpKd21s5fmSAc48Pc+hAN/v2trNvXzt79rSwe3c923dXCkrYsbOQnYId2wrYvrWQ + rUvlLC1Vs7ixismZMnoGcmluTSM314jJ6KlNN+PrpczfNXi7r8PX3QJ/LytCA5wwhkobEe5DTIRAH0Bs + RKBwxkBS9N6UpwbSXapjU2es9Ddp3LxPGcCp3Hcgirt2hXH3Lh337Qnn/t1h3L89iEe3BfHszlDeOmLm + 3WNmfnMggt/sC+Xt/aG8K/3JB4dC+d3hMP5wLIIPDobw9u4A3t4VzHv7IvjwwM8GcJQghg8ORPPmLiOv + bAvnxY2BvDDnw2vzXryz0YsPt/rw5+1+fCpc9JMdHny63VXDJ9tc+Xi7uwZtu2YIe/CJiv7d7a3N/fuZ + mv93p6cGzQBectWGf/55COi/7fPVDGA1D/C/5v5dNoC/OejPD0eD+Em419/P1WlQy2q4Z2X4fns8SINm + AB8P5OvjwYIwvj1h4K+HDbw958Hzg/Y82LSGO6rO5vEeN16akvdbb+bJSRP3Dxu4d9TMg9PK/E3hyU3p + PLWUxtNLKTwreH5LGs9slO1zcTw8Yea+IT339odzn+CBvnAeGjTw5EgMz04n8cxMEo9NxHH/WDT3CO6e + iueOmURulvSq8RguGjazuy2EDbU+jJe7M1TmzmC1HwP1gfQ3BNPTFEJ3Y6hAR1eD8JO6UNpqQ07Po6tM + 4GAay4NoLAuhoSxYILymRHiNgpQZZQY3FeloLdAJh9fRK5ynP10QH8hkguj+TCO7cqLZK/x+X1kc+2tS + ROMks7UhnvU1UQxXR9JbLfeulnvXLEfvtlfJM1SG/CcqhD9VRtBRFUFnjUFDd62R7jpZrpNtKgJY0C7X + aBE0qwhgQaOc11AuzyzPr6E09H81gMsKgyjNXzaA83N8yM0S7pHtSXbWv5Ap6+nCb1IyRJdrcBEO4PoL + klNcSZE+LkX6jpRUN830TRMeo6ZlSEmUYxKFVwvHyJR9+XL9EmmHywoDKC70p7DQl5KSAMolr6uqlBEs + PFK+RXVNkIaqmgCqq4OoqZXnF1TXhFBRGkBpgfBr4V35wslyYu3IEt1XKJy9PtlLeFsEU5UxLNYks6km + iaXqBLbXxLGjwsBmeddNub7skTy5tDOBG8dzuWW6kOvGsrmoI45zGo2caDKyvz6cbVIeNtUEMidlZqY+ + gEllArfrmO8zsjBkYkH491yPnqm2UKZaQ5jvDGdTr5HN/SrqN5ZdI3HsVBiL17BLGb/jieyS/mn3VDJ7 + plPYOZnIFinTC4Mm5voNzPZHCvSCCIGOuV4VcRwmkLLcF8JC37IBvHEggo2DgiE1D7Aainp5iOmto1Fs + GYti05iZRakDC0NGZlUksFx/tt+sYb0833pJZ+RZFZT5qxnAvdEapvqimeyNYrzHpGG4x8hwt4HBrkgG + OvUMdCgTWM9wZyQj7XpG2/RMtEg+NEYwI99vvWCmRnRJWQDjwqGV4Tss5UMZwMNqWTOAPRgRjEl5GBWM + SxmbkLKmIoGV+Tsh3Ghc+urRVHeGhRsPC5caTnYRTuXMaJKLBs0IluMUf5qQ88ZyhGtJOpArOifPmy7R + Ue2in9ry/GiRb94kZbxRynhdtiDLR/SKNzVybw2yvT5vedj3Zqkf/xuapM7U5/gKtxeNJmW5Up6rXPh7 + cbQDhWZbcoQDZuosSQ5ZS6z/KqJ9ztRMxmhfNWzzaqL9LIjxsyQuQBnBygR2lHUbzD5WGL3WYpI+y3za + ADbLsjKBDQoewu3d12AQ7WyW82ODrIkLtiYmSK6nYS3RwWuIC7UgQW9JqtSD9Fh70lXkb7Kj6AZHUgVx + cbYYhUP+HAFsMqr5f601Ezgm2oboqH8hyqxGb1yDXi86Qo7V684kIuxMIiNWEmtaS4Lw2eR4S9JTLMlR + UcAFdlSVO9Jc50JroxPNDfa0CFobnOhq8aa/M5j+Hh3dUleaavylzXEnxqgM4NUkCrdOinUgKV5FxTpo + kbEJWnSsA3HRdpr5qxnAwr9j5LkU1DSCMdpQ0Bai1+3IkO+QKW1Neoy0NSZb4kUbJURYkqgZwFYkhS+n + yZKmij5JVtM8yTcxeZ5BjM9KzbSvkDLWLe1CX3kIKgo4X7hqjn4tucL58wxWVKd40F4URleFkUZp+/Nk + PSbSWvSWfDs1AlOopKFKf1mI7pI0WNblulG6NcJBpEzIM8VFynPJc8cbreW5RY+JtkiLdyMpxpXwQGsC + hcd4u67DzdlSm8pC/T7oI1iems4ONw+H/2EAKzNWDc3s5u6kQS2r7T8bwJr5+3PEb5gyfQMJPG0AK/PX + N9hHSz39PU7PA2ypGcD/OTyvI25uTloksnYPTxf8fDwICvQlTK5jMIZp8wCboyO0qODw0EDhX97ogr2J + 0vvIu/pQkBJIdU4gDfm+dJb6MCFt6ubOEPZI/35Q2rbjXf5c2OnD5T3KAPbkxnZXrmt04Mpae05VO3Bx + uR3H8iw4WmDLuZWenFPrz9Z8Na3Pasp8V5DmsoJE1xXEup5JjNsZpPqcQUHwCrri1rBNdNBVnUE8PK7j + +akgXhrz4K1xN34z5sqbI668NiJcZcSbZ0f8RE8E8vBIMLf1+HNZvWiZ7LVsjDmT8ZAVjPitYDpoBYdE + /9xR58FT7e681uXJe/K8f5Dn/ahVDfnswDedjnwt6ZeN1nxca8Efa9fyUZ0lHzdY84mK5BV8VGfNH6os + +aBkDe8VruaD4rX8rsyC35fK8SUW/KlkLX8uOR0RXCnn1ioD2ImPmlz4Q6MzH9Q58mqxBc/lnc0TWWdw + f+oK7k4TyPIDhat4qGgNjxSv4elKC16Q818qW8fLsu3N4nW8Ldf/sMKaP9U68EmLcMoODz7q8eTPA178 + adiH98eDeWIwiCuafdiYaUmF5GO05wqCvc/AzXsVTj6WuHrb4eIhZURF//6bAezoaoudkzX2pyN//4cB + 7Gy3jP8ygNV5Ci5Sxl29pIz5OOKppmkMdBO4aEawf4iaC9idoHB3wsK90EUsR/4qAzg6NpiklAjyi+Jp + 7ypjYKSegeEGOkSndffWit5Y4NabT/L6q0/wx9+/ye9/9wYffviaht/+9jU++OBVgUpfl21vaOk7b7/M + Ky8/xXPPPczTT93P888/wquvPqOZw+8qE/m9V3n/NNTye+++chov8+47r/Lu26/8D/zmnVd4591Xefv9 + l2X5V7z5xrO8+fLTvPH8E7z2+AM8ftNVXHNwB5s76hjIS6IvPYrJgiTmyzLY017JyflRHjt1Hu8+eT9/ + fOM5/vD2r3jvrRfl2i/Lc7zOe/IO78i7vP3+K/z63V/JveRZ5Jk+eEfe8115t/ffFLzB2/IOr738BM88 + eQ+PPXgLTzx4K4/ddzO3XX8pl5yzj3MObNVw7sFtnHdwOxcd2skFB7ZxfPcmju3czAWHd3P1Rce5+apL + uP7yC7nm4nO5WnDtqQu4+rILROvtYe/OTWzdtJ7F+Qk2yXMvbZhg64ZJti9OsXPTFLs2q4hihUm2zQ4J + 92igszqHskwD2cn+5Kb5Cc/zo7I4lNoKPXWVemqFD1dJO10mfXWl8NnaSp30O3o6WqLobo2ip828PAx0 + i4E+4SQjatqHeuGEdeGsr9UzVxPJhhojGyqFv5VGMlcQwlyWLzsLAjlf9l3XFiP1P41fzWTyhmiNtydj + +HDCyCdTRv42G8VPCzH8fTGOb+aj+HzGwJ8mw/ndcDDvSLv1orRVz1Za81KdPa81u/COtA1/GPbno3F/ + /jTiwQd9Dvy6U+pg+yre7bXjD5M+fL5k5ss96XwoWujV+SQeH4/j7sE4bu2P56b+JK7vTebGnjSuaUrg + 3IIwDmX4cVx4+6XC929qN/HIWAqvLebw3mImH23M4G9bMvhxczo/iMb622QcnwgffF+46osd4ZoBfI/w + 2dvrg7mjSTSucLm7hb/d1RLBbY0h3N9p4oXJbN5cKOOl6WKeGMkX/ZXNLR0ZXFody0U1orGGq0UHj6PN + ARxu8iAs0o1gnZM2ZF9AsA0+/uvw8lklHdTZBEsnGGm0JzFRREGaN8kiCqI0A3idFgVsjrQiRjrsWKOt + NqddihCAokxf6ovCqZcPU5Ol5k30oTJVGcDq33de2lDQBTF25JstyRcCoAzg+iQn2tLcGFBDx4hY2yAf + cnOTkF0RWYMFXrSlCyFJtaUty05IoSMdBc7aMND/YQAL1HDQbUW2tBfb0VXmRHe5EBhJO0sd6Ci0oy1f + jlEGcJ6lXMOKnmJbhqtcmKz3ZH2TH+ubvZlp8mZ9iyfzrd5s6PBhU7c/2/oC2DkUoqWbO71ZkEZ3rMKS + IWn8h6WRHyk9m9GSVYyXrmFCGuzZOjsWmxzY2OLIUrsTe3s9OSgN8xFlAI/6cHzMV+DNOaPeHBvxFHhw + zrQX52/w55KtIZy3qGOsyp5m1XgnrCE/ajU5JkuyJO+ztIhfJ7JMrmSahDipyF/N+HUgTaUGJzK0eYBd + tOjfjAgXMvRupBo8SDR6CGlbNoB/jvxdjv61JkjN/6uM35/T0wawMn2V+asLc9DOCfBX8wOu06J/Q4PU + 8CmWQi7VUDNOxMeoeUc8yUjzJVO+d4aCCAH1D+Jk+cYqVQZwrHx/c5QygG2IMNoQqrPW/nzgI/f29LHW + 5iTQzF/ndTi7Smflpgxgazy9bTWj1+e0AewX4EigdCyBQUKalAHsbfNvBrCcq0URW0lqrRnAaghoXx81 + T4envE+AFuUbrSJ/o/TLUbf6UEEIJlnWInaFbKnoX385/t8NYG8177BmALtIPrkTHKjmAPZGRQH/d+Sv + 0RAsxPt05G+YP2EhvoQG+0q++Z82gJeXowwRQowN/2EAR5uCiTIGyjMGERO1bP4qIzjK5Et8tDKAg8lM + 04v4N2tz/laUJlBdkaShojhOM3+L8syUFMZQVRxPlewvLYrRooWXDWAnzQAO97cj/N8NYD8XYoI9SAiT + ciNlJz/6/6HsLcPjOLYtUCcxilkjjTTMTNJoxMzMzMyyZEtmkC0zM2PsgOM4yQkzM5NDDpidxOGc0Ml6 + u3okx8k99773fqyvunu6q6mq9tqzeu8KRHEUOQjx3mhO8cDMXB/MKw7EPOo7c/J5GEwLQJXxJuQSkUv2 + m4REzxtQrvDBUIoOO7szcfeaFjywqx+3b+nE5nkV6K9OQJo9FGEqTy7qTUdOl4YIOEsJrqc2bqVxJNrh + g4Rof6TFB6IwyR9tmb7Y0CjC08usuHQsHn8+nQO8nA08mYo/TkXi5/06/LBRim+WBuHKbG982e+BLwfc + cWXIHRdnT8eledNwdtFkfLroRnw2diPOb3XF5Zu9cfVBInsvBeM/H8qBMzrgYwvwXjTwXBx+PBmBz7Zb + 8MxcFfZX8bEwzRddSYFoTpaiOc2EhmQL6hJNqI4zoCqeSiYGEyqYAMyigGMM5JjokR+t5VI/s+hfJgCn + mpRIo7aWSW0iRyNCltwXqaGTkc6fhNzQSSgXTEIvkbYVhhtwJHIK7k/wwLOJnniJnLWXU93wfJ4Xnqzl + 4ZFWAR5uk+BfLXIcr5XgSJ2cCLgWhzps2NcZi62tsVhRHY5ZWSpU2PyQr/eic3ojlfpzioGPBGMIEomA + JZmdiDWEwq7kcfNAK4K8ICOnRcaVHlDwqb+TE6siu6Aj59gknAQrve9IKb1v1STkmCehI+NGrGjxwpEl + Qjy0R4aX71Th0+cs+Pq0HT9+ZsG/L+jwxzdq/PmDEvhZgf/8W4L//CIiCAgh+M9vPPzO0kP/EUAIxC+/ + BeOXfwvx2/cK/PGVEb+eM+Onj224+poNb96uwm3L6Z00BaCM3gsT4BIiQhEXHoBIiy85ajTmWOj+7BIk + RUiR5BBzInDiOJIjhBxSHFQSWOQvQ1qUEOnRTAAmp4eQFStGVpwQOfEiJxIYBLSdnMzoIKSQ45vI7Bm1 + 1dxEPorShCgYF4DzCWU5UlQVSIgYSdBVJcNsMuTzmnVkW5SYVSlAd2EAOplwmc9EYB46cxmcEcATAnBr + Rgi1fyGHCRG4JUOE9hwZeos06Cd7yaJ/O3M1aEpXoo4ctbo0JRozdagdF4CZ+DuB4hgJypJUqM02oSbH + 5BSAk4mk/VMATqd90hVUhxi1yaGoSeGhNsUH9cludE1unI1a0iTAKiJJY+3BWNkVjE0DZNdmi7F7hGzZ + PHJClqpwfJkKR0fFOLQ4GHvn+2LvXB/sX+BP60E4sUqKezfqcMcqGe0fiHUd07G09iYsrZuEseabMNZC + aJuK9b2u2D4cgINLBLhllRLHVihoWY6tQ0Isbw3CULE3urN90Z5JTmUGPbN0AScA1yQEg83/Wxrjj3Iu + /TO1l4S/C8Cl/xCA8+N5yIxmaZ/9kBY5IQCz+X9DkEVgqaCZ+JsSEcDN+8y+XE8IJ1tsp9IRhHjaNz4q + CAkx1CYJcbF8jjs57AE0jrO0aJ4wEH8yaN1g0LhCr3bhYFC5cJHARsV0wjSYVFO5zCoRJjdqy56IouOs + jHexqGAb2Xs6fyydP5bKCAvZVJ0b1IopUMqnQMWEZeoHFhsPYY5QRMZKEBn3dwHYZCEuQFxBp/OG3khj + P0uNZvShcZhF8/qQLfMdB22nMYOVWlp3isFsPZBsmh80GiYkBxMHCIXRFAITQUdcQ2cMhkrPg5KgpW16 + qwCWCNm4ACwgOxeCmAgBkqnPFaXIUZetQ1+ZHQuqYjFaHIWRBC1abfQO6XoqieuUkR0qDSNbRM+6IjII + FfScqwjV9PyrbP6otQagmfbptAejm9BjD0J3GNkOsyeambBLz6dF78mJvz3El3qI23YTWDRwM6FBT/zR + 6I462r81MhAd1B6aqV9X2txRrJ2CMuN0NETQ/rS9k/p6d1IouqlfdCbw0UHtpyUmAI0OX9TZvVFDvJah + wuqGCosrh2qrOxojvNBJtnSA+NDMcHeM2F0xFueNzTSGbUv3xY50b+zL8Max3ADcmh+Mk0VC3FEgxC3Z + wTiewcOt6TzclhaIE2n+OEk8+GRWEE7miHFrrhT7aLxZR9e92OqFYQvZaZsHBljK6ihvjMT7YzjOB4OR + 7phpn45hKhdGe2AZnXtFrDc5Jn7YlhSAndTHN9O+62P8sIquc3mEL5bSPS+kZzDX7IJh41TM0k/GMoc7 + 1sR7YGOSO7anuGNfuhuOZrniRL4nThV54u4yT074PVE8g8OpClfcW+OFB+t98XCTHx5t9cWj5FA93sXD + Uz0CPNWlwPP9Jrw1Px5vLsnAo0NxONHlwK4GM1aUazCrQIH2bAmayT/orAjHUGs6Fg6WYtXiFmxa04fN + W4axadsINm4fwZbd87H7wDJs3joPy5Z3Y2iwGnW1aSjIj0RGion4kB393ZWYO9yCod4atNTmoqEynZar + sHBuK2b2V6OhIQcNjTnoHajGkhX92LhjCbbtWY6dB1ZiF2HHvjFs37ucw9bdyzgwUXgCm3cuHccSJ3Yt + xaYdizls3L4IG7YtIMzH2nFxeOO2hdhM27fQvlsJ23aOYtt2cuCp3LmD6t+0CCuXDKK7pQxZSXbEWFUo + So9FXUkmijPjkRJlQklWAuYNtmLP1hXYtnkJthN271qOfXvI+d+7AnsPrMLBQ2tw+PAaHDm+Hkdu2YCj + t27A8RMbccuJTRxOnNyMO+/chJuPLseuHcMYG23C/JESrBprwo7N/di9fRBbNvRg49oObCCsXdmIlcur + 6DmXYNmyAowtz8UKwhi9w2ULM7B4QTYWzc/HyHAeenoz6ZkmorwsCsmJepiIW4pDXRASOAXBAVMg4rtC + FuoBFfFRs5oPu150DQ6THJEGBfk5SqSGKVCdYURvuQ1L2yOxa04i7lydigc2xOChdRbcv1KNB1dq8fhq + A55YrcMTYyo8Q37Vy8tVOL3RjDNbrPh4vQEfrFXhwzUKDp+uV+GLTRqc36Lnlj9aKXMKwHT8Z2uM+GKd + icCEYCs+XWvBu2M6vEm27ZX5Irw8wsdbIzycnsfDmUV8nF3Mx6WlIbi0jI/Ly4JwaZSHi0t5VAaPg35n + JfGXy2Mh+HKVEF+vcOLKilAnltHxxGXPkZ08vzAAX9G+P64Vjwu/MvywhqV9ZnCmgGbRv79tIZ60Q4P/ + 7NSOC8ATaZ+V+HGzjMPPW6X4eYsUP26VXycAm/DBcAheaPPEg2WTcSr/RjzdwsNrQ2q8MceKl0bC8Fi/ + EQ/2mfHoLAeenBeHF0aT8eIYYXkCXlmeiNeWJeOlxQl4dk4kHptpxUOdRtzfrsdDDK06PNZupj4ehmf6 + HXh6wIFHe8PxQI8N/+q14Z6BCJykbbf223GQ1nd0mjHG0vWWidBfSGNsEY2x5RK0V8nRVqVAS7USzTUq + AvGdKjUaKlSoL1ehroyJwHJUFylQWSi/lkqZE1Nz1dfAhODKLLVzios0NVpT1OiMUaHDKsJMixiL7Cos + d2ixkrj7GhYRnB2OsXwbFhaYMZhvQGe+Fo1Ubz2hlsYlFnnMypp8Kq9BiWr6vaZAg9pCDRqIozWUGtFU + ZuLQUKrn0EioK3ZG/1YXqjhUFtA15tO1MuGaga75/4sAnMKid8keJZNdSiGwMpHW48lWxSQEIZp4TWRc + INl/HiIYyB93RBFfJn4TQX65g8oosh8xETzuY7Vo4jPMX2fRfQlkZ1Nig5GRRNyXzpeRIkJaqgDpxHUz + M8WcEFxAz6CwSI78fCly82hbrgjZ2WJaliIvj64zW4q0ZOLk7P8AslFM6AmTT4VVeBMiRZORovFCiV1E + /pUeA5nkt9BzH86yYm6WCXNSlRgkLjUYTfaNOPaeBgdu70/DqeEcnJydjeN9ydjfQmNBYwQ211uxqtqA + pZVaLKjWYE6NGrPr1JjTwqJ/LZjPMu90Ub1tJsxq0GCIfpvbZMDCNjMWtbMPNJkAHMFhrM/BgRN/OQE4 + GisHY7BqiHwrWl7SZ+fqnN2qxyzi9UPNZKsIs5uJ3zcpMbtJjtmNcoxQObfVGQXMUj5z8wt3G7Go14TF + hNE+G4cl4wLwArrG+d1mzOmme2dRxl02jHRaMbuDzkWYRdfKMNRmcUYBt9g4zGy1YaDFir4WM/qamfhr + QleTER2NBrQ36MdhQBehu06Pnlo9+mv0GKpgAjD7k5VQrCIfX4qe1BCn8DsuAHdR++midtRDfLk7no8e + 4j29iSGcENxPbYxLB03r3MdwTPyNomOoTU2gm9pRzzj66Lf+mCD0syjhBBZlzEcbLbfQ8Q3UxuqShORP + C1CZKCL/JZT4uQAlcaEoIP7NkEttgYFlGMyn44oShShJIb8mVepEmuxvKE+VoSRJhAKqozCGEC1AvoOO + J46Yxf5T03ogbjy6lImLFsGNMIfcBLNgMmEqwQXm0Bnk81KblThFYJvIg7YzoXcGJ/hy4u8/YOUihF3J + X3aFReyOcLknFwVskVB9kumwyGYgTDkDERoPOAweiDZ7I5r8yViHU/iNJ78lNiaQ+qcPrGHu0JtmEE+f + DpORrsVC5yR+aTZR/UY3mFi0rZH8CP0M4uQ3Qa2+iRN/nbiJE4PtFhc4qJ4ouztiHK5UvztSkzyQm+mN + siJ/VJT6oqzYCxUl3qguD0BTjRAdzSr0dpqopLGqQoH8zBAunTQTgB1WT0TavDnxNyLMB/YwVjIh+H8T + gD2d4FJBu8LOxFQ6LibMj3wcH0QQT7ePC8CcCEx+jINF/46LwXE6L6cALHG+I6vgBkSTv1NA7amFxtxO + 8ocbM0VcFHA+8dZc4uJ55KOX09jYkqdFV4UN7WU2sgFK8vv9Ea6bQf7UFFiVk7kPayP0blTS9SqmwiKf + DAttt6qm0PuZjiiDC12jG5dxKcFObYb8uXg7D1Hkm+gkblAQl5Hw3SAM8oQoNICbIo4FizABmBfsg2Aq + /ykAs+hfFpXLxFkGJgCz3zQ6JflPaqipVDLRVymGUCaASC6AkMDSPrN1Bgn9xgRg3yAfLgqYCcBMnPMf + F4H9eb4ICKRlwjURmM4pCOFBTMexIBeTWcMJwQadCiq5GDJRMOR0/XriYeFGPtKiJdy0VxUZYk4AHqxU + YHGTGqvadZwAvKVJQmPvfxGAy3xwtMQfB4v9sSPbG1sy/bA1n4/NhUIsTPEl32wyCiWTEB8wCVH+k+Bg + 4E1CkmgSClST0Bvjio2lAtzVpcNzs4x4fUSDtwZFeH+Ajw/6eXi3JxBvdxNXIR/ihW4Rnu+V4pkBNZ7s + 1+LeVgmdOwBbUlyxyHQTRpQ3Yp5yEjZGTMNd1NafqvbHGw08fNQY/DcB+AfCt7U+XJTvRfJhzpW64mK5 + Fy5V+uBShR/BF+dKPPFZoRs+zJqODzOn4WMmyuZ54GyuB87nuuFCjgsu5bC5gafjQr4LLhR74kqlHy5X + B+JCVQC+qPDH6Tx3vJExDc8nT8KjcZPwYPwkPJA4CY+k34jHM6fiqSz6LW86XsmbgdezZ+CtzOk4nTUD + n2S74mw+i0D2xTe1wbjaJMCXLSG40h6KS11CfNanxAsdCtxaLcayJC9Ua2/gnqmMnm2g/w3w4U1HYLAX + gQnAngjkO8VfBn+eF3wCPODj7+UUgAP+LgCz7QwTQjBrYwy+gSw6mKWUpjZG7TxYQG1d6A+hNIhAbZog + lvO4dNBydTBUGj4nAmsNoZwAbI9UIy7JgtyCWDS2FHAicHlVBnLy41BUkoKlSwdx5x0H8O7bz+LChfdx + /vxpnD37vhPnWPkegW07jQvnP8D5cx9yguqbbzyPJ554AA/cfxJPPHYfXnvtWXz44ev44gvn/l988T7B + edzZsx+Mg237AF98Tr//A5/Rvp/TPp/ROT/9/F18/NEb+Pi9V/HhGy/i9AtP4vl7bseJLauxrKUKvVlx + 6E5m/7/GYE4uE4ALcGTBAF64ZT8+ffFxnH3nRXz67kt4n0X/vsUikl/Gu++/ivc+eA3vnH4N73/0Jj45 + 8y4+JZz77DTOfU739cWHHD478w5Ov/ciXnnpUTz75L/w4lP34YUn7sVDdx/Hsf1bsG/LKuzbvBJ7CPu2 + rMShrWuwn5Z3rl2K7asXcwLwkZ3k9+3fjiN7tuDILieO7tuGQ3u2Yt2KJVgyfxaGZ3aiv6sJ/Z31GKRy + sLORK2f3NmHeQBsWzerC6HAPFg+1o7+llHhwArJitIiPECIxijhprIj4InHWPD2KiTsXF+hQkKPiuCsT + gMsKtaguM6CRCcD1YWgjtBN/a68xcQIwmx6kp0yDQeIls0p0GJ4QgAuM9Ez1mJOpxLxkEVYTJ95PXPrO + Ohue7Y7Be7MS8NFQFD6dGYbzAyZcHTLh52ELfp8fhj8WhOPnOWZ8M9uAy4NaXOxX4Vy3HB+wD0KoX75D + /fPtSn98WMfD562hON8lwIVuPs53BuLzNg+caXXDF10BuDxLih+WWPHDyhicnR+Bd2ZauI/YHyQeeE+z + AXcTH7urxY5TLdG4rSoCuzM12MgEYOLs+4tUuKPWiCd6HHh7JBGfjCTg0rx4/LAwDr8tjMVvc6Lx8yw7 + rg6G4SzxwtcbdXiKfJ4HyuU4VSrHiRIZ7iB/5yThjhIlbimQ4O5KDZ7piMXrgxl4oTcNT7Qn476meNxR + E419hTbsK43E3b0leHnlACZpDNQJdYFQEhRqf8gV3pApvMj4zABfMAUhRHxkRIYMBjLoEeQ8EOlyOHhE + OryJYBCpIUPJ/siMtPkiOpycBDLg7A9Jls4jK1aAbCJZ+bGhyIsmwhbFJ9JFiA5GPjkcuWQ8s8O8kE3k + IT/MEyUOX1QRsW9iRDBLjsEiHeZRgxgq16MjR4z65ABUxXmhJtEH9WlOAbiepYHmBGAnajI8OUG4PptF + /PqhpYAIAaE5P5AMFh3DCcAsCpj2yfSkOjzRRPu2FwSgtzgIM0uJxJYGobeIhx4yDv1ktGZVBmFurQCL + moQYJWPCsISW59fy0Vfoge5cV3JQPTCzyA2Dhe4YyHflMLvUG3PJUMwlA8hE4MVkWJY18rCmLQQbaYDe + 2C3E5j4BtvUJCVT2CzgBeNvsEGwhR3wNrffke6E8djpyw6cg1TwVSSY3JJi8EG/2QbzJF4ks1bPRmfY5 + 1kygbbG0zATgOHpnCXom/AYgTk/OHC07jEEIN/CIJAZAr2Vz93lBJmci7zjGRd//IQBTu2BRP85IYXdO + AGalWuEBnZraAjltZgNL9xKM2EgREuMk5OTJCRIkxbN1cj7JeWQCcDRzNq8JwF4wEhHUTwjARIzFUi+I + RF7U9jyJqLghIGAGeDwXbjmYiJWACcBCH4jEPkRcmPgbAKWKz4Gth9LvgbS/v/90TgAODHQluBMmBGAf + CEL9ISVSxkRYNs+FkQgWm3fXRKVBK+eifhlYuma1SsxF/4rE7Eu9vwTgUGEgRMKAvwRgKROAQ6BRschi + Vq+Y6pJwMOqlVJ+UnrmUnpcEGqWInh2L+mXCrxhqubNkojOLQubEXyqdArCSE4FtViYAMyHYKQDbLBIi + 8XLERWmIvDsjWgqzo1CUG4XSgiiU5I8LwOlWZCSbkJliQkFWOCcAs/mB01OY0BwKszYABoUvdFJv6CX0 + LsW+BBYBHEiOOROA+YjVByM9nI8icujK4pmI4oaqWBfUx7ujOdEb7SmBaCXHsEAzDUn8SYj2nYQE/6mo + MoZidm44dg0W4e6NvXhk/xzcsa0fG+dUoac8FonWYJhlrjDIp9P9T4daSSDir7NQewr35tIaxUb7Uxvy + R16yP7oLg7G9S4WX1kXh65MZ+PPFYuAtwkt5+PPhJPx2Bw3qB3T4brMEX43x8OVCP3y1gEjcQm9cWkQE + bsk0nF06GZ8tvQGfrpiELzZPw/nDrrj8L3d886wvfj8tAs4onXMBv2MHnovBz6cicGG3DS8t1uFwHR+L + M3zQneSPRnI2G1N0nPjLUJtgpLHJQjBfE4HLEszksBpo7NMjl8hNtl2DtDA10mxapFjUSNHTulaBTLUU + mQoeEoInI5FIGhOBC0MmoY1I8SL1JOy0TMIJ+2Q8GjsVLya74PUcd7xVG4h3BmV4c74KbyxQ4+W5Wjw5 + W43HRox4aNiGU0MRON6fgF1tSVhRGYnuFCWyqZ8mSF2RoPJGsikYSVYh4iwCxJlFVIoQYxaQAyogxycI + aiJuCr4fpCHkxPCpv4T4cn/MyoQu5BhMh1I4BVrhJBjFk8ipnUTO8CSkGSehPHoSlxJ/eZs39i3i4a5t + Qrx6txFfvBSBr98Pxw+fmPDbRQP+ZHMCf0fP+QcN8DMTg2UEMf78hUUE8/D7b0wADsIvv/Px67+F+ONH + Bf64qsfvFwz49xkTvn3LjI/vM+PhbVpsHFKhuZCJsmKkRAs5IS7a4ocoSzAnACfZJUiJlCMlSoqkSAmS + r0FEECItSoxUQlq0iENGjHhcABZRKUQmERiWMiqHCcFUMtuWGRuCLLJl6ZGBSCXnMsXug0xqq3kJZN9S + QgihyEkm+0dlWbYYNWzeumIJ2kpF6GJRLRVizKwQoq+Yh45c33H4cyIwSwHdW8jGfyE6c0PQnsUgQGeO + hMOECHxNAC5Uo7/YgL4CA9qzVagnJ60mUYJqGoMbMyYEYNm48MtSQEtRGidDaYKCE3or0/UoS/3vAnBt + ugpVVF9lUiiqE/ioSQpENTkUtYmuaE5zR3e+DxaQfVzRLsVYG58TgTeQTds+JMW+eRocXqTDzUt1OL5M + i2PLFTg6KsL+hTzsnuuHPXMDCIE4ukSIO9dqcGKVEgcXkh0c9MOadncsqrmR7OZNWFw3BUsap2N9ny9n + H/cuEOPwqJzDwSXkeM4SYbQ5gGywFzqzvOn5BKCdparm0mWHoiqBh9JYf5TG+NHYRWWcP8oS/yEAJ7E0 + 838XgNMj/ZDqIHAicACBhzRHEL1vHr3vACTbmeBLNthO9tbmhxhqc7FWQlgAYogHxRBXio0K4hBF9o+l + Y7bRfmaW5l7PbKcLtEqC2vUadCpXGNXuMLA00Bymw6Z3QTjZfgfZygiy/yy9s1EznYskjgz3g4NDAMKt + vmRDyJYqp0GhmMZNraA1+cBgCYCFxu/wKBHs1KYdsRJERDsFYCYOG0003hNMFlo2EzdgIrDeD2qNLzRs + zl69E3riEHriE3paNhgDYTQG03IQtGRDmABsNIbAYhHCTGClySaCicYYjZEcPRYVbCJHj8YbExN/bWTv + yP7YrQLEOkRIpespo/bWUmDF7JpYLGtKx9rGDMwj+9EaJUGlJRCFdF05dD9p9OySDe7Ip75XHEPvNjoI + 5Y5AVIwLwK3hQehxCDDgID5nD0av1R8d9Fxate4cmPjba/TBbPptiHjtAL2vLnpvDUbijwzERyroWdfY + fVETSbzU4Y1Smwfy9NNQaHJBOfHWGuKqLdQnWpMFVArQSH2jgdpPXQz1D2ovVdRuKiJ8CN4opmOLLO4o + sXhwx1bbvdBg90YH1d8b7olZER4YjfPF+lR/bEmlNp7ig90pnjiaE4DbC0NwV4mUIMNtuaG4JTMYt2fw + cCIjECcz/HFXdiDuyePjX0VS3FOqwtEsCTbF8bDU5o05FjcMWd0xGOaCWXZ3zImmbVFedD5XDNunY2GU + B8ZivbE+0Y/OycO+dD6OZAtwiMod8QHYGOOLVcTLl5EtZuLvAqpvgZVgc8Uiqo9FDK+K98C6JHdsSnbF + zjQX7M+cgVvy3HFHsQdOVXjhznI33Fo8A8eLp+G2MhfcWeWBe2q9cV+jL+5v9sEDLT54sCMAj3Ty8Wi7 + GM8NGvH2kgS8vzqLbFk0Tg6E40CHGZubjVjWYMS8BhNGmsIxpz0eSwcKsGZBHTYtb8eODQPYtWMOtm0f + xtadw9i5bwF27VuITZuHMTrajp6uQpQWxyA324bMVCNys+yY2VuJBXPaMDxQh/aGPDRVZ6C3vRizBqrR + 01mKhrpsTgDuH6zB6KpBbNs7ht0HVmHvoTUcdh9cdQ07968YBznY49ixb8XfsX+MyuUcthO27VmKrbuX + YMsuJ7bvWUbXvRx7D6/GfsKeA6uxa88K7Nq9HHt207FblmDN6BD6WsvJttgRF65GSVYc6kszqYxHZlwY + KvNSsXi4E/t3rMKenSuwl3DowBocObQWBw+vxaEj63D81s247fbNuPXkVg633bkVt59i5RYOJ2n91Kkt + OH7zGNUxByuXtWDB3AqsGWvHrs2zsWf7XOzcNBvbNgxhy9qZWEvbVyypx/IllRgbLcfqsRKsXlaE5Uz8 + HUnFvKFUjMxMR293KprIGS0vtSMv20w+AXFvbSAkITMQ5Hcjgv1vgkrMhN9g2I1CstU6ss96xIepaGxV + UKlBgpX4rt2A4iQbOkpjMNwQg7HuWLInyZwA/OCGGDy60YaH1ujwyEo9nlxtxDNrTXhmhRbPLJbhRcJ7 + aww4s8mKTzeY8MEaNU6vVBBYqmcVPtuowRcbdTizjgnAcnw4JsdHK9T4ZKUOn63S47PVBnxO9X1C9b43 + psGbS2R4eV4IXh7h4a2RALxHNu3jBTx8tjAQ55YG48JSPi4uC8GF0WCcXxqEC0toG+H8kiACLXMCsMAp + AK8S4xvCV7T85UqhMxp4eQguLSYuO8rH92vE+JETf5ngK8E3YyHcHMLfrRZxAvBvW5T4Y5sz+vcvAZiw + S4vfdmrw02YZftgkxY+bqZ4tkr8JwD9uttL1KfFWPw9P1Lrg3pLJeLolAK8Rt3p7gQ1vLLTjyVkmPDRg + wmOz7XhmYTxeXpmOV9Zk4MUVKXiZ8OpYOl5amoJn58XisVkReKQvHA/3huFRhm4bnuiiOrodeKI3Eo/1 + ReLhHgfu743APX123DngwC19EThM++7utmAzi8KsU2G4TIzeEuJCVLZXytBazaJ/5WgmNNaoODRVKccF + YCXqyuSoLZWjpkSB6hI5qouVqCpSoKrAGVVbnq9GWa4S5TlqVGarUZOpRlOaEu1JKvREKdBLPHgO+Vhj + NjXWRRC3jDJiS7IVGzLCsCLbigXZRgzl6tDFPrTLU6Aujwm9MlQRaguUxPOcgnBNAV0DO2c+E4fpPIUa + 1I0LwA1M/CXUs2VCfakBdcU61BQT56L9Khk4AViD8jwmAjPRWsOl0SvOUaEoW4nCTMX/EIAzUsnvThIh + JYWQzCBEcpIQiVQmkI2KTeQjmvhpNNmpKPLlImKCxgXgQDiIr4QTj7FH+DvTyBKn4EDbIh3O+T3jif8k + EZdJjQtBOvk/3LnI/qWmMAiRkSFGTjYTeuVOsZe4akaGEKmpQqSnsfmF2TRi5GsQF4okrmIlvmOQTIWW + fwM0/uRLEOyhM5CqDkRpuBwt5Dv10LPvTzaiP0GF7kgB2szeZKu9MTchBDvr7DjWm4I7RrJx59w8rjzU + HY9dLQ5sJRuxsTkMa1psWNlixbJ2G5Z22LCo04bFveFY0m/Hkl47FnbZMK/ViJFmPRa0mrGY9mH4fxWA + Z8YQorGMti+kts2iimc2ajDQoKZSSaUSQ41yDDbIMdQgxVC9EyPNCsxtY/P+6jjxd0mPiROAl/RRe++z + cgLw0gkBmJbn91oxr9eCOT10jp5wjHQTP6Jrnt1pwawOK4a4lM8WLuXzTCb+EgY4WNDTYkZPk1MA7vgf + ArAeHXXUjmudAnBfjR6zKnSYXa7FSCmhmO4jV4ae1FBO9GVZUNqJN3fEBqAjLhCd8YTYIHQRX+7lBFyn + AMwypgzSuxmg9tXLIn+p7XRRm/oLAeghzszQS5ytl9pUD/lRPTEh6IjhozU2FI2EungBquIEqKDlUvK3 + itj/h1EhyIskv4p4a1YEH5kRwQQqHXxkR4YgJzoUuTEC5MeJnIiX/A1FCVIUkC+XFy2gegQoIP8vP0KA + 3PBQZBL3TVB7IkbpDod8QgCeAiP/JhhDJhOmEqbT+jSYQqfDJJgOq9CNE3dNocTHg8cF4OtEYJYO2iby + 4qKE2X5M/LWIPRAm84BNSseJZsBIvjQTgJn4G23yJX/VF5HUxicE1egoX8TGUP+j5++I8ifO7k08nfwD + 4qEGPROBXa4JvgbyEww6Vk6HVjMVatWNUCtvpOUbodfRfRimwmZxQSTxzyjipVF2T/IbXGnZhXyVaUiO + d0F2hjvZZjcUEocrKWAicADqq6jfUZue2WtDD43LdZU07mQEIdwyDWEmJgC7IYK4rd3mRT4I3a/Vk0pv + TgRm8+VyU9zoXWE1MvGXfp/A+FzAYQY32M0e41m7qA7an4mwDuL4TAC2q2cgjPygSPJnmAAcq/NCJPlJ + YSI6v2gKIiRTEE/7FFOba6Uxt6tYg2Yae2pSQ1CVTL5dAo0n5ANWp9J9FFEfrQ2jvhmJtnIjCpNC6Lmz + +m9AOCGe7oN90J0U7oUI9VRYJDfARDBLb4BDRecxu3H+YC7x/bxEATKi+UhkGQ8NAbSPJwxSH5gUQTCq + hNApRZCP/3fIRN9gvh/4If7cMtt2vQDMBNkJcZaLzhWHQssEYL0KKrUcMoUYImko+MIgBPL94c+iekMC + wBcFQ0DnEMtFnADsF+wLDybU/UMAZkKdj68H/Py8rp2HF+iLIAKf/R8qD6VzKaA3KKHXKKCUiyEW8iAW + sHmNA2Ehnsb+LylKlaIqS4qmfDFmke1d0qLlBOANNKZtaZFhT7PYKQA3heBEbSAnAB8v98GxskAcLg3E + nnzycchn2ZTLx4YCIRal+KErbCoqlJOQEjgJ8X6TkMCbhFThJBQqb0Cd6UbMS/bA3joZHhw04YURM96c + q8N7w8TZZoZcE4Df7AzAK918PNcZgud7xHhpUI2XZxvwdJ8aD7ZIcHtZEHZRPZsiXbAubAp2RE/DqXxv + PF7hh9frWaQfH+frg3GpNgDf1PnimxpvXK1mYq8Hzpd64otyT5yv8MWFSj9cqAgg+OPzEm98ku+O01ku + eD9zOj7M8cCZPC98nuuJc7keuJDjhkvZLAp4Os7nTMMXBa64RM/icnUArtCzuVQdiLPl/vgwzw2vp92E + Z5Im4THCw0wATp2EJzMm49ns6XiRjn2V6ngzcxreTafzZMzAZ9muuJDvgSulvviuJhjfNgjwNd3DldZQ + fNkhxLk+JV7v1ODuGhk2pAagzUhtl56r0msSeAQfnynUNjzGBWAWtUvt4joB2I/nCZ9AJgB7UXm9AOzO + RQczXIsEZuLvPwVgQvB4WxeKAzkIxLQsCaS2Fgy5MhgKVRDUWj7UOvahuAD2KA3iyd5n50WjrDIVpWUp + SM9yIDbBhNz8eCxfPoz77j2ODz94GRcvnsaFCx/g/IUPOVzg8AHhYw6XLn6CK5c+xeefncbrrz6HO07c + jL17tuLkiWN45eWn8cXn7+Py5U+pnjM4d/4jDhcvncHlLz934spnuHSZ4dP/iov0+/nLdOyFj/A51fX5 + x2/j0/dewyevPo9XHrgLd+3cgJUdtWRDE9CfFoFZWdGYkxOHlfUFOLpoEK/deQRfvPIUPn7tabz69AN4 + 9IGTeOi+k3R/J/DAQ3fh8acexNPPP463338dnzPB99xHuHz+E1y+cAZXLn7K4TLd56cfv4k3Xn0Kzz11 + PycAv0TlY/ffjjtu3o1DO9Zi/7aV2LNpOXZtGMWudaPYsYZ8zRULsXlsPjavWIRtq5dix9pl2E7Yt2Ud + DmzdgAM7NmLP1nVYsXgu5g/1YqCzCZ1N1ehqrkJPM5UNFeioL6flSgx11GFObzMWzWzHwpmt6GsqJh80 + FmlRKsTahIi1C51CcIwIOZka5OXokZ+jQS7x7hzirQXZcpQSz60s0ZNdsaCx1jYuAIdxcwC3VRrQUaZF + d4kGg7TPEPHk2cSjR4oMmFOgx5xcLeZlKbE4TYL1WTIaY3S4t85KY0EUPhqMw2czHTg7YMHFfgO+HTLi + 59lG/D6ficBW/DRiwDeztPhyiDCowZUBNc53SfFpsxAf1gXjvapAfFhLvhz1q7PtobjQxcelLh6BxoBu + P1zqI/9rNvlQC8z4Yakdl+ba8AmNUW/26PB8lw5PdhrxaGcYHuq04/62aJyssWM/+Q6bk6TYQlx9L/kP + t1WyD2PD8OZgDD4cjMb5oSh8OxKJX+Y48OtwJCcAf0u4ODMCb7Xo8QwnACtwslCK43kiHMkR4ShDNi1n + 0bhbKMf9VVY82RyDx1vj8FBTLO6ui8atFRE09pqxr8yBf/WX4tXVg5jERF+Zyo+DXOkPhdKHE4HFEleE + knENFU2lTuoOsykADkcIoohgRUTwiET4wmTwhNlABt3shejwAMQRkUskIhdPBC8+3B+xFm8kWv2Qbg9E + Jv2eS0YyjwhfASGfSGE+kcF8Ijj54T4oCPNGscMHldGBqCci2ZohQzc5QUNVZvQSIeWMeVIAymI9UZng + hVoyGtcE4HQv1EyAE4O90ZjLIn+Z+MvjwAnAOUwA9qFjvLmykaWHprIpxwcteX7oyA/gUnB2koHqyPFF + W7YnlZ7oK/LFrHIe5tTwsYgG2cWNZLQaQjGvmoeBIk/0F3oSafbHnEp/zCUMlXhhZqE7NVQvcl59OIyU + e1OjdSdi7Ymldf7kkIRgTXsINnAisAjb+sXYPpMwJMKmQT7W9gVitJ2HXjp3eawLcsImI8U8FYlE9OKM + RFJN3ogxeHMib6zel7Yx4ZfIIpUMsSZ6/vRbvJ7eBSFGT04elVYiKSYWyaNjKR/ZPM9eNBj/JQBfL/pe + v8xFCis8ISPSKhG7QCpxg0rpzUURW4yBsLF5N4lAs0iepFgZOYZKZKerkZWqQEqCmEuBGcsJwIHXBGA7 + vXcrkUMjtRMmACvV7ty1SKUswtibCBJL10wGignAgS4cgoPdIAj1glBIv4t8IJMFQKUKpvshskWQy3nc + b8HB7txx/v4uVLrSsW4EdwQHeY0LwH6ccCuXhEAlE1wTYA0aOXQqKbRcpK4UGrUECval3bj4y4wZw4QQ + PCEAs6/kFFI+VHI+NMoQ6NQCDnpOCHbCoBVTKaHtYmhVImiVknEB2LmsU0noebI5f5VcJLKVMBEB7BSB + /y4As+VIcpLjo7VIJ6OZkxGBopwoFOdGoySPlWy+33Bkp1qQkWRAWoIOuek2TgDOz7ZzgnAkDdA2fRDM + 1P8NciKuUurXLO0eGWmzjAg+3U+UNhTxplCk0SCeHydEIRNHojypTU5Hro1Id4QXqmJ5qIkJRbbWCzHk + LDkCbkKiwA01EXIMF8dgx3A57tzch4cPzseJbYNYP1yF9uIoItNElKUu0P8XAdgU7o1w5qREUzuO80N2 + sh/6K0TYO2TAa9uT8d29hfjz9UrgdDXwTgXwQg7+fCwRv90Vjp+O6vDtDgmurAnGlysD8dUqP1xZ5YVL + q91wfvV0XFgzFefW34TzO6bj4s0uuHKvG64+44nf3ucDZ8ZTQb9pBp5z4N930cC+14rXRnU40hCEpZle + 6E2m8YOc3IYk7TUBuI4TfwkJrLRy8wJX0HJJHDkZUfTs7Spk2dXXCcBaJBt1SDWokKFVIIPaTXzINCTy + JyFDPAkl0knoVE3CYsMk7AibhFsck/BQwo14Oc8Vp+v88OlMEc6t0OGz9QZ8ulGPTzYYcXqdGac3ReHN + tbF4YnEcTs1Owb7OdIxVxqI1QY0kmSfsghmIor6baBMg3i5FbJgE0TYpIi1i2E1CcsYEMCj4kBP5lwt4 + kJKDIhUQmDNAfU5MDqxU7EZjwwwoJTdBS46RXjIJVtkkup9JyLbRtUdNQmvWFCxodMG2eX741y45Xrnb + hDPPWXDlLRN+OmPCb+cM+M9lesZXjcD3BuAHeuY/yIGfheMicCB++z0Iv/7Ox++/CPDnvxX48zsN/ris + xa+fa/D9Owacf8KO5484sHdxGHqr1MhPkSKViEZCWCAnxkVbghFjDeWif1OinAIwE35ZyZBKDg1DerRk + HGz5LwGYITVKiIxYJ7JjxVxK6Exq6xnsIyeyd1nRPGSwjBbknGfFBCInjodscjhz4nnISghCbhIfxRmh + qMoVoL5AhKZCAZpyg9BOtqa3hH8t+vd6AXigRIihchkGS+VkA0ToyhUSxOjJl6M7T8bNbduSFormdCHa + siTozleSndLTb1q0EBmqp+dQzQTgJDka0rScAFyeoOCifpkAzOYCLouXo4SBxmom+paNi79lKWoO1wTg + NBXKk8QojQtCJfX9moQAVCV6UumKplQPdJH9nFMeguXNUqxoF2JFG9m1HhG2DypwcKEJNy+x4OalJhxb + psexMQ2OLpPhwKIQ7JnPw+45POycHYAD8wW4faUGd6zS074K7JsnwsbeACyonoL5ldSOaqZjcYMb2UYB + to9I6Vg2T74C+xdJcXCpEjvmyrCsNZBsrw+66Xo6MgMIIZwA3Jgcgqp4Fv3r9zcBuDwxkBN+neJvMD0H + p/DLwMa4vNhApDl8qe34IpnA5ndmgm8ScZnEMH8k2PzI8SfeQ1yHib9RjAeZfRBlIdB6ZBhLh8b+TGXz + 4QcgzO4Hs9UXBpMXdMSbtBpXssEuZFtnkC11JTvG1t1ouwf0nADM5p5icwO7ctNr2EzuCOe+mndmX9Fp + ZsDCooHpfE74wkr1G40+nPCrpONUWg9oaF1v8YcxjA+bQ0AgDhclQlgk9XU7H9awIJisAZwQbA0LgckS + BL2RCb5+5JxNCMABHPSGwGvg5u+10ljBRGBDEDTaQBjJTpgtIg5WqxhWu4wTelnkr9pItpFKtqyz0HFm + AUzmENhpHIp1iJFK/a8kVU19w4KZ5VFYVJeMscYMzMoLR12kGMUW6lPEcVKN3ohWz0CkZjrSHX7IieGR + PaL3RryylPhmzbgA3Ev3OchE4LBg9JmpX2k80UbPtIOebY+eOJrZD/OiBJgTLcBgRBC66F3WGj1QSSg3 + eXBibUmYJ4rGUWDzQBbxrxyLOy17ozQykItQqUshJItozKc+Hs9HZSy1KbqmipgglNPYUEZjQwHZsjyb + FwrpuBJqS2V24rphXtyc7512b8yM9MYiapNrkgOxiezc5kQf7KA+djgrALcVhOBUsRR3FcuvCcC3ZvBw + O4v8zfTH3XmBuLcoBA+UyfBApQa35EmwhcafZeGeznTNZjfMsk3HLOsMzGEiMGHE7oIFDhdO/N2Y5I9d + qTxO+L0tT4y7ixW4nRyK/Uk8bOEEYB+M0r3PN83AArMrFtncsdThhZVkk1cm+mIswQOrk9ywLnkGtqZN + w+7M6Tia547bSjxwstILJyrdcbxsBm4unY5jZS64vcINJ6rdcarOC3c3eONfzb64t80f97bycD/x4icH + NHh9aQzeXZOOJ+ZH4q7ZYTjWb8Xefhs299uxZpCl30zA2KwMrF9Yjh1jrdi5qgt7Ng9g385hbs7abTuG + sHv/PGzdPhvr1/dj8aJGtDSmITfLjMw0li1Fj+wMG7o7ijEyVIfBnko012airiIFbQ3Z6GotpP1zUVfD + olVzMED7jK2djd0H12D/EXKSj67nwJYnsPfw2v+BPYfWcLi27chq7D3qxD5WHl5Fv6+keldw2EPr+29e + i8O3bsTNt2/G4WMbsf8Q1cMid3ePYdumxVi1dCZ6W0qQkxSOxAgdKvKT0FKdh6qCFBSlxaChJBujc3tx + cNdqHNizGgf3rsHNRzbgONV18/GNOH7LJtxx5w7cdc8unLp3N4e77t2FO/+1A3fcvY3DybucAvAtx9h5 + 52LV8lYsmluD9St6sWfLfOzfvgR7Ny+iZ74IO9bNw/qxPqxa3EZoxNrlDdi0uh6bV1Zh9dI8jM7JxMKh + DIwMpKOvOw0tTQmoKo9EYR6bhkSDqHAxTJpAKEUeUIm9EEncNjXGgMwEM4oyo1GcHoOchDCyuRayrzak + R1qQE0tjQk4cBuvSsKg9BWv6ErB3fjLuWpuORzfH4+mtDjyxwYTHV+rwBHGkZ1bq8fSoGk/Pl+D5BVK8 + t9KAT9ZZcYb40gcrtXhnmQLvLpfjo5UqfLJWg0/WqPHRagU+WC7D+0slOD0qJyjx0Sj9TjbszGo9Pl6l + w+kxNd5cIsar8/l4dU4g3prrj9PzmQAciE8XBuDs0mCcWxqCC2NCnF0mwLnREJxbwufwxeJgfLGEfmdR + vitE+HKNGFcJ33CQ4OvVtL5KhK9XCvH18lB8u4pF+Cq4yF+W7vn7NSJ8tSyIm2P4m5UCTgD+fasKf2xT + c8Lv9WACMMOEAPzDpr8EYG4e4K0G/LzVhu82WPD5QgVe6fTHY7UueKY1AG/MVuH9JTa8OxqBF+bZ8Nhs + M56YE4HnlibilbXZeHVDHl5YlYEXV6bjpRWZeH5ZOp6an8B9vPHoUAweG4rF4wwzo/FkP/HSvjg82heD + RwgP9cfg/pkxuIdwkn4/NhCFA7127OiyYUO7GYtqlRgsE6OrVIDOCglaq2RoqpJfwz8F4AZOAFZcAxOE + 68vUqC1VcdG1NcUqVBWpUU58qSJPTZyMfstWE09QoitRhf4oBYaIBy+2KrAuTIftdgN2R1mwl/rajjQ7 + 1mbbsDjbjOEcA3rz9GgrVKOxkKV9VqC2iM7F0kCXUJ0MdK7aYg2dj51bhxr2B1epga7HeA214yUThmvZ + PkXjAnCRBhVUd0UeldehjPhdSY4GxdkqFBHP+7sALCGfW46sNBkyaD0tjfgtbUtJFiM5hXxwKhOShYhN + CkUM2aro+BBEkq2KjGYfpwVxHMVu9+dEYDaXKBOf2ByXbB7PSLKtsZFBSCQfnhOAY8kfTGDppp0C8ARS + mQidLkFWthQ5OXJkZrJrECIpUTAOEeJiBVQ3j/wMH/I5XaARTIUy8AYovSdB5clE4GmIEvggUyNAtV2L + jngruhON6IxWoNUajHqtJ9pN3phD17+tOgwHOxNwnGzBHXPzcPtIDvZ3xWJrczg2NZK9aLNjY6cDG7od + WNsTiVV9kRjtjcBofwSWzXRg2UAklvRFYEl3GBZ2WrGk04bRbjuH5T32/1MAHuuPxigdu7DDxs0pPNSg + Q3+9mqDixN/+egUn/joFYOLydRIOw1wU8P8UgBf3mbG0x4zFPVYsYgJwrwXzqZzfZ8PcXivm9IYR7Bim + ax3uZgKwDbPo3Gy+34k5f5no64QV/c1m9LDo30bj36J/2+q118AE4I5aLbprtOir1mFWpR7DlTrMLSOU + aDFUoEB/hgi95MOw6N+WWD+0cvDn0Eb+Tgehl3gPi+Bl6Ke2xc39G0vbqG2xSN8J4ZehOyIQPcSjGXoj + ePQ7D93Utjqj+OiI5qM1RoAGQi2hknyvcuJoJZECFDr45EOHICucfC/isunXIY2V4SFIIz7LkB4RyiHD + QX7bdcghXy+bOGEW/cbqyQ2nbWHkz5GPmGYMQrzKBzEKLzikbggXE78WMqF3Kkzkl5uY+Eulkc+E4Gkw + sJI/A2aBK62Pp3jmE2f/XwRgFinMxF8Gq8QdZpEbDCKqTzQdNoUrotn/deGB5E8EItLqDYfVKaayj+Aj + I/3giPJDRKRz6jSnAOzKCb1GgwsHtmzQMQHYuV2nnUa+xGRo1ZOJu08mv2AqbDZX6sveiKd3FhcdgEg7 + E2pdiYNPJ9/iJkQ7ppBNJl6dMhU5mS4oyPVAKfmn1eV8NNVJMbPHht4OJgBT/06nccI2DeFm9iHqDIQR + N7aZyUexsuheD0SE0T0w/4d8ISb8skyRLFgo3OLN/WfMYVwAtrG5galkH7faDbSP0Q2RdEwk7ROlpzqJ + 79uU065FAcfQGODgorTJD5C7IoH8nDQaE8pojGECcAeN8Y3ZItRnUlvKIn6eFYrazFBuWyfZgqEGK+a2 + R6K3yoiK9FAkWukeVJMQpbsRWVE+KErmI584dLxpGsKkk2Aez3QWq5uKDPZBJ411NblKVLExOF6IFPI3 + 4sgncqj9qY5QxFuV9B4NsBmVUMoFkEr4EIqC/vr/UBgIFnU7IQCziN/A8QhdVl4TgLVKaDQKKBQS2j8U + IUz8DfaHl68HPLxd4eXvyYnAoVI+Fw08IQB70vZ/CsBcNKePO3x9Pf8SgAOoJLC01CJJMBcFrNHKqN04 + BWARnU8iDIBKFgCzhn3oTH2GxvxKGteb82k8q1ZgYZMaK1q12NCmwdZWBfY2S3G4RYjjDeSnVAfgVk4A + 9sOxcqcAvLcgAFtzeNiYG4INhSKMZgZhKNodTcbJXOa7LP4k5NOzLtfciGbrFAxET8eqXDq+VYlHBk14 + brYBb45ocHpEiQ8HQ3C6L5ATgF9r98ML7YF4siUAz3SGOjOXDOvw8qAWz/eq8UQLS5vKx+35ATiS7oWj + qW64+5oAzCKAWQpoPi7WBuDLGl98WenJpXk+X+6Fs2U++Kzch4vYPVtJqAjEF+UBOFPiiw/yPfFeljve + of7yfo4XPsr1xZlcL3ye7YFz2W44nzmNwxcZk/FpLi2XeOJytT++quPh69ogfF3Hx9lSqifPBa9mTsbz + 6TfiyZRJeJzwNB3zQtZ0vJI9Da+TX/V2+jScTp+OTzJm4GyWGy7Tub+ma/iuOhjf1obg6/ogfNkUgqsd + QlzuI97WY8QjZJN2Z/IxQP08I2QSDD6TICA76+81mcuMycRaJv5OgBOBg1i78YIftR8u0ne8ZAKwl68r + vP2ZCOz+VyQw/c7tw6KGCex4Vu/Exw4C0V9gQrBUxodMEQy5KghKLgrYKQCHO1Sc2JuSHoaMLAchElGx + ekREaVBYkoyNG5fgySfv4VI+X778EeGTv+HKlU9x5fJnHL688jm+/uoczp39GK++/Cwn/i5ftgAH9u3A + iy88iYsXzuDqNxc4sffchY85XKZjvrp67hq+/Prs/4orV8/i0ldfcKLx2bMf4uyZ9/DF6Tfx6Rsv4rWH + /4V7dm/C6s46DOUlYiA9ArMyIzGSE4sVdfk4ungQb/3rOC6+9Rzeff5R3HfbYezevpb8u1XYuGEMW7at + xYHDe3DP/XfirXdfw6XLn9P9fIGrX569hm++Ootvv/4C5z5/H++8+RxefOohvPDkfXjp6fvx5EMncdet + +3F4F/mm21Zg14al2LJ6ATYtn4cNo3OwbskcrF08jDWLR7B6EZsTeATrR+dh53ryRTeuJr9uLXZuWIXR + ebMw0t+BnpY6tNVVoKuR0FCBtpoSNFcWorOuBDNbazDc1YD5vS1Y2N+CvoZilGXHIClCiSizkGyZgHw8 + 4ptku1MTFchIUZEPrqRSgUzipDnpUhRmK1FSQFy5lDhxpQnNNVa019k4Abi9yoSuCj26S7VOAbhIh9nF + xFMKdRgp0GIO8fgF2QosozFpU5YMx0o1eLjOjDe7HPh0IBrn+sNxsc+IK71afDOgw49DWvw6x4Df5urx + /TBtG1LiKxorGL6eSeWAEpe65fiMxrCP60LwCY0JX7A00G0ssj4El7vJ5+qjftbPx9f9QnwzS44f5xrw + w3wzvplrxsVZRpwZ1OO9mQa83m+hsScMT3SH4+G2CNxZQ3w1zykAb0wUUr+U4lixEg81GPEqcc53ye/5 + tNuCK3TcDzMt+HkwHD8OhtE5InBx0I532ox4tlaFB8i3uYPG35uzhThA9usg4UBaKA5ReSRLgtvpmdxV + asK91eG4uyoct5fZcLjYgp05euwttePegVK8tmYQk8QyL0xALveFUuWEXOEJicyN4EKd05uIQxCio8WI + jhFyAnC4zR9moxfMejL2ZKQ5AZiIXDwRuRg2MT5LYWL0RBwZ5USTD1ItPsiw+CErzA95dib+BnICcCE5 + G0XkbBSG+6A4wo/704z9qdaUIeOcq65yNs8OOVIZApTF+6KYDEV5vCeqk31RTwSkLs0HNWm0Pg4m/tZn + +/5N/L1eAG7MYmmgrxOBaZ0JwAzNZGRaWdQw1dGc4YWmdHc0p7uiI8cDvYU+GKIBf15NCBf5yzBSGYCZ + xV7UKH24dNCLG0KxpCEEc6sCuOhfJgCzkmGwyAP9+a7oz3XhROBFNYFY0RKC9Z0ibOqVYvuAHNsHZdg6 + JMPGQSHW9AVjtJ3PRSGXx7lwEcBMAI4nYhdj8ECUgYgRIVpHz5kQY3QiipwqhhijL4dYQwCHKH0AwnV+ + nGCrUXtBqfaEQuXBvecJAVhGpHdC9FXIvf8mAE+kiJZKXIkUzODWWTpIq4nagpXPRf5GEQGPixQjJV6J + zBQ1OaMackYV5CRKOAE4jpwBNg/wRApo5mTaqK2Ybb7Q0b0wAZhdD/sAgbVFiZQJtV5c9C8TcxmCglwR + EuJ5TQBWKHh0HQKYTBIOajURIdrO9mHH/V0AdrsmAAsF/k7xdlzgkotDoCCCpVNKncKsWgo1N0+viO45 + hIv4nSBvHIEbF4CZ+CshsPTPTABWyohEKfjQqoi8EXRq4d/ACb/XYUIAZqKzXi3joo+ZCMyloGZCMBFI + i1FGz5mlgVaApYH+aw7gvwTgtCQLPW87CrIiaDCNJLAyAnkZNmSlmJGeqEdyLL0PWmYCcGFOBLJSzYix + S2A3hcCqDYRZ6QurnN6pPJAQ5Jz/VxnKzbWWaBUind5tbpyES7eUGemLVKsbl5I80+aF/EgeSshZy7bQ + O6Z2FBk6A4kyb1RFqzC7PB7b51Xh5NY+PHBwHm7dMhOrh8rRXBBB4wMPBhpjdIoZnADMUkBfLwCHkbPi + iKK2HeODzCRf9FUJsWc2DZY7U/Dt/Sz6tx440wR83AC8Ww68moM/n07Ab/fRwHmrFld2i/Hl9lBc3cHH + 1Z08fLXLD1/t9sY3e7xwda87rh5yx9cnPHD1QTd886w7fn2PR3WJgA/kwBs64Llw/HJ3GC7vM+O1ZWoc + bgjEaJYH+lK80ZjIR32ihhN/65PMtGzlBODqeCtqk8I4VCZYrwnAOeHUJ8JUyLCp6dlpOAE4xaxHqkmN + dD31E2UwEqhvJYtuQI7qRlTrJ2Eo7AasjroBB5Om4FTaFDyePw1vNfng7DARvJUqfL3LjMv7Lbh80Iwr + h8hwHLLjy6MJ+GJvMl5dm4K7h1OxpyMNS0pj0RinRbzMBzahG+zk6MaGCWjMVpJhVsIRJiMHTEKOmoja + nYD7iEEmDqK+wYeEHBE2VwznsIj9IZR4U9/04uyDTDYNSik5mdIbYJaTA6WdhETDJHLGJtE4PwlNmTdg + fqMLdizwx6mtArxwUoYPn1Tgyzc1+O4DLX75zIzfL1qAr8zAN3rgOxXwowT4ORT/+ZXNCRyE39gcwb8K + gV9kwA8q/OeKCr99IcMP72px6RkHXjwWjQPLItBfo0E++7MrKhSxVnLEyO5Es/ZoE3ACcHKkjBN/WRro + iQhgFvnL8E8BmIGlgWZgKaHTYwScAOwUf9mcwAwC5MSGIieOTwi6hqyYAKRF+yAt0ofq8Ud2PA/5KUEo + z+KjNk+AxrxQNOUGoy2fh+6iIBrjAzl05fujMy+AmwN4sFyMkWoVhivVmFkmQ0+BGN15Ek4A7mJz4pM9 + bErho4HNlZUhQkeunPbRclEpzZkq1CVLrgnAdanURtO1qExSc+Ivm/uXgVuOJfLFIoMJJUTOrheAq1Kd + wnFNqhLliSKUxgahIo6Hqnh/VCV4oybBHY3JnugkOzpUFIwldWKMtYqxqk2Ajd0S7BhU4wCRoiOLrDiy + 2IijSw24eZkWR0cVOLhYhH0LQrFnDp/sXgB2D4fg+KgaJ1ebcesKA/bNk2N9TxAW1LhgbsU0zKt2weJG + L2wekmPHHBV2zVNh7yIldi+Q4CAdt3eRGquInA2To9lf4I+u7EB0kNPPBOCGJD4q4wL+TwGYib/Fibxr + AjCL/s2JpvdIdiqRxiGGJJbui3jOhADMicDsQzeyXzEsEpf9YUGciP2JwVIxc390WL1htTnBMl2w+c3V + WldyelyIZ00nuJCtm85Ns8GWVSp3cvppP407DGQPjVonzAZ359fzxLUsZmZ7WXo3GjdZime9F/QMZP8N + Jj8qfaHRe0NN29RUalh6Z2sgDGHBsEaEcgiPFHJicBg59LbwYLLBPK60kQ03W4M5AVjDPhL7XwRgg5HH + CcC2cCEn4jIRmM35e70AbLNJYIuQwRImgc4cChXLNnMdNPpg7jiWAjraLuT6Y268HBUpGrRkm9BXGI7B + YgeakzUoDqM+ZvInDknPnZ6Bg6XE1rsgwe5NfTQAmQ72gSFxSeKZlWY/NBNf7QnnY9AuwEwLD70GX3TR + s21XuHBlHz2XQbM/5jpCMewIQX84m4fKD9UGN5QZ3VBkckMh2bZ8mwdybZ4EL7Jt7tx0JVm0nEdtoZj4 + TBX7MyRFTH1FgopkEbUp4qkJoRwmlkvJXhZw1+eLgnA/FDnoWOK65XYf1FK7ao0guxbliwXURldRG9yQ + 6I9N8V7YnuCFgxn+OJYThNvyhTiRJ8LxrGDcnM7DsTQebknzwx3EX+/KD8B9xSF4sEKKh2gMvL1IyqVx + HovwwBzTDAybXDDbMo3DiG0G5oW7YmGEG5bFeGB9oi92Un2HaWy6PVeAewqleKRCg3uL5HSOYGyL88Ua + hxeWWF0xzzgNCywzsDjMHcsjvccFYG8sT/TAymRXrE2eji1p07ArywWH891wS6kHbqvyJLjjWKUrbq5w + 4crjFYTKGbi92g131HnjrkY/3N0agFNN/rinJQiP9MnxwsIwvLosBk8tduDeeeE4MRyGI8Ph2D0nClvn + xWHjvBSsX5CNrcsqsGdVK/au68beTf3Ys3UAm9d3YtOmbmzfOYSNm/qwenUn5s2tRG11LDJoLExJUiIl + UU1OqAlN9eno7ihCR1MeKovjUJofhbqKZDTVZqCmMhXVhPqGbMycXY9VG+bgwM0bcPiWzTh0fBOHg8c2 + /p9g+zNMrB+6ZcP/wMHj6+m3dU7Q8oT4e/zkNhy/fRuOsPMcWot9e1di60aWAnoAPc3FyCF+kR5rQUN5 + FvrbKslZLkRdUTo6a4uxavEQbt67AUf2rcORA2s58fe2Wzfj1tu34MQd23HXPbtx7/37cN/DB514aB/u + eWAP7r6fCcI7ceqebbj77i249ZZV2L93PtasaMfSefXYvHoI+7cvxeFdK3Fw2woc3LoSezaMYtPYLKxf + 0osNo13YuroLuzaw99GG7WursX5ZKVYtKsHo/GIsnFOM4cFC9HXloK2JPeME7plnp9qQEqPjhN/irGhU + FSahIi8B1QVJqClIQUVOAiqy4lGaFof8BAeKk6LQQL8PNWRgaWca1g8k48DCFNy7IQNPbk/G8zti8MwG + Mx5frsajSxR4fKEMj84R46lhMV6Yr8B7K8z4eLUNH6w04N1RLd5cLMfbo0p8MKbGhys0OD2mwnvL5Hh3 + iQRvLxQRWCnBewukOL1Ejo/GNPh4hZb2VeHtZWK8sYiPN+YH4F3iOR8t8seniwPx2ZIgnF0egnPLhbi4 + UoKzY2JOBP5iNJTD50tDaB8+t8x+v7JWim9YVC/h23XO5W/X0PpqMb5bJcaPa2X4dbOKm/uXCcDfrRbi + y2VB+HqMzwnATBBmEcC/byVsV3OYEIBZ9C9LA+2M/iVskXBpoP8SgHX4eZuFtoXjq1VGfDhbhOdbvfFc + RyDeInv74XIbTq9w4PWlDjw9z4YnFzjw3PIkvLIuFy9vKMDzq7Px/MosPDeWjadGM/DovEQ8OBKLh2bF + 4eHZ8U4MxeHRwQQ8MjMBD/XH40HCAwPxuG8wHncT7iAcG4zF/v4obO+JwNpOK+ZWK9FXKkZ7qRBtNL6x + qN+GShkaaxTjcArALTVqNBNfmkgFPQG23lSppWUN6su1qCtl4qyG2hdLs6xBdb4adblq4lMa9CSrMRil + xIhZglGzApusOuyzGXAowoLD8eHYlxqBTSwNdK4VC/LNGCw0obNEj5Yyqp/qZWik5aZyHZ1Px52vvkyP + GtpWV278r6hhkb+Ev4m/LPKXib//RQAuz9ehNE97TQAuyP67CJyXoUROphLZhIwMGdKZCMw+iiQkjyOe + OHJckhCxZJ+i48j2xrDsXMGcyMtE4AgW8Tsh/rL/csjWsUwmCTEh1Ef51EdDkB5P/iBxwpREZ4TxBFjU + cSrZw7Q0CSdCs2W2PTGBQYzEeCniYkSIJHtuZbyEZRELJR7kPxkyzxshdbsBGu9pCON5IoH8j1KzGm0x + FnQnmNEVo0F7mBCNej90Er+fS3VuLLdgV3MUDvUl45bZ2bh5MAM7WyOxvs6MtbUmrG+2YV27Hes6I7C6 + KwJj1K6W9dg54XZ0wIHlg9EcxgYiuW3Le/8SeznB978KwNFYMTMWy/uisKgzHHNaTJhZryX/Q4X++okI + YA1mNqkw1KjCrAYFhpuUXBTwhAA8r13DpX92wogF3U5wy11mLu0zw9weQrcVIz1OMAF4pCd8XAAO4zAh + ArO0z0z0ZeDSP7PIXyb+NrB5fyfEXx1a6zTXwATg9loNuqo1TgG42oCRKgPmVRCo7c4upj5BvsVAupCb + 95cJwNejlXydduLJPXHBnAg8IQRPCMD9MbQ9ivwb4j9M6GVgou8/wbZ3RAajPSoELdEC1EcLURMlQlWk + GOWRIuJLQhRECMiHFiCL2kCaLeRvSLVSuyQkESe9BuKxybTteqSF/X3/dOKlGYQU4qNJWh7ilNTW5T6I + kHjALnaFTewCq2gGLAIXDmZqqwwTAjAn+o6Lv/og2hbswonA5hA3Dn8JwcTfuQhgpwBsFrnCJHSBXjgV + JskMhBMnjSWOnhTJRzw9j0ibDxcRyz76tFqpDCPub/ci+HDTpjHxV290Cr8mI0v5PAH3cbiOi8LTqKRr + Nk+nelzgIC4XFxuAZHpHieSrRoRRnRY34uDU58yTERUxFUkJM5CWNA1ZaTOQl+2O4nw/VJQEoa5aiN4O + E7raDKgpFyE7jX0kMo0Tf+0Wqt8wDVbimkwAZmmgo8l3YuNGlD2A84WY+Pu/CcAMdrpuznciOMjHYf8h + M78qxkj1kZ8Trp6OCLULorRunAAcqXJDpNwDCTofZJL/khdB/imNP61sDuACBRoyQ1GfyUdTjgDtxGtb + yYfuIG7cU6nErEYT5raxj8bJFmQEId0+FVGaSeRbTCY/0Bc12aGoII6dHj4dMepJcMgm0bluQDrx4KK4 + QNRnydBK43V9jgql5GdnRoQg2czanQCpNgXSHQbyZyywGRRQyUMhl4Zy/59wU8cRWEpo53owB5b+mYmy + /gHeXMnWmQCs1sjJJ5RBKhNyYnGwgMeJudcLwP4sqphFE8sE1wRgJv5eLwAzTAjAflQy8ZedI5g3LgKz + /0TpmthUd0wEVtM5FTIRJGI+5JIgaJU8mHWBiCUfMoPG/7JUlgJajL5yCebUyrGsUYn1rWpOAN7TJMGB + RgEO1wbi5ko/HC/3xfEy8mPGBeB9hYHYlhuEzXmh2FAkxgoq5yX5osfuiirlDahUTEKd9gZ0hU3HrFgX + jKaRL1TGx4l2FR7s1eCpPiVeHSRuNkuKD4dC8V6PP97u8serrb54tskXj9R54YlmHl4dkOOtWWq8MaTB + 6zO1eKVLiacbJXikSoD7Svk4leeH+/J98USZH16t4eF0XRA+qwnG2Sp/XKj0xsVyd5wr88Dnpd74rMwX + Zzj4c/i0LJDKQHxc7I/TBd54J9sTb2a44Z0sb5zO8cVH2d44k+mJzzNd8UX6VHyeNgVn0m7CJ1m0XOjG + pY/+uiYQV2uD8G0DH1eqAnGWzvN+gQvezJ2GFzJvwjNpk/BcxmS8lDkVr2VOw5tpU/Eu+VcfUr/8LN0F + FzPd8WWeF74p8sUPlUGcCHy1loevG/n4tl2Ir3vU+LTXgmcadTicI8Q8Gj+KpZMREXgD5D43IshrMpcV + kxNr/yEAM/HWKQKzqN5xcZe1H3/3vwnAzojgv1JCT2xn4jE7fiLi/b8LwCGQK/lQqNlcwHwuBbTNrkAk + +QEx8XrEJhhoWQtLmIxLDV1elYk9e9bi5ZcfwYVLH+Krq0zg/Tuufn3uH7iAixc+xauvPIttW9dj7pxB + bKfy2acf4QTgb7+7xIm5TMQ9f/ETTgD+ko7jcPUcrnz9hVPspXJi+UsqL4/j4pdf4MLFM85U0Z+8h8/f + fwNnXn8Brz50N+7ZtRFrupgAHM8JwEOZERjJJe5Ql4ujiwfw9n234sq7L+HNpx7k0jAvGOnH8FA3Bmd2 + YvZwH5aNLcItJ45yEcBfX72Ibwjff/N3fHf1LM5/cRrvvvU8XnrmYbz09AN45dkH8dTDd+Lu2w7gyO4N + XATw7o2j2LZ2EbasmBCB52L90jlYu3Quhw3LnNHAO9atwO4Nq8l3W8uVy+fPxpyBTvS21qO9vpL4hBNM + AG6tLkZXXek1AXhebwsW9LWgp64YJZnRiA9TIMIooPE8hOxZKHE+pz6UGEM8lHhgUpwYKbECjkfmpDmn + MynJ16KcuDDjxi3VbA5gEzqqTehlKNdzAvCsYsZL9Bih8XeY+PLcAhUW5yqwMkuC7VlS3FaswuO1Rrzb + Ycc54myXeq34skePr7pV+LpXge8HFPj3bDV+GVHhu9lKfDMow9dDCg7fDCpwdSYt9ytwqUuGc80ifNEU + ivOt5MNRn7rSFYqv+vi4OhBCEOBqvwjfDsnx81w9fp5vxo9zzbg6W4+Lg1p8NlOH92aa8HKfBU92mPFQ + kxknK804mKPG5ngx1hOX3pkixNFcCe4jO/RCqxmvN+lxukmNs20qfNWlxXe9ZnzXb8FXM8NwbsCGd9tN + eK5OfZ0ALMaRTCcOpYtwIDUUB9OoznQpjueqcKLQgFsL9DiUq8HubBqfM1XYXRyGf/UX4bU1/ZgkELmT + YXFCIvGCUukDjcYfWo0fWMpftcaLCIQ/IiJCER8vQyy9NAcRNXs4GQSjD0w6IjRkoCOtRJxY2s1wNvei + N/dHaJTBkxMr41i6PjLqqWTQ021+ROKY+BuIQnsgisjZKCEUE2FwCsB81CaJ0UAGtokcoaZiDWpzpShN + 5iE/xhOFka4ojfdCVbIvajP+LgCzCOC6LB8u+vea+JtPpJXQnMdDY44/GrP8nFHDdFxdug8nAjfQoO0E + LWd4oz7FA7UpbqhLnoG6lGloTJ+B1mw3TgQeruQRQQ7CnOogDJEhGCj0xCwyICwqeEWHHKs6ZFjSGIr5 + ZFCGy/25P6RnlfqiL98D3Vkz0JkxFX25bH5glg5agHVdCmzuVWJ7vwbbZ6qxZVCF9f1SrOoWYkmrAD1F + ASiPd0GOnc3/OxXR2inO+TC0HnDQs4/UeBAh8kSUfhxGctoYWDQwFxEcwMGh94dF6wOdxocTfmVKd0iV + bpDK6b2TE8Yie+USNy4FNINK5g2F1HMc1C5kntzvUiLEMrEbtCp694Zx8TeMdW4+JwCzVI6JMeR4JquI + QLIvPeS0zDo7df7oIMQzITgmCNGRzjRT/xSAlWovIiB+RHoCiYwwkdYbQUEzyFBNI3I0jcoZZFCovQq9 + iED50H5BMBrZn81yDnp9KLVjX4QKPDmxODDAKfwG8dw5MAE4mAxTaKgfFwUs5JNB4gdCIgiCjAiWiogW + iwaeEH9Z9K/4ui/3/ikAS5hIRgRJSSTv/xKA2TIT1dQKwd8hZ+ejff6LAMxKk14Os0F6TQR2CsDO+YCZ + CMzmAI51qGlANSEjNQy56WHIy7ATwpCfGY6cdOs1ATgxWon0BD2KcyJQnBdJBN6CRIccUVYh7OQA2TQB + CCOiF66i/q3iE0KobQkRbyIn3k4OfbQU2TR4Z0YT2bX70XZPxFL/TrB6I43Idw45bezr2nidL2KUnkjW + BaA6kQbpmgTsXFSNO3cN4N4Ds3FsUw9WDBShIc+GGFMAjHJyZhSu0DARWOUCtc7tmgBsi/Ai40/tOtqL + 7sEbneUC7BjU4cXtCfjq3gL8560G4LN24GwH8Gkj8GEp8GYm/nwmFj/db8XXt2lw9WY5vjsmw/e3SPH9 + 7SL8dCIUv54IIQTjlzsD8NN9RKAe98B3L3jg13f9gI9CgfclwOtq4Dkrfrnbgsv7jXhtmRKHG/0wSmNB + X6onGhODUJ+ouhb9WzcR+ZsQhrokO4eqxDCUxZpRFGlAXpga2Tb1dQIwg476tQqp9H6T1DwkyVyQprwJ + xeSItDqmYHmaK/bmueGucm88XuODl9t98PFcPi6vV+LqXj2+vzUM35wIw3cnLfjhlBk/sXmQ70rCleMp + eGtLCu6YlYQtzUkYznWgktpJjMwfZpaOSsPSP4UiNkaDyEgNjefU5oxi6tMiGHRsfmom/PKdwq+YOR+h + EEpCIZAEEqjfkJMskntCIqfxQDaN2jA5v7LJsCpvhEN1A6JV5EyRQ5Vrn4SW7Bsxv3Eats11x8mtRNJv + D8QHj4fg3CsSXH1Xjx8/MeP382b8ecUAXFUC39Oz/1EA/BKM//wajD9+5VPJBGDa/oMcf34pw2/nhPjh + PSUuPB2G52+OwL5R5swpkMscW3KgmfPoYB/JmHn4/yoAsxTQqZHOOYAnyglMCMAZ0WzeXzGdx4n8BBEK + koQoJkNemCzg0j9nRvtR/2D9wpXO60nH+SE3kexcOg81uSGcANycx+cigHuKgzFAzs0AOSQ95Bh15wei + r4jPCcBszrIRIgZD5UzcFaObHK6uHCnas0RoTg2htkf1URtsTBPQM5aiM0+NjlwtmjLJZqbIqO0xAVhG + y2o0pOtRnaxFAd1zHovkp3G6kMhYQZSI7CrdC6EwQeaMBk5lArAKVWks+pcc5BQFKhPFKIsLHheAA1CV + QE5yvCddgxfa03wxkMvDwioxFwW8qlWMjd0ybOsnskFkaPewlqDC3rlKHFykxKHFChxYJMH+BWLaJsDW + fnIIB3g4OF+GO1ZbcdsaG/bOUxN5DsaiOk+yoTMwp8oNCxt8sWlIha3DamwbVmDnXMJCGQ6ManBwVI+N + M6W0XwAGi3noIQezM5ulgA5GQ1LQfxWAK5J4fxOAi+KJj4wLwHnk5GdF+SM1wh8JYV7j8L0m/E4IwUwA + Zm2NRf+ydGXhenfYaPyy0TJLe2Yw0lhmcOWg0s+AQkv9RTWdMI0coKmE6WSDnSUTgZkArGERwGTfDWTX + jcSdGNifOhaTBxfpayQupaV6lCx6mH0wQ/urNGQ7aX+13gdaA9lTE3E4E3E4I0MA9NYgGGx8WCIEsDrI + 0YoUIYyVTBBmoi8Th6lkMNmCoTP6U13/7wJwWLgYVpuQE3JZFPD/JQAr9UF0/zzIGTSB5PgFQKsLJNsW + BIeN+IGd+hpdUzb1NxapXpUop7FUjgK6tnSDH42RfjRe+iGO7E24wQ3hJlfiHB5kw3yRYvdFhtUHecQ7 + y4iXNpoD0WmlvkX8ZMAQgG4a7zrIznTIXNGj8sRMurfZlkCMhAdjFksXTby0hZ5thc4FxXoX5NP7yqX6 + cyxuyLR4ckg3u3MfPKWH+yLHEYBC4jJlySJurrnydJlzzjk2/1wK9RVCeaqEQ2kijQ3RwcilY7gPHyMD + OEG4hPhPld0HTQ5/9FJbmxcbiDFqg2vj/bAhlgnAPtif5odDGQE4nBGIw2k8HEoNJATgSEoAbk7xwe3E + W08V+OO+0mA8WCXBww063FEmx85UHlZFeWGeeTrmmKZj2DyNMAUjlqlYEO6K5dHeWJvoix1pATiYzcNt + NC7dXSjCI+UKcjAMeKJSg1M5AuxK9MOaKE8stk7HfONULKL6loa5YXmkF1bE+WJFgheWJ7ljRZIL1qRM + x6a0GdiR7YKDBe64uYRQ4Y7j1HeP11yHKhfaPgPHK11wS7Unbqv3wR3N/jhBONUejPv7xHiSHKpnFtnw + 5OJw3LfAijvmWXDz3HDsXxiFXYsTsH1xKrYuzcHOlZXYv5YJwO3YubYTW9a0YeXSGowtq8M62rZ6bTuW + jzVjaLAQpSU2JCVKkZgg5UTgjDQ9ykoiUVuVjKrSeOJKZmQmG8kJjURFSTxKCmNQRttr6zMwNNLAzdF7 + 5LbNOHbHNtx8YiuHo7dv+T9x5NbNHCbWbz7x33H0tk0cjhCY+HuMtt1y53bcfucu3HLHdhy/ZQsOH16P + 7VuWYtXoIHpbSpGfYkcucYzO+iIsmNmK4e56csiLMdhWjQ1jc3DrwS04fmgTjh/ZgNtu3YKTVM+Jk9tx + 6q7d+Nd9+/DAQwfx0ONHnXiMCcH7ce+4EHzPfTtw773bcOL2NTi0fxHWr+rG2MJm7No4DzfvXYNbD2zC + sd0bcfOOTTi4aQ22rVyIzaOzsXVsCLvXDeHAliEc2T6AA5tbsXNdAzavovcxVoc1Y410/U0YXdSABXPr + MXtmJQa6y9DVnI/Wmmy0Vuegt7mYUISmiiw0FKeiqTSDQ3NJFuryUsk+RVP/ikZ9bjxm1qViSUcy1vYl + Yv/8JNy7Lg1Pbk3EC9ui8dw6Mx5dJMWDw6G4t5+Hf3X545HeYDwzS4q3Fhvx7lIz3likxWvzlHhtvhJv + Ltbg9DI93ie8u0SFtxbJ8cZ8IV6fG0pgpRBvzhHhnfkSvEc27KPlany8SoX3Vkjw9tIQvL2YeM2SQJwZ + DcQXo0E4u4yP8yvFuLhKhktrlDi/So4vxiT4bLkQnzKMCnBmSQg+Wyqg/WT4cq0cV9fJCFJ8s16C75jI + u554K63/SNv/vUGB37do8MtGJX5cK8V3LE00nYcJwN/SMhcBPC4A/7ZtQgRWcfiF8O/tSk4A/mnL+BzA + hJ+2KfAz7ffvbVr8ss2MX7aG46dNYbg4qsVbA8F4uZdH96vEJyvD8NGaSLyzKhrPLwrHEwvseGZ5Al5Y + nYnn1uTiyeWZeHw0HY8sTsf9LBJ7VhROzozEnQNRuHswlhCDuweicXd/HO7qi8Gp3mjcRTjVE4s7+2Jx + e28sjtFvBwdisbs/GpuZ8NZpw1CVHB3FQjQVh6KpXILGShkaWORvnQpNhOY6NVrqNc6IxjotWmq1aK5W + c/MCM7TRelu1ntqVDi1VOjRWaNFQpkV9CUvHrENtEa0XaNGerUN/ihazoxSYaxJhzCTHNosWRy0m3Bpm + xvFYOw6lRGBnjgPr8sMwWmjDSIkVPeUmtFUZqK3SeRmq9GipNtA1GNBI2xsrDahjqGJRc2bUVpg41DDx + l8DmPastNaCGrqWqWPtX5O84KvNpG13fBP4pABdRWciEYJYOOkPOCcB5mU4ROCtDhsxU8r9T5EgjpCbL + kUxlYrIMCUkSxCeJERMrQHRMKCcAR5Ft+qcAHBPuh1jiQPFRfKTEC5EWRxyYkBkvRkaCBCnEf5OJG7Is + XwzJxDkZUpKY6Ew+Df2WQPvE0/4JNO7Gx8kRGyUhv5V4Atl+rcQTKr4L5H5TIXWfDInLTVC4T4PRxw2R + wf7IIZ+4MdKM7nh61nF6dNplaDUHoTucj3nJxDWLjNhUE4bd7XE41J+Kfd1J2FRnw1i5DssJq+osWN0c + hlUtYVjeGoYlbTYsbrdhIbWthd1hWNofheXUNlcOxpFPGo2xviiM9UZew4oeBib+0jphBe2/gtrryoF4 + LO+LxsJ2O4abTOhnEbTE1wca9BhsNmCoRY9ZLToMt2gx0qzFvBYNhhvlmFUnw0ijAgvatHQNBizo0GFe + hwFzOehpWY+57SbM6TBhpNOE4U4jhtl8v10WDHcxEZhF/4bTslP8nd1px6yOcAzRfXECcJOFA0sD3dtg + RleDieyDEe2EtnoD9REDWqlPTKCd1tvp2jsJvdRmh2ronFUmzK0kUPscLtVhNrXDoWwZelMEaIvnoYW4 + dBNx6JYY/2sCcFcsvRPyD9icwP8UgPsinZG+TgRzYNNyMPQ5nOjlIoBD0BEloDqFaIwWoZbaSRX5K+UO + CYrt5KvYRcgJEyGLkGYlrkh+XQorCcnELxNNfMQTD403BCOOwC1fA49DoimIEIwE4pxJtD1Jz0cyIYE4 + aTzx0Ri5H6JkvnBIvBAhdUeYxI2DTeQGK8O4EHy9AKwPnsaJv9cLwKYJhLhxYPP/WgSuMIvILyAYBTNg + DKVjhVNhlroggrh7AvHQZHoGEwIwE0UtE/P5Eu8yWeh4K/kDxEuZ+Kunkgm9ZpMbLMRNrRba3+w5Drbu + AZuV7sHmQX3ag4v8jSH/J544JpsnPJHel93myYm2FsN0KqdSv59O213pdxYFPINLB12Q44NS8k2ry0PR + 3qxBB7Xnak4A9qExYxoiw2ZwIrBFT/dimMGlgY6ld86mfUuk8SWG3q0jzA/hxM+Z6MsE4AkRONzsgXDy + bdgcwBFsHmCLL7gpdGy+iKNjEmn8iaN9o1g6aO0MRJLfwwTgWJ0HJwInGfyRTv5KnoP5DAJUJYvRkqtA + a54UjVkhaMgMQnNOCLqKJegplaK/UoFBNq0A9dF5bWb0ky2pyfQln2MqtZtJyIqYSuvUtguFaMgOQmGM + C/kVN1EbuQEphptQTLy5Li0EnflKdJcY0JLP/GM5cXoRMsMEyHYokBulR3a0BSlRVoTpFdAohVDKhZCN + i8AsmyAruQ/qRXyECoKuCcBMnJ0QgIVCNq2dFHKW+lkcApYmmhdC+wX5cqKbJ42RTORlAnCwKAihVD8T + gP35vvDhef8PAZhL1UvHsfpZhDGrjx8UwAnAgbQ/i0pmU90xEVgpF0EuFUAmCQXLamjQ8GGj/sIEYJYF + q4DebU1GCNoLQjBQGorFtTKsbVJiYwP5/TWh2FUdhP2VvjhS7sPN/3us/J8CMI9LAb2envOKPAEWkl8z + FO2BdssUtJsmo8c6BfPjPTCW4YPNtP+hagFOtUpxf5sEj7YL8HyPAG/0h+L0YAje6fbDmx2+eKXFB49X + u+P+chc8UuONFzuEeKNPRjxGhXeGtHi7V4VX28i/aZDiqVoxHiwOwoMFvni8xAcvlvnirQpffFjmh09K + vfAZ+S6fl7jiTLEbPi7ywsclfviI8GEJ7VNMy8X+tB6AD4p5eK/QF2/meOO1DA+8meHFicDvU/lRujvO + pM/AZ6lTcSZlMj5OuYm2TcGZnBk4T3V+XRWI7xr4+KGej29o+TKd/zM694dF7ngrbzpey56KV7On4bWs + qXg9bTLeTr4JH6RNwyfkY51Ld8OVLE98neuF7wq98RM92x+qePi2hodvGoLwfasQ3/ZocL7XilcaDLiN + +sPyqAA06tyRKJgKnf9kCH2ngsfzgP8/BGBOBA7xo3ZE7THYl5tT2uc6Adjb1xU+fu5O+HpymBCCJwRg + 3wCql+f1/0sAZhHATOxlUcBhEXJYw6XcNgYWBdzUWoJbb92F9957Hl9/8zm++/ECvv/un7j0N3z7zSV8 + eeUsXn/teWxYvxID/Z1c+eQTD+HSxc/w07+/xnc/XMJXX5/lIoG//Oosvr563olvzuOrq2fHo4FZ+dcy + i/5luMyJx5/h3NkPce7M6fEI4Je4COB7d2/Gmq56TgCemU52OiMcc3IisbI2Z1wAvg2X33kJrzx+H7av + W4b2pio01pahtqYEdQ2V6BvoxL5Du/DWe6/hh5+u4qcfv8a/f7j6F378Cj98ex4Xz32I9995Ea889yhe + fvYhvPr8w3j60bvwrxOHcNtB8lP3bsDBHauxd/MYdq9n6Z4XY/vqRdi2ahH5ZU5sXb2Eti/HgW0bcGjH + RhzdRf4mleuWzceSOf2Y3duK/ja6l45GDHU2oq+lhrhFJXoayv4mAM/raURndSEKUh2IscgQpguhMZDs + jJlPNiKY7EAoIu1kExwixESEItbORxLZvPR4suvJEuKvzjmBy4lz1JWyjymJvxN/ZgJwf4UBg8RHhtkc + wMU6zKFyhHj8/GI1lhUosTZbjN2EOwoVeIo4/+m2MFzqCcdX3UZc7dbiaqccX3eJqV8I8dMQ+T+z5fh+ + lgTfDorxzaAEVwnfDUppXYZvZ9K+vTJcbhfjQosQl6j8ko79mo79ZmYovh8U0r4ifDMgxndDcvwyR49f + 55sJFvw8YqA61Lg8qMGZWQa8OWDAU20aPFCrwQni+PvT5NgYFYq1Dh62xQfhcIYA9xTL8Qz5Ky9VyfBm + pQAf1whxrkmGrzvpuntMuNxnwRd9Zk4Afr6B6iqV42S+FMdz5LglR8nhWJYcRzLEOJQqwkHCoQwpjpJ/ + cDhLhT20vDVNgk107h2FFtzdm49XVvVgEp/Id2iICwQMAjewyE8dS+XH/swz8GAw+hORcEb/JiUpEU+k + PzIyBBFEVixGHzIMblyESpjRGxFmP0RYfOAgw+4UgL3GBWB3IlteSKHtTADOCg9EHjkbBZwAHIBiFrkR + 5oMSRwDKo4NRnSRCXZYM9QUqVOcrUEIPKCfOBxkOV+Q6XFAS742qVD/UMQE4/S8BuJYGXSYAs2jf1sIJ + ATiYQ3NeEBpziLhm+6Mhwxf1RF7q6di6dDLo7DgmIKd5oCbFHdWJrqhMmI6q+KmoTpiMmqSpaEibjvYc + D2qA/hiiwXZWBUvT6Yu+Ag8u/fNoiwRr+3TY0KvGynYZrYuxsF6AebXB9DsPffle6MxwQTPV1U4D+GCR + H0brJVhHDXNLrw7b+03YMdOEzf16rO1WYjnVsbhZws1LXJHghhz7dHp+0+BQT4ZdNR3hKlfY1e607s6J + wJwYzARgk1P8dcKP3gM5cyZ/2FnqZ50PVEoPSJRuEClcIZa7QiKlkkX+EuRi12sCsFrmDaXUCyom/rJS + xoRgd4Ib1ApveucBsBGRtlOHjiDiwwTg60Xg5HgmAsudDig5asnxAk74TYwLQQI5BjFRgURIqY5xAVhP + bUWl8YRG7wMdcwx1QVBrgjgx95oAHDiVK4OJWAuFbK5gH2jIcJhZ6lq7EhERapjNYshk/kSsPMHnM/HX + Gf37dwHYCyEhvhwEQX4cRKGBkBHhYpHAKibKqiRQEhGSSUIgEvw9+jeEib/sSz4mAEuC6dmRAVMI6Dld + LwAL/ocArCZjpySCxYRip1gcQhBwKahZ1PGEAMzNRUww6JgYLIPJIPmHADwOsxR2qwRRdgUSYvRE2s1c + JAWHNAtyM6x/CcBJBk4ATovToijLjpK8SOTSb6kxGsSFUx1mASJooHbQgB2lEyBaJ+QQZySn3kbOfCS9 + yxglJwKnOshJsVG7oj7tMFCbs5BTEcFHeiw5BXESJIUxZ8sXabYg6l96jDQkYNdoNe7aP4h7Dg7iyKZ2 + LBvIR12eGdFGP5gUbjBQm9QoXKChdq2htqwfF4CtEZ4Ij6C2HeWJ5DgPNBcGYSMRuac2x+DcXXn49fV6 + 4NN24Hw3cK4F+KIa+CAPf7ySgB+fDMd3D1rww31G/HS/Af9+gAbpR7T441E1/nxUBTwix58PC/DHY4H4 + +Rkv/PiSO359xxv4KAh4Twi8pgCeo0H9HjOuHDBxAvCRRl8sy/kvAnCCUwCuTrChJiEcdUkRBAeqEsNR + FmtFkcOAPJsK2VYN0q1qcmA15LSqyXml0qJAsklMTmgAEpXTkam/iZzeqegnB2xPTRDuaQ3BM/0ivDEi + wulRAc5uFOOrIxp8e9KIH++348cHI/DvR6z49VELfns4Ar/eH48vb4vHG5vjcaTXgeUVEehINCDXKCGn + lgejlPqvnhxcGsdjqD1EErkKC6f2Ru9aZxBBoxFCQeRMLCZnRchKIRE3pwAcKuGRo+GPUDn1HYUXRHJ3 + iGWu5DDQuCAlh1Y2FVbpFIRLb4RDOgnxmkkocExCc9YkzG+8CdvmTcHtm6bj8WNEch8IxKfPKnHldQN+ + +siM388agMv0Xr5hkb70/P8dij9/CcF/fmGlCPhVSttl+PNLiVMAfl+Bzx4z4YkDNuxYYEBHqRCZ0QHU + Nv04Mc5OZDfSHHhNAE5yyJDEvkCj8YnNA8yWrxeAU2g7E3uTIkKuIdkRSttCOQE4k/35FU1OXpwYeYkS + FCbLUJwiRWm6DOWZMpSRkS1M5iMjyhfxlulk/yaTMzuDjvekY7xRlOqPmhw+mvJDyEbx0V4YjD5ynmaR + wR8k55rNBdxDNosTgMvEmFOtwtwaHWZXqDgBmKWA5sTf9FBO1KyO90dlXCBqk0LRmCFBKxn7thwtGjM1 + qKZrK4+XkB2ToiZZhcZ0I2pTWBS6AFk2PrJtocihsTvbTiXdc2aUgIvuL0yUoySVRQErUJWmdgrAybRM + 91tOTl9FLBOAA6md+6GG7HB9ghdaU3zRm8nD/DIRlpMDuIoctY1kwzb3KLG+S4o15IitbQ+hZT62DQmw + e44Ye+aKsHceE4CF2NrPo30DsHu2CLetsuL2tRHYM1/DRfQubvLDcKUHPQtvLGwIIBsrx/p+BTYMEJkh + ArZ9vgz7l2pxcLkJW2erML+WfXhFz7WAjy561pwAnMxSV7PpI/xQxgnAtMwEYNpeQe/rWgRwPA/FCcHX + BODMKH9uLqh4myeHBJsPEmncmxCAmSM8IQBHmjy5OausGleY1TNg0sygcX86OTbToNCwaTSmQKKaDLFy + KtneKVQSWCmn7QTp9QKwmsY/nde4ADwuAhs9YKZzOAVgb7KPxNXUrtxxUho3ZTR+MrsuZ9k9mA01B0Bn + CYSabL+KE4CDYbCF0HgqhJXauY3afhiBRQNbOAGYz5UMTADWEm9gArBG60vnYnP/Uh0ENu8vE3+dAjAf + 4XYJJwJPCMAmsiMTAnBYmBQ26nNWsi9s3l8mAMvUPLpOf7pmAo0hKpU/xyXCTEFwWIIRQ/01nnhkkikA + GZYApNNyvMoNMfRc4gw+SLD6Ipreg40TxIkDhbkjxu4U6FPMHsjSuqGQnlsNPYM2usYeQyB6tX7oJN7T + KpmBdk4A9sKg3h/DxGtnW4nHWfzRQe+w0eSFUs10FGinI1vngkyDCzLoHOlUbxohhQnAFg+kU5vIJP6S + R1ymKFmE4jQaAzJkBDmNAYRMBYfyLCUqshQopd+LEoTIjwnmUlXnMSGYUBThiwq7LycA90T7Yy61uVHC + 6jg/rI/xxvYEX+xJ9sHeZF/sTvTCzjhP7E6g9SQ/7E/ywaFkT9yS5Yk7C3zxr1Ie7q8S45FmHe6sUmBv + ZjDWxHphvnkq5hinYsQ0DcOmyZhrmYolEW5YR2PH1jQeDlC/PZ7Dw6mCEDxQIsKzdRq83mbBSw1GWpdg + H/HsNTHuWGybgvnGyVhomoqlYS4YozFtBdW/ItETy5PcqHQKwBvTXbAjxxUHCj1wqMQdB8tccLjSBcfr + 3HBrgyduI9xCy8eq3HBzpSuOVnvi5jpv3NLoh1ub/XGyMxj39Anw0LACj87X4eEFJtwzT4/b5uhwZMSM + /QsjsHdpPHYtTcHOZdnYs7oKBza0YO+6FnJomzG2sAJzB3MxMisXixdVYWxlE5YsrUNPTyby8/RIiGci + hRRpKSpkpGmRnWlEYV44cSUL4qNkiHdIiTuZuSkysjNtKCiIRHVtKmbNacCmnYu4qNzb79qF2zjsxK2n + duCWOxm2/1ccv2MbYeu1dbb//wD7jeo9Rvsx4ZeBHcN+YwLw7acId+zE8eNbsGfHGNYtn42BtnIUpjmQ + n+JAX1MZls3pwZJZneSMV2Gkm6515VxOpL3tyBbcemwLTp7YjruonpNU36m7d+O+Bw7goYeP4OEnjuER + wsOPH8aDjx3CA48c5ETg+x7cjQce2IE7T67H0UOj2LS2H6uWduLgjmU4eWQ77j62B3ccpGeweydu3kbX + tXoFti+bj23Lh7FnzTAObR7Gse2zcHRbD/Zv6sDO9a3Yuoawrhtb1/dhy7p+bFhNdS7vwdjibiyb34al + I21YNNSExbObMae3Bh3VOagrTEZzaQbaK3PQWZWPluJMlKfFoJT4VU1mFHoqYjG/ORYru2KwezgGd47F + 4+G1UXhmXRieWq7Bg7NDcE+3L+5odMWtNdNxV70n2FzTL8xS46XZGjw3pMBz5PS/NKzE69Te3ltixLuL + jXhroRqvz5Ph1REhXhkOwavDArwyOxSvzQolHibEW/MkeG+pAh+vVuPD1Qq8PxaK95cF4ePlQfh8LAgX + VvBxcWUoLq+V48o6NS6t1+LCWjXOrlHis1USnFkhxifE5T5ZEopPR4U4v1KOr9Yq8fUGBa5ukOGbjRJ8 + v4GlapbjJ8IvhN82q/DHVh1+3aTBj1Tv92yu4NFgXB0L4cTgawLwFsU1AfhXKhn+Tfh5m4ITgH/eKqf1 + 6wTgHWr8sk1L+5nwyxbikVvt+GG9DWfmy/H6QDDeX6jCp2vCcWZ9FN5dE4NnF4fhkfk2PLYkBo+NJuHh + 0TTctyAZ/5qXiDtmx+H4QCQOdpqwv81EpQ1Hu+0cjnSF40hnBA532HGoPRyH22i9LYLgwMFWB/Z2RmJH + dyQ2E1Z1hGNxqwV9FexD8FBqB6GoJ05UXylHfbUSTfUaNBNaG7Roa9Siq1mPribigA16tNdr0d6g4yIe + uxjqDOgkdNTp0VpDqDKiuUKHhnI9wUTty4SufDOG0g0YiVJinkmIMZMMO81a3GI2t4vSUQAA//RJREFU + 4aTFjBMxdA8pEdiXG4XNRRFYWWrH/Ipw9FVb0FFrRCsTmat0aKk1oLWO1glNtJ2hocaMhlorXTf5CFVm + 1FaanQJwhVMAZlHA1f+bAFygRdV1KM/XOwXgLBWKyMaU5KhoWcktMxGYib/5mSpOAHamg1YgI1WBdEIq + 8bhk4nXJ5JcnJREfTpJxAnBMTChio4K5OX6vF4CjyTePJX4THxmI5Fgh0hMkyCBOmUnIYiX7kIYJv0zw + pd+SOQGY6qXtyYlM/JVywm9cHBOAZTT2KhAfp0RMJPNbiSdoiWewj7jJT5f5TYfEnbjQjCmQu06Hzssd + Yf6+SCKfvCbMiK44G3rjTeiOVKEjTID+SBHmpykxSs9iVZkZWxuisKczATtaY7G60oQlhUosLlJieZUB + Y/UWLGuwYHGDCfPYHPKNRow0EVpMWNBlx1Im7g7EcpG9Y71RWNbtuIYV1BYZOGGYgUX/MgG4P56WY7C4 + y4E5rTbMrNejnzDYbMJssp+z2k0YbjNibrsB89sMWNCqxxwWDVwrw+x6Bea3aLGgw0DHajG7hTj+9Wg2 + YFaLAUOtEzBiqMOM2Z1WZ+RvVxiGqS85o3/tGKK+NNQWNi4AWzkMtoShl+55QgBu49qkAW3UPlvIp2gd + B1tvo7K9WofuagNm1pgwq4qunZ7hMBOAy4yYXazDrDwV+jOl6EwORWtiMJqJp7TEBnICcBv5XJ2xwfSO + +OhOCEFfYigGEwWYSfyIzQPcH8WE3yAOfRF89Dn46LePI5LWCb1Roegi36ozWoS2WDGaosWoi5KiOpL8 + GAf5JBFyFIRLyWehtkdIswiRbCOwkpBkEiDeGIo4Pfm0umDEEmKofbEyVhdEyzxEa8kX1PHo9yBa5iFW + G4Q4TTDi1VSqAhGjDODE30gOPnDIvGGXeToh9UCYxB02kSusQpbymYm9DM7I338KwEZWEvRBMzgY+NNh + CiG/gInAQjdO/DVQHUwAthAnjTSSb0HPJiU6dFwA9iWO68bN58tSOWv0k6HV0/5M+DVQnSz61+wKi5l8 + Dk7o9UR4GF0v9VknfLgMe5GR1I+j/RAb489F/jLxl4FF/8ZHB3HRulbiuBaq00ocMTJ8Bv1GPDfRlTiS + G7JS3ZGb6YWiXH+UFwWjkdpva4MSVWVC+s0b0Y7p3DEsAtiinwKzYTocLFsSvfu0ZPKt2YcmNL5EO3iI + YCLwuPhrZwIw8W0W5eyM/PWAgxBnCyC/OwiJdlYGIpUJyTQWxZrcEUWcPHJcBI4lnyiB/IEc9jFzFMtm + JUEJjTOViUI0ZEjQnE1+cjb52dnBaMmltlksRH+FGMP1KsxpUmMu9b951Pf6KoSozfBAfvQUpFknoShm + KprZNEylArTkBVJ9biiJJp/AMRWFEdPJ1/ZDW5aAfHTqDyUGtOdrUE9jLMumlRchQUG0FgWxRmQ4jHTd + BtjYVHJKIVQKNhewABJpyDX8XwJwUJA/t10mF0EsDeWWWZpoHv+/CMAh/ggSsv9l/hKAmWjnHehM4evP + 8+XAlll66WAW9ELjKkNIMNU5LgCz/zZF7KN/ujb2vycTf9n8xey/S4tBCAf1t7hwPuLJB8uw+6A0gf3/ + Tr5VbgDmV4qxql6OtTUirC8NxNYyH+wu88KhMu9xAZilgA4gnyAA+woDsC03EOuyydehdzOaHYSFqQEY + jvXAzMgZmGmfTnZ4BlZm+GB7STD2VwTjeE0I7mwIxb/qg/FAoz+eagnAK108vNcfhHeI373Z7oOXm73x + UNk03J0/GQ+UuuKZRh5e6RDizS7iagMqvN+nwlsdSrzSJMNL9VI8URaMRwv98HixD54lf+XlIg+8me+O + d/Nc8WH+DHxU4IIPCtxwutALp4v98D6Bib3vkb/1Hh33flEA3ivm4R26nzdy/fBKhideTffE6+leeDuV + jklzx0epM/BJ6jR8nDKFMBkfpk/BJ5nT8XmeO74s98f3dcH4vjYY31YG0LovLhC+oGf2cbEHndedzkXI + dcE7aVPxHh1/Jm06vkhzwaUMN3xFvt83uZ74odAbP5cF4seqQHxfHYjv6oPwY6sI3/docLnHijdp/L+n + QI6NND73U//Kk1N/o3FLzXNBSKAbAnhe4AUTmPg7MRdwqB/8Qqg9XmtL3vBmUb5M9PVxhS+Vvr7OdOIM + /xSAWRro/ykAO0tOAJZT+1LwoVDxuRTQGm2IUwC2SWEm6E2hUNEYLZH70dgXguS0cAzObsH9D9yCzz5/ + Cz/++yJ+/uUKfv7pn/jqb/jx+y/x7dWLnAC8etUo2tsasGb1Mk4AvnLlHH7/40f88uu3+P7HK/jm2wv4 + loEJx+Ng27jt313k4Fy/iKu0fPX7C/jq2/O48uUXuHjxE1z8/EOc/+hdfP72a3jzsQdw/75tWNPZwAnA + g+lkrzPCMTeHuO24APzWfbfh/Nsv4rmH7sKa0bmoKMpGQU4acnJSkVuQgdrGCmzavg5vvPsKfvntB/z2 + 6/f445cf8DvDv3+g5W/x0/eXcOXixzj97st49fnH8OpzD+P1Fx7Bs4/dg/vvOop/3b4fd92yByfIZzu+ + bxNu3rUOh3eswaHtq3Fgyyrs3bwCe7ewCOEx7Nm8Grcf2okTh3fjjqN7aHkXtq9bjlVLRrBgVg+G+9sw + b6AD82d2YqS3lROC+1uqMNhW6xSA+1owp6sObRW5yE0KQ5RRDIs6GBZNEKz6ILJnPNjMfIRZ+LDbQhBh + CYaDBeiE8cAyX7BpRTKThMhNl6Aom+x+nhw1xOOaSzToKtehn/j6UKkWI8SV5xLmlRHKNVhcpsbqEhU2 + 50qwP0eAUwVSPFulxsfkP3zVbcG3LJK2W4VvOiX4qiMUX3fw8UO/AD8OifHDoIATcxm+neksvxuk7TOl + +LZXgq9p7PiqXYyrVLL17wfotyEhfp4toeNpG+33PfmQv87R44/5FvxnoQW/zzXgl1kqfEc4N0eHd2dq + 8FSzBPdVSHBbvgx7E0VYF05jn9UHmyPZ/zg83JUrxOMlEjxbxMeLBX54u9gfH1fxcalVgSudOlzsMeLz + HhPebTc6BeASGd2nDLezKF/iwHfka3GCwFI/H8tS4FCaGAdTCelS7M+QYUeqEJuSBVhH596Wa8Cprhy8 + PNaBSbzAqQjiTSVDMB2h/Bk06LP0goFEKkIRRiTdZqOXFU7EKpY5DCpOAI52hNA2eqlkgHUqIiPKGUTm + 3WHVeSLMwL7kcgrAMURqYo3eiNd7ItHghWSTJxlZP2SEB3BRwCxlX2FYAAroQeRbvGjZF8Vk9CviQ1FN + F12br0R5DhnW5GCkRHogKWwaMiJmoIhFAKcHoCGbh/osJgQ75/5l4m99li9aCoLQWhj0vwjAgWjIdEYB + M9QQiWECclWKOyqT3FCZ4ELnn4HyuKkoi52MyrjJqE6YwkUCt2S6oq/YFwMl/k7xt8gbvWQwWCroZa1S + bBgwYFO/Dut7qUF2q7GiQ4Gl9OLnVhMZZik+sz1RHz8VTUkz0Jfn7/xqqtOAjfRyt/RasLXfivW0vKJd + jSXNCiyol6GnkI/yeA9khU9HknEaIpSTEa6aDpvKBeFqN9gJERr3/yoAO0z+iDASqAwzBsBo8KVB1w1C + mQsE8hkQSl3J4LtwYKmdpSIXev/jArDcm+ADjcIHaoUvkRhWehEZ8OH+sLUag4nIhXICcDhrIxYews2B + BCKvYSGIjxJxDiETgdPI2UxJFCMpngbyhFAihwLEMYeTHAM235At3A8mszd01J4MdK1GE5uDkA+9ngyE + IoCIjyt4vGlEjMYFYCLUTACWyvxgMIRSG5UiwqFGVJQWYWEysOhhiZRF+XpwUcD/TQDmB3tzCOH5cGCR + wCwdNDcn8HUCsFgUDEHIdeIvgUX+cilcREGQSoMhlzPBVwSNPJSeUQg0RJgM3Jy/f83/q1PT76oQLlU0 + S63LwOYNZudjqadZFDATgI1aBZEtNUx6BR0vpXqktPzfBeAws5TegZhL3xsXqUZirB5ZKVZOAGaiLxOB + rxeAU2LVSI/XoSAjDCU5DuRTmZlgoMGXHPMwKaLNAsSYyVk3S5BAdSeYpEi0SpEaLkd6lAKZMWqkkfOe + aA9BtIXeNbWnMOrjdksQYiMFSE2UIydFibQYARLDApEeEUz9khzchljsXFaJu/YP4M69fdi3rgkLezJR + maVHJL1zk5LNc+lOY4kbl/pUp/fi5oXmBGC7J7UPIiwRbognclhJ5GpJgwinloXjnZvT8c2zVfjPaSb8 + dgJnm4FzNcBHTBhOxPfPR+DHp+349zMR+PW5CPzxfDj+fNkGvGIhmIGX9cDzcvz5HB8/v+CDn15xx+/v + eNHxgcB7ocBrMuA5I36/x4wvD5jw+jIlbm70w7Ic9/9FALbRWBGOmvgI1CY6UJsQgYq4cJREWVBgNyCH + CcAWegdmekZmNZKpTAlT0TOWIdEkRILOD/HKKcgy3YQaGn/mEik9NajESywyZY0On21W4+xuKS4fleDq + vWr88JgRv9K9/fasA388Z8N/nrPit8dt+PW+KFy5OQYvrnZge6MOQ5lqVIaJkSgPhk1KfUvuCwONz+GR + wYikdxoRpYPFKicCJoJaKyRSRm2UCJpYHExjQyiVAiJufAjIOeCLeeDLqB8QMQuhsSFU7knjCfVFcpBZ + hgANjSMmLm3WdISJb0K0/AakGm5AceQktOVMwoKmSdg0axKOrr4JD+33wqt3ivHRo1pcedWMH96n+/lM + gz8uKvDnVRbtK3bOB0zATxIq5cD3Svz5pRy/nyPD+54ap+834f5tVqyj59RAjkgKtZdoMznDOleEadxo + DAz4SwBmmBCAHeMCcLRTAE6JpG12ard2cnDCyDkmJIQH0zHklEeGcAJwFhOAo0LA0j/n05hWmq5AeYYC + lTkqVJMhrspRojg1lPZhaaumwK6ZRHbwJqrHhfqOJ0rSmAAcxAnArYUh6CwJxUC5ELOrRX8JwORkMwF4 + ZqkIsyvknPg7s4TN+8vSPIvIBgm4tM+11PZYVGt5XCCqEkNQz1IyZSrQlEUOaboKFWSnS6JFZMPEqE5S + cgJwfaoe2WF8pJl4SCek0XidTveZQfeYRsgeF4GLaMwuSZKhMlVFtlGNmnEBuCI2hBDMCcA18UwA9kVD + vA9aySnuTedhpEiAUbJpK5tl2NCpIsgxWs/D4mo/LKnxoWVvrOkIwOZ+PrYNhmDnbCF2j4jI7gVjUzcP + 24l8HVtuxq2r7dg5T4OV3QIsaQ3GnDp/zK0LwKKmYIx1iLC8LRTLW3gYa6e6hsXYt1SL/aNGbB1RY3FT + COZWhmCwRICe3FC0pAfT8+LT9fPIrtPzivUnexqAMkJFyj8EYNrnegE4I5KlfPZBnM2T4IF4m5dz3t9x + ATglgsf9URFLDjFL/8zanEXjwgnABrLRatVUKKg/SxQ3QSS9AQLZjU5IJ0Mon8JBLCXInAKwnJsHeEIA + 9v6bAGwwUkm8yikAky3WuXP7i6XTqP9Nh1hOdpwgVXpCwTJ9kB3W0bisNgX+JQCTrbZGiP//CcDj0b/X + R/5OwGgO4cRfWxjZOEMQ7TchAAvoGgWwWv8eAazQBULMsnqQbRbLfLkPuBQ0FmnVfjDriXMaAhCm9eY+ + bLMTT2FzfEXIieuIpyBMMYNsBXFK4ojszzGrkWyG0QVhNnfiGx6Is3og0eiONLULcum5lGs80KT1Q4fG + F91qH7RTfa3SGVzZo/bCTL0/hqgPsDTQPcRRWw2eaCCU0nsrUE9DFptfWDsdaXpXpNG5Us3uSKVzpNq8 + kR4ZgIwYHnISQlCQLEJhGvWZTBlKiHiX0Rgwka6T/XnPpe3MUqIklYnAAhRSHyqIDkRRZCAKI3xRPi4A + d0f7Y4Ta3FLCSurXa6O9sSXOB9uJ626L88TmaFdscMzA1hgP7Ez0wc4ET+xNcsfRDHecKPDGqZIA/KtK + gEdadbirRoH9uUFYF++JeebJGDEQjJMxh7DIMg0riUtvSwzE3vQgchZ4OJFNxxJnfqRUgFdaDHivJxxv + tJrxaJUcBzKYAOyCxbabMJ/GcSYCL7VNx5jDDSvoWlYkEv4pAOe6Y3+RJ/aXeGB/mSsOVM3AMSb+tvri + jhY/3Nbkg9toLLi5xgNHar1whJYPN/jiaJMvbmkPxB29fNxNzth9I3LcPaLEidkKHJ0px76Zauydb8Oe + JdHYtSQJO0ezsHdtJfZuaMTO1Q1Yv7QSs/vS0dEch3bCzP5sTgSeO68MbW3JyMnWIInGMRYJl0HjWkaa + hpbJHqdqkRyvgIOlqSKkxGuQnmJCchLxqSwbKiuTMDRSj827FuO2Uztw5717ceq+fbiLcPLePbjjnt04 + cfdO3H4Xw45rYPsyMIHX+Rs513fvcoI7xrk88RsnErO0zwS2zI5lAvCJU7twB5V33L4DB3evxoYVIxjs + qERhqgM5ieHobSrFivn9WD63F7M6azCnh57F8tk4unctbjuyGbffshWnTu4cF4B34hRd630P7MdDDx/G + w0/czEUAc+LvowfxAJcSej/uf2gPHnxwF07duRFHDy/HpnWDWD3agyM7V+Cum3fh3lv24+Shvbht9y7c + vG0b9qxaia2j87Fx8RC2j83C3nVDOLhxJg5s6MbuNW3YuqoJG1c0YtOqdmxe24Mta/uxcc0A1q3ox9pl + fVgz2ou1S3vpHjqwdKQVszsr0FKaRhwxFnX5yWgtz0JnVS4nAJelRKIg1oryZBua820YqLCQr2TG+k4L + js4Nxz2LrXh81IDH50nx8EAQ7m71wC3lk3Go4AYcK5qCO6u98HCbAI92iPFQWwiHp3qZCKzBWwuMeGu+ + AW/M1+LVOVK8OiziBOCXZ4XgpSE+Xh7k4zUmBM8R4q3FUny8RoOP1yrxwUohPhgLwSdjQTi7IgiXVjPx + V4yvNqrx5UY9LhHOrlHjzGrl/8PbX0bJcWXNAqhYamaqru5i5qpmZmZmZhRazGyBZUuyzMwgMzMz09hj + e8bjITPLlkHx4mS1ZHm+ufd+66233o9YJysrM6sq8+TZERW598Gfd6nx3nYV/rRFjj9vVuDDrUr8Y5ce + n++34EtyvK/PMRAafEf8cFCYtd6M3l8PW3DiCPnoQRuO7Sf/26PD59vl+HJH3CkDWJSA/nnGABb4Uewv + HUPvNYFPLYssYO2MAWzAT4eFWWzDTwedOH4oAT+dk4xPttvxznIl3t9oxd/2pOAv+zPx+p4MPLLegztW + OXDLKg9uXp2KG1al46plqbh8cTIuGPPg8IAdZ3Xpsb9Dj7O7LTin3044cXYf9XGfAwd6HDirm7q3i6+7 + +FqU6u10Ym+vC7sHPNg26MF6breiy4qxJi26q+PRXhuPriYVutr06Oowob/HikFh8vbbeL/bMDnkIJyY + GPDOdzrBcUwsT/JzT6FPmGEujPckYKTTgf5Woj0BQ20J5F2JWFHmwsrTDODzXRZc77TjVrcLRzMScU1R + Ci6tScehpjSc2ZKKjR0pWNLl4fHcGOHvGOkU2ZUiy9KBoR4nBvi7Btj2CQO404OeLjd6Ot38/m50tjkl + CAO4vcmOtqb/swHccRraamxoqbagqcKExjID440JTeVGLutRJ5nAIhvYiGphApcYJAO4vMiAMqKYPK6o + UBjBOhSS3wlkZymQkx2HnEw5stJjJKMmnfEoMyUCWdTmOSlRKMiIoW5UUSt6jV+BihwNKnI1KOa6Yo6p + ohVmcFGeVjKBvUawCjncVvx3lJNjQG6OkcsGHl/oVgVcFupmdTiM8mBow/2gDlwIjb8PDAG+sIYEwR0W + ivToCDQ5zRjNSsAUNdZ0lgWT5PErsrTYUGrGpkozttfZcFZHMo4MZuJgXzp28pxuqNJhfY0Wm5vN2Nbh + wCZemzXtFqzssLBfWbCMWM4+tIpxbv1YIjafNH3HU7FlLPkUto+lEGnYNpkuYceUMImFWSwM4Gxsmc7E + Bu63ajgBywfdWDHswarRRKzifbCK49F6YuOYExtGnVgnMoJ7DNTDRqwZsmHtsB0ruW5FP7+PgCgbLcGK + Jf1eLGXfljDslMo8nyz7vHI8+XcDePh3A3jJYKKE5cPJWNznwUSfa8YA/t34Hey0nMIQ7zGp5XkZ43vT + vC+WtDuwXKDVTv1BiKwb9s3l1QZMlaowVhgvmcCDOdEYIl8ZzorEWLbXAJ4UBnB+HJaRF53MAl7CfjUt + mb+nGcAzWJJG3ZMeh6l0BTmQAmOZKh5Pg4EMDXoztejIoMZKJX9KMaAmUYeKBA1KqZeLXCoUuAnREnnU + rjl2BbKs8ci0yJFhjkW6SSa1GeYYLkcj1RjlbU1RSDFGIsUQiQxDFDL1UcjQRyJdFzlj/hL68BmESkjV + hUpGcII64DQDeNH/0QAWrTB+LVELJVhjFsAqMoXlIvOX+iCO6+VcFz8fbp0/NWu492FjngOvASzmzfUn + N55PHTEPBtMcYh7MYl5f2yLya38pG1gYv4nkpML8TRGl2nmuRTa/aMV0a7m8Hnm8Vnl5sVyOlszfLGqg + rPQIpPMeT3TzN4nMYSc1u1OYub7II+csLghCaUkIx49gVJYGobYiDA01Igs4Hn3dWrQ3x0kZwNnpfjMG + 8AK4bfOkY2RSNxXnq1BObSzGnwLqZfGASTp1k5gaR0AYwMnUM6mnGcDpziDq7kieh1jq7mgUcSwqy5B5 + TWBPCLK4XQb5eDp1ljCA8x3hqMukVs3SoylbiwaOZY2ZMrTxt/aWyKmFZRiqisUwufA4NfWSNgXWDhix + ftCIdQN6rO7VYKIhEj2lvmjOm4/a9NncdyFGasIx2RiDYbY9Rf7oKQgggtCdH4SBYvb18jgsrtVhuo7j + EsffXv7GpkwNajiu1aSZUJ5mQZ7bSL2ih8uokTKARTVBgz4eWp0X/y8DWJRojo2Lgsj8leYIlkdJ25w0 + gEU2ZrAw4KJCECkM4PjfDeBIeaSUFRzO7aJk4USEtJ9YPpn5K8pLq8Sx5dFSGego8X+oMOqk8tQyqJUx + UgU4gz6OOlTF8VqNLPEAfaoC+byOxUnB1DHBPF9BGCkPx9pWrwG8uy0Ou+vCcKCeOqUxGJc2Bs0YwGFS + FvDljeG4mOf8cFUEdhWHYFNBKFblBmNFZhCWpflhedoirKbe2JofiLOro3BFpxLXd8fhps4YHO2Mwh0d + 4dQ5gXiwKwjPDIXijalIvDHuNYCf7w/CXbVzcbRsNtuFeLQzDM8PxOKlATleI9d7a1SL14a0eKlXhRe7 + VHiyRYZHG6LwGL/vY1X+eLLSF8+WLsSLpQvwRsUCvFnpg7dqA/FWXQjebgjHm/UReKM2HK/XhOHVmlC8 + XhuJ1+ui8FpdNF6ujsTzZSF4rjgILxQF4ZWiYLxZFIh3Cv3wbpEP3itehPeLF+C9koV4v9QHfyn3x7/4 + uV+2RhHR+LIlEp81heHfzeH4Z2sE/t4Wjo94zkTp6b80BOODSn98ULIIf6O++mexHz4t9cOX5UH4pjoI + P/A4PzVH4Vi71wT+ricGPw0pcWzchC8m3HiHvOrBegMuzFNgU5ocvaYwFHOM8kT6Mu76Ij4iEPFRgZDH + BEoZwV4DOBRhciI2DCExoQieMYAl4zfUD+HsewL/LwNYlBYXJnCcIpJ963cDWDuT/WuU5v+Ng9kWJxnA + To7pohS0ySqDRh8GpUZUNItDeXUmNm1dikcfuwP/+vd7+PnXL4gv8fNxtsdF68VPP53EVxKOHfsK333z + KV5++Rns3LEJgwNdkhH8xBMP4ssv/w3gZ/x24hh++vlr/HDsC+Iz4vNT+O77zyR8L8xk4lvpNVsuf3Ps + U3z57Sf48qt/4JNPPsKnf38fn3z4Lv7x1ut469EHcf9l5//BAF75Xwzgj994Fo/dfTO2rVvOMbYApUXZ + KCjMQnFpLpra6rD3wC689tZL+PXXH/HbLz8AbE8IcPnEz9/ipx8+xeef/AXvvfMiXn7uEbzyzIN47bmH + 8cyjd+HBu27AI/cQd1+P+269EnfecAluv+YC3HLVedJDvDdddgjXXnwOrrvkIK6+8ACuZXv3TVfi/luv + Ia7l8lW4/LwDOLx3G87csgbb1y/D7o0rJGxbvRgblo1J5u/ykZMG8ADOGO3EYHMZuaEHqTYFnIZoOBl3 + HYy5TguXbTFw2WWMNzIk2KORaIuc+Y82Sop7RRmxKM+NR22hEg3kGq0VGvRV6zHC/jvdYMKKJjPWNJqx + gZxkU6sVm9vM2NlqxtktZlxQp8WVVXG4s06FZ9sN+HDQiS/HHfhujFppXI+vxpT4fDiWiME3EzJ8s1iO + 75bE4vulcgnfLonjay9+EEbvlHiIQo1vJzT4fpp6aYkGPy4nzlDjp1XUTVIGsR7fLzfh59V2nFjnBja4 + 8Ns6G35dbcSxVQb8e60Z7yzT48k+Oe5mTLmhQoYLciKxzx2IvYzhB5MDcEVeGG4ri8FD1dShHBefrAjC + S7XBeIdjwsf9avxj2IB/jFvw4ZgNb5A3PtVtwv2NGtxZr8etNUbcVmvD7XUO3NngxB1NLtxSb8f1lUZc + LTKCK3S4jO15xUocLFRgH8/toQozjg6X4tnN/ZgVETYH0RHzePMvRBzJjEYVCKs5ioRChdRUNdLT1cgg + chlg8/MMJPBKiMmckzyR8FiDYTUsglVPImTw5YX2Q4JVBPNQZLrDkMtt8gWcYci3hyDPHoQCvldMclPq + iUC5JxxVCRGoZOAvtftLf7ZVkBg0MIi3lpD8VVHglFNw5EYhN9kf2QkLUJi8ELU5QWgvjZTKaA7UxKC/ + ikFcZPaKEs+VkTMGMAmqwGkGcC/f6xMGcHkkukuFcRyOjqIQIgitBf5ozfObMX8XoSVrPoP63FMGcC8H + 8aFyX0zVh2JxQygma4MwURN4ygDeMqDCnkkL9k9ZcNY028U27Ju2YueoERt7NFjdFo8lDBTdOYvQxeOP + loVjdasG2/ss2DVowW5e2DNH7NhOQbCxz4A1HTqc0aLBUFkU6tP9UeJagGzrApLWBUgy+yLR4o9ka6DX + BLbwnHM5VRjADu8cwKk858n2cCSSJCUQLi7b7GFQ6/0Qr+Ggr/FBvNpr/iqUvlAp/aBS+DLoB0CnCYKJ + pNdijIDNHAmbyAi3euGyx5CYypHsiZOe4k1yy0j6okj+wniDh7ANl8xg0Udy0+NRSAFYNCMSS0kKi/JE + djCFYYa37FQqSZ6Yeyg5if0pIZKEloNDghwudxyczniYTTFQxAvjdhGiIhdIEMsqZRBJFQcVlxKJSVqk + UCSkpZuQlKSDhcFDlI9WqUhqYgOkLOD/YQDH8D2B6FAJclkYyVCENFeHKNdiNKokA1ia+5fr5cIEJuLi + GMTixfwcMdDOZP/qZwxgm0mYvQrJ+PXYtTzv3nl7PQ4d3ITTqobFEA+9KhpaBkKdaEnu9Eq5lAVsN2nh + shq4r4nb6vha7TWArd4S0Ik8VpJbJyFRtCcNYIqijGQ9cvj7S8VcwJIB7Kbwd6Oq2IOKQhfX2yjgrajI + t6O21IPGimTUlyWistCJ4mwzCtIMyEvmPZ6kR2GiHsWJBhQlGFDI18U8tjCASzL4miQ3O1HO/hUNtz0S + LkcUBUgcMkQJ3UIzKkusvF813E6GYl7bhhwlBWUKDm9qwfWHx3D1OcM4tK2NojYHNfm8bhwXnAY/yQB2 + mIPYx4Jhd3Cdh/0pMRSexCD2C1+ORz7ISJyP6sxFGKsKwdljOty9JwV/vr0S373Yjt/e7Qc+6AE+amNb + g+NvFuLbF9Nx7IV0/PJKFn57Iwcn3skC3k0nUokU4E8e4E0rfntFhR9fDsePrwTht7eDgfcigbdlwMsa + 4ClhALvx2SUOvLJVj6t7I7wGcGEQevOiJQO4M8+Jrlw3OoUBnJOEjqwUtGenoi0zEY1pHtQm2SlebZIB + XO4yooT9opjXssgtDGCed48aOc443t+hyDLM4Taz0VuwALv6IvHYDgc+OD8Bn16dgM+uN+PTm1X48h4V + vn1Cjx9fsOO3V5Nx4tUk/PaiC78+68DPj3hw7I5U/OuSdDzGYLSrUYWBLDnKLQy0ynC4NdGw8d6wc5xI + TGYQ5jW3OzWwMlhbbPEwGEnMdN6HGrTaWGh4P4g5gOMVMYjlvSBjv5VpBcIh4xgh04ZArgmBQh1E0cB7 + UsVrqAxGopoCTxeIbKMPimwLOc7PQXP2LIxUzcLKjlk4c/EsXLrFH3cfjsNTV+vxzj12/O1JGz571YJv + 3jPg+D/0+O1zYfhq8Ns3Kpz4Wotfv9IDX1pw4hMLjv/NiE9fseDVWxJw424nNg7K0VIUgFz3QqTa/Tg+ + +iKBY2Mqx71s9s/8FBXhLf+cl6L0vuZyUYYwf8W6eIrPWArxSI6hEYxfkdwvGgUpsRSgcpQKAzgzTurT + FZly1OWr0VZuQAcFYFeNGd1EF4NxU7GC7/MzOV5LBrB9DrIpjssyA9FcEikZwAO1cow2xmOKoml5u1oy + gJe2yDFNgiAM4CmK1cVNCkKFoYoYDJZRyFbEYbCC4rskHl2FcWinyG3LlaGFaM8T61ToLtGjp4TfqVBP + IaxEbWoc6tMU3E5PQWyXUJEoQ6E9AgU8L/mMEwVuirlEEi9CGMHlGSRfuSo0CMOXx+kQJnCBjp+hQltW + HBHLvh2FzqwIdGcznuZEYDg/SjKAVzAeb+Rv2tqlxu4BikFRBaMtFOtbgrGpIwRbuoOxYyAce0ejcc6U + DIeWxOO85SocWhyHs6ficHipCpdutOOSLS6cvcqIbRMULMPxWCNM3T4ZNg7FY/NgHNZ1hWNliy/Wdvli + /zK5ZABftMWGc7jPlmEl1nbGY2WrApM1cRgui6VAl6MjX1TSiGJsj0RzrkDUfzWA63k+64QBnBWFktQw + 5HiCkOUJnEEw+wR5jTCAk8XT6TL2oWjkJIlqCIHePifKPzM2CwPYLAxgkeGrmUPhMwuxytmIU81m3J0P + hcYLlWaBBDU5lFYygAMZ84JgsZBbcTy0MabbbORkbK2OYMbEUMbxEOjJtdSaRVCqF/I4C6HU+kClPWkA + h8HijIGVMDmiYSRsnlg4kuLgZp/3pKmRkK6RykC7U+RwCtOXfV+0kgHMGOw1gMXTt5H83CjYxDEIuyNG + Mn8FbCTyouSz3cH4Z42GWRB8xmyxzmqP5fY8XoKarxUwWGKgoqCL5RgRpwgk7wiRDGCNqDTCccRqDuf4 + H8axyR82/iabaj7syrmwKebCoZoHN3lmsphqJIm8xs0YYfOBzboICW5/pCVwnCGhzrUFoNDkgwq9Lxp4 + LrtMwRg0BmGU50QYv8PEiDEAE+ZgTPO3TfEeEHMDjzLmDFo4nvMct5j9UM9jVJoWopTXr9jsI3HTUvaD + 0sQQlKVEolQYwFnRjHMyVBUoUF2sQl25Bo2VerTWmNBeb0FHvY2tFa11wgQ2oUXKBPaWh24jEW/NkaMh + JQJtSd4S0BMZkVgpDOCcaOxgH92TEYqzMoNwVkYA9qf74Uzy3t1JC6TXh/NCiECcl++Ly0r8cF1NEG5s + CMdt7bG4f8iM27p0uLQ6mmQ/AGtcc7DSPhurZ8zbHYylZ2eE4OK8KFxZGIUbSyJwa2kY7qbweKgpFq+N + OfGnxSl4ddSJBzq0uLgkBLvTROnn2VhrmyWZwJs987EjxQe7Mv2wMy8Au/K8BvCZBcIA9sORqkBc1BCM + i5uDcElbIC7vDsQ1Q+G4aSwat47LcHQ0BjcPReHavnBc2ROOy3pCcUk3v1N3EC7tD8VVoxG4djwSN1GI + 3bBMhauXKnHxpBLnTWlw/ionzltPPrEhGwc3leC83Y0498w27NvShHVLyzDYlYw2CqHmBhf6ujOxbHEV + lkxXorcnE+WlRsn0KOZ4VlZslLKA83N11DYaZJGrpiXGIz1ZgdxMPQpyzcjJ5vbFdjQ1Z2N6WTsOHF4n + Gbt33CdKJV+Oex68Anfed6lkBN9y50kT+HQD2GvinjSAbzrNABam8UmcXCcZvtxGZBZLmDGAb7zlPMkA + vvWmC3DVxXtwYNcqLB9tQ31RKuOSMLTqsWv9Ygkrx7slA3jv1mW47LyduP7Ks3HTdYdwm2QAU/jfcgS3 + 3n4Ed997Ee5/4HI88OiVkvl7svyzlP17ygC+4I8G8OYJXHJoC2687CBuufJ8XH/REVx9+BAuPesADm/b + iv0bV2Pf+qU4sGkJDm+fwtlbh3HWph7sWdeG7asbsXllPTatbMLmNR3YsqYbm9b0crkfm1f1EQPYumYQ + G5f3YdVEO0Y7K9BemYlG/saW0kz01BZgsLEEPdWFHKMTUZFqRV2mlfeSEf0UuNO1Gmxu1+PiaTtuW+3E + o4wjT67R4Ynlcbh/NAQ3tMzDZZWzcEnFLFxVMx83t4bg1k72/xbeO4xPd/bF4InFOryyxo5X1trwykkD + eJUKL65S4PkVcjy7LAbPLo3Bi1x+aVU8Xtuoxp9nDOD3dqvw3s44fLBDho93yvDJnnh8vk+LL8624rOz + 7fjnARs+2KXH65vj8coGGV5eHyO172xW4P2tFPm7DPic231zrh3fnWvGt4e0+O6gBj8d1uHn84z45Twz + TpxnBy5w49dzXfjxgBXf7dXji50KfMnPFfMBf7tXhZ8O6nF8xgD+6ZAex87xGsAiC/jnIyYcPySygYUB + LIzgGTNYMoC5Hz/350PCBHbh2IFEfLXTg7+vs+Efmz34x5kZ+HBfDl7alY67V7lw9ZQRF4zpeU/acXjK + gQOjduyljt3Zrce2dg22NCuxuUnJltelVU8YsbnFgE1t1MMtJmxoNmJ9kxHrmgxY22jE6kYDVnH5jDYT + lrWaMdmkw2C9lrxKibbKeLTUxKOtUY32Fj26xDy/kgFsx+igE2ODXvNXwrATE6IdcWFq2I2pIY+E6WFC + ZEX2J2J6IAVj3YnobSZvb/agtykBozUJmC52YmmqHqscSmxzanHEZcZ1TjuOup24SRjAxSm4tDYdh5vT + cWZrKjZ1pmBZbxImeczxXjdGu52nGcAuyQDu6bCjtdGMlkbGhHZ+XqcHHR1uLrvQ0Ua02NHebEdbM/ty + A2MFY0dLHbcnWmvNUtZvZ83v6KixoaPaivYqC+8PbiNQ4TWBRRZwfZkRdURtqQlVJUZUSAawF6XkcwLi + oewSjoMCUtZuroKanONedhzyMmORmxGN/PRo5InMX2r0Yq4rp2avpI6voJ6vJKqo8QTKyRNPopScuKSA + 42uh0IJqFBaQV+dzfCX/FOavQGaGFqnk4UlukQFMjqAhz4gPgz4yENpQP+iD/WEOCYAtPASu8DCkRoWj + 2sK+kMHryPt+aa4TyzLNWJ1nxuZyO7ZUWrGt2oI9LR4c6k3DOd0p2NFkxwbG4g3VOmxpsmBrqx3r2afO + aNZjRasByzpMWNrJftZt5vWzYuWAA2uH3NgwkohNI0lEMjaNerFlNIVIw5axdAnbxzOwfSIT26ezsU0Y + wEuysWlxFtZPZ2DNRCpWE2uniOlUrJ/iMSZ5jMlEbJlKwubxBH6GE2vZR9eNuiSsHnFgJfvvCmJ5vw3L + hPHbZ8diYQJLRrANS/5gAIvM3ySOkalS6y3/LAzfRCybgZQRzN+wdIh9fdAtzQM83C2MXvMpnCyRPsT1 + UkuMdFkx3ikyga2Y7uDntvH7tNqwgn1zZYvXBF5aw7G2XIWxEnJr8uaR3GiMkLeMkzMLTObG/ocBLMeS + tBgsSfVCmL+nkOY1gKcy4jD5nwZwpg69WXp0ZhrQmmaUDODqBB3K3RqUuNhvHdRvojrZHwxgFbKsCmRa + GMfNcUgTU1iZ5UgzxSDVGI1kQxSS9ZFI1EUggfo1URuGFLapmhlwOY3vpemE8RuBdMNJ8LWR25KnJmqC + 4FGIss7eeX+tAjG/Qxi/9hkD2MLXpsj5MEbO87bR82COWQCLbAGscQthjOV6+Vy4dP5S5ZuC1PgZAzhm + xgAO8Jq/+tnk+3OIuTCauT+5r8MVCE9CCBITQ5GUFE7w+6VG8R5TIo9aTaCA16CInLOwSMzPHcf7MOaU + ASzKQScnBpM/i2ll/CHKQAvzNjXJn5woDKVFEagsj0ZVeQQRiuqKUNRWh3Mci0V3pwbtrXFcF4HC3GBk + pvqdMoCTXD7ISY/ieKPh+yZUl5lQnKv0JnzwN6W6QyQIEzhVGMDOIKSS14s2k9omR2QAJ8cQ1KQpQmvH + UjvHUovxdTJ1V0IoNX4Ir3Uw+0C4NKVRQ4YODekqaQ7g6uRw1KWHUa9Goac4EgMV0RitisFEfTSWt8Vj + 46ABGwZ1WNerpO5m/60OQF/ZQvSWLqR2XoTBcj9M1IVhuoGcvC4UI+WBGCsPwURlBMYrIzFWFoWxUhnG + y9lfyfmHS/Xo5pjXlM4xMUmJEo8KuU4VUixKuPTxsIpkErZeA1ghlVc+aQAr1d75fyUDWBi7Ub/PASwZ + wML05XrRnlyOIcR7EdK2Yp7WcKkstGQAq+XUlnLIFDGIjuO6OO4nMocJuTCR2YrPUyhFCWqvAazgtnIe + UyafydRURPF9AWESx/J7c5y2q6m7dIwNRpRm67xTX+XI0CAeAi8Mw0RNDNZ3arGn34hdrXJsrwnG3hp/ + nEsNIAzgq5pDcXVLGCEM4DBc0hSJg9Vh2JLvh8UJizBkX4BB2wKMOudjSdI8bKRu2ce+dQH72o19Wtw5 + RPTJcUdXBO5sD8XtTT64t2URnujzxytjodQqYXh1xgC+vWI2bi6ZhbtqFuKRtlA80xOD57qj8VxXNF7o + jCXI46iTnmuLw9PNMjzREI3HakLxcLk/HirhPvlz8ATxXMl8vFTmg9drg/B6fRjeoL56rSESr9ZF4OWa + MDxfHYLnq8LwQk04XqyJJKLwXEUYnikOxvNFwXi5KASvFgXhjcIAvF3kj3dL/PF+iS/hh/dL/fFhmT/+ + XhmCf7OvfVIfjs94/E/5OZ80huMTYQZ3RuPf5Kf/ao/CP3ne/tkQir9XBeAfpb74t2QA++KbikB8x3N9 + rD4CPzVH4lhbJH4Q6I7B8QEFjo8a8fW4Cx/2ufBUownXFipxVjrHZksEmmJ8kRUwH67AhbAw7hrFA1gR + fogV/5XHBiIiLkQygENiQxEcE4LgaDGndJBkAIeH+nsR5o/QMFEGOgAhXO+FvwSpBHRUEKK4b4yMuj8u + AvKZ/86VKjG9oxwGozB/RfZvHMx2YQB7TWBh+BotMdAZhVEcwfFOGMBZ2EHd88STd+PTzz/Eb/gav/72 + DX759esZiOVvcPyXk/hWwk/Hv8V3336GF198Cjt3bcbwUA/O3LMdTz/9KL7+5nPJAD6Bn/DriR/w8y/f + 4/iv3O80/Hj8mxl8jWPEDz99he9//AbfH/sa34ry0d9/jq++/jc+//RjfPaPv+DTv/wZ//rTm3j7iYfx + wOUXYs94n9cALmXMLk/Cuup07OmpwjVbluGNe27C3994Ho/efRRb1q1AbWUhSkpyOF5no6Q0Hy3tDTjr + nD148+1X8duv/I6/HAN+Ow6c+An49Qf89jO/47HP8Pknf/2DAfzqcw/j+cfvxuMPHMWzj9yB5x+7E08+ + cDMeuutaPHAr9d7Nl+Pemy7FXddfLFVyuo248/pLcO/RK/DEvTfj+UfuxnOP3MXvdRNuvOI8XHnB2bjk + 8F5cMJMtfGTfFpy1bRW2r5mWzN/lI51YOdZD3dmDZUNt6G0oRmmWE0mMvXZdFGy6SFh5HW2GSNhMUXCY + ZXBZY+AkXOYoJFojpP9p01wiuSISJRz3qzJkqM+LQ0thPLpLlRisUGGqWosV9QasIbaQU29vMXO8MeFA + mxkXEFdQM9xYo8ADjSq81GnAR4M2fDVmxfdjRkKDr8cU+HwoRsKXI1H4ciIa3y2W4fslMfhBYFqO74nv + pmU4Nh2PY1Px+HGxGj8t1uL4Mj1+Wa7FLyt1+GW1Ab+steD4GguOrTLjx5VW/LzGgRPrXcBGJ37bYMGv + 6404Rny21og/r9Di+QEZ7msKxQ2lgbgo2xfneObjkHshLkzzxw2MtXeXR3EcisVTtZF4vpZjWlM4/tQW + hY/6lPhoQI0PGbPe6dfj5V4DnmjT8DeqcW+DgTDjvkYn7m9048GWBDzQmYT72hNxV6sbt1PfHKW2uK7e + hsuqjbiQ+uAQ4/J51AxH+/PxxJo2zIoImYWY8HmII1lRiLlYVMGwm0mYkjQkCgbk5ZpJKgwkBXrk5Yj5 + W8QfJTFIdITBaQqUzF/JANYtgtPgiyRbMNI9kchLEgGcgTs5FsUJ0Sh0hiHXdjITOBSFjlCUEKVukg0S + gHyzD7INC1BMIlCbHoOWYq2UUdVUpkFZbhRykv2R5VnI4y5AVU4gWoUBXCvHSEM8RurjMFQbK5m8AoO1 + MgzVxUo4aQD3VZEQMKj08EQLdJVGoLMkHB3FoWjnQN1SEIDWPP/fDeDshVIGsCgD3Zm/EAMcwEeE8cOB + WGT+jnMwHq30lwxgUQJ6Y28ctg9rsXvciL2TZikbWODMCQqQAYqRXi3OEOVGRIZxOglHfgimKWpXNWmw + uklNqLC6RU2ircUyXtxpCt/Rsji0ZQajwrMIeZZ5yDDNIxElSbP6I4XnMlVk8VlEqdPAU0i1kVhZSe5E + dqY1VDJmHVJZ5RCYCLU+AEqtv2T+xql8OBj7M9j7QanwQqX0h04bzMAfBrvI6HHEwu2UI8EVJ0E8uZvs + UZKgKpAiMsQd0VJpaZsxEBa9P2/uYBJXkuaEGKm+e14GSW0WiREFYkUhhSfJUhGFY25mPLIz5MjKEHMC + y5GZHktSGktxyOMnK6UHEBI9atitYi7SIMhlPogmiRYQ2eoakanOfiqVmmRfFSZwcooeScla6Q9oE0m/ + yB6OiwtGdLTvKQM4JjpIwkkjWBYTegry2HCp5ImY91eQNT2Jm8j2lcpYyLyIk4dBER/B78Tja2KlLF5R + 8lmUeXbaNRKEWZviMfE+sSA9ySq1AiluE6+HGiaNDFpFBMEAR1JmUMph0SnhNOuRYDfBYzNRHGthN6rg + MKmlZWEoJzkNJNp6gr91BilukjOPBhmJOmSnGEm2HSgrcEuZwAJVhS5UEuX5VlQV2FFT6ERdiRuN5Ylo + KEtATbF4z4aSLAuK0o0oSTOjNNWMcqIsmeQ9mcfkeS1O00GUgc6jeM/0sB/Yo6UHAux29g/2hTSS8MJC + KypKbajI16NUmGUpkaggaZ9scuPAmgZcemYfLtzVjTPX1GG4LUl62ifZHiSNG2IscXLscNpDeP1C4fSE + E+y/nkC43T4UKguR6pqDwsQ5aMoiUSTxOjytw6MXpOGj+8vx7Ust+PmtNpx4vxn4oA6/vFeOH17Pw09v + 5OK3d/KA9wuAvxF/zwX+kUVkAB+nAn9x49d39Tj+ZjSOvxWKE++GAu9GAm/FAC+pgSccOH6rC59caMOL + m7S4oisMW0kWpwqC0ctxqTvXgA6e8848NzpyPOjMTkZHZgpaM5IpWj2oTXSgymWheLWgMoHn1WVEmWQA + 817wGFGUwHGVokHMWZTJc5BlmE2ROwuDpYtw7hIFXjrswac3pOLYvUn49n4SukcU+P5ZJX58jYHobSvw + XiLwTgJ+fdWK489Z8PPDHnx3SzL+djgJ9y41YgMFUBvFYZ4uCInxIXCphQEsrpuYf1tGIRlPkhUNA8Wx + hQHboGe/1skoPOUws0+LJ0A1Qliwr8pI4KIV4YhRU4RQMEdrQxGjCUWsOhTxjBsqRTD7MscNZQSSdTHI + 5P1ZYI9AmSsEVYm+qEmZg7bs2egnQV/WMgvbR3xw0dpo3HSmEg9dZMBzN+rw9v16fPSsDl/8yYTvPzLg + 508FGHjZHv+nEb/+y4GfP3biq3dM+PMjJjx2mQvnrTJgcVMI6rIXINM+h+JrERLNwgAO4HgoTDw5BaUS + BSkUxcL45fKp1xSO4qnWnCSR1R7N/TimmkOQ4YpgvIlCYbKMfV9OEUoSyv4qRGg5yUkDxbUwgLuqTZL5 + 2yPBiJYSJcVRNPL5e9Ptcylq5yHbPZ/7M76URaO7SjyYFIfxZiWWdmixskuHFZ0qLG2LxXRzLCYbCAqf + 6SYKzPp4NGf6EgHoLoqmQJWjm4SosyAe7fkKCW0U9h0FKgoxNTqLdego0qElT0MRrKAgjkVNchzjmA7d + xTaK3JMGcDhjcQgRiHxXGPtghISSRAr3NO6THYeGPBVaOV6L+X87C7XoyFOinevbs2PRkRWNzsxI9GRF + oT8nCsN50Zjg91taEYPVdXKsb4rDlk4FtnZzuTUUG1pDsLUnAjv6IrFzIBJnDsfgnEk5DpJgnbtYg8Mk + WecsVuHgMi3OXc3YeYYBO5eosWFUgbVDCqwaVGB1fzw2DKmwvl+OFa1BjLtzsKJlHvYtkUkG8AWbrdxP + j60jKqztUmBlmwKTPM8j5XL0zRjALXlRaMqJRJMwgLncXOCdA7g5b8b85W+pzY2Rrl9lZhT5SygyXf7s + FwKBRBDHvlDkJIZLT6gXsz8UpMVwTIySSkAnWch/7IESnOx/VuNCGMX8vpq5FNqzKMBnMdaKbOCFFP8L + JIgMXgnkT6KUs8EQyNgbxPgVKMHM+H4SJsZ3i1W8FwAN91Eo5vEYi6DW+EKjE+WgAyiaQiieKJocMRRS + MTBynDYJ0zZBDmeyAq40NdzC/OV4LTKBnclyOJKEOeyFKzEODreMgiwSJluE1Fqd0afgzfTlMmG2RBE8 + Pkn8Sdjtcm4jl8o3Gfjaao+XRJ4o5RSnDEI0OaY8zh9KZTC/dygRzJgbwt8dDDN/t0HtAx1/l0ExB/r4 + 2TCytWkpVE28n4XJ7glmfPXj2DRfyo5IcPkhIyGY91iw1wDmeS9nPKkz+KGNnKTPEIBhfSBGjEEY4fkc + NQdhzEL+Rn40Rl4kMGwNxsCMAdxBNPNc1wkj2bgAZeSlFfzcKo6hVakRqOa9X54ehbJsgn2lsiAOVcVK + 1JWr0Vill8zfziYrOkVm10xGV1utCW1VBrRV6NBZqScfNXMM1KKNPLcjMQwDKWIO4Cis5H21JScG27Mj + sDszDGemB2B3ii92Ji/EtoR52J44H3sz/HGQ3PFQYTAO5fviomJfXEkuem19KI62xeDeQQNu7dLg0ppI + 7CefXecW5q/XuN3iXoCzkgNxQVY4rmLsui4vHEcLQnA7+e/dFSF4sDEKr0048daSRLwwYqOIUOLcAn9s + T56D9TzGGiuPY5uFze652CEMaY5Nu3L9vcjzxe58Hxwo9sfhqiBcQJ58Ie/7S7pCceVgBK4di8HNU3G4 + bVqJ2ycVuGVcjhuGZbiyNwoXcZvz2gNxqNUXhzv9cX4fRVJfAK4YjcBV03G4jDhvPA4Hx1U4vNSKc1Z6 + sH9VGvasycVZmyuwZ3MN1q8oxkhvCpp5biuLNSgvNqCx1oX+nhwM9uehtSUJxUVaFIhqNML8EFlwuTrk + ZKnIPeOlqkaZaUpyUg1yMnXIzRLlSvXIzTejtiENo5MN2HPWCtxwyyHceR/F8kNXSJmz9z5wBe7i69tE + JvDtwrA9fAo3HD1EnIvrbxavj+CmW/+7AXzSBP5DhjAhDGCxj9hXZO7edvMFuPrSvTh790qIDNmm0jSU + pNsx1lmD3euncebGJZL5u3a6/w8G8M3XHsRtR4/gNh7v6K3n4tY7zsVd91yI+x8UcwBfIWX+inl/b7vn + Aqm9876LcPe9F+Cee87HLTcfwJWXbZOydXdtGsOFBzfiuksP4ObLj+C6Cw/hqsMHccn+s3BoxgA+a8Ny + 7N8wjX3rR7B1RRs2TNdh7UQFVowUYclwPiYHCzA1WEKUYWqoCktG6rB0tB7Lx5qxarIVq8fbMdVXh976 + AjQXpzDOpqCpKJX3TS76agrQUZqDmkwXY5URFSk61KTHoTVXTq0Uj43UUpdM2HHXajee2ZKI17Y48co6 + PZ5ZKsddPX4UwvNwacUsXFo+G5dXLcJV9QG4uHw+Liqbh2ubAvEg482La2x4Zb3XAH55jY7Q4KU1ajx3 + hpzHicbTS6KkTGBhAL++UY0/7TLg3d06vCeyeiUDOBYf74zFJ3uU+GK/Dl+eY8On59jx9/1WvLNVjafO + CMNjy4Lx2PIQPLMqEq9viMd7WzT4+y4jvjjHge8vcOP782349rAO3x1U46dzZwzg8y04cb4wgD347YgH + P55tw3f79PhyNz9nVxy+3qPAN/vICw/qJOP3ZPbvsbO1UivKQf/GY4hWvC+M35/ONZwGHY4f4ecctuKn + c5z4fq8bX+9IwNdbU/HFtgz8e3cuPtxbiGe3Z+LocieODGqwqyceO4cM2DYiKm8YGHe11LBKatl4QolV + jYzdDSqsaFBjRb3484batkGHpfU6LKnVYapWg8kaDcaI0Ro1RqpVGKxWoreCvKZEhrqCKOqVaNSVxqKu + Mg6NdSq0NHEM7SDXEhmNfU6MDnkwNujC+JCbcEnGr2T+jiZgeoQYTiKSsWQ0BYtH0rB0KBXLhjMw1p2C + jjo7asvNqC+1kudY0Z9txniiBiscSmxxaXGIGu4alx03JjhwfVYiri5NxSV1GTjcnIEz21KwqSsZK/rS + JEN5asBrAg+LctBdogy0G/0dDjTVGlBWEo9SorbWiNZWJ9ra3WhrI1qcaG91sLVLaG20oqXehuY6q4TW + Wis6aizkmKfDhm6BGruEtkrGGKKlwixlBDeWmdBQakR9iZnazojKIr2kuwXKyQ0FysjnyqjDJXC5lNxR + QJRsLckTpZ7FnGxyFJPrlYqyfERVjlL641+gWhgA1PMnUZ1PFGioMznuFqlRVszjlKg43qpRUGiQKsfl + 5QoD2IC0NBVShL53x1HnUn9Qo1tU4TDKyAEig2COoK6PCIY9MhSeyHCkRlM/6FXoTnViIjcRK/ITsCrP + iXVFDmytcGF7FdsqC3Y3OHB2RzIOtCViZ6MDm6tM2Ew+vp1xeJswgJtNOKNRh+UteixtN3oN4C4zlggT + uMeClX12rB5wYv1gAnlmEjaw3whsHEkh0rBpBltG072YyMTmyUxsXJyFjUuysXF5LtYvzcL6JcTSTGxY + loVNSzOwbUkGti9Jw46l6dixxIuti1OxeZr9ZyoZG6YSsW4iGWvHk7CafXblsBvL2Z+FCSwZwQMOCUvF + eskATsbK8RSO8+lSe7oBLJYFzhhLwTKxntsu4T0wNeDCsHhggr9ZYIi/eWAGQ71Wb0uIbUZ4TkY6eR90 + WjHVYaUusWJ5qxVntNkkE3hFI89brR7TlWpMlFDHFMZiLDf6FMazZZIJvCQvDkty47A4Q47pGfP3Pw3g + KVH+meP3pDCAidMN4EFqlr5sA7qzyJvSjWhI1qHKo6GW1FA7a5DvUCOPyHd5kedQIdeuRpad8dyqlKav + SjfHI80ch1RTLFKMMiRR9yboIuChdnWrw5CgDpGQRP0qkKIJQyr7Y5rIBj5l/noN4FQj3zdwO/JVjyIA + rjhfyQC2yHz+ABv57UmYYxbBGDkfhoh5UquPIq+NJmLmwizna9kcGGLnwEnunukSDxsrvAYwNafXAKYG + OGUAz5VgMC8kJ/clRw+Spk9LFOYvNWlyCr83+WQe+Y2Y57uQXKe4RIeSUq1kAnsNYNkpAzg1NRiJCf7w + ePzhksxfrwGcIhnA4byHY1DLMbeuRoaaqghUkR9Wi7mAG2To6qDWbFegsV6GitJI5GcHIzVhITz2+Uh2 + +yI3IwoVRRrUVpgklFA75qRGI4PaKdUVcgppAg5vtUiBLCe1ujvCmziUGInCpEhUUGMJE7iSY5BkBvM3 + CoMgT/oPWSQRUa+mcGxKjJUSiso8QahMCkRjZgjacoPRW0KeXxWNqYZorGyPw+ZBnTS13rqeWOrIcIxU + +WCociHGqn25TQiWNIZiaVMYljVHSO3i2lDGqnAsq4vG8gY5pnisseIoDBVS9xbK0S+0d44KDdRS5Qnx + yLbKkGyIhksv47gWA4NKRg0YJxnARoMKBqNKMoGFASyqCApDVpqLVx4llWc+3QA+mRV80gw+uZ1YHyOL + 8BrC4rVk9EZLFdrENF1SpTaRyauWU2vGS1BpFVIr5vg9vQS1gEhyOQmVMkqCVOGQ75mMCuot3ldpJhTl + WhhTRExySg+9d5YrMFgVx3OlwtZ+E/YNW7CjNRZbqEd2VvjgUF0gLmkMluYBvqo1jIjAFTyvl7ZE42BN + GDbmLMSQeRbalLPQqpqFPtMsyQDeXhSKw/VyXEYNf+ugHg9PWvDImBb398fg7o4Q3Na4EHc1zMWjXYvw + wmAgXh4JlfBcnzCA5+CWstm4p8YHD/Nzn+qIxlNtkXic1/XR2hA8Xh+Oxxsi8GR9FJ6qj8YTtZF4uDII + D5T44r6C+bg3exYeJB4rmIenS33wUk0wXuY+r3Cfl6mPXqoXBk04nqoKxuPlQXiiIpjLYXi2JgrPVIZz + H5EFHIIXi/mdioPxWnEQ3iwJkuYEfrc0EO+XBuED4kMuf8R1H1cE4e/8/H/VhODftV4z+NOmKHzRGYMv + umX4jN//07YoqVz0J3XcptwPn/C7fsbv9m1lAL7nb/qR3+3H5jD80ELwHB/jvj/3xeGXYQO+G3Xg7/0u + vNRixu2MyxekybHFGonhqEUoXzAL2b5zkRK0EO6QBTCFLoQq0gexMn9ExAYhLDYEwbHBCIoJQjAREhXo + NYDDAhAR4idlAov5gAWCZ3DydXhEoITIqGCpvLgwgcX/6KKapuhfOm0sjEb5TAZwLMw2ARlMVr4mjOYY + tuJ/BJn0H0JFdQ5271mPJ5++F5998Rf8hm/x24nv8Otv30pG8K+/ieXv8POv387g+1P45tvP8NzzT2D3 + mVsxOjaAPft24plnn+T6L3iMn4gfT+EX/BE///aDhJ9++Q7Hfv5Wwg8/fYfvf/wW3/z4Jb794Qt89fUn + +PzTv+Ozf/wVn/7l/dMM4Iuwd6Ify6tzsaKcMb4qGRvrMrGvvxbXb1uJt++/Df96+2U8cf/t2L5pNepr + SlFens8xOw/lFcXo6GzBOefsxxtvvopffuF3Of49Tpw4DvB7neD3+eWnr/Hj9/zsTz7En//0kmQAv/z0 + A3j5mQfx4lP34JlH78BLT9yLl5+6F88+cisev+8GPHzHVXjw1ivwwC2X496bL8PdN1wsGcEP3XYNnrjn + Rrz02F14m8d5jcd48v6juO26i3D06vMJ6tArqGUvO4hLD+/COTvXYPuaSfKSdiwdbMOK4Q5qvDZy4UZ0 + 1OajKN0Gj4HXTh0BM+OtSRsGo5atLhw2UwwcvK4OXnen8HDM4UgwhyHJEoIsW4jkFZYnhqM2PQpNWdHo + ypdhoCgWE6XxWF5JfVHF8aZOi92NeuynHjjSasTlbUZc36LFndQbT7Sq8Ua3ER8PmvHVmBk/jBnw/aga + 347G48vhmBlE4cuxKHw7FYPvpqPxA3FsSoYfJmX4boLLE7H4cUqOnxcr8ctiDX5bbsCJlXpgDVtqwxMb + Hfh1gxM/r3XMwCm9/m0T128y45fNRhwjPl+vx0ertHhtJBaPtgXjlvIFuCpvDi5KnYXL0hbg+vxg3FUp + w8M1sXiOuullxqi3OuV4rzceH/Yp8PGQBh+wfatDjpdaqUFbRanoODzYqMJDTSY8Rg3xRHsinmhLwpMd + KXiiJw2P9aTiUeqSR/rTcF9fKm7vTMSNLS5cXe/AJeTKl1I33NqXiydWNGJWZOhsxJKcKOV+UMcHwEgS + 5OQNmEFxnZdnI4l3oojiqCjfhBwSs4yUWCS5vNm/Nr0fLFpvCWhh4iRYAhnYw5GTFIPi9HiUk8xUpitQ + nkJBIUxhewiyLQHIsQYij9sW8BhFDOTFXJ9v5nqzH8oSwlDLQO81gE1oLqdoYQfITQlCtscHuckLUZ4V + iKbiCAqhWIw2KjHBADROwTnCoDFcJ8pr/m7+CkO4n0G7pyIcXWURkvHbRdLiNX/DJAgDuLUwUDKBxZwP + ogy0VAo6dyE683zQXeiDwbIgkoRgTNeHYaouGKOVfhgu98FktT+Wkyisbo+WTOCtvGC72OH2T1ulLGBh + AG+jSN7Yr8PKNpKFXH80psxHS4YfyUMURoqiMVIQSZCMFEVguCQGgxS9PaJEZXooqkioCszzkKGdTXI6 + h6TWBxkOUeo5FGnuMCTbgpDM8yiQZOEyb6IkM8mdyMY1h0iGrMUcxAE1EHpTkJQhpNYHSuWf48X8v+oA + L5T+pyAMYLMxHC5HLBI8CiQnUrQlECIrPFEtIT1RKRnALjE/oDGQ/caHIPHlsstGIu2Okkzg7BQZ8tgX + iikghQgVpahK8nUkjUoSxXip/FRuTjxysxXIzlQiM0OD9DQt0lN1SGUfdDnipTKR8eyfsuiFxHzEk3yL + uapt1mip5KTbo5KQkCDmI9SQGKthF388c6BRKsUcwr+XgP6/GcCxDFIaYepqvHNfaLVy6am4aL4XE+1F + rCyYnx8OjSJqZi7fGJgNcqlMisell5DoMSIzxY6cdBd/oxu56V5kpzl5zoy8X+IlA1gTFykZwCaSNrtR + A7fViCSnRTKAnWYNrCSNwgQWy/9pAKck6CQI81cgK9mA7FQTCoSRm2OXTOCyAhcq8h0SKvNtqC50orbI + hTqivsSDRkKYwcIYLsu2ojTDTIJtJem28b61SSZwSapBMoALU7UUKBpkJymR7orjd42B1RQFC8cKu4t9 + JE2H3HwLSkkQy/N0UpnccpL+KmEAN7iwb0UtLtjehXO3dWLHqloMtHhQwPeTbAFwmvwYDIK85q8jBCID + 2O4KI4J5fU8KlAVIdsxBjmsWypNmk3T7YR2J3dWbtXjuyhT85f5SfP5sHX58qxG/vFuHX/5cg5/+VIZf + /1yCEx8U4be/FgD/LAI+YftFrhefZ/N1Ck78zYZfP1Dg1/ejgfcjgD8LA5jLL6lw4mErfrjJjn8cseCZ + tUpc0haELaV+mMoLksyv7lwdOjhOnjSAO7KS0J6RjObURNQlulDpsqLSaUS1x4yaRCvvZzPXGSlkDSjl + tSxJ0CLfzb5vjaLw9EWOaQ6qEmZhgoLk0rUavHlpEr6+Mw2/PJGMn54x4qeXVfj5bTW/LwPRX23AxwnA + hx6ceMuCn1+04McH7fjiehf+tNuKm4bisKIgGHWuAGSp/eCR83yS2Nv0MTzXURR/MthIutQUvxrCTJFs + IkSpcgcFtMuugcWkkB5yEA89yGJDpdIwUcpwRKq4zH2i2MYoQyFXhkClCIWR5M5B4ZBK4ZBDIV7MvlGZ + IEcN+0F1sh/qUxegJXM2egpmYapmPrb1h+DQ0mhcvjkWN+6LxoOXM9DdqcKHz5jwzzeM+OYDBvC/mvEj + r9EPHzqJRHz1lhMfPqHFU9cpcd0uHcVHDAbKFqEqbTaF/ywkmxdIBnCimBv9NAP4JPKSFBLEcq4wf5Pj + kMVzkUpBmWjyGsCihP7pBnBFZhwqM+UoTqUozYxBY0E8WstElQojOquNjEUGQo+2MjUa8ilUMxjTkvwI + X+QlemNWe4UMvSIrtUGBSZKUFV16rOk14IwuNZa1y7FYZAE3xWG6OY7LKskAbkz3QX0a41FOuFTGuCNf + js5CJTqE4UuR3VmkRhfFflexDl0l/PwCHZopSOs5ltakivMey2No0FFglubzrWIsLnZRZPNeE4ZZAUV4 + sSdMgpifvzJNhjqOyS0FarTzmO2FWukJ567c/zSAo9GdEY1+Lg/xPhjJi8RkIUUzY+yKqiisaYzGupZI + rG0O8RrA3VHY2S/D7kEZ9pGIHZpS4dC0WnqI49BiHc6e1uCsxVrsXaLB5vF4rCVhWtkvx3IKmeX9Cqwg + CVrNdnWvDEuaAjFZOw9ntC3E/qVxuGiTFedvsmHfch22keit61bijHYFYzXPdYX8VAlokfnbkB3uRW4E + Gvmdm3Kj0cjvX8d4W5vFPpodhaqsSJSnR6AgKRjpDh+kcfxJc/pz3AuAmO/3pAFcwv5QlC5DISGMYZEF + nMIxS0yB4bb6w85YbdEvgkG3AGrlHArs2bzXuKzzoQAXxi2h9UIYwKLV6fwZ2wKgN7AlDBwbT0JvZNwj + 59KRcymV8yUDWMsYLkxjkzGI24QwzpNkcywx26Kl1mCLmjGAGSdTGCfZF04awMIMdqTE/8EAFlnCJw1g + oyXMawI7eDxHpASLOLZk/EbCZI6A0cTtCIPRu2whsTcTOr7WGMLZRkvz/YoHRGLJL2Nkvoypfn8wgAU0 + 2kD+Ln9olDwPivls5xCzYVTPlx4wdFj84bD5wW7zhdW8EEbDXFiM85Ho9OO5D2ZcCEY+eVERz3uFyR/1 + pkC0Er08N4PEqDkUo5ZgjFlDMEKRMWrn6xmMEINc18+408f7vov3Rgs/r9bkg2oer47XvJH3vSgvV58l + xoEYxrcYlOew5b1eXRiPulIVmjkGdDVY0dPMeNAsSnqa0FFnRGuNAW1VvD+r9BioM/P+dmGyxoo+3k/d + SREY4tg4nRaF1bynThrAOzl+7Ez1x1aOHZsT5mGTey62JM7F7kw/nFMYhsMloThU5I8jxT64pMIfV9WH + 4Ma2aNw1oMXRbhVJfjjOyvPFRs8sbHDMwmbXXOxN8cd5mWG4IjcK1/JeuDEnFDfnBOI2ct87y4NxX30k + Xhy14uVJiooBI25qkGF/5gJ+ttf4XU2ssc/CRvdsbEtegF0Zi/5gAO/KW4T9xf44WBGEI+TJ57WF4aLe + SFwxLMO1E3G4ebEKty3R4fZpLW6ZVOLGEQUu64nCua3BONDggz3187G3cT4OtC3COcT5/cG4dEKGCyfk + ODwqx35uv2/CgDPJq3cs8WDL0hRsWp6N9cvzMTWSivYm8pZiNfKpH/IyyT+KjWisT5DM31qKnvw8jvcc + x/JE1hvHyLwspZdzkp9mpjMGUK+cNICF+SuQnWtEZU0S+ocrsW3XJK696QDuuPci3PvQ5bj/kStx30NX + 4u77Lz1lAHtNXy+uv/mgZP5ed9NBvj5XMnJPmrz/zQD+z/XStreeh5uPHsGtwgA+eh6uuWwfDu5ehdUT + 7WivymI/dGG8qxa71k1i94ZpqQzX+iWDUgnoy8/fheuuOICbrjkbt/J73M7Pv/W2w7jtTm8G8IMP/54B + LBnAd58v4fZ7LsCdd5+Hu+46gptv3I/LL9mC/bunsXPzGI+5Dbdedy7uvP5i3Holf/MlF+K6887DJfv3 + 4siuzTi4dSX2rZ/E9jN6sXayASuHy7F0oAgTvdkY6crAQAfRnkXkYLCjgOtKMNFXiemBWiwfbsQZIy2Y + 7KlBX0MBY2k6movT2GaiV2QA1xdLBnBlmgNF5L4lSSqUJkShlTFpSY0ee/ucuHZJEh5cl4ZXdmXhz2em + 4/3tHry5zoAnJ6Nxd08wrm9YiMsr5+Hi8nm4iGL8cP4sCZdXL8TdAzK8vNaG1yniX91gwSvc71UxD+46 + LV5YGYenl0XjyekIKQtYvH51vRpvbtPi7R0avLNDhT9tj8Oft8Xibzvk+GSPGl+epcfXB+34/IATH+0x + 4/WN8XhkSSAemPLDA4sDuByCF9fI8Kctavxtl/6UAfzd+TZ8dUiDr89R4ofDGhw/oveas+fZ8Nt5IgPY + jWMiA3ifHl+dqcKXu+Px9d54fLNPccrwPWkA/3BAI7W/nWcBLhT7kyeK7OBzDTym6T8MYJElTA550Ilv + 93rw1c5kfLsjF1/vLOTvKcEH+8rx+JYcXLPUhbP6Gae7FNgoymkOW7GKPGZ5px7LWjTSH8LLW7RsNVjS + qMV0g46x2ICpej05jR5jNTqM1OowXKPFENE3g+5KFVoZq2uzI6k5RFl/X0n3F+dEoKJYjtoqJZoa9Ghv + 4xgryiv3uTE6mER4MDaUgPEhDyaHvZgeTSaSsJjjgmT8jqYTmVg2QgxnY6gjWZpHNzeD+jMlDqWJCjRS + Qw64VFjqUnPc1ONAohlXeOy4LsmJa3IScUV5Oi6qz8LBliyc2ZGOTT1pWDmQiSWD6VgylIqp/iSM9Xgw + 3C2yf93obrFT68ZSy4ZIGXf5eeRjtWY0tzo5JrnR3CwMYBchWifamh1obXSgpcGOVqK93o4OYfZW/Y6e + KocX1U7yTe7HdQJtlVY0l5kIM5pKhRlsQV2xCdUzJnBlsdYLsSwZwhoJ1SUGVJeKuYN13vfJK6sKqNUF + 8hSo4HhZmaNADcdLCblq1OZpUE9OeBJ1AkU61JCLioehKooVKCOEAVxUYEBhnhEFuSbkExnkHKnJYj7J + eCSKh8vN0bBpyRsU5C2yUFiiqf2os52EKyoMydFhyFfK0Er9NJbtxhkFiVhbnIANpW7JAN5Z48Y2/v7t + jKf7Gt3Y3+SWzOAdfC1KQ+/m+d3R7sKGFjNWNbOPtuixpI3oMEpY3GWSsLxHTFUk5ul1Y82AB2sHEySs + G0oikv8nhlPIUVOwZjwNa6cysG5ZDpGF9csYj4gNxMalmdi2NBvbl2RgB9/byVi1a0UOdp6Rg+0ruJ7Y + tpzbcN+t3G7TkkxsmEqVSkgvG3Rx3HSyX7kkLB9JwAphEI/z/Yk0yQAWrXgtTGGv8es1h8X6FWxXTqZh + 2TjvAfGQRJ94KMEiQcyPLYxfgeF+rhctMcJtRoQJTIx12zDZZcPSDhu1iQ3LiRXCBBZmcCPPF+/npVVa + LC5TYrIgFuN5MacM4LGsGEywneK4PEU9MUWuPH0Sp5m/AqfMX+qrMWI0SyHNATyYrcEA429vlhEd6Xo0 + JWt+N4DdGhS4tTMQywTX5zu1yHFqkH2aEZxuOWkCy5FsiEGiPhIJ2gh4tOFSFnCCVpi67GdcFhBlodMN + UcgwCiM4HKk6gVAk66kLiRRtCBKUgf8rA1i8NkWTq0YugDFqIQzRwgSeC300eW3sPOhiZksGsJs8P8sT + 818NYAu1rDCBjeb5Ek4awM6EYCQke81fgdT0aGSQ9+Tmkf/wfizivSwM4ELBh6gX83JjkUNuKcpAZ3N8 + TUsLQWKCH9xuPzipcVx2wrEQSQkcc7NFBnAMx1th8ipQXxONqoowVJIjNtRR+7Wr0N2l4pgVz9dxKCuK + RGYq9bZTGMCLkEPtVMbPrOH4WlNmQHEueRW/Y5rI+iWXFkh3enHS/E0X07uQfwsTOFtkgrmpsYShy/5T + nk6ezd8mUJ4Rg9JUniu+X+SKlKYyKndzvSsKZW5qWGcASt2+qE72pW72QWdeAMarIrGsKRZrxUPJg1ps + GVRiQ28M+7Ko5OiDCWJpYxBWtUVgTVc01nR6sbozCquoYc9oJBq4TG2+tFaG0aJwDOSEYYDnsic3Hm2Z + 8ailjirxiNLjUfDoImDVREIf503y0OvkvIZqmE0aaiYNdZxSMmKFySqyf083gIXhKyCWpUzfSO+8vWKb + k9nCcnm09FqCyOAl4jhGCuP3dBNYo1dCa1BTg/EzTVqp9RrQ3jLU4jtodH80hEVFQwHxWqONhckUDw/v + q+x0M0rzrWipScBwezpG2xMx2mzB4lbG/x4zdg5Tfw9bsKWJur/MB5tLyONr/XBRU/CM+evFlcIEbpfh + 3LoIbMpdiGHL7wbwgHkWVqZTB5RF4byGeFzersQdw0Y8sdiBZxZb8MS4Cvd2heDWhgW4o34OHm5fiKd7 + A/DiCHnUcCie6QvG3bVzcVf1Atxf54+HmsLweGsUHmuMwEM1wXigPAAPVJB/VQbhoYoQPFwRSoTg/lJ/ + 3FO4EHflzsXtGbNwd+Ys3J83B49SWz1bE4oX6sLxXH04nm+IkNpnuO5RapwHSsjjSnx5rEA8XhWGJyuJ + cn6P0hA8X8r92L5SGozXy0LxVnkI3i4PwrulQXi/JAgfFAfhQ+ID6qUPS/3wNx7j71Uh+GdNGP7dEInP + eY6+7JJJRrAwgb/gefuiMQyfVfrjszJffFG2CF9X+kkG8LH6UHzP/vudAH+zyAQ+3h2Ln9nXj/G6fDJg + x1vtFjxYpsZVvJ8OUNuvifdHd8AcVPnNRgHb9MA5cIVyjIlYiPhoX0TGBCBcFiSZvwHRgf9fGcDStmwj + IoPYp0U/DoFcFg5lfBQ06hgY9LHQcUwWmb56E+8XCdGnIMxfi02OhCSO/y1lOHDOdjz34sP46puPZ0zf + b/EbvvPixA//YQJ/j19EluyJH/H1N5/imWcexZ692zE6MYS9Z+3GM88/hW++/5L7/u8M4ONirmDJBP5e + MoC//UkYwF9LGcBffvUvfPrJx/j073/BJx/+Gf98+y289dgjuP+yC7F/ahBn1OVjZWUq1temYktjDg4M + NeCmnWvw7sN34bP338Qzj96LXdvXo6mxEtXVYg7gYtTUVKC7ux1nnbUXr732Mo4fP0Z85zWATxzDr8e/ + wfFjX+L7b/jZ/3of77/7Ml574XHJAH7xqfvx8jP34YUn75EM4BcevwvPPHwUj917HR687Qrcf/Qy3Hf0 + Utx9w0W4/drzcce1F+K+m6/Ao3deh5cfvxtvPfcQ97sHD915DW655jwcvfoIcS5uuvIwrrpwLy44sAV7 + Ni3F+qUD5LyNmOxtwHRvI1GP8e5atFZmIy/ZBIc2CmZFGIyqUOjVIdBJLTke46vNHAubRS4ZwXZzBBym + EHgMAUgz+EneYIkzCNWeYNQnBTP+h6IvO5z8IhJLCyOxujgaWypicWZ1PM6pVeDCRjWuadbiFuqOB4kX + OjR4r8+AfwwZ8M2YET+MUQdx7Ph+TImvR2NnEINvxmPw7UQ0fpiMkvATNeKxsWh8PxoptT9NxOCXqXj8 + Mq0ClulxYqUBWG8GNtqALS5gkxsnNnq88/6uc0kG8K9879ctJhzfZsCxrXp8uUmHf6/V4r3peDzfG4YH + Ghbh9rJ5uD53Do7m++Leigg82ajE860qvNWnw/sjBnw0asQ/p0z4N/HJpAkf9MXjxfowPFEdikdqo3A/ + 4/FDDSqObRa82J2MV3rT8VJXGl7sSsdzvRl4pj8DTw9k4MmhDDwymIkH+tNwV3cqbmtPxnX1TlzXkID7 + horwwqpWzJJFeLN/tcog6FUhUqq2xyH+CDGSvLtQXupBWYkDxQVmyQBOS5J5s0qNQTCpfWDWLILd6IdE + KwO5KwKZiTHIF4Iqg8IhU4lqEpryNAbHhEgp6yjT5Edy5Yssgy9yzAEosIegxBGOYqKEQb06XYbGPCVa + iin0KsT8aUYKkngUpIrMGz+KNV8pm6o2LwStpREYqCVxbFJgqlWDcbbDDXJvNnBNDAaljGAZeiui0FUW + js4SkfVLFIejvUgYvyL7VyAYrQXCBA5CO9vOwkB0EZ0F/ujkReou9MWAZACL7N8wTNaFYKTKD0MchMcr + fLC4LggrmsNJMKKxsU8hzQcsMoHP5AUUJaA39WuxrltNQaxAe7YfqhPmEPPRnBqI1uRAtHj8CB+08Pe1 + pgWjOTkYdZ4AVJDoFZEAZuvmIFU1m+RzLjLE/BckUBkuYbKGIYWkKcUWSpDQmYPhMQbDrSdBNQTCrg+C + RR/AgdYfWr2vNP+vhu8JA1il9fdCzWVCQ6gFRAnoGQNYZP4K8zctVSc9EJCerEUaifjpBrBT/Ems9WXf + IcFlf7DyJhYZwSkkZ2kektLEKGSlxKJAPElMYioMYFGGSvoDLnOm7FROPMWhistqZGZpkUHC74VBMqDN + DAwqRQDksYuIhfyOfjAaQqUMZYcrTsr4FXCKLGVhVqfo4faoYWXw0FJcxshOmr//ZwNYmL/y2DAoFdHQ + CPJEiCzfGL4nBbAIL8S+8thQqOJFCWeRBRwDi5Gfb1Uj0W1EcoKJAtdKEuxGQXYiCnOSUJidTCQhPysB + Gck2uCxqnq9IyQDWxTPI6VVcZ6AgNiPZZZWMYGH6WvQK2EgWnSY17znNaQawMH/1fzSAU4wSctONyM+0 + oCTPQThRnmc/ZQBXCQO4wCGhjqgvcqOuxCUZwOVZ/2kAW08zgCkkxPwfyRRWovS3LZbfKQomXSSMxhjp + CS0P+0QmxZoQ+2W5OlTnUABkyFGXKuY1dWL34koc3tiGQ1s6sO2MWvRRqIv5M5OsAXCZ/WG3sN/Yg6Ty + pqLsqZX92uoIgt0p5nr0Q4JrIZIdcykQZlHszUJd8gKMlvvhzNEQBlMNnrosGX+6swifPluLb1+rx49v + N+Dn92px4q/VwN/K8dvfS4B/lwJfFAPfFOCEhHzgq0zgEzd++6cBJ/4WjxN/icZv70fj17dl+O1FNY7f + Z8BX1xjxl7N1eGxFLM5v9MOmYmEAB0sCoCtXZEdaCSfac9xoz0xEe0YSGlI8DGA8j04Lqp1G1CZaUZ9s + Rz3bmgQzxawZFR49xYooZSVHlikcadpFyDfNQV3CLCxv8MeNWw14//p0/PBwNr9LBn573Y7f/szv+RED + 0T+s/D1OIhH4mIHoXTN+edmE7x404Z9Xm/DCRgUubg3CZOYiVJgXIUNJsSfj2KCMhYOk381r6OH9bbVE + 897iGBAfCJM+in1ZxuAcxxigoqDTMjgr2FdjoIwTT6QGIyKWiA9GuJKtkmJFEYpoBYkdW5UyDGa1DB72 + 2wwzxblDjzKPmLtJy98ez2sWwf4QgIbUBWhMnYPuvHmYrvXHuo4gbOn3w54pH1yyLQh3XhiDZ2/T4u3H + jPj7yzZ89oYTX/0pEV+9k4ZPX0/DXx6nILhRjhv2hWHvpHhK15/nfy4qU04awPORZPGRqiMIAzibAvGk + 4Xu6ASwgzN/sxFjGLvZFjqP/zQAuSY+TnkCu4lhVJsyfLJEBHIfmIiVay3VoqxCxSoOOCi3ay9VoLYlH + fUEMqnLDuW0IilP9UJlNIlMZi8F6FUab1FjcocfKXiPW9hl/N4BbvXMCL6XAXtahxWJu15YThOYMxois + MLRSuLfnySQDuLtIje4SDXpK9OgtJcpNbI1oL9ShNVeDFqI5W4WGdH6XNMbTHH7PfB1qxYNZHJPFg1f5 + jkAUUZSXeEIllCaG856VoYmCvaNYi04et6NIg+58Io+Cn+O0MIDbs2LQwfPQlR6F3oxIDGREYJDfbyQ7 + BBMFwZguCcHy6nCsrAvFmqYQbGgJwRYK610DcuwdVuDsCS3OXWLAuUuNbI04OK3H3jEVdo4osHk4Fmf0 + RmJxdwSmu2Iw2RWLqe54THfHYRlFzfLOSEw1ikocCynWA7B/qRIXknSdv9GBfSRp20Y1WNutxIo2rwE8 + UC5DN6+FmP+3MSsctZmhEmqyw1CXI8zgSNRlRaAmMxxVGWHkLBGoSA/jNQtDXkIg0uyLkOrwIfy8JrAz + WDKAC1JjJAO4mOdLZAKLLODshDCki5g8YwA7LL6wm/x5T/lAp5nHmDIPesZhYexq9X4U4SJz10eCZAJr + FkIjsnkJtTCECZ1+4e/Q8n01uZqaLeOtMIItxhDYreESrLYIWK3RFE3RMFs5PksGsMgAJslOUHgN4DQt + oYEnXQtnqopQwJEshz3pdzg8Mu4TCYMllCCBtwqEe2ESRq+AWA6XjN+TkMxgszcjWKMPhVITDIUqWMr8 + lYtpHOL8JANYJvfnem8JaBW5hgTBPTT+jLk8D6r5EjQ8Z0bDIljIGa0WP7aLyAXEH2ILpNZuZkwQD7eI + 7F9XMAqdISi1B6PKEoRG8tFW3ss9xAA50Sh/y6glBGPkJsLwHSPf9IL9lvf6sIAnAsMJUeh3R0iZwE2M + TY028rGECLRTOLfx/m/OiWNf4b2dLUNljgxVebGoKWScK+FYUK1Hd4MVvcIAbjKjvcGIjlo9Wqu0HCPU + 6KrUYrjegmWtHiyrd2CY91lfEj+TWJwahTUZ0dicHY1t7Kc7MoKxhVx3Y8ICrHPPxVrXHKz3zMFuct9z + iiNxhJz23NIQHC71wwWV/riyMQQ3dETjztMM4LNzfbCNsWQb99uT7INzs0JxaW4UrsmLxrU5Ebghh/vk + BOLmwmDcVh6Cu+qj8MSgEU+OWnFvtwZXVEVgR8ocbGDMXeeYJWUSr2a7wTMbWxh/dzK27MwJ8CLXl/DB + niI/7C8LpDALwaGWcBzpjsJFA7G4fDQe102qcfOUDkd5/9/I+/2awXic3xaOs+r8sbtqHrZVzcXOGn7X + hgXY17QQh7qDcMGoDEdG5RTNcdg9EI9tgxpsGjZi/YgFK0ftWDLswtRQEno7yGt4ngtz5eRYkUinTinI + UVO/WFBTZUN5mRE52fHI4jienRUvVaARDyAKA/iPUPM9LXI4Xgpk5xpQXulBd38J1m8ZwpXX7cFtd5+H + ux+4CPc9dDnue3jGAL77Atx8+7m44ZaDp+A1gA/hupvOwQ1HRRbwTCno28/H0TsukPD/MoBvvm1m3t7T + DOBz96zBhsU96GsoRENxKpYONmPPhsU4k9iwbBCbV4zg7N1rcNVFe3D9FQdw87Vnc9/DuOPW83D77Udw + B7/rvfdfgocfvQoPPX61ZAKL0s8nTeD/kwG8Y/Morr54J+686Xzce7MoIXYJ7rzmUtxy+cW45sjZuOTA + dpyzdTl2rRnE+sUtOGOkBkv7SzHVU4CRzkwMtKWhpzmFYNuUwfskG/2t+RjuLMZkbyV/Rz2WDtRjoqsK + A02F6KzKlszf7socDDUUY6SpjDouB1Vp5LaJ5E5JKkk3dvC6rm124vzJTBxdmYXHN+fi7b1F+OtZ+fh4 + byY+3O7GG2sMeHpxPO7tC8cNzf6S4Xth2QIcKZxNzMKVdT64d0iG1zfa8fY2F97cYsNrmwx4bYN+xgCO + x1NLY/D4RDienI7Cc6IM9Bolt9Hg9S1qbq/E21vi8N6WWPxtuxyfnKnBl2cZ8M1BO7444MRfd5nwyloZ + HhhfhLtGF+Cu8YW4Z9wXz6yIwDtbVPjrTp00V/C357vwzRELPj9Hjc8PKLi/Wpqr99ghHX4814SfDztw + nMf8fr8J3+zR4cvdXgNYmL/f7lf+bgCLLN8ZA1hk/EoG8EXkj2x/OdeI48TPPJ4wlgV+nDGAf+L7xw45 + 8fW+JHyxM50oxKe7y3keq/DOvmo8uDkfly1JwK4+PdZ0arCm34IzBh1Y2mPB4k4TFrcRrUapnWY71WzE + RJMJEw1mjDeaMFpvwnCNCYN1RI0R/UQvX/fWmni99ajNiUF+YhB52DzYtXOQaPWhriFHyZejmmNoM48j + zFIxl+5AXxJGBpIxOkgMJWN8KBGTI15Mj6ZKWDySTmRi6WgWkYNlo7kcM/LQ25KIsjzx0G0ItXIoUvXh + KDHJ0ONSY8qtxdoEI/am2HBJshNXkctfkZeCSysycX5DDg605uDMrmxs6s3G6sFsLB/OwvKRLCmzeKov + BSM9Cejv8KCt3sZxiHrGMp/xa6E0T2dxsRqNjU60tSaitSWBv8WDjjYv2lvdaGt2o7XJhbZGFzoanOis + dqC72o7uKgFh/vK3V7uktqvGiQ6+L9BeaUdLucVrAJdYZwxgs2QAV51mAFcVUZvxdY1o+bq+1IC6ciPq + KkWrQ10p1xVrUFui5TYaVFOzV+cJ01eN+lw16njOGrmugZywgW0j+WaTQLGe+3HbYiUqi8TDNwqpFHRx + vgFFudSFOSaOzWbkkHtkkIdkiofJ3fHk3HJpnjirJgLm+DDYqK0d1NzOmBA4o0OQxOUseTjqqK+HMxxY + UZCAdaVJ2FTmkQzgHdVuwsnYYcWZNXbsqbVjd51DwpnUmPs6E7GnOxGb221Y02qSSkALA3hxuwHTAh0G + THUaJBNYZAQv77ZjRY8Dq/qdElb3JxAerCTO6PNiRS/jN1sJgwlYMZKCVVMZWDWdiTVLsiSsJdYtzsCm + 6Sxsnk7DliWZ2Lo0CztW5GD7yjzsWDUDsXxGAdsCbFuZjy3Lc7FOHGs8mcdNxPLRBCJJer16MhVrRKlp + vr9WfNapNg2r+J4oC+1FGs6YEN8p3WsCc/9JkSXfZ8coMcbfNSaVTnfynvmP5QEBByb6HZjusWNZJ9HB + ONvhNYFXttmwSpSDFmWheS+vqNZhSakSk0VyTOTLME5ONJYdg1FqhHFiMo36P+V3nDR+JaSfNIDlmMyS + Y4xxeTRbgWHqlsFsNQaytejNpgbJ0KIpWUU9zXhOlCZqUJykQ1GiDoUJjPkzyHfryAM1yHH+dwM4xRgr + ZWcmiVLQUksYI5Gsj5DmBE4mUsW8wNJcwd4s4GSNyBAORoImAInawP9qAFuF2UuI1i73kyAMYPHaKozh + GB+YuK0xZpGUASwMYINsrmQAm+LmIsEYhKwEmTQNUQG1ZnZSDO+NULjtAdI0J1YLea91IcyWBZIBbLH7 + wcWx5HQDOE0ygGXIzhEPualQSH2YX6BCTl4csnKE+Svm/41BHrnfHw1gX7gci+CkznHaF8DjWojsjBAU + 5UdzvFWgqV6Jhlry3Yowcqkg1NVEoLNdiZ5u8tlOFcctjg2VcuRlBSHZswCJ3D8rleNcnhxV1KYCxbnk + XfyuwgA+iXRhAhOnG8AZbDMdvN/JxXNcotSz0GHUWexDpWkxM5ChNCUGBa4IyQAudESRAwhEoIT7FFMP + lLh8UOaehwry5tYMH0xUUos2x2EjefHOET2hxpZ+GdZ2hGF5UwARhDXt4djUE4MtA3Fe9Mdhc58cG7pk + WNMWjVXNMVjNY6ygphwvFZWvQtk3eS6y5WidMYCLE+RINYbDSV1jVIRCzbFMrYikdpPDZFLDbNbyGmph + MKkk81WUgD7dABaG7+kG8MmM4JMGsJgv+OScwAqFd+5gYfyeDoWa22jipexfnVENvUkDo0UPs81APWjw + fr7Rm4lsmMlI1huUEkRmsij5LKDnsk4fB4tFgQSX1wAuL2QMakzFVC9jaH8mlvUmYlWvE5sGxNSFNuzs + 1WNddSjOyJ+HtXlzcCb51UWiBHRbGK6cwTWd1B/U8hc0RWNrwSKMU0/06Gehkxjl8tpsf+yrjMHhOjku + bpLj1gE9Hl/swPPLHHhm2oD7ukJxa/0C3F4/Bw91+OCJvgA8OxyM54ZC8FR/CB5o8cH9Df5EMB5oDMdD + jRF4sDYM91YG4q4SX9xZ7MPWD3cXe3FPiT/uLuL6woW4PXcubsmYhdsyZ+GuvNl4gNs+yd/zdF04nqoL + w9P13vbxan5OWQD3X4Q7ixbgnlJf3F8eiEcqQ/B4RSieKgvBM8Tz5aF4sSIEL3Pd62zfKA/C2yUBeLc4 + AO8VBeLdQi4X+HDZB38RGcEVgfi4KhT/qI/Ap20x+LxTIBqfdUThi9ZwfEmN91mVPz6r8MXn5YvwVaUf + vqsJIgLxda0/4Ydv6gLxfVMofuQ+P/Yq8P2AAZ8PWPB+pxlPValxNDMWlybG4CxLBFbF+6MvYgFqQ2Yj + L2AWUkPmwMbX6mgfyEQWcEwggghhAAcRfzCAQ//vBrDYLjTMX2ojZkxgAZFEFRcbIWUBa9RRvAfC2VdD + oOK4KiAqhQloOQ7rOB7bHNRouS4MDrXiwovPwutvPo3vj/1bMn9F6edfRSbw/x8M4JMm8I+//IBjx7// + gwH81df/wqczGcDCAP7HW14DWJSAPrB4GKubirCmJgObGzKxoyUXh0aacPTMDfjgsXvx9d/ew8vPPoqD + Z+1Cf187Ojqb0NbWiK6uNoxPDOPQ4QN455038MsvP0HMAyxKVuO3HyUD+KcfvsDXX/wDn/zzfXzw7it4 + 6+Wn8eqzD88YwPfipafvmzF/b8MT99+Ih+68irrtEsn4vUuYv1dT311xEDdfeRi3XXO+VBr6hUdux6tP + 3oMnHrgZd9xwAa67dD+uvWQfrrl4L6688Eycd2AT9m9fgU0rhsh5W6nrKjHcXoFRYqxDLFeiqSwD2Ql6 + WJXhMMiDoY0LhkYRBHW8mCYwBAZNJMymWI4tsYxtMbCYw2FhDHTofZGoW4hMow8KrL4ot/ugzuWL9qQA + DKQHYSIzCCtyg7AuPwTbSyKwryIa59XE4vKGeNzcosLdLUo8yXj0eo8Wfx024pNhHb4Z1eH7Ma1kAP8w + zvthPH4Gcnw/GYvvJ2Q4Joxf4qeJaPw4Fo0fRiKl9jjxy5gcxyficGKJBr+t0OPEOjNObLThhDCAN7tx + YlMCftvowS/rXfhloxO/bKK+2kJNJQzgbXr8sN2Arzbp8feVarw1KkrRh+DRBj/cW7EID1UG4+mmWLze + rcefBsz4eNqBz1a48MUZHny9yo2vznDgq2V2/HVQJRnA4qGT+8uDOZZF4iHG5adaLHhrIAPvDGThje40 + vNyRihc6U/FsTyqe7k3FE71p3kzgvnQ8xPH6gZ5M3NGShDta0/DUeCX+tLEHs+KjF0EV6y9l/poIB8lP + sphTI9uCsuIEVJYnoqLESTJvkQzgZE+MNNerTWSqKBbCqF4olW8Vf6DnJMcil4GwMEXBoK1AWboClaKV + MoAjIEpApxt8kKZfhAzpQvshzxrEgB2J8kQZhX0cGik02ikm2kqN6KiwoK3chLpCCv30COQlByI/1R+l + Gf6ozPJDXW4gOstEKWgSzyYlxhqVGKr3loIWcwGLzN++Shm6uY2U8VsURoSjvTAMrQWhMxDmrxfthSHo + LApFd3EoekpD0VUUhM4CX3QW+qGvLAijHJwnGQCkuSGqAqQyrSNlC6Uy0MsaQrCqNQLru2OxuV+JHWMk + GuNGbOhTkTTHYmkTCXF1FFoyFqHUOQvF1tmodCxANYldpXk+MU9arnb4odLuTzG6AAW6+cglsrXzkKYh + 9CRX9iBkCgOY5EhkW0tz/TrY2sIomime9EGwk6zatAEwqwNg0PpBo/H+wazWitZfgkYXCK0+kEREZN+E + MNiTrGiCpAxgYQafNIDTUrTIzDAiK82AzFT9KQNYlIBOdsfBLrKOeHy9muSWfUGUgRb9I9lJUu0WJnAE + 0hOjKPxiIcpAlxUaJBNYMoBJ9vOy4pCfHU+QrGaRuBMZGb8bwMKAtlmioVUFIj7OB0qFL7Qafw4g7Kt2 + mTT/oNUWI5WmtIv5iT0KklsDSbEWTqcgNiRXsSLwnMwC/t0A9ranG8DeEhWKOAYmUUJFEYWIqGCEhnvn + OxCIihRzCvO7xIZxQIuUDGCp/LNNI2X+piZbkJnmRH5WIoVvMkryUymCBVKk11mpDngcWph0Mmjjo6Ty + zw6zDgl2M8+X7ZQB7BAGsC6e5zNeygIWBrCYA9hrAOuR4jEQvxvAGckGrwGcJkxgEwqybVImcOnpBnCB + nWLeJqEm14baAm9GcFX+6QawGRUZFsn8LU81oYTXvDhVi6IZAzjDFct+Jur6h0GvCoVOlHcwyyQjXszt + lJ+pRVm2hvemGo1ZFBDiCeBaJ++FUpy9uglnb2jD5qXV6Kx3IDMhTJov02VmfzVTOFkDYOV4YLGw73Ks + MNu4nmLHIRnAPuxT89n35yKHRLHMPQft2XOxrH4e9o0G45rNGjx8YRLevbsM/3yyBl+92IBjb9Xjt7/W + A/+oAz6tBb6oAr6pAL4vxQmBH4qB7/KAL1MIO/BvLX79SI6fP5Dhp3c48L+oxrd3qfHJpWr86UwF7p+K + wOGahdhQ6IOpvBAM5Magi7+zI9+C9jwr2nOcaMv0oFWa99eJSpcFVU4zat0mNKbaeS4caOH1r0+yoi7Z + ippEkQmsQK4lChm8D9NV81FknI2mpFlY30rCuseKv9+Ri1+eLQLe5vf8IJG/xcHfYgE+cwKfu4kkrnPh + tz8b8fMrenxxnxrvX6zAg8uDsadsLgYS56CE40e63BcJJF8J8XHwaJQ87wok2uNhpRhWUqgqZL68f8Ng + 1kfDZpTBY41Hgk3FeBAHoyoaqjjeJ7JAhMeQ1MkDEBJPMqjwmsHRDPDy+FBolBGwaym02Xez2YeL+fsr + Ei3S76xPEiZwHOpSI/jbA1GfsghtWT7oK/LDEMfR/uLZGKuejfWD83DuukDcfDgGj92owRsP2vHBkwn4 + x4uZ+PcrBfjwySw8f7MVt5wTgbOXLaR4W4De/LloyuB4mjIHmbZZSLbMQ5L1dwM46/9iAGclxiKTMS2F + Y2iChUKfRMRrAIu5g0UZYI5bkgGsQBXHqUqK6aocOeoocEUWcFOxCs0lwvRVobVUhc5KDTqrNGivUDF2 + ifdjuG8w77dQyQAebtZgsk2P5d0mrO43SwbwSskAjsPS1nis6FDhjE5RGtqA5e16DJTFoLsgEh15kWjL + 8RrA3YVK9PIze0s1jEsG9JcbMVhpRX+ZmbFKw/6oRRfH2Z4SE5d1qE+LRwNjcSOFan1mnDRXkph6ocAZ + QBEdyOsURAQyRoegLjMGbYy3PWU69IoS1yLLOF8lGcCdJw3gjBh0pLPvp0WhKzUcPSkh6EsLxkBaAEay + /DGe54/FpcFYVhWMVYyL61rCsIVCZveAAvtJyA4tNuOCM5wSzl/hwNmTRuwYUmADBfhyivLxliCMtIZg + pC0Kwx0xGOmIw2iHDNPEkvZITNT7Y0mTH2NrGPYv0+AiEq8LNyfgrOUWbOPxV3cqsKxFgcnaOPQVR6Ez + NxJNmWGoTQ9GVWqghMoMLhM16aGoTgtFRXoIKlKDUJoawjEvGIVJQchx+7H/zBjAHIcE0p1ByBUGcFoM + SjLE3NBEFsU/l/NTYzimMe7NGMAuqx/jQqCUvWoyiEzgRTNz/AayZWw2+ENnYHw2+J4ygFVKLxSqBcR8 + qNUC82Ywn7GZnEtUXhEPWtlC4XFGI4n9O8EVA5dTZPbLpFhoNp80gLnMOO5KVsGTqoY7TTcDxkeO1+50 + 3uPJjDFJjOUCCXLYPDIYHRRgFo7vjO+irLSAVrR6L/SGUIIxwBAu4ZQBzNigN1DgcTyTKxgrZT6IImSi + goecMZhcUyYP5G8L5e8Nk0SfUjKBg6DUBUBJLqHS8hzwfGh4zsw8dyIemEwcn/QLYDTM52uRsRDA300+ + KeZldgcj3xOKYmcoyokaexha7KFo5/fvIfrJi4bZDlvDMCJgD8coOeeYKwpj7giMkKOM8V4fS4rGODns + MAVyD3lVh52ckONCJ9f3ZMShi3ylLYdjGO+RmmzyVaImV8Y4KkNDEe+NSi16683ob7Kgp8GEzjqR+atC + S7kSLSVx6CglP602YlmTE8uqLRjOkmMggd8lKRxLOC6uyYjE5uxIbMsOx/bMYGxO9cNaz3ysdMzBGfZZ + WOWcg93ZwThYGo3zKXzOr4rEkaogLgfissZQXNcZg9sHvQbwZTXhOJizCLsSZmFf8kIcyQ7FZQXRuLpQ + hmvyonBNThiu5Zh0HcXU9SVhOEpuenuTHPf36XH/oBFH25U4vywEW5PnYIN7NjEHa52zsVqYwZ652Jy8 + CNsyfSXzd4dArj+25/phZ4Efdpf4Yy+/1z6Kln0t4TjQEYFze2W4lPf4VcMqXD2owOW9cbigPRpn1wdh + V4UPtpXPxZaKuV4TuG4BzmxYiANdwTh3OBYHh+Oxpy8O27jPGt7bZ3RyvOzSYryL4yPHyL4OK1oajSgt + jkd2ejQ1ipgnOoqcNR4FeTqUl5pRXGyQjN8sXkcBYf5KFWiyvA8e/g4teakWObleZOfrUV7pRmdPAVat + 68FlV+/EzXcewu33nId7HrjEO3/u/RdLxunNtx/GDbeccwpeA/ggrrvpbNxw9KBUFvqUAXzXRRJOGcAz + uPnOC0/hRmEI33Y+biEkA/jmI7jm0r04b986bF4+gJGWUnTXFWD94j4c3L4SZ21eho3LB7Fl5SgO710v + ifcbrhIG8Dm47ei5uOv2C3DnnefjHin79wo8/uR1eOyp6/Hw49ec+h3C/P2DAXzTWbji0q04a+9i7Nwy + gkuObMLNVx/Abdedi1uuPgIxF/BNlxzB5Yf24Hx+5p4N4/xunVg1UYflQ5VY3FuCia48DLVnor8lFT2N + ydKfiN0Naeiuz0Rvk9cEHusswWRPFcY7yzHcUoS++lx0VWWhvTQDPZVZGG4oxGhTGbrLczhmO6kXjahI + UqPYFo7uLCU2tSbg4qk83LIqD49vzsfbe0vwl/2F+Nu+HPx1dwreE1m9qw14alqBu/sjcWNrMK6o9cVl + VQtxefUi3NwZhsco8t/Z7sG7Oz3403YH3txixhsbDTMGsAJPLSEnGeN24xF4aqkML5wRh1c3avEauecb + mxR4c1Mc3t0sDOB4fHKmDl+fbca35zjwxVkO/HW7AS+vjMY95De39c/GbYNziLl4bHEQ3twYjw93avGv + /WZ8dYTbHzTh0/1KfLo3Dl+dpeQxNBK+P2jE8UNW/HDAjG/26vDlLhWhwJdneg3g704zgH8i/qsBPFMG + +pcjZqn9me3P55nw03kGHD/fiGPn2fD9IQ++2JeGf+/Mxt92FOEvOyvx7t5avLK/AfdsLsWFS9Kwpc9K + zmLAsl4HlvS7eY0dGG+3YaLNTn4j4MBEqx0TzTaMNdkw0miVMFxvw1CdHYPk/4Ns++ts6Ktz8Ho70V1j + k6bZSLUxXipmQR0zC3bGgHTqhFJykNoqI5obRLlkD7raPejrScFQfxqGB9IxOpSGsaEUjI94MTWagWmB + kSwiB4tH87B0pBDLRoswPViA9voE5JATGdR+MMYzlsaHIEcdhQ5qq9EEA1YkmbGTOu781ARcmpGMSwoy + cWFVLg435WN/RyF2dRdQ5xdg7XA+Vo0KFGAl26VD2RjrTUVfWyKaqizwUMtrlPwtKv4W8oEccqg66qGO + 9lR0dWagsz2FSJbQ0Z6EjtYktLckoqM5EZ2N/J01LinTV0KNm/BwmS3Rxdcd1S4vKl1oLbejpcyG5lIb + Gom6YsuMAWxAZbE3w7e6SEvNp0ddiQH1pXo0kjs2VFKfVJvQVG1AU4UezWK++jKu5/v1YtsCb6ZvI3ll + Q4EGzcXcr0DMZ6/jsg4tHFtbSrgft68lNxUGsMgClkpLzxjARTmihKgZeRk6yQTOTqZmTVCSd1NnWGJP + lYJ2KMLhEiawLAROavREavN0thV6OfqpmZbkuSQDeEtlErZXebCD52MXz9HOKhvjiAU7yYN3CSOY/eus + tiSczWtxVm8Ktnc7sa7d4jWAW/WYatVhUqBNh7F2HfuuDlMdBizuNGNJlxXLe+0SVvS6JCzpcWBxtwPT + 7OdTnXaMd7BfC3TZMCXeH07EsrFUrBhPwwq2Z0ykStm5UobweAo2TKZj41S6lOW7aVk2tq7IIXKJPCIf + 284QBnABthIbl+VhPbfzZvmmSu266UypvPTGZTkSNi3LxYal3uUNS7OxThjO0xlYPeHNDBafLwzgNdxv + 5WQq+34ipofcmJTgwdSwgBtTIyJjnutOWxbvTUtlqMlT+JuFCTzd6c0GFlnAq1pn0GzBqnojVlTpsUTM + 0VcUh8n8OIznxmJMGMHCBBYGsHgInJgQ7Yz5K9oJyQAmyIMEJnhvjOeoMJqrwVC2CgOMx72MxR0ZajQl + K1CdKEr9qsnTNShL1ZGr66SH00WFsqIkPfITdcjzCANYhSy74n8YwF7I/ghz9B8gjF+RxXnSABZmryj5 + 7Fb5w6Mm59QE/Q8D2E79bKO+Fqbv6Qbw6a+thDCJTTJy2Ji50Mu8MMfPl/RmVqKM90QsspPEXLmRSKaG + EBzXIbJ9HTyGk8e0LyKn94GNuu0/DeBUajFRAjqTHCebOjU3j9qWOjUtQ6yPJPeJRh61Yz7hNYB5b3l8 + 4XYtgotwOhfCbpsHl2M+0qmP8qmZKsri0FQrDGBq3gqOwcVBqK4Mg5j/t4ccU5jAPeRgzQ1KlFCjpif7 + IcE5H2lJgSgkNy7n/S/GnMJs8VBeONI4jouqhQLeTODfyz+n8femSSZwCDLthGidIdTrUShIieb1jeJ1 + Ftm/MpRIBnCkNAdwni0CBRLCUMjjFLn8UeRYiELrbBRZZqEpZT5GS0Kwitx2c48G+ybM2DOhx45hOTb2 + RGFtRyjWdZJ398ViJ/nprhEVdo2qJewkV91KzbqhW87tyD3b4rGyWYnF1XEYyI9Ad06EpIdbec5r0xQo + onZKpDayqIKgFRpHFgylmOqNY5dRGMAWrwEslv83BrBoTzeAVSqRrRtPHeiFMIRFpu8fDWBv2WeVNl4y + gCXz125knzF7YTfAYtV5YdGd+k4CIjvZYlZLMJlVMJqV7BMqJLg1yEo3oqzQRr6WhiUDjHUjeVg9nO4t + k9/vwKYeIza1KbG8xA/T6bOxPG0WtubPwYWNgbiyLfSUAXx9Tyxu6BeV9GTYWeKLKY8387eXmBAaIysA + u8oisb8iEofY167vUuGhSSueXebE09NG3NsVjlvrFxHz8GCXH54YCMTTQ8F4ajCEy2F4pCsUD/Nz7m8K + x30N4binNhR3UYvcXuqLWwoX4mjBfNxawP25LHB70SLcztd3FPngtvx5OJo1C7dkz8JtebNxb7EPHq0O + weN1oafwGI/3UEUQ7uJ7txYuwM0Fc6X2zhIf3FcWIGUUP0Hd9FRFMJ6tCMXzVaF4kXi5KhivlAXidZ6f + Nwp98GaBL97I88FbeQvxJ77+oDQQf6kIxEdVIfi4Phz/bovGp6L8c1ck2wh81hqOzxuD8FmtPz6v9CUW + 4Uvqpi8rfPFVlT++rPbFF1U+hC++qQ/EDzwHP3TK8G2vEl9Q0/21U48XeS/fX6jA7bkqXJepxpGEOKzV + h2IgdiGqQ2cjL3QWEiLmwRTjw77rh6gYfwTHBCDwvxjAwvz9vxnA0rpQX8kEDpXMYO7DNjI8EDHRIVJF + QUV8mPRfQAzHxth4P8iV/uzPQQTvG634byAMDpcSZZUZWLZiGNdcfz7ee/8lHP/lC5yAKO/8vzWAP8HT + zzyCM/dsw8j4IPbs33WaAfy7+fu/MYB/Egbwz/9pAIs5gE8awB+cZgBfhENLx7CeOm1DQza2N2djd3s+ + jky04vZ9m/GXJx7A9//4EO+89gKuvvxCrF2zDMtXLMbSpVNYuXIZtm3fhKuuvgx/+9uHOHHiZ4DfSDKA + f/EawMe++wxffPox/vX39/Hhn1/Dn15/Dq+/8Dheeup+vPT0vXjxqXvx3KN34MkHjuKRu6/FfbdeIZm/ + d1xHjScyey8/iGsv2odrL96HGy89gDuuPR/PPnQULz56Gx6440pcd9l+XHjOZlxw9kacf2ADzt2/Dvt3 + Lse2taPkOK0Y7aqkniuQICo2DTQWob+5lLwzFRlOjiFxwVBH+0PJfqSQeaEUZjB5nl4fI1VoFdOEGcyh + 0v9holqeSzsPybp5yDbMR4lpLhrsC9CV4IOxdH8sywzAupwAjitB2FMchoMcIy6vi8FNzfG4p12NR9pV + eKFLjXcHdPjnmBGfjWrx9agG342pJQP42IQCxyapkSTEE3H4cVKOnyZjCRl+Go/Bj6NRODYc4TWAR4kR + riN+nlTg58Vq/LJSj5/XUjett+PnDQ78IrJ/N7pxXCxv5LpNZhzfosfxbdRgO3T4ZbcZP2w34cuNeny0 + JB7v8FivdIfjmaZgvNAchTd7VPjLmA3/WuzGt2tT8ePmDBwX2JSCH9Yl4NuVLvxj3IDXWmMkA/gejhP3 + VUXhoToFnm214N3BTLzbl4HXWxPxQpMLTxNPtbrxeJuH5yMBD3ckcExMwWP9WXiiPxeP9OTgsb4CvLGs + Ef/cMYpZKt7oOgogizYcVpJwN8l4eoKYp9WBipJEVJUnejOAZwzgBGekVObXLOZqi5snZQAnWASBiUVB + uhL5qeJP9jgUkMwUpchRyuXSxBgUu6OkOQfT9D5I1S1EqnYB0nSLkGMWfz5HolKYA1lqtBUZKfIt6CQ6 + ys1oE3PaFJLwkcAUpYWiKD0IpRkBKE1biMoMHzTlCRM4DIM1Macyf/sqotHLztHLtruMok6UeS4MRVth + CFrzQ9GSF+xFfgjbILZBvxvA3LanJAy9PGZXcbDXAC7w4+tADFWGYLwmFGM1wRipCsRAmc+pMtBL6oOl + LOA1HLQ39HhLQW8d1mFpUwTGq4OlEtK9hQGoT5lHcjILubpZKDLMQRk7eql+noQyI5dNi1BM5GvnIltF + aOcjW5jlBh+SUj8S22ApCyndHU4CJf5sJgl0RCCZJCjRFA67NghWElXJ/CVp1ar8ZrJqxB/MBAWvWiOy + jwKh0wdJf+QajOEM9hHSH7tadSC0JLlWSxTJYRwy0vTIyjQhmwQgg4Q7LUk8BKBEkjOW4jZGMoDNOn8Y + tX6SAWzWCkMvBEl2rwGcIhnB4chMjkaB+KM8n8S9YCYDOFuBHOnPOO8fctkU5FnsQxkZFIfpOskETklS + S5OFG8SfxJI57Q+DLkh6asRhj5bKQFvMkbBao2CzRSPBEy8Zx6kpBnjcKmmQiZMHITrajxDmrdcA/t0I + 9pq/Yn5feWyEF1yOk7MlRAkLEcxOBryIcAbGyADEyUI5mEXAqJPBZlHC7dBJBnB6io2/w0XBm4zivBT+ + 1jQineQpXVrOSXciyW3gPST+fIjh+RJltPVS6edUj33GABbv87trSBw1sVImsFOUmBZloN3cVpjAwgBm + m+bReg3gRF4nyQA2ebOAM8wozLSgNNeGiryZEtACeTZU5VpRnWNFTa4dtQUu6XV5FrdNN51mAHOZxysR + IitVK7UFbDN43ROMkexfwdBy3FAr2Id07He2GKRQoOWlq1GWoUJ9jhot2Uq08tournVhx2gx9i2vw741 + zVg/XY7WGqskAJwmHzjMvryGorQnBZKJfYn93Cj+9Lf6w2wVwscXLgqgJOciZHoWIts1l2R/NmqSZ6Er + dxYJ+Txs6w3Gpes0eOxiDoa3FOOvD1bh82dFGegGnPi4Efi8FfiG7ff1wLEanPixmqgEfigBvs0iEriN + Cb/8XYnjHzAwvBOPH19Q48vbFPj7BQq8vk2Gu0YCcXbFXKzLW4CpXGEAiwxgFTryjWjPM1EMWNGa7kBj + Es+z24JKh1HK/m1ItFAkONGR7UJXtpvnxIGWdBsaeH4rXPHIMYQhXemHDMUclJtnoztzDnb2huHBAw58 + cl8BTrxaCnxQCHycAnzmBr6yAV86gK/FchLwbxd++9CIn17V4J93yfDKwRDcPDoP6zJ5fmyzUKycjcyY + hUijkEiJi0OSWo0UipAUiwI2TQSU0YugIAwkXmYN7yVtJJyiTLSBfVsrg1EVAVVcCGSMFaGRPiSFvgjk + coicZDAuAFEzBrBOHc39KLgpJnJsJpSwT1d6rBTtZtQlGVCfxH6RLPNmAqdw/M3guEvC35S+AJXuWahJ + nIWe0llY2T0P+8/ww9X7ovHAlSY8d6sHbz2QjXcfKcbzR9Nx2yEdDq8KpCibjf78WWih2KhNmY2KpLkU + /3ORZluA5P+1AUzB7Y6W5kxPMJ9mAHNMzfJEopBxTJSArsxS8n5RoIbCui5fgdrcONTnyVGfT5FcpEJr + Mft6KUVxjR79DSbCiP56AzqrKKALwlFfEIbOShnGWrVY3GXAyj4z1g3asL7fjNU9WqzoVGJFhxKrurV8 + bcCaXhOXzVjcrMVolQr9JXJ05jKW5cWgpyAefSVKQoP+Mh0Gyo0YrrRw2chYpUZ3gQaDpRbGKSeGyq3S + fVhH4VyTEoW6jBjUp8egKikcpR7GUrcomRUoteWJQWjOjeU1UKO/Qof+cgO6C9m/c+PRnadEV048OjJj + 0Z4WjY5U9n0eryMpDB2JgehOCkBPsi8G00jWcigCiwKxtDwIqyiY1jIubu6Iwe4BFc4aM+HwUgcuWJko + 4bwVbuwbN2ILhfaqjiiMUzD21zHeUuz0tjCGt8VgoD0Og60yjHJ5ojUCo8IAbg3ExsEY7FumxQXr3bhg + YyL2L7Niy5AOq9oVjLsKxt04dOWHsY+FoD4tCNUpAahI9kc5UZYaIKEiOUhCaQrPQXIASpKCeM0Dpezf + LJcvUqUMYD/CH2mOACn25iZGciwUmb/kNjy35YxlAsVZotRZNGNeCMfwACIQHkcIEcQY4QeLUZiZYuqC + ELZBkhGs5zrdjAGsZPyMJ6cSkMfPR7xyHpSKeVAo5rKdwxgu5gPzk+b0TySfSkuWIz1ZQSg59sZxXZw0 + bYN4EMrMmGhiTBcE28R1ziTljAGshUdU1shgfGR8dWdqYU+Jh438SzKAPYw3bmEAR0FnCZNMX7WeRJ58 + QUWoNV5oyDO0OvIF8SCQMIAFTN5MYI3WOyd4bDzFX8R8REQtREysMIADKPYCJNEXrwqFQhMGhTYEccL8 + NYRAST6i1AdAJUxxnhe9OQBWewgRLMUEg3Ehz6MvEhNCkcn+l5MWgyz2v2x3KAo8YezD4ajyRKCefLKV + 3KiDHKSH93+vOQz9PO/9PO+D1lAM2cMxzG1GPdGS8TsqGb8CMZgkZx1LkmHAE4VeF7kg+UtvEvsg+Ukf + r3U7+38D76G6LN5PRF0O76c8GRoL49BRpkFfrQED9Sb01RnRxbGguUSMD7Foyo8h94zlPavCVJUJk0Va + DKREY8AdgrHEUCxJJndMj/AawLmR2JkThm1ZwVjpnotl9llYwnF8mWMOdueF4DDHkYsaFIQMF9ZHsA3D + 5S0RuK5LjtuH9acM4EM5i3AW+eZ52UG4oiQW15bG41p+n6vyo3FlLvcR4Lh0RVkErqmV4YbGONzSqcEt + PTpc06LAOaXB2Jq2AJuSFmJD4nzJjF7tnoN1XN6Y4ovNmf7YnhNIBGF7biC25AZgWz7XFRO897dXBWNL + dRC21AZiV3MYzub9ey7HgSOt0TjcFI2zODbsqeI+ZYuwpWw+tpQvwLaqBdhR64PdDT7Y30WRNxSH/QPx + 2N4di3UdcixplmGiKQ6jzQr0NfF61CvQ1qhFXbUahXli6poo8qNQJLmieF/IyS/F3JaimpEwgDne8549 + ZQCLLOBsNfJztZJRLJCfo0dejha5XCeQIwzgCifaOnOxfFU7Lr5iK266/Rzcete5uPP+C3Hvw5f9nw3g + o14TWBjA1x896DWBb50xgO++GLcQR++6cAZeQ1isPwlhAh+9/YJTBvCtN52Lqy7aLRnAO1aNYElPLaZ7 + 6nDm+mlcctYWHNm9FltXjWLH2kmcv389brj8wP8wgO++S2T/Xipl/z7x1PV48tmbJBP4oceuwn0zcwEL + 3H7nEdxxx2HcdON+rwG8ZzG2bxrCOXuW4ZJzN+OKC3bgsiM7cPm5u3Hpod04vHsd9m2extaVvVgnsn/H + q7F0qAzTvcUY78zDUFsm+kXmb2MKuhtS0V2Xis7aNHTVp3NdDoZaCjDcWoSBhnx0V2ehqyod7WWpaC1K + 4X2Vhv7aXAzVF6GrNAs1aU5UkP9WJmhQYglHB+/ZNTU2HBpIww1Ls/Hg2hy8sqMQf9qdjw/OzMaHu1Lx + 3hY33lxnxUtnGPDEtAr3j8hxa1c4bumIYJ+PxAPjSry03oF3dyXjvV0JeHeHE29tteGNjSa8uk6PF1er + 8MyyWDw2Ho5Hx8Lw+HQUX8vw4lo1Xt6gwqvr4/HGBgXe2SDHR1uV+GS3Dl8fsODbsx34Yp8df9mixctn + ROHegbm4vXcWbpmByAh+dV00Ptihxt/3GfDZQSs+OUuPf56pwL92y/H5XiW+3K/Bl/vU+OYsLX44YMS3 + +3jsPWp8vlOBr7jd13vF/L+/ZwAfO8drAov2Pw3gE6IM9BELfv0PA/jnC4w4fpEFP1zgwjeHU/DpWTn4 + aGch3tpchJe2lOPZ7dV4dFc9jm6owMGpbKzpdmGixYqJLg/Ge1Iw0pnIGO3GcFsCRtoSJQy3crnZg+Em + NwYanby2RL2b8d3DNpH8SCABvQ1J6GtMRlddAjW+gjwsCLq4OeSlc2A3BiAjKRYVxRY0cr+mhgS0NCeh + vTUZ3V3p6O/NxEBfJoYGsjA0mI6RGUyMZmNyNAeTw3lEAaZGS7BYlCMfKcdEXxGaq5OoSdXQKhiD5aFw + KKKRSb3V6iGPIl+fSrZhY7oHB9KScW5mOo4U5+JwdSHOai7GmZ2l2NpTio0DpVg9VIxVo6VYSawaK8Wy + 4SKM92ajpyUZdeReLnJQlfgt8XOocfyRzRhSXe1CZ0cWensL0NWVjc7OTC/aM9DRyn7fkoZO3itdTalo + r01AZzVRk8B4kkgk83WSFzU8D1WJEjr4urWS56bCjeZyFxpLnagrpg7heasqNqFSmMBS9q8BdYSYK7ip + woTmSjPPhQUt1GOttWa0VYv56omZeYWbSk1oLDagqVCPJjG9COOWZPbyWG3iQX1Rqa3E4IXIJi5QoqpQ + gYqieJQVqCQDuDjXiOIcEyE0KbVpuhZ5KTrJBE6nRk92xMNtksFO3eFShcNFLeGIDYErJhhJRBp1ejG1 + RSfv+cksO1YXJ2JLVSp28lzsqU/CHvaL3VUObC8zYxu/rzCB99Z75wQ+1J+GcwbSsavPgw0dNpwhstNb + dJhs0UpcfKxVg+EWtYRRvp7oYGzusnBc9WJxj13CZLcd4102jHZY2a/NGGxhjG/Wo7dJj8E2M0b5/mS/ + G1MDHkz1CwPVg8WDCVg26J2fd9VosoSVY2wnUqWs3TVT6VIG77rFWdgg5hJelo1NK/IlbF4hTOAcrJvO + wvrF2Xwvj8jlevFePrasLMAWads8bFrOlhBG8FoeUzKORTudgbVLs7BmcYZkCC8bTcTSsUQsGU0iRCtM + 6yQsFetPXxbtSAKW8zcs73WdMoAX87eL+YBXnjSAWyxY3WjCanIdkQksykEvLhIloWdMYGEAp0djgnpB + Apcn0+USxtNiMZomw3gG43m2HBOSARyHCerpiVwNRsinB3OEAaxBR4YKTSnUXALksNXkrJUZelRkMjaT + xwqUpupRxD5VkKhGnluJbCdjvV2JTFs8MqhzhQmcbhGQU58S1lgvbDESUkVriUGmeBh7xgBOI6f1KPzh + jvODS+k1gBNVpxvAXpPXIfeH/T8MYDvXifXOOG7LMcZB2OPJZ+N8YJaJ+X/nwiCfD7vKx6tRE6hDyUfT + yetTyWMTHMFwU2+4XAFI8PAYhNPlRy7MY7v4+g8GcCSSyXuSySfTeE7T08mDyFNFVnASt0lJDSf3kaGA + 16WQejU7m9ohlVrX4yuZv6cbwE77fKRRJ+XlRKC8VI5GyQCWo6o8HCVF1EplwRyDozh+xUsGcF837/sW + Dd+PJdfiuXHOR2oi98+IgphPXIwBeeTLkgGcKCokhc/8dxkiTZeTSj11Eink+Wnk+6cjh/w8NykK+Ymi + GpfIBqYeT4lFPjV7Hnl8ro0gp8+1BiPfHogCuy8KbAuRa5yFPMMs1CXMQX9eAJbVRmNTlxr7J63YN2XE + 7jEFtvbLsLkvGlsHYiXjd8+YBnvGNdg7oeM2euyd1GPXuI6aUo0NvSqs6xLJPCosbVBhuFSGrrxItOfE + opm6uCo9HvkJsXBRKxmUAVDGBkAuC0acIoLaTga9SfU/DGBRcvk/DWBh9kbFeLN//5sBrNUpvdAqub+3 + 1PN/M4DVOoVkAIusX4vDCIfHBrvbyj5khsNpkmBzeM1gq1UvQRjCVouG/UDLfqaFxaZhv9Cwn3CcplYs + zjOjqyEF0/3eB57WjGZCzJG+rseKNW1qrK7n/Z0zH8MJszDpmYX12bNxPvX8FacZwDf0ynHTIPVJVyzO + LA/EkoTZGLTMoi7jPgnzsSrdD5vzg7A1zx87cxfh4voo3DkosoBteILX7a6uSByt98Gt9QvxYHcgnhgO + xZNDYXhskBiIwGO90Xi4Mxr3Nkfirrpw3FYVhKPl/rixaAFuKJiHG/Ln4qb8+bi5wItbChfgtsKFuKPE + F7dxm6O5s3AzcUveHMnkfbA6BA/XheCRulAJopT0PaX+uKWAx8ubi2tyZuN6bntz4Xzczu0fEJnA1E2P + VwTj6cpQqVy0MIFfqArEC2UBeKloEV7hvq/kEbkL8Drbt4t88D63/5Cf9RE10ceNkfh3hwyfdMfgk55I + fNIZgU947j5pCsJnDf74spao8cWXlT74vNyHrb9k/gpTWODrGj983xyE7zsi8Q110xe9SnzcqcIb1IzP + VWnwdLUZj1bacWeJHRekqbHJGoEh5ULUkG9lR8+DJ9YHuhjq9Rjq9+gABIsS0FGBCBWI8Gb2hoT6IXTG + AD5p/v43A1hsFxTii2ABvo4I8yZQycm5YmODERnNddELpYfEozmGiiphco6Vcapg9uVQuMjx6xuLsHHL + ctx6+5X46OM38duJbwEc+18awMekOXr/0wB++rkn8bU0B/D/Lwzg3+cAlgzgt9/GW489igcuvxiHl01i + c3sFtjTnYVdbLvZ2FeGC6Q7cdWAb/vb0wzj2z7/ioz+/hQfuux0XnH8Ihw4dwNnn7MeR8w7iiisvwf0P + 3I3PP//37wawKAH9yzFp/t9j336Kzz/5G/758Z/x1w9ex5/ffhHvvPosXnvOOxfwc4/fhacfuhWP3Xsj + HrzjKtx7y2W463pqu2vPwy1XUqtecgBXHNlJDbcDV523Czdffjaeuv9GPP3AjbjjxvOp87Zi79YlOHPz + FHZvmsKODePYvm4Ya5Z2SNP29DYVoL06E+012WivJH+tzqa2y0dlnhtJZjm0Mn/ER/kgTswrHbkIciJO + xrFRVIvUREhZ3hpjGLSmIBiM/jDrF8KpnYsk7Sxk/39I+wvwNq70exx3OGaSQZbFTEZZsmzLIINkmZkZ + YkgcZk4hKTMzMzPsFrbbZejuFra7xS1su+Wk4fT8zh07afqh//d5/slznjsezYwG7r3vOTpz32uYhxD7 + 796sxZjIC8c6XzR2+mOxtzIOFwXjcDXj0S1NcjzUpcTz/Xr8csiE3zIe/YX99HsTRnzGfvuLSR2+mdJh + /5QG31PfHVyuwaEZLQ6tIGbULNU4ulKNYytVOLZCjPRNw8FlyZIBfFiYv8ThZak4RByeUnJ/FQ6sos5a + rcF3643Yv8mCw9uEEZyFwzucOLLThsO7TDi8h5rrDC2OnK3HiXOtOLLXggNnWPD5Jh3+xf3/sSwdf+tP + xRtDSrw/acJ/1ubg281uHDvDhx/2+YGzSnB8dwEOb/fwO3Lw2SoH3mQbfqVJhmdEyvoG9nEtGvym24k3 + hwvwRn8+ft+cgVfqzHiB3P3nzXY83+LAs61Eewae787By4OF+NWoH7+dCOKP03V4b2s/vrtoDcJ0ikiY + 2OCchiRkipQomRoUu80IluWgNuhCTTAXgUqnlL6npECMREyURnma2WEIAzjDFMnALYPfq0LAp0M5y1KS + mZKcZJTmMnDnylFFUlMlAnZmPIqskfCalsJjWIx8otgag8qsZNSeNIApVgbZOfXXOqRRwOJtU2EA15Ik + hnwkFb4EVBfFkAQsQXX+IjT6wtFRGYOBUOKc6ZuCwZpUCdLI30DirPFbIQxf8QM3CUxZLNpLY2bLMpaS + CRyH7op49FYmoI/bDwQT0Fsl0kALAzgCg8EojNTEYqIuDpMNsRKW1UVjqj4KKxqjsaolDmvbZSQIydjS + K8fW/nRs7JFjWW0khhhgekoXo8O3CA1581HJgFeiD0O5MQwB0yIEzYsQMC5EwLwQVeYlqOC6Mt0C+DTz + UaxfhBLerxJrFIlpNApJdLwkRsL49fC+CfM3LyMZefZkuCxJyNDHw0GSatVS2ArDVBMJrWYpNAJagQho + dBEQ6RaFCWxhAxTz+mWI0bQkwU4SYIGszNn5f32FZhQXWaQU0F63Dh6XBq5sJXKdqcjid2ZYE+A0x8Nu + jIWFx7XyuFmWeOQ5hTlNYpopzpPEj0SuxJuGcpL6KhJ8MQewMH99XvGj3UmIH7SVJKcaFIpUUQVG5Lu1 + yHakwmqMh14bDTPP2Wrmd9p5rY5kOGzJsFuT+DfPJ0PB89NK51yYb+H5k3TZ5FApYxl0IpCaHMUymoHt + x1HAaZL5myQhXZHMv2WQk4BJJXEqlUXC7AhgYQCL/YX5q9ekwmaeTf/sEumZc20kurNz/0oGcJmHAriA + JLiI4ruY8JEM58Cba0W2eNPOqIDDrGabMsGTLQxgJ9xZNmTZjNLoXwsJokWbJi1n2bS85yINtAHubCO3 + N5FACwPYiMJcA4pcFNT5VvgL7SgvsBIWVBZaESyxo7bUyU55zvgtnxsFLBnATjSK0cGldrYpK6oLKKaE + Acxj1HgtCLpJ+ijSq/nsa3hPgySBJSJtF8WRjQHaQBGkp6gxcjmDz8HrUqOChKKmkKKhWIuuYg36+JzX + tOTirIkqnLO6HudtaMXW6QA6aq1wZ0Sx7iyBU6T2tFAYEWZLhASTjX2MPQoWwibmfuS2rqxIFOVFoSSX + BD9jPqqyw1DvDkNXURhGKxdgW08cbtpuxpOXuvG7O8rx9hMhyQT+/o1mnPioC/iiG/iW5YEO8od24FAr + Uc/lCq7LB7504vjHBhx5h8HiDQaL3+rx1cNq/OsqJf60KwWPjIbjwmAYtpQuoGidnQO4v1SNHr8RPWUm + 9PjYX+Xb0JRrRn2GCXWZJjRyubPAiYGKHIyHPJgI5WOk0sX7koGuQgsacpQUKnHwqZeiTLsAna6lWFkd + icun0/DCZZn47Fk/fvhLAHiPgeFjN/BVFvCNnXAA+4UJ7AI+z8aJDyw4+Bcd3n9Uhl9duAS3j4ZhgzcM + fRRCtSqKIflClMoT4EtXoVDDtmXWw2tRIVMrgz41HHp5BOzaeDh1yQTbFkuRwsOqTmZ8SKSgES9RkMTJ + liKagTwyeQmiuV+CIgrJSiF0EqXR8Nmsz15pBLAJlU4zQhQatTlWaRRws9tAqNDkTmM/mIRGVzwaXDGo + z1mCKlsYKogGTxiGeI/Xds/D2TORuPFsFR643Iqnb8rDc7cW4J4LHLh0fSr718WYrOaz5zW2uOdJ/WoN + BURFzlIUZ0XAaw+HRxjAGSKVM/sdjwYV+VoJJ41ggWJ3Onw5cvZT7EftCTiZAtpLYVnAvquUsasyn+db + qkVblRjxYEJ7pQ6NjEcNPjmaStIYfzSS+TPUYMF4mx2TnRmYYnCe6nJipEX8YJaM9oAMAw1pmO42YHW/ + GZtHbdg+noGdY05sG7Fg06ARm4YM2CrSKA1bCRu2DVFYDWZgTbsNy2o0FJwU3qWMa/50xhQlhqq0GKnW + YzRkxHiNhctG9Jdr+ZkOk3UOrG5zYaYlG4Mi1V9BKhrcMjR5ZWj3paKzRIH2Ejlai5IktJekoNufxhin + w1idQcJotYHHE6N+0yXzt784XRr5252fjF4P4aYAzktAjysafXmR6HeHY6QgHJMlkVjJmLyWQmhjQwK2 + tiVhV7cCZw9RgE9acemqLFy2OhuXrMzEhcsdUlquncMarOtNxURbHAabo9HbGoue9iT0dsox1K3CYAcF + d0sSRijGljXHYE1PAnYuU+LcVQZcst6Bi9Y6cNaUGduH9NjQpcEqip3JWgW62E5bC6LRmB+Fek/UKQM4 + 6IlEwB2BkDtKQpAICOTFoMIdjbLcaNYLkfY5EoVipClRlMP2k5uIUncq+7l08h01QqXkJn4D6sSLTSxL + GePcGRQuthjkMlbnZbFOZScyNsUyXsXC6UxgX5ZIwc04bY+HWZjAZpGVYylUmsUURgtmoVpMcb+IZFnM + 9buAmA+ddjFjdCI8eQoUF+pQVmyU5istLtSjwKNm/FHNGsAOOUSaZjFCV29MgF4Ys84U2HMUyBQjgcWL + VezzBXKLTcggZ3Mw7jp4XIeY/zcrDZYMOYyMsQbyAy1jr1ofDSW5hGoOam0UeUQsjCbxPcksZTCYZr9P + w35EqWFsVUYjMXkxkigCUhVz5q9SvPFLgaeJRzoFXrouDgpDLNT8HjV5g8YSB60wAHh/bJm8V9nsi8gf + 7I4YgtyR9a6CdTxYaZCmlSh2J6GE91fMCRbKTWafkopWoovcsy+b/TPvdT/vcz/vc581GoP2WAw74zHG + 44p0zxN5swbw1JwBvJw8ZMqt4Po0jJHDDmcnY4T91XihCqOMZz0FcrQVpLDNpEojgVuLU8kl2QeUs20E + tBgW7abRhOF6IwZq9WgvT0NrWQra2L46i8Wc8QosK9dIo39HXDKMZMdiKjceq9yJ2FQgw25udzbb+TkV + AknY6FqINVlhWClM4Kx52EduemVTOm7s0OKGTiVu6JDjli457qVAeGSZGY9PWPBgvxY31SfgirKluJ68 + 9vZgGu6p1+GeOh3uCKpwc7kc15fJcGVpPC4nH768Kh5XkD9fXZOEG5oUuLVLh5vaNRRaMpxJ4bWnKBo7 + 8iOwhe17c94SbPWEY3tBFHYUx2CPPw5n+OMl7CKP3uWPxq5KijW2/R2hGGyqjsKmUAS21XPb+njJFN7H + 8vzGJJxXL8O+ulicwc/31IRLOKM+HGc1ReGc9mhc0J+CS8Y1OGdYie3dKWzTSZhoYh/QKMdAswK9vA9t + jeloblRJP1aWFctRwD7JzfogDGCvS0E+qYK/WI8KYej62N+LuX75LMuKRPYZDfxsv8L4FQaxQEWZmeuM + KCubRanfhOpQBjq6irF6fSeuu3k3HnjkUjzyxJV47Jlr8PTzN/0fBvAluOf+S3H3fbOlgEgDff+jV+Ph + J6/HI0/dwPK/4KkbT0EYxA8/fv2sAfzg1Xjw3stxy9Vn45oLt+FiCvMz1o3h7I2TuP7CXbj3+gtw25V7 + ccmZG3DJ2Rtx/SW7pNRd99x20U8M4KeevA5PP3cTfvbibZIB/OpvH8TLv7oXP3/5Djz7wq2nUkE/zGt5 + 6MFLceft+3D91dux78wp7Ng0iH27J3HJOWuJ9dKPAxeftR6X7duC83fzfDaPYseaTmxe0YL1U7VYNRbA + zGAlpnrLMNZZhOH2AgyeNH8b89HT4EEv0d9UhKGWEqIY/XU+6j4vuqo9jKsuarM8dFZ62JZ8GKkvYxsr + Qn2+EyFy4LpsHTVTIpodiZj0KbGn0Yobl3nw2DofXt3lx5/PKsM/zivDO+cU4R9nufHm7iz8dZsTf9ps + x+832PDLVUa8MK3Hc5MU12vM+MvuXLx1tpvIwRvSCGAn/kJR/+ftFvxxqx6/Wa/EL2aS8cJUIl5YnoSX + uPzSKjleWp2CX69Lw5+3qvH6NhXe36PDp2cb8PleM767MANfnefEezt1+NO6JDw/vhhPDs/HI4NheJh4 + ZmIh/rAlkedHnnmeAZ9eZMFH5+jxwZlKfHRmOj7bp8Hn52jx2V41Pjs7HV/y76/P1eDb87X49gId9l8o + IJZnTWBh+J4cBSzKUwbwNbMGsGQCX+PAcTEK+AqRBpq42oJj19tw9MZMfH+DB19fVYxPL6nCP86pwS+3 + VeGpDZV4cH0l7twQxDWrK7FryIvptsxZQ7c7H+P9fDY9hRjo8GK4swAj3UUY6SrAUCf/bs/HcKsHg21u + DLS4MdjCZ9mUz2ct6oJAIfrbfBhoL0ZPcwH8+Xq4qD/thnhqScZQ6tISxqv6Wjc62n1o5T5tbfno7ChC + T48P/X0lGBgoxuBgKYaGiiUzeHS4GMvGyzAxXoHJ0SoiiKmxGkyP1WOGWDYQRGtdAYrJ1a16xjst9ayR + nNVmYezIRn9eFibys7Gh0I0zCgpwTnEJLghU4vyGIPa11WBPTy229deSr9Vg3UgIa8dqsWa8FmuJVWMh + TPaXo491vTGUhRxqc7OBMZ4xzulIQmmpBXX1eejuLsfgUAh9/ZXo6+P2fX709rB+d5eiu6uEvIfoKEEX + 70lPkzCCWTYKFKK74Ud01RdIEOs7673oqPOgnfeqtSYPzdVZqK/OlMzz2iry8CozGgI2tARt1F9Obu9E + VyPRnIFuCU72qXb0NgrMzS1ca0en+B2m0oz2CpM0NVdX0IxuojdokdA3h15u11qhRWOFGnUV7JMZp0Ps + T6vLLKgutUkIFlsR4POs9JpQJrKLufQozNYgz6FEjjkVOdQe2ZpEZCoTkS2Ph4ta20udXqlNRleWHpMF + dmyocGFXnRf7eF8u7ijEha15OKchC3uqrdgTMEtG8Lm8not73LhipBCXj/tw3mgedvdnYpNIUd5hkAzg + yc5Z83eMsXS0U4sxxr2pXgumB+yETcLyQaeE6QEnn6sD4z02bmvBUJsRvS069DZrWX8NrPdmjPGz8T4H + lvU5MdGfgYmBTO6XheVDmVg5ko2Vw9mYIVaOZrOe5BC5XM5l3cnDhmVubFpRgG1rSrBjXZlk7u5Y7cf2 + VWXYRuxYw7/Xlp0ye3dvqJCM4J3r/ESFBDEieKsYBTxn/m5Z5ZMMYJGOWhjCG1Z4JWwUo5MF+H2bV3Jb + sb20T6F0DmK9NIJ5Kh8bR13YMJiNNbwWYQCvFXMAd85iI7G53Y4trVasJ+dZXaPFavGCW5UKy8mHRDro + ad+sySsZvVxeUczPxHy/heRYBWmYIoeaLhXbpmN5mRLL/Rqs8Osw7ddiGcuRMh0GxG8JhWopi1FrMbUM + 43JDKfsEau4GtieBmiITQoWM4/k68nc1+bua2k2LEmk0sBY+p3oOKhQ5lUS6hMIMcoQ5FDnJq51yFLH/ + EQaw1yybHQFM5IhSMn9nka2MRFZ6FLJVMcgihOHrVMwavwJinUC2Opb7xbFexyOL+2eoI+FQLoVVuRg2 + av48WwIKs1KoLeTwZvI7s5KRn83vzU4ghEmbIKWOz3MnIMcVJ5m//9UAznOnwJWXjFwXl1m6+bcwhN3U + e668ROR7yZGp9yqpU6sqeW/K5FwXz+0jkZ0TjuzscGRlLqE2WSiVBfliBHAKOZUKrU1atDQpURuSIVAV + jVAwCk3UdN3knGIU8MigGX09fCaNSlSQT3pyl0gGcGlBEvl5GipLlFxOhY/nWkiOW8RzLCLv9fL6xIuy + p8NDvu+hPvKQn59EETl4Ma+pTGgucvMqrxJVnnT4c+Uo5f0qYewvIb8vobYqc1C32ZfCb1ssGcDl5jA0 + 5synbo3ATK0M27rVOG/KjvNXCANYi7PHlThrPJ36U4Vzlxtw7rSB63U4j8sXr7bi4rXcdpWVutKIXaN6 + bBvUYUM363gr+XstNXFFKrrL0tFaqkS1l3UnJ1XKwGjURENNjaNIF1mQkqiTUqmN1LBYtBJE6mWjmINX + P5vO+XQDWECeliThvxnAOiV1lpjDV3vKAE7XpEExNwewgDCEhQks5v+VRgALczfTiixXhmQC5+Q6+Nyd + EjKyLD81gLnsdOiRmWFEZrZZQnaOES6XQZoGsILtrKspj/2bD6uGS7BhtBBb2a9u7rNhbYsSK8n5l3nn + YSRzLp2zbz6ubo3BLd3iBdV4IgH3DM4awLcMpONCapS17vmYcIZhImMeVlJbrM+nxihagk2ehdjsmocL + qqJwd68Szy+3k2/Z8EhvCu5ricBDrRF4figBv5hIwcvLyMnGkvDCaApeGErDc31peKI9GQ83JuD+EPcP + LMWdlQtwZ/l83OWfj3v8C2bNYOLBysV4OBiOx2qi8Eh1OB6smIf7/fNYLsSjgQg8XReHZ8X8wU3xEp6q + i5bW31u2ALcVz8NNhWG4pTgMd5XNx/081pPVkXiuOgYvcb9fNiTi1aYE/Jrt5Ve10XiVn/2mcgl+V74I + vytbiN+XLcKfKxbj9WAk/kFN9E5TIj5okeGjjhT8u1+Bfw8JpOLT/mR80hOPTzpi8Fl7FL5ui8G37bE4 + 0B6H/S1x+LYpFl83zo4AnjWAI3CA237fm4j9A6n4alCBT3rT8XabEq+3GPC3didea8/Bbxg3n67JwM0l + euzJSsCofgkaNeHwqaJgF+adPIr1LwoJydGnEJ8UiTiZ+B1QlD8av3GyKAnSiN85SAZwfARiY8MRF7cU + cfHhSJLNGsAiK2daWizrdiSShQEsD0dqWiTSFFFQsN9M18wawC6PGV09ddh7zjY88dS9+PBfr+OHHw4A + OIKjx7/FcWkO4AOYNYAPSDgmcFyMEJ41gb/+5nP86tcv44IL92F6ZhIXXnKeZAB//e0X3E+kgP4R/80A + /uHgLP6bAfztnAH8pXT8Lz7/GP/5+IM5A/hNvP7iS3ju5htxxboZnNFbj7O7K3A+eeHFw9W4ce0Anrl8 + Lz7+7Ys4/NmH+Pzjd/HXv/wOL/z8GTz99ON4/MlH8PQzj+PFl57Ha3/5I7799kucOHFYumYcP4Qf+P0/ + GsAf4OMP38YH7/4V7771J7z7xh/x1mu/llJBv/rCI3j5mfvw8yfuwrOP3IqnH5qd9/eRO6/CA7dchjuv + Ox83XrYH1128Ezdcuht333A+fvHUXXjpyTvwwO2X4orzN2Hn+iFykn7yiH5sXtWNTSs7sWqiEeO95K3U + bJ21XqIQHeJlXZbCEA747MgyJUObGi4ZwOnJSyBPXIJU2WKk8Xkrxe/FmnioDQlQG2OgN0fDIgaAWRaT + h89HgSEMlaYwtNnnY4UnEluKYnBWRQIuqZbh6rok3NqYjPs7FHi6X4dfjpnxp2VW/HXcgtfZR/99RI2P + JnX4z5QGX05SE01rcGBKjYMC08L01eCwMIFn1DiyUosTa+awUoUj0wp8P56E79mfCPP36JRcGgEsjQKe + TMf+yTR8NZGKz9nnfL48DV+s4jG32HBkhxOHttlwaDs11w4ee5cKh3en4+hZGpzYZ8TRvUYcOtOMb7ZS + E67T4qPlarwzlo73J6jtGF/2b87GwW0uHN9TgB/O8uHE7kIc3ebBoS152L8pF1+uy8L701b8vkeJnzUl + SwbwC3MG8Gt9LrzW45Je6vhZUIeng3o8VWvEE8SjtQY81mDBU21OvNDnwa9GSvHHqWr8bVUTPtk9giNX + bEKYPi0cZrVIGZwkvYXpJcku9dhQVZqFUEU2qvyZ8JfYUErS7s1VItNGYWYQpvFi7scHZouTRlBVFmgQ + LNLB7yaxIqHxOuIl+MTbWZkkA9ymIieJBCsGBZYIuI2L4dEvQpElGuUZSQjlKdBQqJGExkBtJvpqM9Am + 0g/59WimkKgvo6goVSBUwm19sQjkL0XAvQB1hYvRWhaBnqpY9FcnSqZvf3UKy1Qp7bMY1SsZv35h+Eaj + rSQarSUxJJJRLLlcSkgm8OyI4G5u281teyvj0CPmAJ4zgAeqIjBYHY2xmmjJ/J1mMFgh5gNm5yuwsiUe + q9tkWN+VJJnAq9sSMd0QjcGqRegpXYB2BgoxSq2eQa3KEYZS48lRwAsRsCxihRfm70JUWpag3LQIfsNC + FGvnw6djaVyCYkskSWkU8m2x8PCeujIESPAcJH6OVLhIWHNMScg0JMJJsmkVczqTiOj5bHXqCGjUIn0y + IQzgOYhU0CLVs0ilLMxekW4536OXyjyXhsRTK40AFsFfjPoVc4bmZqUhO2PW/M2yJSHDkijBaYyHTR8N + O5FhjoPbIUM+xa9IrSpG1xXw2YtU0CWFP6bfKyZpKiCxy88jXCJ1XwryWE88LpF6WoPCfJ6LS41sRwps + xjiY9TGwWxJmJw3ndYvSIcxfQowSzssmuaeoFOmqRUpkFwWA3ZoCVTqDTjIDDINXakoU0uQxRBwUaWL0 + r4xIRroiRSqlN/BOgxgBLE1kL4tBSpIwkkUq6iQYtHJYTSo4bTpkOw1wZ1mRn2NHkduJEm8WKopcqCrO + Q6DUQyFciMZgiYRKn4sE2M7npkeGSQmHWYMcpzB0RQpors8g8bLqYDMopRHANpK5DJK5XLsBeWIEcKYB + nixuTwgDuJAErSjXJEG028oiJ6qECZxvRrnXws7YKo3urS0lSuxoLBejfjPR5GcpwL8lA5jPWaC2wCYh + xP0rcw2oYh2o9hhQy+PUUryX828v73WGNM8JO27WMzODdZY5Cb4ckfpdjzr2BUKsdfIZD1LArWtzSQbw + vlV1OHddM7ZMVqE9xOfjiOBzXQibebGUItViWgKTKRxGczgMrOtGWzSM9hiYnaxXRA6FT6E7loIgEr5M + tgsSx/KMMFSTbIoRpD1FC7ClKwGXrdTgwbNy8ItrivDmQ+X4+IUqfPtaIw79sw0nPuoEvugBvusFDnTP + mcAhYH8h12fhh08sOPqOHgdf1+PQb034+hEt/nVVOv64XYaHBpfggkAYNhXPx/LiaMkA7qNw7SrTsI3r + KFINaMszoDFLh4YMgs+mzWPhNplYVuPGqtZi3otSrKgvwEhFFvqKLWhmXQ9a41BhiECdPRwT5YnYRQJ4 + 03otXr4yAx89VYRjr5UB7/D8Ps4GvhLmr5nnb+H5O1hy3ZeZOP6xBQff0OK9J0k6L12MO6bDsL0sDCO2 + MLRrw1CrXIhgejzKlWr4VXoU6/kcdQrpbXubPBoOFUWqgX2JUY4cPYWMNhk2bm9UxEOniIMqVaQ/J5GT + LUGEbBGWJi5EOMs4OQkcA7pKIztlAHsocoqIUgqQSruez8eIet6LJrcJjW7eF5cK1RS6AUccquyRCDrC + WbL/c8xDTfY8tBeFYaiagqB9Ac6YTsQF69NwxXYdrtphwpkMvus6IjBWNY/POwytufPQ4lqExrylqHNF + IOCiCMxhPWHdymf9KWA/WUyxKMzeSi/P57+g1MN+SMzdw5glsih47IlzoBAlChjDytlHNbEed9c40F/n + QFelEY0+BWryxdyxcnRVaTFUb8FUZzaWd2VhpicHM71ZUrq4ZW1m9ITk6K5OxlCjgp8bsKbPJKV/3j7u + xK7xTOwYd2DriJViyoIdIxbsHLXPYoSfj+VK825NhDSsR8noKxEvHVB8+9MwWK7CaFCDsWodxkMGLmsx + WKHBaEDPmORkLMqTMNloQ1dpGpo8CWim8O8qScUot59oMDGecV9iutmClW02rGq3c3sTBa6ex9GirywN + vb401lUFeovk6MlPQZebcTVPhm4K+W5XvGQA97qjMECyNloYgcmSKKyqiMe6YAI21iZgS0sSdnQqsadf + i31jFpw/5cA+ErYzRiish3TYPqzD5gE1VvekYbKL96ldhq7WeLRTDHW0ydHXpUZ3axpaamLQGYrAKOPt + 6t4kbBtX4UwSvTMmdNgxrKIQVfFeaVg/tJhpUmO8Wo62wmhedyQaBIQJXBCLOm8Mgu5IVLnCEZJM4Aj+ + zbrjESbwrAFcymvy5UazXxX9TSKKec3ih4hSTyrKPCLbiQqBYvEDJ/tGP/vNCjP5Evtgbzr7tXhkktfk + sszLkknIzkyQkMGYnUG+M1uKzBtxMFlioNWTKKsWIS19IRRsq2oKMbFOp2OpXQyNZqE056+H/KrEJ0Ys + kqOV21FRZkVJkZibn+2O7UoYwA57mjQSV6ePk9IqpREKfRQ0FsbonHTkeA3wljlQxDjgKjEji7xLGMB2 + Vxps2WL+XwUs5AQmxl0DY6vGlIB0rTBvw3+EiuerjoLZmsrzT4XeKObyOTnfbyxFHAVeOmPmXCqpFAWX + 06MgV8YglUhTx0HOuCHXxEDO81RZE6G2URAQGvIbM++Zg3wgi7wgK4exPpv3T4z0LdehqSED9TU2lBWI + URN8LlmJKM9ORiiX7TQvjX2wHJ2uFPTmEJmJ6CZn6jBFoN2wBN3kUX2MKcPcZzQ3CWOuJIzzuY67kzHh + TiHkmOQxJl0KLMuRY4T91KhLjmVeJcYYz3pZ/zvY7tsLklm3UthXpaKzmO27jO3Dr8ZgQINhtsdBkQ4+ + oJaM31Yfty9KQmdB0uy82d4UjPE4ozk8h6xYTOXEnWYAp0oG8HmBNJzP+ru9KBIbPYuw1jUfa/MW4Oyq + eFzZqsSN3VpczzZ1Y1c67uhX4zG2qWdXZePxCSvu61XhhtoYXF0egTvr03F/kx73sk3fXW/CTVUqXO1P + xSUlMuyjsNrD9rrbF45dJeHYUxyBfeTAVzaqcXWLFhfw+/eWJ+FMYldJArYWxmKzNxpbCmKwtSgWW0vi + sbM8AbsqGLMqZNjO2LWd/HkrsZnnuTEQi7XBaKwlb15XHYMNVbwWfzi2VUZjX0Myzm9RYG9DEvbwXPfU + Rkk4oz4KZ7fE4dwuGc4fTMNFy3Q4Y1CJta0yjJB799Ww/6rh/axNQVu9HI31aQjxPMvLklDkTUI+68Ns + mxNGsBwe8slCtpmyIvHCoRo+tk+RGlr87ffNpn8WI4Ary00STjeAxRzAYkqSqoAdre0FWLmmDdfesBMP + PnIpHnviKjz+1E8N4PsfuRz3PSxG+c5CMoDvuwR333uxVArc++Dl3O5KPPKEGGl7Ax598saf4JGnfgqx + 7mExCvgBiva7LsUtV5+FGy7bhesv2o7rL9iOWy7eg4duvgRP3nMNHr7tMtx+5V7ccsXZuO3qvbjj+vOk + EcAP3n0ZHn3oKjz52HWSAfwUz1ekgBYG8C9/+8CcAXwnxFzATz13k5QC+oGHLsPdd12AG67bjUsuWIsd + mwexbqYduzcPY+/OSZZj2LK6HzvXjeDcnTPEcuzc0I/NK5ok83fNsiqsGPZLo38nuksw0laAoZZ8yfzr + a/Sgp9bNvjyXMdUlLffWeSV0B/PRFfCgvdKFVn829VkutVsetVwBBmuK0V3pRW2eDcEMPWoztKik1glQ + 13Syja9iLL6o04G7l+fjuS0+/PaMUrx9QSXeuaAU/zynEG+f5cJbu7Px9905eGtXLt7YnoPfrbfjheV6 + vLzKiN9vceIvu7Lx110ZeG23A6/ttOPPO2wS/rTdhN9v0khpoF9cnoTnJxPx7EQCHhuKwSODEfjZZDyP + lY7Xt2rw/h4j/rVbjw+2afDVXju+PicD72/X4k+rE/GLSW67bAmeGpmHx4mfTS3AH7Yk4O9nKvHBOVp8 + uE+Hd/ao8Y/taXh/lxKfnKnFJ2ep8dHuNLy3LREf7UzGF3sVkul75AqLZO5+f4n+lAF84CLdTwxgAbHN + D9eSK540gLl87HIzjlxq5GcGHLnKhGM3OnD05lwcuNmHL66twEeX1+PN81vx1KZq3DRdgouGvTiz143N + XS6MhOzU6RZ01eWgp7UQAz3l6O3yo7OtBD3tZYzX5ejrKOVyCXrJeXtailj6ZstmH1EsoaeFZWspY7sf + PW3l6GgqQTH5sjtTx/Y7iwL+7S/LQV19MdraK9DcUoqmFh9a28rQxu/o6CxDZ3cpunrK0N1bir6+EvT3 + l2FwsIKoxHB/gAhiqK8GIwP1GB9owGB3CE21JSj1ualjrciyUHs5qNlcHjR6vOjyeDBSkI/lhV5sKCzC + Vl8pdlZUYWdtNbY31WJDey1WddZihscRKcsnB2YxNVjLshbD3ZXo4HWKDGoe6oGcLC2yiVyXHhUVuahv + KEFnZwA9vbXo7gnOoQpd3K+rswKdHeUSOtr96Gjl9TVz+6YytDeWop37thGiPB0d/KyV96ilrhDNtQUS + GkN5qK3ORXUgA6GAAzViTuCgE601GehqyEF3Uw7vv4CYb3h2zuH+lgz0Nztn0ZiBvgYnehhrOyvN6GD/ + KIxf8WJ+X8iG/mobBk6D+LujUocWctAGctNav5aa04QacpSaMruEUIkN1UXUpdToFV7yJTf72Fw98jM0 + yLMpJA0iTOBMlUxKA50rj0V+WhzKqUfaqanGPFasZX3YUe3B3kYvLu8pwSUd+VIa6F1BK3ZXGXFG0MK/ + HbiQdfXyoQJcOVGCC8fzcdZQDrb1ObCm03TKAB4lVxzp1GK4S4fRHj0m+i18hmJE7xwGnRKmRDngkExe + Yfb2t+rR3aw9hT7+3dduwECHGYOdVgx12SSMdNsx2m2V9juFXhvGe+1SOdJlxbIeO5YPZGLNuBsblgtT + tkga9btlRQk2ERuXF7NfLcHmmWJsWTmLratLsFVss1KgbA7cfmZ23l9RSimgV/kkiGNK4LJIJS1GC4sR + xcJoPglhKO9a55eM5O3CiF5VjO3TheTZHskIXkc9s7bHecoAFqOAt3Q6sZm6Yd2cAbySGmSFMIArCX86 + VpQqMV2SLkEsr2SdWFGqxqQvHROFIk20AtNlYsSwMH9VWFFO7l6hw4pKPaYq9Bjn38NlYvoZDTpLtYwF + s6nIG8uNaKigDis3S6hjPastNkq/QQYKT77oq4Of7a+M9assW0fMGcKZ1HyZSgm+rB8h/i4h9/U5UiFG + AXvJod0GmQQX44wEclaBHBX5vToWeXoZcjTk++S0GenRUimQrY6XkKON4zYJcBkTkWsgh9XFIItcOkMb + hSxjLDWGmIJIgQLBVYT+JHfxku96yE3d5KYeYeZ6yGvIbYThK4zfzJzYUwZwHnlrrisZmVnUFpn8jGVO + Ds9JzCGcw22oXUR66JJSahbq1Cry07JyBY+XgNy8aORIJnAkMjOWwuFYJI0GLipMoLZQoK5Gg5ZmHZqb + lKipkaGyMoocaSlqQ9Fob0vCAHnnyJAJ/b18Js0qVPnjUUAdVeihZspPRCk5clmhHCXeZP5NfsbzLeL5 + FpJvi1HOHp6rmxDlLHg9IhOX80d4yeul3w09aSgXU3rkq1GRl45ScvPizBT4qNV99niC32mLQrFlCcqs + i1FuW4CAfR6acxeirygC09SiIg302WNm7JswYu8yDc5eppLM332Tapyz3ICzqSPPGFOy1ODCVRZcssGJ + 81fbsGfSiB2jQqNqsZpadLopHcM11MWVcrSLqWDIO8pE2m7xYq8pFgZdLNRCA4msaezHVJpkarF0mERa + ZsJkUMNsUkt/izl9xSjg0w3gtDQxEGX2t0hhAAsjWHwu0j9L5q9xbvSvOo3HT6UeS6HeklOP/WgCixHA + wgQ22cRI3tkRwCcNYE9+tgQxGvhUOmhCjE4+aQDnuGysH3aWZuTlGeHNN0gvGzfXZKKnORcj7S7M9Mz2 + Ceu6zZghF19WGo7RvDAMO8IwmRWG7cXzqSNicUt3Em5qj5VwV38a7hvV4LYBJS5tSsKG/IWYyZ6HFXxO + q91Lsc6zBOvc87EqMwwz9jDsLpyPG1qS8MQyK34248CDPSm4uzkSD7ZH4/nRFLw8pcCLE6nS8nMjqXh2 + QI4ne+R4pDUJ99bF4Y5AOG6rXIRbK+bjtvL5uN0/H3cQd5YvwF2VC3F/YCkeoe54XKSJro3GA4FFuI+f + PVC5GA8FIvFYTQyeqIvFkw1xUvlwdQTuq1iC24vn4fqCMFyTH4brCsNwa3EY7uZ+j/D7nmb7eKE+Thqx + J80d3JiAV/gdLwfD8Uuey6/LF+E3ZQvxG/8i/KlqCf4WisTbjfH4Z7MM77XJ8K+uFHw6qMCno+n4ZDgV + H/Un4cPuWPyL1/xpRzS+7orHgb4kHBuS40S/Aoc6ZNjfGiON/BWpoL/l/TnYFYPD/Yk4NJyC74ZSpHTS + 77fJ8c8Wcss2K95uy8AbHTn4Q1sOnqt34oYSNbazzxh1JKLawD6OfZgxjVo9KRKypCgJs+ZvOGKSwhGb + HCkhZs4Ejk8S5vBsmueTEKOAE+IjEB8bznIpEhMikJIiUkAL8zfmFORitHFaFBSKGLaZWCjZb6q14mXy + FOQXOsjrGnD2vq145NE78fd//BGHD38F4DCOnfhWSgX9A74/DbMjeY+f+F4yf48eO4hvv/0Cf/jDb3DN + tZdjy/ZNuOb6q/DbP/xaGgH8A47+BMd53NNxygg+NQr4oGQAS+avZAB/hW94/C//8ym++ORf+Ozdd/Hx + 62+cZgCvwBl99Tinr5IcugqXjdfglo1D+NnV5+Lff/gFjn31KfZ//Sk+/fR9vP/eP/DW31/HG2/+BW++ + 9Vdp+eNPPsTBg/tx/Biv68RhnDj6PY4f2S8ZwIf2/wdffT47AvjD9/6G999+DR+/8zd8wPKvv30Jv3j+ + QTz/+O147tHbJAP4mYdvwlP3U0/ecSXuvuEi3HyleJl4Oy4/ZxOuOn8r7rh2H1568nb8/LFbcM9N5+GC + M2bIPdqxdrJFwupl9ZgZFRy3iryFPJ/8vbMmX0J7tRsdLDtqPfB7DXAw1unTIqHlc00Xc0onLkVq4hKk + pUTMPmfGTwVjoFIfAZ0pgn3PUmRbF6HAPB/l5nlocS7EeF4EdlPXXxRIwbUNabi9VYH7OhV4qleDV8ZM + +MsKJ/65JgcfrBIGqQ0fTFBzjSvx2ZQKX7Jf+GpSgW+nlDjAvw9OzuLQtBqHl4vRwCocW6UH1hkk/LBK + i8Pc5/uxZBwcT5EM4OPLFTjGdUcJMQL4uwk5Ph9JxMcjCfjXSDw+mUjGgU0mHN5uw8GtRhzYosb329Jx + aGcaDu+S48gZ6Th2tgpHz9bg0Bl6fLdNhy/XafDZSjU+nlax1OLbdRYcou48tDUDh7dl49j2XBzZnIMD + 67Lw3dpMfLdRzAXswr/XZePNZRa83J4mGcAiBfQv2634XVcW/sh++JVmO54J6fAY4/tDQQ3ur1LirgoF + 7gmo8VCDGc905uAXAz78brwSr83U4eM9wzh61SaEGeT/xQDO1KM4T8wj6kBFsQOlRbbZ1L/CABQpd81x + kgFs0SyBnaVHvIXlVqKigGLcS3IliIydhMcSDZcpCvnmGBTx79IsYQCnoDQzAYXWaHiMS+HWL0YhP/c7 + ZQjmpKHGo0JLmQG9IYoOoolkr75Yg3qSvzoBP4lIaTJqfGKevqUIeBahtnAR9wlHl5ivN5gomb99wWQK + khT0BpLQXZHwo/krzN7iKLQUR6PFJ8ooNJcICBM4VkJ7WRQ6uE6YwN3lUegtjyTC0V8ZjoFgFMZqoiQD + eGWrDKvak7GyJUEygGeaZg3gdZ3JWN8lk9ZN1EZgsGoxetnZdxTNQ5N3vmQAV2ewks+lKKmyLkCQxCvo + WIwa51LUZEUi6IxAhXUJSgwL4NMvQJGBDcO0lPcyAnnWWLhsCRSuJJgkP9kWkkJh/pqTSSgpnPRJcGpl + sInJtjUkI5oY6NWR0GgiZqGbhZQK2hANO0luDkmvMHsL80XaZTMK+byFESzSL4s5gIUZnJOhQIY9hRCj + bWWnjN8M848GsIOBw2EgEWYdyeO5nW4Ai/mKhQlc5JGjKF8OnzdNKr0uEtxckbYvBa5MXk+GTJrXUKS0 + 9LrVcGcrJbNZGMBWQ6xk+goDWkCYwE5ef4Y1CbkihQ/PU7wtLgxgkao6L1sNG69PqWDgSVpChCOFQUvM + BSyN/hXpn0m4FHIx+jeFfydJpOvkHByzy3ESxLwFafJEbpcArSYVZkM6HFYtspwkSxkihbMV+dl2klUH + fJ4MlHmzSFhzUFlEAV7mRUOgWDKAhSl8ugEsUj2fNIAFxLKY81eM+nWaNcgya+Gy83nw+F4xyjjLeMoE + lkYAZxtQmDNrAJfl2xH0ZSBQ5JQMYD9R5TVLo3tDIlWSzyqN+m2tzEZbVY6ElsosNHCdGOFbw/tWV2CX + DOBqj4ntlUIqR40A72WIn9eX2BEQBnuWCi5zCjIpajKNMjgocET9K2MfUcvOv5H9QCvJeoeXRNmvx/r2 + PCkFtBgB/F8NYCvruMW0aM78XTxnAEfAwP7DYGXdtcfB5IiF1UFhJeaN8SRQRMTwXiyG1zGPfcs8+Kxh + KGFbqrSFoc+3EOvqI3HBcDpu32DGzy/Oxp9u8+Cfj5fhoxer8PUfG3Don5048e8B4Mte4LsOohb42gd8 + lg18ZMfxf7JT/xvxWyv2P2bEx9co8acdMjw8tBQXBsKwpXgBZkpjMVbGvqZMjq7SdPSUqNBZQMGUp0Yj + 610TxWar24ge3vuRykzMNOZTNFOs95RjbUsRJoJZGPKLEcNK1GckoJHirTdfho0NSpw3qMIdm/V4+Uo7 + 3n3UhYN/LAT+6QY+yeB5WoBvGbD2M3AdsLJ08m8njn9mxqF/6PCvnyXjDzdG45GtS3BhSxjWuMOkFDs9 + xiVo0SWiRq1CQKVFqSodXiX7DQXFbHoCRaqY/0iJAsJtUCBbmwIrP9OniDQeJGfJEUhOWoo4IlK2WDJ/ + I5IWnzKA1dokyQDONCopdlXwUPAUso2UmpWotGtQk6lBg4uCnXWpLleNINtvhTWR/WAMnxvhCEcgYwlq + ctifFyxGT8VSjNQtxsrOSKzri8HGoXhsGUnGNAluP4l2uyeM4o5EIWchml0RaKSYrXfFIUhh7KfwLXKI + l2WiUeCMl97MPWkAVxXoETgN/nz2GSKNLuNWQQZFvzN5rmR/5RAQBrAcTWV6xiQHBmpnDeAmHwWyN4Wx + Q4HugA4jjVYs78rBTFc2ZrqzsaJHzBXmxHirCd3VqegKyjDUoMB0hw6rewy8Hhu2jtopLDOwXRoFbMe2 + URt2jloJUdqxi5/tGsnBhi47JkJq9JclSybwYFkqhsvTMFKRjvGACsuCan6uxXhQhdEKLlfrsbrVic0k + Bpt78zDT6sBgpQrtBYloL4xHf0UaljdZsK4jg/HKifXE1oFcCRu6Mhi7TJio0WG0SnxnKvqK5ZIJ3E0h + L8zf7rw5Azg3kYhDb24M+tgmh7wxGC+KxnRJDNZUyLA+IMOmGhk2N6Vge7sKO3u0OGPQiD3DZuzs12ML + idyGLiXWdiuxujud9y8Ny7rTMNiZgk4KuGYKotYWOXq6NehoTUd9MBrNVUsxwPi7ojsZG4bSsY3tfFOf + XJpqYXVrKta0qbC2TYflDWqMVKXyemPQ7IlCUz7B5SZfIhqL4hHKF+meZ83fGk8k+zvGXW5TJd5+98Sg + NC8Gxa5YFLvJXTzs2xirSoly9ml+orKI/WKxFsESnWQCh/xGBMlXSvLTpdG/DmMEsh0UUox/ArMG8Enz + 90dYGcf/qwGsVC+BnrHZaKIIM7IfJM/S65fCYo6Cr0Anmb/BKvGjbiYquXzSAM7LZazMSIPdLpfSMqs0 + 0UhRLEESkaxaIpnARifjplsrjf71sV/KK7Ug20fhn89YmZsGa9as+Stg5rZGW7JkAAsTOSWdJP40pKki + JPPXaEmBhjFAmL8KCkcx0lcgVcF90qKRnBqFZFFSDKRIGQN4XupYJEuIQqqeos8qg9qWCBWhcSbCTE7g + dKchx5MOF8vcPHIETyqv2yQZwNWVvGYxkiArDj7e2/LsFMkAbnDJpRHAHeQT3SIVtDMB7eSbTfolaNAu + QKthCTqtkejLiMVQViKGc9gus1nmyjDK5VHuN87jTPBeLGO/MUp+O8ZyguexrDAdg17xEkQyOr1JaM9P + QkcBlwtT0StekChOZ3tRYLBciYEKJXr9CnT4ktnuZNxehi6PDP3cd5BtZ0yYzvy+cca06dwErOFnmwuT + sKt4dgTw+QEFLqhJw1mVMuwojeFn4dhYuARnVMTi8hYFru1U4eq2NMkEvmOQxH95Jp5ZnYNHxs24o0OO + a6ojcXVlJO5uUuO+ZgPubjThtnozrirncUuScBbbwJb8SKz1LOZ3LyIWMlYswpbCKJxXrcDF9RqcG0zH + 3kA6zgoqcEYV2xr7n03FidgsUEKUJmFreRK2VSRL2CIhERuJ9VWJWBNIwOrqeKwJkRuzXFURhZXF4dhQ + HoMz6uU4r1WDfbyWM+oTsbs2FrvronFmYzz2kVef35eG84eVOH+ZDjsGlJhuSmA/G4HWqhg08rj17Fvq + q5MRYt9a4U9iu4gnZ4xHHuuC1ObIPXOdglMmwZNDvsl2WVyglDLNiFJMN1IqTGG2YWECi5HAwgiWzF8x + BzBRUixS36nhL7egqcWDFauacfW12/Hgw5fi8aeuxpPPXCelTf5/MYBPQqSE/r8M4NNHAD96mgH84ANX + 4f47L8Ft1+3FLVediTuuPgv3XHsOHrnlUvzsgRvxIkX+0/ddh4dvvQwP3HQx7r3pQmkO4PvvuAQP3XP5 + KQNYpIB+8pnr8dzPbpHmAP7Fr+/DS6/eg+dful0aASzmNRbXcs99F+PW2/bhyiu24ty9K7BpbTdWTDRg + 8+pubF8/gPUrurB8tBFrJ9uwZ+Mozt46hu3rOrF+qgarl1VhZqQEU/0+9uc+jLcXYajZzX7bhYF6N3rq + XOgI5vBZZqI9kIOO6hx0VrvQGXChvTIX7RWz5m9zSSaai7PRXupCb2U+tV0RdZkbtTkWBO1a1JFXVKrj + UC5fjEZtOMbYjrYzFl416MSDq914aYcPfz23Am+eW4I39xbizbPy8NauLPxjdxb+KYzgndn43Tornl2m + xNPjCrxIQf7bTRTVWyz4/TYL/rDNhj9Q3P+J5Z+2c90WHX65TokXV6TguYlEPDESi3s6FuKOlnl4rD8c + v1yZite36vH+Hgve32HAOxvS8dkuE74624EPtmnx2spE/G4mFq+uiMKLk4vxwtQi/HL1Uvx5ayL+cWY6 + 3t+nwTt7VHhjaxre3JyKd7ar8NFuHT7crcb721Pw9sZYvL81Hp+fnYoDF2tx/Boxl68FBy+dNYC/OV91 + ygA+mf75fzKAj19tk8zfgxdp8P2lGhy+0oCjNzhx5OY8fHtzCf59fRAfXt2Bv13Sh/s31ePCsWJsbssm + z7Cgp9yAGpHti3Gogc+upcGHro4gOojmJj9amyvQ0c6/2yrR3lqOjpZytDeXMZ77ucyS23Q2l7PkZ6Js + FmZpFT+rQmtDOUq8mSjIc6LQkynBV5SD8ooC1NaVsw0G0MjtG3iMRn5PU4sfTTxuU2sZmtv53R1laO8q + Q1e3H93CTO2qIKrQ1c7jtwbQ3R5CX2c9zyWEupoKtvcSuLJc7CPy4MvzIVDoR0MRj1FUgoHiUoz5irG8 + sAQzRaVYXVrJ/iyAVbUhTDXWYFlTDUZbqjHcEcIgMSTQVYNhoqetCs31pYzPBexDcqipc1BYlA1fMbVg + dRkam4Joa6tBe0cN2niv2joCBK+/vRKtrRWn0MJ7J4HX29LI6+X9aWrgOdbzmlkKNHOdgPQ51zfWlaKh + 1of6Gh9qQ16EgnkI8jkFq7JQw/bWWM321JCLHvZn/W0enjfbZXuuhH4+48HWTAy0ZEgYbGIpTOBaO7qr + zOisoJ6ZG+krpukaDNkxfDqqxXYGKUNOU7kKdWVsoyVm1JZaUVtGXSlMYPKOEHVosNCCynwTuZYJJWKE + WaYWHjEK2JSKHD25kToJTpEGOjUG+Wnk9NQjrQ4NhvIsmCnOwNaqXMkAvqy7BJd1FmBfUzZ2V9skA1ga + BVxnw/ntObhswIurJkpx6WQRzhlzY9dQFtb3WCUDeIJcfEQYwD3kur0GjA4YsWzQSthOYWLI+ROM9tn5 + nHkP2vToatYSGqnsbtVJ6BUjg9tM6Gs3S+jvEDDNlT/FQLsJvS0GDHL7sW5hAufMziU84cH6CS/WLfPy + by9WjeeznMWaCQEP+918gttMFhCFcyjgOg/WTLqxborbTLmxYTof65eL+YBFyukiaa7gXWtKsWddOc7Y + UIGzN1Wdwt5NAezdyOUNlThLfLa+HGetLsOe5T5s53dtHsnF+r5MbOh2Si+lburJwJbuDGzucGBDk1ma + B1gYwDMBjYQVlWqsrNBihTB2CbG8ms9nZbkeU9TLwgSWRv+eMn/VmCnXYaZSj5mgEdOsS5NcHuN+gxW8 + txV61kE9WisMaOL6RnLABi43lovRwEbWM/JwxvLqYh2C5MSBQoP0+0elh8gzEYzvuTqU5TDuU6MLlOSc + BrEuizxBjAK2pSCfHNpjTJ6FQTZr5M4ZwJL5qyXnMKUgV5uILFXsKQNYLOdoEiTk6shJuF+eifsbCXJp + lzEeueYEuG1JKMlTwie9gCyXBk24MxNRIFJBk+vmu1PhJd/Mz+dyQQryyDeF6ZtFzTVrAPNvVzKys2UQ + GXJs9mipzMiIJ1hmxsKVlyAZwMWlCpRXMl6eNICpBXOpcYQJfLoBnJMTjmJfEvm1in2Jbs4AViEUSkIF + +VtZySIEKpeiqTEOfb3pGB40oL+Xz6QpXTKAfdRVvnxhACdIJnAJNbIwgAV8PH+fJwVFburrHGF2875k + xcOdLYzgRGJWK0kDW+bgFlPIuVK4nwJlBTx36pQy3i8f9XqR0Oq2BEJkloyFmCLPZ1mKMttSVPF6arOX + oMMTzr48BtPBRKxrlmPXgA57hrTUoOlS6uezpFHAKpw1ocXuESW2Dcqxc0SBfdMGnLfahrNXGKnPtdg4 + qMKaHvLQVgVG6sRvy8noqEhFU3EyAuT2Yh5jofvs5lhqNvFCfBz1EXWTSialgdZq5NBrFdDr0mHUK08Z + wMLUFUauMHjF742njwD+bwawTiWZv6KUzF9FMvWUjDqL2/PzNDGSeG408GwqaCX0Zq00D7CY/zczx4kc + F2NrUZ4EYQCLeX8tNp0Es1ULp0MnGcDC/HV7nCytcLtN8Hr0kvYM+s1oDFrRWWPFWIsDK7vsWNVuwPLa + FEyUhWNc/N6UKdI5h2G3fwGubYvFbT1JuLkzHjd1xOF2Lt89pMStfem4tEmGLUWLsY4aZK03HOvzI7Au + j1okJwwzzjAst4VhuycMV1EfPDhkwKPjRtzTlYw7mqNxf3scnh1Lw4vTKvxsIg1Pj6biyaEUPN6bioc7 + U3BfUyLurInBzRVLcVPFImI+bilfgFt5ThK4fGflItwXisAjDXF4jPrisYZ43B8Mx70Vi3F/1RI8GIjC + w6EYPFITi0dYPhCIxL3li3FH6QLcVBSGa/N5bsS1hWG4uWQe7hRzCFeF44lQFH7OY/2iWYZXWhLxCx77 + xdpIvFC9FC9XLsSrPB9hAgv8IbAEfwlF4i3qnre57T/bZXi/KwUfDSrw8ZgCHw6l4r0+sT4K77ZG4mNh + APfKcJDrfxhTAiNqHOc1H+pMwP6WaHzXHIn9bdE40huH48OJODaejO+HZfiqLwkfiWM3yfFuk54w4Z1W + O95qy8TvGesfr7NQG2qwyatEO/ulYvZtdkUc0mWRSJZFSyN3E2RRiJVFIFoygSPnINYJc/h/N4AT4sJn + zd/kaKQxlivTEwlRxkOlTCDYXlRxUM8ZvzpjCgwmOest9VpJNrlRNTZuXo4bbrocv/rtz/Hvz97F4SNf + Q6SAFqOBf/jhdANYjOQVJvBBHD9xEEePfY/9+7/GW2/9Dfc/cDcuveJiPPDIfXjj7b/hu++5//8fBvB3 + B7/Gdwe+Ps0A/mjOAH4dr784mwL68nXTkgF8bn8VLhkN4orJWty2ZRgvXHc+PvvTL/HD/i9wlMc6sP8r + fPfNV/jyq8/xxRef4T9z+G7/Nzh2lNd0/LBkZh+TzN/vcOzQtzh84D/45gt+5yfv4qMP3sAH7/wV//7w + LXzyLr//Dy/jpWfvx9MP34xnHr4Fzz56C54jnqJWvP+Wy3HLlftw9fk7cOneDTh/9yqpvP2avXjxiVvx + s0dvwl3X78V5uyexfroVqyeayDmasHK8BtNDQSzrq5g1gFvJ/Ws96BTZearz0CFlnnGh1KNFhlEMEIuD + ic9Uy7ioSomEgvUmnWW6GOWtjIBcvQRK3WI+78Vw2BYhz7oAftsCNDAOjeRFSb81XFbDvqJZhQe6tHhS + zAc+rMNvl1nw5ionPtqQiy+3evD1RparHPjPCgM+n0rHl9MKfDWViq8nU/HdpAL7p5T4fmIWkgk8qcb3 + 00ocndEC64wSTqzUcL0cB0bZXsaSpdG/J1ak4/jydBwlDrOf2c9jfT4iw8dD8Xh/MAYfjsbjmw1aHNpm + xvdbtPh2kwIHtspxeHcaIceRPak4ekYaSwUO7lThuy1KfEP9+PUajTR6+EuW328w4fBmK2EhHDiyOQOH + 1jvx3So7vpqx4Zs1mfhqXQ4+3+DCuzOZeLVTKRnATzek48UWI15td+L3vS680pGJZ+pNeLhai7urlLit + LBU3liThprIU3FWtw2Psq3/W7cErQz78fipATTmAw1dvFAbw0jkDWCYZwB6nVjKVClxGFOWJOV+NcJMw + ZTvkyLTJ4BSjSAxRsOsiGPASUMRgXJavgd+rRWmeCgVOEiIzSZCYC1YfAZchGvncx5eRDH9WMspIcIps + scg3RpAYLUUBty1zJKIqR46gW4kGnw6dAQc6iHrx42oByYdPQEmCpyBSUONLRHVBBAPvEtQWLUGLPxJd + wVj0BmWSASyCc18wBT1VSSSMCbNpnkvF6N/Zkb/Nvhg0FUUTkWjyCcyawJIRXBrF7aLQyX26/FHo4bF7 + KsLRXxWBAQaAsVqSCXboqztTsYaYYac93ch19XFYyeW1HcmEDDPNcZiqj8ZodTgGSZh6yhahrWghGt0L + UZcjRrvNR5V9Hqqd81BHotKUF4G2gli089qa8uMRzIpEmWURCo3z4TUs5P1aQgK5FDnmaGSZ4/gcCGsC + MkgoM0gss/j8JPNXlwKnGL2nkcGsiYdBEwu9OoqkIYIQpm+U9OOy3hQNI8mKSKGcQ9IrDGBh9haKEb8s + RcAXEOuz+bkwf+0kxDYznz/hMM2BRFaU/z8NYJI9yQAmqRWjfoURXChG/86N/HXn8DycPI4tDpmsD3m5 + rIsuJQmgQjKA7SRVdlMcshwpcGWnSRAmsDCfM60kwhk8Xp4GJUWzBrCX552XrYSNnysVS5GStGjWBE6O + kEYBi7eQUlPiIU9JlJCWSuLF8nQDePaNvAQJYp5gMT+wmLxer0uTRv86pNG/RuRkmklkSZSyrfC6bHMm + sBMl+RkkrdmS6VtTUYj6Kh+qStw/MYCF2Xu6AZzrNEkjgDOIHAfXZ1pQmGNHsTtT2u9/NoBnRwHPGsCZ + CBRlSAZwqTBxPUZJBAW8RmmEb12JnQIqC51BF7pD7LhZtpRnSeZufZEV9YV21EkGsJHtlWQ7S4nKXI00 + B7AYBSyOUZGnR1GGGt6MdOQ7lWzvFCdEea4W9V6KM2EACyKRr8Cw34CN7R6cPRn8Hw1gi2EBTEYxt+US + Bv2TBnAkDJYY6EjqtfYEGBzxMDtY37MT4aEAKvBQeFG0eByLkW9dCI95Hjy6MBRqw1BtDUNP3jysJBnd + 15aA21Yq8cQeA166yIbfXJ+JNx704ZOX6/H96z04/l4X8O8W4LNqwgd8nAW8Z8MPfzfj6GvEr2048qQV + /75Bg7/sScJjoxG4JDQPO0oXY025DJPlaRjwy9FTkialye0qSEcb+7AWl5rXrkN3EUW+34ZlwQysbMrD + hs4ibOktxYa2QqyozcZYpQ19PjVa85KkkZWT5Urs6TSSKGhx52YtXrjUhDfvs+Pb37iAd3J5rk7gGxOw + X4cTBwRM+OGAHSB++MqMIx8Y8NmvFXj7QTl+eVES7lwegX2h+djgnYflOdEYdqSizaBGrVqNcgqGwrQE + eEjICjUpKLWqUO7Uo9imgdeYTlGbAmsa739SOAP3UsgZvGVJS5HAv2NECuiUJYhKXYq4tNkU0CcNYKee + 7VWbhhw127QmGYUG9vmMKwEn+27Wjwa3DrU5SgTZXsvZ9/iFCcxnXOGIRVVmNOrcMWgpipUyMfSTSA/V + LMFw3SIM1y7GWH0Uev2L0CwyKWTPQ0PWQjRlR6AxN4aIR71Lhuq8RFSIVL0i04Q9BoUijVRWKsoYm4QB + HCjU/wQVrKtlHjV8OWncTo5i9islOQpCjlKKzJJsCl+3Ag0lenRUibnOLIwpBrQUp1P8ibk9leitNkgG + 8ESbE8s7nJhuz8BUhwPTFEcjzXp0ViahrTIBg7VyTLSoMdOhw7o+CzYN2bBlDltF2ucRYfyKEcDCBBYG + sBPbBzKwvsOMyZAKQxScg+UpGGW9G69Kx0QgHZNBJaaqVRRgWqmcCIhlHTbwHLb1uySsarNhrFqN7mIZ + 62kiY1I6VrfzO3uzsXMoF7uG83DGuEcqN3TasKrZgKkaMZJYiSG/Qhpx3F2YSjEtQ4crcW7kL4+Vm4ie + nDj058Zi2B2PscI4TPpisbwkDuuEAVyVjE3VSdjcKMfWVjW2d+mxvUePTV0abOhQM04qsaI1DVMtFI+t + qVjWkYbRbn5fpxwdbalobE5Cc4sCXd1atLepUBeIQUNlOLoZgyfak7CqNw3ruuW8liSsaEzAigaua1Zi + dYseU3VqDFfK0elLYF8k0kCL2B+P1rIkxvhE1BXFIOQV6Z+FARyF6vxZVHlj2HfGoJT1sDhvzgD2sg4X + iB8gFCgXcz0RFUVqVPo0qCzWsE/XsY/XoZJlkTuNfXoUrPoljGXRjA+JEkT65yzGwQzn/2YAR0gGsEj9 + LF7OMjG+W22JsFrjYOGyhXHfaYtnbOP3lLF/rspATTALlX47SnxGxmo1XLmMJxmMTXY5jCbGPY0wXRdD + lrYIScrFSNWEQ2OVwe5SwV3MuFKRAQ+PlcP9nflaWHPTYWG8NZ80gEUa6NMNYGU45Olirp4fDWAduYfA + 7Jy/0UgVJq8Y9UskyyMgI+FPZMyVpbIkZFyXqGCpjEKiSBGt4nb6WKRbk6Gk8FSSY2oyZDC52Jew3eXm + K5HHOOIWL4uJ+1+mR7DKiJJCcgC28Tx7FLllPMqzUhDMTiGXSmGfkIzWTHI/co82exxaTJGo0y5EjZr9 + hnYBWsxL0emIRp+TdTcznmU8S7bPjAQMcb9h8tQxHm9clE4ZlrGcylNgqlCJZUVsE1729/nJaHezPXgS + pRHBPUWp6BFGsI8oSUUf20xPcQq6Cnke+Qno9iSgh3Vp0J2IYbahcVcSJogptqGZPBk2FKRgqy8Fu3zJ + OLNUhnOq5DivJo39txy7q2TYXhpDQbQUO8oicWFDMi5rlePSxmRc1ZaGW/p0eGDCjsdWZOD+ET1uapbh + iqqluKoqGrc1KAgtbmk04vp6I84rTcIuttONrOsr8pZgmWs+z2UBluUuwETuQqwriMYZVWnYy/5GmL5n + BtQ4M6TBGSEdtlNYbPKnYqM/BRt4nI1lydhYnorNbGcCG6v4Gdv8evLutcSqYDJWhVgSq4kVlXHsG6Kx + xh+HHbUK7G3R4Zx2Dc5sTMWu2njsqovD2S3JOK9biQsH1Th3SIW9Yzps7ktn3x/PPjQC9f5ohCrIj8sT + UFXBvplxuMQnzN8YckJyY0cMtQrbnD0JmeIFSZEtR6RWzBMvHirIO0VaaMWcIazivrMm8I/QkUNq4fNp + UVSkQT63Kyk1oL7JhemZBlx+1Sbc/+DFePKZa/Hsz27CMz+/BU8+ez0eefJq3P/Ij+bvfzeAL5JwygB+ + ctYAfuSJ2TTPJ/HjnMDXSZ89KtJASwbwlbj/zotxxw3n4Pbr9uGua/fh/hvOwxN3XomXHr0VLz9+O56+ + 9zo8fNvlePDmS/HALRfjvlsvxgN3XoqH77lCMoCfeuw6PCEM4KdnDeCXXr5TMn9feOVOPCPM3+dvwuPP + 8BweuxJ33HM+brjpDFxy8XqctWcZ1s60YtlINVYua8S66XYsH2mQRjpODoawaVUXtq/vYdmEtRNVWDlW + iulBL5b1eDDakY/R5nwM1LvQV5ON3ppcdFVno6VSZJ9xkIuKTE+ZBMvyTLSUZaCx2EkdSP1HHtpY6ESb + Lxvd/jz0V3oZv1yozzKh2sJ4QFSp4+EnD6lVUWOxj532JuKMRhVuGHPg0fUuvLqrEL/fnY8/7s7Dn3dm + 469b7Xhrq03C3zbb8MvlWjzan4gHeuLxOMX/CytVeHmtFq9uNOA3Wyz47VYrfk+B/vutZvx2sx6/XKfC + izNyPDuRhMeHY3Fb0zzcXBeGBzoW4cXJJLy53YgPzrDjvW0GvL1ajo/I4z7fbcaHWzX42+okvLZGhj+v + T8Tv1sfi9+tj8KctcXh9ZxLeOSsd7+1V4e87FPjLhmT8bWMq/rFVjQ926PD+djX+uSkJf98Qiw+2xeE/ + e1Pw/SUaHL/aRFhw6DI9vrtApIU+zQAmxMhgUR4RBvA1cwbwtQ7+bcZBbvfd+enYf2E6vr9cg0PX2nDg + plx8cWMJPrq+Bu9d34e/XrUM9+7swt6JSmrcbLSxbQQ8KhTlpMNHDVDlz5XMyPaOBrR2NKKuMYiGhgCa + mkNENeN3AC1NATQ3VqG1tQotLZVoa+LySTQGiCBaG2bRVFMJv8/L9pdPeFFMlJYUwl9ZghA/q+M29Y3V + /J4qllWoa6qYRWMZSz8aWoQRXM7zqUR7O7+vVYwYrkRTfSUaaoVByu9pqpHKmuogyv0V1JiF8LpL+b0B + VJfw/EuDaC8LkGdWYai0AuM+otA/W5ZXYixQjeGaEAZqQ+jlcbqbqiX0iLKF64Sxy+XGmgqEAqXso4rZ + R5WgorIUlYFy1NaF0NBYx3tTj0aeSwPvUUNLhQRhajc2CpRLaGjwo56o4z2uqy9HXZ1fMsJramdLgXpx + bXWVaKznPeE11tVwfagEtdU+hKoLGSs9CFS6EazIQU1lLlpq3Ohq8mKgvQjDXUUY6/ZipMtNuDDckY3h + tiwMtgoD2InhlkwMN2ey7TrQV21Bd5WJXNeKgZANQ3X8vNaJ0RoHRkMOjImS6A2KNNEGtmsNGsqoB0vF + 6EyrlGXqJMSLyNUnDWDq1BLxO1OmDvkONXKtCskEFhmI7OnxyJDHwE2dUqYlH7Sp0JttlNJAbyzPxtn1 + +bik3YdLOwpwblMuzuT37+Y57gkQIRP2tWTgUvZDV0+X4aqZMlwwWYAzx1zYPODEyh4TJjr1vG4dRvoM + GBs0Y3TIjLFhcuXTMD7i/AmGB+wY6OG96CCvb9Wio1mDzhYtulp1ErrbjNKc9LPlSZh+XG79ET3k2Z2N + OskEHmqnfujJwPSQSBmdjeWDOZgeyMEUy8mBbKmchVjOlLabHsrB8mEXkTeLkVxpHuIVI1mYGc2RIFJN + rx7PxbopNzZOe7F1pgA7ZnzYtboEu9eU4qx1fglnE3s3VOCcDZU4Z2MVUYlzuXzuugrsXe3H7uVF2LbM + jc08t439mYzJmdjSn4VtfdnY2pWBTa02rGnQM9brJKwWZTXLINdVcZlYHTRgLXX/6oARy8s1mBSjg/0q + TJ1uAFdyW263is9vBctpbrusivqKdaqfvK+rSo/WSmEAa9HI9Q0VOjSWsywXU7EI6FAjsvKUmlBTYpJe + NqgutKPaa0OAda3SLeYJ1qM8VyehLI/67yRcRI4KxdSqhbYUeCQDOGkWpiS49Ylw6xKQNwePIRFecyqX + ZdJo31kDOHZ25O+cASxGDQsD2M39PeZk5FuTJHjs4kVj6k1hZuYqkE++6RIDZ5wJKCT3FQMkCgTn9c7C + U/ijAZztipcM4BzyxuycJDgzhEaIlDKnidJG3WGzR8LujEI2tZmYB7ioOBWlfiX7UnKeMh67SEZOHQcX + dY5kAGf+aACXlCSjmjqysZ73mlqquUnDviQJ5eUx5EsL2W8uQm1NFDo7UjA8qEN/n5b9ahqqyuNRQv5Y + TL1V7KVWkQzgpDnMmsDF+bO//eXnJEumr4v8W0p3LcxfIpf8OzdrDmI5MxF53LaAWqAkX0zZpEYx409B + Riq81Ar5lljkm+Ok35G9vH6fNRx+RwRCOSLzUyx5eRxG/YlYXp2M1Y0p2NyVjq3UmFt7U1l3U7BjUC5h + p3iZeIActieZdTuF+luFXRNabBtVYl2/Aiu6UjHZmoKRhhT0hRKp6RPRQi1e65PBT+3rop5wmCNhFQaw + KR5KXRzS1D81gHX/1QAWaaANaqg1ilkDOOWng0+E+Xu6AazVKCXDWGwvmb/cRsbPksRvlmknjeDk00YE + y6Hmdxkss3MBO7PsfN6ZKC7JlyDSQJstWhhMYmSxmvVHDbtN+xMDOM/Dcs4ALqJGLCM3rmY7Ey9g9NeZ + MNVmwUyrHivqUrEiQP5VsADL88KwzhuGfcFFuLErAXf1J+N2kQa6Kx63dsbjzv5U3NSdiosbErCjNBxb + S6KwpSQWm33RWO9ehLU584gwrM0Ow56ihZIBfGePikjDHe0y3NYci3vbE/H0WDqem9Lg6WXp5GJyPMzn + 9mBnCu5tTcId1Au3VUfjhoqluKGc51GxkOUC3ORfgJvL5uMm4jauvycUJaWKfqxVhsebZLg/FI17qZ0E + 7g9E4+GaODxYze+rjMQdpYtxSxGPUTgP1xWE4VriauJ63zzcyjZxV6UwjSPxOI/xfEMiXm5Jwis87kst + Cfh5fSR+Vr0EL1YuxCuVi/CqAM/pt4HF+FN1OF5viMEbzfF4qz0B/+xMwvusix+MyPFP3ru3OuPwt6al + eJP4V2csvuS6gyNpODGuAsY0wJACx1hvD3bE4vv2aBzsisWxwQT8MC7DCXLSQ6MJ+GYgAZ+2x+FDntf7 + dQp8UENuWW+QjODXW8z4RYsN9zZYcW6lEUNZcpSz38pKi4UqIRKpCbFIksUiMTEGMbIoRMoiEZU0i5jk + aMTOmb//kwEsUkAn8BhiBHGaPB5qdTLbQSohytPAPlRvSILJImddVcHmVMOZrWdflYt68qLR8W7sOWsz + HnzkDvz5r6/ii68/xMHDX+Lw0W+Ir3HkCMFlMepXGL/CCBY4emw/Dh76Fp988iFeefVFPPrEQ/jVb3+J + j/79Ib4/vJ/bHPkJ/lcDeC4V9E8M4O+/xv6TBvAX/9UAfgHP3XI9Ll83NWcAB3HZaAhXTdbhjjkD+PPX + fgUc/AY/HOf3HOV3HDmMw0cO4fDhgzg0hyNcd+LEUV6T+OwADh/6DkeJIweFAfwlvvvqE3z52Qf49KO3 + JRP4s4/fxqfvv4E3//SKZAA/cf8NeOrBm/D847fi50/ejieoEe+8/gJcdf52nLdzNfZuW46ztkzigjPW + 4NarzsLPH7sZzz18A+649iycu2sCG1e0Yf1UM/lDM1ZP1JJbBDExcNIALkJXXR46a13oqCFq89AaypYG + 1eQyxmUy5jlNybAxbhqVcdDIo6ESUESwP1sKkelOqVsIg2E+Mi0LUGCdhxrGoP7cKKz3JeHcQDpubzXg + sV4jfj5ixq+WWfDHaSv+vtKJjzdk46tNLhzc7sahzTn4fo0N383o8c1yBb6dTsXXU8n4djIZ+yfl2D+h + wIE5HJwUJrAYFZyOw8uVwBo9flirx1Euf78sBftHZD8xgI9x/ZHp2W2/Z/nlWBI+HonHewPReHcoBp+v + SsP3W3Q4sEWFbzak4MDWVBw7g+3xDDmRgiO75Ti0U6yX49sNqfh2bRr2r9Pguzkc2sjv3mwkTDi6yYrD + G+w4wGv5eoUZ/1lOzNj5HRn4ZE023l2ZhV92KvFUfTIer0nFs006vNRux6/7XPgl8UyrA/fX6HBrpRLX + lSbjiqIEXOlLwI3l6biXffXj7dl4jpr8lXE/3t3Vh4PXbkSYUb4EVhWJC8lMriUNeQ4N3E4NctgIc+wq + BmAVsuxpsJlksJsTkGFNhJNBLoPIZ0dRmq+D38uGyuBQmJ2OPKuMD57H05N86CKRq4+G2xyPImcSShnQ + yzKEARyHfGMk3IYIKXCXOhNRlStHwK1ErZg/tMImIVSkQVW+EoECgTRU+9JQWywMYBmqSTSC3nCKi0hu + G4Ou6jj0VMsoVFLQE0xGd4CokklpndtLxZy/sXMGcDSai2LRyP0bCiLRUCgQQYSj0RchGcQiTbQYNdxd + Ho0eMQqYnb8Y/TsYjMQyBq2ZtlSs7UnHOhIJYQaP10ZinIRoujFOGokkIFJCT7NTn6iNwlg19xc/XJcs + RXP+YjTmLUEoc5E0Erg2ax5a3EvRxXMbDKRgqCad35uKWpIXvzC4jPPgNs4ngVyMHOMSZPCeOQxRsBqj + iVjY9QQ7a6eWz0WbBLs2hZDDpkmBWZN4ygDW81noxQggUyxMJExmWzwsNjGXbsopA1gEeZHu+aT5K+b8 + zSUhFnMD2y0yWAzxUhpmATEaV/p+kfrZGPc/GsBSShs+bzdJbX7mjwawgE+MBP4vBnC2Mx52awwctlie + U7JkAudliXTTSXCY4vhdXJ9JYk7SLCBGCmfaEqUXE1wZKSjMI7ktMqC4UMxXrEEe66PNmoB0xWIkyxYg + JWmxlMZWGMAilXNqchxSk+K5jpgrBdk63QBOU8jYWSVBRWKlJrHS8r6ajLOjfzMchlMGsCvLQiIr0kBb + Ieb4nTWC7Sj2ZKC8MAfBsnwpFXRlyU9HAP9XAzgv0yIZvy6WnhybtL+/IIfHcLGNZUqm7/+zAUxh7Rdi + x21AhUeHKj7TUJEFLWVOdFfnkcAVoEekbajKRbNIB13iQEORDfWFFE0eA/xZQgylsVRSOOkkE1h6e9tr + 5vFm4RfpYewUMJYUlGerUO/VoUmkgD7dAO7w4Kyp/8UANi5gnVxILIaeECLmpAGsZT+hYT3SOWQwsI+w + Z1OEeVLgpRDKd7GOOSPhsi6Fi/vnqMOQpwhDEVGjC0OPfR6DyCKc1xiNq/vicfNYIu5ZI8eTZxrwh5u8 + +PDpOnzz22YceaMaJ/5ZBrznBd7NBN62A3+z4fjvLTjxig0nnnHgi1sM+NuZyXhiPAKX1czDzrIlWF+Z + jOlKBYbKxA/+KYQcPYVydHnZfr1i7mMTBv0WDLMfmwg6sKI+C2vb3NjUWYANrflYVU9hH7RjiIK1p0iO + IfZta0JanDtgwxXLdLhjgxrPnq/Fa3cY8OUrGfjhn1nAf4QBbAT2q3HigBbHDxhw4nsL8L0NP3xnxtFP + jPj6NQ0++Zkeb91uxItnKXHbaDTOrVmMbSXsmzxKDDu0kgkcoijxMyiXqhJRyfpck2FAiMS/zKZBgVEB + F/sSW1oM1GLuhviFSGEpkxHJSxGfshSx8nDEMpDHi1F+6bMGsFGXyn4nFQ6lDBnKROTw+B4txaBJmLwU + lWyPtWyjNTlpCGSSZHKdn223nM+4QsSArAQ0eFPYB6eio5x9d5VIy78E7f75aC0JQ3vJIjR5F6Imdz5q + MheiLjMc9VkxaMiOR0NOAupcSQi5ZKjITUAJhaXPOTs6sDCTwpP9RblXi6pCvYTKOYhUYX6KSmH+ClTk + qVHFvqPSo+KykmBc4n2rL9ZJqceE+dtRruP5qNDmVzPOaNFfY8YwybNkArcI2DHRKgxhC4bqNTz/BCm7 + hIhNY43pmG7VYHW3Aev7Ldg0MIvNgyZsGTJjx4hpLg20FTuHbdjSa2W9MWC6RoXxQBrGqtIwUaXAVFCJ + 6WolVtSqsLJOhTWNWszUqbGc263id4rUbLuG8rBjIBdreB4TIRX6y2QYLE/CdL0aG7rt2DPswnnLCyWc + MyV+HMvDhg4zVjVrMc3jjlenY7RKiYGyNHQUJKHFFY823t8u3ufu3CTJAO7PiccQ10/kyzBVmIDlvjjM + FMdjPZ/fhqoUbOI1b2mg4G7VYmuXEZs6dFjVxLjZQEHdmIoxkpnhehmGGpMx0p6GoS4FejrS0NomR0Nz + Kppb09HZqUVrK+sNBWZt+VK0V0dhpEWG5V1yrO5Mw8pWtkUeY5rHWtnE62/WY7JWjRG2z57SJMkE7uA5 + dfD6OytT+PyS0cj2UFcYLZm/pwxgb/RPDGDfnAEsfrgoK1RI8BepToMafp8K5T41KnxallrkM5bZjOzD + NAthNUfAyVgmYLdGIcPOGGmXwen8EScNYPFillK1WEr9bGScs7JNOJzJ0jYOLjvtCYw1SShgnSwrMqJK + jAKuzEBlGWOMjwKd9VgygDPTKKDk7EsTodTGIFmxBIlpi5CoECbwUijJ4czZCuSIGFnugIf7Z3PZSR5n + 5f6SAcxjCJjmDGCtOREKbTRS1ZFQqCIh53FEGmixrCb3EEhXM54qIqX5fk9C6iuSZtPGSyVjb3yq6DvE + iyP8m/1HAo+RRN6gsKYgnf1BOu+PKkMGoysNDnc6csj/XMIAlkZCKFAoRm8WKckZRPaRcOTwHhc54uHn + vakiQrxf9USTIxGtjgQ0WcjzdEtRrZqHQHoYQqowNBgWodUagS5bFLoc0SzJ9eyx6LXHoZ/7DLAvGuYx + hPk7xuNMZiVheR7rGbnpylIdJvjMB/JZj1wJaM8lr8yLR2d+IrqIbi/bRaEMvUVzZQHX5cej1xOPfnc8 + hlmfxlyJmGA7miRW5CVjDY+1pViB7SWp2MF9drG+irTLe4OpOLtajp2VMmwpjcYGMTdW8RKcHYrF+Q0y + nF+bgEtbUnF9jxZ3jVnx0JQTd/arcXVdLC6tXIKryYlvpNi/gf3CtQ0GXF6nw46ieMaBSEzmLcZQzgL0 + Zs9DD9GXFUbhvwCrCuOxozIdO9nut/l5TuVK7AxqsaNahy0BNTZWKNi2U7GmJAlrKTLWVaRjI7fdWJWO + 9QEF1gXkWFvFzwOpmOH5z4TkElbyOqZ4HRO+GCwviWe/oMAZzTrsbdfjTPYHu+pk2C3mBG5X4KI+Hc7v + 1+CsPiV2D2vItdMwWBOHJn8kqktjWOcTUMG2XMa2XVycCK83DrnC/CUfcFijiVg4LOSS4iVJSyz5Y4LE + LwvZlxe60yTOWcBlMarEV0iOw3YsIJZ9hYwF5C4FrGdexvK8PPJVnwY1jN8Ty2tw6RXrcP9DF+KZ56/H + Cy/fjudeuBlPPncdHnnyKtz/yKX/hwF8oQRhAD/wyJV49MnrJQP4oceuw/0PX/0jHvkRD/Ozx564Ho8+ + fh0efNbb2boAAP/0SURBVPAK3H/nRbjj+nNw+7V7cec1e3HPdefgoVsuxjP3XYMn77ka995wAW6/5hyK + 93MJljecg/vuuBgP33sZHuOxn3r8+p8YwC++fCdeeOUuPPfSbXji+Zvw2DPX4+GnrpHO/da7zsU11+/E + eeeuxM5tQ1gxUYehXj8mhkJYMdaAsd4AupsL0ddWhOVjIayfacSa6WqsWlaG5cOFmOzLw2hnNkZacxkb + XegPZTNWZqErmEW+mYFG9l/1pRY0Ec1cbvZbyT/FC4gWhDxGVJOzBl0G1HnIVwuc6CrOZhzKQ58vB43k + vzVmxmSiWkddmRqOyjTqKgM1liOc8ScO57SrcMukFU+uzcYLG7LwyuZM/GqTA79fb8RrFPyvrdXhTyxf + GE/D/Z1RuKMlHPf2xuCxMRmemU7DS/z81U0W/GarDb/dTGwx49ebjHhlnRo/n0nHs5MpeHw0Abc2zseN + NWG4p20BXlgmw9s7rfjorAy8t1WP11ck4Z01CnzC5Q82q/Hm2hS8sSEFb29T4O97FHh7TxrePiMV/zhL + jnfPTsc75GtvbE3Fn9fI8Nd1cvx9kwrvbtXinS1KvLVOhjfXReP9rTH4Yp8wgFU4dpVBMoGFAXzgQi32 + z80BLNI/HxIjfOfKo1eYceJqG3CdE8evskmm8P7z1fj6nDR8e64c3/FY+68y4evrsvHJdcV497p6vHPj + CP5201o8dvEM9q1pxWizG/UlZpRRR3hyqBVFlrBSD5qb69DV24WOnm7UNTciVFfNtlKDuoZa1DbWoEFC + CI0tRHM1mptCaGqsltBYz3UCtcIwDaI+GEDA70elvxwV5eUoJ6SyqgKB6iCqa4OoaahBbb34jmqE6quI + SlTX+SXUNAgTuBItbfyelgAamgKobwiirjaA2lAVEZxDAKFANfxlVWzvFSgtDjGeNqC6vB4NFfVorawj + T6hBX3k1BsuI4gAGiqvQ7w+gr7IaPdUhdIVC6KipRjuv9yTaGriuqRatvPYGXk9NgOdGBIM8d24fDNWi + prYeNXUnwb8bAqhpLJdQWy9M3QrUCoOXEEZvqKYM1achWO2XUF1TLqGmhtdVE+A18vtClQgFK1Ad5LbB + EgQCPnIELwIVHgQr8lBb5UZbXSFEWm7xA954bynbqQ8TvQVY1uvCeFcOxtqzMNyagaEWB0ZbsjDWyjbc + lIHBWhv5q5Xt2D5r/NZlYKyWqHNgWY0DE1wer3dioNqMnoBRSgXdXKZjGzex3rBdixeM5zD7IvGPBnCx + MICzDMh36qgJ1ci1pSPLkCoZwPa0WOQqElCsS0GNVYHODC3G3BasK8vCGTVuXMA+6KI2L85rzsPehkzs + CVqwh9+/I6DDWY12XM6+6NqZcly3phKXrizF3sl8bB/JxlrqrKleI/ux2ZG/o0MWjA5Tr43YfoLREV7r + aRgcsKOv14LODj3a26ilWkR2Gu1p0BO6uVKA9+IkWn5Ep0CTgXVGiy6WA+Too112PhPHLHqcGOuexWgX + nwX/noVYFumjHQQ/782UMN6XhfH+DEz2O/lMHZji8tRABpYTK4YysWqU+nM0B+uX5WLTuAubJvKow93Y + Me2VsGvKiz0rCnH2qmLsXc37ROxbU4Zz1vixd1Updk0XYNsyF7aM5GDb8Cx2DucyPudhZ3+OpDc2NJux + tt6ENXVGrJvD2hoT1oYIlutqzdhQb8M66qWZKh2my9WYKldJWM7lFRXkVwG9tO3qWhNmqo1YwX2nqk0Y + ZznAv7uCerRVCQNKg0Yeo0G8aFChJfSoE6jUo1ZM0VNhQUM5650YeV7iQJ3PjlAhOTPrXYD1rspNDi3M + YDFnsAD7tXK3GB1MPpChQIE9BR6LTDJuT8JjIIxcniu9ZjFPsBxufZJk+s6O/o37Pw1gL/m0QIEzFT5y + baFLi6iH3dSoueQpYtoYYQAXF6Sj0Jv2PxrAue5EgnqAPFJMjWK1R8FgWgotea0oTeTFJssSmG3h1ANR + yKU+8xYkw1eSJpm/vhLyIB/PozAReZ5YyQDOyFwKu/NHAzgQUKFBMoCN7LO1CFUno9wfQ+69kP3mAvYv + 4fwsAUODGgyQq7U1U9NXUitRUxVTQ/1oAMvmkCzNBVxcIF7E4z0jHxMZ/1zU57nZvJ5sXheRQ659Cpky + crpEKXOSR7ygTZ1emKtiX6GAx5Es/a7sMkYhj9rJbYyAh9deYo9EVVYM6sjJ2wqTMFRO3hlMoy4mD21I + wdrWFKxrlWFdWyLWtydgY3eihM3dSdL0fWs7uL6L2rU3BRsGqC97UjDVIcNIcyIG6xLQWytDd3Ui2gNJ + aK5IQTXvY2ken4UjCjZTBMzmGD6D/90ANuiVpwxggdMNYPG7oywp7hQSE2Ol8qQBrNGkS9uK+YBPbhsv + i0WC2DYlHkmpCUiWJyJFMoOTJQgTWGtUw2Q1wJFpQb43B/7yIpT5C5HnzuT3K6HVKSBSVItlm/WnBrA7 + nxrRY4aXnKwoX4+SAg0CpaK9adFdo8d4swEryONX1qdjTQ3vX1k41hSGYUtJGC5uCMetvUm4b0iOu/pk + uL07Hrd2xOK2bhmu5z29qD4WZ1RFYU9VPCHDzvJEbCmMwBbvYuqgRdRBi3B+VSSua0nBrZ0K3NyahNva + hAGcgHs6k/HUuBZPTenx+JgGDw0qcF9XCnlYMu5slOGW2jjcFIjC9RXhuK58EcvFuNY/H9eVzsP1JUTx + PNzoX4C7q6PwUGMiHmtLwROsGw/UxOLeqggJ9wdj8XCtGBUci9vLluBG7zxc7QrDNe4wXOsVI3/n4Trf + fNxUuhB3VEbgnmAkHgrG4PFQHJ6nPnu5JRm/aEuSDODnGyLxfPUS/LxqEX5RtQSvUJ+9UrEQv6pagN9V + LcZrNRH4S0MMXm+Jx5usl//oS8E/BlLwelcC/tQcid/VLMQfiA9YV/8zlIrvRxQ4Pq4GJnTAGMuBVBzh + /T3YHYsjfXE4MSoDJpPxw7QMh0Zj8d1gLD5vj8GHddH4oFqGD6nTPgwq8UGtCn9v1OB3LSY80WLDFYzz + U24lKrVxyEyOgiYuCmnxrIOJs/UxRhaNCGEC87NIkQJ6zgBOSI6R8N8M4IRIaTk5NQbp6YkwGtJhMauI + dLYVBYymNIKlOZX9lQL2TA0ycvTIJPfPzjOjxJ+LUEMp2rtqqb8GcPEV+/DU8w/hnx/8Dd8c+De++e7f + +PrbT/H1N5/gK2L/gS9x+Mh3OIFZA/jI0f0SDhz4Cu+893f89Y0/4/1/vYuv93+JQ8dmRwyfjv/NAD5l + BJ84JO13ygD+/it8+91/8MWXn+CLT/+Ff7/3Dj5643X87aXTDeBanNtfjctHanA1ddQdW4bwwnXn4fPX + fo0fxCjk40eJE8APP+DEDydw4sRJ/IBjJ47h+A/HcOQ4v/fwfhw6+B2OHNqPw4e+5fLXOPDtZ9Io4P/8 + +118+vHb+M+n/8RnH/0df//Lq/jFcw/i0XuuxRMPXI+fP3EbXnrmTjx8x+W44bI9OHfnSmxfM4xtq4ew + fe0wztk5g5suPwPPPXIDnn7wWtx2zR7s27kMW1a2Y8tMKzauaMbayTrMjM0ZwN0l6G0pQGdtLnlwDtpD + 1HU12WirdqLCq0Z+RircYlpOpwI5tlQpw7BJFQ91WhSU8qWsC0ugTJ8PjXYeLLp5yDXNk6ZFbbUvwown + DnsrlbihUY8nBxx4ZZkDf5rJxFvUcu+tz8JH1HNfbczBgU25OLolG8c2OHFktQkHl2uwf0qM+k0iEgkZ + kYr9y9JwYGIWB6fST+Hw8nT8sFKNE8ShyTTsH0v+iQF8fLlI/TyLQ9Pch9t/Q9336Vg83h2IxNt94fjX + ZBy+3aTEATG6d0Myvt+aghNn8rhnK/DDmWk4uluOg9uSsH9TMr5enYivV1G7ref3bdQSGhzdpMHxLVoc + 26zH0Y3UcmvN+GbGhC8m9fj3pAGfTpvx8Qo7Ppxx4u1pB15uV+DRUDweDCTi8Xo1nmu14Rd9LrwynI+n + u7Nwd70BNwVVuNKfgguL4nFhQSyuKEnBzVVq3Ntow8NtOXh+uBh/392HAzdsQpglbSkcqmhki3kuLGlw + 2VXIsbAhGpJhIbGxm1Ng4WcmBjQrA1umTbxZz0DtSEJRngb+QjP8BWb43Fq4nWnIMiXwYccgQxeFLF00 + crgsAnWhMwklIl20Q4ZCazwJFIO2IRJeC8mCMwGVJD3ih/ZQgRqNfjOaiCCXKzzpJGjpFAv8vDANIZ8w + gJP4WSyC3kg0iLTOlXHorE5gYJahtzqFZTK6hPlbkYiOsni0l8ShvTROMoCbi2LQWBAzOx+gJwJ13nDU + 5i9FjWcR6gqW8PNIaTthAHeVx6CnMga9VdEknzEYDMVgqjkZqzvTsZ6kZ0OvCpMNcRitjsBoKAIT7FzX + MACtYac/0xKH6YZYTNXHYJJBZSTAY/ij0V5A4pQfgUbXEtRmLUR9zjyuW4yBqjgsa0zHVJuBYkuJhuJ4 + +LOWkNiEkeSIBrIQmSR4Dl04LFoSPG2UNMevmIPVoqFQUsuIJNjUwoRJg5WlWSODQRMnzQOs5/Mw6LmP + MH+tCbDz+Vn5LJyO1J8awKeN/hVzAYvRv2KUsNWYAKOW5EYTyboQxUbL7xZGsD5WMoNnzd9ZAzhTMoBJ + 2pwk0GI0r53Pm8/YS6In5vMo9shRkk/yy9LrYkdBMpiXTRLtjIfNEk0SEo1MEr/cbJHCLxlZ4gdwcyxs + guxli/Q4JIFuFfeTS6M9xA98rgzx4ziPWagjxPmruC3rsY3kSbEQSbJ5PzGARTqK1KRYJMvipLebTkG8 + dUcyddIETlcmQ6lKgZZESsf7atDz3lrUyHDokZ1hktI/52ZZZpFthVukac4WEAauRTJ7S71Z0ihgYQJX + FOWeZgCrJAM4l8c4aQCLVNJ5PFaBywlffhYqfC5pv2BpPsq5b2GeFZ5MI/IJb7ZJStl+0gQuddtQJc0B + 7ICfIqc0l4RNpDvK1aLUpYZfpN7NN0pGrzCAh+qLJBO4u9qN9opstPgz0VRsR8MpA1gpzYdTQkFU7tLM + GsgU77U+G2qKnRTzmQgV2aU5dQrZyZezrtR5NGgqULGOp88awOVGbOzy4KzlQYrJeuxb14TNExWSAezO + iILVvEgygPXGRdCbKGAoXvQk0jrWA401FmrWIy3rqo79h1W8FCDqTH4qvHlJyHXGIMcawbaxGFnKMOSk + hMGdGAZ/ahhaVGGYdIRhk3sBdlC07CpZiH2hpbiiNxoPblLj1cvz8Y/7/fj3zwrx7a89OPZnN/DXLMIJ + vJaJH35jxw8v2fDDM058fZsRb+xNwVPLInBlXRj2VCzClqpEithUjJYlYaBEIAV97Jv6itIwUKzFSIUZ + Y1UWwoqJoBXTtXasaszAmuZsrGnMxqr6TCwP2TAeMGKoTIlxfzo2NRhw8bADVy3T4vY16XjiTAV+f6MK + /3nRjuN/57l9TnxtBL5j0NrPoHFAj2Pfm3DioAU/7Dfh2OcG7H9Lh69+bcGnT2Ti9WtteGGXCrcOJeDC + ukTsLldiJUXUoFOJNlMiatieQ9pE1FqUaM4yoi7DgArJAJbDpU6EjcE6PW4BkmLmISl+IWSJi9guliAx + NRyJaRFISCe5S4uk0IihMBEvmyTBrEqURg7buC6Tn7lUESgwRKOUfU5VpkjTqkA123CVGAF80gAWEAZO + djIaC1l3hLlaloqWskQ0+cLRwOdXlz8fdXyWNa5FCGaLl2fCEWL9qcuMQ0OWjP2oDLW5Yh7QJFTmJqIs + K4FCniKUnxVSQPpy06RMFRUiha4A+wkJrK/lbs0pAzjoFenOjahmHxLk9iImVXtVqPNppB+02iRoCQ06 + K3XoC5koDIXRa5XmAR5rsGC8iWgWpQkDIV5LaQJaS2OlKQlG6xSYbFJhRbsWa7qNjCEmbOgTMGBjvwFb + Bw3YNjxrAm8fNGOTmDO4VYcVdSpMhRSYqhbmrwIrQkrM1KRjbRPjULMGG7nNWhL51XVKrGvQYkePE2eM + 5GFHfxbWtZtY/5QYqpBhrDoVK7n95h4bzh7Pw2Xr/Lh0bSkuWFGIvRNubOwwYjWPuYLbT4TSpbTSA34F + 2ijmm3Jj0cp72+lKQk9eMnq5POySYZlbhpmCFKwslGElSccqXzw2+pOwie1jc7UcW3hOW1r02NJpxnqe + 51SdHCNBGQYppPsYt8Ub1f0NyRhoU2CgIx1d7eloaU1DQ7McTS1KdPBetbSoEArEI+RfilaKtsHmJCzv + UmBNjxqrOxSYaUrDikYFVvHaVjUJA1iDsYAS/eWp6GUb7fYnMpanoJ/3rjeYhlb+3UAuUOMRJnA0Qt5o + PvNoco1o9p3kJMIAdsWiyB3PWJUyZ/4qJcNXGL+lRSppPvviAgVFsTBl2c8WqqW32M0irY16PkyGJbPx + TEKEZEyJeOSU4u4sThrABiP7O+1SCnExry7jOduDMyNFGiUsDOAMIovb53JdvkuFYtZTf7EF5aU2+IpM + KODfLq53sg8WBrDOnAilLgbJyqVISFskISl91gA2ZqUhg9u7uW9eiRWZXiOc7NtPGcD8XOB0A1ipjYac + fCOdXEIYvwJiWYz8VWljkaYUc/1GSKavLJl9BGNtQuISxCYuRnTCIgrHJYgmYvhZTCrXUwTEkHsmaniO + 5BbCAFbYCfb1Sl6zgf2ENS8dmflKZDOOuNjvu/JSkSemjCDESE+bnv2+kf2LLQ6l5AAipXzQxv6MaOTf + jVxfb4pCjW4JAqp5qEwPYyleEFqIJjPrkSUSrVYB8jJrDDpt5Hu2WPRxv0HuP8JnNc5ymnFnZV4a1hfr + sLHSjFVleox65ejMJq/MikJrNvfPjZHQxfoiDN8ebwJ68hMw4BVpnxMxQAx5EjHmTsQyVwKmXImYJla6 + k7G+IBXb5gzgrdxvW0GcNOfuHjH3bgXbEfuOtUXhWOVdhNUFC7G9IhJnhuJwZnUczmtIwVXdjBejNtw3 + 4cTN3SpcVhODSyrDcW2tDNfVp+MqivzL6nQ4P6TGei/5aN5SDOQuQGcm42TGLNqcYejJXIAVhQnYXKHE + ZsaKDcVyrC9RYHOVFpsCWmwMarC+Mh2ry+VYUZKMmdIUrK5UYW1Ag3UBlkEl1gTTsSogx8pAKpYLBOVY + zj5gBTFZkYyRwhiMs39Yw212NOpwZrsee5rTsYvtf3djCs7pVOOifiPOYbve3aNiH6jFTKccPRQ9taVR + qCiOQ1mJDCWMt77iZBSwz8lzxyE7MwZOuxiBQU5himZJbkrYTdQibHe5jAFi1Ingm+KFQ5FWUJjBhd50 + FLH9CojlAtY1r1sOj/iRknUul/GkoCgdwVoHxieDuOjSVbjvwQvw/As34hev3oXnX7wFTz1/PR596mo8 + +NjleODRKyBSQQvc+9ClPzGA77nvItz3wOV48JGr8OgT1+Pxp27AA49cg3seuOIU7n3wStz7wCwe4meP + PX6dhIe5/oG7L8bt152NW686E7cLXHmmZATff9MFUnntRdtx9YVbcf0lO3EdccOVu3Hv7Rfi4fsvw2OP + XI0nxXc+cR2efPoGPP+zW/Hzl+/Az35xB576+S149Jnr8dCT1+CBJ67C3Q9ejJvv2Ierrt2Os8+awuYN + vZgYCaKv04dlg9VYPlqP0d4qdDR60FKbjeGeYswsC2DlsgrMjPkwPejGMorRkXYnRpozMVSXhb5gFjUZ + EchEW6VDMoZqfHrU+3RoLDGivtiA2kIDgtQcFVkqlGemozxDxZhuQHO+Hd2+LHKsXPQXkaeSp9SbVWi0 + ahAypKI4NRIlKeQFKmo4/Xx0Zy3GmkqK3241bh014YFJMx6fMeO5lQa8PEPuRyH/6nQaXl2RjmdGknBX + 21Lc1LAQt7cLEzgaj47K8LNVaryywYxXN1kJG2HGLzeY8NIaDZ5focQzU3I8PibD7S0LcVN9GO7tWISX + plLwzp4MfHx2Jt7dosdrU4l4c0UKPqDQ/4Cc8+/r5Hh7kwIf7Nbi43MN+Ph8A/51rgYfnqPCe3uV+OcZ + YvRvIv64MgF/WZOKtzao8M/NWvxjYzreXCPDm2uj8N6WaHx5TjK+vyQdx67W4fjVYr5fHb6/WIcDF2ln + DeDLTYRRSv0szOAjV5hx7EqLZAIfvsyE7y7U4Jtz0vHFWan4+hw5vrlYhW+uNOPza3Lx3jUl+Pu1zXj7 + pgm8fudOPH/rmbhw5zjGesrRGMxl/HMinzrD43GitKwIHV0dGBgdQ//IGFq6uhGorUUgVIvqunqE6htQ + 11AvoaFJoA6NjXVoEAYpUV9HcPv6UA1qq0OoCVQjVBVEdVUIwUAIgWAIVVxXKYF/h/h5XR1CtTVESDKE + gzVVqAqVE34ul6O2IUDeMGs21zWGUF8fQl1dDer4PTX8nmCA+1QFiBDK/SH4/XWoqmzm3y3kF82oJ5oD + TWgLNKCrsg7d5bXoKatBd1kIXeUhdFbVoCNYgzZeYwuP11LzI5p5Pa281pZ6Xis/D4nv4rkHuX2wug6B + 6npUhxoQDDUSouR9qg3wXpXPopYIVRKiFKjgPfBzvzIJQXGdVX7ek3KuL+cxK1BdHeB1VaO2hveDy0Fh + OAe4X4DbVZUgUFmEQLkXwQo3aqs8aKsvRn+7H+O9lZjq92PFQAlW9BViui8PUz25mOjIwlhLBtutE+Mt + mZho57qWbIzUOzBEDTNUyzYtzF/ql/G6TCyrd2Kizokp/j3RwLYu5gcOmNjWxShgAxpE2xYGcLFNwuwI + YNucAWyG32OCTxjA1K8eatk8pwa5dhUyTXLYqUGs6XHUdvEo1CUjYCZvc2gwlGvC6uJM7Ay6cE6jF+e3 + CuTj3JY8nEFNtYvfvb1Cg7MabLh8uADXrijHDesCuGptBc5dXohd47nYMJyB5f1mLOszYnTQhJFhM4aJ + oWELBoihEfJ5YliM+pXgkNA/aEdPnwUdnXq0kpe2tmokI1hCizDCqA1OQYf2Zr2EVgFh+LaYJLSLkn+3 + 1HO/BjEK2IShDn5fp5hjmOiyY7iDJTHYTnTYCVFaJQxxm1nwmRDDXTy/bruUSnqsi7qyW5jIdkwSU312 + TPfb+ZztmOl3YGWfTcJq/r1uMAPrBzKwYcCJzcPZ2LEsD7sm8iXsmfbiTOqCPcL8HRPmb7aEnWN5hBt7 + xjw4c4zbDbuxjf39plY7tYgV6xut2NhgxQZqofXURRLE3402bGG92sRyjRjhS14xXaGSsKJSQz2txapq + A9bVWrCmjjwrZMbKWjO1iIV83oLhWhN5gBHtQcaMCjUauE99pXoWFTrUUY/VVTGmVJnQTN3dWGlDQzlj + jd/BeuhArY91T0yHJYxgr0V6kb2qwDALr4H1UT9rAGf+LwawKRn5hEgJLVI/ey1ylqmSIfyjAfx/jwCW + zF8euyhTZJqifnCRc2ST2zplyCHfzLHHSSmghbbwFfIz6g5vAb+niN/jTZZM4Lx88TtIEnLyEsn3qR+s + EdAaF0OtWyCVetOS2ZfprUvgcIg5fmdHARcW8Xt95D2EGBFc6EuCyx2LrGxqk4zFpxnA1OLUTnV1erQ0 + 816Sp4mpNk4awGUl89nHLEFTUywGBqgP+9Vop16rDggDOJLaRJjAcSghlz05AliYv2WFafAVkHORV4nf + +3IzEpCb9aP5KxnAXH8Swvh1OhKogRKpq1LJ3ZTsJ5TIzyQ3s/PcTXHI1EciRxeBHP1S5BmXoCwzVsoC + 1sB71Vkix7Jq1qs6DaZryENryVkbEqkTY4kYzDRHY3VrrIQ1bXFY1RqPlRLiMNOegBUdiZhoo8ZtoHav + jUUXOXcXOXVXDY8dkqOFHLaanL2EnD5LGMBmMSVODHTCAJYyIiVQF1E7nWYAm+YMYItZc8oAVs2N6BW/ + OyYkxkgQZttJA1j8DikMYJH2WUCkhxa/U4rt4hKjiRjEJ80ZweL3y9QEJMkTJTNYjAhW6dKhM2qoC9nP + FuWhknGhorIYHm+2ZP5qNGkSxLIYAZyVaZIM4DxhAHsd8Hpt1JdmcmQTSn0GVPvJyQJGdNcYMNaox/Im + LVY3qrCxnlo/GItNJQuoXebjqtYY3D2YgodHFbhvIBl39ggDOAa3dsfjuo4EXFQfg328r/vqknBOrVx6 + 2XV3GXUN69m5gVhcXBOLa6jzb+tR4jZq/RubE3FrWxJubZXh7h7yrwkjHpsw4aFRHe7tT8edHXLc2ZKM + 2xtkuLkmHjdUReG6ighcXb54FmULcGVxGK7yESKFc9l83FkdjQcbZXi0LRWPtabiwZo43BeIwr3Eg8F4 + PFyTiPt5Lrf6FuFaVxguo066KjcM13nn4fqi+bipZDFu84fj7mAM7quOxUPE46EEPNcgjN9kvNSahBea + 4/BsfQSeDS3B88HFeCm4FL8IhOPlykX4ZeUC/IblH6rD8ce6KPylMQ5/ZR18oycZrxN/4D18tW4JXqyY + h19UzMe7XPf5cBq+HVHgmDCAJ/XAMg0wLMex3gQc6o3D0cF4rksClqcAK5JxZCwGBwbJGzui8WH1Urxf + EY1/UVt+WJGCD4Op+HudAr9nG3+KfffVNYwLhRoEqemdCeHQxkZBEReH1ITTDOCkaESmxBDR/80ATkiM + kiBMX2lZFsW6GovUtDgoVTJYLGo47DpCA5tdDetJOJSwZ6rnzF8jcjxm5OZb4CvLJqf0SS/3NbVXY93m + 5bj1rmvxh9dewaf/eQ8ffvQ23vvwTbz3gcBb+OTT9yVD9sixA9JIYGH+Hj3O5ePf4xth1H7zGb4To2eP + 8bMTPzV//18N4MPHvucxThrAX84awF99gs///SE+fe+f+JdkAP8cz91yHS5bO4E9fTU4R4wAHg7hqvFa + 3L5pEC9cdw4++8uvcPy7L3HsyCGcEAbw//DvOP8fPXFEMp2FAXz40H7JAD5y+DscluYB/gLfff0JvvzP + +/j803fw1b/fwxef/AP/eP3XeOX5B/HwXVfhsfuuxQtP3o5fPHsX7rv5Qlx53mbs3jCC1ctasWZZGzYu + 78bZWyZx46W78OyD1If3XYVbrtyJfdvHsG1VG9GCzTNiFLAwgAOYIG8c6faRs3jQUSuM30y0h5zorMlA + a9CGSqGns1Phy6G2zlXBm5UOl00Oh0EGTVoElKmLoVIsgkYxDwZNGBzaMHj0YagiBhiDthUl4KpaDR7q + tOBXE9l4Y2UO3tvgxqfb8vGfLS58uSkb323MxqGNWTi+3oHjay04OqPD4cl0HJhIxv5lidg/GY/91F8H + JlO4To7vpxQSDk0rcWhKicPT6ThCHXh8RoljLA8uS8V3I7LTDOBUHKNGPMh9BQ5NK3CQevG75XJ8zuO/ + NxCJt7oX4t3RcHy5NhX7qeu+3ZAkGcA/nKkE9qqAs9JxdGcqvt+SiO+o675cEUsk4vt1XL9Ji2OS+avC + ia1qHKfOO7JRj+9XG/D1Cj0+m6BGnNDj42kTPlhuxTvTNryxzIKfs496oCoa91Swr6lNx5PNXNfrwkuj + BXiq34W7ms24oUaDKyrlOK84Eed4Y3BhUSKu9qfh1pABdzXa8UR/AV7f3YvvbtqMMEd6BLI0MQymyXBb + Fci1piPDkAK9MlZy67UsNenR0KmjYTbEI8OWiqwMEhY+1CKPEWUkVCUMDvm5GmRbU2HTx8Kmi4VDJ0YV + xyKHwdBtSUShMwW+DBIPuwxeK0mRid9piCIpipZGcFS40hDIVyFUoEEdRYNAQBjA+UpUeJUkZ/ycZCjo + k0smcKAggUQuBo1lsWipSkB7tQzdoSQiFd3BZIq3RGnklfTje0kcWotj0OKLlkb+1p80f93hqMlfQsKw + CIHceQjmLSBxWCrNEdzuj0ZHeSx6AnHoD8ZhkMF/uJakoC0NqzuVWNenwXoGpvH6WIyGIjFaE4nx2miS + iCQikeQiHssb4kk0WNYnYIJBYTyQiIGyePT44tHhjUKzazGa8+aj07cYIzUJmG5XY1W/DaNtejT5ZSjL + DYfLGEZyE4Yswzw2lAWwqpfAqAqHQRUtDas3kWCYlcmwKeUSrMo02FRpsBImdrh6VRx03FanjZYMYLNZ + pJZMgNOZLJnAYgRwFgmvmOfX49ZJo37F3L8CebnskJ08pjkRJj5TnSoSWvHdOmE+R8GijYGZxxUGsBiJ + LAzgDJKybEsC8mwkqnzWYiRwrk0YwvHwZMRLc3/43HKUetMJhfQjnDs35ZQBbLdEwW6OgkgFnUWCmOMU + 5Eq8eECQHBeKVDCsI8VeNbx5Cog53nJ4XBeJZEFeKooZvAS8nnSev1z6kV2niUC6YgkU8qVITZlNAS0M + 4GRZDGSCZDG4nURSMskTIQxggXQSr3RlCtSqFGjUcuh1ct5DlRTEsp0mklQzck4awGIksHh7jnBlmKTl + /GwGMbcYBZyLiuI8lJF0FeRYKXL1yLJokGXTc3uzZPxKJnAWyVaug4Q5B1Vl+RQ1RagPFLMsRLDMw/0z + 2bma4M3QI18Cn1nWrAlc7LKwrdgklLlJ1nJ0KM5WS3P2FrO9lhCBPB0aKIQ6A7kYqCuQ0BvKR5c0/1oO + WkqdkgEc8hikEb1iPhwxCrg0m+3QpUW1mAu4WMwlnIm2Chea/VmoYj9QKn6wy1Ig5FKhgW22WRjAfMYj + VWZs6i3EvpV1OHddI85a04CN437JAM7PFobIUpgtiylcFkJrWEDyvESaFF4rDGBLHDQ2Bg2KJp09GRb2 + H668dD5bkcZRDm8uRYMtErnGRchVhcGVHIb8+DD4ZWFoSQvDMAPLlCEMM+YwTJvCsJLkbUvRPFzYGoE7 + Vijx7Flm/O4aM/5xjxVfPp2BQy84cfwVJ374dTbwy0zg51x+yolv7zDjvYtUeGl1LG7vXIxLmpbi7KZ4 + bK6noAimYNyfjJHSZAyVpGCQgmDYr8ayoAlTIauEyWqWNRSyxHJe93Kum6mlIK+bXT8Z1GJFtRrbWvS4 + dMSGq0aUuGlChgc2xeOVy5Lw8VMmHP1rDvAvkQbajB++1ODENzoc3a/HkQMGHD1olEYDH//SiMPvGXDw + NSu+ezkLHz+QiTevduD5LTrcPqTAJc1KbC2TYzovCb0ULI26pajTsD80pqLZwefm0CBgV6HQmCKN3rWk + hkMeEwZZNBE7D0mJC9h2liBVHiGleE2aS/MqV0SyfcQxZsTBqGDfwHU2RTgy05bApVoCrz4CPvb35WyL + AQq5QJYcFU4KQoq4UmsiythX+BkfxDQAjUV6NJfoCDEdQDJqPDHSXK1VOYtRmbkIlRlLiKWotEehyhGD + msxE1M+lfq3JEQYzYwP7mHL2ByWZFKBZSWwvMhSzLyh1q+D3auDP17KN6CSIuYGFCSxSRPvz1Kj1sX6X + 2NAgUGxGbYEONYxDIcag2oJ0NPvUaCkRo3r10kiHgVobhuttGCIG+TxH6iwYbTATJozU6xk7VNLI046y + BPRVJWOYwnFcMoGVWN6iwkyrGivbNVjdocGa/4+zt46O68i2xuWYxNhqZlKTmJmlBkktZmYwyZaZ49ix + Y8Zw4jA5jJMMvTfwBt7AG+YJzCSZMHOyf7tuy04y3/ett9bvj73qYvWFqjr79L7nVLcBm/qM2DZslQTg + HYN2bOoyY0OHCeuCPK5RxzakYftRYZ7Gf2OrAds6TdjVbcEOHreV9W2mI7ar24krR7NxYDQHO/rc2Nhp + xVpun2lQY1WzDvMdRmzusWH3cCpOzpfh9EIlTq4rxVWzedjK7QttRqxt0rFt0r759BgkeWjNi0dzJm1o + VgK6c2UYyFNihO1oOk+BNYUKrKdzv6EoGeuLEriciK0VCmytUWNrvRZb/bynFju2djqxodWKKb8GgzUi + O0c8x5B4dHtl6KPz2N+mQ3+HHp3terS1ahBsVqO5RY+OdhPXdQj4khCoiUabPwHDbSqs6Tdh45AdC/0W + rOdzWMfrFumfRQTwXJORzr8Bo3UaDNcqMVDL/unTYKLRiNFGA/mBAi2l8WgoiOF4F8e2lgBfSRyqyQ0q + xTxWeTEozolFcW4CxLxVFcVaSfitFiljS0y0MQYppWxhrhCTlLSbGhTQ/ggbZTMth8mwlPZ2BRy2qBA4 + pglxyk07JkTgi0hxxkl/GtilL8dpn8UUG0IclqJ/FfBw2UW+5OJY6EqJkz7C8zhlyCQHyxNfwxdx7C+y + 0UmnzckzIY1jtsOjCom2llgoDJFIVK9AAqEwsp+yr9kzNfDk035xLBdIK7DDk2eFk/U5aCMuwsaxPyQA + y6CnfdcY46E1xEGrj4VI9yxKnSG0TamJhFwpBOAIJIm5wmXLEZe4ArGJyxEdvxxRicskRMtWIE7B/aoI + xGtF+ucEKFm/VhKAldB4FNDx3s2Z/O1s8pg8LVLJDdP5bNMyZHweoYhqkW7NZV6JTD5bkQaulM+nMiUB + XnLNBo4pTc5ENPGZNtpj4LOGo964DLX6JagzXoZ683I02cMRdESiOYWgrWnjO+hwxqCbZR/rG+R7GeHz + nnKT83HMWk8+saOSfcbnxpZajuGlWgxnJ6InIxodqVFoT49ER3oEerKi0ct205cbhwFivFiOCWKyiCiU + YyYvGbN5rDM3ScI8+9Am9p/tJUpCji358djKMW9HURzX47G5NBbrCiMxV7Cc5y7DbP4yLJRFYCv56baq + aOypS8DRNi1uHErBXZOpuIV94WwwCSfro3Hal4BTfgWO1atwiP3wilot+2c8JvPC0Ze5lGN+GJrcYWh2 + L0GbZwl60lk/efX6Sg02VGiwtliBdeTb66sNWKi3YIF2ar5WpGtUY4Z2TmBVjQ5r6gyEHmvrdVjn5br4 + SIX9a5p9bqZOgZl6BWbrlZiqTsYgee8I72u2RoFNHM92tRuxu1WNXc0K7GlV4lCvGceGHLhq0IoDw3ze + 43bM9WjR4U1AXWkUyksSUEK7UFQq0hgKoZa2iu8hI11E1wvxl7zUFkPESnASHrYDwSGzaCvEBxqCa+bT + VhTmqMhzySPy1RLEcj7bWV4O+WiuXEIWOUZRsQr1tNkjY1XYd2Act9y+D0984xp893u34ZvfOY+nvnkD + HvvGtVIU8EOPncODj57FA0IIfugMLjxwGvfdfwr3XDgu4b4Lp3H/g2fx0MPX4OFHrpWifu974KyEeyWc + wwWR7vl+1vHg1XjwoavxsAC3P3DPSdx+437cek1oDmBJBL56v5QO+tZz+3Dd8R247sR23HR6D248sxfn + r9mHB+4+hUdZz+OP0bF/8kY88dRNePIb5/H0N2/Dt/7jdjzzvdvx1HduxSNP34AHn7wOF3jtt993FNef + 34dTZ7Zgx45hrJlrxXBfJXo7SjAzGsC66VbMjjWgv7ME7U0ZGOwpxOx4FVZPVGL1WBFmBrMw0eXGeJsL + Y0EPRgJptIPptJeZ9M0y0VHrQkO5BV6OoYESPRrLTAiQs4uPrarSVSh30Vd0ylFOf9KfYaLtcaK3OA1D + 5VkYLMlgX7Oh2cnt5NB+O/0BdRxKOKZUapajmjywMeUyDOSEY4E+oJhj+mwP+dSQFveOafDkjBZPTyvw + jUmRQjARDwzE4JaWZbi+aQnOty7H7V3huJfbHpuS4+nVBjy9ysBzdNJ53+CyEIafJnd8alaDRyfkuL1j + GW5vX4ZHh2Pxo3kDnt2fKUUA/5kO/i/nZPj1qmT8ZUGHv2824M8btfjLVh2ev9yMV4448PpJF145YceL + R8x49oAOf9qlxM/JMX++Oh6/nlfgj5sM+Mtmk3T+H9bL8aeFOLy4JxFvHlbgg1NqfHq1EZ+cM+PDMya8 + f3JR/D1lg0j5LERfUQoBWAjBYvkjLr97zMTzdXj9SnVIAL5KjbdOmvHGuVT881wh/nB1PX51TTd+fdMa + /PzOK/Dk7Ydx4qqNWD3bhdaWClRW5rHPZSA3LxMlFaXo6O3F+NxqTK9dj6HJGQSC7ajxNaLW34T6QBCB + xhYEmlrQGGwlmtFENDYGQ2hoQoOfx/B4v7cBPm+Ayw1o8AXh53YBr69JEk/r6htQ7wvAzzq9rFuIp/U+ + P1GPmvpa1HhFlHAtfA0+NAQb0NjMeoKNaGoUCKKpqRkNAV6TEJNrvaira0BdbZD1tsHn65QQ8HfyetoR + 9LWixdeC1vog2uua0F7TyDbbiDYBXkebtxGtvK5mooXXchHNDUG0NDZLaBLXL+6pntdK1HubCXE/zUTr + IsR9BAgvUS+V4n68Pq5fhBCRvSKKuE4SeH0imtjr4zIhBHGe7w80EI1c5/Pg8XVEbV0tUcV7rUBddQnq + agrgrytEW2MZBjtqMD3gxeqRWqwbqcS6oRKsHcrD6v4czHVnYro9HZNtaSwzMNeVg1VCBG7htmBI+J1o + SsOUEICD6Zjh8kxTKmab0zHXnIEJSSR2YtBnp0+ZgpZKO4IVLvZx9nkiUOGBr8yN+hInqgsdqCD3KKGv + KqYcy8+0IDddZMTSI9WhhtuSDKc+Ean0LQrMMlTRT5HSQNPvnSlwYjN9z30N+biqvRjHespwvLsY+xs8 + 2Fltpp+jxx6vBcf6snFuugw3bKjD9ZvqcXR1CfZO5WDLaBrWDDkxTY49NmzH6IgdI8QQlweJ4ZGLQrAb + wwLjHglDQgAedKC714YOcs6OfxeAWxbRLGBCe7NZQguXW4IW8lkrgoRUBs1sM+S2DeSjXO9rS8FAh0PC + kBB72x0SBtpd3OZmKZYX0cFnLMEhYajTJZ0jROThTgdGhZjclYKJbgcmu1MwxeWpDhum6AtMkU9Ptpkw + 02rGXLsFq0QKV2JdlwML9Bc2DaRi80Aatg5nYNtoJraNZErbNg54sGkwFTtGsogc7Cb2DOdg11AutksC + MPe3urCx2Y3NQdYT5DL9oo0sN7d6sLU9DTs7M7GdpYgEFmLvqhqjBBH5K9bXS5HCLmzg/vUs17OedcQq + YiropL/lQI9fpIA2Ikje0ShQL0oTmkREcD2frTcFrV4H+68LLTVuNFfTl6v0sB2KCHTxIUIqAkIMLnXB + X+qQ4CtJgZeoyjGiPFOHYnJfIdbmO4QQTI5/ESlcl0RfURI28gSLTIr8TdPEIF1LrkE/WIjAAtkmkS46 + CWIO4LyUUPpnUW9JhphmSCdF/xakk8OQZ2aQwwoBuJDcpLxYTE+hJ9fhtZRoUFRG/0LwnSIl8ulr5Rep + kZNPH0EIwOSxIvrXYFoKk2U5zFYxr+JK2BzhUirotPRYZOUkIi8/iWO3TIoGLilTSyJwVk5MKPrXs0wS + gHNyyLHK5Bwb6W8FRJulrW0SArAK1VVx5F/LeV1LUF+3As3NsRgYoC83oGP7V3Pspr9dEokycjyRBrqc + XLKSHFKgqkRNaFFaKHwmFXLJw7LTkpDNMod8TCCbyKL/LpAtykw5OR15nSeR/g6fcwb5Gn2XPPE/kIs+ + kAg8MUYg3bASGabQFHk1OcloLFTRT9egt1JHX9OMWb8Bk+Sg0/VJmPbFY6ohmhABOxGYDUYtIlrK2Cim + 85sWU/c1RdNPjMZAQwx6fFHo8pLnk0/3NCrQF2TdTfRL6R/7yYXL+FwzUqPpo0XRj4vhu4ijX0QfSZtA + 0A8T08YZRfCIDik2gwRJAGZpESmdxXy+ajmSkxMQnyAEtFjIRGDKYkZCIfiKqF+dSOvMUmQmFNuTZHFI + kMWGkMxlAZ4nhOBEeTxkIpBFlURfjecatbDYDWwz6VL0b119BSqqiqS5f81mrRTkYhDZ28ipMsV/mSJI + Jc8jzV1fUpJOuFBWyjG70okG+j8dfhf6Gh0Ya7LymZno1xuxvVWLy4PJuLwuAkf94bilJwkPjqnxxJQO + D40qcU9/Au7ojcOdg4m4uS8Jp1vjcLQ5EUdblDjWqsdRPtNDfE9HfTKc5babu1W4a8iAC6Nm3NkvIoBl + ON+RTMhxa48a94xw+4BREohv4bHnO1S4rUWBW4NynG9Iwo31sbiuJgpnq1bgdOUynCq7DCeKw3CKOF2y + BNdUke8F4nAhKMNDbQo8xHPv9yfgPp4n8JA3CY/4k3E/fazbS1fixpwluDr9MlzH8qaipThfxvOrInF3 + bQzuY7t6gHjQG49H/Yl4qlGGb7YkEvF4mm3ryYZwPOlbjqd9K6S5gL/nj8L3vOH4IfvRj+pW4qe+SPyM + be0XwQT8si0Rv+qR4xc9yfhhayy+7V+BJ8rD8HTZEvy2IxHPDcjxyogaH0zo8cW0GV9MGvD5iBIfDyTi + g4E4fDwSz+0ySfzFGgU+nYrHB0OxeKs7Fs/Vr8BfK8LxfFUCnq+R4+9eJX7j1+AHASMeClhxrNJEv1QD + n4l+U8IKGOMioY6Pg2pRAI5LjkUUEa2IkxCTHC2lhU5YRHxSlIREEQWcHAMZj5Ur4tmGE9l2k5HiNCDV + Y0F6mhWp6RYJnnQzxzETPFlmpGVbQwJwgQO5xW4UlqWjrCYXFbX5qKwvxOBoB06eO0Tf5TH84tf/he/9 + 4Bl889uP4z++/w387Oc/wJ//+jv865Xn8fY7r1yKBhYC8BdffIhPWX7y+Qf4DB/jcynds5j39+sCsIgc + /io+w4dfw6c8/6NP38N7Yv7f99+QfkMIwK++8SJefvl5vPjcX/DCH36N33zvW3jm1utwesMULu9vwCHy + rVOjPpydaMBtmwfxnRuuxL9+9QN8/OYr+PADXtcnn+DzL75YlH1FMPAX+PxzEfn7kSQ4f/jJe/j4k/fx + ycfv41Pek5gH+OOP3pQE4HffehFvvvYcXnvpr3idePnZ3+APv/oevv/Mfbj/ttN46O6rJQH4B8/chYfu + OImrD2/GzvlBzA4HMEesn2zDFZvGcdOJnXjqvnN4lD7jjSe34ootA9g03YjNMwFsmWvAxtkA1k7WYXak + AuMDxRjuzsdgew4G27LRH8xAH3lgl4/jQzl9uSId7akZdURVvhGlWXrkedRwGWNg1a2ESXMZTKow2HVh + yDSFodIuon+XYb4oGke8CtzZaca3hh347Vw6XlibiVcXcvDm1jxJ+H13IQ0fLHjw8QYXPl1nx6drLPh0 + ToePp1R4fyKJSMB70wl4f0aGD+eUkngrUjgLfEyf7hP6cZ+u1ocgts2o8d54Mt4ZTrwkAH88zf4koocn + 5XhPzKM9w7pXafDeGjG/sALPj8Tg991h+PPQcryyJglvb1QRPHebAl9crgeuNAFXsP6dSry/ORFvb0jE + a3OxRDzeX6/CZ1vYZ7fxmB3sw9t10vqHGw14d96E19eY8PKMCf+cteKfq1Pw7Con/jTtwP+MWvFMSzLu + q4vBHdVxuMenxkNBO77Rm41vjxXiqZEC3NPpwU1BK876dDhSJcf+wlhcVRiP07TpN9QYcCv51cN9+fjV + nj68dX4bwjL10dJXagXiaza3DtkOLVzmZOhV0VAmhxMRUCsioNdGwcLj3C4VMtJ0NNgmFOSSvJPEF+bS + aKTyPBEpTMOXYoyD2xyPDJKeLJIekRa6yKMgkpEvREFnInJSSJKsMci2R6OQ5Keag059oQH+YjMCZVb4 + ifpikbJTH0KRlg2KoGH3lYpo4CQEShLQXJVIp0xG4yxHT0BBqNBLI9Jdw22VCWgv5/6yeLSWRKOlOBpB + kpOm/CgiAo1EoCBcEoBrMsNQmxUmRQKLeYE7hABcE4debwKG/El0apIw1azEmi4d1hLz3XqWakw2JWCi + MZaOTwwmG2KxulUmzQu8hoO/EH/XNHOdBkZ8fbaqQSVFcI1VKTBYmojewih0F67AQFUEppvlWNtnwcIY + naseOk61cpTnRCDDFoY0cxg8hFN/GVL0JHa6SHaiWNi0ybBrVHBo+Oy1+kXoJBHYSbJg08lg1sXBpIuG + yRgNqzkqJADz+afyXbhJotwiVzvJrkj1LERggZxsMZ+gAVnpGkkgTrEnSmmkTfxdky4CVlOMJACnSAJw + 9NcE4PQUkjW+7xwB1p8jvmp0xiPbFYdcVzzy0mUozlGivECLyiIS3HwS28UoYCEAexzR0p+7qSIK2CX+ + uGM74fastES2M6UUZVVVbOS5BmkeN5FyMzdTpPgTArAgziIqSyf9mZfHejNJFlNdNDz2BBj1MVAqo6CQ + C4iJ7S8KwAmXkJycJOGiACy+zBNQqZOg1spIlOQk2RoSPQM8LhqrNDsyhAhMCEE4XUT2uiySsCuQw+2F + Yg7f/ExUFGWjNDeVBJbHOs0k/IQkAAuxOEVK/5yf7uIx6agtz0OzvxKdTXV0EKvR4i8j8SpCfWkOqvJc + dCCsKEgzfS0CuCxbpGV2oiaPRI1OdWW2BRVZwqExSOKvEHGFANxEx6ejhgO2P48OFY2qvwD9vnz01GWz + z6SjmWQvUGBjf+B5aSS4qWqWWlRz3ZsvzqeDVZmG7rocKX10c7kHtWw3QgD2ZmsRzNehle+gk/1WpAfb + NlqJoxvbcWxLpyQAbxzjfflTUJydiHR3JBxOGgTbMuitl8Fgo/OyKACbUhJgYjsyOuWw0GlyiPmfc/Qo + ytdL77ia77qQxDvfvgzF7B9l2jBUK8LQoAxDD5dH9WGYNoRhjTUMs5aQGLwuIww7ysJwVVM4rh2Kxn0b + kvDtAyr85loTXrjNirfud+DjJ9OA72YD38rC54+l4oN7XHj1Ogd+s0+Hb66V4T4alhvG5Tg6qMYuIeLV + qzFdrcBUtRLjxGSdDnMNNvZ7F9bScV1DZ3YVB945rxXTtSZM19Hx9TuwuokIOrifji+drJ10yk8MW3Cq + T46r+yJx6/QyPL0vCn+9z4gPf8xr+T2v6W9OfP4PCz57zYKP37LgI0kApgF8z4LP37Lj83868Nkfnfjo + p268/UwaXro7B78+mYFvbrXjjgkDDnE82lQRjYmspeiyLUErHaegKR5BWzJaPBxbPVqU0cnN0sfCrlgJ + VVwY5LFEfBhUSUuhUa6EThUFrToKKlUkNBrxcUUUjBxjLCxtmpVI0ayAR78CWXTM8i3hKLZFsc4YVNG5 + rU2lcynSP6eyr3J8KHfIUMF3W8UxqE60nVIRoU6U0aEvYnuiQ1edGYcKTwTKneGocEbw+EhUcXyoccfB + nyZDY4YCDUQgSwl/thL1HEuqM1kvncvyDDnKuF6eo0KlSJ9bwLGDbbimwIJqkfZrUQD2FttoT+xSlEKw + MhXt1Wnoqk3ntQgR2Ig6jiU1rLNJfNxQakRnpRCAHVJqvFERHdHkxnAjl8WX6oEUwoYRvwmD9Qb0VSnR + Vy3HYJ0CI7RNY3SmJ2kLJgNKjNHBmKBtmBMRrG1qbOjWYvuwDXvGndg5ZMeWbpFC3YJNbBsLLUbMN2mx + ludtbNZid58Ve/otuLzPjN09RuykXdrdZcaRiWycmivGlcNZ2NJpx4KIDm6nk9ZhwbxIP92uxzzbrcAV + 4xk4sa4Ep9eX4fCc+JLfjs08Zl1QtGE9JkgkBitVaMmNQ3NGDFr5LoQAPJynwGSBEqvzFVhPh3tjoRqb + CpKxkJeIjUVJ2FauxNZqNbZIKWKN2Mq2vqXVhfUtKbxvPhM6H220z83CRtfL0d2oQQ+dyB5eZ2ebAe0t + WjTT0W5p1qO91YQ23m+jn+/am4j2RjlGOml/h1KwedSFTUMOLPA5ref9rWuzYm2rBauCRo49Bkz49Rjz + ajBCsjTZaMRsqw3T3D9Qr0F7WSLHuliOeUm093L4S+NDAnB+NMdg8pKcGBTlJKKkIGRXqko4xpWaUE5S + W8o2UZCrJg8ix0nnOJaaiDS2R1eKsLMiAngZnXv2BatIcx8SgYU45aYtlARdwuFYFH8JIQSLaGBPKu0y + +0aqR07bm8xjEmC30dZbRb3R0odcZtpei1kIXPxdjrl5+RYUCAE4n/aIdjyFfUkIwFraZSUJdxL7ZIL4 + AMoWDwvHcwfHcXeeGZ48OmD5IvrXDneuFa4cA5y0EQKODB2sHhWsTgVM9mQYrAnQGhMkwVenj4eGvEJA + q2dJiPTPIQE4ko6fSPu8Qor+jU1cgej4FYhMWHpJAI5XRCKRY4ic9alsMmg43uikFNBKaD0Ccuhpt03p + HPczlXCwdLEfO8gfzHy2VuMKcs0opBHZ9tiQAExeIwRg30UBmGVTSpwEny0SXmuEJPzWW1YQK+FPCUfA + EYmGFAHyQtqbFhEJnBKLHtbXz3cyzLon+U5Wc2zZVKjHnho7rvB7sMfrxKYqE1YVqTCcFY+eNPJFTzg6 + PSvQkx6BvswoDGRFYyg7FjMlCsyVqbCKnHWuSIFV+clYxT6yNjeE+ZwkLHDb5gIZNhcmYlNuLDbmRGFz + XjQ2sh2uzY/EbF44pvNWYJw8dSJvOeYKI4hIrC4Mx7qildhVn4hTHSbcPOzE7SNOXNOuxtHaaOwvXYn9 + 5bHYV5aE3XQAdlaqsb5Ehim28b7M5Whzh/E5haHFfRk605ZxG3+HfXdVKfs1MVtMzsrrXlOpxzovxw6f + Gavr9JiuUmOiXIXxMiWmKrXS3PVT1XrMCHHYy3GD/W2S/Huc3Hy6JlkSgqdrFZioSkZ/UQyG2M8mqpOx + huPYlhYdtreqsIP8d0+bCgd7LTgy7MKJiTQcm8nA3hnBh/UI1sahsjgSRUXxyOdzzKVtyCUHyMlTS/Pg + pZNXesgVLwnAbPsCQgB2sw2k0vaksn+msw1l02bkZSrIHUMC8EUI8feSAEy7I5DDsa6wSIk6rw19/UVY + u74Fx0/N4+4Lh/HEN67Fk09fjyeevg6PPXU1Hn78HB569AwefOQM7n/oFC48eAr3P3gaFx4ICcB33XMU + d999nDiB++49SZzCvRfO4L77z17CvRfO4oKE09L+u3j8PTz+gQus657juOPmA1IU8F03HsTdNx7C3Tcd + wn03H8a9N1+Fe24+hHtuOigt33vrYdx/+3E8cuFqPPbw9ZIA/NgTN+DxJ2/E40+IuX7P48lnzuMb370V + T0kRwNdLEcD38LpvvuNKnLl2O668ag1Wr27DYH81Oprz0d1ShNnRBmyY68DamRaMD9agv6sAQ/3FmBkv + x9x4KVbTCZ3uT8NEJ8f5VjvGhX1knxn2pdOPysIA0VXnQmM5bS79uUCZHg1l9Pv4LmuEX0C/pJRjV5Et + CaXkJL50A1pzbOgucmOgLIPtJxUtaRY0uoxoSaWf6DCgQi9DiSYWpVpyA8NlqLMtRdC1kn0wCvNsg3sa + knGkLRnXkVfdN63Fg9MK3D8eh7v7w3G+fSluaAzDdU1LcGNwGdeX47bOlbirLwr39Mfhzp5Y3NgSjhub + w3FXbzyemtPjG6v1eHJOi0cmFLi9azkuDEThO6s0+OVWB547kInnLvdI0bu/Wi3Hr4k/rNfib5uM+Avx + p81aPLvLgJcP2vHmCRfeOOXEv45a8Ow+Lf64LRk/WxONX66Ow2/XK/HXLSb8dbMZf91owJ8WlPjbliS8 + fZUW7x3X4MPTanxyToePz5rw0VkzPjhlklI7iwjfT84S5xxSKaKBpUjgU7ZQ5O9hPd44pMXrB9WEBm8d + 1eOtUw68ei4Pz56twq/PNOMnZwbxo+vn8e2bL8dt11yBI8d2YdO2VWjrCqCsooh9IgsZWZnIKypEoKUF + wzNzWLt5O9YsbEVX/xjqGtpQVR9ErTcIP5f9je1oaOog2tHY1IYGbmtoaEVDoBUBfxA+ERnrayRElG4w + tJ0Qpc/fQlwUT3msiJ5lKcTTeq8QgX2oqSe8Qjz1wRdoRKCpib8lEBKZmxpa0NQk6uO59Q2oqfWjtq4R + Xq+ou4PndLHsRKChi7/La/W3kmsQ3mYEeR9NPLaZv99Ux7rqGxH0NhFBCc1C+F1EsIHH8LeCRCOvM+AT + 4P17W+EXJSGEX5+vfRHi/poJcT+8HiEI8xmEINb5PPhbAV9IGBdlk/gN3odAgxDYCZ8EPkMhcPOZ1NYH + pKjpmvo61NRVo7amHDXVhfDVFaG1oQwD7dWYGfBi3ZgXC6NVWBguxYahPMwP5GB1dxbmOjMw05GOVR2Z + WNWVjTXEXBu3tWRgujlDEoKnFiEJwEEPZpvTyGHTMcNyskVECTsxGHCjo9qJlkq3JAAHyl3w01esL3eT + R7lQXpSCskI7SkSKUfKPAvqreRlm+uz0rZ0ajttKOM0isxnHbGMiSi1y2mz6lU4Dhuj3zuW7sJ3+55Vt + JTg5UIMzgxU40JSO7RVGbClVYzPt076mFJwcK8AN62pww6Z6HBMC8GQ2No+kYu3gogA8ZMPoCEHePUTO + LTA8nILBkRQMk18OjRFC/BUi8DDHoSEXevtS0CXSQC8KwBdTQH8pAHM5aEJ70II2IfRyuanJwr5ggo88 + 1Ev4yE8bAkYEyVHbub2D+7ubUyT0tjnQ35qCPqKn1Ym+NpdU9rQ6Qmhx8hiC+wX6ePyAOKeNdqrNjgHy + 3AHy3GExv3CbBWMtBK9hNGjgu9HST9FybA5hgphuNPA9mvgOLfRDyKHb7VjbkYJ1nY4QuCytdznIs13Y + 0OnGQocbGzs8LFOxiVhoEYIt9zc4JcwHQssbmpzY3JKGbZ2Z9FFysJ3tanMzn7+fPnGNiAI2Ya1PpH0m + j6cftaGRdbJtbRRgm9pArGtN43WlYZxta5C/0eG3oMVrRJOXz9VHiKhg+tetrKfVl4I2nwNtXhdaa1xo + EQJwlVtCc6WLSENTpedrCFS44SOqC6wozzahJF2LIo8a+S5yAqJQAnlCCnkCkc22mGVOkqJ/LwrAqepo + pGnIMUTUOtcFQlHAScixErRpebRtQgQWAnBZphbFmayPnD+DfkEauacQgAsy6a9KArABpbSPkghcJqBF + gUCJDgWleo6/aikFdIoz6isCMH0P60qYbeH0KyLoU0TCnRbL42KRkR3HsTuRvoKc9WqkVNAZWZH0Ocin + 3cukKODcHPo+pXKOFzqOlQY0BswINoYE4JrqePo+K1BWIgTg5WzTsRjoV2NwQIuuThXHzURUlEagrCiK + fZvHCgGY/LeKXPJLAZjXn0O/iXxN8LCcDD4/kdmNyOZ9Z9N/v4gs+u0ed6KEDD6jTHKDvEw1clPl0n+M + aRZyO0M4UvXLJQE4j9yvljyukVyinZyil7x1tNaAYfrfw1VJGK2Kw2hNNMZ9AuHESkwEIkLwR9AvDQXx + jPqi0FuzEu1VS9FaRZ5cG0kfNQbtARl6mjXoZ//upU/ayf7ip49bmi8EapHlKQo2WzSM9NO0uhhoNPFS + 2luDXkyPpSUfNcBhN8KRYgoJwFw3m3Uw6tXQCAFYFo+ERJE+N06K+hX/O4rIXyH6isjfiwKwSpV8SQQW + Iq9MniClgBairxCA/z0tdGhuYPpVrMPlsdJfzJCigP0NNcgryJDm/tXqRYSxQhKApf8zM51sK26Ul+cS + 2SgrS0VFmQd11R401DvR0eBBn/i/o8mGuWYzFtpM2N1hwMF2FY4GE3BdewLuHVDg8XExT68ej40rcd9A + Iu4dTMCFsWTcMSzHNZ3xONGWiJM85xTH0RNNBhz1q3GyQY4bujS4b9SIR6es5FlG3N2nJDdLxI1tSayb + 57YpcK5VgROBRCIBZ5u4nT7ETcQtQgBulOFGXzyurY3CmcoVOF56GY4ULcHhojAcEyJw6VJcWxOBWwPx + uCuYhAvBZFxokuF+bwLuq4vFfbVCAJbhUb8cD9Ul4e7yaNxauIIIxy2Fy3F7yXLcWRGJe2picJ83HhcW + xd+HJAE4AY/zmp5gW3qiQcwJvBKP+Jbh0fqleNK3QpoL+HuN0fhhQzT+yxuJH3uj8FO2yZ81xOHnzYn4 + Oe/x591y/KRHjv9sS8AzgXA8UrEEj/K6fxSIxG/b4/H8gBJvjOnx8aQRn47r8OGQHO/3xeO9gWh8MBSN + Tyfj8cUqIQIr8NlUEj4YjpME4OclAXgFnquOw/N1SvzRq8ZP6tR4qlqLW8q12J0lw4gjHnW6CLjpsxvi + IqBKiJcEYPFRgmhjsclxiFHEXxKAY5KiEJcoEHlJAE4QEcDyWIjoX0kAViVCo2M/SNHB7TYjLd2GtKwU + pGZakZphkUpXpgXuTDNSRfpnIQCXeJBXko7sIo+EgvJMBNvrse/K7bj/kTtw4eHbcfaao7jq6D5ce+Mp + +mMP4hf/8yP8+S+/wt///js8+/wfIYRgEQUcmhv4fXyOD/H5FyGE5v39ugD877h47EWIOkR973/wBt55 + /3W88+5reOvtV/DK6//Ey/96Hi8+/2e88Mdf4Tff/yaeue3aUARwXyMO9ftwatSPM+MNuHXTIL594wH8 + 69ffwydvvYyP3n8XH33yET67GAX8+Rf45NOPpWjf90Wq54/f4f73pHv4/LMP8Oknb+OTD9/CRx+8gvfe + fgnvvPk83nrtWbz20p/x8vO/w19++yP84r+exHcev4O+4HE8eOcZfPeJ2/GTb9+Dbz18A86f2Y3LN45i + lRCAh3zYONmCK7eM4fypHXjy7pN45PYjuObIOuxc24q5fpEhpgzzY1VYP1GDtZOVWDNRgZmxEkwNF2Fu + RPh8pZjuzcdIewYGaL+7/U500/52+Wh/OVY0VtrhK7GiOt8kzd2e7aBfrl8KuyYMLm0YSlLC0Jq1HLOl + 0TjUpMBN3Vo8OmzCDyes+NuME6/MuPHGKjfeWuPBu2tdeH+NAx+uTcHHq634eM6IT2Z0+GRKhY8m5fhg + IhEfjCfg/alEfDgtw0dzKnyyWodPV7OfLOJzCQYJn9Kf+3hSjffGZHh7OEESgD+YVOCjKSU+nFLgnfFE + vMM6RWTxe6zr/TUavLNGjRfHYvH7rjD8qe8yvDQThzfn5XhrA8/dqsQXe3TAfjOwz4jPdqjx/kbWvT4R + r6+KxRtz8fhgnQqfb9Hjix08ZqcBX2zX4pPNOry3Qct6DHh1rREvrzLjxTUp+Oc6J/6+yoXfjdvw00ET + vtHMcYpjzJ21ibijToX7Gq14rDsDTw/n48nRQtzTk46byAfPNhhxuEaJywtjcWVBPE6WyHFdpQ63eu14 + mO/ql7t78boQgPNMcSi00+n2kGCkGZHr0JJ0y6FVREOeFA5Z0krIk8NpoEgySGacDhXSxPzA7KhZ7LQ5 + WTQYqToatmRYSdRNmmjY9HHwkBRlOZTIcSqRS8KT66KRdyYi+yIcNOq2OCKaBEsIwFrUFxnhFykmSi0h + lFhQX2qU4CXh8ZEEeUuFCCyigZMRKEtCs/gj2atAh0+J7oBKEoC76xXorJGhrSIOrWUJaCmLQ0uxiP6N + CgnABVFEJJcjSRYi4c8LR23WUkkE9uUuQ7AkgsY/dlEATsJQQzLG2DBn27V0hgx0jDTSn/WzNEBTzTJp + XuCpxjhMcQCfa07CqjYZ1nAgX9OcgHXcv44GaV2TktBiLYn2dK1aihgcLovHUEUMiUg8Vndq6ITZsTBO + B6onBc21fCc5JDe2MLjN7ChGIQAvRYp2Jey6aNhJMlO0ckKIvwa4dALGkABMY+/QKWAj+TCTkBq1kTAa + Ikk2omDnM3ekJMDlSuK7TORyElL5bkQUcHamTkr5LJYFpLl/+e5sVr5XHevQRkilJAATIQE4RkoDfVEA + zmB9mTxHCMDZDtEG4pGZEodMRwyXY5EjUkGT2JXmaUIirphvLTc0J4gQetMuCsAsBdJcsdL2HJHStUgr + /QFfQ1SRIFeIeVJEJGiunKRShqI8QZxJrIs0KMhTIC+HbS5LpJvhvXgUsFrioSZJvygAfxkB/P8WgAXR + ksiWMgEKdSLUYj5gkwoWmx4pDhorEiqBdCKN5Mnj4DsQ4rDdwOs3ItNtI7l1SimdS/LTUZjpRpYQjkkA + 00kEhQCcyXPFvL8C+elOlOdnwldZIAm/va1+dAWFCFyBYF0JGirz2C8yUFPgQVm2nW1EzKHkQHmeE5V5 + LtQWEHSM68QcvXl21Ig5gLPNEOmfqwlvvhWNpU60VQkBNxuD/nwM+vIxQPSKKOCqjEsCcH22UYrsLUvV + SGmgK9k26kSUZJEVzXTou2ozJAG4vSodvgIz+5AOvhwt+5kRbSVGdJebMdeajd0zXpza0YvTu/pxYEML + FhYF4JKcBD4fOilOkbKIDox1KYy25XRe2M7El5QpbHcOtuEUtkG2JRfbqYh6K8vnvRTpOVboUJ0VjUr3 + ZfC5wtBkD0OHNQz9xDSNyjrHZdjEfTvZt7dlLsEWYnP+EuwoXYIr6pfhcHAZznQtw+2T4Xhqczx+vD8Z + fzmjx5t3OPDFUznAt/LxxWMZ+OS+NHxwWyZePpuKX+234D93mvDwRgPOr7bgqj4zNgY4LtSrsManlv78 + nhPpeUmM17cJBzkNC60erGt0SALwVI0Rk3R4xbxGq5ocWEtHfn2LHRubLdjVqsNVXWpc1RyNo02X4dqe + MDy+dQX+eIsOb3+H1/HTTHz+21R8+hcx3y+N32vEO1Z8IlJBv2vBF2/bgX+5gL+78Nn/0Eh+j0bz0Vy8 + cCsH/OOZeGqbHTdMqHCoIwFb61ZiVRGdoMx49LuS0cFn3JFG5ymNjpoYs41xSFGshC5xCbSEJmkJ9MnL + YFSGS0KvRcv3w7HeLD4u0UbDynHBrg2HQ7sMqcbldHbDUUyHqNwVgyr24crFsprOXC1JQBWdOZEWuozv + tVyKAFaiPkePphIb2xbHv1IbgkUmjsfs8+nJKOO5pSnRPD4a5c4YVDpjUUNn2UtnMJCmQEM6y0sCsJiP + mvXToRTib0WOEpU5bL+5OlTks03nidTP7Be5JlTniWkGjJL4K6J/G0pIWCo8aK9OZf/IoA1x0UZwzMlU + oIJjVyBXg+ZiA9rLLeipdWAo4MRIo1sSgoe5PMx2PUwjO8x3PeQ1Y6jOgMEaLYY45g/TYI/UKyUReNyr + xJg3GQO18dyeiOlGBW2HCuu7dFL07/6pVOwddWLXgAM7+x3Y0WXDtg4LNrUasL5RhS2tGuwbtGDfkBmX + 9xuwp1uHy3v1ODjkxNVri3HN2nLsH0zHQouZ7cuIhXYTNnZZMc/z1wQ1mG1QYNovw/ZeO47M5uHkumIc + nM7Grj4HNneIcwySADzm1aK/UoHm3Dg0ZURJIrCY+3Q4V4aZAhXW5iuwgWPwxlwlNnPbJu7bXCjDjjIV + tlaqsalCi4VqIzbzuWxudmGe7X2qSYjnGjrXyWiqpA2vk6OzQYeuZiO6ROo8Xm97sw7NQS1agjq0NRvQ + 2qRBMKAgeGwz7WevGetG2L9GPdjIe17fbcU6Ec3A+xWYEwJwo54OvZ7OvQZj7KPTdFRXd6Rgrs2GEZ8O + 3ZVs8/z9Xq/gDGryiQRUkRuU50WhOCcK+TnRtCuJKJIEYD2qysyo5nsvJy8pLhQfSqmRnpaIVLdINyuE + J9pXq8iQsRJm4wraW9pqS0RI/CXPEeKU0yk+wCIBJkLzRdGW0i46hUCVJqdjpGJJuJNpe5Mkey2EX5Mp + kvxLRNpHQ6+PhE58jGWk7XUpkMlxOo/jek4BbRDHx68KwGr24yRNOBIJvSMZKZl6uHJMcOeaQ8ihzcqz + cZtF2u7kfoGUNC0sbuVXBOBk6MyJ0BkToCcP1OgSFhESgpUcC0Q2gGRFlCQCi3l/QwLwypAAHB8SgGPI + JxPJLWWaGKjMMmhsydCkKKF1KKQoYJ1LCQ3HeSEC61JlMBBmdxKsHDcsfFZ6PccgwzJJAM6wx5Kvio8X + E1BGTlPFew4JwDIEea9N3CYQ4Hl+2hOfPSoEWyTqUyLhJc8Q8PG9iGOCfIetfCdCBO7l8YM2cjO+p1Vp + MmwhT9lbbceVfjeuoGOzq9bKtk0uly/DUGYMelMj0ONZib7UcAykR2GY20azYzFXrMAa9oX5MjXWcHk1 + j18txN+cOAnrsskRaQc3cHlDbizWZ0USEVifHcl9EViVG4HpvEhM5kVgNHclxiSEY4zccCxnBSazl2KB + jtOBgJq2zIwbem04Sa56eekKbM0OwzYeuz0/DluLkrC1XImFMgVmiuIxkBWODhH96whDm3spejPCMcj2 + Psm+O10slzBJjj1bpsGqKj1W1bPv+CyYq2OfqtJgpFxF/qrEKO9rvEKDUfbzMW6frFMT3F6diJGKeExW + sz4hApOnj1dwvCuJw3B5PMZqkzDLvrzQrOFYpsK2FgV2d2ixn9d/aMiD45OZuGoyA5s5Bg5yv488uYR8 + PS8vHtl5SmTmaQk9Msk3MjJEqnQxVzZ5Ld+dk+/NyX4jgW1ERM67aS9EKnaRXUZMGyL+cMwTf75y3Pqq + APylECyXkJefLEXMVHMMa2vPwiid4D1XjOH6m3fhwoPH8fCjp/HwY6fx0KMncf9DJ3HfAyLN83Hcfe9h + 3HnPEUn0veOuw7jtjkM4f+sB3HL+Stxy85W47ZaDuFXg1iO47fajuP32Y7iDuJ3LdwjccYT7DuGGG/bh + xhv3487bD+Gu2w7h9psP4I6brsRdNx/EvecP4b5brsKFWw/jAZ7z0F3H8CDrEHjgLjr+dObvv/s0Hrj3 + LB64XwjNQow+CxFhfO+DV+P+h6/BI0+K+YuvwX0PnZJSP99y1yGcvX4nDh1bh207RzA66uX4W4iGunS0 + BXIxNeSTIoBXzwQxPlSNwb5iDIk5REdKMTNSiLnBbMyIuSw7bJhssWJSZMTwCxE4DSMNmbSVWRxvxR/x + tLnlWtpa2nz2Iz95e60kAMskTlBiZ8lxp96jRZC+Zgf5bE+xG115tNFu+oIOHbmKBX4PfQGrCqWmZJTo + Y1EhPvQQH3a4Y9CeFoOpUhk2+xRSJPDVA1rcOWvCPbMq3Dkej1t6V+D61jDc0LQENzQvww3B5XSel+Gm + FkIqV+DaxqU4WhWGo5U8LrgSj03r8dRqI54QAvCUEvcNxeLJSTl+vNmKP+xNkwTgv+524Dfr1fifVQr8 + apUcv1+nw183mfHnTSb8boMKf96ixguXG/HaEQfeOOnEy4ct+PseNX6/KQm/WBOFX6+Nx582afH8diue + 22rD37eY8LfNajy/Q4EPjpvx4UkdPjqtxsdnNPjorHFRABYgHxTi71kHPjvnksqLUcAiOlhE/r55lQ5v + XKWV8OYRA946acEbZ9Lw4tkS/OmMF/99ogP/cWIU3zwzjwfP7cSpoztx4MhebNu3FR0D7SiuLGWfy4En + I4O2JhulNbVo6x/E3MJmbNy2FxNzG9DcOYTaQBtq6lvhC3TA19AJf1MXGho7EWjsQKChA/6GdklsDfib + 4RfCriQCN3G9RRJgL8IvROBFIdjrE4KtKIUILEThJoio4DovIURTfyOPFaJzM3+HaGJdklDagkYhOItz + eU5tfSPPEWIr6+E1eKVrFNfUybKdpRCm+ds8Xro2HitKvxC064NoIBq9rJMQkb4X0cjfbuK1CojfCt0D + 79HXwVJEF/M58Lf8olxcvigGe72tEurFfUkICd4NvOdGrjdxWSDY0HYJjXzGkkjO+/MJcZvXINJM13kb + +ewbUF3vQ3VdLaprKlFVXYz6mmI0+78UgNePebFprAqbR0qwaSgPGwZzMN+bjbXdQvTNWkRIAF7dkUXe + lInZ1kwp1fNFAXhWgogADgnAs63pmGlNw3iTi/3dQx/RTV8zVcqoIwRgb7kbtRVuVJY56afTB5QEYDsK + 8yzkWhbkZdEfThcfV2s5Zqs5hsvhNCQgTRePAvKOWosSTTYN/RUdBjzkgGUe7A0WSQLwuZEaHGzOkgTg + zUVKbChIxA7y76MDWbhudSVuWKjDsVUluHxCCMBpmB9ySQLw+IAVY0NWjBLDA3YMcdvwUCgSeFDYH2Jo + zC1hZDQVwyOpGBxwoo/cuavTjM5F8VdCyyLoz10SgJvMUhRlA3lvfYOJfUOPGqLOz3HMp0fAS67rM6CF + aA1YJXQ0WdFJH1JCkL/TnMLSwe0p6Gi0S2VnUMBOWPmbNnQHbeji73QS3Y0CRvQ1mdDPcrCBfgh/b8Cn + wSB9VYEhCfRLvOTTPtpvCTryZZ30kabAVAN5NDEtwYQZ3sNMwEzbTY7tF7BKWMNrWuW3YdYrOAK3EbO1 + 5OP13Efuv9DkwZb2TGzrzMZWlhu5vsprw3S1idzARN/ZjvVNbmxiO9rQKMRf2v4Wgu1tI9vd+vYMzLMN + znRkYpw+9WCLC12NNj4roiFUtjfweTQ40UU/rDPgQgd5WntdSAQOSnCjtdpDpKG5hqCP18zlINtnI5cD + VR7UFNlRybZYSg5cnK5FoUctQYjBxbRFhU4t8lPUkgCcaUpCnkWGXPLYDHJgjyoKqeo4SQQWqaC/lg7a + zJLIsZGvCgE4XcPfYH3pCilLnhB/PfQRQgJwshTcUF5qlMTfklItihZRWG5AQakBhWUG5NJmpmclweGm + H25dDqN5KcwW+uc2+iDSPMCRSHFHwumJhpuc1JPB+rPjkV/A+snryso18KSJKOFl9CNCAnBOTgyKyfsq + yenqasW0O0aOZ0IAVqOmOuGSAFxbs0wSgPv7lCEBuEvF8ShpUQCORHmRiABOQGWJnAgJwJXFWum+8uk3 + ZdPXyaStz5Eie0PIESIwfXcp+pdlBp9DKvl/qlsWmgKHZU66Ejn0DdIdiVKWSZduBdz6FcgwR9APiEU1 + OYTI1tVSqkdXmR595KfdxYnoJe/sLY3CYEUkfdpYjPlZ+sPJS8LJT1h6CV8UQd5fF4WOiuUIli5BY9ky + tNRGoc2XwH6mQB/95742M3rpa3a1WuGrFimtEzlmLQrA5kgYDKGP4rXqeOi19F8Mcjis9LvsQvilj+Uw + SwKwSAVtMmph1KmhUSVLArAQf0XkrxB+xXy/RhP3Eyaz7pIIrNEopP1CIFaok6HguXK1DDJlopQCWkQC + i1KIw1/OCyxEYAXbiZY+pgPlFYW0pVUoLs1lOzFKArBOJ5fmAL74n2ZWJsfnkiyUlgoBOB3lZWmoZX/x + 17vZ11LR0yg+fLdfEoD3dupxpEuDsx0ibbMcDw2r8fSkHt+eNeLxMQXuH0zE/SMyPDylwr3jSvoqCTjZ + noATbXKcbNHhWECDoz4VzjSpcGuvFg9PmvHkjBmPjGlwV7cMN7XF4ZrmeJwOJuFoIBH7a2Kxq3Qldpev + xKGaKJz0J5CvyXBzUzJuakzGDYEEnKuNxqmKFThctARXFoThysIwHCleglPlK3AN951nPbfxnLsDMtzj + T8R9dfG4l/XeVx2LB+uS8JhfgUe8ybhQFSeJwPfSD7mnPAr3sR1d4DEX6uJwwZuAB7yLAnB9PB5m+3rY + G4OH6sK5vhwP1C4lluBB4tG6ZfiGbyX+ozEGP2yKw48aYvFjfwx+GojFfzcm4L9bk/BTPr+fdCvwwx4V + vtuhwNM87tHqFXiY7fHbdSvw02A0/twjx0sjWrwzrsf7Ixq81S/Dmz0xeLMvAu8MhOPDsRh8Op0AzCXj + 8ykZPhgKCcAv+iPwbFU4nquNx7N81r+oVuJbZXLcyzHhTJYMG+yR6NYtR4V8KVyxS2CMC4c2IR7apHio + 2D7F/+BCBI5XJSBOGY9YkQY6OZr+fij692Ik8MWU0PJFAVjJdqjSJLH9aaQoYFeqheNRCtxC9M0Qwq8F + jjQzUtLYT7LMSM+zI4d8P6coFZ5sO2FDbgnbXrAKm7avwQ3nT+P4mYOYXj1Cu9yDzdvX4bqbzuDRx+7D + M998GN/+zmP43vefxrPP/RHvvf8GPvz4bXzy6buSgBvCB18TeP9d+L2Ir4q/AhcF4A8+eIP1/rsA/Cxe + fP6PeOFP/4Pffv+ZkAC8fhqX9zbiYJ8PJ0cacHq0Aec3DeJbNx3AK7/9T3z+zsv49MN38cknH+CzTz8C + Pv8M+PQTfPTRu3jvHdb/zqv8rde5/218/vl73P0uPv2Y9/PeK5Lw+8arfyf+grdf/Rtef/lPeP4vP8Ov + fvIMvvf0PXjiwrW458bDeOSu0/jBN27H/3z/fvzkm3fiwVsO48S+1di6qgObZ1qwZ103ju+Zwl3X7MaT + dx/Fw7ccwJkD09g86cNYazbGW7Mw3Z2H2f58zAwXYvVEKVZPlWLtVBk2zlZj81w1NoxxG/dPkytO0sZP + dWZJ5Ugb/b2mdHT5UtFCGyyCO2uEv+2iLbIuQ571MjRmr8RkRRx2BeS4tkeHe4bE1Dw6/HRCh+cnzHh9 + nL7LhIAZ70xa8N6UCR/MmPDhlAEfTGrx0YQKH43JWYr5rhNDYJv/eDoZH8+q8ckqHT6jzyZhlRGffwWf + zS4KwKNfF4A/nFRKkcBvjcbjzbF4vDMtw7uzCry/Ro3357V4eSoBf+haQoTh+fFIvLYmEW/O89zNKnyx + Sw/sswB7zfhspw7vb1Tg7fVJeHN1PN6aSwwJwJt0wHYjsFOPz7dp8OEmNd6eV+FV+oqvrDPi5bVWvDjv + xAvrXPjLnBO/HDXhB706PNUixwMNybjHJ8cd5G530TY/0ObBowM5eGwkH3f3ZODGthScIl87VK3A3qJ4 + HChMwKlSJa6v1OF2nwMP9xXg57t68cpNWxFWZE1EqVOFynQTyjLMyHXp4DTTwLBjJydFQiYLR3JyBFTq + aBqkRNjF3CwuPdLSTISRxlkHu1UOI8mOnsfo1DSC4ms4Gw21WyuFfWc7abDtiVJK6Aw7iZAjSUKGmMPB + FoM8VwKq8rRSxK+/zA7fRRFYRAGXmST4SHguCcA06j7ekL9CTlKnRKtXRbJHQx/QSgJwlxCEa5LQUh5L + IhCHFhr/FpEuukggBsFCIQbHhLaVxKKxMBq+3JWoy7pMigYOFkegvTJOEoD7fTIM0aBMNKsx26HDKmKm + TYXZFgWmBZrldISSMN0YJ2E2mIhVrbJQ9G8wAfNBGSEnlKHoLRLx2TotJirF/KEyTNbLaEAVWNtjwHo6 + HfMjbox2WtBQlYDiTJIySxhcpjA6QUIAJlHTroRTF03Ek/wkw60jidPrSIJ0UukS0b9CGNbJYNMkwKyJ + lYRboyGCZCMSVmuMFFEkIoHttnhJ3BUpnsVcwBlpaqn0uMWXYAq+ZzpfDtbzFQFYpIEWAnBI/I2FQ0Qi + EUL8TSW5/aoAnEWSJsRf8Udthj2abSAKma445KUnheY5KRDRuiTaIg30RQHYGXtJ/JUEYGeMtF1E+Aph + t7qEDlSZmYRST0IpzlejtFBFEiZHcYEcZcVqCQX5MukPPBGllZ8jBG0VHGxzOn3sJQFYQaIk5gCWy0iS + FvHvArD4Ei+EBCjViSReyTCYVLDa9LA5DHw+4os+GjTCadfTYdUhhSTLadHCxeU0h0hpFZrjtzDHg7w0 + hyT8eqx8X4TYn+6kwRNw0QHm/osCcLOvHD0tXnS31KOtoRLNdSVoqs5HY2UuGipy2F/SUVOcKqGWxrG+ + OA0+LofghrdIzHWTgno62GL+XmkO30IbGkucaK1MlVI+99XnEjkSeuuEAPxlBHC9mDuYTpAQfyWIyM0s + 9r98ExqL7WirFEJZBloqPAgUss/mGdBYYEBbGZ3fcjN6quxY21WA/WsacfXeIVx9xQgObWrDwngl+6uY + 9ymW972CpHMl2+NKOi4hmK3hMLOtmO0xMKckwMqxI4VlKttTkUgfnKeBr0CN5mIFWgrYV3OXYDDvMkzk + XobVLDcSu4qW41BZJE7UxODqhgScaYjBiQYhrEbjWHMMTnbE4VQn14Mkg21huKlvGR6ajcCPdiXi+TMm + fHR/FvB0MfBEHr54IAef3pWP927Ox7PHU/HLK8Xcuk5c2OTB8QErtjfqsMGvoVOrx4KYh5WEeL7Nhk2d + bmztScfWTiHEubGGTupMHR3eWiNmhKPcwOfT4sSGFjsdXxN2N2uwn2PJFd5lOFgXhrMtYXhiYSX+cJ0W + rz+eig//MxOf/Twdn/7WiY//bsMnL9vw6ZtWfPqODZ+9YwXeEgKwG3jOjS/EMT9y4b1ncvHa/UX4+y1F + +PGxLDy6x43bN9hw7YwOxweNuDyYgvlyK0aytejN4jPl861zq1BoiYdbTUdSsQwW5XIJVsKujoRLz75p + ogNGuIwJcHDsd+miiHCkGVYgzx7BdhMPb44MgZxkBDKTUJ8Wjxo3HTQXSzp1QgiudMaj3EGn0pUopYD2 + 5urRVGyWxN/mUjvbIdtqnhH1WRrul6HCIY4XYnKcFE1cwzrqU+Xw8Vx/uhz+TJECOiQA12TT8eRyGR3C + Cin6d1EAzmObJkT0b1WuCVXiY4J8I+oKzItgOy6y0/kTfcSD1nIhAFtQk6lCRWoS70nDNq6nTTGzr6Sw + 3zgw4HdKGPSm0Hm0YaDWSlgkDNWaCANG6vSEFiP1KpYKjNcrMVafjMHaBG4T9kOB1S1qbOozY990Kg6v + zsLB6TRcMe7BFaOp2Dfgwp6+FOzstmJTixZbW9XcZsQVQwbspbO0t1uDAwNmnJjMwPXry3FuTRn29qdi + A9vVfNAgzdGzls7r6iYNpgNKTHiTJGzqNOPARCYOz+Zh31gadvU5sbnTivUtJkkAHq1nu6hUIJgXh0BG + JBrTotCeEYeB7ARMcXxdS6zPkWMjnYfNHKM3ZyVgG8fhXWUabKtQYwPt9foK9ot6m5QObr7FRduZgoGA + Aa21Stq5ZDTVKelQ6tDB6+yUxF+OIVxuZX9qbdJxmc+b191C297SoOCYSPvZx74zkor5UQ/m+51Y02XF + XKsR0zz2IiYbtZhs0GDCr14UgI1Y1W6TBOBx/n4/f7dP/BnG3+kN6ElOE1FREIWSvCgU5EQhTxKBE1CY + z3ZUYkBluQ1VlXaUl1hRVGhCdha5ENuhJP5yvLJbaV8t4ZIAbDKtkCDWL0b/StGJjrhLEAKwxRa9KAAn + 0jFXErTBaSra32SOi4JvxUs222QWH+DF0I7HwiDm3hUZOYQNdtJWZ2iRlWtGFttu6qIAbBS2jlxLbY6H + TEseRxjIw5zZhi/FX8KVHRKBRSkgCcAZtG2paphZt8Uhlz7AMdrk0FuToDcT7PdafQhfCsC0p+R//7sA + HI5EFbmlNhZK1qWxJEPNujV2IQTLoXOQe0rRwHJoXUnQcozQsd8b+axM1ijaXtoIPlN3SowUNZHnlqGQ + 91pG21DF0usUAjB5IdFE7tJINJDrBFiHn1xEwEe7Usd3UctnX8uyzhqNeksU/Hx/QW5r47YuvrM+bhvh + 8qwnAZvIUXZXWLDf6+D47MDlbM87qs1SiuTpvESMZsZgKD0SQ6kRGGYfGadtm8iJwxx5yJoi9hHaqrWF + QvxNwOqsOKzKiJKwmucJrM2MCiF9pYQ1GSuxKiscs7mRrD8ak/lRGM1l3TkRGMpaiaHMCAxmrsBIxjLa + vAjsIJc84FfiKh9Jf3kUtmSHYSE9DBszV2Ir++6WIhk2lSmxUK7EXHEiBrMj0OFZgmZnGNo8S9HH+oby + YjDBaxTC7xQxTkyXqzFTrcdcHfuOz4LZej0mqrQYLFOhv0SBwWIlBksI8vGhMgWG2Z9HqsRUJ3EYrYiX + xN+5WoUEMVXCSEUiRqoTMeHj9iYVFtp02NyuxbYODXZ10x71p2D/oAf7hlOxpduCcfLulhr6B0WRyM+L + RBb7YzrH9NQcrdTW0zK19ENU0h+FUnp1vmch+jpFphtCiL9fFYBdfJ8Z7Gs5aSKaJBTxe1EAFmmgxRzA + IagkCPE3X/DKcg0aGt0YGC7BFvEx29WbcMfdB3D3hatw931X4a77DuLOew7h9jsP4rY7D+D8bVfgxvOX + 44abLse1N+zGNdftwtXX7sQ1V+/CtcT11+zh8m6cPSuwC+euFut7uC9UXkdn/Oqrd+LUyc04fWobrr92 + F266fg9uueFy3ErcdsM+3EncdeN+3HUTr+PmA7jn/JUsD0oQAvHtN1+JW246iPM3Xonz3H/TeYGDEm6+ + 9Sqcv/0Ir/kYbr/7MG66db+U9vnMtTtw6Og8duwZw9r1nejvrULQn436cicaa9Iw2FmB6WE/Jobr0NdZ + hK7WbPTQ0R/ty8NEfw6melMx0+nATIeN/pEVM00pmAo4MeanX9OQhtGmdPRzub3Ogma2KzGXY2u1EY20 + F758jfShVRXHnir6jdVuNe27Do0ZJrTl29BV6ER7jg1+F33FFA0C6RbaJCtq3UaUi1TQ1mSJVzRkytCa + TTuRp8BstQ47gmbyNCfOT7twzzon7lljwF3TIgpFzEcXjtu6wnErueAt7ZE4L+YDbl2BmySsxLVNy3G0 + OgzHqpfg+uZIPDptwJOrjXh8lQ6PzqrxxKwK31mrxy93OvGX/Rl47kAG/rzDhl+uUeAnk4n42ZRIA63B + H9eb8Lv1OvxytQy/mU/GX7er8dIBK147YsdLV5rxl50K/HZDPH61Nhq/35CE57Yb8dLuFLy4MwUvbLfg + hR0GvLhHi/eOmfDBif9TAP7wtEUSeoXo++k5Jz672iVBrIvt7x03S+LvW4d1ePuoQcI7xy14i/tfOZuJ + Z0+V4dcn/PjB0U5848g4Hjq6Frce3YJDB7dh76G92H5gF3rGB1FaU4nMvDw409JoZ9KQVViM6kAQAxOz + WLdxJ9Zt2o3hibVobh+AN9AJ3yL8IrpWirBdFID97fALAdjXIsHnbZYQWr8YPdvMY7geCEUEC0E2FAG8 + KAb7FoVjf5Mk+krCb0NLqBSpp4mQABwSgUXdkkgqxF+W0nKgTYIQfn0NF0v+FuEVgjF/QzqepRSBfFEE + Zl2SOMvr+SqaWJeAEGYl/B8C8Nfh4z4Br7dNQh3rlCCuj78nfqPJ24Ign4WA9LtCXJZ+W9zfoki+eK0h + YTyImvpGVNf7UV1bj6raKlTViLmAS9iXy9HfVhMSgEe92DxWiS3DxdgyVIBNQzlYYB/ewL68vjcX893Z + RM4lAXhVeya5Uxb5W8aXAnDzl7gkALcsCsABD3rqPOjguNFSGZr/11vhWhSAU0ICMP1MgSL6pkV5VvIu + M7IzjEjzaOFxqTleK+A00M9QxyBTE4cyfQLqTQo0WVRot6sxnmvDFm8OjvRU4OxwDQ535GNntQWbhACc + n4htNRpc1Z2Gq2fLcN18DU6sLsX+iVxsG83AwogHs4N2jltWjBNjg/SD+m0YJka4XQjBgyNODA07pUhg + gRFy5NHRNIwMeyQRuId8/JL4S3S3miWIlM6d9AM7LgnAHKtY1jeYUdtgQA35Z63fwPelg9+rQ4NXj8Z6 + HZrqTRJa/CG0Bsz0/S1ob7SxDAmdLT4hEotlq7SvrcGEdtYtleIcnwHtEnTo9OnR7TWgl7/RW6dBT60K + vdWKS+iroR0nBrldYIDLQ9VEjVrCcK2YQiWEkVot/QE9xmpDmKgRMEqYpJ8zVm3AaKUBY+WLKOP+SnLy + GgtW+xxYz/aywLaz0JSGtfSXJsmfxioM5BMmzNbZsa5BCMD0lZsysSmYKQnAW1q53JaJDe1ZWN8hPkbI + wQzb5WRnJgbbPOimP9Hd7JbQG3ShJ+hBX5NAGnoaPLx/N9pqXbQzAh60sS0KtNQKEdgjCcHB6pAA3FDl + QV2JmEaLHD/HhNIsA4rTdZdQlsZ1jwEFTi1yxP+bVoUU/ZttSkKaLhZuSQCODUUBc12aE5jcWCCdvD3d + GItsa7w0t3BxmloSgAvS5FJATCo5qZt8M4M8JT+D+8k3hc9RvDgHcP5FlOgJnYScQvWXArBtBYyWZdJ/ + JxZ7JGwXBWBXBPdHwuEJhzOV/CmLnDlfCMBaSQR2p9I/cS2VIFJAZ2dFo6AgAWWlClST5/lEim0hAHu1 + qCFvqygLlwTgqsqlCDbFoK+HPuyAFt1dajQ1ytivhQAcjvKi2FAUcHESy2RU8NrLCzVSxr98+k3Z9NuF + oJvFUkQCX0RWRmj+34x0kdWFz5U8Ld3zpQCc7eHxLq7TL3IZ6VdJAvBKZFrID+lHlfO8umwVfXQNWou0 + aM+Xo538t538uaNgJXp4/aNecnORtbExmn4hubo/ShKER1kO+3lPQgCuXInmsuUIVoajjcd3Niajp1WD + /g4jetvN6O2woKvNCi/7SHGBmIIkJABbTRHQ6yKgFXNdqsX/pnLYzGr6KyakOq306SySAGwX8/+atTAZ + NDDoVFArZZAnJ0AuT5BSPgvxV8wPbLUZL8Fs1ktisDQXsD4kBqtFRLBWQf9LLgm9ycokSQgWpYDYFhKA + ZZIIrDMo4HCakZuXjuKSHGTnpkr/ZYoU0EIAttu0SLHThyTEfMAiEjg/P43tMBVlZWlsA+nw1XvQ2pCO + rsZUjDQ5MNfM8bbdgr0dOhzt0uDabgXuHlTj0TEtvjllwLdnjHhsVIn7h2R4YFSOR2a0uDClwo39Ivo3 + DkeaE3A4IMfBGhmO1CXjmhYN7hky4LEZCx6f0uPBYTlu64zH9S0xON0Yh6OBeOyrjcG20ggsFCzD5qJl + 2Fu2Eldx21l/Im5oTJJwbSABZ2qjcaJiJQ4VLcH+gjAcKAzD4ZKlOFkVgavrYnGTPwnn/TLc7pXhzro4 + 3F1NVMbi3opYPFCTiEd9ckKB+6vjcV9VnCQEP8jlB2vi8EBtAh6oT5Cihh+o5zrPf6A2FvfXRhERPHYZ + z1nCuojKMC6H8bwleNy7Et9i2/tPIQA3xeNHDfH4aWM8ftyUiB+1JuGHHcn4fpcS32Wf+maHCk81y/BY + fQweqVqOp2tX4oc897edMjw3qMKrIzq8wWf9ak8i/tUZiVe6VuCN3pV4bzgSH47H4LPJBHw+KcP7g3F4 + szsWr7DPPl8XjefqEvA3nwo/KErAI9lxuDk1FkfoH60zrECXcgnKYsPgiQyDLTYc5kS24+REGOT0+dVJ + 0v/gci3bmTYRiZoEyNjOk5Ui4jzuEmSLkHO7EIDF/+cKVQL0tN0mmwZWJ9uYRwi+xkuwefSwkPMLEdiT + bUFGfgoyChxwpJskZBW44Wuqwqr1E7jq+F5s27MBvsZq1HjLMDTWje27N+LwkX04fuIA/amjuO326/DT + //4+Xnv9H/jwo7e+JgCHBN0PLgm7/zfxV+Di/ou4JAC//wbef08IwK9eEoBfevlv+Mfzf8ALf/olfvv9 + b+CZ267B6fVT2NsbwME+P04OB3FqpAk3bxzGt266Eq/+7j+B917CF7y2zz9+B599+g7wGX/no/fxIet/ + 561/4a23XsL7776MTz56DZ9//hY+/fQNfPT+y3jr9Wfxr3/+Di8+/2uWv8ab//oD3njpd/jrb3+An/7n + Q3jqwetw782HcNf1+/HY3Sfx42duwx9+/CD+53v34Jv3n8b5U1tweMcIDm4ZwLGdo7ju0Go8ePNefOOe + w3j4/B6c2j2C+aEKDAfcGPQ5MdhANIupJlIxOZiD1ZPFWD9Tis1zldi2qhrbpsuxZbwEC+SS64eKsH64 + APPDRVgzWITpvgKMd+VjiL5iH33A9mor/MUq1GTFwp8VieHyJGwKqHEV+/3NPRrc36/EM0MK/PeIEs+P + avEa2/jrowa8MaLFW1x+e0SDd8bUeHeU4DHvjyTjgxEZPhwTSMKHo0n4aDIZH0+JVM5qfDQjRGA9PpnT + SxG/Emb1+Izl518RgN8ZSpBSQQsBWEAsv0Ef8bWRWLxDP+7d2eSQALxei1emE/HH7svwu44w/HVwOV6e + i8eb63juJhU+32kA9lqBPVZpOSTuyvDWqkS8PScLCcAbdcBWPSCif7eo8N6CHG+sk+OVdax73oQX19vw + j3kH/r7Ggd9PWfHjAQ2+06nAEy1yPBRU4kKTFnc36HEnOd/dQTsukOM+OJiNO1he02zFsYAO+6tkuLwk + AQdKEnGmguMtedqdjW48MlCI/97VjX/esICw0hQaZ5LtmiwrKogct14SgNXKGMiSoiCTRUh/6IkID70h + AVarEo4ULdzSJN562EiE9DoR4h/Fc4TRi4HdIL5oUyOfhCk/VYtMhxxOUxxchmikkQBlkQAJCAFYiuKg + 016RryP5ssBXngJvmZ2gcRXzAC8KwF4SSm+5jssaHqNCoFKNQJUawVo1WurU6CBB6eZNd7MhdfuUkgDc + XB4SeJuLRQroeLSwvIg2rreXJqKNja+ZywESBG/OcvhzVyJYHCkJwN0c4Af8yRgJKjDZqsVshxbTbWpM + NXM9KMcEMdWUjEkxx++iADzTlERnKOn/LQD7jZit1ZEYqzBeJcd0QIXVbRqs7jZgTZ8ZqwdTMNRm4D3G + ojBtCdzGMD63MLgNXNYvh0cfzjIKHkMckYBUQzIhJ5SEAi59MklRElL0ibBp46VIPUm4NUbCbGBpJkmx + RMNmEZFFsVJKSbEsIn2F+CtKIfpehIgQ/roAHAMriaxI8/2/CcCZKVzn+xUif7otCmm2SLaLaJK4BOkr + x5JckuAikutFAVikeU53x0mi778LwPnZcmn+ECEAiwjg6lKDJAKXl2gkwbeUBLO0SMF1FddVKMhPIpJR + KP7EI+nMzlJLcyqazAmheYDlMUQ8kUjQqC1CLhepVULpVf43AdhKkmS1aPgMVbBIUMIm9hlZEnYSP5dV + t5gK2oE8kikR/eu26OAwqtknSMBZj0dEDBOpDhNyU+kY52WgrixPmv+3p6WeDuWiAFxfLAnAFyFEYG95 + pgR/ZRYCFVlo5HII6WggYWsQc90Uuzjgpkjz9waK7JcE4I6aTDqE2eiuybqETm5vLXWisdC6GAEsxF+R + ApoOSZoCFRlK1ObQaS00I1jmQAud+WAZjy+yEWaea0FHhY2w0MG0Y76vGAfXt+Da/WO47uAEjmzrwqbJ + KrTXWzg2RLLdXAa3nSSeDouTjoudbUQSUURpZTvlGJGyGMmTmRIjzevqz01Ga74MfUVxdDSXYTWJ1da6 + Fdjni8CRxkicborCdS3xuKNHgQfG9Hh8lR2PrLbigTVWXFhrxT2rzbhzlRHnp5Q41bkCRxpICr1huL5t + CZ6aC8evr1Dh9Zs8+OLRUuCJEuDhInxxbzE+ubUUL5/JwR+OZOFHB7Lw+PZsnGZ/3RM0YEuDTprDd0dP + CrZ2O7CJ2NLjwY6+DOzozcSWjlSsFymfpT/RTZiqM2GGy2uaUrDQbMfmZiN2BzXYRzJ4efVlOMB7Os3r + emzVCvz+NI3CBQ/eezoTn/4oA5/+jwuf/MmOT1+w4/PX7fjirRR88bYNeMMBvOQCnvMAf/Dgk5+k4v3v + 5OKdJ8vw2sNV+MsdFfjZTVX4z7PlePp4MR7ZX46b1pThAB3rtZUWDIvU3ZkqeDkOlNoSIaYH8GjD4WHf + l8DlVF0UMtnvxVxIYtqALDrAaRyHhIOboY9ErjWK9iQBTXROO+ncd3HcbitUoYGOqjctHrXuWNR44qTo + 3So6uxV02ipcXKej58vVcOw1ooVtKAQbmgtMCOTqpbmDq11J0vFVrnhUuxNQ60mSBGAv26UvXQE/j/Gz + n3vpAIp0klU5KlRwjCknKvI0XP5SAK7KN6MyjygwoipPj4psjiXZ3M+yJtcEX4GV/SQlJACzL9Rkso5U + Opes3896RHRye7mVfUaIwIuotaGvyoKeSjqIVSYJA9VmDNaYMFJnxEitHsO0VWJO2vF6Fcbq5FxPwqhP + RruhxNo2LXaMOHBoTQ5OLuTjGMvDs5m4ajoLh8bSceVoKvYPurCj04Bt7Rop8veKAT32dGtwRZ8Oh0cd + OLsqHzdsqMTpuRLs7vVgQ4uF7c6I1Wyfsw1azPj52145RmuTMF4nw7pmPXYPebBvPBO7Btlee13Y0pmC + +Va200YDRmhXe6oUCBaQrGVEwO8JR0tqNHoz4jCemYjVfK/rMpKwIT0BmzISsJnbthcosLtci+3lGmlu + 4HUlWszX8DoCDv6eG3NtJJWNfL98FoFqORr5LNpIZtp5ndK8aUGjtNzG328Piu16tDbSofer6Hgq0Nui + xWRvCtaMpGLNsAeruDzTYcYE72W8Uf0lGmhjBcgJRKq7KSEMt5qkFNATrH8koMUIf2OM6yJKwl+WhPL8 + aBSTC+TnRkvp0PJyElFQwP5Am1NZkYKqKgfKy2woKrTQOSYXotNks0XQRopxK4JOPW2kKRwmkxCBhVi5 + ks50FO1otAQh+l6E3R5zSQB2sS1/TQD2yMmvZEhxJMEuPoLhGGimnTaRRwkY2QdNlnjYyK0cqRqkZRmR + nmeBO8tAR2pRAE6hvbImIJl8QeD/JQB/FV+N/jWSGwrxV4jAJrsCRlsyjOzvQgDWkeOFROBQOmg1OaBC + Rc54KQV0BOKSwhGTuBJRCSEBOEJKAR2OBHUsZLpYKFiP0kS7a06C2poEjU0GrT1ZigTWuxXQOBKh5rNR + 81lpyR8MlkjecwSfm8gMkogsjwz5Htp4co1SMZc4UU/u4Xcp0ORiu+JyAxFwJEjwpcRLqLfFotYag2ra + l0qOV1XmSFQZI1DL9xbgbzTzXbbRBnVzfYjrUxyfNuQosKNUz7HZin11dlzhTcHeeju2VOkxX6zAXH4i + pujQjKZFYjQ1AhOZ0ZjKjsWsEHzJRdYWyLCGy3NZMZhLj8I0+5HAHI+dSxXlyhA8y0JIXY6ZjJWYzonA + FNviRF40RnIiMZgdiX5u70tfid7UZeh3L8N42gqsY5vdXByLrUWR2Jh1GRbSwrAx/TJsyozAltx4KcX0 + xpL/RQDOj8F4kQwTxeS0xFgJyzIFpqs5btTpMeelzfLqMValxUCpEr2FMkK+CGGPk9BTEof+0lgMkL+O + VyZgVb0C67wqCavqVJiokUkfvkw1Ct6rw8ZuI+2kAVt7jdjZZ8XeITd2D7qx0GnlOKVAS1kMagsjUJwb + Ls1Pl55FnpmlgCdLA0+mDh7yk9RUNdzSlCaJ5KwJcNjFBxYixXpIEBbw8B26ySU93JdOOyL+gBQC8L+L + vyXko6XFepSViFKLIr5b8YepKOtprzt7crBuQwsOH1uFG8/vxM237V3EHtx8615u24Mbb96N627ciauv + 244zV2/FidMbcfzUJgmnTm6RcPoUtx/fjMNXLeDQofU4fHgBRw7zuCM87ugmnDwuygVcdXANDh9ax/UN + OHdmM264egduvGYnbrp2J86zvOXaPbjlur24TeD6vbj1un0Szl+zl8fuwTVnd+Pc6Z04c3obTp/ZhlNn + dko4c3YXznL/9Tfuw7U37MHpc9tw4swWSfzdtXcC69Z3YmLSj872EgTq0lBVTH+swilFAfe3l6GnrQhB + H/llHTlgg5NjsgdD7W6Mtqdgqs2G1R12zLXaaEPsmPY7MOYjAm6Otx4MNrjQE7CjSzxPnxnt5ELNFXo0 + 8rn7yUG8uUb4smmDM40IZHFfjg2dxQ70lnrQWehAA/1Kv9uAYI4DzXnktpkp5BRG1HAc9Gdr0VZkQB/H + 69EKkzSv5L7uVFw/m48Lm4rx8NYcPLTgwoNrDXhgRoX7J+S4fywZF0YUuHdQhrsHyBt7Y3F7dwwRi5vb + o3Davxxn/OE435WER2ZM5JMmPLZajydWafHNeQN+sNGCX+1y489XpOP5KzPwp+0W/PesDP8xGInvDcbg + R2NJ+Dl/62czcvxkMhY/m43HHzbK8fweA/51pQX/3GfEn7Ym49fzsfjNulj8ebMCL+6x4l+XO/DKnhS8 + vMvGZSte3W/CO0cMeO+YFh+TEwp8eMYgzQH80RmrlOr5ovj7+TVuCWJdbJcE4MM6vHOU53NZ4N3Tdrx5 + zoMXz2TjD8fL8N9HfPjmVR146OAYbjswizNXzGPPno3YeWA3dh66HEMzkyivq0FGfj5SUlNhcbppL3KQ + X1qDpo4+TM4tYNO2KzC/sAtDo6sQbB34PwRPIYiGRNG2RYSE2UvwNxPBS/iagLu4z8/jBAKL+xpFyuXG + i2hFg1gnRPnl+aFzRYSwSK8cSpssBOAWCUL0DaENPtYjUM9zxLH1XpGOOZSiWRKcuR66li/rvohGEZm7 + iC8FYHHPQgTu4DP4OnzcL3BxXuCQ+Nu8KAA3ocHXjCZvCEEhkHubvg6/eC6hZyfEaSGM19c3o5bn1ngD + qK7zEjWorilDHRH0V6CvtRrT/fWSALxlUQDeOlzIMg+bBwXysak/Dwu9uZIQvK4rC2s7M7GmI4tjdiZW + tWZIqZ4ltHwJIf5eFIAnGoUA7CIvFlHAaWir9iBY6aaf6kQdOXVVmR3l9EVL8630660oybcQ5FXkJLns + 8xmpWnicSrhs4j8NjuuqaKTKo1BIjlGlS4LPkIwmczJtoB5rysmLOR6dHqzCiZ5i7KF93liowPq8BGyt + UOJguwtnJ4tx7ZpKnFlbgYPTBdg9niXNA7x6wIEp2p1JASEC99kwSowN2DEiMOzEyBAxwvsRIAcXAvDY + SBq3u9FP7tlN7tndZkJPu5njIvk/0cuxr3tRBL4UAdwoBGDTogCsR61fD6/fwDbF8cyr4zirRaCWy/QT + Gup1Epq8Ro6zHAP9Fqls8lrIl81SKVIfB/0CRjQHeIyPJY9vqddLaK3XSmiv06GDdXfUqNBZrUJXpeJL + VCnRXamkzxJCdwX5dTkhSqKvUrUIpYR+YfsrBTQYqtBgmOP2RQyWcTvt5kARS6KfGCzWYbjMgMkaG+Z8 + bqwOpGK1143pGru0fbBUi1H6iJM1VvrGLvrCmdjYkkN/OJvgO2rNlrCxLRsb6Keu68zFqu5czPbkYpxt + cqgjHQPtIQy1pWGA7W+oJYPIxGAwHb0NaehgG2ypFUhFR20G2mvT0VqXLq1fFIIb2T6FACzmp64rcdI/ + tNJvNEsi8EWUZ4rU0CYUeQzIdaiRZ1chxyqTUkGn6snh1SEBWKSATtPGhKAJwUO/OZX+dBY5fK49EUWp + SikKWAjAIkueiP51kYeK/8dEgEQh/Vfx31ghfee8fAVy6VMJ5BRqJOFXICtfiVSRAtoTTX6+gvx4GUw2 + 8fF8JCwp4QS5sjN8ESvgcIcjMzNBqq+0jPyG70sIwCnOyyQB2EXemZkRibzcWBSRy1WUq+Ble2zwCwFY + h1pyt6qKSJSXXkZfaCmaGqPR0y2T0kD3dKnYxrm/PAJlxStRViTmAY5l345HaUEiIWdfV0r/9V0UgAUP + E6JuhiTuJoaQyuW0JKSzFNPqpKeK/TKkE5li3l8BEQxgiYVTHwGHdvklATiXfkIROaD4UFtMAxUgZ2/K + SkRTZhSCmSvRnL0UHSUrMVQXjcmmePqD8Zem7xtfxHBDLPp8MeiojkBr5Uq01kaj05+Anhb2gXYt+jqN + 6O1gX+80o6Pdgnr68sUF8ZIA7EzhczeGQ68R02RFwqCm32ZQSkEhqS4rMjx2ado4Ef0r5gM2mdRfE4BV + hFIpglRU9PXoh6VY4HDy+EXY7KaQEMx9RqNWEom1Bp6rV0oC8EWR9+sQ20KQq/gbmiT6jmpJBE5LS5FS + Qov/M7U6uQSTUUEoeV0q+rIa3pOR92ZHvph2riQV1VUZ8NWzzzRmoLNJCMBOrGqxY2unLSQAd6txA9vD + /aPkRxN6fHvKiO9IAjC51lAytyvIoXS4b0rF4xJxvCUah/xRuKI6BntKonFVTRKua9XgwTELnpq14tEJ + Ne4bTCIPi8E1zdE4xfd2OJCAndVR2FC0Amvzl2KhcDl9s5U4UM393nhcHYjHNYE4nPPF4VRtFI5VhONg + yVJcUbgEB4qW4KrSZThRHYmz9XG4zpuIG+oTcb4uEbdWk/dVxuIO+hx3lcbgQlUCHqEP8qhPiQs1ibiv + Oh731yTg4TqZlBb6QZ73IM8X0b9CAL4g5gKuicQ91eG4p2o57mYfuas8DHeWhXBXRRjurQrj+cvxpD8S + 32Hb+0FTAn7YmIAfiTKYiO81J+K7bTJ8p0OJp9uVeLxFgYcbZHiY9T9SE4EnasLxH3xev2hPwl/6lPjn + sBYvDajwYncC/tEegX+2L8cr3cvx1qAQgSPw4UgMPh1PwvuDCXizKw6vtfI4n0gFnYS/edX4bnYU7ndF + 4Dorn5E5Auu19CuT2b+jwpAVvgSe2Ai4ZPFwKJJgZ9s0iwyYumRoaH9VhJJQG2T0/5Og0CRCzvYlV4m5 + p7+EQsXti8sqXSI0Jjn0NrZxhw5W95ewuLQwOZQs1XBmGOHJscCdbZG2C4go4LrGckysGsTWPesxNtOP + 7PxUZOZy3G6sxuBoF6ZmhjA1PYT59TM4eGg3Hn/yATz7/B/w4cdv4fPPheArxF+B0PL/TfT9Kv5XAfi9 + V/DW2y/jlTdewIv/+jteeOGPeP7Pv8BvfvAUnrntapzaMIG9fX4c6m/AqZFWnBxpxs0Lo/jWjYfw2u++ + B7z3T+CjV/HFx6/ji08E3sKnH7yJD955GW++/jzeeP05vPv2C/jogxfx2aev4pOP/4X33hbi72/w9z/9 + F/7COp7/8w/xrxd+hlde+Dn+8Mtn8L1v3IYLInvUiU04f3orHrntEH769M34808u4Hc/uAc/eOxq3H/9 + Llx7YAZnLx/HNfuncOuxtXj8lj341r2H8MhN23FiWzdWd+agr5rchra9vVxDH01JPqGXppuYGszCmvEC + bJoqxbaZcuwkdk8LVGLnVAV2TJdiO9e3TVdh02QF1oyWYW6wGDO9+Rhvy0Af/b/2CjX6yuVY69Vib7MB + J1q1uJXt/sGuZHyzJwn/PZCMvw8q8dKQCv8aUuPlQQVeGVDg1X45XhtMxuvc/+aADG8PJODd4SQiER+M + JEli8EfjIiJYLkXyfiDSOc+oJQgxWEAIw5/MaPAZx6JPOcaIc/5dABbRwK8PxeDV4Ri8PZmId+nTvb9W + iffXa/DqdAL+1H0Zftsehj/1XoaXpmLx5lo53t+owmc7jMAem4Qvthvx0UYN3lmXjLdWJX1dAN6iwxdb + Ndwvx1vrkvDqGhn+Na/Bv9Yb8c8NVjy/zo4/zprxyxE9/pPP5KmWRDwaTMbDzWo8SL55f6sVdzVbcBu5 + 5V3tDtzbm4bzHU6cbjTgkFeJvZWJ2FuegIPlMpyr1uDmegvubk7FI0NF+NGuTvzt2rUIq3ApUZ1ugDfP + gRoix6WHwyy/JAAnJoUjSR4BpToGOkMijZZcEoFTUrSw29UwcJtKGYVkMV8wjzNo43i+goZah4JMMwpY + d7pdBosmAhbVCqRZE5DjlEvISInnvljkeMQfrwbUlgrRN2URNgl1ZSYJ9SSJdeVaHkNSUqagI6EiYVOT + 6OrQRpLbQYLS5RcCsOYrAnAcWkrj0VKSgLaSRLSVJqG9VIb2Mhk6y5MlsttJEixE4KaiOATyohDIj0Sw + OJqNMwFdHPT7fXIaOSWm2Dhn2tSYaFZgrDEZYxyUxxplmGxIwmSjEIDjJQgBeKYpEas4mIs00FIK6GY5 + 1gVVWNeowxqSdTFX2hivfYxkfCqgxnSzBpOse7JDi9k+Cwb4gr0lEchzhZHcELowkkdCtxSphhXESqQb + I5FqjEKaMZogyTTFcT0ObgOJkS4OKfo42LSxsJF0mnWRsJqiJAHYZBSIgsUUQyMfBSMh5hR0kJS6nMlS + abeJeQdDEPP/CqHYoA2XBGAL67caaRBMCXzPLCUBmATXStJrT0CGEPddQgBOXhSA4xYFYF6nNYpEV3zl + SBKcJpOigEsKNChcTAGdnUYC6PmqABwlzQOclZoAMU+wmD9ECMBVxV8KwBV0ICpKNYRaEn8FhBBcmEcS + XSBDcZEKJTwvL1dD8qtmm6WxEvNbywXiJeKlVtGICYgv5pTJ/7sAbFaRjBlgIbEz6BXQ0vDptCRuhFEn + g0lCMp+3AikkW6kkUZkeG0mvXYr+FeKvneelkLg5BMkSEcOEi3XmkCSKOYBrSnLgrypEb5uIAK5Da6AC + wfoiOipfCsCSCFydLaGxJofrOWipzkVzlSiz0SxQmY6m8jTCjYZSJxqKUy4JwCJ6V6R8FvP+CnRWcp3H + tQkBuIjkNkcvRf2WpSkllKYmS6jMUKIuVwdfoZl12dAg5k4ttrKvWWkohPgbEoB76ORtGCjFVQttuOHQ + JG48PI3ju3qxeboarTVGZDtWwGkMg4eOS1oK37VDpG6Mht1Mh8UaCbtFRM7RsWKb8ZCg5NHJqU2LIJGP + Qk9OFMYLV2Cz9zJc2bwE57qjcNsgSRoH8EenFHh6Tov/2GjDz6/IwW+Ol+GXx0vxi1Pl+NmZcvzweDG+ + eSALj+5Iwa1TCTjTsRQHa8NwvD4MFwaW4Aeb4vH3Y2Z8eFc+vni4BHiwDLivAp/fXonXzxXhr8cK8PND + hXhmVyGuHnZiX4sJO5r02NuVgiuG03A5saPfje39qdg9kIXdg9nY0Z2BTS1uzDfY6QBbMFGtp9NroENs + w0KQBDpoohHU4kBDPPZXXYZDlWG4uiEMj0wsx++O6PHSbR689XAGPv1eFj77bw8++40Dn//NAbziBN5w + ESnAqyz/yfW/pwF/ysAnP0vHB9/LwwffqcD73w3gtWea8c+nu/HXx3vwh0d78Mu7+/H4oVZcO1uJXc1p + mC43oTtPC3+aChXsJwWmeOQYYpBnikUux5gsOlwCBZZ4VKdxLCZJK7Qk8ph47o9FniESpSLValYy+ipN + dKicGPPZuaxHa14yGjLjUe+ORK07CnXuaFQ5o1DFPl7likY9nb4Ax4FmOr2tpSYJbWxPbcUWNNE2BLLU + PIcOpjMeNS4hJIvoX9lXBGAl/BkqSQCuz1ajRkT9iujfPA3KctQoEyXbbHmeUUKFEIAJKSV0jg7FGcIZ + V6JQtPUMjjPZRngLhAgdEoBrWW9FqgI1bPsiIllEuoso4I5KIQLbJHRVkizxGXaWGVgaaV+M0nPorzJj + pMaM4Ro9hsQX9rVC/NVgtFaB0XrakkUBeL5Dj8snU3F8QyHObS3GGZan1uXj5Np8HJ/LwfHZbByZSMe+ + fos0368kAPfznF4tDg5ZcHwyDedWF+K6tRVcLsKubg/bnEitZsacT4+peg0m6uQYFahNxmiNHLO0l1u6 + Hdg5mIptvS5s63Zjc6cL61ptmGk0YYi2tatSjiCdeSEA17tWoIkOQ1dqNIbT4jCbHo81qfFY54nFQmqs + JADvKFBiT5kOO8q02FCoxOpCFVZXGrG63oq1zW6s6kzDYNBG261BoEYhCcCtAT3aGgxob+J7bwyJvwKd + zUZ0sG+1LQrALf5k9AQ1GO9mPxr2kFS6MN1tw1ibEcNNGgwFFBj2EwHeI5dHG5W01SEBeIJ1CJF4gnVO + BEOYardjqtOBATE3W1kiygqi6dBH0+Fle86NY5mMggLalFILKoQAXOlAWZkdRUVWKQLYZoskJxLpnoXo + S0j2lTAR3CbSQNusQrSMgp19QwLtoZ3jnI320CyEY3sMHfEvI4BDaaCVEHMBO8X89S4Z7I4kWGiLjZY4 + GGl3hfhrJJeypMhhc6vgytDTYQqlcBbirT4lCVohANOGJ9PGC+hSZJIALOb+Ffh3AdiZRdu0OPevkfZb + b+Pv2UQK/pAALOHfBWBdAtTkfCId9EUBOFH2pQAclbhCEoAj4pdJAnBU0spLArDcIMRpOoYcP5Qca1Qc + SzQiytipgMFNu+ogt0yJhYLPSUXnVMtnaqYtcJA/pNMO5bDf56XJUcDnU8yxoYJlrUsBL89tEGA9jYSY + E9jPurzkIwJ1tjhUW2JQYYlGmTkSZXxvZeRUFeRW9Vxu5G+18L11Glei37QSE+Qi67JEGmg1drFf762x + 4oDXiQMBF3bXmbFVpDkvUWJNbiIm02mXUiMwJUTejGjMZcdhdU48VhFzmbGYSY/EtId1OpdJmHYtJ0S5 + VCqnnJdJmHYvxVTqSkxmRWEiOxrjOTEYpt3rz4xCb2o4uj0r0OVcii77ZehLWYpxz1LMpC3DqtTLsMYd + hoW0y9gXV2ILz9+UHS/Nzb2hUIEN5M6zRQmhFNCLAnCrewl6M1ZiuCAWkyVyCWNFMowWk+MKEbhSjala + 8t96A8cQHUaE41YsR3d+IrryZItIQGd+HDryItFVEIn+0mhMVCVgHfvsAscYgXU+1lMvx4RPZM7RYG2X + AVsGrNg6ZMW2ITt2DLuwZywdm3qdGPer0VYUg6qMpShJX4a8TPHnJTlhRgLbejKhhos2yOXRwO1Rwyki + 5vn+HWzzKeShDr7vkAAcEoE9tBtutps0rn8pAKukDDFCAL4Y+SuibkTqxQqO4eWlehSTT4oI4IJC2h6O + 363t6Zieq8feK4Zx6tx6XH39ZgnX3bgV1964fRHbcN0N23HNddtw/NR6HKZzffjYBhw9sYCTxzfj+PFN + OEYcvmoDDl45jwP71+CKfauxfz+PO7geR7j92OENOHJoHlfun8XB/XM4engtTp3YgOvObsX157YRLLl8 + w9kdEm66ehduJs5fcznOX3s5br5mL4/Zg1PHtkqi8pEjrI84LC2HcIzXcvrMdpw8vRmHj87j0OE1uHzf + FDZt7sPUdCMGByrR3lIIf20qObeFnJQ+WYWLPDQTjXWpEhevLtbBW0lbWGei/2XCIMfuyWYz1nXYsYYO + 6lyDFTN+O8a8Vtq5FIyQEww3uTDU7MBgSwr6m+z01yzkorT5tJ3BEgtBPimycBSkoLXIic4SD21oOu1m + Nvor0tCSa0Mw24724nT6c5loLkxDIMcBX44FrcV29FeTd9S7Mcs+ujnoxuHhfNy5sQ5P7Qvg6b0V+MaO + XDy12Y2n1lvx1DoLvkE8tcaCJ+aMeHRGi4cm6WCPqwg17h1W4ubOeCIJ94wa8MicFY/OmfHoKj2eXK3H + tzcY8cNNVvxiWwp+v9uFfywKwD+ajMdTHcvwZOtyPN0Zju/2x+A/BqLxn4OR+K/xaPxqbRL+ul2Df1xu + xPN7dPj9xkT8al0Mfjcfh79v0+CVK1Lw6n4nXt/nwGt7HXj9QAreOGTFu0eNeP+4Hp+cMRB6fHjaSJCr + nrFJ8/1+es5xKfpX4KsCsIj6fe+4SZoPWOB97nv9mkw8dyYfvzhSiv84UI/HruzAnVeM4NyuCRzYNoct + W+ax7fJd2HP4ACbXrUGl14vMgkLYU9NgdrhhdqYjLbsYFXVN6B6YxIZNe7Bt55VYu34HegempahfMc/u + lwKwEEK/KgC3SuLll2j+GoTwexFfbue6X4i8rWhqbEOwqZ0QZZu0LrZfxEXh+GIppUoWIi7LkAAcgq+R + 64vCr7chKEFsDwnAF+fkbURormIhAP+7QL14reI3F3874G+7dK8XhW8R9fxV+HiMwMWo5ovRvyEBuBEN + XjHvcBM5UggBXou/XswNTHBdSktNhATgUHR0SAAWUcANUhromro61NZUoK62HEGRVaq5CpO9tdggIoBH + K7B5qEgSgLeyn2wdLghhqACbhQgsooG7sjHflck+nYm17ZlY3ZqxGPWbiumW1K8JwHNtoRTQE+zno34X + Br2p6K1LQ0edR0q/GyB/qi93oKbMhgr6mGUFZpSTX5eRi5cJMZicpIDcOytVQ79ZDpc5CQ5tPJzKKLgS + VyInOQIlylhUqePgI/9otZPf5Vix3ZeFY92lON1Xiv38XREBvD43Hptoyw7QvzozVoBrV1Xg2vXVODZX + jCumcrF9NAPrBhyY6bFgupfjFDHRa8M4MdHPMYsYH6QtIkZpmySMeIhUjA8TQx4MD7jQ32VDX7sZfR0W + 9LVZLwnAAl0tFonPNhMNRF1AiL+6EPxa1PvpZ/iMfHccR+u08NbqUF/N7TUaeAkf1wN1QhA2SmWA46y/ + ViybCNbpNUhoZB2NYs5WIlirRxMRrNFyWYeWag2hRWsVbSpteVu5Cu0ViyhXor0shDZyg7ZSOdr5zNpp + 99uLCS530tZ3ligIObpKVeiiTewp1aC3RIO+Ep2E3hItuovUtP0a8gA1OvO4nK+R0EOfbqjcgvEaJ6bq + 3Jjk+DxcyudVyPMK1Bgs0WO0gj6K142F5hxsbmM7bCVa+I7a8rC9ldtas7EgRQHnkjfkYlVPLnl/LibY + Nse6skLoyMJoO9fbczBOjPG84WA2egMZ6PTRVtSno6s+C13eLLR7M7meiaD4MKHajYYqZygNdEWqJALX + FpHrL4rA5TkEywq2s7IsqyQC57u1yHdokGsTcwHLkKqLk6LULwnAmmh41IQyUoJTHQ63JhIZphgpCrjA + LUdRKrmFmNuWHPeiAOyhP5EtZbzjfj7HvDwFsnOSkZWbjGwik+tZi8jIlcOdEU/+HwWjfTn0luUw2ciR + U+iT2MPJ3VfAImEZfYelsDmWI4M+uBCARVrpEr5DKQKYPNJB7ulwXYY0cs5scsb8vHgpClgIwI0BC8cY + PceQZFRXRqGyfJkkADcEyPW6ZOjrVaK7S4mWIDl42QqUFq2ASANdUhCFojyBWBTlJhDJKKaPn09fWhKA + nTKkkZun0bdJc4rsf3FIdcdLSHOTp0n4UvjN5vHp5O/p1li4RfSvZiUcmmWSAJxhiUAOn2EufasCeywq + eG41n6OXPqnXE44A+XEgPYyccgUGqsmpGxLIQZMgpu+baIrHZFOcVI4SAw3x6KqLRntNBDq8cehplKG/ + XYNB+tx9XXr0kLd2d9Ev7TChvu5LAdhhj4DVEA6dcjm0Svp/GnJR8f+fw4iM1BRkpTnIQS30+3SSwCr+ + OxQCsJgDWKuWQ6ORS2mdRZSvEHtdLju5bcolCBHYnmKWIoOFCHxJANaFBGClludzWSPSREvRwYpLwq8Q + g6VoYJGOV0X/jb9ttmjpz2nov8n4uzLpv03xH6b4P1Mr1nmukfUJETg7M4U+r2dRAM5AsDETHcE09i8n + 1rQ5sL0rBfs69TjRq8X5IT0eGjfiqUkjvk18a9qAh8mj7h2QkU8l44EpDe6cUOGa3jgcaYrAFTXLsa1o + GTZnL8fBygTc0K7FI5NWPL3KiofHlLirPx7Xt0biTFM0zrYrcLRZge01MVhXtBKrC5Zhnu90a1kE9lVH + 41h9DE57Y3DWF43TXD5RG4kjFeE4ULYclxddhiuKl+Jg+XIcq4nC6bpYnKsX8wTH44aaeNxYEYPzZVG4 + tTgSt7P93l0eh4fpqzziV+JCnQz31Sbi/noZt8nxkC8ZD/pleGBRAL6/Phb31kbj7uoI3Fm1AneUL8Ud + ZZfhttIw3FoSgli+ozwMF2qW4eH6cDwdiMV3GxPx/aYkfD9ItMjw3ZYkPNOSjG+0q/BYqxL3sO47q1k3 + 7+3+qgg8xjb5Ld7bT1pl+H2vCs8O6vBcnwLPkaP+vSUcz7UsxYsdl+H1vuV4e2Al3h2IwEcjCZIA/FZ3 + PN7olOGlJiECJ+NZnwbfzYrEBY4L15qX4RB94M3aCIwmr4Q/6jKURCxFXlwEspM5pikSOJ4lwmlIhk1E + 8Vroo1vkhBJGQkT2ao1sgzoZ22KSBMWiGCymTrwoAMtU9Pu1CVCbkqG3qmBMUcHkUEswprAejqfGFAX5 + pQ7OTCNS0o0w0MYLONJMqKgvxNBkN+bWjyPQUgO72wiHx4L84kxU1hbBGyDPqS9DW3sA8xtmcOvt1+GX + v/ovvPf+awA+XRRyL4rA//8E4E++IgC/K0UALwrAr/wdL/zjDyEB+PtP4Zlbz+LUhrGQADzQhNOj7Tgx + 0oKbF8bwnRsP4/Xfiwjg54CPXgQ++RfxCr746F/45L2X8f5bz+PNV/+C1175I95+4y/48L2/45OPXsCn + H/0D77zxB7zwtx/hD796Bv/zk0fw+188gWf/8G3840/fxa9/9BCeefgcbju3BScuH8e5gzO4cN12/Pjx + c/jzf92J33/vVvz4sTN44vwe3H50DjcdnJBwJ5cfp+/63XuuwKPXb8SxjUHM0E/rLOa4np+EQFYsqjMj + UFsQQ06hQn+zFVN9aZgfycXmsULsmirBFXMV2L+qBlesqsblqyuxb0019q2tx541ddg8W42N05WSGLx+ + pASzvbTT9P1myF22NBjJ0Qw4HdTgFtqQB5oT8M32ePy0JxF/6k3CC0MK/HNQjhcGuMz1f4iPHXrj8VJP + PF5l+UZfPN4eTMQ7bOPvDQkBOBkfjhJjyfhgXC6Juu9NsJwkphR4n/hgQoGPp5T4ZEr7NQH4fR4r5v79 + 8CsC8CvD0Xh7knWvYj1CABapmifj8Keuy/CbtjD8vjMM/xyLwuurZXh3PevcasAXu6wSPt8qBGAd3ptX + 4O01yXiHdXw4r8EXm/TAFj0+2ywiivk7qxLw8lwCXlqrwkvr9fjnBguem7fht1N6/HRAhW+3JeCxRo5H + tEWPtGrxWLcNj/W6caEzBbc1mXBbixW3d6TgOvrex3wqjoUJ2Fkei8srE3G4Wo5r63W4NWDDfe3peGy0 + GD/c1Y4/nptDWDWJdn22BQ3FHniLU2lkdbAbaRAU0ZDJopCQtFKK6BB/7ok//AwGGUzGZJjNSpjYidUk + PYpkkSY6JACbdQlw29XISTWigGSpgB3YY02EXr4MOtllSLcnIc+jQp5biQxHIg26mBdWdkkArv93Abjc + LKG+nOS5TIvqYgVqSETrSE4ClSSwJL6dhCQA+0QK6C8F4JbyeLSW0Ukg2kuT0VFGIluuQAfRWaFEFwlw + ZyWJb7kcLcWJaCyMJ+LQXJxAcixDZ1UieuvlGGpQQKSAnmxVsdHKMdwgw2ggScJEgARCkInGEGb4goQI + PEdisZoEY11zMtY0y7G6SYlVvLZZnxB+tBgR86hVqzDqVWI4oMBgYzIGWfcYjV9PQAZv4XLkOcKQZiQM + YcgyhSHHvITkcRmJDvfZVyA7ZQWyuJxhXY40ywp4jCtJjFbCqY+EwxAFmy4KdkM0LHoum6JgNYov1CIl + wdciIoi476IAbBNiL2GzhiKDBUTkrxCBhVgsvmq7KADbJPE3keA53JdiItG1kLTZE6Xo3yxXSODPTElc + FPmFAByDNCuPI0nLcAgBOBmFWaEvAoW4myfm/pAEYNazKACLuYBFRLDYLkRiIQBXFRtRWWQMpYCm41FJ + IhuCGhWLAnBJYTJJJ88pkKGEjqAQgAtyNcjJ0sLF69KSnCvZvoUArBHEaxFCDFb8mwCsVNCYEZIATAMm + iJLeoJTIk/iSTqNOgkoRC7VKRMHHQ0djp5eIUzJMejlSjKEo4HQSP4FUO40at9lIwOx6JZdVsJtUfIYq + KW20iBAuzk5FZWEm23weOoM16GiqQrOvhM5d4ZcCcM2/CcDVOWisypYE4NaaPLTV5dHByUd7bTYd7yw0 + V6aisczFfu5AY4nrkgDcToenhQ6PQFuFh31ECMA8poh9LkeL8jQFyuikCJR6ZCh2JaGEZVWGEjXZdFIL + DFL656ZiIZZZpfTPAu0VFnTX2LG+v+RLAfjIDE7s7ZcE4OYKHTKtdDx0YfAYlrKdRCOLDoCH7cRpolNi + YRsmUtle0q0rkWleihLbEvjdl6Enaykm8pZjofwynOxYjtuGV+Dh2Xh8Z70aP9yqw893GPDbvXb88XA6 + /nFjBV65J4AX723Ei/c34x8PNuOvXP7VzVX4r1N5eHSrHreNR+B0c0gAvq09DN+YCcevL1fjjevT8Old + BcC9pUQ1cHst3j5XjmePleCXV5bgmzuKcO2QA/uaTdjZpMcVPQ4cGsvEgXEh+goROA17BrKwZzAbe/qy + sb0jFQtBV0gArtJhssogpYXe2GTDzqAZ+9uNOEoDeNQbgZN1y3A+eBmemIjCr/cb8ey5FLx0mxMfPZOF + z36Yji9+mYov/uIB/km8IuAEXnIDLxB/ywD+mI2Pf56FD39UiI9+VIvPft6Bj34xhA9+OYu3fr4Gr/98 + Hi/+YAN+dOso7tvTjKOjhVhbb8FAkR5NaSpUiTn4LEkoZl8v5/hdaUvkeixKLTGoYr9uzDagNc/GZbYJ + YwwRzX0RdLji0FGkwJTfRmc9HWtanBivM6KLfbEpIxo+90p43REsSSacEahOWYkaRzjqPLFoyJahpUDF + 9mfgeM1xvcSCDrar1nwjmjJpp9zJPCcR9S7CncTfSqZzJ4dPCMBpXxGAs1SoFinm6USXiSwD2RwT2P9L + crUozTNIEH84CQFYoCxHj8IMOvOsK99D5zhdg8ocg5QOupn9oYntu45tvZK/UZMuZ/1qNNBeNRWaaFuE + CCyi3tnmy0zoLDXxmsX8Q0IENqGvwoj+SjPHejOGqnUYrBLp1WhHRDo1IQQLQcQfSoe6vtOAK6bScXKh + ENdsLcXVm4pxbqEIZ9cX4vTaPJxek4cTs1k4NOLA5f1m7BswYX+/HvsHDDg8moKTU5k4PVuAMzNluGqk + ADvZ3ra2uLC+UczNJeae1mCUZGC0VonRGiWvSYHJejU2tNmwrU+kXHVja5cHmzpdWNtiw1SDCQN1Gvbl + ZARpFwOZkZIA3OBcia7UKAzRuZ5Ji8cajtlrXDGYd0Vjc2YSduarsLdUj5201xuF+EvMcoyeZnufZnuf + anWhv8mKFq8GgVoFGuhEN9N2N/u1aPEbWOrR0qBDqxCAW/g8SQ7bmoQAzOO8MnQ1qDHUYcZUvxNTvXaM + d5kx2KJDf6MKvXTKRNYOYbNHG5QYC16MBtZiLKDGWCPLJi3GmwyYYJ+b63ZhpsuFPpJQb2kiygvFXKOx + KMhPCGWRKFCikPajhG2xrMyG8nI7l0MCcE42HWhzBJ3p5XTGV4ZgiJBgNEXCuCgKiyhgIRTbaAcl0A5a + ObZZxH4RNcwxzulJQFq6AqkZQgBejAJOpU2gLbW7FFKkr4V90mCJg4F218Q+KcRZi1MhCbYp6To4Mg1S + aSa3EmKvllxLfUkAjuZ6Ilw5RqQV2CQIEVgSf6X5fy0hAZjnW9wqGMT51gQY+Dsme0gANtNBM1nFHPhC + AOZ+fZIk/Ko0IgV0HJKV5IzJkeSMIfFXpH8W4q9AeMJySQCOIZdM1AgBmMfr4y9BbmQdvC8hABuc/B0P + nT4X+aWD+6xRUBojoDLyefFZOZzkFGnkGOyPuXxm+W4ZijzJKGf/rfGoOSaoECAaXEo0si4RBSzmBvZy + 3BKotcWjimNZuZXv2hyNYr6HEjq/pUSNKUKKAm7he+nku+3nvglHFNZlJmJjnhzbijTYzT69vy4FV/pd + uLzOip1s11vY1uc5xs1lxmA6LQqz6dGYy4jB6ux4CavoQM1w24wnHJOu5Zcw5VwqISQAL8WkEIAdl2HS + zWUhFGdGYzyLyI7DcFYM+lhHjycCHY4VaLctRRs5YYf5MvRZwzBiC8MEsca5RBJ/t+dEY1tuLDZmxWOe + 56/NTcR8STJmyHMvCsBBckwhAnemLkd/dhRG2O5HCxIxRIwUJmK4RIZx8uVx8bEix6yxWg2Gy0X0bzI6 + 88iTWXenhFi08fzW7JXoyA3HQEkU7VsiFtjvtjTqsYnlvPjYUcx/7qN9IJ9ezfFuYdCKjcN2bB5xYsuo + B1tG0qU07d1VMvolESjiveTxuWSnhiM9NQYeckEH+UeKaPOS8CsQ6ifiYwmRsUZ8tChKIQK7JcQjlXbD + 4xJ/MoosM0nklHJyTjE9iBCAQ9G/hUQo+tcgCcAC4k/SAiEAFySx72sQbHZjZLwMC1taceXhCZw8uxan + zq3DuWsXJCH4+pu346bb9uCWO/biplv24MQZIfyux7GTm3Di9GacObOd2IYzZ7fj1MmtOHpkIw4f2oBD + V87jqkPrcZzrp49vxekTW7i8gKNXrcXxw/M4d3oTrj23DTdduws3X3cRu3H+2j24+ZrdEkQ08O03HMCd + Nx3EXbdchdtvPoizJ3fg5PEtOHZsI39rA646vIBDB+dx5YG1/L15afuxY/z9Q2u4bQ57do9jYaEHU1MN + GOqvREdrEcfnNEn8reW4V0N4y530xTgW5pMfcqyvLaY95LMRAkMf7cUk7cZ8mxXrWixY1WDGjM9EO2ek + r2PBSAPHa9qk8XYXxmhnhlud6G+woafehs5qG302G1rLHYST9tSDnupMDNXlYrKxCDMt5ZgMFNKmZqCn + PIPbizDkLyPPLEBzEfltvp02l/X6MjDXnIOF1hzawGwcHyvBPVsa8Mz+Fnzr8lp8c3cxvr0jB9/Z6sF3 + N3vwH1tT8R+bU/GdBTe+vcGBZ+bteHqdHd9Yl4LHV9txYUyPe0aNeHDGjofnbIQJD0/TCZ/V4uk1Ovzn + egN+vGDCr7ZY8PwVqfjzdgt+OB6HR5uX4L66MDzgW4JHg8vwROtyfLsnHN8bjsQv5hLxx80qPLvLgL/t + UOP3C4n49Xox968ML+4x4c1DLrxxpRtv7ndKeOuQA28ftuGD41Z8dNKMT8+Y8YmI/D1NnAqlfw6lgE6R + RN8v4ZAEYDEH8HsnzFIp1qVtV7vx2vX5+MuZEvzwYCmevLwOF67oxI17RnDV5jFsXTeFdetWY8vu3dh7 + 1SGs3rQR9U3NyMgXAnA6bU8a9DYPbK5sZORVoL6hA1OzGyUBeNvOg1xeQGNTD+q9QuQUInAXGoQIHPiq + ACwgxF0hBP+7GCyEXyHihvDldq77hcgqBF8h/nZcQlNDu7RdgkjFzOOkehbLi3MIi1KKBl7ERQHYy/Ki + KBwSgJsWBWCRBroR/kV8KQCHxGkJYs7fr13v/w8BmHWEBOBm6fcC3kb6fV8iQEgCsLQcEn9DAnArS1FH + a0gA9jZLaaBr6v2oqfOirraGqJAE4O5gFTlTDeaHajn2lmHzkBB/LwrAF5cLsXkgDxv78rChOwfzXVmY + 78zEWhEFfEkA9nAc90gisMDF6N9p7pM+/qR9HPalor8+Dd11HrSLSMvKFCnLm/ivp6rIhAqistDCccQU + Qp6J/q8BOalqpNuS4TLEI0VFn1AeBWfCSmQkhiNfFokS8owqbm8wydDr0WJ9pRuH2otwuq8Mh4IZ2Fqi + wfqceGykTb7cZ8aJviycmyrBDfM1OLOmHAen8rFrJAPz/SmY7bZgtscqYbrHhiliui8FE9w3MeCUMD7k + Jji2DHswOuSRxF+B0QHeI/2+oU4rBjos6Oe419saEoD7CCkVdJB+QpMZQZZeIQKT19aS39Y06FEXIO+U + RGAd35sWtTUi1a5GQi1Rx3VvjQ6+Wj1LopbH1hrgpU/lEwJwvUFCI/l9Qx2XiQCPk0B/o1GA43JjFW1X + pRrBcjWaylQsQ2gu/RJNJQoEi+T0a5IlNOeT9xckSx/vttIGCohsTu300ToLNRK6CnXoLNCig7azNU+F + FtrTZvpbwUwlwfqIFq53FujRz3c+TP48wLKngD4h/bHOHBV6aEcGi02SMLzGn4H1Tdn0iXOwqTELW7i8 + VaSEJjY0Z2I9x/S17TlSdNJcVy6mWU51hTDJ5Yk22oqOPG4vwFRHISZa8zEUzKFvkI3uQBZ6AjnoDeRy + ORddXG6uSUWQ7bKpmn5eTZokAPvLRSpoJ6oL7KggR67ItV1CZbYNpRlmKQo436mVooCzzMlIFf97kteG + 0j8nIFUdLaWEdigiiHDYFcuRolyBVL0QgWOR65ShwB2a/zeDPoEkAJN3CgFY/AeWlZ6E3Gw5sujDZmbJ + kEHfOF0gR4Y0bkvNSoaHnNSRFgerKwoGmxCAV5CjR8HiiJYigXWWZfRJltJfWELevhRW+3KkZ8Qjh+8z + n++xgH66JzWSvGkFHISIBHa7liEjPUISgMvZTnx1JgQb/j/a/jtOjurqFoZHcXLsmc45d0/39PTknHPO + OY9mNMo554wiSgghIRAgcs4YkTE2YBvbGGMbZ+zHAZODEHF961TPSMLXz73Pfb/3/WP9TnVVdXWFc/Ze + u1ftfay0L+yzZQkoKQ5HSdEslBbPpL0hR26PR3eXAp0dCrQ0JaCsOAxiHuCi3HDkZnKspgQjKyUMWeSx + 2aky5PJ5Z6ZoyOcUSCYvl8TfKwRgUanFI17US4xFMvmaVCbaHYCoKuiz8R6baQ90IXCpZxMz4RECMLl6 + qkVUJ2NrDEM2Y6x8ewTKnGEoZ7xayWur9gahLYfctDQSc2pjaasSMNGSgPGmOCkjeKwhFnMaYzFYH4vu + mkh0VEWyn8Sgh9c12KnBYDf7cJee16tDJ9v2do7BSvH/Is9zMgPYzt82aUSyTCSs+gQkigqAiVak+tzw + ex1w2gwwGVXQa+TQa0XGrRZmQq9VQkuI8s5C3BVCrzvxfyIAB0pAC7FXbeBxTRoYRYawRcfnrr0kEKsI + SQRWMN6anJc1IPrKJUF4SgBWiyxNRRQRC4X4f1Qlg53HSvY5GAcLAdjPPuFHI8dmO+3sEPnwkjYXNnY5 + safHjGsGTLhl2IT7hnV4eFiLx4bVeHREjbt743GuJxa3DsTjznENbpmjxomeGOytFXP4TsMyfxCWJk6X + BOAbGRc8PJccbJEN9w8rcEtXFE40hOBwbQSu6zHiMLdvrJJhWUEEFuUEM6YJwdrCMGwvi8D+yghcTRyp + CseRilAcLAvF3uJg7CqcjW25M7A9byZ2s/8eLOc+FVE4XhmDExXRuK4sGqeKInAmPww35obi5pwwKRP4 + fsYqDwoBuFJOLpeAe6vluL9WjntrxHK8NP/v3VVRuLMiAneUh+O2khDcWjIbtxTOwE0F03E2fxpuzAvC + DYRobyqYhtuLZuKesmA8wvN8sjYOzzUm4PkmOZ5vUeKpFrlU5vVBLt9dn4BTBcE4mT0bN/A6b2Z7Fz8/ + ymt6qVGG13vUeKtPh992K/Db9li81RSC3zVMx9ut0/FO92x80BOMj3pD8NlQtCQAf9wdRyTgvdYEvNOg + wtu1WrzIGOt+50ycsczAEca8u6wxWMK+2xkzG5VhM1AYHYJ8eSSy2S9StYy7TTJ4bQo4HOI/CcKlgc2h + g4Uw20V/U0Cjl0tQ60RWetwlAViUiY5VRECmioJCxz5nTICWtlNnkUvQWviZMNjlsHo0cPoMsNPO6qwK + CaJEdG5RKlq6a9E10CQt2xMNjAfN8PodtItOZGQlSSgrz8PoeB+uve5q/ODlp/HRx+8A+HZSyP3fCMDf + fhf/SQD+6ovLAvCn0hzAUwLwH/CXv/4Kb7/1Gt74/uM4f/NxHF0+EhCABxpxbLQdR0dbcdPqOXjuzH68 + /6vngI9/B1z4E779/M/EX4HP/oIvP/4TPnnv13j3b7/AP//2M3z43hv4/NO38OXF3+Gbi3/Ex++9jj/8 + 6jx++sN78IOnz+JHz9+CN1+9B7/7+UP46Yu34om79+GGw4uwb0M3Dm/tw7nDCyVh9/WnTuBnTx7Dy/fv + xffObsCdhyZw055BnN09gNv2juCRk8vw/LlNeOTaxTiyogYL6+1oz4xFfTJtKP1CnmMa8jzTUZEVgaaS + BPpUA+Z3JmJlvx+bRjKxfTwXOyeKsGOiENvnFWDn4iLsWlqJHcTGxeXYsLgMW5ZUYtOiMqyZm4+lPclY + 2ezEliYbDjBWPNliwDmOgwcaY/B0czRebY/Gb/sT8PawEm8PxeNP/TL8oTsaf+yIxB86I/A22390R+Jd + 2pUPRRZwfxw+pX35fFgeEICJz0YT8Iko7zwUhw+H2f/HEvCpWEd8PkeBi2NqfDWmwoXJEtBi/4tzlRKE + cPzBcLSUAfzJXBk+X6zCp0u471IV3h3juXVOxy8nBeA/D4bg3QUyfLhEgQurdPhinQFfrjXiyzV6XFyp + w2fL1fhkqRKfL1PjixWi/LOBMOLrNRp8ujwB7y6Mxd8XxOJvixX42zI9/ms5Y0nGob8c0+OVfiWebo3B + w/XReKA+Hg+36vB4nwvnh5LxSL8Hd7ZacK7ZhJuazThercKekhhsLgjFxoJw7C6Lx+EqNW5gTH5box33 + dfrw6FgufrilFW+dmIegcp8OtZkOksFkVOf74OeAtuo5OOVTAnAIZGzF3G5qGgCdTgaDPh56QqsRk3uL + +VRDoFCE0WmEwWqQweOgg08y0ulbke7Vw2mks4mfDrVsGnx0+tnJOukP91R3Avx08hk+OQpJCKcE4IAI + /J8F4GIS06LseJTlyqUs4M46km2i85IArEVXtRrtJCvNhaLEc7yEtkIFIUd7kWiVaBdvQYq3Hwnx5mNz + Xjwac+PRlCtDi3gLskhAhk7ewN6qeAw3yDHSqMBQvRwDNTIM0XCP1MQxyImRME7SIHClALygSYbFJA8L + Gkg06hIwRicyWq7GEM+7n2S8v0SJnjI5uiplRCyvgWSDx2wvi0RVxnTkJQYh0x6ELCLPPQ1FSTNRlDwL + xSRVJamzUZg2CwX+Gcjy8r7aRLloEjjCZZwJpykYDkMoHMYI2E2RRDgcJE42CULgjYHFFC2VgBYCrxCA + xXqLmeuMURIs3MdqiZWWdapg6NUBAdghib9xPHYMbIZJAZj7JtlJ1FwKkjXlpAAsC4jAUhYwSZ01Cl57 + FJKdfOZJCmSnqJCdLkrCCAFYyT5DoisyocSbgGK+NkcEfCSEab545EwKwEUMOIpz9Awc2RdyuMxALwAV + SacShSS1eQz6cjJikZ0Rz2U58jLVkgCcTuIpSlwb9VHQKCOhIsHRahTQqkm+CLVSDpUyAUpF/KTwe1kA + VipJjCTIoCGR0pLAiVasUyREcZ8YaVlLMqXnerNeyXul4j3SwEUC5RXz/oq3+qx6aZ1Nr5JgFwIwYSPE + 24IiQzgr2YX8DC/K8lJRX56Dxqp81FdkobY847IAXJ6FutJ01BWnEn5ClIAmMePnFu7XXpWFzpocdFVl + or0iHS2lPjQWeSQBuDHfjdYSHzrK/OzjXog5fxu5vrnAjbYrBOCKVDX7XAIKvTIJ+YlxyOV4zXHGoMAj + 4zaOwzQxd5tREsOachnk5hrYGtFSYEJXqQ2Lu7KlEtCn9syRMoCPbOvDqvFiNBZoGDhNh1sIwLrpSGEA + lMYgIJkEP9EYArc5BB4SkmRLCNIYyGSZglBmDUKLKwjj6UHYUDwLhxuDcd/cCDy7PAqvrJfjzR0G/H6v + GX85aMU7R91493QqPrirEJ88XoePnmzCx0+34YNn2vHO91rxl4fr8dbtpXhxvxMProojaZ2B0y0kas1B + eJDLP9qQgL8fdeGzMyn49pZc4NYy4IZyfHy8BH/aW4CfbM3F4yvTcaLXhu31emxiML+r24n9oynYM0eI + vknY2OvF5j6/hC29qdjU5cPqZg8WVpoxUWpka8WKOgdW035taTRjf4cVJzq0uK45Dmcaw3FHawiemSfH + a+t0+MUOHX51tQ4f3OvBxaeT8O1P/MBbxJ+SAiLwX10B8fdtH/A7P775VSou/iwNF39SgG9er8O3vx3E + t39chG//vBZf/mkzvvzzdlx4ayd+d34lnj45iJPLirG0xox+BvVNDM7KOZZLLTKUEFVcbvIysPcp0cRx + 2+hhwJduxGCeE60cU6KkapklGNWuEHRlyTBWocWqNifvgR8bukTZLyP6cmLRmDQbDQLeEAk17mBUOGby + t2aiwhmMOgazzekJaM/VojPfiK5cE7rZD9sy2L987Ge0KVUMAqsZDFYnJhD0AYQkAPOcpwTgaiEA+znu + hd1gm+NXICuVAS/7c06ajiCR5PmLUtDFmVYUcDnbz2Deq0QWfyc/zYiSbCuqc12SANyYTV/E75UKAZi/ + JQnAGUIAZj/Ps3C8iGxlM5eF+BsQgDvyDejiGOgtNKCviPdKCMDFegzQ9g+WBATgOZVajFYqMFGjwKIm + NVZ2GLFjzIurl7JfrcrBtQIrs3HNsiwcXZyGo0uIhak4OO7BVUN27B6wYlefka0F+4ZdODTHT2Ti0EgO + 12dgY6sPa5u8WFbrkOaenlOio+9RYqRUjRExv5d4AalMJYm9a3u4b1cSVrd7sKLVhUWNImPLgG7u01pI + X8rnV58WiRpPKOrdfM7ecAz7YrAwWYal3jhJAF5KSAJwhho7+Pw2F+ixNleHJblqTOSoMZqvxkCJFn1V + etom2olKtSQA15TLUVuhIpRc5roKDRpqNGgWAnAr7yfJTWsj+yXvU1Ml/TkDsu4mvSQCj3aZMcxAvI/b + u2sV6KqJR19tAoabNBgTpaJb9Azwea/rtBiuVRFqDNfx+ut0GG0wksC6MM6+2iH+fMuJoX+JRn4ubVy2 + DDn0JTn0M7m0Z2LO39wcE3JyLcjOsSKL/SOVfUJPW6XWzoROHxyALlSCgf7WIARLE30mbZkQfIXwa7PS + 35pF5Y0Q8qjZ3C8UZq53uePgYR8WArAoa+tJEmVt6RPcDIboU0Wmr8lG3iUJwDIu8zMDMGuiCtYkLWxJ + OtjI5UTgZOI6HffXctyq6L8T6KPlxshLArCftl7gkgCcbpUQEIAN0jw8en5XbY6FjjBY4yUB2CIEYAZ/ + elM8dCb6QCOPrxdv+EZDRr4oECcEYPLFqNgQRMQEI1ya/3c2QmNnISIhkP0bp4n+7wVgXqMQgC28fiuh + T6QvJmdQmcgvjbyvvFcO+p8kr6gYokJ6spIcU04OpEAB9y/jvahK0qCGqPWwL7loE2g3qp0JqHLESyi3 + iRdaYlBojUYOOUmONQzZphDk8villgjUOqLR6ohBlyMKg7ZwjLsiJAF4ZZoMqzMSsIF9eXuxGTvKbdjG + cb2J43pdvgYryDuWpsViSSqD6NRYLCWWpXFscN2i1GgpA3i+N1TKAJ5H+ychcZaE+Z7ZbEUm8EzMZUA+ + znVjopS0LwKjyVGY44/FUEoMen3R6HRHoNUWghbzLDQbZ6CV6DRMQ78hCHMsQVjG42xKj8KWrDhszIyT + BOAlYq7hlCgsyorF3MyoSwJwvSMIDUSLcxp960y0J85GV1IIetN47ZkxGMqTYSSf44n8eZS2Y6hYgQHy + 465MGdrSotHii0KbhAg0+0LR4p+NzowQDOVHYUF5AtY1GrGBECLwsho15gsBuEqOOfVKzG3VYn4Xg8ge + Exb22bCoj3aq04GBWtrWvDgU+cW8bjPJC4IZJ4TBmxgFNzmI3S2DTbwUQTgSlYTIlJfDKQnA8XAQTgeX + JfE3XhKBvSLbJFFGBATglCsEYIHsDE0A5IqiDLQQf4tptwuEAJyZIL0MUpCvQl29Az39GZi/qAIbN3dh + 36FxHDo6H0euWYwTp1bi7LnNuPv+/bjvkUO47e6rcPL6jbj2OuLUJmke4DNntuPs2V249dZ9uPWWfbj2 + mk04fmQDjh9dj2uObcBJfr7h1A7ccHoHrj2+ESePr8eZ67bgjluuwl237ced5/ZJuOf2g7jvzsO477aD + uPvcftwu5v+96Srce+vVeOiu43jkvmvxwD3HcfbMbpy+bhuuPREoA33w4Crs3rkQ27dMsF2AvXuW4JDI + Dt63DHv4eduWcaxbM4AlC1sxd7QGPW35aKxMRmW+EG5cqC5ySwJwZYENpbSL5fR1lfTXtbTxTaIsOH3b + XPqNZU1mLG/kc60LZI0LfzdcYaDdNWNclBDr8kgYbXNhoEHMCe9Ed6UDrcU2tBQ5GQMlobs8BYO12Zjb + XIhlvZVYPVSP5WznNhZgrL4ACzuqsaS3CSMNJYzZklFHG9ZZ4MKc2hQs78wl7yrCjp48HBrOx9nF5Xhg + fTUe31iK85vy8NymLDy/IQUvrvfh+xuT8QMuf39dMl5cGxCDn1+ThGdX+3B+WRIenGfHPWMW3D1mxr0T + ZjywwIh7x9W4d0yBh8flOL9AiRcXafDjZVr8dqMdv9tgwasTMjzaOgN3lAbhjpIg3FVBXlk3A093heL7 + Q5F4bX4cfr1KhT9s0OF361T49ep4IgF/3aKXxN9PDybh4/1efLQ3kXBx2cV1Dlw84sCXx+z46rgVXx63 + 4ItjFlw8aiVsAUgC8HcxJQBf4H4i83dKAP7kWi/euT4Xbx4vwjM7C3Hv5krcur0H12wexdblo1g0dxQT + EwuwcsMWbLlqH5Zv2ITWngEkZ+TCluiH3ZMKvdULrckDo90Pf0Yx2jpHsXTFFmzcsh/LV21Da9swKqra + UFHZhpqaTtTVCXQE5gIWqP53Mfi7EGLxFL6zvoYt0VAnRN92NNZ3SGjgMev5WYIQXaf2n2wDYquYM5fL + tc2omkR1PdfVB8o+T5WFDgjAjbhyDuDaKdQ0S7hS8K0TwrQ41yt+LyAAB7KeAwLwd0tiC2FcoIr7ClTU + EjyugPi9alHmWcr+nRKAG1AjMoElCPG3WYJ0X8Q8wmwrK1sCAnC1EIDrUFZRw/tfgYryYtRXF6OjsQRD + 7WW0u0VYMZD3vxWAV/eKUtAZWNYpRODU7wjA8xo4hokpAVhgrC6R8JBvJUoC8Ei1BwOVHvSUuzmm3Wgq + dqCu0IbKPDPKxXRObEvJrYoZQxaTUxel65GXokWmRwk/uYCX/MKpJD8ip3DFhSCJSBUiMJErC0G5LgZt + TiUW5DmwqyUbR3uLcLAtA5vIu1fQ/67KiMPWUj32NrlwmDHYmcVlOLm4BPvGsrFlIBkreuy0IxYs7LJK + WNBtC6CXvoj+aG6/CxPE3EEPxgfdGBtIxJx+92X0ET0uDHfZyUctGGi1oK/FehnNdvS22tDRYkcb23qu + q2k2o7LRgArax4p6I/sZUaPjM9OitEyDEnLukkkRuKxUiwry9ssCML8nBOAqI2qEADwJURa6husFqnm9 + Eor5vSItaorIgQQKCfqwK1GXexk15Lt12eTjmYyriLp0OeoZjzWkJaAxTY6mdAWaM1WS0NuaqUEb0Zqp + Y8ymRVMaOXuKAvXkY3U+xmOeeJSRp5WRS1W44lDLdS2pOrSnG8gbdGhlDNbiVxNKtDFe687Qo5f9YLjA + irEiB+aXuLGw2IklbJeVuLC8woOl7EtL6n2MTYiWwHzUE61p5O+pGG8PtHOaudyajvkdOZhHzG3NZiyQ + gaGmdPTVp6G3PgO9tRnorstAR10aWqtS0FzhQ0uVH00V9CHFSbxPSagq8DAecKFYiMCZDvbLAErS7ChM + tiEvyYQslw4Zdg1SrOTtBhm87ItJulj49OQd5LkuRTjs5Ly2hNmwJsyATT5TygROIh9PJRdPd4r/x6KR + NCkAu4QA7IhAkjsayYyp/Mnx8DGGTWKb5OdYEEiJh4vrnElxcHijYU9kPOFkPGELhtEaApsrirwomjxd + VMyZCY1+Ottp5M0zYWWM7fPHwE8em5IejxS2SeRtQgR2M64TWcBuSQAOY7zD+L9ETztmRXODnbaLvl6U + gC4UAjDj9rJg2pww9uk4dHYwZm9PQGuzHI21jM3L41BaEIk88sDM5FnISA5GRhI5NjlsDuPwbI7vVMba + IlnkuwKweFEvAB95WjL7jZ/8P02Iv2zT2fotUVLVQ5H961LN5n2eiSQhABvD4DeEwqcjV+S2VB1/mzFW + Ee+JeMm8nNy2OmkGOvIiMFAWS44gw/wWBea3Mf5uicccIf5OCsDDRH9DNHrqiHpy7kkBeLiX8XsP+2mP + Fp1dWrS16XgP1CguYCxCji34qdMWCTfjCxfjJJdVzWszIcVrR1qSm9dnhdWkgUErh07NOEerYHzImM2s + D4jAOrX0eUoAdjgtcLlskhAsID6LzGAhAJvMOkkAFsKvitAZ1TBY+F2bAVZ+1+owSa3dZZFaPffXGtSS + 0CuSWYQILFox37BKJTKA5dDwfKb+z1QkcDuh5XnarhCAS0r8qKxIQSPHTntjCkZavFhKDreJNvDgsBOn + hm04N2TEHX1K3Nkpw50dsWxjca4jBjd0xuCmvnjcOqbFuXEdrutPwFU1wViXE4SF7iAsZgyyr0SGW3os + eGSBG+eXunDfiBpnO6JwtDYUB2sicWrAjsM9VmyuU2FFWQwW54djWUE41haHYWtFBPZWReAgcaiS+1cE + Yy/76e6SYOwomo2t+bOwtWAmdhYHY39FJA5XxeBYdQyOV0Xj2oponCyJxGke60xeGG7Oj8C5oijcU6XA + fdVK3E3cxeW7q+VsE3BHpQy3V8QSUbitPBznykJxrjQEN5eE4Bb+3k2Fs3Ajf+uG/Bk8XhCun8QNBdNx + U8EM3Fo0C3eXhOJhnsOTDXI81aTEU61qPN6qxP3sb7fWxeF0STgOpk/DAd80HE6ajuPEdT5yyuyZOF8T + jVc7VXi9W41fdMTjjdYYvNEQgjfrpuNPzTPwTmcIPugJwyd9EbgwGIPPB2S40JeAT7sV+LRTjQ/btPiv + ei1ezgjDw+7puNUxQ5oH+BRjoZ2MlydUYWiNmoEaxu61jO8radPyDFHIsEQjlTGVl+Mx0aOA22tg32Q/ + JZxuM0wiMcqskWAgVFqRfR4QgGXyKEkAjhPVZXnMBKEf6WRQ6QXYB2lD1SYZdNYEmN0a2jf25USdlCVs + dKglATgzz4ei8iwUlWUiNSsRiT4bYYXLa2EcaIIv2YHMLB9Ky3MxMNSBEycP4eVXn8PHH//rfyYAf/Nd + fCPm5L0CX3/1Gb66+AkufPI+Pvv4PXz2yXuQ5gC+UgD+zY/xxvcfxfmbj+Lo8qHLAvBYB66Z245b1o3j + +Rv34f03nwY+eBNff/QrfPHBG8Sv8PWHv8Hn7/4S7/71Ffz1dy/gb39+CR+9+xq++OwNfH3xl8CXv8Gn + 7/0Yb/38AbzwxAmcf+AgnnnoEF556iTefPkWvPb8aXzvrh246fAEDm1qw+HN7bh+Tz8euHYRnr9jE75/ + zxZ8/86N+N6Z5bhz/xBu2tGBs9vacOuuLjxybC6ev2E5HmN73apqrG1zoycrGg1JM2k/g5BnC0KuIwhF + yTNQQdveVBDDeM6IZR0urO1OwrpuH9b1+rmcjHX9fmwez8KW+QVEITYtLMamJaXYvrIK21dUYguX18/J + pN1IxlVdXhzvTsRZcrF7uvR4vF2O51pj8Wp7DP5MO/HXcS3+PCrHH9iHf9MViV93hOM37SH4Q1s4/tYZ + IQnAH/RG45PeOPb1BFyUBGCFBDE/8MdDMrzfF4P3iA+HZfiU6z4hPhuR48KoAhfnCAFYjo8H46T9L46r + pBLRIgv44zlx+GAkBp/Nk+OLJRpcWMx9iXdHo/Hb9un4ZUtAAP5jfzDemcd9F/M7yzT4dIUQdtW4wPbC + cg0+Z/v5Si2+Xm3AN2tMwAYBM75dp+N6Bd5fLMM/FsZ9RwD+81I73hgz4JV+FZ7m/XioPhr31wUE4O+R + hz47Jw1Pz0nFI72JuLvDiltajDhUEoOtoiR+1gxsKwzDQdqra+u0uLXJgnta7XiwKwlPjOXgx9ta8cfr + 5iOoItmAhhxBzGnYc710uhqYONhV8ggkJERAJguXBOC4+BAoVVHQSiUiOFjVQgyLglIZRoRKrcgGtnAQ + u20qOnAd0kmS/G41rLpIqGTToSEBSnYrkJdmJPQkBUopEzQnRY2SXAYEhXZUkvwFwCBBgkVCdZEoBa1F + UVa8BJEFXFuiQV+TE/2NdvRU69FF9NTq0V2jQUe5HC1F3xWARaZvWxFbqdyNEi35JKV5bPOEAJyAplw5 + W7FdlMdREAmEKAVNQkDCMFCXwDYefdUyDNbGYbhGiMAcBMRYXQATfEBz60guGuIwX4jAjQmYqJdhtCoW + A6Vx6C2KR3d+AjoLFOgU51QsQ0tpDFpKotBcGs7PoWgumI3q9CCUJwehJCkIZf4gVGfMREM+B11hMJ9V + KJroZBpKZ6OuaCYDqCBkeoOQbA+C1xKERHMQXGaSTXMIQbJkjZJEWpc1Gk5rDBFLpx4XAD9LoGEXYrDJ + SPJojLoEsylGEkx1qhAJAQFYZADHwm6IhkUXAbsxkr9JAjclALuUSCW5CwjA4g1HEjpbQAT2OWKkt/my + ktUkghpJlBFzgoj52NJ8/I5XBp87FokOEikx15+LDofrpwTgfDGXpyQEB1CYrZJQzOClKEeOwswEEs94 + 5GbEEjLkZoplJUSpv3T2MyEAW0xCpI2BRhk3KQCrJGhUkyKwQo5ASejAvBwCGiH8cn+xTsNtKgWdlUJs + E3MKx3J/jguSJb0mAUYSKSvJmYCDhM5FQifE30SbUVp2kOzZuU1AiL4CQgQWrceq5/2xcEy42M997POp + qC7JJNJRVZyKWiH6lmYEBGCuk4TfwkkBmG0jx3FLeTo6qrMZ5OShty4HnVWZaC1LlgTghjwXmgsTOT5S + 0F2Zho7SZLQw2GlkAN1cILIu3GjNt08KwLyvvPdFXo45osAbi3x3DPL4TPITY1DoiZEygUWmcH2mAY3Z + DEYztRIahQhWbMaC9nTsWtKAa3cNS1nAR7b1YtVYIZ2HBukMSpL0kwKwOQxpzlikiRcFSOY9xtnwmUnk + LTORY5mGEmsQmpxBGPYFYW3+NBxrCMM9w1H44Zp4/Gp7Av54lRZ/P2zCu9dY8NF1dnx+owcXb0vDZw/l + 4eJz1bj4UhMuvtyOz1/uwMcvteH951vwjydq8bPr/Xh2lxYPLY/A3aMzca4zCPeKMtArYvCnvVa8f8yD + L6/PBK4vwlfHC/H+gUL8dmsufrA6HffPT8LRdiO21qixqU4nCcD7RlKwa9iHLX0erO8SJXW9AXQmYX17 + ElY2urCgwoTFVTasbvJgXVMi1tZasLXRjMOdNpzpNuKmdgVuI6G7pz0Sz4wp8NJCBX6wXIZXN8Xir2es + +OhBF778fjK+/YUQgZOA37sJF/AHkf3rx7e/8ePLN1Lx+c8zcfH1UuA3bcBf5wL/XAP8azu+/ddVwLuH + 8M3fD+Ofr23Dj+6awJl1pVgi7GcGA313AqptMlQK8Zdo5JjuTdVjMNMooZcB3HCWiUG6C2MiAzYpmvvM + Qqc/BHMZJK5q1mP7gAv7x/3YOejBmmYj5hTQjqbORnsKwf1aiaakYNQnzkQtv1sjSgt7ItCcwv2yVOjN + M6A314S+bDM66S+avBrUOmnzST5rOIZreY5C/K0TIrAQfwWSVRCloqv9KpT45Mj2xCGDgXQGA+Z0v0IS + izL9GtoaLbJSdFKmQUGGGXnpDOb9OmQm0Sb5DcjPtKBYzJmd5+Z4cUsCcHWagfZYdakEdJ0QpYUAnGMh + TGjhuQq0crk11yAJwJ0FRvQU8jqKjAw6zRgo1qG/UI3BYiEA6zBWRVQqMY/BzJJmDVYJAXgkUZr39+iS + dBxfloFrCCH+Xr0gWcLRBX5cPZGEfQy29jAY2tVnxu4+G3b3u7Bv0Id9A+nY25+JbZ3pWN+SjFX1XvY1 + B8ZLxZyIQgAWlSd0EoZKxbIai5udWNuTgrVdfqxoTcSSRif9mJi7mH60SC75zdY8GZoyY9AghB5vOHp8 + URhLjcfyNAVW+uVY5o3BCtqDNf74gACcx3HB61/P+7AsV4cJ2ujBbDk6RVk5UXGjTIn6MgWqSxNQyT5T + ybaiJB7lxfxcqkBtpRrNDUIAthBmtDbSptQo0FiZgOZq+s4GLXpb9BjqNGGgjfe4UY32WnlAAK5XMDDV + YoJjc6LDhPFWPUYY7AzVqi6DHGG0Xi+VgB5utKKJ/r4kIwoFmVHIz42DmAMrJ1cpib+55CaZGQZkpOuR + zv6fnmlikGFBSiqDdkNAANbqgwPQhUowGIUAHEb/KTJ9xbz7UwKweLEqAgY9/al2FnT8vhCAhVjlZl9O + FMJvkgYuSfylH5Hm342HQZRGpr/WmmOg45iUBNlEcisP/UySEH61MHPZmMhgyT0pANuEAMzgiz5dCMBq + +nkhAKfQBwh42PeFAJyYbpUgliUBmJxNZ42H0ki/po+G1hTL3xPzASthtCmhNydI0Jl4fF0s5AzmYuLD + EEfOGEvOGJsQiajYUIRHByMsJgBR+jlaGY547i/TitLPMVIJaAn8HXGOKnIILc9bnL/Np4UzxQCzTwmt + i9dtjYSG99JgEaW0xZ8t8fD7JgXgJAWyklRS5n6JT4cKfreSqOb9qCEXqeI9rCSqeD/EyyxlvCeFNvoy + Swyy6G+yrOHIMIUim8cvtUfTtsjQmpiA3sQ4jNLXzfNEBgTgVCECx2FNegI25mqwOV+HzQU6rMtTYTV5 + x4r0eLZyrM5WSFiVJcdKrl9GPrKUXGRJugyL/BFYmBwutYv84VicHHYJC5MCcwHPTwzGhJe2NCkcYxxn + o8mxGOXvD/ll6E2KQwfPqcVCnmgMRrNhFlqJTsN09NGXjlmnY6UvFNuyZNiWw7FIriwJwMn8Xf7mgvRo + jLOfD6SEoNM7TRJ/68kbm4h6csdGBnmtrhnoSYnAQEY0hnJlGM6NlzKBh8lbB/Lj0c/lrowY2vAotPAc + 25IiiDA08/zb/bNps8MxTl67rEaFzRy/W1osWM+xvLxWjYXVKoxXKcid5RhqUKK/QYG+RvqXJlFWSofO + WnIJ8u7S9Chke0OR4Qwll4yQpofwOKPh4DixklOa6QcE7C65BBfHipN+ysn+E0AgG1gIwB5RZpD+IonP + VIjAPg95qo/+gL4iPZX9J4V+IU0jCcEZtGdCBBZzAEsCcN53BeCqGgvaOnwYHSvAilV12LG7H1cdGMG+ + q8dw5MRC3Hz7FjzyxFE88ey1uPfhQ7j5tl24+dwu3HRut4Tbbt2He+45jEceOYlHHr4OZ8/sxPXXbcOZ + U9slCOH3tlv2S7iBn8+e3iYJvo8+cAJPcP9HH7hWwpOPnsbTT9yIZx47gycePImH7j4q4bH7T+KpR87g + /KM34PGHT+PuOw7j1pv34ewNu3D61DYcPrQaO7fNw+aNo9i5dQJ7di7E4YOriNXYu2sxdnDd5nXDWL20 + C4vmNWOgowgt1amoEXPhF4u5Er2oFXN5FjlRzXitttCKOtr4hhw1/R+fY5EKE1V6LKs3YTmf+SIGn3Mr + VVIG+aB44Yjx2dwWGya63YQHc9qctL8ODDe40VfrZqzllDIFe2rSMFSXjbHmQizqrsS6sSZsXdCJTRNt + WN5Xi6U9NVgz2oF14z2YaKti3Eau7Kc/zrUzHvNjVXcBtg+VY2dvIa7qzcbx4VycW1SAe5fn49HV2Xh6 + fSaeW5+K59f78IIQgSXx14fnV3vw3GoG16u9eHplEh6e78Qdw0ac7VHh+s543D6qxf0LTLhnXIO7RuJx + 73AcHh2T4Zm5CfghedovVurx2/UW/GKZFs8NROG+6hm4q4yomI4HamfhuZ5o/HBUhp8tTMBvVqnx+/Va + /G69Cr9dp8Qf1mvwr912XLg6WcJnB5Pw6f5EfLzfiU8PuHDhkAtfSAKwg1zUji+PWvGFKOd8xHoJQtgV + WcBfTEIsi3UXuO0LUSb62GUB+OMTPvzXqQL89FgZnthVgts31+Ds9kEc2jSOtUvHMGdkGCOj87F09RZs + 2LkXa7bswtD4YqTnlMKWmAq3L5t+wQ+F1okEjYO+wY/isiYMjS7B6nW7sHbDVRgYXoy6xl5UVLWjqqpD + Kgl9JaaEUUnAJKY+/3eY2m8K9ULwldAxianP/15qOoCpjNtABi6X6wJz/9bUB5Yvi7+BUsxTwu9lAXgq + CzmAKwVg6TN/s4a/E4BYJ0Tuy/hfBGCuuxKVPKcAAtnK1aLkdVUTLpWAruTnSxDn893rqxIiMCEEYDEP + cHllPVGLyspKVFaUoK66GG0NxehvKcVYRz6W9+dizXAO1n9HABZloCcF4L5MKQt4eXeahKUdqVjc6pcE + 4Ll1bow3JGJuo0fCGMewEH0F5tROCcCJGKh0oa/cJY1t8YJHY6EFNXlmVOWbCMaZOUaUZepRkqZDYQr9 + uDStQwLSrLHw6+OQpI6CJyEcHnIMXzz9gSwM6TIhAs9CsSYSzbT3E+To2xozJQH46s4s7ChjfEV/vJY+ + dxt5765qGw62JeHMvGKcXliKg0IA7vNhVaed12TBki6rhMXd9gD6nFhELOh3E4mYzzhmHpfncnm8z42x + 3ssYF1MWdNGGtVsx1GbBQIv1EgZbhDDsRE87r59tC/lmA31iTTOvvYnXXm9EeZ0RFXV6qSR0SbmGY4jx + C7l3GVFKnl5eogtk/U4iIACbUFNpQh1jSYGAAGxEdZmB/FmPKoFiLSoKNagsUEmoECBXqcgVU4xpAhDL + k6gkR68iqjOUEmrSlahNY4yVKkcD/WRjmopQozFdg6YM7SXht57xUK14+Va8iOthfJSoQKlThnxTJPLI + gwst0Sjj5xpuqye/FWhM1qHBq0ZDEo/rVaItWYNWooOcuieNvD7LjFFy7bmZZswn315YYMPCYjsWsA9N + VLkwr9aD8Tr2uXr64oYkjDYG2uE60foxrzWLfiEL401Z9C3pGGpMJ9cQInAmukX2b1062utSGTOko0WU + hKa/aa5IRX2JEIGTAyJwvgelOS4UZTqvEICdKE5xso9akO02IN2hRapNjSSjHF721WQj+YUQgDVRcCrC + A+Jv/CxJABYQmcAeXQSSyT1T7bFSUoSU/UsO6hJTXTkipf+8fIxdvV4ZPEnkMD62yfFIZGzlJhxcZ/fG + wuYRYm9AADbZA6Wfnfyeg7xVrNObZ0NjnCEJwSZ7MNeHw8f4Opk8VkBaJofzJUfCSw7nId/yEelpMShi + nFpZYUZjnQMt9M91NQaUlcpQUhiB0uJQVFeGob4uEi0tMVIWcHtbvCQAd7Zo0Mx4trI4BoXZYYy3ZzH+ + nk2EI4ccNke8hJ2iRZp4wYO87bsCsEj+CMBPDu4nb5vK/E0nd8uYtAk+I89VG4JE1Wx4NbN4v0OQbKBt + YOvTBCOZ6/1EKrflGmejmNdeSU5d5w9Gd0EMBstlGKtLwPxmJea3ka+0JEji72h9DPsK0RSLgaYY9pUY + 9PBzb1M8BjvVkgA82KtDX68aHV1KtLawP5PfVJZpkUOuL7K2RZUZP/t1skfPGMUAf6IFqUkOtg4+YyNM + OgUMGsY4WjnMYq5fkw42i0GCyaiBWYjBFr0k9Ir5fu32gBA8Jf6KdVPir8gWlrJ/9aIMr8jCNEmCr13M + F+xkLJdoR5I/EV7CxnUWft9k1kjln0XWbyDzl3GiVimJvwEBWCS8CBE4IACLLGVRsjrF75QE4KKiZJSX + pdCPcPw0pGC0JQlL2920pYk4OubF9SN23DSgxy1d8bipMQI3NoThxsZwXN8SjVNtMTjTm4BzYwacmzDh + +mE1dteEYFVGEBa6xIur03CwnBxrwIHHliThKfKvh+aZcDO/c6wxCgcb4nBNnw0HumzYxPh/RWU8lrCf + LS+OwrqySGytjMSemgjsF6gMwd7y2dhVMhs7SoLpA2YzVpuNLYWzsL0kFHsro3CoJg5H6mJxvCYG11bH + 4GR5FE4XR+IM+/jZoijcwmPfXpGAOyvluKNagdurEnAbf/NcWSxuKo3G2RLuV8rr4/FvKJ5NzMKNxcGB + z0WzcH3hTGIGThUE4TRxXV4QTuVPx+ncabghbzpuyp9FbhiJh2tkeLRJicda1HigSYFba+NwHY97IGs6 + diUHYVdiEPa6g3CQ9+hqxmln/EF4oDRUKhf9w7YEvNoaix83ReIntcF4vXo6/tg0C+90huODnkhJ/L04 + JMMXg3J8OajCBfbdi+zHH3fo8I8GDX6eH4mnkmfgwaSZuD8rDveXmnGStn2jNQbjymD0ykPRZ0pAp50x + tKiWZQ1DhisKyd5o2owE2icD7YZ4QcHKGMzC/qmHhf1FwEyITGAhAIvs37grBGCRBSyg0MRwewyU2lgJ + KiNjfUsCzCKz2BMQgMX8v6K1ew1ITnfCl2qHN9nKfm1FYpJVygC2uQxSFnKiR7yg7yffLMDQSBeuP3MM + P/35D/HJp+/iW3yJqbl/LyOQ2XsJ33zxXXzFdVfg6y8v4MuLn+Lzjz/AZx8FsoA/+vhf+NcHf5UE4Lf/ + 8ib+LATgFx/FkzcfweFlAQF432ADjs/twMkFXbht01w8f3Yv3n/jSXzzzs/w+T9/jI/++kPiZXz6X6/i + g7d/gLd//T289fMH8fZbT+Kjd36ILz99DV9/9hrwxev47N2X8OaPb8UT9+zCQ7dtwkO3bsDT9+3ET545 + hh8/dRTfu2MTzh2Zg2NbmnF4Qz2u2dyAm6/qxkMn5+Kpm5fiuVuW4Ynr5uKOPR04u6UBZzfV4tZtjXj0 + 6gE8x32+d/UQblpTw9gpCXNoL9vYP2rYB4vY93JsQcjncnHSdNSkBWOgTIHFjWYsb7JiUY0RC+kn5lXp + sLDBRN6YhLUjqVgzko61czKxZiIHm5cUYcuyUmxeXIyN49lSdcwD/X6cHPTh3LAHDw858PSAAS/1KvBa + XwL+stCMv8434E9jjJEGZPhFZwRebwvBG63B+A3b/+Ln94QAzLjqk95YXBhIYH+/LAB/OiyEXRne7Y3G + uxwPH/TH4ZOh+O/gM+4nhGAhDIv9hSB8cUKFL+epcWFCjk/G43FhvhJfLNbiwgIlPl2gwDvDUfhN63T8 + sikIb7ZPCcAyfLBYiY+WqgkVl/nbSxT4ZIlSEoC/WKXHt2tNwDqzJP5ivUkSgL9crcbHyxV4d2kC/snv + CgH4r8vM+ONiC15nvPlD3ovzzTGMHyNxL23FQ0IA7nfh+bE0vDQvC8/PScUTA6IctBlXF4RjS2oQNqcF + YXdRKK6pV+LGJgPuabXi4Xba1S4vniH3/cXOVvz9zAIEVaWY0JibKGUAl2W54XOoYRRvZSijkaCIRLwQ + gaVM4GDIlRF0GHHQcEArFSLrUSACKlW4JABrOJjFd23GeJIZJZI5cL12OidVGFTxM2FQhyLFo5b+YM/P + MklzQQhCIMo/i5JiVcVOVJe4pHZKAK4qtkqoLbGgPJ/kOEculYGuLFShgUR4qM2DYamMmAk9ItOsznBJ + AJbE1ckS0C35CRK+I/4SzTzWlWjJV3G7OrCf+KM6PxqtdAbdFbHo583vrY6TMFATi6Hq2EsC8JzaaAnj + NN4CUjnoBjHHhIzrSSjKotFVFI223Gi0ZMWiKVuGptx41OfHoLYgCvUFYWjgA2umg2rOn8FnEoTG7CA0 + 5UznecxEV3kY+mojMEiHOtAcSgQziJuNHhr75qppJPYcmHzo6Z4g+DhQE61BcFtmsw2H20YyaiHJtMXw + uYi30+Jgt5JECtgCc/2Kks8mEiujIfI7ECKwgYRVS2cgYOKy1Rgtib82fRTM2jDYDBGXBOBkR4IESfjl + 7wj4BGmbFIBF9m8qyVy2X4PcVN0l8VcgPVlk9cRLArAQf108d0GIhSicmaqQykXnpatRkKlBYZaWEMsK + CYXZchRkJaAgIx75DPryMuMk5GTIkJOukOZ5E3/4eRic2K0JUj8Vmbqi9POUADwlAgtIwvAVEEQoACXv + hwo6sU4j9hPZwAnSNgPJnWky89dOkiYgBF+31SCJv6IVn51cPwVR9nkK0nzAJg28dKLpXjEfkhdl+Sko + L0gl/BKqi1JRU5wmZQL/7wRgkf3bU59PEpuLruostJVzW5FHymhsLUlCd1UaemsYDDHoEfMAtxS6JbQX + udj3bZK4Vclgr9SvkMQ0gWIS3CIGHkL4nYJYL8rj1mfo0chxXMNAsSqNxDhLg7YCIwOxNOxcXI8TO4Zw + es8Yjm7pwZo5hRybeuQ4Q5BinIYk/QwGTiFIs0cjw0ECTaLhNczmupnIME9HAftyPcnPIInPmoLpJG4k + Tn3ReGGxDL/dqcY/DmnwwXETPjppxqdnzLh4kx3f3u4B7k/DV+fz8e0rNfj2tSZ8+3o7vnmjC1/8vAMX + ftKKj16qxx/uzcZPTzjwwg4lzq+KxgOjM3FvbxCemgjFLzfSGF9lwadH/fjqaA4+vSoLf9uaiTdWp+Hp + hV7cPuzAwUYNNlcpLwnAVw0lY0e/F5u63Vjb4cTqNjdWtbrpIJ1YWmfH/Ao6SAbpKxrc2NyVii3tyVhf + b8O2ehOOtVml8jfn2uS4k4HVvS2ReLwnCk8NxeDpsQi8sDQcvzuswz/PWfHpY2589YNE4HVe5xsO4JcO + fPumC9+86cOXryfjws/S8NlPc3DxzWp88/te4B+Lgfc2AR/tJa4mjgPvn8D7v96Nnz40H2c3l9CBa9DJ + oLBBBOu0DVUmGeosMrS5lRhM1WM8x4y5uRaMZRiwIN+KNdWJWFllxZwc2reM2RjLD8FK2rxtvVocmOvC + 0YVJ2D/qwpZOE5aQOI/ROQ1kBaMvIwS9GaHoTg9Bh8hESw5Bmz+cRCMKbamx6MqQoz+PwVaeiftb0J1q + RIuH9t6ZIEGUdK13B8Tfeo8CtV4iSYm6SQG4KllJgpKALNqRNHcM7Qf7lC8efqlsrEpCuk+NjGQtsnhd + AmJZrMtKMSI33YyCbCv9oR3VmXbUZVhRnWZEhV8tYUoArqcPa86eRI5BQkt2AKIUdEAADpSB7i81ob9I + iz6RBVukxkgp72eFFnOrVFhQr8bSFh1Wd5iwbdCJPWNJODjfjyOLUiQcnOfDvvFE7B9LxJEJH66eGxCA + d/dbsaPbQtgIB3b1eLG7J5X9MB1b2ki6mpKxrNaDBeUOzCkyYbBAw98W0w8YJAwV6zBUosXiJjfW9XL/ + njQsa/ZgPvvpSKUR3aJChvCZ4sUp4T+z6LNEqVc+p/4UGeZlKrE6W4s16SqsTJZhVVIc1qYkSALw9lw9 + tuUbsYH3YDmX52Yp0U/7LARg4Yfri+JRQ1TSR1eUyFBeHIfSQhlK6KvLub66XCUJwJ2tNnS2WdDaSPtS + xz5QLZfmAu5s1KG/3YzBLgv62/T0g2q01SSgS7yk1ajEkBCAO83S/G5z23i9DBiF8DtYw74sUK3GKLnC + aKOV/tyA2lzatrRI+hcxB3CMNH1AdrZKEoCz+ZzT6KtS2Ef8KXqkphkII5L9QgAOg1o76wrxN1yCEICN + JlHqOSD62u2RcDii4LCLF67oUycFYPE906SoKUrYCuFXwMb+bXHGw2gLlGJWm6InEcsASQaTk37Go7kE + cyJ5m1slZc8KCPFXlFMWArDCFCOVgVaao+Hw6+HPdUgQYrDI+r1SABZz74hja8xxkNO/y9XhUOmjoedv + Gm1izh/6vSsEYKWW+6mjEZsQDhn5okwRLSE6LgwRMSEB8Tc2RCr9LM39qxUZvzwnBnpTUJpll8o/650K + 6VrsyTrp/GzkCSYPf5f3R8d7qTeLUtrRSHTL4PMpkSoEYEK8UJaTTF7AZ1SSpEVZkpgzXIVKhxzl9gSU + 8X6U8xoEinkP83gvckzijeYopJvDkWYKQ6Y5FMX8HWFXWmlP+mhD5nhjMN8biWW0i5IAPIk1GQlYR96x + NkuBFeQbS/3RWM7163JU2ECeup5Ym6vCqmwFVrLfr8pVSlhBTrIsPWYSUfxutITlaVFYlhqJJf4wLPaF + Y4EvTCoZPZ5Mbpkcj1F/PIaS2bc98eggh2rmOTcZyBcNwWgzhKBTPxN9+mmYa5+F1f5IbMuO5xjkWGQ/ + XkObKo4phOeF/K15mdEYTgtDj2+mVFGjSWQAkzM2C/HXMV2aX7gvhVwzg/vlyCRIQnBePAbyZOjPiUMn + z7c1OQKt3rAAkkKI2ehMDcZwQTQWVSqwhmN0ezt9G/3axkYGhPU6LKnVYl4N7V+NQsrUb66IJpeJJO+P + QE1JDCoZcOanRyLDE0wOORsp9rBAlgyfi5vcwO6Ig8XO/k9+KWCjPxBwss9KsCskOMhFBQICcAJ8fKYS + eP+SvQlSv5HgJ+ckhAgcgFziivm5WikLWAjA2VlyyR4UMi6ooF1sbHahfzATCxeXYcPmVmzZ2YntV/Vg + 76Fh3HhuHR5+/BC+9+y1eOCxw7jjnqtwx937iAPEQdxzzxE89NAJfO/JM/je927AHbcexC1n9+CmG3bj + xut3Su1dt18t4WYu33p2N+69g8d7JCD4PvX4GeJGvPD0LfjB83fgh8/ehuefvAnnuf3Jh0/hqUdvwDOP + 3Yjzj92Axx86hfvuPoY7bzuEczfvxdkzu3Dk0OqAyLthVGr371kilZsWOLBnKXZtnYcta4axZkkXFk80 + Y7izWPpzvK4oEQ0l3u8IwDUFDtQJriiqvmTT/uYo0M+4bH6lHivqjFhRr8dicoq5FUrMKVFgoDgew7S7 + Yu71iU475na5MNpKX9PoJNwYqvMwxkpCf10aRprzMN5WjAWd5Vg+UIdN89uxc1kfdiztxbqxVqwZbcWm + Bf1YN7eX9r0KjTlelNB21TO2HKz0YXlHPrYMlGFrVx62tqZgP7nWmbk5uG1BBu5bkoZHV/jx5Cofnlrl + wdPEMyvceHq5C+eX2fDEUiseX2rHI4scuLlPhWtbY3F1bSh552zc1C/HvfNNuG9Cj7tHE3DfiAyPjsbi + /Jw4fH+eDD9lAP+bNUb8dr0VP12gxfdao/AQ47YH+P2HG8Pw/YEEvDqmxM8XqfCb1TqIDOA/btJK+Mtm + A97f48Tnh4UAnIQLB7347IBHEn8/O+iUBOCLh50ShBB88bBdwoWrLZdwpcArMCUAT5WHvnLbx9em4I8n + i/DKsSo8clU1zm1rxukdc7B343wsXzIXQyOjGBpdgIXLNmHNlquwcedBabmovBlObxYSk/PopzLoH9yI + V9noC5xITi1EfVMf5i1cizXr92DB4g3o6ZuH2voelIss4Nr/dwXgf9/+nwTg6qkMWbH8HQGYqOfyJKYE + 4Kk5eP+fCMBTvzeF/38FYHHc+poWNFY3SagTv3kFpq5rCt8RgAmRvSyVsK6qQnVlKWqritBaV4zepmLM + aS/g2CrA+tF8bBzJxfrhLCIHa2nbBK4UgFf0pEsQmcBTAvB4rQtj9e5LEGWfpzJ/pzBS7eJ4dKK/woHu + MgfaS61oLjbTbphQk28ItOTNFRn0237aXdrmXHccsmjns8h7Mskx0vUy+JVRSJZHIkUejnR5BDLkYchK + CEGxOgLN9O9zGSdsod043FuIw6LqVLUbG8jfNtB27yw2YF+tA4cZa10/pwDXzy/BkbFcbO/1MUazY1WH + DSu77FjRbccyxnASet0SlvR5sJhY2E8e3efGPLYTvYmY2+OWMN7tkuzYeKeT99OGUfq6oVYLYQugxYHB + Nid621zoYttKe9fYYkFtkxCAGWM3mFDWYJRQwhiyqFKLwgoNShgbSCjToaxUJ4m+ApX0PwJCABaorTJL + 4u+UACwJxJMCcEWRBuWFapTnqyahQVkeP+doUZmnkyAtT6KCMXslUUX+LlCdrpbi+Vr6xfpU9RXQoiFN + h0Zy4nrGQ9WMmyq9SgmCc5W65NK0QTmGSCICBZYYFNMXVzKOrPHymOJlXnK0K6fpaPKo0cz1beRvHeTV + feTYgzz+nBQDxhmfzc0kGFeN5RkxWmjGaAnvbRnB2Gagwin1MdEOlLO/VSVirCEVY030I/Vp5P0pGCD6 + 2D9E+efO2lRJ/G2rSUFrdaokAAsIAbhBTKdVIv5PCYjA5XkeFGe5UJwREIFL0lwS8n1W5HiMyHDqkGbX + INmsQJIxAX721ykB2KUi90+YHYB85qUs4ERtGJLI5VNscfCaI6X/6MR/XeI/L/F/l9cZBVEC2eOJhZux + qwRfnAQXOaCTsewlEdgdCasrQhJ8RevyyiTYE6NgJncSZaEN1mBuC+P3A9m/qeSuohUicEoq16VEw8eY + TiAtNRq5OXL2OT3tkRVN9Q7ChpoqHUpL4iQBuKI0nLY1Eo0N0WhujpbE37aWQAZwV5sWbY18xmVxKM6L + QE5aMLJTQgnGVqnxyE3TXBaAyfVFRUgJgs9fgSvLPoty2UL8zeJ+meR+KeTtPn0YvJoQJOmCA8IvIZaT + 1FxWBiNZOQt+9Uxk6mayL85GtTcUTYzteoriMFQRj7FaOSYYJy5o12Beq1wSgEfqojFYF4VBXpfIAO6r + jwoIwM1xjDOVGO7TYrBXg+5uBVrb49HUlIAGxpX1tSaUMJbOTOc1JZFP+jRI8RkIM1KTrJIA7BVCrlEL + 4xX/EYoEkSkB2G41clkLiyUgAIssXwEh+Arhdyrzd6r0sxB/dWKeXx5LZP9a7NzPyfhtUvyVBGCPHb5U + L5LTkiQR2CVKULtECWkdvy9E3wTGqoGy06KVRGB1PNRCHJbHSBD/azrsjHdTXJIAXFCQhJKSZFRVptKP + JAcE4M5EbBvw4viYD2dGHTjbr8NN7bE42xSJM/VhOF0fgZONUTjRHIPruhNw06gBZ+eacHJQhZ1VAQF4 + iSeIcct0HKlW4M4hF/mXD0+uTMLjyxNx2xw9jnfEY18TwVh+e4sZaxhHLK2QY2mZDCsrYrGxJg7baqKx + m89vL/nW3qpg7CqbiR3Fs7CtJBhbi0KwqSgYm4tnY1tZKP1DFA7UxeHqhjgcY3uiNg7XVsbgVGk0ThdH + 4YYSIfDG4KbSWNzCvnxzhQw3lcfhbFkst0Xi+uIInC7itfF4p4pm4LrC6RJOFc6S1p0unimtv3LbtXnT + cU3uNFyTE4QT2UE4lTMdNxeF4q7yGNxXJ8d9jSrcVhePU+WROJQ7EzvTgrDVG4SdvDf7k6bhiJdwB+G6 + 5CDckT8Dj3MMPtMYg+cbo/H9ujC8XDUbP6+aiT82BeNfXRH4qC8aF4fj8MVwAr4cUuDrYTUu9mtwsc+A + Tzq1+FeTCr+tiMErucF4NnM2niE/f7rWgjvpL48wJtrMeGuZJZ7PhjbYp0MLbZMYSxkOji93CBITo+Fy + a6Q+ZXeIfir6rMhgF1NjaWAwsV8ZxDzU/70ALP47EJCEYOJKAViIvlMQpaAFnF4j7G6uc2pgc2lhnSw9 + bbSKDHgV7E490tI9qKgqxPwFIzh32/V489ev4dML/8LX33w6Kfr+fykA/xJ/futHeOPFRyQB+Oqlg9jW + W4X9Q/U4MdGB65f04PYtE3ieMd+7P38MX/zXy/jo7Rfwz7fO42+/egL/9cvH8OfXH8Kbr96Bn//gFvzh + jfvxwd+exhcfvoQviW8/exWf/ONp/OKHp/HI7Rtx15mluPO6hXjgxmV49v6tePGhnXj07HLcfKAPRzZW + Y/+KIhxYXoDrNlXjrqu78OT143j6zAQePTaA23bU46aNFbh5QxnPqQqPH+jAc0cHcP5gL25bW4kDgxzb + tJX96bPRnBSECmcQcsxByLUHoTgxCHVpMzFYKsOCGh0WiWSWQvGieAz6c6IwWpqApW02rCJ3WtbrxRJy + pkXkTytG/Fg1nonVc7OweigV68nBdvcm4Vi/F2cHE/HgiAtPj1rx8qgevxhnbLTQhD/P1+P3Yyr8qj8O + P20Pw2sts/Gz5tn4Jdu/dETi3d5YfNAdKwnAn/XLJAH4wnAAnwwlSPMD/6snCu90R+CDvhjp85UQ+3w+ + RzkpAgeygi+MK/DlfI6VBSp8Pp/biIuL1PhsPveZL8c/hyPx65bpeKMpCL9suywAf7hENSkAKyUB+P0F + Mny0SC6VgJ4SgAMwBLBOh6/WanFhjRYfr9bg3ZU6/H2FAX9ZasTvFxrxs2EVvt8djycaonB/ZTjupo16 + oEmNJ3vseGFOCn60IAevzsvCi3P8eLTHhhOF4dgjxN/0IByibbmhQYU7Wo14mM/iyQ4nnury4PvjWfjt + rjZ8eONCBNWki3kOGdjnJ6EgxSoJtiZDvDQZvEot0vYjpT/3YmTBiFeEQSHmOlXHQK7g4CUpVygjoCQU + ynCouV7H7+g10TDzGG6bEk7xR6EiFBr5bJh1kUj3aaU/1wuyzchO43KGnqSUhLjULaGGqBYocaCq2C6J + v9WldtSR7ElzAOcpSWTV0vwmbTVWjHT4SLw9GGyyob/eQhhJ8rTorAhk1zaxQzbmxkCUdm4mWvLkl8Tf + 7wrAKgkteRoJQgQWpaAbciLRlB+ODjqG3qpYdPMB9LDtryIpqAqIvwFESRiriQ2IwCQUc+lcRutiSU6j + 0F0SgVYepy49DDVp4ahKi0RlehTKMyNJwiNQnRuK+sIQNBfORkfJbPSUz0Zf+SwM14SSyEZiQWccFrNz + Lx2KwdI5UVg6GoHFc8IxfzQco70h6GqcjabKYJRmz0CWbxqSHEIEnoEkkkCPPRJuKwmplQabpPPfBWCR + AXylACwEX4EpEXhKANYoSCY1YTDxOVq0AhEwaUIvCcBemwxJhJfH9fG4kvBriUUSA4D/iQA8lQU8JQCL + OWDdtnB+jkEqia8o4yoIpJjPM58BSn6G8jsCcF5mvCQAC0wJwIEMYLmU1ZHB7ycxSHE5FLCa5CRjcugk + EVfB/k4iROg0JFaEQa/mtZOgkbRZRJkWOjUJZr1E2EQrlW4xabj9MmxmLRwWHe+xUUKiLSD+Bso/BwTg + KVE4IAzrkUjH6SGkZSEG03EmOw0kzW4U5/hQkptMkHgRlfkkX4UpqC1OJ9Ik0bemQLy1moK6ohQ0lTCY + mRSARQbwlQKwmAe4pSQJHRUp6K3NxEB9DvprMtFTkYbOMh/aS7zoKHajLd+GpmwGkQwAKxgAljMAFChL + iUdpsgwlDEQEipPiUJYsRwWfoRCAG9L1qOTncj6rmjSOr1wd5k8KwNduG8Sp3XNweFMX1o0VcxyZUewT + f77PQLJ+Jsn7bKSyf2Y4GKCwrwoB2G+YhiwLnY0tCJ0+ksS8mTjUEI47aMxfXKjEbzZr8d7VJnxywojP + T5nx6SkjPjtrxBe3WoG73cAjyfjm2WzgJ+XAL2qA3zQBv2/Dt2+14qtfNuPz1+rxz/OF+P1tyfjZUTNe + 2anC00vD8cBAEB4ZmIEfLorEWxuUeHe3E5/tScV7W1Lx59Up+MlCLx4bseNstxFX1SiwiUR0a4MBe3vd + 2E1HtrUnEevbHVjd5sCKFieWNDgwwWB9tEiNPjGvIu3O8kYXdvRnYnt3KjY22LG91ohjzWacbdXhdgZT + 9zRF4/7GCDzUFILHOkPxeN9sPDURjDf3qPCX00Z8cLcdF8+78O0rLnzzIyu+/rEVX/zIjguvuvDJK0n4 + +JUUfPyTPFz8TQu+fnsMeHc18NEO4LMjxLXEaeCT0/j4T/vw+hPzcXZbER25Eq2+SNTaY1BDElZjSkCT + NR7dDNRH0/RYXOjA8mIXlhbYsabcjV1tfuykU1lTE49lFWFYUxeBnX1yHJqrwzVL7bh2iQOH59qwp9+I + Dc28ZtrG+aWRmCgWoK0kRvIYcGVFYCCLQRfHa1+WDH0MUIdytJhTYMFIjhl9/O02jtsmZzwaHfFoYDDY + kKiQUJ8YmO+zNkmNOgZeNckaVPhUKBQlPl0xHEcMpl3sT4kx8LpF+c8EJCfK4fco4OcxU5JUtC1q2h0x + bYEGWWkm+iUi3YS8FAZ2fiP7txFVKXpUJGslVPq1qOX2KwVgMV4EvisAmyUBWJSAHigRArAOvXkqSYgd + FQJwuQ7zqtRYVK/B8hY9VncYsaXPjp0jidg3noSD85JwgO0ekqKdg3bsHnTg4KhHwlUD3K/bhG3tJmxt + t2ArHfz29kTs6PSzTcPGphSsrvdhcVUi5pbYMJxvQF+uGv0FQvQ1SRgoNmKwxIBFTV6s7c3Emp4MLG5M + xHiVFf3FWrTnJtAnxtMXiqoY9JE58WhJi0NHKvtwhgILczRYx+NuyNZhLce7yP5dmyrHxkwNtuUZsK3A + JGUASwJwporPV46uHOF/5eQb8agmYawolKG8SIbSwikBWIaKIlESWo3WRhO6OY66O+xoazKgifepsU6N + tgYdelotDMrtGCTp6WvTo7uZ+9cmoKMhAX3NSgy2aDC324yJbgvGuH24ScfgXoWBWmUA1WoM14rMYDN9 + u5p+OAr5KeHITg1HFv1yekYcMjKVyOIzTU83IJn9yst+lsQ+4iOHEXP0utn/TOZI6I1h0BkCmb9C/NXp + 6TtNEQyEouhfo+BkIOViX3Qn0q+5ZPwcQ78RTh8TLGUACwFYiJpOV7yU9Wt3y2F2ymCwx0JLv6qkb5bT + xyoIpSlGEnfNbjVMXlHueVL4ddN/ucTcvwFcKQAHsoD5XXM0LF41fNmBOYCd7NMO9m8h/noybJIYbE3U + BLJ/DTGQaYSoG4IEdTg0xhjoGQxOib+XM4BlUgAnsn/jyBWlYE8VG8gCjgsLiL+yMESTI8qE+Csyhg08 + LzN/wxxo1dYEaO08HiGVf/YwqEyhT8ywwMmxb+V4Nrt5P3gvRQawuFeuRPKMJI7hFI5dQpTzzfKrketT + o8CjRpFHiWKnAiW8D8UWGYpM9FemWBQZYpGvj0YWeU0GkWqKRLIxVCofl2YKQaEjGjUeOZqTleilHxvz + xmCBJxIr/LFYlSbDmlQZViTHBOCPwbKUGCykzVzoDZdKPq/LUWI9x9naPDXWcFmIv6vZ59cXabGRnHUt + bf/KHJmEVfQFa9lKyIrF6gwek7xwWUoUFots3eQITNDPjtOWjfnkGOH19rPPddJHNrPfNRnC0awPnRSA + Z6PfMAMTzhCs5TltIx8SAvBm8p+1oiS1L5THDMPSzBgsziFHzYjAoD8YXZ7p6HBNR5dzOjqJ7sSZGOC+ + IxwDc3hOoznksDzPEdHmkvOKl31oq7s4VtqS+NtegWAuzyJmopvB4lhJDJbXq7CpzYDd4sUUjtOtLVap + HPSKBiMWNdAeNOrQV6dEVUEw+dtM2tvpHHezyAdnIcUzC17HLPKjYCRZI+DjOPDymp2E3S77jwKwmJNK + gk0uIZABnCCJv16OqWQvIWy+6DMvyOkwAAD/9ElEQVREik8JP++pKLMokELemSpeQKQN++8E4IICkZml + RU2dFZ3dPoxPFGDZ6mqsXF+HtZsbsGVXO05cvwj3PMgg/Pxh3P/YQdx13z7cde8B4hDuvu8I7nvgOB5+ + 9Do8+dRZPPXUTXjo/mulLF2R8XvzjXukbN377zku4Y5z/N6t+/HQvcfwzPduxPNP3SIJvy88fQ4/fOEO + /PiH9+LHL92Dl5+/Ay+evxnPPnEjnnuC7eM34nuPnMGjD5zEA/deg3vuOoLbbz0gictHDq7Eji3j2Lxu + BDu3zsOhfctx7bGNEo7sW4G92xZg+5oRrFvchWXjzZjTWYKOmnQ0FHnQSO747wJwPbmimPajOVuNjmwF + fZsKCyr0WEk+s7JOjyXVGkyUyzGnNB6DRTEYrEjACG34eJsZYx02jLJfjDQ5MKfRjRGRydWcjrntBVjQ + U45FfdWS+Lt2rBXbl/biqjXD2LNqCBvnd2LDvC5sWzIkZQCPt1aiPteLIi+fTZoRvTzHRS152NBXio0d + 2Vhb68bOJg+uHc7AzXPTcNuEF3fNc+CBBTY8tNCCRxba8PB8Mx6aZ8ADczW4d0yFu8c0uGNEg2NNEdhf + NQu7S6ZhT9k0nGqPwZ1ztHhwct9HJlR4Yjwe50fj8P2JOLy2WIk3V4isXit+s8qOlwbVeLpDge+1xeN7 + 7dxnUImX5yjx4/kqvLFciz9tMuEvW42EAX/fbsaHe924eMSPi5MC8OcHEnHhgIMgt2P7+SHnZRwUrZ2w + XsLFI0LsdeDiJL467sCXRCAb2IXPr+F2QgjAH57w49cnSvHi0Xo8uK8Zt+zsxjXb52L7+kVYsGge+obG + 0D+8CHMXrMOqjXuxY/8JrN9yAHXNA3D78uBOyoPLmwOdORnxSjt9hQVmWwpy8qvR1TsXS1ZswbKV2zB3 + 3mq0dYxKWcDVNd/NAv53Aff/hH8XPP99+/9JAJ4Sfmvr2iX8fykAX5kBXMfrFvi/FYCluY3r2tDM4wtc + Kf4KYXjquqYwJQBXcLtA4Lzreewabi/n90rQUlOCroZCjLTmY/VwGTaPl2DznHxsHM2VhGCRASwE4NV9 + 6VhDXriavHDVJFZ0ZmBpWwoWNgYEYGmu31rnFRCfXRgT22r4udqB4Uoh0pGnldnRVWZDW6kFjeTEDYUG + NJIf1pNjVYuXjennCunnC1yxRAL9txwFtOV5jNWz9fHIUMcgTRWJTHUUstjmKMNRpKIPJG8YyzBhY3UK + Dnbn42h3Dg7UJ2Fzvhabc1W4qsyCww0eHO1IwanBbNw4UYwT4wXY0+enfXBibacDa7udvE4nVva4eZ1u + rOzzYGVvIpb3erG014MljOuEELyAywLzGeMJTHS6MI+Y4HHmkquOkYePtNGmiRdbiOE2ctQ2J/oZC3Zz + uZ32rrmZsUOzETVNJlQ2mVFOlHC5iH6xoFqL/EoNiqrofyq1KCnXo7RMj7IKgwTxApJAZfVlAbhuEmJO + 4CkBuLLUiDJy+NIiDUoZb5QW8P7m61CSp0UZ+Xg5+bmAtJwTQBl5fEWWDpUZjHOIqnTaU/IqAfFiba2f + cRZR42eclaJFHdtq8aIdeXFZohLl5KJl5KWCd+WRc2Ua+JyIPHLYQoccZU6RHayRUOXh8clba1wq1DlV + aHSp0cjvNnN9KzlqJzl2D7ncEDnuKH9jlHxslL89yH4ywPiij/Fhbx7jAF5Dt3jRlujOJxgz9hTbMFTp + xVB1EvqrfOgp96K7wofOSkJk+1b50VLtRxM/i7LPjeU+CQ2lyagvSZEE4CkhuKrQh9KcxCtEYBdKMxJR + 4LcjJ8mMLFcgCzjFqpJEYCEAiyxgj5YcVRUBuzxQAvpKAditCYXXGIVkC3nNfyMAi7lw3YQzMQAHeaiL + cEyKv1MisMMjykAzznBHSq0QfxPJZTzJ3MfDOMMRFsgM9jIOTo1HOmOajGwV0tgKITgtXYZUxnQpaTFI + TY+VKp2IF93KSg1SBnBdtYV2xozKcj5X+u+yokjUVEShsT4GzU2xaJEEYBlam+PR3qpET4cenS061FfG + o6yQMVVmKPLSw4loFGRwLKcHMoDTvSqkuOQB8XfyxTwBqUILbYAo/SwE4HTG+pncJ4sxUQ73zybXy+B9 + S2EslKybzPr9DwKwTzkLPsV0pGmmId88E7W+cLSSt/aVxEsC8Gh1AsbrFd8RgIdro9BfE4G+2kj01hG1 + Eeiuj0JvM3lLlxxDvYxhu8m/O2Vo5HXXNsSgjjy3scFKW29DPvtjhqgiw7gqPdWMjFQb0nxWXo8FLvF/ + oU4VEH+NathMWilBxDop/jpsJli4z5TIewnWy2KwyA428ntC+BWirSTc8lgm7iMyfx2S+Ct8sFGC3S2y + JBPhT/chJSMZSSkexkwOxqIim9gAg1HF+JOxo1FkBasCIvD/RgDOykpEXp4HhUVelJclo6kqidzNi+Xd + Xuwc9uH4+GUB+EZynRuao3C6IRzXNUTimqZoHG2MwbG2OJwe0ODUsA5HeU93VAZjTWYQlqcEYWNWMPfT + knt58NjSZDyyzINHVnpx8xwDDrTGYnN1NNby2a0oV2JBiRITxQlYXBon/f+0rUmBnY0y7OFz3F0Thl2V + s7G9ZDq2Fc+URN8txaHYVBKCzaXB2FoRhj21MdjfIMPBxnj6hngcq4/Hiao4nCyPxXWlMTjNGOZUURRO + sQ+fJqRl4rriSJwsDMO1BWE4wdjlRP4MXJMXdAkn8qbj2sKZ3GcG20kUBNrjeTNwNCcIh7OIjCAc53Vf + lzsTNxWG41b+7rlqGU6XR+Hq/BDsSg/CZh/vSWIQdgnxNzMEp7NCcSptFq5PC8Kt/J0HK8LxOPvr92rC + 8XTlLHy/fCZ+yvYPzaH4V1fUZQF4KB5fDCrw1ZAKXw1qcbFPj0+61Hi/TYG/NsbijbJgvFo0Gz+qjsfL + 9E2PVxtwjnHPMfblPSlG7MyhT8yyop/2psQyA6kWoS/MkOa8ttkU7KNamCwa9k211KfEywUCItNcZAAr + tfH/YwFYbYiD3iKmm+IYcWlhc3OcuHW0bRw/bM1cb7QqYLCIl9EJM3+L0Brl7MtyaT7ilDQ3x2UZ1q1f + hocevhN/evvXuHDxPXz59cf4Fhe+g/83BeC/v/tH/OWvb+JPb/0Iv/j+lADcj619Vdg/0oCTC7tw48oB + 3LltHp69YSf+8dr9+OxPz+Kdt57AH396L3798m34xQs34mfPXY9XnjyBH54/jl//+Bze+eMj+PSfT+Gz + d57GFx+8gPfffhQ/eeEo7r95OW4+NoIb9vfi7MFe3HN6Hh69aTnuPDaK67Y2Yd+KAuyYSMH2cS+uXpaF + W3bX4bETfXjyxCAePNCGWzaW4uzaAty8Jg93rC/CE3sa8OyBdjy9rw33rC3D8dEkbOF4nMgLR3fKNNR7 + gmhLg8jJglDFvtmWHYzRCjkWCQG4TImhrHB0Js9EG9GfF4HFjXqs7nViabcd89tNmNOsY9xnwrwup8Sh + FpI3LRfzh5M77e1y4ZoeB24ftOOxETNemmvCL+ab8NYCI343ocWvRhR4vTcWP24JwY8aZ+InDTPxi6Zg + /LkjAu/0xOG97hh8xFbMAXyBff2zwQQJVwrA/+gKx3ts3++NuQQhCIsMYZEFHBCBJ4Xg0QR8MU+NLxaq + 8eUijYQviM8XKPH5QhXeG43G71qn402pBPQ0/HkwFO8u4G8tVeOTZRp8vEwlzQf8r4kYvDcvTsoCFuWg + v1plmIQoB63D12u1+GaDHl8yDry42YIP15vwj5UG/HmxDm/N0+I1XsP3u+LwBP3R/eVhuLMsAvfWMZ7s + MOOFIR9+PDcDP53IwCtjyXi614ZzZTG4JmcWjtGunKafvrNJg4daDXiq3YoXO914qScJP5nIwV/2dODi + TYsRVJNhJwn3oDrLjWyvAR6bElYOJqNRIQ2oeFU0YuURiI4PYRvGQC8SSlUMEhRRHNSRbCMgZyuXMoFj + oBFzocojoeX3LIZ4WPRx0CpCoVeFSZmj4k/2/GyrlAGcnapBYSbJaqENDRVeCbWliagpS7wkAFeX2PjZ + jvpyK6qKSE5JTqpIahtIdjvrHRjtTMZ4lw+jrS4MN9sx0CAygS8LwA3ZUajLjECDmIOSaBZ/al8SgeX8 + /J8EYJLQfDXbBNRnie+GoqWInbsiEl2V0eiuikF/ZRwGqkQGcCALeLgmCsPVURirjsF4TRzGGuKkOYGH + ua2HD62d32/ICUalfzZKkmahxBeCouQQFKaGklyGkoCHoK5gNtpKgtFfHYrxpgjMb43AMnbS1cMybJxQ + Ygs71LblCdi2Ko6IwZbV0djAduWiaMwbjsBwdxTaasNQQceUlTKTBGoW/I5QGmsSSyEAW0gqrXEkmiSO + NhJIwm4LlIG2kIgaRdlKfUD8lSCWCb3IapoUgHWqUBjUETCR3JrU4ZIAbDcGBGCPOLaFRJXP2WsizNFI + MsfAx3WiDLSA3xWHNA/JHEmgKAN+pQAsli8JwLZwOM2hcBCJ9kiSw1ikJyskATggAquRl6EkwZRLKMhO + +I4AnJ8l4/o45GUlIJfbc7JEeT+S9GSRBazkdStJxhSTWbxspcxeAY0Ek0EjETJBzJx2M1xOowRp2UFC + NwmnXay7DLfDhESnCV6SMQ+JlofrPJIAbCbR/64ALAnDDgMJv4lE2CzBa+M+JHWJdKjpSTZepxtFWV4U + ZYvWjbIcLyomRWCRDfwdAbg4Fc0MXForMv6jANxc7EVreTI/i1JIYm6cfIw05mGoNht91WkMkpLRWexG + e4ENzQwGa8QbwOkM+jIY/Ik3glPlqExJQIVfRsSjnEFIRbIcVZIAbJAE4AoxLzCDkMrkeDRla7CgNTVQ + AnrrIE7tGsXhjZ1YN16MgToHqjNkyLIGw6+fBa92NlJENhb7psgE9hnF+iBJAC53BDHwC8Km8tm4uS8O + zyxQ4DebjHj/kB1fnCROm/D5aQM+uk6Nj89qcOFWI766y4qvH3Hj62dSgZ8UAr8oAX5XDfy5EfhjI776 + TS2+fKMGH71Ugr8+kIpfX2/Dzw8Z8P21sXhkZDru6wzCE33T8aP54fjTWh3+uSER/7XSQ4fkwQ+Grbi/ + Q4dTDSSd5XHYWBaPHY1GXD3ow54+LzbTsa1usWEF7dGSRjsmGJwPFqnQnh6DWtdstIoyoDVW7BjKwp7+ + DGxpdGB7lQ5H6vQ426zBnSSy99VH4sG6MGIWHm6ZhUc7puPJ4Zl4Y7sKfz5hwvu3OXHxMQ++fs6JL18w + 4YsXTfjsBQvef86Gd591470XUvDBq4X44ve9+Prvi/Hth5uBC/uBL64jbgStP/D5WVz8x2G8+ewi3LSz + GPNEiV1vGGpsDG5IwmpNCrTZ5RhgAD6Pz3cd7fO2ulRsqU7GrqYUXMPzPzHmw74+NXZ2kVAPkkQv0uL6 + lUbcsM7G1oITC804NGrE7j4ttnSosKFFgfUtKqwjVot5b2uUJA8JmF+SgHklKowXKDDCMTuao8JEgRnj + uWYMsV91eJVolgRgmVSiutH9vwrAtckaVBPlPhUKkuRIF/MJ0XYI++FmYO12REvzQXqcMmlOSAkMMn20 + R36vBimEEIAF0v0M5rxa5Hs0tNc69ncdyoX4m0wfxGUhANdlmjlOBK4QgLMCmBKAe4vM6BfZtyWiBLQB + fXkqDBVoAwJwhQHzqzRYLMoZSQKwAZt6rNg26MJVo4m4ao4be4bc2N5nxeYuE7Z3W7CX2/YTe8Tc0yQB + W1pM2NxsxqYmG7Y2u7Gl1YfNLSlYW+/DipokzC93Y06xFQM5evTmaNCXr+e5WKTzGRRCcKlJEoClP/q6 + MjCvjn6U67pyeb9pQ8W8+GJKBIEW+s7WjAR0M5AfzlFjcb4B63l9m/OM2JCpwdo0Odaly7EhS4Ot3Lat + 0CwJxMtzDZibqUZ/pgJdOfTL9L0N9K3VhbQlhMj4FeKvQFmRHNVl9O/VOrQ3WdHHsSTQ0WJGCwllS6MB + Xa28pySRw70uSQDubdOhs5n+uzYebQ08v2Yl+lvUmNNtwjjv2Zz2gAA88G8C8ECNFoO1RjTzN0vSRImy + UPqgcKSlRCIlNRYpvJa0dC2XdZLgK+YZTWR/S6T/cArhySZjkB4TEIENYZcEYD19plhnpr912GOlbFWv + NwFJPrk0d60QgUUWsMkYxu8FBGCrEIrZH6Xyto44GGyx0NAeKo2RiNeHI04fCpk+TCqVrBG/m6iGOUkL + nZv+i+eiccql8sk6OwMvQgiqYj7d7wrAUTC4EqTMWjf7uJgzWBKAM+irMu1wpZhhdCqlLOMEXSRilSGI + SZgticAqfRSDrDhJ9P13AVgEbkL8FQGeWhcPpUZGnhiD2PiIgPibwGOJ7F+dKP0szkUmib6S8GsLnLPe + RR9MCCHbynHnSg0IwO5M+l/efyvvn8kRCzPHso3j2JkoyuMp4E9V8/mokUak+1XITFIix6NELp9VnpU8 + wCJDniEGeboAcrVRyNJFIU0TAb82HD4+q0R9MDya2VyejXxnNCq9CjQlK9HlD2QASwJwSpxUUnJNWjyW + +6KxODEcCxPDMN8ThrnuUMxjuyglGivS4qSMYFH2eVl6HJZnxmI1+eWWciO20Q9sLNFibaFCwnraug3s + /xuJTXnx2JAThzVZ0ViZIY4TiUXJ5IBJcZjrEUJ0AkY8CvTxurrYR5r5LIUA3MQ+16oPQYduNvr0MzDf + FYa1/lhJAN4mMoDpY9fwvBZ7g7EoKRgrsmM5HmWYnxWFOSlhDOpnojeRAZuAewYGvbMxksxryozGBPcd + J8Z4TnOyCfLnkZxoDGZFoptjpcM7C20eclbRJs1Am28aejNnYG5ZNFY1KbGty4h9/Qzu+pzY0WHHplYL + 1rZYsYxjeWEbbRCDyyLun+INgjcxiOMkALdrOtzOYDgsIeRJ5JHkBB72ZwdhY582E0aOEYH/iQCcxPEq + Xvbx87mm0Dcki2X2k2SOxWRRcYb3WPBL0V4WgAPzABcwFhACcI4QgPNVKCpRo7zSgGbGG0OjWZhYVIQF + S4uxdFU5Vm2oxb7Dg7jljrW4/9E9uOvBPbjz3qtw5z37cefdB9kext33HcUDD1+Lx5+8AefPn8X5J87i + kQevkzJ+b71pn9SKzwL33nkE9995NR5/6CRefOYW/OC52/GD5wWE+HsPfvrqA/jZKw9IIvAPnr0NL5y/ + WRKAn370Rjz24KnAPMBCAL77sgB8+MBKbN88hs1rh7FrywSO7F+J609skXDN/lXYv3U+dqwewYZF3Vg5 + 3oI5HSXoJF+Uqsf8JwE4LyAAt2Sr0ZmlwBDv0cIrBOCl1RrMK+c4KpGRA0VhoCwOQzX07016zGkzY7TZ + Qg5qwxyRRdiYjAXd+VjWX4EVw3VYNdqEteOt2LywG3vWDOPAxnHsXj2EDfM7sZ7YumQwIAC3VVwSgKtS + GRfyXCcac7C2pwTr2jKwvNKCTeRbR/r8uGEsBTeOOnFmQIdbBpW4c1SNe+bocOewGrcNJOAWxls3dkfg + DGOpU11ROFA7C3sqp2N3+XTsrZyJa1sicUufHPePafHIPB3OL9Lj6QUqPDuegB/Mj8dPFyvxxlIVfrNK + j9+tsTM4t+KHg2Z8f9CAF/o1bNV4cSgBL43K8OP5CXh7sxV/3yFgwb922fDxPg++kARgHz6XBGA3aZsd + F/ZNYr9TwucHXAEcdBA2XDxoxcVDbA/z81EHvjjmlPD1cSe+IoT4++U1PNY1DnwmRODjdvzruB+vHy/D + M0ea8cCBbpzbN4oj2xdg09rFGJ8/H91Dc9E3tAijc1dj5fq92HfkRuzZfwpt3RNISimBy5sHJ2G0pUGu + dtHeW6DWuuH2ZqO8qg2j48uxbMVWLFm2Gf08Tk1d938QgC/Pj3sl6rn+3yHW/7vg+e/fa6jrCKA2UA5a + 7COEWGm7mG94Uvitq++QUNtwOQtYCMBVREVt4yVUVTddEn/FsiS+iszcKVwhAEuf+RtXzstbV83fEfhv + BOAasW4K3E+Iv2IeYEkAFlm/De1oaehAC8+vmfi/F4DF+TfwWLXcXon66lJJAG6vL8CweElivAbb51Vi + 60QxtowVYuNInlT+ee2AyP69LABPYeW/CcAjtQ6M1AQwKrVOCZI4PCkAj1TZMVhuxwDRV2ZFF9FWbEQr + 0Ux+2JilQ10a7aqHPJBcqYz8vtqnRV2yURILS6wKFDEeySV3yNJGI0f4cV00CrgsMoCb6A9GyBfWlidh + b3s2jvXk4lCTH9t5/O0FGhzg71/TnIxrOlJwsjeDNqAQp8YLcaA/Dds63dhEfikqNq3vddNmeLCu14M1 + jONWs13ZlyRlsCzl5yX8vIjLAgu5n4AQfy8JwG0OjLXaMNpqlSobCEgCcLtDEoB7+Lmj2YqWZhMamo1S + FnAFuXs5Ucx1heS3+eSkeYwJCsh/CxkTFtOWSiIwfU4p44XyfxOAa8gphAgscEkALmG8UmJEaZGO0KKE + 90AgIADrUCbE33yjhNJcPcqE+EuUMuYv57Moz9BKqEq7LADXkFtVJ6sZ/ygZ46sIkfHLZ0YeWiqyfulj + y8SzcqtR5CD/Iu/KMEQjy8hnZY6TBOBScssK7iNQ6WEsxX1rnGrUOdRocJLzE00uDZpdKrTxmJ2M8frJ + CYfIeUYSGXOQB/UnJaA3WY7ulAR0Md7oTFehg7FHF9HBc24XsVeuCb3FDvSWutFFtNNXtRW70VJC0H81 + lnnQUO5BXZkbtSWJ9Gdu+jM3qgsSiSTUFvlQXxIQgKuL/KjI96Ik242STBeK0t0oy/SgMMWBHJ8oA21E + hkMnlYH2W8gryImnBGC3KhIOcmebfDbs8pmwiRLQ8llwTQrA4n8xz/9WAI6CQ8AVIWX6OhKjYSdHEcKv + KzkeTp8Mbn4WwrB7UiB2k894U8hz0pXwpSkkUVhkBicmx8LPeCabvCaHMWAW20zG2FnZCmRmJiAjMw4Z + WXHkOQnkPIyf84Xgy2dUpkcN+145Y/Oiomi20bQ7cWhukqGtRYbWlthLAnBHG2OqbjN62o3SdD2VxbEo + zo1AIfliQWYMW8WkAKxBuuBg/wMBOJO2IJv7CPE3l/1BtDn2eKSbopFqiCRnD/1fBWBVMBEQgFOUQcg3 + zaAtCWe/iEO/JACTS1fFY7xOjgXtasxrVWBOQ5wkAPdWhKG7KgxdAtVEXQR6m8l5JQFYid4uxpjtQvwN + R2VNJKrIZRrqzaivd6G01IJcjqHsDPYJxi6ZaQ5yW8YwNj1sejUsOvHfuhoO8b+iZRI2E3mtgPl/EYBF + qWejWWRT6hgj8rMpUPp5SgCWMoG5Xcz360i0w+lxSMKvgfsLiJLPbq+oyuFFarpPygT2+92MZQMle0W2 + pjjGlKgsBGAxjZ1U4fM/CcCZicjJcSM3LxElxV7UcwwNTwrAu0aTvyMA39AhwxlR9rkhAtc2RONYUwwO + 1sVgf30UDrO/HO5IwN7GaGyrmI212UFYnTEN2wojcF27CXdP+PDw0hTcu9iNuxa5cKJPjfUVoZjIYmyS + ForBdD6TtGj0Z0RhojASq2rjsL1FhT0tCuxp5HJ1KLaVz8KW4unYOikAby4JxcbSEGwuC8GWinDs4rns + bZRhf1N8QASuT8DRqjgcL4/FidIYXFsSg2t47GvywnEsN/QSjueH4FheMI6xPZo3G0ezp+MIz1/gqEBO + EI7nTcM1BdMlnCiYIeF44QzuPwNXc58DGURaEK4mjvG6r8uZjet57adLo3C0IAx7snjOKUFY7yEYD+1J + EVnEMbiVPPpcUSRuLQjBXbyehyoj8Gh1OB6tDMFjJdPxLK/3J5Wz8YeWCLzbHY2P+2LwhVT+WQjAcnw5 + pMLXQ0IA1uGTLgXe5zP6W3MEfi2E45KZeL0uGq+1qvFcvRYPlapwS74W1xfx/lekYBft4zzak0rLNKTq + Ga+Zg9h/g2E0xEKrl0NrkEOjE/NIJ1yClp/VuoTvCMBxokrYlAAsdKN/E4A1hjipypgkAEtZvhrYXQER + WGT9iimohPAr/nsIgL9tFEiA3qSAK9GEtAwP2jvqceDgTrz40nm88+7bkvj79defAN8RgCdF3/+BAPyt + wNcXpWVJAP7kA3z28fv47LP38NEnkwLwe1cKwKIE9FFJAN7SV4W9I/U4ubgTt6wbwd07F+DpM1vx11fv + wke/fQL/9fp9+NX3b8KPz1+LFx86gOcf2Itn7t2FZx7YjV/84DT+9ta9+Oi/HsPHf38CF997Bu/96UH8 + +NmDuOfMApze24mjmxtwZFMtzuztwLmD/bhuWxP2LxN8TszFy5i7z4CdY05cv6EADx1uxeNHO3Hvnlqc + XZ2NG1em4+aVGbhzTS6e2FGFZ69qwHO76/HQ2mLcMDcJB7ut0lzbw+ynHf4gVDgIVxBa0qdhsDgSC2vV + WCmmdypXYjg9BM3OIDRye19WMJY1arBxwIlVvRYsaNVipE6Bvmoxjaoag/V6DNUZMa/OhOWNjM9aLBy/ + elzbocFt3Uo8OazBq+Na/HKeHr8aU+N1xmavdcfg5cZgvFw3A6/UTMfP62bhT+2R+GdPHN7tisGHbD/h + fp8NKiQhWAL7/pUCsCiN/q+uSAlTywEROF4Sf4UILPDJsAwXxjhmFqrxzRIdvl1mwNdsv1qixdfL9Phk + bjz+3DkTv+ucjt/3zsLf5kRJgq80/+9yLT5ZrsKHSxX419wYvDMejY8WyiUR+OIyjj9u/3yFGl+s1EjZ + v99sMuCb7XZ8s8OFT7fY8M5qI/6wSI1fjSvx0yE5Xu5JwFONMdJ4v5Pj/p7KODzRrMdzXU68MujFT4a9 + eHXAhZd6rHiY9/j2MjEveQTua5TjkTYtzrca8IMOK35MjvtabxLvaS7+tacT3960FEHV6XbUZtN5pdqQ + wkGXSBJjMyvpdFQcaCrIdXEBAVgeRoRLb2/IVTGBUn9iIHNAi0zgeJERrOAgFnMHyCKhTIiEThULgzoW + OkU4jJpIWEh6ksRbXKmi7KYWmSSVBZMCcGOFD03VySRmXhKzKwTgUhvqysV2K2pLDVyvQ02pDk0kvF2N + Doz3+DFBjLUnknA7MdhkCQjA5Qo0F8aiJjMMNXQadVnRaMiOQeNk6WUx568Qgi8LwAEReCoDuIUEqDlP + xu+Foy47FE35oWgrDUdXRRS6K6PRVxkrQZSBHq6OnkQU5lTHYEwIwPVxUunnwaooktBwtBaEojZrFsqS + Z6LANQ35iTOQK+CbheLMYFTmhaCxZDb6akMZSERg5WAsgzMZdiyho1ytxMGNGgbnWhzdrcbRPUocuUqO + w3vlOLhHjl1b47F+ZRyWzY/HnL5YtNHJVhSFIS8lBKmuECQ7wqVMCveVAvBkiTy7TfwZHQOLSWT7hl8W + f68QgfXaywKwVhnK5xoGgzIAM7dNzQEs4BBzBOsj4SI5c+nDkWjiMxdCsC2A/5QBfCUuCcAkxDZjMDEb + Ti4LUizKQ4uS4f8TAbjgCgE4L0uOvBw1sjI0SEvRIYmBi9OugsUQmI/jSgHYqCfhMuik0ixWEjKXy0Yi + bicht07CDm+i4zIm13sTbRKSRNkVwu91kMzys0OIwOaAAExyJmX+Wi5nBScJ4ddtIeG1SvCRzLlIyFwc + f34GF5l+O/LSXLxetuIN1EwGItkeVIhs4AL/pfLPgTdXU9FclvbfC8AlSWxTOD4yMdCYi9G2IgasRZjT + mE9jnIW+Kj86RbCUb0Fzlhb1DK4aMgQYoBH1JAB1RG2KnEEh4Weg7leiLlWDxgwG8hl6BvFxKEmMQTkD + k4YstSQA717SgJOSADyMw+vFvG3FGKp3cmzxuTjDkWKYDa9uNvxmPmN7nDQXsN8cihQSjWxR/tkbhHkF + JE0tIXiEhvRnG7T45wE7vrreg2/P2vDFDXp8ekqN908m4MMbEvDxLWp8dpsOF+634OKTifjm5Qx887Nc + fPubEuDtOglf/a4KX/yqAp/9uAT/eDwNv7vFgV8eM+HlTfF4ciIY93YE4Z7GIDzdMwOvz4vH75dY8dt5 + dvxs0IJn2zS4s0qGa4ojsIOEbGNJLHY06HFkMBl7ej3YyIB/Be3Qkjor5tdYpDK7XeyPdZ5QFBmnodo1 + UxL/dgxn4cBQFna2OLGzUo2rqxQ426jg78bhIY7hR+vC8FjDbHyvLRjnu4Px3FgofrNTh79da8fHtyXh + i0f8+PJ7Tlw8b8LnT5nw0ZNm/PNxC/72uB3/fCoF779chi//PIqv312Nbz/bDXx9HPjmJuJW4MvbgC/O + 4at3j+LXLyzCjTsLMV6ZgLrEcNTQHtTS9texD3a46NiTNViUY5LE34MdeTjUkYXjfTk4t6gId5A8nFls + xrXz1ThDx3hugwW3b7bjVjqys+stOLXMjOPzjDg8bsKhURMOCsyx4cCYDXuH7djZacGGRvGHsQYrqnVY + XKLBRJ4CE7nsO6KEeK4ZI+l6dDNgbGVA2OSUoYVBYdP/UACeCq6d4oUSWxRcdgbJQpRz0A6KzEyxzGP6 + JJFAVAkwID3FIC2Lucyz+TtFHg3K/pMAnPHfC8DtVwjAg0VWDJcRxaIMsxbDRSL7l9dGH7agWosljQEB + eFW7Huu7jNjUY8POAQd2DNqxncsbO4xY36rHljYTdvU6sLffiV093NZuw6YmMzY2mrGBfW1Tg4P30oN1 + DV6srHFjicj+LXViuNCKvhwDenJ06Mk3krjZJgVg9s1SnkODByu7MrCiPR1jVXb0FujQkpmAxkwZGukj + W4s0aC3UoI3PpY1jtidLhdFcDRaLDN8iCzbzWkUW8DrainWZKmzI0WBLvgFbJAGYBC9XzOUlBGAVurJV + PI6Kx1WgplCBCqK8SI7SwgQJVQw86quMaKo1oaOF59LhRl+XS8oCFnMBizmBezptGOhNxFC/G/28P91t + OrQ385i19Ot1Cegg8REi8GCnAXO6TBiZFID761UYrOX6OtFqCC36a/Ro5O9KAnByKNKTaY/8kQyUxVxZ + 8fDTtolSzx72P6dbzsBZCMEK2B3xsFjiYDbHMIAOvDylp7/T0+8ZCCH+WjiO3K54+hsF/MkqHlfNVgmv + Rw4nbZyYC9hoDJUEYAv7pihva7aJTFtR7pg8yhSBeG0oYjUhiNGGIFYXingxVy59ttEjBGCdJPwqrTKC + QTuhtdGXOcjdnEqpnPKUCCynbxcisEZM95DEwMqng8WrkQRgkf3rzRQloa3Q23k8QzTiNeGSABwtm0n+ + FwyFNgJqA8+LQdd/EoAFD4xXRkuBoIBcHcd14o1fEfCRK06WfhZQGOOl8xTCr4Gc0+hmYOcOzF0sYE2a + EoDpMzNFiWojnLx/tsR4BoExDApjJQE4MUmB5DS1BCECp4oKIlyXwfub6YxHpjkOmQxQM7RRyNRchhB/ + k8lhPLw+kY1hV8+CQzkDiWrBzWJRyWM08jl10L+NJMVgIikSS1JjsSJDhuXpMizyRWLCHYI5jlkYdc7G + iHMWxmnbJ7zhmD+JedxnfnIElqbHYDX7+rZKE3bWWrClQo8NJUr6DBU2FbMtlmMzsaUwHpvy4rA+JwZr + s6Oxlnx1RVo0FvvlWMDzmaA9m+MRGcBCAI5DE/tGoyHsCgF4JvoMM7DQFYG1/hhspb8RZaA3ZcRibUoU + liWFYqkvFBvy5VhXoMCynDgG9BEY9fH8vbMC8MzAnKTZGE8JxUL+/kKey3yey9ysyAByo2mXozGaHYk+ + MZ+adwY6vNPRnjQDncnT0JkShIHsaZhfEYm1LeSlvSYcGHbhAIOTnV12bGm30jfasZLt0k4HRltMKEyf + Rf4TRB4axJgjCFY7l53TORZCpHmznVbaZ3sCbbYQdxWw2RL+rwXgKdvu9ykvCcDJHqX0x6P4wzFQHSKa + PC5GKgcdEID1kwKwTprfLYf3UgjAxaUaqSxnbb0FXX3JGJyTiZG52ZhYlI+Fy4uxcXsTjl03FzfftQ63 + 3LUZN9+2FTef24Gbb92NW27dh1vvOCAJwZII/MQZPPP0OTz5+I247+6jUhawKNn8xKNnJAjxVmT/PvnY + 9Xjpudvxyvfvwqsv3S3htVfux89/9BDe+PEj+OkrD+DVF+/CS8/cimefuAlPPnQGj9x/Eg/dc410vLvv + PIzbzu3HTWd2BQTgjZcF4KMHV+PMtVtx5potOL5vJfZunIttKwaxfn4HVow08BkVoqsyFY0FiZIIXCfE + 30I3qgodqM63oT7PwriKPo/2vTNTgcE8JRbw/qyoMRBaLK1SYl6ZDGPkSEPFURgsY1sjw3CDGnNaDBhu + NJF70sfXMpZr8jPuKWPc04QtCzuIbmxb1Itdywexf8M4rt4yDztXDUni75qJdmxa2Iu1410YbyufFIAZ + S6Ya0VbgxmhtFpa152N5gw9LyvVYV23EwS4vTo0m4/SQFSe65DjZEYvrO2JwtkuGG7ticaYzCqfawnBt + 62wca5mNIy3BONQYjAMNIThQH4ZDxDUtkdJ37hxQ4OFxDZ5dYsSLS3R4aYEaryxU4ueL1fjFUhV+uUyF + t5ab8MZCJ3424cbP5yfitbl2vDyswwv98Xi+Lwovj8bgL5tt+OcuhyT+vr/HgU8PkNdd7cfFgz58fsCL + z/e7cGGvHZ9dNYm94rMLn+9LDIDbP99vw8V9VlwkJ754yIEvDjvx1RE3vjrqxLfH3fjmmAtfEhePufHZ + NW58fI0THx9z4q9HU/GjwxV44nAb7js8iHOHFuDg1kVYu2oJ5kwsRPfQAvQMLmb/XoPVGw/g6mtuxdXH + zmF4zmpk5tbBlVQAm1vMA5wGpTZREoDlShsMpiSkpBejsWUA8xeuw/LV2zCPbVvHyCXh85IAzOV/F3EF + /h8JwLXtaGjolATgKzOAJQG4VuxzWfiV9iNqGy5nAVfXBURgIb5Ooaa25Tv4juD7n/Bv5/h/EoCvFMPF + Z0kAFuJtTaNUvrme59TS2InWxna0Non7wN/4vxKAA1nA/4sAXFeIoeZ8jrVabJ9Xg23zK7Btbgk2juRj + 7cDU/L//ZwF4qNomYUoEHp5svysA2zBcbsdQOXkneXB/uRU95J9dRRyruQa0ZmrRlC7KAstRT/vcRP7d + mU3ul5eItnQr+b0WVS4NSq1yxk/xKDTEETEo0cWijL5dCMBD5GgrihzY2ZiKqzsycbApGbvKLFL550M8 + j2tbU3BdVzpOdmfg9HAeTs8pwOGBdOzu9mB7VyK293qxdSAJm/uTsJFY1yeq4nh4D5KwgtuW8/Myfl7S + m0R4sbjHI2F+t/uSACyyf+e0WiV8VwC2SwJwHz93TQrAjU0BAViIv6XktcX0hQWMg3LJSXNrNMir1aGg + RojA9EOVehRXGSQRuIzceEoArvxvBGAxZ3B5iQElRSIDeEoA1kkCcKko+3ylAMyY4BIY85cyzhcoS1dL + U0BVTQrA1X4VqnxqxvVKlNF3ltJ3CtG3VGT8khMXJ6oZ92tQxM8FDsZNFhnShQBMfpxDfioE4GJyUiES + CwQEYI0kADcIAdihQYNdg0Zy10b68RainX6/lzx7iFxulJx7hFx6yC3DgCsOve5Y9Hjj0O1ToJu8T6CD + 59lKvt6SwXgg18IYzIYWUc0s18p4g75K+KsC8eKSHVUFNsYeRJ4d5bk2lGVbUZIlWicqct30cT7UinmA + C5NRWeBDaW7ipAg8KQCnOpCXfEUZaJ5/yn8QgJ1K8kvyZzH3r00eEICdUwKwlZzDEhCAp8RfMf9vEvmI + KP8sSqw6XOKFR8YHosSzk8uemEkBOAGJ5CoeQswN7CVX9UgtYw2OpQzyl8wcPZzeGNgT+RvJjGfS5cgl + p8krMiG30MhlHXIZZ2dnK5BFfpNBzihNfUNkZcaR8zAmK+LzFy8dlLJfFMehsjwWjfUJaG1hnNUuR3u7 + EH4T0NYcj652DYZ7bejrZEzMGKu6VMY+F4PinGgUZcehSPzfw36VLf7n806Kv4zl/5MAnEKun8Z4X4i/ + ueRxeYxz8tkH8gS4LETgTHJDvz5Mmv/30hzAjJd8vL9+aS7gGfArRNbaTNSnRqK7ICEgAJcnYKhKzAMc + j3mtSkw0CwGY62uj0VkWgvbSYLSVERVcrg5DdyN5yyUBOAEtrVGoqgtDeVUEKnicmloDfYqT49GJPN7z + rAwj0tPNSPMzrnLqYTeqYdEqJAHYYdXzWTOesRqkZSEA221G2K0m6T9HIQKLVgjAksCrV0EnppyTBNpA + e6UAbOR+NpcZoryzO8kFE4+rN2mg4zYhAouS0B6fC74Ub6ActBCAfQ4keu3k2WJOYJ0kLF8WgBOkLOB/ + F4D9yU6kp7mQkelkX3GhqFC8QMEYvIl2kbxqJ3nV0fEknB6x4wYhAHfKcKYtFicbonC8PgqHGmKxtyYG + OyvDsLM6HLtqI7CV93dT6UyszQ3ChtxZuKqC3+l14I55ybh7YTJuHrPj2n4zton/01NmoNU+DQ3Waai3 + zyBmo9nNmCU7FMsqorCV8f6eVhV2NcZha1UoNpfOYnw1IyD+CpQGBOCNZaHYVBGO7XU8F57TniYZ9jXK + pHLQByqjcag8CkdKo3CshCiKwJG8UBzMmoUDmQEcyp6Bq3Nm4nDubBxieygzSMLVIqtXCMG8lqN503As + f7qEa4QAXDQDxwpn4HD+DBzkPvszgrAvLQgHUvkdIQJnidLQITieH4b9WbOxLW0a1icHYW1iQADenxmC + sxUK3Nugw701ctxfFYeHa+PwWG0MEYFHKkPwaNE0PFUUhJ9UCwE4Eu92x+DTvrhJ8TeAywKwBp+wH7/f + EY2/k+P+tnIaflE2Db+sC8brTbH4Ya0MT5OzP1yixkP1SbirNQsnazzYkKdCm306srRB8OoZpxlmQaeJ + hJKxvkojIINaZJALaOIlEViIv2K70ItEVbBYMaWoIhIJqmgkqKO5PVb6/0BMJSWgpe38jgBMuzolAIuM + YJEBLE1DZZJDbyZoc4XwKwRgkQ3s8zuQX5hOjtqNG89ei1/+6if45LN/Qcz9++23FwF8foUAfPF/KABf + wDdfXsDXXBYZwF98/gk+/fgDfPrRe/j403fxwcfv4J33/4K/v/uHSwLw6y8+gu/ddARXLx/A5r4K7B6q + xjUL23Bu/Qju2T0fT1+/GW+/cjs++PWjePsnd+Kn50/g2Xt346Eb1+LBG1bjwRtX4bHb1uOnLxzH27+8 + Hf/64314h3j/Lw/h7TdvxYuP7MKtx0dweGMddjPu3LGkAAdWl+Pw2krsXpyPjcOMpboYZ7cqsKJTjs1D + BhxfkYK7r6rE/Qdqcdu2Yly/LBk3LvfhZrZ3rkzHE1tL8PyuKrywoxJPrC3A7fOTcR3j962094vyZ2KI + /bbNF4R2/zSMFIZieZ0Cmzs4PhnPb6hWYyIrFK1O7sM+O8pxs65Ni91jHmwZtpMzqskD49DFcdVWGI3m + /Fi0C3tcSNtbosKiSiXWVMTRPkTgmtpw9rkonO+T4TXGWD8fVeI1Lr/K+Oyl+tl4qWY6flAp+voM/OGS + AByHD4QA3J+ATwfkhOwShAAsMn/f6YrAP9pDJfxdzB/MGO9vrSGSEPxhf6w0B/DncwKZwB8NxuLj4Th8 + OV8tib9Yaca3y434doURWGWWMoH/MRiGvxB/HQnHv+bHXxJ/P1upJwJloN+diMU7c2Pw4cJ4qRT0BZEJ + zPjws+ViXmAVvlinxTdbTPh2lxPY7cGFbU68u9aMPzCW/NW4HL/gubwmXhruiMcTddG4pzgE99E+PV6r + wtONBny/3YxXOi28N2b8qNuClzoMOC9KRLco8GynltDhxXYjftptxxt9bvyS3Pa383PwwZ4OQAjAVWk2 + VKbbUeAzwcMB5SSsHEhC/NVZVZDrZYhRREgl/KI5cGM5cONVsZApYxHHQR2nCIi/AjI6jPiEaMhlUVDE + R0OVECOJwDplJEyaKJiFMCiyQen0U70KpJO85ZOsifl/G6t8aK1LRXN1MurKhQDsRFXJFQJwlR0NVRYu + G1BfoUdLrRm9LU7M60vFvN4UjHd4MKdtSgAmASxNQH1eJElsMCpTQ1CXFYWGbJIXEpHGnDiSQiEEJ6Ap + Ty6hOV/Bz0ouMwDJU/KzkqRRhrrscNTlhKKRBrq1KAxdZVHoLo9GT0UAA3QaA5WRGK6KkUTg0eoYjNbE + klzESe3AlACcH4paOpCy5Gko4ADJcUxDum0acrzTSDpnoak8DD0NYZjfE4k1c+iYVihxeJMa1+1R48xB + Dc4eM+LcSTPOnTLhFuKmUwbcfL0BZ09pcfK4Cgf3KrFjkwZLJhIw0BmLJg6k0qwQpLuC4beHSQJw4n8S + gEnObXwmFmMkjPpwGHUR/4ZI6DVCAA6FRiHmAQ4IwHolIbK6ud1OMusyxUqw87MQgJ2EXRcGpyEcLmME + t7ElEq0kuY4YSQTO9ImsXzWySNoFxHKqT5Ts47F4vmaDKBs+Cw5TiJTFJ+byzE4RWcCBuYAlATiDxJAQ + 8//m/5sALJBHEpufQ9KYw6Aq24DMdCP8STq47GIeDjkMJDgiC9igVfFaCb0GJmNA/BVwu2xIlARgIfAG + xF+fl4RqEsniDTvCT/IlkOJzS0gl/FzvE9912kjurbyGgAjsIenzOsxIclo4FmzwJ9pIiB1I8fDYTjOf + Ec/PquZ2A9K9ZmQl25DltyI71Yb8NIdUjkiUJaqczPxtKEtF4yQuC8DZ6K7LRa8QgGuEACyyg/2TAnAW + BpryMdpezHFTgjnNhRiuz0Z/FbfnW9GcpUcj729jqmIScqltTlMyWNdIEMvNqRwjfGYt6XquM6JFzOWd + GIdiBi1lSeyDOWosakvDniX1uG7rAK7fNYSr17Vi3VghBmvtqBHPyRWBVNNseA0k7JYopDhl0rwvaZZw + pJumoZAOpZukaV39DJwdi8QPNyvxxwMGfHrKiW/PJeLrW824eLMGH5+R44NTMrx/RoYPzibgw5vl+PAO + LT5+mMb6OS++fCUVX76eC/y5GvhbHb5+uwafv1WGz35WjPeezcTbd3vw1kkrfrJDheeXROKh7um4syYI + jzRNxyt0Im+OW/DmqB2vdujxVG0C7sqPxAmO5110dBuLSUBrlNjX5cSuTifWM8hfWmvCfAbko6U69NKW + tKZGozYxGGUkr7XeYMytNmLXaDauJq5qd2FPtQqH6ABvYSDyUEscnmqNxfNt0XihIwI/6I/Cj+bK8Dpt + wn8dsOO9Ux58ei4ZF+/344tHXPj8ESsuPGbGh49Z8bf7zXj7ATv+8UQaPni5Bl++PR9ff7gJ335xEPj2 + NAnQHWzvBL4ivjiHz/9xAK+fH8eJDZkYKo5FrTsCNbZ41NL211k16HCrMJSswcJsIQCn4EhPPk4O5ePs + eCHuW1WKR7dm475NLtxGp3XHBivu2e7APTucuH2bDTdvtOL0SiNOLNZLmcDXLiShX+TAycVuXLfUy+Uk + 7O2zYmurAevrdVhdrcWKMi0WM+hczOB0cYER83ONGEvXoi9JgQ4Gha3sG0IAbmYg2JioQsMVAnBNsvij + QosyUQaWAWa6i0G0EH+FkGALZ7AVBaedAbQthm0s7d/ksiMuIBR4VRzDWiQL8JjJLgbG/J2CRA1KknWS + CFzp16MyxYCaSQG4MVvASBjQlGXg2BHgeMgzojNfzP8rBGAbhstsGCk2Y6TIgNESXhd92cJaCxaJMpmT + AvDKNj3WtBuwrsOEzV0WbCI2tpmwtlmHdU16bGw2YnuXmOvXhR3dLmxnv9nUZMX6BgvW0h+uqbFiVbUd + y+krF1fasaDciTnFDgyIsmg5RnTlGtDNc+rn+fTzXPqLLRhgO1HrwuJmvwQhVHfkqNDIsdmYKfyimn5P + h7YiDW0DA4DsywLwIh5rbaEFG9huyNVjXbYW67K02JCjxeZ8AzYWmLGW25byGY7TZgykq9DF77aJ49PH + 1hYoUVmkRDlRSiJYWqRAbaUeTXW0QQ1WtLc40NXuRE+nCz0cWz2ddgm9PXb0k8z097u4bEUX71trU0AA + bqiRoblOhvYmBuutWgx3GDEiSkDzHg42ajDSoMFYiwFjzSYumzBYZ0RzsQIl6UIADpsUgKMkAdiXclkA + 9rJ/JbJPeER2Klu7k0EKfafJHA2DEIBFdq0pisG0yAiOhZV+VpSr9fF7fo6fFB4jNUXLNrCc5FEw8I/m + 98IuCcAWK4/F4+noizU8ZoI+FDGq2YgmJAHYEIp405QATD/l1UFjl0NhikOCkbzMEAWNlYGQUw0z+6w5 + UcdlBdQWIbyGI04bCiXPUawzcdxYPGo4k41IyrDDl+lAohCAbQzaDORw9OMytcje5W/Lg5GgDYfqPwrA + cQzgGMypAm/zinJMBrOK6+MZ4MUiXk1OyABPlH6WxF9CzWBNKypwMKCzMLCzJOphcqslmN0aSQB2cpyJ + TOXEdCEEm+Dmc3CRLzhoAxxuUd4uAW7yR2+aCj76Kh85gd+vpN9VII3b0hwy+hXyDF00/Dy3VAF1JNJ4 + rinqCHjJXxzxs2BJmAGLfDpshFs1E4WuOFTR1ggBuN3PAMUXjWFfOMb8kZhIjcHclGiMJUdgmLZ80DkT + /Y4Aht3BGCbXGnHOxiiXx7xhGOf3FqXHYCW55ZZKA7bTJ2ytFKWgldhUqsCmEjl9Rzw2E5sKZdiYH8Nx + FMVAO1pa3pgvx3qO21UZBizl9c9n3xkjepzkr8ZQCe3mcHTSvvWYZ2PQPAuLEyOwxh+NzRkx2JYVhy1Z + sdiUGYuN5EKbyXP3Vpmwi+eyoVCJ5ULkTQ3FAn8Ij034ZmORPxSLMsKxMjeW5x2L5XkxWJQTJWFJQQyW + FcVhQUE0Rsir+33T0UM+25M6A/0ZMzCQPR2jBdOxpDocG9oTcNWgCYfmOHBwwIGdtGVb2mnPOuy0c/SP + 7Q6Mt1hQlRuJ9KSZ5KFB0OmDYGZrtk2H0TKL4yKM6+Noq5USX7tSADZxbAlYHQmwEf8uAE/xW49LiLzC + rmvg94m52YQAHCgH7aEvSXTSRzjJix1RSHRFI419KCtDLQnAhbRhQgDOzVYgJ4c8kn68tJx+oIIxS7UB + jW0OdPQmoWcwBUPjGRhbkIulq8uwaVcLDl07hpM3Lsexk8tw7MRqnDi1HtddvxXXn92JG29i8H7HAUkE + Pv/UTXjq/E148P5rcNtt+yXRV2QFn3/iBq47gYfuO4Hzj9+Al56/A6+8dDd+9IN7Jbz28gOSAPzmzx7H + L157RBKEX3nhTjzD7z7+4Ck8fN81eODuo7j3jsO489aDOHfTVbjx9A4c3h8QgDetHZZKQAsB+PQ1m3Hq + 6EYc2bPs/0fZW8fZVZ1dwBPik3G5c91dxt3dZ+64u2cylkzc3ZWEEIIFdyhaoEJLW6AtLbSlDm1pKS0O + ISEJkvWtfe5MCO37vt/3/bF++9xz7cje+1nrrvs8GztW92LjWAtW93kx3lyA3so0ap5YeLPsqCTKs+0o + ybSiONOM4nQTyjMMqJIMHM7rSTJ0pMswkqfCVIkGy4sVmCyKxGhBGIbyqYsK2G9KQtFH/tRfrcBAjRo9 + VVryTi16GLtGamKxrrcE+1Z04OiGIRxcM4B9K3txcHU/jmwcxtHNS7FzZbeUAbx6uA5rh5uwerARQw2F + qM5wI18ygA2MWU50FCVisDweg/lGLMtXMj7qcaCZvKM/Bjf0mHGiOQrX1oXgQMlCHC1fiJM1/jjdGIgb + mwNxqnkxrm1YiGP1i3BtUyARjKP1RA23a5bgVF0A7mwNw6N9cnJFA15cbsBPp3R4eVKFXxMiA/i3k1H4 + w6QGv59w4I+TMXhjOhGvr4jDK4MGvNQdRU4Xil/0h+OtTRa8R7700S47zu514rODsbh0MA4XD8Tgwn63 + ZPae323DuRmc383X7HHhwhWQ/+2x4uIeMy7us+Lz/TZ8cdCBy4eduHzUCVzrwlfHHJIp/NkxJ84d9+Cj + E268x/1/PpKEHx0uxeNHmvHgsQHccXgSezeNY3r5BPqHxtHWO8m+PYXhsU3YvPM6HL/hfpw4dT+m1+xD + SUUH3HF5MNqSoDXFQ65xITjciNBIA+OADXpzLJLSitDZM4ZV63Zi9bpd6O2fRLW3XcoCltYCltCEivJG + tj5IRq0Esf1NVJQ3oLxMGLo+VJTXo7KSr61sIhpRXeUzdcXj0tI6lJTUoLTEV465YvYzrzKAq4QBXNWI + 8kp+nmT+EuV1KK34GhXcV8Hv8EF8H19b8TUqZiCO2bfNVpjAM8cqndtV+Nr4nYHIQuZxC5TzHEr4/cWl + Yv3earZV/Nw6cqEmNDe0obWpnTynhTxHGMszBjCvgYAwucX3lf4XeB5lNXyuChVlpagqK0JteQEaK/PQ + XZeLld3F2DhQii3DxFAB1vdkY01XGlZ3ihLQyVjdPmv+CiM45UoJ6GXeaKnMc0+ZGd2EMH4lzGQEi+cG + Zwzg/lILBorIf4tMhODCZvTkm9BBbthMvtyUrEETtWML41xHOp/PdmOkKA6jJcnkyjHkm3Y0JZATenSo + tKtRYpShQBeKInUoSrUhqLNGShplPN2ITaVu7K6Kxv4qD/aQA+8pNOJIlROnmhJxU3sqbuD5XN+ZjNN9 + 6TjemYT9rTHY00od0hWLPb3x2NUThy1dMVjf4ZaygVeLUtAdwgB2+8pBd/gMYJENLDDW7sIoufhIE8+5 + wQSR/eszgEUmMM/ligFsvWIAN9Sa4PV+bQDn1xuRW2dAljCAKxlvhAnMNqtcg+wyURZaizzGm3yisFzP + fkFQPwqUlRklE7iMKCniviK+Jl+Dgnw18jkPSwZwjgqFORoUUVMVZak5d2tRzNhWxBhXQM4ugZy9kBw9 + P4kxjiikvi8iShKoqajxS+MUKBEGMDWSMIDznDJC7sv4dQmokEdOOmsApwoDWB/iM4DJV3MYo/OopwpE + mWhCKgNNrldxxQAmrOTwRDVjfC1jfANjfzvf22ePwAh16AjfP2yPxJAlDP0mxhFrGPoY33s8cnSQGzYz + ttdTA9aSK9WyP3lT9ahOFZWaeK3ZlnFfSaqR52lAHvtaDh/nJumRnahDVjyvOzlnVjzvRZKZ18SOonQH + ijI9EiTzlyhMd6Eg1YWcJBuyhAHs0SOZHDZBMoDJK8iJo4UBTN7pIM8UBrDIArbKF8ISRZ4TNR82cnmP + SIwg/3eT94vfxNy2YHjsIYhxhVJ/hiOacAmz1xFEjhMAk20JDLZA8uUQWMU6v7HkNeS80eS/0bxPMYy/ + seTBcbyHCWlapGQZkUY4PKEQ5Z+FASxKQKdn8xzzDMjM0yMrR4vMbDXSMqlzyW+EAZxMrpiUTB6UFIRk + ctfcHAXnDl479sGSIuqzUt6bajmaGuRobVEQUdRoMmq1SMkA7ifX62o1o75KhcpiGYpzw1GYFYa89DDk + pkQik8eaSo4VT44e7RSGr6jQ8rUBHOMKRyz5fQKfE2v/pvN+Z3J8Z80YwDnkcgLZ7HsZ7BeJBvH7kQ/x + BpFMEIA4bQAStf5I1CxEovIa5FgWojo5FG3kvJ35kegujJAM4P6KcAzVRGHI6zOAuytC0JC3ELU581Cb + Ow81ufNRV7QQzVWB6OZ5+gxgGWrqghn//FFYGsh5OpzjUM24YUFxiQ1p1L9JCRryTB081DU2kwJGrQx6 + lQxmrQJ2sSSczQC7SSctF2fSq2EU1QZ1bMU2YRCtyPbVKaHi+xSKSERFhUEmC+PjqG8YwCIz2GIzwumm + frvKAFbpFFDzNSIj2O6ywB3jlMpBe2LscHqscLisUtloscbwNwxgfp9KSQ3I74uShUKjkZFzaxHtsVBf + WZGQaEUK52PJAC5yU1N7MNHkwtaeGHJ9N06RW51uV+OW5gjJAD5ZHYzD5UuwvzwYe8tDsL1oCbYW+WNb + 8RLqnwVYlzOXWmQedhYG4ZhXjdt63Lh9KBo399lwtEmLTUVyDFGT1+nnoFTthwKNHwqpEwo1c1BmEJUB + F2Iqfwm2eGUzBnA4tpbysyUDeCb7d8YA3lCwCOsLF2Mdv3tjeRA2VwZjhzcEO6tCsKssiMfgj135i3Eg + bwmO5AfgWF4ADmcuwr6UudidOEfCvqQ5OJA6FwfT5uJACrdFNq8wgdPm4GjmNTiePZeYh+M8pxPsP9fl + zcfJ/Pk4njsXR3muhzPnSCawyAI+TBxLnoNr+VnH0ubjcOpCfsdcbBLmb4wf1rj8sFGs+5sVhLsqVXi0 + Vo/HvCo8WR2Fb3sj8XRVGL5dFYxvly7Gt/Pn4vv5fni1ciH+OmMAn+/wZf9+PoMveuQ+A7hThXPkrx+T + 677ftAj/8M7F6xXX4M/Vc/H7ysX4Ba/RSzz/F0rl+FlHHJ7vTcMjzR5cW6rGsGcBCnj9Y1R+sKrnQcs5 + Tq4IZR8Ng0JJbf+fBjDbKD4vsn+Dw5cgKHQRwiL4Hr5WpYuUoNSGX9kWGb06kxxGq5LznkqCMH6tTh21 + vw5Wu4Z9WpQ957iSWh8kQ5gQ2b/llfmYXrUMD3/rbrz19uv4/MtPpGxf4HPiEr4Smb8SLuKrr4TpezXE + vlnwtV9ewpdffIZLF8/h4oVPcfGzs7hw/hN88vGH+Pijd/HR2Xfw/sf/xr/ffxNvv/M63v7nH/D3P/0c + rz7/KJ689RCOTHdhY3sBtncU4vBQFW5e1Y57dw7iuzdtxF9fuAMf/u5x/O3nd+Enjx3EQzeuwC37e3HT + 3h6cOTyAB26axM++dwR/ePkW/PmVW/Dbn57Cqz8+gR8/vQ8P3TyJE9vrsGUsE2sG4rGS429ND/UTIfjK + cursceqrZd5QTDdFYEuvBkennDizOQ13bM3AzesScYra5OZJJ26bcOK+5dF4ZlMGfrQjHz/amo9n16Tj + kYk43DHsxtEWLTZyrluWcQ0G2GeXZS7A+goZDnCePzUQQx7l4rjTYjo7CN3RfuhLmo/p0lDsaNfj+EQ8 + Do26sa5ZLHsXgJbMxaiIn48i9wKUc1x7Y/zRFB+AjpQlGE5biNX8jr251+Dmknl4tD4AL1JjvdwThZ+1 + h+HFpiD8uGohflx2DX5S7IeXS6/BXxoC8Q778hUDuCMC5yQT+CoDuDMMH7YH473WwCvG75vV8/AX9vm/ + Vc3F2/UL8UF7EM52h+GzfhnOD8jwcXcIPuoMxqWlClymvsMqk2T8ClwmLk4o8dFIBN4bDsN7S/n541H4 + 9Ir5K6DB2SklPhyLwAej4fh4XBjAkfh0UoZPp2Q4Jwzg1Spc2qDBF1sN+HKXDV9Rz3223YEP15vwtwk5 + /rhUht+PqPDbQQ1+ztjzXE0YHitcgsc5Vz7DOPzdcjl+zPngZw06/LLFiF93WPBajwO/ZPtTXvufdejx + Iu/dz1sN+F2HFX/uduKP3R68MZqGj/Y0AGfG4Vccb0ZRvAUZblF6NhwWfQSMRgYZQxRUJNoiA1iYv6KE + nzB/Q8W6wBzsAmFRHNhysf5bkPQPj7BIYQCHQhYRiqhITgiEWk4ogqDj+/XqAFh0gbAbgxDjYJCPFiVB + 1CSmFin7t7EqCQ1VcagqFmsB2yXzV6Cq2Ioaiom6KjuqSUZqSHwbqyg8Gl1XGcBXZwBrpfLP5Wn+KEqY + j+LERahKC0JNRhi8Gb5S0GJbZAJ7syIl1GRHQWQ7SZAey1CdGYbK9ABUZvjzfYtRl+OPloJgtBaGoLVI + GMFB6Chi5yV6SnwG8OyawCL7t68sDJ0lfD0n07qsxahKmYdiTuy5nNhTLH5IMPkhiwOmjEGjtXoxhtqW + YN1oKPasjsSp3VrccUyLB29S45HblXj8XgOefMCGJx+044kHnXiceOJhBx590Ij77tbizE1aXHfEgA3T + coz0hJG0LEEZg1eacwESLD4D2C0MYBJnsQawVALaGgGLKQxmknSTLggGTcB/Qx3ESX6JZPpeMX8VS6Qy + 0DoV76c2CFZdMGwk+3ZDKCyaIPYjUQY6CBa1P6wkYhbNYoIEmLDqFsNhXAK3ORjxJHopccIAVvsywuNV + iIuWwS0yfCyBMGgX8Pvnw6pfCKclALEkxKlxMmSQ9EpIikJ2kkxCDsnlFfN3xgDOSYtAVjq3M+TSmm45 + mUZkUAAkxuqkjBIzA45eE8XvYBDRCAjz10e+xDq/AlKpZ7sZTmHiOv7bAI6bQXy0S0JCjPsKxP4Ylx0e + vk+YwC6b+YrxG+Mwz5i/PuM3KdqJBPF6hxEuq5aCQINohw6JbgOSY0xIiTUhlWM1k0I4N8UmiZGS7Ggp + 67emKPEKxPq/PgM4Fa2V6WgTBnBFGvclorYwHg2FCWgrT0NXbTb6GvIx2JQvZXn0VKWiXWThU5BXJVCI + 8frWxssk1MVFoD4+Es3JKnRmGtBNYdFOotvKsducqEUrhVZLmgGNbMuiI5HvCERJbBgasjSYbErGvolK + nN7aiZt3duPw2jqs7c9CZ6mZ4jKURJ5E3bgAbv0i9tFgxDkikUDin8T+mma5RlprYKjIDwc6F+KJdRH4 + /WEV3rvJgEv3OPDlfVZ8fq8OF+5S4KwwfW8Jwwc3czK+lTgTjvfviMQHD6gkY/T88x5c+EUKLv+lGPhX + JS6/XYkLfynC+d/k4eyLmXjvyUT8/YwLvztowEscf890LcQD5X54tHwenm+S4dd9Fvyuz4GfNerw/VIZ + HuW8cHPCPOxNX0iCSUJZFIpt1WpspaBfW6nDWJEKgzlKdGXKeW2iUBMfhKroxaiOXYim1GAGZzP2DKbj + yGAKDrbYsb9CgaPFQbiXBPaZxgj8tCMKr3TL8Ku+CPyWgeD11Vr8Y7sFHx6PxtkbY3Du9licvy8GF7/l + xMVHbTj/uAUfP27DPx804+8POvDvp9LwyUs1+PLvE/jq7HZc/vJakp8zxAM+fHkf8Nlt+PCN7fjJw628 + R260ZgSg3BmEMgr4cgsFnEWDeocSHdEKDCdrsKHEhcMtKbhxIBN3L8vBo2vz8OzOFDy1y42Ht1jw4BYz + HtpuxwM7bLhriwm3bTDgNIPh9VMa3DDJ7SkLbpqy4eYVDty6kiR/eQz2tet4zZQkFEqsKlIQakwXEBSo + K3L0GEvXYohCtydGhhaKwwYKQ8kAdslR41aimqj0KCUDuCxGGMAaFMSqkOUWBnDYjAEssn8DJcNNmL5i + 3XObNYytQCis3HbYKdrdcridCgmSAczvSOF2pkuJnBg1CuK0KI7XST8ylyUbJQO4UvzAwDFTnabn2JkB + BXhthg6N0vpUBnTmiCxwgufUR/E9UGDEWJkFE5UmTNYYMDFjAEtZwHU6CWvr9VhTq8MakR1NMb22Wod1 + fO1mxritTQ7CiS0NLmyssWJNlQkrGReXFxkwKUo6E0v5HUNi7d8cC9o577VkcHxmcJxy/Ip1slpz2Ir1 + iXOM6C+2YaTCjdFKD7p4nHWpcgpmxsU0OWOeMH+1FMbsC9lK1KfJON59BvAYz281z28dP3Ndphbr0jUS + 1meQMGbpsT7biDV8foLXYpDzRRfnlJZkORr4fm+mApVZCpTkKlCcp0QB26J83ssKI2qrraj1WlBfa0N9 + nQVNYv00YQC3CtjQJso+t9sktLYa0cQxWeNVoKoiEhVloRAlyuq9cjTXKNBdr0VvvQ49vLZ9texLDbxG + HQ5Mtrswws/t4zhsKFKiMDnoKgOY85AwgOMiEce4FMs+FROrJTgni5LJ0RrY2C9M1kiKj1AKlhCpFRCm + sNnsKw8tykTH870JAvGzBrAayUkGxMeqpT4ozN9ZA1gqJW0IonAPgFIfgEjNIsn8FQjT+CPCEAAZ47fC + wrjlVksQmbRRevIxxukwVSAUxnDJADa5GcOiDVKpaLEWcARjeZB8IV+3RDKENTYZDDwHe4wOMclWxDKm + eBLNMMyUgFYwhgsTOEyxGMFRC6WMYLHPV3bJB/FvXYVW/INXrOUTKBnB4o+DegoyYfIKszdSHUqIzwqT + IBdij0JN/LnQ4tLD5tHDSu5pdKgkmJxqmN0qWGM00hrFjgQNnEk6uBLVcJErODxRsLsi+b4oOGKj4EqS + w5OsRHSSErHxciTEEnw+3hqOOH0wYnldYhUi4zcAcTzGBB6LaN1R/jCHzYMuxA+mcGEAz4VbtRA5tjCU + cu6oJjetjwtHc2wgWmMWo51zd0fMEnRK8Ee7exHayK1abfMktNsXoMM2H51se/jcYFwAhhOCMJYaguXk + k+sKVdhU4vtBY0O+jAjH+rwwCZtyw7AhJ5TjRZi/gdjEdmt+KHYXa7CXXHhHgRMbss1YnWnCVAbnEcbY + BnK6JmsAujzh6PWEYcAdhGFnAKZigrCGsWZTcjC2p1GEZUVgV7Yc+4t0OFplxfX1blxb68DuIg02Zkdi + dVoIVqUEE0FYlRwolaBeS468KS8SmwrEcUZiTW44VpNPry3kvlIF1hRGYDx9CQYp9HqT56MvYyGGcxdh + OH8hlhXNxyrvEmxpi8SBfj3jmwUHuszY0cy5i2NvfaMJKxgjJziuh7yca/j52cn+5EZ+0Gr8YDTNgc54 + DfvVHGiMvEccR1Yb+6lVQc4q52OfATwLMQaFKWy1ynzg2BOYNYBdjihyNpH9q5LGnDCARflnkXUilgMQ + ywIIOKxBkhEsGcBJKmRyHsvm/CYM4Mx0OdIzZMikRigsZgwo1SK/WI2SSj2q662ob3GjpTsG3UPJGBrP + wOh0LtZurcGeQ73YvLMLW3YOYNf+Uew/sgLXXrcOx0+ux+mbt+HeB47gqaduxLPP3orHH78e9917GI8+ + fBLffeY24lY89q2T0hrBzz59K37y/L146QWR/fuQhJ//5GG88tPH8LtffRu/ffUpvPrzR/HTHz+A7z19 + C5569Ho8/vAJPHL/MTx49xHcc9t+3H7zLtx8ahuO7p+WDOCN63qxc9tSyRA+dXwjTh5ei4PbxrB5qh1r + BmuxvK0EQ1XkicXxaMrzoDrDirJ0E0rY/4rSjCgg3ytkrCtm7BNLhVQmkOMkRKAlJQL97G9jBUrGoihM + sO+MsS+PFIRgsJgoC8dAZRSGqxUYpHjtqVShjfNvT5kJy2rjsKm/HNdvGsGZvatwcusYDq8ZwJG1A5Ih + fHjDMHau6JLWAF49WIOVfbWY7q3FQF0e9ZkLBTFalCQaeawONOXGoC3Xzlglw3CenPHTgP2tDpzqj8Gp + HitOtCpxpCYE23PnYk/BNbi2ehFubAnGbV3huKUrGCfbAnGihWgLwfHWUBypD8bBan8crlyI62v8cUdL + KB7rk+NHk0b8dIUJL68w4BdTavx6ioJ9UoE/TMnxpwk1/jxpx9+m4/DPtSn419pk/GGpFb/q15DXyfH7 + USXe3mDGB9tsOLtLZPaKjN5YXNwfiwv7YiSjVxi+53ZYCTvhwPkdfA351gXRSnAQNlzYaZHwxS4bLu91 + AgdcwGE3cMSFLw87cPGQDefYnj0aTQ4Zh7ePxeK3h1Px/cMVePRwOx44OoLbD01hx9pRTI4tQ9/AODp6 + p9DeN43x6V3sy2dw/c2P4AZi9/4b0do5gbjkIugtCVAbYhGldiIozIDAMC1CIg0Il5uhM8ei0tuB6dXb + sWX7YUxNb0Vr+wgqqtpQVtGC8nIB39q3Xxujjf8rxNq9ZeXCpPVBWsu3qkkycgW8NS3S68RzBYVVyMuv + QGFRNYqLRfnmuivvmV0DePbzfCapDyWlomTy14+vfo/Y/s/Xzz4/+3lX4+r3zmL2XKTy0+JYK/m6GZRW + 8LNLayXjuqikitteVFc1oLGuFV0dfejvGURHSw+5jcicvirrmBDrBc8en4TZdYWlx7WoKBfrF5ehurwY + NRWFaKrMR2dNHpY25WK6oxDreoqwvi8fa7qysaornUjF6o4UrGpP9qEtVcKKlmRMNsZjtCZaWv+3p8yK + XqKnwkbY0ct9/YR4bjYLeKDEgsEiMwYKTWytGCywYECs00pe2s75o53zSFc640GOE6OFcZgq5fdVZxBZ + mKJ2HaWmHcqJRW+aC63xFtQ6NKjQy1BOPlFFHiKqFPVwfhfL1KzOt2Izv2N3ufhTrQ17qTOPet24oTUZ + t/K8Tncm42R7PK7vSsLx9gRqrxjsb4vBoe4Exqsk7OtLxPaeWGzocGNNm4vnTnS6saLDJWUBT3V6yB/d + EqRtYqzDiZEWnpcwgBsshPlK+7UBbLliADcS1V6DrwR0nUkygHPqDciq0SK9asYEJmazgIURnFeulVBY + oUNR+dcoLTfyPhvZV/hZjPFFYr3gAg3y81USRBnoQrF0mkAO58dsttTlJYxrxelqzuUqCYWiTSEPl8xf + xrkZFCeQo8eTo5N7icpKRdRahdRGuU4ZIZcyf3OpwXLJRSVcZQAnk0cKAziDPDfbHiG9R2QNF/J9JeSe + ZTPr/1aLrF/J+KXuIKrMEaglZ20g1+1kO2SXYcKlwgpy2hW811OM7+O872PGCIxaOL/z83qo/1oZ1+up + AWvilagib68QJawTtSglhyxJ5HVI4DXh42xh9lIjpsYqyfmVSKO+TSGfTBZ6j+eQzjiSSY2XlWhCTrJN + QnaSVWqLMt3IT3ciN8WOrDgT36vn+8greA6xpkjJ/PXowuDWBsFOziwMYCkLmDzaIl9AzIdNs1Ba+9dD + PeqxBkvLs3lsIYh2UHO4w8hVIhBDOD3UqY5gmGyBMJLr6W0BMNiCYHZRr4rlZHh+MckqCbEpPIZU6gzq + 5UTqreQsI5Koy1wx4XBEh8AZEwJPfBhSslRIp57LyNMii30iM4fny3idkuEzgJNSQpCQRJ5MJCUFI4fP + VVSYUF1tRiX7oZc6vb5GhZYmNTo7qOnaed0bo9BUT13YqJQMYLEsTwM1bXVpFMoKItn3IlGQGS79RpfF + PpVKjh4nDGBRfYVcW2DWAI51+Uo/iyQAUcUn08b3kONlsw9kO0U1rtn+xn7Gx2mWEKSag5Eyg2T2N1Ee + OsUQiFT9EqTpFiDfsQRe8pIWyQCWoasgHN0lEZy3wtBfJSMiOW9FoJPasT5nIWoy56E6cy6qCG/eAjSW + B6KL59glDO8mGeNMCErKA1BYFozC0kgUlnBsFBs43njNhQ7hOBG/IYg/LBql3xgjpUqDJp3PAHZa9NIa + wEatnPvl0CpFJUKRkKKCXquUIJagE61KKYMiKhzhodRiIQGQy6m7NHyfyPAVGcD8HFE22u4wS6aukZ8v + DGAlP1spXmdUQ6wL7PTY2BccsLuF8Wu+AovVIBnA0nrCfL1KHQUlvzNKHg5ZVBj3yaQ1Xh1OA9zRJuph + C1LE74+CE5ZEo9PrwWiDExs5D+7vceJ4pxHXt6pwY3MkbmwIxfHqYOwrXow9JYHYXxmOPRVh2FUeil1s + txUHYmPeYmwrDMBh8sEbWiy4TVRo6XXiEPvX5uIIDMYEo1o1HwVhfsiPmoM8pZ8PijkoUfuhO34Blucv + wdZqGXbXybHLG4HtZYHYXLBIMphnDWCx/u967ltbuAirivyxuiQAa3lfN1cFYXNFAGPGYuqw+dicPQ+7 + cxbhYB65Xl4ADmQuxO7ka7A9zk/C7gQ/7ONjCUl+2E8cTJ2DoxnC9BVm76IruL5wMUG+SJwsmI9r8+bi + WO41OJr1dabwdVnzcV3mAhxNm4f9ifOwLXYO1nv8sDZ6DtZ45mBbvPjMcNxbrcajNTo8Qc78lDcKT1VH + SAbwM1Uh+E7ZEnyneD5+VHwNflO1GH+VSkCH4HynzwD+YgZfdkdJBvClLiXOt4XiLPntJ21L8H7zQrxd + Pxd/r52L18vn4zUe52/yFuH31XK8PhSH18ZS8ON+D+6p02Fd8hLUGuYgiffAppwHPbW/WDNaZI3PQioj + PlMGWhjBUfJQKfs3KMwfS4IWICw8QHpOb2IfFhm8RrGmL/uqBF/lWYNFRW3Hvk2Y7RpYnXpqf/Zjl5Fz + ok6C1a6Fia8TrdHEcWPkPJYWg6bmauzYtQFPP/stvPvem5IB/OVXn+KyyPDFJXyJi/gCF/DF5c/wxZds + /xcIA/jy5c+l7Qsi6/f8x/js3Mc4/+lH+OijD/D+h+/gg0/+jfc+fBtvv/tXvP2vP+O9f/0Jb/35Zbz6 + w0fw+M37cHhFJ9a15mFTSw729BTj2rEa3LK+DU9ctxKvPXs93v7l/fjjj2/Gs/dswU37enBoXQ32Tlfg + 6OYGnDk2gOce24mXvnsYzz+9F99+cCMeOLMct58cwfGdzdg+lS/xkKVN5B51Rs5jWgxWC+gwUqUh/4rC + Ui/1fWsktvVrcXjKhpNronH9ajdOLLfj+DITTo9ZcOuoBfeM2/HM+iT8aGsmfrgxE99ZlYzHJ+Pw4Fg0 + bumzYn99FNayT6zImIMtxUE42qjHGWqpByfScftAHK5tNGBbSTgmUudiZcESbG9Q4HA/P3t1Mk4vj8P2 + Ni112CI0J8+VlnTM0nM8m+eimHq/0joHtc456Izxw/JkP+zM9MOpgrl4yLsEz3fJ8FI30R6GFxqD8ILX + Hy9UzMdLpXPxSuk8vFEXiHdbwn0GcGs4Pm0Px7mOCKnvC0gGcEeoVOb5/dYgKeP37965eKPcD38q8cPr + ZX54i/3+/bYAnO0Oxfn+SKn888ddIfiwIwgXhuW4PHWVAbzSiC9W6HBhUoXzE0p8Mh6Fj8Zk+GhCLq39 + e2GVDp/NQDwWWcCiNPQnExESzk7y86dkfF6JSxt0uLSZ2GrApR0WfL7bjs+o8z7eYMI/liukLOA3xrT4 + 01ItfsUx+0J9JJ4tDcazJaH4Pq/1D8pl+GmtGr9qMuIPnTb8qceBNwaj8Yd+B37VbcYv23V4uVWLX3cY + 8KduK/7a58LrPW78ZTQFH+6pA24ZhV9hrBGFcRakzxjARm0Y9DoOYAYuuS4cEeoQhCgCEa4KnQGD0f9g + AAvzVyCSwUoRFSlBGcXJQAQseQg08gDJSBQZozaDIDwkOiQBoqRvQaYJ3pIYNFQmorE6gYHFLa37K8zf + 8kKS5VI7aikoGmpcUnZQfaUo/2xFX5MHw21xGG6NxUCDWAPYhi4K/ZYyNWpyGKSTF6Iwfp7UetN9aee1 + WWGozRQIl1CTLcxeH7xZ4d9AdWYIqjICSQSWoCbLH7XZS9CcLzJ6g68YwG3s7ALdxcFXTGDJCCa56C0N + RXdRKJ8PREO2P6oYNIo4uec4/Uhc/JBq9UNBoh+8hQxkDfMx0bcIu9eE4LqdMtx1QouHb9XgqXvleObh + SHzvCQ1+8LQVzz/rIKLxg2dj8cPvROP7z5jx1GMGPHSvEbeftmDfFi1WLZOjrzEYNXlLkOleiCSLP2JM + AdKavA6SI7spBDaTWPuXmDGARXa2noRVYNb89T0Wpbz9r0DcQ7FPGMMGTfAVA3jWBLZqg+EyhhMhsGiW + zJi/XxvAAjb9YrhMgVI56KQYsf6vSkJSLEm0J1IygG1mHsOMAWzRLZLKuH7DAE6KkpCVKEglCaIwgq8y + gIX5m5vOfRky5Ig1TSh48nLMfEwCE2+EmyLFahAETQGzTiP9A88kWrEOBzFrAEtrdMyuA2xjAHKITGDb + 1xCmMBHttEkQhq9ArNtn/op9swawaIXxG0eiJiCMX2H6JkY7rhjAsU4TPHY9YhjwYsV6Bm4DnzNKBrBA + epyR52qRBIgQI5V5cagtTroCYf42lqT8nwawKAndWZOFnvo8qQx0b102uqpS0FbkRlWSCpXC9E2Uoykh + Cq3JSnSkqNCdpkZ/lgkj+Q4sI4ayKW7T9OhJMaA7w4wOoiXdiOoEOYp4n8rjI9Ccq8eKllQcmKzCTVva + cdP2LhxZW4c1fZloLxbzTjAynYsRb1oAp34R3FYKIEck4jg3CAM42zYX9anXYDkn7BtGA/CjXXK8eUqD + s3cb8dW3HPjyITMu3afG+btl+OR2Yfxy0r41VMIHZ0LxLh+/excn50c5GX/PgYs/S8RXf8jD5TdL8NU/ + y/D5m6W48PsCXHglH+e+n4X3H0jC30668StOyj8YDMJDldfg4eIF+E6NDC93mfEaiekvW8z4SaUK380O + xV3JJIrpC7A1dxE25JPMlkZgo1gToViBkawI9LAPtqVGoiVZhtq4IFRHL0ZdvD+6ciKxssmOvYPJONwX + j8OtFhyqjsIJktKHGjixd8jw2qAar4+q8RcGmTdXqfD2FgPe3cvgcMKNT097cP72GFy4NwafP+TG599y + 4sJjDpx93IV3HnLgrQc9eO/bWTj/s2Z89dYKfHVuFy5/deKKAXwZ9wNf3IPLn96Ct19bj2duq8KWfhPq + khahlIKzzKFCqU2LcquW4lyORgr3njglpnKMJNkkED1JuHNZOh5alYYnt8bi8e02PLzVjAe3GHH/Nivu + 2W7B7ZsMuGWtFjdMq3FquQY3LtcTJtyynKRghQ1npl3cduNgpxY76pXYVKXE+lIF1hZrsL5Ii7UFBqzM + 1WEiXYUR9sXeaF5LikNhAIvyz/+T+Vsao5bKM88awMlOzkPsR7PmrwT2LQnWCAkW9jkBsc/pioKTQlOY + BsIAjudnp7gpmNlmxWqRF69FYYIORYni3+RmlKcaUZ6iZ6tFVboe1QLCDCa8oixmugbCBG4m2rOJHA26 + RQZwgRGjpWaMV1owVWvGZI0Wy0mul9dosMKrwwqSuBVeblf6sLxcjVWVeqxmbFtbbcU6rw0bap0S1nnt + WFVhxvISI8bySfyySbSIAY693hwDOjlmW9INaCLq0nRoFNuZRjRl6SWIjODuPCv6i+0YLHGgI8+M2jQF + qlKi4M1QoS5Pj3p+biPRkKOSDGCx1mNfuhrLMrRYmWnAKp7fmgwBDdZk8t5l6qXSz2uyTViVY8IYXzPA + a9TBuaWJ97IuWY6qNDnKM+QozlGiOFeFonw1Sos0qKow+QxgyQRm7Gesr/Ua0dhgQWuzHa2tVrS2mAiz + hOZmPRoaeP2rolBREYHy0hBUUsjXUtjXEx0kSD0NPgO4v0GP8Q4H1g7GY+1AIqY6YjBYb0NziRbFqaHI + iFuClLhAJMSHID4+HLGcB4UBHCdKgsfrkZCgR1yiCTFxYm0lIayjJAPKZ0T5cMWI4rbdFoE4YToJSJm/ + vuzf/8kANrKf6g0BUvbvrAEcpV2MMNUiCTLuFyWeFRYZVLYoaJ1K6JyqKwZwqCqAPG0Jt0Ol0srCALbG + GNiqJANYGL8BkfMQLF+ESMZ6URZalIi2ejSITjRLJrCALVoLPT9fx3NQGcOurAUssoFFZrAwfQWuNoDl + 5IjCBBatMH+FeBMmr4I8ctb4/U8DWGdRwsrY5iD/tEXrJfNXb1PAaFf5soA9oky1GlZeM1u82pcBTH5g + j5ZL5q81OkoqC+1MUsLFGCVMYFEKOileyZjJ+2bj/dMHI0YThDjylVgiXh2MBB5vHLmLMIAt4fNhCLmG + 7Tw45AsQrVqMLEsoijnHVJKb1saEoj5mCRqiF6HRswhNnL9bPIvRLLZdCzkvLkCTg7DNRzPRYl+ATtdi + 9MYGYDg5FEtTwzhGwjGWEYYVOVFYnUcRlR9BIUXkhmAtOarA+my2WcEcM4GSCbwlNxg7iyNwoEKHo95o + HKmKx97yaOwsc2NTiQujqSqKpRD0xEZgWZoGkxyLK9KUWEEOtDIhBOsS+RmpwdhFfru/UInDJTocr7bj + dGMMbm1LxOmmGByuNGF3kRpbeExbeGxbcmTYQg68NTcK2wsU2EMOvadCg12ce7aVKrG1TIntnIv21BrZ + qrEmPwwTWQEYzQ7AWGEQlpeFYHlFIKar/LGRQm1XjxyHh3j8AybsowDZ3qjFRo7BNZznJjm/LeNcNlDO + sVsgR2FaKBLc82E1XQOTaS50hnnsS9dwDPhLY8vM/mxlf7GYydf42MC+e8UANvvwnwawqGwjIOZz8WOc + yMT/nwxgYfxegS2IzzNuUJOk8xqLLGDBG7MylMjIkiMzh8fK2FRYrEZOoQJ5bIsrRCaXGTXNDjR3xaCj + PwHdIykYEesCr67A2IpKTEzXY3pdK9Zt7sGuPcuwd/8Erj2xFrfduRffeuQEnnzqNJ588jQefui4ZPh+ + 75nb8L1nxdrA1+PxR09JBvCPf3gPXvzJ/XjpRw/ipecfkPDzFx7Gr3/xOH718mP4+YsP4cfP3Y3vPHUT + nnjEVzpaGMAP3HUYd926F2du3IEbT27BkX0rsG3DANav7cb2LcM4tHc5rju6DtceWIm9G4awfmkjprsr + MN6Qh4GyZLTnRaMh04HKNDOKk/UoJApE5lSyFvnJGuQncu4mTyxjX6yKDUVjYhh6MiKxlP1ojDxnnDxp + nH19ND8EwyVhGKmMlMzfpTUqDNeIdaGUaC9SoK+ccbAhEbuW1uLMzgncc2gdbtw2gaNrBog+8sY+HFzd + hx1T7diwtAEreysx1VmOyfZy9FZnMPY6UBCjQXGCARVpVtTxmJsY+5pTIjDIPrauhv2w3YnrB2NxqteO + a1vVOFQbil3FC3GgfCGubwrCrd0RuLM/Cmf6wnBDZwhOtAXh2uYgHG4MxH6vP3aXzcf+0rm4zrsYd7aG + 48l+FX48YcTPlhvxi+UGvEKeM2sA/3lCjtfHBH+z4K0V0XhnTSLeI94cd5LXmfHGUj3enNDinbUmfLTZ + hvM7Xbi4VyAaF/Z4cHG3B5/tcOL8dgfObbXjs60OwuXDNr6OrcAFPifw2RazhM+32gC+D3s9wEEBF746 + yPfut+GTA+SPh2Lw/rFE/ONoAl47koHvH/HisSNdePDwUpzZP4mt08MYGx5GT98ydPVNoWd4LVZuOISD + x+/CTbc/gTN3PokT19+LpeObkJpZJRnAKn20ZAAHR5gQGK5DECGM4AiFBWmZpRgcWYltO45iy/YjUkno + xuaBKybwbMniWcPyP43SqyHMTF9JY5/ZKV43m80rzF9hAgsDVZi+efnlyM0tk9r8gkppX1GxF8UlNRLE + 60Qr9onnCou8KCIKC6ukfbOYff0spNfPQGyXiAzjmWMR8BmuvsdX75+FOI/ZbfF8cbmvVLNAUWmNL2tZ + mMCl1ajgc031behq78fI8BgmxpZjqH8ZWho7pbWBRXnoCr5PwGcAX2UCX2UAi+cry75pADdW5FEb5qCn + OhOj9dmYasnBdHsOVrRnYrozg0jDyo407kudQbqE5dRz442JHL+xGKh0cdw60F/hRG+lD/3VLgwI8Lmh + CqLMicFiG4aLrBgqtEhLkozk2SQMUEP2ZZjQl8n9uW5MFMZiuiwF66hZN9flMl7kYY2Xx1WRgeWlaRgv + SMRQZgw6421otOtQZ1awFX9Q1TLmqrGUc9JK8s1N/J6dPK5dFdRYFVZcS81yY0cqzvRm4cbuVJxoicNx + 4trWOBxo9uBAK+NhTyKODFKrDqRgJzXZpu5orOZ8Md3hwnSXzwCe6nRheVc0Jrs8Eqb4mhU9MZjo9mC0 + zY6hJgsGRSZwsw/9TVb08nEX2/ZGC9oazGiqExnAZlTVUEPU+gzggrqvDeBM8n9hAmfOgjFYIKdCKyGf + nECYwLMorjBKJrCAKA19xQQu1EgQpaBLiPI8AWqVHB3KBDLJtzOol8jxBYrTlShJVaA4hXw8iW2yAkVJ + cqkMtDCBC+Pl1FVspRLQouTz1eavD3nkbPnkmzkOOdIYm0UZ6DRTCLKorbIZa/PJq0Tp6ELqyRJqrXLq + rP82gGXwmiJQR+7ZaAhBNz9j1CnHKo8OG2KM2OTRYoNVhbVGBVYZo7DcLMc4P2OQ39vuYX9gnK+JlaOC + PFCUrS4hfyyKVaKQ27lss8m/06kVRfW5JHJIsVxIkqhI6AhHvODr5PMJdj7Hc0mOViMlWncFabEGKRu4 + MMMtVWHLiDchlceT6CD3JA+PNkZI5u+sAexQB8Ch8JdgI382KxbDrFwoGcDi9y9hAItqeP9pAM9mAAsD + 2OL0GcDC/NVZ/aGlTjA6QsiBI+COVyCa9yqauiommTolRYN46k5hAiek6yRTWJSFdsaESRnAHmqahHSe + c6YSadRy6URmrlJCaiavQ1o4EkX2b3LQTBuM7CzqKsbmujqHpMPqvVo0kse1t+rQ3UWNSf3e1iRHS4Oc + rRK9HSZ0t7GfU3fVlCtQWcz7zPhbRG6ZS+2Ywz6VJv6oGR0p/dZ3tQF8tfmbbGf/oYbKFuYvIUqI51Kv + iD43C/EHhByHMIcj2MfCkcl+JrLNRcnxdPL4THMwciwBKHIHoTo5nHxAhvZcUQY6DJ3FwgQmVymPkJak + 6CwNR2thMBqyF6MmYwEq0+dK8OYsRH1JINprIjl+5WiooTaoCkJJeRAKqTMLSmTIL4pCNjVsBvVvfFwU + 3DwPkWBjpD7SqSN8mDGArSaNtPav+N1Rp4qUzN9ZA1gkoYil6HzL0fF5UfKZ+5XyCESGByM8TCyzKEzZ + rw3g2UxgYeTa7CaI9YBF6WdhAMv5nWp+j8gCtjnNUploYfqK1whY7EZYbUaIctOzBvCsCTxrAAsDT2ck + 97ZppPVVY+LMkgFckB8Nb3ks2qujMVTvkv4ss7PDhoNtehxvVuBUYwRO1YXiaCW1QMEi7C4mj6pR4mij + RsKRBjU5lZz6Ihx7yQmPU5vf3OXCzb0xONZqxnbq+eUZwWgyLEBu8BykLvZDZogf8qJmIPNDidIPvfEL + MZ0fiG2VcuytVWJPtQw7S0OwtWgJtuQvwuY8gQXYmLeQ2mshVnPfCh7PisLFmC5dgrUVAVhftpjPzcea + zDlYl+aHbZnzsDdnEQ7k+mNv5gLsSrkG22L9sCXGDzvi/LAn0WcEi/ZA8hypFPRx9pvrCwJwuvgqlAj4 + z2ARThUt4Gvm4br8ubieOF2wADcVLsHpvCU4xj63O2EONrj9sNbph3Uxc7Ehdj72pvJ5jqF7KlV4pFqN + J2oUV7J/JfOXffH7PIfnyhbhBfLT31b74836QHzQFioZYBe7wr9pAPcqcalbjvPtwTjbugSftPnjw5YF + eKdhDt6uuQZ/r5iHP+X7EfPwl+oI/H3QhdfH4/HqoBNPNOuwjzq1yzYPGSo/2KPmQq/82gBWsz9rREVN + QqMVmepR0h8I5MIrmskADg71R6QsWHrOaFLDyLncZFNLENvit4NZA3gWwgQWBrArxoyYWBvi4h2IS3DA + 5TFJ5q/TLTLgjXC5TMjMSkBHVwMOHt6J73zvcfzjrT/j47P/xvkLH+DSpU9w6ctzkvF76avz0valz9n+ + LxDG72V8LhnBFy+ew/nzn+AzAWEAf/whPvjofXzwyXt4/6O38e93/4Z//+sNfPiv1/GvP/8Cv54xgA9O + tWF1UxbWNaRjW1s2dvcU4MhYJe7c1Y/n7tyGXz97Ej978jAeuXkaJ7a3YNfyUmwezcOu6TKc3NOOb92x + Gt9+YCMevnMVzlw3jOP72nFkZxN2rS3HmpF0DDVYyOF06CgXf6SNIiKppyLRRXQXh2KI/WNlG3X9gBYH + Jq04ttKJY8utODRmwKFhDa4b0eM0dfodI0Y8uTIGz61PxvfXJOE70wn49vJYPDoejXuGHTjZruW4CpbG + lCiXflOrAfcPxuDxiTQ8MByPm9otOOyNwsaCxRy7oTjUocWpETvuWpuE21bG40C3AVPFS9AS74dCvR8y + xJ84tBzDOj9UmfxQa/NDB/v+dOpc7M6eh9OFi/CwNwQ/7FDghc4ovNQejpeaQ/Gz+hD83LsEv6xchNcq + FuGNmiV4pyWMfTgMn7SE46zIApZM4DAJn3Zyf0eoVOL5g7ZgyQB+s/oayfj9Y9HXBvCH7YGS8XuuL0Iy + fz/uDMYH3Hd+UIavJnTAtAGXV+rx1Qo9Lk2pfQbwpBKfjivwybgcH4/LcJa679IqPS7OQJSDPrdSJa0H + LEzfWXy2Qo7P12nx5WajlP0rDODPtpt8f+LdbsXZTSa8s1qFf/L9/6SufHNMj9/3qvGLJhl+Uh2JH3O+ + /ElFJF7yKvCrZgP+1GnH3/rdeHPQg78OuPCnHgt+06HHL1uUeKVNjd926fCXHjP+3ufEX3pd+MuyJHyw + uwaXbxqGX0GsEQXCACbBsosFuDmg1VJN9lDIiHBVMEIVgYgQ5fxUAuFS+WdfCegQ3/puMwZwuEyUAhAl + dRm4GNTU3FYrOClwArjaALaT2AkDWAT8tDgG8VQdKgvdqKuIlwxgb6kHZSTxswawt8yBuioK+lo36qtt + aPKKcjp29Dcz+LTEoL9RLEZvRWe1Ce0kyQ3FJB4ZAShMmM9zm4vSlEUM6sGoyw5BQ24Y6rNJMGdQmxOB + GrYC3qwwCTXZbLNDUZ0VgurMQLYBkvkr0JQf5DOBiwQCrxjAXUXBPhO4NOibBjAHYRsDVFP2IlSnzEFx + tB+JsC8LOJ8BxZvLjl/jh2Xdc7F+cgGO7wrBHSei8NidGnznITV+8IQMzz8dgRe/r8LPnjfj5Z/Y8Iuf + eNjG4Oc/icaLP7TiuWcsePJhKx643YmT+63YNq3FKAdBQ2EgctwLkSzMU2MA3IYg2HS+ks0WfQhMhlCY + SbRF+78ZwCLTd9b4/U8D2CgZwML8DbliANu47SaBd5vDYNMGfMMANqsXSLDqFsHJ44m2hkh/AkgkGRcQ + GeGCCM4awEbdQn7HAlh0i+Hk41hXqGQApyfIkZ7ENlGGrBkIAzgrSWSTREj/NJw1gHNIbHOz2MeyNMjP + NSM324r0ZBOinWo4GGisBpVEyAQsouyzSeczgGdMYPFYQDKEzSRSwggW/6izk1CJ7GCLEXazQWoFnFY+ + R4hsXynj9yrzV5jBPtPXLkEYv4nRTqTEuZEc6+I+J6+HRTKB4xjQ4hngEj3GbxjAQoSILGDxb9TCDBcq + 82JQU/S1AdxQkoKm0lQ0laVKxu9/GcBFCZI5PGsA933DAHahJlWDWoqKZhL1TorApbxm4wU2TBU6sLIk + Gms4RteWx5NAebAsx4almVYMZtnQm2NHB69tHUWH9GMg70d7gRnTrWk+A3hzG27e1nHFAG4rNnBsBiHD + 6Y8480I4pDLfFEAUh7HsF8m830XuRejKXYiNLYtx9+pwvHJcj3dvN+HzR2zAUy588S0LLt5/tQEcfMUA + Fnjv1hC8d7sMHz2oxqdPW/H5i/H46tdZ+OqP+fjyb4X48s1SfPGnInz5a+KFQpx/Mgfv3pqMP+524IVl + MjzqXYAHChfgqcpwvNhmxK/7XPhVpwO/aDDhJyVyPJwViKMZ87E1Zz4Jpj82FIVgY6mMBDMCw2mcD5JD + 0M7+2MZ+2RAbhBrPIjTGL8FwkRLrWx3Y1RuNg90uHGkx4Jg3AjeQyD3eFoGfDirxl+UmvLfegvc3GvDh + ViM+2mPCx4et+OSEDZ/e6MBnt7tx8T7PjAHM7UfdOPdYND78VgzeeTgeHz+Tj0u/7MBXb63E5XO7JQP4 + Mm4l7iWhuRuXL92Jrz46jTd/OY2Hr8vHqlYlquLmo4TissypQgmJVYlNizIK2yprOFo4TodSFNhYbsHR + Ng9uHU7EfSvi8dA6Bx7aYMKDDFr3bzbhnq0W3LHFhFvX63Djag1uWKnGjSt1uHmaBH/aiFunTTgzbSUp + sOOWKQeO9eqxt1mN7TVqbK3SYGulEVvLjdhQKAxgDSbSlBhJjJIM4HbODZIB7JrN/lWhkkK9IlqFshiV + ZAAXx2o5r6qR6Y5CEuOLy8J48//BALbwHB3se1cbwAn8/BR+flo0RXKcFjnxOhQk6lCYZEBJihnFoqyY + QJoOFRTc5UQlt0VGcCXHUVUaRbAYT6lKNIi1b9MVaOM81J2nx1CJCaOVFkzUWqQs4MlaHSYprieq9Zis + 1GGiQo2JcqJUg/ESsZaiDlNlOqwoM2K6zIxVFXasqvRhRZkFYwVGyfztpwjty9SgJ0uHzgw9WtP0aEgW + 5dn18KZoeSzcTjOgjscqDOGmdD2PyYzufDt6C+0UyKIEPPsC77U3Q426XINkADcQYh3guvQonwHMcxtN + 12J5Jo+H37WK37WK37tabGfq2RqxOseE5TlmLMs0oJ/XpC1RhXoK5KoEGco5PxSlyFCYKUdhtjCA2d8K + NagsM6GmykpYUFXBa1uiRUW5BjVePRrFj2eNRjQ08JgaeEwUjY2NPK56vq9SJhnAFaVh/IxwyQBuINpr + 1VIWsIAwgKf7YrB5LI3IwKreRBJoO5pLdChOC0N6fCDn4mAkxIciPj4SsQnsB8IAFsZvvAEJiZyLKX4T + kiyIjtXDzv5hczCG2OUSzDaZVIZWGFE2W6SUAewRa42y/8QyvgnExan+PxvACp2/tAawjHFUaQ6Fhn1T + 61CyJb8itITKIrtiAAfLKa40IVCZo2DgGLZEM5a5KOwtEVcM4IDI+QhV8jN1FG7mcJhdKrgTTFIG8GwW + sDCBTU6lZAQryA1EFrBAlDYIKnJEgVkDWMltYfzK1cFQaEL/ywCOvMr8jdKGS/vEc3qKvf80gHVWOaGQ + jGCxFrAoU20kJzDzutnjFLDFEtHcJqzcZxMZwYnCBJbDLUrgzRrAnijE2YUBHIJYnmcCOYpAojYUieQn + 8eQtHsUS2MLJLcIWwBG5CB6lP+J5jTJMIShk/Cl3hHF+Ceac7Y9acqg610LUMx41EPUuwsl9zgWod3C/ + ja1tPpq43RkTiP6kUIyQe4xmEZlRWJoRxrEShonMUKwgt5zOCcMqclEJ5JirJQRjbVYQNuSGYGthGPaU + y3HIa8CJhhhc15iE483JOEbsrYvFdIGO8YWfnaHC2mIrNpbYsIXtlnwD1qaEY0NyEHbwu/bmyXCkTIMT + 1WbcUO/BLW0JuL0zBTc3xzPe2LC/VI89RWrsKdYQbLm9l+3+Ui3FnAlHasw8BhP2Vhuwh8eyv96Mw80O + qd1SpsSqglAsLwrFdHk41tbIsK42DOvrg7G9IwKHhjQ4JtZ+HzRiH8Xj9kYNNtRopGoGy8oUGC5To5ff + 25yvRAWvUWZ8MDmPPznWfOj0C9if5rOvkGuKPioMYOv/bQCLLGAJ5J4Cswawg2PQ7ZAjWpT3/z8N4GDJ + AI71hF9ZBziDc5yoHJPF65yRqUBmtgIFRTrkF6qRXaCQIExgkYlVVmNCdaMdda0uNHfFomMgFV0Dmejs + J7cayEffSClGxr1YtaYD6zf1Yve+cZw6vRn3iVLQ3zqBJx4/hccePYknHzuN575zB5777u148vEb8MRj + N1wxgF/48X34yQ/uxY+/f4+EF5+/H7946WG8/OJDeIHPP/fsrXianyOyf4UB/PB9x3DfnQdx5y17cOvp + 7Th93WbJ8N2yvh/rVndh66ZB7Ns1jmMHV+HQ7knsWNOHVYO1mGwrwVJvFvrIGVsyXahLpQ7jnFWYoEVu + vBo5nBMzOc6y41XIjo1CXky49Ke/UncgaslzOlLCMETePZoVjjH27fGcUCxjXxkpDsfSyiiMVAkDWI2l + tVoMVKvQVaLEAGPhypY0HF3RhnsPrMJDRzfg5u0TOLqyF4enO3F4ZSf2r+jE5qUN5I9VmGorwlhzAZY2 + 5KGzLImx1opC3t8ixv8yHqs33YxGxp0mjpNB3qe1tSbs6aA+GorD9RTCR9s0OFTPfloTjBNN4TjTq8Rd + IxrcO6LG7YMRuKknFCfbg/maxez7C7CjbB62Fc7B7kI/nPAuwt3tkXh6SIefTJqvGMCvLtfgN5Mq/HZC + gdfH5RTaKvx93Ih/Tznx4cpYfLQqDu8uj8a/Jh14Z8rKbRM+XGOm4BcZvC5c2u3ERbaiDNiFbU58tsWB + 81udOM/2whbx2IULm/n8JicubPThM75X4PwGs4SLm6z4iq/HTg+wL5pw4yupjLSVHNKGDw5E470jifjn + 0ST8/tpcPH9tPZ440osHDo7g1l1j2DY1iGV9fejuGkJP3yRGxjZi47YTuPaG+3H7vc/gvoe/j9vuehJr + Nx5ETmEDDNYkqA3RUGhdUtavyP4VBnBAqAbBEeKH5xQ0NPVj05aDOHjkJmzdfgSDwytRW9+D0opmlJSI + Us11KC1tkDBrYIpyyP8JkXErMnSFSVpSKozgOqnkchWfq6pqkt5XVFSNgsJKogIFBVe3VTPmrjCCq1Fc + IgxcYfwK8DmpnTGCZ4xfyTSe2S/aK9sz5q/PAK6ZOWaxRnC9dFzFM8dWRlxt/M7iagNYmL6FPJZZiPf5 + ykvXSdm/XW19WDo0jhXLV2Pt6g2YGluJ7o4B1Ne1Ss///zGAK8sq4C0vRU15ERoq89FckY328kz0VaVj + pC4T483ZHPtZmO7MworODKzoSCfSsKKdbTsfE1PUc2ONiRipjcVgpYfj1o0hbwwGiYFqDwaJgSq2Yn+5 + C0OlTgwVO6h5bBgqsGOYPHMk105dyW3qx5EcB0bzXJgqScCqsmSsr8rC1ppc7GgowJb6fKyvycHa6iys + q8rGamEEF6ViJDMWfQkOdFIb98SZMJhowVCiAaPkuKvIXzcVWbCj3ImdlQ7s8zoZO+NxU28mzgzk4Mae + VBxvicWRBg8ONXqwr8ntM4DJBY8MpeHQSBp2DSVjc38c1nS7feavQKcbU108zu5oTMxgeU80Vg4kYIqv + Xdbpwkgbz7PVieF2nne7EwNtdvS02NHZbEFbkxmtjZyTGDvrOBdV1upRVmeUDODCehPyuJ1NDTBrAGfM + GsCVWmQR2cT/ZAAXVRhRMgOpLLRYH7j4a5QWG1FRaERlgQEVArnUKkR5pgrlWTMQ20RZOtt06vdUaimi + JFmJ0iSxFjA5enwU9brPAC7wyJFHXnu1+ZtLvZQvsoOj1XxeiSyHDJnUVxnkrdnUVzmOcOQTBcIEdkRI + VVbKnXJUkjeLPxlLa/9SawoDuMYUjnpDGJr1oehnbJ9yqbEhxoTtcVbsijVhp1OPbVYtNphUWGlWYDnf + O0Ie280Y3ywMYHLDCnJDYQDPZi7nE9lEpsj8jVZI5m+iRyaZjWLZqThbKGIsofAY2fI7xfI/8U6CfFsg + jkjgceSLShOZbuSl+QzgFJcG8Tz+GBN5Bo/ZTY7pM4HJJ9QBcCqX/JcBbNcugkuYvtSjIgM4mhAGsCgB + 7XGFINoVKq0B7HAFw+wMumIAay2LoTb5sw0gPw8lD46EK15G/i6XlkKRquAkqxCXqpbMXw/v26wB7IwN + 4XYYn+f5psqQlBGF5CwF0slpsnJ9WcBfG8BfIzMzUiov3tDgYt+1oqneiNYmPbo6jejtNqGvi/qxedYA + VqCzhbqzxYDmOg0aqoUJTC3J+F6WR+5ErZefpkIW+1UK+1N8tAwxvAfRnkjEuCMR5xJG/Iz5a2PfIb/L + IafLJnKpqfKpR0TJ8Xzeax94X9kP813kILxXoix5jj3KBwffw/tayOtUGh2CqqQw1FPjteX4DOCOojB0 + FYeiU0IYWsm5m/OC0JDlj5qMRdTx81GVPh/enMWoKwpCU0U49WQkqsqCOccHkPMFo4BaM68kEjn5UVIZ + 7SRq5hiek4O80sx+pKPm8Zm/MwawVg6LQQWTXik9VsvDoRG/l88YwHo1tZ0o8SwgjOAZE1itlEEuo4YS + 1TXl1F9qvn7G/FXzdQJiLV9hAl9tAEcpI6FQi5K6wmAzQJR8FtnA/2kAiwzi/8kAjpSFSuadMOsM4rdS + u5a6l30+xY6C/BjGkji0cd7vr3dhObnvhmYjdreocbghCsfrwnGiJgQHSv2xI3ch9UUwjlOrn+6yEFac + 7rTiulYjDtWpcLBWieNNRpzucOAk59C9Xi3WFYRhadISeNXXIGOJHxIX+CE9wA/5kX4okBMyP5Qr/dAf + vwgr80OwvUKJfdT6e6sV2EX9v433bFtBALbmL8aWvIU+AzhvAVbmLsAU24m8+ZgsXIhpHt/q4kWYzr4G + K9L8sCrZDxtT52Bn5gLs5b3fk7EQu1LmSgbw5mg/bGUrTOCdbHeLdXz53LHsRbg+Pwg3loTglvJQIgS3 + zqIiiAgkArjfHzeXLiYW4RbijvJA3FnB1/DanMhchN3x12CNzQ9rHH5YH7sAWxP9cYi68HSRDHeVyfFw + lRxPeuV4uiYCz1SH4tnqYHy3MgjP8bOfL1uEFyUDeDHerA/AB22+DGBhAH/e7cMXXTJ80avApa6oKwbw + 2dbF+KhpPt6tm4N/eefin1Xz8ZeiOfhLwVz8oyYM/+i34G/jMfjDsBPPtRtxQ4kco55FyFP5UTfPhV7h + M4CVCpH9Gwk9+51BR/1uUErQ6KKg5BiIlIsEwUDIokKgUIazv8klA9jCPmVz6aUSz2abRjJ7RUlno/gd + YQZm7rOJDPQYM8eYR1rjVyAh0eX7U0KsjXOVG1nZSeRNeRgY6sDho7vw+JMP4NVfvYQ3/vpbvP/hWzj7 + 6Tv49LMPcOHzsxLOX/oY5z/75H/FxUuf4ssvL+Lzzz+TzN+zZz/Ep8TZj9/H+++/i3fffwfvffBvvPP+ + P/D2v97A22/9Ce+99Ue89Yef4ZXvPYhHb9iF/eNNWFmfhpW1ydjQlIaNTSnY3J6JI1Ne3HNwKb5zxxZ8 + +/aNuOv4KA5vbMDGpblY3Sd+n8rD0a0NuPvUGO67eQq3HB/Goe1N2Lm+Crs2VGLziiKsGEhBH/lEB7lB + M+fYxgIZGvPC0JQfyrksBK0FgeirDMaKtihsHqDWn7Di4HI7j8mE3cMa7O6T41C/EteyT9zUr8HDE048 + TZ3y7DSxIg5PL4/F47z3D4y4cKbHiGM1kTjIPn1drQy3sy88OOjGE6PxeHgoGnd0mXF9gxL7K0NwsD4S + 13XrcNOIFfesjMOd03E41mfCOs6ZnfFzUKrzQw7HbhHbasM1aLRcgxbXXPTFzsWazIU4kLcYZ0oC8Xid + DD9s1+CFDiV+1h6Fl1tkeKVJhlcbwvBaXTD+4A3EX2sC8F5zGD4iPiE+bRUGsECoD/+HAfynYj/8pcKP + ++bjk64QXBiMwmf9kfioI0gyhEVW8Kd9HDejalye0uDyci2+mNLi0qQaFydU+GxSiXPjCpyl1vtkmYyt + zwD+YrUBn68y4LNpDS6sFOsCK3BueZRk/p5n+/lqNb7aZAS2WvDlNqPPAN5mwoXtJlzcbsX5zSZ8vEGH + D9Ya8OEqM/WjCW8MaPBauwKv8Bq/UqfELzlv/orz6Z84j7454MFbwzFENN7oseF3HdSiLUr8opHXq1WO + 33dp8dceE/7eb8dfqH3fGEvE+3tq8NXNw/ArjDMjP0EYwAYSEwYX2RLIowKkBbojiHAO8LAoYQCH+Exg + Rag0mCMVfBzF18iICD4fGSwFDPGPJamcrlhTldtaBYOZgoFOHgTNrAFsFAZwqGQAp8SQKCaRdOY7pDLQ + ogS0ZADnW1BaYCF5NaO2wokGr4ukwoPGGgda6uzoFmv+tlB4NHnQW+9EZ5UJreU6aSDU5pO0pCxCPjtU + /qwBzIm0PicEzQURHBwybpNkErVEXW4EanOF8RsKb1bIjAEczDaEjwPZBvoM4KwlaMoN4PuXoEXUM+cA + E9m9Ap0FMwZwyX8awMHoyF+C5uz5qEnxQ0U8AxcDSIXI/E33Q3eNHyZ7GHSm5mP/5kW49XgoHrldhh88 + rsFPv6vBz5+T4Rc/luHXP2MH+IUJv3/Vhj+86sbvX4nGa7/04JcvOfDC95347uMuPHFfLG4/4cH+9SZM + dkdKBnWeeyFSzUsQZyAZ1QXw+i+BSe3vM3i1wTAJA5hE+38zgK82fv8rA5iwaIX5GyrBpg+Dg58VTRIf + TfIvykCb1Ytg0Qj4DGCTar7U2g3+0j8fY5zhUj+Im4EoCyNK8gkD2KTnezQLpIxhpzUAsc6wrw3gRNH+ + hwEsMoH/wwDOzYpEHsltXo4wgE2EHZmpFpJPPdw2JewWLT9bL8Fm1sJKMmQyEgYtoZHKo1y9LodZGMN8 + jWQOC8NYP5s97IN4bOF7rfwMm0l/xQiezQ6ezfZNifWZvgJpCdEkxG4kxTj5vA0J0VYkxliQwICXPIOr + DWCRBZyVyHFLEVKe40F1QQK8RYnSGsAi+1cygEuTpbV//9MArrvKAO5tyEdv49cGcHuxBy25FrRnUVin + azEsyrhWx2Ebg9f2mhTsrsvAvsZs7G7IxLaqNKwrjSeZcmGUIn6QbU+eQzKUqhOiJBOpu8iOlW0zBvAm + YQC3zRjAWWijUC2ID0S62x+xloW8Vv5wWCl+hAFsCUGamWMuMQQjZYHY2xuCx7dr8Nc7PPj0YRfwTDTw + HQ8+f9yCC/er/lcD+IMzIfhAGMD3KvHp4yZ8/nw0Lr+SgS9/k4Uvfp+Dy68X4fKfSoDXSoGXy/Hlc2U4 + d38e3jwcj59PavBE3RLcVzgfj3I8/7BZi1f63PhNL0Gi+nKNDk8Wh+O63EXYljMXm0hyNxUEYVNxBFYy + CC9NDURPQiC6Eik2EjnnRAei3rUQnUlBmCzXYHOLDdtaTdjbasCRRhLg2lDc5F2CZ3oi8KtxNd7Z7MDF + A2I9OBc+P+zApWvtOHetGZ9eZ8SnN5px4XYbLt3nxOcP8XlhABPnH4vG2ScS8OFjyTj/3WJ89WoXvnpr + GpAygK/FZdyMr3AHvvz8dlw+fyu+ePcE/vzCMtx9MB1TdZGojBEGcChKnCoUk5gV2dQoNMtQxPnaS3Ha + GRuGlQUa7Km34FS/G3dOenD3tAX3MNjdv8GM+zZbcNdWK27daMSNa7Q4tUqDG1drcetaE86sMeHWNWbc + xoB22yorblvN162w4fpBk/Rvsb0NOn6uAfsa7NhdbcXmYj1WZisxkSrHCMd3b3Q42j0+A7jOrZgxgNWo + 9KhREcP4QVwxgKPVyKAwTKKg/G8D2Jft+00DWFRDECV7rzaAVUhwazhWVUjh52XGa5GVoEN+kgH5ySYU + phCpBpSkC+hQOoOyGZSnqhiDlKhIUqCcx1+ZEE4RyuNPV0qZwD1FBgxVWDBWa5XKgY/XGjDm1WNZJcE4 + NlqqwdJSNZYWabG0UI3RIj7m9liRnjBivMiMyRILJkvt3LZiOFePgUwtutLU6EzXoCPNV5q9MUWHmkQt + qpO0jDkaHgO3k3USvERdMsljhgntnBe7851sLRy7fF2KCtUZGtTlmdBQYER9voHxko/TFWjmPenh+Y1w + jhjPNGIqy4AVxHSmjvdMjxU8jukcE1bm8BhzLBjNNKGX80JLIj8zJpL3KRxFceHI5TXJSeX8nClKQKtR + lMf7yPteUWoijFJGcEGeHIWFUSgvVaC6gsflVaOqRrRKeGvUqK/XopbCr7IyEhXlEagiqisiUV8dhSaK + JWEAd/E1AsIAXtkfiy2TmUQ2Vg8k+QzgUh2KhAGcEIykuBAkxIchNi4K0YwzMQlaxMTrpazf+CTOwekO + JKfaEZdghFusJe9Sw+70wepQXDGA7Q6Cc5nLEQm3y/cvd4E4kX2QZJTKQksGsPH/MoCXQKZdAqUhCFp7 + BAwuCiP2SZ1dBY01CmrGWYUp4hsGcLgyCHJD5EwWMGMW3yPKPQsDODByPvzD5yIoaoFUElpuZNznMTt5 + bsL8jWc8EYhOskiloS0cWxpLpGT+iizgSDWPixxRmL5XDGA+FuavMIHF/qsNYLkwgLlf/JFwNvv3agPY + TOFnjzF8bQCbeU6cb9QmmXTMWjsFpTMSBsIiZf3KYPPwugoTWJjBcUrYeI8ciXK4hAGcpERiAhEtfriL + RBznrXhDCJJ5nikGgtcpWR8imcAxvF62sPmwhy2CS8YYxMeJvCYZ5Cz5xiCUkoNUOIJQ5VgEr3MBahwL + UOsQpu9CtovY+iD2zaLBuRidCWEYSJNhmHPXaJ4Ko9kKDGeEYyAlCMMpgRhLD8YEOebyrFAiBNNsp8k7 + V5NrrskJxabCcGyn2N9XpcERzrMnmqJxfXsCbuhOxw39mTjcFo+1ZTqMZckwyfGypdqNHV4Pdle5sbvM + ig3pkdiUHoJduSL7NwrHyrU47jXjhkY3bm6Px5n2JCkT+HClBfsYg/cWa7Gf/V9gb7GG+7Q4UKbHMc5L + 19bZcLjGgv18/z6vCQcbbDjWKn44t2MrY9jaQsY6xsDVHG/r66KwqTECW1sjsK9fjRNjJhxfZsTRQT32 + t6uxvUGDdVVKzlcyDJGD9xdEcb5RoTVfTe6tQUmGElnJMnIAf+jI++TkiAr2fZ05bMYAls8YwOwP/y8G + sFkygAXCOMZmsoBdUdIfMRJilf9hAIf4zF+2gnd6nKF8PgLJiVFIS1bMGMAaZGSqkMl76jOANcjMUyAz + V5jAKuQVqVHAObu4knOWKJVY70BdayzqWxNQ2xzPNgnNHRno6MnH4NIqLB2vw6r1XTh4ZBpnzuzC/fcd + xiMPH8ejj57E00/ejOefuwc//MGd+PaTN0qG8KwB/JPn78WPvn83fvDsHfjBd+6QTOCXfnQfXuT+H373 + djzL1z/xyMmrDOCZ8s837cYtp7bi1ImNOLBrEpvW9GL1dAc2re+TykAf3DOFvVtHsWm6E1O9lRht4nFW + pKIrLwaNqTbUcN4rZfzL57XLipEjg0iNiUI6x1m6OxzZrhDkOQNQyP5fFe2PlqRgDKRHYCQjFKMZwRhn + H19WEI5RcqOllXKMCgPYq8ForQ5DRF+FFiNeO9Z1ZuPGjf341rUb8fiJrbht5xSOLO/AwclWHFrein2T + LdjQV4UV7UUYb8jG0tpM9FemorUgBlXJRsZ+FQp4j0viGCMY++oZhxs5FvsLlFhdZ8KuTidODMfjun4X + x5EOR1pUuK5diVv69bh/3IaHVljx4IQedw/LcYbC//q2IOwqvwZbiuZgY+4crM/yw7Y8PxyrWoR7u+X4 + zpgZL62w4+UVZryywjhjACvx+3EFRbYcf1umxNtjOrw/YcXZ5S6cn47B2VWx+GSlh60Tn6yy49M1FPwb + bfhiuwtf7HTiosj03WjFZ5vsEi5sdl6BZPxu4PPr7Ti/dgbr+H7i3FoLzq+x4OJ6C77YYAe2uYHd5Ml7 + PPhqpwOfiuVDdljx/l4P3j2UgHeOpuGN64rw0+ua8fSRPjywdxC3bB3Bzol+jHd1oaetB4ODU5ic2oLt + e67HqVsfxn2PPIfHn3kRDz72HHbtO4XSqnaYHSnQGKM597sQqbQiQm5CiGzGBA7TQMX9hcX1mF69A9ee + uA3XXX8nNmzaj/bOUZRV/h8ZwNLauI0+zBinwhyVMnGF8SqZrLU+I/Y/zFlhEs+aoZIhy31XIN5f4nuN + 2JYMZUJ8tg88FmGgSmau7zXic6Xv5LZYT1c8P2vgivfMHouAeH2R9B3fNKqlz5zB7GPx3BUDWHyXZOTW + z5xvPbzeJvR1D2NybBpr12zEls07sH7NFowOT6KtpRu1Nc1XDGBpfWJhCPO90ncIM53XU6yFXMbjKC+p + JipRXVqG6rJC1FTkoaEsCy2lmeiszMBgbS5Gm3Mx0ZaDqY4cLO/MwlRnBpZ3pBNZWN6eKWGqNR1jjckY + ro3HYHUshmrisLQ+ESOE2Bb7BqqiMVgZjaFyD4ZK3RgqdmO4yMl534WRfBeGqRdHsu1YynaCY3d5SQLW + VqVjozcLW+vysLOhELuIbfX52FidhQ3Elpo8bKrJxbqKHEwXpWEiO4Eay4NlGdGYyPQwrlqxLM2ANaIE + dIkd2yqd2F7twL46N463J+OmoRzcMpKHG3rScKwlFgfqXNhX78SeRif2tcXgoDCAh9NxeFkG9oymYusw + j6k/BtM9HizvcmOq241JYqKH3yeyftku74vFypEkrBhOwnhvDEb5/EinB0u7YjDE9wx0ONHdZkdHqwUt + zSY0N5lR32BCTb0RFXV6lM8YwMX1vizg7Fo9sqgr06t8yJRwtQHM2PNfBjDfL8xfYQKL+MPH5WVEuQ+V + 5WZ4S82oLjahirqhKl+HqlxqgWwVQd5MTl+d7UOVaMndqxjvKtLV1DDUVMmzBrAMBeTEwgDOIxfLJZfN + lUzgWUQhn9xWVGAqjlVDZAiLzMxsUf6ZGivPEU6EosARRoSjxB2JMqfIAI5CNTlzLXmol/G7hqhlfG8g + X2vTh2KYHHe1W4dtcRbsTXDgQLwNB90m7HMYsdWiwRqzAissCoxSs/a6FGjh/F/HY6xirJo1gAuFAcz9 + mdzvM4B92b+J5ADfMIDNoXDpg+EWCSqWcMRQH8aSywt4iBgH359sRW6GAzkzBnAieWssj9FjIM8QyQ/i + z4XCACbPnDWA7eTPswawZcYAlrJ+hQFMiEp4kgFMuMg5nY5AONhK6//ahQFMbWBbAq1lEbXAIvLnRVIp + aCtjr5262BEbQQ5PnZEgzOAoyQwWEOawK5av8fhKQAsDODrRZwInpEUikVwxVSyPxj7gywKOlEpAC+M3 + IcmXBZyeHi5lldfXOdDcaENrkwWdbWb0dFvQ30v0GNi/RRloXvsG6q0mDUHt2aBFC/t4Q7UW3nJq9CIV + SqjxirO0yKM2zaAWTCaHF0u+iUxgkQgilm5JYp9JnTF/s8jhctkfBPJmDOBCB++nS/U1xJ8OPAoUuX0o + cPqeLxCPyflKo6kLY8Oov0NQy3NrzQ5HZ3442gtC0VEYivb8ECIUzURjThDqspagJn0xKtMWoiqd3D9n + CWoLglBbFMLxE4zifH/kEwWlIUQkcooikZHNfkQdK/4wLDSe0HUm3n+dOuyK+Stg0EZJWcBi2TmNPAJK + WahUIXPWANYooqBUREoZv6IV5Z9FGWhhAiujwhElC0NkVCiU4vNmDGClwrdGsNgWRq7I9p01gGUKvkdJ + ncbvNFiEweYzfYUZ/D8awMJMvsoAjhAVPWXBfBwJnSFKMuI8MSYkJ9uRnxcLb1kCWjjn99S6sLTGjJV1 + HKeNKs65kThSE4qjVcHYWbAA23LnYy+v1/WtRpzpd+LWPgEXbuq24wj7yUFq+SO1GhytN+BgrQFbS+RY + nhGAgdgFqFb5IWuJH1IW+iEn2A8lcj+UKQm21WwHYhZhdW4YdlSoqVG02Fulog6KwA7erx2FQdiev4Sc + bbHPAM6ZjxXZ86i/rsGy7GswljcPk8ULsKJwPiYz/TCR4ofliX5Yk+yHrenzsCtzoWQA70yZKxm/mzx+ + 2EyITOCtbIURfChtAU7kiYzfMNxSHoHbqyOJcNxRFSHhzqowIhh3VYfgzuogIpDbQRLu94bjgVoZ7iwP + x8nsxdgTPxcrTX5YZfPDxthF2JkahKPUhqfywnBHSQQeqozEU14Znq2NwHeqQ/Hd6mB8vyIIP6wIwI/K + FuCnpfPwWtVC/LXeH++1BEkG2EVRBrozTMLnnZH4vFuBCx2R+KwjBOfaAvFpWwA+alyId2vn4p3a+fh3 + zUK8WTYPb5bOx78awvHPPhP+OR5NLuvBz/vsuK/WiNWJwSjTzEV05DwY5bMGcBhU7Osmoxpms0aCidAZ + FdBK2ejh7I/s7xwDwvzV6RXS8yKz1+4xwu4Wf1DQSZnmJrNKKulsIkQr+p3daYDHY0ZGVgIqqwtR6S2i + JkuAO9qMpGQPdVkGGpur0N3bjPHJQezbvwW333kaT377Ibzw4vfx1zd/j/c+eEsq1/zxuffx6YWPcPaz + D/DpuY+u4OynH15pBc5xWxi/n3z6AT748B28//6/8eEH7+CD9/6Ft99+C2/98+/459tv4h9vvY6//eW3 + +Nuff41/vv5r/OXV5/HSE3fi/mObsWu0FlO1KZjyJmBNfTJWkBuNV7iwvj0dx1bX444DQ7jj8AhO7erC + rukKrOhJwURHPNYNZ+LQpjrceXIUd9wwjpMHurFjbSU2Li/EllWl2DBViMm+ZGmJifZqPRpLVKin3hdL + n9bmhbANQlNBAHoqQzHVrsLGATN2jNuxa8yKbcM6bOlVYHNHBHZ1yajPI3CiU4G7l1rxrQk3npzw4Jnl + sZIB/OR4DB4aceHuPgtubFLhJHX+zU1K3N1hxIP9djw25MYjA3bc02XEzc1KXFfPz2qOwuluDW4dMuLu + CSfumvLgZJ8ZWyrDMJgyD16zH4qF+Wueg1axZJZrMfoT/DGe6o9NnG+PFATi7vIwPNuoxo/a9XixXYOX + 29X4FdvftCjxuxY5/twShTfqQ/GP2iB80BSGj4hPmkJ8BjBxVpQ4b+fjzlDJAP5EGMDtwXi7YRH+WjUH + fyr1wx9L/PC3aj+827wY54TRu1SJi4NR+KgzCO+2cAyJDPlujqERBb4cU+HLcTW+mNLgi0kNLk2ocWFC + iXPL5PiUWu/sqAzn2F6a1uKrNUZ8ucqAiyt1uDDN1yz3GcDnpmR8rMBX63TAFjOw3YqvZgzgi1tNuLjN + hEvcd2mrBRe2mHB+k9B2Nnw0bcE/eM9e71bjj21a/KlVjz+0GfGnDgv+xnlUmL//WhqHf4548OcuM37T + qsXLDTL8vC4Mv2yOxO871Pgr4/Tf+214o8+B18cS8e6eGnwpDODiBBsKk2zI9JjgED/QhfsjMmIxwqIC + ECZKP3OACwNYGMKRyhAO4hBp0e8oZSiDUYhk/oaHBSAyMkhaNF7L4GRkEDFrVTBpGeyUDGxiHWDJACYJ + EgawicSHZDDWHYEUEgBBBopzrPCWRKOuIkYygEtySWxzjagssqCWA6bJGy0ZwC31brTXu9DTHC0ZwH1N + bgYgO9oqDWgu1UiDoJqTZnHiAuTGzLliANdmB6ORg6OtWI62IgWaC2Royo9EQ34EGgsjUJ8fhrq8UNTk + BKM2h202g35OCLzZgdznywCuyfBHfdZiNOQsQlOeP0mDyP4VBnAQOgmfAewrAS3M376SUPSKzGAShjYG + nvpUP9QzyDRm+KEtbw56y+dgum8utk/Pw9Ed/rj5aCAevi0C331Ehpef0+C3P9USMvzhF1F4/TUN/vI7 + I/76eyv+9jsHWxf3ufDay078/Acu/PBJF555MA73n47FsS0WrOqLREdJAMnRQqTNGMAOnT9MKn/ek8XQ + kZjqNCSX/38MYN6//8sAtpL4ivLPcXYSOxJ7lzH0qgzgRZLxa1TOk0zg2Sxg98w/H6NJggVE9q/DQnJr + WiIZwBbtQtgMXxvAyTERSBMGMMmuZADPQjKCI5GdRFJ2tQGcQQKZJUf+jAFckEfynmFDcrwRMU4tCbcw + aQ3E1wawMHeF2StMX71OxeuklP6NN7s2h2QIz6zRMbuGxyx8/+RT8HqqJCPYaTVeMYBnM4CTo11ITfAg + Nd4jmb+ZSbHS45Q4YQg7kBznQEq8XUJanBUpsRbJ/E2OMUoGsC8L2CSVISrJdKEiN0YqBV2VH4f6omQ0 + lgoTOMlnAFems03j/kR482NRUxCLprLk/zCAs9DjTUFPRTz6y2MxQtE+VujAdKkQx1k40pGHI615uLa9 + CCc6inC0LR8H+L6d3nSsKvBgPNeBoXwnenltWzMMqKNobMrUoa/UhdVt6ZIBfOOGVpze3IIja2qxZiAL + 7eVGFFFgpEX7U/gs4nWnULJSpNhJpM0hkmjs4H1bWReB68bl+OFBKz54JAVffDseeE4gGp8/ZcaFB30G + 8MczBvAHt4RIkEzgM6H4SBjAd3MCfkSPS991AT9LwVe/SMMXr6bj8u/yAWEA/7YCeKUK+AknxScq8c7J + TLwybcSTTcG4h+TwgWJ/PNugxM97HfhNnwe/6/Hg1WYznqmW4+aSIOzJnYvN2XOxpWAJtpAIruU8Mp4e + hIGEAPQlhKI7Pgxt7iVocS3EUHooVpGsbibZ3VJPskrRdLQhAifrg3CmYTG+NxCO36/U4JO9blw+mQjc + EAuccrO14+JJAz69XotPb9Tis9sYNO6x4NIDNlx8xIHPvuXAucfcOPdkAs4+mYpLz5UCvxIZwFPA2e3A + l0dwGTfiK5zBl5duweWzp3Hp7UN47bv9uHVHAsa9EaiKWSgZwMUONQrtHC8WJXL04cjWBqDUHIBGdyCW + ZcmwuVqHo91WnBlz4NYxA85ManH3WjPu2WjFHZtsuGmtAdfzHK6bVuPGNXqcWW/BHeutuH2tDbevtuA2 + CcIAtuL0UjOO9epwkAHtUKsFh1vZ5+rs2FKiw6psBSZSZZIB3BczYwC7/tsALp8xgEtEBlAcBSa3rzaA + RYaXb+3fEBJMzlMUaLMGsNkS5oM5XMradFBkuij0Y/m5CdEaQghVDWOUluPUgLwUs4T8VBPy0wwoStcT + OhRniFaP4nQtoUNJqgpFSQqUcE4qio9ASVwoyuIZV1Ki0JipQluuBj2lRowydo3xfMdqzRj1mjBSYcQw + z32gSIP+QjUGC7UYLNCw1WAgX4shkT2cZ5AwUsDXF1oxnG9BX5YO3RTWbclqtCSr0JSkRkOSFnWJOlTF + a1FBlMVrJFQk6CRUEmKtrPoUI1oyrRTGHskIrks3oCpFlLXWor7AgqZiG5oKLWjIFT+qc2ynKtCZqsRA + usgC1mE8y4jJLAOWC2Trua3FFOfa6TwrpvLtGM2xoTfThGYeU7k7DIXuEMbmEGTGhSAjKQzZaTLkZMqR + l03xnieygUXpOhXycqKQlRGK7KwwztvhKC6MRFmFHGWVCrZRqKpiP6hRoaZaKRnAlRRg3sooPpajsUaJ + ZkIYwB2SAaxBX4MOk90ubBhNIdIYexMw2GDnXCkM4PArBrAo/xwdSzEfJ0c0r1tMnB6xjBfxyWakZjiR + kubwZQFzvztaB5dHB4fbZwbbbMKs8mUC2ziXOWfgdrAvErHRym9kAOv1jLeMgwJ6wxLJ/L1iAItSzQby + JnModA7yKrcojayF3qGSjFKFUZi/FFaMvbMGcKgiCJHCpDVRtDMO612qrw1g2UIsDr+G7XzpcZQhRFrz + 1xGrl8o/C/M3KdONhHQn3Inkg/F6GDgWxPq/V8pAzxi9swawqBQTRT4gSkBLBvBM+SZh8srIJyNVM7zx + KgNYrA8sDGCjg/HWY5DWARYGsNYsMo7FaygmTeHQWMV6xhFEOEwuGcyucFg4/m1umc8AjlfCzr7uIqJF + +bsUNRLZxxJjopDA6xVvDkMKx3WGJRKZ5khkmMgdDNzHz4/n8TrDF8Ad4Y8YeSCS1MFI4fXO1AUij9e8 + xByEcnKOSutCVNrmw2tbAK91AWrsswbwYtQIcLva6UO9OwCdKTIMZKkxkqfFaIEOS/PUGMiUoSc5CH1J + SzCUEoil6SEYywiRjLEVueFYKUpCF0RgXaEMW8sU2FGlxp4aPQ42cD5sdODaNgqonmScGkjDgVYP1pLn + jmVFYIpjZavXhZ210djj9RnAm7M5P2eGYjc/c3+RDEfKNThaZcCJegeub47BDY0xOO51YE+xDts5xrbn + K7GrUEWosT2P383HuznXHKwy41C1BfurzdhXZcLuSiOPifsandhba8GGYiVW8diXF4RiZSmPvzoSmxpl + FJRKHOOcfmrKjhPLTDg64DOAdwgDmONWZIL2kVt3c0x35MjRmqcj9zaiKo/cLFMPpy0IOv1i9quFUv/X + 8b590wAmzD7zV8A8g28awCL7V2QCc56XTGDO6xyDIhs/nv0mVhjATo5HyQAm32Rs8BnA5B9Cl3jCkRQv + Q2qSHNkzZaAzs1TIylajoEiPfM7JwvzNzFEgi9cwO1+NnCIBLXKLGTdLDSittqG8xo2yaifKaz2obkxA + XXMqWrty0NZdgIHRKqzf0ofj163Hbbftwr33HMLDDx+XDOAfiSzfH96DZ5++GU89cSO+88wZyfwVeP57 + d+F7T99GnMEPv3MnfvzcXfjR9++cWfv3JB598LhkAAs8dO9hKfvXV/55M04eW499O8awYVUXVi5vxfo1 + 3VIW8N4dy7BzwxDWTrZiWVcphuqy0VuSiLYsFxqSLfDGM87FqJDjEYZvJNKIZKHdOBbTXGFIdwYj274E + BfZFnN8Xo4nzaF9qOIZSgxkfgqUs4GX5PgN4lPP3KOfrUa8Gy2r1WFpnwlC1Ecvq3NjcW4A7eHzfvn47 + nrpuO+7cMYnDEy04MNaIAxMN2LusDqs7CjHRkImRqmQMliegszAaTdl2VCfpGNsYO6IZc2PlqEwSlTcY + 28gfuguUWMHv2d7pwrHheBztd2Ffq+AcGpzqNeD2ZTY8ssqDx9e68chyM+4fVeOuQRlu6gjBrpJrsCnX + D2uo2VZSu23K8sOh8gW4u1eJ70zaJAP453zPK6IE9KQGvx5X4A8zBvA/linxzpgWH02Y8OmEFReWu3Bx + dQwurRFw4+IaJy6steLiBisub3Hh8lYnLgnjd50FF9bbCHK+DQ5c3OiU8Nl68jxyqM9W23F+lW0GVgnn + ZtoL5FYX19pxeTM54/ZoYIcHX26141Nqwg+3WPH+Lg/e3Z+E949l4q3ry/HqqXZ8/2gfHt7Vi1s2DmDv + WB9WdHZgsK0HE0tXYs3qndh78DRuuesxPPLUj/C951/B48/8BEevuw1NbUNwx2VJa/2qDR5Eqe2MAzbJ + CA6PMiMoQgcZt1MzSjC0dDUOHb0Zt935KA6zHZvYIGUBV3nb4CVqajok1Na1S6ir7yBES4jHhLe2FdXe + VqnUc7VXrPfbwHFZjNS0fAkZmUWSueqtaUVDYxeamntQ39CJ2to2CTV8fw1b8bxoBWY/W7xOvKehsZPb + XVfe5yVmv0+8r7aO7+GxideK14hj8mX11kumr8g0FmWnZzOOfaZxnfSaigqfkS0Z3DNteRVbYXKLdX2J + 2e/x1jSjvr4NPV2DGFs6hVUr12Hjhq3YtH47pifXoK93BI0N7ZL5WyrM3QqROezLOBbZyKWljeREzSgr + q0d5aS0qSmuIKnjLyuEtL0JNRT4aynPQWpGLbm8BhhpKMNpWjPH2fIxT70105hCZmOzIInIx2Z6DKWKy + NQtjTekYqU/GUG0S2xSMNqRhaWMqhuu4ryYRg9XxGKyMw2BFHIbKYjFUEoPh4mhy1WjGxBiM5LqxNMeN + ZbnRWF6ciNWVadhUm4ttDQWME4XY1VgkmcDbavKxsSJLwlZub60rpPYoxIbybKwpycB0fgpWF6RQgyZi + uSghnWXBmkI7Npe7sK3ahe21HOci3nWn4MaRXNw8mo9TfRk42hormb+76hzYzXi2pz0GB/qScHgkHYfG + MrFnPA1blyZh7WAsVlDr+YxfH8b7YiSzd7yXxz4YjxWjyZgmJri9rJ/nxueW9vKc+fwA39fd6UBHuw3N + LWb2RzPqmkyoapgxgKkBi2dMYKkMtGQAa5FBfSWQKSAMYOJ/M4CLK82ESUIZY3Z5lRVVlQTbalFJp9KG + WoEyC2qKTfCSk1TnktvnaCQj2EvUUlMI1BB1OQbUksNXk8NXZVBXpahQQh1TJBnAkSiMjrrKAJ5tZcjj + /qJ435q7ZQlavk6BXOqvHJswgEOQ5wjzGcDOMBSRxwkDWGQBV7rI4Z0K1JGn1pCn1jGG1zNuNxlC0Uks + s8iwwa3H3jg7jiS4cW28E9dGW3HUacUeix7rzZzbLXKM2VTodyjQSm3Y4JHDG6NEGeNAMeN9vmRaK5Du + kSGdxyUZwDyH/8kAduqC4NIHSRXsBDzkER5yCid5iIecPoVcOT3JTN1iQWqcAXHkzzHieWH4aoN9BrCU + BewrAW1X+MMatRBWlT8sysWwqRfDoVvsM4B5XWL4vXEO6g1hAtvJQeyBsNsDYGU8NZN/Gq2BMIg/xUnl + nxdBoV9I/rzQlwXsoJ51UdeKtYKjw2CnRhbwGcIyqXVwv9UdDGd0KFzUoJ6EUEQnhCEuxYek1EikZyml + 9YAzyGdSpSxg3zrAswZwAfmN12tFU4MN7c1WdLVb0Uv9P9DnM4C72zXcr5rJAlYTGnQ069DeZJBM4LoK + DapL1Kigji3N0aOQOjmH8Tk1Tok43pN49pNEIsVFfkGelkUdLjJ/83jvCyRESW2hNQrFDiVK2FeKnYz1 + 1AzFHj4mZtsi8ZxbzW0Vyqi1KqjjKuPC2AaSIwSiOTMEHTMGcHthKNryQtGSE4omoi4zCLUZAfCm+qMy + dTH17xJ4s4I4XoLJT4NRkkttkLUI2dn+yC0MQX6JDJl5kUjiNYpNDIcnhlqPGs/GYzfpRfavMICpdUTG + rkqYuVGS+Su2lVGhUMhCvmEAq+WRUPCxPIq6SiylyO3Z3xpFVrBYC1gYs7MGsEarkNYEnl0XWKwHrDdp + v2EAC4gsYK1RZFZqYRJr/lr1bPWSASyyhn0GsAIqfodKGMBsZw3giMggyJVh0OplkiHnol5LSLQhJycG + VWUJaPLGo4NzbU+5HmOVKqyvkWN7VRgOeMNwuDqU+kIskTaf2iQEJ1uNuLXXQThxRhjAXXa+ToU9ZTIi + kq+JwvZSOdZT60+k+WMgdj7qdX4oCvVDToAfSiL84FX5oY776jR+aGI7ErsI63LCpaVq9nOO3F8hPi8C + u4rJ3QqDsSs/gLrGHxtzfQbw8qy5GM+cg9GsOYw/3C6Yj4m8azBOfjee7IfJRD+sSiLPS5uLnRkLJAN4 + R8o8bI71wwYX4STcfJ7YHuOHIxmLcX1+CG4sicDtFTLc5Y3CXTUy3E3cUy3DvTWRRBjurw3HfTWheKBu + BrVheLg2Et9qVOKeyghcL7KN4+di2sDvt/phS5w/9lIjSgZwbghuY397oDzsGwbw9yQDOBA/LA/Aj0rn + 46cl8/Ba5QL8pc4f7zQG4uPWIFxoD8eljjAJkgHcKco/RxAh+LQlCGdbhQG8CO/Vzsf7dWzr/fHP6oX4 + VzW3myPwTp8R7yxz41/j0fjdsBtPtdqwk3q2yeSPFPlimGcMYIUiFCol9bkwda3U9VYd+5YOBrHOr559 + S8s+r+FYMApzVy3BbOHrnDrYXAbY3UbJDJ41gEVfE7hiADv08Hgs7HcpqG+sQH1TJXLyUqj33eRaGejs + bsT0qmVYv2ka6zcsx/Yd68g3d+GGG4/h4Ufuxi9ffQFv/uOPePOt1/HOB/+UTOBPzr9/xewV+OTsBwT3 + Sy3xsc/4/fe7b0lG71t//4uEv7/5Bt54/U94489/ZPsH/PmPr+EPv3kZf3z1Jbzx6ov47Y+fxnP3ncbt + +1Zj22AVxqsTMUlOtLImgRrIhv48A3WQE5t6srBvsgKHVot1fyuxdigboy0xRDTWDmfiyJYG3HN6AncS + J/Z1Scbv2vFcbFxexDYfYz2J6BYGsNeAxnItGkpUqCuQwZsfxngehEbhSbFvTbTrsG7Aiq3LHNg0YsK6 + XhXWdEZhbUsYtrZxrDSH4VBLJG7pN+L+pQ48OurGt6di8czyODw5Fo1HRpy4r8+K29t0uIXz/O0tWtzb + YcCDPWY82k/t1EfN1KXDHa0K3NQchRvb5LilW40z/aK0tBl38XtP8zW7OBYmsxehjWOnhn28xT0PwwmB + mGAcWp4VjjWcZ7dzjj1eGIT7OZaeY/x4ocOMl9oMvrVseR6vtarwpzYV/t6hxD+aw/GvumB82BSGj5tC + JQP4bEsozjYTrdxuYx8X5i8hMoHFOsD/bvLH36qvwZ/L5uDPpXPwj9q5+KA9ABcGZPhqVIUvRpQ42xOK + d5oXS8bwx51BUhnoSyNyXFqqxBcTGgmXxtS4MKbEudEofDoqw9mRSG7zdcs1uLzaiC9XGnBppR4XVihx + fkqB88sV+Gx5FC6uUuPyer2U/YvtNlzeZsYXW434fItRMoG/2GqlXrOyteCLLXZc2mDDuZVW/HtUh7/3 + a/BmlwF/7zbjzV47/s559B8i+3cwGm8Px+Afg078od2AXzep8PO6SPy0NhS/aArH73it/ssA3u3F5zcN + wq8kyYniZCeyYsxw6BmAwv0RHr4IoZH+CI1aQiEXgIioQEQpgiQolCHSYJfLQyFjcIgIXUL4QxYeCDkf + azkZGNWRsDJoWRlUTMIgY7BTywKhlfsMYKf41xtJYEJMFFJJ0oQBXJQl/qHoRk2ZB5VFTj7WoyBTw22r + ZAA318SQTHjQ2uBBRwOJdVM0+ojeRhe6a2wUMno0kWTU5kWgIiNIKv+cwwl61gCuY4BvKZSho0yFrgo1 + ukmquytJVMpVaC3lhFYUjgaSgjoG+vq8kCttLTtlLTulMICr0xcTC+DNZGDKXiyZwG2FgSQSgehkp+0u + CUFPaSh6GeyEAdxfEob+omD0iRLROfPQluWHDqK/2A9jdfOwuosBZpU/Tu4JwN3Xh+PxO2V4/nEVXv6+ + An/4qQZ/+ZUKb/wqAn97LRL//JMa/3pdj7f+ZMQ//sCb+UcT/vpbC373cytefs6GHzxqxdP3uPHg6Whc + t9WM9YOR6GVwKGGATDP7I9bgLxFPE0moXklCqQyAjmRV/FPNog+FSRvI+7aEIOnU+GBQ+UpAaxW+dhbC + ADZpQ2DWhf6HAUyCSaKcQHKWQFLvEVl1+kDYdL5S0Gb1wisZwBbtIj63hMQ6iAiUSuK42C+EWWPnY4tR + GMCLeWwkzaYlcJEMxzhJTD1hSKYQSYsX60fLkJEQhUwiK1HAlwmck+JbAzgnLRLZaWHIyaBAyVKjINeI + wjw7cjPtSE00Id5jRLQoLWEzsk8yEJE4iVLQVsJEMmVkHzYIk1etgJb9WCetzaEkiRP/yhPrdSggSrgI + 4uZb61qUO/eVdBEmsMgGnjWARRloyQh2mKS1ftMSo5GZEofs1ARkp8QjPTFGMoRT4pxsXXxMJLk4Nvja + eNvXBnCckedMAZJoltYBLkx3oCTLjdJst2QEewviUUdR3VCahKaZdYCbylNQW5SAylyOLQrv+uJ4tFdn + oKc+Fz0NOeipzUBvTSoGa1IwVp+KFRTyq70J2FSXiGO9hTjZW4zrOouIYp8B3JxHAZ2F7ZXJWJnnwliO + DYM5VvQQbRkMRsKIyjVhoMyNtW0ZODBRhVPrmnByXQMOrqzG6gEG7CoLSkicU2OX8NrwPlPQ2CiGXFaK + MVMo8m3h6M1RYXuHGnetM+KX18fg3JMZuPy9JOD5OMKDL54x47NH1Pj03ih8dEf4NwzgWRP449si8cmd + UTh3vwYXnrTiq+digReS8NXLabj861zgDyXA7yqBV73AS/XAdxrw8c0F+PVaK55sDsEdeXNxV/58PFET + hRe7bXi1z43f9kXj1Q4bvtegxt3ecBwmidwmskPyF2I7iefGghCsJHGbSA3FSCLnAQqvbvdi9HgWkXyG + Ym2JHJuqFNjmjcShxkicYPC6sWkJ7uv0x/NjEXhjsw7nj7iB0zzPmzxsGShuNOHzUxqcO6XA2Rt5Prcy + qNypxYV7DfjsITPOPWzG2W8xWDwZi0+/nYJLPyjCV79swldvjgIfbQQu7QcuX4+vLt+My5duAj4+iQtv + 7sUrT3Xgho3RGC0PhTd6EcrEv7Ptal5/FbJNnJs1oUhXLUYhCV+dZwkG0sOwtkKJg50m3Dhqw/VDatzA + wHhmhQG3rzXjptVmnFyhxbVTKkKJUyt1uJX7b183awBbcWalGbdOW6T1gE8vM+HEoAFHe0w41kVh3+HE + vkYbtpRqsTo7ikIgktcwEn0Us+2eSDRRMNZRzAsDuIpir5JirzSago8oEhlAsRrkRKskA1iISreU3TVr + APuyfSXTgHOTgIki30ThL2CxhFO8RVHEKRETrUF8DCEM4Dgtx6IOWSlGzilm5KSa2BqRm25AAfv7LPIp + bAvStYQGRWkqFCbJUZgYgfz4cBTGh6KEqEqORE2anGJTgRZh7HrtGK1zYmmtDSPVFgyVmdBXpENXvgqd + uUr05GnQk6+VINYPFuv69mbr0UP0cbsv18zHJnSm69CWrEWjMHTjlaiJU6E6XgNvgoECWIfyOD1KeR6l + MUSs7msIkczzrEs2S+s9tud70JBlRXWaXlrXuLHIgdYyF1pLHGjKN6EhU4WmNCXaU+XoTlVgMFWN0QyK + P8brCR7TRJaW21qMc65dUWDHdLEHywpdPEYrGpPVKHaFINcVhMzoIKTHBnEeZv9KDUdGagSyMqKQTXGR + kxVFRCAzI4zPBfK5IO4PRh6FUGlpFMrK5SijWKyslMNbrYSXY6mqUiZl/tZyu86rlNagaqlVoV2CGl11 + GvTW6zDaasWK3mhM98VhsisG/Q02EmdhAEcwnoQgiWNVKv8cL0d0HPtBvB6JyTYkpzqQlMpWZAALA1is + mRtvhCeW8SNaD9eMEWyzKSQjSmQhir7lsMmIiCtGcIxHrEWqQbSbrxPGLmOjTk+w1epmDeBAqBg3lbog + qIyh0FojoHNESev5SgawUw2VKRJRBmH+inV6QxDGmByiEOsAByJCZN0yFotS0DqHChpblLTur1j/d0nE + vCsZwMIAFmWeRbavyPqN57kJA1hAGMKiHLTVo4HaFC6ZwMIAlom1frX8bH6vMHxlksErKsYIw5rHalJA + P2MAR3LuCFcEI4KQacL5vogrBrDWzNfZKAIpAC0uLYycczQ8XvHZUaKMtYGfxfFo5HlbOJYtbp6/nY/t + YbA4OU5j5LAnqOBO1SKGfTWB4zEpTYdkjoGkWAWSHDIk8bplWeXIsyuRZyMscmQbI5HBY0hRhyJRGYwk + dRhSNBHSvixyoVxdMAoMwSg1BaHcHIBK8yJUWhag2rpQgpexqsbuj1rnEngFHP6ocvpQ6wlCJ8fGQI4e + wwUGHzh++7IU6EoJRVdiIHoTAzCQEiwtEbCMomcFBdvqYrH+uRKbyjXYRl66rUqHHV4dtldrsZ3ibleD + GftbnDjQ5sYWPp4ukGMsMxxTOQpsqqAgr3Fjd7UTO0pMvvV8s0KxOz8C+4oicYB892ClDoe8FhzlPHO0 + xo795UZszpVjNeOTwLqMcB8Yj9dnRmATP2NroYafp8OeSjN2V5iwrdyAreV6woCNJRqsypVhkrFsLDsY + U4VhWF0ZiU0NCuzr0ePkGAXflBsnRy24dsCIgx1a7GrUYoMw/sirezICOF+FkCvI0CL+VJJvITexkAfp + JCNWo10ChdqffSwEBt4/s1UBK2Exc5v30GyVsRXGsDB9ZRLMZh9MHBNmA/sI++wsrJzvbewLDnsE5/Uo + jj0ZPMIAdoTBSc5xNdzcd7UBnJOp41ykRXaOGtm5GhQUGpBXoEOmWD8vR4msPLWEjDwl0jlfp/GeZOQy + dnIOzy0xI4/IL7OhqNKFkioPquriUdOYguaObAwtq8b2XSM4eWo9brt9F+6//wiefPw0fvjc3ZIB/J1n + bsHTT94krQl8tQH83W+fwbNP3oLnnrmdj+/Ac8+ewdOP34BvPXAUD917RMr+FQbwg/ccwp237Matp7fh + 9HWbcN2RNdi7YxTrV3ZgeqoZ61Z3YvOGfuzcMoxt6/qweqwRI+2F6POmo6sgDi0ZDjQkmVHN2FHAMZjl + iECaMwKprggkUb+JNfZTnaFIcwQjy7aEnIH8wbUYjfFB6KWoH0wJmjGA2dfzwjBaGI5lnLeXsR8sEwZw + jR7L6s0YrbVgqjEGOwZLcP/+FfjODbvw5LVbcevGYRxa1oC9S2uwZ6QS2/pLMFGbzBhJ3VfgQFeuFa3Z + Fml9+1rGlmrqyPI4BSFHVZIaNSlK1KZEoiNPjnEv+3yHCweH4rC/xyGVJN9WL8ORTg1uGjbhgWknnljn + wbfISR4Z0xFa3DekwnUNQdhXthAbye+EAbwh0w97S+fhxvZwPLZUj++P6PCjYTV+ukyNl5cp8atlcvx+ + XI6/jsnx7wkVPpzQ4ey4EefGjPhsgqJ+lRtfrYkm3PhyjQOfk2d+sc4CbHQQTil79yJ50qV1FP/rHITz + Cj5bI4xfK86vZDttI65uCe7/bJUNF/i5X2xw4cuN/K5NLnyxka/ZZMOHm+x4f1s03t+bgg+P5eKdU9X4 + /Q0d+NHRHjy6vQNn1nTzevdiQ28XVnQPYe3EOmzfth9HTtyCO+5/Ak989wX88IVf49nnfoabb38II+Nr + 2dcrYPekwmCJlbJ9VTq31Co1TsYGG6KUNkTHZqGpdRDbdh7DzWceYn+/Cxs3H0B37wRaWgcktLUNSWjv + INqH0Nk5jK6uEXR1j6C7e6kEsd3bN4bunlG0tvVLxmxCYjaiY1IlJCRkSWsCt7T2o39gAktHV2JoeDkG + ByclDHDfwCAhtVMShoYmJQyPLCemJAwN+zAwMM7PGed3LkNv/5jU9rHt61/G984+N8rv65NMW5EpLIzo + xKQsqRVrEIv1iYVRLMzo5uZeqZW2W3p9aOuT0No5iNYOXof2Aenc2jr6eS3Ytvagt2dIWgN4bNkUVkyu + wfLxVXw8gdaWblSW16GwoBw5uSXIzCqUzGeRuVxR0YKamnbU1XagvrYdDbVtRCOa6urQXF+NlvoKdNSX + oaexHP3N1Vja6sVYVxUmussw3lWEZZ15GG3PxrI2oj0XY225GG9l25KD0aYsjDRkYLg+XWpHG/m4MVN6 + PFybhqHqZAxWJEoYKkvAUGkCRkoSsLQonlwwAWOcWybYThUlYkVpCtZUZWJrXQF2NBZjR10httXm+1CZ + h41lWRK2VOVjq7eAbQFjXi42lucyZvqeW1eSyhiagFVF4s9Rbmyq9GBrjQfb66OxryUOx3pSccNILvVK + Pk4Nij80J2Bvkwc7hQnc5MTuzljsH0jGwdF0atUs7J5Ix+ZRauChWEz1ejDe68YYdZ+AMHkFxvpjMTnM + c1iWjOXExNJEjA3FY2QgVsIAX9Pf52FfdaGzy4GWdhsa26yobTWjqsmIikYDyojiBqJelIGmnqjVI9PL + WFKt8cGrRRZ5QCZ5QFYF40+5Gnnl2q8N4Eo9iqtMVyAM4AphAFfZ4KWuqK22o77KjjqinjyhvtSCWsYv + b74e1Xk6qa0l6shTZtGQZ0IduXuNMIEzNahI0/hM4Jks4KJYGQqECRwtQ64ANVl+DPdTc5SLP42m6FGR + rJMyb/Op1XIZT3PswchnnMh3hqFYGL/cX0b+Vk5UxahQS41V76FucSrQyNjeRO7cxhjeayTHMUVhm0uP + w3EOnEz04HS8GzfEcNthwyEL53SrCtNiHWDygwFy2XZnFBpdUaihRhSfXxKjkAzrHO5LY9xKJY8U6/6K + bNMExrIEcgKxXMjVGcAu8kBh/rpMfEz+4ORxOHhMbvKMeGrOxGhyTCKe2jOax+sRz5M32jVBcBIuLT+D + fFtk/VqjFsEsWyAZwDb1EjjJ693kljHWUMRSa8cxhsbxOGLZxvD6uOzUqrZAcht/GKi59WZRBWUx+bIo + /7wICoMPGu7X24LIj4NgEusEU1dJrTMIZlcweXuYZArbxDrC1FsiC9gRw+OKC4Y7LgQxSSGITgxGXBLj + OHVXJrmN4DGZmXKkXCkFHYJ06qK8XF5L8r46xunWRgvaW6zo7hAZwFb0dxvQQ37X0SKMXyU6mjXobNGi + q9WAzmbjFQPYW6JG5awBTJ4uGcC8N/G8J4nkYikuGTJ4z3JdChQ4FCiyK1BClAnw3hZTG5RQm5eSy5dR + 04jniqm1SthnSokSvq+UKHb6DOIyj0rqW9XkA5Wx4SiLJpeP80dDWhDacsPQXiBM4HC0crs5O4yaNwy1 + GSHwUmtWJQewDy9BpdjOCEZlVggqiMLMQOr+xchI8yf3o4bNDUca+XJcEnmjKLPNe2in1rORo5pElSOt + z/zVa8Rvh3wsjGBhxiojJQNYQPxmOPt7oU4YsLMZwOL3RKUMVrNeglSNUKeiTvRl/gqzV5i+ckWEBJG1 + K/YL81dnVDP+fm0Ai1LQalF2WjKBdexTOskAlkpB87PFGsBqjQIKfp8EHoNY/3fWAI5SUIvpZDAaFXC6 + 9YhLsCIrKxrlnNfrqxLQXOFEa7EG3dQc40WhnJNDsd8bSb0RRa4UhG35i7CrLATHm3S4sdOKW7rtuLnH + jhMt1DalkdhRHIbtRSHYVhiKTQWhWJsTghXUCOMp/uiyX4MGjR+qIv1QHeWHZq0fuq1z0O+Yj2H3Akyn + BlLLRGBvmRoHOUceLFdiX0kE9hSHYE9hCHYXBmJ7wRJsyl3Ez12AFVlzMZF5DbXXHIzlzsVY/jyM516D + cT6eSL3KAE6dK2UA781cjJ2pCyQDeL3TD2vtvnaTyw87YubgWOYS3MBjvpnncWdFFO7xynFvrRz31Ebh + Pm+UlOH7YG0kHqqPYBuGh+tmUBuOR4QB3KDE3RXhOJnJaxQ7R8oAXm2bg20JS7CP+upYThhO5YbiTEEQ + 7i0JxpM1kXi2xmcAf7/qawP4x6UL8dOS+XitYj7eqFmMf9UH4MPmQJxvC/2mAdwhw7nWMHxYtwTvehfj + vZpF+KBukWT+flDvjw+bAvAu2/cbluDDtnB80KvHByMOvD/mwV9GPfhBFzVkvgp9jhDkaAJhlVOrK8Ig + F/1ZHiatbW0yKCEygU0m9jdhABsU0OjlUIlS4lcZwCaLhn3QVwZaZP9enQFstojnfa3YJxnA0T4DuEpk + AFcVkvOkSCZwW0cd+eRKHL/uAE7fdC0OHNqBjZtWYtWacWn/iZMH8e2nH8bLv/wxXvv9K/jHv/6Kjz59 + D2fPf4Bz5z++AmH6fvQx958V2b+f4OOPPsC//vUPvCkZvn/Eb179BX7+0k/wM+LnL72IX/zsp3j15Z/h + Vz9/Ea+8+EO8+qPv4pfffxI/feJePHXzYWkJm009pRjjGJmsisfy6lgMF5jRLZaBy9VhpMKBiYZYrOxI + xsquVHKsePTX2jHU4MLaYfKUrY24+9QEbj85hiM7W7F2sgArl2VTp+Vi+UgGhjqi0S7m5GoDmskFmqjz + 60sV8FL31xSEoL4wGF1VMoy26bCq34r1Izas7tdjRYcCy1tlWNkUho1NEdhaH449dRG4tk2NOwfteGhE + ZAHH4ZmpBDy5LAbfGnLgwT4r7u4QJq8Gd7dSG/EzH+jS41tdJnyLmv+BLi3uaVfhtjY5bm2X47Yubvdq + cNuAHncOW3BrvxlHW9VYVxSA4ZRr0Bk3B4PJHJMFcmwr02GrSIri+N+VG4AT+UF4sFyOHzaa8bN2O37K + OPLTejV+Ua/Ea01yvNGmxD87Ffh3WyTebQhhnw3BJ80hkvH7KeEzgkWJ8xCpHPRZ9v1zXRE428X+3BqE + dxoX462ahfiHdwH+3bgIn3SG4NKgHJdHNfhqVI3P+iLwvsgAbl4slYP+lI8/G4zChWEFPqfOE7g0qsJn + o3KcG5Hh0+FIfDIYIbWiPPSX03p8sUKHiyu0uLhchQtTSgkXl4sS0RpcXm8AiQv+H8beOsyt69wedsg0 + PCNmZmkYpBmNhjXMzEyeGTM7xjixY8chO+CAw3GYoW3appAy97a9t73Q9qa3TRpwnNiO7STrW/to7Ka/ + e//45nnWs885Ojo6kvZ+37Vm6d0be6n59jjx+S4bLl5rwflrzfhsp437Dny+287WiYvb7Di7wYb35034 + 25QRfx2z4m9jLvxt3Iu/jvvwNvHnUS/+OOzEv/WZ8esOHX7RpsaPW2T4gTCAu2IG8B9HrPjLhAd/nPDh + vxby8O7+Jpw7Pool0RwvomL+9Ew73BYmIEU8ZGnLkEIky5dDplgJhSoeaiWhSoBOncTElQRFmjB+l0Oe + uBwKtsrUOKh5zKBMgEVL4sFA4GbScQjDjIFBr0iAUbUSdkMifCQ/Ypq+ghwNQtkaFOVqUF5kRm25Cw1V + vJ8SO8pCepQESSo5YJprPehuCqCnxY++dj8G2vwYbPdhmNvCAB5cNIDFLyAaGTCrC+JRln31ZQO4pmCF + VBrfx8EhTN9REu3pTgemuxwYb7Wgv06NHgbwDnZAgXYOHmmbgb2tTJjBiZIBLKYEqc2/CnVMDi0M2B0l + K9FTmYj+qgQMCvOXiW+kNjb1s5gCerw6FZNVSZhgp5+oWEpcgfEKJpmWK7FzdCVuXJuIu69Pwck7ZHj9 + cS2+94oB//JdM37/Yz3+9Est3v6tgkjF//xbKt77Lw3e/6Mef/13Lf77t2r8+bda/OnXBvzuB2b8+Gtm + fP0pA14+YcHJow4c22nEzqk0TDcloSEnDiFHHDItsV8e2klEhckrVfAaUmAzxgxcu1FU88ZL348w6QWk + 8zQJMKkFEmNYrP61mVLgtMj4vH+Yv04igyQ8V0ydSgKW4ZRLRNpj4WsYVkJMB+3Qr5C2BZyGODjN8RJc + AhZh/MbDYY21NnOcZASLKVx9JLsBdxLSSXQzSWrzSepC2cIEFj8gUKNYVGtIUEjTQJcUyFCcn4ZCEtmw + MIOLNKgoMaOi1ImSsBOhPDty2eczvGYEXGYSfAOcJh0cTFwOkig7CZbNpIWVhEsyfEnQBEkz6bi/CKNW + I5G3mAksk1rxSz5xnpgGXVQAXzJ/xbrAYkpol93I9+Bg3w8gUpiHiuIgSkK5KMrLQjA7/bIBXJTnR3Ew + nfCjMFdUBNv4mJXv14pwnpNwSAZwaVCsBeyWEDOB/WgsT0drNAcddQXobgihvTaPSSELNcVeVBe6KP4C + 0rTQ/U1FGGguxEBTgWQAT7cFsaarEFu6C5kYCrCnqwBHx6O4Y7QKt/eXMYCX4DCF/vWNQeyszcamMi8W + Cu2YLrRitJCEnxAVwN0cy/1lFAg1XmzuLcTBuToc3diCWzY04YY11Vg/ko/BRjtqwgq+p3h43YwLDgom + CjEP+0u2JQWVjjSMhdU4PGbBS3s9+P0DeTjzagj4Vh7wnQDwXS8+/7oDZ18y4OOn1Dj1qAwfPJjyvw3g + EzJ89KAcpx9R4cwzRpx/yYkv3kgHvp8P/KwY+O1iBfAvm4EfdQDf7MYnD1XjNzs8eKkzCfcWLcF9RVfg + mfoUvNlvxU/FOsBjfvx82I1v9RjxXLsCd0aX4friJdhPMnk9Y8EekuBry+XYVqrCuqAC8zlpmAnEYSZj + JdZQgGwhodtBwntdfRLu7BOVJil4dCAer8wk4yeb1fifg3Z8eodHqvrFcRtwlxGf363FxbuVOHOcieze + NJy+j3iQZO4xNT5+Uo+PntLjw2dM+PglDz55LRuffjOCcz9swMU/jOHzdzbiizP7gM9uwxef3QVcOA6c + uh1n/nMvfvpSN45ucmGqIo5CfDnqKEarScoidjVCJgozXRIKOG7LbSvRmpGAkVAqNtZrcOOAFXfNOHDr + sApHx5S4e5Uex9eYcfucHjfP8nubVeCmVSrctqDF3UyG922w4sQmGx7YYMf96yy4b60F96628nkWHJu2 + 4vZxYtSOWwZcOMDEv7Nag00RORY4dqdzZBhNl6OfOaM7Q432gEYygOsp9mqJKm5X+plDeLw0oEXYp6bY + F9PAyqRptS4ZwNJ0z3Zh+spIQElWLyNZgpXbosrMTYEZoMDPTNcTWsYJAwryTCgqsFD8mRHMN0goLDCi + hP1dGMFhitqiAgNzlgGlzF1lIS3K8lUoy5OjlPdfzj5QSdQwNtUXyJlLlMwpagzW2DDW4MJYoxPj9U6M + Rq0YKDeiJ6JFJ8V4T5EWPWHdIvToKzKhr9AYQ5GAhdscc/lGdOTo0ZKhk379LtZFrs3QoyHLgtpM5tZM + C6KZJlT5jYRoY9tlbpU0vVZdBq8RIaEsz0BXxIMmjukmXrsr6kNPrR+9NR50VdjQwfvo4nvrzleiN0eB + odyYCTxTZFiEFjO8z1WMtWur3NhQl4FVUT+GIg605oqpuRiPfYkoDCQimJmE/BzG8rxUFDBWh4KM5yG2 + ElIQDCYjlJ8gIVyYiEhxIqqrFNJ00HW1Aio01ZPwShDbSgpSLdqbdIsGsA69zRoJA616DLcaMNlpwUy3 + Hat63Zjt8WCklfdVoUcF80Uoi/eSnYb8fC1ChRaERJ4I+1FSliOhoNCH7AIXshl3MxmD03PsSOfnGsgQ + MMOfbobDSfFvlcHI3Go0JEm/BneJ9YAJMRVtgH3V51FJ+zbmRaMxAQbm3UvQmxKhYy7WmZMk6NlXjfx+ + jPyexHTOVuZWk1sPrVUJhTFNqvYVhm+aNgkpmkSkaBOlbXFMbeHzXBppOmilKQnJmhVIUC5Fspqcja+h + ZpwVBrAwecU6wJnivYU8kgEspoQWprCYHlo8rjGnLJrA8ZAz/6v0yZJRKyMfEMcExL7epobRrpFMXjH9 + c6pKLCMipoGWQWWQXzaAdeSa4lwzxZ3FxffEmKPje4qtJ5wMHfmFme/bwzGYkWeBn2PQ6pLBxHFsdaXC + wVjgydUjnd9TdpEdeUXMqSEr+5EJeRwDeW4lgi4lylw6VHkM0pT2UYcO5RY1SowKhPXkCBSmJTYdSoly + ik0x3X3UKkcN40C9LQX19iQ02uPQaFuBRidblzB8EyQ0exLRRDRyu96TwLiZgEZ/MgY5BsZKLBgri2E0 + YsAwuccAx3xfThL6s+IxmJuIsYJkjhM51lYwzlEAbW8wY1eTDbubLNhRZ8S2Gg02VCqwMarG5jottjbo + sblWi9VlMqwqSsGqwhQshJXYFrVhX6MX+xvc2FvFa0RUkgF8XakMBygED/A6BxuMOFBvwY1NDhxosGJP + lQ4bgqlYlbFCwnxWnIQ1vK91+cnYWJiGDSE5NhersLfWRoFmxfYqIzaXa7GuWIE1hTIscIzOFCRJSx3M + RZKxoUaFa1t1ODRsxx1zPhyf9+OuWReOTTpwy5AVB7st2M3xt7pS5HUKU75GTyHjOT+rlogd5flmZHsU + 5Fzs97oEaDl2DBY5rE4t7ISDfUoC+7L4kYWoshcQ8VrAalUwhsth4rgT1Rc2i6j+lV+GMIDFD4C8Xhl8 + 4odBhNeTJlUBX4KP/EMsQZLFXCOmgA7la8gVGeOLjYiUUI+UGlBWbpLawmItoZP+cVoU0SM/rJL+kZoT + UkhtXkSDfB4P8txQqRlFFVbChtIqJ6L1fjS0ZKOrrwjrN3fj0JHVuOf+XXj88cN44YVj+PrXH8J33nwM + b3zlhDSt8ze+8oBkCH/3249LBrAwf1978R688eoJvPm1B/G1V++VDN+TDx+UIKZ+FiawqAB+7IEb8MDx + 3Th+bAeO3bIZB6+bxbaNfVi/thNbN/dj5/YR7Ns5jt1bh7FxVRtmeiswQn43UJbB3OORDOCGDOYJfjch + B+O0M1Uyfv+XAeyIZx5ZgRrPCnQwrg8zpo/nJWKGfOeyAVxGROVY1RAzgGeajJhvtxMurO/KxA0ztXj2 + yEZ8/fh+PH/TNtyxfgAHJxuwdyyKnYOl5KVBaiknBotN6AkxD/H76QrqJXQWMO7n69BCLdlEPdDMGN6c + z7zAcdfNPjtJfbiZ8X7/aDr29TuxtVmF9TXx2EmRfKRfhQdmzXh6nQPPzpvx8moLvr7RTXjx7LQZJ/qU + OFSzHDtLqNtKrsC+6BU41LwcD/Sl4qmuZLzWnYRvDqfie+My/GJGid/NKfHnBeq1deSm5ERnKN4/mTVI + uLiW/HODB59vdOHzTRT/myj0yYu+2MrjW134bAtFP/nYRWEOb3YRHnzKcwXOCeN3nZ1wSji73o2z63h8 + vUfC2Y0CPMZWVBef3+TmdXgtXltMHX1quwfv7UzH+9cHcermMrx/ZzP+/a4+/ODIAF7e2YWH1vXg1tkh + XD81jj1TC9i74VocPnQbjt7zIB595mW8+o3v4c3v/Rzf+O7P8MSzr2H7nhtR29yDrIJSuHx5sNgzYbZm + XIaJ0Bl9cLhyUVndjtXrduLGm47jELFrzxFMz27G8IgwdFdJrcDo6LyE8fE1mJhYi8mpdZgiZqY3YHZ2 + I9as2Y75hS0YHJpFTW07AulB8rUcCYFAEHX1nejvn8KqVZuxadNebNq4h+2XsDnWbt68T8KWLXskbN3G + 7a2i5WPcF9i0eTfP3YWNi1jPz2Pd+h3ENmI793dIx4RZLEze0rI6+Px55ADp8Pqo6cKVkpkrjGJhMM/M + 8L1IRvNaTHNbYGo2hulV62PbfExcb2qG739yHl2ikrmjD91d/ejs7MNg3ximx+f4eazG8NAkmho7yIsq + kZ6RD6c7A9k5YWkabFFN3dU5isH+aQwNTktTSY8OjWF0eAjjI/2YHu3FzEgPVrEVWD3ag9XjnVg70crt + eswMVWKytxQT3RGiGJM9pZjuKsVUZwmmOiKYbOOxRUy185z2Yky0hjHRXISJeo7T2gIJk9X5mCJmokRl + HmbLc7CmKh8bawqxsbaQeSOEjXVF2NUspnyuYg4sw476Yuysi2BXTQQ7qsISdtaWYCf3rxXHRMt9CXXF + 2MHrbKee3dGYj2316djRFMCutgzs6czADb3ZODJcgDsmI7hrugx3TkVw60gQB3sysa/Dh+t6fNg/lMk4 + k49Dc4W4cU0x9q+h/p3Lw8apTKweC/Dz8WF23C9hZjwdsxPktBOZmJ/KxvyqXCzwXNHOzeRgejqL/TUT + 45MZGJsIYIjPH+Tze4d96BzyoHXAiaZeG+p77KjttqGaeTHaaSOsKGs1I9SoRkGdRkKQXLa4WVQB6xAi + 5w1FlQhX61BWS41BlNVfqgQ2SRDrANfU2TgGHGiknmhucKKt0Y12oqPBg45a7ldZ0VJhQRPzWHOFmdzX + gjYJVqntKLehreySCWxEA3WGZALnaaXpoKtzVIhmqVGRpZKmhBbmb1W2GrXUPo3UIc3kY+LHozU54ge5 + SpQzT5R5k1Hhp/4JyGLGLzVcfZZWmn2oMYsxO0uPNnK2rnRydvLcXrsSg+TQk2YZNltUOOgx4Vi6G/dl + +fFQVjoeTPfhPqcLt9nITcjpNjo0WOBzJsi1+8mrO91ytFD/1ftVqJbWK5ajiMcK3Mxb1ISi6lcyfZnz + M5jT0pnTMkQ1ri1ZWgNYGLqSAcxttzUNLnIJN7mIhxxDTAUdIGcWrY+v5+N9eszi/50xA9htSLgMadpn + xVLYRAWwLk5aEi3A18vkvWQxn2bz3rL9itj0x2wzfOQmzKdOZyLM1NsG8zLozSvIlWNr/2qsKy5DR16q + J0zS+sACieTdsXWCRbWwMINFdbDdlwwbtx1+Ad5XegI5dQL8WYnwZsbDl5XM+E3dFaHmp+4sET9mI5cJ + kv/lF8Q0WXFYgfJy6u1aE9qaTOhqt6KP/XZowI6RAVEBbJAqgAWGuo0Y7jVjhH18qNuKrmYDmmvUaKyk + JuW1o0XUxnnkTZkayYgX30WeR45C8T3x+xc/UK7zG/jdsT/5+FyvAU3k8HUO9jE7+w25oEA1eWDMFJZz + m7zdSbCtdPAYNVgttVIjNXBTBl/Xn4qodyWqvcvQkpeA7nAyesX/g8tl1LwydIZlaCWnbQ6KZZqSUZed + iNocIo/bBSmoDaWihigrSEQ4Lw75ucuRWxBPHZiAnPxUBDKT4famMO6nSj/+tdtE9SK1jYkwxP4feKny + V0AYwGL9X534v/ji/wzF/wttRuqgxSmfBYTh63HZ4HVTh7F1O63sG1aIql1h2grDV6raJYQZfMkANpi1 + UOuoDy8bwNRcvA+9ZALzNUSBy2IVsNVqhslMPalVQ8V7UShlUCpkEMs5XpoCWqlKgbQOMLWTqADOynGi + uDgdNdFctNTnoK3ai/YyPTpCSRgtisfmaCpubFHjGPvCLWz3RxOxvy4Ft7TrpWmg7xt2SmsBHyIHE/8r + u47ni3V791fLsEsYyOWp2FGRim3ki/M5yzHpvQoDlivQa7wC4/YrsCZzGbZQd+zg97iHemh/hQKHqY1u + qtXgZuqdQ1Vi9qMUHCRuqEzEvgryvNKV2Fq8DBvCV2NN8dWYj1yF+ZKrpWmgRbua+2sLr8TavCXYlHcF + dgaX4obiOByKJOJA0UrszrwCW71LpDV6t7uXYJdvCW7IuhJHw3E4Xp6CE4sG8MkmFZ5oVhNKPNmkxNMt + Cjwr0CrDM81peK45RcKzTal4tlEcU+KhaBJuD16D69J5fYcwma/A3px43BhOw+3UcXeTO58oTcDjfB+v + CgO4RYY3+HxhAH+zPkkygN+qWYkfRpfi17VL8e9Ny/GXlji835GAj3uScb4/DRf60nCxX45P++T4uDMZ + f625Gn+suBJ/Jpd9R1T7tsbhw/Z4fNSTiA+7RZsQWzt1SI9TEzZ8MOPG27M+fG/Qg7sqtJj1paBSzHKg + ElXsqVI1u/hBg1bq02nQi7WnRZ+nxhYwEDoj9zkmLkGsESz6lFTxK0xfxnKBL28L89fpMsLFHOBPtyMc + zkFpJA8lRHFxLqprSrBqbgw333oDHnnsXjzz7KM4dsdN5GWrMDDYgdGxXmzbsQ733n9UWhP4Rz/7Hv78 + P/+Jj868jzOfnsLZcx8v4nRs+ufTp3Du3Bl8+ulZfPjh+/jP//gDfvXzn+EHb30XLz3/LB598AFqrIfw + 9MnH8eKzz+CNV17Bm68Sr7yAb734FN54nJrtgWN46pY9uHPrBLb1V2CuPgurGzKxQN03QQ04HDZQv2jQ + XahBH8fNULUF48zRY81u9NdZMdwgihSCOLC1GfccGcfdh0axf1szVk8UYmGiAPPj+ZgezsRgh4N53YiO + esbkRjO6m5i/6/VooRZvrExlfk9CT70C4x16zA9asXbUioVBPeZ61Jjvoo5vl2FTmwzbmznuGlNxQ4sc + 94068OR0AC/OZeG11bl4ZVUGXhj34LlRO04yzj/ao8PJHj2e7Nbj6T49nusz4vkBPZ4lnurX4tF+NR7q + U+HhQTUeHNLgwWE9Hh6z4OFxG+4dseK6xjRsKFvO8cexWJGMQ8wld/R5caSLj4k4ULwcRyPxeJpc59tt + NvyUmu2H5EVv1avwVnUqfs2+/1/dCvy1X4m/sz+/35mCDzoTpcrfT7pT8Ymo/pUM4GRpKugz/TKcGZDj + zJACZ4aV+GRQTqThw94kvNcVjw+6E6X9ixMaYNZI6HFhXInTA8n4QFTH9/NaQ2n4eJTPH1fh0ynNZZyZ + UuLMpBIfj8txekyG0xMcX3M6nF/gNVbrcW6NFufXcF+CBhfWcn+9Hl9sMQM7HMAeL+GWzODPtltwYatJ + ar+4lnpwpxWf77BRD1pxfoMVn6yx4NScBe9PO/D+lBvvTXrw7oQXb4968MchB37TocNPG+X4WZMCP2tR + SgbwD9tS8fMeBf5t2ID/4XP+zu/y7ZlM/PfakGQAn7lrBEsqs1yozPFKBrCXCdWoSYQibQWSU5ciOW0p + k8AKaU1gjYJgK4xcdWocZIlLkRp/FRQJV0OVvBSqlGXQpC6HkedbeQ2XUQ4vB7jXzEHMQBAzEOPhECTI + JUOQxK8oX48QxbowgEvFtJklNskEFmZwSVCLSIEG0VITGqsd6CSB7Wn2o7/Nh/5WPwZavBhsFSawh9su + dNebJQO4IZKCaH7cPwzgrKslA1hM9dxfp8VIownjbRbM9joJF4WLBQN1anRXp6GDA6ajMhntbDujKejk + tjjWVharABbrQkRzrkR17pUkusvQHokZwAPVSTHjlxitS8MoO+oYMVGdglk+tqo6Hgu1K7C6nommkQmk + 70ocnk/A3TvTcPI2JV5+QIXvPG/EL75hwn/8yIw//0KPv/5Gjb/+LhV//ddEvPP7JJz6owIf/UmLv/+H + Gn/5rRxv/4sCb/9Kh9//0ISffs2Ir5/U4MXjWjxykx63b1Vi92QK5tkB2oMpiLgTkU0C6TWukIioTZcI + i15M+0zCIpm3ydL34jAlcDvpsgFsFSawlmRUk3TZADZqY+axMIBdVpIdUQFMXGrF+r85Xh1yfBqSXRLa + RSLtNMZJpq/bFE/CzMTB1xK4ZAA7THycj1nZCvP3EoQZLNZo84v12VwkrSS7fjeJlz+FfUhUbf0fBnCu + HCX5coRzeU5OAvtZKooLKVgiJpSXOFASdqAw3478HLtUBZzuEQYwEw2Jk92i5WteMoGZiBbX+BVTOkvQ + 6y/DrNNJ5E4QuEvTuIhzxHME3HazZP763Q5uW6RjdouO+zbJAC4NF7B/F6G0MF+qBA7lZFw2gMP5fLwo + i+dkIlzgQzDXgfzFyt9wPglYgYvjI2YAl4UEXKgKe1Ed9kgmcEtVNtpr89FFMd5Wk4vGikxE+Vhl0IFa + nifWBO4Wj9eItYJzMdiYh8nWfCx0BLGxowBb23OxsyMXN4+U4ZahUhzuDuNAWwh7G3OwrSqAdREXVoXM + mMozYIwYzNOjh+O5K2hEF8dvX6kNo1EXNvYEsX+2CjevqcPhNbXYu6oMC/056GOii4blyMuKh9fDPkkB + IxnA1hTkmJNJ7NMwXqjErUwcXz2Qjj8+FsSZ1wqAb+cA3/EA33Xhi2858OlrJnz8nA4fnVTgw0fS8L6Y + 9vnEP3Dq/rQYTqRJJvDZk0ZcfMGBz78WAL7H6/2qAvh1DfCLRuAHHcDXu3Du0Vr8664AXu5Kxp3BJbiz + YAkei8bhtS49fsCA+7NxL37G9q0BC17r0eCB+njcXH4Vbqy4GjdWJ+B6jv39URWhx04m+G2FamygsFib + HY8N+SSihXHYQUJ6fe1K3DsgwyMjqXh+KgXf2aTE728w49QdXly8zwXcYyEMwHE1vjiuwIV7UnH23mR8 + cj+T0olkad3jjx6T4RTf+/tPKvDB02p89KIdp18L4MwbQXz83Up8+ts+XPjvBXz+0bXA+cPAhdvZ3gl8 + cAs+/v0O/PDZNty61obJ0uVoS1+OBoqxqCNW/VtgTEOeIRFBjttKZxzac8T0nSQNjTocJKG4g8noyKAK + tzCx3sYEetuUDoeZPG8YScP1YyQUEzIcmpTj1lkV7lww4Phak2T83rPahOMLRtw9Z8KdMxT30xYcnTTj + tjGxHrAN17UYsb1KgQ0RMRVQGqaz5RgNMH4HlOjN1KKDwk4YwHVuNarcSlR4xD8alBT6jANeFUI8luem + sGZ/8joZpxg/xNq/dmmqZ2H+ppF4pnwJyTGYUyiI5JLB4PPpkB4gKEozM3XIyzMhn8jJ4X6WClnZah5j + /ioQRrABBeIXzXwsHDSgpFBAx7GpRmk+74vxSBjBFXkyVDEu1QaVqGefaAyLpQhM6KmioK62YZB5bqDS + ip4yEzojeopSNVoKlGjJV6G1QI025sOOAh1hQCfHmUBHgRmdBSa0i/V8c/RozNSjIV2PmoAetRlG1GfZ + UJNlR02mDdEMy6LxK1oLKn0mFNuVKDSnoYpiu6PQT2Gcwdf2ojnsZM5j3q3yoYsCr7vKxXu1orNYj85C + LTrzFOjMTENPpgxDuUqMh7QcrxpCjaliHWZKzVhd68bahnRM8/m9YTMaGKdLA8kIpycjlJGMYHbKPxnA + wQIZCkNpi0iVTOCiYDKRhAjFnqgAjlYqKDxVqK8T/5AQxq9GMoCbxXTQxP9pADdp0M9tYQBPdDBmdVox + 2W7DBAnmQIMFjSVqlAkDOisFoTwlIhFRSZGLts4ytHdWo62jGjV1xSiMZEjGb4YA47EwgDOyrEgnd0rP + tCKQLqbUonA3y2FgLtTr2e9scvY/xWUD2O/VsFVCmn5cGMDMgV+GgbFPAuOgBLtcMoANfI7Zw/zjFVNA + 66GzqaA0yiATVbbC8NXGTGCxL9NTuLP9sgEs1vtN0a5EkmY5UtmK6l+NNVW6ts2rhTfLIpm+kglc6JFa + YQCLKmABsVawitwgVROHVHWcZALLdUmS8Sv2Y8eSoGPcuGQAy4QprUyUTOAvG8BfNoENFHsGm47vUwMt + 94WxrCGM5lQ4XCrkME8XMZ/lF7rg8qkkA9jukcGVoYIv34jMIhtyixyLBrCdfcjMHKpHnoe8wK1ChduA + GorHGorIWrsB1VYtKkxKlBgUqGDOr3FbUesRMKHepUeTU4smhxLN/FxaHWlskySINdCb3MlodqdIaPLE + 0MBj9Z5k1IrWl4r+QhOGIhYMFpsxGDZxX4e+oAq9+TJ0ZyWjKyMevVmJzJfJmCySY6Fch/XVJmxtsGFH + sxPbGqzYUCWMXjlmI6lYVa7AXKUSs2ynihl/C+IwmrMSY8wlU3kp2FJpwZ56N/bVObG7wohdxUrsLErG + vlLG4CoZc5Ea19fpcV2dEdexr4tf224pUWIuJx4T/mskTAWWS5jNJE8lZ1pNvjSXm4rVBXJsLhPGrxFr + itWYC8kxlZuEyexETOckY5zteFYcpoKJWFOh4L1rcWDAjlsm3cwNXtw148GdFB5Hx904MuDEfo67TRyv + szx3rESFgQjHKDl/fdCKAn63TuYaAzWCVstxwD5iZp+wucQ/Af7ZAHbYY9OsS1XAkvkrl2BmHBMGsMX4 + DwPYST4qgeNNrAd8yfz1+WKtX/xIaBEB5j6xHl0u43uBtP6vXjJ/S8kbhekrUMrPo1gYu4zdwSINQoyH + IQr6HMb6LMZ6gewCFceQmtCwb2oJ9keek0uEeK3SSgeq6r1obMvG9HwDrrthGncd34GHHzuAZ569FV/9 + 6v148xsP42uv3ycZwGJ652+/+agEMe3z6y8Jw/dOvPrCcT52Aq+9eJdk9j5wz148dN++yyawOPb4Qwd4 + fA/uueNaHLtVVADP/JMBfO224ZgBvCVmAM/2VWK0MYSB8szFKaBtzCd83245gvYUyQDOd8fMX2EC5y8a + wMWOBJQ5V3IcrWReSMYQY/pYXiKmxA8EihIxW0ItVJqCmUoZZsVU4IsG8EKHg3BjQ3cWDs7V4vlbNuKN + u/fhqQPrcPNcG/YMlmF7byE2tudgbaMPI8UGjifqNebTzlyOqXzG9xDHGMdZDyEZwVKuZD7g99BYwHEc + Yo6q0mFNuwvX9vuxvcuGNbUyzJRdI60Bt6slAbcPKfDQtA5PkMO8usaKH+zIwk935+NbGwN4YcaGE/0q + 3NySiP3VV2N3dAl2VV+Bw3XX4J7oVXiq7iq82rkCbw4m4OfTFNxz1Ghr9Di10YKz6604Q67z8YwGH0+p + cX7egs/X2PHZOor79QJWwoKLG0V1MI9vdBIuCRe4fWG9C5+uJc9dxBni7FqnhHPrPDi31oNP13slnNvo + w9kNXgli+9ONHl5HmMBufLrNg4+3BfDetgy8vzeIU4fK8MGxZvzXsR78+FAPXtnWhocX2nB0ug83z07h + poX1uGnbXtx2yzEcved+nHjiabzwlW/ga9/6Ab7+nR/juVe+hgM33YH23lGESqIIZBXC5cmD3ZVNrpUT + gysXZlvMFM7JK5eqgBfWXIu163djbvUOjE+ux/DwKsnMvQSxP0KMji4Qomo3BskMnlyHmZkNmJ5ej67u + MY7FBvj9BfAsGsD+QBBV0VZ0do5gYnwN1qzZgfXrdmL9+n9gw4ZdEjZu3BPDorkbM313YyvfszCDt22/ + ToLYvoTLpvDmnXzOTmzawudt3iMZtqICWExH7XRlwmR2w+ZIRzBULlUNz81txJq12/j6O7B23XZp+xIW + 1m6VsHrdNsyv2YKF1Vswv7AZ86s3YdWqdejtHkZrcxcaG1tRV9eEtqYuDPWPY2pyHpMTc2ht6UYoWAKr + zQu9wQa3Jxtl5Q1obRuUKqon+TnMTK7F3PQazM/OY37VDBbmprF+YQob5qewaYHb8xPYND+ODXPDWD/b + i9UTLZgZrsF4XwVGOiMY7igmSjHaVoLR1ghGWrgvlhAipJb7Q2yHmoowXF+IsZoQxmoLMUFMVocwFQ1h + NlqImYogpktzsFBZgM1iGuf6CDbWFEvY3liOHY0V2FYXwZbqImyLhqkBwthRGcPOaDHBbQnFMRNYmMH1 + 3K4rwrWNhbi2OYStTZnY3ppO7ZqJ3V2Z2N+XjRuHC6hPinF0qoRaI4Lbp8I4PJSHfb3ixyABXDfK2DNT + gBsXwrhxfQn2r+drLBRgw0wWFibSMTvmw/S4H9MTxGQGZqYyJcxOZ2N2VQ5WzeURufy+cjE9l4Op2WyM + z2ZhbDoDIzxvaDIdfRMZ6B4PoHPUh9ZhN5oGPWgccKNhwIW6fidq+5yo6qS+J1fNr1MRzC/Mp+Em6ot6 + LfKph/IqZAhWqBCOUp8RkRrmJ7alNdQaRHmNAZU1ZkRrLKilvm6oc6ClwSUZwJ2NXnTWuaQq4FZqDGH+ + NpM7tHG7XYJNMoDbhRG8aAC3RMxoIm9vLCI3oq4RqKP+qMvXoZYQlcHCGBbHm8MWtJI3txOt5D0NPK8m + R4XqDOpJooY5VUAYv3XUSQ1Cq+QZ0Cim6qeOas1m/M5mbKeuG3KpMUYOtsoix04z467LjLv9bjyUGcDJ + rEw8HvDjYYcbd1pt2G/XY6tLizU8f4raboA5vtMlQ4tHgQafEtVimmovdQWP5btSkWlPRga1oJh+WQL3 + A8L8tSchYEtCui1NmtJZrAHsIz++ZAC7yOljJrD4H4WoCOZx6kUP4TIlSwaw05AkGb8ebguIil+7cpk0 + 9bPLmIgAr5lNnZpH/ZorkK6VlivJEgYwW7Eert9HnuJKgklU/JqWXV7zV7to/GptKyUIA1jA6IiXjF+j + PQF6Kx+zLCUHXwaLK1EyfkU1sNWdCLtPIAFOfzzcgXh40hPZrpS2xbrA4gdswgAWS1yUlOkRKdEynqlQ + VKiUTOBwkQzlpUrURTVoZZ/sajcyNpkw0GOMTf/cIaZ/1mC424ixfitG++wY6rags4l8mn23rkyB6jB1 + OrVscSb7N9+zMOMFgl4FSjJ0iGaZ0JhtRQu1VDvRkWFFVzq3vSY0O3VodPBabBvIB2uE+cvvpIo6odpC + /crvo8KUgnJTKqr4PdVQLzX4qLEDKnKSZFQ6l6PccRWasuPQEUpEL7l1b6kMXcUK6l45WkIK8gUZ6slr + azMTUUNuW5OdhOrcZPZx8T/lZJTkJCCYtRJZGUvhz1hGrKT+Yx9KZ/9g37Ly+xU/RLRaRAWkFmaTmEFw + sXDk/zGA9WpRMJJ22QAW/zd0WGLLz9ksBgliW5i+wgD2eRzUjk54CZfbxnhvhFmYvQZNDKIqWCxZJ4zh + LxnAwvxVaeWSASzWAjaYdZIJbLGL9YIJi5nP1UGjoZ5UySGXpUmQqn9l/zCAdXoFX0/D90q9le8jF85B + bU0QzfW5aK72o03MHlCURn6WjE01chzq0OPOPiuOdhpxsI46pEGGWzoMuIvH7ht14k72kRvqZdgTTaY+ + UeCmZh2OUJ/fyPh3AzXCDeSI+xkDd0SSsSUYh7VZy7EmfTk2567EXuqgA9QQN0ZVOER9c5i4RTJ/2Var + cFNlGpGKw8TBqiTsr0jA7tIV2Fa8HBvD12Bt5GqsLlmKhdJrME8OKNp1JcuwoXgpNgavxNbg1dgbXoFD + pUm4tYLXKk3EdbnXYId/Cba5l2CnVP27BIdyr8axcBzuKUvGiWjMAH6sQYmTxBONCjzZIMfTTTI8Qzzb + nIpnGlPwTEMinqlLIJLIG1PwRG0K7i+Pwy15V2KvuL5rCba6YwbwoWIZjpbLcbwsTTKAH+N5rzWLKaDl + +PqiAfzm/2MA/6rmGvyhcRnebl552QD+tC8VF3pTcbFPhnO9MnzUnoi3q67Cv5cswX+WL8Ff6pbineY4 + fMDzP+pJwum+eHzcH49PBpLx8aAap0dM+HDChv+Z8uD7fQ4cL1Vg3pOAakMcPMok6JWpUMmTJBNYmtZc + VLZrZQT7+eKav8IA1hrFDxUUlyE9ZpDDSD0uYLJwHNgWp322xwxgh8sgVf+6xUydARvjURaKQpkoJIQZ + XEUuMDk1iP3XX4vj99yGBx++Gzcc2CUZv7V1peRNlRib6MP1B3ZKawILA/gv7/wJZ85/hE8vfoxPz59Z + xCc49+knuHDhAj7//DOcO3dWWuf3h9//Hl549hncc+eduH7/XuzYshm7t2/H/j27cdMNN+DEHXfgkbvv + xsnjd+HJu2/HE7cexBM37cX9u9fi8FwPNpE/CQN4oT4Ds9UejJdbMRQxoDvEOJovRxs1dWdEjb4qxtJa + G7qrjOghJjvTsW22DAe3txJt2LpQgen+bEwOZJKXBTDU5WJsNaKJfb6lVo+ORjM6m5m/G8Qx5tmKFMbc + RLTVytHfzHzaqcd0nxHTvTpeW42ZDn6HbXKsbZFhE/vntvpU7KlPw12Ddjw2FcCzq7Lx8kIuXp7JwItj + Hjw3bMPJXj0e66ZG6tbjKbbPEM/2avGcQJ8WT/WrcZI66ZF+JR4ZVOGhQQ2hw0PDBjw0Ktb/tuG2bjX2 + NaVgD8fDgQ4t7hnx4FFyquODTtxYl4b9Rdfg9qIVeLJchm81WvATarYf1BvwberGb5fG4184hv7YlYa/ + 9cnxXl8aPuhKwYcdiVLl79meNJzpTpXwSS+3RX8fVOLTIRXOjVB7jWpwYVyD82MqyfT9qC+ZSMGZIXnM + AJ6JGcBfTGvx6ZiCfT8FpwZSJAP49Igcn4wpJRP43IRawtkJFaHAmTHxmAyfCAN4RitNFX1+XiutEXx+ + tRYXVusIDS6u5fY6HT7fZAK224Hd7hiudeDzrWZc2GTEZ5tN+GKbRZom+vMtxGYzdaEF56kVz1I3np5z + 4NSsGx9KJrAXbw878YdeM37K7+6tqkT8qC4VP2tWSlNA/6RDhl8PaPFfkza8v5CO0+vy8e5CPv66IYK/ + X9+CM3eNYknEb0VJpgNFmTb4SKLMOgZ8+Uokp16DlNSlkKcth0ZBskHolfEwyOOhEZW/8VchLW4JVAlX + QpN8NXEVdCnXwCwj4VGTYBjT4LeqSagMJFI62Llv1SeSTCUiQ/zii8SvMF/PhKoglCgmoawstqC61CGZ + weF8NSJiHUUOljoS1NZaB7qavOhvEQawFwOtHgy1eTHY7kF/m1P6BYQwgOskA3gFSrOvRjGDtGhrgivR + wUDaX6enaDFLBvB0jx3T3XYKGpLOWpIAJoq28nh0Viaik9vd0RR0MTl1ViWjvTxWAVwfXIqq7CWozrkC + TaGlaC+OGcCDwvhlMpPMXw6k0ZoUTIjq3+okzDHAr2WQ3tKaiG2dK3Bt31U4OL0Md29Lw2OH1HjtfiO+ + 9SS/wNds+N23LPjjj434y8+1eOdfFHjnN0l457fx+Pu/JuDUf8pw+o9qfPAfGrzzryr8Dx//y691+ONP + LPjlG0Z883Elnr9DjhPXpeGW9cnYPZqENe2pGChRotKfilxrHPzGOLgEKeV3bDOkSnCKSl5TEslsItt/ + GMB2Eln7lwxgyQRWkWRK6wHHwyqMY7NMMn5tiwawgPhFZJZbgyyPSjJ/3WaSYnF9U6zK12dPkeAl2fZa + edySICFmAItpn1dKuGT+uniemJpPVPJ5HQlwk/R67CuQSXKbn5H6TwZwWIJCQjGDa9GiAVxIAnfJAC4r + saMkzERSYEcw14acDAuy/GZe20BSLwxgDV9XkDH9IkxSJa8gZxLM5suwm4z/ZA6LbXGOy2aW4CV5Cwji + 5nZw3wQbCZqoLPZ7hAGcjtJwENVlRShnGwlmI5R7qQLYs2gAZ6Miks02g/frlkxgUfl7yQAWEAZwCVEa + ilUCV4U9qC3xo7kqm8E/Dx31QbRWXzKAvSjnudU8r1GsB1yRJa0J3FaRgZ6aTIw0ZGG6MRsLjelY2+Bj + YqA4FgZudwH2tuXgWj6+OerF6ogdM0ETJjh+x3JI+nO16M/VoJvb7RSEHSEDesQ0tRV2rOvMxb7JMhya + i+LAXBW2T4Qx05XOcWVEWSgNudkJ8PriYXOzL1AM+CwpyKWgqiGZnqDwuG3UjG8cSsd/PxHE2dfzge9k + Ei7gLQdbOy581YozLxlx+mm1ZIR++LCo+P0HRAXwh/el4sN7U/DR/QzSDzERCBP4GRvwtQx88eMwvvh5 + BfCTWuB7bcBX2yUD+A+7s/A6E8hdhUtwNLgED1YtxQvtKnxn2I4fj7vxswkPfjBixdcH9DjZmoS7a5fh + tprluLkuEYcZhA+RvB6uI6GttZKsmrA3osGOYAq2FcTh2qKV2FO2AgdrV+JBJqJnpuR4Y50av9hnwt/u + 8OLTB9Lx2cN8jyeYKE7ogPsVRBrO35eEsw8k4OxDJGkPJ+HjR5Nx6nEmwCdS8N6TxNNyfPC8AadeceGj + r2bj1JsRfPLzNnz6X9O4+P5m4Nz1xE3A2dvwxd8P4aPfbsZ3H2/AkTkSDhLgjvSVaJQMYA2KzUoEGbML + GA8KOW5rvAnoLpBjslyJLc16HBgw43aSwiNDGhxhkj0yrMSNQwrsHyCR6EvEnsEk7B1OwX7i4Ggqbp1W + 49gqPe6eN+Euvt6d3L5jRo/bpwy4fdKI28aNuHnEjAO9RuxuUGMzifeacArm8hlHs2UYDsQqgPsztRSF + erT4xFRQalQ45ShzyVHi5pj3KFHItsCpRA6Ppzsp1J2pkvkb+3VuGgmmMIBTYaJw/wfEfiqMxmS2Ympo + JfuiBh6vhqRTS9HDeJZjRGa2nvsKeAMypFPE5uTpUVBgQojIz9EjX+Q0joviQqLIgAhJXqRAmMBylBYo + UZYvQyXb6pAadUVaNBRr0BTRobnEgNYyI3OUGV1lFM1lJnSUGtESptjNU1CUErkUtLlqNHGcNecZ0JJP + 5BnRnBtDU46B4taAhiwj6jPNUkVvXZaNz3WgOtuJKHN8NMO2aP7aURWwo8JnQcisQD5jeZlHh9agh2Q0 + HR0RL1qJtlIPOiq5Xe7kNsllqUkygMUaxu25JK8ZyWgLJKEnOwWDfF/DQQWGKaTH+b6myk2Yr3Njvt6H + sUonRbYetXwPpZmpKM5m3M4hclNRkCeMX/YzqQJYTPvM+F0k/uHANixmbiDCqSiNyFBeJkO0UomaqBr1 + dVpCGMC6RQNYK6GtQScZwF1fMoD7RQVwsxYjbbEKYIHRFiOGGkzoqjaglq9VwvsQBnAReUc06kPvQBVm + 5nuxZv0EJmcG0dwWRSiSgXR+npfMX8kAzhYmsFMygQMUx3aOHWEAm5hXjSJHir5EXnXJAPZ5NBT0SsmQ + Egaw2ZJEER6rQBcw29Ji4OMm9lep+pcQBrBJGMCeRQPYrobSJLtc/SsMXwGFUSZBxXvQWCmsFg1gNft8 + KnO/qAIW6/8KQ1hnj1UXC3NXVPqKaZ8FMoMuaT1gYQBfOiYeF9XIwvhNUa1crASOVf/+wwBOhKjivWwA + kzMkKxL+TwNYxdgSM4E1hFoyg8W+hp+ZgZ+dqNL3cvyFi/2oqS9ARTQb6dnMt+40OBkHvNnMoxx3GUUW + ZBdakR2yIr/AFjOAOQ7yfGrJAK50kz9SQNY7OS7s/K6Z26soRssNfIy5uMFrR6OPIA9u9pjQzvPbXezf + TjU6+J21Mm60EM183WZXGprYNrlS0egmPKmod1NouQhPGur9cnQVGNErpmMvNKI7aEBHnhrtjF8dWanS + WGn2kYv6EzhmkjDCPj9VrMJcuRbraszYUGfD2qgJq0pVmAinYZx9fqpChUlihNuDYvq67JXoT1+Oft9y + DKfHYyNjxs4aMWW+HdeW6XGtWAM4nIy9ZWnYVyXDvmol9tZosKdGh911RuyI6rCmKA3TWSsxkb5MwmTG + SgkzvKf5Ahnm82SY5pieyUnDXEiJuUIlJvPIa7OSMBSIYyyOw3hGIl8/gfsrMMp7mitOw6ZqirsuK24U + U/mPuXFsyoM7Z7y4Y9rPPO7FwV4XdrZbsJY8fKqS45F5sTPiQEWmCX7mfIOcWkMeB42G2yaVNJW41alf + NIDVsFFP2O1KtmK6Z8ZyK2GRScav2cSxwr4jDGDzlwxgt1MVA8eeQMCv+iek+xSXkeFXIjtDxViuYRzX + Me6YUBIxorREGMBGlDBOi0pgsR5wPj+XvKAKBYyFBSE9svJ4LcZpgQzGuYx8VQyM/5nUMVm8XlZQi7xC + HQpLzSiNMi43+TEwVoade0Zx7K6tePCR6/DU0zfh9dfvwTfeeABfefU4Xn/xLnz11Xvw5jcewptffxjf + eP0BvPL8XXj+ydvx4jPH8PpLx/HCM7fjsYduwN3HduCeO3bgwfv24fGHD+KJRw/h0Qevx/3Hd0uP3X7L + RuzbPYGN67qwZr4NG9d3Sybwru3D2LGhH2unmzDTV4Gx5hAGKjPRQy7ZmmdFXUCHUvGjXXsyc2uKVEl1 + yQDOu2QAuxJQ7lqJWnK5TvadIcb00bwkcsR4zC4awNPEFPO6WAdYGMCziwbw6ksG8HwNnr9lA7561y48 + uncVDkzUYXNbHtY3p2Oh3oX5aitGw4zlQfIAcpFeop/fwWChGkPMlf1FGvQENejk423ih1NEQ4ECjbyX + nhINZpsd2NztxUbxA2DqurHiq8h7rsDG2qU42JOE40MyPEyh/8qcCT/ekYV/2RfCD7fl4GtrfXh+lRMP + DGtxpGUl9tZeiW3VS7C7fAlujyzBI5VL8HzzVXijZwV+NqXA7yn+/7rOiI+32HBmgwWfLOjx0bQSH00q + cXbWgPMLZpxfcwnGGNZS5BMX1zlwcT2xzs59Gz5dbce5BSthk3B2tQPn1ghT2MXHvXyuDxfW+SWc3xjA + p2zPbvDjHLfPi+mmJRPYiwtbvDizNR1/35yB93bl48ODpfjgEHy+jQAA//RJREFU1ib86bYu/PSGTry6 + qREPzzbi7qle3Dk3izvXb8bd+27EsdvuwJGjd+L2++7HI888jxde/zpe+dqbePbl13Hz0eMYGluFytom + BMMVyMyNwOPPg8ubTxRIcHryYbFnwc3tSGkj8+gQOrrGJXT2TEpmbVv70GW0dwyjg8c6O0fZjkqPC3R1 + jUnoEI8TtbWdKAhWwOfLZ57IkyAM4OJILWrrOqVzBgZnLlcUX8LY2IIEUWEsQUwJTUhVt9PrsGpug2TA + CiP2shn7JczNbyI2Su38AsG2r39CWv83v6CMvDGLcckLpzMDocIKDA3PYHZ2vfTcNcLo/dI1xTVmea1L + mFq1HjM8V6oOnhWG9zx6uobQ2NCB6qp6VFXVorGuDd0dAxganMDY6AyamzqRnR2C3mCHVieqw9KZM6vR + 0tqP3r5JTE2sxezkOszNrMX8qgWsnl+FNQursH7NKmxYvQqb1syxnWErTOFxrJnuw8xoC8b6azDUVY6+ + lmJ0NxehpymM3sYi9DUUobe+ED11AiH01AYldNcUoJttXzSEoWghRqoLMVZdhAliqqoIs1HqvopCTJXk + YaEihK0NFdjREsX2pippe1tTBbaz3VpXgq21xdheUywZvbuiEeyqKsZu0VZHsLO6BNeyFdW/YhroHQ3C + BC7CjqZCbG8uwNbWHGzvyMS1XVnYKap8+7NxYDgPN08WUYMU47aZYtw+W4wjkyHsH8rGvsEMXDeRg4Nz + IRxaH8GhzeW4fksprl0fwsaFXMxPZ2BmMoCpST8RwCT3p2YyJUzPZmN6VTZm5nJi4PnTqwm2kws5mJjL + xhgxzHMGeW7vTBaRiS5eo30iHW3jAbSPp6N5zI+m0QDqBtwo7TAh3KInjChuNaG01YxiYQLXqCUTOFgp + DGDyIqK4mjmK+bxEGMFEWY0BFeQRVdVm1NRZUF9vk6qAhQHc1RwzgNtrHWgXJnCVVUJ71Ib2KmLRAG6r + NMcMYOaoFskEJi+KiGpgswRhCDexbRHg8dYSYRjb0V7uoH5xULvw+tQKTUV6xl4N9YsKDfnUOvlCy+gk + w7eBuqmeaKCGqSeaCqh/cnXoyTVgkLlm3KvFDDnpWnLnvWYVbndYcJ/PjccyAngmKwtP+dPxuM2Ne8w2 + HCSn2+HWYYNLhVny2SFHKrrJ09q8cnI6agW/AqWSAcxcxdyVLkxesda/Iwk+UVRgF0iE35ZAJCJgS5Ug + DGCv+P+VMHqFAUye4STPcApeQc0ogXrRZUpiK/53lgQX98UU0j5zslRJ7DEmSP9vE62f1xL/E8tP1yKU + Sa0oQYe8LI1kAudkqpGVoYTfz9dhPjUKo9dEPmReQV7MVqoAFuZv3KIBHC8hZv7GIAxgjXkpufQymF3x + sInpoD0xA9jq4T41vMMbD6cvDk5/HLeXc3ulVAWcS91WXMb+U2mSTODyCvIeYQRTyxVQtxbkJZMTJaI8 + koYG9sX2Zj262qmx2plvW5XcT0N3mxKDXQaM9lkw3mfHcDf1bKMGjRUKVBfLUEEOGclMQyE1tOAPeW6x + nIQSxQENqrLI0XPY7/Kc6Mxxkuc60Uf0U1v1UFe1u41odVH3O6n3yAfrLApEqSEq9EmoNCSjgiijHinV + JnI7FdXkfnXke/UeOaqdiSizXoOI5Qo0ZCxHW34cuouS0UXOKszfVurOZnKJBvLe2pxkVGcmUS8LJKKK + nDjKYxXZiQhnxiEvfQXS/cvg8V4Nb2Al/Jli+mcZHORHFqvgokryT1H9qyUX1cKsZ6tXc5u6SFRFLk4B + fbkSeNEAtorZB61GOO3mf4bDTO1ohc/rRCDgYY5z87UdcDgtMRPYqqeGjEFUBf/fBrDiSwawVjKAzXY+ + VzKAxfq/Wmh4D3JFGmSylBjkyUhNTURqGnWeIglqTRpM1E3pmS4EQxkoqxCzbRShsT4fzbXp6Kh2obeC + vJ5xaWujDof43d/Rb8cxtoeaVDjQrMKtPWbcM+zAfeMuHO0147q6VOyuTsKBRhVu6zLjzn4n7mC/ua3D + ipsZ/w41anGA+uX6yjTsL0/F9aUpuLFChlurNbiN+v9W9sNbqTluo745Km0rcRtj5C2VqbiZOFKVhkPR + ZKkKeG/ZSmwvWY5NkaWSAbymdCkWypZinhDt+tKV2Fi8HJsLr8G14eV8rQTcQv10J697W5UcB0MrsSfr + SuwKLMG+jCtwIOcqHAmuwB3F8binNBkn+FrCAH6kTo5Ha2V4vC4NJ+tS8GR9imT0Pt2QhKdrE/BUzUo8 + FV2Bp6ri8ERVAh6tiMfxyAocziaf9H7JAM4VBnAajpYrcLw8ZgA/XhaH15sUeKNZjm8sGsDfqkvCt6Up + oFdcNoB/37j0nwzgc32p+LQ3VaoCPtudig9b4/F29Gr8R+kS/HvZEvyp5mr8T8MKvNcu1g1Owul+YQCv + xCcDSYQCpwe1+HDEiL+M2fG9LhOOh1Mx71iOGs0y+JQJMQNYFjOANSpRBZwCHfuLMIG1Ojm0eoVk/qr1 + 1Pc8JvqSaCXoUvl4GrQGGftnzAw2MeZfMoH/yQD22xBi3ysqypKM4EK24eJccp1qzK4awa7dm3Dd9Tsw + Rx7T0FyJcCSHui0fre012Lx1Ne47cQw/+9UP8e4Hf8H5zz7G+Yuf4PyFM5dx4eI5iL+LF8/jr3/7C378 + kx/iwRP3Y8/OnZgYGyMXI69sbkZPRwcGu3swOTRMnrAB12/dipt2bMPtO7fgzh3rcff2Nbh1zSj2DDZg + XXMQqxuzMd+QgclKJ0aZVweoI0X1b1tQgZYgY1CxCj0VBvQzb3dVGtBWokYP8/h0VzrWjRdh03QpFkaD + GOn0YYhaqb/DSU7GfFyrQW0l41ZUjdYGI/O8Cc3U1nWVSlSXxNYsb2K/bK+lVmpUYqSdmrtDjRHG6fFW + OaabFZhvkmFdvYwaSEzdnopbuy14aCKAp8lXXprPxQvkPS+MuPDsoAUnu3V4rFONk51aPNmlwTOdGjzb + pcYz3Wo826PGU71KPNGvwmMCgyo8MqjBw4M6aTroB4YMeHDEjHvZ3trHWDCkxV0TVjwy7cGTs+l4YMSJ + W3gvNxRdjdtDS3EykoJv1prwQ2q275HnfKskGd/m+Pwt+/yfO1LxTk8aPuhNxqmuJHzUkYgzXSnSjxtE + hbsE9tvzg0pcGFXj4pgGFya0+GxShy+mDbg4qcXZYbk0NfTpgRSc4fbFCTU+n9bjixmdZAJ/Pq3BuVE5 + PhpMixnAwzLJBBaVwOfGVDg7ppRaYRSfW4SYJvo8n3dBYJUG5+fYUgteXK0jFg1g4vMNRmCrDdjpumwA + Y7MZFzbocXGDQTKIP99koG4TZrERn20wUd9RA1IPfrJgx+lZJ07NuPHBtBd/GXHgX7v0+FFNMt6qiseP + alPx82Ylfsrv92edCvxuyIj/nvHgo3U5OLMpjA/Wh/EOOe77Bztw7p5JLMl36FDoN6Mww4qAUw0rSYxa + uZLB/2oJ8pSl0MhWQE8YFHEwKxNhZKtNWgp14pXQENqkK6FLvAJ6tmbZ1XCqV8DHhJxuVSLbaUC2ywi/ + Q0MylQqPPRmZJGehXK00BXRuIE2CMPHKCk2oitgkA7goT42SoDCF9agWa5ZUiV83kBS0eDEgjF9iuJ1t + hzCAHZIB3MbEUFuSgqqC5SjJuRrhjCUoyb4GtYWJ6OCg6K0zYJgDZ6zdgqkeO6a6bRhs1qCrOhWtZfFo + Ll2OrooEdEeT0MPE0VMtTGAxLXQSWiMrUR+8JmYA5y65bAD3ViVhuF6O0YZLBnAKRmuTMVmdjOmaJKzm + sS0tadjDznnDSDIOzcThrk3JePyAFq/cbcYPnvLgl6/68K/f9OI/33Li7Z+Y8LefafDuL9Pwzi/j8c6v + 4vDev8Tj1O/ZAf9dhVN/0OKDf9PhHVEh/CsD/vJzO37zDSO++WganrklgcFnOQ7PrcCu4Tis50AZr9ai + PluJIAluhjBhtTED2K5PldbwdZoEiU2AmyTVaSA5ZCumgnYIkFDFpoCOmcBGVTy0CpJM9g+jlsSSREv0 + F4FLBrCYDkdMAy2mf/aQCIvriF8/eiyEWPvELUdAGH3OVJLwZLhJyN08fqkK+MsGsJPH3ewvlwxgD4m6 + 00LSSoIbcMYjx58q/XhA9J0iCo0YFBKKSeiE8RvKTZTaMAluecSAshIbSoqtKCqwIphrQX62BbkZogrY + CK/4xZHtHwawWA/4kpkr1vKVYLddhssWm9b5kjkstsU5oupXqvx1OaTpnv1uO8TUz2JKaWEAB3gslJuJ + suIgqssLUVUipoEWBnAgZgBnuyUDuCycg2hZHipLchAp9PF9iOP/MH8FhPkbWYRUBVzsQU2pn+Mla9EA + DqGlJg8N5ZmIFvtRznMqQ2K6aD+qwz7UFLnREPZQxHnRV+XDaJUX41VOTFEMrq52YHNzAFuIjXVurOVx + MbXrVCFJfp4Go7kaDOeoMMS2P1eN7mwV2tjX2vhYV0iPAVEF2JaJ3aPFODBbgf0z5dg4WCBNddFUIqZ+ + T0I2ibXHzz5HoeJmvxDCKY/9qcaWhil+h0fHzPjWTen4y5NBnPtKLvCddOC7DJjft7O14bNvOHDuNQs+ + fl6Pj0QF7OMqnH5UiY+JTx5R4vRDCny0aAKLaZM/OaHC+YcYlB9loH3ejQvfysX5HxTji+9Fee0m4NUW + nHuoFv+xJwdfH1LjvtIrcCy8BPeTXD3bLscbgyZ8f9yBn0268eNxO741bMRznal4sIlEsCkBdzQl47bG + NNzSqGZCM+JosxO3N7pwa60dB8s02M/4dEN5EolpEm5rSsIT40q8vlaHH+6y4t9vZqB+KBsXHk/HZ485 + 8MXDBuARNfBQGvBgKs4/mIhzD8fj3KMJ+OQxkruTCfjoyUR8SLz3tEAq/v6sEu+/aMEHr/nx/hsFOPWD + Onz6h1FceGcd8Mle4gBw+jA+/9t+fPCr9XjzRBVunNRgongputLFFKcUa/aYASzWxSyk0I1QGNenJ6O/ + SIlVguC36nF9vxE3j5pw87AWNzHZHuyXYR/J5s7ORFzbFY9d/YnYPZCMPf3J2D+YjJuYIG+d0uCOWQOO + zehxlEnydr7uLRMa3MwEfWSEooHk4LouLXaQQK8vS8Y84/ZMbgrGKBoH/YsGcAb7ljCAvRrpV77lFOol + djnCDt6rU5i/FJcOJTIdcsYMGcVTmmT+ClgdabDYKdJE5SP7WQxiO02qONQzHuoY00xmsb6kiuRTCSdF + u9unptDTws/XdvnkcAfkyMwVVWA2REo9KIm4KY6tKCy0oDBkQXGhGcVFRhSHdNIsFpF8BUokA1iO8gIV + qkJqRENajj2+h0I1atnWEQ1hLZoZo1pLTegot6CN46cxxMeYC2OI/Xq+Pockj21dtgG1WdzOFjAQRklE + 12fb0ZDjQH2uS0J1tgtRCulohh2VfiuqAg5UpTskAzjPlIZs5oNip/hnjRMtjDNtxV60l/iYM/2SAdxY + wmuKeyvWMecRRSScuTI0ZZBg+uPQnpmAnrw09AdTMUhBPVKswXiFETN1jCOMG/1lVl5XhxrxGfB5xXmp + 0qwMhQWM3wUyCeJX5jHzV41IMXM/SXBJiQplET6nRI6KMiWqKkhsq5jjRU6TDGAtmsT6UvUaNDfoJLQ1 + 6CUDWJi/lwzgwVYtBltIftspUDutGG83YaBBS5LN55RryBdkiOSIXCLyhRrV0QD6hqoxv3YYO3avx9oN + s2jrqkdeoX/RABbTPwswvmcTWS4EMh2SAey4bACzH/2fBrD6sgFsZz8U6wSLHyaIimCpKpj9VwLPsfJ8 + MUWzif1QTAH9ZQNYTAH9TwYw+62CUHHcqi0qaO0U+06t9BwDeZ0wgNP08f+nAWwS95dOjpZjixnAzCti + Kuj0fL63RQNYmMFWjjk139cl01emjU39fGn//zKAk+QJ/2sKaJVBrAccg9qoWETMGNaKz43jUUylFuDr + VTJvdXWXo7k1jFzmbDu5oztDjUCeCRlBMwIhE9ILjMjINyKXx8QU0Pk5BuT6YwawmPq5nvyzwUEIA9jC + cWfWIGrUIioMYLcVDV4bGr0WNLspopzsPw4tOhzCAFaglTGkhTGkyZWGRsaQenKROkJq3amS+Vsj9r0y + NAR4fo5W+hFUZ4EB7eS4TZkKxs4UNPoYQ11xqBVrCbtXoM0fj97MJAxxHIwWyjDF3DBDEThZosNYWBkb + R+z/41UGjFXq0RcWFY8J6MiIQ5dvJXrcKzHoS8DaiAlbK23Yzny9jTl1W1i2ODUaOWdlGnZWybEzqsR2 + isQdFFKbKjSYCyZjKicek9lxi0iQMJsvwxrGodWMORPZqRjLSsZ4Lu8vJwWD6Qno9fJ1PcvR712BkUAi + Y3KCtD0YWIEZjv31vPauViv2cYzdOOBgfnDh6JQXd8yk4+hkOg4P+7G7x4l1DQbpH0Uj4p/NRQ4UuXWw + q+KgSLwayjRqC434Z4AaelFFIdaJElOB2ahNrCpYLXKY2T9M5K0CwvQVMIjpx/XkqGy/bAD72P9jUEsQ + U/oLZCy2WWIdukVkM77nZWsRzNdJ8buk2CyZv5IBTEQi1CWi4pcxO4cxPYd8My9IDZOvZRxQwpshI9Lg + yyS/zeZYF8hVwk8+FOA5mcwF2fxs8xnji8p5bfKrpq4cbNjWg1uObcADj+zFk08dwquv3YU3vnofXn3l + Trz83FG89tJd+MYbJ/CNrz2AN169Dy89ewzPPnELXnjqdrzw7FE8+dhNOHHfXhy9dbNU5XvvXTvxwP37 + 8MgDN+BBtvdw/47bt+LI4XXYsW0Y86uaMT1Zh/m5Fqxb044tG7qxcaEdc2M10rSvI81B9FdloCvsRkue + BdUBxmQX46MjCQWuZGnaZ2H85npjrTQFtCsBpa6VqGGf7MhOwQBj6nB+Mkbz2c9EHi9JZd9OwUSFjLpo + 0QBuNmKh3YHV7cIAzsSN8zV44bYNeP2uHXhw5xj2DJRSP3kxV2PHbNQkjY8x5oaRIvFDI44R8pEhbg+x + HQ6rJX7SG1Sik/24jd9PK9HInFufn4YOPjZZb8XaDhdW83XHycEGCq/ECLnd2uqrsL8jHsf6U/DgYApe + ntLiB5t8+M2efPx0ew6+vSEDX12XjqdnbLijKxUHW5ZjV+OV2BNdgqPlV+CR6BV4tvEKfK17OX4+rcS/ + U/C/s9GMT7ba8QnF+8cLWpyaVuBDMV3YjAZn5vQ4O28gRKuTcG7BSJhwfrVFwgXi3LwJZ1bxOrOx9qzA + nDCEXfh0jXvRAPbjwtpADOvTcX5dAOfWB/DphnRc2ODH5xu9hA8XN/txZks6/r6R2JGHD68vwQdHGvCn + Ix342d42vLa+Fo9O1+LB2T48uHYBj+zYiUdvuhV33nYU+w8dwr7Dh3Dr8Xtw4rGTOPnM83js6Wdw87G7 + sHr9ZnT2DaKuqR2llQ3MgyG4/QXwBgovwymMYHceMrIiCBZVo6S8CeWVrYjWdiIabUM59ysrmyVURVtQ + VUVUt6KSrUCF9Bi3iYqKJqnKN1JSh8zMosvmr2QA+4PIyy9DOFIrXaOuvktaB/fLaGnpl9DaOhhDG7eJ + 9o5BdHQOobtnJLYGb59Yl3hM2hZr/Er7hDB7BfoHxDrFk+jntliLOFwcRU5uMTzebNjsft5PjmQAi+uK + 80QlsFhTWKwhPDwyKxnDg0NT6Cf6BifRu7gGcN/l1xCvPSIZvFX8XIvDZSguLkO0qh6N9e1S5W935wBq + apul6Z8NRgcMJmEMZPAzKOV7F2shj2NkZBXGhomxWYyPTmFyfJwYw9SEmEp6BDMTo7F2cghT4/0Y7W9D + X2c1OltK0dJQhKbqAjRG89FcRbBtrSpAS0Uewf3yXDSXZaOpVCBLajvLg+itKMRAZQhDlUUYjxZjqiqC + VdURzFaGMVdRhA11Zdjd2YgbBtqxv6+VuqEZuzrqsau9hvmjGrtbq7CnpQp7myqxv4Gop3YkriP2NVZi + T0OFhJ2iaripFNsbw9jWHMKWljxs68zD9u4c7OjJwo4+as/BbFw/movD04U4MhvGkZki3LyqUMKBiTxc + N5ZNXZqLg6tDOLy5BDdfSz20swJ7t0WwdUMIC3NZmJlNlzA1k4HJWWJVDFN8bJKYms+WMLM2F7Mb8okC + zKzPw/TafEysycPo6nyMrM7DILeHiH5u983noncuB72r8tC1KgedvIfWyUzUD3tRO+hG7QBbgT4Pot1O + VLRaEGnUI1JnQGm9UZr+ubzBjAqistEiIdpoRU2Tg2PRgcZmB/u7A61NLnRQb3c3e9Dd4ERnvQMddXZ0 + 1NgktFdbJYipoVuZj1srxZrAltiawMIIXkRbhQ1t5Ty/gs+tdKJLzAgUdaGX8bm3zofuGg96om70VLnR + VWlHS4kRzWHqNKJNmMVhE1qCRjQFDYzJesZk6pcC6pagHo081sb9njw9RjP1mPbrMO/TYqNdhevJZ++w + m/GAx4kn0v14PiMTz/kz8JTNjRNmK26yG7HLrcUWtwbz5NijjlT0e9LQSZ3WQr1Yn6FABXlZWBiO5G+Z + ziRkMIf53YRohQnsSITfnrBoBgukEKnSclQCLmECE3ZzMsQSFVZDIqzGRNjY2o3xhJjJLhFuYfySZ6fz + ORnUmgGbmE46WdrO9qok07eQGq2IWi1EjlqQrZP4Rm6mGrlZmn82gK1xi9W/K8mlV0Bj4T6htcYTovo3 + QYKo/I3h/zWA4yTD98sGsGQCkzfayD9t5HFW11Kp9aYnIov5WixrIUzfMmo3yQQmyrgvtFleTiKxAkUF + 8YiWpqGFmqujRRjBzLMNYj8J7Y1p6GuPTQM93mfFSLcFPdRiwgCuDKUiHEhAkT8ZRfw+guTxQY+S+1qU + ZRpRS93aTL3RGfSgN9+DgTwPhvO8GMrlNvVVN7Vqh8dIPk69R35eZ1KgSpeCcnU8yqg/yolScsiIkq0m + EVXUEaKIoJbfeZWNx41XoMi4BHX+pWjJWS6tBdxemILWAnLzvBQ0kOfW5qahhtylmry3itxcoCIzEZVE + KbVuUcZK5AVWIsO/El7fMvjS4yWu501Xwu4iL7WKpX/kMOhUhEaCUa+VpnM2GVXSlLj/aypoMXMgH7eY + 9VLF76U1fwXEvjB5nU4LfH4X850fGZk+advtsUsmsLSOr2MR3Bamrpjq+f+3ASwMYzGVNO9ZJk9BmixJ + gjCAk1PikZS8Aink5MIE1hkU1LhOFARjBnBNfREa6oL87rPQ3ZiOkUYX5pts2NFO/t9jx7EBF4712XCo + VYcb23S4fcCG+yc9uH/Kg1t7DNhVnYit5StxXZ0Mt3abcO+IB/eNeHFXrxO3thpwU70aR+pVuJW4o1mH + Y41a3NWowz1NBtxVr8Ux8shj1Uq2BNujUQWOVspxe2WqZALfGk3DTdEUqQp4X0UcdpQtx+bSpVhXIgzg + q7FQJiqAYwbwupLlkgG8tXgF9pTG42BFCo7WanBfsxl3N+hxc2kKbihYjuuyr8TB3KtxJLgct4UTcGck + AfeUJuFEVSoerlXg4eo0PMTXfDSajEf5/p6oIdg+WROPJ6tW4snKZXiyfClOli3DY2Ur8GDpCtxZuBQH + 0pfgWvcSbJWmgF6CPTkrcbg4FcfKYgbwg2W8Tlk8Xm+Q4euNMnyjMQVi+uc3axPxHV77O9GYASymgP59 + w/82gAXEVNCiOvL91ji8XX0N/qNsCf5VmMBVV+JPtcvw15Y4aUrcj/rjcbpvhVQJ/EmfqJRU4oMBLf4y + ZMZb/B7v5thZZbka1Yqr4BOzwqpSoJInQi1+KKBKJpKgoebXaFMlk1cltD+h1KRK1eQKZbLUStuaJB5P + 4uOpEnS6NOj0HEfihxQW9eUpoC8ZwOLHB8L4FQgWZpJzeVAYzmK+q8DEZB9m5obR3t2AcGkusvLc7KsB + VNeEsbBmUjKAf/W7n+CD03/Dhc/PLBrAlyAM4LNS++67f8X3f/AWHnjgPqxemGcObUZhMER9mIksfwD5 + WTkoys1HRTiCkY5uLAwNYfP4KHZPj+KGmRHcNDeCG8a7sLWjHGvqc7GmKQurGgKYqHRgZNEAFku7tYtl + 4ELMVREVeqjx+2tM6K5kfiySEwp0Uu/0NTgw3pmO8e509LcI49eKzmbm0jrmT2r7KPtlLTVVU41WqgRu + qFajukyOiqIkVIYTUVeeSu6WhrZoKnoblOhrUWCgiZqpSYaxBjlm6mVYqJFRA6VgUxXHSose94/68MRM + Fl4gL3luzIvnhhx4us+Mxzo0eKRNjsc7VHiCeJp4pp3oJLoUeKpHiScHNDhJPDakxqOLBvBD7DsPDGrx + 8LARD40ZcfeIBndP6nFi1orHpu14ataLh0ftuKNVjkPFV+NowVU4Sc349age36uz4q1KDb7F9/Kdomvw + bw1JeLsjBX/vScWp3iR81JWI052JUr8WBvDFQRU+42t/xtf4fFSLzyd1wJQwdg34QkzxvMokbV8YV0uV + vx8PJOPMMJ83qcLn07rLBvClqaA/FkaxMIAlEzhN2j87osBZYQSPKiUDWJwncJ7XuDijlfAZdZ4wgS/O + c3tBh8/W8PjaGL74sgG8yx2bDlpU+q7na4pz2F5cL6qF1bFpo9dQH67W48yCAR/PWXB61oZTM058OOvB + OxMu/J6x9Of8Ln9UnYSf1svxi2alNA30zzuU+O2AEX9ivP1wTQ4+3lSMj7aU470dNTh1Uy8u3D+LJRkm + JneXDsGAhcRIC6dFTEsRB1na1UhNuRKy5KuhTlsOfdoymOQr4Dakwa1PgVURB1PKNdAlXBEzfxOWwJC4 + BJa0K+BSL4Of5CjTKke+24B8nwk5PgMCLhIcZ5q01kV+lpLER4lsX4oEYeSVkAxWhC2SEVycTzIS0qGc + A6WqhISxgsS01oaeFrdkAA91eGO/iOhcNICb+HiNGrUlTNoMzjED+AqU5ixDbVEy2qvU6KkzYqjFivEO + G6Z7HJIJ3NeoQltlIpoY+JuECcIg28OEIYFBvJttR0UiWktWoCF4DaJSBXDMAO4siUM/g/0oP/zRRjkH + lAzj9amYqEvGlJj6uSYJ6znAdnUqcWBEjVtnGMw3puGxfQq8csyI7zzqxG9fy8J/vpmFP38vHX/5oRt/ + /YkR7/5EiXd/mkysxDs/XYH3fxGHU7+R4fTvVDj9b3p8/HszPvytCX//tRXv/sqN379pwZsPp+CpQ8tx + 5yYmqKmrsXNgKTa1p2KGgqGNn2Wxk5+zIKmaODi0Yr3fVNiF+WtMgpsk1kU4DHGLLUmtnueJCmASLKO0 + BjBJJrfFjwFUihXsIzymS4bFQIJpSpHMX5s+CU5jbBpoMf2zqPy16VZKprKo9vUJ89+nRIaXjwuzj+RM + /CDAZRXTT8eRSMfMX4uRBJVkV5r++UsGsNvG+zYthcNM8mWPu9xvCkUVcB7J5P9pACdJbVFQhrJiHcpK + LCgptpDImhHMMyGUFzOBswJGCgIdnHY1X1eD2FTQ+svmb2wtXwGHBK/DweN2aWpnMdWzgFjnVxi/AYqV + GFxI9wkD2MbHjZL5K4zlDL8ThflZKI/EDOBo6SUD2Mdx4UYwx4NwQToqIjmorihAlEK7NJzOY6IyWBjA + 7i+ZwA4UB8WxmAlcUeRCdakfDZWZiwZwIVpq8lFXJgzgAMoL3ZIJXBZ0oTTPgTIS70p+Bg0hCrtiB3qL + regv5jgp0mCilEKM4lBgulyPCX5+Y4UajITU0rSvQ7kqDPEzH+R2H7e7sxRoy5CjLZvJK1/N6+ixutmP + nYMh7J8uxd6pUqztycYgx3F1IWMACXVmRjzcPvY3ih5RremjsMrTJaCWQmo6qMCd41Z890g63n4yD2de + zwK+4we+Zwd+wAD6lhVfvOnAeVEF/AqD43MafPy0Cp88qcKZJ9Q4S3zyqAofSyawHJ/cr8CZ+9U4f4LB + +QEdLpzk815Px8ffLMD5b5bhizfqcfG5Bnx8bzX+fVcuvjmiJ5m7BneWXYH7SZCebEvB6wN6vDVmx88m + XYQT3x014+VuOU62p+ChjlTc05qKO5tlONqsJow43uHB8XY/jrd4cbTeKk1Vc3u9Ene1qHCiW4WX5014 + a6cDv73Jj/85nsV7zsOFpwL47AkbvniciegJJfB4GvBYCi4+nojzJ+Px6RPxOPtkPD5+Kg4fPROHD5+O + w/vPxksm8LvPpOHd57X4+ytOvPt6Jj74TgXO/bYXF/8yC3y4DTi1F/jgenz+9i68//MFvHFXBNczqY0V + XoOuQDyaGKOjNo20PmbYJEMJxWwlhXJzZiqGIkqsrtVhW5se+/sMODJixM3DOhzqV+C67hTsJOHc2roS + 2zvisasvGbtJOnezva6fxIJJ9qYxpTRN9K2TGkKFW5g0D43IpcrhG0kWDvKz3dOuxmaSkdWM4zP58RjL + SsJwegr6fBSXPgV6A2p0iimgPSQ6DjlK2U/CFOdB3meBXYZcuxzZjD/pfMzrpJgWBrAjleIoFRbGJIst + DSY+J2b8psLAfCfBTPLJGKZlbtMbRaWwAhZey0rY+Zm409Ux+FUUfVrkFdlRFs1AU2shGhpJBisDKCl1 + o4jHw0UWFBeZEA4ZODYZe/NVKBGVwMIALVChQoKaeUqFSmEI83hlPgUt27oiHVpKTOiotKOzyiH9Er9J + TMFWaEBd0ICaXAOiWcyJWRoKVJ2EaJaOwlWIaI5jxof6PCcaKaLr892oI0EWBrBkAmfYURGwoSrdLqHC + HzOAs7SMkTYVha9Nem5LkQcdZX50RdPRUeVFfcSEaJD3JghrWI3WQiWaKJjrM+IoqFeimeO4IycZPRTT + /eIf8iUajFYaMV5rx2gNc3OpEU2FWlTz+WVBOeOUDOFgGopIfsU/F4KM1WKqsWIxDVmxFmWlBlRU6FHO + mFNZpkVluRrRCj5fMn91qCca6kh2hfnL/NZEMtxMkdZcr5cM4I5GPbpJZHuJvmYthtqIVi2GKV7G2k0Y + bjGgq1qFlnK+p2IF4yDzA0V/fkYKchnDykrcaGkvwfBkB9ZvmcPcmik0d9QhM8+L9BwXMnLcEsR2IJtx + PssFf6ZTmh7L4dDCYlHAtFiR6LRfMoAViwZwrBpRGMAO9kU7+6zTKafIkcMljrtVcLJvO7wxWD0aWLhv + FvDqJAPYyDyl4WuINYC/XAEs9jWimlZMqyzMXzeFPp9zyQCW6Sno1bEpoL9sAItppu0+nTQNtDB6xVTQ + 0jTQzBFiW0CYwKIK2OhQQclxkqpeedn8/ScDWFrbVyWZuZcqgGMGcBqUejkh4zaFICFacTz2WBrUBhn0 + jDlWMXUv7yvdp0VtVQ5GR+rR11dJoeeEy6+El+MvK2RFZsgCf4EB/jwd71tHMUiumWe8bACH+FlXOtlf + hPlr06PRzjFk1hLsR8zFNWY9apmXax087jSgwcF+xNjXaiUn5Phv4+fTyu+pyZEmod6RjFpbEmrsiyAn + EYg6k1ArqoEDCjRmqtCczWvwnpqyyEf9MlR5EhF1rGRcXY4qCuda+1I0uVeg3R/HnJmIHnKUgUI5htn/ + B8MajiE1eonBMgPGqu0YiVrQzXHXzFjY7CcX9SagwxWPPq/4kYwBG8ut0lTNm4pV2FyUii2FydhJYbiz + IhVbiS2VadhUqcCmChXWlCowXZCEKTE9b55oBVIkrCpUYX2ZCWsZf8Zz5RjMSMJQZjL60hPR7Y1Dp2u5 + hF7PSgz5ec/eePTyffRxfzInFWtKdNhaZ8G1zWbs7bTgQL8NN495cHQ6g8jGkQlRleXEfJ0WY1UK9JWK + aiALcswqGFNXIDXuSihSyTFVcukfWDqTFkZyMKswgfm9WKxKmNk/RHW9MHv11BiiFeavlpxW4P81gP3s + /zFoEGB/ys7US8haRA770iXkMo6KqfwLGWcFRyyNUIuQL5aVmlDKOCwM4MKwHgWM29m5CmTlKJGTr+G2 + +IGQAu5AGvtnCjyBVOYKeQzkQt4cNXw8J53nZob4OuRFBWIdYWqaigY3Ztc14eAtC7jvwV04+eQBvPzy + MXz19eN4+cWjeOGZW/HKC8fwta/cS9yHr7x8HC88fRuefvwmPPfkLXj6iZvxyIMHcPyua3Hz4fXEOsns + Ffv3H9+De4/vwl3HtuP2Wzbh8MHV2LyhF5PjNRgZqsDURC1WzTRg3XwLVk83YGqwAuPdEQw156O/WiwF + 4EZzvgVR5r2wKwUFwgB2M06y3+URuT5CzMTjTkChKw4R1wpE2U9aGUv78tMwmM/cnZ+A0VAiJiIpGCsh + ymWYjKowIwzgln9UAG/szcShhTq8eHQDXrtrO+7bMYDtPUFMV1oxxVwyU6nHVLmOnFSDsYgKYxwrI2yH + izluGMOHwgr0cwz1MJ905qVJP1BqFuvt56ahjm1LoQIjNWbMtTgw22DAUCn7dPBKjBRfiTU11+C6ziTc + MSjDQ0OpeGlche+useEXW9Px4y0Z+O7GDHxzUxZeXvDg/gEVbifXOdQVh5tal+FE03I82bQMz4kK4N6V + +NWsGv+11oB3N1nw8VY7Tq8z4KN5NT6cVuCDCQVOT6vx8awWn0gQZrBuEXqcnTPi3KoYPp0z4cwMOe2U + HqcnqfmmDPhk2ogzFP/n5pw4v9qNC2t8/2QAX1yXgfNr0/HpuhgurPfjc8kE5mOb03F2cybeW5+O97bk + 4dS+Unx4YwP+fKAVv7i2CV9dU40np2rw5EI/ntu6Fi/v34cXbr8Nd95yGDt278CGbZuwY99uHLz5Jtxx + /DjuvPde3HjLLdh13XVYtXothsam0N7Vh6y8IngD+QhkFjEvFsOfEYYvncf8QXh8QWk/O68MufkVHEs1 + CIWqkMf9goJyCcFgRQyhSo6zcuTzmDB1c/NKJYhzwsU10uNizd8vG8CiGjg9o5B5oITXrURRuBolJXX/ + hNLSegllZY0xlHObKK9oJBrI4xolVFaxFfuEeFzsV1Y1I1rdIqG2tg11de0SxON5+SXIyAxJBrCowvX5 + cnnvpdI1q2ta0djUjZaWXmmq6IbGTtTVd6C2rg3VRFVNCyqiTaisbpauW1/fSbTx8VZUVtSST5YjNyeI + vNwQwoVlKC2JoqKsFjVRcc81kgFssXpgc/j4+jmSMV7C99jSOoCOTlExPUgMoL2th2hHW3Mr2lqaiSa0 + t7bEtlsb2Tagqb6C1w2Tc1FzlmRTM4sfKmeisjhLQrQ4G9EiasmiLFQVpqMyFCCX9ZHLelEV9KM5ko+O + 0hC6y0PorwhjNFqKiapSzNYQ3F5bV4EdHQ04NNaHY3PjuG3VKI5MDeDAcBeuH2jDDf1tzBstONjXjBt7 + GnG4k+e21+FQWy1ubK3FgfZa7G+rxnWSSVyJHa1l2NZSjC0tQWxqzcWWzjxs7Wbbk4WtfRm4digL+8Zy + cXCmEIfnwrhxthA3rgri8HwRDswGcd10LvbP5eHAWj6+tRS376nBzftqcMOuSly7rQQLq7MxM5+BmYVM + TM1lYoLb4wJzGdzOxPhCFiZ4jsD0ulys2hzEqi2FmGU7s7EAUxuCGBdYH8LYhhiG1weJEIbWBTHI1+1f + G0Lf6kL0LgTRPVeArlX5RBBdswXonMpDy2gmGvt9qOl2oro9hhqirsMlob6TXJ9o7PKipTsdrUR7lx/t + HV50tHrQ2SKWTxNwoavJic4GcvI66os6G9prrWirtaA1KqaENkpoYV5qE9NDC9NXVAYTHWIZNqK71oPe + eh/6G/0YaApgpD2LyMYA9/t5vLfWi54aF9r5/FYxk1G5RTKEO4V5HDEzDhvRGBRTSGtRU0B+FyKXD+nR + Sp3Uk09+nqXHqoAe68hHtzvUuNGsxHGrEY847Xja58VLgXS86AvgWbsHD1mop+0m7HVpscOjxVry52m3 + HKOSTlSiI4McX6xPnKlGWUAYjjLkeFOQRaT7UpFOzhbwcFuYwc5EBJjfAsIMlv7fxDxO3SjgtqeRxwtO + If7XlQCzPg4m3UqYCateQMxelwC3NQnpPDeTujPbQ34g1vol8shFg8L4ZS4tJsL5Jm6bECTXkCp/Jag4 + jskVeF92VyIM1jiozcugM8dBY1rJ7Rg0lgRorTHzV8Bg47kS4si9eY7pGmjNS2FyrowZwNIU0EmwuONg + dvGeHXzMsQxm51IY7VfB4rxGmgY6QyzDQ/4XjmgQKdWilNpLMoHLDZI2y8tO4L0uR0H2cpQyn9dH5Whp + UBAyNNakorE6EU01SdRdKgx08HvsNRM29DHHN1coUU6eWeBejiJfCorTFQjzMwn7+TrpBlRlW8kD2c+C + bvQUsm+FfBhiTBljPBnO82E420MOakO3z4x2lwHNdi3qTQpEtckoU6xEqWIFypSxtli2EhFFnFQZXGUm + LImoMPN19UsQ0i1BjedqNGUuRUteHFoKEslvkqV1f2uzyeWzU1CTlSJV/1YJ4zcjAWXp8ew7cShhW5S+ + EvnpccjOiEeA+2LtXx/1ojddxe+Mms8ih05LDaZSQKtSQafRQK8VRrAwgMW6vjED2KTjuYuVwHqtEkYD + uS21iM1qgJWtxUSdtwgj9YpY81dU/mbnpCMrOyBVAosqYJfLxte1wOG2XobVaZYMYK2BOk1DrbVoAqv5 + uuLY/zKAbYsGMB+XyYX5m3jZBBYGcGLSMiQmL0eaPEEy81xuC+/Bi6LiXOasIOprQ2hvzMdgWx6mOnOw + rjOAnd0e3NDjwG0DLhwdcDCGGyQcG3biwVUBPDDjwy09HN8VK7E2dDV2VCbgpnYd7hl24cSoD3f32nFz + owqHqlJxS60cdzVr8ECnGSeIB6jfH6B+P16vxp3VctwZleEOtgLH2CePVcpwlJrntkoimoYj0VTcWJWI + 6yrjcW35MuqkpVhXKqaAvhILYv3fxSmg14jpn4uXY3vJSlxXnszX5jUb9Hi4y4X7Wsw4Sr1yJJKAGwuW + 4khoBW4Lx+OOSCLujIgK4ISYAVytkMzfByoT8RDf0yNV8Xh8EScrV+JkxXKc5Ouf5Os9XrIMjxL3R5bi + WMFVuN6/BNvtS7DFtgRbnUuwl+PsSHEq7iyT494yXrssEU+WxuO1ulR8vT4N36hPwZt1SXizJmYAf7d6 + JX5UvWgA18emgH6vIwGne1IuG8Cf9snwMbnrey3xeJvn/aFsCX5TsgS/K78Cf4hehT81LMV73Qk41Scq + gVcQcdLaqqe65Xi/R4m3+w14q0WLu8jpZ01Xokp2hWQA65TJUMsSoGIfUSkToVIR6iSoNMkENb4wfgmZ + KjaluFyeGGuJNFUC0pQJkPN8AZWazyFEVbDOKJN+/CuqgJ1uI/mjhZxKLK2RKZm/+cEMjkMruaUZBeQh + jeQDLR3VKI+GkJErlowyUqO5UFKWi1nyjAcfuhu/+/df4PTZv+PiF2cXDeCPJVwyf//2ztv46U9/KJm/ + a1bPk2eVIcMf4Ng1QC1XQpUmh0HJ8arVw2e1oy5Siv66Oky1NmF9Vxt29Ldj/0gn9gw0YUNzGAt1WVho + yMA086IorBopW6wADmvRwbjaViRDV6kSPVV69Nca0V0l/s+XhsrsRFQzJtdSt3QwN/c1MYeKZU7rjWgV + xQ9RJaJlyahiH4yWJKGhSskYrEENY21lJA2lhYkoDyWgpjQFDeWpaGKfbud46KqXM39TK7EdrqMWq0nD + Ko6hBY6T9RUp2MtxdRfH7aMT6Xh2OhPPjHjwzIAdT/QwB7er8FCrHI+2KfF4mwJPsn2qRYGn29l2yPFU + jwpPDerwxJAOjw9ppQrgh/q1eKCf45d4ZEiPR8cNuH9Mhfsm+Bj1zMlJM56ZceKxMSuOt8txpORqHM2/ + Ao8H4/C1CjXeihrxvXI1vhtOxFuF1+APDUn4n44U9scUfNSbhNNdifi4M+GyASzM38+HNfhiRIsvxnSA + MICnDbHpnVeZgDmz1H42pZMM3JgBnCYZwF/MaBfN35gJ/NmkGmd5r/8wgVPx8WAazgzJcHb4HwbwxXEl + Lk6ocHFKjc+mtbhIjfc5cZH67uKcBp/N6/D5Gi0+X8uWwHreyxYrcK0rhu0xA/jzdXpcWFBT04mpo9U4 + N6/AmVVy6kTqxlklocZHvK+PZkw4NWvHqTkP3p/14E9DVvwrc+4vGxX4VZMav2xW42ctavyU38+vu3X4 + w4gDf1uViffXF+GjbVX4YHcTTt8yhM8eWI0lXl0yMm1KyaTN9ujhtSth0SVAKbsGqUlLIE+6ElrZcliU + cfDoU5DPc3JIzHzi12/y5dDFLYEhYQksKVfAnnol7GlL4FRcCZ9uBXJIhkJ+PULpJhRkGJHNhJ9BYpTp + JRFLJwIkSiQ8AvkZcoTzNCgjQRQQ1b+lhVqUhFSoKCZZLGPir7Giq8WF/jYPhrp8GOn2Y6THR8IRmw+9 + uVqFagbpsoJliORcjeKsq0g8VqA2nIq2KhLMOhOGW20Y63BgimR6stvOYySJZQloKFqGRnawDiaAnooE + 9AowiHeXx6OrLA5tJcvRHFqGutwrUEs0Fy1HFx8bIPkZEcZvkwITTTJMN8qwqiEVM7VJWKhOwGbu7+vR + 4AhF/N2rNXh8lw4vHdHj2yds+MVzXvzpzRz89ftZ+NuP/Xj3Rza880M13v1hMv7+wzi8+4Nl+DvxwY8Z + iH/BjvBrDc781oyz/+bCmd+58NFvPPjw1wH86Tsu/PCkEi/dEod7Nl6Bg2NLsKPrSqxrSMBMVIduEuwK + L4moORlejagCTpCMWpclGR6SWi9JpYDHLBAvVQJbtStgVS+HWVT7MshLYLBWsy+ICnGtOh4GLYkliZZY + D9hpEtNJkyybU+GzyaXpc1wm9hGSYzG1tNeWjHQxDU+6BrliSlUfCa9bJlUAO/iaNgNfT8/XMyyH1bgC + dmEIk/w6pSpg3iPJuduWIJm/ogrY54hnfyJpzVKSXKtQmHvJAFayH10ygFNJspMRkgzgVJQUaShqRWVH + zJwpLDCytfJxK3Iy9BQEWukf9g6rmu9JILYuR8zctcFHEeIV5u+iASzBKcxhgZj563fHzN90Xwyi2lcY + wF6nie9FD1EJnBlw8rWzUF6Sj2oK5aqSAvbzLIRyPcjPckoGcCREcS3W2agMMqjnorw4g8e8iJAkl4SE + AeykkBBTQtu4bb+MskIKxBKfZAC3LlYAN9fkcfykoyrs4+NuEngXwrk2FHJMhnxaFAe0iIopZPONaC/Q + ozNfhe7cNAyEZNI/3ASGCmUYKEjDID/XoZACQ/kKDBeoMBJUYzCPSSVHjp7sNHRmytGZzW0+NhzRYQ2F + 546+POydCGP3eBjzHX7pV07luUnIdF+NgH8FXJ6VcDjZ9/g9uzXLkaNajhr21akCBY6OmfDmYS/+62Sm + tLbtF2L9X2H+/pAB9Ptsv2PDZ9+04NOv6nHmFTXOvKjA2RcU+PR5FcEg+pQGZ0+q8fHDKpx9UItzJ/Q4 + d78OZ+/V45NHzPjweR8+eDUXp18J49yLUXzyaA3+fns5/m1HDr41ZsYTzYk4Ub8CJxpX4rHWRLw6oMF3 + mKx+OunEz6dc+D63v9KnxnM9CpwkTrTLcJxJ8liTEnc0G3AvY9P9nX7c1+7D8RYnyawR93UwmfZb8fS4 + FW9u8eKXN2bhz8cL8OHDIVx4pgAXnvXjs2es+OJpJotnlcAzciIVnz+TiAvPxRNx+JT45HnGhedX4tRz + K/ABt99/ljHjmWT87TkF3nnRhL+94saH3yrCp79sxuf/NQz8bQ3w7jbgnV344r+24L0fTeH1WwsYn1Iw + mn8VOnxxaHAoUG3TooxCodSiQJUzFXU+kgcKo9GIAmtqtdjWqsV1fST1w0YcGtTihl45dnckY3trAjY1 + r8C29kTs6k3D3n45IcN1/Wm4fiCGG5k4bxxR4BATpzB/bxhIxfU85wZ+hjf06XFtsxLrSKZXhZMwlsP4 + mp6APl8SujzJhAwdzB9tXhUaXUpUM79ELCkIsa/kMY7lWlORZZFRhCvgdyjh5ntx2OWw2WWwEmL6Z8n8 + NYtfGMZgYMy6BJ0hRTKARRWwVBUsKs3Msaphh08Nl18DL+NERq4V4bIA6lsKMTLRjKHROjS3FkomcFGY + Y7vQiuIQhX7IjHBQL/2YKUKU5IvpoFUxMFaVEKIty5WjNFvGlqKWOa+pxIKOKhd6aj3oqvagrcKJxogV + tUEjqnIozDMYxyg6yzK0KM/UoSLLgOpcM+oYD5pCHjQGPWhgrKjLd6Mm182x7UI024nKLBsqMmyoJGmu + DFhRTkGdb5Yjh+87ZKVIJ2GOZlqYB93oqEhHV1U62ivdqC82oJJjPJqXhnrGhIYCsVZSEmoohGsoihsy + VqKV+x0FqegNq9Av4kWVEUPVFvRHrWiLGJhftahiLi8hoY2Q+IYLGZ8JYQAXhuQoDqtREuH7KdWjqtKC + 6mozoiS+0QreU4UOtSSCdTUG1NcYSXT1aOR2IwlzE3O6MIGbSYwF2hoM6CS6m/Too1AcaNVjuF1/uQq4 + v0mH3gZ+xmUy3k8yKoLMDSTb+RmJ5CQpjM1pKCiwUNzmoLkzipHJPgyO9yPaWIlAtkdCeo4wgrmd5Zbg + z3TBn+GE32+H3U7hblHBSPGi1yfDbpHDYYutQ+p2KqX1f50OsTZpzAAWVb/C/L0El0dNoaNjX9PBk26Q + KnPt3LYyTlu8OpjdeugdGml930sGcCrzsGjFvpa5y+CgwPcY+BwTrP+HASzWAlaYkqDl6xt4Lzq2Yhpo + F/OBL9sqmb1iCugs5hlRDXzJABbmsN1ngM4qR5omDkmK5UiQLZNaMS20MIBF5a9Yy1dtlEOuTZGmfxYG + sFybSqRJkAkxSKQJqFOkx4QxrOVzTHxfXq+ozDQwL9vR2liImYkWjI80sE9kISffgpygFXlhMVW1Gb48 + Hfy5OgRyLhnAogLYiNyABgUeFcrtGtTZ9KizaNHA/Ftv1qHewv5kEcf0qOZ2tYXCSVQG83ur4/3Xm9LQ + QB7TwLjSwPhSb6OIYqypcyQjSo5URa5USVTZE4kkVJCbVLmSUUNeWxdQoD5DjYYsDWrTFaj0pKDMEYcy + y1KUm68hrkLUdjXj11K0+ePQkZGAtkyxvnoyujkWxC+Du8I6dIq1TsttGKn1cRy50RlhP2esqCVXrnMn + o96egFZHAiYZV9aWmrGhRI+1HE/rQklYF0zE1tJkbKPw20Dht7YsBWvY31eXyDFHcTgZTMaEhFRuC1AI + EqvIszfVuLAh6sR4AfmyPwnd/kR0+hLQ7iEHdq5Ah0tUHzMue5PR705EnzMe/a4EjGakYYY5fw3H7+Ya + E7aRj+/uMOPgkAc3T2Ti1ulcHJ7MxtYuOyarFOilcG0hn6gI8PvTyKCJX4qU5VdCkZIIlUIOhVqsE6Vl + jBbmr15aV81iFv8sY1xmfBZjS2+Imb9Gxi+9LkmCtAYwvz8bY7cYcwGf/rIBLCBMX2EA52QbJeQyfv6/ + BnAR42xJ2AoxW0xZiWgtKC2zoKTEjCJ+L0FyHlH9m0XOmUPNIgxgnzCA/WnSTCZO5iqHT+QMIkMJVyZz + kTCCc8l5gzyf33EeP6d8apow4+PQdAV2Xj+GW+9Yjwcf2o3nnr0JL794G5575gieffImvPDMLXjlpWN4 + 5cU7pOmen3j0RjzywPU4+chBPEacuHcv7ji6BQevn8P+fTO48cA8bjq0Brcc2YBbb97A7bU4dHAB1++b + xpr5VoyNVGF4sAzjo1FMT9Zg1WQtZkarMNZbgtHOIgw256G/NpP6xovWIhuqxdr2HnJt9vGgNwUFfurA + QAry/MnI8SYg1xOPAvdKFLlXUGesRGMm+w25d19BMjljErljEoaLUzBcmoYRsf5zVI2pRgOmW81Y6HRi + dZcHGweycdPaBrx05wa8enwrjl/bg83dORir0BNaTFXpCDHFoI79R4PxMnLPMiWvKcMw+/UA+3VvYSq6 + 2J/b+drN2Ry/2SmoFSCXbWKOGWBOmmiwYbyWuSGShM7g1RgrW44NTQm4cUCF+6f0OEkx/zLx5owO31uw + 4LurnXhzjRff2pCJr64N4IlxI04MqnHPkBwPDMrwDLnNyz1JeLljBb7Rl4Dfzunw53VmvLvRgo82WnFq + QYcPV6nw4ZQC708o8NG0GqfFesAzMRP4zJyoBDZI7ZlVRpyZieEsIczfjyb4/DEtTo1rcXqCx6YtfNyO + c/NOfDovKoADuLg2PYZ1Wfh0bQY+XRODMIOFKfzZ+kxc2JSFc5uy8cHaTHywMR+ndpTi/b11eHtXA/5l + Sz2+NR/FS1NRvLy2B2/sWoNvHdqLrxw9jLsO78GWzaswtzCGNetmsGPnZuy/YR8OHD6IGw4fwE23HsHe + /ddj49YdGBmfRLCoBIGMAmRkFXF8lCA9o3gRRZIB7PGH4E8vQiA9jKzsEmRmhZGeXoiMjEso+hIKeV4I + gQCfEwhKEMeEIZydE/mn6Z//YQIX8HohyQTNyi5GLu/hy8jLK/1n5EcWwcfzIovg84icnLCErOyixWMR + 5BeUoCBYhlCoHIVFlRLEflZ2Ie8vXzJgxTrAvkAe7zEsXVs8XhSuQnGkWmoLiyqkY8IgzuX1cohsnpcb + LJWqhouKowhHhIFdgWBBhHEqhIz0HKQHspGdFeT7KGKeK+Y9lCBIBNLz4HKnw+3N5GdVwPsoQC7fT5lk + ai+a3GX1knEcKSlHJFxCvlWMcHExiosji61AGEVF+eRk2cjPD/D9+pCf62NM9CPE/cK8ADVnOopz2eYI + eFGU5UFhlguFmdSj3K4pzEFjcRBtJYXoLg+TB5ZhtLIMY5WlGK+IYHVDFLv7u3BszQweZl+6dwvj1Pwo + bpoaxKHxPuqCXhwe68bh0S4cGerAzQNtONLbjJuIw92Nkil8fXcNruusYn6pxPb2UmxtD2NDSz7WtWRj + fXsW1ndmYW1XAOt7Atg8mIFrx7KxbyaE64XpO1+IG+ZDuGF1Ia5fCGHfXD6uWyjA9euKcHBLCW7fV4fb + bmjAwX012MkxMr86B1MLGRgnRmYC6J/2Shic8WF4Lh2jq7MwvjZHwsTaXEwJ03dzENMCW0KY2VKEyS2F + mNwcxuSmMMY3FWF0Uwhj3BYY2ViMYYENJRJGN/Gz2lxOVPKxcgyvLUHfXCE6J3LROpKJFr6flkHRZqJt + Ee1DWegYykbncA66h/PQNZCDzr4MtHf50N7qWawAJtpc6G51oatZLJnmQGejjXzZghbm62by6wby7Ppy + cusKg2QIt4rpoWscEjrr3OhqcKOvKYDBtiyMdPI9d+dhuj+Eqf4CjHRkYKiZn0+DF331HnTX2NFZbUN3 + tQO9tS701jjRWSW0gJlagJyLXCEaJJ8p1KCe+bCZ6CHnmMjWY4F8d6tHh302NW4xqvGAyYAnbBY873Lh + NZ8Pr3g83HbjEYcdtztNuJ6ceJdHi41uFVZTp82kMz9QJw3lG9HDXN5CjliTrUYkQ4Fghpw5X8ZxJEdW + hoxIQybzdoA5O4O8KsOdxO2YOexzp0kQPySWZpKyJ8NmToTZsBJ67VLo1Uth0iyDWbdCMoDF/y8y3TLk + +JTSDxBzA2rqCi2Kck2IhOwoLXJQ/9ioDcUMdGaJa0jr/gZkEnyEi7zKQl6ns6wgh17ONh4acxyUxhUS + hAGssyV9yQCOX4QwgJdLBrDGco1k9kpTPjNHCxNYVAQb7Mugt1xFXM3zr4bRfjXMjmukaaAD2dTPBdRj + RUoUUosVl1BjlhsZN8iHqNdys+KRHViGvPRlCOfFoZqcsrlWgeY6BeqqklFbQS1YTh1Ym4qeJubmbiMm + +xzsKxa0VWqoH5NRRB5ZQk5clqmhdjVQu5qoXc3UqHY0iupfate+Ij8GiwIYDgUwSowUcJxJVcBO9AZs + 6PSYyEPZR8nVa3Tk1oqVKJEvQ+miERwRBrCc26IyWE/eze+qRH81CrVLECIqnUvI0a9GU84y8s94NJGj + NPLexJq/0rTPWUmozCS/z4xHeXocSgO8pm8ZIoGVKM6IQ5CP5fGzysxiX8liv8lUwcv+ZneqYKB2UKuo + ZeRpUMkV3FZDp6Ee02nISzXkqUppKmiTQRWDLlb9Kx4TBrDVYoDZGKsYFqaxXqeCjueJKmBfwEWemcHX + 9TPeexnrHcwz1kUD2PZPJrDZZpBMYGH8ypQpUPCeLlUBG6lzTNRBFodRgri2iZpImMBqjRwqtQxKNXWa + QlQDJ0oVwAkJy7idIJl5Fj7X47UhK8fHPJZBTR5EdwtjWXcYqweLsXUgHzv7Ariu24nD/P5v6bfjcI8R + R/rMuHOMY3Z1Jh6cC+CWPo7x8mVYlbsEGyNLcaBJgWO9Ftw36MKxDhMOVafgYGk8jlQk4a56cq02HR7s + MODhDj0ebNbgXva7u6KpuKsqBXdUp8YQTcMdlak4VpGKo5IBnIqboyk4VJWA6yvjsKtiOV+TfK/sGmqh + q6iFrsKqxXah6GpsLF6Ga0vieW4qDlercLRBhxMddtzXYsJdtWocE9eMJOBYcQLuKEnCncXxuDO8EndH + 4nCiMgUPRWV4sDIZD5TF4UGOhYeIR8tXSHiM7/VRvu5jJUvxWOlSPF7KY4RkAOdfhQOBJdjNvrlLTP/M + /nljfjxfS4a7qdvuL03Bo6UxA/hVfi5v1KbgG7VJ+GZNAr4Zjce3q+OkNYB/Ur0c/1K7DH+oX4G3W+Lw + flcSTvem4WxfqgRhkJ3uTsV7rYn47/ql+H3FEvwqsgS/LFmC33D7D7VX4m8dcfigJx4fdK3EB50rcaoj + CR90pOLvXXL8uVeL77VocTw/EbPGK1GRtgRejjudgpotjTFKFgeFImYCK4Whq0pk30tmHxTbSUjj8TR5 + DKnsTwIp8jgJqYp4CXJlAs/nNYQZzPEt1gQWJrBVGMFu6rU8v2QC5xX4qb285JMmaYkgyQQuSkeoOJNc + yg2XX/Rv8cNcG0rK87BuwyyeeuZh/Oeffouz5z/AZziHC2Ia6AunJQP44mdn8fEnH+LXv/4ZTp58GOvX + r0G0ohxOm51xXgt5ahqS4xKQtDIeKYQsIQlGjvGQN4C6ggL0V5ZgVUMNNrU3YBc5yo6uauqKEBbqMrGq + LoDxqAujVQ4MlVvQv2gAdzHOdkYU5Ekq9ESpSaqN6KTeEeuOlzDulKYnoJTxSCxR1lSuYX5WM09rpDXV + a6jtKyOMUUUrURGOQy21VR21VRX7TFkhnx9MRFlBAqLFyagrSUV9JBnNfE57tRxdNQr01CjRz+3RqjRM + V8owVyXDBjFjWL0at/bYcGLYQy3kxxMcj0/12fBYF8ddmxIPtCjwcIsSj7bI8Rjbx5tkeILHnmhX4Mle + DZ4cNOKJYSMeHdThgX4V7utR4d5eFU4Qjwxp8Tj1zKMTaoLnUuM8N23G89M2PDFqwn0dabi19CoczVuC + xwqW4yulcrxF7fcDfj4/Kk3GT0vj8B+NKXiH553qSWXfTpHM39PtcfikM1kygS/0K/GZVAVMDKvx+Zga + X/A1v5gWxq4RmDNJrdg/P7ZoAA+lxgzgaR0wI9YA1uFz6r/PprS4wPs8M6KQDOCPBlLwUT9fcyAVn1D7 + fTIsx7lRBS7wOheEATypkUzji5O8hynuT6twfob3sUqDz1drgbW8h7UGYD3vYZMF2OYEtjqALTaAehFr + DPhsXkwbrcancyp8Mp2GD8eT8cEYMZmKU9SQH1E7np7V4/ScFacXXDhFDfjOlBt/HrThD10G/Fu7Hr9p + 0eEXbVr8uEWFn7Wp8S89ZvznmA9vzwXxt00VeGdnMz66dQxfPLwJS5yaePhMacjz6inoDUh3a0hmkqGV + XcNOvgSq5KtgVsbxHBnC6RZECzyIpJuRbUuFW7UC2hVLYEpkICAZytSvhE99FVzyJfBpliLPkYKiDB2K + s00UCUYUiH+8BETVLwmYXxjAacgh+RLIJxkT1ZxiysyyQj1KQ8SiAVwuDOByAwmHFZ0tLvS1uzHU7cdo + P0lCvx8DXW50NBnRyIFRxUFRmr+Ur3kNIkQlB0JtsQxtHGCXDOCRdgfGOh1sSVBrVGgpTUBj4XI0ha7h + gFyJvvJ49DPY9jNw95QsR0/ZCnSWrEB7eDlaCq8habiKRHYFuivjMVCbjOGGVMn8nWqWYZ6DYU1jGuYZ + oNdUx2NrowzX92hx25QB963X4bkbzPj6nVb87KQbf3jNj3e+n4X3fuTHez924u/fN+Cdt9Lw7ltx+Pt3 + l+Gd71yN976zFB9+Lw4f/1iBMz834NNf23Hht36c/10Gzv4mE6d/mYm/fT+A375kwZv3KPDgtqW4cXQJ + tjYvwWzZUkyViWnRSLh9KhQIc1aTALcuUVq7xGdLQbqDRMaZchl+se6uIQ5W1TUwyq6EiaTKyKBuEGBg + 1oh12lRinbZ4kuB/GMBuqxw+uxJ+hwJemwweqzCFxZrC8XCaE+C18/pi7edsowSxFkom94UBbDesgJmE + 2qQhcdUug41EV6oIJpwkwKJCWEz/LAxgJ4mx2xqPgCuJhJT9JkuBgpyYAXzJBC7OVyASlKMoP40kO1ky + gcV0o2ESWVFhVlLMPsm+FQkbUVpsk0xg8Y/AdK9Gqtayk1xajSRqJGhmPcmdWUwFHZv+2b2IS9NA/8MA + FtXBwgB2UEA4pMrfgFdUA9spIniey8Rr6KU2K92JomAmykvyEC0rQHk4l/ebgYJsF9+PMIBdFAwBVJZm + oa6ygOQ6GxXF6RwPXpQVxUxcUflbJMzfXCsi+URBrC0LORCNxAxgMfVzR0MQzdW5qCkLoKLQxcfd0rrB + oWwz8v1a5DoVKPQoJVOpLkeL1lw1OnJk6MxORm9eEkbCTBLFcvTnJ6GP+0MFMowU8lihAhNhMXWwDsMU + Dn05qRjITUM/v4P+fCWfp8EUk9kGCtAdfRTgYyHsGQ9hlRCkZfwOssS0S1fys1kKt2sFXPY4eCl0HPKr + kCm7GlFTIsbz0nBoQI3XbrDj94/5cOp1Hz77DoPmjxgwf2QFfmgHvm/BF28Z8dk3tTj3NQXOvi7HBYGv + MAi/xmD8kgEXntPj7BN6fPqYCecfsuDsCTM+useI909Y8M5JBtCnc/DuyQK890gJ3r27An8+GMZvNmfj + rSkHXhRJrUuGh9sS8Uh7Al4eVONbYxb8ZNKFn0+68aNxO74xZMArg1o83a8hSZXjeKsMxzjuj4rpahhv + 7mv3SrinxYHjLWY82GvFMxM+fGVtBn5yXT7+41gY7z1chk+eKsHFFwoIPz5/wYYvXmBCekkJvKjAFy+l + 4fOXEnHx5XgiDudficNZbn/88kqcfnkFTr0Yhw+fZ9x4LgnvPifDOy9o8c5LVnz0ZjbO/7QcX/yuHfjT + JPD2WmIzvvjDWrz31jBePZyD3XxfI9lXoJ3fQ4NdjhqbVlofs8pKge5KQROFWyfF0UhhChYqFdhKgben + R4eDQ2IqaBX28fPZ2ZGC7SSWm5vjsL09mSRIjusGVLiBn9f+fgX2kYju6U7C7s7EmCHM5ClwHY/v6xE/ + klFjL0nG5nol5svTMBFkX8uOR7eYUtKdSNGXFFuP05GKJgryBrtMmuIpwjhTYElGrjkJWZYUBCwU7HYF + PA6V9GMOu6jktcljEFM0iWpf5jLjIkS17z8gTOAY9OY06Ai9qOQUlZouNdw+HQmlEdl5FPLlWWjtKMfC + ukEsrO1DT18VyipIQCnyQ8HYFPPhoJmtAcV5eskAjohlDQjRijXLLyGSK0dxlhylHDvRIh0aS61or3Iz + X/nRWy/W1/GgIWJHVb6BhJDPFxVZAT6XwjPC/FrOeFpdYEd9oQfNYT8aKaLrQl7U5LsQzXUimuNEVbaD + YtuGChLiCubxMhLmUp8JIRvzgpVElp9VxK1FWcCABsaJzsoMwi+Zz/VhPSpyZagQ6yPlUyznplAwJ6E6 + MxE1FMq1RCNjrFjPpDOsQlepBr2VRvRWmXkNMxrFMg5FasYe3rOY5plxWEz3HAqJ6t/Yur9irakK5vhq + nl8TtVJY2tiSb5QLE9iAumoL6mvNaKgxobHagMaoMIC5zf2muv+Pu7+Oc+s6t4dxB2yPh0cjZmaWZiSN + NCCNhkfDzGOGMdux43AcZuY01DTQppCkgSZNUkoh5dtLvbdwbzENM3u9ax+N7TS3X/i87z+/z++P9dlH + R0fnHEl7P89aWnr2Lpq/A71mDBdMGO0VJrCY/tmARYrJRQpHUQU8M6DHeK8WY2LtlCYZ0pESZOIVSEYr + EA1WIBwUlQFyREWOagqgrbsRg+MFDE4MoqWzBf6oDwFCGMDBuBf+iDB/PfCHXfAzpvsDDjgdFNcWjWRU + 6SlgzIYa2K3C7FVIuUWYwMKYEo8d7I9OZy2cLsUy5FL1rzeg57lNCMas0rTMnogZdu4TBrCJYkeYv2KN + X2H4iurfGi1FFVsxBbRWGMAuA4+3wBG0wuY3HJ8CWl/2dwawlvsMTjn0NvZx5m27n0JquQpYGL/CBD5q + AB+FN2yDmedT6KtQXrsSqytPQGnNSagiT5DrKorTOItpqE1KKHW8P02NZADLtTXHjV+NDDXLkEkGcHEq + aCNfJ8RcguOrrSWMod4GbJjvwZ7tk9i9fQIL813oKdQj2xak0HMhmjTDX/f3BnCynkIwbkYd+UXCwz7n + 0KLLppcM4B6raA3osYmpoIsGsJgOutOsQRfRblKgwyBDOzlNh4HiaRmdlmp0MwZ0M/a0kdPkzOVFWAg7 + hZajCq3kUW1uGTp8CnSKtedCarQHFMh5qtBsL0GLdSVxEvK2k9HlJIf0rsZYWEzpTO5JsVcIlWGYeXQs + Y8RwkxlDzTaM573kl1HMdIUx3uqVzLgOnruNcTDLa+dNqzFDzrzE43c1G7CjgfyT4nx7qhyn5GpwIC/H + 7tYaLGVrsK1FTiiwhQJxQ6YW6zIyrE9zm/l9A8fshowKW1oMjO0hnNIb5GMTRvxVGPZVEIy/ovVUYJyx + eMpbjVlvDWY8tZjle55jjpjz12IhIMPGeiWvacT+bhPzgZXxP4DLNsVwxdYELt4Yx/5RO+azjOF1J6ON + 7zvDOO6SV0BVciJqS06CWkbhrxQ/QqlgEOunWcTUeGJMaWEhJzPy+xFjy2gsTv0sDF8z47ao+hUQ2zbG + bCc5qFj7N0RNIwxgsfa216NEKKiVpn4+agAL4zfGOCogtsWUjOKPgU0ZC3LNywZwsxXZrDCArWgSVcDk + jnVJMQ20mi37HWN7QJi81DF2Md0ic5VYq9rm42O/Eo4Ax3tYCZcwgcmNQmlei591PT+ndIcFI/Mp7Dww + hLPPX8QNN+7Hvfeciy/edyHu//z5eODzF3D7Ynzx/kvYXorP330Bbr/lTNx8/SGpveP2s3HTDYdw5eW7 + cfaZa3HKKVM4cMo0Dh6cwaFT53DaoXkcIk4/bQGnHpjGpg1dWJzLSQbw2oU81q9tw7r5VqybacH8eAZz + I0nMDdZhphDFZFcIwzk3uhvMzDkKNPD7TYdqqeVqqdXIrSM1HGeVqA9WIuEvQ9pfyvxRjl5yx9GkMGTJ + B9nPphvZV5pqMJuVY75NhbWdGmxknN7E/rE05sYOsS7vHPvIvgIeuWkfHrv1IG4+cwL7JiNYyKul12zo + 1GFTjxFbCmZs6jVgPc+x2K7iczxnTo6pFhkmMjUYSVVjKCFDIcpcxXtrj7AlNy1QD0y0kqt2WjDbzjzA + +xltKMH69gocHFXi2o023LfbjYc26fHoOiWeXqfANxcVeHqDAU9vs+O5XQE8syeER7Y6cf+iHg+s1ePh + TWY8uZHPL6rw9KwM352X4d+3m0ixLPjbHite22XC69t0eG2zWqr+FQbw65sp4Dfr8NYWPd7ZZixW/e4w + S9M9vyuqfsV0z8TbW0x4UzKAjXhtrQ6vrtPj9Q1inxVvbXLwGBfe3ebFh7tC+FiYvMSHu6P4YHcE7+8I + 4/2dRRP4w90xIo4P9tXhvX31eJOPX9+XxGv7m/HSwXb86UA3/n1fN15Yasc3NxG7h/Hdc7bgB5edhmeu + ORe3XbgPh/bOYfvmUexcmsapB7fi1EM7ccbZB3DRpYdx3U3X4IZbbsRlV12JLduW0JxtLxrAkWIlbvio + ARxqRCCYRiAgjNKM1AYlI3jZ3A38Y/gDScnUPY6EZPCK6t+jBrBoP7sd4Ov+EYSZXESqiFBCgj/A1wbq + PtUW4fPHj0E8DgTrebwwmcV7bDgGsU88J14vjhVmsNgfCqckRKJpRGKZY/uOHu8jvKLlPfj4uYUiPD7a + wGNTPJb3G6pHIMTrBiII+ImAOHec917H5+p4H3yej33+KK8d47nF9Nu8R54nEs/wugK8Nr+PCM8XjiQQ + CdcxBsZ5LSLM10TE68TjGJ8PE0F+b2K6UZ+ECBGNBhCLBFAXDaKeqOPzdWEfx74H9SEi4EYyRH2aiKEz + nUR/cwYj2SZMtmYxnWvGeGMa45kENnXlcdb8FG497RR8+cqLcNfZB3Hhxhmcv34KF66bwuH5MZw/P4Lz + 50Q18CAunBrAxZMFXDBFTPbg/MlunDPejjPGWnFoNItThjPYN8z4ORDHNuaubQMBbB30Y/OQB1tH3dg1 + zdiyNoTTNtfhrG1JHN7ZQKRx7u40ziHO3pkkUtL24f1NuOLcblx9UT8uPK8bp57ahC07xDq+Icxs8WNs + nRMDsxYMzFkxstaBqU0+LOyIYt3uOgmLO+OY3xnDgjCE9ycl43fzqY3YdKowgRuxQTJ901g8pQFr92ew + 7kAT1p7SzMfNy6ZvKzaf3oktZ3Rh6xm93O7GpoMdWLs3h+ltaUxtTmJyU4ptQxEbub2M2Y0NmN3EY9an + MD4fw8hUEP0jHhT67ejvs2NkwInRESfGh10YG3JijFp0dMCOwYJV+kNlTxt5UE6NDqKrVct9Jgx283Vi + DeEC9UCfF+MDfswMMSaP12P9dAO2LrZg5/osti1ksF7M7DUcxHS/D1MFUSXsZkv0CtOYEK/vcUnrDBda + 9Owj5Frk/10ZNXozWuoWHSaSOmwkj9sT0OEc8sDLyGVvMelwn9mIr1iseMxux1MeNx73uPA1nwv3+Zy4 + 2WfBpV4jDnu0OES+tz+ow66oEbsyDmzPerC2yYEJ5q/+pAFtddRd1F4NzN3JlAYJAebwGPNyJCRDlPkt + FpRxWy4hGFQgSA4XYA73k9f5vOQqjmpykTIY9auh05wEo24lrMY1cFkr4XdVI8ZcXxfRoj5MRHXI1JvQ + 0mBHa7MH+RYPsryfprSN92Am/9Dx/LXw+KrhJTz+GjiXDWAx/bPGtEaq9tVZK8jt10gQBrDRWQO9oxIG + 4rMGsNayEnr7Kti8ZXD4K+Hm+3IGihXABu7XmU4iTpQMYFENbHWvgpN5OxCtJI+RI9WgRJrfh9BjLfye + RCv+pBuPlPHzWcXxTs1UV4b25hoMdKqov5ToylfxsTAiVqGrpRRDXbXUW0ZsmHRifsiGMVHVxvN2UOu2 + 8T2L9X47YjbmZTs6qTV66pzoT7A/fsoAnl82gUUl8JwwgGNuTIedmAqQF/M7H3bpUTArkdeWo1lJfi0M + YFUpWsQU0EROGMDUOy2GNWjSnYhGwwo0mVcg71mB3vAqcoQ1GG2swmC6RjKBu6gDRdVvOz+HtmgZdXIZ + cuE15DOr0exfiaZACfU2OQ6fT8bYT4hIhP0jrKZe08JG/aw3UJOpZFAoaqFUUqNJVcCi8pc81qiVpoEW + kNYIFjCLfTpYhAFsNRYNYLNeOlavV0OjUUCnV0nPeQLUX/Egr+eDnzHX5bFTKxWngBamrzQV9DJEFbCY + 7llU/9YuG8DSjDrimnZyaQevJcxflwl2u1kygcU1jm4LQ1irV/L6tZDJKlBZSW2nqJQMYGEU2x0muN02 + 5h4n2lvrMTHUgk3TWexbm8eZ65tw5mwEZ0+4cN64FZdMWQgTrpiz4cYNHnx+TwR37Qjiqlk9DratxlJi + BfY1nYzze2W4alSPmybMuKpfjYtay3FJ8xpczv50XVslbu2R4Y5+Fe4eVOHOfgVu6xbmbyVRjRs7BGpw + Y7sMN7TVSCbwddy+ur0GV/G5y3jche1lOKetFKfl12B/bhV2ZVdiW9OJ2JI5EdvSJ2J7+iTszazC6S3C + LK7FZV0aXNWlxnVdWtzUq5Uqjm9hX7+tU45bqaluyVbjhkYxfXMJbm4qxR0cA3fxeneJNluGu8T0zsQ9 + uRJ8vmUV25W4O3uSVPV7b3YN7murwP3EXdlS3NSwClfFTsRlYSK+CtekRWWxAjdleb1WOe7MyfCFbBUe + bCnDY3w/T3VU4ZnOSnyzrRxP8fzP5FdLawC/IAzgnhL8Z18p/jhUgVcnavDWdC3emSri3Wk53hyvxcvD + lfhDYTV+3XYCfpFdgZ+2rMAvcivwrx0n4I+Da/DSaCleGVuDV9i+NlKJV4Zr8OKYHP81qcH3B3W4NVWF + bYwjwgD2KkpgUFRAJSuFsraUfb8cKiXjlbpSMnLlwvRVlktVvhKURQO4hq+RIP97A/jocUpNJVTaapis + KpjFbxpW9l0HtVq9j5rLj0idG8Gok+PCDCfjv8OjZ+w0wu0zwEW9Z3dzTFL/BWMOdBWyOHzBaXjqmYfx + hz/9Gh989AY+wXv46JO38P4Hb0gG8Hvvv4E//OE/8eQTD+Ossw6hq6MdXpcTarkcimqOaUJeVYPaiipU + rl6D6pI10FdXw6dnjGc+Gk7XY1NnDvsGu3DqYAdOHcph/0AK23tC2NThxWKbE3N5O2ZzVkxnjZhs1GOy + mTlPmL95DaY69ZjqMGKkRYsOxphm/xq0hNmGq5CNVSJbV4lWfu7dLbXoaalBVzPjVGYNWhtWI9+wBp2M + ZR3NMrSmZcgm+ZqkMIAZlxnfuqn3e6jBCtRIA3kFhqmnxtvUmOD2HLWTWJZnqV2B/V0qnNnPvDtmwc0z + Tty14MG9c8yz0zbcM6bHncMq3D6gxB0cg3cNKnEXt+/pk+Nebn9hRIMHpwx4YM6CL8ybceeMHreMK3H9 + qBw3sr11Qom751R4YIOeGsuAh7cY8eQOO76xw4lHN1vxwIL4gwfHb+5kXM+Y8IXkSjzJHPM96r8f8X5/ + zvv71245ft9fi5fYF9+cFH9mqMGbo+V4c7gMb41USSbwu+MyvD9Zi/fY399j339/To4PF1T4eINGMnfZ + cdkagc16fLhWibeFATxbI1XxfrJRhyPUf2LaaLFOsIA0VfSCWAtYhlenq/DadDVen6nB63yNQLESWIkP + 1qsJDT5mK1UEb1Tjww0qvL9BgQ+3qPHJdh2wUxjA5qIBvM8K7BfGL7HPVnxMvSiO+2i7Fu9vU+PN9TK8 + vFiBlxYq8Mr6aupG3i/15NvbjXh7hw1v73LhzV0+vLrNhxfXu/CnBQd+N2HFr0fN+KdRA348qMULohp4 + 1IR/nvbg1+vr8OulJvzuQA9evmoDjnzhdKywq0vhNlQh7tEhGTQixsHjFVNjKldBKaZ2lq+Gx1iDpJ9J + vDGEoVwMHQkXGjwq+HXl0JeugF12AupsotMqkHZVImpcTZQg4apCU0SHljoTGuNGpGN6JJkw64MkSUE5 + hYOoCC1CGMCiCjgdV6AlpUMuUzSAs2kN8hwo3W1GDPY6SF5JKkc9mJv0Y+2cMICDmBn3SFM/9rAj5xtJ + COqLBnBL3Wp0cED0tKgw3GHCRI8Fc4N2wkayasNMvxnjnUoM56owlCnnIF7NQVnKQVGGBQbmudxqzLSs + xIxoGcync6WYYjsuporOlmC6owxzPeVEBTb2MSgO1GL3kAJ7+mTY2VWBXUw6pxZkOH9CTHmqx+17tfjq + RRY8d7Mdv3zQi989wS/u+wG89AMXXnreghe/rcFfn6vEX58twd++uRJ/e/pkvPzMarz+XAXe/p4K7/3I + jA9/5sHHvwrjo3+px4e/SuDtn8Xx6o9i+K+n/fjxvRY8eE45rlx3Ag4WVmAjk9t6Dv6JuBqdXhWSZhkC + DKxePWGpRIhEMuqpQcxbS4hpa0T1XBW8JmEAnwS9bAVM8hKiQgryegZosf6vXs1Wx8e6KliWDWCvjSTZ + yYDrUsFjl0vVxeJfkQIuUWXMa33aAE6GGMy9SogpoEX1r0lzsgQribWT1xcGsIAwj91i/WCSXbetnOcq + g4/bYZ8M8ZAC9TEVEsIAjn/aAFajOcVtElphAAsIAzgtph1Ni6lGtRJyWRNas3Y0N1pJ2knGfeplA1hF + Uqbg+6wlFDDrNXCYxRq/VjgtJFyE2Bb49PTPxSmghRFsR8ArWrEeMPeTqHlJttwOA/dbECVxyjSEJQM4 + 31KH5nQYaZHYwnbeh4MEU0zr7EdbcwjdrXF05SLIC0Mi40d7UxD5jAfNSQca66wcV1b2d8sx5FJ2dDR5 + UchzrHbFMVpIYrCD52gJMIE4mTBcPMYpvS4V4nhkv2jyq0h4NeiNazDMz2+iToGpehnmUzJsIBHZ2KLE + AhPJfKqa/UmBTc1qbGpRY6lVj22tRqxLK0nSa7C2QS5NES1M4W15E3Z3W3FozIezZqMU+Emct6EBO4Z9 + mORYzvP8YdcqBL2rEfCsgc9eAp+pBC75CkTkJyJv5Nhi4js8ocBD55jwq3u8ePUbQXzwbReO/FAYwA7g + BQEG0x8acOS7GnzwnALvP1OLj59VECoceYYB/SkzPnnMgg+/asVHDznx0X1OvHuXA6/casKfb7Hg95/z + 4Hd3hPGbm4nr6vG7yzL49zNT+PmeKL6/xYcnF6z42qwO90/U4gvj1XhkToNn1prxo/ViCmgffrzJje+s + t+PJdRZ8ZU5MGaOSDOBrOe6v6VXjxn4LH7sIN24edOCmQRPumXXgkaUovn0ohX+5Moc/f64Tbz7Qjfe/ + 3IqPHknho0cD+OTrDhx5jInqCSauJ5Q48kQtPnmiGh8/UYmPnyzHh0+W4b0nyvEO8fYTTICPMRE+ykTx + cDVe/ZoCLz2swcuPmvHWMz58+IME8PMu4N9ngN9uJnbgk3/ZjJeencZjF4Zx9kAp5kMrMESB2Mex28N+ + 2m0j7Fr0MJ73eUswGmA8rK/AVpKPfd1KnD6ixuEpDc6ZVOJsJvmzmJTPHJbhtKFqnDEm1jxX4YJ5PS5Z + MOLCWTUfK3DGaCUODZXh7MkaHJ5T4PC8iudQ4ZxxBc4a1eCMYQP2knRvaa7FovjDAYnQiLcSA64K9HPM + 9zFW9IlqPAkKyQBuIcT0z3WMN2EzCZlFrNmkhNvOMWsX/54lgbSK6ZkEhPn7acP3H8AoIIOex2mFIczW + aBVT0Wgo1I0IhMS0MowZLREMDrVi554F7No7j8kpUbXhRX3ShmTCCjG1fFqaYt6ETNyAxnodx6sGTRxj + jUST2F5GM+NWE+NXNqElYTOiNyvW43JjvCeAyd4gc5cXXRkbSSDJZohxLkgE1MgEea6wngTRhI6UC71N + fvQ3hdBL8dyZ9KCNwrqNBFhAMn+jVgm5sBktQROaA0ZkSJTTRINLw5b349eiN+2Uqn9H8z4Mtzp4Pj3y + dbVojdego76aQl78qF6DTjFllqgEjlWhNyFDX0qOwYwaQ81a5lQDX2tCf9bAe2c+F3E3qZR+TJCwbP6m + kiImK5Ft0aO9zYyeDju6O2wSOvJmtJEst/Fc3R0W9HZZUegwo9BuQqFNVAKb0Mu8LiqBpWpgYqjHhOFu + PUa6tZgoaLF+woa14ybMjRgwNaDHWK8OYz08X4uCXKREMn/rSLRD/koE/TJCiUjUjFSa8bIjg+6BTvQM + 9yKTb4I3QvEd8SMQYxv18bEHgbCHgtwJP2O6V6oA/nsD2KBljmQ/cthE1W+xEthlP24A29l37ezDAmIt + YDHduDCAgzHmiURxOmZhAjuCPC+5md6hkdb+/awBLCCqgMUawAYnBZDf/A8NYLEGsIytimNFGMCi+lcY + wAaOezHVtId94+g00P8I/qgDdoosLe9BVP6uqjgBJVUnSJXAMo0wgBXQWdQcOyqoDaIKWJjA1ZAvo1Zd + A5mqBlVqmQRhAiv0xdeYGW98FHStHFvTo23YuXkMZx5Yh4vOWcKF5y7h9FPXY+26XvT2J5BudiGeFPda + nP45fMwAtiIZt6COua3eo2F84JiyHa3wFS3741FY9Ojkd9VhElAjz/vNi3XF9FVE+TG0mavQyc+pyylH + K/lMC3nJMdj42F6FHGNTzlWNvKcWeZ8c7eS4eb8cLYxdLY41fL4ErY5V6HKtRr+P8TRUhmmOo1HGuB7f + anQF1mAwqcJIkwXDLWINPTdG20KY7q7HVFc9xvJRDDeTA4QMaOZ9NJjLkdavwlCgFhsbjNjeZMD2RhW2 + UPQtZSqxr02OUzpV2NWmwJZcLSFaPp9VM6crsb5JJU2lu55jdT359bomHTZmzTh1OIaDA3HmdxuGycuH + AjUYCcp4v7UYC9ZimpgNUDhynMz7VFjwqgmxrcSsh5yBx21r1GEPx+jBATsuWV+Pq3ZkcPWuFlyytQG7 + h+0Uv5XoDKxAs+tE1JsqYK2k1li1AsrSldDK2C+VYm00MW0e+7yV4p7flcUs1lAT66sVDWDJ/CWfFWNL + VPwK09duYR9mK6ru3U4x3br2mAHs84ip18WPuEoEAxpEGDcjYhroELcZSwXEtpiSMVXPuNhQrAIW00CL + tYCbmy2SAdzCz6ix0YhEg05a/zfBz74+ZUAopoGXmsbG79viIFw1sLAvWD1K2HwK2IMc79Q4rpgC/qQa + YX7ecXKnBsaznvEIFre2Yc+BYVx62VbccvMB3Hnbabjj1kPE6bjr9jP5+AzceeuZuOmGU3H1FXtw+SU7 + cM2Ve3HdNftxxWU7cf7hjdi3ZxybxVTOm3qIXmwmpHZLAVvE/g1dmJ1uxvR4GpPjDZiaSGNmqhFTfDwz + 2oDpkRSmhuowMxjHVH8U0wX2ObEEQJPIPeTVvPfGOiWaE4JbK5GW+HUtGuIyNMSq0cS+nBeVt+KPDI1q + TJEjTjHOTmaFQcu+0yqqcDVY6NZhfcGEjUNWbB3zYGnCh71zMVy+v4CHb9mLr99+Cm48ewJ7phkHWpWY + ySuwtov9k3ptC1+ziRxqXa84jwqzHTxnnhqHvGQkQx1HjtqX4FiNViEfqEA+VMX8V40u7htsIrdtNWAs + x/wkZoVKl2FdRzUOjmpx/RY3HtwXwJc3m/DIogJPztXgSQr+Jxc1eGqzFc/u8OG53SF8fYsTX5zV4qE5 + PZ7cZMe3ttrw3c1GPE9997NNOlIrC/6804q/bTfjlW0GvL5Fi9c2qPHqOiVeW6/C6xu1eJPHCQP4bckA + NuM9vuaDnTZ8QFH//pIV7xFizd+3eC9vbjLj9fUGvtaENzZa+JjCfzM57DYPjxMVwNSCeyL4mHxVMoB3 + Rrg/iHd3hogI3t8ZJ+rx3u4E3t2TxDt7EnhzTwNe39OEl/fm8Zc9nfjNrk78cqkN39uSx3d29eJHZy3i + J5fsxXeuPA13nbeEc9mv9m3uwylLYzjj4Hoc2Lcep566DRdeeAauv/FK3HHXrbj5tpuwc/du5Nu6UTRV + k4jHmyXjNxjM/K8hzFxhAv8D8/cf4ZjRu2z2/q8M4E/v+zT8fnGOT00dvWzuen1RInbs8fH9sb+Dzy8g + jOHjJnHRNBYQBnFCMnZFWzR5xeNPo3iceL04n5vwiOtwn4cQrYBPmLqB4vWEsSsZwITY9gWi3C/uNwKv + l/uWzV/puDDfs7h+OMl4xPP4eB7CK64hvSceJ44X74PHe3nOIorb/kCY9xjivR+FqDgjwkF+l0HGzRCi + RISPBaJBH2IBwu9DPY/LxGPIpxLoacqgv7kJA41p9DUk0BkNoysSwHxHDqcvTuO2s0/HV6+7EreecQpO + mezHntEe7B/txe7BDuwZbMfegTbs78/hlP5WHOzL4cCgQAsOEvsGMtg9kMZO8oClvjpsZZza2BPC2h4f + 4cZCrxPzBTsWBhgrxpxYmvViz7og9m+M4LRt9ThjZwpn7k7jDOJ0bp+2I4nT2J6+J43zz2jDJecXcO45 + vI/9KazbEsIMdd7IOicKMya0j+rQMaZHYdrMfS7MbAtjgWNMYGZ7FBNbg5gS+3bXY90pDdhwII31AqLy + d28a83tTmNubxNyeFLfF40YJovp3cX8WG05tw6bT2rH5tG5sOtSFzad2YsMpbVjck+U1mjC/vRkLO1qK + ENtLzZjbytdvITZnMLkugdG5KAYnAuSu5P/dBnR0GdBXsGJgkDl9yI7hQYLtEB/39ZrR3alDnnE2K6qH + WuTcVqOrw4D+XuqQAReGBzwYGRDTSfsxNRzB3ATf21wjtm2g/tnYiq2LjVg7xfc/EsREv6gUdmOiz4PJ + fi/ziBfTgz5MD3n52INhweHz5F4tSrRnGKebFMwvGgwwH04wp24il9sf0OJClw7XWTW422zAl80mPG6x + 4WkL47DDjqdcDjzqc+CL5Nx3hmy41mvCJR4tzqGOOc2vw8GYGac1e3CwLYCtWS/mm+wYzVjQI2bCyxjQ + 0mxEI3VFhkiL5RgatKgXyzlExe9JStQz18Xj5AMx8oKIgBbhsIb9X82xVAuXs5Icv5Rc5GSYjavIN0rh + JfcL8zmxnq/4E5kwfxPkpE0pC3KNTuSzHgnZZicaqeUSSRN1hoZjTcZxKczfaojlI1y+aticVeTDJdLU + zzpbJVEFlalUgqj+NbupSXk9E2F2VkgwOYTBW0qshtm1RjJ9PWEZfHxPnnCNVA181ADWm3nfzlWwuYtr + AYsKYD9ztzCAG9LM880GSY8J8zfdoESivobcaA2iAVEBXIp0jHlVGAptKvSQZ3a0VCKXKUE2tRL59Gr0 + tlZhqk8nFdjM9dsxRl0n1oMukFN1xk3UizbCKRm/PXUuFIiBeufyFNABzKaDRTT4MZv0YabOi5m4B9Mx + N2aiLkyHHdJ00GI94A7ywBZNmbT+r2T6Um+16qrRZmDeN5GPSH/ULEGbczU6vatRiK7BaLoa0zk5pskr + RptrMdBw1AAm148KlCIfIWenPmwNrkJWGMD+VWjiZ9BELtEQk5MnyhAOkctRi7u84jcGObTUOpIBrKQ+ + UwsDVwOD7h8YwGYNeaqo+tURgttSr9lMEo5WAesNaqkaVxjAZj7vYn/3h72M0W7mDOpMF7Wd0yxBmL4W + uwkmq16q8DWyVekUqFXWSBXAYltv4vVtBn7nvI6b2lDAQzgtEoT56/VSx/L8orU5jLyuFipVLWpkFccM + YHFfFvJxB68nCl9aMlGM9jVi01QO+9e14ezNOZy1UIczJz04c8SE88YMuHDSiMvnbbh+vQt37wnjzp1+ + XL1gwGldJdjVuAIHcitxXm81rhxS49phHS7rluHi7BpcQVydLcF1raW4pbMSdxTkuGdAjrv6Zbituwo3 + tZfjpjZhAlcWTeB2Yf5WS7iOj69ur8JVHZW4nM9fxGMPi2mg86W8Hq+bXYWtjSdgU+oEbCGWGk6UpqM+ + 1FSB81pluLRTjSvalbgsJ8M17bW4qVvJa6pxV0GDO9oVuD3H6zWuwU3pNbi5sRSfy1XgTvb7u1qFqVsm + re0rcHd2NT7fIszflbiz5SRuCwO4DA90VuOLXTLc117N/WW4LV2CWxrW4LamStzFcXVPux535tU8J98z + 7+G+bBW+JAxgvt8n2yrwTb6fp3KleDxzEp5oPBHPtq7E99tX4Zc9a/DbgXL8eaQKr03W/k8DeKxoAP9R + GMAdJ+CX+RX4aW6F1P5r54n47z6xFvAqvDxayuNK8dpwBV4arsZf+brfT2rxw2E9buf4WWIMEQawR74K + enk5lDUlUMhKIOe2QlE0fmXKimPGrlzNfRKKFcFHIZnDx4zfo8dVss9WSxXABjM1n/hNw8xxYNciUu9B + NOlFMO6CL2KDJ2SFO8g+7KVWdHFMudTs3xr2ba1kBNen/RiZ6MHlVx/Gt773BP7rj/+G9z98DUfwDj45 + 8jbe/+B1Pn4DL7/yRzz//DO49ppLMTU5goDfK63PraiuhLyqiu9PBnWtHCq2wvytWV0CXWUl7AoZEhzD + A/VhbMg3Ym8/eUtfFgf6G7GvP4ltXX6sa3NhrtWO6RZzEVkTphhjJ6VCCS0mqYmEATzZocdQoxJt4XLJ + AM5FqpElmvg4E16D5vgatKfK0ZEpR1djGVs+JjrYBzvTjFtpxr5ENXL11Wgl8kkZj2eObZCjp7EWvS0y + 9GUVGMypMJpTYzSrxCR12TrqsqUOFfb36HDWoAEXj5px3ZQNt805cM+cU5qt8i6O488Na3DrgAq3Dqpw + u0C/Enf2KXAX931+VI/7pyz4wpwNd86acfOElmNZjisGanCNWBZxTI47ZhT44iYDHl2y4Js77PjOHjee + 2+XG16lxHpjX4J7RGtzasRq3pFfgvtTJeLK5Ct/LK/HTDjV+1aPBbwbU+MOgHK+MKfDGeC37cjXeHC4a + wG8OVeAt9us3CakV058fXQN7plYye49Qd0kmsKgGFgYwNZkwgN+iznt/UV6s5F2nkfD+WrWE90T176wM + r0xV4m/j5Xh5shKv8TWvzRTxzpwc7yxPBy0grvPRckWwmB763bW1eH+9QpoOGtv1ksmL3YTUmgkLsGcZ + Yt9OAz7ersN7W6gV11bjb/PlkgH86gYZ3t7Kc+404gMe++5eO97d56SW8+CN7V68vMmJlxhf/zjjwG/5 + 3f3ruBk/GzLhx4NGvDBsxk8n3PjFfBQ/WZ/Er6j5/nzFBnx031lYYVGuhoMJNOJUIxkQVcAGBOxyWDRr + oKk+EVYm1pBNhWzcicHWOoy1k9xnfGgS0zmbKmCpXgGf9mQ0B1RM8DYMpK1MpCQRJENpollMV0lS10Sk + 4zo0kPSkwrxWREHIJRTN3yKSkVo01quRk8xfYQRrSTB0KHSaMdwn/sFIkiAM4ClhAIewOEPCPeLEQDeP + y9Ug11CGxrpVaIytRDZRhs4MCWYLBX+HGaM9FkwWiF4jJsQ0kT1avh85RvPVGG8haWkuw3yuHOvyZRzM + a7AutwqLDNrrWldhQ3sJ1neUYX1nGRbb1mAuvxqL3Wuw2FOChS4+z+0dfdXYww6/p6cKO9tKsaN1DQ52 + V+PwmBJXsDPdslONh8434ZvXW/HT+9z4j0c9+ONzXvzlWw789VkT/vSUCn98nMH5MQbhr6/Ei8TLj6/B + 69+owtvf0uC95y348AUvPv5FGB//KoGPfpXCOz+rx5s/SeBv343jX77kxiMX1eLaDSfj1N4V2JQ+AYvJ + SoyQCLY7a1FPUhRggPXpKuG3VPI7r0Ydv6N6v5wg+SWibhn81nLYtSfBKD8BZnkJW5JLRTl0DNQ69gc9 + idbRNdeMhkrYxHTSllp4bQr4HCScNpJkcwXsxnLJABZmsN8p1loR3zGJsajOCWoR86m5XyYZvaICWECs + A+y2itcI47ho/gqI6l9hALttFXxNFSK817owyakwgIkGEvfjBrAGzSn13xnAKZLYFIOiMB0aMyqKAC3a + 8ma054UBbEJdVIsgiZyo0HIIs8hQCy3Jk1peI5nAVgNJGoWIzWiUILYFRHWwgMsmpng2f8oQFq2YPtoE + l53P2/VwO/QIeM0kj040ZYoVwNnGCO+T4jliJ8G2SEgwsaXr3RwDPvb9MDpbgmhvDqCzOShtt2XcaEmK + 6l8LBbeJiWEZdUa0Jm3obHSj0BrASFcMY731GOqIo7vJz+ccFOcUhcII5na2zopczIg8BUt3XIv+eg3G + k2rMNYg11pTYktNgZ4dOgvjxeDNF2/ZWPm43SNjbbcYejqvNTUqsT8nYqrAtx+dI+Pf3OHDaoBtnT/px + HgPPxRuTuIgCdd9kGGt7Hehr1CAdqqCgqEDMX4YghYvftBI+1QmIa05G1rgG40x6Z47U4POnavCTO7zS + mrbvcLx8/LwT+KEXeIHtTxlEf8yA/kMNPv4uA+135fiE7ZHvqIDvMOA+x8D6tANHHnfiyCNefPRFN975 + vBMv3mbG728w41+vteOXV7rwkwud+Mm5Xvz8dAbJfXH8eHsEP9gaxjcp8h+dN+JLMyo8OKXA12a1eGre + jOfXuvDCRh9e2OzD9za58Y0NDnyV++8Z5zgfkuOqggxX9qhwXZ8JNwzYCAduoOC+kcH43rVuPLk3gR8d + zuF3N/bilXsH8O6X+vHBV/P46OtpfPx4CEeecEnmNb7JpPVNFY58k+/r6VoceboGR56pwkdPV+L9pyuI + Srz3VCXefbIS7zxehTe+Xos3HlXitUe1eP3rZrz1lAMffjvMzyoL/GoE+PUCsREf/3IRLz41hsfP9+Mc + kr75wAoMWk/CoFOBfpdZQsGpRa+rHH2elRj1rcJsvIzfcTV2dyhxoK9oAp8+rMAZIwqcM6HGOWNqnDmm + 4neuxPmzely81oxLiYvmdDhnmscLA1hMDz1Zg3PnlDjMpH94WouzR1U4jeT/AEXjrnZRjSbDHMfqRKQK + w95qFFwV6HVUouDgNuOYQJ9TiW6nHFkXRStRZ69FWPwRxSJj3FByDKths1FwWVUkkIJEKmDgc8Lk1Rll + x3Dc/BXVwMcrgv/eAFbCzs/C4zNRrJsQDFuRagigp7cJm7dNY8u2SQwNt1DU2xDjOKyLcwzHLBDrPiWj + RqQizH0cYw0xDfNSEc31erQkCLbN9cyRSea7pAH5BiO6mmzoy7k4fr0Y7fajP+/iuDWhMapGKqhEg0BA + LSEjqoCjfF3Cga6MF72ZAAmfTzJ/s1GLZPbmwmwjFrRGTMhHxWMjWoSRFDSg0adFxquTTOCUW4mMX43e + tAPj7UHmRS+Gcg70pIUBLEdbPcV+fS06ErXoTCrQlRCQS+htUDD/K/la8Y9+NQkn+06TlrFIg9xyLG7g + axOfQlKA5zpuAFvQ01k0gDtaeZ/N/EzEH3XYiqmge4RB3GpCd07AiB7xQ5KoDm7nc8IUZkwa6DASOgyS + 0I52q7Bh0o51k1bMjhiliuCpfhLwATsGKLAa2ceSFPSxcDUCvirpx52AX4MIP7dUJoR8ZzM6+zrRNdCN + VLYRrpAPXoGID74w27AHvqCAE17CE3Cwnxw3gHXaaoqIKpj01cWqRFHxaxdTQhchDGCbXXYMf28AWxFL + OqUKXGHIOsMmyQDWkosJ41dArPv7aQNYTAWtEgasTStNFS2qgD9tAIspoGW6MiiMFdJjsQawMH+Pwiyq + k4NG+ON2acrnf2QAB8gD3SGLJLbUHB+i8rdKUYJq1RqINX+1FjUMvL7OymualVAaFJIBLFtGDXNqtbIa + VSq+lpAMYIMS+uV/+IbDdvR2NWDXlklceOZ2XHvpAXzu+nNx2w3n4qrLD2Lv3hkMjzQi3exELGHifRok + ROoMqKvnePuMAdzo0KCVwrGNyPO+2qx6tJm1aLfq0GbiPgrLVqNSQo73mjXICAov8pos+YtA3lyFDn43 + nYwzOXKSFkuZhGYByQDmsY4qtLgovDwy5NiP2jhGW721aHFWMEZRtHnK0e0rx1CwXFr3dy5Rg7XpWkyJ + Ncj8JegOlmKoQYOxnB1jrR6MMH+PMW9Pdacx3pXGaGsCg81RtEcdyDg1qDez7xrWSGsQzzOObG02YTt5 + 8lbGzh05OU4htz2lT4/dXVpsbVNjS7sWW9r0hBEbclpszOqxPidgLIKidGOrDacMx3FwJMnjPRir02I0 + psUEefsk+fsMMc/ttTE91kYMWB8mgibCgLVBPRYYj+ZDCmxMqLGT5zzY78Jlmxtx3Z48rt/fgcu2t2AH + x95YqgJtnhXIWE9ARLMKptIToF61ArqKEuhlNTCqVLDo9Rwz5FjCADbrYOF3Y9LXEv/TABZj66gBbLeK + P1qo4ON3L4zfo1NA+zxi+nWxDrccfq+S41wtGcEhv5K8TyFBbIspGcUPuCl+po1pM5oz5FVEIzliU5N5 + eSpoM5IZPRLUJw0ZM2OFGVHGcV9YsWwAl8NMjip+qDXzmhae28I+YQ3IYA/XwlOngJ9xMsLvK8m41TrI + OL/QgC07e3HOuQu46srtuOGa3bjuqh245oqduPaq3bj2yl0Srrh0By44bzPOOXsdLjh/Ey68YAvOOWst + DuyfkNb0nZnJYnq65RimppoxxXZishFjIw0YGqhDfyGCQk8Qfb0hPo5JGBusw8SwqOaIY3KQ4L7Jfj7X + 5Udvzin9cJ5tYJ7i+841Mm816fh5aMmlOcbSKjRL67sr0ck+PNisxwTj8jT722ReuwyxzpUaU4zNcz1G + LBTMWD9ox8YRDzaP+7Brlhxxfy++fMtufPX2vbjm7DHsmAljJCcqd8kH2I/XDZixcdiGDSNmzPdpMdsr + fjhRYqqtFqMtNRjMVKE/VYOehAxt5A4tAbGGXxVywgxmnO9MyqQcVaAmLDTUoL+hHPNtNdg/pMHVG1y4 + b5cfX9powtfmFXhiuhrfEFirwdObLXhuhxfP7Qria2tNuH9MjgfGFXhs0YjvbrXjhR0O/GKnE/+5y44/ + 7rDjxSUbXt5iwqub9JLh+zq132uLFPTr1HhjvQZvbtDirY06vLlZT1FvlAzgj/c4JXy0y4kPdjq4z453 + lqx83sbjyOM2c3sL921x4b0lDz7cEcBHO0L4YFcIH+4WFcCi0jcqVf++uxTAOzuCeGd7mOeJE/V4d1cC + 7+xmuyeBt/c04K09TXhtbx4v7mrHf+3owL8s5fHjrVl8f2cHfnrGDH5x8Q784IoDeODwFly2dwxnbu3D + mTvHcPjgIk7bs4BT923A4bP34uqrLsBtt19P3IT9B/ajq6sgVaX6AnFEIkXzV6r2/azxexT/Lwzg/y/4 + H+cJ/H2l79HHRw3dT5vBxec/fcz/xGfN3n+Eo8eK8x01f/8HgjEJx4zdwHEDWKBoDi+bwJ8ygKVKYkIY + wP5jlc3FKmOBT9+rPyiu8/fwi2uGBHhOCeFjCBCh8HGE+TgcDFKzBhEh6vm4IV6HbCqBzqZG9DQ1kTPG + 0RIOoMHNvOW2caw24ZSFSdxw1gHcd+XFuHT3VqztZpyiFp5pSWCyMYopYqYpgrmmEOabw1jk9rpcFGtb + w1iXj2AxH8JCW5Bj1485YibvZqxxY6LNQTC/dFiZM80Y6zZgZlDMAGPDpmkXts57sWN9ELu3xHDKziQO + 7Exh31ICe7fVSdgnjOBTmnH2WR049VCW8TiOiUUXhmZt6J6ith4lb+9XomVAjbYxPXq5f2S9HxNbQhJG + NgUwuMGL4Y3ctxTBzK46zHHMSdiVxAzH4eQOxtml2DK4vT1BpDC1o7gO8MyuRsxxbC7szRI5rNvXio0H + 2qVKYLG9bvdnsDOHRWECb05jekMKY/MxDE6H0DfqRVvBgqZWxuY877dLj64COXK/BX3LKPRZ0N1D7cC4 + 3NQiQzpTg0yjDC1ZBdraddQ31IEDLgwOeggfhob8GBsOYWoijoW5BmxY14wt61uwYTGNuSm+n5EARgpO + DFPfj/S5MNovppv2YoKvnRrxYnLYg+E+aptOI7rzGnS0KNCdVVLr6Kgz9PzeyWOYdw+GdbjMo8ctdh0e + sJnwqMWMZ6x2fMtsxbctNjxnt+NJjwNfCzrwQMiJ270WXOvS4RJqtPM8WpxL/n5ekwdn5wLYk/NjYzP7 + R6MVA8zf3Vkz2lqtyLYxj7db0UzN0Uju05A2IJGiBmpgTqfeSaSKM3vE63SISdAjSu4Togbz+2vhdlfC + aiuF3S7M30qEAwrEImrpdyTJACZvEgZwY4P4Axm1WItLQgt5ayZjQz21XpjnCpAP+EO15A611BM8r+AI + nurlil6C3FKYvpIRzG3BKWw+JazkllavDFYeK2Bxk3e4y7ldLpm/vpicvFhNzq6FP0ZOFKyWjGGDdSVM + 9tW8Rimc5KMO3xrqlrJjBnATc3dOaK8ctSF1XKJehnhM/EF2Ncd4CeLhMupYct6GanSIftJcTT5Qwfwv + DOAS5NOl/IyrqV01mOm3YqrXTh1p4WdvQW/KjE5y866YHV1RJ3ribvTWuVGod6Gv3oHBpAvjKfYT6leB + KW5PJYg6D6bqi5jm9gxfNxVxYixoRY9DKa33m9NXolWYvtT07dTxXdRWXdRUPa5a9PL7GuLnMcbcP5PV + MN6QA5N/zJMjT7QqMJiuRnddObl1mWT+tsXWIB8poU5ejdbgycgFTkazn4iUUq9Tr9aTI0ZrmefkjL/k + fNQGemM1tDqZZNqqNUrodDroyWGNYhkT47IBbFbDYqE2I6zUHwLC8BUmsIP9XODTBrCoANaKaaLJf4XJ + K0xgx3K1rzB+rcsGsNVhhtGih1pPvcXrK6ixZNRYMkW1NA20XpjNPEZUCrv9dp7Hxu++CDGNtFNUEvM8 + Xp5fTDEdiYg//bj5nEWq+FWpqTWVVccNYN6v026WDOBMnR/9bfVYN9qMPYt5nL2ZWJvCWdN+nD5qxjlj + OlwwZcBl81Zcu96BO3cHiQCu32DBOYPlOCV/Ik7vKJEM4CuGlLhqUIVL2stxSXY1rs6X4sZ8GW7uKMPn + +Pw9AwrcOyjH3UcN4I5y3NhWcdwA7qzGDdwWuK6jClezvYqtMIAv7qjA4Y5KnNFWjgP5NdjF8wsDeGNq + BTYnV2Bb6gTsTJ6Mg+lynM0+fVFejktb5bikpRqXZ3m+dhlu71bhHvLOe7rUuDNfg1uby3BLUylRhluz + 5fhcSznuain9BwbwKtyTXYW72d7bUoIv5Mrwxa4afLlbIeHBDhnub5PhvlwNHmhX4kudejzUSZ7ZpsHn + c7W4L1uDB1uq8BWe/7HWcjzeWoZv8HN5omU1HuG9C3yj6QR8p/Uk/FNvKX43VIm/jNXgdbHm76cMYIE3 + xmSSAfyn/jX4dfeJ+FXHCvy8fQX+ufNE/LrrZGkd4D/1r8bLI+V4eagMrwxX4W8jRQP4t5M6/HDEiNuZ + J5YsRQPYLV8FnbwUyppVUMhWQ15bCrmiTDJzj5q/AgpNpQSlpkZaE/g4qiQoltujxq/WWFwSyiB+v7Op + GbM07O9ipi+xHJW7aABH7fBG2afDHBtB9m+/CS7qPXfACFfAwJhK/Zanhp7rx6VXnoVvPPNV/Mdvf4l3 + 3nsJR/A2PsE7ywbw6/iv//43PPSle7CHfCSXTUuV+Up5NRQ1vO/qar6/GqhqZVDVVKOmZDVkRw3g2mpq + cS364wFylCR2F5qxr5DG/gK3e2PY0uEhX7FjOmvBRKMRU9TpwgSeajFggrFoinl2SjKAqbHF71aZ2mMG + cGuYsTVSzbhTgUbGnuY442tiDToaSsmtylFgv+zPVUltN2Nwe6oS+XrGwDrGQMapjqQCnSlF0QDOyNHb + VItCswIDzUoMNasw1CT+qFsjLaGztVONfb0GnDlkxkUct1dNWXHzrB13zzlxD3nOnRNG3DaixS2DGgm3 + Ebf2q3B7nwp3DHBMjJlw77QNd/PYW8iVrh1V43KO04t6Of76qnHtsAy3Tirwpc0mPLbDhmepc76z241n + ttvxdWquL85rcN9ELe4ulOHO3Mm4P30ynmypxPc5Hn7ZrcO/9+vw+0E1/rRsAL/GPvnGSKVk/AoD+A3G + ktcHyvBaf6mEVwZK8OrgGrw+XoF3p2vwwaICn2zUAJt1y9BLlbrCAH5jskJq356tIWolvLWMN2dq8MpE + Bf4yUoI/Dq7Ci2Ja9OXqX4G3pTWBFdI00e8S7/M6H4hpoXnu99Zy/7xYY5jX36TCJ0dN4E9jhxHYeRxH + dhrw0TYt3t7I97jIsTfPcbhYidc28TpLWny814pPTrHj/QMOvH/QhTf3OfH6Djde3eLAy+uc+OuCE//N + 7+zXUzb8csyGF/h9Pj9owfMjLjxPXvjcTBQ/WGrFby9Zh7fvPQsrjLUnwapajZC9Fgm/DqmQESGnAnZt + KfQ1J8GuLkPEoWLH8mAon1g2gANo4rFhE8mG4gTErEz6STOmOyPYOJjEbGcQ/SQ5eRKgLAmRqFxqrhdr + YWiRjmvRIH7IFmu3RpUSkhEBYQgrkAjLuE+O5qRaMoDF+r+dJCN9XVaM9JMgLBvA89NBLM6GJSN4fMiG + 3k6NREaaU2uQia9EJrYKrQ1V6GpSoydLgtlpJikxY5jBdYiEd7hdRcgxwkA+3laN2bYaLLLdwCSxhQln + W8cabMmvxKbcCdjWthLbu9dge08pdvbyOQbZLd0l2Ny7Cpu6T8YGBs9NHSdjB5/f3VOGXZ1l2M7Av8SA + f0p7Bc4ZrsWlC0pcv12F+88x4YmrrfjhPW7861d9+O0TPvzXk0784XELfv+IGr//ShV+/+XV+MNDq/Dn + h1bipa+V4fXHZHj7aR3e/ZYVH/zAi49+GsHHv6zDx79K4d2fUdj/NIU3X0jjt4+E8I3Ltbh+02qc2r0C + GxtWYK6+FIMBBgZbFep0FdKi7cIADogpU901SJG4NgRVx1BPYhkWUy3rV8KqPGnZAC6VpoDWqwhh/mqP + G8AGPUkniZfTVCOZwML8dVtq4DByv54k81MGcJDkNepXIRYgUQ5qEA9ouE/O1zCQGtdIENM9i2MFxPTQ + ApIJbCuXTGCxHnDAVSMZwFIFsOgzMRWSJLmp+LIJnKCgSamlCoUUCWyyrkYygRPxKiTYZhgQW1t06KIA + 6Gi3oZmBuT6mQYjEWvxIKAxg8UOjMICVsipoFDKYdCRuBj3MepI5QmwLWEnuBI4awWLNYAGXTWyTKNn4 + nFUrwWnTSAZwXYxCoCmK1mydNNVzgmQ44jcj5DUi7DHwszEjRZIs1vnNZ3zSlM5d2SB6cyGSaz/aG93I + JXnfdWY0xg1oiS2jjmIuaUVXoxN9rT6MdkYx3luH4Y4YE4SXz9kldKSdPMaD7gyJN48tZCzop/gZIrGd + SimxrlmD7W06JgQzTqVQPNhnxh4KyN1MUPt7LDhQsEk4NODAwR4bduTU2MLEJdq97Wbus+NMisbD4z5c + MBvExWtjuHxzCpdta8Lp83VYGvFjisJLmEhZUUESrmKMWY2g6SSEDSchaVqNFnMJBvwrsYdj7YbtMjx3 + vRv//Ugcbz4TwYffDQA/DAE/9gA/MwM/NXBbi09+oJRwhMD31cDz3P9dK/CcC3jaCzzux4df8eDt+1z4 + 6+cs+M0NZvz0IhO+dzYF5gEDnt5lxrNLTnx7cwA/2BLBD5fi+NZGH55YsOKrczo8JNb6ndbi8VkTvjXv + wPPrPfj+Jh+e2+DCY2vteGjWjLvGNbhpSIEr+2pxRa8aVxWMuJpC++o+K67uN+MmBuX7NwXx7Okt+OUV + vfjznWN448ExvPvlIXzwtXZ88ngjjjwVB77J+33WBnybieHbTBzfVuHIt/i+vqXgdi0+eU6Gj56rlvDB + szV4/5vVePcpGd55UoG3H1fjrcf0bE14+0kr3n/GhyPPNwA/LwD/PAX8yyI+/OkM/vLEIJ44z4vDfasw + 71uBQcuJGGb/H6agHvJZMejVY8BbiWGKv4lgCdaJ6jIK9j2dWpzC93awX0CBQyTuYkrow0z8507pJFP3 + 4kUzLl1nw2XrxDqQBhyeUeP0MVEdXIOzJmQ4d06FwwviWD3OJLE4UFBhN2P4tqwKi6laaUrxsVANBn01 + 6KXA7nFWoddZjT63Av0eJQY8KvQQOQ/jF/fVM2eFrTJ4rXLJALZbxNRJFE/i34MWJSGEUC1JJce1kQRT + tIROEE1CT7IpgcdI4LZWVHGyNfI8wgB2c3y6OD59fgtFsRv51gQW145g7dph9PamEI0aEQnpEYuYKJRN + qA8bUB/UE1qkwhqkImpkmA+b4jq0iOmckyaOYyJlpHA2oTVV3G5PW9Dd4kR/uxuDHV705BySWdwg/vDC + eJ0KMXeKNU4DjNmSCaxDNm4lAXSR7HmkGTpyMSuaggbmaT2aSYZbmNezvJ9WsfZSyIAs76sloEejX4OM + l3nZw/vj55hhfD5qAI/kfRhsEQawmD5NhfaEiudWkVQq0Z3WcP9x9GZEW1zXqy2hRCuRTyr5HnnOOub2 + aA1FczU/t5pjqI/XMB7LkW4Qf8gxoD1PQd/pQFebFa3NvDdeJ8PXN/Pc+awBnVkjOsVxTXoJ4o9hHVm9 + xA8Eelr10jpmhbyW8U/BnK/A+im7hLkRYfyasDDixuJYAGO9DrQ2qqUKtmhEBr/4F75Y98uvRThiRTId + Qb4zi47eDrT3diHZmKZg9sAZoDAOeeEJCnjg4WMxPVcRDgpyAyxWjfRnAq2mGho1c6a2EmKqWjvzo1gP + WExL7rCr4HAo/q8NYFfEDLO3OP2zwiiTICp+BYQJLMxfYQIrDLVSFbCR/VWsAyxM46MGsDB+5YYKqCzV + 0LsorlzKY+avqACWpoH26eDjtY9WAX92CmghvoQJLKaCFpXABr4XHceLmvlfI6ZUd4hpqsU6xXporWqo + TErIdTW8NwonTRWqVNWoVFahWl0r4bMGcCTixHB/Fmfs24CrLzwFt11zFu699SLcfftFuPG6M3H66esx + MZFDuomfDfPd/9oA1qHOq0aDU4Nmh6gEZksRmbVy7JnILc1qNBtVaOb4bjLIj4PfU5OpmqhEk7mSz1ci + Rz4j/kDXQa4iKn6brWUSGokmcpJmooXxqdlNwcY+lPXXopXjNOuRSQZwq7sCvcFqDEcZ1yjMFhjfNjYp + sZWxbl2jHKOxcgzGKzHBvj0l1v7uCGC8I4LJrhSmupsx3tmMkVyawi2BzrogMi4T6swK1Ikp7szCUNZi + c7OFsdmA7a1a5mojDg3bceqoHXuYe5a6DNjaZaLIs2Bbpw2b8ibCgo3MwRs51jbmbRI2t7uwb6gOB0Yb + sNQTwkzGium0FbPk8vMZO9YS6xv4enKPTfyct9TZsCXmIOzYxD6zPmLEuogG68jDtvG9HCi4ceG6Bly+ + lMUVO1txweZGbCuQxycqkLWdgHrtCgRkJ8IkzN+VYimZUlgpsm0aNRwGQ/EPdma2RvYNvRxmHXkYeZk0 + 7TNxdNrnTxvATo4rD79zUf0rzN/jU0CrjxnAPuYMUQksGcFeOfzkpQJiW/yQK6qAk9QsacbixgaDhDRj + YCZjRK7VhizFfAM5YyrD/Y0WCbGEAWIdYDEFtDCATY5KaapGI8eZkec2empg8FbBzH7giJEnM64FMuTb + eV6j246esTAWNuaw/+Aozju8iEsv3IgL2R4++zjOO3etZPYeOjSDU04Zx6mnThOz2LN7FJs2dWNiPIP+ + /joU+gTiRfQL1KGnQA7YFUZnhx9tbR605pxoy7vQ3e1HbyGI4YEoxobrqK/ikgksMDYQwwCf72lzMc7a + 0NZiQXvOgrZWC1oJ8UNxtpV5hbE3nzMyHhtRyJowzL412WnFFDXXZKdJwhT74MQypntMmClYsDjowOKQ + C+uo57bOhHF4bzfuv2knvnjrHlx+5jC2TAfQn63FULYGE51qzDJ+rx1hPxy1YqZfh6mCFhPdKo4VOY+R + ob+xGr0N4sePGuY6juFgJVrYtkQ4NkMcp+Fy6lFqIWqA9kQVepJlmGmtwZ4BNa5c68Dnt3vx4HojuZ4S + j08VDeCnJAPYjG/t8OBbO/3kgGrc3V+Bu/vK8ZUJOb672Yaf7XTh1/t8+ON+L/6604lXttnw2maTtH7v + G+u0eH1Rg9cWVGzFv7o1eEMC96/X4o1Nery7ZMEne104cooHn+yjvtvrxgd7XHhvpx3v7nDgbZ7vna0O + vLvNiQ+2+/DhDj8+3hWW8NHuoxXAxw3g97YH8fb2EN5eCuGdpSgRx9s7BWJ4Z1cd3tmdJBrxxp5WvLQz + jz/uaMOvt+fw823N+NGOPH5++gT++cJt+Mnl+/G187bg+n1juHBbPy7YNYaLD8zjzF3TOLB9Fmce2ILL + LjwdN954BW697Xqceugg+goDiIQT8PhiCASFsVuc9vkfmr8C/z9iAH8WwsA9ul00fj/7/P/O3P2M0fq/ + wT80fwU+YwD7JfP3uAF8FJ5AVMLR4z9tAAscffx/D75fCXFCnC9aRDiCQCjC7+p4GwoKCBM4JKGO+1Lx + erSkktSszehqbkJjJISEx4mIzYSYzUC9WYet4/24+OAO3HLhmTiwbgqFVBj5kAPtIepTn5kwocNPrsfY + 3R0yoYfcpy9mQaHOgr4EQY3b18C2gfuZn/oyJvQ18XGzmHGG+1pNGGgzkj/rMCxmfOk3YIYxY27ShsVp + J9Yv+rBtcwTbt8SwbVMEWzeGi9gcxa4dKew/kMXOPWnMbwyie4zcfECLxoIc9Z1ViOUrUddRg3RBidyI + Ad3TdhTm3RI6Z/gepqzo5L6+tV4MbQxhlDpyTEIUI5vDGNoUwuCG4DLC6JcQxeDGGJ+LY2RTHV9Tj/Gt + SSKF2R2NkvErDGBRCbx+T17Cpw3gBerqiXX1GJqNoG88gK5hN9qYZ5v4/hNNMiSba9GY5/126tDZa0JX + wSxBbAtjuLlViYamaiQaKolqpJvJc/IatHebUBikDhn2EF5i2QRmrpqeqcfCYhrr12awMJ/E5EQEI0M+ + 9Pc40Md8NlBwYKjPiZFBN0aHPJgY9RJuHuOQlmrp4b105dUotGsx0G7ASLsRc+T329NGnB434KqACZ9z + GfEluxmPWxh/rXZ8z2TD981sLXY863TgSa8DD/tdeMBnxx3k3deTP17h1uHysBVXpr24uCWIQ60B8iIv + FprtGGX+6mu1oqvdRm5vQ67LjizR0mFHE/NaQ7NRQrpZ/MHLiLgwgcUSD59ClDosTB3nD9RSC1bB7atC + MCBMUg21DDlnXEtoihC/d7KPNjba0CTQZEczkSGvque5InE1glHFMQij1htWUGPIYHVVkUuXkz9UkUdU + w+wm3/FSH1DzOYPUDmwdATkcfgFR4VsNu7+S2qQG/rgc0ZQGcfKTOD/PYB25T4QcyVsOs6OE5y6FO1Ap + QUz/7A1WUG9UoT6lQCtzdxs/H2EApxoUiMWr+H7LyZdWkketRjRUilSsDBnmz1ymFs0NFdRoa6jV1iDb + UF5cczInx2CnFpPsgxPsDyPklv3NVnSnLOikTpWmfo450R33HDOACwn2iwS5PzXPaNIlYYyPJxLsO5/C + ZP0y6jwYizpQIM/rsMmRJ0fPW2TooB7pItfvcavR61FhMKTFWNKI+Sz5abcDWwdc2DpKjDiwts943ACu + L5OMX4H2ujXIR1chF1lJrXwScoETqaFPQku0jHpdgZYG6vk6JbWKAm4PeSn1lM5QBZ2+VqrY1ek0kvlr + IIc1GsX6utREZh1MFvJY6g8Bq00vQRi+AuKPjgKfNoC1WqU0dbPRXKzeNTmMMIrWzmMcJlhcRQPYbDNC + Z9JArpahurYSVbJy1MhFhaUMYtpnYRR7/E7pz8r+sJv5xSEZwQIeL1uPDU63hTnbRg3FeJ2Moj4RRpDH + iupgyYzWUuNpZdL7Ewawy2GRZjdMRskNG4PkYynsnG3BGRtykgF8zlwIZ07YcO6kARfOmHD5og3XbnTi + zj0h3LM/hFuWnLhoqhZn9JbgnN5yXNBXjcsH5biirxYXtZbg0uwqXN9Rjls7K3F7N/nWQC2+MKQkFLiH + 27f3VhcNYOKmjircxNh8Q1cVruuo4OsqcG175bIBzPOyvYjPn0ec2VGJU9pKsaulBFsbTzxmAG8ldiRO + winsx2dkKnF+thoXtchwUVMlLmkqxdWM+7d1yfH5fi3uK2jweXLOO3K8tyzvsaUct7SU4ramEtzRLIzf + 4wbw53MluFegdQ3uzZZIa//e31qKL/O+Hu5W4JFeFR7uUeGRHjUe7lTh6z06wohHyZkfYgx+gLz2weYa + PNRcja+2VODRXBkey5XiSbaPN63Ew7x/YQA/2Vg0gP+ZvPT3wrCdrMXrMwq8PSPH29O1eGtKJuH1cWEA + V+OPA6X4j96T8S9dJ+Kfuk7Av3afjN/0rMJ/F0rwVz73ylAFXhksl459cbQafxmvxW+mdPjBqAm3Ncqw + zXoyWuVHDeA1UNasLBrA3JYrS1GrLoNMQFUhQTJ/tVVQ69iPqOWOQmWQHYPaKJaCkkNLbau3qtnXNezz + 7PtOHexeakFyA2H6+qk5j/4O4WMs8UStRYQtjHNElP09YuLzVuS7kpiaL+C8iw/gK498Hv/8ry/gjbf+ + go8/eVMygT/46HXiNfzX7/8Z933hVixtXURjOg6dphY1VaV8TxVQyqolH0BVWw1VTSVqSlZBtno1dJUV + sPH5uEmJQtSNhZYYdnY3YE93PRHHju4gNbUb88wtk01GjGb01PhGTJGjTDTrMZnTUu9rMd3BVsTLTxvA + vlLGnuMGcBNjT1NstWQAd2XKMZCvwaj482uvGqMdCvS1VKMrVSVpn/Z4LTrq5OhMMBYyXnULAzhdix6e + u9AoJwdToD+jwEBahhHGvlnm+80dauwtGHHGsAUXjDF/Tttw05wddy44cdecA5+bNOKWUS1uGiriFuLm + fjVu6VPjc4M63DVuxj18zedmrLh+XI8rh1W4qFCD87o59kR1/2ANbmQfun+DEY9ss+JpYQJvd+Abmy34 + +noDvryowxdnVLif/e2+zlI82LQK3+D4+lGXCr8q6PGbIQP+e1iDPwsDeKSW/bMKr7GPCuP37eX2VWH8 + 9q3BK+zDf+tbiZf7V+P1sTK8Sx1XNIDVwBbtMnT4eIMS78zV4LWJcqIMr4yJqc/F+tfs9+Ps/8TLfP1f + hlbhv/pOxG97TsQfB1filakqaUpoAbE28FvE28sGsDB9ReWvMIDfXeTYm63Em3OVeG+9HB9uVuHIVi2O + 8PrHsE13HEt6fEy8v0lM/yzHa4vVeGmhEq+wfW2TAu9u1+MTMWX0qS58eJoLHxxy4639Dry2y4nXt1J3 + rnfgpXVu/HmtG7+Zc+FXUy48P2DEs71GPM1c/MSQGw8x/z2+kMLPz53Fi7cfwgp9zQkwK06G3yKmgVYj + GTIg6lbBpS+DMIdtqjUIWkkImbALTVFpCuj2hBsplxJBwxp41CeiwVtNAe7G5tEmnLaxgD2zeSz2xaV9 + rSRFzVLFk1YygBsTOqTrNEiTIDXE1BKSEWEGqyQjWBjAAum6YqJtbyHJzpPQ99glA1isASyI5NxUEPPT + IUyNezHcb0FXmwq5xmqev4TnXoVGJvF2dvSuFh16sqIyyIyhTooCQToZVPuyVRQLlRjOVXAQVpMc1GJz + rxxLonq3uxS7u1ZjV/tJ2JFfgT0dTAy9q3CgsBqHGBwPDKzBKQOrsbtwIgf5Ciy1M4G0MoG0n4w97dzf + uhrbG1cSJ2NfvhRnDjCZzNbimq1K3Hsmg/uVNjx/tw+/+nIY//a1IP7jEQ9+81Ub/uNLOvzn/TX4zRfK + 8Lt7S/DHL6zGy19kZ3tYmDpGvPNNO97/ng8f/iiCj34aw8e/TOH9n6fw3s8zeO9nzfjTUwl86zoLbtlW + htPZWTcxMczGStDvLUPWXIY6BuSAshx+bSWClkrEPNXIhFUUaZplkNj4SfqcYhro1XCoV8JcK6aALoVJ + TAG9bACL9X+1+kq24sftUph1FbAbSCZNNXCRiDlNVbDpuV9bAoe0BnCVZOiKCuAgEfLyGgE14kENIj6V + 9Jyo9nVZSDTFcW4eJ36U47aYIloYxKIiWBjA4nnxXNhHkhtQUHRSmImpeyJyJGJyyQRuqFcjIwzgpFxC + qr6WKJrA9bFKaTrotiz7BUVAh/gXaJMB9STjYb73f2QAi8CvVzMhaTUwaNQSxLaASaeWcNQItpHsCdhJ + +GwmLWxmPmdSEUpuK+H3GFHHsdTSGEFbrg7peq9U9Rtw6+F36RB0aREV63GHTRwDVrSmSLCaSJRzQfS3 + hVDIedEpphRKWtASN3JsaTk2dRLEHy3akhR2aRLunIeJIYTJHorKjjB6mlxorbcwgVAApZ3s/xw3eT8m + 2n0YzzswnNZgJCHDdKoWm7Iq9ncjzhq247xxF84Zs+M0jrFDfSacMejgfpeEc0c8OKvfiX1tWuxkEtlL + wnKox4pzKPgupBC9dDqIyxdCuJIC9+ptKVy1oxnnrafAnopgvVhbiONSVAoKEzhqX4mgcQXi1pVIO9ag + 2boanZ4TsD53Es6fI2E6z4x/vi+GV7/JPv+dOhz5QQz4sR/4mRX4hZGtno81wAsM8i8wwP+Ij39oBr7v + BL7H474VAZ7muHk0iLe+6MGLdznxHzdxHJ5jwFP7DUxKGnx5rRpfmTXgMSa8b28UBnAC39kcwlPrnPj6 + ghlfm9XjK1N6fH3KhKdnbHhu0YVnFp083oqHpoy4l4nvthE1bhhS4co+BS7r1eKyggGXF0y4tIfoNeDG + CQce3B7Hd8/vxK9vGsVL983hzS9P4Z2vDOH9h7tw5BstwLNJ4NtB4Lsu4Hm+v+/z/X1fV8T3+P6+p+Bz + TGjfrcWR78rw8bdr8dFzMrz/jBzvP63Ce9/Q4r0njYQJ7z5pxntPOfHxt/h5vdDGz2kYR34xhfd+NIY/ + PdaLx8914tyekzDnXoFB0wkY9Sgw6rdgJEDBHDJikuNqhiJwMSHWkdRgX6cZB/us0p8C9vfqCSXjoVgT + 2IwLZm04n2T/gjmjZP5evsEhGcCXLJhw/qwWZ5B8njUhx9lizd95Dc5fa8LhabFWpA57utTYllNJxshc + vRwTUTmGKbL7vTJ0uynQiF6O+37GiwG/BsNBLQpBHVr5WBjASeasqIMi2q6C2yaq+DnuOI6L08cIA7hY + 0asRRtWnDGDxT0OB4wawMIqLj4/+C1EygB06iiSOa2EEcwwHg1YK+TCmpvowPV1AWz5OgaxF0KdDOGhA + JKBnjNMh5tNIMx0k/CokxJ9swqICWFT9GpFNUGyn7RRQDnQ2OdHOcdtSb+B+I3OXnUKaOTfvRmezDU3M + nUlhAAeVSDFWpyhs6/x8zFia8qvRRMLbWm9nbnairc6O5rARab+o7i0avI3cbuLnlQvqJWR5by3c18jX + ZoRRRrEsGcD8PIUBPNEZxmhbAP1NdhJII8+p4bm1JJmMm2kduYARBZLZQrMJvUQPt7saeV4K48ZoLTIC + JKINMRnjcw3ioUpEQxWIhCuPIRapYtxlfE6q0MzXtpEo93a50NlmlczfRKxaQpokNtukRa6J33eGYKzK + Z7QS2rm/Q1QPE53M9d1ZDaFi3meOz8uwVlQAkwjNDlsxPWjBhskQNs3UY3oohE4S8aQQ8mH2G58MLvYv + r/gOwzYkGmJo7WhFe3cnRUQH6htScHjdsHkdsAsT2Ef4BVxwLxvA3oCTgtxIQa6Fgf1GramCQlEGjYpc + SlfF/CCTDCph/jrtajgdzAs2GVEjQUwH7SQHEwZwgCImyu+yWHVrP2YAaz9jAAvjVzKAmdOrNRWo1VZD + TiElKoUN7KtmD+/FSQHP64h1f5XMzVp7LUxeFYz8zg3c1oklPxxyii0FrB4NRZZFMoCF+fvZdYAjSear + pA+xlJ+PPZII8wQtFGjMe14jLB4TrF7eK1ujU8/rKSA31PI+iyZwtboGlSrRFg3gWq0cSiPvQ/wb3mlA + PO7B+FAbTt+7Hlce3oObLjsVd95wLm6/8Vxcc8VBHDp1LWZm2tDM/BXlGDpqAIfr9NIU0PV1ovreLHGL + uJd9yM2x4lIjxc+6gZ972sK+zlycMjJmGOSEDEl9DRKE2G5gfMhYyIusAlVoJHfJ8rNrIydp51hrslWg + 0VqKRlsZ0kTGVo6MvRxNzko0uXks41WLv5bjS45m8qsmZxnaPGUYiNViukGFtY1qbGpWYqlVTX6pw1Je + i3kKs+lGJRbabZjv9mO6i3mbAnKmuxEzPTk+bsVoawsGWxrRk6xHxuNEnVmDKPlXA3n6IOPK2owJW7LF + ZRdOGXTirOkAzpwNYveQA0u9VmzrtWNrjxNL3eTp7Q5s7nRhU4cLGzsc2Nju5LYHWzp92D1Yj/1jaewc + qMfavBeLrV6sy/uwkVxhU6sfW1p82NbowVLGgx0pL+HHjoQP25MebE04sKXejA3k9pspdnfz3KeNhnHm + TB3OWkjg4HQMm7rIw+OVaDSegKhsBbzlK2A6aQXMq1bAUbUGLoUMbq0abr0eTqMRDsGrxDR42lpYtDUw + 83v63xnAHvInP+O0MH3DQfaPYwaw5u8MYNFK226ZBK+7htyslvGbXCSkkv4QKKqA00nqFca9ZLJYHSQq + gLOtFjQ2mZFuNKFh2QCOp5gTqGEc3irJADaSq0qVOw6OL0cNdOwfWnc5DL4KWMLVcJKTelNyxHJ6NHRY + kCMfGp1JYNO2Dhw4ZRhnHprEwX0j2LdnGPv3jkg4uH8M+/eNY+euIWzbVsD2HQNYWhrE+vVdmJpuQk93 + CDl+X1kix+9OoLXNR/il7WzOjeYWB5qabLx/UclsQzu/955eP4aGohgZjmFsJH4MQ4NR9PX40d3pQVeH + W0J3pxOdREcX8xXR1u1gjLSjs4v5qtOBQX7nI2wnqNcmemzkn3ZM9Tgw1cfH7IdjPWaMi5mYuD094MDM + gJOx2Y31UyGcvrsDd92whHtv2YWLzxjmPj/zYg1zSzUG21UY7zNgYcyBhVE7JvsNGC9oMdZL3tqlQn+r + AoUWOToaOPbiMjSGqCEDVWhimwlVIekrRZ17JfPlau4vI2+uQEd9OaZytdjdp8UVC07cs82HB9aZyPNU + eGKqBt+YrsFTa7VFA3jJjW/v5PNjtbi9axVuozZ8YKAc3+bxP19y4rd7/fjr/gBe3unCa1tseHOTCW+t + N+DNRS3eWFDj1XklocBr5D2vzaslvLqgwqvrNHhriwkf73UDB8hTDwZw5BQfPtrvxYd73Phgtxvv7nDi + /e3c3uHBx7uD+GR3CEf2xnBkTxSf7C1CGMAfEe9tD0l4e1sI7xBvbQ3jza0RvLkUwVuiInhXPd7fncR7 + O9N4a1cLXt2Zw1+25/C77U3456UMfrYji1+dNoJ/O38T/unS3XjqvM24Y+84rtrahyt2juLK/XM4a2kc + +zeN4NSdizjvrD24+soLcPPN1+C0009lPxpBLNoAj1tUpwrD9f9fDWCe6x/gs8f9n/CPzF9RFewJRiUc + N3vF9qcf/yMDWJi2RSP3/70BXP8p8H54Tm+I5142gv3inogA9wX5OBiMECGEAyHEuJ2I1qMp1YD2bAu6 + ss1IhQOIux0I2U0IWvVoiXqZ21pwaGkRl5y+G5vHCuSgjJ/MzXXkLDFylxi5TT3zcMJSgxT5SYNTjkbB + TUX+DSjRzHzXEi4iyzidjauQq9egrYFckFq+s8WArpwOna3kgowbBWqL4X4jRgaNGB02YWLChrlZDxYX + /Vi7GMD8vFfCwoIPGzbGsGVHA9ZtiWN4xoXGLgXq8lUItZTCk14FZ2olvI1rEG6tRKJbiaZBct5RM7Ij + Zm4bkO4n5x4gRx23ooOv7+U5C7yOaAV65n3onvOia5bxlG2HBB+65hlnFwLonQ+gsBBE32II/WsjGN1Y + h5kdGckEXr8/j7W7ctL0z/NiCmiBpWZMb0yhn1q7fciJXK8NzZ1GNJBfxBtlCCXKEW6oQB35cEOen1OX + Hq09Rgm5bn4fHVqkcwrUN1UjxuOiKXLyDI8lh27tJrdnbO4b8xYx6kX/kBcDIz6MUsNPzScwN5/CzGw9 + RsdDGBhkLmGs7+60opexv69gxyC5yDDPMTpKXjfuxvCIqCi2obfXiN5uAwbYDvM6490WLLaZsYs64qyE + CddFrLjbZ8FXnBY8abXgO1Yrfmiy4sdGO35otOG7NmEC2/ENjwtf97rwRZcFd9kNuJkc8iZqs5sSXlzd + FMS5uSD2CO6Sc2E6Z8NQ3ibNMtTOvNTa60SeeTfX60aOOauxjXmR2iPdakWCmibOfB9rIK8URjB1Tx0f + 11MLxer1UiWwL0j+wPwSiSlRR66QSJK/1otqYWq+euozIpnkd9FgQlogY0FTI8/P9qgBHCYidWqEBOrV + CMTU8ISFqSuDyV0Ji5dcx0NdwD7vpu7zEO4wrx3TwkO+4QkppXV+3aFavk4Gf52CHF3N79MgvYf6RjMf + 68jTlTxHNezkIA5vBXw81kce4g5WwEstFq6rQX1ahTbm744Ou7T+b31Cjki0kmO9DG7vKni9K8mpSsmN + ypCqqyI3ErPrlSIRZ05NliGbEeYvx5v444X4TvsczPVuDLVRx5J3dDfY0EVt2hF3sGX/j3vRW+8pVgAn + neij3hlI8DviMUPUskP1NozwuVHqjNGEG2PkmOPclsDtEbF2cMiEburbTur/DqKbXK/Xb0IfNXh/SI+x + hBVzWRe29AWxczyCvdMR7CQ3Xhp3STOKjOfk6G+oQqdk+q5GPl5CXlCK1sjJyIZPRGvoRGT9J6DJfyKa + IzwmrUau0YBMkt+x4HvOahiNlVIFsN4olypmJdOX3FWC6VMGsFnMSEZNRnzWALZZirCa9bCQ8xZNV8Wx + tXuFwas2qaGmVtJZeC5hAruLUz8b+BpR/SsqfitryohyyfzVGqgvxQyEPgeCER/7bAChmI95wV2ctSrg + YG5zME8LE9jK79iKVCpKPlvPPlonmcA+n0ua8tlgUkGrkxcrgPnY7bRCLHOXiDiRpS4caQ9j82gKB+cz + OGOhHudQe5xN7X14yoQL58y4bJ0d12x24c79YXzhUAS37/bgcvKfw0MVOK+/AhcPynA5cVlPJS7KrcQV + ratxU3clPtdbgzsL1fjCsBIPjKpx37Dq7w3gznLc1FWJG7uOG8DXcv/V+XJc1VaJK9uXp4DurMF5ndU4 + kziQL1s2gE/GhtQKbEqsoG5ZgaW6E7CnbiUOpcpwTmMFzm+sxHnpNbigYTWuaC7FTW1VuHdQhwcH9Liv + R4V7O2txV74St+fKcXNTCW7OnIzbG1f/TwO4tRT3tZVJxu/9fPxgbg2+xnt6tLsWj/eq8CT551N9OjxV + 0OEZ8tqnegx4okOPr+aU+FKzDF9qrMJXmyrxsDCAeW6pAri1HE9kS/D1ppV4oulkPJNbhec7VuPfBqvw + 3+Sof5tRSgbwW8SbkzK8MVlD1OLVURn+tmwA/6ZvJf69ZyX+redk/EfvKvy+sAZ/LJThJX4frw1UShAG + 8N/4mr9MKvDbGT2+P2bCLY212GZbhbziuAGsqBYVwGIK6DXse8sGsFaYwBWQaSqlqZ0VGuoho5J9mX14 + GRoz+zghTF+dRfwRXAWDqPh16mBxcYy4DbB5jIxTNsY4O/xRO2Nk0QAOMYb4653wMV5IiNkQYBtg3PDX + WRFOOtDWk8TodCcOnbWEu+69Hr/4p+/htTf+iI8+eQPAO2xfx3vvv4S//OXXePSR+3DmaXvQ09EMo64W + lWUnQ87xpKzl/YuW40pRVYGaNatQW7ISusoymKvXIEJN2h2yYDbjx1JHDDs7wkQIS51ebGTsm2YsHkvr + ijN8NQnj14JxMUuSVAGsxnSHqADWYoK5uD8tQ57xttlXxthTg1y4RjKAm4UBzPjUWl8iVfsOdyowO2DE + OvKOmYIew61y9KZr0FEnQ1u8Fu1xOWOaMICV6E4p0JOWM/7KikYwNZL4o2wv4/cA8/0kv88NbWrsLhhw + +ogFh8ldLp+24YZ5Bz636MIdbG+bNOGmMR1uGNHihmEtbhxi26/CTeQ7tw3pcce4BXfyNbdMmXH1qA6X + DipxmGP3rM4KHO6uwiV9Nbh6mGN5TkONpcfDG9nHNxrx9XUGPLJWh6+s1eOheS0empDjob5qfIXj5em2 + avy4V41/5Xj7/agRfxjR4E8c+y/2s0+yj74yUIE3qMGOGsCi8vflvjV4qVCCF3tOwkt9q/DGaCnem63G + R2vlOLLp0wawFp9sVOGdeZlkAL80shp/HVyJvw6swouDYns1/jy4itdbid93n4h/b18h4XeFE/DiGK81 + w/EkTOD5WkKGtxaVUhXwe+uWDeANRQP4zSkeO817XKjBexsU+Ij7JfDaEjYtY7MaH2/R4APe1zvrFXhj + nTCAa/DK2mpqxBq8zmPe3WHAkVNdwOkefHIm9eEZHrx1ih2v7bHjjW0OvLbRgVc3evHiBi9+t+jBv8x5 + 8EyPBo+yj325TYv728mNWrS4ZziI5w6M4NfX78UKg+xEyQD2GCsQdsgR92klI9hvqIBNuRJWdQn8ZiGi + LchzwHWmvGhm0o1bq+HVrkJAvxq5qJiOK45T1vXg8oPzOG/nGHbPtmKmJ4zWuBaNETUa64oGcFOiWAlc + rAYuGsEpkqmiEXzcAE7FaiUDuDNLEtpukdb/laaVGXBhYsSN2YkAZicDGB92YaDHjA4SjxYSkMbEGjSQ + kLSkKpd/DNajJ2vEQLsZg8sGcG+WRKW5DIWmNRhmkJ7pqMQmJpTt7KS7CuXY21OCU7pX4kDXCTjAL/00 + tmcXTsR57CAXj5XiwnGBNTh3dCVO7z8RB7uZOPIrsLt1BfbmTsSe5pOxq3EldjE472dHPnOgBhdM1+Kq + jQrcc7oRX7nEhmdv8eOFL4Tx8wdC+Kcv+vDP9zvwq3v0+NXtMvzrrRX49a1r8PvbSvHXu6rw8v3sEF8x + 4K3HrHj/OR8+fD6Mj16I4eNfpPDhL9J4/+eNkgH84nNp/Og2L+7azYHXd7KU2GbCq9HvKZUM4HoG5aCy + HAFhAFsrEHNXSdOKinUpmyikmqI6pMWPX54afuclcKpXwVJbAvP/MIAr/s4ANjLQW7htN1TBQTJkZ9+x + 6Epg0qxeNoAr4XNUI+AiQZUMXPkxA1i0wtA9Wu0bEOauR/EZA7hYBSwMYD/PIV4f8tYWq4CDBAlzHSGm + ZUmISmBRBZwkGPgaiUxSTlBIJmqQjAviyiCb1aG7wyxNO9rMoCzWgBHVH14KTYetaADrVGLah2oJGoUc + BhXJmEohQWxLj9V8TBw1gsV6wQIWEiWz+OFSmrpQLk0pbWOS83soEqIUGw1BZJsi0pq/wvz1OjTwObX8 + jDQIk9CKKSzTURNaRcVuoxsDuQCG20MUMCTNjSTpSRPFrw5ZktCjyFFMtHF8dabEP6EdGG33YbonhvHO + MPqaXRy/RrTXmyWDZyjrkSqNxA/OC91uzOWNWGhRS+v97urU4KxhCy6ecuHyWT8umXbjvBEHDg/bcP6o + GxdOeCVcMu7F+RSdpzJxnZJX4nQKuvOHXLiEY/PyqSCumgvhWgrZ6zdGcMNSEtftaMQlmxpw2mwU2ygW + pyn4Bik0crFqRCwnIGhYgaRzFZq8a9DoWIWcawXGSdD2DpyEG3cp8Nz1Pvzp641467kMPvpeAkd+FAZ+ + xoD4CwvwczPwEyNhIMS00FbCCfzID3w/CgjT+Jt1+PCxKN78YgB/uduDf7/Rje+cbcOjuyz44jot7h6X + 455BFb40RtFJEf6dTaICOIxn1nvwjUUHHp+34JFpC74+ZcHjU1Y8Pm3HI5NmPCgWyB9U49YBJW4YUOFa + bl/ep8IlJHQXM6leXDDhAortC3v1uGnWg4f2pvCDy/vx2zun8cpDazm2Z/DmV4fw9sPd+OjpLI58uwF4 + nvcsprn+kVjvmO/vx6YifsDk9X0VWyWOfF8hAd+VSybwh8/J8eE3tfjgmwZ8+A0jPnjShPeJ95604sOn + Azjy3UaesxdHfjKC974/yM+yE48ftuG83pOw6ONnbTuZ8YKEhCRrgv1yKk5RTtG7sUmNLS067O4Qxq8b + pw/5cGjQjf29Vuzp1mFvrw5njttwwawL589YcQEJ/1ED+PJ1Fly6aOY+vTQ1tMB5M2pctM6ISzbYcS4/ + y1MKGmzNKbCO5GeR43U6rsBYRIEBvxw9nlp0MR4J9PpU6Ge8GAhTYMaM6Isa0RZiPhHrm1P8xV3izyTq + YwawRUz7bCaplIzdWsn4lWAQU8wI8/e4ASyMXoFjRrBJeew5cQ6bXSeZv1aSUwfJqc9nQiYdxvRUH6am + epHLRuBxMW96dQj7DIj4dBKizKXiD1UxxpU6nwIJUbXL+28UFfv1VnQ2eZiffBKECZxhDBZVwrmUBR3C + fKV47WiyQUwZnRZ5MsycGdGiQRjAPF+dR46UX4XGsBE5kt72epJekuDm0HEDOM3PJ+MheFw2oEWLgF9D + kqlGRsCjlMzfBsZdYQh3p+zSFLSDOd4bRXtn0sjYoeW59ehqMJJECuPXgl6i0GzjvVPYc7sjw88kqkAy + xBwuEJGhngQ2GhRTpFUgFChHWJjAoUqiaAbXk6ymSFKbxDrBLSZ0ttnR2mJEIi5DjEQ4Fq5gzCb/SCkZ + M1VoblCjhce3fsoA7hTrDBOSGdykIuRoa2SOZ55fHLdjcdKN6WE7pgbt2DAdw5b5RsxPJNFHgt6Q0PNe + 1JIp5HTK4fHo4A86kEzF0dbZjo6ebuQ62hFLJmD3uCm67bB6nLB7nXBQHDu8Ljh9TrgFKKZtThNMNh2M + 7DManQwqVSU0zJsG5lwT+50wf+0C7KM2mwJmcw1RLcEi/jwl1ioN6OEPmxCMMzcQvqgVTnIuM+9Nx9eJ + 6Z/lPJcwgEXV76cN4Gp1FarFlErs2xr2f71DDZ2D92KrlSp/VbyGkf3R6tfB5FXDQM6nFQawk3nKxX7O + 3OOLWxGiqI81eBFP+xFlG064EZSmhfYg3hBAsjmChmwM6Vwdksxj0ZSP9+qG3W+FzVeEMINV/BwURgXv + tRa1hEwrqn7lbBWQ6ficXg21WQOjTQ+7y8i+QE4n1gDcOoPzD27G5WfvxHUX7sPVF+3DRedsxyl75jA3 + 14HWfBBiDeCQqAImxBrAsThzK+NCXKztyjgR9XJ8sP/H3WrEHOQJ/Axi/OwEwvz8hHCL8jMUiOjYJ9nG + yV/qyYXF2rQJYzmS5C9paxWayUWybvZDazkarKWS+duwbAIn7dx2VKCRfKrFJ+P4khO1aPJUIuMsRbu3 + DCMJBdYyhm5u1WEXxb34A81ZIy6cxvy5u8eCbT02bOv3YWN/CGsLUfLpBGa6M5jvbcVCbyeFYh6juRyF + WwMaffwOzIwvFNQpcq0C48BMUo8NzWbs7nVh/7AXp89EcPpsGDsGndhWcGJp0IvtgwHs7A/zsR9bCwFs + 6V2GtB1iS+E6mMC+sQx2jWawuRDHhu4INnczX3fHsLUziqW2CHZkQ9jZEsLuRiITwW7GwV0ZnjvjxY4G + YQIbsDmlw3YK3R2dDuzs8fC6PmzvdUtVxyOxGrQYT0YdtUegdAUcK1fAuXoFvFUlCChl5KcqBAw6eAwG + OPVackmlZACbtTXc5lgRBjC/Pwv7uNVUQ14lTGCZVGHvFQawpzj1c4Rj5u8MYMZAL8e5qP4V5q/HJY6v + KZrAHnLTZQNYTANdx1grqoBTwvyt16A+oZFMYDH9c5bvSzKAM6IK2CyZwMIADlHDOLwcx+wLwgAW0zZq + bOSOAvZlA9hLbsx46KRQ9yTYDxmzUtQmTV029IrpNefS2LqlA7u3F7C0uRNbN3fxcRe2sF3a2oNt2/qw + cVMX1q7NY926diws5DE+nkZffwzZrBPJBguSaQsaMlbem5X3ZuO2DWnRcn+iwST9KJ1MGqQfpnOt5JKd + br4+iIGhCIZH4hgR5u9wDH0DIXT3+NDV7UVXjxfdvT5CtHxc8KKjj+jndj/zBFEoeKjFPBjucUkzLAhM + FNyYEutBki+MsR+Osp8PdVsx0m3DSK8d4/0uTA64sTAewoGdHbjt2iXcfv12nHOwH7MjHuQaqpBPV6E3 + r8JwrwFzYy7ud/B1JowW9IQOQz069LVr0JNTM2/KmVuZU4LMP34xwxFzkF8sd7MafsEx7ScxF6/m8+Vo + jZVjrFGGnd1aXEbucveWAB4kb3l4VoNvTMnx9CyxTi8ZwM9uc+KZbS7cP1KD2zpOxueILw5W4FsLBvx0 + kw3/ud2NP+3y4ZUdbryx1Ya3N5rw9noj3hIG8LwKL88q8NKMHK/OqZehxCtz3DevxGsb9PhwF7nqKcIA + DgIHiibwJ3z88T4/PtjtxUe7PMcN4D0hYH8M2BfDEbaf7KUWXDaA3xXr/wrzd2tQwltbQnhjSxCv8729 + ycdiSuj3dyTw/vYGvLezEW/uaMbLS434Ix//Jzn6P+9qwr+fNoDfnLcW/37REp4/vAkP7hnHzZsLuGH7 + MG7YP4sLlsZxaOMwDm2bxlmnbsVll5yJa6++FIcOHWBfnEAy0cjxFYXbHUcgUKwCDgUzEo4av8ce/380 + gH3/B3z2+OPnSRYR+KwpW5wyuWjmFit5/94APv78P8LR1xw97n/i6HmKODo1swTxmJAM4GVj97OGb3EK + 6uM4bgAXp5L2hYTpK6Z/LsLHeyqi/n+Bo88v49NmMJ+X7mm5uljg2H3wesIEDvDagUAYIX8IkUAE9ZE6 + au402nNZdLW2IB0PI06eFHJb4LczP3ss6G6KY8sc+8+OtZgu5FDvIucyMf4ynnu1FfCSx/i15Qjoy6gJ + yxE0kzdayB8ZU6MuUahQxTFdw/EtxrkcyTDbiBxN9eS3GT3y1POtzVqC8aCFXDCvQA/HeC/jRHevFoV+ + AwaHLBglNxyfZKyaYKxaxiT17uz6KMbm/WgfNDI+l8OTWg17/YmwxFbAGFkBW91KuBqYq1oqEe8gp+9h + jqAGSnRrUNepQn2XGul+PZp4jdyoHflxau9xJ9rJQ9unCF6zdcxB2NEyZkPLKME2y335CSfa+HzHtAfd + sz70L4QwvDGOya0pTC+lMbW5AWMbEhLGickNSQzPRdFBLtHcQ96cVSKWYQ5NVMIbK4U7WgJfYg3C5MN1 + OTkyHdQenfoiuJ1m3Ey2Mt811yKaqUa4gXwoXYN4Yy3SbTrk++zoHHZK6BhyoLOf20TfqB8jM1FMztVj + YrYOw4zfhSHeM2N8B+N7Z7cZXdSHfeTcA8MuDI26MMzYPcDYPUAuXhi0SNNQi+KNsYIZE90WrG03YTe5 + /9kpE26I2/D5oA1fdVGL2yz4jsWCHxot+KnBhh8TPzDb8R2bHd9yMC67XHjC5ZCqhe9xmHAXueedMQ9u + TgdwUTaIg3k/uYgL8znmHGmWITvamHta+5zIM2/lBoheJ5q7nczDDr5vK+p5HzFq30hKS+4vQB7J7boG + 9mHm+mi9DkHm+2BMgSi5QbxBL5nDwiyOkTPEkjrUJXTSNNL1PDZBpPi6zPKSEWK/MH8lA5j8IrSMII/z + RZTk+7WwsY/b/OQ15JM+8ttQgv0xSV0gWn5GgXpy9Sg5TaQWAd5HUPyZVVT+NpCviKKGJiPqqMmi5GLB + OvKfKDlPoIbjmP0jqkSAY8Ybqub1yH/r2Y+pwfId7KcddjQ2CwNYgXCkkrGgnPqmBF7fKoTD1GTMm4n6 + aiTYx+piJYizj6XErC6ZWvTkdegXMy0W7Bjt49gibxhoc6G3xYmutB1dCfaPehe66skj6qh7qScK1BrC + ABZVwP31NvRTx/ZTG4vtQWqOoXo3hqk/RoTpu4xRYpjnGYjZUIiY0RsyoIfoi1i5z47+mAVDdRZMNrqw + ttOPbcNR7Jmuw97ZGLZP+rBhyIbZbh0Gm6vRnSxDe7wErdFV1Lkl1Ltl6GCbj61EPvzpCmCx5qYarY0G + NKf5+cQ01HDketQMxaWjlEUDWBi+JtMxA9hgoh6U9qulKmAB89FKYItYMug4RPWvmC5aVNpK00nrVNAa + qZH4WKlXQs1tYQAbRCWw0JpWg2QQi6mehQFcXVvBtqZYOWzRS9M+iz8nh2IBROIhtn4Ewh7CxRjuZG5b + NoC9PM4nuGKM3DYhoSEt8jc1HceUuGednnrSoIbVZmR+tzPmk2/GGHfqHSg0e7DQE8beqQQO8TMWU0Cf + M+XA4Snx248Fl62345qtbtx5MIIHz6rD508N4YatZlw+p8JlEzJcMSbH5UM1uLy3HJd1lODazlLc0luB + O/pr8PlBOR4c0+CLEzryL/WyAVyDmzorlg3gCsn8PWYAt5fjqnwZrmitwOX5ClyWr8KFHTU4TJxJHGwt + x67mEmzNrMSG5AnYWL8Cm6IrsJmxfXv4BByIr8IZyTU4O1mCsxMn49z6k3Bxwypcky0tGsCDBjzYp8WD + vSrc2yGT1v+9KbMaN6X/sQH8Bd7L/bzPB9rK8GBrCb6ULcHX2irwaJcM3+hV4ps817N9OjzHnPFt4ln2 + yyfb1Xi0pRZfaazBlzOV+GpjBR5uLsfXs+V4gq99qrMST3UQfK/PdJTiu90VeKFQgX8T5u6EAq/MqvD6 + jBJvTCvwxkQNXpdQi1fIX/82XCUZwL/rX43f9pWwLcF/9a3BH/tL8de+crzSV4E3+ivxxkAVXh2R4aUx + Bf46pcHv50x4ftkAXrKvRpvyhGMGsKqmBEphBCvKoFCVQa4uQy1zeK2msghVcW1fvVH8HnfcABbG71Hz + VzKAxR/XhQFMTnDMAPYWDWBv2AF/VPwmImYi80gIiEpgxhQ/+2Dg6LJVSQdCKQeiDS5kO+vQP9qK7XsW + cc0NF+Bb3/06/vSXf8cHH70M4G0cOfIm3n33Rbz66u/x4x99E5+76QosTA7A5dCgpkoYwGuglpdDI/wP + ZRW0tVWQl5dAXnoydNSr5ppViOgq0OHXY5LX3cJcs63Nh6V2L7a0O7HQRJ2SVGMooUIf4+lgSo1RxuZR + 6r7xFjUm21SY7lRLBvA4c3FvqloygFv8FWxlyIVlyDIGZ2PCBF6NXN1qqQJ4tEuFhRELNk7YsSD+yNKh + xgC/l/Z4DeOWjJAzhgkDWIXulBI9aVEJLJPQlaopIlGN3mQlRskXFlvV1Od6HOI5zxq34uIpC64W0zkv + OHH7gkMydkVl73WjOlw3osV1Qxpc26/GDQM63DJswG1jFtw6ZcP1E2ZcMarHhYNKnNUrw2nso2d2VeKC + Qg0uE1XAHOefo7a6nxroKwsafG1ei68K43dBiy9y35fG5fgKj3u0uxrPdtYuG8A6/HZETAGtxH/3VOIP + XWX4c08pXmZ/f6P/uAEspoAWFcAviwpgYQAXVi4bwDX4eK0c2Kw5bgBvLhrA7woDd7ICL4+U4MXBlfhz + 38n4c+Fk/In4Q+Ek/L7nBPw6vwK/almBfyL+s/sE/Hm4FK9OF6eAfv1oJfCColgFvFYhVQGLCuB3eO5i + dXE53pqtlgzh9xb5PPH+WmEW1y5Djvc38jWb1VL179vLBvCrC9V4cbYCL85X4JX1Mry1jfd80IkjZxQN + 4I/OdOPNAza8vteCN5dseGOzHW9t9eJvGzz4Lb+zn0/Z8UhWhnuooW9NVOFaft/nRSpwdacDD+8s4GdX + 7cQKYf4eNYCDNhkiLiXqvVppOk23rhQOXRkCVhLsgAGNITNhQsKlQtBIYqxZhbid4jzjwLbJHM7fM4Wb + z9uGq05bi1M39GKuN4pchGQ4qEQ6qkUmpkVTnfjxWyetCdwYJwFdNoE/bQCLdYEzJCStJPM9rSSKnbbj + 64r0OTAx5MbMmB/Toz6M9jvQ12VEB8V/C4lrY6Kc5ytFa7oWva0G9GaNKLSalw1gE4Y6tOjLk6i0lKGv + aTVGsqsx216CjV0l2FFYg32F1TjYexJO4xd/Rs8KnNO9Ahf0rsBlQytw3cRK3Mov49a1VbhtXSVuWWSy + mSnFpaOrpCq609pX4EB2BfY3n4T9LauxnwnjVHb+c4ZqcSED8RXrlbjjgAkPHLbikStcePpGD759uw/f + v8ONH9/hxAs36fHDq2v4xVTgX64px39cW47fXVeBP9zCoP15DV57yIT3n/Lgo++E8dEPKfp/lsLHv8jg + g5814t2fNOKlbzfin+6N4cFDWhweXC0ZwNPhkzHg4edhrUBSV4kwA3FQV8Xvl+LFXYUmfu4t/PxbRBvV + MchokPLVImgphUu9GpbaNUUDWJi/xwzgyv9hAJs1wgQuJ0q5vQYm9g2jeuUxA/jour4Bh0wyeOsCamlq + 1E8bwFL1r5ek00dy6qIYlMzfIoQB7HVUSccG3QrJAA4Togo4GqyVTOA4hWA9yXBSrAfMwNfYoGSfUBGi + VaIpRVGTFGaCHLlmDdpyFIutYo03kvRjBrBcmqJTGMD6vzOAZdAp5dx3FCRDAmpuEwaNUoJRS+JFmHQ8 + h4BeLsFi5HmtKgR8FAlMZIk6N5J1Hopmi2T8euxqyQQWBnDETQIf1CMdMUKs6SsqdodyXoy1B5gkfBhq + djBRGBnstWgn8W/7FDrqVOihCBlqsWGi3cMxGMFcTwSjOTc6Oea66o3oT9swlnVhut2NxR4PtvR5sHvY + g/0UaqdRtJ4zasGlM05cs+jF9YtBXD3nxaUTLlwy7sBl425cPuWVcMWkF5eMOHF2lxZnEZdQJF4zEyZC + HBdBXDcbwE3rQ7hlSwS3LCVw0/YGXLm1AWfNR7Fz0I3ZvAFDjcKEWo2QYQUiphPQ6F+DLEVGxrMSTa4V + 6CUxW9vKcThdivvOMOGX9yTwtyea8M5zaXz4vSjwEx/wUwdbO4782FaEtO0EXuBzL/CY5+vxyXMJvP9k + Am9/LY6X7w/h97d78KvrfPjO4SAe3uHFvbMG3EKieUuPmGLGhC+Pe/AE7//pxQCeWevDs2s9eGbRjSdn + XXhs2o6vMuF9cdiI+4aF+avCDT21uLqnBlf1KXDlgBqX9GlwIcncxX0mXNBnxrnCAO434raNIXztUAt+ + dO0wfvv5Obz0lfV49SvTeO2rg3jta514+8kmju8U8KM435Of4Pv4sWXZ5LbysaFY4fwCk9kPVTjyAxXf + nwJHvqfEx99R4ePn9PjoWVPRAH5cjw8eM+D9xxk3nnDio2fq8PH32nDkR/14//kC/vL1NnzzQgcuHy3B + zsSJ2BSrxLZGGzY1+jGf9GI+48LGnAVb20zYljdhB4XhKX1eHBoK49SBIPb3urGr04rdFPunDtlxDvvI + uZNWnDdjwsWLgvTbGPOskgF84YIR581qce60GhctGHD5Zgeu2OLFWRMW7OpQYoFEZCpagdk6BSYpToeD + CvT55Ojy1KLDI0MHt3sCGhRCWvRHDRisM6Ov3oyOqBHNQV2xAtgp1iBXwWlRwGrm2BOizFicyllAzTGt + EdPM6GugNYh/yB43gLUmHnfM/BX/ulVBY+B+jl1BWsW0vjaHmLpJIxnAogK4LZ/CxvUTWLswzDgSh9vJ + 8e3VI+w3IurTEzpEvWI8qxBx1jK31iDG95PwCxNXGMA2dDb5pOr+3mxQWrtbTBWdDKrRXGdCPm1FJ8e6 + MIJbGyzStNHNcebhCPMmP4eEZADLlg1gPbJx8zEDOBs2SVNAi8pfUdUrTN4Mj2/mdhMh2kav2KdEgzCR + GVfTjL3NjMkdFN/CBO4S08knLTyfXprJo42xQ/y5pKvBjO4MnyO62V9EhXJ7xiKtU9wQ5j0FZYzvMsRJ + YKPBGn4ezDm+MgnCCI4GqxANVSIWFhXARQM400BuQGHdlNYixdwfC1ci5FuDSLCCMb1aMoFT9YIXiOUh + lMhltGhr1EnVv4U8+0KbMMx5740qQs77qUF3iwwzw1bMjrkwwdg0zpgzPxHHhtkmzE02YpCxMcP3F+Zn + 5HYoYLfK+R0aGKNdSCbq0dHZia5CH5ryeQTjUcn4NTltMDvtMFMAW9wOWF0O2LjtIGwuq/SPbJNNT2Eu + poGmmGH/0+uYSyiCDDpR6cu+ZGNOMDOfiGnDdGI5hQoJBuZUB7mV08d8QL7lId9yE86AEWItX8kAZp5Q + s38fnfr5swZwpZJgni5OB13DY+XQ8HoCKgvvQ0zzHDLCxfNa2D8NfKwhvzOy71rI+xxBEwWVi+LJj/qm + EJLNYcQzAQQptDwxO/x1Tum5VC6Ols408j1NaO1tRmNbCtF0CI6ADTafRYIwgDUWMQ20CkqOIVHpKxc/ + ZBg0UBi1UJn1BN+Tle/NYeR7Z/9JBMnx8lhaO4rTt8/jvP0bccGBTTh86kacdWA99u6cwexMB/L5EGIJ + C0LsmyGOiXDMiAjjQjhM7hosLucguETEqybfYF51yBGwVMPLz9jLz91LLuQh/HwsIJbF8PK78GlK4Cfv + 8ZO7BFQrEdKsRMRQgoRFGL7kUNZSpGxlEoQBnLKXod5eiqSjDGnBp9jvW0KiUqmGY64cGVcJOgLlmCQP + 2dRmwE5y1TMYKy+ZD+GGLQ24ZmMKlyzW4ezZOE6drsOe8TiWRhJY25fAbFcSi72tWN/XjbnuTky2tx8z + gKP8/ELqaqTZj3o4lsfrdVjbZMGWLgd29Huwh9x4F3P6ln4ntvLxjrEw9k2lsH8ijT1jCWwfqseO4Xrs + Gkth93gKS9zeNsh9Qw28h2bsnsxi+1gztg40YBuxvZ/H9Caxo4vHtMWxKxfDnpYY9jbFsbeR2+wru5sC + 2JVxY1vSjM1JPZZazNgq8kerDVvaKI4FWh2YqVOj11mBnHY1ElUnIFp+AsJlJyBSvRpxZTXi5E8Rg1Yy + gV1aNfmkgrxy2QDWVhergJcNYJtJrK8tTGAxxbqs+CccjhNhAIfZlz9tAPt9Air4CMHz3J8ygMX0zwEx + Q82nDOAE+VWC9yq4YT15VTIhYpQJ2RYLMhkTUg16JBqMSKZN0o/CYeqbogFcuWwAV7D/V0FL/qrlPr27 + AiZfJazCAI7VwFUnQzBD3cP41dhhQ0efD8NjcaxbzGHrhnZsWteKDevyWM92cSHLPJPDuvXC9M1heroJ + 01NNGGFf6e4Joq3NKxm6ogIpmtBJU1KLSiXRRhm749yO8v2EyfPDEXJdIio0F99DUwtzTbsDXX0B9A1F + 0D8cRe9ACJ29XuQ7XRLau93oIFfs6PVwvw8dBT/a+/1oG/Khc9CH7gEfevp9KPA1/T0uDPY4qNmcGCm4 + MUZ+OdLnZrx1YoD9s9BhRaGNaLdiqFdoOi9mRiPYt6MbN129hGsv24S9Sx0Y6rEjXV+B5lQVOqnvBrpN + mBrxYHLIheE+C19LPVcQs0MZ0dsulgKgrkwoqCWFvpAhRn0Q91Jv8HP3WKhFyDFdppPgt69kXi5FJkgN + WFeJTa0qnD9qx+fWB/DgWiceIRd8akaNZxe0eGajSTKAn95sxWNrTXhwVIa7C6V4YKiK/FCL7623SAbw + v2114L+WXHhluxtvbXfi3U1WvLPBJBnAr80p8bfpWrw4JcPLM8q/M4D/NqvAK2u1eHebDR/v8QIHgsDB + kGQCi/bI/iA+2uuXDGBRBfzhTj+P4zH7yWv31+HIvqL5K6Z//nB3DO9sDeCdLcTmIOHHW5sCeJPt65t8 + eIPt21tC3B/FB9uS+GB7Gu8uZfDGUgp/216PPyzV4Td7Mvj9Gb3478Mz+N0Fm/DLczfisV1juHt9Dz63 + ZQB37p/D9XtmcdHSFM7ZOYtzDm7BpRcewqUXnY2DB/dhdnoGTZksx1scHncMwUADx2CaYzHzD/H/1QD2 + /h/w2eOPn2cZgb83ZP0BHkcUzVyBzxrAx5//Rzj6/P8tvKFPgec/bgAXccxwPYZP3yuPXT5OWsOXj32h + VBFBYf4SvEYRfO4f4ujzyzj6egE+9kpYPr9YI5ivEfD5xWuF+Vs0gAP+EL/nCLVtHfV1Bu25VnS356i7 + 61Ef8lCr26hzjQi5jMilQpgd6cA25vihzgzqvAb4zLXwWQhjNXyGIryGCniN5XAbS+E1lcFjLYOfeSPo + rkTEV4OoX/DMWsTIM+Mh6v74UR6pQ2MjeS+5YDojQ1OzXFrntq1Dy1jGtpu6uVvHeMe4MWCRzMij6Btx + YHCKsYxtpkMNV3wVbJETYY6cAFP4BBhDJ3D7ZFhiJ8ORKIEvU4VwTo54G/NEO3U7X1PfoUGii5qkS49U + twFp6r/mQRty1MqtE07kRp1oHrIh02+SzOOjSPZQ8/eTAw+ZkRu3S0Zx97QXhTk/+uaDKAhMB9Az6UPX + hBe9U9xPnd0z4UN+0I4mXivcUAVPvAyOUAlsgZXkeqvgrlvDPFONaEst6lt5b3lej0i16djynrmvLst8 + 0KxAOFOLYJr5kDE3lOZnmtchQ86S6eL7kExj6hbqvbYBxvHxAEZmYhgldxmcDKF3hHmAfKO914Z8t5Gg + Tui3oneIxw7bCDt6Bs3oHebnPGrFAPeNDlqLBnCXCQt58qMmQ9EArrNKBvCXPRY8bjPhWxYTvq834Sc6 + G36st+EFswM/sDjwfeJ5mwPfdrrwuN2Oh+wWPOix476QG3ck/LiMnOT0rBe7WhxYbLZgJMt7olbIdVNP + FWzI8n6bBQp2NDJnZTrtUj6ONQvzV4NggrmyfhncFmZqvIG5NaWXKmsjCQ23uS9tQD05gWiFGSyOqeMx + whyOxvi6uFoyhJNiPxGp47mpc8PkFqLyN3gMYgkWUe2rkExgB7WUO6JGKGlEXaOVvNtFOBGn7grzugGe + Nxg/akJrUZcW96fmPWmL4D1GCWEuB3itQEQpzVQS4utCvI4/wu86Rp2WVCGRMaC1nfmeOj8tiiL4fkMR + cuUQ82ewnC31W4xjL17J98Kxl6SeZV8TqE+Q+6bl6Gw1oK/LjoFeMdW3E4NdHvS2udAldGzaQf3I7ZSH + ulKYv0SSz1Nv9CQcbNlHqD0L1Pb99ZaiGVzPc9XzPAnyBx4rMLTcin0DdQ7mcDsKcRtbGx87MSQd68AI + rzfd6sO63hA2DgSxbTSEreM+rOfYm2xXYaCpkjp3DTWzqPxdjdbYKrQn1qC7oQL9zdXoa6xCV10J2iOr + kI+WUAOXo5N8rY2fU5NYJ7pOS81YCRM5qNGsgIla538YwEY9DOSxBu43mKgJLUWIaZ1NYmpni34ZOgkm + 8XphAJMDFw3gYhWwklAZVOSVBhioL4UJrLfyvNRPWhM1ljCAyZ1rCZVWmGxi2mhjcd3fgIvfuV+qAA5G + /PBzbAgTWLQevwNuYQD7hFHsIJeNId1YJyHFbb/fCTu1mcl83AC2UeMKjRwLk3PWedCSdKKn0YmpvJfa + JYKD0xGcyRh67rQD501ZcMGcFZetd+C6JQ/uPhTFQ+eliCQ+f2oAn9vpwC0bjbiOfOuq0RpcNVCJ6wer + cWNfJW7pKcMd/dW4b0SJL01o8dCUHg+OaXHPgFwygG8Rlb//CwP4itZSXNpSiktaKnBJthrn52twTpsM + Z7YtG8BNJdiaXo2N9SdgY3wFNoQI/wps8a3A3tCJODW+EqfHT8YZsRNwdvwEnJ88CVfwNff0aaQK4IcG + DHiooMN9HQrckavCTQ2rJNze+PdTQN+bW4P7eT8PdFfii7zPh9pK8VBuNb7WVoZHO6vxVK8czxY0eLZX + jW8VtPi2QLcaT7XJ8VhLDR5OV+FrDZX4aqYcDzeKNYAr8SRf982CDM/2yfEtfg7fKVTjB33V+OlADf5t + WIY/TCrw6qwGr8+o8NqkHK9J5q8Mr43L8MpwDV4id/3zQDn+MFCGPwyV4c/D5fjLUAVeFFM+95Xjtd4y + vFWoxFsDVXh9TI5XJlT424wO/71gwXdHjLiZ+WHJQV2rPkkygA2KcuiU5VCryqU/vCsks7cCCvEbhK7q + mAEs1gIWU0CLKmCtQVHEUQPYzH2itRargI0OjgNCMoE9Bjj9FskE9kUc8MdE9a9Hgr/OBX89wXEfYFuc + qcyJcNLF+O1CQ3OYeiWD+fXDOOPc3bjnvhvws19+C6++8fuiCXzkDXzw3ot447X/wu9/8zM89uW7sXPT + DMIhM7Tq/4e9v4yS7LqyRtGSVJicGczMDBmYkRnJzMyVxcwsLEkllZiZmcEC25ItS7bVZrftdrcZ2gyS + xVWSbEnzzX0is1SS3d93v3fHG/f9uD/m2CdOnDi491pzxTxr7SIoq5ZBx+uymRgvWtWwGzkeq4qhKlsM + I79zyBmzkqe0+NUYTpiwln5mQz3RaMda+prRhAL9cRl6YjJ0El1imesGsioM1yox1qTEdIcGU/T9w00q + dDAeaaK9bQxWoDks/tMnd2Gs2JSoQEN8BRppp9qzJRgVAvCgCatHrFhJvjDRrsUgfbgkANOmN0Y+FoA7 + MwsCsJyfq06gLVmB9mSZVAJ/ql6JjV167Buy4MxRM84dNeKiMSOunrLgppUO3DhlxTXjJlw9ZsDVI3pc + NaDBVb1qXDMgsoINuHHEiOvHzLhy1ISLh/U4r1+JM7qqsL+1HIc4Ls/tluFofxWuGKjE9Rznd7GPPjSp + xOPspwIPT6tw/7gMD7BvPsqx/2xnJV5ql0sC8H9xfPysV4Wfs6//onkFftm4BL9rXY5Xu0rwVm+ZJAC/ + zb77Vn8pUYI3eovwStfijwXgqXkBeL2YA5gQ7To1PlyjxHuzchybrMCboyUcG8vx554l+BN/9wfi992L + 8av2Rfhp4yL8sG4Rvp9bhF+0nYY/iLmxGcsJEfj1Kf52WojAIhNYhrfZvsPP73K/b/O4r43wfMY5lrh8 + TMwXPI/jMzzuLNcJzMnw7hoF3ue5vcdzWxCAX5kpwy/7l+KXg0vw2/Hl+MtcBd7fY8UHp7vwwZmMBc90 + 4q0DNryxh3HmNguObbHj3S1CAHbip4xhX+5X4/5UEa7yLcb5ziU4y70Y+zxLcKSBHGlbF7511Q4ssgmR + T7lEEoAD1kpEnAqk/HT+HhIUSyX8JrFOxXU6pLm+2q1GxFYJr36FJABnvAoMNfixZ1UXLj9jNW6/aAeu + OWsdDq3vZseOoi6oRMYvQyasRiailcRfgbpqOtE4Ce+nBGAh/mZJVOpF9m/ejJ4WO3pJyiQBWLxBLgTg + fpHR42XrxUA3yWWbEIA1DDbkyCVIRIiWnBpdjfw9L7avhcSgxYr+NjOGSZIH2uj8aUj788swXL8Ys02n + YH3bqdjedRoO9i3GWb2LcLhnEY4Ql/YtwrWDi3Dz2CLcM7MEj22qxBNb5RKe3CbHI5tluHMVndbIclzE + DnNO82k4o2EJDtEBnd5chrM4CM4fVOKiSTUuX63BLTtNuPt0C+4/bMGjF1rx1OU2PHeVHV+5zomvXmnE + yxfL8e2Lq/Cjy2T42WVV+Pml5fj11VX48+06vPaQGe9+1oMPXgrhg69H8eF3U/hwXgA+9u0avPJSDj97 + NIOnz7PjKDvexvQpmAyfhgE/iYuzEjUmEj1thZT9EuMzTHqrUCeEX5LBeglaGhkS/qCCz5iBl2YZrPIV + sCiKYaYRNKhLJAFYzP0rBGBpDmBd8bwAXCKJwCb1cglC/BUQcwALAdhpLpYQdMkR86kYuDEQ+ZQALDJ+ + hfgrIMTgQuavEH8XBOAKadvQfIZwyF2YCzjC/hUlWY6SLMdDvK6YQhIRhABcXyPeCi4gn1YiR0OYy4h5 + Jbmultec10vZZ+KPPvHHn/hj0GlXSBm7enWVJPwKaJUCYp0QfEmENPP4HwXggghsNYryz4WMRLdDh7Df + ROJkRyxi5znbpLl/PxaASdA51mJucW/4HCJGNCetNNw2DNS7SFp9mGz1YZwBwFCtmLdXj56U+gS6SNi7 + k2oMkKCO1lsx1eLGmp4IyW8c0y1ebqNHNzGQtWCi3o7pZrs0L8qOATfOmg7hgrkQLpnz4oo5N25Y68XN + 64O4aU0Q1896cNWEG1eM2XElA9irJsTnAi5nMHtBlw4XkAxdO+HFrXNx3DAbxnVTPlw36cZt60O4Y0sU + t2+pxi1bU7hmcwrnzUawkwHkbL2GBL8cSespiBgWIek4lUSczlQEE+HlUtmdpsAiDInyLB2n4Yp1cjx/ + mR8/fziDV5/L4u0Xo/jH1wP4xzdc+PvXnXjvaw4J73/Dife/7sYHX+N3X4vj7y8lcexz1XjtyQT+8kAM + v70jhB9d78Z3LgvgpXMTeHxLBHdOWHFdtwpXNStILPW4t4fB55ALn+U1fmHahy+vDOCrq0L4EoPxz066 + 8NCgGXf2aHE7neCN/N2VbTJc2l6FS7oVuKRPiwt6dTifwfxRBrhH+iw43K3HRQx6796exDPnNuNb14/g + 5/fP4s9PrMafHxvDXx7rwp8fb8ArTydx/KVq4Ntx4Pshwg38uwX4oR34TwdbG/ADA9fp8dG31Pjom/PZ + wN/Q4KOvafHhV4344EWzJAC/94wG7z9NPKPD8WdpO54L4P2XavHR1zvx3ssd+MszDfj6FT7ctroKh1uL + cbBRjYMdAexuq8bGBvabJj820P5uaDVjXYOBhEaIwE7s6Q5jb3cEuzoD2NHG4LrdiV1ddhzst+PMIRMO + kyQcmSGBmDOdEICPcvmoEIFntLhktRVXbvLgik1+nDFsxuZGBSZjRRgOFGOCge9IiPbZp0Anx3iLR4Zm + txCAlWijzegI6dAVZT+uNqGTgWJLxEQfQ3/FcSNeYHJb5bAZq2AyVMGgr4ReL+YaqZwHx7KYI3W+PRkL + QrDI/P1YACY5lcoeFQRgp8sIh0MPr8eMJIPXoaEO7Nu9Htu3zKK7s4ZBkQ5Bryj/bEbMbyT0iItMYLcK + YQcDbVspQg6RwUA/x3Oui1vRnGUwXOtHB9GccSIl7CLJZC5qREPKIpWHbq11Sm1z1iaVfpcqNdB2JnlP + hACcCapQG9HTdpvRPC8AN0bMaAibkQ/RvgW0UvZvLbevI3Je+Xwrsn4L4m9BAOZ6UVY7akJDxCChhfdY + zOXfSH/dlDCiJWVCK8+hJW1Bs0DGKgnVDSkeiwQ4TT9fHZQjHqiiPa1COFDJ+1LK+0LbT4T9ZYiR3MbD + 5aiOVCARr0IqSXudJA+gz0+SIMdEhrCYl8pbEIDFttL20UpkSHDraMcbclq01BnQ0WDCIPvfUAeD0HoD + 2nIaQoX2OpLeRpLsXpJw9svhQTeG+n0YGYhgcjSNkcE02puDSPBafS4Se7MMFpJ7t82MgFu8nJNGW1sn + g4cepOrycAb9MDisDEoEbFwuwGS3EhZYCZNVvJHNYNlqIBjQWxnAiGBfiMCaCvqHCgbSIqO8UvKfCvUK + KBXLoFAsJ5ZBxYDDQt9jI8eye7VSNq7VrYPVxX15GBC5tNA7NFJ5ZyHuniwAC0gCMAMtIQJL5aC5TsVj + qS3s4/MisD0gBF7x1qxbEnuN9DU6O/2WSwNbwAh3xIZwxod4bRjphhgRRzwXgi/uhINBkStsQZC/TdbH + UNeWRWNnHVr6mlDfUYtIJnhC+DW7jdynARqLFirxB8UCjFqozTqeF7+zmaC26aFna3KYYBdz20Z96G/P + Y/1kP/atncDZ21cRczhj50oc2rUSO7dOYHSkAfl6P8Jxo5T5KyFmRJBjIBginwjQFrBvB2lDQj41AuSy + brsMDnM5bDoGc4RDVyrBxeewACe5jEO9FA7FYgZ2p8BJeJWnwK9dgphxORKWIiTtxUg7SiXhVyDpEAJw + 8ccCMHlIXYgcI1CBrKcYdZ7l6AiXYLpWhS3tRuynL7hwwocbNqVx7/5m3LuvFbfvbsZ12xpxyaZ6nD2X + xd6JLNb3Jemz45htr8Oa7jas7OrARFsrujJp5Hxu+kuNJADX2NjPOWZHOf7m8nasbqW97nRhQ48Tazvt + WN/jxqaBIHZNpHFoVRPOXN2Cg7ON2DVeh12T9dg324T9M83YPl6LbSM5bB/Oc9tG7JxqwY7JFmwZbsCW + oTps6a/Flp4abO3IYGtLCtsaEthZn8Du2mpJBN7F/rJLEoA92Ez7sIF2Ykudlds5sJV8ZXOTC1ubPNjW + 6MOapBkjPjl6TEVoVi1Bo3IpauXLkVMUoUZdjix5UzWvL6xTw0WuZSG/smgqJRSygKtg0VfAxjEgBGC7 + EIAZq9jFS6v0A16On4X5fwXEslSeP0D7TPsqRGDB81zOKnjIKYUILPUXIuSXSzzwnwRgQmQD19aYkCf3 + EnMCJ1P8Ps2WkARgbu/0VcLqJC+2lkBrLYaW3FdnE3Nul8PoqYBFzNcXroQzJoOLti+YViHZYESO8UlL + pwd9g1GsnK3DOj6rNUL0navH3EweU+M1mBjLYmqqFuPjWUn4HRysRid9cAPvr5hjMM44KhTldUTFH70F + BHkd0p++YSX8tMuegAxuH+8T4aN9DsXkqBbTpdTR34jy+71+tPcF0cxzqReZQI0WCflmm4T6Vge3c6K+ + 0436bi/qet1o6PWgqceD5m4PWjvcaG9zSNOrdLXb0U1+2Uvb3M117a022lwbWri/5nr6KvKJTvKJ3k4v + xofj2L2tB9devg2XHFmDjWsa0N5k4XMoQTZZgWbGd90ic5gx32CfGz2dFnR1mLlOzCfJ+K/ZIM0bn0ko + adOVUkwQpj8LCoHfzrFuWsJ+cwqs+tNoBxaTay9D1LUUjb5lmM5U4FCnAddPu/HArANPTZvwwrQeX11t + wZc3WiUB+Pm1FjxF7vL4hAqPjMjwzLQWX93oxHe2ePAfW9z48WYnfr3FgVe2uvHWNhfe3eTAu+steGe1 + Hq/PqCTxV+AVUZpvRi2JwgUBWIlX57R4e70Z7/N3H+0Twm94XggO46O9jPV2B/DeNg+ObeY+NxdE4I/2 + cJu9cX4Xxd93RPH+9jC3ieCYJPAK8TeAd9b7C5CEYB/eEljrwztrQ/jH5mp8sCWFvxPHyM1f3xrFX4g/ + 7M3iz2eTG543gT8eWY1fnLsWX94+jIfn2nHful48vH8l7j2wGjfuXYVL963GhWdswSUXHMSF5x7Cgf27 + sWp2JRryzQiJ7FJ3nOMvSw5QcwKRUE7Cwuf/2wLwCZHyX+PT2//T/uYFzQX8s6D7v/7+/xifOv7JGbcn + xN+TIMTnAqISPn0+C6LxAnxBIf5+jI/vxT9vW8DH90rgX/3W4/t4+4VM5oVzCvhjRIQ2VYjAQgBOIJOu + QVNDIzrbm9HSkEM2EeR4dLA/mDkmaUvSQYz00q5NdqO3LYNE0CpN3RIQ8a9NcQI+8nmfeAHcWg4xDZTH + UUa7XQa/t4J2nPE/EQnJEQ4rEGXcEBd2mvFvMkMOndUgwfi/Ol3JZTlyDSrUNWlpw9TIt2lQ16pBfbsO + TZ3ktN2MIxbQY0EH477mHisS9eRLQuwNCQF4cQHhJcRSqbVElsKZKIG/hly3XoVqIay26AkdEkScn2ON + QhRmLN/N6+4T4q8L+UEHanotSHYwNmhSINzIayAiTeTNrSqkujTIDZCDD9NWjpL7i6zgEdrdYfJ6IST3 + WZHn78Vy85ATTQP8rs+GXLsB/iRtHWNni38xTN5TYQ3yHKuL4aONC9XKEc1rEKvneRHVDTqpjTfyXOeX + wzn6Cd4vd4KcKF6CUI2c61WE8gTSvMbaTt6rQQ96xsPom4yyDaFr2I+2Pt67bjvy5Dp5nk9TF+MFnmtr + H7fvNdJP6NHab0DnsAV9vJ7hASuGed+HW/WY4rltoi86M6HHNYx/7mIc9RBjrc+QI36RfPGreiO+pbNK + AvB3zA58i/iOqYBv2Fx40e6QRODPeJx43O/G3VEvLk97cXbOhZ01NsxljeivYUxTr0cNryHDc8x0WSSk + OkxItpmQaGbcVq9DIKskR1aS98qlOXUXIETaiMgIzugRzTK+Iw+IifmCcyYJMWne3XkIkVgSeumTI3y+ + 7J9xcogoEYxz3/OZu6I8s7+anwm/yNSNqeChD3OF5XCyf4t1kawJqXobalt9hAcJcqtoRocw+UmUfT7B + c0nXGgkhQPMcqxlzioxg8T1/L2UXc1lwlFCMzzleyD4Oxcl5iOq0BqkcOQB5WmOLE1mxnxT5A2M0b4Tj + LlIOX6wc4QT7erISsbSMv2HfoG8ugHGoSKwQ5dfJG9rbreQBNnRwXy0N7Lc17K9pG1oz5BgZL9pSPrQx + hm5PMf5NcF3Cjg7x4nGCPp3oTS4IwEIUJodI0ecz7ijAdWJZfNfJeFdALEtlpNNu9PM4Q7UiySFA7hwk + PFjV48LKXismOO56a8vQkljCWFlk/ZIHxAsicGu6GJ01ZRhuUmKE6KspR0+6lLy7HB0ZGTprdZIAXCOy + wWNiGh9RwUnGWE8pZcmeXAJazAEsxF+9XgtRwlnAYNaeQEEsLqBQIrqQKWwwaqTyzyq1TBJ2hQis1Cuk + 7F8x768QgXWMq7Tmwv5EhrDYTiamrNMIgU0trRfzBttcFji9dtpzzwmI+YC9ASH+uqR5gF1eqwQhAMdT + YdrPqASx7PXZIEpVG4wq6b8QkZlsY7wW5PhKxIKo4TNszHrQXefGWKMb67p92DsawtmTPpw77cT5k1Zc + OGvHZetcuHabD3efHsVjRzJ46uIcHj0vjgcPBnH3DgdunNPgmrFKXDdcgdvHVbhloAo3dRbhjt4yPDis + xGMTOjw+qcfDo1rc26/A7d1VuOVfCMDXtYm5f0twWX0RjuaW48JcKS6oLce59eU4u6EKZzZWYn99KXbW + rsDmrEiSOg3rYqdgTXAR1ngXYYN7EXb4FmFf+BQcjJyCM6KLcE580bwAvAJ3dCikOYAf7zPi8W49HmxV + 4g7ue0EAvr22CHc3lBLFRBHuayzGQzzPhzsr8GhXGR7nuT3RuByfaSnCsyKLt0OGFzqV+FKnAl/uUuEr + nSp8tV2BLzZV4XPso0+z7z2VLMOTmRJ8pqYYn20sx3PtlXihT44v9yvxlV4ZvtpTha/3VOA7fZX40WAV + fjuuwN+mNHh9SoW/ibLPowXx97WRykJJ574y/KmvFH/sL8Vfhsvwt9EK/G2EGCjHG72leKOrGMe7S3FM + ZAEPV3EfSrwyrcNvZsmH+3S4PlWOzTYhAC+Gh3GbkTGbQVsBrbac/ZZ9UF12Ys5fBeM0OdsFAVimKodK + J/p1VQGGj+f/FRBzAAvorCoJRnthHmCrxyjNAewKiLl+RSawS4InKuYALsAbE9nBdgnBaoeECG1LTX0U + Xf15rN4wgnMv2ItnPncffv7L7+DV13+F99/7C469/Tu8+tef4g+//j6+9NkHsW/bSsZ+dpgMJdDIl8Gk + FVNT0o7SHwXdeph5bXqut6uLENCJF8Er0B7SYIh+ayV9wVra4dW0n7PkIQPRCvRGK9HNtp22tC1cTpSh + LyXDYI1MEoDnurltjwnDjSq0x0rREqJtEgIu7UtbQkUoaDPlaElxfbIYXezTo20qzPTrMDdokgTgSdq0 + oQY1Wqor0RgRkNG2LQjARFaUgVbws+wE2lIiC7gc3elyjORlWNuhxS7u78CwEacP6XDOkBpHx+iLZ6y4 + jmP46ikrrpoUIq8Blw9ocXmfGlcMaHA1txW4YkT8x63H+YManNkrx/6OKuxuK8e+9gqc3S3H+Ry3Fw/I + uG0VbhtT4H7GUo+xXz02rcEDE3LcPVCGOzuX4/625XiKY+PF1ip8p0OJH3aq8eNOGX7UWoofNyzFT+tO + wW9blkkC8Dv9FZIALHBssBzHh8olMfhvPfy+eyneGFqBdycrCgLwWpWEj9YoCQU+WC3H+7NyvDctOyEC + v9q/An/tFfNgL8efepfht51L8Ku2U/HjxlPxn/lT8KuOJfgzx8xrEzJJBBYCsMgEFiWhX5ssx+tjZRxr + pXhznGNpfvntSSH+ynFsWoDHmsc70zz3GX63Uob3VyvxwQYd/r5Bi2NrlXhrlSjjXor/bFsk4Sc9i/Df + Y0vxzjY93t9vw/uH7HjvDBveOmDFm3sMXG9kDMh1jD9fWWfDjzn+X+yuxJ0J2kDHIuw3LsIu2yJscy3G + 2Yy979vahX+7ehcW2TUrIERgr6lM+gNdlH/Ohc2ojTD4dqkQtSsRd5PYegsQpfQC5jK4tcvhVi+Vykae + EIBPX41bLtyOK9nuX9OJybYIagMKpH1VUmlh8eewKG8pZQDHSSKJhXmAF+YAzsSUqCPBahFzCzbT8Ys/ + CNrsGOj4WAQWAvD4gIdBhEcqDd3dJkpA6ySRr5YEJZ/i4KnTSdnDfc38bZuLcGCwQ8xBJeYbUWOkrZIO + fjnGG07F6mbemM5TcWBgCc4fW8FOvxiXjC7CVcTN44twz9QiPLzyVHxm3Qq8sFuBF/epJby0X4sX9urw + 1BY57l9VjpvGSnBFTzGOtpfgcHMJzmml4+lR4MiQChfzgVyxRo8bthpx8x4zbjlgxO2n63HP2Xo8csSM + Zy624YsXm/HyUR2+e5EWP75Ui59fqsEvL1HhN1ep8cptZrz+gB3Hnvbi7y8E8eG/RfHRtxP46Ps1eP/f + c3jnm1m8+mIOv3oihxcuDeCqWYU0B/FUZAmGaVC6vUrkSVLiBhniNLBJPseMXyGVfq7n/W8gSRRorOZz + 4bOKiWBLRyOnXA4rDfenBWCRvaTXl8OoL5XmALZynYCFBlHArF0mQQjABRTDbSmRsn/jfrUkAAssCMBC + 3F0QgIXAKz4L0beQPVxYFiLxggAsMoQDrgpuz+CJiIhgMEBiGqyQSkGnquVSCei8yAI+CbUiE3geQgTO + s58IAViU+RNzv31aABai78fCb0HoLQi8hZLPHwu+ny4BrYWFREzMBey06eB2MDjzmBAJWngckncJNp4v + g1+XjtdL4s+xFnTwGXEMpoJa1EYLAkxnyoL+OgfGmzyYafVitlVkzzqlOW3G8iaMz2M0b8RonRHjHOBT + TTas5NjZ1B/B1uEEVnf6McggYYBBwwgDlakGK1a1WLGpy449DCLPXRnAxav9uGqtF9et8+C2TX7cuSmE + W9cFcOMsyduEA1eN0QGM2bksPhdw1agdF/focEkv+/aEB7fPRXDLbADXTzhx3YQN92wK495tMdy9LY47 + tqdw7aYECWEIu3sZkDGw7AwtQ8q0CAnLItQFlqCLwXRXHZ1XuoSkfCnq/YvQTnI2mV2EQ0MluO+QDd+4 + KYJfPxbHK58L4a0XfXjrJRfefNGJN15wSBDLb37JjbdfCOCt56N47dk4/vxIFL+5J4qf3RLCf14bwHcv + d+PfLgjiuUMpPLg+jlvH3biGjvjiWhmuzKtwa6sR9zMwfIoB+3NjHnxlKoSvrYzixZkQnuW29/abcRMD + 9evpoK5pV+HSVjkualfiaDedZp8eR3oNOK/PhAsY7J/fb5WWL5t24759OXz2wnZ888ZR/Pj+Gfzm0Rn8 + +oF+/Oq+Rvzi/hR+93gEb34xjA+/FQV+EAb+w4uPvmcriL8/cQM/dgL/ZeF6Iz78rpY2QA18S0ALfEOH + j142SQLw+88Z8O7Tarz3GQXef0pNu6HHsWddePcLCfzjq0049lIT/vJ0Hb5/fQSP7jDgCpLsc7uMOIf9 + 5UBPCjs6qrG5I4QN7XbaRwNmcmpMMLBcw8Bza1sA2zui2NYewfa2IHa0+7jOjl2dZuzndZ9JMnB4QosL + ZvUn5gC+aLYgCIt1QgC+YoMbl64T2cQiS0yJqXgZRoPlGGXAOxhUSvaqjWO82VOFBnclWnwqNNNWtJBo + tYW16Ijq0SaEyiCDeS/tiE1OH1YBh7ECFn2ZVHJXpyMpFWV42S5AiL//awG4IP4KaEW5GoMo6yTeeuUY + 9pjhcZsRCbvR3JzBunWTuOD8Azjz0FaMjbQyILTRFpmkOb3jARNhQLXfIJWBFgKw10wiSXsmXrJK+LSo + iZhRz4C1iQGrQL7ahqRfN/+dmCPYipYaO9rqGCATrbUOjgvrJwTgJG1fTVhUcDDSdjPIjtvQzPNoinJZ + EoENkghcF+Q2tLtC+K3xFARgASH8pnifBcSyEIvF9uJ3As1xE5piBu7bJKGZwXkzA/VGnptAPmFBHYP1 + 2oQJWW6XjugQDylo12iXxZ90/ir4vaUIekoR8pWeEIAl8ZfEuDpWiSRtdYpEN5PWSAKwEHvDgZITArAQ + hAXE+jS3r00p0MhAvI02r5d2bqzHJ6GnyYKOvIHQoatJj+5WPfmBGYM9dgwNeDHYH0BvdxB9PTG0t4SR + Sdrg47Nx2pSSvTfplXBaLfC5PDyPDFpbu9Dc3oVYpgZmtwsaC4N6u4WwfgxuL1AQf0+GEIEZ3JvV7EP0 + Gwx29BoGSgxyxHxRal0J5PStMtkSVFUtQWXVYsgUDDboeywuEejTl5B/mRz0K4SYx1eItEb6CiECq8zy + E1nAol0oB13BY5Sryk4Iw0pTJbdln7eKuUjFH1pOVNeGUV3H4D5ml+YVFvs2keMJcVisi2YD0vdC/BWI + 1QQZYNlg9ekliGWxLtOUQK4lg+aeRkkADiR9MDFQE8KvwaGHzqb5ZwHY9LEArLYaobEZoBXzWDmMsNBH + hgIOdDRmsGqkCzvnRnHmljmcuXUOh7avxMEds9i8fgh9vVlka1wI0QaE2ecWBOAA+94JAfgENHzGKjjI + bS3krWbBTQRHYXBn1ZdI01UIiKkrHOQyDt0K2MXUFQxuXYRPsxhBwzLELUVI2UslkVcg7SyVRN+kq/QE + st4K1IbJqYgafzky7iLU+5ahK1qM2QYVtnebcNYI/eWMDzdtTuLeffV4+PR2PHB6B+460IWb93Xiks2N + OHNlLTYPJOjDQ0QCK9vymO1sxkRbI7oySeR8ToT1vE5NBWrYNzoj9P81Tsw1e7G63YN1nUSPB2t73Ngw + EMKWkQT2zTbijPXdOLypD2eu68H+uXbsW9mBA6u7uNyJXdMt2DHRTLRg53Qb0YFtk23YMtaCzcON2DRQ + j029ddjcWYPNrRlsaaSPqE9hV50QgKuxKxfBzpwf27IiA9iKjWkztuXpE5q8hA87m/1sQ9jVSJ/CcTdO + G9RvLEY/n0M/732vsRKdhko0017X6RgzkFNF1Ao4VTJYVVUwqysKmBeArbTldv0/C8CCuwkRWJTiF8Lv + Av6VACz+vHMJYcFZURB/aQ//dwJwLmtEXc6MTEZkyGikufwEhAAcqaaPoL0TArDeUsy+XwSttVSaC9jg + roDJy+8CVXAwuHfFiDhtIwP06jr6MNqupnaXlIE7PZOTsoDnpuswM53D1EQOo8MpjAwlMTycRH9/HF3d + IXR2BdHS4kZdrY2204RQmD6QHFiIvAvw0g4L+ANyeHyVcProI73lEtz+SikDKJpSIpXTS3MgNna6CQ+X + 7cg0mJAQmUC1BqTILQUy9SakG81IkzumRbZUuw3ZDhtyjM/qyBXqW2xoYNwlKusINDeZ0dJoRVODBQ38 + bUPejHytifdQ3EcjmhvtaG9zY2SYfWhbH666dDuOnrdWyn5uabLS15YgUV2J+notOnmM3l43enpcaG9n + zEeOJtDcZERDg+HEi5wxxpniefpFHOGqhJv332paBqPuNAkW41L2l6XwWU9Fjf00DEWKsJ0c5FJykbvH + rXhy0oQXZ834xloHvrrJLmX/PrfGgmfnjBKemtbisysNeHmzB/++I4gf7gjgx9s9+PlWF36/2YlXNjvw + 9iYn3t3okLKA35jTSOWfhQAsSvO9OVsoCy3mBX5VzAW8Wo+3NwgB2IkP9/oL4u88PtwTxD92+HCc+317 + gw1vr3fg3S2FUtAfCfF3ZxTvbQvj3a1BHN8SwvGNYRzbEPpY/CWEGHxCEF7rx/F1QXywKY4PNyfwwdYk + 9xfF21tD+Nv2IF7dl8Ebh9vxxpFxvHbBKvzx3DX47rYhPDPXhsdoN57avxKPHlqDuw+txfWnb8Rl5+zA + pReeLgnAh/btxrpVa9Da1I5oJMUxlzwh9C7g/xWAP3n8fyUAu32xE/h/WgD2+FNwe0WbkODzpeZREIH9 + PgGem7cgAsdC1bSTGTTm69HV0YKOtgbU1yZoT70I+kS8a0c+GyIny2N6vAN9XTmkInYEyW1Cbg1b+ux5 + +N1sPUoECL8Yz+S6fto0gQA5poB4sUUgHKW/iKsRIY8UglgszTZFWz4vVqUZ02UbNMg1qVHTopFQ26Yn + b6Ht6KRdmkdjtwWtgy40dDM+zwsBeCksISH2LjsBc3i5BEtkORzxUvgyVQjVqRBrIPdtpC+Yh/gcrddI + QnCmw4xa8tD8oBu1/Xaku0yI8RxC9XIE87J5VErZxLFWBVJd9DV9jAEGrWgg8ow3axlD1pJD5BinZTv0 + qGVb38vveszIdRppk3XwJchjeG6mwGIYvKfAHFwGe6wE7lQFAjW8X4zjQrU8LhGu00qI1utPQHzvy9Dv + VotpCkolMTjMawvX8R7n6R+J6kZeT5tJyp5tGwmgYywkte1DPjT30X90MUZpM0olpqV73KlHXqBDgzpe + V0OvFi2DJnQPWzE4QPDcB5o0GM0qsJY+8QCf5+V+DW716nG3x4CH7LS3Jh2+ZNDj6zoLvqW34lsmu4Tv + GR0Svm114WW7A190OvE5rwuf8blxT9CNK+JunJNyYFfagpVJxgTsG6IaXILXEWniM+P5RYlwM/lBI+9N + vZr3SQl3sgoe+h03Y5QFeCL0lzHeQyGkprSICAE4x3iP/mwBkRzjvZp5pAtlnv30974wYzJbBIAAAP/0 + SURBVKEYj5nQSAhE6ZtCPEZEBp8ozUw+ICDEX0kA5rKb34lMYFHqOVpjQqqBfpb+voa+ubrOyP1rpL4u + SlNn6tgHGqzI0scmsuIYIsuXz25e6BXnvCAAF8Br5fkIkVggkdUhzfPPNzrQ2OxCRpTA5hgKMN7yxSrg + j1ciUM1+npIhnJYjyj4SSyukMbaAasZlNTmd5P8bmxl7irbeIr0wV5uiz2ec2JQuxLvNKS+aEh60JFxo + idvRUm1FW9yMdsaRXUIETlkKIFfs5PPrTrnRmXShI+FEe7XjBNri4ncFtBMdCbu0fW/WhYE6tzTN2VSH + D1OdLoKxYruefU2BzppixrGLJfFXlH0WaEmsQGumFN25CgyRD4y2qDHaqMBIvfiPW4UBcpAe3t+WWo4/ + 3nfx8onLSX5qlcNiY6w2LwBLGb8GA/R6fUH81WkkkVZAlGsWOCEEG7lMLAjBYllk2YrsXyV5r0JdJYm6 + cq1MEoGNjJdE+WeR/StEYLEPkSEsBGCxrWgXjmG06BhTiRdrLXB5HSfg9AjRt9A6vVY43GYJQgwOx3wQ + wq9AOO6Hx/tJAVirVcJiEXzahUQsgNp0AC3k/X0NPun/yVVtLmzv9xQygKddOG/ahqMrHbhsvQfXbvfj + jgMhPHQ4gScuzODh82J44JAfd+2w4aY1alw7UYEbxypx15QKd4zIcFO3EIBL8dCIQhJ/n5gySGWg7x/g + 9z2y/1EAvrK5RMr+PVKzDEeyxTi3phRn15bizHwFzmioxL58GXbWFksC8Mb0EmyoXnxCAF7vXoTtvkXY + G1okCcAiA/jcxKk4ml2CK/PFuKW1Eve0K/Foj14SgB9oUeB27u8m7utjAbiMKJEE4Ht5Lg91lOPR7ipu + X4HH24rxZHMRnuJ5P9tWKom5X2gXIrDI5lXiK51KfLlNjhcaK/E5UfY5VYynkqX4TJq/yxbh6cYyfLa9 + As/3yfGlfiVe6pXhy9z3y10V+GZ3Gf6zvwL/PSrDXydU+Nsk+eUYOeeIyESsxN+GyqXs37/wngoB+M/9 + ZXiN378xIcebYzK8NVSJt/rK8FZnMd7rKsXxnjK8McjfcH9/mVTj11NGvNClwlWJEmywLEGzkvGxUvzX + X0leXfnx/22ackn8Ff+3KQ3sw+J/inkBuEopsoHL2VcrJCyUiBbbCIjtBRaE4IXy0EIEFtnAohy0yAYW + QrCAI8i+exLcIRM8YTO8EUsBITPtoAPJnA9t3Vls3jaDW++4DC9//Wn8/Bffwp//9F/4/e++h1/9/Bv4 + 6Q+/guefugsHdq5EJmGDSb8cBuVS6f+BoItxIPcr/tdziWmHtMXwMW6ttlUg75WjJ67DSEqHKdrRuawa + sxkVJpNyDNJu9sUr0BUVwm85WkNlbEvRS/8ykJVJJaDX9Fmxihht1qAjzu+jFbRnSto3LTroZzozGnTV + qtAhSuxnK9HLfiwE4Gn60ZUDRsyRF0yLDOJGjSQAN0QqpNLRogx0W0LMASymdfs4C1jKBCZayYtEKejO + VDkGaiuwkvvc2m/A7kE99g2ocZB97PCgCpdMGnH1nB3XzNpw5bQFl48ZcMmgBhex/13ar8JlAxoJFw9p + cB4/n8Hf7eusxM62cuxoLcPejiqc0auUvrtoUIGrhhW4dVSB+6Y0eHxGj0en1Lif/e+O3mLc3Hoa7mpc + jCebivCl5gp8u12B/+xQ4cccIz9qLpYE4J/MC8B/Ey8pDFSeEICPD1Xg3eHC59d6l0si8OuDy3FsvAzv + r6zCh6sVEoQYLPD3OVlBAJ6RSThG+/P6UCleHSjGK4MF/Lm/GL/vWY5fti+Wsn9/y32+MlqJ1yflEt6Y + kkkC8N8myvHqSDH+OrBcmkP4lcEV+NtwsSQEvzNVheOzCgmfEIC5XpSGFgKwKBn90UY9/rFRx/hMJQnA + r0yW8LpPwX+2LsKPOhbh5wOn4fWNKhzbZcS7Byw4fsiKtw6Y8dZuPY5vN+AfOx1SDPm39Vb8bEaHl/ns + 7qbtO+pdjIP2U7DHvQTbfCtwJuPxOzZ34UuX78Aiu64Edm0RPMYKhGx04OzkzXS0LWkPckETkh4G1SRi + CbcWcSdJhZWkxVACh6qQKZFwsEPWurBjug0X7Z3F1Wetx4W7prB1sgFD9R7UkLSnvTJkGZT/KwFYCL8f + i79q5BJqNOWM6Gi0obfdg346lIIA7CRRFCXFnJLwO9rnkeaY6O9ySXMEi9Ij+YyaJEOORhKgtgYzupps + GOQ+hrt8GOryYETMOUUCPdGtwXS3HDOdJXRYS7ClcwlOH1qBozPluHatHDetL8et61fg7rVL8Oi6xXh2 + wxJ8cWsRXt5dge+dpccPDpsKONeCfz/bipf36fH5bSo8skaOOyYVuJ6d/JLOCpxHQ31+twIXSoNIh8tX + GXHNRg6mLQZcsVWNK7YrcO0uDoYDGtx3hh6fOWzAS+fq8c3zdPjhhQb8+EI9fnqBBr+6VIM/3WjGX++y + 463HPPj7FwL48KsR4JvVwPey+Pu/53DsmzV4/ct1+M2TdfjaddW4mcfZ1bgM09HFGCN57Q9q0ejQIGlW + IWnVIOvhcwhpkY+RkFdrSIC0EpqTRuQjGiRcJLuGFXCqi2BXl8JKI23SltHQl0nCrxCAjYYKmAxlsHLZ + zmUB2/wfqjZDkQRRArpQBroEHmsZol4GEPPirxCCI372KQ+DOyeP9z8IwB4bCfh8BrD4LuwlMXVVSdtL + paDZx8K+qhMCcHWkShKAM0kZiaccOZJW0Uogaa0TGcCZTwrA4s898ceRNBfkvABsIAlbEIANGoUk/gqR + V4i7VqPuk2BwImAzGQogSbJb9HDZTHA7xZwZZgawZkTDtnkR2MzjWREPWxjgaqUstJMF4LQQYiJCgDEU + yjbnLBhrcGCW5Hx1hxfruvxY3+3DWvb/Bazh+BBY3W5nv7ZzOzt2jMSwZyKFzf1BTNQbMVqjxWRej1XN + Jqxvs2AHHc+BUQeOrPLi8nVeXLPOjRvXu3HnZi/u2RzE7et8uHnWLom514yZCQuun3TgBuL6Sa4ft+MK + Oo0r6IhunvLgrlX8zYwPN47bcMOECQ9uCeOhnXHcv6Ma9+xM4foNcVw0E5AyodYwwG73noqcEH/dp6Ct + uhhDDNCHWrXobpBJk903Rk5FAwlZd5jkrHkprtqsx1MX2vHdW1z45aMe/P4p4mkHfveUHb9/0ibhD085 + 8IfPuPCHJ/34/SNB/Oq+EH58ix/fv9aPb17qxr9d6MGXz3XjC2eG8OTONO6cS+Cm0QCu7rbhvFQlLqBz + viqnwq1NOjze58Dnhzz4ymgQ/zYZx4vjYTw14sHtvSZc1U7n1yjDpQwojrYocUGHFheQGB5h4H5enxmH + +604f8hJx2fFkSErrl8fxSNnN+P5y3rxjVvG8YN7pvBf9wzhB7c2499vSuK7N/vw8wc9eOXzPrz79SDw + A+I/PMAPHcB/OQsC8E9Fayds+OiHRuDfdcB3tITICCZOEoCPP6XC8SfofB6X453HNXjrSQvefiaId7+Q + xRvPZfHHx1L40c0xfP6Qk8/YhAv7LTh3IETHn8TOnmps7gpibbsNUwx8BhOV6AmVYzxtwOpGLza0RLCx + NYYtrVFsbQ8RbmxrtWBXpw4H+tU4a1SF86d0uGSVBRfPmnGJwJwVF82ZcfGchettuGDWgQO8VxsYbM0k + qjBO0jIclKM/oEQXx2Ezg6tGtwz1HhmafCo00FY0BukfiJYwbVaYPsSrRsrJoJz+yym9iFIKUZFgQQBW + az8Wf08WgD8tBP8rAVhACHhirh6X2wSv34oAg6RMOoKR4U6cfvp23HTDxbjs4rOwZtUg6nIBSfyN+gtE + UYJPPy8Ay+A1lcJtLJGmVIi5ed4BA2oiVuSidgkZ2oSEVwjAeskP1ycZGNc45wVgJ0QpaCEA52Pie/pl + IeD6acsiOjRWM+COEVL2rgmNYQEjmiIFNHKbBvqAetrcWt7bPO/npwVgATEncM6vQT5YEIGbuM9mkVmc + tDJgFwIz9891dfPIxkzIcF0mZqQP1yPJ84qKChKBQjadgN9bjqCnHCFf+b8UgEUZ6GS1UhKBhd0W3wkB + OOQrktpPCsBVqE2yH+QM6Ki3YLDVian+kIR+LouqH11NRvS0mdHbYUEfx3RfL7nDQAD9/WF0tAfR1hJG + bdbDZ6mFg5zHSp9oNgoRWAOH1Up77UF1PI2W1i40tXUilsrC5HRCbWbgPS8Aiyxgo52wcZkwOywSbE5b + AS6rNB+wUQTp3LdRL5dKQIs3xQ1W0dfYHzXzIrBiGWTypZCrVsBKP2BnHxDZvxb2Gwt5l9mlkQRaC9db + fSYu66UsYKWRwdV8JvCCCCzTV6KKfV4mAip+J8RfCZYqSQAOp33INiUkiExem98IE/2PKC8tlr1Rm1Ti + OS7KP9fHkMxHpYxgJ/umEKDFPizkg6LkUjwX5H5SaB9oQXNPA/xJH3ROHTR2LTTkGEqzEkqTGnKDAjJC + bhDzAYv1ovyzYV4E1kMtRGDxJ4NNC7eH/SsXw2RfCzZODeDAxhmcvnkWB7bMYO/Waaye7UF7WzWSKTtC + 7J9C+F1ASJSAjmjnoeH3GgTJcTxeBWz2KpjJJYz6Ygni7V4Bq5E2g7CZygoiMMenXfAewzJ4dMsQ0C9D + xCwyf0uRcTPYE9m9/iqkPUL0LSK3LUOa/TrtqyBflnEsKiUBOM1+nvIsp71agd5EKf2tCnv6zTgy7cYV + awK4eQv94Z4cHjrYjAcPteK+03twz5n9uGFPF45uasbOkSSmm3wYZuA6mo9jrCnNADGL7kwctT5eO++l + X12OjIPBXdyGyUba6p441vVGsaE/ik1DcWwcimHbeBq7putxaF0PDm8bwZEdEzi8ZQxnbBjEwbXEuiHs + WzOAXSu7sWOmC9unO7F9thvbZrqxebITm8bbsXGkBRsGm7ChtwEbO+uwqTWHzY0ZbGvIYEddQhKBPy0A + izLQO+td2NsSxH76iAMCLXHsbYhgc7UN0045hnj/x80VmOIYnGH/HnNq0cOx2KxTIKskn5NXwKGshGVB + /CUHtWjLJfH3XwnABRFYJvE3j1sjicCi/LMkAkvi7ycFYIdd/LYYTltpoQz0/1ACekEE/lcCsCjreLIA + LETXfyUAFzKAKyUB2B6eF4DFH74JBaLkZNkGKxpaaL/6QpiYqsHcbD2mJ3KYGMtgeCRFGxZHb08M3d0R + tLX7pT9pG5vdyOeFPzKhmsf2+irhcJfBTjg89IfeSri4zkVu7OF1OXl8O9fb3LyHhBCBPaEqhBK8XvEH + cKMFdW1O1LTYkaynD8vpEBHZRBnxZzeR0SDK2Cqc43KdHpEGI6KMu6qbTEi0mJFutiBL+1uTN6CWHDNX + y/tFbp3jvrNsMzX0W1kDslk9srx/Arka+qcmBwaH2Ie2D+DyS7bhyOE1WDPXiAbad3+gGNFoubSv1jYb + Oruc6Oh0oLnVjMZGPfL1BtTxWDXiJc4UY1SR3UQ/5/eo2AcU9NsyOBg3mMwroNMvISdYAgPHtMmwBE7j + qUgYF6HTvRhr02U4p0WFmwcMeGLMiK/O2fCdDR58bbMbX9pgxedXmfH51RY8v86Gz84ZJQH4pU0ufGt7 + AN/dGcAPtnvwH5sc+NFqA345p8Of11jw1gYH3tnAdq0Or0nzAMvx+oxaEoDfmlHhDa57fZUOb64z4tgW + GwN4TyEDeF78Fcv/2OWX3up+m0H9G6tNeGONFcc2OvH3rT58sCOEd7eF+NsAjm32422p9LMQf4NS2WcB + Ifoe3xjE8U0FIfj4+gDeZfvBpig+og36aGuc+wrj+LYg3txJHEjhvfM78O7RMRy/aA5vnL8GP9k+hJdW + teGztCGf3TWJJ/evwoOnr8dtZ23BVefuxmUXHpIE4DP278HGtevQ2daFRLUQez+Z/Svw/68C8KeF2mAo + dWL5X32/ALHdyfhX2ywcQ9rPp47/rwTg/yczgD9GhkjTbmTg9oo2JcHnzcyD+/claGMJH8/PG2Mb+ScB + uKujEa3NtRz3UcQibnI+N+prI+RltbRtrejvqUOGXCLsMyBCOx32cfxK0CFEex0JEeSVwreHoloEo7Tf + 4UJ1A9H6CG9IZFNymb43SDsthC5h04LVMgSqKxAS5WpzSnIZ8ssG8u7GAjIttE9tjCHajARtFlHXSbvS + 70QtuWMwR1suCb7LYI2ugCUyj3CRBHOoiN+XwJWogL+G3KpOg0ietnEeQlwN1dJ+1tOHtBpR02lDbZ8L + 2R4rqoXo2EgfXlsFX65SgremjChHIF+BaLMCiXYNsl20k10GZDq1SHdokBLlpVvoj5p4LVzOdTCG6NAj + 00Zf1cR7k66gXymGNbQMRv9iGPxLYY4Uwc774E7T36R5n7JqCf4abk/fE6ylX6zlPaZN92VpN9NK2OP0 + jdX0D2mZdG3+GgX8OTnPU44w72N1E+04ryff50ZDP59prwv1PUS3E3neu0yzXrrHyQb6Tcb0aXG+TXKk + 21TIdan5GwPaBy3oZRzd16ZDT70Cg8lKzAZLsNNbgaPkB9eT29xEznmnXY0nzBp83qDFV/SiFLSYA9iJ + b5mc+L7BIeE7Vhe+ZncV5gMWAjBxt8+JK0MOnBuzYlfciGn69PaIDOk4Y5E0r622Aj7Gnl4+B3e9HM7a + SrhrZHCl6Ue5jTNGP8pYxMG4Q8DJ+NcTqSJH5r1grBJI8xnTn4UYiywgSB8Xpn8LZdh/yQ9Epq8QgIXY + K0TfEPungBCE3QH6aMZC7hB9NPcrIARfkf3rjgrxlzFjXAjA9Lv0k8kG3tcmG30z/S6fmyhJHU+zL/O4 + uQY+ixYHapusSPM5ClG4kAFMfz0vAIsS0KEYebEEnj/PR2wjRGSR/ZvN0//TFze0zAvA7CPSGErIGCsw + lkvx/NMC3G9GVUCKywtIKnhc9tk6sS/2S+4jy/2m0iLBgv24muMsyTGQdKA+4UI+7kR9zM54VcSt5AEc + 460JIzpTJnSlGcelLOhM29CRcqAjLbKEnWiptjMmtaIxxliUaGK8K9Asxb0izhVTo1nQnXWgP+/GSIsP + Y21uwoHhVvY19rOOmlK0pJcznl2CpuQytIg5gFMlaE2Voj1bjt46GQa43QT75XS7njBgst2EiXYrhprF + tEwi5qV9ES/U2WWwSdP6fCwAn5wB/H9VAD4ZCwKwgtxXlHSWsa1ScVnDGI6/0TNmWigFLfah1ikl4VcI + xSJbWKxbOIaR21rsRtgZjy7A5rScaG0uE/mqUYIQgwNhN/tMQEIw6qXPccDBONbMOFaUgFbzGEaeo8dt + RTziQX0NY+r6MAabg1J1QiEAb+yw4YCYGm7ShfNmbLhwpQOXrvfg6m0+3LrXh3vOCOORIwk8dG6UcY8X + d+ww48a1Clw7VYabJ6tw70oN7p5U4ua+EtzeV4oHRz8pAD8wSJvQq8CtHRW4qb0MN3WU4QYuSyWg+VkI + wBflV+Dc7HIcTq3AmekiHMoQuTKcXl+FfbSvO3Ol2FIjsoCXY3NyOdZHTsN6/yJs8HwsAB+Knoqzq0/D + kfQSXFq7Alc3lOKGpjLc0SLDQx1qPEqbfF+LHLfmywpzAIsS0HVFuKuhDHc1lki4t7UUD3dV4fE+BZ7s + k+HxjhI80VqMJ9tK8HR7KT7XUY7nOyrxBW7zUrccXyZe7JDjC02V+GxtKT6TKsJn0iWSAPxEdgWerOdy + axme7ZHhuV5u112JFzrL8VJHKb7WUYwf9Jbil0MV+OOYHK+ME6OVkgAsxN9XB8skAVhkAP+V7auDlZLw + +/aEAseI46NyvCNK6naW4F2e57GuErwmZQmX40/c1y/HtXi+XY7LYyuwhty5Xn4qAmrxX7+88H+5gf1T + L4NGV/nxf21GmSToCgG4UlGMCnmJhCqFmKu6FBVKriOqNPwsqpaJbGFCydhOYCE7WIjA0tzAjBHNLv0J + iP9FTobVo5H+O7GTPzj8ejjZusV0WkE9YiknRic6cN4F+/DgIzfiK199Et/59mfxjW88ha+//CRe/tIj + ePSeK7FnyyhqEmaYtYthUi+G21KKqFeNLO1NNmpBiL7JZylH1FmJrE+OJvKPvpQOI4yRJmvUmM0qMJWS + YYy8YKj6ZAG4FK2hEqntSVRikD51slWH9YNOrB100cYYafNk6GRM2MVYpittoB0zooe+ua9ei17yiAH6 + 08FmOcbZ/2a6dZjrM2B1vxmz5AjDTVpJAK6nn6qnT5HmAY7L0UY/8a8EYJFV3J6tQluqDL3kHdMtCmzs + 1WN7vxY7+5TY3VOFg31VOHdEg0tnrbhqzoErZm24dNyIo0NaHOlV4sIeBS7qVeFonwpH+JvTu6uwp7MU + W9nHNzYXYzP76q4uOfejwWGOW6GFXTHMOGtMhXumNHhsVgjA2hMC8C2tp+Ge5iV4qqkIL7VU4jvtCvxX + pxI/Zb/7SUsJftq4DD/NnyqVgH69t1wSgI+xXwt8WgAWGcB/61+Kt0aKcWyqAn+frcLfRbbtrExq32P7 + rijXPF0ptccmKvHWWAVeHynHayNlEv42XIE/D5bitz3L8d89S/GH/iK8OiHDa1MKvMkY7m3GcGIO4FdH + S/DngaX4bcepEv7Yc5okBr81UVEQfEUGsJQF/H9RAJ6T4ZWJEvyy91T8tLMgAP+k9xS8ulaOt7Zp8c5e + I945YMab+414e48O7+004O87bHh/mx2vM17971UmfGfShEdaVbi8ugyHw8U4g/1wF/352fSHt2/rw/OX + 71wQgEvgMRQE4KakC921QXTlgnSwDuRCFqS8BsSdJBJWBXymcri1xbArlsJadSr8uhVojhmxfqgOh7eO + 4+iuKZyxvh8rexLSnKNZLwmXV/4/CsApEvcUCU+KxEcIwPm0mMvJip5WN/o6ffMCsG1eAHbNC8BeSQQe + 7nGeJAAbkc9qkE8q0cIB00ZC1N3swnCXH6O9QYz2+THW48BotwHT3WqsHlBhQ38ltvauwIHhIlw8V4Wb + tmjw0EELnjjdiM+cocRnD1TgxX0l+Pr+UnzvTBl+cp4Gv77Ygt9cZsdvLiUuc+CXF7nww3Os+PpBA764 + Q4/PbDThvhkTbhBln7tkuLBbgaM81qXjely+0ogr1hpxyRotzl8lwzmrKnD++gpcvlmG67cpcO8eNY+p + xZcP6fDtswz4/lk6HleO/zyXxvdyHX57owmvPejEu5/34R8vBfDR12PAv2fwj3/P4fg3c3jrK3n8/jN1 + +O7NGdy7246DNOKz8SWYiFdimEFUi1uHjFWHtJ33nsFWXswbGdOikSSxOSHmeNRJJT7r+YyS7ioETcVw + qvmsaZhtmnKYdeUwEgsCsIGwzP8B5zKRwJqr5v9EFSWfC5m/kgAslYEugddGo+krlH+Wsn+5vCAALwi6 + CwKwx1HO34jfkXSfEIBJ3D3ie5LZBQHY868EYJFVxn5H4pqloc0w+BFtDQPBHFHHQCgvhOB5AThHMv2x + AKz8hAAs5v3VEgtZvkLsdZgNcFpNhBEOyzzMZrZmKYNMgp2wmeEmyRLweCwMkC2IhG0IB82Ic1wlwgwE + RUlNjw5+F48tCcAk0W6OFb8GdWEdjbgW7STPPRkDRmotmOXYWNvpxbahCHaNRrFzNIQdJxDEtmEftgx4 + sIF9fUOPHfsmq3FoNo1dI2HMtZgxyYB0rlGPjW0mbGWwu1fU/J904OK1Xly1gSRtjQ3Xr7Hitg0O3LWB + hmKdGzfR6F87YcbVYyZcQ9wwZceNEmyEA1cPc/2wBbfPenHvaj/umHbTwJtx84QRj24L4/Hd1XhkdwL3 + 70rhxvUxXDLtx+l9FmzI09m5TkGjbRFafKegN1OGyU4DpnrNGCG56qejayeBawyehmbvIoymTsU5NLq3 + 7tHi2Qu1+PYtFvzgbhthxg/uMuAHt+sl/MedZvzwDiv+4zYHvne9E9+4woEvX2jD8xynzx6y4pkDdjy1 + 14nHd4Vw/8Y0bppK4rqRKK7s8dBIVuJMBntH2H+uYuD7YLcDz/Z78eJQCC+PVuOFkQge5/29qduMi5uV + OJ9B4/l5Oc5jUH5upxHn9hADQki10uHZcf4QSXC/DUfHnLh7Tx5PX9iNL149iG/cNonv3T2Jf7uuFS9e + lsQXL/Lgi5cY8b3bLPj902689VWO7++F8NH3PcCP3PPiL/EzJ+EAfiEygkVpaBPwfT3tgAEffpt42SjN + Afz+c3oce0qJtx+jU3ukAm89TIf1iB5vPO7E209H8epnYvjtfWH85MYwXjrswd3rrDjab8TZvAf7eiLY + JubN6fBgrs2KEY6T1kAx8val6ImqMJFzYa4hjDVNcWxoiWNTe5R9KYBNrVZsa9NjT7cKZwypcO6ElnaV + 94n2UAjAl85ZJVy00owL6JwOsy+JjGEhAK/MMOAiYRkMyOfLP5NYOUT2rwx5jvEGrssT9X4l8kR9QIX6 + oAZpkrG4tRI+UdpVXUTCVpiTvCAAl0M9/ybi/7cCsCjjaxcvcAjxN+RANOJGQ30Ka9ZM4oorzsfjj9yB + 226+HDu2zaK5MU57ZkbENy/+niQARziuvcJ3GmgHTbRzTvGiB+2sj4G93yRBCL9x2oKEj8Ez7UQ9A+VP + CsC2EwJwjrYhRdspqjjk5wXg+hPZvjo0BLguZJDE39ZoYa7kJvqARtrdvJf3z0dfy98XhN9KqU3Snmbc + oiy0Ejmfhj5CvFHIgDdpR1ua58LgvU6I7txvDY+T5XKKx0xECoiHdIjz2OEAbTQR5LkF/STLHiEAVyDo + pf0PVCAW+p8F4HS1XJrzN3KSABwNkYATYl7gVJQ2nNs11AgB2IZB9tGZgShmBqMY4nIP+2BvmwV97TZp + Hso+coRe8oXBgRAGBuJob4+guSnCY7kYuCukkswmPmcTA2aTSQe7zQ6X04u4yABu60FrRw8SmRwDCw/0 + tOc6Qm8lbBYGJAyi3S7YPW44fC4GGy64fe4CAqK8Fr9zW6Q3qC0WNSxmJQNvLSzkUkYhApNzqbWlUGmK + pfLPIivYxaDFR58g3mJ1ibl6A/QrfqNUnlmUbHaGRCauCQYGQhqLAgojg6sFAdhQSQhRWAaFiYEXcbIA + rKVfC6W8yDRWI9NQjXDaK701a2G/s7LPCQHYE7EimvYhRv6XqAtLbSDhlr7X8JzlRjGnqUI6l2DSg9qW + DPrGutA52MrPPiitKshEdrJJjioGg5U6GcrUFSjTVKKCyzK9CgqzBiqTvgCLDipyErWZ18PnYLXrUJMK + Y7CrHqvGurF7/RT2b5rBvk3T2LlxAtPjbRxnUVQn7AiyD4bYr8MC8yJwlGMjGjcgFtex1SEY1sLrVcBO + W2IhhzAZhPhbDLOxBCbCaiqTYDcLziJQQhSTy6yA17gCYdMKVJOHpJ3lqGNfbiVHaohyjPiEALyCAWAZ + x0IFIcRfcgpy2dqInOO6hBxqCZrCyzHAAH4Ng6t9A0ZcvMqLazeFcauoirEziXt2ZXDPnlrcc6AN957R + i7vOGMS1e3twxkyO/trLwNKC3pQLfTUBDNZF0ZONcFxaEWJQ7FWXIelQo52cfao1hg3DOWwZq8X2qTx2 + zTSwrceu2WbsW92JsxnUHtm9Ekf3rML5u+ZwztYpHNo0gYMbx7F3/Sh2rh7A9tk+bJnpw9aV/VK7YbIb + G8Y7sX6knUFqMzb0NmFjZwM2ttZhU2MGWyUBuJAFvKsmjJ08x21ZDzbTTmxOmrEr78HBtijO6EjgrLYk + kcbB+gi2xx1YaZdjTFeMGbMMqzke1rOfrw5YMGIn39HJkZOVI1JZDIeiDGY1uafApwRgm8DJAjD9gI39 + 3GGTcQwLkVdzQgAOBdlK0MBPu+cVL/o5q2AzF8FuKYab3NIrOK/IAA6Roy4IwAnNvABMTvYpATj5KQE4 + zP4mBGCLoxQ6C8ezZcVJAnCZJABbyFHtYZ7fvADsJs8IZ+jHRKZMswOd3UGMTWQxO53H+FgWw0NJ9PbH + 0NkRkl5eaWn1oa5BlGi0oKbOimzWhGqR0RMmb+UxLPYimO0rpHOwss/a3RVw8LguL++Lm/eHn61iO8Iu + soBDIrNHiVhGh2S9qfAHc4MZMSEI8LwCKeUJ+BKM/2ifvUn6sgw/12gQlEQPHWIN9AGN9GP1BqTIqdM5 + 3ruMivdGzbGqQkz8Wc37leQ9TKXou8SfwmwT/FyXt9I2V2PnjiFcdvF2nHv2GqycqUddrRkeMXc87X4m + q0WDmOe9nX6ozY56HquWx8nk9EhndXwOasRiGvpnLX0Pxzx9rsvNe8LnbONz1jP+0BhWQKNfDi2h1y+B + TX8qItpFaLacgsngEuxJF+PaDiUeHzbg66uc+MEmL765mdxvvRWfnzPhuVVmPE+e9PSMDk9MqfH5tWZ8 + ebMbL2/14Otb3fj6Wgu+OlyJbw+W4ycTGvyJQfjbm2w4xpjwjdVavL5SiTdmNXhrpa7wx8FKNd5kPHhs + kxXv73Dhgz0+SHP/LgjAe/0M6r383oE31zD2W6nH6zyPt9fa8N4mN97f4peEXwmbfHh7oxB5g5IALJYF + hAD87qYQ3uU2x/n5XX7/3gkBOA5sjeIDcvT3twdxbFcQ7x5K4cMjHfjoohF8ePEs3jt/NX7D5/Kt1W34 + 0poufHbTAJ7YOYmHDqzBHWduxrXn7sblogT04YM4c/8ebF6/Ab2dfUin6hCL5gpz/f6/AvDHx/nU8f/P + BOB/ngP4k2Ju4p8E4IW5gMX8vb75eYI/iX++ZwUIATgzLwCLNks/moVPwoIInILfy+vzct+SAByVBOBU + MoOGfD062lrQ2d7Eth4N9BfpZACZpB+N+Rh6u0RVgyYM9tUjm3QjSj4RC5nZGiTEyH3i5K3xuJlj20L7 + Sl5CnxJJGBGkjw9EtfBHNORJatowFbkSx3pQTv5Cu8QYxScyLCMyeKLl8MWrEKW9iudo5+poj/JqxPNK + 2iva9GbaEFEOeB7ZNtp3xs2ZdhP8NbTl8xm/tlgRl4XgK8TfYglCADaHimGPlcGTkiHAOElk1oosWgF/ + lufBuCZYS/vXRDtFXprtsiPVwevkcYM8B3eGtlmItpkKONOlcCSL4MyUwF9HDtykQIJxZbKVfob8Ic54 + ONYgR7Rehlg9455GcuYWDaFFupV2tUmDUI68IFkGR7QYxsBSaHxLoA+sgJmc2k5f46im30upCNpHwp2h + raT99NC++mr0/Mz1aSVs1ZWwVtN38LrcaYUkHrszXCb8vI+Rei3Pif6ik/eq04Y0+bZATQfRakaiQct7 + ze1yPN9anncdz7mWnL9RxnvL2KNbh5ZeE7o69ehpVqMzV4XeWCkmPMuwyVGEc6zluIx88wrGTdeTt95v + VuEzBg2+qDfiK3orXrY48XWT8xMZwF9zuPCi2y1lAD/hZrztseEqH2NxctzdjE1m2D+avMWo9i9n/1jB + ayuGs4b3hTG8NVsOC3majffOLrKoY+W8h6X01fShIa4jHGLu/nAl3PTfUrZuQgl/inyC99Angcu8jwH6 + Umm9EIlj9JncfkEADsYYFxFincvPfZJHOkQb5L0mjxRlnyUBmH23IADT9ybo23KMExstSNE3V9cyxuIz + CSZkqM6qUVNvRL7FjsZ2F/KtDuS4jRB0hbArso0lsbdaBb84NnlNMEbwGEKYDnP/CwJwzbwAXN/ilATg + eI1aEntDHDsh+vKTEWY/CfPYIfalBQTIC4LkEgtzESfYn4QQHRX8Iq4hh+IYiJkIM2riNmSj7CshE3IB + xrPi5WRy9eZqA9pTRnSkTehImdla0c7YszXtQjM5f0OM8W+Evp9xp0Cez1XEvHkxZZqf94Ko57qOtB19 + eTcGmzwYbHYSdvQ26tGSLkND9TLUVy9huxQtmSK0sw+011SiPVuJDrY9dXL05+WYaNNjZbcFq3qtmOt1 + YmWPB+O8x1315H+idLd42c5GDmlj3GJVfywAM675PxWA9eI74tMCcJWiQkKFohyVKsaLjJF0jJdMDiPM + DhP0IpYS5aLnS0VrxTzBYn5g6RjzIrDIBLYbT8BsM0itia3JpmMsKoRixqUOA22+A8GIRxJ/BQJBFzwc + RzY7r0W8wKti/MfjOPj7aMiBJsYk3U0xjLRFMNMZwup2N9bSLuzoMuP0YTvOmbTgvGkLjq5x4PKNTtyw + y43b9vtw3+EIHjwcxj2n8/MOI25YL8d1M2W4ZbYK963R495ZNW4dLMXt/aV4YJScbFJwLiMeGdPjgSEt + 7upV4raOQhnofxKAW0pxVBKAV+Cs5HIcSizHvuQK7MuU4mC+CnvnBeCtuSJsy5Vge7YEm9knNoVOlQTg + bb5F2BNahNNjp+JwagmO5lbgioYSXNNQhuvY3tpUgXtb5XiwTYV7WmSSAHxDbhluyC7lchHu5HZ3NJZI + kATgbhkeH1DiyX4FnugswxNtJXiyrRRP87yFAPxcZ0EAFnP6vkS80CHHc82VeLa2FE+kVuBJIf4Sj2eW + 4zHu/9GWIu6nHJ/tleHz3RX4PPf3QmsRXm5bge91FeOnA2X43Ugl/jomkwRgUQL60wLw34Yq8fqIHG+N + yXFsUon3J1X4+7gSx4So1lmC40IAJv7WV4I/DZbgd8MV+OmIEp9rrcQl9IkrjYtQKz8FQa2InZWwiDmw + Rcaurgqa+ap7nxaAK+RFKK8qQlnlihMolRdQruB3hCQIq4pPZAbLuH8597UgBC9kBGvnIf6TEBD/SQgY + GFca6TNMLp6TW8XYRwOHVwOLUy61za1pbNk2i0uvOBP33nc1Hnrwajz4wJV45IGr8ch9V+CGS/dh42wr + 7ZMOVs0pjDFPQ4CxVFJU0BMV76otqPbQbjoqkPSK6Z6UaKFd70trMEJ7OFGjwFSGtiNVgZFEOQbpQ3tj + QgAuZP4uCMDd9K9CAJ5pNzJud2HDiBczXVb0ZpXoph/pyRrQV8vPtSb0MqYaaCSa9RilTRpr12KqU8vt + 9bRLBqwdsGBllxHDjVq0xk8SgKNytMRk81nAQgAWwq/sE+iYF4C76f/Gm+RY26XBph41trAfbmPf2t1d + jkMDchyZMOCyORsuW2nHJRzTR0f0OL9PhfO6FbigR4nzOR7PYT/f216Crc3LsbZhKVY3LMMGjsXt3XIc + 6NfinEENLhhU4fJhNW4aU+FuxlCPzujx2KQWD7Kv3sN+e1fHcjzK/veFjkp8vVOO73eq8ONOJX7WIcPP + OJZ+3rgcP69fjD+0FeH1PvbVwZMF4HJJABYloAsC8BK80rsErw8sx5tjpTg+WYnjU0LwrcJ7kvC7gEpp + nmDx/duTMrw1XoXXhRA8XolXRyrwx8Fi/KZnKf67dxn+wLHwKrd5bVqBd1bp8O4aEcvJ8cpIEX7XdSp+ + 0bQIv2hehN+0L8KfeGwhAEvz/Z4k/J4QgMXxThKAscnAuEyP4+vVeGtOjr9NleFPYyvw26HF+LkQgvtO + wZ/myvHaFsaNu3RS6ec39xvwzl4d3t8lBGDGkdvseJMx5x/W2/Bfa1x4dsiOmxp1uIy89GiDEafnDbig + P4J79o7ghav3YpFTWwKHpgQ+AwmnTbwd4EVffQTdNUE0xgsCcLVLx+9IREwkPvpSuNVFcAgBuPIU2KtO + RdYlw3hrRCodd3B1D7aONWCwzo1an1zKAM4GlMgxMM+QsC8IwDnxJzbbVFglZf8mSXxEJnBDlo6/yYm+ + dh/6Or3oJbHpZuDfz8BfCMAi63dsXgAWYnBfp3NeADajUZQfITERJTra8jb0tHox3B3g9kGMD/jZ2jHa + qcEsO+TGYQV20jgeGC3ChavKcOtOLR4/244vXRrAy5f78LUrbPjmJXp8/0IFfnSBAr+6RI0/XKXHX643 + 4dWbrPjbTTa8dosDr1zvwW8ud+HHR2z4zhl2fPWAF09vcuGuCT2u6lHgYjqpi3oVuHRUjytmTBxEZhyZ + 0eAgO9ee0RLsnSjGWdPlOLqSDmydHPdvUuAp4gvblPjydjle3F6Ml/eV4LuHxbzASvzxbgvefMqN419w + 4+8vh/HRtxmwfyeH976ew9tfzuOPT+Xxw9tzeOJ0L87j4FidXIIJBiijUT06fCbU0XFn6ehrfQZp7sxG + Po+mag1aEiRHRJsQgGMMKLw0cpbS/1EAFmUsDYTNIofTyn5hUcBjVcBlJokl/qUAbC8IwAsloD8tAIvy + ztEAiaVPKZV7Fr/5hADMdZ8UgKuk3/6zAEzjTAObYuAn3vZM8frTJPRCCBYQQrAQgUUZ6BwDtUyaQVZ1 + oXScyA4RJQRtwqGJrC0SMb2GzsSg5To9r9UElxB27RYpu9duMRJCELbys5XrbQU4bXA5uM7B7QjxxlzA + zyA2YudxLEiyTccc7Pc2hNwMBl0k5Q4xVygDOzqvLO9RPqKnQdejM6FDT0qHITqF6bwJG7rc2DMWxemz + SZw+F8ehlTEcmiXY7p8OYc+4H9uGXNg26OI2CZyzJosDU3Fs7LJhdZMWm9oM2NFtxh4GYKePmHHeDMnZ + ei+u3ejG5SsNuGpWj+tXmXDLaituWWPHDTMWXEXidaWY/H3MgBumbbhpxo6bZx24ecaFa0ctuH7Mirvm + vLh/tQ93Ttlw65gRt5GwPbkriqf2VePJ/Uk8vCeNW9ZFcNmkF2eRVG/NKzDgPhWdzlPQF1mC8bwM6wZt + WDfqxHS/GSMdGnTlyulgl6HBuwg90VOxo1+G8+eqcP32cjx2rhKfv1SP5y/T4gscn1+4SIkvHCUu1rDV + 4fnz9Xj2TD2e2KfDg9s0uGujBrevN+DODTbcvcmNuzfHeI1ZXD2ewZXDCVzU5cPeqAx7AhU4g87zQvaL + O7s8eKI/iOcGY3hxJInnhuN4tNeHGxn0XtiowpkMuM9gIH9mix5ndppxJu/rmX1WwiK1h0UJ6EEnrlwZ + xhOHe/D8FSP40vVj+Npt0/jG7eN46kgWD5/uw4P7jXjoIMf7FTr87CE3Xn0hjPe/EcUH3/UDP/IBP2P7 + cw/wCzfwSwfwKzuXrcBPLcB/GaR5gT/8jhH/+BrxZSEA63DsaaUk/r7+UCneeLASbz6oxhsPWfHWoz68 + 8rAXv7nDjf+6yoOXznbg7jVGHOlW42C7FTs7vNjQ5sEqBpPTrVb0iWx593Ikjaei0cNAPW7BCP3EZG0Y + s/VRrGmOYEN7EOtb7djcRvJPG3ugX4WzRzW4kH3gKHHRtEl6i0zgohkjzh3VQZSK3tujw6YmNVbVqDDB + QLGf47iHdqCDY3tBAK5zV6GWx825K5FjWyOWPTKplHE1bUPESNugLYaNtuqTAnDZ/20BWGT/OkX2ftCO + CAOjZCKA9rY8duxYj9tuuRrPffYRPHjvjTjj0Bb09eQRD3M7/6cFYC0iHNs+s6ieUQ5RqjpkVyDipM1x + MUB2aeYhlrVIeBmM0y7kq8W8v0IEJnJ2tGQtaEyaJbsgBODMSQJwAwNrIfyKEs452o46HwPhgA5NIQNa + Yxa0x81sjWhmcNxAG9sghGC2QvhNOMol8bfQioxg+mwvbaNfg86MiyTUx6DYh84aN+oiRgbremR4HFGm + PsX9VzMAj3K/Ua4L8zdBMe8qz8HvU8BPP+JzldNeV0hZwNVhGUSJflHqWWT7SuWfpTmAaYdTGmQSCkkY + jgREyehiCAE4IgRgUQp6XgCuOUkAHuhwS+KvwAj5guAJ/e2FiiFDPW709/nQ2x9CH0lPT28cbR3VaG6u + luZwtjtI8m36+TegzRDz+DpcHrg9AVQna9De1Y/u/iHk6pvgi0Rg9bpOlH4WcwGbnHa4ggF4IkH4YgH4 + 2QaiBQTjAQS5LsA+4/U7pPLhAr6QVYLbb4advMrqUPMcFFIZMTv9TpjPPJ72Ipx0I5RwIhBzwRflcSL0 + JRH6EvYve8ACUQpaJ+YCnheABQplnwsicEH8lX9CABaBkr/aJZWAjufCkoAr9itKP9uDJknUFZ/DKY9U + 4lnM/Suyf8XcOqJUtNJciSpdqbQvkTEs1os5gKfXjmNy9QhS9XGorWrIOI7khBB/y7VVKFFVoFQtBGAh + Ciu5HyEAFzKARTawBKOGgaISBrMa8ZgPXa05TA93YPvaCezeMIVdGyaxdd0YRgeb0EibU8375Ge/Cwhw + PBTmAzYhJsTfagPi1XpJBA4GRSageEtfvKxWTP6yXIJJXyTBbCiiby+CXapUMj9VhZlcxVIMP5ejbFPk + HhlnOfJ+Bk1J8qWYGB9FSDuXIusrQW2kkmNQjsYY+2W1ivxJcN4SbrMEbbEVGM2VYiMDmTPHLbhmcwi3 + 7Izh9h0R3LE1jFs2BnAb/dCdu/O452AHHjg8gjvPGsbR9c3Y0OlHb5K8LWpAe8xKHuBCR9KLHHlciPfX + rS5BtRCAaYtnu7PYNtOG3as6sX99Dw5t7MO+tT1EHw5uGMJ5O2dx4f4NOHpgIy7YtxGHd67BGdtW4uDm + aezdOIkda0ewdW4Qm1YOYfOqIbaDWDfdh3UT3Vg72kW/3IoNIiu7qwkb2+qxqbkG2xprsDOfkQTgnTVh + 7MgGsDXtwaaEDZuSFuzO+3BWZwLndqdxXkcWRzpyOCsfw+64G2vY56cYe6wmb1xP/rMlaMEm9u0Jjslu + 8q56WRliFSvgVPAZaeZF4H8hAAvx18H+KMo/FwTgAhZKQUvzsovMMtosIQKHaLM+zgJW8Ld87oQoEyzN + BeyX05apkIhpaJ9E5sqnBWBy55xJEoBFxuknBWAtPOSgFoeY+3c51Ob/lQCsLIjAYh7glApJBvq1jTa0 + dwYxMpbF5GStVPK5ry+ODq5rafGhscmDunoHUoyR4uSE1TxudUKLUFgBn7eSdqQIBh7XaF1GsH/bimnX + ymCj/RUisGjFZ4ujBGZJACZPD1XCFxcvhmg53nkddaKUJe9XjRb+lBq+pBLehBweIR7QLjvCFYWsqBiX + EzJ4a5SS2CGy3WJ5/r6WbQ3HMOOwKH8r5iIMxbh/CbRvvI8xxhtxnrdow1Fy3RrGd/0J7Nw5gksu3o4z + z1yFKV5/NmuEy8NxSNuf4D3KiRLSzXbUN9lQI8pSZzS8B/SbIsOJ98Af5LmI7F+/Fk7GCA63ktdNH85W + b6+Exkw+YCyBluNdq13K/nQqAspFqDcswpjnFOxOrsD1HSo8NWrCtxg8/wf58DfXOfCiEH5nDXhu1ojP + M357fFyJ+wbL8fCYHM+sNuFzay14bq0Jz02r8XjLEny+ZTG+2VeBX0xp8dYWJ97dasNba/V4fWWh/PPb + kgCswdti7t91Jry7xYEPdnk/kf0rCcB7/Pj7dg/e2cignsd5fc4gCcBvrrbg+Abud4MXxzb6PglR7lmU + gaadOb5FZP4Guf95AXiTEIODeJ8254Mt5JZbY8C2KD7aHsYHO0N4f3cI/zg9DZzXAhztBy6cwIfnTuPP + O/vxH6tb8fJcG55d2YbHNgzgoV0zuOPgelx3eCcuv+AALjy8H2ft34PtGzehv3MAmaQQgLMcd5kTYu// + KwD/3xWA45/Yl8Cnxdx/FoDnceIYiX/6zb/GyQJwlm0NbcwCFgTgDPmdEIETXD5JAE5kkK+tQ2tzkzQP + cGdHI9raalGXi9B+0pY1xNHXVYOxoSaMDDQhT66RJMdJxexsrUjS1yXjVtpbB9IZJzI1TqRy5C1Zxs4Z + IQRbyK+M8Ed1cIXUcNLH22i3rV7aKNoAd1iAtjUkPpeTM1UhkFBKYlawRoFwToB2vk6UM9YgIebubaKt + bxLz9xpQ08XjtxoRyClhjQrhd4VURllk+wpYwgsoiMC2SClcCdrRjEISgf1ZJZdpN9MySRiWsoPzYq5d + I/drQZzHCDdoEKhVwZmkbRaCY6oc9iT3H18OWzU5SLYU/roqRBsUiDUqEBVzBDdU0c5WIlxbhUidDBHG + y7EGXoPIsG3l+bcwzqilL0gVMliNgeVQeZZA7VkOfYA+lDzFRO5tpu+xxnnP4sqCEJzW8vhsM4x16Acc + KX5Pe2+hb7LR9tuTMglCDHalGMOI65Qym+l/WsyIN5N3zUNUgkg1kYPVqaX5gwO8B8E0zztbgWi6jH6u + EtkmJerbNGjt0JHnadFdr2ScUYGucBEGnadhpXUJdpN3nWUpx3mM7y6hX7+ZXPYBI22zgXbYYMaXrHZ8 + xeLEty0OCWIO4K86XPiiy4mnycsftllwh92Iq1xGnO81YK9PgzmfDC2OpUg5FzO2WMI+shQO3mtbshSW + avKM2HJYYuSCfNaOKP1juBQ2xh52gSA/0w85g5XwEG5Rvpn30kf/5mPs4hFiuvCVks9U02eSX9Cv+j4l + AC9ArHPymdi8JQSP4y+FlTGPk31WiMAuwRHIKYUYLOYGFvMNi7LP8TryWpGZy/4mstuT9L21TfSLbXY0 + MxZqaHOijv5RlIQW4mtBAFZKL3lJ5aujIvNXCMH0l9x/iH1AlItOcv/pWrNURrq2iWOxjhy6RoMIfblA + MMvf0acHeWypTRfaQLJw/X5xzdUie5nPnPsMCd9OviQdl8cRGfvhKH0+uXqUqA6bkQgapemOkl6R8KBC + bagwBV1LyoC2NJEyojVtRkvazrjXQV5tQW3YhCx5nEiQEMiSy2UZb6Y9HAeMYeOOKn5WoSVhRXctY9d6 + J3oYJ/Y0WNBJjlIbLWbsvBS5yBLG1yvQUVOB7rwCnRw3HbQJosxqF9veWjlGm3Xk1Vas7ndizYAXqwcC + mO5mLNxoRYbPXgjAYmoZSQC2aP4PBOB58fdkAdjA74jCsmZeAK6SxN9KeTnK5WWSCKzmGBCln01CwLWb + pH0WxF+lNPevkfs0WQwf738eQgSWILKH51sDWyESa0V5ZyN/b6I98ljJo1yS+BtiHBYKM3712aUsYFEG + WiYvhYqxnM0qXvS2obE2gt6Waox1xLCyO4LVHR6saTZic5sOe3uNODhkwBljOhyeNuFC8qirtzlx/W4X + bjvkwz1n+nDnIQdu2WXEDZsUuG51OW5ZLce96/W4d5UGt49U4M6hCjwwqsKjEzo8Nmkk5zLggWEd7ulX + 445uOW5pL5cE4OvbFwTgclzZWoajDUU4N7cCZ6SW40BiOfYkiUwx9ucrsDdfLgnA23LF2FEnlsuxPV2M + rewTm3ynYEfgFOwV5Z+rl+BIdgUuzpfgyuYyXNfMYzSUSgLwnc1Vkvh7R0slbqkvww21yyXcWi+E3zLc + 2lgs4a6WEjzQVYXHhPgr0FWBJ9rL8BTP85mOCnyuoxLPdcrwhU45XhDiLyFKQn+Ox3q6thiPpZbhMZ77 + o6kVeDSzDA/ll+PBJqK1IAI/JYRkfn6+eTm+0rIM/96xAj/uE4JtQQAWJaBFmedC+edS/KWvFH/tLcWr + vK9vjsjxNjns8SkV/jGlwQfjKhzrKcfxTwjARfjjQBF+PViK/xqS49nWSlwUWYZp4ymokZ+KoJ4xBGN+ + G2GxsB+J/9R0H/+39kkBeF70rViOEkJqqxawTEKZjNsoVqBSVYIqdek8yiAjxLKYT1ihrfgYhjIoRDW1 + +f85NIwHtYz/DA45TE4l7G4hAIuX7pUSkmkvhkfbsGPXKhy5YDcuvngPLjlKDnvRTlxx4XacsXMMMwMp + 1MVozw2nwmtejLi7XJoqs63GjnZykLqwsD1y1IUUaKRta43J0JdSYIh+cSwjw0SmiqjACH36YLJiPgP4 + ZAG4GN203WIO4LluMzaNeiQBeFoIwOQPXWkNuhhf9jLO7M4Z0MO4qr9Rj6EWIyY7zZjqNGKmU49ZYnWP + AesHrdJ+Rhu1aDtJABbzADcxTmutpl0TArDI+KUPPxkdPFchAHemSzFUX4mVrXKs7ZBjHfvm+o5SbGEf + 2N1bgTNG1LhwVlRudODiWWLcjAuHtTivtyD+iqlOz+isxHb2xfX1i7Gy9jTM5hdj3UkC8FkDahzhGLhs + UIEbRpW4e3JBAFbjkXEFHhmW4fH+SnxhUIVvDmjxH31a/Khbg593KvELjpFftJXjl01F+FXjcvyJ5yUE + 4LdPEoAXsoDfZv9/rbdIEoD/2r2YfXg5Xh8qxlvj3F5k5AoheLJKwrvTIguYkIRhkZXLMTEpwxtift/x + SvxlqEwSf3/ecSrPYfFJArAS764x4B8bjDg2p8Rfh4vw32Ku3vwi/LR+EX7ZvAi/7zpVmv/3nwRgUW5a + rOMxj83yuKsU+Mc6tSQAf7hJj/fWq/E27eAbs5V4cyXH7mwZ/jCxAr8j/ryqAn/brMLrOzR4fZdGEoCP + Ee/vMeEf8wLw21ud+MsWF36xOYCvrgrjoUEPbul04NpuD452uXHVVAYPnz6JL9+wH4tc2hK4NCUIGCro + POXsJB701YXQzoFSFzKh2lXI/PWbKuDVk0xriuBSij9mRAawEIAXIWYqZsczY6I5jDW9WYw3hTgohMio + RJ5OvS6iRV2UxDoqRF9CzGEYEdAgFVYTSiRCckKJxowZnY0u9Hf40dfmQVcTHXeDGb2tNkkAFqWfx/oK + AvAgL0qUh+5qtqCd27SQtDTldJIA3Jq3kVx6MNAd4LYBjNOBj3ZbMNrGQUfDuZUB/IHxEpw7sww3bq/E + U0ds+Np1IXz/1hj+87YwfnS7Dz+52Y5fXW/Ab67V4vfXa/CXm1V49Q4V3rpbj3fuM+C9B614914PXr/V + gz9c5cbPLvLhP45E8eLeAB6eNeJGIfy2luOSLjkuG9LhqhkrLltpw+FJLXYOVGJTdxE2dC3D9t5iHKSB + vWC0Atewk97KznTfWBEHRxEemzsNz2xajC/uXYZvHinFL2/T4a+PWfH652w4/pIfH34jgY++VYP3/q0G + b7+Yx1+eacRP787j8+f6cdmEAhsySzBBYj0a1aAnaEGj04wahwE5t16aO7ORxqw5TjIuxF+BZCEDWAjA + EWsZnJpPCcDsAwb2FSONrYlw2En6bEKwJdi6aXw/LQA7TaXwWEoLArBXKQm/QgT+tAAcYX+pFkICiZ3H + ViEJwGL+3wUB2GMTcwAruD3JqEvOZRLYBQHYXxCA48EKKYMsRUMokIyWkmwWI8GALR1jABIvRZrkOZeW + I0eDmCGSDHISJOuxsArBoMgC1sBpU8NqUkilO00kZkLkddnN8DiFuCtEXask/lqMOkIPu9VcEIAd9gIY + hDid3EaICg4LvG6R+WtHddQhlbyqqXahNuFm37ch4iaZ4jiL0VnF6KQSLgXHno6G2YL+Ggf6s2b0p+kA + 6BSmG0iuelw4MBnGWasSOGdtvIA1UZxNnDEXwsFpP3aPewgvzlqdwHkbanDWXDV2DTmxvcdEg27G/n4z + Th804pxRE47O2nDVeg+uW+/CZTM6XEqDfNW0DtfNGHD9SguumTLismE1Lh1U4wqSOUkAnnXittVe3DLH + 341ZccO4FXdz+YHVHtw5acJt3O7uWTOe2RvDZw8l8MyhNJ7cn8Xt68K4ctyNwyTWu+s1mAwsw2hwGVaS + iG/qMmLvTBA7ZvxYPWTDeKcOnTWVaIosR957CjoiS7GyqRxbukuwb3QZLlxdhJt3yXH3XiXu26fEA/vk + uG+vDPftkeOeXUrcs02F2zdocOMqFa6eUOLiISUuGTPiyhkPblpfjTu3NeKmdS24drYFV4zX4ryOEHYl + dNhGO7SHY+LsnBk39ERw/1AKTw1n8NxYDZ4dTuKhnhBubHPhwkYDDuY12EvnfLDNgoOdNuynE9/XacKe + TgP2dOhxVp8VF00GcfvOBjx32SS+cuMqfPnmlfjyLTN4/poh3Lk3jhs2O3HdBt7XTZV4/GwNvn2zB795 + MoE3X0zhvW+G8eEPg8DPwsAvfMCvPcB/O/DRbyxsiV+agJ/q8dF/6vHh94z4x7foCL5qwvtf1OH4Z1V4 + 57FKvPFQKV5/sBxvPKDAmw8Y8db9Drx2jw2/v8mGH15iwxfFfOQzGpzbLsd+koytvLZ1rS6sZDA50WpH + Tw0DJwaoCctyZO0VaGDQ1hZhUJUgmUr7MVUXxFyTn79xY1ObDVs7eO09avYvNQ6P6HDhhAEXTRlw6YxF + wlES+cMjWhwiKdjTpcOWZg1WMzibZBDZ561ED22BEIBbpBLQctTyc8ZRjoy9DGnakDSXRZukjYjSPoRJ + An162pn5EtAmXckJAVhDm6WSMC8AC3IqEVSSU1GuxiCXcEIAZpBzMswMtoQAHAw6EY/7kauJY3CgC4cO + 7MBdt1+PZz5zPx6672ZcfMEhrFk5hLpMUCoDHTshABsQ9egRcTIYttGPmmUSQrSVYTttn4PBOG1oUGT/ + 87MQhau5vSgHXRtjgJWyokkgbUETbXNDtRH19J21IS2yfqUkAIsS0A0xI+qC9LN+LXK0q7VeFfJcbuQ6 + kf0rBOAOIQLTDzfTHzeINxoDhQzgat7XhKPiRJvxkNyK+Za5/WB9EJMdSUx0JDBI/y7exM4xCE/SdySF + CBwySgJwhMshnwZ+BuJ+BvQCPq8CXpcMXmcFfGKeTU8FkjEVMgkVsikVatJC9FUjm9GgJiNKheqR5bpE + TMzDWY4Q+1w4UMrlMt5TUQa6HKloJWoSSjTU0FflzeQILkwOhDHVH8ZIhxcD7U70tzowwEB0tD+I4aEo + hkaS6O6Lo7k1QiTQ2JxCJhtFOOZHKOJHICoQRCAcgi8Ygj8UQyZXj+6BYQyMTaK1qxeJmhp4ImE4/H44 + An44Q364CH91DIFEDOF0HJFUNWLpAqpriGwc1ZkIoskQogkf4ee6INK1UaTrYkhkuL7ag0jMgYiYmzfl + Ra4+hhoikQshng1wnz4Eqt1wR21whcWcN1YpA1gIwBqrUhKAq9i/K9QlKFUWoYKBU6UIkri+IAAXsoCF + eCsEYDfHbSDlkeCNOyDm8xX7dUYs/M4KV9SK4IIATB4Yzvq5nRO2oBFa+iY192Ggr7Kyb/t5Xu1Drdh+ + cCv2nb0LnSNtsPL89C4jdA491Bw7SrMaMoMKcpNaEnpV9KMaMfcvfamAmAdYadbzfDVQ6Ll/+luPz4rG + +gTGBtqwcW4Em1ePYfOaMayfG8JgbwO/4/2h//QFjPCwj3s5FiLVJsQSHHfVhezfaiIeUSPolZGbiEzR + Ilg0S2FUnSbBpFoswaBeDCNh1S6DXb8CLuMKeLltyMq+ZykrZP9yOesoQ85VynEjhOBiZN2LkXGexrFW + xPFYgUb22Rb267aUBi1JBZqrK9ESK0Z/pgyrWhXkmhZcvimAuw9lcc+BBO7aGcItG924bpUNN6714Y7t + Ga5vwUPnDuH+c0Zw5fZ27BiIYLSGQaDIighz3IY59oNmZMjdImYF3JoyxPksuvic1o+34uCmUZyxZRxn + bZ/A4Z3TOHPbBD9P4uxtK3HB3nU4emgbsR0XHNiKw3s348yd63Bw2yrs2zKLnRsmsWX1CDauHsUmYj2X + 184OYu1UH9aO92L9cAc2iOfR24LNnU3Y2p7HzpY8djXWYHc+gR25MLaxv25KubAxYcPmtA176wMMDDO4 + oC+Hoz21uLS7Duc3JnGQY2GTQ4M5csmN5Fmb3QZsFQJwyIpJhw59tMfNStqiqhVwi7LotOVW8k+BjwXg + ctjEnw8WGVzsky6bvCACCwGYfd1pk5GHkVeSywV95FdB3jMJ4o8r2irxogptpOgb4mVDL1u/q1IqWR8L + 0S7GtbRTenLFggAskE5qaKt0qKHtkQTgtMg8XRCADQiTM4h5dS2OooIAbPqUAOzmd/zewVjHQzvoIed0 + x6vgTyg41hkfNRQE4KGRDMbGshjoj6OjI4imJlHq2YFszoJUxkibwXNnzBQUJU9FxpvYp7MURstS6M3L + YLAIrJBEYLOdPpF9V2QDm9mabCUwSQJwBez0tc6QKDsp5zkU/tQNZXUIiiym9IIAzPOslsMZrYKV9tfs + 5+8JC+2yJVwKV5r2nRw6kFUikOH5iGxhXk+Q8Me536gcXiFQh8U8iATPNyDOO0quLZaDCqSy5LkDaeza + PY6LLt6Og6fPYmQ0K91bh6uIY5xjUbwsRP9QU29BlnY/wfsfqVbSfovrl8HJ63HQl7kZG7hEGTiXGhby + aFFG38R1ei7r7DI+lwrojKXQcLwblKfAw/g1r1+E2dBynNuoxL2jNrxAbvvva134/hobvjyhxhcmtPjC + pA7PTRrw+WkTnhhV4Y6uItzQthx3j5JvjsvxAGO3B3tLcFtmER5IL8KXWovx4zEN3mAg/u42B95eZ8Tf + Zhi4TzO4lwRgLd6e0+GddeRqDNg/3CWyf4XwS563PwTsC+GjXX78Y7sX725y4J21Vry1xow311gJG46t + c+JdcvZ3N/pOQBKAaWOObwrj/W1R/H27mB84UhCAt3C9wOYg3t8UxD+2RvABv8eOGLAzAuyO4MN9UXx4 + MI2Pzs4D53YQ/fjw7GG8urMbP13Tgm/ONuFzk414fFU3Ht46gTsPrMV15+zA5Uf24+g5+3H2gT3YtWUL + BroGOHbqGE9lOO7SHG8fi8ChUE5CUIi/AsEM/W2Gtjz1fw3+5CfwsWD5r/Hp7T8WX1MSFoTUQDDxCXxS + ABbrFgTdhW0Kn/9ZAD4JPL6A+P0CFo67AJ84xxMQ8+om4PVXE3EJHwvAhfmAPynefhrcx6eF33n4Q2x5 + fn7pmDzOCZx8fAFuJyHD46fh9RHeLNuC+OuXkD0JnxSAo0IArk4jn6tFU2OhDHRPdwu6O+vRWFeNfE0I + 7Y0JDNEfTI22Ymq4DV0tKdTTd9QK/pNyI5d0kxuyrfGhjj6kviGAmrwPqVo3eRF5UtaBMH29P6onF1PD + 5lPARNtqJMe0B5TkZQU4QwpyJbFOiHW0QbQhnmQVvEQgQ1ufY8wv5ugV2ayNOiSb9Ei0GJDusEgCcITf + OarLYIuVwB4rhS1C3xPh5wVEaVeFSMj1Tvp7b5r+JquCn3bQnaRPStAeJWXwpWnnajQI14k5gekn8vQ/ + dRoEcipJqLXHy3gc0ZZImcY28gZXshTudBm3qeL2BSE4QoTrqhDkOj/jYn+2AqEaIQYrkGzm+RPhWjW8 + KTn3WwFjoAhK9zIonSug8ZTCEKiAPsj7RP9joi22RGSwVatgp+23s3XQv0kCcFIIxPw+Jr5XEGwTMm5H + X0u4RQUIIQTmdAg1GBCq10sIN9Am5xnviOsTQnia9j8lk8TKUHUpeVkJ+X4Z6rKVaOY5dzaq0dugQk9O + hq5kOTpCK9DtPhXD9tOwyr4MW2wrsM9agrPJwS4zVeJmkwL3GbV4zKjHs1YLvmCz4yt2O75qd+AlhxMv + OJ141mbBo2Yj7tVrcatBjWtsOhx1aXHArcJ6csF+ZxEa7UuRsZ2KiONUjo1l9H8r2FeWklsvhZ3nYA+v + oI8uZsvnEWQrQH9nD5TQF1VwLDCe8ZXDH6yS5u8VL1B5eJ9cwp+zdYvP5INCDPWK7+cFYEkIjbIvEF7e + fyEm23zsQ95SmD30q0IM5v7tAfplfu+g3xT9WPTdALlliPFxkPc+VM3+GytHkH0myT5U12xCU7sdLR0u + NDJmzzfZpDLMCSEAkysIAVgqRS2yVul3/eQOQoT2R/hZiML8LpbmOKB/TdUakaZ/rRYvg9Wwv4ppIHLk + AmkV+5WKfZn9S4Dn4hGgD3YTLu7DIfpTiOfO++IVfjnG73kMT5B9Jih4gIp2kTEiEQqw33i1CLt5bI8C + CZ8S2ZCG8a0ezSkDWsinmtNGxr0m1HOs14ryq4wzU+Rt1T4RIyslJMSUci7Gi7ZKBNlPBGdPcn19zITW + jB3tNVa05cxoq+E+s4wzI+TyfMbZ8DLk2Sfba+TorleRQyvRQXvQlpWhPSuXROCBvBoTbWbM9jixqs+L + VYMBTPcE0C0JwCL5pAxuO5+T+K9QCMCMdcwmLSEEYAMMBj30BlE6WQMt+6KAjv33ZAixVwK3ORlqrQIK + lRxViipUyitRIa9ApaISasZSOiEyM47SW/TQ6NVQ61RseXyrAVbGVGarCWabkZ8FDBIMZoP0G0n0nYee + 8ZiecZlGvJSrZZyok5MrMqYKOCUBOJoIkl952eft5FYmGEwqVMlKoFSRf1u05NUW5BnP9rYkMN4Rx8qe + KFa1e7Cm1YyNbTrs6NJjd68WewaUODiixjliSrANVsY2Nly3145bDzpw6wErbtptwA1bVbhuvQy3rFfh + zvVa3LVajdsnZLhrVI77yLceHNPioXEDWwPuH9bh3iEt7uxT4paOStzUUZj/V+Bq4orWMlzYWIzD+RU4 + vWYF9qdXYE96OXZnirCnrlTCjlzJvABcgV25SuxinLYjvgI7w4uxN3oaDiUW45zUchytLcGljWW4qqUC + 17fJcHOrDLe2VOHW5kqiArcQNzWU4Ya6ItxYL0TfctzeVIabGsXn5bi1aQXu4Tk93F2Fx3pkeKKrEk/w + nJ8inmmvxOeIz3fI8FyHHM93yfB8txyfb+N3POaTueV4JLUEDyeW4EGBzFLcl1+KexvJOxuX4p76Zbg/ + txSP5Rfjc/z85eal+G77CvxICMAiA3hCjtdEudqxKin79y+9RfhT1wr8pacIr/SX4k1RLpf399i4Au9P + qPD3MQWO9ZTieFcJ3u0swbFuUQK6GH8cLMKvBkrwHwMynrMMR+NFmDIvRla5BAEjuTdtrJNxm93Ofiky + dI1y9lG2hNaogFIvmxeAi1EuK6Bsvi0XWcFEWeVylApULUeZfAW3L4NcXS6hUjn/W7Gt+I9jvmy0gExb + DLl4KZ3+QSMJwAUR2OBQwuSkX3Pr4PIZ4fIbpXLQoYgN+YYYhoZbsWHjKPbtncO+XZPYtXUIOzb0YO1E + HmOdITQz7os7liJOP5SlTW5OatGXd2KkyYe+OtqVtB4d9Jtt9JEdcSEAV2EwU4UxIf5mqzBJHz3OdoT2 + ZJB8o5e2uoO2RxKAI0XoTpRikNus6bVg85gXG4bcmGo3oYfcoT2hRCv9cQttaittbkdOg568BkPkJ6IU + /XS7ETMcXyvbtVjfY8LGQTtW91gw1qQ7SQCuQH2kCo0x+lrynvaUAh30xx3kJQLt9OPt5CbtyUq0pUrR + lihCX64U440VmGkpw2xrCWabl3Esr8CWLo6ZYQXOmREvcThwdKULF0/ZJRH4gkENzh9QSQLwoc5KbBaZ + v3WnYbb2NMzUL8ba1pME4H4lzuupwsV9lbhhRI67GVs9OqPD45MqPEk8O6bCixzn3xoz4b/GLPjZkBG/ + 7NXjV50qQoZft1Xg19zfbxhb/bmrHK/1leNNMQfwoBCCy/D2AMHlt/pECehivNq9DH/tXoq/9i7Ha4PF + eH2kDG+MctuxShybrCJkOD4tP4F3Z5TzArAcb3DcCAH4j4Ml+HXnYvy0ZRF+0nLKCQH49Wkl3ltjwAcb + THhvTo1Xh0vw362L8NP8IvxMCMBNi/C7zlOkLN9/EoBXKnB8JX8/p5TE37+vVeED2rwFAfj99Wq8s5rn + Mcfz43fHaBPfXK/A25sYO27R4o2tWry2XY3Xdqnw1n4Dju834v09Znyw04a/b3Pi+DYP/rbdh99uj+B7 + W9P4wqoUHhkP4/bhIG4cj+GO9U34zDmz+Lcb92ORR8cAW1uEsKlcmkuxLWFHN4l3c7UdaTcdv5GEx1AG + FweamA/WoVgOu3wZHFWLYas8BW7FqQjrV6DGWYXWiAH9Gaf0J3OdXyWVnGyOG9FYbUQ+ZkRt3EQY6YT1 + SIdEBpEQf9VIkuTEA3IJDSkTOutd6G/zoafFTZJoQUe9mctWDHW5MT7gOyEAD3TY0dNsRVeTWdqmlaSn + uY7HnBeAO1qc6O30Y7Bb/MaFkQ49xlrLsbqDhn9gBc6eXI4r1i/Dw2cp8fXrffjZ/Sn86oFq/PrBKH7z + YBC/u8+NP99lw1/uMOIvd2rwyl188Pex4zzEh/a4Gh9+xoQPn3Dh+AO84bd48burQ/jl5Sl866wInl5n + xZ1DKlzJ413epcCVQ3pcM23H5bMOnDWm46Aqx6qW5ZjmIFlDJ7GtrZgDqBTndxbhaNMpuJId7pb+U3HX + +CI8tGYRntq+CF8+dzl+fKsKf3jYiFeeMePtL3nxj3+L48NvZPDuVzJ464U6/O2zTfjVvXm8cMSHa2cV + 2JpbjMnQMoyS9PUFzWihI8/Z9Kihsc46lWgQ82nGNGgn8epIGGgYxFwamhMCsHg5QAjAdm0FLHox5y9B + Y2uxkOxZSWKFACzE33m4raIUtBBvGdQI8ddYgJf78tnKEXHLESXhE+LvpwXgGIO5RNjIViuJvmIfXjsD + Kzv3yWUhBgsBOOwlEZ4XgsVvI34x56RMEoCrSUCT4QqkafhE1m8iUoJ4qEgSgVPRUiQYyKWqKyTxVyBN + w51gsFRNQx4jWQ2HhHihgcvBwJLOzCjmNyBJckhz+Vrh9Tik1mG38F7oYdBpYGSwYWXQ4WBQIoRfARfh + EHNBMiBxOC0I+ByIR1xIxpyoY6Bbn/Kwr7uRiVhIgLWIujUkt3pkvDrk/DTkCfb3eh+m28KYaHRjrNaM + sZwBK5tM2Ma+fHAqiDPnwjh7dRjnrGG7JoizVgdw5kofDs14sHfSg31TPpy1phrnb8zi8Jo4Doy7cWDE + hoNDZpxB43rOiB7nkVBdJDJ81zpxzVoHLpvW0bCrcdmEFldO6HDVtAFXsL2IffnooAKXj+twvRCA59w0 + JEHcssorzQt83agZd865cN8qJ+6Y0OP2cS0eWGXF5/fH8fzpKXz+9AyeOViDuzeEcdWYE+d1mbG/QYc1 + fB7r0pXY2W7AwTEPzllXjf1zIawXAjAdnHg7qS6wFDnPqWiPiHKaRRivW46Z5sXY2HkazposxSUrK3Dl + mipcK7BWxlaOa9YocS0NsxCyLx0V8xVocFa7cFYuXL4yhdt2duGhs6bx4KGVuHffSty8aRBHh+uwr8GL + bRkLCaINp9PZX9Gfwe1jDTSgDXhqoh6fGcngARLdG1t9uJCB1v4WC3Yz+NrX6cS+Lif2dtuxq9OMnR0G + 7GrX4ZwhJ67n/X/yvGG8dN1afOOurfjKbevx3PUzeOyiPly7JY7LVnlw8ayJ1yHHnbt1eP5iD/7zzgz+ + /GwOb70cx3uiFPSPI8AvgsB/+/DRb5344HdmfPR7Mz78jR4f/VKHD3+iw0c/pAP5Lh3B10x4/yUD3nte + g+NPy/DWo+V4/aEyvP5gFd56QIe37zHjzdto064340cXMZDeo8dtUyqc16HA/lb2r3Y31ovyz10+THR4 + 0VtvRWNcDVHOP8OArZZEqilso83wkvQEMVkfxVxLmL8J8Zl4sKXDTPKvxf4eNc7oV+HIKPvPpAGXTptx + iXgTdIJ9b1iLg31a7O7UYWuLFmvzOkynNOj3FzKAu2gn2jjGm1wK1IqsVAZ3CXOJhKS0XIq4qQxRSwXC + xjISUdoH+im7KEuvL5MqFQgBWEubpWKr1JZLUGmrJAihSUBjUHwCoszRyTCKse80IRR0IVEdQmN9FtNT + Izj37P2467br8ND9t+D+u2/EtVccwZ7ta9DelEIsaEWUhDNGxEk+Y14DIi49Qk4GvjYVglal1AoEaD/9 + NjnBAF0ShRkQC1sgzQ9slvxmfdyMeiH8xvSoj+pon3WoYxCd8ykkEbgurCXRM6AhzO+CeuQZJAvxt54Q + mb4tYb0kAHdWW/jMjLT3ojy0EIALcwAnnRUSEkJUZ5vjPpu5v/46LwPgONYM5rF6KI+JziT6GiKoi1qR + 8GiQpJ1KR0ySACwyfwNeFbwMxn20ywXQN/DZeRxV0vztQU8VUuxHNXzOtVkt6mp0qMmIrDo9ahmgC4jP + 4mWcCAlsKFAmzRkcCZTzXpZLL/csCMCN/I140auHPn6sL4iJ3iCG2twYaKXPb7JjoJ19d6gakxNZTE7n + 0TOQRr4pjPqmatQ3plFbl0ZNXRbZ2ixSuQxRg2S2BpHqJANfsW0rBscmMTYzh/7RCeRbWhBOpyREshlE + c2kJMf5WIJHPIVlfi0xDHbKNdahprkWusYbIcF2KSCBL1DVn0NRZh9aeBjS116G2MYGafAy5+jiPmURj + exa1LSmk81FJBI5kfBAlmF1hC0Sm7sIcwDq7WhJ4hdArMn9L5MuxomopimXLUCZKKLHfL2QBi1YSgNnP + bKKMNJ+fO+6AK2orCMBC+CXEsjtul8ThWG0IiYYo4nXhggiccMIeNsMWsvB3Dn728PrDGJzpxzmXnIXL + b7oUMxunEMlF4Yn7uT8PbAGROWyH0W2TWgGL1wWzxwmjj/A6oXfbeV4mnp8OSqMaCl0VTDYtkskAersb + MDPZi9l5TI13obcrzzEY5/de+ER5bJ8G7iD9Z1KIYw4kUxYkE0ZkyGXS7OdRnxxB9j23aQWc2qWwqU6d + x2kSLOpTYSYcmiVw6pbBa1yOgKkIUVsZqq3lSBNZaylyzjLUOFawpS9yLkbOdaqEvH85GsXbvdUydKbV + 6GG/7sqqGEypMFAjw3STAjuHTbh4YwB3HsrgiQsa6XfSuGdXADeRI16z0ojrV9Nnbkvg3gONePCcXtx7 + Zj+u2dmOQ5NJrGU/nmz0YLjGie6kHfXsA1mPHjHaDp+hCkmfKA1VjR2rB3Hu3jU4sm+thAsPbMCR/etw + 3p51uGDvJhw9tBUXnb4TF56+G0cO7sDh/TtwFtefvnM9Dmxfjd2bV2LL2klsXDsuYd3aMaxdNYK1M4NY + PzWADWPd2DjUic0Dbdja24od3U3Y3dGEPa112NuQxo66KLayn2xMObEhacNWnu/+5jAuGKjDJUMNuGyg + Hlf21eNoSwZnpQLY4TZiPfnVVocO2z0mbA1YsMFvxqSdPsBI268pR0ZRDJ+GMQftt11k+xJC9C2A/JKx + iRB/3TaFBCkTmP1cmpKEPNTjoC1yKRHwqGlHdOSJekSDbOcrFYREpQLyTgnOSqkN0cfFgkIA1iCbIB+r + LgjA0vzkKbZEOkP7nNYhmSmIvwUBWGShqyUB2Ooqgd66ApqTBGAD+4/JVcHxK/4gVcAb4/NjkO+Niywi + cuIMj8WYpb0zhIGhFIYIMd9vQ4MLuRr26bTIbNcgLH4X5jXTTwqIktMuD32efQX0ZiEAL5fE3wUB2GQr + 5Xc8toM+0S5KUxdLrcVVybEjw0LGkVsI0tVKKZtHyujhdYoylmJZ/LntiFTBEiyDwVsMvYf793Df/iJJ + +HAneR6EW4ggvB5PTMyTKF42kUmZUs4gjyHOk3AL8ZufvfPwM+ZLkW8NDGWwe+8kLrhoK/YdnEb/YFK6 + VpuzCC5fKfzcVzTJ+54zIVkjylvqpD+wPbwGh6McZvICo4nXxeduYV8wEnq7DAY+fz19kYEwugm7nPeo + HBrNCuhki+CuXIQGw6nst1W4esCBZ8ilv86x+sN1LnxvxoDnukvwub4qPD+ixvPkMV+YMuIZ8uE7Ootx + Se0puLZrOa7rWobrWhbjurrTcFVoEW4OLMLTuaX4/oASr250MCAXArAJr0zx86QCb05rJLw1q8M7a8nV + Njvw4S4vsI/8bm+4gD0hYEcAHzCQf1+IyNzPsQ12wol31jlxjOf37gYP3tvoPwEhAB8XGb+bQ/hwO+PC + XQn8Y2cU727lunkIEfj9LUH8XWT97ogCO2PALrZ7YvhofzU+3J/EB6dn8eEZDfjwzDb8/fQuvLazA/+9 + tgnfn23AC+TAz8x14bGt47jnwBpcf852XHH+Xlx09j4cPrgXe7ZuxWCPEIBrEQ2l6cPn4c9KCAaF6FuD + QCA7j4JA+Wnh9v9XWBCAT2QFBz6ZUbuAjwXfT+J/9/3C/j9xjP9DiLl1PxZ+PwmPP/G/xELm7qcF4IAQ + 2UX7vz2vzAn4xJy/n5j3N8M4ls/uJCwIwGIeYCEAR4JxpONJcrsa+uk69HS2YbCvA/3dzWjJJ9BQE0Z3 + cwrjAw1YNdWFuYluDPfWo7MpgWbyncaaIBqyAdTn/GjIh9DcEpOQbwwiSz6ayrlRnXUVBOCIATafEmZy + WAN9vLCzQhAWWcEFqMg3KmGjnZRsHG2IM0bfwHhfZMmKbOCYyMyt16G6UY9kkwGJFiOSbWYkW0yIMT4V + GbzOBH1KjD4oSvsdKZdaAVEFwS6qItDeOatpA1Pk8Bnaz7QKLlExIc7jsvVImaEiM5j+poY8WWRT1tC+ + ZpWSUGsX5YaFEMxY2CHE4Hgp91dGlMDN+FeIveG8AtEGxg15xgrkFe5UOc+rBN5kOQKZqoKQzfMN5jTS + eYhzM/pLoXIXQekslgRgnY8xkb8CBtphAXNYlLhWwBpVwkZba6f/ctHeO+jrbDGxnnxRtEIIpl0XcMbl + vCbaXeEn0lr4eDxfTrRaBGoJcX28NikDOkn7npAhwHsUDBUjFipCTbiYfKkEnckK9GdlGMopGNNXopfX + 3Blcji7vaehzn4Zh1xJM25dgo3kZ9pqLcQ5jvUvNMtxgUuIuxmSPWI14ym7Fc04bnnfZ8Xnic8TjJgMe + 1Glxt0qJW9UKbq/FZXYtznSoyDMUmHVXYcBRjFbjaag1noIEjxMNLJcygv3epRw7K+AKFiBEYFuQ/CNA + +Evoh0q4De83EaLPFUkHAfowIQILsdclgfdIms+Xz4j310P46GOFACxaIcAKeMIKyfcKsdfK52Jyl9BH + lbC/lkkisCMihz1EvxuUczvun/vzhCuJcvjYB/3knCH2kWSO8V+zCc3tNrR0ONHI+KeuwcK4RvASbWHO + 4Rj7jcgClkRf+njuV4jAYlkSqLk+KDLkkypEhRDMuCxGHhtlGyFCXBblrqVnz1bAyf06uE+76COElddp + Znxm8pVJY05wHFdYlGbnb4T/FxBidoDX7ieHIW/30R/7hXjL51ItXmaOaNCQ1KM5YyT0aGJbnzIix1g0 + zRgzQb4WczM2FL+ZR1R8ZnzpN5fBZyphbF2Oavr6Gsa89eK/zKQRDeRn9UnGw+zXOY6LTLiUxyphTF2J + lowc7bVKQoU22oOWtAwtHPPtWYU0Z+ZggwFjbTZMdbkw0+fHRLcPHXkTMuzTEfYDr5P3wqaRBGDxP6HF + pCMMUhawwaCD3qiD1qCFRi9EWtX8soYQwqsaWt2noC20Kq0SSvZfmVImicACMoWY41f8TiPtV7QLn8V+ + CxWs7FJrF/89ngSrwyrBaDeeQGEOYZ4fz0vMH6xUyySx2O13knv5EE8x9mPrDTrh8HB7y0IGMO2gVcT7 + JuRSXnQ3RTHaEcVMVxgr21xY027Fxk5y+m4DtndrsL1Hhl0DchwYU+LIagMu3WzGFbssuH6/FTfsM+OG + PXpcv12NazcrcONGFW5Zp8Ztcxy/5Ep38Td3jypx34iG0OE+crB7RQawEID7uW2XDDd1VuKGjnJcR1zZ + RjvRWoIjTcU4u2EFDuWLsK+2CHuyK7BboLZEwvaa4kL551w5dtK+7s6UY1d1EfZXL8OhxFKcnV6OczNF + uKiuFJc1lePqVnEMOW7j9dzSJsdNzRW4salMwg2NRH0xbmJ7S5MQhUWp6OW4pm4J1y/B7S3FuK+jDA/z + PB/tqMRj7ZV4gnia+3ympVLKqhX4rBCEO6rwbEsZPsP9PZZdioeSS/BA/FTcW02kF+Me7vOu+qW4rfY0 + 3JhchJtii3B/dhGeqT8NLzYtwbfbl+NHvcX47WgV/sr79/qkXJoDWAi+fyJP/X37Evy5ezn+ym3eEMLZ + cJWE4yMyvMv2nd4SHO8uxntdxTjeV4LXB0vx5+ESSQD+AZ/hM51KHE2UY4rxTVa9AgHGcC67Hi6ngTxc + x74nyomrGHeopVZU9NLoFZCzz1QpyyTIVOUSxLqFZWk+4HlRuFJewv5Yyb4t+ruMY6Bc+k4qG634JKo0 + BQFYCL86xoI6qwJaC/uxQw2zS8N+q2d/NjFmshHkDCELwlEbcrVhDJKDbFg/iHWrOjE1ksNYbxwjHUGM + MubuzupQy/gm616OhlAFuhjrjTY6Mcf4bGWnH+PNdvouPXqSCvTSzw1kqxijV+L/w95fR0lyXVmjeDV3 + F3MlM3NmVWVxFmUxM3MXd1U1M6i51Wq1oMWyyAJLlmWhLdsyW7Znxh7PGGTP2LItJgtbLYb92zeyqtWS + PTPf773vvbfWW++PvW5kZERkwL3n7JM7zrl99Gf9oVQMlqZL6C/NQA9tdHteMhrp22v8MajNjEFTbhw6 + ipMkAXhDtwOTrRb0VapRz2NVBpKl3yykvynxJ6JCCLe0TS0lcknk7Q8r0F+egeFwBmbE/mIO4SYjz0mF + anIOIf6WiBfV6YfKaO/C5CDVQvTNpU3j+QrUBAVSUZWdSMSiInMN6nLXor04Bt1l0eguX4tu9qmB8GqM + 10Rjvi0Vu/rUODRkxJFBM473GXGyz4DjHSocEYk+TWnYWZeImfLVGBMZwOz3I+E1mKyJx0YhDrfKsb8l + DYcbEnCyMQ7Xd6Tgzl4Z7h9S4MH+DDzaL8cP+hT4Zb8WT/Tq8edeI/7aocUzzWr8tT4DT9Wl4imOj6c4 + vp+vS8DLjYl4rSkRrzcn4q3WBLzVkoA3W+IlvEW8zn78t4Z1El5uXIdXW2PwakccxwK/7xKlnlMlsVfg + nYE0Ce8OZkQE4N40vClenuhOlgTgpxtW409Vy/CH8DI81xKL13pT8FZ/Gt4fVeHjcTU+GJHjja4EPFu7 + An8uj8JfwlF4uioKL9SvwLneRLx3gQB8bjAF70rCbwY+XC/H+2PpUvbvJ1PKSAnoaSU+4OdzIyk4O5yM + d8a57ZSc8ZoG2GHBpzsZ+23S4M1NCry+WYa3d6jx3k4tPlwUgD+aFy8cO/DGghvPb8rCf2wO4V/mS/Hd + yULcO5SNuyeKcN+mOjx2fBS/uHEnolzytXDK1iCTwXO+JRVhn4Ydw4xSHwmwkc5bHisJv4a0NdCniLLP + q6BLXAF9/DLoE6JgTV0Bj2ItcvTxKKYjL3NmoIAOWZTnrJAm9dejMkeP0iwtSrhcnE2nITn0iAAsxN9s + koWAMxkBEofSHDUdrAVNlcKxWFFXZkRduQHN1SZ0NjrQ1+5GT4vzvAAsxN8lAbiajrmyRB0RgUv1qA4b + UV9tR3OtDZ31BnRVy9BP5zBJQ7ijYx1OjkTj1m0J+O4pLX5/ewAv3F+AVx7IxcsPZLH149X7XHjjHive + uFtPqPDW3ek4dy8f/P2p+PRhGfANNchC8d5XbXj9FgdeuNqLZ67Kx2+OZOO78zZ8dUBkAafj6hYFru7S + 4+p+C04PWrCnTYGJilj0hlahM28ZBkNrMV0Wg610WrvLVmEvDfrhUBTONC7Dzb1RuHMiCg9uWY4fHYvB + EzfJ8PS9KrzyiA5nv2fFBz/x4aOf5uCdH+bgze8U4PVvlOMvtxfhh8fsuGEsFZtLVmLAtwpdniS0upSo + sihRrFegUJ+GQmOKNKdmVUCOumwan6CGrVbKCi5YLAH9jwRgHY2tEIBN+lSYDSR2IgNjEV8UgM3qmPMC + sMuUCJ81RYLIBBZYEoBF+ecLBWCnmYTXmAiXheR5UQAWEJm/Qvj9vAAshGQhAn8mAOcGRLZYJPtXCMA5 + JHwiAzgvOwEFOUkoKUxHSVEG8nOTkcPgS8xDKURgv4ek1E5SZ0onkUuGRpUMrYYBlVEjCb92m0kq6Wxg + AKJSKKCQpUMpp7PRqGDU6/idKP1slMRfEwMUAZvdJM0dmpvtYHBsQUmOHeE8G8K5FhQJAcUuQxbJcMir + QTig5/gzor3EieHaLEy25GF9vR/DlTYMhQ1YX6XHxlYbdva5sGvALom9e4jdQ1bsYt/a2W/Gjj4ztvZa + sb3fgT3DPhyezMHBsQAJGL+jUd3TrsF+9sGDHXIc7lJIJXovHzXgCuKSPiVOdMlwMXGyW45LxDyubI93 + ZBDpuIxO4KohE64dc+CmKQ9uGHXgsk4tLu/Q4Etc/+VhI27qVuCWXjnunTDhu7uC+N6+PDy2rwCP7inE + nTNenOky4midEnvCMszlJ7HfM0BrNeOiPicOrQ9g17AbU216dFdk0DFFo4hBYYE1CmH3KtRkrkZjcCXa + Clegr2Q5pklotjWQtLWswYG2aBzpTsCJ3mSc7E/HqX4lTvXqcLxdjwP1WuxmYH+8J4hr5hrx1SMT+PZV + u/HjLx3F9689ggePb8ENG/uxv70IW2oC2EpCu6cxl9dcimv6q3H7QDXuHajCvT3FuL05B1eRKByrcmBn + vR1bGRhsb3ZjO+3SjjYbdrTyWbRbsLfdjEtHM3HP3kb88Mx6/PPNC/jFnVvxo1tm8cjVw7jreCsu31CA + k2N+HOfzOzagxtUzOty7146fncnHk/eW4JXv5eCtf/bj/d8E8NGfAvjkKTc+ftaGD5/X4+MXtfjoeSU+ + fkqJT54kfq/Gp7/W4pNf6KRS0B/+UIEPvpOGcw8n4c2vxeGtrybi7XvoXG5X4e0vKfDqNRr86ZQJP9yp + w5dHVDjRpMDuehM2N7qxodmL8bYABpoy0VHtQW2IwSXtd2mmEWFRirTAS0KSjf7qQqxvLMFMWwgb2Fdn + Gn2YoV2er1VhS60MOxtScZj97HiPGidpDy8mjnF5SQDeXKuQBODJUhUGc2VoZ8Ao5gBuoh+pY8BXYWOA + a0pFDm1JpiYaWdoYSQTO0sRJyNQmwK9jQK5NhF2TIIkCBnXC/xYBWEniKsoemcwaSQDOCfpQVVGMifFB + nDx+ALffci3uuO1aSQC+8epT2LV1hv6mUBKAfSLr16E6LwAHbBoGrGoGq3L4TLLPCcAREZiBOcmrh/bU + z6Ay26lAnkcplXou8qsQ8ikIOYqFcEvfWSpKONPuhehDRUZwmD61MqAhdKjwi1aLsEclCcCi7LMQgOuD + Bsm+V2cyuBb70daFHPQD9NUFtL95liSpLeVv1OXSBpW5GdTlYqqzDJPEQEMBWhnsiT6wJAAXZIq5zHlt + UvZvmiS6OPjMBIT4YjOlSBA2XFRqEAJwQY4MRXkRCMF3KftXQHwW8wEHfEnnBWCBgDNeEoGFbS/IJs/g + PhWF9Fnlghe40d3gRkulWRJ/66W5gd0Y6inE6GgFxtbXobOnHBU1OSityEFJeQFKykIoLitFiCgsLUZB + aSnyS0qQW1SCvOJSVDU0oW94FMMT0+gdHkNVUyNyS0tQEC5HUVUlimoqJBRWhyWEaitRXFuF0vpqhOtr + EG6sRkV9BcJ1ZSirK0VpbQkR4roSVDWWo7alAlX1ZSipypNEYCEAh8I8t0p+5jkKAVhkC3voKxyZouyz + Riq7LOb+VbDfLIm/Yu5fIQBHp6zBmsSVWEt+FsfASKwT30viLyFjv1Kyn2kdSujdapiEoOylv2JrWYTI + ABZCryffiewSP/IrgiisykV+ZRBZ/OwrdMHDc/KH/Mgqy0ZhTaEk+p669iRuvOsGzGybQVF1MYIlucgs + yoY3zw8nx4wz20v44GDryPLDHvDCmumFJeCB0eeC2m6GwqSFTK9EmhiTWvYfj5HPKRdNLeVoaRIIo7mp + FLW1hSgry0JunhtuBnUmlwI2rxDgTAgVO1Fa6kRZsRUVtFfhAhOKxLxj7gxkWpMkUdejjf47uHRsdTHw + 6mPIeWlTiByTqDKQiCJy2RKOizJ7AkrtMcRalDtWo8K1mv5oNSq9azme4tCYm4Lmggy0hhRoCzFQK5Oj + TwRozSpcNGbH9duDuPtQCA+dKMV9+4O4a4sTN05pcRXt7rXrTbh5QyZu3xbCHXuqccvOWly9qQqHx4rp + zwuwsbsIc/RL4435PL6XHMGMoIV2RJ+OQr8RXfVF2Dbdg2N7ZnDpRQu4dP9GnD6wGZce2IhL9glsxiX7 + t+DE3i04tncrju7ejMO7NuHAznns2z6L3VsmsX1+PeanhjA70Y+ZyV5MTfRgclxkXXdheqgD033NmO1u + xFxHHflHLbY0V2F7I1Fbhh0VRdhcFsR8kRsz+TZM51uwsdSFPbXZONlZjsu6KnFlRwWubAvjVFURDuf7 + sNNlxIJVhY20iRudDGKdWozbNeihbWwm76pWJaCQvNOjioGN9tyiToJVnUz7voREWLRJkugrsoAFvigA + C7sTEYFpVx3ySMaJi/eNfmVJAF7ingKSEGxLkrhk0J9BrqaQBGBhs4QAHMzJQHYwnS2RGyk/LLJUBZYE + YCFqmuxCbI2BUr8OSmPs5wRgvSi7vCgAu4PkubRlolSkN5d2L6SnTfCyzwfRRL9bXeVCfj7jMB5XlDh2 + kN/aXNxfZLWJ+edECUIez2SNg8a49rz4K4TfCGIlAVhAiL5qnouCfV20QgC28DrFuQiYfeS8AZG9lC4J + vuIP34gQLJeWhQCsc/EY9miobPwtQu1YB3OAXD9rCcmS+Gsnj7b5xR/AIsuJ94Oxh5nxnYDFLSCuIwK3 + Nw15BQa0dRRg6/Z+HD0+i607eqWKDW7ubxQCsCMeIotKlLPMKdAiyHviz1byXvO8eB06XRx9fbQk6ioU + sZCr4iFjn0ln/8ig3ZNZ6NcZK+jYBwxWGTTsJ3J5DGSJkQzgSt0KzBek4dpOO741GcAvN/jw+0kL/p0c + 9tuVa/HNmlg81pyK77bL8KMBLR4b0OHOpkRcVrIMl1csx6UM+i/Jj8LJTII89QpzFO7yL8NPKmPx3KgW + Z2dMeGtCg5f7UvGyKMfXkybhzb4MnB1jAD/NwH3BBmxxAZs9i3Dj03knPpmz48M58j3i/VkBB96ftuP9 + KTs+mObypPM83p10EG68P+PBpwtZ+HRzEJ9sysT7877zECKwaD/cFJAE4E82+rmND59u4fLWLHy0LRsf + bsvBR9vz8dGOEry7LYw3Fyrw/EQZ/jBchscHyvGd9Y14aL4XX9m1HtcdnMflh7fg5P6tOLxzG3YsLKCj + uR2FYg7g/wUBeEmg/Edi7f8V+Dtx9gLR90L8Q3GX+J++Xzr+/yy0/tf43yEAL13v0v1dwj/6vc/jHwjA + F8DtFCLwZ0JwRACOiMAeR4CxO31zZhaK8vNQFipCc30tetqa0d5Ug5rSXIRDATRX5WOwoxJTQ83SNAM9 + LWE0kffUkQNVFwdQUexHRYkXVeUB+vsc1BDhSh9CpW7kFdppa83wZGnhoN/XWz8Tf0UbEYAVi5DT3qZA + lIcW4pOwSZZACu1UEpz010sC8JL4K5BdQVRqkM1lP78TYq09l/Yxc0nwFSJwkgQz7dySIGoV2cWiYkKe + XBJ8zaJiwqI4LL4T29iC5Me5PI/F1p5D+5hNu8jjRo69KC4LsVlCrCQGC7HXWZAETygV7kL+Th63z46D + gbGxmKfWlp0Id34qvJKoHClFbOLva90JkDviIKc/Ugjx15kkQeVKhsaTCh1t7xdFYCH+msi/hfArMoQF + ROloPe+bgBD8zPxOZHzagvwtcR3k8QLOfN6rPPGZ34kMaOEPeA+cHvIu+oos+2oUE1WONWjxxqA7KwH9 + OUnoyU5Ahy8aLa41aHWsQhvRYl2BDuMyDGlWYINmHbYx5jtAv36SNv1qXRpuNSrwFbMWX7fr8aDdgAeI + B21G3KvT4B6VEnfJ5fiyXIabNUpcZVThiEmOHYxHpq2pGCYP7NSsRYN6FSrpN0vp0wrpz3Js6xhnxHDs + xsDJ87N5eX896+gnxUtI0XDYY+GzxTGWS0ImIf6z9PJeCt8kBFrxgoHwkybGLgJiegUrfZ+YFmIJQnQV + EAKw5B+9on8mSuKvyhpNjs/nymclxF8jfad4eUF6gcEjwBjXGxGAPX7GRVnxCLIPLwnAFTVmxjfkvCVa + 5BYokMXnc2HZaZGBLMRfh8jGFWCsbfORJ/EcHOwvLvZnD/upEIK9fJ6+fDljAcZ1uRmwZKayzyfCKIRp + IfqKPsPz1/IaNbxGkV2uZIymtMVCYyPPcQq/v8gveHwJYpmcw8b43i5eFmaM6LKJCn6Md72MC8m3ygo0 + qChiDFukRlmhBqEc8nfGvqJioEge8VqS4bkA4r9E0ToXE0zE91nkdWJ6ovyAisdkjMrjFpBD5fPc83gN + eezPQsAtZj8uDaaiPC8V4fx0VLL/lrPflgdTUMk+XMHl2gI5mkq1aKskz66xSi8ZVzBOzWUcGhCZ4OQT + IgPSpFNCp1FI4u9/JQCLMs1CsM1QMH5TpEuQyT+PDFmkFeKvyABeEoBFKz6n83uxv3xRJBYQxxe/YzQb + YLGZyQdNsDmsvM82+gTGj26HBLFscphgsOlpNwV0UpawKEstykgLEViUh7Y6zAhku8mzAlLr8tnY/3Xk + mDLIFclQqvhsTQrG+7SZAROqil28Lz701TDm5j2aqDNjttmEuWYdZuvlmKoV1S4TsbEtCXsHZDg+rcEl + m/S4YpseV23TERrGO3KcmUvHVVNpuGaMXGwoFdf3peGmrlTc1JGKW9ozcEubHLd2yKX2llaObZEB3JiK + GxpScH19Es7UJeBScq7jFdE4TOwvX4edZeuwtYT2Q4jAhTHYXBSDTSEh/grEYa4gHgtC/M2Lx5ZgDHZk + r8YeQmT/HuH2J0viPycAf6leJgnAV1fE46ry2AiE4Mv2uooECddw+fKS1ThduAxXhlbg+vI1uK0yBndV + x+Pu6gTcW5mArxEP8LgPlMUTsRIe4r4PVybiwXAsvh5ai6/mr8RXclbijkAUbs0icpfj1tBK3FS8AtcV + ROEM113l4/pgFB4MReF7ZSvwz9Wr8UTDOjwtMoB5/0QG8KvtCXi5KQbP1azEM1UrJCH4bw3ReL0lDm9K + 4lk8zjZHcK45FucaY/BeYyzebY3HWx2JeKUrEX9l++8dGXikUYkTeSnoM8ejQMn4TE8fYFZHBGDGckaL + CgYhBFvE9FZKxh5KSQQW/7UJUVcgQwi7i/+/LUH8J5eakYCktHiplf6L02ZAqeFY4D5CFBbzB38xA1gI + wGnk+0L8VZsyJKiMaecFYJEBbHGoaXv1tHmEW8exoYTPZ0RVRRA9jE87W/JRX+FCVciA+mI9OsJmtBap + UOGNRYl9Dap88WjJVzCeN2G83kU4MFJjQn+ZFl2hDHTQBneH0tBbTN9SJsNIuRxjlUqsr1JhfbUawxXc + t4Tb5SWiISsWjSL7l32upywFYw1abOi0YaLZiJ5yBWozE1DuiUXIEY1cy2rkiwpjXFeZm4QGkU1clIau + whR0FySivygJcw16LLTaMNVk5vmpUUufW0Z7XEJfU0ybK0Tgcq6rCiZLAnBDXoaEenIVIQBXBOJR7o9G + mX8VqrJWorlgDdqKBVailX2qs2QFBivXYKo5GZs6xdSlauzr1uKiTjWOdGpwtEOFw60Z2N8o5v+Nx2zF + WkyE12B9xTqMV8dw/CdiK8fpgXYFDrWm4VhDHC5l/7q5MwX39svwjSEFHh2U4QcDSvx8QI3f9Gnxp14d + nuo14JkODZ5rVePphnQ8U5+Cp+sS8XRNHF5oTGZ/TsLfGhMikDJ+4/HaIkRpaNG+0hQr4UX+3istsXi5 + LQ6vtPP7jhS8xfjrbG+qhLc5TgTO9adL4q/AW+LliZ4UvNwRjxdbhQi8Bn/m+Hm+JUZa/za3/WBYiQ9H + FRLO9vKcGtfi2ZpleK52GcfYCvytZS3OdidIpaUvFIDfGUqTROD3x2SSACwygD+akEsi8IeTcry3Ph1n + h5Lwen883hxOwjsTGYzTdMBuO7CH8eB2I85uUeGNLXKc3a7Eu9u1+HAzsWDAhxsseHeDHa/Pu/ACY78/ + bwvhiW3l+OWWCnx/vhTf3FiBb+9uwc9OT+L3t+9DlF+2Et6MlQhqY1BgTkKZU47KgB4hlxJeHcmoKMGW + ugba5FXQJK6ENn4F1HHLoI2Jgi4+CtaUlXDL1yBbG4tcQwJy9fHIJlkrtKdJf0hXBQ2ozDGiLFv3DwXg + IEmByPz1O/6RAGxDPQddY6UJbSL7t8WN/g6PJAB3NNrRQtIjxN+6ci3qOBir6agjArASFWU6BhAG1FSY + 0UDn3caB2F3FAVodjQ2Nq3CgJxrXziTgkSNK/OoGB569Lx9vfKMY73w7hHPfysPbj2bh7ENevP11G87d + Z8I79+vx3v1qfHA/H9JDMnz6iAr4Jh/Kw2a8ey9v+K1OPH+tF0+fycHvjgXxk61uPDhuwZd7dLi5x4gb + +iy4ZsCKU71mbGtIw1DRarRlLyOiMBhag9nyGGyj09oWWo5tNOhCBD7dGIUbB6Nwx3QUHtq1Cj89nYgn + bpXj6ftUeOWbepz9vgXv/8SND3+ahXd+EMSb387Dqw8V48kv5+LHx624dTINuypWYjiwHJ0ksW0kWtXm + DJTo0hEimS4yiOedhpqAAo1ZGjTx2dQzsAozcCqwp8KnY3Ah5ohWxMOsZBCgSiTJEX+4JEOnJzHVMRjg + cS78E06UgLZoE7gsyj/HwKQiiVbHSAKwm/1rSQAWb/0JCPLns6fDy98LuDKQ5VGxZeBFoi5EYNE62C4J + wC6LEH5l8JDMXygAB9zpCJAkB0loc0nwhAAsRN/sxQxgIQbnZSWiMEjDSMJXUSxHmAFeiIFTQTCRSJXm + pfSTGDutJPH6RGjpWFRyISaRiJMYWUx0HiL716jhfZBL4m9GWgqU8gx+JgET8wOThAmYF8s/W0jGPG4b + coIuFOa5USyJv3ZU5dtQzUC2zE+yThIsUB4QJSAs6Ch2kEhlYrq1AAtdIWxozcFkvRvjNRZM1hhIpGzY + 1mPHVvarbcTWbh2X9dhCw7y5S0tDrcXGTj02dbGv9TmxfzSAvYNubGnTYkuzXHobZ19LGg60puJQezqO + 9yhxelCL00M6XNytpFHPiKAzA8dE7X8xlyuN/4luOS4b0OHMiBnXjjtxw5Qb14zYcbJdhVNtClzXp8fN + g3rc2CXDrf1y3D9rwQ/25eCHF+XjBwcL8Z39hbhr1o0z3XQctWnYX5GKXXSCB5u0ONpjxaE+Kw4OObGr + Xzg0NbpKU9gXV6PQugx5pig64+Wo8IhM4OVoCi5HR/4y9BdGYax4GabLl2G+cgV2NK2js0nEsZ4MnOzX + 4lS/heduw4EGC3bXW3F6vAK37RvCo9fswT/dcwX+4zt34nff+DIev/0yfPXi7Tg63oRd3WXY0V0qtRf1 + VuCy4TrcMFKHOwT6yvGl9nw6MT8O13uwu8WL3d1Z2NNFdAewr8/Ha/Dj+FgmTk8G8eUd1XjssmH88pZN + +O09e/Cre3bjh7cu4P4zo7jlaAcunS/DiYk8HBv14uigGZdNWHDzZgcePZ6Hf7+1BE89kotXfpKJN/81 + E+/+IQvv/8WHD5614/3nDfjgRRr9l9T46DklPv6rEp/8UY1Pf6fBp/+mxce/UOGjn8rwwQ9SadOS8NaD + cXjra/F4+6t0eHfJ8PYt6XjtejWeusKOnx+w454pM053GNkn3NjRno1N3TmY6cnHaEcR+prz0V6Tjcaw + D/WlmWgK56KjpgSDjZXcphEbB5qxZbAem3vD7Ku5mK61Y65Gh001cmyvT8VF7XI+X7X0osGJAT57SQBW + YlezEpsWM4Any1QYypWjm8FxuzcDrV4lGt0KVHKMRwRgIfhGEzGSGPx5AThREoDF3LpCFDBqxNiNzFX+ + PwnAMlUaZF8QgIXoK3ChAOxZFIBra8qxMDeOM5efwF1fvoG4HvfefSvuuOUa7N+1gOa6Yto0LRxC4CX5 + zOJypl1zgQCsgM8kPy8Ae0QJaEKIwA49bQ/P321IQYD2TbzxnOeOQGT6FgrBVszv65GjjPdGiMClDI4l + 8Zd2uyZbj7ocE8mdCXVBIyp9DKbFPeS9rM3SoyGbBFdsx+2ruF85g+5SHrvYyXvsSEcRA+xi+oNKBs7N + RVZ0hr0YaSzAbHcYM8RQUyHawgGUZYoMYBlyaKeFAJyzKAC7acMkAdjKa7EywLdkwG5MJVIkW+7jsYOB + dORlCzAYDy7N/RuZ/7cgj8fLExl3EQHY52FA74z7bwRgzecE4Cb6+vpSA+pKDGiv82BsoBSzs02Ym+vA + 0FgjGlvLUF5ViNKKEErD5SgJhyUUCVGXbWF5GdsKFFdWob69AyNT05ha2MR2Bk09XSiprUF5fR0qmxpR + 0dJwHmHRtjWhsrUJVWxr2lqIBtS01KG6uQZVTVWoaKpAuKmcy2FUNYZRw89VDaUoExm/4RzkFfuRG/Ij + n+NLILvQA38OA/dMMyxeLXQ2BZTsJ6Ls85L4uyQAJ8rj/k4AFuuWBGDRygwM3EX2m00GjZgTx6WWILKK + l2Dx6qTs30DIjZzyTBTXFvCcS4hiFNXkI0/MnSzOtSofRXUhXnMFJjeP46pbz+DL992Gzfu2oLKlGqGa + UhRUhpBTlo+sEoE8ZBbn8bi5CBTmwZefA29BDtx52XAEA5IIrHWYIbdoeb5C3E6D3koekOtCMX+vlCgj + yokwUVKWhbxCH7xZVlg8HGt+9sFCG7fxor4+iOaGbLTVZaK1mp9LrfS14gVEFceKHIWutAjcaShiKyA+ + i6z3QvbPIkcqQvYUFJOPlDrSEObYqOJ3td401DGYqgskojEzDs0M4pqCsUQMWhjYdYXS0V0iR0+pkoGY + EqO1akw2qrCj34jLNgZw+0UF+PrxYjx8vBD37/fj7q1W3DyjwXVjatwwYcTNsz7csikPt2wvwfVby3Hl + XCkuni7D8dkqHJlpxOGZFuwdb8Z0RzmaRT8RVQUMtAeZFvQ0lWLbbD9O7JvDmeM7cOXRnThzbDeuYHv5 + oR04fXAbTl20DRfv28pttuLYns04snsjDtJeXbRrHvu2TWPHpvXYODOC2Yk+zEz0YGqiWxKAp0a7MTPc + hdnBNsz3t2JjTxO2dDZiW1sddrUS9AE76Qu2VORjodSHDSEn5oqd2FadiYMthbi0twpX9tXg6h6iowqX + cvwdK/Bjv9+KHW4DNrvIZzwGTPF6hq1KdNImNpJfVmoSUEj+JeZ3d5FTOsktHXraF0MabOJlQx05Ibdb + EnxNQgwmlj5byG2txogILOCiPRJwk2u6aes8fK4CgndeKAA7LQlSpYJMxiQ5AdreLELKAk6XxN8s2i2B + zKAMWbRdYi5baT7bXCX8WXI4fTw/VzL7bzw05hioTHFQmckjzXHQ8NhCADbz2I5MUc5RCVeQNjIzFW4e + L1ikQ2U9fWxjFmpqvShl3/WJLB2RNWwjnyaMixDz+BrFPL72BBisQtxdC5VeCMBC+I1ZhBCARdlnnouR + 2/Dz3wvA6RLM9LkWnrs1wPPn+dgzacOzeb9yFXDyHC2+FOhoizU27k9oRAawIxomH2MDfzws/gRYM3m/ + AynS9dh43kJwMboYNzgTYbBHYHImwEiYed5mkU3FcSUE4Pb2Amzb1o8jR6axZWsX6hv8EKWtTZYY2Li9 + +PPan61AToEOwTxdRAB2Z8Boop9nfJEhW4u0tFVIT1+HNNk6pMpikaSMQzL7USr9j5xxg1aUhTbT/rHv + KOSxkCcsgys1CnWmVdhUlIHrO514bCITv54P4I9TVvyuV47vVazFY1Ux+EFjCn7cIcO/DBvx01ETHmhP + w/WMra6tXI7LS6NwknHcCVcULhECMLnql7n8WPFKPNkjw6vjOrwxrsFLvSl4QWRUtMZLeKUzGW8MyaUy + 0B9uMOPTjXZ8Ou+IYEGIvw58ssGGj4iP5+xsnfh4gxsfz7jw0YwTH0478MGEEx8IAXjcjnPrGauOOfDe + hEua4/fTjdn4dFMmPljwE15ClIYWrRcfbfLjI67/aKMPH3Hdx6KlnfpQbL8pi202Pticj7c3FeFN2qJX + Jkvx59FS/HKkAj+YbMKjm/rxtT3j+NKheVxxKCIAH9m1Hbs3b0Z3ayfjqjLGXoX/rxWAz5d0/uI2i8e/ + 8DckQXcR53/3f8Li7/yfFYAdouSzJ1dqBf7hb10Ap5PP4zz+DwjAnkxJAC7Mpc8uKkJ7YwMGOtvRTY5U + V16AmpIgOsgdxnpqMTfWjtmRNgy0V6K1phDNFbloKA+itjwbtWWZqK8KoqmhAI3koDWMP0rLfchh3Own + jxXZv1aXnHaN45/2TS1snJn8/3MCsAIG+vO/F4Bp5/9OAFYhWK6WhN8sfg7Qj3tDkWxdIQBbuM9nAnAy + jDyOmXbOkiXE33QJUklcUUaZ6/TeJOi83FaIgYvbCuFMfCftRw5rkTJq6cMCi/AzdvGL48cTcUSMlBUs + soGtOQlw5CfDwfO2BGlD/bHS/MN6TyztbwJskqidLgnQ1hzGLOKFHU8i1LSdaiEw0paq6UckcFnrTYGe + 9l4IwAbaagFjIANmXoeZ52akH9D5eAyvEJIZT3m4D6EnjP6URSFQXAP9Bf1EBOJeCHFYiL+8z7xfdt4D + pysOAfqKPOsqVFhWocm6Gr3OdRjjdU5yuwluN+KNxQDX9TvWode+Gm2m5WjVRqFHuQxj6pXYQL+1VR+P + A7oEnCAXOGOS4UsWJW53aPAVh07CPVY97tZr8FWNGl9Tq6X2Lp0WXzJpcalJhQMWObYwzpolF55g3DhM + v9Gji0Mb/XM9/WkF/WihIx5B8eKpL46+PCICW93R9MHryAuikWmLRZC+M1uIwLyXXt5LJ++Rnffbxmco + BODzLwgIEZj3yyZeeFqElHlLXCgAC8FXZY+B0rJOygQWWcAGD58PeYTBwXsu+U3yBsZA0v0UAjDPz8u+ + kVOUipJKDSprTQhXmxAq1ZEbM+7MSYeP/SxSdjoiAEulqD307W76aFGNwx0RlS3uBJ5nPK+VfYzX4Obz + czI2c/MYTvZ9ezbPkXGXVkz7wOsx8Hp13F/La1dxXyH8yunPM3j/ZPTXCgvHIzmUnuPOLF4u4zUKfFEA + ttvIxcjBfCIRKFOJojw1wsV6VJUZCD2XdYz1yLHo533kaS4L7585UqllCV7CY41wNx/5eibj0GzGvNmM + jbN43GzyGiEuizaL15vNvpzDsZnLe1HAe1LEsVlMPldCblfOOLSM111KhLksicNcX1mgkLJ+m8JGNIZN + KOE4DzI29fPZCAHYalRJArBeZOGyzwkBWCtKLmtU5wVgIf5mKNIIkW2bdh4ZsrTPCcDpQuRNT0Uq21S2 + QvhdQlrGoggs9hPbinZRAFZrVeRCenJEU0QAdtrgdDvg9rnhDXjhz/TB4/fA7rHB4jSTe5kkGMw68kM1 + jyEE6rTPCcA5BZnns4Dtbm5rUUGrz4BOL4PFQl5Izp7p0TAWt6Cl0oPuGheG6uyYbLJirt2G+XYLJutk + GKtKxPqaOEw1xmJLdwoOTqlx8UY9Lt1qwJXb9TizTYurt6hw1YICp9cn4/KhZJzpT2HMkILrOpJxXWsy + bmhLxQ2t6bixTYYbROZvczpuaErDDY2puL6B2zUk4YraeJwIr8Oh8tW4qHwt9hDby9ZhS8labCum/SiK + xmZiYygac2znCuOwIT8Oc3lx2JgbJwnA2zJX/bcC8A21abiukucnRN6yaFxRHoMzQgwOx0ZE4Yo4XMH1 + lxSuwMX5Ubi0cDmuLlmJm8rX4csVsbgjHIevlMXh7tI4fK04Fl/juXytaK2Er5fE4gGu/3pJDL5WuBZf + zYsIwLdnRuFm8stb8pbjpqIVuL5oGc7kROHyALmmNwpf4vf3FUThOyXL8bPKFfh13Rr8pT0BL/L+/a07 + SRK/XuS6Z6qW42ny1RfrV0sC8GvSXKlxeJ3LbzbE4I2GWCkDWAjA74pMYJEh3JOMV/tS8XRPGn7do8RD + TRocy09HD8dinor8/UIB2KZh31PDZBPQ8LOWMYqWfUyUHpdLYq4EnQwqQqxbgkIt+nJEBBZZv2KdEI81 + BoX0ncgSFiJwkiwOKfJ4CcliWRGDdLXgAGmfE4A15PmiBLTBquA5KGCxa2B1asmRdLDalOQyGhQXelBX + HaStcaM4V4tC8oOyrHS0FmnQUaRCfSABFfRFdd4YdOSlY6Bci4laK6bqLZiqM2O8xoghxvoDZXIMlcsx + HJZhvFKJiSrG/jUaKQt+tsHAMaDlGFChL5SKNvazVva3rlCiVB1svEGDuQ4LJpoM6CmVo5p+sNSxBvmW + lQgalyOHPjPkiUE4Kx61ompGXhI6chPRFYxDX1485hv02Nxqx0yzBf0ViwIwbVwJbbMQgIvpg8oYlwkB + WMwD3FyoIOSEShKCw/Rxxa7VKPOuREVgBerZ3xoLVqCpcBkaC6N4L6LQXbYSo/VxmGlJwcZWGba1yLCz + SYa9TRk40JyBvRyDO2visakyBrOV0ZipjsYUx/tsXQI2NSVjd1sGjnQqcUJMwdgYh6uaYnBnVwoeHJDh + sSElfjCkwE8HVfjloAa/79Pir3069jddRABuU+OZxnQ805CKZ+qT8ExtHJ5vTMZLEhLxUkM8XqRdeYXH + FfhboxCBE/Fqs3jpIR4vN8fjBfbxl0QGvIi72KdfbU/B6x2peJPnIPBWd9pn6IlkAAsBWGQBvybKp3cm + 4uX2ODzXvA4vLgrA5/rS8T7P+8MROT4aVUrlo19rjeU5rcQrzau5vA5vdMTibHci3u1PxrklDAoRODVS + BloSgSP4YH0GIcO769NxbjhZEn9f6Y7m2ON4XJ/GWE4P7LIDexkX7rbi3R1avLlVibe2KXFusxrvzxOz + Orw3Y8LZGStenbHjBcZ7T28rwF92hfHHPbX41a4a/Gh7FR6/qA2/vmoGT99zEaKy0pYhQOSq1qDAGIsy + exoqvGppfli3miQ0dTV0yaugTlwJTeIqaBKECLwS+vjlMCatgD11FZwZq+BTrD2PAIlVIR28yEKqEn9E + SwKwnk5W93cCsBB/lwRgP4mOEIBFCejmKockAosSj601NnQ1u9DX5j0vALc3Ws8LwLVlGgYXGlSXkgiV + KFFRrECY6yo5YGvKDdxGi7YKkT4vHNFabGlZjRPDcbh9Sxp+fqUNf7krG689UoL3vxPGJz8ox8ffD+HD + x3Lw3jd9ePchO9570IIPHrLgw4eN+OhBHT5+WINPH+EDedQMPGLHu/e68Nptbjx3rQ9/Oh3Avx0O4Mfb + 3HhkxoH71jvxlTE3bhl24rohO0506rFQmYierGVo8kShg4Z9pGQ118VgV000tpUux0au207ncbwhClcP + RuHWmSg8sHclfnZVCn53uxxPP6DGK9/W4+wPLXj3cRfe/2kA73w/C299Kwcvfz0Pf7w1E49fbMYdM6nY + X7MC67Oi0OlYiTaStBojDYQuGSW6eBQb4hF2pqDer0BLlgZtfDaNWVpUeuVSVpif5NiujIVFEoAjGcA6 + dRI0WrZaEjzCoGEwoiFBXfwTToi/Zk28NO+vkf3ApFgHk5oEmr8l3tQT5Z8lEdiWKsFLMihEYK+dhFWI + wQ6ZBPF5CS5uf14AJoH32uQ8lvjzTiCSRZzpTkcWDV4ugxNRJnRJABYQArAoB11AI1jMAKq8QIYaBnjV + ZUoGqWkoZmBVnJ/G73lsklmrIYZkbh1UsnWQpcVAReejVTNI0qtgNmmk+S/UJEuy9GRkpCVBSSImBGGj + gY6QhEpAlH22EE6XBVkBFwpyPSgt9KI65EVdyIWmkJOwoSqTjseWIkEstxXZ0Vvmwvr6bMx3FGFzdwgb + 23Mx1eDCeK2ZTsWAhTYzNneasLFDy2U1ocB8qwpzLUpsaFFgtlkuZR7NtvD7DjN29buxvdtKZyHHQn0K + ttNg72pMwp7GBBrwFBzpkOFkrwon+9Q42iHHobY0HCThOigEYi4f7RQZnPy+X43TQyRtYxZcO+XC9dNe + XD5oxVH+5nE6hTM9GtzQq8b1Xem4jcbxwQUbfnwwDz85UogfHwvhe4eK8JVZO67opkOojsH+ihgcqkvF + STEPcZ8Bh3sMONjH8+020sHK0FkYjzLHcuTqoxBkMBgyR6HCGYVaXxSa2KfbglHoIhHqy4vCMB3VREkU + NtWuxB4a+WN9Slw6YsblY16cGvDjcIcX+9v9uHJDPe4+No0f3H4C//6tW/DUv3wDf/7ZQ/jFN27B1687 + jBNbBrB3ogm7xhuxY7QOe4dqcWKskdfcgC+tJwYqcFV3IY41B7CvyYeLunNwcKgABwfziVwcGQvi5Ew+ + zmwM4aadlXj4ZA9+ftMG/O6re/DkI8fxm68fxI++vA33XjGO6w924cRCFY5OleDI+hwcGnbj0gk3rpnz + 4O69ufjR1SH87t58PPM9jut/zsObvw3i7T9l4p2nXTj3vAnvvajDBy9p8dELKnz8jAqf/EWNT/+gBkQp + 6H9T4KN/ycD7j6fg3e8n461HE/DWg/F4+75kvH1PKs7ekYzXblZLL6388lgmvj7nxpW9Dhztzsa+vhC2 + DRZjfqgME31VGOquwEB7Oe1uCbqbythWYbizCdMDXdg6MYBdUwPYMdGJ7cP12NRVjJkGLzbUmLBQrcK2 + +nTsa2OfInk83q/F8QEdDrOf7e9SYhf77Kb6JQFYgZF8OXqz+Nz9crSL6QS8KlTa5ZIALJWA1sRIyNF8 + QQDWMBBfFICtegbh4gUV2qX/NQE4UmYmMhfw3wvAKhLWCwXgRiF4bJ/Djddehnvuuhlfv/d2fPPhe3H/ + V7+M4wd3oqMpDK+DZFPHANrMINShQ6Zde4EArITPpLhAAJZJiAjAybCTzIrr8JlSkMUAOZt2OMjANtee + gjwG1IW0kZIA7FGQtClQHlChSpR2DtLP5ZnQUmBDe4i+k0FZdUBHQqki1Ki/QACuy9SgVuxHu18uRGQX + j0eUOhgEM9iuzdagvdiOgepMTLTQ/gxUY4EYay1GW7kQgPUI0vbmuGQMorUMqHldgi8sCsARLArABq4z + pjJAj9j5TA+DcD9BG51DYirm+xUlnwVEll1enuy/FoCJHF8yCrIzGHSqEC4gVygzorORwSf7XFPYgpqQ + DjXiLc4GHyaHK7B9Wy927BzBzFwPuvvrUVFbgvLqMqIKZZXVKKuqlgTf4spKogKlkshbj9a+Xkxu2ohN + u3dhZssW9I6NoqatFdUtzahlW9vegpqOFlR3NKO6k+jidwKd/I6oaW9EbasQgWslEbiiuRIVLZWoEsJv + YxhVDWFUN5YjXB+SMn6zizzIzHdJwm+QfsKXw+A90wKLVw+DUwmVKR0Z7B9Lgq4k/tIX/68KwGJfUQJa + YU6HysrgyKGUYHCqJOi5bHSzjxa6pdLPBZU5KG8sRnVbmNcdRlkjz7M2D/nV+QjVhVBKO1DTVYOZ7VO4 + 9vZrcOcDt2PbRdt5T+pRymsL1ZYivypElKCguhR5FcXIDYd47CJklhQis7hAgq8gVxKBzQEnNE4TZAYl + 0vUMEs0KWH1GaQ7kQJ4TWUROgQeFRX6pZHZ+yC995wgY4c42I4/+tJL9tae7DEO9ZRihHRpuz0dvgx8d + lfS1JVY0FBpRk8v+IZCnQx3b+jz9edTliDLp5JKZDP6yxJjR0M/QDgXVaM9VMQhUoKtIht6QKO2Ujt7i + ZPQwkOsrTsEI+eVIhZJBoJIck764TY/tPSYcn3bhxt25uJf+75FLivHI8Vzcv9+Ne7YZyOuU+NKkGl+a + MuBLM07csCET12/Mw9ULhTg1mY+Lp4pxamMdLtvagSt2DOLUtiHsmWzDUEMxygJm+AzpCGXa0NNUjm0b + BnBi/wKuOrEbZ47vwZUCQgQ+shOXHdyGSxdFYCHUCAH46J6NOLJ7AYd2zeHAtmns2rwem2eGML2+C1Oj + 7ZhY34HJ8S5+7saG0W4sjHRi81Antg60YWtPC7bzOe9uJ1pqsLOhDFurCrGxPBNzZV5sqvBjd2MeeUMp + LhuowZnBOlw7UI9re2pwsiIXRwv9OJjtwN6AFduJea8RYzYFetnHW/WpqCOXLGPskaeM2HcvOasom+/i + 9y4G+A7ayogInAojbaVeHS/N/S6B9lOsM5LfmnTkovpECUIMlgRhUY7ekgInuadLQPypuAhRpt5mjOHx + 42jDE8kb05AjMkey5ZJ9CmSSt/ppmwOJ8Gfys7BT/F6UZs7MUUoZqqK8o/iT1cx4RmeNCL9LEFnA4s9c + o5vnkEkOm6OCm/sIsdVFm5ZdqKN98qKmPoDyCgfy8sXb6tzeTD5qWifNLay3cFlAEoB5rTyezpYAtTEy + 77BalHjWx0rib0QAJnclhFCiJgePCMDcXxKAU2HxZFyANEnoXcrYsYv5CqUsZZn0Z7We9ldji5H+pBaZ + SnpHLAyuGF5PLMQciRbeG6nsZUAI3Bmw+TO4HX+f90HciwhE+WnGBgKWODh5r4QA3LEoAB86NImNGztQ + W+OBXYjeVj6PxcwpIfoG8+l7cvVcVnM97ZguVprPNzVtFZKTlyM1VSyvQXJ6NBIyopGoiEUS+1A67Z+U + JUB7qFaSs6eT1ycsgy9jGZqt67CdcePNPR58fyITT8xn4i9TNvyhR4afVUXjp7UJ+OfWdPyiR43fjtvw + bxM2fKdbjtur1+CuljjcUrsGZ/KW4TTjuWu9UbjRFYW7A8vwvZKV+H1bCl4YVuL1MTVe6k7BM43r8Iz4 + M454rjkGr/Wl4ewog/cpIz7eYMbHs7bz+ESCVRKBRSbwp3Muwgts8OLTWTc+mXHjwwkn3l/PGHTUireH + zTg7bME7o3Z8MOXBx3MBfLoQiAi9QvRdxMcbIxDLH8z7pJLQEfjw/pwf788H8AH3fW8+G2fncvDGbCFe + ny7FMxOl+M1YJX463YzvbRvEg/uncMuheVx5gQC8b+s29HX0orSogmOn5P/FAvB/sd3i8f+fF4CF4Pv3 + 3//D37oA/0j0vRD/swDsR04gCwU5OQgXhdDd2oKR3m70tzWjqaoYDeV56GkoxWR/IzaNd2KBfmaksxpd + deSW9CEtlflShnBzVS5aawvQ0cz15J1NjQWorMpGdo4FHp+O16aCyZYBhTaWiJFsm1YIwOSk/0cEYAFR + CjqzLCL++oppn+nrxfy9thwhbNKmZ4kMWCHUpsJEmy1K4FoWYc0SZZ8jMNIGaty0t+KFGVeCJMTqvclS + mVzxnSSecn8hDEeOJwTliHCoF/Ose2lfPTFENNfRTgbipRLRliCvLzuJn+Og5Xdq5zpondzGEweTT4jA + tLs5vG7aa3GOOk9EpNPTluu5rKMd1dL3LK0z+EQWJ8+DtlXALARgIVTz3PQ8T60o6Stlp4rS/7weAV6T + yCxeuiZxPRb+lmXx3poFeD0CNnJ8Dz9n8roKPOK/pnVosa/DgD0ak65YbOF3u3Pk2B2UYSuXF8j3Zxwx + WG9ejR5NFNplhDwKvcplWK9dg1khAvN576U/P0Yeexl57PXkrjc51LjFocJtFg3uEAKwTosH9Ho8ZDTi + foMJd5j0uNqkwcUWFfYaMrCdXGK7Pg2btcnYQH8wYUhGnzERrew/VfSnxbxP2b54ePz0Pb5o2N1r4bav + QcCyBkH64DzygyD9eSb9rs+dyHFP7uCj7+P1XigAG4UA7I2IwEtYyr4VJZHNjIWWSkCL7N/zAjDvt47P + SCs4hI3PQPhNi3hpK+a8AOy+UACuWhSAq0woLNYgOzcDPvZxD8/lHwnAovKGlRCVRMyMrUx8pkbed5Mz + luNEHD/y7EQ1Dxv7vKjyoaWPF9M/iP6s4T7ixQKVQwi/cZDZYyXxN80UjTTDOqSzlVsToeH5G/l7IpPZ + 5P4HArCYyo3xZyCgQF6OBsVFelSWm1FTaUItIRJ4cshBfI4UiZ/ZTYyNCZeF1yWwJAKLJBBygWyfEjnS + lERqiGqCXsazXmeq9OKxgNfJmJLXnMlrz+L55LDv53IcCCG4kOO3WCoTLUNpjgxluUoUZ6WjiN+VcEyL + KYeqSvQSCrhevIzsdZCXWMnfTGryTSX0KgWMSwLwYhbw5wXg1POZvamLGb0ZxIUCcGoq47rUpM/KPl8g + AEv7fKFdEoDF/L768wKw8bwALERfX6aPPNUvCcFOnx02jxU2dwQWuxEGi04SfpUaGXTiP0yHmZzWjdzC + TCkLWCy7/dzeZZCyPM0WbmNTwcEx53UpUSj+Vyh3oLPWiaEmJybbHJjrcmFjtwNjNTIMViRgsDIGwzVr + MdMejz0TShzZqMfFWwy4fIcBZ7ZxfG7T4epNGpwcTsIl/Um4rDcJl3ck4cq2RFzZnIirW5JxdXMKkYar + mtJwrUBjGq5rSMa19Um4qoH71MbjcNlq7C1djj2lK7G9dDW2lK7BppK12FJMFK3FJmK+cC02FKzDbH4M + ZvJiMZsTg/lgDDZmcpvAyv9WAL6uOgVX8fPlJdE4XboOl5XH4MqKeCJWai8vj8Wp4jU4lh+Fo7lROJEX + hSuEaFuyCrcKEbgsBncUx+DOomh8hedwd/4a3JO3CvfkrsK9BWtwH9d/rWgdvla4Dl/NWx0RgLOX49ac + 5bglfwVuyF+Ga3jMy7KicMoXhdPuKFzH9h7+1jeLovDjsmX4ZdUK/LElBs92JuCldpExSc7JdX8NR+Gp + iig8X7sqIgA3xeLVhhi8UrsWr9etw+v10ThLnOM6SQDuSJRK4r4+JMOzA3L8tp92tVmLowVydDN2ylEl + wamnzzMrYRF9wq6FxaGVssWtTj37l4G208x+I14e0EBnUkVgVkutEIb1hBB6FRoxPpIhsn3Fsli3tI/I + IBZZw2myRKSK//HUiRLEcoqC9ofx3hcFYFEKWkBjFMdK53FENrCK8ZSWdkfDvqtBTrYNJUUuFAb1yCZH + 8NG259I31Qcz0FmoQCt9bbVtBRrca9CVm4wh8oKpagNm6k2YFy85EJO1WoxXqzFRQ1SrMM3Yf0YIv6IE + eqMem1rMmG82YqZBh9Ewj8v+1lkQh77SJIxUiRLOIlnLgqkmPXpK0lHhXI0i03Lk6Jcx9o1CtmkZCuyr + EfbFojYrHu35yejJo7/KTcRQQRIWGvTY1u7EhmarJABXZyaihHFaiH5bCMBF9KmijHRldkQAbg2p0F6i + RnupThKDS13rELKvQIlrBcq8y7n/ctTmRKGOfayWfaqR/biteBn6q9dirD4eU/X0mbVJ2FidjK01SdjB + 5a3V8Yz9OaY43uarYrDAcThXl4hNHJs7W9KkSqOX9KhwWWcGx3IcvtQSi6/1pOHbQ3L8eESJn42o8C/D + Gvx6SIP/6Nfg6X4dnunW4pkOFZ5rU+LZ5nQ805SKZxuT8Ux9AttEKQv4ebbP18XjufoYvFAfK+FlnuMr + XP9ycxJeakrEi7QdLzRxm5YEPN+cgBdaE/FSaxJebkvGq+3J+Ft7El7rSImgMwVvdCbjra5kvCnNA5yK + twjRCtFXZA+/0hb3eQF4WI6PeQ0fcfktjrfX2qLxpiT8xkvZv2/3JOId2rK3+yKICMAREfjcUCreHUnF + O4SYC/i9Ua4bScGbAwn4W28sXupYI4nA76xPA5YE4H0uwoH3dxlxdpsab2xR4s0FBc7NKvHOtBpvTxjw + 5oQJr0xY8MKsC89uzcGzuxm77a/Gf+yvxS/2VOFXR9vxp+tn8erXDyIqPy0KuUShehVCdN5lthRUuBTI + t6bDoYiGNmkF1AkRaJPWwJiyBubUaFjT1sGWvhbOjDWSAOxKXwlHynK4M1YjUx2LogsE4HDQIJWAFvP/ + SnMAB8QcwPLPCcABlygLnITyPC0awna01rgIN+FAR4MLvW1eDHQGLhCALWj+OwFYfYEArCaB0PA7PRrZ + tofT0UvjPFWzCns61uKqqWTcv1eFJ24K4OX7CvDOt8L45IdVwE8qgB+V4NPv5eCjRxkcP2LH+w9b8cHD + Nnz4MAP0h0z4+GETPv2mFXiUQfkjXrx7rxev3ubFM9f68NsTbvwTH9Jjmxx4eNaJB2f8uG86C19e78V1 + ww4cbVNzoMSiw8PBZY9CHwfbVHgtdjQk4qLWBOypWYkthVHYXhyFY81RuGokCrduXIYHD63Cz69PwRNf + keOZh9X42/f0OPsTBvs/deDdn3hx7vt+vPWtLLxwXyb+8xYvfnqJEV+ZT8WhhhWY4UDucXIg29ahToi+ + uniU62JQaohGFUlak1+JzqAO3bkGtGXpUSfmkuTzC5IU21WxMIo/1hTxJDgJ0CpJ7ESGnTpJEoO1apJT + Fb9jK4RgIf5GEAuDah2MirVSFrBDHxcRgEnKJOHXmhKBg+TMJUgeIQnBJKs2keVLEstzEAKvyAK2ij/x + 9PFwmtLgIfF3W0QZaPG97B8IwKIEdPx5ATjoi0F+diJCOckoE6VeihTsFyrUlLOvhFJRXihE4TQU54pj + r4NZuwo6xSrIUlciI2Ut5OlxUMkZOJEgCfFXzPWhIpnLSEuELCMJSgUDJh0djCBPJFM2q3jLyACn3QS/ + z4bcoBuhfC8qi31orcxGd3Um+qoC6Al7pD+ci21JBA10pgqdRVY6ByfW1waw0JaHjR25mG/JxPoaC0ar + tJiu12G+VY959qO5ViVmm+SEjA5Gjsm6DEzUpWOiNg3jdTJMcJ1wMFs6rdjUZsBsbTrmabC31CVhGw3n + zro47G9KxuH2DBzrkktC78HWNBxoTpaE4f0tKZEsYX53YkCLU8N6XDpqxGXrLbhq2oVrpr24uNeIixpl + ONiYgUs7lbiqW4FrutJwG43iQ1sc+MmRfPz0RCEeP1mEHxwrwFc2GHEljeLRupU4yLF4uisdVw5qSPrU + UmbowR4ddrarMVmVgq68aJRblyGXwWBQFYWQKQrVrig0Z0ahU/RpkqGBgmUYDi3DeNlyTIdXYEv9Ouzr + SMXFQ2JeYzeunc3DmclCEssCHBkoxJXzTbjz2Cy+e8dJ/PLbt+GJnz6A3z5+Px7/1m2456ZjOLF3Avs2 + 9WLXQje2T7di53gzDk+04pL1zTjD5auHqnG6t5hjNQs7m304PFiEY+tLcHR9CEfHiyTx98otZbiZxvZr + J9rwoxsm8O93b8OT3ziKp797OZ545CR+dPsefOX0FM7s68GRhTocnKnERZM85lgOLpnOwZUbgrhxaz4e + OBHC4zcV4ImH8vEUbdLLvyrC67/PxZtPBvDWMw6ce96M91804KMX9fjkeeJpLfBH4vcqfPpbOT76lQzv + /1Ma3n08FW9/PwlnH6UTepjO5/4UnL0nGa/docWLNwfxm1NFfFbZuGYkgBODBbhopALbxyqxcawGU8ON + GBtsxOhAI0b6GzHc24yRvlZMjfRhYXIUO+YmsWduDDumerlPC7YOVGKuLYiZWjs2VLPvNWRgd5sMB9gv + DpNAHhnU4WCfBnu7VXzOKmysU2ImLMP64gyMFMgwkKNET5YKXfQTrQzmqhwRATifY39JAA6eF4DjEdAw + CL9AALYJAZj4rwRgqQSNEIBJKCXCqRBlafj5fxCA3S6zNAdwS3MNDuzbJpV/fuC+O/HYtx7AD7/3TTz6 + 8L24/ORB+qlaZHmMcBgy4CLpzPycAKy6QACOZAF/UQAW8xiLUtZuA20l7WMWIUTgHNoHIQKLLEUhAJd7 + lSSFkTn2hfhbm2tEU6EVHcVOdJd5pBdJpDl/fWoJXxSAhchVQ7tf7mRw65JLPj9MOyoygxuCWrTTDg3R + Tk23FWPzYC02D9VisqPsggzgDOQ4RVktDbLdSvhtvAbaaTufVUQAJn8gIgKwsOG06bTxATeDbx9BUhoM + JCE7wOvLjEAIv0IAFkJwpj8Zfu/nBWCBJQG4PF+NikIx/YMZ3U0+9DT60FJpQ3WRFjXFBnKGAGZGa7Bv + zyj2XzSNzdtGMDTWjtrGKlTWE3U1qKipRXltLcpqahZRHcnwbW5E59AANmzfil2HDmLz3j0YmRVZwN2o + bm1BDVHb1ozq9mZUdTRJqOxsIZpRyXWV7fzcUoeqZgEh/lYh3BxmWxERgBsiAnBNYyUqGkoQqspFIN8F + T9AGf66DcMGVaYXdZ4DBqYbGqoDMmCqVNF0Sf5cgBF4x328s+diFAnCCLBZp9M/ie4EMXWQ+4Aw+D7kI + kmwKqKxyaNlqbXJo2BpcamnO37yKIEI1+TznUkkAFihtCKGwekkALkJpUylqOmsws20K13756kUBeBuq + O+pRzGsrWhSAQ7VhFNeLctnlKKguQ25FKYLlQgiOQIjA3sJcuPIiIrDKpofMxIDQqoTOqYHVb4SYm1jA + nW1FVp4LucV+5JX4kVXogTtohU/MpV/iQnVdNkb4zKfX12HDSDVmh8IY78rHSEsW+up96KpyoYPcUkK5 + DZ1EV7ldQjfRU0aU2tBL9HFZoL/EgoEyM4bKTRgJGzBWpZOCvck6NcZrZBitTGPgl86gUI1ZYqpOxcBQ + g529Zhxe78BV27Jw58ECPHgyhEcvLcS3Ls7CQwfs+NoOHe6YU+DWGRW+NKXFdVNmXDPlwplZPy6fycLx + sQCOjAZxfEMYp7e24qrdQ7hy1xgOzfdiuqsKNflO+E0RAVi8lCME4GP7F3DZ4R2L2InL2V5+aDsuO7gF + pw9ulXDJ/q04vncTju/byHYjju7agAPbp7B7s5gHeBBTo22YEKU5R1sxOdaJ2fEuLKzvxub1Pdg22oMd + w53Y2d+G3T3N2NfdjL0dddjVQn9RF8KmyiAWqrKwtS4H+9tDONFbgStG6slhG3HdSBOu76/HxZW5OFIc + wOECLy5iP9+T68ZCwIRh9r9O2o5mQwpq9UkooW3Poy3M5nKWOY12UxaZQ51wCbvCIF8SgGkrdao46OQx + EsT875IArBVtPExaIQh/JgRbyGltpiTYyUWdAuZECUt/MFr066QXAF3WONoq2qTMjM8E4KyIAOz1JcLn + I3cNMG4JZCDA70UZaDEvrS9bAZc/AxbGM0KYvVAAlkpA25MlAdgeoL3MVsHLfVxBOTzcL7tAhzL20XC1 + G0XFFmRmKWGyxEKrXwOtcS20pnXQmaKhF4IwjycEYL3tMwFYrlsDNXm9ShstZftq9DHQGsjZiSUBWHmB + AGx2psJM3rwkAJvdaTCLP2tdSRKE6OvMlMGZFRGAxR/V4g9qSQAWWcgO3nd7NNeT6ztiYfIkSAKwjdva + eV+svnRoLKL8NPdhG4EQsbkPr8tojoXdlYz8AgO6OouwfXs/Dh6cwNxcK6oqnbDxN6z2OLg94o/sDEkA + zsrVI5sIZGvh8irop6ORIYuIvwkJy5CSsloSgZPS1yGeSJBHI1EZSxsZDxn5gFweB0VaLBRJvJ/xUciS + LUe7LQa7GTve3uvFjyYy8YcNfjw9YcafemT4XVMSfteajifIV34/oMefJx34w7Qdjw+o8UBTnPQG+yNd + qbizYg1uyV+Oe0OrcV/BSjzKVojHv21OxFO96XhlSIEXu1Pw17o1+Iv4M454um41/ib+bBhgAD+qxXsM + 3j+kHRD4iPh4yoJPZxYF4A0M/ucY/AsBeM4HbPAAMx68P2bDO0NmnBsmhkw4O2jmZxveH3fiI/LzT7nt + J3N+fLrgi2AjscmPj4UYPOfGezNuvDvtxHu0Pe9Pi/LRXrw/K0RhP95l7Hp2JoA3ZnLx1mwpXpopx39O + VuFX8614fOcgvnFgGrcKAfiiTTi5LyIA7926FYPdAwiXVCM3+/8TgCOi6v8mAdiZ/XeC7uchrnFJAM47 + v952wX7/03l8UfD9Iv4nATjg8SPbF0BedhDhUAj9ne0YH+zHUFcb2mrL0FJRiN7GMkwPNGHLVA82T3Zj + vLsOfQ1l6KwVInBBBOQZHfVF6G4tRSfR2hxCdVUQgUxya6cKFsb9ehM5jWodIcrf07aYhKD1PwvAYh5g + R06yJAAHimm7y1TIIoQY7CsmNxeZv4UZcORlwJabJpVUFsKuJUuUVhaCaRpECVxzIB1mIZwSFto7ARPX + 6Wiv1I54KOyxUIrpAITdpD3VkvtKQixh9PEYtJUmfwRG8l09ebHOzW3dtN3OGCKa29LOekVGMP1YgH6N + nFmsU/E7hW0NOdw6aGl7dS76OHJjW5ac5yUE4Azulw6DVwjNEYHXKGy4N1U6B9EK8dfI9RHxNyIAiyxl + qbSvW2QP83dE+WjaYQVtvoCSv6XhtS2JwAZek8nLmIv7mHkdSyWQRfarEBGDeXKEeB8rslIZzyVhmPvM + cd893Oc4/eaVBXpCh1M5ahyjr9nN31swrMaonPF9ahTa0hnrK6MwpF6J9ZrVmFOvw1ZdLPYak3CUfOFK + pwLXOBS4waHETRbacIMaX9Vr8ZDBhEfNVjxitOAeowFfMmpxhUmNw7oMHDTIcVivwCGdDPsZ5+3QpmOW + /HiIx2ylf66kf87jPQ/4RDnoNezXq8lB1iCP5xUiPyim/yw0xSCX/ldklPo8SXDxukQGrRB8xbUbJQGY + /dGbSL9I3rEIK++XgBB+BYzc3+BM5HPkvaVf1LAVL0pp7UlQ25L4mb7bwj5Ev6+zrIOdPtbp+7wAXFqp + kwTgiioTCgrJQ7JT4SZPcfG8xDQKQgSWyj+zvwkB2LI4jYSowiGmq9DT/+ms9MtsTS76XP6GyRPP62Cf + 4nXo2d/U7I9K+noVn7+SPln0Bbk1Buk85zRLDFJ5P5L1a5GsXY0U3qMME7kG+Y5O8CDeT1HGWqo4Qs5h + Y8wpBGAH40cPY1nBc/LzNChh3FYVtqCmyoy6arM0hV+Q48zLZ2I3igSQOLa8frPgbeJFPvICUb1FVABk + LBxkbJvDmDeLManXTd5iE5WoUmibuB3h4D11kSu52Xr42U9+J/53zuYYycuUoyCoQDH5mEBJrgqFHEt5 + /P0Cjo1Csa5Qi5ICDXJoA3y8h26RAWxRkE9qoNcqyD3l0KtVkRLQbEUGsFItMhgVkIvyz4p0aR7flHQx + n6/IdowIwCKbV8rolaUhKTmBiEdiipj3VGQ9fiYCC8FXQOy7hPMCMPu9TgjA1ogAbLFbJBHY7WNc6fcQ + YsocNxw+O+xem5QJLGBzmckj9eSIaqkUtE5Mdeck95QE4KxIFnCOl9zLAU9AiMqMxRx6bsPtOO5cHH85 + YuqpEhNaqm0YaHZivN2J2W4P5nucGK6RozecwPhqHbrDqzDaHIuto3Lsn9PhyCaO+20GXEFcRVy9SYuL + R1JwcX8STnUl4lRrAk63xON0YwIub0yMoCGZbTLONKbgqgaiLhFX1SfiiroEnKqNxf7SFdhZvAzbQ8uw + uWQFNpasxELJGmwqXoPNRWuwkZgviAjAM3nRnwnA2YR/NbYEIhnAB/PWnReAT5XH44qqRFxdk4KrK5Nw + OT+fLl6HS0ujcVl5HC6riI8gzG257ljhChzMicLB7CgcCUbhUiHaFi3HTSWrcVtpDG4PReMOnsOdeWvw + lbzVuDtnJe4MLme7Cl/LXyOJv0sC8F25K3F7cAW+nLcCtxWuwvU81tW5PGZmFE64o3DKGYVrPFG4i7/z + UH4Uvl8ShX+uWIb/bI7GMx3xUsnaZ8kz/1IehSdLo6T2maqVeLluLf7WGI2/1a7Fi1Wr8LfqNfhbzVq8 + wfVvN0RLAvC5jkScHUjH6yMqPDekxm/Jf7/erMfBfAXarenIVNLf0J5azCJOUcFmF8Kvjn1KiL/0016T + VD48UkLcSHujh8mmi8CqhZmtEHkvFIDlqlQp+1cIwyJ7WLQafhaZwwpNGmSaFCj1aYx1OG7UyUhTJUKu + TT4vAGsWsSQCCwE4IgLLYTQpGU+oyav0cPMcM/1mxnYmBH1KeBlP2bUr4NcvRxVtZyd9VmcwCbU2kai3 + Cr25iRgtycB0tQZz9XpsbbNJWGgyYEM91zXo2GoJxv/8PN+oxeYWA7Z3WLC13YyNXJ6uUaCvMA59oTgM + lSVgrDIFM/VKbGzndw1q6UXySscKFImEJ3UUAqooZBuiUGhdiQrPOjTQ3vcWpWO4WIax4gxMlsqwsYG/ + wfE212xFb7mS556AYvrtQnKOItr/ItrzkC8eYXKe6pw0tBar0VmmR0+FGe0lYpq4OJQ4VqHIFsX9liHs + W4Zq9q1q9icBIQQ3F9EXh1djiPHMWFUsxstjMF0eiwX2+Y0VsZjn2J4pXonJ0ApsqU3ANo7RLfUpbFOw + n7GTqB56Ra8K13Rl4PqWONzeHoeHGRP9iDHRP4+q8K9javx6VIPfD2vwpwEhAGvxDOOtZzoUeLZNjmea + U/FUUwqebkzC0w0JEp5rSsYztAfP1MXjqdoYPM2x/0xdLJ6vFxnBSXihOQUvcJvnmpPwbFMinmYc9nRT + Ap5pipfwrBCDW5LwIvFya2IEQhRuS8Rr7Ql4vYdxWc9Sieh0CW8wVnutMxFvLQrAHwgBmPh4UImPGQe+ + w/Vv026dWxJ92f63ArDIBB7iOjHX77AQhJPw1mDi+ezflzvW4NXeWLy3PuPzAvB+xnZ7LTi3Q4fXNyvw + xpwCb88whpxS4ayoNrVejxfHjXh+yiaVgX5hVwGe31uGvx6owhP7K/H7i9vw/E0zePehixDVaFiDaj1h + WosKkoywLRlhMYcCyZU1Yx1U8cuI5VL5Z0PqOthksXApE+HhwHMrGZzL10kCsD1lOaxJUfDK1yCoS0CI + xxDzEVZmG1CWpUPIr0IBB1qBn87etzj/r1uU5UiT5gDO9qQj1899igxoFn/U1XsldNZ70NPsxUC7D4Od + mWzFZyfa6y1oqtJL5Z+FACxQXaKSBGCBKrG+QoeGsB6tYQ26wqnoD4v0dBpn3txbFjLw2FEj/npHDt56 + OISPvhMGflIF/Iztj0PA97Px8bc8+OAbQgC2RPAQg/OHbPj4ETs+/aaTrQsfPxTAuXsDeOUWH/5yxotf + HnTgB9tteGTOiq9P2XHftB93TwVwy5gbVw9acbBJjg2hdeh0RZFsRmEsfzm2NyTiaK8Sp9iZjnbG4EDD + ShxqWonLB1bhtk1rcd/BdXjs8jj84rZ0/Ol+NV74Dh/8Tww49zMrYce5H7tw9vtevPmdAF64z4c/3erB + v1xmwv3bM3BJuyhvRgLtJZG2rUITyWuVPgYVfOZhEto6kqG2gAp9uUYMFljRk2NGKx16rXizy5IKu4YB + iDoWWgXB561RkJDy2QtoCbWKgRfXa9mK7IslAVhk/+oUa6BnfzApo+koYs8LwAJiWcBnZxDGoC3gSoff + yfU2ElWud9PBSAKwLUMSD+wie8OQCAf7pduSLsFjE9nCcu57oQCcLGX/5gZIjv0xEnIDsZHSzzkpCBfI + UBVSoLZUiMDsbyH290KBVJTlpyLbuQ4u0xoYlKsgS1lGrIY8naQ3Q1x3GnTaDGgZNKiUqZDLkqCQM9jj + eqNBAQsDDJtNS6KpY8BuYmBgRU6WA0V5bpQWuFFb4kN/Qz6m2osw216A0Vo/GoMqlDsSJdQzcOsOmTBQ + bsf6Gi+NeibmWvyYqrNjOKzGUFiGKTqKuRY1NrSwHxEzjVxXn4GJ2nQa51SMVqRgtDIVI1VpGK1Ow3it + ErN0RuJP6YgAnIzN4q2dWiEAx+MiGleRASwgxN99NJp7aUD3c/2+llQa8DSOFwUuHjbg1KgJJ0eNuGTU + jNMTdlw6ZsPhTg32NmRgX0MajrVm4LIuGa7qTsdtNOoPbXXiJ0fz8fiJfPzkZB6+fywLd82pcd1wAq7o + WosreqJx27QGX95gwjXjWlzSz6CsW4kdLXRulQnoy1+LBs9qhOkAi+kIyyxRqCfZ6c5djuHS1RgPr8F0 + 5RpsIHHZ3BiHbTTye9t5vj1KnBw244oJH65fKMa1c2FcNhHG8bFynJ5vxU0Hp3HftRfh2/dche98/UZ8 + 8/4bcf89V+Pm64/g6IFZ7Nsxhp1bh7B1vgfbpztxYKoTx9e34dT6Flw2XIuL+0qxrz2I7a0BHBwqxLHx + EpyYLsElG0pIZMtxy8EGPHB5L77/pfX49X3b8edvHcELP74Sz//kWjzx6OX43u37cdvJaVy6qw8H5puw + b7Yee6eqcGCiDBfP8hw3FOPK+WLcvCuE+y/Jww9vycdvHgnjqZ9W4MV/C+GVJ3LwuiQCu/Du81Z8+IIF + n7xowafPGoG/GID/1AC/V+Kj3yjw/r/K8O4/Z+Cdx9Nw7gfpeOfbxDfScfa+NLx2txEv3V6AJ64M41v7 + SnEzf/fisVJctL4WOybrsWmyEdPr2zG+vhPjY51YP9qF8dFeQpQJHcX8zAS2bJjE1tkxbJnsw1Zuu3Wk + HgtdReyzbhIePRbYN3a0p2NvtxwX9atxcFCDA31a7OnRYGeHCgu1CoyXpWGY42+YY3MwX0NbpKMd0tEu + 6VDjUqCUY71Qnyhl/gZpi4KL4m+WJgEBNQNwjSgBzWCMcBhSYFkUgNWCHCoT/k4AXoL0RmFGItskqfyR + XBJ/ZechicHqDBgMKo5pI7Iy3WhtrsWRQ3tw31dvx3e//SB+/pPH8E+Pfxff+/YDuOby4xjsamQwaaNt + U8JlZnArSkA7tPDTLnhJlL1C/D2PiPgrCcDmNDh57g5dEokog3dDEvzWZGTTHi5lAOezLabfFGWfK/yR + OX+rsunnckQGoxGtRTZJ/O0N+9AZcqIxx4gablcbEAKwjrbGgAYGyfUiA5h+uIrHKrOnSmVuK91yfpaj + LlPN7XRo4fE6QnaM1edhtrMMG7rLJQG4ozILYZLmHNrmXKecvlyDbD4jvzWD15wq2WeHKANtSodTgOTb + SULu4TP08loCbl6TL4lBYxJyM5ORI2UAE5mRDOCCfHKEPIUkuAgRWLxh7ycCDLgDrgSS9SQG6jzfIl5P + hQ3tdS7yAb8kALfXOKUM4DoGo10NWZgZrcXuXcM4wPG+ded6jE50o72nBXUtDaiqr0VlXR3ChBCBlyAy + gEWJ547BAcxs2Yw9hw9j6769kgDc3NuDClH+mahsbkBYoDWC8rZGlLEta65HaTOP2VQdmQe4sQrljRVc + X87P5ahczP6NZAALAbgURZV58OY54ci0wCWBQbrPAotbB71DBbVFDplBCMARwXcpq1fGQEjMByza+IwY + SfwViElZg/j0aKSw76drxX4EA6dUBkypYn8RQLFvKsz0Y+x7akKIzEYXn2WJHwVVuSiuK5IE4MrWMNsy + FNUUIC8cRG5FrrRc3FCMqvYqad7f626/Fnc9eKeUAVzRVotQXZmUAVxYU8LjVKCkoVJqhQgs5kvOryyT + hODccAmyFzOC/UW5cOUGYM50Qec2Qc1AUuvUwOAxwOzTS7AFzPDmOpAd8iG3LAvBkgD8BS4EChzIL/Wg + uj6IkdFqbJhqwObpJmyerMP8cBlm+gsw3sHvWjMx2hzAcBO5JHllP23UQI1LwmCNGyPEeJ0PU42ZmGkJ + SpgiB52sd2G22UO/68R8ixULDOYWWnVs1fysxJZ2NXZ0G7Grx4wdXUZCh4PDVtpxN27Zl4P7Lw7hW6dD + +PalOXjsEj++dciGh/bocN82Ne6cV+GGSRWupv87M2XF5VNOnJpw48iQE/v7PTgwloejs5W4ZHM7Tm3r + w/4NHZjqCqOW1xwwiwwFMzr5LLbM9OHInjmc3L9JwiX7N+NS4vSBLcQmXHbRZgmXHtgc+Z6twPE9szi4 + cxL7toxh+9wApkdaMDFEuz/agpmxDsyPd2HzBP0g7fvO8T7sHe+lf+jD4bFeHKMvODTQhn1dddjdXoHt + TcXY2liA3R0hHO4L45KRWlw10YprJtpxA3HjSDMubSjBsfIcHCvNxtHSLFxUnIlt+U5M+PXod6nQZleg + iZyvmigjvytyKFDk1iDfo2PMoEPQRVtqV5L/yWhb0qQXfqxi2hFR9pmwiZLzljTaoM/DyXUC4uVCAc9i + dRlRWlBATEci7JPbyrjGlkRemYQsTyptFG1SUIGCXKKAton2KTeHdl38CUjblZUpQzCH8UyeClm5KmSS + z3m4ziJKJFrioDLFcnwJ4TMBBiH+OlL5Hfmsn7w2SwV/njqCHDWy8nUoKrOhsIS8MV8PtzcDemM0NLo1 + 0BjXSdASQgQ2WOIlSH8W83eWBGClNhoKzTpJ6FWR56v18RKWBGAhDGtN3Je+xexMg4nn8pkAnC5l6og5 + CQWWsoAFhAAs1onM3/MiMJd1dlGyMiIGG1zxkYwn7mcSIoeL3NgcAzEfss7M7QWEAGzm+YsMZsJmT+B9 + NaCnuxi7dg7h8KFJzM42oyJsh9NJvu8U5S5TpXsqBOBM8oIs8oNAtg5e+jaTmRxcsVYSgOPjo5CSskoS + gJPT1iIhnZCtQyKRIoumn49BBmNYeeIaKOJXQx8XhdyMFejgOe0JKXFHlws/HhPz/7rwzHojXiBXeb5f + g+f6NHiqX4enhox4btKOv0zb8etRPX5Kvvqvkyb8bESN77an4Fv1cfgRufOP6xLws9o4/GtDPH7TFIc/ + dybjhb50vNCVvCgAr8RT1avwTO0avNKehNe7MvBmH4P4YQ3eHzNI+IC//+G4CZ/SJnwyY5OAWaeU/StE + YJEB/PG4He8MmvB2nx7vDJnwrhCCBy14l3Hm+6N2fDTO+FTMBzzrw6fz3G+jH9iUyTaAj3mMD6adeGfc + hnPrrXhnzI53RTbxpFvKHv5wxov3prx4m3hrKhvnyG1fn6/Esxsb8IctHfjn3QN49MAEbr1oAy7fv4CL + d2/CoR1bsHvzJoz0DqK6rIa+vej/DwH4szLF/1fiM3GW/kZgUWj9DEEJfyfsShDffX57se5zWDz+Z7/x + RQF48XfP4x8LsUvn4XQJEXgR3F+IvP81xDUWLCL//HqbtN9/JQB//nw+XwL67/H3AjCvU0JORAB2BxiH + +6Uy0EIAHuruxNTIEMb6u9FNLtRWFYoIwINN2DbTj23TfZjqbcBgUxg99SVoJRdqKMkihwuguTIX7fVF + aK4rRG11DkpLvOw7GljINYX4q9YJXr8G6aq1Uiawmjbu83MAfyYAm4XwRbskBK3zAnCBEIBlkczfEgUh + XxR/xZy2qbAG0yTYcnjMbNp0+gKTXwajL10SV0Vr9ImMX9pOrhffGbheSxuqtidCYRNzotLu2kQ2ZARC + DBMQwqxB2En/oqBMGyeyckXGrcZFe+6g7XbQznJZ547nd/QfEpKgccbxuNGQmdeQx9HWW3ntUtZoIo8l + zkecoxwGtia/nOe9BPGZ5yx+T2oj4u/57F9JOBblq5P5Gzx3e8znxF9JAKa9V9PWfyYA01d4kmDyiXub + JgnAERE4ETZ/InLz5VLFtYacDAxmp2M+kIr9vNbLeJ43BtW4u9CMe4osuLPAhJtp10/RR+6jH9uYEYXx + 1Cj0pkehRxGFIdVyjKlWYEa1Bgv0b9t1cThgSMSldhnO2OW4jjz5ZpsGd5jUuNeow8NGEx41WfANvRlf + 0+lxi16Nq/QqnNRk4KROgcsMalzOdafVShxTybBLk4YZcoleawrqnckIuRlnutciYF+JbPMqFOtXo5Ln + 1aiPRaMpAbX055WOFMZjKcghvIxNHHwuNrZCQBXCr5HPS7wUZSSkMsuEWTwjwkCI6RGMbpEBnAwV/bjS + wnsrXpgSgi85iMrKvsNlAeHj9Xzmdk88HJ44uLyx8ARikVeUhvIKPapqzaisNCEvTw5fIBkuIRTz91ye + ZDjZrxyEnc9JTE9hdvA8hPjL/mng8xXir3gxa0kENgp/zmsR/lzPY2jYD1Xsjwp+J57/kvgrE+IvfbkQ + f1PIP5J4f5I0q5GsXYd0YxzkvEcaexJ5fBL5AfsI75eFXMvm5PhyyCQB2MXxGsgkfyJ3KmLsFi43oLrK + hPoaiyQA52UxduQxLIY4mHWxsJLDODj2xbRwdhFvkrO5XOQGPvIvxrgCfvICB2Naq5Vj3pICK++lgMXK + luckYCPPc3Cdi/A6U5DF8ZKTpUQh+ZsEMfdwFuNQ9tMcIjdLjgJytHx+lyn4CLmJncewMv4S08OJCoA6 + lRxalVhmzMZWzAEsxFlJAGYfyyCS01KQlJaMZEnUTZWygJcgxN2EpLgIkuMlJKYkSpnAQiwWAvHnMoIz + PssAVutU0Bq05FQGCaIMtBCBnR4HwdjSLeYCtsFK2ITwuwirEIBFBrBBRe7IazBp2EcsCOR4kVuYjeBi + GeisXDcCQRc5l5XPTGR1amF1yOmXFMgKqFBcyLi7wkgbb2OcZcdkpwvTnXYM1irRWZ6ItpK1aC1ZiYH6 + WMwNcLxNaXBgToPjohT0ZgOu2KzHlQtaXDImpm5LwcnORFzcHI+T5E+XNCTg1BLqE9km4jTby+uScHlt + vFT6+XRNHE5UR2N3yXJsDUVhc1EUFoqXYa54BeZDq7BQtBobC1ezXXteABYZwLN5PJ+cWMxnx2JTFu1K + 9lrsy1krCcCHC2NwojgWl5TG4bLKRFxZlYwrKxJxWXk8Li2JwanSWJwWyxUJEi4pi8XxkNh3GfYFo7A/ + KwoH2V6SF4WrCpfhxuJV+HJpDO4sjsFdhetwV/5afCVvLe7OXY27gitwd85qSQC+74sCcM4K3FGwCrcX + r8HNPMa1Bctwmsc+vigAi6ozX8mNwkMFUfh+aRR+Ub0Cf2qNxfPdSXiB7TM1KyXx9z95X0T7VMVyvFiz + Gi/Xr8XLNavwPD+/RE76N657g+vONq7Du82xeJvP4I3+DLw6qsHTwzr8W78BX23UYwfHZI02CW4ZYwQt + fYZRzD+tkjLDTTYtbYuOfUO8JGBgnzPTXomXEYywOBjL23Sfg3FRABbJF0IAFkLvUvavEIBFBrAQgAW0 + RgX0FhVjCI4toxxKfTpk2lQodKlQcRyKss86C7ex8nwcPBfxArlTVAsR56KXzs9mV5NDGOHzmDiOaS+z + jMjP1CCTNsatX4VMw0pUeOPRkZuGnpwktHpXo4v9YrggEROl6dhQrcSmBpGkZMWudhu2t5qwWSRZNemw + uVGLBSHoNii5To0d7Qbs6bZgt5iKsU2PTY0qTISTMFIST8RilH1hfTgB03XpmK7JwHBJMpr9a1BFnxMy + RCFPG4V84zKU2Faiyr0GTbT3I6VyTIU12FChwUIVf7PBKAnAs00WdJXIUOmLCMAFjngU0BcVOmNRRH9R + yvWVWSloCanRVW7CQI1dQjP9c9gTjUJrFIrsUVyOQnUgIv7W5EShPl8IwMvQVboaA+VrMFy+FqMlazBZ + Go0N5XGYC3MMla3FFPvlJLGzKQ27mjKwoz4Vu+qTcLAlDSfb03EVY5wbOlJxa2scvtYZj8fYr/5pSIl/ + H1PjifVq/MeYBn9iP/vrkBbP9KvxTLcCT3XI8FRbBv7anIw/NyXiT/Xx+LMA7cDTXPd0UzKe4vKTjLWe + 5Pj/M/EU7cJzjcl4tikVzwjRmNv8hTHZXxoT8STjsSfrYvBkfQz+0hCHpxsj2cTPN4ky0Ql4qSURr7Qk + 4JXWeLzWKeKyZJztScM7fRkS3ubyW10pbFP5OR3vD8glfNgnx8cDSnwg1vWm4b2+FLzbm4y3uxMlnOv5 + TAB+eyBSBvqdoYgAfG4wCeeGuG6Ix+WyyP59rS8Of+taJ+ENfv5gXAYs6IAdVqkENPY58fE+K97dqb9A + AFbinSk1zk3o8KYQgNcbGKta8NJGL17aEZRE4Gf2FeOP+8vw5Mkm/O3mCXz88F5EzeanYyyYil4S42YG + 29V01OIP4aCBRIFBtDJuOVQJK6BPWQuLLA5u8Ye7LgUBDjq/MALKaEkAtqYshyVpGbK17HzmVJS4FajK + 1KMiS49iOuR8Nx0sHbUQfQWCrnRkO9ORxTbHK0OeX4mSPB1qS8xorfags8FPRDJ7+lt8GGzzYag9gIE2 + N3qaHOioM6Op4jPxt4aoKo6Iv9VlatRXGtFUbUJLlQGdlRr0VaRgqGIdB/AyHOuLxt1blfj5pQ68eE8+ + 3vtmMfA9IQBXAj8rA36cD3w/Ex9/iwHxI1a896Apgges+OAhJz562I0PH/bg3a+78d59AbzxlQCevd6D + J0458ePdFnxzwYx7J024Y8SE20bsuGnIgWv6LTjdrcf+ujTMFa5CnysK3Y4obOCgOdItw1VTZly3wYQz + 4+m4ciwR100n4Y7tKfjmJXL8+AYlfnEHB8p9Ojz3mBmvP27BuX/hef3Sjnf+2Ya3f2LHWz904c3v+vHS + A348dacPv73Oju8d0uH6kTjsr1qB6ZxlGHCvRAdJZINpHWqMK1FtWoUmRzK6M9UYKbBgotjF1oGeLANa + PVqU2ejgtST6mjiolDFQKaKhVpCcKknslqAiYV3EhQKwgf1CnbESOtlqGBXrYNXGSHMAZ7JvZbEfLGUA + i8/ZHjkhQ6ZLZPWS2DGQc5iECBwRe53iTzxTKteL78R8kiJTV2T/yqW5J0W5lywPj0NitlT+WRKAA9HI + 9UfTwMchFExGaW4qKhiMVIdkqCmmEytJQ1UoCZVFiagsTEZFYSpKuV0hAxiXMQaaDPb9tDVQppP0CgFY + KbKAU4k0aNR0OqoUCTptOix0gDarKC2hJSHVk4RakC3E31wXygrcCBc6UV/sxvqWQmwfqsSOQQbB7Nut + ORwnNNRVJNtNmWnoK9FjtNKGiVoXZhs9mG1wYX2lFgMl6RgoTZbm1BBlnje0ZBAySQCOiL9pGCpPwSC3 + GSpjK5bDKRiuyOB3MkzXc5/6DGysS8WWGlG+IQG7G5JxuE2Go50Kqd1Pg7mbBnR3Q5Ik/O5vS8f+9gxc + 1K3E8SEDLh414diwAUeG9DjGzwf7tNjbpsDupnTuk4KLaGwv6UzHmd4M3DquwUPbHPjh4Wz86FgmfnDc + j+8cduGrNFh3zaURqbiXy48esOObB9y4a4sZZ0YVONaTTieShOmKOIwWR6M/Pw5dwVi0+Feh0bscHdnL + sL50LeZ4npvpBLa3JmNXRzouEtnDfRocG9Dj6ADPddCCU6NeXL2hBNfOV+P0dDWOra/CiQ3tuHL3OK4/ + tglfumwvbrjiIlxNnCEuO70XFx2Yw66dk9iydRSbNg5g21w/9s704PB4J46NtuDkcAOO9pdjT1c+dnQG + sX8wF8cninF6oRxX76jA7Udb8NBV/fjZXbN44uGdePZHJ/DGL67Fm/92C176p5vx60fP4Bs378d1R6dx + bPsA9sy1YzfPadd0E/bPNODYXCOOz9Ti5Ew1Lp8vww27cvGVi3Px/dvK8e+P1uDJn4TxzC9CePmJfLz+ + ZDbOPePB+8858NELLnzKFk9ZgCcjIvDHT6jw/m+UeO9XCrz3Lwq8+3MV3vuhCue+o8LZhxR4/Ws2vHR3 + CX5/XS2+f6wed26rwyWT1Tgw0YidMy3YNNOG2Zk+TM8OYXJaYBjT02OYmBzD9NQkpibHMcvl2fEhzK3v + xaaJLmwea8Z8dxnG6/3sl0b24XRs7SQp6JFjX78K+wfU2MfntKdXi52daizUKUiGkjGQn4zhIgWGQ3oM + FBnRm0cblEl/4FaizCojIUpBHu1KUM1xrY2IvwKZmiTJD3k1tBdaMW5TGSQmw6BN5BhNhIz2Kl0RJ4m/ + aXIuLwq/Asnp8QyuxLLICBbzk8ig1Sqh0SokCBFYw6BNpxEvd3BM+5xobazDxUcvwjcf/jp+/vh38cuf + fR+/+On38MPvPIjrrrwYw91NKMxywmtT03YpadP0tHE62joNPCSzbpJbAY9ZsQhRzUAgXcoCFucvhGA3 + 7Z+f9jGHPlL4zgLat5BXjjL6STHnrygXX81gtyYoBGAdGnm/2oqs6Cn3SgJwV8iJljyzJP6KjF+R+duU + o0dTtg4NAfpLrwJhRxpKGRSXMyivpg2t47HF981BvSQU1/hV6C5xY7A6C8MNuRhtKUJXdRCVORbkM/Ar + 8DBQ9uuQ61YhYJfBZ+X58zpcVkIStRcFbl6fj/ZaXI+o9pHjS5Hm8S0MpqMwVx5BjhKhfDVKisgXinTI + z1UiyEAj4E+VXuyR4EkmxDzuPNcyM7oa/ehvzyIf8KOHXKGrzo2GMhOawrwPTUFMDldhYb4D23eOYOPW + YYxN9mCA/bSpswVV9XWoamhARV3deQgBOFRVKWUBN3d3Y2R6Clv37sXc9m3oG1+Puo52lPI7CQ21bIkm + LhMlAuwbxVxf3FCN0sYqlNXzWA0VEkqbylG+KABfCCEAF1bkwZPjhM3PoN3LQMlrhlnMueRgcGRTQSXE + WiODHX1qJIuXECKw0iSEW6X0fRL7uSgDvYTY1LVIlMUiVS2EX0KVzG0SkahkvxdvztJniWzgJRFZy+OY + GChlhkQGcC5CtUUoayiREKotRE55EFnFAWSXZaOgKg9FdUWobKvE3M453HjXjbjnkXuw8/AuhFuqUVxf + jpKGMO8Br5v3YQkldRUorqtCUU0FCqrDEnIrSxEMFyO7tAiBIt6HoiAceV4YAzYYeC9M9KPWTLMEW5YN + 3nw3soszkV+Zh3yeZ3apH1khNwrKfKhuzEFffxkmx2uxZa4F2zc0YutEFTaOlmBDXz6menIx052Dyc5s + rG/1Y7jJg8E6p4QhYqzejdmWTGzsysPW/iIJCx3ZWGj3Y1tvNnb0BbC924VtnQzounTYTuzo1dEHGHFo + zIbjk276GCcODhtxYr0V127x4u6j+XjsTDl+fE0pfnBFED+81IvvH7fhOwcN+OY+Pe7ZrMENk3JyPgWu + nDbisikbTq6349CAGbsZPO7s82D3SB72j4dxcKYe29fXYrg5X6qqI8rEF/j0aOPz2TjRg4M7Z3Fsz5yE + i3fP4+SeeVy6byNOi8zgAxsJtgc3Sbj88BYJp+jvju2ewuEd49izcRALY62YHWnG3Hgb5ic6sYVjZsd0 + H/bODmL/9AAOzY7g4vlxXLZxAlcuTOKSqUEcHenA4aEmHOirxb6eKhwarsFJ+pArZlpx7Vwvrp/rw00b + enDLVBeu7qnDqfoSXFJdhItrinC0ugAHKoPYXOLFdAGfRZBjN9uEzlwrWoi6PBtqub6aHKqy0I3yPBeK + sq3I43UH3RraEzXB1htBNtfnZBqQ+0UEIshnPJKfbUBB0Eg7YkQRbZ1AiPdToIi2VCCUo5FQkq9BOW1S + VbkZdTUONNZ7UFNFXleoRV6eEkX8PsTlAtquYI6K0MCfpYDNkwKtWYgSsWwTYLRFMmCsjH3stOPOADlw + tgqZ3D+rQIusfD2yC4zIKzJLAqcocWx3ibfh10GpXSO1GkM0tEaBGEn8FWWghQAsBFYhACu5jSjxLNdG + WkkAlkTfiAAsIMqkGm2pMDvSeS5y2prPMoAFhABsEn/oE0IwEVlzAkIANnOdyAKOCL8R6B08D0KsN5LH + Lu2rscVBbYmVzk3cB3GuAiLzdyn7V8DK8y8sMGCgtwz794zh2OFpzE43oqLcDg/vocj+9QbS4eM9DYg/ + X3O0EgJB3iP6KI9XBb0+QSoBnZAQhdRFATiFvD0pnZCtRXLGWqSmizmC10KeTD6fsArq+FUwxS1DQRo5 + pXE1duWk4rYWM3444MRvhq14dsSAs+MWvDvB2GrUjFc4pl8i932J656bsuLPEyb8kTHbH2cs+N2EEf8+ + pMG/9Svxm14VftMlx69bU/HvTQn4bVMsnmxLxHM9KXihMxlP10fj6dp1eL4uUrbsby1JeJXbvkYO+2aP + Au8MaPHukBbvDevwPs/hkwkLPhEiMO3Cp9N2YNYNzLjwMc/r3UED3qb9EXh/yIwPhi14b8iKdxlrivZD + xp4fTTjx6ZQbn0yL8tE+YGMWsMGPj0S2L+3M2SET3qL9epvtuREb1znxwbgLH04wtp1w4W22ZycCeGe2 + COc2VuG1Ha34885O/GJXL+3XMG7eN41L987h+PYNOLBlAbsW5rF+YAh1FXUIZubD58kl2LoLJSwJwEtY + EoD/78KFAq0k0v6doPuPhN8Ilra5MCv3wn0F/u7454XWJeR/AV/8/vNYEmyXIETe/w4OV2EE57OAl76L + CMB//xtfPJ//Hl8UgCPLvFbnogDsylwUgAMoD4Uw3NOFmfUj5GL9GGhtQGdNyXkBeOfcIHbRr2wYaMZo + axX6G8rQWJKFsiw7ivxmhOnrq0sCCIf8tBF2BLONsJNnGo1C/BXVfaKRpuC4VkdDpo2DyphI3iQ/L/5a + PHJyKPEiSupnL7aILM1FAdidnyoJwEL4Fa2AKPvsypfBkp0Mc6YoF50BW5DHyxaZtXKYfAroPbLzMNCW + C4j1otXRvmtp59V28jPafLU1AiGECeicKTCI8/HS1nqF+CtE5YgIKzJyRaawKLMrRFaRRSwyeyOIiK0G + XofGniCJhTKjyLSMgYx2VEE7qhLHd6dDz3NYOi8zOb0lk+efpZSwJARHBN/PfluI19L1cVnMXyx+X2ET + WcaxPG6clPUpsoHFelECOFICOkkSf5cEYEsgkmFtzUzlb4gqF4nIDqaiLDcFrTlpGCff35udgct4Drfx + XL7O2OUxxijfK7DgO0U2PML2FmcGTtNvHZKvwNb0ZZiULcOocjnGNSswpVqJOfVabBRZwJoY7OUzv4Sx + xpU2Oa63q3GrXYu7LFrcZxYCsAHf0BvxiEaPr6u0+DJjuGvVclymzMAVXL5eT96l1+MGtQZXKuQ4wvhv + K+PHUcZdrbZElDnWIc+2Ernm5SgxrEKDdi16dLEYI+dab5Nh0CVDj0+Jep8MZR4xVU88Y7gYOO2iqkUc + fSt9oYAQgN3xUqllAaMjQfKVBifvm0uUSI70B/GSgNIsfGZE8BWfhSi89DkyD3AsbO44Hl9MixANly8a + +YUZCFfqUV1jQUXYiBzeYy/7uIt9xumM43YiO5nPgv3G6kyExcHj2OKJyDQMOiv5iSUiAGvM6xaF4Jjz + /l0j+iGvSQi/EYiM8EUB2ByDNPa9VHKcFEMMEnVrkaShv9VEI52cQwjAKp67ELO1jDP1Vv42Y0CLnRzI + Ll/MAs6Ax5eOTPbJ3FwFSooZ21YaUF9jRnWFgXGhKOWcBLOBfEEbyzY+UmHKkibNIWwTySE8jtuthM+v + keD2KGG2p5FfJMPA52m08F4TBsF9TBxDRvIVAR7LZIqH1ZIIF+NsH8dLMMC4M5Ngm8Xx4Oc4FQj4MvhZ + gUw+bw/HsJ3XZeT+OvF/oJpjnn1LQCNEYDVjMpVCQkT8lUPG79KFAJyRRl6SKrUp6Z8XdIXQuyT8JiQn + LArACdL6dJElrMhAmiyVSJOQLs0pnC4dX2QaL5WBXoIoB2132SVYHRbps4mtxfkZjHYDtCYN+aIccl6H + xqSG1WWBP8eHYEE2svMYX+VyOT+CzGwnvD4rt9Fyf/JY3uvMLDUKCjSoKNNKVTl7G40YbrVitM2CvhoV + 2suT0VS8Do2hVeitjcdkjwxb1iuxc0qFi2Y0OLZBg1NzWlzG9uSoHCf703CiMxHHm+JxvCEOF9cn4MQi + xPLF9fG4uDYOJ2vicaomhojFxVUxOFy5FjtKlmFzcRTmQ8swX7wcs6HlmCtaifnC1RIWCtdJAvBcYTTm + CmKl+X8XcuOwMSce2/PisZuf9+dFSwLwoYJoHAvF4OKSWJwWwm9lMi4PCwE4AafL4nFJeSQ7+BIh/rI9 + ymu8KH+VJP7uyY7CPuJQThRO5UfhTNFy3Fi8GneUxkrz/95THIuvhmJxD3/j3nwib63Ufr1gHe7nuV0o + AN9J3FW0FneVReOuqjjcVLoaV+byuIEoXC7mAM6KwteKovBo6TI8XrUcv22JxrO9qXh1SIZXu5PxfP0a + /KV8Gf6D2/yR90ZkAT9fuRIv1q7Gi9Ur8ELlMrzI/V6tW4M3G6Nxrjka77fH4xz3fa1PhpdH9fgr+e8/ + 9xhwe40Ws/RRRRnRsKZyDGjoAw1KjicVdAaFJNgKiKp5EqxaKeNXZP9KGcDi8wVYEoDFPL/yxbl/pexf + rpeyf3lMIf5Kx7RpGTuZaVtNMHBZa1ZJwq8QgtUmbmNR0kZqGXsZ4cm2sw+7pD5bGMpCTp6PdsEkZf76 + fGaOYwuyAxbGelaEC20oZryVS9tc6IhFNf1WR24qBvIE4jFWlIjp0lTMVWRgc60KO5u02Ntuxv4OC1sj + drdqsYvY0aTGljo5tjbIsLNZhf1dehzqM+Ngjwl7O8Q2amxuyMB0OAFj7CtD+SswULAco1yeqkjCeFki + BgoT0JUTh3rvGlQ6ViFsX4kKx2rUulehLRCDiTIF5iu12FxtwLZ6M7Y1mrFVvHBRZ0B7kZi+NQ4hXkMB + bXcebXcBfUYh/VGIfqPcl4imQiW6yjk+692YaA2gr8LI641HkW25lAFc6VuGmqxljLvFHMDL0RxagVai + s2Q1+tnvhkrXYoyYCsdiQ2U85tgfZ8MxmAlHY0NFrKQH7G1RYnd9GvbWJuBgXQJONibiTHMivtScgLvb + E/BoTzIeH5Tj34YV+I8xNf68Xo2/sH2KeHZYi2f7lHimW4a/MiZ6krHRH7nf7xti8buadfh9bQz+syEB + f25OxlMtqfgL2z/RJvyhOg7/yXN5sjYJf21IwV8bU/Fntn9qSMZ/1icR3KYuDr+r5DGq1+KPdbH4c32c + JCA/TRvzbGO8JAQLEfillvjFTOAknO1KxTs9GXi3VybhnZ40vCvQm473ejMkfMBz/bBXTmTgo35+7kvD + Oxw7ZzsTpLLQZ7t5nF5+Jt7q47IQgYdE9m/aBWJwiiQOLwnAr3VH4/WeWJwdTsYHEzJgXgtsMwO7GQPu + sePjvRa8v8uAN7eq8NaCCu9sUOO9GcaNU4xbGY++PG7AC2xfmXfib1v9eHl7Jp7bGcSTe/Lx1+OM424c + xKf3b0XU8RYr9tToMVusQH9WGupdKQg7SGgMyTAJAZjBsiZ5LcwZ8XCqk+HXkzQb0iQBOKAjiVaug1u2 + BnYG4A6iwJSGEod4q0CFqkwdwgEtQl4lchwk2nY6ehLjTEcqsohMO0HHm0vyXJilQVmBETUlVjRXOiMZ + wA0e9DR60NfsRX+LB4OtXvS1urjOjvZa8UevBjWlaiJS/rmqhL9ZpmbwqUNzrRVt9TZ00CH1VKkxWJmC + MT78jTU0nAPReGAXA/Yr3fjbPXn48JtFwPfKgB8RPwkBPwwC3/Xh40dt+OBBI95/gLjfRNi57MIHD3hx + 7msuvPEVJ16704vnbvHgD1dY8U+HTPjWVj2+Nq3HbSNaXN+jwVVdOlzOwX+qTY0TLQocqE2hE1qNYVcU + Bt1R2Bpei9NDaty80YEvb3Pgju1mfGWvAQ8cteKxy234xR0uPPGQB09+24OnvufCqz/34J1fMUD/jRsf + /5ZB/K8cOPdzG87+2IW3fuDDa9/MxItfz8Zfbvfjl1c48NUFGS7rjMfO8nWYzFqNQU80Ouzr0GRdgQYr + jQqJ6ADv/USRHRvKvZgMufnZhE6PDlV2FVy6RGg1JH4KBgPydVDJSQgVJKWLWMr+FW1EACbpVcdBr+C2 + 6SugzVgFg3wtLCSFQgAW4m8O+4PIAhbib9Cj4PNXIo99IIcBm8cuMn1JoPXxbBNgZz8Uou95AZifxbKU + UXaBAJztlUnlYpYE4LzMeLaxPHYM8rksBOCyPBpIIQAXZaC6MI1tMqqLE1ETikdNUQJqQ6loCZPElBpQ + wODMol4DvWwdNDIGP+z/agWDM3XKoghMaAmOA6NRRkKrIeEm+XTrSJAMyM62Ij/PibJCLyqL3KgqtJMA + OTDdVoh9o9XYPxrGXJMXnSS4dTTQAs0MngaKdRivsmCq1oHZBidm2IfHKpToL+ZzKo3HeG0yZprSJMw2 + Z0ilnydqMzBK5zRYmoaBklS2PE5ZBIPlaRipSMdUnQJzdEzCAW2rS8V2HmdfUzqOdipxrEuFQ60Z2NeY + jJ002EIA3teWjgPtGdjfKcP+bgUdmQaHBrU4OKDB/l419veosKdTgZ1tcuzieeymwd3flIRLRElnkoZb + JjR4cLsDjx304XtHPPjeMSe+c9iKR/Zr8K2DWvzgmBmPX+LAP13uw09PZ+LhfTbcOKXAyb4U7G6Kw3xV + LKYr4jFB8jjO6xgrTcAwydhYaTQW6pKws0OGPTwvcS4HBww4NmjG0SEzjot2wIxjvRacGPTg8skiXDVf + i8tm63BsvA5HZlpxcvsITu6exJFdUzi4exZ7d2/A3r1z2LdvHrt2zWDz1nHMLQxjYeMQtm0cwa7ZfhwY + 78Kh4RYcH27EkYFK7Osrxp7+AhwaK8Lp+TCu310rib/fvH4EP717Dv/xrT14/qfHcfY31+Gj/7wT7/3h + brz0i9vxL49ciXuv24srDk7j4LYh7BRZxnO92DHThf1z3Tg014WD0604PNGCo5M1uGQ+hKt3F+Irp8vw + 7Vsr8MtHqvAfPyrHc/9ahleeKMKbQgR+yosPnvXj42d9+PQpBz79ixWfPmnEJ/+hwwdPaPD+r+kY/k2H + 939hxHuPG/DO9/V4+1EdXr/fjZfuDeOJGxrx/RMtuHNXMy6eqsP+yWaeTzs2bejmPRjDwuZpzG2awoaF + KcxumMLkDDE1hfGJcUxMjGFy/RBm1vdjfqILG9e3YrYnjLGGAMZoo6fYx7Z0pmEnHeTuARX2Dqqxt1+N + 3exPO7s12NSk4jNlny1MwWipCiOlRo4BE3ryDWgRAif9SDkD/GJjKnK1CZL4KxDUJiJbiMAM2gOaJPi0 + KfDohHCaBpuRQZ+OY5Xfy2iXLhSAI1m/CRIkAThdCMJiDuAMqHUksDoxd09EAJZEYKVMgoHrPQykWhvr + cfLoIXzz4fskAfhffkr85Dv4wbcfwLWXH8dAZwPtjQNeK7e3CoHCSDunp71S89yUcJHQXigAR8RfBpVW + QlQ0YOsVts1K/0p/WeBlUBzQoJRBVjntdEWWFpXZuoj4K839uygA5+rRVmhBd9nnBWCR0SvE3y8KwNW0 + tWFbKsoY/FbQ5tbShjbz+O05JrQHDWgU2cXcpjFoRCsJcmc5fXFtNjqrslGVZ0WRT4OSTD1Kg2YUBQzS + PMCZtMXCJkuwMSAn/BJoo20ZRKTaR64/HaFcOUrzFSgr0qIsRBTpES4xobLMgnCZWRKBC3LJG7LpLzIz + JAj77neSpHNdY4WdXCCIgY4cdJIrdNV50FXrlspAt4mszvZcjA2wH47WYILjaWK2G6Pj3RieHEBLd6uU + AfxFAViUgS6sqEBxTbU012/H0ADGFxak7N+Wvl6UN9SjuK4GJdxXoFi0QvS9ACFJAOY2QgSur0RZAyEJ + oWGUNZWjounzAnC4vgQF4VxJABZz3hqcOoIBvEMHrU2Uf44IvEqTDAqDEIEjoq0QgVVcp7NHthEZwSIL + WJSCFhnAQgQWpaCT5IlIpt8SbXx6LGIzYhFHf5agWBSC1UnS8dQWhSQAe/PcyBZz7FbmobAqXxJZs/jZ + V+CVxFdfyIdgeTbyqvJ4PWWfE4B3HNqBylZx7eJaKyUxuLyp5jxKeS9K6qslEbiwrpJgW1vBY5VL2cCi + JHRWeSH8Jblw5AdgC7rgyPPAXeCBR4C+NFDCYK6C51ZXjKKaQuRWZCO71Mt76EdNUx66eooxNlKBjbMN + 2DpTh80TYcyPFmK2LwdTvdmY6cnGZFcmRlvcGGp0oK/Wgv6aCIbqbJhu8WFjdxDbBgokbOS2Gzv92DmQ + jd2DAdoxB7ZJWb4R+7WnX4eDI/Q/E1ac2uDBqWkXTqw34dIpK760w4uHThXiZ1+qwr/eUoF/ui4PP7vC + Q79nw4+OGfHYISPu267GDVPpuGJ9Bs7MGnDFDI8zbqVP0/P4Yh5hO7b3+bGtPxfbh4ox3x9Cd60PIb8S + bj3toVuNJt6PDSOd2Ld1Esf2bJBwgn5N4NJ9C7jsoiXM4crDG3Hm6CZcfXyrhCuPbMSp/TO4eM8kLto2 + LFW82DzRji0z3dg624tdc4PYNz+MQwtjODI/ihObJnHZ1llcvWMO1/HZX7VlEqdnh3DJTC+OT3TwPrTh + 1EwHrtzUg2u39OHGrcO4ibht8yBu3ziAm9Z34kxXLU43luGSxlJc3FyK4y2l2N8cwvb6AsxVBzFVlYXx + mlyM1OagvzYXvbX56Kkr5BgvQkdtEZoqc1BbGkBVyIuKkIe834uqUr+E6vIAasKZjAGyv4AsqW2ozEID + j9/I32muzkFLTTZaa4Nor89lvJGHjsacCBqy0FoXQIuwKXW0L61ZGOgtwPBAKfp6CtHU6Ect7UxDtQuV + pebICytB2qtcLQJZSji8qYviLHmxyDxxpcPhk8PpJ6embfXSnvtzNMjME+KvDsEiE4K03zn5ZgSCGngC + ClgcyVDp1kKhWS21Gr3I/o2VIMo/GyziD1xycLMQmSNis9IQQ0RDxVZNHq0xJUjQknvrCJOD/tEt57ko + pXOxiwyxCwRgkSln9iZL4q/V95kALJVP5Toxb2HkD+zPQ5SyFN9Fsn8TIwKwOK/Fc1zKWJbm/iVMXG/i + 90IADvHaRwYrcejAJI4fmcHMVAMqy+3w8x76BGj7RfavEIDFvYkgkgWcTf/kYGwpZ7yRlLQMaamrkJ62 + GqmMXSVkrJOQkb4O8tQ1UCevgS5pFfSJq2ATAnDKMnToVmBHZgJurFLhu51m/HuPAc8N6/H+tB2fzjDe + m7Dj7KgJr3Hdy6MGvLzejOfHTXh+xoZnZi3465QFT6434k+jevxpSIc/kt880ZGO34g/LprjFwXgZLzY + lYrn+Pn5hji83CDmqkrA35qS8WpzCl5rScWbHRl4h7z6nT413uEx3h3Q4oNRIz7i731Mm4AphyT+fjrp + wIcjZpzr1eAs7dDbPeR55LwfDlrwwaAV7/Wa8V6fWVr+cMSKj8fs+GDMgo94HZ9MefDJBK9pzCZlDL/V + q8ObPVqpPdtvxLuDNrw3xDh32IZ3hi28bsaW6xlzTufiXfLc17c348ntbfiXHe14ZFcfvrR7Aqd2zeLo + 5insW5jBrvlZTA4Po6GmAbmZBfC7/z8B+L8XXL/4/efxf04AjojAEURKYP/9b3zxfP57/GMBOBduV5Bt + AD5XAFmeAJ99piQAD/Z0YnZiFDMjAxjtakV3fRl6m0oxM9SCvQsj2DfHOGuoDROddRgiN6ohz8h10IaS + j4hqD/l+E3L8Rvg9arjILy2WNBj0IlMoDhlKjm3lZwKw0pAAk+uzDOCIABzJAJbENkkATpQEYKcQgAtS + 4Q9lnBd/RTloTxFtdJ4c5sxkiNLM1kwZbLQ91iwFzH4F91dCR/upJ6TWIwRhsV4ltTqXHFqnDBoH4wny + d40tHWprGjT2VGjtadA703ke6TDTFwiYBCQROEMSgEV2sJQF7IxAz/MWEMJvBOJYvH7aUhntfYYxDjJT + PBTWRChtKVA70nkOQpwW5yaHkXZenLc1S7UoAkfEYJHteyGM9ANGcX2BdOh9yVC746Vyv0L0XToXCS76 + G3eCJADrviAAm/2p5wVgRzAN7uwUZGcnM0ZIZEyRhBl+PpmnwpfpIx9mvPKjHAP+NceKX+Va8IsCOx7P + t+EhxhG3mZJxlWYdjipXYbt6FTbp1mCTfi22iMxfbQx2quOwi8//gCYel5rScbVFjpvsGtxu1+Fuiw5f + N+vwkEGPb+h0+IZKh/sVatyulOMGRTquIq5WK3CTToPbdAZ8WaXB9XIFTsnTecxkTBqS0GWOR6VlNUKm + ZSg1LEejYTVG9HHYaEzDbqsCu9g/N3u0mA7o0Esf2uDNQDH9WJYxGj5LNNwOIdKKbN94cmrCRV/njMAg + vTCVQCTSb4p7l/o5Afj8lBH070IAlkpAE2J7E/e18Bg2ZzTszrVwedahoCADFRV6VFcLAdiAbN57D3/T + 6RSICMBOQsr8tdNPL/pfg0W8RBZD/yy4g3hJS1TqiAjBEmxcTwjxV0DFa4ogQXoZQBKBuW86zzWNHEeI + wEnkJ8l8Ril8RhnGBMjN4pri2f/ZbxhnCh6iE7E5x7DVmiEJt3b2VwfPzUPuEAikoqhAjkpeT321EVVh + PYoYJ/qcPPdFAdhEzms1sY+ZU3kMHoexshCUrYST49HpVvH+sO9bU6A18jcNiWyTJGjEVBj8rNHxvhIq + 2gyNjnzKQF5CbmTn+HRzbLrdGWwzaO/SeQ/TziPymb8rhGR9LDTsg2pVCjQqjnNV5GVx8V+BRqWAkv1N + QIizSwJwmjIDKbIMJGeksyVE+wUBOCmVsdoiRPZvUmqi9J2M+8p47HQ5Y7/FktFi3ZIALCCygHVG3XmI + UtCiDLSAyAjWm7jeYuDzN52HzqyFUq9EujoN6co08kbaBqcZvmwvsvOzpPLPmUROgR95RQEEc9zw+s3k + s5qIAMw4JDNXjYIiDcqk/961/z/m/jJcsupq24YbaNvuu9yrtru7u7tr796u3bvd3aFxdwkJCYSEeO7k + jntISIAEIoQE98YhhPMbc1U3NCR5nvc43u/H++M65lqrltecY1yjrhpjSvxtpbfJyWCzU7i7hc7KCJpL + Amkq9qWnNph1XToWRoxsWm9m53oTe8eNHJ20cHzCxPERPcf6IjjaFcIR4UpHhCcp4ffoR5Bt9QEcqfXn + cI0fx2p8OFq9lkNVPuytXM0WJQAL5ksvYqF0JXPFK7UMYK3086cF4AI/5vP8WcwNZDk3iK3S7hTszvVj + b64vB/J8OVzoy7ESPy3D95KqEE5XBHNJhSyXB3FK2pMVgRwXHCn1ZW/BKnZkX8C2zBXszFrB3pwVHM5b + wamCC7mqZBU3lfpwV1kAnysL5POlgdyrUBzEFwuDuL8okPuKAjTx93wB+O6cVXwmdxV3F/nwuQp/vtAQ + zB3V/lxbdBFX5K7gGrnOHfkX8EDFhfxv7SoebPXhL/3CJ8eFQ07ZeWPYwAttAfyjZhV/KvlYAH6q6iKv + AFy3kudqLuT52pW82uTDm7LvO52B/LMnVMtmfHnAyHPCQf807Ob7XU6uqzCzXnxPTtha3KHC/S167A7x + gU4zNi1L16RBCcIKSsRVUBm9CufWP9omrdrfbNNp2b9K8NU+EyjRV83/q6C2qbmEkzLiSUyPOysC28VW + GaXPqrl/1Zi3EJviJjkrXuKpVPJLsiivLKBOOEdFVQFZOUmkpXi05CwlAGenR1OaH09jRQr1JTFUiG+s + EJ/fKL6rJ0/HaKGOqZIIFiojWa41srVe+muzjT1tNvZ1utjf6ZTWwd52G7vbrexoNrG1IZJtjZHsajNx + sNfBUfVbdL+b/d1yXLuZ7a16lmqCmShezYj0j4HsFawrWMl0eQDTZUFMlIVqv4cOF4fTmxdCU/JaamIv + oiHhIrrSfZkq1bOh0sLmGic7mqLY1hzFxiYP6+R7ackJpSLJj8JYP/LEPueI3c47KwKrUtAlSQHU5+jo + LHUwXJ/AhMS0A1VR1GWEUBK3kvLkldRnrqJJ+l1r8Ro6y9d6UbqantI1DAhGyv2YVGWf60LZ0BAuCGOx + LljDJlne3W5hb6uZXUoArgpkb4UPx6p9uLLOl1sa/fhSdyjfH9Tx61Ejj4wY+MuYib+fxVNjFp4ZtfBU + v4EneyL4S0cYj7UF82hzAA/VruU3Vat5qGYtjzYG83hrGH9tj+QvrRE83hjGwzWBPFwdyB9rQ3lc7usx + wR/rw3ikPpSH64IEgfy+2o/fVKzl91Vr5bMA/ixx2N8kBlMlpf/RrMpKB2lzBj8rcduLbUG81BrEmY5Q + 3uqK5J0evYwHQa9ajvgY3ZG8263T8F6Pjn/2y7IqG90ZzGsyll5uD9BE4DMS/2noC+bMgFcEVsKvEoHf + HonUljUBeCCIV/oCeKXXj1elfWM0TBOAP5y3wiY3bI3iw21RvL/NyTvbHLy+2cqbG628LZ+/N2fn3Rk3 + b06pOYAlTp108uJcNC9viOeFjYk8vSmZv2xN528HS3jl2m74wjwrbp/M5rL+RHbWOZgoMNKcGE6FENdM + 5aglaDaH+OCIFNJhCiXZIds9erKEcGW59KQ7JDgX8p1s9iHV7E+GJZjSeAuVQo6qUmxUptooS7FQII45 + U4hwSnQ4yeI8U6JCNKRGq4zQCK8AnCkOJM9NdXE0daXRtFTH0VYXR3djAt1NCfQ0x9PXIm2LbGuKkc/c + MnC9wm9NqVlDrTigugobTUIeOpriZb94eupd9NeYGKkOYaJqDVubLuDKdQF8Y6+DR69K4rV7cvjgK3nw + P6rscwH8b64sp8E3EmS7BNFfdPLufS7evVeC6/sSeOfeRN64J5GX7ojh2VuiefLGGB690sPPjlr59g4z + 9y2YuWO9hWv7jVzSLs6sSS9OTOdFk46jzQa2lfkxlbaCifQV7Kr34+pxO3dtTuTzu5L42vFMvntVLj+7 + tZjffaGUv/xPKU//pIQXflXMyw/m8dYjOfzz8Uw+fCwVHkvmg4cTePfXcbz9U7mvH6Ty+ncyefXruTx3 + Xw6P3ZzON/e4uW3SzPH2cDYV+zOdHcBQii9dCStpj1tNt5DD0SwbM8XxLFWmMluSxFCam+4EuxgeMwkO + IU9Wf4xGCbL0azEbhBCeJwA7TIHYz8Ip37/HKkTVLEGC7GuMWIkl4iIchtWy3ccrAEtfyE21kCWBVI70 + jfx0q3z30kcEuWkmb7kXhx9uq4I/HpuQXjX/rxBzVepPIcYZpmWaJSkBWAKutCQl/kqfTNeRkxYqwWcw + uekqC1gcVUoAebJeJIFIuZqLJl9PbYFOEEFtUSh1JcE0FgcKgmkpjWRE+tdocwp1BXaSJLiKtshzqUxn + g3peadW8x9YwHLZwHJr4Gykk1CTBqZ2UZDtpqU7SM1zk5qoJ5hOlP6fKNZJoKIqjvTiWhc589o/VcGCs + gg2tyfRkR9KY4KehLS1EDL9V+qmbmboY5hpjmW1wM1ZpZECIwmCpP2Ni6CYbQjRMN0UwpQnABkYrDfK5 + joGSSK8QXBbBgGBQCcBV4sjqjSy2COkSbG3Ws70pkr1teo72WDjSbWF/m45dSgAWY7m9MZTdbZHi3Azs + 7tSzoyOSHdJu75LlHiM7uo1sk8+UCLtF+vhWcWrbm8PZrQRgMYKXD+q5edLKF7fE8q39ifzP4Xi+dyKe + H56K4yeXxfHgtYn88dZM/nRHjrS5/O6GXL5zNIE7lkxcMhzCrlZfNsm4WKoNYaFeyKI831KDUaBjgyox + Idfe16+EXyuHRlwcHYvl6EgMh8TZHup3ieMVdLmljefkaB6Xz9dx2UIzRyab2DfRwuENgxzevJ4diyNs + mh9haX4diwujLC2OsXHDemZl2/TskKyvY4usb58dZs94D/uH2jg8JOcZrOPAcCUH1pVxar6a63c0cfex + Lr56zSi/vm8Tj/3PHp752XFe+90VfPCXO+DJL/DWH+7h7z+9jR/edwl3XLadk3tm2L1Zzr+gSk2PsmVu + mF3S7lsYYddUP7vGeti1vpX9k/Wc2FDNVXuquPNUBd++o4ZfPlDF49+v5qlflfPSo/m89qcM3noii/ef + yOCDvybz4V8T+PDPsXz4uId/PurivYc9vPv7aN7/TRzv/iyOd74XwxvfjuGVr6Tz7OerefiGNr59rI3b + t7VydLqRXZNtbJrpYsPCABs3z7Bp2wY2bl1kcXmB2cU5JmdnGZ+aZv3klLTjTIyvY3r9EPMTfSysb2eq + t4LRxjRG61xMtcp3Jk5yqxDJbYMWdgwLBs3s0ERgB5uFQE1VG4T06BmvtDNW4ZG+LvYn30lrpp3aZDMV + cUaKJeDLkeAtV5AntiDHEUq2XeyJPVQTgVPPCsBJau5ZdzgesRNWa6AESRKkfkoADtMFaQiNDCJcH4rO + FI7ZLuRVSKzTaZGg0IhNoARgswR3ao5vqwRw8bEeWhtrObJ/F/fdcyff+dYDfP87X+UH3/kK33jgHk6f + OEBXaw2ZyVFi6ywkC0HNTPKQFu8iMdpKgttE/DkBWIirhmgDieJPk2KMpMhzpsUK4vUCHZmJegrFPlbk + OKkp9FBfEEV1lppW4Vz2r4PabK8A3JDjoFU+7y5L9ArAYs9bct3UnxV//00AFjtcGRNOpQTm1RLUNiYb + 6JLz9eVF05Mjzynnr08xU5cmx2Y5aSmMob08mY7KdGrzYynLdFGVp+bcjadCbF1RlltsrZV0lQ0cbxJY + yPgIZrLijWRqf/iJJC9NR3GOEn/Vn7acVJUquKkpj6ZWUFkWRUmRg4JcMzmZqjSXXmy6svFi86OF1Iqd + b6mOZ6gzl4GOHG25TdBZlyhtHF1NqazrK2TdUDmdnYV09JbTP9LCuvFeRiaGPhaAGz4WfyvrGyhTGcA1 + NRTUqGzVOmo72+gYGaZjaIjq1jYKqqspqlMCcL2G4kaV9dtAYfPHKNAEYDlPY420cp5mlf1aJVBZwBVU + CCpV5u9ZlCkBuFJlACfgSXJhlX6iIcaKRQIaswpwPAavCOzSYTgrAusEal1lCCsBWG1TcwEHGwIIVCJw + +FotCzhQuFugLoCACH/8wnzxCffR4BfpT6CMh1Dx4ZHWUC0L2BFnJTYjWhOBlejrFX6TSMiOIz4zVmsT + 8xNJK0kjqyJ4xo4PAAD/9ElEQVSLooYirQT0dXdcy133qxLQm6lur6O0UZWNrtYE4IrWuo9Q2lyjCePF + DfIepT2H/Noq8mrKtdLQ2ZUlcu4iUsvySC7KIrU0h/TyHDIEWRW5ZFcXkFdfTFFzubzfYjlOtlWkUVid + QX1rPl3dRYwMlzIzXiW2qJK5dXKPQ1lM9KayvjtJw1hHIkMSOPXXi52psdNXbaO32k5/rZP1zXHMdaaw + oS9Tw0J3MovdiWK/Utk+kMzW3uiz2b9mtilfOGBm34iVI+tdnJqN49RMLMfHnVw67eHmrYl887ICHryt + mkfurOShm/L4lXDOn18aw09OuPjfwy6+tN3CTbORXDml4+oFJ1ctRHPJdJT4Ghtbe6xskett7U9mY28a + i72ZjLen0SpjJE/GUYzNj5RY4TMlGYwPtLBtYR2HzwnAO2c4tmOai3fPc9mBJU34vfzgPFcdXuKao8tc + d3yzYJO2fMWBBU7vm+XojvXs2dDPzjnxP4tD7FoaZu/yeg4uj3N00yTHBRdvmeWK7Qtcs2NJ/N4C1+2Y + 5arNk1y5eZzTG0a4dOOQrI/IZ2PcuHOMm+Wct2xfzx1b13HXplFunxvghnXtXNldy8XtlVzcU8vpwQZO + DDdwYKCW3X01bOurYnN/LRsGapgXzA7UMyP7qHkjVebYuKyPdFUx0F5Bf3u52IAKBrsqNQx1VzHcU81o + b+2nUKO16/pqGRusZVyuNzXcyPRoIzPrmpkfb2FxolWgWoUmZsZqmRAbMj5YKv6tisXZBjYutLEw28zk + eI32R4PhviKa65PJVyWgM8RW5VjJyBTenBKJMzZYy3rxxIVr4m9iuviETAcpYk9Ts4Un5jrIyHNqmb9Z + Yt+zxcZm5UWRmiW+QgmzcepHTD9M9rVYnL5e4TdG+LXiyPFh0kqMFhcq1wnRoK6lso1tHuHjUdK6Q7BH + h2pwiK13xUYQK7w7KV24qth6hQTh3TESf30sAkcSlRxOdIrK+lXCryoBrTs7p683E9idGKqJvefDKxh7 + 91fLjvhg7LFBOGOC5LryDuS+tXuP9orAnigv4uJCKCmJZnxdHYf3T3P0yOxHAnCanC9NzqfmWPaKv+cL + wPLu5B3m5EaTmmrF7ggkPPwiIsNXoo9YTUTEGg2RurUajBLLWsLX4BSb6AlbRVTYahKCL6QobAX9rlVs + l3jh6pIIvt5k4dcdZp4ecvC+jGVkTP9rIpZ317k5M+LgxREbL44qIVgw4eY5GefPTEbx9zGVJWHjb4In + hN881q3jD+0hPN4ezBNdoTzdH84LfZE81x7Kc81BvNQczEstIdKG8nJLGK+2RnCmXcebXUbeELvyRo+J + N5QYPGjj3WEH/xzzwGQ8TCfy4Xgc76uM3V4rr3Waeb3Lwrt9Tt4T7vten4e3u5283SXrvW7eF0783pAS + i2282W/lnUGJZWX97UE5XvjXq3LsK50mac281mXj9R6XXFud2+UVh2X/10fieGs8nTdninlhsYbHlxr4 + yYZGvrSxk+vVnyll/B9cHGf3/AQ7FuT7G1tHa0MzeZmFHwvASQUakpI/if8k0v5n5PwX/Kd9z0Oyas/u + K8uJsu18/JuA+x+E33M4t8//twXgfC808fd8/DcBWN3j+fj0/X0S/1kAlvejnj8+jaSEVInH04SvZWgC + cF93h5YBPDc2zER/J/3NlQy0ljEvPmDvxjH2Lq1j47pOpnubWNdaRVWOcA+Jp2MtoSRIfJ0ovCTOLTZI + /bFTYgCPJ0LGerAmAEeafAj7tAAsHPP/JABHpYYSkxlGfG44yQURpBadE38VhI8XGs8KwGLnUuV6YtNj + sixEZZhl3YxD4hFbgsQHZ+FINGlwJlm01q62x0ksIa013iA2UJYF9ji98Cs9TtnuStLjUcKswK0gtl4r + Hy32Ts0frM0XLPer4BJ77Ba77E7We6EEZ3lGS3QYRk8IencoBk8opuhwTEpsFj6gru9IVPfmFahd8i48 + aWaBvJd0kwaVFew5C3eavKdUeY5UOUYJwGnh2NPEZySr+YbFfySJPRdo4nSS+JizOFcCWisDfVYMdsv7 + jUoPIyFH7HZuJDnZoZRnBdKZEchCegjXFNr5UoGLH+V6eCgrij9nxvCXjCj+mBXNQ9nR/CDNwQPyvu4S + 33W1zZ9jDj8OugI44ArkoHy/h+S7Pywx3xHBcVsIVwofvt6t5w7hzJ+VeOvzUXa+6LJxv9PGVx1KALZx + n8krAN+oxF9DBNeYjNxitXGnzcEdZivXGwxcbAhnlzmUGXuQ+AN/6lwrqXSsoNFxESPig7dFRXI8xsZl + 8W4uSfBwONXDdrlvJQL3SD+rE79bKD46y+1LekwgSXFBxMQFiJ8O/Ej8VVDVMpSYaxe/p0o/u5Ii5Hv6 + TwJwoAabbFdQGcBOlbkb609U7FrBauLi11CYr6e60kldTTRV0qppcxLj/cVWBIh9CpQxH6IhRpWbFr+r + po/wQv2ZbC1ahQ41TYW0atkapeCLTeIs63kCsDcjXUEJwIFnBWAZg8I1zgnAoZoA7EuY/ZwAHCLPpJ4r + GLM72FuBRGJ3Vb7dLTF6VLSMaVUSWt6HNtVDUhD5eToqKySmrXFSWW6jME/iYiVeKwHY7o9bvh+PHK8h + SsanfC/u6Eh5NlmPE34ifd8VqwShEIwOuUexC0ZHkAaDLVCD0SLbBAazP3qzLyZVPl74g0OOUVnDSgw+ + B3dUqAaXJ8z7mezjkHNYLf6YLIGYzGFYzDLuzHJNgcmklpX4q8co+IQALP0v3KBEYCUAS7ymcJ4AHK4L + 9y5r8wSHaSKwEoXVshJ/1XmU4HsOapsSgT8SgK1im6TvfyQAe7xzAUfFeHDIukX9ud1ple/b/hEsLjN6 + q07uK4xQvdgSm7y/GKdw1QTSc9K0uYDTs5I+FoDFPienuolOUJnCRm0ak4wC+Z5K7ZSVSzxfbqKx0kRX + vZW+Rht9DTa6aw0Ss4TSUh4oy6GMdOiE05tYXicxzoiJ7cM6iaH0HBjUcagvgkNdYRztCOFIWzBHmhSC + PsLhhkAO1/tzqMaXg9U+HK5aw6HK1eyrWM3u8pVsKbuQ5fKLWKxYJVjDYtlaNpSuZWOxD0tFaz8pABee + zQLOD2BjXiCbc/zZlu3Pzmxfdmf7sDdnDQdl/yMlflqW76mqYC4WKOH3lMr6FZxQ4m+ZH/uL1rBDTeeY + tULDrtwL2F9wAccKL+J0ySquK/PhlvIA7pZj75H3cG95EPeVBXN/WRhfLg3jAXk/XyoJ5ktF/nxRrnlv + wVruyV3FZ3NW8tm8VXyuxJd7KwP4YmMon2sI5raqtdwoz3lr2UrurVrNd5t8+EW7P4/1h/HsmIm35t38 + c1643nrhdT2hPC+fK+FXCcBPVKzg6eqLeK5+NS80ruEFaV9uWssbbYG82x0svDGUD4Svvjeg55UhC8+u + 9/Co8M1vttm5pNjAgNOPzNC1uEKDsKs/Pti9IvC/CcBOM/azQu45nPtcQdsmn2uCsFo+u+2cQKz2UcLw + OQFYlZJWArBCTJJHxrn6Q4NJxrrcg1t8mJrfNz2KjPwk8iQmLqnIpaGpgvbOOhqFdxSXZpOeHkPKWQE4 + R/atLEygvTaTzpoUmgqcNOYY6cw3MlxsZqrczIYaC9sarexqdbBXsL/dxYEOB4eEYx/otAus7O+wsLfd + zO5mAzubItjVomO/8PJjwsdPDkdzQiUl9TpkXwu72vRsrhc/U7KasdwVmgg8UbSSmXJVSlll04YyW6ln + oc7KjFy7NzuQ+tgLaIpbQW/aWmaLI6V/m9haY2dXYxQ7WqJZrHcxUBRJQ3og5Yn+FMScFYAF3izgAE0A + Lk4MoDojgtZCKwPVcaxrSqG71KllPJfFr6Y63YeWggA6SgLprQpioDaEvmpZrvCjTzBc4c/6mmAWGsLZ + 1GJgc5uRza0GWY5kk6oC2maQ9yDvQ2U/10XIePRnT/FFHC9fxbV1ftzd7M+3+yP55aiZR8fMPD5i4MlR + A8+MefHcqEnDUwM6nuwJk9gphD+0BPK7Bl9+Xb2SX8qYfrBmLQ83hvDHtgj+1KHnTxIz/bE5gt/XhfDb + 6mAerg7lkbpwWQ/jd2JrflMTwoPVAYJAHqz04VdiEx6q8tGygf8s9uRvEoP9vSWUf7SG8FSzmjtYlYMO + lBjNnxeaAni1JZi3OmQsdOl4v0fPez2RvKuEX7FRCm93RggiJd5SYrBOxk4kb/aE8JqMxZda1vKi4NUO + f870BAlCONMbxGt9stwfrAm+bw/LcaNKAI7gTVl/vV99LtcVnBkI4s2zAvC/lAC87IItHj7c6uHdrQ7e + 3mrnjS023tpk451FG+8tOHh3TmK3GTcvTNp5XvDijJOXFzy8uBDFM0sxPLGcwJN7c3n1yhb43AQrvrWr + mrtmcznaFsVMkRKAQ88KwOLwdEIGwsXxGoVE2MJJlYGWHWsiL85CfoyZbI+OTGcg2eLYi4W0VSSI405z + Uy+oTXFQmWyjWAhznhDWdHH2yeI8E50BHyHJHUiaEHRVAjr/rABcWeShvMBBTalbHImH9vpYOhoUYuhq + iqWzOZoO6fjNQhDqxeHUlJo01JaZqRM0Vjsl+IympyWJvtZEehuUAKxnpCqQyaqV7GlfxY1TIXz/sIe/ + 3JDCW/dk8eGXc+Cb+YIsQRp8XYLsB6J4X4m/9wq+4Obdz0fz3hcSefOzibx4WyzP3BDNE9eJYbzSyc9O + mPn2bh1fXI7grikDNwwbubRTib6h7K8N44B0yMMNQiBbjFwpgfXRxkg2F6xkOX8FR1oDuWXWzX07U/nq + 4Ux+emMFv7unkT99rY1nftTNK7/r5I0/tvLWX5p594la/vVUBTxdDE/Kvf41jQ8fT+KD3yfx/q9TePen + Gbzzw2ze+m4Br329iH98Lp8fn0rk/m3R3DDh4LAYpm0V4UznBTEig70/aS0DQtzHs23Ml8azqSaDhdIU + hpUAHG+jRr7jRDWfpiJR/yYACxkUOIxBH8FtDiHKEoLHLERPCcBhF2EWqDLQHouaWzeYTAlK8tKsFKTb + Kc52CZxa6e9iQYEEWmoONo+QfodlrTgXH5xWv7P//BMCLeRPIdoZTlyUjkSVMZdgIF0CnCwJXlSWWK4E + L7kSaHjLQAeRmxoo1wuhWIK+8hwhy3l66gr0NBTqaCyOoKE4iKbiQJqLg+mo0DPTncJMVxYdZVFkRgVp + AniUTYIhs5A+kzyXVYIiCTwcss0piHJFEqey3ZIcZKQ5ycpwS9DjobAgjorSZBrKU4X4pNIm77e3PI5N + vfkcnqjhyEQFmztS6MsJpyl+LY0JvrTLfY+WWKWfupivj2a+MZq5RhfrK8XpilEeEBIwWuXH+tpADRPi + SCYa9IzXGWW7kcFSPf0lOgbLIjX0CwYqIhitPisAt5rZ0m5hh3JWYrwPdJo42mPjSLeVfe16cV5hbK0N + FocXyk4x6ns7jWLUdWxqCmVJiNiiYLktnC1C4DYpyDHLbZFsadWxVY7dJQb0RJ+eywb13KQE4K0x/M+h + ZL5/MomfX5nGb29M54+fyeZv9+Xz4tfKePUbFTz/QDlPfL6En16Ryue3WbhiLIi9bWvY2ujDFrmPrW1m + gY3tHXZ2dNnY1WNhX5+VgwM2Do04tFKbx8fjOToSy/4+F/u6bezrELQ7ZaxHcbg/i8tm67hssZWjU63s + WtfIwfl+jmyZZKfKbp0aZHZikJnJQeamhpmbGWFyYoDp6SE2LK5n24ZxdsyOsGesj/2DbRwebObYUCPH + xuo4PlnDNVuauetIN1+7ej0//ewSf/veIZ7/5UnOPHwF7zx+Izx1j+CLvPL7z/CH717Pdz53kpsv2cax + 3XPsWB5neWE9Gxcm2Dw/wfbFSXYvyH3NjLN13RBbRvvYMdbDvpl2Tmxq5pr9ddx7dQPfuauWX325hsf/ + t4qnfl3ECw/n8vpj+bz7p1w++LPYs7+kw5+T+Nfj8Xzwx3je/0MC7z+awj9/n857v1I2Io23/jeN175Z + wDP3NvL7m7r4xrEObtnWzqGpZrZPdbI828vSwhDLW+bZvGMTy9s2srhpidmlBSZn51k/NcfY5Ky0k4yP + jzM5PsLC5JBWOnSyr4LhpjRG6p1MqX+89Uj/GDSzbcjKtmEL22V5+6CQKiGV2/s8LDTZmK4R1Eexvjpa + +rCbrnwnLWcF4PJ4A0VRYeSK/8iXYKwwKoI8CQBzXKHaVAWZjjBSZSwmy3Ky2IUET4TYEAk4PyEAB3xK + AFatmgs4FKM1UoinSSOZirhqRFZglWBIzQNsMKpS7+rfxg7qq8vYs2OZO265li9+4S6+8qV7+OqX7+Fz + n7mZ/Xu20FBbQnKskzi3heQ4J5nJ0aTEuYiPshEv5451Gol3G+UeFQxi76QVpMSZSZOgKj3BTHqiUY4z + eqdFyHZQLT6xtSqRzqpkanKUAGylJtNGbZa8H1mvz5H7ErQUKgE4QchaMp0lcTTnuWiQd9gg+zUKPlEC + WuxwVUwENbFhNCTpaU230JfrZqgwjoE88bVZLprTbeLLBZlyXGEMbeXJtFemUVcYL3Y0hqbyFFoq02ko + TRIiHSe23CP3bCMrySqwkS1Q83Yq5Mq2nCTv3P95qecEYCtVxQ4NlcUuqks8WquygTXxN0OvlfVX5Z8z + kyPk3YQR51or1xASW5vEut4ihrryxcbGaGivT9L+ONbTlsH4cCkjg2XU1mZQ3ZBHd38jEzKORydHaO0+ + lwF8vgDcSLmgtKGBgro68murKW6opaJd9m3voLiunuyKCtleK9sbPkZTI4XNHyO/SYm/dRQ21VAk8ArA + CioLuFITgM9HmSoBXV1AUk4S7iQ3Jo8J43k4J/5+WgDWS6vWz32mtqus4HBzMCFKBBbupiEygIBIP3wk + YFsbvIbVIWtYE7oGn3Bf/GS72kfNFayOVVnATvFjMenRJOYmaIjLitFE4YSsWBJy4kkuSCajLIOcqhxK + GkuY3DjJVbdexe333s7G3ctUt6lMX3k2Tfytoby17iOUtsj7aJL3p0Tg81DQUE2hIL+ukryaCnJljGVW + FZFRWUh2dTG5dcXkCPLqS8lvKJX3XEFRiwR0TWXk1xfKMZmU1udQ315AR08hQ4PFjI+WMDVSxNRwLpMD + aazrTmCkI4ZhhdYo+prs9NRZ6Kgy0CkBV2elke5qKyONbibbYpnrTmKhJ4X5nkQWuuPYMpDE9oFEtvRF + sVl8zJZuE9t6DbLNxN4RC4fXOzmpsndnojgxbueyKSe3bYnn26dz+M2tpTx6Rwm/uzGT31ybyK+vjOEX + l7j44TEnD+y2cutiBFfP6Lhug5PrlqM5Pedh/5CZTeJ/t/aKjRxMYlNfKvPdqfTXxlCTbyFLZYSY12hV + UdQUE0OdtSxPD3JoxyxHd81zfPcsx3ZOc8meea5UGb9HNgqWuO7YRq4/sUmwmeuPb9LWrzmyyJWHFrl4 + zxSHt67j4PI67Q9SB7dOyPoUR7dOc3L7DBdvm+HS7QtctWsD1+7ewPU7F7hu55yGG/cscO2uGa7bNcUN + e6e4Zf80N++b4uY9E9y6a5w7d6znM1vWc/uGYW6d6dNE4CsGGrlitI2rp7q5craHi2e65R12c2Smi0Nz + veyb72bXfC875vvYPtfPDvFHuzaMsGNR/JL4pw1TPSxNdmvtxpnej6Ayl7fI/lvEz3sx8BG2LgyybWmQ + HRuH2Lk8zJ5N4ts3r2P/Nnnu7WPnQbZv6mPbYqcc086OzV3s3ynvd886Dgj27h5m1/ZBlmab6e/Op1xs + V2am8FA1l2+WmYTUSDzxodq8dzFi8xLTzaSIDU7PcZOR59GQVSDH5Ks2ypv9Wxgr6+IvZL8E9WN9ok4T + eRWiEsK1LOLYJAOxEi/Fp6rWu6zOr/b1xIfjFpuuSjy7VQlEWXbH6TV4JAZT4m9yulPuQf1IIsiLIiXH + RUKGnViVJabOpSD2OTZNryEu3aAhPsN4dpsSWLxCr0K0QopaPneMQVt2ia1WGU5uVb5R3kN0nDxHjKzH + eAVglf3rESQmhlMuvHhqXDjVoTmOfVoAToskPctIurxXL7wloNPFlykBOFfeV6b4p2h5ZjUXsC5iJYbw + 1dKeReQaDWoqF7ts94TJmAlbRVzYalJDL6DScCGTCYEcyA7j6vxgviTx0S+adTwt/NIrAAsmovjnOlUm + 2c4rMi5fGrLw4rCVl9Y5eHFcZQSrjGErfxdO87QqYSYc54k+A3/uCtfm//17bwTPD+l5edDAi10RWtnn + l1tDBUr4DdfwuvDo19t1Gl4Tbv16p15aPa92GXmz1yLXPycAp8D6eP457OEt4e6vthl4TfCO2KR3euy8 + 0+ngrXYrb7VZebfTznu9Tt7ulfsWjv5CUzgvq/07Lbwh+6rs4VckFni51SjbTRpeabN4IXHCyxIfvNxj + 5cxAFG+OJnNmPJenp0p4ZKaS781UcN98E9cs9XNiUcbO7Ch7ZsbYvTTHwvh6OptaKcwpOk8AzteQlPxJ + /Jtg+9+QnP2f8Z/2PR+f2v+/ibofCbif+vx8nNvn/9MC8L8Jv+fw3wTgT84B/O/390l8WgD2bpfzqOeP + T5NnTiU1OY3sjAxKiwvp7mhlat2wxAUjzAz3MNReI364io3jnRwQH3NgeT2bx3uYG2hhvKOGurwUTQCO + MgYLgnAJl3FK7O1xqFjbKwBbzwrAOrPv/1UA9oq/ZwXgxGDhMhHEZ0eSmKfEXx2phar88zmIfSw2nxWA + VXlmOS5dlYM240634kyx4ki2YYk3fQRHohJ+JW4Qrqtau/B3W5wSgs0anPFeuGTZJfu7ZB+3KlErcY2C + O0VBCcEGHGJHbWI3rWIvLWIvbQJPijxLqlVsrMWLVDtuOYctVo9Z4iBTtE6DOUbWYyRmUYKzdn0FlZHs + hVPeh0vOpZWETlOZwGai0uW6Apf4Gmea3Le0NpWJnCG+JEeeO0t8h3Bwl9h8rUR1spqnWAnCwd4s4ASV + maoETUF8APY4f9R8xZ7UYJLzIsnK15GbE0p5pj+daf4spQZxU4GNb+U5+XWWhz+le3gmxcOzwnv/nuLm + 8TQ3v0lz8QN5l1+V5/uMxHfXu4K52h3KVZ5wrhRc5dYJ9Fzj0nO1PZIbbDpudUTyWYm3vuCxcZ/bxv0u + q4avOOx8xWzhXrOZO81GbjTJsfpwrjXoud1q565zArBRz8US4+0xhzJnC2TI4UeL/SKabCvod6xi2RPM + ZfE27kyO5XPJidyZksD1mYmcyklkm9zzuMRSnRKbVtn8KJRj86KDyIgNIjE2QPzex+WfFbwVM0Kwy3fs + lO9aCcB28YGqPLgm+n5KALbGSBwrsMs57Vrmri+uqNXSXiQ+byWFBQbqqtScuTFUVbpIlXcfH+8nUNm/ + QYIQYgVR8cFyjBI6xRfaV0srcK7Rpo6wCswePw1q2gaLygyWa1lUFY//1wKwF2Z5P1b5LpUArInAMp5d + 8r1GRQs3iFFieaDYkICzGc0Sn9Y6qaywUpBnJPmsAOyw++NyiE1wy7gUOKU/nIPdE6pl/bpiZAxFhWNQ + 84Nb/YgwS/xvVctyn+YA77r6TUAQYZTPDb6aHTGIPTGezQo2q4qHcqxqLdIfFMzW4I8h9shslvdgETuk + TQMXgUVVEBOYZNmshGCBQcOnBeCzwq/0wzB9GN65gL3irzYPsNaqEs/hH2UEq/a/C8Afi8xmqwmrU2yD + 06ZBmws4yqW1FpsZVY7aZDdjdlg+gir9HGEKJyQymKCIICLNkVpWcFxKrPDQZNL+TQBW8wCfFYAlnk/O + kbi+xElxhYvyKpvwNiN15Xraqo301Fvoa5Q4q8FMe3UkbVVhdNeHMyIcZ6bfyvI6J5uFRy33hrO1O5Qd + nSHsagtmT0sQh9tCONoWytHmTwrAhxoDOdwQwEElAFf5cKBiFfvLLmJ36UXskHZrxUVsrlrNcvVaNlb7 + srHSj00VgjJ/lov9WCr09YrAhX4avAKwPxvyAljO8WdLli/bMtayI2MVOzNXcqDQh8OlfpyoCuJkdTCn + FJTwK+sq8/dYeQAHiteyO38lW7MvYHPWCrblrGBPwUUcLF7JyZI1XF7uw42VAdwmx90tuKc8iHvLQ7i/ + IpQvC9/8ckUEX60K5yvlYWcF4LXcJ/hCnhKAL+KzeSv5fKkvX6wO5MtNYXyxJYx75F3c3ejH5wXfaA3g + Fz0h/GEwnH+MGXllWrjrUhQfLLh4b9yslZ59sdVXE35VFvCTlSt4pu4iTfx9ucWXl5t9OdMeKPwxlPf7 + wzR8MBChzW96Rjjus5PR/G7IzZebbRzKDafdKtw5eDWO0EBs6o8Pdr1WplnhnLirZf86ZVmJvk5vGWeF + cxm9545Rgq+a61fND6xwrvTzfxKAYxI80i+jzxN/ZR+PnNsj1/XoccaK7xZ7nJabQE5RmvTJbFrbq+nu + bZS2hoqqPE0ATtVKQHvIkX0rCuLoqMugrz6dztIoOovtDJbamahysFTnYnuzm30dHg52RXG4yy3wcKjL + weFup2yzab+h7+8wsq/dIP1WL4jUlg8Lbz4l7+z0uhguGY3i+ICTI7JtX4eB7fIdLlSsZSJ/BetzVzBd + uoo56aPz0pcWK0NYqtGzqckmcLK+OJL25FW0JaxgIHUN84Xh0pflHNU2djVEsaM5irkaGWM5IdQk+VIu + NvRjAdhbBrpQ/HSR+OViQVVaOE15FnorohmqTaCjyEZlSpAc50N9VgBdpeH0V+kYbdAx1qRnqC6Egeog + BgVj0vdnGsNZ7jCzrdPKti41F7Isd5jYLrHD7g4L+yX2ONhsZn9tBHvL/LQxcLpyLbfJOH6gO5wfD5t4 + eNzuLfs8LHHWcCTPr1NlxvW8OKLnhREjTw8qATiUx6RPPiz9+9e1q/l5xYX8rPxCflXtw+8alAAcyePy + Lh9r1/NIcyQP1YfyoNzfbyuDeag6RBN+fy1j9JcyRn9e7utF2RpZX81DVb6aAPyX5hD+3h7OUx0RPNUe + ytMtIYJAnm7y5+kGH56vl7HRGMCbEq+9K/u836kyfWVcSFx3Du90RfKWqtwkcd1b3bLcFSbxVSAvta7l + ucaVGl5q85E4zp/Xe1Q5aJUNLOgL4o2BEN4eDuPdkQhpw3lzMJg3lADcH/iRAPzWyP9dAH5zk423F228 + u+DgnTmJUzUB2MZzE1ZpJY6bsfGi4Jk5B39b9PDkznRevbQW7hpmxS9OtHL/5mJOdkUzI4S4RcidVgLa + FYFHH4hdF4zbGkGcQ8hylJHsOCv58VYKlQgsJC0/RghesoFmVToyP47OvGhaMl3UC1mtEgdRrAS/uAjS + o8JIElKQIOQgzu6rIV5IQ2psKJlJQhQzLJTmiRMpcFKUbaIkz0x1iZ3mag+ttYI6Dx3S4ZX421bvprHK + rom+1SUGakrE6chyfbmV5lq5j6Y4+lpVuWglANvpr1ZlcP2ZqbpQBu5a7pqXIP9EDE/fks47n8uALwq+ + kglfTuHDL8fxr/tj+OcXnPKZlbc/Z+ftz7p4++4YaRN55fYEnroumr9eGcOjl0fxi4vtfHu/jvu2hHPX + Qjg3jxu5csDEibYI9svg2VcdyqE6HcebTFwuwfmdEylc2+fiSF0gh8RJXSYd5nOL0Xx9XzrfPZXLI/c0 + 88S3+3nuZ+t44w9TvP/0BB88N8wHLw3wr1e64bUWeKUGnsuHv8t9/zUV/pjGhw9n8K8Hc/jg5wW8/+Ni + 3vpeGS99pYzfXpvFd46m8YUtiVyzzs2xDitbxOnM5AYwlubLaFoIUzlmNpTFs7U2i4WyFEbSvQJwdYwE + RA4ldgopMvqg1/tgMQhJNPpjNQjZFzgNgRKkeRFlCibaImTzXAZw6IWYwy7EoVsl23yIlwAtS/pDfpqV + 0mwXFfkeyiUYKM2zU1rgoDjPRoIQZ7fTD7tlLRbzaqwS3NmFVCry57CpMjAqIziMWI+OhBgdyfF6MjQB + WC8G/awArMpACxFWyBXkp4VRmhVBpQR2tXl6GvL1NBUZaCmJpLkkhNbSYNpLQ+mt0rPYl8Z8dxbdZR5y + hXQnC2mNc4VpWcgOqwQ8QgAdNu+yS9oYTyRJEuBlqLLPap65TDeFudGUFSdQW55Ca1UanYLu8gQGK+PY + 1l/Asakqjk+Ws70rlQEx3E1xq2mO95EgKZixUivT1S4WG6NZbIpivlGcgBjkgZIAwVqGxXGsE2IzVu3P + mPSv8XrdWQHYpAnAfcU6+ksjNfQJlAA8Uq1jst7AQosy3HZ2i+HeJ4b7UJeVo732swKwQZvHd3NtEFtU + ieWmcHaJgd3aEi6OMJBpIVtTYnwXGoNYbo1goxjg5TYdG1si2CTY3CQETgzoiX49pwf13CCG575tMXzv + ZBq/uDqTR27P56/3FvHM10t4+bvlvPOTav7583re/lEdL3yzgoduTuWB/RaumwkSp7pKnOQaOV+o3KuN + PT0u9vdHsX/AxYEBh8CmCcBH1rk4Ph7DsfVxHBqOYo88107liFpM4oht7BAHeqAnnUuna7l8sY3j023s + Gmng4Gwfx7fOsG95ioWJfmbWC8YHNUytH2B8rI+Z6RGW51WW8Di7Z4bZN9rLwf4WjvY3cnK4gUsm6rls + vo5b97Rx/6WD/Pgub9nnl351itcfvpx3Hr+W95+4Vcbpvfzr6ft59sHb+NVXL+ertx3h+pPbOLJrkS1L + EyzNTbI0Py3XmmHLwiw75ufYMTvL5vUTLI+uY8voKNvH+zmw0M3FO9u47WK53nWN/M/tdfzy/hoe/34Z + T/68iJceKuGtR4v552OFfPinXCS65sPH0/jXYxl88FgWH/whnw8eKeL9B0t59yey7/eLOfM/NTx1Xwe/ + vamXr5/o5qbtXRyUd7Rd/Yg+P8Ti/CgbNy+wvH0TS1s3Mr+8xMzSIhNzC6yfXmDd1DzrJqZYPz7BxOQ6 + 5uWdzU90MDVYxXBLGiMNLibbDCz2GtgyaGGrkP2tw9IHlRgs2DniYsegRwiFi4VmD3Mt8YzVxEjf9WgC + cJPKdJWxXRqvoyAqlDwJJAslyCuKjpD1MPIkgMxxh5HtCiVdAsoUWU+N8c6nqwRgiwRwOqOvBHkq0JOA + 7xMCcIg3+9cYqpFMh8ck5FMJwEJaFVlVBNUqgZxFAi3Zx2QOx+0WH1Wcy4aFSa44fYybb7iSz9x+I5+5 + 4yauu/o0y4tTVJTkEScBVIwSgOPd4tskkIpzE++xix0xEyNkOM5tlHUFAwniUxOiTaSIT01LtJGZbCMj + yUK2mjc/3UxprvqjUyw9jRkMNmdRk2unIkP8XpaVmiybVwDOdVAn0ARgsTO9FUm0l8RoAnBjtoPGHIdW + Irol20lzlp2mDBv18l5r5L3WK/E3zUKXfDaYH8VocSJDQop7s1UWsJoL2EGD2Gr1B5bOqlTaxZYpAVih + vSaLroZc2moyaChXpe7jtUzg/FSHwK6hQJYLUhRkPVmeSbhCfopO9jNSlm8V+2+hPNdCmdh+hZIcC4Wq + lKr64T8xRN5dECmxgYJg+V4DiLavIidFgpD6FNYPljHcU0itEPeaYjdtdUmCRAa6cxgfKaWvt5iy8lTK + qnLoGWhlbnmaddPraO5qo7Kxlsqmem2+X4VSlQHc0EhpczOFjfXk1FaRU11BXm0tRQ0N5FRVkVFe5l1v + bPgISvQtaPkYec11FDQJmms0FAtKlQjc7M0Crmj+pAis5gUurCkiKTdFE4CV6Kt3G9A7JbgXaCKvW6+J + vEbnxwKwythVn6lWQW1XJaJ1tjCtHHSoKUhDiCFIywBeG7KG1YEruUiwKngVa8PWapnAqky0yhqOtIVq + 57DESUCmicBRxGQI0qOJy4zVyj+nFaWSVZahzQFcVF9EVVsV40vjXHrjZdz8uZtZ2rGkZQCr8s+VbfJ+ + BWWtsn4WSgAulfejRODzcS4TuKBBlYWu0oTgnNoyDXn1FRQ0yvfQVEG+vL8CQVFLlYZieX8FjUXkN+TJ + e8yjoaOA9u4CenvzGRnIZ7Qvl/UDmYz1JTPcGcNQu0fDQIuD7gYzndV6msvUP9PDaBM/2VFlZKDezjoJ + +ibaY5jpjmeuJ074QAyb+xPYPpjgFYB7VWlmsWd94h8HxdeMWjk07uLEdBSnZjycHLdx+bSDO7bG8a1T + 6fzyxjweuimHB69N4qHr4vnN1dH86jI3Pz7l4CsHLNy+MZzrFnTcuMXFjdtiuXRBgk7xoRvbwtkmXHHH + UCJbBlKY60qmvcxBaYbi4gHCvVYLNw8iPyuGnpYKFsf7OLR9luO7FzixZ44Tu6a5ZN8cVx3dwDXHl7n2 + 2DLXn1jmhpObuEHa649v5LpjS1x7dEkTgS/bP8upXVOc2DHFqZ0zcvwsJ3fNy7Z5Tss5L921wOU7F7hy + 1xJX717kWlm+ducc18tntxzcyM0HNwgWuPnQArcdnOPmA0oEnuTW3RPcvnOcO7eOc8fmMe7YMMptc4Nc + N9nNdeKLr98wzHWbRrTM4Ss2r+OyraOc3raeE9vHOLp9nMMK2yY5unOak3vmtT9PHdg+yb4t4+zdvF5r + 98vn+7dOatsPyf0fkX0Pf4QZDWrbkV0zHN09w7E9CrOckPdzYp88p3r2A3MaLj4wK5iS6ygheFjOOczR + feu45MgUl55Y4LKT8q5OLXHJiXl2b+tncrRKywLOFduVpeapzTRpAnBUgvDGhAjiU40kZ6pyzy5N+M0U + O6uE3qyCaO+yJgDLemGsV5RVmblpZmJTVKlmA0kZVk0UVkgWn6iQmu1dVp+pzGK1v9o3NtFIdIKBGGlV + qefYJDmPQJV8Tky3kZYt18uLJUeulVMUR4ZcNzXXQ5L4knjxN3FpJmnl/jPOQj2LIDFLriHr8YK4NPFd + 6V7Epss10j4WidU+ajkqOQI176bKVI5ODCcmIZyo2BDcYsvd5wnAKcmRVFUlMjvVwomjCxw/Osf0ZKM2 + B3CamhtQOH2GEoDl3abnyjvMEcizZwgyxaflyvvLEt+VmGSQGCEAg8QaxgiFNRoMZ1trhIyVcCX8riEp + dDUpYeJHQlfQZlvNVjUvZZGRG/KCubfQn5/VhfFUn4X3p2NgRjDp4Z/rnLwp/OXVASOvKAh/eVnWXxm1 + 88KIhWf6zTw9YOb5ERvPjlh5SmLAv/XoNPH36QE9L4+YeW3YxCu9Ol7uiOCV9gheFZxpj+SMcOk3BGeE + V7/WGs4rwrmVKPxScxgvNKvS0Ab+OaoE4ESYlnhvPJF/DUfzVrdN9tXxarOOtzosAhtvtVp4o9nEm8L1 + 32638U63ndeF6z8nscKTFX48VR3Mcw1ybeHJr7WbeanFyItNBoG3fb5Rr+GFRh0vyrlf7JBnFXt3ZiCO + l0bS+dtILr9dV8T/jBXx+akarprp4vjMIAcmB9kzOcq+DfNsnJgQe9RGSX4JqUnZJCfmCHI1/HsG7qcE + 2/+GTwm5H+E/7XsWcXLduMTMj/ZVy58WbD+N/yT8nsO5ff7fCMDx8XJvn8AnBd5PIy4u8xOIic/5P+I/ + i78K/00A/jQ+Kfh+Gh8LwPkavKKxHKe9F68AnJKcRmZGBsXFhXS0NjExOsiC9I25sX5Gu+pY313D5qku + seli18V2b53qYWGohanuOonJM7US0DEmsRX6QGzCT9TvDCrm97iEg3sisKiMvvME4HCzDzpVpUyJQ0oA + TlICsEkTgN2Jyg6F4xIu6UqSWD4rkoQcHcn5qvSzgeQCPamFRuE2JtJLLKSWWInPUVmxZ+flFdvmERvr + SrPhTLHhSHZgjrd8BPWHOcWX3MkurXUm2rHHy77SKnhkmyfJLvbQ23qE33uSrNJaNLiTrbhTLFppaUey + Hlt8BNa4cNQcwjZplfgbm+YUOM7CrZ3TIde2RhtkP5PAjPU82OIsch4FrxhtjTViF3/gTDLJ9eS6qUr8 + tRIlvN8lrUv8h0NaS6qcTwnAmeI78i3EFUi8kmPW5j+OVvMGp0TIPas5a4Pl+l7xV/2ZxxHtjy3aB0v0 + WmyxfnIN4et5EeQU6MjPDaE8w4+OVF8WUwK4McfEt8Rv/Vae6YkkJy/E2Xkpxs6z8XaeSLDxh2Qnv0lx + 8uNEC1+L1nGvJ5LPenR8Vp71M4K7oszc5TFzp1vgMHKHWcdnJEb7gsPMF91e4fdLgi86LTzgtPGA2cS9 + JiOfMRu42aTnGl0Y1xsiudNi426LnbtMFm406DltCOOA9LkNlgAmbH70Wi+iz7yCecdajkaF87mkKL6T + nsr/JqfyjdQU7s1O4+bcVA7L97Exwcg6Txgt0gcrHP4URweTHaNilgBi4wKEA6jSzUoAVuJvMM640I/m + gtYygKXVBOCYoE8KwHIOlRms4BWA1Tz6a3F6VmF3X4An6iKKCozUV3lorIulssJNcooSU1WJaO9cxDFy + TTX3r/K7DiXy2ldjEp+nQYnBTh8NJrcvJo/vWQFYZf+qayucFYE18VfWJR4zyjbvHMD+REYFEekO/DcB + WM0BrHcHYzwLkysY89mSzOoPHHZHCE5ZdruDiJJnjZZ3FZ/oL/48kvIKC7W1duEAFuk/RpLUH8nUb4I2 + 6Wt2eX8S89tdXpwr76wyfq2eUGxRYZrYrJN9wy3qz63+0qrlAImH/Akz+hF+FmEGX0L1PrLNhwiTEovl + vk0+RKp5xTWIXZHtOjlOb1J/JldTSgVjMAZhMocIvL8LKNHXYtVpUMsms8Ri/0UA9gq/XoRKX1TiroIS + fxW0Es9GVdpZzfcboZWBPicAK3xaAFb7nROB1TzAqgy0VWX6OqzaPMBOgV3GgRKH1X5Gm+kT0MnYCdWH + EBgWgH+ovCuj2B71O0VitPDFRFIyErQsYDWXak6BEoDjSU51CccUG5IktjPfRn65m7IaD1W1DirKdFSX + htNcHkl3nZmBJgf9TXa66ox01urpFV4x0m5kus/O8jo3m4cdLHWFsdDkz1K9D8uCHQ1+HGwJ5lhbGMda + Qj4hAB9pDOKo4HCdPweqfNhXdhF7ii9gp2B76YVsrbyILdVr2FLrx+baADZVB7KlKogtFYFsKg1kY7E/ + G4q84q/CXEEACwVy7Tx/NmbLMVk+bM1Yw9a0i9iefiH7C7wC8HE5xwnhTkoEPinLx6oCOVoRwOEyP/YW + rmJHjlf83ZK9QssE3le0miOla7lYjr1K9ru5OoQ7qoK5uzKYe8qDua8ijC9VKvE3nAcqI/lqlUCJwcWq + DPRa7i/04b78NdyTu5LPCb5QvIb7qnx5oDGEr8h7+YpwyAfaQ/hGRzA/6gnlkREdT6438cKUlTOzdv65 + JJx1zsE7Y0bOKAG4zY+/VV2gZQH/o+ZC4YCrebHZRzhoAK92BAqXDOX9gUj+ORAhCNfad4YMvDnp4hnh + wb8edHNPo5XtaUHUGy4kMWglDukzduk/mqDr0Gvlm5Wgq6AEYDUnsNqmPle/sZ0r83wOal2JvGou4NhE + j5bh6xFfcO4c6liTEoAFKjvYHSO+VhN+zWK7dOLv5dpO8ZkeoyYAO2LEb4mfTcyIIk36aV5xOi1tVZoA + 3NZeTWVVnvASFVd4BC4yU52UZHtoqUymty6VnooYBso9jFV6mK1V8+tGs6c9moNd0RzujuJoj1vgkWUH + R3qUAGxlf7uefW069gr2tKqqmjoOdJk41mfjkhEPl6+P5bKxaE4NuTgu2w51m9gl/H65xo/pwguYzF/B + bNkaFir9WKwMYGN1KJvrdWxrsbKj1clStZGx/CAG0lYzmq4y2EPZUqpjZ5WV3Q1utjW4mBZ72ZkZSHWS + z1kB2J88sdE5Yr9VCejixGCKkwIpSQyiMjWMhlyTpm/0VUbTJj6+MiVQ4E9rXihDVWbG6q1MyvWnWs2M + SCw0WBPMsPT78dowFlv0bJG4Y7vEFTvkHWyTuGN7h5WdbRb2SHuw3cqhJjMH5RkOSL8/Xu7L9Q1B3Ntt + 4HsSG/16zM7jE05tvt8nByN5bjBC4gqdhpeHJd4Y1vOMbPcKwAH8rmEtv6i6iJ+UXcCPSi/g55Vr+E29 + mlongj+2G/hDm57fNUXwYG0Iv5Lx9cvyAH4lY/2XMkZ/XuHPz8v9+HHJGn5Sslqwil+ezQB+VOzHX8S2 + PNUZyTNdOp7pCOPp1lDvFD1NEifVr5WYyYeX6vx4Q+zO2/LZ+x2RvNcZxjuy77ty3LudKhNYx5udqnKT + xHDdEs91hkh8589zzat5uv5CDS+0rJZtvpzpCuB1gTcbOIg3+kJ4eyiEd4fDZayF8saAbOtX4vAnBeB3 + x3V8MGfhww0OrQz0B1vcvLPFzltbrLyx2cLry1beWrLyzoKDt+ddvD7r4sVJK8+Niz2YMPDKpImXJs08 + O23lyVkHf9+WzKsXV/Lh7f2s+MXJZu7doDKA7UwWCIlRAnBsJBkyuKIM4qTFIbhsemIcQpY9JrJiLOQI + ycyN1ksnC5dOFU5DtpnuEjdDMoAGS510SQdrTA2lWjpeaXwohUJmM6NCSBJylCAEIda6VuBDrKwnC1lK + T1Jz/Jm0LNDiPCu5Qr5z0yMozVPZvTbqK+w0VttprXVp4m+zOJq6CitVJUYqi3TSGrTyzw2VDprrlEgc + LwFoEj3NsZoTGpRBNV4dwFLdKi4e8OeLywZ+fzqBl2/L5L27JaD+fArcm8SH98Tyz3vcvP9ZJ+/caePN + O8wCq8DJG7dH89ptCTx7QxKPXRrLQyei+dERF986YOO+7UJMN+q5bcnETVNOrhxxcqzLyP6GSA7W6DjZ + ZOXyDhe3jSTy5Q353DOZzC19Vm7pFWI6IkR3OZ7vHkjjh6fz+MsDnTz/0/WceXSefz6zCc5sgDdm4K0J + eGdU0CPrjfBSKTyT4xWBn8iGP+fCHwrhoTI+/HUF//x5NW9+v44/f6aMn12ez1f3pnPrbAyXDTjYUxPO + Yq4vk+lrGEtVZaF1bCyNYWtNOvOlSQwLOe+Kl/cbYyBFyJrL4o9Ztxpd+CrMkWuxCnFyGv3xGAKINgYS + awgkRpZjpI2WNko+cxp8sEUKUdWtxCWIMq4hTkhZZryeAglAKnJcVBW4qMizUybfeUWxg/IiJ6kqyIgS + x2IXUmoVkip9xWaTc9l8hQD64ZTAzy3kMdYVQXxUBEnSV9MTdWQkR5KVEkl2Sig5KSHkJCsEkyf9sChd + SGWOnpp8E/X5RpryDTQX6mkviaS/1sigkJMhaccabWweyGCpJ1P6s4N8IdwpTn8ShcAmuNXcxCF47F5E + yT2oUrPpSqzJcJIryEyRvpvpoLQgltqKZJqqUqT/ZdBXm8ZAVQKjNTHsGMjj6EQJx8aL2N2Tymh+KB3J + PnQk+dKdHsR4qZm5Wicbm6PZ0BrNvJCn8apwGVf+DJb5yBhby0jVGkar/RmtC2Z9faTAKOsm+VwJwJH0 + CgE7h/7yCDHqEayv1THXZGSrmrNAHNkBMeCHe8SRCRFTQvBeIWXbG8PEMQWxqTZYK1OxrSWSZSEccyrr + uGQlY6UrmRHHtdQUqpVi3igOb0NzOBvUcbLf1qZADnaGcrI3jOvGLdy3I46fXJHNI3cW8vcHqnj+f2p4 + 7YeVvP2LKv7122p4pF5r3/hRGY/fk8J3Tlm5fVOo3NNKtjddxK7WQPb3ilPpd3NkKIpD4kQPDioBWBxv + v4UDI3L/Yx4OjUaxd0AcUrtZ7kGcY7NBHLGdfe1RHB/K5oqZOq5cbOPUXAf7xpo5ONPL0U3j7N84yUYt + a3WAmbEBJkf7mBjuYWJdH3NTI2yeXcfu+fUcmB7i8FAXR3vr5NmquGykiqtmarhhcy2fP97Od24a5fdf + XuaZHx/gzd+f5p3Hr+KfT9zIv566E168n3ef/AJ//fH1fO+e43z26l1cdnADezfPsHF+koWZKeZnZ1ia + nWPj3AJbZpfYNrPE5sk5lsemBBNsmVBzZamy1d1ceaCDWy9u5b5r2/jfu9t48Gv1PPqdSp78cQUv/bKc + 9/9QCY+LbfhTviCPDx8Xm/BYmdiGGni0gX8+2MLbP2nilf9p4PmvtPOnz/bxyxsG+PrFg9y6Z4BjS33s + WRxh64ZxNm2cZnnLEhu3bWZhywZmlzcws2GJyfklxmYXGZV7HFk/xbqJCSanxuQ5Rlic7mJmtIbRzgzW + NXuYaDOy2Gti85CVLSOCYVXyx8yWIemLg1a2DbjYLORqY0ccSx1JrJdAtr8sivY8B/UZQk4kyCiOi5Cx + GEKe+JCi2HAvYsK8orAg1xNClgR96dFhZMSp+XSVAKz+oesrwZwEd2KvzheAvXMAh2iIFB+nyKjNZcAZ + ZZKAScikIq52Iayy3WgKl4AvVGvVPxozJCjq7W5lu7yXY0f2ccXpk1x9xSWcPnmExdkJKkryifHY8Tit + JMR6yEyWACopluTYKBKjHSRE2UmIsZIYaxNYZNlCfLRZls0S6IotSXORl+EmT+xIbrqZEnkPTVWJDLTl + MNyeQ1WejdIM8XvZFqpyrFpGcG2uQ0NzYRSdZfF0lSfQWhTtFYBznTTni88UtOS6aM5RIrCDhjTxlylm + WjJt4q+d9OVHMVgQzUiRVwDuyXbTKveg5gCuF1vdVBRDS2k8TaUJWgnousI4Ic6pdNRm0V6TSasqwVuW + TIXYvuJMF8XpDorSBNIWS6tQlGalMNVIYbJOfICeogwDJel6SqQtzjRqKEw3kCd2PFOJv0Jik6KEM7jV + n8V8ibavwWm+QOx8BJ1N6YwPVWgCcLVwj8pCh3CDZPo6shkZKGRksIS2tlwKipMpKsule6iTxe2LjC2M + 09DTRnFDFYX1Vdq8vYXN9eQ11FHQIMstTRS01JNdX01WdQXZ1dXk1tXJchWZlZXkyXJBoyr1rNBIQXMj + eUr4PYvcljrymgTNtRoKBUoELj5bClqbG1cTgQUtVZQ3VVBUW0pKfgZRadGYoyzonQYibBGE28I/EnuN + biUIe+f/VdBEYcE5QVi1H2cIRxJpCxOEE2ENI8QYjE+oD6sCLuJC/wtZFbiStaFr8Y3wJTDSlyC9+oEk + FJ1drhUlAZX0S7f2o6aT6FQP8ZkxZBSlUlhTQHljCVXN5VS1VlDbWcu6+TFOXn2K6+68jvltC9R2NWqZ + v+cEYC37t0UJwbX/VQBWZaEVlAhc2FCDmhs4XwnBCkoYbpJ1eX/5LQqyrqFavqtKeb8lgkLKWgqoa8+n + oTWL5pZUutrS6GlLZUBsyoDYlj4l/La5NPQ0WWitiaCpLJi6ogAaSoJoLg+lvUpHT62ZgQYrw00OxiQA + G293MSVY6o1h00Acy30eNvaKf+61CYxs6peAbtTOgXEPRybdnJhycWJM+N6Mk7u2x/ON48n89OoMfnFV + Mj+/PJrfXBPNg1e5+fmlDn54ysbXjli4e4eBW7eYuW1XFLfsjufyDeKfJRDa2h3JriE3O4bihZckMduZ + KGPcTEFyGImuAByGtdiFf2Wlir2sL2VuXTcHt85yau8ip/bMcfGeGS7dP8c1x5a4ThN9N3HjyWVpN3L9 + sQ1cJ7j2yKKGaw4vcNXBBS7fN8elcuzlexe4dN8il+3bIO0G2b7EZbsXuGzHvGCOKwRXCa7eOcN1cr1b + jmzktmObpd3ALYeXuFXOddOBGW5W2cC7J7hl5zi3b5/kzm2CrYLN49y8cZSbN49x8/YJbtw+znU7J7h2 + 1xTX7J3m6n2zcu1ZTcC+WNrT++VeDm3kyiNbuOzwMqdk/Zjc59FdKuN5hmPSHt8zz+mDG7n00LJgI5eI + n71Y4cASp+RZTqlz7Z+X9QVpF7hE2ksOLnL60MIncNmhOYFc+8CUvMtxTuyb4NSBcS45PMWlx+a5/MQi + V1+8zNWXLHN49zoWJhvobE6nQGzzOQE4MVVHtBI9EyJISDNpYq0Sf9NzPWQo5EVJq3BuW5S0UaSKvU3K + sBOfIr4h1aQJvGk5Dk08Thc7rZa9697l1GxVytkrDidlqmPEn2jHepGYKn5GkJShhGM5LscrAOcVx5Nf + kkB2cRyZhTGk5btIFl+ihGCF5GzrJ5CS+/G2JA0W73KWRVtWSFHzH0sMlyzLCeKj4sTGq0zlhHQjiSmy + nBRJbGIoquxzbGwwcYIM+ay+LpXF+U4uln558ug80+MNVJbFkJ4aSVqaTt6nQROAMyVO0CC+LkOuk53n + JK8wmpxcN2npFmLE/1uNa7HoJWbQScwgsOhkjEjrMfiRKMg0BZInY6bEFECd7DseHcjxIiu31rj5XLmB + B0oC+UVdKE/1mnlvMgqmo/lwws17MsbfGjRLcK5+UDNo7WsDJl4dtPBiv4Hneww8J9teEp7z4rCN52X7 + M/1Gnhsw8MKQiddGJVgfVtm0Rl7tVlm4co4uPW9K+0aHnjNK9BVe/bLgReHSz9cH8XRNAE/VBfGi8GxV + 8pmJJLmfNGmT+XA4RkJBB68263mlSc8brSaBmTeaTJxpNEpr5M02iV07rbzaoucflYH8qWgNfy7y4cny + QJ6TuOGlJrm3Rp1cS6/hOYkRnq4OF4TxTE0YzzeE87zEAC90mHmp28OzvfE81pvGL/pz+MZwPp9dV8FV + 61s4Pt7DwbFe9q4f4uDiHDvm5hjt6aOqtIL05CySEwSaCJxD0qegiaT/CUk5n0L2f4Ha9zwk551FLnHy + eWx8hizLfnIfMfFpsp5GfEL6efhYzPUKulmfwCcF4HPbzxd9P72/V9jWoJ7jnEB6FvHxOZ/CfxZ+zyE2 + LvMTiImT5/g/ID4x/yzyPgW5liDhLOIT5V7Oh7o3Dbn/FVqJ6PhPQb7bTwvAyclppGekU1iYT3NjLetH + +lmaWceixFrjvY1M9tVJjNPNMbH5R7euZ7vEDEsjTcz01tJRkUVhkosESxgu4SUOvT9OGbMeeyguRyhO + ZxgWW5CWsRepCcBqHmAfIq3+GBxKXDPgUeJEohlPotErAKsy9clexGaKPc7RkVJg0ITfpDw9yflKABb7 + UmYnTeL++BwzLrHfHlXNQP25JD+a2NxoPMLLPeke+SzqI0SlxWiIVm1qNFEpsl+ybE+WZUFsagyxwuvi + 02U5LYqYNA8xqW6BS0O0QppTjnXgSbVqAq0ryYwz0aS1celu4jOEg2VEnYVcK8Ujz+aUZ7XhiLdhj3dg + jzsPsu5IsGNXkH1scVYciUqUtsm9ubRrRUucEZ3ulGdy4RGu78x0YhJbbRSbaxc+Hp0v8UuRxCr5NuF/ + JvFhBuKTI+T7DZd+GEJMbJA2f3uUxx+XR2ytZw2WqNXYYsTWJvmLLwgjJz+CQiUAp/vSlrKG+RQ/rs3W + 8dV0Ew8mW3lC7uv5KDOvCOd9QeKgv0UZ+bO0jyU4+J3c60+iTXxP8O1YK9+Ufb8m7Vei7TzgUVm+Fu53 + mrnPYuCLVgNfslt4wGXly0oAdlq4z2HiSzYTXzHKZwY99xh13GnScbMhgttMej5rsfIFk8Bg4i6dgWt0 + EZyQWHCX+IUN0q8mTSuZNVzIQXsAt0Yb+EFyPL9Pz+B3San8PCWF72alcV9eKpelONmTYGIhOoJ+VwgN + 7kDKY4LIUX9ajQsgPs5fywL2CsDSP+ND5HtTUySEy7L6Y0IETuEItthQrDEhqPl+zZ5A1Ny5pqgALLKu + xGGnvHOXJrj74HCv1kTguNi1FKnftKqiaKyLo7LcTVJyMNHyHUTFSrwU54dH7kFV3XBIHKVKP5sdazDZ + vDA4fDAp8dfpi1ETgVUWsL8X0UqEFkgMZtYE4EDMccHaHMCaAKxlAAeil/uLlDZc+Giow5dQmx/hDn8i + nUHoXMESs3hhlHdjUkKtU57R4RVt7bKPwxWIW46PkvPFJfiLL4+grMJCdbWV8nIzebl6EuWduc4KwHYl + ADtDJUYPx+YIx6L+6C1QArMXch25XqRd7skSQJg58CwCCNEEYH9CjXKv0oYIHwgWfhAkCBHOEGrwIVS/ + WkOIfg0hsj1MCcRigyJUBTGJoyJNIeiNcg1LOGZLhPYHcfU7gcWm12CSbUazxGP/FwFYLStE6lW27yfn + 9VWZumarWRNt1WeR2vZzArBXHFbHqe3nhGB1De9xJrkPrwh8LhNYicJqu3YvVuNHUPcUbgwjOCIIvxBf + fIPFlhrC0OYBjnMTlxJHUlo8qWcF4Oz8FE0AThHbEZNkEjukI6PQRmGVm+rGaOoa3JQWhVFZHEyrxFKD + LQ5G26MYaXMzoJWDtsg2C+s6bMz0u1kejWLrqIfFzkgma4SLlV7IXMVFbKnx0QTgEx3hnGwL47hKLDmH + 5hCONwVzXPjRoSpf9peuZFfRBewUbCteoWUAb6lazbY6f206uy2qomF1KNurQthSHszm0iCWSwJYKPTX + MFcYwLxgUQnAOX5sUgJw1lq2Z61mZ/YqDhb5cbg8gBPVIZysCeWU4ERVMMcqgziisn9LfNidt5JtWSvY + lCHXz5F7KZDjZPvxMj8uFa51rVz7ZrmHO6tCuVvizHvKQvlCWRj3V4RrJaC/VB7BAxURWgbwOQH4y4Vr + +ZK09+av4gtKAM5fyedLVvLlWn++0RrKdyU2/EFPJD/vj+T3Q5E8MW7m+Wkbr87YeEPw3pyD96R9a52e + 1/pDeakjgGcalSi1imeb1mgZwS+3+2vzk77eHcI7fWG8P6g7KwB78e6Inrdn3Tw1G81P+p3yDHrm4tZS + Hr6C+MALcEX441BC7lmB1ysEGzTY7NLKNjU21O9rBhkXCnqTKmfuhVpXx6j5fmMTpL8lRYmtsntFYzmH + OqfaRx2v9rO5jBgd0v9l7IUZgohQWfgOsZ3iN2xReuxipz1qbmrxHfHiV7Pyk2hqKae7V+KzrlqqqnLJ + Ev+ZKvwiOUFilSQreeJzayWG6CxXFTqjGa2KYbI6msW6KDY3RbG7zcP+TjeHutwc6XZxtNfF4R47h7tV + 9q+Zva0R7BHuvluhNZx9bZGyr1ETgE9L375ifSyXj0Vz8ZCLE7LtcI/3mK11gSyWrvbOUV3uw4YqP5ar + g9hcG8ZO4fR72q3s73Kxq8UufdjEXFEws3kBLBeEsqNMx55qC3sbHGyrdzBZaqAjI4DaFF8qk4MoiQ+m + QGx1nqAgQdaF/5QmBVOWFESVEoCzZf9iJz1lLtrEf1SnBVOXEUx3iYH1SlBudjPb7ma61caw9PcBiR2G + KgIZrw1lSZV+7rSxTUHucYtKKmu1sEPa3W0WDrSeFYAlBjkiff5SOeaOdj1fH3bx88kYfj/u5i/jTv4+ + auEffRJb9EfwqvTfV4e87UtKFJa+94++cP7SGcjvGtfyi8oL+WHpCr4v4/vH5Sv5Za0fDzWF8LDERQ9L + fPJgQyg/rwrgpzLefirj7melvvxUCb9lPvy82p+fV/rKOdR51vJglQ+/U/MI1/ry55Yg/tEZwTNdkTzb + Gc4z7aE80xbMM81qrPh6M4Dr/DjTEKCJwO+2hwtCJc4K5rVmQWMQr8lYVH/ifUPO8VqXxHBdIbzU6c+z + Lav5e8MF/KNuBc81XaRlBJ9p9+X1Dl/ZT80LHMDrPYG81R/EO4OhvDMQzJuyrPD6WQH4dVUCeiSMd8Yk + /psx8cGClX9tcPDuRolFN0k8uSzx6EaJLTdI3Ldo5q0FGe8LLl6fd/HStIXnJvS8MB7JK+MGXp0w8sKk + mb9PWXlqczyvnijjw1t7WPGdPaXcsj6O3bURrM8J1gTgstgI0uyRuA3hOEyROK163OLc4mRQpqi5fz0S + lIujzRGSUp4cTmOOnp5SlYUoxr3SxGBRKK3pq6hLvIhKIUAlQm5yooJItvuSaPUlTom/0sbY/bWSv2lJ + kWSlG8nPNpOfZdRKPmYkhVCQFUlZgZGqYhO15RaaarwisMr+rSmzUFFooKxQJw7HQE25lYYqh+wTRYuQ + obaGBNrr3HRV6RmSjjjTEMSONn+uGg3hmzvs/PnKFF6/LYP370yGzyTAXbF8cIebd+5w8Pbt8nJvMfO6 + 4I2bbZy52cnLN0Tx7HUJPCHH/fpoHN/Z5eLezRbukpd/q7z8m+TLuWXRzQ1z8Vw5Ec/RPhf7xdkdbbBx + hRiRm/rjuX82j+9uK+dbG3L4+nQS35lL5AeLCfxkewo/PpjGzy7P4x/f6OW1h2Z476mt8MZueEfad5cE + M/DeuKz3y3aVBVwJzxfAM9nwVD48WQh/LYPHquCRWj78XQP//GUrzz7QyIPXl/O1/ancJsb8in4xLDXB + LOWsZjrtIsaSVjOZEcJCgYNlMYIzEuwMpFjoiDdRGRVJqhCpKCHElvCLMIReIO0qnEKKooVAxRsCSBRi + lKhaIVPxkb5Eha8hSohTtEkIqEVhLR79SqIMq4i1+JARE05BipGKHBuVSvjNM1ORr+aCdFAtBDYvzyZE + MFRIri8muyKqa8WZ+Aj5E0h/cUqgp8pAq3mA41yh0n/CSI4JJS0+VMsYy5L+m50gfVOWcwX5KWGUpuup + yjFSn2+mscBEiwR+zYWRdJZGMtMVw0JvHAvd0SxJu2tdLpv7sugpslIQ5UOKYzXJLj9SokNIigol3h1K + gjtM1tV8lhbKC+OoKk2kKFeVezWQl2GhUpVfrU2V/pdKf2M6Qw0pjNQlMNEQw/b+TA6O5nBkJIe9PUlM + leoYygmiN8OfvswgJstMWk3/5bZoNndEs9BsY6IqnGEhG8PVAYzU+DNS7cOotEoAXlcXwViDXtZl3FUY + 6CuNoLs0VMZjqNb2CsEYqAxjtDqCqXqdGG87e3vdHOxxc1g5sz6HODirOBwj2xrCNSekoS5EIAa/NoiZ + Cl/GCi9itPBCpsSYLgj52tAUwUYxvkoAXhIDvLEhWJu3d3v9Wo50BHLduJUv7ornF9fn8dcvVfHKD1s4 + 8/NG3vl1Lf98uBoel/771yo+/EMp7/yqkH98PZWf3SBjap+Ok8MqA3gFO8Vo7u8xavP6Hh5wn83+VeKv + mT19Bnb1m9g7ZGPvoJ2dvSa2tunZ0hjOrlYDB7qcnBxK4pqZUq6Zr+eqxVZOz3dweLKNQzM9HJgfZO/C + OrbOrmPD9AizY/1MDHUxOdzNzFgfi1PD8tko++fXcWx6kFNDbVzcW8nlvcVct66UW5cquHtPFd+6up0H + v7CeJ7+3lTO/Ocy7f7iED/5yNR/+42Z47m4Zo1/kzKN38rtvXsJXb9nDdccWObxlki0zY3LdswLwzKxg + nsXZBZZnNrBpegObZxZZnpwVTLF1Zpztam7gpV4ObWrj0r3t3HHZAF+5bZgf3dvNL7/UwCNfq+XJ71bx + 5m/r+ODRaj58rFRsQTEf/lG940Y+fKSDDx/u5/1fDXHm+/38/UudPPaZLn59Yz/fu3KQr5wa5faDY1yy + Y5wDm6bYuXmenTuW2bZjM5t2bGFx60bmNm1kduMGphaWWDe7yMjELMPrp1k3OcnUzHrm50bZMN/D/EQd + EwO5jLVHM9FuYqnPzOZhG1tGlQhsYseYRROAN/ToWe6xsUkJwJ3xLHV6BeDeUjdNOVaq0sS+J0RSIP4j + X4JjhUIJnosUZMwXynqe+I9cTxBZboEmAKt5YiO0svFG01oJkhRUBvDHJaDDdQohWhawWjdYwoR06iVI + NuIUONyqZI0EYlYJ5kyhGM8KwHaHiZhYB6Ul+QwN9rBt6zJHDu7l5PHDXHrxcXZu20RLYy3JibF4nHbi + ojzkZqSTl5UpbRpZaRJIpSaQkRrrRVoUackStMfZiY82aaXkc7NjKC8Se5IXRXaaiUJ5D41VCfS2ZtHb + ki620kqp+MiKHDOVuWI3xY6qrOCaPAeNhVG0l8ZpaCr00JTnpFHQXODxIs9Fc66LJpUVnGWnRdp22dYt + +/YVRAui6C+IpS8vho4sFy2ZDurSbVRl2KjIEFudKW2mXeCkMttFZY5bE4IbSpJorkyjsTyZalkvzXRR + km6nKM2uCcFlGuyUyTlK5ZmKknXkJ0WQlyDfY3IEJWk6L8ROF6fqNYE4R3xAemwQKVGBYm/9iHWsxW1Z + ic14gbxHA10t2awfLGegM0/4gdxLoZOOxlTWD5exbqSU3t4C6huyJGhNJq8kl7aBDua2LbJ+eZrGoXby + GstJry4mv7WO3PZ60ptqyWioIaelnnxBTpMsN9aQW19Lbp2s19WRUyv71svnDY1yvBf5zQ1yzDk0CpT4 + +zEKW2opalZQWcCCFiUAn4UqkdxcSVFdOZml+cTnJGGLc2JwmQi1hBJikn6qRGCnThBJpDNcK9WsZep6 + JMA6r/Szar2ZwHr00neVCKyWDXJshDVcmwN4deAqVgZcxOqgVfiG+mjloYP1gRrCzUoA9p5DlYJW8wE7 + BVFJKvtE+mJxOrVtVbQPtNDW10RTdx0NglEZ80cvO8qVt1zJ3NZ5GntaqGz1ir/q+SrkfZSrLGgl/gr+ + Tfw9D6ocdGFDLQX1NeSfg4ynfE0AriFPjs+X8+XLe1VCcJ68y8KWMopaSuTchVQ251FanUxJWRQ16kex + 2hjhi27a6p3SX5z0tTplHEmfF39ZVxZIZf5aqgt8qC32p6kihPYq4QS1Bm3Oql4JunprdPTVim9tsjDd + 6WS2y81ct5O5Lrss25gRn7nQbWbHiJt966PYv0781JiTo2LnLpt2cte2BE0A/uFlwu9Ox/KTS1z84goJ + hC6z88NLzHz3pIWvHbdy32E7d+93cdf+WG7fn8DVmz0cm7BycMzOwfFYdgzHsEG4yWSb8IpCszZu4oUD + OYSD2QzqD5RqSpQSpoY72b9FZf0ucfHeeS7ZO8vlB+a59ugi1yvhV3DTiWVuPL6B649u4DrBtUeWuPbw + ItccWuTqg0tctX+BK/ctSrvElQc2cOXBTVwhuFy2nd41x+ntM1yyfZpLt05zubRX7Jzh2r2L3HyeAHzz + oSUtE/im/bPctGeKm3dNcLP4lVt3THHHjhnu3DnLndLevnOa23YL5D5v3DXJdbsnuEGWrz84z/WHFrjq + wAKX75/ncjnXVWre4hPbBNu5Sq6jBN6T8ownds9yXAnAcq5Tsn7dyR1cd2qn7OMVik8f3MDpA0r8nZf9 + Z70isLwTJQSflva0XOPSQ/NcenhB9l8UyDUPz2m44rBc+9CMnGOSk/vGOLZ7lGN71nNq/ySXH5njyuOL + HN+9nqXJBjoaUinItZKVaSY9y0yyEg8SIjQBOE74bmK6yl51k5rtJkXsY0qmm+QM1bqkdWrLSRkOElJV + +T0rcclKyDVrx3nnDrZqOCf2no9zWcHq84Q0LxLTLAIrSWKDEwXJcm4lAKvrZ+RGk1ccR0GpVwDOKool + U3yHEoFTxV94YdegRF0NuV6c256W7yA93+lFgZOMAheZRW5yijxkynKa2j/LQlqOnXTxTRnZcmymPIfY + d5X1q5AqyJZ9mpoyWd7QKz50syYAT42JzSiNOisAR3oF4FwzWfk2L+R8mXL9HLlOQXEMBXLvWTny7hJ0 + 4vcDcFkCcJsFJn9cZn9iLIGkiI3Md+uoiTPTlmBjIMnOVKKZvekmbpS448ttEo+1xfCDBiMPtep4Vnjm + u5NRfDgVxQfjLt4ZlphwwMTrwjNf7zVqOCPc9FVpX+qWQLtbx4u9el4esPDqkJ2XB628JMsvD5l5ZdjC + G6M23hCu+qZsOyN86PUeM292m3hLzfmrSj03h/FyYwgvCZd+Tnj9U1V+PFG+liekfbYxVCvjzJgqAZ0O + Eyl8OBTLe8LfX2s28kqTgdelPdNs4kyDidfkGc40yrYWWW81yTl1PFkRxGNFPvwhdzV/LvKT88t1aiN5 + vi6S58TOKTwr9u/JsmBBEE9XBsvnYTzfHMGzLQaebXfw9/YoHhGO9pPuTL42kM9nhoRbjzZwclR49Wg3 + +9YNcGh+RjjqMovrJ2ioqROeowTgTOFEKhP43/HfBeDs/2dIln3PQ2JK/lnkyhjKJi4+g6SUHIESg1OJ + iUvRhMqP8WkB+Hxx998zghPUPScpodcLtX4+EtU9nMO5Zzkr/v7/QwD+NGI+hYTE/LM4e+2PcE749eJc + RvA5xCao8tIKavk8qHvQoO79fJx/n7Iu37F6nwmJqSQlp5KankZ+fi71tZWsG+plcUbFWUNMDjQxPVjH + 9tluTohPOLp1hO3T7WwYaWCmp5q2snSKU8Qm2oXD6/y0KaWirKEypoOwW9W0Lt4yrHoZ0yprL8zoS7i0 + kdYArwAca8Qdb8GTYMGdYDorAMs5ksM0eFLV/LRe0Tcxx0BiroGkPBPpxWJXyl2kl3iEh9lwif2OzrKR + USb8sSaHzErpGwWJxOcmkFQgz1iQRlJ+KvHZycRlJ2mIz5TPFTI+RmJmMsnZiRoSsxLOIv4jJGTFeafX + OIdMhRjtT3cKyUpwUZDjk7Rj1XnjiEuLITY1mpiUKOFo0R/Bk+yFV4j2itFuJUjLukJMejyxcnxCZgLx + cr647HjiC5Pw5MdgTjejS4nAlBqBI8tAnNjaRIk3ktXc62K304WzZyaECy9XlZaCSBJuHu8R++rxwelZ + g10TgNfKffiJvwkmJ0/4fV4wZWk+NCevYjbVlytzdHwp3cgvk8z8RWKeZ9wmXomx8JLgSeGtf7Hr+GuU + hT9FW/idx8yD0VZ+lejmpwlOfhTn4PvRDr7jsfMtp0XDNx1mvmW38A27lW+4bHxVicCy7T6HkftMOr6m + 1/O1CB1f1EVyjymSz1mM3GMzc6/FwpeMZr4aYeD+cAO361R56DCOGQPZa/Blh341eyJXca0thG/E2Hg0 + OYl/JKfxt7hE/piUyK8ykvh2biI3Jds5mWBmZ7yB6Xg9nfJuKmMDyYkLIFnNwytQ5Y0/LQA74yIE4Zr4 + 65QY1x4bpsEWHYrZHSi8Xf2hwQ81L7ASgF2JoUQnyTiI8cPhWo0nypfkpGCK8s00VEbTVBuvCcDJySGa + AOyJ8SXqrACssrRt8j3Z3L5YXD6YHb6YBEannF/BJbGyU7ZJa3KpdT8Mbrm+QrR8JtfUSj/HBWOKDZb1 + IIwSmxmjQzDIcmS0jEWJv8PknsMdEmcLIp3BnxCADa5QuVYoFocXVpcSgYXDyrO6ooO8AnCiEoDDNQG4 + otpCWbnEw3k6sZsqW9gP21kBWJWPtinhR2BxhGj4SAB2KgE4RLtmhHx34WIrwsxyb8IHQgXhElOFyHcc + Itw5WBOAfc4KwGs0EThIt1rDOQE4ROcrUJmxEiMZQ8TmqGzcMO23ASVuma3ezEaLErwEajopTew6KwAr + kfUczgnAqgy0zuzNxjVZBao080dQZW/N8l7sWvauyuRV6+cEYIMcp6DKRKty0ecE4HMisDrH+SKwOl4t + q3Ooa/0nAViVfvYLPisAG8M1Adgd6/JmAafGaVnAXgE4mWyxf2mZHuGYqlqMXjifleJqF/WtMTQ3R1Fa + EEJtWSj9LRIfDSYwN5jEZE8cY0oIbnUx1ulmsjeKRfWnVuEzO8Zi2Sgx1ESND8MFqhzuBZoAfLgtlEt6 + Irm0K5LT7eFc2iZoD+N0axgXNwVxqj6IY9V+HCxdo80zqgnARSvYUnIRmytXaQLw9rogbUq77ZoAHMrW + 8mC2lAazXBLIYlGAhrnCQE0EXsjzZ0OuP8tKAM7xYU++mtfXj8NlARytlOvVhnNxfQQXS3uyKoTjFcEc + kRjyQLEPu3O8AvCWdFX++UJ2FayW+1ICcACXy7HXyrVvrgzhzopQ7pZ387lSQUkoXygO5d6SMO6V9osl + IdxfEsT9cs37JS59oHANDxSs5Uv5q7k/bxVfyLmAz+VewJcr1vDtxiB+2hXBQ/06Hh828uQ6A89ppV7t + nFEC8JSVtyZNwl9NvDmq47WBEF7pDuQ1wauqPG1HgCwHc6Y3hNf7gnmrXwlQSgCOFER8hHdG9bw95+bv + Mx6+02XldGEQg/YLyQ9ZQVzgCjyRfuKTvQKv8dPirmoN3gp7Kski4hz0Mi7PQdYN5nBN3FVZwFGxDq3U + 87kxpJ1LPlfraryZbBFEWkKljwbJ+FRjWU37EK4Jv7ZorwCsfL8z1iR9V8UJCbS0VdA/2MzISBv19UUS + n8WQGGclPlpNu2YkO9FIhcRQrYUe+sujWV8Vw0yVh8VaN8t1DrY12tndaueA8N+Dnar0s42DXRYOdKqy + zzp2t4RqUx96EczelggOCp8/1mPhkhG3Jv5eNhrFqUEnx3utHO4ysa81kh31oWypCtBKlGtlyqsDvH21 + MYx9bXoOdVs51u/hRF8URztd7BFev60ikp1lkeyrNHKg1sI+ubft9XYmiiPpyAikKS2AurQwKsWHq8TM + YvEZJUlhlAjvKRe/UJEcTI183pClp73IRnepjXb1B6L0EJpzwhmosDHVHMN8WywL7TFMNVoZkDHTV+JL + v2B9TQiLzQaWWy1skthiY72e5XoDWyTe2NpoZIdgX7O8myYzBxpNHJXY4vLGCO7qFl+9LppfTMXy+3EP + f17n5B+qSlKvxEx94bw+EMnrg+G8Jn3uFcELAxE81x/J33tC+UOrP7+qXsmPylfwveIV/KDsIn5WtYZf + NwTw26ZQftscyi9lnP+4wocfFK3ix2IPflK2lh9J++PyNTzYGMzvW0J4uDnIi4ZAHq7z4dFaHx5r8uPJ + 9lCe6gzXBOBnO0IlzgnhudYQXmwL4pWWIM40BfJ6oxeqFPQbLcEST/nxj4pVPFGyUuIoH15okvElx7+q + IPf8soyzZ9vW8vemi3iqYYXEUBfxctsaifN8eb1dZd378FqHtII3ugMktgvk7f4gTQxWUAKwKgP9hioJ + PRrG22MRMpb1vDtj5N05M2/Mm3hj0cSrCxL7LXrx6rzEe3MSZy44OSN4SZafl2NeGo/k1XEDZyaMvDxp + 5h9iJ55ejuPV46V8eEs3Kz43n8ypDiMbiv0ZzgqkOVFIRXQESTLYnIZwbEKa1ETfTnOkBNXhxFnDtbLA + KQ5/slzqHwehtORGaKVmJ+v0zNTrmKwMYCB/BR1iEBsTfakQspAr+6ba1pJs9SXB5keczZ9ou78MxCBS + NQHYQE6mkZx0HamJIYIgcjLCKM7VUV6op7pUiE61nZZqJ/Uq+7fYRFm+jhJBRbGRmnIbDVVOgUcQJfsK + Kaq00SmDZqQmjCXpKAe7Qrh5IoIf7PXwj6vTeeuWdD64NRFui5GX4eG9m528eYuN128289qNRl67ycyZ + Gx28cr2bZ6708MSlcfz+RBLf3RXDPYtWrpsQBzUSwWkxwKfHzFw+7ubS8XhOjMazt8vDrgYbRxtcXNMe + z93rMvj2chk/3VXDT7YU8ZMNmfx2cxaPbM/k0X3ZPHQil9/dUMoL3xvi7ceW+PDlPfDeAXh3u7QbBfOy + PIH0FHijFV6thudL0EpBP1sET5fC36vgiTp4vAEeaeRfv27nha+38tsbK/nqviRunbZxVb+Ro/XBbBPn + spS5iqmUVYyn+jGZGclsno2xTCvdCXqaYyMoV1l16juyrMWtX4lTtxK3kKNoIUfxeh+ShDwly3KKEKVU + IU9JEauJDV1JrBDnBIsvSS4hwUIm4yxyjPEiYs0rSY8KokACibIso1aSuSrfQHWRWUiDg7pKD6Ulbgke + 9UJ0A7A41wpZXStETwIMIaxOu5oP2A+33FO0M4hYRxDxQjwT3AGkCMlNifUnQ8h2tpDVPCHauYLCpHBK + hajU5JhoFLLcWmShvdgsBlBHT7kYsIEkto2msW0khZ3SHpwsYOdAFgOyT3HUGlLtF5DmXkum9OGMOCVK + eEWmvGQzpWqezKpU2urSqCxyk50q2zOM1FXE0tmYTndjKgNNyYw0JDLWEMdMcyxbe5PZO5DC/v4UdneJ + oa02MVESwXB+CEO5IUxXGNjQ6GRzRxTbuqJZbLEyWRPOuuog1jeEMClGb31DMOvqAxmV71GVaBitj2S0 + zsBwrYG+8jC6SoLpEqLTqSFEnjOEwYoQxqrDWW63safXw4HeaA71eTjU42Rvh1kTTbcqAbgqkA0yfjfU + BLEoy/PimGbKfcXJrGJ90UqmKnyZr5XPxbAvN+vY0KIygL0C8OZ6fyFvqzjU5s/1ExKI7U3kwVsK+Mc3 + 63jjVx28/VAL/3y0gQ//XAv/qJQ+W65lqr77u1ye/346v/1MNF85buSy8TXsaF7B9uaVMo4iOdDn4FC/ + g/19Vvb1mdnba2KXOI/tCn0GgTigbnFEbZFsFQe8p92gOc8rxtO5aaGc6+druGqukUvnWjgx06rNMbhv + upvds4Nsm1/H8uyIVgp6erSLmXU9LE4OsHFmmO2y/dD8MKem+7h8pIkrB8q5cbiQu2aK+fy2Uh44VsHP + bu/kz9+c4KVfbOGdRw7y/mMn5fkul7F4gzzfnXzwt7t5+qdX8+N79nHPFRu5dM8Eu+eG2bh+mOWpKRZn + ZjTxVxOAZxbluhvYOL1BE4KXZdvyzBRb5sbZMj8i6GPHXDuHNndxxaEh7rh8Hd+8fYQffraTX3y+mUe+ + VMtzP2zgzC9qePu3Zbz7kOB39bz723be/U0v7z44xps/nuS5b6znD58Z4JfX9/DdS3v58ok+Pnt4iBv2 + jnJq5xT7t8yye/sG9u7dzs4929m6axsbtm9ifstGZpc3MrWoMoAXGB6fYfCsADwzN6EJwMtLfWyQdz27 + rpDx7lgm2i0syvemSv1sGbULLOwct7F1xMSCOMyFDhMbJChY6ohlXuzkWG0MXcVOasUXlMrYVdUjlMir + RGAl/CoBuECC0IIogQSeuVH+ZLv9yJDgNVO2pcWEEu+R4NK8Br3YLJ3YK71WxknNAxwsUIQ0TIMqAa2I + qN4sAalThyNKCGSMSQJSswSneiGc4RJQhaHm+VGlnRxOswTedgoLchgY6GHXru2cOnWMK6+8lFtuuZHL + Lj3F+LoRSooLhWTGkxyXIAFRIZWlpVSVFFNWlE9JUS7FhVkaigrTKchJFt8Xq/0rMSVRzi2ktboiXfaN + JzPNJP7QKL4vmua6JJqq4yjPt1GeY6YsR4LkXCuVOTaqlACc76C+0E2TKv1cHE1dvpO6HDsNuQ6a8mW7 + oEEThFVGr4NGlQmc66RV9msvcNFZ4BYy6KIjV9ocFy1Zsk+mnRLxBYUJOrGnERry43UUJhooSjJSoNpU + K+ViB5XwW1sYL/cURXGaEn8tFMtnJWk2ytKtmvirSleXq7LWqgS0ENT8uBCKk8UXpOk0VIjdr5DnLUsz + Uij75Mn3nxUfTqp830oEjravxm1bQ362+Ki2XEZ6S7RM4IpCNY+wm66WDCbXVzIyXEJ7RzY1dRna3EV5 + xQU097YztWmeya2ztI/3UNhWSXpdEXmddeR01pPWWk1aUxVZKsu0tZa8FoV68hrrNdE3t6FB0EhOvbfN + bRQ0NZDXLOst5yD7nS8AyzmUAKyygJUArGUBt3izgBXK5Zplsq2oQc19W0pqcTau5GhMEgSFSb8LMgRp + QnCEPVIQTrg97GMBOFqCfMH5ArA3E9grAKvW5DZidpvQ23WEGILxC/NlbfBqrRy0f7gfwXo5vzFEEEy4 + 9HElAKssYiUA22LM2AXuRAcxqR5NAG7uqmNkepDhyX56RjroGGplndjPw6cPc/lNl2sZwM19bVSdLwDL + s5c1VXvnQv6/CMBFDdUU1NeSX/uxAJzbIGislvcprSBf3rP3ndeSI99VQWslRa1lcu4iyhpzyS+PJ0fG + QlGRnYpyGQPCCxuFB7Y3OOhqttPRZJFxJEFSoQ+lErhXCQ+qKwmgSYLztioJpGp1dNbo6KrW0VERpqGv + xsCIBDWjzVbGms0CE+sUGg1MtZnZPBjF7tEYdg+KjxqUYHHAzCXjDu7YEs/Xj6Xwvxcn8r2THr5/wsGP + T9v50WkL/3vKyLdPmvnqSStfOuHmnqPRYoPjufNgAtdu9XB6wc3F83GcnE1i13Asc+1uRlT1GyUAyziM + s4fiMAULP1dVSGJorC5mfKCdPcsTXLx3iUv2znN63zxXnBWAbzix4RMC8A1Hl7n+yAYN1x724pqDG7j6 + wJJAtRu5+tAyVx3eognAl+2Z5+Idah7gKS4RnN46xWXSXrFz9iMB+FYlAB9e4uZDi9x0cIEb989xw54p + btw1xU07J7l55zS37prl9l1z3L57njvk/m7bP8+tB1QZ6Umu3T3B9eqYQwuaAHz1wXkul/UrDi5y7bFN + 3HBqhyYCX3VkE5fKfZ7crUpUz3BClauWc5/et6Dtc8PFO7nq6GZOq8zfvQtcLNe5WMsknuO0nE8TfuXc + l8k9KnFZE32PLHKF3PsVRxe48si8hquPLcp5VDbwJCf3SD/fMcTh7cNyzTEuOzCt7XNy9zgbp5qE76VR + lGsjS2xcphI+MyzESVyjBOCohEitBHNyup2kdCXy2jXEp9g0xCUrwdeqlWqOSTQRnaDKN5vOlm42a3P3 + qjLSCuqHNzWfsGoV4lPVZ+dak7a/ghKPFZSgHK+ygMUOqxLQiXL91CwZz4Ux5JaIj5FWlYHOKPBoAvA5 + pObbNaRITKBBCbrSqm2a+HtO9BWfo5BdFEV2aRT5JdHkyHJmnspUtpEp/iVbzp0r/kVl7KZlmEhP1ZNx + FrmyT0tLNpuX+7n89FZOHJ5jYlRshfBpbQ5g4dTpGQYy1ZzwBbazcJAlNj+vxEVRWSwlpXHkiX9LSTIQ + 4wqWuCBExkcw8bYQEhyhpLrDhUOYqBb/OliQyGxpGtvLszhSlsZ1FfHcW5/Id3sy+HlfKg91R/HnPjsv + j7l4bzqGDyajeHfM8VH27xs9Rt7s9uINNU9vl56XpX1JtcJBXxF+embQ9jGGJJ4ctvLWiJ03hwQDNt4Q + PvSm4O1eC291SzDfoeeV5jBeEg79Ql0Iz9QG8mS5D38uWcNfynz4R20Qr7YZeW9AZQGnwHiyJgC/2+vm + tVYzrzZJrNps5FWFBkG9BPsNOi9USee6SAkNQ/hzaSCPF/jy1+JAod9hPFsdwXM1HwvAT1eE84R8pvC0 + xAvPKgG4MZJnmvQ8LbbviRYPD3ck8JPudL7Wl89nBsu4flR49bpOToz1cGhsgKPz05zcsY0dC4t0NrcK + t1GZv0oA9mYAp3wC2SQl5f1nJOf8P0Nq/ieQnFZwFioLOJtEuUZ6RiHpmfkkJGVoInBCYvp5+LTg+7G4 + 68XH4q/Cf7yH85CcIvdwFt7nyJPjcj+ClkX7CXwsDv8nxMVnfQKfFF7/vUT0fy8t7RVuzwm7MfGZn0B0 + bMZ/Rtw5pBMj+Fh8lncp8J5bib8qm9orACcmpZKcmkZ2TjbVVeUMDXRpFZUWpwa9AvBAHTtnu6SfrOPo + 1gG2T7eyYaSOmZ5KmkuSKUkVGyQ8JNYksb3w8gRZVgKwVc29aQrEaA1GZwnUhF8lAKu5PXW2IIwy1tU8 + gK44qxfx52UAJ4VpcMlyXJYSfsVOZupJyDbKshKAHeSUe0gX+xUv/NiTKbYzX7hsYwHVnVWUtpaSWZFN + WkkmmWW5gjwySnNJKZS+XZChISUvndTcTyODNNmukPpvSJPtqechnfR8LzLkfBkF6WJbzyFD2672ScmV + 95t9DskkZqZ8hISsZIEsy2cJWR8jMTtNQ3Ke3KsgPU+eJT+b1IJM0ityiC9LxibPHS58PCIxBFNSCJ4M + PYk5RjIk3shJ0ZMvvqwwTiAxWa4qcxwVRLpHVekRbh7lgzt6jbz/tUQn+cr3L7FZjvD7vGBK09bQmHgR + kyk+nM7V8YUMIz8V3/ZYtIG/R5l4OU7sreDvSvw1iw1yGPiz4A8OI49E2Xgkwc1v41z8MtbBzz12fuyy + 8QO7hR84vPi+w8b/Oq18R7Z/02Xhq3YT99kMfFEfzjcjIvlWWAQPRETwRUME91vN3G8z82WTia/rjXwn + zMi3Qg18QWfkFvn8Cn0gp3R+nIz05bJwHz5nieCn0S6ejE/khZhEno+K5e9xcTycGscPM2O5J9nO1UkW + jsjzbBIf358YRnVcIDnxSgD2kzHrL+MrwCsAa+Kv9FEl/MZFeiGxlRKAHbFKEI7AGhWCQQmoVh/h5GuI + tK/FFBWIPT4YT6Ka59YXq30lbrcvqXKtknzrJwTg1NQwGbe+mgDsifMXBEpMG4AtKgCrEoE9gdjcgVjc + QVg8CrKsso3d/pg00dlXg855Fh4/9FG+mGJkn5ggzBKLmSVuM0s8bpZ+YIwNQR8jMXS0xNUeJfqqzN8g + 9O5QDUr4VTB+SgC2uEKwagJw0EcCcEKyvLfccK0EdGW1hVJNAI4UOxgssbcf1nMCsC0Mm8QqNlUC1hGm + nc+kykwrOCVWFxjF5+vks0iJmcItIRJPectAq0pH2vQ4YjNURnCowY8Qva+W/Rui95GYaK0GLRtYbdP5 + C+Q4FSNpAnAYeovEW0r4UlXCFBx6aSXWkv76fxSATTpN/I1UWb42id+cNk2gPQeL9GkFteyWPueJ8Ujr + 1rJ4VXavNoev1QuVBfyxACzXOU8EPpcJfE4I1spCq2vIudV1z0GJwJGmCIIjg/EP8dMQLvGEEoCdMQ7p + sx75TmKFt8Z7S0AXppBfmCw8LobUbOGDYjuziyW2r3XS3B5LR3sMDdUG4cIWptR0OdNZbJnMZmk0jbmB + RKZ74pnpi2d+KIlNY2nsmExj72QS2weczDeFMFG2moWq1exo9Od4VziX9+m5qlfQHcnVnQo6rmqP4HRT + EBfXq5LMfhwVnnSgdDW7iy9gW+EKNhddwObylWyr8WdHXRDba4PZUaUE4DC2lQeztTSE5ZIgNpwVgOcL + g7wCcEEAS3l+LOf4sF3affLZ4bJgjlaGcKImjNMNei4VLnVauNRJOZ8SgI+WBXKo0JfdOavYnnUh284K + wLvz12gC8ImyAK6oDOZaOcfN5SHcIef7jFz/7uJg7i4K4bMFIXxe2nsKg/m8XP/zBX7cW+DjFYDzV/NV + OY/Cl/NWc1/2Cr4g+ErpKr5b78ev2kP4Q284Tw7qeGZEx4vjRl6Zsmri75sTZt4c1/PuuIE3RyJ4fTCE + M73BvDkYypv94bzeF6a1bw4ohPL2YBjvDoXz3nni7zkB+K1ZJ09MOfl6u5HD2f60mVaQGbSCWIFb7KRV + jQWx2Uro9VbWE+iDidQFExEZRFhkIKERAR9BrZ8PJQIroVfL8HVKv5VWrZ8Ti5UArMpAa7/FCXTWUPH9 + Ymss8pnwe4snUhN+VflnJfy6461aG51olbgjkc7uWsYne1lcHKWrq4bszBjioiS+coaL39KRnWCgPN1C + q8Q8A2XRjFdGMVPhYq7SzkKlmY3VKjHKzJ4W7/y2BzpN7GvXs6dNZf2GsrNZ+pf0Rw2NgexqCtUE3iOd + Rk4OODg94uaSs+WfjwjXP9RhkM917KoPl74ZypbaEDZVB7GlJpjt9SHsljjgQIeOoz0WTg26uXQomtN9 + bk50ujjSaOdIvZXjSldqtHFAsLXWzJj0o66sQNoyQmjOiqRO4qWKlEgtObNCYqiy5DBNp6tKDaUuPZxG + 2aej0EJ3iYXOfBNNGWG050UwUuNktjWOxXYZo63RrK8x0lvkT3fBGnoL1zBeHcJ8o4ENzSY2NhiYlzG1 + WBXBBokjlmt1bK7Vs1Pij92CvY1GDtXrZKxGcGuXma+MePjheg+/GfPwR4mF/jFk4WklAPeESTwUwRvS + F18XnBmM5FXBS4N6nhsQPtAVykMNa/lZ1YX8sGQFPyy9gJ+KjfhVnR+/aQjiN43BshzATyt95LNV/KxC + 9q1cy08r1vDz6rU80hHOn3p0/Lk7QsOf2sP4Q7M/j9b58If6tfy1JZC/y1h6tjOM5zpDeb5D4jAl5HbJ + fUn7lhz/VmsorzcF8prgZRl7T1et4XGxNb+X8fho3gX8rdqX51qCebkrgtf6I3i5L5jnu3x5qnU1zzZf + xEttqznT6cvb3QGaCPxa61pea1vDy/L5a+0+Ekv683afV/xVQvCnBeA3x+QexiNlXOt4Y1LHa1M6XpmW + dzSt46UZeYcKUxGyzcCZeYk5F4RPzZl4cVrPq5N6zkwYeEPsw6tiF56eOF8A7mHFlUMOdksnnM7zoS89 + gDohGnnuMOLN4mR1YZj1EVgMMsgM4dhlQEYZhZSLI02z+5Hj8qVWCEd3oZ7JehPLHRa2dVvYKkZ6qcGf + 6Qp/+rOD5Jz+5AlpSbesJMXmQ5LdXwJ0f6Id0orzTxaSnpkmg1GIYdZ5AnC2dMyi3EjK5PxVpRZUhm9j + lZPaUisVBQZKciMoEYJQXmSmpswhn7uoq3DLslNDfZmZzooI1tdFsLk1gmM94XxGXszPD8Tw7NUZvHVj + Kh/cEMe/bnDzwfUu3r7ewevXW3nlOjMvXyfB/PUSXMu256928deLXTx81MMPVObvgpVr16nzBbK71Y9d + rUHsbAtld7uJXR1OtrW4WKq1saFMBnyNi2vbk7hvMp/vbank13tr+fW2Yn69MZOHt2Ty591ZPHmskCeu + Ludvn63njV+M88+/bYYz++H9g3z47g7+9f4yvLcgUALwALzRBq/W8a/ny/jXc8XwbAk8UwFP1cDfGuBP + gofree8XLTz15UZ+eU0JX9oVx03iEK7pk0HZHM6RyiD2SKCv5j2YTPZhXZI/Y6nhDInBaI8Loz4qmBKH + H5nWNaRa15IqpDDdJd+7M4AUiw8pulWkRK4iNeJCMiIuItuwmkxBmn4NaabVZAiZzIoOJEvIpxJQE60X + kiDIjPajKCWMimwdtfl66osNNMj32VCuynq7KCtxkp1rIUb6gM21VsidD3a5tioB45b78ch5o6WNdQUS + 7xS4/EmUfpgsRDVVyHGGXC87NoD8uGByVcZgfDglEtRUZxpozDPRWWqjp8xKb6mRgUoDy30J7BhNYfdY + Ovsnsjg2Xcje4SxGpe9Uxq4my7mCnNg1FCQFaqUXC1LCKU4TA5utSke46apPpbc5jcaKKAozIynM1tNU + HUN/azp9zSn018cy0hDDRHMMC22xbBUStKsnht3dMezsdLPcYGWuyijkR8dYcTjTVXqWmx1s7fKwTbDY + amaqLpyJ+lBmxLEsdBqYbdcx0RLG+qYw1sn20VpphZiM1usZEKPcJQSnqySQjlIvusuC5HkDGRYSsths + ket72N8bzUElBHc72SP9dkeLGPD6MDZWBbJUKWSoOlAcoL84QoGMYyUCT5etlTHtx0KtEKhGGVMtcq9t + kd45gMVxbRMneC4D+MYpG189mMxDdxXzzHcbePuhLt77Qzsf/qUZ/lEPz0tffV767BP5vPtIDi//NItH + v5jAty61cPWMDztbVrCl4UL2iGHe32vjUL+dfb1W9vSIg+nWs0NI4bbeSDZLq6FLpwnA29oj2d9l4uKR + GK6aTOf6mQKumynjqulqLp2p4+KZJvmO2zkw08nu2V62zQ+yPDfIhtlBFqf6NSzPD7F5cZjtsv3wfB+X + TXdx7XgjN6+r4HNTpXx5UxlfP1DO/15ezcNf6OGZ70/x+m82896je/ngsSN8+Ngp+PPlfPjn63nzoWv5 + w9eP8s0bl7n12CQXbxtm53Qfm8aH2TIzzcbZeRbnFgULLM1u8ArAZ7FBPlMC8MaZ9ZpIvTzbx9bZbnYv + 9nBgUw+X7O3hnqtG+eYtA/zgji5+cXcTj32lkSe/Xc0z3yvlxR9V8MpPG3jlJx28/OM+Xv7Rep779jR/ + uW+CX980xPcu7+X+wx3cuaeD67Z3ccmWPo5sXs9eJQDvWGbPvp3s2reDbbu3s7zDWwZ6fnkD00uLrJ+Z + Z3h8msGxSdZNTTKjylkvjLFl46C8u1aWJkqZ6k9kskOIVJ+dzcNOto662DZmZ7cQSpUFrATgWel3C612 + 5lqjmG6JYbg6irYCGxVpkVoZEzUPd54EmIXxYRQnhFMoAXS+BKL5EhTnSWCa41lLlnsNGWIr0iXATY0O + JtYdgMW4Cl3khRjEJpksEthag7RM308EZxL8KOJqtIZrgq8Sf6OFQEap0moekyYKWyXQVHP7WG0G3B47 + 8YkxNDbVs7xpA1dceTl3f+4z3P+l+/jGN7/OZz97N7t37qS7s5uigiIKcvKoq6qhqa5OAvQa6qorqK1R + KNdQU11EVXkBpUUZFORKcJUTT4kEWdWV2ZSXppCpssaS9RTlOago8VBR5J0vvSzXSmmOjfJc+9lKCnaq + 8h3UFIr/K/JoQnCV2p5poUYCNTU/sIKaL1ihRj5T4nBttpo/2EaDrDfKuVTbkCXbsuTzTBs1QoxzJcjP + ig45D7IeEy42NoJs1capbF4TxZlOyrJU5q+NwmSL2EojxSlmSlLNlKabKMswUyGtEngrUnVCTsWvJ0mw + L21lml5DVbqBauEAVbJvWYaJErGzhSkGcmWf9NhgIewBJEtbLs/Y055Lf0c+TVUJlOXLM8n76W3LZnyk + jIH+Alpa0qmuTqdQ3m1hWSEt3a1MbphmfvssQzLma/vqKGoro7SnjsLuuv8fa38ZJdd1/OHCsi1b0jBD + 80z39DAzMzMza1gaBmnEzGTLzBT+hxwmxyE7YDtOjIlDjpllxjxv7dMzsuzAvXet98Oz9qE+1Buq+tdV + m9TGEpLrCkmrKyKzvkQoQ0vjLN91elWFRpqaC1gJwUr81QRgJfQ6BEkVCexI+3yhAKzSFDtEYCUAK/Lq + SjSUEJxXV6yJwtlVxRrJRVmEJkViCrfgI/XOXWwtD70HXlJvvdSPGCZPLbWzEntNoVI/BW3eX4sjVbQD + qdcrArASf40hBgKlbvsqQdnfDWcfJw21rOYH9tbLeQVfceQ+KwArLhSAa1oqGJneyNjsMIMTvfSOdjE0 + PczBlQhgNQdwfUcDpfXlmgjsiHAuI39FANb4D8JvnrxHRbYSgCvKyCwv/bQArJD9F75vFWmdJu81Q66R + VV8o7zKX/Op0sopjSMkM1jKJ5OZIG8gzUVlopq48iAZxnOoqdFSKQ16U40ShONdlOc5if3hSU+RNbbEv + TWX+Gs2lQrE4SkU+gi+tpX60ybY2OWaVDnF+Bmr0zHTY2doTxtb2ILaJ47a9JZAjfQZumg3jW/tj+cHh + CH5wMJgfHjJx9zEj95w08uPjer5/3MBdx0x8/aiVLx0J44tHornjQDTXbAnh8jk7Z2ajOTWVwK7+SMbr + gugsMVOTZSQjMkDsZ1+CxFEOMgWSGBcpz5RLf1sdWzcPcGTbJKdVyuS9nwjA1ynR97wAPMsNh+e54dDs + ihA8r3HtgTmu2T8rzDs4uHBeAD61czPHlQC8dYxTyxPCKGe2jnLl9v8hAMu1r989xg07hO3j3LhDsYmb + 5TO37JrkNrnHW/dNcfO+zVy7a5Srdwxz7acE4E1cvmdCnmGKq+V+1dz5Vx1akPUZTuzcxLFtY5yQc52U + e1NcsW+aaw4vcs2RJS6X5WNyjIoOVkLxKRVJvH9ankcxw9kDU1JOcVYJv4pDsl246pBcV7hSuHpFAL5i + /5iMtRvlvfZzZHmAkzuGOLtPnlve63FZXhyvo6spnaLcENKS1DzARpJUNG6cjCkq2ifcC3uUfGfSJ0bG + mQhTQq8QGqXEXj32SJ1GSIQcH+6voZaVEBwarfuUAKxQEcVhMQEaodH+GkpkDolUYnOARmh0oMbqtSLk + HA5UamgLCWk2kjLU/L824tKsxMn48Gkcom9smulTfDYSeDUK+N8igGUsidUigM1ynWDSs0PIEJQAnBCv + 6qyDzwrAh/eNMdhTRI6MZ3Ex3tqUMImJAaQoESLbcp4UIaPASn5xBIVF0eTkhMr5dMSEehEd4k2c+LDx + Vl8ZrwLFF9BTGC1tJzGEidI0ttfmcrypiOuaCvg/GUe+35TCL9pT+F1nAn/qiebp/lDOjYTy3lgY7w2F + 8HafSZxy8QdbxcHWUjYH8pbwZqM41yp6V5Zfadbxqtidr7UZONdpEuc9SOOtnmAt8vedXpVCWta7hPMC + sIm32xwC8CtiP79U5cELFR48U+7G38TW/lPeOv6cv56/if39jNjmrzbo+bAvnH8NRPJxbzjvKgG4wegQ + fld4tUrHy5WBmnj7bIlDxH223FdcQx+eKvXlqWIfni7x41np454rD+D5MsUFAnCOXFt4pshrRQCW42oC + eabGuCIAx3BfazLf78rii33F3LSxjiuH2jg93MnR4V6OT09weucyexYX6G5pIz0lU77DVBLiMv4j8QnZ + /wX53P8bknL+Cw4ROEHKrKwisrILSUzOIFbuJS4+7QLSNWJXiIvP+BSxcbL9AlaP/2/Ex8u9rxCnhGAl + TCsxeIXo6KzPkPG/iUr9n0RFpnyK8IhVPokSvpDzgu8Fwq7CHpawglr+hE+OS9D45FxKDE50CMBa9PRK + RHV0vEZMXIK872QKC/PpaG9kbKibTcMdDHdWMd5ZLr5XMye29XF0uZvtm+qZG6xgU2cxjUWxlKTayRQ7 + PFnsm2SxxRPDpc8M8sFickOvd9NseT9Z9lWCjor+Ncs2iweGYF/pa42fCMARKwJwtDfWFYKjvQhPCiQq + xSCl9MnJSgA2kJgbTFphKEn5YURLfxieJv1aQQwVbWU09DdS1VUj9ksh6SXZpBblCNmkiO2elJ9JYl6G + RlJOOsnZirQVVpdXt3+WFFJy0i4g4zxpuZmk5aWTnp+hkVEg67JN7dM+myXnVWSnrpQOkmQ9KVuOycmU + +/mE5Nws2ZZFan4OKUJGfr6QR3phrthZ+SRUpGLNDcU71hePcDf8lNAY5SbjjS9pKXpypK/Oj/SnWOz9 + 4nAf8sPEHxN/INPuQXKYGzFhKtXxehnv1hMWvUHqvvhnqZ7kpXuQH7+OyqhL2Bi7gaNp/nxObPx7YnT8 + MSyQv4nP9VK0VeMfYrM+afDhSbMfjxn9eNjiz8NWI38IN/NgqIXf2k38xmbm3mAj91oc3Cf8KsjML4PN + /Fz4iez7nlnPN8S/+6a/Nz/y8uHHHt5818eHuwL8uMug4y59IN/R6fihbyC/8NBzj0cg3/LT83nZf4Of + O9f4uXKNrys3e7vyLYMfD4ZYedoezovBYbxiC+PZsFAejwnlvvhQvhUXxK2xJs7IuLpdxp8+qWMVkeKz + RrkQG+VEWJQzIdEuUgfdsEUq8Xc1+tdfCMAqtpw1UonBDgHYYHMnwOKsib9e4sN6m8SPDXbCEOqCRd6z + OWQDBvMlBAfLO5bz5YudqwTgak0ADpGx0lfat4vYE0KUu+ApdoGKjPcgSPzm4DC5B8Ei358DTw2Valov + frMjGtiZAOsKNoWTNt+vLlTNAeyJSa6r5qpWGCJ90Il9o5M6ESDn09llWUO2CwabA71gVKgU7koADvbQ + CLJ5aAJwiNSf6Dh5b5niD5aKP1dhobDYRGq6HxHyPi1BLpikzZvMnpjNPppfrvnm0i+o86l5fzWs3hp6 + m/ozrLe8SzUNjhc+6g8jKmuALPsaPKTvUFHBsq7SQ+tcV3CkiFao6EIN8cEUfgYvDX8VmWiSc0sd1Un9 + 1AcHSr+jQx/k4H8JwH6GAPz0st+kk2c3YQkJkucPIjgkWMNitWiobfbwEGlPoZoIrNZXo3gtVrOGEneV + 8KsE4M9GASsuFICV+Hs+HbRcdxVDkFHuJQDvAC/cfFy1eYB9/4sAnJweS2ZuAvkF4k/nR5OabRMbzCT9 + koniymCaWiLpaIugpy2Moe5IFsZS2DmdxY7JbJZG06V/T2KmN56p7lhm+uLZMpTMLjlm72i8+Dd2trTq + WVBiWr07ahq5k53+XNWt41qxu65r9+f6Nn+uawngmkY/Lq/x4GSFO8dKnDlctIH9BSoK+GK2Zq1hIXsN + iwVr2VrqzPZyd5bL5JzF3hqrAvB8rjuzuY4o4M1i62gCsDCd4cRc+nqWM13YpQnAXhwq8ea42E9nxAa6 + vDrwvAB8uNCdw/luHMh2Ymf6ZWxPkesnrWFZyl3iVx7Ic+KYigAu8OAa4cZ8D26R696pxF/hizlefD7L + ky9kuvH5DFc+n7aBz6erOX8v46vCN9LW8u20S/mOnOtbGZdxV/rF3JVxET+QZ/15hRMP1LnyaLMbf213 + 559dYjf2q1SvOt4cNvL2sI63hwJ4d9Cft3t9xQ710iJ9ldjrEH19xBb1XcFb470eXw0lAq+iBOA3xs38 + ecjMN+oD2Z3iRrXuIuLd1xDmsYZgPycZjx0Rvkr49VJi7wo+vtKupE55+rjg4e38CdKvXoh2rHxWBWao + dqPaj/pNTgnAqtTmAA4KdPwWJxjUnz6sAZhs/lra51Xh1xph0LJ+hESZZV35TSbxE2Jo76pmZn6InTun + 6O9rIFVNoSB2QojJg2irD6niKxUm6GlQAnB+CBsLbIzkWxjNNzCeH8BkoR9zpYFsqdaxs07ProZALd3z + tlpPli8Uf9Vv31VubKl0Z0eNN3sb/LUoYCUCH+00a5G/KjJ4n5ozuD6A7VW+LIt9vaXCh8UyLym95fNe + 7Kz1keP85LN6jndaON0VzOn2IE61hnCyMYRTDTZO1ts4Wmthb5WBmXxvelOcaE9xpSXVh6b0QGrT9JSr + rKfiO6loYE38jfOkPN6LqkQf6lL9aM420JorZOmoS/amOcOXjeXBTNZHMtsYxabaEPrk2dsynWiR+tiZ + u4ERud8p8THm6gzMyvvYVOrNRJEnE4WeTEr7UmLwfLkfS5X+bBW/YUelL4eqvLm6IYAvyTv4YV8wvx2w + 8Uivmb/3mBwCcKs3b7RLfVR1UquXAbzZK35Vn55XhWc7/Hmi3o0Hyi/j3sKL+JXwm9INPFjlykPyzhW/ + r5b9FW7cX+HCA5UOHqxykX1uPNkRwN+7AvmH8FSnLMs1n2x05/EqJx4rX8dfal15qsGNZ5ukDTV58VKz + tybknmuTttHqx7ut/tp8v2/We4l/5c5zpevEN7uER9LXcL+0d8WjuZfw9wpnXlQpoLv8eUXa24sdrnLO + 9bzYcBmvtzjxdrsb76to+1YXzjWu5/V6hwD8asM63mhx4d1ODy0N9DvdHpoArNI/rwrAbw768MaQr8Y5 + 4bVhX14e9uGlFV4QXtzoJdv8eX1cz7kJI6+OiU85Kutj4qeOBEp/oOPcsIFnpX949rwA3M6afY2BzBa6 + MZjuTHO8C8ViJKQEeRIaIAa1jwc6HxnM/bwx+crALw1W/esjUudMsgzI2XZXapP86C0wMNdoZU9vGCfH + ojk5YufExiAOi/M7VaanJdGDPNslpBgvJt68jlgxcMKDnAkLdiNcDMjoSG8SExxRwMlSxsV4Cg4BODvd + n/zsQIoLVISvlcriYErzjBRkBpKT5kuuGAiF2UbKC9U+h/hbkmsRzFTk6Wkr9mOsyp/lJn9OdPnxtZkg + fn8wihevTubt6+L48Go7H10dxPtXiWN+lYXXrjLy8pUGXrwykJevNvHS1cH880wwjxy08KvtJr62yZdr + u905IF/gQulaxqUyjOWvE5yk0/CUMoBhuW6/3N+wGLu7i6xc2xTHtyby+NlSMQ/uLOPBpWwemEngkYUE + /rormWdO5vL8zeW89M0GPvjDOP96dgu8tQc+3MfHH2znow/n+dcHSgAehXd74M0meLWSj14s5KPnVRRw + ATxXDE9XwN+q4AnZ91AZb/6ygj9/qZh7jqfw+RkLZzvcOdvsyeXSyZxW6SzK/NiV583mBCf6Iy6jK3wD + 7ZFuNIihWW51Itt4KSn6i0mxrCMnXOWP99d+vM+ROpJhWk+afi0ZgReTK8cVi+FYFOJGnhiN2WI05ovh + WRjnTV6cykXvRLJtLYnWS8iKdKZYOpzKrEDqpZNtKDYKFmqKgqgoCKJAvruMTAsx8WIUhziLkacEYGds + wa7Yra6EKeFXyhiVUlyuF2t3IT7EicQwqZNCihiS6UKmODEZYlhmhXuSG+lJcbwP1akBtBdY6C4y012o + p69EOrP2cLb3x7FvJIUjExmc2JTLvv5UhuW+KqLlucPk+WLWU5TkLvftQ6l8pxWZRmrzgmgqCaWnIYG+ + pkSaK8IozpDBRGiU5d7mRNkXS3u5lZ5KK6P1dqabQ8XQsbO1JYhtzUKThaV6C3PVJjaX6xkt8mOiLID5 + Ogtb2kJYkGOm6nWMy2AxLt/ZVLOac9DMXIeZSRlQxmUwGq7xpb/ciwExUgYqpS2W+sgzKgHYleZ8V5rE + CGmRsk3Wu2T7eGUAyy228wLw7hYL2xvU3Lky0MlgNFPqoUX+TpW4M1kkBpIwWSzrYkhNloqxJMvTFV7n + BeDFRh2L0sFvafBjm3SS22vEKFOR9uNBfPdQPI98uYgXf1XH+4938PFf26SONkpdVXNYVwplsp7L+09k + cu7+TP7yvUTuudbGdVNivDWsYb7iYnZKp7y33aQJwLvajfLeZHBp9GVLs1y/1Zc56axnBSUCLzbJoCr7 + 93cYOb0xnKvHEoVUrh7N4uxIPmdGizkxWsbhsWr2jTewY1MzS5vbmZ/sZGG2h4XpXuaneliU5cW5brZM + tnFQjrlyokGep4ovjJfw7bkSfrKzhJ+fKOO3N1bxt2938eq9Y7z90DwfPradfz2xj389foiPHzvK+w+f + 5Pl7DvObL2zha6eHuXZHF0dm21gebmFpuJctm8ZZmpxidnJGmGZ28yxzSgSemGZmfJLp8XFmxoaYHh1g + eqyHWSVOj7exON7K0kQju2bque5QD1++oofvXtvJ3Tc185vP1/GHr1TyyNeK+PN3Svj7D2t46kfN/OOH + nfzj+4P8+RvD/P6Ojfz0bBd3HW7i1q1VXDVXzYnpOg7OtLJ3bpCdWzaxc/siO/dsZ/uebWzZuYX5rfNM + L8wwqeYBnloRgIdH6RkcZnBsVBOAp6eHWJrrZWm6kXl5VxPdiYxKXZvqtLLYa2OLDP7bhm3snrCzfcjC + lHxn47VCtYHR6mCGqkLolP6yOl0v/YaPtGM3UkNdyRQHNkcca0WWtGUVAZwZ5kpGmBPpodIPha4j2b5O + a/vJsj9KHFWL8TL0urUYjBvEARLHVfv3sRiPlgBBHDCLSrUUgM6o0jeJM25X4q+FyFgrEdE2bKHioNn0 + 2rwj5iDleBnFIbORnJbE4NBGzlxxOd+465v8+je/5v4H7ueBBx7gBz/4PqdPnWZ0ZIy6unqqyquor66j + obaW+ppqoYqGumoaGmsc1FdQW1NKeVkuRQUZ5OcmUpCXRFlJpqwnkazSdsYEkJpsJCvdQlaqkdxUE3lp + ZvJkPT8jyCECS1mcKeNilo3SbKsmBucn68lXYmuygZJUs0ZxilFDbSuSczqQY5J0FEqp0KJ0k/RaFG5e + XADpEd7Sr3pegDdJQrI4/NpyqDepEX5kxupRc/zmxBnIjtGTJfedE6sjP94R0VuorqEifBP8KRHKZb08 + KVAbUzRkW6nK1CDbyuT6JUKRUJgodUGeIyPGlySxEzLkXJVF0bQ3pNNSk0xprl17H+V5djob0xjsyqOj + JZ3aygRKCuMpyE+moDCThuYaRjdvZGbLGONzfbQN1FLZXkxlRxklbaXkNinhN4+s+gKy64qkLHHMO6tE + 3WoH6VWVpFerqOCqFVR64kqNrFopVYSqHO9ALasUxUoELtPKHCX4ynlzVSnk1BaRU11CVmWRJgCnFudo + qQSDYmz42QLwMHo6RGCdBx56NzwN7toPGEoAXhVolWD7WQFYib8XCsAqEtjf7KtFAbv6uWipn1eF3/83 + AnBonNT7nARqWyuZXJpgdnlS3uEIQ5MDjM2PceTsUa6+7Wpmt8/S0NFIWZ1DAC6W5/6sAJwv7+m/oc0B + XFmuicBZKhW0kFFdoZGuhHjh0wKwbJfrZNYXkduQT15NJlklcSRnWElOMZCeZiAvyyh1RNmOwdRWBFFT + oZNlX8rFcSkXx7xKyqpCsQ3E2a8u8NbmAW4qDdBoLg6godCXujzZl+tJTZa7g2xVelCf40FXWSCbxDlb + 6AxjrtnMQoOOhXof9orjcvUmG1/ZGcW39oZy126zlAZ+cNiAmuv+h8cNfPeEkW8et/D143Lc8Qi+fDyO + Ow/GcPWWEM7M2Tm7EMcpsRN3D4hD1mijo9hMdaaJjMhAIuS7CtKLIxtsITk+VuzfHLqaqpkb6eGAfEdn + 9s4Kk1y+d5OW6vn6w3PceGRhhXlHeVjKw4vcoLFFWFphC9cd3qpx1cElTQBWEcXHt01oguuZHZs5s3OC + y7ePc9WOca7dsyoAz2kC8KoIrLhBrn/Drgmu36migWV552Zu2LGJm3ZPccveaW7dL8fLcdfvmeDqHSP/ + JgBfsVsJwJu5+sgc1xxd5MoD8lxyL0eWRzi8ZcgxX7FcX4nEV+6f4eoDc1LOcmr3Ju2YQ3LMse1jXL5v + iqtUGmm5R8U1Kv21cNXhaY0rD8t+QYm6V6/gWJ7k7P4JTu0a1iJ/j23fyOldI9q9XXtoWhOAt2xqYKA9 + l+qSaDLT5PuQ/jVZzaObaCAo1AOTzZ2gMB/skX6aqGuX7y8kQkeISlcaprJOBBAcqqYgkO9UsIT4yrqf + JgIrMTcs5hPxVxEeq8TdT0TfkEgf7UfdoFBPKdWyD7ZwXw3tHHK90GhVfiIsRyXI/SUFE51sISrJTJSM + BZ9GrxEp/fSFrG6PlvalOD9HsPTBShBOkrEoXpZjpO+OTAgkWvputZ6WHUJWjn1FANad57MC8IE9o/R2 + 5Ml7NIpf6CF+oI8mAKs/habnBGmsCsCZBTaKy2MoKYuloCCcVHnfCRE+JIT5ij3gT4q80+xIE0WxQVQm + 2mhOixDbNZN9TYVc2VXOHT0VfLszjx+3ZvDL9lQe7ErkL/2xPDcYzmtDdt4atvPmQDDneoy80hrAS+JD + vtbgzzmxd9+sD+CNen+N18UOf61Jz2vNBs61GnmjXaV6DuZt4Z1uK0r4fU984Xe6gni7U8p2iyb+rgrA + 51QEcZ0SWz14rsKdf4qd/Zf89TwhfuXjuZfxp7wNPFnkzFPlnrzVYeX9njA+6AnnnQ67XNfEK+IjvFov + 1xdeqdHzQoVK+ezGX/PlM0XuPK3m9S334/kqHS/VmHmp1syL1XJcpY4XynQ8L32d4mnp6/6e7abxbJEX + z5f5nheAn5XP/F18mEea4/hNexo/6s3l/wZKuW24gWtH2jk72s3J0X7OzEu73buTwzuWGezuJjsjh6TE + DFKSssSfz9LKT8iRdpL7GfJXcKynJK+Qku1gdV1Q+5NSP0v+Co71jKxCSkqqKSmtJjO7gJTUHFLT5Lqp + 2SuoZblHObfik/uQz8s1tOjhC0hIzPyfJCbKZ1ZIWBGz4+KzzhMTk/1pYjP/NzHp/5PoqLRP8UnE739m + NdXzJ9G/iRqrAu8ngq+Dzx53/lwrKbMjopLFXpYyOkFIFOKIiIknKk6lgU4kPz+XdvXnu40dTAy1MdxZ + yYS0vZ2bWzi1o5+TO/vYLf7C4kgF032ldFUl01gYR0VGJMWpajqRcDLjbUTbAwm2eKAzuKHSP/sZlS0k + GF0JkO0qulD9KPyJ+KswYJX+0Sp2Y/AKlkgvQqVfipB+KFRsTiUGx2SYSMq1kVYYTnJBhKyHEJMVSmZF + Cq0jbfRODdAx3k1VVz1ZlYWklRaQLqSV5JFWlEuqjL0a+dmk52WTIajy/5H8TCHrE/JyzpMh7y2jIJtM + Oa8iW66TWZinbXccI58XMjQxVyhQx8s+jXwyCgtWKNTILBL7VsgqLtXILSkjV5VljswsqbXZhBZG4RPn + j7v4XN62dehD1mvpi9PjxW6XvrpUxqJqGUuqxd6vlLGlRMacAvEJssLdSYx0k3qxAXvEOsKjN5AQ60ZW + iuxP8yQ/dj3lkWsZiHHiQIovN4ud/4PoQH4r49/j4QaeE/tS8dcQHY+ZfXhUbNWHjL48YPbj/mA5Tnyz + X9tN3Cu27H3ih90bbOA3QUZ+K/wuyCRY+K3YQfcpEdhi4kdGHd/R+fEdXy/u9vDmp+5e/NDbm+/6+/Md + fSDfDpTrBwZyt4+Oe910/NItkO/L8lf9/LnDz4vb/Ny5zcedL3p78AO9Hw8rAdgWygtmG69YQ3kuzM6f + o+38Ls7Oj2OD+UqMiRtiDeyP07FRxqzqSFeyopyIjXbS0mEHx7oK7o4/IaixWuwAm4zDtggZ+7XSX/DD + Ku9URQDrglVEu5PY5ZfhY74Mv6ANGOzOmJVfG+oi/ug67FZnEuR8SgCuLgkXuzaKkqIQsT38iYx2JzzG + nbBYL8GHUBX9LvVeCdDKVlB2gxKdNeF5pV2Yxc8zhUv7kFKh5iRWUb4q6leJv/42ZwJVFLGcwxLtIz5K + AFaxQ8wxfpoIrI/w1URgg9geDmS7YLSLv72CEmzMNnlGJQJ/RgC2hbtIn+FGtsrmWGmjssZGSUUwKel+ + hF8gABvN0s4tco7PCMAqolixKgAbrHI/Qd4ESn1SaWPVfKEKtewnfpXCd7U0rOJxHn/Z7sARcajOo1Ci + ryb8BgVoGKwGua5BE001AdgsvpdJCb//jv9KqQ/Sy3swy/dtxR5ul342VMMR8WvVCIsMk741XNuu1pV4 + q4RcJQyvisIGsxKB1bzAfueF3wsF4NU00Oqzq+Ky2eZAic+qVPfsK36Ep5/4mL5K6Pb9lAAcHedIAa0E + 4Oz8JIpLUykqTSRH+srMQqv0IxbKa220tUfT3xvL5qEE5idS2DErdtZCHntnc9k2nsnSUCpzfQlMdkYz + 3RXD4mACO4eT2TsSx96N4ewR+2hvp56DnQGc6NFxtk/Hdb16ru8K5IaOAG5sD+Sm1kCubfTlbI0np8rd + OF6ygSOFGzhQsI5dOReznLmGxaw1LOWvZbnUmR1l7mwr9dLE321FPmzJ92Qpz0MTgFUUsJYCOseFiWxn + Nmc5/5sAvC/fi4PiHx4p8eZUpT9nVBRwhR8nir04UuDOkTxXDmY5sSv9MnYky/UT17Bdyn1Z6zmc68Kx + PDdOC1fluHF9rhs3i111R470K3LeL+f58LlMD25Pc+L2lA3COu5IuZTPp17Ml1Iu5mvJF3GX8N2MS/lu + 5mV8P3s9P85dx8+KnbivwokHa5x4uH49f2pezz/anXm215NXBv14a0jPO8OBvLsxgHcH/Hi7z4c3uz15 + s9Nd8BS71Fvj7W4ltvnwVo9DAH631yEAX8g7Kn30qJHHBkx8pTaArUluVAReTIz7GuyCxWc9gQHueCvx + 19cVzwvQxN8V0dfdy+kT1PoFePi4OCKDLxCBVdSvlvpZltV8wGar1EcZAzRCDeIvmcSPMUr9lHJlzl97 + tEn6OrP0dUoAVv6OkbSsKNq7q9m6fRPHjm1jTOzUFDWHv1n6HZ0LkUGepEgfWJigoyEzmM48KwN5QWzM + MTCcE8hIji8Teb5MFfkzXxHAcnUg28Xu31YrdUoJvp9C6laVOwsVbmytdGdnva82F/ChDhMH243saQpg + d6OfJgwrAXhHtR/bKqROVvhqbFURwRcIwEfELzgmnz2paDNzusXK6eYQrmixc6rRxpEaE7vK/BhL3UB3 + /KV0prjQnuZLW6aepgwjNSk6yhP8KI33oSzOi7J4DyriPKlO8KZexuCWLD3tOXrasgKoT/akJcOH4fIg + ZhoimW+KZqLaSl++N20ZG2iV+t0jvsRYpR9zjSaWmiyaCLyp3JeRQg+GC9wYk3YyLu1iSmXble2zVX7y + LuR5pA2eqPHhFnkXd/WY+WW/lYf6LPylz8zTnYG81OLDG61S/7qkvvX48V6vjnf7pQ4PmsT3El9F+oJ/ + tHjzqNT3+0vW8tviS3hA6v8fa915tN7zPI83+vBEsy+PN3lr/FnO+2SbH0/16HmmT3wdqcMv9Bl5pjuQ + v7d48mS9K3+q2sDfal34Z4MSa915odmDl5u9eEU+qwTgN1v9eEcJwC3SjoRzKl106WU8kbuGB5PXcG/c + Gn4VK8sZa3ii+FI5hycvKwFY2tSLXW4817qBl1s2iM/mygfSBj/s8eI9Fdnb4sS5pnW82nSZsJ5zLS7i + G3pIm/Pi7R5Pzqm2qoRgWf5PAvDrwitDPhovb/TWeGlQ2v+Q3OOIjjdGxBeUZbX/9VGHAPzOiEG2G3lu + xMRz85G8dqyQf93SyZpFqXjj0pF1p7lSF+dKrgz2CTLQ2qRRBnqIIeIhBreXGNhebhg8NxDsvY6oACfS + gt0oCPegKTWAYRkEtndEcnI8iTu25/DFnRl8eVcqX1hO50iPVKZCA3WxzuRaLyVJjJdYywbCxKhRYl5o + iAeREV7ExfmRJAZ5klRaNbdFrBgwKZoAHEh+tp7iAguVJTYtSrQkz0yBVGCVHjpXiW7ZRk34VSJwSZ5F + 1s0OUVgacWdpIJO1OnZKBby8N5DvLth59Ggcr1yTxjvXxPPBWTsfnQ3mvSuCeOushVfOmnjpCiPPXyGV + RtZfvMrO305YuX+XgR/M+nFTjxMHa9cyV7iGgdQ1dCStoT3pYjqSL5HSibZED8GHFml43cJOMcpuaEvi + e1NF3DOXz4PLhTwwm8r9m6P4w3Qkf9kRxzMnM3n1jgre/F4LHz++GV7cCu/uho/28vFHSgBe4F8fTsEH + Y/BeH7zVAq9V8dGLxXy8Kv4+W4oWWfnXKv71aCXv/66EV+4u4fc3ZfLtXeFcL5XocNVlnKxy4vJqT66S + DujqOulcKgwspbsxEH4JrdaLabavp9a2nlLLWrLUfIsBa8gKXktFvDfN8l7b84KlAwkUg96dkpANVNg2 + UB/lTldqIN2ZJqlDnlTGe1KXFkBDlo7qDD+K48UgjriUzPC14ki4UJPlR1OBgY6yIHH4rLSXyzmLLJTl + msjPMpIlRm1Skg67GJ9K/A22uGIPEqPW5k5kiDsxIW4kKKcj3E06cHFQot3IjBGiXOUaSvx1JivMhYwQ + ZzLEcM6W5QI5pjLRm265Tn+Jif7iQAalbsy22NjZH8Ph8VROT+VwdiqfwxtTGS8zUBt3KSUxF1OSsI7K + NHeqMrypzQ2gUUUQl1npqQlnuDWekfZEumsjqMoOoEyera3KzqBs72+MoLVET1e5kfEmG7NtISy2WFhs + MrClSc/2ZgPbZH1ro3SotUYmK6SuipExXy+drGyfadCxuS6ATbW+TMrgMddm0uYbXO63s9Qj52u3sLkx + kKFKbwbLBZUOulzqXbFK++xOc54LzQWuWtmS6yzfnSsjYsBsabayq93OHmFns5nlegOLVTLISac9Uy6d + eIlK/6wEYDemit2YKfVkvtpX8GO6zJNZ6TNWBeCtTUa2NuvZ1hzITjHOdta5cbRdOvxNNr5/NJEnvlnG + 6w9Ivf57v9TRHnhB6u6LtVJ/a7Q6zPOFfPiXHN76Qx7P3JPJfbdGcvOiO7tb1rBQeRG7pNPd127mQHcQ + u2QwVOLvYp0XCw3ezElHP9PsownA89L5LwrbpcM+1GXi8uFwrhmP5+rRJK4UQ/PyjRmcHs7h+HA+R0aK + 2T9ezc5NdWyZamZxpp1tSz0sq/moFnvZstjFloV2tk41cHhzLddsruKOyQq+PlvC3dvLue9QOQ9eVcUj + n6vl+R918+ZvR3nvoWn+9dgSPLYLHt/HR4/s4+379/Pkt7by0+sn+Pz+Dq6Yb+Dg5ga2DTexbayXbZvG + WJ6akuvPsDg9y8LUDPObp5mdmGR6bJzp0REmRwbEqO5h03AXU0Ptsk0YaWFqYz3zI9Uc397F9Qe6+Pyx + Du46286Pr2/iF7fUce+tFfzui5X88auNPPqNNh7+ejcPf3UjD35hiJ9fP8BdR9u4c0cdV0yVcnxTOQcn + atkz2cru+Y3sWp5kx84t7Ny3Y0UAXmJ+6xwzSgCeVwLwNMMTm+kbHqNv4whDcq8Tm0aZmR5hy3w/S9Py + TjdVMtmbwURbJDOdoSz22tkyYGfHSCj7pyLYNWrV5gAeq/FluDKQjRXSJsuCac0XhyJFpRn2JHVFAM6K + 8pR1Lyk9tOXMCGnr0s6zI13IiZJxRZzs7Ghp87EeZMr4kSQOb6g4rEFB67EEu4iz5Kn9qG6xBciyURNz + LVb1r1j171i1bCAk3ExEjI2Y+DCiYsUhCw8Wx1QcJZtJ9quIYNkfFUZhcSHbduzi63d9i9//8Q/846mn + +Mtf/sof/vBHvvOd73L69OWMjU2IQ9RJc2MLDbUNNNTV01hfR3NDA22tzXR0tGq0tzfR3FxLbU0ZFeUF + FBdmUlSYTllpNoUFKSQmBBMVFUBivF4MVz3J8QFkJunJTjGRm6pE4GAKMoIpzLRSnGWjOFvIkm1pRrIT + AsiJV3PrBmrRtwolpOZJv6oyGChy5JiseF8yZZxSc6Vnxkkpn8mScTgrzp/MWNknDn5atC9pUauotDlq + jl5/UsThVwKwEoTTo/3IidORo4Tg2ECyY/y1uX4L5Bqa8JsUIMu+2p+CypP8qUkXI1WokH2lsWKkKkNV + 7qU80V8M1wApdZQly7guz1qSYtSeIys+kEJ53sbyJDrq06kvj5VnDyZPjqvICaW7MYP+9hzaG9OoLY2n + ND+GsvxksQsyaGmoZHykm/nZAeYX+xgdb6Sjt5SWriLq2wsob8yjsD6b/Noc8uryya0rJLu2WCglq1pR + RmZVuYPqihXKyKop11BpnrNq5LhV1OeUACxldr2UGg4BWAnBmshcK1QWkVlRqKGiSqLS47ElhBEojo6X + xZEG2tXfFdcAcZjUP9ONnp8SgNWcvUr4VZHAis8KwCa7QROB1XYl9Gpz/so5fdWPIoKa+3dVAPZTP6iE + BGqRxeZwo4Y1Ogh7rJXErDjq2qqY2bqZ+R0zbFocZ3hqkImFcY5ddZzr7ryO+V0LNH5GAC6Quv3/VgA+ + PwfwpwTglTTcnxGA0+V4hwAs34O807yGIgrqcskqTSAh3YqagzVe6ktGil5sQQulhUFUyZhdV2WmvspI + Q7WBhko9jRU6akoCqMzzpjLXS+wQGd9LdDSViiNVpKNOHMDKDHeKU10oTlwvbKBE7LziJGfpp5xpK/Jj + tFH1ZXYmZRydlHFxssKd5UZPTm00csdiKF/ZbuPLywYpA/j2AaOMi2a+d9zEt0+YuOuUlW+cCuVrp6L5 + v1OJ3HEghiuXbJyZDeHsfCwnJuPY3R/NZIvUb7n/mqwgMqJ0hGsRwP6EhdikX0gQuzeLVnkfkwMd7Jkb + 5dTuGU7vnuSKfZNce9gR8bsqAN90dJGbjglS3nxs6wrbuUWc5JtXuPH4Dm48toOrDi1x+d45Lb3yyR2b + OLVLzrlnmrNqruBdm7hKibsqivfgzKcE4Ftk/VZtPuAprt+7mevk89fuklI+c52UN+yRz+yf5Rbt+Bkt + YvianWNcJ8feoATgAw4B+OzuTY4o5sMzmgh8du8UJ7ePcXBpkAML/Vwu93H1gVmNqwQlAqttJ3aOa8fs + l2OObR/VhONrjy3Jcy1yw7EFrj86r3HtMdl+VD5/dEauMa2JvoprZXmVKw9s5szuUU7sGNK4XJav3i/P + IftO7BxmebKJ0e5CmqqTyM8NJTXVhBKAEwSL+Dd6iwtGmwdBdjWHn5+g/nDkIGgF7YdRq4+G+rOS2eZN + cKgvtghfTbxVKaSV+BuVcKEArPbLcWEyvtkdQrNZrqcIsntq11PnUNe0havryhgY4jivXdUhFYUcq3MQ + F0CYtJdPUOv+st1vBbkPQW1ThEsfrbhQGFaCsJr3V4m/ETJ+hEb7yL36EaP+jJEdQk5+OAkyDsVdKACn + W2ioT2NxvpMzJxfZt2uYrtZs0uScEWGuxER5ES9jeopKAS3tWJEqfkaS+iNEvvh8VQkaxcWRZKWbSZZx + KCXSn4xwGS9U5G9ssIwxdurTwujIimJzUZLYqNlc3lXCHf3lfKsrn7vbxe7sSucPPUn8RXyBZ/rCeKE3 + mFf6LLyqxN9OPS82+fF8vS8viy3+Wp042jV+vCGcq/HndbGDz4mtfk7s+jdbzbzVZuGdjiANlbb5vc5g + Puiy8n6nlXeF99qDeFds+Xc0DFpU8ct1Pjxf6c4z5e78o9hFi/59LO8yHsley8PZl/JHKR/LX89LYm+/ + 0RHCO11hvNUVyqstZl4WX+LVRgOvyb4Xa3Q8XebLn/OceCz7Mp7Mc5bzefJ0RQCv1Jvl/sJ4Q3ilwSEC + v1Rh1ERgxT8LfPlHjpvGs8UOAfh58QmUAPxcXRD/aAjlsdZE7u/K5O6BQr4+VMHnxpq5cbyDq8d6uHxi + I1cvz0vb3cPxPTsZGxigIKeAtJRs0lNyNNJShTRZljI9LY/U9HypAwUOMgqF4hXUciEZ6Stk5DtYXRfU + fvX5T6O2rW4vIL+gnNraFmrqmikokjE8S8ZaIT1TritkZDlIy8jTWL2uIk3Oc6Eg7ECJ1v+dlJSC8yQl + 550XgleJi8v5NBeIw/+JC1NK/yc+mzo7Nla2/w9W50j+ZN7kVI3ImJQV0oiMXUEtn8exPzo6zYGWHjtl + ZR5mKWOT5DPJmvgbEZMg7T9exuB4cnOzaRUbd2iwjYmNLdJPVrK5p5JdUy3Sjw7K+KT66Ea2jJUzN1jG + aFsuA/VZdFVm0lqWSY36A5+adzJSbJEglS7SBT8VuWf0wFelgl5J/WyS/jMoVM3/az4vAKt00Cq1blC4 + N0FioypMYV6ExAYQmqDHJmW42Jkx0gcl5dpJK4gkOV/N8RtKQm60Zk8MzA0xsX2aocUJWkZ6tD/sZZQV + i41SQma52G4lUleKpe4KGUX5ZBXmk1NYIKXCsf7vrO7LO09mQa6Qf55sOSZbtufIeRW5cp2ckiLZVrjy + WdlfJNsU4pOofbklYl+WKVG3jNzycqGMvPIKBxVVGvkVtRQKRUJBeTVF1TWUNFWT3VhItNhOgfJevMTv + 8gleJ+PWWuzW9WREeFIu76pWfJGWKD2tUYE0CzURPlTIu80P9xB/wJ1Y8cUiItcTGeVEUrQrOUk+FCkR + ONqJ8sh19MW6sku2XSNjyzdjdPw8XM8fIow8Jf2z4gmxN/8gNuyDYtv82uTLvWZffil268+tAfxMbNmf + W3X8MlivCcC/E//tgWATD1kt8pkgHrIF86A1iHuNBn6q1/GDAD9+4OXJz9y8+Lm7Fz/x9uEH/n58XxfI + 9wID+HFAIPd4B/Jrdx33uen4kSzf5RfAV/x9+KKvJ1/29uQbPp7cYwjgUTn3U8E2njMF8bLNzvMRoTwZ + FcLvxV/8ldjH3442cYf4PSfiAhkTf7UhzInc8HXEy7sIjXUmON5N8MQm46dNxqeQyADsEYGCThuH7fIu + Q2R8DpGxXomyFnmnRhnDA4NcCLA6oQtxxRLmrgm4dhkPQ+yuRId7kiY2rsp+VFsaSV1FDCVFUofTpD7H + eRGd4E1koi+R4sspwmNk7BbCVZ0X+8Ee4yBE/LsQ8dWsMQHSLmTcT1CR8SbCEo2ESF0Ikv2mSG/8Q+Re + 1H2IL2iVsd0mvp5d9geLrWCWzxrFHzTKvZs1/OUzAVLKvjCd+BHKn5BzhSkRx198al+xbxzzAAeHyPPI + s4REyjMleJBbaKKyJpSahnDKa+wy1ovtEy32TLArZrPYOBYfzFInTBaF3FuwnEtsJmUvKUzi5yvx12D1 + Qy/7dFKXAkxy/yuCrlrWMPtI3+FzQSnHaTi2qc9diEFFH4pPZZQ6aLSKj6T+XCvLJptJQ4mmCl2QjkBz + oCA+mOBv8DuPEn/VNiUYB9ktmsAaER0p/WaURkR0hLyLEE0UjoyJJHplm1pX8wEHCWr76rbV1NAXRv7+ + mwAc5BCA1WfVOYJDrRrWMJtWmmxGeR8B+AR6a5HASqRWorY1PIjQKDsx8VGaAJyUFkNWXqLYWplUVqdT + XBkn/UcYxRXikzSE0NkVxfDGeOY3p7BtNp09C1nsE3ZPZbB1NIWFgUSmOqMZbbIzLkx1RrLUG8POgSj2 + b4zk0GAoxzfaOL0xiCuHzFwnvtON/QZu6gnk5i4dt3YYuKU1kOsbfDhb7cHpMldOFKs0yxs4mL+O3dkO + AXgpaw1b8i5lWfZtL3Vjm0r/XOjFcoEXS7keLOW4M6cyXwqT2c5MZDkxnrWBzVIqAXg2bR1bpNyR48pu + OV7NA7w/15WjRZ6cKPXhTLkfp1RUcIEHR+UcBzI2sCf1UnYlX8z2xIvYlbJWE4WPyeePZ7txKtuFKzKd + uTbLhRuzXLkj150vF/rylXxf7sxw46bkddyUcCm3JK7l1sSLuSNpDV9MXMP/Cd9IWMP3Ui/hR1nruSff + hV8VufJbee7flTvz+8p1PFR9CY83rOVvret4usuFl/u8eWsokHeF9zb68+6AL2/1enFORRN2uond6BCB + HUKwigYWeuQzwjtKABbe7/XTUMtq/uBXhvU83Gvg8+p36XgXSnWXEOt5MTaPizF4Xoqfj7Mm+Cohd7XU + RF1vKVdEXzfPDf+VVVFYRQKrlM9aFLBZpVYP0MRfNSdwsN2Rlc8eYSE8Olj7nS4yzqoRoYiX5YRgjfA4 + i4z9agodIymZETS1lbF95yRnzuxh83gnibLfIjaEyX89YRY3kmQMy5d+tC7DQkduEL3ZJvqlzxnM9GNj + pjejOT5syvdjptSfpcoAttb6s7XOmy21HoL7eZZqPJkX+32uzJkFlX681otdjf7sa9Wzr0WnCcI76n3Y + U+/Hrjr/8wLw1ko/llWAYqUvy9XeFwjAgRxt13NcRQI3GzjRZOZUk42zrXZO1ls4UC73ku/OQMzFdEZd + RHeSE50Z3nRm62nPMtGYZqA6yV+L+q2M9aQi1o0qoSbeg4Zkb1oy/OnIDqQtw4f6RFda0jwYKjUz3xjJ + YkMU4xVm+nM96chYT3vGOgYK3dhUHcBik4UtzcHM1hmYqPBlIN+VvlwnBgvc2FjozmiJB+OlXmyWZ5ss + lfdSLO2n0o2r5dm/3GnkJ70WHui38ESfiae69bzcJj5Us9S/Dl/e7fHng34jH24088GwRepxEK8NGByp + oJvceVjq/IOll/JwtbPUe0+eaPTkSfnsX1p8+EdnAE/3GHhKRfoKz0idfa7fxAuD4h9Jf3JuxMrrw8HS + Rgw8K9d6qsmDv9a68I96F56pd+XZRjdebPYQ/8qDl1u8eL3Vl3Mt0gakVJHAb7WLvyfLT1esF59sDb+N + X8M9kWu4W/h1yhoeLryEfza480KnLy/1ePFytwcvdjjzmrTL9/u8+NegH/+SNvlhvzdvd7nxZrsT59o2 + aNHBb7S58lanO+/2qrboyblud96Qz5/r8+QNOf6NQR/eHPLVODcsbBQfdKOPxquD3hovD3hq6+c2ii8q + vCqfe6Xfg9eG5f0O+WsCsEoP/8KomecXonntWAkf39rNmgnpzAakU2pVAle8O5k2Z2IMzgR5OxHg6oS/ + qwz8bq4Eujujd72MYPdLifHbQFawO6URXrSmBMgXbmZfTyw3LubwozP1/OqaOn59bTW/PFvN55fyOdwZ + x0i+jspoZ9LFoIy1iGEk2IPdsNvciQj3EufEl0Q131O8L7Ey4CuSEr3JSlsVgIOoKAmhotBGaX4QhTlK + LNSTl6GnIMtASV4QpUJhlhKHTZoAXJmro7fMoOUs3ysN8WqpFD9eCuNPxxJ47eo03r0yng+uCOOjK8RJ + v9zKW1eI03+FhZcuN/Pc5Sael/UXr4rgz8fE0FsO5Gtj7tL4LmEhbw1DqWtoi11DQ8waaqLXUBWxhoqw + SykPXS+lG9UR3rLfn+3FYVzflcp3Zgr5yUwOv57L5jeb4vnNiJ0HxoN5YmsET51I5rU7S3j3R63868+b + 4aUleHcnfLSbf320jY8+WpRyGj68UACu5uOXSvnXCyXwXCk8Uw7/qOJff6rkw9+X88Yv8vjHN7P42cko + vjCj43TrevYUXMThwrUyiLlyjXRAt7RYua7Ryu4cT4YjLqItaA0t1rXUWC6h2LiGDL81pAmFtrXSQfgx + VKZSEscwLN9DZ5o4A3Hu9CRLB1kUxLbGGLY1xTOYb6Rbvus+qRP95UF0FutpyPKiPNmZskQnajM8aCuU + /RVBDNWFMlwfSnellcZCMyWZOvLS9GSnGkhVPyJJvbAGuWE1u0l9UfNAehFn9xDcSBGHI0s6t8IUX4rS + fClM8qRQOrdC6eTyIp3JDdtAtl3qacg6skPXiZOynvIYF/qKTAyXGxmt0LOp1shSezB7BqM5Np7C2eks + rp3L5+RIKlOVBlqS5V0kXUJd2gZapDNsL/KXezXSX2tjSO57uCmciY4YNkn93ijLLepZ5Zgetb81kv5G + G41ieHSU+THRGsRCl42FFoN0otJ5NwewU+rkrg4L21uVKGyUeqoT/Jmr10tHLPdX48N4jTebZTCZavJl + ts3AjgE7e4Yj2TUYybZeuyYKqzS6w5U+bKxQQrAPA2Xe9JT40FEk77pYzQfsSlOOE225LvLc/poAvLPd + zu42OzukQ98qnfmCDG6LNf7MyjmmpBNXTBa5My3lnJxzS30gW+W+5qr8mK3yZUZQAvBys1Hu38SOVhnk + mh0C8LEOH26bsvPjk2n89XvVvPVIl9TRYXh5EF5ph1cbpf7WwutVsk06on8U8M6jhbx4bz4PfiGBO7f5 + cKDzIrZUOwTg/e1mDvYGs3tFAJ6XwXemxp1Z2acE4Bm57lyTz4oA7MehLiNnNoZy9WgU14zGcXYoljMD + CZwYSOboYAZHhnM5MFHKrskqtk/Xs22+hd1bu9i13MPO5S62b2ljeaGRHdNVHJ0s57qpEr44W8J3l4q4 + b38Zfzhdzp9vreGpbzTw+i+6eff+jbz/0Dj/emRaWOKjP26VbYu88vMFHvrcGN891cOt2+o4M1XJ4U11 + 7B5tZvd4Dzsmhlie2sTy/AxbNRF4ioXJSeYmxpkeG2ZmdCOTw71sGuxkbKCdiYE2Jjd2yHoro911jHVX + sWe2i5Pberhmdwd3HunkKyeauet0A987W8uPr6vj57e2cO8dXdx7Zz/33j7MPTcO8Z0zA3xhXzvXL9Vz + fKKcw+NV7NvUyK6pTnYvjbJrxww79mxl534lAC9/IgAvzjIl97ppeobRzZMMjm1i4+gEo2MTTGwaY3pq + hKXZARan2lnaVM/sQCHTnQnMiLG/2BvOloFQdoyEsX8ymj3jocx26BmX+j5cpWOwwkSP9BlNOUZKVSr1 + GA/SImQ8ivQkTxxnRW6sD9laFLC0/QhX8mJcKUpwpyzVk/J0HyqydZTL2FCQYSJBxpNQcZRtdnGcQ33E + 4QnEGipObbg4P3aFOEAq9ZI491a7cnbEiIxxODxRcRGEi/MTFmknJMzxD93wyDASkhNobm3hiquu4df3 + P8jTzz3Pc8+9wOOP/Ymf3fMLbr31dnbt2kNvzwAtLe00NbZQV11PfU09DfX1tDQ209beSmdHu0Z7RwvN + LbK/rorqqlLKSgsoKc6htDSHwoI0UpLDiIuVZ4lXqaB1JKho4Hg9WckmclLM0lda5VltMuY5BOCiFQE4 + T/rP7PgATcRVZY4YuAq1nhWv5tb11UhXc+xGe5IsfWlSpJv2L/7kaC9SY7xJk/eXJu9cia5ZcQrdSinX + V1G+Qka03E+ELylCVmyAGNJ6wUhevEr/HKDN76vE3+Jkf0pTA7XvtUzG9BoZOxplfG4SY7tOtlcl+Gip + aSpVmeBHuRKJE/ypSjFSlW6hQkU5y3KBPHNVQRTttRl01qdTXRxJQZqFvEQDVTkqG0M6fc2ZdNSl0lAS + T3VBjJBIfXE6XfUljPc1Mq9SqC90SZtrY2q8mqG+Qro7cmhszKSqLp3SmgyK63Ipqi0gr7ZYKCGvWqHm + 6lXpmleQdUWO7FdoqZxrSs6zmvJZoYTfHOFCATirppDM6gJN+M0oL9CifxPzM4hOjyckIQKDODs+Qf54 + qLl7/Zxx8l2Pi79KDedBQLD6Z71OE2oDg5UArCJ3AzRWxV/digBsljpvshsJDBIn3+Clib8KtbyKt5rb + SkUAm1UEgh41968lwoQl3KhFAIfEBBOXHk253P/o1EYt+ndkapDhyUFmlqc5c/1pTQBe2DWvCcCltWUU + y3MrlPj7iQBc9ongW7fC6rqgBOAcJfxWKgHYIQKvCsAqFbfGigCsRQHXVmjzLqs5m/Mb1bzD8o7LUrS0 + thExgURG+ZEkdTFTRQLnmCkvlfG41k5LQyhdLeF0C221Vmpl3C7L9taozlNRv3qaSsSJKjRQk+0n9dad + vNj15ESuJTfyUvKj10nfs46i+A20l+iYaA5jtj2CyQazOE5ejJW4MFfjyqGeAG6csXLHkpU7F/V8bqs/ + 39hv4jtHLHzruJlvnbBIXx3CN89E8LXL4/jK6URu2R/F2SUbp2dCuHw2iqPjUezqj2JGzj9QHU5jnp1M + NT+sWfo0fQCRIXaS4xKk7WfRWFkiY0IL2+V7OblzirP7lSg6o0W8fkoAPrbIzceXNG45scwtJ7dx28kd + Grcc3yHbt3HziZ3cdHwn1x1ddkQBq4jiXZNcvntamxv4mv2O+YKv2TfJ9funuenQigB80CEA33Zojts0 + QXiG6/dNc+2eSRmjJrl61yaulfPcsHdK9s1xi/rcoVluknM4xN8pbpTPX39wimsObOZKJTQrcViOu+rw + jBbpe2L7GIe3bOSQcPVBOf+RRa45OKeJwGflWmreYCUAq2MOLA5wYseYlkL6xlPbuPW0PO+prRo3n9wi + 2xa54YRKLz2nRfReLde8Rq6thF8l8Cqukm1K9FWpn0/tHOHsnnF5/s3avpNqTv/JFjb1l2p/SilRc1Cn + mUlMMhIrfaHZ5oHO7ILe4qpFvKgfKS02P8ePllYlyKqIX1m3KfHXG0OQl5bi1Cj+lfYDqRY57I8jDbSe + KOljw2UsCItZEYCVuBHqEICNVjdM2ueEEA/t8xY5rxJ9g0IcP5KqezBZPxGGVdpJ9aOzTc61+mNwiPqR + WpUyPtiivB3IuKtQ2xR26dsVDnHYnzD1I7MShGW8UOKvPUo+G6F+2PWWew4kJSOYTOmjE6SvjpVj4mUs + UWSkB0l7zGRpvotTx+bFBhvQ5ndPVOcVXzQyQnxBGYcSU/WkZJodZBhJFFJzLJRWxmuUlEVKG7eSKuNO + RpSMeZHiG0aaKEmwUpUcSlN6OJ0Z4fSlhTCZH8n+2lRu6sjnG9L3392ewX1daTzUncifu8P5e6eNf7Yb + ea4tkBfahZYAnmvw5dlab56v9OKVam9eqxJnW2zg18Uefl3s5nO1AbzRoOfdVrNg4Z0WM283m7Tl98T2 + /0D8jA/arXygInhl+d02OU4JwK1GzjXpeLnOV4v+fbpUpX925omcy3g4ey0PZVzCAxkX89u0NdyfeTF/ + r/blJTnfWz1hGi/L9Z6rl/ur8eN5scefqfLnbyVePJ67gYczL5PzOPOXQjf+KXb/62L3v98VzbudUdry + yzVGXq02n+d5JQLnefJUngfPFcuzlsk9fUYAfrzNIQD/dLCYu0bFv59o4abxDq4a7eLM+CDXi6140+F9 + nN63h6nhYfHVS8hIySYtWZFFqiynpsqyIi2XlLQ8KfMdZBSQll7kQC0LGWkrpOc5WF3Xtsm4KZ+7kLS0 + whVkOT2fwqJK6hvaaGhso7SsiuycIjIzZezNzNdI10RfIT1XIyNTzrtCulw/KTmH5Av5jOD7Wc4LwKkO + lAiclKSiiaXUBOHPIuP+/+DfU2P/b5KT8/8niSkOEpJzV8jWUCmzHeQQl5TtQM534ZzKGufFZ0dK7JiE + NLGZhYRUouNTxXZO1IiUMUkJwNk5WTQ31jA00KoJwMpnmeqrYvd0i/TVg1x9aIhjO1rZO1vDtokqFjZW + MNtXzlR3JROdlXTV5FOel0hybJAWAeynzfmrUrmq6TCkr7R4oQuSvtPmr80FqFJAf4ISnaR/lT50NeWt + SbCJHW2XvjRE+tHwROmn060k5YaTVhBNUl40sdkRpBYlUd5SxsS2abYc3sXsvm30TY+JjVGj/UEtp7qC + HJWtpFTqd0mxRlax2HlCfrHYgyVi58lybtG/kyf7ctW+leMV2UVFKziWV/erYxX5pSpqV84p+3O0/Wq7 + 2ib2VVkpBWXlFJZXUlhVLdRoFCmqGzSKa1ZppkxR3UxpVQPltfVUNtVR0FRGUmUa5tQg/KXPDrRuwGxZ + S6TlUnJsrtRF+tIRFUh/tJEB8Ul640y0RwdSL+NHqfTz2dHiQ4g/FhftIDXaTfwAH0oTvCmRZTUNXG+c + J1vEzj+TqOPLiSZ+It/p7+Os/DUlnCeTQnk4yswDITp+LfbtL8Sm/ZnFlx9b/PihlD+U9Z+IDfuzIJ0m + AN9vNfN7q4XHxY97wmbjsRArD4sv9xuDgV/odNwd4M/d3t78ysObe929udtHzhHgx48CA/mhiv4NCORn + voH82lPPfR46fiLL35Ft3wz04+sBvnxbUCLyvSajJgD/LTiYpy1BPB8SwnPiC/49NozHEkJ5QGzjH8s7 + +UqMjivFB5oLc6M73EWe14nMKGei41xlbPQQfAgXXyxc7NKIKAMRkQbxKY2ER5sEo/ifK1M2iH+l/pBl + kzHZEi5jtrzbIBlLQ6J9tHE1RsbSaFlOkjE0V3yfslw7DeWx1FfEiu1hJ0PGxfhEX+LE54pJCSAmWacR + LZ9T47CyH7Q/kcXL9YUwsY/DpC3YZTkiyUSs+JOJ2WHSDiI0ojNt2KWNmMWWVgSLHxii2o4cH6pEYhnP + rbIcLP5gsNx3sLyH4Bhpd1EKA0EyDlsiHGipWrVMJ+pPb44/o1lDvQmV+hYu9Scm0VPah/h49WE0tERR + 3RBORrbcc6zYQWLbWKStq3l/g4J1WIIDhQAsVjmX2E9BIapUaWHFN7IFaBjEH1LCrU7qkCbkin+jykCz + 2iY+0gXogwK1dM6rkb16ObfGyrpB9hmt4k+FGOW+L8BmErvqEwFYRffqLTpBziXoTHL+FdS6ElyDQy1i + F9nkmcOIiZP+JiFGIyYuhrDIUI3o2EhtX1R0BKERYVhDgrHZrfIuojQRWEUIq98vlND7WfF3dQ7g1bl/ + VwVgdY5V8TdErqFKde/q2X0NPvjolDiu3p34fRFWwqJDpW+PljEhSuyvaNJzYqmszaa2Pkt85WTpR6Ko + qAmhrtFGZ1cEI0OxzG1OZMtMIjvnUtg1k8K28STmB2OZ7o5mtNFOr/r9VBiqs7CpMZiFNiu7u+0c7g/h + zHAo146HccO4jZtHgrhlwMitfXpu69ZzhxKAWwK5vt6Hs1VunC5x5mTRBo4VOHEofx17VgTgLUoAzr2U + rYXrWS5xZblY+pwCL7aIXbOQ486iEoBz3JjOdmVTphNjmRsYFzQBWNaVALyQvoHt2S7sEranXcau9HXs + l/2H89w4WejJ8QJ3TeA9nOXMfjl+b8pa9iRforE/9TJt+3E5/4ksV07K8pm0DVyT6awJwJ/P9+JrRQF8 + Jd+PO9JcuS5+LdfFXsyNcRdxS+IaTQD+kvBVWf6m8IO0tdyT48Sviz14oNyT31d48HslAFdcykMVF/F4 + /Vr+0XoZz3Y58XKfl5b6+T3FoB/v9HlrkYRqPlEtrayGSjG7mg56RQDu9dEE4Pf7/PigP4CPBLX85kAA + Lw4Z+H23gTuqdMwneVBiWEesz6UEe6wlwH0tPt4OAViL+vVz0yJ5Fb6Cj68b7p4bcPVY/x/FX8WqAKw+ + r+YOVgKwNh+wTfoTuwlbmLSVcCX8WsWnt0p/GiJ9WRixMl7ECbHJsqxIsUs/F0JEvNRzTQA2kJQRRk19 + Hlu2jnLq5E7Gh1uJkz7JEuiMOWA9YWZXkqSPVcEFNekynok/0ZVtoCfTn/4MXwbTvRnO9mZcRQGX+DEv + NrTKlLmlzpvFWg9B6lOtm4MaD+Yq3JgtlTokLFZ7sE3qqhKBdzX4sV3s++11sl7nEIC3KwFYib5ir2+r + DhBkvcZHE4D3NvpyqDWAw62BHG4O5EhDIEfr9ZxqsHCmKYij8l3slDo4m7ae3vA1dEWuoSdRljO86MvR + yzOYaEs3Up8cQHW8J9WxHlRFu1Ad40RdnAuN8j22pHrSnuFDa4o7dbHraU5yYmOxjoXGcBbrwxkr0dGf + 7U6n1P3OzHVsFB9ic7U/i41mFpvMTIpPMFzqRXf2Btl/GT05G+jNc2KwyJWhYnfGyr3YVOrOfLETu8qc + OFXtxm1NvnyvU8dves080mvUonNfaRe/pEnqaZsP73b786G0+Y+HLHw0bOZ9Kd8cNPJKr55nOnz4c50z + j1at5091rvy12Yu/Cf9s9+XpDn+e79Xx0oCJF/uMvNQvnxm0aIKvEn7fGLPyzkQIb0u/8oYShHt0PNfq + owm2/6x34dl6V/Hv3HixaUUAbvbktRY1D7D4eAolBrf7CeIDyrX/VLiW3yVdpIm/P45Yw73Ja/hDwcX8 + Q87zvNzniz3iI/Z48mqPO2/2e8iz+MGYHsb1fDwibVOJwGpflyuvt7tyTtqlitB/u1feQ68n53o9HPR7 + 8saAN29s9OGtETUHsB9vSOmIBJb7UqUm+vrwqhKAB714vd9H49U+D3lv7rJN1jdKX7AiAL84ZuHFxVhe + O1bKh7d0sWagwJfOHG8a0rwpi/ci1epClE4aiOd6Apw3EOjioqF3dcLkso4Q18uI89lArsWTygipQGJs + jBcYONQTx//tLeORzw3yz28O88w3+vjrF7r4xckGPjdfyK6mCKlsYiiGrCfOIo3PtB6bxQWbGJdh4Z5E + x4iTLwZOYqwYL5FexEZ7kRDnTUayGDpK5FUCb6FK8WyjJN9KUZ6FAiUCi8GTn2FwRP1mybpUfLWtWBpz + Tb4MNuVG5mr07G/Rc22PgZ8shPHnw/G8dnky714ewwdnwoVQ3j1t583TIbx8OpgXTgfx7GkLz11u4/kr + o3j0SAg/WZQOe8CZXcVrGJUvvDtuDW0Ja2hKuIjKqDUUWNeQY7qIbNPF5JmdKBXDpi3BwNaScK7sSOCr + E5n8cCqDn21K5lejkdw3GMRvNxp4ZMHG34/H8cqdhXzw01b48zi8NA9vb4OPdgjb+ejjJf71sRKAR+G9 + XnirWROA//VSuWMu1efK+ddTlXz01yre+2MZ5+4t4OnvJnP/DWF8bYs/1/W7cKTqInbnrGFf5kUyiK3n + uipf7mi1yaBq55DUgam4tQyEXUy3/RIaLGso0a0hw0ueKWANNeGXsjEvkKXGKA70pbGlMZqxfD0D6V7M + lVg42pPMNZsKOD2cxVJDKNP1NibFKJhosDJUY6S3LIDOQh868r2l9GWgwsDmJjtznTFMtkSKQWCjWb6r + klQ/8sRozU4KJEWM6Ui7NyHi9IUYPYkQ4y/e5kOyvFc150y2dGyV2XoaxWCsLzRQlelLtdTh6hQviqWj + KwxfR1HkBgrC1pEXtpaC0Esoj7pUOigdm6qlTjRa2NZlZ89AKAeGIjkxFs/ZyRSun8vmzGgiC7U6ujMv + pVXoVv9uqfRjXD4z3SUd5EAc870xbG4PY3NnGJNi/Ey02RlqDKK/XhwkOW5jSzC9slybu4G2EncmWk0s + 9QSJwSPvsVUGhPZA9nTq2dttYWenmS0tBrmnQObqlQDsL+/Ql9FKd4YrXBirEmOl3pOpZhkk+qzsH5Hv + YTSWvUMRLHeHMNtkYKLGn5EKH4bLfOUzikCGZKDoq/SnXYygphxnWrKd2FQVyFYV9Sz3vrMlhO0yqCzV + GLQUF0s14sDIZ6fE2Jgq8WSyyIPpEi8W5BzLjUa2NUvnX6dnpsqPGRm85uT4pSYlAJvZ0WpghxJg61w4 + 1uXDnfPh/OLKXP55dyPv/bkfXpF6/eYIvN4lqD8w1MG5KnhVRa4X894Txbz2uxIe+b8UvrRbzaG4lm11 + F58XgA9dIADPymAyWenMdIOHJgBPN3vLO/CSgUmuL+sHOvSckOPPbgzlmpFIrhgM42RfOEd6I8TQTODI + cDqHNuWzf6aMPbPV7FloZP/WVo19wp7FRnbNV7NP9p+cLuSm2Ty+upDHT7bn8eCRIv50dSnPfaWO13/c + ynu/7eb9B3p4/8F+Pv7DCB8+NMHb943y0t2D/O2ufn51TRtf21/PjQvlXD6pom1rOTjWzN6xDnaM9bI8 + NcL2+Sm2zm1maXqChclx5iaGtXl/Z8YGmdYE4A5Ge1sZEyb6OhjraaO3sYbuunKWRro4tDjI6W19XLu7 + l+t2NnPz7jq+cKiB/zvWxDfOtPHtK7v53nVDfPfqUb55+TBfPDzILXLsNVs6OTnZzJHJFg7OdLN3fpDd + 2zaxa9ccO/Yts33/Dpb3LLOoCcALzCzNMzs/x/TsvCYCj0/NMDY5xfjEZk0Antw0xNzUIItTPWzd1Mbi + cJW0k3RmOqOZ745kSb6DbVJn90xEs2csnAWp+5tV3a03S10Nkn7CQmOuivoMEKPMh+w4Xy0tcXmGmQqh + LM2kCYq5sV7kx3hQmOBORao39bkBtJWa6a4Np7sxnvrySHIzjcTIGKKyCISoiKdIkziaVnGm1D9sQ4Uw + 2W4Xp0icodAQwqNCtfl9o2NjxMgUxys2WkpxyhISiE9OIiUjXZzTQkYmNnHrnV/goYcf46mnn+exR//E + T358D7fd+jn27z/EyMgYTY2t1FTXO6iqo1bKuto66usaaGxsoKmpUaOxSbbX18i+ampqKqmqKqdMzQ1c + lk9RUSZ5am7gjEhSk+0kxZlkfDSSImSIo56VbCYn1UpBeogWAVwojrpDAJZtaWZyk5Rgq6J4/chUpZAR + 40NatDcpUTLOyxibEuFJYoQr8WHOxIU6aSRGeMh+T1LkOCUAZ8fryEnQkyvOvkLN8ZufZNHIEcc/KyaQ + 7Fi9fE8m6b8tlKYGUZQkY7Ga9zfenxIZvyvSdFRni0Eq321Dto4moVWW23JNNGUG0pgeQGOqPw0pvtTL + 914e466JwLUpemoyg6Vvl7E/Xc4tz9halSJ1P0cTgCvzw8lPkTE/SfpZWe6pS9NE4K6aFFrLEmguiqOp + IIHOsgw21uUz1lLMwkAl+2dbOLmzm6PLbWwZKWaiO4uexhSaa5Koq0kT5zabitp8SmuLKVJUlwilFFYV + ky/kKaod5NcVaRSotM41RSsUU9BQJpSTp1JA1xeSq4m/ChUVXERWdSHplXmkl+aRWpJLQl460VlJRKTE + YosLxxgRhJ81EE+9J85+LmzwWYeT7waHAKwifq0q0tcPf4tK++yHwabDGKLX0j0rAVj9eKEif82hZkzi + SAWKk+8jTr6HOFnu4px5BnrhpXOIvwpfvfr3tzeWUHG8VPSMFkFj1CJq7DEqVWw4GfkpNHbU0NrTQOdA + CyOTg+w6vJMb7riOGz93vUMA7mqkWN5XQZW8EyFf3oX2rs4LwOUO6isdfEYAztUif5X4W7oiADtYTbX9 + nwXgagqbqiltriSvMov4zDDCVGRFmC/R0f7anwvTU/WUF4fQ2hBNV1ssG3sSGe5LlnoUTo3Yr0ViOxSl + +1CW4U+tOFENBWJX5JuoSvenON6dnMj1ZIReSmbIpeSErydX1ksSXBmsDWGhN4ltg8ksim0wXuXDSLEz + UzJm7+304+rJIG6aD+K2RQO3bw3kK3vNfOOQWUv9/I0Twdx1yi59dCRfvTyOL51K4Ma94ecF4NPTMl6N + RrCzP0pspSiG66NpLYogWwnARh/sRj3R9jCSYuMpyFTzYRcw0FbHlvFeTu2a4sbj27j+8IIw/+8C8LEt + 3HxcWBGAbz25Q+Pm4zu44ah87sgyNxzZxs0nd3HTiZ1cc2iJK/fNctW+Oa49sMB1Bx1zB1+vBF7hpsMr + KaCVAHxohtuOznPHsQVuleter6Jv981w1e5Jrty1WZsz+Pq9M3LsvHbcbUfmNRH4ZsXKeW6U8vrD01xz + cIar5ZzXyL6rD01rAu/pXSoV9ZgW6XuDPMeNx1S66gWuWRGAr9g7yendm+SYUY5uG+FyWb/h2BK3ntnB + HVd8mtsuX+ZmJQIfn9cif6/cO34+vbO6vkKJwkoAPqVF/8r+PbJ//5Tcm9zLzmH2TLcxvbGC3uZsqWPR + WlpjFeVqD1fRvO4EmtQc9EoE9tDSFZqCHZG+ZqsfJrFpzZo46xCAdWYP/A2u2vE6sxsWm7cWvesQgA1E + JRi15TAVwRPlj01FtolNrAnAwWqqAyUAK5HXIQCbVGpUOa/Zqubd88Qg92AIku2yT0XhqEgjc6iXtHcl + 8PpiU+dcEYRtUT7adoU1yoHapgiRYxW2aFlXpfhval2J0g7xV44P88Qa7kWYbI+VsUNFRMfGBcoYK20y + xkFWupW2ply2zvdwTN7n4kwnDVXJxKpzqCxRoW4yLnsTJz5BQpqRRPHvEqVUyyoKOLswnIKSaE0ALiqw + kyXjjpp+IC/aSFG0mdL4YCqTQmRssdOcFER9uBIyfJmRcfLy2mS+2pbFT9rS+IUSNttjeFR8oieaTfy1 + yZ+/N3jxdKMPT9d783SNF/+s9OSZMg9eLPfk5TIvXiv35tUyb14XW/ic+Adv1QTyfpOJ98Qmflvs5Deq + dWLiBsiygXcbzbzfYuHDtiA+bA3i/XYL7ysBWKWNbtDzco2fuHHu/LPIhb/kbeCxrEv5ffpF/Db1Iu4T + f/MXSYKUj6j5gJuNvCW2lOKFFhN/lnt6NM+JJwpd+Jvc05MlHjyR78wjYvM/nuvCE8I/Sn15rdnKh90x + mgj8RnMIr9UH84bwZoONtxpDeLPeyvPF/jxT6M2LJb68WCb3tCoA1wbJ+1ARwAn8rjODuweKNAH4c+NN + 3DjWxhVD7ZwY6eG6HdLmj+3nyoP7WBgfo7KwjIyULFISlaifqqWD1kgSkjO1tMpKZP1vaGmiFclZDlbX + V7gwJbQiLSV/hTzSUnMpyC8T26qR+oYWKipqyM6WcVdFIKc7SJJ7u5BPibmpOSQkZpF4AUnJ6n7/O+fF + 1tT8FRFYSrmfVUE4NbXoM6ht/51PUmL/Z1bPu0p6etH/JDXDQUp64QpyDiE5LW+FAnkPeQ6S80iQ7yBe + I1sjUd65A7WcRVxyhoOkdI3YxFQhRezmZOITk8jMyhD7tpKB3hYmBlsY765mqq+S3dPN0lcPcN2RIenX + +6TP7uTI1hbxuZrZIz7Jzs1tbNvUwXhXNQ2lGaTGW1cEYGdUKteAIB/NBjJoBGBSmUtCHKVFpYoMXyWA + oHD/lUhgIVL6txgleBkJSzARmRxEXEYISbmRpBXEkZATo5FVnkl9TyNze7dy+JrL2X/VKSa2LVHb2UFe + TY3YK4KUWeViq5SWkV1SRo6UeUJhaQX5ZRXacr5s1yj+ZLlQ9qljFAWyrFDH55eJXbRSrm4vLKvUji8q + r6SgVPavnEctq+0F5bKvooriympKxNcolbq+SllNE2W1LRrldYpWoZ0KobK2jaqaFqprG6lurKOkqYLM + 2lxCs8IwSf9sCXUl1LqOpCCxc2wudMiYMBJrYHOchamEYMYTgxmKN9EeG0it9P2FcV5kxnvK9yQkeJEV + K/aU+A+V8X5Ux/pQG+1Jt9j0cwn+HEs28rk0Gz/JjOQPmbE8kR7NI0nhPBAdzG/CTfxS7Nif2gL4YbA/ + 3zb78E2TN3cZvfi+0Y+fagKwiQesQTxss/G3iAj+Hh7On+0hPCbrvzMY+JVOxy90gfzCP4Bfe/nya08f + 7vHz5UcrAvCP9Xp+FqjnFwF6fu2j51e+en6i0/M9k4HvWAx8P8jIT61mfhVs4X65zqMhwfxFicDWYP4Z + auNp8ROfSY7mb+q+E0L4RYyRu2Q8vknGnX3yLqbluXvjfaiO9yY9zkP6EDWNgYxfCQbiYo0y7pkECzFi + V0fGqmmHzETFKywyvkspqLE+TFDpysMSdUTI52OS9NI+zdK/GMhQ0/rkhlFfGktLVZL4vHEU5YVoAnCi + jJXxKYHEid8VJ3ZvrPhRsSuZOaITlQ0h9qOc+xNW24KFhKxQaQex5FamUFibSVZZEtHSPsLF3wtPCcYu + xylCExXiG0hpT7TINkHqQ4j4qRryfLYYM1YZh4OjpB1Gqnk69ahpL7Q/Y4f5C36y7ku42AeR4tPHJXuL + j23ShN+mthhqmyLJztcTE++FTeyUYLGbgsSvsdoMgvgmIXJuqSvWUDnnCpZQlWpap2EKURG6ekGVgSuC + sBJ5dVJ+BuuqgLsyn69sU+iUiCsYZJuK3FUCriXE9CkBWLEqABuDPo3ZatRQWcZUNGNolI3wGDtRcWFE + x0WKnRhNXEI08Qkx2nJ0TARR0eHExEYIkZoArMReJf7a7MHassIeFqIJuirFs/4zIrCaK1gJwCr690IB + WPvD+38UgHX4Gfw0AVjNCay22SLkO4+R+4iPIT4pRhOA07KiqajJoLYhU76bVKoaYsVXtlPXGExnZwgb + B8LZPBrOzHg4i5ujWd4cy+JwDFM9kUy0h9FfbaFd7AsVSNNV5Euf2BjjYjctNeo50GXh9KCN26ZjuHMq + nNtHrdw+aOL2fvGbuvXc3qbnFrHJrq315PJyF04WrdcE4BNFThzOX8fe7LVsz1TzAF+sCcBbCtazRWyl + 5SJPlgq8mM/xYC7b3VFmuTOZ7sJ4+gZG0tc5BOBsJ6azHALwXOo6ljOd2CEsJ17MDiXupl3K/oz1HBIO + ymcOpV7G/mTZlrSWfUmXcECWD6ddxtEMJ45nyf1lu3BKlRkbuHxFAL45x52vyPN/o1jH/+X5c1uyM1dH + X8Q10Wu4IW6NJgB/Me0SvibclXIx3025SPrIy/hVngsPlnrxx0ofHi734g/lzjxUdikPV6zlT/WX8s/2 + 9bzQ7cKr/V68OxTAB8I7/T68paIIO9x4vcN1RfxV5b8LwGqeYCUAfzAQwEcb9Xw8pNeW3xgQu2+jkV93 + 6Li10sBiegAlZhdifDdg8VhHgMcG/Ffm8FXRu2ouYDWHrzZvr6A3+Goir8uFArCKCBbOzwm8EjGsCcgr + ArApKJAgJf6GqzTkKjhD9ZM2aTM2oqW/jU0MFbskjMSUcBJSI6SPCz8vAKsIYJUCOiRC+r9kK2WV6cxM + 93FIfNb+7hpipP8J1rtiEx8r3ORGUqhDAK4Sv6Ily0RHtoHurAD6M/3oT/dmY5YXo3k+bC72Y7bCnwWx + 0xdrvZmv8RCkPtW6OpD12QpXpkulHglzlW4sybbtcqwDX8GPHYISgDXBVyOAbWJfb6uVbTU+bK/xZned + N/ub/Dgg9f1gox8H5fjDtYEcF5/iuPgUB0p92JK5jom4ixmMWsNA7EUMJq1nY4YnQ7l6+nNM8gzyPKmB + NCR6UhfnJuOvk4zT62mMdaIlwY22ZFfak91oTXSiLvoSmhIuYzDfl6UGOwu1IYwV+tErdbkj9VK6pQ5u + zHdlk9Q/FZw2W6tjXGUbLRC7QGkkaRfTkXEpnVmX0ZfnzGChKyPik2wq92CxzJVdZc4cLXfiGqm332j0 + 5pdSn/7YpeMf0q5f7QjQBOA3Wn20NNAfDeilDhr5cMjA+0Mm3h408Ib0AS/3BPB0qwdPNYuP1OzBM23e + vNDhy0vd/rzcHSj7hV4dr/WbODdo5o2NQbw1FMTbIzbeGQ3mvXEb7yohWLa9Ice80hXI880+PKPm/10R + gF9Q4q+i0ZNXWlQqaPHx5JhX5d5eaXPwYrMnT8v3/Uj+pfxK2uvPE9ZwX8oaHspfw5PVG3i2zYsXe+TY + Pk9el/b49kZvPh4PhM1GmDTBJgMfjPjz7qA8c6+79ueMV4XXu9wdKZ+V4DvgpXFOlrXI3xE/3hkP4F05 + z9tSvj3uz1tj/tq2d6R8e9RPnlf8UPmMuubr/d7yHjx5Te7htQGHAPyWmh98xMiLE0G8sBjDq0eKee/G + NtZ05AfQnOVHTZo/xXE+pFjdiVT/kJBGG+i8AZ2LCwbB7OpMiLszke4bSPJxJt/kSZXdm+ZoD0az/Dna + E8v3jtTy9F2TvH3PLO/eM8Hr3xnisRs7+eH+ak73JTKY409+mEMADjWtJ9jkjM3qQmiYu/avtgQxPBNj + fBwCcJQYBCoaKSGArFQduTkWMXCsFOfZKMq1CkHk55g1sTcv3UBehoHcND15YvTkZxrFOLJSW2BhoNQo + jVHH/gYd13bq+OGUjcf3RvHy8VjeOh7BuyfCNN46EcrrJ+y8cMLKsyfE0DsRxFMnbTx1JoLfHwjmezPe + 3NjtxNaCNWwUZ7wzfg3dGRfRLhW/LmEthfaLyDJfRIbxYjIM62XdWxqZibliG0cbwri1L4ZvjSXw45Fo + frkxlN8MmLl/UM8fZy38/Vg0r9yRx4f3NMMTQ/DiDLy9BT7YCh9v5+OPF6WcgveH4d3ulTmAq/nXi2X8 + 63nhmXI+/Fsl7/+pktd/U8gzP0znoTvsfHefF9cNXCYdxyXsk/venSEkr+FY1iVcU+rJ7U0WbmsJ4Uy5 + nl0yOM4luzAau4FO+1qqjReR77OGUv0a2mMuY6ZYBumOWM4MZ7C7OYKpQn825Xiyv9HOjZtzuHOxhCtH + 09jTEcq29hAW2oOZbrYw3qBnVDqM0cpAhsr9NcZrZDDpCGNnfzyLXTEMVdloydVRniKdcZIfGbF+xIV5 + EW7xxG70JMzoQ2yQH8khfmSq+SYjPbT5eNtKg+mvC6OnKpi2Ij3tBYFSl1XO+/UUR1xKhXR2lUJ59GWU + R11CTeylDBf5MVNnYkeHjYMbIzk2Fsnx0UhOjUVzxUQs104nc0q2L0mHPSBGRW/eZYxIR6bm313sDWHn + aCwHplLZJd/lfLed6S4rMz0hzEg53W1jU0cwIy0GBhsD6a72pSZrLa3FTky06ljqNclz+7EsHdfubqmT + vQb29ZnZ2WVkS4uOuWaVY18GmgYfNomhMyQd50DJOgbL1jNc6cyY+sdRp0kTfg9PxHNoPIY9AxEstau5 + gvWaMTVWJu+3IoAJecdTTcGMNpg0Ebg1Xzr7HCc21+odAnBbGNtl/3KdmQVpH7NlfloU8FyFH1PFnueZ + kcFmsVoGqCYz21qC2CrlTLU/03KtaTnvvHy/W5sMLDfpWW7wZVudC8d7fPnycgy/vamU53/VwYd/3wiv + T0jdHUN6Oam/rXBuRQB+rQyeLeODJ8t448FyHvt6Bl/db+TE4Hp2Nl7CzgZP9rUZ2d8VxG4pt8q7ma50 + YULeyVSdu0MAbvSSd+bFogwu25t85PgAjsp7OtMXxJUbQzjdH8yxnmAOCUf6ojg6nMzRyRyOzhdzaL6c + QwvVHFms47CgykNz1RyYLefITBFnZ7O5bSGDu7ak88vdWTxyIo+/X1/Ea9+s4f2fNfPh/e28/0Ar7/+u + nQ8f6OW93/Xx2k87+Oe3m3j0iw385FQlX9peyg2zhZzdXMzJ8SqOjDawe7iJ7SPtbJscZPv8JrbOj7M0 + M8ri5DDzSkid2CgMMjfWy9RQNxN9bZrwO9rVxmBLC20VlTSWFLOpt5M9cyMcWx7hzI4hTi62cWaxket3 + NnPTnnZuP9jF547086VTY3zxxAR3HhmT7cNct3MjVy1v5PKFAY7PD3B0yygHlzezZ+cMO/cssn3fMlv3 + bWPL7i0s7FhkYXmRuS1SLkq5sMT0/ILG5PwcE5snmdg0zsTYEFNy7wuTA2yd6GV5vIktg/nMdMQJkdJe + VBRwBDuGI9g5HM7W/hDmOqT9SB80Xh/CQKWVloIgqqX/LpZ+vChVRXZaaSgSh7AwnIb8UCozgyiR8aA0 + JYCyVG9qMn1pKzbQX29nrCOB8d5M2hviKCkIJinRTxwlN4LtKs2USiNj06J9VfSvNUSlVbKJQynOkN1O + eFQE4ZHicMXEiiOWIAZmCkkpqaRkZJORnSeOaQll1bVMy7PfcMvn+OnP7+XeXz/Id779Q6679iZ279rH + 2NgmGhtbqKyoobSkivKyaqqrlBDcQE1N3Qq1F1BNlVBdUyPLQm0NlVVlVFSWUFqWT2lpLiVF6eRmxZOR + EkZaUgjpCcFkiDOeLo53ZrKMgakhFKTZyE+3UZgZ4kgDnWmlINWoRftqAnCsr0Z6tJqv14uUcE9N/E0O + 8yAh1CH+xkupllNkf1qUHCfjb5qMxdlxDgE4T66nKJBrF6YEyXcTTEGyhbx4I4WyrTzDRkW2nZrsUMrT + rfL9mKSP1lGRZqAu20RzURAdJVY6iiy05UlfLXSIsdoitkNrZgCt6f60pfvRLP16VbQrVbEeNKTqqc22 + UpUdJOeWMi+UnvpMBpvz6KpLpzInTBN/S+Remotj6KlJpadWqEqmpzKZ7tIEuosSpO/MkP4wS8adNJY6 + 8jk2VceNe7u5ZX8PRyZLpV9OZ6I5kb66BNrr0miqy6KuNp/q2iLKagoF+e6F0upiioWi6iKt1KgrFGS9 + roCC2kLy5fiC2mJKmsspaanShGCVTjpXzVOr4RCAs2uKyKjMI6Uom4T8DCIzErEnR2OLi8ASGYIu1IRv + cCCeBk9c/F1XBOD1eOnd8Td54Wf21uYD9jV6428Wp0ulJAsRx19KTQC2Bq4IwBZMdjOB4uQrAdjdzx03 + wd3fA48ATzz93fAO9BDnX6VI88Fs12OVtqIIDjNiFexRQUTE24lLiaSoMpdyuf/6tiqGN0vfceUxPv+1 + O7n9y7eyvG8LLb2tlNeXUyjvJr9SvQ8lACuRvEQoO09BfYXGhQJwXk35ShroUkfabWkLnwjAFStUaWTU + VpOulVVk19dR2FRPeZuU8v6TsmNQcwDZwnwJE3tB/cEwOVHsi+IwOlqS6O9MZrQ/g/GBTDpqIyjPUhHy + nuQnelOU6EN5agDV4kDVSL0tT/anIMaD7HBnMu3ryQxZR26YMwVRLlQlezPREsuOkSz2TWSzczBem7Jh + TJyeaXEO93QFcMXmIK6fC+bWLWJrLZv43C4zX9pr4qtHLHxVbM2vn7Tz1dMRfPl0DJ8/EcsNe8I4u1Wl + gLZzaiqCQ6PhWpq0BbGTRhtjpa+LJDvaQLg4yuEWM7Fh4STFJpCbkU5FgfpjRDnzw52c3DnJbad3aULv + heKvJgAfneemIyoFtPRlKi3ysa3CsoYSfa85uMTZPbNcsWdOiwS+/cxebjq2nWsPLXLdwUVuOCSfObwo + 51LRfvPcoOb/VSLuETn+0Iwm4t52YoE7Ti5yq5z/hkPzXLd/nqt2T3HFrs1cvWuKa/cpwXdRjlPHLHDL + 0TluP7Z4nltk203H5rQ0zdfJeR3z9s5qEb9n903J/U1pou/Np7Zx08llOcYRBawEYJUGWh1z+e5JTSS+ + Vo675eR2bjuzkzvPfsLnrtzFHVds45ZTco/H5f4OyvG7Rrhi9xjXHpzSxN/rDk1x9f7Nsn2U0zuGtZTU + V+2Tc8r5r9k/Lc8zwoH5LhZGaxhsz6eyJEYTgKOi/bBY3TAEuRJoVoKuuybu6syeqHnrHKkL/RzirBKB + VwRgdZy/wUVwIsDorAm1aj5gbR7gOANR0t9eKABbw3w0AVilfXYIwCvC7woOwdnbsSz7DGJTK9SyQq+i + hu1yjQsEYG1+wCgfjU8EYMf6KtqxgrYe+QlK+F3FKja8Qs07GBkbqBEdo+Yo9CUqypdoITMtmHbpz5fn + ezmwa5zJsUaqS+KIkjZrNa/HHuIqbdiTaBnLVCRTXIqeOLELFPFpJpKzgsgpUFMzhFNcGEaejDu58YEU + xJoojTFTEmumPM5CdXwQNdE6yiwu1Mh5N8rYdkCO/3x9Ct9vTOLuxhjubQzjwXozf6wN4IlaL/5U7cKT + VW78pcKFv0qb/nuZG08Vu/JcsTsvFXvwqtjHiteVCCy8KTbxu2Jfv1uj4w3xc14t9uGlAk/OlfrxZpWO + d+oMfCg+14fiF33ULqWKFm42aJHDr1T78VypB0/lO/Nk9joezbyE36Ws4ZeJa/hZwhp+Kj6n4sH8DTwl + tvbr/WG83hfKPxv1/D5vA/clX8Rv0y/hT2We/Lnckz/J/T1R5MnjBa48krmBv+Z78LL4Pe+1i88rnGuw + Cg7h950W8YGbw3hPeKXCyEul/rwifsRL5QE8r+6rJpBnay38tc7Ow02x/LotlR/05mspoG8fqePa4WZO + DbRwZGMH1y5LOz5+UNrcAbZMjFNTXCZ2SgZJcUrUTyA+LlUjLn6VjP9JQtwK8WkOVtdXSErI+hTJidkr + ZJKclElebjFVlerPd01il9WSnZVPitzPKnEJaZ8iPiHjU8TFpX+Kz+7/LAkJORqJSWr+4FySk/McrAi2 + //8WgNNSCz/N+Qjo/8yq8Jt8HjnPKucF4PzzJKTI81zAp9NhZ5OYkvUJqVlyTKYg7yk5jcTkVNLTZVwq + L6a7o4Gx/hYmNAG4gh2b6zmzu1v690FuOj7IjScGuepADye3d3N8azeHl3rZP9/PzGADrVU5YvPasao5 + PdUcwGYvLQOKylASJPaJRRFq1GwXozUAS4gSfnWa4GRVwpMmPgViiwzEGq0if02ExluIUHOgi/0clxFG + cm4MaQWJJGTHkZyXRKHYbB0j3Ww9vI8rP3ebcCtbpE63D49Q0thMQV2D2Hn1ZJdXkl0mtouQX1ZFoVAk + dn9RebW2XlQqNmBJJUUKWS5a2V9cXqNRJL6CRqWDwopqQfatUCJ1tlS2l1bWaseXqM8KJbJcKvuKlehb + XS/2qYrmlTpe37ZCq6Osa5PtbVRIqYTfiroO2dYhtm27+Byt4nM0US32U1lTpdhjRcTmxWipf0MjPYmz + O5Nrc6E+zJNhGW/mEiwsJ4awPdnOYkoIU8lWBpPNtCYZqEwKED/Al+xkX3JS/GVZbH+hPtFAc6Ke5jh/ + uhP8mJFth9Is3JIVyvfz4rg/L5GH0mO4PzGc+2JC+FV0MPdEmPlRqJ5vy3f5f2LnftnoyVfEDv6W2K8/ + tei5z2rmQWswj9ml/4uK5umISP4iPtzjKwLwvTod9xn1WvkbXz9+7ePLPf6+/CjQnx/Jth/Lvp8bTPxS + b+JXOiM/Mxj5UZCJ74eY+X6Elbuj7PxK+F1EKA+EWfmj8HhoME+EBPPnsGD+EhXCP8QW/ntGFE/Iu/hN + nHxOxufPy/h2RsaePUmBzCQH0pPkT0W8L7mJ/uQm6clOMJIqdS9RxqWE2GDpT2xExVo0YhKDNaLkHSui + xdeKFCKSDRpqmoVoITndTEqK+Hbp4hMVRtFak0yH+DV1pTEUiI+UKj5TfGKAtL8AGSMDBR2xKQolABs0 + AVhlEvm0AGzAHmvQROCYVBup+THkV6dT3lxAXlUa0ekhhImPF5FqdYi+mgBs1ghRoq+0JU0AVsi7UITK + 8zlEYPEhNAFYtUcdIYItTNpiuL8sq1TYYtuIDREZ501skje5hQapj+Lvt8dQ1xwpY7tDAA5RNoomAEsb + 1sRfua74NVa7AavUFVuYA4sSgVUWI8EcohPEB9LQYbQ5onhXxdpPIf6RIWg1elfN5asI1CJiFXpZ1/Yp + YTfYMe/vhayexyT7L0RNHaWwKkEr1KxlGYuKCyU6LkxKJfI6iI2L1MromHCxjWSf+kO6oDKPhUZI32e3 + aiKumv83JNSmCcJK0FUCrxJ7VdTvavSvSv184fy/qwKwhv0TEdgq5WcFYPWsSuS2hdsJj5H7SoglITle + +nbpH7OiKS1Lpqo2TROAa5riqKoXn7/BTFubmb4uC8P9FsYHLUwN25gX32VuMJJNXWGMtIRo0b9tBb60 + FvjQlutJZ64Hw0UezImNoVLlnuoN4nOzsXxxOorPjVq5Y9DEHb16bu/Sc1tzADfV+3CVFv27gZOFl3FK + CcDFzhwtWM/+nEvZmXUJ26Tcmn8ZWwo2sKXQRUoPFvI8mM1yY0aYy1bL7mxKc2I0dR3DaZcylrGeyewN + sn/DvwnA2xIuZlfixexNXcsB2bc/eS37ky7hYOIl7I+/WFDLazmSsp6Tmc6cznblVJYrZ3JcOJPtwsn0 + 9VyxIgDfmufJ18sNfLPUqAnAN8dv4Gz4Gq6MVALwRdyefAlfz9nAt4XvZ63jJ5mX8gtZ/k2+Gw+VevNI + hS+PlnvxSLkrD5et5/HKdfylYR3PdGzgxR43zm305r0hf94f9OftHi/OtbvyWqszr7c7a8uK19vdNQH4 + fBroFQFYoURfRox8PGzQll/vD+BvPQH8pMGXa4oDmJH+pMjiRpS/C2YvJ/Q+7uj1PlLvHPP1KvFWRe6q + PzpYhSBpD+4+LriuRPmuzvmrUPP+rs79qyKHNQFYltW5NAE4VP0JIVj77cGu0j5Lf6JQaZ+j421ia9k1 + YhJCiEywaZG/Crv4/UbxpVR2gQjpe4pKktm8qYt9u6bpbisnJkxHqPhgkeIXRQW5a1OYKQG4Mt1IoxKA + cwz0ZOvoVyJwhjcDmV6M5HizqdCPqTJf5qt8mavykjrr7qDGVUqFu0MALnPSUMvzUle31niwrcZLE39X + 2aEE4BoV8bsiANc6BOCtNWoeYDm+2oPd9d7slfp+QKEE4OpAjsixh8p92SttZin9Uibi1jAu9XNT2mVM + ZLgwIfc5ka9nJN/EYK6Jrkw97SleMv66yfjrRGPsetoTnOhMcqUr2VVKZ1lfR0PUGlrj1zIs9XNLvZXF + 2iDGCr3pSb2UjqSL6c24jME8J8bEP5mStjpZ6cuoLPeJ39GZcSltqRfTnraWDqE3W6WDdmFEHVvhyXKl + B/sq3DhW6sTZwnV8qdKVu+u9+H2rD39vD+AV4ZwmAHvzTqcPH/YG8EF/IO8NKPS8I8tv9+t4U3i121fw + 45VOb17u8uX1Xn/O9Uk97RF/RT77Uof4YT3ie/UbeWvAwTsbgwQz7w0H8e6whXcGZX3AzJt9Jl7rCOT5 + Jg+eq3Pl+To3Xmh05+VGJQB78FKzpxYJ/GqzNy+1ePNimxcvtHrxotzni+rea1z4Y/5aHsi+mN9miF+W + s4ZHSi/l6VZPXuz20aLxXx+UtjXky4fjOocAPGWGaTMfb9bz3qg/b6ioXWm3L3W68kqXtNUeaZdy/NvD + 0n6HxGcU3h4N4J0JHe9P6vlgSvzHaQPvr/DBjJGPpox8KPveGVuJDNYiglW5OmewvyYAvzEo72lIz/Nj + Zp6Zi+CFg3m8cXUDa5pyVf5zfypTAsmP8SXZ6kGEzpUgdyd0zhvQO7tgcnHF6u5KtI8nST4eZAZ4Umjy + pDLYg6YwF4ZSvTjaGcn3D1Xx7F2bef8Xs/zrvk28f/cIT93Zza+O1XH9aAqbi/UUhq8n1nQZIcYNBBmd + sAY7Y7e7EhPpTVy0L/HRYgiIwx8jBqgSgZPj/LQo4OxME3k5KvVzsBg6QeRnWcjNNJObZiBHjJ6slABx + NP1lWZx/acileVZqCy30FRuYLQtknzj1V7X68215AX9YDuW5AxG8esDOm4cdvHYkhJeO2HjmSDD/OCLO + 7hEzTx4J4k/HQvj1LhPf3OzFdd0yKJRdxGjmGmkca6QBSIUvcKZNOvrapHWUxqwn176eNPN6sm3uNCbr + 2VRgYpc41WcbLXy+y8YPBkK1ibDvl0r40EYDf5wx8PcjEbx2Rw4f3tMIj/fDi5Pw9gK8vwQfL/Pxx/Pw + 4WZ4d6Ns70Q8dz5+uZIPny/ho2fL+Oipct5/spx3HinnhZ/n8MT/xfDT037cOb2W4w1r2Fe0hp1SSbcn + SimdxuGUNZzNd+aWWj13tFi5ucnGFXUW9hfpWMz0kU5FpbFZT53lYhqCleC9gW1VBk72xXLFRjWHlpkZ + GZTmhBMddm6fzuQOFTk7GMUeMQS2t5tYbJP33qxnc2MAm+oF6bzGpPMclc5jsk7H1i47+4fi2dWfwERt + CO25OqrEcVBpg5LDvaSDdiPM4EGYDDDRpkCSxHBLF6cvN1L9u9+TilRfusqDGWuOEEIZqbcxUhNMV74v + 1YnrqIheS12ik5bbviXNjdY0ZzrTnZko9WOx3she+S6ODYVzejySy8cjNM7K8jWbYjjRZ2Wp2o2h7DUM + Fa5lc42bPE8g2weC2b8pimNziRzYHMvygJWFXgtL/cEO5HOzPRZN7B2o86Kz3IXqzItpLZIOusWPLb0G + ljp82Cad1/4+cYSkg9o/IPWjW8/WtgDm1Vy2TT7MNHgzXuPOxrIN9BdfSq/QX3oZQxXOzKr5BPrtHJmI + 5+jmBPYPx7BNRQE3mtgs73iiIoDNVTqm5BnV/MZTwmidkR4xIDrzXTUBWKWA3t5iZ7nBwpYaI3PlAUyX + +GjlbJm/FvW7KgDPyoCzUBPIcrN8r61BWqkif5UAPCUGyWxdIPMNUm8aArTUGMu1YvSI4fCN3cn88Qu1 + vPxAHx89MwxvbnIIwG+qCPY2KevhjRp4tRyeL+PDv1Tw5oPlPPGNbL55KIjTG53Y3XQZ2+s82NOiZ4/U + qZ3NOpZqPZksF+Ot5DImZfDV0kA3yH3We7LQ4MVyo7cYk/4c6dBxqsfI6V4TJ+S9H+k2cLjHxLGBcE6M + JXJyOptTCwWcWCjhxFwpp+YqODlbrnF8poxj08Wcnsnj2rl0Pr+UzPeWk/jtgTT+fEUOz96cx7lvlvHe + T6v44Df1vP/bOt7/TSMf/LaVd+9t5bW7G/nnt6p55POV/PBYMV/cWsCNcq6rNhdxaqyCoyO17BqsZ/tQ + C9s297F9bpTlWZU+eZil6SFNBF7YPORgUz+zo31sVmmgezrZ2N5Gd10TDcUVVOUXMtDawhY5fv/WcY7t + GOPIYi/HFzu5YrmTq3b0ct3eQW7YP8qNBye46dAU1+2b5Kqdo7J/lDNbxrh86wSntm7m+LYZDu2YY++e + RXbu3cLyvq0s7V1madfSeQF4YXkLi1uWWVjayvwWB7NLS2yanGRiYoJxNWfx+IgmYG8dH2T7eCfbNpYx + 05HAZHM4022hLPSEsdwfyrZBqX9SLvaEMq8i6ZtCGaoNpaM0hPq8ICqzLZRLX19bGEpLWbRGa0kUDQVh + 1OTK9jwLNdmBNOT6STszMthoZ7w7ns0DGXQ2xlJWGEyGOL/2UDfMMqZZxPlT/9RVjpHOKBhMGkZTsDiT + 4YRHxYizFUt0bBKJSelkZOaRmZVHenYRWbnF4piWUVZdz8TUPIePX87Nt32BW2//EqdOXcnSwjb6+4Zo + bGilrLSS4qIyoVyWVWrnFQF4lfNCsIOqC6mtEaqorKnUhODyihIqygspLcqScS+Z3PQYslPCyUwSJz3e + TEZSELkpIeSl2slLs1GQYac4205JTgiF6UHkJKq5eP3IjPbRSI/0Ij3ck7QwD1LDPUgOdSfB7kRiqDPJ + EW5kRHloxysyorw1smMCVqKAVfSviYJkGYNTgylKs2plQaKZkhQrlVkh1OZH0JAfSU2OXYvYLk83UJtt + pqVA+uVyO71CV5GZjrxAjfZsf1rEyG5N96Y9049uWW9P86Uu2pW6GLEt0vXU51qpzrVRmRtCTWGEJgBv + bM6npzadquxQiuSeqrNCpQ4k0rsi/PZWJDFYlcJgeRJDJYnSH6YxJWwqj2NLSxqnJiq4c28HXznczdXz + ZezrT2OpTY5rSmRjYzpdDVk01+dRX18o30sBFTVFGpW1xZr4eSGldQUaJbV5WtpohUpFXNlWSUVHDUVN + ZeTVFpJTt0rxeTKrCkgsyCQ6K5mQ5BhM0XYM4VZ0dosm/npb/DUB2DXATRN/lQjsEeiqRQErvPXiPK3M + 36tE388KwGpZib8Gcej9zQFyrDeu4mgpVkVgd+WIBch5Aj3E+ffVfiQJChUnTlA/oqjSFmkhPC6E2OQI + 8koyKazIoaqhhIHRbk5dc5L/+85X+PK3vsSBk/vpHxuguaeVak2MVamzHVHADgH4ExH4/5UALPxXAbim + hvTqaq3MqauX99xIRXsTRfVlpOYmyv0Gaz8whUb4ExbuS1KiUdpRBF1t6Qx2ZzDSm8mIlC3loRSm+JEe + 5Ua21P9coSDOh7IUx58XShPEJlHtIsxVcCZHib+RbpTGeYrdLHZNaxw7R7LYP5HN7qEEsXmMYi94aeP4 + vj4DV0zauG7exi3LIdy2w8qt201SGvjcATNfPmrlKyfsfOlkGF88GcWdx6K1COCrttm5Yj5MxqgIDopN + ogTgxe5YxpriaC2OlLZsJMLsT5Q1mPiIKLGRk8hJS5N2n0FTRSFT/S0c27aJm45v46YLBGBVKq4/NCuo + cp5rZV0Ju6tcvX+Ry3fPcETGhoMLw5zd6xCBbz21SzvfjUe2atx0dIvGLWo+YTmPEnEVNx2Zk23z3H5y + idtPy/4TWzShWEUNX7lnhst3bZJSiaez2vbbTqk01Col9QJ3nNpyntXtN52Q+z62yPVHF7juiLrfWU3o + VdxwVI45pQTcbbJ/Sdum0kCv7lfL6vnU/tsv36XxWQH4zrPbuVXuUwnA2ly/O0c0sfeaA5OOCOSVuYjV + diUAX7lns7wjJWA7OLtnjKNb+1ne1Cj1qZjqsjhNAI6I8sUU7ILOonDTxF8l7gaK32SweGsoIVgTaK1K + oFXrXgQY3TQB2E+/QROBlUir0iWq9JBaFHCcQRODlfgbEqHm9f1EAFapn/+TAKwh2xWrArAhyF1DF+yq + RQErkdce4///SQBeXV49RvGfBGC1rMTfqDidJoyHi68XobYJ6SkWTQDeOtfDnm3DjG+spqwgkkgZm4LN + 6wixORMa7i6f9yU6KUBjNa2lEoETxQfMkPEhT+yEonxpy+lm8hN1FMWbKIs1URJjpEzaS0W0gSrpD5QA + XGVaR3eYG1ukfV9XHM7Xq2L4fnU4P60K4teVOh6o8OLhClceLVvPoyXreEzs9z8VbeDJIif+UeTMs0Xi + tBe580qRh8ZrJeLIC+fKfHizwo+3yvx4rcCLF3PceT7TlZdzZX+xr+wL4D2xtz9sMPFxq0XjvSaTmMIO + AfhZOcff85z5U9ZlPJx+Mb9W4q/4az+V8qfis/0s/SL+UOrGU60mXu4P4+WeEP4qvtXvctfxy+Q13Jd2 + MU+Ue/JklQ9Pim3+V7Hd/1Tozh8z1vF4lty3XF+Jvm80hfBaXRCv11sdArD4T2832Xm7IYRz1RZerzTw + WkUgr1QG8qL4zc+Kv/aM+IdP1tp4qD6aXzQn8e3OLL7UW8RNA5WcHWzgeH8ThwfbuWbrLHccP8T1Rw6y + RWzC2pJyssSeSoxOEp8+nrjYZCGFmBVWUwn/N+JjV1gRjs+v/z8hxyYkpJKXW6TZXWo6juqqWrLErktK + UmJyikZsfOqn+cz1Y2LTPsVn93+WC+fvVVw4/6/i/2sK6M9+/rMkJeZ+miT1fP+dBC2q9wI+I/B+dv9q + auiEFAcq6lehxF9FUuqnWT0uISWDpJQ00mRcKi7Mpa25WsbcJocA3FPG1pFKGWNauOZQr/Tjvdx4oo/r + j/Vx1YEBzuzq59hyH/ulT5jsraG5Ious5FDsNj8Mqv9UqfNVdpLoIM02UVgjFGYt6k/ZLNYIZbfIMZ/B + GmXUhKnQ+GAiEpUAbCcu/RMBODEnntSCNMqbK+kXv2rPqePc/NWvcOs3vsrBq65kcGZObLtuCmqbKKhp + ILeiWqihQChcEXU1obai9vx6UWktxWV15/et7lcUK2H3AtRnCsvl2Ip6jdLKRsqrGqiodpSrqPXKmiax + QZuoqGsWe0zqd2Mbtc1dGjVNnVQ3dFBV37Ei/K5Q2yk2baf4Hg4BuLammRqxn8obqsRuLSGtJImoVIuW + kS8l3I1yldI4yo+ZBPG/k4M5mBrOofQIdqeJ7ybvbiItmB45vj5Fr2Vuyk8NoDBN2U4mGsQHaZf9XalB + dCQb6UkMYCpZfPm0IK7KDOErWZHcnRHFr5Ij+Xl8mPR1du6JDeHHMUF8V76/r4cE8AUZJz9n9OCLYu9+ + 3eDNT8w6TQB+yKZE2TCeCo/kqdBwnrTZeFTsISUA32fQc5/JwL16Hb/1D+A+P39+pvPnx4ZAvm/Q8UPZ + d7fJxD0mM3ebzfwo2MK3w4L4VpSV78p9/Dg+nJ/HhHJfVAi/jbRyv9jkv5f9D4ld/pDdxB/CzfwhNpiH + E4J5THyxBxODuFvG5a/GBXCt+E7HpNweH8BEnC9dCYHUJ+qpijdQHGskM8pAUqSJ+CgVAewQfxWRcSaN + cDlGESFjfXicnk/m5PcnXIhLUnPnB5CeatYE4PbaVLpq06gpjiIn3SJ9RoD0Yyrjhp+MlQrHmBktY6JK + AR0pvpyaA3h17v/VuYCtYl9Yo2WbjJvxmWFklydT0pBLZmmiJviaxNZQKZ5t8pwXEizjq8ImY61NRf5K + qbDHStuMNkt7c4i/qwKwJv5+RgC2R6gsIZ5ExXuQlSd1p8ZOQ2sUtY3hZOfpxSf3xGoTOyhI7Jwgf01Y + CrbKtYWgECWy6rXo3yB74CdC7ypW9acQKxD2xgAA//RJREFUQZZV9K8SaZXguRrZu4qKfA006cT+CrwA + f00YVajlC/ns51cjh40WB6sCsDlYibBGhygmdceu5taNDCYsyiaEEBFp11BiryrDI0IIC5N9K6i5fkOk + VOKtEnJtK+Kviv61WC3aNsdvGv8uACvUMZ8iJOhTGK1G7f599T7iA3ppz6rekRKJw6LDiUuMk349geT0 + WNIzoykojKO8IlH6luQVAdhGtdgvjY06Olr86esMZGN3IOPi+0wNWpnuC2OiM1T8auknKgwOATjfh/Y8 + L7ryPBkp8mRRbB+VofNMj4U7J6P44qYwPj8ky/1Gbu8K5Pb2QG5p9ON68auuLHPhVPE6TQA+XezEyRIX + jotddlBsoF3Za9mRt45tKv1zoRNbi11ZyndnPtedGbHDpjNcNPFXLU+kbmAk5TKGUtcymr6OqSyHADyX + vl76tfVsE3tpl7BTRfgmXir93joOZ2zgsCqTL+No0mUcke2H4i/Rlk+mOXFFtjtnczy4PMtNll2ldOF0 + mkMAvjbbhdvEJvxGhZFvlZv4Sr4/18et44x9DVeEKwH4Ej6Xto7viF35Y+GnBa78Is+J+3KduV+e4Q9i + Gz4q9uXjlUK5O49XOPPn6g38o2kDz3Y68WKvC28MefOuSvfaL3ZopzuvtjrxSssGrXytzWUFN861fzIX + 8Jvdn4jA7w06BOCPNup4t9+PV3r9eKTZg2+Wu3Is052RWC8KxGeIDHTH4ueOWe8n7TFQE2wVWupmaWsX + CsBK1FXirprjV6EJvisRw6tRw6pc3eev88Igvq3FLucId4ztitAos0ZYtEV8Kxmf1J/SI6U9qHnFw/Vy + jJ4QsfFV9G+gxQO9xZ2QcBmLipKY3NTNfvFpe9srxF82iN/sQ1yI9JE2z/MCsPL1G7KMmgDcm6OnLzuQ + vgxf+tK9GMryZlzq7OYSb2YqFJ7MVEo9qnRltsrtPGp9ptz5vACsRQFXe7Bc7fkpAVixKgBvrfZfwVeO + 9WKpQj5T4cL2and2S33fX+fDATn+kBJ/hYPiXygBeDlrPbOpFzOfcRmLea7M53sxW+DPdKGBzYVmxgss + DOcZtVTWXSkedCS60J6wgd4UVwbSPBhId6MvzYXupHW0xKyhM+FSxvI9WRY7f0uN+rwXPSlr6Uy8SM6x + jsHcDYyqNNBlXhrjJR4MFbrKe9pAV/qldKReQmfKJfRlrmdI6q3aP1fpxe4qL45UeWrTjl5btJ4vStv9 + gdTd++s9+JsWXevHm1K+2ezFO+3evN8p9bDbn3d6HLzVo/6cIMsDgbzVH6DxZp//p3i9y5uXpF6/2OLK + a53enOv24w357Bs9cmyvnrekL3pH+hLFW30mKc1S14N4q9ugibwv1LpqvNTw/yPtr+PrOLJ1f9gBoxj3 + lvaWtLeYmZmZmWXJsmUxs2SZ2Y7ZDsdhnsAkmcwkOYOZzJw5w3zCzMwD33dVb8lxcmbO7977/vF8qrua + qrurFvTTa5XdBah00Apq+5v1Drze8BXeaHDilRpH8bOsNP/wN5mX8uuMS/hNzmW8KOPljTY1/64T73c7 + ayTsZ73u/H1AEcCCMRP/HPXiiwF3Pt5iSdX8Rou1BpWyWaV5/rzPoB3zaZ+Mw35F/Hrydznmn+MmmDDz + j0kL/jnlDZPeWr0iiD/ul/vtk2ekzt0vUGWfkfd79LwvY/ttGdcvbzby/LAfL+1I4Z0TZayqSBWFK0Zb + fqwbqaEuxPg4ECwDXBHAxg3rMVpZY7axJdjZnniDngxRjPmiMApNrpSa7an1XU9XpBU7xaG8dz6bZ+/c + xMf/0cvfn+zmi//YyOt3tPFfR6u4cTBBBoWnRgCHea7G22MDXp5WotQ3EOBrrf3xrdJ+RYY4EyEGQXiI + ghPRYc4kROtIFmc/TZz9zBQzGckmMXY8SU0UgyrenWRpe6IYPInRrqTKvWSqCLJMM6VZnrRluzOSq2dH + iY6T1S7c12XkF2PevLDNjze2e/POLh/e3uXL67t9eHm3N8/u8uKvuz35024P/ijlr3eJoTjtxt19dpxr + s2JH5eUywFbRlbGKzQWiRKSTbxJHuyPPkcZMNXehPUl+60g0r6c00omedD2zuS4clH2uEWf94VYzT7Z7 + 8xvpgH/s8eSPo+68uD+A929O5R8/qII/t8Mb/fDxOHwxCX+fEozxzy/6+Mcnnfzjwyb+8W4FX75RyOev + 5PLFS/l88Vwhn/6lkI9/W8jLjyfzy/O+fHunFdd0r2J/ySp2Z65ie9IqFqOljFjFwfhVnJZBekO5njsa + fbm7PZSbO8I5UxvIgRJfFrM9GE1ypVvea2f45Yyl23Kg3purtkZzuiuUbaKExtLXMJ29nitazNw8HMON + I7FcsdGbHfWuLDbpmGnSM9mgZ6xOhFKNGP6Vrtqctgpjte5s6/Bnf28U+3riGa8Ppj3Hg3J5d2nB9kR5 + 2xBstCbQIEahwY0YkxeJvl6k+BrICNSRKY5JcawDbfkeDDUEo6ILx1qCGW8MYnORgYYUa2rjRDClipDK + c6Mn343efB39ea6Ml7qxWGNkX4eacyKYswNhnBsM5cqBEA3neoPkPjxZqLRhIHsVA4WXMV5jw4IIpZ1b + zBwcDeH4VCSHxsLY3uPDQreZxS3eFmz2ZVqEy5Dcf1eZDY25qymX596YfSkDtY7Mtrsz2+TIogip3SLI + 9m0ysLtLHKJ2N+aaXeV5qXlsnTRSs7/Cnu4iEdh5q2lTkHN1qfQS8izn23zYtzWcQ4Mx7JVnuG1jEFP1 + Zi0v/6D085Fyd8aqPZms95Vn4sdQnTdbZFunGBF9pToma0zMikE2XeGhRf+O5LtKn3ZktMBVlJcrwwXO + DOU7ahiTdz1RodPm+p1r9GK23oPxSnmfpaIQix21P4K0eYsrXJgURTdfZcsJETKP7k/j6Qca+eCPm/nb + m73Snwfg063wyUYpG6WskboKeK9Im8N6hQB+5tsZPHLQlzM9duxusBIlaSfvS70zeUaVcg1RrP15a9iS + fRkDJVYa+ftNAniPFgHsxmExHg+1uLJflMq+Vj0HFBm8JZAT8txOjqdwajqTU5M5nBrN5uxIDqeHczWc + HFLI5sxwKjeMx3HXbDhPbIvit4cSeemqDN6+JZ2Pv53N50/I+PtpEZ89VchnPy3li6cq+OxHlbz7WCkv + PpDPH27O54nDOdyzkM3NU7lcN1rA6cFSjm6tZFd3FUub69k2tJHF8c3Mj29hZmILs2ObmRntYWZkGcOb + mejfxPCWTvo729nU2EpzRR2VeWUUpudSX1HBcO8mts8MsHexj70zmzgw08mRuS6OL/ZwescAZ3aMcHLH + KKd3jnNi2yhH5wc4OjsoGOKKuRGOzo1zaGGSvdum2bFzRkv/rKJ/LyaAp+anmZmX+vlFZuYWmF5YZHp+ + nsnZWYZGRpYJ4F6G+nqlvb3M9Paw0LuRhS1ljDTF0lvpT1+VN2NN/ky1+THT4cOsjMGpNjWPdQD9NX50 + VwTQUuxHTa6K9vSmJMuHivxgGkoiNDQWhVNfEEZtfhANhYHU5nlRl6OnrdSDTbW+9LaGMdiVQFtdOCX5 + 3mSkGAkRHeLtpyKu9GJYipMkOsxVr8PFVY+LTpwlD2/8AyIIC48jPCKBmLg0kpJzyMwsJCOzQBzSItKz + isjKLaGgpJrO7gFGJxZY3L6PxaW9DPRP0NK0kdKSKi3qNzsrn5zsAvLziikuKr9A/FaU1yyXF5HBglJZ + /woVlMr7VGV5eSmlZSWUlRZRVpQn95NBfmYiOWnRovtCSI7z14jg9PgAMhIDBf5kJQfI9kAKMoK0lNCZ + cQbSw3SkhbiQLkgNciI1wIEUf3uNBI7zsyHWdwMJgdakhTuSF62nMM6D3Gh30kNlX9HD6WF60rUoYAsB + nBmvoo69yVEEsCAv3pviJH8qMgLlvYVRnxdOdXYQ5emif7XIXx/aigLl3YaxuTyENpHzzRk6WjJ1NKW7 + 0JjiSIsY2J2ip7fke9KZ7kZdhB214vQ3phqpzfGjIieQMkFVfhgd1alsrs+moyJZI34LYs3UZYWysTSe + 1qJoWvIi2FgQzdbyRJF1CQwWxTJeFi+2R5TIuCBmKiM42Z/H3bsb+c6Rdm5bkPHYncDO1ljmWhMYbk6h + uyGDlppsaqtzqKjMolRDDmUKihRWqM7VyuKqbIqqsiiUfQoqMymoyqWovoCKllLKWyspaCgmszKbdNkn + tTyLFDX3r4ZckoqziJR3GpgYiWdkAPoAL1x8jDh7G3HwcsXB0wU7gz3Wbrasd13HOqc12Og2YO9uo8FO + b42dTpwrdzUfnkoL7aYRvyulhQRW8/+64+LhokX8Wqs/cr9BAK9EAasIYINZpaVVc1WpDyh6jQRWDlhg + hK9GAKflJJKem0R+aSYtnfXsP76Pex66mwcfe4DT157SZEX/xCAdfV2UNlRYIoAvIoBXiN+c6hIN2VWl + XyOAL5DA5RZ8RfxejOUIYI0AriS9ooa8unpKmhrIr5H67CTCYoIICvMiSBzDoGA9sepHhZwQWhqSaG9K + pKMhjvaaaCqyvUmVvq+NA38rEgWpQXZkR7ho4yE3wpU0WU8LtCNd7I6sEFvywh3E/nChRhxFLQJ4SzK7 + +lPYtjmS6VYfJurcmG8xcEDsg5MjAZyb8Oe6uSDObwuQ0sTVc+5cu83ALXvN3H7Qj1sP+XPLoWBuPBDG + dbtDuGpbMGdmQrhiLIR9/WJvXUQA10kfTpJ7CjW5ExkQQFx4NAlRcaTGJZCVlCDjJE3kYDX7pnq5av+M + Nj/ulXtVumaVunlMw9ldI4JRzu4c5tROpRsE4iCf3D7GsW0jHJzpZXGwnemeRvZMdHN6zxQ3HFvSIopv + OLLI9QI1d/B5lT768Aw3HJqWctJC5Kpo3sNTGvl7y8l5OWae6w7PosjlU7vGOL40qOmic3sntPTN56+Y + 5vyxKcE0t5yY5dYTc9wmx91yco6bZF3Vq7l6rzsyzbVy3msPq+OmtMjl64/McuMVc9x4dE7qp7lqmdi+ + 5qDsJ1DldUdm5DyLgm0a/hUBrNJAf0UAb+XEUi/n1DzEKuJ497BG+qr6Y4tb/wcBfHpnP1ds28LSaBMD + XcVUlcaSnGwmMFilc16P3nPDhQjgFQLYXcHLUYPBy5KSWcHdU6V/tkbvYfMvCWBF/AYp8lelMVVz9wY6 + 462lf3bUCOB/FwH8TQLYEoksUMT0/yMBfDFW9tH2WyZ9FdTcxAorBHCY+qAd7Ix/oAMBUh8oiI/xoL4m + jamRFraJ7bKpTfRnmj/B/rb4iA/l470evwAbGcuOhIh/FxLlSmiMXoNGAicaSUg1k5bpS3aGL7niG+aJ + DiuU8V4cLYjw1FAS7kFZqBulvg6UeKyl3mcDQ+FOHE4wcHOmD/flefNorpEf57nwVK41v8xby+9yLuf3 + 2Zfzx6zL+WvOOp7OWc8LOVa8lm3Dmzm2vJ1jxzvZ9rybY8F7uY4a3s0Upz7Fhpfj1/FS7DpeS7TmzTQ7 + 3st25qMCHZ+LD/L3KiN/r/PkyxpPPq724F3xxRQB/FyGNX9KXsNv4i/lZ+Kv/TBKkHAJT6at5j9zNvBX + 8Z1e6wzg3Z4w3uoK5Nk6d34h7fpJ0iU8lXoZfxW7/NkKPc+VufFCmZ6nxS/9TeJqfhu/mmelrW8UG3mn + 3CTw4r1KSwroj6u9+Uilg64w84ngY9n+cZkH74kf8Valm0YAv1QhfnGFD7+qDOH71VHc35jALc3pnGvN + 44r2UrGtq5cjgL9OAFflXUwARxIZEashPFIQES92V8L/ioiwBCIVxD7TsLK+DLX9XyE8LI4osedysgu1 + H/OamlqorKzRCODo6HgiwmM0hEXEfQ0Xk70rbQgNi7+Ai9v2rxAekXwBYeFJRKhlKVcQEZH2DaT8r7j4 + 2H+Fb+7/TQL6m4j4JmLkuIsRnUZkzFdYmfs3Km4Zy5HOKn23lsJbkcIXIUrqLJB3LjopISGejPRkaioL + 2dxWLbqplIGWfMY25rJjpIzj2+s5u6eRqw61aiTwlQe6OLFjI4fmWtk+3CC2Xg7lOTEkRnnj5+OKu9EB + g7czpiCjyB6zyBYvDYr8VVBEj4oE9g6U7UHqI/JXUBlN1HHmYE851oR/hImgaF/C4v2JSQ0lPiOK6LQo + EnNSKGuqZuvEEPtPn+K2hx/inse/x6mbb2F4YTtVbd1i19SRXVZDdmm1lMvz7Ip/kK9I2yKx+2RZEbj5 + Wl2NrNctL1eRJ9u/SQDnF1kI35yiCrKLqqW0oKC4lkI5rqi0VlBDoaBYlkvK68VXaKC4skHs0EaN7FWk + b2V9m4YVEvj/iAAW+6mkspTC6nwyS+W9pvoTHaUjOdiWqlAHtorsXogzsz/RjytSxC4R7BefYzHejxHx + ATYlmqgVOVoYpyc7zpX8eDeqkr1pFjnemRpIZ5If7Ylm2mPEXhKfZC7BxMF4L66J8+Zb8l4fDffluxF+ + fC/aXxDAo1E+PBjmyV0Bem4yO3Ne9KUige/xcOIxsXt+7mvid/5+/DUwiGcDBL4B/Nnbh9+aTfxcEb+C + J72M/MTDyM8NBp4yuPND8f0eMxl5yMONb3u6a+mev+PlyUNmT+739+KOYBO3R/hwT6wfD0g7HhV794lQ + b34UYuYnQSZ+GuTFUwFyXj93fuTnyg/8XPhxgAv/FWHk1+IP/STOi2+L33SD+JunQl3YH+rKnPhcw5FG + Nkd50RQm+idY/DF/sUUD3AmXfhgSatTmA1bzVQaGiW4U+KupSwQBoXoNlnn5XfEPE70pCAl3JkxlaBId + V5wdSmt1Mi0VCZRmB5McbxSZ4CRyzInQSCeCBMFRLhZEqmkkVCYRVzmvmuLBAk3XC0zBrngF6/AWHRmW + 4Kulfi6ozSS5IAaz2B56X7EdgmTcSZu8xP5Q8FQIFj8hSHcBZkX2aqSvh4wzI15BejwD5NyBOkwBst3f + dRnKdpF7CxQ7JsAOv2AbuX9rElNdZayI318bJH3Xn+Q0nTwjW8xmWzw9xY4Rn8jTS8a4aRk+inQSP8VX + 2iTyQZvzV3wYBeXLGNT8vhqkXs396+mGmyJ3jToNumW4GlwFelzcdRfBBWc352U44axXcMRJ4OLujKvR + RSNOVanzcNWiZ909LDDIdRTUNwcFL28LTIogUymsxddT8PM3a/APEPkmpa/0bW8fTw2+PiYt8tfb3xLp + qwhdb19vgSWaV5G/KspXRQAr8ldBpX+2kL+yv0nO4+eNWeDlY5ZziHz09hT56bEMS+rqFQLYUaemA3IS + e1WlgTbJO/EnKjaS+KRo4lPCSZRxn54RSn5+pMiRaPGBwwXelIm9UV7uRHWFHU219rTVO9DV5EJvmwcD + bX70NoscqDTRVmTQCOCmTGeaMx1pz3SgT+ylmVIX9tYaON3mxc29AdzR48utG43c3KrnxkZXzte5cm2F + I+dK7DiZv4Gj2as1EvhEgTXHCm01Enh/1np2ZKxhu9hIS7K+WGDLfIHdBQJYkb/DSVZSWojgFQK4O/4y + ehMtBPB4qhVTKRuYTbZiW7oNu9Jt2Sn77Itby6Gk9RxJteaIKhPWcVRsuyOqPmaNtnwyxZazck9nMxw4 + nWrHaTn25L8ggB8o9eThUhN35bhxVaScw3sVx/xXcW3Uau5KseLxYh0/KdHxs0IXfp5rxy+ybPlVph2/ + z3Pgz1L332WuPFPqyDNldmLnWfFS3QZebVIRwFZ81O3EJyptbIfYoo0beKt2LW/XrrtAAluIYAsBvBIF + fDEB/FmXTiN/VfTvx+3OvNHixC/Krbgjax07YtbTFmhFpvgQIQax6Y0iP3yM+PqrPqZSoav5pi1EsEYC + C9T4VBG9OoP0KSlXIoUVDCpVtEAtq+1q/l9FAKt00mo/Dx/1I5clC5klE5lBg6+K9vcXGSly2NtHJ/6T + +FBiD3iLbPETueMTpH7IUL6NhQDOzY1jeLCDvTvH6WopJS7UU/xmHTEij6LEd4oNctQCJVSwgiKAm1QE + 8EUEcFu8vegvO7akO9Kb48BAgT1D0ueGimwE1qhslCOl0qc0QtiWEVVfaKUtj5fYM13mwGy5I/OVrhpW + COA56fNzYqtPl7oyXeIicGKiWPpqgZVA+qAsb5cxtafKlX1VevaLDb6/QlCqZ0+hM9uzbVnIsmIhx4Zt + BU7M57sylaNnIsfAWJ4XYwU+jOSZ6c9yozvZiY4EGzoTrOhJlTGX4Uyf9NWeDHu6EzfQFnUZXdKXR/Kc + pW1e0i4Zt+LDdMZeSpv4IN0pa9mSsYGtmVb0S58czLNnUHyVwQJ5JuJTdKdtoD3hMtpiL6EraTVb09cx + JPvNFjuwt9yZYxXO2ti9IW8D9+Ss4fH8dfxKZMXzNc68W+fCJ4KPax35pMGRzxqd+LTZmU+apR83O0o/ + deDjNqnbqH5s0FmwUcFV67Mftou/1Sz+WO163qhZx9sN1rzXrFIrOwqc+KDVlQ/b3OQc7tLX3fiw1SDH + efB5p/g4bQbeqXXgzQo5/iICWEUCK7wueLPOnteWsUIAv1bvyMvVDjxfbsPTJVb8Re7nj3lr+EP+Gp6r + seWNVife7nLh3W4X3tsk99Gj0jcb+HLQwD/GzDDhw9+GPfi0T6dFCb/ZbsPrrda8tdGOj7bq+GLQgy+H + PPhCQZG/csw/J7xhygdm/GBWMOcP8wECKWd9+XLci0/H5JxjJr6QfT+fMFswKv6dnO+DHnfe3uzG893i + Ew768Oy2RN44VsKqokQ9+XE6MsW5ThTnPMpbHHM3W0x26zUC2MvaBn8He6JEGaZ7G6kI8qEm2JsqPwPV + vo40+q6nPXA14yL4ruwO5T/PVPDSvY28+51a3v12Da/d1sQvjpRxvj+a4UJ3soPWEOJ5OSb1ccPTGpNp + /dcI4KgLBLAYMlJGShkjRkt8jDspiZ6kJ5lJifcUeJAcJ85/tBvxkXrixMiJi3QhJUGPmv8xJ1Mcf5Vm + MtONgSwdi4U6jkpnvLvdjaeGvHh61swr8568vuTNq4KXtpt5bruJvyx58IclA79ZcudXS2Lwzen5zqgz + t/fYcq7dmj31MlCKLmFz/iX0SQcYqtUxVGdkuM6LvmoxhDNcyAhdR6LvZRSErmerrKs5CHbn2nK6yI4H + Gzz4aauZP3T78HSfF38Z0/PSPl8+uDmJf/6gHP7cBm8uE8BfKgJYRf+O8M9Pe/jywzb+9m4dX75Vwuev + 5vHJC9l8/lwunz2dz8d/yOfDX+bx3CNxPHnWyN0zqznXtorDpas4mLuKvWmrRJmtYk+sKJyUS7k235bb + qt35VqsfD22J5P7eOG7tjOKalkiO14WyV4ywGTX5uSjHJRE4V24K5M7xBCkD2C5CbjL1EmayLudgrRM3 + 9AVw00gYJzZ5srvRkaUmZ+abXZgR5T0pg3tCntFErSsjlU6MVDgwVa9n1yY/DvdHCOKZb41gc6H0qUQ3 + knw3EGFcR6jBWhSNE1EeHsR7e5MoxkqSWUeSyZYkr7XkhaynKc1Jnr8vky1BzHaEsLgxVK7jTU++C90i + 4AbF4Jiq8WWu1p9F2W+hwsS8CNGd8r4Od/hxpieYawfDuHYklOuGQ7lecLXcy+nNXuxrlHaWXMZ42WXM + iVDZKQP64IA3J6ZDOLsQyYmZcPYO+rKrz5tdA1IO+LGr358FOXakxYWusvXUZ15CWcIqmrIuZaDantlW + HbMi0LaJcNrT5cr+bjcp3djRoWdOjpkS4TdVfxEBXLyBjvy1tIpwac5ZLcvrGa5xY6bZzM5NQRzoi2TP + 1ki2bQxmtkEEvtzbSJme8QoDE9WeGik83ezHWKM3A1UGuosc2FLoyKjsN1VlZKLUTSN9B3Nc6BdjbCTP + RSOAh+R9D4lwHyyUtqiUF5XS7vqvCOCJajeGy5wYKJZ9Spzlms6Myvp4qZ08Z3vO9Jr5wbFcXnm8k0+e + 6eNv70h//kRFAPcgklvKRilrpa4C3lVzWBfw92dK+OTXJbzwcDaPHQni6gEXDoiRMieGzmy5C7NyjalS + lZJ6A72Zl4rSWUVf4XpGquwZlWc7KuVktZNGAO9t0nNQjEdF/u4Tgb273pa9Lc4c3OihRXqfGY3lyskU + rprJ5MqJdM4NpXHtcBrXDGVwreDqfoV0rhlI4NZxGRuzQfx4Zzh/PhHP2zdm8PFd6Xz+cAZfPJ7JFz/O + 5rMf5wjy+fInxXz+H8W8+2i+yMB0/nRTJk8ez+ORXfnct72IuxbKuWG8gjODVRzurWFPbwM7hzvYNr6J + +Ylu5ia3MD++WYsInh/vE/QzN9bL9PBWRnu3MLS5m80tneL0tVBdWEthZhHFBYVs6W5nbrqfHYv97Jrb + wl7BgYVeji4NcXzHJCd2zHJkcYrDS9McnB9n/9wIB2ZHLZiR9ZlJ9sxNsHNhmiXZd0Glfr5AAE8xtTjN + 1PwUc/NzzC0uCbYxv7Sd2QVFBs8xPHoRAdzbx3jfAFNbpf29XcxvqWC4MU5L876lzEvkpA9jTd5MNnsx + 3WJivNlb+0GhR8ZmZ5kPTUUq5bOZkkxvirO8qcgPor4kwgJFAAsaisNoLQ+jqcSPxgJ32sqMdNV4s7kx + kN72aDqbIqku8Scvy4yadylYjD4/ceLNvl64G91x1Svy1w2dmxiuZpVuKR41r5lKqZeckk9aejE5OeVk + ZZWQkVVKRnYp2bnl5BdVU9/cRXtnr0YEt7b3UFnRRFFhJTnZRWRnFZCVmUduTqGW/lmlHlwhfL8igFX5 + FUpl/StULaNStlXIvhVUlpVRWVpMRUkBZQVZFOWkkJsRR2ZKFGnxIWQkhJKZHEKWhmBy0sRBEyctJ9Vf + mx83XRz2DHHuswQZgc5k+DuQIc68RgL72pDos4HUQGvyRX9WJHhSk+pDebwXOSr6V4zjjFDdchSw0UIA + x5k1Ejg70Zscleo50ZeylECqs4JpyAunuTCCuvxgqtS7y/KitTiQ7spwBupiGayNoj3HSEuGjtYMV5rT + nWgTdIvhOlTmzURVAH05YoRH2dIQaUdrmpGGXH+qcoOoENQoArgymc11mWysSKIiLYDSBB9acyPYVBon + pfSJjCC68iIYVKRveTxTZbHMlkYzIW0aTBPjtiSAc72ZPLirhh8fa+e7u6u5ZmsixzbGsb8zWXRIOkMt + 2XQ35NJUk01VZbo4uGkaEVxVlUVldTbllZmUq201OZRXZ1FWnUlpVSbFlRkUV+dQ2lBIZUsJVW3lFDcp + AjiLdDkmpTyTxNJM4oszBNnEF2QSmhaHT2wo+mAzjt7uOJj0OJjdsfV0wd7DGVt3O6zdbFjnuo61jmvY + 4LwOa721BitXK6ycN2gksJYKWn3w0Ehfd20uYIM4UW7e4tx7uGpz/tq42Mr+FgLYxtVWI4BtZX2FAHY1 + KtLKQgIbvNXHFNevCOBwH8Jjg0hMjyEhPZqMgmRqWsqZ2znDrffezHd/9Ci3fetWjp65gr1X7GdqaYbG + Ta1kluSQVpylkcCZFXnLBHAJudWl/38QwJa5gLUU0F8jgGUs1lWTkpdBZEI4oVFqbm9PgkLciY0xkZcT + Sl11PPVV0dSUBFNdEEBhiicJgbaEe1xOlNcaokxrifNeT0qgHZlij2YJ0gIsBHBGkJ2MC3sKo50oS3Sl + NtNIf0MYiz0WAnipJ5qFriDR5SZ2dHpzZCCIk2OibyYCuHoumBu2B3PNvDenp905Na3nGrEvz+/x4ab9 + fpzfH8j5A+Fcv09FAYdz5UI4J6fC2T8QZkkB3RbB1ppwqjL8SAx0J8xkIDY4hOToBJJiEkiNTSA9LpbC + 9CTpu+XsGO3m9O4Jzu4d01Iin1Fz8O4c4bQiexUJK1DRuFdsG+ToQj9H56WcG+Tw3AA7R7oY66qhV/ru + WGc1B+b6uOboPDed3Mn54zs4f2w7569Y4Lw2d/CsQEX6qjTL01ok7w1HLNG/N59alP3nufbwLOf2TXJy + 1xjHRCcpAvismj/4kBx3TM3NO8WNJxVhPMutp+e57cwCt5+Z55bTc3IOCxF843HLvjccm+L6K+Q6iji+ + YpabrpDt0obrj6jU1GNcf9By/fMCFX18Xm3XCOAFDRfP/2shgtU8wKqNk5zZM8SxRRUB3K+ld1aE8hlF + 8u5Qz6qX49t6/wcBfGaXbNvZx+6pNkZ7KqirTCQlxYcA8Wd0hjXoPdbj5mkhgFV0r5uHg4UEXiaA3b3s + NOJXlWq7q8FK9rHGxW0tLu7rMIi9u0IAK2hpn4Oc8V6e+9eskb8OePqp6F9bPMx2ePk6CKRe4KnIX5OF + AFaEsHGF/NVgi7vZBk/RBYq8/b8ngFW9tEH0xAr+JQEs9Sr6NzxKZInUq/n8FPxED8VIXY3I9PGBRrF/ + OmhryCRDfLwgPxuNADbJePQWnyAgxJ5g8e8UQqJ1GsJi3bT0lrFJ4gummchKN5OfYqYo0SR2t0n0mOig + OG8q48SmENTFmKkO1lFiXEuF4XI2+axnXnTfSRnPNyfreCDNlScy7fhRxnp+lnGZlt7rTzlreDpnHc/m + WfF8njUv5VhrBPAbigTOUtG9threugDZlryBl+PW8VzkZTwbfhkvRq/h1fgNvJlio5HDH+U58Xmxji8r + 3fmy2ouPxVZ/V6VZvogA/lXsJTwVvYofx0uZsZZfF9nz5xp3Xt8cwkcj8Xwynsi7Yv+/0Gri18V2/Cxz + Db/IXsd/V+p5Xmz9FyoFKwRwwmp+GXMJf0xZz0u5LrxeaOCtUk/eqzALvPig3PMCFAH8SaU3n1Wa+FD8 + iHeq3HlNzvVipfiq5T78V0Uwj1dFcl99HOcbkjnRkMGh5kL2t1dZCGCxLzUC+OA+ZlUEcE4BqWr+39BY + 8ecjiQq3EMBhERby9WJy9V8hXGyzCA2xy1hZt0Bt/1cIC7UQwAX5JTTUt9Da2kFtbQNpqZlERcURFhZF + aEgk6se/r0MRuYr8TbzQhhA51woubtu/giJ9LyAsSY5JICREzqEhQWzN5G8gSSDX+jf46th/A3X+ixAW + Jm3/d5A2hV6EEHWf8oxCL0JYZMrXEB6VpCEiJlFDpCwrRMcma7hADP8PJMr2eOLj40lJTqCsKJuNTeVi + oxfR25jDUGsGs7157J8u4YrFCk7sruXcgRbBRo5vb2XvVD3TW8uoL4wmK8GXyGADXh72Yrdbi50iMtNH + h4e/mpPT8rOa5Yc1N9zMLqi5Pi3pX79KB6vSQnvJdoOvDoOaLzhA6lTkkIoqivImLD6QyKQwwpMiSchO + FvutnkHxiw6dO8u9jz3Gd578Kefve4CFA0dp2NRPVnk9GSVVZJfWkCN2fK5AEcB54iPkaxG/iuhVBLCq + r6OgpN6yLHW5BZVaGue8lZTQRWq5UosUziwoJyO/UiDLUmbmSpkjNlJemYbsfEtEsfJFCoprtHMWKGK4 + rI4iaVNJVROl1U2W9M+C4ooGCssVGjUUlTdRXCb7lDVSVlYvfkYtao7sErG/iqvyKajIIDUzmMQY5TfY + 0hTmyFiUO3sTfTieIrZzaghnxdc4Eu/PzlhvxsQX6Ba/oU7kcGGMC9mRDlLqaBDfoCstiN60ELYk+bMp + 0czGGAO9sQbGYzxYinTjqOiz84Fu3BNo5P4wMw9H+fJITAAPSfmtcC/uEDvnRh8XzqsoYE9H7vF05jGz + gZ/7mvmdvz9/DQrmL/6B/NnXn9+aRTZ5efFTTw9+omAyaviZIoS9PPiBt5Hv+Xhwv4eee4067jO6ca+n + gdvEjjovfeNKacPZUA+ujfLkpggv7ha78cFgDx4VPCbbnpD+90Sgnu/6OvOQyUbOs577Dev4jwBHfiH+ + 0s9EZ30v1sitwQ5cK7r5tPhaBwN17JJzTUf60CPnqfN3J9PsTKyPK6H+egLkfAFBei0SVsFXli1z4yqI + flXZPUJEjwp8g0Rnik0RIGWg2KLx8iwVAdxem0qz+DlFmQHER+sJDrYjOMyBwDB7/MPsCAh3EjgTGCH6 + XXS2r3YuR0yBDgKxEaT9Ch5iSyiYQ/REJPmRWZZIWUs+GaWJWuSvIoANcl8qElgRwUZpm7vs7y62iZuf + k2x31GCUdY8AV4FeltVYU3N1O8q4c5JxKcer6SiWp6RQ9omPv1xTdL3Zf7346OuIS3KSMSH6uzpA+q4v + CSnOBARb4Sk2lMFdbBaD+CdGPR4eMv4FRpOMd4HKpmIUe0rvKX6Q9BUNHo4W4snDkp5WbxS468Tv1+Gi + d9HgtAKdgvhJritwEThh7+KwDDvsncVnEtg62WDnZIu9qx2OekWaOmrpk10UEexugd6g0+Am/U1BzYu6 + AhXh6Cm+noLJrCIlPTTCV5VeXgY8vESWKZJblrUoX4FR+rG7h2XdtJzW2UORv15GDMvRvwqK/FWEsIen + Ioy98Pb3FfjJObzlOXmKPWlA7+Uuz0feqSwbVghgabujzlGLAlaEuIe0yyfQB5X+OSE5Wt5DBIkpwaSl + B5GTGyryLJySylB5T2ZKy10pKraltHg91WXrqK/cQEuNDZsadGxtNrOl0ZcOsS0UAdyUI35/pgstmY50 + ZjpogSfzpS4crDVwVZuJmzf7cEeXiVtb9NzS6MxNtc7cUOXIVSW2nCkQWy1vvUYAH8tfx4lCG06IXXRF + gQ0HsjewK2sdO/Ns2FVkx/ZiB7YVOTKdZctEuiKArZYJYGuGU6zpS1zP1oQ1bIq7lN6EtVK3nvEUK2bT + bFhIs2WX2Gn7pX375JhDiVYi++RaKrpXlUnWGo5L/TGx607IOc+mO3JlpjPnMhw4k2rHmXRbTqWqfddz + OnHDMgHsxANlXjwiNtZdue5cGbme/Z6ruMJvFdeLjXh/hj1PVnnyS7EJf1th5DdFrlr0768y7PhDrj1/ + KXDh2XIdL1S4iH3nxAvVNhYCuHEdb7Zu0FLKfqjI31Yr3q5bw5s1l/NWzdp/SwBrcwFr5K+zRqZ92unK + 54pga3fm/WYHXml04KnSDdycvoaFyDU0+a0j09uBMC+RJyJPAwPMIo/MGgm8QgAbTTI2VSSw9ClPL8uy + qrtADl/0I4QG6X9quxqnLm4OGgGsk9LNS2SIj2Xubk2Xi972FLlp8naVc7tgkjZ4GBxwdRefystB+qrI + PtEZwWEyjvxcNajvfvn5SYwOdbJv5wSbWstIijQRJT5AXKieGJFjsSrIIdbdQgCnGDUCuFURwOludKjo + 2Thb2uKtRZfZs0X6RG++Pf3S3/oLrBgstGKoWPpTiY3AnpFSQZEtQ4XWqAhhCwHsyGy5EwtVOuarVghg + HbMlzsyUODFVooKanJmQfjyab81YrvTD/PUaAbxU4czeGjcO1Bg4WGPkYLVAfIYDZW7sF/9hT7ELu+T4 + nSWubCuQc+bomcp2Zybfi/kSP+aKfZko8GQwU8cW6ZM9gsFsV8YL9HINHcN5LvRJX98Ut4atyeuZKtTJ + Nb1YKPVgWO61O+YyNooP0pOyjr50K/oyrBiQ8TSUY89YgWq7nrF8ZwYy5RwJl7MxahXdcZcwkLKasUwr + FvPsuEJkw5Vyz9fL/dyWt4GHctbzpDyfP1Q68lKNC+/WSr9TJLAigOvs+bTegY8bpF/WSx9tkL7aYMNH + 0k8/aXXQ+uVnGlw0fNrmyActttK/1/FG1eW8XnmZ9Pk1vNMofb1JfK1GO+nvjrzf5Cp93VUrP2hy4yNF + Ard78HGzO+/W2F8ggN9eIYBr7TUC+DVFBNfb85q0SSOBpV2vy/orcsyLFbY8X2LNc2p6oCJrnim15r9l + rDwnY/KNVmfe7nLl7U2CLmfe26zjo63ufNpv4G8jZv456auRup8PG/igR+0j12u34a1OCwGsIn7/Nmri + 7yMmvhyTctyHf057w4wPzAXAQiAsBsFSiEDKxQC+nBGfbdrMF3N+/F22X8BsIF9O+PLZkBfv9xl5YYsb + Tw/58uz2JN5UEcBFaq7FeFdSwh2JE2c9wiyOuc4Kg80a3K3WYrazIVTvTKIM2sJgE+1xwXRFB9AmBk2z + GAUt5nW0el3C5rDLpSM688BCAv95Joe/3JTH0zfl8/Q1FfxoTw7nNgej8opnBFxGkOfleBrlGqLUTV4W + AlhF/EaFuxIT5qpFAWsEsBgq4WJQqfWYSL1m9CTGeRAfZSAh2oI4qY8N1xEToQhgZ5IS9KSnGsjKNFKY + 4UajDOSeDB0zeToOFDtyc5ML3+818IcJT56dMvLivBfPLZh4ekEc3EVPfrdo4Jfzbvx8VseTs3oeG3fi + /n57UUzWnOu05kCLFZNVa+gvX8OwdIoJ6UTTbV7Mdfgx0+bPxnxXikWYZwasojTsMoaynGQgOLMvX5RC + oR0P1Bn4aatcSxTd8wNm/nvMlZf2evHhjbH88/sl8MdmeGMr4uXD52OCUf75aR9//7Cbz99p5Is3Kvn8 + tUI+fSmHj5/L5NOns/n0zzl8+Oss3nkyg7/cE8r3jzpz1/ilXNu+inO1l3Cm7FJOFl7KsSwpMy/jahEw + t4tw+VajBw93+vG9/gi+NxzHg70x3N0Ty02boriyJZCDFQZ25NtwtNaN2wbDeHguifNbfNlXsoH5jFXM + Z17CnrLVXLPFg1tGg7iyx5ODMih3tTiy1OLCnCjwqRo1N6sLM/UinGSwT4tCX2jWs1/u/2h/GFcMxrGj + M5L+Uj/qkvQkmdcS6baGSKMtUZ7yTsWIT/HzIs3PSLoY3wmGy4l3u4Qcn0toiFvHcJmR2XpvlloD2NcZ + yt62IOZFgc6UurNU48OB9jCObozk2MZwDjX7s7fWg4Ny3yc6fLhqSyDnh0I4PxLMTaOhcg+h3DgUwHV9 + PpwSRbi7fgOLNavZ2SrvfasLJ2UgXrUYxrU7ojgzH87hUT8OyGA6MBrAgZFA9g8HsmOrmYk2F7or1tGY + tYrK+FW0ZV/OULUDsyKENAJYntGeLhd5Bnr2dLuxXRTvnBwz1eTExNcIYGs68sWYylsnhtMaWnPXMVSj + Z7LRk8U2H3ZtDmH7phBZDmRWjKwJURCTlQam5L0pgndKFMdMoxcTsv9orTt9oox6i0XRiFCerBDhLQpk + OM9JhLoTfWLsDOdaCOCBQmcGxXgaEMU0Uu7CuCiv2QYP5pvMGgk8LcbaqAj1ATHc+mWfIVFkIyUqLYYN + S/WOXD0cwFNXlvDWj3v47MUh/v7e4FcE8GffJIALNAL4n8+U8NmvynjlkXzpv6FcN6DjYJM8s2IbUUwy + zmTsjBfaShvXsTX9UjalrqJPjMDhKlt5XvaMC2bqZKwJ9jbLsa0y3puc2VVjy85qa/bIsz20UZy8oTCu + mojl2ukUrp9O59rhJI3ovXEwkZsGErllIIkbe2W9N55bByL51mQw35n356k9wTxzOoYPb8/g8/vS+fI7 + afzt8XS++EEan/0gQ5DNlz/I4/PHcnn/oSxevTORZ86n8LvTeTx1uJAfHCrjiQN13LtQxfmpaq4cq+OK + 0Ub2jbayfbydhYlOFqa6WZzczLaJXm1e4IWJQebHB5gdHWByoJ+x3n56O3rY2NhJXak48rll5OXm09rW + xOhYL4uLQ2xfGGSXYM+2EQ7tmOLorkXBEge2zbN32xy756fZNTuuYefMGDunxtkxOc7i1BgLM5PML80y + t3OeGcHUjtkL0b9Ts1PMzs8xv7jEwrbtLC7t0Mq5hXnGJsYZGBhYJoBVOweY6OljuqeTqU3lDNYnsEkM + ku5SL/qrvBiqk/5Yb2C8wchwvSd9NZ5sknHcXuxFvRgvlTleFGeZKMz2piw/gJqSMGoFNYWh1BWF01ga + Rnt1JO1VwbSUimNRbqSzxkxXvR+bm8PY3BKjpYEuLQwWXRBMQkIo0bGhhIYHYxZHyNNkFvjKchBBwbHE + xGSQnFIgzk0JmZllZGWXk5NTRVZWORmyrJCdqz7cVFFS3kBlTSulFY3aR5uszCLZT6CVhVrEycWpn79O + /K6UtRdQWn4xVojgZdK4oopqhfIKqspKqSotoqIol9L8LHk26eSkxZOTEitlFLnp0eSmRpCXHkl+RrjU + BZMZ701mqDtZga7kKPg7kyvOep4439m+DmT52JNltibf344K0aONKp1bZhANSb4UhrqKDnMkO0xPVqRB + m+s3M9qTLG3eYRUB7E1ukg+FSX6UpvhTnRVEc0EEbcVRNBcFU5frTW2OSSN/BxtiRU8mMt4YS7e8384s + PRsznOlIVymgxCAtM7PUGMqe1mimS1REgQMdcXZsyvSgoyCQpoIwmgrDaZFzb6lJYWttCp1l0WKwe2tp + 5jblh4tci6ZL2t6R6it2RihTZXEsVsazvSKWpaIwpjO9GUlwZWeBt+iwZB7bXs6vj7bwX3vruH8gjRs3 + JXBuUzJXbMkSmZrHeFseXbXp1JcnUVEST01ZCnWVsl6bRYOgsT6HJkFddQZ1NZnUSFkh2yuqs6hrLqKp + s4KWzdVUtZeSX5tDlhYBnEFsQQqReclE5aURLQhOicYrKhBnfw9sxOmx83TF3kuHrSJ/PRyxcbfDSiOA + N7DacS3rHNexQZY3uGxgvfN61su6jYuVlgpaZ3K1pH0O8NDg4echjr5OS/2syF5F/K5EAGuls83XCGAX + g+UDipuKJhYnSxHBFxPAoWL3RSeGEZUUSlJmHCXV+Wwd7ubqG8/xvR89yv2P3sfNd93CjXfexImrTzAw + NURBdTGZpbnkVOSTXVWwTAAXk1OlyF9ZrlTkr0oFLfv9HxPAxcsEcMn/IIBLGupJL8gjOimGsJhgAkNN + BIUYiY2V/poTRkVpNBUiRwozzNJ/3cmIdiHaZx1BYlOEuF1KmOEyor3WkuBrQ5rYwxnBTqTLOEgPkrES + bEeumn4i1omKZFfqswwMNISxrSeZPYOp7OqLY2dPOEud/uzeEiDyPYyTk2GcmgjizHQgV80HckYM9WNj + 7hwZceX4tJ6rtpu4bo8v1+21EMDnD0Rx/d4ortkeydm5aA4uE8DjLSLXKkMoS/Ym3k9PmNhF8aERpMer + 9JgpGgGcGhNNfkqcyMYi5gY6OLY0zMmdI5zYqebCHeTUdgvpe3yxn+MLfRxdHODIwgCH53q1qN8DU1s1 + LPS10tdcInI1nY6KTOb6Wji7f4pbzuzm5lO7uOnEDm0+3fPH5gUqAldF4k5bCOCjU9qcuiqt8vmTC1x3 + bJarDk1zZt+4hQDeIW3aNaKtq/rrFal7Yorzp2a46eSsRvreemae28/Nc9vZOcGCtn7LKbmObL/xhJz3 + uJz/xDQ3H5f9j88tp5qe5IYDE9x4WOqX00hr5LBgpZ1aW4+ruYAXNVgigtXyghZlrNJLn9zRzyl5Vmfk + mZ3dLe2U0kIA9/1LAlhFCp/aPcj+uU4m+2toqE4hLVXN06bSm13+PwhgvVGlgrYQwAaT+uHCkhraQv6q + 1M+KALaR/axkLFprH0pVusQV8tc3yEUjflXUr8nPQv5qBPBy+meV1tlT5LqH9/I8vyZHVNSvhQC2XO8r + 2GGQevUB2DvYMv/v/w0BvLLt/4sA9pH64HAVAeyGjyKbfWzxEfh6i40f4UZVeSLDvXVMDDXTUJVCsvh4 + AT5WmGUcenqsxuS9Dr8gW5FBKqpJEcArkcCKBNYTleBGYoqRjFQvCtPMlKaaqUnzpT7Vn4bUAJpSA2lN + C6EjJZhm0WHVcu1K4xraTesYMa9mb8BazkXacFeSPd9Ns+IHaWt5Ss3BK3hW/J9Xiux5VfBKgQOv5dnz + WrYdr2ZY80rqBl5LXq/h1eQNFiSt4+W4NTwffTlPh13C0yGX8Gz4pbwYuYaXY9fweuI63km15sMcBz4t + 0fPFRQTwawWOPJdpw19T1msRwD+Pv4T/TFvDr8X+/av4jS9u9OOD0Tj+tpDF35fE/5tM4rWeYP5U56aR + wL8vdeT5Og9ervfipRoPni/V8dcce36rCODoVfwu7nKeybDj5RwX3igy8LbYTm8XS1nkzjtSqtTPH5Up + EtibL6rMfFrlyXviU7wheKHSiz+V+/CziiC+WxXOvbVxXFeXxFHRx/vqc9nXWvE1Aviag/tZEJuwOr+Y + 1OgkooOjCA0M/wYBHENoWKxAkaux/wOhIbHi/68gehkX1wlC4y5Akb4WxBMm51RzBhcXltHW2kn3pi00 + NjRbCOBIuV5IBMFB4Vgyv8Rr+IoAtkC165ttW6n7d1Ck78UICo4XxC0jgZDgxG9A1cX/W3x17P8Z/iVJ + vIxQRRJrxG8SwWEJBMlzCpE2B1+Ele0rCItMXIY8H0F4ZJKGlTmTV4jh/4l42R6rEcBJiXEU5KTSVF3A + xppceurTGWhOY3JzBjuHczgwU8iRpTJO7ann3IFWju9oYtd4JcMbcyhJ9yc+RE+AyR6961ocxAZyENvH + Uewd9dObi4cDrhdBretXfmITqIhADWadyFsXXBVBJNv1ZrFxfFxF9qn0tB74R/gQJPZNkPgJsekJVLU2 + MLa4wPFrruWB//gBj//nL7jzO4+x/8zVdA1PUtLYQU5lPYU1TRQpVDVQVFFPUUktRcXVFBarlM21FIu/ + UFQhdomah7e8juKSGoqLqrR+uYLCwlLxGcopKFQpoCvJLqohq7BKI4BTs0pIzSwmPVsgfkZGtthLeWUX + 0krnKqio41JFBNdSWC5tkHYUyrUUFClcVGFpg8JKJHCpLF8ggNWPqBUllIt9ViY2al52KJlx7uID2NEd + 5si2aAMnxM6/KiWIG5KDuSYhkOPRPuyJMjEWbaQrxo06kcnF4Q7khdhQFi62vdhbA8lBjKeEMpIYwECc + ia1RYi+JDhgL1zMXJH666K1z3k7c6qPj7kAPHgo38x15Bw9H+XGfLN8d7MGtYuvc6u3KXfLu7hdb9nGz + Bz/z9eHX/v78ISiY3/oH8GtfP35uMvGklyc/8vTQ8GNFAHsZLamgBT/w8eQxX0/uM+q4y82FO3U6bnLT + cVbWj4rdvM/XhT0BLhwSPXgqyJUbA/Tc6a/j/kA3HgrU83CwXkpXvuVryx3Gtdyku5TzTpdwv9c6fhil + 56lkMz+Il/OLrrvd34GbfJ24xt+NcxG+7I/0YyLQk3YfN3Klf8aLTg7xdcbP30XsBNG1cl4F9aOXSXw0 + k5+z6HTRyyqrR4CtBpOfNd4qK4aUasq8uCg3irKCNQK4qTyeggw/YhTRG2iDf7CN2OwW+Mv7UySwv9it + vsFKR9vJNeS8ci6V+cOoInsVuSvvQsE33EBCVhjFDdk0dEu/qskgSN6du9gbivRdIYANsqyX/XVinyi4 + msXeEei9HXHzUZDt8m7dxA7Rq3qxS9xMdpotokHW1Q9rZl87vETXe/qswSdgNTEJ4nPme1JS6UdhmfcF + AtjoIXaRXuwid0fc3WVsG8U/EbjLeNagyF/1g4jYVytwFt9JpZTVucuYl9JVSldF/OqccXJ10uDg6miB + iyy7OGPnvAInbJ0csLK30WDtaKXByn6Dhg1267F2EDmkRc06ahHCKipYtwy9wfVrWCGhV+AufVmRwR6e + iihzx8skfpuKFlZksfRJDQbZLv1YkbwrKZ4tkcCWqF9Vt4IVAljtq7YZlwlgHxkn3jJGvHx8Rf55im9n + QOfhhqtRzW3sJjLSQgC7erhq5K9GAEt7Pc1G/AJ9iE2IIkl81KSUCJJSLQRwdm4w+UWhlJSLPyJ2QUmZ + i8gwG0oK1lFZspbqsrXUVWygrdqBTXXq24wXLSUGWgrclwlgZ1oyHOhMs2NY7KClUleuqDVwfbs3t3R6 + c2e7J3c26bi93plbKh25ocyWqwqtOJO3gZN56ziWs5YT+es1AvhUsT3HCuw4kGPNnpwN7C6wZY/U7Sh2 + YLHQgaksW8bTbRkR22yFAB5KsaZXI4BX0xV7KT3xl8u2tSKrNrCQKcdmOrA/24mj2c4cSbPnhOBchiNX + ZjlzVradU+vp9pyV9p9OtuWMrF8t96RwZbqFAD4n1zyTasPpFCvOyfWuzrDlplwnHqgw8UiVD3fluYvN + uZ69Hqs45reKm2PX851cZ37Z4Mufmvz573of/lph5JeZtvxKjrUQwGruUT0vVel4qdqVl2odLARw/Rre + bF7Hex0q+tGKdxrWauTv/0YAr5DAF88BrAjgT6VUkcHvNFrzYp0dPy2z4ZbM9SzGrKMlYD3Zvo5E+egJ + DfAS+8mHwCBv6WMWAliRve7Lkb0e0r8VAbwSEWxSUcIqLfQyVubEVlDrnupHBDlORQJr6aG1bxEyVkRX + a98iZHy7KZ/JU2AQ30URvzob6asq65EToeEm4uIDiYnxlTYZCAgyiv3hS0lRGuNDXezfMcHmtnJSYryJ + ER8nIUJPQpiLhoxlArgixUB9uoHmdHc60t1oS3amOc6aljgrNqaILsywpzfXgT7pY3351gxoBLAif6Uf + lykC2JGRIjstQnhUfWcvsWdS6iwEsF4jgTVU6DUCeEpF/RY5MV7oyFi++rZtzUj2esbylgngShf2id1/ + QGz6w3VeHKr15HC1B0eqvDgqfsPBSg/2VhjYWaZnW4ErczK2ZrP1LOZ7sKPUT8NcsRfj0tcGs5wYzHRk + PF+uXWrQMFnsJtdz1MjfwQwbFkrc2FVlYke5BxPZDvTGr2ZzzKX0y7gYSpf7VJC+OJZtz2yRK4tlRuaL + 9Nq+A4lr6Ym8hKHoS5hKWs1S2gYOiJ90bame28W3uafYiYdknP5Q8Bt5Hs/U6HitTsf7tS58VufEp4oA + rrEVX8iGDzVY8371Bt6vs+KjeqlvtOHTFjs+a7G/gE+bpR83buDtmtW8UbGK18tX8UbVpbxVu0aLfH+7 + dgPv1Nrxbr0T7zaqdNMu0v91fNDspuHDRj3vVl9EAFetpH924I2Lo35XCGC1Lud7udKWF0o28FzBep4r + tOaFYlteKpc6qX+5zpG32nW8tdGVN2QsvdGhyGC57ma53lYDnw568bdxb/4x4cMXo55ayuZ3NzvzVqc9 + b3c6XCCA/z5q5p9j3vx93MzfZN9/TMsxM96WyN/FAFgKhh0hsD2Yfy4F8uWCL1/M+fDltkD+sV3qd4YK + wmRbOP+cD5Hj/fl01IdX+z15bjyQF/ek8642B3CWt3R+dy0FZJy/HRFmUcrO69BZX4beZo0s2xDp5UJm + kCd1MX70ihM9LMZgnxhxnd7raTVcTov7Kjp9VzGVupZrN/vw0PYYfnIsjZ+fyOTJ/encPxHLkRZvusT5 + TPa9FH9x6o1Gy0cRk9cGgnytiQhxIjZCR2y4G9EyQCPEEAsLdCQsyIGwYGciFTEsCA91kX1diJbrx8og + jpFjolcI4GhFAOtITdOTlSkGbIYYpmludKXrGcvRsTNfBLe8pIc2uvCfA278fljHnybd+cOUgd9Ou/Or + GXd+PuPGj6dd+f6kM48JHhyy5a6t1tzYLYK824bDnXZsa7NjUgToZIsz0+0G5ju82NbhzVKbN4PFSmhc + RmXoKtpiL2M2XwZxqRsnK3RcX+7Cg3Xu/LTNi6e3+PHikJlnFQG8W5zv68L5x3fz4Nd18MJGeGcrfNjH + P97fypfvdPLFm6188ko1n75UzCcv5vHJc5l8/HQGn/4lg49/m8YHP0/hjScS+O2NZh7fZ8N9E5dIuy/n + jo613C5K4VYR6LfW2nB7jR1317nwQJM7j0i7H+/x44cjYfx4MponxiJ5eCSCewdCubXHl2vajZxtceV8 + t6e8wzC+txDHHb0+HK+yYnfeKrbnrGJf2SVc0y3KetSP66RzHesUw77Nke0tTszJ4JmSATZT48K2JhFU + 7R7s2ejJvk1eHN7qw7HBYE4MxbK3O5IRNQ9wkitZfuuJ81hHvJc9ieK4pfi5kRNqpDjakzIxtDPNl5Bl + WkV54CV0xK1mukTPTjEwDjX6cqIjhNMbQ7mi2V+EpZmjDX5cvSma67bEce2WKK7sCuZkmw8nWz0512Hi + 2m5fbhwI5JbhIG4fC+GOsVBuGw7glgFfrttq5GSnIwdaN3Coy4aTg3qumfPl+u1hXLczgtOzIRyVez40 + 7MvhsUAOjwZxaCSQ3X1mpjt09Mozas+9jKbUS7RU4WN1zhoBPNcsDtUyAbxvi549IhiWui4mgF0YrXGi + v8KRblECHaJsWvKsaMxZR2P2WvpFKYxJH5pp8mKh3Zf5Vl85py+zDd7MqDTNNUZmKmW79LfJSlEyYihM + 1bsx3eCmRWKPVToxLeeYqXBlrEjN9evIUI4ohxxnhvN1orxcNAK4v9jRQu4qArhalEaDJ4syhhXmZFnN + +zskxkh/sYv0eSdRhKIAi63Z2eTCzTMR/PKGKt76qfTdV0b4x4fD8Ok3CODPlgng9wrhjSL47yI+eaqI + V+7L4T8OBHFNjzyjmg3MyLObyLViNHcDo/IcRnLXSVvX0pezWpsLeLTKVp6ZA9ONomQFO0TQ75XnfLDV + lf2yvFOUyU7ZZ0+DE4c6jFw5HM7VIo+um0zk+rFE6bMx3NAXza0DsdzRH83dfZHc2RvG3YIHhkJ4dDaA + H27355f7A3nudCQf35HKF/en8uV3UvjbYyl88UQynz2RKkjny8ez+Pw7Mh7vT+PtW+N49foEnj+bzl9O + 5fL7k6X8+mQtT+yr4t6lCm5brOWa+UaOTDawa7yBpYkWliY7BVtkuZeFsQHmx4aYHR1ibmyE6eERJgZG + 6O/so6upm/ryZkryK8jNK6Cqvpqe/s1Mz42wuDDB9sVJdm6bZt/OBQ7t3inYxb4d29m1tMiOhXmWZqdY + VJieZH5yjLmJUabHh5meGmdmYYbZ7fNMb59jctsM4wtTTMwoAnhazj/L/MI2Fhe3s21pB0s7djG/tI3p + 2VmGh4cZ6OtnpH9II4BHe3oZ625nuL2EvvpEukqD2FRqYmulJ4O1HozU6RmVfjkkfbm32kiXGDItRQZq + 8gyU53hQnONFYZ43pQV+VBSHUCWoLgyhVhwPjQCuiaCzVhHB3nRUecqyIoAD2NQYSk9rPJ1N8dSUx1BU + kEhOdgopqQnEJcQSHqnm+Y2SMk6LZLBE/RaKvignO6eanJwacnNrpKwmK7uKDEFmThXZedXimKpSnnmB + qislNaOQ9PQCMjOL5fgSOb6EwoIKSopVBG8tKr1aRbkqv75crn14saC0rI5S2VaqUroJyjSov/Jl/4oa + airrqJZSEcE1FZXUlJVQpSKCi4oozc+hKCuNgsxkCrIEmYlSxpOfFUNOehhqbuCcUA9yA93ID9RT6K+j + 2M+VUh8XysVBr1QQZ7zWXxyycCMd8b5syQylPSWA8jCRuwFOFEZ5UJoozni8mu/XRG6CD/nJARQopPpT + LPuWJPtSnRFIW1EkXfLMN5aHybv0oyXfh/66aKbaEplvT2GmMVZkhQ99uQZ6MpzZKs7SdJknuxuCOdYV + y5meZA40hTNdKP0j243RIl+GK2MYqk5luD6d8aZMka05DDck0VkQSE2ijsZEd5FXwUyWRTKUFcBQmg/T + eSHsqYjjaF0yh+X4Pfn+LCa7MROn/hb24t5N8Tw1X8x/76vnv7dX8bPhLL7Tncxdm1JE9hdwdqBE5HOe + 9NNEWkujqSlQ0eexNJdJP67PoretkD7p15ubcumoTqezLpOO2kwaK9NolOXNmyoYGm1leGojHb21VLUV + U1CXR0ZFBtE58YSmxxAq7ykiJ4mg5Ci8IgNw8TNi4+mErYcTNkZF/jpjbXTEyt2O9Xob1rlYsdpxPWsV + nJZLx3UaIWylPoi622sEsFeAJ+Zgb7yDzZgCTRbH3t0RB3Gq7HV22LnYatA+ZjhswNbZCns1/84FAthZ + HC1XcbrUh1M3TP5GfEPMBIb7EhIVQHhssJZeOSY5kqxCud+OOk5ceQWPPPEQ9377Lu5+8C5ZfoT7vnMv + B08e0FJBV7fXU9JQTlFDGdnViuyVMaNQLuOuokigykJtPb28iPSLCOBUWVdIuYAVAliRvwoVpFcqAriB + kiaRiQ0NZBQXEiPjPSw2jMAwbwJDPImN85VxHUGp9NEy6R95qZ4khTsQ47+eMI9LCdSv0hBuuJQEHyvS + Ah1IF2SJ7ZkltmiW2Kcq+jdfEcDRDlQmOtOQpWegPpjFnkT2DqeyZzCBvf1R7NwSxL4+sW0mozg1E8nx + iSCuGPfj8IhZ7AVPDg0Z2D/gyoFRPacWvLhqhy/X7gnh/IEIbjwYyw37YrWfzK6aj+HQYLhGAI+KXOss + CaQk0USsr54wL0/iQ6PJSMogLTGNlNhEkiKjyEmMpaEkh7HNjRyY7ef49mEt7fLx7QMW8ndbP8cW+wT9 + FxHAfeyb3sqeyc3sHu9muqeBzXX5NBQmUpUVTW9zCUe3D3Hr2d3cfuVebj69gxtPbOOGYwvccHzOkob5 + ilmuv2KG648Jlstrpe6qw9OcPTDBaUUA7xnj+O5RTu0d4cyBca48PMV1KsXziWluODXDDVKePzHFzbJ8 + 27k5btewwG1n57n1zBy3nJ7lllOz3HxyWsNtJ2S/E3PcLNe68cgkNx+Z5pYrpF7WFW4+pgjgWc5Le26Q + UuG8tPliAvjmk9tk2UJmq3TRV0u7FPF7aqdKVa3mK7bgKwJ4SEuhfeUyrpb7Or17mEMLm5kZqqe5Lp2M + 9EACxHdRBLBObFk3T+uvSF6jHbplAtjoo0gK9cOFg+xnh/MKASy2rynAVcadSvls1BAYbsA/RL/8kdgJ + k58FXssksKe3hQA2mO3leFs5nw0uGolsJ2PZXsayAx4+lmu5a1D72ePhK+cQOe8dZEkFeQHiZykoYljB + sq7ql7eFOGMOUuTvCgG8vKyIX4ElQlmRwGrZEb8g9SHXGR9fOwsB7L1MAIu/V14SR/+WKoZFVtaUJ5EQ + bcTf2wqz51o8jKvxMq3D298GvxBHgiJdCY6yICjSWSsjY3UkJhlITzZSmOZFRbqZ5twgNuaG0pEdysbM + EDqzwtiUEUJXsh+dsV50yH1sCXZkPEB8mcB1nAzfwG2Jtnwn3Zofpa/nP9NW8/vsDbxSIg59mYvAlTeL + dbxZ4MJr2fa8lLqB5+PXCFbzvPh7avnFOEGsrEdfznORl/NM2GU8E3Ipz4ReyvPhq3kh/FJejrqc1+PW + 8k66DZ8U6fhcfBcLAWwQM9iFF/MceC7Tlr9kbOD3mev5fb4tf6rU8WyLiZc3BfDOaAyfL2Xx9935fLqQ + wdsjMTzb4cOf6ww82+jJq+IPvNnqx6v1Jp4rceXPmTb8LmENv465jN/FXM5fUzbwgvjhr+a58ka+XqDj + dVl+M0/HO4VuvF9s4JNyL76sMvNFjZkPaz15Q3yK5yq9+H25Nz8uD+SRijDuqo7l6uokDlcls6cum70t + 5RoBfG5+nJsO7eHag/vZMTpGW2UtGXEpRAaFExoQIu875hsEsIUEDgmNWcYK2Sr1ITGEB69ghQC+uE4g + +64gTPYPC7FECat5huNikikpKqdns9ilgyM0N7Z8RQAHWwjgcEVIR8r+gohwRQIryLkEFnL6K/LXQgB/ + HYpAvRihYUkXEBKWiCKAAy8gQdZV3VcIlrpg2fbvEBgU97/i/5YADotI1qJ/g+UZBYXIMaFfR7C02QK5 + vopqvhAdLPemUmRHJmoIi1TRwlJ/AbL9GwiPiiYuLp7E+Fiy0xOoLsmkuTyN7ppkBpqTmdyUytJgFgdm + Cji2o4KrDjRxzaE2zuxtFV1UyVBHBuUZ/kQrGadfi7PDpdjbr8bWcS22rpbpL+x0Yr8IHPTWOIqd5ORm + J3aMkqdOAmftI7LlQ7JK0+osMtZB5KLjV0SxryueAXq8AlVqaBM+Yf5EiA6tampgZsdOrrn1dh76wU94 + 7Gf/xbce/yEnbriFiR176Rwao3Fzn9g3w7T1DtKyqZfm9i00NXfR3NQp2ERzi6BtK80dvbR2bKWltZu2 + po2017fSXtvIxrpmQZPYjXXUVdZTV9tMbUM7tc2b5PpdlFa3aoRuSYXYNgLNN5CyvLKRiuomKhVqmsX/ + a6WueSP1zZ3UyPmrGtq+hurGDmoaN0r5FWoapKyV7VWNAvExaiqpry2lXmW6KYimNMVEQ5Qz4+EuHI3x + 4Pokf25ODOK2+ECuj/LjdISJPeEeGpnbGeZCndhGZYE2lPpZUy92U2+4FzOxQWxPDGUxLoCZCE8mwtyZ + FN0yI3piwdeePSYbTnvac6PJhbt9DTwk9ur3Ivz5ruDbYm/eJ+/jW34G7hU79AGTG494uvN9sxdP+vrw + cz8//jMggKf8/XjSx5vvmzx43NPIE4LvKxLYy8hPZPlJD4OGH5k9eUKle3bXc5erjludXLnSyZkDemmL + 0YFJ0ZGTPnYs+NlzQPTpNd7O3Cr+0T2ih78VpOP+YB33ig673dea84bLucplFVc7ruI2w2V8R/TITxK8 + +Em8F9+VfR70ceA+0ev3iO18Z2QgZ8W+3+bvyWaznmKjPUmid0PMDvj6iG4UHa5SIWt6XfVzOdZL+3nL + RoNRbFEFD5/1GlGqsmH4yzNWQS8F4nO1VCVp8wDnZ/gRGeogdoc1vkHW+AQLFAEcYSGA/WSbIn89NeLX + DqOfLUbRxQa5Zw2KBBYERHmRURRPY1clXUOtVDTnEy46013aZhB4ip3gEeSCUXxGvbRTI35NMubknhR0 + 4k8qqG06uUdF/upku85kK+NNrqlsEQWztMFsI/dkg6fcm4f3ankGlxMdLzZ3nvj/Fb4UlnqTlKYT+90a + g4cVOhnjKwTwSkpZ9UOdgrKflG3lbPgKTm5ib7lJG3XSRp2Me52Me1dngYX81QhgFwcN9s5OGmydHC1w + Ft/L0Z61NuJnCdaLr2TlZPGZrB0spY2jNU5yTpUa2sXNGVeN/FWEr4r+XSF/VTSwaqcFlna74C5+mYUo + 02tQaa1VaTTqMchx7upYOZ+7tr4cRewp+5g9cJdxoKay0rmp56CiJy3kr4JBI38NUnrIc1YEcIDYToHy + nP0wyLqbjAW97KdTx3mqtNh6gZrX2FXuQZ6PQF3b28dD9IMv8QmRpKRECSJISVMpoBUBHGQhgMuClglg + HcXFdpQVWVFdZkVN2QZqSzfQVG4r+t+VljJ3GvJdqc921eb/bRC/vynVho5kK0Zy7NlZquNknQc3d/hx + R4c397Z5cF+TG/fV67ijwoEbi224umAD5/LWczJvrZYG+rTgVKHtMgEsYzbHmn2CvcsE8FKhHXN5tkyK + LTWmiKvk9QIrDYNiAykCuCf+MrpiLmFL7CUMJa5hQuq35zixL9eFI7munBCb6JS096osF67NceW6XB3X + yrZrpe7abEGWE1em2XFVhsgLWb4601HW7TmbYsu5NIHc47k0G65Kt+XaTHtuynPhgUozD1X7cKcigKPX + s9+0ipOBq7g9yZrHCvX8ttGfZ9uCeb4pgOeqvfi12G+/zrDhD/Kc/pLvxPMlOo0AfrXGlVfrHHlJzQGs + on0bBU2reav+K/JX4Z2atbxbv453G1bmArbl/X9FAG90saTVbXPS6t+ss0Qz/lye/525IquTbEXO25In + 9nysvxthAZ4EBqrU5SbpX54ayat+aFj5wUGL0Fck8EpK6IvIXwV1jCJ/VWY+H5H73rKsIuJd1M8UenvR + 57Y4arpcZSYTWWJQP8iKX+MuckT9CKK3kjG9Qa4pMivIjaTEYHKzYkiODyJI2ufnrycm1p+KsmwmhrvZ + t31cI4BTY72JCxV/IUpPsiAlWk9mrDuF4juUphioSZW+mupGa6qe1iRHGuOsNRJ4Y4o93RmO9OY60if9 + rb/IhgHpl0PFtpboX40AdmKoyJ5B6XvDhfYMF9kxUay+cVkI4MVqdw2KAJ5Rkb+K/C1wYCzfnlHpq4oA + HtYI4A3MyHm/IoA9OVxn4lCdF4drTByt9eaKel+N49hbYWRHqZ4F8UvmclxYyNGzPd/IrmIzOwXzRR5M + 5unlvI4MZTowIbb+vIzHBTlutszAZL4LQxnWjEv/2i4+yL5qM/uqvFjIc2ZMxsyQ+DcjMi7UGBoXTGTY + MqN+2ih2Y1e5h4xdgxbgOJtixYz4P9sT13FI+vyZLAfO5zrzQImR75UZ+WG5kZ+Xu/G7SjeernHj5QYD + b8r4/rDWmc9qHPm0WvpipS0fVljzQbk175dvEKzXSOCPaqz4WPrjp3VWfNqgIMuCj+vW84FKc14tfV0R + wGWreKPiEt6ovFRwmWA1b1ZZ83aNPe/UOck4cOHdRp2MA1feE7xfJ+tV9rxVYcdbIqu0UhHCtQ68Xucg + 40qlfHbkNSk11NrzWpUdL5da8WLBWp7LWcML+Va8LO/qlTJbXpVzvd9u4N2N7rze5szLTY682CTHyPIb + G/W8vUn8q14jnw2b+PuYD58Pe/JRv573trjwTrcz73Q582GP+ISDKgLYa5kANvHlhGBKMCnHKSJ43geW + Ai3YFsjfF/0vIoD9+YcihvdGCKJgl2BJlhfC+NtsMG+N+vLyTBivHczhw2sbWLW5LIy6LDP5MTqSg+yJ + EqVscrocF6tL0NtfjkkGWrQYQgVhHmxMDmAk3Z95cbBnYl0Y8F3NRvdVtLqtottnFRMJl3Gkzpnzg348 + sC2Oh7cncOdIMGfbVEi6C43xVsR4XYqPYa0odPXnuxhAYgSG+NsRGaIiePXERbgTE6YnQoyMUH8HQkTg + hIrBGCaGVXCAA37e1gSIAaPWFSEcrQhgRRxH64iPcxFB4CKKypWsLD0FmXqq0tzoEAyJ8lnIseNo4Vru + aLDhiS5Hntxsz8/6nXhywIkfDTrxgxEnnhh15tExJx4edeDbo/bc02/FbT0bOL/Ziit77Di2VRTEVh2L + m3TMykud6zSw0OHBUpsnO1s8ZFA50Jd8KVvjL5eBYs2BKgOn6724ocnM7aLkHqo38FS7iad7/Hlp2Jvn + J1x5aYc43+cC+OLBNP7+01L+/oc6/vFiO39/vZMvX23l4+dr+fDZSj747yI+eiaPj5/J4pP/TuPTvwr+ + kMpH/5XIez+O47VHIvn1VWIk77Hi0ZnVfG/Cmu/02fNojyvf7XHjez0GntjiwRObvQQmftDjzU9HAviF + dIj/WojgZwvhfH8mmEfGxPiWTnhnn4G7Bjy4f9SH78yE8Nh8hNR7c02TLUdlsO0vWsUV1Zdxg3TgO8fM + 8t6NnNwsRnW7AztaHJivt2em2oHFOj17280c3RrAicEggSr9ODkczJnhaA5tiWC62o/2VB1l4fZkiJGd + 4utARoCO3FA95fFGWrN86Mj2pDz8cmrCL6Ezfg0jGVbsrXTneL2Jq5r9uKEjhJs6Q7mhPZirm/y4qtGX + W7ujuX1rLLdsjeSmLSFc3+3P1Ru9uLZD3skmEzf1+nLbUAB3j4cIgrlz2I/bB7y5ecCL6+Q9n+q243Sv + PddNGLlJBteNO0K5ZimE45P+HJb3d2DIh0PyDBUODvuzu9fM3Ebpb7V2bCleR7cYLEPlDkw16Jhr1rHQ + 4sw2UbK7N7mwV97Jni16lrpEeC8TwJMimEZEKPZVONNd4kBHoQMt+TY0iGJoyFpDT6k9Q1UuTIhimGn0 + FJiYaRBnS5TEXJ2RbbUG5qulX5Y7MlUuCkgE06ycb7FJz7ZmNxalHdvqpP9WuTJV7CgKSP0V5MJogY4R + MUA08lfQK9sUBlR6ZznfTIMn21p9NKgo4IlaT4bl2fcXu2qRwoNiAI4UW7GnVc/dMu5/c2sdbzzVw99e + G+OfKpr9s0HBFv75WYeFAP68Fj6thPeL4c1i/vHnAt57PJOnb07kO9tMnN1ozfbSS5kpWCNKypIWY1yM + vqkia6ZK1H1ZMykKY1IE85QIWo1Yl3J3qyjNZhcOSqkI4B1VtuyscmBPg9S1e3J2MIyrRqK4ZiSGqwci + uXZrODf2hnNHfwT39odxf28QD/T6850Bf/5jPJCfLPnzX3sD+eORIF44G86HtyXw+bcS+eLhJL78bhKf + f08hmc+/m8KXj6bxxbdT+PzeRD68OYZ3r4nmzbNxvHImhRfP5PH0mTL+61gFj+0v4/69Vdy2u54z87Xs + n6hm53g9Oyba2a4I4LGtzI30MTPcz9TwMDMjY0yPjDMxMMbWjl466ruoKW2gSP0Jnl9IUUUZ7d0bGZ0Y + Zm5hhm2Lc2xfWmDXziX279kj2M2e3bvYsX2JpcUFFuZmmZudYXZ6mpnJcaYnRpkYH2Z8ckyL9p3eNsfU + tlkm5qcYm5tidHqSSdl/SjA/v8jigpxnaQc7du1mcft2FrZtY3JigtEhOcfgKOP9Q4z0bGWoq42+1mK2 + 1CXTVR7GpjIftlaZNAJ4uFb6m8iFQUG/9NlNIidbStyoKXCnPM9Icb4nxYVmSop8KSsOpLI4iOqiIGqK + g2ksU6mvwulqCGNjvR+ddd4CHzbVB7OpIYKe1kQ2tSTTWJ1MpRiAJUV5ZOdkiF5IJSk1Vcp0UlKzSU3L + E4emmIzMcnJzq8nLqyM/r15Ddm6Nhszsaq3Myq/WkJ5VQlpmMakZRVqZmVVKVraKGi4jL7+CspK6C+Rv + ZUX9MhoulOUVsr1cymWUltVfmM9LQauXfSsqZf/KOmoqG5ahPhIJKqqpKa+kurRCUEp5QR6luTkU52ZT + nJcpSKcoN4nczBiyk0LIj/ChMFictGAPygM9qAx0p9bfQJOPnjYf0Y3eOroCDGwOM7Elxo++NHlPKYEi + Y43ki5NfneBLc04ktelhFCcFUJIeQkV25DLCKc8IvkAAd5bG0FubQG9dNN2V8i5KAxlpiGFhYwpLHaks + yPJEqa/IHCMj4lSNZTqxv9aPMxsjub43mZuHM7h6SwKHm0LYUxvA3sZo9rXncmBTBYd7qzk+VMPhgVLm + W5PoKTDTnOhAV5KLGMsB7KmOEkPUnx1ZfhwqCuNcTQLnm9M5WxnFoWwTuxOc2BNny3VFXjzeFcvvpvN5 + eXslr86U8PRwDv+5JYXHNqfynZFi7lFp2ntyRG7G0F0cKvI3hLbCCLpKYxlpzmahp4LFnkpZzqWvJo3B + hiz6BV1VqWyW7VND9eze0cvO3f0MjDbRtrmSiuYicquyicmOIyg5gsDUKMKy4glKicQcreb/9cDe0xkb + RfoaHDQiWJUb3OxZp7NhrbMVa5w2aFBE8BoHheWIYJcNOLirv+x1mMQp8wnxw1ecd29Z1osTpuZ3UinK + FNT8VQ46e6wdrbW/2G3kfGoe4JU5gC3kr14jfz19jah5eHyDvQkM9yM4MoCQqECCIvyJiAslKSOeqoYK + rjh9mAcfvZ+b7zzPbffczPeffJwn/+vH3PnA7ew8vJuBmRGatrRR0VZDbq2MmYo80spySC/LI6M830IG + L2OF+P0mUiqWsUwAW1AqKCejqpr8+kZKmlooaWgko6SY2LQUwuLCNeI6INSLmHg/GeORlBZFUVEYRkGG + mYRQW0I9VxFiFBhWESy2bIxpNVmhjhSIPZkT5iz2hyt5YTrywl20uX8Lwu0ojLSmTPpSXboTvTV+zHXH + smdIRQHHs28gmt1bgzk4GMLp2VhOz8dwxWQw+4e8Wdrsxo4tbuzrN7K3z429Q+5cMePFmUU/rtkdxg37 + Irlxf9wFAvjKebGNhiI0AnikIYT2Qv9lAlgccC8TCWExZCZlkpaYTnJMIokRkWTGRVOZm0ZfWxW7J7Zw + XE0DoGFQMMAxRQBvk1LWFa5YHNLSPisCePfEZraPdDLeXUtXTQ61eXEUJQXTVpbOrolNnD+xxJ1X7+OW + s7tkeRvXH18UWKJqNQL12JysW0oV+Xvl4RnOHJzi1P5xTgtOLuP0gTHOHp7kyqNTXHN8mmtPzHD9qRmu + PT4px41rJPCtZ2a1KOCvIoFVZPAst52e5VZFEAtuP6kg9YrsPTrJbcctxO/tx+VYFR2sCGBFDqvo5AsE + sCJ/LaTvTXI/X4cihRe46oC0c6c8m21bObm9n1MCRQArnNk+zNkdI5zbqQjgUa7ZN6ERwIcXe5iTsd7R + lKNFmoeI3ao3rEFnXIvew0ojfxVcjLa4Kt9HpWX21QnUfHVOWp2Tu7Vst8bd24HASBORCQHEJAYQHmMm + JNJL+rH78odiS5TQClQqRUX+qo+q7mZFcFjj6LYeO91anA1W6LxsMXgrwtlJu64F0gbZ11NkvKcilANc + MIvPdYHwvZgMXsbFEcJqH1OgIo9VOklF/ipCWNojyyvrWqnSSir42mtQ5K+CIn8tBLBe9HssvSLjB7ZU + UVOmCGAP/MXPM3ut0whgTynNftYihxwIitRpCIzS4R9hiQiOiHElMdGdtCR38lOMVKab6CgIFvs7nO7c + UC0zRGdmMF3pgfRmhTJRGM1kbjhTqb4sxbtxIMqB0zE23Jpsx6NZdjyZbc2vc614rsSRN8rFOS/T8W6Z + G++WqEhZN17PceSF5A08E3M5T8dcytPRl8jyZTyriN8VRK7huYi1PBe+mufCVvN8+FqeD72MF8Iu4RU5 + 7u1Uaz4p0osZbOKTGi/eqzDyttg/r4k9/WqRK6+UuPJ8qQtPV7jytPiMz4n/9MImP14ZCOOD+TQ+2ykO + /GIGb08k8OLmIJ5t9+HVzkDe2RTCB5tCebPZl2flXH+U6/w+YR2/j1vLH2LW8JeEtTybYs3LWY68mu3E + Kwqy/FqWE2/kuvCu2F8flXrwuSKAa334sM6L12qMPFPpya/LTPxHqT/fFvvr9ooYrqpK4FBVCrvrstnT + Usb+7ibOiKy/Yf9Orju0n/0zs/S2tJObnE5kYBhhASHis0cvz717MQGsiN/oZayQrdGEhqyQvv8eESEx + F2CpiyUyNIHYSJGHsWki78sZGRwXO3eGpvomUlMyNAJakb+KBFZtUYSwgiKNVRTwSpv+T3Bx9Ow3I2gt + UbaJGvH7FZK+BhUV/L8hMDD+f8X/DQGsIpIjVVrniGRtXe0fqJHAsrwM1WYLlu8nImEZajnuQiTwyvpX + kHf3Naj3G0VMTCwJcbFkpMRSlp9MfXESnZUJ9DUlMtklduFgFofmiji7t1Zkcwc3Huvi+qNdHN1Wz0R3 + DnV5wUSriEXny3C2uwSHFQJY7CGV+cTGRWwYgZ2rldg1igRWxI/lZzZXo/MFKBJYlapegyKOPJ20KEV3 + HxcMvmLz+Brw8hdZGx1JudgT87v2c8u3HuSRH/6U7/70FzzwHz/hmjvuZd+pK5nbd4ipnftY3H+E+b2H + mNm2V/yjHUxMLTA1uSA+1RJTU0tMzuxienY3s7M7mZlaFB0xzdzgCAt9g2zvH2ZJMNHdy9DmXkYGRhmV + 7WPT2xiSY7cMTrK5b5Se/nF6+sT36x0RDNOzdegr9I3QNzTOyMSc+H+z9I1MynGjFsj5Nsv5u/tH6Zbz + bJLju+SYzh6FQTq6+mhr20xb60Y2trXQ3V5PT1MJm6vS2ZgfSm+KF7tjjVwb782diYHcHR/AXdH+3Bjm + zblwT/aFuDMe7ExXkAMNgdZU+W6gxmxFh489E4FGdoX7czg2mENyzK4QD3YGubFd9MwOf0d2ib46IHpJ + EcA3eDlzj9mdh/1MPCa262NhATwc5seDQWa+7evFg2Yjj3gZedTLg/8wm/i+tzc/8PXhP/x8eMzPm0e9 + ZR9Pdx70cOMRo4HHPIx838PAD41GfmR01/BDL08e9/TkAXd37nZx42Z7HSftnVl0dWDQYMdmLxu2etsw + 5mPHLtFTV4pOvtXbmbsCXLlHkb8heu6Ue71Z9NC1Hpdz1mUV1whuMlzGA/62fD/KwE9iPPlBkCuPme35 + nvSt7/l58EhEMOflfvb6etAntnW5XCvV044QLzt8RV+bfRxFp7te0OOK/PXUCFIbDQZ5nhq81+PpvcEy + HYKvNdFil+am+tFYkUBzZSIFmWInhDjgfzEBHGZLQKSzpieV7jQF2GL0k/P62l2AQd7VxQiMNpNbnkZX + fzP9k5uobS8mMtlfxokdOjUPb6CLBpXSWSftdJX7cPEUu0beo4Krl4MGnSJ+1c9oso9e9tHL81WwEL8r + sJF7UllORM97r5ZncDlR8fZkKgK43JeCUm/xs91RcwAbPK1w1YttJL6MIoBXCFWdQa4jUHaVgor6XYEi + gLVoQldpo7xnDS5OGi4QwM4OGlTE70rUr4KN1G1wtGONzToNigC2Fj/J1tnmwk+09q5ybp3IFIGrm+sy + +btCyFpIYI0Qk3ZayGppu5bC2gWjhyVKcgVaulxVKsJXzqPdo5scI1DL7ookNhsEFgJYXUtFM1vI5q9I + YBUNrEUHy1gxmL3wDgjC2z8ILx9/DCaTtMGwvP8yWafapvw+gSLLVfpdD2lbQIAX4TJ+ExMjRWcKUsNJ + Sw8lIyuY7NxACsUvLi0PpKzSTFmFgbIyZyrLHKivVLClttSK+lIbGkodqS9yoSbbgao0e6pSbKlOsqJO + bJLWhDWMZNuxu1TP2QYTt28M4F6xYx5s9eThZhnz9XrurXTktmI7riuw4qq89ZzOX8cZWVbpoM8W2XG6 + 2EEjgA9m27A/x4a9+bbsLLBlIdeaqcwNTGTYMJpuxVDKOsEGDYPJ6+lLWseWuEvoil7FlphVDCasFntQ + BTa5cijfjeOCM/l6rsrRacTv9Xl6zufruEG235DjouH6bGeuybDnasE1GQ5cnS5yI9WWcyk2WqlwVbqN + Fv17XZYDN+a58K1KEw9U+3B7njtnY9dzyH8VZ8Mu5a40Ox4vcue39X481xLMCw3+PCs212+zbflNhthw + 8pz+nOfIs4UuvCQ24Wu1gjpHXq5Zz6u1a3i9frWUl/Ba9WW8XqVS4VoI4Hdl23t1a3m3QZHAFgJYQZG8 + KtJ3JQW0iv5VRPDHrY4aOfxG7XqerbLml1Wu3F+o50iGC1tjncgXWR8rMjFMdKW/yDdfP0+x6y3pn1UE + r+pTqp+r/q31cZP062USeAUr6Z/V3MHegV74BJm00svPiE6OV/rbznUDtuq7hqbTbXB2E99Ixr+rrOsV + 9Bukr24Q+eksdpuJ/MxoqopSyEgIJsAsvofIoKhIH6or8pgc2czebaIP28pIi/MmLsyVpGg9KXFuZMQb + yIozUJBspCTJQGWynrpkHU3Jrtr3pQaNALZhY4oj3ZlObM11oq9QBUfZ0l9ip333Hi5xWIaTNkdwf77U + 5wmkH44VOjAhfsRchY5tNQYN85V6be7fCTXFYr69hhHZfzjXhqEcRQBbMS3n31bhzB7Zf7/Y34dUkJvg + iEYA+2jBbftrvdlVJucUf2Euz4m5HCcWpb9uz3VnR76R7QUGZqXfToh9P5BhR7/0xREZh9Oy/7yM2bly + g7Y8mmPLdL4ju6s8OSjnPFRtZrf4JnPSb9Wc2JNqbuw0a6bl+JlMWxblGewukXZVyP7lHuyT/rEv04HD + KupdyhvFj/hWgRvfKzLwVKmJXwn+XO3LM3LuF+pNvFxv5PVGA2/X6/io1olPq+z5uEL6ZLkNH5RZ836J + Fe+XrtfwQcV6PqzcwCdV6zV8XLOWj6sV1vBh1Rrer1zNO1WX81bFpbypCOByCxGsofxS3qjYwJtVtrwj + 13mv3lUjf99RRHCtM+9VS53Iq3cq7Hm7zI43y+14q8qB12scZCw58HKdA68o1Nhr66r+tQo7XinewEu5 + q3khazUvybt6XfrAqyW2vC7n+XyTmQ86jbzS6Mgz1Tb8pdKKZ+sdeLHJhVdaXXir240P+z35YtjEpwNG + Puy1EMDvbpa2bXLhg806Pu41aPP//n3UxJdjsq/g8wnBuCo9+GLak7/P+/CPeV8p/TTi9/NZbz6bMfO5 + 1H+5FMA/d4fDnijYqQhgwbYI/rEYznuTgby+EMVbRwv45HwLq0brYugqChLB7EFOhDMJPmI4OF2C3noV + 7o6X4u22hjgfB0rC3dic4q2lUtyXZ+ZAhhtL0dYM+17CJqMIUZ9VjMWuYqlgHcdaRWj2+XF9nz/HGqWz + iTO9KX41Bf6XEea2Cm/39aIEnTB4ueArBnh4oDNRobrldM5u2nJYgCNBYowF+dlrxG+wvxg3PjZ4e63H + x7SBQKkPD3bRUkPHRbuJk+EmysqV5GQnUVbOZGe6ki9CqzLNjTZpa3+2jhkRpnuzL+f6ynXc37SBR1rX + 8b1OKx7ZZMW3uzfwYI8V9/fZcN+AHfcOCobtuXPAipu3WnF+qy1X9zlqkaCHB9zZuVXPYrdgkwy0Tk92 + tXuyt9XAjkp7ud817Cqy4USjkas7xGDuCOAOKe9pNPFIowc/6zDz161+vDTiw8tTbry4zZk3j3vz8V3x + fPpYDp/8rJhP/1jD58808PHT1bz9+0Le+m0u7/w2i/f/mM7Hf07l0z8n8/mfBL9N4qOn4njn8UhevT+E + 31/pzlN7bfnxgjVPzTvz5IQbT0oH+tmYmZ+N+/CLMV+BP78YDeBX44H8di6UP26P4o+7IvntrjB+vj2E + H8z68B3paN8eNfKwdLxHp315fD6IJ2aDeHjUh1s3OXJlw2WcqBTl1bSa2wbESJ7w4sYhd05uceJAmx07 + mkQJ16o5YZ3Z3ezB0e5Azg6Fc9WYQghXjgUJpByO5PjWSJYaA0W4GmlK1FMc6kSWvPOcEGdKY91oyvBk + a4kvAyJIWhPXaZOST4jQ3CNC9VyrN+c3+nFblzgo3aHcszmMuzaFcGu7Pze3+XFnVyh3bwnnzi2h3LYl + kJu7/bhREb+dXty0yZNbtpi4Y8CXb40G8S15HvcM+3LXoJk7hjy5qV/Ptb2OXD/qyq3zZm7fEchN24O5 + ai6Ao8Nm9vV5sKfPi7393gJfDTu2eDHf4cZ4gygDMYQGy+2ZqnNjttFdI4AX21zZJop2twz0fb3u7N4q + TtEmGSPtrsw0OzMh42WkxpU+UfLdxU60FznRIgqlIWcDTZlr6S60YqDckVEV2VvrznSdB9O1RmbVn0U1 + ci651g45fpsItvkKa+Yqrdkm72FXsyt72vTsUWWznl0ifBdFwaj5N+bEAJsq1ouy0tEniqBXsEUUWU+h + Pb2lzgyLwpqq82Sh2YfFFl+5FxNjNZ4MVbrLO9FpqaAHRQGOicF3YKORb+1O5nd3NvLmf/bx99fH+efH + Kp35IP/83EIA//PzRv75Ra3UVcMHpYgE5Qvp3689mMBvTofwrTFXTjSvZal4FQsla5gvs5J7kb4kwnl7 + rTiQ0nY1z/T2FnHg2qX9rQ7MSn/b1mwn9+jMAak/tEwA7xTlsksE/d5GHQfbTZzqCeJMbxjnFHqCuXpL + EDduDeau/hDu6w/koV5fHu0z84NRb34+F8hv9gbx56MhPHcqjNeujuD9W2P49O5Yvvx2An/7TgJfCD5/ + JJEvH07kbw8l8bf7ZPnOGD47H8FHV4by/ulQ3jodzRunFQmczZ9OF/Gz4yV893AJ9x2o5IadNRybrmLv + RDW7JprZOd7FtpEtTA/2MNG/lfGBYaaGxpgcHmesf4yu1s00VrdTVlRLTnaxGOMF5BYVUdfcyNaBPo2o + XVhcZHFpG0s7trNntyJ/d7Nj1062bV9iUbbNz88zMzerEbrT05NMTcm5J0YZmRxlYnaSiYVpDWMzE4xO + T0j9uBYFPCmYm1vQSOBti9vZsXOXXGMH2wXzM7PMjE8yPTzB5OAII729DHa3s7WthM31aXRXxbCpIpDe + Gu9lAljPiCjkITHyBxvc2Sx9ua1cT22RGxWFBkpLvARmSkt9pPSjotSfypIAqkoDqK8IprUulI2NIXQ2 + BdHV6E9XQyBd9WFsaoimuymBruZUWmrSxQAsoLy0hMKifLJycsjMziErO09QKCgmJ7dCUE1BQS0F+fUX + kJMnz1egyF9VrhDAmTllco4y0hXxm1OuHZ+bV6mhUN5JeakiehuXCd96qisbNawsK4K3Qv3Bv4wV4rdM + lhVW6iurLKipaqL2Ahqok/PUltdSXVZDdWkl1SVlYviWaBHBFljmCs7PTiY/NZqi2GDKIwOojvCjLsyX + hhAzzUFmNvp7sdnPi14p+2V9INSXftmvLz6YnsQgGkI9KfFzpSU1hM0liXQUxFOXE0VdQRyNJUkaGooT + qMmNpCw1gLrsELZUJTLSmspISwIDDZH0V4eKHIxi+8Zk0Y/JbKuLYK7Eh/lCo5auZluOM6dF7t+8OZZ7 + htK4dyyT2wZTuLorirMbo7mmJ53rBqo4P9LKLVMd3DbfzjVjFRzclMJMpT+DWWJEZ+k5WBHE6bpIjhb6 + c6owkBsqIrmrMZn72jK4sTycE6nuHImz42SCHXeXmnmqK4an5Vpvzhby9ngurwxl8cetqTwl+PF4Md+d + Kud8XxY76yMZLApgi9hHvaXhDFfFsW1jLvv7Kti3tUzkYCYTNSlMN0vZlMlAbQrjG/NkHDdxxd4+Du3t + Z3Sknk1bKmhsL6GsoYDEgiSCk8PxSwgjOC2awOQIfKIDMQSbcDbrsTU4Yi0O0EpppbNjnYv11whgC/lr + gRYB7GpJAX0xAewT5I3Z34TB7I6bl14cK1cLjK7iTKk/3G21VGbWjusvEMCK/DVIG4ze4qiJM6bIX+Wc + rRDAFvjjF+KjEcFxKTEaAXz4xAEt+veaG6/k6vPn+N4PH+WXf/wvfvifP+Sme25h38lDDMyOUL+pmcKG + crKrFambQ2ppNmmlam7g/1cC2EICrxDAxc1NFDU0kFlSSlx6GqHxkQRE+hMQbiIm0V/GaiSlxdEydiIp + yfUlLdqRSJ/LiDBfRpQg2nQZqYFWMmb0VCR7SulOYZTuIjhSEGFLXtg6iqI3UJlkx6YyLyY6wljaGsuO + rVFiD0SwW3TMoWHRLwsJnN0Wz9GpUHb1mZjd6MqCmlpCbIZ9AwIx8g9NmjgxH8BVO8O5dncU1++J5Zpd + 0Vwpxvrp6QgODoaz2Bm8TAAHUJbkTYK/UdrsTVJEHJmJWaTEp5MYFU98WDgpkWEUpcfTWVfM4nAXx5ZG + OLFjBJV6+dgOCwmsCOErtg9pdcdl+9GFIfbP9LJncguLg+2MdFbRUZlJVXY0+fEBMsZjmdhcx6nd49x6 + bg+3nNvL9Se2c+2xRa5T5O+JbRrU8vXL5bXH5jl3aJZTigA+MMnpg4JDClOcPTLJlVdMc9WxGa4+PsvV + J6a57sQM1xyb4Jqj43L8JLecntFIXwsBrKKAVSrorwhgC/lrIYBvOzHLLVdMcccJ2V+Rv3JtBUUAqzTR + igT+KgX018nfW05u18pbT+3gtjM7tPK6I9Oc2jXE0cWtGul7MQF8emlQMMQZeX4aEbxnhJM7hzQCeNtE + O1s6SykvSyA6xgujlxV64/oLBLDOaI2zwUYjexXp6+WnxxTghtFHRampVIIWAliRtUFRZqKTgolPCdb6 + bkSsD4FhxgupIi/GxQSw+uB6gQDWr9NKFw9rrV6Rw4r8VddWyxopLMcafR2WI4GXSdsgld75KzJ4hRD+ + VwSwSiO5QgJfjIsJYJWu+t8RwNERbhoBvLWrnP7NlVoEcGKMJwFqP/H1vkkAB0a4aggQ+Ie7yLLzBQI4 + Q5CfaBCfT00dEEBPcSjduYr89aMz3Z9N6QGMFsWwsyGDfY1Z7C2P42BOAMdEP5xLduaOLGe+l+/Mzwsd + +UOxIy+Wi19WJs652MfvlrrzfplBw5t5zryQYs0zsWv4a8xlPC1QZLDCszGreT5GpYBezwtRGzS8GGnB + C+FrLARw7GreSbfl0xJ3vqgzLxPA7loU8DsVBt6t8uTdOhNvip39cpMXL7aZeanLjxc3B/DyQBjvzCXz + /lIGb80m89poDM+LDft8px9v94TxofhSn/ZG8257oJYC+g8pG/hj4nr+nLCeP8Wt46/xa3km2YqX0u14 + NdNRI4JfzrDgtUxn3s7V80GxgU/LvfhcbLX3ar14ucrIXyo8+HmJ+IJFPnyrOJhbyqI5VyHPryaVPfW5 + 7GkpZ19XIycnBrh65wLXHdzH8W3bGerooiA1k+igcCKDwogOjSEyLOYCCfw/SVVFwFpI2DDZ92KC9/8L + XyOAo5JJErlYVlzJ2LDYpRMz1NU0kJKSoV1bEcBaCuiwKCJlXSFCi/r9V23697iY/NUI028QwMFhyRoJ + fAEhsn4RQkLUPL//Hv+KFP46/s8JYEX8RkenERmVqkUD/78QwCsIVs/wa4j6HwiVZxsVGU18bDSpiVEU + ZcVTI3ZkR3k8WxviGe9MYmkok4Nih53ZUytyeaPI3y0i47dydl8bCwNF1OcHE+1nqxHALvaX4uS4Fnvn + 9f9HBPDFJPAKAbxCArt6LEORVSYnsZ1c0Zv0IhM9xF4Io0T6yvzO/dx630M88qOn+O5Pf8kDTzzJzfc/ + zOkbb+Pwlddx9OrrOX3DLZy5/hZOX3UjJ09fx/ETV3JScOr4NZw6eQ0nBCdPCI5fyYlDx0XnyrhYWOKM + +FFXiR91dn4bRyZnOTC7yKGdezm47zBHjp/h8Omr2XPkFDv3X8FuhX1H2LX7EDt37ROfa4/4chYsyfqu + vYc5cOQkB4+eYPehI+zYf0jD9r0HWNqzj8Xd++Ve9jIn+08t7GRyfjvjcr2xqQXGxmYZE/9yQnzH2cFu + sWNa2NZZzlxDGktF4ZxK8+WOlADuTw7m/jh/7o7w4aZgL64MNXIwWM+0yP6eAHvafa1oNq+n1XMDWz1t + WfRx41CwD6fFTjwV4c+RQCOH/N046O8qcOGQjyNHTA6cEn10ndmZu81uPCT+yHcDfXg02I8HQ3y5X2zY + B/xM3G/24NsmDx728uARLy8eMpl4yNvMg94mvuXjwT0mA7eJXXu7wZV73eU8BnceNbjxPXd3HjfoeUzB + w8gjgvvcPbjd1ch5BzeucNAxoXdkk6eays6WDtE5A6ILl/wcOSdtut3blXtEP98b4sY9oe7cJXrvFn9b + rvNay1W6S7jW9RJuFv10vxz3eLCOH4cZ+Emgnh/JPf3Iw4Uf+XjyeFgQtwT5cUDaOCR9r9rNlgyjLWEG + 0WdqCjyzo+hvRf46a1M0aHP2S59cIUndTdbL2KCRpd6+1vh5WxEp+jcz0Ye6kjiayhMpyAgiLNgR/0Bb + /IJFtyqE2+Mf4SKlE96Bdnh+g/xVev+bCI71pbA6i81D7QxNb6F+YxmRyQFfI4A9xE7Qqx/NNOLXghXi + 918RwBbYaviK/FW4iAD2WS12wuVEJzhcSAFdVOZDeraRULkPo5e1RgBbUj/rNJLJAkcNKwTwN1NA/ysC + eIX8VXB0cdSg0j9bUkAvE8GynyKA19quZ62d+EnOKuOAvTbnrzbvr/hQTm6WlNIWIlb98HcREeupx31l + 7t/ltLhaetzl1NUrJPD/IIKN4n8ZLCmgV0hgSypod7xlfKg5gFVaaEX8qut+nXT+igR28zTKtcV3CwzB + NyAEs0+A9CuTZbsilA0uApF78oz0BgVF/kp/E9lpEj8wJMREdFQASUnhpKVFCMLIyAwnU/z8nLwgiktC + KK8MpKLahwqxV6qq3Kmr0tFU40pjjT11ZdbUlFhRU2RLVZ495Rk2lIgNUiy2UWn05VRFXUZzzKWMZNqy + t9SNq5q8uWtjAA+0+/Jwq8iBZg8eq3fj29Uu3FPqwI1FNlxTYMXZgg2cLbSW0pZzhQ6cKXTiRIEDh3Ns + NQJ4d641S4Lp9PWMpaxlLN2K4dT1ywSwhQTWCODkNfTEX0p37Cq2xl7CcOIaZtJt2JOv42iBgVMF7pzN + 03ONivzVon9duUGDCzdkO2vkr4oAVgTwVWJLXZVmx5WpNpxNttYI4BUSeIUAVhHA1+U4ckepgXsqTdyS + 78bZ+PVcEbKKq6NXc1e6A98r1PNflV78tc6P52t8eFr2VZG/v5Vn9zt5Tn/MdeDpAideELt0hQB+pcqK + V6rX8mrt5bxSuYrXKi8RXMab1Wt4q3b1vySAFcGrkb+tjnzU5vi1NNCqTu3zes06LQL497UGHi03cTLH + nYEEF/JFjkSLzxBiFj9A9KVZfSvwdpfxKf31IgL4Qj9XfV6lOldE8DIUWewppTpO/WRu8vfQ4Olr0L5B + OLs7yPhTP6ev00ql1530VrjorNDJskoF7+5uJePCikB/nfgLvpTnxtNclkFeYgjBos+93G0ID/EUfyKH + yaFN7J4fYnNrKenx3sSGupKgCOB4dzKTPMmON4rf4EFRgvgiia7UyH3WJzjTGO9AQ6wtTQm2dKY6awTw + ljwnthY4slX6dW+xHf2FdgyqqN8iRw19eXb05trSny1QEb2yPlpoz4z4EVoEsDzPWfU9vUxl4PyKAF4h + gYdyrBjJt2JazrlY5syuKjf2ytg6UOWh4VCVIoK9OVzvy55qL7aV6JnNd2Q6W66R5cBCllwnW6dhPtuF + cbHrh6Rfbk21oidlPf3p1lrUvcqcOlvmxlSxjrFcObZQzTds4oic92i1N4dKPdihCGXpu7MyZmbTbJjP + sLOkSM9zYX+pkaOVZo5LXz5RYuRUvp6rc525Nc+VB6Qff7/YyC9KvPhjuZlnyn2ln/rxqvTp1+u8eLPO + yDsNbrxf58rH1dIPy234UBG/pYr4tRL/YwMflqy3oNSCj8rXafiwYo0F5Ra8Vy6+VIXC5bxddilvKeK3 + VEHGQellgrW8Vq6igB3FpxJfTqDI4HerZb3SgfcrHMTvsuedMjveKLPljQrxi1SUb7UdLwqer7TmxUob + GWOyXdr6ZoU9r4tcezV3Da9kr+ZVeVdvSh94XeTTm2X2fL7Ri/c73Hmxzp4/SLt/XbiG38u9/bXSlmdU + +ug2V97ZYuDjPg8+6hWfssdCAL+3Rcf73a4XoOYLVqmgPxsxWDBm5LNRIx+PuvHJmDufTRj5YlK2T5n4 + dMJTw0cTHnw46cHHMyYtFfQ/l8I04pdFhTD+sSD+4XQwby3F8u7xYj6/uZ1Vs03xDJSH0pxpojRGR5q/ + NUHOq/C0WYXZ6RIC9ZeSLEq6ItyZrUkebMs1c7Lcn2srfEUIG9ibYM1owCr6/FcxErWKqbRL2FVhxZEm + Zw7VOzGTs5ZNUl/pt4okt1UEidHkLYPTQ4SDp1mPv6+O8EAdkWJcqRTQMeFuhAc5EyRGlb/JSov4VcSv + giJ+1UcBX6kPFgNGRQ3Hx7iLo+dOSpI7qUmupKY4kp7qSHaGEwXpTlSmu9KWqaM/x4WpbBt2Zl/OubI1 + 3CaC8a7aS7mn8TLuar6c21ou59aOtdzavZ7b+2y5Y8ieu0YcuV3KWwbsuHHQkeuHXTk7auCKYQN7+tzY + 0ePOjs0e7NlkYl+nFwc7jByod5aBas+pRjdu2hzI7VvDuWdzKPdu9OdbzWYLAbzRzF96fXhp1JvXZj15 + aVHH60dMfHBLNO89mMLbj2fyzk8L+eDXZbzzq0Je+1kGrz2Vyts/T+GD3yTz8e8S+fT38Xz+u3i++GU8 + H/04ine+E8Jrdwfw9FUe/Ha/E7/e6cQfdhn5/ZKJ38778IcFf0EAf1wI5E8Lwfx5IYT/lg7y7K5IntsX + wzP7ovjTnlB+uzuE/1zy50cLZp6Y8eLxWTP/seDHE3P+PD7tw3cnzNw/oOfmzvVc03QZ18szu3tUx33T + npwf1HF8kz37mq3YXr+BhSoblmTA7ROFfnJLMNeORHHjlGAm0oLpKK4djeLcYDT7N4YxUe5DT643dQl6 + 8oLtyAuxpSZRT1eeJyOVvkyK8OvLsmGqyIEDDUau7vLl7oFQ7h8M5cGBMB4SPNwfxrf7QvjWZnFWuvy4 + e5M/92wJ5G7BXT3+3LbZh9u6zdzebZJ37ckdW0zc1e/N/SOBPDgmjs6oH98a8eFboybpA+7cMiSOxZSR + e5b8uHMpkPPy/M5N+XKo35NdW9xY6jawfbMnS5tNbJdzbevyZK7dnalmEawi4MZr9cw0GplrMjDf6s5C + u85CAG/RLxPA7nIOHQsdOmZbXJhs1DEix/RX6Nhc4kx7kTOtYuA0Zm+gOWMNnSJ4+tW8A+UOTIpxNK3O + ryJ+q0Xo17iwo9aFPbWO7K11YE+NLXvqbTjQ7MCRTh1XbHLjWJcbJzZ5cGyjOHCN7rKv9GNRMHNligB2 + pjfbjs0yTjaJMbUpz5YtxU70l8u2aiMzDWoOYB+m6k0MVxlFbrjTrxHAzgyWiBITAXp4kxf37U3l9/e2 + 8PavBvjHG+Pw0bAWAfyPzzcLOvjHF4oAroPPa+C9Mv7xUhEf/SydZ24L4yf7vLiz346TzWvYLYbM3jpr + 9jc7c7jTnSvkfR3fYuZYj5mjvSaODnhxoM/Izm4XFlqkr7XI/bY7crDVicMiaC0EsAO7qkW5NbhLvYkr + pE9c0RXIyU5xTDv9uUr6x009AdIHArm/30/6jw9PDJn46ZQPv9sZxNNHwnjxVBivXxPF29dH8cGtUXx6 + VwxfPBDP3x9O4Itvx/OZLH9xfwJf3hfPl3fF8uXN4Xx+TQgfn/Hno5P+vH8ymLdPRfPqmSSeO5fNH84V + 8OTJAr57tIQ791Vx9WI1h6cq2TfZyO6xDraNdDM9sIWx3h5G+wYY7R9ldGCMob4R2po6qalopiivksyM + fNIzc8VJyqG4opyO7i6GJ1Qa53ktNbOKzt2+c4fAQv7Ob1tkYWERNW/vCgE8NTPJ5PQEo5OjcuwIY7I8 + JnVjM+OMTo9p8/uOCBT5+00CePv2ndq5d+3azfZt29g2O8/CxAwzoxOMDwwwtHUjfR1V9DTnsLkuke7q + ULbW+FoI4Dq9wIWhBleGRFb2yHpbpY566YdVpe5UlHtSVmairNybslIfKst8qSz1parMj7rKAFrqQuho + FDQF09koaAilqz6SzroYNtYlyHoGzTXZVFcUUVFaRmlpCXkFBeTmF4gDUyQoIUfNoZxfRX7+MgFcUE+h + QJW5+bUacvJqpKwhq0BFASsyuJKc/EqyFelbUCX71mjEr0JJSQMVZSra938SwFWVDVpZUf4Vyfu/E8DN + GmouoIXaqka590Zq1XnL66gpq6a2XKCI4NJyS1RwWRmVJYUU52dSnJlEWXIMtQmRNMSFicMVTEtEIO1h + /nQH+9EbKO8i0I8hWR4J9WdItvVFBohDFERLqBcVvm50ivM3UJbG1vI0NpYk067K6kw6BO1V6TQVx1OT + HUZLYRT99amMb8xkvD2ZkaYohmtDmagPZ2dHEnvbEtheE8y2YhM7CozsFkfrYKGOG1uDubcnjoeH03hk + LJP7hlK4ZXM0N2+J586BHO4ZreW+qTa+Pb+Rh7Z3cNdMFdcOZHGkLYJ9YoAeLTNzo7z3O5qiOV8SwG1l + ITxYG8NjLak80Z7OvWWhXJnowtlYG86nOPDdCh9+0xnFC3KdtyYyeXcsg9dHRPYMpvHbwXR+Pl7AE1NF + YgOkcbA+lGnpc5PlwSJjI9nRlMzRngJODZaLDCpiZ1MqC7WJbG9NF/mTzmR9ksjyfI5MN3Jq92aO7Ohi + YqCSrVtK6ewqo6m9jJzyDMJTI/GJCcQ3LgT/+DB8IgPxCvXFzc8DO3cnbPQOWmktpZWrHeucrTWsdbKy + wGHDBag5gK1dvpoD2MvfC3Oghfz18vXEw8dDI3TVPE8Gk7tWKhJYfcSwcbLRIoDVPMDqo6lK+6yIX5O/ + J94qLZPAN9gs8CEgzPcC1N+6Af8/9v4yPK4rW9uFHScmMVOJqcTMZDEzWgZJFtuyyJIMkszMzJgYYgft + OI7DTN1hZjbFcRzqQNO+z5irbMfp7r3Ped/zXuf78/14rrlqwaxVtSaMUXeNMYN9iEqIoKK2lDWbVnLH + iaNs3bOZDdvWcfLBe3n1vVd565O3efa1F7jj9N2s2rGeabM6KWuoIaemiNTSbJKLDAB4fMnvUcD/Cf4q + XQPACUV5f1BiccHvEcCTZFysqSFN+nvM+BSCosM1AOwX6qFBtHSVAjo/nMrSSErz/MlMcCAhyJi4gLEk + iJICxpEdaUXleDdqs3yk9KAwxpGCaAdNau3fvAgDAM4OHU1BlDGTsxxk/PJlttgvQ1MDWNQayGKxNdb2 + hLB7YRK7FyWyfnYoC9rdGJislgyROUm2V/V4s7LHk9V9Xmyc68/2eSHsEGN9l1r7V4z1zbP9WT9TpZIO + ZLjBn54JMr4VBlCWrJf7dCfKV09yRLw4tKnERSQRExxFVEAQMYH+pEl/n1SSydyOOjYs6Gbzot6rAPha + JHA36xd0sVFLD/1HAKzW++2cUsxkcaaLxoeRLs51fmIQTRVZLJ7ZxN718zm8YzkHtyxi3wYFgBdwcPMC + LTp4/+b5sn8h+6Tcu2GYnWsG2b5mDtvXzmHH+jnsVOvsbhhkzybR5iEpRZuH2bNlrhYFrADwHgWANw5w + WK0FrKWAHuL27fM4ukN0IwC+GgV8uwaABzmycQ7HpU4FgG/fOCzlMEdFR6T+w/I+KrJX6bDcn9KRrQYp + 4HtYPsvRrYs5tn2paAkqonnH8plsXNBxNQJYpYBWEFi258n2sGyLtsj2Ftm3ccF0DQAvmdtMT0cNE2rS + iIv3Fv9GrflrJP1NyfQ6ALZ1VpG6/z0AVpG6fqFuRMT7E53gr0UBB0d6oA/S/bcAWK0VrNN+ZFU/fhoA + sIXDWCxFWhSwq+GYg5ulBn+vAWCdp5ReKjpY6lAppfVWmhTAVfISH8ugPwLga4D3XwHwteuvbWtrFd8A + gD28DQD42hrAkWFOGgBum1rE9OaSfwPAri6jcXMfdx0A60NsNSn46xNs8wcAnBqnIy/RhcpUN5ry9UwX + v7Yt15/mTF9a0mReywhgsCJBbMlctrUWsWVKOpuLw9mW7cWeVCfuynbksXwHXhab9v1iey3SQqV+VgD4 + 2yJx1oud+bHEhW/zHPgqxYJPY434KHoUn8aM4dNopdGaPo8aw2dRRnwZacKXUWacixLHX8ovI2RfxCjO + x43luwwrfi3R8fdqT36pdOX7Uke+FXv6e7Grf6zx5Oc6PT81+nOl2Y+vxY+80ObPl+1+nO0K4vLcWC4N + xfNlXzifdPjzwVRPLQ30N23B/DQ9nN86ovi+zp/PC+x4J2Hc7wA4RgHgsXySYMJXyVcBsFKKQeeTbfgm + zZ7vsp34S74rP5e68U2ZK5/Jfb5d5Myzea6czvHgDhk7DxbK91YcxaqKRJbVZGopoBUA3tDTzrbhWexf + sZwdS5bR29hCfnI60YFhRAaGEynjlFoH+HoUsCqvSwHYfwfAYf+D/icAnBCbInZjBX09s+jvHaCspEKL + AL4GgP39ggmS+1IKDgrXdC0S+V9B73+nG+GvBkz//wD4ugKDwggJDiMmMpz42BAyk8IpzYikriia1qpo + ZtbHMW9GCssHsmQMLWHf2kkc3dbK8R3T2bu2kcW9hdTk+P8OgC1HYmMjY5qtylpigpmSndH/HgB2tpRx + UkEscy0dtI2LNTbOtjJOyhgbEEiOtJU5C5dz+J7TnHn6TxoAPvXECxx/4BH2HLubzQeOsOPwMTl+imMn + z3DHvQ9wxz33c+ed93HXHfdx9zHR8fs4cuhODu45zO4tu9m2cj0b5sxnU98stouPtKtvJjtm9rOxe6bY + CINsXrKczes2smffQW49fhf7jt7Jzv1H2LXvELv33sbOXQfYsXMv23bsZut2pV1s3bmHHbsPsO/WIxw4 + fIS9h+TcWw3adeCgXH+A7VLf1j372SzXrt+6k7Wbt7F64xbWbNjC2jWbWLNsFWsXDLNxuJ8dszvYKT7o + lvZitk9I5mBWECdSAzmdJHZ1tA93hbpzOMCZXYE61gXYMSxjfI+vBe1eJrS4jqPVaRy9Mo8tFVt0k9iP + e8Wn2BPizRa9jk0y3232tRc5yrYc97Rlq4cNe6U85unISR937vfz4JS/N3cHeHOHbN/h48ZxTxfudNdx + l6szd7o4c0zJzZmj7s7c6ubIARc7djtYsU902MmBu3SOnNA5cJ+TPad19twvOuXixL0uOu5wduWQowt7 + rJ1ZaeNEh7SHWk9rKn0smeBrSbuvNfN9bNgl93+HhyP3+jpzUj7vvQE6kRN3+sh7uJlw0HE0t9mP5rhu + LCfdzHhY6njS257nfOx53s2OF1wceF6tOxyo57CPJyudxU60t6LcxpTx0k5DpN16OxrjJm1PrWGp5Kzg + r7tsq+Uh1Dq56k9bUreTvJ9O5OJhgrvI09WIIF8bkqI9Kc4Mp0p8sJwUP4IDrNH7mePjbyFzpSjESuZr + GzwDZU72NRU/QOqRefWPANgw9ysbQP0JLERsjcKqLNp7p9IzOE0DwKHxvhr8VVLw10musZX7+t8FwNf+ + rKYAsIuHWv93rLz3aDz0t4itY0VGjtt/BMD2jqboxHf5XwHANmossJc+rqWAVhDYGiv733V9DWA7G00K + /F6TsbX4XhbGGFuZii1lIT6WGj/UOPK7VBpmpX8DwNIudSqts4JdCnRdhWQK+N4IgZWugWANBivYq6KA + 5TMq8KvSMat1gj3El1Nr8nrrvfHwckfn6oSDtG8NAF+FvjeuBaxSPetcVIrdIHz9gsTm0uPq6q6llHZy + tMbJSWxABX8d5Xt1UOm1xT6VdunkYIaHuy3BgeJjROhJiA8mJSVEFEyqBoADyMjyI78ggJIyf8orfKmo + 8qKqyp3aSmcmVzkyocKSqmIzyvNNKM02pSjNRHwI8a3E9skIvonc4BGUhY1kSuTNzEw1Y0WBA/sUAK7z + 4VSdF2cmufHYRBcer3bioQoHThbbcnuhJQfzzNiVa8zOnN8B8I5cm98BcLoJi9ONGEodS3/CKLrjRtGb + ZPQHAKzgr1JH4mjaYm/WIHBH7C30yXnDaZYsz3H4HQBn2rM73ZY9aTJGpVuxP03Jmr1iM6moXwV+Varn + HYmmbIs3FhmxPcFYZCqSe1SpoFNUCmhDGujd4824NVt9FmcOZTuwXezHzeEj2RM9luPJlpzJtOG5Akfe + Knbh4xI3Psi11wDwW3K9AsDvZNwIgNUaqtacKzPlbNkYzlWM4pxKg1t6MxfKRnGpfAyXFfytHMv3Wgro + GwCw0r9GAKv0z/8CgL8oN+PDCR48Valnt/TJnjgbsnyNCXc3xc/FCk8X8T3U7wqqXf83APha9PuNUudp + f4aQawx/OBcf6Kr+JwCson+dHGUMcbKQPmKOh5s54UHOpImfVJ2XQHN5FmUpEUR6O+CjMydMxu3KojQG + ZkzVAHDrpELGx3gQGWRLjAaAdQYAHOtMVqwLubHi58faUhJjQ0WMFVVRFlRHmVIba85UsY2bxtvQkmFN + c5aFyJTWbHPastR6wBZMz7JiWpYlrelmtKTKsfEmtKUaMV3afpeco1JBD5baM1zpxNwyx/8BAJtIacyc + PEuGC61ZJH6IWuN3mfgGy0UrVcSt2OWrKjxYrNI459oxIG1kINVc0xyx469plvgo3UlmTJO22Rw/lpb4 + MbQlGtGhouKzbZgtbU0BYA0I59iwosKdDTU+bKjwYkOJB8uz7VkodQ7LNcPSzudJe58v7X5Jli2rpQ1v + LvVgV5kH+0rcubXAhWO5Mufm2IsP5cRLBc68X+jGZ8UenC/25pLoGznvcrmOb6VPf19hyw/l1obI3yIT + flDwt8CIH5TyjfhJQeD8sZp+yBPljzGoYLRBRbIt+q5oFFeKRSWj+bbwFi4XjuRiwU18LbpQcAvn8qVf + FBrxTam5vK8VVyqsNRj8bZmlXGPBdyWWfHcDAL5QbMpXxSZ8UWLCJ0XGfJg/mk8Kxmrr/l4ql75RZsVl + Oe9S9ji+zhwjpTHf5JrxdZ6p7Lfk50ny+Sba83mZOW/kjuH58SP5c8YoXs8ey5v54/i4woKLDQ581+LE + D21OGvj9rtWO71vstejfH5rtudJow0+y77cOJ37pdOLXLid+69bxS4+Ov/Q48JduUY8jv/Q68XOvMz9p + +3V8L/uuyLHveuS6WR78ba4f/5wbwD/mBPDPOX78XfSTvP52USzfby3k70emMmJebTQ9xYHUpThTFmlN + pp8RYbYj8DEdgZ/VCIJlO8V9DJVB5kyXDrI8x539NYHcUxfG3ZMDOSDO4bL4UcyUQb03fAR9cSOYn3sL + S0uNmCcPrz1mBDV+I8h1v4koqUsvhryXdGJPmRy9vJ3x83Ui+BoADjGUgT4W+LgZ4eU6Fq+rEb+aZNvX + 05QAOa7+ARcd6kiSdNzkBGfGJzqRkmjL+CRLUpMsSJMGmy1Obul4S6ZIx+2Qjjsr05Sl2WPYUTKG22Rw + PFw2gsMVIzhUcxMHakayf/JoDjaO43CHBUd7bDg+045jM224vceaw7J9a58Tu/td2NzrwqoZOpZOd2Zp + mxur2zxZ2+zBugZXNkgD2DrFmYPNYizPCOXkjAhOtYdwot6Xk1cB8ItT3Xivw5Mv+z25NN+LcwtduLDW + k+9vi+CbO2M5fyqB8w+lcOnpDC4+k8r5p+K5+HQ8V56P19I9//JqDL+8FsVfX43i73+K5Ocng/nulJ5L + t3tzdrcbH6914OOVTny5xouvVuv5bKmez5cFXFUgXy4L4qtlIZxdEcqFVRGcXxPOF6vC+EiOv7vMnzeX + +vPKYj0vLPDm2fm+PDPfh0dnu/PQTGce7nPh4QFXTsyw5mizEUfbTDg5IAb3XFf2y7719UYsrRnN/PJR + DBaPkdKC5bU6Njf5sL8rmGOD0dw5L4Y7RHcOx3F4IJr9vVFsaA1j3gR/BsoCaEhzJj/YVNriGKrirWSg + daRfBr1BGTxmy0C6QgyD/e16ed8Inpgfy5NDkTw+O4zHBkJ4rC+YR3oDeaBTvu82b+5p8eTeNi9N94ju + avU0qE2ci1Y37mxz5+7p4nR0+3Jmpp7TfXrun+nL/X0KArtw10wdJwc9ODFfz/EhXw7M9mXbTC9WTXNm + QaM9Q3WODDe4MHeqK3OlHKxzZo60gdkTdcyqdWbWBB1zal0YmuzKvDpXhuvlfJloF7c6slwDwFJPq5Ps + c2DuJHv6JzjQI0ZUR4kjLQV21Ofb/g6AU26hPnUk03LG0F1oQr8MXnNkEB0ss2G4TByXMgsWl5vLQG7K + umpzNkwwZ0udGElNduyVtrp/hisHu9w51OPLbV0+7Gnx0NqrWmdgnpqQZBJqG29MY8o4GsYbyXMwoUn2 + Tcu3o6vEib4KVwbE0Ostd2VGsSPTCh1ol3ucrq0XbEavDIzr5Ps+tWY8752q5/u3uvmvSzPhpy4NAP/j + lxb+8Vs9/9AAcDX8UsU/vy3ib5/m8M2Tsby9z5unFjly53QxnOrGsn7iODbLYLh9ugv7++We5wZx22AQ + B+cGsn8wgH3DAWyf6806GRyXNFmwqM6MZVPMWT3F6gYAbM2ScjuW10ifnSgT5xRPVk32Yt0kLzZJuWuq + N4fbfLlzhh/3dXrzULcXzwx48vI8Hz5aE8S5rWF8vTuEKwfCpH+G8dPRcH67M5K/nYjmv+6P568novj1 + 7gj+fncM/7hLdHsE/zgYxG879fy82ZO/qMj+zT58tzWQr7eH89WuBD7bm8ZbezN4Zku2fFclHFlSzra5 + pawZqGJ53xQW9jYxZ0azBoC72zvomtZNp0r11d7JxJp6SouqyckoJiUpg/ikVBKSUkjLyqR6Ui3tnR30 + zZnFnPnzrkLgBQxLOTw8zODgEINDQ8y9AQD3zxmgT4vy7aWrv1vKmRpEVjBY7ZvZ10dv/8B1ADx3UOq5 + AQAvXryU5ctWsGzJEpYuWMTCOUMM9c1iVo/UNb2JGU01TKvLo602mZaqMNorfemodNNSP88QA7arxoau + Wgem1djRUGHPhBI7qkqdKC9zpUT6fLFKMVTsSelVlZWIs1Gmp7bKn7oJQUypCaB+Qgh11SHUV0cypSJa + WxdpckUaNaXZlBXmUVxQSGFhITl5eWTn5pGVo2BwsZayOSdHwd9rMoBcVWbK68xsUU6FnFdBRl4VGblV + cl251CHKqyAnv5L8vGoKCms0FRXVUlL8nwHwNd0If5X+WwBceg0AT7quSvVajpWrlNByTWWJSgktKq6g + orhcykr57sooLyqkOC+bwszxlKUmMCEljolJUUyOC2dKVDD14YE0hwQyLciPzgB/ugL96ZHtrmB/pgf5 + 0h6iZ7K/G2XivDbEBdOZn0RnWRqtJSk0S9lclcHUynQNAteXJDExL4qpxbF0T0zVAHDvJNmuDqarwp/Z + NUEsq4+RfhclNoEvi3OdxbB0ZJ0Yi9vVv2HrgzjTHsVjXQk80ZvMQ13xMmaHc1dLJCc7UjndU8RDA9U8 + OjiJxxdO4pH5lZwYyOHQtDhunRLE8QmBPCL1PzElhlPF/jxYGsRTNZH8aUoCL9Un8lCRPweizNkfPo67 + Uix5ptST9xpC+Kojmq+7Y7kyM4FLM5P4cmYKH/Sl8vLMdB7rTeVoUxSr5dwFhe4sEkd35YQINk9NYV9n + Lgd7CtnZlsmKmhgWlUewcnIiy6ckMb82luUtaWzsL2PLvImsmlXFrLZcuprzmN5SQnNzOcWVmUSmRuAR + 5o1rkDeeYf54hvjhGeyLe4A3Fk62mNpZYS5OuomdJcY25hhZm2JkY8Y4KTVZmlyVAsAqAuZ3AKyAr6u3 + 61X466y9VqWzl07br7YdXR3EybJGpTFTAFhJ/WiqnDFD1K+Cvp4a+PUNMuga/PUJ9NQgsToeERemAWAV + AXz0rkOs37aWleuXc/vdR/jzm3/i47Mf8cmFz3jxrZc4fvpulsp5Dd0tFE+R/qVSQSsIXJjN+KJsLR20 + 0n+Cv0qJVxVfdIMK1b58xpeVkl0t/VDGPw0AFxURk5ZKUHTEHwBwamYI+RoAjpK+IttpLmTEWpIWaUK6 + KFOcvbLx0uaL9LRWSD8p0FMS70hhrD1FcQ4UxthSIE5hTqgRmcGjyAkfQ02qOH6Vnsyc5Ef/RC+GG/Us + bPFlXV84B5ans3/5eDbOjWCe2Im9tVb0TbZkfoszK3t8WCO2xupePesGAtg4O4hNc4PZPBjIptn+rO3z + YaXM0YuafZk7Rc/MiSG0lYVSlR5MaqgP8YFBjI9KIjEiheiwOCICIgnz9Sdc70NSRBBVeakMtE9iw8Ie + Ni2aeRUAK+Ar5bxu1s3rYv38fwXALcxpr6VDHOUJBUnkJYeQFOIh348v5RnSpxsqWb9wJvs3LeLg5iXs + 27CAfbK9f/NCDmxexIEti7h121L2Sbl7wzx2rh1m57ohdm0Y1mDv3s3DcmwB+7cqLbxaSh1b57F3ixzf + OEuuU2mgZ3No2zyO7JzHsV3zuX3HAo6Ijm4f4vZtQxxVaZ+3DnJEaYuCvEOajkn9t8v73L55PsflfW6X + uo9tWyilaLshwve4Wsd4x5Lrun3bEo6Kbpf7vmPHCu7avUK2F7Fn9Wy2LO5my4IZbJ6v1k6eoa2bvGlo + GhvmtmtaP6eNdXNbWDPYogHgFfOmMTjQwNT6PJJT/PHwtuR3AGyiyVYDwGb/twDYP9yd8Hg/ImJ9CY7w + 1KJ/vf3tr68X+J8AsFr7V6VbVMBXgV9zu9GY2Y0yRAE7GyCwIR2jQeqHWQ0Aexh+BHaWOhTQvQZ1lbwC + DcD33wHw7ymgrwFf7bWv+rFZXuvVMUP0r1rbUH0Xv0cBG+Tlaf47AG4oYFpzscxjvwNgD/H//hUA+wbZ + yjhkAMDewQqUGwBwbJwT6QkulGV4MyVfT0dZEL1ib3SVhNBZEEh3QTAzC8NZMCGFTa2F7O4sZ1dLLjtr + 4tlZGMieLFfuznPhiSIdr5U581GFE+dF34g9ch0Al7rwY7kb38k559JVFLApn8SP4fMEIz6PM+az2HF8 + GjOWz6JEMcZ8GW3GWRlfzsdZcyHemrMxZnwVM46LSSZ8n2PDb2JP/6PGk1+rDQD4myJ7Lpc48EO1G79O + FYd9eih/7Y7gh65QLs0QW7TDn7M9QVyaHc3ZWRF80KHn9XpnXhPb6f2Jzlxo8ue7thB+ag3lmwlefJxl + xTvxY3n3Kvx9L3oMH8j7f5JgylfJFpxPtdF0NkXKZIO+Trbl23S5h2xnfigUv7TYmQ9lnn4135kncsTv + y/LgSI6ePfmhbCqKYmVZIktuAMBrO1vYOKuXPUuXsGv5Svqb2ykcn0lccCTRon8DwH/QNfj7RwAc/j/o + 3wCwfxRhgSoFdDyJsSliK9YwMHMOM7v7xA4sITE+5ToA9tMHXY8EDggwpIQOCDQA4N/XAZZzA8PxDwjT + pLZ/B8BR10HpdWD6/2MArMCukgK+/vJdKPn5RWplsNxTZGTK/6cAOCgohKiIMOKiZd4SW7JgfAiTCyJp + rYqiZ3I0s5oVBE7WIPCWxWVaFPDhrS3sXl3Pop4Cqv8NAI/D0tYES3szzESmtmptzjH/LQC2dbbR9K8A + WEsRq6T+LKMzx8JRpCL7nBxk/PIjQ9pK//ASjtzzAA89/RKPKAD8lAEA7zh8XIsA3rDnIEdO3M+9Zx7l + vgcf44GHn+ShBx/n4Qce55HTUp5+lLuO3cv+HftZv2QVi7sHmFNbx3BFjdiNlSyuKBdVMiTb8+rqWdYz + k/XiS+3ds59j95zg2MnTHLnrJEfvkO3j93L09js5cvQODh05zmEplQ4evp1bjxzj9jvv5o577uXO++7j + rlOnNN1530nuPHmS4yfuE53kdqnzyF33cOiOuzhy/C6OHruL2w9JXXsPcHjzBm5fu5Q7l87mznnTOdY3 + iWNitx4rjOC+jGAeSAng/hhv7gp15XCQjh2BjqwPEP/az4ohX0v6ZLzu1o2lS+ac2XbjWOliw1YfFw4E + +XAg0IMdPk5sk/luh68jO/10bNc7scXbni2eNuz0suOQt4479e7cpaCvvxeH/T056OfKAaljv6eOgx5O + HHTTccDVkT06B3a5SF1ix25xtmWTk/j7Yh9vsDVnl5MdB3WOHJFzbne05ZjouM6OY3L+Ebn+VjdX9ji7 + stnelQX2zjS6OVDma0exnw2VMn+16m2Z72PHLjd77vLQcdLHjVNyH6f0zlK6yGt77nS34naZq485mHCv + owmnnC140NmSR12tedZDAWBHXpT3etbTnQf99Bz08mS5gx0zrCwoMzciRez2YIsxeElbdpZ25yhzv1oO + z1GBX6nDxc0aZ3clS3ltIVIpkE1FJjIfmuCmG4e/zNdxYW7kJAdRmhVJVpKfjIF26P0s8fG3FFvBEk8F + f/3VPKxseyN5DyOxO1QUsCHaV635a/gjmOHPYC7eNoQn+FMyIYfp/U3MHO6gsq6A4Fiv6wBY52OJnfvv + 4Pc6AL4h/fN/BMBy7f8EgN28R+OlH010nI343L8D4OQ0HQFBcq4GgM0NYPR/AQCrscBajQn20rc1/XcA + 2CAzWwWfDDJVvpeVSvss1+usxX6y18CuyqikltbR5Oygrcd7IwB2Erm4Oclnu5ryVkU5amlyZZ9cew2O + aems/0Uq+tfN1Um2DZ/TWdqtm9TjoxcbMNAXfYAeLx/xwTxdNeCr3tNJpXz+VwDsbADA+oBgGf+D8Pby + wdVVrtHZ4ijfh6O0W5VG18F+HPZ2Y7GzGSMajZPs85L2HRLgQnSEN0nxQaSmhGhKS5UxPN2f9AwfcsXG + Ki7RU1npR80EP2oniN01wYO6GmcmVFiLHWdKaZ4JRZnG5KeMIyduNBlhN5MWOIK84BFUR42mMW4sA2kW + rCywZ59ce3yyJ6cme/DwRDeemCD2RrWOxyqdOF3mwF0lthwqsGDPvwLg/N8jgJenm7AgdSyzk0bRGzeS + zpib6U4Yy38GwGOYFj+KjrhR2jmzU8xYkGHDyhwZ13J0bM5yZHu6HTvFzts53kqkgK9Iyp0p5uxINmN7 + kilb4o3YLPbVptixmraKLbglwVjT1kQTtiUZadp+tdydZsahfAduzXHQIPHm6FHsjjPiaLI5p9IteSLb + hpdy7Xiv0Il3s215J93sKgA25e0M8xsAsAMXqmw5Vyq2XOkozpYpADySr6X8umwMl8rGclmDv0aaFPy9 + vgawkhYFbKHBX2393xtSQF8DwF+Wm/HZZF9enBjMrQVe9MXZkuU5hlAZf3wdTXF3krHKxQB9NQAspUol + 7uBsjaMcU7KXsVlJW4tbleq1ijyXvquuc5R52cnNTpOju502T1trAHjsHwCwrZMpDvKezi6WuLmIPyFj + po+00/hwD7EpQplaPJ7umjym5iWRHuJOqMwrsSGuVBeJHzyj/joATonyIDzAmuhQB40dKQCcGudMZqwz + 2eLn50VbUxhlSUmkOeURplRqANiCerGLp463oTHNkoZ0UxoyjLUgqZZMU9oyLWiVZ9cixxrHm9GYbEKj + POum5LG0phjRIe2yJ9ec2cW2Mvc7MVj+3wPgniwzerNMmVNgAMALCu1YUGDHokJ7Fhc4sLTAiaVijy8v + k/lL2shsaS/96Rb0pZrTJ224P0m2E83oSzCjR+z86dLGWuKNmSpts1F8geZEI9rk/qZLv1MZP2eKH9I5 + 3pT+DEuWlbqxsUbPpkofNpV5sTpXx2I5b4Gcv0D8hfnS/hdI+1+WYcta8Qe2l7hzQM47WubJXcXu3Jfv + xCN5Mv9J+XahM58Vu3G+2IPLRZ5cLnQXP8qZK8V2fFdixfclFnxfbIC/GvjNv6q8cQYAnCvbuWM1fZ8z + hu+u6vu80SLZLpD9BeOkHM13haKisVyR7W/zb+FSwc1cyr+ZC3m3cDb3Zs7lj+HrQmMul5qJLLhcZqGl + fb4W+ftdoRnfFJhyMd+Ec3LeF4VGfFo4jg/kvd7OHMn72TfzpYoirrTmp0o7fpD7/y7PlCvZRnybY8rl + XFO+Ua+Lrfihxp5vqm34VMa/17LG8Fj0CJ6MG8HzKTfzQurNvCWf7ataW76Z6sh3LbqrAPgq/BX92GzP + 9422fN9kzc9t9vw8zYFfO0QzHPmly4mfuxz4i+jnLjmmQHCnIz90OvCj6LsOWy5Ps+bydBt+7HHmlz5P + /trnw2+iv6o1h/u8+MtgAN8tiePHrcX882gTI4arQujO86EuwZbyUBPy/UYTZz+CUPMRRFiPIFqU6TKS + CQEycEZbsibXhWN1wTw+I5anOmM40xrIvlJrlo+/heHEm5iTOIKFOSNZUjyauTmjmBo2ggrfm8hxH0mU + /U0EyGSjlwnbz9sFfzH4Av1dCPZzJCLInugQe4J9rdC7G+PpMlYkRpKrlG7jDJG/oiC9tZYiOjbcmaRo + 6bzSgdMSdaQlOZCqUj9LB8iQwTkjyZhcUXmKCXXSaDvUvxyyjFkpD3dnhTG3Vo/lYPlNopEcqLmZfbWj + 2TtlLPubTLit04bDM+25fcBJJIZkvz1HBxy5rV/HngEXtsx0YU2nigJ2ZkW7G+s7fNg8zZfNzV5sb/Ri + f5ueOxT87Yrk/hmRnG4L5sQUb07KxHZGJrbnp7rydocHnw148vUiX84v8eDcWi++2RfGuUMRfH48is/v + ieGr0/GceyieC4/EcPmJeH58Jo5f/hTLr3+K5Nc/h/P3F0XPhPHrwwH8eK8P3x7y5Jvd7pzf4Mz5te58 + u9GPbzcEcnFNgEiVQXwturQ6mG/WhHJ5bRjfrovQyvOrQvlsWQAfLNPz7vIA3lruz6vL/HhpiR/PLvDm + oT6ZiLtsebDXkScG3Xlkto4Tvdbc02PF6blOnBwSY7/TknV1o1lSPZLh0puYnT+SuUVjxMmR/ZOd2NXu + w11DMdy3KJGTC5WSuWNuHLfOjGbrtHBW1AextC6cGQUelEeakOM/kqqYsTKwyuBWYM1QibQz6YC7msRQ + mBPO8yuSeXVNCq8sj+PFhWE8PxzCM0PBPKXWK+735UynFyfbXTnZ5sZ98pxOtrtzok00zYOT0z2kdOOe + NldN9yv4N1PPg31+Ij1n+r25f6Y7pwY8eGDIhxNDvhyb5cP+Pm+2dnmyqtWF+fWOzK61Z1atjv6JzvTV + OtE/wYmBCQoAu4rcmCPl3EkezKv3ZF6DmwaAhxpkQG91lPYjg/k0Zxa26hhucGDOJBmQa1Rk5O8AuCHf + lik5FtSmj2ViykjqU26iNWMk3bmj6S8wZlAGtXkyoC0oM2NhqYlMDEasqxKDY6IZe+vFUekQx6pHPvNs + X04N+vPAvCDOLAzn9Lww7h4IYHeTK+vlnhcWWdOXaUJb0hgaEkbRIEZTfapMZGJ0tMokMb3Qke4SHT1l + LnQW62gTo605z5YWOdaWq1JimNJTZMr6di8e2JDBR2ea+PHtXrgk+kuXIQX0Ly2GFNB/rb0OgP9+qYif + 38/kywfCeGWrC08usOdktyWH2i3YJwPZrTNdOTpPz4lVEdy/IY5T62M4uSaae9dGcs/6KI6tDWef9KHN + 0j5XtVlLG7K4AQDbsqTclqUVDiyvcWVlrRvLRctq3FhZLf12ghs76r041KoAsJ77urx5VAbNP83z4R1p + /+e2Sf/YG853+0P44WAwPx0K5pejYfz9zgj+cXcU/3Uilr/J9l+PhfKPYxEyoMr+W0P55x5/ftvsya/r + Xfh1g2ijOz9t9uHydumHuyI4tz+BTw+l8tqeTJ7YVMy9K8vYP7+YTbPKWdU/icUzpzL3GgBu66CzvYsZ + 07ppb+mktrqe4vwqMtMLSUxMJyY+mbjEJJJSx1NUVkp9UyMzerq0VNBz5g1p8HdoeIjBuWrd30HmDomG + B68D4L45/cyc1WcAwH3ddM7sZUZvj7bd09dLb59KDz1A/+xZzJo9m7lzpa7BYebNW6itA7x40VJWLFvF + quUrWLV0OYuG5jHcP5tZUkdvZ6vc/2SmTy2hbXIaLROiaK/yp73SkxlVOjqqbemeYEf3JAc6JjrIcScm + i4E0scqNmmoZAyo8KS4zAOCSGwBwZZmeCVLP5OogJlYGSRnKpMpwUQy1pXFi9CVRXZJOZVEOxXm55OcV + kFdgAMA5uVIq5ZUYpEXx/q7cPAWCy8QJLSUzW5XlZCkgnFdFllJuudRVJaomr9AAfwuLJmgqLjYAYAME + NgDgspIaTQr+qlLB3WIpr0mt//uHNYCvqqRU6hJVlP4OgFUkcLkcK5f6K0pUJPAELSW0IS10FdWlNVSX + VcrxEkry8ynJzaQiK5XazPFMSk9kSlIsdXER1EeH0RQeSmtYMNODg+kKUgqkMyiAdn9fWvx8mOztRpmr + A5PCfJmWHsOMwvG0FibTXJzC1NLx1JePp6EijcbKNKaWJdJamUzPlDR6JyfSWRnG9BJfZpT4MFQbxMr6 + SOmPYawo8bzqYNmzM1/m0zJnHmgI4PHWMJ7piOK57jiemhHFmeYQTjWG8mB7Ao90ZfFUbxHPzC7n+flV + Ms6X8dRgrsxDSTzYFsVT9WG81hzHa/XRPFPmxwsVgbwyIZy36mJ4pyGOp4t8uCPGlGORYzmTasVLFe58 + 0hjI2ekhXJA5+tuZMVzqS+DcrCQ+nZPKy72JPNQeyaFJ/qyRe1xV5MqGKj921kVzsDWFO3qyuas3l1vb + UtlQE8bqihA2To5mw5Q4lk2MYEVDDOtnpLOpL5/lnbkMNmcxqzmfvtYyZrRUUFmdTUJGNF4hXuj0brgF + +uAZ5ItXkDj24uBbaQDYEnMHK0xsLTCxMcfY2kyT+jHiRo2zNGaclYqAMZXrxLlS/6x1d0KlfVZRvzoP + HS5eSi4aEPYQe8vd1w1n2X8NAKsU0DcCYBXdq+CuSvPsG+StrferraN7Q/Sv+qeuAsXhMcGGCOCNK7n1 + 9gOslnL5uqWyvZ/nXnqaT859zLkr53nviw948qVnuO3eowytXkRz33TKp9aQU12kRQCnFGSRlJ+hKbEo + m6Si3BuUoymh0CAFfW+UBoDLS8iuqSJ/4gRyq6tJLSoiNjONkLho9BF+6MM9iYjXawA47yoAnlAWRkmO + O/njbckX5yY/yZwiKSfnuzJd2mzPlEgZp4KoSHGkNNGesiQnSmJtKRQbODfMWAPAmSE3UypO1lRxbGZU + eki7d2ZOnRcLWnzZMCuKW1dlcnBVGpuHIhkWG6Sn1pKZk6wYbBRHboYnq8XeWNHty4oeP1b3SnvrC2Td + gD/r+v1Z3e3N8unezJ/qrQHggclhdNZEUZsdTmZkIMkhYaRGJZMQnkxUcCyh+lCCvHwJ8HAnPsSfsqwk + eptrWT+/h40Lr0UAG4DvhuFu1g53irrYIMfXz+9i1dxpLB1oZqC1mvYJ+dTkJZKbEEJ8gDsJQZ5kybOe + XJzJvO4mti4fZP8GBYAXs2/TUvYrGCzav2UJB7cv18rdGxawa918KReyd/Oi69D3wLZFHNS0WCsPyL59 + W+aL5rF741x2r5/DPrV271YVabyAozsXcmSH0gKObJ/P7dvmc1TOVTqyVSTXHtG25ZhsH90krzct4PbN + Cvwu4vj2xRzfIdq5RNOdu5Zzx65lmo7vXMqxbcvkvKUc3SrHrwFguWafSl+9RL674enyfRm0flDB31bW + z2nRtLq/iVUDU1k1p4m189pZs2gGi4bbaG8tJT0jBG9faxwVeNVkgp2CvxrkNcPJU8FRx+sAWP34a6OT + Yy6mGoz1C3MjJNqHwDB3vP0Na/+6eck1PrZynVozUK0FbNh287bGVa5xcjOst3ctAtjMdpSMDbdcjQI2 + kv1qHT7z6yBY/TD7x2hgC5y9RV6qVGmhLWVMUsBXyQHvIIPUtmeAvdy7DSpttJt8TgV7NaltbU1hG5G6 + Pyl9bPDwUesAW0lpiaeUSl5elkSE6a4D4PamYm0N4LgIAwB2VwDYdQxu7kZyral8D1a/A2CVAjr09xTQ + sbGO4ve5UFsYJDZGBLOnxIq9Hc/QpDgGpd8MVkczWBnLwglJrFfgd0Yxu1pz2TMlmV3loezL9+TuQnee + LHXj9QpXPqpy5pzomxK1/q8D3xQ58m2pMz/I/PFdqQvnM235MsWMT5OM+EL8zM/jTfgkzkgDwJ9Gj+Oz + WDPOxllyPsGGC4m2XEyy42yCBV/JeHEx1ZQrudb8WuHCb2KL/lLtwvfl9lwssuFcgSXfiL36lwYv/j4j + hH/2R/FzXzhXeoK52BPIuZnBXJgdwae9gbzW6Mwz5eY8XWDEq+IbfSK27fkpPnw92Ycvih15N8VYW//3 + Hbmnd6JG807EKN6PHssncq9fJVtyIc1e07nxUibbcz7ZlvNyr5dSHLiSoeNyrjNfFjjxtlrLK8eZhzNd + uSPDg/1ZvmzPDWZdfiTLSxNZXJ1xPQX0GrFb1/V1sWPhAnYuW8Gc1g7KMmScDosmJiTq/wYAK+B6LQpY + Xv8/AcABEVokcHhgFGFXAXB4YCzRYfEkx48X+3Aic/rnMLNzprSzYhLikrX3VtG/CgCrH8f99cHo9YGG + ff5h+P8B8hrWJ1bgV+nG6OCQ0BgCQxQ0vRECx12XAaj+nwPAAdq+31/7+6vy3wHwtYjfALVPvo+AqyBY + AWAVARwankSwukc5538VAAfIszPo/zkADg8LIS4qmJSYIHISA5hYEEFbdZTY/SKZ1/oboxiensCKgUx2 + raxh79rJbFlSw1BHltivvoQrAGw9EluLmwwA2M4MKwcLLMRmMbMzFRtprPYj8X8EwDprTfZqjcurAFhF + GBngkBmWjsZia5mKzDC3s5Bx0xZXb19Sc4uYObSY2+85w8PPvMyjL7zG6ade5PDJ06zfc5BF67ewfPMO + jp06w+nHnuaRp57nqef+zDPPvMizTzzP84+/wHOPP8fpe0/L3LaLhT0DTC+toj42iebwaKaFRTA9LEzK + cBrDI2gdn8rM6hpWi/+0b9de7r7vPu57+DHuf+RxHnjoCc48+BinH3iY++5/kBP3PcCJk/dzx10nOHTs + Dg4dv4Pjd9/Dvffdz6mHH+aBRx+Re3qUBzQ9punBJx7nzONSl2yfflReP/oEj0jdj5x+iAfvvIv79+/h + 9JY1nFk5xJn5HZyaOZmTLQXcVRzJfZlBPJDiz/2xvwPg7QF2rJfxeIWfFUt9rVjoY8GQbhxzbUYxX57H + WvmOt3k4ctDfgwN+ruz0dmSnlwN79M7s9Xdll78LW2Xu2+hlxxbRPl9njohtedjPg4N+7uySa7b6qahh + JzaIXbrZXeRqzyYXe9bqbFjjYstK0VJ5rot0lgzbGMv7mrDa2ZYtrk7sVKDY2U5ky245b5dcu1Ns4i0e + rqx3c2OFkwcDzq5M9nSmyF9HQaAjFf52tOjtmefjwC43J+5yd+V+H09O+3jwgNjNZ8R+Pu3jwn2eDtzj + bM09YkOfcrTkfkcrzoi9/oiTDc+4O/K8hzPPybVPeXpyylfPXimX2jsw3cKCUlNjUsyNCTYdg6eFEU72 + ZtjLd3UNZDpJ+3SWz+TsKlIg2NUAgXWu5ri4mOEqc7iLzO16d0siA5xJi/GjQGVqifcnLMhJ+rkd+gBb + mStV5K8tHipls8y5Dq6GP6I5eai5XepV8lFzvvrjl/V1ABwh/bN8Uj4dYgvOHBI7fXIugdEe2LmbanLw + NMPWTeyUq+DXRuwVZbMom8bOxVJb3kL9mc1B3sdBg7/qD2YiZVOIfaHgr5LO3Vz2/w6A3b1Hyz2PITre + hsxclQLam1xtDWBHGZfM/h8CYGX73AiALbSxQI0JVvaWV/WfAbCFrfhcN8DfawBYyVyus5H3UuBX+VYq + i5IGgrU0zwbgeiMAdnZxwl3agJKnt0jajKe3i5YuV63166xFMd8AgKXdKOnE93OV9u3hLj6bs1oT2BE3 + Nx2eXq4yT4kvJj6iX6Cf2JVeYg95yHFnDfqqNX91V6XuR6eif+WYq7TzgIBgmdeC8Pb0EntK6pX30zma + 4qjB39E42I3G3uYWbK1kfLW6CZ3dGLylrYX4ORId7kFSfADpKaFkpIrSg8nIDCRTxuT8Qj/Ky/ypqQli + 8iRRrQ9Taj2YVO0k/pUlZUXGlOYZU5hhRF7yWLJjR5EeNpKM4JEUix0yOcGE9hRz5mRaiY8t44LYQUfF + fjk1yY1HJrrwRI2OJ6t1PF6p48FyR06UOnC02Jp9eabszjVlZ7YCwBbsyLe6DoCXpRkxL3kUs+Jvpiv6 + JjpjbqI7fgw9yWoN4HF0aSDYkAJaAeAZCaPplOMzxX4bTDPXUtuuzpXxRrQ5y4Ft6XZsS7Ni23gLtqaY + si3ZoK3JJmxJMmGj1LUuZgxro0axLloUO5qN8WPZKPVvTDAylFL/BpGhHC3XjWNvtnyObFu2Sh2b5Zqd + 8UYcknrvGW/GQ+nmPJthzmvZNrwl383baWa8mWLCG2LLvZlqzAeZFnxWoCJ/7ThfYcNXxcZ8UTSKL0tG + cbZUrf87lq9Lx3KpbByXK8fxfY0p34muVJvwbfVVAFxrfj0N9I9TrPixzlqLBP5JpNYGVucbALA5X9YF + 8KrM0UeKfZgVZ0eW6y2E2o/Cx84Id3vpx07S/2SedZL27KDm2WuwV44pqeh7G5G1zNnWqlSvVVr260DY + Enu53l7GUzvpxzYylltKfzWVOeR3AGws58nYI3JxtZJ2bIW3uxUBnjaMj/KmMiOSjvIM5k6SObsym4qE + AJIDdeIfezKhKJlZHZNZOjiDlokFJEd4EO5nTVSQPYnRrqTEujI+zpmMWB2ZMXZkR1qSF25GYZgJJeLn + l0eZURNjwRSxi+uTraiTZzRlvDF1qUY0pBvTkmlOW4YlzQr+pljSkGzGVHmuDdI2piaOpTnZiPY0E7qz + zRkotGWoXGcIZCu2oy/PRksP3ZdtUK9KFy3teqZIAeChImuGC2wZFl9hnpw7nGPL/Gw7FuTYs6jQiaFc + e2ZlWtOfYUV/uiV90k57k8zpTjRlRrwx0+OMaY4bR4P4JXXiB9RL25wqbbJZ2m+LtOcOuW6GtPvp0jd6 + xpuysEDHxmo9myt92Fzmxbo8Z5alW7FY+ulCBX9FC8dbsjzdlg1ybGexB4fkvLvLZZ4rcedB8RWeKXDg + lUJHPip25myJK5dk/7dFblyW86/k2XElX9pXgbTBQpXy2UiL/P3uBgD8fZ602fxx/JgrZfZYvhNdyRrL + 5UxR1hiuaCB4LN/KeVfypD1rMHgc3xXKaym/zR/DN/mjuSS6mDeKczk3cy5XtqXOS0UqTbOp+HJmXC40 + 40qhuZxvIvWY8HWuMedzxvFlnvhv+eIjFYzl/dxbeCNtBO+kj+BLGc9U6ui/VNnzc7ktPxVayD2ayv2a + y/XmfCPbCiirFNOXqsQXKzLh5bQxnAkdwZmwETwaPYInYkfwUtooPqmw4uIU8ScbdVxpFl9Li/w1pH5W + APjHJtlulL7YbMNPLbb83GbLL9PsNBD8ywx5f9Gvnfba9o/T7fhhui3fT7PlSpsV3zTLvbRa8r2c+1On + Kz93efBLpwe/dbnxc7cbf5kTwPeL4vjL1lL+62gzI2bmeTA9TScNxJya4DGU+o0ky2UEqY4jyHAaQZaU + Rc4jmOx7C90R41if68CJxiBempPEm/PG8/LcWB7p0HNkij3byo1ZKV/68sKbWVp8M8PyRTZG3EK5XJvt + cQuxTjcTIcZMuLcTYf7u4rh5ioPnKo6bjuhgR2KCHQgUA8PLWYwj57FaFLBKA+2looHVtoeJOHfi7Ifp + SI7xEKNHlOBKeqIj6Um2Iiuyks3Jkcacl2pCqahWnO3GdDNmZJoyWxrSqiIjdlWbcrDGiH3lN7O/8hb2 + 145l3xRj9jSYsa/Vilu7HTjU58SR2WKUzpZyliNHZzlx64AzewbEMO1xZW2Hgr/OrJ7uzuYuPTu7A9nX + HczBzmCOdoVyd1cEJ6aHc6otlFNNAZyY5MmJCc6cqZVO0uDK6x1ufNjnzhfzvPhisZSrvPhyqz8f7Qzg + vb1BvH9bCB8dD+Xze8K4cCqc7x+J4eenYvntuWj++lyYKIR/PC16LJDf7vflpzu8+OGgB9/v9ODbTdLp + 1nny4wY936/3l+1rCuDKuiC+WxsoCuaHdaH8sD5MtkM0KHx2hT8fL/flAynfXenHWyv9eXW5nucWevJQ + vz33dVnwQK8tTw678dR8Nx4ecuL0HDvODDtxap4ztw/YsqlxDEtrbmK4dAT9uSOYlXMT84vGsKragu1N + LpwYjuHMkhQeWJzC/QuTuXswXr7rGHZ1hLOxJZRN02OZW+NLvQw65eEjqZWJvEn9o0s6/0LphDsanLi7 + z58XVsTz7qY0Ptg8nnfXxfHmylBeWxLEy4uC+NM8f56d68PjMz0406HjgWmi6c6cnuYicuX0dDHmOz05 + M8ODk+0u3NPixP2y76FuHx7s9RV5c2aml0jOGZByri/3SHm014t9XV5sm+bJ6iY3Fkxxpr/SjhkltnSU + 2tFZ7kCXqLdKgWA3Zk/0YO5kLwbrfLQfcoenusu2I4NT7VnQ6sgSubclcl8qAnhoqgOzJtnTU2NHd6U9 + HSUOtBbY0ZhnTX2OOZMzxsjEc5NMMiNoSx1BV+ZIBnJHMa/EiMVlpqyoEOdHtKlG2vEUc440W3OiU4wo + +S6eWxrKn1dF84p8T69vSOSVjcn8eV0STy+L4Y5uabt1OpaJ0TYry4i2hFtoiL2ZRjWBqX8zqX82ibHS + nudAhwzwMwp1TCtwpCnHjnqZ+KZmyuSnrRlsSpcM6usUAN6YyQenp3LltU7+eaHnOgDml1b4tV62J/Jf + v9XI62r+eqGY799M4+MTwbyw3p5Hh8SZmmXH6SE3Ti/V8+C6MB7bGcezt6XxwrFsXrw9kxeOZPDc0XSe + O5bB06IH9yVwXNrv7tmubGy3Y029tWEN4Go7llXYsbTSUQPASkurnFlaoWO5TMJrqnRsm+LBbS2+3NHh + w33dnjw2y53Xl/nxxZYQruyL4C+3hfOXW4P5+dZAfj0UxN+OhvKP4+H8844I/nk8gr8fDeNvh4L5bZ8/ + v+7W8+s2b/660YO/rnHmt5UOUorW6fh5ozs/bPXm252BXDoQycWjiXx6OJNXdhbx0NoSji4pZPucYtYM + 1LCkr57Brib6prfRM62TzmnddLR30dY0g9qqesP6v2kFBgAcl0R8UjIJKclk5IjxU11Fc1sLvf19zB4a + 1ACwSvk8d+5cgxQAFs3+AwCeqaWA7prZzYweea/uLrr7erTo35l9A/SpCOBZs5g9ezaDc4cYUgB4aD7z + hhewcMEiVixdzpoVqzQtHp7PUP9sBnrk+q5p9HRMZUZLJW312TRPjKO1Ooi2ah9m1LgzY4IjPbWiyTq6 + prgwfbI7LZO9aZjkx6SJeqqq9BSLgVFU4k1xsTclotISH3E89FRXBVFbGcyEihBRODXlkdSUxVFZlEh5 + wXjKCjIozc+hMCeXnJx8cvIKNOXmFRmUX2JQbqlBedekQHAJGdlFpGdJKccycyvIku88O79KVEleYY04 + QKKiGgo0GQBwUXGtYY1fDQAb9DsArv1fA8BlCgAraKyuu0FFVZQryTkGCFwtqtFSQ6tol6oylR66lNLC + Ai0VdGVeFhNyM5mYncbktCQmJ8cyJS6aqdGRNEdF0B4WxoyQMKaHBDM9KIhWPz2NPt5M8nCjwtWJCQGe + NCeE0ZoeS2NGHFMyY5iQGcWkggSaqjPFqM6iZUIa0yam0T0llY6KCFryfGnJledb6M7CiUGsawhnU52U + pa5syrNnrzh8x8qcua/ajSca9DzfHMCf2kN4aUY4L04L4SmZL59oDObptmie60zhT92ZvNSfxytz8nl1 + MEdsjnRe7E/gpc5o3m4O55OmSN6fEswbYri+MyGADyaH8nFDJB9NjeKlUi8eU2s7popjlWfLe9K+vmwL + 4PyMQC52BfLNzHC+Hojmwtx4vhhK5uWeKM40+nO7OLM7S3XsrfHmtrpgjjfFyHyexIMzZbzpzeDu9iRu + rY9kjzhHu0VbJoaydkIgq8QZ3tASzRa57w2dmayYXsDS6eXMa6+gu6mU6spMUjNj8QvzRefriou/pxb5 + 6y4OvquXB9aOdpirHyTsrDGzsRBHyAITa3NNxlZmWjqyazKyVKWJnGMmTpNynmwM/0oXqR8pHN0ctVIB + XwWAPf08NKkoYLWGlam1CcaWytH69whgJRX5GxCm1yCw2lbpoFX0r0oVrdbrCYsOorymhKUrF7Jr/3aW + r1nC8rVLOHhkL0+/+AQfffkBZy+f5b3P3+eFN1Uaxcc4evouNhzYRvf8ASoaaxlflEViXjoJeWmidOIL + MknSILBBiYVyXBRfoJQtyr2uhMJckorzSS0vJqemkvyJNQYAXFxMXFYG4cnx+EcHoo/0JiLej/EKAOeG + Sv8JZ0JZCBX57pRl2VEpDnlljhUT8m1pqfKgtz6Y/sYIuieFMiXHlYmZLkxId6Es3paiawA4aDRpATeR + FTKGCrE563NtaZM5e5bMJ4va/dk4O5o9S1PYvzJVA8Dz292ZOdmG/im2zGmQ+b/NVeZ/TxZN92LhdE8W + yry5eLoPa2YGsaY3kJUzfFja5sPCZj3zGgOZI22tuzaWiTkR5MWFkRoeRWqkjPthSeLMxhLkLZ/TzQNv + nSMRek+K0+LonlrNitnTtUhfDf6qtYAXdLNuuJPVgx2iGRoEXregh1XyelFfE71NlbRU51GTm0Se9Pt4 + eeax0mYSg3woSIqmY3IFq4Z62b1mMXvXL2X/luXs27yMvUoKBm9ZpkHh3RsXs0e0f9tyDQof2LaE/Wp9 + 3RukIoX3bV4o181jj0ilh969bpC9G4e4dfM8btu6gEMirdy+kMPbFnJk2yJDRK9cf1S2j2j7rkr2H94o + 52+Yx63rpI71Kjp4IUdV9O+OxZqO7Vgq5RKDtqvo32Uc2bKY2zYt5FbRoS1yvUphrVJXL5vJ+qF21g+2 + aVp7Ff6um90sMgDglf0NrJ7bzPoF8j0v7WLFwg66OqpkDonAR2+N01X4a6/W/nU0xcbBBDtnc5w9FRx1 + wt1HpUCzkT5lhZ3ODHsXc+3HWA+9A97+Ojx8HXCR4zr1Q6qbpYwRNrh728t1V+WtALCttl9FDTl5WF2H + wJYO42QcGaPBYGsnYw0w27moaB0VAXxDdI67SkmtYLC8t5eMA1paaEtURLACvV4BDiJHvAKvSrY9/VX0 + sko5b/sfpY4pefqqiGU7vDTZiKw1efsYFBHuQlF+NC0NBbQ2FsucFUtshCt+3ua4u43Ton/d3E3wkNee + ftb4iv/nFyIKd8BfFBBuR2ikPXGxjmSmuDKlLIyBqSms7MphQ08u62Zks6plPIvrEphXE8O8qmhW1Kko + 4Gy2t2aJz5fCnuoIDpb6crfMFY+Xe/BKhTPvVjjwWYUjF6VPf1PswIUCe74ucuRKuRuXS104l2XLFzKn + fJZswudJxnwaZ8RHMWP4WAHWGCM+j7fQYKoCqxeS7DSdTbLkq2QzzqeZcinHgitFtvwotulfqnV8J37E + +WILPlf/QlepxupcxOkXe7IniJ/7Q/h+ZjDf9AdzYSCY87ND+bDTlz9NknktbzRnUkfyeOpYXs234L0S + Oz4qsue9LAveSBirAeC3o8fwZsQo3gq9mXcjRvNxrDFnk624mCafS3R+vCMXUhw5L/d4LkHuOdGeb9S+ + DCc+yXbk1SxHns4UHylN/OE0D3Zl+LI5O4jVuRHi5yewqDKdJbWFLGuoZk1HE2t7O9kqNqdKAb2wayYT + xc5KiYgVHz+CiP8RABuiag0AOIqQIDlPpODu7/od/irgqwBwhOyPCoohMiia8IBoKWOJC08gLTGNupop + DA2InTujR9pZEQmxSYTKffgr+CtS4FfvGyht0R9vb5GPSpkZgq8+WJMCvdExSSSnZDI+NZuo6ERtn4oO + DgtXYPRfAfA1gBp7FajKHPT/AgAHKPB7Vep1UJDUJ9t+/jFy/zHo/SL/oGsRvwoUK9gbEyPzanymVqrI + 32C5HwWCVakg8f89AI65qn8FwP+qfwXCKpI6XO43lDCxLWMjQ0iWuTgzzo/agkjxAWLomhRN58QQsRtD + 6W+KYN6MRDbMK2Lz4gpWDhbR05xESboHoV4m6KxHYm2uALDYKupHZCcrbF1stT+92boo0GspNowB/t4I + gO2uyt7ZRkr1I7P1HwGwjMfm9iZYqIhiWwt5bSv2kQ+pOYXMHFzE8RMP8cgzL/PYC6/z4NN/5uCdJ1m2 + eQfDK9exbuc+HnzmBf705ru8/u5HvPXux7z51nu88fKbvP3nt3jvlbd58fFnOb7nVoaapzMpLplyd29q + de40OLrQ6KBjsoMjVTqxs/39ac1IZ+XAAEcOHODhxx/j2Zde5sVXXuflV98SvcGLf36VZ5//M888+yKP + PPokx++8V2ytoxw+fpy77j3B6Qcf5tGnn+bxZ5/hMa18lieff17T0y+8oJVPPP8cTzz3HE899wLPPfs8 + Lzz+JE/dcw8P7t7J6dVLeGTRAA/1N3KqpZS7a8ZzZ14oJzP8uT/Zj/vjvLkn3J3DQU5sk7F4nd6C1XpL + Vmvb4nPLHLLKwZhVtsZscrRku5s9+3xcRDp2eNqzw0Nsf728DnBjd4ArW/x0rJP5b53MZ9v0zuzxl/16 + D7b4urBG5sZlMvct8hJbyd2W+S6WzJNnNk+e7bA8zyFXG+bK/gF3G3pcLZhub8QMOyMG3WxZ6u3MWnmf + zVLfVnmf9b6OrJL3X+mrY4nYwfO9PZjj4cUML08m6t0pCfKgMMSNykBn8X+cGPZ1ZpebC3eLPXXax5cz + 4g+d8fXkIb0XD8r9PeDjyv3uOk6Lf3TG2Z4zTnaccbTlEZ0Dz3i68LzU/7SnB496yffl68ceH7HldK5M + t7Kh3NyCNEsLIi3M0FvJPCt2u4OTSo1qp8kQ9SmSdq2kc1EQ2BpX+Zwe7jKXulrhKZ/XT16H+7mQEulL + TmIoaXGBRIa6S39zln6rQy/PyDtIzdOOuMk8rNYXdhG7ws1H5my9+vOW+hOXnCOf2StAZQeSdu9tQ1RS + IFVTiuic1UrP3HZKa3MIiHDH1lVsBzdT7N1VuuerANhF7BmxM2zVH9eUfaMzl34m9oSKaFb2hUjBX1dv + 9Wc3uX/1pzBvK7kPsTPcTXFyM8bF3QCAPXzH4hM4jhiZMzPzFAD2Ikf8x4QUexmXTP8bAKwiCa8B4Gvw + 92pqd5Hq51bSDi0dpF/bS6nJ+g+y0Hwtq3+Dv5rE91Jjgrn9Vd9KremrltFxczKUro5yL044is2tRQE7 + id/l7Iiriw5PT/GjRN7eLnh5iRQI9hR7T62BKs/VRcYuZ2eV/lm+d6nbRSd2kzx3T/HXvKUN+Yg8PZ3x + 8JBtb3cZ133ke/DFL0Avc5QnntLG3NzFf3RzxkWBXVVelau0XXXM08ODoIAgAv0DpD7x/cQf9HS1xUNs + TBcn9eeDW3CyGYmj9U04WI/Q5Go3Cm8XY0LEhosKdSU51o+M5FCy0sLIygwlNyeE4uJQqsVmqpsSzdSp + 0TTUhTJpgg9VZU6UFVlSUmAidpwRJXnGN0QAjyEz8hZtDeBKFZE43oruTFuG8+xYU+rE7mpXDtc4c7LW + hYdrdTxW5cgTlQ48Vu7Ig2WOnCx14FiJLQfyzdmTa6YBYBUFvC3Xgk3ZFqxJN2HJ+DEMJ93CrLiRdEWN + YEb0CLoT1DrAphoENoBgAwCekThGyjF0iY3UJzbccLoFS7JtWZOnY1OeE1ty7Nkq97cl1ZLNKeZsSjFh + o5y3UWy9DUlGrJd61sSPYXnUzSyPHMlKKVfHjtL2rZU6ldT26rhRrIq9RY7dopVr5PXGZCOpz5R1ch8b + YkezLW4cBxKNOS51359izBOpxryYbsZr6ea8mWrGGylGvJoo9l3iaN5JNeEjsR0/L7Lii2JLPisYx6f5 + o+T1aC0S+EKZEV+LLpUbc7nKmO8mmGu6Um3Kt1UmfFej1gC2uK7vJ5obgPAkeS1S0cHfynUKAJ+ttORs + XQCvTwrj9iJvZkXbkKW7mRBpM77WYpdbm2h/YHGQMdlBxjG13raNnczNNmZYW5saJNtWtkqmWN4gDQhr + UunZzbGTa62kLks7U8zV+v7aOv9qaYdx0n+NsHMywUHGGVcZ+9xdLNB7WhPp50hOrJ4p2THMqspl8eRS + Fk4qokVeF0Z7khvnQ21hArOmT2Tp3Ok01+aTFO5BmIxFEf72xITqSIxyJiXWmTTxH9KjbMgMNydbBUKG + GlEkKo0wpSrKjIlxVkxKMKdWntPEpHFMURkypc21ZFvRlmlDU5oVU8Wmrk8ypz7RlPoEYxoUbJW20irP + U60F3F9gx9xSHYOlzswWn2JAXvfmWdGXa9DMHEuRnCdtenaBFYOF1gzmWTNH2vccFcAo7WFumiWD6VbM + zbQW2TA7w4ZZWQb1yT30pFhI2zahTdpUU6zcZ8xoJsWMZaJokrS1yXFj5R6l/12FwK3SJ1rjRss1Rgxl + 27OhSgFgXzaVerIu35kV8h5L1Lq/ooXjzVks778iw1b6iMyRRWILlLpzb5k7D5S48mihE38SH+mdEie+ + KHPlouiy7P+2QMdl6U/fZFtKaazB2+8Lx/FD4VgNAl8HwHlXAbAW9TuWKwr6po/mm7QxfK0k25cyxvCN + 6FKm7M8ay7dy3nf5xlwpMOhbqedy3li+yR/LpbwxXMgZxfkcuVbq/VqBXhmTvs41Ef/LRO5D+kSu9BPR + hexxfCV1fp4zmk/kuk+0COBRvJk+gncy/h0A/yL975cCC36S5/SD+tOu1PlNodRXacOlKhs+lu2XUsdw + JmQEJwNHcEqkYPCzCSN5v9iccxPFr2xw4nKjPZebbLW0z0rfy/ZPGgS25Qd5/WOjvGeTDT+32PBrux2/ + TrcVqfTQ9vwi2z+2yTUtliLxGZss+bbRjMvN0o/b7Phpmlpr2JWfp7ny23Rn/tLhzE/9en6YH8Mvm0tB + AeDWZBtaEqxoFKewPnwME4NGUOs/ggn6m5jkdzOTfUcy0X0EjV4j6AsdKY6fFaeb9Lw5nMQny9P4cHkS + by2K4dnBYO7vcudgvTWbq8ayongkC4uMaI8zplw/lkzPMSS4jCbR144EMbhig72kA3oTJYZXVLALcSHO + xIrBEuhhgpfjKHxcxhHobUmgryV+XmaaVGpoFSWcGCEdNs6TzER3kbPInswkaw3+5qWZU5RhRoV0okl5 + ljRLB1MLdffKA5orDWFV8Th2y4B3oNaE3RW3iPM/mj0TjdldZ86uqVbsabdnf7eOW/tduG2Oq8iZQ7Oc + NB3ol0bf58rWblfWTXNmVZsz62Z4sa3bn319oRydE82xgSiOdYdra//e0RTAvQ1+nJjiw4la6SgyqT0w + wYEn6p35U5uON3tceGdAx3vzdHy4xI33Vnrw+hoPXtngxevbfXlrry8fH/bn3J1B/PBAOL89FsU/nooU + hfCPJwP5x6MB/P20nt/u8uTnw+78ZZ9omwc/bvTkB6nnp1VefLfSk29XefPtaiUfvlvtx/dr/PlxTQB/ + WRvEz+tC+EHKK6sDuLjSj89X+PDxSj0frPblXTn3dXn9wmJ3Hp1rx6leM073WfPYoBNPL3ThyUWuPDzP + gTPzHTi9UMe98jl2tRuzeuJIFlSOYHbhCObkjGBB4U2srTJiZ5Mj9w1H8cjSFB5eMp775ydy79x4jg/E + cbA7kp0zItjVE8+yhgA6861pTBlNU+II2pOkrqwRrCofx+3TXXhqUSjvbUnh8x3j+WJ7Ip9ujubD9SHy + /QXw9jJ/Xluk56V5Xjw7y5XHuxx5bIYDj85w5JEOJx6STvBIhxtP9HjzRK83D3a4ckI63H2tYszL/gc6 + xcDvdOO06IEu2e7x4L5eL+7odOe26R7sbfNke4s366Z6yoTjRk+xLU1ijDRmm9NeaMd0GdhniCHUW+XG + rIneDNbrGWpQP+LKdoM7s6c4MmeqPfNaHVks97Jouo75sj1X9vVPsqOn2oZuBZVL7bX6mmViaMwxZWrm + GBrTbqJtvBg2aSPolUFpMG8ki0vF2JDJfbO06Z2TLblN2vC90x21VN0vzPfl/Y1xfLojha/2ZnL+YA4X + bs3ly/05fLoni/e2ZvDEgkiOtHuwvsqK4ZxxTIu/icaYm+V7N6ZpvAXN6bY0Z9nLROdAe66TptZcRxrE + OJqYbMbk8WYaBG6Rzz+jwJTVbR6cXJvKm3dP5Pzzzfztyxnwo+g30a9togbRJNEE+HkCv50r4fIr4/ng + riCeXWvHw3PNeXKhMy9uCuXVA0m8fmcW79xfwAePlPLxUxV8+nQlnz5VycdSfvxMJR89W83bD5fxzJE0 + 7l0Twr4B+SyNdqyqVdHitqyosNfWOV6mwG+ljsViUC4WY3JJiQMryxzYPNGNg03eHJvuyYkuVx6TPv/O + Wj8u7TXA378eDeFvhwP5221+/P1QAP+8PZj/uj1M099uDebvt8rx/YH8uNmD79Y48f1yGbyXyEC9SAbq + BVb8dYk1f1spA/Y6J37e5MaPO3z54UAw398exTd3ZPDhwSKe2VLIvSvy2DeYz7r+MpbOnMRQ91T6Z7TR + O6OTro4eprd10to4/ToATk/LJzk5k7j4ZBKTx5M4PoXk1PHkFeQzuW4KXT3dGvjVIoDnzWNwcPA6AL4W + /atSOvfP7qdvllrrt5eu3i5mdHVq6u2bSf/AgGgW/f0G+Ks0NEfqnDvMvMF5DEk5f3geSxcvZs3ylaxd + sYpFw/OZK+f3d/fS1z2Dmd1tdE2bSFtjPk2TE2mqCaW1xo+OWm+65LvvmehCz2RXeuq96JS+MqMxhNaG + MOomB4uTEUhJmZ6iYr04HQaVlPhRWupPZYU4IeWisnAqSiOpLImjoiiRsvwUSvLT5TvKFuWRp+BvdgE5 + uQbwm1dQ8kfll2nKLyzVlJdfKucWk5aZT2pmIemynZFXTlZ+pTik1Zpyiwzw90b9HglcrUFgQxpola65 + 9qomauW1FM/XdA38XksBfU3F5RO146qOa1HFGlgurNQgsAaCixXsrdbSQleW1YpqZLuasuIySouLpCyg + siif6sJcJuRnUauigdNSmJSURF1CPI1x8bRERdMeFklrWBitwSE06f2p9/ZhiqcnNR5uYgt4MjU6hKnx + 4vAlRFCdEEJJXCA1mTE012TRNiVHlMX0KZl0TkqhpSCQulQXpqY50ZnnwtKJAWxpDGVngz/bK53ZJ/3u + 7ipXHprgzlOTPHmhTua7qV680eLHm9PE2Wj146UmX15uCeKV9nBe74jjjc5k3upNFaXwVl+iKI63+qN4 + X+bZL1uCOVvvzye1nnxU7c7nU/z4StrQV02hfN4QzLtVUnepK6+Jk/mm9P+z7f5c6Arg615/vpkp/bw/ + iIuzQ7k4FM3ZeQm83hvOI00+3Cf3dU+dN6ek/genyZw1PY4nu5J4biCNZ/tSZU5JlPkinhPtMRypD2b3 + BD3ba33ZPMmXHU0h7O2MZX9fDjt7K9jaO5EVHTXMnFpMVUkKmVmxhMYE4KJ3EbmJPHD2csdO5yhOkK04 + SDaazG2sMLO2wtTK4gaZXZfJDdvqH+xqXV8V2Wur/Vhhj52znSb1T3UFfRX89ZLnqWCwAsAmVsZ/AMBq + /R0FeBUENoBgdy3q1y/ER4v8VceurdOjyrCoIEori5i3cA6bt61nyfL5LFu1iNuO7ueZPz3JR1+8z+cX + PuW1917lsRcf58lXnubF917hkZeeYsfRfXQO95FfW0pyYQZJBekk5mcQJ303sTDzuuILMjQlKOVnirJF + OZoSC3JJlvadXl5C7gQVAayiiqtJKykhPieLqLRkguLD8I/WExbnR3J6sIwFwTI+BFFdEkBVoRs1+Y5M + LranocKR1loZixp8mNMaLApjVlMY08p9aCv1pSHPi0qxM4siLcgNMSHDfwzjfUaQ5H0TWWIXV4rj3lgg + jlidJ0s7g9k4N5qtw7HsXJwg2+Eyz3sye6rM/Q0y14uGm3QMN+sYanZjsMlF9rsw2OjO8u4gVnQFsqTN + mwXNXiyU/jBf2qACwJ01MUzOjaI4OZqMqFgNACeGJREdFEeAZwBeOhdcba0JdHciNymCaZNKWdDTpEX7 + qvV+Ny/uZf2CTtYMdbBy9jSWz5rGqrkzWLugl5WDM5jXM5WuhgqaKvOoyUuhIDlKA79RPm5E+7qTEhpA + rTyD4c5WNi+Zx67VSzm4dTX7t6xi7+aV7Nq4nD0bl7J3owEI79+2kkO713F491oObF/Bvi2L2aOAr2j3 + 5gXs3rRAzleax+4Nw5r2rB/W1hY+IPsPbJxv0Kb53Lp1MYe2LuHw9qXcrmk5R3cs54hsKx3etkQ7ftvG + hexbO8SuFbM0HVg3zIHN87lNgd3rWijnKqC8iCM7lnFYrtu/YT575Lo96+ayb/0ge6XcvXoWG4an/QsA + bmPdbFW2ahB41YB8v0PtbFrcyaYVvaxZ0k1/z0SKC+Pw9bPBycXww4WDkxl2DiZY25tir7PA2V36mpda + H84WnQK3buqHTAtNatvRxVKTtq1+UBWpbRcPG7lOwV8HTWpbSdXj5mmHi7cdOk/p/27qR1BzVFppBX8N + pUHXonSuRQCr1IwK/v4OgA2RQUrufvZ4iNQPyTfKw89Bk5uKQL5B7tqPy7/LS++gydtXJK+99bYiG3x9 + DYqMcJV5Ooam+kKaGgopzIsmOswFf/H7vDxMtTUP3T3MtNTRHnorfAIUAHYgIFJHYJSOoEgHGYcciI91 + Inu8O41VkSyakcue+RO4bXEtt86vYkdfAatbUphfG8VgeQjzq6NY3ZDClpZ0djemsG9iDIdrgsU/8+Px + Kk/+VOHMm2W2fFBiw1mxwy8U2/Flng1f5ttyocSZi8U6vsq24fN0C74QG/jTBGMN/r4fcYtoNB9Fj+OL + JCsuaGDVibOJdnyRKOcnWvLFeHPOppvyVaYo24RLpSptmCPf1thxrsxcW3vqnNji39Q5cqXZlSvt7nzf + o+e7mQFcmSVz1axAzkr5nownz9eYcybzJu6NG8HJyJt4PGEkL6Ub8YbUr1IGvploxLsJRloE8Jvho3gj + 5GbeEn0YNY6v5F7U/Sn4e17uUd3nuUQHzsXbcy7OjosJ9nyV4sC76Y68mG7PI6kyb6foOJgi/k+qnvUZ + wazIDmdxQRwLylNZWJPP4ikVrJo2lXU9M9gs9uXOxUtZPTBIS8UE0qPjiQgMJSI4QgPAYaFRhIT9rusQ + OCT6ukKDowkTRQT9rhthcKi/AQRHBUYTGxJHfFi8lPHEh8eTEp1CdkoWU2vrmKcAcEcXxbmFJMYkEhYU + ToBeRUYFSxsM0OCvu6cvrm6eIl/Z9pPSBzd3X8Ij4sRuLGHKlGYam6aTnVOkwV8VCawAcJDc5zVY6h8U + JaUB/P6uG+Dv/wYA/lcFBcl1AbHo9dH4+kTh4xP+B3l5heDlGSLnxZGSkie28iSqaxopFPs0NjYDPz+5 + xwD5fhUI1u7pxnv9TwD4f18KlAcFhhMaFEx0eAiJUYFkxPrJHBJFS1UsnZNj6amLoGtyCN31IQy0RrOs + P5MVc/KY15tOy6QI8pJdCPIYp4EKa4uR2Noaaz8024tdo7KcuItN4+7vqtkj16J7lS1jgLyWWkSSkgJG + qjSkf/4dAFs5mGKIHjbTIJClg1pGw5u0nEL6hxZz532P8MjTL/H4i6/z8LMvs//4PSxat4kFqzew99jd + vPrBx3x28TJfXLjMp5+f48MPP+W9N9/nk7c+4vwHX/Dxa2/x6PG7WdDQSrV/KBX2OupsHGi1sKPd3IY6 + cwuqrSyZ4O5Gk9jkK2d2c+LYUV5+9SXe++Qj3v3wEz746DPel3rfff9j3n7nA956+32ee+7PWgTwvtsO + ceSOOzh5+gEee+opnvvzn3n+pZd4/s8v8eLLr/DnV18z6LXXePGVV3hB9r3w55c1vfzin3nt6Wd47q67 + eGDTeu4d7ufMQDunW6q4uyyFw2IvHUvz4540X04l+moA+ESkpwEA6y1Z423KGl9z1gfYsj3AgT0yH+x2 + l235fne52LLbQ157O7Lby4Gtsn+Lqw27xYbcG+DBrkB3Nvm7sdpPx3IfR9bpndkc4M5GvTsrvXXM97Zn + jrctfTKv9bpb0eFoTLvtWJERHTpzOmTfDJnr2rxtaPS0ZJKzMZNlnuuQ82f5u7A43Jt1ceJ7JMs4FeHJ + vABnhoJcGQhwY2agFzP8fGkN8GNSkJ7KUD/Kwn2pCfGmXY7Pl3vY4+HBvR4+nNEH8LD4RA/56XnYXxTg + w8N+Pjzk680j3p48Kj7So24uPOLqzGPu7jzn582zct4T3t484OPLMf9AdgcGsdzbj06dKxPk+ec4OJHk + 5ESYToengnfuYrddlbvU56HJWcYfQ8Soh6cTvmKP+4s97i8+Q5AoxNdVxj0vUiL8pE+FkBYbTHyknnD5 + 3KHhngSFexAg8gvxwDfYHT+RPkjZ8wap/YERcm6sP8GRvgYI7GNPTEowtQ2l9Mxpp3tWK8VVWfiFuokt + YWLIHOKu/jxmpm2rfXYq8lfZNk6mhii9awDYVewJNwtUZhIvPzt8gxzlfR21+d9V5nMFdJ1cxklpJP7I + OPEvjOS4MXHJ9uJrqxTQXmQXuBKXZINfoAk6V2OxocQ2+QMANsBfAwBW8Pf3P37YyD61LI6l+Dnm4hcp + qRTvFg7WmhTUVfpX6KvGgP8ka0cb+XwK0huifg3Rtk7oxGdzcpJ9IgdHsb3ktZuLToO/vt7u+Cj46+ks + 47ITnh5iO4k83MU2Ur6Wq0HuLgrs2+Etx/TezviLvR3s74Wf2Nw+4hf6+XrKmO+DXtqWj68Xnp7u0ibc + tFK1F1c31VYU9FXQ2F2Tl5c8d2mDIYEBUpcfejnfx90RPw+xn8Tm83YxwsV+JE5WI9Bp4Pcm3BzU8oyj + 8JVjIb7WRAY7yZjtTXpiIFmpoeRmhVJUEM6Emjgap45n+vQMOqanMLUulOoKTwpzrMhJH0tBzljK8o0p + KzClPM+SkkxzCsU/yo+X/YmmTEqzpi3bnoF8HYvEllpf4cKeGlcOVTtxr9hCD1Q58FC5LQ+J/fVQkS2n + xf66V3y0Y8W2HMyzYE+OKTuzTNkm9tPWbDM2iC21KnUci5JvYVhsIAWAexQAFvUowJtixkxRb7KpBoAN + ENgAgNXxAQWAM8xZlmPL2jxHNuepNYAd2JJpw6Y0SzaIzbZuvAlrU4xYkzSOVYljRGNZFnsLC8JHsDBi + BEuibmJ53ChWxI9mpdSrtFyOL4u5maXRN92gkZrU/uUxt7A6+hY2xqg00GM5HD+Ge5PGiq1lxLOpxryc + bsLrYse9ljyWl+Ju4c+xI3ldQeA0Iz7MNuXDHGM+zB3DRzmj+LRwDF+VjOVCmQkXy034usKUy9WmfFdr + JbIU+9JMe32l2ozvxG40yIwrNSZadPCVCXLsaqTw5UojLlWO09YYPjvJl1ergjicLeNmiDkZ9jcRYjEC + X7PRuJiNw8Fa+qXMnbYK+trIXGolc6mlCVYWBllaqX0KBEsp51qIzK2MtFJJwWArOWZja3b9mJmlYU1/ + NTdbybhvLbJ1GIe9o7RZZ1PcdMbShq1IDHGlRNpmW2ESiyYVs6aunFVTyphVmkZtcgDFCT5MKohl1rQa + lg620zxRZaJxJ8TLlhAfW0JlXIoN15EU7Sz2oj3jIyxJCzcjI9RYW+apQMpiFQUcbqKlgq6KNtEyktbI + M56cPI5GadetOTIHZTvQlKYihG2YkmjBlHgzkQl18UY0Jhpr6wF3ZVrQl2fL7CJH5kibV+WsQgdmil+h + UkH35RvKmdJfZhdYM7vQhrnq94RsuS7NGLWWdY+0uf4kU2ZJW+6TtjxL2ubsDKkzy47Z0p/6Mm3pSrWi + XfrYVGlPk6LHUB01SjSGmuixVMl2jfgpExPGUZdoQoP4Bo1yj82xY+gQH2ZWujVrKrzZWO7DhmJ3Lc3z + imxblqooYHkvBYFVRPBqeb8tBc7sLpI+W+TC3SUunJHP9GSxA6+WOfFRpTPnq9y4LP36comOb3Jt+Vo+ + /4UMIy4qcJt7C98Xj+HH4rH8UKjSOF+N/s016ErOOEPUr4K+42/movTr8ykiKc8ljxLdwtmUmzk3/hYu + ZY7lSq60XxlrrklBYKVvFPTNHSsaJ+9pzCUZL77ONuZC5jguZsg+2f5W+tClHCPOZozm87Sb+TTzFg0A + f1YsPl3RON7NvZn3s2/hq2JTvqmw4scKW/5Sas0vxVb8VmzNXwqt+bFQ/DWp/6KMeeqcS9V2fFxkwSvp + 43hU/LITATdxj88ITvmP4InoEbwl9/ul+Htf1znwdb18Nw3WfFNvqem7qVJfoy0/NdoZJK9/brThl0Zr + fm225rd2G/7abiey5dc2eX/Z98NUc7nGUtN3sv19k2y32PFziwM/ter4WfRbmyM/tzvxfbcn3w1G8MuG + YjjczIiGGNUATGiTBjtDGsEMaTg9oplx4+iPN6ZfnNkO/5F06EcwGDqC7TLwnqp35fU5EXyyPIHPVsfz + 6do4PlgXz+sronlsrj9HW+3YVD2GJSVSX7IFVUFmZMsknySGfIqfPSkh7iSEeYjD5qWtYxEnDn98qALA + DoR4m+HrPJYAMRIiAuy11NAh/jaawsXQjA11JDnSmYx4T7KS3MlKdiY7yZ7sZGtypWMUZ4lBnWdFXakN + 7RXSwSodmFOu1ki1YLE41xuqTDnYYMsh+WL3TjRmV+04dtQas2WSKVvqrNjWas/OTh17ZrpwYLYbB+a4 + cHC2jv2zdOzuc2ZHjwtbulxYP82Fte2ubJjhowHgvX0hHJ4VyZGZ4dw2PZBbp+o5Uq/n7im+nJwkhvME + N+4pt+N+efAPT3HgySY7Xuxw4M9dNrzcZ8urcx14aZ4TLyxy4tnlOl5c68qrm934aL8v544G8OPJEP72 + UDg8Fso/Hw2CRwL45xlf/nqPJ78cceXnAy78vMuVXzZ58PM6T35Y4cp3S1y5vNiVS0vc+HqpG5eWuXN5 + uTffr9Tz42o/fl4doOnH1f58J/survTlqxXefLrSm49We/P+Gm/eWOnFn5a78eQCB3EOzHlgwIpHB+14 + Wu7z6cXOPLpQ9i+w4/RCR+5boONgpzkbG25m2USZGCtGyHc+gpUVN8v3a8L+FkdODYXz2JIkUQqnhxM5 + OSeee2cncnt/DLf2RrK3J5q1zX7MrbShN38cfVk3y+A2guXFN7Nzign397nyyqpwPt+ZxPldiVzcHcNX + 20L5fFMAH6/x5f0VPry5xJNX57vywmwnnumVe+1Wku+804nHZzjzVKcbz/f58MIsP56UDnG/dJST0tlO + tzpxf7uzSHdVLpyU8o5WZ25rdGRfg7SBqe5sa/Rifb0XSya60ymDdF2qCVPSTGmRAb5dBvXpxU50VbjR + X+vNnDo9cxt8Rd7MrndjQJ797AY7huU9FfxdeAMA7ptoS7daF1UGmc5SqadIJhdpy605JrRmj6EtcySd + 6SPozxrBUL4YEmWj2SAT9+4pVhyUQeOYdPrTXTqenuPJK4v8eG91CBf3JPPtrRn8cHsev9xZzC93lfDT + 8SKuHCngwq35vLE+mVN9enZOsmGJDGBdiSNpE2OjWSaI1lS16L0DzVlOmlqzdbTlONMi23Uy4U2QiWaC + THD1GRY0ZZnRkW/CiiYX7lgax4uHSvnksUn8/EkrXJkOv3Ygo9dVADxZVAt/qeW3s6V881IaH94dwosb + nXhqkS2vrNPzwW1JfHZfHl88Uca5P1Vz8Y2JXH6njivv1nPlvXouv39V7zVy8fV63n+0TIsSvnNJENva + nFhVY8WSUkuWS59bVu7A0nJHFpbJd15iz0IxKheJlohRuaFaHFJ5pkenuXOP9PvH5uh4d4Mvlw+GSr8K + 4h/H/Pmvo3r+cciH/zqsh2PS946GynYof9sfwN/3BfC33Xp+WCuT3WIbvhky49s5Zvwwy4S/DJjy26A5 + f1tszV9XyqC93plftnvxywF/fr49lB/vTOH8sQJe213AQ2tzOLQgh3V9BSzprWaop4G+ztbrAHha6wya + p05jYnWDIQI4vYDxKVkkJKWSlCIan0JiSjKZ2VlMmFhLV08PCxYuZP6ihQzPn8/QkErdfDX69zr8nfUf + AXBnd5e87mPWrNla2ueBAQMAniOvB2cPMTRnWIPAg7MHGZwzl0ULFrB62QoNAi+et8AAgHt66evpom9m + Bz2d9Vp6x8YpqUydEE7LhCCm1frSOdGLrokedE0STdHTURfIjMYo2upjqJsUQXVVGCVlQRQVBVF8VSXF + wZSWhGjQt7xMVBpDaXGsKImSghSK89IoVOvf5uZrqZ9zc4rIEeXmFv8BAF8DvgVFBhWVlGnKKyjWYPH4 + jBxRLmlybWZ+mTijVdfh740AWKWBVsovuJYO+l8BsAK/v+t/BQAXS6mddwMALvlvAPA1lZdUyfuWUVJS + TGlpobwuoqI4n6qCHGpypW1kpjMxNY3JKSk0JKWIAZhAU7Q4dJFRNIVG0BgQTIM+UORHnd6X+iA/mmPC + aYyLoi4uXIzgYIqj/KlIi6ShIpWWSVm0TM6kfXIG0yYk0JwfIMaxI3XiuM/IcmD5RF92NgdyQMb0gxNd + OF6j4xF53i/Uyxg12YNXJzvzZp0r78mY+kGrD+81e/N2kxfvtQbwbnswH0xTax3G8GFnPB92SdkdIQrl + o95APp/hx0W57utJbnwl9X41wZlzUu/FJj0Xmvw4W+/Lp9LGPq715MNaVz6a7MLFLgV+/bnUr+ebWb58 + PVvqmBvAhaEwzs2L5r1Z4Tw/zZcn5V6emBbAc13h/Kknhpd743itL4k3Zo/n9YEU/twbzws9CTzRFatB + 4uP1ftzeFMBtzf7cJvd9bGYMd87J4chAJQcH6tjUNVHG/0JqCuPJy4klJjEY9wBXXFRKZk8X7F2dsLG3 + w8rOBitbgyysrTWZW1mKU2SBmZU55ta/y0x0DQCb21hgYaf+4a7WvFI/cqpIF2txnlTUi+HHUg8/9+sA + 2MZJAWZDCmgzGxPtR1OVJlH9kOri5aRJRfm6+7pougZ+VfSvWqdHvQ6Nlv5YXsDQvFls3LKGhUuHWbpi + AUeO38oLrzzLB5+9x4dfvM/Tf36SoyeOcueZu/jTe6/w6idv84js23poN20DneRNKNbWAx5fkm0AvTdI + AWGl+GvKyxJla0rI/xcAXFtNdlWVBoATcrOJzUolLDmKoBh/QmL1JIwPJCMjgIIcP8qLfKkWB2ZSiRON + VY50Nngwq03PvM5gFvdEsKg7ivkdkQzUBdM3OYT2Mj9qUp0oDLMgJ9CUdN+xpHiNJN5jBBnBI6hIMWKq + OAMD0v5W9ISyaTBGFMmWoUjWzgphcYcXw62uDDXpxBZwYlDBYLWERIMzs+p19E/WSenKwnY/Fk7zY3iq + B3Pl9dx6DwYm+9BTE0BbeThT8qMpT4sjJyaB1MikPwBgD0dndFYW+LjYkRodyNSqPIY7GwwAeEEPmxfP + 1NI9rx6czopZ01jS18oyKdfM62H53A4GZ9TRWV9JU2U+E/JSKU6NIzU8kGhfDyK8XIn18yY3PobpE2tY + NtDHlmWLObhlHQe3rmPf5jXs2biavRtXsG/TKvZtWcnBHWs4smcjh3dv4MD2lezZtITdmxexZ/Nidm9a + qGnPRoNUymgNBku5f8NC9qvo4Y2LruvglqXctmUZh7Yv57CmFZoObV3ObSrKeOsyDsg5B1Xk8br5bF8+ + i63LB9i9doi9G+ZJHfM4sGkeBzct0CJ9b5P7OLJ9Ccf2rOTYrlXctnWpBp73iw4q4LxlgdQ1zOYFM9g4 + PM2QCvrq+r8KAm+Y22aAwFKuk2NblvawZVUf65b1MthfT42MjaEh8jxcTP8AgG0cVMpHC5xcbdC52Yp+ + h73XALCjs0qLZq79sOrgcu0HVSsNFCsA7OppJ33Y3qAbAbCULrJPSymtIoqlThud6XVpANhRpWu8BoAN + 6Z+dxNe6DoCvrgeo0kIqufraaroGfK9Jwd1rAFht/3cA2FPvoEkDwBoE/ncAXJgfQ2NdAY31BeRkhhMp + vmCA3hpfH0vcPc3w8DTXALC7r1rb0Ba9yhQlPmBglDNBkeqPKA7ExTiRm+rB9MkJ0t/KOba6kRPrWrhn + dT23za8Sny2bZfVxzC4NYKgihBVTEtjcPJ5dTSkcqE/geF00908O5enJ/rxc68XbMp98UGHP56X2fFlo + wyc5FnycbcEXBfacFRv/ixwbPs+04osUcz6ON+L9qFG8E3qzpg/EZ/5Srakr48XZJEc+jbHmw1gLPow3 + 51M5//MMMz7NNOITsenPFZvy7QRbvp1kx4UJVpwXXRBb/OsGBy41OXCxxYlLM9z5tseHbwf8uSg6K/pg + ujsv1lpwOuMm7ogawV0hIzgTOYIXxo/htTRj3k435/00Cz4ab85HCWa8GzmWN0Nu4c3gkbwbNobPYs3l + 3uSzJDtwTu7xfJKOswmOnItz4GysPedFnyU48MZ4R55NteeBFAeOyTl7kzzYlKJnVXoQS7LCmJ8fy3BJ + CvOrclg4qYzlLXWs6+lgk9iLOxYuZsPgPLomN5CTkEKEfzARgWH/rwDwjVIQWMHfmOBYEiOSSIlJISU6 + lbS4VLKSMshPz2Vq7RSG+2bRO20GxTn5JEYnyHXh+PsGaQDYx9cfDy89zq6eODq54ODohpPOU/qrOy6u + 3qSIjd3Q2M6CBctZumwtk6Y0alBYRQeHaJDzjwBYQVQVVXtN/+cBcDwq9bOvbxSenmGikOty9whCp9Pj + 5hpAaFii2KPVdHeLvT97CU1NXaSmFqLXR8q1ERogVhD4X4H1/zkAHCvPMIagwAhCAkOICgsmITKAjFh/ + avKiZY6Jo2NyHN11UXRMDJJ+G0hXQwjDMxKZ351KX3s8k8v9yYhzxN9tDE62I7FVqUptTWQcVeOl+gOM + Gz7BvviG+Gp/UFMZTBT8uREAa+koRWrdwf8eAIvsxKay/XcAfMd9j/DQU3/m0edf5aFnX2bfsbtZtHYD + C9ds5La77+O9L8/z5Tff8/5nX/Hya2/xwvMv8fyTL/DmC6/x1TufcPbt93nhxH0srW+m2sOXSXZOtFs7 + MNPcjj4zG1rNLagT+67e3Y1piXFs6Ovm0Xvu4L133+SjLz7htTff5uVX39T06hvvaAD4vfc/5uVX3uD0 + mUc4fPtxbe3fM48+yjMvvsDLb7zBa2+9zVvvvc/b73/AOx98eF1q31vvvceb77zLG6L33nyL9194gZfu + vpuH1q/mxMAM7p82mRPSl28fH8LBSPGLEz25M9mTk/HefwDAW30tWOtlwlpfczYH2bEvWMeRIBeO6p05 + 5O3EbT46Duh17NE7sUPmpI0yz62XeWer2I27/T3YEeTBhkAPlgW6sFDOW+rnwqoAd1aKjbrQx5l+uabT + 25ZpMpc1y3xU52wi3904am3HMVnmsjoPKxpkvpksc1OttxWVModVupoyVa7pDHJlXpw/a9Ij2F6YwAr5 + LINRXsyK8KY71JuOMD2tIQE0h4YwNTSUKRGh1EYGMSXcnxnB3izx9+aAly8nvf140C+QhwODeSgwSEq1 + HcAjAQE86h/A46InxU96ylf8BR9fnvbz5/nQIJ4KCeIRf39OyHm3BYeyIzyCVTK2zdQHMMVTT7GnL1k+ + euJ9/Ajy06OXc/VyrZK/f+BV+Ulflbat98I/wJew8AAiI4NlvvQnWmyyuLAAGfOCGR8dQnpsGGnx4aTE + hRIbE0RkTCDhsQGiILHRAwmJkteyX5PsU4qICyYqMYy48ZFEJYTgH+aFV4AzCakRTGmplLbfoQHgoopM + 6V8uYj8Ya9BX2QaGP42Jv6CAsMomIs9V2Sv2aokJF7WmsbJZxJZwN5e5X+ZraS+B4S4EqaUdAsRWkWel + gK4CwDrXcRoA9vI3xi/EhHiZZ7IL3DUAnJXvQmyitVxj/L8FgK3EjrKQPm8m/V/JQmQu/pCS2b8AYJVp + SUX8/iv41aKARSpdtI29DfaOdmLP2WupnpV0V+Gvo6M99g5iz0npqnPC091ZA8Dens54eqiIYAP8NUhs + KPGjlDzd7PFytcfbwx699JtAvRtBotAgb4LEV/PTe+Kv95b24IOPjwK+rri6GoDvNdirttV+JW9vT7Gb + vND7ehMg7TLYX0+wul6lkfZUGTZttN/WfV3G4Gp7EzqLEbhZjcDb4Wb8ZF+QuxGh3maEif0VEWBHbKir + tCtfMpICyckIoVgB4OpYDQB3dGTS0Z6s/Vm/rNiFXLFrstPGUphrTEWhGdWl1kwosac635aKLAvKUs2Z + mGlLU54TXYXOzC12ZXmFK5uq3dg7QQFgR+6qsONkmTX3F1twKt+MU7nm3JtrwR35VhwR7c8xY1eWMdsz + jdkq5ZYsU9alG7E8eTQLk27+AwDuFHuoJ06leDahJ9mE7iRDBPB/D4BtWJvrwEaVAjrbni2Z1mwUG2q9 + 3PeaFBNWJo9jRdJYliWMZmn8KBbG3MRg2AiGFQSOvoklsk/tX5Y4WtOSmJEslv2L5F5u1AK5r4WabmJZ + xE2sjbqJ7TGjOBh7C3cljeGhVCOeSTXmpXRjseVMeDV5DH+S93pBrn1JytcTxdZMM+K9jHGiMXyQNZpP + CsTmLDHmfJkZF8tM+brCjMtVZnw/0VpkpQHgb6pNuVxpwrdVYnNel/EfVa2OG6KHv6624YtqT/5c7MuB + FPGRfcaRZjmCIGNpL+NuxtloFPYW47C3FZ/C0hhrK2PMLUww/x8AsNIfALCNnGMtfokc1/Zpx8RPkrnZ + 3sVKxhjp0yp7kf0Y7O1H4+w0Dhcp9TLWpwS7UJsaRl9FBuumVrGtsZpNdRUsrs6hOSOU8gRvJuVHMqu9 + nKVzmmmekE1CqBvB4isFiYJVxoMQR+IinUiIsCEp3EL8XfHtw4zJDjMiL9SYglAjikPGUSKvS8LHUhY5 + mip5VhMTx9KYYUlbriPtOc40pjtSl2zPpHhLJsaZMTnORGREQ4IxLdK+ZqRb0JtjTb/4DwMFKvrXnv58 + e2bm2dKrUkErEJyvQLA1c4ptmVMkku1eaQOdCaOYHnWzSNq14nJJplqbHki1YCDNmoEMGwaybOnLsqMj + zYrmJPX+Y6mOHiP3O4pyueeKqDGURsh21Giq5dhEua9J8eOol/qaRB2JplpdK0o8WFsqKnRhdZ5OA8DL + Mqw1AKy0MtOG9bn2bCtyYa/039sKnTgu/tADRQ48VWLH65U6Pq1x5UKNm7Q1Zy170nnxnb6S9vpF6ii+ + yryJi3kj+a50ND+UjOXHIiPDGsB5xhr8/S5nHN9mj+Xb9LFckvMV/L2QpKDvKM4m3sJXCbfwpfTxLxIN + Op86lsvZCgCbcyVfJOW3+dKOpb7LoktSp4rwvZxjyjcyXlwSv+tC+mE7MnYAAP/0SURBVDi+Fn0jY8jl + bCO+VtG/6bfw2fib+CTjZj7NH8MXpaZ8Jv3oo2KVDtqIs8XmfF0u/UjGtO+LrfhLkRU/F1lrEcDf51vI + +5hwTkUXyzmXauz5tMSa17NMeEbGmAfDRnFSP4L7/EbweMQIXpV++4mMcWdrxeebbCsyF59P+qzo2ykW + fF9vxY9TbfhLox2/NNrwq2z/2mDNb1Ot+K3Fhr+12fK3Vhv+2mKAwj83Wsp5cj9TLeUaKZts+KXZXuTA + zy06fm1xlPMd+LXNiW+nu3JlIJhf1hTArU2MaJAG0ZZgQq88/Hm5diwvcmS1PLS1Uq4v1LE2x4EFccbM + DZHBTG5+d+Y4TtRY80KnB+/MD+CD5UF8ui6cszsS+WpXKu9uSuLxYX8OtdmxulIafYYtEyOsyNMbkeI1 + jvH+1iSLQZAQ5kx8mKuULsSH62RbR2yIPZF+VjJJmRLmZy375ZxIV6LlmFKMKEH2pUa7kC2GaU6KBznj + ZeIZ70DeeBsK0sypVClzy+zFqXBmdp07i6a6s7zemdV1DmyQL3tngy23T3fmzg4Xbmu2YXedGVsnyiQy + QYzZSeasly9803RHtva4sHtAJqY5Si7sGnBmW48TWzp1bJrhzIYON5Enmzr1bO30Z2dXEHs6A9k7zZ89 + TT7smeLFocne3D3Zl1MTxXCuduGucjsxrm05PcmWhxuseKLFiifbzXlyuhlP9Vjw9IANTw7Z8sRCO55e + 5sCf1zjx4W4vzh/S89PdQfztdAg8GAxn/EV+/Nd93vx6uzM/7Xfkp52izTp+WuvKTyvcuLJQxzfDOi4O + O3N+njPn5ku5wIWLi9z5dqk3P6704+er+nGlnm+XeXNxuSdnl3vx6QpPPlrtyftrPHlTypdWuvLsEkce + mmvBmdkWPDpkw1OLpcMvduTRRXacWWjDabnn+xY4cvuAJdvbRrN+6kjWTB4p3/nNbKsby74mC45Mc+L0 + YCiPL07g8UXJnBlK4NTcRO4fSuHewUSOz4phX3cIG1s8WTbZjgWVxiwuG83qCgV/x3F8uhWPD7rz9row + vtoZy8VdUVzeG87FnUGc26Lns/WefLjSg7eWuPDafCf+NNeWF/pteGGmnciR57qdebbThRe7PXhlwI9X + 5gTy/ExvHlXQVwHgRnvul05zutlJSidONeu4e6o9h6fYslcm0h01NuyY7MyWeg/5bJ4slEGuI9eKyclG + TBQDoTHXhjYZ3KcV6+iscGdmrTf9k30YqPMSedBf50LfFDtmNdgx2CL96ioAVtHAvwNgK7nWhq5SB2bI + RDBdBphpeabyPmKw5NxMv0qpXTiSlVVGbJXB4lbp6HdMc+ZklwsP97ry4rA3by8P4ON1IXy1OZzvDiTy + lyNp/HZXDv88Ucw/7yvhn/cW8eud+fxwvIDPdqbz1IIQ6QuOrCo2pX/8zXSIgdOSaEJ7mi1tmQr+OtOc + 6UxLtgutOa7a67pUeyYkmlMjY8cUMZIas8yYlm/C4nonbh2WZ7wnm3dOV/Ddu/X816VW+KUD/noNAE8R + TYIfJ/Lbl+V8+3IWn52I5I2dnry63p2P1DM9mc23T5Xzzas1XHl/Cj990cAvZ5v59VyLpl/OK7XKvmn8 + 5dM2vn61nvceKOeRLXEc6PVk9QQrFsrnWSoD9pISWxaJ5sv3Ob/QhnkF1syXyXVBgQ2ryxzYWe/K4XZX + 7up05JG5jry70YtLtwbw81E//nncB4558c+jXnBUbQdIGcw/bwvi7/v8+PtuPb9t8+THVU5cnmfJhZlj + udg5mksdo/i+Yyw/9xrzt2FL/r7Eln+sceZvWz35m1z325Egfj4ez5U7c/nw1kKe2ZTHHUty2dCXw+Lu + cga7p9Db2UJPRycz2rtobZpGY10rE6qmUqStAVykAeCklHSSx6dpAFgpIyuTiqpKOru7WbRkCQsWLzJE + Ad8AgK9H/876dwDc2dVJl1zb1z/TAH1Fs2cNyPYsDQAPzZ7L0JxBhtVawLPmMqd/NovmzdfW/1UQeOmC + RQzNkvr7+umf2SNlJzN7mmhvKaexPpOpE2Norg2hdYIf0yf4Mr3WR8ZqH6ZPCqBtkuyvi6N5cgKTJsRS + UR5NSUkkRYWRFF9VSWE0pUUx4nDEUVwSR0lxEsVFKXIslaKCdAryssnPyyM/t4i8PJXiWSSliuzNzSsm + r6BUA8AFRWUUFivoW0pxaRkl5aIyFQlcpKWKHp+RRUp6tvZDUHZBOblF1eSI8oonkFt8AwDW1gOuIl+k + fnArLK6We/4dAJcp8KvW7lW6CoAV2L2m/wkAq/JfAXBRcaV8/ipNZfJeSjcC4LKSSnn/crlOfS4FgYtl + XyEVRflU5edRnZNNbVY2EzMyqUvPoH58KvVJKWIIxtMQFUtDaCRTgyJoDAyjKVieR0Q40xNiaUtKYGpC + NLWxYVTEh1CZHsXEokQaqtNoqk2XZzqetuo42guDqE9xol4M4Y50G5ZP9GB3q56j0/y4Y6obD9S58ryM + hW9M9eTtyS68PcmR9yY78XGDG581e/K56NMmT75o0fN5awBftAXzRbuM99Mj+GqGlDLHfiVz7lddXlyQ + PntJ5vVvxJD6utaWi1LXhQaZ85rcuNjowfkGD842ePGFjNefN7hL3e5c6NVr8PfSbB8uzfXmwqAPF4f0 + XBiWOWR+OJ8OhfNWrz+vdMn80BvMW/0RvDcQw/v9sXw4kMDHs5P4cFYib/fF8EZPDH/qjuTxaUE81C7q + DuP+nlDu7Q3l1JwYTg1mcmdfGUf7JrGjs5qhuhwmS9styYuVvhqKd5Abao1eJ1cnbB3tsFHw18Zag7/W + CgJbW4tTJa+tLLG0sMDS0kycJSmvSoPAVmaaFARWP1RY2JpjaSfH7dXaV4aoYAWA1dpVav1fDQD7uOLo + 6ogCxBZ2ZppUBIz64VTBXUc3+6uy014rMGxYQ8/63wBwcXkeQ/MH2LR1NQuXDrF42TyO3XWIl157gfc+ + eZt3Pn6LBx6/n7Xb1rBi8wrueeQ+XnjnZV75+E3uf+5hVmxfx4T2OjIq8kiXupKKMv8jAL6uvExRliYV + DZx0FQDnTKgit7aaTBn70kpLSMrPJT4nnai0OILiAgmK8SE2yY/UND9ys3wpLfChptiNugon2ifpmNOh + Z0l/GGuHYlk3nMCqOXEsmxnDcHs4c5sj6agOZEKajvwwC7ICzUj1NSLZ6xaSfW4iVxyrmnQzmsQBUgB4 + pTz/zcNxbBw0wN+V0p4Wia04r83NEPXbqGNwqhNz6nViF+jEJnCiT/rAQL0LQ9L2B0WzpriI/SA2QIUt + 00odaZV7bSoOoq4whqqsRPLik0iLSiLpDxHArjhL+/F1dRA72Y+JJRkMdU1lzVAnGxb0sGlxP+vm97By + cLoGfhfNbGFxfxsr5fjSWe3MmT6ZznoVAVzAhLx0StISyIqNIMbPh3APVyK9PEkICKA6O5uBlhZWzRti + 97o17N24lt0bROvXiFayZ8Nq9m5exb6tazi4Yx0Htq1l16Zl7Fi/iJ0bFrJr42J2qVLTIk071y28rj1y + 3t4NSwxab9D+jcsMknqU9sm2kjpnz8YlUsdiuQfZFu1cu4Aty2ezcdkstq2ay441Q+xaN2SILl6voopV + uudFWjTxHfvWiNZxeOcqDqpU0JtFWqTxEm7dvIBNC7vYMG86G+d1aBB4o1oHeLAdAwhuZb1sr5fjBgDc + z8aV/SyY20zD5DwS4vS4qB9JnVQUsAEAK6hrq+SoAK9I7Vepn9UPqDdIgV9V3hj9q1I8GwCwAfbeKA0K + /xsAtvgPAFhF7kj9GgBWKaMVAFaRwAZdi/y9BoCvrRd4DfD+K+i9tq1KDRb7/FHu3gZ5aLITqbWALfES + eXtbERnhRkF+DFOnFDC1roCM1CDCQ3QE+Nvip7fG08tCkwLArioNtOzzVlHAEY4ERDoTJKUBADuSl+ZB + d30KmwaruHNdC6c2tXNyXSO3L57AThUF3JxEf7Efc8oCxb+IYUNjErtaUrmtJZl72pLFD0jgpbZo3mkJ + 5ZMmfz6f4imOugMf5przXpYp74o+yrHm83w7vlBSEHi8BR/Fj+PdqFG8FXITbwWP5L1oI75ItuPLZCc+ + ibPl3Qhz3oow4e0YEz6S8z/JMOOjTCM+Epv+ixJjLolvcaXBkctTlRz4WnSx0YELTbaca7bjXLsTX3e6 + 83WfN+f7fDg/y49Pu8VWrrPhTOZI7ooewd2hI3gwagQvpo7hjUwTPpD7/CLXgS+z7fky1ZaPEyx4P8qI + t8NH807YWD6IMuXzeFu+SrDnXLwjZ+N1fBXrJHLkq2gHzoo+iXPkVfkMT4p/fb+UR5Oc2ZnkwboUPcvS + A1mQEcpgbgyDRckMV2Qxv7aEpU2TWdsl/aR/gG1iF24ams/spjaKUzKI8g8iKiiMiNBowhT4DVfwN1Ir + NfirgeDfFapAcXAUEUG/Kzok5rqigg3wNz4sgfExqWQkZJKXmk9BRj6FWfkU5RRQP2Eic3r76Gprpygr + h8ToOMLFtlEAWKV/9vL2x9XdB0cnN2ztdCJn7B3ccNR5SLsLoKxsAsPzl7LvwFEO3HZM7OS5JCVn4O0T + qK0XfA2U/n8BgNUawCoVtIr+9fIKx909GBe3gOvSufjJ/Xvg6hZIXEIWU+raWbd+J9t33Cb2/0qxHScS + FBwn/S5c7l3Ba6lPA8DqPg0KCFYQWOn/BACO1dJ4BweGEBESSLzMSWrN0qq8KKZWxjFtciwdkyNoEV+g + qcZX7H8/+loi6W+LY3q92Jn5HqRE2qJ3GYOz3S042o3DztZUno+MWTLH/Q6A9Xj6uWs2yX8LgJ0MkcD/ + DoANto+ymX4HwD7XAfCxEw9y5okXePiZlzjz1J/Yd7sCwBtZuGYDt951gne/UEtcfMWjTz/PoaPH2b1r + Pwf33MrpO+/j9ade5PPX3uTlk6dY1dDEBFdPmuycmGnjyDwLe+aZ29JjaU2bjQ1tMrf2piSya1Yfz913 + Lx+88wavv/069z/wAMfuuFt0j7b+7wsvvsw7736oRQE//+JLnHrgIU49+BCPPfMsL7zyKm+89z7vf/Ip + n587Jzr/R52VfWfP8sWXX/G56Nznn/HVG6/xzv338dTmdTzQ38H99ZXcm5fMsRg9twXrOBrrxvEEd+6J + 9eRkjCcnIj04EuzENhX5qwCwvyXbwhy4NdyFu0LduTvIg7uCPDkW7MGhMA/2hriw1c+BNa4WrHAyZZ27 + DTv83dke7MV60cIQd+YGuPB/8faX8VVdW/s/TFss7tk7suPu7u7u7gmBJMSIECcJ7k7dhVKDupfaaU9P + 3Uu9QHGpnhqV73+sFaA9ct+/+3nzvLg+c+lca681h+1rjTGXeelY6evMCh/xfzx1dHvYsNBDQ5Onllqx + IxVOphTL+YVaAwrFlpW5WFIh9qZM9pWKTSl1NafcxYxmTxt6g91YnhjC9pw4bqzKYltODNNx/oyKH7gk + 1JuuUD/aQwIFoSwOiqA9OIKW0FAWhgTQF+TNWj9vbvHy4X5PHx728eURiYMeCxD4+/OYXwBPCJ6UMb1f + 8LwsvyB4Xo55ITCQF0JD2C8x06OBAdwdEMh1wSHsCI9gXWQMS0PEzolOK/MPJVf0XVJAOOGi+4JDFESo + CA29gHCCg0MFQYSGhRItMVicxGBxEoPFR4eTFBVBSnQkqdERpCmIiyQlXjkmnGhBVIKCSCLjI1TEyLKK + pGhBFLHiF8eniN5MiyU6UfRwmDdegS6yLYKmRVUMTXTTN9JObmmKxCl2mNvqqVNLKDbd3s1SfISZeYPt + xX+wE1/DVvVTFL/FSFpjdVkp9ezmrcEnUCexgjPBka6iE/8kgG3+QgC7+RjiHWhETKINmXnOFwngcIkj + Pb0vEMByLXutij8JYOXDOaXayX8SwGYKAWxnhqGdqQpjOd9YYh4FhlpzjEWPXCSAz39Q+x8E8PntZrJs + biV9ayQO0kpMZKtRYXMeSvavQgBrNVbY2og/JDGdq7NC0trj4mT3F/L3TxJYgauTtUCDh6sNXu52Kvnr + 7+VIoL8L/iILPhKveXu5ic53xdlFp84vrGQZ66R/JVN8JgvYQVqxVwJ3Nxc83V3FvikEsDu+Hi74iZ70 + dbfH311LoMiKn6sR3g5zcNXMwtFsFu6WlxDgMJ9wTxNi/SyJ8bcSW21BkKe5moQVE+ZEYpQ7aYne5GT6 + U1IUTF1tNK0LEmhtiaS6yof8HBuy0kzIzTCiON+cylJL6ittaazQUV9sR02ehuosDQvydXSVuLC01FV8 + BomVyp3YUeHItZX23Fyq5Y4iS+7ON2ZftgF7M/S4N82Au8WfuT3DmJszTLg23ZArU+ezK0WPnal6bE81 + YIssr0mYx3TsfxLAPRFz6I25QPrqqeiKnv9fCeBV6ZZsEH9pS7qGrWlWbE8xY2uyKZuSTFiXoM/q+Hms + jJ3L8qjZTEXKteQaI0GzGAueJeuXsCJmDiui56jHKFghxyyPuJRp8c8UTCnkr2DyfKsQwQqnsk6wU467 + Xo6/O27uDAEsv+tV+e1vJuvzevxcXo6YxYty/D/k2NfkWu/IvbyfPJ/3U+aJbzqfT3MMOFhoxNFiU04I + TpaacqZcKetsxTe1FpypNOZUmSGnSvQ5XapkKs7gbJkBXwnUttyAb+Q4pQy0gjPVGr4odeKlHBeui7Zk + sdNsko1n4a8nY2bepdjrzUZjMg9rC4OLBPAFwtfS3FjWxb6qmCGAzRXCV3CBAFaWzWXZTKlAZmmo7rcU + +67Ya1ul7L2bVq1oZCt6R2M7X+RrNrbaOdhZXoqnnR6JYocWZEawvDaPqzvquLmjgWsWVLKxNpeurFBK + oxypyQwQnyKfFUubaC5PJdrfAV8nhQDW4C99B4s+Cg2wIiLQjOhAYxKCjUgKNiAtSJ+MQD2y/PXI9ptL + jt98cvznkBc0m5Kw2VRGzaVBxkV7jj3t2U60pMg4j7ehKsKMSvGtq8MNBHrUR+rREmNAR6IJPWlmF8le + BUuyLOgV9GTMYIlSDjrHkpFCjfjU1ioB3Juoz2IZG20yztpknPVGzmcg1pDBeCM1s30g0Uwt/dyXKuen + W9GeYk5LginVMubL5NiC0LmCeRSFzSM/ZA4FIXMpjphHZbTcn8Qt9QoBrMwXHGesEsCrch1YW+DIumw7 + 1mVqWSN9rkozZ4XIgpIJvCHTmu25tlxV5MiNxY7cWig+Qq4lD+RZ8XShFW+US8xT5cARhQQus+VonsRI + IrOfJs3h48RL+Dx9FkdzL5VxOJevZSx+m6+Qv3p8l23IN1kGKgF8Jm0ep5PmcjJhNidk7B+PncfRuHkc + iZnLlyJfh0S+v4iewZey/2SqPmezTdX5hb/KMeMrtbSzkdqeUbKDlXLPopfOpMuYl7hLIX9PCc78GwH8 + mUIAp83m8xw9DpWYcEjk52CpMYeKzThSZMbxInNOFphxJs+Mb3LN5L5N+Vpiw9MZhpyQaxyR36Acc6rK + hkNlVryTZcwrMkaejzHhiaB5POJzCU+HXMIriXockHv9osyCo9WCKpHbKgOOCU5VG3O2zpRvGsz5vkkh + fq34udGKX6T9pcmCXxZY8utCS35bZCWtbGtVYKni5xYLfpb9P7XIOQu0/Nyq5aeFdrLPht8WavllkQ1n + F9lyts+bH9dlww3NzGqJnEePwu7LC91V68mtbYHc0SbOyyJ/9rUGcUe9D7vkpa9VyxXM4obUuewrMmB/ + sykv9Vrz2qgNH63z4MS1sZy9NYPjt2Tz3rZYnhzz4doWB8Zy7WiKsiTPR48k9/kkepsQ52tBTKA1UYEa + ooJsBFoJ4mYQFWBNiLc5kbIvKcqFxBh34iKcVcSGO5IQ4UhajDM5ia7kJruQl+JIboot+SnWFMlArS3Q + 0FFtz2irO2s7fdjW7c2uLneu6nDm2jYdt3Q6cO+gKw8u9eDObgduWKjh8kZzNtUYs7bWhLWyvH6RNZu7 + 7dg54MhVw85cOeLA5QN2bO3WsHmxli2d9mzrcmFHjwc7er3Z3uXNjnYvdix0V7NDr2x04apaJ26pdWXf + eQL4XjGEd5douKfcmvurLcXRNuORZmMebtbj4QV6PNquz+M9xjy+1Iynxix4ZsqKv6+x5sMrHDl6kyvf + 3unNuft9+OMBH3jQQ+DOH/vc+OcNWr653JJvtlnx9QYtX6+24etpO07Kezk+JAH9kB2HRuw5OKrAjiMT + Ok5OOfP1Kg++Xz2Db1a7c3qVMydWO3JktTOfr3Hi4/VOfLDBiXc2OfH6Bh0vrrHhiQkTHh015skJC55d + oeG5lRqeWm7Bo9NmPDxtwYPT8vvGLbm+R48r2+dyxaJ5XN9uwK0dxuxZbMHd8kwfHfPnmRXRPLM8nsfG + Y3hkIp7Hl6dIH8ncNx7NjfI8dy6U57tAnnWDMTsalLmZ9bljsQmPD9vw8gpXPtsRyPFrQjl5TQBf3+DP + 2eu8OXmlG4e3O/LJenveW6nlzUkrXh0z49VhC14dsub1pba80m/Py0sceKPflXeGvXlnxI/XlnrygrzL + Jxba8GizRsVjLbY8InioxY59jVp211hyTYUpu8rM2FVly/ZaUZDVTiwr09GepihbUaixejSmm7MoV0t7 + gT3dpc4sqXalT8ZAn4yFvloH+ups6au3ZmmzKPdFWiY7Zwjgif8ggC3oLramWxRqd4Gs5xnTmzOP/uzL + RJ5msbZ0HruazOW52vBAvzNPDrnztzF3Xpvy5KP1fvIcAji2K5DTVwbx3U1R/HxHPL/dmypjJgceyYMH + cvh1XyY/3pPF8RtTeHNTOPt6ndleocwvMIcecULaYsVoJYlBSbWjNU03gwwHFmY6syDdUYyfLVVxFlTG + mVCfZEZLugkdOUZMNdhw9bAPj+xI5I29eRx/vYJzx1vgh8Xwi+DHZkGDoB6+q+OXQ2V883o2Rx6O5sMb + vfnwGm+O3hHND88W8MvbNXz/SR3fH2nm3JlWfv16Eb9/1z6DbxUs5vevuvntVC8/fd7F8X808qrooL1T + /mxrtGa6QJ/pXCOm80yZFKU9Lkp3PFt+Y5YpYxmynmnK6nwrdtWJ87lIx11dGp4Y0/D+dhdO3ezFD7e7 + 8/tdLnCXM3/c6Qp7BHd6we0+/C77f73Og3NXu/HTdge+XW3NGZGNQ+2Xcaj5Eo40zeJU82V8v1ifX0Sm + f5u05vd1dvy+05XfZbz+dqs/v9wZwXf3ZHB4Tz6vXZXLA+uy2LE0nRW9+Qx3V9LX2UJ3+2I6F3ayoGkR + jbULKC9tIi+ngrSUAhISMohPTP0XAjgpJZncgnwWtbczOT31nwSwQCWAh4cYUEo8D5+fA3hwCT1Luunq + 6qKnp4eBgSXnSd8hhpcOMiIYXjrE2NJhJoZHWDYqfQ0OM9w/yNT4BOtWrmbDmnWsXbGKqbFxlSweGuxn + 6aD01ddGe1s5LY0ZtNTG0FIdzIIKXxaWe7Oo0pu2Kl8WVQXItlDZF0dDVYIEELEUFcZQkB9Dfq60ebEq + CvMSZ5CfQH5+oiCF/Lw0chXkZpGVkzOT6ZutlHYuleWZuX2VMs8zRPBMuef8wtIZ4re4iOLSEkrKS6Qt + lmdXQGZ2jgTGaSSkpKt/BGXmSz8F5SqyC6tUXCCAc/LKL+LCXL4XsnsVFBXXUPwXKNv+SvT+XwhgJaP4 + AvIKyiiU+1BQVFihokSOuYCiImX/zG8rKCpUUVhYqGYCl+XnU5GrZPflUJ2dTW12JnXpGdSmpFKXkER9 + TAINETE0hUbTEhxBa0g4XVHR9CTE05mUSGtCLA3xkTSkRlOXFUt1Tix1JYk0VQjKY2krj6SvNIQO0Q+t + saK3JHhaU23HdR2u3NPtwUOLnHl+gTNvNjnxYbMjHyvEb60Nn9VqOdxkz9EFTpxY6MKJVldOLnLnxCJP + TrT5CPw41e7LyQ4vTi12FzhzulPH6VYNp2rEAVOClVozzjZYcapFI+fbCHQcbxUndKEzxxa5clzu4Vi3 + G8cH3TmukL8TbpwUHF8m+5Z5cHzSm+NTARyZDOKzYT8+GvTl05EQsZlhHB6J4OBgCIcGwziyNIJDS8P5 + pC+YA73BvNUbwEuLvfl7rz8vj4TzNzln/0gQ+8fDeHwsUX53Fru7SsUW5jFRHc+CgnDK8iJISg7Ey98R + e0crbG2tsbKykADITIImgaU5lgrMzLAWWJmZYGU6A0vZr0A51lT5w0ICLAUXMoGNJdC6ABMrE8w1cr6d + XMPJRv3DVCkD7eTpiJIFrJDCCqlrplH++FCOl8BN+dPUXiF7Lf/lz1RlXSGB/5MAzmJ8apDtlysE8ChT + K8e4+97beeOdl/ngk7f54LN3ue+RvQxPL2XhkoVsunob9z/zCH9//1WefvMFrr3nZhYOdZFWlkNScaZK + AP+3EtAXMEMAzyAmJ51YZQ7g0kIyqsvJrBG9WFFGssh0fH42MVmpRKbH4Rfjh2+4G6FRbqIr3UlPdaMw + 252qQicZt7b0LHBgxWAAW5fHcNW6JHatTmTzsijWDIUz3RvGREc4naKnyhO0ZAebkuZrQpKnAXFuc0j0 + upTc8HnUKPPgl9ioBPCavkC2T0SxZSyUVeIjKuWfpxc7sqzNgWWttkyKf6OUgB6VMT9YLz5BnVZgw0CD + HUPNOgYbdfTX2NBZaklLtjHNWWY05djRUuBDU2EUVVkJ5MUnkBopOj8kjjDlT3xXb9wdnHG2scHHRUdM + iDeVBSmMdDezfryHLdP9bFux9Hy5505WDc8QwMsHFrJ6ZLHaLm2robO+mJbSHCpzUilIjiErNoIoX28C + nRzxV+FEhlI6vrKK8SW9bBAbs3XVSravXc2ONWvYsXaVil0bBJvWcPmW1ezcsIJNqyfYuGqEravH2L5u + Qo4fPw9leYJtq8dln2DVuPQzwa61kzNYMyWY5vJ1M9i5dgY7Vk+quHDellVjart97TJ1ecPUAOuW9bFR + fu+m5f2ybSnbVy/l8rXDXLlhlKs3TXDDtimUbOJbrljLdTtWqtsUXLN5mUoWX71hhE0Ti9mglH8ea2eT + QvoqhO//QgDv3DjMymXttLcWi40OxMnRFK2NAVo7IzQ2M2USLbUGmFnpYWo5T+RTHwtZt7JRyOEZglhj + p/yBOpMR/H8lgC/g/0kAy/Wt7JXMHYX4vUAA/4kLBPCF9QtEsDI/4F/xVzL4AnTuluqxF/pQoHOegcNF + mKp/ADs6G+HsbEJYiBO5OZE01+fRVJdLUryPSgD7+Wrw9bbC3W2GBFYJYFcTHN2VUtAWuAVY4SWxo2/w + TAnoqEgtWcmOdNZEsnlpIXvWtXDv5lb2rmvgtmVl7OrNYHVTFH15HgwVerOyOoRNsn5NWwq7O1N5uC+D + FwcyeLc/mc+XxHGsJ1JsTiCfl9vxboYRb6XqC/R4P8OUT7ItOZin4XCONQeTzfkoSp/3w+bylv8s3vS9 + hA/CDPg8VsPnMTay3Yw3Aw15LUCP10P1+FB85Y/FVz6QpseBzDl8VqTHSbFb37c78H2nE98sduB0m53Y + QRu+XGDBwRZzDkmwf7TLjqMSuxwdcJHYzpsjQx68L8fsz7mUB2Jm8UDYLPZL+7L47+9mGKv3d6JA+spz + 4mSmPV8m2/BFvAUfRRpzINyYj8JN+DzKii8V8jdK4kLBlxF2HI4UhEvcGCZ2OdKW1+Pt2Z9oy/3xdtwW + p+PyOGc2JnixMsWP8dRAhrMiGBVfbLwknWVVBaxoqmFjp8hHXz+7RkWWxyeZXNxNeXo2Eb4BRAQGEx4c + rpIegQqCQ1UEBIX8ayawQJknONgvlFDfPxEVFHURkYGR0kYTHyZ+b1QqmQlZVORXUCk+UVlBCaV5BdRX + VDLY08vi1layU8RmhEUR5BeoEsAeSulnZy9s7V2w1tiLTRV7qNGpGcBKCWgf32AWtndzzXW38NiTz/Pg + o/tZu2ErhSVV+PiF4KpkEfspZZ///0MAXyj97O4eipNTADqdDzb2HhehsXXDwsoJF7cg8WHLxL+fYs+d + D/LQI89x1dW7aW7pITwyBXfPUNw8QvD0mbn3mfuewYXfcgH/ndz9v2CGAFayuP38AqT1JiLIk4RwT0qy + QmgojWRRbQRttYE0V3hSJ/FyY7kbHY1+LG4KpKnKm1yJPaMCzXBXCGDNPOxEf2qsZwhgZVoL1Z/xdcPF + x0X9kE75YE3xVf5KACvloi9A+WP5z/0XCGCTiwSwsaXpvxLAY8vZve8hHnrqbzz27Es8vP9Fbtizl5Uq + AbyFm++5l3c+/YK/v/kO19x0CwODIyxsXSzjbZAd67fy6B17OfC3v/PG/Q+wrVXiNydXOjUS71vZsdZU + K9AwZmbJEkuJ+91cGEtK4NaJUV596H7efe0fPPHU42zZtpXxCYnfJqbZtHm7SgK//e4BPv7kC9794CNe + +MerPPfSy7z0xlu8KesffvEFB48d48TXX3Pym285+fU3nPjmG05Jq+D0V1/x1Xl8d+YkX3/yEQflOv+4 + YhuPDSzmoepC7k+N4d4wL+7ws2dPqI7bI3XcHebIvjAn7g1x5PYAW67wMGaLmxGb/S24IsyW3eGO3Bfi + xkMhHjwQ7CHHe8h5Hlwr52z1tWGFgzHLtPNZ7WDKDh9HdgW4synIg3E5ZzDQkRGl9LK/KxOCpd6OdHjb + 0+RtS62vPeXeWgpdLcl2MCFd7FeG2Mc8sYPKtkIXS0rEzlSIzatztWaxvwvjMUFsz0nilqp87m2t4obS + LDamRLE8LpSl4QEsCQuiJyyUJaFRDAbEslTQHRJFT0gwI8EBbAz041YfX+718uE+X4G/Lw8FBvBQQCAP + +gdJG8QjokMe8w/mGdFbz4seey5UEB7O01GRPBoRzv2hIewOCeWK8Ag2RMWwIjaBQYmvFkTFUxUZT3FU + IhmRicRHJRAdnUBUTJKK2JhE4hTEJhIj26OjY2U5npTkZNIkJk1NTiRV4vyMxESyEgTxChLIkvWM5CSS + UxJJEiSmJZKQnkRCWrIghZTMGaSKT5yalUZadirp4uOlZqUQL+87JCoQvxCRz1SxxYuqGZ7ooV8hgEtS + cPWxxdxGT836vTD9w4WPvhzFF1DnFxbbbif23MZBIYAN1VbnYoyHnxb/UEdCo90Ji/FQM4AdlTmAFULX + fv6/EMA+QcbEJtmSmedykQAOjTIRfaWHrU4hgMUvsdOquEAAK9NpKPifCGBj2WdgZ3IeZhhKH0YCQ9EF + RqITLhDAKvkrMLWUuOovuFBtyUyWFShxmRKrqSSw6AoVNlYqAWytsVT3K62SpezkoJR9tsPVSeBs89/h + ZKVCJYA9FALYgUBvp78QwM54e7ng5u4kNslWfrtCOIuOcpD3cJ4AdnZWMoFdVLi7OuPp5oqPUjbaXc51 + tcdPdGOAhw2hPjZE+WkI9zEjRJ65v+4SvK1nEaybrSZmZUfoKIh1JiPCnhg/C4LcjOU8ZdpFW7GbjiRE + u5CW7Elejj8V5eE0NsTQ1BBOZZkXeVkassSvKc6zoLrMhvoaO1obnFhY78KCKmeaShxoKdTRKTp+sMaH + 8Rpvpqs8WF/hzLYyB64qs+P6Imtuyzfj9mx97kqfx52pc7k7ZT53JOtxa5oB16cZclWaPrtS5rEzeT47 + xB/bphDA0q5N1PsPArgrRCkDfSldkfNU0vev+G8E8Mo0C3XO040plmxKMWdzsgmbk0xYn2jE6oT5rIqf + x3T0bCYjL2E8/BJGQ2eJvpjFmFxnSq65QiF9YwRKq5DA0XNUEnhajlcwGT7rX3CBAF4r2BFxCddFXsod + cbN5PMWAF8XnfC3DkLdSFAJ4Di9HzhDALwaJjye/7c3Y2byTMI/35Pl8kG7AJzni8xWacrTEnBOlFgIz + Tlda8G29Nd/UWar/kZwoNeB44XxOKj5nsR6nivU5XaLHV6X6Kgn8TYUh/6wx48dacxXf1tlyqMyJl3Nd + uSHGim7n2WSYzSLUcBY++nNwNpyPjel8rM31BQZYKpm7lmJXrUzQiExZiT21FNmxsDCWVuIPhSC2MMDU + TCF9Z5YtzOdjbjZfWn0510DGthk6Ryuc3W1w91HmJ7cXOy/jXZkz3G4uWiVr3VyuL7ojLcie7oI4Ni0o + 5ba+Fu7pWyi+fD27mgoZyA2jTMZxdZovAwtyWTHQQHNZMtF+CgFsqRLAfu4a/D0tCVTkwdeUCH9j4oOM + SAw2IDVIj9QAuYbfPNJ955DuPVdwGVl+l5EfPJuS8LlUxRnSnuNIW7YrzSmO1MXZUBZqRmmQIWXB8ykP + nkt16DwaIvRYKMculvHUnWF2EV3ppio6U81UdCvlnvOsGSnUMlagZSTHiiVJhnRGzVHJXwU9EfMYiDG4 + mAXcn2DCkkRTelIs6JKxu1DaxkQzKmINxMbokxc2X6BPfpgeeXIvuSFzyZe2NFKPymh96qIMaIk2piPe + hMFkS6ay7ViZa8/qLK1aEl2RiRVpZqxMN2O1tJtytFxe6MC1pU7cUu7CbSX27BaZ35trxuOFFrxSbsOB + Kh2fV9hxsETDZ7mmfJSux3tJl/Ju4iw+zJzFF/mXcqx8rppp/pUyF3DWfP6ZbcR3mUZ8naGvln5Wsn9P + JigZwPM4HjufI7F6EqvM42DkbL4Iv5TPRF4+E5n6ImYOXybO42S6kUoCf51twVdZxiq+lvWzap+yL91Q + JXxPSxynkL//jQD+NOkSPk2TmCxHX+7dlMMiP0errDlWpeHLUkuOFJpzLM+UE9kmnFaI3zQjjkk/R0QG + j4qsHhEZVI45UWnD4Qpr3pdn8kaaFa9I7PVCtBn7g+bxTOgc/iG/RflI9+MChWA24bDI3pdlcg/l8zku + MnhKmYdbmZu73owf6i34WeLDcwoJ3GjJuWYLfm214vdFGv5YpOW3hdb8tmgGyvZzfyWABeda7fh1gQ2/ + t2r5ZaGGr1qsOd3twT9XZcA1jczqSDBkPM+Gy8XxvqcniueWJfOPySRen0jkzbEknu+K4K5iHVeKYtsp + SuumpNnckzOX+8rm8lD9XB5fpMery+w5clUU396ey3d3l/Dl9Zm8vj6avUt8WVXqyKJEDSVBBqT7zCfB + 24BYX2Oi/M2ICrCQoMCS6CCNitgQLXGhYqQCraW1Iy3OnbR4L5Ji3M/DldRYF7ITPShI86Qow53iTBeK + 0nUUp2spy7CgucSGvkYnVnf7csVwCNcNBXLzUl92D3hxe78bdw+68eiED49P+nOfBNG3dovxkQezVR7s + mnpTVjTIYJeHuKbDhk29OnYOu7BjyIFtfbZs6tSwvl3DpsV2bOt2Y1efDzvkN27p9GJzqytbWpzZ0eTM + lQ3OXFXryM21rtxb78WDdR7cW+nIXWW23FWh5Z4qK+6V69zbYMTe+nnc0zCXvS3zuK9Nn4eWGPPYkDlP + TVjwwkpL3t8hwfv1Tny924Nf7vHi971esM9d4Mbvd7rw/VXWfLXVgjPrLTi10opTU9acGpOgfqmWw/02 + fN5vx6eDOj5Zai+w5eCIjqPjTpyecuWbFW4CV75a4cKpVU6cXOXAkdUOfLZGx4dr7Xlvg453Nut4fZMd + f1+n5akpEx4fN+LJZeY8u8KaZ1da8+S0KY9OmfKwtA9NW3HfpBW3DxpxyxIDgSF3DVhw74A19/Vpua9f + x2PjfjyzPJJnl8fxxLJYHp9KYv/qDPavSufhqThu7vXkcnkfVy6y5No2M27rUohjM3km1ry80pEPNnpw + 9MpAztwQxNnrffn+Zh++vcmdM9c4cXSXjo/XW/PeKgvelHt6bdyE18fMeXPUmreHbXljwJ43+x15R8bA + ByNefDjqx9tD3ryyxJ3nO3Q8KYLyeJOGJ5rteLzZnkdbdDzQZM+dtdZcV27KFeXmXK4QwNWOrK1yZLzE + ThSuERXRcykXZ6JBmQv3PAHcVeZMb7ULPSoc6amxF2jprbdioMmKIRHgZYtt/40AtqS3XAxBmTldJbJc + bM2SIgv6C0Q5581jOPdSpgpnsaV6Pjctlmc96MBzk568ssKHd1b78MlGJRM6gFNXBHDmSj++ucZfnk8o + 5+6I5o99CfBgOjyaCQ9l8Me9KTKe0jh9SxIf7Ypmv8jE9U1apjLm0yeORUecPh2JFrSn2LAw9QIB7Chw + oTnNmboke6riNVTEW8qyOc1iyDpyTJiql+BwwJN9G6J48bZUvnixgB8PN8K3HTPzAP/QKmiewbeN/HKw + gm9fz+X4Y/F8ers/n98q7/aBBH57rRQ+V7J+G/jhdDO/fbeQP35qg1+kHwU/K+iEf/bAdwP8cXKA799v + 55OHyti/LZrruhxYXWLAZOY8JrP0WZZtyFiGAaNiEIbFWAyJ8h6RdnmuubxPW25YYMcdi615XCWAXeW5 + +PDDHnf+uNsZFChEsEIC3y3yt8ebP27x5NfrXTl3lRM/brXlm5XmnFoqjljjJXxSJUauchZHqi7hqwX6 + /LPblJ9HRDmvtIGdbnCtj5wfIPIbwY970zh5dx7v35TDk9syuWoshVVLshjuKqJvcS1dC1tob1lIU10z + tVWNlBU3kpNdKY54IfEJWSQkpV0kgGMTEohTykBnZqjzACslnpdNT6kEsEr+KnMAC4ZGhlk6NEMADwwN + 0L+0j76BJfT0dtHZ2UlPdzcD/UvUzN8RJft3cIARwfDgoFreWcnwnRiRvmR5qK+fZSNjKvG7ae061q9e + w8rJKcZHx1TieHBpL/39HXR0VNHSlEVzbQJN1WE0lweIQ+ZHS7k/rRVBsh4qQUIUDeWJ1JQmU1o4Q/Lm + 5SaRq5R1zklRUZCbTr6CPAUZ5CrIzSInN5us3DwychQCt5CsnDIVmdklKrJzSs4TwEXk5RWrRGlxSQkl + pSWUV5RSXllKSZnsy88jMyubpPQ0CaIzJEDOI6tA+lKhEMCVfyGAK8iVbQpyBHmFMwTwxdLNCiGrkr7K + 3L+C4mryzxO+/46/kr8qlGOVVvb9OwFcUFguy+UUKgRwUSXFcuwFFMrvKigolXNLBMXnUSTHFVFSWER5 + QQEV+QVU5eUL8qhWyODMLKpTM6lJTKMuNonG6ARaIuNojYyhOyGR3pQUcVRTaU9LZlFmEosL0llULMfm + J1JbLMfLO2sqjqSjPJKJ+liGCjzpSbJiaYoxGystuaXdgQe7Xdnf7swrC515v1nHp432fFGr5ZDoxEM1 + Go412nGyxZEzi1w4u8iVM22CRaLX27wE3nzVobSunO2Q/aKrv2q35UyzOSerDcRhkgBGnKWvmyXQabXm + pDhDJ5U/0dt1nOhw5lSPO6eWeHBywIPjw24cG3PjpNi/E4Jj04IpDxUnpv1UEvjLMX8OjfhzfFkYJ8cF + I6EcGfTnaL8/JwaCODIQyOe9vnzc7cMHPT682eXB2wN+fDAVyVvLQnllPIiXJkJ4ZjiauxbGcEtzGjvq + EhgtDqatIITqgnBSkv3w9bfH3t4MG405VhammJtKkGRmjJW5qQRUAlMTtGYSTJkYoZF91qbGKiFsbWEu + AZMppufJ3wsEsKGZEUYShBmaGahQSGDlj82LBLDbDAHs4i2QVs0EdrRW/xCdIY0lKNNIsHb+z1NluwLl + DxVbJ61K+ioE8IVS0YHh/hSWZrFs+VJ2XLGBqZUjTK4YZt8De3jrvVc48MlbfPzFAe554E46lrSRX5FH + 98gSdt58FXufeoCHX3ySm+6/nZ6pQdLKc4nNS/0X8lfBX7OB1YzgfyOAYwqySfwLAZxaXkpScRFxBTnE + yv7IzHgC4gPwjXAjMMKJmDhn0lJcKMhyVTOAm8q19Lc5smEinKs3pnLD1nSuWp/ElskI1gyFsLI/nGWd + 4bSXe1ASZ0VWkAmp4r8meigE8GySfWaTL8FUfZYl7eLfDTaI77kkgO3LolUCeErGn0L8Ti12kFbHMnHI + pxYprT2jLXZyvEL8is8qWNKgFd/AVl3ulaCjvcicBrFZDRkmNOfZ0VrsS2tpDLV5iRSkJJIWkyg+cyyh + /uEqAezp5Iq3izNhfl6kxIZSW5LJcHcL6yZ62bp88E8CeLz7POm7iOn+VlYsbWNZbwuDi6rUeYObSrOp + yEklPzmWrLhIYgP8CJB+vR10uNvaEhMQSIXo2s7mZobEVkz0D7BcbM0KsQmrxhSMsGZilDXLRli9bJjl + o/2MD3QxPriY6eEeVo0vYcVY73n0s3K0jxXDS6SPGawc6WO1bFcxulTFmvEh6XepHDso15HrDfWpmBrq + YXJpN8ukf2V5xZhsk2uM97cz1rtIsICJvoVyTBsrhtpZM7pYnkcXG6eWsHXFADtWj7B11TAbpvpZM9Yl + 1+lU50NWSPK1o+2s6G9meX8jq6RdM9DCxvOk7zalHLRCBEurEMDbV/Swc+0AuzYOs2ZKbGiH2ILsCFyc + TdFq9bCxVf7AVL5uN8TCWk9kdi5GZrMxtforCWygEsQKVAJYZyryaaaSv/9S/tnVWmRZo+L/dwLY8N8I + 4D/JXgVKCeh/XZ8hci9mBJ/Hv2f6zmQGzZC/ynk28rsV2DnOwF5+h72TyQwcDFQ4ORkTFuosdj1KJYAb + a3NIivMmJNCOwABbAgJs1DLRCgHs5KZkFBmjczUWvWWGq48lnv7W+EjcGBSqISpCQ0aCPY0Fvky3JXPN + WBm3TFZy41gxV/RmsqY5mpFSP7olXlya783yimA2NkRybUcqd4q/9eRIPq+PF/LJRB7HRjP5aiSFbwdi + OFTnwtvKl9yJc/lHwmzeTjfkwyxzDhZIjJVvw8E0Sz6M1ue9sLm8EXAJr/tfxvthEtxHW/FRlIY3g014 + 2d+Av/vN5e9Bc3gv2YwPM814L0OPd7Pm8EmpPqcX2vBzvzs/L/Xkuz6xcRKTnuiw5VCrOZ+1mPLFInOO + dGn5cokdxwadOT3uxckxbz6X414qm8eTqbN4MmEWL6TM4rX0uXyQbcqXhWIfiyXGK/LgbL4LJzId+TLF + ls/irflU9NinsdZ8HisxopL5G6WbQaSOg9IejLDnULgdn0TZ81qCA08l2nNvvD23xDmwK86FDYny/JJ9 + GUsLZEjG+LD4aWPiDyyrzGd5QyUbOkRGevvYNTzG9tEJlncvoS6viJjAUCKDQogICSMkNFQlgYMEwUGh + BMn2QNkfEPAnAv1DCfFV5vj9E7Eh0RcREyxtaCwJ4YkkR6eRk5JLS3UzLTVN1JZVUik+UF15BX3i07aJ + rspITCEqNJJAv0C8PPxwd/NCmefXxtYZC0tbTM1s1BLQTs6eeHoFEBGVwMjECu578DFeevVtnnz2Ra66 + 9mbaOvuIiU/B3TsAL7kn34DzGbPnCWAFCrnq6Rsm+5UM2/+ZAFYyev8b/kr8qpm/5wlgpfSzq0sQjg7+ + 2Nl5iz5xQ2PrrpK/VloXLDXO+AREU1W7kPWbruCJ/S/x2psf8eDDzzA8uoqUtEL8ZL+bZ4ggWO7pT/L3 + vxHAPgGyLVCgtH/BBaL337dfgEIA+wkClHLe/oECL0KCPIgN96AwI1hsUzgLasLlfQXQUOZBZaEDVcVO + NFV50FTjSVWJC2kJ1oT6meBiNw877XzslI9XrAUaU3UOYJ2rTnSOTvTNv87/O0Pw/r8IYOU4kxkC2NpE + rZyiEMCmGuXjNjeSMnIZGJ3i1nse4IEnnuXh/X/jwSef46Y997B68zaWb9zCLffcx+sffMwj+59lfHql + WlkoSvzmfIkZlDmnb9i+i1cfeYw39u3jqvZ2Ot09WarVscbKnu2mNuww1bLazIoxS2tG3VxZlZzIvulJ + 3nzofv7x9BPcdNN1LO7qpLi0XGKVCto6urn62hv5+z9e47MvvuSzg1/yzoGPeVtw4LODfHzoS744doxj + Z85w9p//5OuffuLrH3/kK8G3Pyj4gX8KfvrxB34R/PrPb/n5y4Mce24/r129g8fEZj5cVcAj6bE8EuHP + vUHO7Amx59ZQiY2lvSdEx94QB/YE2nKVhzFb3Q3ZFmDJNaIr7gx35sFQNx6P8ObhcG/2RXlxe5wnV0U6 + s8FPy5hOn37L2UzqTNjk48D2QA82hHgxHuHFQJgbQwHOjAW6MxLgRr+fC21+jjT6OVDt70CJjx25blak + iR1JsjMmxc6EbEdL8sQmFogdK9OZU+dszSI3O8ZC/diSFs/uyiIebWvkud527q4tZ2dGMusTo+V6IQyF + hzIYLnpLdMhkQBxTgmHRJcPBIawICpR782O3jw97vbzY5+vNXn8f7pPt9wYGs1f01D2Cu8QH2hcYwiNh + YTwRGcWTMdE8ERvDQ/Ex7IuNZndUONdERrBJtk/HxzMWn8QS0T8LEtKoTUinPDmbvKRs0hIzSUrMkDg+ + i0RBSnLmRSTL9kQ5PiU5naxMZUqjPLIzssiSuDQ7VeLelHTykjME6bIs22R7eobErAqyM89DrpGTS2Ze + jorsAumjIF/i1TxyCnNJz5VrpCcSERdGYJgvianRtCyqZnSylwGFAC5OwdVbIYD1Vbvu6muLh5+dCjcf + 5aNSKxzdzATmIo8m4qcYi79iIP6LvsiREV5iw4NkbITHeqrw8Bb/RSGAZTwoBLCtw3wc3ObLNQzxFd86 + LslOJYBzCkX+s+0JiTTG1WMeWjt99cMPhWhVs21tZ8hftYqKwFLGhArZrkJiFhM1+9cEfVtj9GXc6Csk + sMi9oQKReyONQGRekXuV5DUXfWAx83HtBZjKNgUXqi5ZyLaLJLC15Qw0luo9KdvMJC6zsJT7tLVCZ6/F + 2dEGN2db3F1s1Tl+1WVnLW4ST83AWiC+jKsWbw9b/DztVQI4SCWAnfGVWM3Tw0ElktXMZxtLsVfSt/Q7 + UwJa4jhHJQtYYjonR1ydlXmDxVd3d8Jb4j2l7LOf+IVBXuIjybtIi9CRqsx3GmhCjNd8wh0vIclLj+JI + e2rTvGnI8qUowYnEAHOCXfXxddEj2NuccCVBK8yeRLH/mRneFBeKDq+OpL4mjPISD/F1tWRlmFJRrKWx + xoEFjU50tLixuNmd9jo3FlU4017qQm+1JyP1fiyr82V5lSfryp3ZUqLj8mJbrs635MYcE27J1GN32hx2 + p8zm9uS53JY0lxtT9Lk6VY8rUuezI3ke25Pnsy1VX2TdgE2Ctcn6TMfNYTzmsosEcGfwLBaHCsJm0xkx + j86oGSJYyQLuiZ0hgZV5VRUCeDzZmBWp5uocp2uTzcXHMRV9YSitEWsTDFgRP48VcXNZJn2PR8xiVPof + DpmBsjwZfZm6/wJWKm3MXJZHz2E66jIVkxEKEXyp2k5KH0oW8Aq5x5kMYIUAvoQ74mfzuPyel7JNeD3b + mLfS9Hhd/M4LBPDzgbPUUtCvRV/CW/FzeSdFb6YyTa74iRIvHimx4liZAnNOVlnydYOGr+utVFLpuPia + R/LncKxgLscL53GqUI9TRXM5U6LH12UGfFdpzM+15pyT4xX80GDP0UpnXi904/YEDcPucynRzCLB4lLC + zfXxNjNAZ66Htdn8mSxgC4ldFOJXI7GDjFOtRmTkPAl8gQA2V0hgM321VaAQwBZmerLfQP24y8HBEld3 + O/GbHMWvknEcKOPZx1Z0gMQcTqJXrC7BwXIWgY765IQ6MlCSxI5FFdw50Mr9EuPdK+21C0oYzgujUsZ0 + XbovQ615rF7aTGt5GjFiU/wcLfAVe+HjJnA3x9/TjEAfE4mbjYkNlNg+2JDkQD2S/eeR5DuPZO+5JHvO + EVxGusT72YFz1Kza8mgj2nLEVmW705TsRE2MDSUh5hQHGlIcNJ8SOa4ieC61YfNpjtFnUYIRi1NNLqIj + xZiOZBPak2Q52ZTONFMGFeJXZGGsyJbRPA0Dsq03Xp/OyDl0hs9RM4AHlQxgQZ9gSbwxPQkmdCaZ0Z5i + wYJkC/X/+FLZVxhlSG6YvkDaUAOBPtkheuSEzKcwXI9y2V8jv6E5xpSORDP6U60Yz7JhOtuWlVkaVmRa + sjzNjGm5h1UZZqyWuGWLxDxXFjtyvcjtLVUu3Fpqx2355uzJNuKBPBNerNDyTpU9H1bY8lGxFR/kGvNO + +nxeT5bYKHkW72XN4tOCS/myfC6nK/T5Km8+32XOEMDfK2StjPfTEmudTpzDSSX7N34+x+L0OBJnwGGR + 20/DLuWTsEv4SGTgo3DpS+Tqi7jZHBH5P52pZORacDZTIYBN+DrbjK8yZPm/kL8XCOCzmTME8OHky/gk + cRYfK0Rwth6fF5uo8/SeEBk4WS+xUbmGw4XmHBL99KVC9kqfXybp83n8HD5LmMOhdAO+FBn8stCCI2Ua + DpVb80GeJW9n2vJmugOvJdvwUowZz0fo8XfRQa8oGfyZhnySr89nhfP5vHAuBwtn82XpfI6Xy70q83PX + mPDPOnN+qrPgl3oF5vzSaMGvLVb8vlALbTb8oRDBbdoZyPKvSjbwAmvOLbDhlxYtvy2w4zdp/1DIYNl+ + Vs4/1eHKd9MpcEU9swblga2rcmZ3ZyjPLUvi0825HNuUzam1mZxalcGHfZE8J/v3yo+9WZTW7vhZ3JF2 + Kbemi8LKmMVNRZfwyGILDmyK4Jvdhfzz7gqO35jDu1vieXQ0lM01bvSk21ITaarWU0/0nk+srz4RfkYC + E8IDTIkOspKAToxSuC1JIrQJYTbSOpAR7y5BvRepcYJ4TwkIPMlM9iQ/3YcS5SukfD8qCzypzHGmPMuW + ymwr2srtGVHI2IEAblgWxq3jQdw1Ls6s4L5xXx5e5sv+lUE8vTqERyf9uGvIjeu77dnZYcP6FguWN5ox + 2WzO9EJrVsu2DX06NvbZs6nXlg2dNqyVB72+3Y6tPe7sGvBn+xI/CXjdWdvkyKYmJ3Y0u3BloytX1Tpz + Y50rexu9eUCwr9aVu6ocuaPajj1VGu6oteCOOlNur9Hnttq57G6Ywx3Nc9nXYcBD/aY8MWrO88steHer + LYeuceDsLW78fIcnv93liVKW9o89Lvx2ixPf7dJydqMVJ1ZZcnRSMGbJl0M2fNGn5dMeLR/22PF+nyPv + 9zvwQb89nw46cGjEkWPjTpxa5sSZKUdOTztwarUjJ9c4cGSNHLPGlvfXaHh7vZa3Ntnw2hYbXlxvzTMr + THhy0lhgKstWPL3CkscnTXhkmTEPy/aHp8x5cNqKfaOm3DNixr2jFjw6YceTEw48NqzjkSEnGRM+PDUZ + xjPLY9i/IomnV6bz3Pocnl2XyWPLY7ml24UrWsy4vt2MO3oteWhIy5NjWl5eqePDrR4c2uXN2Rv8+e5W + f/55qzc/3uYprTNfX6/j+BW2fLzRnPfWmPDmckNel3t6c9Kcd5ZZ8+6oKKal8ruWOnBgyJWPRzz4dMyH + 94e8eLPPnZc7nXiu1Y6nGm0ESqvjiWa57xYn7pP1W6utuV5wjVICWt7tejUD2J7WFCMqY+dRmTBPzQBe + mKelvXCGAO4R49lV6UKnvPcuUYqd8t57aq3oa7Bkaas1Ex22ahlohQAeUQhgGRMKAdxTZkpPqQV9ZdZi + 4CwYLjZlrFiPqZLZrKuczVULDLhnUCHknXljgxcHNvtycHsAJ68M5qtrAvn2Wn++v9aXf17vy483B/Dr + njD+uDuK3++N4/cHEvjj/gTYF8+vdyfxzW2JHLo6jpdFHu5c7MSaPCMGksRRStCjI8GURYlWLEw+nwWc + 4cSCdFcaU12pSXGiKtGOCmXeg2RLWjLM6cw1Y0p5Pks82LM8mKeujeXjp3P59pNafjvZxu/fds4Qwd+0 + zeDMAs59Vs03r+Zx/IlEvtgbypf7IvjuuQw4UAXHF/DLmWZ+/raF33+U48918MevM+A3Bcq8wj3w4wB8 + PcivX/Rw4vl6Xr0pjbtGvdhaY8rqPH2WZ81nIn0eo2nzGUnXZ1CcycFUA5aKAZjMMWVzhYarG7Xc3m7F + E+M2vLvdjZM3y/O7w4s/7nGHuxXiV4Hy4YUP3OUFu935/SYnzl1hx4+brflmuQnH+/Q4UH0JB0pm8Unx + LDEiszhaM5eTLWLoekz4VmTz103OcLX0cUug9BPFuftS+ea+HA7encvLN2Rz+9okNo8ks6wvi6VdJSxu + qaCltpK68ioqS+soLWwgO7OKtORiEhNzJGhMJ+ECARwfR0xcHMlpqWoZ6PbOxYwtm2BicplKACtZwBMT + E4wpRPCIQgSPCIZYOjLI4NAAAwN99Pf1sbSvn+GlAyr5OyLt2OAgk6MjTEofk6OCkTGmZHliaISRgUGW + SV8KAbx53Xo2r9+gZgMvk2sN9C2RPnvp6+ugY3EtLc25NNYmUV8pgUN5MA2lQTSUhNJYKuvF0dQWJFBd + mEJFYRrFuSnk56SQk5VGTmaGtJkqcnNyVOTk5ZEryMrLJSs3X1BARm4RGcp8vTmlgooZZJcLysjOUVBI + Tm4hBXlFlBSXUF5WRm1dFXV1lVRVl1FaWkBeXjZZ2VlqIJ0urdJvdkGJoFQgfRTOZAHnKiiokLZSMEP8 + /pXMVchelQg+317AX49TUTSDi4SvcsxfWqX//II/kVdQLv1UCCqlb+m/pIqi0mqKS2tUFBYr+8rk3L+i + hILiUgqLSiktKqassJiKgiKBtPkFVMpvrMjKpTItW+Q6UxzINBpkTDUlJNKemkqnPIvOnEy68rLoLsxh + SXk+i8tzaChMlfeWyoKKVLG7sfRWRrOyOYHpUl/GM2xYJQ7ZFWUm3L1Aw35lzsIOZ95Z5MTHLfYcbLDl + yzqNyIc1R2s14mjZcqpZx5mFYpPanDnd7syZdjfOdnjydacP3/Z48023B990ufHVYge+brfldIslx+sM + OSE422zBV61WnG7TcLJD0GnLyS4Hvhrw4Kshb84s9eLkkDvHR905qmT+TgmWu3FspRtHV3hwZFrZ5s2J + SV+1HPSxMT9OTwRxdiyIM8P+HB/w4kSfJyeW+HB0iRcH5T4+63Tnk15PDvR68NGwL19Mh/PRshDemwjk + rbFAXhoM4e4GP26oDmGzjPXhXE86CwNoLAohXfwYPx8t9jZG2CpfzJobY2VqhMbMWCV9tbJsYyL7TAyx + MTZAa6yPtbGh7DNDoxDAZqaYmv4lA9jCGENzI4EBBqb6KhQyWMkAtnG0wcFVh7O7k0r8KmWgXb1m5gLW + OlirBK9SBtrESo7XKn+iKH+Snv8DVfYphK+ThwMefq7oXG3Q2CuEsLU6t1hpVT7Tq0bYtkshgEeZXjnC + 3vt289a7r/DxZ+/yyefvs2fvrbS0N5KYmUBZQzlLlg2y6Zrt3HTf7Vyx53oWL+sjVcZTZFaiSvL+Xwng + aIUAzs8msTif9KoylQROLi8lobiI2MJc4vKziMhKICgxCL8oDwIiHImMcSAt1Zn8TBcZ+w40iLM+IGNt + 47IIrtqQzHVbUrhiXRyb5D2uHgpk1UAoE4uDaC12ojDahPQAQ9L8jUnyNiDe/VIyg+ZRGm9EU44VHeVa + BuodVAJ4x2QMO5ZFskbGx4ouV6a7nJjqcFTJ3yklE3ihjjFxzoeaZ7BUfI+lC2wZFPQ3aeit1tAhtr8l + 14QFeVa0iz/RWR1Me008DcVJFGUkkB4fT0RgGH6e/ng4K/N8uRMVEkROaiLVxdm01hUz1N3C2ok+ti5f + yvYVQ2ye6mfD+BLWjXaxcmk7032tKgk81tXIQGsFbTWFNBZnUZEt+jc5hozocOKC/Al0c8XTQYeTRimd + 5UFabDw1olcW1NbR1thEV8sCulsX0buojd62hSxpX0TPImVbM12tjXQuqKeztU72NdK3uJkeGQ/dstyz + qJm+NgUt9Le3Mrh4IQMdgsWt9He00reolSXST19bK92LWuha2Cz9NLK4uWEGLfWyTem/QbbXq/11L2qg + o6WGjqZq2mW8tQkUO9rbWs3S9nqG5bcqmdFDixtY2tEg77+eJQur6WqukN9RTp88h4FF1QwuqmSpijLG + OqqY7K5l/XArWyY65P12sV2glIZWSkRvnZb11X3s3DDE2qku+ruqxVbH4eFmjrXVXLRafWxsDdFolPmu + 9DE1O08AW84XGTXA0sbwfBawsQplzl+V+HVUiF8rHC8Sv1qB8sfrDP5jLmDZby+trZOFyK3IsJ3yQYdA + WiX7V80AlmWN0r9aAvoCCTyDf8/0vUAA/zsulIZWsn4vQCWHlUwgZW5hJ9MZOM7A3sEEe0djaZUv+edj + b6ePs7MpEeFuamWPloZ8lQBOjvchLFgncCAkxAEvLyuVAHZwUchjY7WspJO7uegvSzx8LWcI4GArIsIs + SY2xoTTZga4Sf1Y0x7FuQQKrm6KZrAyiN9eNRUn2LIy3py/Dg8miIPHhI7mmLZk7xdd6ZryQd5aXcWR1 + JV+vLObHFXn8NJ7KsVZf3sk3529xl/JM9CzekED/00INxyucOFHqyOFcaz5JMuHDaEPeleD+HaXMcoQJ + 70Va8k64Ja8EGPGCxLvP+s7m2YBLeSPRmAO5lnxUaMZHJcZ82Wgtts2Z3yQ2/U3i0R/Eb/1mqQunlthz + uN2CzxaZcVDaoxLLHe2348SIC18t8+DspBfHhlx4T2KlV0rm84+8ObyWO5d38gz4OM+CLyUGOVXkytdF + nnxV4MGJLBcOp+r4PNn+PBz5LEHscJyOQzGOHIoVRDvxeYwTn0Y78mmkjg9EV76S5MSTSQ7cI8/txjhH + diW4sT7Zh6kUX4bTAhjMCmNpftwMAVyRx3RdOetEXrd097JrcITtwxOs6u2jpbiMpFAlYzeUyNBQwsIE + oeGEhYQRLtvCg8IICwwlNCCMEIX4VUo/CyL8won8C+KDo/9ESAwJ4XEkhCWQHJVKfnq+yHw7Hc1tNFXX + UltaTn1FBUs62lnY0EBafBKRwcq8wkHq/L9urt7qPL9KyWdTMy0mphqsNQ64e/gTJv0WFleycevlPL7/ + eV5+4x32P/8St991L9OrN1BUXktASCTuXkEqCayQvwoR7BugEL3nCWDvMLx8/ncCWCF1/xsulHtW4OUd + cRHuHqE4OQfIffuitfHEUuOCldZVJYKtZFnJBI5JyKK3f4Kbbt3Li/94h3cPHOSZv73Olu3XUlGzgLDI + ZLzkWc5kKP9PBLCyfJ7QlffhE3AB57cFKOTv/0IAK6S4wE+WFQLYL8CboCBPosO9yE0LoqIojPoqQaU/ + 1SUelIotLsm3p6LYkapSZ4ry7EmINifA2wgHm/nYaPSwEV/JUvFRNIqPYoG1zhpLe0vMxFcxtTZSYa58 + wKZ8tCbbrMR/sdVZ4eAsutLVTlpb0U82aGWbpexXPnZTp7+wVub4NBffx1L0o+hRd09Ss/IZGF3GzXfu + 495H9/Pw/ud4+Klnufn2u1i7aRurBbv33s+r73zA3gceprO3n2AZ3w46ZxnDwdRVVLF11WpeuPdeXr/7 + Tm5c3MFSHz8mZaxttdBxrbENNwi2m1ixxtya1S5ubElK5rGVK3j34ft5+sG9rF+3UuKAQkLCIgiRvnPy + ilm+ah1PPfM8nx86ytGTZzh4/BQHj53k8InTHD55mqNnznDmu+/49uef+edvv/L9r+f4/tw5fjz3Kz+d + +5lz537hdwGyzM//5NyxQ5x48RneuHYnjyoEcHUhj2Un8kRcKA9FerMnRMfNQbbsDrLjziB77pb1PbJ8 + jacpO92NuNLPipsUcjjYiUeCXdgf6cOj0T7si/XitnhPdkY6slL0dJ/NHDpMLmHI3phVXvZsDPJgXYQf + y6J9GYr0YmmIOyPBHgwEuNMb4EZ7oCstgpoAJ4p97Mnx0JDiZE6i2K40O1PyHKwo0llQKPa0SmNKm4OW + YQ8XtsZEcltuFo831fLykk7eHOrnsZZGrpNtmxPjWRERzlREBJPhUUyHRbE2JJo1wZEsDw5leWAAmwL8 + uNrfhzu8PNnn4cE+by/2+vuyNyRYfnsot4eHcXNYGNeFBnNjaAh7IsPZGxfLvckJ7E1JYE9aAjclx3FF + fDQb46KZSohjKDmJJcmpdKRm0CIxVn16LtVZRZQKcjMKycqQ2DWzSGLOQjKV5QsQfZaWmittLnnKh8u5 + xRITF5InYzMvM4+C9DwK03JV5KdLXJyZQ5bEcenZck6e+MQqpE8ZNzn5RSryCkskphRI7JdTWCgxcjbJ + GalEJ0YTERVMcnosre21TExL7D68SI5JknhBK/KmL3bfDHc/W/yCHAgIdcLL316d49fJY6Yqh7Onmdhm + xVYbig+gJzDEN9CWkEgXdfqV8BgPlQBWKoAo5Z+14gfY2s+V4+fh6qkvx5oQL7YpK89VYm1nUjJtCQ43 + wsV9LhpbPdHNpqKrlcxbK/Vjjgvkr0oAX8TMxx3mMkaMFML3PAGsJ+NGaQ1sTDBSyF813lHKO8/ET8rH + tObmSraiQvDOQFlWtpkrU++ch8VFElj0i0IEKxm/1qKLNKI7ZLuJxG2myke8ok/sbOXZ6JTyznZ4udvj + 4WIny7Z4uWrxdP4THs6W4rtb4+uuxd/TlkBvR4L9nAnwccLH0xF3OcfRQSP6z0r8SAvpV3SU40wJaCcn + J9E5DrIuyw7yPhx1uLuI3+TugI9cU+nXX3yzUB8rYsVXKkhyoUh8pMJYDXnhpmQF6FESbkZjqhNt+b60 + S3xameJEcqApQc5z8XK4TM43EFs8QwLHRTmQmuxObpYfSinoMvG1SooUH86OAvGFait0tNQ509bkQtcC + D3qaPeiqd2NxpcQvZS4MVHsxWu/LRI0X05UerCl1YlORjh0FWq7IteDaTGNuyNDjprTZ3JRyGTcmz+b6 + pNlcnTyfXanz2Zkyj20pemxN1WNLuiGbMgzZkG7E2lQDViTqMRE3h+HoS+mPuEQlgDtCFFxGZ/hcOpVq + p9F69MYasCRen944PfqlVQjgsUQjppNNpQ8TViWasi7BmDWyT8EqOW46di5TMbMZj7qUUel7JHwWQ6EC + 6V9ZnlTKPyfMZ+V5rFLa2HmsECyPVojguayIms0qJUNYWoUIXi7nrwyaxQa5z8sjZnF95CzuSpzDk5mG + vJJnztsFZryTacBbSXN4JeYSXlLKQIdfwj+kfTn6El6Pn81byXq8l2bERzmmfFZowaFiK46UKbDgeJUV + Zxu0fHWeAD5Wqs/hvNl8mXsZR6Q9kTePkwVzOFOkxzdlhvxQZca5Okt+a9DwW6OGn5rsOF6j450yR+5P + s2Kd3zza3eZS5qJPmr0hgRK72BvPw8pkDlpzhZw1wVZsqK3ygYLORv0Awk7WNVbmWJpL3GOmrxK9M5nC + Eu8osDJQ5xC20ZrK8Ra4u9mK7+NMYIgHwWGeBIZJXBugUysHuLmZ4mQ/Dzfb2YS7GVMU6cpIWQqXt1Vy + d/8CHlzaxiMj7dywsJTR3DBqZKw2pvsxurBAjdvaqzKJUzKAJS7ydrTES+TO08VU5M4Mfy8TQv1MiVZ0 + UJAhiYH6JPjOJ957Pgme80jwmEuixxxSveeS4T+f3FBDymMsaM1yY2GmOw2JjlRG21AUYk5RsBHFQfoU + B86jNEjJAp5PQ7SBOjdvm8QKF7BIYoFFCSYSkygksJIRbMFwoR1jpfaMKyi0YSjLkkGFGE42ZqmMzSE5 + dijBlKXSV5+gJ9aITuV86WdRkjlNiWZUC4pijcmPMCJb7jM71HgGIRdgSJ5sL5E4pSrGlKY4CzqSLVmS + rmE024ZJwfJsDdOZlkynm7JcsDrLgrUin9uLbLmq1IHrJf65qdKRm0u03Jxnyk3petyZKXFOuZZXK+15 + q8KGt2Qsvp5rwisZ83kp9VJeTruEt7Nm8UnBbA6XzudUmT7f5OjxnZz7XZosi1yfTZzH6bi5nFbIX3Xu + Xz0OJxhwOMlYxSdRczgQfinviey8K7J3QOThE5HJgyJvx1KMOS33eibdmK+zzPgm24JvMkw5K/rhjOiH + UyIrfyWAlazgr7IMOZmhz8HESzkQN4sPpP0wc47coyFfVIgc1dtztM6BQ5U2fCby+GmWEZ9JDPiZnP9J + wjwOxF7Gh/Fz+Fz00CGJEw8VWvKF/O5Piy15X57X25l2vJ3hoOKtVFv+Hm3E86Fz+Vv4Zbwusv5+xlwO + ZM3mw6xL+ST7Er4QeTxaos+pckO+rjLhn7Xm/FBjzo81ZtKa8JNKAouMLtDwh0ICK1hkcx5afmu1Foj8 + LrDh1xYtvzfb8nuTlj+arfm12ZKzdWacXOjENxMJsKOGWZMlNuwQJb23P4zXViTw9a48zm3N5re1Kfy6 + PFEC0RA+bnTjH7lmPBJ/KfcmXsKepMu4QpTVqoBZrI2axQ2lxvx9LJhj1xVy5rYyDl6dyZsbInlMtu1o + 8GQgS0djrDmFMvCSRIBifeZLYGdAqK+BmnYfHWRJYpiWlEh7UqN151tH0uPcSI9XJqBXSGBlDgIvctJ9 + KcoOoLwgWAK8EOpK/agv9KA6157abCu6qnRMtbuzayiAm8cD2T3qx75xHx6a8uexFUE8syaE59aG8dy6 + UPavCeK+Zd7cMujElT06NrdpWNFszniTGePSLmsVAWizYnWXDeu6bVnfacuaNhvWttuxpceNnQP+bFvi + J9ucWdkgTq1CAC9w43J5XlfUOnNdnSt3NnpxX7Mfdzd4sEfWb6t14JYqWxEeDTfXiPNcbcyN1fO4qW6u + YDZ3tOpxf68Jj6sEsBXvbrbl0JUOnL3JjZ9v9+Q3hQTe7c5vNztz7jonvt1hx9kNNhxZbs2hMRl8Q5Z8 + NqDlo24b3u/S8k6XPW/2OgkceafXgQ/7HPhs0IHDww4cHbHnxIQtJ6ZsObVGx4l1Oo6ss+fTtTa8u8aS + N9db8sYmS17das0LGyx4ZqUJTy034YkpU/avsFTLPz++zIRHJox4eJkRD00qpaCteHDSkoeWWfHEtA3P + r3Tib8td2T/uxOMjLjy81J1HRgN5ciqaZ9em8/z6XP62OZ/nNmbx2PIobu7ScVWLEbd1mvLAUg3PTtry + 6ip7PtzqztGrfTh9vQ/f3erDj7f78MseT4E7P+524NubbDl5jYbPtpvzwUZj3l5jxBurjHl3pQXvr7Dm + vXENH4xo+XDInk+GnflsxI3PR734aMiDd/vceK3TiRcW2PFso63AjqcbHXi62ZH9C1x4pMWRe+T93lZv + yw3yjq9qcmNzgxvLq5xYmGZMbZI+9WmGNGdbsrDAho5ie7rLnQVOdInjs7haIYB1dFZp6a2xpq/ekqEF + 1ozLOJrsmCGAhxUCWIzvkgpzestN6S0zp7/MkmEx5OOyPl1pyPo6PS5fYMjtvWY8Oa3j1U2ufHS5J4ev + Up5LAN/fHMyPNwXw041+/HKjr0Ce0c0+/HpbAH/sCeHXO0P47a5Qfr87XCWEf7srjh9uS+TYtXG8vTGc + B/s92FpqxrA4WT1KFnC8Ea2xpixI1NCaaq8SwM3prtSluVKd6kpVkiMVCXbUpmhZkGlFZ645k7VKeXQ3 + bhr346Ht4XzwRA6n3qnkh89b+PV4B5zpgdPdcEpwvI1zH9Vy9uU8jj+VxJFHYzn1TDI/v1sMh+vluBb+ + +L6V339ayO+/tPPHuQ4JXgW/Cn5bzB8KAfxrL/zYB1/3w7F+vntzIR/tK+DxtcFcLwpxZ5W5GC59lqWK + 86aQwGJslorzOCgGYTDNgPFsE9YWW7CrxpJbFlmKzrLnjS2uHLnBl+/u8OOPvb6oWb/3eMK9PnCfH+yV + 5Ttc+ONWR3653JofNprz9aQxR7rEIFSKUSqZxUdFs/i4QFAsBqryUr5onseRblHqUzac2+EONwbAXdH8 + 8VAaPz6SxZlH8/j43jyevDqV61bHs3YkmbEl2XQ0Z1FXlklVYQEVBVWU5DeIDqwmLamMlKQCkpIySExK + UQngGAlEY+PiSElPo6ikmObWBUwsW8byFStYIVi9ejWr16xm1YqVglWsXLmSlauWz2DlDFYtX87q6WlW + Ti1jenyMyfFhVk8uY8u6tWzfsEHadWxYtUrFuuUrWDU5yVrpe+v6DezavIWdW7bKMRvlvAl6ujoZ6Ouh + b4mSAVxHc1MBtTXJVFdEU10WTk1pBDVF0YJ4qvOTqMhLpTwnnRJBYXaGBLkZZGdkCrLJloA3S0F2gZrJ + myVBbaYExJm5RefbYjJySwVlggpBpYrMHGlzlHl6y8iVY/MkIC7KL6SsuIia6nI62ltoXVBPTU0ZZaX5 + FORnkp+XLZCgujBfUCgBsxIslwhKyS5USOAKlZxViNuc85jJ1p0hbhVcKOGskL4Xtl3I/r1QKlpFsfQj + yJfjLyznqoTwTKv0rRLN56FkGefLtoKSagrlnIKSKgoVArisRkVBiXJu+XnIsSpKBWVqdrCS+Vwiv6G8 + sFyFUiqxXFAmz6Q0O59KecaV6dlUpSnzBKfSlJlOa04mHfnZdBfnsaSsUPRaAW0l2TQUpNJQnE5HTRb9 + 9WkM18axtjGGdeU+bCxw4JoiDXeI7npUnJaX23S8v9iFT9udOdjqwBHRs8frNRyrteZ4nUIA23CyWezR + Qp2oBQeOdzhxstNV1IUn3/T78U+x5z+J3fh+0JtvlrjxdZcjp0R/Hmux4Fiz4tRoON2m5WSHoNOGE2Kv + T/U58sOyAL6b8OfMqLea/Xt0zJ0jEyLfk2JPVrhzbLUXR1Z68uW0m7rt2DIvTizz5cSYN6eGvTk74sPZ + IS9O9rtxos+VE71yXI8Lh+T6B7tcONjnzsFBTw6N+vDlRCCHlwXx+UQAH47680a/P/eLnbix0p3NEiSP + 5brSJwHzwpJgspPdCFC+htca4iABkM7SGJ25CToLCYSktTMxwNZYD1vDedgINAZzsTbUw8bc9DwBbIap + qan654U6T5Xl+ezffyOAlexfZ08n3H3dcPV2VZedvZxQyifaOs5kzqgl05Q/Tc6Tv0pZaCs7i/OtuZol + 7BXgTmR8KL5BHji4aNEpc+iEeFJZW8zy1WMqAazMAbxq7QR33nUTr73xIp9+/j7vf/gmt+65nobWamJS + oknJTaWovoyOkV5W7lrP1PY11Ha3kFSSqZK1Cskbl5+u4r+RwJE5aRcRJYjOyyK+MJeU8mLSKktJKi8l + vriQ2KI82Z4jfSYSmBiCf7QEk5FORMWKX5nmQn7WBQJYy0CbK2tGgtk8HcmutTFsWxnOOnmHq4b9WNkf + yFCrF415WvKiJPAN0CMz2JT0QCMSfWZTGGVETZoFLfnWdJRr6K/TqQTwzqkYrlgRy66pSLYMB7JKxs30 + YidWLHZgut1BbL4D463Kx4p2EqDKslIiuseJsU4dw+IPDDba0FOloatCQ0+lE/2NvgwuiKarMYnmimSK + c+JJS4gmyNcXF6eZr//9vDzIyUilrbmOga5F9HY0Mri4iZUjPWxSynSvHGbL1ACbJvrYMNbL2uEulve1 + MtXTzKjo54EFFbRVF9BQlEllVjL5ydGkRoQQG+hHoIcbXnINR40WJxt7gr39yEiQ+8jNV0utlhcU/vlR + iejMyqIi0S25si+b6pJ8GiqLqasoor5yBjWiQ6rLxB6UFdFQXkJjRQkLaippa6hmYW0lzVVlsr2M2pIi + qooKVJQVzMxlXiJ9XkBFYR4NVSXSfwnVpUp/xWr/tdK/gpriHMpFp1fKb2ooy6O1upi2+nJaa+V42Vae + m6yiLCdJ9F8iZblJ1BWlsqAyl/aaPDpqC+iszaOvqYjR9krWj7SydXIxO5f3smtFL9unutg22akSwNtW + yvraftbJtqEl9VSVJasfeVhZzMHaar6aBayxVv4AUb5+n4+pxXzMrGRZI3J6nvhV/sxU5/7VWWDnaIWD + kzVOIm8ubra4uCpZ/LYzcL8ApRSq9iIB7Ohug85Ni52TFVoHc5T5fv/8c9T4PEyw1ilybXmeAJ6BMq+f + k6dWLfF4Af+N/FVwIRP43wlgpRSkvZOZSgKrRPBFAth4hgBW5gi0mY/OzhAPNytio30oKkxkQeN5AjjB + j/AQkdMwV8LDXPAWHakQwLrz2cOOLma4eFiqBLC7ryW+gRoCg60IDzYnKcKK3EgrqhNsWZTmxOJ0J9pS + 7GmJ01AdZkZFgDF1IRZ0xjkxmhXAypIwiU+j2d2RxJPDObyzvJQzmxv4eXMtv28s49eVOWJLAnlHgvmn + 42fxeMQs3sg05GiNM98t8OOrOrEXxXYcztXwRZrEXSmWfJhoxXsxFrwZYcHLoidekBj3WV899vvOZn/A + JbycZMhHxVqONDhxTOzgd0vc+UVs0x/TgfyxMphflvvz/YQHZ4acONqr5VCnBV92W3FiwE7skcSBYru+ + Fjv19bQcM+HO4SU6PpKg/70aE94rM+GDYlM+LZRYMN+OI7kOnBSbczrfk2OZrnyaKHGU4JMURz4V//0j + 8d8/EXwa78TnCRITxbnySbwLH8Y580GsE+8kuPByijtPpjpzd7wDN8hz25nswboUXyZTfcWP9mcgM4TB + vFhGi9KYKM9luractQta2NrZJfHxMLtGlrGmt5+FpWWkR8YQExwq7zaUyPAwIsIiiAoJl21hgnCig8KI + DgwnMiBMIK1/OLH+EcT/BQlBkReRqBLAscSFxJIckUhRRj6dze10trTRUlMn8l5OU2Ulfe2LaK2rJzUu + kQi5RnBgCD4+gbi5+agEsEL6KgSwsYk1llb2+PqFio9ZxJLBMW645Q4ee+p5nn3xZR7d/zz3PvQ4u665 + kbbufmIS0nD1CFChZgIrGa/Bsfj4RaoEsIdX6P9IAHv5RKv4b+TvRSikr1cEnl7hM/AMw9U9GEfnAJEn + H6y1HlhYO6kksEbNBHYT2QiisKyB9Zuv5MHHnuPFl9/llTc+4pm/vcEte+5jydAyktLyxXbHEBAq9yrP + +L8SwAGheCvE7/n9Fwng8/u9/eV4lSQ+f/z/AD/pwy8gEL9AH4KCvYgK9yYjJZDiwlAqy0MlFvAXX9yT + ojwnCnJsycu2oUh8x5wsW6IiTPD2MMROq4fWWqB+PKPoS6V0szJnrxHGVoYYyTYjC321gom5tfFMtq9A + I76LuzKfZqgvYZHBBIb4yz17iv7UYak1F/2rTHshfWnM0NhrsXGwxdZJJ8cEia9fxuDYFDfdfjf75J0/ + +vTzPPHs89x8+52s3biV9Vu2c/e9D/Lqm+9Kez+LFnfhK+dZWWlwd3GlKCeX9VOTvHj/Pl6/63ZuWdzO + hH8gqzWOXGmuY7ehDXfo23CDgTU7ja3Z6uDOFQkp7JdY6oOH7+PJvbczNjpAdGy0vGsn0ZvORETF0T80 + yiNP7Ofzw8f46rsf+OqfP3Hqm+85duZrjp7+Spa/VcnfH3//nZ//+IMf//hdln/jZ8G533+R2Fkhfy8Q + wN/z07EvOPnKs7x985U8Ln7Cgw2lPCJ+/WPJUTwU68+eUGeVAL450I7bA+25M9iB24Ptuc7bkqvczbje + 24o7/O2519eeR/0d2R/hzSPR3twV48mNcW5sDrNjmacpnVaX0GI8i17R+2MeWlYGubM6wo+JKB+GZUwM + BLszEOSmkr9dgk7xLdsEdQHOlCgEsNilNLEtqfbG5NiZUeZgTY3OkgoTPRaIzzzqqGOzrw+7ExN5VHyR + l5obea+3hwNLB/l7Wxu7C/LZFhfP+sgoQSQbIqLYKO3WiHA2hQexMcSHTQEeXCnj41Y/b/Z5unO/uzv3 + KlnA/v7cExrKHZER3BQTxa7ocDZHh7FJxtTOmDCuSYzhurRErstM5grxm7akJ7IqJY7x5FiWpCTQmZ7K + oox0WjKzaJIYqz6nkBqJVSvzysQ/KqcwX2K1/ApyJEZVkJ0tcaZStUqQlVlEdlYheTklKvJzBdIWZBdT + lFVMcXqhigLRfblZ+Wp8rFTBysgrIj2/mPQ8iYkF2fnSr7Q5cs1s6SNLzs+UY9OzctSM4fjkeOISIsnI + TKRtcQOTy/voX9oqcXYcLl7KR6J62LuY4uFrQ3CYszqdim+QvWqHXbxEznyt8PCzxt3bXHSQ8qGWvths + A3wDtIRGOovf7UV49EwJaKWcq1Y3X/TVPLWsq6PzPNGh+vgFmZKY6kB2wQwBnJSuzO9viLOb+E/iM1hZ + i9+izMErULP6bS74TMYo5dxnoJR2N8FMfBwjO2OVAL5A/iow1Eq8JPpD0R2mliaqDvhz3lITtRKTksWo + lLC1tJRryDZLMyPMz2Mmm1G2K/tUEnjmWCtricmUOEziNhNTQyytxe+xMVcJYIXEDfRxwtfDHm/x2fzE + R7sAX6X0s7Olmo2olKQN8LQh0Esnfr2TSgQrZaFdHTXYSyxmIzpLyax0EF2llJd2kjHvaO8g6zoVjjo7 + nB1msow9xUf0FZnx97QSX91S7KkViWHWVGS5U5/rRmOmA01pWhqTLWlN1dCZ50hPsRedRd5Ui8+UHGBA + gOMleOlm4e82j2AlQ1KpzBmpIyXelcw0bzLTvWR8usqYdKIoX0dliaP44U5ie51ob3Chu9mDJY3u9Na6 + 0lnuSFepEwNVHgwrWcDlbkyWubCq2IENBXZsyRU9mGPOlRlGXJOux3Wpc7g2ZTZXpFzGruTZ7FCJ3/ls + kXZLqj6bFKQbsVGO35Bhwro0I1anGjOZoMdo7GUMRF2mzgG8OETBDAGslIJeEqNPX6wBA0lG9CcaMpBg + oBLAo7I8kWTMVIIxK1Xy15CVsfoqgTstUAje8ejLGJd+RyMvZUR8waGwGRJ4RMnoVco+J+qxKlH/T8TN + Z6WCmHkq1sbOZ12cHmukXRU5Wy3/vDpoFpuCZ3GF9Hdj5CzuSZrDU1lGvF5kyfulVhzIM+X9DAPelO2v + xV3KawmzeSXuEl6S5VfiZ/Na4nzeTDHg3XQTPsw1E9/PnMNlVnxZbsGxaivONGpnpsb6CwF8OPtSDudc + ytGc2ZzMn8vZIn2+LTPix2oLfq2z4rcGa34V/Nik5XitNQcqNTwt7+aGSLn3CDP6w60p8zIixPoyNPMu + xVL/UrRmIu8iA446iUVkbDo62Knj0VHGqq21hciQ2GbR1ZZKuWiJfy5AK3JoJ7LspLNSx62fjyNBYhvC + I33E3vkQEumpfnDi7Sdy4mkhcmKKj5M+UaJzSqPdGStP5Yr2Ku7ua+HBgUU8phDAi0oYyQmlNkLie/FV + x1oK2DTUSldVFvF+jvjYm+JlJ7pMZ4a7xCXermb4eZoQ4mdKZKCJ+KAGxMr4j/HRU7PkYz3mEq8SwPNI + 8Z5Phr+SUWtOeawtTRluNKe6U5PgQEXUeQI4xJjiIGNKpJ+SoHlUhepRH23EgjgTFiaaXsSCBIFsWxA/ + k73bk2nNSJGO8TIdyvSS48U2jOZaMpJtxWSulhV59kxn2jKeYs1Qkjl9cl53rFK+2ZhF8Sa0JppRJ32W + y3J+tDG54UZkhSgwITvUjKxgM7Il/skONZX7N6Mw3IJKiVUaJWbpkD77MuR64oMty7FhOkfDlEIAZ5ix + IsOUNTmWbJS4YkepHVeVif0vF5Tacn2RFddKTHRN0lxuTpnLE6VaXqyw46VyG/5ebM3zOcY8l6nHc+lz + eTH9Mt6Usfdx/hy+LNHjVJEB32bpq+Tv2YQ5nI6dzakYgcjS6Zi5HIudw8F4PT6TmOlguhlfZljwaZIB + B0Qe3w6/hDdDLuHd8Fl8KDL5Wfx8DiXocyxZmefXhG8yzaVvS2nNOJtuzOkUQ04mzRC/SiawAqU0tFIq + +qTI12cJl/Ju9Czejp3FOymX8H72fA4UGfNxmQUflVtLq+FAvhkfimx+LOd9LDL3QeI83hMZVNpPpJ8v + 8i34otCSTwrM+UDk9p1ME15PteL1FC3vZNjzruDlWFP2+1/Kk36zeCnyEt4WHfdu2qW8nzaLA+mz+Dx3 + NkeKZwjgb6pM+aHGgn9Wm/NdhSnflBvwXZUJP9WZc67JWmDF7woR3KoV2KhksLL8e6uG31ts1Mzf35ps + +KNR9jVaca7Bgq9qzDjd6sS3o/GwrZpZK+SHXd7sxn39gbw5Fck/t6fDxiSYjoTRUH7s9eNsuyefV2t5 + WR7K/sz53C0PcWvQJQw5zWLAbRYbEw24f5EXb69N5fMr8nlvazIvLA/mgaUB7Kj3YlAxNjFmFIcYkOQz + m1ifeUT6GRDio68SwLFBFqREiIMXbU96tE5tU2McBC4CN5JjPEiOdiU53p3sdB8KcyRoKAymriyUpvIg + mkq8xKjZ0yiC0lejY/VicaaX+nHjkBe3LXXn7mFXHpzw5okVgTy3Loxn14UKQnh6fTAPrfTjjjFXrutz + ZNtiG1a1WjLeaMpIgwmjTaaMNZsx3aZhzWI71i22Z02bLWvbdWzqdmPHgC9blTLXCx1ZXm/HhmYXtre6 + s7PJjZ21TlxZ48xtjR7c1ezL7Y2e3FLvxo1iHK+rtOdqEZBrKjRcU2kq0OPa6nlcW3MZt7XocW+PCY+N + WvLCCi3vbrbj0JWOnL3BjZ92e/Pb7V78eos7P1/rzI9XOvPtDidOb9BxeFrLZyNWfNhvyQe91rzbacOb + nba83unAK91OKt7sduD9JY581O/A50ul3yEbjo5Zc2xKy4k1dpyQfo5utOezDXLddRa8vsGU17aY88pW + C/620ZSnVxnz1EpTHl9uyhPLzXl8WiGATXl0wpiHx415aMKEh6cseXRawxNTGp5ZYcffVzrz4nJXnh5z + 5rEhZx7sd+a+AS8emYiUd5HBC5uLeGFbIc9tyuLR5RHc0iVKZaEhd/WaqfOx/mOlLQc2OXLkCi/O3ujH + 97f58sMeL365w5Nf73Tl3B3O/LxHx/e32nDmRg2Hr7Lik51mfLDFjHflng+st+TDNWLEpuTZyG/9eNhW + npMDXww78fmwG58sdeP9Phfe6NDx9wV2/K3JjhcadTzf6MBzLU48s8CFxxc4cV+Tjj2CW2T9ulYPtre4 + s6rehY5sM5pF0BfkmrOwQENbkQ0dJXZ0Kw7PeQK48zwB3HWeAF6iEMDNWsYUAljG0sQiuz8J4EozlQBe + UmbCQJk5oxVmTFUas7rWiJ2txtzSa8EDExpe3uTEh1e5c/B6T07c6Mm3Cil+mx8/3eTDzzfIGLnBW+DJ + LzfJ8k0ybmTfOcGvu/1lDAXx+54wQRQ/3xbPqWvjOLA5gqdGfLiqRoxNxnyWiEJuF0elKUqPplgzWpK1 + tKQ50JjmTI1C/qa6UZHsTEWSA7UpymT84kSKsZqotmVzmzPXLfXi3o0hvPlABl+8WMiZd+v45WA7HO+D + Y4KjgsOd/PheLSdfzOXY06mcfjGD794u4I9DNXCiEb5qhp8W8se5Rfz+S8dF/Haug19/Xcxvv58ngH8S + fC042c+vH3Zx4qlqXrsqgfvk/d60wIatJeLUZc1jRZYeExl6DKfrs1SMjkIAKyWhl+cZs7nchGtF1u8f + 1PL3VY58dpU3X+8J5Pd9wbDXX+AL90t7kQB2glt1/LLLnB/WmnB21IDDbZfyUeUsPiqbxacK8Vt4KQcK + Z/FusaDyEg40zebQEiO+X6fjdyUL+I5weCSFc0+m893+LI49kcNrd2Zwz84Edk7HMz2QTFdzArVF8RIs + zsxvVpxbT06qQgBXCIpJScoiOSl1hgCOjRHEzhDApSUslMB37dq1bN+2jZ07d3LFFVdwxeWCXZdzpbRX + XnElV111OVdffaWKa6+5imuvvIKrdu1gx+bNbFm/ji0b1nDl9i3cev017LnpBm67/npuvOoqbhBcd7mc + u2MH1+zaqW67+ZpruEb63bVlOyunl7Okp5vB/l76l3SyeHEjzU1FVFenUFEWS3lJJBWlMVQVJVJVkEpl + bgZlOZmUZmdJYJtJflYWuRIwK+RvVnoOmRLgKl9FZ2YVkSHBq5Llm64SvhegEL/lKun7VygEcFZOObly + TH5usQTbhZQqhEJZMU31lfQsbqFjYT0NNRKQl+bLvmwqSvLl3oooL5cAu6RYJYHziorILVKIYAmiC8vI + K64gr6SS3GKBQu4W18zgPNl7gQCeIX5nkKcQuAXnCWAlm1chgy8SwNUXCWCV9D3fZiuQ4y9AOUfpq0DJ + LJbrXSCAi8pq1ExgZf1P4vcCZgjhwqJyiopm5g0uPQ+FDC4VlBTKb80rpCRHkJVHWWaOIJOq7AyxrZmi + 27JZXJpHT3kR7SW5tBTK9rwUGgrT6a7LFTuZw1R9Ahvro9hepWS9enJfvSv767W81CA2qd2RQ90eHO1y + 49giJ04023FSghMlwDheL2jUcEycliML7fiy3Z4vOxw42u3C6UFvvhsL5OfJMH5bEcnPy4L457Av3wx4 + cLrHmWPtcs4iOVfa4x22M1hsyzGxIyfEzn0/5c83k/6cHvPm6Ig7X465c3jclS8m3Di83JNja304stpb + 7KfoUoUYHnfn5DJvTo55cnrIg7PDgkE3Tve7cHKJE8d6HTnc5cDBTrG5YlOPDLhzbMSb46M+HBvz5cRk + AEcm/PlixI/3+315YoErt9e6sEsNdt0ZrwqiuzKU4jR3Ivw0uNka4mpthJu1CR4aCzy1lrIsAZGpAfaG + c9HOvxSNnoLLsJZ1G3NjrM3NMTczxcTUFOP/RgBLMHaBALZzssMnyJvA8AC8Arxw8XTC0UMp/azF0kYC + s79k+SqErzK/r0L4KiWfbRw16n6l7HNwZABZBelk5iYTHh0oAZkL/sEelFTksWz5MNsv38ia9VOsWz/N + 7t3X8bcXnuLd915VieAbbrqCuuZyYpIjiU6JISE3hdwakb8lC2kZ6CCnrph40QGR2QkoZaD/rwSwgmgZ + mzGiGxOK80kRmU4oLSZOJYDzVWI4KjuZoMQwAmK8CIlxJTbBhaxMN/EhXdSyk8ocwANtHqwYDGTNaBCb + p0PZOCXL8i4VAniyx0fGt44qCbBzIuaRHjSfvAgLgTmZIfpUp1jRkqdhkQQ7i8Wf6693UOcA3jUdw5Ur + YrlmVRw7J8JY26dkAssY6HJkWrX5MxnACgE81u7A1BJnVg65snzQmWXdsm+Rg/gIgiZnRlt9GF8cznhn + IksWpLCgOpmSvHhSEsLx9XbDwV75M8ieAD8v0V2FDPV1Mj06yED3InpaaxlbskjNAt62coQtU4Nsmehn + 03gf60d6WNm/iGVdTYy21zKwoJK2qnxVpiuzkihIiiYtIoSYQD+Cvdzxc3PB2cYWeystrvaOhAcGkxQb + L/55HClqewFig+LiSIyNJiU+loLsdPHXcyiQ95WflUJeVrKK/KxU9UOf4uxMiuQYhSyuKsynsiBX3Zab + mkpmUgJpyrQGgqS4GLXPhJgoFUmynJmcRGlBjor8rHS5VoYsZ1Emery8SLYrUwSkJZKXlkBZbpr0nUmt + 6K/y/Awy4iNIDPc/jwCSIvxJiwmhIDWKGhmPLeVZLKzMoaMmj97GIobbKlk/vJBtk13sXNHLrpVL2LG8 + WyWAt0x1sk2Wt67sZsNypdx1E421WUSEOKvZaxqFANYaYG1loH79bq1+/W6IpcYIS60y769CWJhifb5V + CGBlfnCFAHZ2scHVzQ4XV3nPbrY4/pUIVjOCtRczgR3cbdG52WDnoszVbYGVvZIFrGTF/JUIVghgpTLA + fxLAzl426jx/F+b6u1DW+f9KADvIPp2TmUBp5VjHmRLQOoX8FegcjLGx0cdRZ4y3p5bE+ADKilNobSpU + 5wBOSQxQn1lMuBuRYa74+dngppSXdDJR4Sz34+Zhrf7x7KYQwAEzBHBEiAVJ4ZZkhZpTEmZGtchnXaQ5 + 1WEmVAQZUuqnT6mPAfWB5iyO0rE0xYfJ7ADWF/lzXX0I93cm8OpoNme31nFuez1/bC7n19U5nOgJ4q1y + S/YnXcJj0bN4S3zFU+L7/9wdwvcilycrHTlWIvYqz5ZDOfZ8mmnH+wlaXpF7eN7fkP3e89jvO5+n/Gbz + VNCl/CPViE8l/jvV7sVXvd6cGw/gt+kAWCl+5tpQflsbzI8rfPhG7NPJpTpxlTWcGLThq1FHvlnmwndi + p76dduPr5W58NeXOiWEXDnbb81GTFQeqLDhQasEnxRo+zbHh03RbDqY7cCzHg0PprrwXLTFhtIZ3Eux5 + P0XWk5x5X3z4DxKd+CjRlQ8TXDmQIPGQ4N0kN95K9eDlTB/2p7tzT6IzN4ju3JnqxbpUXyYEg2l+9GUG + MZgbzUhhChNlOaxQCODmJrZ2LGZn31KuUAjg7j4WlZSRqcxnGRpGdFiYSgBHhocTGxJBfHAEcYLYIKXa + QDgxAWHE+Mu6XwQJAZEk+f8FAREXkRgsuiA0mujASBLCRM+k5bCwtoW2+maaK6upLy2npbr6PAFcJzop + Xs02DglW5qUNwc3d9zwBbK8SwGbmNmo56IjIBOoaFrJp2xXsvf9RHn78GR547CnueeBRHnx8P7fcuY+x + 6dXij5Xh6RuCk6svHt7BFwlgpcSyQgArZZb/nwSwt0L0/idU4tdTIX3D1bLPHh6huLsp1woUOfDHVuct + esMNcytH0SFO2Nh5oHP2JSQiibauIW68bR/PvPgG+59/jaeff52nnnuV+x5+mnVbLqe0uomwmGT85Nmp + RO7/SACH4KNmCv+FAJZ1BRePP7/+H/gPAtiXoGBvIiN8JF7xJy8/hNLSUPGxAygp9qZAKfuabUd6hpac + HAdp7QgLM8XDzVD0pp7oTT3Rl/qYWQpEhyqZu4bmehgpsFB8HYUAVsrrm1wkgLV2FvgFeRGfFEVqRpK0 + cYSEB8m7clXn7VRKvppam4nOtcbe2QFndxc8fLyJEFtWXtPA6NQqbrr9LvY++CiPPf0c+5/7Gzffdgfr + Nm5h87Yd3PfAw7z25tvctXcfC9s78PH1x9pag6uzC/niO69dNsFLD957ngBuY9pf9I3GgetN7blb34b7 + 5mvZM8+aaw00XGnvzrWxKexfNsWBB+7lybt3M7y0V3RbIOaWVphbaOQ5htDdN8jDT+zniyPH+e6nc3wv + OPvdDxw/85Xga8589z3f//orPwPnBD/zOz/98Rs///HrXwhg2XvuJ4mbv+XH459z5u0XObD3Zp5dNcLD + C2t4uCyLh9Ji2Bfjx55QV24KtOdGfxtuCbTl9mCdihv8tFzracHNXlbc7WPLfZ62POKj4/FQNx6IcOe2 + CBeujnRkfZCGMXdDFlvPYoHZLBbb6NEvtmbMz5GpEE9GQjzoC3Sl28+JLtm22M9Znce3K8SLxWHeNAS4 + UuZtT56HliyxLdkOppSIbWwQn3SRTkObvMMhrYbNbu7cFBDMg/FJPJudx2vVNby/sJ0DXT28unARewsK + uTw2jh2RMeyMiuaKiCiuiooUhMiyD5cHu3GlXPtWX3fulTHwiKcHj7h78KCXN/fJ+N0bEcHt4n9cnRDL + hvhIphIiGI8NZrn4C2sSIlmbEss68WlWZYsezExgMD2e7vQEWtOT1I9oG8SfqcvOOU/+FlOdV0ZlvvIh + bqXEXpUUFSjxocR9EuMrHytnS3yrIqtYRW52qYo82ZefUyZ+TpnEyYLMYhUFmQXkZhWqH65k5BSRJtdI + zSslVfpIzSmRWFj0r/IhdHY5WVmlZGVIzJxeSHpmHunpmaSkJpOcGkuO+OaLxR+cXN5Pb3+z9BWNi4eV + yIgeDq5mIh9aQiNciYzxwD/EHncf5UMsK7wDtfgG24qOsBL5MhNZMhI/xUB0hOZPAjjKXc4XWXM0FB9n + 3r8QwO6eBgSFWpCa6SzxtLvoVmeSM2wIDDXAyWW2yPQ8LK2M1TLLCiw0xgLxn7SK/2SE+b/B1MYIQ4mt + 9O2M0DtP/urbzJC/ata/xEvmFkpGr0L8KsSu+GCWJmitTLEVnWAnsZiNpfhhEltpJcZSKjRZK60cox4n + +6zlWOvz68qy0peJiR6mEnsp92qjFX9F4qwgX1exO24E+zjg76WUeLa7iACRGx/XmXK0fxLAdnKOo+x3 + EP0nfpjEZrYSh9nZmuMgY95Jmf9cIdl0duhs7dHZCWxl2V78QpVIs5bzNBIbWBMs7yYiwJL4UGsyY21o + KvKivcybrmIXlhTqWFJgx0ChHcNlzgxXetJV4Ep1koZk37kE6Gbh4ziLgPMEcESwhvgoJ1ITPMhI9SE1 + yZ2UZEcyM3QU5NqLv+1ATbE9jWV2tFc70VvvRl+tK0sqRbaLdXQV2tNX6sygXGuoyIkxuf50vh1rcrRs + yLZkS5YZO9INuSJtPlelzmFXymy2plzGJmk3pswVzGdD8lzWp+ixTkGaIeszjNmQYSatKesyzVmRasx4 + /DyWxsxlSfhldIVe+l8J4P4kQxUDCYYMCoYTDRmTdlmcIdOCFbH6LI/WYzJ6joqJqNkq8asQwGMKVBL4 + kj8J4Lh5rFCJX0NWS7+rFMTpsVpBzHzWCDbEG7A+wYB1sbItfLa4fLNYFzSLbSGzuEr6uyX6EvYlzeHp + bCPeLLHmo3IbPpP2k3wzDmQZ8W6aHu9m6PF6yhxeSpzNS/GzeTl+Pq8k6PFakj5vpxnwgfinX4gPeFgh + gGssOdOk4UyDFSerjTlW9icB/KXgSM5lnMybIYC/KzOeIYBrLfm1zpKfay34vt6C47WmfFptzquF5jyY + ZsYt8q43pjvRGmJOrP1l2M6bhbXepdiaiX7QmF8cmzo7ga0NOhtrbJWPJJQMYJENC2ORY5M/YS3naUUW + HWRsu4ms+Hs7EqISwOIrRPsSFuVFQIiT+BE2+HhbEqDA1ZgYHytKYz0ZrUhTM4Dv7G3mvr4FMxnAi0oY + ygqmOlRHXYI3ow15bBpspacqhwSxMd6iCzxFF3jYmeBqZ4inxBU+7iYzZaD9ZZz7G6j8VJSPQjTPJ9pj + HrGCBA89kr0NyAgwJT9UQ1mMjlrxo+uTXKmKc6As0obiMEtKlHmAQwTBRpQE6VEZJnFHtDHNcWYsSDiP + eHNZV6CsW9CRpqFX5GBY5EQhgCdKdYwVie3MtWQ8V6N+KLGu1JU1BS5MZ9sznqZlINGC7jhjFgla401o + ijOhKt6YklgjciOMyBTdmRFsTIbci0L8ZgVbSGtFdqgluaIP8sOtKI+xpD7RirYUDUtE347k2jIhscyU + XHNKZHJKZGtllilr8izYUqxll8j2VWW2XFNqw9USZ1wt269M0+eKhDlclzSXBwuteVr2Pyv7nyq04rEc + Yx7LMuCJzPk8mzmH17LncCB/HoeLDDhVaMS3GYZ8l2LA6VgZi9GzBZdxKnouJ6PmciRmNp+ILH+UYshn + mWYczLLgM5HzD2X9Xdn+dtQciWku48PYuXwmMvCF4IjIwb8SwOaclfXTyYacTNTjVPL8iwTwVxlGnMky + 5ni6vlznEt5RKjwpSBCkXsYbWXN5I2c+r+YaSNxnwju5JhzIMeWTXHM+yTTlgOif96W/A6kGfKxk4OdL + 7FVowYdy3DsZBrwq+14UffP3GGPeSLLkLXnGr8SZSiwosaTXLP4mcv92svwGudb7qbP4MH0WX+TM4Wih + PmfKDfm2Ssn6teC7SjO+KjPidOF8zpbq8X2lCT/WWcyUhm604FyTyGyzht8XzJR6VkhhlQBuEjTY8ke9 + DdRbcq7enK9rzDjb6sT3YwmwvYZZ08Um7Kq3575uL94YC+abdbH8vjKcP0b9+aPfk1+WePBjvxdn2x35 + uEoUQZk5j8oD2BkmStZBHDrbWUyGzOU6CYIf7w3n1dVpvLg8jkeHAriz25etNZ4MpNvREGlMUeB8Us4T + wFG+fxLAcTIwUyI1pEfbkh5jR1q0HakiXMniQCZFOJMozmRChBMJSlawBKY5GV4U5vpRXazMIxlIS4kn + jTJwm7MtWFqrY32nO1fKPV/XL87rEh27++zYO+jEI8u82b8qiP2rA1U8tSaQR1b7s2/Sk5sHndnVbcfa + RRqVAB6uN2aozpiRBlOWtVizsk32tSkEsLTtDmySa+zo92Vbrw+rWmcI4PUtLmxb4M62Rhf53Tq2S6B/ + XZ0LNze6c70Yw2trnbmq0oEryu3ZWWorsObycmVuWX0ur5jLlVWXcWuzPvf2mPHYiBV/X2HHu5t1HLrS + iTM3uPPjrT6cu9Wbn29w4/urnPl+lzNfb3PhxDpHPp+05cCwhrd7rXiz25o3Om15tdNeLW38UtcMXuvS + 8U6PIx/IM/l4QMvnSzUcHrPkyJQVx9facHKzPce26Ph8s5b3NyrZvya8ts2cfwj+Jsv71xiqBPATy015 + fNqcx6YseXyZtBNmPDxuKjDh4UkL2W/L/mlRAsvteGHakecnnHhqWJ7/gAP39TpwV7czD4yG8fTaDF7c + WsIL24t5blMmjywXJ7tXx62dZjyw1Irnpmx4a50Dh3a4ceZaX76/NYCf7/ATeHHuTjd+u9OZc3fo+GWP + jh/32PHd7XacvsWWIzdo+OJqDR9fbsknW8WAbrDi45WWfLRM2lENn43Y8sWwPV8MOfHpUmeVFH+j3ZZ/ + tNry9xYd/2hxUvFCqwvPtTrzuFIGusmOO5oduK3VlesXerBD3vPqJhd6ikR5iqLrKNHQIe90cakdi0VJ + dlc40FkxQwB3VTnSXaWju1JLT7UVS+qsWKoQwG06JtVsIHuGZX2GADalt9yEJeXGDMjYmKg0ZkWNERua + jbiu24J94zY8Lc/kvWvcOXybD8d3e3HmVne+3e3O9ze78c/rXfnpGhfOXeOm4pfr3Dl3vYdKAp+72Zdf + b/Hnt1v9+f22IH6/NYyfb47hq2vj+GxLBC9M+HNri60oe8Uxmk27KOB6cVTqovRpEmPTlGpLXaoDVWnO + VKa5UZ4irTiANSoBrKUrz1olgDcscODqPg/uEvn62+4E3n44nUMvlvL9Rwv55WAP577o4bfPpf14MWde + reTL57I59rcsvnunhJ8/r4ITDXBa8N0C/vixld9+mSGA/1DRzm/n2vn1t38ngHvkvD74YoAf/7GAL+7M + 44V1IdzT5cg1okS3FhuxuciEVTmGjGcaMKSQwIKRDH0msvRZI0p3Z40huztMeGJUxv82T07fGsJv+yJh + X6ggEO4X3OsL93jAHge42ZZftouSXmnI6YE5fNE8i0+rZvFZxaUcLJ8tjtgcPi6+TCWA3yqZxZuy76O2 + yzi9TJT2LlfpIwgej+fXp5P4/plkTj2dxgcPpLP/xhRuWhfH+qE4ljRH01QcS01eJtUKAZxdS/YFAji5 + hJSULJJTZgjgqNgYFakZ6VTWVDOwdIArr7ySW265hdtuu41bb72VW2++hd233sbtt+1mz+7bufOO27nr + rju4++472Xv3Xdx9+25233gj1115OVft2M61u3Zw2w3Xct+du3lw713cf9ed7Ntzu2AP90ifd0rfd95y + M3dJ3wpuvu56rrn8Sjat38DYyAjDS5eydKCX7q4FLGgpp7oqnfKyBMqKYygviaeiKJWqAiUTK4vSnGz5 + fTkUZmWTL7hAAGemzRDAaokspVRWlgS0EgynK6WeLxLACvn7rwTwDPlbSY4EvXm5JRKkFEuwXUhlaSH1 + 1SW0NlWyeGEtHQuqaakrob6igLry/JmMsupyaqtLKStT5gsupFCgzKerls8SKCWV80rKyS9RCNYZwvev + pO9fl2fKRMt9FPyZyasuK9uK/swC/isBfAFKtvFfcaGvC33nKxm/goJSZVm5rrT/QQDLfkGh9KeQvwqK + 5foKFAJ4BqUU5ctvzS2kKDuf4qw8QRYlWRlUZmfQmJ/FwpJc2kvzaS3OoTEvnZrsZJUE7q3JZbI5l9X1 + iexsjOLGxmAeWBjMCx3+vNnmxAcL7TjU6crJXtFVPZ6c6XAVJ8SRM812ahbw8QZrjkqg8qU4L4cWiW7u + sOOLxaL3e5w4NeTNt5NB/LI8nN9WRfOr+CY/Lgvk2xFfTve7c7RTIYxtONIhev8CZP3LThsO99pzcsSd + U+OiJ8e8OTLqwWHBoXF3Pptw5+C0N0fX+vPlah9Z9uTzCRe+HHfl9JQPpye8+WrUk7NDbpwddOFUvyMn + ljhwtMeew2JXP5frHBZ7enLIgzPjci+CM8v8+Gran1OTARwd8RPb4s+LnZ7yLDy5qcGLbTW+rGkIY7gu + ktpsbxJDbPHVGeJtY4SvjSn+dpaEOtlK4G2Jh6UBDkaXoZk7C43eLGxkWWs2DxtLY3X+XxNlvl9TE3Xu + 3z8JYCUT5k8SWNnm4qnMvxVGbHIMgWEB6rq9ix1KCUUl8+XCHL8K8asQvXbOWnSutji42ctxtnKcmbQ2 + RMaHUVZTTMuiekoqcolJCCMozIfs/FRGJvrYfvkG1m9awdp1U1x3/U4eePBOnnjyAZ544n6271xPZW0R + MUkRRCZFEZkWS1RmAiklWWRVF5JYnEFMbhJROYkXyd//jQCOyk2/iMjcTBVqKeiSAuJLis4TwAUkFOYS + m5tGaEoEQXE+hMd7kJzmSX6el4x1F6qKHGkR27y03Zvl/UGsFJ917XiASv6uHhO/btiPkcUetJZZUZw4 + nyyxhVnh+pQmailPtqVMbOKCAh3tZfYsFtveVa1lsMmJtQNB7JyOZtdUFJdPRrB1NIh1A16s7hWfQXyf + 5YsVAtieUbG1Q+Koj3XYs0L8zzVjEuCNubFyqQtTvW5MLnZnqsOH5T0hrBiIY7ovjf6FqecJ4DiS5R34 + eLvgoJOg29GOoAAfaiok+O3rZtlwPz0dLbTWl9GzqI7loz1sUTOAB9kyOcjmZQOsH+tl1UCbSgCPKARw + ayWLKnOpL0xVCeDCpGjxyUPFP/cnzNeTQE833HQ6HLUS3As83dwkaPZTs4FDfP0J9vMnyC9AWkFAICEB + AcRGhpOblU5+TobcbxTxMeEkxkWSmhhDZkqi2LJkslKSSEuMIzUhluzkZArS08lMlrEQEU5kUDDhgUEq + gv2V/v0I9PVVERzgT2JMDHmZ6eTJNdLlnIzURHKzUynMz6S0UMkWljGWHEd6XDS5qfEUZCRRohDRGYkk + hAcR4uVKsMhEsKcLoV7OxAZ5kREXQnl2Ek1lWbTX5NPVUEz/gjJGO2pYO6SUgF7MjuU97FzZ+y8EsJIF + vEnazSu7WTG2UOxKMSnx/rg6ms1ksFnrY2WlkBmGsmykznllrTVWM1kuEMAXcJEAdrS+SAI7iWyq2ffO + sk1aBUpZaCXz90ImsEL+OgjsXbUiz1ZodEoW8F8IYLuZ1kq5joMFNo5K6ec/SWBHD+nvPJR5fS8Qu/8T + /oMAVrY5m1+Ekg2s4AKB66is2xnh7GiCr7ctKUlBYo/TWNRSQkt9voyLPwlgJQs4SCn/ppSZdDWfyf6V + 67h5nieAfSzwCbAmKMRajtdI3KglP9KayigrGmM1auZvQ7Sl+LAW1IdZ0BhuTVe8I4PJboymejMlceTq + TFeuKFU+0g3hb73xnNhYzo9bq/hlQzE/rsoQfR/AW1VWPJt+GU8lzeLdEjNOL/Lg5yXB/CD27bTEdMcl + nvuySGxcvgOf5znwvvjDfw8z4SmfuTzqOZsnpH0qcA77w+bwSoYZX9RLPNflw9cSP/46LX64xKSsDYEN + Yfy+IZSf1/jx3bQHp0fF5gxJTDOi47tlrnw/7c4Pyz3+lQAedeOQxEwft2j4oNqSD0otOVAoy5nWfJBs + zUdJ9hzMcOeTFFdek9//Yog5L0VpeCXegdcSHQVOvJ7gyFvxLireTnDjnQR33kn14q0MH17J9ufpDG/2 + JrlyY6IL21M8WJvqw1iyNwPSLskIYkAlgJNZVpojsUo5qxsb2bKonZ29/Vw+NMbqzh7axFfKiYsXmYsg + RuQ6KmKGBI4LiSBBIYCDwokNFDsluEAAxykEsLRJ0l7EXwngoEg5L5IIv2CVQM5JyqBO/J+G8irqS8qo + KRYfT/xghQBeUFcjshhHRGgYYWFRBAQq5ZT9VALY0tpeJX+VUtAenv5kZhUwMDTB7jvv5alnX+ThJ55l + z94H1GxQhQDe9/ATbNpxJbXNiwiJTFAzgF08lY+iwlQC2D8wRiWA3T1D8PRW5gT+nwlghej9r5DzFPLX + 3T0UN7cQXF2DcHEJwsHZH3ul/LOtJxbWLioBrGQB2+i88PQNJyuvkslVm7n/sed4+c0P5d5fkHv+G48/ + 8zKPPf0Prr/1Ljr7RkhMy8PTPwxPvxCVBPbyD8XLT8nwVUjgGcJXIYCV36RkN6vL59f/L/hPAlj0dpA3 + 4eE+xCf4iW8eTGGJ+BTlQRQX+5GX7y7P3YGUNFvSMh1ISrUnOMRMfrsRWhuF/J2PhehOU8sZKNm+RhZ/ + JX8N1Kw+C80MAaxAIYCV7N/ktDjxubMkZkgjUuyPT4AXTi4O2NgqpfJtRW864+HrhW9gIOHRMaRLDNLQ + 2sbEirXyvPZw570PyjN8iseeeoYb/z/W/jq+qqt794ZDsbjbTrbE3d3d3V1JSEgIgQAJRCDB3Wu01Ki7 + u7u7Q6F4KW0ppUZL2+871gq0ve/zO+d8nud9/rg+c621l8w91xy2rz3GvOEmNmzYzPYdu3jokcd49/0P + uefe++npnUt4mLwnD09Cg0OoLi9j86oVvPbw/bx7123c1DeHlWIPNznrucFay70mLjw005k7Zzhxnakz + V7v6cm1COk+NLuOz++/lubtvZ3xkiCiREQdnDQ6OYt8johkYXMKjTz3Dl0dPcObnc3x/9me+/f4sX397 + hlPf/cD3P/6klnxWCODzKgH8xwUC+DfOqwTwBfL3t19UAvi3bw5xdt9bHH7yLt7YtYanBmbzSGMp92TF + cXOULzdFenBtsCtXBzqyJ9iJvaGu3Byh5/owV64JcGCvnyN3iB6/x9eFBwJ03B/ixh1hBq4N07IrzJl1 + wfaMepvRr5lCr+MlzHU2Zr7emsU+LiwJdGMgwI1ePy2zvTV0+mjo8hN/KtDA3DAfeiN8aQ/2pFY+L/Vy + osjDllKxpXVi17rEFi6Qdzemd2GTuzvXiQ9yT0g0T8Qk8UJqJm8Vl/F+bSMftnbwVksbj5SWc11KKlfH + JXBNXDzXx8Ryk/gmN8WFcWNMADeEenKT9OVefx+eDAjgWd8AnvLx53G570PyXu+LT+TmtBQuzUhhpfhF + i9PjmC/+1yLxrYeSYxkUv3aJ+BaL8zLoz0ulW/yLjtwMmgR14pvU5udRU1BAbUEpNRKH1hRVUV1cRZUS + gwlKlT8ES3xfWKT8WflfBPCFTOACiXcVFBZUUSQozq+SOFmQW6GiWOLiQmnz5NzsggoyJd7NlPtkyL6C + bLkmJ79GPq8jL09iyVzZVkjgXKXcdD452VkSX6dQovyhd34Hy8YX0NffQk5enEoAKxnAerHBPgEalQCO + SxR/MEKHT7BSHciZ4EgtodE6QiJcRf7FNvtZq5nA/yaAo+K88PZ3mCSAXSYJYFftTJFFY9GFlsSI/c4t + 9JZY1k/iYC+1BHRIhKn4P5eIjpuOrcQ2yvq7CpRMf1tHc5F3Reb/NwSwxhxTF3NMZFuBmRy3lGtsRE/Y + S2ykrlkq8ZSznaXEVVZoHaxVEsvgbIebs/gcSkajg/gu9tYqtEor5yjnaR1tcHEUP83BSr1Wgb3EXdaW + xthYib6Se7s4W4mP7EpcuC+JMsdiw9yJDNIT8S+Ei8wE+zhdIIAdCfG7SADrCfGX8VX+7Kf4gqLL3MQX + 9JSYzMNd4jOt+HquGnmG+HouLgJnOccJg9YeDzdbea49wf72RIfYkxTpID6thopsPT21QSxoCGKwzpvh + ajeGKyazDVc2eLGiKZAFpR40pTmQGTSdCIX89TAizHemSozFR2tIS/QiJz2AvOxgcrL8ycxwI0Niobxs + RwpzbCnPtaGxUOSzUqsSvwsFCyp1zCvS0JfvRH+xCwPFriwqkNgnX8NYvjMrcu1ZJ9dtzLFma6YZ2zNn + sDNjGlvTp7IhfQprpF2TNk0wg9XSrkxVsm1nsCrdjLVZlqxXCWBbNuTbq+uUjqdbsDTJhMVx05kvMdsk + ATx9sgR0nMkkCZxspmJhyiQJPJhqylLZH0s0Y5l8Pp5gzESsMWOxU1VczPxV2otQ9pdEG6nteLIJq9LM + WZtmKf20VNu1KWask3uuTTJlfaIpGxQCOEn244xZJX1Syj9vCjdiV/RU9iRM5+akadyTOp1nFQK40pF9 + NS4cqtbwZaUDB0vt2Vdow6eFluKXmfJGxkxeSZ7OK4kzJiHXvp46jfdyTdhfZsWX1TYcb7DjmzZHvmlx + 4GS9JcerTMVHncbRgqkcF1wkgL9VCWArlQA+12DLuXob2bbhjJI1XG/BoTpbPqly5KUSVx6v9Of68kCW + pukp9rck0GE6HmJ7PTU2eLo64GGQmESnwVXjhMbRHmd7GzR2ilzZ4Spyo5SKdraZhJO1CU42JvK5mcic + Nd4GJ5T1r6PCvImL9SchKZj4xCCiY73EF9BJLOBMuNihCB8bkoMlBk8JYGltNpd213Jrfzv3LOjg4aU9 + XDO7isGcCOrkmsYkf4abi9i8qJP+2gJSReYCXCzwFX3g62KJu7OpxLQW+HlaEeRrKfJoSWSAOVEKN6VA + IYB9jUnwMSbZ15T0QEuyQ+0oitRQHq+jWuKJWkF1okIAu1AhcUhlpD1VkXZURlhRGW5KbbT5BQLYllkp + NpNItrtAANvRkWpPT7Yz8wtdWVyqZWm5luEyF/GpHRkpdmB5sYY1le5sqPZmQ6Uva8s8WFFgYGmWM72J + FnTEm9OaoKzna0a1tCVx5uRFmpIZZiKQ/oYr2b/2AgfyJVYqiHSiMMqZohgHKiQ+akhyoENihXk5zgwV + ujAq8jle5Mx4gTxb5Gllvg3rSuzZVq7h0ioXrqh0YXeFM7vLnLiiwJbLMk25LGUGV6eZcJfI/qOVMk8q + XHlIrrkvz4p788x5INeYJ3Jn8mq+MR8Wm/JlmQUnS61VEvZMhhmnkmZwMmEmJ+OljZ/JV7EzOBw/jU/l + +MfppnyebamSrvulP5/nWPFZtgUfi8x+kjKTz1OM+SLVhC9lXyGAT2VYThLAog++l/bbTCtOyT2+SjXm + ZNrMvwngb3KU8s9mHMs0VgngjxONeE+gEMBvSqz3euYUXki7hOdF/7wsOuntPDP2FSslnp05LN/9YJG9 + 9MeSffmCIhv2F9vymZKxL+e9q8hn4lSejbyEZyOmS8xlwpvJVgJLXhTZf1rJAI6+hE+yTNiXp2AGX+RN + 41ChMSdKzfiu2kIlgM8KztRI/8ul/0XTOVkyTSWBz9RY8mO9NT83KmSwNeda7Djf7vAP2pw43+LM+SYN + fzQ48qfI9e+NNioBfHq2Oz+PpsHORozGi4zZJYHjvT0SIA4F8+2KaH4dC+H3Rd78Ok/HTwv0/LpUAs/F + HmqWzb4OHS/XabkuzVocO3HqXI0YDLyELVkO3NYWzGOLk3hoYSy39wZzXWcAm2u9WZDpRGOUOcVBM8n0 + m06S/0ziRbgi/U2IDZokgDNjHMmJ15CdKAGAQgDHa0mP0ZIabSBZHM6ECC2JUa6kJ+jITnOjINuT6kI/ + 2iqC6Cj3pq1QwyyZqEsaXdnc58WVA15cvcDA1T2OXN9rLwrCmQeXevHEeCBPrpjEEyuDeGRVIPevCODm + pZ7sHtCxeY4zy1utGG6yYKhB0GjJaIs9KzpECGe7srZLy/ouA5t7vdg5EMSO/gDWdEwSwOvb3dna7snm + ZgMb61zZVOXMjlodlze4cVm9gV2yvaPKlW0iQFtFgLZViFBVWrGjUoxe1XR2VV/C3llm3Ntvx+NLHHl1 + hZaPNus5erkH317rw897A/j1Bn9+usqT7y9z57SS/bvVg2Nr3fh8zJUPBp15q9+RN/s0vD5Xy6t9el7u + c1fxSp+BN2T/PXmnH8135dMBR/YvtuPQqC1HJ+w4sd6Jr7e6cnKnnkM7XPhsqz3vb7PhrR02vLpjkgB+ + ap0ZT6224smVNijZv48td+CxZfY8OmbHwyO2PDRiw0Oy/9RKLc+t0PH8hJYXlhl4bqmeJxbpeXiBjruk + X7f06Ll3MEzulc2L2yp4cWcFz27J5eGVMdw96MGdA048MerCG2sM7NvqxddXBPDj9WH8dksEv98WzO+3 + +knrwfnb3Pj9di3nb9dx/i4Dv93jxo93u/P9HQZO3qzjyHViPC9z4sBWO75YZ8c+6fP+MQcODDvz5VIx + rksMfDE0SYi/06PhjU4FBt7u8lDxWpcXL8x244kOPfe1abitXcdNsz3Y0+XN9g4vVrd5sLjWhX4x1P3y + vufWaukTzK0R1OonUeOmtv3y7hUCeH6dIwONDgy1OatlIP8hgDX/EMAi3AO1VnJvS5aJAV7bYsHOHmtu + XuLME+vdePMybw7JOHz3QASn7wngzO3enL3Vk7PXy/e/Ss/PV+g5d4U75y535/crvfhttze/7/EVBHD+ + 2kD+uC6QP68Pljacc3tiObM7gSNbYnhrPIT7ej1kXlqzJF0cJ1FgjRFTqIuZTlOyBU0ZDjRmaanNNlCj + yF+mQgDrqVcI4Bxx8IqcGKsXOWjTcsV8L25ZIfJ1RTQv3BTP+w/lcez1Jk6938m373Vy+t1OvnmrlUPP + l3HwmTxOvlHKr180cf6rVv78po2/zrTBL7Mlgu36mwBGRTd//i5Q1gJWSkD/Pn+yBPRphQBeAEcW8+c7 + PZx+uI6Pr0jliSEfbp2l4RrRcVfXO7JFjM6KPFOGRfEvyTFhqWBEnKYVhTPYXDmTK5tmcs88W95a78VX + 18Vw/p4UuDdeEA33RcDdQSDj/edNOv68xplzW634adyEr+dO4WCTEYfqjThSN52jtcYcqTHmQOU0Pqkw + 4n3BO9VGfNppxImlFpzbYYBbg+GJOH5/Lp6fnk/gu+dTOfBoBm/cnsW9u9K4dCyZpbPimF2eSEtxLk1K + sJhbT0FGHVlp1eJ8l5OZlU965mQJ6NikBOKSk9R1cTu7u1i9do1K/N5xxx3cesutk0TwDXu5TSF+Zf+O + 227nzjtu4+47b+eeu+7g3rvvVAlgJcv3yp3b2LFpA5dt2cy1V+zijhuu4e5bbuLum2/izhv3TmLvDSoB + fMt113GzXHPjNXu4+fobuOHa67hsx05WrVjF2Mgow0OLWdg/hzldjTQ2FFBTnUF1RQo1FWlUl2VRW5pH + VVEeFYX5lEmQXJqnZHP9NwFcNJkBLIFuTq5SvkohgSskYKy8gMl/OOcW1KjIK1T+SS0BtWwXSbCskL9l + RaXUlpfRVFtGe1Ml3e219MyqZU57DZ3NFcxqKKOjsUK2q5ndUktbYzV1NeVUVpRSXlZCaVkZxSrKKS2X + oLtc7ltRo5KuShauAoWEncQ/JZ3/d2TuxeMXz/vv8/9P1yjloSdLRFerKCyX71o2SfgWyf5Fgrj0v3CR + AL6IfwjgKhmfigsEcImgiLLcXEpysmTOZdFQmE1bWQHt5YW0yvtqKMikOieZhvwUFtTls7JdnOyWNK5u + i+XuzmienxfLe/PD+XyuN1/2GDg+15NT83z4vt+X7/t8ONvjJY6IG1+JXj0huvCYyOhh0b9fdrtyoFfL + gbl6DvQbOLFYKXUZwo/jEfwq9uG3VVH8tDyU74cD+Vp8lKN9rhwW3a3gkNhuFd3inPWI3p8nOn6hG0eX + yHnDvhwZ9ePQiC+HlvlxcLlsrwzk2LpQjqwN4ssJPw4sE1u6zJvvVgXx/UQQZ+T874Y8Be7yLD1fDeg5 + Jvc83OvCAeU5c134bsSfM+NBnF4u568I4exK6duKML4eDebwcCjvLQrh2fmh3N0dwtUdYWxui2RZSyyz + igLJFn8mXG9OiIs5oS5WROrtSQtwk2BDQ7DGHHerS9CYGOFiNQV3JxPcXK1wdbHB2s4Sc2tzTG0sMJdt + C/uLBPBk1u9FAlj5p7tfiC+Z+Rkyd/JUItjNxw0nnaNK/to626gE78UMYIX81Xu54u6rV2Hw1qqfXSSA + q0U2+hZ00SFyXFSWTXxypMhdKoMjfWzduYa1G5YxsXIJW7au4qqrtgq2cdXu7QyPDlBSnkNiWiyxqXFE + pccRnhZDZJboq/xUNfNXIX8TitJJLsn5G/9NBCtQSN/4opy/EVOUqyJWkFhWOEn+irwqrbI2cJLozdic + BKLSgolL8ye/SMk4Cqa81Et0gRudDZ4M9QQzPhDOcvHnJgYDWDHky6phf1YtDWJhlzuNxRYUJF5CptjC + Igm4GvK1tJa4016iY36TDwMtHvQ3aWVbw9JOd9YPhrJjPJZtY5FsGwln85Jg1i/2Z/1CH9bM92ClzO1l + 3TqWKn/6anNgWPzqVUNubFzuzeYVfmwY82X1kD+rpT9rBiJYNxTP+uFMOSePga4M0VOpVBQnkJ4aTkCA + Ozq9k7omWHhYEA21VSya36eSwF2zGmiuLVX12djiuWyWd7N1Yoit44MqEaysBXyRAF7S3cDCjhpm1xTQ + VJyhEsBl6fHkypxJjQolNtSfMD9v/NwNeGq1ErArP0xpcdfp8dQZ8NK74e3mjpeHF96e3mrr4+WlEj1F + Bcr67VnERoURKX2MjQwjJSFGbFiySgJnpiSRHB9DfFQEGYmJFGVlk5OWRkx4mLqusa+HPFe5p7s7ngY3 + PPQGebZe9j1IjIslNzuTvOwsUsX+JSfFiV1MpjA/i7LifMoF2amJJEVHSOwQQ758VpIn8pCZQlJkKP5u + Wry1zvjqXWRbQ1SgJxlxoVTmpdBenU9vSxnzZ1UxOKeOsb5mVi+exYbhrr8zfncoa/+O96nkr3Js0/Je + tq7uZ914Lwvn1lOSG0uIvyuuzmZqJrBSCtrJ3gxnR3OcBP9NADu7TEIhgF30dmhFLhXo9A4qXERH/Bs6 + d3v0Hg7/QQAbLmYBuzteyAL+hwD+97ZSBtpZb4NGydT1UNb7/YfsvbgGsLrW74Vj/xMukr8GOVchfy8S + wPoLuEgAa90VAtgad4Vk1lnj6W5DSKCW7IxIGqpz6e0Um9taSnZKCLHhkwRwvCAizEBgoEYlfZXsX08f + B7z9nPDyd/ibAI6IciY1QUtxuhsNWZ7MzvGkP1/kssCbecq2HBvI9WaoIIC11dGsr4piXUko6/J92ZCr + Z3eFB3e1BvPivDhOrCvl7KYKfl5fJLo8g6P9QbwvAfSLhdN5IWcKn9TY8V2vL+cXR3CuL5jTrR6crJdY + o0rLoXKJnco8+CjLhReiLHjUbwoPeE3hkYBpPBkxg2fjZvJ2gR1H2j34fkEgZ4eC+EPN/BW/coNgcxR/ + bYrk3Logzq7w4ZsRiWOWXCCAl3vykxz7hwBWykD7ip0R27bQnf0Sm37S6MRHlQ58WOTA+1kSv6XY8VGK + lv3Z3nycJnFgpMRmIdbSF1uelnj72UQNzyXqeEHG7sV4Ha8kGHgt0Z23U7x5L8OP97IDeSM/hGdyAlQC + +NpUd7alerI6zYelqRLXp/kyPzuUhUX/EMAr6qpY3dTM5o4udvQtYOfCIVb39NFTVUtJahrpIq9JcTEk + COJiokUGo0lWM38V8jdShUIAJ4bK8eBoUgRpQf/CvwjglFC5T0gEkf5BapuXlI6yjEVNcSn1CkpLmH2B + AJ7VVE+G6Jm4mFji4pIIj4zHxy8EF50Xdg46bO1FZvTeREUn0tA0i607ruCFV97mzfc/4bGnX+Sm2+9l + z0238cDjT/Hk8y9z3c130L94mNTsIvyCY8SuBuPlF0ZwWIJKACvr6yoloP/fEsBKCWiFBHZ3D8XNLeRv + aA2BuGj9cVCzf93Fjrtj42BAo/cjLCaVlo55XLbnZl568yPe/+ww9z7yLLff9zgPPPEiT734Nvc+/BQr + 122lpLJRfINovIPC8JWxu4i/M33/vyaAQ4JlXPwJj/AnPimAzNww8SEiqaiKoLQihMJiX/Hr3UlJ15Ka + 5UZSml7G0g4PTwuU9T/tHf8hgK3sjC+Qv0r7nwTwxRLQCjRae0IiAsgQP7W0ooii0gKS0xKJiouYLAcd + 6EtgWCARsZESO8WTlJ5GTkEhZdU1zJozl+HxlVy6ew/X3ySx0j33c++Dj3D1Ndezbv0mduy6jMeefIpP + P/ucJ554klGJc3JzcsX+JIk9ypJYp5M9l+7gnSce4cP77uS2BX2siQhni4sbe2313GvqykPGGu6a6cz1 + Zhr2aP24LjGD55aNc/CRh1TieNOaFWTnZOPjHyhzKUjivBzGlk/w9LPPc/DQEU59973gNN8Ivj39A999 + f5YffvqZn34/x29//cUf/MlvnOfcX7/z25+/8ccfv0rc/OsFAvhnwQ/8/v1Rfj38IV+/+igf793FKxOL + eLStilsyYrgqxJ3rwg1cHaThcn9brgiw59oQDTdFGdgbqePaYCdu8Hfm1gBX7vRz5a5AHbcL9ga6cHmA + A9sC7Vnvb8e4tzmDuhks0s5kodaSRQZbFnmJ7+OrZZ6Pli7Zbnd3oE3s2CyxWwoJ3BPsQU+oJx2B4n/5 + ulLhaU+Z2IwqQaunI/M8NYx46dnk485uX1/uDAzhMZnPz4XH8lJsIm+kZ/G2xDEf1jTwQWMzL1XXcreM + 316FyI2L5w7RA/eJb/JAXDgPRAVxX7AXD/p58KSfHy/7B/OabzAviUw/ExjGYxExPJiUys2Z6WzPSmM0 + I5G+zES60uLoTYljbkoCPWmC7DS68zLpEH+7RXyMJvF5avKyqVaqkuTnUS6xbWVBKVWFFVQWV6qoKK4W + H6Wa0hKJ2YomyV0Ff5eDvkgEX4By7N8EcElu5QVUUJgncbBC9Mo5WXKvzKJq0mU/Uz2mxMW1EjfXk59f + J5DYMk/JBi4TFJEvsV5+bgaVosPnL+hkbFk/Pb0NZOfG4e7tiL3GBJ3HRQJY/LpE0TeRBvzDXAkK1xEe + 605kvAfh0WKvQ8Wfkrni5WcrOuCfEtCTBLCSAazI9GQJaJ3eBHdPE9EPtiKbBgpK/KioDRIZ9CNL/Ozg + cBM5fwo29lOxVtYQvUgAO1iJrCvkr5IJbCmxjOyr+IcAtpAYykyB+F6mAnMn0RGOZqJHxPcSXaH8mdbF + wRKt3EvvIL6Jky3eLg74uDri4+KIt8YebyfxORxt8fgX3AVucq7e0VqFTq7Xyr2crI2xtZihZjk6SQym + lf6E+OtJjQskMymUlGgf4sLcxZd2+xsxIQbC/TQEeTkQLAj11xAWoCVM5Cg0QI+vyIaHwV50v/RHYjNf + Hx2eHq7opI/KeqsaJxlPF41K/iprDuslXnM3WOPnpayfbkusUl0zzpHyLD0tZV70NwYx2BTISKMPy+rd + GVfI3xod65q8WN8axHC1r/hPrhRFmhDvZUSE+C+RASbik1mL3XYVX91XfOcQivLF3uYGkpEhOjvZifQk + K9LjjclLmEF1mjmzC50YqNCyqFLHQIkL/XkOzM22pS/HngV5jgxkO7BYMCxYlm3Hyiwr1mZasiHdhE3p + 09mUdgkbU6ewJtWICWknkqeyPGWaYCrLUqZLO53xFBNWZpizNtua9Tl2kwRwng2rsm0YTTFnKGEmA7Ez + 6IuaRq+C6On0xUyuA6yQwAsSBUmmLEw2Y3GyCUNJJowkmDAaZ8yyuBksj5nBaMwlKsbi/8kA/jcBrGT/ + KtsTylrB6ZasS7dmTZoV61IVyPdJkWPJ5mxIMme9gng5L2oGE6FTWBVixBaJKa8Uv/CGpJncljyD+9LE + T7xIAFdrVAL4UJUjhyucOFjqwL4SWz4qsOSdHDNeTZnBSwnil8ZPFUzhpcQpvJExlY8LTfmi0pKjDbZ8 + LfHl1y0OfFVnwbFKE5UAVtb/PVE4iZPFM/im3JQfaqz5uc5WYM1PtVYqTteYc6LGjKM1Nnwh/XivypPX + m6N5uDWJneJD96T6kB9qIDnUm/hQX6KCvAnyVWI0LVqNMxoHiVEcbDFoHPH3MMgcNxDgocXf3VWFr0GD + j8Q0fm5OBHtrCQ/0IF78g5T4YDLTIsjKjiYjM5KUlCDiE+QZ0W4iP1piAx0lFlcqT4Yx2pDPZaKnbls4 + m3slln14uI+rO2tYlBNFbYSBRvE1hptL2Lxo9iQBHDhJAPs4m4t8W2AQv8JNY4aPQSkFbUmIrwVhPmYi + k6ZE+hkT7Stz30dkwceUZD9z8UGtyQ6xpyDCmZJYHaUiE+VxLlSKD10l25UxGiojHS4QwNb/VwK4Ndme + Wan2zMlxpr/QlYXFLgyWaAROLClxYLTUiYkKHWtrvNhU78/WhmA21/mzvtKP8SIDs+PMaIk2pl5QFT2D + 8hhjCqNNyQqdQXqIMRmhFmSFWV8ggB3Jj3CiINKZ/GhnOc+R0lg7ahLsaJF+9GY5MVjgykiJK8uLnFlW + KLIp8rSiwIb1Mve2VvybANZwVakzV+bbcVmmGZclG3NVmhm3iQw+UK7lgTItd0sccnuuNbfmmHNHtjEP + 5RjzQqEZ75Zasq/ChuPldnyTa8m36WZ8lTyTE0nGHBeZPSZ65KjI7cH46XyYOJ33U2fycaY5n+ZY8nmu + lUoAK+0nWRZ8mmHCZ6nG7Esx5kCqCUdTzfg6XeZujg1nChw4nWurZgSfFL1yIs2Yr9JncirLdBLZpnyV + Kc/KmMnB1KnsS5vKJ+lT+SDjEt7JmMLr0j4Wa6TiGZGt1zNn8EWZA8dqtJys1fFVpSuHSx05qGT+Ftuy + r8iaT/LM+CBL4rzUabwUZ8TTYXJtqBEvR13Cm4kmvJdmyduJM3kjVp4j/T4gsny42FpgxeEiM44Um3Ki + 1JxvKy04U2vNmTorvqsSOSyZof5h41jRFE6WTuebChNOK1nCtWb82GDOL01WnGuxEdhegJLF78Bv9Y78 + VmvHeZHnc/VWfN9oy/ddHvwylg67mjBanj+V7dWW3N1l4I1F/pwYC+fMkgDOzjdwuseJU/OdODvizq9j + XpwZcuPkQj8+6Pbj7lJX1oUbM+A5haHgGaxLc+CaWn9u647m5tmRXNMexK5Gf9ZUejI3zZ5aMeQF/tPJ + 8JlOiv9Mtb56tAhYXJClBIB2ZMU6kZvgQm6iC5nxrmTEupAR40pqlJ6EUI0YS2fiwp1IjHIkLc6J7BRX + ynLcaKvwZ3a5N+2FGjoLrBlpcmHbXA+umO/GVfNcuWK2NXtmW3Fjrx33Dhp4dMyHx5b5qXh0zJcHx325 + f8KP20e9uHaRnu1zNaxst2Gs0YIldWJERHGONtgw0ebEKiU7slPL+k4Dm3u82bkgiO19/qxt17OyWcsG + Cew3tXmwoVEEtlbDmgoHEVRntlS7CLRsrnJlQ4Uz68qc2FjuKLATWLG5wkIwgx1VU9nbYcn9/Y48OaTh + 9Qkdn2wycOxSL767xo+f9wbxy/WBnLlC9nd5cGq7B19t9uTLNR58PKrlrYXOvD5Pw2t9Wl7uM/BSnzvP + z3XjxbkKCezGa3N1vCNj8n6/ho8HHPh80JpDozYcW2nLVxsd+Xq7C6cu03PkMi37dzrw0U473t5pzas7 + bHhhiyVPKgTwKgueUAlgex5d5sAjow48NCJYKoK/xJaHZP/pFXpeWOnGC8sNPDdi4JlBPY8uEKUg/bq9 + 25W9na7c0R/EYxMZPK8SwJU8syVHJYAfGPPjwWE9z69w44ON3hzZFcgPe8L47cYo/rglkvO3hHD+Zj/+ + uNWL87caOH+7lj/v1MH9nvz1iDfnH/Hl3EM+/HCfjM/teg5d5cCBnWLANlmzb5U1+5fbsl/6e2DYiS+H + tXwxpOXj+RremuPE6x1OvDlbx7tz3AWevCl4qUvPE/LO72114rZ2pe9uXN3lxdYOL1a1ejDcZGBRo56B + Jj39DTr66hXyV0tvjV6go7faoLb9ojTmyZyYX6eUenZiqFXDmDxrWbde2n8I4IE6GxbUSpBUb8lgnRnj + TeZsnm3J1QsduHvcVcbKk09uCODrB6P45ek4fnokiB/v9eKHO9w5e72Ws1e48NOlLvy6S8+vO/T8LvNE + yTb940pffr/Sj/OCP64K4M+rA/ljdwi/Xh7Jj1fE8dWWaD6aCOXJBX5cVefAePYM+pOm0iDKq0aclHpR + zA2p1jRkaKjL0lGdZaAq0yDOnpaGdBdmZTvTJ07fchmL9e06Lu/3YK/I2O3rArl/ZyjP3ZDE+w+X8OnT + NXz+VA37n6rm08fL+PjRPPY/nc8379by65FZnP+mgz++74SfuiRQ7RHM4a/futTs30kCWNnvVo9zfq7s + z5dzB+C7CwTwQdl/t4ffnmzhyA15vDIezEO9em5vd+EW6dcV1Q5sKLRgXBT1SK5CBJsIZrIsZyprCy9h + c9kl3NRhwYsTnhy+Ko7f7s6SuSXK8r5kQSzcEcJfN8k8u9aV81c48ut6c84Oz+D4bCMOKORvwxSON4ox + axDHqd6UgzXT+azKiA8E79QoGcBTODFsKu/GFW4LgKci+P2FSH55KYYzLyZw+PFkPro3m+euyeWmNZms + nJ3A3PIEZhXl0CZBYlWOBG7pNeIgKdm/peIg5ZGakU5CSjIxifEkS5BaXlPFoiWDXHbFFdx6++3ceuut + XH/t9ezevZs9V13N9ddcq5K0e6+/gRtvuJ6b9k7i5r03cMPVV3Hl9u2sXznO+NIhJuQ+68ZH2bVxLbt3 + bOWqnTvYvX0bu7dtVdurdu3iih072LlpE9s3blDvfdstt3Lt1XvYvHEzE8vGGV26hMEF8+ib00ZLYwl1 + NTlUV6ZTXZFJTUUOdeUFVClrOxbmq0FySW4hRbn5FOQoBHAeeVl55OYqJHCh+o/l3NzJUle5KhQyeJIQ + zpMAOVcC4zw1gK6WQLmGEtkulc/KCsvUtSobq0ppbyinq7WK3lnV9LRVMaelgu4L6G2tobddQT1dLbUo + a1VWlxdTWVp8gQQWlJZRVlauZgGXVlSjrLtbWjVJAquZuGo27n8SwEop57zSmr/x/w8BfHFbuU9ucYWK + vJJKFUWlVSoJXFKmlIiup0yBbP8/IoALFBRRkpNDgcynkix5VwUZNJTm0VSaT0NxDlW5aZRlJlCbncCC + 6hzWthWwqzWNG9vjeHxOHG/0x/JxXzAH53hxVHTosW4DJ7vd+K7Hi+/n+vDzPH9+mOPNiVmuKvl7dLYr + h7pc+bJHx4E+Pfv7DewTH+TLAQ+ODfpyaiSQ00rm7/IQTo8EcGqJL8fls0Nizw72ajjY48yBOY4q9nc7 + 8Fm3PZ/0OPJ5v9iyRW6i6304tCyAg2P+fDkeyIGJQL5cHcyxDREcXR/KQfEBvhjz4Lj4A6fl+I+rlWf5 + 8d1ST04vdeeU2LCTi3Qc73fhyFxneZ4jh/qcObNcfKWVQfywQvTwqhB+WRMu10bw3fJQ1Zf6fCSKN5fE + 8MR88YvmRLGlJYzxhghmF/ip/8iMNZgSrTUnysWceIMNRRFe5ATridKZ42s7BYO1EZ7OMwnyVAJ6V9w9 + nNUfP8xszDG2MVMJYEt7BeYXfgz9hwC2cbImJCqYkqpiqhoq1SxgnacOO43thexfZe3ffwhghehViF+v + AHcVHn4GlDWClczgsJhgmXu5dM5pYc7cNhpFfvKK0iksy2TxcC/rNi9n+YrFDC6Zy9iyASbGFzG8tI9F + C3toEZnKyk0iQSWAYwlPiSY0JYpgQWhaDBFZ8cQXpJFUkvm/EMAK6atk/v5fCeDiPOJL8kkoKyZe5FXJ + AE6uKCGlrICE/BRiJZBMzAyivDKa2ppwKst9qC4z0Nnow2BPCMsWhDMsc3K434dlC71ZORzAquFg5rVr + qcw1JjvGiBSxhaUS1LeXG+ip92Feozcjc4IZ7vZlUYcbC2Uuj/Z4sHFpGNuWRbNpOJSNS4LYMBQg8Gfj + oB/rBjxZKb6Z8qevwTZH5jdbMzTbkVVDBras9GPHuiC2ynzaOBbChqXhcq9YNo+lsnl5LmtHipjflUZb + fRLlRbGkpYTi769Hq3NEp9cQGhpATXU5fT1doms7aaorp0a+v7Im7lB/FxsnhtiyQskCllYhgMcGVAJ4 + bG4rg7PrGGivorM6n0Z5rwoBXC7yXZASQ0ZcOIkRQUQE+BDo5Y63Xoe7i5IF7IiroxOuTs7onDTolEwE + V+mPVo+ri7IGlJ742FjKS4soys8hIjSQkEBfosNCJMiPITs9hfzsDJUIToyNUo9np6SIni6mJC9PXSvU + Q2vA4DK51pmS6eDqrMFFnudsL99ZnpEYHyv2IFtsQzbJSQlER4WRmBBDjuis4sJcyksK1MziGLl3fEQo + eZkpottyKMxOJzkmAi+tMwYnO9ydHfB0sSfMz530uFCqC9PobCiV91/FwOxals5tZNn8VlYsbGXNkg42 + jc2RMexVyV91HWDBluW9bFrWo2YAb1wxj+GFLdSVpZEQ6YWHUgpZY6aWgnZSsoDtldYMB2cLgSVOLlYq + LhLALlpbNApcbVS4ioy6KHKqtcFJ9i8Sxi56Za1dW/RKJvCFEtAXy0BrPZzUMs8Oun/KQP8HGSzHneR6 + 54tZwB5KFrCNiv8o+Sy657+J34vQ+ziocPNywKDse9mpPxQr5K9BWq1874tQCGAPDyVLwA4fOS88xEBu + VjTNdQXMn1PHnFliy2ROKz+SJkR5kRDjTXSkByFKFnCAM14K+evjOEkA+zni5W+Hkm0UFa2Rd+wmNspf + /OsYRhrjWdWSyNrmeFY2xLKmIU7ishQu7crihv5CruvJ4srmWHZJ7Li9QMv1VR483BnC6wvjOb66gO/X + F3J2bS5nViRzdH4AHzY78Fq5Ma+VTOPzBjtO9/nw15JIfpMY5vQsd0426TgiPv+haj2Hqzz5KMeVZyNN + ecDbiHvcjXjQfwpPRk/n+WQT3i2xF1/Ri7OLxVYMiy+5JhI2CDaFw5YI/twczrn1ik3xVgngE0tc+Xqp + Vi3/rGQA/zgucfhyD87I9pkVfnwjPvbxIW+xe2583qLlgwpH3i1Q1p2y560ke95Llhgy05t3ZHyeCbPn + wQAL7guy4P4wGx6MduDhGGceETwW7cwT0dLvGD0vJXjwerIPb6cH8FpOME9l+XFnigd7kgxsSjQwkeTG + Ymn7khRyPeQ/COCJmkpWNTSysa2DbT3z2DpvgJXdPfTV1FOekUlWfJwq+wlxscRHKwSw6OWwyP8igJU2 + muSQ/4EAVjKCLxDAyudxQaGE+QYQGxhCVmwihWlZlGTnUpWXT21RAZ11tQx0ddLRWEd6UqLoozgS4lOI + jFKydMNEhpQsWp26DrCXdxBp6bksWLiUO+5+kH0HjvHpgSM8/eJragbw3jvv4b5Hn+T5V9/ivkeeZOX6 + zWJbm4iMT8crMELNAg4MiSMwOE4lgC9mAPsFKvsKYv9HAtjXdxL/QQArZaDlWoMhGJ0uUIVeHyg6wR8n + jY/02QMbezfsNZ5Y2etVAjguJY9Fw6u486Gn+WDfUd799BB3P/wMN97xoHrs8eeVLOCXufzqvczqni82 + PVklgH1CwlXy10/G/v8LAlg9/8J2YFCEjEeYSgAHhvgTGuZHTLwfaZkh5BdHUCb2uKQynMKSQLLzfEhM + M5Cc4SHxjJtcI3rFU1njUyF/Z2IrOtNKYGk7E0u7meL7KDBRcZEEVrP7lCxgjeg18V0CQ31JFTtWUl6o + IjM3XfaTSc9KJTk9kZTMVLLFNhWK31BaXUl1fT21jU20d/fKWI6yfvNWdl5+JdfccBM33XYnV161h3Ub + NnGpHHv62ec4dPgwb775Jpdffhlz5nTT3NxIR2c7a1ZN8ODdt/Hxi0/z2cP3cs/QQnXN2e06D260M3Cf + uZaHTP5FAOv8uD45k1dWreGrZ57iw+eeZPeubeI7tZCema2Sv43NrWyS/rz48qt8vv8Ah44c46uTpzj1 + zbd8f+YHvv/hLD/+9DO/nPuF3/9S6N8/+R2l9PM5zgv+OP/LJAGsksA/C85y/ofj/H7iU8689ywH772O + 97ZN8Gh3PdemR7LNX8PlQS5cEejMLj9bdom+3a1kAUcZuEFwTagL1wW6cFOwjpsDtQJXbpD93b4ObPey + YpOXJRu9bVjjbcVyd3OWybtcJnZq1FvDUl/xf3x1KgE8x8uZDg9H2gVt7k50eLmoJHB3gIHZfnpa5Pxq + sSVV7tY0etrQ5e3IYjm20lvPLl8PbvDz436/QJ4KCOUlmaOvhEfxmkICp2TycVkV+5vb+LCljaeLy7gj + IZG7RAc8GB3LkzHRPB0dzrPhQTwT6MOzvt685BvIW/5hvOsfzhu+kbwgOufJ6EQeTs3gpuxsNudksDg7 + hdmCFplHs9KT6ExLpT0jhVbxKVrysmkoyKZOfI8a8TMqVOI3j9KCfIlFC6Uto1z5M7LEbOWC0mKJTy+g + uEjiN4lX/28EsJIhrJyjlIG+SAAX502WiFb+BK1UwsoqqiazuJp02c5Uj12oipVfL7FzPQUFEmcqf5BW + s4pLxT8roLggV3zjYgYGZjMy0kdXd+0kAezlKDJljKuMv7e/UgJaIYD9CY/yIDjCQFiUUmXIm9gkH6Li + xF5H6AiQeeIb4CAy70JkrAexCb7SeuIj1ytLQSh/6lDKQOvdzMSum6tVPNKzPCV2DaS6IZTKukByi5T1 + u83Eb7hE9N00bCSumSSA7WTfWv2zh5Lxr+B/RwBbiM9l7myKuZPoB8fJ8vEOCvkr0Ar0jla4C7wlHvLT + 2BGkcyJY70yQ1kngSJCLAwFy3F9j/zf8nO3UZXo8HCxxF7hJzKVXMhstpqvroTpaTkdjYyx+pQXRwW5k + JUnslB5BVmIgKeLXJEV4/o3EcA+ig7SE+jgJlPV6XYgI0qnZwaEBOvx8nPEWufASf07x9QP8xf/2Uso+ + O+AsfXbROIjPrWT/ii8u/qFeq5SdtsBXZC7E31J8TzvyU5wlZvekp86fgcYABiV2GalzZ6xGy0SlhjXV + rmxs9GBLWyBrWsWel3tSl2xDZvB0on0uUUviJkTZkZqoV7N/i3IiKC2KIT8/hFTR1wnxdsRHGhMfconY + ZSPKYqczO8uOhSUuDJVqWFzgxALZ70u3oi/NivkZNvSn27Aw3ZahDFuGM6xZnm7JynRzVqXOYE3qNNal + TGF1spH4GkaMKUi8hOGkqRcwjZGk6XJsBstTTdWyz6uzRM/k2LI6V9pcO8bTrRlR1vdVSN64mWoJ6N7I + qQKFBJ7BPCUbON6E/kTjSQI4yVh8mpksiZ/JsPhqI9FTGROMxkxmAC+Xz0bipqlE8Ki0I3JsaYz0Sfk8 + fjoTco9VauavFatTLVibYsG6VGvWp1ixLtmSDUmWrE+U4zHS34hpLAuW7xZoxPaoaexJMOHmFFPuTDXh + gQxjniuw4t0KBz67QAAfrnbmaJUzhys0HChzUNci/SDfmjfSTXgxcTrPxU7hGYlPn4kz4kUZs7ezp/Fx + yUwO1lryVav4m802HKsx40j5TA4VTeVo8TS+Kp6hkr9fl87k20ozlWz6sU5Za9SS76vMBWacqjTmWIUx + Ryut+bLKhc9qffmwI4XX5xVz37xStrTmMlCTw+yaIlrE96suyiYjIZZQfz/ctTJHJU7zNigZ7p7i0weT + HhtJVkI0mfFRKlJjw0mKCpQ4LJjMxAiyU6PJz4ijODeRiuJ0KisyKClOJi8vhsysUDJTA0iJ8RBfUUtB + vA/tBXFMtJZwpcRldy3t4wFlDfvhfq6aXc+C7Giqwt1oSAhkuKmMzYu6/iaAA12VDGBzvEVP6OyM0Tma + 4Km1xNfNUuJbC4I9zQj1NiXM25hIbxOiZDvO15wkP0vSAm3IDnUgN8yJQvGX8yMdKYpyukACu1IZq6Ei + ypGKCDsqwq0mS0D/iwBuT7aW1mZyO8mO5kRb2lLs6cpWMuQ1zFf+OFHoILBjsMhOXQd4ZbWBtSKzW5qC + 2NUWwY7WMDY3hrC6wptZMSbUhU6lUlAadglF4dPJDZ9BetBUUoNmoqzlnRFiLf21J0f6fZEAzotWWnuK + om2piLWRcRK7mm7PYKGWkRItY8XOjBU5MJZvw3iBNetK7dl8oQT0FZWuXFXhytWlLlyZ58BlGRZcKrK2 + O92CvTn23Fnqyp0lrtwsccjePBuuz7bixiyZ39kmPFlsyevlNnxUbc+XMse/knt/lW7GsVSZaxIfHRE5 + PJxgzKH4GewXvJc4jbdF3t+Xuf5hlhkfK5m/gk9zLfkkx1Itw/xJ2kw+U9bhTZFrU834KsOSb3Os/4MA + PpFuyvF0hQA25utMMxUnM+WZadM5mjGDw4Ivs0Vm8oz5LG8mH+fPEDmawQPhU7gv1IjHRL5eSr2EL8sd + +LpOz3eN7pyud+MrGY8jZU4ckHf1eYElH2Ub8176NIm9pvCyXPNsmBEvRBjxWswU3k2Sfop++izbks+z + LDhUaMNxkeeTMg4KTpSJnJZYCEw5VT5ZAvr7WgtOVZhwTOT2cN4UDuUbcaxwCickFj1ZNoPvREa/rzHm + bJ0pPzVaqBnBPzcqmcE2/Fxrwy81dvxSZc05kelfakSu/5sAHs4yYlOZCbd1uPLSAn8OjkTw1VAQX/UZ + ONRpz6G5dpxaquPcSl/OrQ6S4DOMg4vDebLFj8tSZYKGzGAs0px1aRp2lnhzeV0Ql4rx3lrjz/pqP8ZK + 3ZktE75Czivwn0ZOoAkZQSYkB5oSq6TXSzCaGmZHdpxMykRXFZkiTKmRTqSEO5EgjkR0oIMYSXsxprai + SGxJjrIlM8GR4kxXZlX60y2C0FXsQm+RTNZm6UevO7vnG7i6z5nLZ5mzW7B3ji13LXDlgSUePLTUk4eX + eovC8OC+YU/uG/XiLmlvWKTn0j4X1s+yZ0IGcrTOkmElC1NexIomJ1a1aFjbrmV9h54tc7zZMc+fbXN8 + WNemZ22zns2zPNnU7sH6Zh2rakVwKx1YKS92jQTl66u0rJPJslomy7hMlhXS15XFVqwRgdhQYcmmSlN2 + 1phwk4z5Q/MlEB/S8ea4ns82uHF8pw+n9wTy895Qfr0+hDNX+vHtpd4c3+bFwfUefLLCwNtLNLzc78zL + fa68KO/uhT53npNxeKrHwLM97rw0141X5+p4e54r7yoE8EJlPVwbjiyz4cRqO05uduLrnRq+2a3n+G4t + X1zuyMeX2vH2LoUAtub5LRYqAfzkKgseW2HNo8vteHjUngeX2nPfkD33LrbjnkW2su/Ik8uV7F93nl/m + Jt9DzxMDOh6Y68rd3a7c0qHlulYJGrr9eHA0hee2ll8ggLN5eEU0D48H8fiEJ6+s9eaTLf6cuCyUX/ZE + 8scN0ZzfGy4I4vyNvnCrF3/eauCP27Vwlw4e8oIn/ODpAP58yp/fnvDm7IPuHL3BjoNXWnNghxUHNlrx + xSor9i+z5otRWw6MOLFvyIkP++15s9uW12bZ8kanM+/M0ask8Ns9HrzcreOJTlfuaXXklnYJ1pTyxp0e + 6ntWCOAxwVCLOwubDPQ3KgSwK70KAVytkL9Kq1fbeSoB7ML8OqXUszNDMgYjMhajs/XqWoBKRrBCAC9s + sGWg3orFDZbiqJkw0WLCzj4rbhrT8OgmN9691p9Dd8kceDKG8y/F8+vTQfz0kAc/3GXg7F5Xzl7hzE87 + nPllqyu/btby+xY3zm/z4M9dvpwX/CH481J//rxMxunSYH7bFca5S6P5ZnMEn4+H8PyAHzc1OrMh35TB + lGm0hk2hIdyIxthLaEw0ozHNgfoMCcgyxNiluVKV4kKDyH57lhNzCxxZ0ezBhg53Lu8XeRrx44Yxb/au + 8OauTSE8eXUyz+/N5PkbM3lhb7ogmbfuzmD/08V892Ezvx2fw+/fdfPn2R74tQ/+FPwxSfpyTloF6na3 + tAJl/5d5cKYfvu7jr6Ny/ify+Rud/PFkM1/vLeC91RE8N+DNQ9167p3txg0NGnaJolXKXI/nK+WgTVia + PZ2l6UYsyzBiZbYRVzeY8oToif2XxnHu7kJ4QHB/NtybzB+3hPL7td6cu8KVc9sc+HmlKNXFYkRmGXGw + cQrHW6dzss2Uk62WHG8TJd9szP6mS/hY8EHrFL5YIM7XuCk/73Lmr9t9+OupEM6/KPd8NZIfX47lxBMJ + fPFAFm/fWMD9G3PZNCeJgbJ4ugqy6JAAsTq7mvz0SjLSS0hLLxRkkZKephLAcUmJZOXn0NLRzrpNG7nt + zju5/a47uWHvDer6vzt27FDX/919+RWCK7nyssu58vJL2X3FZerav1ddfhlXbN/OptWrWbpwPnNntdHV + 3ED/7HaW9PcytrCf5YsXsmzRAMsHF7FqZJiNq1axXrBidIwVY2Ncvfsq7r37HpUEvmzXZaxeuZqx4VEG + BwZUUqKlqYK6mgJqqrKoqcyhXhzH+qoSakqLqCoqpKJQguS8QjUDWCWBlSzg3FxxAvNV5OYVCYoliC25 + AIUMnkR+Qbm0kyjMr6Awt5zinFJBMWVyTbXcu7myiI76EpX07W2vkLaUOU3F9LSUMbetnP5ZNcxrr6a3 + pYrZjRXUl+VRXZxHZXEB5SWFlEg/S4oVErhUtv+VCVxZg1JmWSm3XFRRQ1F5/YUs3f9dBnA1BdIquJjN + exH/cV6JvO9/QTlf3ZbgPre4ipyicrILFZRJgF9OfpFSorpqstS0nFMkKC6ulb5K/0qlVf9tXnUB1fKd + Kv+GQgCXFJRQki/fMb+Aouxs8jLTKVRIk7x0eT+Z1BRlUVWQQWl2CsXpcVSlRzOvNJW1TZlc0ZLCXe3x + vNSbyAfzovl8TgBHZntwfJaOY+2uIhsunOww8O1sd37o9eZ0t4cclyBHyf7t0nKoR8/h+e4cHBDZW+jO + 5wNufLbAIDLjxqEhH44v9efkiNiEJbI96MXhhW4c7FeyhTXs73Vi/xyxaYJP5zjwYbcd7ws+nOfCJ4t0 + 7B/24cB4IAcngjiwIogvBAfXhHB8awxHN4bzxYQv+4bdOLbcR80A/kk++2HCj9MjXpwedufbIQOnFms5 + MeDKMbGzh/ucODpfw5lxP86uDODsigB+kuvOrQnj59Xh/LAijG/Hwzm8PIaPR+N5eXECD8xP4PL2CMar + g2lL05ETYE6ym/hCBjMSdeakedhQHetFcaiWeJ0JQXZG+DlOIcTdgrhQVxJjffEP0OOosVEzfs0UstfO + Qt22sldKIppiKccsVALYDFtnWyIkyKpuqKKxvYHUrBRc3V1UYvg/CeDJtX+V0s8K6esd6KnCw89NPa6s + CewT7EV8agxVdSV0zmlmdk+LWta5ur6IweG5TKweYuHibnrnttHf38Fc+bxJAq/yslxyc1JISokkPiWG + WLlHWHLU3wSwgvDMOBIK00kpzSbl/0gAZ/4PBPAkFAI4ToGy7m9ZkboGcFJFMSnlBSTKvRNz40jPC6e2 + IUn6FU1tlR815W50NPow0BXEkr4QFvf4MjTXk5EFXioBvHokhN5WDWVZ08mKNSI9YgqVWZZ01RpY2OHP + UFcAE/NDGe8PYLjHkyVzDEz0e7F5JIwtY+GsHwpk3WJf1g36sHGJP5sEGwa9WTnPjZFOFwZabOlTqsx0 + OkwSwKv9uHRjCDvWhrJ1IpxNY5FskrmzZXk6m5fnsXa0iIU9GXQ0p1JdlqBmTwYHu6M3OKsEcHCIPxXy + vWd3tNHR2kRlWQFlMl61MgYL5rSybmwxW1Yo6wAPsWnZQtYrJaAXdjM6t4XFnbXMb60Qfzr3bwK4MjuJ + koxEcpOjSY0KEf/blyAfD3zcdBIwa9A7OeDiKPPjAgmsELOOThocHTU4y7abwUBaSgqNDTVUlhcTERZE + gK8nkaFBpKckUlqYR7no1dzMNOKiwlUCuDBb7FxTE011taQlJeGhM8i9J0vdaZyccJZnOdk74Ghnr659 + lqzcp7RYdFwRycmJahns6MhQMtNFZ5UUyHsuJ0POCQv0JzokiKKcDOoqSqiSz9ISonF3dULnYIPe0Q53 + jT3h/h7qjxF1pVl0N1cyv6OWhXMaGOlrYmxBKxMDraweamfDSJdK+Crk784LJLCyv1khgJVS0CvmMbGk + k7baHFLj/PAy2Mg4GeOsZgAbY287HQc7ExycJrOAnTVWF2CtQiF7FWhEPhW4uNji5DJJ+jq6WP0NhQx2 + 0Svllu3VUtAXs391ns5/E8BKpu9F4tfxv8pBO2rlmReygCfLQMv93GxET9iq0CrwkPt7yHgrGcIednJv + JVNY9r3kmRfKRbt5C7yUTGSFCJbjcq6bcp7eWubmJPQGazwVAtjNDl+5JjLcg7ysaNobi1kk4zu3s0rm + Wijxoe4kRnqSGONNnCA83J2AAA0+co2Pj5NKAKvwt8Mv0I6oKGcyU91oLAlhfE4u2xcUc+WiUvYsLOWq + +UVcM1DMTUOV3LOsjkcm6iTuK+GOvlRubA3h2ioDdzZ48kxPCO8OxnJsVSbfrs3izNp0fliZwPFFAXzS + 7sDbtaa8XSW+XIsd3/Z68PsisRF9Pnwr9uxki44jTToON4j9qvPko3wXno0y4T4fI243GHGfnxFPxkzl + pQwTPqnR8HWvDz8PBXNuLJi/1oTz14Yw/toUCltC+ENwbr2/2BQvvhmRWGzIReydC98O6zk96sb3Y+7S + uovdUTKA/Ti1zJ+jQ75iA735rN2ddys0vFXgxOsZDryW5MxbyQbeS/PmlWQ3Hg2153YfU27xM+W2YCtu + C7fnrihH7op25h6Jt++LcOaRcFeeiNLzXKwHryT58mKaP4+menFbghtXxutZH6dlLFbH/BhXeuIN9GUG + /00Aj4kvN15dwcr6eta1tLOley6beuaxYnYX/TX1VCuZ/QnxpCoEcKyS8R9JYkQ4iWHhFwjgCBVKNq9S + Cjo5JIrUkH+Tv9Gkh8YKYkgTKJ/HBk4SwNH+waRExJAVl0R+SiplmeKr5OXQWVsl+n0WnU31ZKemkpKU + QlpqFnHxqSiljl303tg66nHSGAgMClf/MLdpyy5eePlNjn71LQeOnuSlN9/l3kef5PYHHuaehx5XCeCn + XniVK6+9kc7eATLyygiKiMfdNwSl9LN/kEL6RqOsAezrH42fks17Af8mf3394y4QwJNr/arkr3K+SgJP + HtMbgtDpAv6GRusn9t8HOwd3rO0uEMAOBgxeIeIbSt93XM0Lb3zIF8e+5a2PDvDQUy9z272Pcfv9T/Dw + 0y/zxHOvcutdDzK8fC0pWQVi18P/JoH9/48E8AVcIHb/gbIe8EVMHvtfCGC5v0oABwcQEuZPRIwfSalB + ZOdHUFwRI4gUfzVU9gNJSvMiJdOHRJlzQaGizzyVCgkzVQLYxm4mVgJLmxlYCMxsZ2Bua3wBkySwjbIO + 8L8IYP8gT7lnrEr+VtWWiX9eQHFpAaUSB5RUFFFWVSY+TQ11TY3UtzbT0KL4Nc20dnazYPESxletYc2G + zWzZcRmXXXEVW7ZuZ+XqtbJ9Jc89/wLHT5xg377PefDBByS+2s769WvYuGk9N+69ljdefoZD773GF48/ + yAMjQ2xPTGKHwZMb7d24z1z3HwTw1VpflQB+a91GzrzyEofffpW7brmB8fFxevvmqVg2PsF1N+zl9Tff + 4qNPPuPjjz/h8KEjfHPqG3786Ud++eUXfv31V377/Vf++OsP/uJP/uC8mvn7x3nB7/8igM9fJIBP8PvJ + ffz86St89eTtfHr1Jh6d18yV6WGs8bZjs689OwOd2C66dnuAPbuCHLkmUs+1UQauDnNlT4gL14fpuCFM + z/UhWq5WyGJvGza7mbFeb8Im8V03elmzTo6t83NkXaCe1UHurAjxYkTezYC/gXm+Onp8XenycWGWu5OK + Dg9nZnu5CDRqZnC92KUGdyvaPa3pE1sz4u3MOk8tV3gbuMXLiwc9vXnGO4BX/UN4PSiU12QuvxYTz6dF + pRxt6+BITy8ftbbySHoG98fG8lh0DC9ER/GK+ByvB/nzeoAPr/n68qZvEO8FRPBBQDRviXy+EJzA4zEp + PJiWzQ05eazPzWJ+ThqtgjpBU1Y6LZlZNEmsVKcsvZSfT1VhPpUSy5YXFlAiKP4bRYJytRpVcbHEWiok + dryA4uLJNX6VMs//JwJYwd9ZwLmVKooUAlg+z/sXAZylEsA1ZBbU/E0A5xXUq/g3AVwksWNJUbEa3zbU + lbJo4WxGR/ronF2tZuC5ix130piqf+zyDXAhMsaH2IQAwiI9RKZ1hITr1TKtSlno2HhvIqI9RHa1ouuc + 5HNX2XdX1wxWSkf7ix3Xu1mjcTUTXWaCQeaJj5+lWsUjLctT5DKEusZwahqCKShxJzzaHIP7VOydZmBn + b6mSv/b29tiKz2brqJC/1ir+VwLYHEuNmcAUCycTLAVWjiZyD3mug7ma9evuaImXXOvnrCy/Y0eY1oEo + g4YYiZGi3JyJ0jsRpXMk3MWeCPksXOdAhM6JcNkOFn8sSHSMv3K93MdH9I67tTFai2norKajs56Oh4MJ + ccEGchIDxY8OF7sULPbJl3QZvwyB0qZGeUhspyfS31nsmNzfX8Y3SKeWig4NlDH01eDr7YSPt0Zsg26S + APbWotc6opHna10c1exfrasDWq0NBp0F7m7mcr4ZIf5mpMbYUar+Tu7DgqZABmq9WFipZ6hcw9IyO8bL + HFhb5cymBne2tfmztTOc5fX+dOW6UBZvSVLwDGJDJT6NdiAjyY38zCCK8yIpLYolP1/sdpKe2GhrokKm + Eu1rRIqgLOISutKsGSrQMFaoYSTPmaFMewZSrelPMmdBiqXAioUp1ixOt2ZphhWj6ZaMZ5gxkTqdFSlT + WZVixHiSEcsEI4lTWJo4laGkaSqWKEicznDCDEaTTFiWas7yNAsm5D4rs61VAnhVtny3TGtG0qwYTDIT + f2UmvdKvnjCBtEpGcF+c8QUC2HSSAE6YyVDcDJYqBHDUJAE8Fjud5XEzpS9mLE80UTEWP4PhmGly3lRG + pFX2FQJ4RYo5q1MspO/mrElWoJC/k9iQaMX6BEtWxch5FwjgFYFG7IiayTUqAWzGnfI9Hsg047kCa94t + d+BTeS9fCg4JjlQKKlw5KO/t8xIHPim2590cS15Kms6zsVPEZzNS8UyCEa+mTeGdvEv4tMKYLxusOFRn + zsGKmXxZOmOSAC6ZwVelJpwqM+W7SnO+U0jfOiXb0JrTVQr5ZKySS8dKpnG4ZDpHyuUelS4cqA9kX08W + nyyt47WVndwz3s2Vy+ZJjLqAlUN9LO3rprGijPSEBIK8ffDWuxETGkJWYgIV+dm0ia2dVSsx5gW0VJfS + ID6jgtbaUtrqFZSolfi62isljq2kvaVYdJKSMJJGRWk8xdnhFInvUJsTRW9VJut7Grh+6VweXLmEx1eO + 8PDyQa7uaWEgL4GaSC+aksIYaalgy+I5KgGc4q/FV3SBl+gCL4m9dBKD6exNcZN4yEfikwCxMQEeFoR4 + mRLqaUyElwmR3qbE+lqQ6GdFmsQbWaGO5CgIcyQzxIbcMDtKop2ouEAAl0c5URZmS1mo+X8QwG1Kxm+S + Fa2J1gIbWhNsaYyX7WR7urI09IqczM13oC/XRmDFgnwbkVEnJqoNrK73YXNrEJd2RLFrVgSbm0NZUelN + a/RMqoKMKJG5VCDIC55KVvAlpAQqmCF+synp4utnh9ipmcsXs4DzopXWjoIIG0qirKmJs1QzkweLdera + 3KPFIrtFDozmW7NcsLpEfIFyJy6tFJtboeWqMrH1JS7sznXk8nQbLk215EqRv2tz7LmxyIUbCpy5KseO + K7KtVIL4ynQTrssw5oEia54tt+HNans+qbDnsMz1oyL3R9JMOJRiykHBAZHFLxJn8InI9zuJ03gjYSpv + p8l2ujHvZprynuCDbHM+zDLnI5GXD+Szj1Jn8FmKzHelDLQ875TogdP59pzOseUb0QPHFZJZrleygE/K + 8xQo2cBH06ZzLHMGx3PkugJzkQ0LDpaY80Wp3LvQlEcip/BguJH4AEa8nDyFwxUOfFen50yDB2cF39To + OFEuMlpkx758cz7OnMn7adJf0VtvxIosRl0ircijfIePUo05UuIoz3DkeKkjp6o0nKrW8F21s8CJU5X2 + nCi14lixCSdKTPimwkKV06OF0zmUewkHc434UnCkwIhjRZdwvHiqyPB0vq2YLnI7gx9qTQRKVrDlJCoF + 5YJSM36uMOHHShNO/zcBPCCKdnXhDK5rceaJPj8+Ho7iyyUR7Ov15D0Jdj/osObwQg2/rA3kr+1x/Lgm + hmOjMbzcE8beIj1rYsxZESNKN0XDmiwdq/LcWFHgxnixB+PlPgwWudMSb0VJ0HQKg2bKZLMhP9xaBMeS + xEAxLEEWpIfbkRunoSBRO0kAxziTKBM2yteSME9zwn2siQywISrQmtgQa5IirUWpOFCaJU5jtT991d7M + kwk5IAZtVbNM0l4D1w4I5jlzebspu9vN2Ntty+19Gu4e0HOv4L6Feu5ZJNuL3blniQd3LnbjhgU6rpjr + wuZOR7mPDRMNNiyvtWaizpZVDU6saXRibbMLm9p1bJvtxfYuL7Z0eLChRc+mVjcxnt6yr5TSMLCizlUE + 14lxmTArKhxZW6NVMSEGdzhPjFKWsRjFGSwvMGNdpTVbamy4rN6a27tceWy+Gy8MefD2mBufrXbn2BYf + vrsiiJ+vC+fX6yI4e3UoX1/qz5dbvPhghY7XljrzXL89z/Q68EyPK8/0GXh6rjtPdEvQ36WTVs/zvW5q + Geg3lQzg+S58OujMwREHjk/YcXKdHae2O/HN5TIZr9bx1R4tB3c78unltrx9qVIC+h8C+PFVFjwybsmD + ozbcv9SW+4fsuGehLXfMtxFYc98iBx4dduWpUQPPLDXwxICWh2RM7+7ScNssF25q1XJNgwvXtnlx9+IE + nt08SQA/vSmbB5ZH8OiKIJ5e7ctrG/35dFsQX+0M4ecrw/nt6gjOXR3MuT1+/H69N3/d5Am3GPjj1gsE + 8MOy/5QvPOcPL/jx5wu+/Pa0J9/cKQJ3vTWHrrLiyGW2fLnJii9WmrNfvsP+MRs+HbLl/X4rXu8y55VZ + Frw2y463ulx4d46Bd+d6yDxXCGAJ1FoduLHFgT1trlzWbmB9i1L2200lgJcIFAJ4XoNC/ooir3Ght1q2 + /yaAXdWy0H8TwI0ahlpcWdLmwtJZrgy2ObO41VElgBc12crnNpMEcIMJE63TuXzAkrvXuPLybl8O3B3B + qcci+en5KP58LZrfXgjgp8fcOHuvKz/drOGn3c78tM2RXzY68+taF86t1XF+gxt/bvadxNYL7RYZq+0B + /LUjhN+3hfHt2iD2j/rz4jyRhWYNlxZbMJ4+g/64aXTFTqU9Zgpt8ca0pdqoa4TUpDhRmegocKJBttsz + FALYidVt3mzt9lbXAN47Gsi1S725fKEYjUEDeycCuG19OLdtCOO2dcHctTGQF/Ym8dkTpZz+qJ3zJ/v5 + /du5/PnDXDg3H/7oFyhZvr3wyxz4uVtawc+z+fOnWXJeB3+dmcNfXwuOdnH+807+fLtN3n0zvz1Yw8mr + M/lkdSRvLQnk2T5PHu40cLvI754qB7aVKiSwlRg3U5ZmTmVRshEL44wYSzXishozHhrw4OPtifxyTwU8 + VAX3F/HXXekif6H8fLkXP22V8V5rz49j4jwNzORE11SOdUzj1BxzvumxEYhM9dpxvNeSw3PFqPUZs2/B + dA6PGXNK5uCPuzX8cZcXfz0VyPkXg/jjtQh+fTWGb55O5PBDWXxwYz6PrM9i55wkhspi6clLY3ZBGdWZ + FeSnl5GRLs5Mag5Jqelq+efElGSVCC4pL2Vg0UKu33sDTz7zDPc+cD/XyfaOS3exddtWdu3axaWCXTsF + 27azc8dWLtuxnct37uDS7dvYtXkza5Yto7+7k6bKcqoLc2kWx62joYZZdVV01Neo6GlrYen8ftZPTLB+ + xQpWji5j5fJxdl9xBffde6/gfq7Zcy0b1m1i+egEgwsX09vdRUtTDXU1RdRU51NfU0hjdQlNNeXUV5ZR + W1ZCdWkpVcUlVBQXUV5UJIFGoQSnEjzLflFxoaCYQglWC4tKKPpfUCYBdpkEtaUU55ZQmFVIYUY+RVl5 + VOTmU1eUR0tFPp3iCPY2lzC3tVTaIuY2FdLXUsKCWeXqOpjz2yuYXVdIa0UedcVZ1BSJA6qQwCX5lBYX + CIooKy2mRPqqEMHFpUo2sATkpRKYq8SuBOkX1vdVCODC8sm1eYtkv6hcOaYQv9UUXiCB/yZ9L5C8CrGb + J60ChehVUCDbCgrlPKXNlwBfKX2dU1SpEsBZ+WUqchQUlEsryCsnN69M/eFAWV9KJYGLKykuqlCh/ACh + /BP9bxSVU5hbSH5O7iSyslQCWCmXWpSdJmOaQkmu0qbKmCZTlB5HdXokvQUxrK5NYndTIg+2x/NWbyJf + 9EVzpDuAk52enGrTcbxJw7F6R45Je6LFheOiRxVC+MtWJw7MEls0R8uhfjeODvqI/+HD/iEvPl3kzsdi + qz9doGffoCdfDvlweKkPR5Z4qzikHFtk4MACV/aJrf98rjOf9Trx8VxH3hf5e3eOLe/2O/PBIh2fjsg9 + VwRyYFUI+wX7VgVzYG2o2Jd4jip/flnuzcdDOr4c9eDrCV9+WBXEDxM+nBnzUn9wPz1s4NslWr4e1HJy + kQsnFmk4OejKmWVecp43Z8e9+WmlH7+uDubn1SGyHcqZFeGcGI8WvRrP20uSeXYolZt7EiTo9qEuwpJM + j2lkuhuTIz5OnrcVxQH2NMV7UhrkQKLrNCIcjQiXNs7XmoxYN7Ik8AkJMeCiVQhcC6ydrLBQSz+bY62U + QLQzFZhjqRLA5tg52xMdH0mtyFxzRxPpOWko6//aOF4ggJ3+IYCVLF+l/LOS+esT5KlCIYCV4woBbPDR + Eaisj1qQRotSOn1eB7O6GmlurWRouI+x5Qvp7mmmvb2G2Z31tDSWU5CfQnJiJAnx4cTGhxKXFEV08iQB + HJYmbXos4RlxROUkklScQVp5Lillef8PCeBsFbHFOcSKfMeIjMaWFajloBUoBHCykllckER2caz0PZO2 + 9gQJKgNpqPKgo9GbuW1+9Hf4sKDLm8VzPRle4MkKJQN4JIR5s3RU55tQmDxVMIO6fCvRFwaW9gQwNi+Q + FQuDmFjoz7L5XgJP1izyZctoGJvk2rWDvqxZ6M26xV5sWurPlpFAtiz1Y1W/O0tkzs8TGz9XsKTbSSWA + N6/0ZteGYHasu0AAj0awYSSOjaMpagnolUtzGZqXS29nDi31WSKvKURH++HppcPNXUtIaKCabdve2kxz + Y53ItOi+vEwqZHx6Z9WzaukCNq9YwiYJkhXyd82SPlYqP/ZdIID7mkppL8+mqSid+sJ0avPTqBR5L0qP + Jz1W3mGoPyF+Xvh7KmWfNbhpnNCqcFGzf12ltXdwws7WQc0A9vf3lzmQR1d3B01NtURFhuDloSc40I+s + zFSaxKY0ik3Jy0onLNifqLBg9UfTxfPmMVdsRUF2Nn7ePmidXVTi11V5hqsLTrLtotHg7e1NVlYGjY31 + 1NXVkJKSRKC/N6Fyr4z0JOpqK+ma1UpGcgL+Xh5EhSr3z2V2SwPtjTVkpcTjqddg0NjLd3FUs4Gjg33I + TY2hviKX7pZJAnjxfxPAgxcI4PG5KvG7a2KeuhbwtuV9bFUIYDm+VfbXjc6hq0XmYKyPPMMMO6tLcFYy + f+1mYG89FVur6Tgo6wE7W/0L1ipcNLYqlB/5FDgrBLAcd9JY4yjnTUIhhG1xNdihd3fA4OGEwUvehbQK + tO6OaPT2OGuVzOFJ4vhiqxDAds4W2Gvk+VorkXGF7LVT4aKUhL6Ai8cuEsAK9J4OkxnH3k64+TjjLrjY + enhL6+Wkwk3O0ept0OtsBdYXSj9PEsD+fjLWkV5iY2LobC5lsL9FJYBzkkOIEx2nEMBJMd4kxPoSGeEp + 79UVHy9H9cdQXz+NwBlffweBLZGRkwRwc1kYa/qKuWqkllsmmrhrZQt3jTdwz3g9969o4PE1TTyzppan + xkt4dCiNB+ZGcF+7D4/N8ubluYFiJ8I4MpHAt6sTObMuUWLdOE4uDWBflwMfNJnzUaM5B9vt+LrbldM9 + ek536/imU8dJ9Q9OOo5KDHi40ZOPil14Pt6UB/yNuFVvxL1+RjwVP5U38s050u7Gd/1+/Cw+6a9j/pxf + Kf6fxNZ/bAyCLeIHCs6tV/5U5MGpES3HJU47NugktsaFr4e0nBIb9K3You+X+fDNmB8nRvzEBvqyr8+X + j2d58U6VjjcKXHhZ/PGXkl14Ndld4MXTcRLvSkx9vZcp1/iYcl2QFdeF23NTtDM3x7pyW7QLd0S6cE+o + Kw+ESQwarueZWA/ptycPxLvJOVouF6wTjEbrmBflQnesxDYZgcwviGWwJI3h8jyWia84UVvL6qZWNs7u + YUPXXFZ0TBLA9bl5Et8nkq4SwFHERoQRHxZ6gQBWSN9wFZMZwJMEcFpoNGkKCaxAtrMi48kMjyMtTCGA + I4kNCCfCN4ho/xDiQ8JJDo8mOy6eopQUqnKy6Bb9sqh7lvirzVSKP1mk/LmtZHLty+i4NHwCIkSm3FUC + ODImkZ6+hdxy+718+OkXKgF88OhJ3vl4H0+88Ar3PPIE9z78BE8+/4pKAivb42s3U1nfRlR8usz/EDx9 + wlQSWM0AVktAy3aAQgJPEsH+gXFybJIM9lGIXiX7VzlP4Ocn56oEcBQ+PhGi18PQGxTi1+9vuOh8ReaV + DGA3rGx1YsfdxX57EhadQlffYm6+6yE+PnCMo9/8wPufHeKltz7i0Wde5u6Hn+bBJ19QCeCHnniObZde + Jf1uITgyDs+AEJUE9vsX+fu/EsBRk7hA7P4DpcT1RUweU777xf3/JICDCA4LJCzKn7jkQNJyQskrjlQz + gfOKQ8jKCyYx1ZeUDH8SUnylDxp07kqFhEkC2Np2BlY2M7G0noGF6E4z6+mYWxv/Axvj/yCANToHAoK9 + SEmLp7KmlNZZDTQ2S/xRX0V1XQXV9ZXUN9fT0NREbUMjFTU1lFVVU1pZTUNLO/MGFrN8YpVgDRMr17Jq + 1TqWLB1h8eASiaV28PgTT3Lo0GG+/PKgmgX8+OOP89hjj/DwIw/ywvNPc+DT9/nuwEccfPJh7h8eYkdS + CrvcvbnJ0YP7zPX/AwGcxTvrN/HTm69xet/HvPzsE9x8y01cfe01Km665RaeeuppPvzoIz766GPefvMt + PpH25Inj/PrLz/z55x/88cfv/PnHb/Dn7/DXef768zf+Ugjh335RCeCLJPCff/4sx8/y29kT/HZyH7/u + f4NvXryfz/bukNi3lZ0ZoYx5WbNSyeIVv3RzoD1bpN0qvukV4VquijJwZZgLV4RpuEraPZE6dsvxywId + 2eZlxUa9CetdZ7JZZ8pWdyu2+si1ga5sCfVgU7gPa6MCmIjwY1AhgQM86Q90oy9AzxwvDbPFbnWK3eo0 + ODDbzYFZYoda3axpl/t0e1qx0NOe5WKDNro7s9vdldvd3HjEzZ0XPHx4wyeAtwMCeSMwmNdEp3ySl8+x + llZOLxzg28WLeL2slMeT4nkqJoqXRP+8Jb7Iu37eKt729ZU2hHcDo3g/MJ43gpJ4OjSJh2LTuDs9lz15 + BawSHdabk0F9XgYV0tZm51CfnU+txE1V8nlFoRKzFlNaUiIxq8SkEisW/g1lv1ygxGMSK/4XikUvFRVJ + 7Pj/lgCWeDD/XwRwtsSNmSoBPEn+KsgvrCdPoBLA+RJL5leoBHBZSan6J72mhnKJ1btZNtpPZ0cViQlB + uCt/AhM77uWrISjUIHrTX/z5AJFld9w97fDxdSQszECM+DkJif7ExPkSHuEmcu+qIiLSnbgEH6JixI7L + vruH+BQ6S1x15pMEsLL2ZqQTyelu/0kAl3oQGWspz5iOo8YUB4lbFPL3PwlgJY5RlrP5bwJ4kvxV4WQi + sdJMOd8EZfkNrfhcnnKNr/hPgdKGim8Vo3ck0c2FVE8daeJPp3i6kuyuIdngTILWgQT5PEFioUQ5luTm + TKKHhgSZf7FyPEb0TJT4WGEucj9HpXLTTDzEv/O2m05CgAvZMi4lacEUS/xWkORPboJAxikn3pf0KA8S + wvREBzoT4Sf38dcQFaRVSeBJAthFfB5nPD2dxd8Vv0fiMC+J09zkuTqt+H2ujgKl9LMdBr21+FYWcq70 + wXsmYYGm6u/kNbk6uqt9WNjop67HO7/YkUWFNgwVWjBRYsP6Ske2NBjY3urD9lnBrGr0Z6DYQEuWhtx4 + axKiLCYJ4EQ3CjKCKMqNkLkXTX5uGAkJOmIircRvnkqc+Dm5QZfQEGNMf4Ydywu1rC4SFLgyke3ESJod + g4kWLEqyZDDZisEUa4YybFiaac1oljXLshQiVyntfAkTKUYsS57CaPIlLFWJ3xkCYwaTZk5CydZNmMlw + kgnDyaZqtu9oqnyfTCtWZdmxJteB1YKJbHuG00RnxBnTGz6F7mAjukON1HWB+5Qs4P8NATwqWCZYHm/C + ikQzVqZYsirNmhUpVixPlOfFXjhP2rF4Y/WYAuVc9fxEc1YmWLIm0Yq1gnVKK/srFb4kagbjYVNZHTqV + ndEmXB1nwt4kU25XCOAsC54psOHtUgc+Lndkf5kDX5Q6cqh8kgA+VOkqx5z5vMyJDwvseTl5pvhpU3gs + wohHBU/GG/GijN1rWUa8XzyVTypm8HnVTPaVTedA8XQOFU3neIkxX5eb8X219WSWYb013wm+qbHg6wpj + jpdOk/Mu4WDBFL5UMg/LLDmiZDq2iH+8oJD9y5t5b+M8ntuxlHt2ruT6Lau4fP04m8ZHmN/VSU1pKalx + CcSFRVKclcWs2hoGe7tZObSQFYvnM7GoX8WyRfMYXdijYmzRXBWji2RfqUo1NIexpXMYHuxk8YIW5s2t + lbi3XI2nuhvyJW4uYOmsCq4cncc9G8Z4evsaXt65gac3ruC6gS6GK3NpTQ6jMyue8Y46tg3NZX5dIUk+ + ErdaX4LBZioejmYYRBfo7S1wcxb9JnFKgOi6AA9rgj3MCfU0JcJTyQJWCGBLEv1sSA8UOQh2IivYgTR/ + K1L8zckUX7ow3I5ShfyNcaY80pGSEGtKgk2pDDOlXnRYS5INbcm2NMs8aE4QiFw1ximwmSSAMzXMyXGk + J8eWOdlWzJF5MDfXgsVKGWiR2RV1XmxoDWTbrHA2t4SwqtZP5FdLU8Q0ygOMyPc1IluQFTCFjEAjlQBO + CphOSoAxqYEWcsxa+mlDTog9uaEO5EZKG2ZDXpgVRRGWVMVY0ip9XFSiZ7hEx0ixhtHCSa5qWb41q0ps + JwlgmYNXlOm4sljL7iINu6XPV2bYc1m6DZdn2LJH9vcUaLg8V/wAket1KaasEXldnzid7SLHtxRY8WCp + Nc9W2PBmmTWf51lwKEPiqjRTDgi+SDdnv7SfJhvzftJ03kycxmsJU3kzZQZvKEidyZtpxrydYcI76QLZ + fi9tJh8oZaJTjNmfasxhucdX2TKfc+34Tsbz1AUC+IiSZSznnFAI4DSFADbmaNoMdQ3gkwUWnCyx5qty + a45VWImsWbGv1IKXRRc9n2QksZQRb6ddwrFKB07X6ThbZ+BsrYHvRC6+Ftk8VmzHwTxzPsucySdpU/lA + zn8/YYpawvpD+R4fK2sVy3O/LtdwqlLDt5UufFej4XStK9/XOAsc+bbKnpOlVhwvlH4VzuRg9jQ+k3t9 + mjqFz9ONOJBtxKG8KfLZVJX8VbKAvy5VSOBpfFsxTeR5JqerTThdZSYw53SZOd8VmfBt4QzOls7kB5Ht + 7xptOf1vArgnzoiR7OnsrHXgrk5v3hiM5aPBON7u9ue5Wnuer7fgo15HvlcC1R2J/LQ+nhPL43l7QTR3 + 13ixOUkmh0zklYn2jAoGk8W4pGsYzJeJVObDQKEHDXEyyYKmUxJmRm2SC+VxzhRE2JMeIgIkyIiaJIAL + E7XkXyCAE2SyhrobE6CdToinhRhHa6ICrIkNlWuiZeKmOFGdJwFobQAL63xYLIHv0ipH1jbbc8VcLTcu + cuOmBeKcdpixZ5YFe7tsuWWOI7f2OnP7XA139Dlz53xX7h0wcJece+sCLdfPdeHKORq2dzqxrtmWNY12 + rKqzZXW9GJR6R9bVyfF6J7a06MRQerK9w4MtEvRvatGzrc2DbbO91dLAa9vcWFGvZXm1M8vFuE5UOrG2 + XifQq4TwoEz6eWnTmJcyhaFcY9ZU2rJd7ru7SfrU5c4T8714abEE88NufLbcncPrvDi1I4Afr4rgpz3R + fH91BEd3+PHpBndeH3XhmQEHHum25mH5jo8qBHKPQVo3Hpyl4/52Vx7udOWZXgOvzDPw1nwdHy3U8vlS + Fw4v13BylT2nNtnx7aVOnL5KJuW1rnx1jRiaqxz57Apb3vkXAfzUevO/CeAHRiy5b4kt9w3ac/eADbf1 + WXPrXCvu6rfl/kXOPLjQhUcGXHlwrhN3d9pzW7sjN7douLFJy9U1Llzd6MHt/TE8s7FMJYCf2pjNPSMh + PLoigGfX+PP6pgA+3hLI8S0BnNku3/3SIH661J+fLvPk16vcOX+dgT9v1PPHza78cacWHnSDJ73gOR94 + UdqXvflD2h8fEQG9047je2356loHjl1mw5cbRMmsNGPfcgs+GbLkvX4zXu8y5uVZprw6y5o3uzS826us + l+zBq3MNPDF7kgC+TubDlc0adrS4sqZBx3JxmkZblAxgDxbI/txaUeLVTsypklYUg4IemZc90s6tdp0k + gOWcgToNi5tcBRoWtTgz0OzAwhaBQgDLvFssWNRoxVCjCRPtl7B70IyHtrjy7k2BnHwijrMvxvLb61H8 + 9XYEf7zqyy9P6fjpQWd+ud2ZX/dIqxDAax34ZcKJX+Udn18h47Takz/XePPnWm/Or/JQ8dd6b/7a6Me5 + tb6cWubJ/kF3XurWcn+zE3vE6G/MEccmfSaLRWn2xU9jToIJ3anWdKTa0ZhgT3WsLZWx9tQnO9GaJsYr + 34k17T7snOvPnsVB3DQWyp5BbzZ3O7Kmw4bNvRp2LnRnl8jbrgEtVyx25aEdYbx3XwEn327h92P9nP96 + Hn+cngs/98NvCvomyd8fZvPXmQ44M4u/vm/n99ON/HZK8FUbvx1q57fPmzn3XiPnXqzj3GPVnL29iCM7 + 4vl0PJQPlgTySp8nj3fouafJhRtrRNZEDreW2rKq0FwlgBeKkp8fLU5n+hSurLflkcX+fLIzg1/urYeH + G/jrvjLO35bJD1eE8P0WT86s1XJmuT1nh205u9iC7+ab8e18JRvYnh+GnDmzxIXTImPfDDtyctSe4+M2 + HF1pycnN1nx/lTM/36Tn/P3yPp4KkHkayJ+vRXDulRjOPJPMiYey+eiGXB5bky76KJHR0hjm5abQlV9E + TWYJ+WnFZKTlkZyaRWJqGvGpKaSkpZKbn0dLaytr1q3lgYce5JXXXuORxx7lhptuZMeunWzavIktW7aw + efNmFds2b2Hblk1s27iBrYIt69exde1ali0eFEerSf0nc3F6CjVFeTRIcFhTnE9DaRENZcV0NNSxpH8e + 29etY+fGTXLdBjav26BmFd9155088MBD3Lj3Frn/LlYsXy1B5RJ6untoba6nrrZULTXVWFeqliltra+g + uaaKppoKGquraaispKG6gnpBbXW5iuoagdJWV1JVVTGJygoqK8upqihTUVEmraCiRNriMioLiqnMLaK6 + oIjG0mJmVZXQXVdCX3MpCzsk0J1dwWJxKgdle6izgpGeGsbmNrK0q5rexkJmVebQKo6kUt6muaqIJrm+ + vrKUuirpkzy/uqpSRZX0ubq6lgpBeZWyFnADpdWNgibKqpspr22hqraZipomFeXyWZmcp6C0Ss4TFMs1 + RRX1KhTC+OK2UsZZQWmF3FNQVinnS6sev0Auq9nFJTXkCQqKBRL8K8grUn5AUH5cqKG8Qt6nPLeyoo7y + suq/UVkqUFpBRWklRfmFatb1JHIozMuWgC+d4twMCqUtyhPky35+BmW5yTTlydwsimZNdTx76uN4rD2G + D+fEcaw3im+6Ajjd4cnpFi1fKeRvjR2HFdTZc6DOji/Ern4uOm/fLAf2z3Hh0AJ3jgz78eWoH/uWevPR + YneBGx8vcufzJaKf5NjBEW8OC5T1fA+P+nJItg8MGdi/UMdnytr2/Ro+6nfmvT5H3pnnwDvznXl3sY4P + R735bEUQ+9eG8fnqUEEIX6wP58SOOA5vCuPjUS/eW6jhsyEtx0UXfjfhy5kJpdyml5p1dWbMje9GdHw7 + rOWbpcq6jK7q9pllbnwv+EHs9I8rvPh5pZ8gUBAk+6GcWh4h30fGZGkiryxJ5c658SzL01LpO5UsnRGF + EmCU+VlSE2xHU5SG7mRPqoNtydBNIdHViETDTFIDbMhPcBe5DyQsyBVXFwscnBTyxhobRyssbE2xtjNT + YWVrjqVSGtraXD53IC4xmoaWOlpnt6hrARu89SoBfJEEVghgJ+3k+r/Kmr9eAR7/IoANclwpJStBk49O + zQpOVkh/kaHZPa1qOejWtmqGlioE8CJmdzeqGf6tzRXUVOaTkRJNTGQg0QpigolNjCQqKZrw5Cgi0mPV + NYCjshOJyxf9VZJFhlyTVpH/NwE8SfpmEV+YqZLACYWy/S/y9yIBHF08SQKr2cAlecSW5v9NACeXyf1K + c0grEf1YnkhrZzazOpJobgqltcGHjiZvelp8BJ7Mn+2lEsBLF3iyfIk/K0eCJXD1okN849p8c2olSGir + sGXBLAMjfX4sW+AvgayvwIfxRV4S3Hqxfqk/m0aD2DgcyNpBH9YslGOLxQYO+7N9WTA75LO1C8Rn6HBS + CeD+Zhu5l5ZVS93ZMO7B9rX+bF0dxKZloXKvMNYsiWbV4liWDyQwsiCNob5c5nXlS7/zqSnPIiEhBF8/ + d3x8PIiMCqeyvFQlgJsaRReVFIjMZlCSl0lnSw3LBuexcXyI9WMLWSMB8crFPawY6FQJ4IWzqpkjAXJ7 + WRbNxRk0lWTSWJxFrYx5WVYyWfFRJIQFEB7oQ5CPO94GFzyULGCtC246HYYLcHLS4GDvpGb/RkREUCF6 + ef6CeXR0thITHS7naPDz9VQJ4Pa2Jlpb6tVS0AE+nioBXFdRwYqREQYXzKesuIiw4GAMej0uzpMZxW7u + bri4uuLm5kZISAhFRQV0dXUya1YbGelp+Mk4BAX4yHYyba2NLOibQ3pSPF7uyg9VIdRWFDPQO1vGsJ38 + 7BT8vQ14u7vi46HD30tPXGQQeRnxKgHcJfP4HwK4Wd53238QwMqav38TwAJle+uyXrYun8u28XnyDucy + T+xKRoI/7i5m2FtOxdXeFI2dMQ7W07C1moaTgzkuIoMKNM7WAqVVSvtNEsAX4exih5McV+DoZK1C2VbI + XVeDA3p3J/QKAezprLYKdO6OuF4kgP9VNlqBsu6wraPyJxEz2bfERSGA3exUKNsX4Sr7/8bFNYeVbOOL + 6w67+2j+hqe3Bg8vOSb9UAhpvV4hf/9FAMs9FAI4wF9DXJQ3hdmxdLeJDe5voae9gqzEIKKDdcRHuJMU + 7U1ClK/MC3cC/RQC2En9MdTfzwU/P2f8/B0FkwRwVsokAbyyJ58rh2u4bUUr961p4/5VzTy4slFQy2Mr + q3lmZQnPjufyzEgSTw2ES1zkz4tzfHhzrg8fDfhzZFk436yM5My6GH5eH8O3Y34clPj3kzZL9rVbcXi2 + PV91O3Giw4FvZjuLjZP4okvHV116Tsz24IjokU8qXHk5zZxHQqdwu4cR9wcb8WzqDN4rs+HrOWJPFvhy + dsiHX8Qm/TruxblVXvy+QeKWLf78ITHPufU+FwhgV44POnFssSNfLdYIXFQi+Julbpxe5sOJpT4cGvTl + c7nfRz2+vN/mxdvV7rxaoOf5NA3PSaz9fKI7T8W6cX+4KzcF2nClhymXeZtyZZA1V0oMvifWhesTDNwU + LzFwjIE7wsVHDtXyQIiORyP0PBKl5+5ILTeIbdolWBerY1msgfkxWpUA7kkPoC8vioWFyQyVZjMifuKy + qipWNDSxblYXazvmMNGmrL/WQLP4YflJSaTHxZAYE6WWZY8TJF4ggf/GhVLQCsGbFqqQwJNID4smJzpB + JYHTw2JICo5QCeAo3xCi/UOJCZD7BYWRERVDXkICFZnp4sfVMtTTycI5s8WnbWFWyyy6u+bRPquXYvGh + 4pNz8PAWHePhR3pOIavWbeapZ1/myyNfcezkdxw89jWfHjzKK+9+yMNPP88Djz/NQ088y7Mvv8EzL73O + 7utuYc68QZIzCtQS0G5eIeravwoJqpC+F8ngyf0YlfhVykIr8LmQ5XuRAPb1nSSBldbTKxSDWyA47OQ3 + AAD/9ElEQVTaf5G/CpxdvHFw9hBbr8PC2kVsuJvY7SCyCsqZWLuFJ55/jcNff8/x737k0y9P8P7nX/LS + Wx9I31/kgSee43H5bgqBvfe2u5k/OEJSZi6+Mo7egWFi8/9zDWCVBP6b6J3ExbV9L+LfBPDf31NwkQAO + CJR7yjsJDA69QAAHExYVRGxyIEkZQWTkhJCeHSxtAKmZ/uIjiMyn+BGT4IOPvxPKeqEOzpMloNUM4AsE + sKXVdJUE/g8CWKD4QOo6wBqlMoIjoeH+ZGQmUdNQQWd3q7z3JprEFioEcFVtOTV1im9cKb5yMWlZ2dKH + LGlzKKmolvPnMjI6zujYBMMjyxgaHKazo1swm4mJldx++528//777N+/X8Vnn33GgQNf8Pm+Tzl4cB+n + Tx7lp6NfsP/xB7hncIBtCUlc6uHDrfL+7rf4nwngt9Zv5Ke33uDcV0f4ct/HvP7mq7zyxmsqXn/rTT7/ + /HMOHz7M5599ymsvvyx4iQOff8LZ09/x5/nfJgne337mr3M/qUCF7P/2K39dIIDVjOA/f+aP82c5d/Y4 + v5z8jJ+/eINvXn2QT2/Zyf2L29mSHcoSH2tGPc1Y6WvJan9r1gXYsjHQnu2hGi4TvXBpuAs7QpzYHuTA + jlAntoU4szXQjs1eVmzWmbDJZSZbXYzZrjdnu4cdW/1d2RrmwRbR6Wuj/FkR6cdwqA+DwT4sCvZkYaA7 + 8/10zPXS0CN2q0vsVregS29Dl5s13R5WzBMMediw0s2WLXoHrtY7cZdByxMGN17x8OIdb9GD/goJ7M9r + 4h+8J3HxwdpqfhxcxPk1KznU1cGreVk8Hx/NSyEBvCu+yIfe7rwv/sc7fr687R/CW4ExvBmUxEuhKTwa + nsI9cRnckpHH5XkFLJf4qCsni2q5R2lONlXZhdTklMh+KRWC0sJSibfKKSqpUJFfUkpecQmFJcUUSkxa + pJC8JRKT/W9QqMRuF0jefxPAF/eVzxUUF1ZTUiBQ1gEWKGSwen5hDblFNWRLzKcgq6iWrAvk7yQBXKdC + IYDz86vJz5O+FpaJr1gqMXQJLY2VLFncy8SyBXR1VBEb44e7Ul1E/Av/AANhkV7EJ4YIggkKdRcdZSu6 + SuRMtmNj/UlODiVBPouO9pFjbgKDbHuTmOgvMYAXQUF6PJQ/kYkvoNVZoDeYyvXmBIfakpDseqEEdDhV + 9eKHFbsTGWuNu9cMnMR/cnCUeEUlgB2wdZgsA638iXWSBFa2FUJ4kgC20Ug85CxxkUDJ/LV1nImDgwku + DmYYHC3wE59KyeKN0NgRK/FPqrsL2eL/5fm6UeArsZaPnhwvLdkS+2QYHMmU+CjTU0OWl6tAS56fnmxf + HZmynenpQrp8liJjFCe+TrijGYG20wmwm0aCj6PYKwPFSX6UpgZSkuJPUVIAhSkB5CcqBLC7+NWuxAQ6 + TRLAfo5EBSploCfXAQ64QAC7uYnPJX6ep/hUHtIXN+mTm+y76RwxSP8NWms8DJZ4e1rg62NOkL8xMeHm + FKQ60pDvypxKDxbUetBfKnFHvhULJZZZWmDOqhIrNlU6sL1By/YWkc0Wb1bVejNU4sacAgMVWa6kJtgR + HyVjFKcjN9Wf/MxQCrLDyc4MIj7elbhopSqnKdkRM6hPsKAvw5HlhQY2lXmxrcyTrUVubMxzZXWmM8uT + bRhOtGQk2YrhVGuGM+0ZzrZlLNeOZblWLMuYwbLUS1iWYsSotKOp01maYsxQsimDyeYsTpL2AoYSBUqr + ksBmKpalWTGRYcvaXAfW5zmzRrBM9hfFGzM33IiuICO6QyYJ4P7YmcxPNGYg0YRFiTP/JoCHY2awPGam + iol4M1anWLEm3Yb12Q6szbBjRYoly+LlmXLeqNxDWTNYRawxy+NMBGaMJ5gzHmfOynhLVsVZsibBitWy + vTLWnBXRJqL7ZrIucgY7o43ZLfvXyv1uSzXn/ixLns6z4Y1ie94vsuPjAls+zbflQIkjX5ZpOFSp5Yty + LfvKXfi42ImXZWyeVtYpjTLiUcFTiUa8mGbEq1lGvF1oxPslU8Qfnc7npdP5ong6R4pncKLMlG8rLPih + zo6zjfZ832DDqTpLvqo05WjZDA6XXML+AiP25RtxsGQqhyssOVZn4KvOGE4MlrFvooV3Ns3jpUtHefDy + ddy8Yz17Nq1h55oVjC9eTJ/Yx6bKOmpF//W0tLF84UJ2rV3Dnq2buXLTWi7fsFrFZRtXc+mGFSp2qZgQ + LGfHxmWCUXZsGmX7xmE2rRtizcp+Vo31SmzYLTGxYPFsNi+Zwx3bV/LUVVt57ZpLeee6K3nx0s3cPDLA + +o56FpRns6Aih7W9rewa6WdhYwnJYoPcrC5BZ2GEu70ZHhJDKWt/K2t6e0iM5e9mT6DYqmCxM6EiS+EX + CWAfJQPYhvQgR5UAzgyyJ9HLlHhvY1L8zMgJtqIo0oHSKEfKIhwolv3iIFOqI8xpSrChPdVeoJR8tpF9 + S/WYkv3bnGhPW7I9s0U2unMc6cqyZnaGueybMifHjAVFtiwp17C8xp3VTX6sbQpkotqLoWJXetNsqAm+ + hGKF/PUyIl2BvxFpAUakBF1CYsB0kvxnkuRnTqqfBWn+lmRKDJAVZEtWmCDUihyVALZQCWCFpF5QqGWo + SMvSQmeG80U2c6wYFblcJf3YXPYvArjIld0FGq7KcWJ3thNXihxfnuXI7lxnLs/XsFVkZU26FSMiU0vj + p4psGLFKcFWuGbcWWvBAqSXPFVvwvnzHLzLN2ZduOoksCz6T/Q/TTHg3eTpvJE7ntYRpvJE8g9cuInUm + r6cZTyJlOm/L/ruCD5Jn8mnKDJVMPqas+5st8zrLlpMZVhyTY4eSZG4nK2WfzfhKhYlaFvp4linfFFtz + qsyWrytsOFFpzTHBwXJLPiyUuC1vGh/mTuPTPJGdCjs1Y/eHahfOVGr4rtKJ72RcTpbYczTfkgOZM9mX + No3P06byWco0vkg3Yb8854tMMw7lWHJK9O+3Fc6cVq915PsajcBJYM93VfJ8GReFAD6SP4OPk414V8bs + vTgjPhF9qBDAxwqn8VXpTDVD/+vymZwqnyZQ1gSeJtfPEBjLfU35rtycb0rN+Fru83X+NH4omTFJAIus + f9fpzs+jabCzEaM2URr90uHVxXbsafDgib5YXuxP4Km2IO4tdeSeYjNeanXg0BJvzq6L4ueNyZxckchH + Q3E80urHpZm2otwsRFFaMhhnwTxRdn1idAYK3Bgq92V+sadaX7w4dCblkVY0pxmoT9ZTHqchP9yOTEFW + tAM5sc4UJLiquEgAh7mbEKibQYiHBZG+VkTL5I0PtyEjzp6iDFcaisRhrA9gqMGHpXV6lisEbZMdu+e6 + cstiN25b5Mp1XZZc12nF3k47buiwVdubuh24ZY4Dd/S5cs8CPXcu0HFznzPXdssE7nLm0g5nNsl9Nohy + XFNrx9o6e4Ej62sd2SDP2NqsZ2e7B7s6PNne6saWVgPb2z3Z1uHFJjm2ulXPhBjUUXmxY1WOIrBiiBr1 + 0jeDuj1YKGMkhq5HDNxA1gxWyaTa2eTKnlYdd3Z58sQ8b14aEGd20J1Pht04sNyd4xt8+f7ScE5fEcVX + u0LYt9GTd1fpeGXEhScHHHmg25p7ZtlwX6eG+zsN3Nuu564WV+5sduaBDg1PKwTwfAPvLHLjkyV69o9q + ObrSha/X2fPtVjtOX+7EmWs0nL7Oha+kPXy1A59facc7l1r9TQA/s8GCJ9ZY8vgKax4aseT+JUoGsMyR + hfbcPs+WW3utubPPlrvmOXBXrz339Dpyl4z3bS3W3Nws497ozI2NWq6qEsVR585tc6N5ekMpL+6s5skN + Odw1HMzD4348u8qP19b78uFGP45u8OHUBm9Ob/Hlh61e/LBNz9ldrvxypSvnrnXlt70afrtNA/fp4DF3 + eEbwguBlD/542Z3fntXzw8NOfHOnA6ducuTkHnuObLdk/1pT9k+Yyfia8cGAGW/2GPNqhymvyVx5a44z + 7/fp+WC+J6/1uakE8J0t9lzbYMsVjfL+G11YWevKWJ2O4SYPBpuVeais+ytKXN53d6W0lS4XoFXRWzlJ + AvfXTJLACxsUODG/wVFgz4ImB4HdJAHcYsfiJmuGmo1ZOXsKVw+b8ph854/vCuL08/GceyOOv96LgQ8i + +PNNH359TsvPjzjx653O/H6tRi1N/OtKOxFywRJ7fh925fdRPefHPKR149ywVsXvozp+W6bj7IiO44td + +bzfhVe7NDzS4sDNYvQvLzRjoyjolaKUR1JNWZxirpZxmSeGrDPejqYYa6pj7KhLcqRFWchenC6FAL50 + XhDXDYVx82g4Vy7wYk2rHUurTRits2BluwOrZtmzqtWate2W3DDmxgvXJ3Pw2Rp+/LSLP471cf5kL399 + Pxd+6oOfpT07G75t549TLYImzn/dyM/HJag7UsnZg3Wc/ayeH9+v4ec35B5PlfPj/SV8tzeLgxsi+Gip + H+8PePNajxvPzNLxYKOGO2qduaHKicvK7VlXLAYuZzpDqUbiVBqxtsCYvbP0PLsshoO7Szh3fxt/PdTM + +bsr+GVvJt9tD+abdQpBpOX7UWcZOyd+GrHnx2EHzo7K9gp5F6vd+GmtGz+sd+P7DQa+3aTjm20unNoh + in6PCz/f5sbv9/tw/jE//lBKlr8Ywh+vhvPri9H88HQyXz+QzafX5fLk6gz2zElieUk087OT6M7Npzaj + UJz6AjJTc0lOzZwkgFOSSc/MoKKqikWDi7nqmj08/eyzvPHmGzz59FPceMvNbNuxnYmVKxgbG2PZsmVM + TEywYe06NqxZzcTYKGNLlzC+dCnjQ0von91FY0UFJdmZ5CUnUJmfTX15MXWlhbRWlQsq6G5uYnThAnZv + 3871V+5mz2VXcNn2HVxx6WXcvPdG7r3nPm699U4u23UVqyfWM7RwhN45c1Vyor6unLraEprqymipr6Ct + oVJQraK9oU7FrKZa2pon0SpoaZFW0NbSoJLIbYLWpjqaG2tpbqihub6GptpKmmsqaampYVZ9A511jXTV + NtBT38j81iYGO5tZ2tXIst4mVg20sHZRC2sWNrNuoJn1C1vYMNjOxqFO1i1qY6y3nsWzq1nQUa2SAPPE + oZzX0UjvrCZ6Olro7mhjTke7BMmzmD27UzCbjtndzOqcQ1tnL62z+/4D7XJMPd7Ro6JlVreK5lk9Khrb + 59DQ1q2ivrXr7+2m1kk0t81R0dIu1wou7v/7GgWNLf+gvnk2jU2zaW6RfnX00dkl6JD+tXaqaG3poL25 + Q8ZyloqWxlbqamqpra5RUVddRb2MZ311qbRl1Arq6kpV1CvvrraIuTUZjNQms7kugevrYniyJZLPZkdz + siuM7ztEZ7eIDDS4cLLGgSPiXB2ssOZAlQ37amz4vNaGj0Wnftxmx6did/cvcFPJ3wOCT5d68cGgGx8O + ufPREk8+G/Zm34gPB8Z8+HKZL4fHAyYx4cfBUU8ODHvw2WIdnyx05cOFLrw3oOFtwVsDLrw5qOfdMS8+ + WRnM5+vD+WxtmIoDGyI5vCWag+tD+GDEQ853kmudOTLixqnlnpye8OTMuEAheMfd+V505Wmxm9+Nuqqt + AuWYgjPLxS5NeIj8e/HLCl9+mfDn5xWiK5aFcWQ4ik+XxPHa4kRunRUiutSGKnHW87RGVPoY0xRiTUeM + E3NT9CzO9WVWtCMl3jPI85xOjo8JeSG2lCa4U5zqR4SfE1pnE5wczVBKxzo4W2Nla6rivwlgBxdHEpJj + aW5voL27jezCLNx93FTi998EsFLm+SLJqxDAF6GsB6zzlIDpwnHfYG9iEsLUtX8b20RW1QzgKpUAHl8x + yNx57TQ2yNyQeVFalEFiXCgRIT5EhvkRFRlAdHw4kYlRRCZHqwRwVGYC0dmJxOelkFaaTWZVARmVhaSU + im67QAArxG9cQcYkAVzwn9m/ccU5Kvn7DwEsKFGygPP+gwBW7pdemq4SwI1t6SoB3NYSTkdLILNbfOlp + 82PeLF81A3hhjwRX/Z6MKqTukgBGF/izQBzm2XXOzKpxpLdJ/Lc57ozM82KZ2JXxRZ5MLPZiYtCDFUOe + rB/1Z8OwH+uX+rJuaDL7d+MSX7aOBrJrIowdY0GiazwZlvmulIBe3OHE+IA7a0bk2uUebF7pwyaZ0+uH + g1i9OISJhWEMzwtnQORpvgTg8zszpL/ZouOyKC8S3R8XjH+AJ/7+PrIdS3VlBbPaWmlqqFdLIBfkZFCU + m0FbYxVLFnSzbtki1g7PV8nfiYEuJhZ0MNLbrK7/O6d2kgBuLc2kpSyb1vIcGuW9VOakkpMYQ1JEENFB + /oQFeKtZwF56JRNBi7vB8Dd0SslmFx3eXjJXYmOpqa0Wm7SQOT2dxCdEY9BrVJI2MyNFdFCjqs+VNYD9 + vT2IiQgVG9DAerFTSxcvoqK0ROZOOF6ennKdkvnghZe3NwY3N3U7KiqSSrFF8/r76OnpVtcCVu4dHOhL + Tna6Wgp7ft8c0i4QwHFRYWJvqlm6qJ9F/T2UF+cSHuJHsL8XIYE+hAb5yJwNIz8rkYbKvP8igFtUAnjF + wjbWDM2S9zNbJXuV8s8XS0D/TQBfIIE3Le9jcG4DpdnRhCplkp3NcXexQq8xx0XNBJ6Ji5MVWq2dCleX + SbL3fyKAXVztUbKAJzOBJ4lgFa7WaHRyvUICXyB+J4lgjdoqx5XPJ0ng/zMBfBEapST0/wYKQXyRAP5v + ElhpJ8lf+cxd+uNmL+9NztfZyvezQifwkPt7uNkS6K8hPtqH4tx45rRXqgRwd0spGfEBRAVqiQtzIyHS + k9gIL9Ehhr9/CPWT5yjbFwlg/0A7YqJcyEl1p7k0lLHZmexcXM7esXruWF7PPRP13D9eywPLy3nk/8fa + X4BXdb392ig1JO6+4u7u7u5uECEkJEES4gkhwd0pbqVQSqm7O5RCSymFFqi3UFxLqd7nmSu0/7773e/+ + vnPOvnL9rjHXXNPnGI/kXmOMmVm8OpjMGzNjeKs3hLdn+HCg1YUPmx35uMWek9Od+bbHjfOzvLgu/uG2 + +IfLM2VdqymnJ+rxzSQDfpSc5txkU85LrnipyUxkwcVmFRdabKR04sd6J76QvOADSfZfCbmPJzxH5o86 + kKrBSckhzzfac1nyiqszxFf0OHBT4t+fh2y4M9+ePxe78PsSN+4skFx72J6L4mfOdZlzttNMDX5HegGL + 7xFfdbnfie86HDgtNugzyRc/Ftt1uMqBDwodeDfNmteizHkpzFzObc3T/lbs8TBhi7Muq201WO6oySrJ + pVf7G7M21IKNEXbsiHRgd7gDjwbasd/Xhid9JFb2Fcm+j/pZsNXfnJWBZiwItWZQfFFbmA1NYbZMEp/U + lOzP1LRwZmQl0C0xYp/EjoOl5cydUMfsCROZOb6OqRKLjc/KISM6Wg2AI4MCCPbxUgPgcB8FAv8LAIvC + vf3VgDf6XxD4fwLACvxVFOjqTai7DzF+gSQHh5AbG02r2Jfu5gZ6p7aI/ZtGT0cPc2cvYvacJUzvGCCv + qJqwyETxazGUSzy0cetDHP74M85fus75yzf45uxFznx3jqOnvuLNQ0d44fW3efrF19QQ9e2DR9j35AvM + mruUrPwyXL2DsHf2VQNgBYC6e4WoYagCgf/WfwPAsq3S21eRk5PfP6WdvTL3r6u0e2dpOy5YW7ujEhmb + 2mNgZKPu/aujb4mpSmxXoNgriQHXbNzBB0dPcu7qz2oA/MW35/jsy+/58NMveOWdgzz54uu88NrbvPbO + AfU9LFn1IPllVfiHRuHs6aeGwP83APC/obebuxzDw0/dC1gBwN5+3vgHeRES6UV4jIfkL0pvX1eRM6GR + 0taDbAkMdcQnwBY7R7GJ1joS52hgpAzfajwOPYOx/0U6+uP+i5Q4SD0PsMRFljam+AV4qAFwfnG2xM1l + avhbUpZHbkEWWbnp6h/NRsfGyznD5JyBoiB8A0OIjk+iUHKH1qnttM/oZsaMHqZP66CqUolxquRzJxs2 + bOLVV1/l8OHDagD8ww8/cOnyRS5ducCNm1f5/fY1bnx7ihPP7mfv9FaWyjnW2rvwiLk9z+j+1yGgN94d + AvrD+Qu5deQwXL3IjSvn+fHs93x37ke+O/sjP547y5WrV7l8+TJfnT7FO2++zkvPPcWh997iuzNfcOPy + T9y+9hO/XPmJO6JfRX9evSR59HX49RfRSO/f3/5U9DO//XGdn699z82zJ7h26iDnDz7DiUfX8lRPHYtT + /eh0l7zdQZm7V5OZTloMueoxV4HACvQNtGKFvyVLPIyZ76rPbBddhkRzZXmhow7LbDRZYTGO1ebjWGOh + xXKVLkvENyz1smVJgBOz/RwZ9HOiX2LDHh9Xurwk7vJ0oMPDnnaJO6fZm9EifqvF0oBmlT4tdvq0Ougx + 3V6PHjs5j/ii5bJ+i8qE/dYWvGpjy0F7B446OfOJqysfubtywMud94MD+EzioOszpsHyRWJvuzhZVsB7 + 0SG85a4AYxs+c7TmqMTFH7o6c1Dsx3se8p13JC/7xvBkQAx7whPZnpjOirRMetMzqUtKpjA5mWzJxwuS + cihKzqcotYD8NGUanbsg965Sc/JIycolPTtHlPfP+r/1/w8AVittBP7+PW/w3wA4ObvkLgQu/T8C4NSU + XPUcwAoALirIkTywiJ7OFoZnSczWUEJYmIfEX2Y4OFri6eVAYIi7tJdAtXz9XcQPW+HpYUtIsDsxMQEk + xAVLGSj7KRDYhWBluPdIb6KjvQkJccHLy+a/AWBbOw2xizoEh5nKM3KloNSH/BJ3ktKVURn0JZ4Y818B + sKEJBsZKL2ADDE0M7wJgRSMAWA2BzTXRNxVboEjshvIDElPjsaiMNXA008VD4ig/qVuhlsZESx1Ktrci + 08WGHDc78tzsyXW1I1vynkxHC9KlLqZLPJXuZEGGs2wnynazJtNNRbqLlay3JE2UJNvGScwTbqlLoNgr + X+MHiBQbluRjSVaYI7li6xRlR7mTFe1OeqQrcYE2hHqbqac59HMxxM9ZGQbaTGJsC3zdrPBwtlD/8E2J + o9RDPEs5An8VGUnMbYSttBNba10c7LRxcdHB012bQF9tYsINyE4wpTzNjEk5VrTkWdCcIW0pVZMZ6Zr0 + ZWoxL0+XpUVGrCg1Z3mlNYsrbZldZEdPjjVTsuwoy3AgOc6S8CBj8dkWJIY7kiJ2OzlOmcZFbLbEDxFh + xiRHGlAQpSexgAUDWQ4sL/Zkfak3G4rcWZvtKG3HhiXJViyMM2UoUp/BKH0GYg3oTTKmN8WI/nQjZqbr + 0Z84hv64++iPuZfe2PvpiR1LZ8w4OqO1aY/WoS1SynBlzl5tkVJq0hE5lu5oTbojNWQ/XQbj9JmfbMyi + NHMWpFkwmGDIjPBxagA80WOUuhewAoCnhoxlWviI/gbAyhzACtQdlO8UDYdrMTdWjhdvyJIUMxYlGqs/ + D0VoqbdTIPC/1R88hoEQsZehYjelnBWipdbsUG01/FU0K1iT4SBN5geMZUXAGB4UbZFz7ZF7eDJBi1eS + 9TiQbsDhVD31MM/HknQ4mWbI6WxTvi604st8FafzrTiRbcaB2HG8ETaKl0NG8UroKN6MHsV7CaM4mDKK + I5n38Gne/ZzMH82p3NF8mT2a73PGci5Pk8uFulwrM+R6hbEaCp0r1uL7vLF8nX0/X2XdwykFAGeO4su8 + B/i2RL4f78j5yeF835XLiaFqPlzcwlure3l67Tx2r1rItmUL2LBkAcuGhxkUf9kzdYZac3sGWDVvATvW + rGH3hgfZ9eBqHlq7kofWjWjng8v/paXsXL9YrR3rF7J9w0K2Pjifjevm8uCaWTy4YiYbVgyydcUsti4d + 5KFls3hx22ree3gjRx7eysc7t/D2uhXsHepj3YwW5jeOZ2ZtCUvbJrF+sJ3eOrGN4ns8xDbY6d2PvZEm + zhZGOJqbYGNigJ25IS7Svjwkv/F2MMDHQQdf+3H4OWgQ5KhFmJs+sV4jADjeXdq5rA+xH0O481jiPbRI + 9dEny9+IbF9DNQDO9daiNEiXCdHG1MebUhdnLMuGatBaHamUhvJZ1seaqgFwg7SFiQm6sp2GbD+OSUka + TJX2OiNX2kiRillljswsdqQjy4KWRH1qwsaR736P2J9RJNiPIkYU6yql0gP4LgCOcB1NhIsGUc5aRLto + E+euq+4NrAwLHeelLbZJh6wAHYpCdOV69JiSakF7ugUdaSZ0pYj/T9KlN1mX4QwDFueYsUbq3jqxJRuy + rNiUbsnmVHM2pUgOkWzOetE6aW+r0ixZKPcyGKer/uHGjIgH6Ay/h5miVUnj2Jqmwd4sLV7M1OZwsiaf + J2pyMkHyI9HnUt9PJGlzVOndGzP6H/Cr9PxVwO/f+iBurFoHo+/nQwUCRz3AUaWnrZSnxV58l6DN2UQ9 + fkrQ42ycNt/GjOXLiPv5JkLagHx/NkZjRPKcz8k1XMrS52LOXQCcr8ePBXp8na/DGWkrp3LG8WWuBt/k + aPJTngGX8oy4lm/CVSkVXckxln2NOJeuy7eJ4/gqbjRfxY9R61u5p2/l/n5I0VV/fzHLiEu5sm++qciY + a4WmIqU0lDapz/kcbX5QA+AH+DxmFMekbR+PGKXuAazMAXw+dxyXCrVEGiMqUObwVvTAXclyvtxPnjbn + s+X+Uh/4LwD4Sqkel+psJfeMgRXljCryGUVN6L20J+oyP1vFjmo/Hp0QxEP5bqyLM2KDPKRn8o34uMme + swO+/LIsgUtzYzjdH8Ebk73YKkZoQdQ4+oNGMz1wNBMViXFvybChvdCVaXkuVEoDyPHXoDjUgPpkR2oS + HSmPsVVD4PQgM0nWTCWxMyE1xIxUWZckTiXSS5yh3Tg8rcfgY6epBsAhnnpEBRqKszElL8ma8TmOzKj0 + pK/KlZkV4rgqzFlYacjGyebsabfh0RkqHppsyI4GfbbXSLA4XoetE3TVIHi3JPCPtVixv9WaR5st2TnJ + mC11RmysM+PBGjOWVxmzpNyIeUUGLCg1GoG/xSYsLjFnWbkVa8Qgrqt1Yo0CfifYsmy8vXoY6PnK8M9V + VvSXmtFdaER3gTi2ElPmiHOdV2XDrFJLurINaJWG0Bh7H9PE4Q3m6rOq0ortdfbsFb3Y5MjbrQ4cnmbL + sTZrTipDUw6LAV7qw7nlyj+uXTk6y5r3+yx4s9OMF6cas79Blz3Vujwy3oS91ZbsqbTk4XIz9lSY8kSN + Oa9MVvH+dFs+6Xbgi347vh605excFReXSOVbZciNjWbc3G7J1R0WnN1syjcbDflivf4/APjtJdq8sVCX + 1+aLZhvw4oAez/ca8XyPOU93mPH4NOMR8DvFmH3NxuyZKNdSp8+eCXrsKteVazFil7yfXZU2bCq0ZFOJ + HY9MDpTjZfPu6mI1AN7f7ckzfc68NujE+3Md+WS+E9/Oc+Snufacn2fHpfnWXJhvxsVFxlxdbsL1tcbc + 3GTCrZ3G/LrPnN+fseLPV1T8+YY1f71rzR+i30V3Xldx8zkLLj9mysVdJpyV+/p6qSZfzhGDM6DFiU4t + Pm7V4MMGTZEeRyeb8dk0SQzanPig1YZXGizUAHhLmT5rpC4skvc5UxpuT5EFXeW2/0cA3JBvqVZTvgVN + Bea0FJrRWmTKlGJjkREtJZLklEh9KDNgijjitkp9NQTurNKne4IG8ybfy7ZZ43htozj+5/z4+YMI/vg4 + FD4LEvnw18dO3HnXitsvmXDncRN+22rKnaUG/Dygw80O0VQ9bsu7+aXNnDvtlvw81YwbrUYjmiIBwDQx + aFMN+b7ZgM+bjDhUb8SrVYY8XqzHQ3n6rBfDuDLDkEUpBsxOkKBNgqtOcWJTwwypl+C8JEQUYURVtIE4 + LAXsurB2qg/buwLY3RfMeqWXlAQaU9LvoznlPqbnaNAuRqw9+wFmSLCxpF6Xpxd5cuzxNC4erOSPM5P5 + 89tG/vxpElxpFEl5sZY/z1bx23dl3PmuiNvfFnDlTBaXTmVw+UQOlz/J4+qHedx8T8oXMri6L4ULm2I4 + NeTBUeVHD1L3DzaoeKdOxctVljxVZsEjxeZslne4JNeAoUwNBpJGMzNxNCslGH681YsPFyRxflclvz8r + 1/JMDT/vkWNvjOX8Eh8uznHh8kx7rg/YcGtQxe1hK+7MteHOQnt+W+7Er6td+WWdKz9vdOHWJheub3Hm + +g4Hrj8khvcxB+4868wfr7jz26uiNzz54x0/fnvXn59fD+TGKzGcfzKZzzen8OpQApsnRjCYEcCU+DAa + EpMojU8lPSaVhNgkomLiiIqLJSImmqS0VGom1rNo2VKeeu5ZPjh8mMNHjvD2u+/w6GP7WCLrFThcP3Ei + jY2NtLe3M2vmTDX4bW5soKG2himTJjF5Qi3VRcXkp8p54pR//IeqAXB1UT7VxfnUlhZRW1LE5JrxDHbO + 4KGNG3nqkb3s3/0I2zZuVgPgzZs28dhj+9m370k2b9zF/DnL6Z4xk9bJU6mrmUBFWbEaIFap4W8eNeVy + 3IpC6isLaagupWF8OZNqyuSaRlRfV8ZEUUN9BY0TK0XVNKlVxaR6Ua2iCiZNKGPS+FKaa6ppb2ige3Iz + A5NbGGptZX77VJZ0TWNpdwsr+5p5cGgKG+e0smF2M5uGm9mslLOniKayYaiVVQPNLO5tZH53I/O6JzNH + 9pvTPYWhrqkM9bQxq7ed4d4OBvu6GOzvZebATAYGZtE/c5iegWG6B+bQqah/Nh19w3T1zlKro2dQrRnd + A2q1dw+qNb1rJtM6B9Sa2tH/z3Jbx4jaO2eqNaNL9v2X2mRfRdN7Zkop2/xLbbL/DNm3U7brl2sZmDlX + rnOYXtlWUXdXP71dfXR39qrVJYF7+7TpI5o+TTRV1ErbtMm0tzUzXdQmgfXf6mqrZ6i5mEX1qawdH81D + ZQG8WubFqQm+XKrx5GaVIzfKVFwtMuNcriHfZklAla0jyYgkNAU6HBcdLRGJrTtab8zxKSq+6Hbmix4X + Pumw52Px4Z902vKp+KwTvU6cFN9weqYzZwZd+GrYXa1vhlz5ctCZr0Sn+uw52WXDcfGXH8+w4kOxdx+0 + W3GwQ8WHvfYcG/bg5Hx/vlgQwBcLAzgtOrPAl1OzxU5023BI/OjHU434qlvFOfGRlwbtuTpLmW/Rhmuz + bLgubf36oLV8VoDviEbWqbgxYMUt2ebnWfbcGXLkF7me27M8uNrvzY9dfpzqCOLQ9BDxy870RmhQ7jyK + XNtRVHpoMCnYgOlxEjNkODOc783UWBUVPtoUeWpR4K1DQYAxxRE2kmA7Eepigr35OKxMNbBUhnQ111OD + HF2Dsep/fioAWA2BDXQwszIjKjaCCfXV1E+uJzU7DVsXO/RM9dA11UVP9jVSwJCtCdaOVuoev/8GwPZu + ttg5W+PoZoertzPufq54+rsQGh1ATlE6VXWl1NSX0TezjeE5XbS0TlAP7Z6Xk0hKUjhBAa54e9jj5+VE + oL8HASE+BIYFEBQTQmBcGMGJEYTIdhFpUcTnJJNYmE5SYRZxeQoETiUyK1kNfUPTEtXlCABOVSs8W0o1 + 7FV6/Y7A4L8B8N89gCPzlDmAR4ByQm48qXmRlFRGMaE2gtqaQLEtPjRJPW2u82BqgztTJjqJDbSjrcWW + GVPs6JnuSO90N7paXGlvdFaD4I5GW/qmOtI/zU4SXXtmddiJbEUS20k5r9eZ+T3OzOtxYkG3Ewu7nFna + 58bKWd6sne3LypmeLOhwYmazip6JZvQ1qZgr2ywYkP1mOoyo35nZna4MTvegZ7IH0+vdaVB6K5d6UVcW + IrY4koKMcJLjgvHzc8HJWd6PmzMR4WEUFxZSO6HmLgBWevMnkJYcR0Vxjnoe4OGeKXLsFjl2AwNT6xmc + WqsGwNMmFNBUmkldfjK1+UnUFKRSW5hGdX4qxWnxpEWHqucBDvF2I8DTBW+pR672KhzsbHCwt/9H9g6O + 2No74u7ppZ6WoKK6gu6+blqnTiZG6qKDozWesn9KSrzY9fHU11aTmhSHh6sTYUH+Ysdr1CNR9HZ2yPVn + ERwQhKuLM/b2dri4uuLq6oa9o5MsuxESGkJZRanYxzamTGslMytd1jvh7e1BZmYaLZObmDalhdjoCJzs + beX4gdRVVzJT7HZPx3RKC3MJCfYjwM9LPW9wUIAX0REBZKVGq3/c0jRe+fFPKTMaK9QAeObUuwC4o54F + PZNY2t+shr9r7g4BrQDgFTOb1QBYmQ9YAcADbfIu8sRPBzji42yOhwIx7Y1wsNLFxlJHPXSfnbXyDz5j + rK2MUMlnSzM9LJQebP+WrDdTfqwhUtr830NBKyBXPQ+wyhCV0o7vwt//CQD/Xf4NgI3Ntf4BwH9DXjMr + ZTs99bKpMk+wSCkVqecbtv0XbHaQcyrDQSvDQqt7ChlhrUBipeevsq2VPlZyrH8AsO0IAHZ3HQHAeelR + TK4rZkZLFXXlGcSFuBLkZqkeBjrUz44AHzt1TxhPt5HhEBUpvYHd3MxxczfF08uE8GAVaXGOjM/zo2N8 + FItb0tioQODOPB7tK+Txnjye7M3g2d5kXuqL4o3+EN7tD+CDHm8+aXPlU2nPxyXO/2KqnXpagXPSFq/M + cePmPE+J8xz5fpo537VIgi+x8/mp5lxoNedKqwVXp0q+NM2SK+3WXG134Fq7GxfFVnwt+eBHkuO9FTOa + F0NG8XbcAxwrMOAbiT8vTBa/Irbl0nQbbnTbcr1X/MeABT/Psea3hY78tthlBADPtuVSv5W6F/D5HmXE + CWXkCSsu94ofGnDiUp8jX06T3HCKPZ9MduRQrSPvldnxTrYtryVa8XyoMU/5G/OEjxl7vczY5mLAOntt + ltlqsthRm6XuhizzN2FZqCVrImzZHOnAQ5FO7A1z4vEgR54KtOXZABueCbZmX6CKbYGynWy7KNKe4ShH + OqScHGknub4TDQletCSHMC0thhmZKZLfZtNXWMxQpcSIlTX0V9XQVlFNXV4B2XFxxIeF/D8C4L97ACsA + +G/F+ASS9L/rAez+NwD2IczDlygffxIDg8mVuLi5spTOpolim9uYP2sWK5euZOf2R3jkkSfZuOVhdUxV + UlFHcfl4iduGeOb51zjzzVlu/Pwbl6/f5ru7vYA///ZHDn/2Ba+9c1DdA/jF199RA+CXXn+PDVt309A8 + nZDIRDy8lfl9g6QMxcsnXA1G/4a/Chj+G/wqcnQZGepZAb6KHB19RL44OHirh362tHDC1MwBcymV3sC2 + tp6YWjiqewCbmDuKHHBw81VP/aHEmc+89Canvv2JS7d+4+yVW5z+Xq5b7uXo51/x9qGjPPPyW+prVwDw + q2+/z65HH6e5rZOEtGw8/ILF5/uo5/n9PwHg/67/3wFwWLQHIeEuauCryD/EHi9fKzX8dfOyFNulDBOr + g7mlttg7ZdQTTQyN/6v0jJTpL+5K/QO4EQBsIjbTSuyql7cL4ZGBpGQkkFuYSV5BBlnZKSSLT4tNiCZA + fIK7lw/2zm7YOrpg5+QqcpNrCJWcKpPyylrq6yfTLLlL8+RpVFfVUl5ezdSp7SxfvpKHHnqIp596ioMH + D3LmzBkuX7nIzZ+v87syz+5vt7j61ecce/JRdreKPwiWfNjRjUflHT6rZ81z4yzZP9acHVoWbLR2ZXtM + IocXLubmkQ/h5hX+/O02d+7c5tavd/j5zh1+Ef3++2/cvHmd05+f4LUXn2PPzi08t38vR997m+9Pfcql + 777g8rdfcPWbU1z/5jS/fP8tf168IMe7Cb/8rO4BfOevX7iDlH9c59rlb7jynex38j3OHXqOk49v4OmZ + jSzOCqbbx5QeZz0GHLTpc9RkwEmbWe56zPEyYlGQJUtECzxNGHLWpdt+HJ12Y9XbzhetsNXhQZUuG+Xd + bbTQYZX4jqV2xixytWKBj8RN3rb0i23v83aiV2LLXk9lTmAnBuRzn5cj3RKLzrAzp138Ypu1EdPtDWmz + N6BTNGCjy3w59krxJ9stJV+3NuNVGxsOOthx1MWBT9ycOOLuzHsSZ7zu68GR1HgutrXCmqX8sWw+300c + zwGJP191s+aQsyWfOqs47GrNe+5OvOHpw8tewTzvG8ET/jHsDo5jW3QKG1OyWJyRQ5eoLjGNosR08pKz + KU4soDSxmJLkEgpTSshPLyU7s4QskTLyUlqWMp1PvhoEK/pfAfB/013A+7f+Br//qxTg+/cw0Gpl3N0+ + q4RURTmldyHw/xcAWJnqaXwJAz1TmTu7Q+KnCuLiAvDytJP26yBtxYNIif2TU6LUCguX2CnAjdAQbxLi + Q0hPi5VriiMlOYq42BBiov1l/yCSk8JITAwhIsILLy9bieUkZlDpS3ygK9JEZT0GR2dNsQtG0k6dyS3y + IqfQjfgUlaz7PwHgEQg8IiUP0vkvAFgt05HRA4yMxmBmNBo7My1cLPTwkVgrROpVtNSdRFszMiUuzZc8 + p1jqYamHI8WStxS5Sc7loiLPyVJkQa6LpWxjSaG7FQWe1mrlediQ5z4iBQqnO5mTKDFQlEqPUEtNoh30 + SRL/mx1mT160i/gkV7Kj3MiKdiM9ypnYIBVBngr0NcDbSR9vR0N8XIzxcjGVGNsCdzmeGgDb6GMpcZqV + tCOVxHPWahlgKzGaWjbaODpo4e6uK/GsPpFhxqQmmJGfbEppijF1GSZMTNenIVmDyclj6czUZFaeDouL + DVhRYsyyYhOWlJixsNSS2QVWDOSpmJHnSE2eGzlpjsRGWKoBcFywHYlisxOjXGSdPaGh5pJ3GJEeY0x5 + vAltGXbMy3djY7k/D1UGsqPUm815rqzLsGdNmi2rklUsjjdjfpQRs+KM6Jdr6003Uc832p+m9DbUoDfh + AXrj7qc7bjRdcRrMiNFihjJvcJQ20yK0mRqmyfRwLdokj54erkF7hNieSC2RJr2y3X8FwOYMJhj8NwDc + 4vfAfwPA7crcvqFj1BBXgb+zgscyJ0yL+TH6avC7PMWcZQoETjBirjIUdNg4ugLvp9P/XjoD7qcrQJk7 + eAx9QePkGJpqDQRpMFM0K1iLWUHyzGXdoJRDQdrMC9BkecA41viNZkuIBg9HabE/TpMXE3R4J1mXA0la + fBA/jiNx4ziaqMvJDGO+KlDxZaE1Z/JtOJFjxqFETd6JvJfXIiTOjLmHA/H3cCjlXo6k38uxnAc4WTiW + U4XjOCP6Om8s3+cpEEubK/Ler5Ubc6XciPOlunxXqMGX2Q9wOuMe0ShOZ97LFzn3cqZE9hlvyvlGd36c + EsmZnhyOza7mwNIWXl/dy5Or57Fn9WIeWrWU7atXsHHZMpbPXsDS2QtZtWAZ65esZNuadezdvJlHtyja + IMsPsnfL+ruS70T7tq4d0fbVPLZ9DY/uWMne7SvZvX2FaLn4uRU8+tAqnti9jmf3rOf53et56eENvLVv + Gwf27eCDh7fy/raNvLZ2BY/Nn83O4T42D3axvGMya/umsWVON7NbxlMcF0iEm7QriSeUIeBdLUxwsjDD + 1tQYWzMjnCTPcrc1wkv8jY+9Hn72mvgq/Mlei1BXA+KkLcd7mRMjy6EOGgTaPkCIwwPyeRyJHtqkeeuT + Kcrx0afAf6SHb0OiBY3JFlKaqUFwbawxNTEm1MWZMUli9cYkFZOSzJiYaEh9gi4TYsdRGz9WDYBbM3Rp + yzOmu1jFQKkDPYU2TEmTY8ZqUhl8P/meo8h0G+kBHOtwFwDLOjUA9riPcLfRakAd4aJFpCjKVZE20e5a + RCtDxHtrkxWgR0mYAqUNaE4yZZrYjLZkIzoS9ehK1LkLgA1ZnGPB6lxrHhRtylaxNVOUbsXWNGs2pqlY + L1qboWJZuoo5KSb0JYq/TtRnRoI2XXI/MxPGyHfasq8Oe/L1eS5Xjw+UeXOTNTkudV3RZ8nafCrlRwka + Uu/HcihWJPX/kLSDf6CvrDuolKIDMferIfDhyPvV8wUrQy5/Hi11PV6T75N0+UHa0vcxmpxRwHDYPXwV + dj/fKcNA/wsAn0/V4mKmnhoAX5BrUgDw2UKlTYiKdPm+UIcfpfxJPl8qMORKnj7X8wy5LtsrupZlyOVs + Qy6k63BW7kUZUlrpVfxj4jjOyr2cS9bhYrocP1Ofy1kGXM4x5Fq+MdcLjLmhqNBQrasF+lzI0eZslrS5 + NLneuFGcih3F10n38IN8vpA7huslutwo1+daqY5Im6vFGlwtGqueA1gBwBcLxog01fMH/w2AL6Q/wI3s + 0dyQ9n+1RI8rdbbc7o6B5eWMyhCDWOh/D3URWrSLw5if5cqKHE8WxtvR66PFoNdoNsfp8lq5ii/avLm9 + PI3rS1L4ejiKg21+7C1TsUReRHfgKFrlOON9RXKsSRlWTCtxpa3InQnx5hQEa1MeYUJzhhtNaW7UJjpR + FmVLjiSVaSFmJAcYkxxoTEqIOamyLtrbCF/bsWoA7GunoQbAoZ56xIWYkB5rQZE4k7oCZ7rGezE4wY3h + alv1/LyL/gHA1jw2Q8WeVlN2NRqxrUaC0UoNNlVpsaNWn72NZjw+xZr9LSpZtmBnrTFbagzZXGPG+gmm + rFQAcKkh8wr11QBYgb+LisRJFosTECf5YLUjG2tdWF/vzKoJ9iytsmVBpRWzyy0ZLDOju8iA9jw9OqSi + 94uDnf0PALaiWxr0lFRtmsTBTROH3J+ly/IyS7lGex6ZYMtzE+14s8meD5ptONKi9Giy5HS/Az8s8OLr + BZ4cn+XAgS5z3phhwsvTjXmm1Yi99TricHV5SAz6Q+Vm7CyzEOdrysMVJuyfYMaLTZa8O92GY/2OnJL9 + v5/jyPmFNlxdacrNBw25vdWMn3eOAOAfNxvz9UaDuwBYhwMrdXlnsTZvLdTlrQV6vDXPiNeGjHhlppx/ + wILnuy15pt2MJ6eb87josRY5b70eD0/QYVe1XFPZCADeXWHB7ko7Nhda/QOAX5+fw/uri3h1YTKPd3vy + dLcjr/bb8+6QBPNz7Pl6tj1nh2xFKs4NWfD9TAO+n6XDubl6nF+sy+W10gC3GnBztwm395tx5zkzfn3Z + nD/eNOf3t0XvqvjjHVt+f92Wm89acPUxMy7uMOaHNdp8vUiTr2br8OWAPidn6HKsVYejzYYcbzXni3Zb + WefEBy1/A2BDuWY9VhZJcFFgRF+eEZ0FZnRW2NBRfRcASwA1SerIpEJzJhUoEqMvwVSDlCMA2IyWAlNa + Co1pFkPSXGBAk9SvpkI9Jhfr0VKqx/SKEQjcWaVHT40Gi6fcx655Gryzw5pzb4Xw29FIOBYCn/mJPGXZ + kV8PWnH7VRN+fdKE37cZc2eJHj/3anJzmgbXmzS5MUmXW01G3JpszLV6fS7VaHOpVoxE7Tgu1IkxrB/H + NxM1+XyiLkdq5f1WGfBiuSFPSp3fLde8PU/aRKYpK8QpzJfgamakOIZQfZqDdKkI0aE0XI/qKP27ANiV + tVMD2NYVwiMzI9gyw5ehMlMa4+9jQuQoGiS4a0y8XzRK1o2iO+c+trRZ8PbGcL59KZ/fPm2AMw38+W0d + /DQRztfDj+Plcxm/nMnn5qlsrn2ezvlPEzn7SQLnP0nj0keZXD2Uw613c7n0dDIXd8dzbl04J/rk/TUY + 80G9KQfrLXi/TsWbNTa8UKlif4kVO4osWCHvUvkV5JxMCfQytdksbfTFrjBOrC7g1hPN/PX8VP58up7r + O/O4sCaanxb4c2m2J1dnuXJjliO3ZztyZ6ETv69w4Y91Hvy5xYs/dvjw2y5vfn3EkzuP+ki99OL2kx7c + ftqVn19w5ZdXXfntddEb7vz6ppfUU3/uvBnA1Rf8uPp8DD89lsrJDWnSthLYMD6U/mQ/mqL8qY+LoSw+ + RYLtFBJiE9UAODo+Vq307Cw6ervZ/vBDvHvwAJ98dpxDHx3mw4+O8NSzz7Bw8WIaGidJUppFYWEhDQ2T + 6Ghvp2XSJEry89Xz7SrDLxdlZpGbLOeIjSE5KoLU6HDKcjKYVF1BU00VkypLqS8rpbW+htlyvsd27uTN + 51/g1edeYO+u3Wxav4F169bx8O697N//NA/t2MfiBWvo7Rxiaks7dTV1VMj+5WUFVCjDP5fnMKEsh5py + ST4r8qivKqKhqoTGCcVMqhlRQ62U9cU0TiyjeVIFrY1VTJs8nunNE5g6uZbpilom0DZZ1FhNT2sDczva + WNrXy9qZ/Wwcmsn2+UM8tGgWOxf1sXtJL/tXzeTJdQM8sbZHgthunlojweyafh5f3c++Vf3sXTXAw8sH + 2CHavmKQbSuG2LJ8mE3LZrNh+VzWr5jLhhXzWbd8EWtXLGX1ihWsWL6K5SvWslS0ZMWDLFy+joXL1jJ/ + 6WoWLlml1vzFq1gg5bxFK0TLmbtopVqzF65geMFytYbmL/tnec78Ec1dsEKteQtXMn+RHOdvLR3RvGWr + mb98NQuk/EcSfC+Q8yyW861Y9SCrVm9g1cp1LJfvlsk+S5euZPmS5Sxbskwk5eJlLF28RLRYtIilSxaK + 5rFk0Rx1uVhZXjZfrcXL57NiyQDrZjWxqb2ArfVx7Cn35dUiV05VenC5ypVbpXYS2JhzJdeEnyT4+UaC + v9NZ2nwhAeDxXB0+ztXiw0JNDlXo8WGdMR+3WPFZhxPHu5w43GYrsubjTluOddvzmbTlE/3OfDHoIv5L + zjHbnVNz3Ply2I3Ts1zU5alBJz4XP3m815aPu6z5sFPFgQ4V74kO9Nrz0bA7n0n7/WJRIF8sDOSULH8+ + x4vjcsyPuxQAbMLhVkNOdVryQ78tFwcduCJ+SIG/18T/XJ9lxc1ha7VuzFKpdUtZN2jFjQFLWbbm9iw7 + 7gw58MtM0aAbN/o8+KnLhzMd/hyZHsC+CntmRY1VJ6IKBK71GsPUcAMG020lAfdmVWUQM9MdmKz8wCbI + gPGBhlQHm1AZZiVBui0xLsa4W2hgb6GFrUofc6VHn4Uu+kbK/L8KAB7pBaxroIOFyoLYhBjqJtXR2NpI + em6mGgAr8FfXVAc9c10MLfUxszUd6eXrZovTXfjr5G6Hg/LZ1QYXDwc8Ffgb4Ia9qwp3X2cSM2KpkHbZ + PLWO2XN71AC4obGM7JwYUlPDiY3xw9fbHg9Xa3w9HQnw91D/4zcg1I/gmBCC48IISQgnNCmc8NRIEnKS + SS7IILkwi8T8bGJy04nKSiE8LZGw1EQp/wOAQ7NSCc9JJywn7X8EwJFyr1HKcfIzic5NJiEvnpS8SApK + wxhfE0ZdfTBNDQG0TPSldaIXUxs8aKl3orlexZRGFVObVHS02NLR6khnqwsDSm/cDm8GO9yY1elMv8QH + g512DEv9nCX1bJbUscEZVsyRujq3x5F5ogWiRb0uLJvpxurZPqz7GwBL/Z49zV4NgWdNtWdRvwcLpQ7O + HbAXm2rPUJc9A9Mc6G1xpl3iy8lVjlTl2VKa5Uhxhgd5yb4kRXkRKu/DyckKK3nPDo726h7AJWLD62tq + xbaWkJ2RRmqy3HdCNEW5aWJTy5jZ0cysGZPpa61Va6B1Aj2NlUwdn09TWSYTi1LvKoOJJZnUFGVSlpVE + RvzIPMChvm4Eebni5+6Ep7M9ro6OODs7q+XkJKWrm8gdv4BA4pMSqZ0o55g1wNS2FmISInF2d8DX35Os + 7DQmN09ictNEsuV9+ni7ExkaxOSJ9WJXFtHX1Ume+LTQkBD1XMIOjk64ebirwbKTi5ssexEeFUnVhGo6 + ezqZ1j5VjpmBq6szPn7eFBbl09U5g84Z7SSoh4Z2IiosjEm1Exie2cfMvm6qy0uJjAiRcwQSrsxLGhZA + bFQQuenx4o9yaKkt/e8AuL1GDYAXdk9iSV+zvM9mNQBeOdTKipktrBhoZmn/ZJYONLFEloe7JjKxIl38 + qT/RQS6E+DoQ4GWNpxoEm+BoayayxEFKZV43G6U3sLkeFtKm1ZI2qpaV0vtXTy1T+axIPQKAuTYmFsqP + PfSxtFGGZx4BwLaOFlKaqaGwhbWRGgKP9P41kO1HwLGBieY/ANjcWo6vkuOL/oa9yrKy3d/bG92FzZbW + xqjsRoaYVoaEtrI1wFpkZa0n0sVSpY3KSgeVSgcrKa1UumopANhODYD1cXcZAcCF2bHS5oppn1zB+OIU + YoNdCHS1IFieUZC3DT7uVni5WaoBsLusV+Cvp8jd3UJkip+vBTFhdmQnulCTHyDxcxhzJyWwemoGm6Zn + srszl0c7MnmsM4mnOmN4oTuUN/r8ODDoy9EBH053uXOm3YkvWm04PcWKb2bY8GOfHRcltrs67MLlAQd+ + bDfn3HQzLksbv9xuyeXpllxvE/s/Q3xBl9j+Hskt+pz5ud+T6x3u/NjowKdFxhxIGcubsfdwOFODL6st + OC+25GKr+JVWay5Os+J6jzVXus253GPCjSErdS/g3xc586vEkzdmW3NpQMXFPit1eaVPthVdExtxY5Yz + F3od+LzZnE+b7Tjc4MB7Vfa8UWTDa+nWvBhjzpPiO/Z66bHH3YidbkZscJLcxU6LxbYiR10We0g+62fG + 4jAVKyJsWB9hz/ZIJx6JdOXxcDeeCXPiuVAHnpP1++X57giTbSJtWRrnzJw4F7pjHGmOtqc+0oG6WMnp + EwJpSYpgeloCMzIy6MotYGZpJf1lEo9VVNNeMZ6GwmJy4uNJEDv1NwAO8/mfegCPAOAor/8KgP/uARzr + NwKAQz38CPTwIdjNV61wTz/Zz4/EwCDyYqJoKClgam01Q53trF6ymF3bd/HyS2/y3vsf8dqbB1m3YTs9 + /XPo7h9W9/79UOn9e/kmv9z5i8vXbvP9+ct8c/YCZ374ieNffsu7hz7m5TffFb3H2weO8O4HR9n/7CvM + kphNme4jPDoVb79IPH3C/78GwAr4VaSAXqXXr7mZA0bGtpibO6mBsL29N1ZSWtt5YGvvhZ1sGxAaqx5h + Zv3Whzn2xdfqnr+Xb//B2as/8/VPVzj13XmOn/meg0dP8uKb7/PcK2+qAfAb733Ak88rcxgvorS6jpCo + eFzlWbt5B/5fBMDyvbv/vwCwF96+3vgFesn5vAmN8iQk3JXAUCe1/IMc8PBW4eNvJ/taSfyijbmVyFJb + 7J7SE1gLQ8VmmYrNE9tnIjGMAn3+ljL/r47+WImDZBvlRzRWxji72Mp7cCE0MpDYxEgSk6OJi48Q3xFM + QLCfPEd7OY+N2DgVJpbWYt8U2Yif8pF3mSDbZ4tfKaa8dDy1Exqoq5ukHjln2tQZLF68lOXLl7Np0yae + fvpp9TzAZ8/+wM1b1/jtt9v89vMVLp7+jI/372VncxPzgwJZ7+TOXisnntG35llNS/aNM2e7tgUbbFzZ + FpvEkSVLuXHoIH9dOa8esvmvv/7gN/7iz79GpPzdvHGNz45/wrNPPsZayT8e2rCG15/ez6cH3uD74x/y + o+jcscP89Mlhrkge+Ms3X/PH+Qv8cf36CAD+cwQA//LHdS7+dIbzXx3l/GfvcFYBwE9t5pnhFpbkhdHj + b8mA2I9Zzvr0O2urNeCux5CP5MwhliwJVzHfz5KZbga02Y2jVfUAXdZjmSs2ZrWdPltsxfZIjLpNfNaD + 4k+W2xqyyNmc+V42DHqq6Bf73u9lT5/ElwOiQS+xLf7uag15OTEgMWmvvTm94hu7HEzosjei18GQIRs9 + Foo/WSPH3KkGwKa8amvNAUdbjrjY87HEGIdE73m78LrEnQeSYvixpYG/Vi6EtUs5N6WegxJ3viA+6KCL + GUfFt3zgYc2bHo487+XDEz5BPOIXzo7AGDaFJ/BgfBprMnKYn5lPR0YutYkZFCfmUJg0An/LE8soTSqn + MFmUVkFuRjnZmaWSa5eQnlVEanbBCAQW/W+h77/1L/irBrr/C/j9W/9PADjtXwA46W8AnD4CgBX4q9Zd + AJyZ9h8A3FBXwdBAGwvmdjNtSg1ZWbGEhXkTEupDdGwIyanR5OWnkpuXSoK0p2hpR0lS5mSnSOyZLcoi + LzeVDImhFCCcnZUon5PJkHwhNiYAby/JK5TpISQmsbVRfiSmiaXVaOzsx0k71ScxxYmsPE8yc90kXlTh + H6gv343FROIUI5O7cwCrAbAyDPT/AoCNFQA8AoENzDQxNBeZjFXDX2Oj0ZgZPoCj2BJPlQGBEhdFSAyT + aG9JuqOVusdviacDFd7OVEk9rPRyoFzynzLJf4qdLUckcUeJxB1lXlaU+qgo87Gm3MdOZC/L9pRIvlPg + oSJb6lSygzExNrrEOeiTrADgELv/AOBoV7JkOSPGhZgQa/w9DPF21cPdUUekh6eDAe4ORuoY0d3RDGdH + E/EJ+lhJnKZM/6P8mM5SYjlraQM2smxrrSPPUhNHB018fQ2IDDcjJVHuKcOagnQzSlIMqE7RY3ySBhPi + HqAp8QE6szSYXajH8nJjVpWasLTQkAX5BszNN2Z2vhmz8i3pKXSksdiLMnkf6Yl2xIeqSAi0JiFYlkMk + Fw22IjTUlIhwQ7kXY6rjTenMsGdxvjvbywPZWxXCnjI/duZ7sDnLiU0ZDmyU79em2rIszoI5CaYMpBrT + k2VKX5Yxfel69KZp0ZOogN/76YwbI9KkPVaH6dG6TInUoiVcm+ZQTVpCNZgapsG0cA3a1ABYWw2Be6K0 + mRmr9w8AXpiuAGB9OsLHMflfALjVbzTTQsf9CwCLlOGfRf3Bo0cAcJDYMjnfgmh9liYasyJ1pHfjsmRT + FsYZqHsHd/rdR5v3KNp97mWG3/30BIymT/brC9IQadIXOI6+AFGgBgOimUFazAxUYLA2cwK0WCrfrZJr + 2Rwyjl1y/fuUDnexmryeoMVbcWN5N+oBDog+lHXH5D2ezrNUA+DTBTZ8lmPGkRRtDsg7VeDvB8kP8FHa + AxzNGM2x7NGcLNTgTKkWX5Zo81WpNt8UavJ9gTbn8nW4UmLM1XITLlYY8X2xNmfyx3Iy4z5Opo3i8/RR + nM69n1MFozlTpc33jVaca/Xiq2kRnOjN5sjcat5e3sLLa3p5XAHAYlMfeXAVj2xcz+6NG9m6ei2bVq1n + 5/qtPLxxC3s2b+GxbdvYt20zj27dyL6tG9i/Y9O/tIEndq4XbeDJXet5SvT4ww+yf9da9u5cxWMPr+XJ + Rzfw/BNbeeuFvbz/8mN8+MrjHH7lCQ4+u5f3HtvFWzs38/L61Ty7Yhn7Fy/k8RULeWLNErbN62fLnB52 + LhhgUXsDE3MTyAz3JNTVCl/xKwoAtjc1xkaRiSGOFoa4im3ykrzG194Afwcd/Oy18LPVJET8YJynOXEK + AHYzJNRJiwDb+wmyvY8I5zHEuo4lyV2bDIm7c6UdFgcZUhtrzuQUG5rTVDQmWzIpyYKJCebUx5nJZyta + 02xpSbeTZXNZb6AGwONjxlKjAOBkDVoydZmeZ0RXkfjLMge6i6yZkm5Efew4KkPuo9jvHvK87yHDfRSJ + LiMAOEo9BPQ9RHjcS5jrA4TJtYW7aMo1ahLurCGSZRcNIt1GAHC22NhSacNKj+TGeBOmJBgxNcGQdrmW + jgQdepN0GZZzKgB4lQKAc2zYlKNia5aKbRk2bM2wY1OmLeuzbFmTbceSTGuG0szoSzOlJ9uM/lwzBrIM + ma10Jss3ZFuJCfvKzHix2ISDmTpSr7VE2hxLHtEnSVocSdTgsAJ9pfwwSVOtQ7Ks6KCsPyBt4wN5Ru/H + 3Cft4z4+jLyPwxH38UnE/ZyIGsuZOKXnrQ7fxGvztXz+IvxePg+Reh16L99GjeHHaKUXsEiOdSFVi0sZ + elzIVoZg1pX2ISrU5cdiXc6W6nO+VI+LZfpcKTPgerEh1/P1uZFnwM1cA25k63M9U4HABlxO1+GS3MuF + RE0uyvVelPu4KPdzOUWXa2LbrmTqcVWewRUFHOcbqeHvzQKllOOIrslxL+ZocT5rHN+n3s+Z+FGclbZ8 + KV+DGyW63K404M4EU36tMZHSmF+q5TglmlwtHsPVopEewAoAviDt/MLfAFjswUU5xs2cMWoAfKVY2n6N + Db90RcOyMkbFOY8izeMeisUo1YYZMSXKirYoa5r9jBhvcz+TVPdKQDaWvZkSLE304Pz8ZC4vSuXb2TEc + 6w7h+TpH1qXpMDPsPjGqo8SBjqI8dCy1UgFaSlxoK3GnNsmKolA9KqPMmJLlzpRMTxpS3KiOdSRfEtCM + EAtSAoxJCTQmPdRCZEmsrxEBjhr4SGDg76BNoDjIMC99ksLMyJTAoEQcycQiZ7omeDJU48qc8bYsGC9B + abUhG5vM2CMJ+mPtKh6dYsEjk03YVqvLhopxbKzU5KFaffZNtuCJqTbsb1axt8Gch+ShbhNtrTFn/XhT + VpZLsFqkxzxxkgvkpS8sFodSaMzSIhNWlFqyodqeLXUubGpwZV2dk3pY6AXlFgyXilMrMaJTjOz0HE1m + 5GrTW2TArApLdS/gwVILunONmZqmS0uCOK9UCayzJCEvMmNzlYo94214ulYS+QYb3m2w4qBc25EWC47N + sOHzARc+7XfiYKeK16cY83yrPs+0GLC/yUANW3dU6rK9zIgd5ebsKLNke6kZu+4C4OcmmfP2dBWfDjpz + ZrYTZxc6cXmZLbceNOf2ZiPu7FAAsAVXtpvxo3z+GwB/vEqHg8t1eG+xNu8u1OP9hYYiU96Za8pbw2a8 + PmjJy71WvNBpwTMzLHla9PhUcx5pNJRr0mVXpQ4PlemoAfDeKiv2VtuxtVjFllJ7Hp0cxFsL8/hgdRGv + L0jk8Q4Pnu6w5+UeW96eacNHQzacmWnN9wMqkSXf9JpwukOL051j+apfk2+HNflhiRbn1uhwcYs+13Yb + cetJM+68YM7vr5nz2xtm/PaWFX+8awfvOPHby7b8/IyK64+Yc2GzAT+s1OOHRYb8MMeUb/qN+WKGESem + mfB5myVn5Dq+6HTio+kOvN4k111lwIPiPJfk6TBHGn5vjiEz7gLg9rsAuFnebVORqUiBv0ovYDH46iGg + /wOAmyXAmixqKTRSQ+DGAn2R7l0IrMOUMj2mleszo0qCoZqxLG27l0cWafLBHjsufxDOH8ej4HiQyBs+ + cx8BwIdU3H5dDMPTJvy504Rfl+pxWwHArWO5WifGYYIYEKn/10WXpP7/VDqGn8of4GzZvfxQfi/fVd7L + V9Vj+HyCJkfGy7uWc79eacRL5WY8U6biiRJpIwXWbMu0ZHWSMQtjJQkL16ctRIeaEC2qwqSMlOtPMmLO + BHfWTg1iW1c4e4fi2N4dyuwKFZNiR1MhBnhC9GhximNE91MbfQ+TxcgtrNLhqXmenHg0jZsHxst91fHX + F1J+NYE/v67izzOl/Pp5Pjc+S+fyJ0lc+CSeHz+WpO6jWH46Kvbo4wxuHMnll4MFXHk2lYt7Ejj7YJga + GL030Yj3aow4UG8hsua9enteGW/HU2XW7Co0Z6UY4EXyDpaIAV5ZaMqeRnfeHkrg681V/PpcO38938Zv + j0/k8uYczi6N5tycQC7N9uXasDc3Z7txe74bv6305I+N3vy1ww8e8eev/QH88ZToWT/+eCFA6p0fv73q + y6+ve3H7TQ9uv+3Gnbdc+OMtd359y4df3wzk51cCOf+EH+cei+KrHckcXp7EkzOiWVkaSHeiH5Mi/aiL + i6E8SZKrOAUAJ/wDgBNSkymprGDJyuW8+NrLHDtxnBOnTnHk2FE+PXGCF15+iXkLF1Iu24SFh5GQkEBF + RSUtTU2MLy8nITqaqNBQUuPjiZPvY4KDiQ0JJiE8hMz4aGqKC5jeOJH25km01FTRUFFBa30dc/v7efbR + fXz49rscePMdnnn8SXZu287atQ+ybftD7HvsaR7Z8xSrVmxisG8e06d0/AOAKyuK1PMNTShX4G+WWrWK + KvKYKGqoymWiqF5RdQ6TJuTSWFNIc30JUyaV09ZcxYzWCaI6uqZOpGd6Hb3T6umbVsvsziZWDXayad4g + Dy8eZt/yuTyxej5Pr53Dk2sGeXpdPy9uHOSVLYO8unmA17YM8PrWWbyyeYgXNs7i2Q2iTbN5euNcHhc9 + umGOaB57Ny3kkQ2LePjBRexYt4DtaxayeeUiNqxcyjoJPFctW8HSpStYvHQlC5euZp4CdxesZPa8JQzP + WczQnEXMHF7I4OwFDAzNvytleQF9stw7a0Q9g/P+We4fHNHALNlONHN4EbNmL5ZjKMcTzVe0hMEFSxha + KOdZuPQfKfPZzREtXLiMpctXs3z5mhHwu2S5WsuWr2TlMtHdctXyVaxeuZo1q1aOaPVy0VJWr1qsLtVa + u4zVa5ayct1S1q+ey9YFrezsLuShSbHsLffm1QJHTpY6c7HciZvF1tzINeVKlhE/SYD1NwA+maXD8Wwd + juRqcqBAk/fFP3xQZ8yRyVZ80u7AR2J7D7VZ88E0FR+K31Mg8PE+J47PdOHkkBufD7txco67Wsry57Nc + OKWUQy7q5U8HHPmoz5ZD3ba832XNO102vNdnz2HZ5tMF/pxcFMDnCwL5fJ4/J4Y8OTrgxJEuWz6cZsah + Zn0+azPhu35rLg45cGnIjivih64Oi98YtuKWlLeGbe5KlocUAGzJtQFzdS/g24M23Bm045eZdtyZ6cyt + Pjcudnvxbacvn0z35QnxF4viNZgReC9NvvfQJonszERTlhY4sb7aj00TAlmQ7UBHlCFTQsU3BItCTJgU + bkVtpD35gTZEu5ri52yKh7OZen4uK2sDTMx10Tce6QEzAoC11QA4PimeSQpom9pMem4GNk426JrooGus + jb6Z8kt5HcxsjGS9BY6u1ji726rl5GY98lnk5uGAl68LHr7OWNkrsNiS8PgQymuK6O6fJnV+iOHZHYyv + ySM1NZj4eF8iI9zw97XFx9MWf28nAgM8CAj0IiDYm5CoQEJiQwhLCCcqOZKY9GiS81JIVQBwfiaJeVnE + KQA3M4Xw1ETCUhKk/O8AWAG9/yMAzvsPAI75FwDOKwmhanwI9RNDaG4MYUpjIK0NXrTUuzO51oGmWksm + 11vSPNGS6U3WtE22oWOKI8O9fiyaFcy8md6y7ET/DInlOm2Y3W3NrE4rBiXuGWgzZ7jDWuyPLXO77Zin + zOvb68hSidtWDXuyetiH5f1uLJC4QpkbeHCKDUNtTizo92DegDNDUl8Hu+wYmGFLb6s9XU2OTJngQEOp + A6WZKnISrEmPticxzJlQHwd5/9ZYSsJqbGyItY01QUFBlBYVMal+IuMrK9Xzomemp6iHgS6S59VQXUJ/ + WxMzpzfS3Tye7qYqehor6JxYRmtVnhoAN5ak31UWk8qyqVOG6s9NIScpkoSIQCICPQn2lXfp6YqPqzMe + Li5qQKvI3d0DDy9v3D29CQxW/lmYwkTxG8NzlVERusjKyyA0UupHUgxVE5SewR10d7dTVVVGXFwUGWmJ + dLVPZ/2a1QwO9FEg1x8u/sjT01PqoRue3sq8cz643j2PAoBr62sZHJ5J70Av5eWlhIWFEJ8YS8OkeubP + n8Pc2cPq5xAq/ixd/GTblBYWz5+nXl87oZqYmCjCI8KIjIoQhREfG0a+1KOa8jxalHmk6svobKyiX3zN + rGk1DLfXMa+jnkUKAO6drAbAqwdbWTlrpPfvcqX3b3+TWksGmpjf28i0iUWU5sSSHh9AdLAbocqwxh4q + vF0scXO0Us8/7Ghrjp0yn5ulASoLBQBL+/23lF65CugVmZqP9IhTgIgCcEcgri4W1vqMDM/8NwA2V0Pa + /wDgkSGj/wHAphp391UA8N2ev/8GwPL5bwBspPxT1VQ5ly7mVgbqnsXWcmzlfJY2f4NfLbE5GvL9WCws + x8l1S2mhgaWVlloqS23sZDt7kbvYr/AgF0py42mdWCzxRRmVBYnEBDnh72KuHgY6wN0STycT9bYess7D + 1QIfWeetQGH53sfDgmB/FYlRkkemeVBXGCRxeAiz6mJY1pzMutYUds7IZE97Ko+2xbF/eigvdEnO0efL + 4SFf8SU+fNfnyXcdznwzzYavplrIsoofe6y5MNNWPQXA5QE7zndYcEna+HXJS65J7nVNtrnZac0tafs/ + i5+4PdOen8X3/DbHm9v9npwXe3Gy0oTDkoAfSBvNsUIdvpPY8/J0Jy602nC+1ZIL08y5rAzp3GHExS5D + rg1acHuu7V0A7MyN2TZybpVaV5QRKAbk3KIbg45qAPxTjx2fNZnycZP4uBpbXi+15uU8Fa+kW/NclDn7 + AwzY7aHDTlcDtroYsN5JjxX2uiyx12OxsxGLvcxY7GfJ0jAbVkbYsC7clm2RTuyOdGN/pDtPR7jybKSz + HMuJ/fJ8H4pxYIPk68sSJNdOdKM7zpnmaAfqxCfVRLsyKc5fYvkwpiTHMT01lRlZ2fQUlNBVWEZXaSXt + FdU0FpWQK7Hn/zsA7E+kKMpzZBjo/z0ADiRUvg/y9CPUQ4HB/ncBsA9JgQHkxURSI36goaxIPQT02mVL + 2ffIPt5590OOn/iKY5+d4bmX3mLztj1s2vowL7/2Dl9+e5arN+5w+w5cuf4LZy9dU0Pgr85e5Av57sNj + J3jz/Q/V8/8qAPjIsS9454OjbN/zuHpI6dyCSkLCk/DyixBbFfYP/P2vAFhZDsTRZWT4538DYFs7T5Th + npWhn5XevwoAtrJyxdHJFw/PEHz8o/APjiE0PJGo2HTyS8arfzz40psHOHv5Jhdv/sqln3/nJ+Xar9zk + 63NXOPn1j3x08kvePPgRL73xrhoAv/PBEXUv4Ac372BG7yDZ8p4CQqNwl2f8fw8Aj/T+/Q8A9sbD2xPf + QG/CouU9x/gTEe1DWKQn4aLQcOWHQ0pPQ2e8fe2xcxBbZie+TfmBiY2hOs6xUhmJLTEQGcozMhAbZYSZ + MjqCSJn3V4HACgw2VYbTtzbBzt4SR2eV3IszfuK7gkJ81HGIl6+rxDlKb2pT2cdEZCbxk5nsa4GhqaXY + Tzd8A0LlesIJDZMcKz6d3JxCJkwYmT5F6QE8b+4Cia0XSr6zlj2P7OGNN17j66+/4vqNK9y+fYMbV37i + /BfHObz/EbZIDDYrJJBV7p48ZOfC48Y2PKFnycNapmzSs2CNjTNb4pP5aNlybnxwgD/P/8AfP1/njz9/ + 49e//uD3PxX9zh9//c7Va5f45OhhHn90F4vmDLBm0Wwe27aet57ey2dvv8ipd1/my3de5eu3X+fHg+9z + 5din/PzlV/zy00/88cstfv3tZ+78cYtffr3KhXOnOff1x/x04m1+OPhfAXBfoIpBTxNmuxsx6KbHgJsO + Mz31GfI3ZV6YNUtjnVgU7sgsscHtLvpMsdWgy1qDedbarLPVl/s0Za/4nd0W+my20meNrSFLxY4v9JLY + ydOKAQUEe9gxS+LLYXcH5vm4skTiwyXBPizwcWOOmx3DTiqG5B32O5iJTJjpYMQcqQ+LxU+tE3+mAODH + VKa8ZGvFO47WHHCx5bCXA4d8nXg/yJ03Q7x5JzGK07UV3B7u5Y/FQ/w0tZYjGZG8ItfwobsZn4gfOehh + zauejjwpMcYu30A2yLtfGRzF8ugEliWnszQ7j+HsQqan5zEhIYvixDwKE4soSSylLLGCkqQKClJEaZXk + pleSnVlOZlbpCJDN/g8E/t9C33/rX/D3/xYA/rv3b8r/CICz/wHAyuhas2d1sGh+LzPaJkpMlU1KisTn + yTFkSpyt9KAvKy9QK0fi7Mz0ZPIlVq+oKKZGYjplaqZysbeFBVlqlZTkyuc8ieXS5FyRBAW64+4h+YWT + OY6OEu/YaUvcMFbKcWIf9CU2dCYjx1Puw42oOGtpg0bqIaLVANj4XwBYPQ+wAoCVuYD/A4H/GQb6LgA2 + Mhkr8fFYzIzHYCWlm7Ue/nbGhDmaEeNoTqqLNbluNhRJHSyXPKVacpwaH2cmSB2qdrOlytWGMonTyl1F + 7hZUeFpQ6WVJpfjOKl8VE/zsRA6M91fkSIWvHcUSm2S7mJKs9P51MCDF05QsfzmP+NfcKGeyROmRjiSL + woOs8PYwxM1ZByd7LVzsdXCz1cNV6rirxFeuDqay/i4AtpI4Te7JwkLiKYnZrK11sFEp8FcbG9txODiO + IyTUlKQkG3KzHCjKs6cg04yiFD1KEzUpi3uAqph7mZR4H505GgwXSUxQYcKqchMWFxoyR3LyWVm6DOUa + MZxvpp53dHq5JxOLvSlNdyQzWkVqsAWJgebif02I9DMiOEifiFA9MqIMqI4xpjPVjiXZrmwt9uPR8iD2 + FgewO9+T7VkubM10Ymu2M5uznVibbsuCFMmZ0kzUALgny5ieTAN60nToShpLh1zrjNgxIk2mx+oyJVqH + 5kgtGkM1JSfWEI1mcshYpii9gCM06YzWpTtGh76YkTmAF6SYjADgjLsAOHQsk31HUe9+FwD7/w2AFYis + AOBxzAgdTXeIAnBHMzNwRAoAXhitz5J4pQewBavTrdQgeEmiMfOidJnhfS9TPUYxzXMUbT730iPHVQPg + QA16A8bJ57F0+Y2h03c0vf4aDARoqTXTX4sh33Es8h3DCr/RbAoZx85IDfZGjZN4aywvxI7l5agHeC30 + Ht4Mu5f3Zd2H8Tocl2d1qtCazwus+TTHlI/SdDmUMo5DyWP4JFuLz/K1+SxXkxP5Gpwu1eGrcj3OlOny + VYkOXxdq812Brnp+04slxlyU9/5DiR6n88byWfYDHEu7h2Opozih9AIuGKuGx2dqDfl2ii3fTvfiZHs4 + RweyOTh/Aq+vaOUFpcPE2oU8+uAqHtv0II9v3crjO3aqge/Dm7ezb/suHtu+k33btol/2iLLm+5qA/u3 + bxSNlI/vXM+TuzaO6OERCPzEbtGeB3nikfU8+/hWXn32Yd595TGOvvcix95/mU/fe4mjbzzHW4/v4sWd + 4rPWr2HfkoXsWTBPykU8t3EtL+3YwKMr5/OQ2PzdS4dZMzCV7vpiJuYnkhcbSHyAG/5OtrhYSYxgaY6D + mbEaADtJXOEquY+njT7edjr4iY3ys9MiVHxcnKeZGgArQ0FHuOoSYPeA6D6xJ6OJdB5NnKsmaR665PoZ + UBqizO1rRXOarchaDYAbkhTQa6bW5FQrpmTa0ZppS2OKOfVST2vjtP4BwBOTNWhWAHCOAoCt6Cuzo1fi + /LZccyYl6VAj21VHjKEibAxFQfeT5XsfyVIfY73uJUak9AAOdb2fUOcxhDmNU2sEAGsQ5jKOSFcFAOuS + HSjXGm4scbwxTf8AYGVUOl3apM4pw0APp4uNuAuA1+ZYsyFHxeYspRewjZR2bMq248EcO9bkObAkx4ah + TCv6s6V9F1oxR657YbktK8qs2VJpzV6FcYleL7fkQLYeR9O0+DhNm6OpI/o4RYsP5d4PJY7jg2RZTtG+ + K2W9Fh8kaXIwQb5TAHDUCAD+IPI+DkXcx8cR93M8aox6PuGvE7X5Kk6T05GjOSnt6HjQKL4IHqWeC1gN + gKWNnZPjXJDjjgBgZQhmXc7liqSdnCvW4adSXS6Krpbpcb1cn5vFogJ9buXp8XOuLGfrcj1TjxsK3E3X + 4VqKDleTtbmWpM11WVY+X0/V4Ua6LtcyZH2WrJNz3Mg34FaBITfzDWVZXy0FAF/O0eJilgJu7+eb5Pu5 + UazLnWoT/qyz5M8GK/5qVPHXJAv+arDgjzoTbpRpcLV4tOgBLheN5lLhWC4UaXFe+aGH2PhzGWO4lDX2 + HwB8qUCTS9UqfumIhMUljAq2GUW04z1keGuR76dPsa8++Z5aZNmPIcN8FKUmYtyc72NNnDHPlrtwrCOc + rwai+GYwmjNSvtPixe5iK5ZIJZkWfB/lYmSLgx6gItmQhkJHpha7UZusGvmFQawFrQoAzvKiKdWd8RJA + FoRbkx1qSXqwKekhZmRHqMgMtSDBXxyMpwHB0siCXfUJ8TCQxNCQlEhLchJtKM20Z2KBA53VrgyOd2KO + VKjFEyxZNt6I9Q3G7JpiyaPTVeyTcu9kU7bX6LGxQpPNldo8XGfE/mYrHm+xYf9kFXsnmrO71pyHai3Y + UWvJxmpTVhTrsSBPm3n5Oiwo1GdhkSGLCgxYKi9tVakFG6rt2NHgxrZGDzY1OLNygjWLK8yZW2rCoFSS + 7jwt2rPHMiNnHF35WvQXGzJUZsZAkSld0qCnieGelqxDZ5oeM7P01XB5fZlcx3grnhC9UGPFqzVmvDHB + hLfqjHm70ZR3Wyx5q8WclybLu5ikzxMNujw2SZc9DXo8NF4BwPpsLzdmR4XcR4UVO6SB7ao0ZX+tGc83 + mvNuu4oTw858vcCZ88uduLnWnjtbLPhthyl3dppyQ8rzW4z4QQ2AlSGgDfhkpS4fLtPh0BJxNIsMObzE + lCNLLDi0UILmeRa8O6TijQErXumx4IUuS57vsuapdkv2NZuwu05fzq/NQ2Va7C435DF5Ro/V2PNQha1c + n5M8/2DeX1LA4dUlvDEvnifa3Hi6zZaXO615u9eKj2Za8UWvBV/1mPN1txmnZhjw2RQNjk8dw8lODU71 + i2aN5ou5o/l25Tgubjfk9hOW/P68ij9ftebP1634XfTHW3bwrgu87sTvL9jzy+M2XN9lwaUNJup5WS8s + suTsbAu+6TXjTIc5ZzpVfNXtwOkeF072evK2OMDdlQaslne5IFuTIWnAPdkKADZnRrkY5CpbNQBuLbVk + cpGFyFwNe5sKLEVWIlmnXpZ1agBsQmuxmcjkLgDWUwPgJjE4zeKop4qx+QcAz7iHvUs1ObzPnsuHQvnz + uDRcBQB/9i8AfMSG229Z8OuzZvy125zfVxrwa78WN1vGcGXCaK5UjuFatSZXqrS4UDqGs4X3c67oXn4s + uofvRd+UjOLL8tGcqBzHEXlf71Xo8Ea5Ea+Vm/NapS2vVTnycqUrT5e68HC+LVvEwK9MtmAwxkCCMC3q + QrSZGK5La6IRcxUAPCWYbd1R7B1OZntPFHOq7GgUg1wZci/jxfBOiNVRq0aCmrqo++nN02RnlyMfbI7h + 3AsF/P5BBXxcDp+UcOfjXG4fyeTa4RQuHUng/IfR/HQkmrMfS/lJPBc+TeXaZ9n88mkRfxwtk+dQwI1n + sri0M55vlgaq57x+b6IZ7ykAeJId709y4pUJ9jxVbsXOPBNWihFfKu9gdZkpWybY8VxHqNTxbH7YUcfP + T03jzlOt3Hh4POdWp/PNvAi+mxXAhWE/rs325+Y8H35Z6sMf6/346yF5J/tET4ueD+avV0RviN4K5s93 + A/nz/QD1PL+/f+DLbwc9+e19N/54VwHAvtx+LZArzwXxw95ATm2P4MPlUbw4EMb2Bn/m5/vTlRxMa1IE + DcmJVKamk5kwAoAjo2OJiU8gq6CAKTPaeWjvHj4+fowz33yj1udnTvP56dO88sbrzF24gNz8PDy9vAgP + D6e4qJDGhomUFRbgL+s8nBwJ8vHG180Vbycngr08iQ0JIic5jgZJ6jpbm+mZ3sr0SfU0VlfTWl/PgsFZ + vPH8C3x2+CM+OXSEN15+lb17HmHjxs1s2ryTR/Y+yb59z7Nl0x4Wzl1OZ1sPE2vrqa4olWSxlKaGCiaO + z6e+KpuJlVlqNVTl0KioOpsG0cQqZX2m+nPThFxaauVeG0pob6pQDxvZOWUC3dPq6GurZUA0NKOWhT0T + WTurlW3zO6Tt9PLEqn6eXN3HM6u7eGpVmyy38qxaLby0diqvb+zgjU09vLSui2dWzeAp2e7JtX0S3A6w + Z1Uv25Z1sH1pN7tWz+ShNUNsV+YiWdLLmvldLJ/dzZLhPhYNzWTe0Cx6u3vo7Oxhens3rVM6aZzcRv3E + yUxQ5vsdX09pZY1oAiUV40UTKK2oVau4UiRlyf+g0so6SqvrqZzQQGWNMndwo0jKOilFFfWNVE5sZHxD + ExMmiaSsbZjMpKYptLROo62tg/a2TtqmS9neLtfYSV9fH4MzhxgaHJZykFnyPoeHh5k9exZzhmcxd47c + 05xBUT/z585Ua8H8QeZKOXtuPwuHZ7C6r5rN09LYOTGcvaXuvCr24ViRLT+W2HCl0FKCHROuZBpKIKL0 + ANbltARAJyXJPCaB0+FcLd6TgORdSVAO1hrzYZMVR6bZcajdhoPTrXl/ihUHpqk4PMOGY33OHB90E//l + zmfDbhyf487x2VLK8mezXDg+5Mpnd/XJTGcO99tzoMeOt7utebPbjnf6HfhAtv1kvi/H5/txYl4AJ+f4 + 8eksdz7uvwuAp5tzYLIEpFMN+LpPxflhB84P2XFxyIbLw9ZcHVZ6ACu9fm34edheZMOtIet/APDVXnNu + 9UtwNdOGOzNt+XXAgdt9rlzr9eJctw8n27x5RvzyenkO8+LGMjN6DEuzLVhb7MjmCje2T/CW+MSTZdnW + 9Efq0B44lma/sbRJcN4Tb093mg/TM4OpSvAlNdKd0EB7PNwtsXcwwUpliJGJFnp/A2B95R8rliSIzWhq + mUzztBZSs1JQ2VuiZyzbGWuib6Kh/qW8kQKYbA2xdTDDyVWFi7s1Ts6SFDlZ4iylm6st7u72uHraYWlr + jLmtEX6hXlJncxkc7mT16nkMD7VRXpZGQrwPMVFuRIY7ERHqRFiwq1ynOyHKsI/B3gSJQsP9CI8JJCYx + gqSMODLzU8guziCjIJ3UvAyScjNJVABwRioRKUmEJScQofQCVgPgFDUAVnr//hsAhygAWJkLODtlBADn + ZxFVMAKAY/PEXuaPAODckmDKq0KorwuhuSmUqU1BagDcWOPMpPG2NIy3YJLEXU0SD06ZZKWGwD1tTszu + 92HRcCDzBj0Z6nWkb4aKmRInDHUrpRX9beb0TzdjsM2CWe1WahCsaK7Uq0Wy/TKpu8sHPVisDA/d7qju + AdzfYs3AFHvZ3pHBTgc5hg39Uvd7p9vS02pPZ5MTzdUOTCx1olySrIxoKxJDbYn0s8PXWd6RtTkWpoYY + GxrK+1cRGBhIaXExTY2NatXViq0pLqQoL4uK4jz1/OU9UxvpmzJRjl1Nx8RSOurFltYUMqUql+byTJrL + smguzaRJyknlOdSV5DC+II3C9HhS48KICw8gItiPID8vfD3c8XB1lTrohoenJ76+vvj6B+Dl44d/cDDx + yUnUN05k8fLFrFy7nPau6dRMHM/kKY1SbwZYuWYZK1ctpb+/m8bGeqZOmczqlct55OFdLJREvqS0iMjI + SHzkuO7eXnj7++HtN9KTTFFQaDATG+pYvlKOs3oFvb3iX+prmDp1stipOWzduoHtWzfROaONivIyGibW + smDObDZv2MiypUupr68jNj6OiOhIomKjiYmJJDEhisKcVOrK89XzvreLj+ptnsCg0tO9rY457ROZP2Mi + i7oaWNLTxMqBZlbNVOb/ncyKmU0sH2hiWX/jPwB4kXzfN20C9eLDssWPRwaIb/W2w0+BmM4WuDuqcLaz + xE5ljLUybKm5DlbSHq0sNNSysByRpbonnKZISz0colrmmhjflbmlDhbWeljbG6l7/to6KsNAm6GyM5b1 + hpirFFhyd0jnf3r0/g2A5djWCvAdkQKEFSkAWOldrMjIVAt9o3EYio1Reh9bqozEXphi5yi2x2YE/qps + RTbjsLQeLZ9HyzXdj4WFLFvKOqtxWMv121lp4aDSwcNRmVPOhfL8BPHnRUydVExZrsQzQU74uZgR4GqO + r4spbvYGuDoY4e5sgqebOf6eVgR42agV5K0iMtiW9Hg3SrP8aCiR9lwexkBtNAsaE1jZksjWtlR2tSWy + Z2qU5IKBvNgVyHsD/hwb9uXLYR/O9nvyU5czZ2fY8oO027NdKn7qseHSgC1XBiXmlvKStPFrvWLr++24 + 2SP2XnSrVyQ+4udBsfdDkkfNdeHPBd7cGfLk0gxHTtWacLRQm48LtDhZbsC3Ey04L3nETy0qzrZacG6K + CT+2GvL9VF1+krzm2oAFt2fb8vtCBQC7cmu2PVdnWnNN/Mj1WXbqOegVKQD4+iwnzvXackJywY8abXir + SsVLhRa8mG3Faxl2PB9jxf4AQ3Z76LJDcmcFAG8UrXEyYqU8x2WuZizxklzZz5pVoQr8tWO9AoAjHHk4 + woVHI1zZH+7M4xFOPBHpyN5oB3bEOvBgnANL4p0ZSnChI9aRyWoA7EhNtBv1sX5MihObmhAtsWoSU1JS + mZaRzfTsAmYUSTsqr6CpqIT8hAQS7w4BHeIjsajEnJGKpI2PyI8IsR8R3iIvX6I8/YiWZUUxPgEjQ0AH + hhHjFyLfBxHiGUiwSAHBYZ4B6iGgo719SA4MID82imrxBdXiU6bUTWDpvHns2fUIb739AcdPfs2J099x + 5NhpXn79AC+/9h7HTpzhpwvXuXrzV279+hc3f/mdi9fvcPbSTb47f5Wvf7zIp59/zfuHj/HG+4d5470P + +ejYKY5/8Q2vvfUBS1esp6a+VQ1mvXzDcPMKxtlNgb6Bao0AYAX8+qvl4OyHo7OUTr5q2Tt4Sxtyl7bj + Km3HWdqZo/h0O/Xwz77+kUTHZZCVW0ZecTXVNU20Tuth1rylPPL4c3xy8isuybVe++UPrt7+jUu37nDp + plz75Zuc+e4njp/5lkOfnFAPYa0A4A8+/pRDRz/jmRdeY93GbTRP7SA+JRMPnyC5bv9/AeB/y1/0/xYA + K1L28VPL3VNsuJe3xBByL4FK79oQ4iSnSUqOIDEplCRRYlIwUdF+REVJfBDhLf7MlYAAZ/z9nMW3OKnl + 7+eKm5stDvbKqBcSo0hs4uhiI8/SWmyeFda2FmrZyPf2yrQWIgeJYxxdxF+62khcYy37qeSZWshzNsfA + xAg9Q2OJmxQIbCrP2wITcxVW1g7ybtwlBvLAzV38mvKDg8hYcnLzKSurYvLkKfT1D7Bo8WLWrV/P7r27 + ef3N1/jmu6+5fusat36+zpULP3L+9Ak+2P8I61ob6IkKZpHc+2ZPN/bY2LFXzrNVzrvG0JxlNo5sSkjm + o+XLufHhQf66eJY/bl/nt99/4Zc/fuXO76I/7nDnz9tcvHyWjz4+yL692yUm6WHxUDdbVszjiW1rePfx + nRx+eg+fPvsYJ597iq9ee4VzBz7g8iefcvOrb/jz+jU57g1+/eU6v9y+wqULX3L+u2Oc//w9fnj/WU48 + vpGnxG8tyRY7GigxjI8587xMGPYwUMPfQW8DhoMsWBBpz/IUb5am+Eos68nMIIlnPMwYFhuz2FZPPfzz + bmtjnhC/9riVEbusjdhsL/fqZiW2R47rpWJQbPhsDzvmeTqywMORJT5urA7xZXWwL8t93Vns5shCZzvm + O9kwS971oKMpsxyMmWdnxDKJdx+0MGKbuRF7rUx52sacVxwsecNFxUGpMx9FenMg0pdXQrx5Iy6cT0py + xd7Wc6VjMt9PKuV4bjSHxMZ94mvJpx7mHPJQ8ZqnA/u9Pdns58+SwCCGw8IYlvhgdno6s/Py6MnJpzkt + j+qEXIoTFABcTGFSGUXJlRSkVJKbOgJ/c0RZagBcRroCgdUAeAQC/3foW/Rf9f8SAKf/TwA4s4RUUVp2 + KclZJSPKKFYrNb2YtL/hryynpxaSmpxNZlomeVnZFBXkSk4+nrnDXSxe0EdnRyO1tSUUSFyeX5hFaVkh + ZRXFVFWXUz2+Uh1TlZeVUFVVTl1dDQ0N9RJX1zBhQjUVFSWUSfxWUVFEpexTWpan7jmcmBRGRKTEh/KO + PL2VEYaMsbXXwc5JBx9/M4kZ3cnI8SEl05PIWDu8/E3VkFj5sZuR0b8AsKEpBkZKaSzlfwfARkpeYybx + jek4zKS0lhjJWeqkr8Qroc5mRLlYkuhqRYaHLQVedpR5O6p7/44AYCdqpC5MEDszXvKhchcLKlwtqHQ3 + p9rTgmovcyb4WYisqPezpd7fnroA8YUBjtSKqnxsKHK3INvFmAxnI1LdjMjwNic7xJbscAfSxN8mhFgT + 6m+Oj5chrq56ODhoqXvxOlhr4yTX6STxmpO0HSc7ExxFtsoIK7LeXGI2BQJbSTxoY6OHna0udvJ8bOzH + ib0aS3iUubxbOwrznSgpcKAo24zCFF0KE8ZRHHMflbH30JB0LzNyNJhVqMuyCmNWVpiwWPn/dJYm/emy + PkeP2fnS5kskP6lypaPCncYce8rjzcgJNyIlQJlDVIswLw0CfTUIC9IkLVSLinBluFcVC1McWJ/hxq48 + b/bk+bErx51tGS5sTpc8N9uZLbnOPJjjwKIMFQMZpvTmmKsBcHemoeS4usxI0qBN8uPpMWOYFqPJlBgd + mqO0aAzXYmLIOCYGjaE+8D4aAh+gNUKT6ZIrd8bo0Revz1CKKfNSzFiYavYPAJ6VINcVMprJPqOodRlF + g+coWgNGAPD0cGU4aQ3aw8fRETqGrkAF1I6m3+9+Zvo/wLxwbRZF67M4zogliaasTLViRYrETklmLIgx + pN3rXlrkmFPdRql7AnfLvr1BY+kN1KA7YCxdvmPp8B4t291Pl884ObYWfX5a9HqPo8/9AeZ43s9Sv9Fs + DNFge4QGuyPHSvz1AE9HPcCz4ffyfNAoXgq6hzdl3XsxGhxJN+REvorjeZYclWf2UaYuH2Vp82meHl+U + GnG63JgvSvQ5VazHmXI9vqrQl8/afFGoxRf5WpzJU3oC6/NjiRHfy/Yns8dyLON+Pk6/l49SR3FUys+y + R3O6WJsvqw05PcmUL6c78EWHL5/2xHB4OJ/3FtXxyqopPL9uJk+sX8b+jet5YvMm8T/beHz7TvZu3Sba + oYa/+7dv57FtW6XczOM7N/HkQ1t5YscG9m1Zx6ObVrN3yxoe27GWJx/eyJO7FQi8XpbX89SjG3n+8a28 + /uIjvPfGE3x04CVOHHmDLz56m2Pvv8LBV57m5X0P8fCaJWxdPI+t84bZNDjA+oF+di1cwNMbH+TFnRt5 + bO0S9q6cz77V83loyUzJ16YwZ2oN08cXMD4vmYwYiSUD/Qnx8iDAxRF3iQucLQ1xkDzHSXIjV8mzvKVd + Kj2Bw9wMifU0lrpvSryPGdHiE4McxhJo/wChDmOIcBpNrIsGqe46dwGwMfXSHhpTVDRJnVGGgK6LN1bP + BTwxwUQNfZulDUxOVzFJ6m1tvC7V0eOovguA65I1aMrUYVqOEZ1FlvSWWdNXYUN3iQ1Ts01oStOjKVWR + AfWJ+lTF6lIUpU2WtJPEwLFEeY/57wBYrk9RmKsm0W6y3V0ArIzOq/RKbk4w+wcAT43TFSk/yNBjKNOc + RblWrMyzZk2OStqvFRuVeYCzbKSU/CHbjrW59qwuFD+eb89wroqZeaICsQdlkjvUuvHQRA/2N7jxbJ0T + L09w4O1yKw7k6Eud1uZwmjZH1NLhcKo2HyRrckDp9SvLH8q6D1NlfbqufK+rXlaGPj+oBsD3854CgSPv + 44OI+9TDQB+LHsPn8ZqcSdTmjJRfRI0A4E8DR/G5AoClbZ2NHcdPsv95ecYjAFiXi9l6IwBYkbSTc5K7 + nS/S4mKRJlekPVyV5RsF2tzK1eFWjjY/Z2tzM1ObG9IGbyjwN1W+T5HPybJNkihFtpPPt+T4t+Qerqdp + cDVDk2vZWtzM1+WWAoFFN/P11bqer8e1XG0uZWlwPnM0F8VG36k04q96C2iyhWZFNtBoBZPM+bPemJ8r + NLleOpZrpWO4WjqOK6WaXCzR4acibc4qw71na3BJ2viNuwD4fM5YLlZIrjkjAhYUMcrLbBSBqnuJcdYg + 0U2beOWXAbb3EGY5ihjzUWSbjKLG+l5mBeuxPdeBVyd6c3iKL6e6QvmyX4KoaYE8U+PK+jwrOqM1qfS/ + h/zAeylQIE+ODZMLXKhNsaY8yoQJ8VY0Z7rRmu0tlddD3QO4MMKGvDAVWWHiIMMtyI+2lmVLSeDM1L80 + ivI2kURP5GNMlL8xqVFW5CbaUJZhQ32uLe1l9vRV2jKnWsWSCZasqDFhXZ0h25tMeWSqFftaLdkjRmz7 + eF02V2izrVqPRxrMeaLVhscnW/OYPMy9kpw/Um/FnnoVu+qs2Vwlhl7p+Zujybw8LeYrELhAj4XKhPny + otaUmLGp2oZdk8TJTfZge6M4tHpbVoy3YHGlCXNK9RmQytMjD7tTjKmi7lxxrrJvf54hXVkGtKWKoxPH + 3Juuz3C2IUsKjXmwzJRdVcpww2Y8VWXGM1VGPFdhwDPlujxTqSfr9HhCrn9ftS6PjtfhkRod9tRps6tW + l51yfzuqDNlZacrOKkuRNQ9VqdhdLfdab85LzeYc6LLm1HwXvl/qzOU1jvyyyYE/dlryxy4zbu804eo2 + Q37cqMf36iGgjTj1oBHHVxlwdLlomSGfLDXl+HIJmJdZ8cliKz5eaMWh2da8N0vFm32WvNpjxUs9Njzb + ocytbMqeiQZyP1rsLNVgT7kBT9bJM69z4JHxDuye4MrT08I4tKSAI6tKeHN2LE9OdeHpqda83G7FO50W + HOk147MuU051GHN6hjEnp+lybLIGn7Rq8Fm7Nid7xPF1ifPqkYY9737ObTTg9mPW/PGMLX+9JI3lFVv+ + eMWaP1+zhzed4TUXWe/E7884cucxB37eacOVdZZcWmLJ+XmWfD9gzjfdliJrvu5x4Ms+V74c8ufd6Y48 + LO9hRfYY5knjHMwWoyjvrL3AgrZSFdMrrNUAeEqpJc1iqCcXmo/oLvj9WwoAbsgzktKE1hIL2d6cpsKR + XsBqAFykw2QxNFPLdOmo0h8BwB33sHeZhhoAX3g/iN+PhaOe//ekL5zwgE/lfj6y45d3rLjzvCV/7VPx + 1zoT/hjU4efWMVyrGQHAVys1uFyuyYWS0ZwrvJ/zhfeOQODCe/i2+F6+LBvNZ+XjOFymxdulWrxWrM+r + Jaa8WWHLuzVuvFfny5t1frw4wYtnJ3jzcIkzy1PN6QjTYnKwJk2h2kyJN2JetQKAQ9jeE8fe4TS2dkcz + u8qRyQni3MJGMz5am/FxhoyPFXsQo09NlAbTM7RZK4bt1WUhnHw4iSsvZvPX23n89X42N99K5PJbsVx4 + J5rzB6I590GkGgCfPxbH5ZPJXPsii1uni/j9dAV8PgGOTuD3dyv5+dlCrj2cxpeLAsVG2fFugyXvN0o5 + yYkXx9uyX579lmwDVkrwtLLQgI3jxQ40u/PWUAIn1pZwblcDVx5p4tqeiZzbUMRXC+P5YjBIbJ4v52b5 + cW1uAD8vDuTX1YH8tVXex155L0+GwAvB8KqU74TCgTA4JOWH8vmIbPOxfPdJEH8d8eXPQ5789q47v7zp + y7XnA/jxMX/O7AjhozWhvDQrkN1TlOFgPSQYD6ArI0oC9mSastKoysggK/E/ADg+OYWq+nrmL1/Gc6++ + ylfffc/3537i2x/PqnXqq695/e23mSdBUVpmBs4uLgQHB0uyl0+jJGyFOdk42thgZWKEs60KR5Ul9uZm + eDs5EhsSSH5aIo0TKumeOoW+9ul0trYwuaaWKRMbWDw8h4NvvMmZT49z8uinHHz3PZ584kl27tjF5i27 + eGjXfvbvf5E9u59i7SqlF/AQTbJf3fgKKSvpmFbHlMYymusLaKnPV6tVNFWtAqYo6+pyaa7JobU2j6l1 + +UyrK2R6QzEdCgBurqBrSpVc23j6p49n5vRq5nSMZ3H3eNYM1LJl9iQeWdjC/qVT2L+kmf2LG3hsUQ2P + LqrksYVl7JtXzFMLq3lldROvrp7C04ubeGz+JPYtamHvkmnsWdLGlgVTWDlYz6qZDWyYP5WNC9tZN3cK + KwYns7C3gTmdkxjuaGaoYyr9HW00T5xITXUNJSUV5OQWk5KaQ1xCqryreELDlN4bYfgFhd5VGP5BkSMK + HlFgSNR/0d/r/UPlc3g0IZHxhEXFEx6dSGh0AqExCYRIGSylovC4RCIVxScRJWViUpok/pnkZEsCnptP + YWGRXJuStFdK0l5LU1MzLc2tNDdL2dJCa2szrVOamdraxNSpTbSJ2qdOYsa0RnlfjXROl3XTG2mbNonO + lirmNKWxsjZc/KEve4olsJOg76N8K74qtOCnfFMu5xhzWRK7s5kGfJuhx+lMPU6IPpEk83CeDu+LzXu3 + TJ8D4rcPii/+oMWa96epeG+qindaLNQ6OF3F0V5nNaw9PtuDTxTIO9uNo8Ouaimfj85yGVk/5MbHgy4c + 6nfg3W5bXutS8XqPHW/1O3Jw2J2P53hzbI6PHMePz4Z9ODYo2/c5c7jThg+mm/Feky6HWyV56rHk3LAD + Pw3Zcn7ImkvDKq4Mqbghy7cGbbkt390etuNn+f6mMidwvyWXu8243mfF7X5rfh2w5dd+O+70u/JzvxeX + +/z4qsOb1ybY8KjEDxtzDFiTpc+u8c48UuvJnhoPdo93Z2upA+tyLJkndrLb716med3DzGgTFmW5S4wQ + yrzyBKYXRFOSFkBspCsBfra4uJip595UhkbUN9RET18LPT1l+FUrEpKTmSxttmVqC8lpCVjamKJnNA59 + 47EYGI/DyExKkzGYmGtiaamLg6Mprm5WuDhZ4ORohpODmSxb4ixycrFUD/lqZq2Ph68D2flJ9PZPY/ny + IQYHWikpjCc6woXocAdio5xIivMgIcaXmHBvIkN9iQrzIzLcn+ioAOLjQ0hNUYaTS6a8KpeyilxyitJI + z0snJTeD5JxMYjPSiExJJiJZ6nNqIhFqAJxMWHYKobmpaoXkpPwDgf+Wsj6yIJvowhw1AI7LTyW+IJ7U + /ChyioMpqQhiwoQgJjUE0zLJn8l17tRX21NbaUV9pfjoCaY01pjRIj5juvil/i4Xhvo9mDPTi+F+Fwa7 + 7elpsxR7aMnMTkv6Z1iIDTKjd5oZfVPMGJhmLrZIvhMNtVkxr9OWxb0uas3vGBn+eaDVmu4mK7qkznc0 + WtI9xZquVmXYafncrKK90YZp9fY0VTrQUOZKZY4zGdE2xIfYE+Zjh5eDNQ5WFqjMzDEzNkF1FwArbbux + qVHasdKmJzOhqoqKkiKqywrFvlZLm51IT0sdnZOqaK8TO1pbTNuEfEmIxb5WZTOlQmxteTaTy7NolHJi + aQ61xZmUyzPNSY0lJS6SuKgwIsQ3BPn54uPpgbenO97eyj/sA9U9f338AsSmBRGXlEBDcyPrNq3jsaf2 + sWXnZlasWsK6DavZtWcHjz/5KE/K+u07NrN27Qo2bljL00/s5/lnn2b16hVUVpUTHR2lnqfRR4G/AX5y + bF+8fX1Q5pP0C/RTA+DNmzey99E9bN26mTWrlrF54zr27X2YF597ildefI5NG9YzZ2gWC+fPZee2rTz+ + 2H71NAUTJ00iNlH8aGwM0fFxxMXFkJYSR0l+Og0VhfL8y+lqqmZwag3DbfXMm9HAvPYGFogWdTawpLuR + Ff2T1RB45cwmVgzIZ9HyPmV+4P8A4FkddTRWZ5ERH0CQpxU+TqZ4OpjgamssPtcMR2tTeY96WBhrYKHM + 7W0+DpXlWLUslN60IkuVfGc1BnMrDUwtx2F2V3/DYEuVLlY2elg7GGIjx7aVcyilys4QCxtlbl9lTl+l + d+8I3DWx0MLEUlNKOZ6VHMNKGzOV8p0ypLR8J1LDYKuR7ZX5N/UNx2BgpIGJmba6B5692AdHZ1Os7eTc + tlo4uurhLHJykWVnTRycNHBw0MTeTgs7W/ms0sLeUkNiDC2pv4bEBDlTVZjItEYFABdSmhNFXLATAa6m + avm6GONqryvSx93ZCG93MzX0DRWbF+ZrS4SUCRGO5Kd6U50XxOSKCKZXRdBfG8XcxniWNSewaVoyO6bH + 8fCUcPZNCeCVbokHBwM5MezHN0M+nOt352K3ExekTf/UZcsFBf722nFlwJ4rMxXZclXs+Q2x57cG7LjV + Z8OtXht1z9+bA1bcnGWpBre/LnDmr0Ve/Cr+6XKXA181SK5UocsJydvO1BjxXYMZZ5vFpzRb8WOLOd83 + G/NlgxZfT9biXJuB2n8o/uTXBU78tsCNX+Y6cWNQmXfejhuzlGGf70oNgB05L9dyuk384mQ7idFVvJBn + yovZlryZ7cRL8TY8EWTMHk99HnLTZ6e7MVvcTdjgbs46d0tWeVixXJ7jSnl+64Jt2Rhqz6ZwO7bLs3wo + 3ImHw5zYHWLHw8HW7AqzZke4NZsibVgVa8u8GAf6oh2YFmlHY6Q9dVHO1MZ4UCd2fmJcMJPEPjRKW5oU + G0+DxB/NqVnir8TGlJXTXFxMQUI8SeHBRCn/dPP2IkLacpTPvyU+wttXrXBP+axA4LuK9vYnUWKmhMAw + onxDCfMKVsPfEfmrIXCou48aAKeIzShKiGV8bhqlGUnqUWxm9/fzkMSmr7/xPkc/Pc2nX3zD51+e44OP + PufQRyf4+rsLXLn+Kzdu/87Pf8CdP+H6L39x4dovnL14k+/PX+PU1+c48ukp3nz/CC/Lcd458LH6WG+9 + e5gHN+5kYtN0ouPS8PBWhn72V0Pf/1UK+FVk7+TzT6nIzlEZ4tkNC5WLtHNnadeOGJnaYevgRUh4Ihk5 + ypz7LTS1dtA3cx6r121lz+PP8v7hT/n6h4tclOu89RvcuPMH127/JvpVrv1nvj13iS+++YGjJ+U6D3zI + 6+8c5NDR43xy4jTvf/Axjz3xnHp0mvziCrz8QnBVgO3fANjL/x8p6xXoq4Dd/2gE+v53jXz/n/19Rd64 + eLjjG+BLRHQ4SZJb5OSmkJuXRH5+iiiJrKw4MtJiyEiPITMj9h+ly+e0tGiSkyIJCfbC08MeLy8nfALE + //iL//Fzw8PHRda54enpioenE57yvau7xEduNmKPrLC1M1PbLXMLQ0xM9TE2McTQRAFIJugZKKWp2DZL + zC1tRNZYSGmlkudv5yT7u6l/2BQRGU1GVjbVE2pplpxocHiIlatWsWfvbt498C4/nj/LrTu3+PmXm1y9 + eJaLX53kwJOPsKqtgc5kid/i/FkX6sFOT0d2Odiw3tSUpSZmLLRzYENSMkdWLufWx4fkJV6E327y2+/K + UM13/tHtP27y06XvOfLxe+x7dBtL5/WxeLCDjYsH2bdhKa89vIH3927ho8ce5vgT+zj9wnP88Na7XPjw + I258foq/Ll7kz+tX+PXGZX65eZHrV77lyrmTXPziA75/5xmOP/Igj3dNZHF6CIMBNsz1tWS+tymzPQ0Z + 9DJg0MeQoWBLFkQ7sTw9gOW5YSzJDGFJgj9Lw9xY5WfPWvEJGyWWfMTSkOeszXjBxpwn7C3ZI+9gs4cN + y72smeetQGBr5sv7WSzPYqmHIyu8XHgw0Jt1AV6s9nZlhZucw8Wexc52zHayGgHA9ibMszNhmcqENWbG + bJb3t8vClH0qM562N+dFiV3fl+s4mhzM+/GBPCd15dXYMD7My+DE+CK+ri/jjMQ5J/Oi+DzJhxOBNhz3 + NOdDsYuvS53a5+POgwE+co/+dIYH0ZkQSXdWCt152UzLzmFiai6ViXkUxeeRn1hCXnI5ealV5KRVkaUo + o5JsUWZmudQTUXapqJi0HEX/K/xVVPxfpMwb/G/972BwWnqBWhlpBWSmFo1IAboZco67UnoBp2RK/ilK + zigiJb1IPedvWlqJWhnKcoocJ0niktQMcjOzKM7PYXLDeOYpP2pe2E9XR5PkiKWUlmRTWl5AteTt1eOr + qKquZPz4CdTU1FJbW6POIydKXt/Q0EC95L91dXWMnzCeqsoKKivLRlRVIjF+HgUS42dmx0teEkp4lI/E + cI7SRs3EtpgSIv4nOd2PrLxguW6xEbGOePqaq+ML9fzfhroiQzUANjQwuytZNjRCXw2B/zMPsHpkFFOJ + j8w1JDaWeERiHx9nE4LdzImUdx0r9STV04ZMT1vyve0o9XFQQ+BKH0fGezlQI3Vhgqst412sqHC2oNLV + nCo3M8Z7mjFB2kOdv7nIkon+1iJbGgLsmST3MinQSdbbU+FlRYmnBXnupmS6GpHhaUKmbJ8eqCIxwEJi + F4kBXXVwlBjJTmIkK9U4rCQ2srHQlhhJHwdLIxwsjHGwNsbexlgNgC1VEsPJfSkAWJk/2c7OQPI12dZR + R2IxDZzdNAiLMCY11Yb8XHuK8u0ozjGjME2XgsRxFMXeR0X8vUxMuZ/2nHEMFuiwpNyIVVVmLCk1ZihT + g760MQxmaTM734h5pdL2qx2YXe1Ed4EtjanGlMfokR2kSZL3aMLc78Pf835C/UeTHDCWsmBt2qLNmRNr + zco4ezanuLAjw4Otac5i2xxYm2TDgxn2rM92YHWOPQuzVAxkmdOXa0FvtgldmcZ0punTlqzNtDgtWqPH + 0hytSXOUNpMiNZkYpkFdyFhqA0dTE3AftaKWcC2mR+nSGatHf5Ix8zKtWJQhSjO/C4BNGYrXoz3kASZ7 + j6LWeRQNHqOYIsdok+O1h2uOKGwsnXLsLrmXHt8H6PO9j5l+9zNfAcBR+iyKMWKhaFmiOUvvaoF8nuF9 + Py1yzCmuo2j3GkVXgOwfPI6eIA1ZlmP6jGWG1wO0yXOa4a0AYQ26vTXocH+ADifJ7V3vYbHfaNaHaLIt + XIOHI8bySPj9PB5xH4+HjOLJwFE8J3o5/D7ejBnHB6kGHFPgrzL8c6YhR7J0OZqrx8lSE05J7vpVtQVf + VppyptyY0xUGnCrT53ihJsdyx3I0ayyfZmvwRb7SI9iQ00X6HEm9j0Op94wo5R4+znyAzwq0OF1mwFd1 + ZpySmPWLdmdO9AVzbFYyHy4o5d2ljbyyZjrPrx/iqY2reGLTZp7YspnHt27j0c3beGTzFvZu2Sbawr6t + W9m/bQuPS4735K5NPLNrC0/tXM+jm8Rnrl/O7k0r2Ld9DU/t3sgzj2ziBfFdLz+xndef3807rz7GkQMv + 8OmR1zn16ft8c/JDThx6k3dffEKOtYXNyxayoKedeR3TWNzZxrLODpZ2drJpzhweXbOKp7esY7+cY/+D + S3hi/WKeUEbvWzHEpnk9LOmdop4CaXJ1CeMLcylISyYrLppofy/8nKxxkTboZK6Dk5kGHipNAhz1CHc3 + IsZTkTGxYgOiPQ0IcdIk2GEsoQ7jiHAcQ6yLJqnu2moAXBJsQk2sFXWJyrDPZtTGGjE+Sk+tujhlbmAT + JqWa0ZBixsRkY8bH6VAeOYaq2LFMSJB6nqRJY4YOU3OlnhVb0F2mUrOu/kp7OoutmJ5vLqUlXcU2TMuz + piXHmvpMSypSzMmMNCA+QJtQtzGEKj8MketSy1VLrQg3HWI8tP8BwBWRpjQkWdKSZP4PAJ4Sq0OrqCNJ + n1lZFizMU7Ei35pVuVasybbgwUwL1ksbXp9pw9psG1bnOrCqyIklhWIzZLvBPCtm5sh+RbZsrffiyZYA + Xpzsy8t1LrxRbc/bJRYcyDXgUKYOh9K1OZQhStflgzQdDqRo8Z7okCwr6z4UHc7U56N0vREInKTF+7Fj + eD/qAd6NvJ/3Iu7ngLQbZS7gozFjOJGgxalEHU4navJFzFhOhN/DZ8Gj1PMAfy/f/xQ/jotJGlyUc1xM + 1eaSPOdL0pYuZOtyLluHs9maonGcyx/D+bwxXMwby6Wc0VzLHceNrBHdzBRlaIq0uZ6myfUU+Zysya1k + LX6W6xuRpkiDWynK92O4Ivb1apZ8ztPh53x9fi4QKaVIgcLX83W4LOdVeu3eKtbl10pD/qo1h0abEfg7 + 2RoaLPir3pg/ag34pVqLWxWa3KjQ4HqFFteqdLlUrs+5El3OFmrJtWvJdY/jeu4Yboh+yhrNhTJzfmmP + gPmFjHI1HIUCgYNspKLYjyNI6dJufS/+VqMItxxFgtEoCs1H0eo1juUpVjxW4cprde4cafHl0/ZQDk4N + 5tk6LzaVOtCfbEhl4H3i6EaRLga1PNWChhxHapJVVMSIwxQHMDnDleZsTyaluVMZb09xlI0aAudHqtTw + tyhG+ZWUFSmBZiQHWRLvb0GMn8jfjNggs5EewPHiXNOsqJEK2JpvSXepBbMrLVhaY8UqMVpragzZWGfA + w81m7G02Z1edMVsrddiiDEdca8Rj8iCfnurAE822PNpgqQbAeydaq7W73oZt1easKTZgca4W80VzxGjO + k3JBjhbL83RZVywJtTJcc6MzjzS7sqvJia2N9mxoULFazr+s2oj5ZToMF2rQL5WmO/M+ujLup0dxsFk6 + 9Gbo0ZUmStFlMNOABbkmrCw2ZYO8mJ0VZjxSacw+ccz7yvR4VF7k3iJtdhdr83CxXH+JDjtKtdlRps3O + Km0emiDleAUAS6JfbcxD4gAeqrZi13hbkTWPyDN5epIlr0635MMBW75a4sa5Vc5c3+DAr9vs+OthFb8/ + bMrPO4y5vMWAHzbo8N0mQ77eaMLp9SZ8vsaUz1eb8/lKC06ttuLMGhu+WGHNyaWWfLZYxdF51hwetua9 + ARVv9qt4rc+WF7pUPDFNnr0yDHS1XGvJGPaU6/FUnTVP1jvwWJ0z+yZ68eKMaA4vKuCjZYW8MTOKx5sd + earFkpenWfBOuykfdhpzTBmWuc2Ak6LjrTp80qTFJ63afNaux4luPT7tHMdHHfdwfOgBflilx/WHLLm9 + 15Jfn7Tit2dU/PG8LX++ZM9fLzvBK67wkuh5V/562p0/9rlzc5Mdl5dZcGG+JWdnWfBdnxXf9tjwda+d + GgCfGvRVA+A90hBX5oxlfrY2s7L16cgxZnqeGVPFAP8NfxWo+28APNLj14KmPHMaRZNk+/ocIymNaC4W + Q6sA42ITmgqVuYAVjUDgKaU6zKjUpbd2LMs772ffMjGEe+0593YAdz4OgeOBcNJP5KkGwH9+JO/yfRt+ + fVmMw5O2sNkC5uhxZ5oGN+vHilEYx9UKUbkml0rHcrF4NJeK7+dCyf1iKO7ju7IH+Kp8HJ+JITlUqsUb + RRq8kKvN8xJYvCL3826VGwdrfXm/3o/3mwJ5tzmU52V5iwSYg5E6TA8aS0uwBlNjDZhf6ca61hB29Maz + dziDrV2xzK12E8dixIQILXF++lTHmoqTs6Q6xozqaF2aUrRZMEGSxGEf3l8Xype7Y7n5XBK/vpbMtZej + ufhKBBfejOLCexGcPxTJhaOxXDmZyI0zGdz+tpBfv6+C7+vg20Y40wLHJvPnwYn8/moVF7elcHzQh3db + bHlLjOjrE+14Vmm7BUasF8O9IkOLtSXG/x/a/gLMy7Lr+8W5lYZhuru7u7u7u7thmIEZhhmGoTukGwRE + EBVBQQTpBhPF7hYpxdbPXtdv0Pv2eZ73v//v3vs95vge67y6znPFfH9rneyos+aZTk8uzU/g/Y2lfLO7 + ka8freXzjcW8uySR12cE8spUN25MceGzfg/uzPPjp2X+/LYuAHYIngjij2f8+OOoH3+e9IXz8p2uBsIr + QXI/gutB/HkjmD/flP1e9eaXS67cP+nMrcOufP6EG+9sd+fVtd6cWejL0z1ebGlyZXGxq+gPP6akR9GR + lUhTVgolKUl/E8BKCehECUrbxOnZvHMn565c4ZMvv+Lzb77l06++5rOvv1ERwqfOnWPegvmqkpy2dnZ/ + E8B1NVUSPMZjrCdBlJoEIXramOrpYCbS1caKqEDZLyWB5upypk+exIypU+jtmExbbT2T6ptYNmcBV8+c + E8fsLd69foOrly5z5MhR9u17mq3bHmPzlsfYu/dZ9j1xiG1bdrFw3mImtrTSWFtJe1MF07rq6Omooqu9 + lKntxX+jp62Yae0lKjm1tYgpzUOY2liowhSF+G2RY1Tkbxm9E8vom1TKQEcJcztLWDK1iNXTS9gyWM5j + c6t5YkEN+xdU8cT8UmkXsHd+jrSz2Dc7jQNzcnlhaSXHltbxzPwqnpwr+y5qZN+SdvYsncTWBa2s6Kti + WW8la2c3sW5eK6tnNbG8r44FPdXMmVLD7M56BiY3MW1iM/VlpeRn5RAfm0hIcCRePgG4e/pKkOsm794J + cxs7zK3/gr2q1JwCSxsnFazsnP8BZZ2FAmlb27tg6+iOvZMHDs6e2Ln8BW/sXBV4Ya/8s81tKIND+aeb + s8DVwxMfH18CAgOJiY6RADGBtLQUcnOzKS6WoL6sgorKSiqrqgTlKlRXllJTXUp9TQmN1SU01RSr0FIr + y7XFNFQXMbEyg/6yUBYVebA6z55Hsy05IsHJZdFzb2bq8nGGNl+mavN1shafi537KEUhgDV5I1VDAhgN + XhLn51K+FueLdThXrs9ZscNnGo051WTEyWYjXmw04MV6Wd9qzLVuG17td+C1mU68NNORqzMduDLooJLX + Bh25NsOelwYcZJszV/sdOd9rw4kpZhzpEts31ZwT0605L9uvyPaXZ7ry6oCbjGlXXumTY3tsuNxpyoV2 + Pc43aXK5RV3GuQGfDVry1SyB2LdvB81VpaDvDVioCOD7A1YqEliR3/ebc1uZq3GqAXd6jPlhmik/Tzfn + p2kKCWzHrzPcZB8PvpzmycutDpyoFztXbsqeImP2iiO8v9Je4MCTlY7sKbZmZ645a+K0mOM/nOleD7E4 + 3ph12W6szPZhdnYAbSl+5MW6ER5kg7enKY5O+lha66DMizdEAKuhoaE+RADHxtPc2kpLeyvRcZGq8q2a + 2iPR1h2Bvv5oDIxGiRyJniwb6I/B0lwTJwdDnOwNsLfWxdZC+RW6LlYW2lhaamNupa2a89PO2YSY+EDa + 2qqYO0f0wtQ68jJCVRl5EcFWJMU5k5HsSVKMNzGhHgJv4sL8SIgOIjkumLSkMLLSIikuSKK2Opeqymzy + 8hNJzUogOSuZxMwUYlISCZPALCwhlrCkOEKS4whKiyfoL/I3839NAIfmphORm0FEdipR2YlE50STkBNG + Wq4vOQVeFBa7U17qRrXYpuoSWyqKzCgrMKCyUJfa8iESuKnGkEnNZvR02jBjmgMDvY7MkL4yvcuCKe0G + dLUZ0CN+Ts9Efbpa9EUXGYpe0mdaq0IEG6owo92YwQ5zVdnneYJZHdb0tZiryN9OOX97lZ4KE8Wp76g3 + oq3GgOZKPRpK9KiR+6nNN6O+yJHSTCdSIqyJ9LchyN0aNxuFADbB1MAYA10DzM3NVXq9sLCQmpoaapUf + osiYLiooIDczXXRSmmpu9Un15fQ0VdJdX8qUOtGntflMqclToUv5cU15Nu0lGTQXD5HAShZwXVEGVQVp + FMj7zpRvkBgbRWxkKOHBAQT4euHj5YGvjzcBAQEEBgahlKL2DwwgLjGe9o52tj66mWMnn+fw0YM89fTj + HDz0JMdPHOHcuRNcunCKYy88y8GD+zny3DOcfvEFjj3/HGvWrJQ+UaYiZQPEDnn7euPu7YGnlyfePl54 + eLnj6+dFtdimzZvW89yzBzgsOLD/cQ4ffIozJ4+JPTrHtUsXeO6ZA+zcuoXHduzg8KGDPH/4sGrexqaW + FunDCURER6nmK46NjSYjNZ6yvFRayuV91JfQ11qpyvyd0yn6fkoDC0TXz++sYUFXLYum1otdaFSRwH8R + vwqWTqtjcW+DCvN76pk+UXRpYRyxIc642+niYK6OrfEELA0VaKpgqjseI93RGOuPwthoJKYmI1QwNh2C + iZmsF2lkOgoDk5EyjkdhKG0j03EqmFpMwMxKXeyLlkDGqlzHwlZsubUmJpbqGMl2BYbKvJoCA5NxGMhx + egqJbDJWpEIEK8SvklGsZAYry39lBmv8TQArUNomJppYWelja69kAWti46Al38cIX38TfAOM8A8yIlBi + tYBAEzw9DXFx1MHZVslqGYud2Vg85D6j/GXc5cfQ0ST9sjGX4swwYgLt8XMyxNfJAC9HPRxt1HGy0cBZ + zu/hok+AlxmhPpYqRPhZkxThQGGa9IM80UViizqrwphWE8aspggWNUewui2SLe2h7GwP5MkOH16c5iP6 + 34+3Bz34WPT/VzKuv+u25bsea24Kbk2zUuFOn41AkQosRH9bDmG66P7eIfL3Xr8RdwcMuT/blF8X2PDH + Imd+ne3E7R4rPpa4820J0N+t0uaTRkMV8ft1mwlfiC37rFmfT5p0eLdmHO83jOOLSTrckdhJsSc/zxV7 + Md+RX+bZ88PM/0L+Cu72W6sI4JsD1nzUbcX1NhtOl4qdy9LnaIYp57IdeDHeimcCDNjrrs3jrrrskfe/ + 08OEbe6mbHAzY42bOas8LFntZcUGHys2+lmyOWCIAN4uNmW7vyVbvU3Y7KnPBm891vrosdLPgIVBxvQH + mtEZYEqzoDbIXEUAV0e4qAjgmnBfQSA1YaFUBYdSHhRGbVQ8bZnZdBQU0Sq6KEfG2P8/BLBC/gY6uxHy + nySwmyfR3gFEegUS7OavIn59nET/qOAh/cYDf0dXFQGc4OdLflwUlWJLchOiKEpPYbr4yUoG8Okzl1Wk + 7Ws3PuSNdz7j/JU3ufzSDT75/Du+//EPfvr1T34Gfv4Tvv8Fvvv+V76+9aMqE/jjL25x/Z2POXXhJQ49 + f5KnnjnKgUPHeHzfQRYtXUNJRYP0+xgcnb1lTHj8bxHACtFrbOagIoAVGBjbqghgcysXvHzDiU3IpLyq + iaa2LvpnLmCD+NRHXjzHjfc/4/Nv73Hz3i8qAvj7X/7k7k+/c+f+L3x790e+/O4u73/6Fdff/VBihFdU + WcCnLyrzF7/EyTOX2P/0c8xdsIzC0ioZw4H/RwlgVQaw6PGg0GBiE2PF5qdTVJxBaUmWIJMSQbHYHAVl + ZVlUVOSqUC52qUT2SU+PIzTEG28vx39PK+EvtiBQfNwA6QP+XmIXpO3rJnbITeyEg/jA1qKnTDG31EdV + NtpQCz19Bf8mgDVVmYR6otsMZbsJ+oZG6BuIFBibmMux1tg7OuPm4SVxVxip6RkUlZVQ39TIjJkD7Nz9 + KJevXebm7Zv88vvPgh+5d+cbvv3kBucO7WF5dwNdGcHMSfFlVYw72wId2OFmzSpzQxYYGzHHzpa1iQlc + eWQZ91+7Kh/x5n8ngP/4UUUAf/ndJ1x79azEWVtZuqCPFbN72PnIPJ7ftYFLT+7g5QM7eeOZvdw4+CTv + HTnMpydP8c3lq9x9803++PILfr/5NT999xX3b33Bz/c+4/6373LrrUt8fvIAr25bzj6JqRbF+TDobcF8 + 0RsLXB8QwM6a9Llp0u+lz5wQa9nHg6XpgSxLD2ZtUjCbYvzYHuLGo+5W7LTQY7+JLscsTDhpa8FRe9FJ + zrLezYrVzqaqLOD5LmYsdDBjmaOlCo84WbPWzV5gxyoXG1Y52PCIvTVL7SxUBHC/lQEzLORezPVZZKzP + colb1+rossVAl52y/Lhse9bVgrOhrlxJ8OdsjC/PBXlwPCqIK5lJvF6cxTvSv94uSORNuee349x5S/Te + 624SszgbcVyO3eNpzyO+LvQGuNIe4kF7TAATU6KYmJFEY2oyFfFpFMZkkB2dTXpcPmkJReLLlpKcrKCY + lBSF/C0ZIn//JoALHhDACsn7/x0BPEQCyzaBQv7+rwjgf5O//4UAFn3y/5MA7myisiKf3JwU8gpkfJYp + sWIppaWlQzFjhcSLCglcWU11Va34nQrqVKiWtuJ/VlQo+5VJfFlCWWUBxaXZ5BemkpOXSEp6JFHSZ7z9 + 7FTzf4dHeZCaEUJWbjiJqX4Eh8vYlW9jKjGJjvhHmlpqDwhgA7Q1DYegpS/QlfH7VyloJQv4wfQYEs8Y + iZ9jZamBo7W2+BMGBLkaEe5mSoz0vQRXc5JFpruYkyXfPs/FikJXS0qcLSlzsqDMwZxSBxMV+VvmZES5 + syGVbvpUeehR52OkQr2PKQ0+5jSKHW1SQSGBran2NKfCy4Iiic9yXQ3JcNUjRY6NExnurIWPo7rEV2PE + bx8p+mWU6CIl/hor/ry6+IM6WBroCcS3MtbDwlT8ODMdle4ylBhPmRLEwlwba4nP7Ox1BMoP78aLbh6H + j98EoqL05fsakZlmTG66AfkSe+fGjSMvegTFMQ9TlzDiHwTwqgpjlhXrM5g6lr6EkcxMHsfsTE0W5Cn/ + yzZnSbkVcwotmJppREOCDgXB40jxGqGaa9TLYRgBbg8R6z6CfK+xtAfpMRBqxNIwC9ZGWbM+WsZxpDlL + Q41ZFKrP0hi5VpI5C5PNRBea0p9uwrRMY7rlPqem6TM5SZuJ8Rq0Rk6gMWQMdSFjqQseT03QOKoCRlPp + N4pynxGUeQ+nQtAs2yaGa9AVJXopTp/ZSaJPk4xVGcAK5iXqMkPOpRDALR7DqHMcRpPrv5joN5pOOedf + 6AocQ7esU0o4/ycBPDdwPPND1JkfqsW8EE0V6bsgUleknuhALabIvgr5q2QAd7r9i26fUfT6jRsigOV9 + DBHAo5jkMpIOkV1usuw8iol2cg+Ww+ixG8YCOcca/zH/QQCPZG/QQ+z1G8YTPsM4IPI5WT4WPprziZq8 + LN/hmryry/Jdr6Sp81KmBq/lafGmfMP3y034sNKUD8qNeLtYl9dz1LmWPpqLSSM4H/cQl+Tbv5I+njdy + NHktS52LiSM4l/AQ5wUXEh+WfcfyRr74raUGfNhgxruTrHir25Ubg2G8Nj+NK0vKObOyjeNruzm8YQ7P + bFqlIn/3C57YtJm9mzezZ9NGFfn7+JaN7Nsi27Zt5MntSqnn9RwQPLVtNXs3reDxDctkn5Wyfg2HHtvI + 0f3bOH9kH9dOPcPrl45y/cox3rh6nNevHefNl09x4+ppzh15WnWudYvmMq93Cr2tDUwXzJE4c0FXF/Mm + T2bVgNjj5ct4csNqntm8igNyrQMblvDMxsXsWzuP3Stms2XRDJYOdDHY1Up3WwNttZU0lRVRnJZIYqjo + Hg87fMQ2uVro4GahoSKAA510CHXRJcRRi2AnbYKcNAm0m0CA7TgCbcYRYjuGCDs1EpzUSRffO9dXn9IQ + QyrCRW+E61MWrEVRwHgVlOSn6khtqqJ1HkCb0vAJFAaNokSpkhk1lqpYNRqSZSyk69KRa0xXgSk9JVZM + l/HYW2xBj4zJGeU2DFQ40l1kT2e+Lc3ZNlSmWop9MiI+UO7RWcn2Veb7VRNMIMRpCKHO6vIsajJuNUjz + 06YozIC6OBOa4wxpidKlNUqblnB1msPUmByrRX+qMfOyTFmabcbyDGNWSv9bnaLAiNXJJqyUsbwiw4rl + uTYszLFipuzbl27EdNlnUY4Z26pdONjizdEmscfVdpyQ+z+da8C5TB1VGegLKepcSFVTyfPJEzibOJ4z + gotJE7go666kaHA1VYtr8j6uJsi66LGcDRshtn44Z4IfUuGcjJHLIQ/zUvhIXo8ex1txE3gnXo135F2+ + FfowbwU+xAey/xeyrMzR+51s+y5xwt8E8LcpQ/gqZTyfp4wRjOLztIf5MvVhvk4dLtuGcyt1BLeTh3A3 + abRgLD8kjeNugrQF38eP/Tf5K/fwQ/Rofogaxb2YkdyOGSHXlHOkyLosNX7I0eB+rjY/5QzhRxmT3+dM + 4JaMQYUEVgjgn4o0+b1cH+qMocEU6k34s0afP6u1+UPiy18qJvBjuRr3y9S4V67OvQotbpXp8JWKBJ7A + 13K+bzLHcjdrNHcyR8mzjORmoSG/TA6BebkMc9QZhrPeMNyNh+NhMhIP05F4mo3Cy2wE/iYPE6I7TFUK + utJhBIMR+mzOsmBfgSUvVNpzpsGdE80+PFntxoYiO/oTDSn2HSlGbhjRXsPJiZKOnWJJeawY0QgjaiUw + VTKAm9JdqElypCTaivxwCwrCrcmPsCQvUpZFpgebEu9rSLyfCbE+JsSIkY32FelvTFywIakRBhJIGlAS + r0t9ig6dWToMFomxqjLlkRpDFQG8rkKD7bU67KrXY7u8lI1FSvavJo/VGfFkqyXPtNuyv9FiKPtXRQCb + 8niNOburzdguynNDkT4r87RZlK2hIoDnyEebnzqGZRlqrM3VYluZEXsbLNnbZMMewa5WKx4VbGk0YX2N + ASvLtVgi15yTPZoZacOZlvQvepNG0S+da4Z04r4kTaYnaDAnVVcGlQGrCwzZVGTI9iI9Hi3UYmeBOjty + x7M1e7y887FsUJA5nnXZaqzPU2NDvhpb5PzbyyYIFAJYS6DLo3LvO8QI/EUAP15twsFmE05NMeeVWTZ8 + stKJm+sc+HGrLb/vtITd/4UAXjeBjzdo88F6fd5bJ1hjyAdrzfh4rSWfrlNgw8errPhguSlvLzLh9XnG + cl4zLs8w5ayKBBZnv9uMAx2G7GuQ9182fogALtbgmRqFALbiyRoHDjR5cmJaNFcWZHJtQTov9gSxv96S + A/UGHG3W43S7Lpc6tHh5ohiqdjFwgldb1HilcQKvtKpzfbIYvG4drndP4KXO4bzaO5IPF6rx9Rodbm3S + 5e6j+nz/mAG/PGkGz9kK7OGwo8AJnhUccoWnPfhlmz23VpjylTzH5zOHCOBPplnwUa8l701z4M1eVxUB + vKdUh0fk/S/K1GJQ+UVOmg5taXqicPVpFkX2F5pyjP4mfxuy9FXEb12GAbWyb41866pkLWrStWmUbS15 + hjTl6sq+/50AnlyszvTqMTzSM4b9yzS49Jg1nx334qcrShapN7zhBTfc4HUH/nzZlt8uWvHrcQt5LmvY + YQ4LdPi1U5RQ/RhRDGO4pRDAxWO5XSTtotF8VziKmyK/LBrFpyVj+EAUyBvSjy4UjOdo9lieSh7Nvrgx + PCPj66QYlvPlblys9uDl1kBemhTGmRZ/9hTYsiBanC+/kbT6DhdHbAILih1Z1+bPjmlR7B1MZntPNAsq + 3WgX3VAlRq8sTIeySGOKI80oEp1QHK5FZYw4TAVabJlqy7Pznbm0xoOPdwdw+2AY3x4K5OsjAXx7IoSb + 54L57moYt69Hc+/dRH78OJPfvirh929q4dtm+HoifDEFPuqCdzrh5TZ+OljIR49EcKnbkePN5hyuMuFJ + 0RXb0tV5JH40K2Q8biox4ok2J17oC+KlpSl8ur2Sb/c08enmMt5emsbV/mDOT3bnfKsdr06y54Npbtyc + 68OPy/35bWMgf+4KgicC+P0ZH34/6sOfJ33goi+8FAjXgxHrI/cTxh/vR/DbuxH8cj2QHy54cusFVz7e + 68BbWxy4tsqR04tcOTzgye4Od9bWuzKvyJ2ejEAmZ8bRlp1MfXYqxSnJf5eAjoiKIaugkBnz53Pw2Avc + eP8Dvvj2Jl/cFIj88uZ3qmzgMxcuMGf+XGJiY7BVyjv7+pKblUVtdSVxUZHoamqgNmoEehoSXOhoYqav + jbudFTEhARRmpNBeV8XA1C5mKSWDp3TT0dhMV3MbjyxYysvnL/LZu+/x4Vvv8PK1a5w6dZZDh57n0Z37 + WLfxUXbueoq9Txxk9+4nWL1yDVPEQWtvrqNrUh0D01uZ3d/GYG+joF6FmYLZ0+qZM62BWT2yrruOmVNk + X8HMyTUMCPom19LfWUd/l8iuGtlezayplcydWs6iqaWs6ClmfV8J22eXsWdeJfvnV/LUgnL2LyjmqYUF + 0s7hwKIsnp6bxqG5WRxfUiqo4rmFlTy7qI7nVrRycNVkDqyZwmPLO1g3WKcigdfNbmLTgjbWz2kWJ7Ne + RQIv6qljXpfc96R6ultqqCnKJys5hYiQMLw9fVXzYTo4umBp44C5hQ3G5laYWFg/gBWmFnb/gJmV/T/w + 9zZpmwssrR2xtnXFxs4Na4ch2Dh4YuPoJXBXwdbBXQJCD6wVAtnKDisbW1m2x9XNldDQUNUc0ImJ8aSn + p5CTk0NRUbEqUFfKeFVVV6hQU1VGXU0pjYLm6lJaakporSmmvbaYtpoimqvy6axIZWZJMEsK3Vgtjuej + meYqAvhihh6vpGrwjjhVHyWq82mSBh+J3ntf7N7b4shdF4fvVQkwX8nX5VqxHhdL9Dlbps/JCj2OV+nz + QrUuz9fqckScnOerdTjRaMClTiuuTbfnpRmOXB5w5OKAAxcHBSIvzVTWOXB1wIlrgy5ii5w402vDsSlm + HBI7dLjThOPTrDjbb8/Ffkeu9Tnz0nQXsRnOvNxjz9UpllyYZMTZFm3Ot2hyqXkCr03W4eMBc76aZcFX + g+Z8O2jJdzMtuDdgyQ8zLLk/YM2PM21E2vC9kiU2zZSbUw250z1EAP/Ua6HKFPtluujmGS78NNODWzO8 + +GiaJ69NceNcm4M8oxVPFJqwv8icgxU28rxOPFthz8FSW/ZIkLc6cixLwsayLUepQOHFI6nOTIu2ozbM + jowQa0J8TfF0M5D+pZRR00JXKdP6NwGsoSKAo2LiVERXS1szUbFh6BuOR0v7X+jqDsfEcBTmpmOwNBmN + udEoLI3HYmuhjoutBD32erjY6OBgoY2t8mtz0wlYCMwtNVUksJWdHkEhrlSWZ9LX08i0yRUUZ4UQHWJF + SpwTZQVBVJdEkpcWRHqcP5kJIWQnhVOQHk1BRjRFWTGU5EZTU5pMS10ODdVZFOfHk5kZQ1pWIimZycSn + JBCVGEu4guQ4QgXB6Q8IYIX8zfp3FvB/EsF/EcCReZlE5qT9gwBOyfEmPduVzBwHcrLE78w2p0gClKJc + I5G6lOWLz1qqR630xYZqA9FVJnRNtKR3qh193Q5Mn2rN1ElmdLToM7FBl8lNOgJdOsVnmdpmyJRmfboF + PS2GTBP0tylZwJbMUeb97bJjRrsl3Y2mdInP2a5kGpdo0lSiRbO026rFHxBnv6ZQk5JMdQrSJlAm/kNt + gT1lWU6kx9gT5W9DsLvNAwLYFDNDEwz1DLGwsMTfX/R1YRFlZeUUiF3IzcklPS2NxPhYUuLlfeek01pd + THdDBT2NZfQ2l9HXVEJvY7EK0xqKmFpTQEdFLq2lGbSUpNNckimBcTYNZVmqeXFL5Z3mik3ISI4nKTaS + 2IhgwkOCCA8WhIWqMnaDgwIJCw8hNS2Zzq6JbHt0Ey+ePCK24SjHjh3ixInDnDv/IteunOGVq+c5d/oY + J198jvOnj3NBcOzIQdauWkaD2J342Cg5b4hqfl4/fx8CA5VSnIEEB/sTJvapUoL2tatXcOTZpzlz4nlO + Hn2O08ef5+rFM7z+0mVevXpRll/g8DNPc/TgQc6eOM6LLxxl86ZNTJrUQXJKGnEJCSQmS59LTpD+kEJt + SRaT64qY3lLOrInVzFURvvUs6W5ikcgFndUsnFLD4ql1LBU7pZDAy6YPkb//lQCeO1XJuC6kIjeKqEA7 + XKwVEnQ8VkpZQr0xmOupYWmgjoWMXQujsTIWZTyajcbSUsajwMJqCJbWY0SOEZswBlPL0ZhZyvECcys1 + zK3lHDYyRu00BVpDsNfBwk4bM2vRA5YK+auGsaWaqq3A2GI8RubjMTAdi75CBMt1/yKCdY3GqKBkBhuJ + PjA01UDPYBxaOqPQFOjJvasIYEsdbEVP2DqIv6D8UDfKjrgkJxJFT2VkuZOT701WtjcxMY4E+ZvhI7rK + 0WKcCt722sQG21JVHENXa4GMnzzKc8NJCHVQ/ZM2wM0QX1d9XO00cLHXxNVJG08PA4L8zAkPsFIhOsiG + tBhnGSs+1BUGM7EqnM7aMLrrQpjZHM785jCWt4SwoS2InR1BPDPFj9N9vrw26Md7szz4SGzBlz023Oy2 + 5paCHmtuP8Dd6QoBbP2AAH5A/v5FAD/I/r3Xb8DdmQbcn23Crwus+X2RE7/OduSO2JovJprwUZM+Hzfo + 82WbKd9NtOCm6I0v24z4tEmPjxu1eLdaIYDH88UkXe70mqvsyU9z7PllviO/zXfi/qAy3+9/kL9ie4Yy + gOVeZd/Pp9vx9mQHzleYczTHgONZZlzKd+J0sg3PhRjzlLeewJCn/c15wt+KPX7WbHIzZZ2bGWs9rVnn + Za0igDf5WrLF35JtCvkbaMNWfws2ehqxxk2Xle4aLPPQYoGXDrN8DZjiK3rL15iGAFNqgiyoDrGjOtyF + qjB3qsN8VARwVUgw5QFBFPsFUREaRVNKOpNEH7UVFZEbFyPfXcaurzcBqrl//+8J4L+gkMCRXn6Ee/hL + H/HD19kbL/FzPMXf8XJwlT7l+jcBnOjv9x8EcDTFGan0T53K/n1PcvHSy7z2xvu88ub7XH75bY6dvMKZ + 8y/zwcdf8+Mv8Mvv8OMfcP/XP7kjDaUM9Jc3f1CRrJ9/c4+3P/iCs5de5elnj7N+004V8Ttr7lI6p84g + LbMQH/9w7JyUEs9uf5O+CmztvVQYIn09HhC/HjJ23WR8u6mIXiUD+C8SWCGAtfUsMDFzFD/Sn8DgWDKy + iymrbFBda9W6rRw7dYl3PvqSr279yO37vz/IAP5T2r/y3fc/8fXtHwTfq7KA3/rgE1XZ5xPnLnP4+Gme + eOYwe/cfZNO2XUyfMYfcwjIVAayUev5fEcAKqatkNv+F/5n8VfA/E8DO4oN6+ngRKH0kKjaavPxMsVe5 + 1FQXUFujlOkvok50r4KGRqXUcvkQpF0nvmem2P3wMF+JYVweTCnhjn+wFyGRYnOixAaJPQoLDxIEqBAY + 7Kkige0cLMR3MUCZQ9jIWAdDIz2BLnqG+uI3KaWfFeiJbjMUH8loCAYmKjLY2MxcdK+Sqeis8ue9fL0I + iwgjKTWZ9KwM2ie1s33ndl55/RXu/nCbP/hN8Cv3f/iOrz55g9OHd7G8v4EphWHMyQtgVZon26Kd2RFg + x0o7I+ZaGjPb2YE1aSlcFLv3w/Wr8INCAP/w3wjg+3/8mwDeu28ryxb2s3bxAAe2r+alI/t5/9SzfHjq + EB+dECk29eMTx/jk1Em+vnqFOzfe4OfPPuHnrz7j/teCbz7htzuf8ts37/P9mxf58vhTXFu7gD0NBSyO + 9GCOlzkLPE1ZKHp7tqsOA04a9DpOoNtZkxk+JswRXb0gzosVSYFsT49gb0oET8cFcDDQjWecLXnOyoTT + NpZcdLTljLM9z7vZsU98l41OZqxwNmOJkwmLbY1ZZmvCcsFKwSp7c9Y4WrDawZK1jtascfg3AdxnZUCv + uT4zTPWYI99voY4uy7V1WKury2ZDPXaYG/Cspy2nIz05n+DPiSgfng/z5kRsCJfEJ3wtP40385N4U3zB + N1ICeDPWlTcDrXjF04SLrsYcdTNnt5cdK/yc6Al0pCXMhZY4P9rSwmkTX7MuPYnSxBTyYjPIjM0mLb6A + 5MTiB+SvgiJSUhQSWNapyN9Cwf93BPBfJPB/EsBK5u9f2b//EwH8z+zf/04AJ8Wl/U0A52dn0FRfwdzZ + 3SyeP11i9UZKS3LIzEgkS/zoouICSkpKKCkulfVKhm+5igguK62ivKyaivJqqqoUArie2tpGFSFcXV0j + qBJUUFlVSnllAWXlOSLzKBLfUqkAFBntT4R8q4SkEPEZ4skvSiApLYSgUBlvriaYmmv9TQBraWmpMn+1 + NB5AU0+gg4as/ysL+C8CWM9QfCQzNeystXG118fXyZAQ+c7hbibEuJoSJ0hwNiHJ2ZRU6Y+ZglwnU/Kl + fxY5mlMiKHUwpdTJmAq5jyp3JePXgDpvA5r8jQVGqh9CtYpP0ia2tdXPimZfaxWapN0UaEu9+HyV0i70 + NiHLw5A4Jy2Cbcbhaj5C/HclBnsYff3h6OqMRE9nPCb62uILGmCpbyTSCHMDA0wNdTERXWVgqI2BvhZG + hppYmOthY2OIo5MBTs66opc0RLeOF103VnzkCcREaZOSqEdWqh6FaToUShxeGDuK0tjhNCSNpCtjLAO5 + 6iwt0WNtjTmPlBmp/s/dnzCCweSxzMlQZ1GuHitKzVhZYcWycmvmldjQnW1GdbQmOf6jiXV/iADHYQS7 + DCPW5SFy3UfRGqBNX7AhC0NljIdbsDzEjAUBBgz6ajPDT4NZoTrMjjVkZrwRM5KMmZ5uSk+GMd0ZRkxN + M2Bysi7t8Vq0RKmryN+qwDFUBoxVoUIhf33lGbxHUuIznHJBU4ga7RH/JoAHE0Q3iJwXp6fC7Dgt+iPG + 0xkwgjavf9Hi8RDtnsOZ7D9WVb2wK3AsnYKpAWPo8R/DNIXA9RpFn/cIZsh1Zst1ZwWOY7a8UxWC5RlC + NBgM0mQgQHSh10g65PknOf+LLvfh9Cjz/6oI4HEqArjLYwyTVQSwgtGq9kSH4bRYDaPFfBhT7IYxz30E + a/zGsDV4HDtDRrMneBSPBz3MHv9/8YTfMFUm8MHghzkaMYYzSVpczTLmUro+F9O0RGpyWb7V5awJvJyr + yZvFBrxfac6H1ea8Ld/0coYaZ+SbvhjzEMcih3FC5Pmk0VxOV+OK4HzKaE4nDud0wkOcSxoh51bjjSJd + 3qk04eNWWz7oduKdfl/enhfL60tyubqilrOrJ3NifT+HN83nwObVPLllI/u3KATwJvZu3sTjmzaI3CjY + wL6tQ3P9KuSvQvQ+vWOtQJGrOSDymV3rVVm/x57cwdln93D93BHee+kUH71xng+un+P6lRe4evYQF08+ + w+kjT8r51rF2wSzmdHcyvb2ZKY01EmfXM7tzEgt6upkzeTIrZsxgxzKFAF7DkR0beW67XGfjMp5ev5B9 + a+ayZ9Vcdq6cy9r5fSyb1cOCGT3MntbJ4NRJTGmqprYwi/yUKFLC/QjztBM/1BR/B12CZJyFOOsR5KBF + oDItqb0GAXbqBNiOVyHYVo0IuwkkOGqQ7q5Djo8BxYGGlMh4KAvWp8hfk3yf8YKxsk6dijBNypT/iT9A + sfTlgsDRFIeOpTxyHFUxatQnaT4ggE3oyjeju9ia3jIr+gT9ZTbMrnFmTq07/RUuTC12ojXXgao0G3Jj + TUkM1hN/eoKMTzXxn9Xl3tUJdZ4wJGVZIYBjPBQCWIeicCNq5ZgGGZv1kdo0RmrSGKZOU9h4OuK0mZ5i + zJwsUxZlm7Is05iV0v9WpQpSDFmdYsKKFFOWZ1iyONuSudnm9GUYMi1FT47THSKAq5w40OzJ0Ua3BwSw + qYoAPpOlw9kMLc6laQgmcDZVXYXTKWoSx6hxTkUMa3BZgdLflQzh+PGcjRrFqdCHORXyMKeDH+J0yEOc + DZK+HTKcq+GjeC16LDfi1Xk3SYP34ifwduRI3gkdzieRo/g6To1bog9VkPPdVEjgpAcksFzzHwRw8sN8 + Kfg6ZTjfCG6mjORW8hDuyDi6I7ry+6Sx3PmLAE5QCGAl63cc30eN4Z5c7074w9yKeIibUQ/xXdzDfJc6 + WlVK+n6eBj8V6vBLgS4/K8jT5gfRyXcyx3ErXY7NkX0KNPi5RCF79aHWkD9rDPi9Wlegze9VmvxWqc7P + VRP4UfBDjSbf1+pxu1qfr8t0+LJYk6/z1fkmexx3sseoSGClBPStEhN+6wqDhQUMczN+CFfjf+FmPEKk + QgCPwcNsLJ7mY/E1HUmQwTDiTIZRJEqrJ0ybxfH6rE81YE++Oc+UOfJ0jTs7ypxZkWdLT6IRBaKgo5yG + iZF9iLQQ6dhJYkRjjSmNMpbObEtzmhONGS7UJDtQFmNDUaQ1JVF2FEbbUhRtQ0GkFZmh5iSJgU30MyXe + z4wECWDjA82JCzAmNlCfpBBdMiJ1KBBDVCkfs106zEChPkurTVldZ8zqKl3WVWiypUqbHfKylLLPCgG8 + o1KXfQ1m7G+15ECbLfvqzdlTbcjuaiORCgFswe4qMx6tNGVbuQkbysQhLdJnYbY688Q4LkgezTL5MOvk + IynZtkr28BNNEly3WPLkJCuenGzD423m7GwyZpN8oLVl6qwoHC/HjxLjOpxB6VDKRPuzpTMPSsccTNBg + UZo+j+Qas77ImC3FhmyVDrElT51NuePYKB9tTeZYGWyjWJYm105TCOhxsv8EVudPYFORBlvk2RRie1u5 + DtvLddlRYaQisBXyd6c8w75aI55tM+FcryXXF9jxxToX7mxx4redDrDHGh7/JwH8+XoNPlmvy4frDPhg + nREfrzXh841WfLPZnpubHbi5yZFv1tvz+WorPlxqxptzjXh9lgkvDZhyod+MM30WHO+24FCHMU826LKr + dBw78sWglWpysM6UAzWWPF3nwJE2X87PiOfK3DSuzEnmeJcf+6vNOFCtw9F6bU43a3GhTYNrLRN4SUGz + Gi81jueaigDW4vUOHd7q1uPNbi1emjSSl7qG8/bMMXyycAJfLFfn6zVafLtBBtQuI/48YA+HnIdwUPCM + k8BNRQD/+agL36+x5usFpnz2gAD+bLolH/da8Z5SdnSqI6faLHm8TBylXA2Wi1M0O0efzlQdWlJ0qE/X + oSFLIXH1VPjP7N+GTH1qRVFWpynErzYViZqUJ0ygMllTggk5JkuPZjlfU7aOHKMl0KBJ+tYQATyBvppx + rOubwNPLdLm004ZPjnhy/7wff1z1glcEb3jA6y7wsgN/XrHjt5PyPY/YwWMilxryW48695vGcq9yDN+V + juFW6Vhul40TiJTvclPkF7Lu04rxfFijxRvy7s8Wq/Ns1jh2xw9niyjY3ZFqHMm04EyRMxcrPbjeHsIb + nRFcavXnyWJbHknSYZriXHn/i46QMSwutmdDuz+PdktAOJDEzulxLK71YnKqKXVRupSG6YguMKUwyoy8 + CCPyxNgURI2mVRyPZa2mPDrNjMPzLLm6xpEPH/Pikye8+OygD98cD+bW+VDuvhLF9zfi+OGDVH7+PI8/ + b1Xx550muDMJ7naLnAE3BV8KPuzlz/PNfLcni9cXBfCijM/9MkZ2iuJdnzyGpdEPs0IU+KMVZjw31Zvz + 82N5c002Xz9Wx7d7Gnh3VQ6XB8J4caIrz9fZ8ILoiIvNltzocuTzQXfuLvXlt01B/LkrmD/2+vPr0178 + 9rwnf57yHiKAXwkcIn/fj+KPDyP57ZNYQQI/vhXFnQsBfHnYk+ubbbi0woYX59pwqN+evVNc2NDkzLJq + FwYKPOjMCKI1I176SjLV2RKkJSaSGBlDVHgUCckplNXUsWLDRi6++ipf377Nt3fuquRf7S+/vcm5S5eY + OXsWYeFhWFpa4uXlSVZmOjWV5cREhKM1QY1xIx5GZ8J4DLU0MNHVwtXOiuhgf4qz0+lorGN2bw/z+vqY + 1dPLlJY2utsmsWbxcl6/fIWvPvyIT997n+uvvsalS1d44dgJHnv8KdZsfJQt2x5n1+6neOyx/WzesJle + cdKUssLdU1ok0OxiyYJulsyfIpjM4nmTWTR3MktmT2apYNGsSSwcnMiCgUksmtnBQkUOdDB/xmQWzuyU + bR0smDmRxTPbxJFrYflAPSv6KlnbV87WwUoem1/J/oU1PLOomgMLyzmwqIRnlxbz3NJ8jizL47lFGTy/ + IIvTy0sElbywuIITK5s4uX4yL27u5vjWPg6u72X7glbWzKxhw+wmdizpYMvCNjbMaWTtYCPLemuZ31lN + f0s5k2uLKctJJT0umvDAILw9vHBzc5cAzVWV/Wtl44CljT1W9o5DsHPA2s7lAVyxsZf9HN3+gb+22zi4 + qjKA7WQ/ewdPHB2H/sFmr/yTzUUhmv1V2Rn2jl7Y2Xtgb+8p13TFytoeGzt72dcJd+WfrQ8I4PjEOFUW + sEIAFxcXU1tTQ3NzIxMntdE+sZWJbU1Mlu/UNVG+lchpE+vpba+lb1It/W3V9LWVM9iUw4LyUFYWu7Mh + z57d2RY8n23C+Qw9LieN59W4sbwVP473xMF6R+zdW8nqqvLPr4uzdz1Hh+ti715VgpRSQ86U6HK8WJsj + xVo8W6LBQbFrz5SKLirX5GidLucmWnCpx47LfQ6c73fg3AzBgKNKXpjpxEVpXx504cosd2m7cGq6PUen + WPDMJEMOdhip2ien2XC+154r0xy40uPEtW5HrnZZc6nDnDOtepxu0uRciwaXWtR5pUOLD2aY8sWghaoM + 9DeDylzAQxlZP8ywUhG/P860fUAAW3K7x4ybU4240206VCL0bwLYml9kXP8004V7gx58N8efj2f6cr3b + nfMt9jyVpyvQ53kJsk/VOHKyxomT1Q4cLrZglzj/28WBPlzjxXO1gaxOtmWyrx7lXvqk+RoRItLLTQ8H + Rx3MrTRV//TQ0lH+UaKOpqamqixwdGwszW0ttLY3ERMXosr61dYchqHOv7ASn8/Bchyu1mp4SUDj52KA + t5zL3VoDDxtNPG21cZPz2pmMxdJoDOYCM5Px0oe1BVp4e1tRmBtN7+RK+jsrqCuOIi/Fg5qiYOkvGaIr + SmivTZX18dQXJ9NQmkpjSZoEWEnUFMRRUxhLU3kSk+qVUu9plOVFk5MZSWZWLOmZCSSmxBGTGEtkYjSR + yTGEC4LTYwnKiCMgMw7/LIXsHSoH7S/yLwLYX0UApw0RwCL/IoDjc8JIyvQkKc2BxGRzEuMNSEnQIVMC + lRzps/mZ2hTlalFWpEW12Im6SrHPjUZ0iE83tdOaaV12dE+2ZHKrCW2N+rTUaNMqdrO9VpuOJj26Wgzp + kvUKpjQZ0NNsxPQ2U2Z22DBnqgOzpzjSJ75nV70JHVUGNJXoUCMOep04+fUlerRUGtEk46EmX5v81PFk + xo8hP1mHqjwbKnKcyE5wJCbQhhBPGzzsLLA1NcfM0BRDfWMsLawJCAgiP7+QvLx8UlPTSU5KJTYmltCQ + YCLDgslKjqOhPJ8pDeX0tlQyMLGa2ZOqGZxYKahiZrt8x+ZyuuuK5P5ymViRTXtlLm1VebQIGqsKaKws + pro0n5L8TPIykshOiSdVdEmy6LzEeLFJCsETpZRSjiZf3n9nZyvr1q/g0KF9vPD80xw98hQvHH2aF48f + 4uzJw5x+8Vmef/YJjsj2k0ef4dihp3j68UdZvnA2zfWVpCXFk5QQQ1KinDc6XM4fKc8VS7IspyREU1Gc + x+L5M9m3exvHnpNzP/sUx587wOljz3Huxec59cKzvHDoAEeeeYqjz8h1nzvEof37Wb18OZNa28jOzCIt + PY30jFSyMpIpLUiXZy1gWksZs+SdzOuoZUGnQvbWs6ynicVddSzsrGLxlGpBDUt6FML33+TvfyWAVRnA + bcVUSt+OCbLDzVYLB4sJ2BiPx0J/DBZ646Wtgb2ZJo6WmjjZauBkPwEnJzWxG+NFr4/HUYJ25R98js6y + n8DWaQJ2TpoiNbF30ZJ1CnRkWRtrGcdW9hpY2mtiYaeUhFZI3/EYWYzDVKSZ9QTMbNQxtVLWK3N/j8PQ + fBz6ZqPRMxmFrvEodAxHCkahZzwaA7PxqkxgHdEbWtrDRb+MRNdAKVc4AQsLDbFN2ji46BAYYkVapheF + pYFU1obR3BpPx+RUsSWplJaGkZLkRliQJU7W8kxW4/F10iE+1I66sjimTSqip72AqoJIUiKcCPEwJsjD + CD93fdwcNXCX5/Nw08XHW3SenCMi1IZIQWy4LVmJrpTn+IheCWFiTTiddaHSv4OY0RrK7NZgFrcEsLYt + gN1dQTzbEygxhz/XZ/vxwSwP8fHt+LLbim8FKgJYcKfHVoV702242yftB1nA/0kAf68qCf0XASyx02wj + fl1gxe8L7flltr0ca8XNLgu+nGTClxJ7fSv25Zboje86zPiqfYgA/rBeg3erx/NBgzpfTNLnjsRnP860 + 46fZDvwy15HfF7hIW871nwSwXF8hgG/3W3N7pj1f9zvx/lQnLkncerzAiJN5FlwtcuFcmh1HI0w56G/A + oUBjngu15lC4HU+F2LPJ1Yg1rsas9bBivZc1G32s2eJrxTZ/K3YE2fCo6BelvdHLiFWuuiyWvjdf+t6g + uxZ9nnp0eBvS7CuxfIA5NfLNK4PtqAx1oSrUnepQb2rChgjgsoBAiv0CKQuOoDY+ibbcPFoLC8mJjSE+ + OJAwXx+CPN3/9whgQZiHD6FuPgQ4+6jIX1dbF1xsnMWGiX9j5fgPArggLooK0VEFKQmiXwtVcwAfPnSY + ay9d5423PlKVcj568hJPHDjK4edP8+bbH/P9j7/zo5JB++Mf3Ln/gPz97gc++VKZA/gmn31zl3c/+ooL + V6+z/5mjzFu4kobmyao5eQtLaoiKTcXNM1DGofIDvH8SwNbKfL8qeKpI36Gyz0rmrxvmli6YWygEsNPf + BLCeoS1auuYYGNmK7yjP6h5EUGis+P1ZMsZamT1/BYdfOMub733KN7d/4t7P/J0BrBDAQ9m/9yQW+EHu + +zbvfPS5PPNbqgzgfQeeY8XaTcxftIL+wblU17cSE6/cu+JH/p8jgN29vPDx8yVA+cFQZDgZmSkUFmZS + WZGnIn8b6ktobCxVoUlsUWNjGfX1xdSLTaqpzicjPY7gIE883O1VWcD+AR6EhPsTkxAh/kIMieIvxIvt + iU+IJDEpioioALmeKw5OVpipCGA9FUzNlLaBvGdDDI0NBEbyng0wMDYUaSjvXoERphbm8o1ssHN0xNXD + DTcPD9y93fEN8CU0IlS+dyR1Eh9te3Sb9KnXpf/cBf4UwC8/3+bzj1/jxSPbWTJYS1eF6KSyAFbmerIp + 2ZmtMiaXyVic5WDKoKczq3LSOLdmGXevX4H7N+G3/04A//Dn93x5S5m7eogAXrp4BhsfmceLT+/ko6un + uPvmZe68dp6bL53mm2un+OryGT45f5LPr13kltzfD5++z4+ff8j9Lz/ipy8/4PdvP+LPr97n5+sX+fro + E1xaPpPdVZksDXdlgZc5i1QEsDIPsA4Djur02IylUzBN7M0MLzNm+duxIsKb3akRPJsRy4nUSM5EB3I2 + wI2zLnact7fhsqMt553tOOYqOsjFhh2O5qxzUAhfQ5Za6rFMsNxClxWClRYGrLI2Zp2tGRscLVnrYMlS + O3MVAdxrpccUU12mGmrTp6/LLC0d5mtos0zkI7o6bDTR45CvM6di/DgTHyA60IvnI3w4GR/K+dRoXsqM + 59WMKF5LC+F6si9vxLrwerA1V31MOetuzBEPU3Z627I8wJ6eQFvawh3pSAmgMyeKjvxkGpUfYCclkx2X + TnqCQr4WkJRcJFBIYAWFKKWf/1n++b8SwNmC//MEcPz/QwK4pbFSRQAvmjedzo56iosySUuNF/8omQLV + nL4lFBUq8/+WDsniMkqKKygtqaS0uJLy8hqqq+qpqWlQEcHV1UpWcI0K1VWVVFaXUFVdTF1DGTW1Sjnp + XDKyEgTx5OWnUFKWRXFZhry/CPyDXHB0MsXYVAvtv6e20VCVfdbQMEBDXaAhbU1tNLQ00dQR/AcBbCA+ + lqX4KE52ung6G+HvYkyoq4nYByOiZNzFyHKsrI9zNCbRyYQUkZkORmTZG5HnaEqhkxmlTuaUuZhS5WlO + nbcpTX4mNPsb0x6kwISJIWZ0iE/SEWxDe4Alrb4Cf0smiq83WfpPV5Q7reLT1Mr2En9zUpw1CbEcjaP+ + MMwkBjPSHoae9kPoa4/BQFsdE109zHWNsNQ3E2kiy0YYyjoDPV309HTQl35uZKCLhbkBdramODub4OZu + KLZBW/STuuinMXh6jZQ4X434GA3pp5oUpmpTmqxJafxYKuNH0Zwyhu4sNWYVaKqmLdxYZ8m6ClPmZ6rR + H/cQg0mjmZeuxpIcbYntlf+nW7Guxp7VdaITKpyZlGpMSeh4Un2GE+4yjAhBnNMwctzk3P5a9AYZMi/U + lCWh5sz1NWDAS4tudzU6PcYyxV+d7nAtpkbJOJb4qyfVlO6MIXSlGTM51YC2eF0aozTFvxhPuf8oSv2G + UOIzklKfURR7j6RYrl3mO5xGec62SA2mRIt/EqvHQJwug9E6zJbl2TFa0lanL1yuGziCDr+HBSPp9BtD + l//4B1DuaSw9AWOYLnK6bOv3HcuAyL8ww3+0YBwDCgLG0Sdyuu94gRznpWT1PiwYTrfnaHr8xj4ggMcP + EcCe41SZv5NcR6sI4HankbTYPESjxTCaTIcI4DluCgE8jq3BajwaMpY9CgkcMoI9gf/iiYBhPBE4jAOh + IzgcNZaTEg9eyjHhQqYB55XsSYlZL2ZqcDZ9HGfTxnEtR4s3y0x4r9qKtyvNOZ08juejHuLZ8GEcDBnG + sxHDeCFmOCeSRnE6ZSynksdwInGELA+X5VFcztXg9VID3qmz4OMOZz7q8+L9wRDeWZjE68uLubqqibPr + pvLihlk8t2khB7asYf+WDSo8oRC/Wzby+KZ17N28XrCOfdvWsn+b7LNdwWqe2bmW5/Yo2b5bOf70Dk4c + eJQzzz7GpRf28/Kpg7x39QQfvnyGD18/x/uvnubqmYOcPPIYz+7bwuNbV7NKYr25PZPpbWukq6FGUCXt + Jomvu1g0fRpzOrtYMWOA7cuW8bTcx4k9O3hh10YOblrOk2vn8/jKWexaMUu2z2Ld/H5WL5jB6oWDPLJg + kJXzBljYP4W+iY1MlhhZqXxVoExFEaZUnrEmwsOEYCd9/O008bXRwFtiK1+Jp/xt1AiwnUCQrToREnMl + OGqR7qFPjo8hBX6GFPobUuyvT4GvJjme48n1GkORjAOFBC4O0aBIZFGwBoWB48kPHCtt6fcRalTFqFOf + qENruj4duWZ05VvQXWJDT4k1fWVK5q89s2tcmVPjzowKV7qLnGnJsaci2ZqsKBPiA3UJ99Ik3EODcPHf + w9w0BRpDZPADAjjKU5MUf10KI42pjjWjJkqfqjB18ePVqA1Roz5sPBPjdOhJMWJmponoCCOWZBmzItOQ + lWliq1MMWZNmxgoZx0vTzVVlogczjelN06U7SetvAnh7tUIAezwggG05UWIq8YoBp7J0OK0gQ2MI6eoq + nMoQpKpxOk2dc+kaXFCgkMSJapyJHc3J8OEcD/4XJwQK+fsXlHLQl8JH8Ur0GN5IVOc90X0fJGvxXsxY + 3o8Yzeey/maiBndStLiboslt0YuqLGCFAE6awNcyXv4rAfxV0gjVnLwKbqaM5laqQJHJo+X4saosYIUM + VhHAieP5Pm4s38eO4a6K/B3OzdBhfCP4SsbeN3EPq8o731GRu1r8UqLHb6X6/FpswM+FutzP1+Reznhu + Z46RfcbxfZ4aPxap80u5Qvjq8FulNr9UKJm/Gvxaqc7v1Rr8VqvBz3Wa/Nigw/0mQ+7WG/N1lT6fyzFf + FqrzTa4at3LkfnLGcjN7PHcqzPm9JwqWlDDM134M3rYj8bQajbv5aDzMx+NhMR5PCzV8zMcQajmCRIeR + FHmOpSNCl75IbRaKkl2bYcy2PAkeC+1ZmWPN7AwxenEG5PqPIVKMQajrQyQFaVKUYEaRQgDHmFCfak9D + uhMNGc5UKwRwrA3FUTaUKuRvzBAKIi3JEsORKsY1yd+UeH8zEgIspDObERtgRHSAjrR1SBcjkhepTmnU + GFpS1JhRqM+yWnEsG01ZV2vAhipdtgi2K7JUk03FE3i0Wp99jWaqEtBPNlup5v3dVWnArgpDFfGrEMCP + idxdZcHOaks51pKNYhhXFYqTmqXOYvlwK9NHsjF3PLvknPtq9XiqyUhVtvjZyRY8N8WKQ50WPD3RlD2N + OjxaI9ctV2dN4ViWZ49hUbqCCSxM1WCedM758RosS9NnXa4Jm4pMVATwlkJtNuZNYJ18sFVZo1mWMYr5 + qSOZlzqKeUoWsij5ZTnqrJSOsr5YnN4ybTaV6bClXJdtZUq2s6EKOyuMVc+1v8GIIx2mXJhhxY3Fdny9 + yZUfHnXmzz2OsM8G9ioEsB73t+twa4t0mI3afL5Rn082GvPpBnNZtuLbLfbc2y7HbXfn+23u3N3sws31 + Dnyx0ob35prw5qAxr8ww5Uq/Bef7LDnZbcnhSSYcaNRld+k4dhaO4QnpjM/WmXKw1oqDDQ4c7wjg2mAi + 1+akcnlmAscnebO/Qo6p0OZojQZnGiZwqUWDq80TuNasxtWm8VxpGM9VFQGszesTdXlrij5vT9XllYlj + uDbxYa53j+S9gTF8NHcsny1W47Nl0vHlWX573BYOuMJBhfQV+ZQzPCnt/R6w05VfNjhya6kVX8425bM+ + M4G1igB+t8eGVzpteLFZ+oa8240FEmgUGjA334jOVD2axRjXpepQn6GtIoGVjN+WPGMVmrKVss8G1KTp + UZWiQ0WiljhgGpTEqkl7ArVpOrJdT5UF3JKnHKdLS762QJO2Ig0mlw4RwBv7tTi0zJBL22348BkP7p32 + 5feLXnBV7v01d4E8z8vyLa868sdZOzgm7SdErjbjjwFRCK3juVszlu/KRfEpxG+lGnerJ3CvWp3vaibw + VY06n9Zr8HGLATeaTEQxa7Nf+tjG8IdZ4T2M9YGj2Z9kxLE8B86XufFGWzA3JodxpcWbZ0pt2CjPNxA8 + gkmyb2fwSJYV27C53Y9d3eE8PiOeXdPjWVbnw9RMSxpjDShXSmFEmVEgyI4wJCtCSzCa6pRxzJSxuqpV + i8e6dTg6x4iX1tny7i4XPn7KU0UA37kUwf3X4/jpnUR++iSd374uhHu18EOboEuC5l74aba058BdwTeD + cKObn1+s4qPtCZyd6cZj0r82ZY1hZfzDLBCnaFnCKB6rseLF/mBeWpHKe5sK+XZvA1/urOblhYkc6/Ti + YL01T5UZy/Pq8WKN3NdEKz7od+bmIi9+3xICj4VKH/PlF+lPvx724M9TXvx50QdeDYR3I+DjOH7/LI5f + v0jm968yuf9eCjcvhPPRM75cWGnNsdlWPNNrzZ5OW7a0OrKyxlkcbTd6873oyAqlWfn1cU4ylRKAZick + EB8ZQ3RULDkFhUzu7mX3Uwd4+5OPufvLz3z3ww98e++eCkr7m9t3uHDlKjNnzyEkLAwLS0s8PT3JzEij + urJMlQGsp6nJhFEj0decgLGuFmYSbLhJ4K4QwKV5WXS1NDG3fzoLBwaYO72PnvZJ9E7qZN2ylbx57WW+ + +eQzPvvwI9564wbXZPnEqXOqecWUEnWbtj7Gtu172bXrCbZv2c7MGf1M7Wqnb3oHixZMZ/XKmaxZNcja + leKMrehj1bI+Hlnax2rBqsXTWbloOitkv1WLlWXZZ8mAYBZrxYFbu1yOlf3XL5vGxmXdbFw4kfVz6tk8 + p4bdC+p5cnEdh5bUc2RZHYeXVoos49iqMl5cVcTJRwp4cUU2J5bkcGFFEeeXl3NqaQWXNkzk8vZpXNzZ + z/ldszi2fSaPL+9g05wGNs1rZveKTh5dPoltC1vZOKeJpVMrmN1ayNSqbJoKJYhOiiQlOpSYkGBCAwIJ + FPj6+uPh4SNBmrcEaEopU7+/4eETiIf3v+HpG/QPqNYpkP3cvQLw8AzA0yMQL89gvL1D8PIOxdsnDB+B + t7Q9PeQ4d4FINzdf3Fy9VHNy+vj5ERQUSEREhCoTPEEhgFOTycvLpaysjKamBiZ3TmLGQB8zZ/YzODCd + OQO9zJs5jfkDPSyZOZUlM8S5ntnBI/0TWT2jlXXTKllRE8GaEg+2ifO5N9+GF/LMOZclwYk4QpdiRvJq + 3ChxxMbxhjhXryer8YaSAZyhyZui826UGHG93JRr5cYqAviYOESHxOF5Km88T+YLCsfzTIk6z1Vrc6rV + nPNTbDk/zYHTvfac7hM5w5GTfdIecOJsvyMXBl25NMuD8wPunOpz4nmxxwcUOzRJbGCXMh+wJWe6beQ8 + NlzssudSpx0XJ4nNajfhZJMuJ0QPnmlU53KbpooAfq/PhE9nWvDVgDIPsIWKAL47YMX3Ykt/GFDKP9vy + wwxrFTFw6wEBfLfbjO97lTKhAqUEtNjDn8Se3J9hx/cznbk314evBr15r9edl1rteSZrAgezNTlVYSH2 + zVHsmxOX6+XZKsSXyNHnUJEyN3EIZ1vC2JxqzWQJpMtd1cny0SfSWx9fTwOcXfSxstXB0FiZK0sdHR3l + HyY6mJtbEJcQS9ukFiZ2NJMQH4KRzkh0Jij/fBiGg8lw3K3HEeyiTVKIFdkxzsT5meMnwYyX5Th8rNXx + spqAo8lorPRGYK73MKYGI7FR5p2y1sTL3YTC7DBmdJYzr6eayXXJtFZE0j8pgzUL69mxRvrLrHrm9MgY + mVIlqKa/vZTJytzeJfE0FkXTWh5LZ20qbZWJVORFkJ8ZRk5WFFmZsaSkxRKfFENMYiRRyVGEJ0cTlBZD + UEYsAbLdPyuGAKWdoZC+/y4B7Z+eQEhuKhF56UTmpvxNAMeKLo1P8yAuyYaoGCMiIzSIiVQjKVadDAkI + ctK1yBc/ryhPnQqFnK3Uo7HeiHbxFye3W9DVIe9f5MQmY1obDGmq1qFRnPGWKi06GgzobDamq9GQjnoD + JgumNBrR22LGwEQ7CVCdBa5Mb7Wmq86M9koj6gu1qJaAu1psfr34fi2VprRWWtBQbEShBENZ8ePITdKm + Itda3o0TeSlOxAZZE+Jlg7ejFY5WVg8IYBOsLexE14SQk6P8kzyL+NgkYmPiCQuLwM/Pl6AAP5Jiwqkp + zpZ7LJfvUMPcKY0snNrE/Cn1ggaVnN1RR39LBd0NxaoS0cqPWjrqipioQgmTGitpq6sYIoKLc6goyJL3 + JYFydgp5mcmq7ODM1ARys1KoKs9XzRW+aKEE5FtXsWfnOh7fuZ49j4rctYG9gj071rB1w1J2bFzOnu1r + 2bFuBWuXzGWwZxLNNSXSv1IpkG9ZmJ9BnlyjMCeNYmmrkCc2rDSX/iltYicG2b5hBTs3rmLX5tXs2bqW + x7asVS3v3LBG2ut5bPM6dm1Yy6YVy5g1rYfG6koKc3PJy80hP1eeIzed2tJs+XbFKjJ83uRqFggWdlaz + pLuOpd31KvJ3YWcFi7sqUUjgJT21KsJXRf5OV+YEHiKAl/Y2qOYBXtLfwiw5prE0ieRIN3ydDXGTsepo + oYmdqRr2plo4W+nh5WiEn5sxAd5G+Pvq4++vh1+Argq+/voijfHxN8Qn0BAP2e7payTSEE8/ZdlQbIkR + zh562DrL2HRUx9JBAws7dcxsxmNiNRZjyzGYijSXZUt7Zb0apsrcc1bjVNsMLUahJ/pA13gEOobDVdBT + Sk1LPKhAz3AUWroPoa0zAl2DURgbD2XXWNhMwMFVm4hYe4rKQmhoiWViZxLTZ+QwZ14Zs2aXMWlSOmWl + YSQluOAm9+Zmr4a/u568DweaKxMYmFpKf2ex6gck6dFORPiaEOZjTJC3IV5uWnh56ODtqYe/n5H0Z0ui + I21l3NqSEG1HXroHVYV+MnZCaK8Nkb4aRFdzAH3twQy0BzC/1ZdV4o8+1h3Ekb4QLg8GcWOuLx8PuvPp + NFu+llhFKf98W0UA23BH1ilQCOB7fbaqkssKAXxP9Pjd6RbcE71+b7o5d/uMBRJsPyCAf5lvwa/zbfh5 + lg3fK5nD06y5OUVsRocF3ynkr8SFN/+TAK7T4H3xvz9q1OJLsU//JoAd+XmOI78pBPAcB74fGMoCVrJ/ + lVLUyr18N13ud8CBbwec+WiaM1cbrDhZbMKZQkteKhUbmO3I8WgzDgcbcjjUhCMR1jwfbc/BCAc2uRmy + 2smAtW5mrPOyZLOvQvgOEb+7gu3YHWKvmgd4s5/Eve76zHeYwEz5Zn2umkx116Xdy4gG+T61gUr2rw0V + wfZUhDhRFeqmIoCrQwP+SQAHRVAVHS8+bDYtBfnkxcWSGBr0/5gADhF/JsjFkwBnbzwdPHCycsTB0gEn + CwdcLezxc3D+mwAuiotWEcBlWalMbqpny7p1nDh+kldfe4u33v2Uq6++zf4Dx9i8Yx9PPPkc1155i+/u + /MTte7+qMn4//eoOH352k/c+/Ya3PviMG+99xsdf3uJ9Wb4s+z757DGmD8xTZf2GRyeryN/A4GjVD/Gs + lCot9u7Y2v8z83cIQ/P9Wtm6qeRfBLCphfPfGcCGJgoBbKMigHX0LFXrho5xVRHMClnU0dXHvqcPqzKZ + lXmKlXLVCgGszP/77T2lZPUdPv36Fp9/e0eFDz77mtduvMfRk+fYsvNxpvYNUlXXQkFJFbGJ6Spf09nN + 5z9I23/i/y0B7OSqzPnpo/JFlSkCQsKCSUiIIUOZpzk/TfzQbKoq86iqEohUSj+XFottKRAbkC++ak4S + 8XGhquxfJ0dL8W1tCAj0JCIqmOSUWLLEPmRlp8n5UkiX756ZmUh8YjgBQZ44KgSwhQGmZvqYWxhKHGQs + Uikva4SRqYG8dyN5x4Z/QyGCjUyNsXOyx8V9aL55v0A/0cO+qra3vzf+Qf5ERIdTL33r0d07uPHOG/zw + NwH8Jz//fJP337/C4ec2MX9OFZPqgplR5ceiQndWpTmwNtqWhT4mDLiZ0+/nwoqCdE6vW8btBwTwn799 + ryol/Q8C+I/v+fzWJ1x57SyP79vC0qUD0q8XceHofr595yV+/+IdfvvkOj++e40f3rnKnRtX+eLlc3z6 + 0nm+e/sVvv/4LX785B1+/PQdfvnkLf749G34/G1+v36Bm4f3cHFBN7vLklkW7sxibwsWe5iw2NWQ+S46 + DNhPYJrYiinmo5lmp8EM0SMDTias8Hfm8fggjolvdjkzjpcSw3g1wo+Xfdy5aGvFRWtLzok87mDNM/ZW + 7LEzY4utIWstdVlhpslKwSMmD2CszWozPTZaG7HZwYz1DuYsszNllq0R3WInO0x1mWSozRRdPaZr6jBL + XZeFIpfp6rBOvtvBQHdejAvgeKw/z4Z58Fy4N8fjgzkt93QpOYIriRLnJ/pxPdmLN+JdeD3Umsu+ppzy + NOawpym7fWx4JMCG6QGWTAq1pS87hBmlifRVZtFZmkNxcjKZ8SmkJmY/IF0LVVCyf/9BAP9H9u9/EsBJ + qXKcYIgIVtq5/8B/JXz/K/4igP8qB/0/EcAJSblDpZ//NwnggpxM2pqrmTe7h4XzesV3q1GNy9QUiRXT + E8kVH0mpMJNfUExBofhmKqkQweUUF1UIyikpqaa8rIbyihoZw7UPSkM/KAtdXU11TTk1teU0NlWrUFtX + RklZHmUV+VTXlgiKKa/MJ038ev8gd9EhZpiYaqt+2KquMe4/CGBDNNQFGvpoaOo+yABWSGD1BwSwGsYm + athYiX9lr4e3q/hWriZDBLCr+P4uAmeB9OFoR0NiHQyJszMg2VaPFBs9shyMyHU0pdjVnDJ3c2p8rWjw + s6A9SPpFsBldoUOYEm7B1DArusJt6Ai2pN1f4oNASzrD7OmNdWUgyYeeRE8mxbnQEGFHrocuUdZjcdEd + hrnGMIy1hmGo9S/BWIy0NSQuE/2ka4ylvjlmuiYY6hijK8+rI/GcEtPp6+piZCD7mBljb2OGs7OpxPlG + uImP5OahoSKA3T2GExAwmqjwcaTEqFGQpEVlig7VEoPXJ49nUvp4+iTumFekzSMVxmytt2RTpRlLczQY + jH+YucmjWJA+jiUSC60qNmBdlSVbJDbd2urFuiYfZhba0hinQ0HIWBK9HiLR42FS3YZT4DFWRQBPCzZi + rryXReKrDfjoMk3uq8N1HC0uo2jxHkdr4ARawjRpj9GnK9WUKZkWTMmyoDPdTEUutyToURelSWWIGiX+ + oyjyHalCgY9IQYH3CGk/TInvcBoUAljiuCnR2kyP0WVGrB4zo7SZJcfPitSU9gT6wsfQHTySrsCRTAka + y9QgtSHy13eIAO7xH0dvwFj6pK1ght84Zsr2AT9Z9hvDdL/RIhVyWIHoPu8xQ/AZQ6/Ibs+RglGyPJZp + cmyvn9oDAngcU/6DAG53GU2r40iabP9Fg8UwGh8QwLPdRrFajtkarM6j8syPhYwZIoCVMtBB/+IJkU+G + jeJQ9BiOy7c8l2UsMORctr5IJYNSQ9aP4WjCCM6kqnEtX5/Xy8x4TfBC/BgOhA1jf/Aw9ipkcsgwDkQ+ + xLNxI3gheYwKR5NG8kLKKF5MH8OlQh1eqzbl7RZrPpjixgf9vrw3O4J3FmdwfWUlV9dM5Mz6Xo5tmMuz + G5dwcNsantq2gSclvnpik8R1W9axZ9Nq9m5dw16Jw5T5ffcLnlQyfneu5fl9mzl1aBcXX3iCK8ef5OqL + T3LtxNO8fu5Z3jh/mDfPP8/1s0d4/fwRXj33HKeff5xn9m5gx/rFrJY4co7Ehf2TmulpqaeroVpi7BpZ + bmPutG4W9k1jdmcXy/pnsH3ZUg5u3cjZJ3dz4vEtKgJ436o57F4mseiSGWyYP501c3pZu2CADUtns3HZ + fNZL3PnIvBksmdnDgr4uZkxupLNO4hLxPQoTg0gPdyNafOYQieF8bbXxtlbH10YdP0GAIMhWg3Cxi3GO + OqS5G5AtvnKuxDB5Pobk++iT66VFtocauZ7jKfTTpDhIk8JADQoC1AUa5PurkR+gRlGwGuXSp6titWlM + MqA13YhJ2eZMzhVdU2TN1EJreott6S9zYGalMwMVLkwXv7+rQEmutKU4zoLUEENifLWI8NYmykePGLl+ + lJcekZ46KiJ4iACeQLinpvjKOuSGG1IeY0pZuC6lwePFpx8v4288NWHjaZX7mJJsqCrpPDvTkIVZRixT + COAMI9akm7Amw1xFAC9OM2FumhEz0wyZlqoQwNr0p+uxJN+MR2tdeabFi6ONrhyvtuZ4iSnH8wx4MUeH + E9kKNIYgOmcIGpzMEKkQwtK/z6YL0qSdOJ4TMaM4FvYQz0ufPiY4FTac0w9wJnQE58NHce0vAjhNhw9T + tPkoYQIfx4zny7jx3Jb7uiv3dy9V+28C+GayOjeT1PgqaRxfJY/jcxkXnyeP5rPE4bJOIX9H823qGL5L + HTeElDHckn0UAljJAr6TMkQE30tW4268tGNGcytyBN+F/YuvQofxhYy7zyOGyfWHy3lGcztHje9F//5a + ZsBvFYb8VmLIz0V6KgL4+1y5x6yxKtzJGcP3+eP5sWQCP5ep85PI+8Vqsjyen8sn8HutBr83aPFrsy6/ + tBpwv82Eu80mfFNnxOdVunxepMHX+WrcyhvDnbxx3MxV406VBX9Mi4alJQwL99Ug2Gs8/i5q+DiMx0s6 + sJetpgp+9urEeemQHaRMZm3AxARR1qK0+2P0mCcdc2mKCYvkww+I7Eo2oUG2ZQeqEeH6sARyI0gM0iYv + 1owC6VjFyq8LUu2pTXOkLt2JyiR7imMsKYqyUqFQKQetzAkcbk62GFalDHRSgAnx/qbE+ZkR42dMtJ8B + Uf7aqtrmQwTwBBUB3CodY6DEgBViyNY3W7Cx0YTN8gK21RqwvUqfrWXabC7W4NFKPfbUGbO3wYS99aYq + 8nd7qR6PlulL25THqpSMYAseq7Zid60NOwXbZHljmTFr87Wlw4+VDj+SrfIy95Sp8XSdNs/Kiz/cqscL + nSYcm2LOi1PNOdZpypHJRhyaaMieGg22y74bC9RYkz2OR9LVZLCos0Q63dIEDQkE9NmQa8yWAhO2FBmy + uVCbDQUTWJ07luVZiiEeqcocHpQONyhKflbKOBZmqrM8Txxl6TDrSnTZUCIOc6lCdOuxrVyfHfJcOysM + 2CXPrhDUSinMS4NWvL3Mju+2uvLzbmfYpxCF1rDXmN926XJ/uza3tmrz9WZdvtpixJdbzUXacHObA/d2 + uPDzTk9+3enLL496cX+rG3c3OHNzlQMfzTfn7UETXu8346V+Sy5Mt+TUVAuOtBtzoFFH3tM4Hisex5MV + OjxXZ8Zz9TYcbnTiZGcgr8xO5pU5aVzuj+N4uydPl5twSPY7XqPJ+UZ1rrZq8VKLJq+0TOBak5qKAL7W + pM6rCgHcrsONTn3emarH65PUeKl1JK91jOSGQgL3jeTDwTF8OHcMX6/S4cdtFvK88swHPIaI3ydcZFnk + 44Kdbvyx2YXvH7HnuwXWfDXTis/7bPi415p3uq251mHBsUZjeQ5dNsn7fkS+0Tz5Vl3y3RQCuFaUS51S + 0jlbj+YcI9oLzGkvtKAl10Q1/29tugFVsl95giYlcerS58ersoBrRDE1Zolyl3O1FymQY4v1BTpMLNNi + crmGigDeME2TQ4sNubjJhvf3y3s/7sNvZ73ggitcVbJ/Bdcc+fOq4IJ80xOyfMAJNlvz53wj7neoc7d+ + PN9VjeXb8nHcrlHn+wZtfmjS4Yd2fe5MNOKbDiM+7TLnxkQrni/WZVv8aBZ6P8Sg4zCW+Yxiu4z3Q1k2 + nCp25qVGH65P9OdqsydHyq3ZlqnMhTGCKd7DmBoykhXFsq7Nh8e6w3i8P5ZdvbEsb/BlWq4NrUlm1MaZ + UxFjIWPdjMwwA9LFEUwPG01RzEgxcOOYVz6GtQ2j2ds5jpMLDLmx3ZFPnvbiu5Oh3L8Wwy83kvjl/RR+ + +zyTP24Www918FOboAt+7oVfBkXOgR/nwr3Z8MUM/ni1ja+fzePaI4HsbZIxkzWSxTHD5L6HyRgcKbrA + hjOzInhtVSYfbCnms52VvLs+n3ODERxqc2J/tTl7S/TZV6TF4Qo9LrSY8fY0R75Z4MnvW8OkH4Xz6x4f + fpI+9fOz7vxx0oPfL3jxxyv+8L4o2s+S+O3LFH75Okt1z/c/zOWrczG8+bg/xxbY8XSPNXsm2bKlxV6e + Xcn+9WB+pR/9JcFMLY6jozSD5tIsqguzKMhMJy05lbS0TKobG1m2Zh3HL1zks1s3uff7b9z8/nu+uXuX + mz/8wO0ff+Tbu99z+aVXWLhkGfGJSbi4uhEcHKL6p3dtdZWcKwkbC3MMtLWwNDbEztIcZ2tr/N1diY8I + obasiO6Jrcyb0c+iWbNEzmD65E4GpvawZfU63n7ldb799As++/BT3rnxLi+//Bpnzl3i4OFj7Ni1n607 + 9rFNoBDAO3fsYtHCBcye1c/8+X08smIO27YsY/v2ZWzbvIgtmxayecMQtqz/C0vYtHaRYKEKW9bLvhtX + sH2TYKO0Nyxg+7pZ7Fjdz44VU3h0SRuPLWtl//JmDi1v5OiKRl58pJ7Ta+o4u7aac+srBCVcWFfIxdX5 + nF+Rx8WluVxYUsjlldW8sXMqN/YN8voTc7myZy4nHh1k/6opbF/YyvbF7exe2cmuFR1ynYlsnFXPvLZc + plUk05ITTXlSKJmRfqRGBpEcFU5SbDSJcbFER8UQHhpBSEg4oaGRhEZEExYuiIolPDqB8Kh4QsJjCA6L + VsmQ8Nh/IOwvhD5ASAyhQdFEhsYRFZkk508mMiJRJZPiM+SbSnAvMiIslgi5Tnh4FOEK8RsTTaySgRMf + R1JivAT2SRQU5FNZVUlrWzPdPVOYO28WixfPZ+WKJax5ZAnrViwUzGfLI/PZsXIuu1fM5LGlvexdPJV9 + c5vY1BzHhlIvdooD+mSRHccKrTgrevCcMo9H7HCuSKDxijhGr4pj9EqKmqr88xuZWtzI0+etEiPeLDfj + 5QoTzonuUwjgg2Ij92XI+M8czT5xWJ4uUudQpTbHm0051WHNyS5bsbF2vNjryPHpDjzfY8vz05RlhRB2 + kTHrwdkBD070u3B4ig0HOsx5psOUw10WvCA42WXF6Q5Lzk6y4vwka861mXGm1YgTDTq8KM7U6foJXGnX + 4pXJOrzba8zHM8xFhYgtFHwzw4LbYuPu9llyr1/JCrN+QAyYc6vHlO+6jbk7zUyVJfbjA/zcZy7SnO9l + P2VeyZtyz1+I7vhgqhPXW8UWik/xfJYal8X3eKvdhRutTrzWYMfVakvOlBpzod6B17tCudISxGMZ1kwX + X63RY4IExvqk+BsR5GMkAb8Rdo4GmJlrY2iojb6eDjo6OlhYWhCfFMfEjhYmdzaRkhCMidYI9McPw0Z3 + GF7mI/CzHkOynKcqzUNsViD5EXZEOEhgYzYSP4ux+ArcTUdjp/8QltrDVCSwndUEHCTg8fc0pbIgSoKy + Kpb2KZnhmfS1prB8Zil7Nkzm2d0zeXJzH7tW97DrkWnsfKSXTQsnM6ejhI7yeFoKw5lUFsHkymhaSiOo + ygumODuYwpwI8rNjyMyMIyUtmrjkCKIEYcmRBKdFEZQRTUBmNP5Z0fhlxOD/FxTyNy2WgPQ4QrKTCctJ + ITw7icisBKLlfDGZIcSmehCdYCXjwYBQCbTCQ8YSGzme1CQNstI0yRXfKj9b/EpxzquVMtC1RrQ0mNLW + ZM7EVkvaRbY3ynKDGc21hjSIv9IsjvakemM6ZVuX7DtJjplUY8hk8TWnNVnIe7FjsNOFOV1u9IuO726w + YaJ878YifWrzdakp1KOxTCF/LWmrsqGpzIIKCY5KxLaWZBtRmW9NRb4j+eI7xwZLAOptha+rNW52NlgY + mmKsb4qtpT3BAaFkZ+aRnpZFrOiVyAjRKcGh+Pj44O/rQ2x4MOV56XQ2lDPQUc/Caa0s7W0XiJw+hIXd + LSoSeEZ7paoEcndTBVObyulsLBWU09VaTWdzDR0NojNqSmmqLKKuPF/sRB41pblUl+RSUZhNVUk2jTVF + TGyuoL+nlUXzeli2aDrLFvSyeM5UFRbNnsKiwS7m9k9i/oBS+aGbeb0S4HdI4C3XbakupE7OW1cuqCyg + tjxXda1/I48GWTe5oYxpE+uY1dPO/L7JLJzRxeIBOf8MOX//VJbOnMby2X0sHexlYV8Ps6Z2yLPUUVta + KPeaT3lxgdxvgeqck+qU0s+lzJlUxYKuahZOrmDR5EqWTK1m0ZQq5k8uY0FnOYu6KmRdFUt6qlk2rY7l + vUr1iQZW9jeyYnqDtJtY1t/MisF2FvY2MLU5j+KMMKID7CXWMsHdTg93W118nEwJcLckwt+OuDAHEmMc + SIi3JT7BmlgJ5KOizYiMtiA6zpaYeDtiEmR8xtoQFm1DSIQlgWHmBEi85B9sjpeMYxdvXRzdtbB308bO + RQsrpwmY2Y3DxHo0pjZjsLQfj7XjBJW0kPXmtmMxk/XKdiOLERjKuNc3FR1hOlxFCls5asv+2qoy0wam + o9A1kO2GozAyGYWJ2VAZagdXTWKSHKisi6BlYhztk+Pp7c9g7oJSZs8tZUp3NvX1seRk+xAoMZyfxJTh + QSZkJrrI+05m7vQKBqeW0FgaRVa8M0nhViQIYkItCAkwIkAhwP30pS8bEyUxYnysvQrJCQ4U5XpRU+ZP + c00wLbUBtNX5MrlF/M1JgfRP9GVOuxcrJ/mwuyeQozNDuDYniHfnefPpoCuf94o+7rHi9jRb0dsK8Wv3 + DwL4+/8ggG/3KjrejDuCe9OUOd+Nud1nyJ0Bfb4fNOTHOaYChcQVu9A3VEJaKSV9q0vQacXNTrEfHWZ8 + 2W6kmgNYIX4/bNDk42YdvpxkrCKA78+w5cdZDgJlDmAnfp7rwP1BOxUJrGT/3lbsTK8FNyU2UQjgmzOd + +aTPhZdbrDlTbsq5EkteLnflWr4Tp+LNORpmyJEwI45EWvJ8jC2HouzY4mHIKidd1rgasdbLjC2+1mwP + tGVXiJ24sY7si3Rmj/TDrYEWrPE0ZK6DBv1iD6a5aNLppkuLlwl1vmZUByrZv7aUBdtTHuJIRagrlaHe + VIb4UxESTGlgECUBQZQGR1AZFUdjeibN+XmUpCSTEh5CuIoAdiPEw41Q97+gEMAeKgI42NWdQBfxVf8B + d4JcPAh0Frh4q+YA9rB3x9XWVQV3W2d87BwJVQjgAD+K42OoykyhMiedKS2N7Ni0iZMvnuKll9/g+lsf + ceXlt9i991nWbNwl8hnxk9/k65s/qPDWe59x9uIrglc5d/k1Llx5jauvvMV7H3+lygR+TY5X5t9VCODI + mBSc3f3x8A7GzStIbLFS4tlVNQewjb2nQJFKRrAy569C/rqqYGHt8jfMLP8if5X5f+0wNLFFz9AabX0L + tHTN0BGpa2CJtp6Z7GdHUGgMtQ3tbN6xh2uvvc3Nez+rCOA793/l829u8e5HCmH9keBj3hbf/MPPvubT + r7/j/U++4MTZS6xav5nK+mai41MJDI2W+w6Q+3b/D8L2v+N/JoCVOYH/E/8zAeykEMDy/dw9vfD09sbX + z4/A4EAZz2EkJ8eSka5M/xBHTk6i6IkEsjLiSBWbHx8TSEx0gApREX4EBbiLPnDD28sJL08nQoJ9iI4O + Jl2OLxbbU1ZeRHl5sbTzyC9IJ1XJGA6Ve3C2wNzCQAVLayNsbE2xsTGX926MkZm+vFNDTC0MZdlIBUvZ + Zudog7ef9MWwQCLkPqNiwgiRtrefl4oADgj2JzYhmkmT29n/9D7e/+hdvr9/h59//ZEff77HV9+8z+Vr + z/PYvmXMmF1Oa3MoU2t9GChxZX66LYvjrJkdaMZ0bwu6A51ZXJjGSYlrbt24xp/3v+W3X+/y8+/3+emP + n4bw54/ck3Wf3PyIi6+c5rHHN7N8xSy2bVrKxRef4uYHr8LtT+DWh/z+9VsSc97gx0/f4Na7L/HNjSvc + fv8VfvzoDX56/zo/vvMKP8t1fr1xVWLU1+D1c9x+dicXBiexqzCWFWFOLJH7WuJhzBI3Qxa46DJop06f + +IO95mOZaaPJHAcD5jsYs8bLjicifTkp/tnLmbFcTw7nLflub/h7cMnanAvmZpyTuPKkjQXPWluw38qE + Ry302WSqxVpjddYINphoCDRZb6QpUputVvpsszNmo51SHtqIQRsDplrpMVGOm2huTJeRCdN0jJita8pC + PWMeMTNnm4s9B8P9OBwbwMEoHw6EunEwzJOjsf6ciA/ivPi/F+P8uBrvxfUUT95MdOX1CGsu+5ty2suY + 571MedzPivWi2wYDzOgKsWRuXghL69JZ3l7G3JYKanMyyU4UHZaUQWJyNokpBSILVOTvPwngf5O//ySA + cwTKcUP4f0sAJyflqfAXAZwgUAjfBIUAVtp/EcB/I18F1bzBCVn/IIALc7PEx61l3uxpLJg3jfa2KvLE + h1YI4NS0RLKyMsnLLSAvr4j8/GKJHYtljClEsEIClz1AJcVFguIKVVnoygol+1cpCa1kBUu7tpLauioa + m+poaqqhoaGK6poy6uoraRS/sl78ymrxK/Nk7EZGB+EufctG+oCRiS66ekr5Zx2BIVqaxiIfQFuWtXUE + mmjpqIuuFF/FSA0zswnY2Wjj4qCPl4uhKgNYKQEdKu1wZ4GTIWGO+oTL9kh7faJs9Yi11ibeSps0e0Oy + HU0odDOn1MuCWj/xywOt6QyzpVt8k+mREotFWtEr/khvlDU9UbZMCbOiI8iCyeKj90TaM5DoztwMf2Zn + BTCQ5Ud3igflfsYkOqjhZ/wwDhJPWWr/C3PthzHVGouptjoWOkoGsCGWBmaY6plioCPPpqGDppaWqvy1 + vo5CAIseMzXBRsaRo4w/Z2d9VQawu4c6nl7j8PKS2M13FOHBo0mOGEdBgqZqCrrGdG1aMzSZmqXBYL42 + C4t1WFNhxI56C7ZXm7GmQJsl6WNY/ABLM8exuliXjRKrbG9y4FHxpba0+bK0yoXePCtaUowoCp9AfpAa + hQETKPNTpzVQl2lhpsyRd7Iw2pbBYBO6fXVo81CjznU0tV5jqPOfQG2IBo0x+kxKM6MzW96rYFKGBW2p + xjQk6FEVpUlpiJzXfzT5fqNUyPUdSb4g13eE4GEKfYdTGzyWltAJTI7QZFqUDv3RuioCeDBSk1mybmak + GjMixjA9bCzTQsfSI+dUEcB+4+nyGcdUP1mvZPQ+IH+V7N5+P4H/ePoUMlchhx+Qv72+Y5jmO5oebzlG + gY+s9x2vIoJVZLCvsq8s+06QZx7PFInVuzzH0+GmkL+jaHEeSYvTSJrsH6bJ6l80Wwxjqv1DzHUfwyp/ + dbYEa7AzVJ3dIePYEzJSMJzHgx9mX8gI9oeP5qmo0RyOn8CxVB1OZRpwOtuAUxk6vJA0XvTdCA5EPcTz + 8WM4k6HFxTx9zubocihmtBw/jMcCh7HTfxi7g4eJrn6Ip+NGcjhlLEfSxnI4dQxH0sfygnzvC6V6vCL9 + 4c2Jtrzb7cY7fb68PTuat5bk8MYjtVxe28mp9f0c3TCfZzct49D2NRzYvoGnt63jiS1r2LPpEfZsfoQn + tq/miW0KAbySp7av4rk96zn+5DbOP7+Hl08d4M2Lh3nj/HNidg7x2pmDvHb2IC+ffJpzzz7G6YO7OHf4 + cc4Knn9qO49vXcHapTNZODCFPokNe9sbmNbaqCKBp7c1M7Ozg3nTepg/fRqzOieztL+P7cuX8uyOTZw/ + sIfTT2xVEcB7Vs5ip/KDqYV9rJVYc9WsHtbM7WfdoplsXDKX9UvmsHbRIGsXChbNYuXcPhb3T5ZYuZau + 2jwaCxMpSgwkI9ydGB8bwj1MVbokyEGPABstggRhtppE2+uSJGMyw82ITHcDsjz1BbpkS1yW5a5Orqcm + hUrZ5SBdCgK0pW9rCjTIk/GTL/2gKEid8ghtauL0aUo2oTXNlLZ0M9ozTJmo/FAi14rufFumFzvQX+pE + X4mMxyI3OgtcqU21JS9SqZqrS6SXJpE+OsQGmJAYqCRTGst9GxAuuiLYRYNg5wnib6sT66tFerAeuaH6 + 5AcrpPQ4SoLHUyb92QravgAA//RJREFUsDJMjcZoTTqSDOhOM2RmpsQEWQYszZI4ItuEdTkSJ2SaszzV + lAWiD2alGDCQakBfugG9qXoMZhuyvNiSXQ0eHGz15mijMy9UWfFCiQkv5OlxLFebYznaHM3VVOFYzl/Q + 4sUsTV7M1OBkpianRW+dTpN2khrHY0fzfNhDHJG+/ELwvzgZMZIzMjbORI3hvMjz0WO4Fjee60mavJOm + y4ep2nySrMFn8ep8laDO7WSdBwSwDreTtPguUZ2bsv1bGUdfJY7jS8EXgs8TR/NZwki+UBHAY7mZOp7v + BIq8mTqOWynj+C55rJxvHHfT1Pg+bQL3UtS4kzCO2zLubkYO5+uwYXwZOozPZQx+GiEyXtaljua7nAnc + Ldbm53JDfhEd/EupxJBFenyfr8ndnPHcyhrLrcwx3MoexZ3csXxfqGAc9/LHcFegLP9YNp7f6tT5vVGb + 39v1+U3iyB8nmXG3zZRvG034vFqfT4s1+bJgArcKxnGnYDzf5Klxq8qC33qVDOBChiVE6RITpkV4oAYh + PloEuOsIDPB3k4DbSzpunC2laQ40ZNlL57OjI1kco1hDeuJ06Y3RoztWj0lKR403oCJaOn2InMtjNKFe + Y0kIkU4fa0FunAWFgspkW6pSHalJc6IswUZFAuVFCMIFkebkiMwR45EdavoPAjjWx5hIbwPpzHpE++uQ + EKRDZqSOHK9OZZwof1F0sytMeKTJhg2t1mxpFWew2ZxHG0zYUW3EtnJdNhdqsr1UR0WKKnP+7q42YEeZ + jopw3VaipyqXvKtCIYAtVXisxkZFAj9abcW2ClO2FOuzQV7eZvkguwpG8mSFKM8GDY63Sidt1+JUpx5n + phhyvseEcz3GXOgz55wE6webtNhbqc6ukglsy1djU6Ya69MnsDpJHF/pfBvSDNiUY8TWPCO2FBio7me9 + fLCVeeNYlDmKWakj6UseQ790sv74cfTFj2VQOuqCdC2W5uqyqkCPtYW6rC3SZqMY9K2lujxaqc/OSl12 + 1+jwdIsBJ+Sersy24L0Vdtze7syve5zgCXuBJTxu9A8C+NutBny7XTrQo9Z8t8OBezuHyN8/dvny584A + ft/hw09b3Lm/zpVbjzjy2QIr3hs048YMc16ebsGFHnH0J5tyWK77dL0Wj0sn3Vc2gQNyP4frzXi+0Z6j + TS6cnhzEa7NSeWNeJld7YzjR5slzleYcqzHkbIMu11p1eW2iLtcnCSYqJLAGLzVNEKnJ623aXBfc6NDn + XXnnNyZr82rbeF5vH80bHSN4a8rDvDVtOO/0j+DzxRrcXiODbLstf+51lecV7BHs9YDdCgEscrMbP69x + 5oelTtycY8cX/TZ8Mn2IAL4qA+qFBkMeK9eR96vHimJRgAUmTEnXFwdIl9oULVU5Z6Xsc1u+KZNLbOgQ + tOWb05RtTH2GEdUpepTHa1ESqxDAapQnaKgyg5tzjWkvNqejzJKOcjOBsUCfDnlXnVWaTK8ey5rJahyY + o8/5NVa8s9uZO0e8+e2kF3+edoZzDnDZUWDP71ekfUm+62l5tsPyXLvs+XOFOT91a3OvSRRc7Ti+rRrP + 7XpNfmzV56cOQ37tseCnPhtu91nzaa8Nr3fa8kyRDo+Ej6DHcRidNsOY6zmadeE6PJFuydFCB85UOXOt + xYMrre4cr7ZhhzggC0KHi9MzjL6wkawqseTRNm/2doeyd3oUu3qjWdnkR78c25FpQ0uaHZXxVuRHmoqu + MCRVDE6aOHG5otCbkh6mL/dhFhb+i011/+LIgBZv7XDmy2f9uHcugt9eTeSPd1P5/aM0+CpHgt1iuF8L + vzTDzx0ip/LnL9NFzhDMQpUNfFfkR53cOV/BjV0xHJRnXl84moWxwxgUpbxMxtb+JnvOzY1SEcBKBvBb + 63K5siCeY9P8earJjn3V5jwmjtHufKUsrTanRbm+2WPPlws8+XVLGH8+IIDv73Xh/jMu/HrcjV/OefDr + NT94LwY+S5OAPItfvinij1vVEoSX8unpRK5tl0B1pgu7Jzqyo8WF9Y3urK73ZmVDMEsaoplbl8DMxmxm + tpfTI8FYe305DbUVVFZWUVNXT1dfH48fEMfpnXf46t5dbv/8E1/eusXnN2/y9Z07qizgL27e5tLLr7Fu + 8xYqqqqJj1f+wZJHfV0dk9rbKCkqIiQgEFdHB7zd3Qjx9yM6OITEyAiyUxJpa6iht0scrIEBVQm9+TNn + MqO7mwUDgzy2eTtvv/oG33zyOZ9+8CnvvvUBr8jyhcsv8cKJczzx9GH27DsoeIa9ew/w+OP72LhxI+vW + rxIsZ8uWR9j/5Haeemobex/fwGN71vLY7nXs2b2ePbvWs/exjex7fCuPP7aZXY+uY9cO2b5rs6zfyt49 + Wx5kkK1k1+YF7Fw7wO7V09i3egoH1nZxaHU7Rx5p4cTqJs6uaeDq5mZe3tLAtc1V0i7j2qYiXtlQxEur + 8rm4MJOLi/J4c1Mznz09yJdHlvDRs8t4Zf8CTu4c5Ol1PexePpndK7vYubyD7Yvb2LqwhdXTy+mrTKA9 + O4SqeB/yw9xJD/EgMyqQnMRocpU5djPSJYBOIyk+ibjYBBLik4lPTCVBkJiSQVKaBOGpmcQmphAt+0TH + JhMTmyJIHmrHpRCnQNbFx8oxsWkCOT46mRQJ3jNSc8hKzyc3o4CK0homt0+lu3M6rQ0TKZLAPDtT+ZV4 + KrGxcSQmJkjgHy/LCSqkpyar5nVS5v5taW1i6tQuBmZOZ+Giuaxdt5KtW9bx6OY17Ny8SlW+57lHV3N0 + 21KObJjNkVW9HJb3sKcjVeyrL7vFCX2q0JbjxdacyTfmjDhrp+JHcE4cnssyxl5KVePlNHVeF0fujSzR + 3Tl6vFVkyNtl5rwm9vViiREvFuhwMHM8j6cMZ3fqcPbmKASwBocqdXi+wZijrRYcaVWqS1hzpNuBw1Pt + ONBhxVMd5jw3xZYXep14sd+VE/3uHOtz4dmpthzotObgZAsVAXxU5PEOC060m3NKIX7bLDjbasrpZkOO + 1+lwrFruuV6dK+3avNKhy9vdhnww3YTP+s34st+Cr6ebc1MhAsSuq0qDTrfkzjQzbveYqghgBfdku4oA + Fvv/kxzzkxz7Y58pd6cpBLGca5IRn4hN+bhD7EuLJSezxgjG8lqNKZ93efCR6IJ3Gq25XiP2tMqUN9tc + eGtyANfqvXg6y4qFgepM8dekPsSA3BAzwgNM8fI2wcnFGCsrfUxNlHJhCgGshYWlmSqDdmJHE12T60iL + 98dMcwQm44bhZvAQ4XbjiHYYT3GEJZPy/ZhSEEh5pA2JzhqEmo0gWBBoPooAyzG4GT+Mrc4w7AyH42g5 + Fmfr8YT7mdNcnsDi6TWsnFHD7IlZzGxJ5pGBYvaun8iRx/p5cd98Xty7gON7FnFi71IO75C+NbOWabXx + TCoOZnJpMBOLA2jI96Umx5eK3ADK8kMpzYumMC+e7JxYEtMUAjiMsORwQqQdmBFBQGakIApfhQjOGEJg + egwBaYqMJTgjgeDMREIz4gnPjCMqa4gAjkn1JDpRgrcIQ0KDJwwRwFHjSUuW4Ex8qlwJNvJz1Ckt0qWq + woD6KmMaaoxprDWjuU6et9acVgmQJ4mv2d5gSVOVkQoT683parJmSoMVk6olYKs0ZmKVCVPrreiVffta + nRiQb9nX5MT0ZmemNjgwsdKK5jIzGgTNFVa0VIp9rLSlscyKerGj9SVW1JZaUV1oQ3m+PXnpdsSGmhPq + a4m/hw2eDjZYG5liZmCOvZWD6PEwMtNyBNkqAjg0RN5RUAi+vr74eHkSGexPQUYyE2tLmTlZyVCdxIoZ + HazoF8yYyMqBSSzvm8TinlbmdTcwS/rMjEm1EmRX061kBbdU0t1azdSWWhU6m6roaCinva5EbFMZbXWC + WmWucEFtEa1K1nBjCVPaK+ibUke/nLO3Q45vK2NKSyldzSVyvnKmtVUyrb2SvolVTGsup6O6QN5dPh1y + jo76UibWFcv5S+T8RbTLuraawn+jMo/2qiF01BYytbGU3lY5V7uSbV7DwKR6BjuaGZzcKMt19DZLMK+Q + 1xXF8n7zqSstlG8s564tp1Ou3S/3MLujkoVd1aos30WTy1jYUcairnIWdCrkbymLppSzeEoFS3sqBVUs + 761l5fQ6HumrZ/UMsQszlDniW1k5s41HZk9k6UALc7qrmVidSW5iIFH+9gS6mRLsYUGkv4N8UxfSYj3J + TfWmMNePgnwfcnLdyMiwIynFhuQUe1KzXMnK81IhLdtd7IYrcYn2KjI4PMaKsGhrgsIt8As1wSfICM9A + Yzz8jXD21cXOQxMr5/FYOo3Dzm0C9m7qKti5TsDWWQ0b2WYt0tJhHJYPSGFTuzFYOKnh5m+Ch58pzp76 + qsxiY4uxmJiPwcRyNCYWozG3HImjnDMm2Y6qxnBqm0Kprg+gdVIE0/rT6e5Np21SItV1keQX+hGj3Kvc + Y3yMNYVZnkxpTmVhv0IAF9JYGk5eiis5SU5kC9ITHUmItSYi3JTQUCMixGdMiLchJdlR4ESaxJHFhV5U + lvlQU+1LbbWn+EfutDV70jnRh96JXgxOdGf5ZC92TvPj+cEgXpobwAfzPPli0Fn0uQ23pg1l/d7rtRM4 + /E0A3xV/WCGBFT2v6Ptvu035psuY76aYcGeq6PIeI77rNeBWnx53Zuhzd8CQezPN+GGGhYoAVh2rnEts + 0O0p1nzbac5XHaZ8MdGIz1oN+LhFR4VPJM5RMoBvSdykHPfDTDuBPT/PcVCVgFYIYWWdKvN3mrnqPm72 + WnJrhj3fzXLh8wEXiZOsOC+65kK5Oa9UOPNqsTPn06w4HmXIUdFzRyLNOBxlycFIa7Z7G7LaWYc1Et+v + 9TJhi58lO4Jt2RPuwP4YF56Oc+eJaBe2B1mzRuzKXCdt+h216HbVocPdgGZvc2rkmIpAG8qC7CgJsac0 + xFHgQnmoF+UhftIOojQomOLAYNkeQUVUHA1pGbTk51OdlUl6VDiRft7S/10J/U/8nQXsToibG8GurgT9 + J1zcCHByVRHAQW4+hHopmcShBHkFiz70x9/VG29b0YMuriQF+lGSGENNdhoVmSm0VpWzaulSDj3zLCdP + XeDcpVc5df4ldu45yLqNu9j75HO8cv09vv7uPp9+eZvTsm3z9sfZIti+az979x/i+WNnef3Gh6py0B98 + 8g3nLr7K4JwlhEYkqAhfFSnq7P2A+HUfkgKlFLQCZR8FFtbOKphbOf0NU0uF/LXDyNQWQxMbFfSMrNA1 + tERL1xR1LSPGTdBnvIYB2nomePoEUVYp+mb9Fl567Qa3f/iVez/9zpff3ua1N9/m1LmLHD91hmOnznL6 + wmVZ9y6fffUtX928w5WXr7Ni9TpyCktx9w7A1lHu1d5VRfAqZZ9VRO//Cg+I3f81/mcC2NnFA0dnd5xc + 3XBxc8fLy0uVTRsRGSL6LZa0FOWHiSHi6waLjgggItSbQD9nPNys8XSzwcfTHi93O5EOxEQHkZgQQXRU + kAqx0cFkiZ1XiKP2ic2qeefb2uqprC4S/yGZkDCFADYX/8hQBYVQcnC0UGUFW9iYYGSmh7G5HqYW+qpl + KztTXN3t8fV3Fz8hUHRwDOkZiaSkxhMZI/Y0wAufQG/RuaFk5KQxc3Y/L7x4RPrNx3x391u+/OZz3vvo + BpdfOsX+g1tYtr6Xjr4CaltCxYfworNUfIBMKwYSLJgeakGXkjUY5MDsomRO7FjNd+++wu/3v+bnn2/x + y5/3+fk//u7Iuo++fp9z105K393IqtXz2LFtBedefJIv33+JP+9/Dj9+Bj98JLHvR/z23fv89PXb3P/s + Ovc/vc6vn7zBTzeu8f2109y78CL3LxyD187DSye49/RWLvQ1sSsnglWhDizxNmWppzFLZNwvdNFnjp0W + g5ZqzLKawCI7PZY7GrPW1YJtnnY8I2P/bEIor6VGcCMxmHei/bjh78Y1GwuuWVpwxVJ0lLUlxyzNOWhu + xF4TXXYYarLFUIOtJprsNNNll7kuj5pqq7DbUtrWBmyyNWSZjR4D1rp0Wesx0caYKY52TLNzYIalAwst + nVhu4cBGF9FbYUE8Gx/GgegAngj3Yr/EYwfCPXk+1o9TYnfPJwVyKd6bawkevJnqwdsp7lyPtuVakBnn + vY05Ls/7dIA524LNWRRswoxwc5YVBLGlPZ9dYtPX97YypaqYwrQUUiReS0hMl9gtX/rHEPn7f0cAJ6QN + kbwJKTnEJ2erkPAAibJOwd/E7n8hfv+zHPR/bv+L+E1OyR8q/Zz0gPB90P5L/rXfX1CyhpOVLOb/IICL + 8rLpaK9n/pxe5s/toVV8vpzsJFUJ6LR02ScjgyyJJ3NzClXIzysegkIG55dQIPFmQX65oEy1rJSGLisb + mhe4VkUCi6yroa5eIX7rBLUPUKMihBubFVK4VrZXUSk+WWZWMqHhvnj7ueDkbI+19B9TE3MMDSzQ0zVD + XymPr28h0gQdXT20dTRFaqCrr4aRyQQsLTWxt9dREcAeTgaqOYCDnA0JdtQj1EmfEAc9ghXIPqF2Ahtt + Ii01iLbSIsnegAwnE/I8zCn2saQ20JbWEDt6ohzpj7ZnMFaBLQNxtsxQIMsKEayQwz0R1rLsyNxUdxbn + BrKkIISlxWHMywuiKcyKHHctYmzH4GfyEC4GD2OvPxIrndFY6qhhpStxmzyLhb4xpvom6Ovoo6mpjaZS + 4lqgEMDGBgZYmJtgaWGI3f9F219AWXFt7d8oEZym3d0Nmga6aXd3d3f3pulunMbd3d0dgiU4wSFAgBiE + ECwJkRPPOcnvztokOec933v/995vfHf0eMaqqr2qatWuteacTz97riVjw17G5YABmgxy7Y+bm5rE+73x + EPh79iLGvw/ZkZpUJRrSmKLPcOHdo9J0mJytx6wcXZYVGbKpyoLN5WaqBKJlmRosTO3H/KTezBMsztJi + VaEx66ts2VDvwuraQSwsH8iM4oGMy3OmLs6UiggjykMMKPfTodHPkFESa0wOt2d6lDNTwx3olHiv3kOb + ksH9KBzalyJPDYoDdKgIN6I+QbhUqi2NyTbUyHZFtCFFYTrkBqqT6dOXNM8+pHn1lrI3KR49SRnWnWQF + Hm+QPuwNCof1oMqjLw0+aowI0GJUkPafArAWE/8UgMcH9WVccH/GBPUXe9ufEZ59Ge4uGNqHDndF3O0r + UDJ9e6umb/4LSmbwX1Aye5W6r9CPke5qUkeNUR7qKtF3pIdAqePWj/ahanLtvrQO7kOLaz8aB/am1qk7 + VY5vUO3Yg1rHntTZvkmDzet0yvGpg9VY5CXfs4/YQX9Ntvipsc2vN9v8e7LNtzvbpdwR2JsdQb3YE9KH + faH9OCJ89US8NkejNNgdpGQLv8Z2327sC1ayeTU4maTDkdj+Ur+XXO911nt3Y41XN9b7dWNb6JvsjurN + W8kaHE3T4Ijw3aNp/Tma3p8zBbpcqZQ4ssmG99sHcmekO3e7Qrk7O4PbCyu5tLSdk8vGc2TFdA6unsuB + NQvYp6yxu34xu2R768o5bJdyz8ZF7Nu8hH0bF3B4y1LOHFjHlRM7uHN+P/cvvsVHV49x793D3Dq7T1zP + Li4d28bZgxt5S+oe3b6Ct/es4/iudXKNZaxdPJV5UzqZ2NkofLFMeKhw0oZqxjTV0TW8hYkjWpnc3sHk + jvY/BeBRrJ87i8MbVvLu/i2c27VWJQBvmdvFhtnjWT1jLEsmdagE4IVdI1k4eTRLpsqxGRNYNquLFXMm + sWreVFbOncKKWRNYPHUkc4QfTxxeRmel8M+8eAoSAsmIHEa8/0DChlqLLTHEz14ff/GLgcoPSex0iRK7 + E+OkR6yzLvEDtUkcoEWSjP3UIbpkeeiTIzwtc5geaW46Ai0VMoZpke2tRWGgHuXhJlTHWFATa0FVlAmV + kUZURRvTkGgp49iGzixHRue6MCZ3MKPz3GjLdlPNrJvsZ0rIULFngxQBWI9Ib3NppzUxPhaEuRvhP0hX + YmlNiaXVpFQjcLAGkTI+Y4dpkOTRX8ZaX7J8+qnWJM73709pkDr1UXq0xhkwJsmIriR9ZqUasSTDghVZ + NixJtmRWnHCFKH3GRemqBOBxycYqTM4wY3GhPVtrhqoE4CMVjhwptORIthFHxA4dSdPiSLoWb2VqcVhw + NENHhWPpOpyQzxUh+O0ULU4mCxI1eUf69PHw3hwJfJPDfq9xzO9NToX05ny4Gu/KWLgSrS7Q4EaMJndj + dfhAyQCO0+FxnDZPojV5IePmZYwu38Ro863g6yhFAFbE3/58EaXGi8h+PI3oyzMpP4/szeMIJQu4l2pa + 6K/i1Pkqvj9fqgRgNb6SY1/IOHqpCMAJ6vyQpMk/4vrzTbR8HtaTF0Fv8MS/G58LHsu4+zRQysg3eBrX + iy9S1XiZrcWPBYb8VGjIj3n6fJ+ty3fp6nydIucn9+bLpF58ldKTl4Jv0nrwdVpP+ay7Ct9l9uSH/D78 + Vt6f36q1+L1Jn38NN+HHFlO+aRCuWmPK4xIDPs3R5PMsdb7JUeO7bHm+TGl3qQW/dAbBjHS6JSXoEicv + LTJUm9AAPYK8DAnwNhXnYUaQnzkZSQMpzBxEZc5AIXCO1MaYUxdmSEOoLg3ButRKWRGqR3GYATmhBsTL + NfzFAPq6qRMRYEhSuCWpEdZkSpkXZU1RnIPAkewIcYSBJtJZTUjxFwjJT1JK2U/2NSbBx5hoT2MihykC + sBHBQw0IcdMnwksGlZ8eqXLfnHAt1RS8HdnGTCuzZGGtLSvqbVlbb82GOms2VVuwodSEdYV6KgF4dbYm + 6/O12VJqyMYiPZUgvDJTjucoWcCvBODNReIMBZuKrdhUYsWGIkvVGqEblF9K5WixMbMXO3J7cKi0N+/U + qHG2UZ2zTepcaNXkYpsOVzv1uTrakPfGm3N9rDkn6rU5UK7O7kJ1tuf0Z7O84PVJGqwSI71SOuhacczr + VAKwIasz9FUC8JLM/sxN682UxJ6MjenOyOg+AnEwYeJgxAl0SoefEKnGtHhN5qXosVAGyiIZREuUZ8yV + ALpQR55PeU5N9tbpcLLTiKsTzfhkvg0v1zjy6xYHXk3/bA5bDf8UgJUpoHX4co0hX60z58uNtnyzwYEf + Ng7g1w1D+WODJ6z35Pe1bvyy0pWfFg/km3lOPJtmw4MJFq8E4HZT+R6MeafekIOVOuwulmfO7yfPrsmB + Yj0Z/GacqHbgRNVA+c68uD0hlg+mJnF9ZChnG4byTrkNF6rNuVZvzJ1mI+63GvJhmyEfDNfjToMut5S1 + fwV3GnRUuC+d/uPhRnzUqs+9Jk0+aFLjfnMv7ja/wa3m17jT+hqPumSQztTmu4Um/LLKlt/XOcImRQAe + AlsGwwbBKhf+udiFn+fJM0115NlYaz4bpUwBbcW1ZnOVALxVvlNFAJ6TbcjEdCNaFQE3Vu/PDGBFzDWh + KduS1nw7mnOs/4cAXCoGsTBSWyUA54b1V00HXRZvIOeY0phjRUuBNS2FFgITmgsNaC7SoaVIg86iXsyv + 6cnOkVqcmWPG3TX2fH1gML8dlzaflGc4I+/xgi1/XLThX5ft+eOyE5yX48dc5Plke7EVv47W4/sGTb6s + 6MeX5Wp8W6P1SvwdYco/x1jz8wQ7Xo635cEoW64027A9U4fpft1pduhGvU03xg7uzVx/6U9xFhzIsueE + GPN3q514t9aJE8r4SNRiZsCbjPboJoFWD5bmydipH8KOdm+2jwxSCcAL6zyZkDeAtjR7GpJk/Edakhlo + SqKPIQni7JLE2WT4vkFF2Gu0xbxGV2I3Fhd04/BoTT7eNIiXx3z4+XIof7wfyx+fxPH7o3h4kQLfZArR + LYKfy+CXWvi1id9/G84fv3XCb2Nkf5yQ4QlSdwQ/3Snn0aEE3pnqxNpSdWbHdmOSGOQFCf3YW+vA+UnB + vDcvnntLUrk0PZyjHcNk7DiztdSKrUVmbBYDvVmC49254oQqjbjVbsfjKTIOlvvwzw0+/LrVje+3OvHd + Hnt+OurMz2cG8ctld/64FwyfJfD783R+/aKQ31/W8NODMj59J56LK3zYM9pdAmt31tV7sbLOV+xXCMub + YljUnMycpgxmtBUxZ3wDs7pGMGnsCCaMH8nosWMYN2kSs5cs5sjpM7z/6BFPvvma5999y6fPnvHg8895 + 9Pw5j1+84OPPnnD+ynU2btvOqDFjqa6qZXhrG13jJzBFrtHS2ERWmpDBiHAhgTFkJCeTk55OYVYWZfm5 + tDXWMbajTSX8KgKwIgRPHD2aBdNnsnfzNu7dvMPnDz7j4YcP+eDex7x3+x5XbtzizMWrHDp+hv2H3hYc + Z/+BI+zbf5Bdu3ezc/c2duzcyJ69mzl6fA/HT+zh0Fvb2XdgM3v3bWbfvi0qHDywjUOHdnHw4E52797M + rl2b5PNtHNy/Uz7bwYG9m9izdSnb1s9my/Iuti8Zw77lIzm8vJ2jy1o4sbiBM4urubikkptrariztopb + a0p4b00+t1bncndVDreXZHBlVgq3FubzeGsbP5yczc8XlvHVqeXcPziXM5smsX9ZJ9sWtLF1UTtrZzao + BKwFo/KY3phCW5Y/VTFuFAQPJMPHibSAwWSF+5ITG0ZOUjyZyUkkxycSFx2nItqxMYlCqJOJi08mISmN + xNQM4lOElMcnERmbQGRkIlHRsh2VQERkvOwLIuKJCI8jUsh6rGr9qUSSohJJiU0mW4h4QXYBDVV18o4m + s3bFGtYuW8PsqbMY0Tyc4rxCUhKTiYqMVGX9JsREqd5zQmw0SQlxZGSmC0nPEWJeQn19LU3NdYwa3c6c + OdNZsXwRG9cuY/u6pRzaupIzu1ZxeddS3t04g3MrxnB6biP7RqSIr/Rkc7YjuzOsOZFtxelMY84ka3Iy + pjenIt/kfGxvriT257oEcLfEXtxJ1uGu+K37mWLf88y5U2DG5VxjTmXpciBZja1Rr7Mp+nV2SpC0L1eH + g0X6HK4wEZ9ixu5KE3ZVm7FPbNWeJhmbdaZsqTVhd5MlB9rseavDiSOjBvBWpxMHFAF4uA37W6xUSzQc + FVt+otFc/JMZp+rMOFNnzrlaKauN/ocAfLleSwiQDvdGGPCJ+M7PRpvydIw5z0ea8WWHmeof8d+MUjKy + BIrw226iEn+/6TT7WwD+USUAKzDlp9EmfNthxBfipz6vl2BU/OPnDWZ8WmPGlfS+XE7tw4elxnzZ5sLT + Rgc+rRLfU2bKPTn2SYMTHzcN5mbZAI6kWLAoQJNxvlo0BEi8JbFSiI8Zbu6muAwyx87OGHNTfQx0lSmg + NTG3MCEiKpimpnLamotJCHfDSutNrNS64W3WgwRXLTLd9akMs6U1ZRAtCQMp8DEhXohBpHUvwgTBNr0J + tuuHh0UPBhi+/mqZEJu+DLLpR4iHOY2FUcwZWcKiMcVMqU+ko8ifKY3RrJqaz76VzVzYM41LB+Zwad9c + rh5cwIXds9g4o4ZJddFS15fWXHcaMwdTlTqQcmlDWYY7Jdm+FGcHS7+OICsznNiEAEJifPGP8cM3zg+v + BH+VCOyRGMSwxGCV+OuZoAi/UsYHC0Lxjo/AS+CbEI5/YhhBSSGEKBnA8UMIi3EkNNScwAAdggPViZY4 + Mkn8ear0yYwUbbIklirI1aekyJhyQZnEfmVFplSIH6gulvi3XPx1jSPNNfbUlJir0FhpzfBqO4ZX2tJY + YkGd+PKGAlNaSi1pK7MW2NBebi8E0omx9YMZ1ziUjupBNJY5UFtsQ22hHdWFivhrTWWelZSKGGxPZZEN + pTKm8tOtSU+wJjzATGJzCzwGW+PqaI21sQmWhuY4WNvj5+kv4ztJxnYSocGKACzfhbcfQ4e64+oyEB/3 + ISRHh1NVkMnY5kpmjGpm7l8C8JhXAvCC8cOZP1ZI9Nh6pnfWMmlElSpbeGRdsQqdihhcVyokvJQRtUWM + kGNtNQUqYbitVrblmAo1hQyvyZM6BXQ0FDBa+t+olhI66vIYXpVFc3kGLRUZjKjJYVRdPiNr81VlZ3Uu + zYqYW5JOe1UeHXJ+W1UuLSrkyLk5tAgJV6E8m9ayTKmbQVNRmuqctopsRlbnq6axHluvrGtcIihjnJSd + VXKt0hypm0Vtfrp8x+nUFGXTWKGI28pUYqVMaStnZns5c9pLma0IvcPzmaGIvsPF3g/PFX+cx8wRBcwS + zO4oZE5niUoAnjdKfMLoChaPq2PJhHoWT2hk0YQGFnY1Mq+rnlljqxnTkk9pltjgUDfCvZ2I8BtAdPAg + 4iOGyLtVllvwojjfl4J8TzKzXEhJsSM+0ZbEFEdSs1zJzBtGVu4w0rKHkpTqKj7DkbBoO0KjbFQ/agiK + tCUwypaASBv8w23xDbPBI9iCIb5GDPDQwclNiwHDtBnorqPCAHdtnOXYX3AcooWTqyYOgzSwc9XAUeq4 + BVjiEWDFEG8T+VwXKycNrBz6C/phZdcHC5seco4aQVEWZJcOI7vQlfQsB/KLXaltDKCq3p+iCh+yCzxI + Th9MZIwdwSHmxEg78zLcpG/EMW10rnw3SdLPPclOdCHrT6QnDhRfaa/KhlbGa1i4FbGxDiQmDSBJkJwy + kEzhptnCTXPynckvcKaoxInKSmfxZQNpaxgo42wgM1tdWNs5hMMT3Lk62Y0HkwbxTJlCeaQiAL/KAP52 + pB3fddqLPVcydxVYoUzjrNj4r8TmPxee8UT4xvNmA74cbsgX4hu+bNfjy05dvhqpw8tRenwz2pjvxeb/ + pwD8TbvcY4QVX7SYqdYEftJoyGNFAK7RUUERgJ82Ktc0lvoWfDfGhn+oMoHt/sQrAfivdrxoEz8h9b4e + a8fXEwfydPxAbovve7fEmIvCU28U2HErz5krKTaciTDmRIghR4ONORRkwr5AczZ5GrHMVZfFg3RZOtSY + NWLDN3jbsC3QUSX+HogczO6wgSoBeJF8PtlZlzEDdGkfZEjzEFNq3Kwo9bChwMuWXG87cnwcyJa4J8d3 + APm+gwXu5Pp6k+sjMZC3L3l+QRSFRLzKAJa4siwlheSQYPEd/4sArMoG/i8RWPCXAOw1YKBKAPYc4Ir3 + IDcC3H2JC40lNiyOMP8wAty8cbd3wn/AAGK9PMiNDKUsNZ7c2AjyUxIZNXw4K5atZMtWiUH3HmH7niOs + XLON5au2cODwO3zwyRNefvsLn3z6nF17jzKuawYdoybSMXoik6bOVYnBF6/c5vNn3/L0xXdcvXFfdVwR + gBVB19bBFVvHwa/wl/hrP+hv4dfSZoAK/yn+mlk6qmBioaz7+0r8NTC2VkERgBUoWb9qGgb06qtNPw19 + tHSNVcuB/CUA37h1n29/+I2X3/3M/Y8+5Z1TZ9myfRer1m2Uz1eycesOTp69wEcPHvHF1//g9r2PWLR0 + pYzHbJWoa27lIO0c+CpT12Uo9s6uf+P/aQHYUd6h80AXXAe7MszDjZCwALFxkaq1fcNCvcRnDcbLayDD + 3BxVwq+dlQE2lvo4SmwzwNECLw8X0lJjKCzIID0tTuLp4FcCcFIkNdXFjBvXyZRpXUycNIrWthqJb+Pw + 8ZN2O5lhbWOIta0R9o6mDBhohYurLbZy3MRCDyNzbSl1sLQzws7ZnKHuTvj5DSU8wo/UtGgysxNITZcY + XO7n7T8M70BPIuJCKSrPZ+GSOVy4dIbHzz7l4eNPuHL9Em+dOMjmnRKHL+2ibVIlhY2xZJZ5UlDiQkWu + HU3J5gyPNqctSJlW1pwqH1tG50RwYtNCvnx4k3/+9IKff/6aX/lJ8NefIgC/5NMXH3P+2kk2bFsu957K + +g3zOHtqN08eXOOPnz8X3vtUeO9n8OMr/PH9p8I7PxIO+gF/PL7LL9fP8fWJ/XwhvOqbQzv549xROHeY + 77cv5aL4vc2Jviz0sWPWECPm/IcAPNVehynWmsy01WahozHL5XtaL+9o+xBH3vIezIVgD25FePN+iDv3 + /Vy5M9SBWw7W3LGz5Y6tPddtbThvacExc2P2Gemz3UCbLUaabDPTZY+1EXttjNgt73unpS47LXTZbKnD + ShsdZlvrMNZam1ZrPZoczRk5dBBdHl7MkPG/aLAPy1w8We/ly37hN4fiwtkX6c/OEA92Bg5lf8gQTkR6 + ciHBlysJ3lyNdeNmjCv34135OH4QH4ZLG30suOJmwhnBW56mbPMzY3GAKbPDLFldEMDejnzemjGc7ZPb + 6aotoUhsSXxklHCzWKLjhLvFZRITK/j/QgCOik0jIubfAnBEdLIKfwvBf67t+99C8H+vB/zXGsF/i7px + /xaAw6NSX00D/X9DAG5prGTa5FFMmdRBrcR1KclRJMRHkqBMq54g3FPseGpKpgqKCJyelk2GkhGsEoJz + pcwX5P2ZIfxKBC5UrQtcphKAy8vLVKisrPgfqKqupLq6ipqaKqqqyqmoKCUvT/leQwkO9ZWxKLbdXVnS + SGysjTMmxjYYGwqMrDEyMEdf3xBdPW2BJvqG6phaSJxiq4ODgy7OjvoMEgy1N8DTQR9P6cfeclwpvQQe + dlp4Crykb/tbqBNspaUSb+KdjUl1NSfb3ZJS8ZH1/naMDHFkfKgjE8PsmBhuw8QIO7oURNkzLsya0aE2 + jBU+NSnKiRkJrsyVmG5+li8Lcv2Yle3NiEhHSryNSBmkTqhNTzzNezDYuBcOej2w1emFjZ4alnpamOvp + Yqynp1rzV1tZ0kdHUwVDOW4qY8fK0kRggLWlJjbW/XFWfqw3SE3sphoeHn3xcO+Dv0cv4vz6kB+lRV2S + McNTjehMM2RchoznHH3m5+mzRuKG7bWW7KiR2KDYgLV5WizPVGeJcNKFKb1YnN6fFcrMkqUWrKt2ZGWV + MwtLHZktdmxq0SDaMxxoTrSmPtqM2mCJESTOGCPPPyXamRlxg5gWO5BR8r00+BlSMkyTfHd1Crx1KJK6 + 5ZFyjnCa2hRbquUapXKNgjB9MgM0SPPtR4pXH5K9+pHq01fQj2TPXiR6dCfB403B66S6v06e25tUuPWi + zqsvLT796fDXYFyQDhOCtFUC8ITg/oJ+jA9RZ2yQ+r8FYLc+tA15lbk72r2vQBGClQzfPqp1fJXMYGVt + 4Hapq4IiBA+TUhF5lSxfDzUVRnrKNT36M8pT9uX4CCXr17U3zYMU9BL0od65J5UOr1Nu141K+zepc+pN + o6DVsSdjXHoz012DxT7afwvAm/3V2Orfj+3+fcQW9WBbQC+2B/WWGK2XoIcc786u4D7sDevHbik3+7zG + eo9ubPLqxq6gnhyJ1eJ4kh4HY9TZJXW2yLH1vq+xxrcb6wJfZ2tkL/Yk9OdotgFvFxhxXPrB8Vxd2dfk + eL4WZ8uMuNxgwY02Z250unFrQijvz8rgvUVVXFzWoVr/962VM4Tfz2aPYPfquexVMn0Fu9bOY+/GRRzc + spi3dizj+M5lnN6/hqtvb+X98/v44PIh7r17gDvn93L95E4uHdssrmc9p/at5e1dqzi2fQUn96yVczZy + dMcatq2cw9KZ45gxrpVx4s8V8fcvAXhcc71q7d9J7YIR7VK2MXF4C3PGKgLwDA6vX8GFvZs4I9c5uGoe + 2+ZNYv2sVwLw4smd/xaAJ45i8ZTRqumgFRFYmRJ65dzJrJo3hbXzFUxizZzxLJ8+ksVdw5nWXsNI4baN + hcmUpISTFjqMKHcHwlytCB1gTrCjCSG2+jK+dQmz0SbcVlPsiSYxTlokDNQmeYgBmR5GZHmbkuluSNpQ + 3Vdw0yZDOFe2lx6FAYaUhUlcEG1JZaQ5paGGMmb0VGVNjAVNMm46MpwYmzeUcQWejCvyoTPfh6IoR+KF + qwVKjO89QIPAIX8JwDbE+loS6maI7yBtvJw1cBeb4eGsJrG22CI3DSLd1Ikf1l/GWV8yfdTIkbGSF6BO + UZAG1ZG6NMXq05loyIQkA2amGrM425qVOfYsTrFSTf88SeqMjdRhfLwBE9LMmJhuzowca1aUDWBHnTv7 + awdzqMyeQ7nmHMyQ/pmmLdCSbUGWbAsOZ+lzJFOfoxnSHwXHpM6xVC1OpAiSNHk7Tp1jEX14K6QHh5Rp + oGU8nA7vy4UoDa7G6fBesh63kvW5I228L/gwQZcH8bp8Fq/DExkXigD8RYy2ah3gl1GaqlKBIv4qeK6I + v3I9RQR+Ivf5LLw3jyN78zxWjS/jNfkiXkOu0U+u0U+1XvCziN58GdWbb5TsX2nfd/HqfK18Ht6TJ8Gv + 81lANx4LlPJBUDc+jZRjcT14ktyXF5kafJuvz3cFAhl/X8vzfy329ouUvjxP6iXoyRfJPVT4MvlNXiS9 + zpdJb/Ay5Q2+y+zBD/m9+aW8H79Ua/DPJl1+G27Cdy0mfNlgzNMaYz4t1uOTHA0eZ0ubcvvzreB5dn++ + Krfk55GKAJxGt9xcPXHU+uLQDYiPNSYmwpzoCBuiwu2IibYnM8OVPCHYRTnOlKTZUhJlKp3QgIoQPSpD + 9CkNk84aZkCeICPMiNgAA/yGKtnEmkQEmJAUYU2qEPj0cEtyoqwoiHMgP9Ze6lqQJJ08wc+IZH9jkvyM + SfA1IsnHkERvA+K8DIjxNCR6mCkRw4wIdzciwsOQGF/5PEgGULgBBdH61Ei7xxRYMKvKViUAL1cE4AZb + NtTZsKnGio3lpqwrVIRVLZUIvC5Xi83F+mws1GO9IgBnaLI6698C8MYCM4EpGwokuM1XoIi/pmwuMmZL + vjbbc3qzr6AHxyt6cba+N5da1Lg8vC/XRqhxo0ODW6O1uT1On7sTTLg1zpgLLbq8XavJkXLp5EWa7MnV + ZEe6tCFBmw0J+mxJluumm7Ah04i18h6Udi5M78cseekTY3swOuJNOsPEMYX1pTNIHJM4hA7/XowN6cfU + SA3mJugwP1mLBcnqLEpTY2W2hrRXHEmRBttK1dlbp8nJTgOuTjThk/mWfLnKlp822vL7Nkv+2Gr6HwKw + Hl+v1uOL1Ya8WG3GF+tseLnWnu/XDeDntcpUtx78Ifh9tRv/XD6YnxcN5Ns5TjyfZsenXVbcG23OtRZD + +U70OValw74SdXbm9WVHbj/2FGpxqMSQoxXmvFPtwDtVAznX6Mn742P4aGoSN0eFcrHZnXfrHLneYM3t + JnM+aJX2thnxYISxqrzfLN9pg7ZAh7vS2e826fFhkwGftEodpV6bAZ+26fGwTYMPWnpws64b79XLoOvs + xdMJ6ryYqiPtNeaXxdbyHAPkuYfA5qGwQbDChX/9LQA78GycIgBb8lGnFTdaLXhHBtN2GUwrZKzMypIA + KtWAxlgdKmPEIMfqUp7wp5ibbUVzni2NWVaq/YokI8r/EoCjtFVTQCsoiNKRc4xUdeqzLWnMtaIxz4ym + PCMa8nVpKNAUqNGW14NZJW+wpbkf70w25vYSG77Y6cKvhwfD24PglJLxK89zwZrfL9nxu5INfMEZjsvz + 7ZbPVljzr4lG/NCqzZdVYrAq+vFtnTY/y3f220hzfhtrzQ8TbHgqz3uv3YoztRLkpWrT5deLxgGvUef4 + hmodi2mB8uzxluzMceBwsR2nqu0FNhwuMmVjsiZzgt9knHc3JoX2ZLk8x5Z6V3aO8GTHyAC2jA5lSaM3 + k4tc6cx0oiHJnpJoq1cCsIzxJE8d1bQTeb4SJImBbA7pxviYbizLe41jY8RwK8Lq2wH882oE3P1LAI6D + FwnwdQr8QxGBc4XwFgv5reCP3+r5458t/PGvEYIO/vilkz++Gc6vD6r44kwmV5Z5sUP6zcLUN5gW3o0l + Kf3YX+/I+YlBXJ0ZzfVZMRwf6cn2KnsZR+YSEBuzIc+Qjbn6bM7WYrsY02NlBlwbbs2nE6W/LHTnx5Vu + /LxpMN9usuPrndb845AjP55y4ad33fjX7UB4mMAfT7P554syfn/RwA8fVPHJ0WTOLwlid6c/GxuD2NQc + yfrWGNa1p7JuZA6rRhWyeFQpC8bXsXLeGNYvn8Ga5fNYs2Y5y1etZOWGDWzbv49Tly9z99NHfPLsKQ8E + 9x8+5P2PP+b+gwd8INvv3fuAU+9eYtf+AyxeuozZs+ayePES1q5ew5pVq5g5YybtbSOor62hub6e4Y1N + DG9qoqNZ0NrMGAmuJozuZFpXFzMmTWLimDEqMXjlwiUc2SuB3NX3+PjeR9y9fZ9bt+5y8/ZdbgguXn+P + d85d5tg75zl+8izH3znNsbdPSvkOb79zlBPvvMWpM0c59+4Jzl88IdtH5JiSZbFfhSMnDkjdw5w4eZTj + b7/F4aP7OfSWHD9+kBMn3hIc5viR3Rzes4a9Wxeye900CUa7OLRqDEdXjeTtFSM4tbSJc4truLykgvdW + V/H+mgrurSvj7vpCKfP5cE0ed5dl8f6SHD7dUMO3h8bzx6WlcH0d319Yw8eH5/P22glsXzCcDbObWC9Y + PKGMGa2ZTKqNZ0J5FMMzfKmLcaM8fBBFIa4UR3jKeA+iOCGCguQEspOTSBHSHB8Tr/rVeEJ8ComJaSQm + pZGUmklKRjZJ6VnEJQnZT0gWwpsixF4h/so/ApKI+lP8DQ+LIUIQExavEn5zkjMpkHNriksYXlvLjK7x + bJH3eWzfPg5s286GFSuYN306LXV1FGZnSxsSiI+OIjkuVrWdnJhASlIiKWkpqnWAc3NzKCouUP3yuqa2 + gtGjO5gxfQorlsxn88pFHNq0gvM7V3H7wCru7JrPrQ0Tubq4laMjM9hW4smGDBt2pJlL8CY2PsOQU0rQ + Ft+H49E9OBXbm4vJEqAla3MzUYc7grsSqH2QbsyHeRbcET97OdeEM9n6HEruLwTldTZFvc7uNHUOFhqJ + 7zDhQKkZO4WsbizSZ70Q1S1V4qerTFldbsiaciM2C4Hd0WjNnuEO7B3hwL7hduxtk/1WJUPYkv3iUw43 + mnKs3pS368w4VWvOmToLzonNO1NtwolyXY6Lzzpd3p+LymwTjVrcGa7HR+3iV0aZ8GSMOc9GmvKiw0T1 + j/i/BOCXHaZ81W78twD8ndjVf4xSssAU8deMn8ca8+MYI77tMODLFh2ei/961mDA83q5Zo0Jd3P6czur + Dw9L9fm61YEvG+0keLPkUYX4v1JDPpU45tOGAdwpc+BEqhmrQ7WYGqDF8CB98v0MiPCzwNPLiiFDrXBy + MsPcTA89XQ20tdVVa9xFRAbS1Fgq47qQxLAhOOi9yQDtbkQ6qFHkZ0Z9hB1NkfY0R9vREG5Fkac+GS7q + pA9QJ22gBokumiQM0iHUSR1vZb1gR4ntBmjj6SikxsuSloII5nUWsXR0EdNq42jJHEpnoQdz2+PYOb+C + S3umcP3gbK4dmM3Ng3O4tm+manr2OS2xTKjwp7NgKMNzB1Gf7kx1+gBqsodSledNRV4gpXkR5OdEkpAU + QFiMFwFRnvjFeeOb4ItXoj8eSiZwYpDgVfbv3wJwnGz/KQD7/JcAHJHoTlSCC5HRtoRKvBoeritj04C0 + FGOJdY3JStMjJ1OXwgJDyktMKS82oyTfmCLxA6USF1aKT6grt6Wl1pnmGidqSq2pLrWkQeLPFoltWirt + qS8R/19oRp3Eko0lljQXW4k/l+1CK9rKHRhTN4SuFk/GNnkwvGYwDaVynUJ7ynOsKM2yUJVVBbbUlThQ + VWhNaa4F+emWpCdaEBliRqCPOcNczRloZ4a1iRFWRqY4Wtvj7+lPfJSyRECy2IxYQoKj8PMPxt3Ng0ED + B+AxxIWYkABKMlMY1VjBtJGNzBzVwGwV6pgzpoH541tZOKGNBV2tzB3XJHXqmNhWzZhGJRO4WIh3CSPr + S+msK6GjtlC2FVG4mLEt5YxWsoWlr41qeoXRzSWMVdBSwvjhpYxrLWF0QwEja3Pl3BxG1uUyurGA8dI3 + JzQV0aXUbShkREUW7YIxdQWMFnQI2VahNl/OyaezNk+FjqpcOgXtFTmq+h2VOar6E6SNk5rLmCztmSTt + mPhnOboqn7biLJoLM2gsyqShJJPminxG1Mh9myroai1nhiL+jqxkgSLqthcyp72A2SPymNmezywVlMzf + f2NOZ6lKBFZKJQv4PwXgJV1NLJrYpMoCnttVz5SR5XLPRHLi/UkMdxduNIykSDfS4tzJSfOmJNefimJ/ + 6XsepAu5T0yyIi7RkuQ0e9JyBpElZD8rT+pnu5KYNpDYBAciYm0Ii7UmPM6a0Hg7wpMcBE5EJA0gLNGJ + oDh7fCOsGCb9xs3fiMFiM4b4Gaow1P9VOURVynHhX0O8DXGVuGyQcLAhwt88Q63xDrPBPcAcFznu5KaH + 42BtgRaOg9Sxde7NgKFq+MhYis92Ii7Nmqh4Y2mzcL3iweQI0vIGkZgh7U1yJjLWjlBljSopC3PcGdkc + z+SR6bRVR5Cb7EJmghOZUk9BujxHfII90XE2RERJ34+ylmd2JDHZieRU51dIcyQ5w46UTGsysq3Jzrem + qMSGChmPDbX2jGxwYkqLIys6B7J/nCuXJrry8YQBPB1tyxftwofaLVTTQH/VIXyn3YavRlj+CXPZl8/E + pr8YIbZa+Mejem0eN+ryrEWPp8PFjrdp87xdW3yCllxLh5cjDflulKnYfisplXWAbcU/yLXlPi9axX80 + mfBZnXCUah0eVGq+QrUmj+vlmoqwPMKUr8V/fKP4D4nJFfw4wf5vAfgLacezVkO+7DTn67G2KgH42Xjx + DU0WXFL+aVdsyvV8K27lOXIz054LseLnIgw5EWbM4RBj9gWZsM3XhFXueix21WG5cOo1nuJHva3YEejI + /jAXDkZI7B7sxDpPCxYqU0AP1GecqxEdQ81odrOkZpgNZZ62FHjZk+trR/ZfArCPi+wPFgwj19+bXD8/ + cnz9VQJwcWgEVYlJVKWmUZacQqqyFIWnOz6K4PvfIvBf4q+rQJmRRvCXAOw5YACezq8EYE9FAB7mQ0ZC + OrlpeTKGUon0D1FNHR0gti7e24O8KEUAjiMtPJC44ADy0qWftY5gfNc0Jk+fx+QZC5k2czGLl22QePMc + Dx9/yTff/apaH3jNhh3UNraTnVdGelYhJeX1TJo2l5NnL/H0xbd8+fJH1ZrBE6fMISA4WiXwKlM/2zkN + eVUK/sr+/T8JwErmr4L/TQDW/y8BuHc/HdQ09V9lAA/1orC4khWrN/LenQ/55vtfefrld7x75bpK/J0+ + ex6dYybQKM87ZcZsdkqs/t779/ni6+/44JNPWbFmvSoD2M7JVSUAK1nAilCriLz2cuwv/D8rALv8KQAP + /FsAjogMkXEcS2qKxLcRvnh7u+IxzBlPwbChTjjYmUhMo4WVuS5OjmYEBLiRn5dKXW0pZaW5pKUpM+T4 + kpQUQX19GdNmjGf+opksWDxD3k0nWbnxePm6yLMomb0G2DoYSxvMcBlswxB3BwYMtsba3hATS22BFpZS + x2mQJe4eTvgFDJFYPIisnHjyC1PIyUsmISWSYGlncGQACXLv+tYaVm9YyflLZ7n30R3OXDjF1p2bmbd4 + Ll3SlmbxBwUtGcSXBhGdP5SkXCeyxVZVJEscEWdOY6gF1b7mlPhbMyIvlEMb5/D0k6v89MMzvv/xK378 + 1w/8+PvPf+JHXv70Qnjefc5cOcGaLYuZs6iLletm8s47O3j08WX++cMj/vjpMb9//5Dff/hUOLHgx4fC + lT+EZ3f544NrwqcP8njjah6uWsLT9cv59dA2fj+yjW/XzeFSSwGb4zxYION/hqsec8QGzHI1ZIbYgekO + Oirxd4GDASudzdkwUOzGIDsODHHiuMcgLvi6cj3QlZs+A7jlbsfNgZa872jFB472fOjgwPt29ly1tuKs + ucThRoYcMNRjv8Srh6yNOOZowXFnC446mnLI1pB9FjpsNddguZUGs6y0GGWtSZONDi0uNoz392JebDyr + EzLYGJ7IBv9ItoVFczg5mbfSEjgkfWF/bCD7Irw4HOnB6Xhvrqb6cT3ZmxsJQ7kT58pHia5Cy115FDmQ + D/xsuelmxkU3Y056mXIw0JJNoZasiRUeURnO6fGlvDtvJMfmjGdBWx01GanityOJkhhLNXVzfIbwNQX/ + vQbwv9cBfiUAK1m+f4q+SowmCI9KUuEvQVg1rfT/BwH4L/H31bFX9/6fArByj38LwIoY/P9OAI6JSFAJ + wEmxceTIcw1vrmb65FFMnthOdVXeKwE4IZqExHgpE4W/JpGclK5CSnIGKYoY/GdGcFp6NulpucInc1UC + sAJlWujc3EIZs4UUF5dSXl6hQmVl1f9AdVU11dU11NTUCqqpqqqkpKRA4qBEiQGi5DuNknEeTlBgiMSz + Pjg6iH21csHCXOynMmOCoQkGBnroG2hjZKKFhZUONvZ6ODjpqQRgF0c9Bsu+u50u7rZaDLPTVpVuNloM + tdbAzVqdYRbq+Fn0J1j6WpSD8IIBhqS6mpEzzJIS8ZH1/ja0B9sxLtiermBrJoZYMlHiownCmyZEWjM+ + 3FIlAneF2zItxonZSYOYnzaMBRmezM/0YLZgfMIAmsOEZ3npkTSwH6F2vfC26IWr0Zs4CTezN+iNtYEa + 5vrqGAkMDdTlmf4NEyN5NrGFtjbG2NjqY22pho3wMienvrgM6ofbUIFbH/mOeuLr1p0Evz4URWrTlGRM + e6oJY4XjTMoyZk6eEcuEW2+uNGNfk4zhJht2Vgi/LtRmTY46KzL6sDStF8vS+7IsW4OVUndVuTXLKuyZ + X2zHrEJHphYMYEzuq8SORok1akOMaAoyYnS4DZPl+afHuzA5zpmRkYp4bkSxhzZ5w7TI89WjMMSE0ihL + quJtqUiwoSTWgjyJITMCdEnyUSPBoy8Jnv1I8lIjWfaTffqR6NWLeK/uxHm+QZzHayS7dyNn6JuUDu1J + 9bA+NHj0oU3qjg5QMoD/EoDVBWoqAXhckMa/BeChfRgxuDedQ3oz1q0fY9yVLOA+tLu/En+HewqU60ld + Fbz60iHlCEXkFbR7qqnQ4aXOSCUL2EONEW5yXdc+r6Z8HtjjT/SixvFNymy7UWLVTcrXqHXsQfNAuZdL + XyYM6cccT22W+umyyldTbNmfAnCgGtsD+qrE362K+CvYEtiLTf5vssnndTZ5v85mv+5St7vEb6+z3vM1 + NihZwMG9ORSrw9EkAw7F6bA7SpOtYWpsCOrOmsA3WBfanS0xfdmXps3xIokPK6x4u8yU44UGHM7R4lB2 + f45JHzhbY8zFZnuutbtxsyuM27MyubGomneXdXJi+STeWjmL3ctnsWP5dHaumsG+dXPFdy3kyLalHN2x + jGM7l/L2nuWcObCai8c2cuPUNm6f3y3Ypdq+dGwDF97awNkDazi1dyWn9qzmtDIDxVtbuHJsBxcOb+Pw + 1uWsnT9ZuNMIJnXUC5+sVIm/HYLRjTWMb2lgoiL+dgyXsk0lBE8RzBs7inWzp3JozVLO7lzL6W0rObxm + HjsXTWXD7Al/CsCjXgnAE0cKR1ME4DEsnjqWRdPGsXj6OJbOfJUNvGrORNYtmMLmxdPZtEjKhZNZPVP8 + gLRp8vBq2oVTVmXHUxAbREawu/TTQcQOdSBS/GOYnSGBFloEmItNsexPuJ0G0U7aJLgakDbMmAwPUzLc + jUkbqv8Kbrqyr0e2pwGF/saUhJhTHmZOcZCxxNG6EltrUxhoQEWExA4xVoxIdZLx5864Qh/GCW/szPcn + P8yemGFG+Lvo4umkgb/48DC5T4yPFVFe5gQN1ldl/w5z7I+bk9g8ZzWJsdUJdtMgYpgmscP6kyj9Ol3G + SXaABjmBGuQHa1AeqUN9tB7tiQaMTzFiepopC7NtWJnrwOJUW2bGm9L1twBspBJ/J2daMivPltUVg1QC + 8J7qQewttmVvlgl703XZn67NfumH+zK12Jcj+7m6HMxR+qEBb2XrcThLlyMZAql3NE2LYymaHItX563I + PhwK6cGBgNc5GtyD0xF9uRitwbV4Xd5PN+Juhgl30034INWYj5L0eJCox6N4HT6P1eJptCbPZEw8j+jP + iz/xheBZRL9XCH+Fp7L9JLwvn4X15jO5/vNYdV7Ea/EsRp2ncv8ngs/De/FZaE+p24MvY/vxTYKGQJ2X + Mf3k+j14HPwajxTRN1Ag5cfB3fgovBufxLzBp4m9eJLeny9ztfkqT5evcrT5IlOTF+ly/9Q+PE3qwRPB + s8Q3BW/wNOE1niR043ni63yZ8gbfZvbg+/xe/FDamx+q+vFToxY/thrxstmQZ3WGfFppyMeFOnwktvxR + tjpf5vXn63x1nudp8lWVDT+PDYVZGXSrqDGitMKIgiITcnIsyEy3JSNNyHfaINIyBpGeOZBUIZPp6TZC + tkzJEkKZG6JPQbAuRVLmhemTE2ZIRrghKaHGRPsb4jdUC9+h2kQoWb0RNioBOC3CkqxoK/Ji7cmOtiEl + xJQ4cQTxfgYkBxiR6GdIgq8+CV66YuD1iPHQlY6sL6UJUR7GAiOivYxICDAhVRxFTpQMkHhDGsShTSi1 + Zk6tAwtqbVlWJx2uwY71dTZsrLFmg0oANmB1trZKAF6vCMBFemxSBOBcHVZlaLLmTwFYEX/X5xmzLteI + dTkmrMk2Fsh2njIFsD7bcpUMwJ4cKnyTk5U9eLexJzeG9+G99t7c7uzL3dFqfDBOkw+7dPl4khH3uwy5 + 2anPuy1iUIX4v1MunblIWzq5LnvS9NiRYsCuNBN2ZZmyTe61MdtAHK8Gc1P6MC3+TcZHvsHokDfpDOxB + Z4A4Kz+Bby/G+PWlK0SD6RFazI3VZl68hqAfC5N6szKjLxvlRW8qUmNbiRj6WjVOduhwfaJ0iPlmvFhh + yffrrPhtizm/bzaBLcoU0Pr8uFafl6v0eL7CgKcrTHmxxpqvVtvz3Upnflw5iN9WuPP7ymH8sUrKZUP5 + dbEL389x5vlUez6dYM2dDhMu1uvJ96LN4VL5nvLFeWX1ZEd2H/YWaMkxI45XmHOyyo53qpw51ziM98dH + 8fGURG6PDuFqyzBuNA/kdrMd95ot+KjVRCXsPhxhxIPhhtxv0uVegzb3GnW4r0zP2aTPR80GPJBO/2iE + GZ8r/6gZbcHTUYZyXn/u1L0ueI1PWmUgdspgHiMDeJIu380y47elDrB+0Cvxd51g6UD+ucCZn2Y783Ky + LU/HWvHpSHM+7LTkZpsFp+tN2VVmyKp8A2Zk6DMqSZ/aKG3KonQpidGlLMGQajGIdVkW1GdbU5tuIQTP + mFI5rqAkTo8CqZ+jrAEsyJfzyhKNqU41FTIhgVOmQIKyuix9anI0qclVoyavN83ZbzAt9zXW1fTm6FgD + rs+15OlGZ37ZPxiOS/vfdoLTtnDehj8u2fLHZXmu847ymRzf58gfa6xgphk/tYuRqRWjVNWHbxu1+anN + mF9Hm/PrBBv+MdGaR2MtpB+bc6TChCWJmozy7UPdoB5UD+pNg5uaBFD6LEwQUpRnz64Sa45U23C02oL9 + RYZsTtdiQXh3Jvp1Y1pEL1bkm7G1YRC7Rniwc1QAO8aFsaLVj2llg1HWKmhMsqVM7ECW8uOQYXqkuOuQ + 561NsU9vavy7MVyM5eTobjJme3BuognPd3jy08kgfv9bAI7h90cxiEWGrwTfJMB3yfB9hhDfXPi1jD/+ + WcPvNPD7783861fBd038+lkV/7hewCe7ojkyVhyXfL9zYruxIk2NQw1OnOsK5OLkcM6OC2RP3QDW5Mp3 + kabLsgzlRyLarM/WZZPYkM2Z6hwu1uWS9NGPxzvyxRxXvl08iH+sGcDL9da83G7Btwfs+OGdgfx0bij/ + vBkAH0kbP8/njyeV/P5ZE9/fqeWjQxmcWRDOjvYQNjbHsLUtha0jM9k0tpD1Y8tYPb6KZV21LJ02nC0S + YB3YtZpD+7Zw+PA+9h7cz/6jR3nn3Qtceu8W7z94KHjA7Y8/4tZHH3Lz/j1uf/ABtz/8kGu33+f0u5c5 + fOwYO3fvZefO3ezdu5+D+w+wZ9cu1q9fz+JFC5k9ezZzZs4UzGL2tBnMnDKZqRMnMHn8GCYJpnZNYIpg + wujRzJw8iU2r13LyrWPcuHiV92/e4fq197hy9QZXb97i5vv3uXrrDuev3OTUhSucuXCJswrevcj5Sxd5 + 9/I5Ll4+y+XrF7h2612u3bwgx05LvXc4fe44pwQnz8n2hVOcuXiWU+dPc+LUCY6dkuNn3uHM+ZOcPf82 + Z04d4sThzRzZvZxDW+ZwaMNUjq6dwIm1ozi9up2zy5u4oBKAy7m9uop7ayv4YEM5H24q5eONhTxYX8hH + q/L5dF0ZL/e2888zs+DaSri+nn+cXcndPTPZNa+VJePLmTuqiPljipjSks6EmnjGVkQyvjSCzuxA2pK9 + aU70pCnBh8aUIBpSI6hMiqIkKZ68lGTSk1JIjBMiG5tAYmIqSSkZKiSnZ4lvzSE5I5v45ExiE9OIi08V + wvvXr7tTiYpMUAnAEaHRhIdEES/7WUkZVAihbqqsYMrIdhZPm8jGpXPZtW45u9auYOuKJWxdtZQtq1cw + Z0oXHY0NlBfkkZYQT2p8vLQnmbSUVNLS0khOSyUxOVlVpmcp66alkJ+frfoV9vDWJqZ1jWHJrMlsXzKL + t9fP587+5Tw4sJhHu2fx8boxMm5yxTZ6sT7NSvVjpv1pRhKw6XE8VUu1rsxbsT05Edub88maXE7W4WaS + LnckILubbMCHGaZ8mGepEoAvib89kyXBX5I6WyPfZHPUG+xWpicqseBQmSV7SszZJPZ3uQSLyrRUywsM + WCp+fVGBHouVH3gJiVlfLban0ZZtQmZ3NFkJLNjWqAjDpuxpMOFAvQlH6kw5UWfOKUX4rbPkXK0lZ+S8 + 4xV6HCvpz8kyNd6tUaaB1uS9VvE1bbo8GGn8twD8TPzci3YTVRawMjXoy05TvuwwVpWKAPytIgCLH1Iy + wX4aa8bP44z5Yawh33Xo8VKu92WDoF6fL+uM+EJir4dFEi/k9eNxmQ7fNlvznbT9q3q5V5Uxn5Ub8HmN + BZ/X23O/1JaTEnhvkQB7fogWnUJwi3x1ifKzxM/PEXcPO1xcLDEz00VPVx1t7f6YWxgSEeVHc2MRwxvz + SApzYZDh63gadiN9iC4tMc6MTnalTQh6c7AZLUI46sUuV3sbU+VtRIWUJT6mFPlZkOFpQsJQQ2I9TYn3 + tiTSTYhLoD1tBWEsbM9n5cgCZtRE0541hI7cwcxtjWTfwgqu7pnIjf3TubF3Grf3z1Bh//wqFjRHMKXS + i4nlwxhXKufku9Ca60Jz/hAaC72pKwykuiickoIoklP8CI92IyhiKEFxngTIOPNO8MMzMQCvxCCV8KtM + ++wdH4pXnGz/LwKwMgW0IgBHJ3sRlzyEmARHoqItiIkxJinRhEwhK7nZFmRlGpIjfriw0JiKUvHjJZYU + S2yYl21IkfiEikILasvtaK4dQFONM9XyXqqkTp2S+VvjSFOVA/WKKFxoTo3UbSixejXVc64ptXkWNJfY + 0ylEaEyDELcWL9rrh9FYNpCqfHuKM8wpkJigNMuSmmIHGsodqZRzS3JMyUs3lXFrRlyEBcF+ZrgNMsbR + Sh9rUwOsjI1xsnEgwMuP5LgU0pKzSEzIICE+TTXVvJ9vAG6DB+M51JVQPy/ykuMZUVvKFCHV0zpqma6g + s5oZI2uZPbaJBRPahBgPZ/6EFmaOaZR6tUxorVRlyI5pKlGJwaMbShlZV8jo+iLVsYkjKpkwXNBa/grD + y+hqK2fSiHL5rFSOlTCuuYAx9XlyTp48fx7jmgrkeDETW4qETJcyTepOailhdE2uChMbi5mgTB9dn68S + hsdJP+5qkmNSKhhfL8fq5Jo1+ar6Y2rzVZ9PaSlnelsl01rFPipCsEApx1bn0V6SyfCSDEaU59JerYjJ + ynTRpXTJ801uq2B2Z4VqDd/FY8pZNFJsvmBeZ4HK/qswUhF7i/9EkapUicHtyn6pagrovwTgpRObWTKp + mYWTmpg/sZGZY6sZXplKofiItBhPMuK8yYz3FB/hJe/Yn6riEGorgikudCc11Y6YOBNihXMlCydLl9gp + K28QmYKUzAHEpdgTnaCIv2aExJkTFm9BaKI1Ecl2RMhnkamORKQ5EpbsSFCCHb7R1niGSr8JMsI92FgF + j1DTVwj7E/K5h9gB9yBT3IJlP9wS7ygbfKJt5VwLlVDs4mPIIE99FVyFpw1wU2egZ3+GhegSmmwhbTHE + P0yTcIlxU9KtScyQ50izI0raFZVoT1S8tC/KUvygA6UFHoxqjWN8WxJ1Jf6kRduRJLFhcpw1SYLEeGui + FXE7Rp4t0kxgrhK8o+NtiEm0IzbJWnymQO4bJ+MmXrhUapYJWQWmFJaZUVVtRWu9DROabVnc7siu0c5c + mODCh+OdeNJpwwuJeZ+3ia0VPG+z4kWbJc9bzVR4IfzjRZspz0eI7Rf+8VC4xyd1mjys1+azJm0eNWvy + uEWDz4dr8KRNg2fDNfmiXY9vFQF4jLLeu7JusA0vOxSR2VLuJdyk2YSPKzT4qFyND8XPqFChxsNauZYi + LLcayjWMxZ+YoKz3+634EUX8/UsAVrJ/n7YY/IcAPIBn4515v9mcq+VGXCsx5YbYnFv5dtzOdRB/a87Z + WGNORplyLNKUg/KudwonX+stvnOIIgAbskbs+UYfS3YEOrA/1Jn9IQPZ5m/HWjdTFroaMNXVkAlDzRg5 + zIqWYdbUeLwSgAu9lamfhcv/LQAPIsdvCLl+HuQG+JDr70e2n7+UQRSFSjyUmERlahqlKf8WgH0H/78X + gH1cBYNcVPByGaiCSgBWpoFWBGCXofj9KQCXFZRRmltCakwCocOGESh1E3w8KIgNk/vFEh/gpco2DvD0 + JC4mnoyMPHILK8grraGxReLZOcs4+vZ5Hn3+FS+/+5X373/K8tWbKSitVYkzfoERJEh81jlmIifPXuTF + y3/w5Tc/Ssz6HhMmzyIwJEY15bMyBfRf4u//HQH4P6eA/s8s4L8E4D5quioBWEffVDUFdGFJFWvWb+XW + vY/5+h+/8NnTr+Q5TjF/8TIaWtrkGUvIKShmeMco1mzczJWbt6Xd/+Dh46es27SVtOwC7J2V9Yqd/872 + /U/x9/9xAXjAwD8F4AEMkvfr4elGdHQ4aekJpAtixHf7B8r7C3AnNNiDsBAvvL0HYmdrgJmJJg4OJvj7 + DyYjPZbqygIqyvPJyEoQGxFIssTc9U1i56ePYf6i6SxePptps8aSlZ+Ap59cw9kYCzs9eQYTBrha4upu + h7u3M0M9FRHYUt6VIeY2OiqReMBgK9zluF/gYJJSwygoTqG0PJPi0kzSs+OJjA8WOxZGWk4Kze3NrNqw + miNvH+XE6ROs3rCGKbOm0dIxgoqmarKqcogtiSE4x5eAzMGEii2MT7UiX2xWRaIl1eLPS2VM5inLcOQF + sXPtVB7cP8e33z7i5bfP+Obnb/jm1+9e4bdvePbdY+5/9h7H3z3I4nWzmDSnnQXLuzj01no+uneWn775 + iH9++wm/vbzPP19+INtKeRee3YJPrvLb+WM837yau9Mnc1ti+w9ndPHthiX8vG05Xy6ZyMWGHDZFDWGu + xHfTBmoxe7A+s8UGzByozwwHbeY66LBUvsv1Ay3YPsiGA0PsOTrYgbfdhEN7OHJR4tBLblZccTHhir0B + t+1MuO9gzQd2dtyzteOWtS2XzSX2NjbhuKkRJ6xMOWlvyVkXW84PtuPsIGveUURgS222m/VnuYUas6zU + GWndn3prLYYPdWBqVDgbiko4XNPCwewydsdlsC8xkxN5+bxTkMOxnGThIFEcltjweIIv55K8uZbqw41k + D24muHI3fhAPJAZ8kuTGs6jBfCrx892hFtwYYsJFLzNOB1tzWHzR3pSBnKyO5HpXOXcWjOXiwslsG9/B + iLws0qOiiAmPlj6bQky8IsS+EmP/FoDj/sT/EIBTiIpNJjJaEXxf4f8iACtTQSvib2yaCv+b6PufiFGy + jwX/JwFYwd9C8f9BAM7NTKOtpYbpU0YzuWuEjDFFAI6WOFLJ/k1UZf8mKDNXyXMkCY9VuKzyQ+bE5HQZ + f5kqpKTlyHjOVa0NrODVusBib7PzKCwoUk0FXV5eSWVF9f9AdXWtCjU1ddTW1st2NaVlxeTmZcp1UgVp + EhOlSnskpo2Ix9c7lCGuvjg7umEjNtXM1ApjIyOMDPUwFQ5kbWsoNtgQRyd9lQA8wFEXV3tdhsgYH2Kt + qcJgKw1cLdQZZN5f0I+hpv3wMetHkPS3SHtt4p31SR1sTJ6HBSXeFtT5WdEWYMVoZYrnAHPGS5w0LsiM + sSGmjA01Ech+mDmTw22YGevInCQX5qcMYUHqUOanDWV22hAmJQ1gbIIDjWFm5A/TJGFAX5UI7Gn+Bq7G + r+Fk3B1b415YGPXGRGBk3AdDBSavSjMzdayttcUWGmDvoIeNdT95/l44OfVm4KA+DHYVDO4heAOvwa+T + 7NeX0ghtWhKMGSkxUleWGTNyzVgoMdKaUlN21VtybIQTJyQ+OlAn/LlEhw356qzJVv6X3IuVWX1ZmtWP + pbk6LCs2Z0m5LQtKHZhb7MzM4kFMKHKlPVM4T7RwxkBd6v316AyxoCvSlikxDkyItqc9zIJqH30K3DXJ + ddci19eAghAziiUOLJH4riDanOxwY1ID9Un00RKO2Z9ot75SqpMgSPRWV80SmPCfArDnayS4dyNryBsU + De5OxdBe1Lr3psVTWedXnfGBWnQF/U8BeHyw5v8UgJUM4MF9GOfWnzHu/RilCLt/Zv6qBGCBIvz+BSUT + eIQi9CrwfAVFAO6UNirZwG3S5iaXXtQPUNb6fUOFGqfulNu/RpFlNwrMulFs1Y1q+9dplXc1cogak4ep + M99HYrEAPVb7a7E+QJMtAf3ZFqgm6CvorRKAFWwKUDJ5X2ed92us9ejGWq/X2OD3hgrrfZXyTbaG9WV/ + vC5vJRtyIMGA3bG6bIvSZEN4P9aE9mRtZC82J6ixP0efY2UWvFNto/q//MF8XfZkqbEnow/7svtxrFyP + Mw1WXB4xlBtd4dyenc2NJbW8u3wUJ1ZM4fDK2ewSH7tj5XT2ih86snURJ/eu4Nyh9ZxRRN39K2R/uZTL + OHd4FeePrObC0bVcPLaWC0fWcP7wasFazh+UbcHlI5u4dnwHt0/v5b2Te+XYFravnMPiqaOYPqpJ+GQt + oxoq6agrZ2R9BWOb64VfNtGliL8CpZzc0caMUeIPx49i7axJ7FuxgLc3L+P01uUcXTuPPUtnsHFO16sp + oKeMYtHEThZMGiX8TDB5NAvE7v2FhVPHsGjaWJZOH8vquZPYsmQG25bOZIc889Yls9gwfyqLJ4+U+0nb + misYVVVAc34y1SmR5If5kuLhQqyLNf4W2ngbi10x6kug+LIwey1ixJcmDTUmTWLsdHfp924Gf0KfDHd9 + sj0NKfSX8RFkTmGACbneclxsRYb0lVxfJQvYlJpIK5oTHenIHMrIXE9G5fvRlu1Ldogd0e5G+A3UwdNJ + Ex8XPYLdTYjwFA41zBQ/2fdw1GCovRpujooArC51NAgeqknEMGmb3CNBxl+af38ypS9mBWqQI2OoRGxI + TbQebYkGjEkxZmq6GfOzbFghPGNJuh0z48yYEKnP2Eg9xscbMynN4pUAnG/LmkpXttUOZUfFAHYWWLEz + 04jdGXrszdCR/qbLriwddufqsSdPnwO5BhwUHMrR41C29GMFUu+wMk10qiaH49U4GNlbteb1KwG4O6cj + +nApuj/X4rW5nWrAnTQjFe6lGPFBkh4fJ+rxabwOj2KEZ0Wq8zi8P09C+/4PfB7aRyDbMk4UPI1Q4/Nw + NR6FKgKw7McKx4vTkvP781lYLx6F9eSB3PtB0JtSp7vEEX34Kl6dlwn9VVNDP4vszuOQbioB+KGC4Nf4 + UMp7cuyDyG58HNedR6l9eZqlzvMcLZ5lK2v1CpdM78vjtD48TpbPk+QaCa/xOP41HsXKteK68SSxG1+k + vsHXWT34tqAH35R05+uKXnxT35+vm/V40ajPo1oD4ZZ63CvQ5n6uOg9z5B4F0q4iTV4U6fCyzp5fuyJg + fg7dmttNaWg1pUqMf3mlNSUljhSLUS8qcie/yI2kDHtiks2IijOQYEGbpFBl7V1dsoJ0yAmRzhpuQGaE + EanhRiSGmBDpZ4jvUB0VlOnqEpUMYBUsyYy2JCfWjswoIfjBJsT46BLvJ4Mh0JhEKRN8Zd9TRzqhFlFu + WuIEtIn1MCLG05g4byPifeU+waZkRZpQEGdKWZIRLTlmTKywY3adI/Nr7FhaZ8vKBiGwUq6vsWJ9uRnr + Cg1ZnfNqvd+NeTpsKdRjs2BdjjZrMrVZl62vEoA35JuqxN+1OUKMs41ZnaWsyavH2ixdNstL2p6jxt68 + 7hwteZ2zNW9wtbk7t9t7crezJ/dH9+HDsf14MEGDh5O0eTTFgAeTDLg3Vp/rbTpcatTjYrUYVTGsJwvE + +GbpcyhdOnuGEfuzTdmdY8LWXEOWpakzO6kXU2PfZHz4GxJsvClOqwejfHszxqcvE2RgThHHNiNcl9mR + usyP0WZejBpzY3qxILY7K1J6silPjS1Ffdle3JMDtb053aHBzUn6fDLPhOfLzPlurQW/bjLnnxuN+WOT + sZSG/KhM/bxCn2fLDfl8mQnPVljz5Qp7vlnqzPdLXfh1qRv/Wu7BHyuH8a9lbvy6eDD/mDOQp5Pt+EQR + EFsMOFulybESdQ4UqrFTAoitGT3YLuW+Ak2OlBpyosyUUxU2AgfO1w/l/bFhPJgax/tjguR8N95rGsDd + Fjs+aLHg4+EmPBxhKDDgk+HKFM9K9q+WqvygWYcPm2RgN+vzoNWQx+1mPFf+4TLelpfjLXnaocsnjb35 + uL4HD5p68lmrDKoRMohHa/FykhE/zbXhX0sdYZUrrBzMvxY68+scR36Y4cCLCRY8HmXGgw5T7neY816H + kJMmM/ZVGrOmSEhRqi7tcbpURmhRHKFDUYweJYlGVKWaUCNGsTrdnIpkE4rj9SmOE0hZJPXzIrXICRNj + KnglAJtQmSL100wFJnKeAZXpOlRmqlOZ1YfKnB40Zr7OpKxurCztyf4R2lyabsZnKx34aZcrvx9ygaPy + DCcd4JwdXFQg22cFJxz544A9f6y3BmUd4FHavGxS43ltH75t1ebHDhN+GWPOLxNt+XayLQ/GmnOx2YQ9 + JQbMiVWn3bcvVUP6SlDVnxoPdUaFGDAz0ZyVebZsKrFgT5UFB6pM2F2ky5YsDRbHdGeqGLeZUT1ZJYHl + tkYXdrV7sHt0AHvE0KwZ4c/MisGMy3OiKcmKimgLsv0NSVOmuxDHU+apSY1Pb5p8uzE2uBvzEl9nd5U6 + 78124OUeH349FQRXw+FuNHwcxe+fRsLTKPhCjNhXgq9l/9s4+D4Ffsnlj9+K+YNK/vVHLb/9Usuv39bw + 2+cV/HK3hK/eTufCLFe2VGiyJKU767KkbzYO4Nw4fy6MD+Fo6zA2F1mzJFlXvov+LEhUl2111oqd2JSt + w+YM6d9iWM83mMmYt+fJtIG8mOfEV8vt+WKNBV9ts+Cb/bb848QAfjg7lN+uBfDH3Xh4VACfVfPHg1a+ + v9nIR/vyODUvju0dUWwansL2kXnsGFfClq4q1o6rZuWEOpZObGDpjBHs3DCfd45s5+yptzh37iRvnz7J + qfOK+Pse19+/x62PPub6vXtcff8ON+7fk+27vCf7792/r/r8/NXrnDp3jpNnznJacObMOU6dPMXRI0fZ + t28fO3fuYMuWLWzcsJH1a9exduUqli9ZzIK5c5g1bQrTJk9g6qSJTOnqYtL4sSyYM4udW7Zy+tgJLp+7 + yI2rN7h0+QrnL17i4vXrcs+7qvteunmL81ducOHKdcE1Ll27zuUb17hy4zJX37vE9dvXeO/udW7cucrl + 6+9y/vJ5zl06y1nBmUvnOHflXS5cu8y5y+9y8vxZ3jl/mrPvnvtTQD7Nu+ePcuroNt7Zv4rjOxdwfOsM + 3t7QxTvrR3FubTvnVzRzcUk1VxYLgV9VxYfrq/h4YyUPtlbycFMxn24s4tH6Ep5tq+eno+Ph0mJ+v7iU + X84v5emRuVxYK4HiyCLGVqfQXhYrQV48neXRjBaMq4wSvxPF+IJwRmcFMTY7mHE5YYzOjaIjO4aGtFgZ + 34kUpqWSmZJGckIySfFJJAlhVohyUpqQ5YxslQCslPHJShZwOvGq7OAM4lS/Kk8jOiqRiIg4lfgbERxJ + WkIKJTn5DK+uUv3ycf2CWRzcsJwD65ewbt4UprYrok4Ta2T74Oa17Fq7nCUzpzJmeDOludlkJSWRmSyE + OjWD9PQMIezpct8kYhMTSUxNFpKdJMelTkYq+bmZNFeX0TW8gSUT2tk5dyzXtszi4Z55fLFvDs+3T+Ta + tEL2V3qzKcOaTYmG7ErRY3+qDodSNDiY0JuDcb14K7Y3p2QcXUzS5WayPu8LObknQeSHmWZ8kGvJ7Txz + LmWbcCbzlQC8TezIluge7Jag70iZNQfLbdhZYqn6IdbcRDVmJom/y9BijvjzOeLX5+bqsrjQiBWlxqyr + sWRDrTINvQWbJabZVC/2qM6YXXVG7Ks14nCtCcdVGcCvBOCztZacrjbnRKX4ZPFdb5f243y1Mg20Bjea + NXm/VYePO8THjDLlSacJT9uNeTbCmBcSN73sMOMrOfa3ADzSjG+V7K0xlioB+Mdxpvw83ki2DfhOfNLX + LWKHG5QATLYlSFPwvFybzwr786xMm380mvNDsyXfNZjyVbUhzyr0eV5tyrNaaz6S5z8rwe1e8SfLwrUZ + IySxSIhnjK8FgYED8PZxYshga8xNddDT6Y+2dj/VL8Wjo7xpbcynvUH6Wqgzw0xfI9jidUq8jRmfOpTJ + 6YPplNisTfnldoQV42LsGR/rxCgh8O1hgignOuJcaIh0pCLMntIoZ0pjBpITZKPaHl0YyJK2dNZ2ZjGv + NpxJRR50Sey4vCNWiGIdV3aM5eqO8VzdPp6bO7u4tXsiB+cUs7DOn+llQ5hX58XcOg+mVbjRVTqEUYVD + GFnsxYjiAFpKwqgpjiAz1YeYqMGERgwiNM6DoERvfON98Y73xys+WMoQvJV1f+PC8I5VROB/TwGtHPdL + CCUoKZiQRD9iUr1JSh9GQooLCQl2JCZakSZkJTfXlvw8a3IkDsuV+K+oyITyMkvKS60oFJ+WLX0zT4hL + WZElNRK/NNUNpKHamcoSWyqKlWN2NNQ40VDlQF2ZDZVFFlRLXUUMri+2oirPTGBBQ7EtbZUD6agdzJhm + TzrqPWgqc1VNC1mQakauxLQlGebUlSpishPV8t5Lck3IkzgxS+KFJImhQ/1NGTpQDztzTaxMdAVGONs5 + EOjjR1ZaFoV5JTJ2lSn0SknPyCEyIho/bx/8PIYR5OVBelwUjWX5QqBrmdJeKzajRlDNtM5qZo5uZO64 + FuaNb2beuCZmjn2VBTxZPp8wvJzxrWUCZW1gZY1dsY2CCS0l8nnlK4yoeIX2crl2OVM7FRFYybDNZ3R9 + NmPqchhTn8NYwXjpl5Nai5k8vJhp7WXMHlnF9LZyJtQXML4+nyly3UlNRVKvgC4pJzaXMHV4GVNaS5kq + 7Zgs+xMVQbihQHXOxMYi1WfTh1cwq125VoVco/RvjKvJpbMsg46yTEZV50sbihiniMxKlrBcb4o839xR + lSwcXcnScRUsGa1MbV4i+8UsGFvCgjGlAmW659K/hWBF/FWygmeNUERgqTummsXjalXZv4oAvHRyC4v/ + FIGVtYDbqtIoSg0kI9aT7AQfCtJ9KcsNoLo0lMbqSFrqI6go8SQt1ZaoGAOxzcbiH6zJkNgpK38A6blO + Kk4WnWxFZLw5IbGGBMcZEZJgIv3bjNBERQiWPpJkTahcIyzVnqBkO/zirPGMNMM9zIhh4SYqeESYquAZ + aa6CR5Q5wyLMcY+QegIP6WvesXJejBWecnyI2AjXQCVj2EgFt0AjBgfo4uKnztAQLbmHcL8obYYF9sE3 + pD/h8UaES9wYnCBtSrAkIkGeSRAp10tOdqS0UPp/czSdTVFU5HuQFGlBVKgBkeGGhCuIlGeLMCZQtv1D + 5doC/3DZF/4XFG1KcIw8c4wZYXHGhCUYEJGkT1yaPsnC57IKDSguM6a+xpzRjVbMa7Nj60gHTo9z4s5Y + Rx61W/OkxYzHrRJTt5jw+XDhDQrk2JNmY54qv6RueSX+ftaix0f1mnxQq85HtRo8aNDgk4b+PJSY+lFz + f7lGfz5v6c9z4XnfjDT5twA8ykolAH8xwlwlNivrv98X/3K/uI+gL/dK+vBBeV8+EX/zmfiFz4XTPBeu + 86JNuJj4FUUE/nG8nSoLWLne8zZpjyIAi995OU4RgJ15Nt6Re9Lma5WGXC8z4abE57cKbbidb8fVdAve + TTLjbJwFJwVH5B3vDjJjo58xK9z1BAas8TBho7cFOwPs2BvsxJ5AZ7Z427BmsDELlalfh5gycZgVozxt + aBXUeNpS5mX3pwCsiL+OZHs7k+3rSrafGzn+nuQE+kjpR6afL9kBQRSERlCemERFaholKcmkhAYT6uGG + 7+D/Fn//PQW0IgB7K9m//6sAPAjPQUPxcfMiTmIjRQCuL6+lKD2L+MBAwoYOJsnPU3hXOGXJMUR5uzHQ + 2hwHS0ucHZwZ6uaNh08IPsFRZOSUMa5rFoePnlat6/vlNz9z6+4Dlq7YqMr+DZCYa+gwXyKiE+kYPYGz + F67y8rufePH196ps4PGTZhIUGqua8lkRgFXTQP+J/zsCsLGprUoEVmUA/ykAK2sA/7cA7KoIwKXVrN24 + jTv3H/D1dz/z6ePn7D98VJXxm19cRlRcoupHhvVNrSxbtZZL19/jq2+/57OnL9i0bac8eyFOLm6q7F8H + Z0XcdcVOtv//KwAPwGmAMy7yXj083YmNiyQzM4WMrCSJe6PE5gURLz47PTWa7GxFrI/G08MJGxt9nJ3M + 8PYaQFSkL1mZ8eTmSV9Ki5aYOYT0zGiqGwoZKf5qyswxzF4wiYnTOlUCsHeAPMdAUyzt9XEaZI6ruy1u + Xk54+Utf8huAu7cDLkOssHEyxM7ZCJehVgzzcsA/aBCpGRGUVqRTXZtHpfiM3MJk4lIjiU+NJbswm6YR + LcxftpS1m7ewYu16xk+eSlNbB0WVNaQW5ROaFY9fWggeyZ64JUh/Vn60Ixw4PcWCohRrioUL54eYkhFq + SW1+AGuXjuK964d58uw2j57f5/OvH/H5N49VePzdZ3z84i5XPzzH3ne2MH3peDom1zBl3nB27FrIrWsH + +fbJNX58cp0fH13m108v88ujS/zy4AK/3zsLl4/x/a71PJw1hRtN9VyW2P5mSxVPZ4zhm4VdPJ4sfKkq + hc0SZ80bYsA0Zw1mK1nAYgdmDdBlhqMWcx21WT7AiE0uFuwebMtbQ2w5LuXbEnueke/w3GAzzrkYcd5R + j/M2Wlyz0uO2jSnvW1lx19qG963tuG5hxQVTc06bm3HGxpILznZcHuzIVTcnrgyx45yzOccsddhtps4q + czXmWKkz2rI/TVaajBw2gAUpSRxqGc6l8VM5WdPK4ewy3sop4VR5FedqKjlbUcCp4jTeyYnhlPjac0me + XEl240byYN5LGMh9eQ+PU934IsWTLyKH8sTfmQduVtx3NeE9TzOuBltzIc6RMxIbX64K5/74Ej6Z18mt + RRM5NmMck8ryKIiNIj4snPiYBOLiUolVsnWj04iNziQ2VkGW8DeBSqBNJzpBuFyckuGbrJrZ6f8oACtr + ASuZxYL/Pev33/vR8ZmvoFqLOEOV7asgKjb9byjHY1XTVP9fBWBlCuhoiQ8TY2Ilvk1jRGst06eOUWUA + 11TmkSr2MzEhTuLkpD8F4BTVEkYJwkNVpfBZBX//qDktWyUAZ2bnq/BKAJZxI5xVEYBfTQVdQYW8q4ry + GoEiANdQVVVHtaCmup7amkZVJnBZWSmFhfJdF+RSWFQg20WCMonFC6UdmYQExeHlEYKriyd2tk7Cdyww + NTPEwtJANc274wBTnJwNcXKUce8gcYqdLoOstHGxUMfFvD8uZv0ZYKom6MsA414MNumNt2kfgqSvRdlr + kuisS/pQIwq8zCn1MadWuFarvxkdgpF+JowOMGZUgCGjJCYaHWTA6GBDxoeaMTncipmx9sJVBzBfEYGT + XZgrfGNmykCmJDkxJXUA4xLsqQsyJsdNgwSXvgTbvYmn1esMsngDB/PuWJm+iZnAxKwHxha9VDA174WF + VT9spW1O0jYnZ21sbfuIbeyOo1MvBgzqjatg0KA3Ba/jMeg11fTJFeE6tMYbMzrVlMnZFszNt2BpkZnq + f+P7m2w4NcqZM6MGcLTZil0Vemwt0mB9bm/WZPdiVU4flmb1YUG2BovyjVhUbsv8Cifmlg9iVoXwR+Ft + HRKT1kYZUe6vSb2/Lu3BJowNt2BCpBVjhFMODzamwkuHfDd1cty1yfU1lJjAnEL5PD/KgkyJSVMC9Yn3 + 0SbGQ4OoYRqED1FTlbEemsR7aZDo0594797EefUgxvNNwWvEu3Uj3fV18l3eoHRwT6qH9qLBvTcjvPsx + xl+dCSoBuD/jA19NAa0IwCN91VQCb+sQqTekD52ufwrAqvV8+zHiT/G39U8M9+6rgrI9QhGCFeFX6iri + b9uwfq8EYG8NFUZ49KduQHeqHd6g0u41FSrshWvbdCPfvBu5Rt0okLJKjre59mase3+me2mx0F+HlUF6 + rAnUZkOABpsD+7MtqB9bA/v+Lf5uDuzFer/urPZ+jdWe3SRu68ZqL2VN3zdYH/CmoDsbgnqyJUKNvYn6 + HEg1Yo9wyZ2JhmyJ02VdtDorI/qwKrYvG1PU2VNgxKFyC96qsuZAqQnbs9TZnNqLbak92ZHRSzVb6Ylq + U95tG8z18WHcmpPLjSX1vLt8DMdXTOHgyjnsXiFYO5PDW+dzev8qLp/YxPWT27l8fBPn31rNO3uXcGT7 + HN7aNotDW6Xetpmc3LeIM4eWyeeruHhsHdfknPdObeODiwd4cOUod88f5PqJXRzfvpoVM8cxa6yyvm89 + 48QuKQKwIv6ObqxiQmsjE9tbGN/eyoT/EIBnj+1kUdco1s7sYveS2Rxdt5CTm5eoBOC9yxQB+FUG8JKp + o4WXjWT+pFHMnziSeYK5sj9P8FepYMGkTpZLO9YvmKwSgbcunSWYrcKaeZPls/EqMXnxxE5mdzYyqaGc + 4XlplEWHkOU7lBA7Y3zMNPAw6oO3idgWG02inKWvuwqvG2pKqrsJqUMNX8HNgAyJybM9jSj0t6A40EJi + bGOyPHRJGdKfpMH9JN7WpUjGV5XYmLpYB5qSB9GS5kZLugf1KcPICBR+JdfyddbBw1FTYmVd/IcIZ3IT + zjTUGG857manjqttP9wc1BnmpKnKCA4crEWEjM3oYcp4UydFOF269MWMAHWygtQpEhtSFaNPa6IRI5W1 + fdPMmZNlw9IcBxZn2DFTuGhXlCHjog2YIFx0crolU7KsmF1gx6pKFzZXD2ZLqRNb8yzZnmnMzkxDdmXq + syPbgO05euzMM2BXniH7cw05kKPPwWw9gY5KBD6Uqc2BdE3p0xrsi+vLvoie7A9+g4P+r3Es6A1Oh/Xi + UpQaV2M1uJ6ozfWEV4km7yXq8X6iDh8kaPMgXpuHMgY+jejPp2H9+Cy4t6AXj4J68amUCh6FyLHQPjwO + 68PnMo4eq+r25TNFDI7VVE0h/ShcjQchPQU9+Eju/XHgGzwIflPq9+ZFrJpKBFbWB34W1UOu8zqPgl/j + YchrPAh9jQ+CunE3WBDWjQ9j3uRBUi8+y5Bry9h7nKmgP4/S+/BZWh8+Te7Ow8Q3+DS+Gw/juvEgthuf + CD5L7sbzjNf5Mrc7Lwu780XJGzyv6M6Lun48a9LicYMeH1TrcatUlxsFWtzK0+DDfGl7sQZfluvwosKA + r5sd+W1qFCzNp9voiVZ0jrGitd2KxmY7amqdxRkPoaJqGKWVHqTlOhKXYkpopCYhYpBiA6VzBGmREaJL + VqgeWULOMyKlM4cbES+GPsLnTwF4iC7hfmYkhgnZD7ckNdycdCGg2TE2Ut+SpCAjYhXB119ftZ0UoE+i + vx5xnjpEDVUnfHB/IlzF6HsKoReHmxZkQVqwGTlyjcJYcciJZlSmGdMmzmxStQMza+2ZV2PHkjolC9iG + VTVCYqssWFNmxppCI1bm6rImR5dNBfpsLTZga6E+G/N02ZArpXS6VwKwiSoD+FUWsJIBbMjqLDGeGVps + lhe1M7cvh0t6cbq6u0r8fb+jNx+O6c3HY3vxYLy8tK5+EkRr8Pk0LZ5O1+XzqQZ80iWdsEM6ZIugTo9r + VfpckftfyNPndJYBJwRHso3Zn2PEDmnL8tT+Ejj0ZnpcTyZGdBfn1YPx/r3p8uvHZBmUM4J0mRtuwAIZ + bItiDFgSq8vC6H7Mi3yTeRGvsTL5Tbbl92WXkv1b0YsTLf25OFaLO1P1+XSeKc+XmvPdakt+WW/Jr+tM + +NcGE35db8z3q4z5cpkhz5aa8OkCYx5I3cfzLflqgRPfzh/I9/MH89NCd35d7C7lUP4xdxBfTnfmswk2 + 3Osw5WKtNu+UqnGooA/78vqwU4KHbZk92ZXbhwOFGhwr0edEsRFnSi04V2bL5dpB3B0ZwKMpkdwf7ceN + Rhdu1tpxv9mGj1vMeDhC2tFhxKcjDflspAEfjdDlrvIP+RZNPmjR5uNmHT5p1uVhqz5P2k34aqw13090 + 4B8TbHnZacTzVun0jf35vLGfoC+fN/fjyQh1XozW45tJpvw4y5J/LnDkX/J8v8xy4KcZ9nw3xZYno+W+ + 7YZ81GbIXbnurZHSXmnPwRpTVT+amKhFa7QWZeGaFIbrUiDvoFgMXrkYxYoUE8qkLIk3ID9GAp5ogZQF + MbrkRioZwFoq5EfrUZZoKudIH5ZzKlKMqEiVY6malKb1ozS9J2WZ3anPfJ0J6d0k8OrOjgZ1znQZ83Cp + I99vdeWfe1zgwCuxl9P2cF62L8i2si7wCQf+OGDL7xut+H2uMb/I+/+mTZ0vmvrxnXyPP48y4ZdxFvw8 + 2ZavJ9tJHzblVIMhm/O1mSqGtMVf2iDBV5E4g3JvTdpC9Zkk7V2UZ8XqIlO2lBtLoGjAjmJttuaqsyKp + B3MiX2d+XC/Wyec7mwexp9OTvWMD2T8pivXt/sypGERXrh2tSRJIx5iKE9OnyFubGi9t2iRo7JQgbXTA + G8yMeoN12X04MdyIT5a48o/9fvx2KgCuhMKdcP74KJx/PQzlj89D+ON5EH+8COD3LwL548swfn8Zw+8/ + pPCvX3L4449ifv+9gt9+quDXr0v57fMSfvugiO/OZHBj4TD2yfOuz1FjR5Exx5sGcarDR+DHvhoX1mSa + Ml8M/gwJmGbH9GNhfH9Wp2mzKUuC4wxN6d9anK4y5r02Kz4eZ8ujadY8WWjBs5WmfLXNkpf7bPj2qBP/ + OD2EXy8G8K/3YhErDA/rkY7Mj9fa+Gh3KSfnpbFnbBrbRuayY1wpOyZWs2VKPesnNrF6cgvLprSyZEY7 + W9fO5eSxHVy5+A5Xr1zg3YsXuXjlKtdv3+b6+/e5fveeSgy+dOs9rini69273JDyhhx/796HqmzcS9dv + cOXGTa4KLl++xoXzF3nn5BmOnzjBseMnOHL0GIcOHWb/3v3s2bWbrVu2sG7VKpYtXsSC+XNYMG8O8+dI + OX8u69as4uC+vZx8+20unDnPlctXePfSZc5Kuy5cu8a1O3e4prRJ2nPh2nUuXL3Ou3JcacPlm9e58t41 + rt6+xvU7N7h59z1VefXWVS7duMrF61e4cP0y565d5PzVy3L+Vc5eucQ7757j7fOnOfPuWdV6WxcvvcO7 + 5w9z9vhWTh9cxak9Czm1YyanN3dxev1I3l3bzsWVLVxZWsPVxeW8v6qaTzc38GRHI0921vHZljI+3VjC + 55sr+GJXCz8e7eKX03P45ugMHu/t4qqcv3taNROrkmjKDacqI5DarEDZDqK9KJxxldFMqYpjcnEME/LC + mVwUwdTiaCnjGV8YT2duCi05GTKOM8hJzyQtOY2UxFRSlOmzVAJwFinpigCcqyrjFdH3T/E3KTlLCLZC + 2tOIjkwkNDSKiNBIEqPjKcsroKO+nukS6C6bNpG9qxdxbPMydi2bztyR9dRlxdKQm8iMjnq2L53DwQ0r + 2LlqCSvnzGR8Wyu1RUUUZeeSrpB1aVNiSjrxKSnEJiUTl5wsRD+BpEQh/PHRpMRFUZyRTHNhNlPrS1k9 + qoZjc4Zzc/koHm0az5MNnVyblMnhWm+25dixMcmAbUk67E7WYneSGrvEh+2O7cG+6J4cj+vH+SQ9bqYZ + 8X6qCXeTTbiXbsbdLHPeyzHnogSFpzL0OZyswY6YvmyL78fOdB0hJ1bsLbNhm2BtgRnThMBMlmtNT9Vi + eoYOMzJ1mSnjcm6Okg1sxPIyUwk4TVkr9np9rSkb60zYUmvE9hp9dovvPVBtxNEaE07WWnC61pJTNeac + rDbjRKUBx8u0OCE+7GyV+Mw6da41aHCrWZsPRojv7DDmM8GTdkGbEU8FX4wwVmVsvRB81WnKy1HmfDPG + gu/HWvHjOEt+GCd+ZpwR34/W5zuJAb5uETvcoM03tVp8V6OrwssqbV6UKsGZNv+oM+KHRhP+UW/ENxLE + fVmpQK5fbc7DMkuu5JhyJM2U1VG6jPfrQ6Fbb2K8TQkKHECAvzPD3GyxsdDDUE8NXe3eWJlLMB/loRJ/ + xzRmkBflQpBtD+KdelMfbMG0TDdmZAxiYpwNXdFWzEpxZlGOO/MyhjBJEYIjbZmZMlT8jx+zcjwZlzKY + kalDaE91pT7GluZ4ByYVeLCqJYbNo5JZMzyKBbX+zK31Y0tXKmfXNnN+fauUrZxb08rFdcO5sn44h6bl + sLrRj6VVbqxv9mV9iy8r671YVD2MmeVuTC3zoqvUjzGlQbSVhlKa5UNa/GCiowYRFT+M0AQvAuJ98I31 + xzsuWBAiCJN9BaGyrSACL4HquHwekBBIkEoA9iE5w5PUDDfS0gaSnuZAVpYtBfkOFBTYkJdnJjChSPxY + qcQqJcVCwiQuzJC+mZmurAtsTU2VMw11g6iudKRM9suKLamqsKeuxom6Kkeqy+xUxxQRWBGD6wXVhRZU + Fch+iTUtFU60Vg2kvc6N9tphNJUNpkLGT2GqxLdC3ksyTWiscKCt3pkWiYlq5d2X5ptTkGVBSqwFYf7G + DHHWxNq0L1YmmtiYGeLiaEewvz85mTlUlFZRW91IXV2rPEOlPGMGkWHhBPv6EjDMjcSIECrz04VQl/+d + BaxCZw0zRzYwa3QjM0c3qDBdwcg6psnYn9xRpRJ5J7VXCAEvVQm/yrTNk9tK5fxypndWCCr/A2VM7Sil + q6WQUbWZdFSnMbpWmdo5S8pMRtVkMrYum0mthcwaWcGCsbXM7axmWqtcs7mIqVIqAvCExgImyv5k2Z8x + okKFVwJvuaqOqm5LMdOHlzFT2jZL2jhLymltSuZv8d8YX5fHqMpMRldlM64uXyUYKxnHkxUo4rJca/6o + ShaNrmDpuEqWjC1jybhyQRmLJ5SzSI4pWDi2XLXm79yRpczuKJJ7FTGzTUGxnF/FojE1/yEAt7J0UguL + p7Qwr6uBkTIWK7LDyIr3IivBk9KcQGqKw2isjqatUfzG8Dgaa4LIzx1IYrI5iammpGQI95H+kVHgQFqe + LfGZ1kQKJwtLMCI4Xu8VEgwISjAUGAtMCBR+FJRsQXCqDQECv0RLPIWku0cZ4xZlqoJ7tAIzhsWYq+Au + vMpNYrOhArcYE9W+Z5wFw6RU6g4WrjdEMDTcRAV34X3ukYa4hmrJvhaeEut6RGkyNKQvw8L6y1jUwy/O + SEpjAuNMCYm3JDzemohY4YOpTpSWeDC8IZzWuhBKcoeQIG0KCdAiMFALP+GYfiFa+ITo4BWsg2egLsMC + 5fpBgmBdPEP08ArXxyfCEL8offwk1g6M0yI8SZvYNC2SMzXJyNGivMyA4XVmzBxuy4ZRjhweacMF4brv + NZtxr86A+/XCLRqNeNRqyecSz33eas7jJiOBgXAGIz6XOPShMuNQg6bU78+9GjU+rBdS3dCfjxvV+LSp + P58Jx3rc/G8B+B8qAfjVEgFfdViInzDjWaspjxr0eb+0D3eLenG/pA/3y/ryYWU/Pq7uz8M6LflcR+6p + y9NWA74QX/PNaAt+VNYAnmAv21Y8Ez/zuNWQF8K3vhxrw8suR56Os+ODVjNuVhtyo9KE2xVW3Cmx4VaR + DVfFt15MNRe/a8nZZGuOyfe+O8SMLf7iQzwNVALwandjNnpZsNPflj2BDlI6sMVT4vxBxixyNWSWuyWT + vO0Y5WXDcE8b6rzsqPCypdjbnnxfR3J8nMn2Hki272Cy/NzJCfAkO9CHTH9f0nylDAgkLzxC+E6Cav3f + oqRE1RrAoR7u+KsEX0X4/U/x1xVfgY+rss6vIgIPwstFEYEV4VcRgZVSMGgInoM9CPQJIisli+riCipy + 88mJiyXBz4tUaUNJfDhlSVGED3PF3tQQM319TAxNsLC0x8rWBceB7kTGpDGiYyL7D77Nxw+f8eXLn7h5 + +yMWLl5NelYR/sERuHv5ExOfwuixEzl34RrffPezKgv41LnLKgE4OCz2T+H032v/qmA/6P83AdjcHhPB + XwKwrpEVOgYWKgG4v6Yh/dT1pdRH988M4PziStZs2MrdDz9VCcAPHj3j4FvHmTRtJlm5BdKuKGITUqiq + a2TZyrVcf+8OL7/9gcdPv2Dztl1SpxCXIR7YD3iV+as8w/9FAFYJw/+J/xZ8/xv/uwDs9LcA7KzCgIGK + ED+EGPHRmVmpZOWkkJoWR1p6nGwnUVycQW1dIY1NJXI8Ah+fgbgPs8fTy4nAIGVq5gBVdm5CcojYyFB5 + V9EUlqdT3VjIcPFVo8X2to+pIy07Gr/gIQwcaoX9QFMGudvg5u2Ih99AfIMGC6SvBQ7Ew8dRPrPCxc1S + PrfHx38goeFD5brSdyszqBNfUVNXJN+5xMvpscRnJJFTXEhVUxOjJk5lwrT5jJ04l6YRXVTUd5JXXk9K + SSmBGYm4JQQxMGoYAyIHil21wz/eingZl9lpVmQnWJItsVdGnD2VhX7MnV3L4SPLhQft5/Lto1y5d5Ir + 909z+f4ZLn1whrO3j3Pg7DZW7JjLmNlNNI4pYMxU6Qdrx3HmyDIeXd3N8yt7+OrdnXx3YTc/XNrDD+d2 + 8dPxLfy0azUv5k4Re9HA9dwsrkjbbham8FD88+P2Yu41ZHIuP4ztYc4sHipjf4Amc131mTdIjxkDtJjm + pMFsJ02WDtRn4yBTdrlacNjVimNSHncx4R0XieEHGnDSWYfT9pqcslbnoqUW1y0NuGlhzm0rK963sZV9 + ay6YiU0SnLe14bKLE9eGDuSm+wBuDHbgkrOFnKvHQQstNlqos8hKgykWGoyWYzN83diYk83pjtFcnzyT + My0jebuymWOltbxdXcvF1mauttZxtbmcazW5vCvc7VzCUN6NH8D1RCduxTnwUeIAnqd78LXEgl+ED+G5 + rxNPhtrwqYspH7oJLwm05P04J+5muvNBZRiPOnOE49dzb04HZ2Z2Ml9ih8qkCFLCAkiJjiY5Jkl8VxJx + EcnER6YRHy19JEb4nArpgtQ/ReJkYgTR0Ulid5LEDyYRLtsKIpSpoZVlf/5bAP4TKuH3fxOAFeH3P6GI + vIK/Mo//wv8QgKV9igAcHSVt+S8BuGN4HTOnj2Xq5E6JIQtITVHE33iBPFu8PKO0OVYQ91cmcEomyQr+ + ygBOz5HxXEBOXhG5+cXk5xVLPF0ssXUxxYWlMq7LJCZVsoBfCcDl5bVUVtRRVVlPdVWDKm6trVVi1wbV + 1NCKCKxAmTa6okLOqailuKiS3JwykhNzCQ2Ox8crmMGu7jg6OmJrZ4mdvRmOzuYCKZ2MVSKwkgXsbKvH + AOlTzqZqOJn0w9m4H05GfaXszQCjngw17UWgVX8i7bRIHKBL+mB98jyMKfYxpdzPjBo/U5p8jWn1MaLN + x5ARvvoCHdr99OgIUP6Hpcf4YBMmhVowI9qaOcKP5iY4qjA70ZHpCQ5MTrBnmvCsKcI9OqOFFwQaqdbE + TXDtS/DAnng6vomLfXccbN7AxlZg3xNrx77YCOwc+uLgpIbzQHWxn4oIrIat8DmlnrNzb1xc++Dq2utv + AdjT5TVSvPpSFarD8HhjxkgsOTXbgvn5FiwvNmNDmQkHmqw5M9qZ82MG8HabLQdqDNklPHhTQV/W5vZi + ZXYvFmf2Zk5GP2bn6DJbOM2UYlu6ih0ZX+JCV6U7owpdqI83pTJIk8Zg+S5CjRgVIvcLNWZkqAktgfpU + emlS4NZfvk9t8v2MKAqzpCDSmuxwM5KD9Inz0SHaU5sINw3ChmoS4qpO6JD+RLhrEeOpSYKPJnHefYnx + 6kWUx5uCN4hze41UecbcAa9T7NqDiiE9qBE0D+tJu1cfxvj1Y1xgP8YG9GV8iIa8G62/BeBm1540u/Rk + hHxfnUP60K5kBCvrAqsE4L60/IlW7360yHfY7NGbFkHjkF40De5F89DetCrrBXsr00prCXTo9NaixuE1 + Kmy6UWr9Cn9N/axk/+YZdqPQtBs1dt3oGNyTiZ5qzPHTZol8Z2tC9VkfosvGIA02BaqxJagvmwMV4bcn + mwN6sEGw2ud1lnt0k7itG2u8XmOtryL+dmddcA/WB/diQ3gfNkVrsCtF3mGGCVtSjdiYYsKaRAOWxWmy + MLovixP6sSpdk62FRvKezdlTYcmOIkPWpfZhdfybrE98g81p3dmT14+3yg051+LCpdFBXJ2WzsV5VZxe + 1MHhpRPZs2w2O5fPZt/6mRzbsZALh9dy4+RW3ju9gysnNnLu8EqO75rH/o3TpM4k9qybINuTObV/Ae8e + XcnVd9Zz69wWPrqyl0c33+Lp+6d4/N47XH97p2oN4O1y7Xnj2pja2cCkEfWMH17PmKZqFca11NI1opkJ + 7c2MaWtm3IgWujpamTpyBPMmjBbONYa1MyawY8E0Dq2YxZG1czm8chZ7lk5n4+zxrJkxlmVTx6imgZ7X + 1cmcCe3MntDxN2apSuVYO3MnjGDh5JGsmDGGNXO7WDt3EuvmTWbDwmmsU9YHVtYJFqyfP5U1MyeyrGsk + 06V9I4tyqEmMJM17MJEDLfG1En5kooa/lSZhdtLXxSYlDDZRZQKnDDYkWZAyRJkK2pAsTxMK/C0oDLAg + 18dENS10koyH+EFqpHvqketvQkmoFZXRDlTFDaQidiCl0QMpiBhAopc5oYP08XbUwt1OA3cpPZyFLw3U + w1ts2jAHTQbbqOFipcYQO3XcZN/LSVticW0Zd9pEDdMmTsZqko86Kb79BWpkBPSnUCUAG9CSaEJHkgld + KeZMT7difqYdC9JtmZlowSThjF1xxkxMMmdy2p8CcL4tS8ucWVfhwoYSRzbnWbNNeMmOLFO2Z5mwKU+Q + b8S2PGN25BixL9uAg1l6HMjUFeiosD9Dk92p6uxKUmNnTC/2hHVnf+DrHPbtxtt+r3MuqCdXItS4EqXO + 5Rh1VTbw5VjZjtXgpvT727L9YawmH0f254Ei4Ib25WFQHx7K2HoQ2IOP/4Jc54GMo4chvXkU3lcl9j4U + fBahzmfRmio8DO/HJyG9+CS4Jx8HvynnvMknQd15FNaLpzK+vozrz5fxwgWje/Mkogefhb4pn70h573B + hyGvcS9YEPoaH0Z35+MEuV9aXz5N7/c3HqT35mGKXD/pDT6Kf42P45Rs4W48THiNh8lv8DjzDZ7mvsmL + oh58UdqDZ+Vv8riqO0/q5fwmTeGlesIDdXi3VJfzhdpcFtyW7Udy7Avhui8ajPlqhKJ5RcLaQrpNmWXP + xCm2jJlgR3unA83NztTXD6G23p3qek+KKoeQmWcrQYkWIWKQosWgJoqRShNinhmmq5oS+i8BOC7IiAhv + IfxDdPAdrEuErymJodYkhVlIsGRGWoSZahrojEhzkoIMifPTJSFAEYBlAAQY/CkAaxEphj/UpQ+hA3uT + 7C1OONyG4lgHCmOsKYmzoDzJgkpxZjWZxowolo5XY8/0Gjvm1tqxqM6WxTXWLKu0ZkW5OStKzVhRaPxq + Ift8fTYVGrC12IjtUm4vMmKLfLYp3/hvAfgVzKRjmrIh1/hVdnCmtnTa/uwr7Mup2v5cG67GB2OE/E/U + 4POp6nw+uS9PpqjxdJoaz2do8HyWFl/M1pVtAz6brMdHo3S4N1xbAmw97tXoc7fMgFuF+lzP0+dCjgHv + 5BpxSO6zUxzsqtT+LEruy+z4vkyL6s2UkL5MDerPrCAt5gXpsjDMiKXRxiyPNWGlOPXV8XqyrcaiyDdY + ENFNDPkb7Cnux+EqNd5uVOfKGH3uTDHko5mGfD7fnBdLLfjHKmt+XmvFz2tM+edaE35ZbcJ3K0z4YokJ + Txebq+q+N0Ha22XIk+n2vJjupBJ7X84cxDezB/NylitPpzjyaIItH4+25FarMWcrNDhW2IcDuT3Zl9ub + 3RI87JZyf6G0pViDEyW6vF2kx7kSEy6VWXKz1pn77Z48mhjE/Q53rsv7u1Fhxv16cz5pUURYYx6NNubz + 8aa8mGTGZxOMpb427w/X4L58lx+3aPNA8GmrHk9GSKcea8X3Xfb8MM6a7zrkedoMeCmff9moybMGNZ40 + 9uNJs5Rtmjzp0OarCUZ8P8WCn6ZZ88NUG36YYs03XZZ81qlMIa3Ph8PlPbUbcavTgrPNphyolu8734Bx + ceo0RWpSGq4lBlePfDGKRfEmFCcaUyIoTpSALlafnEhtGRua5ERIwBOtS06UDtmynROpS36sgeoHDGXJ + ppQqU0UnG1KWokdRsgRJSb0pTOlOSUZ36mSwj0nrxtyc7myslvc52ohPFjnz7QZXftvmwu+7HeAtezgh + OC3bZxUxWHBcEYBt+NdGC/45R49fJmjyXacGX7dp8P1IfX4ZJ+98vCU/T7LlC8GdThOOVuuyMkuNseG9 + qPXvS56nBpnDNCj00qAxVJdxYvjn5VmyXMbL+lIDtlXosrNUS8aQOusye7E8uSfLpN9ulvG2r82Vg2O8 + OdQVwuEp0Wxq92NeuTNd2VZ0SECiTEdTFy3OJFyXiWI35kSbMjtKm9kRfViRLH2mXJcrY214ssKNn/b7 + 8s+T/nA5GG4F8/tHIfzzYSC/P/bj9899+NcTL3793FNKX359FsivL6P49Ydk/vVbDr//VsQ/fyjity8L + +Odnefx6N5dvTiRye9EwjraYsaNYl4NVthxrdOVYsxxrGCbHHFieZMBscRYzw2QcRsl4jNNgTZoOW7LE + ZmTpsi9HW/qzARdrjbnRYsi9sYY8nKVkzhvy5VYLvtxjxVcHbfn2hCs/n/HjtyvR/HErB+7X8fv7I/jh + Yjsf7qzi5LxcDk8tZteEUnZ0VbFtcj1bpjWzeUY762ZJ0DFzJIumt7NqyWTe2r+R65dPcfvGFW5ev8H1 + 6ze5/t4trt+6qxJ4L964oRKBr91+lX17/Y6UAmXdr5t37nFDtlWlfH7t+i0uXrzG2fOXOHPuvOACZ85K + eeY8J985xYnj7/DWW2+xb9dutm/dwuZNG1TYJNi2bQv79+/l2ImjnDp9inPnz3Px8mXeVTKApVTaoQjA + V+68z4WbNzh37SrnrlxRCcDvXrvOpRvXuKwSgK9LW+U53r8p9QXvK0LwLTl2iyu3bnD+xlXOXr2iwunL + 73LiwhmOnz3JO2ffVk0TffbcYc6f2su545s5c3AFZ/cs4OzOGZzf2sX59SO5tHYEV1e1cG1pHdcWlXNv + VQ1PdwznH4dH8/LAcNmu5dONZXy2qYLnO5rlnY3kyc5O7q5t4cy8cnaMy2RhQxId+REyDkOpSA2Q8epD + dZo3zTlBjC6NZHJFPFOKYpmYG8GUwnCmFUcyoyyeaeVJghzGlxVRnZ1FXnomGcnppCQKkjJeCcCp2apf + S6dm5kmZQ4J8FhufqioTkzJV00Ar00FHRSQQGhpJfEwcJbl5jBnewqKpk9i4eDZbF89i97KZbJ0/nqXj + 6+mqyaQ6OZCyhABGFCYxp72WdTPHs2v5fA6sWyXnLGDGuLG01NaTnZFLQkIq8UrWcWoGcSlyv2SF5L8S + fxNjo0iLiaAgIYbatHjGFKQwryqD9U3pHBmdz7WZZdyZXcT5ziiO1HiwM8+OzUI4NifqsC1JCEZ8HzbH + vMlW8Us7I7vzVmxfzibpcT3dhNupZtxJMua22IL30ky5nmHKhQwj3knX560ULfYkaLAzWYsdsr+7UAhK + iQ1byu1ZXWzNZAmuugRT0/SYnmWowoxsIyGnRszPM2KR+PRlQmxXVhmzts6UjfVChOqM2Fqtz/ZKXSE8 + ehyqMuREjRnvKJm/VWYcrzThmCIAl8u4Lu3P6Uo13v1/0faXYX5V2d42Gixu5e7u7u7u7u7uXpWKu7sR + kgAhSBIkQARiQIgQIXhCIGjj3t27d/d9xloVaNn7vM95r3M9H37XXP/lMueYY9RdY87mOVxShoHu0ORd + 6Q9uKf2R9Cuf9ilQQPpFkQKBFX0h674eNOGbYXO+G5X+dZ4lv86XfmWeKT+PGfHT8AQA/r5bix/aNfmh + eS4/NWnyU6M2PzRq8V2dhkiLHxt1+alZ9pXy+wZtvpX7/abOkK8aTPik3pJ36mx5WRzovdK/LAiWfsLj + ARJ89IkItiMyxIEgX1ucbfQxN5yFkc4U7MzFgU+QAL0tl0Wd2bRkekuQIX2MvwSrybasLvBiQ6EHW4rc + 2VrszoNVfjzSEMaWAk8Wx5mzUHy27QXePNEUy6MNkWwu8WZlvjuL85wYS7cSmbOm1Jl9HaEcGkvk8II0 + dndHsLMnmkPLCzm3u50TW+p5cWMtx9fX8rKUpzZU88LibA4NRPFEVxBHekJUPdYeyP4WPx5s9mdLvT9r + awJZXh3MeG0oPWUhVOX6kpXqKe3Cl/jUQCJSgwhJCiMoOVIUrSo4aULKckBy7B9SfoekhBOergwBHUxG + bgB5hQEUynMW5DtRVOhAaak9pQoAFt9PAb5lFSaUV4oqzCiS4CQ3T4KzbD0qyhQA7EJLixvV1XZUlCuQ + WIIxqZ9NjY6q6mpsVXBcrQwDXWNDa71sq7ZUM4KbpWyrs6O91pHOeld6Gr1or3ajrtiGylwzSjL1qSk0 + prvRjuEuZ8YG3BmQsk1+V8u1s1KMiQrWxd1Bgb+TRbOxtdDHzcmGyLAQcrNyqK2qpaO9i96eQZqa2igt + LiUtKZmokBBCvDxIigijPCedrroyFg+2snykneVDbWqm7wr5rcDgpYoGlVLJDG5i2XCjBNj1sp+Ug0q2 + b62qZX11LFfhby0rh+pE9X9ohaxb0lvJvPZiBupzVCngVwHAQw259NVk0l2ZxnhrIavl2M3z29g01saa + ATm2r4alyvDQHeXMby1VSyUjWIG/CuRdrWQr99er0FaBv6vkXtYMNrB2uIE1Qw2yrZalPZUs6ahg8V0t + aC1jXnMx81tKWNAmzy7rlnYr2cFVaoawAp7XyX1sHKply6gCgGtVEKzC4PmNbB5vEjWycayO9SO1rB+u + kWtWsXqgUoW/itbKu9k4+q8ZwD0qBFYA8MYlnSzsr6KzNo2y7BAK032oLYmgpTqOzuZk+c4ZjA5In9OT + TEtTiNRHV/KKrKWPMCdDlF1qSXaJOakFpsRn6xOdrkdkug5RYnMjM3SIUH6L7xKRYUik+JUREiOFZVsQ + mmNJiJQB2eb4ppnilWqKZ8qEvFPN8E5RJL9lm6eyTeQlPq0in1QTfEVeKYZ4JhvglWwo6+W3yFviD980 + A7yTdPFJ0sZHYkTfFC28pfRO1ZLjdPFL0cdfjglKNiJUgcByrdhkeZZcR2pq/Olqi6KjJZzKEg/S5B7C + wucSFDaHgPA5+EfOwS9SA99wOW+YnDdMzhumgaf89grXwitKB59oXXzjdPCL1SBIfLYI8dXi0maTkDaD + pPSpFBXPpbVOn8VdVuwasueA4suLjT0hAfHZqrkSi2jwZpO+xBPm3Om15E6PGR93GHKnQ59PusTW9xrx + Yacu74ndfrt1DjdaZsuyBNodc7nVMYePOudwp2sun3TO5U99Onw3JLGHxETK8M1K1q4yXLMyWsRncq4P + W3W4UTWNtyqm8F7NdN6XGO2DhtncbJrDh80asl2Lj9u1+bRLAcDG0pdY8IvyT63jdnwr51JGn/ik21Di + F4mJlHOP2/CZ+Mnv95hyvcmQa40mvN1kw1t1NlyTvvJSkRmvSV97LusuAE6x5KnoCQD8YICBCoB3eRuq + APjxEGsOhdnxRIgtB/ws2e1uwmYPI1bK8oIgW4YCrOn2s6JFynpRdaA9ZcGOFAc5o8z/+zsALgwPoCA8 + iJywILKCA8kLC6M4LlbinVSJcTIpT08jMyqKGD9fwhTg6+qqKtR1IvM3xM2DIHcPgj08CFQgsMhfAcGy + PcDlLvwV+cl+vq5eeLv5EhMeS5H4VLVFJdTk5UqsFUNhTBjVacp1E4jx+XcAbGhkqWbaKnA2MiaNrp55 + HD5yjJsffs433/7GG1feYfXazepwpmERcQSGRKpZbiNjC8RHvsC33/3K19/+xOuX31SHgI6KTcHO0U2d + T1eBvr9LOf+/6j/h778C4N8hsIkCguXelGGgdQws1OGfFQA8V8uI2aI5mvroKgDY01/6pWp27XlkAgD/ + 9BcVAL/w4kmWLFtFYXE5keI3xsQlUV3byPade7guscB3P/7Knc/+xCMHnqCwpAIPn0DsnT1V2Gtj76pm + A/8Ogv8TBk8A4f8Evv+p/x0AO7go2cQu2Ls4TcjZARc3F2Lio8jOy6CgMEsdCrqwMIPCogyqavLp6Kxh + ZLSd9s5q8ouSZF8/FcxGRHmSkBxIckYoqeLvpmZFkpoTRWZBHAXlaVTU51HXVkxdq/i4OdL3x3jiGWCH + m581XlJv/UKd8Q93ISjSndBID0Kj3AiOcCEw3An/MCeCI12JjvMmMTlA7imG6pocmlvLaWgup7A0l6Ss + JJJyMsgtLaO4tomqln7q2xfR1LmC5q6VNHYso75zPjW9IyRJDOCTmYBdTACOsXIfCc4EplgRJ7Y5Q/r7 + HLHNedm2FOW7UiP+ztj8QtZv7WTP4wt57Lk1PPrcOtEGHj66kX1HN7Hn6Q2s3beQsXUddMyXe+rPpn9c + jlnXwJO7enld4p83H17A+w+N88nexXzz6Aq+fWg5X22azxdL+rnVVstbxTlcEb/oTfGd3s2N4mZJDO8U + h3MpP5iXM7zFRtizy8eIDa46bHTXY70CgF00WeI4mxWiTa5a7HEz4KC7Ic+6m/K8mxHHXMV/dtblJWdt + Tjhr8JL9XE7ZzOZVaw0uWOpy2dKEK1YWXLWx4qKFlQp/T5mIXbKx4bzUh8ueLlz1cuYNNzsuOJrziq0h + J6x1edxaiwettNlkpctaB3P2RodztLycV3oHeW1E2mPfKOdEJ9t7eaG5mUvDfdyY18+7473cHG7mWk0K + r6S7cS7Rmssp1lyXd/9hhhPf5AfyQ1Ywf4p040t/e/7kYcVnzibckee6E2TGJwkOfJ7vI753NF92Z3Bn + rJR3lzZwdlEzO9oL6ZT3VhArti4hmvyEFLLjksmISSU9LoP0BInjEnP+RVmki1KSMlQInJiYSbyUcSmZ + xCpZwAoMlmVFv8NfdVjp/9C/ZgT/rt/BrwJ51VLNOM4nOW1i/uE/yn8BwAkJcqwoIT7jfwLg3lZWr5jH + 8iXDNDdWkJ0p8eDdDOCUlAwSElNJSFKGa88gQ2LG3LxS8vLLpD8vUpUvyyWlNer85JVVDVRVK2Wd+o+I + 1TUNallTczfrt75FylYp28Snbqe5qYOW5m7xrTtobe28OxS0MjR00x9DRNfJcdVVjVRVNFFcWCvvNIeo + iASCg8Lx9fUVu+iCq7sdTq4WEwDYyQgnZyOcHQ1xtNHDwUwTe8OZOBjMxFF/Jk4GM3A2mIa70TQCzMVn + cNIl292AIh9jKgJMqQ4ypSbYmIZQU5pCjWgJMqA1UJe2AB3a/TXpCJhLV5AWPaFa9IdqMxZuyIJIY5ZI + 7LQiwVIFwYqWJUnsqijFlqXp9izNdmZBhiMDqTa0J5hTHq5HWuAcon1nEOg1DU/PKbh7TsPDdzYeAeLr + +Ik/5Sc+lsjbV1Oec44811Rs7e7DzuF+3N1myDGz8PCYAMDuCgB2mUSG7zTqI7XoFv9tNMuEpflmrCsx + UwHw3mojjrSZc2rQnnMjjpwasOUFZbTDBh0OVM5SAfC2gslszJvKsqxpLMrTYDxfn54cfZpyDGnOt2BA + YpeRGk968yXOidejO86AwRhDBiP1VCDeL+qUd9MQMJtyn1mU+WlSFjoBgMsTrKQNmZIepq+OBprgr0O0 + lwYR7hqEu80h1GUWUZ5KRrAmKYFaJAfOJjFgGvG+D4juJ9nr3rsA+D4VANd6TqbB435aPO6ly/sBBvyn + MBwyjVEFAIsfOT9K6w8A3OY2mRbHe+mQstP1AVXKco+8/x6/mXT5z6Q7QNEsdbnDdzotcv46OabR6V5a + 5B13KQBYvv1IqC6j8v2GgrXVYZ/rrCagr6Jam0nUyO8Ks0mUGck600m02U5iRO5zacAM1kdosD1Gj4di + 9dgfo8P+qLnsj5jJI5EzeFiZ8zd8CvuU7N6wyewKuoctPpPY5j2J3YEK/J3K3shpPBQ9nYdiZrA3YRb7 + UzQ5kGvIwxIj7JJvtC3LiI0ZeqwRv3h5wnRWpk5nQ84cdpXqsU/i2wM1puwr02dH5gy2JN/LrpR72J89 + madKZnK0xoBTHS6c7Q/m9GgyJxeXcnRVO0+tG+HR9Ut4eNNSntq1hOcfXcPZp7dz8dheLp3Yz2sv7ObU + kc0cO7iK5x5ezguPLuOFx5Zx6un1XDy5izfPPcx7Fx7n9rUj/Om9E3x78wx/evcsH1x4npee3MnBbcvZ + smRI4kdl+qEJADy/t435PS0iZVnU38lYXwcjPR0qBF4w0MWKkQE2LR5lx7Jx9qwY57H1iziyeYloMU9v + WcKTGxezf5WybR7blyrzAI+wdnyAVeN9IqUcYOVYv6qJdX0qAF63oJ+Ni/vZtHSQrUtH2LZslO3L57FT + rrF79SL2rFvKvvXL2bd2GQ8uW8j2BSOs6e1gXk0Z7TmplMeGkORpS4SNPmHSn4VbaRBlq028s9R76TdT + 3fRUpbvpkOGhT66vMcXB5pSEmlEUaEKOt9gGN2Xo6Dmke+mQ42dIUbi0nxhbSmPsxd+2JiPAjGQfia9c + 9Qi2l1jJajbuFrNxs56Niyy7itwsZZ38VuCvi7nyew5e1nPxd9AS/1uLKA8FAGuT7K9BirTXNH9lHu5p + 5IRKu42RNpykT2eaCf3pJoxlmLMo05yV2daszrRmeboFiyWWXJRmxkLZtjBLGQJathdbsb7cjh2VjjxY + 6cD+UlseLbTk8QJLDkj5YLm5yIRHio1lnQGHc5WRcXV5Jk8Bv1o8na3JU1lzOCDx3KPJ0zgQ/wBPRt/P + M6H38ELgJE4H3MtrIVO4HD2bi7FzeD1+Fq/GzeTVxBmimVxMnM2VhBm8lTSbd2XbzdhZ3JK29WHEDG5J + +1LA73uid8Mf4B0p34+YwgeRU7klbepWtOwn+38UN5eP4zXU8nasrIuadhcUK8B4spxrsgqAP5PrKFnA + f0qZzZ+SZvJ5/DQ+iZ/KndgpcqzsF3Mf70Xdw3tSfpAk15D49Gb2dG7m/K4Z3MydygeZD/Be2iS550m8 + mzyJD2T542wF/E7n8/JpfCEx5J/qZ/BFk/xulvO3TlVHovqgS4srEmOeldj2eLUuL1bocKpaj0sNhtxs + NeSLHpOJ6Y6GHfhlXQw8WsakFWttWLzCSgIZG4ZGbenrd6K724POLl/augJp6vCnss6V3HxjUhM1SJOX + nBY5m4yIOeRGa1GYoABgY7LE6CdHGBIbaEiohzYh7jrEBRnLvlakx5iRGW0i+5iQH29Obqw4vxEGpKkA + WJf0cP27GcA6JPvNIU46siiXqUQ7TyE3xIDqFDuapMOsy7ClPsOCxmxzGsXItRQa0FdlyoIma5Y2SkVs + smWdBMAb6i3YUiOqNmWbbN9absz2En2paAbsuwuAH6vU50nZ/ni1GY9KBfxXAKzMBfxoqRmPlErFLDHk + 0RJdniyby9HqmVxQ5gUckyB9iS5/WiUB/1pdvl2jKaUm3/6udYp0+GaNPl8s0+WjedrcGhB16XK7VZ/b + ygTNlXq8W6HHFTG+58oMeKFQm6cKNHgodw7bsmexPn0ma5JmsVoq3doYbTbH6rMt1ogdCSbsSjZlT6rc + c7rcqxj3h9LnsDNlMjvEgB/If4Dn6+dwql2T1/q0eWuhMbdWmnJnrSlfbrTgm+1W/LLblt92W/PrLnP+ + utuU33aY8v0WY9luwifrTLmxUJvzfbO43K/FzXkWfDRuy8fzbPhkgR2fLXLi08VOfDhuwwejFrw9YMYb + nfqcqZ3DsbLpPFsyhWdLp/FMuSxXzOT56rkcq9Hg5WotzlRq81qVPpdrzXi71YGbfZ58OOLHW51OXKqR + AKFan3eaDOQ9GXJ70IhP5hnx1RILvl9jw5crLbg5rsfbQ1q8O6DFBz0afNilwcfdunzaZ8DXo+b8OGrF + z8Nm/NRnyC+9hvzco8uPXTp3IfBsPmubxcfKf+1LY/msT4uvRwz4Yb4pPy0054cFZnw9T97TgD4f9uvz + Xu8EAL7abyrv0pCnavXZWqjFqBiVNmkDldGaFMfqUJKoT1mKOIupEwC4KsOI8hR9FfbmRWtQECP7KQA4 + XtpKnDZFiXqUy76VYkSrMkxUYFyZqU9Fhg5l6XMpTptKqQqAxUGRbzmUcy8rxQnbXTuL5/sNeGeNI1/v + dOW3/c7812P2/OOIDRwVKRD4ZWVIaEd40R6etuK/9hrz17Xa/GWRBj+PzuWnYS1+nWfAX+SZ/zxuwc8L + rPlEystdBjxdM5eNWVPojVCGB51MjjhC6V4zKfKdRVOEJkMpBqwuMmNbhREPiVF5TIzMoQYtDtVqcLB0 + JvsLZrCnYDZPNJjz/IAnx8aDOb4khheXJXKgP4gN1Q4szDdlXq4xY6JhcUwWpRuwTTqLR3Kt2Su/H8zU + 4PFiTU4r2RlLJEh70Je/PB3I318OhvPh/ONqOH9/P5y/fRjK3+4EiPz4y8de/PlDT/5y25vfPvLn188j + +O27JP7r50z++9dC/vuHQv72eRF/u5XPX6/m890Lyby10YcT3RYcrjbkuQZbnmty5dlGD47Uu7O/yJLN + KTpqu1sTP5cN8u22pemwN08ZqsKIp4r0eLpAhxeKtTkl9fmMfJdLPdK5LNbk9iZtvnzYiC8fN+WLQ9LW + jjrz88kAfjsXx19fz+Fvl+v484V2vj3VxY1H6zmxppTnV9Tx5KI6DirZv4tbeHhpF/tXDrBnzTA7Vg2z + bkkvG1YM8+Sj4mC9dpK3rl7ixtVrXLtyjTcUXb3B5atvcuHKVS7K+svX3uKNG++oIPjS9be4ouptFfwq + euPNd7l05QavXbjCufOXeOW1C7x6fkLnX7/Ia6+9zivnXuPUqdMcP3aMo0ef47nnnuHZoxN64dgLnHzp + BKfOnVKHY371wnnOX7rI65eUDF8lu1eB0G+qMPrc5csqwD1zQc5/8ZKazXv+iux37ZIKgFUIfEP2v3Gd + N95+kytvy72/9Zasv84rV97g9OWLnLp4gVOvv8rxV05x/PQJTpx+gVOnn+fs6SO88tITvCpO57lnt3Hu + SXFCDy7h/IFxXt8/zKU9vVzZ3cmVrc28samW93Y38/WhQf728hJ+OzbK14c7+eSRBm7vq5OyhQ/3tnJl + UzUvLshlX1c8a6pDGS8Jpbcohvb8OBqyI6lJD6Iu04/W/FAGy2OZX53CwtJExgtluSiKRaXRrKlPY21j + LuuaK1jWVEdTQT6l2bnkZeSSkS7KzCMru4CMnEIyc4vJzi/9AwAnJWdJgJ6hloqSUzJJTkonLSWdipIS + hro72b52BY/v2szhhzapWb/7Vg6yeaSORS05DFUk0JEbTkNaAM2ZIfQWJ7GotYydEsw/vXMLRx9+iEd3 + bmfloiW0NbdTXFxOutxHSnY+yZk5pGRkqsF+VmoS2SmJFKcmUJ0WT3N6HH1ZMdJ+o1hTEMq+mkhe6Ezg + VG8sJ9oCeaHeQwIGawk8pD9K12J/6hz2ioOzJ+5e9kXfw4Ho+3hOHLLTYuMu5hhxTQLRa2Inr2YacUna + /esSqJzNM+Bkrj7P5yhDSOvwlDiCB/MNeKzUgkcrbNhf48DOSlsWpksgl6bJkjxDVhQp8xmZsVIC2jXS + X6+XvntDuSGbKg3YIvb6wRZjHm5X5iQ35kCjPo/VavFEjTZHavQ4WmvEi3XGvFhrzAs1+rxQKw6TkgFc + M5uXamfyStPsiWGgOzR4R/oYBQDf7jfmk14DNQvrk5676taXUl+dF/jrITO+HTHjhzELfplvyc/Sn/w4 + 8jsA1lEB8E/SF/3UrMEvTVr80qBAYE1+aNDg+3otkSbfi01VS5EChb+rNeCrehM+bbDkZoszr4gdfVje + 3WIJaivdHyDOXQIKX3MiA6yJ8LfB18kIB7M5WOpPEUd/NoVJXsxvz2RldyZ9+b5UhujRFmPMklxntpT5 + sKfaX2x5EI83BfFUSyhPNoWyPc+ZFeJrrBTtL/Lk+eZonm2OYH+5F9sKndlQ4MDqHEuWy/fbUmrNo22e + PDcviuPL03lkMIp9/TEcWZrP6W2NvLCuQoLGUl5cWcKJVcWcWJ7P8YVpPD8UxfM9QbzYHSAK5EibD082 + +3Cw1Z+HGnzZVuPLerm3FbWBjFeH0F4aLO3Il6wMf5JTA4lKDiIkIYyQpP8JgBUF3oW//kmxBCpQOCmM + sNRg4tNDSMsOIq8wiOIiX4oKXCkqtJe2YEtxiSXFpaYiY0rKjSgVlVWYUlRiLP6vAdk5+pSWWFDf4Ex9 + k7Nss1KBcUWlJbW1djQ0OqqqqbWlosqcinIz6mtsaGmwp6nOmsYqS5pqLGmps6GtVpnj15HOWjdaK51p + KLWhptCMynwjGsT/7G22Y6zXhYWjnowNuNHT7khdhTXp4j+EB8zFTckMML4Pa9PZ2Fvp4+pkRWiQH0mJ + CRTlF1JbU68OpVdTVUdhbiHJsQmE+Qfg7+5GbEgQhWlJtFQWsnCwlRVjEjyPdqjZvssGm1nS18iCnjpV + i3pqJ4Z0HqhjyWANy4caZB8FBNezQoGtI42sHmlg5ZACgP9VdawYqFWze+e1FTEkNvH3jF9l+GcFACvw + t6M0idHGPFbJvsq8udvmd7BhpIlVg3UTAFgZ3rm5hEVt5SrMXdYj99BXK/s3qDB4abeyrpI1cj/rRptY + L1IA8PI+BeyWs6i9/A8AvKi9ggXtSuZvKYs6yljcWf4HAF7WU83y3mrWDNSwXu5l07ACgJVM4Ea2jjfK + fSlz+7awebyZjaMNco9yveE61sg7WT1QxSoVAFexur/2fwHAPSoA3iR9+yo511hXMQ3lcZRkTWQAN1ZE + 09aQQH9XOqP9WYz0p9PTnUCztMfqWg+KymzJLDAls9iEzBITUguMiM/WJTpTh+gsHWKUZVV6REsdjRJ7 + Gi2KFHscmmtGSJ45wRKMB+RZ4JtjjnemGZ6Zpqq87spTfFHPTJFSirwyjPEWO+MjPq2PlN4ZhiIDfDMN + 8ck2uStj/LMN8Zd1fhKH+Ip998vSk/V6eOcY4JWlj6/4eP4pRtIWjQhONiYixUSdtzgr34G6ukC62iNp + bw2nssyDtDRzwqI0CI6aQ0DMHPyi5+In/rNfhJZIB59IbVVekTp4RungEa2Lh1pq4y3+uF/sbLEJs4kU + Hz06cRpxyRI/5s2ivkpb6qAZm3utpU+QeE7s6qEqDY6WzxIfbo4EyMoUM6Z82GPORz1m3O40koDaQGIL + Q7H3xnzYKbGaxFNvtc7hrfa56ghEH3SLv9elKfto8mmPJp9J+TsA/mF0Yv5eJQtYAcBf9Em/ITHSh81a + 3KicyluVU3ivbiYfNE7A3wnNFfuuwe12be50SX8yYMJ3Y5b8JDHXDxJrfT1srv7z0cfiq38s5/t8yJwv + Ri35dET6hR6J2eS53mw24Z1WO95usuNKpRWvS/94Vr7TKfnep9IseT7ZkidjzHlYyQAOMGSHjwE7vQ3Z + 52/OY8HWPBVqx+NBNhzws2KPp7wvDzOW+1kyL9CaASk7fMxplrIhQGxVoD0VwU6UBLlQFOxGQbAH+QoA + jgggPzyIrLBAMoL9yQkLpTg+VmKjFGqysyhPTyczJoY4P38i3D0IcXFV9T8BsCeBUiryd3Mn0NWdABe3 + Cfgr8nVxx9vZAzcH+e0pdi86jrLcPBqKCqjMSKZMbH5tRvxdAOyGvYkh5gYGmBqZYWRkgaGxpQpgw6NS + 6Oge5dDhF7l1FwBfvHSDZcvXkJqaTVBwFP6B4WrG28DQKGfOvC77/MJXX/8ofvdbLFiykpg4BQC7YyP3 + 8p/Q91/1/wsANpVSyQT+TwD8uzQ0DdQMYFc3X6nbJWzdvoe33vuQ73+eAMDPPX+chYuXU1BUpgLgiKg4 + yitr2bptF9fefIfvFQD8yRfsf+SgCoA9fYNRMnuV+7e2d1X1fxsA27k4YufsgIOrI6GRwaRmiL+Zkyq+ + sZTZyWRlJcj9p9HQVKIC4OF57TS1FpORHSH2wYPIWC/iU/yIFz83UXzy+NQg4sQnUJSUFU56XjQ5JQnk + St+SkB6qAmDvYAe8guykdMQvbAIAB0S4EBzuqsJfRSHRboTGuBMZJ+dPUvyMIPHZwykrTaeuoZjqumIy + 8zKITo4nJjWFlLwiscXV5JR1UVK7iKqmtbR0b6dv3kOMrdzL2PoHKR0YIrykEDc5xj0pHM8EL/FJ7InI + MiUpz4SMAmvyih0orfCksiaAtp4Eeudls2BNBSu3N7JiewvLtrWyZHsri7Z3ML6pg55lNTSO5lPTl0a1 + +OFd/aksW5DHg0uKeHZZKacWFHNhrJAbY2V8uKCWj0aqudlezDs1OdzISeDNxHDejAzg/VhfPk4N4Ha6 + NzeSXXg90YmX4hx5OtKW/f4m7PSU+Fy00UOflW5aLHWezTLnmWx002S3uw6PeerxjIcRR90NeNFVn2Mu + Opxw1RZpctJFg1OOc3nVUYvzdvpcsDXmgo0Zr1ub84qFJS+bmPOiiRknrKw56+jAeTcnLno4cMHFhgsO + 5rxub8IZWwOesZU4wFaf/fam7HVz4NmEOM5UVHC+vZtXuhUIPJ+LC5fyytg4L/f18Mb8IYnFR7i5eIiP + F3TyfmsWr2e7cTbelMspZtxIteB2lhPfFgbyXUYAn4c48oWXFV+5mPMnR0O+cNLjKz9jvomx5fs8T36s + C+eb9jg+HczkgwWlvDJezl7xp4cKpc9K8KU8PozSuHjyY+LIikoQ25ZKZlwGGfHZoizSpUyPzyAzMZNU + JbZLUiDvXfgriknJUPX/FgAnKvMEK/pPACzlv4FfKdX1SlawAoAT/w8AuKeFVSvmsWzxME31FWSK3U5N + SVWzf5VYNDY+mbiEFBUCZ+cWiN+sTDVSQ0FBuZr5q0w7UlXdRF19Gw0N7eIPt4pa7pYK7G2hUcqmxjbV + P21p7qK1pVtVW2uPqJeWli4pu1QQrGQDK//EqMwN3CTnqa9rFt9WVN0q/nUTOVkld0fJiic8PJygED8C + gjzx9HPEzcMKZzdTXFxMcHY0wknqoYOZFnYGs3DQm4Wj7kxc9GfgbjAdX5MZRFjPIUvqc4mfKdXB4ueH + WdIYZk59iLGUpjSEGtAQpCf9nzYNfho0+M6hyXcWLUqSRNBcuoM1GQzRZyzUkPkRhiyMMmaRxFoLRfNj + TRiPM2VRsjVL0uzUoaCXSj2cn+PEYJYdbdI/l8UbSv3RISFKk/CIuYRGaBAeo0tEnBFREotFxxoTFWNE + WKQegUEaeHlPx8V1Cm6e0/D1mSOai6fnVFl3L24u90g/OYlkj/upCp1Lh8QNI+LTLc41YU2Rifo38T0S + Jz/eaMSxbitODdlxWnSiz5pnWg15rHoOe4qnsaVgMmtzprAwYyqjWbPokfi7Wnys/PjZFKfp0Sxx03Ct + J6MVrvRmmNOfZMJQnCH94Tr0hWrSK+oM1qAxYDaVPjMo85tLmbyj8ihzyhIsKYgzJyPCiGRZlxCgR5SX + FmFiP0Jc5hJoP4swl9nEeGqq2cHJgXOJ95tBrM8DqpI87yPb9T5KXB+gSt5BrecUGjweoMntHto97qXP + 9wEGgqYwHKoAYE3mR2kzHDLnLgB+gEaHSbS43k+Ly4Ra5TzdvjPo/gMAz/oDALf5TKfB7T6q7SdR5zRJ + rnEfnb7TGQrRYTRcX5UCgNvdptJof6+a+auo0f4eGuSYWiUj2GwS9eaT6LSdxJj7PSz1n8r68DnskG/8 + UKwu+2K02R8zl32/A+DIaeyPmMo+BQKLdgffx1bfSWz1u4edQQ/wUNg0HopU5vadxYPKHL/yXR5K1Wav + xJC7JV7YJD74avHLl6VpszBxFvPipjA/cTLLMqazrkCT7eWG7K0y5cEysfNZs9mYcj/bU+9nf840DpXN + 5YU6I15qd+HlnkCOD8Tx3GguTyyq5eGl3exeNsrOlWPs3zDKU7sXcvzgWs49s51Xj+7i3LPbefnQBk48 + sYaXDq3j1ee2cPH4dt48t58PLj3Ox9ef5vN3jvL1B8f49tbLUp7ioysvcOn4AZ7auVLipX5WDLaxtK9V + Hf55UW8bC+5qYV+7qons33ZGejsY7etkwVA3q8eH2LJ0HrtXzOehlfM4uH4Bhzcu4Kn183hqwzgH142z + f9U8FQDvlP02LxljrZLxO64A30E5fpCV8wZU/WsGsAKA1y2ScmEvGxcMsHHhgDp/8OaFQ2yT8+xcuZA9 + a5aoenD5Ih5cOgGB18k9Lmqupqc4m4qEULICnIl3MSXCRocQy7mE22gQ7aBNvJM2CU5aJIqSnXXJ8DAk + L8CEgiBT8qXM9NIj2UXZby4JLpokS9+b7mtMZqAZaX4mxEv/HC79bJCN2ADL2XiYzcDFeBqOxtOxN52O + rdE07ExkWeRoNhMnMwUAz1HlKffhb6dFqLMWEW5yDW+5F18Nknxnk6SMMOczhczgmZREKwDYgM40U/rS + TRmWWG1ctDTDkmXplixVAHCaBQtl3YI0M8Zln/kSeyzJN2NFkSUbSmzYVmrLg1LuL7LmQIENDxfKujJL + tpeZsb/QhMfzDDgscexz2To8k6PN0zlaHM6Yw8HUWexLnCJt5AEejr2Px6Pu45ngezjmfw9n/O/jfNBU + LkdOAODzYpcUAHxOYsBziTPEp5nJ5YTpXE+YyVvxM8XnmcXNqBmqPoicrgJfBfy+FX4/b4rejniAdyIm + 817kVNF0bkrb+lDa5Edy7g9jZnFbgcJR0/koappo6h+6EzudT+Kn85lc8/OkWfxJpMwL/FnidD6Nn8bH + 8bJf/BRuxdzHzfjJfJQ6g48yZ3ErS+4ja6qq97OniSbzTsZ93EiaxNX4CQh8M/MePimaylc1c/mqQdQs + 6tDgy+45fC76pHcut/u1eLtPn1dadXmxXo/DNfo8WaXPUWnD55pNeavLjDuDSoKjBR+POvDd+ij+cbCc + ScvXSqe0wpTxRWYMS8A5OOzAwIA7/f2+dPcF0tYdQH2LOKeVthRJ55GfpktWnCZpEbPIlmC9MEGf/ASp + jNEGJIfpExtgQLiHNmEKAA5UALAl6dG/A2BjcmNN5ThZL/umiMFMFaWF6pIWok2KdGoJ3jOIcZ9OlMtk + Yt2mURRlQmOmA+0FrjRn29GUZUFTtjLXqh4thfr0VRkxr0EqX4MVKxptWF1vxdoaczZWm7Gx0oTNoi3S + 2W0TI7ez3IA9ZXo8UmHAwWpDDtWZ81SdJY9VmqHM/zsx/LMCgU3UDGAlM/hAmRFPSkf5TI04t/VzuT5k + wO1Fhny1yojv1xvw8yZDftmsx8+bdfl5iy4/btLmx42KZHmDAd+tNuDLRXp8Nioa0FfnlfqixZhP6wz4 + qMZAnHIjLsr5XyrW4kj+HB7OncPOnFlsTp/JhuQ5bEjUYou8452JxuxONOWhZHP2pprzSLoZj2YacyBb + jwM5mjySPYNHpaM+UjadU63aXOjT48qwPu8vNuLOGjO+2GDJ11us+X6nLb8+6MCfd9rw6w4r/rzDgl+3 + mvPtRhM+l7pwa4URl4bmcqZjOq92zuXNfmPe6Tfj3T4T3hs044NhJevXlvdGrXh32II3Zf3lDj3OScU8 + WTmTYxUzeLFqJi9Wz+ZY7Rx5Z5q8LDpTp8WrNVpcqNHlWoOcq8OOj/pcuCV6s9mSN6r0uFatx3vNE/P6 + 3h424tMFpvywzo5ft7vw7RYHPlphwvsL9XlvXEfuZS43ezT4qEeHT/rFaR8x4bthU34cMOKnXvkuPQb8 + 2iPfpVeP77t1+LpDk8/b5/Bx60xuqyB4Np/3avHtiBE/zDPhmzH5LsOGfDJowK0BA96TxqQA4Ms9hpxs + UebF0GRd9kwGY6fSEjWLcnHO8qOULF89ipMM1Szg2mwz6nPMVbCrAODcaA3yYjSljSjZv6J4HdlXn8oM + Uypkn/I0Y0pTDShN06c4VYviFHGqUqdSmjGZqrwptBZMZVDKpQXT2C7v80iXHm8stubORge+3y3fcL8d + //24NRwRHbWFY44Tes4OnrLgLw8a8ud1Ovx5uTY/z9fkl/m6/LbImD8vsuCXcfnm8yy5NWzCKy0SzJXN + YEXy/bQFTaLU914yvaeQ7iHtT5y2pnANhpL1WFNoys5KY/bXGvBUkx7PynFHm8RQV8/lCXEYHi3T4Eiz + BSeGvCQIDePU0hhOLovj8T5/aYe2LMk1YmmeMcuLTFWtF3vyaL4Vz5XY8XSRGYeKdDheq8flAQnSVjrz + 0z4f/utpP/7xchC8Fso/roTxj/fC+O9bwfz1Iz+RD7/dcuPPH7iK3Pn1fW9+vh3EL59H8+evk/jbd1n8 + 91c5/P1OHn97L4f/upTDD0dTeGeDDycVAFxlyOFKSw5VO/JUtTMHK53YJbZlQ5I2a+WbbZBn3qpk2WcZ + 8ag8+6FSU54uNuSZAl2O5mtyvHgOx0un8lrbNG4smM2tDRp8vs+Azx8z5rMnzfnqGUe+f9GHn1+K4ufT + qfx6rpTvX6rls+ebubKvmmOrS3h6WTUH51fz6IJ69i9qZO+SdnYt7WHHij62LFcck05WzO9i/661vHbm + RW4oAPjKVa69cY2rKgR+U9VlBf6qAPgGl6+/peqSLF+6+iYXr17n4pXrsk32vf6uLN/g1QtXOff6G7z6 + +iXOX5jQhYuX1eGhz5+/yNmzr/DyqVOcOHGCEy8d5/jLx0THeen0S5w6d5qz58/xijIctQJ/L19S5/dV + h5i+Lte6do1Xr76hZv+qAPji67KvMrTzRc5f/R0AX1GlwF8VAL+lAOAbEwBYzvHq7wD40u8A+CVOnD4m + 1z/KmdPP8crpQ5x/+XFeP/4Q58XBPHtwGWcfGef1R0a4/MgwV/b0cm13B1e3NHFlYy0f7G7mu8ND/OPM + cv728gJ+eLZXvlMzt/ZUy7Yarm0q58SibPY0h7Gm3If5BV6M5AcyWBIvDlwSrflxNGaH05AdTFthGP1l + sYxVpjCvJJGxgjjmFUSxoDiKDc2ZbG4rYkNbFSua62kpKKA8O498BfwqyilQ5+XMLigip6CU3MJyNQtY + GfY5OSVLDa7jEiQoT84kNT2L/LxCaiurGe4T53PVUg49vItnHtnBk7tX8Yg431vGG1jVnc9YbTyDpRH0 + F4fRlRtEa6YfzZmBdMq9LW6rYOeiYZ7cuZmnH93H3h07WL18FT09A5RU1JKRW0RSaiYpaelkZ6aTn5FK + YXqy2KgkGtPjaU+NpjsliJFkH5amebA934snqnx5ptqL52tdOVol7afYgscVAJyhyZ6k6eyOe4BdUfew + J/Ie9oueTpjBS+lanM804JL0W29IMHpZyvPStl6RQOV0niEnxAF8Pl/al+ipQiMOFhrzSIkl+8pteKjK + nm0V1iyQAHRczrM4z4gVcs3VZTbyvaxZX2HDhgpzNoh92lChz8YqXXY26vNIpxkHO0x5rNmIx2p1eEL6 + 8UOy7UilHs9VG8i9G/BcpTidVVo8XyXtuWY2J2tnSH82k9db5vw7AO4z4mPpWz7u1vtDH3Xp8FGnjpoV + /EWvIV8PmapZwD+OmfHDqDIvsBE/DipzAOup86//LP3QTy1ii5u1+aVRAcAa/CB95/cNmnxbr/GHvlN0 + FwB/WW/CHfFvPmhx4XyjmzjKFqyQvqVOgt4E19mEexoQ5WtKrL8loe4meFjPxcl4Cj42EnSnerKsI4P1 + PRmMFnnTFmvMSJoVm8o82d8QyJGOcJ7viuCF7nBe6AjlyVofduXYsCXZmB2pFjxZ4iGBYKA4koE8UeHB + vjIndpc6sK3Agg3yzXaI836wzYWjY6Fi65M4PBbLgcEYDs/P5MTaCl5YrfyTSxHHlhdyckUBLy3J4vh4 + Ikd7g3i+w4sTXd4iH+lL3Dnc5METzd483ODFrhpPNld7iy/nz5LaYAarwmgoDKQg05/U1ECiE4MIUwBw + YgQhSdH/poks4N8BcAyBSVETADgllLi0YNKygsgrUACwH0UFbhQW2FFUZEOR1Kci8fuUjN+SMsM/AHCp + PGOe1MUcqZ9FxabU1DlQXe9AUam5CofLKyxU6Fvf6KDqdwBcXm5KdbUlzQoAbrSlocaSpjorWupt1Czg + 1lp7WqucaKlwoLFMji+1oKHcjDbxX/vbbBnrd2L+iCujUva02VFfYUVqrCbhAbPwdJqKvfkD2FvOwcFG + Hyd7M3w8nQkNDiQxLp4MsR25yggDGdmkxCUTERSKv7uXHOckx/uTnRRHXUkOY71NEwB4XgcrRtsl4G5i + QdfEHL+Kxjsr5Xc1492VzO+rVOf1VQDwypEGVo82sn5eM+vGmlk9Us+q4X+HwMv7a1gsxy3oKGN+R6lI + mcu3TJ3Td7ixgN7qDHqrMhhpylf33TivTQXAG0dbWD3YoAJg5R9YFigAWMpFStauMpzzXWCrwttOBQBX + s2ZI7mWsRZWyrMDcRZ3KvMDl6jDSv0PghXIfihbLNkVLupTzVco5qtRjVvdXs3agjo3DjWwebWCrOp9v + C9sWtLJlfhub57WyYbSJdcP1ch0FANfJMTWs6qtmRW+NCoDXjyhDQHf+rwB43SIl47qW3pZsaooiVNWV + RtJUHUNXq5IFnMlgTzoDvan09ibQ3hFGTYMHBRW25Eh9yyo1I6PElMR8A2JzdYnL1SdeluMUFUwoJt+I + aLGhUQXGhOabEiJBeFChGf4F5vjnW+CXa4F3rhneef+UV64pXjmmeEqpyFv8IAXw+mYbqfLLEYn/FiD+ + m3+ByR8KzDcmSBSYa6gqQGyCr1zbW9Z5i432zzImIF32E183WHzkiFQzYkTZhY40NATT1RFJe1u4xJee + pGWYEy5+c2i8JsEJmvjHa4l08I/RFenjFzshn1gDvOOM8IwxwD1KT6SDr/jhgQk6hMpx0UmaJKTOlXau + QXGxtrxbQ+a1Sd/QZcXuNombGg04JH7mcxKPnK7T46L0DTekn3i/25xbPaIuY253GfKx+P53eo3ktx7v + tGtwo20Ob3dp8X6vLjd7tSdiD9FnEkd82aPFVwO6KgD+Xuz+D9IHKEM4TwBgIxUA32zW4M3KKbxZNYV3 + 6ycA8AdNs3m/cZaq95pn82G7Fne69flSmVJA4vHvlSltpPxS+pWPe+QcHbpqfPSJbP902JxPJAa72WfK + 221GvNVqxjtiJ95usedypRWvio/9svSxJ+S9H0s249kEC56IsWBfqCm7AozZ7qtAYEMe8rfgQLANj4fa + cyDIlof9bdjjZckmT3OW+Fky4mdBj7cZrZ4mNPmIjfK3nQDAQc4qAC4MdiNfAcChPhRGBZIXGURGaABp + wX5kh4dSlBgrMU8KNTnZVGRlkRMXR2JgEFFe3oQq8FcFwL9D4AkAHOTpRYCUihQAHODqjr8CgGVfX0XO + 7ng5u+Fq74yHLIf5BZKbnEJdYS412alUpcVTn5X0vwBgU4yNzDEwssDY1I6QcPHtOoZ48qnnuXnrM776 + +mfxha+zZNkadQSWwKBI/PzD1Iy3gaExXnn1kgqAv/jyO16/eJX5i1cQI/6aMj+ukkH7b9D3P7KA/1cA + /LssHDCVUtluLMuGdwGwjr75v0lTyxAtXWMcnZR/mMhl7cZtXLvx/h8A+PDTR5k3f7E6/2Z0XJKaAVxZ + Xc+mzdvVkX++++GXCQD88GN/AGAF7CqwV7n///sA2Bk7ZwUAO6oA2DfQm5j4SJKSY0iQfjpRFCf9emJK + BAXFKXSKje+R/qahpYDMnAjCot1VUBse5y7yICxevn2slCIF3obKuogEb2LTAolLD5ZlPwIjpa4E2eMR + aIu3lD7Bcl1lyoxQZShoB/xFAaGOBEZI/ynnj4z1VDOAY+N9SUgMJD8/UfrzPPGV80hMSyA4KpLgmDii + 0nJE4r+XDVHVsoHajl30jj3Jik0vse3AOTYeOE7bsg2kNXUSJn5+oNR9r4Qg/BLlOukWJIrdzSixJb/S + mfJabyrr/KhtCaWpJ5be+ekMLc9jeGUhA+I/9a8opGd5CR2LSmgYyaayJ5nStmgqWyLo6Ihm8UAi2waT + ONgTz7Ot0bzcEMn52iiu1sVxvSKGa3nhXBHf51qsH29FevFumAcfRrryeYI7dxJdeDfWjkvRNpyKsOW5 + MLEFAebs8zXhQR8TtnkbscZTl2Vuc1nhNpuNHuLje+ly0EefZ7wNOeqlz4ue+hz30OWEp45Ii5Ne2pz2 + 0OYVdz1edTbknJ0RZ2yMOW1lwksW5jxvLLG0sTHPmVtwws6O0y72nHO15TVnK847mHHB3oRX5Jhjtvo8 + a2/MERdrDnu7cTIxgfNlZVxsauO1jl4uz1/CtdVruLpqJZcXzefaolHeXjzM2/N7+GCkkdudOVwr9OLV + RGMuJhvyTqYFt3Od+KrQjz+levNJgA2fuZnypYMRf7LT5UtHHb71MeD7aEt+zHXle/E/v5Jv8mlfIjfn + 5fH6vAIOtKewqCSUllRfauODqYyLpCg6itzIGLKjE8mKnYDAihT4mx6fRmZiupoBnJg0AX6j0zImJHZF + 0f8bAPwH/P0XAPxP3Z0PWPT7HMDKnMCJd6XA338FwAkxKSTEJpCWOAGA+7qaWL50hMULBsRfLSMtJZmk + xBQV/iYlpBEdm6jalKTkdPLyi6msalRVUlYj/nC1tJNG8YE7aG7poqW1R9T572qeyO5V1N7WTUd7H50d + /X+ova2X1mYFBt8FwE0dKixWAXBziwqNlXWNDZ3U1rRSogwFnZFPUlIasbGxokhiYoMJi/QlMMQVbz9b + 3D3McXEyxtneACcLbewNZ+OgOwsn3Rm468/Ax2gmweazibPTIs/bhHKp+3WhVjRGWtMUIf1dmKkKgGtD + DKgN1KPGX1OdIq3KezY1XjOp951Ds/8c2gM06AnQYUj2GQnRZzTUgHnK/MAKHIwQRekznmDO4nRblihZ + wFmOLMxzZCTPgb58JcnJgpIME7LT9KW/0SUhRYeEdAOSxH9KTjNVlZRqQnyS+Hax4uuEaRAQNIeAYPGX + gnUICtLGU2JCZ+d7cHWahI/jJOJdJlEcOJ0W8asG0wxYIL7cSomtN5UZsatCj0fED3qmzZSTg7acHnHg + lDJNRqfEyzWaPFg6k80FU1mZM43xjOkMpM2iKWE2hRFTSQubSm6iFpVZpvRUuDCvxosR8emGUs0ZEt9M + AcA9ofI+RCoA9p8AwKU+cygN1KU03ITSWHMK48SnjTYlJcyYhEB98QnkuVy1CHaSZ7OZRZDDbCLcNIn1 + 0STRT4N435nEek8RTSbJ8wFy3SdT5jGVGp+ZNCh/q/SaSrPHfSoA7lUAcOBkhkNmMh6ppQLgkTBN+gJm + 0ibHNcp7UjJ5m90VTZblKXT5zaLTf6aqCQA8WwXArb7TaHC/jzrnSTS43qtmA3f6zWQ4VEf9vioADtGR + a86m3XUKjY73qGp3fYA22b/ZfhKNNpNosZ5Ej90kRtwmscj7AdbKvW2N1GB3jBZ7YjTYGzOXvVEzeTh6 + Bg9LuT9yxoSiZvCQvPOdQfexI+gBdgZPYVfoVHZHzGCn7LcjZibb42ezM1WH3eKnb803YXWmPotStBhL + nMNgzFT6I+9jMPZexlMns1RJMivRY6fEt9tLDdmSp8mmjGnsED1cMIsjVTocazLnVJcbL/UG8uJAHIeH + M3l4tJydEhNtGu9h/UKJbZZ2sn/jAM/sW8qpQ5t47ehOVa8e3SbayqWTu3nr1Ue4eelxbl89xBfvPsc3 + t47z3e0TopN8/s4L3Lr8DG+cfJgXH93Ig6tGWDXYyqLuRhaKLVrQ08yC7lbm9/xPADyvv4MRpRzsYfFo + P2sXjrBlmQKAx9m7aozH18/n8IZ5HFo/xhPrxjiwdoz9q8cmALDsp8Di9dJXrFXm/5VjFa1ZMKxq7cJB + KQcn4K9o/aI+VSoA/hdtWjg8AYFXLGTXStGyhexcvIAd0g9tGx9idV8b8xsr6S3NojY1ktwQNxLczQm1 + 1lIhcKSdNjEOOsQ6aBPnqE2isx5pHobk+JmQJ3Yo19+UDC9Dklx0iXWU2MZ+LtFO0h5kvyhZF26vSaAC + fi1m4WE6HRfDqTgYTMZebwo2+pOxkmULWbaS9bZG07EznomD6WxczDVEc/Gw1MDPRu7FUYsIFx1ipM+O + 9dIgzmsWcZ5TifeaTEbQTIqjtahPMqIzzZy+NDOGUswZTbFgobT3RbK8ULQgxYx5yaaMJhoyLDZqOFXi + Lon/Fks8ubLAgvWFVmwTPVhozd58W/aINhdbsaXYjH15Jjyerc+RDB2ey9Dm2UwtnlZGA0ydxYGE6eyJ + Vf6eeC97o+/jsYj7OBJ8Ly/638sp//t5NWgaFyLncCF2Dq/Gz+FcvAJ/Z/0BgC/J8dcSZnJDAcBxs7gp + beVmzCw+kDb1XsQU3gqbzPXw+7kWeh/Xw+7jTSnfCnuAt8MVCCxxWuQsbqn7z+SW/L4ZMY3bkQoEnsrH + 0dNVfRI7k0/ilLmDZ/CZXOfLhH8HwHcUAJwwldvxk7mdNI1PM+bwSY4GH2bJ+e8C4PdE72Q9wI20e7gS + P4nLcZN4M2kSt3Lu4/OKmXzdpM237RJjSjz6bb8eXw+JvzKix6ejBtwaMeSaxIQnWvQ4XGfIo9VG7Ks0 + 4ok6M463WHCp24L3hmxE1rw76shn66P5y2OVTFq+zoDFKwyYv8iQkXkmDA1bMzDoxMCAB739fnT2BdDS + 7k1dvSNVZVZUFJhRnGFIrgTpObGa5MfrkZ9gNAGAQ/WI8zcgUpzFCA/pvAKVTF9LMqMmAHBmtJE4SLIu + XJn/Vzo46TCTAzRJCVKkQYIY1FiPKUS7TiZGlOg1g6pECzoLXOkr86Qj34GWHHOacoxpzNOlpUiP3koD + hmtMWFBnwdJ6K5bVmLGi0pS1lSasqzBmfYUJm8rFIJYbsr1Mn50lOuwt1+OJWmMON1pySI45WGWuZv0+ + VGzInqIJ7S1S5gjV50CZkh2pDJFrwJk2Hd6fb87nK8z5bp0Zv2w24bdtxvx5m6GUBvy2XZ9ft+ny61Yp + FW0x5teNpny/yphvF4vk/X4/KMfKx/i61ZQvmkz4qMmMN+WDvVKmw9GiOTyWO4sHs6VTSJvBxuQ5bE7W + Yrs4rg8mG7NXgviH0yx5RIKHg+LIHsySD5ynx5MFOhwu1uBp6bCP183l9R4Dro8a8e4CY24vNeGLdXK9 + Tdb8sN2en3Y58tuDTvy63Vbu10Zkzc+bLflmvRmfrTHnnUUGvNo9i+MNk3m5cRbn23S51KzH5WYdLrfq + cK3DhBs9FtwYMOMt0bUeYxUAv9qsydl6Dc4oatTkdJOWqjMtWpxr1uI1Wb7QoMkb9TrcaDbiZqc1H/XZ + 82GPHW/Je7hRrcO7DXp81GE08ccNec9frrDmz7s9+dsBf37e78lnW234cJ0pH6ww4v1xbT4YlAbUr8Un + Azp8Jc+rwNzvBwz4sVeXn3r1+UXKn/uUZR2+79HlT52afNo+m4/aZvFR60w+7ZrL17L/tyPG/GnEgM8G + 9fl4QJ+b/fq8L3pbdKFTOkK57/0ls1ie8gA9kffTGDGdktA55IhzkyOGsSjRQIW6jQU2tBY7UJdrRVGC + LjlRmmqWfL44XwXxOhTKuhL5llWZ5lRmmlGaakRhkh4FibrkJ2qQnzSLwhQ5d/pUKnOn0VIwg6HimSwu + Ekesai5Pyns+I/f67korvthqx08P2vLXR234+5M28LQdPOcIzzjAYVv+/pi5vDuplxv0+PNqeRdLdPh1 + iSF/WWbBX5ZY8+M8c74YNufdPiMJFrXEIE9hPEqcFt9JlPhMIkeckxxxJivE4WqP0GReij4bi6SNVJty + sN6IZ5v1Odamx0tSP443avNcjTaHq6QUY3N62IdXFobzytJoTi2J5skeL7aVW7AiW4fV+YZsKDVjS4Ul + D5ZY8kypBJ0VdpwsN+NEuS6vtRjw1og5n6yy5+e9HvztsC+cDOQfrwTDlVB4L4y/3Qzkzx/68NuHnvz2 + gSu/ve/Cb++488vbnvz4rh8/3Qrj149j+dsX6fzj02z+8WEOf7+Rw9/OZ/PTc6m8t96Pl7qseKrCiIMl + ZhyQIPzREntp73Zsl++4Qb7JxmQDNqcZs0O+095cc56QjuqZckuOlpqqw7UfzdPixQJpb8VTON8ynRsL + ZnF7kyZ/ekTq0hNmfHnIim+edVEB8A/Hw/jhZDw/vpTLn14o484z9VzZV8XxdaUcWlLGw2Ol7BuvYs+C + WnYvambb4nZxZDrZuLSbpSMtLBhsYuempZw9+SxvXbvMjasTAFjRlTfenJCaDSy/lYxgBQL/Dn9l/YU3 + rnL+0lV1+fK1t1UA/NrFa7xy4Yqsv8Lrl6+qunT5mqoLF6/wymvnOX32FU6fOcOZc2c588oZTr9ymtOv + nlHh76sXX1OlAODXLoveuMzrV97g4nW51tU31CGcz71xkbOXX+fMpfOck32Uda9fe4ML15XsX7me6D8B + sCLl92tXr8hxFzl96XVOXXiFk+dOcFLJ/j31LOdOH+G1U09y8dRjXDm5l8tHN3PuwCJ17t/z+/q4+sgg + b+7t5c3d7Vzb0si1DTXc2tXC9yoAXsp/vzTOT8/08KeDTdzcXc6bm4o4uzRL6mk068s8WFboxqIiHxaV + RbCoJoPx2mwGKjPoLk2koyiGrtJoesrjGKlIYV55CuPFieo8wIvK49ncnsfWzjI2ddaxqq1J9i2jrqCU + srxi8vOKKCgqoaCklILSUgpLKykqq5Lf5eRKMJ2WoQTsEminZJCRmUteQZEEvk2Mj46ydcMaHtu7jRee + 2sehfRvYt3GUHUtbWdNfxNK2VMbrophXHc64aF5VBP1FQbRm+dCYHkh3URILWyrYumSUJx/awROP7OPh + h/axauVa2jv7KCmvJV2unZqWRkFuNqV5WVTkplGXk0JnVqI4fFEMJPszluDGimRntme5cKDQmScKbKXP + sZE2LP1ooRlP5hnycLoGO+MmS0ByL9sjJrE7fBJ7RYfECTqWqsHZDH1eyzDiQoYx5zONOZdtzOlcQ17O + N+KYBKZHxcY8Iw7hU6KDxeY8LOd+qNRaglUbCVotmZ8utihTh0X5xiwvtpR+3l4dXWBTlaha9lH/+ctI + BcDbanV4tMucxxW1m3CwwYAn6/Q4VC1OkvgAT0sArKpchyMVGjxXOVv95yUFAJ+pn8H55tkqAH63Z2II + aAUAf9RnoE47cLtLlw+lb/iwQ4sP27TUzK2P5fefBoz5Zlj6fNF3w8Z8N2jED0qfJH3Jjz06/NKpzc+t + WioA/rlJU9UPjRoqAP6mQeOfqleAsA7fim/wRb05Hzfa8l6rG5c6/OTenVibaESLvzIvzEyiPCWA8DEi + SQKGGG9jCZo18LGYSpgEzw1pbqzrSmNbbxqLS70Zy7BhdaET+xp9ebo7nFMjsZwbjubcYCQvdYfweLkj + D2aa8JDoiUI7jla486IC+qs9ebbanSer5NvLO99TYs6OIiMeLDfmiVZHnh8J5PSyBI4vTuTQcCyHRpM4 + ujSXo8sLpMzjxSU5nFySzUsLUzg+Es2znT4cbXXlZKc7L3V6crTFlSPNLjzZ5M4jDR7srnFnW5UnG2r9 + WVEfxLzacDrLQinJ9CM9JYDYhCAi4kMJTYggNDH636RmAafEEaTMA5w8MQR0cHIEYSlhfwDgnPxAigqV + DGAFANv/AYALi43+AMBl4j+qILfSQraZkSd9V2GRCVXVdlSKCktM1f3Lys2prrFR4W9DgwO1NbZUVppT + Vib7VprR2GBLc7M9jXWWNNZbqgBYyQJulvraVGFLU7ksS/1W5gdur7Oiu9mSoS4b5g3YM3/YiVHxk3pa + bWiQ+0gXvzsmZA5BEqB5OM3G2U4TJzsD7G2McLY3x83FEX8fXwIDgwkNiSQ8JJwQv2B83Dxxs3PE2daW + IB8vUuOiqMjPYLC9lmVjnaxQ/tForIOFvQ2MtlUy3FrBUEsZo61ljLWVM9JeyqjYtUU91SzrVwBv4wQA + Hm9hg2j9eDNrRpWhn5VhoCeGglaGgF7aW6NKmRN4hQJ1ZXlhZzVjLaUM1ueJchltKWZJbzXrpK/brGQA + j7aqQzyrcwDL9RfKvgtaJ6RkAi9ur2BJZ7kqBeoqWcFrhpTs31bWjbWyariJZX21cp1yde5gRYvu6ncA + vKSjTNVSWadIAcCKFICrDEGtZCFvlOfbPK+FLQvb2CrasqCdTeNtrFfmKh5qkHusV6VkL6/sl2fsrVXn + Hl43okDjLrYt6mbbkt7/AMDtrJkvfXp/BR31afL946ktjqS2LIrm2ng6m1LobU9nqC+L4cEMicMSaJd2 + WdvqTWmtI4VS7/KrbMgotSC5yJgksZlJUgcVJUi9VVVsQmyxMdFSV8MKTQguNCVI7GpAkbkq/0JLkQW+ + Rf+UT6G5Ku+78pU4z6/AFP+CCeAbWGisKkjOGSg+0O8Klmupkm2KAuWe/GUf32JT/OS6AblmBGabEZxl + SmimKVESt8RlWJJX7EJTcyjdnVETALjKg1TxtSITdQhL1iEkWZdARUn6BCYYiIwISDBR5ZcoSjDDJ84Y + T2U+YimDUy2IzLAgPsNMnV8zX3zLiiprWpps6W93kDrrzLZBN/b3OfJEpw1Pt1lwrNWM1zqsuNJjzdt9 + NuILW3Kzz0LNqP1Q4pqPlH/46TPmZrfEAh2a3FD6Aoklbg4acFsC8I9Fn0p88bms+6pPh68HJTAXe6/a + /bGJfwT6ZsiUL6VPULJ632+aw7WqyVyvnsI7DTN5T+Krdxtn8Hb9tAnJ8s02TRX0fjFkwtejFnwzz0pi + E/GHBxQQrcM7sv39Dul3pD/6SM59Z8hc4hUz3uk05u12C5Etb7Xac6namlek/zyWZsBRiU+ek/d2JE5i + xmjpT8PEdgeastXPmG2+YsMDrHgkxI4D4Y5Sih8cYMdubyvWe5mz0MeCfh9z2j1MaHI3oVHW1/vbUxPo + 8D8AcEGYLwXRQeRFBZMeFkBqiB9ZEaES48RRkZlGbW4OVbm5FCQlkRoqttjXjzAXN8KcXQl1c1EBcKi7 + p5r9G+zljb+Hx4TclGGg3fGT7Yp+B8CeTq64Ojir8nXzICEsjMqcDOpzM6jLTqYpN5WazCRi/TxwNDPG + wtAQM2MTTIwt0Dc0x8jUlsDgeJpa+3js4NO88+6HfPb5N5y/cI1VazaJT1ZCTGwikVFx4osVq5m1r4tv + /O33v/Dp51+rMHh80XJiE9NUyKkC1H8ZAlqZB/hfAfDv8wD/GwRWln//LaWyXQHByjDQuoaW6lzASjbw + hKzQ1jFGU9sQG1tn4uLTWLZyPZeuvMV3P/7G7Ttf8tTh51QArMzBOfFPfVnUN4hd3bpT9e2VDOBPPv1S + BcBFJZX/BoBVCPwv8Pf/CgBW5TyRCexsj6uHM4GhfkREBxMeFSQKJDDES9Z5ynsNoqg8lSrpI4rKk0lM + CyIowhm/MHt8QmzwCrLGK9ga72BZFnkGWuEWYIFHkBW+YdIPRrrgF+6Cd6gTHoE2ss0azwBlP1s1G9gr + SCkn5BNsL+d1lPMrWcHOBMkxgSGO6nDTWVkxFJdmkluQQURMBJ7+AXKNUAJiU4lIraakYSWdowfpnf8M + yze9zkNP3eSJEx+y68gFBtbtp6RvKekNA8SX1uGbEIVPvBshqdYk5FqSLf5WUY0blQ0+1DQFUN0SQH1X + OG3D8XSNp9K1IJ32+RmidFrmZ9I4mklNfzJlnbGUtoRT2xRCT0uY9IVRbG2P5OH6EA5X+HOs2Jcz+Z6c + z/Lk9VTxGxNcuRzjzPUIJ96V57sV5sQdWf4i1pFPou15L9KGK2GWnA625Hl5f0cCLDnob8F+Pwt2+Zqw + 3kefFV5arPbWZJOPNnv9DXnC34hnRc/7GXDMz5ATvvqc8NMVafOSlKf99Dknfuk5NyNesjfgRSsDXrCU + YyxMedLImMeM5Bzm5jxrZ8MxZ1tedrHhnIslrzqaccHBRB0G+qS1PsfsTTnhbs/JAG/Oi+24KrHTtbom + 8c/bubJgEW9vWMd7m9bz9sqlvLlohGvzerg80MS1zhJutabxXrkvlzJMuJSqz3u5FtwucOTTAi8+SXbl + tq8Fnzgb8pmtDp/baPKlo/jdPnp8H23OD7kOfFPtwWfNfmKTI3l/NJULo9k82ZHEurIwBsQXbUrwpyY+ + hNKoUAoiwsX2xZATk0h2XApZcWlkSBtNT0glIymNZInr4kUxaRlEpqdPKDWDKFkXm5ZJfGqWSGLAtFwS + 0/NU/b8BwCrsTcolLjFbVWxCFrHxWUTHyXWlnFC2qv8NABfnZ9PdIT7aokEWjvdSW11MSlICCXGi+BTi + 41KJiklQIXCq2BVlmPnaxnZqG9qoqG6grKqemrpWGlu7aWnvVdXa3v1vam/roUPWt4s6O/ro6hygu2tQ + lbKsAOG2lh5VSnZwc1PnRLZwcyvNLa0qGFbAsQKKmxo7xb9uEv+9XP3n6tRUZa7iZNLSY+VdhMvzBxIW + Lv2Fny0ebma4ORriYqmNo9FsNfvXWWcangYzCDSZTYTlXJLsdSjyNacqSPz0cPHHo8U3j7SkIcKc+jAz + qoMNqPLXpdxXgzLvOZR6zqbMY6YKgut85tLsq0WHnxZ9/joMBCoZoaJQffpDdekL06EvXIfhGCMWpFqx + OMOWxVn2LMxzYKzQgaESezqLrakpMKcw14isbH3xY3RF+qRlG6lKl1g5LcuI5HRD+c46xMTryLfVk+9h + SFSUEWFh+nh4TsPRYZLEBZPwtJ1ElNMkcnweoD5ag75UPYmdDViWb8CGEgN2lOuyV+LkJ5uMOT5gx+kx + Z87Mc+WFHksO1GlLbDebzUUzWJE7k/HM2XL8XCojp5Phfz+J/g+QGTWXokR96WetGRH/bX65O0NpVgyK + T6Y8a3eopkiDjrsAuMJ7JsWesyiW91QcYkhxpAlFsebSXsxJizAhMciAGC9dwl11CHbQwt96NoG2cwhz + 0iDGXZM4r7kkeM8i3msa8d5TSfGaQoHyN0qvmdT5zqY5cA6tfjNp9Z5Mp9f99KgAWBkGegIAL4jWYSxS + vk3wHDq8p9Hseh+t7g/Q7KFoCi0eU+mU++wImKWqK3A23UFz1bLNbzpNng+o8LfJ437afaapcHhIvutQ + mC4jEQYqBB4O1qbHR46X8ynq85lBr9xrl9t9dMi36JBv0ysacpnEfI97WBUwlU3hs9gepcEueZ8Pxszh + oZhZ7FcUPZuH7+qR2DnyexYPRcxgd/gMdoVOY3vIVLaFTWNrxHQ2R01nU6x8r2QttmUbsjHXmKWpuozG + a9AfNYPOMLnnkHvoipBrJ97P/PTprMjXYpPEqJtLjNlcqMuW3LnsypFrlWjydJ3Y83YbzvZ58XJ/EM/3 + x/B4fyq7BwrZJHHd6uFWVoy2sGq0jh0r23hy1zgnn1zL5eN7uP7yft488zBvv/IIt954is/eflbN+P38 + nef49sNj/PTJy/x45yVZPsHNS09y6cRejj22jofWjrBmpE3isxrmd9Qx3l7PWEcj451NzOtqZbz7n5nA + CgAeH+hkbKCbBSP9LJ8/zLrFY2xdPsbuFfPYt2qUJ9aNc3jDGIfWK8v/BMDKHMA7ls+TfcfZtGweG5aN + sXH5fNYvmcf6RaMTWjwisdowG8QWrl848P8VAG9cMMRm6XO2LpFrL50nMd88if3G2LZQ1o3LPQ13sby7 + iYVtVfSWSd+dEk5uqBvxbuaE2+oS7WhArLMBcS4GxLvqk+wu7dzHjDzxZQrEx8kX/ybLz5wUD2N1e4yD + NpHSNsJstQi0mYuP+Sy8zGbiYTYbV5OZOBpMxV5/KnZ6U7HSmYy57v2Y6jyAuQKBDaZhYzwLB9M5OJlr + TgBgC018rbWkvWkT4axLlJsWUe5zRUoi5hRipc6nB864C4CN6ZQ4q080mGzBSJIF85LMGBfNSzCVumY8 + kf0fo0tPtDa9cdLWVJtjxGKJA1flW7JJtC3fmp25tuwQbZTfm/NN2Su27WC6Hs+k6nA0TZvn0jV5Jk2D + Q4kzeTRmKruj7mN7hJJQch+Pht/HoeD7OBpwn/gED3A2ZDrnpe2cj5vLKwkanEmYxdkkBQDPmgDA8TO5 + Lr/fkvUfxM/hlrQTRe9Lu3gnfCpvhj7AtbAHuBJyH2+E3MuVoHu4JsvXZf1boVN5J2y67DuT9xUYLO3v + /TBl6GhlGOhpfBw9gzsxM/lU2uunMTP+0OdxM0UK/J3OJ3H/BMAfJU7lTtosPs/R4PNcLT7KmsXNTDmf + 6P3MKbyVcR9XkyZxMXZC11Mm8WHBZL6omc03bfr8IPHoD8roUKPGfDPflK+XWPLpInPeHzfn4pCFOof7 + IzVG7Kk0Znu5MXtrzTncbMWZLmuuDNqLbLk84sIH6+L47kA1k1Zu0GPpKl0WLBYjNqbPwKApvb1WdHc7 + 0N3rQWevL60dXjQ1uVJfrWQh2FJTaEl5ljGFyfrkxuuSF29ARpRU3lA94sUxjPZShnLQJfEPAGx+FwAb + kxlpLMGfMtyDFrG+c0gQJYrRTfSfRazXVKJc7lMVL8Y41XcWDek29Jd6MlztQ0+JI225pjRnG9CYo01T + oXQw0okNVBkyr8aMRfKwi+XBl5QbsbLMiNVlxqypMGWDvIjNFUZsKdFlW5EmD5bp8GSDKU+32PB0ow2P + V1uoWb8PFuqzK1+RHg/m67C3UIcDpfo8XWvEiRZDXus25OOlNny91pqfNlnxl20W/HWXGf+1y4S/7jSW + ZSMpDURKKdoh22SfX9eb89NKc35ebM5v49b8MmTDT9LJftdpwZcStH8gHfDlGj1OlmnwRO509mZOZ3vq + NDHms9iWrMmuVAP2phrzSJopj2VZcTDLgiezzUUGHMrX5ZliHV6s0uZ4rQZnW7W5NmTM+wtNub3MjM/k + ut9stOb7rbb8ssuJX3c789uDzvy6w56/iH7basePG2z4Zq0ln6224vo8PU61Tue5ynt5oXIKp2rncqZq + LmerpUHVzOJ8vQKCDbnaZcz1HmNxsg15o12P19u0udCmw8V2HS506HGhU9Z16PJ6p6zv0OaSbH+jRYtr + TZq806rHB10mfNRnyZ0+K261GXOrUZc77YZ82W/B1/KOvl5ux3cbnfnvJ0LgaBR/eTqIrx5x4c5uWz7c + bMmtlYbcXKDDrREt7ozo8OU8fb4e1eebQV2+7dPih34dfurX5kfRD32ifl2+6dHhi04NPumYI9eazWcd + GvypV5evBw3505ABn4s+UgGwngqA3+rT49WWuTxXNZM9+VNYFD+JzvB7xRmcSmHQLDLFMciK1KAwyZCa + bAtaiqXNVLvTWuKkgt7sSE0VEOfGaJEXq01hgh6lKcZUZVqIzGTZSNqOLrlx2tKONMiJn0V+0kyK0mdQ + mT2TloLZDEqdWFg6lw1VmjzapseLvfoS9Mi3le/19VZrNQv4bwft4ZAjHHGW0gkel3X7LfhthxG/bTLk + z+uN+VXe159XmPG3VTb8Wd7tt8rQ3gOm6vd7oUqD7WJ4BoInUec1SZzbSRT53E+xODl14gj1RWmzJE0c + RgWW1pnzdJMpL7boc6rDgFe7DDmrgOBGfV6o0+NEmxXnR/24tDiSS8tjeXVxFIc73eVYE9ZkaLAxT4+d + 5ebsqbLisUo7jok9OVdly+kKE5E2F1t1eXfYmDvLLPhxpyN/P+TNP4778/ezASoA/se7IfzXB/788oEn + P3/gxq/vuvDLO1Kf33Tlp6tufH/Vi59uBMn6SP5+OwU+zIL3cuTYHP5+Lpvfns3g5vogXu6w4UmxD/vy + xEjmWbInz5adOVZsSTdjU6oJWzLM2ZZpzm5Z90iBNYdK7ThaacOLFRY8X6xkKmrzQt5MTpXP4GKbdC4L + Z3Nnmy7fPWHB90/b8N1z9vxwzIMfT/jx4/FQvj8WzbfHMvjs2SI+OlLNtYerObmxhMcXFrBnKJ89YyXs + Gq9k+4JaNi9oZOPiNnFAOlgwUMdIdw2bVo/z0guHVAD89vXrXL9yfSIL+PJ1VQoAvnJVlq+9xRWRMhS0 + AoAVsPvaxTd45fXLnL90Tda9pQLg85euqxBYyQxW9lOkDCd9RbarcwQrc/q+9jqvnj/PaxdeF53n1ddf + 5ZULE/odAL96+aKq1964pEoBvH/A3zcucOby+QkALL//CYCV7N//MwA+e/kCZ+UaZy6c5eVzx3jp5ec4 + +/IRXj31FBdOPc4bLz/K26f2cu35Tbzy6Hxe2tnNqwr03d/N2/tED7bz5pY6bqyv4uPdLfx0aIi/n1zA + X18Y4vsnW/nikVre317M5dVZvDAcx95Gf9aXubOuwpf1dZFsak1jU2cJa7rKWNxazHhDLsN1GQzUptBX + ncxIdTrza7JYWJXO0ppUVtansbmzkC2dFWzubmRNZxsj9Q10VtdJv1lNZVklZRVVlFZVUVZdLUFzHZW1 + 9ZRX1VJSVkFOfhEZ2XlqhnBJaQV1DeL8js9jx7ZNPHVwH889tY9nHtvOnk3iqC5sZO1oGSu6M1nekcTy + tniWtUazrCWSle3xLG6Kpb84iOYMP1qywugqTmFhVx271y/nwEM7OfjII+zcsUvOv4gWCcrLyqrIy8mh + oiif2pI8Goqz6ChKYzgvifk5MYyn+LEowZV1KQ7syXLgMXHeDmab8VSeCUcKjDhcYCx9kT4Pp86RYOY+ + tkZOYmvoJHaETOJB0ePRD3A0aTYvi5N3JsOAsxmGnBHH8JQEticl4D1eIHao2ITnSsx5psyKQ6LHRHuL + zdkh2lJqwbpiMxZk6jKercfCfBOWlViyVgG/tS5srXVma50DW+ut2VJnyuYafSl1ebTbiselr32iy4wn + muUeGww5XCv9ZsUEBD6iSkeuN4dnKmaJLZzByRpp13XiVDbP5lqHFu9JP/DPDGBDPurR48MuHW62a3Gz + VZMPmieG71Syt5Q5gRUI/O2gOGlDIhUAG0o/ZMCPPbr80qnDL9JP/tqizS/NWvzUrABgTb4T/Q5/v27Q + FGnxdaMeX9cb82WjNR81O/BumydXe0N4rs6bTRnWEtRpk+kxQ4JiTdICDMkMlkDa33hiWGj76SS6zqEt + zYltPcns6Uthdbknqwod2VXlzqHOQE6NRHF5UQJvzI/m8lgEr/QF8FiRKXvStTmYZ8SxKkd5D26cqHbl + WKUzx2X5uTpXDtfYc6DCXHwmI/aJr/VUsx0vDvryyvIEzixP5dmxGJ4ciubIPFlenM1zCzN5fkEaxxek + cGJeLMcGQni2zZ3nmhw52e4stthV+hMnnhEdanbhQIMrD1a7sKPSTb6tL6sbglhYH0ZfZSjlGT5kJvkR + Hx9AZFwwYfHhhCZEi6IIESkAOERRcpwKgZWhoCcAcOQEAE4NITUrmOzcAAryfSnMc5XSgcJCa4qknhUU + Gf4BgJU5gKtrrUQ20h4tVPhbUGhMebk15RXWcoyx/DaQtmOmAuCGJicaGxyoq7alWt5PufiUleJ71tVZ + 0dRsq8LfxgYlI9iaJjlvQ6UldaXmNJRZ0lol37Pehr5WOwakbxrttZbg1kaCW3vG+m3oaZNjK03JS9Ml + VQKsuDA9wvwN8HLVw0WCSHtrfazM9bCyMMHe1hZ7e0ecndxxU7LkHFxwsrbH3twKWwsLfDzcSIgKoyg7 + hZ7mSpaMdLJ8vJtlYx2Md9Uy2FxGf1MpfY3FDCnDcCqwtqWYYbGBC8S2LemtYcVAPatHmiYA8PxmCYRb + WTevkZXK/LsK/FWHgBb117FKyc4db2fDeCerh5tZ2lvHgo4qRpqKRYXMaysV21TJqsFGNsyTfm9EyeJt + UsHu4vZyFQCPt5SoUpYXtYg9bi+dUKeSvTsBgNeNTADglbK8VAHAcs7fAfCCjnJV89uKJRgvYVF7CYs7 + Slku+yhSso2VOYNX9U1k8a4blnsZa2LTvFYV/E6og03yHOtHW1g73KRC6pX9ynzFteqw1AoAXj3QqN7H + BADuUQHwFtGmpd3qHMDrF3eoEHjFvCZGu0vobsyivjSWSgUCl0fLN46jvSGZfrHrY0M5jI6mMzAUS2d/ + BPXtvlQ3e1IusVhBjQNZFVakl5mTWmaqKrn8d5kTL2VMqSnhJQqkNSZIysBSMwLFvgaWWMhvKwLEvgZI + vVbkJ/VQke9d+cn+AcVyjPhtgQrgLTVWFVJmQojEVCFSF5UyWH4HiR8VIm0mWBQk+wRKvfeXayvHBxTI + NfPMCMkxI1wUk21JfKYVeaUuNLWG0tWlAOCwCQCcZUZUij4RaXqEir8ZnG5ASKqRSK6ZYiZtWO47RZRq + QWCSJf5JFvhKGZhmS0yeC2lF7uSXeVBe402r2LehwTAWzw9nzcIIdi6N4NFlERxaEMCzI54cG3ThzKAz + V0bceGvMhffGnHh/xI6bg1Z8OGDO7X5TPho0FplwS+z+u93avCN6f1Cf2yPGfDw0MVqQOqqTxAtfDYit + vguAvx824VtlRKIxM74ZMeVL6QeUaQPel37iWs0UrtdM5e2Gmbwlul43has1D8j6B7heP1Wda1j5J6PP + h+W4MYkPR835TI6/1TsxDPX15jncaFVAtD635FofDppJrGLK293G3Og0561OG95ss+dinfjVyj9YJuny + VLQo1pAnYsx4NMqS3aEWbAs0Z7O/KVtEuwKt2R/mwMMRzuwLcWJ3gAPbva1Z7WXBPE9Luj3NaXY1ocHd + jHpvG2r9HKkKcKI80JmSQGX+X3nvwR7khfmQHxVITlQQaWH+pIT4Sbz/OwBOpy4vl9qCAopTU8mIiCTB + P3ACADv9PwNgP3Ue4H8CYB9nF3zkGA9HZ1zsnXG2c8LDwZlQHy8KkuNpKsiktSiTzpJs6nNSSQj0xtXK + HGtTEyzMzDAxUTKAzTE0scbHL4Lqunb27nucq1ff5vbtz7h48To7djxEfUMreXnFZGfn09zcxuat29V/ + sPzu+5+58+mXnD57nvkLlxOXmK5mAFvZuajQ91/1fwLAyvK/6vftyjDQCvxVILWxLE/IFl09UzQ1DTC3 + sCc8Mp4Fi1eIH3+Vr7/7hdtqBvDzLFi0TM36zRY/UvnHwvaOHnbsekjight/DAG9b/8BCouVOYCD1LmL + /xX6/qv+/wXAynuxdxFJP/RPAKxkAjth7SD9lJOd3IMb/sFe+AUp8sDNW/ouD2u8/R0IjfYkIS2E+JRA + dW5en2BbPAMtcfY2xsHTEEdPI5y8jXD0MsbeXR9LFy0sXXWwl/XOfha4+lvjpsJfK1wDLHD3t8LNz0ot + /1UKGPYOscc32B4vOcbVwxRnN7FlwU6kiN+QI35wWmYiASEBOEh9tPP0xSM0gdicFlqG97Bk81lWbLvI + Q0/d4dmzP/Lsq39i++FL9K89SPXIZsr6VpPXPExwahreMd4EJdkRl21NXqULpXXu1DT50NAWTGN3KK2D + 0XTNS6R7PJXO8RTaxibUKv5U02ga9YPJVPXEUN0RQWtLqPTPoaxoDWN7YwgHqvx5tsSblwo8OZfpzGtJ + 9lyIteKNGFuuR9nwdoQNN8Pt+DjMls+k/CLKlk/CrXk/zJIrQWac9jPjmL8FR/0tORRkw2NiG/YEmLPJ + 35BVvjqs9ddhS4Au+4OMZLsJR4NNeTHYhGNBxhwPMuREsD4ng/V4KVCf0/L7XKApp+TbPO8gfraVLoes + 9DloYcheYwMeMjZkv4UpT9hb8rSzNS+6WHHKxYJzTqacdzDmVRt9TlnoccrWhHPujrwa6MfVlGTeKy3l + 7eoGLtQ28sbYGO9sWMPtrRv4YM0yro31caG3kbPNJbxSncpb1ZG8X+HNmwWWXMs25P1CSz4sduDDQlc+ + SLDjA7m3jxx0+dh6LnesZvGZ02y+9tPm21ix3/k2fFnlxMfN7uLvB/LOYAyXhlN4VuKr7eUhLMjypT3e + k/oYXyoi/CgOC6AoIpyCqBgKYuLJi1XmBk4hKyGNzOR0UlIV0JtBVEYG4RnphClKnYDAselZUs+zSVDA + r5LRqkgZFSot7w8pEDg5JZfEJGWqoH8HwAnJoqQ8YhOyiYnPVKFvVKycOzpNHeY+WsrY2Azi7oLg5EQ5 + T0Im8THJ6hDQqQmJKgDuaK1l0fw+xke7qa4sJCkhjjh5lrjYJKKiEoiKjleHgc4Sm1hWUUNTew8NLV1U + 1TVTWdNEXWM7zRJP/q8AuOOfGb9K2dHefxcAD9HTPfQfAFiOb+5RAbAyDLRif1ta2mR7jxzfqwJjBSY3 + 1LdTVdFAUWGZ2Oo88guyRWlk5SSQkRlFYqI/4eEuBPrZ4ONmhquFJk6GM3HWnYar7lR8DWcQbjaXWCsN + Uh20KZF6XxNqQ1OUPS3RDmoWcEOEJbVhFlSHGlPqo02RlwaFnnMpdJ8jmkmJxyzKPeZQ66lJi5cmnbJP + j58ufdJOeoIU6dAdok1XqDZ9UXqMJJoxP82KhVm2LMyzY6zQnpEyB7rLJYYQX6xU4oq8An0y83RIz9Gd + UK4eGXkGUuqTlqVkCGuRmKxLSpqJ1Alz+a7iX0Xo4+4+BTvbSThYTcLNchKh9pNI8biHirAZtCdqMpiu + w8IcPdYW6bG1XJfdFTo8UmfI0T5bTs9z4+wCT17ot+WxJgP2VGmxuWQuKwo0JObWoDtVk5KQqSR73EuC + 1wOkh8wlL1KbymRjeoucmF/hKee3pj/OhJ5wHbpCtOSZNWgL1qDBbzZlntMpcJtBgby/ArEP+aFGFMaa + kx9nSWa0OckhRsR56REpMU2ItEl/aZMBVnMIttcg0lmDaHnf8Z6zRTMl5p1Oqs90inxmUu07hwZ/uY5c + ryNoLh1+0+nymSzfQAHA01QAPC9Sk4XiB82P0Wc4TFMd5rnZ/QFalCGjPRVNodlzKp0Bc+QcE+qUc/UE + y75StvnOoNlrMk3u99Mi+3b6zaBPnmtAvmm/fNuRKEPGo4wYjzBgMFCTPr9ZqkbkPMOBsxnwmUKP+730 + uEyi13kS/Y6TGHOdxFLf+1kXMp0t4bPZHjGbndFzeFC0N3o2e2PmsD92Lg/HaXIgUUukzSMJWuyN1WR3 + xCy2hk5jU4gofDrrI6azNnoW65O02JhhxJpsY+YnSX2LnE17iDxb4D00+k+iOXgSPTH3MJw8mYXZc1kt + PvsG8dU3SrmlUJc9xTo8VmnAs03mnOx24JVhX04NSrzeF8nD3Yls7spiVW8ZS/rqWaDEWL2lbFhYx4Ft + wxx7fBVvnzvA7YuHuXP1Gb5863m+uTWR6atk/X5980V++uQlfv38jAqBv755jKun9nL88bXs3zjMisGJ + uHCspZyxthrGWusYaatnVFFHC2OdLYwrcwD3KBnAHWoG8PhgL4vnDbF68Rgbls9j24p5PLhylP2rh3ly + /Tye3jjK4fUjPLVulMfWzeORtfPYs2qcXSsXsH3VAraJtihavYjNsm7zsvlsEW2Wc21aNsamxUMqBN6w + eCIL+D8BsJIB/Ls2KpJ72TA2yKb5csxYP2uGuyRGbJXYsIlxiavbi9KoSg4lJ8ydBPGtE7wsSRI/O1mU + 4mNBup81OcEOlES4UBbtRmmUxHqhDmSK/UrxMifB1ZhoR2kfNtr4Wc7Bw2wOniIF5LqLHXMxnoWT0Swc + DGdhozcNC53JmGg/gJnYOkv96dgYz8bedA6OZnczgOU4PystQux1CHcSSTsLd55NuMs0aYcPECd1/XcA + XJdoRIfEX32pVgylWKkAeCzRnFGxPSOxRgxGG4h906UrQou2sDm0RcylM16LgVR9xjJNWJpjwdocKzbm + WrMl25bNWdasyzZnY6YxD6VLfJKix7NSf19I1uR5sW/PpWhyOG4mByKnsiv8fraH3ivlfTwcdj9PBN/P + M4EPcCx4KqciZvKKtJFXpG2ck+NPJ87hbPJsWVYA8Ky7AHg27yTM5lbCXG7FzRHN5v3I6dwIl3jsLgC+ + HHofl4Pv5VLAJC4H3cMbsnwtSOKy4Mm8GzlDzQZWjnknZDLvhU5RIfDH0TO5I+3ukyhFshw5jTsR0/gk + ejqfRstyjOwTM5WP46epAPhOygw+y5zLl/naqj7JmcPtrOl8KFIg8I3Ue7gcP4nz0aKYSdxIv5fbJdP4 + skGDb7uU6eTM+WHMku/mW/DdUhu+XevEpyvteXuhnbRVGzU5b1eVMVskNl8v7XpblSUPN9ryQqc9r0i8 + e27AiTPDnlxdm8ynj9Yxac1mfZav02PBUl2G5+nQ129AZ6cJza0S9LXZiVxpanOnucWNxjonmmscaayw + o67ImrIME3LidMiJlY4qUk8FwAkBhsT46BMt+icAthADb6pCYGW8/5QQPeL9NInxni0GfyZxPjNE04mV + yhbhNIkYt/tI8Z1JbpgOrbkODFZ4MSJBfa90ku25xjRna9OQPYfG/Nl0lmnRX6nPaJUJC5T5gMsNWVxm + yNJSQ1aUGrOq3JQ15UomsCEbxLhtKtRgZ6k2jzea8rQ837MtdjxRY4ky9++ufF125GqzM09bBcD7CsUY + luqpQ0YebzbgogTan61y4PuN9vy2zZa/7bLmvx+0EJmJTPjv3Sb8bbcx/7XLSIXCf9sl63da8NfNFvy2 + VrTcnP9aZM1f59nx5yEbfu635ttuCz5uM+PNBn3OVmlyKHca+zImsyNlMluSprEteS67U/XYl2rII2lG + HMwy4/FsU57KNuFwjj7PFupxrFKPc036vN6hzFlrzPtSOT5eZsmnqyz5aq01P2y24+dtcs+7nVEAsAqB + dzry151O/Crbvl9nw1errbgjx7wxqMuJxqkcLrmHI0X38nzxNF4sns7xosmcLJnC6YrZnG/Q4Y02AxUe + Xus04Gq7njoP8NVufa4p2ce9hlzvN+JKrx5X+3Sk1Jb1WrzZpcnb7Rq816HFzR5xuvtM+HLQnC96jPmy + XZ9vpPx+xJqfljry43o3fnnQl388Fw2nEvnvM7H89GIwXx/24dOHXfh4qxUfrRHnfZkBnyw24HPRVwsN + +Hpcn69HdPhmUItv+zX5TvRtvxbfD8g65T/1u7T4vGMun7XPkVKTP/Xo8fWAIV8PK1nAxnw8aMitgQkA + fKNXl7MNMzlcOpldWfezSBpkV/i91KkAeCZp/jPJFMeiKNmQBgkWuirdGG7yl9KT8lRTcmSbAognILAy + BLS+CoArM8ypSDelJFkBwPrkShvKFUOZEzubPDFYhakzqciaRXO+Bv1l2lKntVhTqcmDjToc6dCRhm7A + W0tN+HS9JT8+aMuf99vz98ec+ccTLvC4C/941NxjUTYAAP/0SURBVIG/7rHk120m8n1N+fMmc6l/Zvxl + jTX/tdqBX5ZL4DdqwXvdRpxv1uPJohmsjb+HXjF8DT6TqPK9h3Kf+yj3niyO23SG5DlWpemzr8yCI42W + nGgz56zYiIu9ZvJ9TbnUZchrrQacaTLk1S5brs0P4MbyaN5amcgbS2M41uPFIxUWbJN2u7vQgEcqLTlQ + bc1TVbYcL7PijGw7VW7A6XINLjRp8e6QAR8rGfNbpH095ck/jvvx9zP+cCWEf7wbzF9/B8DvSx15y5mf + rzvx8xsu/HjBhe9f9+DniwH8+kYof3sznr/fSOHvVzPg9Wz+cSqbXw9n8P6aYE622fJ4iQm7s6TdZ1my + Q5zxrZnWbE63YluWDTtz7diZbcOeXFsOFNlzWGzP0Uo7Xqyw4pgcd7xIAt1iTWkL2rwpdfzWSl2+2mPK + L0/b8esLjvx83JXfXvbj11MB/HIylB+OR/Pti2l89mwhtw9XcmV/BSc3FvLYghx2D2WzaziP7SNFbB4r + Z8O8atYvbFIzheb1VjHYUcFKcT6efnIfb1x4Vc0A/gMAX7qu6spVWVYA8PW3Vb0hmgDA13jtwgQAVoCv + ki1wUfT6pTe5IMcpQPiN67/rHXW+YGVI6QuXr/D6xUuyj+iNN0SX5VwXeO3S+bvwV0pl+T8A8GtXL/OK + AnsVAHw3+/eM7Kuu+18B8Juq/icAfoNzcvy5i69y9vVTnDr7Ai+/dISzJ5/gtZcOcvnUAd489TDvn36I + t1/YwGuPjHJySwvntjVwZXcz7zzUyvu7W3lrczU31pby0fY6fjjYxX8dHeTXI518e6CWz/aW8f6WPC4t + T+X5fnFwm/3Z0xjE3vYY9vem88hwsXyfRvYtaGHHvFY2jzaxdriW5QMVLOlR5o+sYFlbCctbCljTls/6 + jjy29Jawvb+WnUOdbBLndFX/gDjJAwx0dtPV3kVHZxdtXV20itq6umnvlsC4rYOGJiWArqW4tIyqyhra + 28XJHR9n29ZNPH5wH08ffphDB7axd+ti1i1uYelgiTjMeazuS2dtXwobBlJY35fA2p44Ng4qyyksaoim + rzCYjrxQWvJi6KrOZumw3NfKRezetoV9ex5i86YtLFm8nMG+QdoaG+hurKW/qYqhxjLm1xewoiKDNcXx + rMoKYE2qG1tT7XhY2skTmeY8nm7AU5l60g/pcjhfn0N5ujycIoFM5D1sDZvEtpBJ7AiaxK7ASTwacS9P + x8/ieJouL2XocTJDnxNZhhzPMeTFPCOeLzDguWITnhUb80y1HUeq7Xm0wppdhWZsyjdiXaEJqwpNWZwn + gU2uIQvyTVlSbCl20V4FwNsbXNnRKKU4O1sbzNlSa8i2Bukz7wLgJ7vNeardlMPNxhypN+RwlQFHJNB5 + WnREgmAFAD9dPpPnq2bwUs0sFQArQ0Bf79ThvT4Dbkm/ervXSB0SVMnQUgDwrTZtPmjWUP+wf7NFkw/b + tflMGQq6z+guADble2VOSAUCKwC4WwHAuvzaJmrRUbOAf2zW4odG6atEE+BXk68atETafCV9+tcSiH3V + Ys9Hbc681+nDtf5wXmgOYFu+I73R0nd4TZPgQIPSCFOq4u0ojbQg20+XZNcZ5PtqMl7gyT6pG4/0J7Cp + wo0NhbY8XOvGC72BvDYWyvWFUVwfD+XNsWAuDfhypMSQx8UHOir+0LkGR15vcuXlSltOlFlzWvy/kw3O + PF9rx6FKMw6Kn/VomQGHGq14sdeDs4sieWV5MkfHojjYG8oTA7E8M57Ks/NSeG40kReHY3lxIIwXu30l + wHTi2TorTjTb8XKbAydaHHmh1Ymnm53FiXXhoSpHdlY6s7XWhw3SJpfWh4ofGExluhdZiV4kxPoQGeNP + WFwYYfFRhIpClPJuFvDvAFgZCvrfAXAoqZkhZOUEkJ/nS0GuAoDtKSiworDIjHzpn4qKDVUAXCH+ZF2D + LQ3NTtTU2lNeYUl+gRHFxWaUlVlSrADgPH3KSs2oq7WlpcWVZmUe4Gpbaiqkj5d+orJsAgA3y3M21VvS + pAJgKxprLamtNKVa6ny9OOqt1ZZ0N9sw3GXPcI8No32WjA1YsGDESkpLejvMaRIft1zaQXGWBbkSgCVH + WxHgZYS7kyFOtgZYmupibmKAlYUFlhbWWFvZY29jj4OUdubW2JiaY2VqgoeLE9FhQeRlJNHZWMlisQlL + 53WzZKSD0U4FAJfT11RCX2MJQ02ljLSUybpihlsmALACV1cOKvP/NqsAeP14E+vFRq4bb2TV8AQEVrJ/ + l/crEFiZm1ds56Juti7qZf28DjlWydBtmAj220oZFylwVskOXj2kzOHbrALd5b11LOmoZNFdADzWVMR8 + uQ8FAi+R/dUsXnU4aAUAK+C1hbWjLXL+RpbIPS6SbQs7FQhcyfz2MsZaS5jXUiTHF7NIrrm0s5wVPdWs + 6K6aAMCiFT1VKgRW5hFWMn2VjN/NCzpU+KuUG8c71EzjtcPNrBpoVOchVsDv71o90Cz3oWQLKwC4l21L + +tiytI9NS3vYoALgTvUfu1YvbJf3Xc9YTxkddenUlcdRUxpDTUkMjVXxdLSkMNSfxchIpiiFQWk/ndJH + tXQHUdfuR0WjuwqBs6tsSCs3J10CvXTxq5QyVepSUrU5cdJGIyrMCJE6GFxmSpDEQkFlZgTK/kFSlxUF + Kr9F/nfld1f+ZSYEiAIrTOQ4Y0IqFRkRKsGlovBqE7UMlnVBEluFStwVLLYgqFx+y/4BpXK81P8AJWO4 + wISQXFMi8kyJzbUgPtuS3FJnGluC6eqKpKM9dAIAZ5sRnapPZLo+4ZlGREicE5FlLqUlEZlWhGfYEJZp + Q7j4amGyHJxmS2i2C4ll/hS3xNIsfeHAWA4LlxSwdn0JO7ZW8PCucp7YVcIzuwp5bksWL66O46Vl4by6 + JITLS4N5e1kg7y315f2F7tyc78KtMVtuS5u7PWjG7SETPlQ0aMwHYr8/GJB+YFRihFEz7oya8umwEZ9L + vPDloAF/GhRbLfrmLgD+5m4W8Ley71fDsm+vHN+uyY36GaLpE/C3YTqXa+7nUvV9anmtYarYeE0+kmt9 + Jsd9Ps9CSnOJSYx4R+KW69IfXW6ayZVm6Ze6tHlX9ntPmaJH+qTr4stf7TTlhvjfVyWuPV9rzYkCUw7G + aPBomKb0v/o8EmHCQ+GWbA+xZHOgBRsCLNgUKP5ukC0PhjmwJ9yZXcFObPV3YIO3Dcs8LRnysKTTw5xm + NzPqPSyo9banxs+JSn8XygJdKAl0k1jIQwXAuaE+5EYGSEwUQGq4P8kKAI4Oo1Bs8e8AuK6ggNKMDLJj + YkgKCCJcyf51dCHE1XliLmB3T0I8vFQAHPCfANjtnwDYW45xd3D6AwC72TsS4O5KVmwkzcVZ9FTlM1Bd + RFN+hgqiveyssVfsork5pmIHjUwUAGyFu1cQJaV17Nixl8sXr/PRh59x7eo7HD70LKtXrWNsZAFDAyOs + XrmGw0ee4b33b/HTT7/x2edfc+rMKyxQAHBCOnYO7ljaOmNj7/5vsrJVhoG+q38BwOYK/P1/AMAm5vZq + FvDvQ0P/Ln0DcxUAm5jaEBQSJXZhPmdfu8Q33/+qZiW/dOqcOt9vn9xzQ0MLza2dLFiwlIOPH5Z7/5Af + f/4zH935XAXAJWVVePgETsBe+7v6vwGAVf1PAGzjYCfXsMXJ1QFXT8e7cpDtltg4msg+ZjhKvfMOtMcv + 2BEPFdxa4uJjip2bPpZO2iItrJ1FLjpYOmpibD8LY7s5WDprY+thhKO3Gc5+lrjeBcBuyrKvOa5+ZhPy + tZDzmU9IWfYyw8HNCFtHHXkfOvj52REfH0h6ZiwJKTF4+nlh4eSImZMrjgFRJJd0MbLmMLsOv8f+5+7w + 9LmfOHntrzzz+hdseOJV2pc/Su3oTmpHtlHWuZTIzEJ8YgIJTnAiRmxYdpkzJeKPKQC4uTOYzuFoeucn + 0L8ghb4FaXSNJ9Mxlky7qFP8qLaxVFpGk6nrj6axO4KejjAWtIWxtjWUBxuCeLzSlxeKPTmT787r6U5c + jrfherQ5N6IteSfKkvcjLLkdbsUnYZZ8Jvo8zIo7IRa8F2TKG37GnPY25ri8i+f9LHg6yIbHAyUGVuyE + vyGrxa9cF6gvfr0hD4cYcSjUhOfDzDkeYc6xMBORESciDHk5Qs4jtuaVKAvOyfYTfiYccdTlgJUWj1jr + 8qCFLltN5TzmEnvbmLLPUWIJFyuedjHnRWczTjkZ86qDIa/Z6HLWTJtXrA25IHXkkr8Pbycl8EF+Ae8W + V3CpvJprQ0O8t2Y5dzat5qPVS7g22M751kpersji5YJILhV4826Zq8iGt0tM+UDi91sV9rxX5Mib8Ra8 + 7anPBw6a3LSZxW3r6dxxncWXweKLJxvzVZEln4ov92GzIx90evN2bzBv9MdyvDWSfaX+rEz3pDfSkaZQ + Z6rFFpYHeFAREkhZWDhlEVGURCWQH5VIdlQSabFJJCYkE5GUTGhKCiFpqYSkpxGWli5+aRrhiSlExCUT + naQMB51FQmoO8anZJCTL8l3FJ0opio9PJz4hkwQF4CbJfiIF/CpSoW/MBPQNi5DrRaUSEZ2qAuBIWRd1 + dzk+LpPYWFmOTCAmUmxxXBzFedm0N1czf7Sb4X5leOUs2R5BRFikKIYQsTeRUfFyH2nqP5ZU1zbS0TNA + Z++QxLJ9tLT30NrZR3tXv6o2WW7r6KX9rto6emhvU8DvROavAn17e4alHFSXFSlweGIuYDlXi6hZGUp6 + Ytjodomfu+Q63XLuPrmmUipzBjc2tFOjZCCXlYkfUSr3VUxZeTZFRYnk5UWTkR4iz+dFhL8d3jY6uJnM + xt1gGl56UwgymkGctSYpDjpkuYgvH2hNTbgDjVHONETaUxdhQ630mdWhFlSGmFHorU2ehwa5ohy3ueS6 + ziTPZQaFLrMpd51LnZsGzR7atHtp0+GtQ7uvFu0BUgbr0KZA4Ehd+mKNGEkyZzzLhgW5tozm2zJYYktH + qSX1UkfLigwlDtEjK0+b9BwtUnM0ScvRFulMlBk6JKdqkZSiQ3q6KWlpllInzAgL08XVbTI2VpOkr5sA + wIG2k4h1nUR+wP3URc+kK2kuoxlarCjQYWOZLtvKtHmwSo8n2y14cdCZk2PuPNdvz8FWMx6qM2BLpR4r + SnSZl6dDV4oWRYHTJLZ8gGSPaWQEaJIjz1QscWhzqgUDuRKTplrRE2dKR7iuPLMWnaFa6nPX+82h0HUa + 2fKucjw1yQsypEDsRkGsJYUJVuTEWZEWZka8jwGRYttDHPXwl+/ibzmXQBsNQh0UMDWH2LsQOMF7Nmm+ + syn2nyP+iAZNAdpyHR06gzXpUTJ3/afRFzCVwaDpKgAejdBQh4BeGKfPSIQWPf4zJzJ/PR+g0UvRFJok + lu4MnKueQ1WInCtEi+4gDdp8ZX/Zp9ljMq3KfioAnitSrqdJf6iOOgT0WKiumgU8LOsVzQ/XYkzOMyzX + 6/e6jz63CQDc4ziRBbzA8x5WyTvdEDZrAgJHzmZH5Bx2S6mA4D0xc9kbr8WjSXo8lmrAwTQjWTbgwRhN + tobPZFPIDNZLuTpiJquiZ7E6UZs1ss+ydCOGYjXlG0ynIeAB6vzvpdZ3EnUBk2iLkHtIeEDqwRwWSfy6 + osiYNeKvb5LYf0+lCQfrTHmm1YYTPc68OhbA6dFwjvRFsqczjtUtyRKLZTMksdSgaLgtj1Uj5Ty6dZDT + Rzby0ZWn+erd43x362V+vXOOXz8/x8+fnOH72yf4/qMTKvz98xdn+eHjk9y5fkSO2cBj20dZO6+e4eZ8 + hhuVfwoul1ithnltDYy2NzLSKtvamhhpb1IB8MK+LpYM97FkrF/i1hFWLJrPumXz2agAYDUDeJh9Kwd5 + Yt0oRzaMcHj9ME+tG+bRNaPsXTnKLtlnx/Jxtq2Yz9aV89m0Yly0gM0rF7J91WK2rljIFtm2RdZvXqJk + AQ+pAHjDIonjlLl/5beiieURVQoA3jA+wNqRfokN+1g31ifxcQ+rBjtYIbZ05WAbi7vq6KvMpTk/kaq0 + CPKjFX/Zg7xId/Ii3MmXsiDKg5I4X6qTA6hNCaI2NYiqRD9KY30pkH0zAx1I8bYm1s2CCBeJwZxMCXEy + IVj6zUAHUwLFbwpwMMHX3gQvG0NcLLSwNZ6FpcEMrAxmqQDYznQ2jgosVoeAljZmpU2ovS7h4k+FOSoZ + 9zMId5lKhNsDaqa9AoCLojSplrbTlmyqtvFR8V3G06yZn2LFWIIZI3HGDEQb0BOhQ0eYFs0hs2gUtURJ + e0pUMoENmZ9pxopsa9aI1qVbszbNgtVpZmxIMeKhJH2eTNDj2XhNXkzQ4IUkLZ5P0uTp2NkcjJjO7rAp + 7Ah9gJ1h97FXyseCJ3M4eBovRMzipVgNzibrcTZFnzOpOpyW486kyLqk2byeMFsFwG8mzuFd0YeJGioA + vhk7S53j983wyVwPncy1sMlcDrmfy0H3cVHayKXAe7gUdA+Xpd28IboeOIXrQdO4ETKFG0EP8G7IZD4I + m87HUbMmJG3wdtgMbsn2W7LttgKHI5UhohVIPIWP4qZxO2Eqn6TO5Aux51+Jff+qUJ8vCrX5NF+Dj3Pm + qPMBv5n0TwD8Wswk3sq+n48qxCdp0ea7PhN+lJjwh4U2fLvImm9WOPDVejfurHfn+jI3dQSHh5vN2VRt + xkqJ8ZeVWLCuxo4djY483ubI0T5Xnu9z4+iQH2fXZPDOI81MWr/dmJUbDFmwXJ//D21/GadXscRto8Hj + ybi7u7vPZNzd3d3dZ+LuLkhwSCBoCARCSCBKQoggwd3dN9dba01gs/ezn/ec8+F8+P963culu7pqrqnu + wTFtenrlI7caUlNnQHmVMWVVVlTVOdLQ6EJjvQvNCgSukg6yxJbyLHOyFmiTHimdVITuFAAONCDGT19k + 9G8AHPkXADYjTZzE5KD/BYBnqP9tEOF0nRj4m8gK0aAswZTOQmcGKjwYrHKnp1Q6yXxDmrKlo5WXVZ8z + k47S+fRJJzVYbshImRFjJQYsLDJgkWhJkRHLi41ZUWrEqlJ9Vhdqsa5gHttKJCCuN54CwK0OPFBrpQJg + Bf5uzdRku3S6fwHge0p0uF/2P1ivxxkFVq524ttNjvy83Z4/dtv+vwBgY1k248/dFvy+1YJf1pvx00pT + flsk+09a8/uoLb8M2vBNjwUftZvxWrM4udU6PJY/k7sybmRH8vVsESO9PWkOu6Wzv10q9t5kXe5Ol04g + w5D92cY8lmfA0+VGHG8y5UKfFW+O2fPuEns+XmnPp6vt+Hy9LV9vtOP7rQ78uMPx3wB4pzM/73LmVym/ + 32DHF6ut+GCpGVeGDTnRocXB6uk8WHAdD+ZM46Gs6zmQcyOPZl/Hk7k3cLh4Bser53O2WZdXOgy50GGg + 6tVuQy71GnC5z4gr/Ua8NmTCpUF9Lg3pcmlYmytDWlwZ0OSNXk2u9mjwdp8mH/Ub8JXs943s/023MnSz + Id+NWPLTcid+2OLJL3cF8+fBWDiWzJ8vp/P7uTR+fjGOL58M4qN73Phwtx0fbbfmo00WfLzOjM/XmPOV + ouUmfDauw6eDGnwu+nJQi6+UzOC+KQD8cds8PmyexyftmnzeI/fQb8zXoxZ8NW7Oh8MmvD1oOAWAu8SY + 1M5kX+EN7Eq/gSUx0+iLEmdBDJKSAfwXAC5KNqQhX5y4el8m28PpqfKlIs2CbGkbaWHzyJT2kR2t8zcA + Vub+LU0xVrOEc+OMyIk1ICdOj2wxZNlxc8kTw1UqnXN9jjgXRTqMleqwrFSDTRXzubdR6mKXJieHdXl9 + mQkfb7bia2Uo79sc+XWvM3/c6cpvtzvJ97Xh+y3m8h6t+FnRRmupgw78tMpJjIct7/Sbc65Vn8PVGuxJ + u5FFYdPoDRTnQFTrfx1VPtdR4X49te43iGMjTobUv3tLxUlssOSFdgvO91vz2rANr8l5LnYbca7NgFNS + h1/useP1RUFcXRXDW2uTuLwynlOjwTzR5MQ90hYfKDfnoUprkRX7xNl9NH9q6Nenxck8XDqPFxs0uDSg + zzuLjfhCnu33Bz1UAMwR0ctSH64B4J+uevPD6x58f8GZb8848O1LUh514dsjsu55X348FsRPL4Txy7Eo + fn0+nj+eS+OPpzL46s4Ezi/y5fF6a+7KM2FHuinbMqzZkmHLpgw7Nmc6sLvAjduK3dmd68itufbcI8Hi + Q+VTAPjJMiueFuP6fIU5L9VIu+sy5+2FFnwm9fDH+xz47Ul5/8+48ctzPvx+NJhfXgji5yOh/PBsNN8+ + k84Xh0p450A5Z28v4plNeTy4NIfbRjPYPpDOloEs1g/lixNRypqJalZN1DPeU0Ffawlj/Y3s3raawwcf + 4+zJU5w7c20e4GsA+Nw/APD5C5c59+plFQCfevkCL506p875+5ICgM8qAPgSJ0+/yskzyjDRU+B3Slem + ALCSPXxemTf4HKcVnTvHqXNnOfnyaV48fZLjqk5w/IyU/wWAlXl+j8l6FQCfOsHzJ6cAsLL+xf8JgBXg + q8z9+98A+IycR5k7+AWOvXiY548+xrPPPMjzB+/ixUN38vKzd3D5+Tt4/dmdXHliLSfvGuSZDTUcWV/O + yc0VvLq9mte213JxfQnnV+RwZW0Bn+yu4ocHWvjuvnq+2Fsm9qOA1zdmcHZ5Es8OR/FITxgH+mI5MJTG + Q6N57J8o54nVHTy+YZBHNo2zb/MEezcMsWtNP9tX9rNtaQ9rB+pY21PJht5SNvYWs3Wwgtsm27hj8SC7 + FomjuXQJm5YuZ9nEQhaOL2TRosUsXLKEsUWLGF04yejEOIPDw9LvKsFyO9XVVdLPyncXx3bH9i3cc/ft + PPDA7dy1dwvbNoyzelELy0YqWDyQz4qBbNYNpLFpIJlNg4mieDYOxIkSVRi8vDmakcoIeoojaMqPpC4/ + mo7qPAbaa1kyPsStO7dzz513snv7DjasXMXyiVGWD/WIs9rB6sEmNvZUsb0xl+1l8WzPD2Z7phu3ivOn + jERxvzhbDyZrsy9Fk31pGuzL1GJfhgQqybPVuX93iD3ZFTqN3UHT2CO6M+w69sfN4olUbZ7K0ONgpgFP + ZBuK9Hk814hHpF9/WPrrAxWWPNbgxKPib9xdZcs2aaNrsvVYmWPAykJTCUYtWJhvrALghfnmrCixZkOl + owqAdzW6/RsA1xnJshF7Oyy4t8uCfd0WPCzlI23mPNJowiM10n+KHq025hEJgPeLfX2oZDZPVMzmcO1c + nq+dLfZMQ/oAfV7vNeJqn/QLYudUANypz1vtUwD4dQUAt2jyliy/0677fwDgb4dN+W5Q+jgVAOvxfYfe + NQCsxw9NunzbpH0NAGtPZf2q8FeR9FWNBnzZas1nbU683e7GlS5/zvaF80RLANuLneiL1qdIHPQSCTTb + U+0ZLvSmLcWe8hA9cpW5qSIM2NkSKXU5lQd6o9hR7sjGbCPuqbLjmW4fXur35tyQNxeGvbky6iN9tRcv + 1FtwROzasTpLzjQ78EqrC0dLTHmm0JCX6mx5ocGOp2usebTCmH2letxXqsvDdeY82enE0wO+PD8ZzWMD + YdzTFsB9nWE8MpzAo0NxPNIfxWPdoTzR6csTrW48WmvDI3KOp2rNOdxoxeEmuSdlKOkmZ/bVOXFnpT17 + Kp3YVevN1oYgVtQGM1gaQFWqu/SR7iQs8CQqypfwmBDC4iJUAKwoTAXA0f8nAE5WAHAEsSnhpKSFkJEV + QG72PwGwAndNyM3Tl1LvbwBc12hPW7sH7W1e1NbYkyv1MD/PiOJic0qkPhbk6FNeYk5TvROdsk+7PFuT + 7FdTbkFlsQnVZaY0yzk65Bu2NNrQLP3OFAC2oEaev1LqfE2pMc3VZnS1WDPcbcdIrzUj/WaMSh0aH5Ry + 0Jx+qb+t9WY0VdvQUu1GbYkEjqnOhPqZ4u1ijJsEfY7WJthameFgZ4ednQP2ChxxcMHFzlm22anZvwoA + dnOwJzzQn8yUeNobK5kc7GDxaBeTA22MdNQy2FxJf1OZCoJHWioYVYaEbprKBF7UUcGKfgX+NrJ+tIW1 + 482iRtZONLJmvIE1IwoAbpCgd2r45xVKRuxIG1sUGLq4l40T3RIgt7JqsIXlfQ0qUFbgrAKAlUzdZV1K + 1nC9mkm7oreeZZ3VLGouY6y5iOH6fEYb8lWAq2TtrlTm7e2uYWVvrQps18k9rR5qlOPrWNJd9R8AWMky + VrONGxUAXMzStnJWdUsf21fLyq5quW4VS2W/JZ1lrFDmAha7rgJgJetXAcCLOtRygwKA5bkVUK3AbQVS + /y8AvGmyU33mrQoAFm1a2suGJV2sl/OsWzgFgFdOtLBkuF6FwN2N2TRXJVNXGk99eRwNtfJtWhLp6Ulh + QGz8kLThvqEEOvsX0NIdTl2rP2UNnuTWOJIuvlRGjQ2ZNbZkShtNl7aVUmdFQo0lC6rNCZd6HCYKUVRh + RmClCYFVplKKyo2vaQr2BlyTv1JWGMk+xgRXGhImdjKs2pDwWiPCa5TSWC1Dqg0IrtIntFKfkHJZln2D + pV4HSVwSWKZkA8tykTEhecZE5psSm29BfK4FOaVONDQH0ik2or09lIoqN9KUDOEUPaLSDVmQbUJMniXR + eTZE59tJaUdUjj0LxB+LznNigSgyx4XkimAqezMYW9PI1ttHuHffEh57fAVPHlzKU49PcOTxYY492sML + DzRxeHcxhzemcWxDAi+LLm2M47W1Eby+MpDXl3jy5kJ33pp05O1RG65Ku3tTbP4bA2L7lUxbiVPeVsDv + uAXvj1nygcQLH42Y8rHyj6OiT8Rn/UwBwINi++X3F4PGfCWxhDLSzhdy3Idi/9+SeOK11vlcbp7LxabZ + nKufzqnqGzhdfT1n627ileZZvN6txTsDhnw4IeeftOR9uc5ViY8utGtwunE2L9XP4lTTPM60aXC+W5cL + Pfq80mXA2U4DznSYyDpbTrXYcKRS/Ow0HW4LncWtgfOlD9ZhT7D0icFmbAqyYH2ABWsDrEQ2rA8U3zfI + ni0hDmwMdGCtjz3LPWwYd7Okx92SNg8rGkW1njZUeTtR4edCmf8U/C1UAHDgFADODvEhK9yPNFGyAoBF + mTERFIgd/icALsvMlJgnluSgKQAc7OBEkJOjyJkwdy9CPbynALCX11QWsDIXsJsHgaIAJQtYBcCu/wGA + 3R3lHJ4eZMVG0VyUxWBtCSN1ZTTlppEaFoCfoy1OVlZYmVlgbmaJiaklxmbWuLr5i00vZdPGneJTX+DT + D7/kjStvc+L4aQ4fepbHHnmc/Q/s54nHnuTs2XN8+umX/PLzH3z2+dc899xfADgVW2W+XxsnbBXwa/cP + 2br9LQUAW1k7Y2nlhKVS/gWD/6H/yBC2cJhar6y7JiNjS7R1jFQA7OsfSntnH0eOnuC7H37j629+4vKV + N3nm6SPs2XMHq1etZ+PGbey9415eeOGE3PtX/PDTb7z1zgcqAC6vrMVLyQC2cxG5/v8PADv+nwDY0cVJ + tjuqANjO0QZrOzNVNg7mWNubSmmsQmBbJ2Oc3M1x9bLA2dMMZ2/p3zxkm4s+5vZaGNvMwVQBvo5aKgw2 + c9TAzEEDKxcdbNwNcfAyxUkBvgoA9rfE1c8cZx9TkYnIWD2fo6cJ9u5GWDvpYWmvjZWDjtyXDo5O+vj4 + iP2JlvqcEkl0fASu3m6Y2NliJP2rjW8IiaWtLN75CPuOfchT537g8Ku/cuS1n3n07AdsPnCcztX30bTo + TloW3kF510picsoIFH8lON6V8EQrknKtyRO/rKLei+bOILpGFtA3EUfvWALdovbhOFoHFcXSJn5Uq/hT + zbJc1x1GY3sQva3BLGoJYn1TILfW+nF/qQdP5DnzfJYjp8UnfDXOmtcXWPBapBlXwk14PdSEt0JNeTfE + hPdE7webcjXQhIt+hpzyNuBZL/HJ5J095iv+coA194n+ygBe46fPhmBD8e2NuTNE/L8wE54IN+dQlDlP + RZiKjDkcY8YL8VacSLLjjPgnxxZY81SgGfc763KbjQa7bLXZaKHFGks9NtiZstnJjJ0u5tzuYsF9zuKX + OxpxyEGfF+x0OW6pxXGT+Zw01+esvTXnvMQHjorkSmISl9KyOFdQzKXeHl5fNM47yxby7uJRLnY3crqu + iKMFyTyXHsiL6Y5cLLLnjUpbXq8SW1pnwxvV8l6K5f7iTTjnrc0l5/lcsZ/FVceZvOszj08W6PBppgkf + l1nynvjBV1tseaPNlcudPrwiPuzRpiDuF197U6Izw2JL23wsqfewpsbTnvoAL+qCA6gJCaUyNJLC4ChS + /cKJ9Q9nQVgkwZHRBIjtC05NITwznajMbEKTUvALX4BXQCgBoQsIiYwjIjqR8AXxhMlyqOivMjwinohI + UVSC+L9JREanqAqX5dCIBILCZT8pQ2Q/pYxNzCIxNZe4+ExCZVtwSAzBwTGEhsQSEhxNaJDcU0AQMZFR + fwPgsaEOuiVGzEiNJdDPBz9vP/zETvj6BhMWHkN0bLI6ukBdQwvd/cOMTCxmYvEyRsYXMTAyKeuGVDDc + 2tlDS2sPrW1Tam6ZGtJZGdq5u3OQgf5R+vtG1KGglWGhuzqVDGA5prlDVXPTVKnA346OHnq7B+jrG6Sv + d0COmyp7uuRabb3q3MA1NTVyjXo6OhtoaCqhvCJV4uk06kSlBVGkL/Ag1NUIX4v5+BrNwt/gFqLM55Ih + tqTAx4xiPwXy2lMZ7kSVqCzEhtJgS5EFJUHm0t+ZkuOlS6aHFhnuGqS7zifdeTYZTrPIcphNgdNcKlw0 + qHXTpsFdS1W953zqfbRUQNkYrE1ruC4dUQb0xZkykm7NaKY1A9lWdOSYUZ9rTEWuxHQSf+Tm65CRo0lq + liZJmfNJTtcUaUwpVUvskTaJidokJxuSmmJOQpyZfFNtXF1uxMZyGg4id+tpBNhNI9J5Guk+0ygLu5mm + 2Nn0pc5jca60wSJpi0UabC3R5NZqfe5vtWR/tz0Pie5ts+K2JnO21pqqo2mOyX11JOpQ5D+bNNcZpHnM + JdNXm9xAXQpCdCkP06cxxoT2eHPaY0xpCdOjKUibdolB2yMNqA3UIsdlJmlOc8j01CFf7EZpgiP5cTYU + JNiQE29DeoT4hn7iJ3qIX+msT6CtDv4qoNIkyE6DEPv5RMr7jZF3GuetQaqvBiWB2tQGyPuVa7UEadER + pKmC2f6QuQyFzFH/dqkA4MGweYyEazAZq8dQhBZdCgD2+i8A7D1DBb9KpnZnqA5dYco8xrIs550CwDNU + +NvqPUva/Cw6/JQ5guepw0Y3e8o291vo8JhJf4AGI3LcmHzrhZG6jIdpMRI4lwG5jgqAnaYAcL+Uo+7T + WBEwg7Vhc9kg2qQodA5bw2ar2hY+h13RmtyeoMvdKUbcm27BPalm3BpvwLZIDTbKc60Nn8fKiHmsiJ7P + CtlveZIhY/F6dIbPpc7vFir9bqI64CZqAm8Q23QdTZHX05lwC/1SD4YytRmXGHapxKrrJVbdI3HD3crU + mK12PNHtzNGxQJ4bi2S/xO+7O2JY2hBHZ0UcjWWpEodm0duQwbK+Iu7bPsy55+7gkyuH+Oado/z44XF+ + +/QUv312gp8+PMb37z3Ld+8d5uePjvLDB8/x8aUDnDu8m4dum5D4qImJjgL668Rvqy9ktFmJ12pZ2NnM + RFerxKANEo/W0tdYw6AsKxnAS4b6WTE5wuqlC1m3fDFrl02wbvEwmxcPsF3izD0Sa92zso8HVvWyb00/ + 963u59bFPWwZ62T9WA/rxvokbh1kzeQgS0e6JQ7rZo0CcpeOs3ZyiFXjypzC/RLT9rBypItVYx2y3Hkt + 63cKAivlPzOAlXOuHu6VGLRHym6JcTslRmyXOLeVFYNtEo/W01OZQ1txOs2FqTTkxlOXHU199gLqMqOo + yxJJqfxuyo2hNU/6+4J4VS35iTTmxFKWGExxTAAF0QHkxYjvuiCAzCg/0sN9SQnxFl/XV5b9SFF8cFmO + 9nfGX/lHOulL7Uzni+Zhbz4PF0sNXC3n422jTZCtHhFOBkS5KhnAc0UziXCbwQLP6ST4zVDnAM6PmE9Z + lDZNCYb0JFswlmnH0hwnFmfYMZlkyWiC2dTc3wvETkRo0xwqdi90Lg1SL5titKS+6TGYbMyidCuWpVqz + XM6xIsmUVUkmbEg05PZ4ffbH6vJEjCaHYjV5SoHAcRo8tkCDByPmcLu0hV1hM9gZejN7Qm/h7pAZ7IuY + y+Oy79PJ+hxJN+FIhinPpokPk6zDc8laPJ84n+PxczkVN5tXE+bxeoLGFACOk+WYWVz+CwCHTb8GgG+a + AsCB13P6mk75TeOk2M4X3a/nuNsNnPS8nvP+N3A5SAHAs3g7cg5vy/29FTKT1wNv4TX/m3gt4EbeDLmF + t8Ony/YpAPxW9Azejr1FBcCf5mrzRZEBX5ca83mpIZ8V6/NBvjZvZ8/hQqLEgvHTOBU7jRNx07iUcxPv + VIlP0qrLVwNmfDNhxVeLbfhsiQ0fLrfnndWuvLHBhzOrfDg04cntHQ6sqLRgpNCc4SJrltW4sbbela31 + 9uxpcuTOdlfu7PHnwPJ0jt/WxLSNO81ZudGEyeUGDIyJ0evWp6nJgLJKMdKFOuQUGlJUZkVVtQP1dU5/ + A+D6Yhsqciyk8mlJwKf5NwBODDIgzt+AeH9jWTaVbRZi2M1R5wEWpYnzmByk/28A7DNXKpkyBLQyrMMM + 6ayuJ9FnOvlRetRKB9ld6kJfuajCkZ5S6SjlxTXnzqM2c4Y0lOm0l8yjp0yHvlI9Bor15MH1GJMOdFw0 + WaDPwgIFBOuzrEiXpfnzWZU/m80l87mj1oh9LdYcaLXngTpr7ig1YUeODlsyNP4GwHsLxegWa3N3wVwe + q9KaygBe6cTXG+z5castv+205rddFvy6U4G+yhDQhv8AwEaybMKfu835fasZv6w35qflRvy80ITfJs34 + Y8ya34es+aHfgs86zXi7zZjzDfoqBNuXN51b025gW+KN7Eyawe7k+dyWNI/bpPLemarN/Rn6HMg34akS + E15qtOLVXnveXeTK56u9+XajB99vdOO7jc58v8WRH7c58pMCf3c6qQD4p11K9q8Tv0j5y3Ynvllrw8fL + LHlzxIDTbfN4vm4Oj5dP54H863kg+zr2ZVzHgazreTRzGk9mX8/houkcr5rD2SYdLnQYcqnLkMvdRlzp + MeL1PkPeGDDmzUEjro6a8Oao/J7QU4dqflvRuDbvjWnz/rAGH45o8sWIHt/LdX8c0OfHHl2+7RQNmvDj + cgd+2OLBL/eG8OfT8fzrpVS4kgvvFPPnG7n8dDqerw6F8MV+b76434Mv7nLms9sc+OpWR76/1Ynvttvz + +SoTPl2kxxcTOnwzrsfXw/p8Nag3BYCb5/Jh/Vw+bdPkyx5Dvh0w5ftxa76dtObTMXPeVYbQvgaAn6uZ + wf6iG9mdeQMr4q9nJG4mrQvmUiwGLj1wNpmR89V5fOskkOuv82G8LZzuSh8q0izJjtIhKWiu1HkNdTlf + nA8l67c4SZ/iRCMKRXnxxuTGmaggODtGm6yYeeSJsSpJm091piatOVoMFGgxUTCf5QWz2F05m30Ns3mm + Yy6nh7W5ukLq5FoLvthsyzfbHVS4/8MOJ35Q5nvebCPv0Y6fRD9vduCXDS58s8yBD0asJJgx5ni9Ng8X + zWSTGJzx4GniLIljEjqN5uDrqfO5jhpxVupcpjEccLMEO5o8WGzK4TozTrSZqROKvztqy9sD5rzZbcjF + dgPOt0h96LGTuhjEh6ti+Gh9Eu+uTeLK4iiOdXvxeLUVT9ZY83iltLsSM+7L1OW+VE0eEifksXxNniia + LfVvHq/06fLOYlO+2GrD7w96wlPXAPDZYP68FHQNAPvy0xue/KAA4JOOfPeCM98948r3T3nwwyEffjrk + zw9PBvLjwRB+eiKKX55I4MeHknhnUygv9Dmyr0ycqEwjtotDtUUBvxkObMxyZmuuO7dXBHJnpT+3Fbqz + J9+Ju68B4MfKbVUA/GylBLhiUM+Lk/TmsAOfr3Xhp72u/PGwm9RXT/71nDd/HA3kzxfD+P3FUP44HsZv + x2L5+Vg2P7xQyUcHK7lwTzEv7CzisbUF3LM4h13D6WwaSGdNf5Y4DvmsHC1l5XgNC/sr6Wstpqe1nJVL + htl//928ePQFzpw8y/mzF/4NgF9WILACgC9y7hoAVuYBVoZ7PiHb/9Kps5dUnTxzUdUUAL7yD01lD595 + 5QKnz5/n9CtKlvD5awD4jDrnrwJ8j50+oYLefwPgKanwV7a9IHr+xIs8/5JISgUWvyTHK/D3fwHgKQh8 + 8RoAPq/ue/zMCY6fep5jxw9x9PkDPHfoXo48divHHt/Fmad2cenwTi4f3MCVR5dz+s5eDq8r59lV+Rxf + k8/L64t4VfTKymxOTSRybpF8+425fHlbOV/cXsInu3J4b0sGr69L4tzSeF4YjeKZoUieGorn4Ggaj47m + 8PBECU+ubuXQ5iGe3rWYJ29dwT1bJti9foRtq4fYvLSXlcockD1VrOkpZW1PMZuHqrhtaRe3LxtW5wHZ + tGiSdQsXs2RsQgXAS5csYfGyZYwuWsjw5DjDoyP0Dw3S29tDe3ubBKwVNDXId58YZvfOLdxxxw7uuH0T + WzcvYtlkC6NyjfGefCZ7s1jSk8bK7gTWdcewuiuKNd2RrOoMZ2lLKAvrgxirDmKgPISuwjDq80IpzwyR + PjuG2tIM2hoqWLtiCXfs2cXurVvYuHI5qxeOslKc1lV9LVIP69ncXc4ucfD3lC7g1oIAbs12Zm+KGfck + 6vOAOGj7EuayL3GOaBb3J88WzeE+KffG3sQdUTewVwKNO0KvE03jrojreCBuFo9I/6WA38dzDHksx4hH + JLA8kGfA/nxDHlQAcLUNT7a68USbB/fVOrBNyfzN0GVZph6risxYVWbNogIzJvPMGMsxYVG+OWtKbdle + 9z8AcL0ht7WacneHOfu6rXm014bHu8T+SKD7eIMZB2W/J8SePVZjyENlYodK5vBkxRyerZ3LC3VzOdOi + JX2bAW/2GvOWCoCN/wbAb7fp8qZsf00FwMo8wDq8067Hh136KgD+XPZXAPD3w+b8IH3at70G0r/p8V2H + 9HnizH2vAOBGXb5p0OYrNfNXWwW/nypq1OITBQA3GfJFux0ftzvzpryTCx0+nOwNZX+jN+tyreiK0KQm + YDYt0co/vXmwtjZEAjrxzcQXqwySIDjZnAcHEjk4kSxBfQi3if3akqXNA1UWHOl046UuJ17uceDVfifp + q914a8SNS72OXOyy41KnPVc6lcwHJ06UGnFUfKGz9Va81CD2r8aMJ8oNeKhUm32lWhyoNeFgqy0HO1x4 + ZiCYA51+3N3kxf0dQTw6EMOjEjwe6A7m4XY/Hm1x49EGBx6pNJM+QJ8nKg14Ro4/rJy3xY5DzY4cqHfg + vmp77qxx4o56b3Y2BbCmNoCREh9qU92kr3QhaYE70VE+RMaEEB4XoWYBh8VHEZGwgLDEWBUAK/oLAIck + RxGeHKkC4OS0ENIzA8jO9vkHALYmN8+EnFw9snO0KRSnXJkDuLbBjq5OL3q6/WmodSQ3S588qbvFShaw + ko2ba0BVmSUdTW4MdPnT1+lDa70T9RVWVIt/1iB9Xk+nO4N9XnS1KxDYlmYJsuurzamR81cVG1FbbkRL + rSldLRYMSz0d6RUHvt+Y0QFDkRFjg2YM9ct52q3pEwd+uCuQ7qYQyvO8iQy0wN/dDC9nC9wdrXBxsMXd + xRVXV3fc3LzwVOTigZujM462Ntiam+Nia0ewjzdpCTG0NVYyNtDOIglYx3rbGOlsYLitjuHWKkbaqiUw + r2a8vUqFvyoA7qxUM2zXjTazYaydNWNNooYpKSB4pEmdg1fJ/l2sgNXeenW+qE0TXWxe2MvG8S7WDLfL + ujbp55pZ0l0t56xQh2tWIPCitkoWd1SxrKuG5d11LOsUW9hSzkhTIQN1eQzWZasAeFVPJWv7a1U7tUbu + Z+2wSMk+vjbP8GI5n3Kvi5R5hKVUsozVDGIF/rZXsLq7lnV99XIOOaa7Rq5TxZK2crl2KcsVey52fYM8 + 46aF7apUACylAoDVYablOsoz/hP+ruitUwHwhuFWNsrzblrYzebFvao2Lullw+Iu6Qs6WDspzz7Zqmrl + uPIPPfVM9lXR35JPe23mFAiujJM6Ek1LUzxdXcn0D6QxMJxC/0gSPUMJdPQvoLErlOJGD7JrHMiucyCn + wZFsCfKyG+3JaLQjucGa2AZLourMiaw1I6zGVFVQjTFB1UaqgqukVFRpqCrwmgKqjAmoNiS4xoiQWkPC + 641FhkQ2GhFZb0REg1LK+jpDwpTtNQaqlOWwWmNCleOqTAiROh4qsVVYkTHRJeYklFiRVGBJfoUzTa0B + 0rZC6WgPpqLKlcxcc2JS9YjONCYuT/YtsiWuyJ7YIocpFTgRV+hMQrEbccWeJJb6U9qZytDaJvY8uJJD + R28X/0fJdDzAxVfv5sxLWzh7ZCVnD43z0gPtHN5ZwqH1abywIZmzm5O5uCWRi+siubQigMuLvXhtkTtv + TDqKLbThdYkJLolfe7lHX2IBA94eNuX9cSs+mrDhAyk/GLXkI9Enw2Z8OmzCJ4MSyEt7/VzKv6QOAz1m + wZejyjDOhrwrMcXVHm1e79DgUutczjVO50zdTZxtuEl8yZkSS83jjX5d3h0x5qNF1nwkgf77EvArEPp8 + uwYnGmdxrF6Zm34eJ1rmcapdi5e79UT6nOmU+K3LhLPdtrwoMeFTYlfuip/DjoAZ7PCfx1Y/bbb6G7FB + 4vI1/mas9DFnmY8lS7ytWCLlUi8rlvtYs9zXliWetoy7SjzjLHbNzZIWD1vqPe1UwFHh40ypnyvF/q4U + BXhQEOhOfqAnuUGeKgDOVABwmB/JEQEkRwWRHb+AguQ4yjLSqMnLVQFweWYmuSoADlbn/1UAcKCjg8iJ + MA8vQj29CfISeXsT4OlJoDIktJIZLApU5gOWY3yc3P4GwK4ib2c3Qr29yJE+oLkom6G6Ukbry2nISZX7 + CcDfyQ5nKyuszSywMrfC3NwGMws7XFx8yUwvZN3qzbx85jxffvYt71z9gEuvvMZrF1/nysXLvHL2PBfF + r37v3Q/46aff+PWXf/HFF99w+JnnGRtfQkxcCvYOCuxVQKr7/1XWNi6qrKyc/15WgO8/9c9hoi3+x3Zj + Eyv09E0xMbNR4W1jUweHnz3OTz//yS+/Ivf1LVfffJcXj5/iqScP8+zho+qysu7HH3/jp1/+4M233uO2 + O+6mvKIGL+9AubcpAGx3DQCrsNfpf+s/Ye//0r8BsJ2jp5QeU+BYvo+dkysOzi6qnFycVdk72cs1rTGz + MsTEwkBKIyxtTbC1FzmaYu9igoOLKU7uIo8p+GvraoC1s54KgI2sZmNiO1eFv7aueli76WHlqouNu/61 + DGA5zscMFz9LnH0V+GuCk5exOnT0lEywczPEykkPE5t5GFvMwcxGAzsHPZxdjPDxtmbBAl+SkiNYEBuG + i5erXM8GAzt7LH0CiS6qZWLngxw48xEvvP0vXnz3D1764BcOv/kFdx27yPK7jrBw12Emth6kbWIXaaWN + hKcmEBjrin+UCTFpJmQV21Ja40pDuz/tA2F0DUWIfY+kpS9CbHwYDZ3iv3cEU98ZQoP8rmsLprLBm6pa + d+kvPBmp8WBltTvbyly5p8CRx7LsOJxmw6kkay7HWHI10ozXQ424HGzA5SADXhe9ESh+rehqgNg4XwNe + 9tLlmLsuT3uIb+5lysNiH/bJO7vb34o9Yi82+hmoAHhjsCE7w01UAPyAnPNRWX4y0lQkPuACU46m2HIy + w4nzeZ68WuDDsTh7nggy404XHbbbzWeDfLNllposstZlpbMZa90t2eRuwQ5XM+5wNmKfoyFP2OvxnLUm + x8zmc8JoHmeNdXjFyoxXnR15LSiQSxFis2MTuJiVy+WmRl7tbBV/tZXXO5u5WF/G2eIMXsyI5miCFy/K + /VwotOaNKhveUGBuky2v1dtyTuKIFxMNOemvwTmPebzqOovXPWfzfpg2n6QY8EmhGR/WmPNekwVX2yx5 + s82B19vdudwRILG/+LH57uyOs2OxrxH9bka0O5vQ6mpFh9jHjgBvmgMCqPMLpsgrmEQnb6LEzkT5hxIe + GUN4QhKxuTkklxaTUlJGTEYW/hHReMj+nr5BePmFqP/c4RcQhk9AKN7yWykVKev9A8MJUBWJ3z/k4x+O + b2AEIeFxRMWmEp+URU5BBQUlNWRkFhEZlUhgUBR+fuF4e8s5vUII8JFreYofHRpGYU4m7c3VjA6109Zc + SWKc7Ofuirv4ku5u3nh6+qv3FBIWTWq62PL6Foldx1iyYjWr129i2ao1Kgju6huioaWDmoZmampaqKmd + UmVVAxXldVRVNtDW0kNf7wjdXf3U1zVTXVWnlnW1TRID1/+turomFe72dA8wNDjG0NAwAwOKhhiUcrB/ + TM4xpELiuvo68ZXa6Otvo7mljPLyFJobsuhuzqWxMpGiZD+ipW4HWs7H33A6wQY3keKgRam/Ms+vI7UR + TtREOFMW6kRhoC3ZYjeyvE3I9pW4wMdIfhuR4alLuoc26e5apLlqkuoyjzTHuWQ4zCXHcT6lLlpUuelQ + 46ZNlWyvcJ1Lpcd8qn01qQ3SpjFUl5YIA7qijelLtqA/zYKudHMa04yoTNenOEObvGxtsrJ1SMvSJCVD + k8SM+SSlaog0VSWnKABYRwXAiQn6pMp5EuPNCA3WwsP1Ruytp+FsOw0v+2kEOU4j0nUaqb7TKAm7ifrY + mXSlzGUiZz7L8jVYlT+XdQVz2SJx3B7x2e6U+n5vmy13tVlzW5sNW8WXWFlmxmiuEW1yrVLxJbLc5og0 + yfKSe/XVI99PlwJ5vrJAHRrFDjSJPWgM0acuWI+OaHO64uT9hhmR6z6PZHlHmd4GFMc4UJXuSUGCHbkJ + NmTFWZEaYUm82JpIsdshzuKP2hngb6WjKtBWS35rEeGsSbSHFnE+8g18tSkL0qc2UJd65d0GzKc9QIO+ + EA1GIrQYk/h4OGyOCoD7gmczEDKXsQU6DIRr0qEC4JtVNSgjHXpPp0GBuqFadIbp0CnfqStcTwXBncHa + tPnNodl7Ji1eM1UA/JfafWfT6jObGqfrqLabRr39dXR6zZZrajERoc+iKD0mVAA8hwGfawD4r2GgRaMe + 17M8YCarQueyJngOa4JmszpwFmsDZ7BGAcOBM1UovG2BJnviDdibYs6dKRbsSTRhW7Qu6+QZV4VrsCxC + FK3Fkng9JkW9URo0Bs2gXJ6tzPcmqgOnUx8+neao6bQpdSB1Hr3pmvRlajOYY8Ai8c3XVlqyU2zjbRLn + 391sw0OdThweDeDweCQPDUWzqzuWJU1xNBcvoCwvltrSFHrq0yXGK+KBnWO8dvJBvrj6HN+9f5yfPz3B + 75+f4V9fnOa3T17ixw+O8N27h/nuncN8cvkRXnluFwfvXsKete0s7StmqEmBvzko0wKNtVQx2dHA0t52 + Fvd2MtraSHddJa0VxTSVFtJRXUZPYx2DYvOV4Z+XTQ6zbKyf5SPdrBntkLitle1jzdyxqI07F7dx37Iu + 9i7uZKPEiotbK5loq5maX7itkcHWetpqSlQNyTUX9bVL/FtPb2MFQxIDD8v+Siw80SXxbF8jq4Y7WDPS + xdrRbtaN9UjZq4Lf9Ur2ryyvHuqVuLZHYuAulve3s6yvTZ6jjWX9Leq8xp3l2bSVZNEhZWdFFl2i7opM + ustF18qu8gy17JFtvVXZ9FXn0F+dL8t5tBSk0pSXTFO+2LaCdBrz06nLTaEyI5Hy1HjK0xKoykymMkuU + nUxhciSJ4Z4ESB/rYaePq402brY6eNrr4CXtKUD62jBpazHKHMNeBixw1yDKfTYLPJWkzFkk+c9SAXCO + 1M+isPnUS53rUub9zbRnZb4by3OcWCK+xkSKJSMJpioE7lmgR1uEtEepk/WiOqm7zdE6dMcZMKwcG28h + ddRU6qoxq6Qeb04Qu5NgwMOxujwldfiQ7P9UzHwORosiNXlYznFX2Dx2hc1kZ6gCgWdyV8Q8HojW5kCi + Lk+kG/N0tgWHcyx4Ot2IQym6PJOszXOJGrwQO5dTsXN4VYG+CZoqAH5Tll+LkXgrcroKgC9EzOB8+C2c + CZVYLPgmTgfdKLqB04Eiv+t4yXsaz0tbfc5hGi84TeNl3+u4FHATr4XM4q3wObwpNuYNaV+XfG7govf1 + 4k/dwGuBN/N22HTeknO/I9d5a8F0rsYoAHgOn+Xq8GWxAd+Wm/J1hSlflBryYYEub+fM5dWUGziXdB1n + E6dxJmkal/Ju4p2aeXzUpssXg+Z8PWnN50ts+HipDW8tseXiUkfOrfbi6ApfHhrzZGu7EyOl5rRmm9Ga + Z8NQlSfj4hsurrBlRaUN6+qc2NDizZ6JZB7Z1sC0DTssWb7elPElhvQNy4drN6C2zoDCYm0ypQNKy9Qh + O9eY4hJL6aTtaKxxpLHCnvoSWypzLclcIB2hGFtlCOjkMAN1HH9lGGgl+zcp2EwFwCoEjjQXmaoAOCVE + AcRaxPrOJ95POrcA6dgC55PoJxXP9XpS/GZRHGtIfaYCgJ3oLXOgt9yWnjLpLOXFtUrHVZc1g7rsW2gt + mktXiRY9xTr0FWgzkKcYNC2Gc7UZEY3m6TCRr8OifG0W5s5hae5M1skxe6oNuFc6u/0tttxfZ83ecjOU + uX//AsC35utyZ5Eedxdpc2fuLB4qm8tLSgbQMnu+WGurzgH801YLft5uxk/bDKQ05Ocd+vy601CVAoD/ + tduYf+0y5bctRvyy1ogflxrw44QBv4wZ8fuIGb8PW/LLoAVf95jxUbcpr7cZiXOpw5Plc7k/bwa3ZtzM + 7tTp3Jo8mz0Js8ThnM3e5Pk8kKUMl2nKs1UWvNLtxFvjbny2yocfNvvz6zYfftvmIXLjt+0uapbvrzsd + +Xmn03/op20O/LDJgS9WWvHuhBmvdGlxpGY6T1VM50DJLTyYfxP7pPIdyL2ZJ/Nu5mDujTwtv58vmcGJ + 6rmca9LhUocBr/UYX/sDufKf8lIOGfH2sKGc05h3FhrxzhJ93luuw0cr9PhomS6fLhUt0uIL0beTuvw8 + pivvQMpuDb7t0OSbfgO+Xyrvd4sbP90Xwh/PJfH7mQy4WgAfl4tK+dfVHH55OYkfno/gu6dD+O5Jf755 + 1IfvD/jw88M+/HifJ1/ttuerTZZ8t9qU75cY8+2EIV8PG/B5lzYfN83h47o5fN6qyVdd0hD7TflBAcAL + bfh83Ir3h0zkmfQlsNDhaO0s9X3cln0za1NuYSJJ6lucFuWRWmSJUcyImEt2jCbl6RIAlLjQV+MnBt6d + 0mRzMiN0SQyYQ2rofLIitcmN0aNQDF1hwlSZL4ZPAcB5caZqmROrR2a0BrnxGhSJw1eeJgZU6mN71nz6 + M+cwIfV9Y9HN3FFxCw/V3sLhtllcHJMgbqkJ76204OPVYhzW2/PlRnu+3uzIt/J9f9jkqOrHjc78uN6V + zyZtudprxpkmPZ6pmMfdWTexMWEaiyKnMR51PUMLbqIn6hbaxRC2+d5Ip8d1LAq6mR1iOPcXGPJctRGn + mgx5Xers+1J33+834Z1OfV5v1edSs7Lelo8WBfD56mi+2JDMZ+uTeXtZNGf7fTlcZ8OztTYcrLBkf64+ + dyTO5daYGdyZNIf7M+bwYM4M2TaLU51avLXYnC+32fPbA17XALA/nAnmz4uB/PK6nwqAf37Dix9fceX7 + E878cMSZ759y5YfH3fnpUW9+PuDLTwcCRMF8vz+Mbx+I4tPbIzi/yJ2DjRbcnSeBbJoh28TGbM5yZGOW + Cxtz3NlVGsA9jQu4ryFS3rM/txY4qwB4f6kjj5YpcwBb83yNLWeaXbjU5cIHCz34fqsPv9/jyR8HXOGw + 3O/zvnAsGE5GwKkwtfzzZDz/OpXHryer+er5Ot56vIZX7q/h2R3lPLymWByVXLaNZLKmP1Md2nfZUBHL + RytZNFhFb0sRrXWFjA12cOetu3j20DOceuk0F16+qGYtnFXmAD4r5csX1DnK/oa41wDwSdnnL/0vAHzm + vLLvlP469uyFVznzyiuq/gmA/4K/R0+9pEoFwf/QX+uU8shLx3nuxWNqqaz7/wYAK5nAynpl3xfPvMhL + J5/j+PGDHDvyEM8/dRfPHdjB0Yc3cvKRjZx7ZA2vPryUyw8t5MwdXTy3roRnl2dydHkGJ1dk8vKKDM4s + TODFgXDOjERydVUqH23J4sMtaby7IZ6ra2J5bWWM1IlIjg6G8HRfCAf7InlyMIFHB1N5eDSXA4uqeGRl + G49tHOThLRPsWtnH6oXtTAzUM9hRzkBjPqOiSQkyl7TmsqavjM3KvJgjHSzubGaopYm+phY6Gptpb+2g + r6+P7r5eGttaqWtupE4c2dqGWmprq6V/LaesNJ/amjL6xfldtnSUVasmWL9unDUrepkcrqG7MZ2u+kT6 + GuMYkno61hDOooZQURCTDYEMVXjSU+RMR44DLVlOtGR70ZjlR2VmACUZgZRmR1BRmEhpfjJdrbUsmRhl + 6cQYE/3dDLbUirNZxEBlLkOVmSyqSGJjcSR78gLE/nlwe7ot9yQZ8UC8Nvvi5rA/dhYPSjDxYOx07ou9 + mfsSZrAvZTb7kmZxf9x07o25iXuibuCeiOu5d8GNctwsHk7T5lHxJxQ9kmfMw/mG7MvX5/5CfR4oNuHh + OjsOdXrxZJcPDzY5sbPYlFUZeixN12VV4TUAXGjBeL45I9nGjGebsKLQki3VLuxscGVbvR1b6sz+BsB7 + msS5bDNVAfBjvdJ+xT491WHLwVYbnmq25imxBU/Wm3CgQpzJ0rkcrJzLczVzOVY/j7Ot2tK/GU5l//b+ + nwBYyf693DhfhcBXW7TVde93TGUBfyr7fSW28YdhC34cNOW7HgO+kW3ftOnwrez7baM239Vr8VWdBp/X + zueTWo0p1WvySZP0UQ06fNJsxKft9rzX5syrjY681OjK850B3FHuyIR8g2YJEDuiJNAVG7ahxp+tDcGM + ZljTKn1NuwS6KwoceHgojkNj8TzSFcCdYndvFV/osVoLjnc5carLjld6rLnSb807Iw68O+rIuyNOvDNo + z7v9jmLbnXi/x5FXa004W2HAK42WnKw344j0AU+V6fBIiab0jZo8WmMo79KSp9odebLTXb6b2MwGN/Z3 + BfJYfyQHekNV+Lu/xZOHGxw5UGMt/pQRD4nP9mipJocq9aVvMOVwkzWHmu15tNGe/fWOPCDf854mH25r + 8WdDvR9jJV40pLmSH+9MSow7sdE+LIgLJTIhiojEaFWRSTGEJ8X9FwCOkeXovwFwUmowaRn+ZGV5U5Dn + SqG8p8JCG/KuAeCsHG0KivQpkXuskT6rs8ODrg5v6qodyM3UIz/bgNJCU2lDxpTlG1FXYUNfmxdjfUGM + 9ipw1oXGSmvqykxpr7dnbMCXhaNBDHS709ZkpwLguiozqpXzlxrRUGlCW4MpPW3mDHVbMNJnxki/kchA + 1digCWND1gz32jPe78PCwXCGO6OoK/EnJtSGIG9r/Nxt8XCywdXRHg835Q92nni4++Dt4Y2Xuxcezi6y + zQEna2ucbW3x93QnOWYBTTXljEiAunCohzGxOaPdzYx2NjHeUS9Bbz2LuutUCDzSUvpfALhFhaEKAF49 + Wq9KWVaGYFYA8DJ1COZqlnTXyv5Nsr8yB7AEzWIXVw22yroWVvQ1saynTp1TeHF3FYvby5lsFbWUsVDK + pZ0KmK1R1ynZu/11uQzWTgHgtX1VbByqZ+NIkzoks5Ktq2QBK1BWuUclm1gp1fOK1HmAW0tV+Luqp5YN + ck8bB8VOS6n8Xtoh+7aWsaSzXO6rWs0mVoZ//gv8TpWd6jMrz6hk/yrPqAw/PQV/a1nV18CagWY2jrar + AFjVwm5V6xfJsy/sYu2kvLOJKfj7l1aMNUtf38ykXHeovZTuhmyaqpOprYihvjqWluZ4OjoS6R9IZWQi + g5HJLIYn0ukZSaK6I5iCBndyG1zIE/uQK35Jbosz2c2OpDbbkthiTWyTJTFi5yKl7UbUmRBaZ0xIrQJ2 + jVRQq8LaaiWb15DgawqSbUESB4YqgLfBgIgmY1ULmkz+p6IajVVN/TaTZdOp69VIWWlGpAS78ZVWpFba + kl5qow572iL33tUVSmdbEFWVLmTlmROXbkhstikJBdYkldiTUOxAXJGjqoRiF5JK3Ukp9yatKpD85li6 + ltawbu9CHn72dvErHuWd957now+PcPX1hzh3Yiennl7BiYeHOXxrPU9syOeRZYkcWhHHUen7T6+L4eyq + MF5e6sN58eMuTrpwedyOy8NWXOoz5nynMsqRFpd69FQArIDfjyZt+HDCmg/HrPhY0Yg5n46Y8qnEPZ8P + GvHZgMHfUgDw1+OWfDFuwYey/QMFAvfr82aPNlfa53O+eRbnmqdzXvz4yz3Sjwxoc3XEkPcmzfhkqR0f + L7fn/UU2vD5kzDm5j+ONM3mhbibHm+ZyvGUeL7VrcKZHl7O9epyV/uW0+OSnu214vt6CRyR+3RMzk60B + Iv/5bPLTYYOPIat9jFnqZcpCdzPG3aQPdTNlyNWEAScjtRzzsGLU3WYK/jpZ0OxiRaObLTUe9lR6OlLm + 60KRnxtFAe4UBHheg7/e5IiyQ/zIDA8gLSKA1KhgUqPDyEmIpiA54RoAzlOlAuC4OJKDQwh3cSPEyZlg + ZycCXZwI9Zya/zfQ25tgH5+pUn4rUFiRMj9woKs7vs7ueDq54OboKnbPDV9XD0K8vdSM48aCjL8zgOuy + kiX+8sffyR4XsX22FlbYWNpgZWmHhZUDzk7epCbnsnTRSo4+d4z33/mY1y5dVf3qi69c5srFK6reuPIG + H37wsQqAv/nmR9577yOeePwQvX0jLIhJwtnFCzv7KdBrZ+/xP2Vj66pKAb9/Lf8Fdv/XXMFK+dfyXzIx + tcbA0EKF11MAuJOnDj3Pt9/9ys+/wPff/cznn33Nu+98yBuvv82bb7zDO+98oK776cff+O77n7n82lV2 + 7r6dopIKPLz8/4a/9v/M9P176Ob/0v8BfKfk4Ox9bfk/AbByLhUqO8k1/gMAu6oA2MHZQQXA5tZGmFoY + YGppKMvG8h6MsbY3wlbqpZ2zCQ5uU1Lgr5WTLpaOOioAVuCvub2GOgS0vbuBCn4VCGzrYaACYAcvk2sQ + 2FwtHb1knYehuu+UjFSYbGaniaHlbAzNZ2JqNQ9rO20cHPXx8ZoCwIlJ4UTFhOLieQ0A2ztiIe8/JKeC + 7vV7uefFt3n2nT84+Smc++ZPTn31K09d/Zz7T77HXUfe5tbHL7Nyz0EqOkeIz8vEP8YFr3A9FqQakZ5v + SVGlIzXN3jSLn9baE0hzZ6AKhGubfalu9Kai3lPkQaWovEp8lhI7igrFxyiyplM0VmjFmjwr7six5uFM + Kw6lWnAiwZxLC0x5I8yEK8GGvOov9sxfhwtiCxRd9BX56PGylzYvumnxjKs2j7vp85CnCQ94mXGvrzl3 + +lmw28+UDb76rPbV/RsA7w024r5gffaH6HMgzJBHI414MsaM4xJznClw52KpH5ckln4+wZ4Dwabc5qbN + Rod5rHDQYNRqPgM22kyI7VnmbcVaL0s2u5uy28WQe+WdH7DV5ZClBkdN5nLWYB6vGmhzycyIy/a2vOHj + zWtiN65ERXMlJZ3z+QUcz8vlWHYmp3OzOJudwsnkKI5FB3A0ylmWrbhQYMUb4nNeFf/yzWYbrjTacKbc + iqPJehwLnc8pv7mc95nNa4EafJhoyKf5pnxcac4HDWa812rGW+0iiRneFD/8jTZvztX5cDjflXvjxO/2 + NWCx1MlhqaeDLuK/iZ0c9HanV+6zzdOPEkcfkq3diXf0JikwkoyULLILSyhpaKS6p5uK9g5yyquITc0i + LDoB34Aw3L0CcHbzwc3TH1cvP1w8fNXSTeQu6xR5yj7uHv44u8s+UipD2Xt4B+MfFEV0XJr0pWWUVTXR + 3NZHc3s/5RWNpKbmqRA4ICBSjg3E0y0QX88gvN29CQ8KEb82QwXAw4NttDaVqwDYy01s7LV/JnSTe3J1 + 98XbJ5iExAyqqhsZHlvIyrUbWL95G6vWbWTh0hXqcNBF8kzZBcXk5pX+razsQjIz8sXnLpMYt0XN3G1u + apd6XEZGejZZmXnk5Rap867/pdLSKhUMD/QPMzmxmLGxCUZHxhgdHVXL4eFJ+vtH6ejsoam5ie6eDrHJ + rTQ0FFFcGEd9ZRItVYnUFy+gNMWPBB9Tgi3m4K9/I+GGN1Io9qA5yonuRE9aY92pjnChMMCedE9zElwN + iXcxkFKfFLEpilI9dFWleeqT5i7L0m7SXDTJdNYk21mLErFDFbJflWwrd9GgyHEOxcrw0F7zqQzQoSZE + l4ZwQ1qjjOiIN6czyZzWFFNqk40oS9anIFWHLImR0zO0SUnXIlmWE9K0JGYRpeio4FeV1N2kJD2SJR7P + SLMiOdGCsBAtfDxvwdVhGp7O0/B3nUaYxzSivaaREXwDZVHTaZAYvDNljsTO89S/hy/JmcXynJmsL9Zg + q8RhuyUWvq3RitslPr5VYs+tzXasKLdkJNeE1ngDypRhn13nibTJlmfMlfeQ6yWllyaFPtpUBRlTK/am + RuyEos54O3pSnGlYYEWety5J8p4yxZ6UxbtRme5FvtiHrFhr0hZYkBymAGBzojyNCXU2JsjekABrvSnZ + KBBYWx2mNtpdh3gffTL85B0HKdnFetQF6tAgfk6r/zx6guczEqHNeKQWoxHzGAyeRY/Eyr1BsxkK16Qv + ZB7tvjNV+NvoI+/Edzp18rvebzZtoVq0hynD2OrQoWRrh2jTFSrxdMBcWnxmqQD4L/0FgZXlWufrqbKb + Rq3tNFrdbmEgcD4TYt8VADwZpsFI0Cz6fW+mx+M6FQL3ybfpl3Lc+yaWBc5mRfAclgfMYpnfTJb6zmCZ + 7y0s9blZLVeKD7cmZC6bo7TZEWfErgRTdiSYsDFGj5Vy7iUh81kodmzhAi01w3kgRpuW0DlU+d1MiZy/ + 1O8WqoJnyjeYTUeSJt1Sl3qzdKaUo8+A2LuF5dasrLZhY60NW2vE5jdYcV+7AwdH/Hh6IoKHR2LZ3RfP + 8vYkWstjJfaNpbI4kZ66NJb3F/HgrjFeO/EgX711hB8+eJFfPj3JH1+cga/O8vtnJ/jh/ef46upTfPjq + w5x7dieP7R1n74YO1o6VM9qazWDDfwLgRV0SG/Z1sLSvm7G2JjqqyqjJz1JHk8lLjCE3KZ789GQaq0rp + aKyhr6WO4fY6NV5VYrJ1yuh1g3XsGannrkVt7Jb4cHFjId0l6bSXZtNWmktTcS7l0l9kJ0aRlxxNdWEm + rRVFVOamUpASTUm6PGNOAo3F6XTXFTDcWsFkZ53Ek40SszbJvTWrgHfFQMdU4sRQl8S13RIbdqnrlva2 + yn4tsn+zuv9YazUd5bly7Ww6KnLpqsqlpyafvppC+msLGawrYqi+mKEGkVL+JfV3CQN1pfRWF9FTKc9R + qQDhYroqi+WchTQX5dGYn0NTQS4txQU0lxTQUppPXUEqhcrfPMI9CfO2IcjDXGRGgJsRAc4S30k7W+Bh + SqL4R4m+xsRJG431ni+aQ7z0i8kBs9UhoDOl7eQFzxb7KO0i3pSxDHtW5LuxMs+VZZn2TKZaMSa2bDje + hH6pox3RurRE6VIfpUPdAlGkNq0L9OiKNmQg2piRaCMWxhipAHi76L5EIx6RuntI6vDTkfOlnCfS4Klw + LfEvNLgrdB47Q2axPXSW+B9z2RujJf2vHg8k6fNwuglP5FrxZI4FT6Yb8XiyLgeTtHkmXnyImHmcFr0a + O5/X4zTUOYBfj53DlegZXIq8ZQoAR0oMJno5/CbOhd7M2ZCbVJ0JupGzATdwwmcax6StPu8kpdjVs/L7 + Vf8buRw0gzelnb0u9uWytO1XpG0rUkDwFf+beCt0BlfDZ6oQ+GrULbwZrQwBPfdvAPxNmQnfVJjyeYkB + HxbocDV7DpfSb+KV1Bs4l3Yd59KncSn/Bt6uncsH7bp8NmTOlwut+XSpDR8ts+ONJbacXezA8RUeHFzi + zV1DHqySuL+72Ir6XBsaCp3prPaT+uXLiMTXk1VOLKl1ZUmTLxvG07hrazPTVm+xYvEa+XCTRnT3G9LQ + aCjOggHZOdL5JM8jIVmDlDQdcnKMKCk2p6bMlrpSW2qLbaTxmKtD12ZGizGONiBVnMBkMf4JwcYiE5JC + zUgJNyclwkICwikAnBJuTJICgMVgK1nASYHSgUqnmCaGNjVovjr8c3rQHMoSjWnMsaG3zFGFv73SCfXK + y+opM6CjSJOmvFk05E6nuWAu7YXz6cjXpCtnPl2Z8+lJn0dvxjz6RAPZmgzlaDCmKGsWk1liUOXY7eW6 + 7K035f4mK+6ttWRvpQV7igzZmjU1BPS/AbAOe3Nn8UDRTI626/OWBOSfrLTiy3XmfLvBlO83GfPdJl1+ + 2KLHD1t1+WW7Hr9u1+f3XQb8ucsYdhrzx2YDfltrwE+L9fh+VJefhvX5TYL63+SD/qpkCA1Z8kW/Oe/1 + malZtc83iCOuDPdbMJPbM0WpM9kVO53tC25md+xM7pHv8VihCUdqLLk84M4Hi734Zp0fv20P4F87ffhz + hzvscBU58/sOB37dYc/P2x34ZYeTCoR/3ubEd+tt+Gq1NR8vsuC1fn1ebJjNweIbeKT4RvYXT+fh4lk8 + WjKbp0rm8mzpHJ4vmcXR0lmcqJjLuXplLl893uw24u1+U94dMFGhqTIv1ntjsjxhzIdLjPhwuTEfrRGH + ep0+X24wlHdmwFdrpOKv0uG7lTr8tEyH3ye0+X1Qk1+65/J9x1y+69fl+2VWfLfVhR8eCOH3Yyn8/moO + /3qvBL6ogi9Fn5Tx57uF/HExlV9fTuDXU9H8/GIkvxyL4Lej4fz6TDDfPuTFd3cqWc62/LzGgm8XmfDV + iIGaAfxp4xw+rZ/Ll80afNmhx1e9Rnw7YsHXE1Z8NjYFgK/2G3CxU4fjDXN5vHwmd+XNZGP6TBanzqdP + HK9qMXC54RoqAE6PnEtBgi412dY0F7pQl2tPfrwxaWHaUs/nkCwddIYyDHSMLnlxclystpTKvL96ImOR + KbliVLNjDciUzjs7QUs6IHEm0zSpTJlHXZI4GoniVKTeyPLs69lecD13lVzPo8r8YX0SHI0Z8PqkidRN + c96Vd/fBCis+Xm3D52vs+Wqtg7xzR75Z7cw3K114T+raxXZDjlVp8EjBdG5Lv56taTexNvVmVqbMZFnq + PBaJgzAWP0+cp7ksFCO3IXIOd6Zo81iBAc9X6HG6VkcCIUM+7DHh415D3hfj9HazLm806vF2lw2fTfrx + 9cooaR9JfLc5jY9XxnFpOJDjTQ4ca7TjmSpLHsjQYqfU500h17NtwS3sTriF21NuZr/c09FmTd5YZMVX + 21yuAWDf/wDAv702BYB/edOHH8+78+OLrvz8rBs/PSHLD3vwyz4vOc6HXx/048f7g/jqriA+2RPEm+v9 + ONZry8MVRtKuDNieaszWTDs2ZLuwLtuVDfliRBuieag7jYc7U7inIZw9ha7cVejE/lJnHiuz41CFLcfq + HXmlw503Bzz5fIU/v+wK5I97PfnXw85wSNreEbnnF4LgRDicjRBFiZLg5Xz+da6OH0+18OnRVt4+2M6p + uxt5als1+9eWctvifDaO5IojkceygUKWDJUx0VdJd3Mx9eIwdDbXsXndWh4/8Cgnjp/k1fOXOffyRc6c + fVX0CqdffoUzL7/KqXNTOvnyBU6cvcBLZ15RyyldnNLLl1RNgV85/r/0FwBWs4D/BwB+/uSLqo7+Q0qm + 75ETx/+Gwwr4ffb4C2qpHKcM/3z6lXOqzvylfwBgRVMZwOc4ee40J84c4+SJw7x07AlefO5BXjh4B0f2 + b+bIAys5dv8yXrpnnLP3DHPxgSHO3tbC0fWFHFmRxgtLUzixOJnTixM4NRLJsW5/TvUH8frSWN5dm8g7 + q6N5c3kYry0N5dKSUM5NBHG014enOnx4ojOQx3sieaQnlv19Kdw/mMd945Xct6SFu1f2sHGylbG+Gppq + 8ygrTKQyL5bGwng6yxMZqE1hYXs+y3oqGG+rpL2sgAoJqksysyjKzqOkqEQC0waq66rJKyogQ7alZqSS + lplKZlYa2VmpEgCnUVYqzlxDGa2tlXR2VjMy3MD4cB0D3cU0VsTRUBpBS3moOH5B0h/6M1jux1CFL/1l + XjRJfa4RR6w8xoSSaHMq4h0oT3ajNNWb0sxA6soSqC1PIT0plOy0GOrFge5sbqCtroLa/HSxN1HUJIdR + lxwowYIXK9I82ZHqwp4Ue/Ymm3G/2Ln9cfN5KGYWD8fMYF/MdNHN3B+tAN5beDhtDo9nim1Jns1++b0v + 5iYeXCB9SpzslziH/Rk6HMg35iEJOvYXGvOg9Ln3FepzT5E+95aa8EiTE0/3+XKoz4+H2lzZU2HJ6ix9 + sUnaLM01YkWZ+CsllozlmzOYZcxwugFLcs3YUO7A9joXttbZsqVWyQA2YVudATvr9bm92Zj7Oiw40G3N + k922HOoUG9TpyDMS4B6WQPdQkzmPVunySPk8FQAfqZ2nAuCX/z8A4Cuyz0XpRy6JXm/UUDOC35Fj3mvX + 4yPZ54seY76XPv7HQXMVAH/dpsNXLZp8Jft+WSuqmcfn1XP5pGoOH1SKZPnjOg0VAH/UqMNHLdKHttry + RrMDJ6qseLrChsfq3dmQaUxn8C3Ued/AUKIBa0vk+7SEsKPBn4k0M3rEiR5NMZQgzofHR2I4PLKAxzt9 + uFedt1efZ8TnOdVtx9lO6Qu6zXmj34z3R6TfGBPHctyBD0ft+GTEns9GHPlswJF32ix5rdGUy81mnKk1 + 4oVKPZ4p1eTx4nk8VqLB49V6HJTtT7XZ8WiLnfhTVtxV58hDnX482hPMQ13+7Gtx58FGZ/ZJgLlP7uP+ + Yl0eKJjPw4VzeLJMi0PVhhxqMJNvYcsT8ryPtbrwSJsH+9t9uac9kG1N/iyS+t2S6UpxkgsZcR4kxvsS + mxhOTEoMC1LjiJLgMCI5TgXAYcnxhIiCEuPUoaBDZJ+I1ChiUkNJSg8lXdpCdo43hfkuFBfZi29rLaW5 + Ov9vQaEBZeUmVFaaUVtrTXuLC+3NbtTI+8/L1KEgS0+di7dcVFNsSmuNPSOdviwaCFY12O5BmwTTTRXm + dDc6sGjYj6UTIYz0ekiwakeLvJ9aeQcKAK4rN5bfZnQ0m9MndXSox1TN/h0Z0BfpTalfyQK2ZGLAST3X + 4uEIhjvCqSnyIT7cgXB/R4K8nfB2dcDDxRlvTy+8PH3w9vJXh+/z8fKVbe7qNncnR1zs7fDxcCU+KkL8 + +UK5biMTg11M9HcyLgHtZE8ri3qaWdQrQXNP/d8AeLCpiIm2cpb21LF6qJl1o62sHm0UNaj6GwAPSmDc + U8vCDgXEVrGsV7YPtUxl/g5KwNzfzHIJnpf3NqrDPC/vrZ2CqV1VLBa7ubC5jEmR8t/aS+Tai9oqGGku + YqA+j6G6nL8B8Ba59taJNrZMdKiwVgHACkye6CxXtVDJ/u2uYkmvkok8la27pq+e9YNNbFGGpR5uVQHw + mn8A4GWyvzKf8IZx2T7ZwdbFXWxa3ClSyi7WT3SyeqRFAn+5VnetSO5bjleHxZbnXjfUpmY5b5rsmQLe + cm/rxjtYI+UapVSguZx71UT7f2j1ZDvL5N0tlPMMd5TS1ZRLc02K2Oc4GutiaRK/pLMriaGRTMYmc5lY + JO9iMovmgRjK2wIobPGmoNmDglYvCts9yW93JavNgbQOe5LabEhosSKm2YLoa3A2vMFEVUS9CVGiiDpj + wkVh9VMKbTQRGRHRaExksxELWk1EpsS2mqmKbzefUsdfsvhbCR1Wss1S9rMkpsmC2HpZlhgrtd6WbPGd + cqsdqWjyor0njJ6ecBUAV1e5kp1vSWKmxI95lqQUO5Ja7kJiiZL1O6WEYldSK7zJqA6gqCWGlvEiVuwe + 5c7HtvPsqUe48NoRPvzoJT58/3nxje7j2KH1HNk3zqFb28S/KuLexancI/7AvrFQHl8YxrPS/x9fGshL + Cz05Ne7CuXHx60atuSD2+ny3AWfatDjbOo8Lndri6xmrQz+r8Pe/APBnwxLEK0M/DxjxucQNf0kBwN9M + WvPVpLKfiQqB31f+QVbatjLU88V26T8653C5T5OrI/pcHTfk3UkzPlhixacrxfaucebDZfa8Jse+3CWx + SNMsjtTP4IWm2bzYrsFLnZqc7tXhTJ8eZ+XaZwcsOdFlzTO1Etdmz2d7pPjXgbPYFKDJen891vgYstzT + RAUvQ85m9DtJPO1oSJeDAe02unRK2ediQZ+r2DwHc5pEtU6WVLvYUOFmR4mnI0U+LuT7uVMQ5ElekBe5 + wd5kB/uSJcoJE5saGUzmglAyYiPERi8gJzGW/JQkSrMyqM7PoypX/KbMbIl5EkgODiXCzYMwV1fC3FwJ + cXf9GwAH+fioADjY15dQH1/CvacU5uWjzhHs7+qpZv0qoxv4uivzBXsT5utDWlQotTmp9FYVMFhTTHVG + IikhfgQ4OeBma4ujjR32tg7Y2TpiY+uMk5M3CXHp9PcM8+C9+8TXPM2RZ47y1BPP8NwzRzh+9DinT5xW + p1y5eOES77/3MW+99T5nzpzn7rvup7G5k7Dw2CkA7OCOvYMnDo5eqpTlfwLgf2cDu/29bGUzBXz/mjPY + WpEynLTo/waAjYytVHjtfQ0AH3jkIO++9wmfff4dX3z+NZ99+hWffPwFH37wKR+8/wkfffyZuu7TT77k + vfc/5pTc+6YtO8gvLFUB8F/w18HpfwDf/5ICev/f5XtNfwFheXYVKCtDQLvhpMjFDRc3d5EChP8CwMaY + mOtjZKaHsZRmVvqyTg8re32sHQyxdZ6SAn8tHLT/lpn9fDX7185dX83stfc0wtbTEDspbdyl9DCVdYpM + ZFm2uelh46qLtYu2Wto6y/nsNTGynoOu2XT0TG5RIbCF9Xz5Pjp4e1sTFSX9bGIYkTGhOF8DwIYKAFay + KNNLqVq0g41PXOChV3/g+Q8lzPsezv0ML375u/z+ladf/5FHTn/K7gMn6VqyhsyqQgLjXfGJ0icy2YCU + HDPyJbasqHOlrtmTerHhtVLWNHpQWedGRbULZZXOlFY6UlpuT1GRNTk5puRkGlKeZURjtiG9oiXiF+7K + FN8q3ZzHkk05GmfKhQhTrgSbcCFA7IOPHie9tDjhqanqlMeUjrvO52mnuTziNI99LjrcI+/tLg9j9vqY + cLufGbuuAeA1PrpsChK/MmwKAN8doMO9/prcH6jFQ+H6PCnXO57jzJkiDy5W+IkCeDbJjn2hcl8e2qx1 + nsdCh3l0W86hzVqDfncTJv2tWO5ryXpPM7a5GHKHvQ73W2nxmJn44YZzeEVnDq/ravKGsT5vWltx1c2N + N/0DeD0sgiuxCZyMiedgSChPBATwXEgIJ6LCOBHhz4vB7hwPteWMAsELrblabyN+rB1vtFpzucmG0xUW + PJemw5FoDY6FzeNsqPKHYX0+yDbno3JLPqhX4K8p73YY85bonU4r3pLj3xI/8HK9JycLXXks3orb/A3Z + 4mHIamdjVriYs1Rs5WJXZybc3Rlw9aba2p0cc3eyHP3JD0ugrqia1rZu+icWMbFmHQNLllHf0SPfv5rU + 7AIiFySqGb8OYk8cFbmKLXHxVEtFip1R5OLqI21J+QcLsTfS1lw9AvBWhpmOSyUnv5yG5m6Gx5aydMUG + Fi9bR2/fOBUKBE7LJyIyES+pux5uAXi5+4tfKDZX3mmOxKItDRUMiG/WVF9CfHSI2FcnXJxccZG276xc + z94VN3c/YmNTqKppYtGylWzatpMde25n8/ZdrFiznvbuPunLi4hLSiUuMU3aTrqquIQ04uS4zPR8Kivq + 1Xl+G+pbJO7NJyoylsiIGBLiU0iSY1QlpZOfV6JmAI+PTbJq5RqWLVvB0iXyXEtFUi5avILxicUMDo3S + 1dMtZZ+ok8bGIgrzoijKCaYow5fCZA+K491JD7Ag0mYeYSY3E2cxg+ogS/oS3RlM86FNYorSIDuyPC2I + czIkyl6XCKmPkWJnYpy0ZZ0eSWI/kj0MSBVbky42RgHB6WJ7smR9jqseRa76lLoZUOFpQImzFrn2s8l1 + nEWh+zyKfbUoD9ajJsyAhghjmmPMaI43pyHBVOJ0I7k/A3IT9SQ21yUlWVcFvkkpck2RMt9vktiK5KS/ + ZKQqLdWMnCxb0lIs5R3qEhQwGx/3GwjwvIkwn5uI8b+JpMAbyY+aSU3iXFpS59ElMfpg5hzGsmYynnkL + C0UrC+axrlSbLVUGbKsxZU+zDXs6ndjS7MgyiXtGxEa1yj2W+WuT46xBrouuSF+eWXl2HbLctciRNl7s + I7FToDHlQcZUhUpck+RMd5rYtBgHNYs6Ud5TdrANpQlelKR4kh1rT2qkBUlhpiSEmBPna8ECL1PCXEwJ + sjfGz9pwSjbKkNC6hIn9j5L3He9nREaAgVzH8N8AWPyc5gB5vsC5jIRrMi5x8MSCqSzgbv/p6rzAPYGz + pZxJu/d0mn1upt5vBnWyvt5/NvXy7pqCNVQ1h8ynNUSDjlBNesK06QycR6ufAn6n03ZN7d4zaPWZQZPH + LdQ7X6cC4CrraTQ6XU+vz2zGQrVYEqHLwtApADzgd4s6D3C/5w0MeNzAsNeNTAbMZHnwPJbKfS32ncGk + 9y1Met2sasLjJiY85fvINZbI/a2S+1kXocOGKD02LNBnZYQmk+LfDct9DcgzDYoNG4zSpiNCg5rAmZR6 + 30yhqFierzx0JnXR8+jJMJC+woBuiWE7MrRpz9SnO1dizlIbFlVYs1zs4ppyUzbXmrNX4odHB314ajyc + h8bj2TOUxOq+DDpqEijKi6akIIauuhSWDSgAeJQrJ+7nm3ee56ePX+L3z0/zx5en1Qzgnz96QYW/H1x4 + iFeO7OLRO5Q5eGtZO1oiMVoOgw0ZKgBW/sF3qKHwbwC8tK+D5QM9jLQ20lxaSHF6EsnhQUQHiK/nrfzD + nwcJYu9zUxKoLsimpSKPvrpChuvyWFify+rWIrZLnHjnZCvbBmoZKE2lKjmc0uQoSlNiKEhcQFywD6He + zkQHepIZH0Fhapw6ek24tyNRvs5SN/0oSVtAa0UWA82lDDWVMyr3p8Dc8fYaJtrrWdjZqN6vAnuVrOUp + SQwt65RtSjbzws56hhoraJN7bC3Po6OygK6aAnrqihlokNi6sYwROfdYizJaVZUqZVkZDntEkWwbaqxk + WOzzYH05A3Xyu75K3lk1vTWVtJeX01ZSQnupxI7lFXRVltNVVUpbuTLqThLFqVGkRfqQEOoiz+xIpPS5 + 4R7mLPCUNudjSbK/hQqAlX+siPXWEM2VNjaHJKl3KVJ/0kTZUlfLpU63xBgzlGbH0lzXawDYkclUG8ZS + FAhsyXCSBd1xRrTHiG8SI7YuRp86qbON4Xo0h0mcIb7CQKQBk7HGrEk2YXeKGQ8mGPN4jC7PRGnxbPh8 + nolQpMmhEE0OBM7njqA5bJc6vVXa8u5oLW5P0OOORH32ii28N82Yh3KseFj67odTDXkoQYcD8Zo8GTuP + 56XOn5Y+/kKMBq/FavJmrJTRs1UA/GrULZwPv1EtLyy4hXORN/JK+M2cC7tJdIuaDXwu6CbOBFzPS17T + OOYicp3GGe9pvOJ3ExcDbuE1adeXA2ZwQdr0y7LtvPv1XPS+UQXCV0NmqwD4avh03oy4+R8AWE8FwMoQ + 0F+WGfJJoQ7v5WrwRuYsrmRN52LWzVzIlnvJlnMV3sBbdbN5X2JQ5R+NP19szSdLbflI4sI3lzlyZoUb + L6z358nVQdw5EcDaHh+pF5501AbQ0xLNUHcS490JLO6IYHlnGCu6RH2xbFlVzn17h5m2YqMDC1faMDBq + Lh23OVXVxhQVGpKWriWd9VwWiOISNEhJ0ZWO2kgavQWVhVZUi1NVlm1GQbIxedKB5YgyY82lgZoSHyJB + vCgpzEx+K+vMSVGGf440kWWjawBYlzg/LVKCdcmKMBTpk6EAMzHKmaHzqJaOrbXAjr5yB5GNSALTSlP6 + K8R4lerQWjSPpvxZNOXNoSVXOrZsMdAZc2hNnU1b0iw6UmbSmTKb7vR59GXOZShblDGT0YxbWJotQXGJ + NrtrjLmz3oI7a8y5s9qSW8tM2JqjPTUEdL4edxbrc3exLnvzZnN/4QyebdTmtTFL3l9iIQG6GV+tlgB/ + vaFIR4XA323S4edtevy2TZ9/7TRQ4S87TfhzsyF/rDXkp0Wy35AmPwzIfv36/DJgzG/DZvw2YcP3ct7P + RG8OmnKmy4DnmvR4pFKDu/Nmcnv6dLZH38jG0OtEN3Jr/Bz2ZetzuNKcKwNufLjIk+/W+vLHtgDY4cWf + 21xhm5MsO/LHdlu5Hxt+2WrHr9ud+H2nCz9vceKrVZZ8vNict0eMOdsija38Zh4tuIH9BQoAnsmj5Zo8 + Va1kwOrxkuhUjRanqjU4V6fFpWY93uo25L1+Uz4cMuNDqZgfjZrw0biUC6VcZMIny434dLURX2424ett + xny/zZTvtyqw3JAfN+jy0zpdfl2lze+TGvw+OJdfumfzfedMvpN38/1yS77b6swPDwbz+4lUfn89nz8+ + KYdvauG7evhayi8q4f0C/nw7iz/fkH0uJ/H7xQT+9Uo8f5xawA+Hg/jhYS9+uc2JXzbZ8O0yM74YNeDT + Tk0VAH9WP5evGufzRasOn3fp85UyZ+OofNdR+b7XAPClTh1ONmvwVNUc7iuayxapR0vSNBgQh6w2Ro8C + MVAZ4XNICZ9FthiZkhRxetKlXaRYkLlAHDcxXnHiVCgAWJknOytaHKUYbTXLNytGU9qLtjhARiITFQJn + xRqQIeuyErXIF+evKE2LkqS5lMbeQnX09XTGX8dEyjTWZU5jV840uafreKF1Hmd6tHmlX48rw8ZSP814 + c8KMq4vMeX+pDZ+ssOdTMRafL3Hks0WOvNkj9atBi2dKZvJA9g3sTpvGrVLH9hRrsF0M0fZSU7aWWrCh + wIT1aQZsjddirzifB3IMOVxsyNEyLU5LvXyjSYcPO+R9dunyYZsW7zVoiqHS5v0OK76a8OXblZH8uDFR + 2kM6X66J5+3xUF7ucOVUmxNH6qzYlyXOZvgNLBdjujLwetaGX8/m2Ou5I+NGDtWKkZ60lnrjzm8PeMJT + Pv8GwK8GTAHgt3z55arvFAA+LnX6GTd+flSWH/Tk1/ulLdzrz+/3BvDjXcF8tieAdzZ688oiVw41S4Bc + pM+tGfpsTTFhU4Yta7OcWZXlwroCb/b1pIvDU8yTI/k82B7P7iJ39hY6s6/UWdqEI09X2fJSowOXuj14 + d9SHb9eH8MetwfzrXjf+9ZAjHHSGZz3geWmLL4XCy5FwLhrOp8CFArjYwO8XOvj+TA+fHx/ktcf7OH5n + Cwd31HH/2gp2LS1h42QxK4eKWTJYynBXKZ1NhdSUZtFQVcKSyXHuu+seXjhyjIsXX+f8ucucPXtRhb+n + RCf/Ar3K3L9nXlH1olIqIFjVq9d0UdX/GwD+G/6+fA0An1Xm5Z0CwAroVaRk+CpSQO9zL4peOqbCXwUO + K+sPHzuqrlOOe+n8mX+DX1Xn/wsAX+DspQucufAyp86f4sSZFzh16jCnjj3Oiefu58WDt3Jk31qO3LOI + 524f4tndHbx0Wzvn7+rg3G0NHN+Qx7EVqby4NIlTixM4MxnNqcEQjnf6cLrXnzcWhvPeygW8vTyU1xb6 + cWWhL5cm/Tk34svRTjeeUoYebvXm0Y4gDnSE80BHNHd2JnF7Xw63j1Swe7KRdaNN9LWVUSJOVXJCECmx + EtgnB1GdG0FLWaw4cpniqOWK45VFaXoCKZFhJEVFkRwXT2ZaOpWVFRSWFJKUmkhEdAQBwf4EhfhLUB5C + bEwY6amx5OenUlwswW9+AsUliTQ359HTWUR3ay5VRZFU5AdSU+BPQ74fLfk+dBX60F3kTUe+hwSS1hRH + mZIbZkhGkL6UlhTEOlGc4kV5dggttek01WSSFBdARLAHGUkxVBbnU12cS35iFNlhXuSFuFIY7CDBsQUL + I63YEmPJ7ngz7oo35ME4DQ7EzuGRmBk8GjudA3Gi2JvZH3uTOF7TeUz626fzdHkqU4NHpR9+RNknfros + z+FAynz2Z+vxkNiWBwpNxX4Zc6/YlLukPSq6WxyiR1qdeWbQn2eG/Hm4w4Pba2xYk2vIohRtFkmwsrzU + isWl1oyLHzKYZSqOqAELs01ZU2LLlmpHNQN4a52FCoC31hqyrU6PPfUG3NViIu3ZgsfEPh1st+GwBLfP + djhypMOeZ1oseVL2fUzs2qHq+TxfO5/jDfM5J32DAoDf6jXhnR5RlzHvXwPAyny/V6QPuVAzi/PVM7lc + N5fXpD+52qTJ2806vC/HftppoALgn4Ys+LbbgK9atfmiUYPPasUJrBJVzubjipl8UD6Td0qn846UH6kA + WGyr6IMWI95rs+XVBlsOlxizP0/8lUJLCWrnUO91HXU+10t/YMj2Gg/u7gxhZ60nSzKMGREHeHW+Jft7 + Qnl6NIojI+EclHf5YIUJj4h/d6zdmpd7bDjXYaJO4XC131D6cDPpvy34UPrAj0etxNm04vNhG74ckr6j + 3473u6x4s9WMl2v0OV6hJfczn8eL5vCElE9W6XKwwYiD8h4fbrDgrioT7q5VhpDy5JEef3nvntzb4MgD + 9fY8IH7WfeVG3FuoxT35s3lQ+p5HiufyRIUuT9TIORosOdhsz0Fpjwd7vHms248HOwPZ0xrAiipvOnPd + qEhzJTfJi7TkABJTw0nIiCMuI55oFQInEJEcT5iUIaLApDiClPmAU6IJT4kkJjWEpPRg0jP9yc1VALAT + pUXWVJRZU1VuRWWFGTVV5jQ32dHa7EBtjRXNUqeaa+2pKDIlX4LmwgwdyvOMqCwwprHMnO56CYC6fVk6 + ECTBcDDjnV5019rSJv5Zt3y7hQPeLB71Z7jbla5GOW+tFXUKAC41pKnahI5GC3raLRnssWK4z1Qd+nmk + X3dKA0qpDAVtwXi/o3quyf5gepoDKMtxIz7ciahAV0J93fDzcMHbXUofX3x9/fH3CybQP4gA30B8Pbzw + cXdX5e7sKPu5EBMRSmlBFh0tNXL+DiYGu+X8HSzq72Bpf5v6H84KAB7vqFIB8ID0Q6NNpSrUXdGnQF0l + +1eRAoEbp7KBh5vVjN+l3bVMtpdLIFvBog5lXt8mVvY3S9nKst4mVct7lbmC61kpWtUvknJ5Zy2L5ZiF + LQoArpDARckMrpTrlzDYcA0AtxSqAHjrWDM7F3exc2EXW8fbWDNQL0G3BM8dZaomOqYgsAKAlbmBlUzh + jcMtbB5pY9toB1uVoZr7rwFguYYCgJVMXmU/Jdt3qzJn1DXwu2lJN5uX9LBhsovVI61yTuVaNSwWqQBY + zYpuZ/1Yl/TfvWya6FGX14y1qcB45Wgrq1RgLpJ1f8PfyQ5Wq+pUfy+X7Qv766SulNPbkkdrQyrNdQnU + 1y6QOhmnQuC+gQxGRrMZGsumYySZ+r4FVEj7L27zo7jDn5IuP4q6PMjvdCVL7Fxahy2p0uYT2yyJb7Ug + tsWcqGZTVdFNpsSIohtNWCCKlOUIUWSLlGIzFegb025KXJeZyJyETnMSuyxI6rYmueeaeq1I6bURWZPS + Z0Nqry0pYl+SuuSa7VYktViT1GRDZosD+c0uFDW4UNvuS/dAJH29EXS2BVNd5UZ2vhXJ2RakSNyXXuZG + WrkHSSUuxBa6ECeKL5J1FX7kNoTTOJTD5MYOdj+0kQNH7uelV57ltbde4r33XuTN15/m2PO7efjOUR7a + 1sY9K0rZJe9pa3c4W9t82S126a5eLw4Me/PMhA/Pj7pwbMSBU6O2nBVbfbbfmDOdupyQuOikMldvm/ij + vWLzR8zVLOC/AbDYyU9k3edDEphLm/1SGQJa4ropGfCFCoBtVH0yKvZV/PMPJE56T2Kuq9K2r3Rp8lq/ + Jm8O6/HuQlOJK835cJmcd4WdOq3IVxvc+XiVk/j0przcq8vxltk81zCDI40zxYbP58UuDc4M6PHykCHn + 5PznRmw51mnJE1UG3JE2g01h17E+YCYbA7VZ56/HSh8DFnmaMuJqRq+jOV1OprTbG9Jqb0CTtTYttvp0 + uljQ4WJFg4PYQTszKhwtKHW2psTNlgJPR/J9xPb6uZMfLH5CsDc5yry/wb5kBvuRHR5MTnQ4OTGRZCfE + iGLJSUqgIDWF0qwsKvPzKM/JpTQjW2KeeJKCQ4n08CDCw40IT3fCFHl5qQBYhb+iEF9fwnz9iPCZUri3 + nwqBA90UCOwhds2HAG9/2defyAA/8beCqcxMpLMsl96KfInH4kmR+1MAsLudHS4Ojjg7OOPo6IyDoysu + Lj5ERyVRW9XAyqWruG33XrZv2cnWTdvZs/NW0R7uu/s+9t+/nwfv38eTTzzN448f4r779qlz7JaU1hAQ + GCHnUsCtC/YOHjg6eav6CwL/pX/D4KksYVs7D6xs3bC0dcVWjrOVfWykVCGw6P8GgBVZWjvi6R1IeUUt + 23fcxrPPHef4S2c5feqcqjOnz3HyxFlOiV45d1HiBPH3XzrNkaMv8shjT7J46UrSM3Lx8PSTe3PDwckd + R2dPFTapoNfl/6L/gL3/lqO8x6nl/wLAcq7/BMDuOMs1XNw8cXWT9deGgDa3MsHEXA8DEx1VRmYicy1M + rbTlHSkQWE+VheO/4a8ic4ep7F9HDyN1eGdHb2PsVABsjLWbIbbupqps3A2wdtVXYbGFoybm9vPkeA0s + HTQxs5mHgcVMdExuQsvgBnSNbsLEYjbWNlp4e1sRFeWtAuCI6FCcpI81sbPByM4RC69Q3JJKyOxex8Ce + 59n67Ic8fOV3jn4Op3+U8O9bOPGVhILv/cHj57/gtifOMLRmM+lVufgnOOEfY0BEkj6JmUbkFFlRXCE+ + Rq0zVfVOVNY5q6qqcaKqWn5XOVEh28tKbCjOMydHOSZNV9qSHvWZunRKOZkh8br4f3emmrA/0ZhnosWO + hZrwSoDE/L6GHPfU5TlXTZ5x0VB12GU+z7rM4ynH2TxkP4N7HWZxp7MGt7vpssddnz3yLvf4mbJTpAwB + vc5Hj83BBuyWc+4NMuJOP232es3hbr957A/X4/F4U57Lsud4vjMvl3pyvsyHp5PteDDMiO2eWqx0nsuI + /VyaLWZRZzmPdlcjRvzFn/ezYo2XOZtdjNhtp8Ndlho8ZDyXw/qzuaA5h7e1xac2FvtrZcnbTs5c9fbh + zaAQrkRE8ry0+/02DuyzsuEp2XbS34czgZ6cDnDmVLD4uRK3vCbv9u1GW/HbHXi91ZpLTdacKjfl2fSp + LKEj0fM5Hadk4JjzXok174nP926zGe+Kf/y2+PBvdRjwrvR978ix7zY78VadG68Wu/B8oiUPyXu4S97T + rVLHdrpasNHRirWO9qx0cmGh1P9WS4nJLHwodw2jLjqTwfpOieGXsXHbbvbc8wAbdt3G2JIVNHf2UVbT + SFpWvjrfr5tXgLQ3zykIfA0EqwDY+T8BsNLOXNz98fILIzQiXmLLGlo7BlTou+vWe9h7z0PcuvcBVq/e + Qk/PqJoJnJKWR0hoDL4+oXi5+eEmbTJQbGt2egpNDeX09zTRWFtM3IJg3F2ccFbspLRjR2nHyj/NKJnH + 8YkZ6j+/bNiyXa5xP/c8sJ87xE4qEHhgZJzcwhKiYhOIjI4nKjrxb8XEJJOVUUBNdRNdnQO0t3aRm1NI + WEgUAf4hREXEEr1AjomMZUFUnAqA29u6Wb58Jdu27mDrlq1s3ryJTZs3sHHTRtZv3MyqNetZsmwlYxMT + LFo8weTCATo7yyktjCYnxYO0BdZkRlpSHOtAQbg1qW7aJDnMIVvqekuEDcOpngxKfNwQ5USulxlJzkZE + 2uoRaq1DsNiAEFttwuy0iHLQJUFsSpKnERk+5mR6m5PmZUyG2JpsWZcnKnI3otTdmHIvEwqdtcm0m0W6 + wwyyXefIuedRFCCxQ6gB1eHG1C0woy7GguoYM4oXGJEfbaj+DTAlTp+keLELCQYkJhmSmCxKMiAp2YTk + JBNSpExJMiM12YyMdCvycu3JTLMiNlqf8ND5BPpOJ0z6/ejgWSSFzSIjcgYl8fNoSNOiPUuTzvQ59GbM + YjD9Fomfb2Ak/SYW58xmRaEGa0p1WV9pxI5mG3Z1ubC5xZUl5bYMZVvSGm9Mqb8OOc6a5LrokeukT5az + PmlOOqQ5K5nQ2mR76FPgZ0xxoJk8pxWN8a60JntSGWVPurcRifK+skMdKYr3Jj9Bvk2kLfHB4l8GGovM + ifGxUKFUmIvZNQCsyEhkQIDyTRz1iBJbHifXSA9QQLMRNUH61CnDQPtPAeCOwDkMhc1jbIEGkzHaDEfO + pTtgBp2+t9DucwttonbvW2iWsk7W14jqAmZR6y92KWCuqsbguTQFzqU9VOO/APAttP4DArf5KgD4JhUA + V9pOo8JqGg320+j2nMFY8HyWhOuwSM4xqmQf+01n0OdmhrynNCa/l8g+y0O0WOQ/h3HP6Yy438yox5SU + 5WH3WxjxmsGozywW+s9lcdA8logWB81lXO6331MZpfFGuSeR/wzaQ+ZSHzyHMv/pFMoz5sszF0ldKJN6 + UBujJMgZ0plpQIvYvoYkDWoTNGhME78vz4yBYjPGi01YUmLMOomBb21z5KE+L54YC2XfeBy3jaWxYTRf + Ythk8nMiReF01CVK3FvAg7uGuXLiHr5774Vr2b+n+e3zE/z68XG+eftpFf5ePr6Xp+5brMLfZb3ZjLWm + MtSUxkB9utjFvwBwEeMqAG7+GwAPtzRQX5hDvsTxCaEBhHm74e1oh6uNJT6uTsSEBFKYpmT5Z9JTm89A + dTbjNVmsaMpna28Fdy9uZ2t/DR25seRHiq8a7kuGMkVJqB8BzjZ42psTIr5tUmQg6THik/q44GlrjJet + idRJdwqTI+ioyWVCYloFACuwdripguHmCkaV2FmkzFk8BYObJeYUXQO/ylDTyjalHKivoLUij5byPNpV + AFxEb73EtQrcba5kVIXKyohbSswtx7XLuVtrJPZV4m9R89S1hpuqZbmW0eZ6WW5koKGB7mp5vopqeipr + 6KuuE9XSV1NFV3UJLWXZaiZwceoC8hKCyIz2ISHEiWhfa2J9rUj0k7gt4B8A2EuTGK+5xPnMIcF3Nkk+ + M0iWep7pO5PiYA0axFb1p9iKzXBjVb47y7Olr0uzY1wZCjrdjhEpe5MkjkgwoyXBlKY4ExqiTagL11eH + am8J1qYnXJfJOGPWp5hye6o5+xKMeDxah2ciNTkcPp+nIzR4OlyTg4HzeUj8iz1+s9ki9XtbxHz2iG3c + I/Zwl2i32MdbU425O9OCe7PMuFcBwnFaPBA7n0di5nJkwTxOix14NVqTKzEavCFt4PUF1wDwAgUA38DF + BTfL9ps5F3UjFyJulnU38Ur4dF4OkeXQWzgn5Sm/6zjuMY3j7tM47XMd5/1u4tWAW7jkP5ML0sbOuV/H + WZcpAHzB+yYu+d7Mm9IO3wyfzRsRM3gz4hbejJnB+6nzrgFgfb4qNeKzYj0+yNPgraw5vJ4+kyvZ07mc + O4OL+bdwIU/ureh6rtbN4r0OLYk3TflUGf55mQPvL3PktVXuvLItnNO3J3NkdxoPbUjltpWprJtMY8Wi + QtataWTjxna2bGxh17oabltXya1ry9m9sY77752QmGE30xav9GRssQt9Qw7iONhTXm5OXo6xdDY60gHP + IzxyDgvEQYqP0yY1SY+CbFNKcy0kmLOmXMqSDJF0PoWpNuQm2ZAcqQBg4/8CwKakREmn9V8AWFFamKEE + jabkxZiQs0CPlMBZ5EVpU59lRWeJA/2V9vRX2EhpQX+1KYNVxvSWG9BRoklLgXRq0nE1Zoky54ghm0Vj + 4nQa4m6mOWE6rUkzaU+dQ5d0eAoE7suYyVDGDBbK/muLNNlSrs/uahNulfPurbHk9ioLtuXrsT1Xhz0F + BtxZYsjd8oHuypvL/YUzVTD16qAZb02Y8eES+RjLTPh8pT6frtDkyzXafLNOm5+3GPD7NkPYYSQyhm0m + sMGQP1YZ8uNCLb7un8e3PRp83yP79unz+5gZfy615bdltny92Jr3F5pzacSYF7v1eapJKnLJDG7PvInN + 0dexOmAay7yuY0PITexNms9BMdaXel35YKEn36725vfNvvy51Y0/tzjBFju5ti1/bLPm9y1W/LrZjt+2 + OfKv7a78vNGRz5da8O6YMRe7dThaPZPHi27gofwbeSD/Zh4uncsT1RIs1BtxqtWc8y3mvNpszKuN+lxu + 0uPNNiM+7DXmE3kXnw6b84k8wyfjJnw6KVpszMdLDPl0pSGfrzfg+13m/HSrOb/sseDX3aZTQ2Vv0een + jbr8slqLXybn8MvgLH7pmcG3XdP5dkiT75eb891WJ37YH8Tvp9L4/a0C6VAq4Yd6+Llxqvy2Br4oR1oQ + fJTHv97P4l/vKkNFp/HnpQR+PhnJz88E8dN9bvy4w46vVsu9jurxyTUA/EXtXL6un8/nzVp81q7LF71G + fDGsAGAL3h8yVQHw5S5dTrdo8UztfPaVabJTGuqydE1xFnWlM9UhXwxVRthsUlQna646x29hvDhysUak + hGoRL85InP+/AXCGGLiMGC3SpT1liCHKiNUiM0ZfZKiC4Iw4PdLjpwBwrlyjIFWbgsS5FCy4idKIaTRF + TWM4YRqrUqexNW0ad+Zcx9M1Mzkmz6PMCXa2Q5uz3bqcl3p1YcCQK8NSV8es+WDClo/G7Hh/xFadq/d4 + zRyeLLyJB3NvYG/OjdxfqcX+JlMeaJaAptOJBzucubfZnnsqLdlXaMwThUYcKTPhxUpDXizT4Gz5HN6Q + d/ehAjkUw9Qynw9q5/FOtQYft5nz7YQ3P6wMl3oWL20hg2/XJfLhoggu93txrseNo43W7MvRZn3IDYyJ + QR3znsbCQKnb8oxbE6/jscp5XB614Zttnvx2rwc84QWHfeFkAH9emALAP7/lxy9v+/PTKx78cNyFH5Xh + n/e58MM9nvy0V7bdHsgvd4Tw7Z4gPtjiw6XlrrzYb8sj1YbcU6DHrZn6bMswY1OWLetynFglWl/iw2Pi + 4Dy3vIqnJop4oCORHYWe3FbowgNlzjxa4cjhGltONdvyWq8LH016Sl0O4s/b/fjzXmlb+23lXh348xlp + g8/5TA0DrWQAvxIDF1LgUgFcaeDPy538erGfH85P8MnxhVw40M/ze1t5dEcj96yrZZdcXxkaZelgKYPt + hXQ25FNTmkFlSQ6Dfd3s2rGDZ55+louX3+C8Mm/vy5c4fe6CCoAVyKsAX0XHT5/n+P8BgGX7P5ZPn1dA + 74X/DYDP/QWAz6kA+MSZ0xw9NZX9+xf0PXzseVXPvHBELZX1R0/+EwBPrTt2emoO4P8EwK/8FwB+hbOX + ZN2FM5w6f4KTZ1/gzNnDnH3xcU4/dy+nD+7ihQdWyrsa4ZkdbTy9uZYXttdwZk8dZ3dW8OLaDF5cnsSp + pQmcXRLHy2ORnO4P5FSnF+d7fXljNJD3loTw1iJfXhtz58q4B5fHPDk34MFRcXYPSXD/ZLM7j7Z481CL + H/c2hXBrSxQ72qQe9OaxY7SazQvbGOqsoiA3gehIHyJD3EmO9qYoPYjawkh6GjLobcihriiV7PhIFgT6 + siA4iNioSAnYkqiqqqCotIgEBUyJ4+rs5oibhxP+/h6EhfmSkhJFfn4iublxJCUFkZEZKsFyKj0dxXS1 + 5FGWF05Jtj/lOX7UZPtRn+NDU443LaKmLC+Ko23JCTElLcCQVAmOssNtxB65UJTsTWlWCK21mbTW5ZAc + G0igtziBYeI8Z6dRmpMmwVigOHv2ZHhJUClBWLWnIZPBRmyJNOS2GAPui9Vlf8w8HouZzRPizByMn86T + 0t8+IX3t49LXPpo8myczNXiuyJAj0saeluWnkufyZIr0J2kaPJqhzcP5BuyTfuveImP2il25o9iA24r0 + Ve0Vh+hvADwcyMOdHuyts2N9gak6BPTCDH2WFFmyqFgBwFaM5FgwnGHMZI4Zq0ps2Ci+wo5GR7Y1WKkA + eHOtIZtrdNlZq8ftjUZi00zku5rxWIslT7XZc/gaAD7cZs3TjSYcrNHhcJ0Wxxq0OCH9woUOfRUAK9m/ + CgB+VwHA3QoANlDn+1Wyfv8CwJfq5qoZwW80zOftRi3el+M/aVNG+7BUAfDXcozS13xSN4+Pq2bzSeVs + PhV9UDaD90qn81bRzVwtns6HCgBuFqewSYd3m4y42m7DmTprHlf8EXl/GxK06PS+gWpX6Q8Cb2JJhhG7 + at3Z2+LLplJxylN1WZKmx45KRx4fCOO50QheGAnhUIcrD4vvdKjelFPdNlzos+GVDgMudelIX6fHhyNG + fCx9+Afie3w8In3lkGhQARtWfD1sz+eDdrzXbcX5On1eqtDkmeK5ck+zeLJE/BAFANcb8kSjKQ/WmrC3 + woi7ay3Y1+bMgR5v7pdvurfWir0SVN5dacbd4r/dVaTFXQVzuDdvpvQxs3m4TIsDlXo8Ksc/0WTDU50u + HOr14mCvn9QDf/a2BbCuzpf+AnfqMt2kvfmQJW0uJT2c5Ox4USJxGQnESCAYlZr4NwAOUAGwMgx0JOEp + 4cSmBpOUHkB6pg8F+V6UlThRVWZNXZUtTWLb25sc6G53ZrDXk75uJevXlOYaK9qlHtaWmFKSpUNZpi7V + ytDPUo/bxS8danJmidiXFYMBrBwMZnmfL2MtTnTXmEtAas5YpzPjfW70S53rlLrZUm2hZv7WlBrSUmdG + j9S/wR5bJuQdT0hdmRg0YkyBv33aIt0pIKwMC91ty7C8l4FWL5oq3chNtiM+zIGoQDdC/dwI8HLF19OD + AL9AAvyDCQwIJSQolOCAEIJ8/Qn0UWCJN56uLni5ORMeEkBeVoqa9THSr8wD3MvSkR6WDfewcrhLnkX5 + T+ZmJjurJfCUwLepSILOMglsq1jeW6+C3ikA3KxqzVgLa0ba1GxfZbuSATzeUslkexXLehpULe1uZHGX + LHcrALiRlf0N6ry5U2pkRU+dOvSzAn2XyHUVkLykSwLstnJGGguuAeAC1khgv0WuvXtRJ7sXdrFtrI11 + gw1qBvBkV4Wqhd2VLJbfywfr2TDeylbZb8t4B1tH29k2MgWAN8l11/bUslyut7S9gjWDjWyekG1Letix + rJ+ty3pV8LtxsTKccxfrxpUM4HaWyXEKBF4i97tcgdjyLhTgu2FCGSWiV8pu1o92yHtpY9VwMyv+gsBy + n0oW8BT07WDNoi5WL5RzXgPAK2T7kqEmFg3VMSbP2NeZT2dLBk31CTTUxdJYH0NzSwIdnSl096fTOZxO + 22gqjQOxVHWHUd4dTFlXAMWdnhR2Sh3pcCKzw47MTlvS2q1JarcioU2BwGbENpsS12xG3LXlmL+Gb5Z1 + US2mRKnw15w4Bfr2WKlKEhuQ3CNxntTXKegr6rMifcBWVcagg5T2pPXZiWxJFVuT0i7XbrMls9WBghYX + iptcqe/wp2cwiv6+SDpaFQDsTlaeDak5NmQUuZBZ7kVGuQ9JJR7EFroTV+BGbL4HaRWBlItfNrSqgc13 + L+W+p27n4PHHOHHhKJfffInLlw5z6sT9PPTgMnasaWDnomK2DKSypi2C5fU+rKx1YUOjEzvEJt3T7cpj + Q64cknt+dtCG40NWnBgw5WSvISfEl35RGWa5YSanm+bwqvxWprhRsoAVCPyBlB+NWPKJ2MkvBiUO7Ffg + r0h8778l7fjrCWt13iYlRlIC+A/HzeRYU94dMuSNfh3eHNblnXGJp5ZZSsxkwyer7Ph0jQNfbXTj2y3e + fLrWhTcmzcVH0eOl9nkcaZrFs40zOdo6h5e6pf8ZNeLVCXMuTopNn7DnSJspj1TocFvqDDZH3cjGkLki + Xdb467LMR59JBQC7WdLtYk6Hkxmt9sa0OBrSZKdHi4Mx7W5W6rDP1Q7mlNmaUWxvQb6jFQVutuITOJHv + 605ugAf5IT7khfqqwz4rADg9yE9ioUCJ4SPIjV2gDtGXK/Y3T3yegtRU8T0yKc/LFT8jl+L0TDKjY0gI + DibKy4Mob3cifTyI8PYk3MebEO8p+KtkAf83AI5UIbAvwe7eBHl4q/A3yDdQ7F+g2MEAkuQeytLiaCvO + oqssh4rUGJKD/g2A3ZyccHVyxtnZGSdnV3WY/PDQGOlLcqmvbqCns5f2lg5VvV19Ujc7GOofYnxknJGB + ESYnlrBw4TJGRiZoae4gPS0Xb69AFYxYWjuoANjJ2VvV/x0A/1vW9m4q7LVXh0v+TwBs9Q8AbKnIxhkz + czuRLdYKiPH0Jyk5k67uQVat2cSGjdvZvm3339qyaQfbtuzi9lvv5Pbb71bXbd68g9VrN9LS1klMbJKc + w+/v7N//BMBTy/+HVMj7f+r/NwDsIX6vBy6uytDQfwFgUzUDWN9YC30jbQxMtDA008TMWgdrOwMV/lrZ + K9m6/wmALR21sHHVw8HDCCdvYxyuAWBl+GdrV0Ns3IylNMLKRe/asNHzMbOdi4nVTEysZ2JuNxdTqzkY + mM1A1/gmNPWvR8fwRozNZ8r71sDb25KoKC8VAIcvCMbJ3RlTO1uM7Zww9wzBMbqYBXXLqVr+CGP3XmDb + C9+w/41/8cwnErKKjnwMT772C/cdf/f/Yeyvw7WstvZ/GItmdXd3d3d3d3d396K7G8RASlCxUFRABaVL + FFHsrm13fd5x3Uvdez+/5/sc7x/nMa+Oec055jjv8x5jsumBE/QsX0VcSQo+8bYExBoQlWJAUqYhWfmm + FJRaU1ZpS4X4IpU19tQ0OFLf6ERzgxtNjW7iozhRK35ueYEFhdlGFKbrUil+cbP4I/3iGy/KMmJLpgn3 + JBtzMN6YJ6JMeDHElHP+ZrzgY8gzHno85qLJYSd1HnJW57CzGg87z+NBx9nstZ/BPQ6z2eWizg43bba6 + 67JN6nG7rwnb/E3ZFGCiEoG3KgJwqBH3BRuwx1+Le73mss9fjcOR+sIDzHkm05pns+14scCRM0WuHE2x + 5mC4EVu9NFnuNI8h23k0m8+mzkJd7I4BI77iz/tbs9rHks2uJtxpr8d9Fpo8YKTG03riW2ur86auNm+Z + GPK2tSXvODnxtvg4bwUGciM4hGed3HjIyIKHDE152sqaS97uXAtw56UgZ66G23A10ZybUq9vN9urBODX + 2my41mTFuTITjmVo8XSS8JVELS5kGPKW1O07Nba83WDJ2zL2vdNtwpvd+rzVpc/7PWK32635qNWR9+tc + eKPEiQspljwt/OhRPxMOe1tw0MOauxwt2eYgXMTRkZXSn4dtfWm3C6LNL57hnErWjixk+4bt7D94mEeO + Hmfvg4+wacddzF+yks7+ESrFBmVkFxIenYinbxCu7n7SVwRip1wFbrLs5i7Lbr6qiFxnNz+8fEMJiUgg + NaOAnv5xlq3cyK57DvDYEyc4euwFDj9+jDvv3MuixWvo6pF7KCJwegFhofH4egbiKf1R8Q/zMsUXbK5h + 6G8BODYUTzcX3F3dcZO+76oI0U6e+PqHkpFVoEp/v2ffQZ58+gTPPHuSI08dUwnBylzAlTUNxCWlEhOX + LHYm9R+kpGRTUlxFd/eg2NLljI8uoKK8lqioePFbQ4mMiFWJvwoSxD5VVNQyPDzG1q3bOXD/Qfbt3cfe + vbu5b/+9cu/d7N5zn7zrbrbuuJP1GzeyZet61m9YzKj4T7UVCTIGuZIRaUJulDE1aXY0pdlTEW5Mqb8u + 1YH69MXbM5HhSX+iG9VBlqQ76xMvbTBCEX+tdQm01ibIRkegTZidDgliS5I9TUj3MifT05x0D2OyZUwt + 8LGg2FfGSykrvC2p8DGnwEWHDPs5pNrPJMNlDpke88jz0aJI+k5ZhAmVUeZUx8ixMdKfpa8qz5gVY0xq + jBFJcYIEY5ISTcT2mJCcbCp1Z06qIC3VQhXxm5VuTU62LcVFzhTkOco+M2KjdWQ8UyMmQp2kaA0yYjXI + i5tHRYqm2AkdunKFP2ap0Zs5i4H02xlIu4Wh9NuYnzuLxYXqLC/RZXWl2JFWO7aL/7ipzZOl1c6M5NvR + Jn2pLMBgKv2zqwE5zoakOxqQ6qBPitjiFEUIdjci21fqI9CG4lCp6yhneUd3CkNsSfYyIcXPmuwwNwri + fMUH8CQx2JposTEKYv0spLQk2tOKcFcrQhzNCbA1w9/GVCUCB9gZEuJkSLSHEQlyfKbYpPJgE2r/SgP9 + twDcETSXgbB5jEaqMRGrxbCUvcGz6fKbQav37bT6TKdN0PwfAnBd4BxqA+ZIOU+upU5LqAbNQfNoD1Gn + J1RLJQB3yP4O39mqqF8lEliBkkq61Ws69f9TAPacxWSQBkvCdFkcqsmkXHdczhvzmcmYnKdg0m8Oy0J0 + WC5Y4KvGqMdMhl2nM+w+Q4Uhj1kMKvCazZAyr7DPXIZ9ZNlnBv3eSjrpO+hwu4UmQa37LdR43UpdwEwq + AmZR7D+TAv9Z8h1mUxwylwqpg9p4TVoz9GlO06EuWYMqaRclUXOoiNegPk2P1ix9+vMNmCg2YnWNFbs6 + nHlgwJNHJoI4OBnDXRNpwnHy6W1JpbhAEYDDhBcnsWSogEO7hlUC8HfvneKXT8/x2xfn+OmTF2T9BB9d + f1Ql/r74+Eb2blJ4pZLmOZ3B+mSGmzL+Sf883FTIWEs589trhSO2qQTgZYO9jLQ20lCUS1FqAhkx4cQE + +eDn5oirjSVe4j/EhARQmpVKR00RY+2VLOqoYGVnOZv6qtk12sChFX2qdNDt2TFkBbuTFiw8IsyfpGAf + fOwtcLMxIdDdntToYLLiwwn3dsbFQg9XC30SgzyozklkXDjs6olu4b71jLcrYmz1lAjcUiOolnWlrBGe + rAi+jUx2KJgSf/8WiIebqumoKqStIp/OqiJ6akvpb6wQXi3XU+YlVqZd6m5WYbKribHOekbb6xhpq1Vh + TJmfXRGcW5XryfXbWmRbGyMtbQzUN9Nb08RAbTNDsqxgsL6B3roqldjcXplHY1EGNbnxFKeGkRnjSXKI + A0kBwuWkr6YFWpEi43yiryHx3trEeqoT6zWPOGl3Cd6zSPKZRYbPHIqkTddGGtGTbMNEpitLc9xYkuXM + fLGt4woy7RlOtxW7YktXmg2dUraJD9CaYEWDnFcvfVRJ1d4TocOiBBO2pFmwL92Cw0lGHInR4ZkoGZMj + NMV30eRIhBYPB6tzf4AaO33nsNlvFjuitdiVbMSONPEpUozZkmrM5nQTdmSZszPbjF3iT92VoMUeadMP + xqpxPFqd83Ktl+W8GzHq3IxR4/XoOSoB+JXY6VyLvkXK23k57nauKgJw1HRVFLAiAF+NmMW1yNmyPEuV + DvqM3zRVJPB5/1u5HHAH1wJn8LL0s6u+07nkeQsXFRHY6zau+E1X4ZWg2bwaNodXI+fwWtQsXo+fwzvp + Gnycr8vnJQaquX8/LdXjvQIN3siR4zJn8kruDK4XzOblYrl30R28UnILb9bP4p0uLT6csODDpU68u8Kd + N1b5cH1TBK8eKOKVRxo5f7iF4wfaeHxvFwfv7WX/nkkeOLyOhx7bwuFHN/L4w6s5+vAKHn9wCY89vIrn + X9jL9ZvPMW14JJCBIV+6+3xoafWkrMSW7ExpCAn6MhhrER6uSZRUXlysGPgEPQoyzSjNs6Cy0IaaQiUN + tCDHXgieE8UZjqTJoJYoTpEiACeHmanEX5UALANcqiIAh/+dAlpPVWbLtsIES0qSBUmyHKtPmTSGVrl2 + f5UTgzUODNbaMVhnxVCdOSO15gxWmdBTpktbgSb12XOpz5xDQ4aUqbOpT5xBnXzMRimbk8U4p86lI2Me + vdlqU/96yprLZI4aywu1WF2sw+ZyQ7bL9e6W699da822EnF6i6QRKT9OlxmzVz7QvkJNDhbP44lqDS71 + mnBjxIS3J015b74x78xX/sE9m/cWzOPzFVr8tMmE37cqwq9AKTeZ8scaQ35dZsD3E5p82TePr3rV+bZf + jhVS/8dCc1hlx59rHfhupQ2frrDkrcWmXBrV5dkecaxrprM791Y2xk5juf80Jp2nsdRrGjtj5/BYoSEv + 97nx4SJfvpYG8csGb/7Y5Mqfmxxgsw1sseIPwe+brPh1oy2/bHbgt80ufL/GgY8XWHJzyIhzzeo8XT6D + Rwtv48HCOzhUPJNHKzV5qt6Ak81mvNRtyw3BzU4lAsiUN9uMeK/TmM/6TfnXsDlfjFrw+YQ5n0p9fLbA + hM+WGPHxEj0+XaXPl5sM+ekeS369z5rf98iz7Lbkt10m/LzNkB836fHDag1+WDCbH0Zm8FP/DL7tm8nX + I+p8t9yUb7c58f1DQfx2IYPf3ynhj39Vw0+N8Fsz/NwEPzbAd7XwbRV8XcGfX5by5+fKPMF5/Pm2nPNq + Mr9fiOXHI358e68Tn68358NxHT7u0VQJwP+qU+OrBg0+b9LiszYdPus14ouRqQjgD0YseHPQmFd7DbjY + ps2zcswj1TrcW6LDymxdhtN0qY/VpEA6d2bYbNLCxTiGz5W2rEmOGLGsKF2SxFDG+c0lPmAeyaHqKgE4 + M1aXzHgp4zSlnBKAM+NkW5y+LBuQlainEoCzk7XJkwE5XwbqwmR16RMzKIsSx0IwkjiNlWnT2JY+jb25 + t/CEfLtnq2dyQvBszWyerZ/NyaZ5nG7V5HybLte6jXlryJp3h2xU8/ZebtXlVO1cnii7nUdKp/NYvSZP + 91pwYtSZUws9ObM8gFNLfXl2gRfPDjnzYqct51osuNRkypVGA67UanGtei436+fxYYvUZbsWn0gb+lCu + +W6Vmqyb8/2kFz+tCpc2l8gfO7L4YWMany6L5o1xf64NefBckyX7MtVZGSTOp/s0cXCmMSTGdTx4Gmvj + pvFoxTxeHbXlmy3e0nbc4WEPeMoLTvv9IwD//FYAv7wTyE+v+PDdaVe+fcKZr/c78c3dHnyx1YvPNvrx + +ZYQPtroz6vLnDk7as3TShRghT77iw3ZXWjKPSV27Cx3YWulOxsr3NlaF8DRxcWcWFXNo+N53NMcxcZ8 + D+4scuP+Slcer3HkRIMNl4QIvjlkzxdLnPhtpzfc58afB2z54yEr/jxixx9PufD7MS/+eD4AzofC1Rh4 + OQ1eLYTX6gWd/P5aPz9fX8DXl5dy8+kxzh7s4pl7Ozi8pY17VzeycX41y4YrGOkoorepgIaKLCqLs+hu + b2bDunU8/sSTvPTKDa5ee41LV69zQaCkfVZEXUX0PXXxCqcuXJFlRQQWXJrCGcFpVamIwi9x7upVFc5f + fUmFiyox+BqXrl37SwC+zPnLlzl76QIvnj/7T1rnE6ee59jJ53hG8PTzz0r5rEoEVsTe589MpYf+RwB+ + 8QVekHPP/pcAfHVKAL72yn8LwK/I9mvn5X1Oy3Oc4sqV41w99ziXn9vH5aPbOXNoKad2D3B8Sx3H15fz + wuZyzm0r4/S6HF5YnsSZJXFcWBLP5YUxXB4N5XKfP5e7PXmlz5vXh7x4c9yTm6OuvDbiyGvS5l8ddeFy + vxOn2m050erA0y2uHGlx53CTB/sb/NjVFMLmpki2dGdy52Qt964dZvlkJ5XlGUJSfQkLVlKpepOXHkh1 + USR9beLIdpfRXJlDVkIEkYE+RIYEERcVTlpKEo2N9dQ31AsBTyFYtju52AvJd8DPz5WwMG+ysmKorMig + sCiBhEQ/MtKV9JhpjA/X0dNWSHF2CAVpvjLW+lKR4U9Vpo+QOzcqk92E4HpRFONIsp+Rap6cnCghYOm+ + lKX7U5jiS2F6EF2N+fS0lJISH4S/lxNRIf4U56ZTmpOm+rdjrIsZma5CrNzN6PQ2YZWM3buEkO6LM+Ch + eF3Vv+qOxs3lWOIcnk2dw4m0ORxLm8szGeo8lanBsXwdTpWbcLpCUGbCKSEUx3N0eDJbm8fz9HikxISD + ZabsFpKxs0CfHUV67CjWY6c4RLsrzXi43YWnh/w5NhzE4U4P7q2zZ1OpJSvyDFmYY8DCAjPmF1oyWWTD + ZKEdE7lWLCqwYmWpLeuq7NnR4sz2Fju2NJixsc6ATTW6bKvT464GQ/Y2GXFI7NjDzRYcabXh6XZ7jnfY + cVz687EWc46JfXuuWYn80uNypyHXe4252Wf83wJwjyIAy7ZOAxkP9bjRosWrzVpcb9LgRqMGN5vUVQLw + B8ofi7oM+HnMhh+HLfiXLH/SpMkHiuhbpQjA8/i0Ro0PK+fwXtlM3iyezuslM/igQexpmz7vt+jxRpOM + 7y1WYq8tOVxowJ0pGswPEtLqOI06VyGZ4liuKbRQib1bym1ZkqHDRPxcVkk97W504chAEM+OhnFqNIhj + Xa48UW/G8/KeVwfsuTFsy8s9SpYLbd7s1+X9EQM+njQRmKmEik+GZXnAkE8HzfiX2OKvJmQMHXPhutjQ + c7W6HCub948A/ES1HkfEX3i0wYj7a4y4r9KQPXVm3N9iyyN9Hhxsd2RXtQnbinS4p8JQ9svzlelwX6mG + SgS+v3guB8s1OFShw4M1hjzcaM6RDnuO9rjxtPilj3b5sq/Dny3N/oyXetGW50V1nj8FOUFkZoaTXZBI + dmGaSgROzE4mJkMRgBMJSUkkUDUPcDShKeFEZ4STkhVCerYfOTlelBd70lLvQXuTE51NjvS1OjE56MPC + EX8WDPvS3+FIbYk+XXXWjHW7M9TqLCTKiEbxuzrKzOiusRTiaseiTjdWDfqxbjSQ9WPBbJkMYc2gF2PN + VuK3mgqplfM7xJ9ttqSr3pzWGjMaK4xpqjShs1GOEf9qUsbapeMuLJtvz5JxcxYOGzI5oMN4vx6Tw8aM + 9Zsz1GlFd6MNLZXSr3OsSIs2Iy7Ijkg/F0J9XQjw+lsADlaJv8FB4YQEh4uNCiMsKISQwAACfLzxdnfD + y12O9/MiU0h1U30F44NCtieHWb1whDULRli3YEjIfj8rhzpZ2qv8k1kht5VCgJX5ehtYMdgsRL5VFd26 + ekwRgNtYK3Zx/QJFBO1m9Wgby/obWNStzMlbx9L+Jpb0NkpdyXpXA8v7lIjgdtaMKKmb21k10MKKvkbZ + ruxT5tdVRNVWVozIdQZbWNQrBLm9XDXf+qL2Ylb1VrBppIGdk+1ilzvZNt7OZnmONSNNck7jFEabWCnb + 1i7oZPPiHrYt6mWrPJsiAG8d7WDLcJtKAF4v91ot118tz7tRrrVjcT87lg1w58phdq4cYeuyQdYp0bry + TivleVePdbFmvEegpLSWdbnOmpEOqS9590kl9XMf6yZ7WDeuHKegQyX8rlbSQC/oVs0FvE6eZf2iHtYv + 7mWtrCsi8MrJDlUaaBUmWlg81sj8oWpGektl3M+mrSmFprp46uvjZRxJpLUjlc7BLHon8+gYy6BpKJH6 + gShq+0Io7/ShuMONok4XCrscye92ILfbnqwuO9I6bUhqsyRBbEGigv8SgE2JVtAqUATgLkUAnor4/Rup + vfYqpPRYC6xkmyXpAzZkik+UNeSgEoAzB/8tAKd32agE4MxWOwpanChtdaOxM4C+wSj6+6PoaFXmAPYk + J0/OyXUgu8STvKpAcquCSa/wJ6nYl4RCb+LzfcitjaJ9rJTVd42z58gODp84xDOnn+KFy89x7vIxTj5/ + kAcPrWHTujaWj+azpj+d1R1xLGsIZlGNF8vqXVnX4sK2Dlf29Ljy4IATR+RZnxH/+LlBK17oN+HFPgPO + KAJwuzovNs3hbONcLrdp8mq/Ie8I33l3zEpgITbTnE8GTfliQOFDYisFnwlnUKFPn88GDPjXpCVfzLfk + kwmxq4IP55vzgdjY98ZlDBk35O0JZc5fUz5Zacvnq+35bK0jX6wXP3arJ99u9+Xzje68s0xs9ZgR5/tk + bO1Q47nWuVLO5UK/Nq8tMOe1xTa8tsSB6wudOSEc7dFq8XELtLgnQ4udCQZsjjRgjfDtpX4GLPCxYNzb + hj4PsUUuFrQ7mtDmbEKHm4z3ntZ0eNrS5G5HtbM1pXaWFNhbkudkTZ67PQXerhQFiI8RIr5EqJ/wH/8p + ATjYn4wgf9KD/ciNDCc/Tpn3N5Ei8XGK01MFaZRmZVCWm0N5bh4l6RlkxcaQGBJIrNigOH9PYgK8ifH3 + Jcp/KuWzIv4GeitisB8RfgH/iL9/C8ChXn6EePsR5BuoEoDDA4KIDPCXa/pTmhpLa1EmnaXZVMhycpAv + Qc6OeNnb4eXijLuLCy5KZJurK16esi8wlOiIWNKS08lKzyY9NYPMtAyyM3PISM0kLzuPgrxCCnILKCkq + F1RQmF8ix2UTGR6Ph7sfNjbOWFv/twDspAig/w8BWFlX9qvEUSX1skoAVqKAlVTQ7lOwc8VGYG3roipV + y3IfCytH1T5FDAoMiiA1LYeS8lrVnJxNzZ00N3fQ3NRBQ0MbDY3ttLZ209bWS0tLl6CbuoZWsnOLCAmP + wd0zQCXUOgqcXJR0s4poK1DK/4Cjq8+/S0XolfI/oRKAlWWV+DslBqsEYGflvf5TAHaXeneX493kfi4q + AdjW0RZLOwvMrIwxMNPFwFRHoI2JpQ72rqYCM2ydDbFWIoAddLFw/Bs6qoheGzd97DwMsPdU5v2dmgfY + 1t1Ithti46LMGWyAlZOSOlpbFe1rZjUXQ7PpGJvfgbmNMufvXIwtZsm2GaoU0MbmM6SO50p9a+Al/SUq + 2ovE5DAiYsRfd3fCwt4ec0cXTN2DsQmXeqxYTOHEIVq3vsDkA2+x9cXvOfAqPPiaUNcbsO/sV2x+5Arj + 2w5QMzJCRH4M3nHW+Avvj0lTBGAD0nMMyRVOWlxqTnmlFVU1NsIT7GkVPtLZ4klnswetdc40ldtRU2xJ + WbYRJWm6VKXr0ZZlwFi2CSuyzNiaZs7diaYciDXlsUgzjoWYccLfjKM+4le567HPWZPdTurc6yJwncd9 + LnPZ7TyHu5xmsdNpLttd1NjiqsVGdx02eOiz0cuQTb4mbA4wZUugCduDDNkVos99gbrs8dfgPp+53B+g + yWPCEZ5KteR4po3AiuMZspxhzZEEU+4P12erlxrL7OcwaDmbdrM5NJqr02Gvz5iHOUt8rFjrY8kWN1Pu + tBNubq7NISN1ntSbx1lddV4x0OaGqSFvWFvwjpMj73i685afL6+KnXhRvsNTZtY8ZSTvaSa+rZsjr/g5 + 8UqwIy9Hid1MtuCmcIO3mu15S/y5V8Xvv1JnwekCQ46laHIsSZPnU7S5nGvCzUob3qy15qb4yW+0mvBm + pxFvdunxdpc+H/WY85mMm58LR/y01pH3iuy5liT+dIgBx/yNOCbt5Akvaw44WnK3vQ3bHZ1YL/1oiXMQ + w24RjMZksq65l33rt7Jn124OH36cx48e59Ajj3PX7n2sWr+Z8YVL6eobpkr6cXp2IWGRYlu8AlUpl909 + p+b/9VTWZdnVTbEvUxH5foGRxCdlyXmtLFm+nu137mHf/Y/w5DPC00+e56FHn2bHrr2sXLOVsYml9PSO + U1nZRFxMGv7ewfi4exMeKLwyK52u1nqG+1tpbiglMT4cH6lrLw8v1R9lPOU5POXeQeJT5uUXM39yCY8+ + 9qQqpbzyW8T5i1d4+vhzbN2xi5bWTpLSlLTP6SSlZP6D3LxiadetLFy4nC1b72Tt2k1in7pITEyT6wpf + joolOiaexIRUcsVGKddZumwV+w8c5Olnjsn9HuWRxx7i0aOHpf4e4bEnH+Mh2XbwwQfkmP08+OB+9uze + xJIFbTTVJMjY40yetM2yRCM6i+wYr3KlJ9uS9nhDOmOMGU9zYH6mG13RtpR46ZNso0GMjRbhiuhrrUuA + tQ6BggBrbYJlW6yLMQkuRsQ56BFvp0uK2JZMDxMKfa0pCbCmPMCW6kBbKnxl3HTRIU3afIrdTFIcZ5Hm + OocMLw1yAnRl7DSmWPpneYwlJYKCaHNyIk3IVKZRjDYmKVYQb0KS9J9E6c/JyeakCJJVArAlmdK3srOU + VPDCBSo85Ht6UVDgSFKSEQnxenKuHhmJuuQk6VAobbwqTVslAHcqAnC2MkXiLPozb6M/4xYGMm9lPH8O + C4o0WVKiy3LhJuukv2zq8GBDuw8rGn0YL3OjJdmKkkAjsjz0yHI3Jkt8hlQnE5IdjEhyEriYkCL9OV36 + c3agg/gFTuRKP8wNciTDz4YET/EjA53IDPciJ9qf1HB3YvysCPc0IdzLlChvsbU+1kSJDxLhbkuo+B1B + DpYEytgQYGcqMCHY2Zhoqe8EXzMyxSaVBJtRrUQBBxnQGKhNS6A67UFz6Q2dy2DYHJX4OxAxl57g2XT6 + z5ya99dnOk2CBkUADphNQ/BcmkLVaQ7XoCVCh7ZIXdqlbA5S/0tQVqKK1VUicLesdwbMpc13tgqdfrLs + M4t6t9uodZhGre00Wp1uY8BrFvMDpT4VAThYk/l+85iQbeOeMxn3mMIC77ksD9QRaDNf7OOI+2yGXKYz + 4D5LMFt8NHkPBV5z6fNWU5XdHtPp8LiNNo9baHG/hUbXaVS7TaPcfRolHtMo9b2dIv8ZFATMIj9otvhp + 8yiOUKciWp3qeE3qkrWoSdKgPF6N0pi55EfMpiByjrRBNcrj5tGcpkl/rr4qFfTOdifuH/bg8Hw/DsyP + YOdYAssHUultTqGmIonKsji6ZXnpaBEP3jPKjfMH+PqdZ/nxoxf4+dPTfP/h83z2+hO8fm4/p49s4fBd + k2xd0iRcsJSx1hyGGrMYbcmT5UJGGhXxt4yJ9hoWdil/5O1g6WAPSwd6VAJwU2mBSuQtED6fEhUifNcT + b/EdArxciVf+9JeXwWBLNcuER26e6OSuhV3sWdzN/ct6eHjNEDuED7ZmRqkCHBQBODc6hLTwQLztzHEw + 08PHSXhMVBB5SVHiX7pga6iBk/ghCYHutJZls0p43LYVY6yb6GX5ULsqpbMiAA81Vcp7VDDcVMFgg1LW + MNJcK++hiL9TYvCUKFwv22vorCyirUyZB7iQnppS+huUP1bXMd7ZxHwlZbRg/l+Rw2Ntck5rteyvUmFE + MCbvOK4Ixq0NUrbINVsZaWqXe7cxUNfGYG2bSvwdqG8RNNJbV62KAu6tLaFbiT4uz6I2P47CZH+yo91I + D3UgI1Q4YbDwuiALEn2NifXWIdpTkyj3edLX5hLjNZt4Qaq01/wALSpCDWmJtqA7zoaheAXWDMZb0Rtn + SXe8Od1JVvSlO9CT6UBXpjMd6Y60JdrSEGFMrZ8m9b7z6I7QZmmiMTvTLDiYbskjYp8fj9HlaJQWTwge + jtXigWgt9kdocm+IGjv856oE4J3R2uxMNmJLmhHrU41Zm27C6gwzVmWZsipb7Fa6PpuStdmVqMH9seo8 + HaXOWenXL0UJf4tU5/XoeYJZ3Iidwavxd/BK3C2CW3kl/jauxdzOteg7eClyBlcjZ/GS9I9rMfN4KXou + F8NmcDboNs7438q5gNu4FCjHBM3kqtiUK/7TuST97oLP7Zz3m875gJmcDZjOGcHFYDkmfDYvyzVeTZjD + G2kavJ+rwydFBnxaJpxREYALtXgjbx4vZ83kJSX9c8FMrhXPFkznukoAnil+iBbvTFjy5lJ3Xlnux5V1 + kVzZlcPVB9u59PgIZx6f4LlHFvLMo8t58tE1PPHENo4eu4+jzx3g6IkDPHN8D8dP3MdTT9/F0Wfu4+zl + p3jrw5eY1toSQktTIE1NQdRW+5KfY0eKDDhRkfqEhugQJgYsMkqX2BhlUNEnTyq7OMeS8gIZ6AodqMyz + EzgKnCnLciY9ShpRqJEQsb+jgJWoXxkoZHBTIUwGsxAZLIL1ZQAwJi/WnOJkGTjTbamUQa0qzZKaDHPa + S+wYqHaSBu3AYJ3tXwKwBcO1FgxWmtBTok9bnhZ1mXOpSZ9DbdocapJnUZMwk+rY26lNmEF90myaUubQ + kj6XLpUAPI9hwbgMgIvztFki568u0mVDmRHbqy3YWWPF1lJTthcbs6vEhHtKjblPSU1ZpM3BYg0er9Dk + dLsRV3uNuDFkzOsjhlwfUONy521c75/BR4s0+XG9Kb8pou9mE9howp/rTPhtuQE/L9Tj2xGNfwTg74e0 + +WXCkD+XWcA6WznWgZ/WWfPlOks+WGXK9cVanBmZy+PN09lbpKTHncaygGmMOU1joRj8LdJAD+fp81KP + IgD78eUKH35a68lvG1xgg51cz0pgwZ+bLPh9gyU/r7Pipw22cg9Hvlpmx/tjFrzSbcCz1XN4TBrawwV3 + 8GDhDA6XzuVItQ7HG4x4scWcV3rsuSl4u8uWdzvMebfNiA87DPlXrwlfD5ry5ag5/xoz5fMJYz5fYMxn + Swz4aIkWn67S5putRvyy25zf9ljDfsE+a/6815xfdhjx42Z9vlulwXcLZ/H92B38ODSD7wdn89WoGt+u + MOa77Q78cDiA3y+m88e7pfz5ZQ383Ai/N/Pnb03wq+CnekEt/Cj4oRq+rYB/FcGHufBOJtxI5efnQvnq + flc+3WzB+/O1+ahXQyUAf6kIwPXqfNaoyWet2nzaowjAFnw2Zs2Ho5a8NWjCDWUesDZtTjZpc6RWCE+Z + Pmty9RhJ06FeDEN+6AwyQmaQFjaTtNDZZISrkR6pJQOLJvH+84gRxyAuUE36gToZYrgyFLE3QUegJdBQ + lRnxsj1etsXLviQFWmQJIckVcpebqi0DniYlCbOpjL2N5thpjCffwpr0W9iVOY2DebfwZOl0jpdN56nS + 23my5DYeLbyVI7J8rGo2z1XP41yDDq/1yPsMWKvm/r3YosMLjfN4umYGT9TO4vSwBReXuvHSOn9u7oji + rbtieH1nGNe3BHJ9rQ83l7hwc1TaQJ85N7uMuNmqyxuN6rzTpMbHrRp81qYI6up8VDOX9yrn8Vm7GT9M + ePLrqnB+35QAOzP5eUsaX6yM5q35Abw06MrTddK/UmayNHgaA57T6PGeRrfvNPr9p7Fa3vGRCjGWI7Z8 + u9Gb3+52hUMu/HHEjT9P+agE4N9eD+CXtwP59d0gfrnhy/dn3fn6iDNf7nHii21uvLvChdcXe/Dmcn9u + LPHg3IglxzoNeaROj4Pl+hysMONQrR0Hm93Z3+bL7g4/7m73597uMJ5aXsgzK8s4OJzO5ppAVue6sr3Q + nQM1bjze4MBzLdZc6bbkbbnml8ss+fMu6W977PnzgCV/PGjO749Z89sT9vzylBu/Hvfmz9MBcCkCriXD + 9Txpk9JOX2vh9xs9/PLqON9eXsSbz4xw/lAnz+7u4JFt7dy3uonNC2rE0ShnvKOQgaYCmioyqSpKp7Wx + khXLFvPQ4Ye49NI1rrz8qpRTc/meu6qkdb7GC5cUAfiyCi9cuvIXlOXLnJZtCs5cvqLC2SuXBVf+EYJV + ouxfUEX/KpG/yty/589xUhF/T53k2PPPqvDMcydU4u9TSvkfArBKBP47SvjU8zz7wileOHdGNYfwhauX + 5dp/Rf8KlGdXoo2nIOsvy/5r57h45UWuvHSSa1eP8fL5R7ny3B4uP7lF6mkhp+/t4fktVZzcUMzZzcWc + 25jHyWWJnFwUzYviqJ6fH8WlsVAuD/jLt/LmpU5Xrne7Sn925kafvcCWG/3WvD5ow/VBey52WfNimxUn + 2+w50erE0RYXHml04UC9B3c1+LGpIYSt3enct7SRB+9cxJbVozQ1FBAXF0BEmKeQNH9ys0KoLImmv7uY + yZEGOhpLyFKcySAlSvjfAnBrawudnZ1kZ2cQGhosRN4RD08n/P3diIzwERKXQGNjPhWVqUL2AsjODKWh + PoPFC1ppb8ojPd5bHFVXMmLcyIn1IDfWlfQwazJDbSmMdSdf1mO8jAh20qIoyZtWZc7f4liK0oMoTAth + qKuSkb56UhND8VcigCOCqSjOk/E8g7gAV6IdjcgRktskZG0ywIod4uDtF3/gIXHQHkvU40mxW8cT1Tgl + jszpLHWBBiezNXheiOWzeTqclPHyTLUZF2S8vtJgy4UKC57L1+dojg6PS/mIEv1bZsqdhQZszNVifb42 + mwp12KZEAMv4e7jDlaODfjzV78+DrW7cXWPL5jJLVhWasjDXkAnBWK4ZE4U2zC92ZGGBPUsKbVlRbMOa + Clu2NSsCsD1b6s3YUKvPxmpdttbqsatOrl9vyIEGEx5qNOexFkueaLHh6TYbnmkV+yBj3YkmI061GnK+ + w4CXlD969ZvwhuCtPhOU+X8VAfi97ikoaeHe7jZS4U1ZvtGizY1GLW42afJOqw4fdejxLzlPEYB/GJIx + slOfT2Ssea9CSfk8l49r1Pm0VoOPq9V4X7a9UTKD10pn8L5c45N2A95t1eeVej3O1piIbTdmf44WG2Jn + 0y/ETyGZzWI3xxM02Vxux6YSSxanajIcNZ3RmBmsLzBmb7O04R5vjg0GcKLfh+PdLhxrtuR0hyXXRxx5 + Y9ye633GXBfH8mavNu8O6fPRhAmfL7Lik0lzPh425qMBQz4ZMuWzUWu+WeDKN4u9eL3HigtNhpyo1JSx + R40jZZo8VqXLIzV6PCjYX60I+QbcW2PEHqnnh/vduL/dnh2ybX3uPHaU6HJ3hQF3letyb5kOe0rV2Vei + xr4yDfaXa7K/UpdDMj48LN/n8Q5Hnu724LEOL/a1+ch39WdRlQ/dRT40FQVQmhtAbnYoBUUJFJWmk1WQ + QnJuEnGZigCcQHCyIv7GCiKJTAsnKSeCnIIw8vL9KM73pKHSk/4OH0Z6PBjtdGGi242V44EqLOhzp0Pq + vrZAS0iaDcuH/Vgh7bKn0oyeclOGpX1PSjtbKrZldb83m8f82TYRxLbJIO5dGs6O+f4s6bBhvMGU8SYz + xpvNhaxZiC23oKfBkvZa8XEF3U1WDHfbsWjEjVULPFi71JU1C6U9T5rJNkPmDxqwcMSUyX45t82cxjIT + 1Y+/2XE6xAboEOljTpinPcGejvh5uODr6aGKAFbSP08hlOBAIcxBwVIGqARiJf2zpxzr4+1OckI0dTVl + jA10qgTgNYtGWbdwlA0Lhlk/OciqYdne18KCjhrmC5SU0EsVsXaojRXDrawcUUTRVpU4qgjAGxf1qaBE + uSr7VZGyA80sHVLmSGpkQZciCjdKXbazZqxbJZquGetiuRy3uK9BNa+uIv4uH25jtZDulZPdrBhTfgxQ + 5lGqYkF7KUu6yljdV8nGwVq2jTSxQ+69baydrePtbJpoY938v7Cwg3WLutmgSt/c+08E8BY5dos82xa5 + pyIAb5TnWy/X3yDvsWVBN9uX9LNtaT87Vgyxc+UoW5ZIPci+xWI3l/Q3yXIXG+YPsGnRABsnlUhfeQ/B + OnmfdWM9KigisRIp/A8mOlg7v4t1cv31i3rZsFiJKu5jvSIGyzYlEliJAF462srycanbBe0sl3dYOtHE + guFahntL6OnIlTEgg8a6ZOpqE2loSqKlJ5Oe0QK6x2TfaAatQ0k0DURR1elPSas7ZR1ulHc6U9ztTFGP + M/k9TmR12ZPaak2StMckaZuJLWbEN5sS22RCdJMxUWIHI1ukbDUlrsOC+E5Lkrtt/gO2KiQokcTtplKa + kSx2Ib1fSf/8b6Qp6aG7rUjtsiRN7Gx6kzW5DfaUNrvR2OFPT28EPT0RtAr/rKnyJjfPiYwcZ3LLfCmu + i6K0KYH8umiyKiNILQkiuSiQ8rZ0xlZ2sP3+tTx0fD+PPfcIx04/w7EXn+TJYwc5eHAD61Z3Mj6Yx2RX + Msu7k1jRGs3ShiCW1Pmyqln6aqc3u3q92dfvyYMDLjw+LHZmyJbjg5Y8JzbxVK8+p7t1xFZq8KJwhTMN + czgv/u61Lj3eHDLjbfGZ35I++Y5whI/7jFSC7yeCj3vExvfIsuDTXj0+7dfns3FT1Z9jP5kwVWVY+HC+ + KR8I3p9vosI7gg8Wmamifz9braR+duRfG5z5Zpsn3+3w5cutnny4xombi8y5IvbgbK8mL3aqcbpHjSvD + utxcaM4bS2xU80HdWOzKyW4L1Xzsj9WZ81C5FXuyLNkWa8yaUH2WBhix0M+SCT9bBrys6HK1oM3JhDYX + U7p9bOjxd6Tdx4FGsSVVrnYUOdiQY2dJtpN8Nw8HCnzdKQn2oTQskMJQ/38E4GxF/A3wJc3fm+ywEPJj + oilJTqA0PYWS9FRK0qTMSKU0M0OVCrokPZ2c+BiSQwNICPQiMciL+EAf4Up+xAT6qyJ+g7x9CPDwJtRL + ifwNVAnA0X9BJQB7+xPiI8f9JQCH+gUQ5usjNtGb4sQoWvLS6SjMojw5hiS5drCzE94O9ni7KhFtzri6 + OqmigD09vcQO+uHvK+cHh4mdDFWlzQ9R2cxQwkPCBRHi54URHRFNXHQisVEJRIZGEyS21ccrSK7ni72d + K3a2Slppr38E4P8tCvhvKNtVIrGLJ0pKV9X8u05KamhlfmC3f8NBKV1lu5tqnwIl/bOyz8XVBzcPP9Vc + wGERccQnpKkigv9GckoWSclZJCZlqqDanp5LfLL4nnK8T0CYKn3sVOTuv2Ev1/2fcHTz+6uUd/2r/N/w + 70jgKQFY9f6qCGMlzbQy/6+bCo5S9w7yTexdHLBxssPa0QoLW3OMLQ0wstAX6GJhZ4ibry3O3lbYuZmo + hFxLBz3MHf+Ckw5WLgJXXazd9P4LNq4GKgFYJf6qhGMlelhb7qGOqeUcDExuw8j0VsysZmBhPWcKNnOw + tp2Hrd08qWcN+U5aeMr4GhnjSUJyCBExgfKOjvKsDlg6u2HqGohVSD4BpQvIHt5LxcqnaNtxgcWPf8K2 + 079z51m468Vf2XTkPSZ3Had+wXqymhsIEz/EN8GawARD4jKMSM4yVAnAOfnGFBWbUiE+c22dNc1N9nSK + D9zT6il+gjvtdc60VjrQXGZLbb4ZVZmG1GXo05FpxGS2GasyLdiaZsndyVYciLPi4WgrHg+14DF/4bs+ + 4o956LPTVZNtrhpsdddki4cG293V2KHATY3trmpscVNnkxyzwV2bte66rHPXZ4PwiS1+JmwPNGFngPhu + gTrc56/FXt95KjwQpMUT8aacyLARLmCnEn+fSjLhiQRjHok14ECYDls857LUdhYj5rPoNZ1Hh5kmvdZ6 + TDibsszDgvXCN7a5mbLL1ojdZjocMtLkcT01ntdT54KRFlfNDHjVxoy3nO15W/yXN7w9uO7pyUVnV07b + OHDK1JJTxiZccxRO52XH9WA7XomW5TQrbpba8WaTAzdbHbjeYsfFKjNeyNHjeJKGKvr3hTQ9Xiqy4LUq + a27WWnKjVnx/8XFfaxV736GLMuXLJ93mfNVjx1ctDnxV68CHhdZcTzDidLAuJ30NOOVtxglPax5xtOSA + ox33uLiyzd2XDb6RLAtJZFVuObvHF/Hwrnu4785d7LlvP7v3HuDu+/axbeddLF+9nvlLVjA6uZjm9l7y + iyuIiU9FSfPu4emPp1cAXt6BKigCsGr+X0fpT9Ivg5UMBvnl9A/NZ8PmXdy9+6AKhw4/ySOPH+MuWV69 + bhtLV25k/qJVTM5fQUf7AGnJuQT6hqrS6EeHhFGUnUlvW4Pww1aa6kuE10o7lXr29vTGy9NPEICvPI/y + p8L8/GIWL1rO0aeO8+prb/LOex/x6o03OHP2Irv3HKCru5/0zFySUjJIScv6B0UlFXR09bJu/Wb27T/E + zl330tc/TFp6NqFhUUTHxhMbn0h6Ro4qvb2yb/3GrTx25ElOnz3LU8ee4uixIxw/9TTPnj4mOCHLx3n6 + +FGeevoIzz93lMcfvpd1K3robEikOseVimQTGsVnHq+1ZV23J4urxS/PFb883ZxFmQ5MpEifCjEm31mN + RKu5xFhrEm6rRP0qArACbZUQrEQCRzsZEuugT5iZGmEmc4m31SbN1UglAJcG2VER7EBtqCMVflbkuuiS + ajebFGn3yfYzSXaaTaqnOhl+OuSEGpEfYUqhEv0ba6lCbrQZmUqgVLQJKbEmJMVNCcAKUpIsSE40I0El + BluQkWFNVpYN+QUOVNf40NikTAfgJdstSE8zJT3VhOw0Q/LTDChO06U6Q5fmLB06hEf25GowmDuHgZw7 + 6M++XVWOF6mxoFSXhWX6LBR+s7zeXnwld9Z2BLC6LZT5NX40p9pSEGhMupchmYrI62NHuqctqW7W8l7i + E3rbkSz+Q6qvA+lBLqQJUgOdSZb1ZD8HEnwcSQ5yJyPCT95Txv4gNyLFtod6KBzGggjxSSLlGlFeDkSK + DxLu6kCIsx3BTjYESb8KcrQg2NWUKE/xWf0syAyyoDjYgoogU2pUcwEr8wCr0xY8l+6QOfSGzqZP0Bs2 + m67gWaoUyc2+M2nymUGD73Tq/Kar5v1ti9SmV/ryUKo5w+nKnNDmdEUbyLU0aA5Qp8VvHp2BanItbfrD + dOkN0aIjQI12f7FjUrb5zqXBQ4kCvpVm59vpcpvJsM9c5gdqsThUh0WBmsz3nse4+0zG3GYw6jqDcZcZ + LHCfyzI/bZb6ajEpNnjEbS4DLrOmhF9PNbo9NeiU9tIh6PRSSnlW9zto9riVJuH/9R7TqHWfRoUi/Mp6 + kdc0aYe3k+8/g7ygOeSFzKUgXJ3iKHXKYtSpjNOgKl6NigQ1SuJlu/IbdvQ88qLmUBChYAbVCXPozNSS + dmDG5lZ7Doy589BCHw4simDnRDxLe5MY7siiuyWf9sYc4a65wlcreXz/Ql6/eJCv3jnBdx+c5IePTqmW + 37x0iHNPb+fR3YvZvkzhitUs7i1nvK2IibZiKUsEpYw2lzLZXs0C4YZL+tpZNtAtHLCfxf3dDLc1yrhX + QlVBFqVZKWTGRxId5Eegp6v4fTI2K79h5WUw2l7PBuFje9dMcHjTAh7bNJ8jmyZ4dN0Im/trqE8JIcHT + hoxQ8RGTo8mJDVcJwDYyvnjYSh+LFL82NVZ8TVcsdefiYKJFXICMv3VFKvH3vk3LuGfdErYvHRe+2yXP + XcNAQyn9SipnQZ8S0VunCMHKvL1T4u9kR5Oq/FsA7qoopr20gLaSfLqriumrr2SopZZxOW6BSgBuVom/ + SqTvWEuNSlhWzREspSr1tJTKPMCjzXVSNjHc2MxwQytDje0M1gtq21RRwH0qNNJbW0OvPFN/XZnqGbur + 82gpTaYiI4TiJB/yYt3JiXImM8yetGAr6VemxHjpEemhRZjLXMLd5hDhMYdYaZPJXvPI8dWmOECf6iBj + 6gKNpI8Y0RxkREuICQ3SB2uVVOzRpnSmOtCT5UJ3tjsd6S60JNpRH2ZMta8GddI3usO1WZZkzN2pFjwk + fe4x6X+Px+hxJEqHR6Nl/I/XYV+cNvfGanNnpCY7gtTYGjhHJQDvSDZkU5oxq9NMWJ5pxhLxe+ZnmwqM + WZylz6p0XbalaLE/TpOnItU5E6bO1QgNrkeo81rkXF6LnsmrMXdwI+F2Xk24lVfjb+F6/G1TkcCy/VrU + TK5GzeblOOF88RpciVXjQsQszobN4EzwHZwJuoMLwTO5LDblSuBMFS4FzOCC4GzQTE4HzeJk4HRO+N7K + yYDbOBsi++W+L8XN4UaKOm9lafFBgR6flIpfUabH+8U6vFmgzsvZcq3sO7icN4OrxXN4qUSes+wW3myc + wZs9Otwct+bqAk+eX+DP8ZWxPLezjGN7unli76j0v0keObCEhw6t5IFD63ng8DYeeHQXhx6/l0OP3SfY + zQOP72b/4bu4X8bHZ04d4erNi0yrqgimvNSf0iI/CvPcxSmwJTbSmCBx8gIDtGWw1yMiwoDYaEMS4sTw + p5qRn2VBUZY1Zbl2lOfaCqlzUEUAl2b+7wLwFIynEGr8XwJwfpwlpak2VGbZy2BtQ022FfU5ltJJ7Oit + smegxo7+Wiv6ayxk2YyBanP6yo3pLNKjJUebmvR5VKfNpSplHpWJc8TAzaYidjpVcTOpEWNWlzyHxtQ5 + tGcqaS/UGZRyJFNDHGYxuvIhFudqsUKuta7UlE3l5mwuNWNrkSk7ik3YVWzMvcVG7CvW42CxNo+WaXOi + QZ+zbQZc6TbkWr8Bl7qlgTXfxuXOGbwzrsV3q834aa0pv6wx4fc1pvy20oifFxvww4QuXw+q81W/Ot8M + aPLTuC6/LTKB1Zaw2Q622vHLFmu+2WLFpxvF0V2jy0tLNHimeyYHK29nZ+o0VoVMY9J1GovF4G+Sxngo + W4fz7Q68M+HFZ4u9+GGVB7+sdeKPNTb8sdacP9aZ8vs6M9lmzg+rLfh+tRXfr7Lj80XWvD1kxpUWXZ4s + ns5DebfxYN50DhfN5kiFJs/U6vNckylnWix4pdOOm112vNNhw3ttZrzfbMjHrfr8q9OIb/uN+WbYlK9G + jfnXmCFfLDDk00W6fLBInY9XyHtuM+CXe6UO9sg73m8NB21gj5UqClhJA/39Gi2+XTyL7ydn8vP4bH4a + m8fX4/P4ZqUB3+2w5YfDfvx2MY0/3yvhzy+r4JdG/vy9mT9+b+DP3xplvV5Q+5cIrKSIroRvSuDTAvgw + C95K55czkXz1sDef7ZTnXyzPJvX/ccv/LQB/NGKp+nHn9R5DLsm+U43aHK3TZ2+5AesL9BkTZ6oxdh4F + odPF0bmd1NAZpIYoUcB/CcBhmsT5zSHaexaxAXNJCtEkI1pXJQBnJyrQVgnAGYkKtP5BZpJsT9L8twAs + KEzToTxZndqEWXQm3Mb81NtYn3Ub92TfyoMFd/B06UxOlM3kePlMjpbM4GDmLTyQM40jxXdwrHwOL9Zo + cb3TnLcGbXi1x5TLHXqc69Di+TY1nu3U4NpyB97cFsBH98Xyr0OpfPlgCp8djOfjvRF8fFcwn22Wulvp + Jt/Vjk/GLPlQvvmHXWK8OnX4rFOLL9q1+LxFg09r1fiwSo0vpI38OO7Jr6vD+H1LIn/emcFP21L4YnUk + by3040KvHUeq9LgzfToroqYx7D+NbkG77zR6/KaxOnEaD1fN49Uha75d58GvO535c78jvz/qwu/PefLH + SwEqAVgRf397L5Dfb/rz0wUvvnnCha/2uPDJJhdem+/AlREXro57cH7Ynme7jXmiWZfD9fo8KOTukWY7 + nujx5InhAB4bC+XBiTAOTUTw4PxYnl6bx9Nrijk4lsqWhgDWFruyo9yd+5vceLLTiRd7bXlpyJK3J834 + YoUJf95tD3ulvx0047cHTfn1Eelvj1vx4xOO/Pi0K78+780fZ4P583IsXMuA62X8cb2OX19p45eXB/jm + 4hhvPNnH+f0tnLiriYe3NHHfyga2Lqhh1VAZC7qKGGkRh6Eqg7rSdBprClk4f4gDB/Zy7uIFLr2kpHBW + 0jW/zNkr1zhz+SqnLyqRv4JLlzj9Dy78AyWV87nLl+TYi3/h8v8pAJ++eJ5TZ0+rhNxnnnuWp08I4foL + ivj7nwKwKjpY8Hek8PGTsu3U86rzlfv+rwLw3yLwy7L9mhzz0llV9O/Vq8/x8tWneeXcYa6cuIdLj2/g + 4sFJzt/bxZltVZzbXMzlLYVc2pTN6WVxnJofxqmxYM4OB3G+z4+LXZ5cbnXlarM9r7TZ8WqHHTc6rbjR + Zc6NblNuSH94uduC89Jmz7RZ8mK7HSfbnTje5sKRJhcONriyu1ERnkK4ezCbB9Z28MR9y7lbnMsucVpT + UsOJiw0gI13Ic0EUNZWJDPaVM3+smY7mMhkrY4gMDSAmQhzP2Egy0lLp6Oigt6eXvLxswiNC8fBwwdvb + RcZbD2Ki/SgvT6ezs5wGca6zc8IoLIimvTWfJQs7aKjJICxACJGQpTAhTlFKejofWfYwIMrDhHQhngUJ + PsT7C6lyN6QsM4Q+aTsdddlUF8ZSlR/HwtFWFo13kpUeTYjcMzUxRq5bTl1lPqkRPiS4m1PiaUmPvx0r + wuy4L9mOw2kWHBFSeVQI5XGxTS+ka3MhR49LBbpcKhR7UqTLmSJ9Xiw14myVGRcarLkidX6t1ZHLQrqf + LzRQCcCP5htwuMSU+0qM2ZKny8osNZZnq7MmX5utZUbsbbTn4S4Pnhzw50iPDwflG9xZac2mUguVALwg + x4Bhsb1DmcaM5StpoB1ZWOjEkgI7lhVasapMjhXiurXJlk3SzzfUiKNYo8+WGl121hhwb60B++qMeLDB + jEeaLHi8yZInm614ptmcYzLePdtszKm2vwTgvn8LwIr4+z8F4He6jXiv15R3+814W8aOm+16vC425s0W + bd4TG/up2JwvZd+PIzLmDpjxVachnzdp80HFbD6snMunNZp8Xq/NZ3WaYjfn8lbZLG6Wz+K9Bk0+lrH1 + 7TZ9Ltdo82ypDg+Kn7MjabYQyVvpdJlGo6PYyoA7xPk1Zmu5PWtyDRmOvJ3e4GksSlZjW7kl+5qdOSTt + +PFOd452unKiy5nn220432PDzQkX3lngxGuDpryizG/ZpcFb/Xqq9M+fiW/w2UJLPho15cMhIz4dNefz + cRu+XujKlwvdudFrzYU2E07KeHi0UpvHyrR4WIncrdTj/kpd9kh5T4Ued4mNv1up6z5n9rfbsqNSn43i + 5G4pEYe+XI+d5TrsKtNhd7km95VpsluglPdViOMu/scDjWY82mLL0Q5nHm11l/fxYGeTLyvq/Bgq96Wj + LFAIoT9FuUGUl8RRWZFKfnESaXmJqvmAI1LjCJW2HSpELzwtQrZFkl0URWlFJGUlAVSVetFR78N4tw+L + +j1Y3OcuxNOdVSNyjyFvRltsaCrUpLFAg5Ema1YOerN6wIuRWgtGBQvl2Vb3uLFpyIetY/7sWhjMPQtD + 2DXfn71LQ2TZn7U9tixpMWNRqwJzFnbaCPl1ZH63M0NCrnsarQQWDHfJccNurF3kxaYVnmxa5syGpbas + WmDB0nETgdxv0Er6shnV+eIXJGmIbz2HcCFlwa4GAksCXG3xdnVSCcD+vv74+Cg/2PmpIje8PH3w9fLG + 19sbH9nv4+mGt5BnXy83EmMjqCgroLejkfH+ThYNd7N0SMj3YKeQ8A6VWDu/Q0k7VSmEvUqevY5FPQpJ + bxJyLqUS2StYOtDMipEWVo13qFIdLxlqknqV/YPNLB5qlfdrZfGAQnIbWdjbJOS+gzUTvaz9S+BdLMcp + cyzN766Wso4Fsr50rJ3FE7JvpJWF/bKvq4IFnWUs7S5n7UA1Gwdq2NxXp8KmgUY2DjaxfqSZNWJ/lfmI + V022sHKyjdWT7ayd366a23fd8FTE74a+Bjb0TmGdLK+TZ1sv91wn91o73saavyKalZTPq0bbVRHIEx3y + bF318q5Kquse1s9Xon37VT86rFME35EuaScdqnmOl/RPCd9L+uU9lFLqY9lwM8uljpR00H+ngv4Hi3pY + t7iXVfMV0buDVYvleoKVYveXjkvdDNcw0l9OX2ch7U1ZNNalUVeXRH2rjCl92XSP5NE9miPIoGM4kcbe + MGo6fQWe1HS5U9ntTnmPOyXSxlUisPTJlGZLkhvNSRTbl9BoQmyDMVENhkQ0GBDeJKUyL3CbObHtwulk + 3PyfiJU2HSXHRYvdTOgwV4nA/4VuS5I6zUhWBGLhEikNlmTWWlPcqAjAgTLOhct4GEZrYxB1NQEUF3uR + U+BNaW0kDV3ZtA2X0thXQHVnlpyTREFdAm0jFazYOs7uh3fw2LMPceS5xzh68gkeffoB9t6/jU2bRpgY + KaO/LZnJzkRW9qaoIoBXtISyojmADZ3+7OwL4L6hAA6Nyjgz4ctTE+48M2rPMfHrTvQZcbJXjxe7dTjT + qcmZVnVON87hdP1srrRpqaYEeFPs+RsDRrwlyx9064s/rPsPPurWU+GTPj0+HtDn4xEjPho3Vv255kMF + 8435YMG/8d5CMz5aYsGny21UUcCfKfxsnSNfb3Hn2x3efLvTmy82u/PeSvFfFphxeViXi/1aAg2ujujw + 2gIT3lxsw9tiM24u9eDskD3PddtxrMORJxpc2J9vy84kc9ZFGLE82JjFgVZMBNgy5GNNt4z1bS7GtLiY + 0uVjI364I23+ztR5O1Ph7kC+ky0ZDtZkuNiS4+FEgb8HZaHio0QEURwWQJEgP8SfnCBfMv28SfXxICvI + n/yoMIoTYihPiac0JVGFklQFScLzM6nIzKAoOZ7MiGCSg71JClJEYPFbgvyIFSgCsJLeOcDdizCxYYoA + /Lf4G+nt918CsJICWkGQty/BXp6qVNIFcZE0ZafSlpdBWWI0iQFTArCPo53YSGc8lShgRQR2k9LdDQ93 + D7GTnmIXfVRQIt68PbxV+Hubj6cXfnLvAN9g/H2C8Hb3xcPVC3c3X5UA7OTogaODu0rwdJH1v/G3CPy/ + Qdn3X/N5/iUC/y3+KmKvsu7gNDVHr7JfgZL+Wdn397pyrrdPsCoaODgk6r8QGByJf2C4Csp6UFg0/sER + uHsF4uLhpxJs/xOKiPu/CbxO7v7/LP9f+/9XAVgRvFXP+m8B2NnVRY5xxsHVETsXB+yc7bBysMLS3gwL + O1OBMbbOZrj52apEYAd3U5RoXgsnfRX+FoEtnHUF2v9AJQiroIe1qyFWcuyU+CvrDrpY2WlhbjUHQ9Pb + MDK5FXPLO7CynY2dwzx5Xg3cPXTFJ9eRdqGDq7suXn5mRMa6E58SRHh0gLyn8rxO2Lh5YO4WiHVwLoFF + o6T27iRv4hBVa44zdOAmq5/5jrVP/8iKRz5l4p7LtC4/IDZ3mPCiHALSAvGLtyY4yYj4DGNSc4zJzDMh + t8CE0jILqqssaWywEb/fkZ42N3paPOisc6GtxpH2Kkc6BK1ltjQVWNKUa0pHtimjWWYsy7RkY6Ytd2bY + syfFnoMJdhwMt2Z/oDl3+xqyw0uPDZ5arPUS+GirsNFbk82CbV7ig3vIsocGG93+EoDddFjrqsd64Reb + vA3Z5mvETl/x7Xw0uddbjfu85rDPZy6Hg7V5WmzMyWx7Xsi240S6BUcTjXky3pBHovW5P1SLbe6zWWYz + nQmzWYyaqTNgrs2whR7z5TuvcDJlo6sZO51NuNvakD2migCsxaP6ahzTV+ekoQbnTPW4YmPCa2KL3nAX + 31V408tuLlx2dOaCjR3nTMw5a2DIq/aWvO5hzY1AG25EWXIjw/ovAVjOaXHilSYHzpeJ/5qhxbOJGpxK + 1uFCtgnXK+y4WWcvsOJ6jTEvi3/7SqMWb7bp8H6XAZ/1WPBdrwPfid/2ba09nxRY8FqcHucDtTjtpctp + N0NOOpvzpKM1D0v72Cv25E7vAHZFJLIjo5C7Gtu5f9lK7t+6lY0rV7Jy+UoWLV7KkmWrWLx0BRMLljA2 + uYiJhcto6+wnr7CciJhEvHymRN+/oQjBrmJ7HMUmKH8M8fQJISYu/b+if5X0z4oQvHWHkhp5N0tXbGBk + fAmjk8uYXLiSJUvXMdA/QV52KaEBESr7GRceSUluNv0dTSoBuKGuWBUB7OcjdtHLB28vf0Egvr5BBCsR + wLlFLFq0nKePPcfrb7zD+x98yus33+bS5Wvsv/9B+gdGyckr+i/xV0FJaSW9/UNs3b6Lhw4/xj337mV4 + ZIKs7Hwio+KIT0wmMTlVuG8BtUoq0+FxNm/dydGnn+HCpUs8e/IEz556hhfOP8uZK89z9uoLnLl0ihfO + PMupF45x8fxzPPvU/dy5YZiR9nTaSrxpyRHfWXjnijY7dgx7sK7ZlpXlVqwssmVxhg1DsWbU+GiQZTed + ZJvZxNlqEmmvS4idLkG2evjb6hIoUNYjHfSJttMhzFSNUOPZRFtqkOJoQL7w8ZJAWypDHaiLkPEzwJqc + /xCAk+xmkOA4kxQPNdL8tMlSsl9GGJMTbab6Dbwo3kpVZseYkR5r+o8AnBJvqhJ+FQE4MV58tFixGVIq + 6aDTM6zIK7BXCcBNzcGqMifHhqwsuU6mBblZphQJRyzLMKQ224DmLD06c3XpzddipEiNocI5DBbMVJWT + wscWVhozWWbIRJkZC6vtWdrgzprOMFZ1xTBZH0ZTurOM9Sak+5iSHeRIXog7uUEy5gd4kBnoSbospwZ6 + kBLgrhJ6k/5GgBtJgVLKMUkh3mREBpEeEUis8qd3bzvClYhfL7sp8dfbiWgfZ6K9XYkUfhIh/Tzc3ZlQ + NwdC3e0I9bCSfVZyTSuyQmwpDLWmNNiCqhBTaoP1aQjWpDVYjc7gOXSFzPoHHUGzaQ2cQ7P/LBr8ZlHv + O5Nav5k0y7HdcUZM5jiwQjjhijIvJrIc6Y42osFfXY5Vo1FsXHuAOn3hegxFGTEQoS/X1KYtSIO2wCmB + uMl7Fs2eM+n0nku/jzqj/kraZ6lTsY0L/DSY8JjDsMt0hpynM+w8k1HBhNtcFnvrCLQZd9dgyF3u4TaP + Hk8NusRGt4utbhU0i11u9lAXyH08ZtDgdbv4aNOoEVQJKgSlvrdQ5Hcr+f7TyQmcRU7IPHLC1MgLV6Mw + cp4qwrdMhbmUxM6lOE6d4lh1CmI1yFd+y5btRdEzVfpJa7oaY0UGrG2yYt+4Ow8uEV95WSy7l6azaaKA + 5WMVLByqYayvSrhJFTvXdXD84TW8efVBvnn/eb57/5QqEvjDVx7n3NM7eXzvUnatFl7ZXyb8qYT5naVM + tMtyR7nwynJV5K/CLxd2NQivbGPFYA8rhvuFTw6woK9TJQC31ZRRV5JHeW668N9Y4sKCxP/zIMzfe0oA + zs1gorOBu1dN8tidqzm+ex3P717Ls3ct55F1I6wV3lgV70+yjz250YHihyaJDxpLgLMNjub6+DpZqeb/ + Lc9OFj/UCzsjTVwt9UkO82ZEeO/uTUt5+N7NPHzPFvZvXsXmxSOqKOC+2mJ6aopU6K6SsrqU/toKRpqV + +XoVIXcqAlgRdJXo4K7KYlpL8mkpzqWzQkkDXc5AUzWjcsykEgXcKce31sr51YwokcUNZSqMNJarMCUA + VzDWVMdocwPDjY0qEXiosU0VBTxY1/KPANxT3Uh3dY2gXJaL6VWesTqPtrIU6nIiqcwIpizVj8IEL3Ij + XckItSXRz5wYL+F/Mv4HO88jxHmu9L05RLnOI0FsV7q0xxwZ74q89Sn11KVCgZeOtEEdWdeiyEuTihAj + mhLt6FQyK2R70ZbmRnO8A7UhJlSK71Dr+28BeHeqJY+mWnEk3ogjUfo8HqnH4Wg9DsjYuidRl7sT9bgz + Vpc7wzTZEaLGzijltzBjNqWasjLdjMVZFkxmWzGSay4wZX6uESuyDNiWps/+eB2eitDkdKgaL8n5r4TN + 40b4bF6NmsGrMberBODXk+/gtYRp3Ii/lRuxd3A9ZgavRM3iWtQcrsdrcjVBi0vx4n/I+umIWbwYNpMX + Q2dwNnQmF0PmcCV4Ni8FTZWXBOdCZnNKyhMB0znqNY2npW8+538Hp4NncVGu+3KiGq+na/BOrg4fFRuo + ROAPSvR4o1CeL0eOybyDSzkzuFw0l2uls7lRcStvNs/kbeGa18fseH7EjQf6Pdk7GsL+Fbncu7aenWs6 + 2L62iy3r+tm0cZgNGyfYsGUR67cvY93OlazbsUZKBWtZuWUFa7etZs9D9/HM6WeYlpftTWaaK2kpziQn + 2BITaUFoiAH+vjoE+MkAGKhHWKgRUUIg48QoKtHBWclmZKfIwJVuSYEMQgXpNgI7ClIcVCmgE0IMBcYk + hpmQHC6I+LcAnBympIc2IlnuoYoAjv+3AFyTZ0dtrg0NeVa0l9rQWW5Nb5UCc4GpwISeCmO6SgxozdcV + kqdFdaoaVWlqVCQr/2yZS3ncbDF2MymNnUG5GLOqxDnUJitRwPPoTFenV4zbYJo6IxmajKRrMpqhwfwc + LZbkG7CqyIR1xSZsKDRhi2Cn4J4iY/YWGXKgWI+HSvU4WqXLcw16nG3V50KHPi+2qPNs3e2caZ7OawOa + /GupMV8vM+bbpYb8JOVPSwz5ftKAb4a1+Ve/IgBr8r0Q958X6PP7cmV+YCvYYQ932vPrTht+vNOKL3eY + 89EWQ26u1eXFUTUeaZjJPXm3sSH6VhZLo1qqzAMcNp0DmdqcahAnd8iFj+d78M0yd35e6civK6z5baUp + v64y5udVJvwgy9+uMOebFVZ8u9yeTyeteKPPlLN1GjyceysHM6dxKOcOHpVG94y83/P1xrzYZM6FZmXu + XyteF7zdYsk7jca8V6fLx43afNGqxzfdRnw/YMK3I8Z8OWrIvxZIg16gxbuTs/lwyRy+2aLLz3eb8Pse + iykB+JAt7LXmj3vM+WW7MT9u0OW75XP5YdFcflmgJnWixtcTc/l6pR7f7bTmx4d9+f1SypQA/FUl/NLA + n38oAnA9f/6miL91KgH4z5+V9NBV8IPguzL4shg+yYF3M+X8WL57KpB/7Xbkw1VGvD+gzketigAs36Je + XZUC+nNx8v9fAvDlVm1ONmjxZJ0e+yoM2VhoyGSWvhg0dYrEGGT8DwE4M0KL9NC/BeDZ4uTMJUmckvRo + XVUKaEUAzkkQB1AlAKuTmaD5F8QBVaJ/k7Wkb2mRm6ZHXroexQIlfUtTihp9yTNZkjGDLbkz2JM/nUeK + Z3GibC4nKwRV81SC7/60W9mXPo2H827lKTEgL9Ro82qPFe+NO/PWuC2vDpvx8pgJlyeMuLzQlHe2e/H5 + gSh+eCydn57M4qcnMvj+8RS+ORzHNwci+O6uAL7b4s1361zlWzny1XwrvpJrfDVoKG3ZgK979fiqU48v + m3X4rF7aeJs5P0548suaMH7fmsgfuzL4cXsyn68J581F3pzptuTxGh12589hs7zLkvjpjEi77gmfRn/Y + NNbJsz9SPY/rgxZ8s8qFX7c7wj4H/jjszO/PevDn1b8F4EB+fz+QP98O4tcrfnz/lAdf73PjvTUOXB2y + 5IVOK051CxntMOWpNn2OtBpwpMOMJ7vtOTHqxYtLw3lxdQwn1ydwfEMiz2xM5timdF7YWcTJbaU8uiyD + u3tD2Nnqx/6uQJ4YCeDkfB8uL3LjxlJ73pO+9MUGS369144/9tnw2yEzfnlI+vvDRvzwqCnfPWbDt0/Y + 8/0xV3466cMvZ6U+LiXy50sF/PpSBb9cbeDnK118fa6fm4+1ce6+Wo7vqOGh9VXsWVHLnQur2TBazvK+ + YnEKCuitz6C5Mo268gxGBlrZc99OTp97kYtKiuaLAlVa5yucVaJ6L17hzMVLgouq1M1TOKfC6UvnOXvh + vBwv+y7LdhUuc+Hq1X/wd3rmqfl/L6lSPz9/+u/oX2W+nxP/fwvASqTwfwrAyvNeunpF8NIU/kMAvqiK + /lUE4DNcvHqSK1ee5eXLT/Hyiw9w+ek7uXh4NRf2jnLx7g4ubK/myrZiru8o4uUtOVxYmcDpBWG8OBzA + iz3evNjmxrlmZy7W23FFSP0rTZa82mrNa+3mvNZhzI0OQ663G/BSuzHnW405227B2Q57znQ581ynq7QZ + Vw43u7OvxZd7OsK4f34hT2zr58T9a9i/YzFDvdXkZMcKEYsgNzeW0tIE6mpSGRqsZsFkG11tlWRnJRAT + FUJcTARJiTHkZGXS090t5LufosJ8YmIi8REn1s9fHNlQHxISgqlvyBPSW09XdxklZfFUVCTT11PBskXd + VJam4OFkiLOVFm5CSD1tdfCx08bDRg0/IazxAbZiL4JlzHUh0t+KqoIYRnuqGOgopaU6k+aqLFYt6Wfl + 0kEh/wmEh/gISUyhs7WednEq85JDSfeXcTjAjtFQR9ZHO4g9seOxDAueylDm9zLiZKYB53MMuVpkxLUS + QbkRV8oNuVhuwvkqMy42WInNtONquwMvtztzrcmRU8VGPJmjrcpYcajYmLsKDViXrc1iGZMXZsxlRZ42 + WypM2dfqzOMD/hwdDOSxbm/21TqwvdSCjUVmLM8TkpapR3+KNv2pBoyI0zeeZ8/8fAcWid+wONeSpYXm + rKmwYkOtJRtr/i0Ab67WY3u1PnfXGLC31ohDdaY83GjBozJ2Pt5gwdONUwKwEgH8fIvyBy89rsrY9mqv + sYyTxrzVY8w7Pf8tAL8r297vM+P9QXPeVSKEu4x4U+zMO4KPuoz5XPZ9NWDB92KLvus35RvZ9q8WvSkB + uGKOSgD+QvyIz2Us/VjGoncr5/GWkg66QVPON+KtdvEvqjV4PG8OdyfNZEXIbQy6T6PdaRptrtMYj1Jj + a5kjO6ucWSnEXhF/e4KmsTZX3rPWTjV38u4aa+6vs+FImyPP9bhwstNO9QecNybdeHehM68PmnGtXUO+ + kzilPdq8O2zEZ4ts+GyhDR+OmfGBEgU8asYnYzZ8Mu7Ae6P2vNRlzplWqad6+aZSpw+XaXOoRJsDpTrs + KdPhbsGdZbpsl+3bq8SR77JnT5s1O6oM2FyqxaYSLbbJ/m2yf0epNneVa3G34J4ygVJWaMk3knbSaMYj + zdZitx14qMmJvfXO7GjwZG2jHxPV/vRWBFJf5EdFXgB1pbE0VKdIH0wkKy+elKxYolKiCUsIJzIpnNiM + CDLyoymtiKO+Pob6ygCaKj0YaPRkUY+Q/n53Vve5sarPlbVD7qzsdWFI2k5zzmw6ijSZL8+xqteVlZ3O + LJA2s6TZhrXdLuwY8eXuyQDuWRDI3qWh7Fscwu4F/uxfHMTehb5s6bNhXZcFa7osWdVtzZpBJzZO+LBm + 1JeFvW4MNtvS3WDOkNTP4kFn1ogPt1F8uC3LXdiyQo5d4cC6pXLeAluWjtgy2GZBlfSVnAQ1EoVkhLjN + JtBJG38nE/ycLfFytcfHwx0/H2/c3T1xdnLFzs4Re4GTgyOujlPCh4ebAicVIkIDyMtKpa6yiFYho92N + lfQ1VDJQVz71r+HqQnoFfTUFsl7EQEOJEFkhpC1CSFUQQtpaJQS2SjVP70SXkNkOsTktQoSbSxhtl/Xu + WsZ66hjprGZQiP5gexXjPQ0sGGhh/kAjI7KvX87taSmhQ+xfe2O+2KRSejsr6OuS5+kop7exgJ66HCG5 + uUy2FLC8o4RVYtdWthSzqqmIFc2lLJd7LmkvZ1FnOQu6yxkXGzrWXcG4rM/vrmRhRwULWstY2FjM0qZS + liloLmNpazlL5ZmXtst+eacxufeogjZ5v7YKBptK5N75dNfkS5uRa7Yp8wwrwncby2QsXqaIvT1T0c0T + qn9uVzMk9nSouVxKIfByjyG53nCb1Js836g8x3hXFfN7algx2qqKDF4vdnnziiE2LO1njdj69cv62LC8 + j7VLulku44mSDnpyuJaR3gp6O4roaM6loT6V2voUGlvTpkTgwRz6RrLpHU2jZySB9oFwWnr8aRRbWi9j + Yk2fD5X9PpRIW87rcCSj1YaUJguSGk1JaDAltsFkSgCuNyCs0YjwJhMim82IajEnttXy/4OoRhPC6vQJ + rzeUdTMSOoX7/Q8kylib1GpCklwnRcaGzFoblQDc1BlER2cEne0RdLVG0d4SJe8TQU19LB0DhSxY2cGa + 7eMs3zzC5Ooe+hY20jVew8L1A+zYv45DR/dy9NTjPPn84zx27GH2PXg3G4X0LlzQyGBPDsOdyawazmLb + ZB7bRjLY3J/A5r4I7hwKZ+94JA8uiOSJpRE8uyKM55cE8Nx8F04MW3Gi/98C8NkuLc63aXC6aS4v1s/i + UrM617v0eaPXiJs9+rzZbcDbHTq806El0FThwx49FRQB+KN+WR7S5/1hIfljwj3Gjflg0pAP5hvx4UIT + FT5abMknSwXLrIQzTZWfrrLnXxuUNNDufH+nF9/s8Oazjc68vdyK6+K3vyT88aUhba6N6nJjviFvLLLi + zSWOvL7EnctjLpwZdOP5Hk+ebvHgYJEdd6dZsTHGhJVhRiwJtmQi0FolAHd5mNHqakSLqykdvsK3Axxp + 9Xeh1seZUg8HcpxtSXW0Js3VjmxPZwoDPCkP86ciIohSKUvDAigK8Scv0JssX3dSvV3I8vMkX/YVR4dS + lhApELv7F0oSY6nKSKE+J4PqjCQKY8NJC/YiOchTFQWcEORLrCDC158QT18CldSkXv5E+fy3ABzu7UuI + lx/BPn74S6lEsPm7exHg5irHu5EbHUadXL85O43i2EgS/L0JcXHG10nso9g+L5UNdMHN3UXspKsKHm7u + Ag8VPP+CapurB+4u7gJX2eaJ11/Cr7ODmwquLmJrXX3F1nqqRGAnZx9c3fxU+H8JwMoxCqZE4ikBWCmV + OXj/jgJWib+KqOyszM0rtvyv/QqUqOC/96miawXKvKBKetj/CSVt7N/w9gnCyz8YT99g1Zyizu4+qgjC + v/G3AOwg+E9xVyXs/i3wuvup9ivlf8NfVf59nb+FYOU9Ve+senYPXKROp+Aq7+Qq11RE4Ckh2F7amb2r + NXYuAlcrnD1tcPezw1Xa5v8UgP/B/yEAW7ko0b9K1LA+Vg56qnmEbR10VVG+ppbTMTG9DQur27GznyX1 + r4aXt6744crvX2YE+hvj5aOPj78pUXFuxKcEEhHjj6u3M44erjh4emPtGYxdaBYB+X3ENa8hqXs7efMP + 0bbjPJMPvc/8Bz9g8K5rtKx+ksL+9USU1OKdFoNPoie+cZaE/CUAp+eZkldsSXGZJVXVNtSLz9baYke3 + +M+9rW50NbrQWu1IS4W9KgK4o9qZTkFHpWwrtqYt35LeLAvGsqxYnm3PxmwndmQ4cVeKI3dGW7M92JT1 + /gas8dVlqa82S/20WRagw3J/Xdb66bDBV4etPnps8dT6RwDe6KbNOjcd1ikCsBIFLMubBNs9NNnlrsY9 + 7rPZ7TaTPR4zeShYkxPJFpzLcxQ48EKWNSdSTXkmyZjHow04GKLJdvFVVllPZ7HZbBaaazBhoc2kuS6L + LPVYZSO+oYMhu+yM2G2hzz4TbR4w0uRRA3WOGmhMicCy7Zy1MddchMe52fOym6MsO3LFwZ5Lyty/RiZc + 0hfbbGfBW+5iDwOseD1SuN4/ArAzrwkfvN7owPliE06laXEqWZNz6Ya8LHX4VoMb7zS78majHTfqzHil + Vo/rdVq82arDB+KPf94tfnyPI9+3OfBtjZ1KAL4ZLzwhSIuzblqcdtDmeWsDjsr9H3VyZr/4X3eKfbo7 + Lpl9lbUcGh7hwXVruGvNKsYG+uloa6euvoHm1g46u/roGRhmaGw+C5aspL17gOy8ElWK9v8Uf72kDyvp + oJVU7cqc4za2LvgHRpGcli/nDLNlx27u2fOASgSev3i1SvRV0Nk7SnN7P9394yxcsoaVqzYzOrKYkoJq + IkNiCPUPITEqhvLCPPo7pwTg+toiEuIUAdgLX7G3Pt4BqrnOfcV2/C0AL168guPPnuKNt97jw48+4803 + 3+Xayzd48OHHGRtfSGFxuUr0TU7NVCE1PZvScvEBh8e56549PHn0GHv23i/HLiCvoIS4+GQ5PoO0jCzy + C0tpbGpTzbW+fftdPHP8BFdeuqr6zeP0+ZNceOkFLt84zdXXznPlldNcvPwCFy48zyuy/dxzD7Fvx4T4 + Z9kM1gTQV2LPRI0Vm3qduXfUk23C87dIO9ha68oyaasDUfpUus8k3fpWUu1mkeSoSYyT2AIHHYLt9Qiw + mxKAQ+11iBT7EW2rRYS5GmHGs4gwm0Oy8PBcTzOKhXNXhNpTF+lMpYyxOa46fwnAM/8RgJP/EoAzQw3J + jDQmM9qE3DgzCuMtKUiwJCfenIw4E1LjjEkWpChib8KUCBwfZ0REhC6RkTrExhmQlGRKVrY1FZWe0pb8 + Ka/wJC/fjpxcG3LzrCkQTlyaa0FFthn1YmNac43oKTCiv1iPMeFeo6WajJTMU5ULaoxYVGvBRKU54xXW + zK9xZkmTHxvEb1o/lM7i9iSxM37khdmSEWRLTpgbeRG+5EcEkBMeSJZAmVc1NcSXlGAfGcunoMyzmizb + kkMFIX5S+pMhvkFqeAAxfu4ynjsTJX5DtK+rCsq2WPEz4gKUbB4+su5NjK83UeJfRPm4EOnrQIy/nVzH + Xu7pSIE8T0mIJZVis2uCDWkI0aI1WIOOkLkC4W8qzKI9eA4tQXNp9p9Nvf9c6vxmUStoDFKjV+p7cb4r + 66sDWVXhy0SWEx2RBioBuM53HvU+c8Uv0qAn3ID+KBP6Io1oD9FVzWVa769Gg68aTYJ2OaYvSJeRIH1G + pRwP0GUyQJsxX3Xh7rPodZ5On/NM+l1mM+gyhxE3Neb76jFfbO+IhzZ9Ylu7BB1e2rTJWNTkqU2DbK9z + 16BWjq11n0ut2Ns6nzvER7uFGr9pVPlPoyLgVsoCb6M4aDq5gTPJDJpNVogaWWFqZIepkxs+j4IoRQie + O4WouRTFqgs0KIzTpChBloVTliZKvaTMoz1TnZFCXVbWm7Nn3JOHloXxyLp0HtpYyv4NLdyliE0re4Wb + drF5VRcH757P2ad38s61R/nm3ZN8+dazfPDyEa6d2ssT+5dzz7peVg4rUbF5KJG/k+1lLOisVGFC+NVY + iyx31LG0p4WVQ8ofaafEXyUCWBGAR9qbaBdu2lhWSGVeJvmp8SRGhhLu50VYgDcJ4cGU56Sr5tA9uHUl + J/Zv4+yDO7n44A7O7FvPYxvGWCNcsS45WNqrt/ie8bSW5lFXkCltzAs/FxuiAjwoy0mhpbxA+mA43vZm + BLvZUJgcwbKhNh66ZwPHHryX4w/ex2O7t4kdX8TS/lZ6hBt3VubTJeisKKCzvIieqlIG65X5gYXzCpRy + tKWWocZqObaE1pIClQDcUV5Md7Xw3DolyldJ61yvEn9Hm6oZFh4+3FDKSP1fEN6pYKxJeG1TpZRyfLNc + v6lB0CScvEWu3zw1929dE721TXRXNdBVVU1HRak8VyFdytzDlTm0l6fSUhQnNiGK6qxQSlP8pR14kRXh + RLKMm7E+wvs89Qhy1iDQaR6BjnMIdZ5LtLMaCS5qpLhokOWiRa6zFvmOGuQ7qZMnyJZjs2R/gZ8+1TE2 + NKe505bpSVOKG41xDlQHm1DhoyXtdi5dEeKDJJpwn3CTx1OsOCK27gnpc0ci9HlY7PGBWH32JBiyW3yk + exMEYvfuCtNil9i+O+W8zSnmrEy3YGGWDaM51gznWjGSZ86iPDNW55qK/2PM/Un6PB2pzZlQdV4K1eDl + 0Lm8GjqLVyOmq8Te1xLv4I3kO7iZcAtvxN/GzZjp3IyeLX7DHG5EqnEjTocridqcT9DkdPRcTkXO5mTk + LE6FzeR0+GwuyPWuiJ15KVAQPI/LQfM4L3bmVNBMTvjP4Ij7NI64TuMpj1s54Xs7LwbP4GqcGtdTNLiZ + pc0HBfp8XCJ8sET8lgKtKQE44w4uZ8txhXN5uWwOr1XP4K22ebw9ZM7LY8481uXAjkZ71ra4s7o/hmXC + +RcMlDAxUMbwQAWDgzX0DTTQO9xK33gnvZNd9Ez00jshPoagfVi2yfqabWs48NgBpiXE2hEVYUFkuDnh + oaaEBhsTGGhAgHzEAD8DggIMCQkyJjzEiKhwcVhjZFCKNSI1XgYwRQwWZCaaCyzJSlDyqJsRJ4Y4ThGB + 5fjEcGMS/0MATgwTqARgucZfAnCxIgBn2lObJ4NngR0NBVbSQSxoLTans8xMYEJ3mbEKnaWGtBfp0ZQr + hjFTk+pUZX4DTcqSNYRsqgnhm01+1EwKou8QAzeT0rjZVCTMoV4MW2uyOl3JYvClHFBy3UvZm6IIwhri + POuwMM+IFflGrJZyQ74JWwV3FZpynyICF4sjW6LHI2VaPFWlw7P1upxq0uNE3TyOVtzGc7XTealLnQ+F + 3H+6wJDPJ/X5RsrvFhjx7ZghXw3q8HmvJl8PavHjpB6/LDHijzWmsNUK7naAe+35/R5bfrvPlu/uteLz + nSa8t0XI/lJ9nuqYy76SGWxNvJ1lYvCX+d3C+rDp7E3X4ni1MVe7bflw3I2vlrjzwxIHflpqzS9Lzfl5 + mSk/KOmUl5vwzTILvl5uwzfLnfh43IbXe4x5vmIuh9KncSB1GoeybudIsRrP1xpyusGUc43mXGm04JqU + r9Wb8Wa9KW/V6PNOpSYf1WjwRaM237Qb8GOvEd8PGfOVIgDLe308oc7bY9N5f+EMvlqvxc93KQKw+V8C + sD3st4X7rPh9lzzfFqmf1Rr8uEydX5do8ssiDb6erwjAOny305IfH/bij0tJ/PleIX9+VaGK+P3zj0b+ + +L2WP3+rhV9rpgTgX6r48+cq+KkafpDjvi2DLwrgo1x4JYlfngvnm/vdVJHV7wyq8aEiADdo8FW9vEez + Fp+36/BJj6FqDuD/FIBfk21XFAG4ToMjNTocqDBkq5CHRXnSBoU8lIpByAi6g5SQvwVgMYD/CMBiML1n + E+83j6RAddLEEGXF6Krm/c1N0CJblQJ6nkr4zZQBWClzkjTJSZb9KWJY0/QpTNenPNOA2gxd2qSNDqXN + Y2XWHO4smMP9hbN5onQepyo1OFOlwelaTZ6tVlcJwHvlez6YeytPls6Sb6nHGyMOfLrCl09Xe/HOckfe + XmPP25sceWe7K58dCObbR+P47Vgmf5zIUZW/HE3hx8fi+PGBSH7aE8xPd/rx0xYPflrvwk/LpX0ttOXH + BRbSjs35adyMH4fM+EHa0zcdRnzZYcH3E578vDac37cnyndO5YftCXyyNpSbizx5sdeCJxr1OFSjze5K + LZVQsKpwHvMzbmcyeRrrsqfxcI0YvwEzvpRn/XWr9I19Dvx+2Infjrvz5xX/vwTgAP78MBjeD1NFBf9y + 3Ifv7vfkrRU2nOs24qgQuCPSlo9IPz3SrMuTXSYcG7LlxUW+XFoXwSt3pnL9vixePpDH5QO5XL4/nysH + i7l+uJZrD9Tz/I5CHlwSy8OLYzm2JpmL21K4fmc8N3eEqETzj3e48OVdTvywx4Gf99vw4yFTvn/QgG8f + ln7/sAFfPSLP/5gl/3rSjq+Pu/LdSV9+PhvF7xcz+fVyMb9cquaniy189WIHrz9Sx7l7y3hmaykPrC5m + 77IK7llcwbbJctYNFbOsr0AciQy6alKoK00UklbF7rs2cObss0J8znPuwnnOnrsgxOgCZy5c4OyFi5y/ + PIWzF8/+BUWAPc3pC2c4e/4M5y+e49xlgSIMK8deucT5q5f/ivq9wgVlTmAlTbRcW0n9/OwLJ1XRvEra + 5/8UgI8+J3j2OE8pwvDJZzmuHCeYmv/3pOr4E3LeKbmGcq1Lly9x+cplLsv1FVy8+ooKSjrriy9dEmL3 + 9/y/z3HlyjGunX+Cl56/n0tPbOf8waWcu7ufi7taubKjhld3lvHWXaXc3JbHtbVJXFwUyZlBP051uHOy + wZEXhKifrbLgSrUFr4ote035M0ubKa+1GXGjXZ+XW3W52qrPxVZjzrdbcL7Tngu9brzQ68EzHW482urB + /W2+7OuJ4NFlpTx/7yhnHt7A4XuWs3C0idLiZLKyYiksTKS8PFlIWAYTE00sW9ZHf28DBQXpxMdHkpgQ + TVpqIoX5uQz09jE0OEhZcbEQ7Fj8heQECUmKigwgJSWcDkW8WNTByFgDdQ2Z1NVmMjxYx4rFvZQVJeFs + o4Ot6VwczDVwNFPDxVIdZ4u5eAtJjQm0pzw3iox4H+LCnKkrT2FypImxgVq6msQBbCpm89pJNggKC5IJ + D/OVMlOeSZyFrjpKs6LJDXUSEmXPZJQzm+KduD/dhiMZZjyVYcrxTGNO55pwWcbEV8pMuVFpxvVqE16W + MeilGqnneiuutNiqxN+rnY680uXCjU43Xqww4wkZrx/M1WN/oSE78oVcZGgwmTqH8dTZLMnTZrN8o/1K + 9O9IKEeHgnmky4d7K23ZXGjCOhmPl2QJSUrVoidRiFiyHgOZZoyI4zeWY8dmL6jDAAD/9ElEQVRktg0L + ssxYmGPCsiITVpebsr7q3wLwpko9tlbrsqtan/uqDTlQY8JD9RY8XGehEoCfEhxrNuNEkyHPNunyYrMO + l9r15PkNuSljwFuCd1Wir+AfAdiEDwbM+XDYig+GLFXRwG93GPKe4NMe6fsDFnw7bM23A5Z8K/u+6zHl + q3ZD3i+fxQfls/mkWoMvxX9QROFPZSx9v1aDd2rUea9Je0oA7tCXtqvOgeTbWRdyC6Nu0+hymEaroMvz + FpYlG3Bfoy+7G71UArAi/o5E3cG2cnPurbNjZ4U5m/L02C118WS7E6f63Hm+05azXda8Jo7kW5OOvNpn + zOUWNflm87jeqcmbAwZ8tsiOzxbayThuyfujZrw3bCJjoZn4CyZcFfv+QoMux2q1eapaj0elXg+V6LCv + SEt8JC3uLtZip5RbirTZJMubK3S4r82a3S1W3FlrxJZyXTYUa7K5RPYJtpZqsrNUiQgWx178qrvKtblH + ztlTa8Ah8UEON1vxaJMdD9TbsVv68o46VzbIOy+uD2Coyl9IjDf1BX60lkfTVptMbUUi+XnRpGdEEpcU + TmRcENEJwaRkhVNYHE19XQIdzbG0VvvSXukshMqFZd1urO13YX2fkwqbh91Y3+vEmLxbpzjkAyXaLGm2 + ZnWnAytabQU2bOhy4s4Rb/YsCFSJvfsXBXL/0hAOLpZyoT+HFvtzcKE3uwZt2d5vzbYBaceD9mwTH23X + 0iC2LggSm+4hpM9GbLoJg+JjLey1Z8WoM2vnO7FxkQNbxU/bttqZ7WucVYLw6kknIcKWNApZKEnXISta + m2gfDfzt1fGx18Pb0QRPIbLeSmpnL3ecnJyxtrLGxNhMBXNTM6wsLLC1tsTOVmBnpSo9PRyJjQohKy2e + /IxESrOTqchKojI9kYr0eKrSY6nJTKApX8hxYSrNxelCYDOEQCvIFDKZLURWIbPKP5qzaavMpqksg9qi + ZKoLk2iSY5qrcmmpzqNB9teUpFMj+5tq8mitL6SpNo+aiizKSlIozIslOytMbGoYOfkxFBTFU1yUSHG+ + 2Nj0MErSQqgX+9Yh5HWoLIkxsW9jJYmMi10cLU5lWDBQmkKPoLMihdaKZBrLBCVJtJal0C72uq0gkY7c + eHryZBzNT6a/MIX+4jQGyjPpL0unTbY15idIu0oQLpJAlRxbITa+QpmbPTuexmJ5ZyHSvfVlDDRU0q9K + AVasEsmVHwHayvKEu0gdFMk7FqUL0qZQKnVXlkZLudRfhdSdoKM6h0VC1tbM71KJvzvWjss3H2bzygG2 + rBpSYf1SJSq4naUTzcwfqmOsr5rhngrxAUppbc6muiqJiuo4GpuT6ejOoHcgk8ERGYcWZjM6kUxXXwgt + XX609PjR1B9A7WAAlf1eFHW5ki12OqXJiiRpfwni38dKn4tqMCai3pDQeiPCGowIbzAhvNGMKDnmfyK8 + zogQsa+h4mdFN5sS12ZOnDJvsAqyLoiXsTaxZUoATm20IrvenpImd5o6g+nsiqK3O46R/nTGhrJlXMxj + bLKatZtHuP+RbTx16gGOPH+I+5+4hx3717P+rqXcef9GHnx6L0+9+DjPXTjGk88d4YHH9rNt1xomF3bI + NcoY7c9hxXg+96yu4dDGeg6tqeDAiiIOLM3kgeWpHFmdxvH1aby4JZWLWxI5tyacFxZ78tyoLc/1m/y3 + ANyuydlmNVUaaEUAflm4wuud+jKuSdmhw802Td5oUxe/Qk2W1XivR5f3FRG4T48P+vV4f0CXdwf1eHfE + gHcE708I4Z+cEoA/XmzGZ8LVPhUoUcDKXMAfLjbn4+XWfL7Wjq82OvPtdne+u9Obr7a58ZFse3OJOa8K + t7w+rsv1MV1ek+U3FgpHE5t9fYELV8ZdOTvowcluL55p9eSBUgd2Z9mwJcGM1REyjoaaMxFowbCvpYwj + ZrS4GdLibkq7rzUdAY60+LtQ4+tMsZcDWa62JDtbk+JmT5b3vwXgyogAKhQhOMyP0hBfimR7tuxP93Qg + R8q8QA9KxLcojwkWhFCqIDqYktgwqlPiaM1NpyUnhcpk8VWClYghNxIDPFSRurEBvqp0z0rkb7AiAHv7 + i537nwKwD8GKQKxkNXD3wcfNGx9XD3xdnAhxdyYzIogquU99ehKFUeEk+HkT6uaKv4sjfooArPoDzJTw + OwUXPN3/EoCVaGCBl1KqBGDPKQHY1VW17Onmg5sSjWvnooKr838LwIqo6+YeoML/SwCeivz9O0p4SgBW + 5vRUllUCsKMSSaxEzHqphF8XeT9lvl8X5RjBVDStsm8qslYRV5Xzp64zda2/l5UU0Soo2SC8AvDyC8Hb + PwRP3yA8pF5dPQNw9pjC3wLw/4Z/C8D/Lv83OCulXEeBswJ51ynI8/4lALu6e8ozSSlwkvp3cneT+7vg + 7OmEi7Q7Z2lHLj6OuPs5COxVKaAd3M3+DwFY5y/8WwC2dNYTGGDlYIilgwHWfwnA9k562NlrYGUzCwvz + 27G0ug1Hx5l4eKgRGGBASpITyQmOREVYiW9uhH+gCVFxrsSn+BMR64Onv6s8mzvOPr7Y+4biHJFBYE4b + kVUTRNQtJbl3OzVrjjJw31UGd1+lfeMJKufvIaVxHO+0HNzjg/GKkzE6xoyQBAPi0o3ILDCnpMKOqlo7 + 4RD2NDc50NHuSG+nM92tLuLbONAo++tLbFRoKrOnvcaFjlpXmssdaSq2VUU5dmZZMpRlK76wA8vTHVid + bM+qWEuWhxqxMFCP+f7ajAdoMxGkw/xgXRYFih8eoIjAumz2ET/ZS+e/BOANbnoCA9a76LHOUYN1Dmps + dZrHLue53OM8k3ud7uBe59t4KFCdkylWXC1y5eVSDy4XOXMuz5YXMq15KtaIQ0Hi57nOYp3VdFZZzGGl + hRbLrLRZaq7NclMt1km5zUqHu6302Gumw/3GWjykpIA20OQJQy2O6qtz3FiTFywNuehkzlVXGy672nHF + 2Z4rDrZcEb/mioERL+nq8JaNKe+5WPCurzlvRJjyepolr5facbPBmddbXLle78B54RSn03Q4l6bH1Rw5 + rsqFD1p9+LDdm3fbnHmz0ZobMga+Vq/LW+Kff9Rlyr+6rf4SgB35+i8B+M14scNB2lxwVudFKzWOm2hy + xNyYB21t2S3+12axITvi4jjU3MRjSxfyyNb1bF6+kJaGGooL88XPySI7N5+Kylpau3oZHl/AomWr6egd + IiOniIDgyH/EX0+Bh/RVJe27Yh8srRwETgQECbfMKqZ/eAG79z3E/kOPsXn7vXT0jFBZ00JdYycVta1U + Cto6h1i+ahMbN+1ifGwpxQVVRIfFERkcQWpcAtUlRfR1NDLS10J99X8KwH74+Px/BeAli1fw3MnTvP3u + h3zy2Ze8I+Vrr7/FY08+w6KlKymX91IEYCUNtAJFAFa2jcp7Kumfn5dzDxx8iPkLlqhSQyclp5ORlUNW + Th7FpRW0tnWxYOESdt21m2efP8nLr77CpasXufTSOa69dp5X377Ejbcvc+ONC7x8/Swvv/Qib752lmun + H+WhuxewdiSP+Q1BjJY5sLTBljuHPNg35sVd3Q7c0+7C7jYfVudZMxStS5XHdNKtp5FqP13GPDXinLWI + FDsS6qRLgL02ATaahEoZ7ahLrEoAnkuo0QzCjWeQYKUuY6UhhT5mlAfbUBfpSGWQJTmu2qTYzSLZZjqJ + ttOJd5hBkvs8Uv20yQg1JCvKhMxo6f8xxuTHm5GfYEFugjmZ8SakxRmrROCUeGPSEkxUgVdxsQYEh6hL + /asRHqFFdLSe1JkJ+YWOlJa6U1AgY3SRE0XFTsJ3HCgtsqeySOxKvhWNhZa0F5rTV2LOYJkxk5VGTFTq + M16hy1iFHgvqzFnSYMfCekeBK4uafFneGcnOhYXcubSSdaMlDNQkUJroTVaEmzy/B+mhPmSGBZAeFigI + JjUsiOSQQBKD/UkICVAhSfYlhweREiE8LHwK6VFhJIYGEO03lbEj2t+LGH9vYpVpIIJ8iQ9Szg+aQnCg + QFn2Jy5Qjgt0JS7YmdRIF6k/F/Ii7CkKtaY8xIKqYGPqQ3RoCtagLXQe7SFzaAuZTVvwHFqD59IcqEZj + wBxq/eeKjzOLap/Z1PrJvlAdhpOtWZTvxvxcFwaSrGkJ06M+QJMqr7nU+ajT6K9Fe6gB7WGGcj196mW9 + ymseFd7z5DrKfm06gw0YCDdlNNyMkWBDhv31GPLVps9TjQ6xf21O0+l0mUOXEuXrosaAh9hjfyNG/Q3p + 99ajS+yvIvy2+urT5GNInZcelWKHy13VqXCVe7nNocJjJlXed1DlextV/rdQETBN2txt4odNpzh0NjlB + s0kPmkN6iBoZ0lYywzRUQnCuCnNVyFcE4WgNCmI1pwTgRE2Kk9RVOkpbvh59RfqMleqxot6ce0Z9xGeO + 5cjmIp66q5Wn90zw2O7FHBJffM/2hezduYinD2/kpVP7eO/aE3x28zjvXHmMK8/ex/EH17N38zDrJupU + mQzHWvOZaC9hQWcFi7prpKxWZZWabKtjcXcTy/s6WD3aJ/gfAnBHM511lTSWF1JdkE1RRhLJ0oYipM2E + StuZEoDTmOxp4uFd6zl9+B6uHrmP60/cx0sP7+To1gVsEt7UK1yyKTuOPrFtSrStkno5Pyma+FBfcpKi + 6GyoYKJbbF9hJjEB7qRGKL8t5LBjxQRPP3A3p47s54XH7+fYoXvZv3UVK4c7hfPl0VaqcOAcKXNVqZ2V + +X37asoZaqgWVP2FagbqK2WfIgAXCkfMo6OsmM7KYrqrSlX7hhprGGmsYlieQxF7hxuKGakvEUjZKKVg + vKmMSdVcwFWMN9f8JS43MNwi79PcKNdoZLC+gd7aBrlurfDzCnmuUtqV5yrNkftnCTdOp7M8WZ4jkYbc + aOH6oZQkB5Ib60FaqCPxfkqUvTHBrjr42s3Fx3q22MA5hMhypN0cYqVMsp1Hmo0aqVZzSLOaTaock6jA + fjYZnjoUh1lSnehCXbIbNXFO1ETZUSG+VJmPFtV+anRG6LAsyewvAdiaIzEmPCH85Ei4IQ9HGnIw1pB9 + iSYcSDFnf7I5e6MN2R2myz2RetwlXGZLiiUr061YmG3PcK4tQznWjORasCTfkg1i7+7KMudQijHHovQ4 + F6rJZbGZ14Jn80rwDF4Nu53X/haAkwQJt/FW/B28FT2Tt6Pn8makGm9EavF6rB6XE3U5k6jN8zFqPCf7 + TkTN4bmIObwQOY9z4WpckX52NXAeLwmuBs3jgtiZFwJn8azfDB53u4VHHKfxqNM0nnS/hRO+d3AhWo5N + 1ODVNC3ezhOOWGLI+6UGvFGowys5c7icMYMr2bO4VqDGK2XzeKNhHu906/L2mA0vTXhwf4stayutmaxy + YLQxgMGmeDobU2lvzKCxPp2aWhlja/IoryumvKmcipZyypsrqRCUN1dQWFtEZau0neXj7Ni7g2kBfoYy + wOsK9PBXCb5G4ggbE+RvQqAgOMCckEAzQgOnRODoMHFa5QPFR+mSLB8lRZAaYyQwFZiQHGkyJQCLMfy3 + ACzbw6aifxPDZNt/CMC5cZYUKnMAZ9hSmydObqG9SgBuzDelscCE1iIj2ooN6Sg2EBjSLqVipBqztKlO + V8RfLSrEmStL0aI4QZN8+UjZ4TNkkLqDHJUQPEuIpxIJPI9GMXLtSWp0JSk/ImvSnaBOZ9I8upLV6U/T + ZjRTn4U5+izNNmBNrgkbBDvyzbhbHMZ75d57i/Q4VKzJo2WaHK3U4liNDker5vJo8W08VT6dsy1qvDlq + yLuCD4f1+VzKrycUcdSIL4dkvV+bb0d1+XmxoSpC94+NpnCnFex1gP32/Lnfjj/vt+eX/TZ8fY8pn95p + ys11JjzXr8FDVXO4K2Mmq8NuYWXgrWwIn87u1HkcLdfjfIsZbw068NmkM1/Pt+O7BTb8uMiKHxZb8P1y + M75dZsZXy6z4cpktny+2591hS6616/NM0UwOJE+TDjaNBzJu58nCeZyuNuJcjTGX6sy4VmPG9VpxoquN + eUO2v1WhwzslanxQPo8vajX5RpzjH3uM+HHAiK9HDPhyTJePR+fy1vBtvDN5O5+tnsdPdxr9twB8UN5V + iQK+24Jfthvx/Votfl6pye/LtPltiRbfLlLjm9WKACzP/pA7v12M58/38vjzqzKV2Muf9fz5p5R/1PLn + 7zX88WsNv/9SxR8CfqmGnyunROCvi+HzQngjkz/PxPDDIz58sd2Gt0c1+aB9Hv9q1uCrRq2/BGA9Puk2 + 5IshS9V8hx+NWPD2gDE3ugy41Cydv0aDI/K9D5QbsrPMnOXSHrrSdaiImUdm6AxSgqeTGjqT9PA5ZEZo + kiYOSLwYuVjvuSRImagIwGGaZEZpkyWDbm68hkCdnPh5KtE3O1FdMCUA5yVrUZCqTVG68kOvPhWZhtSn + 69H5V7T6+lw1dhdKeyiax7EKDc5IG7xQq8P5Bl2ek+dUBOD96dM4XHC7tNE5XBLy8sEyL77dHsF3u8L5 + fLsvn93lzb/2+/PlA0F882g43z8Vw+/PpcLJDCnT+PWZRH48EsVPh8P4aX8gP93jy8/bPfh5kwu/r3Xi + 99WO/LHGgT9W2vHHMsFCW34fs+Knfku+7LHi20kPflwXwa87E/nlriS+2R7Lh2uDuLHYjTPDVhzvMeFo + rxlPDP7/ePvLOC2OtW8XZlkEG3d3d3d3d3d3Z5Bh8MHd3QmB4BLc3UkCIQTi7u7J8Z59Dcla67733s/z + 6f1w/Kr9qu6uPmX+U1XWHBjnwLZRlqxs1GGx1HeZfEt7a4dzZ5Qxn0xXhkW3Vc2x++seB6mXC7/d8lEJ + wL++G8gfH4bCe2H8cS+I38/588Mubx7PlsSzTRlqVo2dhersq9LicIsep8dacWnAjXsrInm8LY33DhTy + wfEK3jtTxdunq3jrTA1vn6nnw4udvH++h1f213N+fR5XtxTxyq5y3n2xik+OFPPxgRQ+3h3Opy8E8MUL + 3ny1w4Vvdtrx9R75xvbo8eU+HT7fq8On+wz4ZL8RHx8047Njtnx5ypXvLgbx69UkfrmWy89XS/j5Si1f + nqvn4Z4Srq7P4cTSbAm2Mtk+o4At00tYN7mE5eMLmT8mn8lt6RIkJNJUGsOolnzWrZjB+bOHuHbtHFeu + XODS5UtcuiJIefnyZa7fVETeK1y+co7LV89z+dpZYXD5inD1+gWuyv4rNy5z+eZVQZZvKYLwzSe9h5We + v9c5d+miSvhVzfl75jTHTp/k6KkTglKe5NDJYxwWjpw5ybGzp1RzAp8QVGKxlMoxJ8+e5txFqeNVpU43 + uCG/cevOXRXXb7+sYlB4vsG1O1e5dvsC12+d5taNY9y9tI87J7dxY/8yrmydytU1Xdxa3ci91dU8Xl/J + uxtLeWtVHg8XpvDSjGiu9HpzocVZvlkbzpVbcKXMlDuVZrzWYMGjNksetYo9azXk1RYdXmnW5uUWXe60 + GXGzzZxb3fbcHu3B1V4vTna4sr/Vld1tEgD3RnF8fgU3d0zmpSMreHHbPGZNbqGqLJXsnBjyC+IpLkmg + pi6TgemdLFjQT19fK6WlOSQmRAkxpKUmUpifS9/oMUwY10d5SSkJcbEEBPgSHORDVGQgaWkR9I6uZdYc + CXyntkkCnE99XTZ9YxuZPTCassJknGx0sDIdga25Gvam6jhaqONkoYaPk/jVcDcqixPJSQ0mOcaTxppM + pk/tZNrENsZ0VjJGAu41y2ayfOkAhXKtsDAfqWMu4/s6GTu6gYrcaPLDHWmUpGpqrDMrEh3ZlSHBWaYx + xzKNOC1cFZ/8Usmg+Puw2oxXxTe8WmPMq43W3G+2F79iz912e17qcOB+lzMPR3lwpcaSF/N12S0Bz9YC + fdXwzzPS1BifPJQxiUOZnKvN0lobnh/ly+Hx4RwaE8yuNi/WlliyONeAedkGqrk9+pLFZ4vd7JCgrCfN + iDEZFoyT+k1It2RyhgmTMw2YlqvPLPHVC1QCsCFLq/VZUqHL8gptVlfosKlcj23iy3ZJwqsIwC82WnK8 + SWxSizlnmgw53aDDxUYtbrbqcK9Df1AAFt/wVpcRbyt0PuFPAbhP8RdWvNtrylud4ve7TfhslDlfjrbg + O7E5X/WY8E2XsUoA/qbdkHfFxr33pAfwV436fNliyGfNenygiMB1mrwr7fJDOf7Ndn0ul6mxPvLvTHMb + wii7IXQp4q/z3+gLGCqxiTUvtIfwXLOvPB99xkX8g5lp6myss1UJwIvkGc9MfJbNpSac6HLlYq87Z9ut + udBqxsujbXgwzoqXOvW42TiS200jVENBP+rV4yOx5R9J/PB+vxlvjDXktW5dXmkX/9KgoZpT/sWSoewr + Hqayry8Ua7JdAtfN+VpsyNdkdYEmK4TFwsJCKZUewU0WKgF4Q70Jqyr1WSw2eXGBmqDO8mINVS/gNWVa + rC3VQhkSer0iAFfpsbPWWCUA76+3YVeNDZsk6F1d5cCSOg/m1Cu9gL3oKnKnrdCb7spwuqrjaC6PpSgr + hIzUIBISAoiN9SE+3pesrGAqSyNob4xndGu0HOtJd7ktExvsmNNhz7JRDizrsWP5KDvW97mzcpQj0yol + ec8fzqQyHebIPSxotWa+3MfSTnvWj5NAfGoAu2cGC4HsnubH7ukB7BnwZe+AH/sHvNk72Z2tY23ZONZa + kmhb1vXbs2GKbJsVzKopfszodGR0jRmdZfpSGjOpzZoZo2wkqbRiwQQrlkqctmqOExsWu7NukRfLZrgz + pceW0U3WNJdaUpFpQYbE2v72I/G0UsfNVg83R1O83B1Uwzvb2dlgbGyMjrYe2lq66OvoYaCvi7GhvqCL + odEgVhZGeHo4SnzvRXiglyoZVv3XfoC3asi25ABPMpR/FIkNpjghhKKkUEkWwyhODldRmhpFaUoUZanR + QpTELRHkJ4eQGRdAWmyAxDUhZCeHkZsSTlpiCEnxASQnBJKRFk5mRiSpqaFiHwOJlncVGuaKb5Ad3oE2 + +IbYExjmQli4O2EhToT52hDlbUlGmBOF0a5UxnvRkCAJerwfbXH+tMYH0hQXSJ1cvyrBn9Ikf/IT5d3H + eknM5UVunA/50d7kRXhSGOZJabgXFRE+VEb5S4IaKOcEUiHXKIzyJSfSm8xIL9IiPSRncZd8xY1kKdPk + +LyEcErSYqnKTpZ8JZXKzHjK02JU918iz6E4SZ5BQgQFCWGDxIeQHx9MflIwBcnBFKbIM5R7LkwJpUzu + X+kVrAyZvWLuONXUAusWT2TNon5WL+xn1fw+Fs/sYcG0TmZPbmVaXz2TRtcwYbQk/j0VjOoooqYqibLS + KKoqo2lqiqe9PZHRY1KZNi1XfFE2Y8dG090TSldvMO1iVxvGBlHT60dptwe57U6kNdmQLL4xXuL9mDql + B7AiABsSUmdAsEKNIcG1kvvVmqgIrzMhQr7liHrJCWsMCJJvVSkjG01QhoSObTV9guSBwn8JwGJrcxoc + KG0W39QRTGdXDGN6U8Q/FYl/q2LOzAaWr+xn9/7V3HjlFG99cp/HH93n7sOrnLl2hEOnd3Hswn7O3zrF + 9fuXuf3gOicuHOX5vZtZsHQqY/tqxVcWMdBfyOp51Rza2M2pbaM4ub6FY6vrOLa8jOPL8rmwMo/ra/N5 + aWMe99dlcHtxFJdn+HCu31ZyLRPOd+v/lwB8o1mdG00jBwXgVi1ebdflfqsGD1o0eLVVnQetI7jfMkJi + ihG8Kee93a3DO6N0BcmXRuvw1hhd3pR88M1xuryviL+TB3v/fjTdjE9nWvPxDGvVPMBvy3ZlSOgPZ5jz + 8VwrPltox5fLnSUXcuebtW58usyBd+dZ8Xi6Ma9P1ee1Sbq8PkmPh3Leq5Mkp5tgx60+ZZoSF860u3G0 + 0Y09ZY5szbZmVaIZC6KMmR1myuQAY8b6GtPhYUijqx6N7pJn+1jQ4m9Hg78TlT7yjXk7kuFmS6KLNYlu + dqR7KwKwG2ViC6rCfamS2KFKbEV5kCclvq7kediS5WpFrrsNBb5OlAa5UR7mRWmoEC5xRpg3pRG+1Mn3 + 05mTTFdeMvViL7ICXUmW30v0cSPBx5M4H2+ivHwJ9/Al1N37/1kA9vQmSPb5u3vioxJ/PfFydsPbyYEg + V0fSQwMoT4qhOiWOvPAQEhQB2M2FQBcnfF2d/4cArPQCdhK76YaXm7uUHn+hiMDurp64Obvj5uqqWlYJ + wLLuaOeswvV/CMAusvyXAPxnL2An7//mPwTgf4u1/xaA/xzuWRFNXVzk99x8VD3/lFI51lklpnqqxCDV + uU9EXtU+BZVoPLisCMcq5HkqvYC9fUPwCQjFV/D2C1ENBa3MA6zgqPTelWMHBd4ny25+Khxlv6pU1lX7 + B5f/QhGRpfy/FoA93FW4PMHVyxVXT1fcfOSd+DjjLm3I3c8BF29bHNwt/hKALZ4Iv6revYKFs46gq+JP + AVjZNjhEtDL8838LwPZOutjZa2BjM1R83z+xsPgbzo5P4+etQXS4CUV54uuyPcVP2RMaYkpgsClRcU7E + J/sQFi1tIsAJF18XnH28cFR6U0elEZhRQ3B+O34F3WI/p1M4aSvNS4/Ttuw4dbNeoGD0YqLK2nCJi8c1 + xgePaHt8o00IitElNtmAzHwzyiW2qW2Q2LvJieYWBzo6HFUCcFuzA42VNlRLLFyeb05pjgnluWbUldnK + dmfqKxypLbGnKseS6gwzGlPNaU+xZFSSJWPjLRgfY0pfqB6jg3XoDdSiN1iLMSHask2HiUESIwboMN9X + cm8fiZM9lV6+Gqo5gJe5arHCTV8wYKk8s4W2aiy0Hs5K22FscBjGJoen2WT/TzZJXLrPdySXU6x5tcST + t2oDeVzty4NyT+4UuHAqzoTdARqsd3qGpZZPscxyOEutNFlqra0Sfhcaq7HMaCTrTDXYIuvPm2iwy0Dy + dkUAFl400uSwoTpHjDQ4ZaHHRQdjrrmYc9XFipvONtyyteSOmQl3dfV4WUeDNy0kxnYy4R1vYx6HG/Mw + xZwHRdY8qHHgQaMzL0teeC3XiGtpetyWfOZegQ1vVXvwQasvH3b48H6HG2+32PGG+LPHjRL3N+vLdlM+ + 77bi2y47vpN382WVDR/mmfE4TmxwgBa3HUdy0XQox/SHs8dAhy2mxqywsGCWvR3zI4LZ3lrLsSWzOLJp + BUvnTKa6qojszBRSkhNJTEymoKiUtq5RTB6Yxax5i+nsGUdqZr5q2HaV8Ovlr5r310X5HsXOKL1/zc1t + MTW3w8df4qqsIsZNmM6O3YfZte8oi5evp7qujXTZnl9cLVRRUt5AW+c4Fixezeo1W5nYP50c2R8ZFk1k + SARp8UnUlJXQ29HEuFEt1FYVEB8rduJ/CMB+fsGEBEf8JQCfv3CFd9/7iE8//5p33/+Yx2+8w7ETZ5g9 + dyHVtY0q0fc/BeDKqjqV4Lt7zwGuXr3JC7v3M2XaDIpKKkhKzlCJv9m5eZSWV9DW3sOMmXPYvPU5Ll66 + xGuPXuOVV+/y8oNbPHzzDm+89zKP37nDozdv8tpr13h4T+ry6BoPrh/i8JZpLJ+Yz5zmYGZUObNQvqOt + 4z15od+T53oc2dnjzq4eP5YUWzM+Tpt6v6fJd/o7Oa5Pk+E+Qnye2AM3bYKdNAgQexFgo0aYgxaxYmdi + bBUB+FlCDP9JmME/iTEbSpqjFvleRpQFWlAbYUdVsDm5blqk2D1Dss1T/9UDOMVf+y8BOC1CnxQhM9qI + 7FgTcuJMyYiV7U8E4JR4I1ITTEhJNCEhxoDAwOEEBgyXd6BGaKi6qjdwUoop6enWEktbklfgRFGxK4XF + TpQUOVFR5EhVvg0N8g20FYtdKBO7UGbGRMndJ1Ya0V9hSJ8wuc6a6U3OzGj1YkabP7O6Ilk0Lo1ti5t5 + bmkXq2a2MKmzkLr8GImlA0gI9iTG1524AF/iAmU9JIh4heAgYhXhNjSY+LBgEiMkvheSI8JVJIaHkhQR + RkygPxH+PkT6+xIly9FyDeW8OLlGXEgwCWFh/4VyXnyoPzEhnsSGuZMS6U5GlDvZ4Y7kh9hQEiL2MUiZ + C1iXmgA1GoJG0BQ8jMbAoTTK82oMGEGD30hq/UdQ4zeCat9hVHoNo8JzGFVew+V4LTokPuqONaM10pSG + EH1qxTaWe6lT5ast5+nJMQbUBupR5a0Md6tBocsICt3VKPHWpEb2t4aY0RtpzZgIS0YHmdLjp0+HpxYt + LiOpcxxGjcOzNDhLvVzVaRU72+VlwNhAc8YIXX7GtHobUK8IvxKbVYn9KpX9BWKHC5w1KHZTo1jaTonU + t9T7GSqkvZYH/ovy4H9RFvYMJeHDKApXJzt4JKlB0saC1QVNUgLVSQtUIyNgJBmBI8mUdpMTqkluhBa5 + 0drkxkq7TdCmOEXuMVty0UprJtVKW6iTPLTNkQ0Tgtk1N50jEj+ffa6PK/sWcn7vco7vWs7B7Ut48YVl + XDqxmVeu7uaNO4d44/Yhbp/eyvEdC9mxciLLBloZ6FGGe1ZGMixhSmc5UzurmNZVxxRlSp22GqZ2NDJz + VCtzxnSqxF8FRfyd+R8CcHd9FU0VRdQW5VKSlUJaTCTRQX6ESmyXIO2s/IkAvH/dYqnjJu6+uJVXj2zh + 3oENnFk3i81TJYdqL2dSY4n8ThvLpvUzb+JYWisLKc9JkWsXMH18D0tmTGR8ez3F6XFU56cytbeZHasX + cO6g2KAXd3DlyC7O7tvGC2sWMrevk7bSLJoK02gpyaKlOJuWohxaS/LpqihWDQXdW1P2hHJ6qktVom9z + kdIDOG9QAC4vpFOOHf1k7uBx9UrPX2W45xIpC+mrU8inr6mI/qZiJrWUMVkZbUuY0FzF+GZFBK5hXHMd + Y5tqGdtQy5i6OnpqaumqrKa1tEzqJL9ZkE1rYYb8Ziad5Rl0V6bLb6fSXJhATVaU5LBhFCX6kRUlOX+Q + I/H+1kR6meBtMxJPi2H4WA3DT8pgy2cJM3+WaPF3cSZDiTV+ehCTpwkXIq2eJs5ZjXR/EwoibCmOtKco + zIbSECuK/Qwp8tKiwkedtjAdpotd25xqzYEUGw5Gm3Iw3JADYUbsiTDk+WhDnks0ZUeKlYrnY03ZGm7A + 5khDNsSbsyzZitlpNkzKtGNMjq1gw4Q8W2YX2rK8wI7NWZbsSTbldKSeSgC+Jfbg5cBneSXoKV4N+Qev + xT3Fw4SnBwXguH/yZuxTvBk1VBjJGxEagg4Pxd7eSNTjfJIOp2LVOSH7jkeO4JSU56PVuRKpzk35zm7L + 93VXbM7dIDVuhKhxUb7B0/5DOeT+FLsdh7BH2O/yd456/5NLcv6NeA3upmjxWq7khCWGvFFmyMMiXV7J + VeN2+jDuZEld8zV5tVzimRYd3h5tyuNJTtyc5MO2JgdmldswutRO3q83LZXh1FZIrlMRT1lZAvlFyWQV + pZIl7TGrPI+cCvGnFXnkSplTnkOatNWC6gJGTxnN8k3LGGJvOxx7uxESBGvg6aFHgBifAD8JfP3NBUX8 + tSJIloPlhSoicHigvgQM+kSHaRMXrisfn64YeD3BQEVCmAExQXqCvjgESf5DjVW9fhOfkBCsCMCD8wCn + yHpWtBl5CRaUpFpRmWVNjTirulxzarOMqM0xoDFPj6YCPVqE1kJ9wYDmXF3qMrSpUMTfFE1KxXiVJGtR + GK9JtjzgtJCnSQ19ivTwZwZF4OihlMaL4U9QpzlRGl+iJh2JWrTLi2hNGCnr6nQlazIqRYe+NB0mp+sx + K8uQ+dkmLMs1ZbWqJ7Ahm/J12J4vAWqhGvuL1TlUpojBEvTl/5MDhU9xplZeXLcer43S441ePd4fo88n + fcZ81mfE5+MM+WysDt9Kwv7zLCN+W2zK7ytNYbMl7LSF3XaD7LHnt102fLvVlM82mPDGEiMu9WlwpEmD + HcUarEh4lgVh/2RJ+L9Yn/i0/K4GF2r0ebnVlLd6rfh0vA1fTrDmu8nCNGu+nWXFVzMt+WyGFR9OteTx + WBNebtPnco06B7P+yXPxQ1S8kPR3DqQ+zYUCLa4X63Gn3IhXyowlkDfiYak+r5fq8ob8/pv5Q3m3aCif + V6rzbZMOP3UZ8GOvId+M1efLPm0+HDuMN0b9jTf6/sYHM57h+9V6/LZF7vN5uU9FAH5BGdLXmj82WqgE + 4O8XavHzXE3+mKXN7zO1+G66XHeBHt+uNeeb3S78fD2K397O4rfPC1U9faGGPwT+kPL3an77rYpff61U + 8fsvighcAT8I35bAl8Xwdi7cSuDnY4F8tcmZd6fq8W6Hmmre2i+btPhM+LRVj4+7DPlktDkfjbPgvbFm + vDnKiPvtutyo1+BspRqH5V0/X6LH+jJz5hWLo8/Uo1rptRvxrDhaRQB+mrTQoaSHqonTVSPBV41475Gq + MsFftoWIIw7XEAOrTk6MGnlxahRIeyyUtpuXpEFugiY5yj8wJEpgIcZBEX9LUvQoT9WjLlmbzhQNJmao + syxPk+cKtThQpC710uRGnSQy9cof8vU4o/QYS/s7OzLE4BQ9xSmp+2uTJWFZEcIv2xP49YV4ftgZwXd7 + w/jhxQi+Py7LJ8L5/nQkP5+P5/eLifx6IYmfT8fxw9FwfjgQzPc7/fh+iyc/rHXhp+WO/L7MkT+WOsFy + F1gi5QJhtj1MtePn8bZ8Odqarya78d2iMH5aG8f3G+L4fFUE7y7y4/5MZ25MteGqHHtzrht3lwVze00U + 55eFcmi2B7snirFv1+bFVmmDXfq8O9mc75dY8fsma37eZcdPx5z49Ya3SgD+/f1g+DgM3g9HLDpcCubn + vX68Pc+ey+2G7C2SZ5E/gv01upzsMeeaIv4uD+HdF9L55GgxX1+u5fs7LXz7chtfvdzOFy91Ct18fW+c + rPfzwdXRPD7Vwdtnu/jwsmy/2c0PN1v5/moZX5/L4PPjMXz+YghfHPDjy4PufPmi3PuLJnx5WI9PD2jz + 8X49PtovyeMBAz45Ys4Xxx349qwvv1yM4ddLGfx6MY9fLpTz9akKXn8hlytrUjixKJnd05N4fiCLbdML + 2DilkNUT8lg8Jofp7Sn01ceJ046mtymTpXNHc2jfes6eOsjZM8e4cO4UF86fFs7I8mnOnz+h4sL541y8 + eIKLl4VLJ7l0+TSXFa6cGRSGhUvXL3Lh6gUuXrvEpWtXuHj1GheuXOWcJF0nz519IvgKJ09w5ORxDp84 + qioPHT/GviOH2X/0MC/K+hE55sjpkxw/JUh57IlIfPL0ac6eO8eFyxe5cv0a124oIvBtFddu3VWh9Da+ + dvv6E1H6HFeuneDa5cPcPruL20c3c333Yi5vnMSVFe3cXtHAa6treGtDNe9vKOWdlbk8XpjKPUUA7vHi + fIMj5yqtOFdiyuUSE+5UmvKwwZI32sX+tZnyuiIAN2mrBOBXWnV5qd2E2x0W3O115O5YL66PVgRgZ/Y1 + O7K33ZuD42K4sLSaV/cM8PDEGk4+L8HfFEUATiE7J5ocIb8ghpraDGbM6GHRoklMnNRJVWUByUnRqh7A + SQkxknBn0D9uHANTporDrpTt8QRIAhQY4EVkuD9ZmdH09TWyaOEEpk/vpqWlgIb6HMaPa2LOjLFUFKfi + bKuLmdFQLE2GY2eugb2FOvaWavh7mJGZHEhDTQaFuVFkpATQ1lLIwvnjWThvPFP6W+gf3cDalbNZtnSA + goIkoqP9qastYerUXiaMb6a6MIbCSAeao+wYSHBmTYoj+ySwOppjzMlsQ85mG3Ct0JBXyo15XRLIh9Um + 3K804EGtiTxTOx52OnOv05GXOux5udOe+92DAvC1ehuOFBmIn9QTH6rHklxtpmWoMTZ5KD2JQ+nP1mZx + rT3Pjwli//gI9vYGs73JgxWFZqohjedIYjIjx1CCPX06xW62x2vTlWpEb5okT5L09qda/CUAT8nWZbrE + CvMlqV1cZSTos6hcm2XlWqwsU4Yc1mGr1HlnjQkH6iw42mzNyVYbzrRZcq7FmHNNelyWtnG7TZf7nQY8 + UgRgKZU5f9/uNOQdQSlVgnCPMe/0mgtmqiGi35Ltn4y24IvRlnzZa8GX3eLD28UvthsMisAdRnxSr8XH + dZp8Xq/D100GfNVqxBdtRnzcrM/7zRIzyLEf9ZhKW9XnUulI1oT+nSnOQxgnQeR4j78xWRLauQkGbKzw + ZH9PJNubfVlSYML05OEsldjouWYnNtZYMzt1BFOi/sG2CnNOj/Lk4uhBAfhskxE3Okx5SX7jdpu2+A01 + 7jSN5H6HJo9GSx0mWfBOv3wj3ToSJ4zkhjL/Ze1QzlQ8y5GSp9lb8C925D8ttnUYW/NHsln80fo8LdYI + yyU2WlKgyfwCDeZJXLKgRJs19eZsbrFic5MFa6oNWSTnLMwdwWJlPuAiTVaXKgKwNmsVSrVZJ+9pS6Uu + O2okEZBvdl+dDbuqrdlUbsWaCluW1bqwoM6TgUo3xpe4MabEk3FVIfRKINxaHEJxqidZiZ6kJniRHOtB + WqIXRTkBNMn+sa1xTGqPZFyNnFduybR6KxbJM1kzyo61Pbas7rZh63h31o2yZ061LlNL1JhZpcuCJjMW + tUjS0WLJhl4nXpjszaGZwRyeHcyBmQHsn+bNgWk+HBzw4vCANy9O9eDAREd2jLVme58w0Zatk+zZOsWN + 52b4sbzPhalN5oyWNtojMcWYSkMmNpozrd2cmT1mzBtnzuLJVqyaZc/mpe5sXu7DmvneLJzizqzx3vS3 + e9Ah91+e7kC4uzZeViNxtdLCxc4QL3dbvL2csbW3Qt/QAE0tbTQ1tNDRErQ10dfVRk9HQ7aPVGGgr4WV + pTGOthY425njZW+Jr50l/nYWguQAQqiTJVHudsR62RPja0+sr4MkiM7E+zkR5+ciOEuM40pioDtxwW4S + +7sQ6edIuK8gx4UHuhAR7EpQgBN+/vb4+zsQGOJCkOAvyaavvx0evta4eFpg52aElbOe6g/9ti7GOLub + 4+5miqejAT522oS66BPjbkCqlyl5PpaU+thSLpRKvYp97CmQ380PdCYtUOop+8M8zQRzlXgc6ym4WpDg + YkGSkOpmRabcU7aPA+netqR42ZDgaUOMpyS/nlaESn2C3SwIdJX8R8owT1vVvGXxQZIkh/qSEiYEK0PY + uqtQ7l81z5kKZc4zN3kuLvKc5PlInRKCnEkMdiYp1FVFZowPnTU5zOxrZpXY6K0rp7Np2VQ2LJ2sEoJX + LxjP0tm9LBafskD8wbyp7cyc2MzA+EYmj6lRzcHV2ZJDU20ytZUx1FdH09IYQ09nAhPHpzF9Wrb4mnSm + TEymvz+O3r4o2seF0zA6iKoeH4o63chucSCt0ZqEWnNiao2JUgRgQRGAg2r1Cao2IFAIqTZWEVarCMTG + KhE4TI4PkdxDGQJaEYCjlaGiJQ8ZxFiFIgAntpiQJPvSmqzJa3KivNWHps5Qurrj6BuTxozJpSyY1cji + +V1s3DhL4ocdPHr3Dl//8jFf/fQxH37xtqzf596j29x/4w7333qZ1z94jTc+fJ1rdy9K/LGDVRvmMDCj + lYGplcyeUszGxTWc2jGGy7vGcX5LG6fW1HByWQknl+ZycWU219fm8NKGHO6vTeX2okguyXd7ps+WM2IX + z3cbcqlLh6udEoe2aXK7VZM7LRoqXpbY9H6bDvdaNXhV1u+1qAkjVCgC8BtdWrzZrS3o8maPLI/W5q2x + stynp/rH4A+nGEseZvIfPYAt+Wi6heQlJrwt+96R8sMZpnw0x5KPF1jz2VIHvl7lzLfr3PhipSMfL7Hl + 7bmSn8wQ3yS5zKPJihCszA9lyp0+K66NtueC+OCTLS4cFlu5t8yJLVliSxJNWRor/jTSjKlBhozy0qbR + SYM6Zy3q3AxokO+pXr7Bavk2y3ycyBfSPe1IEHuS4GFHmrIt0JXyUG9qwr2pDfOiPsSL6gBXKmRfkZsl + ec6mFMp3UuHnQI209cpAR8r8HakIcZNzvKiL9KE9OYyxeUmMlfijNS2SnAAXkuX6iZ4uJHh5EO/lRbSn + LxEevoS5+xDh+R8CsLefrMt2D2+C3b0JcPfC19ULHxdPvJ3d8HFyIPhPATgxmqqkWHLDgkj09SLMzVX2 + OePn4oyXqxMeKgHYGXd3WRaUofO93T0EudYTvNyUHr9PhoB2cVUNB+3h4oW7swcuDm4q3BQBWBF0HT1w + UgRgZx9cXf2f4Dco9Cr7/yfKdmFQAB5EEW4Hh0oe7NWrCL2urj64ufqqBGClVARhF0XglX3KsrLd3UP2 + KSKwIvgKKtH4ybKrnKPw53HKXMFKD2Af/xC8fINx9wzE1V3qKjj/KeCqhOBBYdfJTRF2ZZ/SU1hK1fb/ + 2j+Isl85X3UNF18Vf967SvBW3Y88H3merqoewFIKbp6yLLh5ybP0kufr5467rwvuPo64eNnh5G6Fvdhf + xRdYiw9QzekrKPP7KlgovkKwFJRewJZKT2BHHUztdVUo4q+CpZ0yB7Audo7a2NmpqwRga8t/Ym0+BE/n + Z4gOMSAv1ZGWmkhqy4PITHVWTYcWGiY2LcGR+BRPwmJc8Qywx0XqpvQCdvH3xz8uhcDUQryTi3FOLMa/ + oJ2E5pnk962iqH81uaMWkFQ3lqCcEtxiI3GP9sAryga/KGOCYnSIS9YnK8+MympH6ptcaG51oaXVkXb5 + hjvbHWlutKW2woryQnOJY0zIT5d6putTKMulhdZUVjhQUepIcY4lhekmFCcbS9s3oSbehIZYY1qjDWkL + 16U1TJu2EC06wrToCtemJ0KHcaE6TA/UZZ6vLot89VjsqcMSFw1J7TVY6arDWg9DwYiVTnostdVgqfVw + 1tqNYIvDcLY6PMNW+3+y1W4IB31Hcj3VhscVvnzWFiVE8n59CA9KvTgTb8beAE02Oj7NSnne62xGsMFW + 1m0l3rPQYrXRSNYayvVM1NlppsUuYw326Kux30CdQ0YaHDbR5JDsOygcNtfiuOQ/ZxwNOe9kylWJS65b + m3HTxIDbEtu8oqPGWxZ6vOckcbq3IW9GGPMw1Yz7BZa8XGEjeaA1t8osuJajCMD63MmU/KXIjjer3Hm/ + yZsP2r0ED96RXObtVnPeEv/1rsTngwKwNV932vJNkx1fyHU+kHf2Rpw+D/21uOs4kgsmQzmsO5TndNRZ + LkzXl+drbkS/xAvrmko5tW4+5/dvZu3ymTQ2llFUmEludgaZGVmUllcxemw/8xctY/Hy1XT39pGakYtf + QCgeKvFXvnu3wX+isHNwxdrGETNzG0zMbPCQ71kRgMdPmsHufUfYe/AEi5ato6q2haS0XHLyy8ktKKes + okF+YxLLVm5g/Ybt9PdNk9w0k7DgCJUAnJ4gMURFGeNHdzGut42aynziokP+lwDsL3YjNCRSJQBPmzqT + 8+cv8+FHn/LFV9/y/oef8Obb73Hq9Dnmz19MXX0zaRk5fwnAqenZVNc0MG1gFvv2H+ba9dvs3rOfKQMz + KS6tICklXdUjOicvX+pbQUdHD3PnLuD553dy9do1Hr/5iAevv8Krr9/mzXde4t0PX+GNd27y8OElHty/ + wKP7l3hHyofXDnBy+wDrpxawoiuSla2+rO9y54XxkjNNcOeAxN8vjvcRglhbbc+UVB26IofRGDKc2lAN + SkO0yQrQJs5Lk0Bp68FO6oS7aBMpxLvqEm2rRpjZvwg1+gdhBv8g2uwZUpWhUD31KQs0FT9nS02oBQXy + PWW5DCfLeTjpLiNIc1cjw0+bVPnm0oL1SQszkDhQh4RQ2Raup+oNnBVjTHq0EakxRpK/KAKwManiuxWS + YgwJCRxBcMBwQgPVCA4aqeoRHBGhS5ScEy3npqZbk5FtR1a2LdlZthRKWZorfr3AiuZiK7pKLRlVakZv + ieTPhXr0FOkxqljaaa2t5CTuzOgIVIm/88alsWp6GTtW9bJ1xVhWzOlmel8DXQ2FlGQmEB8WQKjY68iA + AGKCQ4kJGSQ2JIzo0DDiwiNUxEdGqkiIjFINMx4fEUFseDgRgUGSFwSqysjgEKLk3OhQuUZYmBAu50ap + iFehXEPOiwgmOtxXSm8So7xIi/IkI9yF3BB7ihQROMhMnr8+5f5qEpeMoDZwGDUBQ6nxl/eqbPNVo0qo + DdCiIVibaj9NKrzUqPCW7T7qcowOjcESC4WK7QwzoTbYRK5jTFWAIiybSUxjKtc2pFgRZt11yZXcK89T + j0IfQyoCFNHYis5IB7ojbOkKsqLVz5h6Oa5a4qxyRzVKhQpnDWrcdKn3MKDNz5IeqXtPqD2tgZbU+ZpT + 4mko1zYkx9WATFc9Ml10yHVT5lzVpdhPQZOSADUqQ6W+UerUx2tRm6BNZbzsi9UjO0yHNGlTKWH6JIfo + SQ6kTryQ7KtOqtiqzGBdskMNyA5X/gFBX3IQffISlXmipf75lvQ3uDOzzZvFPX6s6gtj6/Rk9i4u4/iG + Hs7vnM7Vgyu4uH8dp/eu4/judZw6sJ6rp5/nzsVd3Luyh9tnnufU7uW8sHoaq2f3ML23koltRUzpKGNa + dyUDXdVM66xlWlc9U9prhDrZ1szs3g7mjpUc5z8E4BljelQCcH97E6MaqmmvVoaBzqcyL4P8lERSosOl + 7QWQKmWlag7gBnYsm8PZ59dwbc86bu5exY2dy7mwaR4Hl05l0/TRrJjUzdpZE9m0cBZr5w0ws38U/T0t + DPR1s3zOVNYvns3CaeMZ11bHhK4GVsixezYu48TuzZzZ/xyXX9wl97eZ55bPUfUAbi7OpD4/VcpBAVgZ + 2lmZ41cZcrm7opjuytInlNBVWfwfAnA+HeXFqjmBFQFYEYiVXsDj6gbn/VUJwPKt9dUXML4hnwktRShD + Z0/rGJzKaFJbBROalWGmB+lrrmZsU5WqF/GY+hp662roqa6mrUwRgAtpysukSerZXpJBZ3mm1CeTrooM + 2kpSaMiLozpT+SfuUAri/MmN9pG24UFqqDPBkm/7ib/2sRyBj9kwAs2HEmI6lHCjoUQaPEuUwdNSPk24 + 4VMEGfyLIPOnCHcYIXG8ARnBluSE2pATbE1hkCUFvoYUeutQ4atNi7TPKXEmbEi35YVkW3ZFm7Enwog9 + 4Sa8EGnMZrGFG+OM2ZpizfYUG3YkWPJctCmb5bh1CVYsTbFlZro9YyTu6M1xoL/ElZkVXiyt8mJ9qTvb + c+zZl2zOGWnj10Ikh1ME4IBnuRf8NA/ClXl/n+H1pGd5lPg0r8c9xePYZ3gcPZzHURo8jtQR9HlVbPDV + JENOSYx2NE6Tw9ESg0SpcSxGg9Ox2lyMlhwxVIsbwZrcChIkvrousdVFibFOin0+5D2MF1z/pWK3x1Ps + 93makxFqnI/X5GqKNndy9Lkvtvd+mRH3SvS5m6fFzUw1bmdLnlmgy6sVurwlscfbfXa8NtmTyxP82dzq + zrRKJzqKHWkq8aGqKISSwiiKC2PJL0ogU/IqReRNL8kmvTSXzLIcIZusUqEkS/alU1hTyJipY1m5ZQVD + jA3/gZnpM9jZqEuiIC9bEkF/b3P8fS1VBPpZEagqzQnyMyFUDGB4gD4RwTpitLWJlTI+VFcQRxYmBkeM + TnSgjiDLQQbEhxirUAm/QnyQIgIbkyhJaJIY2/QIE7IlMS1MMqc0zZLyTHMqs0yolEC3KlOfuixdGnMH + acozoDnfiIYcParTdShN0aIkSYOiJC0V+WIMMyJGkhz0DInBz5Ac+izp4c+SLc69MHYklQma1Cdq0Zyo + TasYzRahKUFD1jVplfPbpeyRclyyDlMkQJwtAeKibFOW5RizRn53Xa4OW3I1eC5vJDvzR7KraCS7hedz + nuKF3Kc4Uj6CK83a3G3T4X6nPo+7DXh3lDEf9Brx8VgDPu3T5RtJ2n+eb8Lvq0z5Y73ZoDC6zwYO2sEh + B8GeP2T9h+0mfLHJmDcX6XN9giZnunR5sd6Arcp8ibFPsyTi76yK+Ru7sodxslwaVLUOr7aYyG9Z89k4 + G76eYMe3U+35eqY9n8+044NpljzqM+ZGkwZny4fxYv7T8uENYVvMEJ4Tdgh7ov7G6eSh3JAG+FK+Lvfy + 9XlQoMeDPG1ey9PgUc4IHmc9xbt5T/Nl+Uh+qNfm104Dfh6lzAWsrxre+qPeZ3ncOYTXRw3hncn/5Ntl + 2vwm98FzFrBD7vMFZUjfJwLwyv8QgGdr88ccbX6cpc0Pi2X7Ogu+3uXID1fD+PnNVH75NIdffyzh9z+q + +J0qkPKPPyr5Vfjl9wp+Fn75tZw/fqkY7AX8Qzl8WwbvF8Arqfx+JpzvnvfikzlmvN8j9WxR5/NmLT5t + 1uHTVn0+6TTiox4TPhyt/EHfRPXuXpZ3eaV6BGfKRnKoWI3thdpsKDNnUaky5rwR9cna0q6GSxDytEoA + Tg0ZSqoYmpQAdZLE4Sb5apLkp0GSIgAHqcn+keJ4R5IXNZLCeAkKUsQYZhhSmqpLobTFvDgNCuLVpS2L + k0/RoyRR2niCliRzanQmqjE1Q53VhbrsLNbmSIkWF+Wd36435E6DITcadDlROpSd6UOkTQzhUPmznG/X + 550FXny/NQb2p/LH4RT+OJHMr6cT+PV8LD9fiObHC5H8eEkhil8uR/PLlTh+vhjNT6fD+f5IIN/v8ea7 + 59z4foMjP62x5/fVjrDKCda4wEphqTMskG0zZf9EOz6Xtvf5FDe+XhzMd+ui+XpjNJ+sCeHd5b48mO/M + S/OduL/ci7e3RfHx/kw+PlbAG4dzuLsziesbw7g035ULE8y52qXHw3EGfDbXmB/WmvDjTvkmXnTgl+te + /PZ6AHwUBp9GyPuV8jVB2slvB4L4cJEzt0aZyf1rs6tYg2PNxlzpd+LBkmA+2JHKV6dK+O5aLb88aOWP + t3v4/d0x/PLuWH56Zxw/vtXPD29M5ofH0/ju9el8+3A63z+cwQ+vT+WnNyby2xt9/Pa4k5/vV/Pl1Sy+ + OJ/Al6di+OpMCN+c8+D78/LNnTHj8+PSnl7U56NDenx4WJuPXzTis2PWfHPKg1/OSj3PJfLb2XR+PZPP + N8cKeX17GldWxHBifjS7p0axY0oS26dlsmVyNusnZLJ8dBqz2+OZWB/FqKpIxjSmMHtiPVvWzeDQvs0c + e3E3Z04c5typI5w/c4yzUp44uo+Tx/Zx/vRhLp57kYsXjghHuXzpJJcvn+TK5VNcunyGK1eVnsHnuXj1 + PBcuKVwQLnHuwkXOnD/H8TOnePHEMZXgq+LE8b/WDxx5kX2HD7L/xUOq7X8KxcdP/puTZ05z9sxZzqkE + 4EvyW1cH5yBW5i1WuK2IvwrKsjJ89WUuXz0txx7j8rn93DjxPLcPbeD6jgVcXtvPlSUt3Flax+urqnl7 + XRXvri7k7SWZPJqXxP1pUVzt9ORCnQPnK604rwjARUbcrjDhNZUAbMUbHWYqAfj+XwKwHi+Lk73bZcUr + Y114aZw310Z7cLLdgf2S7B/s8ub45Hhura7jzUMzeefcBi7uXsKiaS3UlqdQkB9Hbm6MJPRxNDbkMnvm + aJYsnsK0ab0qcTU9LUES7RiSVHMApzN10mQWzJ1HU30DqUnJhAQFqATg6MhACvOSmDShnRXLpjF7Vi9N + jfkqJva3Mm/2eKrL0nG01cVI7ylMDJ7B2lwNG/ORWJsNx9/HUiX8trcUUF6SSG52OKN6Kli7Zhbr181l + 3pyxTJ3Yzro1c1m6ZBpFRSmkpChDTlczZ04/06d10Kj8F1msI21xdsxMdmJ9hgMvFtlxqsiMs3lGXMjV + 40axBC2VxjyqNeVBpSH3JEh5UGciz9WBxz0u3O9ykOdpy91OO17plu+ux42rjbYcKTVmV6E+6yWwWSj+ + ZGq2pgRvI+hIGs7YTB3m1ziwZXQwu8dHsbM7mI11rizJN2Vutj5zcg2YXWDKtHwzOuLUaY3TojPFmJ4U + M0anWNCXYv5kCGgjpkpsMF1819wyAxZWGrBA6regTIulZZqqHqeKyLilXJ+d1cYcarDiRJsdZzrsONdh + xYU2Uy62GHBN2sRL4tcedBvxuGtQAFZEX4V3OwwlKBvcpvC4w4hH7YY8ajPgrXblH72s+XKMFZ/3mPGx + +JWPpI0pPkYZHv+7TmO+bjNW9fr9WqHZkK9ajfmq3ZTPZPvH7cZ81CU+qFfprW7AhdKRrAv9OzM9hjDN + cwgzJXhdmqQ8Q0d2NYdyuDeWnS1+rKuwlWelrxr2+fkWZ9ZXmjM94RkmS4ywvcqSc2O8uTTWgwvyTs40 + GHC52YBbch+3JU4ZFDXU5V61eTzGgHfGm/B6rx63G4dxufIf4vv+xsmyf3Ks5J8cUgTgkmd5vnAoW/KH + sTF3BGtz1FmVo8GKHG2WSGyyMF+LOfma8r40mFukxbIaUza2WLO52ZrVyvvIGa5iab4aKxWBuEyHdeU6 + rC/XlcBdEYI12STv7PkaY3bXDQrAL1Rbyzuzkvu0ZqW0kyW1LsypcGSg3IUpFR5Mrg5gXEUgHQU+lCc7 + U5joQn6SB3lJ7hSmeVFTGMCo+nBJPGOY1RXGlHpnJlWaquY4Wik2YctoO7b22rKpy5Id45zY3G3Nompt + 5pSpsbBOj6WNxiwXP7K+U5KRcc4cmObNsdlBHJ8dyJHpvhyZ5sGRKR4cnerOMeH4ZGcO9VmxZ4w5e8Zb + smeyJDlT7Hl+ijNbJ7uyqNuSiTV6jCsXpJ32VxoxqdaYqfI7MzqMmTda4s4JZqyYYcXmJa5sXu7JhsXe + rFsYyMo54cydEMLE9gBaSzxJDjbBz14Nd2sNXO308Pa0wc/PBUcnWwyMDNDU0UZLWxttbS10dLTQ19VB + T0cTNY3hqKkPQ1tHA0N9bbEn2pgZamNrqIODgS5OsqzgaqSlwsNUBw8zXTwtdfCy0sXX1gAfa31Z15d1 + A/ztTAh0NCfARfIGVwv8XAbxcbXC280KLw9rXN0scHI1x9HVFCd3cxWOrsY4CHZuxti4KOKvAab2Ohha + a2Imts7G0RBnRyPc7eS35B69rUfgbz2cKFsNkuW4bHtDcoVsB2OyhEz5zWwvOxI9JF+x08HbRgtfB12p + mwEh9vqESJ1DLfUIs9AjxtqIJCdzkp0tiLEzJMJGj1Apgx2N5XgjfOUcb7m2l51Syv06yLN2ssDfWfIh + F2uChBBZDpHz/yyDnayk/HP7vwn3sCJS3k2Ujw2x/vbEBTmSFu1FmyTiigC8dsEEtq+exbaVM9iyYhob + l01h7aIJrJg7lmVzx6iGg1aGh1YE4XlTO5g5QRGCG5g8poq+7mI6G9NoromnpS6GjuYYRrVFM3FsMnMH + 8pg/s4CZAzlMmJRCb38cbWPDaegNprLbh6J2d3KaHUkRG51QL89BGQa60YSwBiOCa/VV4m9AlT7BVbIu + hPyHABxZb0ZYnTy3RqP/VwE4vk2ecZsZqa0WZLTYUdDqSlWHPy1dEXR1xzNuVBpT+wqlno0snNMj/moG + R47v4LU37/DlDx/zzc9f8NX3n/P5t5/y+Tef8OnXH/H+Z+/ywVcf8vn3n/HGew+4dPMEew6tZ83aSeJb + G5k1JY9Vc4s5sqWNc891cnJNLS8uLuTFuZlCMqcXJnJxaTI3ViRzZ1kcN+aFcm6SOydHW3Oq24QLkgdc + 7taTWEKbG+2Sz3Xo8JJStmryUpsW99p1BC1eleVXJI94RRGBW9V4VXhdznnUpTNItxZv9g4KwG/3G/D+ + ZBM+HjBV8cE0ydWEj5Qhn2X93WnGvDtgwnvCh7NM+VDylA/nWfDJYlu+WunAN+tc+Gq1E5+tsOO9BWa8 + PcuQx9P1eDxlUAB+Wez2zTFmUm9bzrU7crzRkQNVTuwstGNdignL4wxYmWDGkhgzBoL16HQbTpXdU1TY + D6fCWYsqDyMqvMwp8bWlwNuBHB8HUrylnXoJUqb6OZIX7EplmDf14d40hnnSHOROvWyv8bKl3MWUYvle + KuQ7bgqyoznEgWpvS7mmJQ0hTnTE+DIqMZAJ2dEMlCQzuSiRLqXXQaAzKWIjEt2cSHB3I97Dk1gPX6Lc + /Yhwl9LTn2ivAKK9/VQ9gyM9fFQCsGqIaCn93LxVIrCfi7t8l06EujmTGRpApSIAJ8aQGxJIkjKHoLs7 + YW4ucoyz2CRnvJRhn92d8fRwwcvTBR8P90GUXsWKAOzmgZerOx7OLrg5OeOu4OiKh5OH4CnbB1EJwIKr + oycuDoKzD24ufn+hrP9/oeqt+z8Y7N07uKz0LlahCMGKYOzs9V+4ufkKsl0RhpX1P49XxOH/wN3VF3c5 + VhlGVukJrOpZKKW7R6DY5cEeyy6u/xZ0/+TP3sF/8n/ar1zjT1QCt3KPToN1c1GG01Z6VLtK6eY2iCL+ + qnDD3UsRf2WbjzMuHnY4iN20czITTLEWP2AtNlgRgFWIn1Awd9ZXofQGNleGfXbQxsJeW+VDFBTx11z8 + ooWtgg7WdprY2IwQnsHO6h/YWwwh0G0Y2XGWNJb4M74zmfb6CAqyXImPtiAy0oz4JEcSUz0Ij3XBw98G + Zy8bnDwdcPXzIjQpkaDENFwjErAJisclPh+/3CbCSnuIKO8mvLiFwMwSPBMS8YgJwiPSCe9I8SGRBoTG + 6pKUakBOvjmV1U40NLvS0uYsONDaYU9rqz0N9VZUlVtQXGBGXpb4uFQ9MlJ0SU/VJUvWi0rtKC61Jy/X + SvILU3IkLs5LMqYwwYiSeCMqY/WoidKlLlKbxghtmiO1aIvSpj1ah95wHaYGSazsJzGyjy6LPLRZ5qLB + KhdN1rvrs8XLRDBlvYsBa+SZrrYdyWYHdZ53GskOp6HsdHxK+AfHAtS5k27HOxKHfdcTz4+jkvmsNZrX + S705H2/Ofj9NNts/xVrLf7DVbjjP26uzU97D85aabDUazjZht5kmByy0OWiiyT79kRzQE4zUOGimwQEz + NXabjhCGs1dynkPi04/LOz1nb8QlSwOuGGpxQ3ME9/TUeFtik/ekLbzna8g7MaY8Srfgnjzf28UWXCk0 + 5mqhCVdzDLmSosfNNENeKbDhYbkzb9a58U6zG++2uPFWsy3viL96p03sscTkigD8meSHX3bY8GW9NZ9X + WP2HAKzJHceRnDMdKnV+lg2aw5g18mlGqT1Lk6EGre5WLKnL5fTWxdw8u4ttmxaK36ulprqQivIiSktK + qKlrZOKkqaxes4E16zfTO2Y86Rk5BASF4eWt/HOGIv66Yy/2x9ZemfvXQSUAG5ta4erhR0pGPn0Tp7P3 + wFEOHjnNslUbaGjpIjO3mMISpQdwJTW1zUyeMos167awafMO+sZNJjYmieCAUCIUAVhy0fqqCskRxzF+ + bCfV5XnERgX/twDsHUhAwKAAnJ2dz+RJA5w7e4FPP/mcb779no8/+Yx33nmPM2fOsXDBImm7TWRk5fHn + HMAZmbkqUXhgxhyVAHzl6i12793P1IEZlJSVyzFpqt6/ufn5lFeU09XZLddZwu5de7hx4wZvvPmYR2+8 + ysPHd3jznbu89+FLvPn2NV55+SQv3z7Oo5fP8FjKh1d2cW7nDLZOL2TL2Hh2jgln11g/DvR5cGyiK6cn + e3J+agBnpoSxo92NBdIupmRo059pwOh0E5rl+ymO1CfJX51Ah2fE52iR6G9EvJceca5aRFg9S4jJ3whX + MP47sZZPkyZtIM9Lh7IgYxqibaiPtKLc34BiH22VcFfor0dhkCGF4SZkhRiQEqhDQoAWMfIbsYHqJAUP + isDpYheSI/RVI2smRsty3BMRWEiS9chgdcIDRxIm54QIgSo0CAzWJThUn4hoQ5UQHCvHxylDSSeITUgV + 35xpRk2eBc2F5rQVmNCUpU1Dqjr1GZJP5xjQW2HHhAYvBtojmDUqiUVTili/oJmNS3tZtWA0i2b1Mnva + KPpHt1NXUUJafByh/gFEhoQRGxFDdFi0ithwWZb1mKhYYiL/N9ER0USGRRIWHP4X4aERqm2DRBEZHiXH + Kcf+iVwzMoqoiHCiIoNk2Y+4SF95Rl6khrmTFepMfqgDhSGWEk8YyfPWoNxPTZ7/CGG4qqz0l22+6lT4 + atAUZiz2z5zGUCOq/fSoDdCn1l+fGqEuQN5fiAWNkdaCHU2RDtSG21MT4UBVqB2lwdYU+VtR4GdOfoCl + iqIgG9XczzWhjjRHuNIW7kxriCMNAVZUehlT6qpPkaseBUKRu8RIXmbye9Y0SVzUHuFOW6QbdUH2EntZ + k+KkT5ytNpGS/0QqOY6rAdneJhQGmlEaJvGZ1L080pA6se0taaZ05NrQnit1zZT2lmJBTowJGVEmkltY + kBxmRoSXtsRN0n7lPtOCxX/INbIjLMkSH5QWYU56jDm5SdaUZ9nTWOxCf2Mgs7vDWdUfz8ZpGTwvcfTe + pU0c2djP6efncGrnco7vWM3R59dwdOc6ju9dz5nDm7l4fAtXTmzl1J7V7Fo3i3Xz+pg/sZn+5mL6W4pV + vX4HxO5N72lQDfc8rbOBqR11QgMzuluY3dvF/HGDwz/P7RvFzLGjmC7bpvZ0SK7bzOjGWnrqqyRfKqGh + OI/KvGwK0pPJiI2W+sdRnZfJuMYq1kzv58CqeZzauJBT66W+a2dyfuN8Tq9fIPcxnW3zJ7Np/oBKAN6w + cIbkVNMlp5rCsjlifxfOZP2i2ayeP4MlMyawaKBPdczzqxaoROBDz63h9J5t7N+0grVzJzN9VDMNBWnU + 5aaiTPvTVpqrEn8V2kryaS8toKOs6AmFKhQBWBkCWqGrspSeqhK6q0r/SwDua1B6ABczvrGI8Q0FTGgu + ZEpHCdO6K5jZU830rjImt5cxoaWM8c1CS7mUcm5TuTyDSsY2KNTI9WroEjvaVlJEc34WTXlptBVnSD0G + RWCF9tJ0mguSqMuOpyo9mtKkcCGM4qRQChKCxEbZE+5mQoD4XD8LdYIs1AgVfxxmNIIw/aGE6z8r5TOE + GDyDv/5T+Jk+LXm2OvHSZjPDHciNciYv0pniCEeKg6WNBptRL22wPdacSYkWrMl0ZGuyLduizXg+0pgd + Em9tizJltbTxlVGGrJVjNkr73J5ow7Z4azbGWbM6yZZFaQ4MZDrRnWJDb74rA3XBLGuPZltnLDtleW+B + Oy+mWnNW7On1EMndgkbySsCzvBr6LK9FPcPDhGG8njKch0lDeS3hWR7GD+NhrORvMbq8Ljb0YbQxr8SZ + cjHFlKMpRhyI12VvjBb7hINxOhxPMOBsnCEXI/S4Eqo7iNjvy3LuuSg9joZqs1/s8g4fiXcUfIexM2A4 + ByPVORqvwakUbS5k60o8YsiNEkOuF+tzNU+HK9laXM/R4W6hAa9UGvFGlw1v9LvyyhTxV/3BrG/zYUKF + G40FLlQV+FKYGyixXzg5udFk5sWTWpBCcmEGqaV5pAkZ0iYzSnMGBWAVWZRK+xo/o5810p6H6Ov9HVOT + Z7G31cRVAj1fTzP8vCzw8bHEVwjwsRpEEYF9zQnxMyFMHFt4oB4R4nRihLgQHRXx4oCU9agAMToBsi9Q + n9hgIxXxihgsxAUaqogXo6uQHGIoTs+EvFgTChJNKEoWAy5BcWmqPhVpigCsR0OOvorGXENpxEbUZuvJ + Ph2Kk7VUgll+vCZ5CZrkxmmSHj6SxMBniQt6lkRFkAsbSmbEcPJj1KhIUP5bRod6oVGFOEHZptAoNMdp + 0C7XGCX7+pP1mJ5hzLwsUxZnm6jmA16Vo8uGHE025aixNXck2/PVeL5AjS3Zz7At62kOFI/kdI02Vxt0 + udNiwL02aUgdkqgrf0AepccHY3X4apouPy4y4fd1ZrDVHPZYwYs2cMwejjtK6QAHrflxpzFfbzHi3aX6 + 3JmixcUxBpxsM2VPmSHr0oaxOGIIS8OH8Hza0xyV371YrsnLDcr8hDZ80mvHl+Md+HqqM1/OcObjGQ68 + NcmCu936nCx7hgPZf2dH0t/YEjuErdFyjZghvBA1hP1yzTPxT3EzZQQvpWtwL0OL+xma3E9X59X04TxI + e5ZHaf/iveyn+apsJD/VafNbhwE/9xjwfa8eX4/W4OOeZ3jUOoSHnUN4a/zf+XKhGr+sM4Atcq/PWyOR + /6AAvMmcn1bIeQu1+GmeJr/P1ub3uTr8Ok+fX5aZ8tMGK755wYHvLwbyw+vx/PBRBj99W8Cvv5Xz+x8V + /PFbBb//Xq4Sfn+S9R9l+UfZ96siAv9cDj8K31XCh4XwIAMuxvDjbj8+X2wt70GX91vU+KhJg09bdFUC + 8Mfynj7sMuKDUWa83W3Ew3alZ606lyqGcrp0BAcLR/BcgSYbSkxZUmrNhHxTmtN1KU9UJzdmOKmhz6DM + A5wiAUeyvxrJEoSk+mmTJglCqgR5aUFqpIsRygkdQUHkSMoStalNN5R2LcFAppEYXR2KpP3lx4ykME6d + EmmDxbEaFEePpDpqKF1xw5gu72S9GIo9pTqcKNfhao0BdxqMVALw5VpNXsz/F7syhrAv/28cqRnGldHG + vLfclx92xkobS+WPEylwKZ3fr6bw67U4frkWxc83IvhJ+PF6uKr85WY0P1+N5KfzYXx/MoAfDnrx/U4X + vt/iwM8b7PhtnbTTtdJG1zrBKmdYrvQCduSPmfKuJtnwaZ81n0115aslgXyzPoqvNkbyyYZgPlgbwBsr + PXm8xpv3ng/jy6Pp/HCxlB9v1vDV9Wo+OF/MO8ezeLwjmpcXeXC7z5yXe7V5e5oWny3V4dvnzPnhsD2/ + 3HgiAH8SDp9FwnuhgwLwtQh+PxjKp8vcuSd1OFFnwOEqfc53WfPSgDfvro/jq0N5/Hilip/vNfD7W+3w + ca9co48/PpvA759N5vePp/PrBzOFufz24UL++GgJf3y8WFjAH5/OkeNmwqeT+P29br57Tep9t4Cvb2Tx + 3c1Efrwdwi+3veQZOvDNRXO+OGnMJ8f0+eioFh8d0ePTo6Z8fcKZX04F8tupKH47mcivJzL45nAmr2+J + 58qSME7MDmHPpGB2Toxm+6REtk1MYVN/Mit7E5jbFsWkulDGVofS15jAwJhi1iway76dqziyfxsnj+zm + 3PEDXDh9mPMnDnH66B7OHNvDpdOHuHJeuPgiVy8e5frlE1y/eoob185w7eo5rl87xzVlOGjh8pXzXLp0 + gYvC+UsXVcM2K0M/K8M+/8Wpf3P4+DEOHn2RQ8eOqNaV+X5PnjnFydODnDqj9EQ+z8WLF+W6l+T6V1Ti + 77WbN7h5+46KW3dfGuSOrN+5KfuuqATgcxeOcOHUXq69uI07+9dyY/s8rq7p59riFu4uruW15ZW8taKE + N5dk83huMg+mR3NvUig3Oz25XO/AlWobLpcpArAht8qNuV9vzhttgwKwMgT0vUYtXm5S/oCr/5cA/PIY + F14a683VUe4qYfBgsx3HRvtxYUYSr25o4sPjc/n0yhZuH1zOmjnddNTnUFeVSVVlOvW1WYzuqWLp4ims + XTWHWbPG09RUSX5eBnk56UIGZSXFzJk1mxVLl9HV0Ul2Riax0ZFES6KdlhxNVXkOA1N7WLNqJgvmjaNV + gue25hKmTu5igQSuNVU5ONkbYKz3NKYGz2JjqYG1pTrWFiMIkISipCiObgkOq6vSKCqIkSS/jq1bF7P9 + +eUsXzaV2TN62SyB8aqVs6iuziU/P5Gx45pZumwa8+eOpqMumapEJzoT7ZiV5sjGbAdOVjhxvtyKi0XG + XCnQ42aJHvclMHlUqwwDrce9Ch0e1BnLc7XjcY8j97vsuNtuzZ0OW17uduKVLhcuN9pyuEyCOwlq1hTo + sCBfh2l5uowV/9KWNJJRGbrMlAR0bVcgO8YpQVwwq6ucWZRvzpwcQ+bkGTIr34Qpuaa0iX1sFrvYIXFC + d7IZvcnmjEsxZ3KWGdNyTRjIM2CG1HNOqT5zy3WZX67F/FItFpdqsKxIEYB12FKhzws1phxstOK41FsR + gM92WHFe/OtlaRs32vR5pduYhz3GKgH4zQ59lej7jkK7IvTqyzZF/NVXCbWvi/94JO3ozVYD8b0WfD7K + gk87TfioVY8PpY190qTNV3Kc0gP4mw4TlQj8TasRX7UIrSYqAfjzTlM5x1T8pzkfjrbkdfmd8yVqbAj/ + Owt8hzBXmfZBYph1WZZsK3VnX2sYh3ti2NsRpOotva7SSjBnc60Nq4oNGRA/PjXqHzxfbaESgC+Pk++i + 25GzjYZcatJXCcAvdcj765T3p4gVo/VVQz6/IXHGq11a3Kh/lgvlf+dE0RCOFP+NF0v/yWHxhQcqR/KC + +P7NhSNZKzHQimx5rjlaLJWgdWGuNnPztJmZp8WMfHVmKUNBlxuwTp7zhgZLlpXoSDw1TCUALytQZ7W8 + i3XyLjZU6rFJKct0VALwRnlv26uN/hKAlSGgt1ZYynFyjzV2rKx1YGGFLXMrHZhT48GsGh+mVPkyrtSb + 1hwJjrM8JKHxoTbHRwJlX0myQpjaGsGC3hiW9IYwp8mR2TUmLG0wYVOnJbvHOrBnjC3Pd5mzW8rtXZYs + r5K6y30ur9NjZYPcQ6sxz4+2ZW+/M4emeHB8ujcnhePTPDgx1Y3jk104OcWFU5OdODnehsOjTTgg/vfQ + eHMOTrZm32Rbdk2xZ2OfDfMlNpxSrcMk8U9Taoxl2VQwYmqtITNk39weIxb2GbN0iikbFzmyYbELaxe4 + SRnI2oWRLJ0Ryexx4ZLkSfAfa02ImzbeDlp4OuuLHbAjJMQDdw8nTMyN0THQQVdfV9BBX18PIwN9DPR0 + VL1/1TWGqwRgfT1N2aaBsa4GljpiT7Q1sJHSTlsde52RKhx0R6hwNBiOg+EInIxG4iilvb6yrIGXuSIK + G+PjYIqP0yDezqZSJ3M8XMxxc7PEydUMe0djlahr6ySlkyFWDnpYOeqrsBCUP+pbCCZ2uljY6WPjYICT + 4G6nh6eNJh4WQ/G1eIYIqxEk2mqQaaNLjrUu2db6smxApqMpuZ62pLhbECLX8LXRxtdel0C5RrBcI9hK + jxAzHUJNdYi2NCDZ0ZxkJwtiFQFYrhNia0CQg5FKAPaXuvpI6eNgKKWybIqvHOvrOIi/ECDnBwmBDmYE + KAKxrdy7tTHeVgYqFGE81NWKaG97SaZdSAlzIyPKi6x4P4rSw+htLGTepA7WL5qsEoC3r57Jcyuns3nl + AOuXTh4cCnrheNZIOTg89ASWzx7NooEu5kxpY/akJgb6apkwqoRRrZLYNyaKX4qmrTaE0a1RDIzLYO60 + fObNKGL6tBwmTE6lRxGBx0RS3xtIuSICd7iT3e5KWosd8Y0WxDSZEqGIwPWGqiGglV7A/1sANiWq0Vwl + /EbJ8QrRLeZP5v9V5gJWev+akNBuTHK7OZniE3JaHShuc6e2M4DW7ii6uuLp7UhlfHcu08bXMHugg+VL + p7J3/1Zuv3KF9z99m69//JJvf/qW7375ju9+/o4vvv2CDz5/n4+//phvf/2WL77/kAdv3ODMxd3s2jWP + ZRIfDEzIYP6UVHYsL+XwygoOzi9g74xU9k2L58D0KI7OiuTMvGguL4rh2oJILs8M5FSfE8e6LDjZZcyF + HvED3QZc7dDhZofkcp16Yit1VeLvy+3avNKuoxoW/367xA+tGoK65HqavNqmLnmPDq936fKwS1vFG706 + vD1Oj3cmGPLBVFM+mW6m4k8B+E8U4feD6aZ8OFPK2bJ/rqmKjxdZ8uUKe75e68hXaxz5bIUt7y0w5e1Z + +ioBWOkFrAjAL4m9uN5rwiXJ/862OXCswYF94lM3ZZiyNFqbRRGaLIszYkmMEdOCNelwU8TfIRTbPEWR + 4whKXHUpcjeSb8eCLE8b0rxtSfR2INZH6UlvL3nNvwXgBqE11Ju2QDeafGxplHNqXY2odpIc3UP8cogt + ncHW1LgbUuNpTFeEMxNTgxjIjmReSQKLJD6ZWZLIaGn/5UEupLtZk+hiR6KrM/HuHsS5+xDt5keku9+g + AOyt8G8BONTdixA5JlBKfyn93Dzxd3UnwMWFCHcXssICqEqKojoxhpzgAJJ9vIn28CDc3VUlAPu6uuDj + 5oK3h+Dpip+Xm+COn6cHvnKcj4K7O95ubnjKNT2cXfF0eoKzh+D1F/8pALs6KqKsIr7+3wnAqh6y/yH8 + /j/h6qwMOf1v/lP8VXB1+e/t/z5WWf43iiisCMDKULJKj0J3z8HSzT3g/38CsCKYu0pdFAFY3pciAP85 + FLSCIgIrQ0E7ezpi72yFjdhOaztjbB1NsBL7bCX+wNJBQfffcwA/EYCV+X7NlHV7LczttMR/aKtQxN8/ + BWBz8QWWNuLjrCV2tv4X9lZ/w9lqCBHeko+n2DFKcqtpo1LFJkdRmuNKcrwl0dFmJCQ7kJTmTkScM+7+ + 4sc8zXH0sMbNz43IpBiC42JxCQ7F2icI26AYXOOycUssxDUhB7f4DFxi4nCJDMY90hPPCBt8IowJitIn + OtGI9EwT8gstqaxxpL7ZleYWJ5pb7QT5rlpsqJUYqKLCgsJCM3KyjUlP0yM1RY+kFF3SMuR7LbQlv9iO + nDwbMrItycqU7zddjk01JS/FhOIkA8rj9aiK06EuRofGWG1apGyN1lH1Ap4SrMsc/0EBeLGHFitdJUZ2 + 02KrlyE7vM153tuMrW6GbHTUYYODBtudNNjlosFu5xHsdXqW/W5PcyZEi3uZ9nxQHchPPZLXjk7ly7YY + Hpd4cyHOjP0+6myx+QcbLf7OTrth7LMfyQFbdfZL7rLbeBh7jUdwxFyLE5Y6nDDT4rDEFAf0hrHfcDj7 + zdTYYzaS502Gss3wabYZPcNO8+Hss9LgqLU2Zyy0OK+vxnXtodw3VuNt8fXvu+vzQbAxHyRa8la2NfcL + LLhdZM7lfCMVV7INuJSsy1XhTrY59+T5vVbpyOM6R95okLLehreaLXhbfNh7HXIdieU/k5jwC/Fhn8v7 + +KzckvclF3kjTo+HARrcdlbjjLncl8FQVmg8Rf/Qv9Ew7G+U6Q2lXtrK/MYcjm9fwI3zO3lu6wJ6RtdT + V1cseVqJvNsy6hqamDRlGuvWb2Lj5q2M7esnMyuP4NBIvH0D5TtVhlIfFIDt7J2xsXXEzMIGI1Npi25e + JKVmM7Z/KnsOHOHoifOsWb+Vju6xFJZUUVHTSGllPU3NncyctZANm7azectO+vqmEBOdRKB/COHB4aQ9 + EYCnTepTCcBVZbnERAb9rx7AAf7KENDhZGbm0t8/mVMnz6gE4O+/+5HPPv2Ct99+VyUAL1iwiPqGZrJz + CkhJzVSRlZ0v21qZPnMue/cdkjz/Bnv2HVAJwKXllXIfaWTn5ZFXkC/PpYLu7m6WLFnK3j17uXbtGo8e + vc4bbz7g0Zt3efOdW7z7wW3efOsyL915kTtXD/Lg5lFev3aQ1y5t5+KuAZ6fWcjO8QkSg0dxeLw/R/o8 + ODPJnUtTJccfCOLyQBjH+gPY3OLIkkoL5sh7nZhvSmemMRXybtND1In2GkFykMSV4RYk+xsQ7TySYLO/ + E2wkdsNsCNHm/1AN75zlqkaetxZlwUbyjdnSEmdLbZgpNaEmVIebUxVhQXW0NZVxNuRHmMq1tMSnjSTc + ewRRfmokBmmTHKqjIj5Yi/hwHRLk+0yKkRg1Rpli0ZDESD1iQjSJDFAnzF+NYEWg9tfAz08dX7men78O + gcE6BIdInBsmMa5cKypcj8RoPTITDCTeNKYq24TaLEMqktUoixtGacIwatJ16SixZ1ydHwOd8czty2Pl + nAbWLepi/vRW5kisOX/2eBbOn8aMgcl0dbRTmF9EdFQcEYrwGxlPdESCipioRGlXg0RHyjYhMiL+CXJ8 + eCzhYTEqQkOiVISFRst1Yv6b8HgVYeFxg0Qo2yKIjAwlIjJQrutPXKQ3yeFeZIa5kxvmQmGoLUWBxhQG + 6FLqr0mpPKeyQA0V5QHybvy0qArUpyPGlt5kZ9rkfdQFmVIbZEKdnFcbYEJDkCVNYXa0xjjTGu8ueNEY + 50VdnCc1MZ6UR7lTGuFOSYQbJZHuFEd5UCZURntRJdRHedMk9WoMkxw0xJnKADtKfa0o9LGkwNuCIl9r + KoIcqQv3oDHKh6ZoX+rELxRLfJXubkmolQ6+pmp4GA/Hx2wECR6mZAcqQ+k6SJt0pDLBjtpkW5oz7egu + cGR0uQejytxoLXSlJsuRgiRbcuSYrAQn0qIldguUeDzAlNRQK7Ij7cmX+8qNcyUnXuKkWGcy4iWuS3Gj + PEfus9hfcsoIaQNxLFZ6gE/KZeOMcrbObWbn8j72rB5g95q5vLBmAS+sXsQLaxeza9NS9j23nMMvrODF + XSvZsXY2q+f0Ma+/lSndypy2RUxoKWdqhzLPbwPTeyRf6WpmWmejbKtXlbN6pI2N7mZB32DvX0UAnjFm + FAOjOlUC8KSOFsY01TG6qZbuukraKktpLCumKj+H0qx0yrPSqC/Mpqe6mLmj21g/MJZdCyaxf/EkDi6e + wIlVMzgp9d6zeIDNcySHmjmBlTMkjxKWzpjE4pmTWDRjIosFZX2Jsm16PwumjmX5zIlyP1NYt2Aam5fO + kntfxIYFA8yf0M2E1mrqc1NUArDS+1cRfJXhnxUBWJkLuLVYWS98QoHsL6RNlv9TAO6tLlMxurbivwXg + xiL6JTec0FTI5DbJ3XrKmDm6krljapjRXaoShCe0KuJ6Cf2tihBczrimUqGMsY2KEFwz2BO4ppLOihLa + ivJoKcigrTiTDmUe4LIsFe2lGbQUyvPLSaYmI56K1NhB0mMoSY0kU9pygp8DYZKvh9jqEyFxVJTkyRHi + p8MMRgojCDUcSaiJGoGmI/G3GCFxuzHZ0W5UZodRkxdBbXY4jZmhNKX6057mQ2+mD305HszId2dVgQcb + pd1uTrJiW5wlW+Os2Cjl8hgTFscaszTeglWJ1mxKsGVjgg1rE+1YkeLAvExnpua60ZvtyvjyAOZ3JLBx + XCb7+3M5IsvHygI4me7AuShjboRo81KgGvcCh/IgdCgPo4bxeuJwHqaO4LWU4byaNIJXE9V5NUGb1xKM + eC3eTJYtuCPxw7lUSw5LLLUnQZ8XJG7aFaPLnnh9Xkwy4WS8CWeijTgfYaDiXJQRZ+NMOBFryAGx1S+E + arNVbM9mFSPZEixxTKQau+PU2JesyeEsLY7l6nKiQIfTeTqcytXmbLYWF2Xb9UIjblea8qDTngfjPbkz + JZTjEyJY1RrA2HJPavM8KM3zJzc7iGx5vhk5MaRmx5OQm0x8bhqJhTkkFeeQIu0yrTiLzJJMFYMCcCnj + Z4xn9bY1DDGSgMraSl2CdH085MX5epnj520tTt9Kha8KS9lmib+POUG+Si9gI8ICDYgI0idKAsjYEB0V + cSoBWE8clLYgzidQVxCnGSDbFUFYiPbXI9pPHJmfrAtxgXri9AzJlIeXLc4uJ1aH3HhtiiU4UwnAEqzV + 5yhCmZBrpFquzBzs/VuQqCHHjxTUyRayYjRJDR9JvLzo+KChJIYMIyV8OBmRI1QTnpfKC66K16EmTpta + +Z3aWC1q4wapi9WkPlqNlmgNOiRIHpOox5Q0I2ZnmbEw24wlucYsy9ZntbygtVnqrBM25aizOVed9RlD + 2ZD+NLsK1HixXIvTVbpcqTPkeoMBtxv1eLlJV/Xf4m/0aPDpNB2+W2rErxtM+WOHJRyygeN2cNpxkBNK + L2Arft5lyHfbjPholSH3Zuhwbbw0ri4zDtUasS1PnWUxf2dhyBC2Jf6DF/OHc7FcGnmDKW922PFhtwOf + jXXii0kufDrdhXen2nF/rAkXGzXZl/MP1Zy/m6KGsFHYFj1EGvYQ9srykei/cSnuaW5LUPBSwgheiR/B + y/HDhaGy/DT34v/Jo6R/8UHWs3xTOpJfarX5o82AX5RhoHt0+XaUBh93PsXrjUN40DKEN0YP4ZNZQ/lp + lR5sMoXnngx3/ZwVf8j6jyv0VQLwj/M0+VUlAOvyxyIjfl9tzq9bbPh2lwPfnPPlu1ej+Pb9ZL7/Opuf + finm199K+f2XEn79tZQffi/nO4Q/ylXLP/9aLvvK+UM1F3AlfFIEr2fClQR+3Beg+m/6D/v1ead5JO82 + qPFJqy6ftunzUaeBSgBW5nBU5nJ80KrDzZoRXCp7ltPFwzmkCMDy3NcVGrC01JIphaa0Z+pSnapFSaIm + mRHS1kKGkuQ/VCUAp0rAke6nTWagjqBFdrAmWUEjyQ0eTlGkOjUp+rTkmtNRaKUqqyShK1EE4MjhKoqi + 1SW4GElh2DNUhv6LruhnmZUm7a1Yn/1lepyp0uNGnQl3GoxVAvD58pEczP4bezKHcKD475xQhvacbMUH + 6/z5YX8cf5xK5/fzqXAjgz9up/LrnTh+vRvNL3cjhQh+vhOuKn99KZJfb0Xy05UQfjwbwE9HPflxrws/ + Pu/Az1ts+WW9LX+st+OPddJOld7AK5z4Y4EDv82059tJ1nwy3oZPBlz4YlkgXysC8JZIPt8axqdbQ/lo + WzAf7wrny2OJ/HQ5j9/uVPDba4388loT392r5ZtbFXx2MpN3tkTwcI4rL4/V47WJw3l3/ki+3GzMDy/+ + vwnAsnwtCg6G8eVKbx5OclDNdXlGkribY515vCCYz7an8v2JIn67XcMvrzfy+/vt8HkvfN0HX00SpsOX + 8/jji0X88eUyWV4prJHtq+GbVfDtcvhhqbQpOebLKfz8US/fvdHI96+V89ODHH59GMsfD4P47VUPfr4l + z+KyJZ+fM+KTUzp8dEyLj48a8NUxG34+4cWvx4L57ag8+yOJfLM/iUfrw7m6wJ8T033Z0+8jSUsQ28dH + 8Fx/LJv74lgzKpoFraFMrQtgQm0wExtjmdadJUF6B/u3L+HI3g2cOLidc0d2cfHEAS4e38+FE/u4dHI/ + V88c5Nq5g9y4eJgbl49y++pxbl07ze3rZ7l14zw3hRs3Lqq4eu0CV5Reukov4CuXVT12z168wKnz5/49 + D7BK5JXyzOm/5gRWegkr25Vjzp47y5knnD1/Xq51iStXr0gCd1XF4BzAt7h9566KO3f/5A637txU9QC+ + ePkkZ84e4szRXVw+sJk7e9dw67l53FjTz43FrdxdWM39RSW8vjCHh3OTeG0ginuTg7nXH8jL3V7cbnbm + dr09NyrNuVpiyI1SA16pM+VRq4VKAH7QasgrjVrcbdDkbpMed1qNVQLw3V4n7vS6c6XblZPtdrzYasfp + cf5cnZ3M65ub+fTUfL68vpV7R1ezbbEkyp1l9LSW0NFSRI8yxM3EDjauX8RzW1Ywf94U2lprKS3OpVwC + v+rKMlqaGlmyeDHr1qxlbO8YivILSE9NJj0ljiJx2i2NZcyZNU6uMZ9lSybT01VFZ3sl06f1smTRAPW1 + Bbg6mWBmNAwLkxHY2Wpja6uJrY0GQUG2lJYmMmZ0DQ0NOZSXJTF5Ugs7dq5g1+41rFk9iwXz+ti2dQkb + 182ntblUkuxMJk5uZ/W6mSxd2seolnSxS850p9gxJ9OBLXn2nKtz41qtHdfKzbguz/FWma5q2OdH4ode + Ez93v1qHB/VKD1hLHnbZ8HK7Fbda5LtrteJOh73gxIUGK7FJhqr5f1dIoDMvX5epeXqMzdajLVmDTklA + J5dYs7zNj+19MWzqDGF5pQsLC62Zm2fMLPH70yRpHZeqS2PkMBqiR9KWoEeXBGG9SaaMSzNnsvjo6flm + zBC7PLPIgFliJ2eV6DC3VIt5JVosLFYEYE3WluqxWZkDuM6c/Y2WHG2z5WSrNadbzTnbYvyXAHy/25hH + fwrAsv5WuwHviK9TeFvW3/4fAvDjZn3eUOby7TTh4w6h3ZiP5bj/KQB/1a6IvoaDArBCmwlftpv8WwAe + ZcEHoy14Tc49V6LGpoi/szRQCH+WtSkGrM+2YUuxC7sa/NnXFsqB7lD2dvrxXKMjaytMWF1qxHJ5vrOS + nmV2wtPsqFEEYC+u9nlzeZQj55tNuCq/e6fLmFdHGfP6aLnH0YaD4q/wcJQu99rVud00jEvVT3Gq5G8c + Lf07x6uf4Xi9OkcbtdlTrSl+SJ1VuSNZmq3JkhwdFilDdefoMiNHm2k5mkzNUWNargZzCnVYWW3G6moT + FuTJeoYiAI9gWYEGa8v12FhlxJYaY7ZVG7G5Up91ZVpslO3bqwZ7AO9VDQFtw3MVFmyqtGJTnR3r6+xZ + XmXN4mpbltS5srjBmwUNvsyu82dKtT8TKgPpqwxlXHUYE+rCmdEWw6LeWNaMj2Pd2BCWtjqytN6EdS0m + vNBjxZHxThzts+dAjwUHR1uzu8uctVUSY5UNZ43EOOslhtsusdf+8XYcnuCk4thEJ45PcubkJCfOTHbm + tPicc5McOTfRjpNjTDnSrceRUfoc6TPhyCRJIiZbs3eyDevleS9o1mFWvR4zGoxU8wvPbLBgQO5/SrUe + 0+q1pb66zJH3sGC8Pmvn2bJmvr3YegdWzfdm1bxQls+KYNHkKKZ0hlOZ7ixxtCH+bjoEeJkQHu6sGtrd + 398DazsLDIz1MTA0wNBQHyNjA0yMDTGSZV1dDTS11dDV00RPXwsjAy1M9TWx1BV7oqOBveCgoy6oCX8K + wMNx1B+Og4GUkvjZ6w/DXm84ribKHGlGhCo9YT2sCRaCPG0IUHoje9nh422Hr689Ht42OLua4+BiKphh + 72yCnZMRNs6GKqyU0s0IO3cTrJ0VodgYewcjXBwM8bDXx8tWCy/LoQRYPkuk9UiS7TTJsdel0E6w0SfX + zpA8ua7yx5Q8fwfi3c2JcDUhzM2UKA8LotzMiHAwkXMNibY0JNHOlFwPe3KkjmluliQ6mxHjakG0p9Jb + 15oIL1tCpQz1siZMlsPkuHAvx7+IUJX2cqw9ER52hLrZEOhggbeVEe5mOribahNgb6oaCjor0o+ipDAq + sqOpKUigoSyV9ppspvbWsWzmGDYtnca2VTN5ThGAV89g25rpbF4xjfVLJqmE37UL+1mzcIIsCwv6WT13 + HEtmjmLhQAdzxc7P7K9l8ugixnVkMaoxXq4dRnedfAMtsUwZncb0ibnMmJLLlCmZ9E1MYdSERFrHRVDT + G0x5jy9F3d7kdLqQ0mZDvNjvmGYzohoH5/tVBN+wGlMVynKk5BnRjeZES9tVjotV5v5VxF+xoQntCmaC + KQli25LFpqV1WpDdZUtehwOlHR40dAfRITFNR3ss7Y0JdDemM66zhKnjm1mycAo7d27i0rVzvP7Wa3z6 + 1Wd89vUXfPLl53z46cc8fPMR9x/d49E7j/jk64/4+udPePfjV7h26yAH9i9kxZJGpvQlMW1cJGtmprBj + Vga7p6XwwqRYdksCvXdyCIenBXNyRhgX5oZzZa6UA76cGOPA0U4zTnY8EYAlF7jaocetTn3uCHdlWekF + /LIiBLcrKCKwFi+3aaq416HNqx2akrDr8JoiAHf/KQDrqQTgdycY8cGU/y0Av/8ERQB+f7opH8yUcvag + +Kvw4QIzPl9my5er7flqrT2frrDmvYXGvCk54esDOjxUBODJhtzpM+ZarykXJI453WLPEbGTLxRbsipB + 7EjoSEFsbqwuS2P1GZD1Ht+nqHP/GyUOT5PvMJw8R3VyXHTJlG8vzV2+Bfl2lZ6/0fLdRvs6kOLvTF6w + u2ru36YwPzqC/egMcKfDx4YubzM6vI3p8jJmbKAlEyMdGBNqTaOHPs3eRkxMcBdfHsWyikTW1KWzrjGb + RRVJ9GeEUaf88dbTjmQna/n+5Jt18SDO1YdYN3+iPfyJ8lLEX18VUV4+RHp4E+ruSbC716AALOt+su7v + 5k6AqwsRni5khT8RgJVpN4ICSPXxJs7D8y8B2N/NRc5xxdfTDT9vOc/Hg0BfTwJ9vMReKQKw2yDugpsb + 3q7u+AjeLu54Sv3+twDsrZoL2NXJF1dnwcX/L1xk/b/5vxWAlV7ASo/i/xN/isGKyPq/BeI/cXNRegAr + oq8ypKzSCzhgcPn/KAArcwT/mz+HhP6T/7nfxVW5ziDO8pv/LQAr4q/Cn72AlWGgleGgn8wJLO/D2cMF + e1c7rO3NsbA2wlL8irW9sUoAtrQd7M1rZqeDqWBir42Jo66gzPmr9PjVVgnAZuIXTJ6IwObiGxQsbKW0 + 0ZLrqWFp/TS21v/A0XoI3vZ/J1Hy87pMR/rqw5jZm8z4pkhqcl3JSLIkOsaU+BQHkjLcCY9zws3fHEdP + U5zEn3j6ORERF0JwVAhuAb7YeHpi7S3PJSwGx4gE7EJjsA+NwCEsEOcwuedQe7zCLfCPMCQ81kCuaUFe + gTUlZbZU1ThQ1+BEY5M9DU3W1DdbUtdkRZXEQGWVFhQUmZKVY0xahh7JqXokpuqTmm5MVq41uYX2giPZ + +Q5k59qSJTFidpYVuXL94jRTypINqUzSpzZej8Z4HZUA3B6jy6hIibuDJRbx12G+jw5LvbRY467JJk9d + dvoYs8fHnF3ybT/vZsgWecZbHDTZKXZin4sm+5zVOOgynGM+I7kSqc/DbEc+rPDjB7HpP3cl8HljGK8X + uHM20pC9HsPYavU3tpoNYa/tUA7ZDuOo+O+jFiM4bDyU4yYjOWupzQVrXc5b6HDccCSH9Iay32AYL5gO + Z7vZMDYbPc0G/X+yQe+fbDV5hhcsRnLASp3jFmqc0h/KVeGBpQbvuEgM7mfER1FmfJxuy3sFdrxWbKUS + gK8ViF1/IgBfTNbhUqI2N+QZ3s234pVSWx5U2fKwRsGSR41mvCH5wDsSs7/facxnXRZ80WalEoA/LbPg + /VwT3ojT5UGgBjdcR3LSUuoq97JA8+/0DBtCyfAh5OqLjQ2wYk57Loe3z+bC6c1s3jKHrlHV1NQUUFFe + QGl5MbV19UyYNJk169azactW+vonyHssIDQ8Gh//IDy8fCVu8sTRyQ07R1eJ6xwxs7TF0NQSe7FHsYnp + 9I6byAv7DklOfoENm7fTM3o8pRW11DS0UlXbTFt7L7PnLWbz1p1se243EyYMkBCfphKAlV6YfwrASg/g + vjGdVJTkEhM+KAD7yu/7eAfg4xWEn28wgQGhpKVlMW7sBI4dPcHHH33Kjz/8zJdffP1XD2BFAG5oaCYv + v1jVmzk9I5vcvEKamtqYMWsOe/YdVAnA+w4cZmDmbCqqqknNyCSvsJDC4iKqq6voHT2K5cuXsmfPbi5d + vMir91/h0eN7quGf33r3Fu++f4M337zAS7cOcPPCLl6+tIcHl3bx2sUtXN4zjd1zitjXn8ix8VGc6A/k + 1ARvLk7x5Oo0H64NBHFtRigXJA440OfLxnYnltTbMLnImO4sA6oTdcmNUkaU1CU/zpLCOBsyQ4yIchpK + kOkQQo2GEGP1d5LtnybTbQQFvloU+CkCsD5N8bZ0JDvSEm8j2NGa4EhzohMtKa40pjpTGmtFWqCO+LMR + ElsOJ1KZJi5Il4RgbeKlPUX7qxETrEFsiBYJ8vuK8JsUoUd8qBbRsj/CV51gnxEEeo/E31td3o06Xt4a + gha+ftr4qcRgTfz9NAkK0CRcrpUQoU2GfP8l0t6VzlVF8WoUxAwjXyhL0aO1xIWx8s3O7M1k6UAN6xd1 + s3xeDxPG1jJlUieLFg2was1SFi1dLG11CrX1baSl5xMeEU+EIv5GJQ0SnUzME6IiB7dFyn6F8D9F3bA4 + woVQsY+hIUJorGrbfxIRnkiYEBKWMIhKCI4iPDKciMhguXagtE9fkiN85R15kRvhRlGYA0XBEv8HG1Im + z7NUnmdFiM4gwXpUBhrQGGXJmDR3JmT70ZvsSl2wJdUBpvKdmtMgsUtTiD2tEa50xnnLOwygNTmQppRg + 6pODqE0OlrgimIrEYLGnIVTIcnlKmCyHUpMcRo3E9w3xoTTHhtIUEyS/5U91uCfl4W6UhLlSHOoipQeV + UT7UxwXJsSHUynFl4T5keDkQYWeCu6HkXnojsNUdirORMoWgjdybO6XxXtSketGQ6UVLviddxV6MrfSh + vzaAcbV+dJX70lzgRXmmPIcMD/LTfclO8iYt1oW0aBdyEzwpSvahJNWfotQACtMCKUgLIDfVj4L0IMrz + QqkrjqS7Nl78XyLTO9KYPSqL+eOKWdxfw7Jp7aycMYaVM/tZMXMiK2ZMGmTuZNYuGWDzyhkqls8ay6y+ + Fia2VzKueXAo4wktlUxpHxR7p3crAnCLLCsicBPTupqZ1dvOnDE9ku/+WwBW9f4d1aESgCd3tjG2pZHR + TXWqXsBdtZW0VVfQWFZCQ2khjcX5tJbm01VZyJTWGuZ01bGir5WtA91sn97Dvvl9HFgyme1z+lk5WX6n + v5PZY9sZGN0u+VcHU8Y8QVkfLb+pKluZ0tsix4i9GtPOzHFtzB4v38HEUcwe1y73V0NPTSG1OSnUK3+7 + K85VCcBtJYq4m09zcR7NRQU0FeXTVJhPY6GsK/UsUXoAF9JSUij1LaO3tmKQusr/EoDHNxYPir+thQx0 + FjF7dJk8l0p5PlXyjZYytUv2txXS31rC+NZS+lvkPOV5C2MbFSG4ir6mGsbWSz2ryulU6laUTXtJNh1l + TyhVROssWgozachJpzYjmaqMJKrThYxEKtLjKJT2nCExf4LkAjEulsS5WBDvJHmyjSGRZooQrEuUhQGx + kudGO5sS6SpxSpQHzeXJTOguV9HfUcrkthKmNRcwqymP+S1ZLGpJZoXkphsl5toqccNzEitsz3bhuSxX + Nmc6szLdjsVpNixKsWV5qj3rJAZbL6xJc2Zplhtz8zyZWuTLpMpQZrYlsro/n10DlZycXsnZ0VmcrY7g + XIYrFyJNuSkxzisBGrwaMJSHIUN5XRGAk0bwMG0kr6aP5F6amqDNvVQDXlWmjEixkmVbbqTZcSbdhkOy + bXeCITti9Hhe2JVoyMEUM44mmXE8zpQT0UYqjscYcyTOmAOxhuyM0mNzmA5rgjVZKfZ3ZbAaKyUHWxM+ + jPUxw9mSNJLnMtTYka3GzuyR7Mkayf5MNY5kqauE4AsFhlwtN+Vuqx13x3pyY3I4RybEsKwliFGlXlTl + elGSG0hOVgiZWZGk5cSQmBVPdGYiUZlJxOZmEJefSUJ+BskF6aqhn/+ksKZINQT08s0rGGJtrSnBujHe + isDrZy3ORBF6bcTZW+PtoQzdZomnuznenhYSCJhJkmRCsARYoYHGRARJIwjRJyZUT9BVldHiAMP9tVVE + BOpKKY3EV4cIcY4K4T6y3fvfRInDSpDjUsMNSBNnlxauTnqUGoWJOqphoOtyjFTU5xpLaUhNlh6laZqy + XxLWuJFkRA0XRggj5TwNksNHEBc0jISQESoBOClsuFxX6QGsSUm8NuWx4hSiNakQ514ZpUlltIaK6ih1 + quW4+gg1miM16I7TY2KyMTOzLZiXY8HCHFMWS2CwLFOHFenqKtZkabA2S15wyjBWJT/L1hx1dhdpcqhY + h1MVBpyt1OdcpRaXqyVIrB/By21DeW+KFl8vM+Tnzab8vtcajtvDaeGcI5xxgJOyfNiCX1QCsCGfrjPk + tTm63JpkzMXR5hxpNGKXMlRiylMsCR/CpvghHModxvlyXe7Wm/Oo1Z53O5z4qNeFj8e78uE0Fx72W3O1 + XY/DpUPZmjSEDdFDWCfnbowcwnPCblk/IJyK+Qc34p7hpdih3I0Uwp7mVthT3A77p5R/5yU5Vpk0+6PM + oXxbosavtTrQZsBvXUovYF2+H6XBR63/kgB6CA8ahvC4ewjvT/4X3y/Thg0msNViUADebsnvm034YaXe + XwLwL3O0+X2eASwz4Y/1sn+7Hd/vdeTr0158+1IYX78Tz7dfZvDjT/n8/Eshf/xUyK8/F/Pt76V8RQnf + MCgAK8NA/6YIwMp8wT9UwafF8Dgbrifx8+EQvl0vz2SSEW82j+DN+uFSXx0+adfnI7kHRQB+T3hLntWr + TZrcqBzGxZKnOVs8nMOFajwnH+uaPG2WFpsxrdCUrkxd6tN1qZKErCBWgzRpa0kBz5LsP4K0AC2yJBDL + lkAvVwxQYZgEkiHq5AcPp1TaW1OGMaOU/7qrdKSnyIZGaeuV8RJEhg8nL+QZ8kOHUhg6jILAf1AZ9Dd6 + op5lXpo6zxXpc7hMnws1htxtsuClJlNu1+lztkgSq2xJsHKkPZT9g7PtWrw234VPngvl5+NJ/HE5iz9u + ZMDLWXA/ld/vJ/D7q7H8fi+K3+5F8Nsr4bIcwR+vRvL7y5H8fCOYny/589NJT3485MxPuxz4+Tlbftpk + zW8bbPl9vT1/rJH2usKJ3xfa89sse76ZbMOnE235eMCFzxUBeEMU3zwXzdcvSLknmm8OxPHDCXkPV6Qu + L8l7eU3ezzst8F4bv7/bxm9vNPHD9WK+PJTCB2uCeTjNgvsThvJ49lA+3ajPd0fs+EsA/jhyUAB+Nxwe + RMDVaJUA/M0aX96SNn+rVwz4KEceTPPlk9WxfH8gl18vlMu91/H7W438/lE7fDkKvuuDrycLs+CbhYNC + 73dr4PuNwuZBftjIHz9sgF/Ww2+r4efF/P7dTH78eCw/vtvML2+X8ce7aVIXqcNbQfzxwIOf7zrw7XVz + vrioz8en5Ls4qsPnR0348agTPx/x4dfD8l4OybPZHcOj1QFcnePBiSnu7B7nxo6xXmwfE8D2ceIcx0Wx + dlQYi1sDmF7rxZTaQKY2RjLQLg50egMHts3n6O7VnNy3mXOHt3Pp2G4uCpdO7OXKyX1cOb2Xq2f2cePC + AW5cOsztK8e4deUEt6+e4tb1Myoh+Mb188IFrly9wOXLSm/dCyrxV+G8IgJfusiZi+c5feGJEHz2jEr0 + PSnLynaFPwXic+fPc+7CIOclabty5TLXrl/l+hNu3LjGzZs3uXXzlorbt25z+/YgN29dV/VCPnP2CCdP + 7OPYgW2c27WW27tWcXfbPG6uHs/NJa3cnV/Jy3NyuTczhfsDkbw6OYh7E/15MN6f13p9eNDlwf0WZ16q + teFWhQk35Ht5SREsW8x41G7KgzZDVe/f2/Wa3GrQ4WaTIXc6LLndZcvNTkeudDpxtsOeE8KZsd5cmxnP + o80NfHFiLl9e2cirx1aya/lEBsbUMK6zglHtZYztksBsyiie37aGXTs2sWjBDNpaaikuyqGirIj62mrV + f86uXL6czRs20j9uPOWlpeTnZJGfnUZlaQ5d7bVy3hS2b1vOmlWzGDemkZ6uGmYOiLNeMpOm+mI8XM2x + MFPDykIdBwc97By0sbPXIjjUgYrKFPr7m2hrK1bNRzww0MnOXSvZvXcNa9fOYr4Ewls2LWTTugV0tZVT + V5PLlKntrN0wneUrxjGmPZ36DGfGZNgxP8debI0dl5vdudPsyJ06K25XGXFb/Mz9Kl0e1RnwsFaP1+oE + eX4PW02532bO7WZTrjWacLXRjBst1txos+dsrQV7CvXZmKMjPlSL2bm6TMrTZ3SOAR1purSm6jCuQHxs + kzfb++PZ0BXKkio35svvz803Y7r4//Ep2nTEjqQ27BlqI4ZJkqVFe4I+o5KM6Us3UwnAM4rMmVVqyawS + Y6aLnZxeqMMs8cWzi7WYV6TFEmFNqT6b5D5eqLNgf4MlLzZbc0zs6IkmE043GnCpxUAlAL/aZcyjbuPB + +X9l/V3xc/+J0hP4DfETivj7sEWPR816PG7S4+1WA95vMeIjaWOKAKwMAf2fAvDXnYroa8DXfwrA7cZ8 + 0WGMSvztMuWjUea822vKqy26nCtWY3PUPyRwfIr1CVpsz7NhXYY563Js2FLmwvYaT/a2+bO305sd8o7W + lBqyrEDik0JdFmdrsFzikZ3y7M+O9lAJwFd6nbncbsmtLnNeHmXG43EWvN1vxTvjzXhznBGPepX71uLl + 1pESeI7gWv2znKv6F6drnuFim8QxPSac7TLhYKM+m0sl7slVV/X8XZxnwLxcQ2bk6DM1W4vJEhdNlGB2 + Yqa6vDsNFpUYsKREnzmZI5mTMZyFEvAuK9BkbbkBW2tN2S5xy456M7bVGKl6ASu9gbdXmbBL6r67xooX + Ki3ZXmHOVim31duxrVESghprVtXYsLrOiTUt3qzrCGBNVxgruyNZ1hXDoq4EFvYksXR0Cmv709g0KYXt + UxOlfYWyXuKj9U1mPN9hxuHR1pyb5MKFiU6qIWBPCAflHrdUi68vG8qmWk2el3d6oNeKo/12HJtgz9E+ + W46OkXYzzopTsu38JHs5X76VSXZcHC/bRhlyvEObk6P0OD7OmBMTzTk22ZL9Ey3Y2KPHMok5FrcYsqjd + nKUddixosWGm3PukCk0mVqoxuV6NaW1qkuhpsnymOStmW7F0pg1LZrlI6ceS6SEsnhrFjNGRkkj6kBJm + TqiPMiqPFXFxniQlhxIW7oeTqz0mZiYYmxhjYmKEqZkxZuYmqmV9A2109DXR1ddSicBGhtqYG2hhb6SL + s6EOrgY6uBlq4SrHuOqr42KgMFK2j8TFcBBFDHbWH4G3pSSByjCu/k4kBrsRH+JKXKi75AMeRIZ7ES5E + RnqLjXLHx88BTy9bPAR3T2vBCmfJLZThoB08zHGSHMNFSgdXMxycTHB2NMXN0RhPR0O87bTxtRpGsNWz + RNtIvG+vSYGTLuWOepQ7GFDiqAxja0NdhCe1MT4UhLqSGuBAcqAjaSEupAU5kaT0Dna1Js3Zihx3O+rC + fKmW+pUEu1IQ5ExOiBuZ4R4Sy3mSEu4p+YQ3yRHekp8IYd6khPqSHOqjIuVJ+ScJgZ5EuNvjb2eGm4kO + zgZqqvmTC+JCqc9LoqMiW9Xjd4wk7BO7q5k2toEFA12sXTRR1eNXYcuq6WxbPcBza6ezdZVsW67MSzWJ + 1fPGsXLuONaIDd+wcCIbhTXz+lgxp5fF07tYMLWZWROq5JrFTOjIYHRzHD21EYyqi2JMS7z4qSQmj81g + 4oQM+iekMX5yOt0TEmjui6J2TDBlvf4UjvIiq9uJlHY74lstiGu2IFZBEXrFVirENpnLdkviW6xUJLRZ + ktBuQaLYlUQpkzutBKVUMCO924LMbktyuu3I7xQfJb65aVQwnaNiaG2KoqEyksbyeNpqs8WH1rBk4QA7 + dm7h3KWz3Hv4Cm++9xavv/UGd+/f4+L1axw6eoSDRw9x6sIp7ty7yXufvs77H7/M7TsHObRvHssWVjO1 + P4EpY8JYMjGKLRNj2KFMK9AXwa5xwewZH8AhiRWOTw3i3KxQrswJ46LEiMdVArAFpztMuditCMDGXBPb + f1u40yGlIvyqUHoDK+ioegMrvYJVw0J3anNfEYGVERW6dXnYo6MSgN8c/W8BWDUE9AxzFR9NN1OhGvr5 + Ce9NM+Hd6ZKDzDTkvTnGKgH4/fkmfLLMis9X2/LlWls+WWHJewvFVs/Q5rUBTV6bqs+DKeKXxxtzdbQZ + 5zotOdlkyyGxjdtyTVgRp8VCyUuWRIxgdZKe5Kn6zItRpz/yWbqCn6bGS3JtFzWyHEeQ6aJFmrshSe7y + 7pXhyr3siPR1INrXkVR/d8ldvKgO86MlNEDODaA3wJO+IFsmhVgyJdSSgXAr5sW5sCDFk4FYyWv8jBgV + YMy8DB821CSwtSmNnR15YnfzWFmTzNSsEFqjPCmR30hzlHbjZEeiszsJrj7EuQUQ4zE49HO0t4+KKC9v + Ij29CHX3INjDk0BF+PXwwk/WBwVgZyI8nf9LAM59IgArQ0tHuLkS4OKEv7sz/p4u+P8l/noQ4u9JiJ9c + z8sNXzcXfN0H8fNwld+Q68v5vm7K0NBeeLp4/g8BWBF0vXFxUnr9+uPiEvAXzs5+/41K9P1P/p/EXwUP + Fcqwyf+fSB0G+VNYlnNV638KwoMovZHdXQcFXwVl6Oc/l/8/BWC3oP/CyTXgv3BxC/xv/uPeXVQC+L/r + 9W8BWEHpBayIv56DPOkF7ODqiLWjNRY2JphZGkpphKXdoABsbqOPiY02RtZaKgxsNDC00xQ0MLZVUMdM + lgcFYAVFANZRoQz/bG6riaXtSKysn8LO6u84Ww8h2O1paS96tOe7Mq05nPljkpnSEklzgRu5yZZEx5oQ + l+5AYrYHYXFOuPqb4egpfsnDDF9/B8IifAgK81ENW23jZo+1hzNOQYE4hYRiFxgk+GAf5IZTsD1uweb4 + hJkSEmVMbJIp2Xm2lJY7UV3tSG2dI3X19tQ1WFNbb0G1xM/VDRZUSgxUqgjAxSYqATg1Q48klQBsQHKq + MRlZluTm/f9o+8soO46sbRtU222LqVTMzMzMzMzMzFylkkrMzMzMTJYli9GSmZm73WC7DaJrdp6y/fTz + ve/MmrVmzY97RWRkZGZkROSGc58dYUN2npMKmTl2KiI4M1vkbaYF+XK+ONmAsiQ9quJ0qYvWpCFSg7ZI + LbrDtJgWoM5cH3UWeaqz0l2Nza4a7HbT5rCnASe9TDjqZsh+B212i4+x23oiB6zHccxuAifsx3PGcSxX + fDV4NVLs5Axbviny4F9VAfy7JpCvij14PcmCi/7qHHYYzi6TYew1GsYJi+GctRjFRdPRvGw4kpf1R3LV + cCy3zNW5Y6nJLTMtLhtM4Jz2aI7rjGa3wUi2GA5ng87zrNP8C5t1/soOo1HsMxvHEfPxnDYZwzmd4dww + GM271up87iG2t9hDf4s147t0K77Mt+aDAkse5plwJ8eQm9kiJzN0uZ6gydVYdW5Kv9zLMJHzZrxebC6+ + jZnASLWq0fvi13zaKnK53YC/iR77XnSdigAuNB4igKO1eNNfjZvOY+WdRrLLaCTzNZ+jafwwMicOI8ng + r2JbmDG/PZNju2dz8fxGtmyfQ0t7MWVlGRSJz1dQlCu+WgWTp05h7cYNbNu5k4HBqWRk5crcCsfTxxdX + kX3KN2Jn74iVnaN8C7YYmlqhbWgm34ojodEJtHf3s/fQUc69/Aqbtu2gtaOHvKJSmT91FJfVUN/QzryF + y9i15xD7DxxnxvT5qj2A/f4fBPDMqf3097ZSXJBFeLA/XsqfYkQGe3r44unuj4ebpJKPj0umq7OPU6fO + 8c3X3/Hrr4/48Yf/8PnnX/5JANdW15GdW0hqRo4gk5y8fGmHQgDPV0X+3rx9jxNy/fwFSyivrCI1PZO8 + ggL5Jgqprq6kr7+HNWtWcejQfq5cfpmHr97hnXde5dPPX+OLr17li6/v8PHHl3l49zC3Xt7JPcEbr+zg + 7aubuXl0JseXFHJmWiKXpkSIjR7A1ele3Joh/rzo+9szvcWvD+C66P+z03zZ2+3MukZrZhYa0JWpQ1W8 + OvnRyhaDBpSn21AmMiAr1JAIu5EEGg8j3OQ5ku1Hk+2pRnGANqUhehQGaFIYqEVdjAXtyY60JTvQle4q + fq4HneledGZ605IhOjRevs8QA6K91H4ngCcQ7a8l0CDSewJhHmMI8x5HhI+UB0z6ExG+E1RkcYDbONFH + o0U3jcHdeRyuLuNFjk9QwcVlIi6u4/+Eh/t40W/jCPGbSGyIBjlJhuQk6JKpBEyFjVatjqmsutlQ5Mbk + plgWTy0RG7OdTUu7WTirhZ7uKgZndrF6/TK2793J5h07mb94Be1dU8kvrCE0IpHAoGhCw+IJC0sgNDyR + sPAEFUKkTCkPCY1VISg4RoXAoD8QTUDgEP44HoJCFscRGBKHf1C8CgHBsQQq0cOhYXKvIMJCAogUPZ8Q + 4kNKiBeZoa7kBtuTH2RKocjYkkBdSoK0KQvWGUKQHhXBRrQlODAtx585RWFMzfSjyt+cci9jqn3Mqfez + ojHIkdZwLzpiAmhPCqExWWzU5HCqU8KpTImgLCWS0pQoKlKjKROUpMVRnhpLZWqcCrWJMTTEx9AYH0V9 + XARV0YGURftREuNHsQr+lMYoZHEoFbFhFEUEkunvSbidJW6G2phOGouh2hgMJ43GUnciMX7il0T5UJIg + bU3zpTk/iM6yIPqrAplWH8LMxhCmNgTRI3K3tcSfyhypm+1HYXYIuenBZCb7kyUoygihNCucsuxwSjIj + KMqMolCQmzGEwpxoyvNiaSpNpLMygb7qJPprkxlozGRqSwGDbaWCakGdoJ5prYK2RqZ1NzJ7oJWFMzpY + NL2D2T31DLSU0VtbQHd1gYrMnFJfwWBzNdNaaoZI39YGZrY0qIjgWR1NzO1uYUFvB4t/J38X9HUws6uZ + GXJORQC3NdHfVPcnAawigavLaa4oFZTQUl5MW3kR7eX59FcX0V+Rw/SqHJa2lLKqo4Id05rYP7+X7bN7 + WNJTx4zWSnrrpH5lAW2VRbRWlwiKaakqorm8gNbKQjql3V11JXTVFIsfVUhLWTat5dl0VSr79ebTWppF + fUHq7wRwMkrU7xABPBThW5uXRU1uNtU5mVRlZVKZlabK1+fnDUEhgMuUe5eq0FlV9r8I4IHafKbW5zKr + JZd5nXks6i9k6ZRiFg4okcD5zGjLY0rzEAHc35AvqbIUdKEKQ5HAyrLQ5TKGVXRXSp+V5NNSmCXI+F9o + LsikISedmow0mb9JKlSlpVCVrqSJIvdiyIsKIS1AfF8PB+LdbUhwsSTGVvxCS0OibEzEn7YhRfyDtEB3 + cmSuNxQlM2dqAxtXTmfzqplsXD5d/NVp7Fg0hd0LRE/Na2fvrFr2zijk4OR0DnfEcbQhnCPVwRwqD2JP + WQCbi71Zle/GimwXVme5sknk5pZMNzZke0i5D4uK/JhdHsyCliRWTylk78I6Lqzs4OqCBq715nK5LIzL + iY5cFVlw30+bN3zUeNt7DO8HCsLG8F78eN5JncCbGZN4I0NdoMvrGca8nm7Ow3RrHmQ4cDPdnguplhxL + MOZAtD57onTZFaXDvjg9jiabcDLJlJOxkkYZckJwPNqAwzH67I3SY1u4NmuDNVkqcntRwEQWBk5gofhh + CwKHszh0BCtjRrE6cRRrU0ayPnkEmxJHsF2OD6aO56S06Xy2DpdFF90Qe/BWpys3p4dzejCWZQ2BtBV4 + UJLhTl66H2kpgSSlhBGfFkGEyKbgpCgCEqIJSRN5nJ5ApCA6I574rIQ/kVWaTedgFyu3rGSYq6sx3r7W + IpgdCQlxxMvTXJS+Be6u5riKI+jsZCzOgyEuzoaibAzEQTLA10OfAB8Dgv30CA3QJTxQR6BNmCi/UF9t + grzUVQj20SRQDMtA90mCiSoEuIrSEwT9jhA5F+GtTpy/JnHSWbHKHqrSUcp+viXJulSmK8SvHpWZ+pSn + 6Yjw1SAvYQJZ0eNIjRhDUugowWgSQ+W6kPHEKQSw/2hiA8cJxhAvSA4ZR06kOoVR6hRHCEInUhQ8gaKQ + CZIfT3HYeErk2lJ5bpn/GGoCx9MSoUG/GMxzMkxZmGXKkkxjlkk7VqRqsTxJjRVJE1iVosaa5EmsjBvD + KsHWNDX2ZE/iUI4GJwq0OZOvxenc8ZzPH82l0uHcrHuBjwYn8I9VOvy625inJyzgZRt4xRquSnpZ0pcs + 4ZQxvx3Q4afdOny/RY8PF2vxcIY+N/uMONegx5EyDbanj2Rt5DC2xQzjWLrcv0CL+5WmvFNvw0dNDnze + 4cznfc58PNWBVztNOFc+kT2pf2VD2DA2BA8RwDtCh7E/RCF//8JZwdXIF3kQNYo3wkbyMGA4972e47bn + c9zx+gu3vYdx338YH8YM59vU0fyUP5HHlVrQrMfTNj0ed2jxi7K3rrzj+2XDeLdK6jYP4/PJf+XHpWo8 + 26gPO0yH9gHeY8LTHYb8sl6L/yyfxC+L1Xi0UJ1nS/RgrSFss+DZPht+PWbHvy8488M9P/79QTg/fZfA + rz+l8+jnLJ79lMXjn3P56YlC/haoIoB/ffIH+avsA6wQwOXwtwL4MAPuJfL4bAg/bXXh6xlivDeO48Oq + UXzVOIlvW/4ggHX5QvBRkwZvVo3jduEIrua+wCv5YzidN4E96eNZnzaR5dnazMrRpzNNi/oUbaqUfXzj + 1MWYGkuc7wjivEaTLIZchq8a2TKvc4M0KArVojBYjRy/0ZRETKQl3YiBUntm1bgwpcyGtixDquM1yQsa + TabvC2T6vEC274vkeA2jwncYPeGjWJasxr58Xc4U63C9Qo/X6ocI4DvlGrycM4KzWc9zImcYZ8te5Ga3 + Dp+uc+P7w6E8eiURXpU+UMjfd9PhgyRBLLwfxbN3wnj6dpAKz94JlrJQnr0dzKMHfjy67clvl1z59Ywd + vx6x4bd9lvyyw4xHWy14ssWKpxtteLrGhifLrHk834Yfp1vy3VQLvplpz/erfPj3tjB+3BvBT0cj5R4x + /HYxkae30nn2Wo60oxA+lfH5tgG+V8jYNvh7C0/eKeOXK2n8c184ny2z5Z0ZY3l//gi+3qzBD6ct+fWu + K08/8JPrwmVsI+CzUHhLcFOOjwfy4wYvvpjrzNsDDrw1xZXPFwfx445EnpzLg9tl8twqnn1ew5PvGnn2 + r3b4qQ9+mCqYCz8ugf+slXmzSebPLsFu+GU3z37ZyRMlfSzHz6T82TZ4soFHPy7i17/18fjbevguX5AC + 30RJm3yljS78+qYlP97T5+9XZI6dn8Tfz2rz02kLfjnlxKPjPvx2LJh/7g/ivdVu3JhjqyIXDvXYsK/b + gT1dQyTwrt5ANnX4s7LRk7kVzsyq9GROXTDzWmJZPaOEo9vmcGb/Ss4f3MClY9u4cmIXl0/sVJHBV0/v + 5eoZwbl93Lx4kBuXDquigW9dOcmdq8qS0Ge4fe0cN69dEFzkypWLvPLKRS5dvsjLly/x8iuX/yR9L/xO + +ioRv6cvnFct+3xW8sp5BX+U/7H0s4JLly9z9dorXL9xlevXr0h6hZuSv3XjuirS+OaNG9y6eYvbN2+q + cOPaVS69fI4zZw5z4vgeju3byLmdK7m9d6WKAL67ro+7y+t5dWERr85K4eH0KF6f5s/bUz15e4on7/d7 + 8mG3B590efBhqxPviix8rdKYe6W6PKjU5a0GQ95tNuRtkVmv1Wlwr0qNO9Xq3KnV4X6TCXcbTbnTYMmt + JhuutVhxpdWaS+323Jzqz/sbivj+1DT+cXkVb59YwuFVPczrKaa7PkcMxxza6pQIplb27drIoX07Wbpw + NtVVpaSlJpCdmUpZSSHNjfWsWbWSbVu2MrmvnyJxdrPTUwSJlBSk09ZcweqVczh0YCNbNy9hyuQmOtsq + mTerjzUr51EvhqGbsxlmJmpYmE/C3k4HOzst7Gw1RX8rPyQlMW1aM+3tJdTVZjJ3Xid7961SkcDr181m + 4fxuNq+by6Y1c2mvL6C2Ip2Z0+rZuGEKa5a3iZEdS3OaHYPpVqzKtuJAoSV3m1x4q9mBN+steb3KkFdL + NHijTJ33qrR4X4H03Xv1urzToC99qsfdGl1uVetxo9qAW3Wm3Gqw4GKFGFA5WmxMVWdR4kRmp2kwRZzs + ToUATtGhTpztrkwjFta4skOJeG8JYGmZE/PzrZifY8wM0btdsROpCxlBecCL4siNok5kaEOUBh3ivPal + GEqbhwjgBUVmzC8yYlauNjOy1ZmTq8m8PA0W5qqzTLC+SIdtpfrsF115rMaMEwoJXG3IWWnzxRrtIQK4 + WVkGWYn+1efj1qGo369kznypgg5fNGrzmeCjRnn/Bi15f03er5d8nSYf1GrwaZ3Ub9RREcDfNmjwN5lr + /5Lrfmj9nQCW/D9/J4D/2aLP9636fKeQv+2GfN1pxGft+qo9ql/JG8uu8BfYFDKK3Umi9/NtWROrzYpY + HVanGLE+x4yd5bYcqLNnb40lGwt0WZujyaYiXbYU67Gz1IBDYkBe6nLmRq8YkV323G4z50GnKW92GfPx + gBlfDFrwxRQTFQH8brsGrzeNVxHArzeP5179WG4LbjWp8bDfiDen23Gz35LTTYbskHmwOnMCyzPFyM3W + Y36WLrNlTKelT2JKykQGksYzOXEcM1LGi/2kweJMdeYliQGcPIZlaeNYLXbSpmJd9lSbSPvNOVhnxp4q + A7aVaMm9ddhbZsCBciMOlJmwT9nbWLC7VPLVVuyrtWZHlRmbywVV1mxvdGNXhy/7+sPYOzWW3VMS2D41 + mR2DaeyZmcGhuZkcmZvK8TniaAyKg9Fmz55GE461mXCxz4Lb0x24N92RG32WXO425ayMx4HK8WwvHiXP + m8RxOT7fa85LA1YCS873mHKmw5AzXfpc7Dflqui8G1NFbkh6vd9YZIY2LzdP4nKHJpekXy9NMeTioDGn + B+Q9OrXY0qzJZhn3Te3mbOm0Y02zzPMKXaYWjGNy4Wgml41iSs1IpreOYck0XZbOMmTRTGMWzbBi0TRH + Fk/zZOEUf3G2g+is9iMr1pqoQBOiQq1JTPAhNS2ciKgAXD2cMbMwxdjEGBMTI0xMjTA1M1aRwEpksKbO + JNS11VDXmICOlhqmuuo4m+rjYaKHt7EuXkbaeBpo4GWgjofBJMFE3PQn4KrAYAIu+uNx0ZuAv5Xe0B6h + YR5kRfmQHu1LeowfKbEBJAri44JISAwiWsqCQ1zx93fCz88RHx87PD1tcPW0wsndYgieZkOksKOxyDdD + nOyMcLYzwNVOT0UAe5uPJshsBNGWY8iwmUihvbpq6dkKO/EVHAxo9LOnK96frvQwGpICKYr2Jl9QGOdH + YYwv2QEuZHs7kufpQImPM10JoXQmhtAg56pivFX/8C+WthYkBJGrIDFU0lDxOSSNCyEnJkR8jyAVsmOC + yRRkxASp0rQIf6K8nAiwN8PVWBMH3QlEuFqrltfqry9mdlctc/vqmDeliSUz2lk5T9lfbbJqv9/ta2ey + bY2SzmDHuhnsXD+TnesEa2awRSGAF/axel436+b3snnxgDjUg2xZOoUNi3tVJPCqea0smVnHgqllzOnN + Z3p7Gr11sXRWRdJeFUFbVTjdIt97OqQtfYlMGUyld2oSHYNx1E8OpbwvgCKxN7K7XEhrcyCh2ZK4Jgti + FTRaEit6UYFSFi/nhmBFXLO5pGYktJiT2GpGUpsFye2CDjMVUjtMSeswJ7PdipwWW8ra3ajvCqClI5ya + yiBKcvwpyw2nqiBRdFKZ6LlFHDmyn6s3rvH6O2/y4M3XVH8w23/kMKs3rmf2/HnMWTifletXs//wbu68 + +jIffHSDB/ePcOLgHFbMy5f+jWF+fwgrJwezvS+YvT2BHJD0QI8fh3q9ODHgxfnpvrwyN4hbC0K5McuH + l3rtOCftv9RqzLU2I262G3C7VZf7ggfiH9xv1uBBs/hhgtfkeIgM1uRh4xAJrCylr+BPAli+83fb1fmo + R4tP+rX4fECXLwf/TwL4s+l6/wufztTh89nafD5PT0UCf7FYn29WmvC3dRZ8v0Fs69UmfLZEl/fmTOLt + mRN5R+q/M12fV/vFP+w05FKzMedFrx1VVkxI1WZdtBqrwsawIWYiOzP0xW/UY5340IuSJjI9To3WEG1K + vTTIdJpAivMk4p10VJHz4eL/B7tZEeJhR7inPYneLuK7uFER6EljgDftfl70+TkzJ9SSpdHmrI63YUOK + Azuyvdie583qVEdmhBgwLUiel+PBoYZYjrYkcaY7mxMdmWypjGZuutwnzJlyb2sy7E1JsrMkwcGJOGcv + op18iXAW/F8I4CAnZwKcFQLYBR9nhQB2xtvJCR9HO0Jc7UgLVr5jZQnocDL9vUnycCPaxYVQJwf8HGzl + Gju83ezx9RA55Cn38nYlyNeVYJEHvlLu5STnXRSS2B4fd0f83Fzwc1eijZX9gd1wc/yDAHZXRf+qCGA7 + TxUB7Pi/CFAf7By8sLP/Lzh4/C/838lfJfr3/1cC+I/jIfxBADsr5K/A5f8PBLDj/4MAVvXFn234/4IA + lnG0srfG1MoUQ1M9DIx1MLbQU5HAJpY6GJlro282CW3TiSpomY1Hy3wc2uZj0bUYh57FeAwtx6tIYANr + NcEkTBTyV2AqusPUSg1zy7GiA1/AwvQvOCjLP7uNJi9Sl55CZxY1h7C6L565TSG05DqJ3DchMsqA6BQb + YjJcCYi2x9HbRBUBbO9iiJfM28BAZ/xEnzm5WmBhb4y5kzkOvvJeAZ7Y+rhg7W2LjbJvsK8xzv56+ATr + ExZtREKKGbliz5VXOFFT7UhNjT1VNVZUVJlSVmFIidhCJZWSVhgNEcCFhqRl6ct12sQqS0An6hIXp0dy + kgmZ6Tbk5jqTly+6TSGB8+zJzrcjN8+GgixzStKNKU81oEpsyLo4bRqjNWmP0KI3VIvpgWKX+aqz2HMS + q9wnss1dk4PuupzwNuK8jxkn3Qw5bK+l2rN3n/TtQcvRHLcZy2m7cVxwGsctfy1ejzbg4wwbvi5w4at8 + Z4EL76dZcytMmwue4zhq+1f2mQzjkPFfOGs+nIvmI3nFZBTXDIZz03Ak94zGcV/8mQeWWpJqc8NoIi/r + juWkzhh26o9gvf5fWan5F1Zp/IXtxqPYazmRQzbq0o5JnDIdy1n94Vw3GcPb9hp84WfEdxFm/D3Jgm+z + fieA88V3yTflbo4ht7INuJk5RABfiVPnWpIudzLEr8kz5bUic94oNRMY8UalHm/X6PCJ2OVfiK33bbsx + f2sy5R/Vcu9CE75W9gAWW/xN6b/rLmM5ZTlc2jacBfov0KT1F3J0/0KylJVHmjO/J4PDu6Zx9uxqNm2d + SXNbAaWlqRTmp8mYZVFWXkLflH7WbFjL9p3bmTp9Ktm5OYSFheLr54O7l4fYRCITHBUC2EHmsS0GppZo + GZjJ3LYnODJWRfju3n+IE2cusHrDJuqaWknPySe/qEK1FHRVdSMzZy9iz94jHDp8ktmzFpKUmI6fz+8E + cOwQATx7+gADfe0qAjgsOAAvDw+83L3/JIDdXLxwc/UiNiaRjvYejh07xRdffs1vjx7z88+/qiKAX754 + eSgCuLpO5ngx6Vl5gmzyCgqpa1SWgJ6nIoBv3bnPKWnvosXLqZS66ZnZFBQVUVxaTG1dNZMH+li7djWH + Du7j0sVz3L19hTdev8mnn7zKN988ENzhk48u8uptsRfObeDGmXXcf2k9b7yyjhvHpnNqeTEXZiRzdUok + 16cFcX26D7dneArcuTndQ/S+L5dn+3FyiofYCE7id9oyT8a+P0eH+mQ1ysQvrc00o7HAkbpse/KjjIlx + Gk2E5Qsk2I0k30eTqggjGhMsqI83oSxcl8JgLerjLOhMc6JLZMZAvi9TCgIlDWJygdjruT7UpDhREG1J + UqCu6NfxhHhNJDpAm5gAZWXMCYS6jybMYzSRXmOJ9p1AtM94gdiS3hNFXo3Dz3ksnk6jcHccjYvDWJHt + 40Xe/oFxgjFDkO/TVeamu9tY/OXaiEANMpR9YuMNSI1UJyl0PPFBE8iWtjeU+DHYnsGquc1sWt7P6vld + zBxooH+gidmLprNh+yb2HTvC/qMnWbtxBzNmLaG2oZvYxCz8g6IJCokjJCyRkHCBkgqCw+IJChWExKoQ + qCJxY1Vk7h/wD4pRQXWspCpIPRXpG49fUIIKAUFxchxDcGgkIaGhhAcHEh3sT3ywLykhPmSGupMb6kRh + iCXFITIWoQaUh+hRHqY/hFBDqsPN6Un3ZE5JJIurkphdEEG1vwVlHibU+FjQIL5Dc7Ab7ZEBdMdH0Jkc + TWNqHNVp8VRlJFCRkUhZZhKlmamUZ6VRJijNzqBcUJmVQZWgNi2d+pR0GtNSqUtNpkoVURlFmdyrRFCc + FEVRQhQl8dEUxUWRGRZMrHzfnuZmWCrb9Iwfjbaa6DP18ZgbiJwP8iQ3PojSlCBqsoLpKI9icm0U05si + mdMew9z2KGa0RDC5PozOynDqikKoKAijtCCGwtxY8rNjKciRNhRIW4pSqSyQtuenUCaypzQ/nfy8dPJy + UynITaE0L4W64jRaylJpLU2hpTSZ1jI5rsiiuTybprJcmkrzaS4tUO3F21whaXUhHQ0iv1ormNxeRX9T + GT31RfTUKARwEf3VxUypr2Jqcw2DgunNtcxormNms0IAiyzobGZud6uKAF7Y16lK5/Uo0b9N4sMoy0g3 + M9jaxGS5pltkwp8EcNUQ2mvKxb8pEz+4VN6/kO6KfNrlXdvkvQeKkplbnc267mp2zuxk8/QO5rSU01ed + T2NhGlXZiVTmJFMp/aCgLCeFEmWMs5KpLUiTbyKLhsIMqqW8ND2OktRoytPiVEs+10idqqxEKtITZW4k + U5+XoVrmuTE/V/LZv5O/Wap5UZGRTnlGiipfm5dDrdSpzc+Rfi5SLWmt4H8RwNKnU2pzmVafw5zWHBZ1 + 57J0oIDlg4UsGshjthxPl3KFAO6vzxU/L1dF/PY3KGRwAX31gjolGriUyXVV9FaX01VWSFtxLi2Fmaoo + YFUksJIX/dOQk0FNhsxfmbMKaqS9NRkyfzPTBCmUJ8WRp/xRQWz/VLFtUrzEP3S2Js7RihQPR3ICfSmO + jaAqPZ6OqnzmDjSzdd18Th7ewvnjuzh3ZAcvHd7BxQPbuLR3g2o//Jc2zeL8uh7OLW/g/IJyLkwv4PxA + Lqd7MznalcHu9mQ2ib+6tjqM9RXhbC2NEISxsSyMNRXy/VZHM68hkVUDxWxf2MTpdZO5Kbr1+qI2rnTL + vQpDORdjz+UgY+766/Ka2Diviyx9O2gc74SP4+3EibyVLmXZOjzM1eNBrgn3cy25l2fHbbGhbuW5cznH + jTMZdhxKNGdPjDHbxc7ZFqPPLpGfB1PNOZJqyeF4cw7FmrE/1pS9UmdnnDGbpN7qCD0WhWgyS+yD6YET + xQ+ayGDQWAb8X2Rq0IvMiBzBnNgRzEscwYKE4SyKG86KuJFsTpnIngxNDmfpcEJsvnNV5lwUn/nyjGhO + TEtkSUMobQU+YtN5kpPqT3JiIHFJIUQnhxGSEI5/bBg+MeEEJsUQkhJLRFosUTJ34zL/B5klmXRM7WDF + phUMi4x0Iyrag5g4L2JiPPEPEAfJy0qUhpkY6IY42huIY6MnSkZPlI0ubk56eLro4edhQICPEgVsQGiA + vooIDvHXESdKIYA1f4cGAR6T8HdTE0wYgstE/F0nEuAyRAQHu00iVIzPKO9JKmUX6TWaWL/RZERMEEGp + Q1mK7hDxm6YtAlSToiQ18uLGkRk5ipSwkSQGDxeMJCF4tCizMcQGjiZGro8PHKdScJlR6uQICmM1KYvR + FINMUiUCWCF/gydQInVKwyZQGjKeMpkcRd4jqPAdQ1PYJHrjdIYI4BxzluWYsTzbiGXpuixOEoM5YQKL + ZRItS5jIUmnPivgJbEzTYEeWFnsE+3O0OZSpwcH0MRzKeIHjuc/zcsVzvDUwlu9WavHLflOenbGEKzZw + zWoIr8jxS+Y8O2XErwe0+WmXFv/cqscny7R5Y5YYqgMGvNSsx9EKeU7mKDbEiUEc91cOp4gRnK3FzTIz + Xqu15+0GJ95tcebtDide7bTmYq0uB3JGsyl2GKsDhwjg7aHPcTDqBU5FD+eCTMQrscO5GzOKN6PFkA4d + JR/LC9xzHcZNZ4HLMG5I/q7XMD6KHMl3qWP5MW8Sjyt1odmQZ236POnQ4dcOJdppOJ9W/IUPK6VuwzC+ + 6H6ef8+byNO1BrDNFPaYC4xhp5Fqb+BfVmrw61J1Hi/W5OlyPVgv53ZIXxyw5bdjtvxw1oEfrnvw4xuB + /PxJJL99G89vf0/myfepPP4hk18fFfDrsyIePS7h8aNiUJZ+/qVsKPr3B8E3BfBBJtxN4um5MH7a4sLX + sw35sGU871UN5/P6CXzboqUigL/pUAhgHT5omMRrZaO4kfM8V7Jf4ErhOM4WTGR/5kQ2pIxnaZoaczK1 + 6Zc52ZqqK4peV+aqQgArEcAvEi9zKNV7LLkBkygVQVAeoUtFlK7MM5mLviPkeCKdWabMrHRmcbMXc2od + 6Ss0ozlVR4yXUWT5PEeGx1/I9nyOAunzOr/nGIgcw+pUmU+F+pwp0uFKmQ53xEm5U67FtcLxKgL45fwR + vFT8Iq/Uj+PBdGO+2ubNv05F8Ph2MryVybP30uETwaeJksZIv0Tw9L0QnrwbIGkgz94Pgg9DpF4gj1/3 + 5dE9dx5dcebXczb8ctyKXw6a8/NuM37dZsbjLZY83mjN49WCpZJfYM1PMyz4esCEL6dZ8/eVXvx7Rzg/ + 7o/k55PRPHk5kWe35Nlv5ML7Cvkr4/RtOfyrHn5skvFqhZ8En1XIc9P5z8kIvttsz0eL1Hh/0Ui+3KLB + P09b8stdN55+ECjXRgnkHT6OgNfD4Go4zw4H8uM6L75d6MZHM1z5YKYnXy8L5sedCTw6k8XjG4U8e7ec + Z59X8eS7Op7+q1nmSLdgsmCWtGOBtGMN/LYJHu2Gx3sl3c/T3/bz5NFBnj49zLNnR3iGgsNSvp3HPy7i + 8b8my73qefrPQp7+Q/r6O2nPF948+dCe39404Yfb2nx/WZ3vL2jx4xkTfjmlzG0Pfj3sz/e7fXlnuQPX + Zphzps+EI50W7O+0Za98u7s73djV6cXmNm/WNLqxoNKJOZWuzG8IZJEYfyun5rJ3TY+KBD6+fREndy7j + 1M6VHBec2L2KU3tWc2bvWs4cWM/5I5s4f3QLF0/u5OWze7h8bh8XTu/hwqm9nD21X3CIU8cPcuL4YY4d + P8KR48c4duKkOJSnVTh2+hQHFQfg8CH2HjrIvsMHOXLiGCfPnVXtA6ycU8oPHTnM0WNHOSLHJ44f5+Sp + 45xScPKYpMfkOcc5d/ok58+e4sLZs1w4d45zZ85I+Ul5/jGOHNrH/j2b2bFtNTvWL+LQ2jm8snUBd7bO + 4Za8683F1dyek8vtwXjuDYTy2oAX70x1470BGfM+Nz7tduOrXg++6HLloxY7HlYYcqdUm7siq15vNOTN + ZmPeaDbgQb02t6s1uFWtye1aHe7WG0kqqDHjTp0ldxosuN1kwbUGc653OPLmwji+3l3P304O8ta+KRxc + UMm02jhqskMpTAmjLDuO3rZqtm1cwa5tG5kzYwr5OZmEBPkTHhpIanICleLor1i2hI3rN9DV2UlWejqR + YUGCAFLFMagV40khgI8e3srObSuZNqWN9pZK5sxUCOAFNNaXiENujbWFJrbWWuKMG+HhaoSbswERYc5U + V6aKY9+mWga6uTGXhQt7VATwvr0rWbd6OvPl3NplU1m9aICmigwaSpOYN1DOlhUdrJ9fxfS6EPoyrFmQ + ZcHmPEuOlVjyoNmZ99pFnzTb8FadCa+WqotsnMg7Veq8V6PB+9KP7wneUvaVVfpScKNKl+tV+lyvMeF6 + rTkXyhUCWJt1orvnRI9jWuIk+lO1aUvRVpG/1bFqtKcZMLvciXUdwaxs8GFhqSNz8iyYk2PMtCwD2mIn + UBn4AmUBL1IVOob66Em0xGvTlaRPb4o+U9INmJVjxHyRo/OLTJkhTvxg5iTVXsNzc7VYkKPBYsHaIj22 + lRmyv8qMI9VmHK004kSFHqcrdVQRwDca9bjfqjcUAdyiq9rv94tG0Q2tBip8Lfr3iwZtPq3X5KN6DT6o + 0+TdWnWBBm9Xq/Fm+Xjer5okekWLr5u0h7YYaNDkH806/Evu970cf9+oJdCRMjlu0efvrfpD0b/thkNb + ELTo8Eb1RK7kie0QO5pdUaJ7kvU5kC02SPh45gSMZrbYKgtiRB/l6rO7QiFPzdhapM8Wwa4qYw7WW3K8 + 2Y4zrWIEd7typdORV1osudpgwJ1mfV7vMOSjyaZ8MWjOZ5ONeb9TU0X+Pqgfo1oC+u12dR62qPGwXYM3 + +gz5YJYt789xERvEhjMtYgyXaIgtNI55SeOZK3ppToYOMwX9iRPojh5NV9RIeqJHMUOO54m+XCiG7fyE + sSxMHMMy0aFrMtTZXKjL/joLjjRac6TBiv01YkCX67JLRQDrs7/UgH3Fhuwp0GdvoUICG3Oo0oKD1Zbs + qTRla4kRm8tN2VnrwJ5WD/b3BrBvIIx9UyLZI/Jh/4xkjs7N4NSCLE7PT+XsnFhODwZypN2eIy3mnG03 + 5UqvOa8O2vHaNAceDFhzrcOIizIuJ2rUOFQ1gRMNWlzoMOaS1LvUb8HFPjMudBpyuk2XU21anO/S53K/ + MTemmHN7ihk3pa+utGpypXkS1zq1uN6nx7UpBrwyxZCXJxtyqlefIx16HJD+399pzoFeB7a0WrOoTIup + uaPozxtOT9GL9JS/IA7ccGb1qjF7QItZk3WZKc+Z2WshZQ7MEjk3qztAHOMQKnM9yExwIjnejazMMHHo + 40lMjsQv0AcbOxssLC2wsDDD3NwMU1MTDI0M0NbTUUUAq2lOYKLaWLTUx2Mqx+7mYtdbGRNiZUSQuT5B + ptoEm+oQKGmgmRb+pppDMBuCn+QjHIzFOXSmKM6fkpRQilPDyZc0R+RiZnIoGakRZGZEkirlcbEiD8M8 + CQtxJ0iu8fWxx8PLGmcPC5wVAthDiQo2F9/D5Hfy11hgiIudLu7Wk/CzGE2Y+QiSzEeSbz2Ocns1ahw0 + qXfQocnZiL4QZ2alhzOvJJlBQWdeHC2CptxYGrOiqYgJoDTYk1JfZ2oCXBlMi2RGVgw90t7GRH9qkoKp + yYyiLi+e2oIkyrPjKUmLFv8jhuKUKMrEoSrPiFOhWMrykyLJTYogT5ATH0qiOMnhbrb4WRuqlsVOkmd0 + lGazYHIzq2f3snK2Qtb2sHphPxuWTmbTiqlsXTWNrSKft6yW/OpBtq1RMI3ta6ezY42Urxhk45LJrJnf + I3K6VxX5u3nJFFUk8CZlf+Alfaxb1Mmq+S0sn1nLkmkVzO8vYlpbJv0N0gc10gflkbRUR9BWH0VPexxT + BlKZOiOd/lmptA7GUivfTUVfIEU94lh2upImujOxyVqFpCZbkkT+p0hZapstaW12JLco5yyJbzQjodFc + zluS0mpBWrsV6R3WpHVaqpDeYU5GhyXZbTbkNTtQ0eFNY2cILW0RVJQGkJ/mRVFGMJXS1z0ttWzZsIZz + 509z78EDXn/7bdUfz9ZsFH3Z30d5dSVZuTlk5+dSWVvF4Ix+sTO2cu/uCe7e2MPRXVNZOSOTpf1RrOoP + ZfNACPsnh3NY8of7QjjY7cehbi9OTPbmpen+XJsXzp2Fkdyc48/LfY6ck/ZfajHlWpsJN+X7vC164K7I + 7PtNmtwXua3ggcj0hyKfVSSw6IYHjRo8bJrEG63Kfupaojc0eaddi/e7dARafNirxUf9Wnw6oMPnU/X4 + coY+X6ggekTwyaDOn/h4UJuPpmny6UxtPpujy6fzdfl8seic5SZ8t9aSv60z56uVxny8WJu356jzxgw1 + 3p6py1vTDbnXb8D1dn0u1OtzWmyeQyIzt4qeXSt+w0bRubvTtDhWbMqBfEN25xmwI1+PdQWGzEw1pilK + j3zPiSQ6TSDGUb5nFwNC3JSlz60J8XAgwsORBC9nsn2cqfB3pdHfhQ4/J6YE2LAi1oLtGVYcKnThVJWP + PD+Y0zX+7Ml3YHW8AStjRYaXuHGhPZJL3Qm80pvKS53J7CkPYUmqM/1hNtT7mlPgbEK6gzmpzk4kuvkS + 5xJAlKsfkW7K3r9ufyLc3Z1QF1eCXd0JcHXD39UDHzdXfFyc8HOyk3O2pAd7UZEQTmV8OFkqAtiVaLlv + mKMdgY42cp0DAV6OBPu4EOrvRnSoD7HhvsSEekqZA76utvi7S11vJ0L83AjxcSPAUyGAnXFzdMbFwRln + e1eRSUPk71AEsLeKALaXVAWHIdgqcPTG7g/8TqzaOnnIsScOju44OLlh7/g/+G+C1/F3DJG9AjtnFezt + lLyC3/f5VdrioBC9AschwtfJ/vclqRUCWNIhEngILk4+OCmkr0LyqtrhKe0datN/w14hepV3kbYrUPL/ + jT/eU4ES8fvH+yvLXyvR0EPPV5bFdhe4ybPdVfiDAHZyHoKDs7yTgwMWNhYYm5tgZKaPkakexmY6kirk + rxaGomt0TSaiaTweDRMFY9E0Ga2Crvk49AQGluOGooBtJqmg7BdsaqOFuY263FsNS8sxmJg8h4XxMBzN + hsncHktZvCGDZa6sbA9hy0A8S1tC6Mx3ojDRmNgYA+LSbInNcMcv2hEHbzNsXY1xENvby8tKdJgDfn52 + OMv8tbLRw9LBECdvG1z87bH3scTWy0iu0cfZTw+PQB2CIw2JSxaZmG1DUYkDtbVuNDS4Ul/vRE2dNZVi + k5ZVGlJUrk+xCgYUlZmQW2JCRq4hiam6quWfY+K0pW06JMYZkZFkSW6mveh9J3Lz5TstsCen2JG8Ynvy + xY4vyjGjNNtIdJY+Ncl6NMVp0RGpSX+oJjOD1Fngp85STzXWuE9kl5cWJ32NeTnIglcCrDjrZshxOy0O + W07koNlYDpmP4oTVaM7Zj+WSy3juBYrck2/8wzRLPs204f1kU95JMOV+hC6XvcdxznkkJ23+yjGz5zhl + +lcuWYzkmsUobpiM4K7hcB4aj+ZNk3G8bjqRN8w1eE1sijtGalzVn8BpnbHs0BvBGt3nWDJxGMsnPcde + KzWOO+lw1t2Ql6RtZ2Wszxkr9xzLG07qfB5kzHex5vwt1ZKvMy34PNeS93PNeSPPjPt5xtzKMeR6ph5X + k7R4JUGDKym63M4y5H6BOa8VW4pvY8Fr5SY8FP/ljRo9PmpV/pBpyFfKCj0NJvyj2px/FJvxXZYJXyTo + 8m6IJjfdxnPaegTbTV9gsclwuk2HUy7HikxtznJm8dQs9u/o5+SJJWzYNEh7VzGVlZmUiF2Qk5tOWXkx + k6f0sXrdSrbu2Mj0WQMyN3KIiwsjLMwf3wBv3L3k+xH5Yy3fiJmNHYbm1ugYmWNibUdAWCRNrR1s372P + Q8dOsXz1OqobmkjJzCG3oJSc/BIqKusZnD6XPXuVvfKPMn36HBITUgnwCyIkMJSU+ERqK8qYN3uQgb4O + ivIyVSSbj6e3wAcvT2X55wA83CTv4UdsdCItTR3s2XOQDz/6VEUAPxJ8+slnvHT+ZZYuXS5zupGi4jLy + 8otlXhbKO5XS2NyiigA+dOQ4N24NRQAvWLhM5n09GVk5lJSVUlFVLvXqGZA+WbduNYcP7ZF7nuLm9Qs8 + fPUyH394h79/+0Bwl4/fP8u96zt4+cQKLh1byo3Ty7l/cRlXjgxwfFkBZ6bE8UpfONenBnF90Icb0zwl + deXqoDuXpnlwoteRfe3WbGuzYr3YM4sqjJkuPlRnljZN4s90FFnTWe5Ca5ET5UkWpHpPJNltHLm+4rdG + m9Kebkd3jj3NqeZiW+pRHKZNfaIVnZmudGW6Mznfn6lFIUwtDmOKoLsgkAaRJaWJDmREmBLhrayOqaba + PjEmQJtwrwmEuY8mwn0k0d5jSfCT5wWqCzSJ9dMg1H08fo5j8LAfjavdaBxtx+BgOw47u/Eq2Mixjc0o + FWztx4iMHYoQ9lFW4AzQIinWjNQ4M5KjDUgI1yEuTJfcFAexDaOZ2VciNmQXqxf1smhGO9MHmpkzfwrL + 1y9n656d7D96jKOnzrNn/3FWrd3G5KnzxBarJCgsgQCF5A1NIDg0nmA5VqCQwirC909iVyF6/ysvUMhj + Bf+d9wtU8kORv75BCSr4/04CB6mWkQ4nPCiYmKBAEgJ9SQ3xIVt8ioJwF4rDbSkLN6MywpiqcEMqIgwo + jzAUmFATbUNfjj/zKhNYWpfBrLxIqnwtKXczo1Z8kAY/Z1pDvemMCqU3MY7u1CQaM9KozkynMidTfIFs + SnPzKM7NpySvgJJ8SQsKKM0voFxQKWXVOQXUZBdQl5NHdXYuFdlZlGVmUJqZKXZuOoXpqeSlJJObmER2 + fDzxwcFiZ7lhZ2SC3qRJTBg9GnW1iejramFjYUJieCD5yeGUpYeJTxJBT3U8g41xzGmLZUFXPAt74pjd + HsPU5mh6amNpKo+mqjiG8uIkiotSKSrIorgwR47zqSoppLK4iLLiAkEhpYKCokLyCvPIz8+hOD+b6uJs + 6ksEhenUFQgkrS3KpEZBYZb4RNnUCKrlvtVSVlWSRX1FLq21BXTWF9NVX0JPnbIfbQm9taX0VQ+RkFMa + a1SY2lDNNEmnKyTwfxHA87rbmNfTrkrndLUwo72Raa0NqihjZQ/gyc219Mq1XbUVdMg9W5Wo30pBjUII + l0q5QIncLculLT+JZvHhOnNimFGezpqOSrYNtrF+SivT6grFH8uUvkymIjNOxiZBdGOyCkUZCdLXMRSm + xKrKK3NTqMpOkr6PpzApinyxJwtV++NK/6bGU56WQEV6EpUZKdTmpKuWfB5a9vmP6N8hArhcxr0sI1We + p5DJ2VTlCZQ9ghVStqqEdsEQAaz0VwkD1QUM1mYxsz6T+S2ZLOnOZsWUPFZMzWNhfzYzOzNlvDOZ3JBF + T00m3TVZ9Nbl/Ym+unwVAdxbqywlrSwDXUaXQjYX56FEASvkb2NeKk35kuYqBLC0NyOT6vQhIljJ18q8 + b8jOpFk5r/zhISGaoqhg8sL8yAr0IN3XjexAHwoiQqiR76SzVPzN1nqWzxlg+7pFnDi0jVdeOsqdK+e5 + d/UlHggeXj7P65dO8dr5wzw4uYP7R9Zxe+9C7u6cxT3Ri3fWDXBjVS+Xl/dwdmk7Rxc2sX9mFXsGKtjf + Vcqutny2NuewviWXZe25LO4pYvP8Vg6uncqlHQu4v2cJ15f28FJHIcdyQzgW5cDFMEtuBBlx21+L236T + xF6ZwKvhE3iYLLaG2AGv5hhzJ9eU2/k23Mh35GqRG5dLvHlZfNOzxQGcKvTmcI4bu1Js2RBjzHqxB7eI + Xbgr2UJgya54K3bG27A11lL8LAtWRZmyKFyfWUFaTJbndfmr0Rkwno6ACbT4jaHJ50Va/YbTHjKC3sjR + TI4dy4BgqmBW/AQWJWuxOl2fjVn6bM43YHeVJYfa3Dk+GMH+wUQWNkWKTgqS+eRPjhL9mxBIdHww4YLA + mGB8IoMEoQQmRhOaEqMif2NlXsdnKVHAQ8gqzaJzsJOVm1cyLEeEYGZWGKnpQSQm+xER4YKvn41qSWgH + Bz1xMHSwt9UVB0Ngo4ODGNROdtp4OOni7a5LoK8hwf7iMIqBqyDIR4dAMSKDBEr07/8QwBOH4DKRADkO + cJ0kgk9dRQCHeKgRJsZSuNd4wj1HE+M7mpTQ8eTGqFMQrykfnYZ8fGoUJE6kKHECBXFjyYocIXUU8neI + AE4MGi3KQNn3dwTxfqNIDpI6yt6+6SZUpxlRkahLjRhsNWI418ZoUR0xicpQNSrDpY7kqyStDJlAkdeL + lPuMpDlsEn1KBHCmDGiOOcvzLVmZb8ayTAMWyiDNj5/I3NjxLIwbz+K4CSxPVmdDhjbbsvTYkanL9nQt + dqROZFvySLYm/EUc8GGcLBnGq72j+HKFJj8fNOXZeUu4as2z61YqcEUhgE15etKQXw9q8dNOTf65RZdP + l+vw5mwd7gzo8nKrHsfKJ7E1bTjrY59je/xI9kufHE/T5OUCE26W23Knyp7bNfZcEYfiTLkRe3PU2Jz0 + IqsihrEmUFn6+XkORo3iXPJErqdP4m7aJB5KW99MHM97seN4P1SMct8Xua+Qvw7DuOEocBrGXfe/8FHE + KP6WMpEf8tR5JEby/xDAuqploP/ZMIava/7K51V/4ZPaYXzV/lf+NWM8T1ZI3S0msMtcoBDAhjzZosej + NVo8WqnNk+W6PF6py9MNyjnpi4MKSWbDj2ds+emyMz/f9ubnB3789m4Iv34cyaMv4nn89xSe/CeXp78W + 8OznIp79pwh+LIEfBP8ug78Xw+cF8E4m3ErgyelQftjorCKAP2gZz7tVw1V7AX/TrM637dp826XHlx06 + vN8wiQclw7mWOYwr2S9yrWg8LxVOEkGgxtZUGeuUccyTPpuWpk1Xmh51yToUxE4gKWg4sd7PkejzAhky + h0vCNGhONqM50ZS6OD0qwtXJ9xtJVZQavblmzK1xYUW7D4saXJhWakmXfPSV4aPJ832eLI9h5LgPo0zu + 1xz4ItOjx7A+Q5NDhfqcLtTmYpEGL+dN4OWcMVzOHSUYyfWSsdyomcB95cenxTZ8s8efH16K4smDFJ5+ + kMmTT9J49qVA+u7ZJ1E8fT+EJ+8H8Phdf1WqIlY/DObZe1L2hg+/3Xfn0VUnfr1gxc8nLFVz9pc95vyy + XYkCtuTxBiser7Li0RILfptvwQ/TTfm8R59PJpvw9RJ3/rU9jB8ORPLL6RiZ56mgRP5+WChjIuP0XSn8 + qwJ+qYNfG+BRI/wm+K6Cx2+m8evLIXy/144v12rzycrxfL1D2UPXhl/ue/H0w1D4Jha+jof3I+F+OCLp + ebI3gB9XefL3RZ58NseDj2Z78uXiAP6xOZIfjyTxn0vpPHmzkCeflvLkmyqe/bOeZ/9u49kPvTJnBnn2 + 4xz4eQU83ghPdgv2Sf4Iz54c5enTEzx5dkpwTnBBcJGnT+T4t608+nkRv/3Ux6N/1/L4h2ye/SuWZ99K + f37mLP1qya+vGfDjTS3+dVmH/5w35leZ078ec+PnQz78bZsnby625spUI0536XOk3ZQDHdbilNixq9WJ + Ha0ubG52Y63MkaU1TsytcmV+nR9L2iNZ1p/ChrmV7FrVxe7Vk9m9apBdK6exY+V0wQwpn8metbPZt3E+ + +zcvZP+WhRzcuZTjB9Zy7OBa9u9azt4dK9izYxV7dq5j9/b17Nq5lZ07t7N910527t7L7n372LNvPzv3 + 7WHjti2s3bCedZs2snnbNnbt2c3uA0PnNm3fqirfsGUz2+TcdjneuWsHO3dsY4dct2PbJnZs3yzP2MLe + Xds5tH8PRw8c4Ihcv2/3LimXenLt1o3r2bhumWrJ49WLBtmxeIDTq6dxae0Urq5o5+r8Mq5Pz+B6fzS3 + egN5bbIr70xx5sN+Zz7tc+bLHle+63Pj2143Pm235X6ZLjdLtbhTrc+DZmMetpjwoMmQVxv1uV2ry60a + XUn1uKtE0lcbcbfajPtVZjysNuW1GhM5NuCmOP4PJrvz0cpUvt5Vx5ub68QoSaQj3YmMQEuiPK1JCvWk + sTKPZQtmsHb5Ivq6WomLjMDexhoHextxtL3JyUpj0YK5rFqxjMb6OmIiw0WfWoiONSfI34OC3GSWLZ7O + kYPSX1tXMm2gg9amKmbN6GPNqoU0N5YR6O+Es70Brk6G+PtYERpoJzrYivhoTxrEaJw/u4PJPVW0N+Wz + dEk/h5QloPetYsPqQebPaGb1gh6WzGilviBenNo4looRtWtBPdtn5LO4yoe5ou/W5pqwr9Ccc8qPIc0O + fNjhxAetdrytEMAlk3itdAJvV6nxbq0a79dr8q7gtepJ3K5Q42aVBteqdLhWqce1ahOuSH+eKzPhQI4u + q+ImMhg+kskxE+hJ1KQ5XoPSsLFURIpxlKLHYJEdi+o8WVjlztwSe2bmWzBD2jKYY0h7wkQqgl6gLOhF + qiPHikzVojvdkN40A3rl2oE0faZlGDAn30S1DPSMHLlfhgbTMrWYk6PD/Gwt1d7Dawr12FpmxD4Z44NV + JhwuN+CYzBGFAL5UJ/NB9NnDdgMVAfxekzYfN2ipCF+F/FWWaf6mWV91/EmtBh/Wqqsift+pmcSblRN5 + vWwsDwqG82bpGD6p0+CrRi2+bdLkb42a/L1Jh+8btUU3TuCbGjUp0+LvLTr8rUWf70Snf9NmyNdtBnze + rMNHcs1rFeO4mjuGs2nqHEnR5UCy2BTyzstDxzDd83n63Z9jeuALrBI9tKNU3qfGnN0VJipi9FCDJadl + zC71eXJ1shdXul252GLDmSo9zpRM5FLFRO7Lc97tNlTJ6g+79VSk7/3aUTyoG6NavvSDHl3e7NTiTUk/ + mGHFR3MceWOaHde6zTku/bQxdzzz4kfQF/JX+iNHMi1J9GGKBh0yvvV+zwueoz30RWYkTGCe2BkLk8RW + ih/HosSxLEuewBqxOzbl6XCkwZrjzbYca7TmUK0ZeysN2FOqK9BjX4k+e/J12S319hYYsr/ImCPlZqpl + offKnNqcr8PGAoXQN2dnnQPbG53Z2urGtg4vdvQEsXcggmMzEzkzN4Wzs+O5MDOS8wO+nBTZeqbFgpda + TbjebcqDfkvenGrDG5OtuCnj/EqjDi81aPKSjP/FFj1e6TCWPjTlUrcJF7uMuNAu86VVmxPNkyTV5EKX + LtekH28PmIpMMuRqi4ZAnZtd2tzu1+fWgAE3Bgy5PmDM1X5jLvcac65D5H2HGad7Hdjbas3yMk2miQ7v + z32BroK/0lnyHF1Vz9PbPJq+tvH0t02kV57VK/Ovv8WcqW2OzOwOYEZXFF11EVQVBlGQHUxRYbw4/amk + pScQKs6Zo5Mj1rY2WFpaYmZmhrGxkWpJaE1tLSaqT2TCpHGMnzAazYmjMdWagKuJDiG2psTYmRJtbUS0 + pT4xVgZEK7AW2BgQY2tAnK2hKo2xNyLJzZL8MA/Kk4OpyY6iOjuG4oxw8lMVEjiEnPRI8qQsTxxyhQyO + ifIlMtSDkAAX/Lzt8PCwxNFNWQraFDuBk4vAwfR38tdEYCQyTwd3G3X8LccQbTGCHPPhVFiOpM5+Ak1O + 6nS46NDjZszscFeWZ0ezpjqbZQ35zG8sYKakU2py6C/LoC0zhpoIPyp9nWj0d5Z5G8KcrCgmp4bQEOtD + Zbwf9fIOHRWZ9NQXUleQIs5/+J//3q/OTqShSBxnQZk4U/nJUWTL+eyEMHITw8mI9CfWx5koN1vivRwo + ig1iSn0xK2f1sGmJspTzZNYt7mft0smsX97PhuWT2bRyChsFm1cPsGXVAFtXT1FBIYK3r5nGlpVTVXsB + bxB5vlEFuWap1FewbIqKBN64uJv1SzpZM7eZVbMbWTKthvn9ZczsLGCgOYuu6kRaq6JprY6ksymO/p4U + ps/MYeqcLLpnptAyGEP9QDiVfQEUdnmS1exESoMNqYK0JjsyWuzJanMiu10gaXqzDUl15sSLjlSQXG9J + WrOV1LGROrZkdtiQ2WktqbXqOKfVkfwmV6o6AmnujKC1NZqK4iDyUrwpkL6vl7GZOblT7JGtXLt+lTff + eZf7Dx6yffceahsaZS6H4+nrjbObK06uLgQGB5BfmM5KsXPOn9nCzUtbOLZF+mZ6Jut6I9ncE8r+qZGc + mh7L2WnRHO0L5WCXHwc6vTjW58NL04O4MT+KOwtjuDE7iJd7nTjXasmlZoUANuVmuxG3W/W50yz2gciC + e6IHFLwqcvOBlL3WrMfDJl2xIxRSWJ3XRR68JXi7XYt3OrT5QGTqR/16fNinrcInk3X5ZIoOH0/R4iMV + NFX4eKqWCh9KXsEHg+p8NEOLT+fo8Ok8hQAWvbDclO/WWvHdOnO+XGnMB4t1eGuuJq/P0uCtWXq8MUPs + ln5DXhE9crZahxMiPw/labM1cRxrw15ke8JYjomcfKnaglMiN0+K/DxXa8nxRjvWVdowkGUielWNROcx + RDmrE+aqT5C7BYHuNuKbOxLp7kS8hwNZnnZU+NrR5GdDp78F04ON2JJmyolisV+bvESOhvFQZO7NDj9O + l9uwT/yZ/dmGnK915k5vMA+mxHKnJ4Zr7dHiw/qwLtmWWeGmdPoZU+VuTK6TGRkuMu/cfElwDyLGzZ8I + V09ClehdGfNQV1fC3YeI4FB3d4LcPPB3c8f3DwLY0Vbq2pAR7EVVQrj4+/Jd+nmR5O5CtLMDYQ42BDla + E+xmT5ivskS9GwmRPuSITMrPjFbJqtgQV4K9bAkRuRQd4k5ChC/RQV4Eerng6WQnssgOJzt7nOydJR0i + Xh3tPFSEpxIFbC+wVWDvha2DAm9snXywc/EegvMQbJ09sHeS+k6SOrth56hE+A3B0cH5/4C9PM9eIX5t + HAVOAiXvjIOt1LdT4Iazgweujp5iG3rh4ijfirTBUYlKVtpnK1DS36GcUwhhewd37Oz/gLTjz7y7vMMQ + bGzdJPUYwh/v93+BncDedggK6eukPEOVKuSzQkq7SbvcVfiTAHZyUu0FbC+ptdjJ5paio8xMMLMwwlS1 + DLQ2hsZaGJiqo2+shrbReDSMxqFuomAsmsaiuwR6ZuNUMLBQIoDVMBFdocDUVksFcxsNLGwmih4UPWf8 + FyyMhuFkNowYz3HUpZgyp9KNde1BKH8cW9cRxkCRi+gzUxJjDUlMtyMu0wPfKOl7b3NsXE1UBLC3lxXB + Afb4+9niomxhYKuNjYMuzp4muMmcdvLRx8FbE1dfTTyDdAgI0yM63pS0LGvyixwpq3ChsdGD5hZPmppd + aWxyoK7BisoaM1Xkb0mFoYoALi43oaDMjOxCY1IyjUhM0ScuRpv4GF2SYgxJizUmO9mC7AwbcnJF9uaL + DBb7ObfMTmSkFYX55hQWGFOSa0B1hh5NSdp0RmsyNVSTOcHqLPZXZ7n3JNZ7TmSfrw4vh1txO9qRG8G2 + nBdZcNJWkyPSrwdNRnHYdAQnLUdxwWEsV9wm8DBEh3fijIaI33hDXo8S+RimzXW/CVxwfpFz9gKbF7lg + 9QKXLEdwy2o0d+X6eyYjeM1oBO8Yj+F9Gcu3DSfwpozv6ybq3DecxA39iZxRCGDdkazS/AuLxw1jhfrz + HHbQ4oK3KdeDbbgdZMtFOT5vPparNmJ7u0zikxCRl3GmfJNizufppnycbcq7Oaa8nit+Xb4Zt3KNuCpy + 6XKqNpeSNXklQ2z+PGPuFSvErxUPqwQiJ5Xt1F6rNeDdFkM+FD3wqfiLX9UZ8fcqc/4pdb8XmfldkiEf + helyz12N87aj2G3+IsstRjLdcTzt3uo0RhkzoyGElbNz2bOti2OH57Fx4xQGp9XR3l5OU0uFiuitb6hk + 1myxDTauYOv21cyZP5na+jyyxA5JTAwhLNwfnwAPXDxdsRU5Z+HggLG1LfrmlpiKPPINDqG2qUm19PP+ + I8dZvX4Tze1d5BQUU1pRQ3l1HY3NbcyYNZ89ew+ye+9++vunyBxKEL8ziLDgUNISk6ivrmDB3OliG7ST + n51GWFAAvl7eAl+Z6/4q+HgG4O8bIr5rArVVjaxft4XX33hbtQT00yfP+PSjT7l4/mVWrFgl79hJTU0d + 1dW1VAqqJN8m7Zq3YBEHDx/jytVbHD1+hvkLllFd26giiauqq2horKeto5mBKb2sX7+Kw4d289K5Y9y8 + eoaH91/ikw9u8I9vXxXc5sO3TnD78kbOHVnAuYNzuXxsPjfPzufigW4OLswUnR8qtnYQl/oDuTzZh8sD + HlwacOHSVHfxBVzFbzBiY7Uu62Ws19QZs0J81vkVxswsNWZqqRlTq+2ZXONCd7kzTTl2FEboUBSu/I5s + Qku6Lb35znTl2lGfYkJplLac06Y+yZqOLHfa0t1oT/ekJyeA/sIQ+opC6coPpCHLizJln9YYG6L99VTb + JUb4axMVoE2Y9wTRcaOI8hhJvM840WXqFMcYURBjQkqwLpFe6kMEsO0YnG1H42AzWvTAWGxtx6tgLcfW + 1qNUsJG8EhXsKt+Ft6cmgX46xESYkRRrTXKMNYnR1qTE21Mubetpz2XejEYWz+lk/ow2Zk9tZe6sPlat + W8aW3dtUv/Hs2LuPQ0dPy5idlzl0lKUrNlHf1EtCch5BYfEEhgwt8RwcGkeIQNnDV1nO+Y9lnoeWev6f + /BCifsf/5P0CovEPjMMvKO5PAliJAlbKVMtNB4WL7g4mOjCAxEAf0kO8yY/woiTKlfIoOyqjzKmKNqY6 + ypCqSAPKIw2l3Iz6RCfVOMytSWZhdZrY/IFUellQ4WZOnacNjX4utIX60xUVQY98D91pGTRm5ojNX0BF + bjFleaWUFMg3W1hBYVElBcXlFAqKisopFZQX/o6CciokLSsok/olFOcOoTCnSPygfJHTueIHZZKSkEJY + YCgeLu6YGZmhPkmDMaPHoq6hiYmJCa7OjjJOERSkRVOZE01zidjttYkMNsYwpy2GhZ2xLO6LY253HDPa + 4+lrTKSlOp6qkkTKS9IpKc6WthVTLG0pLqqgrKiK8uIaKa+mWFBYXEl+cQV5RSXkFxTKexWoiOIaBQrR + W5hDVb5C/uZQV5ZPfXkhjaUF1BXnUStyq7oki4qiTGrLsmmszqe9ViGAS+mtU0hfZQ/aMnprJK2tYKCh + hoH6GibXV0pazTQlErh1aAlohfCd29Uqqcw5wWz59me0NTCtpZ7B1iEMNMu1jdX0yfVdNaW0SVtay5Tl + movpqFaWalb20h0igLuK0+kqTKKvMJHZVVmqCOCtg62qfYEnV2bTJuebizNoKEyjTonwFT+iujCT8txU + SjOTKMlIoFQVCZxEeWYCZRnxlKXHUpIaR0lKLKVKVHdqAhVpiVRnplKTlU5dTsbv5O8QanOlfxQCWPnj + gEIC/47KnGyZS1Iu/dqgar8SBVysIoB7FLK8qoRp0pczazOZXZ/KwuZUlnZlsHIgi+VTsljYmyF9k8ZA + Yzq9telyXRpdVZkC8fEEPbW5Uq6QwIX01BTSL33TU1miImjbZNyUJZ8V4lfZ97cxJ5UGaV9Ddja1mTLO + 6QoRPEQC16WniZzKoDVP+itP+iojiaqkaMrFpi6MDqIoJozajBQa5fzk2iqWTeln2/JFHN65ntOHd/Dy + uSNcv3SGBzev8MadW7x99zbv3bvNJ/dv8vHdq3x882U+vHKG9y4e5IOX9vLhuV18cHo775zYypvHtvLq + 0c3cObKeq3tXcHHzYs4tn8WxeZPZO9iuIvPXzZDxFFm1Z81MTm5fwrUDa3h1/2quLR3gVGsRe7JC2Rfj + xjmxYy6HWvBykPg/vupcDJjIlYhJ3BEb6l6OGXfybLieb8/VInculfhwoSKQ09XhnK6N4URdHKcbEjhZ + F8ueQl9Wx1uyLNqItUnmbEiyZG2cOevjbVgX78DKGFuWRtowK9iUfpHpzR4TqHIZQ7nHaMq9xlAmKPYY + RbHXCMp9x1AVOJaG8Em0xmjQFqtJZ5y2yBw9pqQYMSPdjNliX8zOMWCp2CPr29zY1BvE+r5Y1X7HXaWR + VMr75aWGkSz2QUy82AgxwQRG+uMXHkBAVBhhSUORv/EyhxNzUkjKS/4TuZV59MzsZc32tQwrrUgSYRZL + dk44qRnBRMW4iwC2wd1DjFwHPexstATaomi0sbPUxNJ0AlZmE3G0VsfNSQt/bwMCfQ0I9jEgRNJAb138 + PbUI8tQm0OP3CGAxkPzdlVSgRP+6KXsfaKgQohDAUh7qqaba3yDccwzR0kEJwWNJj5hAZpQa2dETyYoa + R178eIqSBOLQ5kSPJE2c26TgF1UEcFLwEAEc5z+CRL9RpAaNpUA6tjnXkpYccxpSDWmUQW9K1qc5SY/G + GC3qIzWoj9aiIVqbBjGoa8PVKPMdQZVc3yqTZHK8HrMzTFikRN7kW7Kq0FIVBbwwRZe5cWrMih7H3Jjx + LIpXY7my3FaWHlvk/JZMfTYla7EhcbxMjuGsiRrGpoRhHCwYxs2u4Xy6XJ3/HDTh6XmLIQL45hAJzFWF + ADbm8Ql9fj2gEMAa/H2jLp8u0+HNWVrc7hOjtU2Xo6UT5d7PszrqebbEjWFX/AQOJKpzNE2Ps9kmnM01 + 5WSBKYcKDNieri4TdRQro55jRdgwNoY+xz7pu/Mp6tzM1uMNqfNenj4fZuvwkdT9JGECH4aP5l3px4du + f+G2Qv7+jnsqAng036VM4t95Gjyq0uNZkwFPxUB+Iu36rU2bn5om8n3dKL6peoHPq5/jq5YX+X7KWH5b + rAsbTWC7ucCIp9vkmi16PF6vy5O1ejxZrc9vq3V5vNGYZ7useHbQlkfHbfj5jC0/X3Tkt1dc+fWaO7/d + 9eXXN4L49YNIHn0ez9O/Z/DsH9nw9xz4Wy58mwff5MPXBfC55D+QsofpPLsay29HA/nXOmVfZIOhCODq + kXzWMI6vmtX4tkObv/Ua8FWXLh8o+3qVDudG1jBxFl7kRtEEXi7S4HjeJHZlTmJN6ngWJE9kVpo2vdLn + 1fEaZIeJweb3HLFew0j2fZ68wDHUxOjQlW5OZ6oZjfG6qj8alAaNpj5Wg8kyRgvqnFjZ5smSBkdmlVow + WT74hujxlAa8SL7XX8h3H0aV719pCx7OzNgxbMzS4lChHqfytTiXP4mzWaM5lzGcSzkjuJo/iltl47jX + qMGbA0Z8tsqJ7w4E8LO895O30nj0STqPvkrj6TcpPPkyhicfh/HovUCBL48VvO/Hkw8C4MNAnr3nx+M3 + vPntgfT3dQd+vWjFzyfN+fmQKb/sNePXHeb8ts1CxsqSx6ss+W2JnJtrwj+mGvBRmwbvSR9+Nt+Bf2wN + 5IeD4fxyNgZupMJbMkafFA5FZX9fDD+Vw6MaeFzLs6e1qpR/lvH0A2nv9SD+dcSW77Ya8PUGTf6+35if + Ljvx20N/nn0UIeObKOObwJO3o3mm7P97Rt5npz8/rvDk+0XefDHXk0/nePLVYj/5hsL418FYfnwpmV9f + zZK5k8eTr0pl7lTz7F8NPPuhA37o5+mPM3j282Jpxzp4tlOwD54elbad4CmnecQ5Hj27zKMnVwU3efLk + Mo+fHOTRo3X8/PNsfvmpg8c/F/P0JyVCPZinX7nz7BNbnr5rxi+v6vGfG/JdXzblt/P2/HLMjZ8OePHN + Jnden2fFpT4DTrTqcKTVmANtFuxrtWZnsx3bmhzY3OjE+nqZK3UuzK92Y261F4taQlgsht/KwTy2Lmlk + 54pOti/vk3wvWxZPFgywbclUdqyYzs7VM9mxZgbbVk9j+/qZ7N++iL07FrJ1w2w2rZvN5vUL2LppGTu2 + rGHnji3s2rmdHTt3smPXHnbuFsNf0i07d7B20wZWrV7FmnXr2LRlM9ulbPueXWzesU11buXaNapzmzfL + uW1b5R7iOGzfyvatcrx1I9u3bGSXQPmR9/De3Rw7sI+j+/exb8cOKd/Mtk3r2bxhtbRpOWtXzWfd0pls + XzqFoyuncmZFDy8taeLS7CJeGUzjld4obnT787DPhXcmO/JhrwOf9jryTa8L36ngqiKAH1YbcLfGgFcb + TXnQZs6rLabcbTLiXrMxdxoMuVVnwB3BXXEE74nz96pC/laY8Ga5MW+VG/KGyLh7tXrcb7Pk3bnBfLEh + nzdW57OnM4iWOGPinTXxtdISPWZJWU4iM6d0iRM1g2YxdoN8vTE20MPYUA8XJ1uSEmKYNXMqixbOoaK8 + mKAALzH89bAw1RfH2lEcgzjmzxlg/+4NbN28nEGFAG6sYtb0fumPxbQ3VxEZ6om3hyV+4rhEBDsSHeYi + qQPpif60NeWzeG4XU3ur6WopZNUyMYaOb+LEobVsWT2dhdMbWTO/m2WDTTTnxdBbFMOa7gIOz67k4NRM + 1le4sVJZJjJHn2OFplwqM+dhgw0ftjnyQYstb1Ub8qBoIq+VjOOtqgm8rSKANXi7Tl21n/LN8olcrdDg + SqWOQI8rVcZcLDfhdIkJ++SeK2ImMDl0BD2iyztj1UXnTqIoaBRlYeNoTNBmcp6VKsJ9TrkLM4tsmS46 + d6rIycE8Y7pSNagKG05ZyIvUioxsT9WlP9uY/gxDekUfTxY5PCCYkWPEXGn7zFwjBjN1mZahwyzRc3NF + vy3M0mZVvi6bSwzZU2HG/gojDpbqiT7VVhHAl+v0uavaH9dYRQC/06DJh3UaQ9G8LXr8XYkCaNbn8wYt + Pq6exAeC9wTvVKnxevk4HhSP4l7eX3mteCQfSd982ahEAWuqooC/a9LiW+mrL6vG8mX1eL4VOf23Fh25 + ny7fNOvI/fX5Up7xqVzzQb06D0rHcDVnDBdF5p/KMOBQig47EjXYGD+JxWLvzAr4K/NCX2BF8ji2F+tz + sN6CQ/WWqvS4jNWFXjeuTfHhxlQ/Xuly4VyDBcdKFB02mvPFY1SkxlsderzfLe/ZqsGD2tHcrRrB66IP + P+7T59MBY97t1uGtHqkz3ZK3Bq243mHA6RpNdheOZVnSi0wJeY5mz2G0+P+FvujRYi+NpTX4r1S6DaNS + dFdb4HPMShjP/KSJLJJ0sZxfnDiWFSlqrM2YxKZcHY7K/Dohcu5YoxWHas05UGnEPhmTvSW67CnWZVeu + FjtztNibZ8DBIhOOlJpwuMyUvUVGbMzUYG2mOhvy9VTLQW+ssGRDjTUbGhzY2ubB7h5/jkyN5PT0aM4O + hnNhahDnez0502rDS83mquVSr7cZcr9Lvvc+C97oteBOqwHXGnW42qTDNZkDV8W2udpuyNVOIy7J+19s + 0+OCyOmzCgHcpMaJRjXOiM670mfELemzmz0GXGlWVxHAt0QPKpF5dycbcUd08p0pInsmm3Kn15RXOox4 + WVmCuteew61WrCnXYnb+6N8J4OdpL/6LOLnP01bzIm21o2ivH0Nb3UQ51qJDZFV/kx0zugOY2x/PYEcS + LTUxlBdGUZAntryy10uC8m/6ABxUBLA1FhYWqh8V9PX10dHRQU19EuPVJjB2whjGjhuB+vgRmGtPxN1Y + h0h7M5KVfXJtjQVGpNgZkWpvokK6kykZzqZkOZuRJvl0V3OyvG0pifKiSiHychSSNIri9BBykgLJSgwi + Jy2MomxxnvMTyM2IJj7Sl8hAV4L9nPBxs8bNxQxbJyMsHQywcjTETtl2xs4UZ1slCngoEthJIYDtJhFo + NZZ4yxGUWAyn3nI4LY7j6XRRY8BDlxnepiyN8mBDTgybqjNZVZ/LspZiFrWWMre5mNnK3rvFqbSJw9QU + 6EZnkCtTo32YluBPX6IfddEelMZ4iDMcTndNDoNtlTQUpZEVEyj+RjB5MSFUZsapCOB6QVF6FBmxIaTK + +dToQLLlvtmxQSQHuJPk40xmkBd1GbHMkvusndPL5mWDrBfdvHZJP2uWikxf1qfCupUKGTyZjatFb/83 + AaykawalTIkSHooE3rJiKpuXT1UtC7152e+p6MhNS/vYtKyHDQs7WTe/nVWzW1gu8n7RQA1zukuY2pJD + d/1QNHBnQzxdrYkMDGQyZUYWk2dn0j8njc5ZCTRNCae0y4e8JhfS6+zIqLMnq8mRnFYn8tpcyG93VaWZ + jXYkV5kTV2ZEfIUxKbWWZDTakNNiT26rA9ltgvYh5CrXtrhR2OhNTVsYrR2xtLckUFUSRrH4nCXpkTRX + 5DJnao/KNlC2h3jw8HXOXbjI7HnzxSeNxVSJXpc5bGltiZmFufimtkRE+NHXU8X+nQu5eX4jF3YNcmBB + EfunJbN/chTHp8Rwblos5wajOdobwv4OX/aKXDjc4y1lIVydF83NBTFcmxnIhW4nzrZYcLHZhKsqAtiE + 2yIbbjbpcqNOU2wFLRVeVUjfJj0eNhvwsElfRQC/KjL+9RZd3mzV5e12Hd7p0OFDkQMfTzbkwz7Ji9/2 + cb8uHw3o8EG/Bh8MqAuUVIMPpwzh/cnqKrw7VY0Ppmvy8RwtPp2nM0QArzDlu3VWfLvOki9WmfLhEn3e + nq/D63OUlaH0eW2GyJZ+Qy6J/jhTpc3JMh0O52uyPWUMm6KHsyd1HGfK9HlFdMOlBiteabLlTrsjN/o9 + ONDlzIJySxrjtMjwHke0+OPh7gbiv1sS5GEnvrkjkW6OxLvYkOlqSYWHOc0+pvT4i54N02W/6NtL1dY8 + 6PXmozmRfDgrnIe9Xrwi8+FMkT4Xyoy5JeP/1oA/78+IFBkbxr2OUM5XeEj7LFX/lp8SYEizlxElIgey + nB1IcfEi3jVQFQEc7upBiIsTwc5OkjoT6uqsSoNclH2AXfCVvLec83a0x8fe6ncC2JOKuBCqYoPJ8pFv + Ua6JcbYjzMGKIEGwizXh3g5EBbqQlRBEZUEidaUplItNlBLtSaS/HRGCxEhP0mL9iAvzJsjbEQ8nG5xE + ljra2uFs78wQ8TpEADv/TgArsJVjhSy1UUXUemGrInyVVM6pUi9snNxFzinEr5K6Sl0X7AT2Ds442Dv9 + H7AX2CrEr7UjdlYOqtTeWuoqsPmdALZ3x+UPEliJ9FX2JFYIYIX8VRHASluH4CztU+CgIn3/G/9FAMs9 + FdjI/W3lmiHIu9nKe/xf8Af5ay/PUkhf5f4ukqrgKHl5Xzd5bwUujq44O/1BAMu7ODlgY2+DhZW5fOcm + mFsZY2ppgJGxJvqGk9A1HI+OwTg0DcaiYThE/g4RwGNU0DNVCODxGFhMxNBSDRNr9SHYaAk0MVNFACsE + 8BhMjZ7DwnAYLmbDiJc535JmxgKxOze0+nJ4ejzbeyOZU+EpstuK1DhDktPticv0xDdS2ulljrWzsbTX + EG8vS4L9bQnwtcbV2VDGSAsHZ23cvPTw8NXC3U9TMAmfIA2CIvWIVMjkNAty8kVfljlTVeNGc7MXbW3e + tIhcahW52tzqSL3I0co6C8qrTSkRe6ikwpQisXkKSszJLjAnI8uM1GTRy8pSrtGGAn2Zp/riAxiTmW5C + WrY5mYVWZJdaU1BoSX6BmaRGFOcbUpWlR5PYzt2xmkwL12ReiAZLAzRY6TuJjd6TOBQg9kuMHffinLkZ + YsN5Zx1OWk/kiNkYDhi9wBHjF1T7+F5wGMM1j4m8GWHAh4mmvJ9swlsxerwRqc3DcG1u+I3novOLvGT/ + ApftRnDVZiS3bMfwmt14Xrcey+umI3nbeAQfydh9bDKOd/XH8ab+eN4wEtvXUJ2bemqc1RnLTu2RrFIf + xpLxw1ij9TzHnHS57G/J3XAH7oc68IqryBjr8VyxG8c9kV3vB+vxSYwRnyaZ8FGqMe9lih8nfsID8SPu + 5ptxM9eYV7L1eSldmwtpmlzKEvmeb8LdUkseVNqIHSyosZLUjAdiZ70hMv7tRl3xc3T4VPzIbyvN+XuR + QgCb8nd5xidh+jz0VOeS41gOWo9ivd1YlnhrMT3ckMnpNizpimLdvDz2bGnj+KFZ7Noxg5Wi7xfM72XW + 7F56+lqZrqzwtHYxu3avF197FQuX9NHank9JSTQZGaHExgUSGOIlc8odBw8XrEUemtk7YGRtjbmDA96B + IsPq6li3cROHT5xmx579zJq7UEUCd/dPoWfyVAanz2TZitXs3X+I7eLP9/b2ERMdS6BvIKFBYsMkiAys + qmDe7Gl0t7eQnZ5MiL9C+Hr9HgHsr4oC9vMKIsAnlMiQWEoLK1ixfA3377/Gf/7zi4oA/uzjz7h88RXW + r9/IlCmDdHX10NPdS6egQ8n3TmbRkmXsP3SMly9d59jxsyxZukbet1tFELe0tMg1HdK+LgYHJ7Nh3QoO + H9jJxXOHuX3tFK/fP8dn713lH9/c5fuvb/Dea0e4fmEtJw/M4tS+6bx0dBZXT8/k9N4Wds5JYkeLD0cF + p7t8Odcner/fXeDChSnunJF0q/j36yq0WFutx9o6Q9bUm7G8zoyF1WbMq7VmtvgS0+ud6a90orPYgfpU + 5bdkS9qz7ejKc6Ajz1ZF/hbHaJEdMoH8MC3qUmxozXSnIdmFmnhHmpLdac3ypS3Xn9YcsTMzFQLYldx4 + B+KCjQlWooB9NIkQeRHmPV5FAMd4jCDZZywFEdrUJVtSJffMiTQmzl+HAOdxKgLY0Xq06IJR2EpqLd+U + AkurkYJRqtTKSs7L9+bsrI6Xhw6+IpdCg0yJjbQjKdZF5Ic7+dnBNDdkMmOwjkULupkzs53pU5qZPb2L + 5cvmsnn7RnYf2MuOvXvYsHkrW7fv5cDBUxw8fJrNW/cxbeYiysobiYpNw/93AlchgUNChvb5VYhd/4Co + P/G/Sd//jT/q+PlHShojcjMO38CEIagI4FiCgqIIDQwjIiCYmAB/EgO9yQz1pCjKm/IYdypFdlXHmFMT + Y0x1tAGVgrIoQypirWjJ8GRqeQxzatOYUZRAa6QHFe5mVLlZUudpR6OfG22hgXRGRdGTkEJXWg6N2QVU + 55ZRkVtNaX4txUW1FBTXkldSS25pDfnF1RQUKYSqQqzWUPQ7SqROoZQXFFaRn189hIIqcvLKyc4uJS29 + gISkTIJCInDz8Bb71gYNbX3GTVBHS0/8IBs7fLy8SY2PoTAjnrrCRNorkocI4IYo5rRFsbArmsV9sczv + S2B2VxIDLSniKyZTrdgyJRnSpnyKiiopKqyjUFBU0EhxYZO0q0na3UBeUR050v68ogryi0ooLC6mVFBV + XEhNUT7VxXlUFeZSW5JPY3UJzbXlNFcWU1deQH1FHjWlOVQUZcnzsqmvyhfftIjO2qF9c3trSumrLaVH + UoUEHqirkbZXS5myL20lg/9FAM/ubJH2t0he5l1nsyoyeHpLA9Oa68RvqWWwtVZFAE8RDDRW0yv36Kwo + orUsn9byIjqq5JlVxSoCuKs8j56ybPrLxLcpTWd+XR7r++rZMtjKqt56+sozaC9Jp6M8h/bKPFor82mW + tjfLtY3l+dQX51BbmElNQQY1+elU56XK+KdQk5s2hGw5zlKQRm12Og152TTmDy393JQv1+fnUafa51fZ + Bzhbrs+mMjeTqtwsynMzVORvRV4WVcreu9LWtqoC2quk36qkn6SPp0j/zqjKY3ZNOnPrkljcnMDyjmRW + 96ewYiCNRb2p0j8pTGlIl75No6MiRZAuc0PJp9NdnSPlCglcQLfcu6dC6ZNCOkoLaP2dAG7MS6NBRf6m + UZ8l7cgaIoBrM4YI4OqMNOrSpI6kLfKObVKvKT2R2tQYapRlsJMjVUtgd1eWMq2lkaVTB9izejln9+3k + 8ukDXBFZfe3lE9y4dIZXb1zh7Tu3eff+XT58cJ/PHt7n09fu8cWr9/j03i0+vX2Zz26/LHiJz26e55Mb + 5/n4+nk+uHGOd2+e5c0rJ3n17BFuig64tGUdJ1Ys4tCKBexaPZ+d6xZyePsqzuzbwLUjW7i7fz2Xlkzj + cEsJW3Ii2Jnkw4l4D86JvDsZasLRQB2OB2txLkaX65mW3Cly5F6FN7eqArlWGym+kfiKLUmcbM/gRGcu + x7vyREeUcLavkP11cazOcGVRvCUrUm1YmWrL4jhLFsfYsCDGnjmRDswIt6Pb34xGL32KHMeRYTucFPsX + SXUaQarzSFJdR5HpNY48sQmLgjSpiNCnNtaYungTGhPMaBY535ZmTWeGLd3Z1nTlmjOl3Jo5TW4s6Ahg + YWcUMxrj6SyPkzkZQ0FGNGmpUcQnRhIRE0JwVADBkcGExUcSm55AQnYyyTLWKfmCgtQ/kV9dQN/sftbt + XM+w0vIEEQgx5OSGk54ZTGS0mwhja9w9xMi118XaSgMbK3VsLNWxMlfD1HCsYDQ25qJY7DTw89QXI8KI + YB+BtyGB8vL+njoEeigEsKaKAP5fUKJ//5sAdhd4qKuWgVYI4DDPsUT5jlPt5ZscNp6UsAmkR4wnO1qU + a4IaJamTKE4eT17cWDIiR5Ic8iJJISMEo0gIHEm8ryhOv5Gkh4yjOE6TlhwL2nPMRfgb05xqSHuaEe0p + hrQoe6HEaNIcqyN5XRUaoyZRGzyOhqDxdERpMDlelxlyzfxME5blWbAy34rlYkwuTNVjTpw6M6PHM1va + tShBXSaFLmuyDNko5zek67M2UZPVceNYGf0Cy8LFeI0Zxt6cYVxt/6s48Gr8sM+IR2fMfieAbXh2XdkH + 2JJnFxQCWI9f9muoCODv1unw8SJx9qdrcrNbk5dbtDhYNJ41sc+xPPw51kePYXPMBLbHqLE9Wp3dYtjv + iNNga6IG6xMnsCJ6FIvD/ipteI41kc+zK3YUJ1PUuJlnwOuFYsCWmPFlkTFf5xvwTbY2XyVP4pPI0XwQ + MII3PJ/jjvP/JoA/jBjFt2mT+Fe+Br9W6vK4QZ9HzboCHX5r1ubnJg3+VTeB76pG8UXlX/mqYTjf9Y7l + P3N1YK0JbDGFzYY83qwnkOs2SLpO7rFGn1/W6vHrJmOe7LHi6SFbnpy047dzdvz6kgOPFBL4khO/XHXn + l7ve/Px6EL++G85vn8Tz26eJPP0kiWcfJcMHKfB+KryXBu9kwGvpcCuZJxci+HmfD/9YZcdX0/T5pGUC + H9aN5rPG8XzVosZ3XTr8vd+Qb3oN+ETZz6t8FLez/8L1rBe5VaTGKyVanCrQYF+OOpsyJ7FU+nC2OBA9 + KVpURI4lLeA54nyGqZDm/zylMnebEsTRSjOmM8WIpngtaiPVqI2YQFuSNlPF6VhYY8eyJieWiKE5t9SU + aTIGXcka1IaNotRP7uH1F2r8/kpH8HBmKQRwthaHinQ5ka/JmTw1zuWO5ULWCNXyz9cLFAJ4LPeb1Hlv + uilfrXfln0eDeHw7kSfSF79+nsZv36bx+NskHn8ZzeOPQvntPX8evesj54dI4Cfv+/0PAfymF48fuPHo + poP0uzW/nDbn58Nm/LrfjN92WfDbNnMeb7Li0WoLfllkxo8z9KXvtHi7fiyvNU3kgxnmfLfBmx8OhvHL + uSi4qSxDLePxaS58kwP/zIefS+BJJc+eVvL4mZJWq0jhZ19k8uReCD+dduIfu035frsBPxyz5tENL568 + GQKfxMJXKTLeCfz2mrzLtXCenpDnbPXjh+We/GORN1/OVaKAvfhmqT9/3xDKvw/E8NOFJH66lcJ/3sjg + 0af5PPmmnKff1/Ds3y08+6GLJz8M8uQ/8+Dxani2nWfP9kqbDg9F/6oI4PM8enqFR09u8OjxHZ48ucKT + p8d5/GQrv/y2iF9/7efpo2qe/izt/5e06VsveRcn+MiGx2+Z8OieCY+vW8pcduI/x9z4114vvljrxv2Z + Vlzo1Odwg3zbTYbsazZld5M52xqt2NJgyyZxQhQCeHW9KKBaN+ZUuTO/MYDFndGsmJrNjqWNHFjXx751 + U9m9aoDdK4cigfesmiVlc9m7bg47Vg9FEm1ZMyjO6Fx2bZ3LxrXTWa/sMbh+viridP/uzRw6sEccrv0c + PHiQA4cOsf/gYfYdOMSu/fvYtmsnW7ZuESdgO7vFIdivWgr6EDv37WXLju3iIGxiy5Yt7Nq1i3375bw4 + DocO7OPwwf2CvRzev5sjKuJ3L6ePHOLciaOcPXaM4wcOcHjPbnn+dvbu2sw+wV5RTvu3reTQpoWc3DCb + 06v6OLuogQuzCnl5MJVLvVFc6/Lj1V4X3uq15/1uWz7ttuPbXme+63FS4bNOO95ts+StTmve7nXgTal3 + v01Z2tmYO9LHd5pNuN0oecG9OlPu1ZjyoMqc1ypMeKvMiLfL9HlHnP6HdXrcbzHl7Rk+fLoqnTdWZLKv + 05/ORGMSnTXwMVPDz86AnMQwBrubmT9zqurf1H5ebujramCgp4mDvQWxMaEMTu1h7pxBcSSy8fN1w8rM + QJw4E9Gh4hBmJjJ7Ri+7dqxl6+YVzJjaTbsYwXPlfhvXLKentZ54UfJBfg6EBtgTF+5KTKgLUSGO5KWH + MLmjjJWL+pg5UEt/ZwkbZcwvn9vBSyc2q/aTXDK9gY3i5K2d3kx3QSyDxdFs7c7nzOwKzkxNZ2e5C5tT + ddifqcuZQiOuikx6WGPBB832fNBgxRsVeioC+KGKAB7PO3VqvNegyZt16tyrVuNa+UQul03iUoU2F8v1 + BIacKzbmRLEJu7L0WSr6sl90dXfkODpi1GmInkRZ6FjKQsZSG6NBT7b57wSwM9OLbEVGWjKgEMCFpvRl + 61EXM5qK8BHUi77rStejP8toiABO06FP0C9tH8zUZ06BKbMF07INmZahz6wsA+Zk6bEgU4flOTpsKNRn + Z6kxe6V9B0r+iwCu1+dVZX/cbnPebjPgrToN3q0WfViryZdNunzXMkQAf1avxYfyvu9Vqqkiod8un8DD + UpG9RSO5X/ACr5WM4sPaiXKNFl82avB1o7oKX0l/fVkzji9qxvONlH8n+vLrRqkjffiFpMq+wp/KvT+o + ncSD4tFczR7NBdE1pzJ0OJahxyF5h/25huyU99iYpsaalHEsTxrNtmJtjjRZcaLVlmOSnmp34GKfO1en + +KgigF9ud+RUjRjAxRqiO8bwUslYbtWLjmvX5d1OXd5oUpO5P4r7NSN5S3Shsifwl9PMea9Xjzc6dVRL + QN9p1+N8jRp780awPvl55kYOo8t3GA1uw2j0HkZ32AtMjhlJZ+hfqfMYRr2gO/h55idPZHHKJJYkTWRp + 4jiWJY1jdfok1meqsyVPh8O1VhxrsOGwsg9wtSkHK43Yr4r+1WV3oRbbs9XZnqUQwPL+RfIOMiePlpmx + V3Tlern3SrnfKuVPboV6rC81YX2VJevrbNna4sLOTi8O9gVwYnIQp/r8ONvrzflOV842W3GxyZTLDYZc + 4Qjy9AAA//RJREFUa9Ljnoz1a12mvC6432rILbFnbrXqcaNVX2DAVTl/tcOQS1L2cquuigA+J+nJ5kkc + rR+vIoIv9ehzrd+IK9KflxrV/iSA7/cZ8epkE+4NGHN/ipnkTbnbbcS1dgMutxlxqduGYyKTNlXpsqhk + gsz5kfQUvkB70fO0lP2V5ooXxTkdSXP1GHFUx0tek3YZy55GOwZFBs3pi2Nqe4Kcj6YkP4LU5GBiooPw + 8/fG0cUFK1sbzCwsMDY2/pP81dDQYNyE8YwdP54x4xUCeDjqAitdZYllQ+Kdrch0syLD0ZRsQa6TKfku + FuQ7W1Dgak6BmwWF7pbkSj7H3Zw8X3vKo72pSQtRkadl6aEUJAeQEe9Hepw/2SnBlOQmUFmYTH5GLAlh + PoT7OhHkaY+nkznODsZY2uljYqODmZ0uVvYGOFobqWBva4SdyFblx3UXO/EbbMeRZDuKcuvhtNpKX7mM + Z4qnOnN89VkcaM6GBG+258WwsTyJJaWJzBOneH5dPgvFKVzcVibyJZv+tCh6I32YEunF1Ah3ukV+tkW6 + UBvlSkmkqzjAIfTWZDO9o1pF9iqrOyQEuJMa6i2+R6Q4X0ni1Cei7A8cH+pFnCApwldFAOcnhJAh9dL8 + 3cgL9aW9MI2FPfWsVwjgpVNV0b9rlkxm9dJ+Vi/vU2HtismsUwjgVZPZLPp7y+opf0JZEvoPAli1V/Cq + GWxbIXnBluWi038ngjcvG2DTsj42Le1l46Ju1i/oYvWcDlbMbGXRlBrm9JYzpSOPvqZ0OhuTaG2Io701 + gd7+FKbMymLWogKmL8mle2YC1V1BFDW5k13rSG6dkypyt6DVncI2D4raPSTvRnaDIykVVsSJbI8vMSW1 + ypqsegcVcZzf4kbufyG/yYPCRh+K6wOobY6mtS1J9FoKtaUxVOVGU54ZQ31xpuivRjavW82Fs+c4f+4l + NmzaQnVtLS7ubujo6mJpbYWbhxsubk64ONvh6+1IWVEia5d0c+3UWq4fnsv5NbWcl3c5MzOZkwPRnOyP + 4HhvCAfEgd7V7Mn2Rhf2yTucFJnw8qxIrswRx3+qH6fb7DjRYMK5RvmGW0250aYQwEbcaNTlWp0Wtxu0 + udWgwz05frVJnwctQwTwfSl/tVH8Mzl+o02ft0WmqghgkZlDBPDvUcD9OnwwoMsHk0W+/07+Knj/Dyjk + r+CdAdErg+p8OEuLj8VnUgjgr1aY8u06axW+EHv7k+XGvLNIZPM8PV6fbchrM4243W/ApRbR2zXanBK/ + 7GixJnsyx7EnbSxHcidyvlLkU5MFtzrFBupx5s3J7nKdyMRBL9aKLFF0aVHIJOLlW4ryMiTUy5JQD3vC + 3OyJcrYhwdGMTAdDyl30aREff0qg6PNIHU6I73i72Uba7M1XC8L5dHYQb092467I2KvVRtysN+fNHhc+ + nu7HZ7PC+HAglLd6grla486BDPGpI/WYHWwkusSEKpElOS62pDi7Ee/iT5QSAezhSZiMuRL5G+7hKu1R + IoGHCOAAF2d8Je/r4oSvsz3+TrZEejiQHeZNeWwQZZH+ZHm7kuruRKIg2tWOMBdrwtytiRCZFRfiSlF6 + OE1labTXKltiJIgN5yvfu5PIKCcyErzITvQnKVrkVYA8x90eDyc73J2c8FT2Anb2FHjj5uSLh4sfrs6+ + cvw/e+s6uEgqsHf9A15/ws7FE3sXdxydh2Dv5IqDwNHRReD8f0CJklWWgnZ2cMXJbihVEb4qeODqJG1x + 9JS2eangKc91l3YpcHP0UbVRaavH71DOewhcXbxx/n8DJ2cvFRzlfn+8kwpOfv8HnAUuAlcV5NnSH8r9 + vVx8BT54uskz3b3wcfdWwdPdU+CBh7s77u6uuLnLO8l3be9kj429JVZ2JphZ6WNgpI6u/gS09McKRqOh + P+Z3AngImsbj0BLomoxH12wCeuYTMTBXw9BCXQUjSy2BBsaWkzC3UpaAHouZ4fNYGgzDzfwvpPpOoCPD + jIXlDmwUmXdsegz7JkexpM6Htlw7MuIMSUm3J14hgCMcsXU3U/1RycZeT9pvQrC/jdjuVjL2ejI+miKb + tPH01sbbXwPfQHX8gjQIjtAkKt6AhGQT0rNEjxbZUV7pTE2dO03NXrS2etEiMqml3Y02gUICN7TaUyM2 + d0WNOWXik5SUmVJSbkWxQuoW2VCQa0VOuilZ8Uakx+iREqlFaowOqYm60l5DMvJMySkUPa1AbOGCQsM/ + CeDmND1647WYEaXJgjBNVgRpsiZAg61+mhyVb1EhgG9HO3At0IIzDhoctxzNYZPh7DP4i2of3+MWf+WC + w2iue6nxbpwpn6VZ82GKGe8lGPFuvCHvSJ89CNXkmofYsI7DuSl179qO5TX7CbznMIkPbEXGmY/jQ6Mx + fGY8ViDl+uN4W288bxlq8MBAg5u6apzTHssuzeGsUhvGionD2KT7AidcdHnF35I7ofbcDLDmFQ8DLjqo + ccVxIndFdr0RqM27IlPeTzDkvRSx4dONeCiy7W6OsSrS93q+MZdy9Tmbqc2ZdE0uZMn9pOxmqSV3K63F + DrYRWHG31kx8QrHd6nXF/9PiTZGr71fp8Xm5KV8XmvFtpqQKyRwmtqO3vKuLGqed1djjqc2mUGNWJFox + P9+J5R1hbJyXzf5NzZw8NIOTR5dw6OAK9u5dzY5dq9m8ZRXbxd87fHgbJ0/uEp95rYog7ukpoKoqlvy8 + cNLSQomK9iMwRL5df0+cfTxkHrph6eyErasL/qEhKgJ4zYaNnH3pkgq79h1k2aq1qmjgVes2sH7jZvbs + O8CRYydUEcBTpk4lISGBQL9AQoNDZN4oBHAls6dPobO1iez0FPExA0TH+gj88PEOEATi7xtMgE8IESHR + FOQVs2zpKu7efZUffviJx4+e8OXnX3Hj2k127tjNgvkLmS9YuHAx8wVzJT9txkxWrFrN4aMnufTKDU6f + eZkNG3cwc/Z8Jk8ZZNq0acyYMY2Zs6Yxd+5MFQF8aP82Lp0/xL0bp3jj/lk+e+8y3399i79/eY13Hhzi + yrlVHN87XTCVl47P5JWzMzi2u4ENM2LZ2OjB7gZ3DortcrzbkxPiF53sc+XUZFdO9DqxS/T9ljpDNtYb + SV1jNjRZsrrRgiW1JiystWR+oy1zG52YWuNAX7k9PUWOqv3C+0pcJe9EXboxRdEapAWNJtF3BDlhWtSm + 2dGU6UZ1khMl0daii+yoTnalPsODhmxvsS+HIoDzEhxICjcjyFudAM+JhHpPIsRztOi3F4nxeJFUn9GU + y7fdnGFDQ4Y9RXEWpIYYEOw2EQ/b0WIfj8LafARWFiOwsBilgrn58D+hHNtYjcVBvjkPV2283PVk/EyI + DHcgJdFbxjiI6opU+nurZJy6WLSgj5nT25k22MGihdPYvHk1u/ftYO+hA2zbtUvGbb2KrN+8ZTcHDp5Q + 7Se9es0Wevumk5VVRJCyhHNABIGBUQQHKwSwQuwqZG7En1COA1WI+h1/HP9PPT9/QUAUPoEx+ATEqeCn + WhI6hpCgSMID5XsICCI+wI+UYC9yI7wojfWmMt6daqWv/yCAY/SpiDagNMqQ6gQ7ugqCmFWbyty6THoz + I6nyc6DMxYxq8XXqPB1o9ndXEcAdKgI4lc60PBqzi8VGraI8r1bkZz2FxfXkldSTW/o7iutEntepyhUU + /I6ikgZVeV5hHbkFtSoo+bzCanLyqkQPlJCYmkdIZDxefsGi71zQM7JEQ8cQIzNLsRvcCAoIJC0hltLs + JJpKpT1VKfTXxjG9IZJ5bREs7o5kaX8cSwaSmN+XymCH2Pb16dSWpVNanEGRaonnatEBDSrSt7CgWfIt + UtZCnhznFjWSXVQjaaUcl0r7S+S6EqqKC6gpKaBaIUNL82ioKKClrpzW+goaq4qpLZfzFXlUl+ZQWZJN + TVkuDTUFtNUW0llTTEdVEd1Sr6dawRAB3K/sRVtbOXRcK75IU81/EcAKmiXfyExl39/Weqa11Kn2DFYI + YAUDLUpeKZN8fZXqPu0VRXRUFtOlRLnKs7qV51bm01ORS39ZNlPLs1jcXMLGgSa2TGtjRW+NigDuKE2n + qzKHzuoCOmuLpc9K6WqokLRcFU3cKvdpqxQoUcbleeKH59Ki7H1cImlRLk2FOQIpL8qnVfpKQVup1C0u + oqmokMbCAhqLpN8Kc6mTusqy2bWFQ6SvgmplKe3iLJqkDe3V+fLMQrqqSuiXPhuU586symVuTar4rfEs + aYphRXs8a/sSWC3jvLQviTkdKUxrypC5IO9Snqwif9vKU1VpZ6USCZxNd3UenTJGXTJWnWXyjBJpq7Rd + RQDn/kEAp1OfpUDaoxDAShRwRjrVIvtr01KoT0+mKV18xfREmlJjaUgTPy09WurE0irjPijjsXLGINuX + L+Xkrq1cPXmIuy8f5/alo4Jj3L18kofXLvLWTZHTd27wwb07fPzgHp88FLx6n49fvcsn929J2fUhvHqN + j+8LJP1A8N7Da7z76lXevP4yr547yc0j+3lp5xbO7NzEsT2bObJ/C8cPbufskZ28cmwnNw9s4aVlsznQ + Vc2WshR25kVxTHz500leHIlz5FDM0J69Z9LtuFLszt26QN7sTuL1/mzuDRRwY2oxl6ZXcG5GLadnNgga + uTC/lZfmNnGkJ5+NZeEsyXJlea47K/I8WJjqxMwYW6ZE2NIn9kh3qB0NfhaUik2Sbj+RKMvhhFg8T6j1 + C0TYjyTGZTwpPlpkBRmQFy72XIwV5Qm2VIhsqkpyoCbVWfrXlUZ5RlOeC815jrSVONBd48bk5mCmtcXQ + Xy/jUZEscyiZ4pxEMjMTSU6JJTY+nPDYECJjw4lJjiElO4XU/HRSC4aQpqwK9zsKZd5Pnt3PeoUALiyO + IS8/gszsYFLT/ImMchPBbasigO3stDG3mIiF2fghmE/A2HC0igC2thgvDoimai/gQB9jggVBXkYEesqx + l97/RwI40F1SV1F6gmCpE+Kp7IOgEMCiBD3HE+k3ntjgcSSGTiAlbCIZUcryz1qUZehQnqXsBzyJgiSF + FB5DatgIkn8ngBMDRxDv8yIp/iPICh1HabwmHbmWdOVa0J5pTEuaoQh1IzoVAjheh6ZYLZrjdGiL01VB + CcduiZhEa/gkuqI16Y/TZlqSPnPkuv8XYX8Zlkeyhu3CGVkzk5kYwd0JkIQoFggQPAR3d3d3J8Td3d3d + 3d09mYy7rXGJnN/dD5lZa+13v/v7cR7V9nRXd1ffwkVVTY8zkxdvySwJJhUBeHygJp3+aowb3YdpwVrM + lqB6frQRi6INWRCux5wxGswe3VOS5DeYNqqbJLrdWBfdjZNlr/N4ah++X2/I7/vMeHnaGs7bdPHfAvAW + DX5eo8VXC3R4MlmHGy0SZFZpcrRYi41JvZjj/5qc9zXmeL/LfO8+LBQWjOrDPLdezHZ7j+lu3Zns9hYT + 3V5nssdrcv23WBX0Ljvl2Z2I0+dGqhnvp1vwdVY/fsgw59/JxvwYr8/3Udp8HtCTp25vc9fxPwLwuUHd + uOzQjce+3fkisi/fJ2nyW7Yufxbo80eR7iu0+a1Ym3/nq/NNdg8+y3yLzwu681VVT37q1ObFXFNYbMrL + JYb8tUSPP5fq8cdi+d0iud+F+vwi5W8rTPhzYz+ebbflxb4BPD9i1yX+HhnIb0f687OUP58ewi8Xnfj1 + +kh+veMpePPHbV+e3fTlxXV/Xl7zh6sBQjBcEE6M4dluD35eNZTvZvbj8xY9Pq7ow0clPfmkpA9fVGjw + Ta0u3zUZ843wabUu97N7ciX+DS7Evs3lNA3OZehyIFmLzXHqrI7TYl6UJhPCNakOUuaPlmBthPLfxN0I + du1GjMeb5PpLYhmmR720nZowfcrGaFIs7aUsQIO6SH3ak0yZnG3F9HxrpuWYMynDmHEpRrRLclIR0Jsc + 97fIdnmDfKHa4y2VALwkRpOtKXrsTtLiQKI6hxJ6cySuO8fi3+FccpcAfKNMg6cTrPh6hT2/7Pfi5fVQ + VY/aPz+N4K+vw4Vg/vrcn2dKD+DHrirh98XD/1MAfn7Pgec3h/L80iCenbLlj4OW/LHTgj+3WPLneqt/ + BOA/F1jy61RTvm/R4aPy3tzI/BeXc7tzp8mAT+YN4ccto/jjkC8vL8p7uB8JH0fDVzFIY4M/Unj5MpPn + ZPInWVLmwF/Z8HU8L+/48vtxB37easOPGy35/cAgXl6Ruj307ZrD+FO5l0eB/C7v+o+Tvvy105Nflrnw + 4yxHfpjqxOcTHPhkvCNfTBvBl/NH8t16L37eP5qfzwTz89UQfn8Uw7NPU3j+dQYvfihQDQX97MdGnv3S + yYs/ZwMrecl6qZ8y9+9uqds+nr08zLMXJ3j2/Bx/Pb/Ii5enZf8+YR1/PZsjCVA7L1+U8PLPBF7+PJqX + 37rC5/ZSX6n7Y2te3hIuD+DZiSH8tGMY36xx4IO5w7jYZs3+cn025WmyocCAdYUmrCk0Y0WhJcsKrSU5 + 6a8SgBcUDWNmgb1quLJJBSOYVunLnJYo1s4qZtfyFnYuH8u2JcLicWxdPEGWp6gE1M2LJ7JqbiuLZzao + hpxcu2w8a5ePZ/H8dhYqf1iW4zasXcCOLWvYvXMzu5V5fHfuZPuunap5gHft2cfOvXvYsWe3ao7f7Tt3 + sHf/Pg4cPsQ+Qdm3ecc2lSi8fv16Nm/ezNZtmyVJ2MTOHVvYu1uO372dvbu2ske275Nth/bs4Oi+PRyR + 3x6Qc+7Zsokdm9azZ/tG9u/azKG94uz3rOPYtmWc2DCHo3Jvh2aWcXh8KkfbIzjW4Mfp2hFcqR3CnZr+ + 3K+24anwRb0dX73i0zo7PmgYyAdtw/honDNPO524WTeAi6XmXCg141KZOZdkWeFqkSXXlP/6/i8B+F6m + Pg8LjVRzB18rM+VOmwNPZoVyc1Ykm2tGUh9mQfhQLUaY9cGxnzaRkqS315YwubOFwpyM/wjABooAbE7A + aA9aW2qZML6F1JRoXF2GYWNphJ2tuSTb9iTFhakEYGU47nWrFzFlQit1VaVMmzSOVUsX0lxTRqicw8t1 + ED5udgT5DCPQawgBXoNIl2BnfFMBS2e3MqVDguj6LNYuGcfV05u5cGQdW+SdzxlbyLKJFSxsLaQuzofO + ZB82SGBzamI2p9ui2JE1jLWhitiox7FEAy6kmXA724LHhTY8yrfkltjA68l9ugTg7D7ybNR5IPb+TpEG + V3LVOZ3Rl2NpfTmcoc3BNLGXqfrsTTZiR7IJq+ScU/x60ejxDrU+vamUpLnIX4Ns8VsZHj3I9VOnWpJp + lQCcNYT2VFuaEyxpVIaATrWgOcmY0hA1cn3epWh0b2oilR7AhjRGG1AfqdNFuDZNEbqMSzRlfIoFHcr8 + weKTO2OMmCDHTYrWkwBOhwWJel1z5aYbsDlVj12Kbc/R42SRITdrLblfJ1QYcTdfUzW085NcDT4u1OHz + EgO+ED6U5Sc56jzMUuNeVl/upvfmWsp7XEl6W57PW9xOf++VAKzFp/KMPi1U6yK/D5/k9uKT/C4B+MvS + rv0f5/Xlw/y+fFSoyUcFWryfp8HN1J6cjnmXI9F9OBCjzf4EA/almLA/y4L9uf3YLm10dYLEHSHvsCpF + m91l1hysGsi+clsOVttxonE4Z1qdONUwjKNl/dmTY8z2ZHVVD+Cj8v4UAfhORVdvtZviA68VvsfN4p48 + qNZWib+fd/TjcYMhtyq1uVahxWmp5z7xL6siXmfu6G6M9+xGjXM3Su27USG+r9HnX3QEvkfb6HeoGSn7 + xA+2+73DnGhtFsTpskDuYUG0OvPCJFaJUlf5slVJemzNNmd7rgVbcs3Ykm3ElkzDfwTgdeLnVslvVkVr + sjFBj22pxuzOsGR3piUbJIZZFNSLWQHvMUtiwXmxWsxPNmRhphkL8/qxvHggq8qHsKnage21juyqGsZ+ + 4UjlYA6XWHG82JQTYmvPFOpxuUSf65XG3KoykdKEK/Lur8j6RaUHoKyfrTDmjKyfKjdQTcFxpEyPQ1Lu + KdFgW34vdhSpcbhGnxO1hhwr0+ZIgRqnZN/5KkUANuFGk5lK+L3ebM71RkUANuJspQEn5fwnaizZV2nB + WrEz87O1mZDRm6a0d6lKeVuSzrcoznhHEsUeFEs8UpTVW5Z1qSywoK7EjpbKETRXeFGZ70l2khsx4S74 + eg9nhPNg+g+wwczCChMzMwyMTFTCr7a2tkr8VVNT472ePYSeKgG4R8+30Oz9Djb6GniKLYp0GECK80CS + h1mRpoxsMLwfWfbWXThYk+koONmQYm9For0lySP6kz3aifxwd3IiR5Ea5q4SUsJGOxLm50RMiDsZCcHk + p0eREh0ocb2zxPkDJf63Zlh/EwbYGGDWTwdDK02MbXSwtNGjv5WBin7WBljJej9bDQba9sF9oCRRdj3I + koSqalAP2iRnmOyqwxw3YxZ5WrNBcphNyaNZkjJavvlRtER7MzYthCnFScyuzGRKbhxtUX60+I9grL8T + 7WJDK1z6kTfCkkzJe1K87MiNcKexIJ7xdYUqAdhXnoX7EGv85bkmBnmpBOAsSb7iQrzwdx+Kv8cwuU8X + ksN8yIj0I2n0SOK9nMkM8KA5O5HZzWUsndTIilltLJrezIIZzSoBeN7sLhbOblaJwEvnNrNsXgvLF7S9 + omtOYBV/C8BzO1WsnDP2lQjc9koEbhaaWC7nU4nA0+tZNKWe+ZNqmdVZxrT2QsY1ZdJWk0RdeSSlhWMo + zvejoiKQ5tYoJk1LY/q8LMZOjqVMfGtmqROJeYNJkZgjtcSe1DIn0sqdSatwJqXUkfiCYURkDiAo2Yrg + lH5EZg0kLn8oSUUOJJfIb1U4q0gudiW10IP0Am+KioOpKI2kqjiKorRg8hICSY/0JzVS6pOdwtTxY8X3 + rWHVyjWqHkSBIcGYW5mjp6fLkKGD8fH1wtvLHSfHIQwdbEVE0EgmNGVxZNMUzm8dz4klJZycnc6xSVHs + bfJlR40HWytdWSv1WSH3syR3AKuLBrO1xpkDLZ4caR/FgXoH+Yat2JpjwN58Q06Wm3K23IQL5UYqAfiM + 2PsLhbpcKNLjSokeV0sNuF5mqBKCr0rec02OuSXH3q004l61AQ/EFjxpNOZpk5GUBmJHdXnSpMfjZl1B + W9D6h0dNGv/woFGd+01qPGxV50mnjsTxkqdMNeaz2eZ8tdBGxWcL+vHRXHMeTTfk7mRD7kw05vZ4Zfh5 + sSVizw9JfQ7kS46Qpc3WxL7sTOrL/gxNsXViyyokxpF46G7rMB6PdeLRZA9OjXdjddUQxiaZkeWjSZiT + BmOcjfF1ssJ7eH98htjgP9CcQPlGo6w1yRgo+fFwDTpGajM/QIdjEi/drRvIZxNc+X6GD59PHMlTibfu + 1/bnhlzvbrUtH7fZ8+WEkXw53pPPOrz4sMWLq8UO7I7vx+IAQ6Z6m9A00owCJwuS5JrRw4cT5uBBkLMn + QSNHEujmQrC7q+CimvMvaKQLga4jCBg5Aj9ZVzHSkdGu9oSNciQtcBR5od5k+o8kyc2eeNke7+5EpLsj + IW7DCB41jHBfB2KDXMhPCqCuMJaW8gRqCyLIifMkKdiRhBBHMuI8yIz3Uf1zXehouYaHA6Nc7AWxX66u + eLh6CJ54uHhL/OaDu6u3CldXLxXOss95hCcOLqMED8ENhxFd2DuPxH6EC47OXTg4jVDh6OgsOAmOr1CW + nXByUhiBi5MrIxxdVaWLIsg4djHSyZ2Rju64OXmo8JBruo/w6sLZS+rpg8dIL6l3F15S31Fuyh/rvRj5 + f8F1pKeKEcr9jJT7+hulh9b/g5GvcHdR8JZz+wnequt4ybk8PTxV+Hh4qfD08BDcGTXKQ3DDw8MVdw8X + XN3lGbgMZYiDLbZ2ZhiaaKBr0Attgx5o6Xf/jwBs0luFMh+wMiy0rkkfdE37oGemhr4KdRUG5pqCBkZm + fTGzVMPKohcWhm/Sz6Ab9pavE+OmQW20BdPSbVicN4AdTaPYVDeKOYVO1CUNIHaMIeERtgRHO+DqPRCb + wcZYiI/q10+LYYP05L3b4OZiydAhutjZaTDMXgunEZpyH5q4e2oxylsbn9E6BIUZERZtSmyc+Ms0WzJz + 7MgTG1pYMpziUqFsqDCEsoqhqp7A5ZVDZPsA8ousycmzIjNL/FO2+N0s+W3GALJSB5CRaE1qlDnxwYZE + +WsTMVqT8EAtIiL0iY03JjHRnFQhPcGElCQjKQ3JVQnAujQE6dIp9Zrmq8M8Tx2WjNJlrYcuu71NOTNm + ABf8bDnhYsJu295st3ibLcavs0G/m5Td2GX1Ooft3uW8szpPw6z5Im4gH0b040moGR+EmfNBuAX3/Q24 + 5qLG5SHvcX1QL24PkHxhoMS3djp80l+bjy378rG8r0/k/X1irMZjg9480FfjvqEmNw00uajbl0NaPdmg + 8RYL+3RjoXo31hh1Z/9QA06P7MfFUf05Lc/9hIMhJyQHOzNMg8sjtLjmpsktby3uBepzL0yfmxGGXI4y + 5HyMIWfjjDiTZMIxeQ77Y3XZE6XJ/mgdjsYbcVpyjHMSV17IsRasOC/x6IU8Iy7l6XJF8vLrOdrczdLj + /XQTPhRb+WGUKR8Em/LY24hbI3S45KDDSUd9DnhasCOoP+vjh7Aky4H5laNYNiGKrUuL2b+1g1OHF3L+ + zEbOX9jDmXN7OXNmP6dP7eX0yV2cOrmNPXuWsGxJG63NqRQXScyUE0x6yhiiI30JDJbvVjXUozuOo0Yy + 1NWZ4WIHvUb7k19SzKLlKzh78RLXb9/hwpWr7D98lEPHTrL34FEOHDrCiVNnOHLsBLslp580aRLRUdH4 + eHkz2s+PuKhIygoLmTC2VdUDOCkultHe8h27y/fpLjbOXWyIu3zLo/zwlNLfJ4DkxBSmT5vJhQuX+OGH + H/njjz/55suvuHHtOju272DhokWsXLmS1Yo/X7OWZbI8ffYslq1YyQGp04WL1zh+4jwbN+1k4eLlzFuw + kIUL5zN/wRzmzZ/F3HkzWL5sPts2r+Tk0e1cv7Cfu1cP8PGj43z/+Xm+/fQ0929s4dShOeza0Maujc0c + 2ztO1seybW0Bc1p9mJM/mGXCmhLJBST+39EwnF0NQ9lRb8cO8VGbKixYX2bOylIzlku5vFx8Umk/+f7N + mVlgyYwSG6aV2tFZOJC2PDva8+xpzXWgJdee2nTJu4P1iPbqRYDzm/gMf4NYH13youwoih1OZshAkvyt + SFb+0B8icWXkUApiHciJtictfDAJwQMI8bUQe62O89AejBwuDHkLj8Gv4zfsTcKd3yUv0JCquAGUxQ8i + K9SaGF9TiZ3Vse//Lnb9umNp+ibmgqnpWypMTN54xb9U61bm79HfWo0hdtoMH2KAi8S5AaOHEx/rTVZG + KFUVaYwfV8nUaY2MG1erEn8njG9m8aIZbNm6lh07t7F1x3ZWrFqjmqu5vX0ic+csZpO8s5079rNh/Xam + T59Hfm4po/1DcRP/4CY238PdTxBfoPgY1bYulPX/G38foxKA3XxVQ0E7uwWocHUPEJ+k9P59NfyzxABB + bs7y7J1Iljg+O8iRvOBh5I2xIW+0GXkBRioy/QxI9zMmP3QQzVn+TCtPZFJBHGVBbiQNsSBNfEze0H4U + OdhRJnFCuVeXAFwbHEFVRCKFsRlkJ+SKrc0XG6qIu0XEpxcR9zephSSoRN+i/yElrZjElEIVCcmK+Juv + Wk5WCcb5xMRnEhGdit+YCEZ6+DNwsBNmVnbi76ywth0oPsQVHx8fokLGqOaiLUkPo0ZsQVOeP50lPkyr + 9GZWvQ9zWwOZ2x7OjNZoxtXHUl8aS2FWNGmp0aSkpHT1UFbVqYSklFIpS2VbKQmyHJdaTJzU628BWBku + WpkbOCctXtW7Nz8tWs4lzyo/icqSTCqLs1U9gRUBODcrUYinIDdZcolUqkozqSvLpL4ki7r8rt6/CvV5 + mapev/UFWdTmZaiEzrr8DNVwzu0VigBcxPjq4lfibyFjKwpoL8tTib9tpbn/EYDLlZ7Ahap5ZpWewF3n + S1ddq/6f4aaVHsfJ1Ock0Cj1bsuJY44iBrZXqJhZm0N9ZiTVGZFSj3hq5NiagjRqi6XuJbJPrldflE1t + odyDnL9O6q26B0G5Tk1uCjXKcMpZKUJqF5kKynZ5BhlpVKSnUp6WrBKMy9ITKEmLU1GcHkOhPM+C1ChV + WZwRTUVuLNX58VTnJVIv527OSaEjJ4nxkqNOzg9lWuFoZhX7MK/Sj8UNo1nUIu+6KZipdWGMq4impTBa + 6hBOVWaXAKwSgZUezorInRUrpZw7I7GL1EQqkuMpS4yhJC5SNfyzQmGs0gtY6iTkR0eK7QonLyKUgogQ + CiOCKIsMpDIqiKpYIT6YstgASuKDqM1JZGJ9GatnT2PHyqUc27GRy0d2cfvMPm6e2cnNk9u5dWond84c + 4O65I9w/f5LHlxWh9zIf3brGBzeFW1d5evsaT+5c4snt/0LWHyrcvcyD2xe5c+k0144d4MLeHZxQ5oPf + sYGDuzexf99WYQuHhJPChV0bOblsDrvH1bGxOpvtpUkczI3kSHoQe5O92ZnoKvmQMwez3Dld4se1xgie + Tsvn6Zxy7s2u5Pqcai7Ma+Ck5OFH57YKbZxa1MnpBe3sm1DCKnnmszM9mZvjxbxcb2akjKQtZDA1vv0p + cbemwN2GDIlJ4uyNCZRYZ6TFOwyTuMnB/F+42vbEa4gWISPNifKyId7fjuRAya2Dh6tID3UkM2IEOVGu + 5MVKXpI4QnCS9uJAQaYjpfmekjOPoSIvjCJ5vznyfacnRRIfF0FkVDDBIf6MDvIhINiXkPAxRCVEEJ0S + TUSyIgDLMYnh/5Aibax5XCNLFAE4LsGLqGh3QsKcGRM4HG+fIa8EYGMGDNTC3LIPZmY9sRAsLXpjbtZL + gug+DLDVYKgEwK4Oxrg5m/4jACt4OBvhZq8rDk0Ll2F9VSjDQP+3AOw6RJYFpRewu9IL2EFDNRewIgL7 + juhDgLsaQZ5qRPhpkiDBalacKQXJ5uQnm5AVq0NKeF/ixvQi0uddwjy7EzLqPZUAHDTiXyoBOF6cclaQ + jkr8rRUqoo0ojzCgKtyIqlADlQBcOkaHMkliK4TKMdqqcbhrZLlmtDa1Ekw3jNaiNVCHzlCl95AxM2LM + mBXVJQBPDNKSAFqd8QF9mRqixUwJuudKoDk/Qo85IdrM9O/LDN8eTPd6gynu3Zjt1Y3VEd04Vvwa9yf1 + 4ts1+vy6x5QXp7rm/1XgtOX/CsCrtfhijjYPx2lztV6DUxXqHCrUZG18D2b4dGOCWzemerzDdI9ezBzV + hxluvRk3/C3ah71B67DXaRnWjXanbkwe9TqLx/RgS5Q6hxP1uJBszL10Uz7LtuSnXBt+l/L3NGN+TzLk + 5zg9vglV4wPPd7jt/BoXB3fjrF03zkh50bEbD/y782lUb75N0uTnbB3+KDDgt3xdfs3XkVKbXwp1+Heu + Jt9m9+GLzPf4Iq8HX5b14vsWDf6abszL+XJ/Cw35c6Hc4yI9fluiy2+LdFXi749L9OWeTfhtkxV/7rDh + +b4BvDw2mBfCH4f68/OBfvywz5ofDtny44kh/HzWgV8ujuDni678et6NP4VnZz14edoDTnkKvnB8NBzw + 5dlmF35aNIBvJ5nxRaMOn1X15bPyPnxWqsZXVVp8U6cIwEZ822zMF7X6PM7rw/Wkt7gU352rGVqcz9Tj + UIoWW+M1WJ+oy+I4HSZHalLh/y6pI18jXJ5zkDyf8JHdSPL6F8Vj+tAYaUCLtIn6cF2qAtWpGKNGTbAW + LTEGdCYaMzHDhCnZpkzONBIMmJxhxKRUExrCNCj26k6B21sUurxGjcebjJPrLJL3tyVZj93J2hxI0uBQ + Qh8OS/0UAfhscncuZvbgdqUWH0+x5rvVDvxxWO7/djgvn0bw7LNIlQD851dBXQLwh148f+LG84f/KwC/ + lG3/LQC/uDyI52cH8NcRa/7cY8mfW7sE4D9WWfDnUkv+WmjFz1OM+bpBg8cF73AxSdpK+htcrdHg/Rk2 + /LBppNTDh5eXxsD9cPgkAr6OhB9j4M8kXpDGX8IfZPKMbFWPYH5IgoeB/HVGfrt7CL9tH8CzYw5w0wee + BMo55J4+iuD3e0H8cimA347689c2b35d7saPM534YYozX0xw5FOFyY58NMOeT5c68+1WD348Opqfzo/h + 15uh/Pl+LM8+T+L5t1k8/6GYZz/W8NcvbTz/YzovXy6Vuq0BNsnyTllWegEf5PmLY8IZ/npxjpeclv2H + VMe8eLmQFy/Gw4sqeJYGvwbJfYySex0Jn0ndnw6R+x8M14fz/KQDP2yz5/MVTjyaac+ZRht2FRuwLkuT + Nbm6rMwzEIxZXmDBssJ+LCnqz6KiQSwsHi6JiSOTsoYxIdeRKWXiiFojWTOzkF0rmtm7qlOYyJ4Vk9m1 + chq7V85g+/JpbFw4QTV34JxJlcydVsOKxR2sXNrJwnmtLJjbLstT2bJxCXvFge7dtYU9u3aoBOAdu3dx + 6MgRjp04yfHTJzlx5rQkkVIK5y6c5+LlS5y9dIFjp09x8NgR9uzb29VzeMsWYRObN21QCcB7dm9j7x5B + zr1rywZ2b93I/p1bOLhrO4d37WT/tq2SvK1nx/q1HNsvifDRvZw/dYCrp/dz9dgOLu9bxdlNMzg6v44D + EzM41BHFkUZ/Tta6cEmSuhuVA7hdYcOjCms+rR3AVw12fNlox+eNQ/ikbTifTXTlq5k+fCHcb7PncrUt + 58osOF8mCX+pJReFyyWWXJWETzUEdKYJdzKNuZutz8NiI+6WmXKt3IybzcN5MC2Qq9PC2FzjQVNkP2Id + dXETH+nYT0N8lSPjmsqYObFNkuksPFwdMDXREf+pw9ChVoRIAt/ZWc/UKW1kSYA6apQDA2xMJTmzwmeU + M6lJUaohoLdtWs72zauZO2syTXVVzJw6ifUrl9HaUEGgjytuDjZ4ONkw2sOOQM9BkkQOJj91DNPHlqqG + +p49vpxJzblsWTGR+5d3cuvMZmkPE5jXkc+i9nzm1qZTFeZKe8xIttbGc2FCFpfaojiY48CWMF32R+pw + Ol6PyykG3M4w5WGeJQ9yzLiVrqMSgG+l9+JujhoPCjW4W6zNrSItLudrcjJT/EuqOvvTtNmTrCPBlh5b + E/XZmGDEknAdJvr2onHUuxIwqVHpr0WJ+Nd8P3UyR/Uix0eNijBDxmcOZnzWYNpSbWhKsKQh3oz2tH6C + BTXROuT7vkehfw/x49rUR+vTEKX3jwBcF6FNY4QOHfHGjE+2UM0f3B5rQmeMrEcbMiFKl6lR2syJ02aJ + 2PDVKbpsEnZn6HEgV1/VI/Rmbb8uAbjciDsFmtzK7MODLPGHeZp8UqTLJyV6PC3Q5lGOumxXxF95Hik9 + uZwoti/+X/J8unPnbwG4WJOP8/vwYV5PFR8p5PTg47xefF6kwefFGrJfjQ9ze/M0tw8fFaqrBOCneVrc + TuvTJQDH9OZQvBZHUg05kmHG0YJ+nKyw41CJtWqY5Pnh3Vmt9Owt68eR2sEcqhqoGs5UEYDPtjpyqn4o + h0ts2Cn+ZYv4i10J73LslQCszFt5v1KHW+IDb5f14V6lOk/q9fm8w1IlAD+qN+S6MpdtYW9OSh33pfdk + ZehrzPWXmMK7G83i62pdutHk0Y1xgd2ZFqHG9Ig+jBv9Fp1+/2JGuBrLko1YKbHFKqn/KmlPCyP7Cmos + idFgjfL8M4zZkmXMRmFThj5bMgzYnKavEoE3JGmzKkadldHqbIjX7RKA0y3ZlW7BWmkLCyWmmTn6PVXP + 4rnRGsxJ0GVemhHzss1ZXGDD8uL+rC8dxOaKwWwvGcDe0oEcLRvAMfnWTxaZcCpfjzMSt1yUmOVamaFK + AL5VZa7qBX69yowrVaZiX8w5X2nGmUoTTiuCbYUhRysMVALwbnmHm3N7sUXe8f5KXQ5VSowg2w5J7HBc + 3uW5cj2u14vdaDTnRpOlYNElANcZc77KgNNVhpyQax2Ua2wpNWVFoSEzJYbqzOkrCWxvyjPeoySzJ6U5 + fSjOVqMoS53SPCOqi21oKB9GU6ULxVn2pMUNJnLMAPw8lWHDrBnQ3xwjI0N09QU9Zb5fPTQ0NOjbt69K + /O3duzfd33uP7j3epUfv91QCsFaf7tgaaOA3uB+JrkPJcR9OtvMA8sTOFDr3p3DEfyhQcOlPluxLc7Qi + 1cWW3ABH8sNHkhk2kqRgV6ICnAn2sSfIazjRgW5kJ4TKvcSRHhNI8CgnPIcPYISdJYOtDbGx0sXYQgM9 + 874YWGliZqWDtbkuNoK5pa6sa2Pery+21j1xt+tD5JDe5AzuQc3QHkxyUWeuhz7LPM1Y6z+AXXEe7Ej1 + Z0m8Jx2BjpRLPlMX7s6E7ChmlaVIvBVFe4QXbb5OdPo6MNZ3GBUjrEgfakCigwkJbjZkyz20FCUxuamU + gpQIyVMsGG5lhPtQSdyCPClMjSRftidG+uHvrvwDjj2xwZ6SowRRmBgsv/chfYwHheH+jCvKFB9dxfKp + zSrRdvEM8bkzmlkwq5l5s6Wc08LCOa0sntfC0nltLJ/fznJl3t8FHSpW/c18ZQqHsayZP541c8epROBV + cr5Viv9WegLLeVbMbmH5HEUIVkTgZvH5zSye1si8STXMnljBtM5CJrZk01KXSEVxCAXZPhQX+lFfG8ak + ianMm1/I9FmZNHeEU1DhTnqBAxnFTl2UuJBZ6kpmmStpxS4k5TkRnT6E0ERbwpIGyPJQEiUmSSlwIbXI + VRhJSpEbyUJaoScZ+T5k5wdQWhhBZVEs1QVxlKSEkxsbKPmdp/hOd5Iig6kuLWL65MlSn8lkZ2czwtUF + Q2MDTEwkp3RzISoqjPCwMbi6DGegjTGjPYdSXxzDloUNHF5Rz5GFhRybnc6RyVHsafJmc7kLawsdWJ47 + lMWZA5ifYc3S3AGsLVX+EOzGvmY3tlcOZkOuKWvFv23L0uVIidIL2IRzpYacLdLntNj7s2IjFDH4crE+ + V0r1VQLwtVIDrhTrCnrcUATgKmPu1xrxoM6QJ00mgjGPG4141CD5RJOBoMeTFl0et+jwfqsuj5oUEViD + Ryo0/0cAfjxWm/fH6/HRFCM+ndklAH+xwJrP5vfj4/lWvD/ThPtT5ZqTJVaZaCb+24iT1VL3Uj2OFBmw + P09P7KQm+7O1OFaopxK0L9dIfNPQn7utg3l/nCNPpnpwfpI7G+qGSt5hToH45KgR6oS4GBPg3A//4TZ4 + D1DmAtcnyFKDKPMeZFh3p1y+vXEufVkWqM158UMftA/l+2nu/DTTi68nuvBZpz0fttrxfmN/PmoZxDfj + Hflh8ki+n+jBdxN8+brTT/yOM0dSrFkVJDbPz5g2DzPKXC3JHDGIJJcRJHr4EeM1hlh/P8nzfUkMHi12 + JYDk0DGkhASRGhZMSngwiRFdJEUEkRzmT2b4aErkO6yMl28xxIscP1ey/NzIDZb2F+5HRqQPmTF+5CYF + yLc9hurccDqqkphUn05nZTx1ucHSLr0oEqrzgqiR9lqcHUJ6wmjVXMHhgV5EjPEjMjBAloMJDwqVMoLI + oEhVGRYUQUhgOMGBYYwZE4r/6GB8/YPw8Q8UAvDx68LbdzTefv6yrOAn6774KPgo+Aher/BW4Sv7/H39 + CJBzjBECldIvkDG+Y7rw6SJQtgX5BREyOoSQgFBCx4QJ4YQHRxIRIvUMDlcRFSL1DY0kJDT8/0pwSJgQ + TqAcHyy/7SKS4OCo/4MQBXkGoYGRhMlziAiJUhEp141Urhsu1w0LIzosXAgjQt5fuIK8Q4Uw+abDIwIJ + FUYHeTHKdwROrnZYiG8wMO6NjsG7aOm/g6bSC9i4h6r3r6bS+9e4FzqCrklvdBUh2LiPShDWNlJToWvc + V4W+bDcx642VeU8sDN7ESr8bDhavSTvTpDHagukplizIsGRjhQOryxyZlSN+I8GauAA9qbs1oVH2jPQe + gLWdAWaW6nKePgy21cDbrR/uLmYMG6LFoEFqDHdQF5ulgbunJl6+2viO1iEgWJ+wKGOi4k1ITBJ/KTYo + M0d8a8EQ8oqGkK9QPIgCoaRsMGXlQ1QicFmZrJcOoLDQhvxca/JybVUU5NiJ7bajMHMgecnWpEebkBSi + T+wYTaICNYmL1Ccp3pD0RFMy45S/lynirwEZcXrkSAxcJrFzY4gu4wN1JX7SZ6GvHst9Ddngbcj+ACvO + Bdtx1q8fh5302N7vXTabvsFGg26s1e3GRqNu7LR6jUODu3NefO+nMXZ8kzSMj6NseT/UjM9ibfg8TpaD + Tbnnrs2N4b25M6QvDwdp8NROhy8G6fFlf32+sNLic/H3n5mo8Ym8nyf6vXmo3/d/BODD6j3Y1PctlvV5 + nRVar7PRtAeHhhtzys2asx42nJDnfszJkOP2kq84anPRTYcro7S44qnOzQAdboTqcilMbF+4HicidTku + +cJxyUUOJRqyR57FzmgtdkVrsz9On6NJppxIM+N0phWnsyw4lWPCmRwDzuWI3c+W+mTJvUiecD/NhIdJ + ZjyINuN+kAl3vY244WrA1RGGcn0zzkocdiJmGAcyndksfnBJhRsrx4WxY3EBh7a0cenkcu7fOcjTDy4J + 1/j449u8/+Qqd26c4PKF3Rw9tIJ1ksdP7MykuiKc+qo4KktiyM0IJykphMjYIIIiA/ELDcBT7OIof19Z + D6O8poqV69Zz7fYdPvjkUz754kuefPgRj55+xJ0Hj7lz7wH3Hz7m8tXrnD59hgULFpCRli7frXx/oWFk + JCfLtSqZOrGTloZastPT5LsNJTBA7MnoILFlCsEq2xbgH0xQQAipyWlMnjSFM2fO8u033/L7r7/x7+++ + 48G9uxw6eIB1ks/v2r2L/fv3sW//fnbu2cWK1avYsnWb/OYCN2/d59z5a+zec5iNm7ezZdt2duzYJvs3 + sGHjatauWcaGdcvYvmklxw9t5dqFfdy+spen9w+pxN+vPz7B3esbOXFwFtvXNbN9fQNH947lxIF2NqzI + ZmqDO5Oz+jMny5bF+f1ZJd/T1iYHdjbbs6NRcoI6W7bU9GNDhTmrJb9fVWHJ6mrJGyqsWVhiwbwiS+aW + WTOrfCCTJH8YVzSIcSUOtEk80Zg7jMr0AaQE6RDu1RNfpzcYNex1Yvz0JaYZTEGCPelhyh/5bUgOtiEz + chB5scPIj7cnW9pHauRgiRltxVab4easjsOgt3Ea/BbOdq/jNqgbPkNfI8TpLYpCjKhLGkhVsvxevrGE + QAt8R2jiOPA97KzexszwNYwFI6M3VBjId2poqPA6RoZvYGGq9BLug11/HYYNNmKU+0AiJB7Oy4mipiqL + 9rYypk5tYuLkRlpaK2jvqGPWrEls2LCC/Qd2ceDAPnbs3MXSpSvoHDuRutoWpk6ezfp12ziw/xj75N2t + WLaOJqUXcFQSXqP8cXP1Ugm6igCs/NOA+yth1035B6l/BF9l+X8F4b8F4pFSKsNJK6h6AQuuytzBci5P + d0983d3wd3Mi2MOBOInh08Y4kBc6nMLQweQHWpE32lTV+zcnQBn+2ZDM0RYURznQkR/K7JoMJuTGkevt + QHR/Y1JfCcDFDnaUvxKAKyXm+FsALojLJOu/BODEtP9TAI4XlO3//wRgZXtqhiC/i0/MJVrOHRgSi6dP + EEPt3bDpPxyrfgMZMtQBD09vgoLGEC9xTW5SGCUZIdTmjKE5z4fxpV7MqPJkbqMPC9sDWdAZweyxcUxq + TqS5MpGS3FjS0+NITu0SgJW6JaYqwz7/h/jUUlUP4HhFAE7OlnqmvZoDOIE8RajMiKBIbE5pXjSVxYnU + VGRQU55FSV4KBVlJ5OekkC/L5aXZ1Nbk09pYTIfQXltEW1m+SrxtKc6msSCLhvwuMVWZu7c6N00l3DYW + 5dBWUcC4qkLGVxepxF+F9rJcWuWcSqlaftXzt7m8QI4voqOyWMpCGotzaCjMkvNk0STXUa7VJOsNBak0 + 5iXRlBNPW34i8xuKWdVZw/KOSqZX51CXLu81LYLqrDiqlN63cnxNUTq18nuVCCznbSzOVQnUCm2yrVVo + Kc2hWblW4d/3lKkSt+ty0rvIlXNky/1lpVGVmUKlPKPKrAQVFXKt8uwYyrKiKc2IpDQzUtYjqc6PprYw + RjXdUGNeIm25SYzLTWBSbhTTJPacWeDD3OJRLFT+iajBm6Wt/ixoDWRmYyiTqiWPFb9QmyP3IuerErp6 + AkdSIdeozIyhKqNLAK5KT6AqRUiWuiTFURYf/V8CcJcIXCQUxISTFx1KvuRhhZFBlAjVMUE0JITTKjlv + W4bUNzGIiuRgeQaJTGupZOPiOezdsJITuzdx5egO7p3dzf2z23lwepOwmYend3L/zB4enDnIo4vH+fj2 + JT69e52P7l7jg3s3eP/+TR7ev6biwb1X5YNr3FOQ5dt3LnHt0ikuHN3Hqb3bOL5zE8ekPHRwB4eO7OHQ + 0b0cFc4e28dVWb+ycwPHl87k4PRWjk+u40x7Cecb8zhRm8qhylj2l4ZzWJ7d2dZkbk7N55M17XyyYSJP + 1k3i7trJXF07nXNrZnBq1QxOrpzF+bXzuLBmNofntLG2JUf8QTiLq6JYWhvNnKIgWuNcqQgcRq5nf9I9 + bElytyXSxUpyJwOcrHtjY/AGdqbv4NhfYsJhRgSNGkik3zBiA51ICHElMdSVhGDln8fdVdNmZUR7Sczm + TXaSF9nJo8hKdSdDyM70kRgwkPzsCHIyY8nKSBD/HS8xQQyxcRESQwcSHOpPiOQ/EVHBxKXEEJ8WQ1Ry + FGGJYUQm/IeU7ESaOhtYvGYR3UYHDJMEZTBePnZ4SoDr6WXHSDdlDmBjBtppY2mlhrmFBM4KlnJD1hoM + sNViyCBdHIYa4qr0+nU2w8NJEYBNGOVsyqgRprjZ6+EyVFOcWh9GDFWTZTWVAKyIv25SugxRROC+ql7A + igjsYa+gzih7NXyc++A/Uo0xHn2IDtCVRM+UglQbyrIHyEfUT4JeCW6jNeXBKXME9yDSuwdhXj0Ice9O + qOvbhI/sTqJPL3KCdamOs6BGKI8ypFwCwYpQAyokWC5VBOAAbcpGa1MuwWLVGG3qg/RoDDagXvbVjdak + 3l+TFinHynkmRhgwXQLtGZFGKgF4Uoi2BNBaTAxUZ0qIFjPk3Eov4NlhOswK1GCGnxozfHqqhl9WBGBl + /t3V4d04WvQa9xQBeK0+v+0x5eWpfrw4a6Xi5WlLXhw2/kcA/mmlJp/O0OZeuxYXq9Q4qgw3mNWXlVHv + MVXON9alG51yvxPcezJ5lBqT3PvQOPRfVPXvRoVtN6oGdKNhWDe5/husCOnN3nhdzmWacjPLjKfZZnyT + b8nvBdY8z7PkeaZcN92InxN0+DZSnQ/9u3PbtRsX5fdnhnTjtHDBqRsPArpL0N+bb5M1+SVXjz8KDfk1 + X1+Wdfg5T0GXf+do8222Bl9l9eGL3N58Udybr+v68ssEfZ7PMuaveUb8sdCQ35Wev8vkOSzR45clhvy4 + zJCf15ry82Yrft9hzR/7+vPiqJ2qF/DvB235aY8l3+2y4Lvdlny/z5Z/Hx7Ej0eH8MORofz7wDB+FH7Z + Z8+fe+3lGTrxYq8rz5VhkDe7yHWG8sN0S75p7xqq+Ktqdb6sUO8a/rla6lunxzeNBnzdaMRn1bo8yVPj + Zmp3riX35FqmtkoAPpyqiBq6bEzWZ1miPlMjNan0eYsMt27EurxGlOvrJHq+SW7Ae9SGadIRa0hnnBGt + knzUh6hTF9yXxlAtOqL16IzXZ2KKPpPTFXSZKueflm7ANEkw2qO0qfTtQYnHW5TIeZWhNMf5vcPCiL5s + TdZjT4oO+5M0JZHpw6H4d1UC8Jnkd7iQ9R73anX4bIYN369x4K9jvnA3Aj6I5PnnUf8IwH++EoBfPHFX + ib//LQC/eDLyvwTgYf8IwM+O2spzteLPrRb8sc6S31aa8esSc/5caMWPkwz5vLYP93Pe4ExcN04kS1sp + 782DKeZ8v2kEfxz25uUlf7gfAp+Gwtdh8GMU/JnA8xdJ/EmqkMHzvwXg75LgcQgvzo3i+X65jz1DeHHK + Be4EgDLM9ydRvPgwkt/uBPPz+TH8dng0z7b589dKH36d7c6PU0fy+XgnPhw7nCcdg7k/rj8PZw7goxX2 + fLfXk59P+fPr5TH8fjeMvz6O5dnXqTz7Pp9nP1Xw7NdWnv0xmRcvF/CCFcBGeLmNly938fzlfqnvUeEE + z16ceiUAHxG2y/IyXr6YIvWvhWeZ8Kvc4w8+8I0XfO4OHzrBI0e4NZLnJ1z4foszHy8ewe2JjhyvsmVr + niGr0rVYkaXDUoVcA1YUmLO8sB+LVQLw4H8E4MnZw5mQY8/kEncWtEexZmYeu1Y0cnj9RI5snMGRDXM4 + tHEe+9fOUQ3/vHhyA9PaipnUWsDsKVUsma8Iv01MmVjBlAlVLJo3nh1bVnJw31a2bVnL+rWSfK1dx+at + Wzh6/BgXLl3m+u2bXL9zi2s3rqu4I0ne/YcPuP3gLlduXufcpQucOHWC7du3sXLFchYvXiiJwRI2rl/D + dknotmxew8Z1K1i7fCHrVi5mmyR4uzavY9vaVayRY5fPm8NaKY/t28WlM0e5efkUj26c48n1U9w5uYOL + O2Tfkhb2TcnhQGcsh5sCOFnnIXbRkUtlA7labMOdUms+rO7Pl42D+KJ5EJ+3DuWLcS58MdWTb+YH8vWC + QJ5M9OB641DOlltzqsSSs8WWnJNk74JwqcCSqznmXBcbeSNLmf/XgAclRjyQBPFmVT9utdhzb8poLk0K + ZlO1B20xtiSPNMLLVvxYf01iAhQBuIRZk1olac/Cy90BM1NtzM21GT68H2Fh3kya1MSc2ePIy43Hw2M4 + A/ubMnighSQ2DqQmRTJjageH9m/l8P4dLFsyj46WRmZPm8qGVcslMa9Q9UJxGGiK0yATvEZYEeg5gCjx + 4WWZQcydUCYB2VjmT1SG/cxl1+qJPL2xRwIvSdbWTmTxuHwWtWYzqyxe/N5QGsYMZmt5BBc7U7naEs6J + fEd2R4idi9TmXJwOVxJ1uJViyIMsUx5km3InXY8bqX25ld5bno0a9wo0uF2szc0iXXl2OpzK0eJAmha7 + xU5uT9Zlc4Iua+N1WBmjx9wwbcaJP2zw7EGtnzpVKr+rzL+vQbZXb3K8+lAWpMvY1IF0pg+kNdmapngL + GuPMaE+1pjPDmpYkEwrE3xf4vSc+XIMapSdDlC6NYk8VlOWmKD3axOaOS7JgbIIZHXGmdMaYME7VC1iP + qVFazIrWYFG8NisTtVQC8J5MfQ7mGXCq2IgbNVZiQy24V27I7QItbmb24V6WGo9zNfigUIcP5F7fz9fm + oazfz1LnTlpvrif14FL8W5yPfVP8xd8CcB8+LdLgo7zefJDbQ8VT4cPs9/g4tyefvRKAPy3oK8f0edUD + WIOPlfmF5fx30/tyPr4nx+PVOCb1PJaqz9EMY47lW3C6cgBHpK1vkOe8JLoHq1M12Fvej2N1gyW4teOo + lCcb7TndZM9ROXaf/Ga7vLvN8b3ZEd9d1QP4gry7W6USW1QoaPCwRosn9bp82GysEoA/bbPiYa0BlyTm + OJ3zHidyenNInsXqsNeYN7obM/y7MdHndXmnbzAp4E2JfXrLM9VimfjHxXGaLE3UZm2GCRuzLdgo39T6 + LBPWpBqyMEqNRZF9pN7qrE7RZmO6IZvk+a/P0GN9mo6q56/SK1sRgTcm67BGGQJajl0v7XFrijG70izY + kWzKGmmjiwJ7Miugh6oH8NwYTWbLO52VpM+cdGMW5FiyJN+KNYU2bCq2Vc2PvFc4WmLFiSIzThUacaZA + l7PyrC8WaqkEndtVptyuNueWcEMRgaW8IlyoeiUAVxpxqtJY7LWRagjo3fK+FAF4s7zr3fIs95ZqsT9f + vUsALlAEYH1u1Mv5Gi242Wip4kajGdfqjblUbcC5akNO1ZhyRK61s9yM9WUmLBR7M63IgM5CPepzJb6Q + dlYuZUm2JsXZulQUWlBXPojGSgdqS51IjrIk2McQD0dthkm8bttPB2NjHTS1NNHQ1EZDSxt1Kf8Wfnv3 + EaR8t0cP3u35Lj36vKsaAlpLrTv9jTQJtLclbZQjRd5OFLkNpsR1IOUjB1LhZke5mywrjJQ43H2gSgTO + HWFDrocdxSEulESPIjfSnZRQN7FJI6ReDgR4DCV6jDu5kniUZyVK3B5IoNKTbqgNTgPMGGihRz8LbYzM + +6Ir6JurY2ymhZWJDtZyH+Zm2phYaGJq2Qdby/fwGNCbqCF9KJI8ocWpL3M8dFg2StqPtzk7ggZxOGEU + e5N9WRY1kjZvOwpdLKnwHy52JZAZhbFMSQ+hXerX7j2c8b7DmTh6OHWS76RKPhNpp0PsCAuyJCn7WwDO + SQrF0c6EAVKPEYMsiQ/2kjxE7Kck7OmSDAf5OREW4EqKMoxxWoQk3tGUxEuiFuZPWXQQ44uzJGmvZsW0 + FlbO7mTJrHYWzmhh4axW5ktSuXCOrM9tUw3Xv3R+B8vnjxUU8XesilULOgWlFBaOZe3CiV0i8AJh3jhW + y/Er5yq9g9ukbO2a5kERglXDQreydEYTi6Y1Mn9qLXMmVTB9XDHjWjKoLY+kOMef4lxfqssC6WiNY7bE + EbNn5TJ+XDyV1X7kFbmSU+RCVqFQMJKsopFkCmn5I0nKGkFsynDCEwYSkTBIlu1JzHQmJdeVtLyRpOZ6 + yLIHSbmjSMnxJi3Lh8yM0RRJAluZF0eNPL8SSU6zIscQ6eOKt/NQRnuMIDkmktKCAgry8wgNCcZu0EAM + DfSwtrYgYLQ3mWlJJCdG4z7SHlsLfUYp/6CQ7Me8tgzWTcpm2+Rk9kyKY3d7IJurR7ImfzjLsoawKGMg + 81NtmZNqycJMG5bn27GhYjhbq+xZL/Zhlfj7FSlaYo+02FdgwMkyY86WGHJGEYDFRpwu1OV8kR6XivW5 + XKLHtVJDrpYYcLlYV4XqH0gqDLhZLj6zSpeH9UY8ajLmSbMJj5WewM1GPG7W50mLHk9a9XnaZqgSgd9v + 1ZZ1LR63aPJQEYCb/xaAtXh/nNjjyYZ8MsOMLxb04/P5/fh0nhUfzbfig9nmPJ6hiMCm3J1kyuUOqWuD + ntgmfU6UG3FY6nlAcrGjxXqcrTDiYq0p1xsUG2TL3dYBPFLi4vEOnOl0YlPNIKZnWFAZokuShzaRI00I + GdGPMcMs8eqni5+ZOsEmPYgx/hfZ/d6kYfh7zPbSYrPkuzeVeGvicH6Z5cpP0134dqI9X48fxpedg/iy + YyDfjBvMj7L/58nO/DxxJL9PlRh9oj+f1LtwPsuW9aGGzPYzotPTlCo3Kwrdh5E1yo1M3yBSA8JICw0h + KyqMgsQYCpPiKE5JpDQ1kfL0NEoz0yjOSqNEUOamK0uPo0zaVF16FE3yLVbFBFAW5kN55GhqksKoy+r6 + Y1t9UQKtFSm0VSUxtiqBaU3pzG7NYkZjChOr42gvC6O9PJwJ9QmMq0+huTKBykK5flYkuWlR5KXGU6AM + kZimDJeYRnZyBjkpmaoyM0VITiNNSE1KJTExmcT4ROJeEfuqjIlLEOJfEUt0bAyxsbHExcYRF6cQI8vR + sk3ZHq3alijHJicmkiakJyWRGp9CcmwSibEJJEYrxJEUI8fEJJASl0xaQgoZUg+lTjlpWeSkZwqyLORm + SH0zM8nISP+H9Mz/JS1D7iMjg9Q0ZTmji/QsFenp2V1kZMtvs8nMzCE7I4ecjFxy03PIz84jP0shm7zM + bFnPEjIozMlUTY9SmJdOfp7UJVeeX04qWTlJ5OSlkJWbTEpGLFFxY/Af48qQoWaYWfRFW/9tNPT+hYZB + dzSMutPXRBGC30PLsAsd4x5oK6UyR7BhDzmuF5pKz2HDPq/ohZG0YUszwfBf2Bi9jqvNv0j31pY43oJZ + yebMTzFhVZ6N6h9EpqUr87BZkDhGj9gIayKihjPSywZLW/FFpj3FP73HUBs1fNwtGOVqhv0wLYYOUcPB + UXIBd008fbTwD9BlTLAeIREGRMYaE5toQnKalTxbRQDuT47YoFyFggFSDpD1ARQUDqCwaCAlpQMpK7Wj + rESWiwZQUtCf4jxbivNtKc2TffK7ivxBlMt5ClIsyIkzJi1cl+RwHfGxBmQlGJGXYEKexL25MQZkx+qR + GaNNToSWfBPaNIXqMkHqNjPQgIUB+qwYY8TGAIlFQgdwPnwwZ/ys2O+oxRart9lo+hrrDLqxSrcba6Xc + 0e81jgx7l0tiK75KHMZ3qQ58EtNfJQB/lWzHN8KHYRY8EN98S/z0vcF9eTJIkw8H6vDFQD2+ttXnKysd + vjTX4EtTdT416cv7/xcBeIv6W6zp+wbrdd9iq7nEoMONOeFmzQl3ieVcpb7OBhx20OG4kzZn5XpX/fS5 + 4qfN1UAdLoVqcyZMhxPyTA6FS24iucGBOAP2JhqyM16ZUkWb7cKuOD0OJhpxJMWM4xmWHM8053iOCScl + /zuVrcPpbC3OSE5+OUNfch9zbqdIHCdt43qI5Ip+plwdZcoVN8HLiquhg7mU5Cg+w439FaNYV+3Ous4g + 9izM5tjmFi6fWsaj+4f49NOrfPb5Hb755hGffnyTx3dPSc67m+MHl7JpzVjJIXNpb4hjfGsqHY1p1FUk + U1acTF5+Mum5KeJrk4hNTSA2OZFU+abaxnWwecd2bj+U8335Fd/9+BPf//Qz3/37Zz7/+ns+/fxLPvns + C5UIfOnyVVavWU1FRTlJiUmqYV8rS0sY39HGnBlT6GxrobSwUGxHKgliWxTixF7FxSWSnKBsSyJe7Eye + fOMzZ8zk/PlzfPvN1/z+68/8/O8fePrkIWdPH2fPnp2cOn2Sc7L/3PnznD57mgOHDnHipNzrrXs8fPIh + 127ck/ULHDp8gqPHT8hxZzktvz18ZC/79ymjhm1i97Y1HD+wiWsX9nLz0k4e3trD5x8c4euPj3JPEYAP + zGTr2ka2ranl8O42juxuZvWiVMZXj6AjvR+T0iyZmW3FYvHzW1sc2dHqwI6mwWyvl/WafmyptWRLnTWb + 6mzZWD+A1dXWLC21YFGpJQskr5pbMYDpZQOYVDqIcaXDaS0aTk3uIErSbUiRby7Cvw/+bu/gM+IdYgON + yUkYQn6SA+lRg0kNH0hG1CCJf4dJnOKo2p4VP4y02KHERw4kyN9E7IcmTkPfwWnwGzgM6MYIwXNwN0Kc + 3qAozID6lP7Upiq9im0ltpY4yE2LEYN7MMj6bcyMuv0jACuir75+N5UIrCr138Bc7FQ/MzUG2upiP9Qc + X297UpJCqK3OZdzYGiaMb2DS5GY6xtbR1FLNxKljWbp8ATt3beXY8cPyHg6za+duFi1aSmvLWCrK6xjX + OYXVqzZx5PBpjh05zZZNu5g+dS75OaUEB0aqhN//9PZ9Jf4KI128/ll2G6kse0kcJ8coKALw3wKxcqwi + AMt5nN2UXsDKsp/YVS9Vj3Rfj5ESKzoR6jmMhIChZATL8w4bLM9K7GewJflix3L9xeaN7ur9mxPUn8oE + dyYUxzCzKpNmiemTRwwiwsaIVDtz8ob0o9he8ppXAnCFvx81wRKnvhKAM/8RgAtIfDX8c9zfyLqCsl01 + /LMiBAvJKtFVEYCVYZ/zVCj7VQJwhpwjKYfouAxCwhPwHR2G4whPiXWdGGg3HCdnN3z9A4gMDyU1JpT8 + 1DDKsoKoyx1Na4E3E8o8mVE9inlN3ixsD2BBZzhzxsYxpTWJ1iqJq/NixSfHy/X+WwAufsV/BOCElGKp + l9QvKYsk+dZTk5UhnaMpVITf7GDJO0OoKo6gpjyOuqpUaqsyJDZPpihHyJfYqziT2ppCWlrKGT+2isnS + nia31zC1qZqpjZVMri9XDencVpKvEnxVIrCqx26Wqhdve0UBYyvy5RhFCC5iQo0yFHQhnVXKtnzGVirH + 5AuFEq8V0lFVwri6MsbVlNFSnk9zSR7NpYpAqwi1iuCsiLTKfMMSs+Un0VGYwvyGUlaNq2NZRxUzavJo + yo6VOFDITaRabGlVQRpVRelSyr0UZ6t6ACt1VeYaVs6v9ERuV5DrtZcqwnYercVy3UJFcM6mIT9DhTLM + db0iAucopFInz6guL0H2JVFbEEd1XhRVOVFUZodTmRMm62HUFkZSLyhDOTfnJ9Aux0/MlfeYG86MvNHM + KpB3XDySxZUjWd7gzoo2Lxa1j2ZuSzDT6iIZWx5DY14ktVlR1GRHU50t15CyKitaNcR1TVbCq+GfE6iS + mLX6lQhcnhj7jwDcNRT0KzFYKIgNpTA6WHL5YCpjQ2hKDGFsejRTJF+bVpRMs9ITPSWIpoIEpraWs27R + DHauWczhras4u3ct14+s5v6JNTw+uYrHJ1by/sl1PD61mcend/L43H4+uXmOT+5e5uP713n68CaPHtwU + n3SLB4/viD+4y4Mnd7gny3ef3OL2oxtcuiH+4OwRThzcxbFdm1UcP7CTw8d2c/SU+JKzxzl77hRXhFvn + TnD39GGu7dnI5U1LuLl+PreXT+X2gnFcm93Kuak1HB9fwqlJpVyZXced5e18vHMuH+9bxPt7F3Nv91Iu + b1vC2S1LObVJ2LySC+J7LmxZyaEl01k/qZYlLTms6sxj/cQClrVmMD4vhMoYDzL9lCmf7Ij3HSr57GB8 + XaxwkHjH0vgdbM17MVzinpH2FozxGkaExLUxIaOIC/ciNsyT6GAP4sO9SYz0JTl6NCnxo0lLElJGk5oi + 2xRS/cVuBEoMHqH6544M8f/pGUkkpcQTHx9NpLyv8MhAFRExIcSlRMs3HkO05EPhiWGSo/+H5OxEGhUB + ePUiug0dZsAwe0McnExxGWmJm7sNI1z7qQRgu0G6KsHXup+6lH0FNewG6DBEbsZ+iD6Ow43+EYCVnr+K + 8Os9UgJiFzOVAOw0qC8Odr1UIrAiALs5aODhqCmlOiOGKCjCsCauwzTkeNlur46HfW+8HPuIM+2N/8g+ + RI3WIyXCjAJJ3ityB1MlwW+RJKvZicp2TeIC+hDnr0akbx8ivXsROUoSVc9epMi2vBA9acRmVMWZUR5l + QGmoDiVBupQKJYFdQ0CX+GtSJmX1GF0aQwxoCTOmUQLjhtGa1Pmq0zxag3ZFAA5XBD8jpkkwrwjAU8J0 + mSznmxyspRKAp0sgMEPWZwRrMiOg7ysBuBczvd9immc35vt0Y11EN06UvsFDZQjoDUb8sc9cJQA/P2vZ + xWnhkDF/7tLht019+WG5Oh9P1eZOsxZnS3uzL+NdtiT0YGlod1Wv3lbnbjQ7v0XbyJ6M9VBj7Ki+1Dm8 + Q5FNN3Itu1HYrxvVdt2YMvJ11oSqcTjZgJv5VrxfZMWXxZb8VGLJs2IrXhZKPfJMeZFtzL8TNPgqWo2P + Qntw3+cNrspvL4x4jTOO3bjo2o2HQd35LF6N7zK0+a3QkD+Kjfk134ifc/X4d3YX32fp8k2mJl9n9eXz + bDU+LezN5xVyz226/DHViD/nGPPHQhP+WCrLK+U5CL+tNOHnVWb8vMGCn7ZY8csOa37da8Ofh7vmAf5t + vzU/77Lghx1m/LDNjO+3W/DdDiu+3d6Pr+T4L9db8MVqM75eJceskt+vspFzDuS3pXb8PL8/30+14Ot2 + Q75u0ObrGk2+qdLg6wr1ruGfq7X5rk6fL+t0+LxGlw9L1HmU3Ys7Ge9xO0OdG9m6nM/S40iaPvvSjdic + asSKJGkP4erU+L5N/qg3yPJ6kyz/dygM6UlNtCZjEwyYKEnYJGF8rD5t0labQ9VpCVGnPVyDsdEaTIjX + YHKyJlNTNZmeps30VF2mJekxPkqbOv8eVHi8SZnLa9QpArBcZ2FYH7Ym6bIvRUc1H/FBlQD8HscS3uFU + 8tucy+rOvQZdPp/Vnx/WKQKwT5cA/FE0L7/8jwD8x/+nAOzy/yoAP/8vAfj3dfKOlsn7WmjKb/PleY/X + 4+OqntzOeo1Tcd04ltiNcyXvcW+SMd9tcuKPw568vOQL9wPgkyD4Ohh+lHr9EcPzvxL483mykMbzF5nw + ZxZ8EQ/3Anl51pMXB515tm84nHGXe5HfPVWGkZbfPY3il9uh/Hg2iN8Oj+H5Njl+dSB/zffn52mj+KTd + UTXv6636flxpMOF6pwn359ry+WYnfjrsxe9n/fj9+hj+/CCSP79M5K/vs3n2cxnPf2vm2R8TeP5yDi9Y + BqyDl5tVcwEr8/0+f3FIUHoBn3glAB8VdsvyKjlmOi+e16nu4cXPEbz8bjR85QefecOHbvBwJFwfxZ9H + 3Pl6vSvvz3XhcstwDklisiHTiOUpWixN12KBsEja2wr5LlcU/S0AD1EJwLMK7ZmSY8+ErGFMLHRh8dho + 1s7KZe+qJs7unMm53Yu4sGclZ3ev4NDGBSybJsG98t97EhS2VqdLYlnF/JkNErAVU1oUI4leHBMkONq6 + aZkq2Vq8aA4Tx3cyadJkli1bxsHDh7lx6xZPPvpAxf0HD3jw6CHvf/gBH33yMU8//kAc9n2u3brGuQtn + 2bJ1MxMnjKO+toZOSSgXzp3F2lVLWbJoNrOmj2fS2CZmTFbmHZ7DhpVLmD99Cm11VTRVljF9XDt7tmzg + 2vlT3L9+gU8kQPjyyU0enD/A2e0SZCxtZ++0Ag5MSOJwawgnG/04X+3GmaJBnMu14VqRNY8r+/NZoyL+ + DubzjuF8Ocmdz6f58PncMXw+L5D3p/pwo9WZM5W2HC2SRL9AmQvUjNOFZpzNM+NSjjlXMk25lmXArdwu + AfhRtRX36gZyt92Z+1NGc2HCGDZWudGZYCffvRn+gzXwGqxDUrAz7XU5TBtfS3lRKu6ugyUp64WhUW8G + DzYlJMRdkq0GFiyYSE5ODM5O/VVzXNr2M2KEox1J8aHMmz2RS+ePceHMMdatWs7UiROYN3Mm61YspaW+ + UiUAD7URn22ti4eDnNN7AAnB9lTnBrNoUhlbl3SweGIZs1pz2L9mIh/f2M2HV7ZzYvNU1k8vY834AuaV + xVLuO5BqT0s2F47hXGscVxqDOFvoyKEYA45HanIuTpMr8ZrcEHtzL82I+8qw2JmG3ErXENS4lSXkaXCj + UJvrRfpcEF9wKs+Q/RnK/IN6bErWY02CDktjtVgYpcO0EA3afHpQ591DNbpGzRgdKgPFH4t/zfNRBOBe + lIzRpCXBirYkayktaRTf3RRnKutWjJNkuyPVQo7pQ9HoXpQFqVMVpq0SfZtjDf6hJdaQtngjxr4SgDvj + hRgTscHGTIoRm/1KAF4Qq8lysb+b03TZk63PYWU44GIjrldbcrfGgjtlhuIrtbiZ3Zc7woNcDR7L+uMC + bSm1eZinqRKAb6X15ur/IQD3UAnAHxd2CcAfKsLv/4sA/EWJFl9IqQwD/UmRJp8Wa/FpqfifQh0eiP+8 + nqbOuRQNToldOJairfoHpEPZhhwvteSAtNe1SX1ZGvMe69I0OFDRjxMNgzlaa8fxusGcarTnWM1gduaa + siVN3of4i42xPdka8w4Hkt/jbK4a14s1uFehyYMqTZ426vNxizGftpqrhoD+oNmUOxU6nJX6nsh8VyUA + H81RY33EG8wP6MacgNeYG/I288LeY0FET1ZIW1mXos9m+XZ2FVhJfQZytGYoOwv7sSXXnLXpBiyN02Ch + HLs4qjdLovuwMlGD9VK3Dek6rBEfuDpJnfVJWtJ2dOS96KkE4PVxWqyTd7VBJQAbsSvNjG2JxqySNro4 + uDdzgnoxN7yvSgCeJW12erwOM6Ue86QeS3IsWJNnySaJebbnm7E314SjhSacyJd3XaDPuQIdzuVrcrlQ + 3nO5IXdUArCZCmVO4Bs15lwVLsr208qcvZUGnKrqEoAPlikCsKbcW28256uxQ5Z3yvvel6sIwH3Frmiq + hpBWBOCbDRb/oAjAN+qNuVpryCVlKOgaOV+tGfsqzdhcYcryMjPmlVowVcrOUlMa5LuqktiqTGKQ0hwj + SchtaKwcTkOFo6wPJSJAH0+nvmITumNm8BYGOt3R0uxNX/W+qKtr0ldDEzUp+/TpIygCcB96q/WhZ+9e + Qo9XAvA7KgF4oIkmoY4DxKY5U+Y3gjLPYRKDDKF61CDqPAdTK6UKdzuxHYMo9xhMmbuUox2pj/OmPnUM + FSkBZEd7Ex/qQfjoEQR5OREX5EWBJCJVuSlkxAQR5OGI+5B+OCi2z1QLc1MNDEy7BGBdZdhOEw0sjLSx + MtTG3EQbE9lmLkmUrVl3PGx7EDukD1UuWkzzNmSFnzHrPA3Y4WvOobAhnErw4FCiNyvDnekYZUOZqxXV + o4fRmewvSXUk09ICGRc2UuKp4UwNcGRmyAhave3IHKpP5EBtYpzNyQoeQXNRIhMbi8lICMRpiDn9zXVw + HmxJbIgXpbmSSJekk5MeQXSopyRy3mQmBlGqCEySwFekhFEcFUiFJNNj89NUAvCqaW0sn9HBkpmKANzK + wlltzJ/TwYLZ7SyY28aSubJvXgfL5o4VOlg+b6yKlfM6u4Z/VnoA/y0AL5rAusUTJfmeyOqF41i5YCyr + VUJxB6vmtbNyjjI3cJcAvHxWi6on8JIZDSyaVsvcSRVM6cihuSqeioJg1dzRFYUB1FeGMq5N7rkzhbGt + sdRUB1BU6E5e/khycl3Iyh2pIlNIy3SVxNOZ2ER7ImMHESXExtsTl+RAYqozyWkjSExzJSHVVZLQkcQl + ukmS6kZizCiyEsZQmRlHbU4ypYnRZISOJtTdEecBltgP6Cf+bSRj/Hzw8fbEyVEZQcMYA31t7OxsCQtR + ehDnkJ+Thqe7k6qHuOMAI2IDhtGYE8AMuYel9cGsbw5kXbUHy/OHsChNYqe0AcxP7c+cZGtmp1gyN60f + CzJtWJxjzXKJG1bkWrE0w5BlYmPXpGqwPUeHo8WGnC4Rn1as9ADWVQnA5wq7BOBLxXpcKTXkcnGXAHyp + RJcrZfqyrC12tTcXC/tyq0qf+w3GvN9qJpgKJjxuMeRJi4EsG/JhhwkfS0z60VhDPuhQegW/EoBb/lcA + fjpZn49mmPDZXAvBko+l/GieBR9K+cEcCx7NNOXuZFOudhpwoU3qXC/UmHBMGamgVOpebczFOhOuNold + a7HiftsA7rXZSk5pzbVmG442KsNg2jIv21J8pzH5AcYkepoT6dKPwCGmeJmr4W/0LmFGb5Js8hrlA95i + xigNNkVZcDxDcskWO36YOpTfZtnz4+Qh/DDRju8VJgzk3+P78+P4AfwycRC/TpBjJjjwYprE9JN9+KHV + hbuFA9kmOfV8f0MmeJtS725JmcdQ8j3dyPQOICMgmMzwMPLioihT5lnLSKEqUxmCT8jOojI3m4q8bCrz + c6jOz5LtSVSmRNPwSgCuiQmgOtqfhqQQmrNjaStOZqzEwuPqspjakse0donVmtOY3ZrGXIXmZGY1JQmJ + zGlLZU5nJlPb0hlbn0xLdRL15UJZOg1luTSVF8h6MdXFRVQWFFElVOYXUl4g5OdTopCXT7GUCgV/U1hA + QUEB+XJcnuxXyJX658p95OXnUiTbS4qKhAL5/vIpzM+T3+VSqGwvLKJcuV6xXLe0lKqiMkrziijOzaco + J4/C7GyKsnOEXEpy8yjNL6CyqFiOL6WmrJxqhYrSLsq7qJB7+JsyhYr/UFpeJJRQUirLZSWvkGsKFeWV + XVRWUinUVFVTV11LQ00dTdX1EqsKtfU011bTVKNQSVNtuWyvoK2pRmxNLR1CU1MF9Q2l1DUUU99YQk2j + 3F+dPJ+iJOIS/HFzH4C1rRba+m+iofc6mkZvo2H8Nuom76BpLBi+rULb8B20Dd5GV+kpbPguGoY9VMNF + K8KvtlEvdIx6YGjcHSvzd7E2fYuh1m8z2r4nBaP1JQ+3Yl6KOQuTDFieacaSLCumiZ1okPgzM8SQlOj+ + xEQPx83TCgur3pjJeWxN38VpgDr+HuZ4u5vj4qSDo4M6rq6SC/joMHqMLsGhBoRFGhIZY0RMgjEJKWak + ZliQnqUIwDYqsnNsycrppyIzux85Qm6utbQRG5XwW1rYn9KC/pTl28o7tZbSRtqbLTXFdtSXiF8uljhe + tpWnm1OUaEJ+ghFFcq2SJBNKlVKuXRSlR160DjkS++aGaaoE4OYwXSZI/aYH6bMg0IAVQUZsDjHnWPRg + zkcP5dRoK/Y6abLZ5m02WLzOWuNurDboYofNa5wc0YtbYiu+SXXkuzQHPosbyNMIS75KsePrZDtVD+Bb + rurcGNqLO3a9eSTP6gN5j5/a6vCltR5fWenxtbk2X5vJNlN13tfv838KwJo92K7+Fhs13mCzfnd2WKlx + cLgRx9ysOOJhwUFXY/Y767PHQYsDThqcGKXDtWATbkWIPYww5Fy4tkr8PRypw55wTbZLHrI9To/tiYZs + SdBnk8SKW+O0Vdv2JhpxQN7P4TQLjmSaS6xryvEcibWz9QQdTko+fj7LiKtZ/biWbsvlBBsuRtpwOcSG + KwGCrzVX/G24HjGUa6lOXCxy50SNF3savdnSMYbds5I5tr6OC0fnce3yFu7dO8KDh6d59OAM924e4/bl + fVw7s4mD22ewcXkTC6bmMX1sKrPGZzG9M1d8diET2oppby2nqbWKuuYaqhtrqG1uoKmjlTkL57HnwAFu + 3rvP4w8+VPUA/uLbb/nyu3/z6Zff8tHHn/H0w4+49+ARp8+eZ826tXR2jqVcvuWGujqmSM6+YPYsliyY + z+Tx4+Q7rhV7UUFpUamKYrEhCuUlFVSWyndfWk5zQxPr1q7h7u2b/PjDt/zy8w/8+/uv+PDpQ65dOacS + ga9fv8rNWze5dec2N2/fUv0t4c7d+zx68iHvf/AJDx59KPsfcuXqba7duMXjx4948OAONyT/v3LxFGdP + HuDI/i2cOLSZq+d3ce38Vu5e3caHD/by5YeHeXB9MycVAXhNI1tW18jza+bA1lqWz02go9KJJvFRHZIz + TMpSevTasLHZnq3NQ9lS15/NNVZsE/a1D+Tg+GHs7hjMtqaBrKu1ZmWFBcvKLVhUbsX8SltmSz4ztXwQ + nWWDaSmRmDh/IEWZ1qTEGRIVqkXIaDWCfPsSH25BdvIwcqUNpMcNJS12MDnJwynIcJDjnclPdyArdRiZ + KfakJg0lLNgcP08dPEb0xM3hXzgM7IaDTTc87LoR5vI6RRG61KdZUysxTGm8DRnh5gSP0sJdbNfwgd2x + NH8dU9M3Xg3//C8MDd/A0OAN9PVfk7jpTcxMemJp1peBtvo4O9oQGOBGgcThnR11TJvSwbjOJtrbG2ht + rWfcBIlFF89n45YNHDi8j5OnT3H0+HF279nP4iXLaWntoKysVo6fwMrVGzl+/BwnT5xnr9ILePk6WpvH + kZqcjb9fsErsHeHsocJlxChcXTxVy64jPLuQdQVF9FWhiML/IwD74Orug7ObIgJ74+LuLevujHJ3xddj + BIGezkT4DSMldAg5kXYURQ6kJNKW4jBLioKUHsCGZPkbkDHagoLwYfIM/ZlcmsSE/ETZ70n0MBuiBpiT + bmdB3uB+FA8f8D8CcHVwBBX/hwCcL3FtAfHpBcT9Q5cQrGxPShXSi7p4JQorwz0r8/4qKPtTMopIzsgn + NimLyLhUQiISCAiKwM3Dl+H2ruJDXPH09CMwOITY6HDJK8IpzgijMieIhgI/xhZ7M6nMg5m17sxrGsV8 + pVdoZyhzOmKY0pxIa1XCfwTglGSJx3NeCcCCquwSgBNeCcBJyVLnpEy5t2QykmMoSAuXXDOYmvxAaouD + JMYJo74qkrqaBGqrUygXv1xakCqxSDqlpTnU1RfT2lLOhHHVTB1fz4wJTcyf2MqSyR0sFma3NzKlvorO + 6lKVoKqIq61lBbJeIhTTWZGnEnsn1ZcxramKWe01zGyrYrLEBOPrZL9yjIpSJkjsMFXsnsK42jI6qorp + UARkicUUxpbl06H0HC7JkueUybiSTOZKXLGis55lHTXMqitkXGk6bZK7tRRLHFeSoRr+ubo4g+rCDGqK + Mqkv6upV3FKcq5qnWJlzWEEZerq9rJAORQyW7S1F2SqUXsFdPYMV0mkqyBDSukTo4iT5bRJNJbHUFYRT + kxdKjbxHhdr8IBqLw2guDKOlIIK2gjg68+KYkhfNtNxQZuf5MLfQjYXFziwVO7aywZnVbW4sG+vNwrYA + ZjWEM7EqhpbCKOpzJOZV/rFR3nu9qoyT9SQacpOpy0ymNj1RJQDXpCVQI3G00hu4LFFi6oQoSqQsSYz4 + h+KEcErjQqlMCJW4OYyxEkdPyY1lXkkqCyrSGZcbKd9SEE35sUySWG3JdGUUqklsXjKNPaumcmTteK7s + nMq9/TOF6Tw+NI/Hh5fw6Oha7p/YwqPzB3h45TiPb13gwZ0r4hOucuveTR48fczjj5/y6KP3uSP+4/b7 + 97j+8AbHzh1l/+FdHNi1lYPbNnJs9zZOHtnL0RMHOHnuOOcuX+TKNTnP5SvcuXyB+xfPcP+0+IXju3ly + dBtP96/nyY4VPNi8iBtrZnNh2VQuL5/G7fXzuL99EU8PreHp8Q08PrGZu8e2cH73Wk7tXMfJ7Rs5vXsr + F/Zs59yOLRxYtYgt8yXnnt7MprlN7FjYyrZ5zfL95dGQFUZWqBsxPsOJHeNM+BhHvNz7M3yIMVYWalj3 + 02SwnRFO9lb4eTkQGjSKqDBfYiL8VWV4sDfR4V3rcdFjiI8bQ0J8APGJUiaOlrw6QHLt0cQkBxKfHC7f + bTQpafGSZyfIcpzk3lGSg4cSGR1ChCIEC9HyLmOSoohW5v/9/xKAzSx60M9ajcFDdHFwNGWEiyWOzhYM + HWaE3SA9BvbX7mKAJgP6azB4oB5D7fSxH2KAoxzz9xDQigDs7WouAXE/PF8JwI52auLQeuE8uK+sazDK + WRvPEToqIXjEUHWch6gxYogmLsM0VLgOV8d9eG9G2QsOvfB27k2ol7ZqjpMcCdJLs+yoEsdbJoFzYboy + vI0+SSEaJAdrER+oRVyABrF+fUn0UydD1gvCDKmIMaUyzoyySANKQnQoVv7oLBQHalM4WpNCPw1KpKwO + 1KMp3JjWSBOaQ/VoCNCixledptEadATrqQTgyeEGTA3TY0qorkoAVhGi3SUAS1A9LURTAmqNVwJwH2b6 + 9WK239vM8unG0oBubInrxtmqt3g6U5OfNpvx10Ernp8SFOFX4aSFbDPit+2a/Ly+N18v7sNHk7S52aDF + ycJe7Ex6m3VR3Vk45h0muL1Bk0M3ah3epGFEDxrd+tDkrkalY3eyrV8j1bwbuVayf1A3pru/ycZwdU6k + GvKwqB+flVvzfaUlf1RY8aLMEkrNocSCl4Wm/JihJQG8Op8mqPFBxHvcC+zOLf+3ueL9Jjf83uT9yPf4 + MlWDH/MN+L3UmN+LTfgl34Sfcg35LkOfr9N0+SpNgvw0Tb5IV+eTTDU+yunNJ0W9+Ubu45cJ8rtZJvy5 + 0Jy/VljwfI0Zf64zVw0r/NuGfvyyuR8/bevHzzut+WWvDb8esOa3g7b8tk/KXRb8tF3quNmEfwvfbzDl + m3UmfLnCkE8X6fPJHG0+m6nNFzN0+XaGPt9ONeT7iUZ8O9aQz5t0+LxWk6+qNfimUqjQ4Ovyvnwp5bc1 + OnxXr89nVRp8UKLGw+z3uJvWnfuZvXiQq8PNHH0uZOlzNN2AA1lmbEsz7hKAQ/vQ4P8O5X5vURb4LpWR + faiP16Ij2YApqSZMlURjWoIhU6SddkZq0hqiRnNgL1qCetIe3otx0b2ZIs95WrIa0+WZT09SZ2q8JpOi + NGkO6EGVx5tUuHSjzv11On3eZn5Ib0lctLsE4GRNDiapqQTgownvcCLxLc5mvvOPAPzv9Y7/KwB/FcWz + byK6BODP/Hj+kTcv3v9fAfgfEVjZdt+RF7eGqwTgF2f+IwD/scWC39aa8+/Fxvx7nhE/zzHl67FaPC3v + zo2MbpxJ6Mbx5G6cK3uP+xON+W6jA38cceflJS+47y91CeDll2N48WMoL3+N5MXvsfz5WwK//57IX7+l + 8PLHFF48jeD5VV/5Htx5dlDqtd8RznjC7RB4GgMfxvP8aSy/3I7gx7Oh/HoomOfbQni5KpQ/5wbIO3fn + cd0QrpYoQ/wac6ZchwvyXG5MMeODFYP4fpcLfxz34s/Lfvz+JIzfvojnr+8yePZjMc9/a+DZn508fzmD + lywGVsOLDbx8sYUXL3bwQtUL+LBwXPafeiUA75XlNbJtBs+fNcg95fDs35E8/0ru9VO55w99ePnYg+c3 + XPnrjBs/7h7JJ8tHcG/aCM5UD2V3ji2rko1YnKjFwhQt5khbmJ+u3SUAF1urBODFxUNZUGTPrMLhTMuz + Z3zmUAlmR7BkXDTr5+ZzYG0rVw4u5OaxtdwRR3vj6GaObVnC7I5K1bCU6ZFeYjtjmNxRwtRx5VSVJorz + GSnOZyRlhcmsWDaT9WuX0tJcR0Z6Cjk5OUyaOJH9Bw9w79EDPvv6Sz796guV8PvBxx/x2Zdf8NU3X/PF + 11/wwUdPuStJ2+UrF9m0aT1VFWUSvEaRKedRerAumDOdyRPaqJNArjA7hVoJ2qZNbGfx3Om01VeTFhdJ + QrgEncX5bF61jJsXzvLo5hU+fXyHr57e5d75g5zYspADS8eyf2YpBydncLQjllMtIZyt8eZE4VBJ0G24 + lG/L3bL+fFA3kE8VAbjTkc8ne/DxFB8+mObHBzP8eTjZm2ttLpyqlKRPnu+BXGMO5RlzRMqT2caczTbl + YqYJl7OkveQacL/UhEe1NjxsGsL9TlfuTw3g7PjRbKx2Z2LqUAoDrYkYYUDQCBOyot0Y15gtgXAVpYUJ + jHQdIAnZexgZ9RBfakhQkAsTJ9Uyf8F4srOjcXayxW6AMTb9lH+msiEhJojFCyQ4uXGBG1fPs33TBhbN + ncuyhQvZuHoFHU21BPm4Yt/fiKHW4kvFX4f7DCQlzIG6vGCWTi5h1zIJyKZWsHBsLofWTuCDy1v4+MpW + Lu+ezd5FDeycUcGy2kTqgobQ4NuPTZJUnG4M52KtP2cLhnM8wZhTYn/OxWpwKVad62LPbifrczfDmPtZ + RtzO0FQJwDfErl/PVudqnhaXVWKaMSfyTdmfacQ28TPrkvRYnqDDglhtZkVpMz5IjSZFAPbtRd0YLbm+ + HtUhepTJcqGfGnk+vShW5kePMqYpzpzGGDPqo01oijGmJd6MsSmSyKdYUBWmRXmwBpWhmtRE6Kh6/rZI + Et4ab0Sb1L090URFR5L5/wrA0UZMjtFnWrTUJ1qDeTHqLI3ty1bxWfvEvh8pMOJMiRFXK825XWXOzRID + bsi93czR4E6uOvcUwVfWH+QraKvKe9ka3JRnoYwSoUwVcCH2X9xIEd+R0Us1goTSo1fp3ftRXi8VH+b2 + /B8B+KsyHb4uFX9VosXnpTp8USa2u1yZY1hPfJAWd3OUXgeanBF/e1Rswv5EdQ5k6nCkyIS9eYasTujJ + kph32CjHHK6y5mTDYI7VDuR43SBhCPtKrLvm0Y3pw6qonqyJkGMj/8XuhLc4kdGDSwV9uKMIwNWafNBk + wKdtpnzWZsHHLaaqeSyvFvblZPo7HM/4jwC8KfpfLA7sxoLAN1kWLeeMV2ddgmbXXMpZxuzPt+Rk1WAu + Njtxoc2Z3UWWbMoyZHl8X+aGvsOCsO4slrosjuzJ8jg11qZoszZVk5WJarLem1VxfVkvdnBzqo5KAN4g + bWijsFna07ZUI3aKX936twAc0of5oWoskPaqEoBjNZkWp82MZD1mS3tdJL56TbYZm3PM2JljzN4cA/nO + 9eVetDmTp8M5eZ/n89S5ohKADbhbZcLtalNuCrdqTLkhXK0x46JsP1muxzF5P8cr5Bxy7L5iHXYWaLI1 + ry+b8zXYJu1jh5R7pa0cluUThTpcqZRz1Jtzvc7sP9SbCEZcqzNUzQV8QThVa8rBSrmvchNWlZizqMSK + mWVWTK6wliTUnOo8I0nKDSjNMaWqaABNVY7UlTqSn2ZHqJ+uxNO9GWDxFvoa3dBUewONvj1QV1dHvW+X + +KvQt6+aij7/Q2/e6/Muvfq8g3bf7gw20STCaQC53s5U+LtQ6TWcGs/B1HsNpklolGWFBs9Bqm213kOp + 9hpKXYgrbSmj6ciJlMQwktJU8TdxkriEeRI1xpO0qCAqxO43luaQIwlImNcIPIdZ42hrRD+jvhgb9kHP + RA0dM4W+6JuoY26oiaVgYayNubE6Via9GGj8Dp793iVpSG9a3PVYMkbaVqAFW72N2OdrzqmwIZyNHcmx + +FGsD3Nikpet1Lc/raFOTE7zZ25BpLSLYKZEujNNkrR5Ya4sih3FhDHDKZQcJmGYAfEuVmQrPYBLkpjU + XEJmYghuYqcH2Si5ji0RwaPIToukJD+JrHTxW9H+JApZScGSn0RRkxtDZWooJVFjJO8Ioy0nmfktVayc + 0saSKS0smNLMvKnC9BbmzmxlzgwpZ7WxYEYbC2eJT/yHNhXLZrcLrSxX5vudJ7Z9/jhWLxzP2kUTVSgC + sCIMd5WdrF3Qyep5HZKUK/MCd4nAy2a2CE1CIwunVjNjbAEdNeKHSyKoyB9DWV6A4E9VSRB15SHUlgVR + XuRLfo4bOZkjyc5yIUtKhcwMV1JTnEmMdyImdhiRkYOIjBpEVORQKYcQFT2U6ChZjh5OROQwwZ6wsOGE + hTgQFegsvsqbitRY6jJTKEuIJi3IjyDX4QyzMsbaWHLL/tbY9e+HtaUl5qYm0pbV0NNWZ/Cg/kSEjqGm + opDy4jx8Ro3AxkyHAaZ98XUwkXc2jJYMd+aU+bCi2puVZS4SQ/VnToIlC1JsmJfSn9nJ/ZiZYsmsZAvm + pFkyO9WUOYIyb/iiDEOWpuuyUmztxgx1+Y7lWy825JQyDHSxAaeVYZQLFfG3i8viHy4qyyW6XBAulsr+ + Ag2OZbzHmdxeXC3X5k6tIY/bzAVTnohNfdRsyJPmvwVgsbUTLARTPh4n21u1VENBP2jpy6M2DR51aPKk + U5unE/X5aLoJn84y59PZ5nw4x0yQcq6CBY9nm3FvijHXJa+6MtaI883ixxpMOF5tyPFKA87J8qUmsTkt + 5txT5nUfp/T+VQRgC640mHOk1ootyryHeVZMSBL/GmFFlr8VcW7WBA81xtesJ0GGbxJr/Bp5Vq8zfoQa + GyIsOJ07jNsVQ/lq/BB+mTGIX6fb8eNEGxU/TbQVrPl5vORz4/rx6zjJ3Tpt+aNzEEx2gUnu/Nk+gg/L + BrNf/PPSMZIn+ZrIN22hGmGgwN2ZdHdPUn38SAsOIlPpARwXTVFiLEUJgpSFiQkUJiWSn5xIYWoixakJ + FCdGURwXQrXS21di3ooIHyoivalNCKAuI5zGvBhaSpMYW53KpMZMpjanMa0hgWl1MUyriWRGbSSz6qOZ + 15LAos405o+TY1rk+NpYWqriaKhIoKEsVchSicD1pfnUFhVQU9hFdUG+iqr8XPmucilXysJ8oZCyIqGk + kIqyYsrLSikvL6WsVEERWIsoLStSCbDVFZXUVlVTX1tFTXUF1ZUSq5eXqbbXVFaqhmltFFSiqiK6llfI + 91qmokbOWyPnqykrke2l1FWUyrEVNAhNNVU0KtRVvEIRZKvkOhX/UCfUyr6/qaktV1Et9aipkeurqKJa + yrq6WhX19V20NDbQ2tQoMWoz45pbmNDawvhWWW5poLO5Xqils6Wa8W21TOpsZObkVmZOa2PSpEbGTWwQ + 6lSMnVCtoqEpn5zcSHz9hqg6IhiYvC0+4l/oWbyL7n9j/g56Zu9gYCqYvIORqcTbZu+hb94TPcHAojeG + grEsm5u/ywCbHgy2eYeRw5SOAlpUhRiLTbBhSYYlyyRuXZ1lyoocK+akW9Eu30NxjDl5yUNISXTE29ca + W9u+2Fj0ZLhNbzztdQn2siTA2xJPdwPc3HTw9tIlMEiZN9iYqFhTYuNNiZO4NCHZhKRURQA2JzXTkvQs + ZShoS9IyLUiXbQqp6WaSe5mKnTUnN9uSwhxrirKtKc62okTqVJIl30eOJVUFVtL2+tNcYScMpElynvp8 + K2qyLKmW89SmmdOQak5dggnVMUZUSoxcHK1DocThBa8E4JYwPZUAPFXi8LmB+iwLNmJzmDlH4wZxPm4o + pwL7sc9Fm22DerDF9m02Wr3GOrNurDbuxs6Bb3BulAYPxVZ8k+7I16nD+TR+IB9EWUlpzSex/STVFxtp + 34PLA7tz3eY97lj35lE/dT7op8WnlhLrWurxjYUuXwufmWry1EDsnoHE2QYSUxtockGvL0c132NX37fY + ovEvtuq/y07rvuyzN+SIhyUHPS3Y62rMrhESFzqos8tJjUOjtLkSYc6dBGuuyXM/K/d9NEaPA7H67JD7 + 3xSjxJJ6bE42ZEOyARskptySqMvWBAN2JUt8mCL5S5oFB+WdHJWY8ajkhUclBzyqxIwSw57Oldwwtz+X + su04lzKQM/F2nI8dypVoe26In7sRMYxb8Q5cT3fiUtFIyU09OdLix45Wf7ZNiGD/kkKObOvk4L7ZHD6y + lCNHV3N4/woO717K8T1LOLZjDltXtbB6fhmLpmQxb0I6i6fms2R6GUtm1rJoZgPzJDaYPXscs+ZMZubc + acxZOJe5i+ezYu0qdu3bx6lz57lw5QpXbtzkxt173Lz3kGu37kpufp1zFy6p5gHevnM3S5YtZdq0aXSO + 7WD6lCksnj+P1cuXsXblSmbL9o6WVtqaWmhvaaejtYO2ti462sYyefwk+c00lkheeuLYUT768An//uEr + vvnqUz775AlPJW+/ffOiSgS+dVMZxvMmt+/deTVq2EMePHrCw8dPpXzKo8cfCR/z8NFHPH7yIZ999hmf + fPohT99/wJNH8rub5zh3cg+njmzh0ultXD6ziZsXN/Dw5hY+fLSL+9c2cnL/fwTgA9ua2LOpkqWz42iv + dqRevp0W8e/jciyYXWLD6trBrK/uz+pSM1aLf99eK21+4lBOznDi4IQh7Gzpz8aGfqyttmBlpQVLKixZ + VCXxQ/VAZlQNYlzFIFrKB1FdPJAi+T5Tpc3EROsTEa4rMY6u5PDWZKbZk53hpBJ4UxOHkJNhT0GuI0V5 + zhJTOUjuP5ycLCmF+FgbQgONGOOjiZ9HD9zsX8fFrhs+w7oRPepN1Tdbn2Yl37StxEty7nBTQpXh5Uf0 + ZsTwntjavIVVv7exsnoXS8t3MRNbaGL8Nobisw0N3sbMpDcWigDc34CRLnZEhY+mqqyQ6ZM7mTV9orzb + Jpqa6ugY28bc+bPZsHkjew7s48Tpk5y9cJGTZ85y4NBRVqxax1h57zW1zXSOn8La9Vs5dfoip09d5Mjh + U2zbukc1N3BlRT1REQkqAXj4sBEMHeKE/XAXnBzdcHQYibOju4r/Fof/FogVRrp6qXAd6cUINy8cpXR0 + G4Wzm5usu+AusYGvhyMhPs7EjbEnN34YJUmDqEi0k3h7AJVR1pSGmpMfaCJxjDHZgdaURDvTmh3C5NJU + 6hPDSHV3JGqoLfGDbciwsyJ/sNjY4QMocxn+SgD2pzpEYuPI/4cArMzj+7cAnNGFsqygbFeJwOmF/6Cs + J6Qqc+zmqlDWkzMUITaPmMRMwmOTCZVnFRwWjZ9/sPgPbzxH+RM4JpTwyCiJsZW5PiMl91N6jAbSXOzL + +DJPJpePZFatO3MbPSRW8WN+Rwhz2qOZ3BhHS2U8pRLnKAJwSkoySWk5QlevZNUw1WldcwAnppap5gRO + Ti6UdppJelIK2SkxlGSEUZMXRFPxGJrLA2iuDqahJpS6mhiJA+KpkPiprDiVkqIuAbi6tpCmxlI6OyqZ + NK6GmeMlx5jczsoZE1k1axKLJ41l7tgWprfWM15iibGVJapySlO1UMXk+hKhlBltNczrbGKx5EmLJTaY + NbaOqa2yX+lJ3FghVDOtpY7ZY5uY1dHI1KYalSCszB888RUTFGqKpCxkUlURkyvzmV1fzLKxtUKdxHYl + sj2PcZW5tJfnyP1lU1+WTW1pFrXFGRLLZdBQnEWjoAjArf8tAMs3064IzCW5KtqLc2iXUhnqul2FrEtc + 2CHn6ijLENIYW5FCZ0U8raVRNBaGUCd5Vm2OH3VCQ/5oOX8QbYXBtBeE01kQzYTcaKbmRTAjN4h5+Z4s + KHRhSYk9KyqGsaZhOGvbnFk11o1F7b7y7kOYWh0pdYiWuDaa5sJ4IUFIUtFSmEpzQRoteek0ZCarxF9F + CK7LSJWya70qJZZyFdFdKG0tJYLKlHCxORG0ZUQyWXLa2QVxLClPZVl1OtOKY2jOlPaRGyHPPlveayXT + 2iqZ1VbGws5C1k3J5fDiUi6srebyumpubmkVOrm2bRoXd8zj/K5lnD2wkfPH93Dm1CHxV6c4d/Ui1x/c + 597TD7j/wfvcePyQKw/ucP7GFXYe3MWWbRvYvnEtO9ev4eju7eIL9nH0+EGOnzmumvP+0pWrXL1wlRvn + L3Dz3GnunD3Og7OHeHxmPx+c2sPTY9t5dGATt3eu4cqWlVzbupo7ezZx7+BWHp7YyaOze3lwfh+3zuzj + 3CE5//6dnNq7l7MHD3DhwEHO7NrDwQ1r2b1qETuWz2bPqlkc2jCPo5vns0ny7kl1uRSnhJIY6klUkBtB + o53FTtmpRq+xlHjHykaXAQOMVdMAenrYEzTGk/AwPyIjRqvK0BBfKX0JC/UjQrZFREoZJftj/FVExMpx + caMJiwsgMjaYqLgw4hIjiZV8RyEmPrxLAI4RuxEdTGhkIKHRQUQq2xPCVaJv+H+R9N8CsKl5D3EgfRg0 + WJdhw41xcDTD3sGUwUMMGGiny8ABOtgN1GXQIB1Z1mKInb5KAB42WOkFbCBOqGsYaGUOYF83S0Z72uD1 + XwKw0vt3pL04LBddfEbq4+2q948ArBKBByul5qt1NQnMe+M+rJfQg1EOPQhwVSPCX5vUKDPyUqwpy7Gl + PNeWEnHsOUlGpEbokBamS2q4AUkhOiQGapE6RpucUD2KJAgvjzahQgLx0gh9imVbcbDS+1eC4YCu+Qfz + ffpS7KfRJQBHmNIWZSrBsUGXACz7GwM0VHMAT4owZJLS61euMSlYW1VODtViaqgi/GowPVRTVc4IVGdG + QB9m+vdmln9P5o5+h/n+3VgT1o096W9ytakHn83X47ftljw71I9nJyx5fspCxYsT5vy534Bftmrww5r3 + +GzuezydoMn1ak2O5fRge9xbrIt8V873DuNd36De/jUqh71BpdO7VLr0pHJELwqH/Itky24kmXcjz7ob + LQ6vs8C3BzujtTmbZsiTYiu+KLfkxypzntVYQbUlVP2NBb+XGfHvQj2+ztXl80xtPkzS4P2YvjyIeI/H + 0T34OKkX3+Zq80upMb+WmfBbsSk/5ZvwQ44RX6To8UmCBPiJWnyWpMmnyep8lKbGB+ld8x9+WSX31S73 + PsOUvxZa8GyVNS/WyzPYZM2zzf35c0t/ftvWn5932PDzblt+3mfDL/ut+fWADb/vs+b3XVb8us2MnzcZ + 89MGYZ1cd5Ux3y4x4Kt5enwxXZMvJqrzWacan7f14fOmPnxZ35evajX4rEqdzytkubwvXyvDPgtflfaR + dQ2+q9VVCcAfl6vxILc7t1Le5FbyWzxUhv4s0Ff1BLyQacixdEMOZpmxPd2ElUn6TAnpTZO8i9qAd6iP + 6EVzoibtKTqMT5XEKkURf/VUTI3VYVxEX1qDetAg7UGhNfgdOuWZTo7vydTEXkJvObY3U+P6Mjlag/bA + XtRIAFg1UhGAX6PT+y3mBvdkY5wGe5K12Z+ixaHkvioB+Ej82xxLeJPTGW9xr0GSqzm2/LTRmWfH/eBe + OHwcCV9HqwTgP74M/o8A/NTjH8H3bwFY4W8B+OVte15cHvJfArA1f2yRd7DGjB8WGfH9XEN+mGHIZ63S + Por/JYlPN84ldeNUajcuVvTi0RQzvt84nD+OjoRLo+CB1OcDX55/7s/z7wN58VMYL3+O4q9/x/DLD1H8 + 9o3U8ZMo/rw9mj/OePDXURf+Ougs38QIXp72gluh8CROzpHI8/fj+e12ND+fi5D2Ec6fm8P4c2kw30/2 + 5KMmB24U23Bakrbj0o6P5KtxUt795Q49nsy35usNUqdD7jy74MNvDwP59bMY/vwmlWf/LuD5r7U8/7OD + Fy+mAgvh5Qp4sU7YxMsXylDQe3n+UpkL+CgvOSHHHBP28OLlWp69mMnzv5p4/lsef/0QzV+fjeGvp778 + dd+TP6678uPJ4Xy7V5LldfY8nDucG+OcOFE2nK3pNiyLN2RerDZz5PuZHqfGrGRNlhaYslySliXFA/4R + gOcUDGd6/nDGZw5hgiQUS8YrAnDePwLwvdObeHJhtzg0cbC7VzGpXoLSYHcifIeL/RxDW10WbQ3Z5KQH + 4zPKDnfX/qQkBDFjWhvz502TpCQFX59RBAZKsFJTw6Ejh3nywVO++l75b+Jv+OSLz/jiq6/47ofv+fHn + n/nhpx9k/XPe//B9bt26waYN6ynMz8Xby50Afy/KinIlYWynuaGS3MxEIoP9yEiOVvUEmDGpg6qiPIJ9 + PfF2cSQrMZYNyxZx9/J5Ht++zocPbvHRg+vcOL2XY5sXsH/pOA7MqebQtAKOjU/lVFs0Z2oDOFbgyLGs + AZzPH8DNElseVtvyYfNgPu104pPJHnww2YvHk715MMWXm50eXGoewQlJ5vYVWLBLvutdmfrsyzTgSIYh + JzONOZdpxMUMHa7k6HGvzJRHdXLOlmE8GDeSO1NGc2b8aLY3+TIzf4QkFMPIDh5IWvAQqiRwmz+1ioWz + m6mpSGX0aHvsBumLb9WXhMaamFgvpk6rZ+Gi8RSXJMt+Z1yc++No308Cg2ESiIexbMlM7ty6KInvZQ7t + 28OG1WvYsn49e7ZuZmpnGzFB3owcYoZDfx18nE2J9B1Aerg9jfmBLJ9UxP4VY9k6t4bVU4o4sm48j86s + 5qML67l3eAEn13RweEEdG9syGB/vwqTI4Wwp9udUfTDnqr05mTeYE0nGnI7R5HyMBhfF7l+N1eBGog63 + xXeoegCnKT1T+3AtvQ9XM9W4kK3JuVx9Tit/LMkzZU+mCZtTjFiZqMdisX3z4nRVoqtiz+p9e1Lv34eG + IB0aQw2pCzekUpaVXsCKCFw6RotqZcirKGMVtZFGUhrSGGNMW5KZioYYA9mup5r/tzHWUCX+/i38diSZ + /kN7ohkd8aaMjZP1aGM65Tz/LQDPje7Lkhg1tst7359ryNFCY86KT7tcbsrNClOuF+lxLUeDm7ma3MnT + 4G6+5j/cK9BScTdHi1uZ6txI7c2VRKUX8NvcTO0hz6kPT3K7hnT+pKCv0EfFx/m9VeLvJ1J+XqKpEoC/ + KdPl61IdWdbjy3JDvqgw5oMiffFD2ioB+EqmJmfS1DmS1Jc9CX3YrwjAxSbsy9dnTcJ7LI1+i01ZWhyp + UQRgO47VDlCJwAfKbNmSbcySiJ4sDHmbxcFvsSLkTdaFvcHO2Dc5mvouF6Qetys0VALwkwY9Pmox5uNW + U57UG3CzVNpAdk9OpCkCcA9O5qiJLVVnR+K7rAx9g2Vhb7MuUZ1tabrsTNdnf44JR+V7Ol1qy4WawVxq + HM65xmHszjdlfYoGiyK6Myf4TeaHvcVC8XsKy2J6s1piBAVF/FWE4WVRvVgTp86GJK0upO0p4u92aX87 + 0o3ZkWLMlgQjlQC8KLgXC8PUWRSjLbZTSyUAT5VyepIus9KNWChtcU2mqWqOYeU735elx6EsbY5naXBa + 3u2ZnL6cz1XjUoG08TJ97lQaqeYBvlHdxXXhSrUp5yuMOF6qy8EibQ4Uaovd0Ga3vP/t0i625WuxRdia + qyHrWuyR8x7O0+aktJ8rEmNdq1V6EZv8h1ojwUDFlToDLtUZcbrGmENy7W2lcl+FpiwstGCWxGmTS21o + K7GiSp5heY4xpTnmVBQMoKHciZoiJ7HndoT56+PuqEZ/y7cx0OqGVt830ezbE42+6mioa/0jAKsEYUHt + v9FQUwnAvdXeRlf9XYaYaBPpNJA8H2cq/V2p8hpOvacdzd52tHj9h2ZFDPYeTIPPUOqEhmAXiXv8GSeJ + aFtxHDU50eSlhpESG0BSxBjyk2NokiR6bG0ZRamxRPu54WPfHydbYyz0+mCo1wtdo95omfRG27QPesZ9 + MTfSwMpAg36G2oImtkZ9GGLUHX+rd8mSnGKChyGrA6zYGST4GHHA25hTQQM4E+HAiRhXtoY5MtO7Px0+ + AyX2cmFWZgCLi6KYnxnCjCgPZgc5szjSnRXJfkwLd6HCw5r0EeYku9uSH+lBR0Ua09orKciKFT85HMdh + YqPdhxEaPIq46ACVrU5KCCYm0peYcG9SJUErSA2hPDOMssRAyT38qYoLpSMnhfnNlSyb2My8zjpmjatl + 5oQ6ZkysY/rkeqZPqmfGlGZmTm5m9pQW5rxiriISy/YFU1tYMK2JxTNbWTq7rUsIntslBKv4e3joV6xd + MI4188eqROCunsB/C8HK3MDNLJpWw5xO5Y8wyn/AR0vbCv7/0faXUXYc6dY/qDZbDMXMzFwqUKmYmZmZ + mVmlqhIzM1rMFjNaki3LMrPddru7rxttt0n+zZNH6r73vu9/zcyatebDXpGZJ09mnsiI59m7dkWEaKkI + eV+BlOcFUFk4V4WKAn9K8n1UKC4Q5PupUJjnK3zBi8xUD5XpmxjvKOLVXlXGx9kTF2tHbIytCtHRdk8Q + qUx16Cw6zp38uCCapD10FubQmJlCfmQw0T6uuFgYYqqrjPzWxkhPG11NDTSkfU6d/DKaatNxsrMiISac + 1sYqlQEcGuiDtYkmFroTmW09i/S55rRleqgM4G1tIWxv9GVtkR0rsy1Yk2vFqlwbludYSWwwF5gKvzJh + eZ4g35hVRYaslTywsViHrQVq7MifzqFiNc5US15rMOSWaCLFBFZwp1767FMT+HadAm1u1WqpymtV6lwu + n8aNqhncbdDgjRZd3ukxEhjwXrcB73bp8kG3nmoU8KeDRvx+vglfj5vy5Xx9Ph7QVI0C/rcB/P6g2pNR + wKM6fLbYkC+XmfDFchM+XW7831hpwkcrTHl3sQEPxvS5P8+AWwMGXJf7XWrT41KrDje69LnTa8Dr/Sa8 + O8+Kj+bb8vE8G94dMOdBnzlXu6w42mLJlkpzFiqjHtOsqIq2Jkd0fJKbAdGmk0gxfpZi82fpcJ7IpmjJ + 88I9327248seb/6x0FX0nB3/HLfk76Nm/GO+Od+PikaQ7e9HTPnXPMGQicCMnwatYL6LwIvfBj35Y4uT + 5DYLdiUYsSLckOFAM5p95f5+rhT6+5AzN4Ds8FDR9OHkxUZSEBdNrmznKIiR7dgYsuOUtX+jyU+IoiA+ + nLKECBrSo1XTP9fGBVAT60ddYgC1aUHUZofSVBxDR1UCfQ0pDDcmMq8+hnnVEruqQplfG8bCxiiWdiSw + si+dFQPZjHelMdCSSEeNMiViPLXF8VQXJkvsTVHFtZq8bGoKclWozsuR/Ryqc7OplOPlgkrVVNF5VBTl + U1FSQGVZEZWqKZBLqKooo6q8lIqKUiqrSqmuLlON/m2oraOpoY6GemW7mvrqKuoVA1nQVFMlqKRZjjcr + 29WyLWV7Q+1T07dOoGzXyrFqFdrqq2hrqFGhvVmOCTpa5JyWOlqba/+DFkGzHP83muQ8BY2NNTTJNZ+g + jkYpW1oa5JyGp2U9ba2Ncr1GleHc29pMf1uToFHQQF9bHX3tNYJqBrtqmdfbqJouctFYJwvGOxhdoKBN + hZHxFkYXtjE4XEtdfSZRMW64eehjaTsdc7upmDvOwOx/wmEqFvZTsZTPFFjbTxPMwNJhhupcS6dZWDnO + wkb2HRyn4ek2HR+3SYT7T6cwRoe+dBM2lNqyu9KaPeUmHKi24JUaGzZV2rCw2JrOAhtay72oKvUjQWLc + bE99vJy1CPTQIU7aa2qUNQmCyHBjQsP0iYo2ICnFhIwsU7JyzQQmKvM3O8+YnAIjcguNVcgvMlGVqmPC + aRTk5BqQl6dPUb4hpfJZeZGpxGJT1WAHBbWFRjSUGEnMNqWr3pL+FlsGWu0YaLalT3hXb5UVveUW9Jda + MFxoruLLPRnCpdP1aE7ToSFVm/okDZqTtFQG8LxYHcajtVgapc2GaD32xhtzJt2WG5nOXImz4swcPU54 + qnHCbRpHHF/ggM3v2GsxgZOuL3BXeMdHcu43hW58nevM5xk2fJJszkeJwh+lPz8M1uCW60RuWD/PHfOX + eGA+mUdm0/nQXJ1PzTX4ylybP5rrqPC1sQaf6qv9XwbwRbVJHJ/xAodmCXRf4pjE+ZPuepyVWH8qyJRj + /oYc9tVhn+dMDnrP4FSgJjcSTbifZcnrUvfXRRdcyNbn1RzhVlny+zK12aMYvwUG7CrUZ0++PvvydDmQ + I9xS6v9YnvDqIjPh2KacKzfjvPCu8xUGKlwUfnu5wlxiu4PoHWcuFzlxUX73tTxv7hUF8G5xCB+UBPF2 + oQ9vFHtxp0qZZcqX8z1BHOsN5pX+SPYtymbf+jq2b2pl0+ZuNmzsZcOqLjav6JR83cmuVa1sXV7DhoXF + rJmfzeqRHLYuqWbb8ia2rWgXDtDJmmXCDVYMsXrNOGs2LGPD1vWs3yLYvIHNO7axY+9eXjl4iIPHjnPk + xKscOnaKfYeOsmfvAbbv3M3GzdtYuXot4wsXMzJ/PqMjIywcG2fVsqVs27SRvTt3sHLJEgZ6eunp6GJ4 + YJiRoRGGh59gnmDJoiWsX7OW/a/s4fata3z84SM+/+w93nv7ddU/Lz968xav373CzRvnuXHtAtdvXOb6 + zWuCG9y4dUtlRN+6c0+1/u/dew9548F7PHr7I959/2M++ugjPvr4Az756D0++eQR7797j9duneHaxYPc + uLSPW5d3cffaNh7c3sZb93bw5ms7uHhqKYd29XBwZzunDvVwfF8zG1dkMNDmRXu5Jd0lJgzL+1wufHpT + ow1ba83YJNp+U6nw93ZjLow6cnWJO2fm23O034oDPRbs67Jgd4c5W1rN2Cjaap3oquVtDsxvEQ7c5EBr + gyPVVTYUFpuRkW0ofV6P+CQ9MpRRusUeFBd7S592FjhSXOpKRZUHVQpnl7K8yp3ySk/KKjwoLHQiO92S + 1AQDEiPViAmeSITvM8T5P0N2xEtUpWrQUWBOe4G18EoLihINSQhWI8x/BnN8ZuDsPBl7B4HEPTu7GVhZ + TcHMdCJGRi9iKHzZVPj0EwNYnzm+LuRlp9LbKRxw6SJ554sZ6u+jr6+HRUsWq0aFnzx9mouXr6qW/Xrt + /huq93TpynX2vHKQhYuXMzg0xuIlq9i3/yg3bt7j+rW7XLp4Q7Ue8O5dB5g/sojC/HLVNNAO9m5YWzni + YOemMoIVQ9jDzfcJPJ5AMYX/n4xhb4Hn7ADcZs/BzccPdx8vPH3c8PN1JSTAjfhQT3LiPGgs8qC91IXO + ItEhUtftGbY0JplTHWdCaaQJFXF2qumf51WlMVqdJ5wgnKzZbmR6OJHr5kCRg+X/gwEc8f83A1g5rhxL + zSohIS2XxJQsFeLiU4mIiBe+nERykjKqL5v83EyqilNpVKYLroqivz6E0ca5LGzyZWWHv8oAXtUbyurB + eOEqacJVMuhtyqChPI2SwkwKhHfkFZaTV1D9ZE3i/DqVAZxT0KhCXr4gr0Y4fRklucJNRJs1lyTQXR3D + YGMkQ63hDLRH0d0eTXtbEs3NaTQ1KlPRF1CrGMB1ZTS1VNDVWcdgfxPzh5pZNNTGinkS28YH2bxwWFWu + nT/IqpE+lg12s6i3nSUDnayU/dXzeyTGdbBqXrvEu27VqOEtS+axefEQa0QvrZgn2mhAtJIKXSwf6lFd + Z8VwL4v72uX3tjDWXs+CpxhXSsVQ7qhjYUc9i9pqWS7bm+SZNg93sryznrHmCuY1lf3HAO6SsqNBWf+3 + RDhescr8VUYpq0YAPzWB/9sIfmL8/tsEHm6oYPjpCGYFI60VjLWWM9ZWKihmflseI03CH+ukTqsi6CgP + pqM0iM6yQHoqQ0QrRzBUEyVtM57RimQWlCWzpDyB5eURrK2aw4YqT7bUu7BN4s2uLid297uxc9Cbjf1z + Wd0dweK2OIbrkumtTKW/JkueN+cJavLory0UFDOorFlcmk9HUQ6dxbl0CQd9gjw5pkwRrawTnPYExSm0 + FCXTXpRET6nw47IUloimX1eTybbmPHZ0FLK6KVM0bax8HstwfQ5DUofddQXy21Loq4phdWcCB8fSObc8 + i0srcri5voJr62s5t66RE+vaObi2j1c2jrN32wqJF5vYf2g/R8+c4uy1a1y7e59bb7zBjdfvc+W1O5y7 + epndB3azY/sm9mzZyIGtmzl7eD+XXz3OmbMnOXNOYtXFq1y9dIPrEoNuX7jCnQsXuHvxDK9fOMnDS8d5 + 78oJ3pXy4dlD3D3+CjcO7OHWwX3cO3GMN+S+D6+c4dHN8zy4eZZ7185w89Jprp09y9XTkrvOXOSW4Prx + M5w/cJDTe/dw5pUdXDiwg2vH5DqnXuHcgU1sWjxAv9RDVX4KaQkhhId44+vvhKOLKcZm6piaa2FtbYCj + gxn+fi5EhM95avqGq0xfZVtBbGyICjExgcSITo6NDyY2MYS4JPksJUyF+OQIElKiSEqLVZm+qRkJ/4Gy + rxjAcYmRxCRFkpgeR1JGPAmZ/xvZJVl0SX9Yv30dEywsZ2Bnr4GLq77KAHZ1NVaN/rWz18bGVgM7W83/ + GMCODloq81eBm7OUjjp4Ousw211fNeo3Yq4V0SF2hPjJD3XXUZm7vu5qKtM3MtCIqCBDQv2fGMC+rjP/ + LwPYy2kqs52mCETUO72Er/OLQrQnETV3OhmxuhSmG1EhgrGmxFJgQZkQ5qJUHQqSdChMMVCZwPnxOhTH + 6VKVbEB9qolqBLBiANcl6VMvnzck6FMnxLciXJ2SwOmUzZ1GdYgazUKCu4S4KgZwf6I+3TFadESo0Rut + wXxl9K9cb1S17u8sgRqjMeqMx85ikWL+SrlMMX/jZgmZns6yiKksD58qonYSa6NfZHPMsxzIeI7LNZN5 + Z54a/7XZiJ+PWfGrMgL4kjm/XTETSHlJxPIJbf65fwZ/3voiHy96nvcGlT8mzORMwUvsT3lWxPJE1oZP + ZL7v83R6PEuj63PUur5IjfuLVLu9RLHdM6SbTCDTbAKVdr9jdM5L7JBnO5utx/1SYz5rsODPzaZ8127G + 404z6DRX4TfB425Lfum15LsuU/7ebsp/NRnxTbU+fyjR4Yt8Nb4qVOebMnX+VqfL902GfNdoxD9qDPmr + EORvinT5LFOdj1Jm8knqLD5NVzCTj7Km8UH2RD4qepkv66bxp24Nvl+sGMDy27dbw357fjvkwG+Hnfj1 + iBM/HXOUOrDn+1ft+e60Ld+dseaHszYqA/jHYxb8eNCEH/bKvXcZ8P1OI/65xZC/rdPjL8t1+K+F6vxx + eBpf9Uzmi+YX+azueb6seZmva6fydf0M/qCgZhp/qJ4mv0vKmql8I3X7104d/tKlpzKAHxY8y/3MCbyV + +wIflMrzV+rxtvy+10oNuVxsyNmnBvD2HD0WxE2hK/Q5OqNeoi9tGsP5mowUajNeoMPCHC0Wqv4grc4C + qZN5cm5v5It0hj4r33mWvqjnGE54kbG0l1mQMfEJ0ieySK6zWL4zP2EGHUHP0zrniQE8FPICy6MnsiNl + GkdzNDgt9zqbP4tz2ZM5n/k85zJ/x+XCZ3mvT0TVWnt+OOjLb9ci4N0Efvsymd/+lMLP//XEAP7Xl6FP + poD+JIDfPvYHxQT+0JvH73v9B78JeNuD3+658viasg6zHT+dsObH/VZS76YqA/i/VujxpwU6fNo5jbcq + nuH1wgncyf8dN4qkDltm8fESc/66z5mfL8yGu3PkWUJ4/FEgP30ZxC9/CufxX2L47dtEfv5jIn//fQx/ + /ySa794O57vbc/jhvDc/nfHi59Oz+fG0L79eC4U3E+VZs+GTPH77KIcf38rg+xup/PNUMt/tiedvq8P5 + rNeTt+psuZpvwKlMNV7Nm8GJgpc5UylitGMm7y8x5g9bpX6OefPLjSC+l/v980uplz/m8MtfK/j1u1Ye + /9jPr7+MwW+rBJsE2wV7+E2ZCppjUp7i19/O8lhl/iom8Cl+kc9/fbxSvjfAL9/X8PNfMqWeY/jHO4H8 + /Z4f/3XZjc8PW/OhtPm319hxf8yeW71unK12ZW+2JWtFQCxJUmdxqhpjSVNZlDGddWUGbKpVDGCH/xjA + q6o9WCoCYkxExfwKT9YK+du+uIjjWzq4dWIl793cz+evv8rnDyQRnntFiEkJcQHOhHhZUJgWTG9rIT3t + ReRnh+GjzPTgJOIlIZAxZfqWpfPJSE8Uou7IHH8f1SiFcxfOq0b9/umv3z4xgf/8J/7rL3/hH//8Jz/8 + 9CM//Pg9f/nbt3z1zVe8/8G7HHhlL+WlRXh7ucn13SgpyGLeQDcdrXUidOIJ9HUnKTaMtsYqFs3vF7Ja + TKCXO662VqTHRbJrw2ref+M1Pn33IR+//YD3RVDeuXCUc/vW8uqWMc6s6+H8siYujZdzfTiHax3xnK8S + oV3iIuLcifu1tjxstOL9Djs+G/Lki4Vz+WhBIO+OBfFwNIjbvbPlOx5caHbmWIUFBwr02JenyZF8bU4J + Lsj+tUI9bkk/fq1Uk0eN/zaA3XlvZA4PxkK5vSCGiwuT2d0bw8o2IXB1UULy4lgyVMqhPQs5sHcxC8Yb + KSmVhJziL8LQh6ycEBqastmwaT479yxjYKiOsrIk0lNDSUsJJjc7joa6IiE7a3j01mu8+/Yb3Lx2lTMn + X+W8iLIrZ0+zdskYRWnRhHpb4ye5N3y2Eamh1hQnuAoJjGDbgkou7hzm7OZeDq9q5uorY7x7cQOfXt/K + J5c38vqhBdzZOcSZpXVsqIlmY1kwx1tiuNody5XWuZwrs+Nitj5XMzRUI4Bvp8zgjsSue7L/IFeHNwu0 + uZ87k7s5U3gtdwq3C6ZyvWgWV0u0uVhqwJkyY1Vs3CXX2JCpzdoMPVZk6TGerk1vzDQ6IqfRGTOLnnhd + epIM6U4xoj1Bj5YYbRqi1GmM1lStQ9iWoEub5OoWKVsTtOlI1qM305C+LGOBkQr92cYM5poynGvCvDxT + RvLNmC9Q9v+nATwknGEwRV9lAI+lPDGj/08D+LTyB54aI9UI4NvKKOA6fe5VanK3ZCavl85STQX91v/A + I/lMwTuVWjwqk2NFaryeO5X7ORMlf0zm3ZIZKgP4ixp1vqpV4w+1s1T4umYmX1VNV5V/bNTiz006fNuo + ozKAv6nX/o8B/Lnc/4MqHR6VPzGArxbO4nzudE5kT+VVxeytldhWpc3OrJfZlPYc+0rVON9uyZUuO863 + WvOq5PhD5UbsyNZgZdTzrIh4hjWRz7BFeMjepOc5nvkyl4umcrdmFo+a1Xm7eRbvtKrzfqcWH3Xq8qhJ + g3vynDeKJ3GlcCJXSuQ9V6hxtVqTV4tn8EraS+xOmyzvWpsz5cZcrDTlRp0ld5psuN/qwN02B2612HG5 + 0ZKjxdrsSJ/MurjnWB33LGuTFAP4ZdYkviT1P5mt2dPZkjWdDamT5dhE1idOZkvqdLanz5DfN4tdmRq8 + kq0t99LneLG0r3xD9guX2Z48S645Ta6lxoYMHdZmarFC2qkyAnhxjjbLigxYK9hZYMCBfF2OFmhxQvjL + 6cKZXCicwRX5HVeKp3Fdftvtiuncq9XkQaMubzYb/sf8va9Mnyr71+r1OFujwfGyWRwpns6hIoG0jYNS + 7wcqNNivoFydQ9IWjpdKbpa4caVaOEOzOfdaTaRUthXo81qLrkCbu4LX2rS506HHjTY9zjfpcaRGl20V + +qyRd7eiwpwFNZYi4qxpqzanqcxUNQKoodyWtjpPmis9KM2yIyFMnzmes7A1exFdjd+hOet5NP6HATxT + 7QnUZqn/L0P4CWYxeeYkps98CV31ybiaaJPi7UCVCJjWCB/ag13pCbJXraU7EGzHoArKtiN9wU50hygm + sDM9sV4M5YYzvzKFwbps1TqbVYVJ5GfGUCTCpFaE52CrCPTeVupFcKaF+TPX2RIXM22MNSajozkJTd3J + qBlMQcNwKjr60zE1mIWV7izsdDRw0FHHSXc6XnovE28+mVpn4dsBRuyPsuJUjDnHA3U44afN+RAzLkbZ + czHejSPRrqwOtGZ+sC1jibNZVRzBpupk1hRGsSTRl+WRnmxI9GNXQSQr0gJoDbGnbI4VxSEu1GeGM9pR + wcrxbprriomLDiTA343ICD+SE8NEtAUTr0BEWnSkD1Fh3qTE+pMvcbwyO4LqtDCqRbi1Z8UzUpEnYr2R + dUPtLOlpYLxPMNDI6EATo0PNKowNt6uwcLjjP1g80sGSee0sG+lk2Wg7Kxd2snpRF+sW97FhST+blg8K + Bti8sv9/YfuqIZUB/H8awdtX9KmwaXEna+Y1Mt5RRE9turSrGBGuIaKtfMlJ8CA3yYP8VC/Z96Yw04fC + 7NkU5ijlE+RnzSYnzZP0RDeS4p1JiLEnIVbaYYyd1JMtsVE2UieiA6OsiYp8ighbYsKdSAp3pSAukMac + ZDqEFzRlJVMYHUK8vwceNsaYyPs2knetr6Uu7XgGM6dNZtrkl9BSm46jjTnRoQFUl+VTXV5AWJAPDpZ6 + 2BpMxcN8Osl+xrRnerC6KYzt7aEqA3hdsT0rcyxVBvDKHGuWZlmyKMuUhZJHFksOWZpjwpJ8I5ZLnFhV + osf6Ml02F2mwtWA6e/Knc0y0ztUGA+mrxtJ3jbkjeudOowF3RP8ouFmnw02J2zfqtGRbi+s1mlyrmslN + iau369S4KzH+QavkzTYF2jxs1eLtDi3e61bWATbg83nG/zGAPxnUVo0CVqZ//rcBrBoFPF+bzxbq88VS + 0W5LjfhkqaHwagOBHp8sM+Kj5ca8J8feHNfl3nzhLQOSv3t1udAhOblNU7Uu8O0ePV4fMOK9UUs+Hbfn + s3E7Phi24tGQFTd7bTjZbs0OiTVLCy3pS7eiNtqavEBLUt30SLKYSL7V8zQ4vMS430yOZ9vxRpMvX/UF + 85d5ypq+LvywyJx/zjfm7yOiy0aM+HG+CT+OGAsM+XmeYNCAn+X+v/aZ8tuADQy7wIALf+1w5GG1PUcz + zFgfY8iCMBPa/cyp8nUg38eNDF9vkgP8SAryJzV4riCQRNlPmOMrEF41dw5xgVLK54mBvqQE+5IfGUh1 + UphofemLkbMpC/ekNNyDgih38mNlO92fmrwgmktC6BT+01MaSG+xP/1FvgyU+DFSNZfxxnAWtsWyuDuJ + 0bYEuuujqS8Opjw7UPrGXLIT55ISNYfU8AAyo0LIjo1UISs6QoXMqHAyo8NJVxAbQWpcFGkJ0SqkJin/ + NBJHRko8malJZKQmkp6WLLw7mazMVPJylD/85jxFlvD0DPIy08nLyiBXyvzMNNlPkTKV/AwpM5Iozk6j + qiiX2tIC6qRv1EkfqS3No6o4h8qibMoLMigvzKJCtitLs6kqy6GmQvpRRSEV5fn/C+Vy/N8oLc9ToaRU + tsuUtXqfQNkv+z/3BeXF+VSV5FJdnCe5KleQQ73cT5kyv75CGZkk8aYqi9baXLpbiunrqqC3p4revmpB + Jd195XT2ltM3WElXTwk1tSnEJ3rh42+Gq6cOLrN1cPZ5Aiffp/DRlOMauHqrqeDuo467si/HnX3lMz8t + 3Hy18JDjPr4zCZ47i/C5U0mJVKM23ZDRQgt21jpxuNGJo/XWnGp2EE7szJ5GZ1ZXOzMq+mxecwCdDaEU + ZHlJDLIiMtCcpFBLcuKdJOY7k5kisS3Birh4M5KSzckQPZebL58XmJKdb0xmngFZeYayrS8wUJU5UmZJ + mZmrK+frqJCZpU22cJ38HB2KcvUpke8pf+OqkO2KXD2q8/RoEL7aWmlIT70Z/c0WDLbbMNxmzXCzHUP1 + NgxWWjKv1ILxInPm5wofllinzI6jmMDtgtZULdqTtYSDa9EvnHs4XI2FERqsitRme4w+J1IsuJLhwNVE + Wy6EmHB+jj7n/bU4M3sKx91e4LDDM5ybPZkH8aZ8luvM7/Od+SLLgY/TLPkgwZR35RofCN4K1uS2x2Ru + 2DzPLYuXuGcxhTclTr9roc6Hlpp8YanL1xK/lamgvzbV5FNDOa6vxtuCB/r/bQCfmPni/zKAj3vo8arU + //FgUw4FCBf012WX9yz2+szkaLDot3gjbmVZcE9i2fUC4QNFppwsNBYOaMheqe89xYbsLjVmZ5khu0qM + 2FNowD55F/vl/RySd3VC6u5UuYVoAgvOVplxtsJIYMy5ClMuVFlxtcaJK1WunC1z4XSBG+eKfLhVGcqH + zYl80Z7E25UB3Cvz4malO5ca3DnT7sOJnrns6wph20A8q+elS67PlLaeQUtbKm31SfTWJTPSmsaCjlSW + 9qSyrDeZlf2JrB5KZeP8IsnXJSztL2ZeZyG9baLfO8sZGGxg3mgn44tHBPMZGB6gs6eb9p4eegeHGZg/ + xryxxQzNX0jf0Hy6ewZo7+ihqaVddGgrdQ0tNDQ00dzYSFN9A72dHaxYsoitG9YxOjxEQ3UtlSVl1FfV + 0lDbQF2dQM6rF3R2djIyMsTatSs4dnQfly6e4NrlU1w8c1RwhBtXTnLlwhGOHdnJ7l0b2LlrEzt2bRfs + FOxi++69gldk+wD79x/j8JEznHr1Iq+evci5c+e4eOkCt25e5fXXb/Dg9Wvcvvkq168e5urFPVw9t5lr + 59dy8+Iqbl1exZ1rGzhzdAEHdnaL9u7k+MFujuxvYf2qLPrbZtNWbkln6RMDeFmdFetFp2woN2R9geiG + /KkcEY5/cb4dVxe7cGbEhqMD5hzuM+fIgBUH+q3Y1WXB1k5rNnU5sLrLmbF2R3qlr7U1O1JdZ0dJhSXZ + hWYkiz5NSDMkLduWQnn/CrIKHOUzewrKnSircaOiwYPK+qeoE9R6UlHlTlmxk3AsC3LTJDYkaZAWNYWM + yJcpip9KTboG7YWmAkvqsk0pSNInMUydyCA1ggM18PaeiZv7DNzcJP65CU92moWNzTTMhSebGE/GzGQG + ZsazsLcxINBf7lWkLPHRx5rly1m9bDnDAwPMnz/Kxs1bOH7yFJeuXuPGTWVU3QPu3n9TVV67fof9B46x + fMVaxhcsZ+XK9RyQ/es37nLz5n2uXrnNxQvXOX7sDGtWb6Khvo2w0BhsrJ0wNrLEwsxOtW1v54qjvbsK + To7/hocKLk5eKpPY1cVbBRdXb5zcvLF39cTezR0HN2fZt2e2py3B/k4khrtTmOROe7kHvVXO9JW70F/s + THeOPS2pVtQlmlMZa0lVgotwzTDG6rPl8wxKwwLJ9fMi39eTAg8nSpys/7cBHBhAY0QEzXEpNKT8n1NA + K6ZuDZmFNWQ8hbKtQDW9sjLCtrD2P3hy7Inhq+Df52TlV0s7KSMxPZ/ktGxS0vNITcshMTGTlORsMjPy + yc4toKhQWW83hZaqOLpqoxgSbjsmuWhJi69oCn/W9Aayuj+M1YOJrOjPYLwzi97GLNGIku+LMykqyKew + sIzColoKCurJLWgkt7BJ0ExOUTN5hS0UyvGSwioq84upL8yms1wZVRrNaGsEYx2hDHeG09UeTltbHE1N + qfJus6mtFm5RJRyjRr7TUIayDnBvdx1DPXWMisZZ1NfMiqEO1gx3s2akVyDtbXSA1eOC0X7WLBhi49JR + tiybz5Ylg2xc2Mv68T42Lxxi69IROSaxZbyHlSNdLBvsUGHpYDfLhntYNq+XJYNdjPe0qEYSKyOA/42R + 5moplfWEqxgVjDdXsbS9lg2ipzbO+/9kAEupmv5ZWQNYmeK5kv4aibO1FSrTV1n7d0DOG6wrlTz7xARW + DOB5cr0RZVRxayXz2yoYV9BeyoL2YuGOOcxrSJJrRdJVHkib8Msu4Zo9Zf70VcxluCZU9c+Ho5UxLKhI + YnFZEstLJUeUhbGx0o8tEjO21zmwo9GGPR327O1VTGB3tvSJtukKZGlbJPNrExmoVpY3yaSvNltlAPfW + 5tFX98QAHqouk3uJ1hN+1lcm+aO8iF7hbL2y31WaQ0dZFu1lGVKm0VEukPbWVZZMX1WqcGHJQ9WpbKnP + ZHdbHnuFk21uz1U9b29JBH2VybSXplFfkERlZhC1mZ4sqvVnd28Ix+eHc3o0gkuLUjk9ns5+yXtbBrNY + 3pvPgl6pr/56hgYlfy0aZcW6NWzcsZNdBw5w8Kjyj0snJBa9ytFjx9iq/GPT2pWiZ9dwYON6Tu/dxYUj + hzh17DDHjx6R8gxnjp3n7LGzXDx2msvHTnDl2BHBAW6ePMDdUwd47dR+bhx9hYv7dvHq9p2c2b5Xto9y + 5fBJrp8+xc0LZ7h+/iSXzxznouxfOH6ac3Ldi8fOyXXOc/nwGS5Injr3yiEp98v39nPr5GHunjnGrVMH + ObxlDSukrXdKG8rPiCMseLbEZQccnUwxMpyFiZE61hZ6OIjGne1hp/o8PjpI9HOoaOcQQbDsBxMbOZeY + iLlEhfkREeEv2nkOUTFyLDaQ6IRgYhKCiImT8+R78YnhJKVEkZoeS6rcM02QkhFLUloM8UmRxCZGkpAS + IzkploT0OBIz4v+DnOIsuoc62bBtHRMcnYRYuz4d+etprDKAHZ30VOuuWFmrqQxgRwcdOaYlgVobV0c9 + XATK6F8XB9l30MRbhKKy9m9UsAj9pwawn5sOs53VmDtbWwizIfHhZiRGmj81gGfJ5zPxUUb9Os/Cx1VD + ta0YwN72k/CwfwkPu+fxsn8GP+cXCPGdTGKEuiRHPYqE0Jbnm1KWZ0RJtj4FqUKYk4UwpxpSmKxPYYIe + JQn6VKUYUJ9uQnOmKc0ZTw1gQVOyMQ3xQqrD1SmYM4Ui/ylUBM5UrQPcEf9kCui+RD264jTpipxFf4wm + o0m6LJDvjkSrMRQ+leGIaYxGTWc8ZgYLo6exJGY6S2NnsExB5GSWhU9iRdhkVoW9xMaYF9iZ8Bwn81/m + Xps6ny3W5+87zHl83JpfT0t50QKumAss+e2SOd8f1ebve2bwhw0v8u783/GwZyo3a6ZxMucF9iQ8y474 + iayPmMyY38t0e75AvctzVDg+S6kKz5FrOYFkgwmkm06g2vEZ1TrEB1N0uFpgyNtCaL9useBvbab82GXG + b71m8BS/Cn4etOSnUVu+H7MVIW/DX/st+UubGd/WG/GnKj3+q0afb2t1+XuTAd+1GPHPJiO+lWN/LNfl + 8zxN3kudwbsJ03gvcQYfJs3k/aQZvJMyibdTX+Q9ef5PKyfzddssvltgxM9rLPhlmw0ccIEjrnDUTerE + nV9PuvLzq878dNaJH8458MNZW/4l+PGUNT8pBvABY/61x5B/7TTgpx1G/GuTId+v1eOfS+W5Fmjw5/6p + /L71RT6p/B0fFU/gk8Jn+LLspSfGb810vqqYwpflk/h9+WS+rJjE1/XT+bZTm2+75Tc0zORu5gTupU/g + UZ48c/EMPqrQ5d0KQ+6WGXFFBMO5pwbwDhFlC+Kn0B70DJ2RL9CfOoWRXDXGCjQZz9dkgbK+b8p0FiZP + ZyxhCkPRL9Eb/iydwb+jK3SCiK9nGYp7jtGUFxiX+nmCF1go11maocZ48iw57wVaA54awLK9JOpltiRM + 5pAyFahiAAuJvZA3hfPZL3BWWXs3/3d8OGTAt5uc+PmoP9yKhPfiefz7JB7/KYVf/m0A/z6MXz57MgIY + xQBW1v390Ftl+j5+z/OJ+asygD3hrjuPrzrz6zlHfjoh72KfFd9L+/3rekO+XWHA1/O1+aBlMm+WPcNb + 5c9zr+hZ7pS8yJvtGny23Jy/7Xfilwtyrbtyn7cD+eX9Ofz0aQA/fxXMr3+MgG/i+eXzWP72fij/9TCQ + b+/48ZeLnnz/qhs/nfLkp9M+/HjGj1+vh8ODFPgwF3mpUubx81vZ/OtGJv88mcLfdsTyzdJgHjbac0ME + 38kUNV6Jncih1Jc5mP4sx/Of5VL9RN6er8vv11nwj73Sxi768d2bofzzszh+/EMWv3xbyuN/NPPbDz38 + +tM8+G0ZPF4v5WYpd0r5CtJY+U014veMlBfk2CWVIfyLfPbL49U8/mUev/7QwM9/yeX7L+SZ7vnz1SUP + Pjlqw1vbTLi3wpjb42Zc6bfhUpsLJ8td2Z5uwfIEXcZj1RiNn8FQ7CTmJ09mZZEuG2us2VjnKMLFhXW1 + HioDeJmIhgXlbsyvcBeCE8a6YUmwK2u5vG+ct6/t4csHp/nq0RUeXDrMYEMhoZ5W+DkZkJ8axEhfFUOC + ovxolQHsaK9LYvxcFgrhWrV6IclJMVhbmeHp4UpjQx2nz5zm/Y8+5Os//4mv//RH1ejfP3/7LX/7x9/5 + /scf+PHnf/HP7//Bt3/7lk8/+5gjhw5QWV7KbG8PfGe7U5yfpRoB3N/dTGZqLF4ukiPC5tLRXMMKEa+t + Qrb83F2wNTUiKSKEnetW8NHDu3zxwVu8/9ZdHt69yvUzBznzyjpObVvImU1DnF/VwcVFtVwbKeFKVwpn + quZypsSTa1VuvFZrz/16Kx61WvNhvxufLwjgwwVBvDMWxBvzArnc5sGFFhHwTS4crRSBl6PNjoyZ7M2Y + xeEsNc4V6HG1SF/akBZ3SjV5q9GE9zpsea/PjbeH/bg3L4jXlyfzYIvce10pJ9dWsH9VLbtXNXJoxxC3 + ruzg6uWdvLJvKYuXtjEwr5qegXJGxutYs2GA469u5syFXWzaMsaCBS309cr76K9hdKSFJYv62Lt3I289 + vMOH8vsfvvkGd27d4t7t29y/dZ3ta5dRnZ9IbIAdc110iPLWJz3YnJJ4R/orQtkxXsq13UNcF5zZ1Mnt + g+O8f2EtH19az+dXNvD+q8v48MQy7m/v59hgHsd60jnTncjV3lgutvrxaqkV57Ll92cqBrA6t5JncD1p + OrdSZnE/U5N7uRq8ljWd2xmTuZk1mes5U7hSMIsLRVoSF404VWrK/gJjtmTosiZNi1XpuiyVHD2arkN3 + 3Ew6YyWmJWjQLfm1W/JsT6oxvakmdCUZ0BqvQ3OstsoAfgIdmmK1BBq0JGjTlapHX6YRg8oftfLNmVdg + wfwiK9Uf8BSMFVlKaf4fA3hAeMJghpyfJkjWY1gwmqzF4qdrAKsM4PQZHCr6HwZwraHkWj3uVOnIu1fn + dtEM7peq8aBKk4dVWgKlfIK3BO9U6/CoQptH0k7eKJzOGwVTeatwKu+VzODj8pl8Wa3ON/Wa/KleXYU/ + Cr6pU1OV/9Wsy7fNevylSfeJAVwnaNTnm2YjvqjTV8088ahck7vFaioD+ELedE5lT+VMmWIA63OyUpPt + mS+yMfUZ9pfN4EK7BZc7bXi1wYzD8nt25KizTvLOEsk1S0MmsDrid2yNeY5D8u7OFszgVqU6Dxq1eadV + k0fNsyRuTuetlpm83azB6zUzuVM2VWUAXy0SlE7jVrUmN2p1uFihwdGcqRzJncmZcgOu1Vpyp9GWh+0O + POpwFDhxr9mGy9XGnCrR4kDWVLYmPc/6uGfkeZ5lXfKLrE16iVUJL7I+dRIbM6exIWMqq5OEM8W/yGrh + NxuSprEpZSpb5P1sFU6xK0Odg4V6HC9Vll8wYl+OLttSZqoM4PXyPjdm6bIuS5uVmVqqNYD/lwGcq8uB + bC0O56hxLHcGp3KncjZ3Chfypwomc7lgEjdKp3C7ahb36rV5o1n/qflrxN1WQ24I17lYo8OpKnWV8bs7 + eyK7cybxSv409sm7UczffRWa7JP3ckDazNESDU4Wa3G5yphbjWbcaZB4X6/PrXpdbjXocrtBW0rpWwqa + pY21a3OjTYcL0h6OKgZwiTZrinVZITxjYYW5iDsbOqotaSozo67EnPpSW5prPKR0ozDNhniVASw83fwl + dNQnqAxgzZmTUZs5EzU1TWY9NYEV8/f/rQGsMRlXU21SRbhUh3jTFu5DZ5ALvYF2DAbZMxRkI7AVPNlX + TOHeEAfhKI70xHkylBvGiIjYwZpsWsvTqShIJC89huKsJGpL8hhobRDR3kZtQSZJwT54WxtiqTUVfbm3 + pvpLqGm/jJqyZqPBFHT1pmKmNw0bnRk4a83CVWMm7ppTmKP9Ahlmk2hzmsX6ACOOR1tzNtqM4/7qHPac + wUk/bU4HGnM2wo4jYQ6s85e4EGjFuDzf6qJwtlQlsiY3lEWxIlRDnFkT46UygFemB9AWYk+V/La6eD+6 + S1NE0LWyZdU4/V2NZImAiooIICkxgkwRWgmJYQSH+TJnrrvkOTv8PG0I8XcgLsSNgsQAypODqE4MoiMr + XnJ0Lqs761nV28R4WxXDHdUMd9Uw2C3orWOwR4Rwb6OgiXl9zYz0PsH8gWbG+psZH2hh4VAziyU/LJ3f + yorRTlaNdbF2YY+gm3WLFVO4k3VLnpTKer/bVg6wc82TqaB3KOsIr5RyRZ8KW5Z0s3akmUVdpfTXZ1FX + FE1pxlyy47xICnMkOdyBjBhXcpO8yU/zpSDLVzSXH4XZT5Cf6UtOmjfpie4kx7k8MYAFiTEOJETbiZBV + jGApYwXx9sTHyfE4uW6sGynRHhQI12jMTaSzMJPmnGTRahGkhviKzrPCykgLMwMtTHS1pD3OVP0jw8yp + L0ubnoKthRHB/p5kp8VTlJtCWNBsPB3N8LLVxV9Zu3mOKT25s1nfHM6OjjCVAby+1J5VuVasybNmRY4V + SzMtWSBacEGmIeOCxdlGLMwzZKnk+5WleqwTHbOpWIMtEst35E/hgPT3y9J3X2s15X6HBfekvNNkKH1Z + R4UbdYIGHa4rJrDEcMUIvl6rJnFSjZu1s6Tfq3NX+vndRg3uNanxeqMab7aoS4zU5v1efT4ZMuKrcVN+ + P9/wiQE8oPFk+ucBdd5/Og20MgL480UGqhHAigH88SJ9PlqoywcL5Hxle6kh7y014M1xHe4JF785KFqv + T4fzHeqSE9S41qnFrR4d7g/o896oOV8sdlTh41Eb3plnzZ0BG8522bK3XupIcmhPshlVYSbk+BuR4qxB + tvXL1Dq+TL/3VNaGaXKlzIWPuwL460go34/68PMCe34YM+S7ebr8Q/D9PD1+mm/ALyrzV49fhvV4PKTP + 434D0ZtGojVNod9OYM933Q582uLGhQJrticasSzKhO4AM2p8bSn0dZJY5EqstxvRsz2J8fEWeBHp5U6E + 5xOEC8cMlc8VhHu7EDXbhawQP8rjgqiJC6A0xJ3CQGdyAx1IDrAifq4V2bGuFCV7UJnlSWOel7RDX3oK + fegr8KJfMFg6m5HqOcxvCGGsNYqR1miJv6FUZM0mN8GdlCg3YoOcCfayIdDNmiA3e8I8XVUIFR4b5uFC + iLsTwR5PEOTlQqA831zBHPk9vvKcvlL6z5Z9H0/m+HoR4O+jQlCgP2EhQYSHBqvK0OAAQgPnEDLXn9AA + P4Lm+BI8ZzZBfl4EyfcCfTwE8tvnepEYGUR6fDiZSRFkJIaSnhBKalwIKbFBJEXNlT4aJP1VWWssjPTk + COlHsWRKXEtPjSElJeo/SJX91DQ5JkhOjSY5JZrE5GiSkmP+g8SkqKeIJCEpmoT4SNEQESTGhsn9BDEh + pMcGkyH3zooPJispiJwUBXPJEw1SkBlKmeiPytIEKiVnVFQqSKSsPI6Sijiq61KoqkmkoDhc7q1MvWyD + X6ApAWHm+Ieb4ifwiTDBV0rfMAP8QiUHhuoyJ0ybgHAdgZ5s68l5evhHGDAnXJ+54dqEhqsTH6NOcvQM + ClO06CoyY3mFDfulDZ7udOdsuxOXetw43+vJkU4PtjSL3mrxYXlfBPO7YqgrDZDf4kJmgjOFqW5U5flQ + me+tWs8zK8uRtExbMrJtyM63Ia/QktxCU7KED2dKjHliAusL9MjM1SFDOIqC1CwtUoRbpwrnThXOnSHI + lf1C4SzF2TqUCsqyFGhRlSN8uESX9ioDehtM6G8xY7DdiuF2a+a12jGvwYbhSuHFpeYsLLaQ2GbGWLYJ + 85R/msyU72Qb0p0p3DtFm27Rmt3hM+gPnsZoyEyWS91sjtLmsPTDi+nWXEu24WqUOdcjzLgeZsilYHXO + +U/mmPuzXA6cwaNUS74ocuOzXIklGbZ8kGLGO3FGvBOjx0fxRnwQJTFpjjp3nCdzx24y9+1m8KaNGo9s + NXnPRptPrHT5QvC1pS5fmWnxiZHEPgOJjYI3BP+eAvr/MoA99TkVZMGxEDMOBBmxd64+233U2ek3i/0h + mpyI1eNKljm3S2y4LnrmYoUlJ8ssOFBizB7B7gpTdlaZsaPSlB3lxuwsMWRPgQF75P3syzfiWJkVJyqt + hV9bclp41+lKM4G5ammTszW2wgVdOF/tyqlKd46VeHCkyJtLNeF80JfJVyN5wqNDhEt6caXShTO1Tpxs + cudE1xz2dQWzqSuc0ZYQmmulHxR7k5zmQprkzYJ4Z2oyvWgtmE1fhT8j9UEs7wxnzUAiaweyGG9Joa00 + nJJ0f+nj3qKjAygoiKG0PI3SylwqqovIL8yRvphAdFw8cUlppKTnkJ5doEJyejbxCanExiURE5tEXEIy + cfEpJCQkSb9NICE2hqK8XOYN9KpGhXa1tZCXlUVSrFwrMkbyeZx8N4HYhAQSE5PIyMqgsCiXemUE3GAb + Sxf1s2ntQnZuXs6BXWs5dWQbh/etY+WyAXp7aukS/tPV2UZ7ZwdtHV20dHTT3NFDa9cAPb0j9PePMTA4 + zsDQfEbnz2f58iVs2bqBgwd3curUfs6c2celS/u5fHEnF15dy7lTSzl3cpzzJ8e4dn4FJw6NsG9nJ4de + 6eLowW4O7W9l3aoseltn0yrvXmUAV0hfr7NiU70lmyoM2VigxibJ8cdaDbg0Im19oQNn50m76jfhaL8p + J0asOSb5cV+fFTt7rNnR78ymAXcWd7vS1+pAW6sjNU0OlNfZkVtuTVqeKYmZpqTl2lFY7k1hhReZhY5k + FdtRUGFPqbSbigaJGdIeqpo8Vahr8qa+aTaNdd7UVDhRWWwjXNmK0iw9ikSjVqSpU5uhJe3CmDbRuLXS + lwuS9EiMUCMmTIMIiWkBczWY7avGbB/FDNbGw0MTR+HHtrbTsTSfhoXZTMxN1HCwMZL84UVVWTEjQ0Os + Wr6SFUuWM3/eCCtXrubgoSNcuXqDW7df4/ad+7x29w0V7t1/yPXrr7Fv/zFWrtrI0mVrWLt2MwcOHOfq + NTn31uvcuH5XtRbwubNX2LVzP4MDo6QkZ6kMX309Uwz0zVRGsLmZLRbmdipYWTiooIwQVqAYxApsbZzl + 2Z2xFljZOWNu5yiwx9LOCms7MzxczAkWfpAS4U5pqjvtZa70Sv32CdfrL3KkN8+eNonDjanWVCfYUJPi + SV9ZAuMNeTSJHikKCaA4yJ+SucJrPV0odbahytmaOnd71RrATYHCT1UGcCoNKTlUZZSIhqkQDlz1/70B + XKCMtFXW2lVG3dZIzK9W4d/nPDGAy0lKLyQlI5f0rHwyswvJyCgkW5CbXURObgElxXnUlqfQXhNPX2MU + wy2KATyHJa0+rOmZw7q+IFb3S5z4jwGcTc9TA7iyOJPiwnxBKSVFtRQWNJCf36QyfXML2sgpkj5e1EZR + USNlxTWiA0ppKckRvZnCaEMki4VDL5KYNa8zmO72MNrbYmluTqWmWrRdZTblZTmSu5WpoEtoaa6kW3TN + QEcVg60VjHbWsFh0zTLRMcv6lTV9O1g50svqBQNsXDrC9tUL2btxGfs2L2PnSsUEHmDDeD8bBZsXDbFp + YT+r5iumr7Leb8sT9HewaKCTBVKOdbfIfWrpb5T7NVYyJBiUWNRXV0ZPXTG9tUX0VheKFi1mSUcd64ee + GsBd9Yy1KKZtGUNN5fQ1ldEtZWdjGZ31UtaU0lNTLlDM3yoGZHuwVoFoJbn2kJw/3KBM/VzyZCSwfEdZ + c1gZBTvYWCKfF6mmRR5tLRTumC+xPp2h2mh6ywPplHjfVuhJd5HEeOGYA+V+jNQEM78qlAUVkSwsj2eJ + 8KGVJdGsKw1mS6UP22uc2VVny64GK15pt+WVHnv29Lmwo9eDjZ2+rGgLZbQmjoEqZeatdPprlVHA2fTW + 5UodFMhvkDqoLpH+USB9oIDhqhIGKoroL5f9fxvA5Vm0S3tRzN+uilS6y5QRxU+mlh6rS2Z9bSq7GjPZ + 35HHwYFSdvUUsLgmlr6SENHJUaLlYqWPRFCc4El5vCXj5S7s7PDmxJAPp4d8OTcvjKN9YWxpDWJJQxDd + 5SHUF0dRXpggbTKdEnmumoY62ru66B8eYsGCRaxesYodW7fzyu5dbFy5nM2Sk3ZLeWjDGl7dsZXTr+zh + 2N49HNwt2HWQI7uOcGz3IY7vPsip3ft4dc9uXt27Q87bztm9cv7uzRzftpED69eya/k6di/fzMENezm8 + dR/HXznAyYOHOHF4H0f37+Hovv0c3aNcU47tPsbpvSc4s+c4Z3cf5czuw5zbs58L+/dx/dhh7pw8zp0T + Rzm/bxe7Vi1V/X2jRvpQdPgcPD1scbA3wUh3pujZmVibaGNvoY+7o7lwd2eiQ31JjA4gPnIOCYK4cH9i + w3wlrvsSFTKbCPlcMYKjIv2JjgwgOlqZlVMQEyA5fK7k7yDJ96HC0SOFq0cLZxeuniacPDWKOOH3sQlP + TOB44e/xign8P5BdlEH3oPSJrWuZ4OFpipeXuSQQS7x9zHF3N8XBUQ9rGw2srdUkiGvh7KiDs7O2Cq5O + eiooBrCrg3xmp46ni67K9I0OtlUh6N8GsIsy+lefqGAT4iPMRYhYynnKmmWz8HNXTGB1gQb+7lr4uqqp + pov2tJ+Em+1LuNk8K+UEvB2eIcDzJaIDp5Iao0lemq4EZEOBvgRlfXKTtclTDOB0Y4pT5XiSPiWJ+lQk + 61ObZkxLlgXKGsAqAzjZkNY0M1qU6aQjNMjzm0yB7yTKAqappoFui9VXjUzqfWoAd0fPYjBWk/EkXcaV + KXMipzMYMpGhkJcYDX2Z8YjJLAh/iSVRE1kaNYkV0ZNZEfkyK8JfZHXYi6wLe56tMc/zSvKznC+ZzKMe + bf64yozvd1vx+Jg1v75qxuMLFnBZMYFt+O2CNd8fMeSvOzT5YuVE3ux/hvvtU7laOY3j2S+yO/EFdsZP + YWPkDBYFTKXfayL1zs9R6fgcJU7PUyR1pYz8TdafQLqUdS7PsCZqJicydbldbMiHteb8uc2c7zpM+Vkx + fgf+G7+MWPLTQlt+XOnED6td+X6VC/9Y4sh3w3Yi1K34R5sFf28146/NRvyt5Qn+oowQrhEiX6rFB1lq + vJU8jbfipvEofgbvxs3kkWw/iHuJBwnP8SjjOT4snciXTdP5+3wDuY8Fv2yxgf1ucMQDYfZw0pPfXvXg + 8RlXfjnnws8XnPjpvD0/nbXlZ8UAPmrBj/uN+XGXIT/tMODXbUb8vN6An1fp8eMSXX5YoMm3vZP5fcOz + fFg8gXezJ/BB3gS+KHtJnnM6f1RGYVUp03BO4vPyiXxe+TJf1k/lT52a/Llbm88bZ3Iv61lez/odj/Je + 5u2Cabxfps27FUbcLTPmquBcqSmHi4zZka/PosRpKgO4PfxZepNeZjhzGmO5aoznzmIsfTrjyVNYkDiZ + 0biJDEc9T1/4M3SH/I6e8N8xEK0YwM8ymvIio6lPkfICYymTVNNAL0pTpoGeTEfQs3TPfZZ5oS+yOOJl + NsVNYl/mDE7la3CuUJ1LhdO5JM96PusZLhc9xyfzjfnHNld+PREAd6L59f04fv59Er8oBvC/p4D+fQS/ + fBbCrx/PgQ/94IMn5q/KAFamfn5P3sV78k7ekvI1OXbVnV/Py/s46ciPyjTdO6346zoT/rzUkM8G1Hm7 + Xtpq2fO8VzOJN8pe4F7lRN6WOv1imRn/2O8k35Vr3fGFhwH88siPnz7w56fPAvn1yzD4MpZfP4jib2/M + 5Y+3ZvPHi2786ZQz/zjuwk8nPPnxtB8/ng3g8fVIeCNNnitfnrlYykIev5nPz9dz+OfxNP5rSzSfj83h + tgjgc5na7I+ZzJaQZ9gZ/Qy74yZwIG0CZ8qe40GfGp/Kc3+71YbvTrjz3d0gvv8whp+/zODXPxXBX+vh + n5389sMA/LIAfl0Bv62Dx1uk3AUceDoK+FXZPivHzqumhX5iAK/l8S+j/PpDMz//pZDvPk/g02uzefeo + A/e3GnFzhS6X5utwvs+QUx0iNBsdRZg6sy7ZnAXR2hJfZjIUPY1eiSdD0s+X5OmyodqWjfXOrK93ZX2d + 5xMDWMTnwgpXEfpujNb6C8mJZstoPic2d/PG+a0qA/ib967z1tWjDDeXEOJugY+9PgXpQurmt7BwtEXI + WwoBykL1rkakpYaybNkw69cvJVESh5mpkeQBFxqbGjh6/BgP337EZ199yRdffcVXf/j6v03gf/6N7//1 + vWoU8N+/+ztffPkZJ04co6mhnrDQQMKCA0RwFLJs0Sgjg53kZiYy282exKgQBrqa2bh6Cd3N9QR4ueFg + bkxabAQ716/kozfv8vn7D3nnjZu8ces8114VEfjKek7tWMqZraOcXd/LueUtXFhQzTkR3ifqQjlR4cul + Wm9uS13drbfmQbM173a78OnYEwP40WgQ9wYDON3gzKuC002uHK2yYZP0sw2JU9icMJndyVM5q0wDraz3 + VKTFbYlrbzWa8naHLW/3uvDGgFx/aC5vb8jms6OtfHCin7fPjPHg3HLunl/N/Wtb+eDRCR69dYqbtw5w + 6sxmDh9fy75DKzh8UoTr5Z3cef049x6c4uz5HRw5okyjtZzDB1Zz7NAGDh3cyPHjO3n48BYff/IOH370 + Hm+/9SbvPHyTR6+/xv5ta2iryiQt3JkIbxGCfpL/Qs2oTLBnWEjmrtFCbu0e4P6B+Vzb2cvrR8Z57+wK + 3j61mA/PLuMzEctfX1zDx4fHub2qnuuLS7g0mMy1/lguNPtwqtiS87mGXM3S5ma6BjeSZnAxdhJXEqZy + J12d13I0uJM1i1sS565nSl7KmsrFvCf/jHKywIBD+Ybskpy8LlWbFcmaLE3XZXG2IfMUAzhRne4kyakp + unQnG0hpTJ/k4nk51gxmmtOdKiJX8nZLvO5/TOBGyfcNMeo0xmqopn3uzTRiON+C0WJrRktsGBOMF1s9 + NX8tGSkwYyjXhMGnBnB/hhH9yvTRIpqH5fsjcv9FTw3g1akz2SRx9lCR7v8wgAVVetwsl99fNIubEltf + r9DkzRptHtboqMoH1ZoCDd6s0uSRYgCrRupq86ayHnDRDN4WKDNHfFoxi99Xq/OnBm3+q1FToMWfBX9q + kFwj5V+adflri56q/LcB/IcGvScGcL0BH1Tq8rBU6vt/GMCnBecrtDgnOfdIyQw2pz/DhrTfsb98BueV + tazaLTlWY8DeQi1p19NYFfMyS0J/x7LQZ1gb+Rzb41/k1UI1rlXq8Lrc6502uU+nLm+3qvGgfhpvKjNg + NKhzv3oGr5VP52bJFJUBfO2pAXyrVoerVdqcKVZXTaV8rdaYey02PGx35INuZz7ocuJdwevNVsJZ9FT3 + OpQ1iR3JL7Al6Tk2Jj/PhpSXWJP0EisSXmRV0kTWpE1hVepkliXIs8a/xHLJlasTprA2aSrrU6axTvrl + 1rRZ7Jd+ebTcjAOFRuzJ1WWzYgAnzmBjhjabcvRYl6PLqiwdlmb9bwN4R7Yu+zI02K/8g0fGNI5mTuZE + 1suczpkoeJlzkjsvF0/mesUM+Y1S3w06vNZkyJ0WQ24JrjTqcaZKS+KLOvuFD2yVPL01YyK7cqext0Sd + ffI+FLwi72qf1MuhInVOFGtxscpY2pMJ16sNVeuHXqvW4mqNYhBpcrV2ppQzuFE/k1ut6lxv1eSitIMT + dbpsL9ZkbaE2q4qMWFpqzkiltQgzC5pKlBHAFtSV2tJY5UZNkQs5yVbEhOqrZtSxt5iIgfZz6Ki/gJba + FNRnzURdXfM/o4D/vzGA3Uy1SfN2oDbEm44wH7qDnOmfa8twkC3zgqyfwka1PxRsR3+IPV2h9vTGeTKc + G8ZgSRwdxYlUZkeTo6xhExtEhuSTsrx0uhqrGW5roiwzmYjZzjgZqmE84wX0pr+AxqwXmakppd5EdA0m + iWiahLX2RJy0J+OhOQVvjUn4yu8KUX+GfNOX6HOcwbYAQ87EWHEuypgjvtM56DZJtQ7gSV9tTgdZcCTQ + ik2+ZiwMsGRBjDvrCsLZUZ3E2pwQFkZ5MCa5b1mYC7vyI1iR6k/zXGvK/K1oSJzDYFUW68Z62LluGcPd + reSmJxEXHUZGegK5uamkZSQQGhmIl7cT9vZGuNgZ4uNqRri/PQUJAZSnBFGTFER7ZgyjFbms6axlRXcd + I01lDLWUM9BeQV+HoKuGPvmsv6tO0MBAdyNDXU/R08i83ibm9zYw2tfI+KBgoJHFQy2CVpbNa1Nh+fxW + QTMrJKcrWDPezvpF3appn7euUPBkCuhty3tV2LKshzVy/sLuMvrqsqjMjSAv0Z+UcDeiA6yJDbQhKdyJ + jDgvclL9KMiaIzorgILsJ8jL9Cc73Ye0JE+S4lyIV4zfGHvZdiYp1onkeCkTXFTTQ6ekupGW5klmhje5 + Gf7kpgZQmh5Kc0ESnSWZtOSnUJkaS05MEGE+LqL5THCyNsHBwgQrEwNMDbWlTathoDMTO0tD/L2dSYgK + Jis1RoSyP2H+LsTNdSZR2mhprDPzy4LY1BrJzk7hEc3+bKpwYm2BrcoAVk3/nGnBmOSDsXR95gvGJVeN + 5xqwWGLLiqcG8Abpx5uLprMtfwp7C6ZyoVaP262mvN5pJVrMnNvNhlyvV0zfp2iSvt2oQJsbEutv1Eve + rH9iACsjgW9JP1dwu246r9XP4PWmmbzZpincRIcP+/X5fL4hX8wz4ON+bT5QGcD/A0MafDiixacL9FTr + AH+6yIAPx3T5YEw0yagW74/r8P5ifd5dovfUANbi5pA2V/u0ON8xk3PtM7jcqc6NHi3uDejyznxTvljq + wJdLHPh03IZ359twf54DV/ocOdhoy6pCC9qjdSnx1yTDQ5M0pxlUOE+lz3say0I02Csa+l6tM1/1+fD9 + qPDy+aIJRi34YZ4O3w1pqvDDsLZoST0Vfp2ny+NhXRgS9OvxW68BdBsKzKHHin912/NNlyevVTlyWDjA + +gRzBoPNafC3plj6UqqnA5HuDoS6ORPmrsBFtR0q20oZ4uFCkIcTgR6OBHvYE+7pSHrQbEqj51IdO4ey + UA9y59iTLv062tuYMC8jksPtyI51oDhZ4lyGEx35nvQWeTFQ5MFAgTv9RW4MlHsxVOPPvIZg4c/htFUE + UJLmSlqknfQPK0K8zJhtp4e7hTZu5np4WRir4Ckc1tNCuLOZgRx/AldLiQ+W0q4FdhaGWJrpY2Gqi4WJ + PpamBliZGmIl37OSNm9rY4GjvTXOTva4CJwdbHC2s8bR1kr6hTkOCqyU/mGMvbkhtqb62Jjo4GRjgJ+7 + NSG+UkdzXAn1dyJEEOwn9SII8nUgaI7U2Vw3IoK9iJLYHhvuT9RTRCojDaICVCMOIiPmEC5lhCA8wp/w + 8ADC5JzwiADZlmOyH67an0NomB/BIf4EB0k515tAfzeCfJwJmu1IqK8j4XLvqDmORM51IDpYgT1xodJf + o91JT/AhI9mX9DR/UlXwIzllNkkp3mRInMnMnkNyujeJye5ERjsQEmlDeKwdYfE2BMdbExRvKaUgzpSQ + WCPC4gwFeoTH6cs5sq2CEeGJJoQlGhOVoE98kg45aboUpmpQm6ujMoXWVFtzqN2Vc70eXBAOc3XAnctD + sznZ58XuTm+29QayaTSOFcNJdNWHUpE3m7Jsb6rzfWgun0tDZQCVpd4UFrmTU+BIbqGDwEZgLvvGpAuf + TpcYk6EygA3IFE2Xnq1FaqYmyZkaJKSpEy9ITlcjOXUWqSkzyJb9giwNijO1KBU+UyplmZxbla1Ba7kB + ncJTextN6G+V/iKcb7DdmuEWQa0VgxXCGUpNVQbw4gJzFuWaMp5jwojwYuWfI5WlUnpTdOiKnklHyBS6 + AyYxL3C65MJZbIrU5FCCHufTTLmeasatRFPuJplzL8GYWzE6XA6bySm/l7kWrs6jTCs+KXbhg2w73k21 + 4G2p40dxBrwn9f657H+eZMb74Qbc95rJfdeZvOGizpvO2rzlKHzTXpf3rHX5yEqHzyx1+cxcmw9NtHjP + WIuHhpq8bqDOTYn55yXvKwbwYTWB8ILjduoc99bnVLAFx8ItOBhuyt4QI7b5a7Ntjjo7gtU4EKvD2Wxl + jXI74Vt2nK+z42StLQcqzdktdbOzypxtNRZsrTZna6UJ20oM2aHwxHwDdhcYcajCiqPCuY5VWnFS2sap + aiuBDSeqpKyx50yNi2y7cFD0927hYNtzXWU/mIeDWXyxpJi7HWFcqfPibLUzx2scOFrvwtEOX17pCmRD + ZxCDtb5UFbmSIJo/KESPQC95/3665EaYUJFoRWu2IwNlnixtncv6/jjW9aczWB1JcaIr0XNM8HXVIsDX + WPqpE3EJvkTHzSE2LpjgUF9c3ZxwcHbC2c0TD29/vP2EowjcvfxxdvUWeMk5Prh7Cty9BZ54eXji46nM + yhVNV2sTS8ZHaBX9npORQXxUjMSNQPz9AvDxlev5+uDj58ucIH+CguXeEjMykkNVf8wf7Cpj9eJ2tq8b + 4JWtY2xY0UNHUy4ZqUEkJ4SQnBhLfEIisfHJRMWmEBGfKn0ynbjETOLjM4mOSSFSWfs0KYmCglwammro + V0b/LR9h0+bFHDy0jlMn1nHiyBKOHxrl2IF+QS+nj49yaF8/e3e1S9nFscM9HDrQyppVWXS3etHy1AAe + kfe+qtGG7U3W7Kw2YVepJrtLhS8qSyUMWXJ1zIqzQ8ac7Dfi+IARJ+dbcHyeJQf7LdndbcXOfkc29ruy + uMuF3hZ7WlodqGlxoqxO+nuFDemiP5OyzUkvcKCwUuKBIKvYSWBDQYXwkxonKhpcqGp2pabZU4X6Vm+a + W31pa/GlpcGTphpnOqS91JdaUJWrT53EjbosXVokjrRIPKmVflyUqk9qjIa8Lx2pN4l3EToEhmgTGKzD + 3Ll68n505f1q4uw8CzubWVhbqWFproGTvRkhgb7UVlaoTN/lS1ewdNEyli5exo4duzl79hK37txXmb+3 + bguU7dfuc+/1t1RG7569h1m2Yh1Llq5mzbotHDh4nKtX7/Da7QcqE/i6nHP50k3VWsBLFq+iIL8MFxdv + lQGso22Ero6xygg2NLDAyMAcY0MrFUxNrJ/A9AnMTG0wM7fB2NwWIyn1LSwxMDfHSHKemYU+bk7Gklus + yYpypyrdnY4iJ7qLLekusKIn34aePFs6su1R1gOuS3GgJTeA4ZpMhqoyKYkSLhsm/DwskPLAOZR6uVL2 + fxjAzcGBNEVG0irtsyEll6qM0v8fDGBlmmVlnV3FBK6TuF+rwv82gCtQpoFOy8onO6eQnNxScnNKyc8p + oSC3SFBAWXGO5JcUyTvxDDZHMdISypjw2sUt3qzq8mdNTyCrep/8o8i/RwD3NGbQWJFOdXGGfD+X0qJi + yopqKC5olHfSQn5BG7kFHeQUtZFX1EpRSQMVpdU0lRbTXZ7BaF0CS5pDWdEVxJKuAOZ3BtDbFkKnygBO + o6IqlVI5r7QkW5BDdVURLY2V9CjLO3RUi74pY35bmWpd1EWibxZ21rFQdMzS4XZWjon+WDHK7vWL2b91 + OQcEW5YNsmZU+nl/M4u661kiWkfBmHx3pL1GfneVCv1N1fQJehqr6Korp7WykObSPFrLcmkvy6OtNJfm + 4mzqC+S35yVTlRVPQ24Ko40VrB1oZeNIFyv7mhlvr5Lnq2S4Va7ZUklvcwXdUnYrv6G+gv76avpr5bfU + yn1rK1QjfZWRtD3VhaKXFFO1iJ7KAnrkd/dWFdNbXUR3dR5dldmCDHprsuScdAaqkwUx9JUF0l3kTXu+ + M+15zvQoPLNU+GW5D6M1cxmrCmJRRQiLyyNYVhrB6pIg0SB+bKv0YKfkmz111rzSYMH+Nmv2d9nwSo8j + u3qc2dzpyZo2+X51FH3lCfRXyf1qM+ivy5bnVAzgPHnOXPoq8uW95tEr9TModdZXrowEls/k3SkarL00 + XbVkU0dZMl1liXJeAkOViYzVJrFUsKUumVea0jnYmcvh/kJ2dmezVPJRf1EAXYXBNOdEUC+arirBVbSz + 8g91DvKcbpwdduP8oAvnBrw53DmbTRLfxisl5mW7USAcLzXOT8U5I6OCiE2IJUOZ3aYwVxWf+trbWbN0 + Mbs2r2PzsoVsX7qA/auXcmzjak5t38TxnVs5tH0L+7ZuZ+/mnezfvIeDW3ZzSIHsH9q6lcPbN3Nk+0Y5 + to6961eyc9VSNi1eyOp5gpGlbFy0RrTxBvZs2srebdvYK9fdtXkjuzZuYdf6rexeu51963dzeNM+jm4+ + wIkt+zm+bR8ntu3i5I5dnNm7h0v793HlwD4uHniFI5s3sGZsmK6GKjISo/D3csTRxhhj7ZmYaM7A2kAT + ezNtvByVvxMIB47wJS1OeG5iIJnxc8kQpEkuT40NIEXqJSk6UBBEYkwwSaKPlVHCCXEhJMbLsYRgUpNC + SU2NkHqLJjMzhoz0GFLTo0lRmcDRwi+iiEuKICE1iqSnU0EnZSSooBoBLLl1/ZY1TPDytmD2bCt8/Wwk + yVsLITAXAWKAnZ02tqrpn3VFjDyZ8vkJ9FRQDGA3Ry1cbdXxlONBPiZEBlo/WQPY1/SJAeyqTpCfvhwz + IirERFUGeGk8NYDVCPDUYq6XthzTVpnBXiI4PWwn4WbzAq7Wz+JqMwEP+wlCep6V679ETMg0MhI0yEvV + lYBsSKEgJ1lH9vUoyjCmOM1IhN0TA7hMUJ1sREuWpSQDU5X5q6Atw4K2dHMqo7VVBnC+zyRKA6ZSEzqL + 5mgdOkUoKAZwT6wmPdGzGI7TZCxRm9E4NUYipjAc9CLzg55jbO4zLAh+nsWhz7A8/HlWhr/A6sgXWSNY + G/EcG8KeZVPYM+yOeYbDac9wpXwy74nI/8s6Eb57rfn1qBW/njTl8XkLuGgpsOO30/b865A1f9piyAcL + p3Gv40VuNU7lUtk0judM5JWkiexOmMnmSHWWzZ3JgNckWlxfotlzMg1eUyh3eYFsswmkGk4g22ICze7P + sTlBjbMidu6VGvJprYlqRO/3nab80mcmwlwwLGJcyM7jFY78usmDX3f78NMuX37c5cOPm734ZbkHv4y5 + 8NOAA991WfPXVlP+3GzEn5qM+LpOn88rtfigSARB+gxeT5zK63HTeDNmJo+iZ/Bm1GTuR73IvdhneCv9 + OT4omcgXjdP4dkiX75eZ8fN6G9jjBoc84ZgXnBSclu3Trvx61oVfLjjx6wUHfjlrzy8nrfnpiDn/ekUx + gI34ebshjzcb8XiNPr8t1+PxEl1+WaDNX3sm8fv63/Fe4QTeyprAR6XP81XtFHlmDf7Sqs1/Sfl1/Uy+ + qJvKZ3WT+KJpKt90q/HHbk0+b5nFO6Uv81b+czzKfVkwjXdKtHlU9sQAvlZuxrkycw6XmLJdBMPi5Bl0 + yftvD3+GnvgXGEydyGjWTMazZjCWOpXx5MksSJjEeNxE5ke/yGDkc/RFPEt/1HMMxDzPUMILjKa8zGjq + S08g2/NTJjKePpPFWZosECHYF/4yfSEvMBL2ksoA3hA7iVfSpnMybxbnlelBS2ZxrUhZq1HaStVkvlhg + xg+7PHn86lx4LZqfPlBG/CbxszIF9J8S+ekPsfzyZaTKAP75A18evzdbNdL3t3c8nuCRu8BN4AoPFAPY + j9+u+/LbRS9+fdWdX4+58eNuB75dbcrvx/V4r13ed/WLPCh7gberJvKg4mUe1E3m/R5NvlxqzPf7pV2d + lXd83Rvuz+GXB3789Mifn96fy+OPwuCjCH5+GMJfb/vyzUUPvj7pwB+O2vP3Yy78qBjAZ+bw44UgeYYY + uJeGvBzkpUhZym/3S/nlUh7/OJzGH9aE806fJ5dLjDmRpsbuiBfZOHcCm0ImsD1yAnvjJ3A893e81j6F + 9+dr8Yd1pvx1n7TpK378+DCSxx/LtX9fAH+sgr80wz+74F+D8PPCJybwY2U94C38xm7BYdk+Cbwq5Rl+ + ++04v/y2l18er+fxLwv49Yc2fv5LKd99msz7Fzy5u9uCS0s1eHVgOic61TjSrMO+elN2V9qwUQjrogQR + 5mEa9IXNoC9yOl2RkxmInc5CZSrdagc21buxocHjPwbwUhGfC8ucmCfkd7jci9H6QFb2JLN3RR13Tq7l + 92+e4a+f3uWdGycY66gkwltiu4MheWlhjA81sXi8g7raLEJCnCX2W5KdFcXSJYOsWrmAhPgILCxN8fYW + QdLSxMEjh3j9wRt8+uWnfP77L/n9H77iq2++5ps//5E//+XP/OOff+dfP/7AP7/7O599/gmnTh6nu7Od + FBF8ifFRNNVVsmh8iKH+diG1KQTP8SQzKYrRgQ62rF0u5KuOwNnuuNtZUpCRxB5J+h8+uMtn77zBW3ev + cv/6aa6deuWJAbxzBWe2L+D05iFOre3i1LJGTszL55CQ0yMNQZxrnsMNEVavNTnwRrMd74hY+2R0Dh+O + B/JwJJBbPT4crbLleK0zrzZ5iNi3YXX8NFZEvcza6JfYGj+R00X6XCrR53KxFjfLtHmzyYyHHba80e3E + nV5Pbs0L5P3thXxzvo8/31rOtw+386d3DvCH94/y1Yev8uWn5/nko4u8/9553nzrNPffPMmd+4e5++Ao + Dx6d4q33zvLo3XO88eZx7t8/xut3j/D6a8e4f+sYN64d5sqVIzx86yaffPoun3/+ER+89w7vPVIM4Jsc + 37eJsZ5yytP9yAq3oDBShGKcNU0idMbK57J3Xg6v7e3n0bFx7u0f5OHRUd48NsqdfX28eWSYz84u4asz + S/hCjj3a2sqd5SVcGU7iWl80Fxq8ebXQikt5plzL0udGmhZXJdecjniJ8zETuZGqxms52ryWq8WtHHWu + Zc7kksS5s8rIymx1iUnqbE1SY32iOisTNVgseXqh5OUF2UYMKgZwkgZdqdqqdXu7Uw1Uhm9/pjljRQ7M + L7BlMNuSrnQT2pIMVFM/tyTq0BSnTX2MukCN5gQt+dyQoQJLxsrsVBgvtWW82JoREd/DeWZP1wk2ol+g + GMB9GUb0iWDuS9JjKEmHEXmuhU8N4LXpamzNUuNQsQ6nK/RVBvC1WkGFDjfKNLlWOJ0bgjeqdXirXo+H + dbq8WavNgxpNXq/W4PUqTd6s0uahYgBXSo4o15KQpMZ7go/K1fi8SoOvqtVVa/z+V+P/jb9IDPhri66q + VAzgP9Rp8VWdDl83GvB5nQHvlGlxv1Cdm4WKAazGhXyp60Kp82pdlSG5r2ASm9ImsDnrWQ5UymftRpxt + M+VwlR57CjTlt82SdzGFlZJ3VkkO3hj3MntSJ3OxQpc79YY8bBGO0WXER936EsM1edg4g7eaZgk0eaNW + jbtVs7hVPp2rRZP/2wCu0eG63P+y/N6rlTq81mjCWx02vNdlz4ddDnwk+FAEirL/oNWCm3WGnJe6PJw/ + nVdyprItczIbUl9mddLLLE14kSXxUiZNYrFgUcJEFkr/Wxw/ieUJU1iRNJWVUi6PlZyXNpNXSozkt1nw + SrGy/IIOG1Jmsl7anGL+bsrXZ12uMt24tmoK6IVSLikwYK1ge6Yue9I0pH2qsT9lKgdSJ3Eo7SWOZb3M + yWzp73kvcU5+4+Wy6VyumMVVebfXanW51qjPtSZ96Rd6nJT6Plqmzl7hA5tSXmRL+iR25s1kr7yjfZW6 + 7JM280qpptS7YhIrBrAOF6tMuFJlLHVlwKUKTSk1uaSsEVqlJuU0rlRP4VrNVG40zeRaixyTdvCq3Gu3 + 1Ncm+f76EkNWl1qyqMyS3kJTmvKNqCu2oFrafF25K+W5jqTFipiYq81s5xnYW0zC0mQKRnqT0dOejpbG + LDTUn5i+s9QESvkfA1hKNSnVnxrAs15CT2MS7qZapD81gLvCfOgNcmZwrq3wXQU2AuunsGVesC0Dcqw7 + VMp4L4ZzQunOi6AkwZ+EEHfh/U74zXaSUpkuOJqGyiIR7lVkx0Xga2+GjdZUzNReRn/miyoDWE3zeXQN + JmJsNAkL7Rdx1niB2Vov4a/3EiEGLxKq9QxRMydQYfQso45T2R2gx7loc85G6HHYZwoH3V7mmOd0Tvlo + cTrAhKNzzNjua8ayOZYsjnFnY0E4e2pT2ZgbzuJID+b7yvEgB3bkhrE82Zfa2SZkOoqumCtCPTeBZb0t + rFswQrs8c2JkOBFBItTSksjNzSC3IIsUyVW+fh6ikwxxtNMXPWNBSrgX1VmR1GaGU58STFtmJONVuazr + rmWVYH5jKfNayhjqKKe/s5KBrmqVCTzQXc9gVwODPY0MKSawAtke7nliACsY62+Usk41hfSYMo30Uywc + UFDP4qEGlgw3smxeCyvmt7J2gQi8RV1sWNLFRsEmpVzcyQbB8nn1zGsvoq0ilaK0YNKivYkLdCLM14JI + fyvRWQ4kRbqRkeRDXkYABVlzyc0WSJmTOYfMVB9SkryIj3MiJsqBuBg5P86F5AQ3Oe5OSrIHyakeIki9 + yMqdQ0FhEGUlEVQWx1BfnEBLWRqdyn+el6RTl5Momi2CpFBf5no6iBZ0EriKgHbBx8MJL1c7PF2s8ZXP + QgK8SEsIJ1fEbFZyJLkigisyI6jNCqG7SN5jQyxb26PZ1RHOrpY5bKlyYV2hHavzrFTTPy8UHThfcs+I + 5IThND1GJDaM5eqzUHL+8lJ91pbrsV768eaimWzNnyL9eQpnayUftJhwv9NSZQDfbDbkSr3OEzTqcFX6 + 7dUWHYkVEhslrt9o0ORGvcTt2lncqJrJ9aqpKtyqFdRN516j5JRWNR51avJOjzbvD2jzQZ+gV4t3+zRE + IyrmryYfDMqxIQ3eGZjJ+/M0+GhMh49G5fwRHd4dke+OaPGO7L+zQIe3F0puUgzgMcnNwxKb+zU536Hk + hOlc6JRnEC5+d0CXt+YZ8dliWz5fZMfH41YqA/gt0XbX+505XG/DKsn9rSFqFHiIznaeSb7rLLr8tVke + qs3ORInlhea81+rInwed+deoAz+PWPDTPAP+NaTJP/vV+G5AjR8GNfhFMYHnafOrlE8MYJ2nBrA+dBuA + 5B06Tfix24a/Cmd/v9WLS+UO7M60YSzSkpa5lpT4W5PqaUWEqy0hLk6Eujo+gdtTuCsGsDNBnk4ES5sJ + 9XIk0tuZtLleFEf4UxsfSG2cP7lz7UmRvh7tbUq4twmJoTZkxthRlGhDTaotbTmO9BS4MFjsxmChK32F + TvSWuNBf6cVQ7RyGm0JoK/ejJNWRlAgrIn2NCXQzxNtGMX81cDXTxtNMXwUPE31cjXVwMtDCyfgJHEy0 + sTPRxdZUV+KzFiaGmujrzJAYPRM9rRnoKtCcha62Gvp6GpgayXnmxthamWNrYYatmbHKJLYx0cPaVB9r + KW2N9LAy1MJcTw0zvRnYmKnj6WhEgNRX0Gxb5grfD/SxktKSuVIG+thI33EkPNiNqFBvIkNnExbkRVCA + J2HBPsTFBpOUGCb9OZiwMF9CJPaHCkJCfWTfT2X4qv5YFzGHSGWaupggYmNDCQ+bQ3CwH2GhcwgJnI2/ + tyO+rpb4K+ule1mplioJlWcI8jEjxM+UEH9ToiRnJMa4kBavmE6uJMS5ER/vQXyCO7ESQxTEJboTL4hN + dCEhyZWYeCei4h2IjrcnIsGO0AQbQhPl+omWhCXKe000IjLJUGXyRiUYyDkGRCUZEZVsTHSqGTGpJiSl + G5EtvLCqyITGQn3ai6X/l0mOlTy9v8WOMz3OXBDucnnAhYtDnpwa9GR/rzf7RkLZvTiBDWPJEjMjaCqf + Q22RD7XFPjRVBtBYG0h1xWyKS9zJK3Qkr8ienAJrMqUvpWXpkZyhS5KUaYoJLEgXnpKSqUVSmiaxKWrE + JM8iJkVdnk+DFOEz6akzyRZuWpSjQVmuNhXCdSqEd1fmaFGbp0WHPG9Pgym9Teb0tVrR325Nf6ug0YK+ + KjlWZspwqSkLFAO42JKlBeYsyTdjYYEF4/nmjOQI707WoTNiJq2Bk+nwm8jw3Gksi5jF1lhtjiTpcj5N + +H+GPvfShffK+W9nm/C6xMwbcVpcDJe4Jue9KXz9nQI7HmZY8IbU/xtS5w/j9Xk/yZjP061UBvB74Xrc + n63G657qvO4hvNJd4pSzPg8cpLSReGQp8UvwrrnEMuEeb0lfemCkyWv6oi90pnNWMYDVXuSYluR2U8nt + zlqc8DXkZLA5x6KsORJtzd4wU3YE67N5riYbg2axK16bo6IFztc4Cqdy5lyLMyebHTlQb8vuGmu211ix + qdaSjdXmbKw0ZXOpIVuEa20pFK5YZCRczpJD1dbCNW04Ui1asc6O4zX2Kt14uMqeI1VO7C+3Z7PklJXS + tlal2ggP9OVGfyrvLivkUncIp5o8OVrvzME6B440uoo+9WJ3hx/r2v0ZrpstbceZ5GQTQoLUCXCbRIz3 + LLJDdKmIM6Y921benwvLW/zY0BvF+t5keafBZEdaEeyuhqf9FHw9tKTfmksfdJW+K/053Ft0vD3WNhIr + rC2xsXPE3skdBxdP7Jw9sbF3x8rWVQUbOzfs7F2xtXMSOODi5Iy3myvxwnGUdcUXDA/S1dxMVWkZJflF + pCenER0VS0BgEN4+s3HzcsfT2xUvL3v8Z9sRKbwhN9mH7sZEVo6Xsnl5DVtW1LNosFj6WgShAdb4eVnj + I9/x9PDGzcMPF3d/nATOHnNk2w9nVz8cHL2wc3DF2c0Nvzk+RMWGk5GVRGVtPl191Sxd3s2mjQNs39zD + 7i0d7N3Wyt7tTezd1cau7S3s3NHC/r0dHD/Wy6GDraxZnUO31LtiAHeXmjBeY8GGFnv2tNiyv96Mw6Jj + jomWO9Omw+U+4elDRpzr1+d0vwEnBvQ5MWTM0X5j9nebsKPNmA2twiVbRGc2WtFWZ0lTgx1VDQ4UVNqS + VWJFar6F9HNzsiQGqAxgiQm5xS7kFNvItg2l0oYqlXWDm12obfZQoV7Q3OJFa7M3rY0etNS6yLWdaCy3 + or5IOH+hGY25hrQK/28ptKAuz4Qy0bV56QZkZxiTkWFCcooxcdLnYhJNiIwxITDUEN8AHdw9NXB21sDR + QRNbGx3cXCWXhgfSWFfL2Ng4y5YuZ8mi5WxYv5nDh09w6bKyPvM9bqpwl+u373Lztfvcff0tLl65pZqu + e3zRCtW04itXb+TAoRNcu/4ar915kzt3HnDz5j2VIXzk6GlWrtxASWk1bu4+6OuboaVlgKaGPtqKEaxr + gp6eqeq4AkMDcxWMDC1UUEYKGxpbYmBijZ6pJTomZuiZmMq+PqYSHzycjYnylzoVTt+Y4UF3gaPoDnM6 + s80E5nTnWNOZ66D6R4qWXE8GKmOZX59LS14cmXPdVQZwRXgQFYF+lAnHLHN6YgDX/tsADgumOSaG1sQ0 + GlLzqfxfBrDol/waMgtqSC98gszCWhWylTV2BTmFivnboEJ2voJ6svKeQPmuck6WlOlyrYzccjJzi8jN + LyY/r1xQQWGu3E+OleUXUF2SSVttisT6OIZaIhhpCWSsyYeFzV4sbfVmucSTlV3hrOlLYEVvBmPt6fTW + p9JcmUZdaarw7SwqiuVaRZWUFjRSmN9GQX676JcueU7FAG6msKSOqrJy0QI5DNUksrgpnFVtAazp8mN5 + ly9jHf6SZ4LobIujsTmN8qo0SiqyKCnJpqQ4m4qKQpUB3N9Zy2iv9PveWhZ2lbOgs4SF3VJ2VbKwr46l + 81pZNd7N5hXDbF01j+1rRlTlsnnNjHRU0FmdRWNxEq3lGbRXZsnzZAtyaSrLpbEki5r8dKpy5TflSSnb + FTkplGWIdkiLozQlllIpS1JjyRd9kCo8JSVE+l/UXDqKM1SzL20e62PNvE4WddUz3lkn96xloL2K3pZK + elqr6GsRHdZcy1BTPcMNdYIaQRXzGpW1gAtVI2Wbi1KkH6bRJvXaVpIjyKWtNJuWkjT5LJnmwgSa86Np + zgunLS+E9rw5dOV70ZXjTEeOrbRLZZS6C0Ol7oxIfBiv8WdhVQCLKuawtDxANIg/a0q92VjmzvZKJ/ZU + 27CvzooDypJeLQLJ9Qe67NjT6cC2TlfWtvqyoDpU+GokveVxDNSkMVCfzaC0997aXDrLMiX2Ccqy6SrK + pKMwnU4pO4ufbLcUptBalCjPHy+/KVbOiaavOJr5ZbEsq4xjbVWc5MsE9jUkcbAtjf1dGWxsjGVhaSB9 + uV705PnRlRtKT04YvVmewi3s2FrvxKuDrlyZ78TVebZcHLDnWLcTO1vdWVbnRVO2C/lJwveivIU7ejE3 + UMrQAKJjwkhKiKIwO5XWmjKWj/awa+0idq0c45VV4xzdsJRTW1ZxascGju3YxKEdWzi4fQcHtu3k0LY9 + HN0ukPLQlh3s37JZjm/isJy3f+t6aWvL2bRsEWsWjUo7HBadPMLy+WOsW7yE3ZvWs2vDWravWylYw/bV + 69i6Yi3bVsjxlZvYu2Y7B9bt4tAGuc/GHRzetI1Dm+XemzZyZNMmTm1XRhjvUBnAmxaOMdrRQkV2OpFz + JNfZmmGmNQsTjRlY6qrhaKZDsLc9mXFzKM2JoqoglvqyBBpK46W/JlBTHE91QTwVufGUiS4uyU6mODOZ + wsxE8jMTyMtKoCAnXmJEPMX58nlxCuVl6ZSVKmt+p1JYmCz9O1n6dwo5ecmivRMl7sh+UQZ50k4Ly/NV + qKgrY3C0n43b1ysjgM3x8ZEk7W+rMoFne1rg5mKMk6M+9nY6kkD0hCQ8MXz/JzyUY07auNtr4u2sS4C3 + EaFzLFRQDGBfdx1mu2mIANElZI6+CBB95nhr4us28z+jfwNnS4X46IlQ0cHfXUOuMwN3m4m4Wj//HwPY + 3W4CXo4T5HqKCfwC8WHTSY/TJC/DQCpFSH2KHtlCTvPTDCgQcV/4dARwqRDSShEBTRmWNKaZUZ9sRG2i + AS2yrYwCrozWIcd3MvmC0oBpVIfOoilKm454PfoSBLFa9EXNYl6susr8HY2ezmj4JMaCXmBR0LMsCZjA + ssAJrAqbwNrwZ1gf/hwbI59nU/QLbIl6jm2Rz7AjcgIH4idwMvN33KiapBL1f9tozY97bfjlsBW/njDn + t7OWcM6a307b8fMxB77b68gXq015c1CNG42TuVI9jbMl0ziaPYV9yVPZE6/B1kgtls9VY8hrCt1e0xgI + 0qQvWJMm7ykUWf2OHNMJFFlPoMv7BXalanKpQIcH5QZ8XmvIX1tM+EHE9y/KekzDZirzlyU2sNUTDgTA + iRB+OR4ozxLEr/vmwiY/WObN41EX/tljzZ9bTPm6wZAvavX5sEKIe8ks3syZwd3kKdyOm8xrMVN5PWom + DyKn8brU173IF7gX8wxvZTzPh6WTVAbwH3u1+PsCI35cZcVv21xgrzscVExgwSkFrvx6Wpl22InfzisG + oj2/nLDix0Om/LBXvrfLmJ+3G/F4kxG/rdGH5XryjPr8tkiXv/dN5uvGZ3m/dAJv5f+OL+on86c2df7W + Y8D3A8Z8N2DEtz26fN2pzpcd0/mqczrf9KkJNGRfjU/rp/Fuycu8rRjAOdN4q1CLN0oMuF2qGMDmnCu3 + 4HCpOdsKDFkqQq1X3nVHxDN0xz3PoGLgZs5gTDCeOo0FUieLEiazMH4S47ETGYl5kaGYFxiMe5H+2BcY + TnyZkdRJzE+d+BSTGEmZyFjaTJaI8FsqYnE4bjqDkRMZjZjIYsE6uc6eFOUfAmZyoVid66Vq3CydLuUk + 1eiCr5Yo/2Awm8enA+FuFP/6IJbvv0rkpz8m85My3fLXsfz6RTi/fBzEj29789NDd3594MbjB6789qYr + vOnGb7L9WEreUKZuluvcCIJL/tJGfeCkLz/uceFPK0z5eFAxC17mftnz3C95jtdLn+fNSqm3pil8KPX5 + +yUG/Gu/A7++6sJvl+S93vLj13t+/PzGHLnvXH59K4THD4P5121//nLJi2/kvK+O2PLNYTv+ftSVf530 + VI3+/elCCFyNg9upcD9XnqtYynLZr+CnV3P5dmcCHy+Yw50mEfLKeo8pM9kV8TybgyawSfBvA/hIxgRu + Nsjz9c3g86X6fLPVkr+ecOdfN0PkWZLgY7n2FyXwTS389d8m8BD8vAAePzGBH/+2TTUKmN+UUcAnBKd4 + /PgoPz/eza+/beDxL4v49fsufv62kn9+ks67Z724ucWUUyMz2N/8siT0aeyu0mCz9Me1QvAXZZgzEGtA + V/AswQx6RGB3RcyQ9qHOAiH7G6pd2FTvzob6pwZwlTuLy50YK7ZjKF9Q4sZIlR+L22LYtqCMG0dW8PVb + 5/jhqzf54ParLOqpJdrPAT8nY3KSQxjqqWHhaDt1dTmEhbvj52dHTk4sixb2sWTxMPEJESIMLfGf40tL + WwuHjh7iwcM3+OKrz1Xr/P7hT1+r8M2fv+FP//UNf/v7X/jxqQH80ccfcOLYYfq628nKSCZTCFp7Sx2j + 83ro6WyQxJVCdKgyEiiW8cEONq9eQmdjlcR1d3xc7agozOLA9k18oKwB/PZ9Ht6+zL1rr3L11F5O73ti + AJ/esYhT2+ZzbPMAR9a0cXhRBfsG0jjYFcXprhCutfvwWqsrD1odea/HnU/m+/PBaABvDs3larsnh0ot + OVbtxKlGT/YWW7EkchJLwl5kddRLbEmYxMkCPc4X63KpWJPrZcqUsOa80W7L3S5HbvZ6cmc8jA92l/LH + S4P89f4afvhwPz98cZIf/nCBf/zxGn/86iq//+IaX3xxnU8/u87Hn17lg48v8sFHF3hfhfO8/+F5qavz + fCbHv/zkMp++f5kPHp3n4Runuf/6Wd565xaffPYOv//9J3z04bu8+9brvPnaFc4f2y4Cu5O+ungas0Xc + ZrnQkeVMt5SLK+eybziTN/YN8NGri3jryDweHR3htVf6uLq9lbt7u/joxHw+PCyfH+jlHRHPt5bkcWU4 + gSvd4Zyv8eRMgQ2X8yy4lmXItRRtLsXN5EToS5yOfJkrKWrcztHjrtTPbeljV7M0uJCtzsksNQ5IvNoU + M4kV4S+zNGIKS2LVGIvTYDRZl5FMA3rSlHV8NehI1aYrXZ+uNEOBsp6vOWMl0pZLHBnOtxUSaU5HmhFt + yQa0SV5vSdKlMV6Tuhg1GuR67ZLnB/LlO+X2KigGsDIaWJkSWlkTuCfDUK5hQF+24RMDOF325Tq9cp2B + RG3mJUifSlZnhTLqW55/R54Gh4r+2wC+qqBcW2KpBlcKJKYWzZD4pstbjQY8rNfjzTod2dfifpWmQJvX + K7V4UKnNQynfrtDmnXJNPihT5+MKdb6o1uSrGg3+VK/Jt/XaqrV+/yf+0qwtufhJqZjEX9dq8qV854ta + HT6Sa76eP0vqexbX82ZytUCdCwUzpV2qcalGj1crNdkj+WlzusS2vBc4WD2LM+0GnG414rB8/kqJDrsL + ddiWqc66xKmslxy0LXUqByRPX60x5F6TMQ/bjfiw25iPJS9+0Kmtmgb67RYN3mmV39Ogwf1adW5XzuBa + 8VSVAXxTYtatGm1u1upxQ+rkVo0u9xuNebvDivc7bfigw5qPRJx82ufEl/Pc+GzYlff67LjXasEFeaaT + Uq/7CtXZkDaJlUmK0fsy4zEvSTuR3Cb5cVSecUywQLBYmbpanntxvGzLOWulfe2R/HuwxpLdJcZsytJm + Tcos1kupmL8bCwxYI21zcWNUVCkAAP/0SURBVLrS5pTZNzRZKPurJH9uzdBlt3Cgvanq7EmezivJk9iX + +jKHs6Sv503h1cJJnC6ewjn5jWfKFMzkXIW0bXnXFxv0OFunxzF5v4ck1+7MnsbGFIkTmVPYKe9kb7kO + r1Tpsa9Cl72lWuzKU2NfvgbHi/W4WGXKpUpjLknbUkxwZersi5Vqgpny2VQuV0/iSs1krjdN52rzTC43 + a3GmUY/98u53lMtzl5uwqdyKZZIjlOkb6zN1RRyYUlFkTaX0mcIMGxLCDQjwmoWL9URszF7GwXoWlqZq + GBuoo6utjqbak3V/Ffx7LeB/Y4a6GjM0ZjJl1mSmK0as+kQ8TDVJn21PXagX3eHe9AU5MxQofSzIVniv + INj6CYJsGFEM4EBLekJsGEzwZigrWHh1IIn+dnjbG2FroYulhQEOtuaEi8ArKcymrqyABIn/LqbaWKhP + wlJrCgZqyhqvL6Cl9TxGRpOwNpmCg/YL+Kg/T5jOi0Sbv0iytcDod6TOmkCT0QSWOE5mX4A256KMOBOm + yRGfSRz2nMgJn5mcmaPL6QAjjvmZssvXjNUBViyPdmNzfjj7atPYkh/F0ihPRv2sWBxox/asIJYlelPp + pk+i2XRSJU9WxQYzr7acsXZFzGUT5OUl+sST5Lh4crIzKCkrorisUDX6zcnJDBdHI4J97ShOC6OtVER1 + fhzNGWG0Z4WzSIT4xt561irmbUsZo+3ljHRVMNRdzbDkZmUa6OE+ZbRvIyN9Tf8Xxvr/jWbVH1hGVets + /TfG+2pVWNBfpzKCFw02sni4iRUjTawabWXNglbWLmxTYdVoEytHGhntLqOjNoPKvGgyYn2JD3Ul3N+G + IG8zQn0tiZB6iQ11IiXOi8wUZcSvv+TzJ8hM9yM12ZuERA8R7Y5ERNoTE+1IYpwryXIsWcR9UrIHCYKk + VC9yCoIoKhOxWx1Pk9R/W00mrZUZdFRk01GeTVNRKpVZcWTHhxAX4kNCRADJMcr0teFy/3BS46WMl/2E + MDKToygrTKeqJIva0kxaKrLoFR4zWJvOwsZU1ralsKU9mu0twaopoDdVOKtGAK/ItmCx8KyxNBPh10/W + gx9K02UoQ4dRiRELCvVYViYxpFyf9ZLzN0uc3VY4jb1F0zhdq821ZmPudphzt82M6836XGrQ4ZLE8EtN + OlyWGK5AZQQ3Se5QGcAaTw3gGVyvnKLCzRrFBJ7G3cbpvN4imqldnYcdgs5ZUs7inS4NHnWr83avOu/1 + a6qM4XcH1Hmzaypv9U7n3SE1gTrvDovmGtLg7XmaPJqvxaMxiddjOioD+P64NrdH5DmEl5/vnsnZjmmc + E41zvVeD1/p1eDhsyCcLrfl0gQ3vzzdXTQH9cMSZq932HKi2YGWmPm1BMyl0nUSu0wyqvbRYEGHMtkQT + TuRa8EaDA1/1OfKXYUv+NSIaTJnueUiLfw2o8Q95xn/0zuCHfjV+kvv/Isd/lfLxkC6/DT41gPtEp3WL + Xus0EBjyU7cF/+j3lGv680arF8dLnVkWb017sAUl/uakepgTLbww3NWFCHcnwtwcCRcoZZiH7Hs5EeLt + QthsVyJnuxDr40ZagCdFYb7UJQTRnBpCfrATqdLX43ytiPa3IjHMlsxY6avJVlSnWtGcqfzB2JbBImcV + egvt6Sl2oL/CnaFaX4Ybg6Sd+lGW7kR6tHINY0I8jPB31MfHVhcfG0P8bExU8LVSRv/q4mKsLTFORwVn + c10czfVwtDSQmKiHuYkO+roz0dNWjN9paGtMRUt9mgo6mtMx1teUGG6IvbUFDjZWOFiaYmdhhIO5xFIL + Q4GRXE+2TXWxNdKQeKmOk402fu4mhPrZEqEYvQEOhM+1I2yOLWFSRgQ5EhfhQWKsv8SwucRGKYatFwF+ + 7oQH+5KWHE1uVgJpKZGEhs4mKMhL9cc5BWGhPqoRwnGxQcTGBBIXJ30xJVoQS1RkkMr8jYkOJiZyLkF+ + rszxsCbI05pweZboOXZE+cu2vMvwOabyXGbER9iTlaLMLuAl/dpV4oYLiYnuAjcSElwFbsTK8dgEeZ+J + zsQnKYawM7FJzkQn2BOuMoCtCEtSYEF4khkRSUZEJxkSnaivQkSCnsoAjk42Ji7NjIQMUzJyTCQHmdNW + bUVftRlDFQaMlWqzqlyXnXXGHGu35my3Hed67TnT78ypQXcOKaNXFoSxf2kCWxcksaA7gs6aAOpLZlNT + 7E1dhR/1NXOoLPemoNCZHGlHmbnWci8LkjIM5Jk1n0B4b2KWPqk5gmwDktJ1iE3WkudUk+dUl8+1SMnS + IUP4THaGBgXZmlQU6FJbYkhdsQLJ/1I2lopOrDWnt8GC7iYrelqt6W2zoVe2u+vM6awwobvEhMESM/lt + liwus2GFaJzlBZYsFd6wqNCKUamHfuHC7WEzaZoziQ6/SYwETWdllAa7k/U5ka7HJYmLt+QZHuRq8q7E + xg+LjXmUY8jdVANuJupxS857XX7j67mWvJZixO04XV6L1+WB1Pu78h4+TDbhvRh93pgrHNZzOnc91bjr + ocE9dx3uuYiGcNTljo0Oty00ec1Cg7tm6tw3VeeeuRZ3jNS5Jv3jgnCDU+ovc1zjRU7qT+ZVa3XOuOty + 0t9Itf7v8Sgbjko/fiXCnF3hxmwO1mFdiDpbE3XZV2TOq03OnO9051yXOyc7XDnQ7MSeBnu21duwsd6K + 9bUWrFNMYKmzTWXGbFRM4FIj9lRasK/Gmv3VthIT7ThS58ihGgf2Vdqyp9yGXeV2bC0SXpZiwEi0NuNx + 8t18V7lHFDcWpHG0cw77W9zZ1+wicOJwqzsH2zzZ3urNmtbZzG9URo67kCO5SJnGN9RrMgl+sygI16Uu + UTSLaPpxyVurmr3Z0B3KmvYougt9yQo3Idh9Gv6uU6WfaUkfNpf+6kpOxhzp07OZ46tMOWmMg4MV9o7O + 2Du74eDihZ2zFzaOntg6egiU0hN7B3c5xxUnRxe83D0I8JlNUnQkDZXCeQb76e/ooL2pifbmVuqqaynI + L5D+GE9gcBBePh54S6z1mW3HHB8r4Q4OlKR5MtAcwdrxdDYtyWH9gjzGutKozg9U/eOHl6vERWcbHO2d + sLX3wNrOC0s79yewdsNCYG7hhJmFHeZW1tg62OKpTJEf5C19PpCc/GgamrLo6y1g4UgJy8eLWLO0mHUr + ClmzQspVpWzaUMWO7fUcO9rDQcUAXptLX6cP7RXS3ytMWVxvyeZ2B15pteVQgxkn6/Q5K3z7guidK12i + 93t0uNCrw1nJU6f6dTneq8tB0UW7JKdvrNNkqWiueaLx2svkPZUaUlNpSVmVLdnFlqRJ/0rKNiMxw4zs + QieKKrwpKvchr8SV3BJr2bamrMZWZRjXNDpT2+ymQl2jC42NbjQJmutdaKpxpFGu2SjnN5Va0FJiSYtw + /rYi2ZZ+3CDxq0pQXmRJiaBA7ptbYEVWnhXpguQMa6LizQgKN8RnjjYeXjq4Ca91cTaS9+UgMTyMlqYG + Fi5cxFJlBPCSlWzftoeTJ89x+coNrly9yfUbd1S4elPK23e5fe9Nzl68xvZd+xlbtJyBeeMsX7WBA8r6 + mTfk8zsPuHX7da5dvyvXuKUygFet2kipYgB7+KJvYI6mlgHqGnpoaRuho2eCnmL+GjzBvw1gY0NLFUyM + rTASGJrYoG9mha6pOfqmprKvj7mZNj5upiQG2VEe70Z7pgf9+U70SizqzDCRfRO6sq3oynP4f7H2l1F6 + HdnWLmi2WEpGJSiZmUGZqWRmZmZmRjEzMzMzy5YFhjKWXaaqMjOjLD299iuXT53xdffovvf+mCM254aI + tebM+UaEqsdlX0Uw81qyGGvIpzo1jPRAV4olXykGcHWIL5VezlQ4WVPlZEWthz1NfxrAbfHxtKdm0ZJZ + TFVWOSXZlRRnV5OfW63qyZtVWC/f/CGyixpU+E9v34fmb/NfeGgCP4SqF7Ack1NQR1a+MjdwDbkFZRQU + lVFUUCWopqSggoqCUmpLCmksz6SnMZ2BljiG2sIZbQtgrtKTstmTBY0eLGr2ZXlnOKv6Eljem86ctjT6 + GlJpr0mjsSKNurJMasvkGUqqqChsprSwU/5G118GcH5xM8VltdSKnumWc+Y2xrBCGXmgy4/1PT6s6vZh + fmcAA20hdLbH09giXF34e3lNAaXluZSW5FJV+dAAHu5pYPFIK2vmtrFqpJZlQ+UsGShn8WA1S0bqWT6n + jdULu9mwtJ81i7pZvaCD5XLs7O5KOmtzqMyNpDBlJqWZEVTlxFCdl0htQQrV+alUCDcpFs5RmBJNvnCV + oowEFQpSYsgSrZAZNYvsmFAVUsL8ifBxJtLbgeQgTxpEWyzva2LbwhE2zB1gSV8LC3qa5O8+NIBVvX8F + igE83NYo77hJ3qOgtUFQK8uVDDUUqea6bciLpz43gebCdJqLMlVoKkoXJAsSaJI4VZ85i4b0QKk7frRl + etCd40xvtj29Ui/78mwYKXFidoUb86u9WVjry6IafxZV+bJMYsaKcg/WVriI7ndgR5Ud+2ptOFhvJfHK + kiOtlhxtt+Zwlx17u2R/tzPr27xZVDuLgZIw+sqiGKxJZrgxm5EmxQBWDOoMOkvS6BGt1Fks95mdQFt+ + Ch2FqbQJmgqTaCmKp6U4VjRrNN0FEQwVR7CgNIo15TFsrohmV00M++pj2d8cz+7WBFZXBjO30Jv+bGcG + 8rwYLpzF/JJIlpUFsq7ClQPtLlyZ7cpz8+25OdeCa0MWnO2341CfJxs7Auku8aIsU/JNgnwn5ceG4f5E + RgknjQ8nNTGC0rxkOusKRae2sGf1CPvXjHJ43VxOb17Kue0rObt7Haf2bOb43u2c3LeHk3v3cWrfQc7u + O8SZvYc4sXsvh7Zv4+D2LRzeuYV925U5hJexYeUi1q9YyMrFYyxbMMLyeSOsXzqfPZtWs0P2b1u1hN3r + 17Bz7Tq2r1jDjlXr2L1qPXvWbObAOrnehq0PsXELBzZsZPfqVbJ/JUc3beDYlo1yzBo2zpsj9atbYnUR + GRJHAhxtsdTTYobWNCnVcRP+nxTmRV1xIj1Nks/achnrKWR2byGjPUUMdxZJOy+iv7mYvsZS0ejl0jYq + aa0po6W6lKaaYtHQ0t6kPrY3ldDRJse0yzFtZbS3lNLaWkJrixzbqqCCZgXtVbRJXe8aaKFvpJve4W4G + Zw+wav1KDh47oPQAtsJfyHrgTAeBPX4+1nh6mOHqLCLDQcSLoyEuInYeDv2s/z8GsIu+auhnb9nm56YM + QzedEL8ZKvNXKRUD2M9Dh0ARkcF+eioEeGnh66qmMn8Vw3eWr8FfBvDDHsDTcLcZpzKA3W2fEDyGh72C + R/ByfgR/90dFTEwgMUJNxIMeWUJEM1MNyEgxIEuIX66Q0HxBSaJiABtTLWS0Md2chjQzGkQQVAlhq0sw + pCnZhMpoPXL8RegGTqYsRI26SE2ao3XpjjdgMFGfkQRdhqPVGYtRY170VOZHTmJRxDiWhT/NqvAnWB/+ + KBsjHmFL9KMPzd6YJ9gZ+yS7E55mb/yT7It/nAPxj3Ay9REu5T3O3YZJvD/HkB822fLbbjvuHbTh3nFr + Hpy15Y+z9vx6zJbv9znw8XpbXp9jxK0uEfE1yj8kp3GyaCqHs6ZyIF1drq/L1mh9VgRrM8dXjdFAbRbE + mLAg1pj+YE1qHR+n3PoR6hwfk33jOZSjy81yfV6vNuQDIT3ftBrzc7cJvw2a8sdsM1hkDWudYL8/nA7j + /qVIfrsczq8XIvjjRDjsCIKVvvw2x4Wveqz4sMmU92uNVEMj/61Inbt5k7mVPpEbCeO5Hjuem1GTuBM5 + jecjJnM3bILKAH4p/gneyHmadysnqwzgj7o0+HJUn5+WWnBvnQP3t7rAblc46AHHlbmAXfjjlBP3zjjy + 4LyUZ+1U8//+csCUH3cb8ctOpQfwQwOYdcawykjuUcplRvw4Oo3Pu8fxfuPj/KP2MT7p1uCb4en8NNec + 3xfZ8NtiW36cb8HXs435YkxPoMMXs7X5bFSHj/o0+FfLVN6umszfiybyav5UXsrX5HaRHjeUnoHlMzhb + bsFhIWfbik1ZISJpMP5puqOfoE+++XCaiKmsaczL0mCh0os3bSpLUqawJEkxgiczL3ECcxLHM5w0XurY + 0wynTGAkdSJjaZNUmJ36EHOVc/MMWJyvzFupyez4qfJ9J7MkZhJrEyawM2USx7KncaFYgxtlSk8tNW5V + T+HlDi0+WW7Hr/v9eHAuGO5G/WkAJ/D7Z8kq8/f+h7HcV3r/vhnETy958uMdJ3695cC92878cdcZXnQT + uMPfPOEFP7itmK8RcDFEvok/94/58eN2Zz5aLCKvR5Pnyp/gZtFjPFf4KHdKHuPl2nH8vX0q7w1r8/Ey + Q37ZZ8/vJxUT34MHV325/1wg9+7M5Pe7CoL4/bkAfrzkyVdn3Pj8mCOfHrTjy8OO/HDMnV9O+vDb2WB+ + vyj3cCUenklFlKmgCJ6t4MGVcn44kMkHq8J5qdeVK5WmnMjR4ljaNPbLd9kT95jgUQ6kPMqh9Ec4nvMI + 12qe5PmOibw5R5t3pc58vNueb88G8MutGO6/lsGDf+TDBxXweS1808KD//QEvvewJ/D9+xt5wB7gMDw4 + xn3BvfuH+f3+TpUB/ODeEu7/NMC9r+r44d0c3jzvz83Nlpwa1mR33Xh2VE5hU6kmq0r05fuaMpJuSpe0 + 5/ZZ6nTN0qA3Upu+aG2pH3oszLVgXbUbG+rdWSdYW+fBiio3FpQ7MFZkw2CeFSMiOMYqfVjUEsWWOSU8 + c2gpn7xygd8+epV37pxjcX8DcQFOBDqbkZ8mJHKggUULemhqLiIq2oeZM50pFCKwZPGwiIIxkpIjsbO3 + VP0Kt62zjeOnjvPGm6/z2Ref8uU3X/L5V5/+hS8E33z3lcoA/v6Hb3nzrTc4dHAf3R3N5Ci/XCqSJNfb + xoK5g/QL6SoRMhenMoDj/jSAF9PTUici0YsATychrPkc3bWVt5UhoN94kddvX+WF66e5emoPp/et4+TO + 5ZzeuZhTOxdwbPscDm/q59DqJvYvLOLQaKoItxiu9c7kdrcXr4j4/8eQN+8qBvDsmbw0GMiVVjdpu9Yc + q3HmeL0nW/PMmRc+joXhT7EmbgLbUqdwosiAcyV6XCrR5lqFLndbzHi+04ZbPU48O+DNi8vjeXd/NR9e + HOCzW0v57u+7+OGfR/n504v89OUzfPP5TT7/9Dk+/fQ2H39yiw8/vskHHz3Dvz+4psK/BB/8+yoff3CV + Tz+6zhcfPsOn/7zBv9++xj/euMRrr13i9bdu8s9/v84nn7zH+++9yZuvvcArd6/xzIV9HN+1kDWzy1Vk + fax6JqNlPowVe7KyLoRDY9m8fniEf51fwhvHxnjt6Ai39/TwzPY27uzp4PWDfbyyq53Xd7bx8uY6nl2U + zbWRBK50hnC+yl3iiT1XpE5dyzLharI+F2LVOB4+npPRE7mYoskzOYbSxk14rtiYq3nKUGs6HM1QZ2fy + FFZHPMXCWU8yP2wi85W8GavNSJIeA+kGdKbp0JaiLaJKhy5Z70qfLjCmL9ucOaWOzC1zYuRPA7g7U9pD + honAiE5Bu+R3xfxVTOC2FH0RezOYU26nMoDnVtgxu9ia4Xwzlfnbk2Eo5XSVCawM/9yfMZ0+Ob9PnmUg + UYfRRE3mp2iwKkubzfki7iWuPzSAjblcN4PrdaZcrzSQmKrDNcltN0s1eKFWn5ebpvO3BkNeatDlhTod + nq/V5fkafe5W6/FCpS4vVWrzqvJjqCod3pbl/zaAP63X4ot6yTFND43e/xjA37To8V3r/zaA/1mlqRo+ + +pViNZ7LnMSNzKlcz1VTGcCXizW5ohiJ9YacrtFhT4HU15zH2V08gaMNWpzvMuZsuzHHG404XDOd/eXT + 2VGgy5ZMDbYrc1xLHjteqsPNJjNeap/Ba90zeLt/Bu8OGPN2jz5vSO54s0OXtzoNeU3u7aVGHe7UaPCM + 8uMi4SBKD+DbDXrcbjLidqMht+r0eV7u5eUWU95oN+cfHVa822PLByMufDbPi08E740682qvLc+2mXGx + wYSjisGSPoVlSRNZkCi5MnYcw8IZRuImMZwwRTXs/ezEKcxLmsrCpGnMjX84esbqTE12Se7dV2PJjjJT + 1mbpsFLpxZ2rz4ZCuWaBEctz9JiTrM5Q/GTGktWYm6HNsix9NmUYsCtdn93p2uxK02BP2hT2ZUziSP4U + TpWqcUaeTcHp8ikcL5nIsRKJAWXqnJHnPddgwCl5ziPKMM9FGmzNmszGjAlsyZ3KzhL5BlJXFAN4b7UB + u6XO7MhXZ3+BDidKp3Ox2pRLVaZcrjTiQrkulyrlG1YrvX81uFo3jev1k7neOJln2qZxo02dKy3anG2U + v1WnXNOY3TUWbK+2YVmeidRfXWqTtUQIT6c035zSAltyUsyJFg7o5TQBmxmPY2HyJA7W6gJ9LM30MDLU + QVdbE03Nh1DXEvzHAFbM3z8N4Ema/6cB3BgmAi/Sm6EQZ0aDbVUG8PxZNv8Lc0NFzIZYMhhuw3CyF4OZ + war5c8NdZ2BvoomR3jT09TUwnWFIQKCPKh+UFWYRGeSN7XQNTNSfxlx7AkaaT6Ov9SSG+k9haToJF/Mp + eBmMI0znKdJMJ5DrOJlSd+HoogfKDR6hz+wR1rhM5PBMbS5GGXI2VIPjAZM47j+ZM8FaXAw1Us0DrBjA + uwXrQ2xYHe3K5twwea9pbC+KZUWciO8gW1aEObA9cybL4j2odzMkw1yNDDtjakSQDpUVMVpXR1FCEr72 + jqJFHIgNj1QNjVhTU0lNfRVRUbNwchKt5GhMeIAjFdnR9NZk0FsmIjY/mq7cSJY0FrBlqIWNQ00s6apk + YU8V8/trmTdQz9zBBubI9rnDzcwdamXBsOTK/4Zq/t/2hxjukPVWFg41s2CwSa7RqMKCwYfm74JBZblR + 1SN40XATS0ebWD6mmMAtrJ7Xyoo5zSwcqGV+b6WIy1xqi+MpSAt5aP4qc8r7WDDTw5QQKcOD7IgOdSIp + xoOMJD8yUv1IT5MyXYEvyfK94xLdiI51JiLakZgYZxITPUhO8VIZw0oPvvgkdxJTvcgrCqe0Mp6auhSa + 6jNpq8uhrTqLjqoclQncUZFNfVEKJZmx5CZFUJSZQHlBBtXFOVSV5FBTlqtCfWU+jdWK8K2gu6WCARG2 + Y93yPPI+57XmsbApnVWtyWxoixK+FMC6SldWF8s3VszfDDPmp0neSDUVnm38vwzgOcKz/9sA3lRlwNZy + bXZKDNgvsfh0nS5Xm4253TGDWxI3rzcbcFni9aUW/T8hbVtwReL41WZdrjdp84zEfMUAfq5Og5u1U1V4 + rn6aahjou03qPN+ixottmhKH1XnxT7zcqcnfujR5uUeDV/q0eLVfh5d71Xmpewp/65nK64OavDqkyWvD + Wg8xqs0rY4I5Orw0V+L1AkNeWGDA7XkGPCO65vKgFud6pqlM4BtyvdsDurwyogwhbcE7c614Y9SMlwct + uNtvy8U2S/ZWmrAiTZe+UHWqPCZS6TaNzgA9VsebcTDHihvVjrzT7c4XI458O2LCTyO6/DqiyS+D6vzU + P41veyYJpsiyOj8PaIm+1Ob3AW3uDenxx6Ae9wenc7/fQGUAP+gxUuG3XnN+HPLgi2HhaAOBXG30ZV2m + Pb0RFlQEmpLhbUGi8MI4Tw9ivaW+eboQI4hS4O1MpI/UPz93onzdifVzI16QPtOD4nA/iUWhtKWHUxLh + QVaQI0kz7YiTep0U4UBWgmIAW1GbYUFrtiXdBcIhhIco6BcONFDiwHClG2MNfow2BdNbHUhtrjsFSQ6k + RtgQp/zQ3cucWW4zCHW1JNTFWoVgR3N8bIzwMDfEXZnvy0qWbYxxtzPB3d4MF/sZWFtMx9hQk+n6Sg9g + iZF/msB6WlMx0JmGmbE+tpamONtbS1yxw1VKNztz1fDobjYzcLWR61gZ4yrXdzLTxclKFy/H6YT4WhIb + Ku0wUtqdgihXEiJcSJAyKdZd2rE/2amhZKWGkRg3i1kShwN8XQmfpQznLm1P2l1yQhgB/s74+Djg6+uo + QmCAKyEhXhLrAlVDvibEh6nmCU6VcyLCZjIr2JfY6BDVEHXRoT5EBLoQG+hEYpgzqZEupEUp84rbkxxl + T0q0g+QtT0rzgijJDSAz2Z3URFdSk5Ufj7hJ7JB7VeKGxJaEFFeV+ZuUKtsFiemuxKc4EZ3iSGSKLVFp + tkSnWQvkudPMSBDEpxqrEJtipDJ/46TNJ2daki68Mq/Aguoyc/qb7JnbbM3CBlOWVuuzWjj+5io99jeZ + cqrbitM9NpzotePkoCtHR3w4uiCcQ0sS2LYgkUU9EfTU+dNY5kVdqaDKj7oafyrKPMnOsSUt3ZykNFOJ + e8ZEJ+gSFq1JeKwmEcI9Y9P0Scw2JjnbRO7VkKgkfcKF18ak6pEknDWrwJh8QVG+AZVFhjRWmNJWa6lC + q3ABpWyvFX5cb0lPgxXdTTZ0t9rS0yZlkxUdtea0lhvTVWLKYLklcyptWFLlwIoyO1aU2LKs1E5lAs/N + MaVftGV7mBotgZPomTlZNJA6a+P1OJRlyrk8Y64Lt79ToCk8VIN/CK95p9yIN4tn8Irw7OezTbmTPYO7 + +RbcEf30TKohN+J0eE6u+VLKdF5JEv4Yr88LYZo86zuR6+6TeNZDjWfdJRa66/Ksqz7POOpz1UaXy+aa + XDabxtUZ07hmKpxohvAjI3XO6U7ilOY4jqk/xQndcZyV/Rcd9biozP8baMIxJb9H2zw0gGMs2BVrxtZo + I9ZHC9+V2L6vwopTHaJnBny4OOjDmT4vDne6s6/dme2tDmxqtWNDsx3rFTO43opN8u42ClfbXDWDnfKe + d9fbCuzZW+vIvjpH4WLCEyqs2VxiwYZiS9bkmbEwVXJInC7DMQYszbJlh+ScI33h7GzxYnuLKzvbXdjb + 6crhbm8OdPmwrcObNe0+Uvd8aKt0piDDmKRITeICp5AVqkVl/HQ6sswZK7FjcY0ja1o82NA1k+VNIXTm + uZMdbkSY5xRCvacRPUuPtCRL4SKuwgcDyE7xIXKWPd4eEidcbXF2ccbR2RVHFy8c3byxd/VWmcH/gZOL + Ny4unri7uOPv7cOswADSE2Jpq69h4dgIw73ddLQ0097aRmNjM+Xl5aRlZki+jyJwpsQNiQkzAxxEt1uT + IW26OtuN0ZYg1s+JZ8vCFDYvyGBJfyptZcESBywJ9jXDx11imZMz9ioD2AdLew8sbAVWHphbuWFu4YyZ + uS1mllZY2Vrj4i6cy9sRb+FVYZEe0rYCKS+NoL0xnv7WWEa645k9GM+80WQWzUlnmWjZdauLOXKwk0MH + 2li/voCxgSAGGuwZqbNgWas1W7qkvrRLvWkx55zk9EstBlxtFa0n2udqlxZXeiWXS446O6DPiW4dDrRp + sKV2msSIKSwsmcagtIeWQi2qRDtWlsygpNSKnBIrMgptSMmxJDnLkpxiZ4orvSmu8FUZwAVl1pRUWVEh + daq60Z76Jmcaml1UaBQ0t7jR0uxGc5MsNzjSXGtHa7U9bVU2dEgb7iiTti3XaC+3lfZtQ4PUw1rZXi37 + yyrl2hU2FMm+ggp78kocScu2JTbJnNAoUwKDTPD3N8fXR/LTLE/hcHG0tykG8EKWLl/J0mWr2L5tL6dO + XuTy1RtcufqMygRWcOWGlCoT+AXOXrjG7n1HWLlmEwsWr2Tthm0cOnqaa8/c4cazD43fS5ef4bwcd/jI + adas3UJVdSNePjMxNrFCV98EHV1jDAxnqExfI2NL1XYFiuGr4D9DQStDQCv1wNTcHmNLW4wsrDCxMGeG + uZHkRX1m+cg7jnSiIcWd3hx3hgucGRKOp/zfoCPThO5ca7oLHegtlTrZEMH8thwGqrIoTwgmW95BcWQg + lRHB1AT7UOHpQJmDBeX25lS72VLvK98hLERlAHek59CeXUp1TsX/nwbw/5i//6cB/HBY6Oz8WjKV4aQL + aikorKCwuJziwmqK82ukPSsGcDENJfm0lKdLrE+lrymafmlfQy3ezG5wY26DC/PrXFlY783Stlms6Ilj + aXeytMEkeuoTJBck01yZIjkkg/ryImpKKyWnNAmvfmgAFxZ2yb21kVdcR0lZBfUVefTVxrOgMZS1Hf5s + 7vJiU7cna7pEJ7X7MdgaQkdbHA1NadQ05lFRV0yZnFNSkk11eSFtyly43fUsG21l48I2Ni1oZP28alaN + lLN8tFK0Rx0r5osWWdCmwnLRJEvHFK2imK4lUtczqMgNpzgtiLKsCKpyY0TrxlEpqMpLojI3mdLMeEqE + dxQqvXwFKgNY6nNOQiSZMWESh2YJ1wghPthb4qQDUT6OpAofaS5IYeVgGzuWzGHjvEEW97Ywt6uekY4a + +lor6Gwqp6OxTDUE9EBzHSOK8dsuWqpT9FWH6IvOCnmvRSpd11Yi77UwSZBKQ34q9Xmp1OUl0lCQSLNi + pIq2bM6ZRWtWAJ3ZPnRnu9OfY89gjjVDeRYM50teLrFXzZO7SOnIU+spsd6bJdUeLBe+ubLckbUVdmwu + t2aXxIwDNdYckXx/rEEgnOVYqw1HOmxV8wHv7nJgc4cXy+tDGCoWjlocQn9VLEN1aYw056qGgu4oS6O9 + OJmusnQ6CpNpypIYny/1Q56htTCRpiJBYYzEtCja88PpyZvFSOEsFheHsaEkgu2l4eypCGVvTajkw3B2 + SXtaVxHA3FwXBjJsGc5zZUFJMCsrwiV/BrK92oUj7fZcH3Pk7jxr7swx5dmRGVwasuH4gDvbemYyVBVA + bf5M4aIhxMWFEBM7S/WjwrTUKHLSo6kpSZHvkM/aufXsW9vLwbV9HF03zOnN8zm/azkXD6zn4uFtnDuy + i/NHD3D+yEEuHD3CpSNHuXz0hKwf5eS+vRzauZX92zaybYPEqxULWSfYsn4pG9fK8sq5rFs2h02r5rN9 + 3RI2r5zPtpWL2LdxLfs3bWDvuvXs37BRZfQqhu8hVa/frVJukfVN7Jf9O1euYOeKZRzauI4jm9axd/UK + 1s0eZWl/D301lRTFxxLm5oytgS7m2tOw0lPD03q61FU/2qvSGO0sYE5vgej6YhaNlIhmLxOUs2Cgkvl9 + Uu/6Gpjd08zsrjZGOltUGOpqVPW0H+6RetovdXhAQR2jQw3MHW1m3tw2Fi7oZtGiHpYsGWDJshGWr57N + qvWLWL91BZt2rJVyDZu2b+T4mWPcfvEWj/gH2DNzpiPBwc4EBTnh72uLpxAJxQBWegA72huo4OoocNJ7 + OAy0s4HKAPZ2M8TffbrACH8PQwK9jFTm738MYKUHsJ+HFgFe2irz189DU9XL199Ni5meOoT4GAoMmOml + h5+rBp6OU0TkPC0i50kRTU8IHhfhpOAxETmP4eP8KEFeTxMZNIkYIa1JsbokxuuQEKtFcowWqVFaZEbr + UKDMY5RgRFWSEfUpZtSnmlElBKtwljpFInAV87c0XJts/0nk/bcBHKVDT6w+Q0Jm5yToMCdanXlRU1kc + OZllEZNZHTWBjdHj2R47jj1xT7E//gn2JzzBoYQnOZz4FEeSnuZY6niOpzzNyZQnOZ3yKJezH+fZ4qd4 + pVWNTxbN4MfN9vy604F7B+y5d8yBP0458vNxe77bZ8OnW2x4fb4Jt3v0uNKozcnSqZwomsqxfHUh5+oc + yNBhd6IBW6IMWBGsw3x/LeaH6LM8wYLliWbMCdel3e0pmhwepdPtSRbPEiJdqMfzNQa8XWfIJ43T+bZ1 + Oj/1GPPrkCm/zTPnwWoH2KHMwRsCV6L449k4fr0Zy6834rh/IQb2zpJj/PhpzIlPuyx5t246f68w4CUR + CDezJnNNnveqPPel2Kfk9Ke4ETmR58IncztsEnfDJvJi9NO8mvw0bxdM5F/VanzQNJV/t03hs34tvld6 + Aa+w4be1Dtzf7Ai7XHhw0Jn7Rxzl3djz+wl77p9x4PdT1vxy1Iyf9hnzw67p/KyaA9iYP7aYwEbBemNY + J+VqE35ZqM03o1P5VJkLuHciX83W56fFFtxbZc+DDS7c3+TBvfUu/Lrajp9XWvDDchO+XWLAF/N1+WRI + i3+3T+Odumm8VT6V1wqncTtrCtdy1LmYr8PZounyTWZwsMyCbUIAV4hQGowfT3f0k/RJfRhKmcjsTMUA + 1mRRphZL0tVZlqrG8hQ1lkq5MGUqc5MnMZI0gcHEcQwmT1SdM5QySYVRwVjKZOZkarAo35BFeYbMz9Bl + XrIGixPlGnGTWRM/kW1JEzmUOYVzhWpcLRFxVTGV27Vyv926fLrCjt8OKAawfM87kfzyViw/f5TAH58m + 8ceHcTz4VxT33wnht1f8+OG2C99es+H7q5b8ct2WX5+x549bzjy44wrPe/Dgtg9/XJ/F7xfC+O1UED8d + 8uGnPe58sdaGt0elDjTL9y94lCuKsSq4U/oYrzZN4O2eaXwwW4fPlhvy8275vkeUIbzdpD558eC6P/ee + DVTht2f8+fmiF9+ecOarQw58ccCWL/bZ8u0hJ3466sEvJ3z59fRMfjsbyoMLcVI/U+BGLlwrlOUy7p3I + 5/NNcbwx5sMz9RackW90QtrJ6Sw1Tsl3O507ibP5EzhbOI7TRU9wpuhRLlY+xrONT/JCz2T+NqbJ22tm + 8NE+N765EMyvt+U9vZoJ78n1P6qAL2q4/20z93/qht/HePDHYh7cX8P9B9t5wD7BIe5zUDX/728Ptsny + BjlmCX/8PMC9Lxv48Z183r0Ywu0tdpwa0mFH1Xg2Fk1iVb4ai/N1mZNrrJoPtTVCm7ZZGnTN0qIvSpf+ + OAOGU4xZVGDDmio3Vle7sqrGmZVVLiwpd2Jusa0QCnP6RIgPFSi9gD1Z2ChJeLSQa/sX8fHfzvP7x6/x + /gsXWTLQSHygMzNdzCnMiGTOSDPLlw7Q2lZGbFwAwSFuFJWksXz5bFZIYkxKjsJWCLH/TB/au1o5c/4M + 77z/Dt98/w0//PQ9X3/3JV999/lf+E8PYMUA/vubr7N3zw5amurIzUmltqZU/l6viLMxBvuaKc5LIS4s + gIK/egAvpr+jgagQP4J8XIWwFnFi33bee+15Pnzzb7z1/HVeuHqCKyd2cnLPGo5uX8qJnYs5uXuxygg9 + um2UI5u7ObS6hsMLczk1lsSVoVBuDfjzsoj/t8cCHhrAY4G80OvDpUZnjohgOlrtxEF5l+tEhI8FP8WC + sKdZlzCFXdLuThaLACzW5WKJDpfLdbnZaMqtDmue63PhuTF/Xl2fynuHann/bA//vDqHT15Yyxdv7ub7 + D0/xw2dX+O6LZ/lKMYE/v81nn9/i00+f5ZNPnuGTj68/xCc3+FzKLz++JrjO1x/d4It/Xefjd6/x7psX + efONS/zj7Zv860PFdH+fDz94i7def55XX7jCizeO8syZTRza0MP60TxWdsWypDFECGQA65vDODY7hzeP + jPDv84t49eAgL+7v49buLp7b1cHt3e3c3dHM3c31vLKtib9trOG5xTlcG47nfEsAp8tcOFdkz4VsKy6l + m3AhQY8zUWqciJrMqdipnJUYdClTn1ul5twsMeNK/nRO5+iyP2UaGyUfLg55jNkzBbPGMxqhxlCUptRj + bbqTdGhJ1KQlWZPWVC3a0vRoSzUQTFcN+TwqdXlUSPFAvjU9Up+7RMR1CroyjVRQTOCWFD0a4jVpStSl + J8uI2aU2fxnAY8XWDObNUG3vTjf4Pwzg3hR9epP06E/QZjheXWUAK8bhtiJD9pQYcKTUgDOVxlyqncG1 + WlOuSW67Xqr0AFaX59TgjmLy1hvwfL0ed+t1uFurGKOCan1uV+lxu0KWy7V4sVyb12T57Spt3qvWVg0B + rcwB/EmdBp/Vaal6An/RpMuXzfp82aT3lwGs9AJWtikG8HuV6rxSMIG72RO4kTaBq+mTuJarzrVixQDW + 4kqlPpfrp3O2Vp+DJZPZXTiBAxL7T8q1LvXO4HynKadbTUUwmHCoyojdJfrsKtBjX5EuR8v1OV8zndut + FrzSZc6b/Ra8O2TOe8ID/tGjz+uKAdypy1tdhrz6pwF8t1ZyfJW8B8Ftef4Xmgx5QekN12zEc7W6PCfP + erdW6TFszD/a5Xo9Nnww7MTHs934cLa7XN+JVxQDuN2Mi80zOF5twrr0qSxVevsmTGI4ZgJ90RPojZ5M + b8wU+uMnMxQ/VTXqxezEaYzGTRQeNpGVmdpsK5vB9gpzthQby7oWyzO0WJtnwPrC6azJN2KxcKORuCn0 + Ro1nIFZyqZy/SOrbhjR9dmQYslP271R6AWeqsy9XjSPFkieqdTlbpyOlBkfLJnNQeZ+FkluLhXPJNzxZ + r88xedeHKuXc/GlszpzIJsGW3GnskPiwW+n5Wyv1qEres9SZ7QVq7CvQ5rjUqQv/ywDWU/UAVg0BLXXh + RqMGzzZL3m5T47lODZ5p1+BysxZnGnQ5Jn/zUIMpBxut2V1ny2Jpc+2x0yiPmSoCWRn5xlhgTlqcEaF+ + 03C2ehxzo0cwN34cZ1sN3JyMsLOZjqmxYgCro6mlzAWsgYa2QEsxfxVooKatGMBqTNKcqDKAjbQn4mWm + S5avI03hPgxE+jAyy4WxEKXnrz0LQm3/F+aFWjM2y5KhcBvhyx7SzvypjPIk0NYAc91JaKuNR11zErpG + Onj4upGSGk9eTgrB/m6Y6U9Ff/JjGKs/iZHG00zXfAIT/SexM5mAl/lkZhqNI8FwHCU206jzlpgxU5sO + z8m0Wz3GHJtH2eIxkWNBmlyM1OVcqAanZk7ldLA6FyIMuBhhzJlZphwNNGOXYPMsW9ZGubAxM4jd5Yls + F8G7JtGHFWFOrI92ZUeqL8ujnGlxNaDQSosCRzOaI4NFCBcwUlFFbngUHmZW2JuYERYwk8KcbBob62lq + rScuPgJnJ3NcHIyInOlMVW40/bVZDFaliiCPVQ2Jvby1kB2zW9k61sqKvmqWDdSwdKieJcONLBpV0Myi + sRZBq2qYtIfoUGGJgtldgk6Wzu4WdLFstrKvnSWjbX+iVQXl1/cKlOWlci3VvMBz2lg5r4WVc1tEaIpo + 7CwRcZ1HY0kiRcrcfNFeRM20J8TfigBPZdQmUwK9zQkOsCEixJHYSHeS471JSVJMXx9SUnxU83QmJXsT + m+BKVIyTygCOjnUhIdGLRNkel+RBVLybCrHJXmTmzaKgNIayykRqRfg2VmfQXJlJa0UW7RXZghyayzOo + ykumJDOe+tJsWutK6GyoorNJ0FJNV7MyT1ctfZ11IoAbVL0N5vQ1sXCgmYW91Yw1ZDFWFc+S+hhW1AWz + vNyDpYU2LM01Z0nGDBakmjAn2YTZKSZ/GcDDkitGMg2Ym2vAQskFK8uNWS8xc1v1dHZKzN9XqSXtXpOT + Eu8vNhjwTIsxN1tNuNakjAygx0WJkRelPN+so8LFFl3ZrsO1RmnfdZo816DJrXqBxH8VlPVGNe40qXG7 + eRp3WzQEUoouVPBCuzrPd2gIpOxU48Uude52TJHlybzYPYVXBzT426AGLw9p8orolNdGtHl5VEc4rA4v + zNbjxfkGvLjAkLsLjLg514Bro7qc71fjQvdUrvfJ3x7U5eWR6bw524w3x8x4ZdCU53tMeabDjHNNpuwv + N2JNhjZzojRo851Iq7fE4Vn6bEm14Fypo+hXDz7o9+DLYeHng4b8IPfz08BUfuibwvfCpb/pniSYLMvT + +KFH9vVp8VOvNr/06/Jrrx73Bgy512fAHz1GAmPu94r267Pkp0FXvhr251+jIdztDmFHoSuDMZZUBZqQ + 5WNBqq8rSb4+JPh5Ee/roUKsjzsxsj3Kz5VIiSfRflLXVAaw618GcH3iLFrTwkTr+5IX5kpqiDMJIU4k + RzqSleDwpwFsRlu2BT35VgyX2qvQX2z30ACuclUN16oYwH01M2kq8qEi0538JDcyJF4khTgQF2Av92JP + jLejCpEetgQ4mOJjbYyPnSm+DjPwczTHz8UKf3db1VDmtlbGmEpMNDLQYLqemsoA1tWajK7mFAx01FDm + BVZGTXBzluPdnPBxc8TX1Q5/Fxt8na3xcrDEzcYUNysjXCz0cLPTx9/NlIhAW5Ki3MlM8JXn8yNLYlym + tN0MKbNS/cjPnEVRTgx5mdHSpsMICfTE18OJsGA/0pJiSE+OISrcHydleH5bE+zk/hU4O1ng6WlPULAn + EbI/Xs5NTY1R9dgICvTGx9tFtgeQmhRBSpzygxIf0iI8yY7zknflTVGqD4WpnuSneVGY7kNV0SwaK6Op + Lg0lN8NT/rYLackupKa4kpykwI2kRPnmKQ+N3+Q0d1LSPUnOcicpQ75xhjNxGY4CB1m2JyHDlsQMa5IF + iemWsmxOosoQNichXepPljXZedYUF1qpzJPZba4sbbNnZbM5a+oM2SAcblOlNrvq9DkqPOV4lyVHu6w5 + 1u/EsRFvjs0P49CSeLbPT2BRTxg9dT40lnlQJ5qrttKXWuHexUVKL2YzoqL1JR7qEhqpw8xZavgFT8U/ + dBozo7QIEz4dlWpMTNoMokTbzYrXJyROl8gUAxIlp2flm1JQaEpJoRE1Jca0VFvQWW8jsKVNyvY/0VFv + JbCmvUHQKOtNNrTJclOlmaqXcHuJKf3lVsyuFO5Q7ciycgeWlzqwrMyepcK1Z2eb0huvQ5vcV9vMyfQH + TWW+6M+NSdM5nm/J5SJTni3U567KAFbnH2XavFs5nbcrLHirzEa2WfNCoSV3BM/lmnFV+PXlOC2eTZQY + lGbE35INeCFG1oMnc8nzKS64PM0V18lccZnGVVdtrrrocslBeJe1xFazaRwzGc9J4wmcMprIaaPJnDCY + xGHNJzmo9jiHFQPYYAIXrDTlXOFUXtM56TedI0FGHI2w4EisNXujzdkVZ8HOxBlslWfYlm3MgRo7zvR4 + cGnEj0uiAc8O+XGs14sD3e7s6nZle7cLWzpd2NTmzOZWezbLO9xUb8lmZV7gOiu2N9iyvdGBHbWObKuy + Y2O5NWuLzViZZ8Jy0exL5HvNTzcUjqkvXFOfOSlmrCh2ZGO9J+trhVfUO7Ct3Zk9Pe4c7Pdmv2jPrZ3K + nI3ezGv2lJznQJHkoJQIdVJD1SiKFX0jeWmw2IYFlXYsrbVnbbMr61q9WSL1rTPHkbwIQ6J9pxIzU0Pa + uQF5Ut9L89yoKvShKNOL5Fhnwmba4i/xyNPdCUdnxQT2wNndB2dPH1z/C27K/L9uXni5K71//QgPDiIz + OVHybQOL5oxKju2gsbaa+ppaamrqKCktJTs7S/J7HLNm+RIS5C5/y4nYYBvy4+xpzHFibpMP64fDpZ3E + sXNhGmuH0xisDSM/wZ544YtBPk4Sz9xwdvbG3tkPGymtHQS2PljaeGJp5YrFnz2AbZR5z90c5N5tcfG0 + wlsZxj7YlpREN8oL/Wko9aO1yp/uxkAGO0IZ641k3lAcy+ancWBnAwf3NrNlQwELRsOY3eGq+sHH8g4r + tnTbsLfDkuNt5qJ5jbjcqsczrTo826pwcMnbPbpcU3oCC053a3NQOPqmqkmsLJnIgqLJDBaq0ZKvRWWO + DhXSVouLLcmV9qAYwKm5ViRnW5JV4EihxIbCMi/ySpwpLLehpMryfwzgZica/4LwTvnOCpqbXWhpdKJF + 6k57nQMdUoe7qu3olvrXXWWrWm4TNNfa0lBjS61ogyqJBxVSVtTaUSbnlFY7q0zg1Gxb4lNsCI+2JDTM + Vr6ZxMu4mRTkp9KumFsL5v9lAG/ZtJPjx85y4dI1LgkuX31GhUvXpLyhGMG3OHPuKgePnmbrzn0q83fz + 9r2qHsAXL8txV57l3PlrnD5zmVOnL3Ho8EnWrd9GfUMbgTPDmWFmqxryWTF/jYwtMDW1YsYMG9V2BZbm + 9g8h316BlaUDltYOmFs7qmBmbSelpewzwdHagGjhpsVxbrRJThjM9WA034nhHEu6M0xpTzehr8CWniIn + 4eDeLOpIYH5bHp0lKXJOoLQhH0qjZ1IZGagygMs97Cm2nUGJrSmVLtZUezlRHxxIS1wsnZm5dOSXU5Nb + +X/LAP5vPDSCleGg5bx8ObawTmJ+JQVFFZKfalQGcFlBJZUFRRLLc2kpT6G7NpHu+nB6Gn0ZaHRnpN6R + ObUOzK1xZkGtJ0uaZ7K8K5pFXfGMNMfR0xBLR12C5I8kyQnpqlGXasseGsAVhV2SX7ooKuokv7iFgpIq + SsuK5Jh0BmuiWdwQxMZOf7Z2e7BZYuVaiVmL2nwZagmmszWehqZ0qpvy/8sAzqKqNE/4ehkjXTUsG2li + 44Imti1uENSyfm4Zq+aUsXxuFcvm1rFsjuie2XWieepYMFzDvIEqRtpK6azJor44jlrRS3WFcYJEKrJj + KBeuUpmXSE1+GtUFaaIRlCFxk1Xmb3FmogqFaaIrk6LJjAsjJSqY2JnCU7ydiAt0Jzc2mJ7KPNaN9bBr + +TzWzxtkfpfohxbRE41lkkdLaJNnaaktor1GNEdNOYNN1cxpr2eR6IxF3TWCcuaLbhptyWOgLpuuigxa + ihTzN4WqrAQqs2Kpy4untTiBztI4ugsj6MubyWC+D8P57ozl2TM7T/JxgTlzCixYWGrD4konltS4PkS1 + G0urXVhR5cSqclvWSe7eLLl2d6UVB2ttOFYn8Upy/nHJUcdabDnSbsf+Djv2dNmxrcOTNU0hjJUESb0P + pK80jP5KqQeNWQw35tJdkUaH1P1OZWjtAqkTwv86pOwqTqa9OIm2kiS571jai6LoKginv2AW84SfrSwJ + ZWtZGHvKZrGvLIi9lTPZUxPMnvpZbK70Z1Geo2gna+ZI21tZGczG2lDJlX7srnPieLsNz4za8sI8C16Y + a8ydOeZcH7Xj9KAHu/uCmNcQQmtpuLSnSOF8EcL3okhPiyFX3mOJ8h6r0xnrKGDD/DoOrO3g0JoOjq7v + 5dSWMc7tXsz145u4fmYXV8/s4+rZw1Iek/WTKjx79hw3BIohfGzvDnZvWcfqpXNZMn9YVW7ftJydW1ey + beNStq5bxJa1C9mkmMFLRtm6YgEHN6/n6I4tHNm+hWPbt/6J7RzfvoMTO7arcGTLFvavX8+OFcvYvmwJ + B9av5uCG1exasZjVo4MsH+xhtLmOyrQkor3dcZyuh4XWVGyE6/vYGpET6y+xPI3ZXfnM68sTzV4gmr2I + pSMlgjKWDFUKalk8JNp2sF00bjcLBPMHu5g32MGc/mbmKNNAKT8aH5HlkXoWz2tj7co+Nm+cza7tS9i7 + exkHD6zjyNEtnDqzmzMXD3Hx2kmJ52c5d1ni9rXzvPzGS3z8+Qc8EhziSmioO+HhHpIo3AjwUwiEBa7O + xioD2N5WT6CLs70eLkLcFBNYgWIA+3oYMdPLhEBPE3zd9PFzNyDYx/RPA1gPHyF8Pq4aImI0BVK6quPt + ooavixbB3vqE+hoR4m1IgJvSk2Eq7rYTcbF+GhebJ3G1fUIFd/uH8HJ+Eh+Xx0VIPcUs3/GEBk4iUkh2 + RNg0wmdNJSpEyJEQ7qQQNbIidCiMNqA8fjq1Qs5qkmZQJNvS5Lx0n3HkBU8TqJHhN5E8/z8N4AhNmoUI + 90TpMByvy4I4HRbHarIiVo01MVPZFKfGjvip7E2cwpHkyZxMmcCZ1PGcSRvH+bTxAinTx3MxcyKXssZz + JXMcVzMe57mCp3ihUjHFdPhqmTU/b3bit53O3D/oyh/H3Pn9mAvf7rfj8x22vL/aiud6dbjUqMGpcjUO + 5U/hUO40juRpq3ryHsgyZFeSMZuiprM8WI95/tosCDFgRbw5qxLNWBipy4D3OHpdHmXY6ynWhE/mYqk+ + L9cZ8H6DIV80T+e7dsUANuLnYVN+XmjO/a1ucDgALkbBrQQevJTKvRdTuPd8KtxIhkORPFgXyPdjznzY + acnrlfq8WKjNM5nTuJQkzx331EPEPMmlqCe5HjmBZ8MncitsIs9L+XLseF6X9/N+0VQ+qtPgw6Zp/LNp + Ih93qfH1qAE/LDDnx6VW/LramnubbXmwx5H7B+z5/ZBiHNrw+wkbfjlmwU8HjflujwHf7zDkp13T5R0a + 8cd2Yx4oJrAKprDRlN9XGfLDEh2+WaDJ1wu0+XGFKfc22PFghzznPl951plw0F/+jif3d7rw+xYbflpn + ypeL9fhkVIt/dU7j/SY13qlR4/VSNW7Id72QJgJFnvdYni5Hio04UG7OtjILVhZMpz9+Ip2RT9IT8zRD + SROZm6nBvCxtFmXqqIaIXpGuxcoMLdW8k4vT1JmbOoXR5EkMJk6gP3kiA3JOX9IEemV9UMqRlCnMztRi + Yb4hi/OMWJRlwII0bZamaLI8carKAN6SMIF9aRM5lTeViwWTuFY6kdv1U/l7vwGfrvqPAazMARzBL3+P + 5tcP5Lt+nMSDf8XBuxHc//tMfn3ei++vO/DVOQu+OjuD786Z88MFS36+bMOvV225d92R36668eNZf745 + FsjXB3z4Yrsbn6yz451507nbMoUrxU9yLv0RzqY8wuXMR3i+/HH+3jaJ9wfU+XS+Hl+vlHq2Q77tATup + 5078cdad+5e8uXfVjz+uBfD7FV9+POnK11L/v9plJbDkm122/HDAiV+OePLLcV+BP7+cCOb+mRg4L/Xx + ci5cKoRzRfy0O5X3FwVzp92eCyX6HMuYwplcDbkvqZ+VetxuMOCOMiRfgzrX6idxpfppzpY9ysWqR7ne + 9AQ3OsdLktLhrQ3WfHjIm68vhvHznUTuv5kF/yzkwael3Pu6ht9/aOb+r708uDePB/dX8Mf9DTxgO/fZ + wx/s5h47+I2NsryWBw8W88cvigHczE/vFPLPS2Hc3eLEyX49tpSOY2XWOBZnTmFutjbDypB7Sfo0hWs+ + NIDDdERQGko9MGEs3ZwlRQ6srHBjeaUzyyscWSHEYZGI+bECawayTehJN2JA+XVZkRvzJTmvH87l0p65 + fPjSGf749A0+ePkqSwebVD2AZ7qai1CMZsHsNlavGKKjs4L4pCBmhXtSUp7JylXzWLVmoYi8KGzszPAL + 9Kaju1XEwCX+/dG/+em3n/nt3m98//O3fPvj13/hu++++S8D+DV2bN9MTVWZygDuaG9gyYJRVi2bx1B/ + i2oeg9hQf/LT4kSwdbJp1SIGu5qJC5+pGga6paqE0wd38u83XuTTd17jnb89y/NXlF92beP4zpUc3LJY + EvIiTu5eyoldSwTzOb5riGObWzi2spTTC9K5Oiea27OVOX9n8u78YNUcwG+N+HOn051LDY4cqxASVenI + XnmPK+TdD/o/zrxZT7MhSZ19EmP/YwBfKJE4XKbL1drpIg6tuDngyq35QbyxPZt3j9Txj5Pt/OPCIO89 + u4gPX97EV+8d5odPLvDdp9f46tPrfPHZs3z26U0+++Q6nwo++/iaCl98ohi/1/jmk6t8/fEVvv7wKl/8 + 8xIfv32Rd984yz/euMh7797ko0/e4Mtv/inXeJu337zLay9e4tXbp3j5xj4uH1jA/pV1bBvNYkNXLOtb + hLB1RHFibg5/PzioGur5zo42bmxu5ubODu7s6ebmjhaurq3k1oYaXtvezBtbG3lxZTHXRDifbvDlZJkz + ZwvtOZdlwdlUE07F6XIiWoOTceqcStTgRLIGp9N0ea7CmptCUi8XmHAyW58dCZNUI2LMCXyEAb9HGAp6 + ioGwKfSFT6MrSoP2OE0aYtVpTFCjMUmDpmQtmpJ0aE7UpyPdmEGpy4MioHtyzFXG73/QoZi/f6I9Y7qc + q0NDojYdafpCeK1YUOXI/CoH5pTZ0J+rGMaGdMo+lQGcrRjAxvT9aQB3J+jQH6fFYOw0lQG8XmLrzlJj + IbfTHxrA5UZcqjHharUx1yr0uS7xQzGAnynS4FalDrerJZYoPWBrtVXlrRpBlfIulNE1tFQ9hW8Xa/BS + iSZvVevwXq2uygD+d40mH9VoCNT5pE5T1RtYme/38wbJT4oBLFAMYKVH8H8M4Jeyn+a5jKclv07mevY0 + rhdocV3q4pVigcoANuJ8/XSOVWpwsHwaR2s1OdsxnauDllzuteRchxknm2ZwtE7yVIUhB5RnrDTiTJ0x + V5vMeEHJ4X2WvDNsxfsjFrw/rIzkoMur7Rq82aXHW93TeblZl5fkHl+oU55XkztSviDc4W9tJrzcac6L + rSbcrNHiRtk0eX41XqzT5c22GbzbY80/++14t9+Wt/vseL3LhrvtFsJnjDlRM13uxZA16VNZnDSFOXFT + GIiaRFfkJNoiJ9MROYUOxQiOnUq/fKeBuGkMxkxiJG4yyySXbiwxZUOJCWvzDFkqOXV5li5r8hXzdzor + cgyZJ/lxMGYiXeFP0x0+jqHoCcxPVGNduj5bhTdtz9Jjh1xnr3CpA0XaHCnX4VyTMRdajTklz3egdArK + sNq78sazt2gKBys0OVKrx+EaPfZX6LA1dwqbsyYJJrMlV51tpTrs+tMA3i11YWep1kMDuEiLY8K5/rcB + bMBlOeaq1J3r8l6fbdbiVru81y4t7grfu9mpxcVGaWd1cm6j5LEWM4632rKvwZa58lwNYeMoDB9PToI6 + mcm6ZKYakyB81t99PPYWj6gMYKsZT+LhrIOvpxlODiaqYaB1tKagKeJDMYE1BKqev5oaqGuqq8xfNe2p + TNKc8KcBPEFlAOf4OtESIaI/0ocx0QNzQhTz9/80gBeEWjNbMBxhy1CCOx1x3hQFO+FroY2RxjimTXqS + yWrj0ZqujbOP0psrliwR777ejqr5hjXHP4LBlEcxUX8CU43HsdB7AvvpT+E7YzxhRk+RaTqBBictBoKN + GIswYU6QFqOuT7HU6XF2+U7mRIgGF4WzX5DceVZ0wHl5H5di5XtGS1wKNeVQkBm7ZlqwVe59XaQLa1P9 + 2V4cxbaCSNYn+7I+2p3t8Z7sTPRgZagdXc56VFprU+tmTV9sOPOLChkrLSc7aBbOhiZY6RkS5OWtMoDb + WpvplNyYnBKDk6O5aKPpRAU5U5kbzWB9LiN1GfSXxTNYEsOqrmL2LGhn1/wO1oiwWz1cx8qRBlYomN2k + MmqXzWtluYi4lfM6BJ2CLhWWz+v+Cyvn97FKsHp+r5Q9f2Glsu+/sEp1bidrFnayeqEsz29jiTLnb285 + Pc25NFUkUpQRrDJ/I4PsCPWzItDXAj+pN36eotukDPCxZFaQPZHhrsTHepIQ701CghdJSYJUHxKkjI3/ + jwHsRFSsHJfoRXyyD9FSF8JiXAiNdSEizp24FD9Ss0PIkfdeUhRHbUUqDeUZNJWm01SSRmt5Fu2VOTQU + Z1CVn0prdYHcZ6Xqh2GDXQ0MCPo76hjorJd15dfPDw3gse565nTXMtJcSE9ZAr2FYcwuC2F+iRfz8uyZ + n23Oggxj4c5GzEs2YnaSEaMpUpf+NICHUg1UvYDn5hiwuMiQ1WUmbJL4v7PGWNWmD9UI16/W5oTgnMTz + q40G3Gg24kqT3kMDWDF/pS2faZT616jF+SZtacNaXKnX5HqthsoAvt2gxR0Fsv227L/VJPlEtMVzjRI3 + Bc81TZH1adxqnsbtFjVutSqQ7S1Tea5VmR98kpSTuN05hRd71XihX2LtgCYvDWjx8pAWLw1p89KoLi/O + MRAeqxjARrywyJRbUt6Yo8/FYWkfPWpc/dMAfmnEkNdHZ/DasAkv9Rlxt0uOazflQqMpx+TZlbnVlydI + HA0Yz6DfJJZG6HMk307u34t3e334uN+Nz/vM+bpXn+/kuorx+233RL7tmsjX3ZP5ukvWO6fyTYca33Vr + 8J3Etx+6tQW6/NJnwC890/m1x4Tfek34vW8Gvw5Y89OgC18P+/HRWCivDUVxqNqfOcl21IXMINfXksxA + d1IC/EgK8CbR30uFOOGKcf7uxAiiFANY8B8DOO2/DOCWlDBq4wMpivIkM9ydpFBXkiKdyEpwfGgAp5vR + nm1Gb77FfxnAtn8awC6MNnirDOCBumDaywNpLAqgMieA4lQ/cuO8SJdrpoS4kjzzIRICnAlyNsPf3oQA + JzMCXS0Jcrcm2MuBEF9n1Ry5DrammJnoqwxgBYoBrKM5CW2NybKshp3VDFydbPB0s8fPy5WZPu4E+7gx + y8eFEC8nAtzs8Ha0eNiz2NoQL6fpqt77cSGOZEg7LUoPpjhzFsVZIdLOZ1KYFURxTigVhbFUlyZTnJdA + amI4QX7ueDjZMmumLymJiikcQXCgh+qHQwYG6kw31MBQShNjbZUh7C1xOyTYW2UAJ4tGiIoKUZm/To5W + zAr2ISMlmty0aDJjZ5IT709xSgAVWTOpyQuhJj+YyoIgqotC6KiXttqaRkttHEW5fmQku6iQmuJCSpKr + 3Iu8ywQXia1uJKd7kJop7znLh/Rcb9JyvEjOllySJd8xy5mkbGdSsp1USMt2JDXLQWBHSqbtn7AhM8eB + ggIHKkvs6apzYUmXN2s6nFnbbMkG4VJb6gzYKu17h3CYAy3GHG4344hwpMM9dhwe8uDovFAOLY5jx/x4 + FveE0lvvS1O5YgB7qAzgmuoA8vJdiI4xIjBIXQWfgKm4e0/AxXMcbtKOvENke6Qus+KNCE+2ICzJjJmx + BgRE6xESp0dM6nS5byOyc4woEj5TUWBEY6UFrTXWtNXY0CxlS63N/6BOUC8QftDaaEdTrTW1ZTOoKzal + pUTqs3D0sUoHFlY7sUT5Z3O5I8vKHFki72A0S7hyrBYts4RvBU+jX+5tYaQeW1NNOV1kw9XiGTz3HwO4 + 8KEB/M8qY/4p9/F+rSN/F+30t1Jb7hRbcyNHOI7w6/PxwgWT9XhRePvf0qdzJ0aLqzMncs79Cc66PMU5 + lwmcdZ7COWcNzjlpc9pek6NWauw3ncRuoyfZaygweEqF3dpPskPtUXZOfZSDWk9xymgyl2y0ueJiINcT + buQpnMzfgMOzTDkQZc7eaDP2JFiyN82S3Vlm7Mw35Ui9A+f7vLg65s8V0X/nRwM4OeDL4X5vDgx5s3fI + ix39HmzrcWdblzNb2x3Y0mzLpgZrNtdbs6XRli2iFTfXOrC2zJLlRaYsypnO/Ew95ik/yBdOOUf5AVGy + IQMJBgwnCz/JMmeRvL/l5TasqrZhc6szu3s92DfgxZ5eL7Z0erC6w5P5zW50lttSkqpPWsRUckQjVaQY + 0JFnxoJaJ5bVic6vt2dtoxNrmlxZVu9BX749pbFSR+RbJYdqkhlvSFmuDTXFrtQVeVCR405OstL735GI + EBcCJQ66u7vi4uquMnzdffwEvnh4P4Sntw9eXj74Cp+ZNTOQ6NBQ8tJT6RFeM29kkI6mBsoK8qUuFlBS + UkpeQQGZmRkkJccRoQyxOsuTmGAXkmbZUJpoS3uuHQsa3NkwEMz22RHsXZDE1rFU5jVFUJ3lQlacMxES + H3093HF388XZ1R8HV1/snHywtffH2sZXNRS0lY0ztg6OODjb4+hqrzKA3b1t8BI+4uNlQuQsS/LSXOR5 + XagvdKW1wo0eaY/DbTMZ6wpl4XAsO9aWcGB7DdvX5rNsdiSL+r1Y1GnHSmnTW3qs2NtlzomOGZxvNVRN + u3KrRXRdi+i3Ni2e69Ll2V5lSGip05K7jjars6NmMuvLprCkeBpjRZp0FupRn2sgscycshJrlPm+/8cA + tiBD3kVeiZsKOUUOFJYrPYAt/jKAG5od/zKAm1qcaFWZwIIWF9panGlvcqSr0ZEeQV+9I/1/ok/qY2eD + A22NDjSpehJLjmy2o0ZBkwNVcr3KRleKq5zILXYgPceRhBR74hKciY31IEMZWld4VkdnI/Pmz2bpsmUs + WbaS9eu3cOTwCc6eu8S585dVRrCC85elvHKd8xdvcOrMZY6fusiBIyfZufcQu/Yd4cDRU5w+e0XOu8KJ + kxc4fuI8JwT7Dxxn7bqtNLd0ERYWh6WVI8YmFg/NX6WHr4Wdyui3tHJQwcbKSQVb5dsL7GxdsLVzwUaB + vQvWdo6ybIudtRkutoYkBcuzJnvSnSm5OdeduXmOjGVb0ZthSkfGDPrlnfeVujDWEMDy/jRmN2XSkBND + QYwfBVF+lEt++o8BXOZhT4G1MYXW0ylzMKdccmtVoC+NsTF05xTQXVxNbV7V/8MG8H96Ajf9aQBXqUzg + 4sLa/zKAC2ksy6alIonO6hg6a4Ild3lKfXBmsNaWUYkvY5X2zK12ZWGjP0vbw1nQHsNQUxQ9DVGSY2No + rU2gqTpV8ohiAFdTWdwk6KKsqFN4eDuFxY0UlZRTUZpDc0UCw5WhLK3zlzjlx/Zud5UBvK7Tk8VtPnJd + +futCTQ0CUdvLKCiroiyihyJDZlUFuXQUl3ESHslS4fq2Divlm2Lqtm+pJJNC4pZNbuApWOFLJldzuLR + KhaOVDJ/sJI5/eXM7a9gdlc5gy2FdItm6qwR/l+RItoghaqcWMoyoqStx1NXmEG9vI+6kmwq8tIoy0mh + VPCfsigjnqzECNE0ISoDOFK4VlKwF8XJEQw1lrNx/iC7V85j3dx+xlqr5T2W0lFTJPct77kyj/ryXOpK + c2kszaOnTjF7K1nQWcmingqW9JaytK+URb0lzOsopq8mWzXfb21OEuXpsZRnxKgM4I7SRPrK4kTzRTBa + FMScIm/mS4xaUGjHwiILFhWbsbDYnKVlViyvtGV5jQPLBEurFdizssqOVeVWrCu3YHOFObsrLTmkMoCt + OC456XijLEuOOtJmx/72hwbwjg4PNrSEMK8skL48H3qKAuktk7/fkC68NZt++f7dZSl0lSbRnh9HW040 + 3UUJ9JXLduXHBeXJ9FQm0F8RI7w3nLFiqQMloawrncXO8lAOVgQLAjhQ4ccB4TkH6oPYUe3HSuFT87It + WSjlJmVbYzB7G304ILHpVLslN0eteGmeGS/PM+Vv8625NceJC8OSewdCWNYSTl91HFWFCeRkynfLTCA3 + N4mSwiThp0n0SHud31vApoXVHFjdyOE1TRzd2M7Jbf2c2zOfm+e2cOvyHm5ePsCzV47y7OXTsn5WcJ7n + r13hhevXeObcGc4e3s+eretYONbL7KEOli0YYuuGJezbuZY921exa9NylQG8dvEIq5R9K+ZzWI4/tXc7 + p/ft4My+nQ+xdzdn9+3m/P49nFOGnN65g0ObNrBz5VK2LVvMvjUr2bd2OduWzmfFcC/LBrpUPcjrcjNE + D3jhIlzfUnsq9obqoguE48X40CbtbbQ9S/RrBgsGs1g4lMPCwTwWDuSzoL+YBX3lUtZJ2SRlhwrz+tuZ + 09vGcGcdw121oufrGO2vYfZgFSsWtbFz8yhHDizn/KnNXL6wk5vPHOH558/x2ms3ePPt53nnn6/y7r/e + 4I1/vMxb777OZ199xPc/f80jiukbHuZJRKS3BGwPlQHs5fFwHmAnB0OVAWxno4OjrQ5O9toquDjq4uGi + i5+HMgeZKTO9TFUGsIIgSdTKfMB+7g8NYG8XdbxdNaRUIMvOCjTlHANCfIyY6WmAt5M6braTcbEah5Pl + 0zhZPYmT9eM4Wz+Bh8M4PB2fxstlHD5uT+EvCPIaL8JoAsH+kwkKnESQ/0RC/CYS6juRaL8JJAepqYZV + KYzWpzppBpVCvLODphHn9jjxLo+R7juejIDJpPuMJ9d/EqWKARymSXOYFt3hmoxEa7MkRofVcdpsTtBi + h4jig6k6HE/T5kyGJhcz1bmWOZVnsqbwTM5knsmeKMsTpJzAszkTuZk7iVt5E7mV+zQvlY7ntbop/HPA + kG9X2PPzJld+2+HOH/s9+f2QJz/sd+WTbTa8t8aCV+aZcK5hGkdLJ7MvdyK7M6ewJ0uDgyLMD4g42Cfk + fXuSCesjjVgWpMccPy3mzdRlcaQxS2OEoM7SYLbvOMY8H2eR/9Nsj5H7K9fnjXoDPmg04CshPd91GvJD + ryE/jpnw41JL7u/zgTOz4Jk4eCkV3sjigTIU7itZcCsDjsXyYEMQ34w68V6LOS8U68izqnMheSKnYoSg + Rz3JGSnPCi5EPMnV8Kd5Jmwct8Im8ELkRF6Nn8AbGRP4Z8k0Pm3U5iMhW/9snMgHbVP4vF+br4an881s + I75fZMxPq2Zwf4c99/fa8vt+K345aMkvhy344ZAp3+8z4Ntduny3Q58fdhry687p3FNM4G3GsN1EYApb + Tbm30Yhf1hrw01p9flpvzO/brGGPIxz2glOBcD5MECLLfihzDj844MTv2634dpUhn8/X5YM+DT7o0OD9 + RnVer1DnSqo8Y9JTHEqZwN5MNfbk6bKr1ISNJTNYmmdIT+wk2sOfojvyaQbiJzEvU5sFObosytZlaZYO + KzJ0VEOOrshQegRrMC91KrNTp4homMxA8iT6kybRGz+errinVeWwsl9lABuxJN+YxdmGLBLhsTxdh5Up + 6qxJnMimhAnsTp3A8exJnMkZx5WSCdypn8Y/huQZ1jrw6wE/7p8L4sGtMH57LZJ778u3/SAJ3ouBN0O5 + /7I/v9504/uLNnx5YgafHzPh6+Omghl8fcKUb07O4LtTZnx13JpP9jrxz22uvL/BnndWWPH6HBF4HWpc + LHlC2sMjnFDmuBZcz3mEv9U8ydudk/n3sDpfLNLjuzXG/LLNnF/3WPP7YXv+OOXCvbMe/Hbei3sXffhV + lr876MBXOyz4eos532yz4Meddvy834nfDnvyyxFv+f7+giDuHY/kwSl5hvO5Ul/zuX8khy/XxfBKnztX + qkw5nqUm32gcl4q1uFtvzN+F7L87ZsfbYxa8PmjMCz063GxVhv18lJPFj3C28hHO1T7G5Y6JPL9wOm9t + ceSjo358c0Xe2UuJ3H87gz8+zOX3r0r57fsafv+5jT9+H+bB/cX8cX8V9x9s5D7buMcWfmcjv7JGllfw + 4MFC/vhlkPtftfHLO2V8eDmal7a4c1JExYaCcSxNG6eaH3pEvnFvhj7N8do0SsxpFWHXE6nPcIIJQylm + zM6wYmmxEysqRASKgF9SYseSUjvmidgYzrVQ9W7sTlPMLiuGCl2YVxfMOkkkF3eP8e/nT6oM4I9fe4bl + w83Ez3QmyM2c4qxoFs1uZ+2qUbq7q0lIDiY0wpOyyixWrVnA6rWLHxrAtmb4BXiregBfu3GVjz/9iN/u + /cq9B/f48dcf+OGX7x7ip+8eGsA//8R333/D3994lS2b11NeVkRuThr9fe2sWbGQ9asXMzzQRkFW4l8G + 8NzBDpUBPNzdSnxEsGoY6JaaUs4c3s1Hb73MF++/wTsvP8vtC4c4f3CjJGdJ3hvncXjLQk7sVMzfxZze + u4gT+8Y4vr2T0xtqOL88lxuLEuV7RvHGgjDeWxTKe3OD+PuQD7c7XLksovpklT1HKhzZWWAjMV6LPp/H + mBvyNJuSNTggcfZ/DGBdlQF8sdqAq0Jqnh12586SMN7aW8hbR2p47Wgjr5zs5I1Lo7x/ZxVfvb2PXz49 + z/efXOKrTy7zxccPh3j+7OMrKnz+0SUVvvr4ssr4/f6TK3wnx37z74t8+d45eebTvP/6ad554zz/ev8m + n33+Bt9890++/PId3nv7Lq+/dInX7pzkjVuHuHVqFWe3dLN/YSk7BtPY1hnDzu4YTs7L5pW9Pby+v58r + a6s5v7KcZ7a1qub/fXZrMxeXl/D8pgbe3tPF+3u7+PuGaq72x3CqzpuT5c6cKbLndJY5J1NMOBavx9FY + TY5J/juepMXhZFlO0eF6mQ3XS605XzCDo9kGbIodz9JZjzHsr8w5/wh9M5+kN3QSXWFTaYtQpzlag9qo + aVRHT6Fa8lFtrDp1iikcp0NriiG9Upf7lDl8ss3+lwHclj5dBN10lQGsmMEtqfrUJ2rRmqzLUIGZahho + VQ9guZfebGO6MgxV5nCPnNMnx/dnTqc3zZDuZD2VAdwnf/M/BvCGgunsLjdRDZOsGMCnpLxQbcyVSkOu + lOlxTXLctUINlQH8XJk2typ1H5q+1bKszIVbLbGkUodnK3S4UabJjWI1ni2axm3BG7LvHcUArtXm37Wa + fFijyb8rp6rwQZXkwDotPmvQ4etmfb79f2MAvyx5/45widt56twqlL9VqsczZfpck/JyhR6X6h4awKfk + bxyr1uJko/LPClOuD9lybdCOiz2WnGudwYkGebZqQ47UGHGq3pRLTWY802bOi12WvNFvybsjFvxz1Jx3 + JTa+0a3Fy21qvN6pyxudBqrevy/K/SjDXd8R3K3X5aUWI17uMOW1LgteajXhOXmuayWT5Nknc7tKndda + jFUG8D86hcc0S7yVv/+c3OeVWkNOlOuyt1ibrflarEpXUw3vPBo3ld4opY5MpilsMs0RU2gStMu2Dqkv + XdFT6YmazGDMVBakabFS8uEKybfLs/RYnK7N8hyDh9tyDVki+XEscRoDMRPoDHuKrtCnGYwcz9z4aazJ + kDqaZcgWOW97tg77pX0fqjDkuLzHix0WXOpU5gPTZ2/pNLbnjWdztvCmgknsLlVjX5WOCrtLtdicM0X2 + TZVyGlvy/8cA3i3veFeVLjvkmB2F6qp5jo/L97pQM+PPYaCNuFBpwJUaA67X6/Fskx43W7QlHmlJTtLm + hX59bnZJvGlQk3aoKUJPnxOtZpxos2V/gy0j8VOoCX6c3NCnyJB3kRKvSVKCHtHC9XxcnsLJ9jFsLR7D + yW4igcKnQwJtcHebgZmpJjrak9DUnixQTGA1NHTUUZNSXXMaatpT/jSAlR7A45iuPQ4vMx2VAdwa4f3/ + kwE8N8yG0SgHhhM9aYvxEi5th7eZJoYa45g86XEmThmHpqEOzj7uJKaJ2BPR7OVhi57sV3v6EfQnPoLZ + tEex0ngUO/0ncJ3+JEGmTxNr/CRFZhNpdxEuFWbGqhgLVoUbsMx7Ius9xnEgYAqnQ9S5GKbOJcmdF8I1 + uBSrz+UEU87HSd2PNONgqDm7QqzYFv7QAF6d5MWWgllsKwhlQ6ovm+M92JPoxc5YF9YEWzHgpEuTrS6d + Pg7MSYxmWUkR80vKyJkZgrOhMVZ6om08PcjPzqS9tZGurhaSU6NxsJ+Bi70xMbNcVT2Ah5vyGWvMZKgy + nuGKOFb3FbNHBNruRe2sH61j3Ug9a8caWDu7gXXzmlgzv5XVgjUL2wQdst71F1YtVEzebkEvqxf0s3bB + AOsWCRb/D9Yuku3/hXWL+qTsZf2SXtnfw4q5bcwbrKa/vYCW2lRKc8NIj/ciJtiRIF8LFfx9LPDxVIZp + nCEQLedlRlCALWGznImJ8iQ2xoPYWHfi5Z3Fy7eOS/AgJs6ZyBgnwqIciYhxITZRjkn0ISLenVlRLgTJ + 9qBIJ0Ji3IhO9CYxJYCMzFmUFydSU5xKXVEKDYKWsgyVAdxcnkN9SSYt1QV0N5YzIEJ3oKue/o4aulsq + VehqVoZsK6OjoZTu+mK66wpoK02iITOE5nQ/+nK8Gcl2YiTdUviTKbMlv8xNMWB2kiFjigGcrBjA0xlN + M2BI8slwumioLH0WFxioDOCt1SbsrZ3BQeGPx+oMVHN/n5SYf1Zi/+V6fZUJrBjAlxp1H5q/9ZqcrFeX + UkPWpR7K+pV6rT8NYG2V+XtXyrtN0t6bJH80avKstPNnhKtfq5vMjfopsj5NYoLkDxWU5Wlcb5rC9cZJ + XGuayI2WSTwrWulOlxp3etS426vB8/2aEjcEg1q8NFufv82dzgsKFhrz/OIZ3F5owo35Blwe1eGS6Jmr + /VoqA/jFYUNeGTHhlQEjXug24G6HITclpl9tMeN8oxlHJCduTNFkQch4FgZNZGOsruQcR97s8hNd5M3H + PQ582mHEl106fNOpxredk/i6Yzxfd46XbRP5Srj/Nx1T+bpdTbarS6nBN+2asqzDd/L3fugy4qduE37u + mcEvfWb8OiBcf8hdZQB/PBbKP+bEc649gqU57rRE2VA405asmZ6kzQwgNdif5EBfkgJ9SBSumBDoSXyA + 1MMAd6L9lSGgXR8awIHuDw3g+BCVAdwgHLcs1o/sKG+SI9xJinb5ywCuVxnAM+jNN/8fA7jElgFlWTGA + G70Zaw5hqGEWPTWz6KgMpbEkjJq8UMoygsiPf3jdzDAPMgSpIa7MEp4908mEIFdpQx5WzPKxI8zPmXC5 + r5AAF5wdzLA0M8BkupbKAFaGf1YZwOqTZHkajjZmeLrY4+8pnN3Xg1nyrAo3jpBnDfd3I9jbmUA3O3wd + zfGSuKP0/g2XmJ8S6U5B2kwq8yKpKYwWRFFVGElVcRQ1pXE0VaXRoszfJ21OmVM70NsVFztLgv29SE6I + Iik2nAAfF3R1JC9MexoN9fFoaoyXHDJZcokeri7WzAz0ICE+XNVrIzxsJu7u9tiJVpgV5ENOejwlEt8L + U8MpSQuhKjuU+sIIWstjaK2IpqUyktaaWIY6sxjtzaW7OYXygiCykl1VBnB6shspSW6kCZSefimp8j4z + vMjI9iMrV95zvj8ZeT6k53mRmit1Ik/2C9JzHyIrz53MXDeBCxk5zipkKj0n81woLXKlqdKNkWYfVnb7 + srHTjY0tVmxpMGF7oxE7pV3vqNNnT6Mh+4XHHOww52CXNfv7XTk8J5gDC2LYMTeOxd0hf/UAri/3oLbK + j8oKXzKyHAiZpYOH50Q8vCbhqvwwy/kJbJ2ewNFjAu4BaniHaBMYZUhIvDlBkqP8owzwCdPFN1SL4Ght + opWR7JJ0yEzToTDLgOriGdSVmVNXakZ1qSlV5eZUl1tQW2klf1dQY019jS0N9XbUVVlTpRxXZCr105yu + CsUkcGZ+rQuLKp1ZKPpxcakjC0VDDggnbo9Sp0kxgEPV6A/RYFGUMkqKGWeKbYTTPTSA7+Rr8HK+Gm8J + r/lXlQkf1Nryr3on3q514mXh3XdL5NgcybcSR8+LPriRbsCLOWa8ItueT9Tneug0LvmO57znBE67TeS4 + 8ySOOU7jmIMGh23V2Gs1jR2mE9gy/Qk2GTzKJt3H2Kj9KBuED2yc/Ajbpj7CQZ2nOGs8hcs2mqpew6cd + tTnqqs1hH30OhQh/D5d4HWPK/iQLDmXbcKjAmn3FZhxvcuBCvyfXZvtxdW4gF8YCODXkx/Fhf47K8mHB + 7mFfdg54sb3Pja1dzmxptWdDsw0bGqzZ2GjLhjoH1lbbigafwbxcA8kp2gymaog2V2dEvtGIPO9wmhGD + KUYMpc1gSPLNmMSSRaWWLJfvsaHFie29ruzsc2eblBu7XFkt9W5+szPd5VaUpeiSKXy3SPhcfZZcp8ya + VW0erJH9axuFszQImpxZ0+TB7DJHGtNMKY7TJVc0a7HksIZiW2lTbpI/3SSPulGR7UZuijupsd5EhSnz + e3vh7e2Fl48vXv7+Al+8/fxU8PHzxcfXF39fH8KCZhITHiraPJ3etmbV8M91FWXSJpMkLsSTnpEu7TCN + 5JQE4uMiiA73Fw3vSWKItLMwW2qTbejJs2JBjbyvLk+2DgWwd04UO8cSWCaxvKVQOJO08Wg53s/DFQ83 + H1zc/HBw9cbByVtlANva+mFt446NrQsOzi44ujipDGBX4Yq+fvYEBgp8zYgMNic3yZHyDAfqcx1pLXai + t9qTkSZfZrfPZEFvGBsXZbBvfQnbV2Sxek44K4d9WNHryOpuS7b1WLBftNLJTmPOt+tzo1Wb55u1eLFJ + gxdbtHi+XZfbXaK3uoRLCj8/LTz9YKMGO2q0WCMacHGF8IYyY9qUdia6s7LUjjylB3CRlcQiS5JzzMnI + tSG3xEmFnCI7Csos/jKAa+Sb/scAbmpxpqXNmVYpW1udaGt3plPQLdt6W53pb3NhsNWF4ZaHUJaV7V3K + OW2OtLQ70NzhQKMKTtS3u1DX7kplg8Q7yV0FJW5kS0zMyPIiXbhRUWEsDQ2FdHc3MmeeMt3XYpYsX8na + 9Zs4cPAop06f5/S5S5w9f5mzFy5z5k8oJu/x05c4efYyJ05f4PDxMxw4ckpVqrafusjxE+c4fvwhDhw8 + zvqN2+no7Cc6Ohk7e1dMzawxnWGNhZUDVjZOWNs6q0xeBfZ2rio42rur4OTooYIyT7W9szv2jlIfHB1w + dbDEW/JqRpgTDWleDAjXm5PnxoICJ+bKO++X+NWdZU5/kSPDlZ4s7AhlxVA6/TWJVKaGkh/tR3FMAOWx + QQ8N4CBvyj0dyLc2osDKkGJbU4ocrSnz86IhOoa+/GIGKhqoy6+m9E8DOC+nSmUAZxbVk178EP/3DOAG + CgprBNUUy3UVA7i8oIKqggLJMRm0VCTQVhlOe5U/XbVu9NbYM1BlKdzEglHlRz5Vjsyr92ZRSzBzW8IY + agyjryGCroZo2hriaK5LVU2bUltRI/mhmcqSTsn/7ZIPWygplucqKaS2NINOyc+zq4JYWe/Ljk4fdna7 + S0z8HwN4+L8N4HrFAC6kvCJLzs+gsjCTpop8hlpKWNxfwfrZFWyZX8LWRUVsXpDHqrFMFg1nsGA4j/kD + hcwbKGJubwmj3cVSlrFwoIYF/dXM7S5ltKOQztoMiW1Jwq8iKUwOozQjRnhEhuTvPBrKcynLedgDuCgz + kfLcVCoK0imVbdlJkcLvgojwcyPU21HikzeladEqw3fTomF2Lp/D6rEe+utL6KwS3SBoqiigpiSbSrlG + eV4a1fnpdFQpwycXCO8rYGF3EUvlflcMlbJypIzlgxWMNObSXppKVUYsJUnhFCWFUZ0dQ2dpIiNVicyt + iGR+6UwWF7uzTOrisiLJB8pooSWmrCibwaoKc4kllqyqsWJFjQ3LJY8vr7VmdbW1bLdgveT5zRVm7JJc + f7DaimNynKoH8H8ZwAfa7djbac/uTg82twYxv8yP3hw3uoQXdRXMZFjq/FhDGgM1yfSWJ9FZHEdrXgRt + wg375D6HqqVdVKfSV5lIr2jUgfIohkpCWVAWxuryMLZWhLK/Ooxj1cEcqfTlSIU3R6oFUj/21XqzscSB + pXkWLC+yF/4k8b7Fn4MtHhxpseVsh+iPEeEB80x5TfDGQltenOfKlVE/Dg/K9VujGK5NpL44Rep7KgX5 + aRQrP/6tSKehJpWBtiwWDeaxeWEZ+1ZWcXhtDUc3NnJyWydn945y+/Imnr+xizvX93H7xlHu3DjH3RuX + ePHGVV557hn+/vxtnr9+hUsnj7Bv23rmDHYw2NPIojl9bFm/mMP7NnFwz0b2b1/D5tULWSrbl0i92LRs + Doe3reXcwV2cP7Sbi4f2cOnIXi4d3sflIwe4evQQV6Q8t283x3dsYd+6VSoTWBn6ee+aZWxdPI/lQz0s + 7mtnXmcjLcV5pM7yx93MEDt9NZxNNAlwNCI90o36gnB6G+Ilpscx1i3fqjtJkMJIezJDrekMSDsbaMyj + v7FIyioGmmsYaKlVDVPeUVssKKRL2mFXUx6DXYUsW9DI3u2jnD2+mueu7ebFO8d46+9X+Pe/nufzz97i + m28+4PsfP+W7n77gy28+5avvPuPHX799aAD7+ytDQItQn+VGiAgYxQD29rSSRG2Gs9ywg9ID2EYHBxtt + WdYUgaKJs72QXScdfN2nq8xfpRewr/tDAzjQ00g1FLSfrPu46uLtovkQzsocvwInTbxUUNa18XTUwM1u + Ck5Wk3C0HIejxdNSPil4XGUEezlOkuMmyrUmyt+YQICQ60Ah2gFeE/H3noifr1KOl/XxBHuOJ9RzHDG+ + k0QsqpETpkNFnAmlMQak+08m2uVRop0eIdnrSdJ8J5Au5+YETKI0SI2aWRpCijXoDlFjLEyD5VFabIrT + YV+SHsdS9DifZcjVbAOezdXlTq42fyvQ5tVCLV4uUOOlvEk8nzORu9njeT53En/Ln8IrxVN5rXQyb1RN + 5q1mDf49ZMw3yx34ab0bP23x4Ptt7nyz3YVPtjjy1gppNMqQXS1CjAvHsS39aTYmjWNT0hR2pOuwN9tI + YMouEaxbEkxZG2HMkiB9ZvtrMRagxdwQHWYHTWPEZzzz/caxNOBJNoZP4mSGFi9UGfK2CJxPmvX5uk2f + 74TcfN8vYnyOCT+usub+0QC4HMGD24k8eDWDB29m8+DvWfBqNtxMh8Mx/LY6gE8G7Xm9zoQbOYr5O5kT + MU9zOPwJjoU9wcnIJzkd+QRnwx7ncuiT3BDcCh/Hi1HjeS1xAm9mTuRfpWp81qTLJ60iKJom80HLFD7p + 1OCzbh0+79fl61E9vltowG/rzbm/w4rf91jy814zftxvynf7jfhmjx7f7NTh2+26fL9Tn593yrG7DPl9 + x3Tu7zTmwU5THuww5d4OY37fbsTvu0z5fZ883xEHOOECZ73hkjzr1WBBkDyzH5yXbbLv/n5bft1qxg9r + TPlirj4f92nxfos6r1ZO5WLqUxxNeJKd8U+yKWEc61OmsDpTi0UZ2oyKIOiImkBL6NN0RoyjP24K87KU + uVsNWJSjz9JsPVZk6rIiS1s1ZOXidA3mp01jTtpUOXeaiIkp9CdOojduPF3RT9Gt9CKWbXPk2gvz/jSA + cwxZLIJwRYYeq1K1WJs0mY0JE9iVOp6jWRM5mf0Ul0smcLdRjXdGjPhivSO/HPLj/oWZPHgulHuvRHD/ + H9HwXjy8FQmvhHD/tje/XHHiu5OWfHnImM8OynkHjVX4bL8Bnx0w5MM9OryzWZfXVhpzd56RBHV9bvdr + c71lEhfKn5K/+whHkh7hVPIjXEh/hFslj/Ja49O81zuFD8fU+WqJfKe1Rvy8ZQa/7rTg9wN2/HHMmd9P + uvHLSVd+OObENwds+Fze+xcbTPh6gynfbzbnlx12/LrXid8PuvPbAS+Vmf3LgSB+Pxwh5yfCqWz+OJTJ + D9uS+OfCYJ6pt+RErhZ7k57mYMpTXKvU4e991nyx3JtvN/nz5XoPPlklwnW+OXd7NTlV/hiH8x8RsSgo + fIRjFY9zpVeNl5eb86+9Hnx22p8fb4Zz740E7v0rjXtf5vPb92X89lMj937r4Y/7c/njwTLBWtWQz7+z + jt8erOYXVvAbS7j/YD73fxniwVft/PZeNV/eSOX1bb6c6jJgXe44lqRNZG6aOr3pmrQm69AQo0ljuIbU + IW16Y6YznGTKcKoFszOtWCoiYkWlK0vLHIToWjE724yhzBkMZpo+HN4205ihfGtGSlxY0BCi6gF8YdcY + 70sCuPfJq3z+5i3WzO0kI9KbCF9bIUoxLJ7Twfq1c+gfaCAlLYzwSB9q6gqEtC9VGcDJqTFCum0ImOmr + MoCvSjL9+LOP+PX3n/nt/m/89OuPf+HHn79XGcA///SDlF+rDOCtWzZQVVlKfl4m/b3tbFq/nK2bVjJn + tFs1BHRi5ExKc1NUQ0BvX7eUMUmYSVEhxMzyo7WulHNH9/LJ26/xxXuv8+pzF7l2YhfHdq5k97o57Fgz + yoGNczm4aR5Hts7n1J6FKgP4xM5uzm2p5+LqAp5dmsKLi2N4c2EE7y0M4905Qbw+4M2dDjeuNrlwqsqe + wyLctmbNYGHENJUBrPQA3ixt+WC+PieK9FUG8MVSPS6VS1k7nctKD+AxL15Zn8C7Ryr4+9Fqnj9Yyc19 + Nbxwspu3n13Mt2/v4Y8vLvDTp5f4+uOLfPHhRT774BJffPQQX354XoVvZN93H19SHffTpxf54QPZ9v4Z + PnnrBP96/STv//0cH/7zGb784jV5p+/y5Zdv8c/37vL3ly/y6u3jKgP4pQsbubp7hCPLatg7msPOngT2 + 9MZxcl4OL+7sUOH88lJOLy3m6sYG7ijDQG9t5urKCl7d0cEHhwb55PAg/9hYx6XuCE7WenKqwpmTxXac + EBF1NNWYQwm6HIjX4mCCIFGL/YmaHJL6ejp3BmcEJ3NNOJCpz7qY8Sya9RhDgY/S4/cIPUFP0hOq/Chm + Gi0R6jREqVMdOZWy8AmUho2nImIyVVFq1EVrqnoBd0pdVnr/dmcrEBGXPUNlALemGdKWppjASi9gEd2y + 3JikS1OiDh3phvRkm9Cbq5yr9P6V49IMVAawMsewMhdwjxzTnWJAl5zTHS9tK1bjLwN4XZ4Bu0TI7y83 + VBnAJ8sMOVc5nUsi8C+X6nJVZQBr8kyRJjdLtXiuQofnqh8Oeazg2UptnqmQWFiuxZVSDa4WTZPjp/Bs + 4VReln1v1ejwfp0O/6rTUvUCfr98Mu+WTuS9skl8WK3OZ/XaKgP4m1YDvm0z+C8DWIM35Fp/E07xYrE2 + L5QZcFfu67mq6dxQepEqBnCtocoAPlMv912nz5kWIy50W3BjyJ5nhx25NmDLpQ5zTjdO53idIScbjLnQ + Ysb1Ngue6zDjxS4zXu8z4x/DM3hvxJR3BvR5vVOdlyQfv9A4jRca1Hm+XovnlbmO63RV5u/zDXq81GzI + y+0mfxrAxqqewTdKlCkAJnKjeAov1evzj05LXmsx4Wa5OpcLJ3NOnuV4oTr78tXZmqvB+izhVRL35iWq + q75FZ9Q0lelbFzqF+oip1IVNoUHWG6VskXrSLsuKSTycKHlTeJAyHcICKRem6bBM8uJy5UdSUi6Q7SMJ + Ss/hSXSGPU136FMMRk5gbrya5GoDNmQbsjFbX+5B6nS5McfqzTjXYc3lXlsudFlyvMFQZfhuyZ3Ausyn + 2Czl9qKpIsK0Vdgu9WBj9hQ25UyTfXJcgQZbS2S7fI8dlfrsqNBlu6zvkOP2l+hwosKQC7VmKgP4QpUR + 56sMuCrf4kajPjflW99s0eFWu3xf4T6KAfxsp3C/ejVO12tyokm+WasZx0VM7am1YiB6AtVBj5Mvz5UR + O4WkWHXiY7WJDtUgyGcyvsKFfdynEOCrS1SYJbFRTgT6W2Fno4fR9GnoGkxFV19KPXUp1dHWU0NTZyrq + ulNUmKI9kWlaT2Oo/TQeM7TJ8XWkNcKLoSgfxkL/vxvA88JtGYtyZDTJm444H/IDHfG11MNM/p6G+gQm + Tp2AlqEu7r7eJKcnkiNC3dfDDiPN8WiPfwSjiY9gNfURHDQewWP604RYTSHOajIZ5hOoNJ9It6M6K8Jm + sD3eih3RxmwN0mR3wBSOzpzKueBpXJw1jcvh6lyKlHaYYMjlpBmcS7TgRJwVh6Is2RVhzdYoe9ZFO7Eq + 0Y2NeYFsLQhmQ5qPcHtXdse7sTPagXVB5oy56tHjZMBwoDMLEqNZVVLI0ooKSiOj8Lexxs3SnKjgAEoL + c+hob6S9o4HE5EjVENC+ntZkJgTSXJrM7LYiZjdlMVKdwHB1HCt6C9k6r55tItLWjVYLatk4p4GtC5rZ + srCFDQtaWb+ghfULW1m3sJ11Czr/wpqF3axe0MOa+X2sWTDA2oUDrF88yIalg6xXsGSQdbL+31i/tF8g + x0m5dpEI0tEmhrrLaGvMpKokhuzUAJKi3YgIEt3nZ0mAjzk+XuZ4upng7mKMh6ux6L8ZogNtCAl2JEKZ + IzjCVeBCrGLmxroLZD1amZvPnhCpA6GRjkTJ+4yO9yRc9odEuhAQ7oBfqJ2UjsyKciUi2p3YOG9yMiMp + zIymPDeO+qJUVS/g5tIMGsuyqC/JoKE8h/baIrqby+huKqetvoimqjwaKnKplv0VBSlU5KdQI2VtfiIV + aSEUy7UrY5xpT3GhL9WGgeQZwqOnq+agH0vSZyzRQOqokazLthRDhlP0Zb++8Cxd5mTqCc8WblZmwo4a + M440SP1pnMFpiZuna/VV860rBvClOj0uNzwc/vlCgy5nJUaeqtOQGKv8cENd1jU4L+uX65QewJo8J/H8 + thxzu0GTO01a3GrU4maDBtfrJFfUTuVS9SSu1EzmhsTbG6IPbzQpmKbClaapwlWmcE1BixzTOpWbndN4 + rlONWz3q3OnT4G6/aLshHV6eO52X5xnz0nxjnl9owh2lB7DKADbkypg+VwZ1uD6oy60hPZUB/PKwMS/3 + T+f5Tj1uix58rt2IZ1pncK3ZgnM1M9iTIbFO4uim6CnsT1J+8GTPe12efNjlzEftFqLf9PmiXZOv2qaK + npzAV+3j+LJjHF90TJByssoYVszfr9rU+LJV0KLB523afNku+a7DiO86Tfm2cwY/9Jjz66BolWFPvhn2 + 55PZYbwzP4kbA0msKfanM8GJ0lmO5ARJXIkIpzguioLocLJCg8gKCyIjPJCkYB/ig7yIDfQk1s+FOB9n + 0gPdKA7zoy4umNbUcFrSQ6lKCiI3zp+UKE9SYt3ITnSiPM2axgxzOnJm0FdgzohwwpFyBwbL7BiQ5eEq + Z8YafZjdPIuRpjD6lWEY66Jor4qR+hpDXX4k5ZkhFEm7z4vxIVuunR7mQoSXBcEupgS7mxHiZUWYvwOR + gdJegj2YJaWbswVW5oaYGmn/HwawvvY0nGykPbo6EOzrQVigLxHBvkQF+RId5C2lB+F+7oR6KT/otMHP + yZSZ8neiQxzJTfZXGb9NZYk0lyfRXJVES3UyLbUptDdkSnvKp7uliOqyDNKTIgjwcsHR2owgPy9SE2NJ + jo/CT66rrTWZyZOeYNrUp9HUmIiBvgYzTPVwcrRUGcCJCZEkJ8WoDGA3V3vZbk1k6ExK8tKpLc2mOi9B + 3k0sLSVxdFQl0lefykCToDWN4c4sFgwWM2+wiL7WdCoLQ8hShtROUkxgD1KT3UlX5gVO9iQtzZu0DB8y + swLIzvEnR2J3Vr4f2YUBZBb6k1XoR0a+N+m5Xipk5wnyPeU4T1n2UJkfOXluFOQrw8a60VblxZxmX1Z3 + +rCl051tbbbsbDZnt/CVPc3T2Sl8ame9HnubprO/3UxlAB/od+XAaAD75kayZTSaBR2BtJa7UFvkQn25 + J7VV/hTmK3FtBp5ek7GzexJ7hydxdHoKW/vHsRY4uk+U/KeG50xNfEP08A+fjk+oPl4hungEaeEeMA3P + AMnjgZOYGTSR6PBJZKfoUF5gSlWRKUU5BuRl65KTbUCucJ0C4TyFBcYUFJlQXDyDsnILKsotKS82V51T + K6UyX+hQtQtza11ZUOmsmndwdoEtI7lS35N0aBI+3jBrsmoY6N5Z6iyMFg6Taa4ygK+XmfFckYHKAP5b + 3rQ/DWBjPqix5p91Dvyj1vGhAVwqx+bN4EKGAZfSdXk2x4iXCi14rdCSV4XLv5gsvDVSm4uBapz0msIh + l4nsc5jEXrup7LaexnbLqWwxm8h6k6dYbfAIq3UfYYXwgJWTHmGt8ILtwgsO6z7FeZOpXLFS56K1Bqdt + 1TnmrMkxH32OKAZwmBF7hRccSDbjWJ6d8HgHjlfbcrrVgQt9blwe8eLSmC/nR305PSwafDSQE6IHj80N + Yt9YALtk2/YBD7b0uLKp3YH1rXasa7JhXaMda+rsVUbu/EITRrL16BV92JWsRk+KGv3p2gznTGcsz5zR + XEvVELSDijbPNmVBmRXLam1Z0+LAxi5HNvU4sEGwrseJNd2i09uc6K+yoiZLj6I4daqSteksNGV+gxzf + 7cXGdmc2NduroPQi3qLM89jgymCxNa2ideozDWkptqC3zlnalScDjd701fnSXRVAc1kwZdnSppKDhQf6 + ExLiJ3XKn4CQmQQEzyRwZgABgQH4B/rjH+DPzABfwoICiQmfRWF2Or2tTQx2tVNZUkB8TCThococjRHE + JkQRHx8h20JIiPAjJcxTYrDEWeF+ndkODBdZMr/SjBVNlmzudWXPyEz2zo5hw0AMvVV+FEpejpUYFejt + ohp62sXNBwdXDxycPbFz8Mfezh87Ww9pP67SdlxxcnGRYxzx8HSQmOMsvNadhEhn0oRzlMi1ajKdaM13 + orvEmeEaT+Y0+TC/PYAl3bNYP5bAziWZbF2UwvrZoawf8WFtvxPre4VD9ki77jbhdKdovQ49brZq8bdG + TV6THP1KkzYvt+jyQrue6CR90Uu6XJJcd6bVkMNNRuyoN2VtnTnzq+Xdl1nQKvW/utSWPHn2jCILUvPN + SckzIzPfmlxpbwpypD3ll5r9NQS0YgDXNzrQ2OxIc6sLrfKtW+Ubt7Y50NHhRFeHM72drgx0ujHc5c6o + YExilYJRwaDs6+t2pbPLhc5eJ9oFbSrItXrcaO52o7HDg/pmb2ob/KmQOlFcEkhR4SyqyiUvNBfS19vA + 7Dn9LF6ygOWrVrF56zYOHD7GidPnOXX2ImfOXeT0hUsqnDr/0Pg9fkZZvsJpwYkzFzl26rwKJ2S7YgCf + OCnLCk5dUJU7dx9kYHA2cfFpODl7McPcVgWlV6+tvZvESHccnDzkWz80e52dPHGR41ycvHB18VbBSZm/ + 2tVdzneVdUd83GwJ87GhIMpFcroXwxLvFxZ6sKTYhYUFdgxmWdCXY8VQsRNz6/1YORDPiqEMOspiKJYc + rfQALokLpFx4gWIAV/3HALaVWGolcdXKmFwbM4q83KgTzt9fUMpoXRsNhbXCVaspzq75/2gA5/xfNoAb + KSiso1BQXNBASX6t8NtyqguE75amSB6XPFoRQmulN501zvRUW9Mv7WyocgajFZaMVdkzt86d+Y3+0gaC + GG4IlpgQTm9TNB3Ncm5DKg3CpWurauX7t1BZ2k5FcStlcr9lxeVUlOQIX0hmsCqCZY3BbG0PZG+XD3u6 + lZER3FnXoRjA3ow0B9PVEk9DYwbVdflU1hRQXpYp10ijqjCdxvJs+htzWdhbJPqmiM3z8tiyIFvKTFaO + JjFfvsVwZwKDrYnCA1IYas1mqC2X2V3FLB9tYO2CdlbPbWbRYDU9DdmUZoaREi5cLVy4X3IEtYUZtFQV + 0lCWS1aCxKFQf1Vv35KsJJUBXZafTobwksgAT3wdrZjpZke8cMPS9BjG2qvZuGiYzYvHWNTfSlt5Lo3F + mRIrc+V6+XL/WaphpUuyEqnKTaKjIlM11POoaLhF3XksHypk9VgJ6+aUs252NQs7i+kqS6UsOZQsiYVp + od4UJgTTWZLA4pZMVjclsKIykOXFzqwqsmGV5I81JdNZV2rEhgpjNlWasKlqButrZ0g8sWC1xJTV9Zas + rbWQbRayz4KtlebsKDNnX4U5h2X9WK3lQwO4xU5lAB9st2d/hyN7OiV3tQawsMyL3kzR7akSW1Jd6S4O + ZaRW3nVVAt3CVRuzg6lL86ctP4yBykRmN2QwXJdCT5nwxZwAWrN9GSiQ+FkZyuaaCA42xXC6JYYzdcGc + rPTiZIUHJ6vdOVHvwRGpb7srHdhUasXGcjt2Sw462ObBUclrJ9otudBpxPMjxrw+14i/zzPhH4vseGW+ + B9fH/Dk6EMbq5kjVj6MbC1OpkO9aUiTfryyb2pos1Q8WBjvSWTSUxaYF+exeUcShdWUc2VjF8W3NnNnb + z61Lq7h7YxN3buzgzrOHeOHmeV66ee2h+Xv3Fu+8/CKv3HqWq2ePs3/7BuYMddLXWc/COb3s3raKU0d3 + cfrYbg7v2cTGlfOFi7Yx1tPEqnkDHNyyhotH9nL52H6uHjvAtRMHuH7iMDdOHOXZ08elPMKlQ/s5vWcn + h7dsYN/61Q97AK9ZzrYl81k50scSpcdudzMd5YVkRszE23I6TkbquJppEuhkSJro4opMX1okV3fVzWKg + JUKFfnkvPfURtFWE01AkmiUnVPRFBJVSL2vzM0Un59NUnk+d1N2a/GSq8xOoLowTXp/FkrnV7N02xMWT + q3jp1n7eef0sn354i++/eZOfv/+QX3/+mj/u/8C9+z/z672f+EXw2x8/8dOv3/GIs6sp7u7meHlb4yMB + VjF/vTwscHOZgZPDdBxtdLG31sHOWhNbKzXsLdVwthXi6qiDl6sB/h7GBAiU4Z8VA9jfw0C1/J91bxcd + gTbezroqeDlp4+GghaPlFOwtJqngaDUJB8uJsjwBJ8vxql7AzqqhoMfh4zIVP7eH8Ff+0eU5Wa49Sf7O + FHw8Jsv9TsBH4O8xgUDXCSKMxhHuOV7E4GTSgzQpippOSbQhmYHTiHV9nGjnR0nyepJ0v4lkBkwhN3AK + JTOnSUJQo0HKblmfGzyNVeEa7IzR4XiCPpfSpnMz25gX8kQ85+vxZqEe75cZ8O9yA94p1pT1KbyaM5G/ + ZY3j1dyJvFWkxtvlGrxfq8F79eq8367DB4MmfCGN4ZuVrny12pWPVjjy/nJb/rHMSmWunWyawLbcx1iV + 8CjLox9jaeRTrIiazKYUfbalmwrM2Jxizvo4U1ZFGLNQMYADdRgN1GR0phqD3k8x4PYoixXzN2wcR4Ww + 3io34s1GIe8t01W9f7/t0OX7Hh1+GNLnx0Uz+HmjHQ9OzeTBjSju3U3ij1czuPf3TO4rvYBfyuD+lUTu + 7Q7j64WevNNpyZ0yfc6lTOJYzNPsn/U4e4Ie5UDIExwNfYLjoY9xKuQRLgQ/xvVZj3E74ilein6aN1Im + 8Hb2JD4o0+CLJn0+a1N6AU/j49ZpfNKmxsdt6ioj+PM+Lb4a1eKHxfrc22jKHzst+GWXKT/sNea7vQZ8 + s1uXb3bp8O1OHb4T/LhLl5936/HrbgPu7THij70mUprw+z4T/thvyoOjljw47QjnXOCiB1zxhuu+D3HD + RyDrVzxlv7McK+/hgI38TRu+W2bMR0PavN06hRfLJ3Iu9XEOxD7OhshHWRb+KIuin2RO7Hj6o8bRHjmO + 1vBxNAY/TVvYBPpi1ZiXbcjCXCPBdJbI8rJMPZZmaLMkTYtFaZosSFdnbroaczI0GEmfxoBiAMeOoyvq + CTojn1Ctz07XZKGIvUVynf9tAGuzLnkqGxInsDNtPEeyJ3Ii5ymulE3ghTZN3p9nypeblOGTffnjYhDc + DJHvGAavh8MbD81f7vjzxzU3fjxjy9cHTfl8jyGfyjv8dPfD8pOdenyyS493Nqrx/MIJXB2YzOkm+Ts1 + 4zhd9RQnix/lRN4jnMp6hDMZj3A551GeK3mUv9U9xVsdE/j30FQ+mavG10t1+H6NAT9tNOa3bTP4fa8N + 9w478ttRZ348ZP//Yu0voOs40q4N1OEYZTEzM8uWLVuymJmZmZnRkmxZZmZmZmaGxGGewIR5wont5Lnv + Oc7MP9/3X1jr3ru89qruPn36dHdVve/e3qoqvtpmzsdrpQ8t1ebzZXp8s9KIn9aa89tmO/7Y7iT16Cbf + 8eL3XdMEs3iwJ5SH++L482Aqv2yL57Mlwbwq4u1Enh674sezNepJDqQ+z/UaXT6c5yztIpA/D4Xx6EAg + v+/x5bPVzrw0qM8puc/dcv9bk8ewKXEMOzPGcKzqeW4P6fPBFlc+O+jJvy7O4PeXQ3j4fjSPvkrhjx9y + efhrOQ8fNEkQ7eMR8wRLBMt48NdSfv9rEb+ygN/k+EOG+ev3PviujT8/rObX29m8t9VPKTpWSHwYTRxP + v4jIhlhVKiPVlWuP1wSq0xikQ2eUCb0KAzhJhGWqJQsKHIVMuCpH/w5nmNMVr0d7nD7diY/XOO0X0TFc + 5MRwqScL6gNZP5jDmW2DvCOJ8bdP7vPNu7fZuKiXopQQEkOmUFkQz5LRDjZumC8ioJWsnDgSEkNoa69m + 6/bVrF6zmIysZLynexESEURHdyuXr17k868+5ZfffuLXBwrjV5E4HuPn335Wjvz95Zcf+emn73n77dfZ + sW2Tcg3g3Jw05X+Ub1y3nB1b1rBo/gCVJVmkJ4RTX57H8vmz2bd1DQtEjKTHR5AaG0JXUwXnJel++d7r + fPHOS9w+e5Dju9awc80IG5b0snFJD9tX9rN1WS87V/dzaMswh3cOcHRrG6c2VnJuRTbXF8XzwvxwXh8J + 5N25Abw7ewavdHpxp9mdy3WuHC2xY3e2Javj9JjjP47e6U+yIGQsm1I02Cex/XCODifztDlfrMeFMkGN + KRdbbbkzbybv7czknyereeNIOdd35nNmQzZXd1fxxvkh/vX2Vv76+hQPvz7HT1+c5dtPTvPNR6f57pMz + gtN8/8kpwUl++Ow0P392ht8+Py04wy8fn+Bf7x/ly7cO8s/XDvLRG8f59IPLfPvVff71rzf5+uvX+PjD + O7zz2jlev3uE127s45ULm7i+Z4Sjy+rYN5zLzu54dnXHcmwkk3ubG7m9sY6TC/I4Jji9rFQ5FfTtjQ3c + WlvDO7u6+OLQIF/s6+WNFSWcbprFkXJ3jhY7cFDE7P5UM/YkGLIzWottUepsVyBanR1S7orRZI+0wb2S + k/alGLA9SZuVkeOZH/wMA/5P0eX3FB0BEsuCJ9EUpkp9mKJ9q1EWMon8gOfImfUMBQFjKQqaREWYGrVR + 2jQlGSlN385MK+VIYIUZ3JZmKmTWkIYEfeXnCkO4JcWY+nh9qqM1qY7SUJaKKaEVhnBzoh6N8bo0K6ZS + +9sEbk00oFXOb4v9vw3glRm6yjWAdxXqcaBAj6OF+pxQjNoUnFdMt5ynyRXB9XwtrhdqcqNIixtl2lwv + lWMlmlwt1uBykQYXCtU5V6DG+bzJnM+ZyKXsidyV46/Juf+o0uHDKm0+LFfnvcKJwhGe5528sXxQLHlP + jitM3381G/KD5OV/G8AflGnxtlzzjUJtXinW5aUyI16sMOFOpZH8tqFyCuhzFfp/G8AGnKgxUo72Pd9u + y/VeZ24NuHBzwInLilHAkvOP18q5DSZcabPiVrvk73Yz7glBf6XDkDd7DHivz4B3u7V5tVmFe7XjuVby + HFeLxnK7Qk057fPdasW6xwro8EKNDi/JNV9tMVcawHer5Z3Is5zPeJ5z6c8L11BXmr8vVutzNlNyU8KT + 7E96lh3JY9mYOpG1qWoslz6mWJd3MFZT6kOVxnA1qkImUxqgQmmQCiX+E2V7PGWzxlMlZU3gBJqCJ9Ie + rkJXlAp9seoMJmgwN1FbmRMXSo4dTddnbrIO/YoRwFGTaJe+3BH0HH3hExiR85dLDl6VKZA6X5+tw75y + c4432nChy5lznQ4cb7ZkX5UBW/LVWCccbkXKc6xJH8uGnElsLtBgs9T/hlx1VqdPYm26CuuzVJX7G4T3 + bSjUYmORNpuk3JSvydY8LfYU6XBUYfpWmnOmzITTJQacKtPnotTX1XoDbjYYcKNBh5uNmtxt1eZupy5X + hROdrlTlZI223Jux0gA+VGfDNhH7XWFjqQ58jqKIiaRHTyZe+mF0hCZRoZpEBusQGqhDWKABURGWxMc4 + Kf8TPTTIEU8PE2xtdDAxU8fEVOs/MDLVQNdwMhp6KkpM1hmHmrbCAH4WDzk3Y7o9jSFe9IdPZSjIjTkB + jvy/NICDbBkIcWAodio9iX6Uh08jzNOOKY6WWFuZoGesj6WtDUEhweTmZlAkYlsxks3BUA1ztWewVX0a + Z9Un8dR8klkWE0j21CPLRYtCe1VqRQ90201ktb8xe6MlLkWbczBEj8P+6pzwm8Q534mc95vIBWk3F8O0 + uBxrxIVEC84k2XI8XkRytK3wd1s2hNuxMsKBZbHOrM2cxqbcmaxN8mJthCNb5fj2MDvW+5szf6ohQ1PN + mBfsxZLkSDaVF7GpqYGu3CxSg/2JCZhJfnoi7S3VDA520tPbTEZmHP7+nsRH+1FXksxQSyELOksZbkin + rzya7rIw5rWksawnj5Wzi1jeV8CqgRI2zqlmx6Imti1qZNP8BtaP1LFOgXkKQ7hJ0MyaeS2smtfG6nkd + rBrpkrKbVaPdStP3v7Hqf2HN4l7WLumT7S6WjLQw1FVOa0M2lSL8s9Jmyb1OJSrEjZBZDvjNtFWO9vX0 + MMPFyUC55I+rsyGe7mZMm2qN70x7AvydCFTCkZBgF4JCBSFOBATZ4etvhY+fOTP9bQgIcSQ43I3AcHf8 + 5LxpAfZM9ZPrS+kb5MSsIGcCg1yJVhhxUTPISQxWjgKuyomnIiuWsuw45XpfZXKsujCN2pJ0aorSZD+R + oswY8lIiSI8LJEXedVpMALmJoeQnBJIVPoVUXzvyAmypi3aQeG9JZ6wxnTG6EhN0mC36bTDWQGkA98cp + /sBOnx7J/X2SL/rjtRmROLIs15hNpZbsrbHlRJMDZ5tsOddgyTnRTmeqdJVQGsDVjw3g04p+KtruiMTJ + QxWTlaVi/3SlBuelvFwpOUNi/I0qRakYDazBjWoNrlapcalCRXjFRM6UjOds6QSu1MnxBi0lrtSrKXGp + QUrB5QZVLopWutyoytUWNa61qHKjXZ07opXuKaZ0HpJ4PNeEV+aZ8bLg3jwTpfl7fZ4RV+YacmmOPldm + G3B9wIBbs/V5ccCQl3qNuN9lwD3Ff4DXS06T57lWb8TVOhMuVhiJntDgkOiTw8JRTyapc7/cig8bHUVD + WvOpnPd5vRZfyf183ThRMJavmp77G2OVBvC/5P6+b1OYvmp8Kff+Zb0Gnzdo80WDrnzPkK+bTeSYCd+2 + WvBbjwu/9k352wAO4b2ReG70J7GqYKbUoxvF0l5yg2dSlZxIW0EOrfnZVKUmUpWWRElyNOnh/iQE+SiN + 4JgZ7kRPdSZFyrxAb+HWfjQnh9KaHkpNagg58X4kRXmTHONFVrwrZSn2NKQJ38iypC/PmiHhP8NlzgyU + KkxgB/pke7BWYmBDAIMNIfTWCD+tDqe9KlZpbNYXRFKZHUJxoj95sT5kRXqRGuJK+HRrAj0sCJxiQdA0 + W0J9nYmY5UF4oCeBfu54uFj9Xwawcg1g9QkSg1Vxs5M+5eFM0AxvIgJ8iQqcSVTADMF0ogO8iZw5lTCl + CeyoXNZFYTIrRjYrRv62VaXQUZ32GHXpdDVk0NWcRU9rHv2KqRZbS6guTSc1IYwZU1yUBrD/zOmkJcaT + khCNj7c72loqTJr4LKqTx6Gro4q5mcRwC0OcHK3w852qNH8TE6IICwlgiqcrU7xciI0MpqIom6bqAhqL + U2mVWNhdmUxfXSpDzZmMdGYzX2Lf4uFSFg+WMa+nkPY6Rb/2JTnKhUQFYhRr/7qTKIiP9SQhYYoSiYne + gqkkJU9VTgWdlj2DdInhaTkzldNCJ6RJ/E31JFGQlOZBmuynSZma7i6lG5lpzhSmO0p9udFf4cGKpils + afNkV6sLe1vt2N9qxZ5GE7ZL394qfVZhAO9rseRQlyOHBqYoDeAdg0Gs7glkdu0UyjOtKc6wp6LAk/Li + aaQmS2zz08HB4RkszMZI3nsCR8dncXB6Dgfn53D3UsFrmjpTfB7DS+AxXQ13geu0ybhMmYCT+7M4ujyJ + i8sT+E57hpQYLYqzzSnOMSNF+FKsaMXIqMkCVWLi1IlP0CI2UYt44T2pGYbkyHm5OebkZplQmmtObYEN + 7cWO9JW6MLvQgd5sKzpTzGgSPlwbpUZl8Hgq/MdT5z+JtlnCiUN1RP+Yclz6wfVSK24XGiqngFYYwMop + oIV7flRmyT/KbXiz3J6Xim2F59pwPc+Ci1kSZ4Rf3coz4xU59maRPW8XOPBWti0vJppzLlCLI9NV2e0x + gS0OwgVtxrPRehLrrSeyzmoiK8yfZ5nREyzRG8NC9TEsmTCG1RNFl6s9wRG95zlvMolLFiqcE5yyUeG4 + qwYnputzRHjBvkB9doUZsC9R7j3XntNlTpytd+FMsyNnO5w52+PK6T4PTkmMOdHvzYnZMzmuNIBnsWdo + JttnT2dr/1Q2dXuyvs2FNc1OrG5yZFWjE8tqnVhYYcdQnim9mXq0CndtUZjAKZp0ZxkwmG/BSKmDwIVB + xZTxeTb05SoMQjsW1jqwpMGOZc22LG+1ZkWbDaukPa3ucmdRmyuDNXa0FJhQm6ZHveSfgTIbOc+djV2e + bGxzYnOzA9tanNje6iq6TjhLuzeLa10YKrOlX+pgqN6ZeR1TmN85TeDHgo4A5neEMbctlrbKKMpzw6RP + +0uunUWoxEiFlg8JDyYkJJDg4ADJw/5KBAf6ERbkR2xEMEU56XS3NDDY3S46PZ/YqDCCAn0JCfUnPDKQ + uLgQkmICSY6YQWaYt/BRb2rjvBgu8mR+mR0LhPMuqTJiU4cDuwe8OTAnhJ1zYpjbFEix9Md44QDBMz3x + mTaNqdNm4DnNG09vHzy9AvDyDBIO4iuYLtvy+dSpTPfxxlfiTXjIdJJj/chP9ackfSY1Gd40ZXvRVeQh + sVqx9NVUFjZMZ0nLTFZ2+LO+L5zNg1FsGo5g/exZbOifwoYeJ6ljK3Z0mHCow4hTLXpcFtwWDv6a5Od3 + JV+/Kfrr9VqFxtHjboM+N4WrX20y4lKrJSdbrNnfaMvmegcWVdnRV2JDk2jl0hxLMqXfJeeakSR9MEm2 + 0+R4VoGdwJaMAiuyCy0oLLd9PAW0YrR+jT01dQ7UNzrT2OxMQ4MTDY3SHqTdtUr765L20dvuzmCnB8Od + 7gxLm1FC9gdkv6fbnc4uNzr73WgXtCkgbby9z4u2Xi9ae6bR1uFLW3sQjU3CsSqDqCyPoK46maamHHp7 + qhka7GD+/GFWrlnJzt27OXTsOMdOneW4wvw9c56T5y8oceLcBaXxe0xh/p6/rMTJs5eURvDxU/K54riU + im0FTp6+xNlzVzl0+BTDcxYQF5+Gu4cP5hZ2mJvbYe/gjqOTF07OXkqD18VtqtL4VRi+7m7e/6N0cVOc + 44arqyte7pLrvOyJneVMUaQbLcmeDEkbWFw4lWXFHizMd2R2pvS/bOmvRW4sbJzFmsFElvSm0FAQQnbk + dLLDplEU40dJtD9lYb6UzJpKoZcD2XamSgM4U3JykrkRGS5OlAYG0ZVdwHBtq3y/lrKcKgozq8jJrFAa + wGn5NaQUPMZ/j/79bwNYscauAv+9/+/tfxvBWTl1ootqyc+ppSC7VmJ+NSU5RVTkplNdEEttUQh1RTOo + l2dsLnegXWJwd6mJxHUTBmV7SGLNcKUrc2qmMFTrw0DNTPobgulpDKetKZyG+kSqq/KV63iXlTRQWtRI + aUE9pfkVlOXnUVWQRFtJJHOljWxqDeJAdwAHOqaxR9rfFsHqZk8WSr6c3eBHW71iBHkS5VWZlJRnUVyY + rJxNpDw3gZqCRDoqk5jbmib6JoMNc9LYOJLE+jlxLJsdwdyuEOEjs2gq96OxNIi2ili6apIZkPa4Yk4D + W5f3snlJJ8uH6+iqyyQ10hs/D3MCp9qRIjyuLCeJhrI8KvPThUt54+1kRcBUF7ITI+U5MuSdpZEoHGS6 + q7QxE12mCVeJnjWNguQo+Y1y0U6ijUb6mN1cpRxNXJoeT5Vo0aqCLMol7ikM4CKl0RZHZ0WK0vyd25LK + 0p4sVg7lsWZuARtGRLfNq2RFbymdJQnkio5RLPkROtWe5EDpd/lRrO7MZXtnCmsrZrA8147VEhfW5uiy + IU+HzcX6bC0zYHu5IVsrjNkssXJDjSlrak1ZW2fO2hozNtRaynErtkjdbi4yY6vkiD1FphyU/UM11hxu + fGwA75f8tq/FRTiMF5sbprGwyJ3uFDtqoy0oDbegMX2qtJEwekrCacqaRbFwq8IoiTXCtwar4hhtTGOw + Oo6mnFnkh9lSFGIl+U36TbHkxNowznQmcLUzTrTOLM6We4pOcZNS8mqVCyerXThU6cCeCnt2VNqxt8GZ + g3I/R5utOdFiwoU2hc7Q581hfd6ZY8z78x15Y2QK14VHHe4MYFllgGjqEKozYijNTqZAYeCL3quU914v + 99bTFM1obzxrRpLZujiNvauyOLA2n8Obyjmxs5mrp0a4cWExN6+s4fa1ndy/cZpXb13njbu3ePf+PT54 + +T5vvnCbq2eOsXvzWub0t9PRVMn8OZ0c2LWOsyf2cenMYY7u3crqxXPob6+Wtlki/LRFaQBfPLqXy8cP + cPXYAa6fOMTNk0cFx7l95oRy+/KhA5zZu5uj2zZxYNM69q1dxd7VK9m2dAGr5w6wfPZjE7itNJf0MD98 + 7AxxNZ6Mu4Uavi56JAXZim51pTJrCk0l04Wr+yrRVil6pVSxZMoU8uLdSRKNrYh38cL508IDyU+KpSRT + OHNaDPmifbPjAshJ8KOlKlE5vfqujd1cOL6U1+7t4eN3T/PjN3d5+Os/ePDzFzz87Uf463fgAX/yUP49 + 4OFff/Dgz98ZY2evJ4FZXwKzkHxnI6Xpq4CjvQF2Nno4WGthZ6UpUMfWcjL2AmdbddwddZTrAE91N2S6 + mxHT3PSVUIz8fTwd9GMD2NtNMRW0Dt5yrgJTnLXxcNDEwWIitmbjsRMoth2tFCbwRFxsJ+JmOwFPh0l4 + OU2Ua6rh464uUFViuocK3u5yXMqpHpNEhExgqsDHYyIz3CYoTeAA97GEe44nXkh2RpAuBeGGZAVoEjfl + eaLdnyJ+6nOk+IwnzVeFTEH+TBVKZ0yievoE2qdNYJ7sr/ZXY1eoNqej9biRbMj9dGPezDLmnWw9/pmn + y5fFBnwlxPjTAk3ez1Ph7cxxvJ72HG9J+UGBKh+XafBpjRafiGD+uE2Xj3tM+GzIii9GnfhY8PawLa8M + WXBvtjFnWtTZUfgMy+PGMDdoDMP+Yxjye4a5ARNZFWfI2ngJJPEWrI41Z0WEKYtDTZgzS5dBX20GZ2nJ + uerMnj6WQa8nWO73LLtjJnIlT583as35uMWMr1uN+anNkB/bdPipS4tfhvT5fZkFv29x5q9Tfvx5NYw/ + 7sby4OVkHryWwp+vpvLoTgIPTkbyw7oZfDzgxCsSqC5la3Iw8jl2BjzJJp8xbJ4uRH3mU+z3e5oDfk9y + xG8MZwRXAp/gTugzvBTxLG8ljef9jEl8XqzFt0KqvmnR4asWDYE6XygM4PrHZvCXbWp83aPK98Ma/LbS + kD+3WvDHDlN+URrAekr8a6cOP+zQ5qcdWvy8U5tfd+ny+x59Huw14uE+Y/4QPDhgwsNDZvx1whrOO8El + d7jiCdenwA1F6fEY1wSX3eCcI38ds+XPgzY83GXN90sN+eeAOq83jOV20bMcT3iCHeFPsjxwDCNSL8PB + T9Ab8jQtQU9TF6DA81TLO28IHEdHhBpz04yZl2nKvAxj5qcZsDBFl4VJWiwQwfZvA3huippyreDZKZPp + i5tAV9RztIY+SXPIU7I9ltmJqowoRhIrTOB0fean6rFExN4yEX4KA3hd3Hi2J4/jUMYEjmU9x5XS8bzS + rstHCy34ZqPCAPbm0Xlfec5Z8GIAvOwP9xXm7wx5F1N4cMqJHw9Y8s12Q77YrMsXW3T5XIHNeny+SU/2 + 9Xh35WRuzX6WYzVPsTP3CbZljGFv1hgOZz/BiZwnOSu4lPsUt4qf4dWa53m7ZQIfdk/i02FVvhhR49tF + mvxrmbS11Qb8vlHqZLsNj/Y68sd+J6lHaz5ep8+7i1R5Z2QSHy3Q5Mul+vywxoxfN9lKu5Tztrvy+w4v + ft/uw+87A3iwM5IHu+J5uDuZb9dE8vagD9frJAGlqLIp6hm2xD3J0bxJynXNPlvhzqODwXBKsW5wOJwM + 5tvtXryxwJyLjRPZLc+wLmYMKyOkDSeN4UDh01zu0OCd1bZ8vs+N785M5bcXZvHo3TD+/DKeBz9kSjAt + 5NHDWh792SEBdFBpAj9kPn8wqjR+f2EuvzLEg78G+OuPXvi+HT6o4cHdfD7cFsDJVlOWJ4+lP+IZWiLG + UR42gaLQySLG1akJ1KAxWJfOaFO640yVU0rNTrVgfr4IyRJnFuTbMZhm+h8DuCfZmMFsS+aK2F5Q6clo + 9TQWN4eycTiXM9tm88blXfz4wR2+efcWO1cN01icLOIpnK7GAtbL/s6dK1i8dDa19UXU1BayYNEgh47s + ZOu2dSJQyolNiBKCmsbI/CFu37vBV99+zk+SRBT4bwNYgR9//oFff/2ZX375gffee5ODB3bT1dFCYUEm + dbXlrFuzhF3b17Fm1QIRNzVUFmcx1N3Mrk0rOXN4FxtWLqCmNFs5wmeBCJNrpw/x5buv8ukbdyUB72b/ + xkVsWTbI+kXdbFRgcafyP8c3Lmpn7/oBDm3r5ejmJk6uKeXM0nSuzovi7pxgXh705c2BmbzRM5X7Iq5v + NrhwsdqJQ/lWbEsxYmm4KrNnPMPgzKdZFjWJrWla7M/R41CO9mMDWDEatEIEYIMlVzodeWlpMJ8eLeGz + Cw28eayCK9tyOLYqmbOb8nnxWDtfvbSKB58e4q9vzvL7l2f44dOTfPfRcb7/5wm+//gYP8n+j5+c4Ecp + f/7kGL/88yg/f3iEH97dzzev7+HTl3bw/guClw9IAj/L15/e4ruvX+KrL+7z8Yc3ee+t87x1/xgvX93D + i2c3cHP/Qk6tamH/SAG7epPZ3ZvI8dFs7m5q4OraKo6MZHJIcHh+HqeWFHN9bTUvbWzivZ1dfLqnjw82 + N/PCvCyOiXA4VOLEgXxr9mSasFNy3dY4HTZFqrI+XIWN4WpsjlBnS6QGW6MV0GFbjA47EnTZLPFoVcwk + Fkp7Hg55nt6gsXQGT1CO7GyS79VHaFAdpk5ZsAp5/s+RPfMZcv2epzBwIuWhqkoDWGH0Kgzfnhxr5VrA + iimhFfsNCQbUS3tXfP7vaaEVxxTTRyv+cKJCYm1llLrSDG6M06UhVocmOV9pAKfo06YwgOX8Nvms4+8p + oPuiVJkbr6acjn9dpjbbJY/vz9flSIEexwt1OFOox7l8LS7kanA5T0tpAF8r0FKOAr5eItvFmsopny8p + TF/J8Wfy1Tidr6oc6XomZyLnsydwQ47dl3PfqlRMBa3FP0rVeLdgAm9kP89bOWN5v1iFz6q0+KZOMf2z + wd8GsD6fVevwYbkO78j13yzWeWwAi1h4UcTCHWmH10U8KAzgs+V6nK4y4GSVoXKU2plGS86323Gtx4Xb + s125N+jK9R4bzjUbcaZBjwvNptzssuKFbkGnGbdb9HixRZvXOrV4p1d+T/jAK00SN6vGc1ni4KX8Z7hZ + NpnblYqp9B8bwIppoO/Js9yv1ecVud5LjYopnnW5VabOqeSnOZHwJJdzJnC/So875VocS3maHRJbt0ZK + nI1+khVxz7EkfiKj8ZMZjpW8F6dNe7QmdeHqlAdPpihAOJj/RPJnTaDAdxyFvmMpnTWecv/x1ASMo15y + a2PweNrCJ9EXo8GwtLuRZD2leaPAnGRtBuLV6Y2ZTFe45NMQibORKvJ72izLMGRFlgErM3VZk6PDnkpz + jjXZcabDkWMtthyoM2O7vNf12aqskny6PGUsK9PHsy57stLk3Sj8br20h1UZk1mdNom1maqsy1FjTe5j + rM1TZ12ehog8dTbLeQoD+Ei5EacqTTlZYsTxIj1OyPXPy7u5WmfA9b8N4BsNGlIX2txq1eFinRqnKlQ5 + VavLiSYTjjaYcbDWgq3FpvRHT5K+JP0lVk1IvwaJMVrERgkidYmPMpRtIynNSU60Jy3ZjZQkT6IinJk5 + wxI3V2Ps7HWxs9PHVqAorW11MbHQQMdYFS1DFdT0x6Oh+xxGOs/iZa4wgO3+nxjA9v/L/LUV2DBH0ONv + zWCMFyNZIjizoylJCCU1Opiw0EBm+vsRFh5BcWGhiLAGWqvKyIwIIsjFiqmmGkw1mIi31rPMlN+PtFMl + f7oJJV76VDtr0GIzgdm249jga8ChSAuORZpyIkSPUwEanJ2lwgXfCVxUIHASl8I0uRRnxMUUS86mS70m + O7I73p4tUbasDrNmeYQtS+OcWJvlzabcGaxNdGNVqDWbBDvCbdgSZCm82YLF/vasSvRja0kax3taOLto + lA19nXRXFdNcns/srkbWrprP5s3LWLV6lJa2Kkrl3Ja6PBYM1LNufjsrh+oYakinrTCExlw/emuiGWpM + YLQ9lUVd6SzvzWXd7BK2j9ayc3E92xc0sGmkhg1zqlg/Usu6EbnOiPzOyOPRwGtG2lk1r5PVo49N4MdT + P/exRoGFvayU/X9DYQArzN+1S3pZKvcyb7Ce7pYCaitTyM8OJiHGm/AQV4L9HZk1wwaf6dZM8TLHzcUI + BzsdbG20lLrP3dWUqV6WzJhmK+3IFl8lbPCfZYdfgD1+s+S4nyXTfEzxmm7MFCl9/GyYFeSoNH9nBjrh + 7W/HFF8bZTlD2pCv/KbfLEeCg9wJC/QgJWompZnSXlIjRNCGKA3hvKRQ8jOkvWTGUJgRRX5qOJkJwaRE + zyIhdDpRAdK2Az2JD51GepQfOXKN9EARy9OtyJb7qYm0/Y8B3B2rMIAfj/5Vrv8bZ0J/vDH9cQb0yPFe + yXEDCTosyDRmbaElu6sdJC4IR2h342q7M1dabbncaMGFOkPO1xooDeDzNdKP63Wln2pzTGH+lqtysFxF + WR6V/VMV6pyT8lKFBtclXipwrVJdoMG1KskblapclPPPlioM4AmckfJKveSURm2uCC43aClxqUFTfluD + i00aXFCWck3RS1da1Ljersntbm1e6NPnpTkmvDpixiuj5rwkuDsisX6eMVdGDLk814BLgqvDkjsGjbg1 + aMALs0XH/rcBXKfJtWr5fYnxlyt1uFymw7kcDc5nSn5LU+VyqipvlJvxcb01n9aJfq0TbSD3+38M4HF8 + 2fjc33hsAP8gPPq7dg2+bFbjcznvU/mNz+SdfabIcQ1GfFpvzEeSuz6TGPdDlzM/93nxXd90Pp0dxDtz + 4rjcFceynGk0RThRGOBMaVQQnUWFLGprYmlnK/OaFP2rWvkfLAoTOC1sFsnBM0jyn0q8j7vSAM4JmKo0 + gNukbXXmKKa/i6QgOYC0uBmkx3uTn+xJdYYzrdn29ObZMVTowLwKV0arPJhT6UJvsRwvc2K24j9WG/0Z + UPyFfk0IHdVhfxvAMTQURVKVG0ZpSgBFCT7SFqeQFupKtJ8dIVMtCfa2JGSGHWGzXJRtNiLIk8BZHni4 + WP/HADY20EBfWwVdLRX0NCZhpK2YDc2amV5uhPn5EBPsL23dn7hgX+JCZhAviPWfRtRML0K9nQnwtCHC + 15mM2BnUlyQwuzWfofaix+goZLBT0FUkKGGos4zZHeXUV2aTnhyJr7cbLnZyn/6+ZKUlk5maIH19Cjra + qkyaqJgCejx6umqYm+tjYa4wgK0J8PchJTmGtNR4oiNDme6tWDLMi+SESGorCuhoKKGjKpfe6mypoyxG + WnNZ1FPEssESVs6rknilGGlRxbzeQprlPeamTCMu1IGYUEeiw5yJCnMhJtyFaAUiXImKdCXyb0REy36M + G7FJU0hM8yYpfZqUU4hJ8iA6Xj6Lk+9LjI+Lc3mMeEcpHUiMtSEr3pLKdFu6ChxYXu/JtnZPDnR5cqTb + haNdiv9QFQ5Qo5gGWpvd0j4Pd9hzYtCTEyMz2Tfkx7bBIJZ1+NJd7kZBkil5ydaUZLtRkj9V8q6jvAMt + 7Kyfwcx4jNTtk7g4jcfDQwUvr8lMn6aJj48G06arMdVbBU+viYIJeEyZhKunwvwdi73TU5Kfx2BnOwaf + KU+TLHy1RPhwUY6VPIMmocJ7/IPG4Ss8KCB4IsGiXYIiJhMkHD0iTovEFENSUo1JTzMmP9Oc0mwLauT7 + zcKnWzMtaE4xpiFen5pobSojVIWPj6dk1jgqhWs1+05kSDToOuHKh3PMuVFuw90SE174e3a7d4u1lQbw + B6VmvFNiyeslNtwvtuGelLeKRBvlmXBNcK/YitfKHHi7zJm3ihx4PceWu8kWnAzS5qCPGjs8J7LeYSyr + bcayxmailJNYbT2R5ZZjWWb6DEsNn2SJ1hhWTB7DJrUnOKjzHGcMJ3DZVIVLppM4bybx0noSp900OeNj + wAl/I/YH6LE7TJ/9icacyLflTIWDxEtn4b4OnGl34LTotpPdzpzscedk31SOD/hwdMiXg0Mz2Tkwna0D + 3mydPY0t/VPZ2OnOujZ31ra5sUbKZY2uLJCcMFxiQV+eMe1ZurRm6NCRrc9AkTkj8lsL6jwEU5hb5cZg + qRMDJbbMqbJntN6e+RIzF0r+WNxswbJ2K1b1OrKmz4Pl3R6MNsu5VXZ0FZvTXWjO/Dpn1nZ5sbHbnU3C + S7fJve/qdFaOQD8424c9/TPY2DGF5c1uLGlxY1mnFyv6p7NCnmHlwCxWDQSzcnak7Ccx0pYkPCuekrxw + aQ+hxEtOjZf+npAUQ3x8lPSLaGLjIolTjPoXJMVFkJESR215EcM9HSwcHqCltoqs1ET5PFy5JFRicgRZ + GdHkpUmuTgigNM6X+iQ/ejJ8WFY1jTUNcv8NFqxrMmNnj4O836kcmxvMgdE4VvRF01jsS3bsVBLDZkq/ + DiEiIoLQiDBCIiIJDU0kNCSF0OB4QoJkPySS8LAIoqOjiI+LIjs1mtKcx7MaNBeH017kT2/JTIYqvCVe + T2FJvTcrm32k3nxZ3zGLTd1BbO4NZnN/ABv7Zsi2O1u67djebcHedmOOtxtK+xD+3azLi5Jr35L8/EG5 + Ju9WaPOWaJrXJA7cF55+t86I2xIXbnbYcVGhFVqd2dXsIs9rx6C0/eZsc0oyTMnIMSZZ2n9SronSCE7P + tyS70E5gQ0aBpXIK6MJyO0qkXSgM4MpqW6pq7KhrdKChyYm6Otmus6apwZoW0SWdrY50t7sw0CltqtOF + oS7Xx5C2MLvbld5eV7oE3bPd6BSt1zmkKD3oHppC96C3HJ9Bb/8sevtC6ewKl2tG0NKcQEdbNt2dRfT1 + VjE00ML80UHWrl/FwcOHOH7mDMcVI34FJ89f4vTFy49x6bLsX+HkhSucunBViTPnH+P0uStSXlGW/4bi + +MXLNzlx8gILFq4gNS1XYp4fFhb2yvV/7ezd/o8B7DJFCeXI379N4H+XihHBLi4eODm5yDFHprja4+9p + S6LwxxLJDW3J7gxnebCkYAorSzxZlO/IHIk3Q3lOjJR5saw1iLVDwrk746jJDSQrYhpZod4UCY8sjZH2 + G+5LsWKNWE97su1NybY2JNVMn1hjPZLtbCnw85O4mcdQTQstJQ1UFdRRnF1Dblbl//8N4JwG4eYNFGTX + UZJVLbG7kIq8NKryo6kpDKC20Ju6IhcaS21oLTOjq8SQvjIjBsstpA/YMFzlxHC1u9zrVGbXzmCwMZD+ + plDam8NoaEigqrqA8gq5bmk9pcUNlBXWUJFfQmVBBg2K6YDLQllSG8SerhCOS5853OnN3g53tkoM/LcB + PNjgS1t9ODW1CZRVplNclkFRQZLkv3gq8+KpK4iloyKWOU0JrB5IYePcJDbNixVNIzFpMISRbn+66mfQ + UKZ4Fl+aSqUfV8TTV5/JqrmN7F4zm11r+lk72kxvQzbJ4VOY5mzEDFdz4QfTlTP+NJblU5mbTrCPB67W + xsxwsyMjLoyKgkxK5Xh8eAAeDpZYG2gy1d6CGOEqhSmxDDRVsHJuF8uHu2W7kqrsZNEc8ZRnPTaAK/Iy + lEZkRU6SPEcifXXpzGvNYEmv3NtgDuvnFbBxQRFbF5axY2E16wfL6S6NJytsCuFT7QgSDpbg705rXiTr + u3LZ05PMxopprJIcvD7HkE3ZWmzL02RXiS57yvXZW2nArkp9dlbrsaXWkA0NhqxvMGFjnSmb68zZWmvF + 1nJLNhWZsjHXkB35RuwpMWd/lSWH6u04JLntgOSP/S0u7G7xZHPDFJaVuNOXYktDlCnlYaY0p3nQXxIk + PDaImmQvckKslagTzjRSH8+StnSGaySmZniTLvo6a4Yu9VHWjOZOYU9DOJd7k7jTF8+1Rj/RLB5cKXfi + suS7S1WSX2udOF1jz+FqG/ZXW3NQ4tbRZkuONZtyukWfy23avNSvx1tDerw3x4gP5wsnGJnCLclVh9t9 + WVw8k7b0WZQnh1Gcnkh+VjIFecmUyzutrYigS7j2vJ5IVs+NZcuSePasTGL/mnQObSzg2I5Kzh3u5OKp + Ia5eWsztq1t48fpJXrt9g7devKMc/aswgN954TbXzhxn16Y1DPW20tZQzuhwh3L65/OnDnDtwnGO79/O + yoXDdDWX01JVwLy+ZvZvXsWV4/u5dvIQNwQ3Tx7j9umT3Dl9irvnTilN4CtHDnNu/15O7trGkW2b5L7W + c3D9OnatXMqG+cOi22ezbKCD9rI80Sa++NgZ4GoyCXdLFfxcdUgKtiQ31p6ydFfqCj1pKfdWorlMMSrY + m8IkR9LCbYmcaUGQaPPgqY7E+HmTGin6WHh2ruTjzGh/UsKmkRY5lRbpd4sHi9i9Xt7LsUW8fmc7H799 + jJ++vsGjX9/mwU9f8OiXn+DRH8BD/vovA/iRbI2xsdHDykYHSystzC00hOyrYymwkm1Lcw2szdWwMROY + q8r2JGwtVHG0VsfNQRsvFz28XA2Y4qKAPlMF3m56eCuMX3ddJaa6KaAnMMBbzvVy1sXNXhtHK1XszFVw + sJiEvYWK7E/CyVoFV/vJ0pEnK6eK9nZVZ5qbBj7uQqI9NJjuriHXmSy/OYkpbkKm3YVkK0xgwXQPIdtu + kyRoTGCWy3hC3CYQNUWFZD8t8sONyBOimOwziYSpz5M0bYJy9G+672QyZ04mb4YKRXKscuo4OqaMY4GP + Cut91dgfJII8RghBsiFvZRjxQbYRn+To81W+Hv8qNuTHMgO+KdLi03wVPsgax7sZz/FBzng+KVbjy0pN + vq7T5ishG5+16/Fxp3SGblP+0WvNmz3WvNhhxvU2I840a0hgGMfajKeYFzGGHt8xdM8YQ5fPs/T7qbA4 + xoTlsRYsjxYiGW3OkghTRkNNme2vx4CfNsMBOswTkr0gUJUl/mPZFDqe02mavFRhygdN5nzTbclPPWb8 + 3m3Mb936/Nqvyx+jRjxYa8PD3W78ddqPR0oDOI4/7ifz6JVU5ejfh9fi+flAMJ8t8eTNNmtuluhzPHky + 2wOfYoPPGNZMGcN6wdZpT7LL5yn2+jzBoZljOC33fyXoCe6FPc3LUc/yTspEPsxS5csyXX5oMub7dn2B + jkCLb1o1+Lx+Mp/WTeSLZhW+6pjM94Pq/LxElz83mfFolzm/7zbh5z2G/LTXgB/36PKT4Nfd2vy6V4ff + 9urxxwEDHhwy4uFhE/4QPDxqyoPj5jw6awNXnOC6K9x0h9secEu2bwtuucgxwVVHuGDLo5OWcg0zfttt + ztfL9fhgUJVXGp/lRvHTHEl8gq0RT7EkcAxz/McwO0jqJ/hJGuU91Po/Q82s50VIPSvb42gNV2Mo2Zg5 + aaYCY0ZSDJifpMf8BKmf/8sAVmN2igr9CRPoin6W1pAxNAc/QUeE1HvcRIaTNZUm8Py0/zaANViVoDCA + x7E9eTyHsiZyumA8N6sn82afIZ8ts+X7Lc78fnAKfyqmu77uC3f94AXBLR/+uuzFn6dc5HNbfthhyreb + Dfhygw5fbdLly816fLlRsW8g+wa8v0Kd2/1j2V88hg3JY1gbN4ZtijV/c5/hXNFzXC0dx53y8bxaP5F/ + dCimONfgiyENvponGFXn2wVqfLdQlZ9WSF2tM+TBFkse7rLnjz0O8rtm/GOZBq/OeZ6X+57l7aFJfLJQ + h+9WmfLzBit+2WTHL1uc+GWbJ79tm8nv24N4sCNakMCvm+P5eFEgtyUBHiuQBBvzPKvDn2Rr6rOcqdXm + tTk2fLN1mtRpiNRtuNRxFFwM48eD0/nHSjtudGmxP/9pVkeNYXnY3wZwvjxT02ReW2zO57td+NdJTx7c + nsFfbwfz6PNoHv6QysNfsvnzYQWP/myWsNkrwXNQyiH+kPI3ZvMz/fxCHw/+6uWvP7rhX23wYQ0P7+Tx + 4bZATreasTRpLM2zxlDp/xRFIugLg1VEjKtTE6xFY6genbFm9CSa0ZdszlCGFaN5diwsdGB+npDbDHMG + ko2Uaw0NZVuzSIT28lohwE2SVBv8WNYWwcbhHE5u7uWV81v57t3rfPX2DY5uXcxoVyWDrSXK0UFHD27k + 7Jk97Ny9hgWLBli4ZJBtO9dz4dJJjh0/yLz5c6hvqlWO/t20dR1vvvMq//rpW35RrP37678N4F//g59/ + /ZnfH/zGr7/9xIcfvMuFC6dZtHCE+vpKWltqWbdmKfv2bGXP7k2sWj6PeYNdbF6zhAsnD3LnyhmOHdjG + 6GA782a3sm3NQl64fJLP37nPhy9f59rxXexbv4Adq4bZukLuc+kAa+e1smywTgiCEMfVPRzd0s3xDfUc + X1rAyXmJXOgP4kb3TO6KYH65w4uXhcjebXTmWq0jF6ocOZBjxqYEXRYFT2T29CeZ6/cMa+LU2JWpx4Fc + PQ7naP0fA7jSmCvNNtzo9+DtDbF8f6mer6+18OaJSi5tyeTw8lhOrE7j1r5qPr45yq//2M6fXx7n90+P + 8cNHR/j2/QN8I/j+nwf59bPj/Cb45eOj/PDBPv717m6+fX0rX764kU/vrOf966t548oa3ri5mfdeOsDH + 753ls39e42PB++9d5N03zvDW/eO8dGUPd0+t59bBpZzf1MtBIaa7Z2eydyCNkwvzlSN9L6woY09/Ejt7 + E+SzFPYPpnFucRGvbmri3W1tvL+llVeWlHKlJ46D5Z7sKbBlR5YpW1N02RinzZpIdVaETGC5tNE1oZNZ + H6bG+nB1NkRqsjFKm03ROmyO02FDvCar4tVZEjuZuRET6Q+bSFeoyv8ygDWkjUuOlTipMIBzfB8bwGWh + qo/XAf4vA7hP2vt/G8C1sTrK8t8GsOJchQH8bxO4SrF+VrQm9bHacq70oQQ92lIN6Ew3oiPFmLYkQ9rl + WGecLt1RmvTHqDMnVpUF8ZNZlarO1hxt9ubrcjhfR2kAn5LtM7lanM/R4LK0g6u5GlzJl7JAkyuFmlwq + 0OBivjrnclU5nTuJEzmTOS44lj2J45njOJ01Xr6nwp0idV4t0+Stcg3eKlLh7fzxvJU7lrfyx/F+iQqf + VmkJN/jbABZ8V2/I5yIIPqp4bAC/XqTNy8W63C9VTAGtz41SPa6V6nJRcLZcl9NV+v/LALb/2wB248Vh + N24P2HGp3ZgLTXpcaTflbq+VkHIr7gv/uN2qxd0mVV7tUOOtHi3elnj4UtMkbleN50rRM1wulLxXqvJf + BrAOd6o0uSf792v1eLXRWHKjsXJbYQCfkPx4NGYM59Kf4165NrfLtDia/DRbJJ+tk1y5TGLs/MinmBv5 + PINRExlQjOJN1qdb6qZR2lFFqDrFgYr2MZE8hQnsO0EEuOI/KCdQ5j9eYuV4qmeNpTZwHE3SJrul3gfj + tBhK1GEwSZchJbRkW4uBeA36o1XpiZjE7Fg1FiTrsSzL6LEBnKXH6mxttpeZcKjOmsMiXPbWmLOjQgSY + CLQVGSosT5/E0pTxynJNtrR5pQGszTppE6uypE+kTmJV+mRWZ06W6wmyVUToyb60gTUKwzhblV0FWhwu + N+J4uTFHCvU5JO3naLE2p8t1uFSjx9UGhQmsWAdYUzkN9PUmLc5WqSgN4LP1+pxqfmwAH6gxY2upqeR+ + bXoStKhJ0iYvUZsUiV0J8XokxBmSEGNEQqwJyfEWpKc5kJXuQWqqB3ExrgQH2eMz3RIPLzM8PB6P8vTw + NMPZzRhrR12MrTTQN1NF23giOgZjMdV/Dm9LDTJ97GgKnUK/iPDBYDfhlw6MBNoK7P6DeUHWSgwFWNPl + a8FgtCdLi+NY0VjASGMZ3Q2V1NdWU15RQWNNHXN6+lg+NMRoWyuNmankBs4gxsWSUAstZmmPJVjveRId + NCj1MaXK24Bmdy36HFWY7zCe7TP0OB5uxukwI84G6XA+QJ3L/qpclbZy1X8ClyWWXJIYc1FhAKdbcy7b + lSPpLmxPsGd9lA3LQi1YHGbFsniFATyVjdnTWB3nxLJAU9YHmbI9zJKtIVasCbRhZbgLm3PCRGQXcX3J + EC9uX8+pdcvYMDrAipEeNq6ex7HDWzl5aheHjm5j9br5LF7Uy9plA+xYO8KedXNZOVxHd2U85SnTKUny + pKnIn/byYLqrQxluimFhaxIrujLZNFjMjvlV7FpQy/bRKjbPKWfj3Co2zK1hw98m8DrlSOA2Vo20s2a0 + 87EBPL9X0M+aBQOsWdjHqvk9rBSsWiCfLexhzRLFSOAuFsxpYqC7kqbaTIoLo0lJmkF4qBsBfvZKM9fH + 25ypU82lbUibcDbAzlYba2kTij/6dXE2luOmTJ1iKedYMGWKAmZMm2bONB8Lpkrp5W2Mm6cBzh5yvqc+ + nt6mTJtpxTQ/O7x9bZniZ4PXTGumzrJVHvPxtWPGTDv5bXv8fOyJCvIiOyGI7NgAEbK+pETOJCvOn+wk + OZYYSFqML0mRPsQEeRPh50GwjyMB3raEzBRBHOBBcug0MgVps1xInGZBlq8Z1RHWdCTY0JtgxkCiEYMJ + hsxJMGJuoinDieayL8fjhUPF6tMrOWMwQYfFWcIHSmw5WOfMmVZ3rnd6cKvLjVvtdlxvtuRyvQkXaw05 + V6WY+lmPc38bwIpRv/vLJrGvdCIHSidxqGwyJ8qkD5ercaFCnauV2gKFAaypxFWJoZfkOxfLVTkj8fVM + ySTOlKlwuUGbK026XGqW+N6oo8QFOXaxUfKQxIYLEiPOi0ZUrEl4uUWd6+0SY3t0eUExmneOGa+MWPDK + qCUvjlpwZ8SMG/NMuDQifWGuARdHDLg0x4hrwwoD2JB7g0a80PfYAL7bosv1WnWuVKpxRfLUpVIpRbde + LVDnhsSzmxLj7olu+6DKRDSaGZ8rlhGS5/6yTo2vGv5tAI/ny8bnlfiicSxf/20Af9upMIBV+bRRnY9F + A39ab6AcPfzPOtHQ1Ya8XarD+5K/vmq154duD77umco/+/15Y3Y0JxvDGE1xoyrAUmKRDZUJEQzWVLF2 + qJ8to3OkfwyyarCH4eZq6nJTyYoKJCNiFlnhfmQE+ZA8w52sWV7KKaA7MqPoLYynOTeGotRgspL8BD4U + p3nTkOVOV74zwyXOzK9wZ0n9YzNhXo07vSX2dJc60l/tyexGX/rqA+msDqJNaQBH01IWrZwGujonlIq0 + QEoTZ1AYO5WsCDcSAh0In25FqI8V4X4ORAa6EhsyhejQqQT7e+LhqjCA9TE11MTEQANDPXUMdDUw0FLH + VFcLL0d7Zk31IjLAl7iwIJIjgpTTHSbK8yULEoOlT8yaQriPKyHeDsqpEgtS5N6qMhjprmDx7FpBDYtm + VzK/v4LR/nJGesuZ21PBkCIeVOeSnRqDv48nbo42hAcHkJedTm5WKn5+09DWUWXixGdRUxuPjmwbG+lg + ZqqICTaEBPuSmZFAVmay0jzyneHNrJnTlAZSQ3Ux3U3l9DUUMdRUyPy2Qpb2lrJmWGLagjo2LWli4zLF + Ouc1LJxdSkd9EgXpM0iIcCYuwoXYCFdiwt2UiA5zJSrclXA5Hh7uLFCsNy7bkXI81oP45KmkZPiQmjWT + pLTpxCd6ER3rSmS0M1FRzkRLGR3tSGyUPQmR1mTEWFCRbEVXrh3Lat3Z2TGV4/3TON3vyZl+F450WLOr + wZht0r/3Nplzst+N8wt8Ob8ohEPzFCMZw1jWMYuuUjeKRJsVpNpRmu1Baf40UhOdmTlNF3vr5zE3HIOt + xbN4uajiJ3kryN+QsAAjQvz18J+hgd+0ScycMoEZUydK/FVhitcEycfPY+/4JDY28l3rMfLZsyTF6FIs + mq8wz4Y4yfdB4SpM9x8r8fQ5ps58numzxjNNeJECvsKjQxRLQgiXio3XJy3ZlJwUM4rSzKlINacyyYjq + BH1qhK9XC5+uiFSjJHgChcLHi32epWH6WAb8hcfI9w+KBrhVZcf9CnPuCx9+Vbjue/8xgE15p8SCN4qt + eVXi5f1yW+6UWHG9yIxbRXJ+uR1vVDnxdoUrr4meuCe/fznWkAN+oq2mT2aT5wRWOTzPctuxrLCbyEo7 + FVbYTGSZ5ViWWzzPKrNnWWPwFBu1nmSvnmh540lcNZ3MNRMVrhpP4KLpeM5bT+S8cIMLMw05OcuQfbO0 + 2ROmwwHRBSfyrTlbacv5RnvOt9hzps2OUx12nOyy52SPKyd6p3BM6vzwbB/29XuztceLTYItA95KbOjy + YF27B2sFq9s9WdLkxmidA0MVVvSXmNOZZ0Bbrj6dhUbMLrdhXp0rC1qmML/Zm5EGTwarXemvsGewyp7h + OluBpRw3k3MsWNZtw+rZzqyd7cnqXi+WtLsy2uTCHLn+XMHydnfWK+/Hja3dTuzocmRPtzMH+tw4Mjyd + QwrDun86m3unsl6eY12flIPTJSZOZ/2QryCQdcPhStNrcW8KA63JNNckUFwUS3ZejCCJnNwUsnMUSCcr + O5Uc6e85WWnSxjIoK86ls7mOxXMHhEfMY6C9hYrifAry0snLS6GoOI3qinRqS5Il5kbRkhVGf144C0oC + 2dQ0Q/qTO7uV92zLoUFnjo94c3peIEfmx7B5XhKzWyKpzg2WfhNOQXYKubmZZOVmkJmbQ2ZWCZmZiul1 + i8lIz5PYkkdOdh4F+fmUyj3UVeTTVpNDl/CY3qo4BipDGakOZEHtTJbWC5drnMb6Znk3bTPZ3O7L1k4/ + NnfNYnO3j2AqW7vkfXZasafTlMNthpxtVYzs1eFeoy6vSW76h+S+f5Zr8oFor3er9HhTtNUrku9fqJVc + 2SQ5VbTVlTYnjrc6s7vZmRXSP+YU28g7MKUk3ZCMHENS8oxJyjUiOdeUtHwLsottBTZkFlqQU2xFgdIA + dlAawOWV1lRU2VCjMH4b7Kmrt6au1oLGBguamqxoa7Glo82e3nZH+uS3+zsclBjolHwkbaO315mufme6 + leavbIve6xqWnDXHi/453vQPz2BwyJ+hoVAGBiLp7Y6jrzeNwYEi5gxVMtBfJduNLJw/yKbN6zh5+hTn + Lj82fE9euMSZS1c5d/X6f3D28o3/gfOX/t/j0pVbnD57meUr15NfUM4M3yAsrRwxNrHC2sYZB0fFFNAC + p8dwcvT4DxwdHu872LnjqFwf2BFnyVFTHK2Y5WpBgo81pWFOtCW6MJTuzKJcN1YUubMoz4F5efaMFLky + v2oaKzvCWNkfQ39DCBUZvmSEe5MZMlVpAJcJ33xsAHuR62FHlp0J6RYGJBrrEG2oRYylOVnTp9OQkkl/ + ZQNt5U3UFjdRll+PYp1ehcn7/4sB/D+O5daTm9NMfnYzhTkNlGbVSF4p+tsAjqSqwJeqQi+qCxypK5L2 + UWwoOciQ/nJDBivMlLFpWPFHKhJ7hmqEq9RPZ7DJn/6mYDpaQmhsiqO6tlB0WC1l5fWUltRRUVQp182n + piiZlqJI5lQEsa4xiEPdgZzq8+NI9xT2CwferoiD/zGAZ9BWH0pNbRxllakUl6ZRVJAg7ySOmsI4Gouj + 6ayQazVFsXognk0K8240gk0jIaweDmC+XHegxUc4ijeNpb60lofRURkn9ZMp+qaJ/RuGObBpiC3LOhls + LSAtaprSAPZ2MhEe5EVRZhxNFQVy3xkE+bjjYm3MdDdb0mNDqVJM4ywxLDZ0Fq62ZlgJr1KMEI4XrlKW + pRhlXMXy4U6WDXVJHKoSzpZCaVrCfwzg6sIc5VTQ9cWZtJSnMacth6V9ucJbctk4WsDWRaLTlpawZ1kl + +5fWs2VOBX1l8WSFeBDmaUWwly2JihHAeRGs68hkd2c8m8u8WJ9pwtYsXXbkaLC3QIODZTocrtTnULU+ + B6p12Fejw846XYmf+qxvMmBzoxFb60zZpvjD7woLNhUZsz5XT/SoPjuKTNhTbsaBWhvlCOCDzU4caHFl + b4s726R+VpV7SH+wozXGjLpIxWx6ngyVBTIg8blSdG9GgAk5IRbUp09hkejPld2ZkneEw6Z5kjpdiwxv + dWpCjJmX5SrXD+d6XyIv9sdxp3kWN6vduF1pJ7zAhpu1tlyXmHWp3paTdRYcqTHlaIMJJ5qNBfqca9Hm + Wrs6r/RLLB3S4/25Rnw034F3Rjy5LTn2iMToJUXSDlJ9KU8IoUTqoVC4ZIHkp/LSOIn1oXQ1BDKvR9rN + SBibl4Sza3kUe1bFc2B9Gge35HNkVxWnDrVz8ewwNy6v48Xrx5UG8Nv/TwzgnRtXM7u7iaa6IuYOtrF7 + x2rOndzPtfN/G8ALhmhvKKW5spDR2W0c3L6Wa6cOceP0UW6dPsLt0ye4feY0d8+d5e7509w+e4Jrx45y + 8aBiFPBOTuzYwrEtmzm6eRN716xk8+J5bFk8wuo5vXSU55MS4oOPnT6uJhNwt5yAn5smCUGmZMVYiQZx + oDrPhYYSt8co9qC2wJ38BFtSQi2JmGFKoKcJs9ytRU+4C8+XOBYZTGZkEGkSvxKDpe7CPCQ+RbN0diF7 + 17dz+egCXr25iQ9f38+/Pr/EHz++yoMfP/9fBvAjHv2pMIAVeMQYOztDrKx1MDVTx9BwIgYGEzEynICJ + EDATo0mYS2kppZXJRCxNxmNrrjCANXB10MHTWQ8PJ33cHR+Xin3FqOApCtPXQ0cJxbZiqugpbkZMVawx + 5WyAq72+8hp2Fmo4WKpiZzkZBysVHKwVo4sV0yCpyfU08XKWzuymzXR3HaZ7asu2pnxfFXenybi7TMLN + VQV3hSHspoq3u8IsVmW6iwoznScSKJ+HeUwi1ked3HBDCiKNyJilTorPJMFk0hRrBAvSZTt72kTyp4yj + wvM5Or3GsnC6CptmqnE0UJPbQmLfTDHiw0wjvpAk/22uAT8U6vNbqRF/VBjyU4k23xSo8GnOeP6Z/Tyf + 5U/kqzJ1vq/R4odGPaXh+VW7AR8L+Xi3xYiXpaPfESF8pcaAk5Va7C4ax5rMJ1kQ9wQ9/mNonibwHkPL + 9OdlX4PRKDMWRlkKLFiggHTwueGmDATo0++vw0iwPkvC9FkZoc2GKFUOJqgLITfknXpzPm0z56d+K/4Y + sODRgCkP+414MGzAwyWm/LnZgb8OePLX6VlKA/jhnQQevZjCXy9nIOydRxfi+HrzDP4xx0nIkClnszXZ + HTmOtT5PsGrKGFZ6jmGt1xNsmvIkW6c+wc6pY9g//bEBfDXoSe6FP80r0c/xjzQVPs7V4JtKA35pNeeX + LmN+6jIQ6PGvDh2+alDnk9oJfN4g761tMt/PVueHBdo8WGfMn7vlvveZ88d+E349YMQv+/WV+G2/Ln8c + 1OfBYQMeHDHk4TFjHp0w58FJcx6eEpyR7122hRvOcNsF7gruuUrpBHcc5ZgD3BJct+Wvi5Y8OGXMb3Kd + X/ea8I1iWuJRdV5vf56blc9yNP0ZtsY9y7LwJ5Sjs/sEHYFPUDfrSar8nqJaYQCLMKuZNY6WMHV6443o + TzJhdrIxw8lGjCTqMy9Bh/lJfxvAKWrMTVVVYihtEv0J4+iKfvqxARw4hvbQp+iJHsdAgipzFGsBp+op + DeDFCgM4UZ2VCSqsjX+ebUnjRLBN4ELZJO41afL+HFO+XePIj1td+OPQFP465wPXZiqN3/+M/D3pxIND + dvwm7/WnLcb8sNGAbzdIG90k5WZp25tM+HqDEV9vlPa+XIu7fRPZV/gE6+LHKA3TTVIezx/LZfnNuzXy + jhS/26XNl0Py/VFD/rVAn38t0ubbBep8MzqJb+ZN4vulmvy8Wupsgym/b7Ph950OfLXWmDfmTeB295Nc + b3mCl3ue54NRLb5aYcq/1lny/Xobftgkz7LZg1+3+fH79lAe7IjjwfZEvl8dwVuDIt5FkG5OnMTS4CdZ + LO9uW844rnab8v5qd34+7M9fVyLhpuBOtLyHCH4+5stH65yU/wl2pGQsGxOfYGP8k+zKeIbDReM516jG + q/NN+XSbIz8cd+PP69PhzSAefhLBw++TePhzhsTQYh49qpMw2i5htJc/BQ/p4Xe6+YlOfqWLB1L+9UcH + /NAKH1X/HwO4zYzFSWOp8xlD6cwnKQmcQHGoGqWhmtSE6dIQoU9XvAV9KSI4Uy2Zmy0iM8eG0Txb5uVa + yb4FczLMlUR3aaUnm9r9RBSGi2gMY3lroIjISBGFWRzb0MlLZzfxzdtX+PqdG9w4sY1960fYu2Eel05u + 59UXz/Paa9e4duMUR07s4sCR7Zy9eJyXXrnDvRdvcfDIftasX82mbes5e+Ekn3zxIb8++FG5dsCvf/zE + r78ryt//g98e/M4jSSS/P/yNTz/9iFdefZEDB3azZMkoixeNsHP7Bk6dPMzFCyc4cXQvB/ds5cLpw7z6 + wg3eff0F7t08z55tq9izdQXnju7gzbsX+fzdF3j3hfOSbLdzfMcyjm5bwhHBgQ0LWD/aztKBGlYN17N3 + VTent/Rwam0dx+fLs/dHcqrVh4sNHtyoc+ZevdR3gzN3pFTsX6p14WCuGZuT9FgSOpHhmU+xMPA5NiVq + si9LXz7T5Uj2YwP43N8G8DURY/fmTufjPZn8freT72938ObpSi5sTuPA4nCOrYjn5q4SPrk2zG/vbOT3 + j3bz4z928807O/n8zW18+fYOfvhoLw+/OMafX53g148P8N07W/nylXV8emcFH1xZxHsXFvH6mVFeODnK + vdOLeenyBt54cTfvvHaMt984zhuvH+X1l47w+r1DvHR9Ly+c3cKdY6u5umuEw0vr2D2cx96hLE4uLuLm + +nrOLClmS3u0EMswNrSEs7k1guPDGby6sYF3tjTx5ppqbg1lcKIhiF2FjkJUzdmYos+6OA1WRqoq382C + gOdYMOs5lgVNYmXIZFaFqrI6TIM14ZqsjdBibbQgVpNVSdosTdRiJEaVgcjJ/28M4LFkz3z2PwZwqVyv + Ovr/NoAV00D/2wCuidFRTvv83wZwTYzmf0zgatlWQGH+KqaDbpRY255uRHeWGV0ZQoRTjOlIUvQrPbrl + fhUG8HDMZObFTGR50mQ2ZSrIuS6H/jaAT+RrczpX6j5Hk4vSDi4Jeb+Uq8XFPA0lFMbv2ezJnMpUGL4T + OZoxkcNSHsqQWJz2nOSK5+XzCVwvUOVFxZTIJaq8lj+eNyQ2vV0wgXeKJvJ+6WQ+rtTky/rHBrBiGujv + Ggz5sub/GMCvFWrxUqE2LxTpciNfgyuFGlwt0eJyuS7nKv6fGcAO/8MAvjfbjmudJlxp1edGlwkv9Fvw + snCA+z3G3G0TTtM4kZcl177VrcWbXZq81KQiBH8cV0qe5XLx81wvnSSkX0u59u/dam3uVGlwT6AwfV9r + MuLVBqP/GMAnk57kWNwYLmSO5cVKXV6sMeJk+ji2SkxeFTCGhVIOSe6cHf4c/ZETmC3tZW62OXPy7enJ + sKI+Rp8K4S4lIRoUB6tLXFQVqFAmqJB2UhkwkWrFSODAcdQHT1DOstEvdT0Qp01vnBZ9ggFpf4PJugwr + zOD4x0b/sPTpxekGLP/bAF6lWOczW5vNRQbsqTZnV6WIrTIjNso7XpExmcWSi5ekTWZJ6iSWpauwSup+ + fb4W66VdrJV4sCpLg2WpKixPmciKtIlyzkSWSv0vk/pfIVgp22vlOtvzNTlYbsChEgP2y/f25qhzUATg + cam/c5U6XKnX51qDYh1gLW5K/rxSr86ZikmcrlTnXIMBp0RM/dsA3lZuyqpcY+bKMzSm61GYokeG9NPk + ZENSkoxJTlDAhLQkC7IyHcjJcic9w42kRDflf4SHBDvi52+Pr58ds/xs8Z1li/cMK1y8jLF20sPURhN9 + MxX0jcZjYfQ8PrKfM8Oe5vAp9IZ5MjvYhcEAW+YEWgv3UUz5/DeCJR8JhoKslCOAh2KmsLoqhV3DDWyd + 38PaBcMsWzif+SPzWDp3lE0Ll7BtwULW9vYyUiGCKyGK/OkuJNoYEKj5HCFaz5BkM5mK6Sa0zDShx1s4 + k4fEIjcV9s7Q5UyoKedDDLkUpM3VQA1uBalxO2gyN6V9XA16bABfijfmYpYdFwu9OJrjKdzAQTixJYtC + zJgvgmpZojNrs6awXrAi2p4lfoas8tVnS6AJmwMsWC3PsjLalS0F4RxsK+TK8tncFcF4fvMKEaDz2Lx8 + iG0bRjl+dDOnz+zk/MWDHDm+lYP713Fo92oOSZ7aI3l2fncJdXkhZEW5khXpQHnGFGrypskxb1pLZtJf + EchoQwxrutLZOljIztFy9iyoZPtIOZvnlLFxTgWb5tSwfk4t60caHk8FPbeVtYpRwEoDuE8wwJoFswX9 + st2jNIFXL+hizcJuVi3qlnfewpz+Gjpai6gsTSAzI5DoSE/8/R2Uo36nT7PCe4o5XlPMcHc3xUk0ma2t + NlZWGlhbaePgYICLqxEe8pmrm4ly28XVEHcPYzxElLp6GOLspoe9sza2jprYiVZT7LtPMcbd2wyPaRZ4 + zrTCY4al0gT28rFk6nQrJbw8zPB0MyVgugOJYdMF00gI8VZuZ8T6kpMYQEacL3GhnkT4uxA83RF/Lxtm + yHemuxji52VOuI8dsbNcSfaXtu5jT5y05/RpBlSEmtOdbMds4VDDyebMTTZlVMr5wqdG5NicJHNmS59R + TAPdK7lnSGLIknSp/0JrDlTbc6bZhettrtxqd+Z2qw03G82lf0q7qtXnbLWuEv8xgCvVlObv7uJx7BX+ + uL9E8kGpCqfK1LhQLvFa+vrVKq3/AYUxfL5cjTNlkzldIueWq3JRNOKlZn0uCi7ItgLnGnQ53/Q3mnUE + 2lxokTzUItdt1+Fmjz73Box4adicl+dZ8vKoNS+MWnJ7ngXX5plyccSY8yMGjzHHkCtzjLghvPfesCIX + GPFitwF3WxUGsJqSy18qVkCF60WKP16azP38ybySJ/lB8thnNYZ8VWfAF1XafF6lzhe1KnxVr/IfA/ir + JgXG8bnCAG6dyPedjw3gL1om80mjBh/X6fFxvYnAjI9ER74tsfHlfHXeKNFVTiv9dbsrn3d68kGPL6/0 + St+rmsVAjC0F3gYkuBtTGhdGf1UFy/ulfQ/1sWp2j3J7qKmKupwUcmKCyBMUJ4RRFBukXAM408+D6lh/ + unJimV2WQltBHKUZYeSkziIvZQZlmdNpyfWkv8idUeHSy+q9WdU2QzCTBQ1e9JU50FViR0+VO30NPnTX + zaKt2p/WqhDlFKstZVFKA7g2N5SazCAqU3wpjfeW+/AgJdiBKF8rInxtiApwJDbUg8SIacRH+hAeNAVP + FytsLPQwM9AUaGFiqI2JgS4mutpYGOjh7eJM4PRpytG/iZGK2RRCSYkKEgSQFjWLlDBf4gO95Tc8pB84 + k6T4j+0UxfphmYz2VLFS+v7KOU0sn1PHkqEaFg9WM3+gktH+aub21dBaV0BeRjxBvlPxcLUnIjyYgvxs + 8vMyCAjwQVtXlQmKKaDVxyvNYAN9TUyMtXFzsZVzA8iVd56XmyY5JoYA/5kE+c8gOz2Rlroy+tuqmdNW + wfzOCpb1VrBuuJYtC5vYvryVHas62LaynbWLGiVeNTCvr4SGsmgK0nzJS/MTzCIrxY9MQXrSDFKTZ5CU + JPEhQd6dvNu4BEHiNJJTZ5KVG0hxaSTl1XGUlEeTnx8iec+XpORpcv5U+Z43yYlTSE30JDPBmYJkBxqy + nJhd5Mzyajf2dk7jzOBMLg5P49IcL071OXKg3YpdDSbsb7Xl7BxvriwN5eKyaI4vimH/gnhW94bRVymx + PMuRamk7DaV+1FcEkZnsju80fewtx2Om9wT2ZmPxcdciKsicZMkzmfH2pEaZExuoS6SvKpEzJhE+czKh + vmr4z1R7bAI7PYW19RhsrMbgM/V5EmIMKMq3o7DQnkThwsEx2nj7T8Rl2vM4ej6F85SncRK4TH0G95nj + mTZrMjMCJhMgHCpKdGRitJE8twn5iSaUJBhSmWhAnXCG+hRDqoQ7FYVMJNfvOfKnPU2t9zP0+QofjhAN + JLHwZo09L9dY80qpAa8VaPKPov9jAP+j1JJ3ymx4s8KOV6rseaHchlulFtwrs5J9B96udeXtKjfp3zZc + TxIeGKbFtmkT2OA1nlVuY1li/yxL7MayzF54k70KS20msMTyeVZYih63Gsc2eXd7DJ/npOlErlmqc9tc + jZvGKtwQfnLZZDyXrCXXu2tyWWEAS+7e76fBHtHPB+X5TuZbcK7KhgtNdpxX1GGbNac6BJ22nOx14Xiv + h2Aqh/u92NPjwcZOV9Z3uLGhx5P13Z6sanVlRZOLEsskD8yvc2S4RjHlsqXEAjNa8/RpytWjtciQngrh + PnUuzG3xZKRlCsONHvTXONNTaSsxw5a+WiuBOYMS8+Z3WLF8wIF1c+T3pK2tkvtY0ubMwhYXFja7yrYb + a3q82NArnKXPnW1yrzt6Hdnb68zBAVcOD0/l0LCP6Dsf4VfT2T40jc2D3sIVvIUnTGfLHB/Z9mPz3FA2 + DMewrD+Red3JDLSn01iXSkVlGmVVWZRX5cp2vqBYILygooiqimLqa8ppqi1noKuZlQvnsGHpIub199BS + X0l9dTENtcW0NBXT01FCX2s+A7WpDFcksKQ6gXX1kexpn8mhbg+O9LtwdLYjp+e6cXb+dM7N9+fkoij2 + LE5j6exUeuuTaCpPo7GmiLr6CqolXlTXVlFZ1UxlZbvcSxMVFXVyX3VUV9fJvdfT2lhLT1utPEs5Qy0F + DNenMFIXwaKGEJY3zmJ1kw8bmqexqdmbbS3TBNPZ1ibvpH0aWzq82Cb1u6Pdht1t5hxqU0z9rM+VZsl9 + CvO3Xod3q7WU5u+n5VpK7fV+hR7vVOrzerUhL9Ua80KDBbeapE012HG43o4dtbasrBD+W2RFa5YxZYp1 + ubMNSFWYv3kKmJBaIFy82EaJzCKFGWxF/t8GcFmVHcVlFpSWW8hzW8s7sKax2ZbmJitaWi1pabGktcWa + duEeXS22Amu622yU6Gm3pbtLNFOPI139TnQPOtE5JNvDrgIX+uZ4MDB3CkMjPsydG8DISChzh6MZnp3I + nKEs4eJlLBitZVjywfBgI8uWzmHnzq1cuHSRyzducP7qdc5cvsqFaze4dOP2f3Dx+p3/gUvX/t/j6vW7 + cs0brN+4Q56xEf/AMKxsHDE0MsfC0g47BxclbO2dlbC3c1XCzlaO2ThjY+2EtaWjxEJ7bK2scbQ2w8vO + BF9HY+KnmlEWak9rnINwPHsWSkxflq8wgu1YUODAogovltTOZHVXBEu6wmkrn0Gx5IS0EC8ygqcop4Au + iw2kLGKW0gDOcbcl3UbqzVSHOMnHEXrqhBqLtvL0pCoumc7iKjorWyVPtVJZ1ERhfi1ZebWkF9SSWvgY + /9sA/rfx+7+RU9D4P0rldl6j5NIWCnJaKMpppDS7hjLFFNAKA7ggTDCDynx3qvLsqM43oaFAl+4yQwYq + DBmqNGG4UmEA20qccmJIYu9gw1QGm3zpbwqQthMk7SqG2tpC6VO1VJTXUV5SI88h/a4wW/hLHO3FoSys + CpR+E8ixbj9O987guMSiQxIPd3Z4sqbJk8WNirXzfeioD6GuJobyymRKS1MoEU5VURhLQ3EMraURdCv+ + MKM5lLWzoyQWRbB1NJgt8/xZN+LH0kFfhqVPdtVNo7XSj86qMLpr46VPZ7F+YTOHt4xwbOcou9f2M9JV + SnqMD1OdDPGwNyDMz538jFiaq4uoKcnGf5orjpaKAYfWpEQHU1uaR3lhFlEhfnLcSDiUOtNcbSTnBlFT + mCHvopKlQ10sHe5i4H8ZwDVFOTSWSXyTmNhSmUdnTRaLeotYO7eYzfML2b6oiN3LS9i/spxDq2s5sqqZ + XaPVDFbEkxUo2sTVlCBPOxICpygN4PUdGeztiGVbqTubMwzZlanN/jwNjhRrcKJSdEONPifq9Dmm0A+C + vfVabG7VYX2LLpub9NlaZ8S2GlO2VpizSfLMulxd0as6bMk3ZGeJMXurLdnfYPvYAJZ8tbfNXWLbVNZV + eTCaZU9XvDktMeb05XgJrw1iTnkQ1Qn2ZAcaUhBhTmuOt/CYNNbPzmJeQyQNaW5k+GiQM02VhlBDFma7 + cKw1jDuzk3htdjwvtfnzorSr+5IH7wsneKHBinstNtxotuJ8oykn6g04IXrlVLM8W7Om6BR1rneo8mq/ + Nu8NG/DhiMljA3ieB7cHpnK0fQYrymbQnelHdVIoFZnSlnLTKS2SuqhKktwQTndjAKO9/qJ1/dm0xJ/t + y4LZuSKMvWtj2bMhjd0bczi8q4qzJ7u5dnEF928c5fVb15Wm7z9efuFvA/gO15UG8Cr6Ouqpq85jdn8j + 27eukO/t4+r5o0oDeMWCIWlXxTRKXpw/2MGR3Ru5ef4Yty+c4M6549w+d0rKM9y7eE5wVvZPKqeDVowC + Pn9gD6d3b+fE9m0c37aV/evXsG3ZAnatWsT60dl0yTWTg73xsdPF1WQc7lbP4+euSmyAAWmRJhSIHi3P + ln5d6CDtVFDgJH1cwVVtSIuwIMrPhCAvhQFsSai3q3D+GaSHB5Il7TozwpfkEE/Zd6e9PIplswvYt76F + K0fn88q19bz/8m6+//gcf3x3n4c/fsqjX3/4PwbwX4/488+HPPxL8OefjHETcW9vr4O5mSqGBuPQ03tO + SP/zym0jganBeCz0x2NuoPgLx7HYmClG62ri6qCHx99mrrPiIRX7TnoicHTxclWYv9pKPDaAFaawkXRa + YzydjOQ7hjhZawtp1sBB8VfnFoq1hSdjL1CYwI7WqjjbquFqp64cPeztro+3h1zXRRM3BzVc7FVxcVLB + 1XmyCBNVETLqcn2FWayBt7Mq050mMctZhSC3SUR6q5IZYkCBvPSsQG3ShHSnzlAjXZDho0ratElkTBlP + jufzlLk+Q5fnWBZNU2GLfH4yQIv7cUb8I9WIzyXhf5dnzE95hvxWZMCjciP+qpLtUk3+VTiZr/Im8EXu + OL4REf19hQY/1mnzs3TqHzsN+bbDiE9ajXirwZBb5SLmi7U5UajFXhHZa1OfYTR2DP2hY2j2GUPd1DHU + Tn2Sumnj6PDXZijSnLnSIEakHImSUsTEnAhT+oP06Q/UYX6YASsjDdgcp8+eJLl2nhD3GnM+ajEXIW7G + b4NWPBq0gCEz/hw05uE8Ix4tl/1tTnBoKpz258/L4fx5K5G/7qXAixlwM5UHJyL5aJk7r3ZZcU1E+9GU + yWwOeprlXmNY6i5wHcNqjydZ7/kkmzzHsF2wz/v/GMB3w5/m1Zjn+ChDjS8KdfihxoTf2y35o8ecX7uN + BIbybnT5tlmbz+tU+LxhEl+2qvDdgDo/jGrx62oD/tppzl/7LXl0yIw/jpgoTVoFfj9iwMOjhjw8bsij + E/JMJ014eNqcP878jfOWPLxmx5+3neEFwYsKyPO+YM+fd23luBV/3rTkrxty3gUjfj+lxy9HdZTm8r+2 + 6vPFCk3eGRwnwW4spwufZ0/6eNYmPMOCyKfoDRxD66wxVM98ggpBlQipSt/nqZk1nuYwDTpFvHXHG9GT + YMRAkjFD8frMjddlXqIm85I0GFGYv2kqgkkMp02gP/FZuqOffGwAB4yhPeQJuiOeoy9WPk9UZ16qDqOC + RclaLJH9FfETWZfwPNuSx3IoezxXqtR4pUOPT+Zb8MN6Z37e5sqDQ15wdjpcVYwCVqx37MWfZ1347aAN + v++ROtiumGrZiF82SB1sMuTnLcb8uNWUH7aY890GE74V/HO5Li/0T+Zg0VNsTBjDmugxbJbyRME4rstv + vtqix/tSj18Mm/DDQnN+WaqACT8t1eP7hRp8NTKBL+dO4NuF6vy4Qp+f10r9bZbf3+7IF6tMeHlgLJcb + x3C2agy3Wp/mnTkafLrUjK9WW/H1Wlu+3+jMj5u9+W17sNxvNI92JvFwWzJfiTC/L8R+X4Ymy4KfZkTa + 2wJ5d3uKVbg3z47Pd83kwblwuBsn9R0N96LgRjg/H53JR+udeGmOKWdrVTkoz3EwfyJHpb+eqlLnSpsO + ry0w5+PNDvxw1I2/Lst7eyWAh/8M4+G38fz5Uxp//lbInw+refRXE3/Szl90SNnGA1r5hRZ+l+2Hf7XB + 763wr2b4qIoHd3P5YHsgJ9vNWJg8jpoZYyj1fYbyEDUhorpUCKpFtNdHS7tJtGQg3ZbZGdaM5IjQyLJk + Tqb092zp+zmWjObasLJqioibQA6PJnB6eZYIwlhWdoSwrD2SNQMZHF7XzgtnNvDF6xf4+u3rvH37OHfO + 7uLFywf4+O0bfPflm3z55Vt88NGrvPLmHV585Qavv32fjz//QPAhL792n0tXL3D15kXeePtlvvvhS/54 + 9LPgVyV+++PX/2EAP3j0SBILPPjzD7746lM+/ewj7txVTAN0mMOH93Li+AFuXL/Ayy/d4qUXb/DSvZu8 + /foLfPbPd/n2y4/45IPXuHXlOLcuH+HVe2d5/7VrfPb2bd66c5Lrx7dy6dB6Lh/eoCzP7F7JlsXdrBio + E5LWyMHVPVzY2svZ1TUcm5PKkY5gjlZ7cKbckasVttwSsXa72p7bdU7canDjWr07x4ss2ZmuiJkqzJv1 + NCvDxrEjRYuD2XrSn4SYZWpwPEeLM0W6nCs3FELjyMuLZvHVUan7Vwb48V43b5+p5PzGJA4sDOHkylju + 7SnmixtD/PHOWn58cy1fvbKWT+6v4sMXV/L5a+v56YMd8NVh+O4Yv/5zF9++sY5P7i7mH5fn8eaZQV47 + MZsXDvdybW83F3f3cPHgXG6cW87dqxt54dZW7t7exr2bO4Xs7OKVm/t49eoeXjq3hTuHl3N0VQu7R4rZ + N5LPqWXlXFtXz8kFhaxrCGN5hR9LynxYIULoYE88L6+r5g3Bi4vyudARw77SqWyRNrYh1UDimzarotVZ + Ej6J+UFjmev3NHOknc6XuLY4UPGHFirS3yT+hGqwPEyTFRGarIrRYmWSLksF8+I1mR2lRmeYKq2hqjSF + qVMfqUWtnFceqka+v+RYiZP/bQBXRWvRkGjwHwO4X2EKSqlYE1hh9tbG6v5fBnBtrDbVUVpUy3cV5q/C + +FWuBRynMJP/NoCzzejJsqBbrtuVbPDYAI7Rpi9ajaFoFUaiJ7AkfgIbM9SVI4APFuhwTHLU8XwtTikM + 4GwtLkhbuJitKaUQ2xx1zglOZ0msUJi/6RM5kj6Bg2nj2Z82jn2pYwXPcijtOU5lSUzOn6z8j/SXClV4 + KWccr2WP5e3CSbxXosIHZar8s1KDL+p0+a5ZsS6/8IPG/zKAC9V5tUCD+/ka3M3X5ErWZC7lTuZKsWxX + 6HGhSrEGsP5/rQFsyYW2v0cAD7jywpAz9wZsuNltzI0Ofe5I+WK/GS/3m/JSjyH3WjWkL4znfssk3ujU + UOJ+82RuVo/jatlzXC0fx41yFeW0zy+KWHlR7vNejZbSAH6xRmJkkxGvCI+5X6vL7VJ1zqY9y+mUZ7iS + O5GXa414XcTBhTx1dkQ8weqgMcyX2Dw77An6wp+lJ3IiQ4plEYrsWSJxbLTMk45UCxokX9bFGVITrUdV + uBZVkkcVqJF2Ux2kQrXCBA4YT23QeNoi1OiRdqcYwdcdo6FEX7wWQyl6zE3RZ1ja8exYTeYIF1osIkxh + AC//twEsgmpjoWIdHhM2FxuwoUhPjmmyKHUSCwWLJDcvSp2sNIJX5miyTtrGOhHd/zGAJW8vS5nA8tSJ + LEmdwGLJ30syxrNU+MEyaQurMlTYJvW2t1SPvdKmdudosFPqb1++Gkel/k4L97sk7/Rqgx7XGrS53qDB + 5Vo1zlSoSJ1qcFZpABtxtMGUg7Wm7Kg0Z2OJOQsLzGiRZyhK0yUzTY/kZD1Skh6bwGmJJqSnmJMjAjA3 + x4XMLBdSU0UwJLgQE+OqHEEVFuZEeJgjYeGOBITYM22WFa5TTbFx0cPEShVj0/HYCHztNMn1taMlwpOe + MDcGghyZ7W/NcIAFc4Os/oPhYDkmGBIo1gCeE+/NutpUDi3s4MCqOexcs5jtG9awac0qti1fwb7lq9i3 + cCHb+ntZ01DLYHoi9f5TybE3JmTy0wROeoI4k7GUeUo/9TeTuGPECh8RxVM1ODxTl/PBxlwSvns1UItb + QZq8ILnzhRBV7gRP5HrIJC6Fq3NR2tCFTDsul3pzJH+KcCR7FoaaMRpkyrwwC5YkObEmewprMzxZppgS + eqYBK6brsmGGCO0ZxiyfZcbSCGc5J4AtdSkcGq7lxIo+ufd+Ni7sZuVoO8sXdbB18yj79q3g3LndnD+/ + lzMnd3B871r2bVrIxqW99NVnUJzmS5K858RgS3LiHClKcaE01ZGKdCcas9zoK/VlcWMk6zpT2D5cwP4F + 5eweLWfbSCmb5yhQwYbhCtbNrWbN3AalobN2Xjtr5nWxelQx6vffBrCiVEwHrVgPuIu1iyQ3zu9k4VAj + /Z3lNNVnk5cbRlz8NIKCnPGZYaMc0Tt1qqVyVK/XFHPc3EweG8B22lhaamIhsLHRwcHRAGdnQ2Vp76CL + o6Mezi4GuIiOc3TVw95JB2t7DSxt1LC0VcXWQUOO6+LkIeeIcHX3sVDCQ1F6m+E5zRyPqWbK6ziKXpzm + YUHELDciZ7kSE+iuNIIVxm9BSiDZCb7EhroR6meHv9znTHcT0XW6THXQZLqUQZ7GRHhbEjvdmji5ZpSr + FkmeGpQGGtKbYsdQqrXEAgvhzdJ3ZHthug3zU4VPJVswKLy8P05PaQAPSt5YLPlhQ7ap8EcLTlTbcLnB + nuuNttxstOBGnQlX6gy5ILFZYf6eqdbhTL0eJ2q1OSycUWEA7ywcy64C0QjF4zlUMpETpaqcLxM+WaUj + 0OZypQKaSpwXXXhOPjsjOeB0yWROVqhxQTTi+WZDgQHnGvWVOKsom2S/WbabdAU6sq0YCazF5XZdrvcY + cGe2MffnWHB/1Ir78224J+XNUUuuzjPlwogRZ0cMBfL9OQZcnGPItSEj7gr3fXG2CS/2GnFPrnOzTp1L + JeO5IPd/pWg8N4sm8mLxJF6X3PVe8WQ+KlHjqxpdvpa4/4XkrM8lTn1ePZEvayfxVf0EvpI88lWj8Pzm + 8XzeJNq3TfRbl6bSAP68VZVP5H4/aTDmn/WWAis+rLPglSJtbkucfEly23uiUz9rduSTNnf+0TWDF7tC + 2FnsTWeIGZkemkQ56ZET6kdDThZ91WWPUVXKQG057aW5lKfEkhsTRFFCKJVp0VSlRpHm70Wmvwc1CYH0 + FSYyXJlOZ3ECFdnhSpOxINWHiiwf2iVGDJVOYVGtN6tbZrC+2591giWt0xiocKKr1JauSld6GqbRWTeT + 1hp/WqqCaauMpKUskobCcOqlb9VnBVGbOovyBG8KYz1IDbYnxs+KaD9b4gKdSArzJDVqOqkxM4kN8Waq + ixV25npYGGphoRhda6SLmaE+Zvp6WBspltNyI2TmDOLDQ0iLiSAzLoL0uDDSY4PJUIyWj1CMAp5GzKzH + BnBCkBf5SUG0VqQx0lXOijnNEi+alWvrLZUYpjCBFw5UsWCghnnCm9sbisjPSiB4ljdeHk5ERoVSWJRL + QWEWgUEz0NFTUxrAahoTlAawrrbkB7lXNxc7oiIDKchPVy7vkpYi1wiaJZhJTmYybQ2VDHbWMb+rlqV9 + tawZrGXzaBM7lraxa2U7u9Z0SV7oZvPydras6JF41cJQZ4G80ySaKpNorEymtiyR6rIEKotjKSuOoagw + Sn4rkvy8MHL+RlGx1HOt/F57Hj19pXR3F9HclElFebycG648t0DKwrxQivMCKc+dSX3BdPrLfVhUN52V + NR7s7ZjGuWFfrozM4Np82R5040i3A/tarDnY6cS5eb5cXhrJ+aWxnFycyOHF6WwajGdOnR9dwqe7qwMY + aImhtzmB3JQpzPI2wsF8AqZaT+BoMk7ikx7pEfaUpXpSnzeVynRHCqKNyQzRIDNYlfQQLVJDdYkP1Sdg + hipe7s8pp3+2tRmDz7SxxAsXKix0oLDUhfR8R8KTzPEO1MTJezwWjk8IxmDhNAYr5yewdX8GxynjcPUe + h9f0ifj6qhEapE2caMr0WCOKk0yoSjGhKduStlwrahN1KQ5TIdv3WfKmPU2N99P0zpwgOVGDPWlGXKuy + VRrAr5YZKv8Q8b1iHT4sMeDDMhPeL7fkvUob3hJN9Xqt6KJqO+5VWHO/0pbXahx5p8Gdd6rduZ9nw6V4 + Aw4GqbHO6zmWuz7LYqdnWWD3DAvtn2exnWgKuwksshnLIvNnWWkxlq3WE9lrJdzaQoUrVurcsdHiBXN1 + 7hpN4pbheK4aj+Oy1USueWhzRXL3KeEFB32Fv8s7PSS8/1S+OeerrbnUbMuFVivOtFlwut2Sk502nOh2 + 4niPm8BTdJAbOzqcWddiL/3eiZWtLixrdJI4YMf8Knsl5lXbMiTP1V9mIXHCkKY8fepED9RmiV4pEI1R + JnpFnn2gwYXBRjf661zpqnKgXb7TUWFFZ7UlXTVm9NebsaDHjmVDTpK/Pdgw6s1SaV8Lmu1YKHFvifz2 + SsXI414vNvZ5sqX/sQG8vceBPb1O7OtzZp8c2zt7CnsGp7B7eBq75kxn27A32+ZMYfucaVIqMINtc4PY + MBTGiv4YFvYkMqdH4l5rJo2N2dQ15VHfVERDUymNzVU0NddInxE0V9PeWkuH7A/3trJm8QibVyxh0VA/ + va11dLVU09dew2BvNfOGqlkwu5RFHTksaU5lY1sauzriONw1U96rOycHXDg97MyFee5cWDBd4MuZJREc + XJ7O+tFsFvXlMdheSHd7FZ0d9bQJWtqbaGrplvvpk/vpoqmxXco2Wlpb6WzvoL+rneG+NnmWWua2FzOv + KY0FjdEsbQphddMs1jf7sLnZm61NU9ihQIMH2+oFUic7WlzZ1erI3hZLDrQ8HqGm+OOq24JX63V4T3L4 + R5KbFebvZ4KPy7T5sFyXdysMeLNKNE6tCfdqzblSY8HJSgv2VZizudyCpWWWDBda0JJtSHmGHlmiK1Jz + DUmVdpKcL3y80JxMhfkryCiyfGwAVyjWAJZ4IH2roNiUohJTyuV61ZIPOzrsJYbZ09llI9uifdusaGuV + UnRUR5MlnS3SnlqlPUmb7uqweXxuvwNds+3pGJRyjjM9gt5hN2bP9WTu6HRGR2cJglkwN4rROUksGMlh + 2aJyli9pYMFoPQvnt7Nu7QIOHtrN1evXuHZbYfTe4sK1m1y+dYcrt+4+xu27XL5573/g6v8H3Lj1Aleu + 3WH7zv00NnUQHBKBta0jBoammJpZ/cf4tbFzUh5XmL621s5YWzliZemAhbkdFma2WJpbY21mjqOFMV7W + hvja6xPvaURZsA2tMdL3kmxYkGHH0jwHluTZKZdKW1Xvw6omf1Z1hTHaEkBjwRQKExVLM3g+NoCVI4CD + KI8MoNhvinIEcIqVIQnGWkRL3gvVUSNQX4c4F+HrUXG05pfTXdVGc1UHVcXNFBUoRu7+LwM4XzHq9/87 + Azg3r4m8nFYKBMXZTZTmVAtPKaAyL4Xq/BBqJW9VZjtSlW1BdY4BDaJDe8oMGKhUGMDGDFdZMFRlyVCN + PUN1Tgw1ekk8mkF/sy89LbNobYqiviaP6opKqioUy69VUl1YKNdNk3cTRU9RAKtqA9jXOovTPTM52+fD + SYlFR3q82NXpybomD5bKNefWT6e7Lpjm6ii5lnApydMVhTHUFkXTpJiWvSSY3ooARhsDWT87nK3zQtg+ + 6s+2+b5sWjBT+MhM5nV509eoWPPUj+6aUHrr4xhuz2TT0haO7Rjl1N5FHNg0zIK+cuWSFl6iO1xt9Qj2 + dSMvI5aW2hJqhfP5TXXB1lQXD0cLkqKCaKgopKIom8hgX+FVBpjrqzHd3Y7MhHCayvPolxi2ZKhL0Elf + kzz/fxnAdSV5tFVX0NVQRVd9idxfPiuGytksemzX4hL2Li0WPVvK4TWVHFtXz4m1LaJj65hTmUDWLAcC + HQwIkDb02AAOZ0NHOvvbY9hZ4sa2DEP2ZWlzrECLU6WanK3S5ZziD0kVs3zVaXFCcLBeg+1tWmxs1WSL + cPxtdQZsqzZhS4UZG4sMWJuryzq5xkbJP9uKDNlVac7eehv2Nzuwv82Ffe3ugqlsrHFjYY4tfYnmdMRb + MJzvxeKaQMllgTQk2VMcLhwg3or+4ulsHspg69xsFjSF05zhTIG/FiWSRzuijFmR58aZjnBeHk7kbeE7 + r7fP4vUGZ96Q33xD+PvrTRa8KrHobqvEReUSYzqcatTidLM8X7NomebJXG+fzKv9El+HDPlwxFxpAL81 + z41bA1M41uHD+jp/hguEr2ZH0ViYoTTw66ryaGnMoF1ie0+zP/N7fVk9bwYbF/uwZclMti2dJfwxnJ1r + 49m6KoG9W/I5fayVqxeW8NLNw7xx+yrvvniL91+5x4ev3Jftu0oDePv65RI3q6gqz6ZXcsiWTUs5c2If + l88d4ci+rSwTDV1fUUBdRR4Lhzs5tm8zdy6f4t6VM9y7dJq7F84IzvLCpfNK3FGMAj59kmvHj3Lp0AHO + 7dvNqV07OblzB4c2rWPXqiXsX7+MzYuGhSMqDGAvfOy1cDUdi6f1c/h7qhDrr0NKuAF5SWaUZlpRkWdN + Vb6NQPFHHk6UpNuRE2clvN6cMNHMQVNsiJjhRlKIL9nRIeTHh5IfKxpZNEVuzFQ6KqNYPpjP/g3NXD06 + yiuXVvOPF7bz3YenePDNCzz68WP+/O17ePg7/PVQCaUB/OejxwbwDB8DvLy0cLBXkeA7FmOjZzAyeAZD + /Wcx1nsWM73nMdN9DlOdpzDRfQZLo4nYW2jgYqePi6MQXxt97KxE+EtndVOYwC46eAq83LQFWn+XivWC + DeS4IR7/NoAV6wtbKUxgTews1bC3UpNSMRpYVTnNtKJ0tFGV7+jJ9+Ue3XRxd9TE2U4NR1v5zH4yTg4K + I1gNV2d1PFy1mOIicFJnqsNkpQns6zKRYC8Vkv31yAs3JTtYnww/Id8z1Embrkqa92RSp0wgzeN5Ml2f + odjxSTo9x7JkmgrbfNQ4HaDJq0LG/5lqxDdZxvycZ8LveYY8FEKMBOG/qvT5rUSdnwon833hJCV+KFPj + p2oNfm7Q5pcWfX7qNObbdhM+aTHhDcXI3yJNjmepsztVhbUJYxkNf4K+4DF0BIyh3udJqr2fpML7WSqE + 1NfLffYopnsOM2MwwpShSDOGo8ykNGZAxMPsEF0WRxiwLkqfnUkGnMw24G6lGe+32PBFpxU/9VnwYNiC + P4fN+EvE/6M5hvyxwIiHKy1huzMcnAYnA+B8GFxNgJvJcCuVvy7G8/PeQN6d58CdBiMuFGpzIHES6/ye + ZJHbGBY4CxzGCLF/gjXuT7DBfQzbPMaw31uxBvATfxvAz/BqzPN8kq3JN6UG/NJgwSMh4496rPij21Rg + zC89BvzYrsc3TZp80TiZL1om8U2/Gj8qDOCVevy1w0zu0Zo/j8p3T5rz4LQpv5+WOjglz3DSiD9PSx3I + sYdn5HqC3+SzX8+a8usFc36/ZsPDu4789ZIzfyrhyJ8v2vLgjiV/3DThj2uG/H5ZX87X4peTGvx4TOrx + kCY/7dXm2y1qfLT0OV4beI5rjZM4Wa7GzpyJrEp+noGgJ2jxHUP1jDFUzpTS7xnlKODagAk0hqrTGqVL + W7S+lPp0RuvRG6PHUKwOc+I0mZuoxnDyJIZSxjMo1xpMfo7e+CfpiRlDZ7i0AWkHnSFj6Ap/ir6Y8QzF + qzIvRZPRZC0WJmmyKEGVlQrjQr6/N1uFM6XqvNBqwDsDJny52Jqf1zvx61ZnHh3wgNNT4aI3XPLkr3PO + PDhmw8+75b3skPe11Zg/Nklb2GjAb1uM+H27vLtt5vyy1YIfNpjyr/VmfLpcn/t9ahwqeFpp/K6PG8P2 + 5DGcKhzHnXoRhr1mfD5sxb8WWfHLUmt+XSbfX2bCj0v0+XZUnU+HxvJPeX+fz1XhuyV6/LjKjN822snv + OfP5cgvud0/kXOUYjhaO4XzlE7I/iffmGfHJUhs+X+XMd+un8PPWQB7siubRrkTYmcafW9P4fEGQ/L4d + OxImsWjWGEb9x7Ay7mmO1Wnzxkp3fjwVJW1Y2vJLSfByHNyL4K/rofx4eDr/lPfz2qgld3qMuN5iwOVG + Qy42GHC1w5h7g2a8vcyOjzc58tNhd/46L+/vnh9/fhDKo6/kOj+kwc/58EcFfz2qkUDaADRKWc+jP+t4 + 8FcdD+XYo0dy7Ff57Lt6/vqwnD/u5vCP7QEcbTNlNOl5aqTtlPuPoyJCh6oYE6pjBdFG1ItY706xZijL + QTnF85wsIXZpJgykGDKYYcy8XEsWFTmyscmPA8OxnFuVy4UNxSIG41jRGcritnBW9Kayf00L14+u4B93 + jvDJK+f458tn+ceLZ/j0rev89NUb/PbTh3z/r/f5+tsP+OSL9/j48/f4/OuP+PaHr/jux6/45POPeOcf + b/LeB2/y2Zcf8a+fv+bX33/g1wc/8duDn/lZse7vr38EDPd3AAD/9ElEQVTjl1/ks9/5/Y8/+Pm3X/jy + m8/56uvPeeudN7hz9wZXrp7nkiTSe/eu8+67r/HJP9/jq8//ybdff8LP8nu///odP33/CR+99yIfvHWL + D9++wTsvn+fd+2d55doBrh3bxNXD67l2ZAOXDq7h+NZFIqLbWDVQx6Z5LRxd08elzT2cXVbO0YFEDgn5 + P1DsyIlCay4VW3K92EK5ptWtaifuNLpzq8mLM2VCoLKNWB+twpLAp9gYM4m9aVocFoF/KFODQ2mqHMlU + 42S+EBvF9Lsi2N9YHsz3p8r469Uhfnqhl3dPlXNhXSxHFgVKGcdrh0r55uYAv7++jG/vL+LD6yO8dWmQ + NwQf3V3Ed2+s4eHHO/jzy7388v4mvn5lGR9dG+bNMz28cbKXlw53cn1XE6c31LB/RTn7hGwe29nNqQPD + nDu+gLOnFnHp7EpuXdzE63cO8M69o7x166Byqu9Tm/o4uLSOo8uquLi+ietCBI6O5LGqKoD5eVMYzXFj + UZ4Hu5vDubWkkDsLc7jYE8ORaiFWOQ6sTzFiTaI2K2M1WB6txqKwicwLfJ4h36eYPeNphmc8x7xZ45kf + OJGFQWosDpE4FKbJ4nAtlkbpsDRBj8WJ+owm6DIYrSlxTGKgxEHFH8M0RurQEK1LVYQWxUGTlSZwnlyr + WDH1eagalZFaNMQrRgCb0ZNjQ7+IucejgC1pSVas+WuoNH3bUs1oTTWlMUFhFOpRHSPXjFb0n8cjgBVQ + GMD1cg8tqYZ0ZprQk21Jd4Y5PanGSgNYseajwgAe/NsAXhQ7nvVpauwWUXWoSE/ikC7H84XQ5upwNluH + 89IezmcKsc1Q50ymKqczJ3MyU4WTGZM4lj6Jg2kT2Js8ll0Sw3clP8uetOc5mPE8J7IncilPhZsFk7iT + N4G7mc/zUtZzvFkwkfeKVXhf+MFHlZp8XqfPN80GfNdsyNcSgz6v1uWDcm3eUhjAinWEc1W5lT2ZS+kT + uJg1SXiDYlSZHpdrDDir+EvSaj2OKdYCrrfgQpsd17qduNnnxN1+W+70WnCn20igzwvdBsr/8L8vufal + bj3utapxs34s9xon8GqbKq93aPBCsyo3ayZwvXIcN6oncbtajbs12rzSZCgw4H69jvAKNe5VqXO/VpuX + 6nR5oVqbe2UaXMmdoFz/91ax3HeDGW8ppqNWrHcT9yxrQ59gnmAgTHJc+LN0Rk1gKMOIhdJHl1ZPZWGF + F72Z1rSmmEp9m9KcaExDrD6NUr9Nsbo0Svuqk3ZSE6TyeCrogHG0RarTFa1Nt9IA1lQawD2xf48AFgxK + nh1QrBOcKDkzTZ+lGYpRwAasytFnbb6BCCtDNhUbsk7qepXU/VKp23mSk+enTmZBqjrzk1VZmDKZ5dla + rMnXk+/I9/Lk3CwNVmSosiJNhZXpKixLm8jS9IksyZggvzGBZVJPq7Mms6VAk53F2mzPFXGXrcq2LBV2 + 507msLyfk1K/inVEL9frckXy1dVaTS7WqEkenCziUJMzIg5PNikMYGMO1pmyp9aSbVXWLC0xp13uvzBV + k8R4NeLiNUhO0iMt2YCMZCMyU0zIy7IhX/pPTo4jGZmOJKWIME10ICbGnuhoWyIibAgXhETa4x9mh0+g + Da7extg4amFtMxln68n4O2mTP8uWlgg3usOc6QuwY2CWBUMBwjsDzP+GBbMDrRgUzA6yZna4I3MSp7Gq + MpE9c+vZu7yPbSuH2bJqPhuXz2fLwlG2j4ywpbeb9U31rKspZ2F6At2B0yl3NCdy0tP4PzeGSK2nyBcN + 0jHDgNFZhmzwN2L3TOmTfnpcCjDgigin6wEa3AvW5GWJLS+HSR8JU+F22GQuhEr/lFhzMslc+q8ruzJc + WBxlyaBcY8jfmLlhFixQjAjO8mJ1qhvLwmxYMdPo/0HZX4dXka1d3ygN3U1jcXf3kECAkEASQognQELc + 3d3dPbi7u7u7uzTt7ra79+6925uG33evBbuf5/3ec51znT/GNWvVqqpVVXPO+x4jI3NOVnkass7DiFWT + jVg81YS5fnYMzp7AQJI3i4pmsbQumflNaXQ3ptNWl0ZLfRp93SUsXdzAzm0LObhvFft3LGf7qn7lFM3z + 2oqpyp5N0ix3gqdaEOhpQFSgJSmz7cmcY09ujB1lCU40Zkygv9CHZVWhbGlPZN9gFnsH89g5mCPvKpct + A3ms78thdW8+K3uKWd6rWPKgRtDAyoFWVg62s3peF2vmdws6WbugnTULW1m7qI1livvorqK1Ppey4nji + 4/0ICnXDe5oD7h5WTJhozsRJUiow0QrXcaY4jTXCzkFPaf5aKJb+sdLGzl4fe9lnZ68n7UMHB0cDnF2M + cVEc72KAg7MeNg5amItOM7NWwUq0mp2TFg6i/ZxEr7lONme8p4W0MYG7bAtcJ5oqjWZHe8XyQWZM93TA + f6ojob6uRId4khLlS25yIJkJvsTOnkR4oCOB3uZynDHeE3WZ6qqJt6sWM9z0CZ5oSLi7IbMm6jB7nBqx + E9TI9dWjQ95xf5yN8GaF+WvF4gR7Fic5SCywY0CxtIbklC7JB10SX/okJyyO0mN1nAFbU4w5mGPG2UIr + LpdYcr3MTGAifdSICxJrz5RIbpCYd7JMj6NSHizWZm++CtuFD2/LHM4OKfdlj+ZI7nNefrFYT6DPhSI9 + zhdoK3G2UPKJxMzTohlP5yrWDNZSmr9nRRueln5/SvKAEsJLz8jns3WKf/Ax4FS1nkCX0zVyrQaJHa3G + 3BDOf6ffhruDitG/ttwasObqoBWXBsw412/KqQFjTvYbcLLPkLMvRgHfGrDgUZ8FDzvNedBsKNpOm0t5 + o7iQ+SpXc0ZwJ3c0b8gzvZ+vzqeieb6S+/1HiQ7/KFaYv+p8mT+aL4vGKE3gb8pGi2YbzXfViuV7RvNt + 3Wj+IfnkhyYdvm8UPVcvOa7egK9qrPi82p5PKux4r8SCG4mqXI4ZyR2JjW8VmvJphXxXM453G6Zwq8GP + TWlu1Ei/jRunRaizPtFeE0gPDyEvejZ5MbMpio2kIjmGkoRIsiKCyYwIpCA2lLLk2ZQnzyQlSNrRjEmU + xwTQkx/PYHkKrfnRFKeFkJUwnex4L0pTvWjN8mSwcApLq7xY1ziNTR0BbBQsb/Kmp9SVlkJHmopdaVb8 + 0VKxBl75DOpKA2koDqeuIJza7FBqM0KpSw2kOsGP4jme5M4cT4KfLZFeVszxsSVuusTioAmkzJxCaoQv + 8aFeTJvggLOFITZGEndNDbA0MsTSUPGHSyPsTc3wGj+BkGnTiAkPJXXObDJiIkiLDid5TjApkQEkhvkS + HTCFmdPGE+TpTPg0V4k3PlRmz6G7NouFHWUs7ihnSVcZS3pKWdpbxoKO5wbw/J4qWmrzyUqNJshvKh7u + 45g5K4ScvAyyclKZEeCDvqEWKqqvoaWtir6+Jro6ahjLvbq6PB8BnJ2ZQm52KglxUQQGTGfGjOcGcGN1 + CX0tVSxsq2RFZyXreivZPK+GbUvq2bG8np2rmtm1pk1ipWB1F+uWNDG/q4SOuizaajJors6gqSqdhuo0 + 6itSqCxLVMavkuI4igqjKSiMEkRTXp5EfWM23d2lDA7WMNhfRXtbAdVVqXJsLMVFcZSVJsj58VSXRdNQ + OpOOilAWN4azvi2E9TVT2NM8hTO93lwe9Obq/Klc6JvE8bZxHGhw5mCzG6f6/TizIIzTCyM4vjCeI4tS + 2T6QwLKmmSxomMWCljksaEugrzGezFhPZniYMdZcBQvNYYwzVSw9Zkp+xHia0r3oK5qmHGlen2BFufDT + 0khdioUvF0SbkjHHnFn+Onh7jGKcyxDGOg/B22cUc2JMyc5zIafEnVRpo2EJLngEGuM0WQ1T+6EY2w7B + xG4IZvZDsHR8CRvXV3B0exWXCa8xceIovKaqSf3qEBVqKL9hKn3FmkbRju15Y6lJNKMoXJP0acPJnPoy + ZVNeoXXaaBaFarI91pALedbcL7LmUa4hj4XLvJejz0d5RnxSaM5HxdZ8UGrHu+UOvF3pxJsVjjwssef1 + UtkuG8u7FW68W+LG3VRbzgiH2+WrwvLxQ1k4dihzHYcJXmHQYTjz7F57DutXmGc2jOUWw9lqM5qDtuqc + s9fipuSHB3Z6PLLU4r6JKreNhJeajeSKrQo3J+lx1duA0z56HFYs0xagweFIfU5nWAiXsuVyrT0X6qw4 + XWeunHXrRKMNx5scOd7sytHm8extHMvmWgdWlFuzWI6fL/xqsNCW/jwrenNs6M0VbiN8qz3HgpYsUyoS + tSlN0KIoQZPiZNEZ6cJNc01oKLCiucSB9nJnmkqcJCbYUZNvRW2+JXVFwtfKRNNUWTK3zYnF3S4s73Nj + Ze8E5sn9DVbaML/KgcU1Y1kp7W1Nixsb2tzY1D6OzcLjNzbas6neTu7Thk119mxucmZLiytb293Y3j2J + bT3ubO+ZwI7eSVIqMJmtPd6s65rO8rYg5jbPpKshUvpSFGVlsRSVSh8qTaKwJIWikkxKy/OpKC+gsjKf + akFDVRF9bbWsXtgjHGKQwdYGmiuLaKstpre5jL72Qga6cuVZUplfG8Oy2ii5n3gOtEdyrMWLE/JuT7Q4 + caLDiTM9Lpzpn8ipPneODfqxb1E0G+Yms7QrnZ5G6eN1udRU5VFemUdlTTlVNQ1UVDXK/dRSXlpFZXkV + tTU1tDQ109PRRl9nE91NJXRVp9NfHcf8mnCWVQeytmYaG2s82Vr13PjdUT6e7cXObC90YHeJI/srnTkk + eedojaVwamOl+XtddMwj0S7vlerxWZGO5DMdvs57js/zdPkk34D3C0x4u9iM1yVX3S4251y+GYdyTYXT + m7A224x5OeZ0ZplRnWZEYYqB8G19EkQjJGQaE5dpSsJ/DeBcexKz7UjNsSWj0I5caSsFpfYSay3Iy7eg + WDhGZaUVba2OdHU60dZuT0urHU1NttTXiyaqtVaawA01itJKaQI31lsrjeKmNnuaOh1o6nakpVfO7ROu + 3utKd/94BgY9mDfoxfxBXxb0BbGgfw6L56ewelkx61bVsmxJLSuEo2/btoJjxw9w7cZ1rt+5wyWF4Xvj + Dtfu3Ofa3ftcv/tAWV69LeWdh3/juuLzLdl/857S8FWU/4Vi/+27j7h+8z579x+huaWTsPAIpeFraGyG + sZmF8D9n+TxW+KazcEuFASzbNs7YWjthY+343AC2tMfG0hYHC0tcrUzxtDPGz0m49CQTCgNtaZhtR2eU + DfMSbFiimNY/04mVxRPZWDed9Q0BrGwMoK/Cm5qMSRTETyFj9lQyZ3pLTPanMDKYgjB/sqd5kjrBmShr + E2ab6BKqr4G/jgbTdLUJdXQiKzicmrQ8WkobJfe3UJpfJ3lPYd6WKw3g+OxyJZLkc3J6uXL/c/zf5q8C + /58N4BrSUxvJSmlUGsD5qUWUpKRRlhpFeeoMKlImUSJctjTBhPIkiTupurQpDOBCI7oVo4ALzegqtKBL + YnJPuSO9VW70VnvSJTmuvdaLxqpgqksTKS/KpqywgLKcXMolf1dmRFGfFSzxzodNld4cbZjK+TbJg52e + nO6YzNHWiexumsiG2gksr57IvEpPuiv85V2EUFMYTkX+TMqzQqjKDKY2awbNOb50FihmT/FhY5c/O+b5 + sXOBFzsWTmXbYi/WDE5lfpsHXbWetJR501oeSHvVLAaaEtm+sp6Tu+Zzdv8SDm0ZYGFXMUmR3kxyNmSc + nT6BPuPJSIoQTpCvNIC93V2wNtZhnIMFUTMDqCnNpTg3TWkA21saYSH8xWuiM2lxs2iSc/pba1g20K40 + gFsrCyhWGMCiPwtTEqgqyKK1ulz0XTXdDSUMthSydrCU7YtL2LesgIPL8zi6uoAT60o4tb6KM+vrObi4 + isHiKFIV/5wqGmnaOBsihW/WpwezoSFOOEQ4u/PHsyvZhENpkpdyDCSG6HGhWHRsmQHnK/U5U6HDaeHe + R6u02CM8eVutlsQxKSU2bRXNsUXiz4ZcY9ZKrlkr8WV9hoFy5jLF8lW7ym3ZU+PAvvqxksvGy/nS7ktd + WJhuQ2eMOa1RlgxmTWBZ+XQWlU6nPs6B0tkW1MbbM1DszY6BJHbPS2FZXTDNKa4UBgsnCdChS7jIhpyJ + XGoJ452BKD7snc17TT68X+3EB9U2Aiver7Xg3XpLHtabcVMxa1G1FmeqNDhbI3m7RpXzNWO4WqfCozY9 + 3usy4aM+az6e58jbgy7c6Jac0DaNnU2hrKqOYG5VPL012bTWFklsK6S9KYP2BuGwjX7CV71ZNejJugWT + WS/YuGiKtBN/4Y3C4ZaEsW1dPMcPlnPl7FweXt/L27cv8P6D63z8+m0+fXyfDx/e4frZ42xes1hyYD4F + uQmST4rYsG4hp47v5fzpQ+zftZFF8zqpKM6U/pHBov4WThzYyr1rZ3hw/TwPrp7j/uVz3LukwHkl7l44 + x50zp7l24hgXFaOAD+zjzJ7dnN69kyNbNrBv/QoObVrF1iUDtJWmExs4gamOWrhZvsZk+9cIcFcj0k+X + uBB90qJMyE2woCDVkpIMa0qzHKRPuYhOEd4X50hiuGKWK8VawGOlfbmTFO5H1hzRQbFhSr2TFz2D/Fgf + WkpmsbwngwPrq7l8uJ+H55bxwe3N/PPDY/z1j7s8+/cn8NsP8ORXePanEk8V5u+zZzx5+owhoWFGzPDX + xdNDjXHjRuEgN2pl8SpmRkOlMw3DyuAVLBTmr/YQjLRfwlx/BDam6krT18HOSAK1PjYWejjYGuDqaMB4 + xRq/Lrq4jdMRaDNhvJbSnHVz1cNNvnMbayzHGeNib4KzrcI81hZoPoe1wgTWwF5RymdHO03l9dxcDZWl + i5OO0vx1slPDyV4NZwd12aeBq7Mc56rDRBeBbE90VJNyDJ4uo/FVuO7e+iQFmZMSaEqirx7x3trEeagT + JxUSN2E08W7DSRSSmuU0hEYh0f81gE9P1+LN2YZ8FWfMv5NM+CPVlL8k8T/NURjARvxVpM+vORr8nK3K + T7lq/Fqgya8l2vwmHfwXEew/1xnxn0ZT/lFnymdVZjwuMVVOL7knSpVVocPpnz6UVu8hNEwbolwbtGLa + yxRPfZWCKaPInjSSXPfR1M0wpjXIjPYQUzoFXeGmdIcZ0xVmSK80pGVC8teF6bEnWp+LWfIbQmy/bLLn + X+12/N5jxRMR/H/1mfFXv9x/vxG/zZdy5QsDeL8nHPODk4FwdiZcnCOI4s/DQXy/zoN3uu24VKDDqVQh + 2nPGsNpnKAvGD2FA3lO/CJBFY4ewerzCAH6J7ZOGcGDKS5zxHcrVgGHcCX2Vx7NH8EWaDv8sNOE3CSLP + hIg/bbHhz2YL/mwx5fc2M+Vo4B/rDfiuVvO5Adyuzk9zdfh9pSHssIKDdjw9ZsPTc7Y8uWDD7xcs+f2c + KU/OGPPsrAmcs5Btc349ZcJ/Tsr7PmPCTxfM+fmaDX/cdeLp6y789bqrwJknD+z547Yce82Qny/r8O8z + avznlCr/OaHKv49JeVTq8bA6P+4dzdebh/H+4pd51K2pHEl1vEwCdOYYBsOG0Th9CFVSZ+W+L1Hq+zKl + fsMpnTGaykANqkP1qArRozxQxEKAJg3BenSE6dIzW2EAq9MdNYKO6FdonzOU9sihtEUMoU0xAnzWENrD + htAaPIQW+Y3O2aPomaPGQIwm86K1mR+lxcJIFVZFjWFrkjonCg25WWvGez22fD5oy/eL7fhlrRO/bXbi + r92ucNQNTk8QyLMfsef3/Rb8sk3qfosJf2025q8Nhvy10ZAn8vnJNnP+3GbJH1ut+GmDOf9ZZ8k3y4x5 + 1K7J/rRhbJB73CjYnTCEM7mjeL3eiK8HHPlxkRM/L3Pg58U2/Ge+Kf9ZYMT3g7p82aXKhy2v8k7DUD5q + HcG3c/X4cZkVv64fy88b3eTaDjxq0eZU3lD2pwzhSPoQLpcP52GrHh/Pd+Cr5e78c50fv++I4OnuOJ7t + ipe2kMTTzQl81TedGyK+ts4cwVI/xdTUw9iVrsLVNks+3eLFkxsJ8FDwKEowG2mIPL3sz48HJvP5ehfe + W+zI+wvH8v7ccbzRM5aHvWN5PN+V91a48emGCXy7YwK/HfGA81PgljdP3wvkry/lOt/HwX/SJZjmwh8F + ElCL4GkxzxTrAv9ZwDPZ9+x32f61iKf/FnxXxJMPsvn5ZgJvb/Fhb42J1OerlEg/L/AfQ2G4ISWRQu6i + BZEWVAqa44XIpTjRm2JLlySHzmhD2hTGWpwRcyXBL8lzZYMInwMDkZxalcaxlems6whjcZMQ/foQFrdE + sWNZOSe393Hn5HreurKX928f4eOHZ/nm/Rv866vH/PO7t/j66zf58ut3+fyb9/nqu0/47p+f8+0PXwm+ + VJq+n3/1MV98/bHSGP72h8/54V9fK83hH378jn/8+APf/vN72f9Pvv3+B777/h9S/oNv/vEtX33zBZ9+ + /glvvv0Gt+5c45Ik0AsXTnPz5hXe/+Atvv/uK3795Ud++/Vf/Pbbj/z+27/49eev+dc/PuCbz15XGsD3 + ru3j5tmtXD+5kYsHVsqzLODktgUcWt/P5vkN8oyFLG8vZstgHcdWtXF2VY0IzTQONIWzr3Qqu1NtOZxq + wbkMSy5lWnI1347rIgxvV7pxu9qds/mOHEwxYdMsiWeBw9gmfexAgjZHknU4lKjBgVgVDsWrcjRVk5O5 + IhqbXHh3RTD/Pin1+7CTn24388HRXC6uCePEEn9ubI7mw2P5/HCtiZ/u9fHNjW7ePNnAbSEotw9V8ta5 + Vj670cePbyzh1/dX8++3lvHN3UHeP9fI60cqeft4Iw/2VXN+fT77F6WyrjuWtf0pbFqSx7ZVZezYUMPO + LfUc2tvNhVPLefv+QT5+44yQnTNKE/jSvgWc2tTKhS0t3Nndxc3NjRzoTmJZnjd9ca4MxDmxMHkcm4t8 + ONUewYmGEPYVebA1zZH1cWasitRjRYQ2y2drsXSmOgtCVBicMZKeaa/QMfVlOqa8TI/PCPr8JPb5azA3 + UIe5wbrMkxg3P0yf+RGCSEMGBd0z9WgK0aIuSIvaYC1qJC9VzzamfKYBBcHa5ASokS3IC9KUz4p1fHWp + iDCmLlbafrId7WlOdGQ40ZpiJ8TVkpoYEdrRZjTEWymPUYwULY2QfjPLgKJwPYpm6fw9HbRiauiyCF0q + YxQjhk3kepa0JCkMYHNa5hjSEamvnBq4K1yF/vBRLJg1mrVx6myX/HQwx5AjWQYcyzTkhJD2Uyl6nE3R + 5UyiNqcTNDiRIPE2QZXjSWocT5S2Idv74kazI+o1tkS9yjaFAZygmJJ/JCdSVTgv8eiK4FrKCG4kvsrd + JMmF6aN4L1uFD/I0+KRIh68qjPi2xpjvqyWWVhjweZGufKfF21kavJGuzv1UNa4rzN+4EVxIHsNl2X+l + QP9vA/iYHH+4SI/j5dLW6+y50uzItRYHbjRbcrPJjLuSVxVTfd5vMeB+qwEPWvR41KzH3Xr1FwbwKCHy + ajxWGsAa3Cgbw/XSMdwsU+NGsTq3SjR5VG3IG7VGPCjX5WaBCjfy5Ps8Fe4WaXKnQIO78ix3crW4k6+j + nP759QoL3qyx44pi+uOoUawJGcZg8FDhLcNoCXmFxrBRdMUbMZBux0D2WLpFvLdIPTfEmFAfbaIsa+cY + 0xBlTLNiDec5RlSHSb1KmymcPvKFAayYZUPvuQE8W+eFAaytnAa6M1Kb9nB12sLV6I7QZDBGl0UJBixN + MmSF8La1WaaszzFhnYiplSKmlyRrsiBOVXKsCvPiNZgvcWAwRp35seosTdZlRboBqzOMWC1CbFWKthKr + 5Zzn0GBligbLkhVmsTorklVZm6bB5mw9tuboskm2N6WosCVFlR1pqhzM1eR4obSpEn0ulOlxsUSHS4Lz + 8p7Pyvs+WyaiUDG6sMqYI5UmHKwwZ1+VDbsqHVheaElTmh4ZMaqEBL5KePgYYqN1ldNBpwg3TZP2npVi + Q3amvXLkUEqaHTHxlkRGmREZYcasmWYEBRkLzzfBP9gS/zA7/MOd8JxuxXh3Y9zG6+ExVpsA4eiZfgoD + eBzNwc40T7eh3deCLj/BdHM6p0tO8rWUfVa0ybmtvja0BtjTMXsSCzJF2NWmsLa7mKVdJczvKGFuSykL + 6sqYX1pEX0YSvfFRLEqKZkFECJ3TJlPuaEmM6qvMGDaE4DFDSDR9hapxqsz3NWRzgCn7/Qw4MU147TQ9 + Lk/T5tp0TR4Ir3ojRJc3QzR5I1SD20FqnJk+iv2+Y9gjXGu7iN2V4Yr7NaRxqh6tPsZ0B1vRH+HAojg3 + ls5xZWmgLSu9zFk/RYS2hwlr5B0skbLHQ9rcVFPK5DnLwhwpi5tIUZonuele5KT5kpPuR2neTBoq4hlo + L2BJX5U8ZwU9tbk0FiVTmRVJ2hwfwnwc8BAdMslhNIGeojdCrciKcqAowYnq9HHUC9oyJzK32If1TRHs + 7Elmb38Guwez2L0gn+2CTYO5rOnLZkV3HisUJnBPOct7a1jR26g0gVfP7WTNfIUJ3PG/DOB2ls9tZkFv + rdIALi6IYU60D9MDXfGYasv4Sea4uimmcLZkvMB1vAXOLiY4OBpiY6+HpY0W5pbPYWmtrfxsaS0QjWbn + oI+THOsyzkxpGDs4G2DjoI2ZjQamVipY2qpjLWLX1lkXexcDxk40UY4yd1X8psBlojljxytmm9LH2Umf + ia5mTJlgxXQPO+VUz4pp37IS/CnKCCE/dQbpijU+pa4iQ6wIDzAhWNpE4BQ9Aj10CZ2sx8zJukRM1iJq + kgrxk1VIn6JKkZ8iDlgxoBj9G2Mh9W3F8kR7liU5sFC41WC0Jb2RxvRKPhgQzJ8jsSFaj1UxOmxK0GNf + qrS3HGMuFphKLDTlRrkJ18rls8Tb08W6nCjWkbgrXEG2D0q5p0CV7dmj2Jo1gh2Zo9idNZoDOZIn8jQ5 + pzB/Sww4L3HxrGgoBc4ITudrC4fWUuJUofT/WlPO1FlwsspEOaXaMcU/gVQac7pGtGKdmeyXz1X6Aj1O + 1ehxWrTS+WZjLrebca3Pmhv9ttwcsOFavxWX+i250G/G2T5TTorWO94n8URwSrYvDphyc9CSR3OteNxj + wettEtdFo94slrieO1Li+WheLxjDe0WqfFKswRfFWnwjWvYfpVp8V6zJVxL/v8gbxeeFY/iqeAxfS774 + plpFcpiKUrd916DGd/Ua/KNRW7Z1+bZBn28aTPiyzobPqh14t8SKB9n6nIl4hbORw7kuuVRhMn1YYs37 + FU48rnHnao0Pa5NcqJA+GztOmzAXQ2a5OxPp7UHsDB8Sg6eTPSuYwuhwCqLCyI4IJC8mhNKkmVSmRlCe + HE5GqBdpgR5UxQfTX5zMvKp0WhQjS9OCyUvyIz/Zh5oMH3ryfVhY6sOqOh82tfqytTuQzT2BrGj2prfC + lZYSZ5pKJQ7WThVMp6kmkOaqMJrLZtFUPJuWgtm05s6iNT2EhsQZVMzxpCBsPMneVsS6mxE3xZJUXycy + At3InTmV/MjpZM2aTpiHK+MtjLAz0MHexBBLA0Ms9I2UsDexxGvcRMJ9/aQ/zCIzLpq8xBiy4yNJj1EY + wsEkhU9XGsBh3uOYMcmB4CmOxIVMoTRtFu0VafQ35DGvqYiFwpGX9ZQqp4JWGsCKtYH7a+loLCY7LYZg + eZ9enpOYNTuU3PxMsvPS8QuYhoGhNqpqo9DWUUffQAsdXXWMjHRxclasAewrOSaVvOz05yOAA6bjp5gC + OjGaxpoS+tuqWdRepTSA10tsVBjAWxbWsG1xLduXNbJzdSvb13SyeXk7Swdq6GsporUqk+aKdOrL0mis + TKepOpPG6nSqypIpL06gVFBSFK80dktLEqmuyqC5uYDu7goG5Hn6JSa2iiaokmuUliRRXppCdWUGDXVZ + NNel0VGXwNzmWNb1JrC9P4qdbf7sa53KqR4v6RNeXJo7lfN9kznRPoH9DePY3ziJI52+HO0LEV0RwdF5 + CRxekCaxOZXNvUls7E1lTW8yS9oS6a2NIjvGg6DJZriZq2Kr9SqTzdSI9bCkLsad+XnTWVs5g5Ul7izM + tZMcaEKX8JC2NMkzolFKk6yk7nTx9x6F+4SXmOA2BD/RhjFJ5uQUjye/0of00gBC4t1x9zfHUeKdqcOr + mNgMk7g7VPASFvZDsXIciv3YV3B0eYWxLsPlOiOZ5qXGzAAdkmYayu/Y0Zo/nt7iCbRl2FEdZUC+/yhy + vV+hwus1WqaPYYHk0i0x0j9zzLldYKFcfkQxSv8d4TMf5BtJTLDgozJrPqiw590qe96utOctweNyBZx4 + s9SZt6W/vF00jpvJ1hwP12WbzxiWjBvK/LHCA51eZtD5FQYchjNo9wpzbQWWQ5ln+hLLzV5mq9UoDlur + cclemzuSix7b6fOmlTavm6hxx2gkNy1Gc91eldvuelxTzAoinOCIjzr7/dU5EqHHmQxzLpfZckW48IU6 + S87UmnCy3lT0jhUnGu053jSWI6Lldtc6sqHShsWFZgxkCTfIlLyfZUl3lgXdohm7s6zoyDKnPducpnRj + SkQjFAkfLE4UjSEcrDLLkJp8M+rkHTUU2dJc6kB9sT1V+VZU5JpTmWdGTZEF9eVWNNdYS59wYn7nWBZ2 + jGWecPQB+W2FAbxAYuLiaidW1LuwqsGFdS2i7VtdWdfgwOpqK5aWmrCkQPJTsTHLheOvqbZlfYOTxCqX + 50Zw+zh2dIxTltvbx7Olw5017VNZ0OBFV8106kr9KMmXPJruT5Lk0/ikQKLjgoiODSU+MYLUlGjSJQ5k + ZURTVphGV3O59MlmlnQ30VqWT1VOisS/TLrrcukUXtdaEyX7Q2jLn848aZObFKN/O2ZxonkKJ+qcOFxt + zcFaK3nHor+bHdjb5MCO5gls7QpiZXsk/XVzqCqYSUH2bFKTZ5KQFEFGdho5eQVkZReQkZ5DeorEoYwc + iguLpP/W09XeSldbHY1VOdQXxdJZFsm86lCW1wSwTnLFpqrJbK2Qd1HiojR+t+dasyfHgkMF1pyqcOB8 + jT2X66y4Kjn2hmiZB+X6vPtipqWv87T5JkeQq83Xgs/ydfm4wJD3Jfe/XWzOQ6nDa3mmnMo2Zp+0ky1Z + JqzIMqNPtpuzjKgSrViUYSjvV59k2U6S/YmiLxKzrZ4bwHkOUjqQmmtLZpE9eaX2FJbZUST5rqTUiqoq + axrkfXW02dHVKf1TypZWm/8xgCVvNtTKtrSh+horpfnbIGhstqap1Y7mDgflKOCWHgda+8bS0etCT/84 + +vonMtjvzry+qczr8RUuGM6y+QmsX1XC5nWNrFqhGP3bw759Gzl1+gjXbl7nxt27XL59lysChfF76+Hr + 3Hz4iJv3BQ8eS/m/cPd1bijM4Fv3uXbjuen7XwP4umzfu/8GN2894MixU/QPLCAmNpFxbpMwMbPExNxC + uOZYySUuODqNFSimgBbYj8XBTmEGO+Og2BY42TvhamPLJDtzpjmaEeJiRIKnGWUhdjRF2tEdozCApZ+k + 2rE825n1FZ5sbw5gc0swqxoD6C+XvJ3rKXzbT3hBEKUJwRTHCIQ3FIQHkDVtKkluLkRZmzLLRE85/bPC + APbW0SHQ1p60GcFUp+ZKm2+iqaKN8sIG8nKqSc2skHouJyGnQonkzBdmblaVEv81dxVG7/8vpGfUkZ7a + THZys9IALkzJpzw1iaqUWVQn+VIRJ1xINFxVrB41ifo0pOrTkWdMV4GREp1KM9iULuFWPRKXe6tc6a+Z + RG+NJ501U2iR3FNXFkVVseTEwiyqczOoyUygPnMWbblBLCj0ZneVB2cbJ3Ol3ZMrXR6c75ysnC5/r/Td + LQ0TWFkzkSVVniyomiHvNJC2oiCa8oOozfKnLmMGTVm+dOb6MFg0RXncli4f9swTLPRg92LBkqlsmDeF + xXLd3joPWsu9aKsIoKN6puTlJPasbebsvgWcO7CUw1sHWdRdSrJoKPexhsoRwMG+E8lOmSPcoICyfIUB + 7KpcOsPVwZLo2UHUVRRSVpDJzCBfHK1NsDTWUR6TlRJFZ1Mly+Z2sXphH0v7Wv42gPMToyhOS5Q4nUNP + Y51ouGYWd9eLrqply6Jqdi8r59DKIo6uKuD0umLObSznwqZaLm5q4cjSauaXRJHu64ifnS4+Yy2I8p9E + U2aIxMRYDjaEsTd/HPskxx/PNOaCxJCL+YZcKhKU6nO+XI+zFdqcrdbidK0WR+t02F+rzc4qLbaV6wiM + 2CraY1O+Cesy9VmXYcCGTCM2ZhuxOc+EnWU27JHcsa/emb2N49hdN44NJY4sTBdtHmNMW7QZ87NcWVnu + zTLht83x9lRHWtCS7MjiimnsFT5zcGEK65qC6ckcT9VMI+rC9JkXb8XOQndutYfx4dwoPu0L56NmLz6R + GPpprYXAjE/qzPmowZw3G4y5V6MvfF2TC9XqEmdVlLhQPZorUt5r0uWtDhPe67Hmw3kOvDV3LLf6JnFp + IJDT8+M5tCCLnYuK2LSwlqWDzRKr6iRWFTLYkSi5MoSlvb6ibz1YN3+SYAIbFk5m2wo/tq0KEo0byMaV + ERzeU8DlU93cv7qNt26e4v17F/n40Q0+fXyXj16/w41zx9myZrFwyXyK8hJpbS5m4/pFSgP47KlD7Nm5 + gSXzu6mvzKemPJfF89o5eWg7D26c5eGNizy8foEH1y5y/8pF7l2+8ByXLnLn7DmunTjBhcOHpc0e5Ny+ + /UoT+PiOLRzespZjW9exfflcOsrSiQtSGMCaTLIZgdfYkYR4akhb0SMhzID0KCNyE0wpTDWnNNOaylxH + KnNcqch2oyjZlcyocSSEuArXnyClFxkKrRMbLjxkFqXJsyhPCaMiVfqjwgDuTmP/mgou7O/k7qmFvHdj + Hf987wh/fXcbfvwAfv0HPPkZ+F3wfBrovxSrAT+DIcnJFso1xcKEiPr5auLproaL40jszIdia/IStobD + sNZ7CROtIRioD8FYSzESeDSWpppYmutiYaqDpZkOttb6ODno4+qsgC7jxmoJFMasBuNdFNs6Al3GvzCA + XSWoj7UzxsFGR6CFg60Wji/gYKspCUAHZwfp6E56z68ppeKzo526QE2OUxjBz0cDj3VUmMDyGwoopoe2 + V5FyNJPGjsbbTZWQqbrE+Cum4DEn0c+QBG89IelaxLurkzBxDIlur5HoMows55donDD8bwP4rK8Wb8zU + 5+sYI36KN+HPJFP+SjHiqST8p4VGPCnU5ReFASyi/7cCTf4s0eVJhQF/VOvza60BP9eb8GODqYhkUz6U + Tn0n14jDQiY3BI9k0PslmiYPoU6x3q/PMKp8h1Hp9xrF00ZR4K1K1uTRZE0aJfv1aQw0ojnIgLYgQzpC + DegUdIUb0Beqy9IQHdYGqbM7QpOLQljfqrDim2Y7fuq05Y8+K572W/Bnv9z7gBG/DRjyy3wTflMawK6w + zxMO+cLhGYJAOB7KsxNh/LTdi88XjeXNFgvOZj6f8nLP7FGslnteJCJlwHEIfbZDWDx2CGvchrJRxMsu + eY5DXi9x1u/lvw3g1yNG8FmqDj8UmPBrlQ1PGx142qwYCWzOn82m/NkqZZsZPzcZ8c96bb6rU+H7NjV+ + nqfDk9XGsMtW7ste7smep5cc+POaPb9fs+a3y2Y8uWjCswumAnm+M2b8dEKucVyff54x5sdL5vx0w4bf + 7jnx5I1x/PXmeJ6+4cJfjxz5444Fv10z4KdLGvx4ejT/PjmK/yhwYrRcYzQ/y/ZPR1/jn/uG8vmGV/hg + qQ6vD5hwrc2Q4xKkVye+Sk/Y85G6dfKc5X5DKZn+MqX+I6kMVKMiWIeyQG0KpqtSME2FqhmatEgd9UTo + 0B+tTmfUcNqjhtIZPYSuF1Bs98yR7RcmcOfMl+XzGHqj1RiQc+ZGaTEvUp2FEWNYE6vK7gxdzleac18I + 48eDTnwtQfaHxXb8vNqePzY68NcOJ9jvDEcVRrATf+y15NedUu9bpM1uMuIvwbMN+ko83WrK0+3mco4l + T7Zb88sGC35eb8V3y8143K7N/tRhbIgcwmbBvqSXuFysxnvtlvxr8Th+WebCL0vs+c8CC/7Zb8w/enT4 + TOrv/YbXeFw1lHulQ3iz9hU+69Hmn4ut+XntOP6zfpJcexxvtZtyrnAU+5OHcFBwJv9VbtXp8sGgC18t + n8a/1s/kr12JsCcNdibDlkT+WhvDl+3eXBeBtiNsOKsDhrA9bjhnhNi/Od+F7/dIO74l59yPh3sRUipG + Awfx5Lwv/9o3iS83uvLpKle+WuvB9xt8+Xqdr9SxL19s8+Wb3TP4fr+v1L0Pf52WPnF5mpzrI+0ngCef + zISvY+GHVPgpE+nwElSzefZ7Dn/9ksGTn9Lh3xk8/VcGf/6QxZ/fZfPH59n8/EYK316I4N6aSWwuU4xY + G0qR3xAKAqRthIu4nGNLWawDpVHWVEVZ0RRvS2eyPT1JNnTEmdExR5/2Obr0xhkzX4T7knxXVpd7sL0z + lL3z49g+GMOypgAWNgQwvzGUhS2RrJ+Xx55V9ZzaPsjVQyu5dXIjDy7u4Z27x/nwzYu8//Zl3nrrKm+/ + e4d3PnjAB5+8xSdfvMtHn73Lh58KPnlH8NaL8m3Z9zYff/YOH3/+vpQf8OHnH/PhZ5/KeZ89x8cf8/5H + HwreV+LxW4+5dfcW5y6d4cSpoxw/cZjzF07z8NFdPv/0I/79r3/w7x//wb9+/JZ/Kozlf37Md9+8w2cf + 3eOdR2e5eGIdJ/cu5NTu+ZJM+9m5tJEdixvYOFAtz5ktAjqFpc15bBWydmRZIwcGc9nZNFuIk68IQDd2 + JFpyMNGM02nmXBBBf1kE2NVCR26WjedG5UTO5TtyKNmILRLPNoW9wq4oFQ4ppn1O0lYavwdjx3A4XoWj + yRqczDbkRtM43l0ezI/Hcnl6u4mfrtbxweFsrqwJ5/yKQB5sj+XT43l8f7mGf91o5dPz9dzdV8jFLelc + 3JbJrf3FPD5ezadX2vjHvV6+u9vLJ5ebeXy0lPv7Cnj9QDm3thVwYnkqO/qjWNE8k+Xtc1jRl8DKuWks + n5/OikU5bFlfyYlDc3n34UE+f/c8n751gffuHeXWiTVc3jvI9b39PDwo5YZ69rTGsix7isQbZwbm2LMo + YSxrMiewq8SLHXnubJA2tjrK8IXxq6k0f/82gEPVGPQfTfc0iVNTX6Ftyst0+oygx0+F/kBNBgL16A/W + ZyDEgP4wQwbCZXuWIX2zDemSXNkksa4uSIfaYG1qwnSpnm1C5WwjisP1KAiRuCgoDNVRQmEAl8m51VGm + NCRY05bqqBwF3CL3Vx9nRU2M+QsD2JraWAulWVysMH/ldwrk3IJwuUaopkCDwjAN5ciG0kg9qiRfNySY + /W0AtwrZ6pLn7VKMDg0bTV/YSBbOGqM0gLemanFAOQLY8G8D+ESKHmeSdTmVqM2pBE3Jf+oCNaUBfCxR + XWkA74kdzbaoV9k85xW2xg5nd9JoDqaqyPlqnE1T4WLqGC4ljeBavMQ1yRmKqaDfyhzDe3kafFSkwxcV + hnxVbcw3lYZ8UabHxwVavCdc4s0sDR6nq3IvWYWrsSO4EDOc80mjuJipxuU8HS6WKMwIPY4UaHOwQIcj + wivO1NhwudGeq002XK035Xq9EXebjXnYYsTDVgMp9QU6PG7W5V69qvSDEdwTsv6oQZ1HjdpKA/hmmewv + U+FaqSqX8kdxpWAU90SQPKrU406xBleyRgi/eJUrGa9xI2cMN7NHcztHhTcU6wJXmPC43ISHZebcKTLn + XIY+e6NVWCMxem7IMLpCX35hAI+kPVqf7iQL2hVrNMeYUBdpSK3UWV2kCFypo0apq5YYMzoTrWiTuqub + ra8cBVzkN5LSGYopoLVoln3Ns3WV+K8B3Dpbg1Zpv83BY2gJVaFzljr9kjcXxAlHUhjAwo3W5ZizPseM + tVLPy1N1WSj1OhgzhoEYVeZJXS9I0mVuvMIU1mRxsh7L0g1YlWHM6nRDVsvxa9J0WSt8RoF1aVKma7M6 + TUuO0WFNuiYbs3TYmmsg0GdDhibrpT1skbawI12NA3ki9gr1OFkkbUuxHqi0gQtF2pwvVhjAAmkDpyv0 + OSrt4UilEQcV00BLve5VTFVYbEmL/EZm9ChC/F8iXN5jQqwOaYmGZAsnzU0xozDLjuI8RwoKnMjMtiY+ + 2YQ5MbrMidRldrguQQE6+PrpMc3fAL9gC/zDbPEJtMHD2wzPyUbCk/UIGq9Htr89NaGuNAY70jDdihZf + yUN+FrT5mtI6zZwWH3OaBY3eFtROlf7pZSH93ZnOWC96skLoKYqguWA2VdkiUNLDqIqfScWsYEr8plA6 + ZQJN09zp8p1M2yQXqu3MSNUcQcjQIQQOH0Kc7hAqHF5j4TQ9tgQYsXe6Lsd9dDjnpcUFb02u+Wo8N4Al + drwdosWbIdJu/cdw1PNldkx+mS3TNVgbaMACf0OapmpT6a5FzVR92gIt6Qy3YyDCifnhTiz2t2Gl3PtG + T0u2eliywcOC5R5m9Ew0pNhZhTTRDQkT1In11iEqwICIYFMig62IDrEjKXw82dHelKWGUKNYBys+mIzZ + vsQFTibC15UZk63xcBItZPaa4GW8XFXlGqZyjqOcI+81dyKNWYrRYa5050xiRU0Qm1qj2NGVyM7+NA4s + K2Tv8iJ2LCpgw9wcVvQoTOB8pam+tLuCZd2KNT6bWDXQLiK5Q9DKmnmKKaBbWLOwjRXzWljU30B7Qx6F + +dFEzPHCN8BVuf6uYmpm53GmjFVM+yxwdDXF3vmF+Wurg7m1JqYW/4X63zCz1MDGThdH0W5jFQawswkO + TkZynug/O4UJrI6Vveb/MoD1cXZ7PhX02AkKPDeAnccZ4+RkwFj5TYUB7OFmgd9UB2YGuJEa40theghl + OWEUZwWQnzmNrORJJMU4EBdhQXSoGZH+JkT5GRHja0S8tJFEby3SvFXIEa5d4q8pOUeXnigL5kquWCAx + ZEmcJSuT7JVYHGfDPPmuL9KY/jmGzIs2YnG0xIVYPeHUOmxO0GZPko7kAH0u5BlxvdiEWxLTblaYcrnM + SGkAH5d+e0h03gGJ1fuk3JWvJpxjDFuzR7EjaxQ7s8awT7TgkXwtzpQYcE6gWPf7lMTq0wrzV3BK8Z3S + AJbPEg/O1whXqbcQbWHCkTLp+4Kj5UacUuyvNeNElTHHKvUFBpyo0eN4nQGnGgw502rKhU4LLvdI7O+1 + 4lKvJecFZ3pNOd1nzIk+I472STwRHO+Xe5lryo15ljycZ8PjXgsetxnxuF6fR1XSn8q1RDdq8m65Bh+X + qvN5qQZflmjyTYkW35Vp8E2xOl8UjOGz3FF8mj+GL4rG8GWpwgBW49taxcxNanzXoKE0gL8VHfdNnT7f + 1Et+k1z0SZUl7xWLVsnS5XLcaI6Fv8SpyFe5KrlUYQi/U2DBm8U23KsYzwXFFL1xTpR6GyoN4Flupsx0 + d2aWpxtzfDxICPAme1YQRTFhFMWGUxATTGniTCrTIqhOj6QiJZzscG+yQr2oTQyjrySJvtIkGrJnUZoW + RHHaDMoyptOc68f8khmsqPRjXYMvWzv82NEbxLY+hQE8lb4qV1rKnGmudKO53ou2xhm0N4XS2TCbzpoo + uiqj6SuPZaAkhv6cCNpTAqmPmkp5qBvpky1IcjMmVcocH0fy/d0oDZ9KZeQMSiL8iZk6gckWxjjoauOo + GP2ra4C5riFmAjuFATx+IrP8/EmOjCA3KZ6i1ATyk2LJjptNenQoybNmEB04hVAvV6ZPtCPE05H4YE/K + 0mbSVp5Kb10Og40FLGovZkVvOSv6K1nYUcLCLoXBU09PSzk56XGEBPji7e3JrIgw8oqyyS3Ixk/2GRjq + /C8DWBsdXQ0MjXRxcLTBz0/e/wsDOC4mEv8Z05ju60VSgsIALmWwo5bFHdWs7KpiQ3+10gDeNL+KTQsq + 2awwgVc2s21lJ2sWNDLYWkpLZRaV+QlU5MZTnhdHdVESdfIMteUplBUmUJwfS5ECBc9RUpRIZXk6DXX5 + tLeW0dVeRVtLKdVynaL8RAry5H0VJFNemkZtdbbcUzod9UkMtiSwpjeRrX3R7OkMZn+bN8c7p3K2Zwpn + +jw50/3ij94NbsoRNXubprKvzZ+D3bM42B/HwYFk9gyksWMglW396ayVWL2oUdpBaTi5Ue6EuZtLnWrg + qjOS6ZbapE21oT1uMqsKfdlTF8CeWk+2VDqyrtSSpUUmzM0zUZqMNanmpIRrE+I7Eq/JL+Hp8RLBoeok + pFmRWz6e/Gpf0kqCCYrxZJKfJc4eOtiNU8F+7BgcnUcJRghew97xZSUcnIYJXsbF5VWmuo8m2EeuFWpI + mcS/zsKJDJZNpi/PlTbRSFVh2pRMH0n1tFG0zlBlQZgmm2Mktgg/ulEgPC5Hn/uZOryZo8u7+YYSFyz4 + sMKa96vseavKljcrbXlD8LjCjtfLHXhc6sgbxc68rlh+J9GcQ6HabPIZw6LxLzN/3HDmjRvBoIvwQacR + zLN/lQV2r7LQ6mUWmw1jtenLbDcfwRFLFS7baHBPctGbtnq8baPLm2bq3DcezV0rFW47qnFnki43vCVG + S/w/Ks93wF+VoxHCETLMuFpmy7UGhQFsLpzYiJN1Rpyos+BEgy3HG5043OjMrhp71pdZsTDXiL5UfTpT + jejOMBe8MIAzrejMsqAj21JytBGl8RoUC8pSdKnMMqI235S6QuE8CpO3xIbGEntqi2ypyLOgNNuU8lxT + aoosqa+0obnOlu4WR/pbnehvcqS31lZiiw1z5f09N4AdWC78bkWdE2uanFnbNJYV1bYsLTVjbr4+/Vla + DMr7X1D43AReVWPLenmOzU0ubJXjt8k1tzU7sqXZmU0t41jVPInuMlfqCtyED7oJP5S4GTWBsJnj8Q8a + j7fvOKZ6u+LjO5EAf0+Cg7yYPXMa6cmzaajKYrC9gv76Yqoy4ylJjKBe+mVLaTyNhcLncqdTme5OVZLw + lmx31lT5s685gGN1E4Wz2rKvxJRdxUbsLDVme5kJG0tNWF1qw7IKaXMl06jKmErS7PHMCh6Pn/CkadMn + ESaxPCommjlzYpg1M5KZIbOIjYohMy2ditIyGuvrqK8upkT6dnFmOI0FocyrCmFljT/rqrzYVDGRrQrz + t0Deg9TXznQzDmaacirPnKsVDtyR9/qg0ZbXGyx5XGfCuxVGfFpsyNd5enybrcU/5P0qyq9ytPkkX5cP + Cwx5t8CUt0TD3FEYN5nGHBXszjJmY7YZy6Rv9GQbUZ+lT4VoxqJs4d+CjBxj0nJMSJZjknNsXhjAjkoD + OCXPhswiO/IU5q+0z9JyGyqlH9XXSvuQ+2ptsaSt1YJmKRubLWlotFKav4q1gOtr7agTDaCAcmpoBZr+ + lwHcqZgK2oHWHic6epzp7nGhp2cc/d1uDHZNor/Dk3kdASzun8PqpbmsXyWxeVkd69b0cuDAZk6fOfrC + AL6nNH8VUIz6vXH/ITcePFQawLcevvG3+Xvj3uvcvPOIm3dfQLZvCP5rAl8T3L333AA+eeocy5avJjMr + D+9pfhKfnLC2tWOs63jGjZ+A6zg3gZQuboxzdZOYNV6Jca4TGOcyATfZdndyxtvZmkBXKyKFQ6b7WFM9 + 05G2aAf64m2Zn2TN0jRbVue5sLnai52tgWxpC1EawHMrvekunkZrfghNubOpzZhFeWI4JTHhFIYHkTlt + KgkKA9jW/H8MYD0NfPT08Le2JdFnBpVJ2bSXNtNS0UF1cQsFuTWkZ1eRmFVBYs5zpGZVkyZIz36O//8M + 4Nq/DeDclEqKU3KplHxflxxKbYIX1fKctVHGNIiOa0rSpyXVkC5pl135xkq0S1zukNjQVWxGb4UNvVXO + DNZMoL/Gg25BW+U0mspmUlccR0NhCo35KTRlxdCeE05/YRAry3w4XO3O5aaJXGufzLXOyVzqmsyJtvHs + bx7PDsU00LUTWVXtKTplOourAhgoDaC7aAYtEg9asqfTlevL3CIflpVPZVXtZLZ1erJvrid7F0xi32J3 + 9i6ZwpZ5niztdKe/wZ22iim0Vc2gszqc+S1JHNjQyoWDi7hwaBmHtw2yqKdUOROQu4sx4x2NCQ/wJD8j + jubqIsrz0/HxGI+liS7jnKyJiwyVuFVMhfCXiNAZONuaYW0qGneKG7lyTl+7tPWlc9m4fD4rBtvpqCmi + JC2OwqRoyjOTaSwtYH6nYkalHtYu6GTL0lZ2rWhg/8pKDq8u4sSaIi5sKufKthqu72jixvYOji2tZlFZ + tOjksQQ7GzBjvCWJQe7yTkPYojCA60PZm+/K/jTh7xIPrkgsuix1daXIiEsl+pwv1eGs8O2zVZqcqxXd + X6/g9Lrsq9ZiR6WOwIht5WZsKTRlg8SW9YoZy7Iknkrc2SS8YXupFXuqnhvA+5rGsbt2LOuKbVmYplhy + Uo920TULssayWupjRam86wSJI3NEw6c6SG7x4eD8WI4uTmJbWyiL8ifSPMeU9ggjlqfYcqjMg/udoXw6 + dw5f9obyWbMHn0ucUsxe+0WtCZ83CJ9vMuXdRiMe1epys0aTK9WqXKwZo8SFqjFcqlLlZp02r7eY8HaX + Je8O2vHGXCfuz/fg7rKZ3Nucx80dtVzc3cqJnX3s2riAjWv7Wb+8kdWL8lg1P0r0bIDUx1TWzZ/I+gUT + 2LhoMluW+7JlRYBoXH/WLw1j/9Z0Lhxt4c6FtTy+doB375zkowcX+eT1m3z8+Da3L5xg+9rFtNYXSftI + pVty29ZNSzl9Yh/nTh1i367NrFo6j87mKlobylixuIczx3bx8Ob55wbwjUvPy2uXXxjAl7h/5TJ3zl3g + 2olT0l6Pcu7AIS4oTOC9+zi5azvHt2/ixPYN7Fw5l66KTBKCJzHFUQMPuxH4uY1hprdi6Q9DkmYakxlt + Qm6isWgSc8qzrKnJd6JauFl17gTK0idQlDyZnBgP0iO9yJojejhWdHFyJFXpUdRkzaE2a5YghNbiMJa0 + J7JzWQEnt9Vz61g/71xeyfdv7ufJ19fhX+/CL1/Dkx+BXxWLNfKMJ/9jAJcWjRVCb0dKgojsCBNC/fXx + dtdgotNwXK2H4mw6FHuDlzDTHIKB2hAM1RUjgV/FSG80xgZqmBhqYmaiiY2lDva2uox10BPo4CwP7uyo + jouzmnKUrouTlkAXVxH/zw1gE5ztjXEUoqcwgR3ttP4PODvoPoe9jtIMVsDRXht7G3UlHGwFdhoCVTle + XY6V31PATgUn21Fy3kjGO41iyjhV/D20iZhuTHygdFY/UxJEYMZP0SNhshZJ7qokTxhJ0vhXyXYdSv2E + 4co1gP9rAD8O1ePLOUb8O8aY3+NN+CPRkCdpBvyZZ8gfQhqUBnCeOn8U6/BXhQHPakx5IsL3d+ksvzaZ + 868Gc76oMuONfAMuJmmxPXQES6a9TMekIdROHEKN50tCwl+l0vc1KvxGUeqnRqGvBjlTVcn1VKHCR4u6 + Gbo0+mvR7K9NW5A27cG6dIbq0BesyaIAVVZMH8G20FGcSdDkrTIzvm624acua/7os+TpoAV/DpoIjPl1 + riG/LFQYwDY83TruuQG835un+7x5tneabPvx177p/LDWjY/6bZQjPc+lj+Z43Cj2zhzBep+XWCb3PN95 + CIP2Q1jmOoR1k4axxX0oe72GcnTaMM7NeJmrgcO4E/aK0gD+JFmbf+Qa83O5lbwXW54Kwfmr0Yw/mwQt + ZvzVZsFvzcb8u16Hf9Sp8X2LOr/M0+PZGlPY7QDHHHl21om/rjnzx20nfr1tyy83LHlyzZxnV83566I5 + v5815d8nDPn+uD4/nDXhx6uW/HTbnt8ejuXJ2xP4692JPHvbjWdvuvLkvmIKaGN+uaTFz+dV+OnMKCV+ + Pj2KX86M4ddzo/jtzEh+Pj6cH/aM4suNury/3JjX55lyvdOAvUWjWZYwjJ6Il2gNH0ZN0EsipF6idMZw + KgLGUB6oSZG/1J/PaHK8RlHmq0JjiCa9kToMxEkZP5K+xFeYlzqMRRkvs1AwL20YcxNeoj/6JbpmvURv + xCsMRI+hP0ZhAAuiNBiMVGHRHFXWJWqwP8eA81Xm3G2x4sN+B76ea88Pi+z5aYUtf6y346+t9jzbbQ8H + HHm6347fdpryy1ZDftsk7VbwVGEAb5S2qsBWE55ul3rYYaE0gH/fZMlvG235YaUlb3XqcTjjVbZED2Gr + 4EDKy9yq0uGTHlv+s3Q8vyxx5qcFtvxrrjnf9xjzRasW79WN5o2KYdwtGsK1vCHcLR3Ke20afDvfmn+v + duPf6z3l2h580OsoJF2Hw2kvczh1KKdyR3Kz1ogP57rzzcog/rMpmmd7MmBPJmxJ4smqaH5bGM7njR5c + Tzdld9irbAwawv6kEdyoN+fTZe78uj8YLkXBtQhBKFwPlM9+/HlyKv/aM4FvNrvy9UY3vt/mzS8HQvn1 + yGx+Oh7Bv0/P5j9nZvPL+TCeXAySc+S86/5wcwZ/Pgjkz3fC4ZNo+DoZfkgTyH39mM7Tf6fz5z8T+fP7 + BP76Lpkn3yTx+1ep/P5ZOr+8n8oPd+P44EggFxePZWWBOjWhQyjwG0K+YgrcMAn+kQoD2ImyGDuqYqyV + Ix2b4y1pjxUBGmNCV5QBPTGGzE0yY1GWPYvzxrKk2I21DdPZ0BHOytYQ5tX6Mq/enwUt4Sxsi2J5Txob + 5hWxd2UThzd0c3TrIKd2LeHy8fXcuLCLm5Isr18/wu2757jz4DIP3rjF47fvPseb93j0xl0evnmLh2/c + 5sHjWzx687Zy++HjO4J7cvxD+f5N+e4twds8evyGfP+6bD/k/qMHIghuckES5tGTRzh4ZB/7DuzmyNGD + XL4sifXhPT756H0++/QDPvnsPcE7fPLpYz54/zZvvn6eu9cPcGzvIvZv6mTv2hZ2Lq9nrWItxO4iedZ8 + BiuS6S9LYGljNlv7K9i/oJJNjTGsLvZldfZE1qU6sDXejH3xxpxINuVsmoWIOBshYQ5cL3blauk4zuXZ + cyRZhOqcMeyQ+LQnagxHkjQ4lqTJ4QQVDseN4ViiKidSFVM1GnOr2Y13lwbz/YEM/rhczX8uVPLBgUxu + rJ3FtdUhvL49ho8PZ/L12VK+uVDNW4cLubQpmeMrozgubfbU+nghkOk8PFzE++eq+ORSHW8eL+Hunixu + 78zi5tZMLqxJ5tCCGLb2zGJ1SxjLW2extCOSxV0xzO2aw2B3DMsWZLBvewtv3tvNp++c5qM3TvH27YPc + PLmGS3sGubKzh1u7uji/pJTtNbNFGE1mbpQjA7NtWBjrwNJEJ9amuLAuSYhglClLZ2qxJFxNoM6ymZos + naXBkhcG8IDEsR7fkbRPfZW2Ka/S4TOSbn81eoO06A/Wk7xjQK+gJ8SQnlADusP0leZve7g+TcE61AXq + UBukS3WILlWzjJQGcOksA0pmKqD/f0Cxv1y+V0wB3JJsR2uKPY2JNsrPVXKfCtTFWiqN4DI5VmH85kvu + ywvRfo5gdfKDJVcGqci2KkXyXGVz9KmJNaYpwVxpALe9MICV0wO/MIAXzR7D6hhVNqdosC9T4pwQbIUB + fFxy+4kUfU4n63EqSYcTiVrSHqR9JKpzPEkBDQ5L+9gTO4qtSgP4VbbGjWRPsioH0+T7NDVOpYzhbPIo + LiS8xpX44dxMfI0HirWAM0fzrnCFD4u0+bzcgC+rjPmyXJ9PSrR5P1edd7LUeDNDjdfTVLibOIqr0a9y + fs4rnI0fwbm0MZwXrnGuUJeThdrKEaX7cjU4WKTPqSpp5/U2XG2w5EqtMdfrDLjbZMjDVkMetxnwuFVf + Sl3eaNXlYYM6t6sUawCr8kajNo8adblXq8HNClWul6lwuXAUpzOHcTbzZW4UqnK3WIMb+aO5mPYK5yVn + XckYzrWsEVzPfI1bOaN5T4SBYmqgNyvNuF9iypUsfU6maLM3Vo0NkaNZEP6qtI9XaQ15hSZ5762SB9sk + ptUrpuuerUfVTB2BFjWztGmI0KNZYl57rDm9yTZ0J1rRFCntR/JnqSK3BqgoDeCW2dLOZunQKOe2SNtt + FjSFq0qeHUNj0GhaglXoUBjAcxRmro7SAF6lNIAtRFCZsTrdgKXCS+bHqdIn/X9Q7nW+1PWiFAMWpOix + KEmPxclyjAjulXLecwNYTzkV9NpUXdal6bFOttdl6LI+Uz5n64tY02VzngHbCozYKlxvQ6aWHKfCZqm3 + HRnq7M/T4nCBHscKpE0VaHEmX1u5VujZQuGZCgO4VOq1XFdp9BypMuKQcMYDNdbsr3dgbZkV7VnS5oWH + zQkbJjx9FOmJeuSnm1Am4qEi15aaYmfqyl0pL3cmv8iWtEwTEuQ5YmK0iZytRXCQJn4ztPGeroW3vyHe + AaZ4+VswZZoZUz0NmTZRn9CJBuQEOlAV5kJdsB21081pnG5Kq585Tb6mNPqYUu+lGCVrQvUUU8omG1Eo + KJ4mAiZ8HLXRnpSLaMmLmER6uBspQa6k+Iwn2X0sKWOtSLMzocjBlIZxtrS5iDC1MSJfdMSc4UMIfXUI + idrChxVrBPpos9FPh+1T1TgwRY3jwsdPe2lwVWEAC/99I1Sbt4X7viF9/4rPcPYLJ93qPoyt0zVZF2LM + gkATmrx0KZ0kscBDh3o/M1qDbaTv20n8smPBdEtWepqz0cOK7R7WbPa0YpWHOQOTDCmyGU6S1VCibF9m + lvOrhIkeCJk4itBJasx01yFqihmJ053IDJpEVqgnkZ6OBIyzZIqdAW6WmjibqeBgMho7o1elHMYk+xGE + e+uTOcfuuQEsorspdzzNWS60ZY1jfqkPK+tCWd8yhy09SRxcUcCB1SWSv4vZtriAlb1ZLOvMZmlXIUu6 + SqWsYnl3HSt6m1nZ38KK/iZWDsj2vCYRz81KA3jpQANdTfkU58cwZ44P018YwAoT1sHF+G/YjTXCWvSa + ha02plaamFiqY2yugbGZlGZqGJmqYmSmiomFOlZ2utg7G+HsaoqDsyl2ouEUxrGVva5AG2tHbWyctOWa + eti7PjeAx04weWEAm+H6/zKAJygM4AmWBPiMJTJkEhmJMyjJDqOyQDHFXDBlBf6U5HqRkzqezAQH0qJs + SJkpbSjMnMxQC3JCTMgP0qMkRLHUgPR/iSVdotPmS+xYFG/O0lhTVsZZsCbJjlWST5YopoSOMmMwyph5 + 0cYskvywNNaI1fH6rI/TZUuCFnsSNTmarsO5HD2uFRpxq0zyf4XZ3wbw0UItibnq7MlVY5dge54a23LH + sE3i4PbsMezMUmVvjrr0cx1OlRpKn34+clgRr08IThZIma/FKen7p3J1ZL8e52osXhjAphwuM+RgiQGH + FFP8y+cToiWPSY5Q/FPIUYkLx6r1OVpjwNFaiSMNBpwU3XS23ZyzXc9xutuck8LDT/ZILusz4kifPocV + JnC/3MtcM67Pt+LePBse9przqM1I4r+B8o85HzcZ80mjIZ/IdT+v0OLLMk2+LNHgmxJNvi3T4OtiNT4r + GMPHOaP4KHc0nxaO4fNSVb6pEl5fpzB9FeavHCvbX9Vq81WNPl/WGvJptTHvFBtzX2LhlYSRnJr9stIA + Pi057VqyGvcyJS8Jx3qQa87NIidOFU5kkXDioql6SgM4UtrM7MnSPqZMIHaaJ0kBXmTP9Kc0YSblibMp + SwqnOi2Susxo6rOiqEmbTU64N3mzfKlPmUlXfiwtOXNkfwjlGUFUZQdSl+tPV1EASysDWVvrz6ZmP3Z2 + +7NnIISdA0GsaPZ8YQA70VLtRmujN50tAXQLJ+tvjaK/KYF5DUksrkthaXWy8PFY5maG0RnrS0PoJHIn + WZAxzog8dwtKvB2pmOFGbdhUGiNnUBsRQIrXJLzNjXHW0sBRTw9rHX0sdAwwF9iZWuAzwZ2IgEDSoqMo + SE2iLDOFIinzEqPJjA0nZbY/MUFTlQbwjIl2hE11JjF0qjzfbDoq05+PAG4uZklHGav7Klk1WP1iOuhK + VsxtYqC9ivzMBMKC/ZjmO5WIqJkUluZRUJyHf5AfBka6qKqPQltXHX3D/zGA7R2tmT7di6wMxRTQLwxg + Px/8pnuTkhRLc10587saJD7Vsrqnhk2DtWyZX8vG+dVKA3jLkjp2rGpl+6ouVs1toKe+kJqiFHnGORSl + R0nfj5G+n0iNYgRvSTKl+fEU5sYooTCBC/PjKJLvy0tSqavKo6WxlLbmCupqCigqTCUnK5bszFi5twQK + C5KoKEujpiKF5uoEuutiWNQcxZq2mWxrC2BvszcHWzw52urOsQ53TnZM5nDLJPbUubGjboLAkx3109gj + +mpv5xz2dsWxqzuJ7d2JbOqIZ2VTJPMqQ+nI9yc/YgKz3c3xttJmiqEq4fYG5E23pzvOnbUFXhxtnsGJ + tilyfRf2NdqxsdaMZRJP+qTdN6QZkym8e5bfa/h6DsFn6lBmztIkJdOanHIXciqnkpQ/g8A5k5nsZ4Wb + lwEe3oZM9TLCa6oBPlP0mTpZi0njRzPW6RWcHYfi5DCUcc7D8HAbjr/nGJLDTalULCtU7MHC8qksKJrE + gGKWnWhTqgPVqfMTrhSowULhX1vijTiVZ8GNYkvu5BtyP0eXR7m6vFVgwPvlFrxXbc07tbY8kvJhlQ0P + KqWskLJMUGzHg0J77oq+Oh9vwt5gDdZ6j2bRxNdYKPlz4cQxzJf7XOQ6mqXOo1jhOIpVdiNZZ/kam82G + s8d0BMfMRnHFXJV7kovestbmPRtd3rXS4rHse2irzn1nDe5M1OGmtx6Xpulw3Ec4t78KRyO0OJdhwtVy + G6412HKhXmJhjSEnJQadrFOMArbmRKMDhxud2FVjx/pSKxbmGNKfpk+31IHCAO5RmL8KpFvSKWV7pgVN + acI9hReWJ4uOyRCNkmemnN65vsiKOnlHCgO4Tp67usCa0hwzijKNKc0VzSLf11fa0lJvR0ejPV3y2931 + 9vRU29Fbbas0gOdX2bGoSnRZtT3LahxZUe/ESsGSCmupI2P6c/XpydSmL0ubeVIXClN4RZU1a+sd2SDY + KNfbXG+rxEb5nfWNziyvV/yDmWK9UGsyEuyIEc6hWPrDd4Yd7sJxFP/8ZedgJH1Z8rGrNRMm2DPN25XI + WdMoyYulozaPtrIM5YwKRbHBElPnCF+ZRV1OAOWp7hJ3x1IZayfvx4WVpVPZVefNoQpXDsq72JNvxPZc + PTbk6LAmR5tVkt+W5JnQm+lIXZIrGTNtUSyJMXmcrrRT4Qcuwj29J+IfGIC/fyDTffzw9fJlVlg46ckp + lBYVSx8upTAvTWlQ5yQFUJ0dwLyqUOFL/qyt9GRj6Xi2FjqxQ9rcjkxz9qSZcCzLlAsFFtypcpT85sw7 + zfa832TNh5JjP6s05Yt8Pb4RLv1dugbfp0vOytTgC7nfj/J0eV94+1uFJjwqMBWNIzk/zZD9GcZsyzZh + rdTvEqnb7lwjeR8GwrkNhZ8I/803ITfflExpG+m5FqQJF0/JtSc597kBnJxnRWaRDXnSR4oFZVK/1VVW + NNZZS26RNtZoTKOgoVF0br0ZtbXm1NRYUVNtI6UCwu2lzdZLHSuhWCe4xZ6mdkea251o6nCkpdOR9k4n + Ojud6Wp3pqfdhb7WcfQ0T6Kv2YfBtlAW9CeyeF4ui+eXs3plJ3v3rufUmf+OAH5uACvW/L188zYXbzxf + E/jc1eucu3KTM5duPMdF+XzxBhev3ubKzftcv6WYEvrFaOAXJvCt24+4fuMeZ85eZP2GLVRU1TIrMorJ + nlMY5+aGu4cnHlOmKj8r4DFZPk+egrv7ZCUU257unkyVbR+38QS6OTJrkgPxnrbk+zvQGOVCT6Iz81Ps + WZRqw7J0W9YVjmObtMWdrQFsaQ9hTXOA5Gc/6WOB9JXPorMkisas2VQJJyiNC6dwVhAZkvsSJrgQZWeh + NIBDDDTw1xeNZGSoNIBjPH0oi82gvaSZtqouGio6Jf/Uk5FbLfVaQWLuCwP4hfH7twGsGBEseG7yKsrn + SHuB/9MAVkwB3UB2cgN5qWUUp2RRnRJLfXIQDQlTqI+R5xWu2hynT1uKEe2i97rzzIXXmCjRXqAwgI3o + LjahT9pVf5UTgzVuDNS4S5zxED7goxy131QcSWthvByfSFduFAOFs1hSHszmKl9O1U7iWtN4rrdO5HrH + JK50uXOqY5zkx3HKaaA3109iQ90U1tX5sqpW3muVP/PK/ektmkFf4QzmF09nedk01lV7sb7OXfLrRPYN + TGTP3HHsXziR/Us82TbPkxWdkxlsmCT35Em7wgCuCWN+ayKHN7dz5egyLh1dwZEdc1nUW0JytC+TRGe4 + jTUlIsSH4pwkWutKlev9Tp86ERtzAya42JEYPVN4RxnVZXlEzQrE1dESO0tD/LwnUZCdxEBnA+uXzmXz + yoWsmtdJZ20x5cJ9FOsAV+Wk0VZZwrKBLjYsGWTL8l52rupg35om0V/PDeCTa4q4sqWSGzsbuL27jTu7 + ujixtFq4YxyFoW5ECteLmGJPzkwPevND2d4cw8HaIPbmurA/1ZQzLwzgK/lSKgzgYsPnBnCZFmcrNYX7 + a3FROPiZBuHpdbrsqdFjd40JOyst2FpirjR81+cqzN8XBrDU+TbJXbur7JUG8P5mV3bWOrGuWPKZxKqu + aE2lCbwoy5G1ZR4So93pSrKmWXJ9T4a98F0vDs2L4sSSePZ2h7O6dDI98RYMxJixXs45WTOV1zuD+GLu + bL7pkVLq/4taa+H0pgJjvmww4fMWMz5qNuFNuee7tVpcrVbh0t8GsCoXK9W5WqXNfYlnb3RY8WafNW/M + d+KNZd68vSmWD4/U8M7JLh6enseNkys4dWgth/eu5OCOAfZsrmXb6jQ2L5vJxsW+bFjowcZF7sIdp7Bp + mS8bl80QjTudNQuC2LkmjlP7qrl2ahH3L2/lrZsHeP/uKT56eJmPH1+TfSfYvWkJva3lNFRmM6+3nj07 + VnP21AEunj3KkQO72bx+JQsHOpjb3cjG1fO5eHo/D29e4NHNi7x+47ISD69f5sHVSwIp/18G8PlDh7l8 + +IjSBFaMAj61cysnd25g9+p5kutzSAqdjKeDOp6OIwlyVydqhgFJwsfSI8zIiTOjINmU4nSFASzxvsCJ + 2gJXavMnUJPnIdvTqckNoCIrnMrMOVQLv61TjGQuSqa9KIGWgjk05YfRVhLCotZY4diZHFpXwrUD7bx5 + fgnfPNrJH59fhH++BT9/Dn9+D88Uo4D/4JngbwO4VchuXbkbJTmO5KbYkDjHjNkB+gR4quI99jUm2byC + i8kQrLSHYKz+wgDWegl97eEY6IzEQFcFYwNVrEw1sbXUxtFWRzmK195eXaCKo4OKQBUnpSGsLURVn7GO + hko4CRlxstfH0U4XBzutv6Ewev82fOVadraaf8PWWk0JOxsF1GWfikAVezs1HBSlzWjsrEfIea8x1mEE + k1xU8J2kRfg0Y2L9rUjwsyDey5jEqYYkeuqSPFmdlEmjBa+R4/YydUJY509RZYuXYmo5xVpjenw2y4h/ + zjHilxgjfpVg/HuyHr9n6/Nbnh6/5mrzq4j7J+WGPKsxgwZL5SjXP1us+L3Vhn/K54/LTbmZrsWR2SNZ + M20og5Nfomn8EKrcBFNepsr3Ncp9R4lYVKEsQJOSGZrk+6hT6KVChbcKNdNUaZg2hobpY2ieoUqbvzqd + Aer0yfHzfIazaMpQNs4YxvHo0bxZYsw3Ldb81C330G/B07nmPJlrwp9zTfl1njG/LDLjt5V2/LV5HOz1 + FEzhr12egik83TmV37dM5pslDnzQZcajGl0uZ6tyJlmVI1Gj2RH4KqsnD2GJ6xAWOg1hldz/pskvs3PK + MPZPk9+f/jLn/YdxLWgod8Nf5XHECD5M0OCbbEP+XWLBH7U2PGtQGMAWSgP4SbM5T1st+b3ZmJ/qdPi+ + Vp1/Nmvw61x9WGMh9+YMp1x5esmFJ7fH88cDV3556MjP92z58441z25a8eSyBb+eM+XHk4Z8f8KAf100 + 4z83bfn5vjO/v+HGX+9N5tmHHvDBZHh3Ak9fd+DJHQt+vyp1d0mdX8+P+Ru/XVDhj8uqPLmkyp9nVfnt + uCY/7tHn600mfLjSlMcLjDnfpMmuglEsT3mV/piXaZ31MpX+ChN4GGX+IygVQZLnO4YMr5Gkew6nyGck + 9cFSV1HazE/WYUGGGktzx7CuVFUSsDqbajRYX67CyryRLEl7jb7IofTPeUWC8ijlyCSFAdwfpcbgHFWW + xGmyIVWXA/nGnKsy43azJR/1O/LNXEd+WOTAf5bb8ttqeTcbbXm63Y5nu235a7cVv22TtrtZn1826PLH + Rj2ebTaELUZKPNtmzF/bTJUG8F/bpc1stebJVgd+XC1ir9tQCPUIdsQOZUfcSxzJGM79On2+6LPj34td + +PcCe34ctOb7fnO+6TDk00Yt3qkew6PSl7mVN4QrWYLcITyqVeGTXgu+XzqBf6315odVPnw6dyK3ak04 + nj2KI+nDpRzDtRpTPp7vzT9Wz+SXLYmwLxd2Z/F0fTy/Lgjnx64ZfFo1kRvJxuwNfZWtwUM4kjiC+w0W + fLtC2vDBMDg9k2dnQ3h2zl8wnb9OevH7IXd+3DWe77a68I8dk/jxwHT+ODOLp1fieHIriT/vJvL77Vj+ + uBXB0+vhcD1EOXKYW0E8uRvCn4/CePpuFHycwLMvknn6ZQrPvkvl6Xcp/PF1HH9+GcuTLxL487MEfv84 + md/eT+WXN1P47kY0j3b5cKTfhvk5YygPGULejKHkBqqRG2pCYYQtpTFOVMQ5UhVnoxzlWBdlojQ92qMN + 6Yk1Yl6SOYvSrVmS7cDCXGcWFoxjZY03KxuFiFVPo7fCi/66GSxsnc3ijliWdiazvCuLjXPL2Lygms2L + 69i2ooX9mwc4umcZx4+s48SJrZy/dIhL109y7fZ5bt698AKXuH7nouC8cv+1W+ekFNw6L2Rfvrt1RT4/ + XzPm+m0RAErcFtxU4urNG5y7fJ5jp4+z78h+9uzbzY5d29i5ewdHjx3m4qUL3L9/Rzka+MGj2zx8/abg + Kvfun+H61QOcO7lBSEAP21bWsWlxOesHClnZnsmqtmxWNGUxryJJiRWNmWzrLWZ3fz4rhOAuzvJgWaqL + 8g+9G2OFQMUaSLsw5rTCBE614lKWHVfznblcOJZzOTYcEzK9P06dfTFj2B8zmqNJ6hxL1uBEsppyfdeT + KeqcydTlfKFiKt0JvLs4kG93JfPLmVL+faaMD/emcm/9bO6sC+fhpgje2Z3ABwczeO9QDje3JHFkSTg7 + B/zZocCgHweXhHB2fRQ3d6XwxrEC7u5L58b2ZK5vTeHC6liOLYpkT38YmzuDWdMayrKWUBa1hDG3JZzu + piDa6oPobYtk48oSbl9ay3sPD/L2vQM8uLRN+d+Txza0cGRlDaeWV3CwO5U1+ULMY12YG2HHQLgF8yOs + WTjHmsVzrFgm5GNxuJDEUA0Wh6gpsSREnUVhqkosCJGYEzCG3umj6fB+jTav1+jwHU2X5JueIC16Q/Sk + 1KcrWAinoDPEkPZQPdrD9GgO0aUxSPuFAaxHpeTO8jB95RTQ5REmVESYKkfx/m8ozF+FCayY3lkx7XNj + go2yrJqjONZICYX5q/heMYo4L0SL7CANJbLknrICVaUcTeYL5IWqUTxbhwrpP7VxinW1zf42gLtma9Ed + rvK3AbwqSoVNUve703U4nGPEUcUo4HRDTqQYKKeBPpmky/EkLY4qjIEXbUSBQ/+HATycrYo12ZPUOJCq + zpEUFY4ljeRkwgjOxQ3nctxr3JQY9SB1NI+zxvxfBvCnpXp8UKDJ25Jn38xQ4Y10VR6ljuFO/AiuRr3C + 2YihnJQ8cyZ5BKezJBfny70I9mWrsTtThf352pyoNFGue3alzuJvA/hekwGvtxrxVocRb3cYKPGO4I0m + bR7UqPJ6gyZvNevzepOexHRNblSqcLVMiHz+a5xMH8KpNEXsHsmtgjFcl9x0Oes1wXBu5Izkdu5owSju + FarwUaOZ8o8rj8uNuKVY6yZNU96fFoclT+0WLI8aQ1/4cDrChtMSNormmWrUhmlQGaqpNHYrQmRbPleH + a9ComNJ5jj4dUmeKNdD7kqyk7oypC9emSnJoZZDwoDBtmmfp0ThTi4ZwLZrC1GmQOq8PGUN94EgaAkfR + EjSGzpnqDERpsShOl2WJhqxOM2ZdtjlrM41ZIXW7MF5T8qvc25zRfxvAS+SYpZkmLE03ZkmqEUskTiim + jl6VZvDcAE7TZ42Ua6VUTM20PlNfhJkg11DEmj5bC4zYVmgspaEIKi05ToWNUu/bJOfvzdXkUIEuh/Kk + /mT7ZI4mZ3I1OFMgsaZIg9PFUo+l2hyvNOBotTGHq005VGPFwQbFlIXWdOXpUpw0mqTIV0mNVaUoXfpF + riXNxc60lLvSWTeBzqZJNNaPo7zSkbx8czLlWZOT9IgW7hEifXyG8Ebv6SJIfLWZ7KuL53Qjpvia4O1t + jJ+nIeGeRuQEO1A5cyzVITZUTTelfrrkoxlmwj3NqJ9mQvVUE6rkuDIPhfmrT467Able5hQFOFAcOlb6 + pSNJvtbETLVkjrsZc1xMiXIwId5Sn2Qz4bUWUmdOZnS7SN3aGVJtqk66+svEjh5Cpv4QGpxeY6GXJmu8 + 1VkrnHzrpBHsdR/JceHjl/00uR+sozSA35E48EagOuc9h7F3whB2TH6F3YF6bJllydJQC1p9jSj30KfE + Q4dKHyNpG1a0hNjSFWjL3GmKEb/mbJxsrTSAt3pYsWayGXMnGlBm9SppZkOINR9CpOUQZtkOIczuJcLt + X2G24xji3PRJcrckdaojyV5OBIiG8ZDnctYbhbX2q1jqvIKVwXBsjV7FzngY461fwX+SBklhlhSnuNBQ + MFGEmxsteeNoyXalp9BDctp0ltaHsrYzmj1Ls9m3qpB9a4rZs7KUVb0ZLO3IYElnrqCIJR2lkuOrlEbL + 8p56loqwXd7XwLIBKQcbWT63SbYb6GkupLwgjpgoX/xmjGOSp7Vy+md7JyPsRHvZOhli42iAheg1M2uN + 5+avhRpGZuoYmqopoW+iioGpKsbm6lja6mHnZIyji1zD2QwbB2OBgVxDHxsnPeXI3/+O/nUcZ6A0gJ+b + wM8N4HET/m8DePIES/x9nIkImUR64gyKc0KpKp5JTWk49RWhAhHABV6UZE2kSN5dQbwjxTG2lEXZUDnH + ktpIY5qi9OmM1WcwwZRFSWYsF760MsGMNYJ1CRZsSLKRbcl7McKjokxZGGPMYskLywQr4oxZm2DAxgRd + tko82J0o8TtVk9OZirVxdblRYsDNcmMulz03cg9LnN4jcXpnlgrbslXYkqOAYgSwwgRWYWeOop9LfpB+ + fkJxTpkRp4r1OFEkeeSFCXy8QOc58gXy3TmJ22cFSgNYYujeIj32FxtwuELyUZWJMhYo/iHkSJXEBcHh + Kj0OVumwv1KLAzU6HG004FirMSdahUt3SNllxIluY472G3G4z5BDvcKFZPuM6MCr8625PdeKu12m3GuW + /NCoz4etZnzZacEXbWZ80WjEV9W6fFWupTSAvyrV5Jsy2S5W5xPJA+8LV/8gZzQfK0YDl6nxdbUm39Vr + 8W3Dc3xdq8GX1ZLb5BqfVcm1y+Q3cnW4ofiHqKhhHAkdwlHhwGciX5Z9atzN0OVBhj630gy5kGXNwayx + 9IWakeuuSbSrptIAjnB3Zs6UCcT7TibJfwqZYb6UJcykOiWSmtTZNGZH05QdS3NOLPUZkeTO9KYwcjr1 + qTNpzphNXVoYlalB1OSG0lgUSltxEP1lgayoUazZFsC2Vn/29Aaxf14Ye+YGs6rFg76qsUoDuLVaYmrz + NHo6Quhvj2B+ZxyLOlNZ3pbJmuZsNjRms0746Kq8SGl7gfTMnELZJEsKXYTbTLSizsuRFr8Jkvu86J4z + g/bIQPJ8JjPDXPqFmgoOGprY6ehhrWuApa4h9mbm+Ll7EB0STGZcLMWZqVTlZlAmZVFqHLmJEaTJNWJD + vAj3GUeAux0zvV1IDvdWTj/fVZ3JYFMBC1pLWNZZzpqBatbNVcSJCpb31yiniZ/fXUNxXhKzw/3x9/cm + Oi6S4ooiisoLCQoNwNBYD1WN0WjraaBvpIOOnub/VwM4YMY0MlMTaG+sYmFvkzImreuvZ8u8erYvbGDL + wlq2Lq5h54pm9m3o5cDmeaxb2EZXbQHlOQnKZypKi6EiP4m6UsX6vxnKsqIwiZL8eEoK4ilVjAYuTBQk + UV6cRl1lHk11JbQ0llFdlU9eXjKZGXGCWLKz4smXa5WXplJdnkJ9eRytFZH0VoWxqDaAjY0z2FE/lR1S + t7tqXDnQ6MaxtskcanZnd+0EdtROZHutB1uqp7K9fgY7m8PZ0RLB9tYotgjWNc5maXUwfYW+0r6mUjhr + HNGS5wLtdPGX3BY3zoTyACcGEiaxocCTk60+nOvy4GzPOE51O7Kvw4qNdSbMLzSkVThEboQaUf7D8fd6 + Cb9pw4ico0VathU5pc5klE4iIduLwIjxTJlhgZfk6vBweyLDHZkTZk90mAORgZYEeesz1W007mNfxs1h + CBMdh+A5dhj+kjczZplLHxjHYKkXy6qmsaxkKotzxjOQZEdLuD7NQZr0hAj3idBjm+ilM0XW3Cq34W6x + MfcK9HkgnO71IgPeqrTgzVprHtfLd7VW3BFucqvSkjvlltxWrJdaKLEl35ob2bacijVmm2jc5VOFZ3uO + ZpGHikB0hrs6KydKXndTY5OrGtuc1dhlN4Z9FqM4ZDKSU0bCeY3H8MBCnbflXX5orcOHdnq8Y6PJYwdN + HrlocXeSNre8dZRLQpzwUeHQjFEcjdDkXIYx1yoUBrANFxss/scArjf5exroo02O7Km1Z2OZpbwDxVIk + BvQI5+tKM6U33UJKczpTzWkTtMi+BuF/NckGVKUaUifcsaHQinp5P3X/RbE1NYWSi3ItKMwwokC0Q3Gu + aJVihQFsR3OdPS11drQKOmqEe1TZ0iMYqLBjXqUtCyvtWSSfF1fbs6TWgWU1Diwos2JQ+GNPti6dGVp0 + ZWoxkKvPwmJTlpVbsarGntW1dqyttWG91MEGgaJcWy/XqHGkRt5DboIJydHmzJ5pTmCABZ5eZji56GFm + qYaBkeR4Ey0shI/Z2hjj5mpJoJ8buWkSL8vTaJS+VhQXSFHMDFpyZtFWGEZjri+VyW6UxztQE29Db+ZY + 1pZ7slf60f4yZ/YVmEvuM2CLaOY1GZqszNRkWbam0mTvTLGhPNqOuBmGeDqPws78VUyNR2Ahdes6wZGp + PlOZOtULj0meTJ40mfCQULIzMqkqr6CspFg5vXxsZAApUdMoT/dTGsCr6gNYU+HO+uKxbM93ZHeeHXuz + LDiYacbpHDOuyft/VOvEu01OfNBkz8dS/5/XWfJ1hSmfy/v8KlWDb5PV+VbKrzPU+SxH2lq+Lu8ViD4q + NOG2tI1L0jaOSb3vFA69Ic+UlflmLMgzobvAhEZBtfD8Cjm2rNCMIoGCb2fnWZKeZ0Pq3wawHcmyL1Pu + J6/MmpJyayqqrKmVftTcaENbkyUN9QbU1elTWydcuNqIykrRvRVmVEjfqpRjq2vsqJY2W1fvILCnXtpx + fZMdDa2ONCrQ5kRTuwOt7Y60tTnS0exIl6C70Zmu+vECD8F0uiWOdbbE0d+Tx7KlLezZs045Avj6zRv/ + hwF8/up1jp+7wIFjJ9mx7wBbdu1n8859bN5xQIltuw+x++BxDp88z4lzV7l45RZXb9zjv2sD37h5nytX + 73D2/GW279xLZ3cvGZnZBIeG4T1tGtNnzMAvIIDp/v5K+PnJZ8H06dOVmDF9hmA6gb7TCPHyYPaU8cR5 + uZI23Yny8LF0JI5nMM2FxZnOLM2wY3mmvbQDN3Y2TJM47c/mtiDWtQaxsjmIFU2zWNoUx7yaeNokR9ek + zZI2HE7B7EDSp3v+bQDPNNUj2FAdfwNNAsyMCLCxIXLSFIrmpNBW0kxnbS+tgrKSJjLzqqRuy0nKE+RW + kppTRXp25d9IzVKMCv6/kZ75Ally3AtkZlaTmV5LTmoN+WnFyvV/a1LnUJ8cSFOCJw0xjjTFmtCWYESn + xKauTHN68iykDZopp35WmL//2wAerFaMAJb3Uz2JgSpPeiq86SwNol04dVdhFL0FMcwrimJZ2WzW14ay + T9rF+bqJEjNduN48nmttblzpnMiZzvEcaXVhX5MbOxrc2dY4hS2NvpI7A1nTEMjyukAWVfizRLCiYgZr + K6exuWYKm+Va25td2dPjyu4+iQvzxnNgsSc75k9hVafoHLlWZ9UUOqr9Jf+HMb89kaPburhxchXXT63h + xJ4FLO4rIyVmOu7jzHETrTEnXPhefgodDeXUlOQQMM0DBytj+d6B1PhIWpuqqK0qImZOKONdbHGwNSVA + 6rYkP415PU2sWdTPhmXzWD7QRntVAVU5yVRkJlJbkCn3UMaq+T1sWTGXHasH2Le2i4Nrmzi0poIjKws4 + ubqAK5sruLmjjju7Wrizs4PTy2tYVZtIRaQnydPkHvxdJb5NZUGx8MeWaA7W+LM3Zyz7UiQWZZmLjlCM + ADbnisSKS0VGnC/VUxrA56q0uFAneazZiIvNxhxvNORgvRH768zZI/F8u+TVzRJX1udJ/JF4tF7wvw3g + /dK/D7S4sKPOkXWSfxem69Mdo0ZXlJb0DXvWlbmzqnQifSlWdIjWGcxSrCs/lcODszi9NJbDA7PYXCv3 + nWbNkmQLduS7cKnRhze6AvlyMJzvev35SupfYQB/XfPcAP66wZSv2yz5vM2Cd+S+H9TrcK1GdHm1ChcF + F6rUuFipweVyHe7Um/F6mzWPeix5Y4Ez767z59N96Xx3sY0vrs7nvasreP3KJq6e3cq54xs5c2gJJ/Z2 + cGir6N51cWxbHsyWJdME3mxdOo2Nsr1+oS8rBn1YOTiDzUsi5dgizh7u5ua5lbx+dRtv3zzE+/dP89Gj + C9y/cpR925Yyv6da2k4BS+e1cHjfRi6ePcy1S6c4e+Iw+3dtZePKRaxa1MfuLSu5cfEYD29d4NGtSzy+ + eUWJRzeuKEcBPxI8vKwwgM9z7cRJLiiM38OHuXL0GJePHuWCYj3gvds5vXcTe9cuoL8uj5RwDzwd1Jjq + PJqwKdokBivMXwtyoi0oEG1akirIsPjbAK4vGie6w4P2Sj9662fT3xBPf2MGffU59NTk0FebK30oj3m1 + GfRWxNFROouu8jCWtMWwcV4a+1bmc3FnPY9Pz+OLu5v55aMz8P3r8J+P4I9v4Ol/4NlvPON3/uKpYjJo + hvS3TKOjdjK1RWMpz3YgL8laRIYpcYG6zPRUxW/cCDysX8JRfwgWGkMwERhrD8FAaxi6Wi+jq/kaBjqj + MTdUw8pMAztLLeysNLCxUUAVW1sVJRSGsIOQOGfFOr6O+ox1NpBtA5wc9XC011Eavwqz195WU2n8Othp + Pzd8FdexVsfaSk2gKlD5XxiDtfVz2ChgNQpry+drGFtbvSLXGs54p9F4TdAiyMuQSD9LoqeZE+1pRKyH + AQkeeiRN1iTVQ5U0z1EiPIdT5zGKeV6qbBac8tXiQaAen4Qb8n2EET9FGfBzjC4/xWvzU7ouP+fo8buQ + hj9KDHlaZQb11tBix7N2e5502PF7hwPfy753hUxfiFdhR+AwFnsMoWfiEOrGDaHcbSiVXiOomDaK0mmj + KfNTozzo+RTCxb5qlPiMptxrJFVew6mfKvAeTqPvSNp8R9PpN5o+2e7zGMpcud4a7yEcjhjOG3Iv37Ra + KQ3gPwYseDrPnL+UBrAZv8035ZeFlvy6wo4nG11htwfPdk7mybZJ/Ll1In9snsjPq134csCcdxVTR1Zq + catQg2tC5i6kaHAkcgwbpwxludz7UhfF6N8hbJsyjL3ewzjk9zKn/F/mQsBLXAt6ibszX+FxxGu8H6fG + lxl6/FMS1m/VVjytt+SpEPQnTeY8bVaY5Zb82WjCT7W6/FCtzo9N6vw2YACrrWC/C5xz49l1N/56MIk/ + 3pzAL2+O5efHDjx5aM+zu7Y8uWbFbxfN+PdpI/4p+PGKJT/fdeDnh6788fYknn08FT71gk+kVJjAb43l + 2X0bntw04ver2vxxWY0/LgmkfHJFjb9uaPPsmhZc0uavs3r8ecyI/+wx49stZnyyxowHcw0516TFzmIV + lqe9Rm/McBpCX6ZsxlCKZ7xC4fTXyJL6SvF8hWT3YeROfZXqwNFynARmaTOri3TZVKXLvjZDjvWac3TQ + nENdRuySYLqxWDEl5VD6o4YyEDOCfsUo4CgVpQk8P1ZIdZIumzMN2Sfv8kylGbeEQH484My385z5YaED + /1lqz6+rpN2ts+HpFjuloftkuzm/bzbklw06/Lxemz8VBvBWhfH7HOww4dmLEcBPd1rzdIe0353yjtfZ + 80G/YjqdMexJfIU9SS9zImeU0gD+rNea7+fa812fBd/1yLvpMeEraS+fNurwbrUqj8pe41bBUK5kD+Fc + +hBuFL/G262GfLnAle9X+/CPVdP5bKEn95ptOFUg7SpLRFy2KpeqTPhIgvwP6yP5bUcqHMhHGDhPVsXy + n54A/iFE5JPScdxMNGR/8CvsCB7CsfjXeFhnxnfL3Hm6P5inR4P569gMnpyYxp/HFebvZH7Z68Y/d4zl + +x2u/Gu/Bz+f8OfJ1Qh4kAjvZMC7aTx5nMAfD+bw1+1ZcDsMboYqy2e3Z/LX3XD+ej2Sp2/H8Nf78Tz5 + MJ6/PktU4o9PYvjjwxjlvj8/SOD3d5L57c1UaX+pfH0pmhsbPNjZZkZP+kiK5X6z/YeRFaBGVogRebNs + KI5ypDzWkco4xTTQplTNEkEwU5e2OXr0x5uwJMOGZTn2LBVBsTDXiUWF44WA+LBCyFt/2RQ6Bb21fixs + i2BpVzzLOlNY2pnBqt58VvYUsqy7gOX9JWxY0si2tT3s3rGYffuFbJ3ezdmLh7lw9RgXrx5/jmuS2K6e + EBxX7n9eCq6clO/PCNk/L8dcFFzj0rWbSly8ek0+X1Hi/OVLnDh7koPHDrHrwB527N7Blu2b2bh1A7v2 + 7ODYcUmUF89z6bJc5/JZEQpnuHr9JJcuHeDUiU0c2ruYrWua5V7LWTuvgFVdmaxoTWV9Rxbr2rJZVpvK + UsHq5gy2deexvSuDpUUzWJTpzrJ0F1Yn27IuxoitUbociDPgRKIJp5PNOZ9uzaUcBy7mOXAuy5KTqUYc + TdLmcIIaB+MVBrAaJyS+nRZBqDCBz6QLOcs15HKxJfebJ/DeAn++3prAf47m8ePJIj7Zk8LrGyO4vy6c + 26uDubc+nPvy+fbGKM6umMnOPh8RIZNZ2+LOigZX1rVPZPdcH46vCOHmrkSu7Yjj2rZ4rm5J5PiiMPb2 + BbCt048NbTNY3RLE0uZgSfQB9NSKCK/yob50Ki3VM1g2kML5Q4M8uLaJu5c2cvnYMg5uaGWrvKv1Hals + bU1kY4UQ64QJdIdaMjDTmoFQM4EpA2HGzBUsDDVgYYgWC4PUWRSkyoJAFRYGjmGexKj5QQL5PBCgQo/f + GNqnjVSiw0+VzkANuoK15br6dAbp0R5sqESroCVYlyZBg+SteoFy9K/C/JWyNESXsnB9quaYUxNtKZAy + 6vnavgoojN6y2YZ/TwWt+CeIGtmvNIYVI4Rn6gnZNlaaxIrpo7MD1cnwVxGoki73mD5jNGl+I0hVQGJv + TogKhbO0KJX+UxVtRFO0yfM1gOcY0DlLkz7FyNDwUSyKeD4CeEO8KjtSNTmQpc/hTP3nBnCqASdfGMDH + XhjAhxPVOJIssUraysEElb8N4I2Rr7IlZqTSAN4vbedg0mgOS0w6FvsapyU3XI5TrAM8knspY3g9U5V3 + 8zT4sFBLaQArpoH+uERXaQq/mTWaxxmjeTNTXTkF9N2EkVyNkpw6ewjH5wzhZMKrnJDvT+bKb+SosSdT + +ETaKHbnqHO83JDztWZcFlypMeJmvSEPmox4s92Ed7tN+aDbRIkPJU6/oxgRXK/Fm826ypj8uFlfaQDf + rFThWtloLhWO4GTGcwP4at4IbherCgcYw+0iVe4Uq3G/RJ3XSzV5VKrOG5XafNhgzHu1Rtwt1OZKphrn + UtU4pRhFV2TGKRErG5K1mD97JD0zR9AWPpr64FHCc0ZQJnVYFqAqXEeVimA1qkPVaJilTWuUwgAWQZtk + Qb+Il85YM+XovrowTWpC1ZUGcKPEx/pwDerD1OV6KtRK260OGEHNDOFv/iNoDhwlv6fG3DnaLInVZbnC + AJY+vzbTVGnmLk7UZq6IJYX52x+lMIDVWZCsx/JMM1blWbEix4JlGaYsSjFiWYqBQI+VgtWpirWAn5cK + M3i95OItItC2FJiwtdCY7UUmSigM4HWZmqxJHcM6qffN6SpST1qSzrTZl63OIcHxLA1OZUvMkbpX5MCT + wrOOF2tzrFzv+TTQ1SYcqbNEsZ7aJhGEvYW6VKapkCXtKS9Zk+ocU1qKFH9QHMdA/SQR0yKwu6bQ1TaJ + +rqxlJVZUSjCMyvTmMR4PWbP1sJf3rWP9OXJPmpM8NbA3UcXT18jpk03xd/HmHBvE7JC7amIcKYq1IZy + P1Nq/Eyo9zenzk/65TQTyqdIXxTuXDjZgDwpczyNyfGxID/AntxAe1J9rYnzNCFyohGzXPWZ7aBPtK0+ + SdZ6ZFhoUmqlRYcI+3kTrOlzNqbNVpcq09EU6L9Cqdkwmp2GM190x9LJo1nsMoyVgi0TXuGw1xguztDk + rsSgxxIH3gnS5HWJAQoD+ODEoezzln4301T6pSNr5zjSE2RFna8ZpV4GFHvpUzHDlLpAK9pmWNMv97vU + w5wNk5+PAN462ZI1E01YMF6PetsRFFoMJcNsCEmmQ4iTMtp8CFEWsm39GtkTDMlxtyTbw540QbC9IVNE + 94zVG4WV1itYiCay1BuOlcErWBsMxUV0iLfraOb4GZCr+ANq/gTqC8bTpEDeeNoL3ekumcpg1QyWNM9k + 07xkti/JYvfqQvasKmVVT6rk9DTJ49ks6cxnYWsBi1pLJd+Xs7i9kkVdNSzpqWVJr5R9tSwbrGdZfz29 + LcVUFiUSEzUd3+muTJR7HjvOFFt7A6ylPqzs9bG008PM+r+jfzWURq/SAH4BA1OFGawYFayJhY2+0vS1 + H2uGnbMZtk5yLSdj2ZZ9LkY4uBoo4ehqiNM4I5zGP4fzBFOc3UyVBvDY8cY4jzXEdawRE8aZKw3gaVPt + CQ0cT1KMD3kZAVSWhNNQNYv2+ggR7jNprgwQYexFTa47VRnjqEtxoiHRgeZEW9oTzelLlpyWplifz4K1 + ktvXp0q9St7fLHl/a7IlW5Is2ZBgzsoYU5bFmLA8zpgViRIHEoxZnWDE+gR9Nkuc3y4xfneiKocljp8U + HnBe+udV6XPXSw2Ua3cpDOBD+RrKf7rZmj6KLZmj2CS8dXP2GLZkKwxhySOK0cF5mhyU846VSh4pEw5S + oq80eo8X6XCsWIejwv+PFOoIdDkq350TfXi2zpoT1WYcKhcdkK/DnkJ9Dsi5hyuMlQbwoSojDlcrzF8D + DlbqsLdcU/SHKjvL1NhXI3GlQZ9DjfK9cPCj7aIrRE8c7TdWGsAH+2S/lKdE/12eZ8W1PjNuiPa4IXrj + Xp0OH3WY81WXpdIA/rLRmK9q9PiyQosvFNNAl2kqzeDPJO5/WKjCO7mjeS93DB8WqPBJmTpfVWvxTZ02 + X0v+UBjAX9Vq8rns+0TywkflOrxfqsvruZpcTx7F6TkvcShkCEeEA5+JeJmbCgM4TZu7ydpcjtfiZLIJ + u4S/dfgbkOGmSuRYdSKk7URMsmeO5zgSfCeR7D+ZjBBvyuJCqU2NoD59Dq25cbTmxdKaH0dj1hzyZvtQ + FOlLTVII1YlBVCb5U5XqT2NhKO3l4XSXhTBP2tSq2iA2Ccfa2R7AgYEQDi8MZ/+CEFa3etBf5UxrqQMt + lePpbfNjsGemxNYoFvcksbI3k/VduWxpz2en9MUdtelsK4pjQ3o4SyKn0eBuTY2rKc0Tren2dmJgxiQW + zPRhcUwgc6NDKPOdTLCZAS6jR2KvooKDjg52+vpY60v/MTUlwNOTuPBQcpMSqMjJoLYgh8qcdEozEihM + iSIzOpj4MB9mT3cjyNOB2dPGkTprmuSDKOGLOcxrKWJRRykreipZN7eGDfPrWNlXxaq59WxY2sFiiQ3l + hWlERQQTFDSd2IRoSqtKKakqJnhmIAbGuqgoRgDrqaNnpKM0gv+3AZyZnkxOVtoLA3gawQF+5Gam0NUi + Mai/VX6rSWJYMzsWNbNrSbPEsgZ2Lmtk/7oujm1fwNkDa9m5ZpDexhLKsxMpTI2hMjeFxooc2uvyaavL + E86bTV15BtUlKZQXJ1FRnEJFSRplpelUlWRRV5lPU30prU3l1FQXUpCfRk52kiBBaQYXFaUpp4Wuq5L3 + VxpHfbHEkcIAeounsUY49ebqqWwodWVDsQM7KsZyqMmdA02T2V07iZ11k9heM5lNlR6i06eypc6fLfXB + bKoPZUN9GKtqglhcNp2eHA8aksZTPMuJBA8TZjnpMdNOhwx3cxpCnFmYNIHNBRM5Ide90Dmei33OXBh0 + 4MSADbukry0T/teZrUtRlCrxQa8RPG0IgdOH/j+E/QV4FcnWxY0zhkvc3Q1CSIAkRIlDCAESIMTd3d2V + QIK7W9AEd3cbYdxd7p07cmfuuPy+3Qdm7vt+718envVUnz7dne6uqr3XYp2qYuFCLVLTJb/IvSXlOrM4 + 2Y3QuY74BpoRLHk4IWYq6bHTyVjsRvaSaWQtnEx8uC3z/HQJmT4G74lPMcNxGD6CULcRZM23oiFtKn3F + /mwUDbFJyvU57qwSvdShTA0ZrqdaxmVttCEDSRZcKrTjfrk9D4vNeJhvyMNcPeF8BrxUbsGL1VY8rLXh + do0lt6rMuVEmsaTUXGKkOTfzLIQvWqiW3Tku19oaMJZ+zxH0eYu+8NZglbcm62Zos9VTh13uOhyYpsPQ + FImDTsJ7rCdwyngU5/WGc9NwNC9J7nndXIP3rXX40NGAd52Eq07S4RU5/sF0Le54a3HdT4vTvuMYmjmK + k/M1VAbwjWIrbkg8vVL9xACuEh5fbcwZud8ztXacrHPkcJUdO4stRU+LHko2oiPBkDbJIR1J5rRIDGqK + k74bZ0JtvBFVcYZUJhhTKVywNstateZvtaAyz+bvsizLkqI0U7KEE2YLt8wTXlaaZ01lqS21FXbUlttS + V25Dk6Cl1IYO2d9dbEtviR19Jbb0qYxgG/rLbFkh270FktOyDGlN1aYpSYPmFE0603TpzTFihXy3ptSa + tWU2rC+zYmOpBVvKFJhLu7SR8+0pl2fKkNwWJxpr7hwzQoLN8RCOZmMv+dxoFLp64zA01MDcTA8rC8nX + dkbM9J5IRlwY9UXxEicXUqCsaR4XSHv+PJaVzxd+EkRNihuVcZJ34+1ZljGJ3RUzONHgw2DxRA7nWrBf + 9PJu0U+bU7TYmK7NWuG7K+Qdd6U4UL7YnpgAfaY7DMfCcBgGes9iZqmFs6sjnt6euLt7MNV1GtMEc+dE + UJCbR31NrWoEcPT8cCLCvFkU7klenC9LS8JUI4A3FLmxJdeRgWwHDmfacjTDmlMZllySNni30IZXq514 + t9aR96pt+EDa6cclJnyeZ8jHiZK3RMt9HiulaP5PUtR4P12Td6Sdv5FnxAvK8g9pBpwXnn8s0ZC96aZs + zjFnrTxjX64Z7aJrGvJMJaaYUJGv1LVwTMUElmNUP7rMsCIxw46ETGUNYFvi5X5S8+U74eMFJZaUVyrT + OVvT1KAYwBIrqg2orNSjXPJuSamB8HbRvYWmFBZZUFRsTam0i3LF2K9UoJjAghpBnZPAkap6R2oaHKgT + ndAg20019sKb7GipcqC5wpnmMjcaiz2oK/WnulRyYEMiK/prVAbwhYunuH33DncePs+N+w9VBvD5a9c5 + fOIUG7fvYumK1bR09T5G53JBH53LVrN89SbWb93DzoFBjp44x4XLN1WjfxUj+MbN+1y5eofzF69y8PBR + Vq1eK89QQWx8POFzI4iYF8nc+fOelHOZGxkhmEPE3HDmRoQzT46ZJ2X0nFlEh80kJtCD5CCJc2HC/aIk + Hye5sTxtCmsynUWnObA+w4ltRYpR6cueugC2NQSxrTGULU1z2NoazfaOJNbWJ9CRH01NaiSlseHkzAsm + OcCDxW4TWWBn9l8D2FCLEHMTQmztmDfVQ7jEEtUI4I7qHlpql1JR1kJqVqnUaxFxWYLMYhIyiklKK/kb + CX9DvnuynfSX+StIURm/j5EuSEspIyO5kKykTPITHq//W50QRN0SqbPFTjTESIyWuNSeYiU5x4r2bCva + pC22SLtrFs3Zmmf8PwxgR8EUesumCTzpKfamsyCQjrwwurPnsixnPmuLFrC1LJJ91bMkHs7kSqUrNysc + uFk9kRv1k7jW7MLFFmdONjgxVOfMwbppHKj3YKDBjz2NwexQ3m19KOsrgySXBrGlIkD0qQ+7y6azp2Ky + 1IMTB1udONAm/bLHmcF+d/Yt82R9i7vKAG4rnSFtMoDWitn0tcZyen879y5s4t7FLZwbXCEcQt7b4gDc + XS1wm2xOdGSg9LEU2utLqSrKIjRgBk42pni4OpEcGyXtuYKqinwWRYUzdYoDEx0sCA3ypiQvjf6uRtFD + raxf1s7y1mpqC9OpFK5QkZlITX4GHTUlbFjezs51Pezb2MWRza0Mba7h2MYiTqzP5uyGLK5uy+fGzhJu + 767izu46Lm6oZFtdAjUxoldCJ5M3x426WF/WCbccbIwSnj6TQxkTOSI65Ey65NNsS65IXLiaa8plxQAu + 0ONioTaXyrS5Krz9ZqMJ14UPnGsw4USdGcdqrThSbcv+Mmt2SdzYlq3MXGakwvYnBvB+ZQRw3WMDeED6 + +9ZCM/pTdOhYNJ7WKHVWpVqzVeLjpkLlxxKWdEg+WJlpz55aL453z+Li6ihOL49kf50f6yRObZLjBwtd + uds4k9fbg/i8J4x/dfrzRd1k4fSPDeDPKx4bwP9oseazVmvelvt+qVaPW+XqXCtX/u9encul6lwp0VQZ + wHcqTHihwYoX2i15ud+Zd3fO4otTWfz7dhv/uLeSD+5u4fU7e7h3dR83zu/m6ul1XD7exbmD5ZzYlSL6 + V9rommD2rg5g9yrp1/2+bOr1YXWXF2u7/dm6PJyDW1I4eaCSa6eX8vDKJh7dHOC1e4oJfIaH145wdGC1 + Sg93NxWycWULp4d2cePSSe7euMiNi2c4e+wwh3ZvZdem1Rw7uIOHt87z6P7V/48G8COVAXyV+xf/uwbw + lePHuXH6FDfPnOHasSEuDx3g0tAeBretoLc2h+RIT7yc1PGfPIFIH32SIqxIj7Yme7E1+fHWFCVbUZgs + cT7NinLJY7UFU+io8mN541zWdsazeVkuu1ZXs31FLRuXVrKxu5zNyqw+LbmsqImnu3wByyoj2dQRw94V + KQxJm724q5QXT3bwwa1NfPfmCf78xwP45g346RP48xvgB/7kJ37nN/n3B8P6m/zpqpxOXZ4klAx7ylJt + KUm0IT/GnPS5hsTM1CR86hhmWD/DJKOnRaw8hbnOMAw1h6GrJdB8Bn3tkZjoj8PSdAK2FooBrImNlRbW + VupSPjZube3UcbDXYNJEHSYKWXaepPwSXA8nIXeODorh+9coXw2c5LNiAivbtjZyDWs1rMzl+pajBWOw + UmEsVlaj5dpjn0D2WSnm73NYmj8jxz2Dje0IJjmOkmCigb+HPuF+Qoq8TJk7TY9INx0WTNVisbsG8V7q + JAlRzfQaQ5XXOJZ6T2CbfD7hq8ndmdq8GazLZ7P0+Ve4Dl9FaPJVlAbfxOvwXboBPwsJ+LXEjN8rrPhT + Eu+fzU780TKRX1od+aHFic+VX01mGXB6wWi2+g+j220YTa7DqJjyNMVuwyn1GU+h73hyvceQ7z+eohAd + igUlM9Uo9h9Lmc9Iqryfo95nOA1+I2gSwtviP4o2Kbvkc8e0YfRMGcY6z2EcmfMMrwhZ/6LRku/brfml + x/K/BvAyxQA244cVigFsy69bJ/HH7qn8vsuNX3e48PM2Z37YPIlvV9nycYcRb9Zp86hcg1fKdHhUpM8L + uQZcT9Rif8DTbJk6jA0uw9jpMYwDvs9w2O9pjgc9w7mQp7kSMowbocO4L/fyKHI4by1S4+MkHf4lgexH + Iau/Vpjzm4iH32os+KNOUGvOr1XGfF+uy9elanxbo8aPHfr8scaMP/c7wgVXuDONPx558Oub0/nprSn8 + 8PpEfnvZgT9fsOO3u9b8fMOC7y+b8s1lM769Y8MPL03ip9en8pti/n46Ez7xh4984T1PeN2FP1+y57cH + ZvxyW59fb2ry+w11Ff68rQn39OXv6cINwRUDOGfM78fN+M9hC77aa8k760x50CP1WaPBjpwx9MWOpnne + CMpCnyZf3k2mvI+UGU8T5/kUse7DSJPtkqARdC7WYkO2IQfqrDjZZcvV1U7c3erK7a2TubZWhGGXJfuF + BK6Ie46li56id+EIuqJG0blgjMoA7ovRVhnAO9KNOSQE9IwIr5vV5rzVZs8nnfb8c5kd36504McNjvy8 + 2Y4/dtjx605LftlhLHWrjP7V4cetOvy2U55pjzF/7jXiz33GMGAK+8z5Y8BS3rcNHJB3ftCFH7c78X6v + BRdy1TiSMJLBxJGcyxrHfUlcbzca8XGbKR81GfBpswGft0ibk+3PGvT5sFabN6rUeKFkJHfynuFqxjPc + zB8uyUKHd3sd+cd6L77Y4M/Hq715tdOZK2Ui1PI0OJuvza0aKz5aH8w3uxfy04GkxwbwnhR+XDmPL+t9 + +KjAhTfT7bgRpcPh4GcYkHZ2esloXqw05dN+V34eCOCXoSB+PurHj8e9+eGYB98fceO7Ay58PTCJr+S5 + vjsxg58uBT02el+PgfcTpV0k8OcbMfzy0jxpFxFI45U2EA53lXKutIsIaWfKd/NVJvFPLy3gl9cXSntc + LFjIz68KHsk9v7iI/zxYwr/vLOFf1xbz7vEIzvW7sLnckMa4UWSHPkVK0LMkB6uRHGZI2hwLIaN2FCyw + p2SRkP35JhSH61IerkXjfBHmS0yE5NqzXpLDmiwnVmRNZHW+GxsqfVhT6Ud3oedjA7gikP7m+axpX8L6 + zhQ29WSxbVk+G7vy6G9MF6KVKSSolK1rGtmzYxn7D6zjxJm9nLt8hIvXjnHh6jHOXxmSz0OcvTQo5aB8 + HpT9Rzkv3128eoJL105z6ep51Qjfi9euyb4bjyGC4aIkxgtXL8u5Fzh+5iRHjg9yYPAgew8OsGffHrbv + 3s7ufbs4dPgAp06d5Nz505y/INe7dIpLV+Rvn9/PyeNbGDrYz94tDWxfXczmpXLPzQlsbk5ib1cW+zpz + hHymsbU+he2NqextS2dfSyLrC4JZk+HOujQXNiTYsjnakB3zdTgUrcdJlQEsbTjJmoupNlxKs5HSgvNJ + xpwVwX46QZn2eRwn4ibIZw3Zr8mFZC05To+rQrZu5FvxfK0rb/T488mW+Xx5IIF/HEnhHWmfL20O5+HG + MG6tCeCG4PqaIC6vCeHosgC5v2msqZgowt6B7nwLloto3yxk7WCvN5e2RXJ15wKu7Yji4uZIDgnR2tPs + xY4GLznGh7VCyvuVX+yWeFGXP53KXFfKsl1FcAqhr5vD4W0V3Di1guunVnJmoIPdKwtZUxfD8sJZrMwL + ZmWKtIdIO5qDjekJN6cnzJiOYH1aA7XpDNZhWbA2faEa9AVPEIyjN3A0SwNG0T1zJD2Bo+gNVgzgCXQE + jleN/G2eOY6WIDVaQjVpnaVDi+TBesmHdSH6NEgbrg0zoCZUlwq5bkWwFuUKwnRVo3+VXJavrIn+xACu + XiziN0YZ4aus72uhQqWgdL4IXuEaxZHGlC4wkc+K4Wso5FqPvNm6KFNHK2sGZwZrkBL42PhNmjmWRP8x + gtEk+I0i3nck8f4jyZit9tgAlv5TGmVI9XxD6ufp0zhPjxbJ3T3zNemNHM+qBRPYJLlpy6Jx7Fgynv2S + 24aSdTmRbMipRGUaaD1Ox//XAD4aq8axOHXV6N+hJ2sA71ownK2Rz7I9agT7Zd8RaUdDsWM5umgUJwXn + Fo7i2uLR3I4dw4OEcbyUMoHXMzR4O0eTD4v0VCbw+/l6jw3g1LG8kjqe19M0eC1Vg+fjxnJr4fDHBvA8 + wZJnOZ08ilMZ8jeeGMADyWM5KNsqA1gI9zUh6jck1tyrVoxdY95sNeO9Tgs+7HqMj4QPvNtuojJ/X2sw + 4I0mQ15R1geu1uJe6QTulIzjdtE4ruWO4rrgQZGa6kdgLwlekdz0WpU+r1ca8JbgTdl+u9aQ92qNea1U + h1sZ47iUMIqLiRO4mK7L1WIRPpUOHMg0YU30BJbOHU1b+Fgqg0ZSKFymSOqtQLXkxRiKg8ZTPkuNmggt + mqIMaFlkTFesucoAbo+xoEHqsEbqtDpcgxqJjXVzdKTUpGq2OuVBYykNGCHXe5YSQcXM4dSHKIbzBJap + DGA91sUasiHRSGUCKzm0b7EG3dHjHxvAUirr/q6Q7zZkWrI5z471WVasSTWlP96A/lgdVizRYa2cp5jA + 66RNKOWGRD22piojfi3Ym2fOPgX5ZgLTJwawBhsTxrJJsCNZ2leGFoeztDiUrsGRNDVOyvdn0tQ5k6HO + aan/0zkanMyTtlaky3FlLWBl5F+VBUfr7dgunKknX5dqOS8vfizFEqPqsk1pK7Cjt3IKK+vdWdXqycoO + b3ra3GkS4V5ZbkdxgSU5clxyggGLFuoRLu3fL0gxgMfhKhzXzVsTdz99fANNCfQ3Fn5sTLJi/M5zojTc + VurFXN6v9FFBqXDnghnSJz0MyZquR5qbLqnCo1M8jUnxMSPV34okwZIZpkRN0yfSRZeIiVrMs9dhsa0u + iTa6pFtqUGKtSZuzMSumWdLvakqvi8SpydI3HSfQMnEcXVPG0u8xnmVuwm3th9Er2ODyNIeFH18K0uBO + iCaPwrR4PUSDF2aO4YrXs5zyHMHJQC1OR9lwImkqA4nurF44hSbFzPY3Jctbjxw/A0oCTKmdaU6njwWr + PC3Y6mHJXg8rdntYsMnVkBWTtWh3HEet/UjKRO/ki4bIEWRaPUOqfM6wG02FpzllXnbke9iR7GbDbDsD + vC00cTEcj62u6A+d4VjoDsdM71nM9Z7CyfJZPCaNZLa3NkkLrClIdaYsS+onx0VlBNfnu9MoaCn2oadK + clnrfMnbi9m2PJEd/amsa48VJLKuI03yexYrm7NZ2ZTHsnoFBSxvKmFlW7nUfSn97aWs7qlgdXcVXY0F + lBUksDBKmerVGVc3C5wmmWBjb4CVjR6WAjNr3ccGsKUWJpaaj6d/NlfKxzAy01LBxEIbc2vFNDbCzumx + +auMAnaYbMFEFwsmuZo/GelripOLicD4v3A1YeIUU1xcLXCWcpLUvYvAdYoF090s8XK3JmjmRKLnupMU + 60thbpjKAO5oiGZp8yI6aiJoKQ2gPteTugxXmlIn0ZYyka5Ue5ZJPl+bZcnWXCv2FthwKN9e4qE1B5LN + OZhoIbBkQPL/boklWxaZsFHiyuYlxmyJM5XSiC1LDNgWo8fOOB32xT02gI/GjeNMvMQwidVXszS5UaDH + FcG5fB3VCOD/GsDSr9PGsjN9vGACe9OV9YA1OCB9fFAxdwsNOVmo/xiKAayYvwU6HFdGEufKtfKkLNDn + XKUFZystOVVhxvFSYw7m6KoM4MNy3qDorqMliulryNFyAxUGhX8PFKqxO1fyT/5YBkrUOFAhsaVal8E6 + fY4JDz/easiJThOOdRoy2CXndRpwqseES0vNudJqxNU6Ha6VqXO7VF1lAH/aZsHHjaZ8UmPEp6LDPnli + AH9SpMlHxZqSo9R5O1dyV9ZY3swezzuy/b7cw8elmnxaoakyfr+oUYxgLT6We/mgRJt3i3V5R2LZK9la + 3E8Zz5WY4ZyZ9xznJF9ekbx4L1Gdh0na3Iwex/l54zgmcXrXYon1ftokTB7HPCc1IqcYMdfNivnuTizx + cyUhaBopoZ4URodQmRBJTdICmjMX05S9kMbsRdSmziNzrje58/wojQmR4/zJW+hNabwfDdKu2otn010S + yvKyIDZWhLCzOpj9zYEM9YRxvH82g32z2NzoQU+ZI42FdtSXONPbGsyK7nms7FzImo44NranskP64Z6W + HA41ZjNUncZQURwH0iPZsSiQ5X6TWerhwAqviawLcGOT3O/2eQHsWBzO+sVzqJ7pznxzQ6aOHYXTuDE4 + 6WpjZ6iHjaE+zpYWzPb1In7BXPKTE6jKTac6L5Py7BSVWVqUsojs2AgS580kOmQ6c/yciQqcSmpUoMSS + GHpqs+lrymd1e7Fq5O+ulfXsFc6/Y0UtW1fUsX1NC6t6aijNUwzgUMJC/YlLXEJ5TTml1aVELJiDibkR + 6loT0NHXQt9YD10pjaT8ywDOSEsmOzONmEVRKgN4VkggWRlJdLXUsqGvnW39rexb1crBNc0cWtvEvrW1 + HFzfyLEdXZw9sIZrJ3dzdPcaVnXV0VKRLyhgaWOF3FcD6/uaWbOsnmWtZTTV5lBfkUF9VRZ1FVlUl2ZQ + XpIhsSGHhpoi2luq6Gyvp76ulLLSXMrL8qioyKWqKp+a6gIa64toqs+lvjyJuqJoGvLD6MwPYFNVCDsq + fNksWnJjjgM7CycyWOPOkVoP0d/T2Ffhxp6yqWwvnsoWwbYyH7aV+7OlTFAewIZSf1YVeNGTMZWGuEmU + zLMn0duYhZN1iXExIM/Pmua5TqyOnyw8wJlTVc5cbLDnaoctN/vsuLLCjmMdkm8qDOjK0hHdN56EWSOY + G/AUkaHPEb9E8qRiAOfakpzlQEzSRGZFWBEQYMDsQGMyYqdI/vegLMmdSimrpSyJcREdaUtSiAFRM8YQ + MW04syY/Q+TUEeQvUNa0nc6qoplsLg1ke0kQW/O8VUvmLFtsLVrBSPiwobRNE/YnW3GlyIGHlY68UGbJ + 84XGPJDYdV9i2YNycx5UW3CnzoobtRZcrzHnWpU5t4Sj3Cix4Gq+OZeyzIQ7G7N/ng6rfUfQ4/Ecff5q + 9AfosGamLpt89dnlY8B+L4lrnoacnWbAuYnaXLBW56zRSC5K3rxtNJpHFhq8IVzhfRttPnI04AMXfd5y + Ef45VTGANbkjvOWGvybnZo7nRIjE62htlQF8vciS61VWT9YAVgxgfc5UG3G2xoIztbacrHN4YgBbsVp4 + aW+SEe1xBrTGGT02fyUn1C02omaxAVVLDKkU3liRaEJlijm1WbZUS50o6/0qo34rZVuZ+rkkw5z8VJP/ + GsDpZpTkWlNebE1FqRxXYk21oLHM+okBbEd3kfC2YjuWF9uwvESBtcCKZUVWdAl/bM80oDlVm0bRo02p + WrSl6dIl+3rzTOgvNGeNXHttqRWbpI6UEcBbyi1YX24jetNO7tWEbMlvCQstWRBpSViYFV5ekq8dJY+b + jsXQUA1TE22sLIywtzZmkqMpwRKzsuJn0VAcR0NBNGWJgVQlSyyriGJj8xJWVIXTkTuD1nQXOlInsiJz + IrtK3TgufeZY6SSGCq05KDxzX4YBOzL12J5jwJZ84dyyf6Xo1/oEZ+JDjPBwFF6kPwxD/edUPMTdy5WA + oJn4+voxzW26YBrRUdFUVVTQ2txCUWEBs8ICCPBxZW6QK5mLPOkqDGJtWQCrcieL5rdkZ4oFh5MtOSl5 + /0K2FdezLXlYaMMbVQ58UCOosBStZcxHefp8nKnNJ4oBLDrtU8n1nySo8WGKGu9laPK2fP96gTH3sgy4 + lmbASeH5+2K02CS8f2WyPsuF6/fKM3YKz28Vnt9UIFyywIzKAuHIBRaU5FuSl2dJZpY1KappoG2Jy7Ah + QTGF5Zgs0UOFZRZUVSujf6VPNkl7aLCgrs6I6moDiV3/NYAL5NoFigFcJO2r1JbScifKKxQ4UlklqBbU + OD2BA9U1jhLzHKivdqKpyp7mCtH/ZfY0lcj+XCcqMp2lnU4lP9OHmopF9C2v5NDhrVy6fIY79+5y7+Hz + 3Lr/eBTwuavX2bn/kMr0zSkqJzkzj6TMXBLT80hIyyM1u4j8klqqGzrkmD7WbNzGvoPK/xtd59qtB1z/ + Hwbw4NGTbNy0lUapy+y8HGJilxC9aCHRixcStShasIDo6PlERUcSFTWXaMl7CxXMn8uSeXNYMidQYqMX + WeEeFM2dSv2SqXSlTKEvcwprJbZuzHFic+4kidVu7K32ZletH1vrZwqC2dY0h52di9m7LI1NLcksLVlE + Y+Y8yuLCyZ0fRFKAO4vcnJhvZ0qEmWIAa6gM4GBzU0Lt7Jnn5kHa7IXUZ1epDOD2hj7qarpJzylXjQCO + z1ZGAZfIuykhJaPsb/zP0cBJT6CYvimK6StlmhyTnlZGmmIApxVLWUhGSpbEj2TyExYJV5lNVUIAdbHu + 8rxSn7GWtCaYSb+zpiPThvZsa9qknbVKvG2ReKAYwG35JnRKTOsptRfu4sKysmkCD5YWebE0348eZarm + rFmszp3L1pJ57K2Yw6GqAMlNHlwqc5L4bc2Nisfrp19tcJR85cCpenuO1TkyWOvC4fppHG70Zn+TP3ub + g9jZGMSW2plsq57J9kp57xXu7Cl1YW+ZAwPVdhxssudAiz1HOp05snw6+3r/awC3liprAM+kpXLWEwO4 + jfsXNnJfZQD3q0YAxy+eybQp5kxxNmXxghCqSrJZ2lojbbuQuWEzcXW2JcB7GtmpcbQ2VovWzVeNAJ7m + 6ojzRGvCgn0pzk2jt61eNEQ1S5uqaK0ulNidLP0hVYXaggxaKwtEM9WwrreerX017FlRycDKfA6uyuTI + yhROrk7m3LpULmzI5NLGXK5sKubC2mL2NCXSmRZCdfQMqSPR3OlBwhPmcLQhkuNlfhyR+Hg01Uq0vSUX + JSZdlhhwKdeUS3mGXBL+r0wDfaVUR3KoAbeeGMAXG804U2/BiQZbjtbZcajSRjUN9LYcE7ZkimYRbMs2 + YXehFQPljw3goUZnDtXZS043Z1W6Dt1LJtC5SJO1Ene2l7iytWgKq2V7RYolG/Mc2V/rKbogiEur5nF+ + eQRHGv3YniexPMuO08J5XmgJ4J2OQP7ZE8xXnd78o86Zzyut+KLc5LEBXP3YAP5cMYAbjHmxWodbZcoI + 4AkqPaGM/r0q2kFlAJcb83yDJS92WPHKisl8sCecL8/m8M2tZv51fyWfv7CT9x4e4JX7R3jh5gHuXd7M + nfN9XDtax7l9ORzZFM3A6jCpkyB2rQhga68v67u8hNt6sq7bV7VO8L4NixnancuFow3cOrOc+5c28uL1 + 3bxy5wj3Lu7h2MBKNvbV0ie6eMuads4MKiOOT3D/+iXuXrnI9XOnOHf0IMcP7uHy6SM8un+Flx9c/78G + 8K3rPLop5f8wgK8oBvCx46rt2+fOcfPUCa6fOMK1E/s5unMVy+pySYmcgd8kDYLdNIieaUzafDtyFtmR + F2NDcaItJSlWwuUsH48Azpb4XejKsoYQNvYsYf+GAk7sbeHK0VVcHFzDmQMrOTvQx5ldPZzY0szAimI2 + dyazrTOefX3JDK5L5/TmHC7tKOL5Y028fWUlX76oTAN9jT+/fgQ/fgB8Jfg3f/IDv/MLv/Ibw9YoawSU + udEsZLhBkmijEJ3WXEdaBI2ZDpQtsSIj3Ij5MyYQ6DwKT7sR2Bk8pZoKWl9LoCPbQtxM9UdjaawYwDrY + W+liK7C20sLGShNrS3VslTV7nxjAkybp4OysqyonCgF0ctTEwU6ZzlkDezsN6cTynTKdmGzb2qipDGAL + 89GYm49UwdJiFFaWo7GyGiV/YzTW1mMFYwQjZP9z8v0zWFo9i7XtCOztRzBl8gQ8p2kT5GVEmKcRoW46 + hE5WZ9akcSyYOoElXuok+I4n03ccFd7j6BJs9BzHkRlqXPYcz4tearzjp8HHM9X4JHA8n82ZwJcxOnwr + pOBHCcS/CBn7pcKG36rt+a15Er80O/OfZke+bnTkQyF+91N1GZozgnXew2iZPIwal2GUTnmOommjKfHV + IMdrHBnuo8j2GUthoCalwdpUBmlQHTCeupmjaZ45is7gMfSEjmdpqNxf0Gg6A0bS7fccXdOHsdR1GOtm + DGMw4tn/lwFspTKA/1AZwKb8tNycH1ZY8OM6a37e7MDPWybyyzZnVfnDejvVFMJf91nwWacR7zZo8VaN + iP96I95XpnmsNOfFXH1OznmaffIc2+Xv7vORvxn4DEOBTwsRf5pzocP+NoDvzHqKF+c+zZsLx/FhghZf + ZOjx70Ijfig25sdSuR+53m+VpvxWYcJPpfp8V6TF14Xj+bp8PN83avFTjx4/bzLj95MT+fP2NH5/yYNf + 3xK8O42f33Tmt1ed+PMlZTpnG365Y80PNy35901rvn8oz/WaK79/6Muf/wyGL8Pg86DHJvAHXvz5pit/ + yLm/PW/Jb3cNH4/4vaWhAne14b6BlHpwUzGApbwgn08Z8/sxC344ZMUnW0x4pV+fy03qDBSOZVXCGFqj + R1I5+2kKA4aR7vMUKV7DiJf6iBOkynZx0HP0xGqxp1wE1oqpPNzmyesHfXnveCCvHfLmxT3Tub5aAroE + 1Y0Zo1kR/yzLY0bQOW84bZEj6FownmULNVghhHRrmjEH8kw5VWrOlTITnq8y5Y06Mz7psOar5fb8uH4i + P2905LdtykhgS37cbCDQ4acn0z//sdcY9pny54CUB0wEZrDfUkprOGgnpZOUU/hxx0Q+WCYJLE+dwcTR + HE0axfmscdwqkP5QqsbrVRq8XaXORw3afN6sy5etBvyr3Ui1FvDHbXpyTxN4qXI0D8pG8aBiLI8adXh7 + uR2frp/OZ5t8+GSDN++vcueBJJPrtUbcEjL86tIpfLVnLv85FMvPgykwmMXvOxL4uieMD4TkvZpoxYOF + hpybNZYDgU+pDGBlvU3lHXyw3Jl/7/blP0dm8v2gD/8emsG/j06X0o1vD0/hm8MufDPkyn/Oz+DXm0H8 + /vwseHM+vL+IP99dxB9vLODnl8L55cEsfr8r392a/Xgd4Rtz4FoEv12by89S/ufabL67Gc5/7s3jPw8X + 8OPz8/nudiT/ujKbL8/P4YtTEXw4FM4bA8Hc2eTN3jpLlmVpUrlwJJmhT5MUNJyEEDUSw/RJnG1Muoj7 + nHk2lEQrBrApReE6lIdr/m0Ar82wZ13WYwN4VdYklQG8qtiD/hJvlhZ70V7qTVdliMoAXtsepzJO960t + 49CGGtXUa8qooVXtOZIIy9m2toE9O3o5cHA9J8/s5fzlI1y6fozzV4XAXzzIyXP7OHF2LyfPDwihPyj7 + D8sxQ5y7dFTKE5y/dIZzly8KrsjnaypcuHJdcFW1//SFcxw9dZLBE8c4fGyQ/YOHOXDoIAMHBti7by/7 + BCeOH+fc2dNcuniWKyJALl4+yoULBzh/difnTm1kaKCbfRur2KoYwE2x7GxP4XBvDkPLCjjclcO+1nQh + oansb0sVkpnI1tJZ8n7cWZs2mTVLhOgs0FcZwAefGMAXEkUYJtlwLsmSC8kWKgP4UoopF1KkHSXpcCJ2 + vGAc55LVZZ8mV9P1uZ5hKELSlBsi6u5XTebl9hm8uyqUD7fM453Nkby4OpjbfX7cXunP9X5frvR5c7HP + l7Oyb3+7BxurnFkuIrQzx5RmuVZ7liGrRKDv6ZjOqXVhXNgyl3Mbwhla7s/upmnsEIK9rW46G+s86a/0 + pKNwOtUZEylKsqUoxY6S9IlUZrvSXOzL5t5kIQLNXBns4fj2Onb0ZrKiIpLuzJn0pHiydLEzXXOtaA81 + pjvMhK5gPVpmSnvymUCbnxpLAzRYHjCBZTPHsNR/ND2+I+n0GUG7z7N0+g2nR/LbUmW650A5XvJPc6Ca + ao2wllCtJ9M861MeoKVCTZgB1dKOy4N1KJa8pUKwIEyXwjA9CkK0yQnRoiBcX9q2GTUxtiJs7FUmcEW0 + BeWCqkWPzeCiucqIX0OKIo1URrDKAJ6tR+4sXVWZJddJD1B7POr3/2UAx/uNIs5nJAn+o0QsapI3V4fC + efqUzNenQjVdsA51c7RoidBgWbQOK6I1WCtQDOCNUWPYHDWaXTFqHI7X5miiPicSDTj1fwxgdYZildG/ + fxnA49gp8XnznKfYFPk0exeNfWIAj+eobJ8SnF88lmuC29K+FAP4xaRxvJKqxhsSD97N1+HDYv0nBrAm + r6aO57U0Nd5M11LhUeJ47saM5MKCpzg1/4kBnDiKU+njOZahzpF0NQ5lqDGYrcHZUiMuVZgKETfhVrkh + D6sNea3RlLdbzfmwy4qPuy35VLjAp702vN9pxmsNegJ91Wjg15T1get0eFiuwUMh8y9UavKSEPuXqnVV + 67y8Xm3AW3VGvF1nzNv1JrxTZ8LbNUa8I3hPWTtSctbLxRrcSB3F5cThXEmZwOUsETkFJlwsteF4gRVb + 4rTpixxLZ/hYagJHUSZtrkhQIMiXOisKGEt56GMDuHGBAc1RRnTEmNEda6Vao6ZpviG1c7Wpnq1JzSxN + 6sK1pT61qQoTrhQwmkLfZygQLlLg/RSlvk+rDOC2CMmZTwzg9coawIlGrI3TZ+USHZYvUgzgCarZNboX + qrM8VpdVySaq0b+bcm1Zn2nJqhQT2a/H0kVa9ImoWr1ElzVxOqyJ1WFtvB4bk/TYmm7M3lwRZAWW7BNR + vr9QSuGDfxnA66XONySMZXvyBAYytDgoOCR1ezhFjRMSb04mq3EqTUqpy5PZmhzP0eK4YgArawGL4DpW + Zc6RGku2SP325msLP1ejNHk8VWlatEp86i6woa9sIqtqprCywZWVLdNZ3j6dzuYpNFQ7UV5qTb4Iz5RE + PZbE6LJwkT5Bs9TwkH7jKhzXecZ4pvrq4BVojL+/MWF+hsSFWlAQ6UBJhAiUMEsqwmwoD5LreJmQNV2f + LHcD0qbpk+CqQ5ybNrHuhsTOMGKJpwmLPYyJnmbAfPkuYpImEQ4aLLDXJsZWi3hrdVLNx1FkOZ4mJx36 + p0pu8zRnvZclm7yllGusm2Egn+Udz1Cn2/U56q2H0SxY4Sy53mcM5yQu3QhS58UwDV4LVuOhtJ+r3sM5 + p3wXqs+ZaFvOps/gZJ6IxjQ/OhdMpiTIgnRvPdJ8JI7I81X4GtMqf2+FlwWbZ1ixZ4Yluz3M2Oyqz2pn + DfonTaDXWdrFxDG0TRTu7TSGBkHVxLFUTtag1ceGJn8nyjzsSJhoQpiVDjPMNZliNB4HPdElTwxgE91n + MNUbhp35U0x3HkmYvOclkeakxtmQny7vN8eZyrwp1BS5U1PoTkORF63l/nTVhNJbO5u+hrmsaJrP6paF + rJO8vr4rlY3dWYJ8yfMFku/z6K3LY3lDIf0tJaxoK6K/tZCVXWWs7q6kq6mAiqIkFkcH4efrjMsUMxwc + jf42gM1tFPNXmf5ZG1MLbUwstTE218LUUudvmFjoCXRlWw8zK30sbA1Uo4BtHU1wdFaMXxtcptowZbq1 + Ci7TrWSfhcrwdXL5L5TPk2X/5CnmOMtnF8GUKRa4yWd3N3P8vGwID3Fm0Xxl7a5Aqorn0NG4iBUibpc1 + LaC7Koy2Am+as1xpz3CmV3jQqhxHNhbYs7vUgSMVjpyqnsiF6slcKJrIWenDJ1ItOZ5iyWCSBQfjzdm1 + xJjtMUbsiDdhZ4Ip25ZIH43RY5vouJ1LtNgvGuVQgjrH4sdyRvrtJYnTVzLVuZanwyWBYgAfz9XigDLa + N3WstK/x7MgQpE9gZ7o6e9M12JupyYEsbQ7n6nKs0FBinz7HCyWfSIw/WShcQ3BMGUmcq8NQnmjCAl1O + KKN8y4TPV5hxstyUoSJjDuUbcFCO25+nLaVcr0SfwXIDhioMOFyuzd5CNXbljWWHYE/RePaWaXCwUofD + NXJNietHWww51m7CUIchhzsMGFSmge4y4qzouvONelyo0uRyiRq3BO80iXZoseDjhv9rAH9cJPpPynfy + 1XkjdwKv5Yzl9dzxvJU/gXcL1HivSI0PRQt8ojKAdVT4RO7jw1Jd3i+T3Cb3/YY8x6Mcbe5JbruVqMbt + +PHcT1Ln+WQtlQF8cc5wTs4exZH52myPMqHeV2LFpLHMdZjAnIl6hDubMM/VmiXeziTOdCMleBoF82ZS + GTeH2qR5tGQuojk7msasaKqTIkib7U7OXB/KYkLIX+BNVuQ0imO9acgOob0wlKUlQfSXBbK5QmJEVQAD + Df4c6Qzm2LJQhvpC2dbiybJyxQAWrlI8keVtIaxZuoA1XYtY2bSItfXxbGlMYUddGgM1qRwvT+FMURzH + M+ZxSP7mQIQPA7NmcHCWJ0dm+zA015+h6BCOxESwO2YubUEzSHGwIFB7AlM1xzHJQBM7Yz3sTA1wn2jP + /CB/MmIXUpaVSn1xDnWF2VTnplKemUB52hIKk+aTsTBEte7vgiBXYsI8yIoJpaEwgeWN+Y9H/3aVsqO/ + lsObOxna1sOBjW3sXNnA5r56+joqKFKmgJ49k6BAb5LTEqlrrqO6sYaomCis7CzR1tdGz1APA2MDDKU0 + ktLWzgpfXy9ysjIkp2SzZPFCAmf6EiL3m5mWwNL2BratWcr+Dcs4tL6LwQ3tHFnfwv519aJFmji6o5sz + +9dwcWgbp/ZvYu+mFWxf3cvejasY3LWBEwe3cvrIDo7v38z2dd30tlfQ2VRMb0eVlOXUVeaqRv7WVxfS + 0VLDiuXtrF65lLbWOlpba+ld2kZ/fwerVnbRt7yN5b3N9HbX0NNaRHd9Gj3VEk8qI9laL/VQHcw20VBb + 8yezp9SVoVovybOeDJS7qf4je2eJC1sKJ7GpyJltpdPZXjFDcvAMtpZ7s7nMi/USr1fmTqU73YWahfak + +RsQP1WXTC9TqmbZ0zHfQTiCg3ADB+nb9pyVPH61zZx7K+24s9aBs8LFdlQrhpI25YvHkRI+gphZz5Gw + YAKZSUZkCw/JyrYlLdOO2AQbIsINCZmpwRx/TdIWWFOR6Ep9ynSaUqfRluFBm5StSa40xDpSNs+UnDAd + ErzHSE4eJVzago6UaaIb/dhU4M+OwkB25vmxNWM6q5bYs1Q0p8oAjjFlf6oVV0oeG8AvVVjzYrEpDySO + 3S025J7wyzvVZtyst+B6vTnXRa9fb7TmRp0VV8stOV9gxqlMiV3CmTbNnsBS7+fo8BxOf7A2K0MNWBci + 8TbQiL1+Rhz2MeSUlzEXhTtcnijx1VKNC4YjuWIwknum43hkrcEb1lq8Y6vNB456fOBqwNuuigGszYPp + 6tzxVuemaI0roZpcmi9cU2L5lXQTrhbIfVWIvpN7vVBp9LcBfK5WMYCtOVln/78M4KXC81uX6NG8xEC1 + zma98KPqhfpULdSjQj6Xy3UrEs2oTLGgOtNGNJgt5dnKqF8rSgTFmcroHWUdP6O/DeDcdDMKcywpEu1Y + rBiDck8VRRbUl1rRqkwBXfLEABYsE43YW2TNUgXCHbvk+HZlVJ/KANahKUWbpjQd2tL0Je/p0SW8clm+ + KauKLFlbZsXWqsdrAG+rsmF9hQ3LS+2oTjMjL9GClCW2LJG2OWeOnXA7K8m3htjaaGNuqoWFqS62lpKX + 7S3xnOrA3BB3OSecxuIYWoqjqEoNoD49gNW1UezoiGNT4zzRrwGsKPJkebYzK9IchCPbCO91lPY9iZMl + tgwK790v97cn15DdRSbslXrYXTOZDSUetKS6kSRa1MNhBMY6wzAyGM6kyeYEhHizIDpS7jECT3cPPKa7 + Ex8bR1NDo/TrdrIyM/H39WTGVEfhphNJXSDtPTeAlaKDezMcROvqsl44/oElUtdpVlzLteF2riUvyHt9 + s9yOj6WuP5H7+ETu5+NcPT5K0+ATyT2fSA76OF75f8lxvC9c/B3RX29Krn6t2IQ72YaS+/VF36mzKmwE + HWEjaY4cTatoxW7h+735FvQI3+8stKBV6rWxxJI64dnVJdIuim0oKLAjK9eO5CxrEqSNJOdakCHH5Ur9 + l1RYUltrJc8nuqbFmo5Wa5qbTakXHVUtmq1MtFuR5P/8/2EAF5XYU1zqRGn5RBXKK52oEK5TXvUYldJX + FVRVOFBb4USTcKHmMgeaiuypz7OjKMmS3FhrMpY4kBbnSllhJH29FRwZ3M7Vq+e59/C+ygC++cQAPnPp + Guu37SKvpIq50bGERi4kJCKKgFnz8AuNICBsPvMWJhGfnEtKViFlNY30rlzHwSFlxrh7XL/1UDUt9IXL + 1zl28gybt2yno6ub4jJlBGwyC2MUA1gxf6NYsHAe0VHziIqaQ9SCcKLmh7Ng7iyi5oaxOCKEmHA/ksNn + kBfpQUW0xLv4aXQmO9OnjP7Nm8SWAonPhZPZWTqV3ZUzJKb6sLXWj401/mxpmMWursXsW57KlrYklpcv + oi1nPhXxs8mbH0BiwDQWujmwwM6ECHPFANZSGcABZooB7ECkqydJIfMpSy6irbJLctAKWpr7yC2qIyWv + kqS8chJyy0jLKSczp+JvZGSV/430J0jLLCM9o4yMjHKJ6xVkZ8qxafI5rZD0tGwyUpIlfiwhPyGSkvhg + quJ9qZNnbYxzokXif7vUYVfa/zSArWmV+KKMAlYZwHkmtEuc6Sy0prt4EsvLpgk8JL5If83zpi/bj9XZ + ofK+IthXNpeDFaEcKfMUburIBYk714qU2RwsuVllzbVaGy5JrDwr5ck6O47WOjJY78Jg4zQONnqyr8mH + XQ0+bKv1ZnvVDHZWTGN3uQt7hYfvLbFmf6U1hxvsONRkz1DnZI70Tmdfj6dqCui+OslV5V7SPmfSWvl4 + BPDJvS3cP7ee+xc2c/bwcuFbecRE+eAy0YiJDoayHUpdhfCa7ha6mqtZPH82Pu4uRIT6U1qQKf2ojorS + fKLmzWK62yTcXByYHeJPflYybXXlNMq5dcKjagrSqMgRrlOQTl1+OjUCZURwQ2k6rVUZornSWNWQwvrm + JdJeFrGrM5qDPdEMLYsWbhjD8eVxnOhL4XhvGnsbY1ldOJfe9BD6s0LYWBQu8S5c3tVsjpd6c0xi5Mks + O85mW6l+lHIx25wLosMv5BlyUbTBFdEB10r15H0bcKveSGUAX240E25uxSl5d0frHDhUacuuQnO2yXlb + sk1U2JZj+tgArnxsAB9tcpZ6cWRvpSUbc/XpT9RghWj9Lbn27BEus6t0CttFDynYKVz2YM1UTrX7caU/ + nItLw0QreLNPeM4B4SkXK9x4udWPDzsD+KonkG86PfmybhL/kGt/UW7M5xVGfFZlxBdNFnzeasXbdYY8 + L7z/Vtn4JwawQJn+WbTD9ZLHBvALDZa83G3Da6tc+HDPbP5xKpMvr9by7fOr+Pb1/fzj9WN8/PoZ3n7p + GK/c2cVL11Zz+2QTFwbyGdy4iD3Cx3f2BrBjWQCbe3xF93oK3NnQ48Wm5f7sWSece3sSZw6WcmmwiWsn + e7h3YR0PL23n1plNHN27jG2r6kUPlws3befUwW3cOHOMu5fP8+DKZe5ducidi2e4c+kML96+zGvPX+eV + hzd49H8MYNl388b/MoCvKgbw0ePcPn2Wu+fOc+fMaW7LtW+cOsjx3WtUBnBy5AwCJmsRNl2LmGAzMqLs + yYuxpzBWeESyPRWptpSl2Qi3t6NG4llT8TRWtsxmz5o0Lhxq5vkrG3n7wSHefXiU9144zoeC9+8c4u3r + u7h/op+zu2o4sbmQYxuyOLkxg4vbc7i+q4AXhup48/xSPrq9iW/fPsnv/3oIP74LfKkygf/g3/zOD/zC + TwxbXeFOb8FE2iW4tGZY0JljzbJiB/pLJ7JSmU8+34XGJEfyhFjGB+sS6anBVKtnMdMapkrmpkZPY2b0 + HBaGo7AynoCdpR4ONobYWxtgY6WrgrWlFrZC6hzsNZ8YwNo4O2tJqcXEiZo4OSrmsBp2dmo4Omri5mqI + q5A+J0dl/V811VTS5uajMDMbIRiOpeVjA9ja+jFsbMfIMQLbUVjbyPfWz2IlpTIC2NZ+hFxnjAQGDXzd + 9QkQ0hngpk3ApAkEOo4ifMpYoj3GE+s7ljTfMZR6j6ZlxmhWTx/NPsHpKSO54zaGV9zH8bbHWN4VYv1R + 6Hi+iNbm62RDvs+z4Idia74vteEH6Zg/NEzi+8ZJfFVvz+c1drwpROFanAb7Q59llecwGiYPo3LK05S4 + jaTQfQIFPkLq3ceQ5DaCTM/RFPqrURakoVqbpSVEnfaQcfSEjKV/jhprIjVZK1gxezzLgkbR6/ccy+Sa + y6cNY/NfU0DnPzaA/9Nhza9LrfhzuQV/LDfltz5Tfu4z58eVjw3gnzbY8sN6W37a7MhPG+35bpUF364w + 46tlJnzZbcynLbp80qzLF20mfNFqwWdyzTdLDbi88BmOBg1jv/y9I4HDOCnC5XT4cM6GP8vF8Ke4NnsY + N2YN43bYMB7OeYrXo0bxXuwEPkrS4IsMLb7K1uXbPD1+KjYWGPFTkT7f5WnK/vF8mTWGLwtG8XXFeL5t + mMA3vZr8MGDFL1dd+PX56fzy+nR+f3c6v701hT9enQQvOfD7Axt+uWfDj3dt+f6ePT++NInf3pkO/wyC + f4fDN3OemMAB8JEPf7w9ld9fm8QvL1jx272/DGBNFVQG8D09uCO4LtsXZd9ZLTiuyx9Dcr+HzPnHNmPe + WKnL9dYJHC4Zw5rEUbRFK9NAP02xvI8MeS8pgsQnSPcdRlnoc6xI0eVYyyRe3h3EByfC+efFSL6+Pp+P + z4Xy7vEAXtg5nXMiDHeXaLA+bTT9cSPpiHyW5jnP0Bo5ho5541karcamFAMGJCmcKDXnfJEBNwv1eKFU + WctL7q3Llv+smcSP6534eZOdlOZ8v1aXHzZo88sWeYYd+vw5YCIw5U/F/D2olGZwwOK/BvCAA38MOPPd + Vgfe7ZGklKvG4YRRDMaP4Ez6aC5njOBmxnAe5I/g9dIxfNKgwT9bdfi604B/LzXmu+Vm/KvXkA/bNXir + ZQKvy3t6pVWD17sNeG+NHZ9uceOzbTMEXrI9g9dXTOT5Hmte7nfi420+/HxiMb+eSea3U+lwNJ3/bF4o + bdGPV4Xw356ny+XZahwLeI59AcMYkHd+Vgj8AxF47/Y789VexfidybfHfPn6mDffnPDg2+PTBVNV+O70 + NH666s0fD4L44+VQeEvaxjsR/P7mHH59eRY/Pgzkp9uB/HJDvr8WzB+X5ZhLs+DCHH67EM5P52fz7Zlg + vjoXwlcXw/iXfPfl+VA+PjaTt/Z68vo2Dx5t8ODuqulc6XGRBG3Pikxt6mNGUzDnOdKCnyExaARxIROI + C9UjbpYhKXMsnxjANiqTrCRCGQH8xACONWVNmq1qCui/DOBV+VPoy3djeZEHS0u86arwZ2nNLPqbF7BW + xNr2vmyObKnlxM42Dm6sZ/OyIjYvL2XHmlp2bmxh3+4+Dh3ewOmz+7h45QiXrx/lgpRnLuzh6KntDJ3c + xvEzOzl7cYDzlw8IkR/k7CXFBD7BOWXajEsXBZf/jwGs7D91/qyce0quoZjAxzl87CiDR4c4MjTIgQMH + GBgY4PjRY5w7c4Yrl85z7co51Qjgi5cOcvnSXq5e3MmpI30ckPvf2p3OuobF7G5PZrBXEtyKIk4uK+BI + ewb7m5I50JbModYEtpeHsS5zOquSJrJioRnr5uk9HgG80EBlAF9OseVSsi1n4y04K2L+UqoFV0WkX0o1 + 5Hyy7uN1f2PHqgzgS2la3Mw0UkFlAOeac6fMSYjMVF7t9uWNvkBe6PXjWts0zjW5cLFjGhe63DnbNZ3T + 3R4c6/JgV+MU1ogA65FzW9ONaEpXxLwufSLodrS6cXRVIKc3zObYykD2tE5je50zW+umsLnOlfW10+gp + mkxDpiNF8eZkLjIiP86c0jR7qrOcach1p692LofWFXJ+bxPHt1SyrUvETcksulK96IydQo+QjKWRIhjC + jOgM1qdtppbK/G3wHEuL11i6/SawVHLdUp9RdHuPpMtrBO1ew+W7Z2j3eY5ulQGsIeeq0f5krflmyUXN + s7RpDNejWjF2fZXlCdSoCNWnIkyf4mBt8gLUyZmpRr7kroJQHfIEOcFaZAZqkBOmS3GkCZULrVQGcNUi + IT4LlJG/Zqp9VYssUdYHLphjqEKRygCWZ5+tT+6sxyZwRpAmKTOfTPusMoDHPTGAx5Dgp4wCHi37xpAd + rkX+XF3yI/XkGrqUzdGheo42NbM0aJmjTv9ifVYv1mHdQk02LVRj/bxRbIgcwfaoceyP0ZA4p8OxeD1O + SHkqTpfjsRocX6Ks+6vBkDJl+BMoBvCOyOfYILluffgwdkueOxKrpjKKjy2ewNmYCVwUXBfcXvLYAH6Y + MFZlAr+ars6bOVq8V6jLe3nKFNBPDGBliuh0Ld4SvJw0nofxY7i6+FnORA3jVIyUKgN4AieUdSblnCG5 + xkm5xsUKaeeq6Z9NuFMhxLzGkFcbTXmzyZT328z5oMOMTyXGfrbMlg+6zHm1QVe1FvDrjXoCfRVeqtZW + Gb+v1unxVrOJwIy35fy3640ltzwuFSP4Lbn2G1X6vFWpzztSvlOjx4uF47iZPpwbGaO4ma3ODeEgVwpN + uFBswZkia3YnG7BqvrS78HE0BY2hyn80xT4jhfuMIN9XeJDUW7lwqpo5wnvm6tE4z4DWaBG1i8xoW2j6 + 2ACWeqycpUlVqLrKBK4Pl3oN06QkYDT53k9T4D2MfK9hlEjOrQsaSduc8fRFaUld67I+zoB1CYasjtVV + jeZVllNYukiDpQvV6VmkxfI4PVYmKz+2sXg8+jfdXMSUIUvl2M4F6vRGKz++0ma1glht1kn72CzxY3um + 6RMD2OqJAaxsW6gM4M2pGnLcONbHj2ZrsjJCUFM1DbTKAE6WNpWkzokkNY6nSntJm8DxTE1VnR4t1OZY + sS6npC6PSZ3urzAWgalDb74GTZnjqEkbT0O6Nt0iCJfnW9FfqEwhaMfyCnuW1U5keYsLy9rcaGtwprrC + lrxsI+LjNVi8WJ0lS/SZLfxxRqBiAI/GSfimi48GHjMN8PE3JMhPj4VBJmTNtaUw0paScGsqwx3kvTtQ + HGBDgZ+V1JUVef7WpHubkeRlQpKvhfRBS+Llu3gfC+K8zFjiacrCqYYsctFniYshCc76JAuXz7CdQImg + SXh/v/DwjX7m7JDr7Z5pwd6Z5gJTdgUYsslHiy7X56iyHkatzTB6Jz/FHr8xnBE+fC1IjRel3l+T7YfS + fhQD+KL/eM5JHDo535ozaZ6cLQpjf24IS2OmUhxiKbxeTziZDllSFvsY0uhtQp+XORu95W97m7PHQ8T1 + ND02umiywWWClOpsmKLOOlc1VknZJ+h21aJ9mj7dvjb0BEuM9ptEuqslkU7GzFRGs5iLtjGagI3eKNUU + 0Gb6z2Fq8BQ2igE8ZQyzAgxYFGlOrLTp9GRrCnImUia5vLLYncoSd2qLvWgs83n8nyNlAbSXBdJZEUJ/ + Q6TKBF7fmaj6cdeOvmI295awvruYFc0FLG/IVxk//a1P0FHCqq5yupsLVdOoxkYH4+89icnOptjbG2Jj + 978NYFMrxejVVsHYXBkNrJi/iumrr4JiAiulmZWBahSwpcoENsLB2QJnN1vc3O1x85DSww5XdxsmT7Ni + kptiApur4OSilGY4y/YkBS6yLXCR/S5yT67OJnhOMyPQ15a5syeRkeQn72UWrXXRrBA+s6JlESvqI1le + HsTSAuE82S6syHViQ4EDu0rsOFLpyJkaJ67WT+J2gwt3K525Ifr1UqYV59ItOJVqydEkC/bHG7M3zoi9 + CSbsEWyXvrBlsTbbFmuyS+L7wUQtBoUDnEgczxmJ0VfSNbiWo8nVPG0uCpQ1uhUDeL/E3z1p41Sjfndk + KFBnp2B3hib7MrVUBvChHD3pxwYcLTDguPDzYwWST5QfdhTqcDRfl8E8HY4IDufrMFigz5DooJOKAayM + Ai4z53ChIQfkuL3y9/fmanBA+v/hcj2OVOhz4IkBvDtf8k/eWHarDGB1DlTqcqhGlyP1egw2yTVbjTjS + ZsjBdvncYcjRdkNOtepzpl6b81VaXK3Q4l6FNm9JXP+oyeyxAVz7XwNYmf75I5X5q8ab+cLj88bzaq7k + LimV7TcV5I/lvRLRdpXqonV1+KJWj8+q5fwKPT6qMOCjckPeLjbgdXkHL+Xq8kK2Di9maPMoXYcXUrR5 + kCjvNmIEp8JHc2SeNtsXmNDgr0P8pHGE244jzE5ToMtcaSdLPB1J9J1MapAreXO8qIwJoz4pkpbMaFqy + omhMV/5zdxapIVNVBnBlbCiF0T7CradRGid9KzuQtkJpQyUzWVkewJbKmeyq8mNvrTcHW2cy2BPI0PIQ + 4ZverKxyprnIloYiJZ4GsbZzPitbFtBTPoe+kgWsLlvMupIlbC+MYSg/hrO5iziXMV/4ZihnFwZyMSqI + K/MDuDIvkGsLgrgYHcrpRXM4slj6cngA5e7OLLYyZKaRJi4CexMdHMyVdVwdWDQrkPykJaopCpXRsU0l + OdQXpFOdk0xVZiwlKVHkLJlN0lw/FoVOI17eRV78bFpKk1jZWqga/buhp1w1+ndo21KO7+zl0KZ2tvXV + sbargs76fLKSFhAW4IGfz3SSUuKpbaqjuqGG6JiF0rdt0DHQRddAD0NDfYEBRkaGWFlb4eU9g5zsTPJz + c1gUHYW/r7dgBimJMXQ0V7N5ZReHN/czuHkpQ5s6OLK+mQPr6jm4oYkj2zo4uXcVZw9u5tyh7ZzcrxjB + O7l09CC3zg1x98pxHlw/xY3zgxzatZa1y5ro66phRU8DS1urqK/KlziZRU1lPm1NNfQv72TNqmV0dzWz + fFkHG9avZMf2DezZtZnt29awcWMf69Z0sba/gTXdJaxpS2dzcxw7m6MZUExg0U27Sjw4UDGDY/X+HKnx + Yl+ZG7uLJ7Oj2JktEl+2FDmys9yVPdXC66s82VUzgx2VnmwtncbGkqmsKZxGU6wdWTN1SXbXpmCmGY1z + 7eleYMvaeGvR6bYcL7bkdJkRV5uNebjSlvtrHbjYa82+OlP6srWpiB5D5tyRpC8YR75wjuJMS4rybCnI + tSMny5Z40YDzZmsyR3hupO8Y0iIMqYp1pCVlCl1pbvQr0znneLBGQfY0lqVMpGWxBUWSI9OF55eEm9KR + MIWVmd6ik7zYkukjvMWHrWnTWBPrxLL55v/LAL5c4sB9iakvKgZwiRkPS0y4L/d/t9KEW9WiiVTmr6DJ + kustthJ3rbhQYc7xPEMOpelLLFUM3zF0+A6nTTRGv3D4VeHGrJ9lwtYQE/b5GzEoOfj0DCMuTTPk6kQd + LlsKVzYezXXTsTy0VueR9PtXbTR53VaTtx11eM9FMYB1eW2qJg/c1bnjo86tEE1uRupySzTejWThvjlm + KgP4WqkFF8uMHxvAwlFPqwxg878N4MEae6l3a9aKvutJ1Jd3pUPjIl1qonWoWahLZbQe5QsFohPKlhhR + kWBGebIFFelWlGdYU5phRbHklQLhiAVpZuQLb8xLMlQZwFlSZqeZkpdlJrxLmRbYROrRmJJ8M8nvFk8M + YGkfxaLRJL70CnfrEX6soKvAkrZcM4llhjRlCAdWDOA0HZrTdGlLFx0n+9qzDYQHmrJC2tS6Chu21Tmy + p86BHbV2bKhSppO2o07aT2GKNRnx9iQscWJepBNBQXa4u0vudTLE2lwXK4k19tZmTHa0JcDLjYVzfOSc + CJqKFtFWMo/adD/hmr6sqYtkZ+citjXNlesHsr7MWzXytl+uvzLBmO3Cl09WTORMmR1HRd8eyJP8qqDE + lAM11uxvcGNLhbfc+3SSw8zwdBipWj7QyGgkU9ysCZsTQHzCEuGmi/H18cHHy5v01FQ62jtoa2snVbZ9 + vD1wd7Un1NdJZQC35ypGtDddKTa0RaqxctY4BqTOzqVYckv62z3h4y/lW/Om1PEn5bZ8UWHFF6VmfJav + z8eSoz9KVuOjhPECyV2JY3lH0VzZWrxRZMBrkntvS32dSdZly5xRNLkPo9JDOGjw07QvnEB/hjlrCmxY + JfXWV2jN0mIrOsqsaK60oaHchhp5D+WljhQWOZCZZ0OK3Eua1GtOqTWFUl/lyujfOjm+0YquVuGRHdIe + 2i1pajKX/aKFhfMXF5uQr5oCWuKAtJFC6Y9FpRMpLXNWoazcmXLJT2XCcxSUl0+istyJyjInassm0lQu + KHakIc+emnRr8qRfZ0Sbk7TAhqSFkynNjVAZwEeHdnDtxgXuP/+A28r0z3fucenmbY6dPk//mk2qkb8B + YRF4BYXjGRDGVO8AXDz8hecFEBA6n/B5scyNiiMlM5+Gtm7VWsGXlPWA7zzPtZv3uXTtFifPXmD7zt0s + 6+unuraG7NxMYqW+Y+IWsTh2IYuWLCAmZgGLYyJZvGguixbOYeH82SyaH8aSeSEkRPqTGelNcbQnNTHT + aY53pT3Jib5MJ9YXTmJHyRR2lrqys2y6xGkPtlVKfKvyYW2lNxtqA9nVtZC9S4U3t8XTXxFNR14klYmz + yFvgR0KAK9FT7Vhgb8Ic6RNhRtoEC2aamDwxgGcQHzSXvCXZNJW20tW8QupqldRhB7llTWQU15JSUElW + fjW5BVV/IzuvUoUcpcytIEuQmVNOdna55M5K8vOqyM+R7zPLyEovJCMjjYyUWLIT55OfMIuSeH+q42dQ + H+9GU/xEWhPt6EiS9pJmTVumtcoAbs2xpjnXUmAm20a0CFpzTVRTQ3cWOLJc8lhfqbu0UXf6cz1Yle3N + prwQ9pVGCF8OZ0j4z9EiV45lW3Je2vs10eq3pO3fqrLiZo2Vag31C9J/z9ZZc0Ji5rF6ZXDSZA7USS6s + m8aOmqlsq1J+GOUm792Z3dJG9xVLTiuRGFBpwVC98PInBvDhpdPZ2zODzR1erGzyoavGn7bKINqqhEu1 + xnJ8VzP3zq7n/vlNnD7QS1dDBlERHky018NedEpUZCBVpTnCBRQDuIbYqDn4eroSEeJPqXCkzpZ6lQG8 + cMEcvD3c8JzuwpywQHLSE6gtzaMyP52SzCTVMhPlWU8MYEFlbgolGXEUpkZJTI+iNmcerQWR9JaHs6pm + FpubwtjVGsa+9lkcaJvDgdZIKaMYaIpmR9V81hfPYXVeGBvyw9hZMlt4eRhHK4I4VuTJiZzJnM5x4GyO + aBAVzDmnGMC5hlzM0eWa8P6bJYbcqjDkpnDu68K9FQP4wv/bAJacsU1yx9a8x9iWb86uIsUAdhCeP4mj + zc4MNTlyqNZG7sGE9Rk6bMw0Zk/JRA5WK7OZTGFfpQv7q6YwUDaJg1UunGqZwdVlIVzsCuRojTuHiidx + JN9BNRX4q63efNLlx9c9/vy7w4Ov6pz4Z4UFX0j+/6zMQHi9Pp/Vm/JZizlv1RnwfIWGygC+/rcJLPpc + tMONMl0VX3ixyYpXemx5fdUUPtwVxifHU/jHlSp+eHktv7w/xL/fP8M/3jnHB68c4417u3h0bTW3jjdy + dk8uh9YuZHt3MFs7ZrKl058Nnb6sbfNgbfs04bcebFruw+514RzcGsOJvdmcOVDOxcEGbp1exp0zq7l2 + YiWDuzrYuaaeDb1VUrYJ39zKjVPHuHP+DA+vXOGFa1d56cZVXrl7gzdfuM0bL9zg1Yc3ePneNdW+vwzg + l27e5NENxQBW1gB+YgAfPabC7VNnuXfuPHfPnuHe+ZPcPnuEU/vWs6z+sQEcOEWH2Z66xIWaC8ezJT/G + Xvq48kMtR+oyJGaLlq0vcBb+Po2uKolb3fMZ3JovfWI5778wwFfvXuD7j67z8+d3+O2f9/nlkxv89P4F + Pn9hHy+e7eXqQCVntmRxdlMaV3dkc3tvPo8Gq3njdBvvXV3Jv14/zG9f3oOf3gG+EPyDP/iK3/g3v/A9 + w/pyHOkWUtMlhKYjzUQEtpkQDCvWSDLbVD2ZjdKQ+gtcaUmbSNliG1JnmxI8ZQxOJsOwNh6GveVw7CxH + Ym06GhvTCThY6uFka4yDtSG2VgbYWOpjbaGjGgmsrPPr5KjNxImK+asppQZOTuo4Osp5KgN4As7OOnh4 + mKmgbCv7lTWElZG/igFsbj78v8avYvrajMLWbvTfUExfSxs5xm4ENvYjVbC1G8mkiePxnKqL33QD/N10 + 8Js0AX/HUQRPGknE1JFEzxhJwowR5HsMp276cHpdn2PblOc4OvE5rssxL0wZzWtuo3nLczTvB47j4/la + /CNBn2+FeH5baMXX0jG/FYL3dY0jX9Y68omQgvfKrXkpRwhF1Hh2BDzNciETja7DqJr6HCXTx1E4Q5Ps + GRokuI4izuU5MjxGUegzjorA8bQK6e+N0KIvQoPVERNYv0CLrYv02C7EdON8TRXJXjFzOCt9nmbNjKfY + FfgMZ0RMvJKvrAFsyX86Lf82gH/vM+O3fjN+WWHGT6ss+WGtFT+st1bhR8UIXmvJN/0mfLPMkK96Dfm6 + 24ivOvX5qsuQb7pM+brDjC+l038ghPp2/LOcnTOMY8HDODPnWS5FjeHqonFcix7NrYUjuLPgaW7J94oB + /CB8GK/Me463Fo3hnSVj+EBI16cp4/lnhgbf5enxvZCy73M0+Tp9PP9IGcXnKcP5PPM5/lk4in+Wj+bz + 5jF8tVmf/5yy5+fbU/j5kRt/vDmNP990g1ec/2sA37flxwf2/OehIz+9Mpk/P5gB/wqB7+cI5sK34Y8N + 4U/8+P2dafz2mjM/v2jNL/eM+fW27hMTWBtu6zye/vmWlFcU83cCHJ/An0c0+fWgPj/uN+Zf2414Z5Ue + t9vUOFo2hrVJw2mPeo7a8KcoCRpGtt8w0gUp/gqeIlvqvWbuKDbmmXCxz533T8znX9cX8+P9WH5+PpZv + bs/nn1fn8PaQP7fXT5JEa8iOfCG2CaPoiHyGhllP0Th7uGAkbXPHsC5Rlz3ZxpLATTkt7+9Sjg53lV8v + VprxUYs13/Q58d0qR/6z2pr/rDThu5Xa/GeNFr9s1OGPHQaqKZ//2C84aPIEZk9MYEvYb8Ovu+V97nLg + qw02vNFuzNns8RyMG8Hh2Oc4lTyCc8lPcylpGLcyn+LVkhF81qwubUWL73r1+KHPiB9WGvHvfj3+sUyT + j5dq8t5yLd7q0+W9NaZ8us2BL/a48cVeD4GnbHvywdYpvLnekXe3uPCvQwH8cSUWrqXBxUz+OJbKl2tm + 807tdO4lmnM2dCyngkdxaOYz7JH2t3/BCLk/be6LEH17/VS+OhLId2dD+eZ8oGAm31zw49vz3oIZfHfe + k/9c8uC3W77worSFN2bB22FShvDrowB+uO/Ddzdn8P1lL3686MOv5/357WwQf54O4c9Ts/n99Cx+PCXX + PhHIP48F8vmxAD456s87+zx4abMLt3rtuNSirDVkLkRAiJAQ+a0i2Fqk7RdHPEdmyDMkBz1HQtAoYoMn + sCREl9gwQ1IiLMmPspPYKuIhyoKyufpUzHk8BfTSODNWidhalWarWgNYMYBX5Lo8NoCLPVha5sPSqiCW + 14ezsnUh6zrj2bkij6HtDZzc3cHglmb2rathz7o69m5sZs/WDvbv7efw4Q2cOTfApatC2q8e4tylfZw6 + t4OhE5sYPL6BY6c2c/r8Ltn/+BhliugLV05x4bKy3sslLly6IvjfBvB52X/m4nlOnjsjIuIUR0+dUOH4 + yRMMHT/GoUOHOHjwIEcHhzh98hQXz5/l8qXHI4D/MoCvXNjOiUO9DGyoZHNnCmuUXyA3xzHYncGZFQWc + 7yvkaEemCMsE9jfHc7Alli0lQaxOn8qKBCG+UaasiXxsAB9eZMipOFOupNpyWcSishbwmQQhWqkWXMs0 + 53KaERdS9GSfOifjxnE+WYPL6ULMsoxVUBnAEttvF9vxQIjTC83TebHdk9tN0zhb5Sh9X8hxjQPHhRwP + 1jtxqGESAw3ObK2dxKoSW7rl3DYhYy0Zj3/NrQj3TULaDi3z5ujqQA5LuaNpMptrnNhU48zGGhfWVk8R + keJAjdxjXowBGVF65MeaUi7PUJflTFPudLqKZ7K5PZbB9YWCItY1RNGZ40tz3BRapB31zLOmZ44JncG6 + tM7UoslXjboZ46hzH0OT5xg6vcfR7T2Gbsl3XZ4j6JSc1zZjOM0znqHN+zm6AibQE6JBZ4g6bcEatCnm + b5g2TbN1qA/Xo1zabbb3eBWKg/UoCdUnP1iTLP8Jqv9wygxQIztYS4X0QA2VaZsepEl+uMHf00BXRFtT + Ms9cNdJXafPKKGDFDP7LAFbMXwXKdt5sfdWIBuVayf7jSZb7U6aB/msq6L9GAytQ9mXN0iA3QkeF/Dk6 + lIZrUxmuRfUsdZrC1eiX97omRp/1i7TYGD2BdZEjWSd5bOu8UewRkX84VovBWB2OSnl8iRZHY9RUBvCx + OGUU8GMjeFD5QdficWyf+yzrQoexftYwds2XGBkzQfX9iRgNzsk5l5aoc0POvxUznvvxCsbyMGEMj5Sp + oDM1eCtXk3dytHlDtl9JGccrSWN5LVmNN1I1VAbwC4ljuRmnTCX9FCcXS35PHMXpDDVOZmlyTM5TphM9 + W2rIlSozrlaYcVPKu1XGKgP4UZ0RL9dIXqjV481GfT7qsuCzpcJJJJe/rCzvUKPJK3U6KvP3zWYDXqvX + 5/UGA95skvzWaiow513J+X+Zv2/UGvJalR4vl2rxqFTOLVGgzsvFY3mQq6z5PoLni9R5vkSX+6Wm3Kmw + EkFgzbkia/anGrNOMVJnj6M1eBzVvqMp9hpBgddwlQlc4D+aspBxqimdH6/xq0NDpL7K+FWgbFfP1qI8 + VJ0KiZ2V0jZrZ0mdhmlSFjhGrvGc8KZnKPIaRqn3MOoCR9ARPp5+xQCO0WFdrD5r4w3+NoD7Y7RZFqOl + Qq98rxjAfYmGrEgxYVW68N9UE5bH69O1WIu2eePpjlKnT7ZXybHKFNLKOsJbM8zYma1M/SzCVwXFAJZn + LbRkt+TnTSmarI2TfC31t0Xqck+6tJl0TZUBfES+OyHxRsGxFOERqWocE040JO1gKF/aXJEOp8tNOCEi + ak+J3H++9MmcMTSnj6RJuFJ7ptxzjtxrviX9eRYsFXHYVWBGZ6klPSLYl7e5iFh2pr7KjuwMZfTvWKKF + py2S545cqIOPvGtXn5E4Sv+f6DWeaf66ePvrM9NPvg8wIHmOxB+JI8URtlTNc6Yhyk3ymCftS3xVaF7s + TXW0u/TdaZTL/rIYL0oXCxbOkH7sQcnc6eTPnkJu8CSJDZMoCnSixM+Gci9TGtwNJfYYsdbfnK3BFuwN + klwZYMrhmYIAE/YHGLJN7mPp1BFU2w2jxn4YPa5Ps0f6+Rmp7+tS949mS5+R7Rd8R3Fd2s8liQlnQ3U5 + FmHO8QQ3jucFsjcniGVx7hSFWpHqp0+yrw4ZvrrSVgyo8zZkmbcpG3ws2Oljxt4Zxuz2NGT3NB12u2mw + x/Uxdrmqs3WKOutle4Vohl53I5bLc6yKcKd/ni8N4V7khrgT4+dCqIsVHjaGOBpPwMZwNJaGolWMnsHB + 6lnRHWrMCjZm0QIrYhaZkZhgTnaWI0UFLpSVuKtQXTKD2hIvGkv9aC7xp63Un/bSmfRUh9JXH8Hq1sVs + 7E5hZ38hO1aUsa2vjI1dJaxozqe3PpvlzTn0tebS117Eys4yelqKqClJJS4qBD+viThPNBF9JXpMmf5Z + NfXzX0av7hPzV+cJHk/5/JcB/BcUA1gFaz2s7AxV6wArI4DdPB4bwFM9H5fKSGDFBHZ2s/wbqlHBk01x + cjZRQdl2djZlkpMxk50MmepihK+nBbODHUiJ86IoK4j6sgi666Ppb1rI2sZoNjbMZX1lAKuLprI6155N + BdbsLbLghGisi1U23KqVPC25+IVKR+5LzlZGAl3NMudiuiWnJZ8eSTLlQIIx+xON2ZtoxI4luqKnNAXq + 7JI4fShRk6EUdeG4apyXPnk9U4sbeTpcLdDhUr42Z/OkX2YrfXgCu9PHPTF/J7BT+qyCXdJ/92Y8HgGs + GMBDirErOFqomMF6qh91KP16MF+4SZ4co4wmlmseUgzhIgN5DunvEsOPlplxpMiI/QXC80Ub7clVZ2+B + FgeVtX/LdNlfpsWeYnV25o9TYU+pGvsrNTlYrcchifeH6vQ43KDLEYnph1oMONAq220GDAlOtuhxul6b + i7W68r70eb7OgNfrDFWzPCkG8Kd1xnxSpsPHxY/X/v2wQJ238ibwWt54FV7OG/cYOWN5RfBqnui64gl8 + UK7GZ9XafCHX/LxGj08r9fi40kBgxPvlRrxZrM8r8jwvSs56KUPyR5o2L6Zo8zBRSzTjBC7Ml7y5QJcd + C8xoDjQkcfIEZlmPIdBqHCGWE4hw1CNG2lSCtwNpAZPJnTWdysVBtKRG0poxX4XGtEgqYsNIC5lKfqQP + NfFhEpdmUrjQk6pkb5rzAmgrCmCp9K/VFf5srfRjZ5U3e6o9GWj05lCXH4PLghjo8mVDg5vKqGkqmih9 + ayYrm8PpqQylKctPYm8IPZmz6U2PYG1KBAOCk6lzOZ86h3OxIVyc78/1uf7cjZzJ/XkBPJgfyM35IaKT + Z3Fy4Rx2R8+mK0jihos9EZYGuBpr4GCqjZOFHl5TbImZE0hR6hLqSzLpqCmmtTyPpuIM6vNSqM6OozQ1 + iry4OaTI31kcNp1EedbCxAjaK1JU5u/azlLVemGKAXxoUweHN3eopoFW9vW3FtNUnk5KTDghftPw83Yj + PiGGyroqymsqmB89HzsHW/SN9FWjf01MjFQwNTXGzt4WPz8flQGcl5PNoqgo/Hy98fPxJCE2msaaElb1 + NDKwfimHN/VweGO7aurnA+tqObCxiUNb2zmxZwXnj2zl4uBuzg/uFQxw7eQRbp8/xr2rJ3j+5hlunD/C + kd3r2LyqgzXLmljeWUt3c4Vq2mfFAC4vyaGuqpTO9iZ6e9sFyqjfpWzZvJY9u7dy8MBOBvZtZdeu9Wzf + 0s+WdZ1s7q9lS08BOzrT2dcez4HmaPbWzGJv+UwOVvpzvCGIwVpf9lVMZ0+ZK7vLJrO92IHtJcq0ia4c + avTgYKMXBxpmMFDnwZ6qqeysnMam0mm0xlmTG6BJqrsahf4GNImeW7rAgvVx5hzIsRKOZsKpIn0u1xvy + YLk191fZc1l42MF6c1Zl61C5YCRF0eMoS9SjKsuS6nw7KovsKS2wpyDblkThq9GzJxAVMIqYoDHkKFxo + sSXtSRNFD7qxtXgGO1XwYpeUm7Jd6E+ypV6ZBUe4d0mIAa2LJrE8WXJWwjTWCNYnTmd9giurlygGsMX/ + MoAvFdtzt8Ke58steanUnBfKTHm+wph71aKFapURwP81gK82S+ytteBUmTEH5Vl2J+uwZYk2fcLz2gPG + 0BGsRl+kEasizdgQbsa2UFP2zTTkiLcBpzwMuOimz1WnxwbwJbOx3LJR4/mJOrzopM3zduq8aKvO6w4a + vOuspzKAX5mqwfOe6tz1V+fOLG3uRBtyJ9GcOxmW3MwXvllowZUScy6UGqmmgD5docepKkPO1phxusZK + ZQAP1Tqwu9SGdaLPFAO4eZE2DcKJaqJ0qIrWoSJKl7JofcoXG1Iaa0R5ohllyeaUp1lSKrlEMX8LU5Vp + n83ISzElV3JJToI+mfF6ZAiHzEwxJjvdhKwMI7IyDcjLNqA414TqQoltJdbC0RzoKXFQGcAKuouVUXvW + dBRY0JpjSmO6PvWiF+tT5b6eGMAtGfq0ZurRlqWv0pH9JZaSC23ZVu/IngZHdspzbay2o7/MnoZsa0rT + bMlOdCApbiIL5k8iJMQeTw9LJjsbYyu53MZSeIqtBa4T7Qnynk5MhD8l6RJLSxfTXhJJfYYPzVlerK0L + Z1fHArY1zmJjhR8bSj1YmzuJfnkfqxOM2JkldV85kTPl9pLfLDkobf0vA3h/tTUD9a5sq/ajI9OTtNlW + eDuNwUx3GKYmo3GdZsfsiGASEuOIi4sjOCiYkMAQCvPzWb5sGV1dXaSnp+M/0xvP6Y6E+U8kY6GH8NxQ + VhT5qEyxlojxrAobx8B8XdHvFtzNFQ6QY82jPCveKrLi0zIbvqy05ssyc74olHwkufkD4dofCB9X8E7y + eN6UfP56jhavF4u+qbDkjjzDsXgN+gOfoVIZrOM+jPbZI1idKJw/355tRY5sKXRgY6E9qxWdrxjAcl5j + uRV1ZbZUlztSWjqRAqnjzEIbskT/FEh/Kq2xo7rWhoZ6a1oaLelutWFphw3dnTa0tlrKfun7leaUlIgO + LjJ7PPpX4kBhsRNFJc6UlLqoUFo2hbIK4Y1/QWJVRdkkKksnUVPqLPxxEo2FTtTl2FKZbEV+jBlZCy1I + ibIlOVqOz4lgRW8Fx4/u5PrNi9x7/gE37tzj/NXrnDx/kX2Hj9K1bBXxqVn4h4QzI2AW7v4huHnNZLK7 + P66egcwMmUdoxCLC5i4mIVXicUvHYwP4xl1u3H2e67cecOXGHc5euML+g4dZv3ETbe3tlJQVk5mTSUZ2 + KulZKaRlJpKekUhaRhxpabGkpi4mNSmatMQFZCZEqn7YVBIbTHW8H02JnrQkuEjcc2R5hrT3Ymd2Vriy + t3K6agribWXubCn3lHY6g5Wl7qypkvzeMZ/d3TFsbF7EsrK5tOfNoTIplLwoHxICXIiaasM8h/+3AWxM + iK0yBbQXSwIjSIuSvFtQJ3qqT+pqDY2t/ZQ3dpNX1UJmSTV5RTXk/w/kFco+Qa4g5y9TOL+C3LwK8nOr + pH1XU5gr29ml5GTmS4xIJCMtSvrrbArigyiN86YmYTr18a40J0ykLcmOzmSJDxKbW9OlzWdY0ZRpQUOW + mcBEOInkHBWMaM42pV24cW/JFPolN60sms7KXIn3eZIfioIZrBSuUj2LU+V+kpNcOJ1jwcVcQ64VGHK7 + VOJ7lSW3JU5er7Hkcq01F6Stnm2w52SDA4N1jgzUOLKraiLbKhQ4yztXpoK3Fz4qfb3InIFiUw5VWKBM + YTwk5w21O3OoZ5rKAN7W7ce6ziDRKaF0182is3au6JUlHNvVyN0z67h3biOnBpbSUZemMoAnOxri5GDM + 3PCZlOSn0d1WT0tdOTELwvGaPplgfw9y0xPoaK6jqryQ2Jj5BAd44+/jztzZwWQmC1fKzaA4I5mC1DiK + 0uIoy0ygNi9NhfLsRPJTFpMVF0GutLPSlFDqM4PpKg5mZVUQmxoD2dY8kx2CXQ2B7KoLYWdNKFsrQtlQ + FMKqnABWZCnr6c9kZ0EAB0oCGCrx4Vj+dI7nTOJUjp28XyvVOz6da8ZZ0evncwy4JHnyep4et4uNVKNk + b9UYc6Pe5H8ZwMckRykG8B6J89slp/2FHUWWkuf/pwGsjAKWuqm3Y5/Ejq25emyXXHOwcjJHG4SzVLuy + v2ISBwQHy504XDmJ003uXFsayKVO4T3VUxksmcgxiWU3qqfweusMPu325ZseX75vd+frOgf+KZrksxKJ + nSU6fFSmp5ol6JMms78N4Jul47heJqgQzVSuwbUyTW6W66r+H+qFZkse9Vjz2srJvLcjmI+PJvDltWp+ + em09v314lO8+OMPHrx3jref38+jGJu5fWMblwzUc35bJnr4FbGgJZH2LvONWxfz1ZnWLu+hgN9Z3TWdT + rxd71oVyYMsChnYmcnIgjwtHqrh+oo1bp5ZxaWgpR3Y0yzH1bFlew561HZxRDOCTR1WjdZ+/dEll6L58 + 6zqv3r3Baw/+i1fvX/9fBrBi/v7/M4DvnTsr93+KexeOcnb/Rvob80md50WQ8JY5XvrEhVnIZ2vyFttR + muAgOXYSbfmutJdNpbPKQ3SGHytbQtm1Kp7Te8p5/kI/H720nx8+vsLv/7wD3zyE716Af93hz8+v8M3r + h3jjSj/XB0o5tzmN85tSuLEzk/v78nl5sJI3TzXxwdV+/vX6QX798jb8/BbwieAz/uRLfuMbfuHfDOtK + MqFTSExPiiHdKfr0STBZU2jC+jILSd5O7Kifyubq6ayRANuZ5UJ5rD0xM7XwmfQcrnbPMHXSWOms43Gw + Gou9xQScrHWYZGukMoDtLAyxtjDASgKspaUGdjZa2Dto4uiogaOTGg6K8esg59qPx85uPPb2E5g61VCE + hrXABjchiMroYFvbsSrjV4Ey7bOd3djHsFfKMVKOwdZhDDZ2o7G2HYWlncB2JNayz9phtOwfJdcejdsU + LbynGuAn1/V2Vsdb9vk5PEuw89NEuD3DIrenyXB9mjKXp2mb+BTrnJ7igN3TXLB/ljsTh/Pi5OG8Nm0k + 7/iN4f0IdT6N1eXLLFP+mWfBF/nm/EMC4efltnxcbiPC2ILXhPTdTdVnKGI0G32H0T1tGM3TnqXGfQxl + nhoUzNAmbdoElkwazhK5h4zpIyj2Hk1N0Dh6IrVZJ0R062LlV5W67BPCdUhI50Ehnbtj9NkwZzxrgkay + PmAEm/2f48CskVxeosZrEsz/2WjBj10W/N5ryZ/9Csz5fYU5v6wy5+c1Fvyw1oLvBP9ZZ8l/1lry3UoT + /rXMgH916/J1jx7/XmrI98uM+GG5KT8uM+f7HjO+7TDn01oDXkgfydWopzg3ZxhXF47kbqIGD5Rfcydr + iKifwAvxI3ko39+d/ZcB/AxvRo3gjYXDeTtmBO/HjuTjxLF8mabB11lafJ02nn8mjubT+OcET/NJyjN8 + lvMsnxUM56Oq4XzWp8ZXAyb8cNGRX+678MejKfCK4NEkeMGB3+5Z89MDW/7z0J4fXpzIr6+7Sjv3lQ4z + C36IgJ/mSxkJX8nnzwP4/T13fnndhZ9etJXzTPnljv5jE/iWYvw+mfpZGf17QY0/TozhjyPj+P2AGr8O + aPPzXmO+3mbMeysMuduiwfHSsaxLHE579DPUyvsoCxlGXsAwsgWZgQqepijsOZoXTmC3BPR7WwL46noS + P76Qwu+vJvPHa4n8/NIS/vNgIZ+eC+WlndO4sNRKgrYua1NG07XgWepDh1Eb8jTVQc9QHzaclXFa7Mgw + 5LAE+mNZupxO0+SalM8XGfN2rRDdLjv+1WvD18vM+GapHt/0avD9Cg1+WqfJb1v1+HPfY9P3t4PG/Cr4 + bb8Jv8n7/WNA9u215Put5ny3xYrPpa08ahIBlTGG/THSvhY/zfHE5ziX9DSXkodxO2sYr5WN4B8dE/j3 + MnV+XKnNL6v1+HmtPj+s0eHfa7T5ep0en23S58PNRny604qvDjrz9eA0vjrszldHBIc9+OfBqXy815nP + pPzhbDDci4c7qXAtld+PxfPRcn8eCaG+vEiHw9LOD/o/zW7/YewKf4bDylR9Faa82O/CB3v9+PeFCH64 + OY/vbs8RzBaE8f2tIMFM2e/PLzelXTwIgJfl77ypmL+B/PnIh5/uuvPv6258c8GVb0+58f2Jafx4wpNf + jvry+5C0maFgfj0Wyk/HQ/nmWCD/HAzg08P+fHDAi0cbnbkhdXayWp8DeRrsSBnP5gQ1NsROYNmiCVRF + jCB31rOkhQwnOXgU8SHjiA1SY1GwYgAbkTbPiqJFDlTHOlG9yJrKuYYqw+qvEcArEi1EcFmxIk0EXoYT + fTmTWV7gxrISD3oqfFleK4KoeR5rOmLZ0JPM7tVFql/VnRno5vjOdo7uaOPI9nYObutgYHsnA3uWcfDg + Wk6f2cvFy4e4cGkvZy5s5/ipTRw5uprDQ6sYOr6Gk2e2cP7iHq5eP8LVGye5cv0Ml6+d5/LVS1y+fJlL + F6/KuYIrign82AA+e/k8p1Um8FlOnD2tMoNPnz0j1z7J4OAghw8fZvDQECeOHefs6VNcvHCS85cGuXhp + P1cu7+HKha0cPdDF7rUlbGxLYFXVPLbWL+ZIZyoXVhZwdVUJJ7uyGKhbwt66xexrWChCbCb9KVPojRVB + Pc9IZQBvX/DEAJb3dyXFhivy/s4lmHImzoiLKWZcyxaCm2HChTR9ziRpcjJhPGeT1bkqIvsvA/imxHXF + AL5TYM3dUkfuVjtzp86Fq0KiThRacSjXmCMS4w9JrB8Q8ben0oYdVXZsqnJgdamdCHULOnNNRbQbiojX + oTvHiLXy/Z7OaRxc5s1A53Q2C6leV2ErYt6BtZVOrBSi1pErIlJifN4iPTLkOQpijalMsRWyP5HmnKm0 + 53vRXzWLbZ1x7OlNYXlJCI2JU6heYENTpAVdEWZ0herRPlOTJt8J1M8YR7X7aKqnjqR++khaPUfT6TmK + DvcRtD9Bq8dztMx4jlafEXTOHE9XkIZcQ5OOUC3aZuvQGq6nGv1bN1ufkiBt0j3HCMaSF6hNfrCOxDt1 + Un3GkjRjNCl+40iXzwoS/ScQ5z3m8fIKwdoURhhTFmVJ6XxL2VZG/BpRMs+Mimhln4Xq+8cwUaFgjjF5 + sw3JCtEhdaY6yX7KFNATSJX7eww1gWIGj1eVaSHqZISqqUzgrNma5M7WokjKstkaKnOxIVyNZQv1WL3E + kHWLtVm/UF1lAK+VWLIpYji7FoyVOKfOocWaHJHyyCI1Di8cx+DixyN7h+I1OR6vxdEELQYWjWXrnKdZ + KzFfMYCV0cDKqGDFLD71Pwzg65KTVQZw3ATuxo3mnuS/5xPG8kqasqaiGm9mKmv+TuBRwhheiB3BS7Gj + ZHscL8kxjySW3E0ax4XFz3A8+ilOJYx4PAI4+7EBfKJAj/MiIq5UmnK9StqqxP/7NaY8rNLnYaUu90vU + uV8s16pU591WY9VU0O+0mfBStSbPV6rxYpWmajrot1uNBMa8227Ke+3mvN9hIbDkg3ZL3msy581aQ16u + 0OGFYrle7lgVHuSN4UHuKO5Lrr6X/Qwvyt95XWLgazUmPBIh+bDWToSADeelrxzJMGVjlAZLw8bQFjSW + ap9RFHoMJ1/aXZ7XCAp9R1IaPJbKMDWBBpVSf1WzNFVmcF2Ermr0b0WourS98ZQGjFWZwFUhGioDuCJ4 + HEX+IynxG06Jj3A3H8mXAcNVBvCKaG3WxkguFf6kGMBr4/VZFaenQn+crgqK+dsrPK5nicTbOH2WJxkL + jOiWc9qi1WmJHCd5WE01anilHLcuwYDNaabsyJY+nyfCN9/mfxnABwss2ZtjyuZkTdbFjmGt1Pdmqc/d + aeoM/P8wgIfS1RnMUOdortRtoQ6nK4w4UWWk+jHY6qxRdKVLH019jo7M8SzNkTacJxxd/tZKKZX14VrS + dWnKNaC1zIxuEexdLZNoljrIFW4Qu2QM0QvHsDhWi+hYA/xnT2CK7wgcZ4zA3mM0rn5aeAbo4OunwWw/ + bZbMMiE7UvLSPAcaYj1ZlhHCxrJF7K5PYVdtMlurElhTHsOKsoWsrIxlRXWCiOZ4iV+xrCqJYWXhYnpz + 59OZPkcQRldqCN1J/ixd7E5f5CTWzLFn+1xH9kTYcTDMksEgU44HGHM80JihIGN2z9Slb/oo6pyGUTdp + GL3uz7JP6vv8HInPs7R4Vcq3wnV4FDCOWzPHcDVInTMSXw7PNpI+6MTBDG92Zs6kN96dglmWJPvrSizS + Ic1f4pWvHlVeenR7G7Pe14ztvibsle0DUh72MmTQQ5ej07UZmqbFoala7HPTZOtUaUfTpL24G7I62JGt + SwLYk7WQTblL6M2KoTxuDgkhMwid6sAUC13sTSZgayJaxGy4aKFR+LjrECECMHaxA3Fx1sQlmJOWYU9e + 4RQKi6dRWDSVsiJ3Kos8qCvypqHIh2ZBa7EP7aV+dFcES56fKwJ4CduXZ7NzRTG7VpaxY3kF6zoK6W3I + oqchg97mbJa15qsM4N6WEurL0kmIDsXXcyKTHE1EfxmKDtPBzFKZ8llLNeL3L+PXyFQbQxW0BMr6v8p+ + xRz+7whgZdvYQkc1EtjaQVnr1wpXd2Xkry3TZjioTOCpT0YCK0awsl/B5KlWOEw0ws7RAHsnQ9W2k5MR + jvYGOMs+t8lG+HiYMyvInoTFHuSk+FGeG0xT8Rx6queztiGa7c1R7KyfJW1vBpsKHNgu+fWA6NQz0t6v + VZhzr9qKR3UOvFJtJ3zRhuelb9zJNedGlhUXM6w4IdrpsGjdg9K390kf3rFEm60S37ctGs/uJRM4lKQu + fVFZl1tTuIEWt3J0uaPMsFNswOVCXU7laHAkcwL7VGv+jmObbCvYLn12h/Td3ZnSVjK1OZCjw8FcPY4U + 6qswWKTH0WIpi3U4UiBtSvr3frnWPon9e7LVGMjR5GC+DkOlBhwrN2WwTNphsaHKAN6Zq87O7Amqcm+R + nFeqzUCpJrslrm8vGMfOwvEMVEhMqdXlcJ0Bh1TQ40CtNgcbdNnfqMtAk47KCFYM4OMt+pxt1OdKgyF3 + Gox5odGE1xuMeF/wtwEs2kM1BbT8vffyJvDGX8Zv/gRezBknGMvzmaMEI3kpZxRvFo3jvVJ1PqvS/dsA + /kzyz6eCT6oMRcOJXioz5A15B49ypc8qs1ukakv+0+WlZMkpidKnJdaeXmzEnoWWdIaakjJFnVDLUfiZ + jiTQZCTh1mosdDEizsOCVF97ckJcqImZKXFvPm1pkRIX59KUMoeq2BCywqZTssCPhuQ51CaGUhbnTX2m + H21FgXSWBrCszId1lb5sr/Zhd80M9tZ4sKfOnYPt3hxZNpNDvf5sa3Wnp9yRlkInuiu96a0OoiXHm7IY + 4VnSPusXe9O0yI+eKH82R/txKCaQE7EBnI3258JsT66HePD8bG9ejhDtMtef+xEzuRYZyLmoWQwtmcv6 + iECqPaaw0NaE6SYaTLTQwtlKHx9XW+LnBVOaGUdTRY706TI6qwtpLc+iqTCNurwEytMXkhcfTvJ8P2Jm + TSNlgT8lqfPorskQ/l/Bpt4q1X94KVNAD6xr4cCGNnavqld919dSRFN5GulxEcwN8SIsyIu0tATqm+qp + aahlUcxiXN2mYGNrrZry2d7BRvqowMGWqW4uhM8KobS4kLKSYhLj4gkLCVJNAZ2SuJim2mJWdNWya3U7 + A2vb5G83SVknqP7bAD62u49zhzdxcXAXF4b2CfZz+fgBrp06xK3zg9y7cpRrpw9wZNcatq/rYuPKdlb2 + NLCso5bO1ioaa4qoqZRnqKugp6uVvv4eVq/uY+PGNezes51Dh/YydHSAw0f2cGD/VvbtXseebf3s3dDJ + 3lU1DPQVc6Q3i6NdiRxujpa+Es5gXRgnW8I52hQs/UZ4efV0Bqpc2V0+kd0VThxtcedEuxfH2mYw1OLB + 4abpHKxzZaDWje2VrnTEm1EQMJ706aMp9leWGTFm2QIjNsVLP86xEJ5myMk8HS5VGXC/25oH/Q5c7bZl + qM6K9dl6NAiPrIvXpjnbXOpYeH6JA3Wl9lQW2FIssStjiT5xEco6wWPJiFCnWHRhdZQxXYn2bMmfxqEq + X4YqfQS+HBU9uL/IjS3p9nQu0KNCOHHRTG3qI+3oinGle9FkehdOok8FJ5ZH24hmMvtfBvDFYnvulNvx + sNSCR2WCSgterjbnhTpL7tdZcLfeklsNltwUXGuy5kKtPGO5EQPZ2uxI1WFjrA7L506gSzj30gjhWdGm + rBbOv2GuBVtnmbF3poHkWX2OST49P0VXNQX0BRs1LlsLP56ky/NTDXngosdtxwncsR7HK3ZqvOOkq5oC + +uVpmrzgrckDyfX35doP5J7vp1hxN9taZQBfKbLgUqm5agTwOWUN4EqDJ2sAm6lGAJ+qd+BonRN7yuxY + L7mhN0m02SLhmFFa/8cALl1sTOkSY8pFf5cliz6Rd1OUaklBijm5SaZkJxqTlWBMhvDHdHnm1BiB8MO0 + REMyUgxJT5X9ovuy0kXDiQYsyzOWvG5BR7Hd/zGAuxRjuMiK9jxzapO1qUoU7iv8sS5Fi0a5RpNwu5as + xwZwT8FjA3htlS1bGxzZ3ejIjjp7NkjeW15mT3OeLZWZDuSnTiQ1aTKLo5V+OxEfbxtclWUglP+btTWV + vGvNdBcnQv08iZsXRHnWAjqFy3WVRYjWnEFrjgfrG8LY0xXJjqYQNld4s7F0GutyHVkpHHmtPOeuJwbw + 6XIHjslzHCiQ+hU+urfYnP3VNuyvd2NnXSA9OX5kzrXH11kNS4OnsTQbz3R3JyIiZ5GYlEhiYhIR4XOZ + P3cBNVU1rF2zlmXLlpGVlUlAsC8zvCYxO9iF7CW+LC2NEI7pT5twqMbZY1gVJpptnjYXE824n23DC1mW + vJJrwTuFFnwquvyfVdb8s9yczySPf5irzbvparwruuqd1PG8kTae1ySHv5qnzRulxrxWZcUd4RSHY8ax + 1G8YVVOG0eT3FCsWTGBHpiUDxZPYXzJZMEm1vb3Ukd4SC1qEgzRKX6kvtaZG3kWFxI4SeS950o9zy6Qf + V9lTUWdHXZ21xC5rWhss6G6xYmm71H2nNe1/GcAVlpTI9Qrk3gulnRQUOUk5icKSKRSVTlWhuGwqJWVu + KpQKykpdqZDvK0tcqC52Ef7oLHnCgep0K8riLclfbEG25NW0KHtSo1wpz57Lqp5KTg7t5OaNi9x5cI/L + 129y/NwFDhw9zqYde2lqX0pMYhq+QbPwCXpsAk/3UUzgIDz8ZxMyZzGz5sUSOnexHJdBVWOrygC+fPMe + N+4qhvJ9rt++x4UrNzh6/CQ7d++lf8UK6hrqKK8qo6yykNKKQkrKc+UZ8uRZsikuyaCoOIWigiRK8xOo + yFtCbe5CGrMiacsMpTNDuHDKFDpTHejPcmBL2WT21EzjQN0M1Y+4tpRMY71gjWB5oSsrymewtXU22zvm + s64+kp6iUImxIVSlBJMX5UVCoDNRwksj7Y0IF64baqRJiLEOgWbGhNk7EjltBovkWRMiYinJKqe9qZel + PetY2r+Jpp5VlDZ1kV/ZQHF5vdz/f1FUVqdCoaCgtJZCQUFxtTxbNcVFNZQW1VJSUElRbhn52TnkZC0h + Mz2C7KQg8hN8KU3woCbRjcYEF5oTHGlLsnliANvQmmpNfbIZtSnGVKcaCvSpEx5VJzGmXvnhSLqRxAkb + ugskvhe7sqpwKmslR2wrmsH+8iBO1oRzvi6UC5IvLkg7viAc+nKuITcK9LldasLdagvu1dlwR3Cj3pZr + jXZcanbkdJMDh6U/76mwZnuZNZtLbdlSasfWYluVIblHMX8LjSX3GDMobfiYtPXjdY4ca3XhQI87e3q9 + 2d0XzNblc1jbPZf+tvksa4lSzfBzbHcdd8+s4e659Zwa6BXdkkP8opl4TbfFY7oD0QvCKC/JZnlPi2rp + h6S4KGZ6TyMs0Iu8jES62xqorymTWLeEuRGhhAX7s2DubFLjF5Obqpi88RKvYylMiaUsM5HqnFSqsh+P + /s1JiCJ9cTjZMaEUJwRSk+ZPR4E/Kyr82VDny+YGL7ZI+9pS7S3xz4cNJT6syfdihcTHvnRPVqR5sj7T + k+05nqL7vRgsdGcwx4UhaZ/HpR5OSHw8kW3GyRxTTuf+ZQDrcUN0+r1iE+5XmHKnxuT/qwG8t9SKnZIb + dpXYPIbEF+XHS38ZwMroX8VoPyIx5UCVuegBQ3YXmgunmcLJ1hlSusl1RA+XOXJEcsNghSNnG6Zyvduf + Kx2+nKpx43iZxO9iR+7KsW93ePFFtw//7vbmx47p/LvekX+IHvlYmamuUJN3i7X5QHLqh6IV3lH0Q6Xo + JNUI4HHcqFTnWqWmaDEtboiGuF1tzPPNFrzQZcmj/om8tXUmHxxewj+uVvCfl1fx83tH+Padk7z34gFe + vr2dexdXcuNEB2f2lHJ4fTJbOyNYWefPqnpfVjcqo8c96W+YRn+jC6vb3FjX7c7OTOIs8gAA//RJREFU + NYEMbIrg4NaFHN2TxtlDJVw52sD1412cP9zB4PYG9m9sFL1cz4H1su/gdm6dHOTu6dO8cPESj67f4LU7 + t3jt3k1euauMBL7Kq/du8Mb9x/tevXND7u0mj25e4+Ub13jp6hUeXLzA7dOnuHr06N8G8N2z57h/4RwP + L58RnODCoS2sbi0hI9qXYDc9IrwMiBX9nzzXkpxFtlQkOdGS60qvxKh+eb5VLQGs75zNlqULOLQhjQsD + VTx/oY8PX9jLT59c5s8v78C39+G7h/DVLfjiIt+8foC3rvRzY18RFzYlc2lTErd3pPP83lxePVLG2yca + +OjKcv712gC/fnUTfn4d/nhfZQL/qRoF/C9+42uGtS7SpCNGi54ELZYK8ViRoc26fD3p4MbslE6/t96F + PQ3T2S4dYW2ZO+1ZLuTON2aB73iC3ccw010DTzctJtuPx8lyAhNttJhka4CDlQF25oZYmRv8P3S9Z1gU + 2dr9jY45AJJzzpgVzJjFnAUk55xzzlkEBRUVURSQZBZFQTHnODOGyTmcM+lMOJNn/L13t3PmPM//ud4P + 69rV1VXV1bX3vu+1evXeWxK+LuYWmlhba2Jrr4Gdgzp2QvDsHVQFI/8ygEdhL+WMGcYsWWyvxMyZRowb + q46tzUjMzQdjaT5EtkeIIBmthIOcqzB2FQawncMobKS0thuhNIAt7IZhpTSAR8pnvhwdPGH8GGY7GTB3 + qgGzJ2gxU46fZTuAeQ4qLB2vwjqB/zgVYseqkGOnQo2tCs2WKpyxGsAVuwHcHTuQ16YO4S2XEby7Qp2P + hPR9HmrKZ0ImPxby9nGcFR8IEXonQUhIjBkPI4257KtD+7Kh7JitQslUFQqmDyN7ljppLjrEzdbBf9Io + 3BwG4jl+AOHThpI0Zxj5i0dRu0GHQ94SUEMlKEQpRtLYC7kdy9loa44I+TywTp3drsM5sGw0hxYP5/jq + UVyXOnwea8CXeeb8XGHBn1steLFNgb8M4NqXBvBPCgN4pxk/7DLnhx2mfFtjwFeVOnxZpsk3FXpK8/eX + WlN+32HBH7UW/Fpjxk+V5nyRb8DzqJHc9hpI/3oVbnoP57UIfSFQRjyN0ucNETqKH7Wf+g3j8YZXeLx2 + AE83DuKtjUN5vnEwzzfJttsg3vEYzMdeI/jMfzT/8BvBP7yH8qnXK3zmPZBPAl7h49ABfBoxUJ7lQD4q + Hs7nu7X41wkLfrkyjj9uj4eHEwTj4L49v9+14Zf7tvz4wE5pAP/x9jT4fIF0GIUBvAZ+2wS/bpDXq+Cf + S/j9vRnSFybz02M7/n3fjF9uG/DbLT3+UJq/iqmfdaFfixdnVfnj2Ej+7FTlz7Yx/NGmy2+tpny9x5h3 + qwwkSapzMmYEu/0GU7JpIFkrVUhxVSFusbSfJSrEKMzgJQNIWz2MSsX0cgUTeNaxml8eR/HizUh4Kxje + DuDPN3357akXX15dxRtds7m9ewKn8o1pCFdli9tgspcKEZVrpixQIW3xK1Rv1qAxyICOcFOOBetx0leD + PhENtyW5PEkx4aNCGz4rseAfpYZ8UaLF12XqfK8waOs0+bVBlxeHjfmzy1xp/irRYcRvbcb8ftiEXw6Z + 8c0eE76uN+ejalPuZ2lxKmg4h90H0u6mwin5rheCXuF62EAexg3h7cwRfL1FjR9r1fitXovf9yigrRxt + /FujLj83G/FVmwmft5vx1TF53j1T+OG8JJazzgInvpfy+55pfH1qMt+em8Hvt1bAq95wzweuevPbSTfe + KnPiRrg5p1aNpHn2AJpmqbBv7kvD5Xi4JjdKHXjzoAv/PL+KXx7KOU+8+fmZBz8928RPT9bzy+tr+OW1 + lfz6eBl/Ploi13eFJ4vhmeD1efxxx5kfL43nX71j+fq0A18fHcu3XRP4oWsqP3XIPXXNFSzk1+OL+eXU + Un447cq/Ti3h86Pzeb9tFg92jqW/0JQjsWPY7zecmrUDqVo1iKqVQylaOZyk5cOIEAQvHUmgqxq+rmPw + WqyJh6tiCmgRkRtsRGiOI8d3IjmedqSuMfjbAK7wNKFGhE61rwXVQgK3hjhQHTmBqhhJHn8ZwDU5K6gr + dmd3hR8NW0M4XJ/M2bZSeru20tNWSW9ntRCrrZxoqaTzUBntzZV0tdfSc/YQFy920HfhID3nGzjZvZNj + x2s4dqyaYye2c7q7nvN9B7h+8xi37/Rw49Z5rl2/wNWr/Vy53M+l/kv0X7rCxStXBQojuJ++y4r1gS/Q + 29+nHA3c23+RPkmY586f5/Tp00oD+FjXcU4eP87Z7lP0nj/NhYvHlAbwlcuHuXJhP8cPF9NUG8uuAk+2 + Ja+iIWM9R0v8uST7bten0lcZIaR/s5D+TTRnrmdX9Fyq/MZT7mFF5VoDdqzVfWkAe/xnBLA1lwMt6fU1 + ocfbgN4AY64oDOAwEy4IaT4XoMVZPzXOBWpwOUyPayLWr4UJKQ4VYhZhwu1oK27EWnNdBNmVRInBIt5P + S7zvClOs02ciQtCC1gQzDiVZsD/FmgYhbrtS7NkmeWBLrAXlijWdhKCXinivTbZkv8QBhQl8qGAS9XJs + nQi+nUKqa0Uo1iimB4u1IyfUgnhPQyLd9Ij3NhHRYidCaByFkVMpE6K5JXEh29OXszNrtVx7BsnrLKWd + GZK/xpTSFUaULdaieK46+bNHkTV9BOlTh5I6eTAZkrvyZgynWHJQ8fShShQJCmcMoWi2bM8bSdkCNTlf + g/JlWpQKilfoU7RaX2kAZ8l2zHwNAqYNJ8B5JGHzNAlfqEnwPGnXs0bgPWs4vnNHE6CYqln2ec0ZjZt8 + lod8pt9cNcKlzSeusyBhjTnRy40EhsStMvlrNLAZsX8ZwLGyT4GYlcZELTcgdLG20vz1VxjA818awMH/ + wRJ1QpaMIWTpGKUBHCJ9TIGw5WOk32kSt1xDns0Y0ldokLNyDBWKdWE9DdjlLjzn/zGAD64bQdsmNTo3 + qdOlmBJ6wyjBCLo2jeL4ZjWO+2jS7a/NaT9t2txGsm/FAHZKrH9pAA/62wDu8dT8ywDW4KrnGG5sVuWu + j5rkzRHc2TyUe17DeTVgFE9DVHkWrMYTv5E8kv13JI/c3/gKDzZL/vQdyetBY7gfrC7XGUq3xOBu32F0 + B8tnhGtwKlLrLwPYiEvpplzLNBcS/9IAvp+mx51EDa5FjuBy6CDuxA3jeY4u75ea8WaBoRB3uW6KmrJU + GMDvFBsrp4b+qNKKjytt+KjC+iXKrHhPSPwbmQY8StDgjuT+68GDuSG4Lte9HvwKN0NUuBc1iGdpGsrR + wu/kWfJcBMmrWXYiDqzoFZF5KtSM/W5aVC0dRfHCkWQIx4l1HkKk0yCiZg4lzmU4iYtHk7pUTWn0Jruq + k7xETfKputIIVkz9nLRYlfgFI0mYP5JU2U6Tek9fqiFQLJkxitSFI0ieP5hkyQ1ZCwdTtmI02zZJHXvo + sksxClhpABuw01efHYI6PwNq/Y2o9pE4u1mb4k3S1uUeyyVGVMpxpXJO4Xp1pQFctkHxxwEttnvpsifQ + hP3hVjRH29AWa/9fAzjGks74/xrAjX8bwMNpVBjAQRq0h2hxJFSLY0FanJZ4ozCATwaqKXFc6lmxrvOp + KE1Oi+A6l2rEmXQjDkSMEqE5iNKAART5v0JluBq1Uu9740xojLdkR4wx5cE65PqPEQGrSWakNvkpphTn + 2FEoIj4+1pAAfzU8vdTw9tfFw8+QhavUmDJ/KA6zBmMzfTATpK9OX6TBnHljcBVsWmpAsPTR2I2OVEQt + 5UCOL2d3pnGrtZwbkkMuNhZypj6Lk7szOSUC69S+QikLOF2fR/eOXE5vz+TY1lTay+NoLo2guSSE1kI/ + WjI3ybObT3PAdI76z+Ck5xROrrbmjKsp5xcbKXHW1YTORVI/M0eRN0F4uGDrrCF0LNOmf60hdyQWvbHe + iHfX6vNE2sod6euXXOVZLtGizVWXQ+utOSTX3xfsInXpROwKC/wX6OI7X4fA+VpEzdUlRXh3sYsRO+ea + sn+eCYfnCc9eaMbZ+aacczGkb5YuvdO1OeskdeWsSYuzNnuddKmbYcS+1VM4GrWBi0Vx9G3N5lhVDrUZ + 0ST7bGTzktnMdDBlnLkmDuaiaSxGMNlRlfmz9Vm30gY/7/EEBo3DN8AG/2BbwmJES8VPISpuCvFxziTF + TCMzZhY5EuPzY2dRKNsFguL4uZQnL6Y6cw17ywJoqoqkeVs8LdtTlNNBVxdEUJETRFVB+EsDuDyJ6qIk + 8lLC8N20jLkzxv9lABtgZqaFianC/NXCSLYVxu9/DGADEy2BJnrGGspSYQYrTWDlGsAGKNYCNjJTmMd6 + WNgY4jDeTDkC+H8awNNm2cu2nUC2ZzsqMWmatdL0tbbTFS2mJ1rNQHSfnK8wgMcaMW2qOQtdbFnlOhYf + 92mE+MwiOnAuaaGLKIpbIc93Hftz19OWv4r23Hm0pkykLc6S43FGXExS/JPehEfp5jzPsuVN0axvSD59 + Pd6ChzHm3I204mq46KcQiUOBptLuDGn31eOQlxYH3NXY7z6KVk9VjiinY9eQ47S4GqnLHdFR90UD30kV + DpGoz+mIMXSFjOawxN+Dgv2hqgI1DoSOoSlkDM2imw+H6dAZpUtntD5H4wwEehxP0OeEnH8sQUf4ghbt + kWNoDXs5ivhQqMSFCDWJHxocidfleLIRx5KNOZJgQHuc6L9odQ6IDmiKVKNZ+GVborRxgcIAPhgn58er + 0pmhw7FcQ44qkGNIV5Yu7ZlynHD3w9latOZo01mgz/FiA7qLpG0XGHG1QHhNvimPJF6/IVrjvTxjPpZt + hQH8caqucgTw+zHqvBU5mmdRo3ktSpXH0aqiZ0fxIGIkd0OHcUdywMOwobwRN4p3E9X5LE2Xf2Tq/WUA + v8SnGYZ8lmHCx5Kf3k0y5HmMLq+HaEpeE50aqsuzENGTop8fBprR521Ox2Ybtq60ItRJk2WWQ5lj+AoL + 9QeywmwYm8Zq4Cm6PWCmOVGLx5K7eR5bI9dRGiwcKHAlBf4rSPdYQPTKGaS4LaQgeC15QbLPfz55EQso + Ec60JW0RNaku7E6fQ1PmHFqzZnI4azotWU50Fs/i6JZ5SgO4uWwW29LHUxLnSGnCNErjXMjwnSJ8woaY + ZY4kLJ9I0rJJZLtOosZ1Ik0rnWlf48zJ5U6cmT+JSy4TebRkOs9XzOHpytk8kPLmShcurl9Et8dKmtYu + oWjONHzszZhhosEEC00mWeviMtmGgI1LSY3ypTAjii0FSVTmxFOSHkFBQjC5sb6khropR6wEbJiL5wpn + QtwXkxq2ia25keyvyaJpe85L1GRwWGLxscYyOnYXKt/bUZpMRW40CWEe+Ehc8Ny4gqTEGLbWbKViSyWh + YaG4ui5m1sxpzJzpxGy5R5fZ05gr5dIlCyR+baa4MJ+SwkISYmLxdHdj0/rVxEWHsKUsm901hRzcUURr + XQGtO3Jo3ZnJ4V2ZdDbk07W/mBPNVXS37aSncx+9x1roO9bGuSOHlOg/1crVHoUh3Mrxlp0c2lNJ0+5K + 9u8qp2FHObtry9m2pYDKsjxqqkrZu2cHB5oaOHToAG3tzZw6fZzzoifO9Z6i+8wRThxv4VjnAU527ONk + 6y5ONVXS3VDA+d1p9NXFcHZLEKdLPDhTvJELW9zpqVzHqWJXjhfOE60+iyM5UzmaN5nzFbPprZhDT9kM + 6T9SxwVTOC77jwhaMiZS6WsovGQYoc6DSJgr/Ga1LjUbdGkUHnEiwoxTwvvPRGhxKVmfeyVW3K+y50qJ + LaezrNgXqU+lv5bkdFMq420pTrKlMNmBnCQ7MuKsSQm3IM7PiLCNGsQIP0kX3pq+SZ/Mdbps9bMR3TGN + npwF9GXPU+JC9ny6U505HGFHjbsemZIbY+YI911mSdHGCRSuc6RglS0lq6wFlpStMaN8jfHfBnC76KQL + 8XbcEi1yP9FcaQA/zbDkWbYVT3JseJRjzYNcK+7mWXFLYQIXiraS12cyTOlU/PgcaUhDgIHwLi22btCX + ezBjm6cVde7W7NlgxcHVlhycp0eb5NajU7XpmazDxQm6XHTU4vJYLe5NM+bBTFNuTdWj33E0l6yG89B6 + NG85aPHmFB1em67Fo3na3F+ux731hjyQmHE/xJo7kaLPYqy4JDH/otIANuG88OIehQmcLhBO3CPP+2z2 + fw3gPdEWVIkWzPfQIWujNpmbdEl30yV1kx7JbgYkeZiQpJh9yd9SaQAnBlkRF2RJVICZ0vgN8RKO5KWP + v4c2fu6a+Llp4OehSaDUe7CvxCl/HYEWIYHCOUL0SJBnkyn5qFh0ZEWiI1sURrDUeWWijdIALk+0knhj + QZqfBine6qT6qZPhN0Y5ElhhAheE61IUrqc0gGuS/msANwuacuzZrTCAUxwkX0rbiXIkXvRiaNBkvDdP + Ye3qSSyYL/lZ8qxiVN1YB3MmjbNjptNEVi6cg6/EnLQoNyozvalIWy3xciYlUdPZk7eEtvLVNOcvZn/a + bPYlTWV3tAN1wpvr/Q1oDjfnbOpYzipGAMv36Ig1pzXalMOiiTvlfjpznWnNXUp1zGIi149jwSQtbIwH + Y2uhITFmIusldvgHBREUFMqmDR5yr76UFZdx8MBB6urqiIoJZ/HyecyaJ/e5bKrEPYnfaZvYmeRKkbcF + 2UtHULd0JEfWaXPJ14wHkudfDbPgWaQ574r2/kT09hfCB/6Zai45zYD3o7V5Wzj2m4GjeR40WvLQKF4X + Pv1E8vJzybvPMqRdC6fo8hhOzXwVSmapULNsEI2bNemKsOFkwgS6kyZxKmGiEh1J46iJN6cowYQCaXd5 + UoeKP2+kJ48lLW08idKX45JtSEqzIz3TlpxMK/IyLSnMMqc834LKIisqJCYUF1iSk21JeorCALYiVvp+ + bIIjsfETiEuYTFyiwvydoURC8vSXSJpOoiA5yZkUeT81cSrpcZPJiB5PepgtadJuE70siHW3IHKTNcEb + HAjaMEViyhpqK9LoPt7MjWsXuHXnFr39l+g6eZqD7Z1sr99Hak4BGz39mL1gKfOXrmbe0jXMWrCS6fPk + 9bKNrNroz6pN/riu8WDDZn9SsvJo6TzO1dsPlOavYkSxorx07Sbn+/o5cuw4DY0NlFeUUlCcS35RFnmF + GeQWpJGnmN0hP4nc3HhycqLJzowgPyOMovRgKtL92JriQXXCKqpi5kucnMqWMEdqpX03pkyiLWc6Xfku + tGbOZJ88gx2xk0UbTWJr9ES2J02jQdptY9FKdmQtpyxmAbmhC8gIXETMxln4LhrPRidL1goPXWmuzVIj + 0T7GOiyxMGG5gyNrp81k0/zlbF7uRmRgDPnZpWzZsovdjYep2rmPrNIqErMKSE3Pl7r+L1LSc0kWJGXk + kpieI3Uv28nZpKQIpExNzCI5Pp2k6GTiIyOIinAjInQpkQHzifWbRbKvE5l+k8n3m0ihrwMlohUU050r + DeBAa9J9jEj11iPFT3SMn7bwG8kLoiPTA7TICNAnN9iCkggHtsZNZEf8VBoSp9GWOoeTGUvozVnBlTxX + rmW7cCV1IlcSrLgSY8R14ao3k0y4l27BgxwHHuQ5cLfAkdtF47haMp5zBQ4ckfeak8xEc5qwT/r3vgRL + 2VaMSjWjJU5yh+jMjngjpQF8Wnh4d5Yj3YWT6Nwyg9Zt82nfuZKWXRvZX+chPMGTHZWe7Nriz6nWbO70 + 1gnq6emoYu+2NGLD17N6xUxWrnCRGLqJgvxUGvZuY2dtJfExIaxevoCNa1xJjY+guryQorwMeY5ByunE + 161ejtv6Nfh6bCDY24MIv81KAzg+yEfafgDpclxKqD9xAZ5E+Gwg1GMVkZ7LSPJfTGbIPEpjXKhJnsWu + jBnsyXJmT5rEvBRn6uU51kU7UxE0nsrAiVQFTaE22Ik9IU40hU6hI9JZdOFkusIc6Aq25nioJSfCTDkp + ub07wkRpAPdGGNAvcVxhAN+X53Y/1Yw7mSbcyDaRPPq/p4DukvjeJjrmcIqd1J+DEort1mT7vw1gxfq/ + x7JtOZJpTqdw7OYEQ9EH5pzOn0yvcNjTeVM5nj6WIwrzV7jFSYnTvTmTuV7uIvU6R/LiZIndjvQmKep8 + Ku8J1/mHcJ3vpPypzJnvpC38Q3LpB7GSf0WjvBmrwdvJeryfY6I0gB+na3MrRV05BfSNdA2upmtxLU1b + oKcc2Xw/35x7pdKmtjrwdN9c3u1055O+OL55UMW/32jjy6dHePNOEw+u7OTa2Ur6j+Zy6kAM7XW+7C1c + SXX6XGoy5rAtaxY12dOpypxKVdYEtuVPEi7rxIHt82nbs5y2hjUcPeTDmY4oLp3I4OqpEvqOFHH8QC5H + GguFB+dzvKGSS0cPcuvMMe6e6+HxxX6eXr/BW3du8/zuTV6/eZnXb/Tz7Pb/NoCf3LqhnCb6Pwbwg4sv + 1/u9cvKE0gS+efbc3wbww8vneXz1LJeON1FfmkLk5gUsddZn9ZyXBnDgGuEP7ooBPuMpT5hBXc5CGsqX + c2Dralpq3enY6Sv3GUbv4RTu9FTw9p1Gfv64lxdfXOfFNzfh29vw5RVefHaOb5608lb/Fm60xnBhry+X + 9/lyqymQR4cjeHYsgXe7c/j48la+ft7Gb19fhZ9fg9/fghcf8YLP+ZN/8jtfolKwZgSlG0eyxUuVGl9V + 6oLV2ROhyUERrW0Zkshzx9GZ58ThvJlCNKQyEiTReFsSulqPzUt1WbNAn4WzdJk6XpVx1qMYZ6vBeFtd + 5VTQtuZ6L0f/mmkrDWALSw2sbdSxtlNTmsAKw9deMXrXVoHhSlPXZbYxK5bZs2K5PfPnmjBBrmtrMxwr + i8HYWA3DwW4E48aOVkKxtq+j0gAegb3DKOwcRykNX4UBbGY3DHN7OU9h/ioMYsE4+cyZCvN3igGzJmgz + XT5vht1A5tiqsMhBhVUCb3sVouxUSLdSocJShf1mKpywUKHPRoXrDgN47DSUN+eO4L3l6nzgps3HQSZ8 + KET//SgL3o2x5I0YC54ICboXLoE1WJ9utzEcWDKYGiETRU4DKJg1ipw5mmTM0yfBRQ/fiSPYKJ/nPXYA + kdOGkuoyjLKlo9mzSYcjIoyvCMm4nTFJiPdUHuVP43r6BM6GWdKySYO9rsM44DqKQ4uGc2LVKG76aksn + NeDrPDN+qTDnz63mSvP3Pwbwb7Xm/LrTgp8FP+ww4/s6U77fbsS3W/X4ukKbr8s0+a5Snx9rTPh9hznU + W8FOS15sN+O3KjO+KdTn3XhVXg0exk3vQTwMGc27yaa8n2bBe2mK0oT3EvV4R0jVGz7DeOo2kOduCtP3 + pQH8dP0rPFsv+zYM4O1NA/nAYyifeA3jM6/BfOb9Cp/5DuJThQEcPJCPQ1XkmQoyBvFx5Qi+PKjHz2ds + +eOSA9xyhNsOvLht+9IAvmfLjwo8dOTPd2a8XO/3X8tejvxVGMC/bIDvV0vnWcqv781UGsD/fmTH93fN + +fm2Ib/d0uf363pwVXBZF85r8ufxUfzeNpI/W1QF8rrZgF+bzPii1og3SnS4nqLK0dAh7JZ7Lt00gJxV + KqQuVSFxicBVsEyFJEHO+mHUherQWzWNj8548OKNeCSiwodh8FGQbAfw4i0/vr2znvdOzee15ulcqLTm + UJwm1ZuHkiXXSl0o1xJCmrr4Fao8pN4DRWyFSNL116NzswbdXppcEZHxIN6Yd0SkfZBnysf5enyaO4Yv + i9T5rnwM/67R4ufdOvJdjPmzXdpCp+nfBvAvbcb82mLCj/L9vtxlxGe1JrxVbsiN1DEc9R1Cy0YV2txU + OOM/hKsRw3iYMIK3MtX4tHgMP2xT55edavyxV4M/GzT4vWEMv+/X5kWzPn8eMeeHU1b8q9uGH3rH8+sV + Z366PI0fLk7h+76J/HBhEj9dmsq/L07ll2szefF4BTz1gHvuUg8b+eXYap4LCekPkO8pfWj/dBXqnQVz + VWjaNJTTSYa8tnsGn51Zxff3vHjxQQQvPgnjj0+C+P0TP37/yJs/PvDgj3c28Oeba+DZSrm+tAuFAfza + fHgwh9+uTOTf5+z45qQNX3SJYDhsyzct9nzXMp4fWibza9sseUbz+PXowpejgHtW8FPvSr4+68onx+fz + 6p5JXCqxpCtOg3ppy8VS//kLVChY+ArZS4YRv2wkkctVlYZU8FIt/F218Fmsi4+rAf7LzYgRYp7qNZF8 + /ynkeTuSqhwBrE2+COiKzSZU+Zi9hJC/LSH2VEVOoDJmMlsSZ1CVNp9teauVa/82VAXTtD2Kzr3p9LRX + 0NtVzbn2Ki4eVay7tY2TrQoDuJR2QdfhrfSc3seF3ibOnd9N95laTpyo4khXGZ3txXQdqeTU6e309u7l + 9u0j3Lt7Rspz3LjRy7WrfVy53Mel/gv0X+rn4uVLf+GiEhcuCf4uL3Gh/6Jcp5eenh5OnjjJ0c6jHD96 + lO5TJzjXc5ILF49ysb+dy5dauNy7TxJ5AftroqjNdqcqfil7UlbRVeDN5Zpo7tWncKkqgqM5m2lN30BT + 6mrlv/EqvMdS6mZJ+Rp9tq/S+ssANuKsz38MYAt6RbSfFeJ8zs+Q/jAzLoYZ0xuqT0+QlrRrDXoCNLkQ + ostl6UeXgwWBBtKnDJR/PrgaYc7lSEsuRlnRH2vLGRGYx8IMORpjSkeciN44Mw4mmNOYZEVDqi31qfbU + CuGqibcS4WJKaZg+pSLet8kxe4XcNRVMYl/2WDnGgppYE7bJ+VvjLKkS4bclzp6iSBtS/cyJ9zQmycec + rGAHCsLHUxAxidLomZTHulAaNVuI/kwyPRyJWaJH/BIt8tcYKw3bkkWaFLqoKad8znAepjR/UyYNIm3K + EHIkx+RPH0bh9OEUzRhKwcyhFM6Sdjt3FCUL1ClbpJj+WYuK5Tp/GcB6fxvA6ZLvw2ePxm/qUHymDidg + tjpBc9XxcxmNz+wReM0ZgfdcVfzmqSkN382S6zZKvlTAY/oI/F3GELPChGhBpLR/BRQGr8LsVRi/MSuN + /h+8NIBDFmnJZ6jiO0c+22WUclrpYMUo48UahLkq1hjWInypJsFLxhC0RJXgxarKkcBhS+XzpEyQMn2F + Jtkrx1C6VpNaD112umv9nxHATX8ZwB0bVelYP5LWtcM5vHYo7QoT2H00x300OBOo+7cB3LB8ADsW/3cE + 8BEPNWUsPuelpTSAL0psvrJZCPJmVe4oDGDPlwbwXc+hPPYbwdOgUcqpn1/1HsbdTa9wfa0Kt9aoyPYg + HvmMVP5Y/jBUYrvfKHq8h9LtO4JTco7CAO6O1uZsgj59qS8N4CsZZso12m6nGXE3RZebcWpckvzU6ye8 + JWIQrwlBf6fIWDnl86M0dR6mKkYAC6kvMFCO/FWYv59uteXzagcp7fmkyo6Py615t8BcOfXzA7nejbCh + XPYf8BIBA+iXa18NVOF+7BDeytLm/UJz3i+y5q08W56ICLyVKP1OsVxBkDEH3bXZunQUhcKdMmYOI2bq + EMInDyRqumL65hEkLnppACtGACe7qilfK6CY9lmBhIWjiFOsHTx/JClSv4pRwGlLNchcoaGc3jtzqSoZ + i4eTNm8guYuGUL5ilPKHSKUB7KGjXAdYOQpY+v8Of0GgEbWBEl8lJpS4a5K3Vo3c9WoUeWhT6qlLiZRF + G8Yop4Au3aDOFrnWdtnfEGxGU6T1Xwaw3d8GsGId4K4EGzqF/ykM4P2B0r58RitNYMUU0C1BmnQo1gAO + 0+ZYsJY8E8XoXw1OBKopcSxIjaMh6pyWej0j9XouVeKVwgAOG8F2edalPioU+wxkW5Qae+T9pmRzDiZb + sVvEd2WwDjl+Y0j1lWcWMJK0KC1yUk3Jz7ImNcWciAgdAuR+/IMNcffVZ/EadZyFM451GYLtrMGMnz+K + aYvVmSN9ylWwYanw0jWmIlYcqc3YyMkdSTw4sZ0Prrby3pVW3rjQxGvnGnh8fh+P+5oEh3i1r1n2HeS1 + 0wd49eQeHhzZyc32ai63lXOxtZCLh7Lo3R3HkZz1HE90pSdmEb3Bszi7XkTpSjMuLTXioqsRF5aZcGKp + IbslfhVL+1AawNJe2pfq0L/GiAfrjHnbTdrZRiNeX6XNzZXS36Rvdy3RoHGxJntWm9HgPYU6/+kUeEwg + aoUZfot08ZqnLTFJkzAXbRLn6JA314jqucbsna8YcWzEycVmnF8keWGuxP2ZOlybps2lqZp0O2vS6Sw5 + xUmXvbPM6No8jyvZoTzZV86zzr3c69rHkR0VbEmJFsG3hkXOjky01MXRTB0H81E4jdNgoYsh61Za4+sz + geCQSfgHOeAbaENg5DhCYyYSFj2RqOgpxEdOITVyGtmRM8mNmkF+5AzyIqYpy6IYF+X0ZNuzNrK70JcD + FWE0V8dJzk+iviKG6sJQagoj2FYUS215IjVFSRSkRhDgvpIFMycx0dEce2tDzEy0MDHWwthUGyPT/2sA + 6xlpomuoLuUY9I01le+ZWOj+1wD+63gzK31sHI2Z5GwrsGHqdLuXBvAcR2a4jGXWvPHMnj+R2VJOnWmH + 43hjpQGsgJ2DvsAQB0dD5VTQs2bZsnzpRDaunYyPhzNBXtMI9Z5JvN8cMoMXUBkrPCB1Je25KzlesJgT + OdM5mWIr8c+Yq4kGPEiRtpAqnDXTinczrHgnxYrn8Wa8rvgTbrQVN6W/Xgq34lyomfQ1Q7qET7b4aHJo + sxoHPEbS5jWaY/7qnA3WEG4g3D5an3vxhjxMMVVOfXopSZ+TEep0BI2UfjzypQEcosq+vwzgAyGKdYC1 + aVEYwHKuAl2iwxTr+B5LMJD2rs8xQVecDoflOs1hL0cRKxE2mpZIubZidLBop6PCaRUGcFucXC9Gnf3h + qhyIkONluzVei9a/DODmeDUOCToydIUPGUi/emkAdyoM4P+Yv1maNAva819OA91TYsLFYhOuFZlwu/Av + A1jK9/JFw+aZ8HGWER8ka/FerDpvRYzkWdhIXpPycZSqPMfR3I8cxb2IEdwOHcaNwMHcCx7Ms5iXBvCn + aTpK8/e/BrAun2cY8s8sU/6Rbc5HKca8G2fAE6UBrMnzMF3eEo38XpQ1TyPsuORvTaeHNVtXWBA6RZ1l + Zq8wR3cAC3VUWG00kM32o/GerE3gdENiF9tTsHkO2yJWURmygtLA5ZQELCdr8wIS1s1WTg+tMIALQlaR + H76UsoRlbM1YRl2uK3UZc9mdMYumrJnyfKZxOMuJlqzJtBdO50iFC52VLrSWzWRn1kTK4hwojpos13Ei + caM9gXMNCZ1rTuQ8W6Ln2ZHsYkvJHBt2zLencZEDrfPs6ZxhS/d0W25I23/k6sTry5x4uMyZW8unc3HV + HE5vcOXQqoVUuEwnwMGcWUbqTDBVZ7K1FvMnWxO0yZW0aB+K0yOpzI+nKi+OsoxICpOCyI31IS1UMQJ4 + OYHr5+K1cjrhHkvIiHBnW340B7fn0FyXz6G6PA5uy6S1LoeTTZUc319G6y6FCZxL/ZZMijOjSI7yJS7C + n7IS4dsHGtm3by85uVn4+3mxadMaNm1cibvbauW6jJvdVxPs70lGSjwNu3fSUF9PeVExSbGxxESGUpCX + zu66Cg7u3sLBHcU078ineWc2rTvTOVyfSWdjHl0HijjSVM7RpmpONNdxpqORsx0HRJfs4XhzPWc693H+ + WBN9Jw5yonUXh/dX03WwjlPtezklx3YfOcTxzoN0HN7Pkc5Wzpw5ybneHtEVZzjfe5Zr1y9x6/Y1bty8 + RP/ls/T1HufC+eNcOX+MK2fbuXK8kaudtdxoKeNmYzZX6hPorw2nf3sgV3cEcGH7Zs5tXcO5Lcs4V7mI + s2WzOVc+k4tVc+jfMovesmn0FE+lW7j7KcEJQXvWeLZ4a5E4X3jMDBXSF4ygcq0WdRu1OOCly4lQI06L + pjgXoaWMU/cKLblbasPVQhvOZFhwMNqA+khjdiaIVki2pyzZmqJkO3KTrMmOtyQz0oz0EBOSffXI9jem + NNiC/M2G5G/UEf5izZEkZ/rz53Mtfy5XcmdzNW8OF7OcORJjzw5PfbKFR0XNUBO+ZEb+uvHkrnYkfYk5 + GYuMyFpsQP5yI4pWGP5tALeJTuqLs+NGsg13E814lGTKM7nP5znWPMu15XXhda/m2fAw34Z7BXJMiRxb + ZMsF2Xcy3ZIO4Xv7w03Z4W0oXEl0jZcVNd42bJN+vXOjBY2Sm/fMkjw9ZTRtk4TrTNWhb4porcn6XHMy + 5J6LpUD0luTac44jOWc1hJuWw3jdQY0nUzR5daYWDxfqcm+VHnfd5Hhfc+6FWXNL4vvVaEsuxZpzUe67 + N+m/BrBiCuizmSacyVJMAf0/DGDhaVXCS/M365Llpk2mm+gbd33S3A1J8TAWTW6q1F7K0b8BViQEWREr + zyfCz0RykyFBm/UIkHO9N2rgtVENrw1qeG4ag5+X7Beu6eetg49ogSDRCuGSb+LCjEiNMic/wY7SREcq + Eh2oSLKjUuq9IsmGskQrimMtSPPXJNlbjWQfVVJEM2SJLlWawJJfFKOAK/6nAZzjyKFc0ZP/0wBOcCAz + xlG4xDjCQibj6zWVjeudcF0ynlkzrJVLQYwXLjBlggNzpk1mzRIXAt2XyzkebMl+aQAXCP8oi3Fmb95C + 2sqX0yJtbH/aDNG3k9gbbc9OeW67JY8eClesWe/A6RR7yXG2woEtJGeZcTjBks4MB7rypnM4b7no26VE + bZjIkim6OJgK77TSZd7sqRJjNhAYHEJoWDRenoGEBkVSXbWd9tZ29uypJzYxkqVr5jNn0WRWLXcm2ncx + dZne1CfLPbrbkS06YKfw/mPrdLjiI+011Fo0k5nkLnM+ED39mfCALzNF0/xlAL8braWc8vlJoOS1gBE8 + DBjOqxFqvBanyTNpK0+lrd+M0ee44k+byweyb9lADq4fQaenNqeCzTkbac+52LGcFZyJHyv52oGdsWZU + xBlTFm9KUZz0z1hbckTDZyeOIz3BnuR4K1KlP2elWZGbZkme3EtBmiml2XKeYiroAisKcy3JzrQkNdmS + hHgbYkVXxMZNIDZ+CnEJ0wTChZJmKZGQNPsvzCFRkCz7UhJnkCZIj3cmI2oi6aH2pPhJm/W0INbNkqhN + doRtHEfIRidSwtYIP0yl+1gz16/2cv3mNc6c76W5o4tdjU2Uba0lJjmdtW7euCxawZLVG1m4YgNzFq8W + rGL5eh82eoWx3jNYOQJ45frNxMrxjc3tyimgr95UmL8vDeArN25x6cpVTp3ppvlwM9t3VFNZXUrF1hLK + qwop25JPeWUuZRXZlJenU16aQllxPJVFccqRoLUFwezK9WJnxmq2JcyjOtqJrdKua6Md2Zc8iTbFNLd5 + ipk8Zoommsr2qAlsix7PVsH2xKnszZlHQ/4S0TCLKIt2ITd0LpmB84nZOBPfRePY6GTBWuGiK821lAbw + EmNtXC1NWe5gz9ppM9i0YCnuy9cT7BMquS+Xyi21NLV0Ur+/meKt28ksKCEjI4+M9P8gn/SMXFIzc0nJ + yiFJkKJ4nZZLerpAUaZkSV2lkxqbRFJ0GLFRG4gOW0R04Bzi/KZJrJ9Epv8ECv3HK6e7Lg+0UxrAJRLv + 8wMsSJG4kyjaNNFL8o7El2Rv0cs+6gINUiXmZPoZC/expjJqHDvkmTSlzuBo1nx6cpbSX7CcG4Wu3JZ8 + cSNzEtdT7bgm7fZ6ojE3ksy4l27Fw9yxvFownsdFwl/KpnCzYgrni8dxNMNSuc7sPuG1jXFSKv6ALNrz + oJQt0v7bZH9HvAHHUiw4nWmjXB6tu2AiR7bMpK12EUf2rOXIfi/aGwM4tDuIxjp/9tUGcbIlg9vnt3G3 + bxcXjtdIzi+jTLhMdIQHkRHeZGbFs0t4RdfRQ7QdbqSiNIeIEB/lGr9FOalsqyylpDCb+NhwAvw2475x + DR4b1+Httg5/9w2EKUYCB3qTGOJPSngQqWFBJAb7EuvnKTxqExGea4n1XUVKkCtZ0j5KomdTleBMbepk + 6tMnsit5IjsTJ7EzfjK1kZMp8ZVY7e/A1qAJ1AVPZk/QJA4Ejedw2ATR944cDrbicIAZncEmHAkx5li4 + iWgHY7rDDekJ1RN98T8NYPO/DeAr/48B3CnxvV00jsLs7cwYJxir3G5LfWkAd2U5ciTbTvZb0p5uKvuM + aRXt0JlsQXf+RC6UTqcnbwqn08dyPMWOE5JjuqW8kDORm2WzuF4yiwvZk7gg172cYc/jwsm8VzmDf1TO + 5F9SZz+UO/F1jh2fJBnxbqzw9Sh1nkWr8zxRh3czjXgr24jXRHvcTdXkZuoYbqRrck1hAAvvv5qhz/Us + Y2lnZtwuFmyx5VH9TN44vI73usP47FoeXz3cxacPG3l+czf3+rdxrbuUi0eyONkYxeHt3uwtWkVN2jy2 + ps0WzKQq3Vly02Qq08dTLd+hrtiJxuq5wmtdadm9XDimG92HQ+k/lsq1k0Vc6CwS3pvDsX2FdOzKl+tW + ckX45Z0zx7h/vofXL/bz/MYN3rl7hzcVBvD1y7x27SLPJB4+v3tDaQQ/vXWNJ/L61WtX5L0rPL58ibu9 + 57hx5jT9x49y+cQJ2T77twH86HIvr17tURrAuyXGRnstYuVMI9bNM8ZnmQXBa62J3Sy5IXgS1YoR5YVL + OSScs2X7Bjp2enF0tz9duwLpPhDN1WN5PLm0nW/fPcnvn12ALy/D15d58XkPv394gq8e7+eN3hJuNEfS + V7+Zi7vdudHow6PDYTw/Fsv73Zl8cmkL/3p+mN++uMCL7+/x4ufXefH7u7z48yP+ePEJv734DJXCla9Q + vn4o271Hsct/NLuDVGkIUxOBKWJWGtZRIRhH8ybRVTCDtkIX6RBTKQqyJcnDVJKKKZtXmLB0ri7TJinM + 3+FMsFNnvK0WDpba2EhgtRJYmmliYa6JuZk6FpbqWForRv+OwcFeDTubkVgJ0bO1GcrkieosWmDK2tV2 + rF1jj+siE6ZOGo2D7VDsrQcz1mEEE8eNYtL40UpMHDdayMxI7GyHKU1gR3ltO3YUFkoDeCgmNkMwtxmG + jZ1ilPFoxsm9TZuoz4xJAoUBPE6V6Q6DcbFXYaFglcDbToUoGxXSLFUoMVNhr6kKR2S7R/ZdGfsKj6aP + 4M35o3hv6Rg+2KDNu/7SGZSkw4KnQvAeCOm/GaRLv58WZz01aF4xjJ3zX2HLrIEUTBtE/mxVcly0SJ9n + SOJcffwnjcRNPtPHcQAxToPJmjeMmlXqHBICfy7Cmsc5U3leOI23SmbwjgjUZyVzREw40u6hye5Fg6mf + PYRGl8EcXz6cm5IE3hGR/bWI+V8qTPlzq9n/MoB/rxXstODXHRb8u9aM77YZ8W21Pt9V6fHtFh2+r9Th + x62G/LLdhD93KgxgC5Djkde/Vxnzr0IdPkxW4+14CQSx6ryTosc/C235otSBf5ba8Y9SWz7NMRPypcW7 + QaN4w2sQb7gN5C23ITxf/wpP173C62sG8GStirxW4Z1Nr/ChcjTwYD7zGcRnfkP4NGAwnwQN4qNgFd4P + k2PiBvBB7it8UafOLx1m/NFjA5dt4aotf1yz4rdbNvx824YfBT/cs+f3t6bBp/Phq6Xww2r4ZRP8uB6+ + k+0vXhrAPz2dxHf3bPnuljk/3jTilxsG/HpZlxcXdaFXcGoMvx8eya/7h/N7gyp/7NPklz36fL/TmE8q + 9HmSrcnl2JF0Bg5mt/dAKuU7Fq4dSMaKl6OAFUhbrqKcFrpow2D2RkrQ3zWHry778eLtWPgsXu4lRjp0 + lGyHwXuB/PTIg8/6lvFmlws3doynM02f7T4jyFisQtI8hQE8gHTXIVQJGVWMQmoKMKXJU4+WjZocc9ek + T0TGrUgjXk8x4400Q95J1+aDdDX+kaPOv4o1+V7q98cduvx2wJjfW035TfEsuxSlsXJq658OmvDdfhM+ + 2yFEucqQh3naXFRMMef5Coekrjo8VOgNGcH9xDES/LX4rFSP76v1+G2nBn/sVuPPferynNT4TZ7X7wc0 + oM1AnqPUz3lHfuofz283nfjz9gx+ve7MT1cn8n2/Iz9ccuDna+P55fpk/rw3HV5bAk+lru6ugwsr+aXT + lbeLx3LJX4euvwzgnU4q7Fk8gDZ/VS4V2fHx0RVS9z789na4PNM4+Fae77dRvPg2nBffBME/vHnx4SZe + vCvXfGMVPFsOry6C+3PgxnR+6x3Hv09Z802nOf9sMeUfTeZ8ud+Kb/bb8V3TWH5ucea39jn8dnQBv51e + wq99q/jt6jq55/V827+G99rncnfHRE5lGFMv9ZW3SIXUOYJZA0ieP4RYV1VilmsRuVyH0KW6BC7RxX+x + PgGuxoQutyR+gyOZXpMoDHAi33ssaWuNSV+tS8FGA8o3m1DhbUKlj4mIVWu2hDqwRUhuZdxUqpJnUZ25 + hLqCjeypCKCpJpLWnYkc3ZetnPq5u6WMMy0V9LRtpbu1kiMHioR85dG2P4/OQ0UiAKrpOVXDqZOVHO0q + puNwLq0HMznQkMzhlhxOn9zCxd56bt1o5c6No9y4doJrl09xuV+SX98ZLpw/Q1/vWfr6znFe0HfxPzjP + hf5eLvb3yXYf5yVhnj/XI8f2cv7sOY52HuPYkSN0nzpOT88JLlw4Ijgsn3WAvu6ddB3IobEqjG0ZG6iM + WcSuxGW0Z7txoTKEmzXR9JeHcCzbnebUtTQkLWNryHTKvMZSusmSstX6VC8fQ9MGXY5uNuaMPLfLQZZc + DjSj19eQM0KQe/z0OR9szPlQBSEz4EyINqdFdHf7aXA2QItef20u+GrT66MlMVyEpRx7JdSE/lBT+sKE + pEVaci5cSG64KSdjzDnylwF8QIT5XsEeEXv1QqzrhHDVJlhRIwKxUvplucIAluPqhdg1ZDuKgLdhqxDn + LZEGVEYYUh5hSnmUBRUxthRF2JERYC0E31SIvQXZIY7kC8HMCR5LbshE8kKmkh0wkQwvB5LWmhGzRASB + wgBebUjRMj2KF2kpDeC8GaOUo3+TJw0mZfIQUqYMIXPaUHKmDyN/xgjyZw4lb9YwCmaPoGTBGMoX61Dh + qkf5Ml0qlutRskyb4hW6FP5lACcu1CTQeRjech3PKcPwkuv7zBa4jMJv7mh856niO1cdn7lqSnjNUsPN + aTibpg5no9yHh7NiimgtwhcbEKGEHhHSH5Qm8AojYlYYKkcF/wexChNYyjCFATxntHzeCLxnDsNfPi94 + vprs15DjdIhfbSDH6b40gBePfmkAu6oTtliNKFc14hUG8HJNsleMoXiNBtvddNjlrkWDuwa71w5XGsCN + a4bQsmkU7e5qdGySuLduBC2rh9Is+w+vH06n2yiOe4/hbJAeJ6VttG0a8V8DeJliDeBhHJd83+Orw3lv + bc7Ldq+7Ov1uqkoD+JaPKre9RnJn8zDuew7lVaUBrMqTgFE89BrKTYmxV1aqcFVwa/1AHniO4PUQLR6F + 6XAjeAwXAkZz1n8kp+WcM5FanEswoC/NRAi8MRfTjelPNeRKsgHXk/S4nazD9VhV5WwN53zkuqHCW1LU + lGsBv5Gry5MsTSWe5Wj/Pfr34y3WfFZtxz+3O/KPbQ58WmWvHAH8lnCJ19O0uR87imuhg7jop8IFueZF + BXxVuBygwsP4YbyTq8P7haZ8UGLNe4UOPBUReFvE5blgXY5If2rcoMZW1xEUuAwnXdpfjLShsEkDiHAe + qBwBrDB4FaN/M1ZqKUul4btgJIlSh0lSr4rXyhHAC0YrRwMrRggrzOLs1drkrtEhb5UmOctGk7lwCAVL + hlGxchTbJDcqzF8lNuuz08uAnT4KA9iIuiATavwlvm5WxFp1MleNFIwgR+6z0E2TEmkfpZsEG8YoUSnb + 2zbrsE9hAIdb0hxpRUvUf6eA7oq35UiCCLYoMw5HmnBQvneDnzp7vUfT6K+mNIA7w7Q4Gi6xKVRydogG + x4MEitG//8MAPhOrx9lEI86lmnJWRN3B0BHUynMu91ShTLhGfazEtxQjDmfI50sMaUi0oCpUl/yAMSR7 + DyfGW3JO8ChS4vTITrcgM8OaBKmHcIkxgRLHNvnosVSey6wVo5myRDi09JcpS9WZJc9y3lItlgnWrzTA + c605YR6O1Oa5c05i8ut9e/nk7hE+vnuUDwUfPTjOhw9O8sHDU3z46CyfPD4ngu4cH986zQfXuninv53n + fQd51NvAnZ5arp8o40prJt2VPpzOWk1P/GL6QudwwU0E6DpLrkn/v7rMkMvS588uN6JpgSaVzhKfFAbw + jOG0SWy6sMqQR+uFa7tb8vYmEx6uFUG9Vodja7TYL22mdtEYaiSG1LqPlec1kdT1toQsNcZrgS5uLpps + nq1OwGxNYlx0yJhvQPFcQ+qkPLDAgGOLjOlZZET/HF1uTNPg7lQNbkxS59zUMRx31qLTWZ92Fxv6g9bw + pDKNT7r28nnfUd6+cIJLHU00VZeQGx/K2oUzcLIzYpy5BmPNVXEer8Wi2UasWW6BpzxPX7+x+Prb4+Vv + hXeIDb6hdviH2hMcMpaIkPEkhEwiPcyJ7HBncsOmkRPqpERe2HQKI1woi1tCdcoa6vM201gWRHNtAgdr + k9hdFcuO0mgRxrFsL41na2ECRemRhHqvx3WuM1PG2eBobYKFiQ4mxjoYS2lsqqMc0ft/DGADdcEY9BQG + sJkcb64wgA0xtdB/ebxAsXawmbU+duNMGTfRkolTFVM+2zFtzlhmzp2Ay8LJzFvsxFwpFaOAx04yw9pe + H2s7hflrIDDCbqxiPWAz5sx1YM1aJ7y9Z+HvM51g72mEec0QAT2LFNlXEDiH2uiFtKS50l3gSm/BHPqy + xtGfbMHtRENeTTbkWbIRb6eZ8V6aOe/K/jfiTHkSbcyjaDkmWtqX9NF+yd1nQo05Hix16adJq7c6LZ6j + 6PQZrfwzxnmJt1fCdbgVo8/9BOHA0gdvSFztS9DmWJgqbYHDORg4gqZg6dNKA3gMB0I1lDgUqkVzmDYd + MQZ0RMv1BW2R8lr689EE/Zeje5MMaI38ywAOfWkAN4WO5GCEKodjNOhI0JEYoi+xRM6N06Y1Rvq6vKeA + wgBuiRU9maCYAlqDlgT5TNFhbanyGRm6dGbqvzSAc/TplBjfLjico0OzaBWlAVxqwPlyU/rLTLlWojCA + TXhUYMobRWa8my/PTTEVdLo+7yQIv48axdPQYbwmeBQ2godRqtyPUhjAqtyLHMWd8BHcDB7KnaDBvB45 + Qs5R5yPJEZ8qDOCMl+avAl9kGfJ1rqnAnH+km/FxojHPwzQl72lIqcM7kcZ8HGfP27HjuBFkxxE34T8L + 9Qh0HMZSwwHM1VJhiaYKG2Q7wHEUIc7ahM/UJ3mpDaWbZ1Ab7sr28OVUhy4TrKIscAXpbvPI9FxCYfBa + isJWCU/ewO6CzRyo8GBf6Sp25cxjd+YMmrKcac2eQlv2ZFpzJtEuGvtI+Rw6ymdxuHQ6e7LHC8+2oyh0 + LDm+44WbWOA3U5uQOSZEulgTO9eW5DnWwqEk/s6yYOdcKxqk3D/NjFYnM07OkvY23557S8Zyf8kEbiyd + zIXl0+het4CWlfOpmjONYHsz5hmPwclMnel2uiydbk+IuysZ0d6UpodTmRdNdUEslVmRFKcEkh/vS2aE + O/F+KwnZOB/fVTOVBnB2tAe1hbEcrMmmZUc+LXUK5NC2M49jjeUvRwHvLaVlZzEt9aU0bCtga3EaJXmp + NOyqpf1wM22tzezcsY3M9ASSEsMFISQnhpKcFEpmWhSlBWns2l7J8a7DHG0/zP7du6mpqGRLSSF1NeXy + eiuH9lZxUD6jeWc+zfVyLzvTOLw7nc79OXQ1FdC2r5DDe0ro2LeF4807BDvpbKyhfV+1bNdx+rDCCN7L + sZYddB2qle1GrvS0c6v/BI9vX+T1hzd4dP86jx7e4bXXH/P6syc8fvyIR48e8PqTRzx99qrsf8Dd+1e4 + fadfjrvOM8GTO328dvk4j88d4vGxHdxrLub2gSzuNqVze38C1/eG0VfnzfntGzhfs5K+alf6quZzYcsc + Lm6ZRX/FNPpKp3K+eAo9hRM5UzCR7qJJHMlypNx9BGkLFbN0DaR8jSo73LVp8NCixUubk4F69ATr0B+l + yy3p/w9yLbiTb8mNAit6MyzoiDfhQLwFDYoZg1LsKE+2pCDJitwkc3LiBVEm5IYbCd83oizcnOpwKyp8 + jKjyNqQx1IZTyVO5mu/CrfxZXMuZyrXcyVzNnUp3ylh2+xqRIxwpYprwpnlGZK0aK1xpHAnzjImZpUXC + XC0yXfUpEO5dvcGEPV7mHA6y4Ly0+auiYW4lmnJPYuDraaY8zbLkea4tT/Nteb3AhlcVKLHncflYbpc5 + crnIgXOK3wnT7DgYa8muwJdLF1V7i2YVVLpbsHWdMdtddagRDVA3fghN40dwwkmLvmn6XJthzK055txb + YMPNeaZcdNKm22EYJy1f4aLFIO44jOThFHUeztHivtzznbUG3BZ9dzvAnNthVlyPtOaKaKf+GNFocSb0 + JAh/UhrABv/LAD6dba9cy1I5BbRot6pgQ/I3aysN4Cx3PTI2G5DhaUK6lxkZvlak+FqSGGBJQoAVcYGW + RPuZEuZtTLCncKnNevgJd9ws3NBjvSruCmxQx9dLT2CAt7zvKW3BX16HiPaMDjYlUXhjdoI9+UkOFCc7 + UJbqSGWaQOq/NNGaQrmn9CAdkn3HkOitSpIgXThkVpCWaEBt8kP1KJPv+B8DeF+WvdL8PaA0gB2oTrWn + ONGRzFgH4qPGEhYyAT+fqbhvcmb1yiksWTiBqRMVo3/NcZ7swLwZk9mwbB6hnqvIifNka7YXW9JWUxQ1 + k4o4Z/blzZdYuJhDeXNoVKx5nTievdG27A41oyHEhEMRFhxPtOdEsj1HEu1ojxNOqpgBR7RvZ+ZYuvJn + 0JK3QnTvMqI2TMZ1qgHjzYVz2hqxaO50PNzdCQmNJComiZDgOOJj09lWs5OO9k4OHGggOT2OVZuWsGDZ + NLn/6UT5LpH4HcieFHdy108kW3jdnuXanFivxzUfM14NtuaNEAvej7Lic6njrzIdBLZ8lmLKx/EGvBsl + eUdy7qsBw3jgO4R7gseSW/82gCVH3YrS4ZzfKE65jeC0aLyzHmM4J23krNRjt/S709K2u6UfnhLefyTO + mgbpo7XCM2qiTKmUNlgmuqAk3JaCCHtyo2zIjLIkS55JvvTt/BQLCpLNKUw2pSzDnIpsyXf5NhTkWJGV + Zk2KtIE4uW5M9FhiY6YQEzed2PhZxMXNIS7+JeIT5ioRlzSPhMR5JCbNlTg9hzRBZoJi9hhnsiMnkRZo + T4KnJbGbJFdtciTGfSoxHrNJC1tLXXkqZ441c+1qL1euX+bk2bPsbzlMVd0u8ksrCYtNZM0mL5as3sQa + dz+WrvVg/nLhkVJ6+EfiF5aAd3A0qzf5sGyNG8GRcdTs3MvJc31cunFbOf3z9dsKM/gWl69f42xvD+1H + O6hv2Mm2HVXU1G2hurZcUEb19mKqtxVSU5PLdslf27emUbs1We4xll0lIewt9mBP7nLqkuZQI8+kJmoc + 26Md2Zs4iRbJ4+3ZcziYNp1dcfJe5Hiqpd1vjZZjkiZLDp/F7ux5bEt1oSJ2DnmhLmQGziVm4wz8F41j + k5M56xz0WGmuiauROouE7y42N2KZgy1rp03DbdES3FeulT7sR3JCCuUVkt/kOR1sbaN21x5K5XVWRg6Z + qdmSIwXpOWRkZJGamUlSRiYJguT0bNIU+xVIEyRnkJ6YQlpsPCkxwSRErSU2fD4xgdOJ85ssfX88mYop + YoPGUx40looge6UBXOxvKTzElCQ3HeI3aRLnoaFEwmaJFZvVSdqsQZJo1lTRuTn+5pIvHJQG8KH0mRzP + WcD5PFeuFC3ldvES7hbO46ZwnxsZjlwRrnw1yYxrknNui55UGMCvFUziWclUnlbO4F71DC6UT1auM9sq + 7Xaf8NvGGEMpDdkfY8TBOGNa4oxojVXMWmPAkSRTTqZb051hz6m88UoDuLNuMccb1nGy2ZcTraF0Hgjl + 0J5AmnYFcexgIldOlnGvbyfXe+o5d3wHLfsrqduWzzZpF40Hd3LkZAs9vcc53d1F0/56tpQXUpybQUVR + DlsriinIVaytHKqcBtrTfT1e7i8NYD+39UoDODrQh6TQYFLCBSFBxMvrWD8v4uS9GJ8NwqfWkBy4hMyQ + ORRGTpO2MoltSWPZIXl0R+I4dsSNpy52gvTzCcr6qJC+VRM8lp3B49kTOJ7GQEeaZX9rkA3NgWY0+xtz + ONCQDskvR8JNlINFjoXoSuzQ5mKInuQrI+6KJlcYwLczRWP8/xnAqXZ0pDsKz5hAV+Y45bbCAD6c4kBb + mq3AUl6b0ZZiTFuygcRdQ8nBVnTnjKOvcDK9eZM5mzGO7nR7zgi/6JHrXVIYwCUzuFUyk5uFU7klfOZe + 4VielEzkvUpn/rFlGl9vFUidf5pjw9uiR57HCmePVhc9pc5T0UJvpcq+DEOeZOjzUHj+nQxtbqRrc11K + hQF8JctA+IgJ1/MVfzY15lq5Jbe3T+bxflfeOOLL2z0xvHc5m/dvVvL8Ri0P+7dx+3w5107mcfrASwO4 + oXgN2zMXUJk8g4qkaZQnTaEkaQJlKePZmjWRHcXONG6dy6HahRyU9tWxZz09baFc7Erm2vECLrQXcKwh + k2N78+mqz+eU8OCrxxq5d/Yoj86f4Un/Rd68eYN3797irTs3ef3aZV67cpGn164ojd+nN6/y5IZi5O9l + XpX3Hl/pl/u8wLXuU/R1dnC+vZ3+o8e4drpbaQDfv9DLqwoD+MrLEcC7y1OI9V7E+nkWbFpkjt8KK0LX + WZPg7Sha3onajAU0lqzkYNVqDm1dS2vNRg5vc6d5qztHdwXS25LIve5iPn31ED9+cBL+eR6+6OGX97r4 + 8a3DfPGgnuc9edxoDuOc8NYzW1dxtd6dx63BvHkshg+6M/j0UgXfPDnIzx938/tX1/jj+3v88fMz/vj1 + bX797T1+/u19VMpXD6Bm0zD2Bqi+/DdzqBr7FVNUiSDtFGF9NNuKoxIUjhY40VUwS4iAE1slyOb4S7Ly + tMB3jTHL5mkxfdJwxtsPUU4FPd5mDA5Wmlibj8HSTONvmBmrYW6uhqWVOg72Gjg6jMHWagTWloMZP3YU + LjMlGC81x22DAx6StFYtM2WG02gmOAxhvMBp4mhmTBnD9MkimATTJqkzefxo7GyGYms7lLGK7XGjlSN/ + TW2HYCQE0sRyCFbWI3CwHc04W3WmjtPFebwe0yZoMWO8GjPHDmOe4ysscRzAWocB+NkNINr2pQFcbKbC + HkGXtQpn7AdyaeJgHswayRsL1HhnyRjeW6PDUyF7j6TDPwoyFkFsSL+3Nmc81Di+aRSH146kbv5Atswe + QMnMV8ibPoSc2WpkuWiTOteQBBcDgqeMZrN8pq+DCrFTX6Fw4Qjq12nR5WfC1XgH3imeyccVs/lExMin + 1Qv4pHoJ9zIm0yUiY9e8gWybKvc4YwBHXYdx3WsM78Tp81WeMT+Xm/DnVlPY/t8poP+os+DPHZb8VmfO + j9tM+W6rAd9W6fHDX/hpqz4/1xjxq8IAlmNe7DCDOjNeVBvyW6U+X+dr8lGqGh9JZ/8sx4gvii35vno8 + /66byHc7BHUT+LLcho/SdHkvdDRv+g7mDbcBvLnpFZ6tG8jTtQN5bbUKT9ao8Gy9inIU8Hvur/Ch5yA+ + 8RnEp/5D+CRgCJ8GDeajoIG8H6LCW2EqvJ+swhdlw/l5vx5/Hpfvc96SFxet+P2SBb9cteTHa3If1634 + VmEGP5nMiw9dlNM98+1K+FEx+nctfLMCPl/Mr2/P4MfXJvCvm9b865op/74uz+qqAb9c0OGPczrQrcuL + LnWl+fvTziH8UjeaX7Zr8v1WHb6s0OP9PB1eTR5Df/hwuvwHsdtzANUegyjbNIgc+V4Zy0UMLlUhZ6UK + hWsHUC7fcX+0Nncb5vDtDT/+eDtSOnICfJco9yb4Oho+DOaPpz786/o63j+5kPsNUyV5mij/kJG+SEXE + mgpJCwaStXy4cs3CPZJk9vmYsmejDvvXatK+QYszPvpcDZXEIon51XhdniRo8FaCKh+nqvNVvhbfluvy + wzap3wbFVM8m/NZmplwL+Ld2E35uMeL7A8Z802DMh9v1eFqqq1zUvTt8BC3uA5QG8FHvV7gcqSpi0ICP + SxR/HDDm951GvNityYs9avzZoDB/5Vk1jOLXA2Ogw1CepTV/9k/g9xtT4cFMwQx+vz2VX25O4Idrdvz7 + ijW/SPnr7fG8eOgMr82Dp6vg7ipenHPll8Pz+aB0HNcDdTmxbBiHZg1gz0wVDq0dSrdihMbOaXx3yYMX + zyOkbuWZfhMPP0n5c6wgSp5vKC/+6cUfH23kz3fWyHHL4XVXuY8FcF3u5+JUfut24McjlnzTYsI/9hvx + j33GfNFgztcNVny3z56fDk6WZyX3fXSeHLuI3y6u5I+b0qYeevL7Ay++7lvL2x0LuVY1gUORivVSXyFF + 6it2ugrRswcSvViNuJV6SnMrXDG15hIDAhcZErLElMjlkhA2OJKlMID9nMj1dCRtnQkZ6wwpdBPRL2K0 + XARnhcIADrZhS7gjVYopbiQp1kgCqctfRX3JZvZtCaZ5WyxtO1PoVPzgUp9BR30WR/bk0dVQIMkxl0N1 + qTTVJnFwZxIte1I40pzF0dYsOloyaN2fRNOeOPbWRbKrOogDu6M50ZFP35kaLvft4XLvAS6eP0Tf2RbO + nWnj7KkOuk90cPqk4NRRTglOdx9R4syZ45w9e4KzPSc5031S3jvOmdMn6Tt3nt6e838ZwF1y3jF6zh6j + r6+T3nOHON+9h7NHq+loyKCxMpht6WupjFnAjvgltKav5kyBFxeLfDlf4E1X2joaE5exI1YIQrAzpd7j + KN1kpTSAq5aqc0AE4TF5dt0+xvQHmdMfYMI56R+nvSQ2+4mQCzCgO1ifUyEGAh1O+Gty3Fudkz5jOOut + wTnFKE5PDfq8tbgkRO5yiDEXg03oUyDMnPOCnghzuqMtOCqivTXGhMZIQ+ojBHEW7BIBXJdgRW28pYhf + cxEkpkqjd1ucKfUpNuwWclcrQrAyWp+yUB1KgnUoDjGkONSUojAr8kKsRfhbkqCYhszTjOwgR3KCx5Hq + Yy1k30rIvg2J7rK9wZz4VQYkLNMheam2xBw9CpfqUrRImwIXdXJmjCZ1yhCSJgmmDCV56lDSnV+awNkz + RpA9cxg5s4aTP2eU0jQud9WnYqkh5cv0KF+uT4lct2i5jtIAzl2pT8xcNfymDMZz8mA85HruzsPZPHME + 3i6j8V8whoAFGvjP08DHZcxLzNHAc/poPJxHskmO3zR5KF7TRhEyT4eIRQZEKgzgxTpEuuoSu8yQ2OWG + xCwzIPovxK0wIn6FMZFLdAmcoybnDhMMUU43HTRPlfBFmiSuMSLdzYKkdcbK0cDBi0YTojCAJT+HLVKV + c1WJd/3LLFyuTvHqMUoDeLeIesXUXnvWSb5dNUji6BDaPFTpkNzd6fbSAG5VGsBDOaz4F7jCAPZSV47+ + Peop/Gj9UPatUFGuAbxnmQqtG0Zw0kuLc/66SgO4R0RZz6bR9G4cydXNo7mpMIB9RnPXawQPvYfzumIa + spAxPAlS5YHXUG5IjO2X3NEv17q+ZgB3PYbxapAGD8OFYIdrcyVE2qWcc1Y42vk4PfrTTbmcY0F/lgiH + NCP6knS5EC/HCV4awGpcCHyFc74vDeD7iaN4nq3DW3m6vJWvp8S7RQa8V2rGhxWW/48BbM+nlbZ8UGLB + GzkGvJampTSAFdM+X/BTke+nwgXBJX+519CBvJ4yivfydXm/0FjOseLDEgeeZVpzO9aI077qHJZnV79q + GFVLhlEwdzjp0vbinIYSPvkVwp0GEjtnmNLcTV+mSfYaXTJWaJGwaBSx80fIflUSF6krDeCXULxWI2nx + y+mhc9bqUrBeX3KtDvkrpc27jqB42Ui2rFZl+wYNdrprKw3gOnc96jYLhK/V+hqyXWJCla+RcqRvzjpV + 0lYOI3X5UDLXjCRvg7QTEdllcm6Z0gTWoFJe12zWUf75qjHElCaJAQq0RooIUxrAdhxJsKMt0pTDESY0 + h+orp4FukHpv9FN/OQJY6vFYhB5Hw7U4qjCDpU4Vxq8SweocD9XgrIjoniRjzouwO5tqQkvYKHb6DGDL + ZhWqvAfSGKcp8dCEjmwRgFl27E+2ojpCn4KgMST7DCfSazARAcOJi9YiTa6RkWFNaqoN0bEWBIaZskm+ + +ypPfRYKd5izXpfZG/SYLfFywTp9XNcasHqtIRvXm+K53pIgd0fK09eIgEri2omtvHpBMeJ3P69dOsjz + m+28eauLN+8c5a17J3n/wRk+vH+W926c4K1LHTzva+FxT6MIpFp6j5Vx+nAWpxpiOVKxma705RyLnktP + 8Ez6PSdwbaMVN1YZcWOFcBiJZ72SKxWG7/YZIyme9Ao1UrYv0uGC7H8kMe+5uyWvbzDm1jqJ5et1aF6n + Te2yMZQtVKNY4l/pemuyN9oTucIU70V6bBS+vXamGuunjcZ7xhgi5uqStNCA7HkGbJmny17FtJQLDDg9 + X5f+WZrcnKrKw4mq3JmgSp/ojG5nHc7MMOHMwvHci/Dg3ep8/nm0iX/2n+KdKz3c7pHc17KX2tJsvNe6 + MnuSNZNs9ZhgpYHzWC0WTDNg5SIT3NZa4y55ym2ziEKJ65u8FYa8MR4+Znh7WRDgbU2krz2JAeNID5pE + dvAUif0KTCYnyElywHTyQmdTErWQLUkrqMtx4+C2CA7vTqGpLoX6ijjqimOoKYxhS24UxekRxAZ5sMZ1 + LjMmOjDOxgwrMz1MjXUxNtHFxExK8/+uAawY8atnpIWO/hglFNuGproYyTlmloaYmOv/fex/zjOz1sN+ + nBljJ1oyyUkxFfR/DOCpLHCdxrxFTkybPY5xky2wdjDAxl5h/hoKjLF1NMVxoimz5zmwbuM0AoPmEhY0 + h8jAmcT6zybeezYpnjPJ9pzG1qCZ7I914UzOYi4VzOVq7hRupdvxMNmEp0lGvCF4O0Wx3qwZ7ySa8jzG + mNcijXgQacadaHNuxFhyJdqKXnl9OlR0baA2HX5j6JT+ecxPlbPSP/tCtLkWIfE2xoD7CXKu9L/LCTqc + jVanM2QEzf5DOSB960DIaOXo331K81dTif8awIa0RyuMXj2apZ+3CifsVEwFLfd5PMWIlqgxsl+NQ6Kx + D4aK5g4ZSVO4qnAIDdoVf7qO16MjTvcvA1iDQxHqHFSsAxwj5wkOxb00f1sS5DPjxtCSJPEgRYv2dN2X + awDnGXE035CufAPa8vVpyZX3JDYfLzXk3N8GsBG3JVY/KjLljWJz3ikw5+0cQ94W3fam4s+9kSN5LWQY + j0KG8iB0OA+iRnNPuP/9aDUeyD3cj1blbthI7soxr0YM5y0558NULT7JeGn8fpauw+dSfpltyHcFojPz + hE9nmvOZPIO3I7Ql72nwpvCe96NM+DTBkffjJ3A/1IGT0q/LFH/SsB7AMj0VFmmosEpLBU+TAUROGk38 + bOm30mdzVlqzxcuJ+vBF7I1Zzp6YVeyNW8fOmA3keS4k19tVuNQayqLWsCvXh7Zt4RytD+XQlvXsyZvH + 3izFklZTaM2ZSLugLXcSnUXTJDbNpqNsJodLprE3cyxVMdYUBdlL+3MgZqkJAbO0CZtrQsw84V/z7Uh1 + sSZvpjllM83YNseCHVLWORuxa4ohB6YZc3SW5OgFNtxaaMflJWPpXT6FnvXzaF89n20u04gea8UaG0MW + SX9YOsUSd+kzMT6ryI33pSI7nKq8aLYVxlEtZXlmMCWpARTEe5EeuoEY76WEbJwn5TLy4jypK4xlf1UG + zbV5SgP48M482nblK9cB7thdxOH6IlrrS+hsrKKjsYaDuyrZU1tOW1MDnS0HRQccpPnAHmq2FFJVkU1V + ZYaU6VRXZVJfV8ihxm0cOdxI7+ljnDnWSeehgxzcs4f99bWCGuV0zQfqy+S6hTTvyqVldxaHdqXSuieV + zgPZHDmYL/tyOLgjh5ZdxXQp7qNhC627SuV1KV37qjh2cBvHm7fTLu91HqhWjgq+er6DB9fP8u7TO3z+ + 4Rt89vHbfPrpB3z62ad8+s/P+eSTT/jwww/48KN3lXj7nae8+vodXn1ym3ffe41P33+dj9+4w/v3+3j7 + 2lGenN7LvdYy7hzM43F7AY/aM7nZFM2FXb7KH9JOVy6hp2IB5ytc6C2fQW+ZE32lk+ktnsz54kmcKxIU + TuBcyWSOZzlQtmEQecLZKjcMZbe3Jk3+ehwWDnhU0KMYCBCqxy2JCQ9STXmUbcE94Wy38624mm3N6RSF + WWZFQ7I125Kk7SeaSN0bkx1vRE6sMbkSv/LDDKQtG7E1QtqY8I0af2PqRdO0RNhyNnkyV3OmcTNnClcz + pY1l2nAtX+4tYxx7A4zJFA4VIvw/fKbiD6LWpC13JGqOIcFOakRKP0tbInpB8m6dpzUHAm1pD7XiXJwt + VxIlHyeYcEvi1sNkI+UawE9zrXmab8OTAhulCfysbCyvV4znTvlYLhc7cj5vLMcyHCQmWbMjyJRqP9E3 + XpaUSq4r3mRK6Wo9yoTLVTgNoWrsAHaPG0yXs3DZmZLz55hyc4EVtxfbcHmeMeectDhhP5SjFgM5azmQ + K2NHcNtZnXvztbm7woDbm4y45WPKrSAzrodJXI+w4JLE9YvRJpwXznlGwaGSDYU//W8DWLE25TGps5YU + O3YpNFmgPnkemmQKx1MYwJmbDcn0MiXD25IMf1tSfEWf+1sRF2BJjL+55GYTQr2MCdpsgL+HHr4eunhs + GIP7ejXhTKq4/WUA+wi/8nTXx2OjHONuSKDk+YhAC2Ll+abHSzxJsiM3xZ5iqaeKjLFUpjpSnGBDfowF + GSF6pPprkegtHFc0aZpwx8wgub9gbdGFwm3kO1ZLW9kpGnKP1HmjcMBG+V57sxxFMztQkqQwgO2Jj3Ik + LGQsfj6TcXdzYsM6J1avmMoMJyucJloxy8mRRXOm4LZyARG+a8hP8KImx4uq9JUUx0xnS7wTjRIrW4rn + 05Qzg32pU9gT78ieKGsaIixplLbYHGUlnNeeo0kOdCoMYPkOrfHWtMl368waR2f+TA5mL6c6RmEAT2GZ + szGTLccw1d4U1/mz8drsSXR0AsnJWcTFZJKeWkTt9j10dR2lpeUA2XnJbJB4uHSdCxs2zCUuSOJ8QTh7 + U3zIWe1E7nxTGqX9nt5owA0fc54E2/B+uC3/kJzybfZkfiycwlfSJz4VbvBxrB7vSC59Jvn2Vcnj97wH + cc93MI8l9yoM4OephjxPM+VulA5XA9W46jsG5fI9nlpc89Cib6M6p9YJT3fX5KS/IcfDTemKMudAhDF7 + hO/vktd18lxqRL9XhdhSFmxLUag1BeGWFEVJP0iypjTFilLh66XJFmzJkOOybajMs6dIuHx2mj2pifbE + RtkTHTVR4ExU9CzBHKIiXQSKUhAt24LI2HlEx0j8lzJOeFGSIC1ujsSPWeQplhIJnUCilx1xbtIW3CbJ + 9iySfBeSGbGBnRUZ9BxvUU4B/R8DuLH5MJXbdigN4FCpkzVu3qx298UzMJr1XsGs3hyAZ1AkUUlZJKQX + EJWYhVdgJGs2eYuuiKNkSy1tR0/Sf+0mV2/e4dothRF8m0s3rnLu4nmOnDpCQ9NeduzepkRd/VYlandV + sGNXGTt2FlK/M5/6HdnU16ZRvyWBPeXBNJZtoKFgMTuSZ1AdPZGaqLFKA3h3/CSaUqfTnD6LfYnO7Iie + JDpoHFsjHamOHUddyiR2Z0+jPnMm21JmURk3m4IwFzICXIjZOJ2AxeNwczJjvb0uK801WGKsxkIjDRaY + 6rPU3po1zs64L17E5tWr8fP0IiEultLSEvYf3E97ZwdNB5rYVrONnIwsMpJTlchMTSMtLYWktCRikxKJ + SkggOiGJ+MRUEhNSSYpPJSU2kdTYGFKjI0iJ8iMhcoXEhdnEBCpy/3gSfaT/+jkI75DYEPzSAFasAVzo + ay6xyZgEiVVxmzSIcdMg1l2DePcxJAgS3bSI36hJkpvEMR8TSkJtqY2b/HIEcPZ8enIXcalwETeLFnKr + YA5XsyZzSeLFRWmLl5IUs9xYcCPNlvs54yW+T+HN0um8UTWHB9tduLjFiVMFjrSnWQoHN2Kf8NtGwYFo + Qw7GGdEs+1piDTismPUm4eU6wKeFm5/IHUdXxQy6ahdxbO8aTjR5crIlWLhAMC0N/hys9xc+EsGZ1nRu + nKnmzoUGrpzbx/nTBzh5/ABHjx3kbN9xzl/qprf/ND3njtPVcYimffXUVpVRVpBNiSA9OY7I0ACCfDfj + s3mDEr7uG/4aAbyZ6ABfkhUGcFgIyUFBxAf4EOfvTYIcH++7UcrVJPotIk00Rm7YZImx46gWLV8rMa0u + 3oEd0p5qY8YKxrEtUtpYiAPbQxzZFSzxMNCRfQH2HAyw4VCgpcBUdII8k0DRAQoDWGLD0TApg7SVvzP2 + BUm+CzdWrjV+N0VyWLop1zONuZRtSl+u5f82gNMUI3zH/i8DWDENdEuSLc2SA5qTTIU/GNOWZMjhRH2l + AXxM4sqpLHvOy7Pvy53IeTmvN9ORi1ljuSD5+apw3VvF07lbOouH5dN5tXIKr1dO4Hn5RN6tmMrnVU58 + udWZz8sn8J5i6Yd4XV6P1eSJ8P7XY9XltTbPknR5lm7A0wxDXs3Q536mcJwMHW5kSuwUDXBFdMjVXBOu + iBa5VGjIpRIzLm8Zy82dc3jcvIFHHd48PhHM074Unlwu49GFLdw7X8rNU7l0H4jk8HYv9pWsoTZrIeWJ + 0ymNn0Jx/EQK48dTkjieqsxJ7JTv0FjlwoGaeeyvnk9b/Wp6DodwoSORy0dy6T2cy1HhnkeEhx7Zncep + xlKuHtnDvbOdPDp/kif9vbx5/Srv3L7BW7eu8+RKP69eusDrUj6RmPhUOSL4kkCxVvAlHl2+wL0L57hw + tIuTTU10H2yWz+pSrgOsMIAf9PXy2uU+Hl8+w8VjB6gvTybWZzGbhNN4uFoRsNqasPVWEoPHUhDhTF3m + Qg6UruJAxcqXKF+lXPd4f9kaOuT7n9kXzvUj6bxzs5Z/vdHKH58c59ePjvLt84N88/o+Pr+zjedns7nV + HMrZrdK3SpZwuW4Dr7cG8+7xOD46m8Hnl8v56lED37/VxU+fnOeXL6/z6/eP+OXfT/jpx+f8+8c3UNm+ + aYgQ19FKsdoRK8IzRks5JVWriN42hSAVEdyZbk1H1ng6sp1ozZ7OrqRJFIUo/mFkhudybZbOUWXaxCFM + dBjMRPsRjLcdjaOlOjamaliaqv8NcyNVzM1UsbZSZ6y9JuMcNbGzHMY4uxG4TNdlxWIJyKus8fYYh7/n + ODauNmfeTDWcJwwVDMNlmiYLZukxf4YuCwTz5ByFEexgOwRb60GMHTcS+/GjsbAfjons0zcfgJHZK5ib + D5PPGYmjtSqTHLSZ4qjD1HGaTBunzmw5Z+G4YawcPwS3cYMIcRxEnP1A0q1VKLFQYa+gw3YAp+S9i1OH + cWf2KF6bLyJ50RjeWKnDfQm4Vzfr0e+hw3khCsc3qHJ4zXAOrhxCvesQymepUDhNhbxpr5A9fRgZivV/ + 52iTPNeABBdDwp3U8XZ4BT97FeKmDKBs8WgaN+lxWsjivfRJfLZlPt9sXyhYxFfbl/BZtSv30ydzxF2L + nS4DqJmqwi5nFToXD5X7GMPbMfp8IWL+x1Ij/qgy+XsEsAJ/1lrwos5SaQb/XG3C95X6fL9Fjx+r9Plp + qwE/C36pNuK3GmP+2GYqxxmDYnuL7C/Tk+uq8VHqaD7K1OafRSLsq+z4Zdckfm2Yyk+NU/hp3xS+qx3L + p7lGfBCtxtsBQ3jDTYU3Ng7g2boBfxvAT9eqKF8r9r/jNoD3Nw/kQ69X+Nh3EJ8EDOXTwCF8HDyID0NU + eDtIhfdiVPhHziC+r1Xj93b5XqcUI4HN+bXXlB8vyvfoN+GbS2Z8ddWc7x+M5fe3Z8CnC+HrZfCtwvxV + rP/rCh/O59fn0/j3g3F8fcWCry4a8/1lI37ul+/eo81vp7V4cVSbP5rV+GnXEH7YOogft4zg3+Vj+LpI + g0/zNHk7VZ0HsaPpDx7Gcb9B7PMaSK2QyWrvoZRseoX8tQPIWyNtZ50KFetV2OYxQPnP/Xt7p/P1NU9+ + fysMvoyD7xVGZZKU8fBZOLwVwE8PNvNJzzJeOyjCs9SaxlANshYPJHHuAJIXDRLSO5oaPyPqA8yp9zSh + drU29cs1aF4rycXTgAtBxlwP1+d2hDYPhOwqpm97J16Vz7K1+KpYn2+2GvJDvTyz/Wb82mLG7x1Stsnr + Q0Z8u8+QL3cb8U6VDg/ke/bFj+Jo0FCaNqrQsnEgp/yHcTNuDO8UmPLFFnN+qjMHOZ7dGrzYPZo/94zm + lz0j+GnPcH4+oM6fnX8ZwJfH8+ftqfBwptLk/f3+ZH67O55fbtvy03ULfrlhya937OS9yfDabHgidXZ7 + KX+eWcgvh+bwkYjL24Ha9KwcScf8QTQvHMwJXyHlBQ681bKAX+/6wfsx8JU8y+/kuf4i+DVKIM/5pyB+ + +4cbv36whl/eXMofry+BB/PglnzORSdenJ3Ar8ds+PdhM74+YMg/9xrwxR4jvtpjyje7pS3tseGn/eP4 + tdWJ34/M4bfuBfx+aTl/3lon9+oFTwP47YGPtD13njcv4myhI9tFOGQvG0zMbBVCZwwgapEa8asMBaZE + LTchbIkJwYtMCF9sTvQya+LX2YvwnEC+92QyFQvErzMha6MxRZtNKfNWwJgKPzO2CKFT/PFmW9JUtmfM + YUeeK/XF69hb7s2+ymAOVkVxcGssTVXRNFZEsa88hgNV8ezfmiDvx7KrOJQdxYHsKgtkz5YgDu4Mo3l3 + GAd3hbNvezD1W/3YXu5JTYm7bPtyeF8cJw7ncKarnO4j1Zzq2saJjjqOttVz5PBuOlr20NHaoJySTYH2 + w/uU6Gw7QFdbEx3tB5VQjC7o6mjn1PHjnDpxgiMdnRzpbOfE8S7OnGrn3JkWzp5q4MyR7Zw+XC6JPIXG + 8gBqM9ZQFbeQ2tgFNCW5CrFZS3fmBk6mr6Ul3pVdUfOoDp8pBHkqpb5CDNxEWK02oMJVncYNehyVZ9ct + uBBgRp+fIWe8dDm5WYuTPrrSb/U4FqAj7VuOC1KMUNSi01OVo5tVOempzhlPTc57aXHBR0dpAF8KNlIa + wEqEmv9tAiumgj4aaUqrYu2rUD12iXjfGW3KjjhLId8WbI81V2JbjBk1McbUxptRn2zNLhGB24QoV0To + UBykQYG/BvkBuuQHGpETYEqGnylJHsZEb9AXAWdMup+dEnGbpP2s0id8jQFRa42IWW2o/HNBwjLJJ0u1 + yVimRf5SHQoWaZHrokbW9NFK4zdx8hASpkrpNIwU56GkTRtG+nSFETeUTIUJPGcUBQt1KHHVp3SpoUCP + 4mV6FMk1C+TahdJ+s1foEym5z3vSYDwECkN3o9Nw3GaMwMtlNAGLNAlcrEPA/JdTrSrg76KJ7+wxeM9Q + xWOqHDt5GD7Oowhx0SJykQHRS+R7LNGVbR1ilxoQv9yIOIHSDBYkrDAmSfpNnGyHztPAV/Kn97Qh+M8e + Scg8NSKXaJO20ZxcL1sy3C2lf2n/Zf6qSf8aQ/hCVel/o4mXnJq+TJ3cFWMoXaNBnYcee711afLWpmH9 + SPasHMT+NUNodVOMAFal3U2Vtg0jaVs7nNZ1w5XbCgNY0T6OblajfdMImla/ojSA9ywbIOVA5TGn5HoK + A7jHW4tu99F0y77zG0Zw2UOVGz7q3PFT477vaB77jeKZYi2qCC2ehY7hkc9wbkou7Jfr9bqqcEVy5C23 + Idz3l+PDhWNE63EjUpcLkg96I7WV615ezbHkeoENV3Is6Es15FyCNueFpF+J1+Ruqj634jW4EDiYXl8V + roYNUhrAz7J0eLfAgPdLjJX4sMyEDysslNM/K/BJlQ2f19gLx7B9Of1zoamco8erqZo8iBvNzfAhfxvA + itG/N8MG8DhxOO/mavJhkT4fFhpJvJbrldrxRrYlN6P1ObZZuNC6wexcPoitrsMoXjCSbGkvSdJuIqcO + Fv4ziJi/DGCF8Zu/wZDctfokLVFVGsCx8xQjf1X/NoAV5u9/DOA0ae956wwo2iBYp0vBaulLK0ZTtkqN + 6rVjlAbwDhHGChO41k2H7e46bBOuVuOtT7WvEZVSFrprkrV2FCkrh5EkcTttxTCy146mUDHyV2EAu2kr + DeAq2a721GWnrwF7/A3YJ7m2UeLBwVBF/7cU7mxLZ5wdreGmtISJIA4XgRykozR/FWgO1KAtTIcjkXoc + j9LlqALCuY+HjFGu/3siTJNTUrdn4vSVI4B7U005J9y7PUKNvb6D2e45gFrhRweFn3ekm3EkR8Rhtj0H + Uq3YLkK8MFiTVL+RRHgPJsR3KJERGiRIjElNsSRNhH5coi3B4RZsFu6w0d+c5T6mLPEyY6GXKYulXCZc + fpWHGRs9LPBwt8Zrk40IaAdSI+ayNc+DQzsSOHkwj2P7czl+IJ9uidXnOrbSd6yWSyd3cb17D7e6G7lx + bDdX2+u41LKVs/uLObgjkV01oWyv8Ka2YD270lxpiJ5NS/B0TgVOk3Y0iatuNlxfY8SNlSIeV+jQJ7Hm + yFJd6meNpkri1q7ZahxZLBxb4sGD9Ra8usmcu2sNuLRWl64N2uxdp80Wifu580eRuVCTzJUmkm8t8F+k + xwYXDVbNUGfZ1JGsmjISD2c1Ql30iV1kROo8fYpddKgTNM3T4ZjEqwty7I3JI3k4fiR3x4/i4mQ1zk/X + p3+eDZdWOAuv8uCtymw+bt3LB2e7eHqpm3v9p7nU3cHB+q2E+21i0ZyJOI83ZYq9Lk52GsydosOyeYas + X2HOhjVmrNtgzDo3Q9a66Qt0Wb9JH7eNhnhtFG7gYUmMjz0p/uNJ959App9AyuyAqWQETCEzwJnckFkU + RsyjPHkZDZX+NO+M51BdEvWVcWwvjKQqJ4zyjBAKU0NJifBh85qlzHOewARbc6wtDDAz1cPkL/zH0H05 + +lcDXQMNtPXUlQawYlvfWPGeYhSwvhyn+/exCii2FQaw7ThT0V3mjJ9iw9QZDkyfM445C6Ywf7Gz0gh2 + mjkWx4ny2Q4GyhHAChPYxs5ISmPl1NCz5tqxYaMToUFziIuYT2K4C6mh88gInE+W92zyvKazxc+JvWHO + nEp14UreHG7lS11kjeW1VAveSDblrWRj3k4yVpq/b8YZ8STSgAdhBtyRvng70oTrUWbKaUL7Yyw4F2HC + qVBdjgVqcjxgDN2B6pwP1qI/REv4szZ3o+XceGPuyzX7YzU5HTGatsChHPAZxIHA4exXzJIlfVaBRum3 + CgP4YIjCBNamPdqIw1GGHJS+3qTYH6YlWlqHjgRDOhMNOBQxhkNh6kocCFNjv2IUcLhCb2vRpjB+Y3U4 + LH28VaHDo+SakRpKA/hglLoSTUoTWOKJxHdF2RQv10rUpC1NW2kAH8s34bhw9KOFxnRIrG/N11EawEeL + DDhVbEhfiRFXZPt2sQmPS814XmrBW0Xmyj/6PJdrvJkwhucxo3g1bAQPQodyP2y4curnuxGjuB+jzmPJ + M4/jNHgYpcaD8FE8jhjBG3FqyqmjP07XeWkAZ2jzebo2X8k1/y055Md8C77LMOOfyQpdqMtb8szeDtPm + Q+FKn8Q58GH8BJ5ET+SCrz01kucj7AawXv+l+esuZYjVQJKnqZK9QJ+8pUaUrreVWDiFxsj5NCevpDll + HYeSN9AQv54inwUU+i+hLGINlXHr2Z3vT9eOaI7tEb5btZ69+fPYl+1EU85EWnPG0Z47gY68iRwpduZY + +Ww6S2fSUuREQ7rcS5Slcg2+XE87klaaET7fkKj5ZpKPbImfa03SbHPhWMLVZxhTNduMaim3TNVj6yRd + 0eT6NM8wpMfFjEvzJEcvsqVn+QTObZzL0fULqV88kwynsYROH4vXrHH4LXIiYt0CssPdqUgPoSY/mpqC + GOqK46ktiqU6P0LZryvSAymI8yYzfCNJgatJC91AUaKvxNYY9pQn01STxcFtORzaniXIprk2RwnFusAt + uwrp2l/FkabtdO6v5fB+xUjbRjoO7aftwB6aG3fQuKuChp2lNMix++oLaGooob25mpOdDZw93sy5Y22c + bDtEZ1MjLXvrObS7liaJe0315RzYVUzTrjzRFPLZ9WmynSzHJMvnZXG0KZfmXRkc2J4usSqf9j2lHK4v + 5VBtgRLtu8vk3rbIfW2R84sEJXQ1beP8iQPc7D/Gm69d57MPn/PF5+/z5Vef8/U33/DNd9/yzb/+xddf + f81XX33Bl19+znsfvMmTZw94+vweH330lK8+fYMv3n/Ip69f5sPbp3nW08i9tkpuNeXxoD2fx0dyuHc4 + gauNwZyv28SRorkcK5jBqcJpdBdM5kzBeHryx3JOynOF4zlfNIHeYmmrZVPoznGk2n0oVRsGscdHlUMh + OnSFG3NS0CNxpz9Mn5uRRjyMN+X1NAtez7LiUY4V9/JsuJNvz8UsO7pSFLN4mLNVYlaBxInMSC3So7TJ + Em2Qo5jZI1iXkhADtoWbUBdqwg7hHQ3B5rRH2nAmYRz9qRO5nKr4Id+EC4rlQIQXnEm1F45iSMr8YfiN + H4D/FFUiXEyJXWhN2GwD/KaqEjJDjWTh3iXrzOTYccJbJgg3seNcnOS5eAuuxhtxTWLR3QR9HgkPeS1b + 7j/XitfzFLCWuOGoNIDvlY/jUpEDZ3Mc6EyzY3+0FdX+xpR5GlHkYUKe6Je8DfLdVulQKpytfMYwyscJ + lxG0OKnSPUuPi3NNuLLIkquLreida8hpZ02OOA6hU/r9SZtXuDBpFNdnanBb7ve26J5bnqbcCrDghmix + y6LD+sNEl0UY0yfPukdid7diFpUkKYUHd6cbcCbdWLSjxd8GcHOyDXURRpT7yTN2Uydd+F3GJh3S3Q3J + kGunewln8rMlydeaOF8rov3MiRS+FOZjQoh8r4DN+vi46+ItnHLzJi08No5h00Z13Dap4yMcUTH6V2H+ + uq3Xw3uTEf6bzQn1tyIy2IrkGFvSE6zJTLGlIGOs5GmB1F9BvBU5kqPSQ3RJCxQ95zuGFF9NyfkaSvNX + gVxpDyVREmsSLKlLtVWOAt6bYcPeTDsacsZSJ/mwNNnhLwPYntBgB3y8Jsh9TWbDusmsXD4Jl5m2zHK2 + Y8GsCSxfOF24wUKiA9ZRlOzD9jwftmYupzRuGlsTndifP5dDhXPYnym5N2kCu+Te6yMslAbwAeG8LfK6 + I17acJI9HUl2tCULpFROW5o1TjlF7/50V6qiXInZMFV4mBnO1lpMdxD+ucAFP29vUpLTyMwsIDE+h8z0 + Enbu2MexYydob2+moDgd98B1rHJfgJeXK+mRbuwviqYhyVe03DQK5luKtjDnrLsxt/0seSPUjk9jxvFd + +hR+LZnF7xUz+SLDio+lDX8YrS15R5UnQcN5LXAY930U+mqocgroJ5Lj30w25E3pP49j9LgXosFdvzHc + 8RzDPQ9pd9JGLq0fxZk1IzixcTTHvDQ5Fqyv7OvN0s8PhJkqDfGGcNH2oTZsD7FnS6AtpUFWlIZaUh5l + wxZ5RlUpdn/Bhhrp+9tyHYVbj6NM4khexjjSksYRHz2BqMiphIVPIyRkJkFBMwkM+B8InEmAAsGzCBQE + CRcMCZlBRMh0YkOnC1+fTmaEE5mhU0jxHkeCxzgSPZxI9pknnNKVnGh39lTl0ne6nTs3L3Pt5lXlFNCH + 2ruo3d1AadU2IuKSWePuI/AlKCqZ4JhUQuPTiM8oIL98GyVVO8ktqSYuJRf/kBiiEzMpr95Fa+cJLly+ + wZUbCgP4rtIAvizX77t8gRNnj9N0+AB7GncqsXtfrRL1DTXsadjCnr1lNOwtpmF3vuSfDPZUJ7JvSxBN + FWvYVzifHSnOyqmdFQbvtuhx7IydyL6kaexPmk593BS2RYxXrg9cFSXvx49nZ9oEdmdNpT7DmdqU6VTF + z6Y4wkW4tAtxG6YTuGjs/zGAFxiOYb6JLq52lqyZNhX3JQvwXrdG+q87sdFhFBXksG//bo4r/gDV1squ + 7TXkp6eRER9HWlyc9Ot4khNjiYmPIiQyDP/QYPyCg6WuwggODBN+G0ZUUDCxIYEkhPuTFO5BXNhiooOc + iRKeH+VpT5ynDek+EhsC7CmX/lsu7ahE2naelwmp7vrEb1QYwFrKNeEVJnC8m6YSCRK/FO8lSNxJ8zSW + 862oCh/PnngnDqfO4kSGC+dyXCQ/zOFS9jT6UseLzrTmbLwZ5yQ/9UoOuir99272RF4Xbv1W2WzeqJrL + nRo5r2IqJwocRXfa0hRnojSAFeavAodijAWGEguMaJa+0xZryJEkM06m2XA8eyydZdPoqJlLx46ldNSv + pbPBk7ZGH5r3ekuO96J1dwAdDVGc6yzg+rmdXOttpP9cC73n2jl77gi9oq/Oib7q7j3GyVMdtLU0sn93 + HdXlRRRmpZGTlkh8ZAghfp4Eervj7+WmRMBmN4I83ZQGcKy/LykhwaQqDODAQBL9fUjw8ybRz0PKDST5 + rRIsIEW0VWbwOIoibNkSa8W2OCtqY+2ojXZQ/ulgW5QD2yLHUhPmILnYgV1SP3sCHdgXYMfBQGuBOYeC + zUTrG4u+NaY91Fh0vhnHJTcdDRZ96a/FuQBdLoUacl2e160k0bwpxlxNM+Jihgnns805k237vwxghemr + mAL6P6N/W5JsOCj5uUnqTGG+t8Qb0hqvL6UgwUC5VvMJyQk9WY5yvXH0ZY6lP3s81/Inck247o38Kdwp + ns6D8lm8WjmDJ1WTeVY1nre2TOa9LVP4rNqJf2yZykelY3kj05xHCTq8Gq+t/JPMa/FjZFtRavEkVY9n + mUa8milaKUufOxm63MzS5VqmHldy9JXmb3+u6I18fS4USW4uteNStTPXd7tyfd9arh3awK2jAdw9k8qd + 7lyun8jgUmcixxuCaKlxo6FoJbVZCyhLcKY4dhIFsePJl9helDCeqoyp7CqeRWPVPKUJ3FA5h+btyzh1 + wI+e5hgutGdyviWLY/XJdO1MFe6fw6nGIi511HG7u5n7PZ28euE0z6/08daNK7xx/RKv9ffx6OI5Hl/q + 47UrCiP4Ao+V6OPVq4rRv73c6unm7OEWuhr2crRhH+daDyungVYawBf6lOc8lLbad6RRaQArlixwX2qP + 53JrAtfaELFeNIOPIwXhU5QjgPeXrKSp/CUOCBpLVrC/eAUd1W6c3h3IlbZ4nl8s5/NHe/j+zYP86+k+ + /vG4ns/v1/LJ9XLePJPB3eZQeraupbvElWs7NvKsPYwPTyfxWW82X1wt4593dvDVawf59p0T/PuTC/z0 + 1S3+/c19fvjmMd/96zEq+3xHSxLT4liCkKQ06bgpRnTFC5GVSu6I06ZNsR6RdOhWISyt6SKWcmawN3Uq + xSF2xGw0YOOCUSyaPgznCa8wyXEQEx2GMcF2BGMtR2NjMhorE9W/oIaF0WgsTWW/pTrj7TSZ4KCJo9Vw + ZkzWZOUSSzattsV9nRUBno6E+IzDe4MlS+dq4uI0Epepo1nqos/qhWasWmgqpSkr55vgImRxvN1QbIUs + OtgPxX78SCzlHkxsBqNvNgBj4wGYmQzB0mQYdhajGW+jyUR7DYE6UxzVmD1uFIsnjGK9kGSfKSOJmjCc + lLFDyLZ/hTJrFfZYqXBYBOnxiYPpmzaCG3NUuTtPjccLNXi0TIcra7XpXqfBsTXqdKwRMb98GHuWDKJ2 + 0UC2zB1IrrMKWVNUyHR6hcwZI0mbrUGyiw5Jcw2IdzFQGsC+8twCHF4awOVLVDnoYURfzFie5c/ku9pl + /LJrGT/uXMZ325fzccUi7iRNpGO9JrUzVURsqrBd0Dp/EP2bVHkeqZiGS5/vRez/VmnEixozqDFX4sV2 + C6i15M9t5vyy1YQfyvX5sVKfnxQGb5Xh3/i1yojflTCELYb8XmbAT0V6/DNDjQ9TRvNxlg5flVnwY91Y + /mh04s/mGfzW6szvLc783DiZL8st+ThJk3eDh/PcbQDP/zKAn617hSdrFOVAnq0fwBubBvCWmwrvegwQ + DOQDn1f+NoAV00B/GKTCO4EqvBeuwicpA/iqfAg/7tfi5y4Dfj1pxE9njPi+x5B/nTPkq/NG/POCEf+6 + acNvT53go/nwz6Xw1Sr4Yjl8vIgX77rw62vO/Pv2WL68YM6X5+T8PkN+Pm/IT6d0+PWIJr+3jlGOYv2+ + +hW+KRrIN3mD+DpnOJ+ljeS9pBE8jx3B/YhhIj5GcC54GK1BQ9kjqA8dxTb/4WzxHkSl50Bq5Pts85D2 + 4zuArsQxPGyYwldXN/D7W8HwZQz8oDArk+EnwVex8F4ov7/mzxf963ijbR5Xq8dJUlX84DGEZKnbtKXD + yRehUu1nwk5/c7ZvMqbSVYOaRWo0rtCkw02fM75GXAjQ4VLAGK4FqHI7QPEP/ZG8n6rJZ/kGfFFhzL/q + TPlurzk/N5nza6uULab80CTPb68+n+4w4GmpFjeknrsjh9PmM4jGddK2Nr1CT/Ao7qXo8FGZJd9us+H3 + 3Vaw1xh2j+GPXaP4fddIfq4fzo+7BU3q/NZlyIszVry4Op4Xd6U+Hk3nzweT+f3BeH6778gf92359bbc + wy0zfrtrxZ+PJsBrM+D1RXB9EX+cdOHn/dP5uNCeB0Hyndaqctp1JCdXq3IlRsTotml8emI5fzwOkLqN + hn8pRv/Kc/xVtn8LEwTx4id/fv5kLT+/vZwfnyzg14dz+fPWTF5cceZFzwT+PGnPL51W/HDIlK/3Kcxf + fb7aY8jXu034125Tvt8tbXyfHb80T+TXTmd+OTWHP64s58WdtXKfm+GtQIGi3kL5steDe3vncyjJkhJ3 + VeIWvELg9AFELFAlfqURyWstiVtlRcRSC0IXmxEpYldhAMetEkHoNo7szeNJ32RN6npTst1NKfY2p0RE + Z5mPMeX+ZlSG2QoBHkttqjM7slzYVbiUPSXr2V3iye4iX0EAO/P92ZbtRXWGAt6y7ce2HH+qs3woS94k + 4nAdZWlrqcxaw46STdRXuAk8qCvZSE3BGiqzV1CZs4Jthetp2OrLwR3hNNcncKg+lab6DA7szGX/riL2 + 7yyhYYcQ9h0VNO7cokTDrkr27qxg764tUlaye2cVu3cpsI19e3Zx8EAjhw7ul/IAzYp/UbYe5EjHAU50 + 7eV4xzaONpdzZH8eh7bHsqfIm9q0VWyNX8D2mDk0xM7ncPwSjiQspT1mEY3hc9guYmdLyDQhyFMo+T8G + sD5HfMw47S3E1s+UHm8DTmzW4ai7Jl2e2nT66tDuq0279BUF2rw1afUYTbu7iLvN6nR7a3PR34DLQUZc + Djb6XwZwf4g5F0LN6RXBdzbcjCMKERiix14R7TsDddgRZkhdlCl1sWZsFyjKHbHm7IgzZ1eCQNrHDiHd + 1VEGlIVqkS9CM9dHnWwfLbJ99UnzMiTJQ5+YdbqErtQiYo0uSZ6WJApC1+jhKfnWZ7EqwcvkvZW6xAji + l2mTtFSbVFe5hqs22Qs0yZA8lSr5Kn7KMOInDyHOaQjxTsNIcB6qROK0YSROl9gyYwjps0eSPV+T/MX6 + FCimhXPVI99Vh1y5nsJQLlxtRNZKfSJmj8Jr0mDcJw1ho1x3vcLUnTECTxdV/BdqErBYW2kA+8/TIkCB + uVoEKozgWWp4O4/Ec+oI/KerEjpHk6iF+sS6GhAniFmiS9xSfRJXGP1/bL11fBVZ2oUbunEIcXd3I8EC + wR1C3N3d3Y0khBAkQEiQkODu7m4NdNNOy7T3tE33THtPy3PfOjDzfd+994/121V1qurUqdr7fdc6q/be + ArPnpSll/hZUBFpRFmBJzjx9UqbJ8VNGkjp9DFlztMiT/FsVZk1zvKO0H1u5F/oqAzhD6kDmPMGcceTO + UadorjpVCzVoWqrFyiAdeqNFwCSIaEkwYmuIYgC/yNalQxkIGsGe0LHsDZO6IOUBEfv7ny/vCxsj2wWh + o1W9f7f7v0C/gmXDGAgYzn7Z52ScvmoI6FPR2hwPG8vxoJGcCx7F1ahx3IrX4l6iJo8Sx/FqqiZvZ+nw + bp4Bb2fr8mrSWO6Gv8hV/2cG8JWlatwKG8b9BHVeytDjpVylF4kxV7P1uVIg9VJ42s2G5wZwvWIAGz83 + gDW5UazL4yozXiqVfVOHczFejZuZw3hUoq7qAfxhqzmfKEM+P4di/Cq9fz/ptOHTLjvVPMDK+oetVrzb + ZMob1Qb/NYBvZwxTGcAXlGGlU4fwuHA47zfo8Jnwg8/aTfi01YxP5LhPWh14WmPNnRzhkRFyfwJfoNd/ + GOuWjJb2qUHzXE0qpc7kTx5F9qTh5D+fA7h6qZ7ETkuaQ80oX6SlmvM3b4Zg5miJp0pv4DH/7QFcOl8Z + 1luPhkBjWp73AG4O0KF1mSarlHmeQ5S5+HTYKEJZMYHXhemxNlxP8rI+XdEGrIwxZkWMIU0iomuCxlLu + P4piybUli4ZT5T+G+iBNWuTYZ8NAPzOAu6IM6I4xYGOcAb0JxmxOMmGbxIhBiQNKL+D9efbsSFdMYRN2 + ZhozIHmrP1GL/ngNdkhO3pMu90P42RHF/M014Ei2HscydTiWoc1JebanRUCregAXm3G+zJxzgiM5ugwK + r+iNGcrmhJHszJX4VWHFYWX+n1onBirs6BYx+cwAHktm7DARwiNIT9MkV+pMYaEVJaVOFJa4kJHjqBpy + OCrNiYBke5Yk2rMw0VZKO5Yl2BEUa0d4jD1RUY5EhzsQF+ZEWux4CtOnU18aQGdjHB11saxQckxzCuvb + s+ntKmDbmhJ2dJezZ30Nu9dWsXNlKQPtBWxqTKOuaBkl+XMpzp1OaeZkGtO8WZXkydaE8RxJmsBFKa9F + OHIj0JSb/npcW6jDRYlnRxcasM1Pi01ThQ/P1uf4QlOu+1vyUrAVLwWZy7IBp5c96/27IUCX1vmalEs9 + yvdTJ2+eIakLTFTDPi+SeDNPtMMcz1Es8hpD6AQtkoV3Z8+1oGimMfXT9Oicpstm2XefcPNzUzS5KTrg + oeiI++6juTJBgyt+ZtxZ6M79kOnSHsN4o6WMd7au5dWD23l88QiP757n1pUT7N3RI781iSXzJjF5vDUT + XYyZ5KjLLG9Dls40I2yJDeGib0JDrQgONxUYC4wICTMiIsSEmBAzUiOsyYt9bgDLfaqU3FYZp5jA46lI + 9KIiwVu2T6A6ZRINuTPobg5n2+oMtq/OZ6M8j676dFZUJNNSmkhjSTJVeYkkhy9jru94POwtsbd6bgBb + GmJmYYCJYuia6WBkpo2BybOev7oGGv9jApvIZ6aK4av/rFT1EtYWaMmyLhbKXMCulji6WeE23o7xk5S5 + gF3wneHJ9NneTJ3phfdkJ5zczLFxNMTG3gBbB0Ns7Y2wtTPCzc2U6dOl3oV4kZ00hcrcWdTkzKIhew7N + GXNoTZ5FR5Ifa+U3b0714UjhJK5WTeZBw0ReqXHn9XI73iq15GmJOU+LzXm7UBn62YSXMwy4n2bEbQWS + k69Lnr6Ra8XVAhsu51lxNtuEU+kGnJEcfCFN6py0n6uC25n6vCS5+XGBqcoAvlqgK1x4HPtTRjIYP4zt + yaNVBvDW5waw0gu4P02bgTRppxn67MoyYTDLmG2yviVFS7WPMkS00m4VbM/UZCBdQ6CYx+NUQ0kPZGqx + O0+PPfmG7JRyMEubwWwdgZxXsD1T9s/WUmF7rpR5GgxKrFfKfsH/NYAt/msAH2g2YU+TAXsblCGh9TlU + p8uZRskLzcbcb7XgSYcNb4pWe2u5FW/VG/N6pT5Py7R5u0iD13LUeZw1ipcyRe/81wDW4uVCXZ7kSz7I + 1uBhxhhels/fytfgg1IdlQH8WZUBf6/W54sqXf5RK/qyyZxfGqz4vsqCb8pM+azAiPczdXlP8trHwpM+ + K3DkkyJP0VaTeJA5nm2LDCn3HEqipRoxJmpk2gyhzGMELcIrVi21pCtItE+UE5tTfNiZP5MDVUvYXxXE + 7rIANucvoSnWj6aE2bRnLqEjP5BNDbHsW5fJgfXJDKwIYEvjTLbVTWBHvRd76hUD2F1lAv/XAG6fwq5m + H7ZWOLI225q2RBualBfMpN0WLbSicL6N8Al7yVnWkr9MKJ9gRP0k4XJTzVkx2ZS28fqs8NCl20fi10Th + ob7GnPYz5cxcW84scedc+AxORM5n0H8mK2ZNpHaRH0VL/CgOnE11jD8rChJYX5fNhuYC1jXmSvtWTGAp + Beuac1itmMAVKSwvSaCxIJqGvGhaSxJZVZPBuoZcNrUV09teKlDKYjZ3lLK1s1xiRLVqbt79W1dyaED4 + 9uAGDg5u4sDAJvZu62FH7xrh+J0M9q5gR18rOzY3s3NrE/sG2jm0p4uTB3o4KVz9wPb17Opbx8CGtWxb + t4ota9rZvHY5W9c1s627XlBJf3epaIVitm8okH2LOTxQxZHBWnb3lDO4rpJdGxs4oAwF3dfO7g3N7NrQ + xIHN7Rze3smBbSvoX9/I5jV1DIrOOL6nh2vn9vHG42t8+sEbfPf1Z/zr+2/54aef+PHnX/jxp19k+UfB + 97L9H3z0yXu8+fQV3n7nMZ9+8gb/+PvbfP3RYz574xofv3SKpxcGeLivk5vba7mzs4ZHBwUHSri/O5sr + fdHsb5jKvurxkl+9VH9gH5c8e6rGnjN1TpxpcOZCsxuXW7243jGBCy2Sx1KkHSdpsEfa/uFcM8nfwscK + rbmWJxwt21S4mzmvFVnylhKnqh14vd6RJ3Kexy1u3Gly51i5PVsLReMJD6xJG0tpymhKUtUpF/1elaBJ + fYI2bckGrEkzZYOgVzRIf5ryYpgtx3McOF/gwAXJ8ecKDDhXrM/FKhuOF9uzSbREkd8wopzUiHYfRfIU + EzL8rEnxNSJmvDpJkxRerC/cxlrilCf7ciQf5zirDOArcr5rhSbyG/S4U6DPg1KJh9J+X1H+EK6x4kmd + Da+3OPLqCrdnBnCTk2rYz13yuzfJtbULT2oI0acmxICqYEPhV6IpRMesED3TMV2ddo8hdLmpsU30wGFf + 4T3TTbgwx4JL86w4PUO02mRd9rmNYK/9ixxxGcaFSRrcnKnP3SXGwpMtuJsg3DLNmuvKtDxyT86lGnM+ + QziwxN3TOUacFF59WjGAywT/2wCucVANAb2jxI41qYY0RwuHFO5XFqBBWbAOZSGGlEWYURplSWmsLQUx + NuRGW5EZY6Hq+Zsaq/T+NSExypi4CENiBdERBkQJvwwP1yEiQpdY0ZnKtvBgfUID9IkKNiZe9HxKnDUZ + SdYUZttSmm9DpVxDfYUzyxWUOlAvGrEq05Ry4YxloiXLknSolLI6WZfqVCkFdWnCcRXjWvZdU2rH+gp7 + eoX/9VU50FfnyoZad9rLXKiWmFqY60haqhMx0U6EhbgSsMyVxQudmTPTmVl+riyc7UPQ4mnCOeZQkBZE + W2UC3U3xdFUvoq1wAqtLfOhvnM5Aoy/bqsbTV+xKd5Y16+X5bs60ktxjx95CZ/YXO7G/1Jl9wjH3lUkp + v0cxK/ZVu7KzSnJ26Sw6JZcXhfoQPM2KKfa6+Loo/+H6kRwXQ3lpmWp43NycMoqLatmwfjNHjxxj795B + GlrKCUtexrLIOSQlLKGxMFauKYfNhdHULvSmcYYlg0GWnIs2F61kw9M0B74s8uCnmon80eHHn6um8mWl + DR8XGj4b/jl9LK8lj+S1lFE8SR7Dk9SxvJ6tyZuS49+TOv6e5Kc38414kqHLy8LbH8WIXovQ4H74WK6L + jjsbMIITIaM5KnruWJIeR9KN2S+8YneGJTszbCSP29Mn/HpdsgPt8aJLlZ6YKZZ0ZNmxutCRNXKvFHSV + OLC2yoV1tW6srvWgvcZN6oIH5ZIH87O8SBeeEy88LyrKm7AwL0JDPIUzSikIU8x8QWiEtwrhkT5ERI4n + OspD6qUHWbGeFCZ6CH/0pDjKnfxwDwrCJ1IUPYPi+AXU5kXRu7qRC6cP8ODeDW7fvcPFq9c4cOwk23bt + ZfWGPvJLqwiMjMc/LJasomoqGlbQ0LGW9rV9bNy2l97BA3Rv3sHyzvWUVjZRWd9OV/cWdu47xsUrt7l+ + SzF/nxnA1+/e5PLNy5y6cJI9h3axfecWFfp39Al6VUP8bh9cx/aBLgYGOti+tYX+3lq2ri1he1cagysD + 2NY8k/WlPqzOe9bDVzGAu/M86JV62lcwkfU5XqxKd6Yj3UnqmjNrC93oqXCnr9qLnkofussmsapwKq3Z + fv/LAFZ6AFsR5KjPEkst5pmOY7aJJrOE5z4zgL2JnDeLhJBlJEWFkZOZSENdGVu3dHP6xEFOHdnPlu4u + WqpKqc7NpDwnnbK8DIryMsnITCY6LpqgiFCWhYQQGBxGSFAYYcEhxIaHkBwdKlw3jLyUZeQmzRDN5km6 + cJr0UIk34ZaUR1vTEG8ncd+eNqnXzbGW1ESYUhKqT2GIHgWheuSJnlVM4ELF+BUUhxtQFGZIcagxZZGm + 1Cr/HyYJh8n0YFvBBPYUT+ZI+WROV0ziTLkXx6U+Hs61FD1qwtEcE05Ljroibfi+5L1XmybxTtsMXl8x + nesrJgufdGO/5K7dZXZsVwxg2X97jqlwUdG+kvN2qMxfM+G3RsJjlRcdLTgicemIxKSDrfLdK4VTKb01 + V81lYK0/Az3BDGwMY3BDBDs2xrJjQwoHtxVz7tAKLp3s4dyJfs6e2s2pMwc5fuYQh0/uY//RnexXptrZ + soGe1R20N1RRW5Iv9zyTrKRYUmLCJT5HkBYfSXrcM2TERpEdH01BQjzlaalUZqRSlpJESWIsxYkxlCRE + SBlMqcSW0sRZ0ma8qUp2FI1qLfnYktVyf9aKrl+TbS+Q9pvlxOosZ9ZkOrE+w5mNac70pjixRY4ZSLFj + MMWGnelW7MqwYm+WJftzLDkieuN4ngXHJFYcTdTnVKKBaA1DrmUbcVO48PViI7nvRpwvN+FMlbmKa/zH + AN5brkCZ99eZPbK8S3LGgOTY/jzhAHLPB+Re78gzEi1goDLfd8rygVLh/+U2nK5y5Fy1ExeqnLgqPOZ2 + 03juNnnzoGUSj1qn8GSlH69JfHyjy5u3ujx4b/V4PljlzedrJvL5Sm/+1uzIa+VmPCoyUL30qRi/T4q0 + ZVlHNIAsl+qJXjAWTmDC42pjHii9gGsNuVkjv6nOiGsNplxuMOF8gyHnRYuca7HnworxXFw9nQvr5nN2 + 4wIubA/myp5UruzL5dyODE5uS2Lf+ki2dyyjt2kh3bWzJRf50JzrLlrXlcYcF1oKPeisnEDPcj+2dc5m + 28oZbG7zo3/lPA5sCOfYlgzO7SyT81VzZFMJBzcUc3RzFcf767mwu5MbR5UX1Xfy8NwhXrtyirduXODN + a+d5cvEMDy+c4vGl07xy+SyvXD3Hywrks1dvXObx5fPcPnmM4wP97Nm4gb2C49u3c/XoMe6dOy+fX+R1 + 2e/R5RNcOLhVZQDn/f8YwEWSjxvSPFlXITqkeRGD7UsFS1TYvnwRA8uXsG9VCCc3xXN1RzZPTjfwt1td + fPpgLR/e7pTlDj642c77Vxp5eqaSx3syubQ2hPMdS7m7KYq392bw4YliPj9fw5fXWvns5io+u9fD12/s + 5Z9/O8WPn1/nX1/c4bsv7vOPrx6gtksE8OFCU87XOnCt2YWL9facrrYU0qQMWWWienN5d4EZg0Jsd5a6 + sKdagm7JeJpEGKUv1cbfdxgzfV5kotsQvF2HMd5lJJ4Oo3GzHo2d6QhsTEZKORbb57C3GIuTtRae9jqM + d9LBy2kc86aZErHMhdgQJ6IkoadEO5AV70pKpB3B8w1YMFVToE3wPHOiltoTKYha6kjkYgfmCYEc7zQC + Bys1HGxfxMl1FLaybm43FGOLIZiZDsHSdCjWJiPku8fgYqOBm70G7vbj8HJQZ6qLOgu8NImYpEfqZG0K + vTWp8hhDk+sIVjoOYZP9EHY5v8AhrxGcnazOtRma3BTcm6XD7QX6nFmqw77FIsIXjmPrwjFsmDuMrplD + aJ2mRv1kNSq81SgTVEweTuVUDSqm61Iy05CiGaYiIp8ZwIkuQ0lxVaNg/BA65muwK0bEQ+kEPloxj3/3 + BfNXXyC/bVzKD+v8+ah1NnfzPdi9VIsuOW+7sxqdgn7fIZxZNopXRVh/Wm7Ad42G/NpuzF9d/2MAK8NB + KwYwa634d5c5P68w4pcOE35dacpvKijLxvy24hl+X2HCn+0m/NZizI9yvi/KNfmwRJ3P6gz4Z6edXJsX + 7JkKB/3468hUFf7cO4Xv17vwhYj/D7PG8XakYgA/6/GrGMAK3g4ZztPQF3ka9gJPw5+ZwAr+FvMCHycM + +59hoBXzV0G6Gh8VqfH3xiF8u0Gd73fo8PNBA344JtdxwpB/nDTkm1OGfHlWlq9Z89srcl0fzIDP5sGX + S+DzBbI+i7+eTuO3Rz78eMuZr89ZyDEmfH/amJ9PmvDjYQN+2a3Dr/0a/Lh+JP9oVeOLakHpEP5e/AIf + 5Mp1Z77Aa5lDeTlzOI9z1LmTr8mJQnleBersLNaW5KjF5tyxbMoYQV/SMDYnqrEz80VOVmvz2sB4vrsZ + yB/vJMI3OfBj/jMD+Ndy+JeUn+Tw11tpfH8nmvcPzefeBm8OllmxfOkYKueOpGqpOs0R+qxJsqI7wYpV + gcYsn6VOx4wx9CzQYkeQAUdEmJyM0eF0tDoXokdxOXoYd4TsvlmgzQc1Jvy9zZJv1tnwz002/LjVhl8G + rflxwIzvthrxxSYDPlxnyONmLUlIYzmcNoIBeXZbAtXYGzGUi5mavFptxpernPlpgzN/bXGALeb8sVGT + 37pH88v6Ufy4YRQ/9I7mpwEt/n3IlD/PSl275Q4PFQN4An8+8uD3R878+6E9fz625feXLPn9vjm/P7Tm + jydu8OpEeDITrs/g34en8NNmHz5vdOBJigF3QrW5skybG7GmvFbnxcf9s/n2XAB/vSb389NM+F4xfvPg + d1n+I1nKRP76OY6fP1rCj2/O4YeX/fj1gS+/35jAXxc9+fOkM38ctuPXPdb8oNyDzcZ802fIt30mfLfJ + lH/1mfN9rwU/brbl5+3ym/d48PPRSfx5cxE8CoY3o+C9JJVxz/t5/Powg/eOBnNu5SQhB2aULRklYvuF + ZwbwYhPKgmwpDnAgd6kdWQuF6C2U5UX25EtyKFV6AUe4Uh5sIyLUgjoRncvjbWhJsGB5nBltiSIiMhxY + pQx/I8JsfYUvGxvmsanJn+66IFZXBrGyVERc4TJa8pbQkrtU4M/ygkBaC0NoyQ+kJmM+1emzqM2eQUP+ + DFZWzmd13SLWNSylq2YB7RWzWV48nbYyEWxVC+huVkzicNY2R9LVEE1XUyJdjRmsbsljdXMRXcvLVPOI + rWl9hq62Cla1lrNStnWIcFvRUklrcwXLG6tob6lj1cpW1ghxW7tmFRvWddG7cS0DW9exd2C16k+m3ZuV + XgvFbFmRysY6+d6yRXTlz6Q715ee7Klsz/RjR4Yf29N86UueyLq0iUL6JwtJ9pZ79dwADjCmY6Em20Kf + GcDHY805I/fvZJQhh8IkTodqsUdE+u5YPXYKdsXrsjNBlx1RWmwPG8vOMHUORmhxKt6Q6+mW3BLBeyPd + 4v8YwFfTrLgiJO+SkLyzss+hNBMGRQz2xmuzPkGH9SmGdGeYsCHXnPX5FmzKt6RXcueWYluBDT2FlirD + pivDgNZkbepjNaiJ1qA6WpvKaCHyQubzg/RIX6JN0jwNUhbpkBtiTk6IGQkLJd9OepHgqUOJnatO2mL5 + zN+AgiV6FC/Wo2yBHpXzdKmYqUnZ1LGqHr953iPIGz+c3AkKhpE3cbgK+RNl+8Rh5E8aSvHUUZTPkOuY + rU/tXH1q5ukJdKmep0O9YgAHmlG91IiMaepEew8nXM4Z4j2aQJ/RhE0ZTeT0ccTP0iZBMYFnPTOBU2br + ocz3mzpLl7TpWiRJ7oyfMJrkKeqk+2mRO8eAwgXGlC4ylWs3FhhRttSUcn8zypc9Q1WgCB9pEzUhNqrP + M2aMJWXaKDIl7uUt0KVoiSGVwRY0xthRLcIpR+7V/xjAGv81gIvnjqV6ocTPpRqsFvG0NU44TbIZ+5JN + pa6MoXfJENUwzluWviBxdCR7ZJsyDPShSA2BJvtleXfIKHaFjGRXsECWdwaPeLYeMlo1/PPBcA2pNwac + jtXluOx/JGg0h5cN50ywxGHFAE7Q5p4878cpmryeqcPTPH3eLzTiHSHur6VpcD96BNckR15crMYFwXXJ + j3fix3A/TYcHigGcb8yNfCHWRaZcq7T6XwawJRfLjThbqMu5XE1ulejzpNaClytk34yRXJQcdDt7xH8N + YMX0/WylzX+h9Pr9jwH8SZeNyhBW5gR+X0j703pDXq+W8ykGcP7/GMBXkoZwL2c4b1SN4zPhCV+uMuOL + TkGHBZ+1WfFpqx3v1FhyN1eHw5FD2R06VNrXaPrCNFntr0O7PKe6OVqU+KmTP3U0hTPHqub1VQzgjhhp + x5FW1MiyYgrn+I0ke5rU1RlSl2eOonD2s17A/zGA6wIN/zsEdHOALisCtVkbos8GaUeK+btR2v0GKRUD + eHW4Ll2ClRF68h36LI/UozFMS+qYutS7MSoDuHDBUMoXj6J62TgagrRVQ0G3hmizMlxHZQKvixLE6NMT + Z0RvghGbk4zZlm7O7mxr9ubYsl1ixfZUI3ZmGIsg1GcgWYf+OA0GEjXZnarLgUx9DmcrfxYbcFRwIkef + k4LTsnw235Bz8nzPF4tgKhWUiSCU+rEvZSzb40YykCT1UPY9VGHN0ecG8GCFvcQTM5rl3KUJ6mTGjiQx + dgRJydIOsg3IyjEjL9+OwhJXsvPdSc52IzrdjUARrYoBvEjgn+RIQIIDwXEOhAr3jlAM4AhHokKEYwc7 + ERvmRmKUNxmJUwV+ZCRNpzB9PqXZS6jMW0ZtfhBNRaG0lkTRVhRFa34YzdmBVKYsIDnSh9hId+KjXUiW + 8xZE2dMo37Ex1o2DSd6cE9F9OdKRKyGmXF+myxWJ3+fl2R4V3r9T4siOOfJ7JUac87fgZoA190Qf3PQ3 + 4aw8+4NLdNi6TI+1guZ52hT5jSFl8kiSZmgTI8cqPX9n+4xlhpfAYzTzPNUJmqBH3HRT0mdbkDvDRDi5 + Hq1TpY74abNzmsT+KVpcnaDOPc8x3PUczdXJWtyYZcnjgAm8Gjufl9JDeKUhnyfrW7kzuJ47Z/fx8sPL + 3L51it07N1BdmYX/4qlMGW/DRGdjprubsNjXkvD5tsQHuZAU7UFSnBvxcr/jEuyIEx0VF29NotT7lCgb + smMcKE50pyplPDWp3irTtzzOg4oET0rjPSmL96IkwYvSpPFUZU5hVfUyelpj6WtLo7splc6aFMnhCTSX + JtBUkkRVfgKZ0UEsmj4RT0fFADbE0kIfc0t9TM31UOb81TfWUEHPSENl/mrrj0PP8Nmynqon8DMjWOkR + /Gw/+VxgaKKNubUhdk6WOLgow0Db4uljz/hJ/zMU9ORpbnj42Kl6/1rY6mFprYOVjZ5AF2trXbxcTZjj + Z01MkBsFiRNpzJ3B8ryZtGXNpiNzNmsz57ExcxZbMn0l/0+SdjOei8XjuV8zgSc1HrxWZs9rxda8UWjB + m4r5Kzn3lSwTiZsGqqlDrguupRlyOV15gcaC6wW2KlzKteBCtjFXso24Km3yitIDOElLYpw+D2Xb43wT + HpeYcatY2mSBDscy1aUdjmEwecz/xwDelibcP02PgUwDBjKMJB4oL4RpsSlxHD2JY+mVdrs1Q4ttgi3p + yrHqgnFsTlNnS9o4+jOl7uUZsEva/0COjhwvHCZT9pftymfK+kCWMh+wbMtWoMG2nGfoz/t/9wC25GiT + JYebzTnYYsbeJiN2i17bJRpkd8U4jtVoc6nRiPvtVry2yoE3V9rxhsTsNxqNeU1i/dNKXZ6W6fBGgSav + 5KrzUtb/GMAvZWvyMEeLR6Lr7oquuJOkDBE9mjfzxvF+qTYfV+qrhoH+uzJCVLUu39Ya8nOTGb82CI+u + Mue7MskRRSaiC/X5QO7Vp/IMPitw4LMiDz6v9OXtkikcCbdi5bTRlLgOId9BjVqv4XQIf+gLsmIgxoUt + Eju2JLgwmOHDPuGrh4WrHqhczI6iBWzImElNuLfwqSk0Jc9heeZC1lWGMtCRwGBHFJubFrGlfjr99ZPY + 1eDN3kYP9j03gQ8tn8CRdl8OtE9mT7M3W8sdWZdtpXr5sjXOnoZwe6oC7IXX21O8wJZcPwuyJuiLZtel + UsqmKca0TDKmyUOXVjdt1ngKJ/TWZ4fSm3GqISfm2nDK351zkdOFIyxkb+hc1i+ZzoqgedQGzpYcNJem + uABWFyaysSaTjfU5rK5Ol/adypr6dLpbcgTZKgN4ZVUqHZVKO0+kuTCOlqJ42kqTaC1OpL1c+SxNtc9/ + 0N2Uy+bOCga769m7eQUHt3VxcPuzXsB7t6xj56Yu+tctZ+vaJrZvaGBwUx2DvbXs6Ktm95Y69mxtZH9/ + K3u3trOps4b17TV0t9Wxbnkta5dXCypkvYwNK4rpVUYcWpPPtnW5gmx29eVzZKCco4NV7OurYN+mWg5t + aeHY9hUc7e/g0OY2lRl8fPsqTu1ax5HBVezY2Ezvqir61zZydNd6rp/bz9uv3OKrT9/h15++49dff+K3 + 3//NL//+nV9++52ff/tN8As//vw9n/z9A9569wnvvPcyn3/2Jv/4+xt8+cEDPn7tMh88OM77V3fx8sFV + XN9WzbX+Mh7sq+DhgSIe7svh1rY4Djb6sr/KUzXsomIWKqbhyRo7Ttfaq4ZnvNTizvX28dzqnMi1Nm8O + F5tzuNCM4xJ7zpfaclXi0c1SO+4UWj3r/St4Uzj/03J73q105O16F2lrbry23IuHy8dzstyWbQUmtEpc + KIsfSn7cCxTEDqdY+GBZ1Cipy2NoFW3RlWRAT5qpxA8L1agjezOkjYv+OJ1lwRmJY6eydTiZr8O5civV + n87rRUvk+75IhKMaUe6SEyebkuZnQ8IkAyIkt8X5jKJgti4tkk83JbqyK0PaQJYjZwvsuSTXfrnQmMt5 + utzI1eVOkQEvVZgKzFR4VG3Bk0Y7nrS58HCFG1caHDhcasV2+a1r4/VpDNakwl+DEn9NSiSnVyrcLMSI + jiAjOudq0+r9Ih1uamwUHbHLV5tDfvqcmiM5fZ45J2YZc9hXNJrHSHY6D+WQ50jOS16+vsCIu8Hm3I2x + kdhjy03RX5fTzDibZMhJ0V+nU4V7Z8hylnCqXDlfiRGnSk04Van0An5mAJ+UZ3m8zo2BIhs6E3VFV4ym + 2H8ERUuF+y3TpChQl0K5zsIwUwoiRU9EWJIRqbyUZSrcxURytwmJkcYkyHK8YgILYiMNiBFEKfMBC5R5 + fyND9AgN0CFoqQ4RgfJ5qHKsBWmi5/MzrSjKtaJcrqGmRLhQqQONRXbUSCwsTzOiWPRoSaIeFan6VEve + qlZKxQCW/FKbJvc205hW0ZadxVasK7NlY5k1myrs2FTjzHrFAC53pVpiamGuA2mpDkRF2BAcaMeSxXYs + nC+Y58rCuZ4ELJpMRNAsEiLnU5wZxIqaBDYsj2d1zSJVr6s1ZRPY3jRNFSu3VHiwqdCJNVLv1grf7ZVy + h3zH/mJXDpS6sLfUmb1lLuyvkPWqZ9hT4cRAqXKcL52Z0ykJ8yJ8uiVTHXSY5mJOwJyppMSGk5edRV5u + PjExSSQlZrKqs5v9+w+wY8cWquuLWBY9nyUh00mOX6wa/n5bXSZ9eWGiTV2pnyYcO9Cc89HmPEi05mma + PV9JLvmxegL/llj+y4oJ/L3Cig8lr74ruev11NE8SR7JG1K+lanJm1mavJ2rzTsF+vyt1JgPhW+/J/X+ + zSw9XkvR4onw9sdR6jwIH8N10Xvnlg3llGi+E1FjOZ2ow4lUQ+EFZhzKtGZ/lj27pP30pjmwKs6a+jBF + m2rTEGPE8hQLVmZZ05kt9U7QkWPNqiIHukqd6JTn1Sz3rqrIVeqFB+lJ7sRGuRMY6MyChfbMnmPL7Nk2 + zJlrx1zBvHkOzJvvwPxFziosXOzKoiXOLF1qT+BSO6KW2ZEc6kh2uDPZoS5kBLiRsWw8mcG+sm02lVmR + bFjVwNkT+7l7+zp379/j6q1bnDh3kT1HjrNp6yAlVQ0ERSWyNDSG3NJalnduYP3WnWzeeYidh86y99gF + Bg+coHvLIC0d3bSs6GZdTz+79h/nwuXbXL/5EjfuPOCGMgz0vVtcvX2Fc1fOcODYXnbt3a7Czj1S7tvK + 4J4+du7dyM5d3ezatYpdA23s2FKvmtJkcE0Gg52B9DfPoLvU+/8YwOvkXm3M92ZDjg9rMpS5WR1pV6ZJ + y3ZibaErPRVu9FbJPpXj6Za6vErqYWuO0gPY77kB7E7YBGsC/48BrMEs4cTPDGAvoubNIClkGcnRIWSn + RVNXnU//lrVcPneEK6cPSa5cRXt1ETXZSZRnxVGSlUBBVqLU40gCg5cyd9Fcps+ezczZc5g1azbzZs9k + 2cLZEhPmkxq1mIzYOWRETyYlzJnEYGuSAk3JCjahOMKc2mgrmuNtaI6zpCHKjAqJS0XBehKfhHOEGpAX + bkB+mIHEKkOBxA0VTCgNN6NEUKE6h7XwFxc2ZHkKVxzPrgJvDhV6cbjAlb1ZVuxKN2UgRU/1YvKxAgsu + ljlzv9abV5um8HbbDB42+armk91RaiM5ypxteUrvX1O25pjSrzKAzVS9gAfzTJ/1BM4xYadgb6FwT8lr + hyV/HmzxZlerD9uafdjYNJEeOW9f1wLhGv5sXxfC9u5IKeMZXJ/JgW1VHNrZxsHd6zh8YAsHDg1KHemn + f3cf23ZsYmB7D5vlnq9tb6SpvIjy7DTyU+JJiw0jNSaE9LgIshKjyEmIIlsp46PIFxTFx1KZlkxtRgoV + KYmUJsYIokUvh0kZSHnCQsqTZ1AmGqsy0U41Cl9bhrm0WXO65D6typD2mmFLl9IJJ9OBNYJ1Gc5sSHNm + U6qjygDul1g7mGYnMcBGNLot+/Ns5V7bclxi/Mkia45nm3M0xYjjCaLzk/W5lGHAVdHylwv0uFAo+avY + gFOSY08J1/iPAbxH6XQp+UHBrhJb4bjW9Iu+Ue7/FtEo23KM6BeNvz1bn0Epdwj2FZmpcvFJyQlnKu04 + J+XlamduN4znXssEHrf58kqHH292zeKtNdN5e81Enq7xemYAd3nz+bpJfNrhxTv1trxcbMSjIkMeF+vJ + so4KjxUU6fBIyiflhrxSqRjAJjyoNuau6I+bSu9fwdUGUy4+N4DPigY422zLmeUenG6fwvEVwts7pnN0 + 3XxO9IZyrC+C/etD2LV6GdvaF7GpWbhxnWi/6um0FoynKceNBmn3TTmutEj97aicyKbWWWzvms/2zjmy + vx+9LbMlVixj/4ZETvUXcXawkqO9RRzYkMfRzaUc76/izM5mLh1Yzc1jm1Um8MsXD/L61VMqI1gZFvrB + 2aM8PH+MxxdO8PCSgpM8vnJaNbfvowtnuHHskHDXXolLqxlYLRx6c9//NYBvXubhRYmBBzb/XwN40f8Y + wPnhdtQmu7OmZJpokfnsbFvKrvbFKuxYvkjWl7B/ZQCnN8VwdSCdh0fKeeNcA29daODlU5U8PlnGa2cq + efNcFW+fLufVAzlc6w7jYmcA9zZF82QgmacHsvnwRCmfX2zko8utfHCtk88ebePbp4f51wcX+O6jq3zz + 8TW++uQGakeksZ6utOFqszu32724vlwZ0sWJK82OnKm14XCZhQhTafRZZhIA7OgvdmN9rosQU1Pi54xh + wfgh+HmqMdltiGqo5gluo/B0GIWr9SgczIZjbzICB9Mx2JmMwtZkJI5mo3G20sDbXpuJzjr4emjjP8eK + +GBXksKciAkUohQlAiveicwYO2KWGhEwS0egR8wSK5KDnUkOcSElxIPEQDcWTzNkgmIAm6thb6WGk9Nw + bByHYWbzAiYWL2Bm+gKWJi9iazoSe/PROFqOxdl6LC42Y3G3HcsUx3Es8FLmKjQi09eI0gl61Hhq0Oox + hi6XYWxyepGdri+yf/xITk4Zx8WZOlyW67k6S5cL8/Q5MF+brXNF6M8ew5qZo2j3G0ajrxrVE9Uo9Vaj + RFA88QXKfEdR7qdJ2Qx9Vc+DghlmIiJNyJioRZLrMNJE8BaOf5HOBdrsi7flfuVUPu9ayh9bI/hrcyj/ + 3hjI92uX8V7DTK5luLB9gQZt7mo02qrRaq/GJh81Di8cxsMUbT4sMeAbEf0/LTfmz67n5u//NoBl+c9V + 5vy7w0SF31eaPoNq3Zjf2gStCmS9xYRfGo35Xhr156VafFA0js/rDflxjSN/bp8AR2bAiZlwRsqzs+DY + DH7rH893bVZ8XijkKuZF3v5fBvDbIUN5N3wk70WMEAyX5aE8DVdT4d3IIfwt+kWVCfx56gg+S32Bj1LV + +DBNjY/y1fisRo2vVo3k283j+GG3Dt8f0uWfR/X5xzH5vcf1+fKUAf+4ZMmvD93586kvfDQbPlso5Vx4 + Zzp/vOHLb/e9+PGqA9+cNOObo0b887AhPx0y5se9evwyqMMvcu7vV4/gqwY1Pi2R785V44MsNd6S63g1 + SY2XpXySPYw3i8fxpNqA6xLgTjXocaLJkONNxhyq12dPuTKn10j25LzA0eLhXG6R+7DLkx/v+PPXe3Hw + j8znBnAx/FYOP1TA3wvg3Sx+e5TExyeW8GiLr+rt4/bAcdQsGEtNgCYtUYasTrahK9aSNn8RAzPG0DZ9 + FN3zNdkqQmuPEIIDYVocChnD8ZDhnAwdyuW4kbyUpcXrpUZ80GjBZ502fCX14Nsea37YYs0/typDHsuz + 7THib2uNeNCoxdmiMexNHMbWMDVVD+CDMSNVbwO/I6Lv27Ue/NrjClvtoc+U37rH8fOaEfy4djj/WjeS + H3rH8vOANr+rDGDbZwbwo/Hwsgd/Pnbl90d2/PuR1L/HivFryh8Ppf49tOSPJ87wqrLfNP66NpXfDk7g + p02e/L3OmjeEpDyM0OF+uCGv5Tjx2arpfLdvCb9cCeavN+R+fpos91Pu6Z9Z8Fcq/CHbfo/hr58i+fnD + +fzwmh//ejCJn25589slN/447czvR2z5fb8Vv+0w58d+qd+bDfmu14B/9Rrx/SZjfpDf9v0mM37cZMVP + W+34YYcTPxzw5M/r8+FxILwVCe/Fw/vy3R/l8+dbBXx1JZ5HA4vYVe1KQ5gmmTNfJHeepsoAVnoAlwY7 + URjoRO4Se/KWOJK7yIGcBdbkL7WVzxwoCrCgJNiMujgbWpJsaUoQ8hdnRnOiJe1CLjqynOlUhsEp8GFd + 5XS6q+bQUTKPltzZ1KXPojrZjyohMjUpspwyh7q0edSnL6Q2dS6l8cocMBMpV4aSTPOhJd+XFSXTWVk+ + S1W2FE6hOW8SrUWyvXQ6nVXzWFW9kPq8mdTkyLnyF1OfH0RjSTRNJYm0VKQJMmitzFShqTKDxvI0akvT + qClOpao4nbKiNIpzUykpSKeiLI+qykLqaspZ3lhDR2s961c10beuni1rK9myqoC+1nQRsVF0FS9lZf5s + VuVMY02WYvZ605vsw5ZEbzYLeoSorU3xZmXqBJYneqkM4JZwW1oDjFm5WJttIrgPShs5Em3GMRHth8P0 + 2RusyS7BjnA9BqP16VfmgI3RYWuMFpvDxtEXPJptwWOlDWlxMt6Ia5m23M6x40aG5X8N4CtpFlxNs+aK + EMJLIvrOpVtyONWYHQk69MZo0C1YL+K9W4ThhixT1XDQfXmWbCmwYXuJkjtt6MmzoFtI8moh3W1J2tSK + wKyMUKciXIPSUE3yA7TIXqpNssT3+DljSZinRbq/EalLDYicrc48DzUWS6yPmDWK5IVa5AYYULDMgBJ/ + A8oWC+bpUjpTgyLfMeT7jCTbe7hgGFkThguGkj1R1gU5E0dIOYzsSUPJnTKCwmnqlM7QolxyW9lsLSoE + lfLd1Qv1aAgwpWKxIel+6kRPGEmoIMhnDIGCkCljiJBjY2doEjdTi8SZeiRLrk6dbUDabH2y5hiQLbky + faoGyZPHkCbI9NOgYK4epQuMqVpqRqW/YKmxwJSaQKn/QRbUPkdDiBWNYdZUyzUUzNUka5Y6+XJdyrDX + JUvk98q9qQoxp2yZEdkSBzPmaZAlZbaU2XNkX7mHpXNHUbNwDM2L1VVG4PZEZX4WESmpZgyEq9O39AU2 + Lx7CFoHSm1cxgA9GaHA4SovD0drsl+Vnpq9iDo9mrzwvZahoZb5g1ZDRqhcHNDkRo8exCC2OKENGLxvB + AX+JwVKvLkZrcDNBl/upQp7TdSSG6fFWvgHvFhvzNN+QJ+maPIgfzY2IF7kcoMb5pWpcDhnCzdhR3EnR + 5F6OgcoAvllozLXiZwawMgT0zecG8GUh4eeKdLlYoM29CmNeb7AWYm7M9cyRXE55ZgC/XKrB23X6fLrS + ms87bf+L/20Af7zSig/arXhvuTlP641UQ0b/xwBW5gBWDOCryWrcyhjOK6XqvNeoxxerTPmqy5Qvpfyy + 05LP2ixUw0C/U2vG/XxtTsWP5Ij8tgOJWuxKNGS9iNiVS3VpnK9DxSxNimeoqwxgxeytXKJLZ5y9ygRu + DDKmYpGOygDOnCJ1dtoIcmc8M4CV4Z//YwArcwY3KvMAL1MMYD06gnRZJwJ5owhklQEcqsOGUD3WC1bL + emeINu2h2rQImsK0JU4rBvA4qUdjKFo4nIL5Q5/3Ah5LXaAWzXL88hAtVoTp0CnHr4nUY63Ejw1KT+BY + I3oTjdgq8WFHhjIvn5UIQWOBoYhBYwZTRZgl66kM4O3xz4eBTtPhYJauygA+nmvEScGZPMPnBrAR50vM + uSA4p/QCllLZdjhNg90JY9mdrMVexTwuE0Ep3OCgYgCXOdKdZ0WzfGdJvIZwZnWSY8cQn6RJssSYFLme + NIlTWbkOZIiQSshwJSLZBf8ERxbG2rEgzoElCU74xzoQGONAcIQDYeGORArCRbQELrEm0N8W/8XWLFti + S4DkrkB/Z6KCPYkNGU9cqLfw9kmkR/qSHeVHboQf2WG+ZAT6kLDEjWARPwFLrQkOtJLzmZMSZEpZqAVd + UY7sjPMQQezJmUh7LoaackU4zKWFGpyV53t0nh575wq/ltx5KtCSK8HW3BTckuWLS4w5skCHwQWabFwi + z1ypBxKvsiXmRY4fRvgUdYKnaTN3gjrTvMaKxlDHTzDbU4ulEwyJmGomccqcDD9jiqfq0zBVh9V+Omyb + Jm3XV4vzE8dxy3uMYCzXp+pyd4ENb0b48nbKEu5nBPFSdSYPuuq5tmUVt87s4snLl7l9+wQD27uorcki + yN+PaT42THYxYr6PFaEzHUlc6kpWlDcFab7kZ8q9yvImK8uTjGx3MjPdyEpzI0eeS5GIw4rU8dRlTKQh + fRKVKT6UxXtSGudOkdyvwlgPCmS5UO5bmXzWWjyPldUBdNVESc6Ooa08lpbiGMnRcTQWJ1CRE0NWbBAB + c3xFm1njoMzba6GLhcDUXEfV61fPSB0dg7EqaD83gBXz9z89gfWMNNF/PjS0ah/9MVKqy7GamFrqY21v + hp2TBc7uNrh52eDhY4u3qiews6p09rDEyt4AUyttzCw0MbfUlu/XwtZKi0muxiz1syI1yIVyye3tudPo + ypvOmuyZrM+ew9b8BQwWzGVv/kwO5vlyNNeLM7mu3Cz14FGFK4+L7XmlwJon+ea8kmfOyzkWPMw04Xaq + AdeS9LkscfdCsj7nUwy4lGHOjXxbiaN2XM2z5lqOGbdzTbmVZcRNaavXk7Tk+RrwOMeYV0Xzvloq56o0 + 51qZEefydTiSKRwieQwDyePoV3r+PTeAt0qbfmYAC6/IMJR1A3qTNNiQoE533GjWJ4yhN0U4RqqGqtyU + rP5f9KaOY0uGNgPS/pU3+bdl6qj225wmvCRNky1yfgX9Wc+wJVuLLcLnt2bLd2f/xwDWZW+FAYdqTFQG + 8LFmK44uF27SasH+ZhN21eqzo0KDwZKxHKrSemYAr7TlNdFwb6yy43XRaq+KxntV4v1b1Xo8rdQXfaPN + k7xxKgP4payx3M9S507aGMlH0i4SRNNEvMDlyBdVBvAbst97JaI75RpU8wBX6fJltQ7figb9pcmEXxvN + +LnanH9VWPBlsQmf5hrySbYRnwkX+jTPls8KnPmqajKf1vhxPcWRfuE1HZOH0TrhRdbPktgpuf9Ioiun + sn3Yn+LKnjRXVY/FwyW+HC6fzr7SmWzNmUpn/HhK/e0pDXGjOmYStYl+tOctZENtkGAJ66tmsrl2Ktv/ + awB7PjeA3TjQ7M2h1knsb53InsbxbCt3ZH2OFSuTrehItKcl1pHGCGdqgpwoWWwrecmUNB8dsiSmFPvo + UjPJgPoJBtS5S15x1aTTQ4f1Xjps8dFip6/E7Lk2nFjmzhmJkWfiF3Iwch5bgmezOmiu5K1ZNATOoTVm + KWtzY9hQlkx3RTIrimNZXhRNe0Ucq+uVYaHT6KxOYUVFkrR5pUympShOZQIrqMuJojYnUvh6BDXZYVRl + hlCRHiTxII5uZY7g1TXs62tXzb97sH+1lKvZo/T67V7Ols4aeleWsW1NGdu7S+hfr/TgLWT7ekF3EdvW + FbO5q4TOumw6anNYWZvHypp8OqoFVTmqOYu7GtLZ1JHLltXZbF2Tzra16ezelMORgRKODpZzcEsFR7c1 + cGZnOxf3r+XCvnWyvJpTgov7N3L5UB+n93azb0u7HF8r39vEsd0buHPxEB+8+YAf/vEpf/7xM3/88W/+ + /ccf/PrnX/z2u5TK8r//zc+//cTnX33Kux++wQcfvcYXX7zNFx8/5uO3r/Puw1O8c/sgH93aw6vHVnNt + WwUX+/K4vaOAu7uzeWlPOncHYjnaMpVDteM5Xu/F6Qa3Zz1/6x05V+/A+UYnrrR6cGOFD7c7J3JTystN + blyuc+ZylSM3axy5I+W9UnseFFpxP9tE9TLK2/mWvFtmz/uVjrwrde3tRnfebB7P4xYvTkku35qjT0vi + SIoi1MgR5EYMoSj8BSoiRlAfNZJ2yetrknTZnGHKYJYFu4Vn7E8z41CKMceFZ5xM1+NkhibHcrQ4VWzO + AYmBa0Uv5015gSgXNWK91UnzsyBztgNxEw0IdRtJlKdogOnKtCjGrI2yY2uiA3tTbTmdZ8dFufZLBcZc + ytPhao6OxExd7pQaqXBX8KDClFcabHnS6sKjdjcu1dqxr8BUYpseK8KVF/lGU7hgFHmLxpK/RJOyQD2a + w43okBzfKbl6ueiPVjc1Vnu9SL/vOPZI7j0yR37LAjOOzDXmgJ8uA+NHMuAxnP0Tx3Buti7X/E24E2nN + 3SR7bqfbcU1i+QX5/acShHMnaHMiRZdT6YacyFJ4lT4niw04WWrCyUrhWJWmnFQZwI7yXN3YXmRDe5xw + SP+hFCwZJpDr9Ve0lzZ5gfrkBhsLhzEjI8SM5DATEkONSJDrT4g0FDwzgBNizFSIjTZ6hlhjYmOMiBJ9 + GRasS/AybeFO2oT66xIZLMdFmZMWb06e6MnCbEvKC22oLrajocSeBslH1TnmlKYZUhSvozKBKyWH1KQb + Ua0qhd9k6FMrfK4xy5jlkrc6iixZrZjAJRYSL6zZWOXAOmUI6P9lAKen2gmPsyBomSWLFlmxYL41Sxa5 + Co/zJixgKnER80iNW0RZTjCd9fGqF8nW1i5iZekkuisnMdiiGMA+bJY821PoyOo0c6mHigFszs4CRw6U + unGwwo39pa7PDWBZr5ZYWuWqGmZ7W5EzG/J8WJUxReqyBzEzLZnuqMUMNxOC5k4kJSaQlIRIuW9RLFiw + mGXLQmhqamPHjh1s2bqRwrJM5gX6MW/pJBKi59GYF8n2ujS25YVQN89BeJseOwJNOS86/0GiFW+l2fL3 + fFf+WeHJT00+/LPBlU/LLHk/X5+3lbl+VT1/R/JG2ljekXr9Tq4u7+bq8X6BAR+VGPNJmTkfFpnynuTi + tyTnvp6owSux6jyMlJwXOoJLgUM5HzaCc9FjuCh65lyKIecyLSQv2QkvcWJvlpPkfOHiIfIcF44lZ+5w + KoKkjYleWJ4oz03QmmRCS7IJbZnmtOVa0yrPqjrHjsIMBzKTnVRTrwQstWP2LEsmTTbB29tIYMyECWZM + nGjO5EmWTJlihe90WxWmTrdj2gwbpsu9nTXDjEWz5N7OsyBqoSVxi2yInW9PzDxX4hZ6k+A/lcKUMFa3 + 1XD88B5uXL/KvQf3uX7nLueuXOfo6XNs27mXyvpWQmKSWRwcrZrzt6N7M/17j7Lr8Bn2n7zM4bPX2Xfi + Ipt3HWRNTz+r1m2lZ+tO9h4+zYXLd7h68yWu3X7AtTt3VAbwtTvXuHj9PMdOH+LgkT0cOLyb/Yd2sf/w + DvYe2i7LW9h/oI/9kg8O7O5kT38TO3vK2bk2gx2dgWxr+n8bwB6sy/GgO8eLNemedAonaHs+5HZntqPK + AN4o9XFTpTIUtJccO4GuAl/ac2ZSFT+N/KBJJCkGsHDzQEeD/68B7GRNwGQvoubPIDVsGWmxwWSnhlNT + nsn23lVcPXOA66f3yzWuoLMmhzrJ2eWZ4ZSkh5OfHkm81OtFi2bJ85mM90QffCZOkOfng+/E8cyZ7sOy + +b7EBs8gKdyXpFAvEoLsiVtmRpy/oWqUt4JQE6oizGmIsaQpxoK6cFPKJYYUBT0zgAvDjMkPfwZl38IQ + Y4EJRWGirSIsKQ41p1jRWSEWtMQ5Sbt1oyfDQ3ijOzuy3diZaS/x3oS+OD16YjTYlqTNIeFi58qduVs3 + gVeafXmt1U/ymQ978q3YKJx2ncT29Sn6bJKYtFkZ4Sb7mQm8NceI7cKXB3NNGMgxYYesK37RvlIrDlQ7 + cKDRg52S75QXVJRe72vrJ7CxbbpwjflsXe0vCBHOEcOWNSnCMfLZur6crT1NDAg36e/fwKYta1nX00n3 + xpX0rF/JhlVtrGqsprEwj7L0JHKV3r4xQWTEBJMVH0ZuYiT5iVHkJ0VRILGlMD6C0vgoqlMTqJf9q5Pj + KU+IokI+K08IEc3hL5hHRbIfZQnKi7Y2whvNaBFN355uSofk2RUp5nSkCheU/NiZbsvq/xrAUsfSHOlT + DOA0J7bLfd2Va8/ufHsOFNoLP3XgRLmD5CE7VS/go5K/jyVIXhJdck5i+cUs0SaSW88W6HCiSE81+u6J + KhuOVjuy73mP3x1FivFry6Dki0HJy9tE52wRXrE5y5DNmYbyTPXZJtgueW9Ayn2FwguUIbjLbDgpOFNq + w8UyR27UenBHYuLj9qm82jmDN1fP5unamYJJvLtm/HMDeDyfrpnAB+3CT2qseFxkoDKAHxbrC3R5XKqn + wsNiHV4q0n62Xm6kMoAf1ppyv160VJ0x1+uNVQbw+QYTzjUYcqbRhNONkn+bXDne4sPBZuHfTYK2qezu + nMvgSuHCbbPpafJjXe001tZMpatiCp2lk1XDPzfnuqnQkudOq2IAV0ykp2UW25Tj2mfTXTeV9XXT2bJ8 + MTtXR3G0L4fT20s4tqWQAz1ZUhZwWvjn6R21nNvTyrXD67h1vI+Xzol2v3KEVy8f4/G5Izw4c0i2HVbh + 3rlD3D9/hIcXj/Ho0inunz3GlcP72LdpA/2dHWxd2cH+nh6uHj6qMoCVIaBfvX5RZQCf37+ZnvYS1RDQ + 4QscJRbbkRRgR2aQHbkhkvcTXFhVMIk+0SO7li9kd+tC9rQJWhext20xB1cu5czGSK4OpHDvQD4vHyvl + 0dESru/O4squNO7sz+aV48W8cbyEV/ZkcXVtKJc6A7gjx9ztieTxtnhe35PJe8fL+Nu5et69sJwPbnXz + 5ZNdfPv0ON+8e5Yv3jvLZ++eR+2SEKLLkigvN7pxRR7Q9RZ3brQ9w6VmZ45LhVQm+d6UKkEg2Zh1aZas + SrGiNFiPiGnDmCNEbppgivsLTPEayST3UXg5jMDNZiSedmPxtB2Hm9UY7E2GYW3wInYGw3A2H4mPnQZT + XJT5sbRVCSspxJn0SGcpLciIsiYvzp6cWBsSA40Jn6cj0JebaE1mmCvZke5kR3iREuSK/zQDJjkNw8lU + DXsLNZwdh2Fj/wJmVmqYWQzF3HQoliZDsTMbpTKAFTiojOAxuFiNZqK9OvNEtEVONCZrigRNHyFcntq0 + eY5jtdsoel2GMeg2lN3y245MGcfpmdJgZxtwepY+R+cYsNVP9vMdzYopI2iYMIyK8S9SMl6NIm81Cn2E + yE8QTB5KydQxlEwXsTjTgIKZJuTPMifbz5j0idoku48k3e1FOWYoXQt1OShk/EHlND7tXMpPPaH8vimU + XzYE83WnP69IozgRbcWG6aNpEnJfa61Gi50a6+U79859kbtCTN4rNuSLGgN+aDHhz1WWoPQCVozg1daw + xkaWrfmr04I/V5rzZ4cpfz2HsvzHCmP+3WrEr81G/NIokMb8Y40x3wqR/rhAS8iSYgAb8XO3M3/tnPjM + /D0ruCS4OhfOzOavPZP4abU9X1fo837iMN4RQfNWsIIXeRo6jPejRvFB7BgV/hY1Qj5/gadhQwRKT+Ah + fBg3lC/SRvFl+nA+SxvCJ2lqfJqvxt+rh/DNypF816POjzu1+fGgHt8f0ee7Y/r847g+X5804LtLlvxy + z4XfX5Nre286fCjX9N4seHMavz+ZzC+3Pfj+olzbUVO+2qfPt7v1+HGXIT8O6PLLNh1+2aTB96tG8mWd + Gh8XqwmpVON1xfiNV+OR4GGqGq/kDuVpxTieLjfm5TVW3F1vya31VtzcYMvlNeacadXlZO0YTlcN42Ld + CG53aPLBXmd+uTtfriUSvkmHH3Pgl0JBKfxQDl8Vqeay/fO1dL68GMobu+ZwWsTlihAN6hZpUBuoTVOk + ESvihDhGColcqkPj7LG0zhzNmvkabPLXYUAIwk4hnLuXjWZfwAgOBg7jlNzry0ka3MnWkYCt9Ogy4p0m + Iz7pNOHrDRb8o8+Mr3pN+XyTOX9bZ8G9JhFP+WMYjH2RzcFqDIS8yLFEde6UmPBxuwv/Wu/Fzxtd+KPX + hj82Sv1YO1ae9XC+Xz2Mf64dwQ+b1PllQIffD0ndOyd17bYLPHKDV6S+vOLAHy9b8fvLZvz5ijF/PDbk + j0eG/P7IjD+e2Ms+HvB4Cn9dncS/D3pJ3XeVZ27G2yk6PInU4dUYYz4s9eSfG+bx69EA/rgZBm/Fwqfx + cj9T4M9UIEHKKPh3KH/9EMgvH8zmB3nu397y4NsLDvxwykaOtea3/Wb8ttOYX7dLXd5qwI99+nLtevzQ + K8ubDPl5k9T7HlO5BnN+2mzFD/22fL/HmT8vzYCXFsEbwfB+jDyzJPhInuX7hfx0P52nh0M42TGJjiRD + 8hcMp0gEb/FSEXeBNpSHulAa6iZC04k8fyeyF9iTMdeSzIXP5gfOWSJkTgRNTZwtTcl21CdaUiW/uS7e + jOYUG5an2QucaMtwpyN3Ah15k2nJnkJdymQqEyZQHutDedwkKuImy7IvlXFThfD6ybovJdETKYkZr+pN + VJnkLmTIS8SkF0053jTn+AjG05LrQ3vhZDpKfFlZNoP24ukUx3tSFOdDWfI0ylPmUJmxlNrcCOoLY6kv + iKOpOEmQSE1BLJU5kRRlhFOYFkZeWgS5aZFkpUSQmRpBRlq0CNIocrOTqCjJpbGmkNbaQtpqsmgpi2Nl + ZQw9DYmsLFhGQ9JUGhJ9aEv1kfvoTleiEPoEN/ri3emNc2N9rBMrBM2xzjTGuQpJdqEx1IqWZUasXKLL + ViHD+6IsOBAhZagBe4N02BGgIe1Dk8FwA/qjDOmLFPIboc36cA26g8ayIUBifYDU+xBNDouQv5Rhyw0R + dtfSLbmiMoDNnhnAGdZczbLhcrYNFzKtOJpizC4R7Zui1OmOHMv6eG26laGg043pyTJjc44FW/Ot2V5s + Q3+hNb1Kz2AhcGszDOhI0aVGxGVZyGhKgkaRv2wM2UvUyZD2nrxgHAlz1Umcr03KYn1V79/Q6aNY4KnG + Eh81wmaMIGGBJrlBRhQGG1MaZEy5/P6S+VLfZmqSLzkpe8II0r2HkSFInzCcDMlPWZNGqJA9eaSUw8mc + JNsmDyfXdyx5U9XJl3xWOGMcJbM0KZurGG3alC0U4SHnTZXPoieNIWTiaAJ8xqgQNHkMEVPHEjNdQ2UC + J87UIWWWHulzDMmeb6jq5VswV58cyX3p8h2ZU0aRK+cpmatL9SIT6kX41AeYU+tvQs0SYxpEuCwPk2cZ + akmDtIWmIDNZtxRRbUFtgPxGxfRV5jxW2tVCHbkuLQrl3ijInjtOZfzmzJf7Ivcmf546xfPGUD5vFHUL + RrN80Wg2huuwM8mYg0Lsjwp2R2nQHzic/mUC/+HsDFaGelaXuqPJoShtqQs67I+UmBoyRj4brfpMWT8Q + pfVf7JM6dEBwMHQcB4Pl2MBR7PUfxn453wk57kKsFjcS9biXJiRaSPqTPAPeKDDgTSHXr+fp8XKGBg+S + 1bkdN5Jr4S9yXjGBJfZeixnBjeRx3MnS406+MbeKTLhabMqVcguu1VpxvcFWYMXVGjOuVRpzs8KYVxqs + eavZllcqDbmeOYLr6S9wJ2ckr5Rpqnr0Kgaw8hKQAsUA/myVnWyz5aMOKz5sM+ddpedvo7HK/H2jWu9/ + DOCCsdzOHMatjBd5SfLDW7U6fNRmyJerTPiqy5ivVikw59M2Mz5qseCpcIaHhdpczdbkfLY2p3ONOJxl + QU+YHislVzXLs6tS6tdMxQAeozJ2yxdp0xFjp0JLqAU1/kbkzhitMoCzpiq9gJUhoJX5f6VOLtChcrG0 + H399qUP6NPorc1Xr0iE58D8GcE+oHhtCdAUiXkU4d8nyimAtWiQONAoapK3Xh2lTE6xBmbS9wkXDyZ8/ + VOrVMCr9x0jO1aQpRIcWOaZNyo5QHboidFkbpUd3tD7rYwzYFC8iLNmEQYkTOzIs2ZZiRH+KIdsFg4oR + LLGgP05TZQIPJmmxK1mT/Rk6HM4x5ESeMafyTDibZ8RpWT+bb8KFUgsVzheZcaHIlHPy2bE0qWdJ4ziQ + qs2BHOGdpZbCLxw4VO3EQIkz67LtaU42pSRWh6wYbVIlHiUk6ZKQbEBCvAGxMYbExJkRHW9NWJwDQbGO + LIpxYH6UPXOjHFgY7cjiSDuWhtuxLMSOIBEqwZKvApbasFhy06KFVsyfZ8acOabMmm3C7FmmLJS8tXiu + Ff7zrAleqIzG40LMYldiFjgTMcdeYpUlAdNMWTJb9p1vIucwYqnEkSh5ZjkBRjSHWdMTKWJZvv9whDVn + Q025sEyXiws1OSP14tg84cELDDgq8eFsmA3Xw2y5pZTKnG9LJa7L8++dq0HXAl3qJVblTh5FjOdwlrm8 + wBLh6gsmjGOq11gmeIxjorsGU4XTz/TUY6G3EQETTUS7mJI4TXj4NEOqpunRMV2PXj9t9vpqcWqiBtcm + qHNzorS92YY8CXaRND+LdzP8pQ37c7c8mbsrq7i1fRUPr+znzVcvc+fmEbZvaae6IonQZdOYOdFGdJGx + fJ8l4dMdSF3qTmHsJKqyZ1GWO4OC3EnkSu7NzvWSnOhFnuTignRPSlK9qEzzURnA9c8N4BLJwYWxwhti + 3MiJciVHylxZL0iQXJ7pS03uLBoKllCf50919jLZFkh1ThjVuVGUpoeRFbuMkPlTRZ/Z4mith7WFNpYW + OqKPtDEwVQxedbT0xjyD/jiVAayjr6GCrqGmCv8ZGlpLbzSauqNVBrDSG1gZElrpBWzjYIaDixXO7ta4 + Kiawtx2eE+xxG2+LrZMpZtbKMNKamJgp0FAZwM42Osz0MCZiujUFov+akrxYlz+FTQV+bCuczWDRPPYV + L+BQyVyOF8/mRNE0TuaN50SGA+cyJT/n2XA3z5aHedY8zrPgYY45L2Wbcz/TlFtKr98kfc4n6HBGYu9p + wfl0iZO5NioT+HqONTdl37s5ZtzNMuZuugF3U3WF25vyRqEl75Ra826VHW/U2/GwzpprJYYcV4ZqTh7D + DonJAylabE/VYlu6jmq4Z5UBnK7HNpUBrM+mROEV8eqsixtLd8JYNsoxG5M1VFgvbfk/2JiiQZ+coz/X + UIU+iQ09sq0nVVM0tyZ9adqqz7dkPUNflhabVUbwMzO4P0+LwWI99lQYcrDGlMMNFhxrtuZ4qw1H2604 + 0GLK7lp9BsvlmkvGcrBKi4tNxtzvtOfVtU683mXHq22WvCJa7xXZ7w2J+29W6vNasbbc03E8yFQMYHXu + ZahzI2mEalShcyFDOO2v5KghPE4fw5t5mqI5tfmg/D8GsA5fVmvzbZ0eP8t5f2005ddac36osuTrEtEa + +UZ8nmPMp9lmfJJtyWd59nxT6c3X9X68ku3KsWC5j3NHs3XuGPYFyn2PFb6V5cmNokmczfXkRK47xws8 + OVYygUOlk9hdOIFN0nbaJJ4UCqcoDLCmLMKdipgJNKRNp71gLh2F01ldNIXeqikM1MsxjT4qA3hvnSt7 + 6lzY0+DB/iYv9si2XfUe9Jc7slHq1+p0G1al2tOe5ExbvJtoMDfhWXbkzjQmbYI2GV7CM3x0qJioR7WP + wF2LOlcN2j20WOOlTY98tm2KPnvmWHNkmRsnI6ZyOn4eR2LmMRA6h/XBs+kMmi06by6d0UtYlxnBhqIE + 1hXH0SptuDEnhObiCFZWxdNVm0RHRSIryhNVRvDKyhRaSxOem8CxNBbEUJsTTnl6EMVJS8iNmU9m+GxK + kv1ZXppIT1uJatjlowOrObGzmxM71rK3p42BNbX0riimpz2H7WsL2bGhgMH1uQxuyGbHxhxZzmHbmhx6 + O7JZXZ/Kqpp0uZZMOquy5Hoy5HrSVIb0msYUtqzMpn91Jv1rUuVcKXL+TI5sy+NIfxGHtpRyrL+Wi3s7 + uHNiEw/O9HPzaB/XBLeOb+PWye2c27+RQ9tXsrOnmcGNLRzfs5H7l4/wyTuP+fX7L/nrz1/4U2UA/8mv + f8Kvv0v5xx+qHsE///YzX337BZ99+Te++Po9vv7mHf72zi3eeHiSJzf38uaNXXx6T8qz67i+vZyzG9O5 + 2JvMja0JPNiZxIOBaE61TuN4gw9nmr053+TBhUY3zjcqQz87c6nFhWvtntzs8OHOSh/JARN4sHIiL7VP + 4H6TJw8aXHhQ5chLpXY8KrDgkfIiicSWp7kWvFdiw98qHHm/1o23pc69KXXsUYM7JwrNVC+F1Ee8SEGQ + GjkhauSGqlESOoT66FGskDiyVuJSr8SVQWkve3Mt2Z8t7TrVhINJBhyRGHdCeMGJdA2VAXxSOMNeiX+r + Q7UpmDqUpPHDSJ4i3Hi2LXkLXIibbEiI60jCXYeSPGGkasSglcKte6Kt2JFgyQlF1+RbcFH45qU8Xa7k + 6HA1T0fanr4Kt4qEx5YpPNNG4oYLD1tdOVdlJbFPh9WRo6lfKpp3jmiKWUPJEN6dI3qmNFiXxggjVoSb + CvfTp8V3BM0eanR6vcAWX3V2ztDhwHxjjiwy56CUu2V9q89I+r1Hslc0yZlFhlwJMedWnB230xy4kSnx + IMOUs8kSG4TrHBXNpTKA5R6dyDbgWK4+x+Vaj5cacaLcmBPPDeATwpmO1rlJbrFmebRogyVDVAZw/pLR + FPgLh1imRc4yHTIl5qQHm5ASZEJCsBFxwQbEhRkSL5wy/rkBnBhrrkJcjIkK8cKv4mJNiAzXJzRYh6Bl + 2gQs0VKZwOFBclyU2TMDWHhiofDgsgIbqortqS92FC1tT5XoxJI00XIJ2hRLzqpINaAy3UhgSI1oxbpM + Q2oFjTkmtOSZsaLIklVFFqwpNmed8MHuCjtWVznTWq4MAe1AUa49GSk2RIWbEST6avFiC+FhwteEo4UE + TCQmbDopcQvJTlpKVX4Iqxri6GmNYl3dAroqJtNTO5kdrVPZLm1hs5xzo5xT1QNYtPCmDAuVAXywzJ3D + Sm/5Cvf/GsCHns9XOVhixxY5ZkOOu+ol7saE8aQusGaBxMd5nkbCR7xIjVlMfLQ/gQEL8Z06hTlz51NV + Xce2/m309HaTlh2P3zxvZs7xJDZ0Jk05oeyoS2FXUQjtSx1pE625S56TYgDfl7r7RooVn+Y68o9SV/5Z + 58FX1Q58WGrOU6nHr0v+epI6ildSRvKaLL8juuu9fAPez9PnQ9FiHxcb83mpGZ8Wm/Gx5Kf3s3R5Wxmt + SXL4y9FjeEnq9u3IUdwQXI8dK3pOi6vC8a9lWnEpx0H0jQv70h1ZLfWkYsFYUqdI25syROrYGGrCtGiM + 1qMp5hka46QNJBuxXO5jY5aNxGdL0qMtiJE6vmyhKXNnmeM7yRhPDwNcXPVxdTXC3c0UD3czvDwt8PKy + xMvHGg8VrIRrmcu6Md7eBvhKDpopuWjBJD2W+hoS4GtGoJ89wbPcCZ0/iYz4YFY0V3H4wC6uXrvCXZUB + fI8L125y6sIlBvcdoqZpBaGxKSwKiia7uJbODdsYPHiSvcfPc+DUFQ6fuaEqdxw6Te/APjZu2cWWHfs5 + dOICF6/e5crNB1y9Jbh9mxt3b3L97nVZvsT5K6c5c/4Yp84e5eSZI5w4c0iwn5Ond3Pq5A5OHNvM0QNr + 2D/Qwp7eCnaty2TnyiC2Nv5nCGh3unJcWZPjweosN1aludIhebk90YnWJAfaU2xZlevEuiJXNpQ601Pu + xsYyL7qFJ3QVTGVFziyq4qaRFziRxNluhHsrBrAhiy21/5cBrM8CJ9k+2ZPo+dNJD/cnKz6I3JRQqoqS + 2LS6nhN7ejl/aDN7NjWrRuRoKVJeugqmIjOIooxQEqOXskD49qTJXniOdxd4MH68GxPHuzBjihuLZ40n + dIkPMYHexAW5ERtgS9wyU+KW6pMqOjY/2JiKMFPqosyl3vzHADaiKEgZAtqAwlDRLWEm5AkKQkxlfymD + TeUzM0ojbCgKsaRAzlccaEFznAudKe7Sbt3ZkOpCb6oTfcnWKv26KmSs1Ncx9MZpsU9y1JkKF243TORh + y1QVLpS7s0Xq+KpY4TNRY+mM1WS9aMreDCO2ZBqzVXLblixDtmUbsV2BYgRnG7IzV2K46Nd9FTbsq3Nm + sFa4VKUt6yT/ra31Yn2zxJf22WzuXMjmVYFs6Yqkb5Xc284sNnTms76rkg3rmunubmf1mlZWrmpmVWcT + a1Y2sa6tkc7aCpoKcqjOSKI4MYq8uFBy40PISwijMDGCoqRIihLDKYoPo0g+K4+PoC41job0eOqSY6lO + iKAqMUwQRGXSYiqSZ1OZ7EtFkjuVCdbUJpiKFjFheYoxbcnGtCaa0JZkRnuyYgIrnNCe7kwXejLdJBY6 + q+7pNin7s+zZke8o8cmB/SWiz0sdOFYuED5wrMCSo5K/j0q7P56sz2nRC2czdTkvufVMgQ7HC3VlPxOO + VVhzUGL5HmW45wJrtuVZ0a/8fyjLg0VKaYnSA7gv00C0goFoAX22Zgqk7Bfslfx/sMSCo6VWwo+tOFlo + xbkiO66UO3O92oMHzZOemcArZ/B2lx9P10zg3dXPDOC/dY3ng5WevNPsxGtVoqcK9XlQoMcDyaUvlejx + qExfhZdKdLhfqMW9Im0elhrwqNqER3Vmwn/MuF1vwrUGY9X8v+fqjThTr8+pekNO1osuabDnUIPywqUH + 22s92Fo/nr6GSfQ2TWV9va/krwl0lj9DR4m3qvdvS57nM+O3wEOFtiIvOsomsLp6Ct31U1lbM0Xy1STW + 1Uyjr3khA51hHNiYwomtORzbksOhvkxObM/j/O4yzu6q5OzOGi7va+PG0XXcP93PK5cP8OqVI7x88QiP + zh/ioeDBuQPcObOPO6cPPDOCzx3l9qnDXDywm32butnWuYJtK1c8M4APHeHe2XM8vHBeznVeZQCf29fH + xrbi/xrAkQttSRLNkBFkI/zOmqpYR1aK9u8pm8pgwyx2Nc1l7/J57G9dwP62RRzqWMKZDeFc3Z7M3b3Z + PDpUwIOD+VyS9TObY7nYn8i9fVk83p/Drc1xXOwM5OLKZdxcG8qNtcHc2RjOg62xPN6VzltHS3l6pp53 + Lq3g43u9fP3aPr566xifv3Wcj944htq9Dl9utHhxtspJ9cbABWmsV5tdudHmwbVWdyFODgwK4ehO1KU1 + XJ2WCG2aogzIWzKOkMlDmO3yzAD29XiBqZ4jmeI+kvEOw/CyH4mvmy7TPA3xcdDA2Xwo1vpq2OgOwcn4 + BbytR+HrNJZZXnKeuSakhTuRG+tCZqQV2RL08mOsVEgNMpJArEX0PD3SAq3Ji3ChIMaDgmgv0gIcWear + h6/jUFzN1HC2HIK74zDsbIZgYaGGldVwrC0EZsNVBvB/oPQGtpXSwXwE461GM9NRg2BJtqneEkS99Kly + 16HNUwScuzqbXYez3W2o6m3EPZPGcmS6HsfmGHNwlgS6mYZ0eo+i3mMole5C4F2GkOmkRpa7EPnxQ1TD + a+ZPFig9rKaOocBPi/yZBiIeTcidrfRAMCJtojYpnmPIcB9GsfdQVi3U5UCCPbdLpvCeVIivVvnzr3VB + /GNNIO83z+dqujv9i/Vo8xlKrXxXtfzWVucXWO/zIjtnD+WmBPOnhUZ8Vm3Iv0To/7nSAlaaCyyfodPq + GTqeY4XpM7Q/R5sJv7cY8UuDAT9WG/B9uaEQKiO+KDLgvaxxImbG8mmtfL7eBfZOglMz4OJ0uDYLbs2X + 5TlwcAq/rnfkW9nvo/RRvB87jKdhivmr9P4dxoexY/hYhM0nSZp8FDea96OG8074i7wl4kfpLfyB7P9V + 2lj+kTmaL9Ne5PN0Nf5eoMY3NS/yfedYftykya+79PjtkBE/HzHke2Uo6OMGfHtSli9Z8cttR359NJ6/ + 3pgC786Et6fz16u+/P5oAj9fd+NfZ+346qAxX+zQ4R/bdfixX4+ftujwa59goxY/rBrD140v8HHpC7ya + qMajWDUeCO4nqPEwYwhPiofyXoMmH3SZ8P6AI+/sdeWtvS68sdeNxwP23O0x4eZqbW6tHMut9uE8XD2W + j/fa8MstuY6nQfBlIvxLMYFzBUXwfSl8UwIfF8Jb2Xx/M5a/HVrC+VYJdmHaIqoEwXo0iIhqFBHSIMuN + sq15vgatc9RZtWAcG2R9yzJd+v21GFg8hh0ianYvHcGhUGXOkrGcjhvLheSxXE4fzd2Csbxep8NHq4z5 + epMlX/dZ8UWfHR9utOfeclOO5oxlS5Qam0SQ7ooYyZk0bR6LyPuiy5Pvuz35cZ3c325zfl2nxy/y254Z + wMP559qRfN8j69u1+e2gEX+ek/p22x4eOcITO3jNmj+fmPLnq0byPPT564kefz3W44/HUk9fsYaXXWXf + ifx12UeOd+fHHic+qzDkabIGr0dq8Vas1OtyT37aOJ8/jwfA3TB5vjHwWbTcw9hnPX+Jgj9D4Fd/+Oci + fv2bHz88Hs/XVxz4/Lgp3x424cf9xvy8U59f+nX4Zasuv22WsleHnzdpC3RlWY9fewwERgITWTfjx62W + fL/Djt9PT+KvW1LXX1kM74XLM0sWZMLf8vn3qzl8eCaKKxtn0lNgRUWQusCEimBbKkMdqVL+lIr0oiDQ + lZylTiKQbUieZUbKXGOBIRkLjUSEmlAZa0t9sp2QEXOKI/UpjxERmGBBfaIVDQl2Qk6chZy4szzVi6ZU + b+pEXFXHe0pi8aIidjwV0d6UR014huj/lN7ymewT70Z1ojM1yQIhzTXJIkDTXGjJcqc934fOIkmopb6s + KptGa94UiqJdKYrypCxxihClGVSlLaIxP0wImDL/WJRq+LnlRQnU5kYKAQ6lMCWIguRA8pKDyRPSnJ0a + RkZyCMkJgcRG+UsZIuI0meqSdCrzE2T/QLIiZlCZOJ+1ZRG0pM4V4irfKaS4LtJBco2tyhDqjnWgL86Z + TTGOrIm0oUHIbmWwGdURdiKwbKkJMKVhsT4rFunQs8yAwVBjdoUYsSNAh0FpE/0i8LcFadMfIaQ10oSN + ynygIZp0BgqxXTaKNUtHShsaxdZADfZEGHAm1ZrLGbaqnr8Xk01UuJJmztUsK65l23Alx4ZL2VYcTzFl + b7wufeFj2BA2mvVKL2AR8BtTDNiUbiwEzZRtQq635Qtxy7OgL9uUDUKe12ca0ZVmQFXYSIqXDZN8OpSs + RcNJXzCK9IXKHL8apCzQInWJHilL9IlfoE3Y9JEsmzSEIN8XCZ85koRFmuSKGCgKN6c0zFxEgilFC0Qk + zNIix1dyysThpIwfJnlNygkjSJX1jCmjVMj0VYy1kaRPHiEYTubk0WRMUraNJtdvrJxDg6LZmuTP0SB7 + pjpZspw8XYNIX3WCJQ8u9RmtQsCkMYRNVSdKMYenjyNhphZps/XImmdIwWITyhebUbLAUM6nK+dVJ18Z + 3nHGONUfTw1LTGgJNBOY0uhvRP1iA1qCjOmMsmZFmIhjf6VnpyHtoeZ0RAj5jrahJcxSZQxWyH0pnKch + uXQ0WcrwwHPVyZ03jrwFGuRJXCxYqEGxxMXyhWOpWTCGJrmv7YtGqoYh3ptkxJE0U05kmLE/TpudEiN3 + BEvMFOyJ0GSfYH+EFgejdDgcI/k4Ups9oersUvUQ12BfuPL5s32Uz5T1vSKmdkod2it1ae+ykezxH8a+ + gOGquYAvSH24lqzHHWV40RxleFFDnhTo80q+Lo9ztHkpcxwP0jW5l6LOzfhRXAx7gbOSCy9GDeVy4hhu + ZEgukWNuFgu5LjHjUqkZl2ssuVJnxdUGK240WHKvyZpHTba8vcKZd9sceLnCgGsZw7iVNYz7eaN5Uq7F + O43GfLzCSmCpwqcd1qphoD9ZYc0HbebCL0x4u86QN2uVnr+6z6HPqxW6PCpW527uCB7kjeI1OdffWgz5 + fKUpX3YpQ0Ab8vUqA4EyD7AxHzWb8rTGgCdlutwv1edGiSEXi804lmfJpggdVkpbbF6kReWccZQo5q88 + wyKlp/YC2R5qwfIIa1pCraiXulEwS+qe70gVCmbK/vO0KZ2vS8VCfSoW6VK1xIAaqQv1S3VpWqxFe4C0 + 62B9Nobq0xOsS3eQDt3BOqyTnNkpy60BGjQGqMu5NSWnalEfrkN1iBblAWMpWjyS/PnCwxaOoNx/rMoA + bggWvqsMBS3HtsuyMhT0avkNigmsYGOMCLEEEb8p5mxPNWOrCOatySKKReQNpho9N4C12BY7jgHhPDuT + xrEnVZuDWQaczDPlVJ4xZ0QwK3PXnSsw40KJpQrnC5+Zv2ezDTiRosWRFA2OKsZxrqzL8z9VYytC0YH+ + AheJI040xltQHG1ATqwBGUnGJIt4jU80Jka2hYbo4h+gy+IAfRYGWbAo1IY5obbMCbNnZogdswVzg22Y + v8yKhUstn/9ZaMrCeWbMnWfKnDlmzJptyvSZRkz102PyVB2m+urgN1WfedONWDrbiuC5toTNtSFkhrlw + ciOWTNRnwURd5vvpM3e2PjMlJs2ROBI4T53kJToSu03pCDFnU4gFu0PNOB5izNlAPc5LvTg9T5MT8oyP + LjLgeJDch3BrrkfYcivSjmuh1pwKMGeXfLZ+jhats7QpnDiKWOchLBUuPM9OTfj8i/i6jsLbZTQeruPw + ctNmsvB6Py8j5nqZsFDKgEkmRE81I9PPmBI/Q1pmGNAt3H5QftvRyVpcmqLFzakicBeb816sD3/Pms/7 + WUu5m7pYuHkc9zvLeWnvWp7eOco7r17kzpV97OhrpiI/gtDFE5nlY8lMN2PmuRmJTrKSWO5MYeREarNm + U549jfwMb7KFy2cIsjI8yEkXTZPmSXGKJ+Up3irjV4Ey1HNBrDu5MS5kRTqrdFJahJQRjmRGO4vI9CIv + YSKFSdOk9CMr2k+2zyI/YRFFSf4UJi4jI3oRIQun4Odji7OtnqrnrbWVDhbWOhiZa6FvPE5l/mrqjkJL + V+nhOw5tPU0VdAy0VNA10FZt19QZpdpPGQJa31hT1QvY2FwXS1tjbB3NcHSzxMndChcPa1w9rXFwtcDC + 1gAjC2XeYMX81VIZwDY2evg4G+PvY0H6bOE7Ea6sSR9Pv/CPXSV+HKmYz/HKRZwon8fp0pmcK53BuZKp + nMnz5FiqDUcSjDmVaMSVdDNuZ1nyINeK+zkSB7MsuJNpLjHTmEvSFs8k6XEiXo/jkqPPKC9yyb7Xsq25 + IXn8doYFdzNNeCD5+KUMAx5lGvJ2oRXvl9rycaUDH9c58X6LM28ud+ZuhTmnMrXYlzSG3cJHd6YKr3je + 83d7mv5/y23pBioDeGOSFuvix9GdoEG36Jxn0FKVayQOKFgr6E7Rpiddjy25Jiooy+ulvSvbN0ic2Jim + K9t02ZQhyFSgmMA6bM7WY3OOjnAKbbYX6rKrzJD91SYcqjfnSJMlJ9rsOLbClgPLzdlTL3yoUpPBUnUO + VmtzXuLzvVX2PFnnzKtddrzcZiG5w4hHdfo8qdbjicT7lws1eUl0wL2MMbyUrcHd9LFciXuRM5KXji1W + 47gyVUHwC7wiuevtAh3eL9Hlw3L95/MA6/BVjWgr0Rg/io78tdGEf9db8HOtFd+WW/BFoQl/zzbiY+FH + n0gO/rtwqW/L3fln3WTeL3TjpvD848LDjkvcvRAjzzLNkXsFXjwsm8jtUm+ulnhxodSD02VeHJblnflu + 9KQ6sTzcgkLJBUWSN8qkrZTHeArXnURT5jTht5NYmevDRjnHQN0k9jZNUBnAu2uc2VntyI4aF3YKdlQ7 + MyjYVuZIb6Hwzmw71ZB/ncKRO1M9aJf2VhviQJHExkxfPTJFv+dLnCsVlHvrUOGhRZXbOFo8hFvKerfE + wd4phmyfZcHeJc4cDpvEydhZHI2dw86wWfSFzqInbB7rIxYId1wqzzyUvvx4NhTE0p4ZQlNWIE35wbSX + RbOyMp720jg6yhNYVZXMqspnvYGXSzxqKY59NiR0UQxVWSEUJiwkM2I2icumkhE+m4r0EFbVZLJnYzMn + dqzh3N4ezu1Zz4HeZgZWl9PTls3G1lR29xSyf7OgL5cDm3M43J/Pwa357OnJY0Axgdsz6WnJYlNLLusb + slldnarC+sZ0+toy2dGVw861Wexcl8au7hT2b0zjcF8mh+RcB3vzOdRXxrldy7l/ehOvXt7FS2e2c/fU + M9w62c+ZPes4uG0Fe3pbGJRrPbqrm/uXj/Lpu4/59Yev+OOPnwS/8e8//uLXP+CX3//il+cG8E+//sS3 + 338j+Dv//PFzvv3uPd58/RIv3dwr59jKGze28/nDvbxzaT23dpRzpjuJE6vDuLwxgvv9MTzqj+R8+zTO + NvtwocWHS80eXGpy5WKTExdbXLjc6sa1FZ7cXDGeOyu8eWnVBF5ZPYVXV03h5VZvHjW48KjCnscl1rxS + YM6reSa8kSX6VTj/e4WWfFBmz98qXXi7wonXqxSz2JkjWfqsjxpOdYAa+UvVyA2UUtpYdcRwViRqslEZ + 6lF4wm45fn+BJYdFRxzKMuOgcIyDEtMOCrc4KnHlhMSmE3k6KgN4t8S+1aFalM4cQbbvWLIkbxcscBJ+ + 40GirwkhkhdDHIcQ6/EipbM0WRFgwoZwM7bHmgnHsBTeYcbFfBMu5xtwOVdHhSty7isSa24U6nCvzIhX + Gq15fYULd5uVHk4m9MaNZvnSIZTMGiLtYgjJU9VInjmc7KXCq4R/1EUa0RYhOV84SIvfCJp9htA5aTib + Z0pcmqvHvsWmHPS3ktKYgdna9E4axZbJEmvl+k6ItrsYZcX1ZAeJ2w4qDXZBYscp4dRH47VUPYBPScw9 + LXH8RI4hR3P1OVokKDHgWJkxx8uFX1RZcazGjkO1LmyW+9gSNZZiud6CJcPJXzJG7v04cpdqkSlaUTFh + kgMMSQgwIlauNzpQn9gQZShnAxJEPyom8H8NYLlnCuLjLIiLMyci3FDFtwJFdyoG8LLFmoQFGRAXbUaq + aPicNCsKMi0oybOmqsiBuhJn6godqMyxojjNmIJEHQrjtSlR5gFONaRc8kl1hhF12cbU5RiL5jalJd+c + tkLRRAWmdAlPXF1szupSa1aVO7C8zEllABfn2JGebElUpCkhwrP8l1qwZKGlXJMzESETSIieITxxoXAO + f+qKQlTTPG1oDmFd3VzWVE2ir3EyO6Ut7JA4uaVC4muhI2szrOiWnNkrOVQxgA9VSC6u9Zb7Op595a4C + F+GkLlI6MVBsy+Y8W3pynOgpmEBX9iSKgx0Jm6wvGtaIyIWupEXPITZyrvBNP3wmejJj9gzKKivYvG0r + G3vXE58cwaRprkyd6kSUvy+NmQHsbkjkUGWo1FdX1ooG2CP692yUCXfjzHg10YyPsuz4qtiJbySW/73a + XvKStMFcbV7JGMvjtFE8Th/Fkyx1nor+er/IkA8LJWfJ8meFomOKzPhCdMrnkp8+zjHg3XRt3hK+/mqc + ugpPpD0+jBOtJjn9fpK0A3k+95QX0bIdOZvhxO4Ea9qXapDv9wIxnmrETVCTNjeamlANmiJ1aBY9qaBJ + NOVy4S6t6RbUplqQp7xEIPVs2Rwd5vrpMk3yhY+XAa7Ohtg7GODgYIyjoznOTua4OFvgLHByscBeYOds + hq2TkXAvPewdtXFz1sTTZRyTHMcyVcpZngoPt2KRrzNLZnqTEBVAU30l+/bu5NLlS9y6d5+rt+5y/toN + zly6wu6Dx6hrXklobCqLgpQhoBvo2jTIjiNn2Hvqksr4PXjqmpRX2XfiEtv2HGXz4AG27z3CsbNXuHjj + Hpdv3OfKrXtcuX2La7evc/P+DcE1rt25zLWbF7l64wKXr5/n0rWzXLl2iitXj3LtykGuXNjFySPrObRz + uWq6gD2KAdyhGMCz2CB5e3WeB1057lKX3OhId6Y1QRmZw46WOHuVAdyRZs/qfBe6lVFKpV1tLHVjg/CD + dUVybKEfHbmzqYnzIy9gEomzXIn0sSZA7t0iSx3mCyedI/x0toWBygAOmuRJ7Hw/UsMWkxMXQF5SEOU5 + Uaysz6N/XQMHtraxZ0O1tJkUuqqiaC0JobEgmMrcUDISlrJk0VR8p3gyQeq1z0QvJk50x3eSK3P83Fk6 + 14vgRZ5EL/MkLsiV2EBb4kXTJPobkiI6NifQgHKp17WRZjRGWQo3NqNC1ouDDSkMMaQgxIQ8Wc8NMZVl + M/JESxUEmVMYbEFZuJ3EW2vy/IULBSjDSHuyItmLVcqws0nOrEu0Z328FV2iY5f7j2Bl8Gg2xmqzW/jz + qSo3rjdN4k6LL7ek/Z8odqYnTnRv+GiaQ0ZI/B7DGsk5G6Xe96YZ0iexabPwZpUJnCkcOFt5SclQ1QtY + mY92d6louypb+itt2FRhzaYaiQX1nmyUmNLXPoPNHfPY3LmMvpVh9K6Mp2dlOutX5rF2ZRlrOmvp7Gxg + ZUcjK9rq6GirZZUy5URTjXCfMtqK8mjOTacuM5HK1BhKUyNVKE+OokziRnFcMEUxgZTGBFGVEEpjajTN + aTE0yuf1iaHUJgVTm7yMmpT5VKXOoCplIlXJrtQkWVOXYEqjtM/mRANaEkQbxhtJHTNheYI5K5OtRW/b + sT7Llb5cT/qyXenNcJF7IJwxx4GBAid2FDuwt9SR/SX2HCi1E44qekVyzpFc4ebppqJfDFWjdpzO1OOs + cPgz+boqA/hosRGHSy3ZU2TFjgIrtmSLPs4yf9aJJM9KFVMHCxVT2EzV+7cvXV9KeQYq6LE1S094gin7 + JR8cKrbgsOSIo/KdJ/MsOV9kz6VSJ27VenGv0YeXlk/m1RWTeLNzPG+v8uQdwXudUi534Y1aG14uN+W+ + XNftHC3uFuhyXzGAhd8/qtDnQakud0Uf3Mofx/0iXV6qNHreA9iMW/UmXKkz5GKtEWdq9DlVI7+tVk9y + hAmHhf/vkxy8q9qJLZVObKpyZYMyTLvw8e66KXRV+tBZ7sNK4fithe6quX+V4Z9b8lxpK5Z6XOxFe/F4 + VpT4qIzg1gJPlktMWFkyke7a6fQ1L6K/I5hda2M42JPMod4UjmxJ5dRgFhf2FgnvLOLk9kLO7ajh6qEO + 4Zy9vHJ5D69fO8SrV4/wRPD40hFeunCAO2f3Ch/dw61T+7h96oAsH+TSwd0c6FvP9tUrGVjVIXx2E1cO + HeLemTM8OHeWhxekvHCMM3t72dBaJHp8/nMD2IakZbakB1qRE2pFRYwdK0Tzr5e41F/ly8666aJHZnGg + ZS772xZwaMUizqwP4Wp/Ind2Z/D4cAEvHVIMYOGrwlVPbYrminx2a1sS57oCObvCnwsr/bnWFcS1NYHc + WBfMrZ5wbvVF83h3Fm8eq+Cts028d7VL+G8/X7y2j89eO8hHr+xXDOBpXG3y4pSQB6XCHC8WAlhjL9tc + ubbcQx6gIwO5pqyJ1aQhcASVS4dTumwM6fNGEDplCAvGqzHb6wWmebyAr8dwJrsOZ7zdi3jbj2TGeAPm + TjLDz0MXb7tRuJi9iJOhGs5GanjJ8mS7Ycx0H0XYXCOyIhxFtLhQEGtNvoi+gmhT8oW8pAboET13LNFz + NElbZk5+hIgvxZSIdid9mR0Bk3XxcxyOl8UQvGxewMtxBI42Q7CyUMPeZiROtmNwsByNnfnI/zF/n8Pe + ZDjuZiPwtR7DIkmecW4G5LjqUeEswdFdhy53dfpch7HV7UW2uA9l+4TR7Jmmx97ZQlJnGLLRV58a52EU + 2KmRJUixVyPJUYiv+wtkeL9I7pSR5PoqGEX+1LHkTtckZ5Y+WbNMyJljTpqfMamTdEjxGkuG3Ltin2F0 + LtBlT6ytkG8fntTN4r2WeXyyYrGUC6ThTeFglC2d08dS5apGhZMatU7D6fAcyYYpo9g5dyRXJZi/mW/M + R9Iov2s05o92c2g3gzYpFbRb/F+0mTxD63MsN+b3RkN+qdHjuzJdvhYR8LmQ6g8zdXk9aQyvZYzmoypD + flIM4H2T4PR0uOQHN2fCvXlwZTYcmcwvPfb8o9GIT3PU+Tjpmcn7bvhw1dDPHwmZ+jRZm7+n6fJpkjof + xY7ivchhKgP4nTA1Powdzlep6nybOZZv0pTewGp8XTCE76qH8XOnBr/16vLnbiP+PGTKv48Y89NRQ348 + Zsj3J4346aIVv1x34Jf77vz5ykR4S67vdT/+ejyZ3+/78PNlV/510pav9xrxZb8O327R4afNuvzcq8Ov + m3T5baM2P3aN4x/LR/Jp9XCeyHc/TFLjQbIaL2UM4ZWi4TytH8vHnXJfNlvx5VF3vjznw98Fnwn+dtyd + t/ZZ89qAMa/LeR+vG8Fr60fx8V4zfrrmwx+vLYRPI+HrePguHX7Ih++L4R8lsr0Inubx850kPj4ayIUV + E+gI16V+mS4NYUZCBIypCtKmapkWDf7atCzSpnXBODoXarB+qQ69st/mJdpsXTSO/sXj2C7kc2eAiKig + UYKh7At9gUPhQzifNFQCupDg5QZ802vHd9sc+XqbCx/1uXJvuSUHs8awKVyNjUFq7IkZy8UsA16vd+Af + 6ybwwzpPflxtz09rTPlltTa/do3h564R/LB6BN+tGcE/N47hh34tfjloyB9nzfjrljU8soVXreANc/56 + 1ZC/XtOD17Sl1IaXtfnzZdn2iqU8Iyd46M1fl7z4bb8rP2y04xNJNk8TxvB6uDpvxRrwWamL1L1Z/Hl0 + CdwOgnfC4bNQ+KeU/46Av2T5d3/4cYHc0zn89v5kfnjoxpcXLPn0kB7f7NPnX7t0+XG7Fr9u0eS3zZr8 + u0/KTVoq/NqjLaUOv/Xo8ccmff7oMZT6JnVsixnfD0rdkuf9++XJ/PWS1PO3AuAjeY4fpcHfcvjzzXy+ + uJrASzsXi1CRxBVvIMLXUuBMbZQ7NdFeVEQ9M4CzFjuQMteKhJnGJEk8SZ1vQuZiIXWBppTH2lCVaENx + tLEQPW0KI3QpF5FQJQKzTj5riBehl+RKa7IHzSleNCV60ZDkJcTFi9r48dTEjqc6xkeFqmhvFWpiBXEe + 1EqMrU1wpE4Ic22iLXXJdjSlOdEuxHpV0QTWlfnSXT6NdRXT6MifQq0yF2HSBBoyp0synk9rfhBdFbGs + LE+gtSiWFaUJdFYk01ocS2NRNHV5UdTmR1MtqMyPpVSQnxVFZlooSQlBpCWFUJgdT1F2LDkJgcSJsIuY + 40rmMh9aUhdQFz2V/MW2ZM4RsrvQgFohuW0RlqyJEhIpiXNjtMS/UAuqlxlQ6i9EWUhveaAZ5YsNqJon + bWKeBmsWatLrr0v/Mj36pV30S5vYIu1lc5AuWyJM6YswYV2oPp1BGrQtGU3bYiHCi0awdvFIOU6dQRHw + xxIkD6ZYS1sx5Wy8oZTGXE415WqmpcCKy8qfECKET6aasT9ej81hY9gYOooNkepsiNNmY5Iem5KFmKUb + CTk2ZWu2mZBEU3ozTdgogl4xgFenGlARNIy8RUPInK9G2rwXVAZw5mJN1RzA6Uv1yAgwkrxnSNJiPWLl + t0XMHEnkrFFEz1MnSX5bTqix1A9zShQTWBEEC/Ukx8jxvqNJnTiMxPFDSfIeRtKE4SRPHEGqYvpOGU2G + YhBLzkibPFIwgrRJI0mZJMco5rDfGHJnaZA3W0ty1ThS/EaRMl2dhBny/VPHiThSZ4nPGBb7jBIxP4ZQ + yW3KMNBRfso+8t1z9MmZb0DJUnOqRYhULDKidK4exXJ86Qx1quSctfNFDC81oj3IRDV3c/NSfRoX68q6 + EWujreiU39O4RMSy/MYO+V1dIoTWxNlKPLSkcZkR1Ut0KZo9lhy/EXK9cg+FIxTMHyd1RlNlABeqzF8N + apaMo2mxOq2LRrFKnu/m0HHsTzQUEm7CqQxTDsmz2i3Pbpdi4IaqszdKm72RWv81dw9F6/wfA3h3iOwT + Nk6FZ0awFvvCNNgdOJrBxcPZvUQxf0cJhrNP+NJxiVsXEnW5kqLHbSHtL+Ua8yjPgEf5erKsxYMcTe5l + CZHO0uJepiZ3UsdxRfLfWcmDZyKGcC5uJFfSNLieq8/1ImOulppzqcyMy9UWXK615Eq9JTcbLXnc7shr + 7U68s9KFd9sdeCxE/Vr6UFXv3wf5Y3i1Qpt3m0z4qN1S1dNXgWICf9JhJdsseL/ZWPKagarX7xv/NX+f + GcCvVerxcpkGD4vG8qRUg3fqDPh0pTlfrzbnq9XGfNmlmL/6AkM+azfkoxYj3pV93pBjH1cZcKvCiAvF + xhzOMaEnQpMOf3kmC8dRMXs0xcq8vjOlnKtOqTy3GhHBdYEmNCpDgC8zUb2EkD11lArKSwmK+avMda0y + gKWuVy7Wp2qRHnVSHxoXadLqL7wtUI8NQfpsUOYDDtBibaAWXUFSj2S5Rdp3w7Kx1Mu2eomtDRJbq6Us + C1SnSOkJoozasGgkFbJfTZDsI8c1BurQInm3LVgZClpb6qYWayKV4aB1VW9S98Qppq+08RRTtiQbqd6a + 3iZtf0DKAYkD22KfGcCDCc8M4N0pUrcyRBTlGHMi15BTIpgVE/i88O+LJVZcFA5+ocCEM1n6nE7X4XiS + JseTNTghHOy41J2T8vxPVlmyT4RlnwjPFYmO1ESJ4I8UXil5IiPBjKQkM+KkjIwwIjBQl4UST+Ys1GHm + ImNmLjVjmrTLqf7WKvgpWGLBjAWmzJpnwsxZRsycbsAMgd90fXz9DJgyzYDJU/XwmaLJ+Inq+AgmT9Rk + 5hRdFviZsGyGKUEzzQiYasQS4eSLJmgzf4ImsyfLPtM0mTptLH5+I1kwayRRwk/yAwzkGRixSrBV2vyB + YBGL8tzOLdbizHwtTsozPr5In2OBxtIWzLkabs3NSBuuRthwOsSaXf6mrJsn+VXOrXDnUBs1FliqMdNK + jcnWoi9shuGqaA4nddzddJgw3ghfL/ntnqbM8TCS2GVGmK8ZyX6iM/yEWwmfXyW/davw+0PTdLngpyeU + Vp9XA235KGkSX0ruez9zIffSFnKnLIYHq8t4ef9a3rl1kLfuH+PG6W0MdFdTnLKU4NkuzPIwZrazPnMd + tAn2NiFpjj0FIZKD02ZQnj6F3BRPMlNcSBWkpwofSHYlN1np1etOUYIHxc+RH+dOdpSLyuxVTN+EEDvi + gwUhIirD7EmNlHNEepAc5iHrXsQFKJhAcug0MiLnkBO7iJTwuYQsnMjMSXa4Oupjb6eDra0eNra6mFlq + Y2CiDPus9OwdhaaO0hNYAy1dLRW09Z9BR6Bs19AereoFrByjDB+t9AJWSgsbI6zsTVSGr2IC/we2jiaY + WOo8M4BV5q/sa6GDs7MpM7ytiJ1qS9kiR7qEu/TnTeJg2TSOV0znQvUCLlUv5EL5LC6UTONiqS+XSiZx + Nt9DZQAfijVUxeZTsXpcSjHhpuTiuznW3M62Ui1fy5S2lGbC6RQDyeX6HJEcfVr2u5ihjOJhxQ3J47fT + zbmfbiK83ohHGYa8Ijn5nUIr/ibt6pNKez6uc+TjNlfeX+HO4zpbLkrbO5g0lr3J49iVqs2OVB22p+oJ + 9AXCN9INVAbwljQDNiRp052gybpELdYl6bBWsFq2rZb1VbL9P1iTrMOGNH0255ipsFGOX5eiq0K3gjQ9 + 1iumsGCD0jv4uRHcm61Hb44OfTnabMvXYUeJAXsqjTlQa8ahRguOqQxgOw62WggXNWRHlVxv2TgOVulw + VvLAnZV2vLzWmSer7CV3WPCwyZiHtXo8qtThYZmm5Ixx3BWtdyddMYAlL6WN4WL0C5wSTXBskRon/NW4 + EvECr+VKXinW529lBnxUYfDMAK7UVg0B/U2tNj/U6/NzvZHKAP6t3oofKq34pthU2pMxnwr/+STFiC+y + zPm2yInvq734osKdNxVzPk6Pa9F63E0y5+VcZ94o8+b1qgk8rvTmXoUnN6s8uFjpwZFSN3blO9Gbasvy + cGPKAnQpDVVeonSiUtpOZaI3jem+LM+YyIrs8awv8mF7zSS5J4oB7MGOake2V9jSr7xMU27/X2wptaev + 0I71uXasy3KgK8OZ1ZkerErxpknaXMUSawpmGZM71YBCX0NKJulT4q1DqYc2lW4aNHlq0T5BcsQkQzb4 + GrHJz4zt8+3ZEzieI5HTOBI9k11hM9gWOpMt0j57I+azKXoJvSnB0g7i6MuPoTMrhOasABpzg1heHI4y + x/rywmjh2jHPjOCyeNV834oBrEBZVozgutxwylKXSexYQFLANFJDZlAQt5iGgli2rKzg8JYVnNnVzfnd + 6zjU18TgmmI2taXRszyBg5sLODFQzMnBfNmnkHN7iqUs4nh/IQc35bNzTQ6Dq3IZ7CxkW3s+PY0ZbBJs + bc9hx6o89q3LZ//6HPZvyBCkcagnjcOCAxvT2Lsug33deZzYVsP1Q6t4cLKPu8d6uXlEQR+XD/ZwfGAl + uzfJNa2vZ3t3PUd2rOXeJaUH8KNnBvDvP/L777/y2+9/PjN/VfhT1n/np99+4l8/fst3P3zJdz9+yjff + vsMbr53n3o2d3L3Uy+s3t/HZ4928e7WbO7vLOLc+gZOdQVzqDubu5jAebwvj2srpXF7uw5WW8Vxuduei + 0vu3wZGLSg/g5a5caXPn+v9D2F+HV5GsXdxwgEHi7u5GEohBcNe4u7u7G0kgAYKEIAnu7u7uzDCuZ+Sc + 0XPG3Yffd/dmZp7zvM/3Xu8f66ru3p3e3dVV971W1q6qJT7c7R7Lw2V+0n8CeXlZIM93jJH+487jWmXt + PDteKjX/6J8AAP/0SURBVLPmtRIracumvFFgxjslNrxb4cQ71W68XuXMK9WuPJA2dihT+EnUEJqC1SgX + KKOAq0Wjd6ZqsyZP4kq5LfuEExyrdeZktRPHS205nCuxL92Yg0l67E/U5mi6HicLDDhdJnyh0oa9ojFW + xxqKHtIU/mQgvNiWygWjVQZwxgQbokZrEu42hESvIX8awOasi7FkW7LwYeEwZ4utVfzjcqm5ahTwXybw + FeGrNysMuV9rzvPtDrwkfPNWiwNHhMv2xz1Dq2iYEsX49VcjJVCN1EnDKAjWpjzaSPiJOZ2iu7qV6aBF + w3QFDWe1aIFNkud3LDBjX6gtB8Lt2RNiyeZZBqydqMGAcIbtcww4EmXN2RQHruS6cK3IjcsS38+LrjqV + acBxiacnpDyXb8HZQkvVkhpHi405Wi6QuHS0Wrh+jRXH6+040uDEQenvg1KHi5N0qA4dRunCERQvFL2z + UJuihcIlgg1UJoxixqSGmZEUZkKC3HOS8JPEKDNSJMakynOkJlmrkPInklNsSUq2UfGtmChjIiQOhQY/ + HQGsGMDJCVZkptlQkGNHqeSeymIH6iqcaa7yoKnclVrJW+U5ovdFKxSn6lMq+aIi04RqyQ31kpuaCi1o + lpjZKm1qUakNXdK+lpRaslzeU2+FDcuq7Fhe40KntK+/DOC8TLmnJBti42yJCLeT+7EjLNiFuChf0pIm + k5cxm4r8hbRVRtDbGkNfeyirW6axSuLsxrZAdnVPYHdnAJvrvdkg8bkv34F+qftBuded5W4cqpVc3Oqv + gjL6d3+dBwdr3dlf48YOaeubSpQZr1zYUiPXk7zekTZGNK4NSVNtSZP2mJMwmbjoCcye5yec0oOpMydT + U1/Nxq2b2LBxLcnpsfgGuBLo60j0XD9asuazvy2ZU63RbBWeNCjc8YC8i7MJFtxKNOdxsjnviTb/d4Ur + nzZ68GGDI29XW/BKiQHP52vxKHeU5Hl1XijU5o0yY96uMOV9wYdlpnxSZsGn5daSm2z4T5kVHxWZ8m6e + AW9m6fFahi6vZ+jzepYBL0sOf0nwQqYRL2YrvMFJeIQrp9Md2RYjOna2BoXj1Uj0USN9/BDRwBq0iU5c + LLmsW0GSMUtSTFiaaUlPrh0N6dbkx5gSM1ePuaKhpwTqEih5xNvTCFdnY+ztTIQvmUppgYO9JY4OVtgL + 7BwtsXa0wMreXPiVifAr4Va2unKODi4OGnjajsLbfhTj3AyZ7G0tXMuZGUE+xEcF09hQw45dOzl38SLX + 79zj8s07nLt6ndMXr7L30ElaO3uJTs5hfmQyJbXtrBzYya5j59l/+goHT10TXFfhwKmrbNl3nI07D7Lj + wAlOXrzOpVsPVAbwlVv3uHL7FtduX+f2w1vcefY2tx5Ief+m4Dq37l0TXOX23YvcuXuWe3dOcPfGQc6d + WM+RXZ3sH6hhb18uu3rC/5cB3FvoxbJ8D7oyXWlPdqAt0YGOZKenBnC+O6vKRqsM4DWVnqytGk1/5RjW + lAfI8cksK5pBU/JkikMDyZjmSZwyAtjd4v/dAJ49kcyIORQlBlOaHkZ1bhTtlamsaC9k4/Iqti4vYeOS + dAa7kljbFs/K5kQ6quKkH4cTGz6dWTPHiYYKZPLU8UydGsDM6X6EzA0kNmQ8SeGBpEX6kR7lRYbw+cxI + e7JE9+aEmlD4twFsw6JEe1qkVEYEqwzgSHPViN/iKEGktWgKG9m3lbxhR0WkIzWxrlRFuVAa6ki5aJf2 + VF+WZPjRk+HN8nRPVqa5slpiaW+8CV3hGiyN1mKdcOM9pY6cbvLhyqJAbnZM4EqzP0fK3FibbER3jAbt + USNZHKfJilQD+qXdrxfuNiCx6S8TcrPo2a2S61Tmr2jZnSVm7KqwEs5py5ZaWzYrRnCbJ1s6xrKxM5Ct + S6exedkc4SMhDC6NZnBZCuuX5fxpAFexYmkDy5Y2s6y7RWUAL1/cxIqOJla31rG6oZremgp6q4rpqcin + sySLtuJUWotSaclLojEzjqqEUCrjQ6hNDKMpNZKOrHg6sxPoyIijPSOKtoxQWjMX0pwtbSJnIg3ZvjSK + FmvOdKA13ZK2NDMWpZrSkWpGR4r06xQrycnWLM2wVxnAa6Udbi7zE+6tmMBebCz0YHORK9vK3Nku8Ucx + gXdXOrOn0p4DFbYcKpO8XWzDkQIrjoneUGarOCP6/myhEWdKlBHAkq8qLDggMUhZT3lLobVqAEm/5IQN + +dZsKrYTLqBMA+3AFsnPG+XvB3KMpP6NVSOBB//LAN4v+eCg4LDkiMNyneOiK86WOnFR7ut6vRe3m8dw + r92Px12+ksN9eLnbk1cFry/x5LV2V16st+VRpRl3lB98FehyS8p7lUY8qjXmWcUArjHmboUet0Qj3CnT + 51618HTh/veaLLjZLJyhUXR8g3CRBiNONRpxrMmYI/LZoUbhJg2SOxqcGayTOqx1Y42yvEBLIOsXTWJN + ywRWNQayTLh+V5kX7UUetBa4sUj4/5JKH3qqfFUGcHelYhCPoaPIR4VlVeNZ2zqDTV0L2bI0gm29UexZ + Hc/eNfHsX5fIsc1pnNmZy+nteRwdzObU5jKuHljE3VNrePHqTl6VuPPKrSOCY7x0/RjPXz7M/QsHuH16 + D7dO7f3bAL56ZI9w5/XsWrOC3atXcFRZA/iIYgCf4cH5s4JTPLhwjDN7N9DfVa4ygGPmuBI314F06Y85 + YXZ/G8DdeRKjSv3YXB0g9TGeva2TObhoGge7ZnCoew5n+yK4tiWVe7tzVQbwc4dLubYtg6OrowTRnO6P + 4/yaWE51LxTM5/zShVxeFszVFaFcWx3Bjf4orgvuyLO/eKCc10838cbFxfzzzlo+ebyDj1/cywfP7UHt + 5uIgLrZ4c6JKyJGQi4PSeY9X2XJOOuylds+nBrCQj14hmq0hwymbqUbBzKFkTh9GkhC5mGmahEzSYJrv + CIK8hhHoNowxjkPwdx3FDD8zFky0Ze44S6aPNWSipzaBjiMYYzUUXys1Au2HMN1rOHGzTCmOc6EyzZ3q + NEcqhUiVxZtKZZmQsUCHuKkjiJ8yisz5xpTHOFCd6CpwIz/EnshAI6a5aTDeaThB7pLwPCX5OQ3FxW4I + Xu6ajPXUw9tZBze7UbhYj8LJciTOVqNUcLEYiaflCPyt1ZnhoEOMqyG5kjCrpGzzNGSZ3O86j2EMeg5h + vZDlDb4j2TxeBPcUc9YGmdI1Vp8i+2Gk2wjhtVMjyVlKz2GkjRmuGnGVP0GTwkmaFE1Sp1jIbOFUXQqm + m0r9WVIwy4bsyRZkjjci20+bvLGjKPcfQc8cQ7bF2XEyVzpqTRDPNk7i+eYp3Koax9FMN/oXKlNNDafE + TYSC1zO0++nQO16fwemG7J2vKyLdkBckCL9TY8ZnLSK8u6yhw1Jg9RSdsq9AOa6g00KFJx3mT7HIjF9b + TPi+Vp9PS/X4INuYdzNMeD1Vj0cJI3iUPoK3JQB81+8BB8bBuUlwdSLcmQKPZsKNqXDCnx8GHfmyU4hV + uR6f5Orxfqom7ySM4t0EdT6Qa32cZcx/JHF8kmPAh2lavJs0krdih/J2wjD+mTqKf2cp5q8mn2UP59Ns + Nb4oGcbX9SP5ebk+vw+YwB55lsPW/H7Ukp+OmfHjcTO+Uwzg87b8eNWJn2578usjP3hJ7u2FCfzxMJBf + 7/jywwUPvj7qwKc7pH4GDfhaGfk5YMTPG4xVpt8va434YZU+Xy3V5ZMObRFrI0XMjeCF8hG8XK3Om+36 + fLBKyOJmR7466Mn3lwP47k4Q39+dwNd3g/j8RgAfXfDk/RMOvH/Qkre2avHWJnnmfSZ8fcmDXx5N5snb + Ifz+YTR//CcZvsqHL0sR1gn/LOXJG8VyvXT+eSSM893+9MSa0BpuRnuCDa3x1lQE61A5X5sWESqdIi4W + z9dj2QI91oQYsV7Iw8ACIzbON2TzAn02zddhkwibzcHqDMxXk+Nq7FioxvHEoRK8tXitw4wvN3nwzQ5v + vtgxlg+2+HK30459uRqsi1KjP1SNPcp6JyJgX21148s1gf/HAP5lhSY/rVDnu5XqfLVyJF/0a/D1Zj2+ + 32/CL2cseXLbHp5zkPdgA6/K/qvGAj3Z1uHJKzpyXJc/lJHAL9jyRBkp/GAMv1/04sd9bnzd78C/JNG8 + Lm3jpSgNXk0w4IMKF75bPZHfD82WtrbgqQn7QYjUoZQ/R8BvoTz5eS5Pvp3Gk08n8/M//Pj2gRv/PmfJ + hwf0+WyPAd9sl/vbrMPPg9r8Pqgj7UmH3zbo8rvgt/WCDfoCA55sMOLJehN+GzDj502WfLPNiu8OuvDj + WR9+vS1t6oW58E68vLcMeDsP5N19+yCH145Gc7J3PCtELLUKgWtNHE1zog+NiWOpjR9DabgHOfOcSJth + Q8pUCzJmWZEfbE+RJIgSIXPVyY5Ui6AsijEkP0Kbwhg9KuLNhMxYyXXsaE9RpqTzpCfLh+7ssSzO8mVx + tp+QGz8hN/5C+gRpgUJiBMkBAuWYn+z70CYksDXNRQiQE22ZjnSKqO4W4twrRKavKoANDZMEk1nfOEX2 + J4nAnCyYzqrq+aypjxRhmMbWxfkMLMpjZUM6q5uz6G/Lpa81h9VSrm4vYPWiIlZ2FLO8vYTFLYW0NOTT + UJNJZXk61YKqklTy0sJJCp1C6EQ3QsbZkTzdTQhuIPVR/pQvcCJ3qsTiKVrUh5rSKWS4N86GtQl2rBEx + 2xNhQYO09ypBdZilwILqecZUT9ehVfJRzwwN+ubqSF/QZ/NCQ+kDQpRCjBmIkP4Ra8W6GHNWRooQC1WM + qJEsmjOcxbNHsHzuCPoXaLAlXJ/DSVacTrPlTKoFp5NMVCbwRRFtV3JtuSy4mGfL+TwbTqoMYBM2KQaw + kOR+ZSRwoq7KBF6fZsRApimbhDBvFDI3qCLOkjuyTFkjBHp5hjF1ESMonj+E3NlqZM8eSv4CyRNhhhRK + Xy4QgVsYZS2Q9iGkP1figGL6KiN/0+TZskKNyI+S3Cn1o0wJVBZhTtFcqbdp2mQEjSQtcBgpvsNI9RtO + muSWdMlJGeMVo1ed7PEaglFPEaSuOqas0ZsVpEnuZE0KZkhuE+RM1SZ14iiBBklTtImfrEfEBF0WBmqz + IEBDZQBHTtAiWhAnSJuiR/5ME0rmSnsNtqEl3J7mYCsa5ppQP0uf5lkGtM4xoH2eIV0LRQjLM3WHmali + mTIqdFmEGf3SZ1bGWquOdcpz9kZasFre/2oRe8ulPpSpvpslxlXNkNw6ebjk1RGUztZUmb4Vcn6JlOVz + dalfqM+iUD2WhOiyNFiT1SLGN0XpcDDNhFPyHs7lWnIk2ZA9MVrsESG0K0qL/fH6KvxlACujgP8ygHdF + arE7XJM9ihEs2KeYybFybpQue8I02Llw5P8YwMGjVNPwH4/V5UK6CVdELN0RHvWwxJJHxSY8KjHiQbG+ + QFnjV5f7hUKyCxUTWEi35L7zicM4FafGmaQRXJT9ywWGXKsw51qdHVfrBU12Tw3gFts/DWBXXl3qzptL + 3Xir25nHdcZ/G8CPyjV5ucGQdzqsVWbvXwawCrL/7mIr3mgz5dUmQ15uVPCn+dv0pwEsZP4VIfMv1xvy + RpMJ/+q05NOV9nzZZ8fnq8z5dIUxn/UqMOXfS835cLGy3ryZasrp55tFSNSbcV4EzsE8Q9bFarE0RIv2 + uVrUTR9J5dSRVExTp2qmsravDrVzDaibZ0RjsLIGsAnl/38M4FqV+fsUyjrAigHcJO2hVfpFp+TCZSEG + rAo1ZJW895XBuvRKuTxUn8WSO1sXaAqP1aQ9UtpgrDHtiaY0xhpSEyFtZ6EWpfNGUTFfg7pQXZoipK1G + yHWlPy6K0KcrQtpStJ6IZrlmrIEKK+MN6Zf4MJAu/TvDio2ZFmzKMmdLpjIVtDnb043YoqyzlKTDzjRd + disGcKYe+5XpnHNFHOUZqaYtVKZ/vlxlz+UaRy4rBnCpxB2pr5Ny/jHhTifSdUQwGouQM+dsjQ3Ha63Y + VWpDf6YLnQlO1ERbSxywICfWnIwEC5KSLElIsCQqyoyQUGPmzDdg2mxDJswwJnCmGf6zLPCdZYnfbGsC + FMywIHCqKeMnmTB+ghFBwnPHj9MjYLxi+OoxRkGADl5+6owWrjrWT4MAf20mB+gzUzF8JxgTMtFU4rkJ + IUFGLBhnwDz5+xnjdJg0XouAcSMInPAMUyY/Q9jMEWTKe6oKkRgQZsw6we5wI06EGXBW+u/Zufqcniv1 + IjgebMoZ6f9X5PluxNpxPcGZs6IV9khcWTPPirpxuqS7DyPSQY15gmmiKRRdMdp2GC72I3B30cbLy5gA + X0uCxlox2ceK6T6WzPO3JXK85N+J1hRMMqduisShyRKrp5qrZve5OMOM27PNeTnSiX+lBfBh7jRez5zG + 3YwZ3K6K425vOY92L+Wl81t4dG4z53YvY+OSYsoSpxM50ZFZo6XO3Q2Z56JPjK8F2TNcqYj0pSFzIjWZ + gRSle5GT7kFGmhtZ6e7kivbJT3WjKMWTYkFJkpTKqN9ED3IT3MmKdyVDnjs50pGkCAcSI+xIkntLjXEj + JcqDxHA3EsM8iJ0nmO9Fcog/GZETyY2fSXrUNKLnBzBzoitjR5vj7maCm5spLq4m2DkYYG6th6HZ06md + VQaw0V8GsN6f2zoq6BnqoKOvgYGJsv6vPmZWhn8awHpY25ti7/w/BrBSunja4OBijpW9EVZ2RljYGmAt + pbOzOX5jnZkX5Eae5P2OUE82ZvtzqHKC6M4pXG6ayo2mWdxsmMX12ilcFYF/tSpQEMCFUi9OC2c5Knn5 + oDJDg8TpU8kmnJd+dz3PjhsFDlwXXFWZBNaqOH8sw5TDqcac/tsAtuNWrg13c6x5qBjAueY8zjXlxVwz + oXDWvFMmMbJauGeDM/9a7Ml7Pd683O7GzUpr0WA67MvUZne2PjuzDNmaLf1bQZYRm3NNVOv/Kj/6Wpth + xJo0iUPpAsnzCpZnGLI8TXKc6J+lAqVckWnMmhwzBgqtVVgrf7s6y+R/IHmjT66rYE2OoXxupDKC10k+ + WCu5Yl2BHhuLDdhaYcJO0Xz7Gqw40GLNkS5Hji1x4tBi+6cGsMTzHTU67K8z4LTs3+xx5NmVbjzf68qz + 3XY8WmTFw2ZjHtToc69SW3KVBjdzRko9afBQZQBrcSFhqPRFNU4Gq3E2Qo07qSNU/0h/t9qMf9aa84Gy + BnCdCR+rDGDh2o26fN1syHfNJvzU/HQa6B8a7Pm2xpYvSq1EF8r58vyfyPN/VeLA9/WiRRq9+ajKhTel + Lp4X7vSScKx/VHrwbr0fbzX68Ur9WJ5r8OZBkzfXm0ZzvMadPWUuDObaszjWlAaJ13Vx1jRLn2pM95b+ + 5sei/AksLhhHT4EvfWW+bK7zZ1eLH7tbvNlar5i9DmyqcnqK6qcYqHRkQ5kj/cVOrC50YUW+G6sKvFmV + 58cS4dFNkS7UzLOlcoY11dOsqQoyo8LPmEof+X4vfdrGSGzzN6E3yJxVEyxZLRiY7sC2+Z4ciB7H4dhJ + 7I2azPaoKWyJnsHGmFkMJMyX3BHOjpIktpQmyndG0lEQSltxGG0lEVJG0loYTUthFO0lsXSUx9FRkaha + 81sxfpXt9rIEWkvink4FnRNObsx0cqT/F8bNojozjBUNeexY0cjRwW7ObF/G4cFWdq0uY3BJBgNdiRzZ + WMSZnWVc2FPK1YNVXDtUzeUDFZzbVc7JLaUc3lDCobVlHOyvYu/KSrZ1F7O1u4g9K8o52FfJkbUVHF1f + ypH1hVLmcWx9LofXZrFvVTo7lqaxc1kW+/vKOLW5mQs7lnBxxzLOyn2c3dYr11+mGpG8Y00zW1Y1qAzg + YztXc++/DOA/fv2BX3/9RbX27/8YwE/XAv7pl5/49vuv+Pzrj/nPl+/w8b9f5tVXzvPgzi7uX93Ay7c3 + 8v5z23jr2kru7ZPn2pDOxb5orvVHcG8wnOc3h3N/9Qzu9ARyo2sM19pHc6HFhXMtTpxvd+VChzuXuzy4 + 2uXJ7cXe3F/izQs9vrwo5z5u9eS5emeel7b0UqUtr5bZ8EaJNa+Ldn5D+u470p7fLXXg7XIXXi935NUK + Zx4Jjkl86I8eyqJwNdECalRHq9EierdX+vlgqTV75XpH5Lpnmty42OTOSTl2KNOQQyl67ItXZqxRl9im + zakiI85XWXJRmUKyyIZ1wklaF+hSM8eEinn2lM/3EF48mvQJtkR5aakM4CRvZQSw/n8ZwJYcyBDeIfd6 + scyKS2XmXCox5krxnyZwiQG3qk24X2/J4zZ7nu9y4WaTLYfl+JrYYX8bwBn+aiQHqEluHUJesBblscLn + Ei1YFG9BV7hwrpkaLBHOt26+EdvDrdgdYS182o49UXayb8kG4YCrpmrSP02LTfMM2B9jzYk0By4WuMg9 + uHKxUHSZxGrF+D2RKVwh15iLRdaqkcunSiw4UmzMEYlLR4RzHlZM4CpzjtZIvUnd7K2Vvi0xXlkDuC5i + pGivZ8gXzlcwX5P8+brkLDAgc6ExaSHK6F8zEgTx4SYkRJgSL1wqMdqcxBjhV/FWKiT+hUQb4VvKD+4s + iRFNFiGcJkx4aKRotJhIM5LkeJrUb16mDUU5tpQX2lMt7aG+wo36UheqCmwpyTajIE00f7KOlPqUKqOB + JceoTOACiW2FZjQVW9BabMUi0REdJeYsESwtk+epsGGpxK3OalcaJR5WKQZwli1pKXYkim6OibZTrQUc + HuJIbKQ3aUnCDdKnU14wh7aqUFa0Rop+X8CqpkmsrB3DhhZfdnaNY1eHP5vrvRio8KC/0EnyjYPkG0d2 + lbtxsNaHY38ZwA1PDeADtW4cqHFhZ4UjW0qUWa+c2Ns0nn3ts+gvm0h9nCeFyuxnYWPISwgiOsqXmcJX + /Ce6SzmV2oYqNm3dyMDmflIyYxkjPMHf246omT4S02dyqD2Ji50x7Msby85EyXPJ1pxLsuBavAkP4o34 + h+T0D8ucJAe58n6dLW9Jbnqp1IDnCrV4kCtaKE+dx0XavKYYwOVPDeBPysz4j7T1z8ut+LLCms/KlBkq + ROfkGfB2rgFvqWAoMOJNyfVvZRnzRraJwIIXs+25LW3zWKwFA8F6tE0bSZ7S9v1Ez08eSn24FosTDSTX + m9KbYsqKVHN6081ZmWvH8nxlPUgr8qJMiJyly+wJ2kzy18VfcoenmxFOwpssLQwxN5PSzBQrczOsLSyw + tLTAwsoCUyszjC1NMbI0wsBCDyMLbSyttLC10sTBYiQuVsLTXY0YN9pKtfzH5HHeRIUvpK62mq07dnDq + /EWV+Xv++g1OX7zCiXOX2XPoJC1/GcARyZTULGLlhp3sOnqB/acV8/cGB08LpNx/8gqb9h5ncMchdhw4 + xYmLN7h06yGXFRP4lmIs3+Lq7evcenib+8/d4+6je9x/dFdwi7sPb6pw78EV7j+4wMMHp3l09whXTg9y + dGcH+9ZXsmdV5t8GcL9iAJf6sDTfk8U5rrQrgxcS7WhOdKD9LwO4wJ1V5aPp+9MAXlM5mjUVigEcSF/5 + ZFYUz/zbAE6f6vHUAHaz/F8G8ExbE+apDGAfkmcFkRk6g4LYuZSnhlCdFSb9UHJvRQK9TVmsW5TJ9uWp + 7FqRxM7eZLYszaS3MYnGkhiykxcSHT6ThQumMX/hdBYunCrxYDIJytq/cVPJTphMTnwgubE+FMR5CFwo + iLGjUBndGyF6JMaKVnm+RckOtCTY/m0Al4abURxhQXGk1Z8GsB3lUY5UCqpFC9QneFIb6ynnKkawOy0p + Y1mUOoauNC+6lbVHRWf0SV2tTJGYEStcNEGf9aJV91a6cLbVl4ttAVxpG8f5Bl/2l7jQn2LMEtHs7THq + dMZpslxlAFuwTjGAJa/9Pw3gHcXK6F9LlQG8s9yS7VVWbKu1ZWezM7s7vdi12I/t3eOEB0xl6/LZbF62 + kE1Lo1QG8IZlOaz90wBeuayB5X8awMsWt7Kiq5lVixpZ01zN2sa/UEFffQm91fn0VGZLDMySeJhOe04i + dYlh1MQFUx8fQktqOF0SS5Zkx0kZQ2eG8KrMYNqy5tKSPYWW3HE05njTlONOa6Y9baLjnxrA5gIpUyR3 + /WkA9ygGsOiPdUXebKsIYEelP5tKfBgo8mRTkYvEO1e2SPzdUu7EtnIHdoqW2C05e3+JFfuLrDhcYMmx + AgtOFZhzushEcq0Rp1UGsOSpcgv2St1tyTdnIMdcNd12X4YJ/TnCHSXnPZ0O2p5Nco0NojPWSe5bn2XA + gLJERI4BmyRO7S6Va0i975cYpnh5h/ItOZpvxWmJ2efKnLkifPl6vfCXZi8etHvxXKcHz3e68mKnCy93 + uPBii+iCGivulRtxo0iXa/naXC/S47Yy5XO1EQ9qFY1gzN1K4QJlutwu0+d2hWxXGXJLGXTQYMKFekPO + 1clzNYimVxnAJioD+ECjFXvqbaU92LOh2p7+amfW1HmyrjmAwc5JDHROZm3bRHqFn3eWjqY535mmXAfa + Cl3pKhtNt2oE8NNRwKoRwKW+LC4PoLd2Ehva57JlSRhblHjRHSJlqGAhW5ctYE9fOIc2xAp3TWDfmngp + s7i0r5G7p3t58foWXrm1l1duH+K1O8d49fZxOXaMZy8d5t65/XLOfu6fO8K9s0e5eXw/J7dtZP/61exf + 28fJrZv/ywBWcFL+5gindq/7LwPYhbi59qSHOpATZkux5OG6JCe68yROlYxhozzH9lo/9kiO3N86gYPt + kznYOYPTK4O5ujGB+7uzef5wKY8FN7ZlcWRFJAeXhXNEcGxpKMcWz+P44tmc6Z7H+e65XFq+kMsrQ7i+ + Jpyrq8O5sT6eRztyefVoDW+caeedq8v54O4GPn68jY+e3Y7a1UXS2Zu8hCzZsbdQGk+RGYdKLTleaSMv + 0ImTja4qA3iZkM3GhcMonKKmmt4le9YICkONKYiyIXG+GXOCtJjoNRQ/5yH42Kkxzm0UcwPNiRDREzHV + nrBJ1gSPN2XWGD0muYwiyPEZgRozvYaROMuI0lhnalKFvGRJKcGpVEhjXrguqbNHEiVEMiZoKGmzNKkS + Mlif5CAd3J7CBRZE+ukz01WLKW7qTPfRZbKPNmNcnsHDYQi+nlpM8DMhcLQBnvbquCpTQVuOxNVSHRfL + UbhajMLDfARjpJxopU6Ygy4ZTgaUuRjS5GrIEjdtVrkOpd9djdWeAu8R9EmCXi3PsdjXgGo3TVIt5N4s + 1Yixk9J5KPGjR5A0Vp20QE1yJmpRMFkZpaRMq6lNwVRd8qebkT9TiOAsGzInm5M53picAD3y/TQoCxhJ + 12wDBqVOD6S7cq5kLJcq/LhY7svBbFf6woUEBo0gX+4l202NyrEadEw0FrJsJsJSOryQ63PxBjzMM+VN + hdg0mvFTuyVPWsyh1VJgAW3/hXYLnrSbqfBHqym/K2gRsV5vxFflmnwo4v+tJANeiTXmuSgtboQN4VbC + UBEv+ny9xg0OjYOLQXBDcH8SPJ4Odyby5PQY1ZS5X3QZ8pkEjc+LjPk4U1c19fN7SVp8KEnkEyFQn0q7 + +k++CR9n6fKvNHXeTRrBeykj+Ve6Bh9lavLvTA0+zRrOZ9lD+aJ4ON/Uq/PLMsWYM4Vd1vL91vxx1JJf + j8pzHjPju5NmfH/aih8u2vPTdTd+uTeGJ8/JPT47jt/v+vPLtTF8d9qNrw/Y8ulmEz5bp8e36w35ecCE + nzeY8Ot6Kdca8V2fAV+vNOTTZYb8S57hnQ4hfYK3F5vxrz4bPtvqyneHx/DLxUB+vzeJXx9P4rcXJvHz + i5P58XEQ39zz5Ytrbnxx3o6PD8s1dqrz4T4DPj9jz3c3ffn1lRn8/PYCfvlXJH98nMqTj3J48l4uf7yW + x+8vF/Dl9WTe3L+Qkx1jWaJM+yztoSPZmcY4a2k36hTPVJe+qEdHsD6LF+ixVLA62JB1oZIU5huzYb4k + 5gXGDMw3kH1d1s5TZ+Usab/T1RiYrcbBmKHcKNbm9U4Lvt7mw/d7fPl6TwAfbgvg1iIbdmWOYo0I0tUL + 1dgRM4IzWfq8UO/Apyt8+W7VGNX6zj+uVAxgI37p1eanXk2+W6nBlytG8WmfOl8MavPNHkN+kPfx5I4y + AljworyvV6WdvSbv71Vt2dZU4cnLOjx5yYgnL9hI+5E2ddebX897yD258GWfPe+V6fBy/DM8Hz6Cl2N1 + +GepHV+vCODXfVPh6ix4ZT78cw58Pg9+WAA/z+X3H6bz21cT+P3f4/jxDS++vuvAx6eN+WCvFp/t1OHb + Ldr8sFGTnwe1+GNAgfafpRa/b1CgI9u60s70eSLt47cBY37ZbMY3W834aq8NXx934XtllPKDyfBWONJw + 4R8ZiNLnp8e5vH06lotrJ4vgUd6ZDXXRLtTFelAb50V1rDdFYW5kzLYnaaoliVMsyJgjiUEIW3msG6Ux + jlQIqX06+4E2mSHq5EVqq+Jhdbw5TYm2QkachYh4qKakW57rx7LcAJYKenICWZIzTghOoEApx7M4bRxL + 0gNZnOmv+gVuR/poFqW5sCjdUUiQAz15zqwocheiPJYNtQFsbpwkmMzGpqkMNExlsHEOm1pC2LYohp2L + UzjaV8LxdTXsWaH8+j+TDZ05bFxSwJZlpWxfWcmu/gZ2r2th1/o2tq9rZ3N/K2tXCXlbXs/ynhqWLamm + uTaX9Li5LJg8mulelswbY050kD25sz2oXOhNdbArhTNNREBpUrPQgPYIY5ZFm9EXa8nKKBG9EufqQ/RV + BkJ1mPnfBnDVNG2aJo+iY+pIls/UZO1cXQYXGrIx2JjBUDM2CLFeF21BX6Qpy8IM6VigSfPsYbTMHMqi + GcPonjWMlXNHMBiszYE4M44nWXIqyZxTCSacFfF2IcOSC8ov5LOtOCdQyuNZlv9jAEeOYE3UKJUJ3J8g + /S5ZCFqqERvThSQLmRuUcr2gP01idroRPWlGNAm5Lg8fSUHwM+QvHCltQ4+SKFNKIs1Vv/IsUaY1jBeS + LzmvItmR4ngbaQ+mZEsdZMkz5ESYkBdhSoECycc5s/VIn6xO8vhnSAwYSoKf5Ff/EaT4j1QhNXAU6QGj + yAhUF4wkSzGEgzSk1CRTcnjWBC2pdy3yZhpInjKQa2mSOGEk8RNGETtJk7gpBkQKgoP0WDhO66kBHKRN + VJAmsfL3KgN4liml88ypD7aVd+dIuxCflgWmtM43olNKxfjtmmcgsUuEcZi8W8Hi+TosnqfNCslx60Xw + rImxZInELmWGg1WKKRxrTX+cHSsiLVgcbEqb/H31dHUKJw+jaJpiAGv8bQCXzVN+JKNPU6ghi5WRnxEG + rAzXZm2YJlujdTgi7+BstjkXhFgfSzZib4w2e/4c4XvwT+P3L/P3cKIRBxP+NIAjNNkdpsyqoK7CnkhN + iaV6HIzSZW+4pmoK6L3Byuhf+UxlBI/kWKwe59NNuZprzt1iax4Kt3pQYiIQMl2ir8J9lQlswF3FAC4y + 4k6BPpcz1TmTNJTTKcM5m67OuVw9LpeZCnm352azEzdaHLjWKlAM4DZbnlvizCs9brzR48Kbix14rsaQ + azlP1/99VPHUAH630+ZvA/i9xdYqvCN4q8OcV5qNeKlRX2DIy01G/4NGE15pMuMt4QtvCZd4r8OKj7tt + +HK1A1+tkRy/Upn+2UiFz1eY8nmvBf/useCDxRaqKaVfUUabCQ85I8+4N0OLtdEj6ZF6ap8zirrpw6ma + OpzKaaOonKEu0KJqhg7VM58avZWzlSUzdP6PAfyX+fvfBnDjXANa5unSPlebJQt0WLZQl+XztVVYukCb + HmUk+HwNOW8UTdLv26MN6UyU3Cr9uzHOmJpIPSoWalMiubJivia1oXr/ZQAb0BahzyLho8r6wUsidOmJ + 0qNbsEzevzISeG2KOevTLBnMVEYBK7BgW7YI4QwRxkk6KigG8J50aSsZSqnDrjSJM8KLjhWIaKqw4Uqd + kwqKAXyhROKOCLrjKeocSRzBcTn3nHJeuQ3nauw4UmUhotuc5Ul2tETZUx4mnDLcjCThBNEheoSHGxIW + bsRC4QVzhQdMn6lH0FQ9fCfq4TXJQGCE5yRjgZlsCyYY4TPekDEB+vj6yXljtRk7RgtvXy08x2jgIXAf + I5zZezhuAm/fUfj5ajDJV5sZvrrMCZR4IH8fOtGQcLlWyAQDFsr27PG6TJLY4us/lDH+agSOV2P2pCHE + zZSYN1eTlmA9VoYYsDVUn0PBupwSLnNmrr7AkJOzjTg+35AzoSZclPh2Ldr6qQEc78a+aFf6F9hRMVaT + ZKchRDioMd9xCLNcRhDkPBJP22dwspV7ddbBa7QJAWOVf4JZM8nHmmk+NszztyNsnC1xyijgCWaUTzRl + 0SRTNs2y5vBsay7OseLOfCteCLXn7Xhv/pHkz6PosVyJCeByQTDXJO/d2djCowMruLpjMQdWVNJfl0RV + 7ETiguwI9jIizMuYCA9jUgJtKZnrRUP8eBrSg6hK9aMo2YOsRFfSRQxmCLfLSXImN9GFfOWHrYLCBCkT + 3MmVMivBldRYJ1KEGyRGOpAQbk98uNx7uJ3AUbZFZIa6ELvQhYjZzoTPdiV+gTepYePIiJ5MauRk+SyA + eVM9CBhjjZenOaNHW+DuYY69owHmNroYmj1dA/i/DWA9A2XErxY6+pr/BXXVVNCmFsqUzkb/ZQCb/B8D + 2MnVQo6ZYeNogq2jqZxjhIOTsp6dAxPGjyZE8n/pLHd6I0ezOy+AMzUTud48hduCe03TuFM/ldty7GZV + IDcq/VW4XOrF+TxXjqdbSXw2lnhtwGHBsSRjzkh+Pp9ty6U8Oy4V2HEm15rjEuePKAaw5NxT0h//NoBz + bLiXY80DyQEqAzjHjJdyzHlNNMnbpVa8V2HHP2udeLfNVWLkaF5pd+N2lQ1Hpb/uy5B8IZx4R5YBmwUb + M/UFhgxmG7FJrjGYa8Fa6fd9aYaS5w1ZmWnCStlfpuT8FH26kyWGKOuqpeixPF3OyzZjXYG1Cmvk71Xn + /4kV8tlqub++PClzjOhTwYA+yQerc0SL5uqwXlkXuNSIrZWm7KoVDd8onKTdjkNdDhzstGd3qzk7G43Z + Xi1xp1aP482SjxbbcX+5M8/1uvKox56HHTbcbzLmbpUytZsmN/JGci17BDdFAz4o0uNOrrbKAD6tGMAh + alyMUePZbC3erhRNVGPB+7XmfFhryse1ouuUKaAb9fi8QYevGnT5tsGA7xtEmzWY80ODLT/V2fNNhWiw + fHM+yTTi31lGfF0oeqLGhZ8aPfmqzpV/VzvwXom8hxJ7Pqh25/16b96t9+KN+tG82DCa5+S8W43unKhx + Zk+5g9S5NUskDjdHGwhHtqY9y4OWLG8alRly8oUHFwSytMCXlcU+DFSNYXujgtFsrHFiQN71QIX9/8K6 + clv6S2zpK3ZgZaEDK/KdWVXgyepCX3qzfWmXGNQQ6kTjAkca5jhSNcmSCn8TKn2MqPExpMXXhA5/M3qC + LFkeZMWyIOGdk2zYMN2R3SFjhDOMZ1/EBHZJ39waNV3440wGEuaxOTOMncWJbCtJYHV+BJ0FIbQUh9CQ + t5D6nIXUZC6kNiuYhtwwmgsiaC2Npb08XoWW0hiaCqME0SojuKU4jvLUheTHziQ3ahpFsbNoLYyjv6WI + XSsaObZxEYcHmti1uoRNPakMLo7j0PpsTm8v4NK+Ym4cqeT2sWopK7i8r5zzO0o4tbmEkxvLBTUcWVfN + 3hVl7Okt5dCaapUuOL6+kuMbyjgxIOcOFnFifT6H+7LYvTSFTR3xDLYnsHVxpupvDq6u5VBfE/tXN7JP + NMLe1c3s7mtkh+xvk3LXukUqA/jupSO8/+az/PLdpzz55Ud+/fXX/zKAn04Drez//NuvfK8YwF99xIef + vM4///WIV146w8M7O7l/dT0v3VrPew828PqVHu4r5vbmTG4OJHB3IIpnN4fy0pYQXlw/h2dXBHF7sQ/X + 2tw51+jA6UaJJcK3zrQ5cmGRC5cWuXKjw4P7gue7vHm+3ZPHja48rrHnBcndL0suf63MhjcljrxVaM4b + OSa8XWDJu8V2vFPqyJtljrxe7szzgnPZpmxJ1GCF5PjOxOG0JDxDt8SYdUUWbK9y5HCDC6daPFRTUd9Y + 5M1pue5B4RH7E4VvRg8XjBD9ocFpxaitk9jW4soxab+DyhSWocKR55hQIjmtYIYDOdOcSA2yJspLkzBX + ZQTwM8KhDf42gLckmrE3TXRPnsXT5SjKzLko172sgiFXy4Wb1pnzoNGKZ1tteLbdgTst9qp/Xq9PGin8 + So3yKWpkj1MjbYJg6lByQ7SoEH7VKFqqNcGcRcKn2udo0D1Hi8EoC3bHO7BHsDPWjm3RNmyMsJC8bsjy + Gdr0ztRinei/XfGSk0Wrni2Sui914VyRDacVAzjbUGK6Ieelji+XKctm2HGq9KkBfKhMeHu5IYcqFMh+ + pQUHqm3ZKe9nvcSanjQDGqM1yZ89hOzZz5AzV51s0YuZwpXSF5qSEmpBktRLvCBONEm8aJDYyP9BXIzF + /0JCnGL+WhEnGjU22lxlAIeL/ogWfRYrmjUx1oLkeDOyFcMv05qSfFsqihQT2JnqIkfK8qwoyDAhJ8WA + 7ERtciVHFKbqUZyu/9QEzhOOKqgrMKVRnrel0Ez6ssSYIjMWl1iwRBkRLO3lqQGsXNOZ/Gw7stLtSUsW + zhBnT0yEHVFhDsRGeJCWOI6ctMmU5c+grWoBK9vC6Guby4r68SyvGs3aRm+2L/Jne5svm+pGS0z80wCW + WLixxJFdFe4crBvD0TZ/jrb7s19i6V8G8EGJybslpm4pspQ4Zi+fB3F62UL2yvV784Oojx9LRbQvxXIP + cTE+zAvzYvIsL0IiZlPXUMmmrQNs2NxHckaUcFBnAoRPRM/0ojVjBscXp3BzWQLHy/05nO3IqUx57ykW + XIk35FasLq9mmPNP6WfvS198r8aGN6rMeKHUgGf/NIDv56vzbLE2L5cb85bKADbj3yoD2Iwvyi35ssKK + z8ss+KTImPfzDXmvwJB3Co15W/CO1P17eSb8U9ree4J3cqx4MdWKK9Fm7BO9sUY4bePEoWT5qpEaoEbe + jGE0izZcJhpzZYYFq9MlB0jZl2XFmgJHVkl7bsmwoSDGnJg5BsydpMeUQAMCJXd4e5ji7GCGhZkxZibG + mJvItqkFlmaWWJhbYWZhhbGFBYYWZuiZGaFraoiBma4c18XaQgcbc3UcLDXxcTcjwMeecWNdmTDOh/Cw + YGrqati6cxcnz1/iwrWbnL5ylRPnLnL09AV2HjxOU+dyopJymReeSnF1ByvW72bnkQvsU0b9nr75N/ad + vMqmvScZ2HGE7QfOcPziLS7devR0FPCte1y6eZsrt29w8+EdHjx++BTPPeDhc/d48Kwce/Y29x9e5+Gj + Szz78AyPHxzj1sUtHNu1iL1ryyRHpbJr6VMDeE1NICtKfViS60Z7phNNKfY0SlxoTLCjLcVJNSK4p8Cd + leWjWf23ASxlxVjWlI+TcgorS2bRnDJFZQCnTXlqAIe5/e8RwLNsjZnvpgws8yZlZhBZwVPJj5pJRfIC + qjOk7rIlD2eH0CV5d21LErt7EzjQF8vh/hT292WzviOdJbVJVOZFC68PITZmAdGx8yU2LCA5YS7ZybPJ + S5lBfopcV9p/cbKv5GgfylM8KRcNUB4nmibaivpYa9qS7FmU8tQAVkYEV4gGKlJGCIeaURTx1AAuj3KQ + 851VI3/rE7xoTh5LQ+IYamNHUxfnLdvetCR50S56ozPZXTioh3BMqaMsJ5Ymm7E8xYQNuVbSbz05tyiQ + s81+XGj251T9WHYWOrI61YSuOG3alFHA8VosFT67JseCdcKXNygjT//LAFamgN5eLFyzxJJdpVL+aQDv + arBnX7srB7vHsL/Hn909gcIHJrFj2Qy2Lp/PJnnHg8uSGFgm9besmL7/MoCXd7fQ29XKqs5miU919DdV + saGpmk2ttWxqq5btUvpq81hRnUNvVTa9FVnSDlJoT4uiMTFE2kgwrclhLMmMZml2HN1Z0bIdTqdwqEXZ + M2nNmkBbrh8tuaNpyXGlVeJJW7rUfZpi/lr8aQIr5f8YwKvy3dhQMoYd1ePZVTOOrRW+DJR4MSj9ebDY + WTX1/cYSB9WSb9uKrdguuXy3xOw9oi0OFphxpMCCE4WmnCoyUf1w69SfBvARybc75fPBbBOVfliVKtoh + 1YgVGWaszbdisNBWNUvQBtED/aI3+lK1VUvMrM94isEsXXbINXeVmLGnWGKSxKuD8p6OiKY4UWjHaeGy + FyqcuFTtzPV6V+40u3G/zUmVx59tteNxi53walseVllwu8yQa4U6XM7T4EqBNtdLdVRG790qIxVuVxpy + U5kGutxAdfxmpQHXawy5Uiv5uM7gbwP4+H8ZwPsbpC3UWbFZ2sTaCmvpp/asqXVnbZMvg51BbF48mYHO + qaq1gNuL3YXv2lKXaUNzniPtRW6qaaGXVIxRmb8qSA7oqRrPqoapbOxcyPalEWzpDmWwYy7rlR8cNU9m + besENi2Zzo7eeRJPFrJ16QL29iVwbncFd88s4cUbg7x8eyev3N7P63eP8sa9E7xy6yQvXD3GsxcP8+j8 + YR5fOslzF05x99Rhzu7cypHBtRzesE62t6sM4Afn/tsAPsyp3Wv/ngL6qQFs99QADrehJMqW+iRHluZ5 + irbwZqDMm61VPuyq9xXdFsD+5vEcaJvIiWVzubQ+mvt7snjhcAnPHyrl5rZsTqyM4ZA85yF5zkNdCznU + MYvDHUpenMXpJTM5t3QuF6RPXVm1kMsrgrnaF8GdgWSe31vMGycaeftiJ+9d6+WDu2v5+OEgapdbRXiL + qDogjXV3njm7pdHsE1JxUPklXaUtx+qdRZAoUzBq0bBgKAV/GsDKlCkNKY40ZfuIwHAhfIYhU8c8g6+9 + Gj42akx0H0XIBCFHs51InOtE0lxHEmfbEjnZjAV+uszx0WCG51Aph5I8y4CyOEfq06UD5rpQLySpLNaA + vFBNkmYMJXK8GlFCKtNnjJTAZklLsq1K5JUsMCHaT5s5bprM8tRkjq8+08ZqE+D2DD5OQwj00mLOJGum + +JnIvjouVs+oRv2qDGCLpwawu9lIvExHMM5sOPNttEi216PIyZBaZ0MWuUjAE6K83F2NpZ5q9HgNZ4mv + Np3+RtR66JBjN4IoUzVCLdQIsx9KmPMwIdfqxPlqkjJOm6xJ2uRP0aJIUDxFh4Kp+kIKzMidaUXOLBsy + VAawkD5J+gUB2pQFatAx04j+cAkciU4cyPHkUL4n+3Ld6Y+zpHG6OllyH4lOQq7d1Cjz06JjqhALIfg7 + Qm04Em3B2Tgj7kkAeU1Z16LelB+azfm9wRSkA9JkBrKvKgVPmk140mKqwu/SSX8T/NpgzPdV+nxaOIp3 + 00byYpQej0L0ubVAnfNz1LgSpcbzJTp8vtqFJ4cC4OI4uBEIDybA46lwdzxPznrz/TYbPuvW5/N6Y74s + FYKVY8AHaTr8K1mbDyWwfSTCR2UAS3v7JNeA9zM1Vcbvv6R8P1OLDzI1+Chdnf9kjuDz7OF8WTySb+s0 + +XWpIU/Wy/3vsIYDNjw5bMVvR8z5+agZ3x8z5bvjFnx/xpafLzvz6y0vnjzw58n9QH6/5csvl334/qQL + 3+y15fONJny+Vo8f1hvxy4Apv2wQrDfmJ9n/dq0h36wz4cu15ny+3pb/bHDk43WOfDTgwqfb3Pn60Fh+ + uTiBJ3enwPNTefLKZP54bRJ/vDmVP96YzM8vBvL9g9F8f8uZr86a8/F+LT7ap8unJyz56rIbPz47nh9f + mc6Pr8/np7ei+OnNBH58KYnvHybzw4MMPjwXw3PbZrG/yYvF8ZZ0xDtL8vGgOtKS9MnDKZg+koaFOnSG + 6LFYyuUL9Vgd8tQA7p9vzNp5ktTnm7F+njFr5hmwcrYGS6dL+52sJiRVjX2KAVyqx1vdtny7048f9wfw + zf5xfLjdnxttIjxTn5HrqbFqnhqbwoZyNGkUD5R1pbvc+X6FFz+ucObnXkt+6TXml2W6/LRMi2961fl8 + +Ug+XjmST9dr8tVOA76T9/HHbUd41gFesJJ6krb2mgG8pvO3AczLeqCsB/yCnbQfd57c9uKXMx5yX658 + ttKefwhZfy56CA+Ch/JCtAbvFlnx5TIfft4TxBNl6vEXp8M70u7+MxO+nQs/zOS3byfxyxeB/PaJHz+8 + 6s6Xt2z56KS0sd3qfLZdk282a/DjoIa8d03+UEGLJ4Oa/K6Cxp/72jxRTOABfTlmwC9bjPlW8PlOEQqH + 7Pj6jDs/3PCTZ5oDb0YKEuH1TH54NpO3T0dyZcMU1le6UBNhTulCa8pC7CkLd6EiypOCUFfSZtqSMNmC + eEHGXPksxpPq5DESB50pFbGWr0w3tUCD1IUjyQ7XpETiYZUISMUA7kxxZlmmJ6tyx7KqIJDVRRNYUThe + Ja6W5gaxOFMxfMfRnTlBCEuQnDuOpVn+LE4bI/CkK82FrnQHIUIO8jfO9JV6sr7Kl411gWxtnKTClqYp + gunsWhTMvu5YDi1P5tjqXC5vrefqzhZObKhma3c2m5dks215IXv6qzg42Mjp3d2c3dvL6b0rObW/jxP7 + 1nB492r27ljJzq3L2TrYQ3d7OWkxs5nua88kNxPm+YgAGm9HxhRHSua4URfmQdVCG4pm6FI1X5eWMH2W + RhizMsqUXhHUi8OMqA/WozLY4Kn5G2b1twHcMHkU7ZNH0jNNg75ZumxYYMxgsCkDIujXR1jSH2nOKrlG + t/SdtnnqNM4aSpP0jfYZQ1gycxi9c4azXup9T7QRR6S+TyUpI4BNOSeEUDF/z4jAPCmE7JSCLAuOCQ6k + CQGO1VIZwH0RI1gTPUritQ79iXqsTzZkUEj0xnS5hzQT1gnhXpMizyLErifNmPYUeZZEfSpjdYQc6FAa + ZSRtwVzynxWlIgLK4u2oSnaiNsONBskH1enSPqQNFMRakCV1ohjAOeHKVNGyrYwOnqFF0sQRJIwbRnyA + guEkBI4kKUDgL/AbSYog1e+pEZw57qn5mzVeS2UAZ06UvCW5KnemIbmzDEmepEHchJHETlBXjfKNnWZE + 5FRDye36LByvQ8h4bSKCtIlUGcCaZEyTXDZbmb7bkoZQezoiJXaF29EebC7xyoxlYZYsEwGzZK6+yuDt + DTWkN8RA9jVYMkeT1fIcG+KEIEabs3SeNj1ztemPkFgmdbEu1paV4fK3Cwxpn6tHzfRRFE8eRonEw9JZ + 6lTIuRUL9KiQ69YtNKAl3IglUp/LIw3oi9RhQ7gWO2J1OSbv41ymGRey5f0lGUo81FZN7fz/ZQAro393 + haqzI3iECrvDNTgYrfu3Abw75H9G/+5aIJ8vHMHRWH3Op5txLc+SOyU2PCiz5H6JKfdLJU+X6HOvVJ+7 + Ut4tNuBOkaEcN5ZtI67l63AufSSnJQefShvF6WxtzinH6+241erMzXZnbiwSKFNAt9ny7GInXlriwmtL + nHi9045na4SQ5w7lXvEoHlVq8VK98kMmK/655Knx+26nlQpvdVrwepsJLzUa8EKDHi82GPxp/hrKtjIa + 2IRXW8x5t8uG95fY81G3Hf9eZs9XigHcJ3l0peTx5YYqKAbwFyss+Wy5Ff9easX73da8tdiWB8I5zhTr + sEeeZV3UcJYFD6dj7jPUT39G+uwzVE4bSaUyGni6BhVTBdO0KJ8mfWG6tvAmTZX5q1oDeLrEgzmG/w8D + WDDPiIY5ejTN1aFltiad0g565uvQI+1H1YbmK1OAi4idq079bMmd8zVpk/7dlWxFW6I5DbEm1ETqUx78 + 1AAum69BdbCuarkFZe391nCl1Kc9Qo+OcH26wnVV6AzXplvefW+sIauTzOhPsWAwU0RaprWUlmzL+i8D + WHjPrnTFBNcX6LEzRZvtSRJn0rU5KuL5QqXdnwawIxdl+7wIaMUAPpY8isMJwzkuYu9svgnny+05LcJp + f6kl6zJM6YyypibYRvi4JVkLTQkXjjh36ghmz1BnltTFjFlaTJN6myh92k/69+gALdwCdXEJ0MMpUB/n + QCPZNsLNXx+3Mbp4eGnj4amFp4e6Cq6e6jiPHonL6BE4jX4GR89hsj0MT99R+CoG8Bj5jjHazPXTYeE4 + fcImGBA5yZAIBVOMmR+kx/RxmgSOHcoYbzUCxqoxPVBNdMBQsqYPl3ehxTLhMBuDddgnmuLEAl1Oybs8 + PduAUxJ/js8x4LTE+QvCby5L7L4a58DpOBf2x7ixdoEDJZ4jSRTNEWE/hAVOw1jorcu00XqMcRCObzcS + dyc9vD1N5fttmOBry+QxtnK/9swPcCAk0I6o8VYkBZlTMNGEximmwpnsODBf6n+BrXBea56db8PLoc48 + H+rCtTkOnJzvysmUyZytjeVqr4iywWZOLi9jc10SK/JDaIwOInOSPfFjTUn2syTF14rCKa40hPkLh5tC + c8p4qhPHUBzvRl6sMzkJTmQJcuIdyZXcnxvvokKePGOunJOd4Ea67CeLPkqOcSI+2pG4KOWfuHbEiE6I + CrUjNsyJWLm/mIWK+etI2CzZXzCaJPnO1MggkiMmEh8yjuBZ3oz3t2WsjyVjxlrjJaW9oz5m1tqqEcDK + 1M5PRwEro3310NVXRvxqoqWngZauuqr8bwNYgbJ+sGIAW9kZ/48B7G2vWgfY2c0SR1cL1ShgB2dz7J3M + cHe3IcDfg2lT/IiaMVbythdr43w4WDiOi/UTudM8hfvNk3jQOJn7tRO5JwL/TqU/tyv8uFXhy9ViLy7k + uUj+teZIogkH4pX4rczaYMihRFOOSh88Kf3vbK4dJ3OsOJJlzmHJ1Uck/56SeH8x10Y1i8fNHFvuKiaw + 5O9HOYoBbM6Luea8WmDOm8UWvFtmwztV9rxRJ2hz4eVmF7kHa45m6LA/Q5t9WdKHs/XZKPsb0nVZn66M + pDBUzfSh/Hp/TYYJq9IMWZlmxIpMU1bI/rJ04S5JEj+EF3Qm6rI42YBlwglWyT2uybdRYbXc43Lp1wp6 + Fchnq/Is6Mu3YFWOCStzjFiZLdeV7+/NEu4vWkkxgtcVGrBRcseWKlN21luwp8WW/YvsVNjVYsHOBhO2 + Veuzu0aPo42mXOqw4fZSRx4ud+FZKR912XFPYv3tKj1ulWhyPW8EV3NGcCtPUzVTxe1cbc7/ZQCHq3FN + tl8uNOSf1ZZ8UGvFh7WWfFRryr/rJAc0Ck9u1OOLel2+qtPlmzo9vhUd+G2tMd/VWvBznR3fV9vxVbGl + aDsjPssSvVVgxs+VDqI/XflO4uDXEgc/r5FcI7Huk2pnPqxx5b1aV96odeOlOjce17tzp15Zf9SRvRIT + N+Za0pNoQJvw5LYUKzqy3WnN8qIx04f23AA68/zozh/D8kIv1lUqI3+92SzXWC/fubbUhnXyvhUo2wr6 + S62FV1uzstBGOLIgz4FVhR6sLhzDSuHdXUnutES60BrmRssCV6omWVPub0KFjyHVY4xo9jdnUaAFSybY + 0CPoHv/UCF490YatczzYFxognGG8cI7JbPvbAJ7L5oxQdhbFs604nrWFkSwuCqO5KJja7HlUpc+lPGUO + lWlzqc5YQF12iHwWpTKBW0qiaSiMoDYnjIb8SNpK41lUnkR9bhRFCXPICp9MVthkKlMXsrgshQ2LStjb + V8fhgUZ2rylmU08SA4uj2LkyniODaVzYnceNQ6XcOVbOzcNlXNlXwoWdhZzdXsTZbWWc21rNiQHh/KvL + ObCqjKNrqzm5oY6T66s4vq6MUwNlnBks4+S6Io6szmHHYrl+Swz9DVGsb05iY1sWWzoL2NpVyuZOQUcZ + W5ZUsKO3ll2rG9i1tpm9Gzo4rkwBfekIH7z5mF+++wx++YnfFAP41z/4+Vf+xBN+/U1ZB/gXfvjhK774 + 4gM++OAl3v3HbV55fJxnb23j4ZW1vHKrn3furub1S508e6icu9szebAlkee3xPDq9nDe3BbMm4NzeGn1 + BO4vGcO1VldO19qo1pA92WjLyWY7zrY5caHVSfXZPcFzbR48bpb2KO31+UpbXqyQfFFuzeuK+St4u8iC + t3IVA1hiSpEt75Y48I9SR94oc+blCmeuF1hxSJk9IEePNdk6otW06SswZlOZNXtqnTne6s75Di9uyP3c + XTKW88INDqTpsDt+JNsih7IlYih7U0ZxptSE600O3FrkyakaZzZnW7E40pCKmQbkTTYmLciElPEWJAea + PZ0C2nUoSZLPa4SvLw01F75twaZ4E3YlG3Mwy5gzJRYqDnKx1FRgLBDuWWHK3QZlpgBrHrVY87BVuJ3U + xzmJAduydOmJEE43ZwjF0xTz6xly544kP1yHcrlufbIFzcoP7oSLtwn/Whqsz+YEW/akOrM7xYlt8cKb + YqxZr+izYCO6Z+vQPUeHPtEH2xKt2Z/twKliF9UoprNSj6fzFH6krPtrxsUSay5XOEjd2HOyzILDJfIM + pYYcKBMeX67PgXJD9pebsbfCim1KPy8QDSLxuDlOTzTOUDJnDSNzzigy5uiSNs9QNLcZSaIXEwSxUjcx + YabEiu5QpnKO/hMxos//G3Exln9DMYDDQ41UBnBMlLnsy7VE0yXGmJKRbElOuhVFkofKC+yoLHKkosCB + YolfeZIfckQvZiZoS97XJS9Zh6I0PUozRR/mir7NM6JWOKAyGrixwISmfCPaCs3oKDanS9raYollHVUu + NKlMZScKsu3IzbQnO82RlAQHuQc74iLsBS6kJowhOzWQsrzJtFXNYVXbQvrb59BbG0BPubtqas6tbb5s + axnLxtqnBvAauebaIgcGpf3uqHRnf8MYjiwK5PAif/Y1erK/zp2DEqMPVjuxr8KW7UVmqhFwZxeP53p/ + CGeXh7KlZjrdWQE0CgeqSvIjQ+4jOnYMIRIPk5KEPzVVsXnretZvWklKRhSBwhUm+jqTOM+XztzZnOpJ + 5o7EqDN146TNu3Mu34mL6dZcEq12TTT0C5Iz3y4WfVNlzdtVVrwm+fB5xQBW1rPPH8XdAnUelsh50iZe + rTDhXWkXH5Sb8nGZKZ9VSj6qtOKzCgs+lv70ryJj3is25h3Ra2+XmPGu8IJ/FVrwvvTZDwpseC/PjoeJ + ZpwM0WXLrBEsnzKMmvFqZPmpkRE0hMI5I2iN1WO56P0+0QJrs4WzCydZK+++X957X6kbi6RdlyZYkyzc + PWSGCTMmmjIxwAJfbwvcXaywsTTD0twcK3MrrC2sBbZyzB5La3vhbXYYW1tjZPnUCDa1MsXC2gRrayNs + rPRwsNHHx9OGcf7uBAV4MXGCHxFRYdQ21bNtzx5OX7zM2avXOHHpEkfPnOPQybNs23+UxkXLiUrMY15Y + GkU1i+ldv5edRy6x7+QN9p+69Tf2nrzGpn2n2LDzKNsOnuXExdtcvPlI8JDLN+8/NYBv3eTGg7s8eP5Z + Hj7/iEePH/Hs44c8VBnBd3jw6AaPHl3iOcUAfniMe1e3c2x3G3v6i1WjancuDWPzoqcG8PISbzpynGlJ + s6c+0Ya6OEsaJG60pjrSqTKAPVQG8KoKZRTwn1NBV4ylT2UAT2Vl6ey/DeDUyR7EjLX7P1NAKwbwAlfR + BYFepM4cL5pqMnnh0yhPnEtN2jzqMwSps4VPhDDYGMPe7lAOrwjhZH8cx/oz2d6TRZ/ktraqZMoK4snM + iCYtLVLKcHIltxdlzqcoYxZFKZMoTAqgPN2PmkxfajK85fpu1CQ6UhVjJZpUtGmSvWqa6yZpH9VRlpSF + GVOw0JD8YGV2OGUUsDUVogeqYl2pjXOnMcmH1jRluTdf6uN9BGNUpnBjwmhaEt1pT3RjaYb041xv+nLd + 6ZU4tCLdnIECWw41eHOuM0jy3FhON4zlaK03Wwrshb9KfInXoTVGNHO86OlMacvCR9dK/F0vsXcgz5SN + eSZslpi0Tfr7NolFO5QRwBKHd1ZIWWPFvhZHDnd5cnTZWA4ulVjRI9ynZ4K826lsU6aB7glmYGksG3rS + Wb+siDXLKli1rI7epU2s6G5hRVcLfR1NrGmpYW1DBRsbK9neWsOO9moGGgrlXWewsiJN3n06q8ozWVmU + ytKcOOGBobTEL6Q9KZSezCh6c2JYlhUp8SeUrqz5dGRNoS0rUPjhGNpyPWnLUWZGtKNdZQBbsij1vyGc + Ms1aruPA6gJ3Bst82Vk3kd31QWyr8hPu7c1AsSsbJEYOSt8eKBZOWmTDoPD2zblmbJVctUvqa6/U1cF8 + U44VmnBSGQFcIpD8ekLizyHJt9vlvPXKkjGphvSKPlgu+WBZmrFwfKnzfGupdwv6s81EW+ixKllLZQL3 + p2mxTjAgumR7ofFTE1iuv0e+60CWCYfl/GPCYU8oP4otsed8mT2Xqxy5Ue/EnSY70VuSx5skpzcK6q15 + 8KcBfL1Ilwu56lzI1+RKsTbXy/S5KXHzVoWRqlT2b1XIfqUhNwRXq0Wj1xhyvtaQs/VGnBbOf1y0wNEm + Uw43WbJPdMn2GnMGJeb2S/tYVW5Dn3D7dQ0+DLYHsLlrIpsWT2NVUyBtRa7UZFlTKzqvMcee1gJnOko9 + VSbw4nKfvw3gZdVBrGmezuYlIexYFiFlMOvaZtLXMIHl1WPprfaiXxlh3DGJwc6p8tlkdq4I4/TOfO6e + 6eClm+t5+c42Xrm9l9fvHebN+yd5/c4pXrp+kucvH+PxpeO8eOUML1w+w4Mzx7iwZwcnNg9wbNMGzu/e + ybUjh/40gE8LTvxpAK9TGcBFKTOJni1afI4taSF2ZIcp63XbqAawLpX2tqbIiw0lHmwu92SHspRN3Vj2 + Nkr/aB7H8e6ZXOwP58GeTF48UswLh0q4vT2Xs2sSOd4by9GeCA52LmBf23T2t0/lcMc0jndN41T3LM70 + zOHC8rmcXzaPiyuCub4mSnhuBq8equStM83840In717p4cPbq1A7U+/DkQoXduVZsT3blO05yppGBlIa + sqfQnANCqnZLEl+bbkR7xChKZw6lcOYzVEfKfrYHPRUTRYj4SQKzZI6/Or62yvq+akz1HEXUVAtSF7iQ + FepKXqS7wIWMYBviphsROVGbYP9hBPsNIXW2HhVxdjRlurAo35XGDEsq4w0oDNMkefoQoiWpxgqUdYdb + EqzoSlVMEKnISEsyJhsQ5atLiK8OwQF6zByryaTRw5noPYLZQUbEyvcHT7MlyFMHd8uhOJo8g5PJCFxM + R+BqNhJ32fY0Goa/8RBmWYwizlqLHHshrfa6NDqNosNdjc7RanR4qdHu8wzNcv26MfrkOWsQbTaUuQZq + zDZRY67NUOY5DiPMW4MoPy0Sx2uTMUmHvCnaFE3VEVKsR9E0I/Kmm5M93YLMqVakSbJPH2dMtmIAj9On + dJwOzVI3S+dbsjpcyHC8HevibVgRY0HTHG1yfYcSpfyzy06NJDd5D77atE2zYuVcO7aH2XFECPTpWGNu + ZxjxspDg96tMRHSb8HO1EX+IMKfeBBQzWLaf1Aukcz5pNuUPlfFrwi/SYX+UTvy1EKSPskfwevxw7i/Q + 4NosTc5OG86xKWqcC1PjYaE2n/Q68ds+XzjvD9fGwr1AeHaSqnxywYsfd4vAX2nMV3L9byot+EII6yeZ + BnyYqsdHaYZ8IIHpE0ken+QZ83GuHM/VeYo8XT7KkTJTkw8VAzhrFJ9LEPqqRJPv63T5pVueZa05T7ZY + 8sduK/7Yb8kvB0z56ZAx3x004puDJnx/zIqfLzjyx3VPntweK/Dn9+tj+e2iDz8qozf32fP1ZjO+3mDA + jwPG/Dpoyi+CnweN+XmTCT9tMePHndb8sNuRH/eP5oeDvnJtX749FMD3x8fx04WJPLkzHZ6bCa/OgLem + wTtT4D0p35vOH28G8fOLY/j5kQc/XrXji+OGfHJAl38fM+Gzs1Ivcl/f3PXn24dT+PrhHL64O4+Pr8zn + /bML+OepYJ7fKZ1/ZSBbq9zoTLSjK3k0XeneVIRJu5k8QvrfCBoXatIZosOShVqsCjNgvYiQwUgL+uYa + sXqWEf1zTFkjWDVb2tMMTRZPHcJieX9989Q4lDqC+w1mvL/GXZ5vHD8fDpJ6G8+/tvhwrcmY7clDWLVQ + jVVz1RgMVuNw/FBuFxnwz1Y7vl/qzi9LHfitx4Lflxrze48+P/Xo8OXSUfynZzjvL32Gj9eo8+V2I344 + Zgm3nOGhA388J+/rRTN4xRheM+CPV3UFevCytMkXrXjy2IknDz345Yon3x114/ONTvyr04Lns9S5E6rG + LbnvRxEjeEuS52fdbny/cyy/XpC29twEnrwRBB9K/X8p7+Obqfz+1Xh+/cyP3z4aw/cvO/PlTSs+OaXP + h3s0+Hy7Bt9sUuenQQ1+3aDO7wMaKtP3ySYN/tisqcKTTVqwSVugAxt1+X2THj9vMeTbLQZ8us2IT/eK + UDjmyDcXRvP748lPRyG/FiVlCt/cS+KNE8FcWj+RdRVOlIuYzZ0hmGVG/jxbSsJcKQxxI32mHQmTrIif + bCXCU0RgnLJemRDCeDeKou3IDDMiQURpyoJR5ERoURZnKORQRHSSHUvSXFmR7c2afH9JIkGsK59KX8kk + ITb+Qhh9hKiMFaIynt7sySzLDGJxioinZC+6kiSBprixJNWJngwHluU4srrQVf7ei43VvmypC2RL7TjB + eLY2TGJb41T2dgQLaYvhZF8alzeXcXdfC7f3t3Fhez0H+gvZtjyLbb357FlbzrFtzVw/sZrbpwa4cWoj + 105t4trpbVw9s53zx7Zy8uAgh3auYWVXDRnRs1QjsaZ5mBLmb0vKFBeyZzhTNMeF2nAPmqJcqAsxpy7Y + gNZQPbqljfeGG7E8zJAuEdYNC3Spls9qIywFT9cArpmhR+NUTdqnaNAzXVvavj7r5PiGYAs2/GUAR5ix + Wuq2e6E27XNH0iziv3XmEDpnD2XpnOGqEcAbpM53RepxONaIsylWnBcyeCnTikvZ1pxIFUKTYsSRVCPV + 1JJHsizYn27KFiHHKgM4XBkFrM66OF3WJekzIOJvY6qZQIi2kOl1KWasSTVlRZopyzLMWZxlRWumJfXy + WWWCMRXxppL7rGTblgrp+5VJjtSmS07M8RTB7yW51p2qdCdKpB0UiADKi7YgN9KM3HATESuGJE5TJ27i + cOKCniF23HDix0tOUxAwnFhfgeSwxDEjSB2rTrq/BlnjtMmWXJUlyAx6mrMyp+iRNcOQrJlyvUnK+r6a + xE/RIX6aAfEzTYmeZkLoJEPVKODQCbqET/jLANaSvzGmeJ4l1QttaI5wokPe45IoezrDrFgabsXqKFv6 + JG8vX6Av0JH6MmCllEtmDad75kj6Qw3YGCMkUbBO3vNaed+D8owbYy0lxlmyIsSYJfN0WTRXm6ZZGlTN + HEX59FGUSVk1V5MquVaNtI3mUOEn4XJuhBDpCD36I3XZGKnN7ng91ajfs2kmKhxJ0GdfjJZqdO/OcE32 + RumosC9aV6DHAcVciNGTY9rsCddid6iGygRWsFf2D0YpI4D12Cfbe+SzPSEa7F6ozo75wwUjOCp/fyHd + gmtCwO8Ij7pXbsXdMjPulhvLvoEQbQNulSow5LZi/laYcafclOslQqRztDiVqcGJDHVOZGlyMl+Py7U2 + 3Ghx4maHq8CFW8oojEX2KgP4BcErXfa80m7N4zpD7haP4kGZBs9VKQawPm+1mfN2hwX/ULBI0G7B6+0m + f4/+fb5eV2CgMoEV8/f5OimFyL/WasG/uu35ZLkLny534rNeR8ntkkNX2fBFr2IAS0z8E58tt+DLFTZ8 + vsKWf/c68K9lTjzfZsWVSiMO52qxNVGD9bHa0o/VaZn9jPTZYVTPGEH19JGqEd1V0zQpm6JJiTLqd9LT + kb+FEzQomKBOyVRtqmYZUD/PlLo/oWzXzpE4MEubupmaNM7UoH22tqqNLJV2oMyO0SNl13wRsXM0qZeY + Wr9A2k6kIa3xZjTHyXWiTaiRdlIWLDxtrroKlQt1qJe21xxlQqtw3ZZIZTSwAW1hyrTiOrSHSPwI1aIr + Qr4j2pAVCab0JVsymOXAQKYt69Mt2Sh9ekuKgcoA3p4q7SrLiIO5puzLNJIcq6Oqix0i4A4J5z4rbeNi + jb0K5ypsRKiZcSrHgGOpGhxJGsmxFC1OZougKrDmYKEtW3Os6FXuP8SS0jkW5MwyJnmmPguk308bp8aU + oGFMlDgwcdJIgqTuAsZr4u03CtcxGjgJb3QYq43dWF2BHnY+ejh46+LgromTqzpOzqNwcRKOLHBwGo69 + 6zD5bBh2bk/h5DkMTz91/P11mCrXmSPXWeivR4hw2MgJBsRMMZRYYULCdDPCx+syz3cUk0cPIdBFjfGu + aswQLh0p95g5aYjqfSyZp0wHKf1qviZH52lzYpYOZ2bqcUZi0EmlnKfD+fm6XAoz5lK0NScj7dkVYs/K + aZYUOA0jwUauZzeEEJeRRAWYscDfgiB3ZdYfLTydDBnjKftj7Zns58A0X0dm+ToxP8CZBQH2hASYExNk + JrxK4u4MEdbB9uyUa58WwXZ9njX3Z1nw7Cwr7s205KJ837FZ9hyKGMOhzBmcqI7lRHMauypiWJM5l6UJ + U6R9+FM61ZG88dbSdh0omexE/dzRdMaMZ2nKFNrjA2iM8aIqypVyQVmcC4WxyvRvTuRHO5Eb60punCs5 + gmzhAlkJ7mQmepCR4k6G5PDUZE9ShA8mSy5PincnPtqFuEhn4iPciAtxJUr0TuQ8V+KCvUgMF10WEUhS + ZBAJ4RMIX+DLlIlOjB9nx7jx9vgF2GDvpIe5jSZG5qPQNx7F03WAtdE10EFHTxsdfS209TTR0tVAW//p + COG/DGBjMz2MzJTpoPWwsjXGzslCNe2zh48DXn7O0t5c8PZ1xsPbXnXc1d1aNaJnyiRfFsyeSMr8IOlb + gQymBnC0ZAJXGiZytzGIB43jeCAc5GF1IA/KAwR+Ei/HcqvMh6tFnpzPdeRUhhWHEo3ZE6vPLom/uyTO + 7o4xZF+cCYckxx7PUKZrtuCQ5NiD6WYqE/hEpjnns624mG3D1SwbbmZZi1Yy516mKQ9FjzyS/vl8tsTC + PCNeLzbjtVJLXqyw5AWJuc/V2Mn3W3EqW1/evQ4Hs3XZnaPHhjQN+lM0WZOiTX+6AQN55qzNMVON+F2e + ZqT6583yDBOVodsj8WBRogGLJOd0CLokD/WkmtAr+X91ro0KK+Sel8r9qiAcYansr8yzFp5nI6UFvbly + vtzr8gwDuZ6mcDl1lqWLBsjRZW2hfH+ZMVuqzdihTLfWYs3uVht2NikGsCk7ao3YW2vAEdF+5yQmX1dM + 3x5nHve48Hy3M8+1S36qMZS8pM3NAnWu54/iTqEO90v1uSWx+0LSUM7GqHEhdij3JCe9VW7Gh3W2fCz4 + pM6af9eZ80WjBV83mvFlowFf1unzleCbWn3RoQZ8XS2oFI1Zo4z2teH7Mgu+Ef33da4R3xeKTi235hfF + HJbPvpU6/0au+0WVLf+ptOXDSmVtZgfeqHHiJcFztS7crXPhbLUD+0tt2JQjdZNkSGeCER2p1nRkutCc + 7iGcejTNmT60ZXmzKGs03Xkeqn8Mb1LWtaxxYU25LauLrVjzJ5Ttv7CiwIJl8j57lGvn2bG6QJkG2ku4 + t3DpBDeaw51oCnahYbYz5eMtKRlrRJmXPlU+JjQHyD0EWbN4oj1LJtjTJfGgR/aXj7NmwzQXts8bI3xh + vLTdKaoRwBtjZrIhYbbkjGC2FkSztTiWDSXR9JRE0lIYQm3WXKrS5qgM4IpU2U6frxoJ3FSgmL1xtBRF + UZMbQmVGsGrqZ2UK6NaSeKoyQsmJnk5aSBDpIRMojJlFfVYEy2oy2NJTyqEN9exdW8LgknhWNM1hZeMM + Brrmc2hdPBd2Z3Nlfz6X9+ZzfmceZ7fncnF3MZd2l3NhZyUnN5VzuL+Mw2vKOLaumpMD9RxfW83RNaIF + 1pZxan0lp9aVc2RVPts6ktnQGMuauijW1MYJklldm0pfXSb99TlsaMpnU0cJO5dXsbuvjr3rmti7oZ2T + u/p4fO0k/3n7FX7/9kv49Vf++O13fvuNv/HrL3/wy8+/8vNP3/Pj91/wxafv8uE7z/LuK1d49d4Bnr88 + yPMXVvLW9ZW8d30p/zjfzMuHC3m8O5kXdsTw+s4I3tkZyvvbFvDuxlm8vjqIR0u8udrsxPFKC45WmnO0 + 3oZjjbacanbgfKMD1xqcuNPgyKMGFx6rpn6244VyG16SGPFyqRVvSOz4R4kl7xRb8HaBKe8UWvKe9OH3 + iu3lmCNvlTjxarkz90vsUdauPVhkwo4CYwYLTNhYqoz+tWNfgzMnF3lwSe7l9lJf7vf4crnOkUNZeuyI + G8bm8CEMhKixM2k4p4Uz3mhz4XanN2frpX3lW9ETY0DJNA0yx2mR6Cf83deABF9D4rxl20udTF8N6kWb + Lg+zVBnAGyR+bhHdsjtVj+OFppwpNeNCucTMMhOBMVerzCU+W/Ow2YaHTVYC2W5z4nK9LfuLTFmfJjot + VpOG0JFUhmpSGqFDaawBFUkm1Ir+aUo2V/3wblGYLr1RoplSHdmT5crOdEc2JVixXvRMX5QZy0ON6RD+ + 1ik5f0WEERuTbdgjWvVYiQunS504XWzHmUIrFc5KP71QZsdFiQ9nBccVA1h49EHh1Ackbh0oUyB5ocyU + XfLZ1lJr1QjgFdnmtKeYUCx8PWv+KNKF86XM1iF5njFJC82JD7YkVrhVlGjQyFBTosIUmBAhOktB5F+I + eIoo0ZUKIlUQfRRsqMJfBnCcPG9clDGpouEzRVPmSv4pyVXWA7anNM+ewhxr8iTmZycbk5GgS0acDtkJ + 2uSn6FGaZUBlnuhbaRv1hWbUFYouzjemXvJUs7StNtlfVGxJR7kdbeWONJc6U1PkRHGOcl0HCrKcyEpx + kO+2IynajgTRY6nKj8uET5TnBdJeNY3VbfNYv2g2K2r8WVrmxpoqTzY1+bC1aSyDNaPZoIwAlmv2Fwm/ + letvq/ZgX7Mfh7uCONDux+4GD/bXKesCu3C4xpGjVcKTqmw4Lm34+vIJ3B9YyO31ERxbPIfByiB6Mr1o + ShlNWYoPuSmBpMdPoyw/ke7OBrZtX8fAlhUUFqcwb/YEwmaPozB+OstLFnKkM4bLPSGcbQzkYrUXl0rc + uJxrzyV5l1cT9Xg224zXS6wkN1nyRoU5L1cY8VyJHg+LtLhbpMntIg3ulejwSNrF43Ij6YPKSGBj3lPW + Aq624KMaa4EVH8j2e5VmvCPX+Ee59GHRbe9IrvhXqT3vSxv8sMyVd0vduJVqxYFw0fpzRrJk6jDqpgyn + aPJICkSHlC7Uoi1eV8UD+nMtGSiwYbDIlg1FdqwvUQxgF7rynalOsycr0oqY+dbMF445LciGAOUHeh42 + ONpaYm8jPM3GTrYdcLJ3xsXBDUdHV2xl28rBERsnZ2ycpXS0w8beGlsHC+zsTXFyNMPXx5lJE3yZNWMC + 8xfMJCktkZaONnYe2MuZKxc5dfkix86f4/CpMxw6cZYtew5T376ciPhc5oalU1K3lN4NB9l++Cp7jt9k + 74nbglsq7Dp+nY37TrNh13G2HTrHiYt3uHj94VPcuM9FlQF8ixv37/Pg+ed49sXHPFbwwmOVEfzw8b2n + BvDDizz74BTP3TvMzQuDHNnRzK6+Anb1JrNjaRgbF82QfDGOpSXetOc40yz1VZdoQ228FXXxNrSkOtCR + 7UpP4WhWlHuzssKbVZLjlamg+yp8WV0xXspprCyZQ3PKVOnzgaRM9iDSx44wdyvm2xsxx1qPWVZ6zBYe + u9DVlpjA0aTPCiJnwSTyQydTETeLhuRZtKfOZlGytMXM2Wyrms/BlmmcWDyVM70hnFiZxP7eTDZ357O6 + o4DOlnxqqnIoLUmnuCCO4twwSrPnUZoxg9LU8ZSl+lOX7U9Trh9NOT40ZgpfUZZ/i7WkXhnolmirQn2c + FZUSR4qDDcidq0f2fClDjCmOkOOxjtSKRqhP8KBJMYBTfWlJ9qUhQTF/fWiIHy1wpyXBldYkZek4d+GZ + Ui/5nqzKtmOVcODBInsONvpwpmM8RxtE29R4safCTdqrnfBRiSvJhrRJ32pXDEnhtn2Sr9YWWLIu35x1 + omcHBJuLzIWzmLNd8t52yYE7pM9sF+68R/LmwXZnjnd7caLXlyOSxw50+7GvO4DdPUHs6FHMu3ms6wpj + bVcCa7uzWdNTwqqlVazsaWB1dxOruppYo4z+baxgfW0JW+pK2N1czt62cjZWZ7GmNIFVwnVWFyewpiSF + /mLhFgWJLEkPpyMxWHh2CMuzI1mVF8WKnDCWZi1gSdZMujKD6MjypUPqY1GOO4uynVmU4cCidBva06xZ + JDxShTQrFVQGsOh7xQDeWO7LjroJ7Kobz9ZKX8nZXqwvcpPc4sSGAgeBPeslB/cLV1+fbsxAuiGbMw3Y + LrF8T64hR5TRv6LxzwqHPiM4XmbOftEcynIy/Sn6KvNX+UFjj1KmGolGMGVltmiBrD9/TCrnLE/SYWWy + Bn2CdaIFNmRosy3fSMUjdkiu2J1rxj45/1CWMgrYkqO51pyQezpTaM154cxXhFvflvej5PR7DZY8EDys + teK+xL47EhNvlOiL1lLnXJ4GFwu1uSxx9Krk1GuSW69JeUU+v15uyA2JsdcqjbhcZcSlaiPO1Rhxus6I + U/Um0p7k+wX7G8zZWSs5v1LqQ/JzX7GpvDPRPRX2rK31FP43RvjfeDZ3TWF10zjJZ27UZEofFzRIHmvJ + d6JdjnWWeqqmg1bWAF4i76C3ZhzrWmawtVsxgCVWdM6jr2my5DE/uuXcpRKnV0n+6q8fy5oGP1Y3+LN1 + 6RxObEvj9pkmXr69htfubebVu7ukPKAygN+8d5pXbp7mxasSky6d5PHFUyo8OHOUy/t3cWbHZk7v2MTF + vTu4cmg/d04f4/65Ezy8cIL75w9zYmc/q9qLyU+YQtQsB+Lm2pIaYkN2qBVFyv+rE+zoznaTduTBuiJX + Bktc2Vrhzg7pd7vqfCSX+nFE6uHc6mDu70pXGcAvHinl3s4CLm9I4/SqRI51R7CvfS67mqZKX5jEvtZJ + HFo0iWNdSjyaoRoNfHrJLNWI4MsrQrm5No5nt+fw4oEyXj1ew1tnWvjXlcWoHSh1ZYcIz82ZZmwS0TqY + ZsiaeGlU8SMZVEYqKIt6S2PZWmgjjdKQ2gUjqA7RpDHWjPYsd3kBU1lUMpHcKCdCgrQJtFfD30aNGaNH + EjfDnOxwV4piPKlK9qY6dTQl8Q5kLDQkQRJk1KShRIwfQtocXSpirWnKcGSRMu+3BJ2aJCNKo7VJmzWU + hIlqErDVKF2gyeJUGwm+9tIhHEQgO1EjJC1vpimJkw2JmqDHPD91ZvuNJHiyHonBDuRKEEwJ9WDuOBPG + 2DyDg94QHPSH4GoyHDeTEXgYD2e04RACTIYw02IEUZYjSbMeRYGNOlWOw2garUbzGDWaxqpRN3aYatrl + YiHQSQ4jmWOgxkQtNSbpqzHFYggz7IcQ7K1BhL8W8eO1SJ+sQ95UHYqm6QkR16d4ujF508zJmmpO6gRz + kscZkxJgSIa/AXmBBhSP06NmkgFN04xomyWYJwRPqZvp6mQHDCPaVY15VmoE26kR6zaM7LHaNE21pHeO + LVtC7Tik/HMs1phrEjRelEDwXokxXwrJ+b7MgN+qTHhSq8BUBcUQftIg+81m/N5kyi/SWX+qNuYbOfez + PG3+mTqcFyOHc3XaM5yaMJyD44awd/zT9Z/u5mnx/hIHftzhBafHwOXRPLkl5YNxcC9A9r349ZADPw1Y + 8e0icxHzlnwtwe6zbGM+STPgo3QDPsg05l9Zhryfoy/QUxm/nxTp8+9iAz4p0OOjLC0+zNDgP1nqfJar + yVdC2r6r0+enTiN+W2XGr+vlnreY8vMOE77facC3u/X4ZpcuX0n53QH57LQDXPLgybUxAl/+uDKWPy74 + 8OtxN37e78AP2634QTF7N5rw2ya5nuDnrSb8skPq44Atfxxz4Y/TXjw5Hyh/N5HfL07ij0vT+OPGLP64 + OweenQsvzYa3ZsE/Z8IH0+EjwYczePLOBH5+1ZdfX/Dh97tufH/Bhv8clec6asS/T1jwySlb/nPWhc8u + juHf5wL457EAXtnjx7Nb/bi5bixnlnqyq96evgJbOpKcWJzmy+LMsVSFW5GnjHqb+QyNIlo6Fmqo1rZc + HyNBP9mWrTFW9M2RJC3tbcU0Q1bOMmHFTEO6pz01gHtmqbEhcqgIKF1eXurIlzsD+O3YJH47PolvD47n + n4MeXG3QZ2eKGmtEWPYvUGNLpBonUp5RjVR7r8WK77qd+HWJHb8vsYAlJvzRbcCP3Tp8vkSdj7qG8W7X + EN5fOYovthjx41FbuOUmbcKR3x9Y88djS568LH/3qtTxq8b8/or8vWL+Pu/AH49c+fmmO9+eduOzXU78 + c6UVL1XrciNuKJfnq3F1thr3wobxqrSXT7rs+XqbOz+e8Zbr+vPby37yDoLg06nwxUT++DyA3z/z4/eP + x/L9K858dduKT88a8u+DuvLMmny7WZOfBjX5ZYM6vw6o89tGdZ5s0+TJdm2e7NCG7TqwTVcg5WZdft+s + x09bpY1t0efTbYb8Z5cZn0ob+fKkK789CIQX5L2/FMKTF+L46lYsrx6Zx/n+QCEmIu7m65MpsShjimKo + WVCw0JGiYHcyJTEkTrIhYYoN6bMdKYv1pi7NnwohcspC8RmhRiJGNUkL1iI/Sl+Oi/ATMtImQq473Y2V + OWNYUxAgZCeIwaoZQn4m0SREsCLETsjeaJZlT5T2M52l6eNojnKjPsyethgn1XqRS5LtWSbxc0WuI2sK + 3dhQ5sWm6rFsqQkQceYr8JPt8Wyrn8Tu1jns7wzhzJpU7u6p4dHhVm4faObynnpObitjZ18WW4X0bhfC + fnRboyTVNZIIN3HvwlZunROc38Xdy/u5fnYP5w9v4cSudaxeVE125Czm+Nozf6wN8RNdyJvjRdF8yQ8L + 3KgKcxPh5MGieCdaIiXPhBs8NYDDjFgeakhXiIHKAK6Rsi7SkgblV1ULLWiYY0LrTD06Z+qybJYBq+Ya + s3ahGRskR6wPe2oArxWB3ifXWSrirHPeCBbNeUbKYSxbOJJVgv4FoxgMVmdXhC5HYg1Vvy6+km3L1Rxb + LitTPksOPJSoz/4kfQ4JsTuUZc7edBO2/m0AyzWiNRmI12Mw2YhNivmbZsFGEYoDqfL98g7XCJlUfn25 + LMuGJSJe24XgNGZaUZ1iTnWyEIQUe2pSHKlJdaI2zZm6LFcacz2py3WnJtuD6gxXylOdBU4UxdtSEGNN + rjxXZrARCdM0iBUBGjdxBLETlVKdmPGjiPR7hnDvoUR6DiHOezhpkscy/bXJkZyTM16H7CBdsibokjlJ + MEXa7Awj0mYYEj9JR9qoPsmzjEmbb0XSXEtiFWNnsjLNqzLi738M4Dgpc2abSZ62oU7aYWuEM53RIsxi + HOmJsmdltAhfyf+DcTb0hxtJjNGTeGTEqvmaEqOGsHT6MNbJsc3RZmyNtWBXgjW7ROhtjbNmc4wF6yJM + 6V2gT/c8LToUSBtoWahD1YxRlM8YSfVcTWrma6vaxqJQY7qUEcDSdnrD9eTd6LElWpc98l6OCrE+lWTA + SXmPh2V/r7wvxQDeESYIUUb4qrNTthXsVozdcG32Ruo8LcO02R+pq8IBueZB6ZsK9qs+02K3cKNdwRps + nzecbYIj0fqqqcOvi5i6U27H3QprKc0FJtxWfk0puFkmJLrUSLZNuFVpzq0KMyHaxpzL1+Wk5MHjWRoc + y9LkmOyfr7bkapMDN1TTECoGsCN3Fzn8aQA78nKnDS+3mfN8gxHP1ejyuEqb56u1ealej9eajHi91YzX + Wkx5o92c1+W811qMeaXZ8G8D+HG9Ps/V6fFcrYFAjtUZqgzg93uUJQDc+LzXReDIV73KVPw2fLlM8voy + YxWUJRM+W2oun9nw1SoHvuhz5ZNVbry+2IEHLbZcqDBVrXu7J9uMAan/roUjqJ85jLqZI6idqU7tDE3Z + 16FiihYlE9QpGD9SoE5hkGIAa1A0SYvK6frUzzX7L5hSO1ufmhny2ZSRcg0NWmZrs3iePstCDOkNNaEn + 2FC1VELrPGkbczUkVuhSJ/GkNkIQZURNhBHV4YaUyfGi2eoUz9GgQtpQncSapihjWuSc5khDWqQttYTq + 0RKirMGvTVuotmpa6CXR8j0JpqyWvjsgAnFDph1rpY+vTTRiIOHp9M870vTZl23K0SIrVbktWZctiZps + T5H2lGXEcTl+ptyasxW2nFGMpiJTTmbrc1yE3dFkdY4ka3E4zUhijfytxI7+JGs6JKbVzhf+K7wycaIy + Dbs68wKGMj1gCJMChxIUOIxx44bj5/8MPr4jcPcZgYu3Oo4+2tj76GDjrYullw4WnlpYuQoc1LG1H4md + 3UgcbIcLnsHGZgh2TkOxd3tGZQQrpfPo4XgH6DAhyIg5/kYEC8IDDYXLG0jMMSBxmsSKWeZkzDQnLlCX + UDl/trMa02wFog0WuKgR76dG7gQ1GmaNoGv2CNbMGclWeTcH50p7VwzgGXqcnS79dIYuZ+V9XpD+fkne + x8UIC46HWLF5hild/rrk2A0h3lKNKDuJbR5aJE6wIWayE7N8rRnrZIC3izH+npZMHOPAND9nZvi5ij5w + Zr6/K3P97Jnna0ZYkCnJ08zk3ZuzOMSWjaG2HAsWgSyx7t50Ux5Mlb46VfrkTGtOzXVk3zwXtod4sTNh + IltSprE2fhK9EYF0h4yVuORFw3QX6qY4Sukq/F3yWLA33VEBLI0dR1ekL4siRtMaKp9FetAY4051lCul + EisLohzJi3lqAGfHu5KV4EZ2oif5aWMozPGjKC+Iwvwg8gsmkJsvyB1PZrovyfGjSYodTUKEJ3FhglAv + 4sPHkBjhR1LkOJKigkiInkiU3OOcWZ5Mn+7GlGkujJ/ggIOLPha2GhhbjELfZOT/MYB1DRQTWCm1VMf1 + jbUxNNXFxFxfZQAbmmqrpoFWDGBbR3OcPazx9HFg7HgPJszwZ9KMAMZN9MbHz4Uxvi5MnODDgjmT5f7m + Uhg9i6UpM9iSM5Gj5RO5XD+B2/X+3KsZy70KXx6UjeFBqS8Py3y5J9u3Sr24UujOuRwHTqRbcjBBeK/E + 4W0R0seidNkebcBO6Yt74405mGLBQcm9BxSkmXEow4xjGeacFm15NstaYrI1V+UaN9PNuJlmzC3pn7dT + dbmbqs3DDB0e5+nzuMCEZ0tMeVhqzv0yS25Lv7xYaMqxbD0O5UguEWxIHSX9fhSrkjVYna6vMn9XS3xT + RpgtlusuTjMRvvYUi+Ve2hMNBQZ0StmVZEx3qjLa11L4nI0KS9PNVUaxAuWzbrnnlfl2wvMcWSV6YHmu + Bcuz5HPRUJ1JGixKHMVi+f6nJrDkuSJjBiTObq2zUJnA25uspTRXGcC76kzYV2fE4XozTjdZcbnVhrtd + Tqr1419e6sHrS915rsGCB8pUbyXa3FH+aV6sp+L+ykjgSynDuJQ4ROrrGV4Srfau5KJP6u34j2iV/9Tb + 8Ll833cS579tsuSrRiO+qjPga8E3kku+rZFSMYDL9fmhSnRblQU/lpryfaER3xWIVpD7/qnUjB+rzPm+ + 0oxvq8z4Wra/rLTgPxUWfFhuxbsVNrxRbS+6wJ5nayTv1bpIPnTgQInwg2wLVicZ0S112ilcqz3NnoZk + J2qSXYVPudOY4kZTqgtdua6qKSIH6r1ZW+XMqlKp9yKpf4m//41VxdYsLzCnO1vencTrFXm2wqddWSkc + bGmai3Abe+EblqLNrSibKLx+rCF5HroUu+tS6WVMs79iANvRNdGBxUEOdAXZ0j3elmWBNqwKsmfDNHe2 + LfBnW/gkNkVOYzB2JuviZ0l7WshATjiDhVGsK4liaUkkbYWhNOTMpzZDGQU8XzX6969poFsKo+ksT6C9 + JEa4YTAV6cEoaxU25EcLX4wiN3oa8XP9SZznT3pwENlhUylNnEdrYQz9LTnsX1utMoD726NoLgygJsON + lgIv+luncWBtNCe2JHNqezqntmVyamsWV/aXcuVABed3lXFycwlH1pdydH0FJwZqODWoGMC1HO2r5tDq + co73V3FyXQ2HVxazrSOdgcYE1tXHs6Y2npXl8fQUx7JU+edtpXzWlM+2xeXs7q1iz5pauacG9q5v5tze + fl67c55v/vUP/vjmG/jtCU9+VwBP/hA8gT/k2G8//cwv33/DD198zOcfvs6Hb9zhvcdnef36Dl4WTfLK + qR7+eamHjy518q8zNbx1OIvXd8fw6s5g3t45n/e3zeWTLXN5f3Aab64K5FGXJ5cb7TmijMyR/nS4zoZj + DXacbLDnfL0D12rtuVNtxyNpf4+r7HhB8vaLkr9fKrXklRIL3hC8VWzBO8XmvFNkrpq56r3ipwbwu9KX + 3y5x5LUyJ54rc+CqtLVTElcOFpmxW/5+h3DEndW27Gtw5MQidy52e6kM4Hs9Y7ja6MSRfIlzCc9IuxnC + umA1tic+w+lyM260Cyds9+R0rSPb86TdRinLjz1DesBIEseqE+ejSaKvHmmSr3PHG1M6yYhW4U8rI61Z + G6P8OFbiWaRw1yRtjghPO11ixvlyC85JHZwrM+ZKtQV3GxXz15aH0tcfNAiUpUikXo5XWLGn1Ir1Ev+W + JOvRnCDcSvhPVbIJlRLHakUDNUlMbos1pTPGmNUJksMzHNmV7crWdHvWJ1iwJl5iW5Spaoanlvm6tC3Q + oUf0wfoUG3bkOHKw2JnjUncni4UjldpytsxeVZ4rs1PxptOCY2XmHBEufVBi1sFSvf9tAJc+NYA3FFmz + Ks+SLtFcdZIr8kN1SBd+kThbtM48Y+IWWBATbEWU8IzwEAvCQ82ICDMlUhAeZvIUwisVhIU/RWiIkcCQ + EOGa/43oKAuVARwbpUwFbURSvDlpSZZkplmTnyXaLcdOhXzRmHmSj7JTTMlMMCQtVoeMuKdTQZcIP6zI + E/1fZEF9sdyzxCtlOujqXEMa5D03S5xqlWNtUhctpfY0lzpRJ3VVkedAWZ4jJblO5EsdZ6bYkiZ6MUX0 + V1q8HdlJTlTkjmFR1QT62mYz0DGLVbUBLFdGAFd6MljnzZbGMQxUj2Z9pYfkIGfWSv0PlLmwtcaTfa0B + HOwKknIsu+rd2V/vJv3EheN1Tpytd+Jymzu3usfyoG8izw/O4fnNoVzvm8vhRRNYX+JBV7ozzale1GVM + pCp1Hh1V2WxY2cnunevYumMVrW0lZKaGU5geJvEtmrW1kexpWsjhpqmcavDnYr0Pl+U+rxa7cDlLdJHw + 44f55rxU8rQPvlxmwgsl+jwq0uGu5LI7xVrcLNLkluS229I2bpfpCbcQjSMa7JVKE96skb7aYM27jYIG + G96W7beUdYRrBFX2/KPaiXcr3flntRcf1Pjyj1p/rhe5sk/a9RrRmF3zNFTrbteLDq+WtlItuqI9UY/e + DCPJy9Leyx3YVuXE5kqpw3LFAHZiSZELDdlOFMTbkxLmQOgsW2ZOtmWc8Fcf4VKuDpa4OtpJ6Yi7kwve + Hp54eXjh4eaJk7Or8DdX3L198PDxxsnVBXsnB+ydbXF0tsZZ4DfWnWlTxxEeOY/ktFiKyvLp7l3CrkN7 + OH35HCcunObImVMcPnVKZQBv3nWIurZlhMbmMCcsg5K6XpZvOMLWgzfYefQWO4/dFijlTXYcu8bgvtOs + 33VCZQAfv3ibC9cfPMWNe4JbXLl9i5sPHvDw+ed47qUXeOGlF3n8wvM8eu4hD56993QK6HvneXD3OPeu + 7+H8sV4ObK5lV18Ou1Yks31pGIOLZtJXN15yxRg68j1pz5VcLrGjPsWO+iRp8+mOdCp5udiL3vIxrKjw + YWWlN6srFPhJvg/62wBuEb5eFBxI8iRPwr3tCFUMYAdj5troM9talzl2omfcbIgN9CJz1gTyFkymMGQS + VTHTaE2YQXeyXCd5MuvTJ7O7cCInqn051+zHua6ZnOqJ4EhvmuQwyWWrq1i/so5lS+poay6nviKNioJw + SrNmU5Yxmcr0QMnh/rQVBNBR5E97vjetWR40pDhQE29JvaA50ZomiZOKGVwZaUqhaNisOVpkzhXds1Bf + tRZwVZwjdYnuNCQqBrAXLcljaEkaQ2OijxzzojHek4Z4yekJwlmSnVmc7sryHHdWSX2tzHZgVbYNA0V2 + wgu9OdE2jiONY9lT5Slx0pkB6e/KqP+leTYszrakJ0d4UeHTHyOuKxR9m29Bf44JGyQ2bZIct0X63I5y + idWSB3dUWLKtUjGAbVUG8LFuT04sH8vRHh8OLvFh35Ix7O72Z0e3aKjFs1jbNo/VbZGs7kimb0k+K5eU + smpJDWuW1NPXWc+a1irW1pUwUFUgfSifvXUFHGwsYHNFMuuKo+kvkvggfGJdSQIbipNYX5RMb2YUPckh + LEsNYXVOJGvy5fp5wSzLnkN35mQWZwbQle1DZ44nHdludGQ506F4UOm2wh8VE/hPpFur0CHozrRnZZ4r + A6U+ch8BKmwq85ac4sG6AhfW5TsKJJ/l2bFGOKkyC1BfkgFrEnXpT9BkY5o2O7J0OaQYwMJrzwoPPlNh + zlHJW8ryq5uyjURP6LFM/qZbNMLiFEPRAcpsgSaiDUyFe5rQkyq6IkWOJemyIkldeK86a+W6G0S3bM03 + YnuBsUDyXZ5cU7TCwUwzDmeaq3Aky5STOeaclZxxSXTN7Xpr7vxlACs5vdaKeyoD2IQbJQacz9XknHD/ + cwWiwYt0uVSix6VifS5LXFVBcuvlciMuVRhxsdKIC1VGnKk24mStESdEbxyuM5W2ZcKuGhO2yPHBMgN5 + R0b0FRmxSp63T3JWf6UL6+s82bQokE0dE+lrHEdHiTv10j7rJC825DqoDOA2iZWL5HhnqeQOqXNlNHBv + dSDrW6azrVuZAjqEQclhq+vH01vpI9zZjeUlrqwoE5S70Vsh7b5uDBuXTOXo5jhunKrmpdsreP3+IK/e + 38ard/fx5v3jgr8M4NM8e/Ek988c48HZY9w7fYTrh/dyad92Fa4c2MHlQ3u5cfwA984e5tlLigF8iOPb + V7OsKZesmAlEzrT/0wC2Fu5tqRq5Xxmj/KDAgd5cF/oL5dkLHdlULjyoyo3tNR7srPPhUGcQZ1bN5e6O + ZF44VMhLx8p5uLeIa5uyOLM6icNdYexqni3abgo7Gyewu1nJwxM43DGF413TOdE5nZNdMzjTM5sLyxdy + ZWUoN9bGcntjCo/35vPGsWr+eb4Zta05tiI6TFknjWx96tOGuiR0GItD1ViVMJKBLD225CtD++1Yl2tN + a6QWTdFC8ISstaa7sLRioryQSZQmeBA9xYDJLkNUa/vO8h5O3AwTEfnuQgJ9aM7xpUXIRnWaI3nhBqTM + HUHctKHETh5KhjJ1owS5pgx7FkkHapFgU58qxFGZomX+cNKmqZEz8xlqI/RZIeK/P8+JtVJ5aySQdSXa + UxtuQ95cM5KnGxIWpEHYBCFz8yRgJnpSnu4vyXUMMdNtmOSqjpuBGi76aniYDMfTdDheJs/gY6RGkPkw + 5liPINLqGZKthpFr+wxlLmrUeqtR56dGjaDCbxjFY0eR661FtN1wpsp1ArXUGC/lBAs1pjkMZb6yvoq/ + 1p/rISpr/upRNMOA0mkGFEt95E0xJ32iGYmBQjT9lF9k6pE8Vo9MfwNyA3QpGadHWZCIyMlSTtUhf+JI + kuW7IzzUmG2rxlRzNeZIGeEm9eKjRd0kc3pmWjO40Ia9kZYcF3J9Uert2Qx93i4w5NNCEd5FevwknfT3 + ahP+qDH9G0/qzfijyZzfmsz4qdZEhLcxn8u5yvq7byUM51HIcM5NGMJh/6Hs8hWhEaDG0QVq3MzS4J1F + tnyzyR2Oj4ZzbvxxVcq7fnDPH6568cdRB37bYsN3i835tt6SbyTAfZ5rzL/T/zSAhRS9ky73mKHFu1la + fJCrw7+L5X4lOPy7SM7J0VaNAv5Evus/OZp8ISTum2o9vm814MceI35YZcj36w34dlCPLzdp8eVmDT7f + NIrPt2jyzS5Dfjlmr7qvJ5fGqMDF/x9ffwEeVZZF/cOh8bi7u+EOARISQkLc3d3dQ5wIBEIS3BLc3d1p + 2t11uqe7p2V6pmWk9fftWzD2/t/3y/Os59y6VXXr1pG918qqc47g8jR+P+3Or0cc+GmfNT+NmPHzbjN+ + HTHnFzn+aa8pPx+25PczDvJe+W435D135sPdxfx2dwk8WAbProQXg+AVwRsB8KE/fCr43Bf+JM9/Jvhw + Ef98czY/vzpDXj+Vn2858+fzpnxx0khgyh+Pm/HpMQs+PWrHB/sceHW7PfcGbLjSa83RZhEpQkbXZ2rT + ISKqNVGSdsYcVgtZqIkQ0eAzgRLvMdQvH0t74DgGIjTZlWTKISH4e2ItGVyuQ5+XBr2LtFnjrccaHz26 + l6rTu2wcgyHjGE2ZyM0GU97f4sHfTnnx24UlKvxwbC4fb3HmTqMOh9PV2B6jxs4oNQ4kqXE1X4OXak34 + Q5sVP/Ta83OPDb8/MYB/7THk793afNU1mU/ax/B+mxof903gq616/HDUCm57SL258dsjB35/wZ7fX7Hl + 91et+PV1S36R8pcX7fjleWf+ed+Vv1524etjznIfNrzaasD93AlciVTjUoDcw3I17oeN5RWlr3RY8O0u + e34858I/H0zhp5emwQfz4Asv+Eoxgmfy+9eCz6fzj7ec+e5pK/581YQ/nzLgu0O6/G1Eh7/v0OIfW9UF + k/lp52R+26cFB3ThoAJ92K8He7X5fVRX+ocufxd8v1sxgPX5UvrJVwdt+PakE788mAkvLJY+Echvz0fy + l9tRvH7Un4sDs9kgQrVEhGyatEWKly7pPibkBtipDOBcf2dSltiSKEj1c6AwwoOqxOkqA7gkVgRblCXZ + IixzIg0oiTehRkSwKj6mOdGd7k5/9gwRsbOF+Cxga+Uy1hUsoDLcjnw/ZVabBwP53mwuE6KTOofaEDsq + VpjTEGZNe6ytxEwb1si1lFg6VOAiCVmSb9V0wUy2lAqZEewQYrOrdqEkmWUcaA3k3EAiDw9U8vyJJu4d + ruPawSrO7y3h4KZMdvanMDKYzYnROu5dWM/DS5u4d3Er9y7t4v7V/Tx3+wQPrxzj2olRzh/YynB7jXw/ + f0LnOhO5wJnUZe4UB02nLGQqJUGuVIRIsk9woztZSJn06c5IIT3hhvSHGbE21JCuYMUA1pbvJWWUBY1R + QhJEsK9aaUHHCnltgDH9AaZsWGnKxmALtoZasVmS7+ZwCzZFmolYk+sEadITMJ7VMob6QiYyGKbJpjAN + toVqsCtUkwORupyOM+Z6hjW3c225KUT5SpYZp5MNVQbwAcmThyRfHhFytV+E5644TTZGynUiJrExRovt + ifrsTDFmZ6pi/lqwLdVa8qwVw2k2bBBSuVZIZm+2LaulDVpz7KjPsBQRbEFtqnyXTCcaMlzknDP1WS7U + ZQqEoFZnOVOV6SriwYWKNGdVWZJkT6GI+twoc5UBnOirzNTVIF7GfOySyUQvmkzk3AmETB9DkJsaoa5q + xHgqBrDm473n50nemS95doEeWYv0yPTSU/1YIcPHSPKpIfFL9EjyMSYtwIIs6UcpgdbE+5oTuVSZBaz/ + PwZw/CItsv3MKAuypTbUTmUAd8e5sTZeCFi8kxBgITrJjowk27EzzoKd0cbsjjVmMFDi0xI11vqMYUuw + kFhp7z0xZhxNthXYs1cxgKNMpX0M6Jfx1BegSVegtF+oLp2CWt9JqmWEa/01qBMu0SwivFOZKSx9pjdM + n3UizrdE6jESK+0Wr8sxZRaw5MiTsdoci9PmYLQm+8IV81eDkaCJjK6cKMfqKjN4X6g6+6VvHIx4bAAf + jhDyHqWnwr/M38cGsLYKjw3gyexeMY5d/uM4rjKArbhTaCek2o77FdbcE2GkMnsrjLgjefmuQDGA71aa + cqfSjFsVpkKyhUjnSx/M0eSU5L8TgpOF2lyoMuNKgw23Wp240+aomgH8HwPYjlc6LHlllQkvNTxewvnV + Ol1eqdPhtQY9Xm/Q5/VmY15rMubNFlPekNe90WzI6036vPbEAH5eXvtstZZAh+ck3/6PAdzvwjf9Tnyj + LAHdZy2w4tteU77pU8xfQZ8BX/eY8Jc1Vvx1vQN/GXLn60EPPuhz5aUOB26JuDhZYMzRAnNGMkTMqGYB + j6V5+UQal2sIlFnd2tR4a1PupUnh/EkUzH1sAD+eBaxB+VJd6vxN/ssANlUZwFXempR5TaDaW50mf206 + Aw1YG6b8c9OcteEmdAcb0Cb9oilAm3oRzzUhelSG6ErMlFL6iIJSeb7IdzJFfuqUSz+rUVYaiDCgKfKx + Adwkr22S/tYULPcpWBWiQ6v0rdXRhqxJMGMgRWKMCMTNGbYMKz/0SDRma4IOu0Wo7RUheEhZjqnAgkPZ + xv82gHcnaXEgQ59jIqJPFZpztsSSc8XmnBERdzpb2l9ZIjpVXcaBJodEDI4km0ossZHxZCefby1xXcal + jNdoqafQ2eMJnD2O5XPG4TNvHIvnTWD+3PFMl7HvMeUpXJQlnD0nYTdFMYB1sZ6qh5mHNsYu6hjbTsTU + egKWVhOxFdhZThCMw8bqKewcxuLgOgEnt/E4uU/Abao6c+Yb4bPEgrBFFjL2zYiWxzELDFQ/xMxYJnnO + 30JykQUZwmcTPCcS6TiGEOGtCuJc1MgUTlusGMDCS7p8x7PBbzy7lk/isPSDU9IHznvrclHa+oL0hUu+ + Ij5XaHA9VJ+rESKWg8zYscSQzulawtPHECecONpmLDHyXVKX2JPi60HoImcWeJgzy82UeZ7K3r+PDWDf + Wc4sn+nECqWcYYffdGNWzjMm1tuM3BVmrJI8Mig544jkkqvLzXha4twzS4y4v9SM28ttuBDgyCE/e3Ys + s2d7gAcbA6eybsUUev0kXy1zYbWvK6vlWEHXcnc6/UWsBnrSGzqdvvCZUk6jN8STHuEA3eGedEa40xwu + MT3MUTiAaKMoZ3JjncmKFyS4kps0hWLhfmX5C6koWUp5qQ+l5T6UlPtSXLqM/LyFZKTOIlW4Q1LMNJKi + BJHTSYyaIZhDUvQCwSISYr2IE0EaFjqblSun4Sf35bXECUdXxQCejJH5xP+vAaynJcc6qr2A9Qy10TfS + UZm//zcD2EJlAJvK9SxUM35nLvBg6YoFLA9ewjL/BXgtnYW3z1yCApeSEL2SnKQoqlNCWZcVyEiBDycr + vbhcO4/b1dO5W+bB/WJPHhZ68KhoGo9KpvNQOMm9Yg+u5ztzMceW02nSRgmGKvN3p8TnnZEyzqL1GY02 + YF+sofBWEw4mG3Mo2YTDKSYcTTfhRLqpjCczzmVYcEnefzXVjJuifW+K9r0h4/GmjLHbyZO5l6bO09la + PJNvwLPFxjxdbMoD5Z8lZZbcLJXxmWegMoD3/9sAnqj6Jf6AaK4NMsb7s0yFo5nQLtdW0JVmQqeUnXIv + bQkShwQdiUZ0JRnTnaLM9LWQ91ir0CP3pJxTsFpev1plADswVOLEQJE9a3It6RPO0ZWqJxxJg5a4CXKt + CfI+TXm/DsOFRmwpM2F3jRkj9aIlGiwYrVcMYFMOCI4ITsj58w2WXG2y5r7kjhe6nXl9jSdvr/Xk5VW2 + PC868VG5nnxvnccGcIke90UD3M6YwJ308TyTM4k3ywz5qNqML+ps+arelm8abfhrsy3/kJz0Y7MV3zUa + 851i/gqU2b+KAfxjtQHfV+jztwoD0aPG/K1Yzok+/bHQgL8XiaYT/feDXPd7yYd/rTDkz1J+La/7k3yf + T8tM+aDMnLcqrXmlUjHeHhvAVyvtOVZsze5Mc4aSDOmTtu4SHtWcZE1NvDVV8fbCqR2plrI2wYbOXCc2 + VE1hS8M01T+e+uW9/UXmAksV/tsAXqMygI2Ep4key7dhqNBF6tiJLrlujfDMAuE+ObO1yZqmTbrLZDIc + JpPvpEm5m/DSmea0zbelY4EdXQsUE9iObnncPcuS3pmWrJtrz7C3xI8Vs9kYtojNccsYjvdlOCWQoYxg + BnNCWF8QTk9RBG2FYawqCKExO5j6nFCV8duUH0FLUTQdZfH01qTSVZEgz4WpDODKjFBqsiPkOISU4AWE + L/UkatlUklfOIz3YS2KML1UZQfRUJzG6rpj9g4WsbwqlMs2DzFBjeV40RIEHm9qF+w9HcXJ7Emd3Z3J+ + VJkRXMLVQyVcGC3k7M4iTm0t5cz2as7trOf8jibObmni9MYmTgzWcmqoltOCo/1ljHRks605hc0NSQzX + JrK+LI7ewhj6ShIYrMpgZ2sRB/qqOTwgGK7h0EbB5kauHdnIO4+u8sMf3uPXb5UZwL/DrzzGv/7kFD/9 + xG8//oW//vF9/vTe83z62g0+evok713bwRun1vL2yU7+eKmTry6v4ouzpXx8LIX39ofw9qgvH45489n2 + pXy5zZtPN3rxTv9Mnml35Uq9NcfKjDnyxAA+3WD3HwO42paHlXY8K33xRZX5a82r5Va8VmLO60WmvF1i + xrsSN96XYwUfFisGsJXAVmDPhyUOvFPqyEuldhLXrLhSKLFJcKTMggOVluyrtuJgnQ0nlSWWV3twt2ca + 91dPURnAZ4qNVMs+j8SNZUu4MgN4IufLJT+1OnNNnj9ZYcmODGWLqHEULRxD5uynSJo+lvgpE8ica0CB + lzmVPtbCt6wkD1mzMc5e+p8lG8KU7VYmCSfR5GiOAeflO1wqt+CCjL8LUg/Xay14oOwR+N8GsBzflvF/ + vsaGYzV27C6xYq3EwPY0IxoFNRJzKyXm1igGsIxLZcuNHsGQaKDtWY6MZjuxQ7TQRjm3PsGUnigj2oSL + 1Qdq0ygarzPCkKFkS3aLTjpY6MAx4dEni2w4V2bHxQp7LpTLcam0TZmVQPjl/xjAOv9rAEv8GCm1YluJ + NQMF1nRn28g9KUupGpAuvDB+uQ5xK4THSO6PknqJEISGmBP6xAAOVxD63zAmJNRIhWDhl0GiS4OEW64M + kvJfBrDoTWUP4BiVAWwkediE5Hgz0pOtyBYtmCMxX0FupiBdzqWIjpPckBKrQ5royGzhjsWZxpTnmlEr + calO+kptoQWVOcZUZOtTI2VjvhnNcm6VPNdUbENzqYNqGejaIkeqCpzkvY4UZdqSKxo0M9GKDEFmghU5 + ycIfc9zpEK0/1LqM7Z2+DNXPZX25sn+qB9tqlGXylT3THxvASg5SDOAtZS7srPFkf+scDnfOY1/TVPbU + uXC4wY2T9a6ca3DmRrMzD1dP5cV1c3h5eCGvb/XhjV2BPLPJj4s98xmpcmFtpg3dacKBMpfQIvGovy6P + kaFujh7cwoEDg6xbV09DdRYdtVkMt2azuy2JfY2BHKhZyIm6GVys8+RqtSc3y125XmjDzVxTni404wUZ + gy+VmAqMeK5Ih0eSu+4VanC3WHKY4GaJBjdKtbleqsVt5YdO0k+eqzTk5VozXpd+/WazNW9JHnynxZ53 + 5Xu80+jMW6rtB9x5t246HzbO5eNmiRMtS7hTP0f6mRubhPsrS653xpjSFmtFc7wtTfEWdApnH8gVHSAx + YrTeRe7fjdEGF3bUOLCx0pG+Uhda8lwoS3UiK0ZZvcUef287Fsy2Zrq7JR5OFng62eLp7CiP3Zg3Ywaz + p09nmoc7ri4uuLi4Mm3mDKYLnF2csXeww15e7+Bkg6OTNdOmubDUey7RccFkF6RQWVdC/2Av+46Ocvby + WU5dOM2xc6c4dvYMx85cYOeeo9Ss6iM4OovloZkU165jzeaT7Dh8h93H7jF6XMEdRk/cYuTETbYePM/m + vafluYucunqfy7cfcen201y68+CxAfzgPvefefRfBvCrvPDSSzzz3CMePn2fhw9v8ODeee7dPsqtKzs5 + dbCdA1vL2DeYxb6BZEbWhLFVMYDrF7CmYhZrymfSJ+gqmkJLjgvN6Q60ZjvTXeDJ2tLp9Mtz6yqms65y + OuulHKiczYbKhSoDeKDEn5YUH5UBnLjQk1BPW0JUBrCxygBWloFeYWuoOhc315NsvwXkr/SiOGQRtTFL + 6EhYyrokL7YkL2BPxjyO5U7nSrkbN6UfXm/14uLqIE6uSeLA2mxGB8rZsaGOof5V9HXV09GYT2N5rIxZ + PyozF1GXOZfmvNl0l8ylr2yufB9ldrMbjam21CVZ0aiYv0qZoMwGNqMywljuRbiG6KAsiVV5EmtKoyyE + 4zjSoBjAScoS0B7Ce6YIptKUPIWmRE/VpJBm0RGrkpxpS3GiM92ZHuEwa7OcBfbCv5Ul8W0ZlfF+fNVs + TrfO40jjLPbWTGFU+vouOd5UO0VytIz/Cjc2ljkyLDlso/Cm4Xxz4SmGbM41YbvKALZgj+TDPZXS15Xl + 9ist2F9vwxHJYSdWu3G6byoneqZwVPLZoS5PDqyewZ6uuezq9GZjiy8bVoUw0BrHQFcW6zoLGOisYKir + muGOajY1l7GlpoAdFTnsrcjmcFW65Js0Rsti2F4SztaSSLaVRrO9NE4eJwmSGcqJZV1aKOszwxjKixD+ + FsZgwUr6s32FQ8+nO3Om5IAprM4WrZblSlemYgA70p5hR1uarUAxgm1oVc0ItpbnrISP28r7pQ4K3OWz + pquWft5c6MaQ8MrhHDmfYyewYVjqdYPkvnVJBqLVdVkXq8n66MlsShLNn6HFEWUJaKmfi9WiJ6qUVSvM + 2C/5f5vwzfXJeqyR9/VIHlidYkR3qugEFUQPpBir0CXoTtKjP1Gd9UmTGU4TLZKhy+58I9FTxgJT9jwx + gJUVChX9o+C45ORTWUaczzXiSpEx9+osuS95/GG9BU9L+UgxgOV+7km+vyX8/Eqe6O88LS4UaHOxQIfL + RbrCVXS5WqzHFdEFlyW3Xio3kFz8GBcqDTgjOFltyIkaIw6LlthfJfdUqc+2cn02y3uGi/QZFGyQOhgs + sWRjub20rRs7WmcLFshYn01XqehiqdOGXDua8hxUBvAqyWXK0tDK7OCOEndWl8mYr57D5lVLGekJZFSw + rc2bDRKT+yunsrbElXUlLqwvFZ4v+XBtmZNcW/JZ1yKObQvn1ukSXr3Xw5uPNvLGo528/nC/cM0T/2sA + XznLw7MnVPv/Pjh7nHunj3Dn5H7BAW6f2MfNE1KeOsCD84d49upxnr50mJMj/fQ2ZJMp2jvC15ZYf0tS + QyxVBnBemCnlkaYytkXHZTswKNpuY4Gd9F1HdlY4PzGBPTnSPo9z65Zzd1c8LxzO49VTZTwv3Pvu7lwu + DiZzpCtU8q4fo01L2du0iH3NCzn43wZw1zLOrV7Gxd7lXOoL4MqalVztD+H6QDjP7E7j7RPlfHyhHrVN + aWZskM6m/EphUJlWHqtB60o1WgS90U+JuJ3MZhG2O/ItVUsCrE40pC3eiBYJUKtSZLDkzRSBMp/q1Gkk + +5vjP2083m5jVGWcjwElcW7UZ8ygrUD5lct06jLsKYwyIHPlRJKXjyXZbzy5K3WojBXRpgw8xe3PtqJB + hHCNCOWSMA1y/cdRHKjOqngTGXhObC1yZmu+sww0Z9akSgKIs6M81IIcEWXxS7WI99ERIWNOhQia6sxZ + lCVPJy3QgcBZusy2HMM0YzWmm41lhvk4Zpg9xRzTMfjYjCPEcSKxDuNJd3iKQuexVEx5bP7WzVOjVlA5 + bxwls9XJm65FtP1EvBXjWE+NRXK9xdZP4eM0nhWKATzr8XKY6Ut0KfDRp2SZIaU+hhT7mJLtZULiPBNi + ZxoQMU2XqClaxHpokTRNh5TpmmTN1CR7thb58yXYyzUS544jdKoayxzVWGipxjxTNZZaqRHoMp7EqRpU + LZBg4G3OpgAL9oaIuA+XQRihxcN4Td7K0uXzPD2+zdflhxIDfqo04tcaU36pMZNSUC/HDWb81GAq4tyI + b8uMVMsvfyBt/mrUeO6vGMu5+WM4MmsMe2aqsWuuGscC1biVPpl3W6z4yxYXfj/uzu/nnfntmhvcV5aC + ngW3PPn9lB0/71JmjJryfaMFf1UZwIZ8LoHq01RdPk7T551UHd5OUefdNHU+ztbi8yLFADbiiyJD/ij3 + 8WmmMgt4Mp9nTeYLIXHflGrybYM2f23T5i+9OvxlQJs/D6rz9caJfLVpPH/aOI6vtkzmu936/HzMFs65 + wKWp/C7g0jS4IDjlwe9HnPh1ny2/7rHkN8Hv+6z4bb8Fvxwy59eTNvx23oHfr7nCnWn8/nAOvz1ayM9P + L+KXZ31URh+vhMDrgreD4aOAxwbwZ4oBLFDKD734+c05/Pyq1MWzM/nlrgffXbbhy9OmfHHCTGUAf3LI + hA/2mPLqRiMerDHgcrseJxt12SUEdYN855bIsVQFTqQl1pFuIRvdWXOoi7CgwHsspUulT/qq0REwRoSb + NgeV2RCSpPYJURj0VadnwXhWz59Et5cGfd7a9CydzLqAieyIU+eoBPKHq635474Z/HRpiXzPpfx+dTF/ + OzmbT7Y58LBVh9P5anJNNQ6njeF09ljuV+nzdrsNn/fY82O/Iz+tseX3XkvoNeXnXkN+7Nbmy87J/KF1 + DO+tUuODrrH8cYMGX49If7vsLvWo/DhA+sfzrvz+ojO/viR9Q/DTS/b88xln/n7flb9cceaL4/Z8MmrP + G32m3C9X53raU1yOUuNCgJpq/+k7YWN4PmMiH7Ua8fUOS74/bcff7rjwj+ekTd+Ruv7jfGmDufDlDH7/ + ajp8Po2f33Xhh+dt+faWBX85b8wPxwz5+wED/jGqx487tfhhhzp/H9HgF8X4PWoA8jzHDKSPGPCbnPt1 + vy4/79Xlxz26fDeiLAGtGMDSlw/a8hfFAL4tnyP9g2f9+fVRGN9eD+f1g/5c7J/FQL41RSu0SVZ+kLJI + yqVGZC63URnABYFupPs4kKz8w3qZAzlBIgJiPSmPd6MszoUKIWwlCXYUx0sck2RRlyZxUUVQhKyIaOrJ + mCokZhob8ucLKfNmdeZsCiUG5PqaSJycyqZSf3ZWh9CdMofqIBvKlptSG2xOa5QVHXFW9KbaiACzZYNC + XApd2VY2le3l09hU7KnCdiHOigG8X4jZgdYVnOyL4tbuAp4+XM2tg+Vc3lfEGUlGh7dksFuI+t7N2ZzZ + X8utM71cP9XH1RP93D6/nWduHeHlB+d4/uYZ7pw7yNWjI2zvaaI0IZjoRZ7ELXYnfbkHhUFTKV7pRr6/ + HSWBQnyjHehMEMIaLyIxxoK1IqLXRzxeHkwxgJV/ENSGGNAYZUlztD1Noda0BglBC7JgXbAlA8FWDIVY + sCnEmq3y3OYwyV8yfpQ9pobCDVkXpM6agPH0BY9jIFydLVE67IjWZlekNnsjdDgao8/5RFOVAXwr25pr + meaczzDmpBCyI0K89ifqsF/ypTL7d0+KPltj1BmMUAzgyY8NYMmpO5NN2CGCfmuyBVtSLBkWkTiYakV/ + qiR/IZSrs21pz7KjWdqhRs5VyOvqlJkrQs4bhJDWK8avHFdnOFElqEx3pDzNiTLJu+UCpSxNlnyaYENe + lDlZUjfKHlYp/rok+GoRs0Sd0HkTCJrxFCvc1fCXHLJSEO02TmUA5ypbD8w3IHe+PnkL9MlepE+ml77k + LWPSvE1IUpZx9TYiaZmZ5E8bsoIdSFtpR+JyS6KVWcBLDP/LANYkXvp45jJjSgKsqQ62oyXciZ54d/pF + gKxPcGZjohO7RITsTXVkb7IN+0Xg7E8wY7PSFt5jWL/sKbYFazMSacS+GDOOJFhxKM6avdHm7Aw3YlOw + EGlp97WBWvQGadEXpsvqED3ql02iaul46per07RCS/iLct5InjdibZghG8L1pW0N2RNvyP44HQ5K+xyJ + 1uKotPeRGMUA1mJvuCYjIZPZHTyJ0aBJKjNYwb5QTfaHaXFQ+oSCx7N+9TnyBMqxgv82gPfK+3cKZ9np + P1Y+Q49LigFcLLG10oH7Io4UA/hOhbHA5ElpxG3JvbcqTVW4VmbKRSHIypLPJ3I1BVocFxJ+vFCb0+XG + XBDSfrXZnlstDtxptfsfA/ilNgteajLipQZ9Xm0w4PVG/cdokmMFzcqSzyb/NoBfU5Z/Vgxgee7Feh2e + qdbk6Qp1gSaPKrV4pcGIt9ss+VjZ+7fPga/67Pi6x5pvuy35c7e5wIRveiQe9yoGsLEcm/JtnyXfrrXj + 2/XOfDPoyR/WevBSqz3XK804KpzkSI6MGRlL6yM1JIeNoz1gMq0BmrSs0KHJT4t6H11qffQoX6xJ8Xx1 + CuZNonDBZAoWqFO6WJsaP2PqV5g9gak81qdiqSalKgNYk0bp/50rlbaXmCHxrj/CnO4QY9pX6tMUqKsy + gKsFlcF6lEmfKgvWUaE4QItCyZ9FfhoqA7g6VJ+6MOlfwqkaw/VoCNOhMUQgfVRBk2IAR+izOsaYNSLU + 1yljXATiJhGPwxJfN6ZKv1WZtvoSIwzYn2EogkwEkZSKAbwjQYOdiZrsEU50MNuQo3kmnBThdlpwKtdA + NdPwVLo2J1I1OJQsfSvFkF0SJ7ZIHFgrY6kp1JaS5eakeekRNXsiITPGEjhzLAFzxxO4aDL+izVYsmAS + s6Y/hYeMfyeXMdi6TMDKVR1rTx0sPHQxctHCwH4y+pbjMbIYj7nFRGwEdgrknDIL2NFhAq7uk3H3VMdj + qjozhEcvWWLJSuXXrb72xC+xJm6hEfELDEiTmJDnZ0ZpgBUV/tbSXibkz5K44D6BVOHUaW5PkT9dOMz8 + sVR7jaHZexzdPuMZfGIAH1IMYF9tznnrcuG/DODLKzS4IeP4msTv0yHmjEj8WTNbnyK7scQpM4Ctxkpc + 0yJtsYPkk2kSnzzxnmXP/CnWLJhqg9cUOxYrs4CnO+AzzYFlM+xZNtWKpVMMWT7bQGKZCRmSI+tXmtEf + aML+FSbyucY8VBnAJtxfas5NX2vOL7fjkIi6nUtt2b7MmU1+7gz4uNG32JEe+ey1y1wY8PdkIGAK/f4e + dMtruv1c6FspYjVYRGmwnJfj/mAP1ipGcIg7rSGuEi/thRfYiUAULhDlRGaMINaZnERPijJmUpqzgPJC + L0qLl1JUqsCHwmLvJ7OA55CaMJPkuOkkxyiYQXLsLJJi5srxQhJjvFQGcELcYmLlcXj4bFYEeOK19LEB + bGE7GWNp738ZwMpsX8UAVqAygAV6hjroGymGrw6G/xcD2NzaEGt7E+ydzVX7AE+f54aX7xxWhHoTGOpD + ULAPUVEBpCQqe6HFUZKVRH1WLOuyg9ld6MexqiWcq5rDtfKpXBeRfzPflbu5rjzI9+R+4RTuFXlwt8iN + 67mOXJS8eUb04WMDWIsdKgNYV4URibeqmcDy3N4EI8kvRhxMMuSw5O1jqZK/00w5I5r3Qpo5F1JMuZxs + xJVk4d/JulxJ0uR60iRupU7mnmiPh/l6PCo25ekScx6UKf8UseR2uTUXCo05lqv7XwbwJNYnazCQrqda + nq0v05iOVBNaJP8raFdm/irmb6Lo5jgDFVpFQ3ckiHZLVmb6mrFGcoSCnhQz1TkFHfKernRz1hcKRyuT + flXkQF+OxDLhHG1JujTHqgsmqGYBPzaAdRkuMmaL5I+dNRbsVhnAMlak3Cs674AcHxGcbLDgvOBKozV3 + Wux4ptORV3o9eL3HjZfl8QuiDR9VGPCgWJcHRbo8VCC550Ge1EmuBi8WaPFmqQEfVprwWbUlX9WJFmyy + 5ccWR37uED7eYssPjWZ8X2eowg+1ohFqDfhbjQE/VkpZrs/fSvT5TrTI9/laAtGnBXp8V6jDX0tEr5bq + 8ecyPb4SfC6v+7TYgI9Fv75bYsLrZRa8IG3wTKU996sduVrmwIkiG0YyLRhONqZf6q871YKmRCuqYi0o + j5YYFCP8V0rlfwzt0n8GqqeypXEGg1WurCm2Zo1iABdbCqxYp+z7+8QA7i8wl/qWa+aasqFQ4nqxK+sy + HWiPlvi2VIuM6aLBhUslOo8nwXYMqRIrcx3UKXPVoWGGGS3zrOmYb0fXQmk3L2fWCHrm2NAzw5reWXb0 + LXASfabEgzmSp5awPs6HdUn+9KcH0JcVQE9OMB25IawStBaE0ZwbSmNeuMr8XVUYRVtJLF0ViaytT6e7 + KomGnAjhhCspFZSlBlGcFEDSynmECccOW+JOQsAc0oIWkRkq8SPej6aCcDZ3ZDG6Lpd1jSFUpHqQtEKP + ZMl9pUk2cu3Z7OgN4tBwHCd3KLOAs7m4N59zo/mc3Z3H2V1FnN1RyrldtZzf3cj5nau4sL2Vs1taOTXc + xLGBeo4oM3p7StndnsO25jQ21ycxVJPEurI4+opi6S9TDOFMdrWXcGhNNUcHazgyXCWfWcnhjbVcP7yB + t+6f5c/vvszfv/iU377/kd9+/KfgJ37758/89rNS/kMe/5Wf/vwpn7/5DB+/cI2PHp3mg1v7eO/iMG8c + 7eTtI018draZr8/X8OXJXNHfMbw/upx3di7iw+0L+HzzQr7ctIBPN8zj7d6pPGxx4qKMIZUBLP1cZQA3 + /q8B/LT0wWfLH8/+Vczf18sEigEsMeOtYhPeljjxjuDdQtH6xRZ8KPifWcClDrxWasszpaIxiiUeFZly + vNScQ8IP91WZc6DGkqPNtpxvd+ZGlxu32t240eDAhTIzjmdpcSBlErvjx3EwTYuLFZbCBx25UC2cudCI + jQkTaBXNXLZQjbw5aqRPUyNt2jhKlyh8yZbmACfhyBJXYl2EU7ixPdFaeLIWQxET2J2sKRzNgPNyLxdV + BrCpygS+VmvBvUYbHjVaqQxglQncZM1dqZNLdXacqLNnRGLkuhwTOiUONmcYUZtlJtrFjJoMc5rSLWgV + /rImzYph0T3bc53ZLeNxe4ZwJeFOaxMk5kUZqHhVlfBBZTWfVWH69CeasS3Lhn35thwUTX0s34rTJTac + L7PlXKkNJ2XsnpB6P16smL9ShxIrlNm/R8uEryt7AD8xgPfLdxkts35iANvSLbquUTRZSbToJuGFcct1 + iVlhRPRKK5X5Gy4IES0ZopoFrOzr+3/ifw3g4GBDghTz9wmCRadGRZoSHaXsE2ysgrIMdEKMieRBK9KT + rSV3WwksyZY6yZbjnDRLMiXup8TqkSI6RVkOujDNmNJsqcdCS6oLrajOM6dMckxJhnDYLENqc01oyLeg + sUBQZE1zib1qGeiGEidqJXdU5tpTkmlDgdR9TooVuYL8ZIE8rswRjV05k42tS9jR5cOmxrkMlnsyXK4Y + wNPYXiuxssqDTZXuDMr1hqXPbq5wYWfdFPa0zGRf22x21bmzu8aJI03unGl051KTG3faXHmm25NX+qfz + +tA83tq8hLd3+vHiZh+u9c5lf7UTgzk29GdMkVi3hK7MlQzW5rJ3qIvTR7dx4vhmtmxuZe3qcoa7yxld + W8bhNTkcagvnUMMSjsi9na5242KVcIJKN66W2nFD4vWdQjOeLjLj2SLF/DXgaclV93ImcTtvEjcLJ3Ot + eDJXSiZzqVSDi8XqXC7S4HqxJvcl3z1Ta8LzjaKfmq15RXLYm61OvNPmztstnrzZNI03GmfyZvN83pW6 + eq/Nlzc6lnO33ZtTDXPZUejGGqnX1RI3O5MlR4jObU+VGK/s7y/9cmedA3tXuXGw1VNV7mxwYnOtM/1S + lx3y3qoMF3JFJ8eIxg4UTu0115qZHhZMFT41zcWWGR6OLJg5haXzZ7NozgxmTnXF3dUJTzcXZs6YxrSp + Hjg62mFra4mtnQILgXAxV+G/i6YSHrmcjNx4ahqKWTfczd4jOzl14TjHzx7jyGkFJzly6izbRw5R09xD + cFQWfiGZFFSvo2f4JFsP3mL74TvsOnJbcFNwXXCNzXvPsXHkBDsPnefE5btcuvVI8JBLt+9x9c49bqoM + 4KcfG8CvvMyLr7zEsy88z8NHD7h37xZ3bl/i1o2TXL+yl8tnhzm+p4l9mwrYP5zF3g1J7F4TytYOXwbq + F9BfOZvhxkUMN3uxvm4+3aXTact1oyPfnb6S6awtnSH5ZOaTWcDTpW4VI3jOEwPYh4HSFbSk/h8GsOu/ + DGB91TLQigGszApOmOtOtu98ClYupDRkAQ3CoVcneAnHWCjxci6Hs2aLPp/KzXIn7ta5cbt1AVe7AjjZ + E8u+nhS2rs5iqLuYgd46+rvq6G0rpqs+mfr85dTlLKIpZ7a0+yzWVMxV3WNv6TT5Hm6sSrelUbRjU4oN + zSkSn0RX1sWaUhFhSL5ozqxADXKDRKuGG6lWTa1LdKQhyeUJ3GhOchd40pSslO6sknOtyW60pbrQmapM + JnKmN0v6XbYCR+HfNgzn27FD+OWhpplc6F3KuZ6lHO9cxNFOLw51L2VUjne2zmeb9P8tMt42ltoLROMW + WqgM4I25RmyTMbdTYv9opWIm2zJSZcXuKgv21NtwsNmeox2unOp253i3B4c73TjU4c7+jqnsaZ/F7g4v + trQtY1NbMMOd8QyvzmCwK19QxsbOSja3lQtfK2J7dTajFekcEhyvTOJEZRwHysIZLQ9ld3k4IxXRjJTH + ChLZVZ7MloI4hnIjGM4TFIaxsTCYwYIA4XNLhaPPoTtjGt3KtiDZblIqBrCzygBuy3CgJd2e1nTF/FXw + 2AxulzzVJfq+L8OegRzRfgXubMx3YUhi6PpMOzZkCDJtGRQeP5BmIZpAuGO8IWtidemL0mBtpGiFuMls + E65+UPmBd4XkVsnXZ6okz0uu3Sexa1u2CetTDOgTzbJa9EKn6geNpqxWzF/lx6SiYxTz918G8JpE4f1J + Ggyl6ah8ut35puwqMBGYMSK8dX+mCYckfyj6R8FRufbJDAPOZhtwqcCQ29Xm3K01577k9vtSPqwRrVNh + zu1SI4mnigGsw0XBhYLHuFSgy0XBpUI9zhcJhKufFZ5+RoHk2lOCkxX6HK00FN5kyH6Jq6OSf3fI81uE + 22+U9wwX6jNUJBBuNFRixibhUFtrJKc0z2JnyzyG6mfRXeZJS4EzjZK7mlUGsCDPkZZ8gWIEFzrTVezG + 2qqZbG7xYqTHnz2C7W2L5f2zZfxPFT7vzAbBYKlopzJn1slYHW6YyvbOBRzeHMTNE3m8fKed1x+u5/Wn + t0m5h7cfHeWdR+f+bQA/d/ks9yU+3jl5SHCQu6cPc+/0QRXunlIM4D3cODnCrdMj3D27h9tndnN0Rzc9 + DRlkxcx/YgBbkBJsQZZwhjzhDCUyduvjRKdIXxrIk/GnLBeu7Bkt97ez0oXdktcOt87j7Fo/bm6L5pn9 + mbxyspQXj1fwYE8Bl4dTONYdwf5VK9i3yocDLUsEXhx+YgCrloDuW87lNSu4ujZQVV7sXfHYCF67kqe3 + JfL2sRI+OV+L2rpEQ/oTRLgm6qp+edAbO5lVK9VYFahGd9RTrE+YyJAQwq3Ksn35SsK2kM5nLkFFglSS + PQ2pEmRy59AgATEnzJ7wBVqsmD6OwJkTiPXWpyRO+Ue2BOqCWbTkTaEu3Y7SOGMKw7XJDppEzkoNisMM + qI63YJViAOfY0aKs+51qTq0MgMpoXQnAGlRH6LJaBtXmImcJNs5skU4xrPyCJU0xCuyoDjeXYG1Eio8G + yb5a5EWYUZ3uTq18dqWyz0SII1ELDfFxGc98KzXmWo1hrvVTzLVUw0seBziNJcZzEhnTJlE0fQLVsybQ + OH8sLUKgmxer0bR4DPWLJ1K1UJuSefokumrgbz6GxUZqLDZ/iqV24/B1ncSKqeqEzVInfr42GYt1KfQx + pNRXCNwyE4q8zUhbaEzsHCMipxkQ4qFDsFwnxFmdSDd1ot0nESf3ED91MonT1YmZOYmgqWNY6qrGHFs1 + ppurMc1EjXkWavg4jSPKU8TmPCM6FpsytFzEfqCIlZUyEIMmcytsIi8navCHLB2+zNXmWxl4P8pA/Lna + jJ9lkP8sg/2nBjP+WW8q4tyEv1YY8ZUQpg9TNXg9diLPBI/lhs8YTs5T4/DsMeyZrcZuOT4WoMbN1Mm8 + 2yyif5Mrvx915/dzzvx+1Q2UZaAfzoDb7nDahl92m/NDn6lqSbC/CgH/OlefT1I0+TBJk/eStXlDytcT + 1XkzabJqJvCnEnD+VGzMFyJg/pijyycZWnySNolP0ybyadYEPi+cxBeVk/hT/SS+alfnm151vlo7kT+t + G8cX65/ii4GxfD08me93GPDLIRs45QrnPOX+FEyBM1PhhCcclvvda8dve6xhv7xOXvv7ERt+PW7Nb2fs + +P2yg3wH+T4PpvH7c7P59YUF/PT8Qn5+UVnqNxDeCIO3w+G9UPh4JXwSAJ/5w5cr4HMpP1zKb2/O55eX + 5/KbYgA/mMqPN5z58zlr/nTSks+PW4gANeW9ESOeX6/F7U4NzjdO5nDFRDZnPkV37BiqRLwVLBlHS7QD + vRlz6c2cRWO4GWWqPROlT8rzPcFjRKzpcFJZ31/G5YEYQ4Z8xtM9bwwdc56ic9541izVpM97EoPBE9kr + QvF8jSEvDznyzWm5t9vecGcJ3FzEP8/N4o877XlhtS5XysdIcB8jBHkc10on8cIqEz5a68iX653426Az + Pw/Yw3qpu34LflpjxPc9uvypSzGAn+KdJjUhyGP4oHs8nw5r8/djjvx6SfrDLQ/pG9IOz3rw83Mu/KQs + +fysK3+75863V1357IQDH4xY89aQBY+atLmSM47LSWO4HCX3In3uknzf22FqPJM2VvqeDl9sNebbE5Z8 + f8OeH5924dc3psEfZsMXgj9JH/xSHv9pKr+8L5/xij1/uWfJXy6b8P0pY/5+1Ih/HjLih716fDeqxY/7 + tfn5mCG/nTJ5AiN+PWHIz0f15HU6/HO/juq1fx1VDGADvt5rwZ8P2vHdKRd+VpY/vz9Pvpsvv9wP4c+X + w3htrx/ne2cKubKiwE9LYsHjH4TEexmQusyCgmBXioM9yfR1JsXbkVRBpr8jxZHulMe6UyYxs1IIXEWy + E2UizCuSrKlLlcQnIqEj01OI3BQRGR4qrM2Zx0DRYpoSPElbokvGUkOVAbytKoi9zdH0pc+nIsCKEolB + VYEmNIdb0hotMVwEaJ+QmnXZ9gzmCZkp8mRr6VRJ0B5sLPZkW4UQs7oFIlh82d/ix5HVQVzZksrtfUVc + 3ZPPuV2ZnNiRzpFtaezdmMzB7TlcUGYGn+jg7P5VnNrXxrXTm3jxwSneeu4arz+4zKOrJ7lz5iB71ndS + kx5Fos8sEpZ4kOrrRvYKFyHcdqQuNiZT8kZZoClNkdZCguxZK/F9INaGDdFWqll9nSK060Sw14YY0hRt + TVusEIJwe9pEsPeEWLMhzJahUDs2htmwOdRWYM2WcCvVHtmbw00YCtNnvcTI/pXjWRc6gY2RmuyI02Mk + Tpc9MTocjBIiE2/ExSRTroogv5ZuzuV0E86mGXIiyYDDkiv3KbP6UqRMNWRXki4boyayPmw8A+GTGI7W + ZluikB55/7YkITgJZqpfuA/I4/5kc3qTzVidYiGE0lpyng0N0g5VSRaUCdmvFAGpLP1cneZIlaBS8lt5 + mr0KZSmSOyXnliRKqUCOS5OUHwk8NoBzIkzJDjUlI9iIxOU6RC1Wx3/GU/h6qLHMSXKGjZoIHDUiXZ4i + dZoICZUBLMJCwUIDchcZkOVlSPoSE+mTpiR5m5Cg2stTMYBtyQpxkms7krzCmtgns4DDF+k+MYC1iF2k + Q7q3ofR5cyoDrWkKsacz2oneaGf6ooU0xwjRi7dnNNmefSm2HBaBfDjZiu2hWqz3HceQ33h2hOgwGmHE + gTgLjsRZckD66qi02fYQfTau1GZgpQ7rgnXpD9FlbYQ+PaH6NPpOokZiZZPfZNoCtOkIEsIdZix9xVja + w5hNkUbStqbsSzBmb4w2eyIfL/l8MEKTQ9Fa7BeMyvHukEnsClFnRFnCOURThT1yb3vDtNkfqSuv1+Vw + pB6Ho6QP/BeOCA5FaHMwXF4r71dmEO9YLt/FfxxHovW4mGnFnRInnq5y5kGVHXcrLbhdafpfMOFWuSk3 + K8y4Vm7CJcmBZwr0OCF5+2iuFsfypMzX5kihDsfLDDkj+ftigzXXV9mJ8LRVGcAvdDupDOAXWs15oVFi + fKMBr0mpzPB9s8WIN1uNVVDN+lXM31ZTXm8x4dVVhrzSrC8wVC39/HSlOndLJsj9TuRBmXCBVWa822HN + R6tt+KPg89VWfNllwTdd5gJTvl1tzDfdivEr+b3PnD/3Cnos+Krbii/k9V/1u/HpWg9elnu9ViIiRPjF + YREg+zKMZZxo0bNyAqtXqtMlbduxQpdm4W5Ny/RoXm5Mg68hFYu0KZijLAU9SbUcdPEiLap9hUCvMFeh + drmJPNajbIkWZV6TqPLWonG5Hh0rjVkjnHBdlLX0Ewu6g01oX6nsHa5H7Up96Z96qmWelVm/xfLZJYFa + FCzXoGCZ8NHlWlTK66pClJnCOtQqs8xDtakL0aJBRPi/0BiqQ0uEAV0xJvQlWsrYtmSDjOXhVFs2Cs/d + LON7t8SNUYkRI8kGjKTqy7G+qtyVrMu2eE22J6jLsfSbTH0OqUxgI2lvI05k63MiU5fjkrOPpij/7JXY + lGrMjnRr4QiurBFRXx9uR6GfjNOFmkTMGEuwcMXAaWMInjOe8KVaIj70WCH1slC47FTFAJYYYGU/FjOH + CRg7a2LkrIWegzo61hPRtRiPkfkEzC0mYP3EALa3moCT7QRcnSYzxVOLaVO1mT1Tl0XzTQhYZk90oCup + ge4Svx1IWGRCkvIjkqVGlPibU7NS9EGgiDc/yV3yXPlMbcqmqVM5ZxL1CyfTtHQSLd7jaV86jl4ph30V + A1g4kL+WygA+6/NfBvAybS6v0OSG1PWNGAvOR1iz308E9lxjypwmkSBcPsJyDOGO6iTOt5H7mULMsqks + n++K13R7Fk6zZ5GnDfM9rFjkYY2XYLE8XuxuxkI3PXym6RK8UF9ysSE1AdKWKwwZ9TXg/DJDHiwx4hnh + 14oBfH2ZFWd9bTiwzIZdigHs48gWyV3D3q6s83KgXzDg7cLG5Z5sXDGFDfJc7xIHepY6sMbPlfUBHhK/ + PBkIFEi5PsiTnkA3WgOcqVkhcdzfmtyVdhLDHcgIdyA9wpGMKGey490pSJlBUdZcCnIXkJu/gJz8RWTn + LiQzczZpyTNJip1GQvQUkqVMiZ9FStwckuLnkRS3iMS4xSrzNyFhCQnxi4mImMvyFR7MW2iLo6sulnbq + mFhOQt/k8R7A/y8DWIFiACvGr7IHsGICKwawsgewYgBb2Rlj62iKk5slU2Y5M3/JDAJCfQiN8icmLoi0 + tGgK8pIpK0ijKj+dptwklD25dhSs4GCFNycr5nC+2IOLeU5czXbiZpYzt3NcuZ3rxu18QYELN3IcJJ7a + cDbFlKPxigEsuTtMEKGjwi6J0wpGYmWcxRqwV8p98TK2JG8fSVb27jfhdKqp5HIzziSbcC7JkHPKlgCJ + OlwQvXQpcSLXUiZxK0ODu7k6PF1ixsNSSx4I7pZLHK+y4VKJKSfy9DmYq8vWNHXVEmzrUjRYn6bH2nQj + ugVtScY0Jz6GYgKvEi27Su63KUafZrmvVXGPf0itzApeLd+lR7StgtXCDzqFM6hmC8s1OuU+1xU5sbHC + jfWF9vRkmdKeYkBzvMSf6Ek0xkykI0mD3nRt+iVmDBWbsLnMlB21luyqU0xgQZ0yA1gxgCWnPjGAzzVa + cLnBkltNtjxoc+DFLjde6XLhpRY7nhdtqBjA94q0uVOgzX3JO08X6/OM4IUSfV4rMeDtMiM+lFz1qeSv + P9VY8l2zPX9vd+GXLlf+2WrP3+T639cJx659DMX8/ZcB/EOZHj8U6/Btnjrf5kzir7ma/CVPiz/na/K1 + fOaX8tyfSnT4TPAHefyhfP57Bbq8WWTIS8VmPCNt8bDMhnsVDlwtceBkgS0jmZZslHpcL7yqJ9WKVcKZ + KyVWlArnK460UC2XWBZtRqv0n/U1U9ncNJOBajf6SqzpK7RgTZEla4uV2cDWKvN3UI43FFnQn2fChnwL + NpXas73cnU15LnTFWlCyZDIpnmOIslMjRlmG3lqNNJuxFDhpUOmhR8scS9US0Ku9nOhb6srgcvnMgJkM + L5O44OXOwGIP1nl70us7jdUBM+gKmUd3zGJ6En2kH/jTnRVAh6ApfQX1GStozgmmUdDwxARuLlD2Bo6i + vTSO3poU1TLQNZkhFMT5kR/rq0JutA9x/rMI9XJTGcCJTwzgtCAvciKXUpkewLqGFHavyWPDqiiq0qeR + FGBAwgod8qXumgrkXluWsb03hD0D0RzelMSxrWkc35bB6V25nBsp4fxIpaCWs7saOLdjFee3tXF6cwtH + BhrZ113J7o4idrYWsG1VttR5GhvrktlQncTa0nh6imKkTGSoJoOdbYXs763g8IZKDg2WcnCwmINDZVzc + s5qXrx/gj6/c4pt3XuT7T97n+0//wHeffsL3n33KXz77A3/99H3+/NHr/OmtR7x15xSvXdvPm5d38c7F + Lbx7ag2v7W/kzf2VfHqigi9PFvL54WQ+2hPMu9uX8M6WuXy0aS6fD83lT4Nz+UP/LN7s8uS+9OfzVWYc + LTVSGcDH6qw52fTfBrC9ygB+ocyWV6UvvlZmxRuljw3gNyRmvFlkzFsFRiq8nW/Eu4VmvF9ozgeFVnxY + pMwCtuODMnveKrfjxXJb7kufvirvPVVqymHhgfsrhK9Wm3OowYozwp0utztztcWJaw32KlP2dL4ex7O0 + OZSmyXEZ95crrbi9ykG1rOQBiUtDMWNp9VWjfqkalYvGUDTnKQqFRzUJd28PdaYnwoMNMVMYyZjJodwZ + jIq+GIrUZjB8vMoAVnjIhQpLgblqdrGyx/DVWgvuCO98qMz8lRjyXJMVz8m9PWx2lPty4Ey9g2r56oE8 + U1Znm9KSZUydxKvqLDNqM81ozDBXaZ7+bDs25Tqys8CVkQJntmUpfEnGYbzEyQjhZ0GalC6fRPmKydQG + a9EdbyzPSxzLsWJvjtRJrjknpB5PFVtyUsqjBaYcKzIRfiztJNz5mMQpxfw9Vq7L0QpBuT6HhV8rBvCe + cpv/MYAbkiU2RBuRKnwv1l+XaMn/UUGPzd8w0ZIhwVYCC8JCzf8vMCUkxFhgQrBoLuU4KMjwP0ZwsD6R + UaZERSswJlp0SHSEoWo56IR4C1KSLElPVWBORoolWRK3ctKtpDQjNd6AZNGiafG65KUYSe43ozzfUvKm + hWo2cHG6IYVpupSlC5fNNqZGmSGcZ0ZDgSWN0r+aJS42iuaok5xRlWtLWaa1vN5cYEVRuo2835oS0bbV + OfasrpjOphYvdnYsYVvjHDaWe7CpzIMdEie31UxhU5U7w+WubCh2ZKjMkc2Vruysn8rIqhnsapa4VuXE + zmpHjjV7cqHFk+stHjzodOeFHg/e6J/K2xvm8O4mL97b4cNrW3y50zefo7XObM2zYyh7GutzltKXHcSm + +lwODndy+eQOLp/byYE9vezc1My+TU0c31zP2Y2lnOiJ42irL4dqZ0rbunK63ImLlS5cKrPjSoEFNwpN + uVtozIMCAx5KzlC2LriZNYHrOeO5mj+Bi4UTOF80gbPFkzlTOJGzhepcLNYU7aXP/Rpjnpb8+GyTNc9L + v36lxYXX26YIZvJG2zxea1nI6+3yHTqW82pnAC+sXsnd1QFc6PBlf908BoWjrMlyoVdlKHlI6SI525pN + Mo52NTiyt8WNg+2e7G1zY1eTC5vrXVhX5UJnsRvVmS7kJbkSJ9wvyM+eJfOtmOVpxnQXU2a4WjJ/miPL + FkwjYOk8fBfOYu50F6a62TN7mivzZ01lmqcLdjZmWJgZYGH+L+hhZaXPjJmOBIUsJi0riobmYgY2drHn + 0FaOn9nPkZP7OHTiAIeOH+HQsRNs272PmqbV/zaAcyv76Rw8zsZ9N9iy/ybbDlwXXGX7gcuCSwzvPsWG + HUfZvu80R8/f5OITA/jKrbtcvXOXW/fvcf/pB6o9f5W9f59/6XkePfs0dx/c4dbta1y/doYrlw5z8ewO + zp1Yx5HddezbmMeBjZmScxLY1ReiMoDX189nbeVstrUvY1unL8MtS1hbNYfOoil0F0+lr2wGa/4La8un + q9BfMZf1FYvYUL6M9SoD2JvioLkkL3QnfIoNoU8M4OXWBvhZiV6yNSRMziXOcSPHdy5FK+dTFjyP5uiF + 9CYuYEvqfPYJ5z6eM0v60lTuCAd5UOfC3dZ5XOtczsnVEexpj2GwOZ6+pnTWtJWxtqOate1F9DWmSM5e + zqq8hbTmz6KneCbrq+cwWDNbZVp3F7rTmmXPqgxbFVpESzYmWVAbb0ZFpAEFoj9zJDYWhOpRHmWiWuGk + XvFgkp1oSHJWmcCrUlxpSXGnWVW60SbH7WnurM5wE+4oulH6Zn+uu3AadwYLRLsoXkqJM9sr3TjQNIur + 6/25PODPmTXLOCk4staPvT1LGen0YseqOWyplthQ7iAcU2K4cKYNkieG8w3ZKrxsh/DjkSrF/BVUW7Or + Wh5L3twnefOI5C9lFvAx4ZmHOlw52ObCvjZ3RlunM9KxkF1dfuzqDmP32hR29uexfW2xoIKdPVXsaCtl + e30Ou6rSOVCezPHKZM5UxXOmMpLjFaEcrgzmQGUo+6siBTGSNxPYKxxjV1mCakbw1pIouddQNhWuZLDQ + j3V5XvRlzWZ1uvSdTHf6ctxVY3a11E9HhjNt6Y6qZcUVP0pBq2j5NmmP9nRbujKULfjs6c90ZDDHWeDI + hkx71stz69NsGUiT3CIxfZ3yv74EI9ZEG9ATqUN3uHD08In0R09kU7I6e/IMOF5mxlnhzqelno6Um6u2 + W1V8tv4UQ3pEqyhbxHSIVlE0wL8N4FQ5L1CWgFYM4N4kbdYma7EhTYeNmQaSU83ZKVxjZ745uyUn7E03 + 5oDkjwOicw6KBjoo7zmeps+pTD3Oi4ZR/ud0W3jOHcHdajOULcjuiH64UWzI1Tw9LgmXuJiny/n8x1BW + pVPKsxJbTxfqcrJYlxMluhwXHFN+dKXadkFf2klf8q0he0r12CWaYWuRnrSBvsr8/TeKjNhYbMqWMmu2 + Vzuzq1HySctcNjfMpq98Cm2F0qdz7EQn2tOcK22hTA7N+w86Cp1USz1vkbi8p8dX+qmv9BUvhuuF25d7 + qnTTkPTv4RJXVf5aX+Ykz01hZ9cCDg8HcP1oFs/faOaV+8IRn97I60/v4u1Hyj7AZ3j93llevnFWNfP3 + xpG9XNq3k8sHdnLz2B5uHt8rGJXjXVw5spWLh4Y5f2BIMCgYYM9wE+3SB9OjZhHlZ0t8gNUTA9hUtXd3 + UZgBNcI5OlNFXwinGSq0Y6Pk7K1lDmyvcGZnlYyPljmc7lvG1U3hPNyTwssnSnjlVDXP7C+Wc2mc6I1R + rcx5sM2Pw23eHG1bIvDihOTws92+XFm/kptDYdweDOPaupWqmcAXewS9/tzbGM0bh/L49EINan0ijrtj + tekVQblWMYATNGkJH0tb+FNCyCYwkDiZQSGEm4TMKTOAhyRp9wqJa0+xpS5ORFacBKDMGTTlSLCMdSXR + 15iw+RoCdeJ89MmPsqcy2Y3GrCnUZ7pSnSzvkcFRIeK3OEqHEiF8lTHG1Caay6CzoS3bnhYR+A1SOfWJ + pqo9Oqoi9WmIlcGUZcOWYglYBQ5sFPKm/NKiX67XGSvESCo2X4RL8tLxJHlPoCDMmKoUR6olEFbEu5IX + Ykuclz7B0yfj6/IUSxzUWGSrzNxVw0+Ow93HkDp7ImWLtWnw1qLdV4vVyyfT7fcUnX5j6Fw+nrblmjQt + k8ZbakrmdD3ClFnApnItq/Esc5yEv4cGgdM1CJ+tScJ8HdIX61HgY0SJrykly8wpWGpB0nxjImcaEDrF + kAAXbfnsSfjZTyDAYQJBjuMIdhlPiOt4Qt0nEOgxjsVuasyS+/OwUsPVXA13EzVmSrnI/imC3SZRNEuf + 1gXGDCwzZftyQw4s1+GE/0SuBIznmciJvCcC4Y9ZGnyVp81fi/X4hwj2n2rM+EetGX+vN+PHWmWvJRO+ + LjXkMxnwbyVM4nkRAXf8n+KilxpH56pxcO4Y9s1TY+8iNY4HqHErTZ33mq35y0Y3fjvswe9nXPntijvc + nQoPBLdd4Iwlv46a8uMas8d7QpUZ82WOLh9Kf3o3fjJvJmjwipQvx07m1fhJvJ2qwce5enxRZMoXBSb8 + MceAP6Rp8XHyJD5KGstHaU/xcc5Y/lA8lk8qx/JZ0zj+1DGBz7vH8nnPWP7YN4bP14zlmwENfthqyK+K + sXvcFU6589sTcELu7agHHJT7G7UXWMMBWzhix+/Hbfn1lC2/XZDz153gvhs8I69/aRa/vjqfn19ZxC+v + +cBbQfBOOLwfAR+Ewcch8MlK+CwQ/iTPKeUHy+CNRfz60gJ+eWYWPz+Yzj9ue/DdJWe+OWPPl6ds+OSw + Oe+PGPPCgCZ3OydzqXGSJIEJDCer0R6mpprlm7NgLC2RdqxNE0KTNoXWCGMaAsbRKm3QHazGYNQYDmUq + AdmMM1kmHIiWRLB0DN1z1GibKZg1hjWLJ7LWZzybwiaKcNLlZqsZ7+xy4/sr8+HhUoGXtNsCfro8g8/3 + 2PL6Wl3u1o/ldvU47tep86BBk9d7LPh0yJkvh5z4YZMz/9xoz++b7Pht0JJ/9Jvwl15pN/kOH7aM5c16 + Nd5sUOOtVWP4oHci3+wy54ejDvx0QdmPeSq/PZjGz09P5Z+Cf8jxX69P5fNTLry3x47XN1rwfJcR10sn + cj51DJeTxnFFhOy/DOBboWo8nTKGtxvV+XSTHl8dkc++as339x34+VVp1w9nwBczpR2mw5fSdoJfP3Ln + 72848N0jK/5yw4zvLkifPG3C309Kvz9swLcHdfj+mD7/lHM/nzPnl/PmUsoYOWPMP07o8bcj2vztkLK/ + tB5/2aMYwIb8eZ8V3x6w4/sTLlJv0rduz4E7Pvx8O4g/nw/ltd3LONspRDTdklxvTaLnqBM1T4OYhXok + LjUjO9CZomBPcv3dSfNxUhnAGcsdJDG4UhblRmmsC+WJ7pQLoStLsKM8wYbaFGdaMzzoyJwupGAqrRLT + Vkm87cmcQ1/eAiojnYiW+JWySJeGGA+2VgVJcogXsb2IMn8LCr0NKFtuREOwGc0RIsRjzYVAPDaB12c5 + SFx3ZWOhhyQjEXtFHmyrmMlI7QIOrvIRAufDgfblnN0Qw9WdmVzYIQlocwJHtyZyZHsKB7YmC3HP5tLx + Gi4fW8XRnVUc2lHLpRMbeO2Z83zw8h3eff4WL925yKPLJzi0cQ3NeUmk+s8jbrEb8V4OJC2xIn6BIVGz + JhM7ZyJZizWpCjQWIuTEQIoLQwkiPmPtVKZOe7Ax1St0qQzUpznGjk6pi3b5/u3BtqwJlRwV4cCmCEe2 + SLklzI7NYZI3wq3ksZmMAyGsoToqA3hd0ATVjN2tMVqMJCqzhoS4xOlxJNaAc0kmXE4242qKGZeSTbgg + hOt0igEnkvQ5lKjHvmRd9qToMpKix7Z4GXeSM9cGP8V6GWdDEdpsiTNge4KQm3hTuW9jNsQpvwY0lvxq + TJegLdFEyLo5DSnKfvcWlMWZUhhtSlG0GSVxlpTEW1EsKIq3pChJxHqyDSVJggRbleFbLORfOf4XCqIt + yY+2oCDKiuxwMxL9dQn3moy3pxpejgIbgYUavpZqhEk+SfKcRPZsXfIVE1hZFm6hAfleRmQvNiFD8tu/ + DeClJsR7m5G+0k4IjLMKyQE2xPqZEyXPKQZw2AJNlQEcs1CHFMl5Od7GlC43p1aIT1OwtcqY7wixoCfE + VOrbgm0xlowmWnFIOMTRVBt2CwfY6D+JzSsmsytEX2UAH3piAO+XNtsVbMjmAC2GVgiC9NggBGp9uD7r + owzpC9Fj1bKJ1C8ZT4ufBl0BOqxeqUe/5P91oUaqJb93xpixL1GulWDCSJQ2u8PU2R06iVGBYv7ui1GW + ndZ8fD5MylANgWIIazAapsWecG32RerKvehyMFKPQyLGDkcbCgw4FCX9Qc4dUF4j7xsJmsSuwAlsE76w + 3X8Ch2P0uZBpye1SZx5Wu3Kv2o47lfJYiPbtSnMh4Irxa86Ncguuiwi4XGLCuUJDjufqcCRbS2K2Nofz + tTlU8BhHSg04Kfn6bJ0Fl5usudVix9MdDioD+KUuO55rMeP5RkNeajLgVcX8bTXm7XZT3uk05512M95q + M1OZv/8xgI14WV77ctNjA/hB+WRuFo7jesE47hRP5q12S97vsuXDTms+brfgE7nG5+0mfCn4usOYbzoN + +Vpi9tfdpnwleeIbxfztMuePcv2PV5nyxy57/rDamZcabbhWoM/hxEkcTpV6TDdki/DOdSGTVPvY90m7 + dgfo0eKrIzCgPdCctkALGnwMKRE+WThP2RNYneKFWlTKuVpltqZiNPoKP1ymT9kSbUoXq1PlLfzNV5+O + lSb0hlmyNkJiXLhiAJvKNQ1pkJhRs1KfCuknpQHalAgKlZm//hrk+U56YgDrUBVsIJxSuF6wLlXKPtNB + WlQHa1IX/B8T+F8GcEe0jGuJpWuTrVgnfHRDqi3DIgq3Ztsxmm3FaIYJO5MN2JGoK9AW6LAj6bEBvC1e + Qx5rMpqux/4sEWnZ0qey9TmaIWIqTdo7VfpAqo5qmfndqWZsEwG6KduDvlQPaiPt5Z6NiJs7kZApagR5 + qLFSxnvYnHGqVXCSVhgRuUwP37mTmTtlHO4uY7GyHYOxzTh0bSehYzcZLZuJaFpM+LcBbGE5EVvLyThY + TcbecgIu8ropLlrMmKLLbOG8XnNN8FtsRZi/C8mh0yQeCFa4kLTIjOR5euRLzKjyt6RZ4kVXsBO9gY6s + XmbDqvlGtM7Tp3OxDj3LdOn106LHdzI9S8ex1nscm3wnMLJcncP+2pzw0+aMjy7nvHU4t1SLCz5aXArQ + 5LpiAEtMvBRjz+FAG4YXWVDlrk2i7TjCJK6ttB1P5AxT4hc7E+U9Bf8FbiyZ4cjCaQ7Md7dktosZcwXz + XM2Z72rJPGdj5jhqs9hDi4A52iR4SU7xMxLOr89ObxG5kjPvLVFmAJtx39uCKz6WnPS2ZJ+PNSO+yjLQ + TsK53dmyzI3BJQ5sWGjHgJeIzqXODHm7MKDMCp5vTfcCG/oW2zMorx0K8GRwheRZpRT0LZfc5etAndRR + 6TIr8v2tyQm0JUNyWWqQLclB1iRJmRHpQlb8VDJTZ5CRPpO09Nmkps0mJXk6CXFTiI1wVyEpZorKAE6O + f2IAx3sJFONXkLBUZQCHhs5iifCO6TPNcHDRwdJO47EBbDoZXUP1/48BrGOglMpy0NroG2urZgD/ywA2 + MtPG1FIPMysD1TLQVnZG2Dub4T7dgdkLpQ2ClxIeE0BSagS5OYmUlWRSXZJNbXE2q/JTWJsTyZa8Fewt + 9ZbYNpuT+W7CZR24mOHIlQxnrmc6c0NBjiDXkWtZ9lxMs1KZt0fi9BlRfrwVJmNIcu62JyawAtWM4CjJ + z6IxR1R7vyt5W5/jKcacTDXhVKqp5HJjTiQYckKeOxWvwynRJOckPl0SzXEtQ52bOTo8KFVm/1qrcLdC + UGPPlXJLThdIjso1YIvoloEnBvA6GcN9Mk47hCusijegQTiAgkb5jKZ4iT3CK+qi9aTUp0mZCSzatl0x + eZVf+KeZq9ApnKBDeEdHigmtyfJcujn9hY4MV7jTL/q7M92YVRI/GmI0qIuaQFPMRHmPFn2ZOqzLNfy3 + Aby92oKdtebsrrNkt5R76s3ZL/j3DOAmSy5Jeb3Jhrur7Hm23ZkXO5x5odmGZ+vMebrCkDtF2tzI0+BO + vhZPlxjwfLkxr1aa8JbkrPfKTXm/xJiPRdd9UWXBj6uc+LlLuLDgn62O/K3Riu9rjfm+5r8M4Gpl+Wd9 + vi/R4a8FmnyVPYGvMsfz55xJfJOnzpfyWV/ki14t1OQTwQeCdwvUeVvOvSH69dV8fZ4rNOZhkTn3iqUt + yuy5XGzHyTxbRjIs2CT1NpBsSW+qNS3CmaqED5WEm1AYZkpBqAnFop9achxZXz2NTU2zWCf5uKfEmp4C + C3qLFBPYSmUAb5ByqERQbMFAoZnwYSt2VDgyWuXJSOlUaWs7KpepkyqxNsJajWhBks0YshzGU+6pR9Ms + U9VqAH0+zqzzVcb5DHaEL5A+6Mfh+OXsj/QRjuMt/dObgdAFEidnS7ycKVpvnvD6xbSl+NKhmL4Zy6mR + 46pkH2rTVlCXEUBtprL/bxB1OSHUZYeozOD20liVGVya5E9G+GLSQxepkBaykBi/GaoZwBHenqrZwOnB + i0kNlOdDFlEUt4zeqgRG+wvZ3Jks11pARpgVqcFSZ/G2NBVMp6/Oi3WNvgysWi6vCWJbdxh71sdzYkcO + Z0dLuby/lot76jm7s57T25o5tUn4/4YmRrsr2dJUwHBdJsO1GQzVpglSGKxJYn1VIn0lcXQXRgtiWFee + zOambEa6CtjfX8SBgXz2rcth7/pcTmyr4+HZjbx9/zgfPHOJj56/yUfP3eWD5+7z/nP3eOfRTd64d5FX + b57gxcv7uX90iHsH1/L84V7ePNHH20faeGVXGa/tzOPjA7l8fiiVP+6J4INty3h7aC7vDs3go4EZfLZO + 9O/amXzcO43X29y402DDuYonBrD096O1lpxoerwH8KVa4XDVDjJG7Hip3I5XpQ+9XmqtMoDfLLXgzWJz + lQH8psSI1/MNeCNXn7fyjHk3T8ZMvgUfFFjzYZENH0r/fa/KkVer7HlUZsXNMgvOlhpzRMbUvjIj9lQa + c6jeklMyRi+2OHK52YErdbYqA/h8sSFnC0ST5Biq9g++Vi3juMmB88IlD+fqsSlmHB2+anStGEur3wQa + lkwSjqwlnMiBdaIPhxKmsz11FkcLF3KqZB4Hsp0ZFm68IXwcu1O0OV5gyoVKqQPhpGclnpwtM+FKjfBV + iSf3hHs+Uy9avcmKF2WsP9vqws1mJ4kpTuyvFv0lY6Y3X/mxhcljAzjT9LEBnCmxLduGdflObC50YVex + O7uk3JZrJ3xJ8mScEXWhWpQHCNdbNp5C4QSVgZPpkLi5QWLk1iyJZ5nG7M2S2J9nrjJ+j0p5MNeEwwVS + V1LfR4Q7Hy3Se2IA6/yPAXygwlJlAG9VZvrnWT/eAzjJjMLIxwZwzHI9oleYPjGAbQgVBAdbCiwIFf3y + eDlogZSPDWAzQkTThApCRJOGhpgQFPQvI9hAhcgoM5UBHBltQmSEIRGiXaJF38TFikZLMCM1yVyglBZk + qJaFtiJTckBqghHJyixgyXFZyYbkZYguzLGkPMeckiy5Z8kzBaI9S1INKM8QDpwtvEtQm2tGQ77oriJb + Govsqc+3oTrHisos0ZTpZpRLPVdm2VKRLciwpl7qvrd8Clua57OrdRE76mexpcydrWVuqmWelf1/h6vc + GSxzZn2xsm+taOsKF7bXT2F38ww21bqwocyGbZX2HG+ZwuX2adxu9+QZyQOv9njwTv9U3h+YyYcbF/Dh + tqW8u82PR2sXcLrOmV3KXpk50xnKXSrtsZJtTTkc3dzJrbO7uXt1D2eODnBiXw9n967m4kgLV3fWcH4g + jdM9wRxpXsjhSg+OlDhwSsbRuVJbLkgMvyJj4UahgeQsPe5KzriVo84VyTGXs8ZyMXecjJnxnCocz4mi + CdLHJ3CicDJnirS4LH3kZo0Jd6VfK8ucP5Kx9OwqV55vmcYLrXN4ucOLF9t9RGMF8FxXEM+sDuGBxMKb + vaFc7g3haMdytlfNY33BNMnT01mTP511BZ4Mlcl3rLZiZ4M9oy0u7G93Z7RNme3mzOYGyQ9VTnQUuahW + +MpLciYu1J5gPzu851swx9OY6S6Gqm1MFs+wJ8BrKhErFhLkM4eFM52Z4W7LwlluLJ47VTVD2MbcAGN9 + jccwUMfQYJJgIh7uFqwImEN6RiirWgoZ2tjOnv1DHD2xi4PHdnHg6AgHDu9j/6GDbN05Sm1jJ6FRmSwP + ySC7oo+29UcYHLnG8J5rbNpzlS17rggusWXvBQZ3HGP9tgNsHT3G4TNXuHTraS7fesCVW3e4dvs2t+/d + 4d7Duzz30rO88PJzPPvCMzx4dE/O3+TGzctcvnyC82f3cebEZk5KzD4sbXxgk2IAZzC6PvaxAdy1nPUN + C+lVDGCp521d/gy3etNfM5fusun0/jdKZ6qgGMKPTWFlT+uFrC/zob/En+aUJRStFN680I2IJzOAV9gb + 4Wetj6/w2H8ZwElz3Mj1nUVJ4BwqgmbREi3XSZzDzow5El9nciZ/BteKPbkvOeBhrSP3WmZzvWMZJzpC + 2N0UwtrqUDoqY1XLl/c0F7OmOYe++gQ6SpbTWbiIrqJZrC2byVDdXDY1zGFDtdxriTsdeQ60ydhsy7Gl + NVNycIoFdRInyqP0KRS9mS9QlqyvihX9m2hDQ7KtwEGgzAR2ZFWqE21prrSkudGW7k5XhqfEOdGLOZ6s + zRMuUjRNeM104Ygz2FYxg121Mxipm85ow3QOt83n8kAAlwcDONvvx/G1vuzvXcb2tkUSH+axuX4GGysf + LwO99YkBPJhvzFC+IZuLzdguvHhXlY1A+FiNDbsFigE8qswCbnGQMeKsMoIPtjlxoFVyhYyHvS1T2dsx + n329/hzoj+LoRiUGlHF4UzWHNtZzaKCOfV1ljDRksrcySeJ5Amcr47lUHS0I41xVMKeqVnK8JlhydBhH + 6qI5XB/Pwfok9lYnsqc6iZ0V0WwtCZH7XcFgoTfr8xfQlz2T1VI3PVluKgNYKVdnutCR7iL15qQygJtE + aytoSbejVZmcmC78W3T96gwH1og+WZcpXDLTgQE5vy7NhrUpiv63oF9i+pp4Y/okb/WIZl0dpktniAZd + IRPpjZjIhgR1dmbpcVD486kaK04KDkvd7RG+qeyhv0YxeJMM6RL+r6we1CFxW6URVAaw0f8YwN1JuqxJ + 1pXP12Moy5jt0iY7FBQI78+zYLe8fs+T/23uTdBjb6IuR1J1OZ6py2nhCdckr98sfwxlEsJtyfU3RUNc + FW5xJU+fizl6EjcVs1iPc4KzebqcEZwUHCvQlZyrw8HCxzhQpMN+BcW67CnRY6REn91FunJPwkfktUMS + kwcL9AWPZwFvKjJki3zWduE+u6odGWmcyoiMo22Nyg8iPFQGb0OW9HEZD03Z1gIbFRqz5FjQlmsrXH4K + 21ql/3R7s1egLCG9sXYag+Xuwt1FN8k1Nhe7SH93ZUBZwaJWOPzqhRyRPn7lYCrPXKvjpburefXhAG88 + 2sFbjw7xzjOneOP+GV68doobR/dwetdG6ZPrObljAxf2buHS/m2CLVyUGHp6Tz/HdnZzaEs7+ze3cGDL + Kjb1lNJQFEZSqCdRy22ID7QiRThDlvCDnGADCpWtxyKV7T1N6BVONCi6bljy9ZYyB7YqBrDokn3NszjR + vYRLQ8Hc253AC0eUfYCreeFwOTe2ZnJ6bTyHOqTPSz463uXHyU6JPZ1LOdmxlPO9y1Xm74NtsTy9NZY7 + wxFc7V/J5T5/LnT7cmsglFf2pPGHM+WorQrXoiVcXUiWkEPpTL3JOrTHTqQrbiLrUzUZTNVWTS/fJORi + mxCKLVKZ/dkOdKSKCBJyUyAkqCzOmZq06ZTEu5G20pKYpUKmluoS72dIlgiK4lh7qlJcqEy2pzzBnOoU + U+pE7FaL+K2OU8xfeSwkqDldGlUEfmuGkBcZTA2J5jRI8KuNEdErpbJn5cYCB4ZyrBlIM2N9sil9cTI4 + hGDVrNQl328yaUueIl0hj0K0KuKtKIu1pizSlrxAM5KW6BCvzFaaM4ngqWNZ4TaGQGc1wj3USJ41hqLF + k0SIyaAK02cgyoBhEeqDkSLwwybTH6pJb6g+XStNWeVvRdE8E+LctCRpjGWJ1QR8nTQInKZDyCwtIuZq + Eb9Ah1QvffK8jSj0EcLmbUHOEgvi5X1h04wI8DRkmbM2i20nschmPEtsxuFjOxZfh7H4OQmcx7HUeSwz + 5f7cHdRwEpHpaKmGi5ka0yzUmGerxgqn8eRN06N5rhH9S0zY6m3I3mVCfH0ncd5vPHeDxvFGwiQ+TJ/E + ZzkafCMD8W+Vpvyzxoy/15rzY50ZfxXS840M/s9FUHyUrccr0RN4IO+7+mT278HZahyYN4aDXmM4rJxb + qcbtVA3eE4H/7aALvx3wfLyv7mUPfr8zBe57wC0nOGPOr3tM+Nvaxwawsrz0F9k6vBs7njejJ/JK7GRe + ipvMizGTeFnKNxPV+VCC0mdC6j/PN+XTbEP+kKbNx0ly/4lj+TBlDO9nqPFBvhoflqrxh1o1/rhqLJ91 + PMVnnWP5Y9cYPusey5/7NflhkwG/7bOBo65wwv3xMtXH3OHYVDgi5T4X2GHL7zstYe/jGcC/HbdWGcC/ + X3KAG87yPeS9z8h3eXkGv74+j1/eXMSvb/vAu0HwXhi8r5jAofBRCHwcyK8f+fPrxyv49YPl/PLGEn5+ + YR7/eDSbv92dzt/vTOMfN6fyvdTRXy+48vVpRz49bMUHo6a8tlGXZ/u0hDRrcb5Ok51CVnuj1FSzfIu8 + nqIt0pK1ye6SVJxZLQKiO3QCA9Hj2Ro/nj2pE0T8GQgRMeV8ph77wyewYbEavXPV6JylRoe03dolY1nn + +xTbooTwSjB+tNaWTw5P5R+3F8CzXvId5/L7g1n8fH0q3xyx5d0NOrzQNl6IrzqvdOnzWq8xH2924uvd + nny7y4O/j3rw8y5nftvpyK9brfnboCl/XqPH553qfLBqHG9Ku7xWrcarNWq83jSGD9do8dlWE/56yJF/ + nvfkp+szpS5m8uOtWXx/YzZfnJnKu6OOvDhowdOrjbhRpcn5nLFcSBnPtZTJXI2dwPnAJwZwmBqP0hQD + eDKfDGvzxUF9vr1swff3bfn5VTf4cBp8oZi/Un4lffErT377xJ1/vG3PDy9Y8919S767Lv3xkhnfnTPl + LycN+faUPt+fNeYfcu6fly35+YqVlFb8dMmcf5w34u+nDPjbMX3+ekCPb/fo8fWoMd/us5LHdnx/zIWf + L3jw27XZ/Hbdm5+ureTbs2G8ts2HM83TWKP8qnepJtHzNIheoE30In3ilpiS5mdPbqA7OcsfG8Bp3o5k + rXCiKMyNUsUAjnFRLZ1fGu9CaZwdZfG2EiudhdRNoSNjhpCCaTTLa+ojXehMmykEbw6loXZEzpxAknxO + tZwfLvdnX0sMfZkLKPEzI2+xLiW+htRK/GoMM2NVpCltMWZ0JVrQlyaJNNuRDbkuT34VqBjAM9hdu4AD + zcom80vkWj4cXxPCmeFYTg7HcHgwQghaFEe2JXBkZyqn9+Vx9VQtl483SSIsYnRjMeePruGN5y7wh9ce + 8tEr93nz0Q1euHGWY1vXCxHOIidkKbGLXCReWhA2U49Aj0kEuI4h1GMMibPHSczUpiPGjv4EJwbjFAPY + kTURkiOCTKjwFSLsq02rskR6ogedUULegu2eGMCObI5yZFukM1vDJGeF27BF8tDmcGUfWUOGQ7RYFzSJ + 9cETGY5SZ0ecNqP/bQDHGXD+iQF8RXLUhUQjziXpcypZX2UAH1aWgBbxvTdVj91SbolTZ13IGPokNvaH + TGAwTIvNQv62xZuwKdaEwRgjBmKN6Y8zoTvWSL6TIU3KP4PjjKgWolguzxUKqc+W/JIZok9uqCG5kSbk + RpiQHWVCXqyIfiH7ZcnSF5LsVQZwUZxiED82hBUUxkpOUsGGnHALEvx1CVk4ES8XNeZYqTHbRI25hmos + k9wRaq9GnPs4MqZrkjtLRMVsERcLDMn3MiZnsen/YQCbEifHiZLzkgNsSQm0JUFZAnqZGRFLjFRLQCsG + cMR86efS9xIX6aiWkS70ke+1zITq5SbU+RrR6GdAy3Id+gINGQo1VpmyB5KsVAbw3ihDtq3UZHuQ1mMD + ONKIQ7GPDeB90mY7AnUZ9J3MBj9NhoL02SBtuE5ZGk7Qs1KHlmUTWeU9kU55vjtAW9pBXqO0tfCTXVJP + exOsOJBoxX5pD8UQ2BWmznaJoztCxrM3Wos9MdrsitJid7i2Cruk/XaFyf2EKIawFiNybk+EjgqKEXxA + 2upgtJHAgANReqpze8J0GJHX71g5ge0BEp/9x7FtxQQOxghxFpJ3s9SR+9Uu3K625WalpUAxf824KqT7 + ark5V8osuVyq/GPPlJNCvg8rS/xlaXIgR4uDQrIPKCRbMYFL9TlaZcTpOnMuKgZwq73KAFaWgH6hw5Zn + V5nyXIMBLzbp80rTfwzg91db8V6nJW93mPOGYgILXmsx5dVmY15qNFDh+VpdHlSoc6dkkkBdjrXl9da8 + 32nLBx1WfNhqxsctxvyx1YDPBV+2GfJluz5fdspxlzF/Wm0mpRmftZjwYb0+79YZ8FGzBe+32PJCjQXX + RUAcFT5yJFmbgyn6bI8Rfhk6mfUhmqyXdu0L0Jc21KVdeGOX8MjVwTa0+ptTtcSAEulbRdLPShZpU+Ft + QLWv8MblppInDan0UQxgHUqXaFLlrUP9MgPaAkQsBVsIZ7OkJ9Sc7mAz2gKNaAg0EK4o3FBlAEsMUczf + /8MALpGxo5i/1TIOa4P1nhjAOlTLfSozUhpCtAU6Ekd1WSUCry3KiNXx8lkJivizZkOaiOMcJ9U/N/fk + 2zOSZcG2FCO2xOtK3taWUpvtyXr/NoN3SX2MpuuzP8tI2tyA/ZLLDyrLQidrSj1J+4u425dhxu4MazaJ + OF2X7kpbvDNlwZakL5G8MvMpgoXDhggipz9Fkpc62SuMyJfvnB5oStRSfZbP02b21MnY2o3FyGocWpYT + 0LSahIbVRDQslBnAEzB8YgDbWanjYqeJm70m05x1mSNcdcEMY7zmmOHrZc1KH3uiVriRGjqDHEH2CleS + F5mRMleXIuGh9X5WdATa0x/swtBKySn+Dqxbasn6JWYMSbtt8jdi4wrh1n4arPMexwbv8WyRuh9drsnh + FToclzhxepkep6UtT0ubnvPW5EKABlfDDbgab8nFOAeOhTiwxceO2ukGJDlMIlRi3HKrp4TT6xI0y4KA + uY4sneXAwul2zJ1qyywXc6Y5GjHdwYiZjsbMcjJlhp0BM2w1WOCigd8MLWLma1PuI+Ja+tMO0S9npN7u + KktALzXjvo8lV32tObHMin2+NoxKvt61wp0dKzzYqswCXmLPwAIb1s2zVaFfsHauDd0zLeiebSmczIp1 + XpJjvV0ZWiav9/Vg2M+Dfh8Xupc60rzEhqql1hQtsyZvuS1ZEmtTJeYmSu6O8TUjzt+ShCAHEiW3J8a4 + Ex/jQVysB7HCFyJCnQgJsCNU6jwqzJW4yKnERk4jJnIGMVFz5TXziVYQvYCoqHmq5Z/nL7LBc6qhygC2 + stPA1HISBqaT0TfWUO33q2eoi66BAh209ZU9gTVVJrCekZZqFrBiAJtaGGBiqYuZlb7KAFZmAVvaGmDj + ZILbNHvVPsDLVi4iPHoFaRkxFOanUF6aSU1JDnVFOSoDuDc7iqHcAHYVL2V/0RyO5rlzMtOB8+nOXExz + 4bL092vpjlzNtOdKpi2XM2y4kGrJacnPR5RVOyRu7whXDGAttkfpsiPyPybwdiWWR0hMl5i/P+6xAXws + xZgTqaaqmcBHE405HG+oyvfH4pS94TU5kTiZc8I7L2ZIf8vR5W6xOfdKrLgruK2YwDX2XKuw4UyRGYfy + ZEyniT5Mlvwvmqg/XY/eVAPakxTDV5860Y918rn18QY0ymfUy+PaaD3V+UY5tyrh8UxhxexVlnruSleM + XzPahXe0yzll5nBnhjl9EkPWFzvTk2NFS4qhvFebesUAFh3VHDuJzlQt1mTpsj7vPwbwtipzdojGU80C + lti7R/LF/nozlQF8ol4xgK24JBruarMtt1fZcb/VgWdaHVVLuj4SXfhQ2ZagSIdreRrcytXkgTL7V7Tj + m3Ktd6oteK/cjPeKjfmwRDGALfmxxZlfuoQLdwrfbnHkxwbFADbh+xpDKZ8YwFX6/L1cj++KtfkmdzJ/ + yhzHl6J3vsmZyDcFGnxZKFqhUJs/FIq+zJvEG7mTeF3KV/PVeTlPixeUJblVs7ukTQqtuV1iy6UiW07m + Wkv8NGez1NuGZOGzKgPYiupoC0rDFAPYhALhHIoB3CpxWdkfbEPtNPoqRFMVW7M635yeInlfkSXr5LqD + RVYMl1gyJOeGBVvkNaOVzhysmcqR2tlszXGlKUCXrKlqxAqXSrQfQ4aT8FUPDVYtlLHu7cAGiQvDK6ex + OXiW9MmFHEkL4Fp5EvfqsqQPZXKtMo3TRXFsT1shum4+NQFTqQmZQUPsAhqTltKU4kuNsl9hrBcFkfMp + ivKiJHYJZQnLKE9ZTnV6INUZK1WoyQqmNNmPjNAFxK+YLZilQpz/TKKWTSdiqYeU00heuZD04CWkBnqR + HLiArNBFtBVFsnNNoSCHrsoASpI9yRdOrWyf1VY6n64qL1pL5tNcMIf20oX0VHuzuTOMI5uzOTtSxuX9 + 9ZzbXcvRTRXsW1fOaHc5OzvK2NSUL/WcLnUaT19xPGvLElhfmcCAyvyNpj0nlOb0lTTJ92jLDmFteSxb + VqWyoyud3T2pgiR296XI5xRz9WAb988M8PDMZu6f3sr9Uzu5d3qE28d3cmnvEGd39XJ6WxunNjZwZqia + 80Pl3NpUznM7qnhpewnPDaXy4nAC7+yI46OdYby/yYe31s/mzbVTeK/fg4/7PPmsdwqfdU/loy5P4UXO + 3K634ZxwNGUJ6KPS149Ivz/e+NgAvlBlw40yG+4XW/Kc9JmXCix4XfqIYgC/JRzuLYkZbxWZ8GaBsfRf + A17L0efNbCPezjHm/TxzPsi34KMiaz4qteeDKifeqLLnOeF/d8rMOVdipDKd95XoMaoYlzJ+T8qYPL/K + nktN9lyuteZShTmXy01UP0S5Iv30qrz3ptzT7VpbLirLQ8tn7hKetUH47cZIDeHCCu/WpkfJuVH2bE3w + YLfoxgM58zlXvpRzFdI/812FmxiwMXoSI8I3jhdacFaJc3JPp0tMOCXj/GKVKddrzFRLRj6SePKCxI+X + JWY81+rCrWbnfxvAwxIblf2zFQO4NtOEqownBrDwoI5syY9PDODtivmb58jWXDsGM61ol7hYETSZwuUT + yPIeS47veOFhWrTHCd9PNWZYrrU9w5BdggPZxhyU+KuYvwfkcw7my3G+8OYCA44USSwv1+V4ufb/GMAH + K63+bQD351iq/rGu/O8xP8JQxoMu0X56wmvMiAyyIizYlhDhn0HCIYOCLOTYnJAQM4IFShkW+nhWcEio + cvzECFbNCDaRcybyPkNWCv5lAEeIjgsX/hImmiVKmQWsGMDxwpkSBUkKLEkTZCZbkqGYwgnGpEjOSJX8 + lJlkRI7ca1GmxLMsc4ozTSlMM6IoxYBSKSsyjf9tAFdnm1Ivfawx34qGPMXgtZBzlvKcBZVS/7U5NvK8 + nQp1ctycZ0ufYvg2zmZX81zJFzPYVuamWhJ2V7VwG8HGSlc2lErcLBKOU2z3eBZwjTtb6jxYVyY8p1Bi + r4yHw42uXG6fyt12T56XPPBmtzsfyBj7eP10PhmayydbvPh4mx8vrV3AxTon9ubbsj1bYmTOEgbzV7Kj + KYuTWzp5cGGEZ27u59qpYS4eXsPVQ71c39/O7T0NXNuaz6X1sZzoWMbh2unsL3bgSLENp0ttOC/j70qJ + OdeLjbhZoMfNPG2u56hzOWsCF7PHcT5vPKcLlf+DTeBY8USOFk2SUoMTko/OlulzodKIS1XGXJWxflPG + 0u0GJx40T+Pplrk8al8qOms5D7tCuLc6nFs90VzvjeXymhgurI3meG84o82+Uj+zWVswQ/LILDaUTGVT + pT2bay3Z0WDL7lUO7GlzZlerk3xXJzbJ9fsrHWkvdFRt75Sb6ERsiD3BvrYsnWfO3CmGzHDRY8EUEwIW + OBPtP5vUSG/po3NYNNOeGc5mj1e3meHMVGdLbIy1MNSegIHmeHQ0heNrjEFPewwuTvr4+k4lLS2QVS15 + DA03M7pnLYePbeHQse0cOLKD/Qd3s+fAKJu376CmvpXQyHT8QtLILu+mdd0hNuy6ytDoNYZHrrJp91U2 + 777MppFzDG47yIbto2wdPcDBE2c5f/Uml27c5PLNm1y9dYPbd25y/+EdnnvpES+88izPvvCIB4/ucOf+ + LW7efmwAnzs9ysmjQxzd18mhHdUc2JzH/o3pjKyLUS0BvW11AIPNS+mvW8jWTn+2dvgz1OzN2pq59JbP + VKGndMZjlDxGrxwr6Cudw5qyhawt9WZN8XKakhdTtHIWKYtciZxiR5CzBf52hvha6bHMQpcAW0PCXa1I + nuNGvu8MygJnifabRlv0dNYlzmBP9ixO5s/gUvF0bpe680DiydM1ttxvns6NtiUcb10hvMtf7sGfVYVB + NBXH0SZ5sKs6ie7KCLpLfektWSj3NZuBiplsbprL1qY5DNdNp7/cla4CezpzbQS2KiO4Oe3xRLjyaH2K + RG8WRehSGi0aNk7GeZINDSmKCWwvpT2NyXa0pDrQnu6mWilwdc4U+vKm05s7RfrkNNYXTmNLxVy21yxg + tNGLAy2LOdKxhMPtizjQOp+jXYs51+/Pmf7lHFUMtQ4vNjbMYa3wpd4yD9aUuLK+xJGhEnu2KAawslJK + gYnAkI1FpmwpNWe7xNgdkot21yqwVZm/j2cB23JIOKaCAy0KHNm/yol9LZ7sb5/LoV4/jg5Ec25HARdH + arg02szl0XbObm7kWG8ZBxrTOFQRw6mKaMl/kVyvDONGdRBXqgIkH8s91wZwqi6IY/XCTeojOVgXy56a + GEarY9lZEcHW0iA2FfkJt1vKQMF81uZKP8nyFP3hRm+OG92ZrnSK1mhLdaJV0JzmQGO61KmgWfS8MhO4 + Jd1W6tWe1ZmO9GU6sVawPt2B9U/M374k4ZAJJgJTeuKM6ZZ26go3pCtEj45gTTpCJtMTMYm1cepsSddh + j8SpEzVWHBcclFy+u1j4puSyXonrHYnKD0mV7WNEE6SZP54JLNpFgcoETjFidbI+q5VZwFKuSdVnfYax + 5FVLtgi2FUjMkdi/XfTCzgRddifoqTCarPxvQZcjohdO5upzVXL7DcntN6RUjN+bkrtvFJpwVfLpFeER + F7IkLmbrc044zFl5/clc4QaCI7m6kn/lO0iMHVVQoMNovg4jUo4U6sh30WVnkR7b5fHWQl2G5bkN8p4N + eXpsEB6/sUifzcUGbJPP3iX8ZU+1A/ubprCvVfhy4yzWl7vTqRjAmZLDlBWBhR80SP6rFz1UL/XRJOOi + LVv6X+1UdrbPY1+XF3s6F7G9eTYbq5Uf3rgxWOjARomtW0U7ba1wY3OlG9sap7Ov14ujg9JvRuO4e76E + R9ebee72al66O8QbD/fwzjMnVQbws1eOcGr3oMShdrb1NDG6rpWjW/o4tWs9p3ev58TOHvZtXMXOdTVs + 7i5leHUBm3tL6JO+Wp7pR3yQq8RsGxJWWpISbEZmiDE5wfoUBOtQGaFHs/Ca7nRTyX02TwxgRxk/kh9q + 3NjbNJMjnQu4sG4FN7fF8GhfNi8fr+DFIxXyOIfT6xM4Knno2OpATqxezskuX4GPavnny/2B3N8Sw/Oj + Kbw4ksLT2+K4NRiuMoHPr/bl6tqVwo0TeP94EWqlfmOpDZ7AqmhNOpO0pVPp0pGgTneyJhsy9RjO0Gdj + hgGbss3YoSwVUO7J+nwX1f4GxaGGpPrpkBFoSm64HXmRDqQFWZKw3EhgSKK/sQgOczlvTUm8PaXx1pTF + mVGVbEqjNGajiLZGEbwN0rkbpFQZwJmPp9w3SnCrT7AU8WxOTZQRzUKW1mTbsT7bWoS2KX0i5vtipfPH + yECLNaE5VI9Sf4U8TqQ0RJvySCMJmiaUhhtTKsQsf4UBWct0yPZVoE3aEnWS5o8nafZYMuc/RYn3OBpX + atATpc+QEK6dQlj3yQDam2Wq+hXF1kQjhuQe+qOsWB1qT7WPJanT9fG3mfDEANYkaIYB4XOFRM5XjGYd + kpU9FRcbkrPEVGX+pntZED3HjJXTTPF1N2Sxsx7zbCYzx3oCc23Gs8BuHIsdxrLEUUrH8cxzGIeby1M4 + OI3BQUSmo40artZqTBfMtR3Dcvtx5Hjq0DTbiLWLJAAvMWZ0mQzOZRqcXTaR6/5P8VLMON5NHc+nuRp8 + XWLAD9XmT8xfc74Tof9NlQlflJrwBwni70p7PxcxgdsBT3FhiRqH5qip9v7dN38Mh4WQn/Afx5ngp7ib + qsG78v5v+h35ZdSD30948vPFKfx2awrcdYObDnDGhF/3ifDv/48B/FmmFm9GjeXViHG8FDVR7m0yzysG + cKw6r8ery33q8gcJgH/MMeXTTMUAlsfJGnycPIGPUseqDOD389T4sEyNP9SM4dPmp/i8bRyftY8VKEbw + OP68RpMfhw34fVQxdl1BMX6PCo54CqbKOQ8YceK3zZb8tMmE33aZ8/t+S345aqkygLnkBDdc+O2uM78q + Swu/OJVfX5/Db28v5Pf3fOC9QHg3GN5RZgIL3l0pzy3n76968beXFvLjcwv57sEs/nzDk2+uuPHlBTe+ + vaTsAezJXy6485dzHnx10pnPDokAHDXnnS2GvDagz3N9htzvNOZ0tQTNjAl0hanRIO3XLX24P96OgQRr + 1kXKWIzVFPGjx2kJnpdK9VXr9j9dY86VbG0OhD3FRm81BrzU6F+kxrolYxiSNhsOGsdI0kTOV+vz+jZn + vjo3k1+eng/Pz4HnpvHbQ09+ueXGj2ft+XiLNm/1TeLtHm0+3GDGp9sc+OuhWfzz1AJ+OjlP6kjq4pi0 + 9QEXftlrzw9bzfnzgAGfrdbiw1UTeat2DK9WqvGitNFzpWq8Uj+Wt7rU+cMmc77e68y3x6by9Ylp/Onk + dD47PoO3drvwqN+C6806XKiYxKmssZxNH8eVdA1uZehwPX4SF4LUuBKgxp1INV7Ifop3V2nwyUZtPj+g + y7eXzfjxoQ2/vOYCH0n/+0KZ+auYv9LOX7nz2x9d+cf79vztdVt+fN6W7x9Y8d1tS769asZfLpvy3TVT + frhmzj9uWvPPW3b8dNtehV9u2/LrbWt+vWbF388Y891Rff68V49v95ry133W/HBArnnEhZ/PePLrhVn8 + fGEJ/7gYwLcnw3l52JtTNVNYI/Ery1ubOC9d4pYYErPYiGgvUxK9rclY7kzGMheV+ZsuyA10pSTcU8id + O6UxbioDuDjWheIYe0pi7aiIcxSi50lb2nRak6fRGOVCbbiQlcRptKbMoCTElvj5mqQu0qNSzq8r8mZn + fSgt8dPIX2pInpcOJcrqBStNqROR2hhqTJOQk9YYUyERVqwRkrMuy4mBPJcnBvB0IXCSWBsXsVfI4l4h + 4Ae6/DjUF8CBNYHsk2SydyCYg5uiOLE7hYuHCrhxuoYrx+rZuymHHRskSR3s4vVnzvGH1x/xh9ce8d4L + d3n51gWObR2guzyX0tgA4ha7EjLTGD/XiXhZj8HHXo0gVzXiZowhZ5E6dQGmtIeKYI8U8RnlyJpwW1rk + XMlSLflemrTHO9OXMpVuqTPFAO4T4T4Y5sCmSEn8kc5s+y8DeJMI802Ss4aDtegPmshAyCQ2RSnLP2sz + Eq/LaJwu+2KFHInwPicC/JLkqYvxchyvzxkhUScTdTmmzAAWEnUgRY996foqA3hznAb9IWPokT7at3Ic + A2FabBTytyXWSGUAD0mO2iDlOmXfh1hjlWFUHyntJFCIfbGM69xQHVIDNUlZoUl6oA6Zcp+ZIYakh0n+ + iJLvm2hHpRDTilRHShJsKIyxUpm+JfGPDeDHs4KV84oBLDnYX5eg+eNY4Cj5wkyNqXpqzNJVw09yR4Tk + k3j38aROmUzWdC1yZ+pS8P/HAI5VZvp6GRDmZaha9jnax4QIKcMWGxD63wbwPC0SF2iRvkCX3MXyvZbo + U+ZtQNVSHeq8dWj00aBL+MLASn22y3fan2jJ0VRrDkj97A7TY2eIjsoA3vNfBvDecBO2rdBm/VJpLz8N + hoIM2CB1szZYT+pbi67lGrQvm0SXrzq98rq+AG36gw3YHGXOniR7DiY7cijJjkNPDOBRxSSIEAIeOoEt + IePZJbxnd4w2O6OU/Z912SUCa6diIIRpslUxdKUtd6qMYbk3OT8qr9kbacC+aCOBAXuFL+yRcyNh8p6g + SWwOGMfmFWPZEjCWrYHj2Bejw0nhK1eK7bhV6STCxZar5RZcKTPnsuTdC6WmXCgx47yQ/3NFFpwqVGY1 + GLI/S4s9GZrskXK/kOh9RbrsV1Cqy6FqEQ6KAdxsy602Bx50OPBMpz3PtlnxTLMpzzbo83yDnmof4Nda + jHir3YT3Vlur8HaHJW+0m6vwWqsZr8rrX1IM43oDnqvR5elqLZ6r0+fFRhNebTHn3U473muX97ZZ8L6y + FUCzIZ+s0uOPzbp8vkqHz1t1+KJdj8/bJQd0Su5uM+Zjud67VVq8XaXD+3UmvF1vznNlxlzP1uWEcMsj + ifKdErTZEanOxlB1hmQ8blipx9oAfXr9RdT4CacLsKA7yIaOQCH/y8yplP5XvkiXssW6lEu/qlSMX18j + 1WzgiqWKASz8b4k2Vd561PkYsGq5Ca0BZnStNBeYsTrQjNZAYxoCjSQGynsDZOwF6lESqE2RAhl3yhLQ + RX5alAXoUhVqIPHVmDopa4J0qZH+ViNjtE76aEOorkCPxnB9miMMaJX+2hZlQke0qcR8awZFNG4vcGdP + 2RRGRcTsyrJmS4opmySObJYYs0kxgEXk7U4VpBkymm7IvkzF/DUWGLE/U599KdrsS9Rkf5JiAEs/y7CQ + 69jTr4j8KOHREscV8zdm7ngipqkR6qlGzHQ1srzUKQ8yoT7ahjpBRYQN+SHKku1mLJmtg6P9BIwsJqBl + PhF1i8lMFqirDOCJ/zaAHWw08RRuOmeKKV7TLfCZY43fQlsCljiw0seREF9nIv1dSQqcQsbKqWT6OZGy + 0IRUuX7JImOal1nRG+AgvEPib6AL2/0d2eVnx25fG0b8zRldYcJIgBE7lmuzyVvGoYzfXf6a7F2hw+EV + ehxbrsdJPxGbPjocX6zOKW91zgRM5kKYLhckX52NteVomKPEBSfq55iS7KxOiPVT+Fo9Jfx5MotcdJnv + bswsd9PH+6i5mePpYIyrnQFuNvp42BrgaW+Ih402U6wnMddxEj5TNIicrUnpUgNWS/9RDOBT0q9uS5x7 + KLHwjq8F1wLsOBlgzwH5biOBzuwO8mR7gAebfF0Z9LKjf54VfbMs6ZtpSe9MCxV6ppnTI3XYM11ivxyv + nSX9Y4ETmyTvbVrqxobFkr8WO9LuZUv9YmvKl0os97VVmcAZflYk+ZgRK58fIdw+QspIf2uiVtoRIQiX + fBcSaEugnyV+EqeXy/OBvtaErHAkKMCJlSucBW4ErvBghSAw0JMAaTNvHydmz7PAY4oh9i7aKgPYzHIS + RqaTMTTVwtBED0NjA/SNDB4bwLpaaOtpyLFiAmv82wC2sDYWGGJuZagygE0t9R8bwA4muEy1Ve0DvNR/ + vsoAzsiKo7QkkwplBnBRFnX5WazKTWF1dpRoukC2FS6VsTKPw3lTOJ7lzNkMN86nuXAx3YnLwk0up9tw + Ic2KC6nmnBecTjTmWJweeyW+7orUfBy/RQ/ujtGXmK6nMoC3KktDKys6REn8VAzgZCOOpZlxXPTmsVQT + yQky3mINBQYclGsdjNPicKIGJ1PtQgT3AAD/9ElEQVQmcyZDg0s5utwoMOVWoTk3BNeLLbldZcdVxRgp + seBQvujCNA02pKizLk2TtWmSk/4fBrBi/qoMYLlH5VzDEwO4JVn4QIrEDtHCiiHRKnGiRXhHS5JoWmUZ + aMUYzrahK9NKtRRcs/CPxngduZYmDXHqtEg87UxTDGA9BvL/YwBvrTRle60FO/7LAN4neu+QxOMTEo/P + Kgaw5I+rLXbcENxaZcu9ZjvuN1jxoMaMexXG3CzS42qeJjfytLhXLPmk0oy3a614r1pQ+t8GsBU/KDOA + O9z5td2NfzSLLqiz5Pua/5cBrMnXuRP5k3D9L7PG81XeJL4p1uZree7zMj0+KtLkjZwJvJQ9jhelfCFf + necLtHgmX4+HhSbcK7BQGcA3i6y5VGCj2gJnb5ro3xQzBpMtWPPEAK4VDlEabqYygAuF75aqDGBneko8 + 6C51oatYWUbOks584cCSexUTWFmyUzGAN5ZYPjZ/pdxZasu+KleO1k7jVMM89hZNpSfclKLZY0lzVyPb + cwKF0zSonmPAmhUuwlGmsDl4GlvDZ7MjfC574pdyqSSOV3or+XBzG5/s7OadTe3c6SyRPh9Be8RcSiSG + FPm7Ux09h6q4hcL3vYT/LyB15TQS/dwlDniQunwqWcFzyY9aTFmin3DBFZQlLyc3ejGJATMIl3iiLPcc + uvg/CFs8RbjaFGL8ZqoM4DTFAF65WPjhPJJWzKY6LYDhjhxG1hcz2JpAs4zDqoyZ1ObMoq18Ma2li6hM + n05RgjvlwrMb8+Yx0CS8fyiLU9tLOburmkODRWxuT6OvOo7uYgWJUsdJdBbE0pYZRntOhGq55/7yONZV + xNOauZLKmMWURCyQtpkn5Twa031ZVxnBYEMkm1dFsr0jkl09cRzZmMOJbUUc3VIix6UcGqqQz6vm8FA9 + +9fXsGlVNgN1iayvjmKwMpQ9q+Q9bXGc6YjjyupYbnZFcleZsdcbyCvr/HljnRcvdXrygvT519vteX+1 + M590ufJ5pxufSf/9sM2VV5oduVNvy7lqC46XmXCsXMaNciznztTZcabUkvM5RlzPMuBuhj7PZhvzqvQj + xQB+u9SCt4vNebvITGUAv5Ej+j7bkNezDXgzy5D3c035IM9M+rglHxXb8EG5PW9V2PJCqTl3S0w4X2TA + cdH2+4pEk8iYOFxryolGK8402nCxXiD3oRjA16ssuVvnwL0aR27L+2+WW3G1RPRKoRGnc/U5LDFB2Tbi + ULoJe2VcbI1WfvgqmiTait1JrhzKmsXpokVcrvLhQtUCThT9/xj76/C6rmuLG1ZiFDMzWZJllFG2Jcsk + ZlnMzMxMZlm2LEsWy5bMzGwndhKHOWmggaaYpm2aJg2nye+b+8hJc+973/f5/hjPOrDPOXsvmHOMM/Za + a+4Ux0gSfptuxOkC4aJyPWeFm54ulLgp53WpzIRblabcrzbjacGLEiteaRbu2TKHxxuduVzvJONE+TPT + nJ0PDeDqDKNfGcDWdGTasSvbgf25TvQpEzoybenPsWVPujXN0XoU+c0ka/2jpHg/QqYyczlWYmOSuYxp + 0VBpxhxIN2RI6nxC6vJwtiFHckw5Ir9zJEd4k1z3sVy59oKp5Z/P/n8YwLsyLSTWmqpuwM0JNyRBuEfU + Rn0i/cyJCLJ+OPt3ygAOCLSU0pygEHMCH5YhyozgUCtCwqQMtyD0YRkeIa+FKscYqwzg8EhzwkXrhAs/ + DAubMoAjHhrAiXGWJCVYqMzf5EQbkhMsSZPnqfGiv+IEkh/S4k2nDOAUc/Il/hdJPiiS+ixMNaU41YQy + eVyp7A+cbU5VtgXVigEsj+tzLKW0oDZTXpdrrc6yoC7XhiaJl62iRdoKhUcW2NGeb8fuUleG6hYzJjgo + MW601IXx0jkcrHBjuGoufWXOqtm/u+TYrjwbuovs2FvqSJeU2/Ms2CHxc1+hBQelbq+1uPNEmzsvylh6 + Z5sbv9s1nz91L+DPexfzl94VfDywnre6VnCn1pmTeXbCaecxlO3FgYJAxupTuTDQxnPXxnnp8SM8fqGX + a0e2cPNwJ48fbuPJw/XcGy/iVl8SF2Q8n6hfymSpM8eL7Thf7sD1KkfuVNlxt0LydbERd6QfKDcw3czR + 4GqeuugrDS4Ua3C2VJMzZZrSR7Q5VSqaXnLOuTIjed2IMyXCO0WrXC634nq1o/TrRdxv9uR+23rudQZy + d2uEyvi9uTuJa90pXOpO4nx3PKd3xzLZFsSe4pUq0627aCm9pYs4UKkYwJYMyVgZbrRltNmeQcmzg42O + 9NU701XhSHuBo8RYR3LinIgJdiB4vWIAm7FigQHL5+qxYbkVsX4LyIvzoUhifkLwMrw8rFlgr4OHs5FA + uK21HrZGwuG0HkV/9iNozFBj9nQ1DHXUcBZ+5yM8MzlxPU2N6fTsq2V8vJOjJ3o4eXaA46cGmTw2zMHD + I+w/0EdFdT1B4YlsDEkiq2wLLT8bwAdvs0/K/aO36BuRcvgi+4Ym6B0eYvDQQQ6fPMHZCxe5cv0K129f + 59bdGzz22E2eevpxXnj5AS+9/iwvvvI0Tz+vzAp+nHtP3OTWTcUAPshZOZcTh9o4Nlz+0ABO4WB3FOO7 + whjeHkhf2yb6WjcytMWfwXY/eht92F3jKfW3gp0Vy1Tm77bixWwtmsI25blge/GyKcO1eC07CjfSkLjm + FwN480J7ApzM2WRrxHpLXRX87YyJdLMhZcVcCjd5UBG8WDTgPLbEzKM3aR7HchZJP1rInZL5PFE2h2dK + rXhO+M+DBnceU/bgbFrPcOV6tuWvpT5zPbVZypYNUTTnh9GW78v2Im92laxkb/ky+qqXMNS8nKGmJfTV + zZPc6Mw2GZNbZYxtk7GhmMBNGZbUChcsE+5YHKGnQpliAEuMqEuypj5ZWcbeTko7GlPsaU1xpCPDje25 + C+kqXCz9cSndBdIf5Zz3CoaqPZlsWcfp7X5c6gri4m5/Tm/z4Wjbak5u9ebM9vUc6/RmrGkF+6sW0y5x + ukFitoLWDBv5Xhn7Bbb0ydjvL7ZmX4EZPfnCOwtMJO4r3NOCQRk7o9U2jEu+VPYAVgzgiXobjki//wXN + DhyWMTDZ6MaRFg+Ob13Lmd3hXBvK4fahKu4dbeXJY1u4MVDL+W35nKiN42RJCJdLgrlZEsjjpf7cL9/E + 3bJ13Cz3kRy2ngs1mzhZ5cvhCl/GSgIYKPKjv9CfgZIgBkv86S/aKPzYi57C5ezJ92BXznyUJbG3Z8xh + i+iM1iQH4ddTqBedXZesQHRZsi11wikbBO1p9mxJd2KHYgBnThnA3fL6Donb2yRXbYk2Yovk2i3RJmyJ + NKY93IgOybvtwbq0h2ixNUKTHbGa9KaIXpE6OyF5XMGk1NuQ1OWeTGV/X0NaEwQqA9iC9lQL1Y2irQlG + UhrTkazsDWzMliRDtogeUIzg7fJ4p2iPHon5+3It6cux4ECmcGLRPMPxys3mBgJ9DqYqN5iLFsox5Fy+ + MTekzW4LZ7itrJyQL8gzl5hpyq0cE24Kx7mSZshlybkXMww5LzzmtHzuhOCwaKOD2TqMCkZypMzVZTRP + j7F8PUYLBKIXhgv0GcjXpS9Pl305unRn6bAnW1d0ypQBPFhsKNzamEnpL0drHDnVPJ/j7UtVS0H3lLmx + tcCJ+nQralItVagW3VYjPKBONFKTopeybeirWcB423IOta9gvGUZg7XKTTeSsySH7S9UDGAHyffOjFS6 + Mynj7EinJyd3+XCm158LI+FcP5HG3Ysl3LtWx5M3tvDak8O8+9xpfvPUOR5cnWByXzt7m0vYUZNDd0M+ + o7tqOXGgg9NDW1Xmb++WArqa0tlSHU97ZQzb65NoKgkjL3EVsYFziPb/2QA2Iz1YMYD1/08DWBlPigE8 + Vu0q40XOVepAtQz0jnVc7wvlibFkXjhewAvHSnhsKIsLknPObI9QzQA+vWUDpzvXcXbLOq7t8uPx/eE8 + P57Ia8cyeONoJs+PJnB/fxS3ZLxf6tzAjZ0BPD0Qy7sn81Er2PAIVSGzaNqsTVuCDu0K4jXZlqRLj5C3 + /YK+DCFeQihGRDSNVCyQAOBGiwyKnABdYtbMInatDombTEgLtCApwEzEhbEKCX6mpASZkxVmrfpjujjG + WmUAlyeYUi8X3phuQVO6EEN53CAdXTGAldm/zRLI6pRlT2OsqBbyVB4qgjnamG2p1uyQht8mnblzsyad + kTKY5HVlyv02IVTKknx14XoirC1EYFtQEWVMmZCu0hAjEVd6Ah1KA/WoCNWnPFiCqZ86xetnUrlpBi0h + 6uyM1WN/ihFjOeacKLXmvIj982V2nBKiPimdbTTDjr4kR/bEuNIc6EDOSjOCnNRZa6sYwBoELzYkYoWh + ygCO9dQlYZUeKasMSVtlQupqqZtVVoQvtcBvkTk+c03wnGPIUnstPGzV8bCfxVLHmXg6z2SV0ywVljjO + wtltFnauM3CcMx0Xx2nMd3iUJfaP4mk3DV/76WS569K4xJSuVRYMeJlxaL0RJ9crS+ipc0Pa9oWoR3gn + bbrqzupPK0z4olbEep01n9db8s9acz6uMOX3hSa8J4P6rXR9ngmfzR2/aVz0UuPwUjVGF6sxsfIR+c4Z + XAiYzdWQGTyVrMm7IgQ+2WbHN8Nu/OfkPL6/PJ8f7syD+65w156fLhnx4xER/N0/G8BG/CFdizcjH+HV + 8Ed5OXKmQDGA1XklSoPXozV4K0GX91KN+L2Q2j9I+Yc0A/6UqsOf0jTkszP5XdajIpwe5Y+V0/lL/Qw+ + bpnOx22z+EvrDBU+bpvJp9s1+arHEMbs4Iicywn3KdP32HzBAnlNHo848H2PGV/tMeDbASN+mDDn+xOK + AWwPN1xUBvAP95z57iknvn/BnR9e8+CndzzhvbWCTfC2L/zGjx/f8BVs4vuXvfnXU0v4x+ML+fvtBfzl + qisfnbXjo1N2fHjCjj+edeKv5+bw8Vln/nZGxOZJZ/541JrfHbLk/SFj3t1vwht7THm5y4ont1oJOdXj + QPJMtodNZ0+scuOBJf1x5gzEGnBUAvGtKmueVvbqarPlra2OvNVhz1MlRpyPm8GhIDXG/KXdAh5lTNrq + kIyTQzKez+TpcL/djA8Pz+Wzm4v5z3NL4aWF/PiCGz887cz395z49ro9H4/r8uE+DT7aq8fHgzZ8Ksd/ + f3kV3FknkOu/swauL1Etqf3D6Tn8+6A1n/ab8eedevy+TZP3pF1+oxjAhWo8naPGswVqvFj5KK+36fDb + brnePkfeOeDEbwbm8Fq/C09ss+JqrT6ncqdzLFWNEwlqXJBrv50m5ytC766c+43gR7gj1/V07KO8UTCD + D+S7/tivy1+O6vKvm2Z8/awt/3nTCT6aC399aP7+ww3+7sqPH8/h248c+fq3ignsyFevOvLlCw7864E1 + nz1lw7+ftuMrwbfPyPU/68L3z7nyw3Nz+el56QcvCJ6SfnDDii/OmfDZUSM+P2LOvw/b8vVROf6kK9+d + lfo5v5hvzq/h6wv+/O1EKM/v9hIxMY9dMTbkbDAkab0piRssiFlrRtQqU6LXiOhb50DyWkdSvR1IX+cs + ScGd0qiFlMXOpyR6LsWxc1UGcGG0I4VR9hRFOVApzxsT5kt8W0CdYgCHzaExeh6N8rw4zJEUHyOUPYAr + wp1EhKymTwhSdagzWav1yV2jR4nKADanJtCE2iBD6kIkCUUKyYiV+CkCdFeaE3ty5qiWgR4oWyDJSARW + w0rBKkmea5ho82aiYy0Ht/pwaOdGxrs2cXBvICeGorl0OJObp0u4ebKSIwNZDPdkcHayhVcenOfDNxQD + +Dk+ePkplQF8cmA328qyqEgIJMHHnZDFJvhIbPO0VGO9gxqhc9VUM4Bz1mhRLufc4GfGdhHju0Id2Bli + R4ufBcXeuuRJ3umIc2VXihD92Hl0iHjaFmDDnhB79ksdHIh0Zih8ygA+EGalMoD7hIztUwzgwFnsDZ4y + gIeitRkVjD2cDaos23tRxPc1yVOX5fEFxcSL1eWs8gdxvB5HEwUPDWBlP88DcfJ9IY+wzU+NHQHT2BOm + xf5IZRk2YwZi5DdjzOiVOt4bbynkz5y2aFPqIgwoFxJQEqlHgeSsLDmnZF8NkjZqkOqvS0bwQwNYkBVp + ptrztzJ1DhWpyr7QUzN+C6KtKIr99bLQduRF2Uq+tSJukx5BK6ROndRYbKGGh6Eaq0zUCHJ8hFj3GSTP + Vyd1gQYZC7XI8dAld6UROZKnMiWHpHmZSt+UPutjKrndjM3eJgSu0MFvmRZBktfCFeN3jQIDQjx1fjGA + oxUDeKU2qZL/stfoU+gl17fWgMp1utSunzKAOzco+/gaMLzZXGUAn0y25pgQ54lIybuhQiBDDJiMNPkf + BvCg5O0pA1iZAWwo7WbELuEenVJXnevVVebvLuUYye27/XXokTYe2SyfT3HlbKorpyVnH4+35nCsicRD + PUaiNKUvzJK+MJMhZQa4tPtwlO7UDDIRWMOKeRAqxwRrSCn9I0zeD9cRKCawHuMRhhyMMpLvMmQiylBl + Do/KMQOSH3s3KTfdPEq//zQGAqer+tOpFCHS+TbcVJasLLXlWrE5V4vMuSR592KRCReEfJ/Lt+Cssqxd + rpmITCMmMoRUp2oylqHFhJDryUI9Jov1mSjV40iVMadrLbjaPGUAP9XuwNPt9jzdbMGzDWY8W2fAc3V6 + vChQZgG/2WrCu51WDw1ga95st1ThjTaLhwaw0UMDWJ/na/R5vcWMd7c58N52R97b4sBv2635rRw7ZQAb + 8vsGPf7YqMufGrX5U4sOf26R5y0G/KHNmI+aDfmwTp93y7V4t0KH9+Rc36oylTygz510HS7Ea3AqTosj + ku9HItTpD9Fgf6A2+/z12ONvQJevITsUA3iTuYwnGzr8bGncIDxQ+qJiApdKn1IM4HLhOeUPzd8yL8UY + VvYB1qVSnlevk5ixzpSmjaa0+ZrTLjy009eMVv8pA7gmwIiqAEPKAw0pkT5THCSxUdkLWPpOiZ8I7AB9 + 1ezfuggR2eFyvPRJFRQeqhi/wikVNEYY0aTcRCP9tSXCWLVFw07pZ/tSpgzgQyXzRRQ5MZwp8SdZ2Qdc + +HSsiJ84PYaSjTiYpixnaMbhLHOOKcg2U81sUZaCnkzWYVK4+ESiNofl2HERgQNpdrRFmlO8SZ/k1epE + eCj7/kq8FEQJT0v1nEaFMos6zkFioquIQ2eaY52ojnYmzd+aDcv0cHGYjYmlOtrmGmhYaqJuqZSz0bOY + haH5DNUewIoBvNDNiDUetmxa4UDAamfCfFyI2DCXsPUuhK6bI+UcYgSJG11IWWtHssSPtKXCr5WlntdZ + s9vPkUF/J8Y3OTOx3oFjG+05vtGW49KuxzeZcsxfrnGTjCfhqeObtDgcIDE1QISpnP8pPwNO+wokZpxc + q8GZdRqc9VfnXIg256TOT0dYcDRE4rq/M/WeliS5aRFsN531ttNYaTdTuLQGCxy1metkwFxnY+Y4GuFs + Z4CTjR7OCqz1mGMndWGjyVxr4d3CvdfOlfpcokmJt2IAG6sM4LNrDbm71oR7PibcXmfGdX87zgY5cTRI + BKWfE4MBrvTL9ff4OLNHWeZ5hRXbFdN3sZSLLdgh2LnIip0L5bV5ZmxxNWbHXDP2Lralf4UT/atc2LfK + iV2rHOj0tKNxlQ1VXnaUrbOncIM9WRtsSF1nRcJaCyJWGRO22pBweRy+0ZrQTdaE+FqrzF9fH3PWrTZi + 7Soj1q82Y6O3FevXWrHO2xofbxvWetniJVjrYy9wwnO1LYtFM7jPN8TOWQtrO00srNUxlT6h7OdramEk + j00wMjVBz1BfZQBr62k+nAX8XwPYytYUG3szlQk8ZQDr/2IAO8+zYf7SOazZsIzQzX6kpcdQWpJJeVEG + lfnp1Oam05ydTGdmFF2ZgfTn+jBesJJjeYs4kz2XC5nzuJLupjKAr6XaqczfyylWXBHxfynJVOKIEWdk + LB0VzXZI8vPBGH0Oxks8jjOWx0a/GMDDPxvAcYackM+eTlNuOjKXvGPGkXgZfzHyGSWOy+cnhAMcjdeS + 9zQ5m6bF5Ww9buZK20tMvplnxo0Cc+6W23FDMYCLHhrAKVMG8G7FhE3VY3vqQwNYzkUxen8xgJVSeR4/ + hXo5/6ZEiRspEpdShYOlCS8QNCVJjEownkKiMc1ynq1plqrj2lMUU1hiT4LEoHgdmhK0aE/SZotopK4s + A/bK+ewvNvuvAVwlmr3GQnichcoAnqg2ldwh46fGjIsN1lxrtudmqz232+y502zLY43WPF5ryb1KM+6V + G3O3SJ9bedrczdfhqSJDlQH8bo0N71fZ8J78zs8G8F8qrfhXgyPftAofbp3D1w32fF5tyeeVyhLQRvxb + 8KWy/LNiAJfr83mxFp/mzeKT7Gl8oiwDna/Bp6X6fCq54q9y7O9KdHktdyYvZE3j+ZyZPCfvP1ugzdMF + BjwlufKJAkvuF1hzV3At15azmRYcTjWTmCo8K3nKAG5Lspa6t6RU4mWhcIjCUBNKI0xpzZpDZ54LbXn2 + Ahta86TepW23yHduF/zXABYUWTFUbMXBEnuOVQqPqFrIxdoVHC9eLJrMnhpvTQqWTKdkuRZVnoa0rLVk + b8hc9ocsYH/QPMltixgKXcJkrBd3KhP5bV8z/zy9n2+ujvPp2UFe2N/IWGEEdcGLyFxjT4aPI0VhCymI + 8CA3YikZoYuJ8HIgZLkVIR4y7pfZCh9zFZ7oQU7YKvKjvcmKWE3MpvkErLRn41JrNioxe6n9Q9jht9xZ + eJq7HLN0ygAO8SYlyIt4vxXCET0oiF3HrroUDu4pYWRnNl314TQVeFObs4KGAk9qspeTFzOXjHBncqPd + qM1aSXd9KIf3ZnGyr5Aje3PZ3xxPc54vJXGrKYr0oixmA3VJQdSlBNGQEkhrZphquWfFAN5RtJnqOB+y + /ReRtnEeST5zRAs5y+c86MjdwO7KAHrrgxhsC2FsewRH9yYw2R3H0NYoDrRG0tcSTV9TLP1NiXJcPO3Z + G2lMWUVdggfNCQvoL/TmUPk6jlet52yNj2jLtTzW4MWzol1e3uLJy23zeLrSggdlBrxWZ8b7raLP25z4 + S8sc4TIufNDkzKsNTtyvt+dKtTVny8ynDGDp46drbTlfZcvpPBPOJGtzTXLzXRmDz6QZ8Zr0nbdLbfht + qRXvFFvybqEFb+Wb8la2MW9mGfF6pr7KAH4vx5T3JZ58KMd/WGjFB8U2vF1izUuFSr825Gq+HucK9TlS + oMXBfE353Smud67WSrVf4BUZgzcqLLhfZ88zjS7C9URDKwaw8MnrOQZczdHnUqYuF1V7/JlzrVBilYyR + Y8mmjApnHY4SDhzvwJmMhVwpWsnNCi+ula/gQrE7p/LsOJI1xUFOyfmdkWs4JePteJ4BJ/LkvIoNuVlm + xL0qEx5ILHm+3ooXG+14utGRO3UOXKyx51CZMnNe9JqMqeZMY6rSDalMN6Emw0JlALen27I9w5a9WfZ0 + p9uwN92KfTk2dEnZEK1Hru80Un3USFIMYF91mpJt6JSYvUO40p40Y9VklMF0A8YyDTkkmMg24bAKRsKj + JB9k60sO0ZY2E71WrsvpCv3/vwzgeOF9UcKrIkRrRgQqe/9OGcABwZb4B1oQILo5INgM/yBTAoLMCAwy + JyjYgtBwycURVoQJQsMtiYiSz4ZZqAzgANEqIRJ7QsJNCBWOGBZmRFi4gRxjRIzowMR4K5ISrUlOsp1C + giXJ8eYkxZiQJJpImQWcHm9GhuSJ7GQLchQTWMrCNDOVEVySYU55hrKPryDHUsasxLxs84cGsJmMVWUG + tglVGabyWHJLvi0dRbZ0SjzbWmRPZ5Ed2xQzt8yFkdqFjNcu4FDNPMZKnTmoMoDldYl7yozf3QX27MqT + tstWVqSQ9pA42Sl8tVP6yvZcU/bmS76R/nK5wYX7LW682OEmGsKNP+yYx8e73Pl493w+3rOEv/d7897O + ZTxR68T5fDsms9wZy1nNcFEgY7WJXOhr5NkrQ7x09yB3z+7m4lgjVwV3DzXwxGQt9w8Wc+tAKhe7QjnR + 5MlkpRsnK+dwud6N201zud/syj0Zu/dkjD9WaiA5TI/bRTpcl5xyVfrDpUo9LlTrcV50zrlaI85WmwnM + 5bkl5yRfnq2y4LyMs0s1Dlytc+Nu83Iea13L3Q5/bm8N48bOOK7vSeFabzaX9udwbn8mp3vSOLUnmcMS + o/ZX+bCnaBl7BT8bwAPy3QdkrAwIBiXvHqi3oV9yZG+dEzvLHSUHOVKWOmUAx6oMYFt8VpjguUCPNQv0 + hXs7kBO9krqcQKqzA0gLXyZc3pLFjpossNXA3UoTZ9PZ2BnOwExbDYPZamg+qob6I2qY6iqrR87Ca6UN + CTGraaxLpGdPOaMjLRw5uotT5/o4dqqfiaMHGJ0YYO/+bkoqKgkIi2FDcDwZpVto7jrO3tFb7Bu/zT4p + e0du0Td8m97BC+wbGmP/8H4GDw1x6OghTpw6xoWLZ7h6/QI3b13m9t0rPPXgDs+//ASvvPk0L732FM+8 + +DhPPnOXx+9f59bN01w+P8bZE3s5cbCVo8NlHD2Qw+H9ib8YwCPbg+jv8GOg05+hzgAGpS16m9axt96b + ntrV7K5ayfYSD7YULfoFWxUzWIXlbC30ZFuhF1sLNvzXAF7jRvRi0TZOZvgKf/3ZAFb2A46eZ0v6qnmU + +C+hOnSh6Dw3dsS7M5AqfS13nuj3eTxe6iY5xInnSy15QXLDM9L/7rWs4HzjWsYq17Ijz4uGdG9qlG0b + 0gIE8ttpa9gqebWrcBn9VSsYbljGaPNSBpoW0Fs9R/KjA9sLbaZQIGNTxltzpoxr4bvlMQaq/4qKhdcq + kwaq400lx1pOGcDKLOCfDWDpRx0ZLuwsWMDe0iXsK19Oj9SNYgB3Fy5goHI5E80+nN4RwKU9oVzYHchx + 5f+8Fk8Ot63mSPsaRpuW01u5kO35rtQI565MVFZttaBWNGxHphVduRKz822Ea04ZwHvyjVQ3H/58A2J/ + iTlDUidjtf81gA/VS+yVfq9Cgw2TDbby2I6Ddc5MNi7gaLsnp7b7c2lfMtcGC7gzVsPjY/Vc3VvE2ZZk + id8hnMzbyOW8DcJJfbhXsJYnirx4rHAlt4pWcLXEk3NlqzlUsJyBHBl/GSuFj69gV9oqevLXM1C8Sc5r + A30la9hXspx9RYoxvlC1H/JWqbO2JHsa42yEM9pQI2VVvI3UsQ2VCdYCia/xltRIfFZ8r45UB7ZlOKlm + AHcr+wEnWbFVuVEpypC2CH1aw/Vpl3jfrvwnECaQXNAWakB7qB5bInTYHqvD3hRdhoRHTAq3UDAq9bY/ + 15hdGUbC6fVpTjSQ3zKlLUXJU+aqLWUaRO80K8ZwkrEcY0yHaIF2OU6BYgYrRnBXhhndWRbskXi/L92U + A6InhhIlZ4omGZLjDmYYc0Q4yfF8E+EZiqYxFX1jrDJ9bws3uS2546ZwgJuZptyQ3HE52ZCLqcacE11z + Rs7tRI4JR+T4McmzQ1misUQjDeToMZSrz3CeISP5BowITx8RvTAs6MvXpydHV85Hl13p2nJ+cu1yfH+h + HCt84lCZiXBrK07WO3K+ZQGnO5ZyqEHGQ7mLjAEH6kUTKcavgkq5lppkY+GUoomkH24TDr+/ah7DjYsZ + UVC3UPq3Gwcknx0oEX1d6MAByVuDxU4clOOUGbWnd3hzpmsdZ3v9ODsQxNnxaC4dS+P6mWLuXGjgpXv9 + vPv8Cd58cJJ7F4cZ2lFNZ3kK9blRNOZvprsxm9HdVUz01DG4s5SOqlgaikIl//pRnrWRmvwAStJ9SI9e + TGzQHGJUBrA1ScIZUgONyAz6vwxg5WYKOc8yZ8Zr5sp4mSfjZhGH6xdzsmM1F7v9uDMQw4OJLJ6eyOdW + fxrndkZzSvLRiQ5fTrT7CLw5vWUtN7oDeWIgipcmU3njeBavH8ng2eFYHusJVxm/Fzs3cF3KBwOxvKMY + wJWh6tRH6dAinas1XlegTVuslsoA3qOYv0Ja+zJNOCCDfrTUVQiBBJbCuSJALUnfpEnE8mlEeM5WLfkc + v9FIZfwqSz/HbDIiVh4nBZiSHmpFbpQVhZutKYmxoFREutKQjWkiaNPNVGWjcnezEL1mEfuNSXbUxMrA + i7KgLNRYtUxflQyeNgl6W5V10WPkfCNmyQBTTFsJOqnKrAs7tgt56hTCtCNdyE2KLTWbjSlXzN4QCZ7+ + OpQHaFMbqUujBNMWEf5Nkdo0hqjTET6b3XE6HBDCeqjQnBPlVlyQ4HS1wYErtQ6cr3TkeJEjk/nOjGS6 + 0p88jy3hcyhea0X4XG3WO8xmwxx1ghcLgVxhQOQKHdWf4XErdUhYqU/iSmMSVlkQ5ylkcaklvostWOtu + xkoXIxY76LDQToNFDup4OKmzXL7Hc46GCh4C57ma2M1Vx9lFnblzZrPEWTGHZ+LtMIMA+xlkz9Wj0cOM + Lk8hGF7mTKw35dQGfS6s0+Dahkd4VjGAM2by1zJDPhNx/0WjrQr/arLhUyEkfywXQZJvzNvZhryeasCD + CA1u+c3gvNejTCxVY2iRGgdXqnFyw0wuBKlzPXQmD5I0RbQYi2Cy4os+F74/Oo/vLs3nu1vu/Pi4Cz/d + seHHywb8dMyAb/da8O9mC/5RYsDv0zR5I0KNV8Ie4SVpvxel/V6I0uClSA1ejdLk9Wht3o434D0Jbh+l + mPBHEVZ/zTTgkxxtPs5T5y8Fs/hz2Uw+qZvN31s0+HvrbD4R/LVl1i/4tFOLr7qMYNAODrlMGb4KDs+H + ScFBN346YMvXXcZ8vlOHf+/T4ZtxE74/YcNPFx3hlmJgyzU97sS3Tzjy3XMu/PDyAvjNMnh3tWCdPF7P + j6+s47sXvfn2uTV8+eRy/nZrPn++6sofL7rw4Uk73p40561xc34zZsY7E5a8P2nD+xPW/G7STmDL7+S1 + D+X9D4dNeL/flLd7THm925KXuu253WzJYRFc+2M1JXCbMCKJfizBjEkJ8tdKhHC0z+Gd3XP5YK8bf+6b + x5975vJGszWP5WpxPn4aZ2OmcyZmFmcStDmXbsS5XENui9h9eY+I3RNz+fedBfzn2YX89LIbPzwv1/i0 + Pd/et+Ob69b844gefx7U5OMDenw6bsMXJ+bxw01ln+CN8KRc+1Pe8PgK/nNzET9cnsdXJ5z415gNH+81 + 5s/b9PhDixbvVk/j1QI1nslU48l0Qa4aT5VM57k6XZ5tNuZBiyn3Wy252yKku0xPROcsRuPVGI1W42iM + GucTZnEjSYfHU/R5LF6LW6GPck/6zItJM0Vkq/P7LXr8ZUCfvyr7994ylTaQ/vYbabvfu8En0tZ/l/JT + aXvBj5848/1fnPjmd458/Z4z3/7Wja/fcuXfrznx+StOfPWaK98Kvn9jnkDq5Y3F/Pimh7TxInhjIbzg + yn8ed+DLSzJ2Tprz76OWfHXEjm+POfPdcfnsSTe+PbWAr0+v5svTAfzpYABPKXcZ5bvTtdmOYn+Jk5IE + kn1tiPWxkFhpIjAj3tuORG97kr3sVQZwYcgCIXaLKI9bREm0+0MD2I2Czc7kR9iRF2Inx9hTFeVGfcw8 + iWOu1Ia7qMr62HmURjiTvtGUjA1CFsMc2ZKxgt1CQkv9bMhapU+elwFlGyXuipCtDjBB2QezRpJRo4jT + ls2mEjet2JniQHe2s2oZ6AOl8xmpWixkbYUQtJVMNnsy0SoEq2MNB7d4Mb7dm5Ft3gxsF8K7158TQzFc + nMzk2rEijg9nM7Y/g5OH6nnh/mnef+0BH772jGoGsLIE9PH+XSJC0ymJ8yVx3TxCF5uw3ulRfOzVCHRT + E2L+KOmrNShab0DVJjMaVCaONVsChBQH2tPiZ0WpsjfoBiM577l0pXqwI24B7cFCfv0s2RVkQ0+oI33h + jgxECAkIt6U/3Iq+ECFZwQb0BOmoDOA9QbPYL7FnQGLPkGAkUpNDUdoc3yzxM96IKyLAz8vjs5InTitG + XowWx4S8HY4XJOpyWPqnYgAPyvPdIdNUBvB2/0fpDtGkN0JIzmYTBmPNOBBrwf44K3qESCqzwjtF/DdE + Gqv2ti+N0qdQyEB2iA6pfpokb9QgLUCfzGAhC6EmKuREmv9iACsoS3SgUIhq/mZL1Uxg5bEKMXaq1TYy + Qy2I3ahL4IpHUfaQX+2oho+dmoidR4l2n07yIk0yFmuTuUjr4QxgXXKWG5C10lCEjzEpq41J9DL+ZfZv + pDwOWqmrMoAVIzh4lR6BAqUMXqlN6ApN1R7AMZ46JK3Ske/Qn5oBvNZQZdRVbzSgYZMBTRu06dykzAA2 + YiTaQrUE9Akhz8fiTJmIMlLNAlYM4MMRUwbwqThreWymMoD3ST7bJ6XKAFaWC/aT75K62rJeOMAmLXqk + Pyvv7fHToy/IiIPCN04luXA+1ZUzigEs9T8ZY8x4tB7Dm7Wkb8yiN3QG/RGzOSBtPhClq8KQ8INBIen7 + g9XZFzRb+owG/aGaDIRrMRCqw1C4HqNC8MciDBiPFAIr5z0SJq9Lm/f5Kya1Gj2bHqEvYBoDwTOYEK5y + ItmI89kWXCq04kqxlZRmXFRM3wITzopoOiOE+lS2GSdzzDiWbcpkliFjadoMJqszJDlzPFtbhI0uh1TL + AupxuNKIU7XmXG604W6rA0+02vNkqy1PNZrzdL0Jz9Qa8mytPs/X6qpmAb/ebMTb7Ra8u8Watzv/awCr + 0GzOa40mKgP4pRoDXpTyzVYL3t/hrMK7nfa822b1Pwzgj+p1+WODjkCLPzZpC3T5fZM+v28xUr3/u3pD + 3lPM3wpdfivn+psyY57J0eFOigYXY2dzOkaDI1GzGZf8PxCsIXWlRa+fLj2+BnQLb9wlcWz7BjO2brKm + fZMNDRssqV5nSoWXkcr8VcHHUAXF+C1ZoztlAAsqpc8pqPURfrnehGaJh60bhTOqzGARD35G1AZInxRU + SD8pk3hQKn1OVUo8VMxfxRiuFuFWL+OuXvqiMgv4ZzSEGahWTlDQJGNYMYAV81dlAIvo2yHje4/w174s + JwZz59CfaU+/snSzCLm+RGP2xRlILNBX3Zk7mioCUPrFkWxLaXdzjudYqNpf+QN2MlWXCeHg44k6jIlw + O5CgLCFvToWvrozPWYQtfgS/+Wr4z1MjdKGacEw1CjbMlvMRQZ4mHDXLne4UF4mPjtRudiBN4ui6hZq/ + MoC10LTURsNaE00rdZUBbGA2HTPz6TjYaLLA1ZhVi6zxXeFIyBoXIte5EbV+LhHr5hDq7aRCpJcD0V62 + Km6btNyQjKW6lK+QmLxOYp2fAyObHJj0seeolw2nvK05JfnvzHpjzmwQSFufkFhwWGLCEbmm41LnCo4F + yOv+Bpz0E0gMO7FOU7inBqf8ZnMiSJOjQbpMSruN+1uxb5MddastSRIOHmg/U2LcdNVKOgvthCs7aOHi + qI+TgwH2tnrY2ehib6WDg7WuCo62OjjLtbtazWKJ3Sy83WYT7qHx0AA2YXitAWfWGnHT24jbgkteIoDX + mXFcctBkkBN98tvd6+zY5WXHjjX27Fhpw/YV1mxb8l/s8LBmt4cNe6Qed80zZ4erKbsE3fMs2e8hom+5 + E73LHelabseW5TY0rbSldo0dVVJnpevtyVtvS8Y64Q7elmyWuBy52oiotZZEyZgIFz4RKrk9UB77rbdk + vZcJ3p5GeK80wWeVGd6rzVgjPGO1pwWeK81VWCUawVM0yNLl5sxfaIDrXB1sRXNY2WqoDGAzSy3VLF4z + SxPMLCwwNTfDwNhIZQBr6WqpZgErJrCyD/DPBrCto6WUxqrPKebxzwaw41wr3D2c8PTxIDhiI8mpURQV + plFWmK4ygOseGsAdGZvZmRFEb44PY/meHMn34HTuAs5nLeBShjtX0525mmbLlVQrLqdYcjlJYqeMhfMy + hs7E6XFS9MKReEMOJyh7XRlLbjblUKyMrUg9lQE8JHFbtQR0vDEnk6X/pVtzMtWSo0lTx6lmDEsOHtus + q7oBbDJOW97T4qTE3/NZelxT7oTPMeV6riDfjNvKLKdSW84XyHiVuK3sAbwnSZ3dKTrsTNNjh2iWdtG2 + TfJ7ivH7iwH8EDVyrnUJRipztzHZjOY0C1rTzVVQHivvVUuMUKAcqxzXJNpYMYeVGcItqfI50QHNyp9E + wpE7UvXYmqbLbtFvPfkm9JWYq2ZhDJQrf8JZMFxtrjKAD9WYc6hK4kqFISelPK8sA91kx/U2e261O3Cz + xYZbDVbcluPuVJhyu1TZWkaP25J3HivU42nRe6/K9ykG8G8rJB8UmfNugZHKAP5TuQX/rLPnyyZnvml2 + 4staOz6rNOczifufVxrzZdX/NIC/KNHmn/nq/C1nhmi7WXxSqMmncl6f1prwSb0ZH1Ya8lqBusr8fSZv + Jk8XavCgUIcnCw15QrTqvXxzHs+35k6+DVdzrDmTYc5kiinD0jf2pwjHUmZqJNtIfVtRFmVGkXCIYuG5 + yuOmdCdashxoybETWAskP+QJ/823ZFu+lWoPYNUS0CXWKHvcDRdZSd615XjFHM5ULuBC1VJOFi1mKHmO + cE0jqtZoUSf5pmWDOdt87YVTzqE7wIXdm5zo2uBMr78745tXcqMilncONPHl1RHRE8f5980JXh3tYH9O + IEUbXUhYZk68pyUZfi6kBbqREuhOgq8rfktM2OCux0ZXXXznGhHsYSn6wYm4de4k+i4ker07AZ52+Cw0 + xWu+Md7zzVi7wFIF7/kW8roVASvnSOxeTFKgJ2mh3qSGrCExwJN4v6VkR3rRWR7H2O4SJveVMLgthe3V + QdTlrKI8zYPChAWkhzqTKtw6d7M79dlr6K4P59DuLCYEvc0xtORtJCd8IbHr5LzWupKycbHoldWURK2j + Lsn/FwN4V0k0rdnBFIWvIFnySdwaJyKWWRC5wpx0ue66lJXsrvJjf2MAg21BjG4LYnxHMCNbA+hr8aWn + bhPdVb50V/iypyKQ7lJ/GQtLqRRNVBpkTUWgGV3JbgxkL2Sy0IMzZUu5XrWce3XLeb55Oa+0LhZ+48CT + 0qefzJvNK8KlPpA+/8cme/7c4MgfGpx4r95JuJAjj0t/Vgzgc9K3FQP4WIUlJ+X56TKJHemSr2JncTlW + g8cStXlWNPYb0ld+W27H+2U2vFuijA9L3i4wU+39+0am9Od0PZUB/Nts5WZ7Uz7Is+B3BZa8V2jJW8IH + X8wz5H6uLtfzdCW2iCbO1+RgnjqHlRVfKiR2yZg8W2bK5QoZnzIGHzQ781yTC89UOfKE9NW7ecbckHh1 + JUNHhRvCIe9K371f7sCdUnsuZgnflpik3MB4KEauKdWNy8pSpiUrJJ4t42LJPM4WCk/OVbiIKSfyzEXD + Ch8VfnokV1+13OOZQgOuS1x4TM7nKYkhz9Vb8lyDDU/W23GjxpazFdaMFZur4tA2iZtNGUZUpokGkJhV + k25JfYYVrWnWdKYpNxvbskti+u40S/Zk27BDWd4xRo/MTY+SsFb4jM80sgK1VLOuOtOt2J4ueTPdmP0Z + hgxkGDCSJfxbyoNSp8ps4IlMZVawxPksXY7mSPwu0fl/NYCHim3YnSM6TM5JWQI6N8JIxoMB0cJJovzN + iQi0JSTInqAgO/yDrPATzewfIAg0xU+088/wDzQhLMKa8MgpKCawUipGsGIA+wuf8RetEhSiGMFGhApH + DI8wJEp0YWycBfGiBxXjNyXZTlUqhnBinDkJ0cYqKEZwapyZahZwZqIFmRLfcpLMKUhRZgIry0FbUZ5p + TXW2NTW5Vqoln+uFQyoGcJ20YU2mMdXSN2sEDVmmtEh82yrXvq3Eju3Fivkr7VBiT1+FC2OK+Vs3n8ma + uYyXOHKoxIlD5XMYlveUfX+78oXnSLzckmnK1ixztsrvtMvjdql7pa335plJrLTgYp0Tjze7qAzg326f + y58Fn2x34687BLsW8o+eFXy43UM0igNXC2w5kevORP4q+c0AxmriOLu3kqfO9fDc9QPcPL6Fs4OVXByo + 4OZIBY8drODx8UJuDqRxoTuc461eHKlbyOmGBdzo8ODxLR486FzIU60u0idtuFdlymNlRtwpN+BWlSHX + a4y41mDCVdE7l1vMudQiWqzZTh47cr3dhZudc7mzYyF3FWzz4E7nMu52ruVOu99D8zeaG70ZXD2Qx5WR + Ei4IzgwVcfpAPqd6szixO4mDbSEM1yhG06r/YQD3Sb79BbXW9NbZ0iN1sKNM8lGuE6Up9mTHOhIbbEfw + BmvWLRf+PV+X9R7KzQmK7l9LR0kojXn+5MWsINTLHq95BnjYq7NA+Lur2SycjKZhq/8oljqPYqyuhsFM + NawNHmGuskrlCgsSNi+noSaWnt3FjA43cOTINk6e2cuREz0cOtzD8MFedvdsp7CsGL+QCNYFRZNW3EHj + zqN0D9+g5xfzV8EdegfO0zMwRO/gXgbH+1UziE+cmOT8ueNcuXyK69fOcuvOBZ546gbPv3KPV3/zgJdf + f5JnX7rLvQfKDOELXL1ynItnhjl7rJsTh1oeGsDZTPYmqAzgsZ2hDG0LpL/dl762jRxo81Whr0XqWNDf + vE7qcQ07JdZ3Fi78BSojWHLAlsLlbClYyZb8NWzJW0d9wmqVAZzq5UbsEkeC51jgb2fCRmt9FYKczIhZ + aE/mmgWUBi6lLnwBrVGudCfOZSTDldN5rtwsceWJMom/EltfkvzwcpUVLzS68aB1hXCqtcKz1tJd6CU8 + w4va9I1Up2ykIsFT+JwHbakLZCwtYrB6GeNNigG8mP56N/ZW2tNVasdOGZ87ZWwq2C7jozVLxnWKGRWx + ymQBHZUBrPxnpNy48l8DeAqNKXJ8mj0dmc7sLJhHT/kSeiuXqcruIuV357G3aCEDVSuYbPXh5DY/Tmzb + yKH21Qw1LGO4cTkjjUvpq17IziJXWjLsqUyUGJMgujPRjGrhzK2pZmzPNKdb8sS+AgsZ98YSS/V/wV7J + Y4oJrPDPkWoblfmrQp3V/4Il4zVWjFfbc0iu/3DzEo53+HBqezindyVwfncmF7qyONWewLHKEI7m+nAi + w5OLGSu5mbGMxzOXci97CXey53MjZx6X8hdIvlpEn/CyXfHOdMa40ho9l/b4hexKX0lfvjcHSnyEG69i + f+kKwTL2FS+S63CnM9mepjhraqMtVJ5T+WYLyuSxAsWvKokxk8fSBjGm0n+mTODOVBm7ac7CNaWtEizo + 3GxES7gejSHaNATr0BJmRGu4MS2hJlNQPTekQ9pum2iWPan69OcaMSr8ebjYiP35BsLhFS6vT2uiHk0J + wu+TlRtEzWlMNH24fYweDaJ7mhQTONGQNil/RkeSkcoQ3ilcuCvTQmDGnnQzqQ9piyTRKYJB+czBTBMO + i5Y5JpzjvMRrRdPcklxxO0cpzbkpn7uRYcZ1ybfX0ky4KJ85L3rmdIoRJyX/KtzgkHCawSw5/0w9+rP1 + OZBjwIDwhCHh5sOiCUYKpZTrGiyWfC3PlVm/uyU370zTUpnAPfJ8oMCQ8SIjjlaYcVrhWY2OXG6bz/lO + Dw43zqdfcs9OyTn1wuurlBu1BIoBXKvcBJtuQYfkuh3CV3rKXeirEs6nbEmgmL/lzqq9dAeUZcoL7FQY + LnZkokb6R8dKzmz34uxuH87t8+NsfwAnh8M5ORbDhaNZ3DxbxQuP7eXdF47w5oOj3D3bS19nEQ15kRQn + baQkeSOtwmH3tGTS25nLrsYUqnP9KZbYnJuwkqy4ZWTFLyd9sweJYXOJDXIiNsCGuADJ68IdUgIMyQjU + UxnAyn+/igG8XXSfYgAfKHFgSK75ZwP4oJyvgsPNyzizzYerPWHcG07h8RHJPz2JnNwSzrH2II62buBY + i7dgDcpS7le6fHm8T5kBnMTLk6k8PxrP/b4Ibu8O5tp2v18M4KcH46YM4FYRmFP7EElnS9ClJU5LZQBv + TdBRGcD7s6YM4IE8a5UBPF69iH1F7tTFmpO0diZBi9UIWTadiNVaRK3VFUFiwOZ1QqSUUhDnazQ1Czjc + gjwhRgWRIshEdFdKp62XTtWYKkQxVRpVMYBF4DckiXCLnzJ/S0JNKfDXJ3vdbIr9NGiIMqBDRLRiALdG + zpbBpMFuEcwDmTYMK3+2ZTuyT8Rdb74EgUwHGmKEfAZpUSkDsipYhFqYfE4G0NZUIyGgpnSlGEiw0Gaf + COlhuc4jpZacrlGW27HiWqstN1rshSw4calmjhB/J44WuTCe48ZQ+nx2RM6hYqM0rocBfq6abHLVIGiR + LmHLdAhfqiwnp0HUMk1i5HnMMkOiV5ixeYUQw6VWbFxsxZp5Fix3NWGBox7z7LSY76DBQmdNlrhostxN + W4WFbjq4uOvi5K6N21xtFslrq+S31s3RwNdZnXDH2eS4/toAtvzFAD6/TpMrGx/lmehpIjo0+ETI0OdC + dr5sc+Tfgi/aHfms2Z4PS0x4WwbwG9LWLyUa8ESENtf9Z3PGezoHl6oxKO075qnG8Y0zOR84m5vh6jyV + oMnreQZ8UGPKP3Y78M2EO99eWMB31935z505KgP4pyuGcNKIH3ot+bLVnL+X6vG7NHVei1Dj5dBHeDFs + Bs/Ldz0XPpvnw2bzkjx+OUyD1yK1+U2MPh9I0PuzBKJ/5pvyr2JD/lmqyz/Ldfi0Rot/NmryWas2/2zV + 5B/NGvy9SV0g19goZYsm/95qwI+91jDsDGOu/DTuKuVcGHWDoTn8p8eKL7YZ8I8tGny2W4OvRoz5zyk7 + uCLH35HjHnflh8ec+FZZDviBEz8878ZPry6CN1fAb7zgVW/+8/xqvnmwgi/vLeGfN+fzp/PO/O6kPb89 + Yssbo6a82KfP8716PK/sqbvfgFf7TQTGvDEoonDYjHdHzXhfjvu9lB8NmvPefnPe6rHkN/uceHaHBMMq + aUvV0o8i3NJtOJZqyZkME56sseMd5Y7KAQ/+PrKYzw8u5l8ji/idfOa5cn1uZ87iZpq0U6qWiEAjbkiQ + vyGi8UGnLe8MufDXs+58/fg8/vOM1MtLTnz3vC3fPGvNN09Y8fUtc744Zcjfx3X456gBXx6x56vzC/jx + /lp43hde2AgvrYdn1vDTEyv46bYH315058ujzvzjgCV/6zbhb9uM+KhBQwTxIzyXrsa9BDXuJqtxK02N + O7kzuV4g/bJQhwtFBpwu0GcsZRYHYh5lf5gaA6FqTEaqcTZmJlfjlLurdbkrIvtOxKM8iJ4hQlqT9yq1 + +fMOA7l2I/5+Up9/3zHh2+ct+fEte/jIBT6Rtv7HHPinE3wm7flPae+/z+GbPznzze+lXf+4gO8/WsC3 + H87j69/O47v3F/EfwY8fLhUshw88Bavgd8qMb2nvV+fDAxfV7Oivztrw1XFrlQH8/RFHgTPfHXPj22ML + +PrEGr445s/7/Ru407CUw5lu7Ix0oCrUidzQORL87Yhea07ICiNChNxHr7IifrUtSWvsyFg/h8LQ/20A + z6NIUBjtSl6YA5n+1mT5WlIU7EhlhAvV4XNUqApzFmLgRrnEoyw/S7I2mVMa6kBrspDftGUUrpfY66lP + 4VpjKv3MqA+0oNpPhKGfMhtYmdFmRFOUGW1CgLYJsVEMYGWFh/6y+QwJEZwQYjgpxPBQ03IONq9gvM2T + 0XZPRjo9GZCE2is4sH0tE/uCOT2SyKXJHE6NZjExkMmxsSqefewY7758n/defpK3n7/LczfPcnjfVloK + kynYvIF4n7mELxFh7Sa5xH06UR4zSfbUoHCDIVUBImb9rajbaEHjOgta1lvR7mdHS4A9VXKtVYHWdMbO + Z49c566ExbQFyXXLsVvlvS4RUj1hdvRH2tMfYUtfuBX7JZ/sC1YMRMltQersDVaXY2bRJ/GnX8pBKQ9G + aD00gI25JCT7dIQOJyUunYjU5GiUOoeVGfUxAsmTE0LUDgrpGorVY0/wDHb4qgmmyXdr0humz0CUkCAh + kIoB3BdrRW+CDd0i9HeI8G+NFpEebUJljDGlIvbzww3IDNAmdaMm6ZLzMoOVO9PNyY2wID/KSvqDHeWJ + Tqq99MsTnCiOtiM/0oq8SOV9y4ewISfC+r8G8MppbFr0KAGLZhK+cCbxHuqkLNEke5kuOUt1yPHQJmeJ + HnlL9claqkeavJ68XLlhyZC4VQbEeJkQ7WVGxBrFANbHb6m2Cv7LtfFdoU2AIHC5pvRnyUUrJNd56oiw + MiDbW9n3XtkD2ITqTdLn/IVbBJrQ6qvHFkF3kJDEzVYcTbBVGcDK0sw/G8AHQw1VBvCpGCvOxkvci7Rk + xF+PA7669Afq0xdizJ4AfZUBvFXqartgr/J+iIkK+wMMGAxSlme25UyiCxdTXTmb+F8DeDRGj8FoHfZF + qLMnbKaq/fdFaLBf2r1PBW2JRVrsCZzFbv8Z9Ei5T/pKb4gGvdKu/SE6DIboMhSqx4i02XiUtH+oDgfk + mH1+M9i9Xo09m9ToDZwm/WkWk3F6HE0y4GSakOhsE85JPjunzCAR8n9KxNKJbAOOZxly7OESwJNSjqfr + M5isQV/CTPqTZzMicW8sT4vxQl0OSh6cKDfghOTei/VW3JScfrfJlntNVjxRb8qT9ca/GMDPVevyQo0u + Lzfo80arKW8p+/92WPFmpxVvPDSAf9NqwZst5rzaYMwrdUa81ijHtSuzhR15f5sT73TY/tcAbjFWGbwf + 1mrzh3ptfl+nyUf1CrT4sF6HDxsN+H2zMX9oMuHDGgM+rDLg3TLhFhLrn8rQ5Gb8DM5FTudk1CxObNbg + cJQmw1KnB/yl3v102bfJgJ4NRnQLh9m1XoTmRmtaN1hRKzGsaq30Jy9DStYoRq+U3oK1RhR56Qv0KJbn + Zd5GlAsqpf9VrTWkzseYhnUS3wQt60SMyXfXbzKmVvqjsgpCtfSXyjBjKkSoqUqJhYr5Wxksx4SLwH44 + A1gxfuvCjVT42QBWmb//C8oy0FuFFyuzgHcnW7M3xYY9yZb0pFjQK9y2VwT03jgDlQncL7x7KMWEiWzp + /9mWHM0x51iuMgt4ygA+oixzmKLHsHJjYqwu3VG6tIbokbl6BhGLH2XDXDXWuqrhO1+NyGVqZPrMEI6r + y1aJ4wey5jGSt4De1Dlsi7OTa7EiSepolcsMnG1mYmQ2C00zbTSt9dC00VLtA6xrOQNd00cxNnkUG0t1 + 3J0NWTHPnI1L7Aj2dCLCaw6R3q6EezkSsspWhVDhnOHLTYleakiyxJFsiSHVK43Zvs6GPl97RtfbcnSV + JSeE+57xNOPsamPOextw0Uefixv1OLtBYusmHU7IeD4VJONA8tFxGePHAvQ4IWP6hJ/e1Pu+Whzzncmk + 32xGN6kztFGHfmnPHd7m1Hhakigc2d9hJl52M1hi9SjzbGbhYquBk50utra62Mh1WllrYy2wtdaZMoPl + dQdrLVwsZ7LITj7rOpvwRcoMYGO2Sf8bku8/Jf3mqvS1K6v0Ob5ci4MrlRnLZhKP7KWPWtPmKbplmRkt + y61oE3SstGHLCju2rHRg20o7dsrjnqUO7F9kx555VnS5SN9wFt3hKqJvgQ39i0WreNjT5WHL1iU2tC6z + oXGVA3XekuOV2YA+9uT42JImvD7G01hlAm9ea0m06I4I3ykTONjXFn8ZIxvWKoavIatFa6xZbsQq4Rme + y4xYscyEZVIuW2bM8qVmLF1qyqLFhriJpnASHWEjGkJZAtrKVgsLGz3MbY0xtzHH3NoKMytL6Sum6Bro + o6WYwHpaaBtqoW+ih4mVMZb25lg7Wkppiom1AcYWuvIdigFshp2LBW6LHFjutYCAkLXEJ4WSn5f0iwFc + k5tOQ3bSLwbw3kwfhvNWMlGwlJN5izibvYjzme5cznDmSvqUAXwlzUJlAF+KN5H8rM85wZkkY44nm3Is + xYyjyqxe0bKTccpMNz3VTTuDEs8Vg1cxhk+kWHFavut4mjWTieaMRhsxJO8NKjf9REpcj9RiLEbaOUGb + w8KfT2foclk49LUsY64KruSYcqPEmivF1pzNVcapxP404RJJmioDeFeaATtEz3akmNKs/GkTJzxLRH7N + r6B6njC1jFm9xIXmDEvVn3xNmRY0pEmcE31bHq0r0KE8RleeG4gmNqUz04qtWda0iyZqkd9ok3zSlmpA + Z5o+2zP02ZNrTG/hQ/O3zFL1B5wyC3i0ypyDVVMG8ESFseQPyUcSk89UK7OAbUTn2nGz3YEbrfK4wYJr + ohOvl8k1F+txXfLNHYnd90qMeU40xBvV1rxba8875da8U2TKO/mGvFdgyO9LTPl7tQ2f1zvwVb09X1RZ + 848yEz4tNuDzciO+rDAU6KvwVZkeXxY/NIDzZvGxgmJN/lYluqPBjE+aLfmo1oTXS3V4rkC0ZsFsnizW + 4n6BNvcK9Xk8z5i7uWaiJSy5lWsl7SKaPd1MZQCPJJtLvrRid6qttIHtLwZwSbiZqlT+2KsV/lWfak1j + poy1TEsas81olrzclmfBlgIZo0U27C22obdMYlixJWOFVhwutOVU2RzOVc7jfPliTuTPZyRlDjtCzGkW + ntoqnHtrgA1dwj93BziyY5MdHTJm2yXm7ZJxPBixhKvl0bw92MS/b4zxwxMn+eLuYV4a75D+so7U1daE + zNMmeJEeMd5WRK+3Y7MgwsuatfK6l2h9b4dZAg3Wuejiu8CM4OW2hEms8F9mxdqFxni66bHSVQdPVwNW + zzVRwdPVSEpj1i+2JXi1K7G+S8iM8CYj3JuUYE8SA5aTEbaKZmUf4K5STg3VCTcvZF9rrLy2jqKEhWRF + upIkfDs5yJG86Pk05Kylqyac0e3pDHUm017kS2GMB5FrrNg4Xw+/habCBR1JWr9IZQLXJQfQlh3BtqJo + QRRViRtI3TRfjrEhZIk5AQsMCFyoT/xaG8piF9FV6Utfkz9Dbf6MbfVjdMsGBtt96Gtcw96a1eyp8GJv + 2Vp6ytZLO/nQkjhPdJAdxRv1KfZRpzPCVPKsLRM5czhb7M7NioXcFx3zXP1CXmmaxwvSN5/IUed+1qO8 + XKTJBzIO/lBrwx9FV39UI31b8EK1PXfkuEuVlr/MAFYMYAVHC4SfJcxmUjTp+aiZ3EvW5UXJ12+X2PJB + lSMfVtrxXqn1/zCAXxM+90qqzv8wgD9UloLOM+fdPFPeFC74XJYO94Xn3czR4qKMu6N5moznzGQ8X5OJ + Ij3pg/qcKDTgapUl9xtF67e58HzjHJ4uF+6n3JiSpc+NdG2upmhwM0OHx4VnPpD3nq125IkKe67nyThR + 9gMUHntQeOvJRDsuZs3lSsEirhZ5cKV8PhdLXTgtff24nNdROe+jOcKjs/WZzNYVjqLNqXxdiX2G3C4z + 5Ikq4Zl1Fjyos+TxGomJUlcnSswZLjCRWGTEFomNjcrsX4lTZSnKTGAZexK/m1MtaZMxukWwTcbrzjQZ + czl2bJX4VhNrIPrnUWLXqpGwfjq54foyVm1pf2gA7043Zl+mIf2ZwvGlHMnUZ1Ti37gKusKbtUR3a6vO + 9USRDuck3pypNOB0uaHKQFfab0Ji10ipHfsK7diV50CjxIJ80Wkpwvli/Y3YHGD5fxjAlvj5m+Hrb8om + X2M2bjJkw0ZDNoqGVszenw3gn/GzAewnfGbDJtFMAboEheqrDOAIgbIncKzowTjhaj8bwEkJ1sTHWRIf + Y0qsaIqYSAPiRRMlikZMEt0yZQSbkCl5LDvRjHzJHUXplpRl2FCVpez1a/M/DGDF8K3NEI2fpked9L9m + yWPt0q47iqwemkw27FJiXZmD6Hw3JhsWcERwtMaNQ6UOU/iVAbxTvnuL5Kg25QYnaYf2DNFz6Ua0yW9s + zTZWGcBDkn/OVtlxp9GZl7bO4/2d8/h4myt/63Dir51O/G37XP62axG/2zKfl2S83Smy43zRfOk3azhS + EcyhulhO7irg8ePbeOribi4fauR4byGn9+Vzqa+AG0OF3B7N58ZgGuf3RnCsYy3Hmpdyvm0pd3au4sku + T57ZsZSnO9150OzAk3VWPF5lxmPVJjwm2uh2o4yTNskbooFubrXjumic61tcuL19Pve7l/HM/tW8ctCX + l8c38cLgeh7sW8+9ncrM3xCu74jiancCt0YKuT5RzuXDNVwQnDlUxemRcs4MFHKuL4dTXYkcaYtgpHoD + fWUe9FU6cqDWiv01VuyrES1QbU6P5OO9Mo67q2zZVuJEc44jZUl2ZEXbExckcXGdsu2KcDmJ/QHLTcgI + dVctH7y7OpKOokDKk5U93N1Ek1uy2kWHZfZaLLLRYJ7lbOYKd3c118DRaCZ2+tNwtZzFkjlabFxtSXL0 + Upqqo+jdlcf4UA3HDrdz/OROJo/uYuzQLgZGutixu53c4lw2BAbh5RdOcn4zdVsn2HXgMt1D19g3coO+ + kZscGLrN/v5z7Ok7wN7+nRwY2cvo+AGOHR3nzKlJLl04wtXLx7l9+yz3n7rK86/e5bW3n+KVN+/z9Is3 + uX3vApevHefcWTn+WB+nj+zi1MEmjo2UqgzgiX3xjO+OZHh7EAc6/eht2cDexrXsb1qvMn4H2nwl//hL + fvDnQPM6yRsrVMZve/4COvIX0lEgyF9MR95SwUo681bTnu09ZQAHLSbdx52E5XMIc7MmyNFctQ+wr70h + Ia6WxC1xIstnMeWhy2mKms+WGGfRUq4czBYOkOfEHWmzB2X2vFhuw+uV5rxZY8NrLe680OHJrVYfjtT6 + yJjxlt/0piFzHbUpPlTELKU62p3mBFd2Zs+lv3whY/WLGWp0p7fagW6JS7vLFNip0F3uwK5iO9pzhKMI + v1F4YLFw2V8M4NhfLQGtgpUqlrWl29GZ7cSO/Ln0VHjQW7VEZQB3FS9gR44b27Nc2F0wn4Fq5f88bw61 + eqn2/+6tWjgF4Ti7il2Ek9pRnWROWZw5pXGmqkl7FfFGNCYa0Sn8c2eWGd05JnRJ3tmZof0LurJ02avs + CVxiIvxTMXmtVRh7uBLNqPR/FSpNGJGYPKLcNCQ5aqJhIYebhP83b2C8MYDx+mAOVgczXrqRsWwvDqZ4 + CLefz9nEBVxLmMftpLncTXbjVoojV1MdOJ8xh6OZc9iz2Vw4gDlN4dY0hNvTFO3CFvlMd8Yy+go96S9Z + SX/pMg6ULZVzXEh37lw6ZOzVyecqI00oFd1fHG5KkfCIwkhTCuS1AtH2RRFGlEQKf48xo0F4ZWuirco4 + VrbP2xJrSkuE5KpgbWoC1Knx16AhWJ+mMBOB2RTkO5vle1qV5aETjOmSOLovx4j+fAN6c3XZlanFlnRN + WpO1aUrUFc5voLpBtFG4f53omUrR/xUROtKHdKiPle8W7dMsfUJBS/yUIazceLo1zZQd0l92SL7sksf7 + kk3oE43UL+8NKNtOSbtNCOf4xQAW3quYvneyzLmdYcEN+cz1VDOpU1Muy2fPxok2jzfgWKIBR1KVG62M + GZVc0pehx750XXqzDVRG9oE8EwaEcwwWinYulrLUTOrajH3CB3bn6LEzXYdtKVoqE3if9JEh0Q4TJUac + rrbkYp0NV1qcudE5jytbhF83z2e4yoXuQnupByPhjHL9SSYqE7heeERrtg1b5b2dyr70kpu6lX3ppewr + lVhbYs+AjJshyS2D+TYCO0ZkvB5RZtO2r+TstikD+EKvL+cPBHL8QDCHD4RyYiyBK8cLefbWDt59boI3 + n5zg1sndwoWzqc4KJGuzJ5mRy6nM9KWjUrhsXRytZWEUJK0iY/NiEsPciA+ZQ0yws2AOsUopekC5oSc2 + 0IKEABOS/Q1IFy7wawP4f88AHq1yFbjJ+HBnpHIuB+W8j7Wu4pzkoZv7Y7nRl8T5XZuZbAnkYKMvhxq8 + mWhcxWTjChk/yzjT6cXVLl/u9Ufy1GA0j/WGcbM7QGX+Xt6ykUuCG7sCeWYonndPFaC2K9dOgoI1WzPM + aU3SVxnArbGa0rG1VQZwr9LY/8sAVgyCmmghKqum4TtPTUi/GkHLZhK6SoMIbx3CHiJ8rQ5RG/RJ8DMm + PdicrBBTcsOMKVSWv4wxoFo6bYNyt/TPBnCypQRoaxlkFpSFm5MfYEj2ei0RSEIG182kOlSHlmgD2kQY + t0drsi1Wm33y2UHpEAeLXIW0zGO0ZC5Dgu5sGfzyG+UBs6gOlgEZLtclg2d7igF7JXD1CWkeEDE5IAFs + NMeQYyKcLzQ4cLXVQUSxDdfbbbnZJsS52ZkrdS6cKXfimATGQ7luDGdIkIxypsbPhjRPY0IWiChzUydo + kSbBHhoi5JQZGgKPWUR6aBGxRJ/wpSaEL7ckcKk1GxZbS3K3ZKmrKfMd9XGz1WauiLv5zlp4uGqyZK4O + Hu46LHDXY+48PdyknC/lMjdd1roKoXTRJsRZkxhHdfLcJBj8ygCe3GDGqY0GnJd6u7JxGk9HTxeRocXH + tRb8u8OZr7a68OXWOXy5zYV/tc9RLeP1epYBr6SICIkz5H6kHlclgJ1aO53xZWoMKAbwSjWOb5jBeanL + WxHqPBmnycuZurxTashftlrz71E3vjk3n2+vuvOf23P46bYtP10xhlMm/LTfiq/azPh7mQ4fpc9WGcAv + hqrxQugMlfH7XMgUng8WBM7kxSDlGB3eTzDlL5nmfFlqxTdV5nxVbcxXtUb8u1GfL5p1+FeLDp+1aPFp + kyb/aNTg7/UafFKnzt/qNPisVY/vuyz4cb89Px5w5qeBKSCPkde+22XGvzp0+GvrTP6xS4Ovho358YwD + XHeDu+5wz43/POY8tR/sE0788GAOvDAfXl4Cryl7567iP08v55t7Hvzr2jz+es6Z3x214d1xS14bMOG5 + vTo8sUOdx7fO5vEtUl87tHiwS4endmrz/F49Xu7V580BQ94bMeEPY+b8cdicDw6Y8W6vBe/1O/FGjwtP + tjmJELTibI4157NsuZBlydVcM15otOejvfP5bHwZX0ws4cvJRXwxvog/djnwUpUe93PkNzM1eFxE4GO5 + xtwts+KOEM/nttvxwZgbn15w55vHXOWaHPnpJbm+F6z55llLvnnCgq9vm/L1BWM+P6LPlxNGfHfSke+u + LeKnZ9fLdQfA6/7wpuBVef68Fzy5ku9vLOabM3P515g9/5S2/tceK/7Sqs9bRdN4MU2NezFq3BRciVXj + UuIjnEmZwfEkEdDJGowmqLN/8zT2Sn/oCVKjL1CNgyFqnIqYwZXN2tyRcX5382wei3yU5+TYd/L1+F2N + Ln/daSjXb8JnZwz48q4J374gbf22LXzkBJ9IG3+qmL92/PS5I3w+h/985sq3n8zh279Iu36yiB8/WcKP + f13KD3+S8mNP+HiVfM4b/uojkGtTYQP8SZ6/tRSeW8B/7rjy9XlHvjxux1dH7Pl+0pHvD0sfOSx9//BC + vj7qzWeHA3hz91oR04sYS3Fle6QTDVHuFEXOIzXQgc1rLQhYqk/AEgMilpsRs9KKxNVTBnBR6ALKNy8S + krWYYiGKivlbHDefwmg3ckMdRRhbkLLOlByJOSUhjlQp5m/EHCrDnKje7EbFZhdyA63J9rWQ90XYxi+g + NWER+T4iGFfpU+JjQrW/iEMRs1W+klR9DagK0KcuREidEJ1WEaRbhAh1C8n9rwG84FcG8DLGm5cx1rKM + EcFQm5Co1qXsb19O/5Y1HNrjz8nBGC5MZHLmYBZHBjM5MlzG07cnefv5W7zzwl1+88wNnrlxkoN720Ss + xpIT7k3COleilptLvNQmaok6Sau1yFGWqg62pinUjvoAW2rXW1KzRgjvGnNafO1pCXIWsiWQOtgSv4g9 + 6StUBnCr1HHjenPaNpqzNdCKXSE27IuwZ3+ELfvCRYCFmrI32JA9igEcqElPiCZ7Q2axT7A/eAYHgmcx + Fq45ZQAnmHFRxPZJiUXHQtQ5FqbOZMRsJiJnM6ZgszoH43Q5qCytIoRsb8hMdvo9yk7fGfLdQnLC9BiI + ktwUrRjAlg8NYDt6hDR2JdmoZlw3x1lQmyDEM96cks0m5Abpk7ZJiwx/fbKCJVeGW1AYZU3hZhuKNtsK + GXekImmOygAuibFXGcC5ikkcruzBb6a6wSpXrjMrVETMRl1CVk0nbOUsErx0yVhrSL63MXmrDCj0NCRv + mWL8ChlZoTw2JGOJLske2iR46BC3TJ/o5XpsXmXIZi9Twlcb/WIAb5J85rtEBOVSLdWM4IClku+WzSZ0 + uTrRK7XJ8DEmX9qgWNqgYpM5tf4iYIKEW4QIJJ9v8dOnO9iYkej/GsBH481UM2nHwww4GPazAWzJmTgb + jkdaMhZoxHCgIYPSVxUDuNtfjx1+WmzbqEmXn47EDUOGQ80YCTFjUDk2yJhjm+04LwLhkmIAJ0wZwBPR + igGsz4DElZ5IDbrCZ9IdNos94bMkBqnTE64h0GKP9IudATPlN6azW8rugNl0KzcMKEZwkDb90n/6FRM4 + 3IARIXIHQrXlHDTY6zudXevV6N6kxr6gaQxJrpwQon5YyPyRZD2OphlwMttIIHwjU48jEqMPZ8j76fpM + phpwSAj2eJpcS6oufQnSL+Nmsj9xBgOSN4dzNRgr0GG8RIdDZfocV83iEgLfaM3NBkseq7dQGcBP1Bnz + tMoANuDZah2eqdLiBWUmcJMRr7eJWFWM318ZwG+1TZnAbzSb8nqTKW+1Wk6Zvp12/LbDnnfarXjnfxjA + yo1fivmrxUe1mnxYo8H7ter8tkaT9+v0+GOrGX9sMeOjemM+rDYSjqDPq3mS+1LVuRb9CKdDH+Gk1PsZ + 4W4nY/QYD9Zi0F+Lfj89eh8awHslzu1eZ8bODda0yNivXm+mMnVLvUQEq/YBlvKhAVy4Rk+gP2UAy3MF + FXJshbfwS3lc5yMcU/p+81oh3OsMqd9oRK2fCbWBptRIf6mWvlYt47QmUkS2iD9lVvD/NIDl+F8ZwI3h + hjSJGGyOMhFMGb+/GMDKSgrCi7eKSNwmAn1rtAk7RDzvFi6jGMH7kszYIxxLMYF7E0Q0CfedyJoygI/k + mqv+eD2WI+Isy1T6hryXqs+QxJh9m3XoFH5UuWEmMcLHNrqpsdJRjRUCf3ke7/UoxRLPmuX3ulLspa/M + Zyx/AX1pzmyPtaZGxkPs0ll4WD2Cg9mjGJnMQMtMBy0bAzStNdGwmqkygHVMHkHfSA0Ls1m4OOqxxM2E + tQss2LTEmsDltoSstCdkhbWMdwuCJGYHLzFRmRaRC7VJXqxDvsSNek85h3U2DGwS4eVlwZFlxpxYYshp + iTHnVhhwSdrrimiDqxt0ubhem3O+upwN0ON0kAEnHkIxgI+JUDoh5UnJUcf8tZnYNJNR4aB9PtPp8Van + a40ubZ7SVsoS0PP1CHCajZfdTBZZPoqbXIuztToOiulro4O1tS6WNtoq2MhzxRS2s9PD3kYxgGex2G62 + 8Gp1In4xgCWOrDfhxDojLnkbyXnrMLZ4Jr0LZtCzQtpD+uRWbwtqPERfLDKkykOE6XIrWjzt6FjjSKf3 + HLZ6ObJrlSP7ljlzYLGU823Z5WzONgdjdjqb0eNuQ+98G/YusKVrgegv0QRtS21oXulAg5cTNWslxq+1 + J8/blvQ1yupBJkSvEnhbErPBhsiHs4BDfG0J2GjNRh9z1ki8XrXMgFVLDfCUcoWUy5cYsVTOU4XFRixa + ZMD8+Tq4uMzG3nEWtg6zsbHXxNpOVzV718LOBHNbS4E1ZtY2GFuYoWdihLahLpqKCWykJc/1MLaW4+wt + sHaywtLBXGUAG5nryGcMsHEwxV6u1U2ubekqN3wDPImNDyA7O5qywhQq81OpzU2lMTuRjoxIdmUEitZc + y2DuSg7lL+VY3mJOZy/ibIY7lzKduJxhw+VU4b9pFlxJNueyjKdLCYZcFJxNNlHt63syzZwTqdLffjaA + JYcr5q+yosPoZgMm5TPHUq05mW7H8TQbJpIsJQcZ0xchcSdcm/0S9/dHaDIQrcFwvBbjyZocU5asl3h8 + SXTw5UzpC9kmXC2yEl5uwalsGZ8SuwfTdOhO/NkANmSn6NHO1Kl9fOvjJbY8NH1VkPOqEkwZwObUy/k2 + Z0q/ybalUeJAXbo5ZcIliqN0BFoqlEbrUpdozBbRuNvzHdiSYyl1Zq4ygjtSjX8xgFXLPxcJ1/iVATxU + bsZopRkHK82nDOByyS/FukwITlYYc07ZRkC50bndgetttlxtFA1cbsgFef9CoRaXCoSDlxjxZIUFL9RY + 8WadPW8L3iq35q1iU97ON+TtPD0+LDTmr5XKlkK2/LvGhn+VWfD3YkM+LdTjizLF/J0ygL8q1+frhwbw + ZwWi1/Jn86e8Wfy5RJOPqw35W5MFn7TZ8PtGS96oNuC5Ui2eLNLgXokWd+V87hbocSvXkFvSDjeUJeqy + pD9kWnAmzZTDyaaMJk0ZwN2ptnSm2FGnLAEdYUpxmOkvBnCFcK7qRAsa0q1pyJgygJvk+1ol/ioG8K5i + W/aUWLNPrrGvxIrxQkuOF9pxpsyFcxXunCuZz9EcN4aTndgVakGnvylbAhSuac8e4eld/nZ0+lhQL/yq + eqEW7Z4W7Bduf6VqM++MtvDZ9SG+fuIo/7gzzoPRRprjlwvvNVBtgeLjMkPiqj6BEtcCVxgJz9Jnjess + VjtMZ7XNo6yynYGX42zWueniKzHHf6k5PgsNWOmqhYeMZQ+HmSyfo8UqV4kBghXOuqyYo8sadxM2eFgT + 4eNOZoQXWZHepIetIjloBRlhK6nPDmZ4RyHnxpo4O1LN6K5MtlYEUZLoQWqIM4lyTSnBcyiM86Axbx1d + 1eEMdibT2xRLbYYXKYEubFyow1I5R08HDXwXirbxmktOsCd1KYG05USwpXAz7XkRFIR7Eil5ZMNcPda5 + 6rDBTQdfdx2iPc0piprH7ipf+pr9GWr35eB2Pw7uWM/IlrUMNHvSV7+SwTpvRuo3MFK3iZHq9ezKEp0T + Y0uV8MAy70dpEx7WG2csbWTPxeI53Cp14V6Fq3AhV16ud+El6ctP5Yomz57GK9KnPqgQDV5lxe8rbVXm + 7ZuVNjwrbX9Txs/FUjPOlphxqkxZAnrKAD6UrcegaNYx0aunw6bxpPC2V/Ms+G25A7+rdpbvsFUZwO8V + W6kM4LdyTHg1TY9XJD68nWWsMn9/MYBFz7+jrLyWocuz6RrcT1fnVo4Wlwt0OZ6ryXjWTIazZzOaq8Vo + liaHc7S5UWvNg1YXnm9z5YUGZ54sNudOlgE3JQ5dT1YXaHA3U4cHxTJmq+15UfBUqRU3pI+fSdBhxH86 + 40EaHBOOcibFgUvSl68UzOd6xXyuVLpxttSeEwUW8lsS3zL1mcjWZVKu+Yj89ik5r8syrm+VGXG/2pgH + wj/v11hwq8qc82XCWYpNVLOAunOE5z80gCvShLcJz6mU2FYlcbE+xZwmGaetgo4k4UrK8s45dnK8rcRH + QxLWP0K0MgPYbxaFMaY0pNmpZg3/2gDuyxTOnWHAYLoew2m6jChI1mY0RZPJDG0OZ2nJmFVmABv8Pwzg + yQprRsvsJT4601PqRmumPcWxFmSIfkoINiNadGPk/4sBvEl440bhj+vW6+OzTp/1G/RVewAr+/6Gixab + MoCnloIOCjaRvKccp8FGX9FJIfqERZoQIXxzc7T5/20AS7yKFm4ZGa5HlCBa9EWc8Mr4zUYkSV0kKkZw + jAnpsaZkiT7NlxxSmWVHrdRffa4t9Xk2NORKHpGY1pApHDfdgJpUbckrurRmGdGZa8pO6Ze7SoSLlNiw + u9ia3gpHRuvmcqxlIcebfm0A26sM4KEKF3qKHdiZa017prICheEvaJa+3yq/oTKA5bsHpb+fLLPiljKL + ftt8PupexF86nflrsy0ft9rxSeccPtnqzu873Hijxo6nyiTvVC7mfJU3J2uDOdoUx/HtmTx2pJUnz27j + 4mgVh7szOdqVypk96Vzan8nVwWyuDaZydm8kx7Yoe5eu5MLWlTy2Zy1P7/Pm2d2ePLNtgYwRGRuNttyT + PnpPtNHjklvuirZ5rNOGx7bZ89iuOdzZ6cqtHfO4172EFwbX8dbhYP54NZnfX0zk3RNRvDIWxhPdIXJM + BNd2RnNlbzKPH67g9ok6Lh9v4MIJiZdHGzk1XsPZ4VIuDhapZgef7UpisjmYAxUr6Ktypr/Whv2CvdWS + m2Ss7K4wp0viy84KG7YUOdGc7UBpoi3ZovHjpa+FivZZJ9p8tbs6oauMKYpZSFdlEPvqw9lRHij5yoeC + qEXEbXBg02JDvOfqsmqONiuddSTuG0k+EM7nqCO8VgNPVz18hPeFb3QgO2kFrTXh7N+VxcHBCo5NNnHs + 2BYmJrcyMr6FA4Nb2bazieyCDHz8fVm1MYiE7HpqOsbZ1nuerv4L7Bu+Sv/wdQaGbtLXd4rufT3s3t/J + /oHtjAzv5ejkAKePj3DxzBhXL01w5/YpnnjqEi+8epvX336CV39zj2deuMaNOyc4d2GMo0d6OXZoN6cm + tnH6UBPHRxUDOJOJHmVVikgGtwawv3Wjyvztql3DXon/+5vXqwzg0a1BHFaWiO7wVS0D3VGwgI68hwaw + CooBvERlAHfkrvrFAC4KXkzGunkkr3Qlyl3Guosl/s4mBAhC51kRv2IO2ZuWUhW1kvbY+aLhnDiQ7ixx + 0IkLwsEeK7HnaYnxLwnPeUva813hPW+1zefVLat5vGMdJxvXSduvZUeRj3C7dRLDvCW2LaZa2Toy3hll + /9h9hS4MVc+VvuHM3gor9pRb0l1uxV7JH8ps4J4qR3luL+dtSVOGKVXxBhQJR50ygA1+ZQDb0pCiwPqh + ASzcJ9uRHfmu7C1fyP7qJeyr8KCrZCHbJNa3SKzpzHASjjOfA9VLGaxfzr7qhXSXzpVjXFWzKtslniiz + fYtiDCiMEo0dYySPRV+rVrPRpy3FQOKxifB2KSXvbE3RUGFbqgY70rXYna0v1yf6tsyMcenzKgNYMX+l + rkaqzISXSp4ok/hdYiilvFZu83Dm4yKGK1ewX9mjN2cZe1Ll3JMW0hvjznCMMxObHTkV7cjlzQ7ciLHn + dqwNN+OtuJpgxVmJo5NSF3skxio3gTVHWNAYaUNTlBNtsa5sS5zHnqxF7CtYzP7iRfSXLRR+N5/dOa6S + h2ypjTKlPNyYYmW70FATCgR5YSbky2t5EYYUhBlK/RtRrvxXEC3fLb/dGi8xUXJHi9RRXYiucBBNKv1m + U+GnTn2wnmp1xcZwOTZM4rHkl0Y5txaJ352JZuySfNYtcbNHcuuuDE06UmbRnDSLhiRN6pN0pV2NaEg2 + o1bREJul7sN0KAnRolw0TU20DrUxogti9GiSnNmSaCR6w4g2ybPtogm2SM7dmmai2jahW17bJ+hPUVYr + +t8GsCXX8ixVM35vC4++LXz4eooJ14RLXxJddTFBtLvoj2PyW5PS7oeSDBlLN5K8a0SP5N49knf3CX/p + y5Xvl+88IPF/oMhc2lVKGRt9okV65He6cpX+oqsygHdJ/+jN0mMkz4AjJcZcqJbflDh9q92Zu9vmcaNz + IWea3RmvmiOfVZY1F90k11f10ABuUG5CyrNna7ETO8vmCF93ZLvkpt2S+3oLbDhQbMdgkS3DgsECa5UB + rGxpcOxXBvC53T5c6vXl4kAQJ/oDmOj1Z6IvlDMH03hwrZ13nhnhjXsj3Dq+nf1tGdRm+5ERsZSUkAUU + p6yhuTiYjopwGgv9yYn1IDnMjegAe8I3WRGywZwwX2s2BzkQLfxBMYBjAsyJ9zcmyU+fNH8d8oJ0/ocB + 3CO5u69IMYCdVDdcDZUrcBO4Mlq9gEP1SzkuceVydwSX98ZxcmsYo/WbGKr1YaRmJaO1yxir9WCsZiEH + 6xZxvGUFl3Zs5Ppuf67u3CT5cR0XO9dzoWP9/zCAf3u6ELV9JS505duzLdtShKuxagnollh1tiZq0S3J + vUcG+X5lD2Cp5BEJEMMVC9iZ5SSDxYDolY+yyV0xgB8heNksQlZpELJag8A1AimD1mgS6q2tmgmsLAWd + EWRMjgywgjBl6UsDKkXs1icKUZROpxjAzSlWNCRaUyUEqTTUlFw/PdK9Z5Mov5O5dgblUnENkfq0SKfs + iNNmR7wu+4VYDmRLgCmcw2T5fA6WuTMixK4704aWzXpUBkyXwTmb1s3abFNmNSvkUQTrmBDWCQXSCY+W + mooYtuG6EOub7XO4pjKB7bjWIgSlyYXLtS6qGcDH5DcO5bgwnOHGLglE9YHW5Kw1ZfNSA4IWahLioUng + wpkEzJ9G8MIZhAhCF2kQulhX3jMiZKklAUtt2LDYhlXulni4mOLuoI+LrTZu9pq4O2my0EWDxXMlec/X + YeF8PebN02WuJPiF7iLm3LTZ4KpNkIsWUc6aJMjxhe5SHyIGf14C+rBiAG8y5Pwmba74TePpuJm8W6TL + J402fL1zLt/scuebLne+2jWPzzpdRaiY82qGIS/IIHs6Toh9pBHXAnQ47TOLg8unZgArS0AfXzed8/4z + uR2hzv0YTZ5L1uTVXG0+ajHnswFnvj45n28vz+M/N1346aY9P10xg1Nm/NRvyddtJvy9TIuP0mfyetR/ + DeAXQqeM3+eCZvNswEye2TRdhVdD5XuTLPm7DIwfahz4scGGHxot+b7Zgu/ku75uM+TfLfr8q0mbT+u1 + +EedJp9UqfPXytkqfFqnw9dbTPm+y5rv99rxn70O/NCjlILdVnzVacinLRr8pWk6/9ilxVfDpnBuDtxe + AI/Nh3vu/HTPle/vO6vwnydd4Bl3eH4RvLgEnl3OT08t5bu7i/jsgisfH7Png1Fz3uwz4YXdetzvnM2N + pmlcrVMwXQLcLG61zOZ26yzubVXn6S6pu/06vDtixB8OmvOHUVM+GDDhvT4RhQfseHe/E6/scOZ+nY1q + 37HrOQpMuSP99jXpl3/pn8eXR5bx1TEPvj62kC8m5/PnHnteqdXlidyZPJ6pzj0RQvdyDXlcgvDjtRa8 + uM2G343O4bPzrnx105Hv7tvw04v2fP+8Nd8+bcG3TwjumPHdFVO+OmnIN0el/s5Ivd1eDC9tgLeC4B3B + eyHwtj+8Ia+94MX3jy3jm4sL+PyIM58N2vOvHlv+2m7Eu8UzeUkxgKPVuLn5Ea5EP8JZeXwsWsRz1DQG + BPvCp9Md9ii7g9XYG6DGfj81xqQ8HjKDS+Ha3I7U5fHI2dyPms7LkjzeF8Lw+3p9Puky5PNDJnx+zoiv + HjPhuxfM+PFta/i9A3ziCJ9K+Zk1P35hx09fSPt97sJ3n7ry3d/d+c+ncj3/lPb7x0qBJ/zLRyDX8oUf + fC7X9blco4LPguW7AuSaveQ65fjHF/HtpblSN3P4+qj0i8k5fDfhyrcH5/HVocV8MeHNX0d9ea5jFWeE + iA4lubEt0lWIwkJKNi8gNdCJiLXmbFysg++iqXgQsdSUhFU2ZKx3ojh0AZUxHlTEe1AY7U5+9FyVCVwQ + 5UZ2iCMpGy1Ve7JmbLCgIMiWinBnKiLmSBxW9nh0oyrGjfwQZV92KyEx9ipTuH7zXJUBnLvGgJJ1kkD9 + LFUmcIXEhwpfib+SkGokHtcLYWoRUqPcCbcraw57hDz2lc5jsEqST8NSJhqXcahpKeNNSxhp8mBIQcsS + BloFW1YyuG0Nh3sCODMSx6UjWZybzOHIYAYTA4XcvzrEb569zNvPX+d1EQJPXJ5gtKue6owwMoKXk7zB + lQQvG+JE6CSs0hViLkTX35T6cFuaw+yp87el2seSCk9TKlaa0rjBnuYgF5rD3WmNWcD2lOWSpzzZHr+I + 5kBH6tYL0RI0+5rTGWBJV6iN9DEhCKEW0s9M6ArQo0uS8J5AbXpCtKdmAgfNYl/gDPYLhkOV5Wn1OZdo + wXkhaielDx4JUedImAaHwtQ5GK7OWNhsRiUOjm3W4WCCEUNClHskx+zym06X72zVd+8L1aNfxP6BSDP6 + N1uwP8aS3ng7epLs2S0kfGuiDe2S65qSRbAnyvXFmkteNCLTX1dgQE6wCPxwacsoW9VsX8UALolxoDzB + mfJ4xQB2oCDSWmUS54SZkqUsFR2qmMGWUkpf2WTAZi91Er11KNhkRnmALVW+NpRLHyxbY0rxSkOB1LVi + Bq8wJM1Dm8RF2sQt0iFmiS5RS/WIXKmvmv0b+msDeIkmGyXPKQaw71INyWezCRaELVMnerkW6T5CnKX+ + izaaU+5rQY20QUOwOS1yPS0BRmzxN6Q7xJihaCsOJ9hyTGUAWzw0gIWgCiaFdB+PMudktDXHIswZl3Yb + DRYCK1CWed6tGMC+WmzfpCVxQ1/1+qhc+3iIOcOBxowIjkTYcEbq6mKKi5QOHIu15GC0vBejz4FYPXo2 + i1CJUqcrYha7w2fRHSql5KPd0v67pL23B8xgm/90lRG8S9AlOUoxgfcFabFfBR0OhOoyEKZLnxDz3kAN + un2n0bVRjW6/R+gNnq5aanoiQZ/JJAMmknSYSNZTzeycTJd+I/lzLFGd8VR5nKLDeLKuQJ/RFGX2rzb7 + E6cM4N7EmfSnzmQwW53RfG3Gi+X4Mj2OVhhyptqYSzVC2KtNuVtvwZMNFioD+KlaQ56pNeDpah0eVEmu + rtbmRYmbr7aY8nrblAGsmv3bbqUygN+WUjGBlcfvdk6Zv2+328hza9XrCt5pNuW3jUZ8IN/zfo02H9Zq + 8UG1Ju9XafButQZvK2WNDr+X3/iDslR0vQkfVBnydokuL2dr8lTyLK5JHjgdosaZiJmcF+52TsbOpNTf + sL82A8L19v8PA9icHTLum9ZZTC3/vMaIYsXoXa2nmgWsGL7FKgNYl8LVU89LfIxUpnCZt7FqmWhlKWiV + AexlQLOXiKW1+jRIfKnfZEKd8NEa6ZPVIsxqpa/VyRhVTGDF/P3/NoCnZv9OGcDCW39lACtL6beLQOzY + LCJP3msTkr9F+tyOWGN2JZixJ1GuSwTb7jgD9iQYsl9E23iWxdQy0IoBnK/MAlaWATfniIj+iTQjhoUf + 743SpUliS96aRwibr8Y6NzU8XdRY5apG2MpHyNg0k6oI4cQSs/ZkODKU585orjt96U5sj7aUuK/P5kXT + WGiqho2RGiYmM9A110HHRh9Na2UP4P8awHqGj2BmOgNHO23mOemxbI4Bq+Ya4TPfBN/FZvgvNiFwsTFB + SyQmLNQjZJ4GUfM1SBOOW7xcRM1qM7rXWXNggw2Dq0w4uESfIx56nFiuz5mVelyU9rvspcPV9bpcWq/N + RV894ZV6nAk0UM0CVhnAgXocFg56NFDEZ5C+6vHoxpkc8JnOnjXT2LFqFh0rtahbpk/JSnOSFhoQrKyM + 46jOAvNHcTGfhqPlLOwsNVWzfi1/bQDb/soAFt7taqPBUkdN1ruLTvHQodTbRGUAH1hvwjHBBel7J1bq + 0L9gOtulzjsWzGSLp1ynpwnFi/TJnadHwUJjKpZbU7/KgRZvJ9rWzqFjrQjT1Y7sXeZE32IH9ilGr4sV + 25xM2e5kzk4XC3a6SjnXgu2CzvkWtC62omWZPY3yuVpvR0q87MhfY0P6agsSJP/FrjInxtuSWKnbqE22 + hPva/mIAb1pvjreMkTUS05VZwKuWG7JSZQIbsmyxAUvlXD0W6oum0MXdTQtnx5nY28/E1n4WNnYavzKA + zTC3txLYYGZrh7GVBfpmJmgb66NhoIOmkRa6pnoYWZtg4WCJrYuNahbwzwawsgy0tZ2RfK8xzi5mLF7m + yMZNHkRvXk9mWgjlBXHU5MfTmBtPW3Y0W4QHdGX4Sb/1Eh23kvFcDyZyRcRmz+dUhisXMh24lGHN5TQL + rilINudqkhlXEo25kiztk2LGOdGAp+W9U78ygEejlX3m9RiJlpgqQntSPnMk1YZj6XaqclzyznCsqXBQ + XclHGsIN1FXxvzdqNv2xGgwlajIhcfl0igFnU/W5kG4o52LEpXwLzuSZcTTTkDGJ3X0Sx/+fBrDku//D + AK783wZwmiXNolObRec05dhQl2FBcYwe+VHaAk0KIjQoitKiWmJFp7y/s0jGc4FilliqDOD2VKP/TwN4 + WDGAK8w4KDhUJSibMoAPSg5RZgGfkrxxqcWGa+32XOuw5UqzlWrp1ON56pzIncWZXHVulRnzoNqKF0WL + vN7gwJt1drxRbsUbJab8psCQN/P1eK/ImL9UWvKPamv+VWXFP0vM+EehAf8s1OXfZcrM3ykDWFn++WcD + +F+KAVwwmz/lz+JPog3/XGPIJy1WfNJpz+9bbflNgynPV+lzX957rFSL28Wa3MrX4Vq2HtdFr16T2Hg1 + Xc4/3YwzUueHk/5rAO9JsWVbih1NcVZUKdtIRZpTIfy2MkaeJ1hRrSydmG5NY7bwL9FWzXnmtOdZsLXQ + ml0lduwps2ZfhRUHyqw4VGjJySJ7zpa5CuZyutCdw1kuwu8d2RNhxY5gK7YH27BbuGpPuCM7/Wxo8zKh + RjhSufssGpcZCd904VRJEC8dqOS9E9v53YUe3j7bxdV9xcLh5xG8SJPVDmqsdlITfaAhHEu5yU60/kIt + 1rmr4zNnJmsdpuHlMB0vp5kS/zXx9TAU/mXImvnaLHNWlr1XU2Gp0yxWuGizwlV5XVOFla66qlnCgavs + SVSWvwxdTmrIUhKDPEgLXUpV+ib6O7M4O9rAhfF6Du8tYE/jZmoy15Ae5kpSkCOZcp7lKZ60FPqyuzaS + wc4k9jZGy2fXkCJ8fJPE/6V201jhMIuN842JWu1MRuAyalIDaMkNoz0/gvqMINJ8FxK4yILV9hp42qmz + VpmdNleXzRLHFQN4V8UG9jcpy3xuZHTrBsa2rWNsqxej7asYa13F4Y71nNjqx8kt/pzo2MRwxVL2ZDrR + EWlIo+TILcEz6I/T5USOJVdKHLhVbMe9MnuerXTkpRoHXqmy4NkCHZ6VPv6ajIX3K0z4XaUFH5Zb89ty + G16Vvv1AxtD1UlPOF5twqtBExoTkAGWGq2A0Q0t4vZpwFjVOhkzj2SwTflNsw/vy/SoDuOK/BrCyB7Cy + /++raTq8LJzuTeF+/2MGcK4J72ToyfvC0VJn82S6BneVZaAL9DiVq8VB4XzDWeoMZWowmDaLg1LelHH4 + dLsrL6gMYEfu5RurVvu6LlzyqvDF2xKPnpAx8rxcw6vVdrxcbcsTBcZcFf18ImomQ75qjAZMZ0K5sTVe + iZ0SX3NduVbuztWquZwttVPxkEPZwsUzJVZkazOZK7w1T5fTRQZcLjXihtTZYxI77tdacEfiypVyI+nf + xkwUGjEgv9Utn/3FAE4VXpZkTLmM0QqJ11XKyggJpjQIWpLNJH5Zsy3Hno4s0azyWrLvdOI3TictRHKx + xOiGdHta02xUBrCyBLSyJZ0yA/hAuvD4NInv6XqMKmWyDsNJmhyUupiQejomseJUiT6nyqUuJdb9bAAf + rrTloLTVSM1c+qsX0JErekq0WM5mK1JEb8WGSG4Nsvu/DWBfE9ZvMFSZv2t99Fi3XniHaC3F8FWgLAf9 + 817AQcGm+IqOW7tOnfWbNAkINiBcuGFEpCmbJRb9bAAnJU3t/5socSkuxpywEF1CRV9EiH6MCtMnNsKI + uEgj1ZLQKiN4szEpgrRo0XtSX3V5oocLHWkqsKc+z0o1A7hW+qQy+7c2TTGAdaiTOmpRDGDpd9sLLdhR + ZM2OYmu6BP1VTow1uHOsdSHHmpUloF0ZK7GfQpmzaknNniLFALai46EB3Cw5UYVfGcB7ckwYkP58vFjG + To09L26dy+92LxQtYMef6yz4c4MVH7fa87cOF/7c5sI7NXa8VOnE/YalXGv04UxDAMcaIzjcHsfVoTJu + TtZxqi+P8a1xHNoazYmdcZzbm8SF/clc6k/k1J4wDm9dy0TrCs5t9+Sx3nU8d2ADz/Ws4Zkdi3ggv/Nk + iz33m6y512jFYy2W3Bbc7bDmsa0O3NvpwmM73bizcwFP9Czj5ZGNvHc8ks/u5vKP29n88UIS7x6O5X53 + MLe2h3F9ZwzXe1N5cLKWB+fbuHdxC3cu7eDm2e1cPtLClYN13Bir5t5EDdf78zjRGc1gtRd91W701drT + K+iW/NhVIbyvTHif5OjtZbYqM6Mhw57ieBuyRc8nBpoRucEEvxWabFg8U7ieMVUpC9hbu4neeuFJ1ZvY + VryW2hQP0foubPYxJ8TTCP+lBvgvMyHI01oF/2Xmkkfk+SoLwnzkeyWOF2aspKM+lP270jg4WMxROdcj + h5s5eLCNoeEW+g60sm1HPTkF6fj4b2TVhgDis2qobBtkS88pdvWdYf/wRQaGLzM0dJn+/sN07d3Grp56 + evqaGBrs4PChXZw62sP5k/1cPT/MY7eO8tRTZ3nplWu88fZdXn/rDs+9oOwPfIgzp/dzcKSTyZF2Tsg5 + nJlo5ORoKYf70hjvjmasK0K17+++5vV013uxs3oV3bVrVAbw8JYADu0K5/jezapZwMoM4Pa8+f+HAezx + /zCAi4MXk7V+HimrXIgWXh4x14oQNzNC5poRvtCKhNWu5AYupz5uFVsT5rM7wVHirwNHMu24UujA/RJb + npX4+kqZaOIqcz6otePdtoW8vnU1T2zZwLnWDQxX+7C7bB1tuT7C8dZQn+xBXbwrrYmiC9Ic6c51oL/M + kV6JR91log2Fr+2R+LS3ypqeanv2Sa7aW+XAlnzhiCoDWI/ChwZwiejKimhTquNlvCfbPTSAbVUGsHKz + TEe2PdvznekuEQ1YrSwD7UF36SK25c2lNs6chkRLtuZMvd9btZjuinnsLHFha4GTajUaZZndomhdciJ1 + yI0QPrpZnwLh0aWCmlg9mpP02JJiyPZUXbZKXulMmk2HoDN5tlybJrskb/QINzxQasbY/zKAhyV3DEgO + 6S/Ro69QhwOSNwakLoclJg9XuNJfNI+9me7sSpkrOtmFnmhneiPsGZKxcVDi6qkICy5KeS3SgltRZtyM + NuNarHDAOAsOSwztlxi6K8aCjmipixg7gVxTrDNtUm5NdJJzc2WP1ENvyVz2FbqyM8tRzt1GZQCXhhpR + GGREfrAReQLFq8oNNSY3zJD8MHkv3Fh1Q6GyOm2tfH+jYgSLzq8P1acqQJuKTepT8NdQvdYQIe+FW1AX + ZkZtuBl18tnGGFNaEyzYlibnmWXGTsljnSmaNCXMEr0wi7pELeqT9KVdjQVmVMeYUB5hoDJ/CwM15BwV + E1iLykhtqjbrSh41Vi0VPQVjWlONaZO2UbTBVnm8S3LvXsUATpV6T1H+bzBjUvTLccUALrTiau6UAXwz + U+ozw1K0lYloK+E+8UaciRUtLlpkUvrCwRhdRhP0GZL435dupFrCujtN2lnyfG+O5GX5zv4C4d8PNUi/ + 8Kn9wp/3FlnSlWei0ijb0rTZna5NX5Ye43mi9Uvkt6olLjfbcq/dmSe2unO7cz7nm9w4VOHI/kI72oTf + K8tA1wi/V80AlvNskZjZWezMjocG8FbhejuyLOiR/NdfaKPa43+kyIYh4fMjhfYcLHOZMoDbVvxiAF/p + 9eWSMgN4vy8TezcwvseX4wMxPHW5kXcfDPDGYwe4c6yDgY40GnI2kRWxUDjzXEqSV6o4cEdZEI1568mJ + nk9yqDMx/taErjclcK0hwRvMiQiwFR5hQ0yQNdG/NoD9/i8D2EZlACtLVyuzgFUodVFhuHIeo9WLONS4 + ijPbAjnfFSU5MlDytjd9FZ4cqFjCQOUiBisXMFgunEY+MyKfOdq0klPtXpxuW8PJllWcavHibIs3F9rX + qZaAVhnAZ4pQ2yfCZpeQhx1SiTuzLWRgG9AuAnhbvCZdSSKOhVjtTdGnV8TpgQJnOVE31fJKRcHKXZuP + ErDwEcJXziZmrT6Ra/UI8JyFr4KVs9gkr/t7qhPmpUu8rxHpgYoBbExeiHI3ix5lUbrUxMtASTRUGcCt + 6SKG5btrY80pCzUhd5MuaV6zSFj5KFk+sygP0pNBpEeTfK4tRottcTrskwrcL51iIMeWsaI5jAoGC53o + SjGjRQZJTcA0GkNnsDVOWzqsnmrK/UiJIUeqjFXLKJ4QInuq2pwLdbZcbZ7D1aY5XBJifV6C+jkJwheF + 1J8rd+J4gQOTQlRHMxxkIDlKkLGjMcSS/A1mJK4ykroQwrZCh8AFM/B3f0TKRwlZMJ2Qheoi8HQFRgSr + DGA7Sey2eLpZstDJGFdbvSkD2FYTN/vZzHOcxaK5mixeoIPHAl3mzdNirqsGi9208HTRwNdFk9A5msQ5 + a5Mq4ql0nj6tHiZ0rZQ68BIhLOThlK8hF/y1uSZi6NkUDT6oNOFfW1z5vseD73oW8/0+D77Zs5h/yoB7 + T8TuK0Ksn4kz4EnpkPeEoN4MMuD8Ri0OS72PLlVjQlkCet00+c6Z3AlX5/5mdTl2Js+kzOL9OlP+0evE + 10fn8/3FBfx4Yy4/XXfix6vWcMaSnwYs+KbDkL+Xa/JR+gzejn2UV8Mf5aXQmYLZvBisznOB6jzrO5On + 10/jqXXyfpA2f0q15Wvp0DS7gRA5Wm35qd2GHzut+L7DnK+bjfm8Xpd/1Gjx9ypN/lo2i78Uz+Djkpn8 + vUKTL5oN+abTnG+2WfLNDmuBnMd2M77ZYsS/mrX4pGEmf2qYxqe7dflmzAouzoO7S+GxRXBvATwxjx+e + cOU/T7jw4xNyDk/JuTw9H56R95/ygPse/Of2Ij4/58InR+x5v9+M17oNeW67DncaZ3KhQo0zJWqcLn6E + E0XTOFP2KJfrpgvZnca9rbN4qVebd0aM+P2EGR+NG/PBoBHv9Rvzfp8Fv+214s0ua15sM+d+qT53cnVE + GOrwhCTNd7bY8o/ReXx3Zhnfn1vCD+cW882pRXwy6MxvWg15Mn8Wj2fM5p4E2vs5yvJt5jxZZ8krW234 + 8IAd/zzlyL8vS33cNuenZ6U+n7Xk+weW/HDfgh/uyuPrUrdnTfj6hNTVGVt5bSG87DNl/n4QBh9FwIeh + 8Ft/eH0D3z+1im+ue/D5qbl8NubMX7st+UOrAe+UyDWmPcr9aDXuxkznuvSXs5tnqJbOUpZ67hHsDn6E + HUGPsCvwEbr91Ngv4nTM7xGOB87ikgjA22G60h/VeSp6Fq+n6/C7MiP+2GzAJ3sM+WLChC8vGPHtfVO+ + f/GhAfwH6SefCD615cfPrPjPF9b88IUD33/uzHefzeW7fy7gP59J2322gp8+9ZTSC77cAF/7wbdyfd+G + COT6vo6Efwv+Jtf71iZ4bq30iRV8f2UR355ZwLfHpf6Vmb+H3PlqfCGfjSzh44FVvLN7DTeqPESAzmN/ + /Dw6I92pj1lEUZQkiQBHQmV8rlukpbpbXln2LGSRIbHK/lc+IgBC51MVt5SK+CUUbHYX8uVCXpSbiuRn + BDuSusmG5PVyrCSX3ABrSsMdKItwojzSmZq4ufLZuRSE2ZITbEVRiK2870hZiD35kpQKvI0oXicifJMZ + pZtMKNtkSJmvgZT6VAYr5oYJTdHKXdm2bMtwpEtE8T6J8weEGCrL1BxsWMJ4g4c8XsRw/UIGBSMtixlu + X8qIiK/RHV4c6w3k0sEkrh7N5txELpMH0hjrzRaB1MXrD87w9vOXeenxk9wWYTC4tUxEjS9p/gvI8HUj + faMDaessVeZhjpxfiYigqmBz6uRaqjdZUellTvkKIWjLTan1EbIb4CKxfQFbk1bQlbGGrnRPtsQuoDHI + ier1FtSsE+K03oSGDaa0BZqzVb5rS5ApW/wM6NyozbZNWnQH6rFXxPbuAHXpezPY4zedHikPBCnLQOtx + OtGCc0nmnIgy4HCYJhNCvg+FaTEuj8dCNRmV58o+g2MSMwc3G9Abosluv1nyXRrsVQzgYD16RfQrS073 + CIncF2lOT6w1exPs2J1oJ+duI4TZVgibsue9jYrMl0jszZXYm+WvEFALCsLltSjpG5vthZDbUhxjT2ms + E2UCxQAuirIjL8JStVR0ZoiJatno3DAL8sKkLpU9J3z0yJN2r/a1ljpzoNHPjtoN1lT7WFC5xpSK1SYU + qwxgg18M4NhFktd/NoBX6BMq7wevNiJwpR5+y7XYtEwxfyUPqQxgdQKWTRnA4VJGL9cg1cuQ7LXGFEi/ + K5X+VinkR5lt2RBkQqO/IR2BhnQJBziw2YKDInoPJ1lxON6SQ5tNGBWiPRpqyEEh3kekTx6Ta5kMMWVU + eINi7PYFGLLXX58uPz12bNJmp7InsLLks1z7WIhiFJsxEmCswkF5fCTCirMJTpyMt2NShMFYtLRVjD59 + igEco0O3cIiuKHV2R8xiV+gsdgRPYbtgW4BwhsDpbA+S50Ez2RUk/SRIQ2UAqyD5tcf/ZzNYix5llrDv + NJX52xM4jQPhsxmPU/Zx1WcyWTGAlcd6HEpRjF5NhoTsD8bMYCRRg9Ek6VNJOioof2QNJGnRn6xOX+Js + +kRUKQbwQLY6I3kaDw1gHQ6X6nG8VIcThZpcKjNQzQB+utmapyQfKwbwg1oDHlTr8FSNNs/V6PJcnT4v + NRrzqrLkc7tiAFvxm3Zr3mqzmjJ75fE7HTYq8/fdDjvebLXi9WYLXmuamhn8RoMRb9VJXJfvele+870q + LRG/Wrxbqcnbkn/fqtTgLSnfbzTkgwaBnMNvKw14U873pWwNnkqdpVoC+kLUdC7GaXIl2ZBLInCOChEe + DZBrVgzgjfpTS0ArBrCPjFsvM5q8ZSx7KwawsfRVfQpX6VG0Sp9i6WeFgvzVugJ5zduAYh+Jc2uNVMtD + l8rzckG9vNboJWR7ja5AxKu3Pk3rRVz5mUzthR5qRk2EOfVRltTKGK2SvlkpmDKATSU2GlMjwlAxf+vl + cYNAuZO3WQSjgiZ5PIWp520iSttEFHYoBvBmI9oFWzcbsy3WmB3xxuyMMxTos1vE1N5EA4bSpO9mmjCR + I3UhIupYngXHhIsfyTSXPGLKmAjFPSK8azdNI0N4WPgSNQKXqRGwYhpBq6aTtHEGBcEiOKMltkm82pPp + SF+OK4PZLuxPd2KbiFTFAI7xmMESCzXsjNSwNJ+NsZUuhnb66NhooGU1E33LmRiYT8PIZBpmptOxsZqN + o8DNRp0FDposd9HG210P3/n6BC3QJ3yxHuELtIh0n038fA2yl+hTsdKY9jWW7FlryX4fS/oldgws1WF8 + qS6T0nbHpZ3OeOlxfq1i/k4ZwJc26nFBzu9MgB6nJCafEI5/LFCXQzK+FEwEyHjxl/6xftb/j7K/jI7j + SrfHYdkWQ3cLWuqWWowW2DLJlixmZmZmZmYmyzLItmSZ2U7iOBzHSeygwzhJJjAzyUBgkgwnE9jvrpKT + zNx7f/+13g97VXV3dXXVgefZu3edc7Dgp45Jb3UM7dJED2NRE+NUlZcp45YJEj1kCHMxEA1gJ8V62JsL + BrAuLFU/GcBrsCLfthbWBOa921lL4WZrgJ3OUoRtNkLGDubEAAXGmGP3kdefClPirjBznNnN+L5ZE0NO + amhzXIcWD23UbZGi2F2CHJZLvhvb4XZLNPnYod3PDp2+tuj2s8GAtw0mt9lgZrMVZgUD2IM6y9USo84W + GLQ3xYAd46Ej2wnR58IY6UZsUaFzpzVafaixvC1R7q1CIbl9rrcSwlrLmf6WyAi2QmqYLRIjbEUDOJox + PZx5LyTADAG75fBnPfgRvjtN4LNDjp3C6F/yja0so82uErhTQzjaasLWSh3WhJWVtjhS2tzaCAobBcxs + LaAQDGAbG5ioVDBUmsLA1BC6xhLoyfUhVRjCxMoUKkdL2LnawsZJBTNhCmilBEpzKc9lDBXblw3Ld8tm + S4QGuSM9cTfK88LRWZ2IfmK4KhHjFXGYKo7CXHEoFpjHl0q9sFzmidVSd5wqccW5YgdcKbHGPcUWuFZk + jgcKBANYgQdFmOEh9o37Cy1wLz+/UmiOS9R8ggF8IssER9nPVjKMuTXBarYCJwqEJVWsRBzLU+FIjgqH + MpmTk6SYIt8cY+4fj9HALOP2HuqbA4xRK9kGOJMjxQXG7isFxrwWE9zNfnqhTI5Thcw7OXpYyGLcz9UV + DWBhWrepIsX/MoBbfgKvRdi28/3OPAt0C+ZvmQ36Km3RX2WLTt5HTTpzdooBoY+KJF3UJOuR21GTl1mK + BrAwQmOsVIUhxo0B6nLBAJ4sNsKeqjsGcONPBrD5zwbwKrfHm8yYNwQDWIZjxEnqinPUwHf3smwHrXAf + c8DVfsadWnKdcg0cL92A06UaeIDfuSnMINRthZe7bfBKpyVebbHAq43MC3XC2qcyvFcvxyd879NWFf7c + bI4v68zwVY0xvv7JAG66M/q3SfqLAVyji89rdPBJrRZ+3yzBJ11y/Ik56I+jdvjtkA3e5rW8xFz2ZIsU + jzVJ8HCdHu6vZN4okeJagQzXmEuv5hvj7nw5LucLBrCceVTBvGmBhTwrTJPLjubYoi/HDl3ZtujKJYS1 + 3ors0Vlojc4iK/RWso9WW2G4jsfWWGKy3gbTDb8YwEuN5CZ1lrhQZ4crjc7Ucs44X+mCkyVOzNMObCN2 + mEsin0uyxZ5ke9EAno60xHCgGeOTFB1bDNDtZYThECscIFe9uycND0wU44HpClydrcDR3nSUk5fFkUsF + u2sgwG09QrZoIYIcK3qnBLFeMnIrKWKoGaI9dBDupoNgVy2EuOuSdxmSjxnCb7MedrqoY4fTemx32oAd + LprwctHBLle+76rLrS583A0QuM0Y4YwjSUEOjB0uyIjYiLRwZ2RHuaEh3x/zfTk4d7AZlw634fh8JRYH + szDYEIHqDE8UJ25EDbVJV3kQRpvjsbc/k5y/SDymqzIYVRlbkcF4FL3TFBHb5IjdZYFUfwfkR21GS14Y + etnP+yvi0ZwbLK4RHLlZCT97CXYx9/g6GiDUlflptyVqUzdhuMYXcx1BWOgJwN4eb+zr3YWlgZ04OuyD + U6O+uDAeiMuTwbhrguD+mZ4dWGnYiAX2uek0XcylarFv64vLatzH/vBwjTmeaLDEcy02eKnNGq+0WuDF + eiO8yHb7ej05CvvH++wrv2Zd/6rJEi81qaizlXiw3hR3VRvjnLBMR40JzjdbiFgu0sfBJMFEVcOVBHW8 + VGmBdxup/1vs8EGLPT5otMH7DVbiFNBvVZji9WJDvMzY8EK2Ll7M0sE7pdT5ogFsivfLTPCrQgO8WqiD + Fwu08UyJPm5WGeER/u6VCilOVUpxtEyCw8W6WCIHXC3Wwf2t5nhq0AkvEC922+NJXt/D5IkPZKjj/rQN + eILne5bvvdykxButlnilhfdTboj7sjVwOm4dDoWq4Qi19mqcFk6myRjbzBnXbHBvnROuNjriQrUFTpab + YKVYMFeFkcfUPRUynGF5XWI/v9ZshgdazPBwmwKPtpnj/iY57qozxOka8rhKIxxgHJrlfY3yPnuK5Ggm + zxMM4PpcUzRky9EoPATD+NeeLcz6JzzIYo2xcgcMldqjg3G5kvG4MFYfpckmaBaMjSJbDBZaMU8wVpMn + HS4jeO5DRcLsC0bkToxpxSbsj1LWu8CldXCc5XW6QoKzNUS9Ac7XG+IC49851v3pVmqBdkesdnngUKcn + Rqqc2UZtUJFhhYIUK2Qm2iAlnnk11hZR0daIFMxfIjxSgdBwUwSGGCEw2BABRFCoCaJilIiJJ6g/YhNU + iKVmixUM4DgFv2fC4/XEaaCjqQMTyQ1TUpX/ZQBnCyN/qf3S0/lZMvtOlB7iIvWQFCdDSpIxMpLkyCS/ + /MkAzkkxRm6KiWgCl7Ecu5k3hhocMFBP3lGhRFsx9R7Lo5Xl01YoQztjZWcR+S/LbJDtbogYrmCOqrLA + FGPbwTZH0QA+0eeBE9webXUSR1CJ4Dn3EQs1dpiuVGG0TIlB1mk/81wf0V9kIhrAo6zvGZ5/P/vc6Soz + 3NdsiWf7HfHWoAPeZxv5HdvMx+1K/LHHCp8POuJPA074sN0Wb7Q74flBLzw2FIgrXYHMUwE43BqOE8Np + OD2dh5WRdBzsjcXKQCzOjCXh0mw6Ls+n4fJCCk5NReDoyG4s923HxQlvPLY/GLeXI/DCfn88P7MVz4y5 + 4tYQ+0e/FR7vU+HRPmGkGXkDNc2jw9a4Me5IOOPxCQ/cmtuO24u+eOtoFL64VojP7svHx5ez8N6JNNyc + jsQjo1HiKODH9uXj5cudeOeRabx38wDeunkIr11fwrNX5/DMlUk8e3EUL14exROrrbg8lY/DnSFYbHPH + YocDFtodMNNqjUnm5vF6c8IKo3W26CmlHme+qkm3QFmiOfKolTMj5EglN04J1OF7ZugqdhYNzoWO3Vjs + 9MV8izfGarYzj3mgOtUeJQlWyI9WITfKBvkxjiiIc+J5HJEbbY88tuOCBHuUZrmhvnQHRrqjsW8mB0cP + lePkaj1OHmvD0ZVOHDzQjsV9XZia6kJldRGCIkLhGxKFnLI2NPctYmT+NGYPXMDB5btw+MgVrCxfwtLS + CiZnuzExW4c9e+v4uhGnVrtw8eQQ7j47jfsuL+LGQ6t4+uY5vPTS3XjzrQfw5tv34/bt83jkoSVcOj+B + 5QOtOLbUivNHO3H5RAcuHKnF8YVcLE8mEwk/G8CzvO/JVh/MdfnjwGAYjs8k4vxiJs7vTcOhoVBMNm3H + QKU7eaVgAAvw/MUArthJ/DIFdF3sVpSGuiHf1wGZW62QtkmFpE0WSGJeSt6uQl6gC6oTd6Ivn7+Zvxl7 + c+1wON8KZ4osyUPs8BTr7oUGJV5rNMUHzB8fttvgvYHNeGNsN54eD8G9g6E42hmI+eYADFX6or/Uh7xj + G3ryNmKQ5xovtGV/scbeWissNFhgrkGOOcaneZ5rD3nUQpsV9vKcC212mKi1xECxGVqypLwmfdQmSglD + NDAmNAvLiOXYkNsIBvDaNNDCMpoDpWxbVcIU0i5rBnDrNsw1emK8aiOEJceaqBV789mfKx0w2+CO6UZX + ch9nlpctOsin6tMMUJ6gg9IEPZQxHlemGqE6/Y4BnClDb7YUQ+RfI7mC+auL4Rwtvib+DwP4CGPuSrsl + VhgHlluFWWnkOMi8u1hjgIUqPW4NyVsFU5ixiP1hf4Uj48hGHCz1wErJJhwvdMexbAesplAPJ8hxkbr8 + HmrwB5JM8Qg196Np1AGZgmGpxPlsFeM/yy7HChNZNhghPxvOdMRAhgP1Obl2qorXKwxysSdfdsB8pT3G + i6wxmE3tn2qGhrg1A7gyxggV3JbFEoIBHE99x9+s4W83JCnQnERNnaxCB/fb+FlrjBRNkfpoDtcl9NDG + 150JxuLAmvZEHpOgQEs8v5dAPcAY38VYP8C8O0LtMphvgt4cCbWCHstWDx3ZEnTkGlEfmKAz14x1zPpI + MEINc2JllC5qY/RQF6eHxkQDNKdI2Z7l6GFuFSBMl9xLTiygj3l3iK/HcpiP8+TYX2iGpUI5jgoGMOP/ + uWpq2yoV7itjXBSmfqa+eqjIAvfxN+9lbr4rnZwnVYrT1CLH+DvLaRIcYhvcn2tIrmWM+QIj0U+bLzbG + nlI5FplXFquom8m59rNN728WllGxxpyw1EClEhMla6PFhVHDB0uoPyqMcIn1/mCLEjf6rMUZT58e3YjH + h91xb48LTjfbYalGmJ1YxfZvSW6gFKeBbiukriqzooakDqqjHiLGK8jdS82xp4K/W8V2RA6zXKMiLKl3 + 7Kl9XHCmcwvO9e3ApdHduGsqAPfuCcFde0NxZi4Qx6b9iWCcXUzAM/e04ddPLeKtxxi7zvZieSRXnHGh + IskVJXEuaM3biaGaYIzUhaGrxAflSc7Ii7FBFnl/UqgZYoNMEBuioDa3QDJ5Q2qUOdKizO4YwDIUhv9i + APeRC/2nAXxAWLdYNIEdcIg5XTCAD7NvLjW64Qj78VnGlYvjcVjtDcXehp2Yr92KhfrNWGwQHmjYyFzt + xJgiGMiuWO3YipNdO3Cq0wsnO7jt2oVz3d641OuPa6PheHopE+9erIWasIjyZLU1ppjg99RYkbwpMJ5l + gIkMXUyyQU5l6hD6bEQmWChjhZbbo5/iuTpagkxfDSTv0kROqDEKY0hoSJAi+DpkpzqhieAdGgjboYlY + H31khgnzX5uyU7FDxchQHStBPQNaa4ZMHAXczwY4XGqD4WJbdGdZoJmdrTJMgkJ/LeTtVkcliVRrnNCp + hCcrDNBLcTycpo8ZXtceYa7zQorfchscqmAQKRfWWeQ5E3XQGb0BfQnrMclgtVhqiMO1RjgmrKHXYYJL + XWa41GGKS+0KXGlX4UqbDS6TyF8koT/DsjhdZY2zFIhnKqxJKi2xTMK6xCC7l4RtgsGkh6SvmpVeGGCC + giA5sn1liNusjig3NQo2NcR5qCNukw5iN1PIecrF9X+jttsi2NMGO53N4WFjBCeVZM0AphhytlSHi/UG + bHbRwtZN+thGuLtpw81ZA9tctLHbSRuRzrpIctRFrqMEpc4MAqIBTALmZYYDu+U4Ecz7ijDC1WgDPJSk + jZfKZfik1xrfzG/Bjwd34bsDO/DD0i58u+iFLyc349fNFEZFpriVLsOTaSZ4PFmJxxiw7osyxkV/bZzy + WYezfhtwOUQd16I0cZ2J4YlkYVpeio309Xi31RSfzzvgnyc34/t7tuLHBzbhhwdc8P39dsAVG/x4yAL/ + GjHGF816+E2xOn6do4m3KdJeSdDGy/G6eClWD7ejdfFcmCaeDlyPpwLW4bUYA/yhyAbfk6Bj0I3guYaI + YVtgzAY/DFvim14F/tJmiM9b9PBpoy7+WKuJjys34PfVGvi0Thtftcvwtx5T/K3PDH8dEGCCvwqjhnv0 + 8Fm7Bj5u3YDfdq7Hl/OG+PaEDXDvZuDGTmIb8Dh/95Ynvr/ljh9uueHHm66ACHeCxz0hHOuJHx/xxD/u + 2ojPT1H4LSrx+rQJXhw3wo1ePYopdVys3oBTpRSLhWo4UUbB2Lwe1zrW4fFRTby8X4r3VuX47WkFfnNC + jg+WjfH+EgXpfgrEvaZ4Z9YEb44a49lmXTxRqSHi2SY9fDBlia9PeOD7e73ww/3bgQe2c387/nzcBe9N + KPB0rbZoAD9ZJKHwM8bNOgWe7VTh9VFrvL9HhU+Pq/D1RQX+cU2OH26a48enLXiflvj+CQv88JgK3z1o + jn/eo8TfLyjw10usu+vu+PHF3Wujfj9KBD5OIZKB38QB70bh+5cC8M8nduJv1zbjy1PO+Ghajvd6DfBG + nRZuF2zAk+m83wxtPJSui7tSdHAsfj0OxKphPk4N0zFqGKeQnqAgnQ1Xw76wdVgN34ALUTq4L1bGtibD + zWQ9PJuugzeLpfioyQSfDLLOF4zx15Ny/PNeE/z7lgLfvaTAj++ogN+xHj8jvuD9fMX7+osK3/zVBt/8 + xQHffu2Gb7/ajO++2oofvtyJH/68C/jaD/hHKPAN7+3bWODfCQTv71+pwN+IPxFvxABPh+KH67vxLcv5 + m8tb8a/znvjnCTf89agHvlzego/3bsHbk554qmczzlZsxIGcjZhKdWWMckNrymZUJLgiK9wG0T4UhIIB + 7LlmAMd4GCJlmxwFftaojXNHW9YOtGZvQ3WKG0riSezjHVAS64CiaDsmDmsUhqpQHGaxNso3yQb1yXZo + THVAR44bv/uLAVwdZ4XaWCtUR1owbpqiOpDkRTBHgrkNMkJ9GEW5gFBDNJPstAvGBoVpP4nTcIE1k64d + 5qucmMhdcaTdA8sdm0UI+4coaJY6SM56PbEytAMr495YHt+NMwvRuO94Hu4/XYLLR4txbH8ejuwpxLWz + w3j5yVN465lLeJ5i4IET01gaqqboCUJRhCsqojaiItIeZWGWKA9VoirCDPXRJFqMYS0RJLnBSjT5KtC4 + U4F6LxIpPyt0hDuiL2kTJvJ2Y6bYH5MF3hhM2yROC93K87SEWKAxkN/lPXeEkyBFydEbQWIUIkFvgA4G + g3QxEy1MRSzDVIQ2JkM2YIqYDVXHYpQ2lhOkOEtCeYkk7WyqMCKVJIg551iCBEcTDHA0noSIx6xQoC9T + lC8xJy0yn81FCGayLvZEGmBPlBRzkRLMRkjFUcfz8aaYTzHHXAYJUZYVxrLXDODBAlv05tmgPcsSjckK + 5kU561eOqlgL1CRYoj7JFnXJNuIo4DphFHCq3c+oS7FFtTANNAmpYP4WR5ugIo7nSGS9x6tQGW6G1hBz + 9IaS/LL99bIN9YRYoiuIhDdgzVir9zZC5U4SE8EA3mKA9C0SpG6TUggZInGnEeJ2GSFmtzGivKWI2KmP + cC89hO7QFf+kjNyhg2gvbcSJBrAWUvk6j8eV+BqhSjDiQk1JjE3RSvLTEWWCLtbpYLQxpki09/Jej2So + cJxc4jjz/SqJ/JFEYxyJNcYKjzlO8n2C7eBopAkOhxthid/dGy7DbJgU0+FSTIVKMMPXogEsjBCOEYxi + Uyzz+CPEMvPXCsvjfDpzOMt8NdUUh1OMsD9Vhr3kHHuEdVUzWTepuphO0sJkvBbGYjQxfgdjMRprr2O1 + RUzF6GJWWNs5lsIlRh97SPRnQ7Wxh3W+GMXXkVqiAbwnagP2x2uSMBvg5B3z9zQJ+al8YV+GY3kGWM7W + xcEMTRxM08CRbB2s5PxiAB/JNcAhcpVD+fpYyudxhTriFNCHRQNYh4SW7bCB567Vx6lqHZwoUcfddVI8 + 3m2B5wdt8HS3UjSAbzH/PdUuwTOdMtzuMsbzxAvdJni5T4k3+i3wxoAKb4ojfC3xtmgAW+FXw9b41ZAw + nZUVXuuzwCs9ZnipW46XOo3xEs/3WpsEb7ZI8E6bFO8IW+JXzQZ4u0VfNIDfJN7pEAxi5rZWGd5tNhQN + 4FcqGcNLdPE4xeEj+QZ4uMgEj5Qo8UCxCudShHqS4gC53t5g9pNgY8wwXk37KzC82xS9vmZo82FfJrep + 22mI6l0y1HgbotaXooztrMKHAnW3FDV+hqIBXBtgLJrB9UQj3+viuXr9jdHDY3p57KAv+ZIwKjjUBK0R + Jmsjftk3OxKVIlrj+T4hGMA/oY3Cs0MwgIUneoluCk9h3XQRFHkC+tieBQjrAAsYSuX1U+gJJvAwMZJu + jFFiPEOAjDFAhhkKqr05FERsF0eKjHC8TE7OacEcYolTFGYniFWK+XkKhbZwDRT6qCHDbz0yGKdyonVQ + GK9HYUoOyDbdmyWn4FMwHtpQkNljX4kD9hY5YCzNAm3sCznsp7tt1OCiXAd7Kz1Y2RrC3N4YpnYGMLbR + gamVDhSWmjC30ICFUgOWhLViA+zMyUmtNODpoCU+gBjpIUXSJhmythKMFzmbdFHEnFbjZYx2bzOM+lpg + 1s8cC37k5Iwte70kWNopxSrL/WSAIc4HGuJSoAx3BUpxT5AEV1nnd4cZ4nKEBBcZM89RPJ+OkpAH6GGZ + gno5gn0hnNw9iH1wtwaGdmmgh9qibQd/k7GqZJsxr8MEyVuMEUkuvNl8PZx53Y7mOrCz0IcV+bVgRqqs + ZCKsrQ1F2JB721rL4GYvwy5XI4RvlSNzpxyNARTmoebYG2aOE5EqcmnWBePk3q166N+4ATUswxK79ch1 + 1kKaow7i7XSQ4mKIgq0qlO+yRrWPJdupORp2si1tZ+z1VGLAQ4khdxVGN9lgbLMthlwZgx1M0WljiB47 + aho75mB7IzQ7Mh+7y9G8RYn67UpUbFegiMjfoUAuzycYwFn+VsgIskZquB2SI+xEAziGMT0y2AIRggns + r0TQbjME+qzBn7rAZ5sJvMg3trlLsUUwyZ304GKjBVvVBlixvCwtNFlG+lBaytgOzCC3VsLU2hKmNlYw + tlRBpjSFvmAAm0igZ2oAqdIQJtZyWDpbwt7NDnYuKiit2JaUEliYS2Fjacz2YwA7ntPLwwLRAa7ITfBC + PXP+YG0MxmujMVUdibnKcLbVUCyWBOEAxfRSyXYsl27G0eKNOFnsjNPUgpdKLHF3sTnuK7a4YwCb4aF8 + BeOIAtcLLRhLrHA/48jd/OwSPzuTZcp8Ipi+JjiaLcexHDPGXAscK7TEsXwrHBXM32xqxSxCMICTZaL5 + OxC6HiOR6mIemEnWwd40XSxl6PNcBjibLYwENsblEjmulJnhfAk5QYEhDlAbz2VoYPaOASxMUTpdrLxj + ACvRlb1mADezz/+MdDlas8zQkU/9WGqLvgo79FVSU1fbo533WJ3OeCYawAaoSGEbv2MA95daYKLajrDH + iDACuECOfsYN0QDm9cxXm2KxTnjy3gIHGy1wqJn32aT8DwPYFMcahTWAGWfqjXCy0RBnW+W4xHxxN/PB + PcwHV3qVOFWvj9UKDSyXrMdqyQbc3WCIR9oUuNWtwrNdlrjdboGXWs3xYjNzQ6MJXqszxDsNpvhtqxJ/ + bFXhc/7Wl3Wm+LqWequWGozfF9b9FUb//qNJ8osBXKuHL2p18QdBu7Ub4g99CvxxyBKfjNjgQyEH9Vvi + ZV7bTWq8681SPFinj3srdHGtWIJ78qW4yrh5Vw7jSC51ap6cudYEK7lmjKXsu3mWmCOXnc5n/CtywVCR + MwbYngQMlbuII67ai8mJWJZD9fYYa7THeIMtpoiZOwbwYrOlaKSfarDC+Xo7XGpwxIUaR8ZmJ9EAXsl3 + xJE8Z+xLZ5xNc8AisTfZHnMx1pgMt8BogClzDXMPuVNvkJK8x47XtA0LJbsxW+qL6cpADHG/kHw+hbEx + fpc+orzIp3bpIdFfhrQgYTpcBbIDzZDpa4J0xtIkxtGYbfqI3mGABOa+OD8jhHA/YIs2AomALXrw26IL + X8bjgG0SBGyXImiHDMFehohg/owij44PUCGR8SMl1AbJodZIC7dHbZ43JrtSsLqnEif31uDIdBH2DmVg + oiMWLYW7UJO5hdvdLCv22Z40HJ4owulF4bhiDDfHoKMiCHW5O1Gasgl5MRuRE+WKnEhXFMZ6ojkvGN0V + segpj0Fdph/SApx4D5YIEdYptpPCz1HGfSOk+VqjMskD7UXbMNLgg6l2b4w3eWKyeTP2dHjiUK8Xjg/u + wtkRb1wY9sLF4R24NLID5/u24GTbRhwWRn8UynCQffF4oT7Ol0lxrZo8o8YMTzaY47lWK7Zbopntt94U + L7ONvs52+6tGJduvBd5hXb/FOn+hSYUnBQOYn1+pNGJ9G+KcYAQ3UgsQR6mrD6WsIz9Vw7VULbxWYyUa + wO812Yh4n+3n/XprvFNNnlUmjP6V4iVyvucztPB08ga8XWyMX5etmb/vFhvh7QJ9vF6oi5eJ26UGeLZG + Ls70dVclf5O/e6zcCIeLBS6oyd/WwT31ctzss8MLA47kZnZ4isdcz9PGg+nr8UDaejxdKsOLwkxhzUq8 + 2WbBrTmeKpfg/mx1nIxWw6HgnwzgDTieosd4yd9hLL1cbomLVZY4Wcp+JNwjy/BQgS6OFAtrEUtwpsYQ + F1leV1uUuNaqwP3s7/dz/+4Gcuxq8tpKGQ6VUwdVmGCmXI4RxsqeQvJ/9kvBAK5lLK4jj6ljDGzKFEYC + K/i5JQZLbDFa7ojBUgd05lujibqrnHqqMs0ULYIBXGjD/muFOca8g+UK/g7jGc8v8KVlluVqKeNaCfk/ + Y8Ihcmnhwcrj5Jknec2nKvRxsor3WCPFeV77OcanNQPY6T8MYCfRAC7/LwPYDjGxNgiPskRYlFJEaKQZ + gsNMEBBiJEIwgoPC5Aijtomg9hAQFWeO6AQLxCSoEB2vRCS5ZTB5bRg1YEycYAArkZZm/l8GcEamOd9T + IJFaMi5OhihynthIfSTFGSItWY4scs3sVOKOAZydbIQcwQBON0OFMJq6yhpDjF8D9YxpbFfNzEutwtrL + RdyyP7QyPwijgbtL5egrN0NPsQl6WTcD5UpM1lnhQJsjljs3YrnLlRp/I/OGA/ZVWxJWWKwR1kq2xnyN + LabZNsbKzcWZJwaKTNFHDBQzxvF8wmhvYTrYxWKZ+PDAPew/T3ZY4cU29q1GU3zENvu7FgU+Zf74vN8B + n/Y74uNOO7zT5YxXRrxwc8QPV9q9cLDMHQvl2zBf64e9LaHYQyy0BOJQVyhODkXjwlQizs/E4cy0sDa4 + Hw72e2GpdwvOju/CI/uD8PzRCLx4MAC3hfV8Jzzw1LCjaAA/1qfCQ8wl1zrkuNopxwOCCTxki+vDDnhi + zA1PT23Bc1Pb8NpeP3x8KgEfn07Ah8di8fZSNJ6aCOGxobg+HoOn9uXg3Sud+PTmAv768gl88dJp/OG5 + U3j/xjLevX4I7zy8H7+6fw+eO9uPqwtlWO6NxJ42xq82Z8y1OmGS8WGsnjywjqhlu2Y+7yhUsc2bo4pa + ojRegQJq2SLhYe4EY5QmSNGYTY1Rao2J+o08zybs79yKxXbmkbYdmGzwxGCVB7rL3NBW6ILGvI1ozHVF + Y74wW4MHGvJcUZvjTN61EQ3Fm9BSydjaHYp9M6lYOViA1eVyHDtSiyNLDVjcW4eFPc2YmmhDZWUB23Yw + /EIikF/egubeeYzMHcP8wbM4tHIRR5bPYXXlFI4c2YexyQaiEPN78nHwQCFOrVTh4rFm3HN6ANcuTOH6 + /Qdw6/FjeOn2Wbz5+hW89cZlvPDscTz6wDwunenFkX1VWD1QiXPLjbi82oizSxVYmcnA0mg8jozH/5cB + PN3ugz09gTg8Fo2zixm4dDAHJ2cTsNDth9H6LeivdMNQ5SYRovlbtRVDFduY870wXOHLGOOHrhxf1MVt + RVmYGwr87JG9g32e3D1tqwXStrF/Cg9chrmgPt0bI2UBmCveggP59lgmpzhbYIHHyAWebbDEiw0KvNEg + x4eNCnzEmPLrPg+8ObYbz4gGcAiOdvK7TfzNyl3oL9uFvtKt6C/ciKE8W4wXWmOmVIU91HoLdUrMsX/M + kZvNN5tiD+O2sEa0YAIvtNmIfGSwRIHmTCmqE/RQk2BAyFBHTSr8X9SWaYX2LCt05KgIc3Fmmf4SFUYq + bTBV54TFti1YbN3K82/CmPCwC/moMJW0MBNNPznQeI0zxutcCCeWmw0aMyUoj9NASawmSuJ1UZ7CWCxM + Ac24LUwBLQzY68mSoD/HAIM5gvmrQ2hiMFfzZwN4pky2NgU0y+hwizmW21WEOY4wHhxqkuNAnfDAoi75 + vy63BtjLHLa/RoH9LI8D5fZYqXInD92KK407cbVuOy6XueBMhhJnkoxwJckE9zJWPpxsgscYNx/PoA7I + VuK+XPLXPGvyclvmSpZbth3GssiVs4QpoO3RnWRB7U49zng7wbwzWybUgTW5ugUGshRrBvCdEcCV0UYo + v2MACzPrlcXxvURTVCeaoS5RgUaiOdEcLfFmaIoxQlO0DE3UrM2Ra+hIEP4/kIsGcUsCj4njudmv62KN + 0cA80Mx7aOd1d7Hfd1CrtJLzt6RJRLRny9CeY4QO5k3hIalGxvzaeCNUx+ijIlIX1ZF6qI3WRwNjg6D7 + hSmiO5lb10AtmWdEMN7nGKOP5xnie5PMv3sLyY0Zs5dLzXCCGuZspRJXKsxxbwk1laitlHiAeuoadctV + xpwrrPMzKVKcTJFgJdkAh1Il2M+2scDrm8s1xBz10Hy+MArYCHPMNwvMLwsVCta7gjrEAotN1lhoZD3U + kQ8Ls+swB00wR88TS0VSnCozxBXW+8NN5Gc9Vnh6gP1qxBk3h9zxQLcLzrfY4Qhj5GwF66jURmzXzdR0 + TXnUVLze7nIhfpK31zlgotIa0+XsTxUW2CfwQP7ecrUFjpKbHa93EA3gU+2bxXWAzw944bJgAk/74cK0 + L05OeGN1dBe3/riwJwbPXKrDezcm8O6js7h1tgvHhjPZ/3ajJtEZlXGOvI7tGK3yF9GRu4V9xQ75kSpk + E2lhzOOhpojnNiFcgSTyhuQIBdKiTEUDOCdcioJw6rpoA9EA7s+S/2wAC6OdBRP4IOPLQWoSAUsNTliq + d2EedqKm88DJXn+cGYrA4Q5/zNVsxUzVJszWuHFfWC/ZAXtq7BlPnHmsO5bZ74+1b8XRli0iVtu240T7 + Dpzt9MHdjE+39qfjV+droLZI8jxVS7FUo8K+JjvsE/ZZsROZuhhL1cRIijpGkjUxniHBNBuJ0Hl62Blr + YmTIDdRFdpAExbEWKCVxyiJJCtupQdGxAYFeGgjYoS6awDHeesgINRQN4NJoY5SzkwiNuSZOh42fAYUC + bogBcYxieLzcAX25lmhNMUVVhD4K/TVRFKCFuigZOsU/3kzQxUDYFa+NvmRhpLIMs2wUggF8gI1CMIEX + uD/KTtUbp4nu6PUYSFyPmXw9fi7FCoPPyWaS+g4Kx06S13ZjNjZhDWAznKpl56gyx7FSBithbeFcBQ7x + 3IfzzLBE0b4vQ47FdFPM8NpGEkzRFUNiG2qMshBjlISQlAUaImmLOmLc1RBLCAZwvIce4jfJELfVVDSA + I7faIlBYG8vBDG6WUjiZ68PFUh8bLbXhqFSDs0oNno7q2O6hjR0eOtjqpomtzuuxy0Udgc5aiHPRQboz + y8XZAJUuErS6GaLP0xBT202wuEuGVeEPtggZrsVJcD1dD28J03GNueD7A17AEV/8cNgbWPbD9wd34+vp + beLURbcLTPF4qhQ3WLZPpFjgyRRLPBqnxL1hUlwO1sZdoTq4FqGLh2K08VicNm4kaOGx+PV4PHk93ibB + +3TaEf86tgW4i79xbQt+uM8d393nBFxxBA5b4ptR+ZoBXKKODykqfp1tgNeT9fAKk9nLcQZ4IUbvPwxg + NbwWq4dPSIy+aXUDBjYSdndMYHtg1A4/DFriX10KfNUkw2eNevhjnQ5+X6nO86/H70o34PcVmviiwQB/ + bjHCn1uN8EW7DF906OOzdl38qVkdH9evwwf1avigbT2+2mOCf590EK8bN3wI3sMT24Bb2/HDLU/8+ORm + /PiEO3543A0/3hDggR8f8wAe3Qw8uAXf3uWOr0444jeLKvxqRonXp5R4esgED7Xp4y5e12rBOhzMoujK + V8P5OjU82KuBW5O6eOOwCT48bY5PLljgd2fM8NFxvl4xxgeHjPHhfmO8P2+Id8eleLFVA09VquFWlRpe + aNXChzPm+PqkG767dzu+f4Bl/eBWfH9tG7444Yz3JszwdK0wBbRgAktwq8wYT5NgPNdOISiM9Jo0w294 + 7k9XZfj6ogzfP6IAblry/qx5f1b48boVvntAhX9etcBfLyrwJfGXB53x72d3Am+Gro38/X0q8Afi98nA + R/H44e0w/Os5P/z90R083h3vzZnijV49vFitjlu563AjVR2PpujiWpIeLifp4licOg7Erscetp8ZYQRw + lBomBQM4TA0HwtbjRIQmLjPZPcBE+Xgirz+V4jldB6+XGOCDZiP8YdgIX+4zwd9Py/HN/XJ897QC37+s + wI/vWgC/swI+s/7ZAP7uawt88xdr/PMv9j8bwP/+cgu+/2IHj9kFfOW7NgL4X+FE9NoI4G95X/9MAb5O + 4z2mA6/G4cfHw/DPa94sk634+ownvjzhgc+XXfGnJTf8dtEdr4264Ml2e9xT64ClXBtMJNmiJ9oerbEb + UZ/ojpIYZ6QGqRDhZYTgrRKEb5UhxtMIcZuMkLTZCLk+lkzwwije7WjL2Y6qpI0ojLFBfpQNCiJtkR9h + KxrAReGWKI5QoTJGhdpka9EAbEx3QEeeG1qzXVAZb4myaHPx88ooc1REKFEZaobKYMbSQGMRFQEy1DBe + rcGQ5IViUSAsFKd9WZboJ5EaLSI5IhFbYOI5wOR5sNlVhLB/oHkjDrJfHunahKMD27A8tANLg144MR2G + u49k4p5j+Th/KBerC1lY2VOI+84O4fYjR/DyY6t46p4DeODYKA4PlqErP4iJ0BU1LKNqllVFmIpx1AxV + 4YypkUaopXBuCJGhIUCOBl8lGryJXRZo9LVCa4gDuuPdSea8MJ7vi9HcnehLcUdnvBPao2zREmGN+iCF + aAg1Uqi3hBmiLUSK1gBdtO3WQLe/FiYjpaIJPB6mg1HGnbGADZgK1MA8BfiheBlOUGCfyVSSAAnr0jJv + JEpxlFgm+V4mITucYIRlkrwlkrkD8YZYiJayDZP8hmljjtvZcH1MhephMkRPnKp4OsYYMySQ06kWGE+3 + wEiGSpwCeoBktYdtpi3TEg1JSlTHsr6iWV+xbBOCkR9vTcLObQq3yZZiva/BRqx/4T1hFLBoAEeZoJzf + rYu3QF2SNRrYDrrZbgbCbdAXZo2eUCv0sB12B1IoBJihPcBUNIDLvSQo3K7/swGcwvaZuJ05awfb6S5D + RPsYIcrbEJG7JD+bwJFeuogmYnb8ZADriAZw9g49FDMPVfqxDoOFkeYmrA+S3HBDdEQwV0UaYozEepaE + en+qEodJgo9mCusxMtcmmmCJ5PtwlBGOsg2shBvjMHnDgWAJFoMNMB/MMuVWMH8nQ9a2e3m+g9EmOCwY + xZE8njgkwhDLbNunUsxxMpX5nKJhf6IMC8kSzIujfyWYyeA5GJsmE7V5TeQ60eoYixZGgmmKr8cE8zeO + HIOYjF0zgBdihWmn9UXzdyZES8QCucw845ZgAC/ye4dT9HAixxBnCkxwikRZ2J4pMBJNYMEAFkzfpUwt + HCKEEcCrfG9tCmi2L2Equ3wJlgsMcJhiShj9IUwBuFxOCAZwrR6O1enjZK0uTlVprxnAtVJxmrMXRu3x + VI8SN8ltbrZJ8bRg/vaY4MU+U7zQK8fz3cZ4sdsUr/UqRbwuGMGEMNpXBPPqG/2WeL1PJf75/mIXv8Nz + PcdzPd9sgBdb9PGqYPi2GuLtZtl/QIK3WvV/QYtEfE8wgH/VaIg36mV4qVqGZyuNmMsUeLJKhRuVVniY + IuwsOYcwBfS+EH3MB7JOAmWY9DfG+G45Brzl6PExQxu3Ld7GqPNi7PKiEGb7+tkA9pahwkciGsDC9M/C + VNC1ghnsb4gGPxm6gkxFA7jL2wC9uyhavaUY5OfCVNAtYUZoiOL3CGHt39a4NbP3/2UAdyb/Yv72se0K + +L8MYNH8TVOKGEozJUwIijFilHx3NEOKCfLpCfKz6XS2nUw97M9luygiN6WAER48PFFhieMUP0fLbDFL + kdcWpY3igPUoiNBCMflveZoharKM0URO2kEhMUCBNJxHcVtgielCa8wX2mG+wB6jaSp0xJihiGUU6rQe + W2zU4e4ggbOTCew3msF2owmsnWWwdpTC1l4fdja6sLfUEUf/OpprwdlSE27W6thiqw4fBw0kkMtmbzFC + yQ7y3h2GqNjO+iCad5qg29sUoz4KTAnTQPuYYJ71NM+YsegjxZEAI6wGsS8EGuE8c9AlfwmuBEhxVwC3 + wVJcDDXA+QgJzlBInyDvPxKijYPBWtjPfrY3RAczAToY9mHs9lJHG2NOwzZ9lG3SR56nDOnMpUlbTBC5 + yRhbrTTgZq4JF5U+HMivrS1l/58GsIu9DDtcjRC6RY50LznqAy0wFE4xGWGB1WgrnI2giAy2wB62ux53 + lr2VGjIs1RBvvQ7hluoItdJENMsuzdMcuV4qFHgpULiN5cMyqvJk/HM3RqurHM3OcrQJo3zdGX89VOh0 + NUerPT+zNUKzjQT11gaosdFHlRPL040aycMYheQHeZ4myNkqZ1w1QyZzYKaf5c8GcAqRwLgeG2aF6GCV + aARHBFgg1E+JEF9zhBLBOxXw2ybHLvKMHe5SbKNu8HTUg5uNJuwtNsBasQ4qhQZU5rpQmEsgtzCGkcoU + xpYWMLaygJGV+c8GsLD+r4FcMIClogFs4WwBO1dr2G20WJs+2oLlqzKCs40pnK2M4GFriCDhz7VgV1Sk + eKGzMBBT9VGYrw/H3poQ7K8KxMGKQBwq9WeM28lYR7Faugmrpa7iNLunS21xkbrwrpJfDOAHBfOXOvR6 + vhKPCX/IFVvjoSJL3Mu2fynHFGcz5eIU0Mdy5FjNlTPeKnCUn63kC6MDVDiUrcQB5nZBx+3LMMOeFBmG + w9XRG6yGQWEK2RgNTFDfzCVrYzFNFyvso6cy2TZzqauKTHC51BTnio1xIl+GA1k67L8bMMN4PsvXggE8 + w2sdpf4cyLNAV46Z+EebYPw2Za5BMIBbspl7C1ToLRPMXwf0Vzmit8oezYUKVDE2VKRRHxNVRC35b0u2 + MXpKlBhhPBglfpr+WRgBPFwgw0SpMearhD9e1qZeE0zgwy1WWG5WYbVFiWPNShxvUeBEsxmON5ngRJMc + p1pMcLad99Jlhou9ZrjUp8TFHjNqYwmOVjM3lW3AEeJcrT6uNhvjkQ4lniCebjPH821KPN9ihuebjPFS + gyHebJTj/VYzfNxqjj9RD35eY4Iva43xl1oZ/srYLxrAzVLRABb2/1pvgK/r9fF5vR7+1CrBZ91yfDak + wicDFviQeFfIQT0WeLGTuaLdCI8yxzxQZ4B7y/VwtdjgvwzgKzlGuJArTPH9iwG8mGeJPeRUs3kOGP8f + BvBAmTM6imzQWmyJXsFMb3DCaKOjaAJPNNhiutEGcw0qLDayrTRY4ESDFc7V2VC72eEs6+h0uQNOFDti + WTSAnbCU44wD2eTJmY5sV47YL4wEjrfFXKQlJsLNMRyiRE+wEp0hCnRHWaMzzo582w5NiY7kdfYojFQi + J9QUmeRKacxJGaHGyI1SoDhWhYo4G3J5a5SS8xeHmiOf58gKZJwKliOT3D4tXIH4IBPE+MsQG2CIWH8T + cQq6aH85YoOE0QgKxPG343kNyYxpKYxl6ZHWyCBHzoy2E7dZMXaozd+B4bYYHBjPwaGpAuwbzcRsXyLG + 26LQWe7LdumFLvbTibZ47B/JwfGFSlxabsHJxWrM9KZipCUWvbXhaCsLQGPBbtRme6MqcyeqM7zRXBDM + 78agsyyK+coP2WGuSPKxQ6SnBYKYewSEMN7Fk9vnRzux/bvy+C0YatiGwVp3jNS7Y7LJHXtaNuNg+2Yc + 7d6ME93uONnthtM9bjhHnGl3IidS4Wg5+3ypFGcr2DZqjHF/rQmu18nxZAM1cJslXmizwotN5En1Srxc + b45X6xXkJuZ4i/3mTdb1a+w7z7PeheMFA/guYZrCCiPRiD3NY0/VmWGVOnQ5TR3nkjbg0WwJXq+2wq/q + rPF2nRXeqROmfhZG/1qKo39fLTEUzd8Xc/Xx3B0D+I0CQ7zD+PFOkQy/KpSKBvCbheRV5HovlUlxu9YM + j9WY4Z4qU1yoNsWxcnLaQgMczNXESoE2LlbKcKOL9zHohNf6HXi9ctws1eO1qOPhjA24XWmM1xoU5GHm + eJu6//UmJZ6pkOChXA2cjVPDMnW2MHr5eKI6TqSSQ2ZKcSrbCGcL5ThdIhentV/K1cH+fG1CC0uF5J08 + /8kqQ5yrN8WVZgXuYky5hzHl7iaFOCpY+OxIuQT7S6SYLzXCZKmcfU6OrgJh1C85GeNyTZYJ24MRaogG + xuhWYQr8Iiv0l9phmH1qoMyRx1ujOZv6NZnHMT635lqiJ98aI8VW2FdhhdVqC5ytNSfvFWZNMVkb/ct4 + vFosF3nzwUzy6gxNrOaTf5ca4Dh582qZNjmVPr9HDs54eKrFFsdbHbHS4YYD7ZswSJ3bmG2JkhQL5CZa + ID3eCkmxNohk7g+JMEdQhJmI4HAz0fT1o2YW4B9qhIAwY75vhBBqj9A7RnBUnPI/DGBThEXIEE4t8pMB + nE7tJ+AnAziVuieJGjI2ToqISD1EhAkGsATJ1JjpKabIJsfMTVcQpv9lABdkKlDBMuwgj+6vp7arVqGl + mFpLMH+FLdtYSyE5bqEx2lmvnWVmENY77xKM+RJhzXPqUGEEYos9DrQ5Y4k40OqEfQ3kjfxsnvxznuee + r7LCbI0NJqssMc73hWmghRGJP2Go2BTjJcaYLjLEYoGUZW7IvmeKx5uZJ5hv3qo3xgf1JviY7ebTThU+ + 67UjHPDHbnt82OuCN0a245mhnbi7xQNLBeS6uU6YKtqC6YpdmKn2wXydN6/LD8f7Q3FuPApnJsNxbMQf + B/u3Y2/XZhzo8cSJUS/ct+iPW4eCcVswgBe88dzUZjw14ozH+6zxSA/5Q7ucv2GIy9Qu93bI8VCfJa73 + 2+LWsAueG3PHSxNb8ObcLny4FIwPDgbh3QV/vDbji2eHffF4vz9ujkTgxb2Z+N2lNvz18Tl8/8JR/POF + E/jyuVP45OYx/O7WKn538yg+ePQAXr48ivsPVOHYUCxmWzwx3eyCqSbmmVpbDNdYYUhAtR36K2zRxlxV + z/qtpIYoiZWjJJ7an/qinrpY6Cft+ayrMiUmmH/mm52w2L5RHFW8r9MTi11bMd+xDbOtW5m/NvO8m9BX + 5YG+6s3oJ3oqPFjvQjx1R0/tFvQ2bMdYdwD2TcVheV8Gji7lY/lgCQ4ulmN+thQzk9UYGahFaXEmAoP9 + 4BsUgryyejR1T2BkZgl7DhzDoeWTWD5yDKvLR3Dk8AxGx8qIdMzNpODAYhpOHs7HpaMVuHqiXfzv55Gr + s3jikYN44alVvP7iabz5ymncvrnE98dx6WQrVvYVY3V/Mc4cqsT5I5U4tViApdFEHBiMwfJ4HA6NRv08 + BbRgAi/2h+DoVDzO7cvEmb3pODIagSlh+uca3vPPBvBPo3+3Yahiu2gAD5X7/GIAJ2xDebgbigIckLfL + itzaAlle5NbCQ5Z+ViiLdmW9+GK6NgSLZdtwpJD5hXHoPPnnk/V2jLlWeFmIscwtHzGX/KbZCu/3uOPN + ER88NRqEe/qFtTn9MF2/CwOV29FXtgP9ZZ7sL64YyrPBOLnfbKkFFirNsZfxfg9j6J5GE8yRm82zz+wh + V9vTKkwHzf7XbIuhUqVoAFfF66AqThfVcdR+1Kr1ghmZbI7mNAu0ZCjRJjxYSM7ZR648zHg5UefA/r0J + C82bMVPvRu7oyGMYixP1UZ8sQWeugm2L568kDyIXGii3Qk2KDoqj16MoWkM0gCvTjVGTaYb6TMZy8te2 + TBm6yYd7s/QxQN47lK31swE8kq+ztgaw8CBQrVxchuT/ZQDPV+liplwXsxV6jDVSLFQYY1+5GY5U2uFk + jSsuNm7FtWYvPNS4DdcqXMjzzHEx1QhXGQMfYvy7kWqKJxkDn8q2wE32oUeZO+4tIkcjlgvsyP/sMZlN + /Ztl/x8GsCn6qMdHGTenWEaTQjlRT/Tz/tqp7eup84Xpn0XzN8ZUhPC/WonwHvtlZbwc1QmmqOW+sESp + YOo28rOGGHL7aMEIppbjfnuCmbi0VEuiGRrjzFDL89VEG6OKeaAqSobaOBnrzgSNSdSbyXydKGGb1EdD + kgHrh2VMvt+WzRzJMm9kDqiJZ+6MlqA8Qk/0xGq4X59giOYUxnfq/zbhAXERRmjPMRTRkWWIriwp+lhf + o8zBs/ly7Cs0xSHmhlXmzdPMB5eYD+6mlhC01TXqqfvYLq/lW+CeXCUuZ5jgFLWRMPr3UJI+DlKH7E03 + wCzbofDg+gz10CwxkyfDNLWPYALPMxcLMxHtqTHHHvLmOealyRrhwSElhpmLxnIkmM0xwFK+AU4Vk6OV + S/FogxxPdanwXJ8Nbg874ekBVzzS7YzLzQ5YrrbGnnJrjJWQN7NdCw8g1LNsmguZ98osqZ3sMFJjh/FK + G8xQFwkG8N4KwQdU4EiVOfkCOUOdvTgF9PEWdxxv88Apxs2zfdtxftgLZ4Z34PjgVhGn2XcvTYfj1vEi + vHW1E+/eP4Lnz7Tj7HAaxkt9WJdOrGc79GZvpt7yFtGZ4YbKWGsURlggh1whPcwUSaEmSBBNYFMkRiqQ + GC5HKrlBRoQxssIkyA/TQ3mUMIX3LwbwnnJL0QD+yQT+CQfYf/dVO2Cu1AZ7q52x0r4Lq10B1CY7MVWx + CZMVboQzpiodMVVli5lK6o4aR+yrd8Uh9vmV1i04zLxwuGETjjTxdcsWch8vXOoNwBN7U/DmmUqo7e9y + w6wwVJuiZ6ndgV+0xUKZKaZydDGasgH98evQH7cOQ8k6GGOjHM4hcWMnqo01QmGoBIXh7ByJFCmJNhQl + pgjdqYHA/2EAR3nrigZwcbTQqYxRESUVh7PXMcB0MKgMFCkwykKYrnHAdLUjBgss0ZYqZ0PXR4G/OspC + tNEcTxFMsiR04B52lK4EHW55jelsjHmmWChWYX8ZC7DUmo3MlNdrgJ5odYqudRhM3EAxqM+GIcNKnSFF + Lkl9hwkudMpxps0IJ+ukWKmQiU8m7COR3EsRPsvvT7NTTjNYziWR2CYZcstGn2iECQbggWhDdEaRzIYb + opplUEGUkCCmCyOeBfOXiHf/xQCOv2MAR2yxhp+rJbbYmMDF3ABOSj24qPTgqtLkvhrcLNWww1kDuz11 + 4Ufs3qQFH5f18Hdej3AXDaS66iLPTYLSjRJUE62uUvRukmJsqwTzXnpY9tXDBWH933gJnsyV4oMOW/xt + zhM/Lu8GjgXgxxVfboOBIwH426wXft1sj+cYHG6woz8ab4gnki1wK80GTyRZ4ZFoOR5kwHooWopHYvl5 + rB4ei9XB9Vh1PBq9TjSB36gywZ/GHPGv5a3AZW/g6g78eM0T393nDlxx4+/Y4psRM3EK6I+KBQNYDx/k + GeFXmYZ4leX6cvyaAfx8uBZuBa4TDeBXYrTxUY4cX9Xa4btuJ3xP0vh9rw2+7xfMX1t816fC34SRx3US + /KlGD3+o1sZvS9fjg/x1Ij4q2oA/VungDzX6hB4+qdXGJ3Xq+F3tBvymUg3vV6jh3So1vNckjAA2xben + nIB7twE3WEaP8x6e3Anc3IHvn9yGH2544ofrHvj+EVd8/7ArfnjEDT88zHt7aBPwAO/zige+OuaM3y1a + 49czKrw1Y4Xbo+Z4rMsEVxsMcDR/PfZnqOFQrhrO1arh+jDvdY8M7x43xyeXbPDpPbb442ULfHLODB+f + kuN3qyb43SEj/GaRdTdJgdmhgedr1PBs7Tq80s5ymVfiL6dd8d21Lfjuwc34/qEt+Pd9W/D5SWe8M2mG + p2q1cKNEmAZagqfKTfAcBdNtkvGXuxV4bcAIb45p48MFLXy6qodv7zXj/dqK+PExG+BRG3z3gBX+da8K + f7lkji8uKvDFvXb4561t+PHVQOCD2DUD+I/pwJ/SgE+S8cMHMfjmtRD8/WlffHHfNrx3wAKvDknwTK06 + rmer4cEkDdxH0nKFbed8vB6OxWriINvPQhz7ZOx6cfrnmUg1zIWr4WD4OpyO1sHd8VI8nEjhniLH02kS + PJ+hjdcoQt8ngf/juDG+WjLFv86b4buHTPH9swp8/4rZmgH8W0vgUyvRAP7hyzUD+NuvrfHPr+3xzVeu + +PdXLK8/b8EPn+8APt8FfMn6/msQ8LcQIgL4ewzwj0S+l4Ifv0jDj79JxQ/PR+ObBwLx2Zkt+HhlI357 + yAUf7nPEe/N2eHvKHrcHbfAQy/c8k98RJqlRkviOMBL4YEvURTiTrLmiIMIRCb4KhHkZIXS7ISJ2UPBt + ZaLYbIwEDxmydpqjItIFzelb0JqznWJgIxMKBWKIOXJCrUTkh6oYby1QxGRTIUzznCyMBrVBE8lNR74r + WrOdURGnQjGTTlmkEmXh3BLloWaoCJITjLuBxigPkKEq2GQNjFcNUSQvJDbtFB09mRboofAYzFNhokRI + qnbi+j8LtSSSAphs99Y5Yn+TCw63u2G5ZzMOdm+mEPPE8qg/LuxPxsXDWThzIBvH9+bg5P4SPHhhCE/d + uwdPX92DG+en8cCxIawMl2CgJIQkyAO1wto0TKyV4RYo4zVVhJEkhUpRE6KP2iCDtdF8uxVo8KYg8qZY + 8rNGc7A92iI3oiORpD+D5DpjG7qT3fjaGe3xTmiJdWBcZhkFkzwFC0akIRqCSJr8tHkOdbT6amCYyXgy + yhATjJWjQVoYD9TCZLAwgtcAB0jQjiTLcZSkcJkx/zBj6aEEEqFEKQ4nyPjamPvGOCyYmBT2e2NIhMIN + 1szeYE1uSYRDdDEWrI2RACJIB+OMoxMkchNJJEMU9QPpSpIzJXpzrdCZbYWWdAvx6cI1A5iIsSQZteJr + kvJ4S1QnClCJo4J/gmDy1jJOVyRYoFggqyQaFVFy1MWyrBKs0RJnhZ5IG/QTPeFW6A5RoStQiU5/ElQ/ + EkxCmFa3bCfz+A59ZHvqI9XTAElbJIjfJmW+kiJ6p7CsgxEihTWAedz/NoB1ELddZ80A3q773wYw21xT + 2C8GcHu4DD0RUgyRKE+wzQkm8F4S+aVMcyylmuEgy+cgc+pSpBEOsx0cCjHEgUDmY389zLHupv21MREo + mOoGmAgVytsAe3i+vREy7I/gsfyNgxFro4WXWLdHyDWOUVivsh4Pst72xBlgjvl8lmR2hphM5bmSyGsS + NDEcpY6hqA0YjRKMXy0Ro7HaGIvTwzhj1yRz1EyMPuYJYZT3dLAWpoI0udUURwHPha9NI36QnOYYyffp + fMH0NRZHAP9kAAsjgI/nS9ZG/BKCGXyc5PlEoSGOFxjiWAH5iWD+kiALBvCRQj0cKV77A04wgFcq1gzg + 48Lo3zo9nGbeO1mqIY4A/skAvtWz9qf5zXYpnhPM334FXhpU4oV+UzzXZYTnu+R4qdtUNIJf7jHDK70K + vNqn/Bkvd5vjxS7mjE4zPEuO9FSrDDeb9PEU8Rxz+EtNErzBOPxW83+gRfof5u+aAfxWswTv8bhft5ni + 3VYzvNHE32tQ4naDDZ6ut8HjVdZ4sMQSp9m/DoXpYm8Qy9RPFxP+7I9+hhhim+vdZYIeb1O0c9u8i3Fg + h2A2SlC1kwJ4N0XRbmNU+hii0luKWl/GMn8KKj9j1HG/nudo8KUQCjBBN7edO/XQvUMX/V4S9HvL0OEv + RWOwDDVsR1WMNXXhUnE0cPsdw7f9PyC87kwyQVeK2f82gJMVaxDe43aA7XhIMH/TzTHEPj5IvjqYfscA + TjfESJoMI+kSjFNMjaXpYjxFG1PpuljIpsgqZHutVOFEtQ2OV1rjaIUNDjEOT1HotglPAIdpoJyctJpC + ry5PgaYCc3TkmqObnHyAom0oz5wi3ALjwhSowlPQ+XbiWkgdsRYo9zdBjJs2djvqwGujEba4mWHTZgt4 + EO6bFHD3MIW7mzE2uRhhs4MhPO2l2Govw3ZHCbz4HR97TQQ5aCBrqxHKhZGywprsPqZo9aHwZN108L1e + YoQY3yXHFOPF9E7y6F0U97tlOMTcczTIBMcDDHHKT4Izvga4IEIfF/n6fKABzoVIcJrxeJVx9GCgBhYC + 2KcYQ2cYP8fY/3t3aaJ1uwYatmmhaoseCtx1kbnJAKmbDRG/2QjhHkbYaa8HT2t9uFnL4GQlg42VISwt + ZbC0NvzZABbMXxtrY8IQDnYSeG6UIYC5OIl5uSbQAoMRlpiPUjF+WONEpDVWQiwwy/vs8NBBnrUaEi3U + EEquvttsHXxU1DgOjJWbFUjZoUQqyyd1kz4y3PWR707R7sZ86yxDiZ0BSm0MUO1kjAZ3JVo8LNDozPZq + K0OtFetWpYNySx0U2+mjxFmKAhcpssnvs8gPMnh/mdspIneZId1XhfRAK6SFrRnAieE2iBNM4BBLEZEB + Fgj3UyLM1xzhRMhOBQK3yeG9yRBeblJsd9LHVgddeNhowMl8PWx4D5Zm6lApdaBQ6kNuLoOR0gSGFqYw + VJnByEoBQ742MJXCwFgPErkeZEoJ5Cw/laMCthtVsHVWwtqW5WllBCcbOTwdzalhzOHH+4z3sUVxlAf5 + iTc1XhAWmyJxoCEEh2oCKPB9GdN2Y6XMGyvF23C0eDNOlG3CyTI3nC53wbkyO1wsU+HuUgvcV2yOByn8 + /9MAvsG2fqOIOqXQEvcJf1pkm+JcpglOZRnj+B0DeJWcbDlHgSP8fIn9ZF+6HHuSDbE3zRj7sswwn8pY + E6EhGsD94RvEHDBGfjqVoIU9KTpYStbGsTTG22wpLjCeXyrhbxSxHf9kAKcJBrAwAliGuWJTzBRbYKxI + hcF85tpsBVoz5Whi/xf+vGjMMBH3BQO4Q3iQutxONH8HalzQRa5VTx1bmS5DRdqaCSyMBq7PlKI11wSd + xQr0l5pjoFiYhtMUw4XU4kXG4h8rk2VyzFUrsbfeAgcarXCw2RJHWtluWyxxrM0cx4kTHRY42arA8WY5 + TlA7nWxjTuowxZkuM5zrNcP5PgUuMBecajfEaqMeDlVr4FClOlartHG21gB3NxnjwTY5Hm9T4Kl2czzN + czzdbIxnGmR4qcGYMV+OD1sU+F29MfWYIT6/swbwX5mb/tYgxT+YD/7eaEBI8Rfqoi8b9PFZI9FhiC8G + FPh00AIf8jreYU56o1uJlzoVeL7DjLnMWDSA72fOEw3gorURwPdQ2/5fBvAB1vPPBnCuA8YLnDBY6IT+ + Iif0FTqir9gRrayb5kJz9FQKI4CdMFzviNEGO4wzL001WGOW5bhXmEa7XonjdRY4U2uJMzXWOF1pw7Zp + h+MlDlgpEExgZxFH8l2o75ywnOuCleyNOJzlggMpDpgnBxPWBx6ItEB3hDk5EHksUR1hhnLy9JIoBUrj + hOU7zAkLlMST2ydboTbdDk1ZzmjjuToyXNCS4oSGZAdyfntUJ9miLNkGJSk2KCD3y46nTiDfyyL3zyFP + zOZvZifYITfJXkQev5fPayngOQpSnVCU5oziOyjke/mJ9qjN34pe9snp/njsGUzGTF88xjsjMdISip4q + P7SXeqOvJggzXQk4PJ6PM/tqcM9qO84v1WH/SDbm+9Ix3ZWM0ZZYDNZH8TvhaCsJQnNBAFqKgti2o9FZ + HomabF8UxGxGRrAz4ndZI2KLOcKYe4LdjcUZGJIYu3IYc+tYjp0VHuiq3MjfdcVglQtGKp0xVU0NUu/A + +CFMlWeL5UY7nOlknOhwxukmG5yuZV1Vy3Gp1gTXGk3xQL18zQBuVIgjgF9os8YLTZa4XUeOU09NXKfA + K9x/tVaJV/j6pQYVnmW932wyx8P1Zri7kv29ykScAvoUz3OixhgrReRhGeq4kqGDm0VyvFZliTfu4FfV + Krxbw22VOfWqEV4uWhv9+0KOLp5L18Qzqep4NVeCN8nz3iLHW4Me3ijQw6uF+nipVIbbvJbHqdnvrVbg + fJUZjvI8S3n62J+pjsO5GjhXLsGjbSq8POyCt0ac8Eq7Es+zvz1RoI0bOZp4pVaOt5st8F6HJd4lXm9S + 4NlKKeMkNXjqBpyMW4fjcetxMlkTpzP0cVZ4UDGXOTnPkDzUiO2ZPCRPF/t4PsEA3s/tEjnoSqVMLIPz + LMvzTUpc5HkvNJrhDN9brTLCwTIJ9hSSUxdKMUIeI0xD2ZbH/Ja9Nvq3+n8YwC2M3z8ZwEPlDhgsdURP + ITULY2Z1MvmNYADnqNCbZ43JEitxNND5RhtcaVThQo0ZTlTIcayUGq1EjhVe9+EcllG6tjirzlFe//ES + CY4J113E+F2qi5NVxjjFfn2iyRarzQ440rIRe1vc0MNrqE5TID/eFBnUUCkxFoiPtkI4dXZgiBn8QuTw + DzVFYLAcAdSSvnfgF2osmsBB1ClBYUYIocYJjzZFZKwC0fHm/x8GsDDdswoZGZbIzFAhOUWOuHgZIqP0 + EBqmhfBQHcRESpCUsGYAZ5FL/l8GcGEGtT1jXUuFCp3VFmirUKJJMH9ZHq3MUQJa2D5bmKvauN9RpkB3 + ObVfCTlsKXMJvzfGmDbbZI89LU4sCycsNDtivs4OU8Kaisy7MxWWmCEPna2xxWSVFcb4HcGM+sn8FUYm + DvN8E8XGmKWG2UftcqxQgstlxniM/ec59sE3mQ9+XW8ijgD+Y4cKf+qyxmc99vi01xEf97vineGtuN2/ + FdfqnXE425y6zBKT2S6YKtyCmdJtmKvcjv2NO3Gsxx9nhkNwasQfy307sLfTHXNtG7GvywMrQ1txeWYX + HtrjjVsLPnh+YReem/LErWEnXO+1woMdCtxDLXKpUYKLzEF3cf+BTnKIHis8M+CMF4c24o0xT7w7vR0f + zXnjg2kvvDO6Da/zvC/1e+HZ7l24PRCEN2eT8OnpWvzzwRHg5j58c3MJnz9xGL997BA+ubmM399awW8e + O4BX7h7FA4eqsDoSi4lGT4zWbcRIjSPLnFq8whr9zCP9lXbiDCAtPxnA1KglsUYQppxtYLvoLLRFFzlC + L/P9ULlCnAp4hrlpD+trb5sT9gkPMPRuxlL/dhzs3Y75zi2YbvbAeKM7c5k7Rho8MFjjhj7Gzr5qxtAG + Tww3b2Nc98HiWASO7EnAyr50LO3NwuJsDqbHczE+VISe9iLkZ8fD328ndgf4I7OwDHWtfRgYn8PMwj7s + P3gQSwf24cjBPTi4bxAjgzkYHYrH7GQM9s/H4sSBdFw6Uoh7jtbh2slOPHR5CDeuzeC5G/vxytNH8Ppz + R/Ds9Xk8eLEXF47WYnWxAMf2FYjr/p7cl4+VmXTs7Y/EYn84jozFiqN910YACwawH5ZGInBiLlk0f5cn + 47DY68973iYawANV7hhk3hAM4KFKYfTvVgyWb8Ng2U7RAB4o8UVntg/qErehMsINxYHMiz6WyPVWIc9b + iRwfcxQF26EmYRN6SwKwtzkCSxVeWC12xZlCO1wpVOFWvR1eEJZNrFfgbcba3zCH/KbJCu93e+CtYW/c + HA7AlV5eZ9sujNduZ31vRV/5VvSX8fqKhRHANpjgeebYv/ZWkWf8LwPYdM0AblOK6wHvabHFcNmaAVwZ + p42yKG1UREtRJZiKcYIZaYb6JIVoFLZkCFPrm6K3iNqz3BLjdfaYa3Qln3HDRLULzyPMFmgmjiSujNNB + c7oRugos0CPMhlJqxa05KuI1RAO4NE5LnAK6grq1JoO/ISDTGK3Urp3MGz2ZeujP0sZgliaGsjX+Pw3g + I20Wovn7XwZwpR6my8ifS3XYz8mfiyVYZBw5Vm2H8+wvdzd54sHW7bjevAUPVTnjGrXtPRnGeCBDjhu8 + z1uZSjxLPv8c+8+zhTZ4otgeD5U5kp874FiRA/OWA2bI/8ayHKi71wxgYTmnnhRjXu+a8TZBPTGUZ4Y+ + nq8tSS6Oqq6MMUZZNCH8n8Z4XhwjRxFfl0aboDRWmGFPMInlYtnX8Zh6vlfPzxruoIkxXxj1K6AhQRj1 + S07P75dHylDGXFAWQU0YSb0XJdQheX6MAaHP39VDbYIB64QxnDmymTpBeFi0IdkMNYwJwrHl4TwukhpS + NICN0MR7aUyjtuB31mDIdiIT0ZIhY10ZoJM6YjCTGiHXGPN51DwFRjjEWH2MZX2OeeFKiRJXWe9X881x + je3y3gLqrVxzXBIepE2RicvcLSUbkM8yvwsz7mZIMCUMnKAeWoM+Jpl7Z4TRwEVGmGXsn6lSYKZWhSly + oVEhZzBPDJKvj7LdzGboYSlLn3xdD3cV6zFPyPFMhzluM06/OOSE5/o34nq3s7js6kqlFfYI05kXWKKd + 2qk+VcZ2yHIR/vcoZWyssMVApTCDCHl7hRXmKiywwBy3v8yM2kWBo8xZR2vtsEp+f7RxI1aIo82uON5O + jdm9CSd6PHBMeJiwZxPOiSODA3BjfxpePlmJ9+7qwmtn2nDXSDoWqE97E53QEWOHwVQ3TBfswGT+dnQl + O6Mm2hJF4ebIC1ciI1SO5BATJHIrGMAJ5PmCAZxCbpAeboTMUAPkher+lwE8VsD+z766WG0tQjCBF4XZ + N4i9VTaYE2Z/YN3MMFccaNhCbbeT5euJkRJXjJUJcMJYuT3GmFPGmV+mqpjPazcyZ25i//PE/noPcV3t + A4wBh5gTlhu2iqOAr88l4rWTZVA72OeO+VZb7Gm2wuFuByx32IsLOc8XGWA8XR29sWoiBimEh9kwBzJJ + JlJJ7OLZISKNUBQhPLWkQn6sBZKCpAjxUkfgzjsGMPdDuI3arSMawKXsDFXCMPoEY9QnsqGmSMXFq0cp + bCerrDFPMTZb54hhiugONujaWD0UBqxHZbgO2pNN2FEVGCD60gzRlypBb7K+OKJiJk+BhWJL7CuzwV5u + JwVTmcGrM2K9aAAPJVKks5EeKDPESo0hTlLMCk8/X6DIFJ6EXq5i8CnUZePWxHiSOkZiNNAXtgHdQRvQ + G6yOoTBNjEXqYTzaABNRMowS/ezQnbz/lihjdnyS3Ch2dFZ0jrc2EjzUkOBOuKlzf80ATvA0RcxWc4Ru + UsHHWYFNljI4menCSakNFwttuJmrw1Whhm226xHgoYtIL2H0FYnhdn2Eum1AuPM6xDpvQLabLko3y1Dl + IUWtKwOGiz66NuphaJMOprZqYslbE+dIIu9PkuAZEsI/DLri3/t3AccDgZMhwDFhGwYcDcE/5nfh/WY7 + PMvgcD1RggejDHAjToFbydZ4iiLziQRzPMEE8yQD4xPxRngs1gCPRWvjEZbrw2FqeDRqPV4pMeJv2ONf + B7cAF3YDd6+ZwD9c5esrnsCyE74dMcdnTRJ8WKyJDyl0PiyU4/18Cn0mlxcZ9G4z+D0XqYUnA9VwK0gN + L0ar450MKf7IDv1Pirtv2C6/6bLDtz12+HefHV9b4ivW4Z+qDfBxuTY+LtPEB4Xr8G6OGn6VoYb3stXE + 6aY/KtHAB8K000Xr8V6JGt4tVsM7RTyG+78q43EN6/HneaW4niuueQGP+QE3iCd5Hzd34YcnvPDjY1vx + /cOb8e8HWI73u+A7bn+43x0/XNvE73jiu0ub8OWKM363IBjAVnh72ha3hyxwvUOOe+qlOFawgQFvHZYL + 1HChfgOeGJfilYOm+PAcifC9jvjqQUf8+Rr377LAHy8o8IeTJvhkWYaPD0jx21kJ3upSp1hVI+nYgDe6 + dfHbBXP89exGfHffZnz3kAevbQu+vd8Tn59yFkf4PlmrheslmqIB/HS5KV5gIBbWq7jdbIzbrSzntnV4 + fXgdfrtPE3+/aMp7diQcgEfsRHz3gA3+da8V/nJFhS8uWeDTu23wtxv8rRdYJu9FrxnAn2YSGcAfU/HD + x0n4lu//45VQ/PmGDz446YjXZ0zxdIsOHspbj3tIKK5E6uBClC7OxOhiNYYiLVYDCzHqmI/dgNloNcxF + qmGPYACHrcPZOD3cm0wBQVF2i6TjaRKOZzO08GqZHt5vleHTaTn+sqLEvy8r8cOjxHMKfP+q6R0DWPWz + AfzjfxjA//rKHt/82QXff7EJP37Bdvn5dh7DdvpnX+Ar9ocvg7hln/g6iojj+0n44U8p+OHXyfjHjWB8 + fm473tvviFenVXhl0gq3RyzwdJ8CNzrNcE+tkTjlmPBn4TDvscFXG+XCNLi7lSgLdkBZpAtyQ+0Q40Mx + uNMY4TvliPZWIMFLgcQtcsRs1Ef6dlOUhjkw2XugOWsrSuMdkRZkhiQ/OTKCVMgksoPMkR+sZLxVojzu + jgGcZs3j7dFRsBGt2U4kJ+YoDCNhYQIqoWgtCSEoXEuDiGCSGgGBhqjgtkIwW0OMUBthiAYSjBYSjY50 + CkSWeR+J1UiRJSaYfKeEteeImTuYq7IVTeCl5o04RBGyt4UEk/v7+3bi5FwMzuxLxen92ThzoAAXj1Th + 4Qv9eOzSKK6fHcLDpwbx0PEBHB8vwXh1GJP6VhIZZ8Z5W1QxiYrXF0yCFKSPqkBd1Pjro8ZXhrrdpmgk + SW/wsUaDny0aA+3QEOrIuOuC1gR3dKR4kMBtRFuyK/OEK1oSXdAQY4sanlO8z0AZqgNInnZromrnep5H + Hf0hEsZyE8xEyTEdQeIigPF8T5QRhLV79zG/7Y/jNk6KfbES7suwn0L9oAhjLJFMHkw0FY+do8CfCNHD + aKAORgLUudUktDEUoIF+P00MBGhhOMKAecUIIyzrPpLNbgp/4UGqjixztGaYi0Svip9VMkeWRytIClUk + +paoilaR/KlQLpg4sUoSRWGE9xqqmXcFY1io92Jhdo0I5qBIU5ISCoIYS7TEWqEj2oo50Aqd4Sp0sP20 + +5Ps7jZGkw8JJFHrQ1K6S4r8HfrI9NRH0iY9xG3WQ/QWCSK3ShAlTB+40wgRzEUROyQI9/rFAI4STOAd + uojbrnvHANb7LwO47mcDmKQ2XIa2MIqHUH30kgQPk2iPs4ynyQUW2Nf38f4XSab3sR72kyztD2F5B0ix + 11cf87uZm300MenLPOyvg/Eg5mKSqYkQEk9uZ0MlWAiTYTGMdcXtAZ7jQJQhDgnTSZOEH0k04bklmGGe + mY7XxVSiHiaSdDGerIuxeE0Mx6pjkDmtnzFoJIp1F6NFaGMkVhujcfoYjyXJJUmfImaj1kZ5T7KOx/3V + RQN4Llwbs3cM4MMky6fy5KLpK079zNwqjK44W8j9PBlOFspwPI/HcHu22ARnhel4Sk3F0Rcnma+PFkqw + IhrA+lgu1MNysS6OlvK1YACXrxnAJ2r1caZOD2eqdcURwHfVSUQD+MUxB9zsMsPjbUa41WmE24xRLw8x + Zg0zB/SbiQbws53GeLad2w4jPMf924IZ3GMm4oUeUzzfaYrnOhh32+Xi9JuPN+mTpOvi8Xo9PMXtC8zj + r7QY4k3mEwFvCRAM4f8c/dsqwa9aZPh1mzF+06vCRz1WeKdDhTfarfFiix2eqrXGwxQed+ea4nicAeta + C/P+WhhnHY/4ksv4khd6G6Kb8bKH8bLDi4KIfKh+O0XTNgmq2CZrdlOECSawjyGqvRkjfNnW2LYbuK1n + +67fzbhGtO42Qjvjcft2HXRs1UbPNopXLwlafQ1Qx/hS6a+LMrYpwQgWDOCORAVahXgYx3YbR8HLvi6Y + wMLo364UBbqTfzF/RQOY7/0MftYvGMCMo8PCCP//ZQDLMJIqxQhF2ViaYAAbYJKiaDpbhr1sKwdLlVit + scaxWnscr7bHcqUd9hVaYUwwgOMkqInSQVWyFPUU8U1FFmijcO/MV6E7R4X+bIrZHAsMCTM45FphIs8W + k3n2/F1bdCXYoDrYHMmeEoSQMwZ4yOGzWQmfbVbw3mGDXTussHunNXy9rBC43QpBW1QI8VQhjAjfokTE + JuYtF/Z1R02UebFcdivQ42uBAX9zDPmTkwtTdQsG8Hbe43ZjjO5g32asmNhhgGnGgnnWw1KwKZaZi5b9 + pDjqrY/jxGlvPZz1McD53VKc9ZfgTIAEJ9i3VxhHF/3UMeungSnG0bEAHfTv1kK7lybqyXErt2ihhDEq + y5Uxx90AieTDUR6GCHaTkVvLsM3REB62JnCxMYadtTGsLI3+2wC2NoKNlcmdfT24ORvAx12KuG1GzDsW + 6Ge8nGXcPRBrjZUoGxwMUWHCl8Kev5nnsAEJ1uvhr1yHbabk6yphZLSUvN4U0dvMELVJH1GuWoh10UIa + eXmeG2OrM3O8tRZSlBrIttZBkZMhyjcyLzkZodzGAGUqHZRQAxRb6iDfVhd5jgbIdtRHmpMe0lz1keIh + QaqnIVK2m9wZAWyD9P8wgBPCbBAfumYCRwdYIJLcI3y3OSJ8qDd2KBC4lfVNvbDTxQA7HHWx3U4bHtYb + 4GKmBlsTNVibrofKTBMKMx2YmBnA0FQKicIQUqUxjFVyGJkbQWpqAImxDqRyHcgU+jBlWVrYsQydzGDj + IIednREcbI2xycEM3m6WCNxsjRgvW+QEME8nemK40Bd7a0Ow0hKO1eYgnKj3x8lqb5yo8MKJsm04XuyJ + kyUeOFO+CWcrPHCuyhWXKuxxudxqzQAuUqwZwAVKPFpgjseIxwtUeII85XqhJR7IVeAuatPz1H6niRPZ + jKVZxljOMsGhTBMcJPYRwojfmUQD0QDez340z345wNjdTd3RG84cELGOPG69aALPJGhiX4IGlpN1cCzT + AGfyDHGhWDCA5Th2xwCeSdPATLbeHQNYgVnqzwn2y+ECS/ZL5nZh5ESaCbmaERoyhD9rfjGAuysEA9gJ + /TUb0V5ig5ocU1RQ21akCSawBLWZMjTmGKMt3xTthaboLDRBT74J+plbRngdo8wZo8VyTJWbYa5aMC0t + caCR7bXZGsut1lhts8LJTkuc7FbhNGPwqU4ljrea4VirKY61mfAzU5zpUeBcvwLnBwhuT3cbY7VVikMN + OjhQrY6lCg0crdBmvtHHXc1GeKjNFE/wPE9QP99sMcYTDVI8Q7zcZIRfUZO9XyvDR5US/KFKis+qDPA1 + c9Nf6g3wt2YJ/tpoQEjxNbdfEJ8xV3zOnCQYwB/3yJkjmEc65Xi1g7qF53+WeejJdhM82myI+2uFEcD6 + uFokFQ3gu3Nl/7cBTO76XwZw/i8GcG+hA3qK7NGUS76Vp0BnuS36ahwwUGO/tg5wLeNmPXlunTnLUokD + 9WaMxwqcqBFGHapwssIKx0ttcKzYDqtFjszVznfggiMFzjhW5Mo8vlnEap4bljKdMJ9qj/EkGwwl2qAz + 1hwt0UrUxShRHackb1OgOsUCtenWaCSPb851ZD1vRG+pB4YqtmCsahsmy7ditGgL+os3oa94M7q5bS1y + R32+M6pyHFCebS+iIscRVXyvMt8VVcLakEWbRNTyO7VFm1EjoJCv76CmwANVvMYyXmN9kSc6a3ww2BqE + sfZQjLQGY7glCINNAeip3o22kh3orfbDdGcMDo3l4vRiFe4+2oLzB2txcDQb+4eysG8wC3v7MzDbmYKx + 5jj0VIahrSiA1xqErspIdFWEoyZ7N4oTtyAvyhWpAfaI87ZG1A4LBHkYI4DxN2SbDHF+xiiitmlguTaX + OKOjwgWdxcIsR1boER5wKlJiivFgpkQh/tl3totxotsN59sccaHZBpebLHB3owL3NZrhwYafDGByH/aH + F9pscLvJCs+xfp+vVeIF1u2L1QLMcLuG4PvPNFrgqRYVrtcrcW+1sL6tAhdqTcm5jLBaKcPhAm0czVTH + 1Vzq0nJzvFJhiVe5fa3MHG9WmOPtSgu8UWaKV4pleLlAihfJ9Z5nnHg2VZPQwMuZeng9T4I3cvUJPbwh + GMDEq4UGeLHUkNdljifqVLhWbY7zFQosFxlif7YuOfI6xpsNogH8SAt/d2QjfjXmgre6+fuNpnimVB9P + F+ni9QYzvNNmiQ+7bfB+lzVebyKnqzbEzXIp7svRxuUMTZxP08GZdF1xVoPLjCMXS0zJT9mHitf4pzDi + +ECRHvYXMg8XaGE/9w/x+8dFI5wxgmVzusEUp4jjLJvlKsbWEhmmeB9DeeT3uVJ08NxNOSaozZKjOluO + qv9hADfdMYD7Sm0xUG6PwVI79BUJBjD1S5IMDakmaM0SptJXYbbEEqca7XG13RHXWixZJ2Y4U8U6KZPz + eo1wmL93IEMbiyxf0QAWpgEvEgxgPfZL8uZCXRwrN8SxGiWOsp8fEaZZbHTGfIML2rIVKIk3QkakFMnU + HcKftjHUjSEhCvgGGMMnwAi7A425bwg/Yjf18+6gNRN4d7AMASFSQobgcBOE/pcJ/P8ygC1FZGRYIT3N + AgmJRoiOMUB4hDaCQzREAzg6UoKEBCOkiQawGbL/DwO46I4BXF+qQDP7QRN1RD01RnOpGVrLyBfLlGjj + Zy2s31b2lQ6+7mI77SDv7i41R1+lFUZqhAdeHDDT5IRZYqbBEVPVdhgusRCXGZig3p+utMZMjZ24TOAI + 2/rg/zCARwQDWBj9lc92yjZ9lG36ItvQ9WpjPC9Ms17LnMB28rsWJX7fpsIfOizxpy4bfN7vjD8NeeCj + IU+82rsJD1TZ4RDvbybeFFOptpjKcsUMY9QcY+m+2q1Y7diFU/2+ON7nhUMdHqJZPcM2IUyvfJD9//ig + By6NeODBsc14Zm4Hnp/ehpvDzni4i32pRY4rjRKcp2Y6Tx1zmfv3MwdeF0eeOeC1QRe8M7oJv5nYit9N + bMPvRrbg/T4PvNPjgbe7PfFax1a82eeLDyaj8dnhQnxzuR14aBL/emAaH949irfuHscHD+7Bbx/dhw+v + 78WLdw3g3oOlODwUhZF6T/RXu6Kv3AHdzPHdxTboYVsX0FVsi2bBAM4URr3LURpniErq1dYsawyUOrO8 + ncSRnKOMKxOMBxPMQ7PMUcKo0L2tThAGbx3q88RSz+Y1Q7zFGROsw7F6Ac4YrHZAb7kNYY+B2o0YavTA + eNs27BsJwpG5aCwvJOLATCLmx5MwMZiKkd4stNalITM5BL4+W7DbzxuJ6Rkoq6pDZ98ARidHMTc3jj2z + o9g7M4D5qWYM9yZjtD8MM2Oh2D8dhhN7E3BlKQdXj5ThvtVGPHi2E9evDOKZh6bw8uN78erNvbj1wBju + PdmMswdLcGJfHo7vzcWJhWzR/N03FIOZzkAs9IasGcDjvxjAwvq/K5OxODmfjKPT8dg3EIrZDu//MIA9 + RAN4WDCAmTf/ywAu82EO9UV79i7UMQdVRbmhJNgBRX5WKPRVodDPAgX+FqiKdERLupB7g9nOWEZV3jhV + uokx0gn3sv6eqrPDS4zPrzEOviMYwMwbvxHWfe/0wJuDu/DEoB/zkQ/2NW/HSDXzdoUn655toGwT+4zL + HQPYEvM/G8CK/2EAc/9/GsDs380ZElTEaKEoTAMl4fooiyBPjDJBVcwdEzjRBE3UmoIB3FNoznsWHvCw + I5dxxnSNC9uSI/pLbMXPBQO4LJpaKlnCeCtHO3lTRz7jRq4xysh7S6I3oCJRD+VJBqhINURVuhy1Gaao + EwzGVD20peqgM41aOl3j/28DeG0NYCPsqaTuLdPBVJE2pgq1MZ2niz3Mi6fqbMkzN7J/bsZ19rsnub1R + 4yxy//uzTfBYFnlnjgLPUeu+mEeQZ99mP3qqzAHX2V/uKXXEKdbVIfK9PfmOmMh2xPAdA7hDXJfXEP3M + QSO55M6858FcalfeW2uSCeoYoyujDMVZaktZrkWRpiiMNEZ+uCEKw2V8bYiyKGNURAvrBAv/s7EsuV8b + LQxWFECez5jfIEz5LIz8jWXu4zHlPEdpuBQlEVIUhxmgKFQXJWF6KI3gNoJ1EaXHcwrTe0vRwPjemCLA + GE2Mhw3JCtQIo4+jZSgPN+C5pKgSDGBhBDHzQF2yMWpTDO9AivpUniNVIqJRWD4mhfk4XYLRbENM5UjJ + i2XYT/68XCjDKeqYS8L/MMUWuKfQAlfZLu9hed6dp8KFLDMcZ90vCwYwz7svRYK5VH1MpeljIk0P4xlr + mMjQ4VaX56bW53mnyHsmy00YrxTsQ0oMCQ+tCsvVUD8Np2pjllpqifzjOPP15TxtPFlPfsJ28SI1yssD + jrjd54wbnazHBnscZf6Z53WNkNO38v7qk3jf1FAtBazLEvLBCvL3MmGKdEuMs71Pk4PtYe5bpC46WE5e + UqHCSg01fK0dVuqdcKSO7ULYMvcvtziJ690fI062u+JCz1bcNeCNh6ei8MzBbLx9ug6/OtWEB0bTcZjx + YzzZGUNx9hhNcMZspiemMzejJ94RdREWrFsFCoisUGOkBJusjQIOE0YB3zGAyQ3Sw4TZffSRG6LD+tZH + M+u5jzxojNpuXjSABdPXGgtVVuJIZgFzZRaYpN4d4nGjbOtzFRsxU+lB3beRGtCZedoVw6XMEeRQQ+XW + GC6zxliZLXO2Mxbq3bGvbhMWatywl/lnkRpzX5ULDtVuwqm2nXhoOhYvHSuC2sFBNyx0OWBvBwup3wmr + vfY43GyJ/VVGmMnVwUDCOnEU8GCKDvrTpOwsJqIB3JhoJv5Znc8byyHxSQsR/iTWROD29QgQDGBhf5cG + wny0EOungyx2ImE+9cYMS7RlWaCTxKuHgnekhImNNzslDPcmGZmrZyGz0XRlyVAfz8IKXYe6WCHgGKGf + wnmY3xtkEBuimB/g9YyTWM6xQewttcY+Crr5IkuMUUT3xmqjLWzdHQNYQ1zHeF+JIY5UGeJ4gzFOkwCc + 7zDHSZLnpQoJZnIYyHiv3eFqaAtUQ6OPGuq81NC0Uw0du9ehL5BBLkQLw6FsyCR1A5FG6GGH74yRozXG + DE3RCtQxYBTs1kPKJjUkuaohfuN6JG5aM4DjNpkgarMZgtwU8HIwhpu5PhxMteCo0MBGCw14qDZgs8U6 + BLiwvLbLkBWgRF6QEhk+hkjYrIlE1w1I3aiOos0GqNlqhHpPdghXAzQ56aDNSQt9rpoY81iPg7s24Gyo + Nh5MleGFcgX+PLEFPx4OAE6GAqeIE0HcRgDHw/GPeW980GSHZ3MM8WicHu4L0cajDFa3EizxTLItQbGU + RJLEIPQMA84TggEcoYVHWCcPBavhkfB1osj5fY8t/rGwCTi9G7jsC9y1Cz/etYP724FlN3w7Zo3Pm43x + YbEO3qdAeD+PpFAwgBmIX2Ayej5WF89Ga+Emz3uLdfYcE9DrTDQfkbx+3eqIv3U64q8d9vhHpy3+2WWL + v7aZ4081MnxcqocPCzXwUZE6z7cO72Sr4c1UNbydqYb38taJeCdXDW8J7+eo4Q3izTy+LrxjADetx5/3 + qPDdaXfgfmH6Z5bNE8RNltcT3vj+MS989/AW/Pv+TfjXVRd8S3x3ryu+v9cD/77LAz9c2YRvz3rgz4cd + 8ZsZK/xq3FL8s/1mpxzX6qS4yCR3skgTRws24FTFBtzTrotnZk3x5ooFPr5ijz8/6IK/XXfG1w/b4c/3 + WeLzK0p8etYYfzwmwx8PSfEHYaRwvyZeaV6HV1rV8Xa/Hj7ep8Dfzjnjuwfc8e+H3PHdo574htf36Sln + vDUhZ7LUwCPFGrhRrE+BakZxq8ILtWZ4plqCW9UaeLxKDbfbee9TG/DlSWP88JAjyawT8KA9fnzIHt/f + b897tcVf7rLGF5etRAP460c98K9nd+LHN8PW1gD+NAv4nPg0DT/8MRX//m0ivn0nDn95PgSfXN2Cdw7Z + 4fk+IzxSpo1LJBRnwzRxOlwLp6J1sMp+eTiOojJWE4txghG8DgtRatgbpoaDIetwhm3haooMN7IUuMUk + dIvJ6+ksLQptffy6Q4bP5xX4+wkV/n2PBX58zFw0gH/4fxnAX1ng319Z45s/2+Lbz5zw/afu+PHTzcCf + 2Cc+9cKPn7HOP/fna+KzYIL391k08Mc4/Pi7RHz/VgI+v+qNXy854/kRM1zvlOHRdmPc32QoTrt6ttIA + h3K0MJWojm5ee+2u9cjbvA6ZntrI3iFHvq8NCoOdkBloiyhvikEi0leJeBLO1N2WSN2hRIybAVK3maA4 + xBa1Ca5M4B7Ii7RG/G4jxHobItWfopHENCtwzQAujhT+OFqbCrg+VVgzSTCAXdCc5UDyZob8UCPkh1Ag + hspRFGyMQorV4iBjFHO/lAlKMFnL70AwgKtIbGrjSFwS5WhJNUUHhWYPY+xwoTAVNJNvAWMuk9R4gYJC + T4npcismFXscaHLGUqsr5gXh2OiEhc5tWBkPxfG5BJxezMT5pWLcvVqHh8924cHT3bh2tA33rbTjwZUO + nBwvwmxDBPrzd6IxyZmkyRbVPxnAQQYo89dGhZ8WqnbroMZbKhrAzbut0MTybAywRUOgHWqC7Xjt9qiN + cUJDvAvzkTNakoU1l92ZXF3RkOBIkm+JshBTlAbIUOqvh5Jd6ijzYj15a6InWIoJxu09CVbYm8jkK0KF + RQr3PSRve2JJxqMNMUeyNRclYTuVYSFWxjZriH0kivtZXvsSSNZjjTDNMhwN1sVQgBYG/NUxEKAhos9/ + A3p81dEToIk+kr5+kre+GEN0xhuiLdEQrSRvAmlvTDVDTRKJYrww9QyFIHNJWZQFyiJVJPkqkj6h3hUE + 7+U/UBGjFNf6Lee2iCSjOEyOynCS0ghT1EeaMyep0Eq08xxtLN+WIFO0+JugmTmlXjDNWLbVwsMKOyXI + 2a6PtK36zFO6zFO6CNssrFWtL05bHuElIyQI32Egrv8btl2P+9p8j8duF0YA/x8GsDAKM9AIzWyLLcz9 + LeES0QBuD9FDZ5i+OBX0AEntCDGdJMc8+cR8jAn2kEvs5b0I68Hu9Zdg3kcPcz46mGadTezWxDAxwvYx + GqyHsRB9cRTwFDEfJsMenn9PmBSLPPd+kvhD8XIsJ5iJU0vviWGOjyZRjSNhTdDBSLwWRhKYz2M2YDBq + AwaYy/qYf0aZh4SpnwXz938awJNR/H44RU6wNsb81EWIBnAYiS2FmWAArzKnnWVfWRv1K0CO88XCupFr + f7KdKjQSzd8LJKiXKeov1whrr1ngXAW/I0xnVyTFSoEBCbo+Vgr1cLRUH6tlawbwcrk2jtbqrhnA9Xri + 9JynyjRxd70UN7rNcXvEDk90mOLxNmM83W2K24PmeG3UCq+MUCT1m+HpDkPcapXiiUZ93GyR4Cm+fraL + BLzHDM/x+GeZt55qW8MTrUZ4rFmCh+t18FANc361Fm5Ua+O5JilebDbCa80meJ0QTOA3mgVD2ABvtgjr + AUvxTrsM7zFOftBpik8GbfDxgB1+3W2DNzuFP2CtcYOC9io5x9kUA6ywThZZhtMsy1FvDdavLgZ9yTPv + GMBdO03QvoPCc4dgAMtQtY1tlm2y1veOAcx2LEwJLRi/TX4UX4L568O2500RtZvtjudp28W2t00H7Vu0 + 0L2V7Y/ttMlbF1U+2iglPy310xannBcM4K4kc/ZNM7QJ0zixf6+N/jUT10jvTjUX0fcf6E1RoucOhNHB + /dyKBnCWCiOZFhjO5H6mqfjw5FCGIUXQmgE8kiY8YCnDXJ4cC0UK7C9V4XC1jfi06rEGJxyncF+ucsR8 + gUr8fku8BDUxvGbBAGZebCwwR3uhYAALRpMlejMptPibA9mW5MeW5MkUBJm26E20RnusDaqCLJC6VTBK + ZQj3NEPwFnOE7LBBkLctYYMIP3tE+zoi0c8ZKUSG/0Zk+bsg08cW6duVSHaXIHOjLpq9zTDgZ8G2T87u + b44ZYtKX+cKLIm+bIYa2GWGU25GtBhhlPJlg7JhmvNnP2LMUaIIDPgZY8mK73kVutMsAZxknzjHXnfGl + IPWTYpVx+jD1wsJudUz5kdMG6mAwgPyfddXopYnKrZoo3qLNPEue7aqDBFc9xHhIEOYmRYCrBLs2GmKb + i2BEyuFibwoHW1PYWJv8YgBbymBlaQhrKxNxq7LShaODPnaQS0dvMURlkAq9UVaYYNxciLHCgSgbzIeo + MCSsQ79NhgJ3fSQ4asOXfN1ToUbero7tDhL4bzJF0BY5gt10EOwiPLCpTv6vgwzmd2HJlngrdUTI1yFG + uR7JVlpIt9FFnp0+Cq0YLy11UGSpjQIrbeTYaCPLQRcZDjpIcdRBsjNjK+8x3pXn2Exd4G+FrBC7Xwzg + MBskEYmh1ogLtkQsuUL0biUifcwR4a1E2DahruXwZ737bDTALgc9eNnqwJPXIzxw6ihXgy2vy9J0PZSm + GjA20YHMRBf6JnqQmEphbG4IY6UMMrkepEZakJpowtBUG6YqXSitJVDZyGBjK4yklsHZzhg7XJT8PVvE + eDkiO2Aj85EretO3Yr7UFyuNITjTGopzLQG42OiL87Ve5FBbcbZss4hzZR64ULGZ8dADlyhar7D931Vp + g7sp7u+9YwA/XGSOG0WC8UueTa33ZKElblD/PZSjwFVqwovpxjiTboQTGTIskzseSpdiP/vcXmrFBW5n + kwzWDGDqWNEA5rFDkeQD5G99EesJat1IakbqxvHY9eJMNYeSNBnXGWvz1wzgM8U/GcC6mEln7Mr6DwO4 + RDCArTFSZINe9k1hirYGatca6rE6wQQmWrLIs9ivBQO4t8oJPZVOaOZ9VPN6Kn82gKWozWT8yjVFW4Ep + WvOZR3Nk6CB6qZ8EA3is1AzjZQpMVSowV2OBxUa210YbHGqxwUq7LVY7bHCqxxqn+6xwpt+a+yoc6zDD + ajvzTLscJ7rN+L45zg+t4dyQgsfyM+aFwy362F+ngb3lG3CwXAMrNdo402CAq8wtj3QKXNgMj3H/OvPB + kw0SPE9O/GqjDG/XSPEudc9viD9U6ePzOgN8Wa+Pr5lLvmoywFfNUkKCL5ok+Jx5QjCA/9Qrx/ttUrze + pIfXWg3xUqsxnm+V42lep2AAX28xwgN1Elwr5+8zP96dJxjAhqIBfCnbEOezmVNzTXA0xxQHBQM41xIL + OTbU9PYYzXfEYL4TBgqc0Ftgh84CckgeU59rhtYSK3RX2rL8XR3vlQAA//RJREFUbTBQa4WRWtbdHQN4 + sUGBA3WmWK5heVWZ4XilEsfLVRDWZD9ayDhd5IDVQuc1FDnhaLEzTpS64lzVFlys3sZc7sn3PXAgdyPm + shwxmeGAoTS2iVQbdHDbmmmDpnQr8nbu59qju2gj+ss9MFy9BRMNOzDb7I2F5t2sU2/M1+zEVM12TNbt + wGi9FwZqtqK93B2N/M3GUnLfMlc0lbuhpXITWqq2opXHttXuuIOda6jZgZbq7TyGqNiGpoqt/J4n6kvI + lys80c7Punjuvnpv9DUQjT7ifmeVF5qLPdFV4YXRlhAcGEnHiT0luHSoDmf2VeDgSBYODGViaSRXxGJf + JqbbEzFQHYH2Yn+0lwShuyqC3w9FXa4PSlI8kR/nhowwRyQF2CFutzWCPI3hwxi320MbweSX6VEKlGc7 + oIZ118iyrc+xZv8xQ30K+UCmEQZy5cxxhpjINxbX/73Y5Y4L7S643OaAe9qscU+TOa7WCyOA70wB3agU + DeDnW6zwXIMKz9Qq8WyVQsRzFaYinqnkttYczzVb4ukWazzWaIH76xTkVso1A7jaEMvkYUu5WljN1MR9 + BeROFRZ4qZwoMcMr5Hivkr+9UarAq8XGeJkc7xXGhBdzfzKAtUQT+MUMXbySLcFr2fp4LUcPb+QJBrCB + aADfLpVRpytwo1YwgC0YC82xzN/Zx+/vSVXDgcz1uFBpiIdbzPHioCPeHnXG273kVS1KvMzre7FShjcb + FXi33RIf9djiA3Ku1xoFA9gIT1cZ49FiCe4vlOJectC7Coxxd4kC91Za4Gq1CpfLzXGmnO28xBArJTIs + lUiwv0gfewp1sLfIAAdKpViulONotRmO1ShwjGVyjP3jaK0Ch9g/5ouZ83N0qR310J4lYbumxmA8rmb8 + q8wyQRX3q9INUUM08L2mPMUdA1gwu2wxyJjZzxgoTFFal2CAhmTytgxT9GebYk+xChdaHPBgtzMebLPE + vY1m4vTYJ8tMsMJYcDBLH/vStLCYqo6DGYIBrI9jvOZVXr9gAC/n64r3tFJphiO81yVhusU6R0xXO4hG + c56w5m4wdUyQBDEhxogMMUNAgAm8yUl2kosK8PaVwIfw9uc+9aRPoCEhg2+QFH5BMgRSWwcRoVFrU0FH + x/1kABveMYBNkJRi/rMBnJ5hiZRkJWKpJ6Oi9REWro2QEM1fDGBqxJQkE2RRH2almyGX+N8GsDmqi6j1 + 2ObqmQvqqDdayK3bWKdtldR9bJ/NzEmtZeS0bKedjF9tJUp0llqgt1KYhthWNAsn650Z95wwVmuPkQrG + KObZ/mJq/zJLTFbZiKbwxM8GsOKO+WsmTgc9yt+fKjASjYWDbNPLGdq4yDZ9vcIIL7CNvMl++BHb6ydt + FoTqZxP48wFnfD68CZ8MbWIb9sCjVbY4mmqMOWrrmURyyzR7TGc7Yb7QFfvIB1Zbt+Fkzw4c6/LEwVZn + LDTYYLreGjNNNphrssf+Vn6fffxSlwMeH9uEZ6e24MlBZ3Gt6nsajXCJeehcrQ7O1+nicr0BrrUwdwmj + 54X+M+SMX4+64ZNxT/xpfAv+NOyJT3rd8FGnKz7qcMf77ZvxYc8ufDwSij/OJuEfK2X4/lwbvj7bideW + G/DMShNePtuDt+4awdvXJvDUuQ5cWszDgb4wDNVtZY53R1eJI3O+DdrzrcXRvZ2FdmhnPmrOtSafV4kj + gCuEgVGprKdcO5b1RkzWuGKc5TLGODBGfTjO9jtdZY65eissNNphn2B+8xr3tztjvpHlxffH2L5HhZF3 + rC9hmu/uYuoS1qUw4nigxhGjjW5Y6PfG0mQIDs1EYnEsCjODkRjpikZfazzqiqOQGuuN3TvdsGvnVkRE + hyMzJwvVddVo62zAYH8zRvsaMd5Xh7HeQgx3RGGs2w+zg7txYMwPJ+fCcde+FNx7MA/XDpXh/mN1eORM + G25e7cfth8bw4iMTeOLuHtxztBpnWEan9mbjxFwGVqdTcWgsAXNdwZho2Y35rkAcHo35eQro+S5/zHev + GcBHp+KwfzBMfD3T+p8GsDCl+9oU0GsG8Db0l20ndmKgxJvt2getWTtQl7gJlVEbURJqj5Iga5QGWRGW + KCN/borfiL4c5t+6UBztjMFqtQ+5qSeulG7EA4xTT7HPvMQyfpNx770aU/IcM/ymfs0Afn3AC08M+jIf + eWOxaRuGqzajl5xWMIAHeF3iCOB8W0xQt82XCSP8VNjLXLSHcXRPo/w/DGCzOwawivs2ogHcmKaPsigN + FIaqoyhMB8WhMpSFG6NSMB7jhEF1JmhMlYsGb5cwrXGJubgO8CRj3ESlozjNfl+xDVoyjdcMYJ6rKk4H + deTEjeTATZnU1+TLFfGaKIvlZ8n6qCJnrUwzQWU6f4N8uUYwF5N00ZSsgdZkdXSmqaM/S5Oa8xcDeG0N + YEMs1sjvrAEsYM0AFqaBXua9HWo0wWK1BLNlepgu0sFMgQ5m83Sxl7nyHMvyXub0h9s9cLNzM55qdceT + jEuPFJnhkRwTPEmO90yuAi/mmePVPBVeYc54qcQWz/L+Hq9wwrVSR5wtdcAyecMi+cOkaADbUZubiwZw + R6IUPamGGCC3HuL5+rNN0MN7bE40Rm0M9Z9gAEeaiLPVFkbKURBhjLwwGfJCJMgPNUBxOMudn5fxs0ph + xj3uVwmD/xj3hboQDF/BGK6NVojvVUTIUcpzlAgGMJEfpIe8QF3kM98UBGuzPrX5vh7KmQOq46gReB0/ + oSFZjvpEM74vmMgynkeKcqIyUirWd32SUJeGqEqQoipRRkhRnSghDFBDnVPLumpkPXam6vN+pRhlnpzJ + lWBvvhSHC2Q4KTz8VabE3aWWuIe65Spz8D1F1rgrX0VOTS5ALSUYwAdTqJ9SqJuEJVeTdTAqDAZN0cao + MINZmjbG03UwSQ00kWPA+jfAGDnEaIWcbc4UA6y3fvLz/lQ90YebYfs6SD11PFUDl7K0cLPGBC80kT91 + si777HG7xxE32uxxTx05drE55skTRskJ2pPZ9nhfDWnGaBGWPqD26y4jdxdGr1MTjjDGTTDXzTEvLRTJ + sb/EFId4b8vsqys1tlhhvj8iDFyqdcDBWjss8fxHmD+OUi+daHHEhQ4P3NW7Aw+OBuHJ+QS8cqQIb69W + 47HxNJys9MFChhtmkhwxEWuP2eSNmCb6YuzQKAwyClOgOMwUOeQOacHGSBJHAZsinkgIM0FyqBHSQmTI + CNHnMTpsX3poTjKkLjbGGPXdHPPxXubrvYIHWqHia6WIaZbdmLCWM/vdYJYZJosdMF7igsECR/TkOojx + RHhQqL+EOZtapr/YEkPs46Nljphl7pivdsMcsUAtva/WDfu5PVS3Cafad+KhmVi8dLwIavuHN2Jx0AlL + Qy5YHduI40OOWOm2xqEmUyyWSTGRqY0hEtd+VnxPigRdvOjONDO0pChRk6BETrAMaYESxHrrIsBzHfy2 + roO/YAB7ayLIRxOR/tpICNZDNklQqfB0ExNeL8XxEIXUeDkJRqVAMiwYqFQMulaYpQgbo6jtyZWykLRR + H6+OFuG32WEHKdrGC8wp6giK5eEsY0zwvXkGgcVyG+ynoJ4rYgKkgO6JuWMAR65nw9OiADPAAkn5IRKT + lVpjHGPAPdlMMkuCsr+c98lA1he3Dg1+aqjyUkP5VjVUblFD/Q41tOxSQ+fudegR/twP1hUN4OEYNvB4 + BloSva5Ykq5oJZoizVCyWxhJtR6prmpI3LheHFEV7yFFtLsRwt3l8HM2wVYbKVyUurCTq8PBTB2uKnVx + bTZvB01EbzZAlg+DbrgVaohyfznytukgd5MWSrbqo24nO8AOYiuDtjuJthPv00kDPc7qGN5IkbBzPc6F + 6+CRDCO8SiLw15kdwEowcDL8jgHMfcEAPhaGf8x44YMGWzyXJcMj0dq4FqiBR5hYbsVa4NlEG7yQaotX + 0mzxcpoKt5NM8VScBI+Ha+J6yHo8ErQOj7J8X86R4GOKrr/PuAPHfYBzvsBFb8ILuLATWPbEN2P2+Jxl + /UGRHt5M18IbDAZvpEnxcjLFUQLFUZw2novVEvF0jAaeidnA39PCW8K52S7+1GCNzxqt8OcmS3xBMfdx + hQzv5WvjHSaed3LW49f5G/B+wQZx+26OOt9TE41fYfu2YP7eMYBf4/Y1wQTOV8OvytXwfos6vtpjiR/O + eAIP+gM3I4GniZvB+Pcju/C3a574y2UX/PWSM/5+0QnfcP+7u9zw3d0e+PaiO749546/H3PF5wcc8P64 + Ci/3mOKJJhmulevgbD6DHJPiqSJtnCrVxOUGXVwfNsWrB0kWTtvj02sb8ZdH3fDPJ1zwt8fs8fVDVvjy + qhJ/vmiMz04Z4vNlGT7bb4TfTRrgnR6WWZcG3hvSwx8OmOEfFxzx/YNu+PfDxPXN+Oc1d/zxuANeGzXC + Y1Ub8HDhBtxgIn6uzBQvkTDerpLjVqkeniheh8dK1PBMvRreGtyAzw4b4d932eGHex2A+x3x4wOO+OE+ + J/zrqgP+drctvrzLFp/fa48vH3HH357agX+/FAh8mAD8KRP4Ihv4PAM/fpaO73+fih9+m4Zv3orHnx/z + w2/PbMJrU1Z4ot4QF+I34EToepwI24BT7JOnknRwIkUXqyk6WGYSOcykcDB2HfaFse2GrMPJaA1cTtTB + w2y/T2Qb4/E0PdzK1sJLlXp4r1uGL/Zb4J9nLfHdNRV+uLE2AviHV3+aAtoK+NT6ZwNYnAb6S2t8+7kN + /v1HB3z3exf88IkbfvytB777SIAnr5vt9Ddsr79lu/0d7+93YXzNNvBeLL57KRqfnNuKl6ct8UCzLs6W + rNXnar4WjuRpYW+WNkZ4f60hjBc71ZDloYZk9sFEdy2kbDZChpclsv3tkepvgyhvJSJ8zREdaIWkQBtk + Bzkg198WaTvMkLFDMGutUR3rwiS+EZmhFojaJUWUlxRJvmZI8zNHVoCwBpgFiqMsUB5nJY78FNaFFUYO + tOY5oS7NGiUkIHnsv3kUooWhJigMMUJBkCGKmJiKQ+UoDyeRELYiGGPCjFFFgVodayyuMyGsSdFBodmT + o8BwgQWGCij2mICEBD4sPDFXQAFCUbiHgnB/oxOF2EYsNDtjtskFC+1bcXgokAQ9Bif3pOP8wSLcs1qL + B0+04NpKIy7vq8blhUqigjkmGwtNURgtISFP2YjGODvURlqggtdZEWTAmKeFCl9NVHproXqXBI2+jK8B + tmghmgLtUB9kh6pgW5SF2PCe7FAR7cDrdyQ53YjmFHeSHlcSKEdxfYYSJuciivVCP30U7FRHsdd61Pho + o4tJeYxxbiHFHvvSHHEgg0hzwD6W6XyCBWYo3qdIBicpxgVMR0sxHSPFXKwh5uMoeEnA9sSTtFPYTzAf + jDC59wdoodefsZh5QkC3/wZ0+ZEoB2igM0QbHeEGaItizI6RoIGxtJ4koJaCvoaCviJRjrI4OeuQ5DPK + DMWR5igRni5juZQIT5iFyUlAhXo1ogAwFiGM+C2LMRcN4wLhM5ZfGeu1isfWRpihIYrCQTCCI8zRHKpA + Y6Cc+U0wyGSo9SZp9JagxEsXeTt0kblNFynb9BGzWQfhm3URvEkXQdyG7pAinO0wYocBwoiQ7ToIYT4K + 3a6FsO3aiNwmrAGsi2Thj7sdJDhe+qIBXL3bCA0BRmgJNkJrqJQwQGuYBG2h+msQzOBQPfREGGCYZTiV + oGD5yjHLe1ogmVrg9xYCZJj3MRAN4BliYrcWhnw0MMS2MRKki1GWuTAKeJLkfDbMELPh3IZKME+yvC/G + BEskz8uJCnG09nwsP4vRwyRFz1i8NgZjmcujN2Agah0GyBEGIzaIRsBEvC6mSZ7HKZKGGa9GY/XYTkhu + he9GkuiGaWMiSAujvhsw5rdBNICF9YBnQwUDWAMnsuU4V6S8M+rXBOcEkk0yd7ncQtyeLjLBmRITXKmx + wNVGW8IOV8h7BBNYGA18vNhQNIGPFhtgVZjGrlyCVWK5Ys0AXqlm/KzVx9kGA1xskOJSrQT3NhrheocC + T3abkzyb4PF2EzwtjOgdUokG8MsjKjzTK8fjzRI8UqtNaOHxRn3c6jDCsz0KPNejxNNdCtxq5zEt/D4h + jLp6mMfcV6OFa5UauL9cHQ9VaP7/2Prv+Ciu83scF0Vdq+27kla9S0ioIAmQBJJQ77333nvvEkiA6KL3 + ZjBuGAPuHWMDxr3bcY8TO4lT7CSOu8/v3BF28v383n+c18xsmZ255XnO2TP3XlztVOAmBdzL3Vq8yu3r + XWq8xpz3ercMb4j1gfuZm4c1+GiY4njMFl9scMUfpl3x/qgz3hh0xrOtYhSfCnczrp9IN8XBRDPMswzn + Ipdi9lcDeI0cY+ELBvBQmBr9ISr0hCjJxZRoFVglpnlmGxejgNnWWlcq0CVGtEdo0Lmawonvd67i8Wol + uZsC/SuFAWyBoWBzjARZYJD77aEUuqGMB6uWMt5YoJP8dIBtcDTPCeNFzpgocqG4JbEudMRInoEi0V7C + CDGWa5AwKkBhOZK9gOFsih0eTxeQn5Y4YCO57qYKJ255XKzFBorvafKe9RKssbFQiflqA/mnIw40ueBI + uzt5qQ9OdPvgeIc3DrV4YkuFAePk3F3plmgWBjBFnpgesaPEhlzaHkNlFEL8rZECXlP+gkE9lGODwQxy + dMaRjhjGgzUUsmFiamJrpPsrkRakR3KwLZJCHZAgpuJc7YhUInO1M4rWejBf+KEpMRgtiQGojnRBRQjj + y3LGKnLOKeawubUG7Fhji3li91o77IqwxaYwHTasUGEDP7MhWIGpQMbDQAtMr5BhA8t/jvFm2yr25VBL + 7CGOMq7fxvq6I0pPyqjFmQglTkYocDjCEvsYn3dSP2yOpNCMZoygYO6N5L2vpGAONkFpoBkKGJ/SfMyQ + 6G2GeF9LRPlYIVyMcPVWINBbDT8PLbzdbeDhZgsXFx0cnFSSAexgvwAnR7W0NrCdI3m4uyWCfWVIChKz + YzhiKMkR04y9c0nUJAkOmFlLjh9hg46VOlQEqZHmbYlwJxP4GxbD18EYgR4yhC/XIjJQhTXLzHktSxHv + Y4p0P0vk+1sjh9eV4rAU67RGiFYZIV67CCk2S5DnaIYKJytUO1ui3NEcxfYmyKMWyHXh1t0MOR5myPIw + R7qXBVK9zJHqJ0NeuB0KyB8K4sgdmPty4l0IZ4pOJ2TGOCBjjT3SIg2sTztyCHKOYD0SgnXSNi5Qixhf + FdZ6WmOVqzmCee3LDUvhbbcUrjaL4ag3ho3WDGqtOazVZoQlVDpLKLUWkCuMIZMvgVy1BCrqFq2NMfR2 + pjDYm8PZUQYPF2v4uioR7keOE+qBwujlaElZwf4RjO2VYTjcFIFz3etwoS8G9/WuYdxbjQvtIbi3JQDn + m5bjfDO3v6LFHxcoXC+0eOG+ZldcpE68SHH/QJUNHqPQv0Kxe5V4juL/aqUDniq3wyMUyJcL1bgnX4Vz + +WxLeTIcJs/cR+24i5xzR44FthPbsi2xI1eO3eyP+8tsMF/E3JNlJT3sM52yFFNJSyRMitkgkoykZUrE + HxbHi9leq9S4o1aPM78ZwJbYSj0zJ6aCLpdja5UOW2rtKdSdMFPD+FHlDDEtXwevp4W/2Uz93J6rQHeh + Bv285qE6Zww3uGOglpymwh4tJXrJJFkwgBVoZ7zoK7dBf4UePeRhnYXkDsQw+dh0tY462RabG20x12yD + ne1i3VoHHOhxwaF+ZxwbcsOJEVfcNuaMsxMuODPpjNPjDnxdT+hwfESPU+O2ODttwB3MD+eIs+vtcNuk + Dd9T49CANfZ0mGJH0xLMNy7FvlZjHOswx519Klwc1OEh5otHhrR4pE+JJ7rleI754maXAq8xH73VbIkP + iM+IL9ot8ZcOS2o3K/y9h+i1xt8kyPHXASX+MqzEH4aUeIfvv8zc9Hwb9WCHNa73aKQHka4wnz3eq8aD + 7XLqKmvcVyXHveXWCwZwiRx3lShwTiy5QK1wvESHA6V67C41YL7UCVtLXbChwh1T5e6Y5HaswgWD5eTM + twxgMYvCQL0jhhsdMNHqiJk2B2zuYJ/vsMN8hw32telwuEWHY006nGhkudTb4VidA45WOeFYtTvhwVy9 + gBN1njhd7407WgNxV2sQ7mgOxm2NQTha4489ld7YUe6FTWUemCnzlAzp8SpPjFa5Y6RSjEr2xHSDH2Zb + AzDXEYLtvSsx3x+OvX1iJNEq7OoIwzb2lS1dIdjUFYb17cEYavJDX4MP+pt8MdDih4E2fwy2BWKQ3x/u + DMVI90oJw+xnC1iFoc6VGOK5BAY7QjHYHooBnktCG8/ZvgLD/B2BEXEObvubgtFT64/+hmBMdkZg9/ps + HN9eiXN7G3FmZy0Oz5TgwPpiHNpQhkPrS7FnvBDbBrKwvi0Jow3RGK6LwUhTLMs5Ch3lq1BDfl6R6Yvi + ZE/kxbohM8qZnFLLuMGY6m+KtYJPksuWi2mui9zQwDxcm0sOL6ZHTZeji/1nkNpwWJra0Bp7mx1xsssN + 5/o9cc+ABy72M150G3Bfuxb3t5HHEE93kN90O+CaMH/bud9ig2tNejzbqMNzDVoJYv8G6/6FPhdc63PF + kz0OeLjLHvdJBrB4AECJQ+RkB0rNcJL9/X5ymGfZHl6os8ELjAsvkuu9VK3CK9W3zN9KJV4uV+KlMjlu + FlGL5wsT2Aw3CyzwUhHbepEFXi2xxJtl5E0V1ni5wgo3aqzxDK/lsWZbci473NUo1i4XI4AtsSt/MQ4U + L8U9rRo82mfAjTEXvD7lJhnAb/Xa4Y0O8jHe81vdtnhvwF4yfz8YdsZrnTrcbFXjOr/3VIMajzfw+zz3 + oy2OeKTNBQ+1ObNvOeM+tv87m2xxW72G7VyJA3WMkdUy7KiywI5qxoJaBfY3klOzLxxivDnUqsfRNhty + Fjvs47FYA3ac8bC/wBJdBYxzBcI8UKEhX40GxuVGchhpNBnRzuMexl4xxa3403KSmKoyYEpMR8q43CXW + Q8yUYSBPIY3Wmq+2w/leNzwx5onHeG8PdutxnnVypl6NI2VW1G7mkgG8J98YB4tNcaxcmL8yHKuU4VCF + BQ6VE4wbh+t0OEgevk+sF9jkyvjpjLZsNYrjmGPXmCB5rSUSqRXjyJkiIlUIoz4KWWWJkNVWWBlORMiw + co0Mq341gYkIYQITa6lXoqm9YpO0SEi1QVK6HZJSdYhPUiMhWY3UDB1yyR0LyCfzC8XavwZkZdsgVRjA + 1IMJSZZISDBHYrwlUqkRhQGck6VGYa4ORXl6lBbYoDhPi+JsYQBrUV1oi4YyA1qpNTqoKyQTuMaWscAJ + g61O6Ge/6Gdc66m1Y5wwEPYYYB7traWW5muD9eSxTc6MJZ6YIda3Mk6Kh2FqHZib9Bi5NYpwI18TmG0W + I4zspVG/wgCWzF+eZyNz3tYK1lGpAgfYzo/kGuPuEgs82aDCy+16fDTohM+GHPFH1ttn/XbSOvFi/8tx + D/x1vR8+n/bHBxMBuNbthbvKbbE3Q43tGTbYSh2+pdAVOys9sbeJnLg3AKeHAnFiwA/7e9wYEx2whTlv + c7sDNrWKkcrUjGzfZ5gDHxhxx1NT3mwvbrjcrcO9zB0LBrAYAWyF88wvl3rU7Ed66h8HvDXtgQ9nfPD5 + xuX468ZA/G39cnw55osvBr3wRT9f7+d1Dofg84kI/GEyGn/elI6/bivCJzsrcX1LOR7ZVoEndtfj2WOd + uHa2Hw8fbcGZ7YXYLQzgDnIgxupBsfQA9UBPqQNzOuun3Bl9FWLWB2d0lTiiNd8WbXmsm2InjFUyTzT6 + YK7FB5vZTmdYv+KBr40Net6nDXaI2T46nbG3xx17u1lG1I9bGDM2NpCD11Nn8HPrG1hP9TqMkyeMVdtg + nHU3wfawvs0Nc/3+2Dkehl3TEdjB+5kdjGLMD0d3XSTqCiKQHReE8GB3BC/3xJo1YUhOXsf2moaKiiy0 + NRWiv6UIY53FmOrKxkxvNDYOrMCO0SAcmA7BbZsicdfWeJzfmoHz2/NwYU8Z7j9ch8fOtuPpu3rxzPkB + PHq2ExcO1+LcfAlOzuXgyGw6v5uM3WMJ2NK/BjPMcZt7mftYfnsm4rFrTBjAUdg+tBZ7pxKweyKO+1HY + OhiJLb2rMSvWixfrHjf5SyNtJxq5Xy9G3QZjrHYFEcocy7xXEUr+FITWDD80JHmglty5Ps4ZTeTPTfFO + aE1wxmC2L2bKw7CnLRYnexNxqnk1bq9djntrvfFQLXNDszNebrbHW8wh7zfr8HGjHp8wfv5ucBlemwjF + M+vXSiOAhQEs1iMeqfXDWH0AphoCMF23DBuq3LCZ/GFnvRPmmx2wu436qd0Gu7r02N6jvTUFNCEZwAZs + 76YWqdOjM88SNYlLFgzgODPUxMl/M4DFsmFtmTp05mrQRz47KEa1ss6n2ec3NDizTSyssy6Moh7GXrEG + cF2yMeqSlqIxwxxtOYzXedZoFaZvloX0Wgu5apswfQvJSYsIfq+Zn2vLMkdXtjF6bxnA48UmmCgzIccy + lQzgjcwXW+rl2NWixt4O8jHG6oM9C6N/hQF8TIwG7rXB/nY1+ys1YQ35eBU1IeP1kTo17u5wwgPM5U8M + +uC5oWW41uOJZ1oc8ES1Fk+WMeeWaXGT8ekV8uI3qI1fr3bAq7yvFxpc8UyjO+6vc8Md5N5HK92wu5xl + XeyO9QWMa7m2kgE8kCmnPlZQK8upq4UJRy4hRtwy3raIUbaS0apBtWT+alGRpEFZvAKlsTKUxliikuVe + naAi1KiToJE+LwzhhmRh1OrRKM3Ep2f9aKX3a+LVhJL1pkCxGAxJXVscaUKYomytCSrXWfBzVvy+XPof + dgEqtKWrWbdaNIk1iRMVqE0Qo4CpDRKpJciHmtOoFdL4GvNHI7lRY7rYytBANDGHNmdZol0aBUwNXSgj + X7LEZvKNXZVyHKxS4RRzxp3MDRcanHAfc+F9dS64wLK8h5rq9lIbnGD9H85TYR/z8K5cK2yhjtqQaYz1 + 1EPrc00xSy6zWZi/hdzeMoA3VlJLVcuxgXU5VavBRIWG5cyy5nen0pZgS8oS7EtfghPZS3AX8/UT5FQ3 + 2zV4le3iFXKWm0PueJoa5iL5yUnm/V1syxvZpoez5egWD4blKtFTLB6KNWCYOmuk2h6jYpQsIeUitpOd + 5GJ7qNH21ZKrNBlwrNUFxzs8cbTTEweFAdzqjH0t9tjfYkf+Yo8T3S441+eN8yNBeHD9Gjw5l4zndxfi + tQPVuDpXgLs71+JQWQB253tjLtUZW9JcsSWD/SnFEb0JtmiNY13HaVFODlBESKOAY3XIiNUik5wgO1aJ + vHVyvndrBDBzfW+WEqPkR7OlOmxjHt3VKNYEd8BO1sdvBnClBjNFcmmm4yne81ytO7Y1+2OSmmGoVMyY + 4o2JOm+MsL2LGaWG2B/GKp0wWevGnO3NnOCLbdQG821+ONgdjGO9oTjGuHT7cCQe25GNV29rgNH8LBPs + rBeObvHD6a1+DODeODHFDjRoh4MklfN1SmxmxU6IRpQnh5iaebDQBgMF9ujMcWDHkCMrgsQlxBgRfkZY + HWCEyNBFWLt6KWLYyFNizJCTaIXSVHasbCF8HRiYXLBJzG/dIaYocMTmFlYeE/gmkvI5YpYkdILkbYjE + TmCEjWuKgm+migmQAmwzCeMsCaQwgTeRNGzjze9iQN3NILBdjAAuJBlNt8AgA+ZIkjGmM9lAKRi2i6li + 2DAPNKlwsEWFw60qHGrRYL5WGMBmGM9YipZwI9SuMEJdkBGaQ43QzeOB8EUY5FYygGMtsEGsYZhJ4Z3r + gJksR37PHsMpduhP0KOBRLFihQmK/BYjd9lS5PpbIcNPjkQfOWK8lVjlqsByeytp6mdn7SK46xfBz2EJ + wjxMEOdngZwQBWqibNCd7MzG5SCta9cUaoGmYEv0RGgwssYGQ6u1GFyhRn+AAv3eLCNvU4x58z4lA3gp + 7ky2wpNsWG91uuLf21dK0z1L0z5LU0CvA07G4+dD0fhqNhDvtznhBgn7owmmeCDKBI9Gy3E12QY30h3x + Uq4L3ihyxxuFTHoMoM9nKnA10RRX4ozxVOxSPBW/BC8VyPBJpwP+tXEZcGQ1fyMCOMPtWf6u2B5Ygf9s + 8MSfuuzwXoUML2Qswc3UpbiZZsLfMMW1dBM8S9zINMNLrKPnsy1wlYFC4CaDzOtlCrxbo8HHJDPiaasP + axR4o9gYL2QtwguZi/Bm4WK8V74UH1Wb4JM6c/y+wQIfiWmfxZTQFUZ4t9wI71UvQBi/wgB+g6+922iE + j/pN8fVOJ/xydgXwYDTwbBpwPQ0/P7UOX98XjC/OeuCzow7483EnfHXaFf+53Qs/3r2M8Mf3ty/DN6d8 + 8dUhL/xp3h3vrrdlslLgYvVSnClYhMO8voPZi3BbhRnO1VvgYq8C17dRlJ0mmTzvh68eCcC3VwLw/bPC + BHbHvx5zxNf32+Lr8xr8/ZwKfz+uwD8OafHlbi0+nbXGuxNm+GijFf5yUI9v73HDLw/54MdHfPDDo8vx + r4s++OyIE16ctMZjDYvwcPkiPFVhiefrNHiRhPEmhdKz1RZ4unIRrggDuJVlMGqMP+1V4z9nHPHjeVfg + sreEn+/3wXeXvPDNRXd8Rfz9AU/JAP76mVB883wkfnonGb+IUcBiBLAwgf9ahF/ElNBfFOOXDwvxzfVE + /PnCKry31wfXh+xwZy6DfbwRTiQY4WyWGcWBNe5hnd5VrsAd7I+3MykdJ5k4mCymgDbC8eRFOJu6GPeS + aDycZ4VHck3wVAnru9kC700o8bdD9vj2Ll7zg8STNvjpfw3g3zsDfyb+6gD8zbAwCvhv/NyfnPHDH1zw + /Sdu+OljL/z0vhe+fdMV377hjh/f9sfP7wYD74UCvwsnooB3YvHL6wn4/rk4fHTCD1entCSBS7Cbdbot + YxHmiE1ZizGVYYKehMWoZWwoZNxLZ/9L816END9z9nklcoNtkR/uhOw1zkiNsEdylCPSY12QF+eOygRf + JnVf1ES7oXSVDSqiHdCY6oX6dG8UxFA8hsmQsIKxY7UGuREUf1F2KI9zQE2yI+pSHUnSDGgRU6VRJHUW + uaKB8agqSUWyokIFiUklSUdFnBIV64RZSCKSZIPmZAOJiS2aEgX0aCFhaU0WBJJI16AzS4vhIjsmbQPW + U5BPkmiNFjIBFSkYf5mMKinMhAHcLAxgDxygONpHQbZ7YDn2DoXhwHgUDs0k4cRWsUZLGc4fasDFI624 + d28Tbt9ShdtminF8Oh+HR7KwqzNBWlx/KN8XPUymnSkOJOC8DuaTlhhzNK81Q1O4MIBl6Ftrj6FYd/RF + u6ArxgXtLMOmWGfUxLA8Yh1RQ+LemOpK0uSJjpxlaM/2QUu2B0mQC2qSDKiM1aCcwr10pQmqVhqjJdIS + Awk6rGeM25brjp35npgv8sbeQh/sLmCSzXbC5nQbzFK4z5BsbUiwxmySjMfW2ESSuDlVibl0FUmAltBh + lvlgKoHltM4cw4yhg1HGv2GIx/3RJuhbZ4aeeAt0JZKUiaf90mRoziBhy5KjgWSglmVfw3NVkdBXkjxW + so6qEwySEVwVb4OyGBVKohUoY3yujFVIEAZ/NeuxmnVbRuJRFqVAdQxJoTCB2QbaSGDbmJPa4/XoICFp + jyaxXEOiG6FAcwR/d7UMZcHMVUEmyA8xQ3aIFVKCLBAfZIno5eZYu9wM0cw7cWHyhdG/fD8mxBwxwWZY + x+/FEcIAzgixRP5KGYpXWqOcqBOmXKQK3dHMUeuU6I+Rc8t6jJNJxq/YdsVYoD3KFH1iNHCKGrPpemxM + ZX7nfW8nqdpF8rSL398VqcDOSBm2E5sjSSLJKyYjjKV1lWfirLCR59tEgj5Hgj3HOpiLs+Y5xEhtDQ5k + U3hkU2xk6bAjXYFt6VaSwTuTYUrytgSjiWLazwUDeEOKCTZnWGF7Lr9bpMW2fPKNdP5GqjlmUy2wUYwe + TiTZjTNfMIAjxAhgYQCb3jKATbAj0UQygO+oscPtJKPCABYjf+9psMV9LU64t8kR5yjmxNR+91Lo3N/r + gUvdbpIBLEZ7iBHA4g+403UqnKSIOt2owulmJU40ynG0UawDbIajzQsG8B1dcpzvUeFSr5bnEX/E6/FI + tzBuVXiyX42rozrJAH55vQOen7TD04MKPNxujov1i/FA81I80S2TRgnfmDDg+pgBzzBWP9Wnw2NdGjza + pcaDnda4v8OS121CgWBMgbAUl+tN8VSbEs+RsL9AbvhShxqvdCjxcpc1Xu22wmti/d8BFT4Y0ePTcTv8 + YcoBX2xwwe+nnPH+qCNe63PEUw0aXCqR4Vy2KY4kL8X+BBPMx5pg6xpjaQro6QgLTPyPATwYpkZfiBrd + RDv32/ha62ruh2vQQbSvUqIjTImulUp0r6KQ42e6Qvn5W6/1riRHCrPGENvu6ApyWLbvgUAzNActRjU5 + XvWqpWgWbTNdh5FcMYLWAxtr/DBX58dYtxyz1T6SITxa4ChhJN8BwzkUH8SQMH2zFjCUZcutWAdYGMAG + EnsnbKHY307SvrXaWeKps2LmGorO9WIkMDFbrMGuWkfsbXLBfsZUMUXR8W4/HOtahoPtXtjTxGthLB5i + m2xNMaXYN6d45/3msS/n69DDWD1czOspMmAwxxb9jEc9YhqqRCWao2WoC7dE9QoLlAVYIH+ZOXJ9Zche + pkJWgBYZQTqkBeuREmqLtDAbpARTsBDFq5hb1nmjJ3kF+lOCUB9mQG2ACq3kmpPhdtjBPLVnrR32h1Pc + C0TqsS+cHDyU3D1Ei40rNJIBPB5ghSF/UwwzhoyyvEf8TTDhxzoONMVO5rUj4SrcHmWLu2MMuCPSFreF + q3FslRz7V1lifqUZdoaZsb9bYiLGmvFDho61vJ9VFigJNkUezydm1kkg743yWIo1nqZY7WmGUA9LBHrK + 4e+lgo+XFt5etvD0tIOruw0cnNQwiBG/9gsQ00Lb2VvD1tkSLp6WCPKzZr5Voz7WCb3xFJWxFJUCUXoM + rhTrT2vQGKZHUaAaCV4WCHU0lR7c9HIy5e/JsDJAQ+2jQDg5fLSfGVICZchZoUJhkAY5PtZI5GejNdRH + MiOskRshVm2ETLulKHVk/ThZosDOFFm6JUjRGiHVsBgZLsbIcDNBursZUolkD57T1wqZoVrkrrFH/jpn + FMa7IU+MBOY1565zQk60I3LWOiJrjQMyww3kDgakhdgiI8wWOeQhOeHOjNUOSF6uR5yvAms9rBHubokV + rhZY5mQGTwdzuFKb2Btk0OktodZYEKZQKI1hLVsEmZUR5Lx2Na9dw3vR6BbDzmYpnA38rpMF/F2tEbXc + gKzV3qhODsVgXgR2VIbjeGM47mhbw1gVjYd71+LhntV4qH0FHmwLxAPt/nigzR+Xub3cHoCLrcsZc/xx + sWUZLrX44HKzOy43OJFX2+BypR6P1xrwbIMjrtc54gb7zrUKB1wptcVjhVo8mK/GBcbtu/IVOEW9epgx + Zk/mUuzINMb2LMYYHu/IYftiH9xXqsXBSlvsK9Njd7Ga8Z4akJxzI7XIhhRjTCUuwjQ565ZUaqpsMxwn + Zz3LWH6H9BCPDsfLeQ7JADbDpkKilLmlXC3NkrKx2hEztS6YrHZBbxHzrzA+cuSopw4VT+d35jE3lujR + X2mP/hpn9FQ6oq3U7pYBrJJGAQu0Mw/1MW70kYd1ij/ucq3QmSuj9lZQH5N3NNhhC7XzlhbxB6IwgO2l + 0b+HB5xxbNgdJ0bdcGrMGWcmXHF60hknJ+xxeFiPI4z7JyfscHraAWdmHHD7rCPOErfN2OPUtB2Ojmtx + YFiJ+W4LbG8zxs5WY8y3G+NAhxlO98lx1yBj+KgeDzDHPDikxiP9SlwhrvUomROs8VqrFd5tscTHrZb4 + jDnnc+IvXRb4sscSf+2V4cs+Gf42YI0v+xX405ASn/ZZ440OC9xsMqY+WYxnyPWf7VThWeajp/u0Uk4T + BvClOhkuVFA/lFovTP9czGspVuBckRJnGEuFAbyf+Xc328N8CbkdY/CGMlfy2AWMlbtgoNThNwO4k/Xf + w/YkRsZNMD/Pij/Suxywg1p1vpNto10YwBocbWJ9M2cfYx4/WmePIzWOOFrjLuG4QLUbTta54XSDB25n + u7292Q/nWgNxtjUIJxuX42CdL3bXeDEPeLJ9eLJtiGnbPDFV74lJbifrvbCxaRk2s+1v6wzGjp4Q7O5d + iT1dIdjVwWP2k61tAdjcEYiNHUGYbvXHUKMPBhq90d/sg6HWZRhs9yOWY4jvD/Mco90riBAMd4VKGOlZ + SYT9hlGefwE8lj63AiP8veHOFTxHoHQeYSj3twSgj/fQ1xSA0bYw7F6fjmNbS3BmVzVu21aJ45vKcWSm + DEc3lOHIVDH2juZjR382NnWm8jrjMFIXxTYeic6KlWguDkJltifKMj1QkuaO/EQ3ZDFuJazWYe0KGdYE + WyAqzBxJ0UrkizWNc5xRmmWP4jQNSpOVqEqVoy1Xhd58FQbyrTEmZtEoU2Fvgw3O9Ljh7gFPXOx3WzCA + 23S42KzCIy1qPNmmx5V2OzzTasu2pcPVW+bv1XqthGcbxAhgW9zsdsbLQ564MejBdueCx9iXLnUZcFeb + LU41qnG4Ro4jZZa4rVSG+yvVuFKjx/VqNW6Uy/E848FNts0XKuR4gcdi9O9LZeRGJQq8UCTDzUIr3Mi3 + wPMFlriZb46bBaZ4udgCb/Kzr4vvlFnhuQorPFGtxEP1vPZ6G9xBCAP4AH9vX6EpDpea4r5OxsABe1wf + ccLLo054c8QRb/Ta4q0eG7zZbYO3iHf7F9YA/t0AOVcn9X8rr7FVgytNGjzdoiOHc8QzXe54utsTj3W4 + 4OEOZ1zka3c3sRwbtTher8K+OmvslAxgS2znfe8iJ53n63sa9eQrNtjXbIdD7fY41OGA3c0GbKxSYbDA + Spp2spUxqinbGrXZctTkKFDD+FdHDlPH48YcpTQNdC/731ClHSaF0ch+uL5CjxmxJmOpHgM5MnRnmKM/ + 2wKTrOe91Xrc1+uCK+PueGrIgEd6WD6dOpxrUOMo62M/4+/eAnPqNzMcLrOQllCRllIpl+FgOd9nbN7P + cj7AuL2vxoDddeRmtU6YZPxtFmvtksOnhBsjPsIM8VFKRK9VYTX5ZzA1eCDbYzB5hzCBQ8NlCIuwwqq1 + 1lgdJZemgxYjgRemhVYjKl6H2GQ9EtLskJhuQGKqDaGVRgKnkxfmFzqhsNgZBUXM03l2yMjWIy1TmMNK + JKcpkML2nUKNmU6NKQzg7Cw18qkLC3LE9M86FOVqUcTXSnlcTc4nDOCOOgd01HNLdFGbD7W7SehrZl5p + cEB3vT16hfFL9PGz3dQm3dV26CEG+XkxKnSKGG9yZV91RF+FLTpLNBhg3hmv/dVAEqMQHTHN4wnWhTCA + Z8QU0Yydc1V67ChnHyxV4mChJY5lG+PeIgs8zfbyOuPoFxOe+GLUVRr5+2mvHp/06CUT+M8jrvhyygd/ + nFqGT6aD8OrwcjzU4IpDYrYm6uBtOfaYy3fETsbvvfUeOEFOfNuAH070e+Mg++muDgNjInNtix02MDbP + VFMDsg+dZB8/3+2AB/od8TD7wEVqmXvamDM65LiTueku6qZ7u5S41KPBQ70aPDtki1cnnPHBeg/8ccYX + f59djq+mfPHVqBf+2ueGL3vd8bdeL3w54I8/DwYzVwXhg55Q/K4nAq8MxOHJ0XScH0vDXROZuLilFPfv + q8Fd84yHm7Kxazwek50hGGzwRW+lKzqL7ZnT7dBV4oAe5qaeMmEAu3DfBV3FYjY3JwxXuLF8vVnmzAmN + ntjY4ILpCuoGcovNtXps473ON9lhb6cz9ne7Yjf77Va+trFWjQ1V1BUshw01atYVIbY1WkyxviaFcU9M + U4POsH1s6vXB3GAAEYYJcrH2Cl/2VW+UpvghfY03Vvk7wp/cOTTYC5HhAVgXFYTkhBVse2vQWBLLtpSM + 8ZY4zHauxOYeX+wa9Mah8WU4NRmAM5MhuH08EmcnYnDHbCru2ZaDi3tLcPlQJR44WoNLBytxfk8Jbt+W + i0OT8ZgfXottAxGYIy+c7eT1NAcwHwdJJvC2gTXY0h8pYVNPODb3RfDaw7m/mlsx+jcU65lnhfk7Vr9M + MlxHqN1Gav0xImauqGI+rApmew5Cb0kguZc/mtK8UZvogpp4ap1EJ7QluxJO6Ep2wVgOy6UsFAca11Jn + x+C2hjDcXr0MF6rc8UiVE55vdMJrzfZ4hznkA8bKj5h7Pm5zwnv9vpIB/NxsDM6Pr8Fe5nBhAA9W+UjX + IgzgDfX+mK3xwGbywp3ktGLK1/l2B6kt72Jf2cEYvoP9Q0If93vJ7zqpSVmHHbkWqEmkZo03Ro00hbAC + DYkaNCXrJANYWpM2W0wDrUQf+exwhRbjNTaYqOH3GevEFNDTDW6QZljIlqGeHLc6fhFqqMGbMiykEaOt + 2VbMr8IItkYbz9NVaoP2EgPztg0aeNwgTMUMM3SRR/fnmWCkkJqu1AyTFWZYX2nO+G2JTTWW2NJgjR0t + zBftauxjnN7frcMh9v3D/TY4MeiI44wFB7v01LdqKceIGSYO1ilxtkWPCx32eJi598qgO64NeuJalwue + Y26+UqXGM8yx19kPXua9vVamxVsVNni72oA3ax3wcr0TnmNfeajOGXeRTx+rYPmWOmOuyFUygMdyGe8Y + S8XMewPZCmp3a2p4AQUGxEPVwkRNYs4S0zQnqlGZoEFlog4VLN/yBBVKYmUojrZEKbVoeawCFbFKVBJi + cE1lnJLf0fK7WrYpPWrj9KgTo0LjGKfjtKgU/8HGalARo0TBajPkrzIhjImlKGLeKV1rhup1lvyutWT2 + ivWdm2+NRm5IUqGeqEtQSnVez219ArVEkhx1vN76ZAVqmTPqmDvq0nj9vI/aVGrldCs0UGu05Fihm1po + sMACY8yPs8yFOyqps2s0OEH9cK7RAeebnHEvY6/A+ToX3FlJXVDCuqL+OFKgwT7yLWEAb85iPWeIGXWX + YCbfFJuLZdhaYk2ebY0tZdaYK7eWDOD1zL3ryWMmKzUYL1FhnG1qPMNUerB2C3XVvuRFOMnz3Jm9GA+X + mOB58rRX2dZfHRTLdLjiGca1+9k3zrLt7iMvmCvSYIx11pchQ0eWNcQU2b28vsEKewwxX42QS0yU6bBB + xMgKNbYT8+Rlu9lmDgjO3uaME91eONHjgyMdnjjY6kL+YiCX0eEgtdMxcv4zfe64e9gP90+vxmMbY3Fl + Wwae31WIq3O5uLcninwiAPuKvLElxQGbk4kUJ0ylGDCQwHwZZ4Mm1nP1OvJUooDIjdUhixDTQWevUyIv + Ro6SdTJUxluiKUWGviwVxqgDZ6hDtzMn72oQ6xcvYKc0lbUdtrKdzxQK79WK9abHzkYv7OsOxXS1BwaK + nDBa5YXROm8MVLuilzq4p8QOA2UOfJ05gzlzY4MXtlFX7KauPta/EufGophDI3DX+Do8tbsQb55rg9GO + WTfs2eyJozuYYHf54ew2X5za6Irj4/Y42m+H/STPu+r1mGWhThSrMEQhOlBIksZkJqYwEsPjM8PNkRCy + BBH+RlgVYISIFcTKRYiKWIrkaBNkJ7LjsHHWk/wJQbueHXWuxRk7Ol2wlQRyE0n5egaADTVKzJI4zNQp + MFVlhYlyC0yRFE9XWjNwqrFFOOONFGkkMsIA3kDBJ7ZzFQZsq2YgZePdQXG2iUFuKlOGYTG1VzIbHgPc + pjw21BIl9rDh7+Vv7SbBnReoF4tX8/wkLWOZZmhbswgNq4zQTHStWYKhmKUYizbGeNQSTK4zwYZk0RG0 + 2EFysqPIBZtzWdiZjhgTjYEV3hrBzhdqjvLlxihabop8fxmy/BWI96LAcZch1Mkay+0t4WFjAmedEdzF + NHKOixHubYLk5RYoDFWgOdoGA4kOGFinR2+4HJ0rLNAt/sBcw2S+1gbjq7UYDlFiKECOYT8ZxpZZYdLX + FBuWLZLWAD7PYPAMifW7vR74lzCAj8YAp2KBk9weI46uw/e7VuPPo954t9EO1xkkHo8T5q85HouyxjMk + sjdS7PFyljPeKnDHO4XOeJ2E9WWSz+dTKGQSLXA90RzXkkzxEhvnhxQD/5z2BX8cOB4BnOD2JH+X2192 + r8DXJIGftdnhTQaM62lLcD1lKWEsjfZ9JnUprmaY4Hq2OQURxVKBDFfSluJxBoqnUhfhuSxTvmaF10vl + eLNChdcomm5mL8KzKUa4lmqEN4uW4neVJvi4zgJ/bJbjzx0KfNFqhd83GuPDeiN8WEc0LMaHjYvxXu2C + +ftGpRHeazLCxwMW+HqHM36+bQVwKQp4Mgl4KhHf3h+BL8764MND9nh3lwaf7Nbjy0OO+PdJD/x0hx9+ + OOeH70774t9HSRj3e+HzHe54a9IWz3YpcE+JEU5kGWGf+OMozQiny0xxR50l7u/T4OYON3x2ZzD+/kAI + vn06FD9fD8GP13muZ9zxzRNO+OZhO/zrohb/vFuNr08r8a9jOnx1QI/Pt8jxwQYLfLpFhr8e1uO78674 + 5SFv/PiwtzQN9D/Pe+GTAwY8P2qBR3nPD5Ua4Sn2nRskgS9RsL1Qr8Z1JuarVUuZJBfjZvtivDVmhj/t + 1uKbU0744S6e76IPfrnkg5/vX4bvL3njP5e88DXx1UO++Mdj/vjqSgj+eX01vnstFj99lA5pDeBbBjD+ + IqaDLgU+KsZPL2Xgqwdj8MnRILw4xWTM+jnBujrNsri7yBwP1mvwMMnTQ8SDDMAXSVjvKDbDKSaDYywz + gZNJ/DzJzt2pS3A5azEeLVqMa83meGdSib8ddcC353nNDznih6dsWX56/PyqDX551/7/NIB/+qsjfvzC + Cd9/5ozvPnDGj++74ce3XfCflx3wnxd5npe98NOrfvjltQDgtRAiAr+8vAY/Px+N/zyxFu8c8MCjgxT+ + xYswG2+EiTgjjHI7lLQIvYwvjeuWojhsETL8jJCybDFS/Cgm/ayQsVyNrCAb5Kx2QFakE9LXOiElygkZ + sW7IT/Ai8fJHI1Ef64myVbYoX0NBl+LJxO2NwnUUkKFWiA2yQOpKCsFwHQolA9heMoBrUwixDmyWA9rz + ndGc64CqZDWJioIgISExFASmPF5FcsLElKhHY5o9SaITmtMW1pVtSTWglUK1Ld1WWkOkjaKrK0ePkRJ7 + TFdR7FWTON4ygMUIYCFCNlI0bhNTQLe4YV8XE+mALw6PBuHgWAgOjYbj4EQ0Dq5PpPjJwqltRbhjTzXu + 2VeHO3dU4+RMIY6OZWHfYCr2dCdgS9NaEoUQDOdTHGV6oIv31JmkR0ecAh3xMrSvs0JLpDnaGP8GYxwx + HO+BnmgXdLAM29Y5ozHWmQnXnuTKwKTqiLoUZzSle5LECvPXB805nmjMcmVZObAMdChbY42SVWaoXGWO + 5jVy9JGoTaQ5YmOWG+Zy3LEt3ws7C30Y1z2wJdsJsyyX6WQNplimE/FyTCdaS1hP4rVBrAOfosRGaeQq + xTDJ92SSEqMk5kPRJMfMeb9ikMd9MabojjVHZ7wF2pkLm1MsWR8kaOky1DJPVWeSdDKnVLMOKlOJZD0q + k2xRnWSP6uQFA7g0WoXiKDnKiIp1JKCEIKBVCTpUsX5LSC6LIqxQES2XRnc3xqvRwjbQwljewvtvidWi + NYbHa5VojlSgMZKEMVyGkhUkosHGyAkxRZYwgIOtEE9EBZhjTYAZooIsERtqjfgQa8SusEQ0c1F0sCli + ghYM4OQVZsgKIzmOUKI8QoGq1RQm4Uq0r1XzvjUY4HUNRFtza41+kugBktfeONZvtBma15qgK94KI2y7 + 02k6zKQylyexjSWQEJFEz8dosTuaZC5aiZ3RCmxZSy5AwjwZaYwNsZbYmGCNTSTHG1n2m1hPm1hPG9l2 + 5pIU2JWhwf4sWxzM1mNvlg7b0/l9lvksucCGdDNMMP+MJiySMEliOptqji0kl7uLSApJLOdL9NhEAi1e + F+bvpmQLkldLzLEOpSmgeQ2za4yxlfvb480JE+xMNCVpVuNc1a8jgNW4o0aHu0lCL5J03kfOc2e9rTTa + V5i+F0l0L3QwRjJ/CvP3dK0WZxq0OMu4eBvF0dkWHrepcbJJgWMNljhcb4pjjIOn22W4s1uBCz0q3N+v + xwM9WoomxtMuDR7pUeMJ5ppnRvR4fsqAm8SzI1o82m2FS81LcZ458LIwgPvkuDZux884cWuPK8MGvibW + zVPjgU4VLnZY4752K5xvMcP5RlPc12iGy40WeKxFgadbmE/adMwjarzQLsdLndZ4ucsSr/ZY4s0BFd4X + BvCEPT6fdsLn653x6aQjfifWqusz4EnyrfuKLXE200QygPcmGLOuTbGNbWE2wgSTEeYYY18dDadIW6nC + QKgGvSsobEM0aA/ToG0l2/Aq1cIoYAF+pjOMIB/qFlihktATwm2YAj1h5Jyh5Ekh5EkrrDDG9jzAdt0S + uATVgUaoWW2MdoqqoWwDJgpdKGJ9sbUxGDtbgjHfGsL9AEyWui0YvwJ5DhjMJdfLIdnOXjB+BcTo4SFC + CM2pAnvyUmdsr/XEfKM3ST1jCvnpRnJVMRX0DNvIbIkGmxlft9c48DPOFMOu5NpeONLlh4MdYs0WD8Za + N8ZdO/TmyCkGTSQDuI3CoTNXPO2tQ68Y7Ztvz+uxRW86YyfvoynaCnWRFqgOM0M5+2Yl77fM3wIFPhbI + 85Yh35dixF+FnOUqZAaqkB6kRkawGumBSmQtl6MoSIuGCGf0xvthKNEPTcEaNCyjYOF7W9fY43CsE46t + tcOxVTocW6nF0dXsL6ttsSuEfYzYvIKiJZiiL8AKfX4m6PZZih6fxejxWoRBT4pHv6XYHiTD4XC28yh7 + 3B3tiHMRBpxepcER1tO+EAueyxw7iU3hjA0UTl3rrNHCNlG10hIFwWa8bnOkLLfCOm9ThLsvxUo3Y6xw + M0GQmwWWeVhjmZcS3t5aeHnbwcPLADcP298MYINhAQ72ygUD2MUKbt5yrGB5JIRRwMc6oiPWgP4oHYaj + tOhfxTIlL69iTi9drkSGD3m8mxkCHEzgZTCGl7MZ/L2tsTJQg9V8P4JlHSvM35U6xkTm7JUG5PnIEW+3 + BGvVRlhpQW1kZYR1SiOk6RYh12YpcvRLkapajHhrI0QT6zRGSDAsQpLTIqS5myLVwxzJnubSchGZ7Ae5 + kQYUxLqgOMFNMoELWCcChTHcMj/mr3VEHusqL9IRueH2KOS2LMYTFbHeKI3yRP5qF2SF2iIlUI+EAA2i + /dRY5a1AMMttuZcaPh5auDmr4GiQw87GAlqNMdQKI6iE+cvr1vH6foVBbwQXu6XwdjJFoCs5S4Ad8iK8 + UJ8SgvGCcBypX4N72tbgga5oPN4fg6f61uApitjHW5fjsdZleLTdF493LsPDnX54qMMf9/P1yy1+jFXL + GKd8cH+zBy7XO+MiY+olcpBfDeAbdY54vtYR18sdcLXEFo8XMAbmM24VKHE+X4EzuZY4mm2KvZlLsStr + KXZmm2A7j8UfGXuoM/aXaXCoxgaHqvQ4QKG9i9pwW56MuZ+xPsNUWgf4NwM4xxwny5U4J56YpzD/1QDe + W2SFLfmmmCVmCi2pR8kLyqlLKw1YX+2McTECuNhGMq2asuWoTbNgzievoQ5uF9Ogltqim8K9o5RcjPcg + /mhrKRTTpi6gvZj6r4J9m3Gjg3GjNUcmrdvWx3scL2e+ZC7Z0mqHra0LBvB8tz329zrhUJ8Tjg654tiw + C46POePEODHJfst4f3BIh0PMBycm7XBqgyNum3XCbRu5JU7P2uPkejscmdBi34gSu/qssKPLDDs7zTBP + 7O0yx4l+Oc4OqXHvmA0ujQsTWIuHhlV4gnH/mT4lnhfrAbfJ8CY12PttFvi4zYzazwxf8Lt/7hYmsBX+ + 0kcdQ0795YASXwyq8EmvNd5oN8eNBmM8VU3d12CKqx0qXO3V46le5q4uJR5oleNirQz3lstwd4kc54l7 + ihTUF6yXIhXOFGtxTIzqJvaU2GC+2AFbSxwxU+qCibIFjBLCAP51DeCOChvJEBmsZ+xvccLGDids7XHC + zh57clQ76c/LQ61aHGnmualXjlMri3XJjtWzfGvdJBwjxJrAJ2tdcareDWeaPJm7vZm7l+FMiz9ONvvj + cAPjOXPB1moPbKp2x0ytO9bXEfUCHhI2NXphjt/Z1u6PHR0B2N3F/NMegJ2t/tjO/rClzQ+b25ZjU/ty + TLX6Yoi/08f80NfkjoFmb/S3+kgY4OcGeY7hjuVEIAY7FzDE8wkMd6+QMNobKmGsT2xDFtBDPt7Nz3UG + 8DvLMcDfGuBvDrQEoL95OUbaVmDXVAoOb8rHya0lOL2lDCc3leH4hlIcX1+KY1Ml2D+aj/mBHJZjOmbb + EzFSuwadpSFoLPBDVZYHStKdUZrhjOJ0V+SnuCIrzhGJa/VYt1qJNeSRUausEBfF3JRsi9wMe+RSo+Sn + aFCcqiE/Zp8osJEeqhhkDh0vVLDPsZ3W6XGq0xV39YsRwAsG8AXW231NSjzcrMLjLRo82axbAPnVFfIr + MdL2NwNYPCTd7oCX+d3Xxnzx/LAXrvS7M1654nK3I+7pEGtAM9/VKXGyinq1QikZwE9UqHG1nDyqVIYb + ZdaEDDe5FRCjf18sVeClYrlkAAtI5m+hFZ6XjGAzvEQ9/Aa//ypxo8QSV0os8Ajb9+VqFS7UkD9Ws+2V + KXGI5z9UaokTleRw3Yx1gw64NuyEF4cc8eqAAa8J85cQ5q/AO312kgn8Xr89Xu+yxc1WDa6TS14hpxQG + 8NNtjrja5Y4rXR54rN0JDwku2mrA3Y3/NYD31sqxo0qG7dVW2FajwI5aNXbUachl2LcabclX7LGP39vP + PrOzifGOZdHL2NqWRW2TZYVaapvKDGtUUttUkldXZVqjlny6IVshTQPdU6rDkJiqlFhfaYPZSjHCRYwo + tWG9Up9lmKE/wwTT+VbYV63GpR4HPDvugqvDdniiV4f7u7S4s1GNY+VWOMhy3FdogX1FFjhcZoWjFdYS + xP6BUivsLZERcuxhzNxTZY8d1U6YqRQzpwgNrUYBOXwydUVsuBnbnhJRa1RYtVqFILbHgDBzBK00x4pb + I4FDyUkWRgFbSyOAV1PfhMeoEL5Og7XUlHHUa8IAXoCYBtoGaVl2yC5wREGxK4pLXVFU4oxccsTMHBtk + ZGsJDdKzBMjF0lXISFMhK4PIVCEvU4N8fqYgV4OCHDUKs/9rANeXG9DOWNRRb084oIt5caDdAwOtbuht + cpIMYYGeescF1PK4xoBOavtOlkNfrRPGWjwlDNe7oK+KuYi6p7VgYYT2CDmrMI+mJThgirFyrEqHKTE1 + JX9zS50B21lf8+UalrMKh5kDT+Wa4kIR23KdCm902uHzMXd8PuyM3/fa4cNOLT5ivX3Ktvr5oBP+NO6J + P0z64pP1gXhjJACPNrvjMO9vB/v51mxbbCa/3c54vadWLI3ihdv6vXGyzx2H2CfnO5j72CfFVKPTbK/T + FVbYXML8xNfuaqfeYru/v8+GW5U0Avh8pwL3dClwvpt9ixpJPDj7YK8aT/Vr8PyQHm+PO+L30x746wYf + /GPCE1+NuOEffS74e48z/kGd9mW3B3OYN/OZF95q8MQrtd64Sm1wX1s4NdlqHGgJx/HBeNy2KRtHNmZg + fjIJm4ajMdoWxHL3RHupI5rzbNGURz5QRI7JNtDFttBNCCO4r9wD/eVuGGWOmKzxxBTzygbmlNkaR0wU + qzHFPDfHct9BLbmb/e1AhwsOdLlI0whvoW6crVRgPePONGPJhgoV1lctYEO1htBivWQEc9towEyrEzax + 72/pXYYZ8q7hOm805DqgJMGAnGgXJIU5IcxbDz83NQJ97bEy2A3hoa5YF+GOvKQAVOeEorMsEqP14djI + HLWV59rT54bDw24sA3dyBA+c6PXHqb4VuG10DW6fXoc7ZpNwx5ZU3L0tg9t0nNmUiqNTceQYK5nTArG+ + RYzc9cdYwzL0V7qjt9IT482BmG4PwTTzjsBUq0CwtATCr6+JqZ/HGoTp64OhGi8MVnljQKDSl/DDQIU/ + yzUAPcX+6Cr0R3uuH+pTPVCT4IjqeAc0JDuiLcUZndz2JTtjIssTW0oCcaB2NU42RlCXB1PP++BCuQse + Jtd8ockZbzY74N1GPT5kDvmwXo+PWp3xbt8yvDoehmuz63DvRBT29YSyrJfzt70xyOuYqP+vAbypxgU7 + qPl283u7GEN3dthjJ3PWDsb2/zWAt/ewD7Sxz7EOhQFcR71ck2AirR9bK00BrUFjkhbNqXq0pOmkkaMd + udS8jJ8D7I/D5Muj0nTu5EHkC8IEHqlgrKCelNYTTliEqsTFqEsxRjNjdpvgl3lydLD/t5NPd5UxvpTY + o6nQBnWM27UZFmhKN5UM4MECc4wzX60Xhl+1mPZXho111pirl1EzM3e0LhjAezvIJbsYH7q15KXkUJIB + 7IiDXTbY06jBTuYYMdPEkVoFbmffvY9997FeBzwz6IzrAy640eWA68zPzzEnPlehwPNs269WavA6Y87b + 5O3vkL+/xbj0MvXANca4hxmn7uY9Hmdd7SlxwpYiF2pu51sGsA79meoFE5i5SJjAQ8xN/cxNbSliXWWZ + NMVzdaIKFfFiBLAOlSl6lCdqUEINWkRtXUiURMtRGqOQIEZ9lhLi81XC7I3jd2L13LeVtpWxOlTEaFC1 + TovyaBXyV1GHrzS9BWMUrTZF6RpzVEXzt+MVrE8Ndb4Y2a2SzN+6BCJexToXUHD/FhIVqCHqkpSoSZGj + TgywJMR+TQpzbYYM9ZkyNPMexSjg3nxzDBWYYpo8Y2ulHHtrNOSxtjjb6IC7mshxGpwl3MFYf5b65STz + wLEiDWP6fw3gTZn8fvqCATybb4Y5xpudrI9d5EI7KlXSecUU0GIE8DR50qTkGSoxwfY2kWpGPbUYW6mp + 9iUtwqk0I9yVZYSHi5biJnnaq2zrrw044qV+F1zrcScvccHdzGdH2H63FmkxzvbXn2aFdmqodvKK7gKN + tH7/YKkew6V8v1SD6VIlNrHdby1XsV3xunht++ttcJh850SPJ071+uJ4tzePfzWANdhPPnSU/e40f/eO + YW/cNxWC+zdE4uHZWDyxMQUPTyXi9vYwHKpchj2FnphLNWATc/xsigHT3B9JMqA7wU4aaFPPui9nfZfE + MWfH65Abp0ce24WYAroglu0lbuEBg9Y03gtz+XiemvxVg23VtpLhK8zf+UbqOOoRgW3iId8iOdYXWLNs + 7bCH/P4AObswgPsKHTBUyf7M2N1f44buckfqRV4L++tABbVnjdAWjGUNPtjdFoDjA+E4Nx6D24ejcC/v + 6Zl9ZXjnrm4YbZ9lEtnCxLvTC6d3++HsLgqXbR4UguyoI/bSIt77Oxywo8WewsUWY+Uk3yx4sY5vT5ED + KpNJ1iPNkRC6GGsDjRARZITwYCOsWmGEyJWLEB+5BBmxJigVf3izIfSViykqnDDHJLRdCC4GuNkGNpQq + KzYYBhQGg/U1Vkx+lgyWVtjIwDLXoMIWBtydrLRdJDZz7PDrS5jQClmAxSykUhtWPMkCid3OGmdsZeBa + T5E9mmKB0WRzTKVbYiZXjq2lauyu0THgiEZiiblyC2yukGETifsGkpcxktfeeBN08Xr7uR1PZnBLlmEm + ideRuPBH8JYsBXYW2mIvheV8iTu25LliQyaTdLI9Btfp0RWhQAuJY02gBSoCLVESqESOvxKx7pYId7ZA + iIMllttbwEM8OS8MYFsjLHdiWXkbI8XfDGVh1uiKYaOOs8FABMsrxBy9gWbSCJapSCbzNXpMrdZgJESO + 0UB2rEAm+iAVZgOsMBdojMNrzXFfplIKhr8b8MZXW1fgl8ORwPFo4FgUcDQavxyMwj83BuITEqk3Sa6f + SzfDk7znK7EyPBklwzMxajyfZIdXMpzwVp4L3ilwwtv5Dngz1wavMYC+mqbEa2zEr6Zb45VsCn2W6Vfj + vsCe1cDhiIWRwEdWcn81ftgahC9JCj6gcHgpzxLX0oxxTRr5S5HP/adTl+JKBo/zLPBiMQN8kTWezjDG + g3FGuJ94hAnqqTQTPJttgRt5FFc53PL9Z5IXSQbw22Wm+KDOHJ82y/CXDjX+3qfF33tV+HOHBT5rW4rf + ty3Bp9x+2maMj5qX4J0aIyYMI/yuZTE+HZThH9tc8P3xIPx0dyR+uhSN7++LwJe3B+D9A454fasKL22w + wNub5Phspw3+ccgVP571xw+3+eGbYz741yGSxb0++ONWd7w5bsBz3WJdqsU4xcB2gNe2XxjApaY4d8sA + fn67K/54Tyi+emQVfnh2FfBCGH65GYAfn/PEd0874dvHDPjPAzr854IW35xT45tTOnx9WIcvtlnjk028 + nx1y/O2oDt/f64pfHvbCDw954bv7ffDVHR74aI8Nrg+a4dHaXw1gc9yo4fXX6wg1Xqxn2TZY4kaTCV7u + MsF7kzJ8udcO/znthh/udMfPF3zxy6Vl+Pl+P/xweRm+u+yLfxFfPeSHrx5bfssAXoV/v7QW372TgF8+ + y14wgf9C/In4vBj4gNtXcvGfRxPx+clQvDrrivPlS3Ga5XFHAeuTffnZHpYTCcBzfU54ttcRT7bZ4P4a + 8VS/MW7PW4TT2UwOLLvj8Sw7Jot7Mvi9fCM83WiC1ycU+PK4E7654ILvJAPYDt9ft8FPr9rhl3cd/k8D + +Bfu//QFP/upI777HbfvOOH71xzw7Qss6xsO+P6GK3644YEfn/fGTzf98cvzYfj5uTD8dGU1/vXgKry2 + yxn3d8qwL9cIEzFGGIw2Qg+3nXFL0BJvjsooc2SHLkVKwBKkBJkjNUiO1ACKuCA9skPskHtrBHBGlDOS + 1zogfZ0zk4MHqpP80JC4DDXRrigJ06MswpZk1AONmWIKaDvEs99HLzdGYog10leqkRepJwmxIymxR1US + kUxSlm6Hxmx71JD8lSWQlMTLuSUZSVSjIkkYwiQeSXoSA1sSPGcSP1e0ZTqjNZ2kN9OJcERnFkVftgFd + uQb0FtphuIxCr9qRMGCqYmH9himSrY1i/d86imdBXFvcKD68cHhgGY6OBeMIie/hsUgcGI/GgckEHJ7J + wLHNebhtRxlu31GO2+ZK+Jks7O9Pxs6uWGxpisSGqhASyOW3DGBPyQDuSrRBJ4lOV4IS3byX9igrdFKM + D8c5YyjOg/uOaIk0oDnaHnXrWAYxdihjmVSQzNemuKAh3RMt2b5oyvEhvFGf5U4y5ERyZoOytQqUhFug + kgK+cY0CnTFaDCTaYTzVGeszXTDLz27OY4LPJUHPcsJ6ivfRBDVGYuUYIvkbi5NhLN4aEwnWmGQSn0qi + 4EpVkxTpsSHDBpPJ/Gy8FQbWMV7HmEnoI/rFcaw5uuJIXOIt0Mqc0phiiQbmw1rmpepMK1RIf5SoUZlO + Aplug6o0O1Sl2qM2lSIl2YCqBFsU/2YAL5i/vxnAJBqVJBwlfK9gtQXK1sgW1nrmtTex/ptIQMSU0E2x + GjSv42v8fuNaEsY11qiOtEJxqDHyQoyR9asBvEKGuGBr5nILRAaYIyrICusk81eO2GBhAFsiKtgMMUFm + iFthirRQS+StVvB3Nahey9+NVKOZddbN8h1cp8PQrwawAMtxgAS7m+XYGmOOhjUmaF9niUGW3USKMIDt + MMf73SoMYN7z7lgb7CWp3kvyvJv3tJ2Ee2YNiWSUGWaE0UuSPJeuY15WY4btfz3z1wbWwaZkBbZnqLEn + S4992TrMZ2owl2aNWXKBaUFE08QU0KbM78YYS1yCySRjaZTvXKacosEOh6qcsYccYo4cQpr+mfU1l0zi + nEwiRpGwNc4Km3kNm9aaYmusJbazXrcnmGNXshmOFChwG4XXbeVqQomzVWrcWavHhWYnyQC+u8ked1LA + 30kucyfF+7lGW5yp0+JUjRqn6jQ406TF7S16nGu7hXa+J0YB11vicJ0pjjeb47Z2Ge7uUeK+Xg3zig4P + 9ujwcK8eD1JkPdKjxePMNVeG9Lg+YYfnxm3wRJ8Cl9vMcL5hMc7XL8L97aZ4akiDaxMG3JhyxrVxBzw1 + YsBjFJ2X25W40C7Hve3WuFc8Od9qhXuarXjtMtzfbI1HSNafbFLj2RYtrreSJ7TJ8QI/+2KXJV7uscRr + /Qq8w3N/PG4rjQD+47Qj9+3xO3JJMc3PE3WK/zGAjbGPgnaXGEEt1nUON8GYmJ49wgpDqyliw5ToF6N/ + gzXoCtGiLUSD1lC2L74u0Eq0hSjRvkKJziAFuv4HPWKJjBC2tVAlekMVGCZfGg+RYYLteYDtujWQYppc + tXa1CToYL8XUzxvKvChgA7C9JQQ721ZQwIZyPxgbKr0k83eAMVKYv78ZwBSVA1nkaWxnfYwDg2IKab42 + WeiI2XJX7KjzktZd2dPsje11zthMYbWheMH8FUuXzFUZsKWGMZV8eGejK+MqP9/mg13NHthSz5hEPjtG + bivWvmlINpUeHOnIYnnk6tGTo0cvr6E3yxY9aVq0U7Q2rBXT3JuibIWxZP5WrLBALcunmmVR6idHsS9F + rMAyxgo/BXKXy5EdoPgNOX5WKPK3Ro0ob+asoRg3tPjL0eJphrEAa+xda8CZOBeci7LH2VVs42EanFqp + I9WjmF+hw65gLbZIBrCan5ehz5f922sJOtyZLz2M0M/tuNdSbPGX4eBKLW6LtMddkY44t8oOJ1m3hwOt + sZt1szPADNvJeWfDWFfRCrStU6J+DfPbSivkBFsglbw6frkl1nibItTNGMFEgJsp/N0s4OMhh4+XEp7e + Onj42sHd2wBXT1s4OAsDWAGDQX4LCskANrjJ4eGnRliwDknhNqhkXhEPYEprSoeznQVZotRzCXLdTZDh + aYE4N3OsdDGFn70pPA2m8HY2x3Jva6wK1CBiuQpRy2VIChYP4xhQE+OM2ggnFPupkGxYiigleb6VEaLk + RkjSLEKGbgkydYuQpjZCAl+L4XtrrLnVGCHO3giJzvyMtzkyhfHrRwQpkR9uSx7gjDJyhcoUL1Qke6E8 + yQ1lRHmCK8riuV3HbawLcyO369xQHefJ9uOP5rRANCYHoCZ+GcpZt0WRTsiNcETGKgckkKtEr7BH5AoH + rApyRLCfPfy9bODlqoKrvQxOtqZwsFnyP1gMe5tFcDEsgqfjUix3WxiBHR9gg4IId3KbQEzmh+F0fSQe + aI3EE93RuDoQhed6w/FsZxCebvHGU2znT7Z54qkubzze6YtHO5bhwVZ/PNiyDJebfHF/kzceFAYw+87F + SltcKtfhUfKQq+wz16rscaPKAdfL7fFcsQ2eytfgsXwVHixU4VKhEnfmW+FUjpm0fu/eHFPszTXDbgG+ + vpca4xDj8xHqlqN1NjhUrcNexup56o8d+YzvOdR6aUup+4ywNXURDuRa4jQ/L8zfuyjMz1TrcVyMeipk + HsgxxoZsY0znmWOSQn26RIfJMltyJyeMUoj3FNuhJVeNBuaWaurHGqKe+835asng7SgxoLXIFi23DOA2 + or1ET7ANltmhh8Jf/Bm/YABbkcOxXzHHjAkdXS/+IDRgGzX0zi4HyQTe2+OI/d0OODTgjMODTjg84ogj + ow44yhh8aIT5cECN/UO893Hew3p7nJp1xumNThJOzTrwNQMOTeqwZ1SFHQMy7Oq3wnyfDHt6yYF7rXFs + QIHTw2rcPWGL+4jLkgmswSOM+U8OqPBstwIviFHAzFHvtJrj/TYTfNxqgs+6TPF5pxn+1G2BP/dZ4csh + Of4ypMTngyp83CvHm8IArjfGlZoleLrBDFfbVXimW892o8FDzEmXGq1xodrqlgGswPmiWwYwy+VckRpn + irQ4ThwUBnCRMIDJI0ocMFPqhIkyZwkjpY4YKLOXDOCu/8sA7nTBjj7G4QEn7O+zl6YvPMz8e6RFjaPN + PH+THU40OhLOONHghuP1CzjB9nm8lq9xe7LeFScbPXCqyRMnm3yYr31xuNEHu+s8sLXGDZtqXDFDbKhb + wEydG+GKzfXumGvywrYWH+xoW8bc44+drcuwk/ljB7G1zRdzfH1Tux+mWr0x1OSOnjondDN39DS6oaeZ + x0Rviyf6+H4/80h/mx/6bqG/w1/CQOdyDHYGYLg7kAjCcA/RuwIjxHBPMIb42mAXP9flhwF+flB8r205 + +luXY6R9BbaMxmHvdDoOz+bg+MZCnJgtZJspwonpYpyYEjy/kO0rD7v6srClMwVjdWvQURRInuuOwkRb + FJHXFlN/FGZQB6VTFyU5IJE8LzZKi8gIBdZEyBETrUFSgg1Skm2RTuSkUPuQY9cy73ayPvvLHTFSbovJ + Uh3zrBbz7Jcn/g8D+EKjHA82KiTO8liDBo83EvVsp9x/WhjAxLON5EmtBrzU44xXhzzwxoQfXhj1xdUh + Tzw+6IYHel1xgf3p9nYbnGYbOMfvnK/V4oEqDR4tIxcqtsKVIks8y+21EhlulFjjeW6F+ftiqRwvFVsv + GMDFC6OAbxZZ4XmxLbDAi0XmeLVMhpdKZXiO+08UmuL+YjPcV26NuytV5I8qHGI7P8hzH6uQkyeyH3Tb + /WYAvzDkiJfF1Ik9erxxywB+WxjAvXZ4j68LE/j1bmEAa3GN1/50o5rcjdsWA650uDL2uuBh7t/faocL + TTrcyXsTDyBKBnDNggG8tZqct0aFbbzn7XVimt2F6Qp3izXrWh2xu80JW1n+k2VqdInpQ9MtqEstqV9k + qEiT34LYt0J1BnVPljXa8hToLdFiqEyH8Ury/iod5upssYN8eBvPP1uhwlCWGYbSl2AD4+rBKgUe6LHD + tTEnXB+xwxXBebt1uLtZjZOV1jhcYokDLCOBg6VWOMQyPcgyPUCeuZd1s5vlvavQGjvJu3ZWkHNVUN8y + 7g4U2qIxS4P8dRZIjjBBbIQ526EKa6llVgoDeKU1AsIsESgMYHKPkFUyhK62xkpqp1XE6iglVkvmrxrh + Mf9rABtuGcAGpGTYISvPEblFzigsdUNphTtKy90WRgHnG5CdZ/sbsnJskJWtRRb1ihj9KwzgHAlq5GZz + m6VAIbcluVpUFdmhtpy5o94J7fWOEjoYC3qF+dvsKsWFjlpqe2H68j0J3O9k7uygvhfoqXXBYJOHhD7G + rw7m0uZCHRpzVego1mGAx2PMsWPMtRNV1MpVNhir0EgG8KZ6UVf22FVri72sw8PlGhxnGz9TYI5LrI+n + a5V4lfrloz4HfNJjwPuMo++0KPBeqwofdenw+357fDbiht9PeuPjDYF4dWQ5Hmxyw/5sJbamq7Axk+0i + W4/NjOU7qw040uqKU73uONnnjCPsA3s69NjapMJMvRLra+VsQzJsr7DE8QYV7qQ2ua9Th8vUQmKqZ7EG + 8IVuFe7t4baXx31qxgkxc5IKjzD3PM289vKgDh+MOeLzSTd8Oe6Kfww54++9jvg7c+pfOxzwBfvJp2zz + 77McX2eZ3CilXip3wakKX2wv8sGmEm4bQ7B7MBrbhqOwoS8SY10r0dvgh7YKVzQW2qOe9SvQTC3RUujE + XO+CzhJhArujr8IT/RUeGKnyYHm7YazaRXoQf0M5y539ZTLXGpsrtNhZZ4e9TY441O4imcDCNJhjLJop + E+tEWrFdW2E9Y8968pn1FUpqF5ZRpRIz1Wqsr+HnGmyxSYwa7nbH9h5frCe/6idXqU3XooBtOH21DeKC + 9AjzUCPQXYlAbz1WBjggMsQeceGOyEv0RnWWPzqLQzFSu4Ln8ib3cME+8dBZvyOOMvYe67DH0TbmRXK6 + U33BOD0UhlMjq3BqbDVOT0bg5PgaHBqOwHxvCDY1L8NkrSeGq0UZuDE3u6Aln5wp3x59VZ4Yql+GwVpf + DNZxSwz/ino/jEjwxVCNMH15H1XuvBfmv3IP9JZ5orfUG31lvuguXoauwmXoyF+GtpxlqEt1R1WCA6ri + DeTFDmgTgw+S7dHP/ckMF2zJ98XBymCcrAvBuZrluKvCC/cx7zxSxjzR5IK3mxzwuwYbfFivkwzgD6nr + hQH82ngYrs+uIy+Kwn5hADcsR0+JuB4fjNX4Y7p2GXO/BzbXUhs2u2B3+38N4B23DODt/2MAb2Msn2kR + U+WzP+ZZSqatZAAnMpYKMylBJf3P03hr/VkxarQ1wxoduVboJTcaLNNipOK/BvAsdehkjTO6yZNbGKdr + E5eiIl6YwEtQn05NzDbWWUAtTR7VXqQn/7RHK3lUfZ4YnGCNqjRTNKYZ/2YAT4hZb+rUmGNe2dqsItTS + yN+dYvRvh1rCbgFyuT2dKpaJFoeZk4702GO/mPaaeWZHOfkl++3hKivcVq/A5XYdnug14LlBRzw/4IgX + 2NdfaNXjZp2KfJ/cskKB19im32RufKdCjXcqNXir2gav1FIP1Nnj0RoDzlfY4RT7575ie2wtcsJ69rXR + PKHV/2sA90sGsFwygnt5by3JViyPBQO4imVaLhnAemosG5SzfEtilSiMtkbeWksUrrUm5CiKoqamPi2K + UaP41ujPcmH0rtOjPNb21tYGFTFaVEgGMHPNKivkMZ8swBSFq81RusaSulOO2njxv52YTlqM+uU+NX1t + /K9TSC9MIy1MYrGtE+8J8HPVKUrUpnKfEPvVKTxXOsH7EqOAm7Mt2CbM0JtnivFiC2wiv9hVTW5Rq8dp + xo+zjOPnGNfuIM5UUxOQWx0R5m8BP1Oowf4C1mWeTHowdjptEdZnLsHGfFNsK7PGPGPPXnKDXYwt28Us + DOQNvxrAU9RM4sGVCZbzRIoZ1gsDON4IB5IX4zae53yWER4rMsbNRuaKLhu80SceaHPFi/1euNrjiUvM + ZbfVUddQJ01mWqMvyRxticZoTbVAZ44SPcIEZlsVDwOOFqswWSzHLGPfXLkC29hOdhB7xFrAzQYc7WQ8 + 6vHCceIQ46aYwWR3kwZ7Wnmf7GcnqZXOjHjgjgl/3DkRjLvGV+Lu0XDc3heGA7WMcSUu2J7vjI3p7JOp + NtiQaofpdObGVPHgCPMq876YWbM6nu0lgXyV+4UJtihIpB5O0KJI+l9eTNetRAdz+lC+FhO8/pkSNbax + /e4ih5on99ktuBX1yB5iRxXzbIkSm4qV2FnriH3Ux3vI3ccrXNiHyV/II8SDL32MKV3lzmgpMqCt0ICu + MkdpjfmJWndsqvXCrublONq7GmeGo3E7cWE6BVf3V+Ldu/tgtH0Tg9BWVxycp2DZuwxn9vji9l3euG2O + QmaKAX2YYpJJd3e3M0WIMzY0OGK0ij/OYNjNDlaTTrKy1hzxIYsQFWSENSsWDOCVwgjmfnTYIqRELUZp + qjmactnhJAPYEXMkj9vb7THXrGNiklPQmmG01AST5aZYX0UBXmeJrQ3W2N6soBDSYFerrTTdxW4G4Llq + Fj4b6HieClNsnOuLdNhQqMccA9auKoo4EryNLOBxEs/xZEtMpVtjQy6JBQnnfA0JRZVamrZrumAppkm6 + p0kSpwosMZYtwyg7zUQmE2auBlvzbbA9R4/tWQxUbMTbKb7nxRMRDC4HWAl7mGS25rpiNoOEkkJmeJ0d + +iM16BKjBlZYo24FRX+IFvnLVYh1s8BqB1OE2JsjgPCwWfL/MYDXei1G+nIT1JBg9jFYjJJYDoaZYTDQ + GEPLjTEeKsMGnnvjGi2mVyoxFsx7C1JgQwhJ0kpbbAtTYyfJ6vF1MlzitT/PBPPhiA/+tjkAPx9YBRxZ + AxwWiMJPe8JJcrzxuyY9Xi2R47lkYf6a4rl4a1yJkuEKg9vzJLOvpDngjWwHvJ3LhFfgSNjjvVyKi2wb + Qod3+Ttv5ljjd6zTvw/54Jedq4H94fhFjAQW2BeOf88E4A/drnirSovrmWZ4Nl3AXMJVJpSn0/jbmea4 + lk9RxA58XRjATDCXGCjuiTLCvTFGeCBuMR5NMcVT6VZ4LkOGaxQYV1PFtNFL8G6VBT5ussIf2q3xtz4N + /jliQ+jwt35r/KnXDJ/3mEr4Y7c5Pus0xwdNi/Fu/SJ80G6MTwfl+PsWF3xzOADf3rYS396xGn8/HYSP + D3rg1Tk1nhs3o9hYjJdGzfDBRhX+stsR35/0x/cn/PDvQz745z5vfMX+8sctHnhr3IBrJJiXq0xwe/4i + HMs0whEGODEC+FcD+OZ2d3x2Vwj+9iB/6+pK/PJCGPByMHDTFz9edcYPT9nj+4f1+P6SDt/ercZ3Z3X4 + 9zEd/rxLjs+2muPz3XJ8dUKHHy4sGMDfP+CJby564W9nXPHhTgrZPhM8dssAfpK/e72KApQJ+lUK3tdb + NHi1Q8VkaoFXuy3wwbQK/9jvxPt2xw93euDne4UB7Ief7/fHj5f98P39y/AN8fWD/vj60YDfDOCvX4zA + v1+Nwve/Swb+kA38MQ/4PfFJAfAOty/l4NuH4/H58SC8MuOIeyuX4vYCI1yoWIQnO5R4bdoVb2zwxBvT + nnhtyoMi1glX2rR4iGV0ocIYdxUtwe25CyOGTycb4Vw620CeER6tW4KXx6yl6bj/xfv/9mHWhTCAb9ji + x1cN/6cBLJnAf7XHz1844MdP7PHdewZ8/wbL+EU7/Oe6Db65aodvn7HHt0874bsrrvj+GS/8dCUAPz4Z + iB8eCcbXF4Lx+g5nPNBhjX3ZRhiPNsIA22RH9CK0iMX7Y0kC1siQGmKO5BBLpIapkBamR0aoHTJJmHNX + OiI/0hW5a12QtsYBiZG2SItyQO46FxIvL9TFe6JqrSMKGSNKVuvRkOSGVhJU8SSmGF0Z6bsIcYGWSAlR + IGu1GgVRepTG2aIsnkjQoTJZh+p0HcoT5ShNkBFiK0dZohLlJBEViRpUJ+vRmGlP0e2Kznx3Jk43tGdT + eHDbmeOCrjxndFKg9rB/95fYY7hCiD2xJhNjLIXdtIjXYm0FJuLtjU4U/8wFzW442OmFw32+ODK4HAcH + g7FvcBX2DEZi32gcDkyl4shsDk5sKcLpuWIc35CLAwPJ2NUZg81Nq0mCQzFe4o+RApL3PCawLE90pzqh + M8EGnSQ6XUyWPcIEXqdAT4wOwwkuGFjnitZwWzSs1qF+jQ2qo5hoRXkIAziRAibNHQ2ZXmjJ8UNjji/h + g/oMd5IhJ5I5W5SuVaJEjJANl6MuQoGmSJU0JXJPvB1G05wwme6C9VlumCGm050wlmyDgVgV+qMYjxkT + B2KEuSvDcKwVRiQzWI7JZIqrTFuszyDJJkkcjpcxdlugN0aYwObSfk+sBbrjSMCI1gRLtKTI0EiIKVqq + MixRwXhWxvxUlq5AWZoGVZl2qMl0IJxQRzFSQ2FSmWBHsqliW1PwPuQkkqxfomKdWA9YPHGoRkmkNcml + OYrDLSgOSBCFMCCZbBBPiQojOI7HfL0xRo4GEtnatTJUkXgWhBojVxjAoabIDJMhOVSYvQqsDbBERIAF + 1gbJsI7HscFyrAuyQrQYHRxkjphA5vwVZshcZY2iSDWqolkvMXo0R1M8RKsxEGfDctJjROQx/p4E/vYA + yWsny6852oK5bima1piin0R2PEUvrck8l2LA1kQ77CSB2s16O0BCJbA/SY95kuHNrIdZse5vEklepg7b + siloKV6nRJ3wnJMs55lkObakM2dnkjcQW9NUmCUPmIwXhq+x9DTiVKYFptLMMZ5kjMlEE8wwp8xRGMwX + 8zcr2caZ4zdlKbCRHGJzqjCbZdhGYr2DBHsHidzWdZbYEmMhmcHb4i35mhV2p1niQK4MJ0pVOFmiIKxx + mmRUTAUt1gC+Vzxp2eyAc412FDs2OFWjw8kaFU5UKXGC21P1WmkapHNttrir007CHRREt1FcCQP4SJ0p + TjSZ48wtA/hin3bBAO7V4eEe8aeYFo/2avG4WAd4SI9nx+y41eLBTitcaGJsrVuMexuX4qFuGZ4etcFz + YvrnKWduhQFsL00jfaFNibtbrHF3m1hfWIF7buEiX7+/WYkHG1XSH6lXeE3P8vga37vZLtYFtsJLPUSv + DG8MKPHhqA6fTYppoO3x8bgd3h+1x+sD9v9jAJvhKAXt/kRz7Io1xzZyyA2rTTG8iu1hlQX6VlqjN4Qk + X4zoDVajY4UWLSs0aAlRoZHxsIFtsoloDpKjNVCB9uVydBIdt7ZdAQrJFO7m53tDlRjmdyZCyO2C2Q4Z + U1sDlqI6YBFq+HsdjJPj+S7YVLWMfHMFdrSFYmd7CAVsGPdXYJP4o6HIGf3C9M2xlczfX43g/iwb9LId + Coj9YQrNSYrOmQqK/AZvHGj3x37xh36TO7ZSiG8o0ZL0k8eV22BzlXh63wHbGsQT4W4k6l7Y2eSBuTrG + IvGnWzl5NgVOG2NEQzLjRxrvLYsxK4e/SQ7Ww9jTSeHfJp4cjmZ/XmWGosAlKOK9lYUwDoSyr69kvwy1 + QWWACuV+jDG+MpQvs0YJt0V+Vsj3lyPfj7HDX4Z8H3MUeZuhcpkF2kM0GFxtizZvc3S4LcFMoDWORdvj + fII7LkQ74ny4De4K0+As891xYn8wuXWQBtuCtZiVDGDGTV8zdPqYoNtzqYQB98UYc1uKTT6W2BeswclV + Btyxyh63h9jiRKAGB5ZZYZ7f2e5rii1+ptgQbIlexu0WEecY+wpWypDO1xICGIeWW2KVlxmC3Eyw3M0U + fm7m8HG3go+nAp5eKnh42/xmALt42sLRRQWDgzB+rW9BIR07eKjgHaBDeKgtUiPtURplYH7RozVCJa0t + Xb3cHLlui5DqshSJbmZY42qBEBcL+DmYwdNgBh8ncwR6WSN8uQZrlysRz3aXLgx3nqspzh2Nkc6oWK5F + lqMZYpVGiCeSdYuQbW+CAkfGX76eY7cEqXwtQc18r1+MFKclSPM0QRbroZDtvyRMhyIxojhSzAbhhvp0 + XzTnBqAlPwjNeQHUVf7Md8vQmOWLhgxu03xRn+qN+hRvNKYuQ1tmALrzQtFXuAq9+auY90PQku6PumQf + VCf4kFN4IS/KHRlrPZEa5YXENd6IWeWJyBBXrAp0wApfWwR4iXWVreHDe/dyMpOmvvZ0MoavizEC3E2x + 0scKkT4y1o0WBRHOFMP+mM4LwW01q/BQ0yo81RmB6z3heL4nDNc7/PFcszueoUa50uqKK53u5IZeeLzd + G4+0+OKhZl9cbvTGA42eeJD94f5fDeAyLR6p0OHpChtcLbPBtXI7XC+zw3PFejydr8bj+So8VqzBwxTV + 9xZa4/Y86qE8cxzOs8ChfAsc4HZfPttegRUOl6twnPH3BGOxMIEPUhPuLVNhN/XHLn5ua6YJ4/4i7Ehb + gkN5VjjL372n3gF3E2er2V4rNNhbJMOmTGPqyyWYoGYZY+yfoD4cK7bBeKkDhkqd0F1kx7rSoE6MhEux + JGdjv2Q+EbNhtRTo0FpkgyZupXXW+L1O6uou3ld3hQE9lQ7oraTO/s0AtpT+3OsrlGOUv7++QRjAYs1a + B+zoXPgjcb7TQZoKel+vA/b3cztIrTpsh4MjttjHXDDfq8B8vxIHRjQ4PGmLk7NOOLXRWcKJWUccm7HH + wUnm2lE1tg/JsWtIgT1DLJtBNfYTh4eY20a1uGPKFuenDbhv0gaXxrTSSOBH+bmneqjhuqzxcqcYBWyG + d1uW4v2WJfhYPIzbboIvqMP+1GeJP/PcfxpeMIA/6pPjrTZzPF9vjGdqluJKgwWeaVPj6S49Hu1QS3nn + 3loZ7qm0xPky5qYSpWT+CtxZKEYAq3FbkUaasu4Qt3uFAVxih22sg9kyR0yWOTGWOmGEx9L/FrcM4PYK + /f/HAJ4VI6oGPbBvxA0HhhzJb+1wuFOLI7yWo61anGixw2l+7jTb7Wly4FON7jjJuH28wRnH6pz+iwZX + HKt3xVG23aPNnjjY5In5eg9srXWR/vydrXEhB3ZeAF/bSMzVuWFrvTs5thd2NHtjZ4sPdv66Jba2eGGu + 1Ruzbb6YbPHAYKMLuiWDxx6d/M1OXoNAl3hdmMP83R5+v/sWelp9JPTy+33tyzDQ4YfBTn/0C7O3O+A3 + DBJ9nb583ZefEVgmfb6vzR/DHcHYMBCJ7cIEnkzBYbEe8EwuTqzPx6npIqIEpyZKcHSkgG0lFzt7MzDd + GI3e0hWoSndFTqwGRakGFGXYo5AcNy/DAelp1EVJdlgXq8ca8vGItSpERmkQtU6HdXFaJJDfZiTboiTb + AQ3Fruiu9sRQrSfGq50xyb4hRowKQ/L4/2UAN8gZO6zxYL019aUSj9Qr8Vi9ihyEbatRi6tNOlxjnb7A + viON/h31xuuT/nhxYhmuDjMeDbnjwQF33NfvjDt5zjs62Obb7HCx2QYPVevwSJkCjxZY4ol8MzzN7dVC + S1wrtsaNEhlulsjxAvnfrwbwTWEAi1HAwgAmbhZa4IVic7xUYsljC1zJN8Ujeca4mG+Me4otcK7UGieK + 5djPGHaA5z1JjniOvOuyZADbSwbwzWFe94ABr/T+1wB+p8cW7/ba4Xd9/68BLNYAJnerFyawDZ5uc8Jj + LfaMsXpcZDncw3K5vU51aw1gFfZUWUsGsFjbd0sNOXQtuXadLXayrHcQu5rs2S4Zc4jNNbbSH7BtGWao + SzFDTQp1lmQAK1CeSr0i9lMtUZ1mwRwlk9ab7C+mXiIPGq8gN6/W8DyMVV1O2CPiWZ0OkyzT8fTF2Jhr + jCOVMmnd3+fJUW8yjj07wLLn8b0tGtxWpcAxxoTDLGthlItp+fdxu5dltod1Ms+4v5NluI1xc2uBCltL + 7bCJOneigFyu0ICmLB3yyOOTI0wRt8YKsVFqrF2rRVi4CkGr5AikJgpcaYEV5B4h1Dqhq+VYGSnHKvKR + 1fzsamodMfpXbP9rANtLBrCYBjqd7Ta30AV5wgAuc0NFtZeE4lIX5Bc53oKTBLFGcG6eDXJy9cjN1f5m + AmdSG2ZmyJGVLkMBNUlxnhoVjHE15Ict9S5ok+CM9ibq+WZXdHHbweO2GgcJ7XWOEjpqCXLQ9monCZ2M + O72MYd31buiockILY2Y9f7c2k7kpXytNKTnEeDlUvjDN5ki5FuPlCwbwZsbMnQ0O2NPAfMH6P1alk7TO + OZb95TJLPFWjwItNGrzVrsd7bVq82SjHa3VW0vZ37Rp8yHb68aATPp32xoczgXh5LACXGdfmqcFmU5XU + 1NR01G7r89j2mHsPsL0d73LGyV57HOnWYS/j8vYmBTaxj2+qpy6jLtnP9n2c+7c3KthPVbjcydxBPXSZ + uNSnYWzQsC+rf8NF5p37ey3xaJc5nu2ibuH7Hw0b8Mdhe3zJfvUl+86XHXp83qTFR+wH71Yq8Sav5RWW + xbOFPDfr4ECeI6ZSHTDCWDZR6iVN9TvStDBlfneDP9qqPNFQ4oz6fAfmfAPqqFfrc+zRkCtGVjox/7Ou + it3QVeYhjQQWf+oPlTtjqMJR4v/T5DbjmVYYo17dVKKSDPd9TU441CZmDKJu4PGmMiU/Z0UNY8l2TZ1b + KMN6xo4NpXLMMEZtrCCqVcw3Kmys1zOPkC90u2Nnjw9mmlylnFhLXVsQJUdamArx5OLhPmqEkfOF+pIb + B9ghhvw4OcKA4hR3thFf9JYFY7wuAHNt7pjvdsSBHgNOMF8e79TheKstjjMunG73xNkeP9zWF4DjvX44 + Rhzp98fh3kDs6VyOra2+WF/rTi7jgj5ypY5CR7QWOKCWfbI2S48O9pEell9XhTu6Klk+3O+rJITJW+WF + /mpvwhP9VR7kSW7okdZUZnsuYR8QZVrE/WJvdBb6oLPAVzKAxexwkgGcKAxgO+oqe7SlCAOHWo55aJJ1 + uSXbHQdL/XCqKgB3UhOeL3fHpVJHPFpmi5eZX99udMT75F6S+Ut8QE4gDODXx8NwY3YdLk1E4WB3KNbX + +/P3xfV4YrjSFxNiau9qd4kD7Gx1w+4OF+zudP7NABYjfoUBLJnAfTaYI/+ZZJ4aqKDuyxfTL5ujJtGU + sEJVnAzV8WJaYCXqE9VoEEiylgYXtLCtdOUr0EcuPFxhx9+lHm3yIlf0l0YB95FrtmaJ6YNNURG/hFiM + ajHDlBgtynbdJR5ALLVFO9uFGP1bzT4p4ndFsvF/DeD8BQN4e4st5tvteB82hC3rVY+9XVrs7dbyWBjB + Suxsk0sQx/t5b/v42T0tOoilBbaWmGNniRkOlJnhtmpLPNihxdO89xvkrS8SrzGXvdKhY7mr8WKtAi9V + WuO1SjnE0gnvsF2/U6nGW4xHr7Mf3Kwz4PFqO1wo10tTGB8otsU2xldhAI9Ql/dl69DHmNonGcByDIpR + pdx2M7Y2JctQm2DNNmHN8lgwgCuSbCUDWEwDXSxGcUZZIzvCArkRVhLyxH9uawhq1HzylgLmg5JoLaFD + SYwNIf6ftEE5uUyZAN/LXyVDHvNJ3ipLwhwFqy1RwrxTsU6Jmjhh8grDV4WahFuQjm8hge9Lr6tRy/oW + qEnWoDqF21S+nyrM4FsmcJqAGLVthYZMczRnmaKD9TZUYI7pEivJIN1TrcVxap9TzOunaw04U8M+XMFY + XsJ4y/azP1cuGcAHiT351pgTMyOlLcIGyQA2wfYyGfbWarCvXos9xC7xMMD/GMBi2vrpIiUms+WYJC/Y + kLAY2+KNcDhlCW6nZrqYtQhPCAO4ToHX2nV4q88Rbw664/VhX9wc9MVj3d64i7lsXyn7QZolemKXojlm + MZqSTKhpxYMOSmk5kL48Be9LjnFqt/XkARvJB7ayfYh73EVusa/BhvHSGUe73HG0h3yc/W6vaLfkRLvb + 1ThI7nScXOrkGPn8qBeODflI/20fIgfeSw6/ie1oA/PiTK4NppmXptOYm5jfJxnzxzNdMJThit405lvG + kfokgzRrY0WKPUoZW4pTDChJtuG+qCcVmpnTunM0GGUfnCIH2lhKnVVFvVXHPlTP/tNgJ2GfeNCOHHOO + sX2OulQscXuw25/9aBl5kwHtOTryahcM15HP13ihs8KVGtIezfkGtBUb0MscMlLlihnGxh31ftQxK3F6 + YC3ODv2/BvBmF+zc5oIDuz1xfK8PTu/zwdndxA5PikMW2oSLNLXDvgE3Jgx3zHW4ktQ7YVg8QVZqT2Gr + Rd46SySGLUbMCiNEhSxAmgY62AhriZRII5SxATSLiqrULxjATBDbWg3Ser+TlVYYZRAYLjbGWIkxpitM + sanOkkKIQYMVtJsBYDeDzJ52J+ym+NpKUrOhSIdxkoMJCv/pQlZKvgYbmZC3lztiV4UY+m+LaRKZqRQm + QxKomVwVBaEeuynedzBoiDnMx7IX8RxLSTbNCStM5FpjA8+zpcQWu5mA9/M8+0iC9rID7KXQ3FdM4czg + cpCJef+vBnCOC2bTnTCd5ICxWAOG19pgIFyLLrFWXagKjWE2KApQI97VHKsNSxHmYIZAezN42SyBm9aI + WyMEORohxssIWcuXoiFCTJepwuhaawyHGGM4YCnGAlgmK+XYGKnBJmL9SgXGg3m9wUzsqwzYFumI+Uhe + c4QcJ+LluFygxQskCB+P++Jvm/zx095Q4OAtU/ZAOL7bGow/UtS8zc77Mu/7GjvU1ThTXGfwuxolw9OR + Vri+ToUXk3R4Ld0Wb2XZ4X0m5o+KHPAxt5/k2RMG7tvgA5b/+6Va/KXbEz9sDsMv8yvx0+4F/LhzJf42 + vgwftDrhlVKVZPg+k2aOK+mWt2COp9IpnrIs8Fy+DNdJWp4jnsozx6WkJbgjygi3s+3cHbMIl+JN8TDr + 8grr8tl0fo6k6IU8C7xHgfdJuzU+75bj78Na/HvSFt9M6vH1mBJ/HbHEX4Ys8JdBc/yp3wJf9Fnh004T + vN+8BB92mOLTATn+ttkZ/9znj38eCcJXx4Lxh33eeHubPZ4bt2QAWoyHmozwXPcSvDOtwBc7HfHtUT98 + e9gP/2Y/+Xq3F77avQx/3OyBN0ftcKNXgyearHFfuQluL1yKM4VLcLbcFHfWWeCBWwbwx2eC8Kf7gvHV + kyvw/Y0Q4JVg4CV//HLDHT8/64QfHrXBjw+IUb5q/HCnFv85pcXf9vO35y3w5wMKfH3KBj9ccMEvD3nh + h8te+OZeL/z1lAs+2KrD9W5jPF5jhIdLjPBEqQmuUTi9ROH7Gon4O102JCm2eLXTGm/2ssw26PD1AVd8 + f5sHfrzDEz+f98EvF/3w0yU//EB894Af/kP880F/fPVYAL6+NQW0MID/+WIkvnk9Bj9/kAJ8mIFf3ksH + 3s0EXs7Aj8+k4Kt7I/HBPi9cG1Pj3urFuKvMCA82LMKNYRU+3OGFT+aX4ZMdy/DRdl+8t9EDL5N0izW/ + Hm22wv01ZrhQtgR35i3G2QwjnBFTReQa4aHaxXhhVIYvjjnhnxfc8J9HXPDd02IErx1+eNWAn8UU0J86 + AV8Qf3HAL3+1AwS+NOCXz+3x4ycG/PCuHb5/zRbfP6/Hf67q8O8nNfj3Y9w+YkPY49tHXfDDI174/kFf + fHdxGb6+0x/v7nSl2FTiUN4iTK8zwmCMETrWmaKJfUWs7ZAbqURKmBKp4XqkRRqQEeGIrEhXZK+i6Fvt + ioJIN37GBSnhBiSs1iM10g7ZUQ4ojXZCNVHJ46IVKpSt0qIxiQKuwA+VTCLxwcaI8GZc8DdFYrAcGSTm + uZFaFJFYFMfqURKnRRmJQEWyCiXxVpIBXCLBmpCjLEmJKiadujRbtOZSHBaQEBe4oyefhDrPA125JNW5 + JMr5ruimCOktdqYQcMRoJZNalQFTYj2mSh3WU/BsrGZcZczf2eR8a7pSNyZRLxzq9iGZ88au9mXY3h6I + bR2hmB+Kwf6JlAUDeHMhTm4swJHJTOzpjWW8j8CGmmBMVQZipNBXGv0rDOD+bE/0pLmgM8GOoPDkffUS + fSRdfSRQQ/HO6I12RMNKLWoYV6tXa1DBsiilUC+LsSOZd0ZtugcasoQB7E8iuwyNgujztapkJ5THkYyt + UaI4XIbycDmqCfGgTX24NZr4em+iHYZTHDHCJD6e7oxRioDBBBv0Mg73UBT1Mhb3rLVC91qSkCgL9Edb + YXidHGNJjMUZ4kkwW+5rMUhS3hNjgW5CbHtiLdFNdMVZoj2exJz105wqRwNRk07SR5RR1IvlEYr4WjEJ + XE02cypzSn2OG+qyXFFDUlFBoSIM4MI1FP//jwFcG69H1S0DOG+lGQpWmaIyRo5aksl6lqX0RCHLsp5l + WSemDeJ118VYoyZahsq1JKOhpsgOMUNGqDnFnzXzuFwygCMDLCn8zBEZaCkZwOuCrBETZIWYQCtEB5pj + Hd9LDDZHzmphSmtQu06PRqI1hrlvnQYjCbYY57WNsY8MR8sxRPI8wO1gvAJdsTK0RFugdvVSNEYYo19M + s52iwyzb6uYUW2xNtF0wgFkHB3meQ6yfg3x9b6IOW+Pk2Mz2vY1ltSOHuZy5aHMGuUAs6yTKjDnYHOsp + hDamqfi6GCFM0Ztijel4M4zGLsFwPPMpuchUpiX5AXlHognGE0ywIc1KMny35ZNrkGBtp/CZTbfGJsn8 + JfkltrGOdqaqsDNZie2sa2ECz7F+hQG8M0mGPSTb+3OscIw84TjJ6IkiK8kEFiOBz9XocWe9AXc22eMs + xeMJEtOjFSocoZg5WqnAsWolTtZpcEe7AXd12uOebnvc3WWQDOAzzWJNYJ63zgynmixwtk3GzyhxX48a + l5lzxBTQD1FwLRjAOjzep8WTg3pcGbHhsRIXWs1xd/0S3FW3BPe1mOGRPiWujNvh2UkHXJ924dYRT444 + 4EEKr/OtKtzZrMCdrUrc0abC3e1anO/Q4BI52AOtWtxfr8JDxKPMu0/UW+PZVgVuUOQ9322NF7ot8XyX + BV7uscJ7gyp8Om6DTyds8dGYLT4YcyC5F2sAq3AfBcjt2RY4nm6B/UkW2BlngS3sV5OrzdC30gRdbItd + ITJ0k990B6vQFaxBO9EcrEbTCgpevl4XxH4USCy3lkapthEdy+RoX2aNTt8FiONefmeA8XWU35tiO55g + LB1iO24lp6pevhh1FGHCAJ5gfJyrFdNthmB7Wyh2tIdSmIdyfwXmmgIwIaZoyxUi0oawxSD5jzCAxX5P + pk6C2BdTMk8Ukw+SgG+to9joDGCs9Kfg9cI2sRZTqU7CDIXWpmp7zNWJNbxcsa3RDTsoNrYI85cxWIz8 + HaRI6MoTT2tT2LMdtrM9d2eJ3+E1ZNmgJ12PtgTxUAfFK4VpRZgpCgMWoyTIDFUrlWgI16El3B6N5Ii1 + wVpU+atQ5SuTUOFjiTKi2EeGQm8rFPpaoMDLGEXuS1DhuRRtATIMrlCjy30p+t0WYRvL+myMAx5I8sCD + Mc64FEGhvVKHc6F6nAwhJw6imCK283c2rWB58vMDflboX2aJQWLIl33Nk33NzQQbPSywZ7kaJ0LscHuI + AWeD2B/81TjAa5n3Msd2b3PM+ZhhfYAVeiJ4f9EqVEQokBNqjSQRg5ZbIdJfhhWeZvB3M4Wvmzl83a3g + 5WENL08lPLzU8PCxhcey/38D2N5eDgcBBwUcnZRw9dbAL8gGa1c6MH87Mr5SwEXq0RShRvMqFSoZ77I8 + liDZ1QRx7paIcJch2MUKyxws4Gkwh4+jBQI8ZAj3UyN6uYrXp+J1alDFfNUW74nmSGdUB+qQ72qJVP1i + ZNgtRb6LBUo9FahZxnzmx1zmq0ChpxVy3SylabqLghhTw7S8Z1vGamc0xLoydruiIdkTbTkB6C4Nw0BV + BAZr16C/Jhz9VavQWxGGnrIQdBeHoLMwGO15yyV05gehrzgUwxURGKuOwnh1NEYq1vC1lejMW4H27BVo + zAykOF1OkRqAouQg5CUGIyM2AKnRfkhZ64vEcC/ErnTBmhV2WOWrxgoxZTavc4WXFUK9LbGadRsToERc + gAIpgWoURjigKcEHUzlBOFYWhIu1weR2IXiOfepmVzBuki/caHbFcy1OuNrqjKsdbniqwx1PtHnisWZP + PNzkjfsbPPFAgwf5twceqGN7EwZwqQYPUWs8Th33dLEez7KPXCuxoWbQ4ekCNZ4oUOHJEi0eK9fh/hIV + 7mEMvr1IhpOFMhwnDudbYn8+Yw5xuEyB4zVanGi0xXExTVi1GvvFqF7Ga2Ec7MwxxY70JZjPMMZRapM7 + Km1wb70jzlO7nquxw4lKLfUgNVn6UuauxRjLMMFIFts49dAoc8cwxfhAsSPrwg6N0p/qClSkkqclmaM8 + xQrVPG7II+ejVmug5hRbYQJ3lTugp4rautIRvdz2VtwygAuUaMm1ZP2TgxRSG1Zosb6e+bLVAVs6qKXb + Fx6o3tnhgHnmj93MHbt77DDfb4PdzAW7h7TYNaDC1m4ZtvVY81iFA4zPx2eccHyjC+GMY7OOODLjgP2T + Ntg1qsGOYTV2DWuwZ1SHPcM67CMO8vj4mB5npw24ez3LY4pxYFyPi2PMD3zvsV45rlKLvdglw+vtZni7 + ZSnebV6E95sWSTMwSQZwvxX+NGiNL4aV+COv48M+a7zVaiEZwFdrjPFMPbVhq5ptQo+Hub3YoMA9Vcx5 + ZZbS9M93FzMvUY/fXfg/BnDxfw3gfUW8fvHnX6mYit8BU6UOkgk8Sn7bX2qHXslk/68BPNBgwFizI2Y6 + nTA/7IkDY4zbw0443E/e0aXG4XYVjrZpcLLNDmc6XHCm3Q23tbrhdIsHTja54nijC46ybRwhDjOeH67n + d9lmDzOuH272wAFiV4M7tvG1zbUumK11xky1IzYQYn8zY/7WOldsr2MOqHeXsKvJawHCBG72whb2g838 + vZlWL0y0uGOAfLyr1oA2Xn97jQHtdQ7SNLALRjB1RCP5PX+zg1uBLn5foLuFXLvVG31ihHC7L3o7fNHX + uUxCf5efhN4OvtdFdC6gj5/rZ58d6gzEVG8YNg9Fsn3E4cBkCo5tyMKpmTyc2VCIsxtKcXaqDCfHinF4 + OB/7BnIw15aAoaow1GRQBwkDONkOhRkGFGbaI5fIyHRCUpoDYsnzItfpsDpKi5Vr1FgZqZbM4BjyydQk + O5RQqzSVeaO/fjlGG/wxVe+NKWGe8953SuaQG+4c8MCFflfc12X/mwF8qUZGTSnDA7VyPFinwCPUw4/X + sW01aXG12QbXybdeFGv/Drjj1VFfvDLhh5sTvrjCdvDooBseHHTHfYMuuLvXQeJkF7sdcLnNgEdqbfBw + uQIPM6Y8kmuKJ/MsGIMs8CzjzbViGZ5nbBCm74s8/tUAfl6Yw9y/UWzFrSVuFpkTFrhWYI4nc4zxUM5S + 3Je7lG3aFGf4/hGee0+OGfbzvCcrlbizUUuuZ8DjAw54bmTBAH5p0B6vsI+/0Xtr9O8tA/g94t0+O7xx + awro55oYG3n/j9bI8XiDBk+12uOxFls80KjBxUY1uSHze60Cp8ntxFTXuyutsK2S3LdKhS2Mk1vq9NJI + 3+2N9r9hR5MDeYs9NjI2DhcKnmKG2mRhAFsz1skJ6pQUBcHjFPHgizmayLvFQywDjM+jJUpp2trtYjQS + 49aJPlcc63bC3kY95ootsCFzEeZyFpMnW0hLk9wctsOLw3pcG9DhsW49uawWZ8ibj5fLcaRUjJSWSQ/l + 7Cm0wm7GcPEgz45cC2xjzJzLtsIcudRcsR02FBowkmuLPnK4BmqH3GhLJIn1f6mH/msAqxG0SoFAaqLA + MCusWGn9mwEcRi6yirpxdZQGq6jLVpOfiG1knA5xyWL074IBnJRhj8xcJ+QVuRIukgFcWeONKkKMBBZT + QQuIaaEFCoqcUMBrKygwID/fBtnZGoi1gDPS5EhPkyEzzRL5mXIU8T7KmSuqy+zQUu+KtgY3whXtjEUd + jDkd7P9tjDUtNfaEAa219mitIR8R5m+Nk4S2Gmd01FL/ixjB2NNa4YimIjvqT3KXNOamLA06eA29jKP9 + JWLWRw2GS9QYL2PeqdJjC7XMrkbmCraBw3XMh9Q3ZyvZjlifl8tleLJajhv1CrzaosGb1C+v1lnilRpz + yQR+u0WF33Xp8QHb8afrffD+bBBeHCdPaPXE1gwFppKpranvRqndJnIU2FSqxl5qpiOdDjjJnHaEumd/ + lwq7WsRaowrsolY5xPOd6uJ1sM+foVa6u9kaF9uVeIB66EG2lweGdLg8qMXFAWECU4P0Uz/1yXCpxwIP + tpvgyVYTPN9mgbe7lPioW4M/sL39sY1oUuITxo+3S8zwKvvqq7yWF8jfrxSqcYFacXuKFn2Ma50J1ABZ + jL+FzszjTmgsdUMD67ue21oe1+U5oT7XEbU5BpYx+ThRl+fAvO+MVraP9hJ3dJYsrAfcx3zVX8o2ynKf + JK8ZS7PAWLo5NhWxX9bascydcIj5Z6/4L7yaWqKUuqbACmN5lpggJvOspGlDZxhvZtkvNjNOzbGPba5h + X67XY1uLmC3EDfM9Ptjc7I4x6o2mDDVK1imQuUqO5BANYgM0iFquRVSQHrHC/A23Q3Y0rz2L7aVkGUZr + gjHTtBzbO1yxh+V+iP3xJGPQ6U4dbuuwxVnykTu7PHFP/zLc2e+Pk92eONblgcN87RBzym7moC2Nnpiu + ccVIuRP6ShzRUeggjfytoZaqoc5pY3l0Vnigo4xtutwNXdzvIbrL3KWtmCa6VzJ/xTHbcpkLOorEf11s + 5yzXjgLmwSIv1ok3Ogt8yIeXoTnLG/VpnqhOckJ1ArVRigPaU+zRxbzUn8jyZq7ZmuGMA/ze6fJluKvS + G/fyvJdLGC/JN19pcsE7LP8PGu1+M4Df/80AXonnZ2NxeSIah7tDMVPvh+4iN3QWeWCg3BtjVV6YrnJn + znehzmSOZ9nt6uJ+B+Mpc8t2tu0dveQtvYy1PTps6tBilDG5r9waXeR8Yo3e+hRL1CbJUBlHDRcrR00c + tbD4fydBTBcsQx31dBPbSwf7TQ/bjpjyeaLGBRsavbGpbTk2kFsPkAO1ZVNHMyZXJCxFuTCBE42lKYPb + CjTS0iTtjC2tJQbUs41XZsgZw/nZ/zWAxQjgMivMM27v73HCgR4HHOyx59YWB/r02Md+t4d9dL5DgR1t + Mt6vDDvbFNjD9jHfJtYz1WAr88umQmNsJ/aXmOB0hRke7tDgmT4dbg7Y4rVBA94ZdMBbPOfrzGGvNCjx + Mnnga1XWeJNl8nalgApv1ejwJvPxS3UGPFVti4uMUbdTExxijNxOHj5d4IBhavfebC11uob9VIm+TGEC + q6ilVehijG1kjqqJF+v7WqEsTokyYQCzTVRJBrBeMoDzo+TIDLf4DdkRMmRHypCzRo6cSDlyyVfymT/y + mRcKonUoiub3YmxQGqND6To9SvlaLnNITpg5t5bIXWmB/HArFPMcFTHU5nHqWxADOzTEr4bwAmoTuRWD + egQSbm2TtdRu1JECYpmMFGEC8xyMn1XMv9Xp1qhl7GjIMEULtUwf+cR4oQU2My7sYtkdZtw+XmODEyy3 + U1U2OFqmx2Hy6X15cuzLsZamgD5EXr23QIGtWeaYyViCmewl2CQZwNRT9XyfXOpgM+ubvGIL4/6MMIAr + iVsG8HQ291PMMJuwGDvijXAshRyHuukS8/vTRaZ4kZzk9TYt3ul1ZH274+0R8rBhP7aDZbiXOvFgiY45 + wQyd0YvQFGWERrbX5lQLtGayX+TI0Z0tQ3+uDCMFMkwWWWFDqQxbyuSSCSwGe+6u02F/M/NUuwuOdLnj + YKcz9pLLz5Mj7u7U4ADj1hFyqaOj5OtDbtjT5yLpqa1NjthYZYtRsVZ0OuMr28so4+RYugbj6bYYz3TA + RK4HxnI8MZBDfp3pgsZke9QynlSlOaGcvLYs3Z5bWx6LGTu11G9i6S4dxktssZ55ZFOZRprqeZ7td3ed + DfOcHfY1GrCf8WV3LfMLc+q2SmowxvojfQHY0eqDoWIbtLD9dpIrDNZ6ob/GC92Vbmil3hQGcAs1Zzf1 + zlC5C9Yzbm6r8cVBau+TfWtwZiCKmi0Jz+wtxzt39sBo8wxvdLMTdm93xaF5Dxzf44WT8wx+OzxxfLMr + jqx3x6EJiqIRTwpJL2zvYwBjQY5TCHeV2aKWRKE40RqZUeZIjTRFYoQJEsKXIHbVIsSEGCEm2AhpkUYk + gKZozVditNogTQG9iYF0M8nj+moGuTJWHpPrcKEJxbMJBZsJkxUJXLMC+xgExXQf8222mBeJi8JnG0XT + RibI6SJbJkgtpiigJ3JIJnPV2EISs5NCbzsLZyPJzGy6Ahszmfzy1NjBAt9bbYddFRrM5JthjA1wLHcJ + v2/OICGSphxzTLrzTIiHGaSP1HBbzgbOznKoTMF9NY6yoxyqNGCP9BvO2EQBsyF1YQTwRLwDxpkkR9fa + YjDCBj2r9GhfZUB5oAYpbmaItF+CcCczhDqawd92CXx1RvC3MUKYsxHifYxQELgErWtkGIqWY3ytFcZX + mmIsyBhTK9h5wnkPkVrMrdFh42q1ZAKvX6nF5giWxxpn7FprwHyEHMfjrHGpUIcXO9zwyaQv/rHFHz/s + DsIv+0Lwyx5i1wr8c8oLn7ZRMFQo8Uo2hXeiMH/NcIPB79koSzwdboZn+fs3Yq3xcjIJXAaTHMnypwym + f2CS/gOT9B/Y0D4rtMWnxXp8xHL9vMUF/xr3x39mA/DvjQH4etYfX633wx/YXt5iYL5Jsf5kijmeSLXC + 46nWeDzNGk9kkChSEDzNxHY11xrPFStwlaLgSZL4S2lmOBezGCfZdk4Rd0Sb4hIT3GNpKjzNTniNdf1y + sRLvN6vxWY8Sfx5Q4utJG3w7Y8B3Mzb4Zr0GX0/J8Y9JGf4+Zokvh83xlyFLfN5ngY87TfBJt7lkAH/J + 9v/XrV740zYPfLadwWfGDjdG5XikwxgX641wX5URnm5bhLcnFPhimzO+ObAM3+zzxb/mffHVTh/8fZcv + fj/riteHbHCTSe9alw5PsN1errXC+Upz3EncXWeByz0qXNvkjPeO++H3dy/Hnx8MxD+vLMcPz/vj5xf8 + gBe9ATEd8eM2+OkhLX66pMbP57X4/nYt/nlMib8ekOGvR1T412120hrAP13ywPcXvPDt3d742zEXfLBJ + jRudS0m8jfCIMICZUJ8tt8TLFHRvturwYb89PhlxxPuDOnw8qsOf5xzwzWEP/HTGCz/f4Y2f7/HGT/f6 + 4vv7fPHdJV98+4Afvn3IH/9+OAD/fCII/7oahn8/H4F/vRSJr26G4+ubEfjulWj8+GocfnopDr+8GI8f + n4nDP+5bjU+O+uKlWT0e7zPDpQYjXG5YhCe7l+C1GQ2+OOyNL4/54csjy/CXI374E8vy4y1ueGvKATd5 + bc90iie1LXChZCnOZbHuU41wLtsID9Qsxo1hK3x2xBFfX/DEN4/x/q+64vtr9vjhZTv8/LYB+NgR+CPx + Jwf89KUtfvlSGMB2+OULO/z0iS1+fNcGP7yix/c3NPj2ihr/flSBfz6oxD/vZ7ner8c3l+3x3WUXloE7 + vr/HE/++ndfGmPh0P8lt8RLMJhphOG4xOuMs0UCSUC4SeoQeGREUejGuyI71RF6cD3JjfUgIPJAX4b4w + AjjcBakr7ZAYpkPaagq7CFsUMT6UhetQsUqNilAFatmv21NdMFDsh4ZUA1JCFiPSywhRPksRH2iN1BCl + NAo4f60NCmNILOJJKkgCShMU3LdCSYIViuItSVRkEsoSlNLU0G35ziSPJO35rujMd0NvIUlzgSe6ct3Q + kS1G/7qSnHphhOR0rMYdo1WOFASMqxT1UxViBDCTFJPgdsbsXQ3OmK93ZqJ3wYE2L+xv9yaRc8fmOg/M + 1nljtjEA2/ujsG88FUc35uHUXDFOzOTj4GgadnZHY655FTY1hPHcgRgq9MVgng+xDAMk5b2pbuhmDO1O + tEFfkg4DiVr0kwz1kjwNxFJYraU4DVWiIkSBcpZX2SoNylhmFeuYcBOdUZ/hiaZsH7TmLkdLth8aMwXR + dydhcuBndChhbCxeTXK3muSZpKtylQWqQi1QTRLWtJbJNJbxOtGAAfEkaKIdemJ16I5Ro4vivpsxuT2C + hGO1GdoYG7sjLSUzc5jXOJ5qi7EUCmSStd51VuhkHuyMskBXjBW6Y2WS2dnBuNomzN8kBZpSSdQpbKso + dCuIUor74lQ5Cih6i8V7FIqN+R5oyvdCA0lFXbqT9EBAOetbrC8h1nSuSdBLqE2yQUOKHWq5X0oSKgzg + vDAT7luhet0CeawlkRVPDVZK00Zb83WKhlgFqigeKmKUyFttjYyVQvQtrP0bEyTD2kAZwpdbYLW/OcL9 + LXhshegAYbxYIHa5OeICzJEUZIF0fqcoQoWKtVo03Br920YC3Mtym6CYmqYonmAdjkaTQEVZYTBGhmG2 + 1+FkNetYiY4YC3Sus8T/j7O/DK/rOruGURnE0mYWM5vZlmQxMzPDFjOzZFuWmRljxjiOHXA4cZiZ2qRN + uX1KgYbaccZccto+73eu9zvX+TGuuWmtvdaE+x5jjz3nHEhQYSxJhw2sx2mS7S1xOuyIJSHiPR8UJnA8 + c26iUZoFvCOehIjHb0vTYztJ/bYcF0ynGzAUzfOHW6M/0oYiToaJJAUmk5kjE+UYi6OAjrRCX+R89EZb + YiDOBiMpJIvMP30xVhjgayNxthijuNqQpsBMlgabCWEATzNXzfAcAlt5zh2JKl6DEls5xjZHUJTzHoQB + vJOf20eiezBbNmsAU3wfy7fH8Xsm8OlStbR35FmSvNPVehyhKD/A1w+QRB8qdcSRCgVOkkxfbnPFtU53 + XKWgEj84XmjiMWYVTtfJcKrWHmcopM41yXChUY6rFFc32tS4dW/2rzCBH6X4eozx6rEeA+6IZc6aHXGp + zhLnq+bicq0lbrbIcIdx9ulhZzw37o7nJzzxzKgbHhtwxgPMX5caVTjP7zvfpMFZEuSLzUZ+jwE325xw + u8WE+ysVFMT2uFZkjVvldnjKLMfdFhVe6FDgxXZ73G22xkvEm232+KBbjk/71fjZoF4ygN/vd8czZi0e + oHi7mOOIk+msM7G0Nutvkv2gb601WpdbommJNZoX26NlkRytizVoWcx+tUSLusUUuotVqFzE2LaQwjeE + CJbBLIzfEI7hQAVa/eVo85WhxccezUT3AhUGeNwoj5tcosbYYnLQxRQOS+xRR15Vx1jQwnE8kss4VhlM + 0r8UMw1LsbVpGbY1L8NM4xJMNyzGBEl0N3lPWxrjQoYB3eRDPex7XVlO0mzczgyj9LhPLDdV6IahQhdM + lrhhf8sCyQTe2xQoGQCTJRwXFFnjpUYKJWdMM6ZurvOSIIyAUYrvPorwDgr4ljQ5RY4cZsaJBqKNArYr + k9yS/b07ldeRqEEDx3RtqD0qxfL2jGXFy2xQvkKO2jV6NIa5oDnUAw2rnVG3zIAq1kVNoBzV/g6o8rNH + mY8Nir3tkE9umudrhVyvOcgnFy33noN2jvXhJQoMBFhi1G8u9i5hf4t0I4fzx2PRXrgd6oL7VxtxYRlz + I9vowEKVZADv4POZ5cwbrOeBBTyeGF6oxAjbZ8zfHmOeNtjkYYvdASqcWGjA2UVOOLvAhJNB5NkBSuzl + dW0ntvjbYULM5F7NmBiqQuEqBVKXyBDFOLQu2BErgmQI8bGDv6ct/Lwc4Osjg7e3HN4+Snj5aeEb5AS/ + YBf4CAPYxwBXd2EAO8LZRQY3NwU83NXw9tLAL1CPRYtNWL/CDYlrXJC7lrGWubl2nQ5mluUr1MgImt2D + N8pPhrV+Ciz1lCPYzRF+LvYIcLVHML9/FftexCIV87QGeWI7h1gvtCYEwBzmjqqlzPWBKuR626MwQI6K + RXpULzOiYYUL84kbmta5o2Ed4/5aV9SFuqE+mm0W54PGJD+0pAahNS2YuToE7TmL0FWyEn01oRg2R2C4 + KQpDjesxQgybwzFQuw69FaslM7i9aImEruLl6C1fjaHqMIzURmC8PgajtTyuaj36ykLRU7wO7YWr0ZS7 + CnXZq1CdtRZl6auZi5YjL34Z8hKWIzduCbKig5G83gfxK10QvcyESI7JCCJqiQZxHFfJKwxIJb/JWmlg + /nElP/JBX5I/ducG4HxZCB6oWoAnzIvwQvMCvNwUgJepF15ocMXdJoJ68slmTzze4IU7dZ54qFaYvt4S + Hqr1xu0qN8YMI24Uilk3Gjycr8WdPA2eJJ6l1nkmT4snOWYeF68V6fFEqQEPk7s8UKzG1WIVzhUpcLpA + jqPC/M2yxv5sGxwudMTRchWOVWlwrFJNTcd4TI23j6/vY8zek22LPelW2J9hg5M5MlwhJ7rBsXo/cbHS + hFNleuxnnN+QbInB+LnoT7JGbwpjWIYKfdlGxgrGhVyx8ooR1RT9ldSgxeJPXox3hYkOKElhHk5XoSpL + iapM9vEsFepydbMGcJk7OkpdIfYHbi8yobWQPI7a1JzlIM0CbmXs7OG9jVUZsLGBMYR1uLnRmbFKLAft + hO1iSehmA7a3itkkWmzrVGMLNdJ0myO1ux02tdpja5ccuwd0ODTuikNTbgTLSVccmHDBnhEez5i9fYD5 + tt+AXQPU3n1G7KHG2U8cHjTh9Jgbzo174OKoCy4NmXBlyIDrA1rc7lJIs4DFH4LearXD+01W+KBBrLpk + gU+JX7faSH/E/V2v/J4BrMTP+Pl3hQFca4VnK63xTI0jnmxQ4/FGPW7Xa3GtUomLJY44X+CIi5Lpq8Ll + 3FmIx8IAPlugw+lCA44XG3GwyEnapmk6z4BxYqRALFHrimHWaXch43Tx7NLa7RUsq8j3ap3QX++M8WYX + 7Ojzwf5BHxzod8XBbgP2UY8caFbgSIsGJ9uccb7Dm/DFmVZfaYbTcbMHjgkDuM4Fh2pdcLCGxxEHatxw + gK8fNPN8Zi/srPfEVnLn6Wo3bKhyxUS5EyaJaeaErTWe2E7sYPzfXkWw3F3ng931vtht9sV2cuyZWk9s + 4jkmzd4Y4Xd2C7O3woDGcj2aKvRoqXZGK7+/jf1TAsdRa40HmgV4vmZhEBEt9YxL9d5o53UJM7idPL69 + eRYd5PMdLf5ob/FDZyufE51t/uji8562APS1BmOkfTGmuldga18Y9g5H49hkCu7bmIXzG/NwcWMJLk4W + 4+xoEU4O5uNofw52tSdjtGYt6jL9kButYyzRIzfZhJwUZ2SmuSItwwMJ6e6ISnDB2igjVoTpsGSNAguE + 8bbcAWsZ++PjnVGQ7YuG0hD01S/DoHkxRutDeF4fTFW7YpvZBcdEu3T74GqXJ661CANYx7FKflTliAcq + BGR4sFKOh6tml4N+skGPZzleXmil7uwQyw564/X+ALwyFIi7A37kT1641e2Gmz0euNbjLhnAgpM90O6G + Wy2ueIR95uFyNW7nOuBWpg3uZNvh8RxbPJ0nZgI7SiuZiaWeX2EpQZi/BQrpT+5ilrDACwX2khH8LI97 + LGM+bmXMw9XMeTifY8WYY42DGdbYLWIQ49XxYjnOkx/eIid8rMcVzw2445VBN7zW74I3ep3wTo8T3u80 + Scs/f9ghDGAnlny91YCXG9W4W6/E45WOeKjUHo9UcYw2GKTtlx5p0OIWx9qVWp6/Wi4tw3msWoFdpXbY + XGSPTeSp0+VabGas2cI+tqVmFlvZ/wRmqk2YLNahL0clLc1Yk2CHavLu8mRqnCQ1ysiXS8jHy+KptxLI + t1Jt0MLY2lPsSA4klpBU4Hi1Fhfa3HClxxuXOj1xrF6H3WKLtkwLbKX2P1FijUea5Xi5V4/XejR4oUuD + O23aewawatYAZuw+wLrdyzi5O0eOnbkybM9xwJZsB/J5R0xnkMuT00/nOWEky4j2ZDXq43ltcQqkh9sj + bp0dYqihotZrEMY+uGKNBotXqrBohTCB5VhK/rFslXzWAF6jxMp1KgnLqCuXr5NjZZhYClqL6ARh/s4a + wAmpLkjPdkd2npdkAosloEvKfVFW4YfiMh8UlnhJKCoRy0J7SyZwIbljQaEr8nidGeR7kgGcQu5DvZKe + 7IAc6pP8TDWKc7UoKzCgvpLcodoTZo7xBjHrV5RV7qgnt6xhHqwrN6FeoMxZQkOFKxor3NBYKWYJexM+ + aKryQj3zTk2eCeXpWpQkKFDJ+jHzcUu2TlpqsydPjQHG2VG29Qbmvm01ToxRzjhQ74IjNUacrNTjHMfD + lTI5bpbJ8FilDHfZn16vV+GtOsWsAVxlNzsL2KzAh606fNzjjM8mA/HRhiV4cXgJdYo3phIcqNNs0SVW + 00qQYSDDUdpbf1ctc1WrCcc7DDjSqcKhNjn2Nztgf5sShzo0ONVtxHmOgdM891nqpIu1drhGrXSznWO0 + l3mJuexWvw43usVS0HLCEVfb+RlqlQeYn+7UzsFz1fPwVr0tPjQ74hOzA35W54jPqxzwabEN3sydj1c4 + Dl8t1OB5cvQ7uQZcyNBjglq6JVwxu70StWtVihFlaQaUZjqjNNsZ5bnuqMhxQ1W2B3O9O8ozXPi+E8pS + naTH1ewf9bmeaGAfacp3R0s+834+81K+QarzoUy5ZACPpNqx7yqxj2PuoNkdB5gDdte5Scs/T5LfjObJ + MJrriDH2+Yls5nmOg00cDzPFSmwrpWYlz5H28GZb7Ta7YW+LF/Yytm9n/J+s8UJ3gQvqUvTIj1AiY50a + Sez7CSs0SF5jREa4M3KjXFCa6I7mfD9yzBBM1i/BluaFjO/ubAMdDlOHnqD+PNvKsdxuxJUOcqUuPzzQ + F4TrvYE43+WNM51eONnhg2PtftjX6MP44Y1J9sPhMg/0l7ozL8/efx11fbVYKjvPFU0cEwKtYhawMH+J + tmIv8qRZtJfMGr+txeTR+S7kSE4wZ4ptN6h9xG9fBb7/NoGbsgJQn+aHGvLqqgRPVMeTaye4opljtl2s + +BarxWisDls5fg/leOJMkS8uc1zeX+SKmwVs80I93mQO/pD1/ynj/6fU8Z/WGPBxgxs+6grCO6Or8MrG + KNwaWY+j7SuxsWYBOgq8JQO4k+fqL/EhB/HEaLkrNpAHbOL4EX/gm240YaaV3K3DmVzNhM0denI0NSap + xfsq7NFV6ogOjoFWsQoM+WVNkgKl4je+9Q4oZ/+rjtMQalTGklPGOjAGkycKvZitwSC55EilF7miL8Zq + Asj7vdFVaCKPFEsG26MkxhLFMfMZB61QmcrjyKelvX8JM3lTZRbjTKr4M49Y1t+GWtQGHVl21Ll2GKeO + 39UsTF/yx043aQnwI11OONRjxIFOLfa1K7GrlXG4iXG4wQHbGhXY2aTBtgYN84YSG4vtMJU1F1uy5uBA + /nycKWUebWKuImd9rUePD5jbfj7kgU97XfA+uexbjCWvVTrgjXIHvF3mgHeY09+tUOC9So1kAL/JmPRs + hREPMkZdJGc+ksc4RR44nmtCP/tTB+NpaxohtlFKU88awpniNQ3qEuQoj3ZAYQT5eZSc9aFj7jKhgnG8 + lH2jIEaN7HAl0lbbI3m1nYTUNY5IIdIE1sqQvlaBDPIVgcxwDbKZR3LDDchbr0OBMIPD9chYKUfaMlsJ + qUttkLnKHnlrZCjm50sYQ0qjiEgN21UrTeyYNYK1qGDfrOQ1VcfrURHPa+NzMVO5LI7tE8/P8jUx4UdC + Il8jSkX+TZajjHm5kvqkNmk+WlOt0J9lgyly6e2MCwdYb0erTDhGLnm8jNy+SMe2oA7PYT7NVuAwefVh + 1uX+AjV2MK5sJtfZmG2JzTmW2FZogyP1GpxmXD7RwjYnV58pY+xh/B8nbxin9posIDKVmGIMm46bj11x + c3EicT4up5DvpM/Ds/m2bE/yf+byD9tc8FG3Fz7q88c7/cF4oScI99e54zDj4AT7Z1u4BRqECRw9D3Xx + Vmig3mpOc2D72aEj3Q497JeDOfbSagjT5ANbeA3bGR93VGqlWbUHGtlPW8jJW92wn7xvL695D2PXXuaU + g73sx/18vccN29tdsMFswCTH9zDvoSvNFu2J1uhOpu5iPu5NUaM/xYCBTFfGXD/G3iBpQlNXtg/qk104 + rpxRIX63TSXSXFCeJibKOqE+w4DWLD16cvUYowbZUKLndaqxtVSNnZU67KnSUzPwOkVerXOSZi6LmcD7 + yG+PtPvjZN9S7Gj0Rz/zvpnX0si+28V4IlZA6CpnfGQcbMqj5iR3aGc87y10xwQ5x9aKQBxsWs7YG4rT + nWG4MhyHp3cX4/3z7bAYG9JjasyImSkn7JqhaNnuhcPbvXF4qxcOTXvi4JQ3RaEfDowEYO+AvySQpts9 + MFTvhJYiDSoz2GFJ9oqSNBS2GuTEM4FE2SExdD7iVlsgfoUFB8McDiRbaXPxYRKQCfFDGIXJRJULRkr1 + GChSklw4shLtMJRrg9F8a2wkAd1B4rC3UYtdDTqKIAZmQUIrnTBT7oaNJa6Yoqgb5SAfyVZjME2G4VQZ + NrJStuSYGFSM2EwCs4VkaWuWGtvZiXYXa3GQx+8u1WKjmPXLDjiSPR9T/N4pEveNTKLbC7XYT6J0nMLi + aDmDSIkdjpbYsnSY/cGgkp2lVMwQMknLf4qNoEcTSCrjnCUDeCzCGaPESLgL+tc5o2O1M6oWa5AhfkBy + s8R6D2usdRNLQc/FEqMFlpksEOZpgeQgC5QsnY/2cEcMRsgxGUmEOmBshQ0mVzlKM3+n1+kwE2aQMB3G + JBHqhE1r3bFptQs2r9Jhy0p7HIp0wP0kbC+3eOLzsUD8fVsIvtsVjB93LcA/dyzCj5tD8D8UEJ9Vq/BR + kRxvceC8Fm+DV2Js8WKEDe6G2+CZtZZ4dp01nl9vi1eZVN5J0eCTLAN+wXv+da4TfptN5BjxG3bkX+Xr + 8Dnr7FcMvn9o88Afe70o7j3xRZcbPueA/rDOiNdKtHguU4ZH4m1xO94et+Id8WCiDA8zST2WTrFPkvd0 + lpzBQImni1R4nEHj/jRHnI22xJF1FtjHPnR0zXxcinLATQqKOyk8X7YRr5Pg/qzFgN/0avCnIS2+3OCE + 76ad8cNmI76f1uHrjRp8tUGOv4474E/DNvjDoC1+32+PL3ps8ctOO/yyR4HfjprwxZgLPh024j2e48UO + BzxSTyFWOgeXiy1wjXiKBPGDETV+t8UTX+4OxJc7A/D37YH42/YA/GmrPz4dc8YbXTq80qXH6z0mvMQk + /lSLHg9RdF0j8b1cZYvrzY54fIRJbL8PPj0bhF9eD8bvH/LH357wxT/u+uJfrwQAL3rj+8f0+PEhDf55 + Uw3cr8GPl7T45rQKfzumxF+PqyUD+B8XPfHtZS98e9EP357zx58PeeBnUyq2+Xw8VTEHjxbMwWMFlnim + 2Bav16rxAQPdL/vdea9sm0lP/M9mT3yz2xffHw/Av84G4J8XZw3g76/64R/3B+AfDwTiu9sh+PaRhfjm + zhJ8/dRyfP3Canzzeii+fiMMfxMG8HMr8OUzy/HVkyvxzePEoyvxtweW47MjFNKbdHiSdXyrcQ6F2xw8 + 1W2JV8ft8clOPf5y2hd/O8v7PuOLv58NxFf3heCvR0Lw290B+JTx5p0xVzxP0v5QhQ0uZs7B6SQLnKMI + vFkxF3d7HfDzA274y7UAXlcAvnuO93/XBd+9ZsKP7zkDn7kBv3bDv37njB//YMI/hQn8JxOf8/HnBvzw + kR4/vKHD9y+q8e1Tcnz9sCP+fpO4X4avWNdfX9Pj22vO+P6yG74/zzo+E4Bf7/bDC/3OOE9ysjnRAv2x + c9EaZY9qjlGxBHFemBtyIv0Y90KQn7IExWnLkZewiDHPH1nrvJETSvG31hOpK01IEstDix9JV2mRv1KN + ouUKVCyXoW6tUpr92pvhhaGiIDRRHKSvmIv1/hYI95uH6AUOSFiqQMoqFbJC9cgVy4vEGlEUp0dRjJLk + xFEygfOj7VHAMVIY5YiSWCVqGJ96ywLRXeSHZjELOMsDnbkko3m+aJX2A3YlSfQkQVyATc1LsaExWDKA + B0sMGGZyGmG8HCtirCw1YkuVK3Ywbu+guNxF7GsQP075YUbsacYkNEZiPlYZhK2dwgBOxrFN+Tg9U4Tj + kznY35+Eba3h2NywGttZjlcuRW9+IBN2AHqyg5lgA9GRKAxgN3TEmdAdb0AfyU4XCVEbhXVHhBGNoQaU + LZWhaIkjipax7lmH5aFGVFKY1MR5kJiK2b+BvMcFJMkhqOPz2iQvVMU6SXtwFJJkFZBsFRNlJHGlK21R + ssxaQiljbBXfb4jQoDVaz/bVoYXf3RKhRlOYEk1r7FG3wgo1yyxRz8+2rLVD53oFekjMeikYeqJVaF8v + R0uoLRrXWktlW6Qj2qNkPJ8MzWyPpjg5GhJUJAgk66kkaSSipSSeRSlsv2Ql+4wShXyvhoKxnoKlIS8A + 5hx/1LOdakgk6tLcJTSkeaAxnW2X4Y3mTB9pOW8zSYeYjS72AM7idYpSzBAuiyaBjCYZjOZ3MK/khzmg + aL0MJRQNJSS5RSSY2cwjyazL6KVyrA2xweogW6wiVgfbEbPlmmAbhC+wRyTLuBBrJC60RfpSEteVFCIU + i5XhOphJcBvDWGckvz3rVRglcZ2M1WCM1zAcwdxOYt3PehhNVJNAOlOgMk+yDoZTKboYz6coPjcm6rA5 + gXmMx+2MISHitR9g/UogCd9H8rszQYttSQRF9tZM8hYKvmkSq+FYscS0tfTjwXC82HNkFkOx9hiIsuF7 + VuiNspbQF2uLwUTm2UQHth1fZ57pi7Dk9VkylzvwWuTYSF4zna7CZrbNlkQBBbaK5Z/ZTtIS0BQLm9bb + ELaSAbyLx+zPJGFmDjteqCLkOFogDGB7HGN5jM9PUIyfIiE9Ua7GgSJH7Cbv2FNgg/3F9jgsDOBarWQA + X+/0+LcBfLFJh/NmNc6JHzbq5bjQLGbmKnC+XoZLZkfcaBEG8Oz+v2IZ6Ee7DbhDAfZotx63KMCu1tvi + XNU8CVcb7HC7S43HB53w9IgLnpvwxF3iqWEXPNxnwjWK+AsUnWcb1DjbZMCZBiO/yxmXW5xxk5zvoVZX + XCa5vy9zrrRX+7ViK9zhdTzNa3q+g2h3wLNNlnjOPBfP183FK43z8EGXIz4dEPtrkdwPeeJFCt2HKtTS + Po6nsig0yAc2Mm4NkjO2riOpXzYf5iXWaFpEcr+QY2qRFs1EwxItahdx7Cxin16oQuUCCthgJaqD5DAH + URwvoKgLYqzwV6Ldh+POww4tbjboC1RidKEaUzxuw2ItJharMLREge6VKrSs5rHreCz711C2NyYZKzdW + L8TG2sWYbliCmaZl2NSwGBvNi8lZGadyXRibdWgVs37Zh7vFsvl5bujOcUF3tgt6ctwwUOBBPuuGvnwn + 9OcYsKM+QDKA9zUHSz/0T5CzjDK2jjKmTggDuN5LwqZaL4yTd3aky9CYaMuYZolK9svaRHvGNiVaMjTo + Iufqy6aYZX/v5bhpj1cxZjmiLpT5aJ0DKnk/VWtVqFlrQEOoM+OXJ1rCGC/IQeuXGVC7QCnVVb2/A+p8 + 7FFBLlriZoUC8tI8j3nIdbfgYwvU+MxBH+t/I+toerE9toRY4dgKBW5Fu+NuciCejfXFI8x711ebcH6p + DsfZHvtDlNjN9tm5nONyuR6Ti9UYYb0Ps51GiQm2zZS/DJMetph2Z7/34TgJ1ONMsAlnQoQBrMfRAHJv + fzl2+jlim/gsr7eVebJ8tQrZjE9Ji2RYv8ARK4NlWBTgCD9ve3iznb28ZPAkPLzk8PBWwOPfBrAbfANM + 8PTWw8VNCZOzA5xdHOHuroCvtxaBfnoEBxqwdJEJ65e5IGGlM7LXOEn78deEmtBADl+51oTMRQrE8/si + /BRY66/GMh81QjwV8Hd3RIC7AwI9HbBcvM++lbJaj+IINzQmB6A9NRiNkZ7M7xSAK51QtcIkmbxN673Q + xLZpjfBCZ4wfepJCMJi+GAMZi8kBFqKLOawrh2XuInTlLUZ3/hL0CCO3TJi/azFoDsdocwRGWiMljAm0 + RGKoIQw9VavQUb4MnffQVbEc3dWrMFAXKh031hiDsYZYjDfGYdgcjaHaSAxUR6CnPAIdpRFoLopAbfY6 + lKasQGHCchQnrkBx0jIUkdPkxwYjL9IfORE+5DbuyAx1Q6bgPyzzwt1RGO7GXOuOikgP1EZ7oTWGOi3d + C0cKA3CBY+t2XQiebgzBixSxLzV44EUK2+ebGIea3PBEowceM7vj0Vp33K72wK0qD9yu8pwFOcmNYiOu + 56txnRryZo4Gt1k+kq3EY3z8uECuFo/lafFEkQGPlzD+lRlxm2PtgVIdeTxjWoEcx6j59lHz7c+ywqEC + O2o6RxwuleNQqYzx2B77GZPFEqL7GbP387MHM21wNNMOZ3LluL9czJZzxwN1HrhEDXm6zIADjPMbU60x + ED8PvQnW6OJY7Wa+6BHxIdOJXMQJZj6uTNejnDm/KIk5nrqnMEmG4mQFypj7y9MU1NBKaZm92hzyjiJn + tFHbthVz/BZRY+czr1K7NkoGsBD99mjKdpB+EByqoHY3UwM2uDBGsTSbGLdMmGmkRmykVmym/m3RYHOr + AlONjhius8JovTUmGu2wsU2GrT1a7Blywj5y7r3UQHtHXbCLeWEn88P2QRO29RmwrZdat9eIbcwpYlnC + PT1O5HOuODbijVOj3jg77Iazg844N2jERcZ5MbPq0U4F8wG1ZbsjPmizw4eNlrMGcLUFftVkjd+02+O3 + vdRe/Ur8qlcYwAq8w2t6udYGz1VRf9bI8KRZgztm5rBqHbWYCucKqQdzHXE+hzlQMn+ZQ4iLrBthAJ8v + 0OFMkRFnyt1wuMQFO/IMmKL2H8pUYTifMbfYBcOlLugqMKCTfam73JljxRVd1YzjtU7oq6eOF8vPdnti + d58H9vU5Y2+XFntbFIzdzOttWpzqcsGFXl9c6AnAmQ5/nGzxxRGzMH/dcUTsy1jnggO1rhL2E/vqPXDA + 7M3SC7vqPbGt1gOba4QB7IIJ9s+pMrZVtRt2MC/srPHATvJqwa93sv/vNftif4Mf9pBnb6v1xAw/s5HH + T/Ccw/Xu6K5i/yjTobFMKxnAbTUu6KgT+wF7oF2aAewhzQZuEeYvzzm7TCxR54lmMUuQ1yTQ1uiNtqb/ + oKWZZbMv2nlvAh1twgz2RU+7H/raAjDUHoLxrkXY3LsKO4fDcHQyAac3puP8dA6ubi7G1Y3FuDRZjHPD + xbhvqAAHujOwoSGC/TgEheT2OeR12QlGZCU7IyPNDakZnkig7olK9sC6GBcsD9NhAXml/2I7+DLvLFul + QEyMM/IyyIVLFqGnjjGwfhmG6hZiqNoX42zDLcKEavfGuU5vXOnwwLUWsQS0HjdqVbhRLcONSvKkCjlu + VirwUJXYwkKLpxpNeK7ZGc+T07zU7omXO73wcq8Pnu/zxZPsA7fbXXC9zQlXWV5qd5WWgBYrstzg5x9s + dqW2d8LDlVrcypfhVradNBP4UcaMJ3Lt8Qz76fN5jniR5Sv58llwvL5YoMQLLJ9jLHqugGWhMIId+Hk7 + 3Mm0xIMZ83BFGMDZ1jieaYUDaZbYk2bFeGVD/ijD2UoVHmz7yQD2wCtD7nhtwAVvsK++I2ZKdTnhg06C + 1/pRhzM+JN5u1UsG8POSAezAmGiHR1gfTzVo8WyrEU/yfWGmPtCgxKVaBc7UKHC8SoFdJXbYlGuDDby+ + DaUaTFcwprDPzVQ7EWKZZhdqQmdsrjBivGjWAG5OsidfcUQNY2AltUxFopihpEbZvw1ga+qy+WjJId8u + p56udpSWnH6QceuRNsb+Hm/cIvc9X6/F4XJ77Mi2wE5pG635uNPogFe61XiNEFxTLA1/nTFCGMDSEtBF + 5N+s5z05SuzKUWNHrhLbGDNnxNKV2XJszlJhU5YOm/Kc0Z9OLkSdnLfWEpnrbJASZoe4UAdEhykQuV6L + 0HADVq7VYjG5x6IVSpbC/FVJfVFg+WolVpBnicezS0Q7YEWoEmsidIiKd0JskoARcdTxadTdmbleyMrz + RG6hJwqL7+0DXEaI8r8gvVfsgYIiV2kWcHr6rAE8CzkyqDFymSfyM5lLcqgf8/SoLnZFbakbqsupg4mG + SjfUMl9WFTPnFGhRzVwogXxToIYxsJ7vN1SKP4VQQ9b4orHKG3XMOdV5RpSn61Acr2BbkVszXzWkUYNn + UNMxvw7m69jWekwz9+1gHxDLPx8gjlQZcLJCg7NlSlwp5zgrd8RjHHd3a+V43azE29Qt79TK8HaNg1S+ + x772YZseH/e44JNxf7w7sQBP9oTgWIkzBiOtyVfnwhxqhaZoW/IhB4wVybC9lhqw1YBjnToc7VRyvNvj + aAf1VTd1Uy/7Qa+ecdmACy1KXDQ74GKtLa7U2eJ6kyNudinxYB/7GXG9nbqp2XYWTVa4XD+XccJCWjnv + uXILvFlpiXerrPFujQ0+qLbFp2U2+KjACm9kCwPYDi8W6vB0oQtuZrngeAq5eLgcjeFK1EVpURXHNkkk + /0sxoCjNhMJ0E4oz3VAmjN9Md5SlC7iiJNUZxewb4nFVlgfqcrxQn+PJPM84zf7ZlqtHOzlNZ7YC/WmO + GEq1x1i6AzYXqHGQsf8QudN+ljtZ95srqJ1LVJIJvIExZUOeDNN5cmwpECtecixw7O6h5txXrce+GgPz + krNkIB9krD/Y7Ie9zYHY2hiAjXUB6Cv2RG0qrz9eQ46nIrQQ25FVJPEaU5kvcv3QW+qP0eogco5F2NkW + gn2dbjjQrsFhcoxjzXKcbWZebmfs7XLHrS5f3O4LwAM9vrjW643LfV64yBh7ustP+v7t1Z6YqnDHWIWX + ZFIOsuzkNTSJGdQ5TtKS2bXUWI0cN61lPpIB3FYyOyO4+R5aCt3QXMDPsN7qso2oTdOjjuO7gdyrJU/M + qGYeK/CVDODGLD/ehy+qE31RleCNmgRP1MeTj8c7oz1Oj54YDcZi1diWbMThbFecLfTAlWJ33Ch0wq1C + vbTyzOvMqdIS0DVO+LiKfZh1+lGDKz7qDsa7Y6vxysZo3BoWBvAqSUt25AsD2BvthT7oLvJGL8d2X5GJ + 0KO/RMN71mKsljyOnG0z88uWTiOmWX+TzSqMUfP3VpBTlsvQxXbsLjGQ9/EeU1XSTNXCUDuURXGcxnOc + s83E/rXCBK6Kl6Oe3LIl24BBxpmhCm8MlHqhq8hdMoZaOc7rOKbLE+xQSI0pUBJvg0qxFy65UkuxE5p4 + jXX55K6MmWWp4g89DtJywk0ZjuyXDhjIdWAs4LisF0s6O+FgBzkh+dFR5qDD3UYc7NRgf7sCu8kzdzQ7 + Ygv557YmJbY0qLClTomNjBHj+VaYypiDrVlzcLhgPi6UM382aZiPdXirW/xp3A1fjHnjF4Pu0soWbzGW + vFJlj1dYJ68zP7zBPPZ2pRzvVaolA/jtGhNeqDTiIca+y6zfo+TO2zmWxsmr+zI5pjK0aE4T0KBF6OcM + vpZpkF6rY7wTs6oLIxxQJCZHxDN+MoZXpIg/PhipfbTIClchbY0Dklbb34Pjv5G8RkYokLpOJSEtTI20 + UC01kp7HCSNYh7wwPdJXypGyzA4Ji6wRt8ASqSvspEkYBfx8IcdcibSPsIbtqpW2diuP0c4iVocK9tFq + cqdyXptYorooSoWiGDWKBXh9JewDAmUJjENESaJ6dgsG6hLx56vqBLF/rhV6xUzeArZdmQYHqsUWOE44 + Ji3jb8ShYmH2qrCPvFos/XyY/f4w6/NgIbkw+cv2PLGVgg1hiR2F1jjdTH7e607u5YJDZi02l9hjqoh9 + o1jB/kF9xOM2MB9vSuFxCVbYR5xMtMTVVEs8kmGF5/Nt8SZzxnv1GnxIPvZJlyc+7vXDe/1BeLE7APcz + zxwmt9gQb4WeyDloi5mP5njmiEQbNDIu/mQAt6fZoivdBgPZswaw+OPa1jI1tnN8ba/UScsr76VOOkDu + dqCVMUvsW97OHEb+s6fdgL2dJuzpdsLubmdsaTORs+owVsOcx/N0ZtihJckarRwDHczFnSlqdDPG92a6 + YijXF6NFwRgievIDOO5cyX2cqfdcUUZ+WyFiPFHLWNbIvtbG8dSbyzxKDbKxVGxbyzhNfSOWe97LeHKQ + vPInHKamEyvbnOz2p8ZahLNDK7CryR+D1DmNyY7S70JiPHeVeqC33AvdZZ6MD9SO+c7ozHdBf4E7pop9 + qClCcKRlFeNuOM50rce14QQ8u7sUH57vhEUPhdpAjwrjA1psGjdixyaKwc2e2Efs3eiJPZNe2DfhiwMT + Qdg3EoCdAz6YZtAfMItlAlSoosgq54CqyDDxsTMqeKNFyWpkRdsjNWwe0tbOQWGMJYOyHO0kLMPl7hit + 8MAIA/9QmSsGS00YIIEcYKcbJIEbJoEeybXFZIENtlXKmOTYiDVqaQmLDfy+KQ7sDYXOmOCNCwyxMgcy + 5OhJtEN/gi3Gk2WYEss+JqkwTSK6i8RljwCT54ESLY5UmrCvlB2V3zNJ0j2ZY4VNFP2b8h0ww0Gxq1CN + wxRnJyoNOFoix1GSz2Mlc/nYBkfKFDhSrsO+IgM2MZgMkdwOcFAOxBkxFOeEYQqVsShnjEfw2iLcMRLu + hu7VTqhbqkG+vz2SvTjovawQKUxgVwuscbJAmJsF4n1nZ//WrLJGT4Qjz6HAdJwGmyKVmFzjiA1rGDDX + cSCt1WFzKBNFOIX+ehM2hfN7VrlieIkOwwtIlBbOx55wEp9sJV5sdsPPR/3wt+3B+Ga7P77bFoAftgTj + 20l//IEd/PNyCm+Kkfcy7PF2kh1ei7HDSxGWeCHcCndD5+M54oX11ng1lqSNdflJhg6/yDHg17lG/D7L + gN9n6/G7bC1+RaLySwrwX5br8UWtAb9qdsJnzUyKHNDvUmy9xkBwN9sRjyfb4cEYa1yLtMHVKDtcjXPA + TQanh9PkeIzt92SWEk/liSXc1Hi0QIOr6TKcjrHB3tUW2LrYAntXzMXp9Q64Eq/ErSQtns52xmsU8Z9T + 5Px+0IA/TxjxzYwLfthKbHPCj9uM+G6rDv/YrMLfNzjgf8Zt8McRG/xhyA6/HbDHr7od8KseBb4Y1OPn + /Xq8T2HxZqcMT9fNx40SC1zIs8ClQgvp8dNN8/HhiA6/m/HGX1mXf9vGet0aIOF3m7zxwYAer3bwXnv0 + eLvfJAmyl0lun2oz4FaDHFeqbCiubPBAhyPubqYoO+yDj8/64vNr3vjtg+7462Nu+O5ZL/xT7AN8R4cf + H1LjX8IAfkCDf14Rs4DV+PKUGn8/qcWXp53w9Tl3fHPWA/8444t/nPTFn/e647MJFV5ttsQzFXNxJ38O + 7uTNx1NF1tLeCR9TEP5m2At/nPTB37YE4JvdAfjX4RD862QQcD5IMoB/vOKPb6/64ev7/fGPm0H44ZFF + +P6JJfjuqZX49vnV+Pa1MHz3TiT+8U4Evnx1Hf7+zDL8hZ/5041A/PGyP357xge/PO6Fd7eRIPfb4MHG + ObhRZ0ExPR+vTzni493sK0eM+Os5D/z9gie+PO+Kry/64PtLQfju7GJ8dWIx/rg/BL/cEYB3RtzwDAnQ + jSIbnE2dg7MZFri/bA6e6rLHx3tc8acrgfj6Ufbl53gvd13x3atO+P7d/8MA/p0JP/7RMGsA/17MABYG + sAE/vqHBjy8qeV+O+OYRR/z9AXt8eV2Gb66p8c1l1vUlE74/74wfzrrjh/v88fvd/nh92A3XKFa3plig + N2oOmiNsURnuiBIKxeIofxQnCON3BUqy16A0Zy3yk5YhMzwAWWt9kBcq4InM1c5IW6GXlofMXalC8Qo5 + KpY7omG1HF3RjIsUBxMF/pgsDUJHhjPyVlsiJkgYwHMQGSyW25UhZZUaGYwDswawE79X7AesRkGMXDKB + 8yPtUSD9g82BglsFM88zVLUAvcX+aM4gSSbaszzRmUtSmuGBpjQXdOZ4Y6p2GXZ2rWPiW8p47Ip+Jv1B + xuQhjsORfA1jLmNOGUU/Bea2Mhdsp4DcU+uDnTV+fN0LEyTiI8XeGCkPxJb2MOwbTsGxTQU4NVOMY5O5 + 2NObiC3NYdjcsAa7OyIxWb0cvflB6M4ORFdWCJNqINoSvNAay+vjfXXHGdBHwtO1XoWWtXK0hOnQQCJV + ukyGwsX2KF6uQNlqCi6xX2OMK+rjKBpS/dGSGcwEuwAt6cEwJ5PsJ3igOtqIsnAK5lUOKBAz5FbYonS1 + KG14HmsULROwRBEfV651RD2/0xyhRuN6it8wBWpJ9Gr4XvniOahgjK4TBvA6e3SsJzGIVKODMbqNfaFp + rR3b0hrmVZZ8bD1rAEfK0RqtoJClSGTcamDcqkvRoZoiqyLNQIKgQwnJZ1GqBoXMmSWpBgoeT5gL/Chq + AolgtBYEoIXEoqOI/aIwiCR+AXqKQtimC9EnfhDj+2I575p4sc/xvVnAREGYDMW8NkEiiyIUyF4n9i6x + Q06oPfLXOyKPyOW9ZoQZkLBSh/WL5VgZZIMVATZYGWiD1cH2EtYIA5ivh4fYISrYCokh1khfZIvcZWI2 + NfN/GO9JmL8kuM2hrI9QJfpIlEcpTCajlZhgORrpgJFoB4zGybGJ4mx3qTd2sd/M5DlhA3PJZLoOm1gX + G5M02EziujWGhIhibA+vfX8UhQSxj/1hj5gZHK/D1kQdtqSQPKXrmYeZi3mO0UR+b5SthEEKoMEEGUtH + 9EbbkjjaoDvCGt18T3oea4e+eHv0xtlT9Fmjl+hh7uuLtMIwXxMcYmM6ryVD7B+s5vcJKP9jAMfKMBNl + jw1h5A7h1rMGcJr4x6QKx4o0OE7ie7xYiaOFDpIBfDTPDkfyHSUT+JhY9rlUSTJtjx3kHjvyrLCn0BaH + yuSSASyWgL7S5oqrFFSSAcxcerGRrzdqcJHi6EqrFpcYG4UBfLHOETf4eHYGsOaeAWzCnR4nPNSpw40W + OS7WWONMxTycr7XG/a0yPNynxxPDLnh6zE0ygJ8Zc8edAZM0+/dysxLnKNDua9DidKMJpxqccLZBzEJ2 + wY02TzzU6o6LxY44nmoh7XF/ucgSD9U64PEmOZ7tUOJuhwOeZQ561jwHz9Va4MV6C7zbYYuPyS2FAfzJ + iDde6+L3UTRfLdbgFOtrF9thglyxi21jXmeFumXzpZm5jYs4phbK0bRAi4YFGtQJ83chRS5RIcoQDaqC + 1KgOUsAcrEL7QsaLECJQi04fBdo97NHmSkHgTyESosZGnmfTQi2mFjOmLVGhl/Gjfa0KTRRebbEG9DMe + Dhf6YawsEOOVIZiqX4iNDYtZLsJk7QKMVTJW5bqiIZX9PMOINvKPrnw39BV7MV56obfAg6Unhkq8KBo8 + 0cu+3cN+OV3phQMtCyk6FmBrnY8080vsrz5SQZ4o/gXeQD5d740NNZ4YFkv6JdqiKmouStZboCjcgmLe + TiL6QjiIPesG88h5s0zo53jpZF9sYpwxcyzXhctRy/FXz5xkDndG83p3tEZ6SQZwwyon1C/Ron6BEo3B + cjT4O8DsZY9qN8Y1Z8Y+V0sUuM1DvvsclLhboNFvHsaXybErlKJklQwHl9ngAuvqyTgPvJJKYRbvh8fW + zxrAZxaTU7P+9wWRa7NdJAN4mR6TbK/RBWoMByswGqjABNthykeGDR62mHG3w14vBY75aXEq0IDTQU44 + EWTE0UA99vursYuf3eGvwiSPb1lOcbtMibQFjhTMMoQtkGMZzxnk5whPTwd4uDnAzUMmwdVDDhdPOdx8 + NPAJcIJfkOs9A1gHFzc5jM52cHZxgLu7HH4+OgT56xHC71waYkTYIhPilpuQucoZxWudUUNubY70QGWY + GzKWaBDLfhbup8S6QB2W+/E4bw0CvJSEHAG8jmUBMkQu0yI9jOIvwRctzEMd6cxFrKvmaG+0xPigJdYP + HYnMeykhRDC6k4PRm7YQgznLMFa4moJ5FfPoKgwUr0R/6QoJfaUr0Ve2EgNVazBYsxYD9esw2BCG4Zb1 + GGqdxWBLOIaYX3vNa9BRuQxt5YvRXrlUQkfVMnTWrEBv/Vr0mUMx0hhNxGCsOR4jTXEYaYjBcH0shmrj + 0Fcdi7bSSNRkrUFR/CLkRIYgNyoEBXELURy/ECVxISiPW8D7C0FFXBDKYv1RGheA8vgAVMT7s6/6ozbB + D/XxvmiI90FzDDVekit2ZHvjBDnI9epAPGYOYnzwxfP17nihzhnPm53xDIX5E2ZX3KlzxcM1rrhV6YJb + FS64XeXO0g0PlrrgeqEBV3LUuERtcy1LjRvZajxAzXCLuJ2pwiO5GjySp8WdAj0eJV95tNSIh6gtb5bo + caVIjXPUlseybLGPfHJ/1nwcymPMLbLHwUJ77C+0w74CvlfAfinKfFsczKHey7bByWwHnM9V4GaFCQ/x + mh+s88CVSiecKTPxeJEj7DCQYImuOCu0M3e0Mfe0Mze1pjvBnEZ+kmZEOWNGKVGcRK5GTSpQRE1VIgzg + FIW0HPTsktA6NOZRVxdw/Baa0FRgQCPvy5xDTpLzHwO4IdOOIl+G/jIdxmqNmKx3wmSdEVN1BmyoN2Kj + WU9osLFRjekm6uZGBYbrmBsr52Gg2hIj9XaYaJZRx2uwo8+IXUPO2MH4LLBtgOh3wdZ+J8z0GDHT5YTN + 4kfJDj1m2g3Y3umM3b3uODjoi2PDvjg56IGT/c4sGQv6dLjSq8LtTgWe61TirU4VPqCm+qjZBh/XzcGn + 1XPwy3or/LrVHr8Rf77tV+ELfv7TDgXebrDFyzV2eK7KDk/XUA/WsT3r9LhZqaMOU+FMniPuo448myXD + BdbHZepOgUu5apwXJnCBDmfZ7mcr3HGkhPeTp8MGyQBWYoiPR4rIhfl6Vz7jJvltN/lsb5UbempcZmcA + sx+ONDphuo33z3vc1UOe0im2n1JIs4CPiOUte91wod8P53sDcbrTH8ebfaQf44/8ZADXu+EAS4F9Ejyw + z+yFvT8ZwOw/wgDeWOVCnm/AFDHDvi7+WLlToHL2z5V7ar1wsDEAh5oCsa/RD9trxB7BHphivhivdeNY + dUV3hRNaSsmLSzRoqjCgg2Ony+yBLn5XZ63n/9UAlkxgfk6gpcHzf6G50ROtzdQHTT4sfdDW4oP2Vh90 + tfmgp9UXA+0BGOsIwaaepdg+tAoHJ6JwYioJ5zZl4OrmAlzfXIzrG0pxdbwUF0fJ/weysa01nn11OapS + PSUDODOWOijRCWmp7kjN8EJihi+iU30QzvyyItyIBSuV8FtkD68gS4QslSF8vRGZyT6oKghBO7VDR/US + dFeHoKeCuZb5dGO1CQea3HFfmwcutVGriZVKGtl3xPLG7EtiFrAwgB+oVDCmqPB4PTVqozOea3XB861u + eKHdHS+2e+D5LvKhLi880u5KXmXEZZ7jAstzzSacbzHwsQHXmpxxg7zoZq0Bt9k3bxUp8VCeDLdz7fFI + jj0ez7bDM4wZwgB+Puc/BvDL7MMvFCjxPD//TIECz/D5M4UKPFskw1N59riTZYlbGfNxJdNy1gDOsMSB + lPn3DGBb8kcH3FfGOMRrudNF/tbvjpcG3fEyx+trfc54s9cZ7/D19ztdJAP4Q3JHgbdbDXiVvPGFeubv + Kgc8UmaHR1kfzzTp8EKnCc/1mPAUx/lDrRpcNatwrlY5awAX2WJDtiUmcuwwWajERva1aca96UoT+6wz + tgiIP7CVzS5lOJCrQmsy9ZMwgJOEeUiOlkiOJowJxsTKBHtUiX0mU+ehPXcehiotOSbscX+9Bs+yLe6y + DZ7r8cbjneQVZjVOljMm51pgT7oFzhTOweNme7zKmPJalwLPt8nxSJMS1+vEqjoq8mwZDpFb783jdTM2 + 7GRc2Ma4sIVxYXOuUsJ0DvVFjhEb8l2lFVTK19shfcUcamorJEkGsAzR1C6R1DGh4SasXKv/LwNYmL2a + eybwrPErTOClK+Xsn/ZYsNwey9bOGsARsUZpGehoavOYZCNSqLnTsz2QmSv2AfZEHnlifrEHiu7N/P1p + FrAE6uiiYncUFLgii9wxlbpQmL9iH+CMdCWy0pTITVdJBnBhjhYluTqUi2WbC51QXmxEJVFT4oQqlmXU + 7aW8/0rGusoiongWVcVOqBVL/jLWNN0zgM1V3rMmsjQDmHkqTsG8Lmd7MecII4nf35Otx1A+tRpj7Azz + 6q5qxrcaZxysdsKRCh1OlKtwlv1TGMAPVsrwZK2CfU6JNxuVeLdBgffMCrxfLycU+LBJjU86jPiE8fTd + YU+8OOjNNnfH9gwlWlfPRcUSC1SunoP6KEtyaOpGsZ8jtdHeFh3jsAbHmF+OtdviZJc97uuT49ygFuf7 + mSd6ddRNKlxlbrtcb4tLNZa4VGfFeGCHGx1y3E9cbLTG2dp5OFc/Hxfq5uIK89KD1RZ4umIOXiqfg7fK + 5+PdCku8VWWFd6ts8Ekpc1eBDd7MscbLuTJpy4nHC9xwNcMdB5Kc0R2uhDlChboYavo4vWQWFaeY7hnA + TijKcEMxP1uSTqS6kgcIA9gFxWl8zNcqxFZP2V6ozSFPz3FHY44TWskD2rNU6MqcNYBH0mWYyhYz2rQ4 + zPh8qNGDOcWNecGEzVXM9eXUNmUatgv5iDAUyHd2MS/s5vMDFXoc5GeOMMcdqXPCUR53zOyJow3eOMLc + crAliPltAXa3LSZ3oMYpckNDtomxenY2cz2vvT3PHz0FQdQ1wRgu98NktT9mGkKwuzUABzleD7WrcYR1 + fpRj9EyjHJdbxL7LLtSgXni4xwe3urxxs88D9/d7kh944gyfH+J9bGcfnCpjTiv3wCh10hDjeTfHQXOB + O+pyXFAlPAXxJ7p85rBSr3vLQXuhqcgDjYWsK0Ka9ZsjttkwoCpdi+pUrWQAN1KftReI8/lKJnBrnh/M + md7SqnBVCV6zBnC8F+riXNAYa0JbtBY9UUrJAN6RbMCRLGdyCldcK5yd/fswx9CTHD+vMF+/XeWEj6qN + +KBKhw9q9PhQGMA9wXh/fDVe3hCFBwfDcaR1JTZUUQPkk/vfQzvHfnu+E+tTh1YRL/PIFRm3estUGK4V + M36pF9vZnm16THCMjHLM9FfL0VelJozo53f3lLmiLk38piOWD7ZGaZSC96JDdaIOlXEqVPD6K+KVqE0R + S7g7Uz+I/Yd90V3IOsx1ZtsaySMZCxhXiuPskB9phfxoa5RQh1eSg5rzDGgool4k96zJNUgGcDk/K8zh + mlRHal8ZOrPs0c8cN5rvKPkyO5lP9zNPHmkjOgw43KHDQY7Dfe0K7GmTYVeLMH/lhAqbGROmq+SYKLHH + WO58bMiYg+3Zc3G8yBrXKu3xNHPVK+1avNelx+dDbvj1mBd+OeTBnGbEG4wfL5EfvlRpx3aww2vMZ2/y + XO9WqvBOlRZvkwe8wvx0h5z/arEBxxn7tudqMZ6tQW+GVlpBq5H9o5HauUni6Ea0EI3iTwNJwmRVSOZv + SYxSWva5kvG7QozZRBPyBGcRBvA6mWT+Jq5xlJCwehaJa+SEAsnMAwIp69RICaUeXEuwzCDEFn5pzBlJ + S+0Qu9AaMQsskbzMFhmrHJC7Tilt81a0XoNiYQJHMb5HMYazX5ZGs4xlOzC+VCYYUBZnQKHYTiNCwfbj + cYRYorowhv0iVqxqQc3MvFsUz+eJwgB2QFmCHfuJNRrFSkUZDtjAnL5TxIZqZxytdcYx9ukj5UYcZJ7f + V6jB/gKttPTyIfb5w+SpkglcpMXuAkfszLfDrgJr7C9hjG03sb974XKX4L/Mt0VidjH1Bfv1VBHbm8dt + pi6bYQzbkWTLmGmD04mWuJ5qiTsZNnhRGMBlcnzA/v8R+ffPOjyYF3zwXn8AXur0xf1szyM5CmxOtMEI + NVZ/sh3zN/tghhxtWUSmI9rS7aUZwF0830COA8bJB6bF0skVWuyoZB8gTxMrH+yiTtpHrrGvxRX7xTLQ + 5Pp7yI92tREsd7KP7eh0wpZWEzY1cQzWUTeUc+wx7rel2qElxQHtHAsdKVq0J+vRkUYNwdg9UhiI4WLq + +nx/1DOuV6Y4oyLdDWWM/VVETaZY1cD5fxvARdRUpdRUJWppmefdzKH7eY2H650JJxwym3CU13q6ywfn + +oNxcXgJzo+swN7WQIwxx7dwPJpTxN7gRuoZcppSD/SVe6KH8buT+rGHcXGQ8Wa6LAB765bgZHsodUs0 + zvdE4cZoMp7fW4FPLvbAorHGGq0M3D0tMgx1q7BxxITtk27YudETOyc9sWPCC7sn/LB/Mhj7xoKwk6Jv + ussdg40cPEwwtRTlVbwpEahrclxRn+uOaj4uTVEjL9oWuZGWqEhyQDOTWhcvbLCUxxJi3f++YlfCBf3F + JvSzsw0WqDHMoCg2sx+jAJ8udmQjKjFTrpQ2sx9lQ4jZviP8viEG/MFMPfpJGnqS7SUB3hc3H8Nx1hiL + s8VkrB2m4+1wQOwLVCigxrEyLU6w0x8SlZ5ri02Z86W1zGfYYWfy7bGtwAF7xY+35XqcZKMcL7LDseI5 + hAWOFlvxOEfsZ3LdQVE+nqRAb4wwb9To5uDsJ/EbiDFiNMoZE5EU5JFMbBG8x7UU8ss4gIPskeVnjVQf + KyR6WSHK3QKRrhZI8LJAdhBJz3Ixc8wBQwxAUxzEM/E6bOIgnyQpnVzD71utwcgKNcZXMaCRnAqMrjKg + b5EObQEcBL7z0Rtgge3rSGw4KO5SpHw67I0/b/HDl1u88M1mH3w77Yevx7zxuxY9fsk6/QWDwMcU1O+T + ZLzJunolygovRljixfXz8TzxIp+/ynp8l/f6SYYan2dr8ZscA36fpZ0F2+JXxC/zVPic9fZzJrLPqjT4 + kAJCLNHwaiEFvdgfJ9kKt2M56CPm43zofJwLs8aFaDtci5fhZjLJfLoCj2Wq8Bjr9VEGngfzNLiYJsOx + GFtsWWqBqWBhAs/B4VA7nItR4HqCBncyTXip1Bm/6HbFH0ec8LeNzvjHNjf8cyexy4Uw4cedBny3TY0v + NzvgL1M2kgn8p1F7/HFYhl/3yaR/n3/ep8WnvUw4nSq80eqIp6vn43qBBS7mWeB6iQUFowWebbHEByO8 + 92lP/GmLD/4844O/bPbDn1mfX4yTxHap8EqrDG/26PDugAlv9Tvh9X5XvNDjgjstGlyrtsH5ivm4WG+F + hwdUuLuF7x9iUrvPA59dccLvbhrx90ec8d1jTvj+US1+uK3Gv26pgAdU+OdVNb4/r8KXp1X4+0kd/nbS + iY/dCA98fdIHfz/oiT/ucMFnY2q83myN5yrm4vH8ubiTNw9PMqm+2aDFz3pc8fsJX16vP77ZEYTvDgQD + JxYCZ0KAi7MG8PdX/PDtNfaPBwLwj9sh+PHxpfjnsyvw4wvr8MPr4fjhvRj8+EkivvsoDt+8uR5fPbcS + f3l4EX5z3gufHych2qvBO6zrV6dkuNMxD9dqLHDDbIEXRmzxyW49fnvSBX8644y/XmBbXTThq4tGfH3Z + Hd9f9sP3Fxbgu3PL8NXJ5fjTwUX4Gev2tT4nPFajwIWMuZIBfJVj8E6bDd7b6YLfXwzElw+F4OunA/D1 + XVf8QzKAnfCvn7sCv3LFj7814fvfGfH9Hw348X+MkgH8wy/4+GPj/zaAHxUGsB2+us7HV5T45qIa353X + 47szRvxwygXfn/LBn/b44/0JT9xqUGJ3+lxpD+DGMCtUhzmiPJLiK2EhqtPXoTI3lKIrnKIsFPnJy+8Z + wL4oCPdnUvdG3jpXZK/UIXe5CsUkAdWrZGheI8MAE/wUk8a2Qn/srFqIrZUh6Mt2QUmoDRIXWiDc3wLr + A60Qs8gRSRSkPxnAxXHOKKHILGLsKRAzPBmL8iIdkRcuTGAHVHCMtGS7YbCC55MMYBLdVBNJjxs6mLTa + MzxIiDzQk+uHjbUrsKsjFNtaVqC/iCQzV4++fMY0iughju/xPD02kRROFztjhu9vYdzeVenD5OqHzRSx + EyTlPxnAm1vWYc9gCo5sKMDx6WIcHs/Bzu54TDeuw6b6VUyyEZiqXoHe/GB05wTxOoLRlszrEyYuY2dr + tAmd0QZ0R+vQEaZA82rWE8lTQ5gOpctlKF5sj7KVSlSv06M2gkQ1xpUE3hOtKf7o4Lk6M0OYpAPRlOgD + cxyTb6QBFaEkRavsUbjcRjJ+S1fZoEQYwBKsUbTcCoXLrFCy0gZV6xxRy++tD5Ohdq0DypdbomzRXJQs + sEDFovkwiz1D2fZt4SQf4bw+xuymtbaoX2mFuhWWLC3RuNbmngGspLBQSft0NiaoYU7SkbwbUE1xWJVu + IkmgUM8wUgjqUUJSWkHBWJ8r9nLwRQtJRasweiuWkPwvxUDNcgxWElXLMcxymOVI1Qrm0oXookBrSHGV + zF4x+zdTzALmtReuJ8mnOM3jvWSstkXqSmuk8d4z1tzbx2QtyewqNWKXqRG2UIbVIcL0tcMalmv4fO0C + GUIXOCAsRCz/bI/YBTZIIbKX2LEuHVG2lsJ3vQFNkUa0richCteilyR2kPUyul7G/OdIOGAi2hFT8Qps + oijZmeuKI9UUjlW+2EYxJLZp2EhiPp2mwXQy8x777TYS8J0UY3silNjLexDYE6nGTubabRQ4MyS404k8 + jkRsA8n7piwTJkjs+2Md0Me8MhAnQz/RF+somb6dkbPojrJDT4w9uuMc0CPMX6KfIqiP6GeuGWCuG2FO + Gk9WYCPFpDCAtyYT/4cBvDVWJu39O8U4sCHcWlrCeE+6CoeYv45TpB8nvxCzfY8VOv7HAM5zwFGSYjFT + 4UARRVGeLbZmzcfW7Hkk1CTTxQ44RiFzul6L800mXG53xZWO2X2AL7cYCQOuUGBd7zCy1OFCowIXzXLc + 36zCgxRMt9rUkgEszF+B2506XKMYP1dtjXNVlrgi/gnfqcYj/UY8MeKCp8bc8Oy4J54cdsEt5q0rrUqc + 5znvM6twskGH4w0mHCMRPVnnjLNmF1xrdseDTW64IAzgdAsJl4stcavWAY9R/D/TocDdLkc822qNu43z + 8GKDBV5tssB7wgDuV88awGM+eLPfB4+T5F6jMDjF2LKNbTDKdmmLsEXtmtlZ9nVLbWFeJEdDiBINwRrU + BalQHSJm/apRHqJBxYJZA7hSMoBV0mc6FhrRs8CE3hCWfmp0elEkeNhj0E+Jcb6/aQH72EIdppaQ1JOP + 9a7SoH2NGi3hGrTFMN4kk8xneWCg0AfDJM1jNcEUAAswVhuC0UoS/HI/dAoDWIjHDBJ5imshqgf5+nC5 + PwYotIcotEcqfPnch3yW3DbPGZMk5nubF+Bg+2JsbwzEZJW7ZPyO1bjx/F7Y0OSPjWZfTNaIvbBMqBd7 + 5UXPR/H6OShkrqlg3/zJABam8kihO3mwC4YYN3qS1GiNkTFuytDIsd8QoSPINyNd0RblJRnATWJJ4ZVG + 1C5SoZ712RQsR7O/DA1e9qh3Y7xzsUa5qzWKPSxR4jEPFZ5z0B5oic2MC4fXG3GMgvfcGlvcYhx5Mckd + b6X545UEbzxBjnv/arbhIgrFIA32sB12sk22s35nFlM8hZDLBykw7OeIEV/GAR/GAE8KTzdhAJNneylw + xJdjJcCAE4FOOBZgwqFAPfYGaLEzgDEgUIsJtlnjEsYvxqJk8ueoIEesC1FgMc/r7yOHG8/j4uoAJ1eZ + BJOrI4xuMrh4quDpa4RPgPN/DGB3OQxOdjARrvycj5caAT4aBPlrsCRQx/PqEbPEgHRhALPOqte7S7NY + y9d7II33FM37CwtgnAwxYWWgMxb66hHA6w/k8QE+MiwLUiJ6tQnZ0d6M7cxp+UvQmrmQeSkY7cLszViE + 7szF6M9mLM9dhsHc5ejPW46BPMbwwpUUkGswUrKaOVTs1bsWA5Wz6K8iRFm7DgO1LOvXob8hDAPN64lQ + 9BHdDWvQWbcSbcwRLZVL0Fy5GC1VSyS0Vi9FW+1ydNWvQbdZHBuJgcZIDDbHYrApBkMNMRis52NzPL8j + Hq0lERStK5ETFYTk1R6EO7LW+6M4Vhi/C1CTuBi1yUvYJ5eiLmUR6lIXUfQS6QvRkLoAjWkhaEoNkpau + bk/yRW+8C6aSXXEgzwcXKvzxUF0Anqj1xrM1rniuxoRnak14knHmccaZR2qc8FC1E26Vm3C7QsAVN0ud + cKOYMTBPh3OZanJBJTmhGpcyNbicocLVDOoB4maOCrcYf2/lanGb3OUhCuxbxWLZaD0u5atxJkeOI+k2 + 2JcyB/sy5uOgMIAL7XGQ2k8YvrMGsC325vMzeTY4RP15LNsWp7MdeDzPXcXrqycPJK5UO+MMr+9wCQV8 + NjlcohXz/HyOQ1s0MNc1MTc1pTixnpxQSc5VJhnAehQla1HAfCIgVswqpkYuTVGiLE0hoSZTi/psPRpy + jWgg5zLzXhoYI83ZKkIpGcANGUS6HVpyZOgp0WCoyoDRGqKWmrBGhwmWE3UcO3XUjvVqTDWoMFYvRz81 + SE/ZfPSUz0d/jQ1GG2TY0KbBTLcR2/qcseUeZnpdJGxmDtnUacSmdhM2tBow2aLDBurG6TZn7OjywJ4+ + bxwc9MORfg8c6XXGYeaV49RR53vUeIB66OkuNd7o1uKDLgU+arHDx3Xz8Wn1XHxWZ4kvWuzx6x4lftOv + wS971fi4Q06d8pMBbI+napV4ok6Hh2v0uJ+a/Tzr/1S2I07x3s9kynAhS4nLWWqCOpH1ci5XibPUjKfF + MtAlzjhSZMIOPt4sfmjJ0WCYfWeoQPzR3CTti9eRp0UXY62YBdxbQ75b64QB5rhh5rypZiOmeb/bOrXY + 0a7C7lYFDnSocZz1cWbAE+f6fXGm2x8n2nxwpNETBxvccUjMyqp3k2ZWiZlZAvskiB/q/2MAb+drW2o9 + MF3JMVFikLC5zAnb2M8FdlS4YQ/zwP56XxxtCcax1hAcENus1Ihj3DFVxbzB3CEM4J7/ZQAb0VHnji6z + F+HNWOCJdn6n2Av4/x8DuLnJm+D7REuzJ9pavNDR4olOorfVByNtgZjqWoCt/Uuxe3gtDo9G4dRkIi5s + yMS16QLc2FiCmxvKcXWyFPeN5mFfVyom60LRmrcAhfFOyIjSIT3OCWnJHkhN90FyRgBiU/0RSc6+hrlr + 8RodgpbK4bvADgEL7bFqtQbJce4oyiLPLV2EptIFvHd/8mMXdBXqMFaqxS7GkeONrjjf4oKrzSbcaNDj + Zr0GD9TI8UCVmAUsSgVuV6vJPwx4Wqw8IMzfNg883+4uGZDPdrjjiTY33Obx18iBznMM3WfW4T4+PtOo + xVlq6ctmA65yjF2v0uBmuRq3SlS4XcTz5jvgEXI8YQA/lW2Pu7kOeD7HAS/nyfBygRwvCQO4UIm7wgAu + /I8B/Ay54BN59ng0ywq3MqxwNcsa57NtcOKeAbwv1QoHMmf5432lcum+HuaYfKKH19/nhufFn817nfAa + ++ebXS54p2PWAH6fEOU75IxvcOy+ZNbgmWpHaRbw46yTu+zjL/GYFwfEbGIXPNrJsdasxrk68tZKGTmp + DaYy52MkwwbjYj/RIvLtcgM2ETOMzz9hWvyRgW0wxHElZsjUxzuiJkGBauqdanL5mngNasmb65IcUZ9k + jZb0edR+88h3rDh27HCbfPMl8t1XO93xSp8Xnu12xYONvI5K8afJOdhPnnm2wAJP1NvOGsCdcjzPMfko + 49r1WmEAqyVeLRnAuQrsYGzYxrgww1wwzZiwide1iY835vI6c8nHCqh50w0ooy7JWDUfKWuos0Opbchz + okPViAw3/JcBrMGiFSqpXCbwbwNYec8AViB4qR1ClgkDWIHV67UIp24VJnBErB5RCXokpjohNdMVGTlu + yMh1R06eO3IL3KXZvoVFXiggn8sv8vg3xPLPuTkcG9RDKanq/6sBXMT4VpLD3MJcUZKvRRnjWrlUalCS + q0Ip42JFAXlykRaVhT9BzAhmbqokl62l1qz1hbnaG7Vl1MrUY7MGsBwlwgCOl8OcLAxg9awBLFZVYBzd + wti5q8oV+5kTD1cZcaRCrGrEGFymkJbrf4jx+xmzWpp5/lazEu81KvGBmPVrVuIjttun7I+fdzvh5wPu + eKPfBY91mnCiVIXxOGvULbNAyWLy3rVzUR9nxb4iwyjPu7lGjV2NGslsPNGlxIlOe9zX7cB4LMelIY7L + QR2uD+jxAPPPjXbqokY7XK6Zh4vMOVfMVrjOnHOl2U4yf09XWuC+qjk4T9w0W5J7WOLFKiu8UWmFd8ut + 8AHxFh+/V2WLn5Xb4VNqnrcLOJYLVHi20ISH2YYX0tyxm7FM/Em9LkqFGskAppZPdGJed7pnADujKINx + iyhOJ1JdCTeUCKR7oDTDUzKAq7I9USMZwG7/NoA7s1ToIa8Rk5vG2aen88mtOfaOMCYLA3h3vYtkAM/U + GLG5WizPzpxFLrCtXIedZTrsK9fjYIUBR/n+Uea3E2ZXnKh3xUnmqBOM8yeYJ442+uJwSxAOty/Boe7l + 2NayCOO1/ugr90KnNFtUGAr+GK1YgImKRZgoDyF8sLHaB9vMAdjT4oPDnS44Qu15rEnG7yFfqidfYrs/ + 0EL+xnj6SKcHHiZfuEVO8QDj1RWO79OMsYeYN8WEggnm65ES6plS6qVSd3SXuP/bAK6kxqkgaoTu4vU0 + l7C/crzU57vC/BNyTKjN1KM6Q4dqjpmaVA3MmUa0iJWZirzRV+bPXO+Htjz2c9Z5VaI720nAE1WxHmw3 + Z5ij9NJqb90RrOto9rNkA45lOeNigfjjIflovh53ivR4ipr1hVIjXi/T491Kgv3+nWodPmhyxYd9IXh/ + cg1emIjAjf51ONi0DJMV1AHi95xcTwlNvI+mHCMayekachSEDM15jmhjDuitEH/SI2dr0WKK42OiSYtx + 1uMoc86I2Ui4YYT5uq+CuoTjMT/cBhkr56MoQoZKyQAWSwNrUB6rlcpaYXAy3nQX+0poZ59tZJ3Ws26E + UV6aKEd+tB1yIq2lsoTPKxhbxCo0tfmMEYwplVk8JzlpeSq1d6oMtcIATndAJ/lnX4YthrJmV4jYUq7A + 7loVDjSocahVgI9bGY9bZdjT6igZwDuEAdyownStHFNlDhgttMVY9jxMZ87DnjxL5jZ73KyW47lmDV5v + 1+LDLgN+MeSKX4144PMBN7zXqsertY54gXnhRUKUL5Ervsbc/malAm8xD7xVacSr5OZPlBtxf4kRJ9hm + O8mhxdagvenMT+kaNLJ/CA3fmGKgTiHPJszijw5EdZIO5aIOxRLLiQZUJpvuzQA2IV8YwBzrqWHUomsd + kLhWJiFBmMCSGayQkLRWKSF5HTkLkbJWzRwzizRRrpQjcak94hbZSCZw4mJraRZw1hoZckJVszOB1wuD + nxqBEGZwcaQKxdGM6WzbMl5bSYzYBlDsNSxD9j3ksO/mRiqQHyVHYbQCBbE8V5yKfEuBEsbxsgRH5mM7 + NCfbUYMqMF2iw+4qJxyqdeO4dcXRahccIo/cT065h/liH3P6gWIDDpKjHio14QhxuFiHvQWO2EvddKjE + DifJE250ueL2oJf0W9VBtsWMWL2XmkrMMBZ7t2/leNkujHjGsD0p9jicZIMzSVa4kWqNxzNt8LLYV71U + hg/Iyz5mP/9Zhxt+1uuDD3r98FK7F+6v0OOYyOtp9tiUKpa3Z57g+YYLDcwNWnRS13VmydCd5cAcZY8h + 5otJcrKZSh22V7P9CWEA76CW2FlrwB6zCbsbTdjT5ITd5Hm7mw3sm/xMkw7bmvXY2mKUsJmvb2yg7qkS + K2Ey//E7OtNl6GI/6krj2ErUooVjrjPNlTrehxqecSbfBw2ZbtKM38pMxpgsd1RlCQPY5Z4BrP+PAczr + F22wlfpGzP4VKzQcrGMdm5lTiSO8zmPCAO7wwtneQFwYWozzo8upRYIwVe6KDupgscx7C8dnR65JWllA + LKPfz7K3wAn9zOUjjKMz5YHYb14mLf18sS8aF3sjcXMsCS/uK8fPLnXDoixvLknBfNSXW6O1zg4jXXps + GKQAHPXAllEvbBv3xvZxf+yaCMTe8WDsGg3Aph5PDDc7oY3Jpp6NUEtiUEtyVSeCTIE3GvM9UJ/rgopk + kpBEBg4GltY8E8n67MbEAr1FbpJbLcpeEvleJtYBBtqhPDWGSThH2ZiT7GzTpQpsKFFiPF+Bfoq/Xt50 + bwqTIwdyN8vuJAakeGt0x85DX8wcDLEcJzbEzMOWeEscK1TjJEXSiWIVTpOw31ehxdFiGXZlW2JL+hxs + ybLENpLdbXm22JlnJ+0DdYqB/RTJ9olCaxwvnMNAMkcygA8W22N3ngKb0nktsfboiLBn4pBT/LNTkPj1 + MpEMR5kwTkxSyAgMhZrQtkLMXhH7f1khx88SGT7zkeRhgUR3C2T7WaBskZg15oDeCCVGOXA3iB+4Odin + IrUYIykdXqNF/zIVuhbJ0bWQHXExOz3RvkCOBj8ObE8r1HtaoIPnmlkzB2fSbPEMRc5Hg+7402ZP/G2z + K77a6I5vNnjhy2F3/I7J5VcVSnwhTFsOoI9JMt7l4HwjngMyxgovRc+fRawVXouzwbvJMnySqcTn2Rr8 + luTk9yz/QJL9B5KU3+So8AUH6M9yHfERhcz7YkAzCLyUNQ/PpM3FYwlz8FDsHDwQOQeXw+fiNK/v1Jr5 + OBthi0sxjrjO4PRgEgUU+8jD2Vrcpli/TnJ7JkWG/ZE2mFxogUHe12SwBXavssbJSBkuMbDdTtfjLgPU + L3p4j+Mu+HKzG77d4YF/7SH2uQH7TPjXXiN+2KXB11tl+PsmO/x1iph0xF/GVfjtoAJf9KvwWa8GH3er + 8W6bAq81OuCpynm4n4LjWqEFHiRRvFNvQaFIYjikxi+mXPD7aS/8cZMX/mejD/4w5YmfDRjwJpPcK80O + eLtHi/cHTHhHmMAUVa+Q3D7dYcCNOnucL5uHMzz3lSYbPDSsxNMzTnjlAIXaKR1+flGN39+vx99v6fHd + w3rJAP7nbSXwgBL/vKrCdxeU+PK0En87ocVfjxvxt+NuhAe+PMLr2O2C384wcI6o8UazDZ6vnI8nC+bh + Tu5cyQB+p8XABOqBP20MwN+2BeG7fQvx49FFwH2LgQsLgUuB+PGyH76Tln/2xTcP8jN3FuOfTy8HXliD + f70RiX+9H4d//SwF//oiEz/+Ih3ffhCHb14Oxd8fW4ovznrg44M6vLnFAS9O2ODusA1ut8zF1RoLqXxr + sxK/PeGGv4hZv5dd8beLWnx5iW1y2YBvrjjju8ve0izgHy4tw7fnVuLvx5fhi+0BeGfIDU9THF7JmTWA + L7JNHmqyxFvbnPDrswH464PB+PJxf3x91w3fvGb8XwbwD78x4rvfE38y4Ic/G6SloH/8guWn/NybGnz/ + ohLfPn3PAL5pi6+uO+Cby3J8fV6Jf5zV4NuTOnx3zIhvj3ngL3v98OkmHzzWpsHBnPnoD7dA4zqKk/WM + a7EuJBPLSe4iUVsYRaEVSTEWds8ADkR2qB+KIgNRFuWPonAKvVVaFC5ToGqFI1pIHgbWK7E13QX7i3xx + vHYRTrasxJ7qBRjOYQJZb4fUJXOkZaDD/OcjivEjYbkSGWs1TPJGJnVBTJxQGKcngSMhjFEiL5IkIMyR + BMKRRFfs3eOFwbJgxlZftGa4oCnZiGaKk45MD3RleRE+6Mr0wWT5UmxvXoet5uXoFftaZujRncl4lqFC + P8flMJPMZJ4zNuS5YBNJ9+Z8N2wvowgo88V0sTcmSLRHS3wxXBaISfNq7OhNwMHxPBzdUIgDo1nY1hmD + jeY1FP0rsL09Uip78oPRlR2M1tQANCeSnEe5o2G9E5oiDGiP4LWT/LStk6NptQwtYSRtYSSiwnRc6oCq + 1WqYw0neophUo13QEuuJrhR/Xi/vlehKCUBrAol3LHNSBMXBOiVKV9qjWCz3vNIWZSutCRs+Fs+tUbzc + EkUrrFC80grlq21Rtc5hdklV8Zkl8yTzt3zRPNQut0FLqEwyf0UpYnbDahuYVwnzd74EM2OU+CNPe5QC + nTFqdMRo0cx43kTC0JCspwihYMkQyxtR4GQ6k2TPrppRwdeq+Jo51xtNBb4UQeIHriAMsz5HG9dhhBit + W0uswkjtSgmj1SvZvovQIf55RnFZxu/KW2OPDN5Pzmp7kkklCsOVJJeOSOW1Jyy1RMISa4KPibildohe + 4ojIxcLotcfahQ5YR4QukmHdEiXCFisRzpwTQYh9qBMX2SNtsR3yljmghES2krmpMdKE9mgKYfbJvigD + RthuI+vlzFsk+WutMUahMsU4vyVZg53ZJuZQL5yqDaYw9ccOkpRNYqnlDA2mSayk5ZYTVNgWq8BO9uVd + PM/uMJbETtb5Vj6fiVJiU7SSOVKFiQS1tHT0dLYzpigUB0l2+2Ic0B8nZ+mIHj7uorjpiJpFV7Q9usVr + cY7oFrODiYF7GIp3kDCSqMBYkhJTFAvTadr/hwEssCVOhmmeazLcClPrrTFDLrCX93EkX4djJNAnSgXf + +H8awIfJZw4KAi3+bEbeMZ0xl5iDbbnzsZuC6ECJI45QzJyu1+NiqwuudLriKnGtQ+wL7IzrXS640ePM + xyZcolC83KTC/RRc/20AP9brfM8A1uNaowLnamxxsd4eN9pVuNWjx8PMTY8Nu+KJETcJj/SbcD/fu0AB + f7ZBgRP1KpJPHQ7VG3Goxijt73WqzgkXG1xxvd4ZF0pkOMZ4fCydMbnECrfqZbjTqsAzXUo81y3D3Q6K + szZLvNoyB2+0zsX7nXb4qE+FT0ec8emEL94Z9scTjW64SmFxghxiC+tuOMKOY9wW1RxHVUutUbPEHvUL + FagPVqEuUI2qAAUqAhUoD1KijK+VhaglE7giWBjAFNNBJMHC/F3ojH6WfYGMXz4K9HjJMXDPAN64UIvp + xQZsWGrA8HLGNsbiDsbSFgquVvK2tngD2hgbu3PcMVDsh6GqAIzUBEnlULk/x5kvOvJc0UjeISAM4N4i + sXRZoGQWj1QFShirESU/X+qFgUJXjJHr7mpcgAOdy7GrbSE21PtggkJ+3OyFiQZfTDUHYqrBD+M1/Hwp + 41magmLeDmXkXsXR8yjmZ5eAFsKhP98Z48WemCz0wGgWSX4K74F9vpXjpSVWg2YKw6YoJ7TEuHJMeqM1 + 0hMN65xRu4IxcKFSMoCbA5Vo9Veg0Zuxy90WdW52qHG3Q4WXDWGFGu+56Amxxo61OpzmmL5AvnUz0g5P + k5e+QTH8fponXk9wxZMRWty/WoUTi3TYH0gxGaTBdrbFFrbLdIgW4wFKDPlyXHmxfT3tMepphwl+15Sr + HWbcHbHbU4mDvloc8afA9DdJ2Mt22xVE4cZyhuVIiA61vO6sIHskBtghIsABq9kHFvHcvt4KOLs5wOjs + AL3TLHQme6k0uSng5qWDp58J3n7GfxvAepMtjEZrODnbSrOAfcQMXh8VFvqpsTpQg8iFOqStYk4Nc0dl + pDdqYv1QxjpMXapHFO8tLFDLeOiK1QvcsTjQhKAAA4KDjQhiH126SItYHpefHEwdtBRtxSvRlLUITWkL + 0C6M34JVEgaLVmOweA2Gi9exn62RMFgiwOelLCtYEv1VoeirXIfeqnXorlyL7hqWNWvQxRzQZV6HroYw + Yi3a6lejpWY5mquWoalqKRqqF0torFkioal2KVrqlqONeaS9Xhwbju6G9ehpikJvYxT6zNHoNccQceir + T0BLaQTz0CpkRfojeqmR+cGAtHVe5BuLUJO6DOa0FWhIX4HmLHF/LLP53dkr0JK7HK3Zy9CStRStmYvQ + nrGI4jgIPQkeGIwzYVuqG06T59zk2HiUff2JKhc8VWXEE9VGPM4Yc6fGCQ/z+UOVBtwuM+ChciMeLBfm + rxFXKJbPUnOcIhc5kaYk1Hyswek0Fc6kK3EuXY7LWUpcy1bherYaD+Rq8ECBXsK1PC0u5ChxKpOxN8UK + e5LnYW+6JQ7k2jEWOxD22Mf4LLCf2mUfdeCBXFsczrbDsSw73JflgMsFatyudsWjDd64xXF7pcaFXN4J + h8U/uHOYcxKsyVvmom69FarJ22pjlahNEj8omVCeYkJpqkFCYYoORUnaf6OYuaWEY7uU9yFQlUEtTd5V + R41Vx/utE+YvY+SsAUxkUu+ly9gG9qx7R3RS2w5U6DFYpcNgtRbDVcy9LEeq1RJGa1UYq1NisEaGHur7 + zpL5ErorrDFY54jxZjU2dhqxudvp35hmnhHY2OGEqTZh/Box3qQnB9FhvEHHeOWELe3u2NHjhT19vthH + /bWv2wV7egw40MOY0a3BtR4NnqQWerVXh/e6VPigxR4f1Vnhk+r5+Hm9FX7Z4oBf9arxqwEtPu9T46NO + Od5otMdLtXZ4ttoRT9WJWZp6PFRtYJ7Q4D7qyxMZ9mx3B9xHrXouU4GLGUpChfOskzPZcpzOVuJkngbH + CxhPCo3YVajHVj7eQIwSg/l69DI/t4pZA+wP7UVadJWZ0FMlTGDGUua2IbO4Vx7TrMUM8+m2NiV2Mzce + Yt481e+Kc4NeONvnjVOdXjjW4olDDWLG76zxK+3L2DBr+v6Eveb/GMC77+0DvKPOEzOVrthYYsQG6tdp + ljNlThK2lbtgX503DjcF4kT7QpzsWIiDzQGzBnCFG6Z4nFjyeKTmPwZwIyEZwLXk9Gbv/zKAGf9rPP9f + DeBm9un/E02N3mhs9JTQ1OSOliYPwg2tRGcjx3MLc1hHIDZ1h2Br31LsHliDIyORODWWiMuTWbh/QwFu + bSrF/RtLcWGiAEf7MrClOQr95StQleaNnGgT0qKdkZrI2Jrqh9T0ICSmBiImKQDhMV5YGeaERSs1CFos + R8ACOyxZKkNMpBNyUr1RTd1Qlx/AGOuJ+mzqmWwF+vPIC8vUOFxnwLkm5//vBnCVAg9WKzmONdT0RjzV + 7Iq7be54vt1TwnMd7nimww2PtjjjAR57qU6N+2oYb2rVEk6yT97H8XS+Ro3LHFtXK8i9xHSfJjQAAP/0 + SURBVIzcEp63SIbb5HWP5DvisVwHPJljj+eI/zaAXyxQ4sUiFZ67ZwA/zedSSY74GGPOw5nWuJlpxRhm + w3hli5NiCeiU+djPmHUww44cctYAvlanwYPU9Hc6nfBUjwue6THibpcRL3eZ8FqHM95qZ45uc8Z77Sa8 + zzH8drsRb0nLQGvxbK0cT7IunmJMENtUvdrvgleG3fEC+eBjPM8DrRqcr1fgeIUjubk1OfU8DKdaYTjL + HhNiedlScqgyHaHHZrF8IcvpEj3HmI6aVY22RHvUkc9Vx8ikPSlr4hjDqEMbktTUndRxKTboyZyP0cJ5 + 2Fpng5NN9rjTqMarbSa81eOGtzi+XupzxSMtGsZYe5wsmIvDqRY4n2+BJ/n5V9sVEp5vUeKOWX3PANb8 + 2wDekyPHtgwFNjMubGK8FEtPzkKLqTwjNawLJgqpFTMYk8lrMlZbIXmtHRKo9WJCFYgK1yIiwiQZwCvW + 6rFktQ5LyBOXrNJJBvDSFczzK5SSCbxizezjhcsdsIBYukaOVeEahEZqEBalIzRYT04Wn2xAUpoz0rJc + kJbtiuxcN8kELiB3zOe15BW4Ife/kEednZGhk8zfnwxggf82gPOoNQqYHyQTmPlBAu+3iDmwKEuGIsbE + Isa54mwZKvJVqGD+kpBPzsw4WFnE3MRYI+0bXOvz/5MB3EX+OZjLts43YYY5eVeFCw4wB4rln49VcHxU + UGuUy3GDY+ZOgxrPM4a+xnZ8p0WB96hDPjQr8BH71qdNanzeYcCve13wy2EPvDHghFvUMPvybTAQOQfV + yy1QsswCNVHU0Rky9IuJPzz3pmoFdtQrcaBNhZPdauYZfl+vDJcGlLg6pMH1IS0eHGbO6KcW6lTiwWYH + jpX5uFwzF9fqLXGjxQ7Xm21xoXYu7qu0YL+xwKWquXicueilFhnernfAh9UO+KjCFh+V2eAd5sgPKu3w + WaUcPy9T4t1iFV4p0uGpQmfczHHFmSRXbI8xojNCiZpo5u5YPcolA9hZMoCL053/YwCne6KYvLkolY/v + oTTdC2WZ3ijP+t8GcHO2k8T1u9i+vezLQ2zTDWIGXTG5sVgOtckTBxmDd9U5SwbwVmqzbfWz2MnHu8in + 9rJNpJnZzGsn+LmTzG2nqblOM1+dpo472eiOkw2eONbogyPNQTjSvgRHe1dhLzXKlpYFmKoPwnhdEDlE + EKZqFmGmbik21yzGxvJAbCj3xnSVF3aYfbCPOfAIY86xNubdRjmOUWue4ri9UKfA/YyhtxiHHm1nTO1y + w0O9Tniwn7G52xmnyCEO1btgS6kRY0XMzeK3/yLqt2JndBaLJZ1nDeAK8UeNND0qWCeS6cvxUcfxUS1M + 3+xZ1GRR24iZv0QtUcf+25TjRG4kfAYfDFUEoLfUDx0FvuRNbqiIc0ZZlDNKotxYupDnm8jbtGgKV6Az + XIaJKBV2pxhxMssZVwqccYNj5XaBFo8VavEkOcPdYi1eKdHijXItXi9X4y3yrfeYSz4YWID3ptbi2bEw + XO1dzdy/GKOlgWjK9iCP4/1k89qznVHHtq3NJD/k+KwVf+hjjmgmD+0qo1atVmGEY2eiWUfepSf/MmED + 4/lUuwcf+2GqNYi6wEsyuXNCrZGyfC7ywh2lJYErE9n/4rUoixMmpg7VvIeWHLEkrFgC24d1wu/nPVWL + ledS1CiMc0ROpC2yImyQH+uAkiQlx76GfVGLylwdKnJ4nkyej69JW5WkOPJ77dEo9gBOsUZPqiX6U+dj + gnlqI8fu9lI77KlyJAeS4UATS46/fcSeZjvsarbHDr6+rUGJTfzMeIkthvOsMZY5BzNZ83GwkDlP7M9f + Pxs33mrX42PmtF8MuOGXg+74WQ/zWLMGL1Xb424l8yrxXIUd7hIvVzjgVcad18uoTysMeIXc/Clyuhtl + Rpxi39pFLTCZqUYf42ZbmjB/Zw3gBvLxBtZRLeNzXbIJ9anOqE93QS1jdRXHr9j7VxjA5cnsL0lOKIjT + s67USA2XI2ndrPkrGcBr5fegkJC4Ti0hKVSDpLUs16iQSJ2cuFqJ5FUCPH6ZA+IX20oGcNxCSyQutaHu + dEQWj88NZYwPU7JdGefDGefXqwglCvndBcwpYqnnAuaXHL6fEeqA9HV2EjLC7JEZ7oDsCBnbVY68aJ4j + VhjBYqa3EhUJ7G+JDmhNlWGYeWCG/HFvrRs5kwcOi5KcUmyPuq/UIG2VuqdIj33kpgdLqc3JTY9QiwkD + eB85zsEie5yqYOwlv3qkzwOPDnnjcqsRB9gHtuVZYYY6alOBDJuLNNjB43aXEGyHfeTvR5OtcY64mWaH + J6mxXqH+ertEhvcr1fik3oCfM1581u2DD3t88VKbB25wnJ0Se5+T4+/MJScvcea1u2Gy3A1DxYwZeSr0 + 5CrRy9zfT641Sn61sVyHbYyDO2tN5M7ijzHCDNbysY5x0yDNWN9l1mOnWSdhW70WW8X+xbyfGbMW26h3 + JCO4yYTNjKsbqEmHmEf7qMf6qM/EH8ha4qjHWMfNHHud6eTjuV7oEPu4M47XZrmjWuz5zsdij/farNl9 + zRt5rNiXuydHQw6kwybyqR2VOuzlNR7i94gln480zOKoWP5ZGMDkpmd7AnBhaCHOjy3Dwa5g5kJ36Ryt + 7NNNqezXjCndzN39hU4YYH7qZ44ezDNhNM8VmxkD99QswPGWVTjbGYZzHaG4fzAWd3cW4eOzbbDISbJA + fpoFSrPnorrIEj0kisMkl2Mklxv6KTyGvDAz6odtYwHYPRGCHWMh2NTng9FWd3RSsDdSxJj5xeZCVzSQ + 0DRT5LcU+RCeqBP/NknTUrjq0Ury1VnkgZ5iL/TwvS4G6J/QXegubULfJ/6lmyeIhhIjOTKMk9hPMfFO + FFHQ5qrQnSpHe6IMbfECitkyxgrtMfPQHW2BfmIicR6mk+ZhS6IFdicz2ZOgn7u3PMn5CiXOkbifKLTD + XrH0QIoFdmbOZZCwZAe1wt48GxwucsQpfvZUCQVn4XycKJiDk0XzcKzEBvvZ8XeQYI0l2KMrwhrNDMJm + DrzG9Qq0RqjQsV6DgQg9RqIoJJlYBEbCjeherUE9B3xF4DwU+89Dge8cZHtYINOdZCfQAvXLGFAZWIaj + NZiIUUszgDfGaDERocMAA0gPiWermBETZI8aXytU+hAsK7ytUOJuiWKXuaji+Vr8LLBxlQVOJlvhSXb4 + D0mmf7/RFX/ZaMLfp1zw1bgb/kbS/4cmDX7LZPMrkqtfsGP/nOL5wwxHvJMs9gO2wqvxlhJejp+P1xOs + 8G6yPT4mGfucwvm3JNS/z1Ljj8SfeNzviS+YyD7JsMF7afPxRuo8vJgyF0/HW+BRtsftKAvcjLDA9TAL + XAjltfH6Tqyai1Nh1jgbaY/L0RQ1JJv3M8k8kKHBjWwdLjHxHEukCAmzwlCQBbq8LDDob4GZZfNwONwO + 52Ip6lI0eIbC45d9nvjzBnd8vcVj1gDe5w4cEnACDhrxz31afLtTia9m7PHVJgdCgS836vDHMQ1+NaiR + DOAPO1QkqnK8XG+Hpyrn4naJBW6RID5aNwePN1jgbqsV3iLR/NmYEb+ZcsPvptzxh0lP/GbMFR+SbL7a + YIOXGmzxNonp+wMGvDtgxDuDzniddf1ctwm3SI4uVljiVOlcnOb5L7ba4QF+9+PTOry8l+TyOOv2nAp/ + uKrGP27r/mMA31Lhn/er8N0lFb4+I2YAa/GXowb89Ygb4Y6/7HfH77cZ8cUGLT4ZYgIkwX2hkm3/kwFc + bEURaMIXI97480wwvtq1ED8eXgqcJM4vAy4vwT8vB+D7K774xzVffPOAH759eAF+eGoZfry7Cng1HHgv + Hvg0BfhVFvCHfOB3BfjhszR893YMvn5mDX590QcfH9Tj9c12eHZkHp7un4/bLWzzRgs80TMfn+w24M/n + vPDVNS98e78bvrqiwVeXFfjmqhb/uGrAt5c88P1lf/zIa/nh0ip8c2o5frsrCO+PuuMuk/6NQiucy7TA + uVwLPFA3F69OG/CLU374nxvB+OujfvjqOVd8/RrP8zbb+lNn/POXzvj+13z+O4NkAH//FwN++JNRMoV/ + /MyIb9/S4NuXlPjHM474+hFHfPmgmAHsgK8v8flZGf5xWolvj2nw3WE9vj3MsbPHG7+Y8cFzPQbGARsM + hlugaS0RJUNzogfas1ejtTAWDaVxqCmNlQzgvJTlyIwIQlZoAEpjFqAyNghlEZ4ooaAsXeqA+hV26A11 + xAaO86OMmedJtK+1rsD1nlAcql1IsUrCGOmAjKVzEBU4F6EBllgfYoPYpTLpX2QF0U4oTXCVUEzRURCj + R36MBnmRgjRQ+AlRksi4kydms4WgN98H7SQ3zXythehIc0Vvlg/hi9YkJtL8YBL8FdhYsQDdFMedJJid + FJ/dKXL0pCgwwCQzxgQ2mcVkSBK7MZvkXWwuX+LLBOM7awAX+2GkPBij1csw0xGD/SM5ODhegL1DGZhp + i8SEMCwrl2J7exQm+F1d+UHoyCJBTvJFQxwF6HoX1IUaGU+1kuHbJowZEqsmCutWxtWm9TpUraQoXSFD + /TodmiOd0BztLJWt0W7oS/HDYEYQEYjeVBL+BA+0RIt9HHWoI7EqX2mHsuU2qFhpg8qV1qhcbYeKVbNm + cMlyS5SsnDWAS1ZZoWy1DcpX2bCt5qN08TyUE7UrbNFMwieWfe5krG8Nk6GB5/hp5u/s7F8rNK6xQzvz + QTfFf28CE7Mwlli2kmg2CdKZIUSA2K/GjeSAojvblaUrSz7OcZcM4Ea2W2OeMIEDMNK4FmPNYSxDMVK/ + FiN1qzDM+husXCahW+wZnemJSn5PEdtdmgG83Bo5q+xRsI4kcJ0CaSsdkSQM30VWiAmZj+gQSwkRC6wQ + vsAGYSF2WMf+FbrYEeFLFIQcYcvUiFimQeRSFaL5WvxiOVL4fib7byHboJyEtlaaPemM3jhXDMQ6YzSO + /YN9cSpKjolQkvyVczEeOh+bKDB2U5gdLHDF8XIfnK0NxvEqP+zKM0o/1mzOUGNzGsskOWbi5djK+L6D + RHYnBdkOjpPtax2wbZ09NvPxpvXkBBEKTJB8jcYoMJmsxcZMJ0yxb44kMf/y+AFyg95YGbpjHNEZ7YCO + eyZwZ7Q9OmMc0Mnr6U5wRH+iHIOJFNkJCozyu0fILUYphEaISTEjOVUrGdc/GcBbEgQUvEYZNvJ8E+v/ + YwDvY+46WqDH8bL/bQAfE+avMBRy7XEgf9Zs2Jltjc3pczFF/jFF7rU5ywLb88hBCmyxv8QBx6rV0rKD + Vzvdca3bnXHBA/f3uuP+PnfcGHDHA72uuNpuxNVWLW60ae8ZwCo81K759wzghyigrjcpccHsiGvNStzs + 1uJ2H8XsgAmPMDfdGXTBIwMU5d06XG5R4GwDeY9ZjiO1ChyoVVPMabG3Uo+9FVocqdazzZxwqdaIc2Uy + HEmfg6O87vPML7caFbjTrsLT3Urc7ZHjxR4ZXu6ywZsdlnin0xIfdtvjkwE1c6crfjbpJxnATzV74HqZ + CcdJXKfZRgMULo1rbVG5guNziR2qFsuk/WprxAzfABXKfBUo9VegJECOkiAlSoNVKBcm8D0D2CyWfV5I + ArzYFYMsB4NN6PdTo99XRd6gwniwDhsXkHAvMWJSbJchDOCVGnSso/APJYmO0KCR3KuJZL49U/wZ0Rt9 + Ff4YqPRHX5mP9ENCX6m3ZAA33TOAW7OdpBnAozXBmDQvwkT9QozXLWC5AGPix5MKxqMSDwwXuVNcBONA + 9yrs6VqGTU2BmGzyx3izPyZaAjHVwuObA3iMN4YqmU/yGCcoWMW/rcsTbVCVNLvXy08G8GSxJzaRQ0/m + umKIQqQnSYVO9s+OBMZNitTmGJMUF9uiPNC8nqJ/DTn4Ug0qQigAg+RoDlCi1W/WAG7yYL17OKLBk+Le + R3BLW9R7z0VfsA32rNHjfJQBNzmenkiww0vs/++mmPA+BfFrsXo8Hq7AVcaBows0knG7M4hjJUCNGbbH + NDHuI8Ogpx2G3Kwx7GaDEWLc1RaTbnaY5ndu91Rgnx8Fpa8Ou3302ONPwRZowPZgI7YQG4L0GFigR3kg + c54fc5+PLcJ4jct57SG+Snh5KeDkYg+t0R5qg50Elc4WGr0tdE6OcHZXw81bL+3/6+6l+bcBbNBbwmiy + hguP9XCXwddTjiBvBVb4KxEerEHqKmfkh3mgPMoX1XHM31HeSF6mQwT73bpADcIWu2H1Yk8sWeCKkBBn + hCxyQfACA5YtMyE20gdFmUthLlmD1tK1qMlYwHYMRnPWUvSWrGMfCkN/WTgGysMwWL4efSz7ykPZxwTC + 0FO+Dr2VoRK6q0LRVbkOnZVr0VaxBm2VPGflarRUr0JzzSq01K5huRLmquWor1jyb9RWL0ZdDR/XLpVg + rluGxvoVaDKvRrOZ5zGHoq0hHO2NEehoiERXQzQ6zTHobIhDtzmB3xON6pzVyIzyR9RSgzQrWhjApQmL + KG7XoiV3HVpYtuWtI0TJc+avRkfhGnTkr0Jb7kq05SwnL1qKrsyF6En2RS9zxGSsCYcyOe45Lh6q8sIj + ZYxB5UbcqdDjkQodHqbIfojC/bYAY6gwgG+WGXCtSIsLuYyn6UocTVXgIHXCAfKTQ9SVh9PUOMKxcYxj + RTIGMxS4mKnCVWqTazlaCZf4+Eymgp9h7E20xs6k+didZo19OQ7YXyBjTHbE3lw77M8Rq0U5MD7b42Cu + Aw5l2eNohh1OZc4awNIM4EYvPGj2wuUaF/J4Iw6WaDFDrdqTYI2GiHmoCpuPslArlEfKUBGvQ0WiAaWS + AWxEaZoRRWIWsDB/E7UoJCQDmPdQlj6LCvEDHO+rmrmkmnmxltcuDOAGin2z9FgBM3WYOc2BPMIB7flq + 9JRq0VuuYbzSoL9CGMLMgRLUGGQeGapWsj+Rt5RYo416tq3ICp2lNuitcsSw+LGx1YAN7SZspE4Q2NDq + LGGyxQkTzUaMNpr4OQMGzYyb9TqMNzpjU4s7tnR6YVu3N7Z3eWB7pwu2dRmwi7nkWA/zSb8ej/Ub8VKf + gZpIg/dbHPFRvS0+qbHGZ2Zb/LJVji96qd0GdPh5nxofdCrwRqMDXqxzwDPMP2L558fq2R+Yby5R+5/K + ZpxJtcNR6tNTaTKcTZfjfJocF9KZt9JlOM06OUEcoxY9kqslzzBgr5gFXCxWrXHCeKERA2LWbzZjfbpY + jUyGFurezhI9eiqd0FPNfHHPAB5rFPvxMfczJ25tUzJmq3G034T7hjxwfsgbZ3o9cbzdHYcbXbGfx+wX + yz43zJq//zcDeI8wges8sauO9Vbhhs2lTozjBkwXGrC5mDyI2MLX9tf7SLN/T3UuwumuxTjQ6I9t1R6Y + LnfFVIXLfwxgXndruQGNpcwXFUa013jMLv/M7+isYx6p92as8ERLlTuaK93QWO2OJoH/FwN41vydNYAb + GjwIHmt2ZenMGOKM1joX9PA+h1t9MNnuj02dwdjC69w3uAZHh6NwbiQZV8YzcX0yDzc2FOHKZAFODWVi + d0ccJurWoSk3BMXk5ulRLkiN9UBqkj8yGCNTU0MQnxyM6Hg/hEV6YPkaAxaSewYvcsDCxQ4IJ+fPSHRH + SaYvKsh3xR8mKxkH6jiuuzLtsKFQhv1VGvImYQCLZZrvGcDVCjxQKZaBFgawSjKAH60z4MkmNzzbKmb/ + euIu8WyHB55qd8PtRiOu8bhzNQqcqJKTiwkocJzlSZ7nDHGhQoFL5XJcLXXE/SUy3CxyxC1yvYclA9hx + 1gAWy0ALA5jPX8ojL8pX4PnCn0xfJZ7k86cK2NcZc+7k2OJ2hhVuZlr/xwDOsMahFMv/ZQCfLpUx9ihx + f6MWD7cZ8VinE57o1PG6dXi+g+OtzYTX25zwNsfvOyzf5Xh+u82AN9v0eKVZh7tm8rRaJZ5j/36t1wVv + DrnjjXFPvDzmjicHnKWtRC42qHCySmyFZoMNmfMxlDIfg4yXo7yPySIVNjLeiB8upxn7NpfqpCUeN+br + MJqtRnuiA+rItasi7FEpliaNVqEhUY8WcvROjtfuVJ4n2xKbiuZhf60tLjQ54OkWDd7sNOK9fje8P+yJ + Nwbd8CT57I16B5wVEy/IkS9R+z9ZYyWtsvYqY8fdJjkerVfheo0KZ8vFDGDmBWJXNrk5c8RG5oQpxs9J + XtMUc8Bkjg4TeYwD+W4Yo1YVHK84UoEMcs4UMZsrVIaYMJW0/+96yQB2woq1BiwlB1q6Wj9rAK/QYMly + FaHA0pVKrFijkcolK2XSPsBLVsuwglxyTbgKa9ersWa9EqFRSsQwD8QnG5GUZkIytXU2tX1egVju2Qe5 + BR7IznVGFpGZ4yQhK8uIFOrtZOa5ZJZpKYRkAKuQyRyYnUZNJwzgLOYQ3ls+X5uFnJAhN8UWeYyVhcwP + Rcxd5XnK/wJ5M3OpMIGrSpxQx7hg/m8DOM+EMrElUZxcWgK6Ml6J+mQ1WsTvAZk6DGTrMEV+upkxayfz + 94FKE44yfx8vE5NrmHvF8s/1avJ7HV5pF/1Oy9ivwAfUFh9Sh3zSIMNnLWr8qtuAPwy44Tfse68PGXB/ + syN25c7FQIwFaldZoHLNHDQzp/eV6DBUrsII89cU89XWGkccbNPgJPPM2T4NLg4w1w+pcWNYg5uj5BFj + 5BPDBjzK9x5ul+NWky0eaLDBrWY7PNwhw612R2oia1yut8S1Oiteqy2e61DiTeqmT5pU+LxOiZ9XOODT + Ulu8V26Djysd8DljxmfUQu+VcwyVcszlO+FapjNOJjpjS5Se2pI6JZY6JM6AigTm+kQXlKQKA9iFbcB+ + Rs5TnOGFknQvyfgtFEhxQ3GamAHsjfJsb/ItL2kfYHO2678N4G62bX8WNW4ec1GRmNlrwt46NxxqEtsD + zBrAO2pN2G52wU7Gsp2NbtjNWL2XOekAtdphvn+MOMX372OuOsecfabZDfc1kbvw+Sme40STD45Rjxxv + X4QTvatwuG8VdnctxdbWRdjStgQzzUuwo2k5djYsx/bqhZgu82Me8sQWsVUB89vBFjcey7qgDj3ZoMSJ + ajucrrLDhWoZrtdqcLuJ7dHqgjudznhULDNPTnCNuvQUY/PBaiNmyO2G89TSjLjePN5zAfNYEeuAuqqO + +qac+qaYGrw0Q48ajg2BqmzWcyb7L1+rog6rYr8U5m8N+60wf8Xyxm0F1HAlYnsAP4xWB2KA191d6IvG + DA+URfOc6w0oXO+EovXkZWF6VHPcmtc5om2t2I6I2jfFgNNZJlyj3nqQ3OEh8r/HCzV4iniOfOSFYjVe + LiXKlHi9Wou3m13wbn8I3p5cg6dG1+JSz0q2z0IMFfuhPsMVlewHAtKS1pkaPubYynRkac92t0djgT06 + SuXM6UoM1Kkx1sRxxlguVlqd6fUm/LC5OxibuxZhqNYPtbzXrHVWSFw6B1mhDihhjClPItdkWUwNW5pg + YG50RmOOWHrajzmX4zvTldzSiLJkHfmnCrkxMmRF2knIi3NAsWQAa1HO6ysl1yxhWUxuWsz4U5qsmDWA + GVsakizRkjgPnQlzyHvnYCR1LiYy52Im3xI7ySsP1JFH15NPc9ztI/Y0WGEXy+2M59vrldhYYY/RAisM + Z8/HaNocbGM+OFpsj6scZ4816PASY8e7zFefsp/8stcVv+hzxccdBrzB/vWTAfxshS2errDB0xyjL3Cs + vljmiFdKlHj1ngH8bK0bHqx0xpkSE3aLPwBREwgDuF0yf7Xkz3rJAK5NYv9hfhJ/1BRL9zZle7LOPFGX + 4Y7qNLZZspNkAM8uAa2dnQFM3ZscKozeeybwOiUS1irvlXw9VCMhKYxYp0b8aiXiVykQt1KOhJU89r8M + 4JgFVohdaMnH1khZ4YD01XJk8ZwC2esUbGOFZAZLhjDzU65kAmuRy/ySxWtIXeOA5NXWEsRKFqlrbSQj + OCPcATnMvzmxSmkmcHGcCpUJjOVJcnQwL4o/XWwlj9xb74lDxME6cldyyv2ssz2McTuLdYQeu0tN2F/m + goPlzjhS4YSDYn/gPEfmWwecZ3vdaDbgiQFPPDHoiavsswcLrbAzzwrb8sWKujJsLdZgN8+5j7liX74W + +zN4bLI1ziRb4sE0ezxFfvRagSPeKZbhA8b5T2r1+KzNDZ91eeEjaotX2txxg7nlDLnSEWodMSN5Pznt + jhovTLMcK3fBQKEO/QXUO+TzQ4UqTJQyXlYZsZ2xbyexXayOQD20jTF8B8fqToEatYRt5A/bGae2sNzC + 55uplWbEa2Z+ptUJuxm7djFmbuF5Jsl1RshzhnOM6M8wojlGjpow8p0IOVoTmAcY71uz3NCayzgu+hBL + 8ace8ZtubZaYAfyTAaxGN3XICGOJ4FG7aww4YHbCUcblY02uswawWP65Qaxo44TTbZ442+2H84MhOD+6 + DEd6F2CGvH2ggN/JMdqYLEcz+3YHOU4vc7MwfweYx4dyTRhhLtmQ54rtJT5s4wWM98sY95fjclc4nt6c + jfePm2GRHGGBlCgLZCVYoChjHprKlegyG9DXTOHX6Y6JHi9sGPTFzHAAdowvwNaRhdjQ54+RVi90Uww0 + lzmhsdgZ5kIBCoZCigiiuVAsfSD+deKE+kwTGrKd0cygLpYlaGGlNJMItQjke6BNbNae54YuJlex/Gi/ + WLYplx2VjT7BTjfGyurnQG7nzTbGOsIs9j2jyG6IsEXT+jlojbRAb7QFRhPmYkeWEPckzdlzcTR7Hi4w + OFyukOFKhSOuSqWcxNIGR7LmYF+aBfZlWlD8z8EBEpBD7LzHipnESgXZJgkvtpTM31PF1nzdHvtJ1qcp + QgcirdAWStG/1hrVJJE1JJFmMSOMA7UrTI1+YQJHsMNEkhiv12OAgaBtmS0aF1iiNmguqvwsUOpJeJHw + hMxBxwobDIcpMB7F+41SYVzMBGawGeRxnSuUaFos5+dI5vztkO8+F1kuFsh0skC60QIZpjnIdea5PCxQ + z/OOr7TA8aT5eJLi/6M+F/x+gzP+ssGEv08646tRF/yt1wl/atbgjxQ5v+PA+A2J/BccQD/LVeIDksa3 + UqwlvCHBCm+RtL+baouPmaw+z1Hgtzkq/IEd+E9ZKvwPCfcfiF9RgH1KofAO+9DLsRZ4jkTuCbbJw+st + 8CBxf7gFrq6zwPk1FjjF6xMG8LE1ljgRZouzbMsLTEaXEhS4kqrGFQ6SMwzUB2LtMb1mPrr9LdDKe+v2 + tcDUYgvsZeI7HWOP68kqPJGvwc973PDnjR6SAfyP7e7453534Ahx1Bk4bMC/Durw/V4Vvt7mgG+2OOKb + GQ2+njGwToz4zYhOWgL6w3ZhACskA1gsAf14tdhzZg5F4nw80zofL3Xa4e1BFT4e0eOX40749bgLfjvu + hl+POOPdZge8WDMPL5pZV51KvM/zvdsnTGBnaXmb53uc8GizGpeYtMRs8uMlc3Cy1hoXKGQeHNJwIMrx + yl4HfHBMhi/OKfDlDS2+e1A1awDfZnlDhe8v8/rPqvHlSR3+IvbRPeSKvxxwwx93O+M3m3X4bEKNjweV + eINE9/lKazxZOI9CdC6eLrHG+50m/GrcB3/eFoKv9y7Gv44tB+4jLq0ArizBj5f98Y/LPvjmug++ftAf + 3z22GD8+twr/fGkt8HYM8HEK8ItM/Ov3BcBfSoA/l+Ofv8nHj3z925ci8MfrQfiMdf3WVgrcMSvJAH6k + fQ5J31y8OGqH3xz1wFdXed5bfvjxlie+va7F11eEAazGN1d0+PayK77j939/eQF+uLwc35xait/uDsRH + Ex54uUOP22V2OJdlgbPE1cq5eIH3+rNjXvjD1SD8+WFfyQD+6lU9vnnTgO8/MuH7z0z47ld6/ON3enz7 + JwO++wtf/x+jtCT0D78w4dt3tfj2VRW+fU4uzQD+6pbDfwzg+2T4xyklvrtnAH/Hev7rbg/8eos3Xhty + wSWK/8mYeWgPZZ+MlqE9xRM9+evQURyPxrJ41JbGSQZwbspyEqsQZIUFojR2IcpjA1Ee4YnyNTpULLFB + 0zIrjITbYVcS+0WZNx5uXIAn+9biieFInG9dgW3FvmiKIhlYOg9xwqQLskZEiC3ilvG1cLH/rxtJCcks + UZLgisI4JyZ6A/IZbwojNCiP0qGOAqWT4mKgMJAx1RsdJDStJDJtCUZ0ktT0UXz0pjNWx5gozD0xmh9I + seEj/buph0S6J10jrbbQQ/I3SCE6kW3ChhxnTPB9MdtyS6Entpf5YwsxawD7Y7xqETY1hWJnbxIOjOVi + /2ge9gyk87UIirilGCpbhB0dUZIZ3JEXiJZ0sV+gJ2oi3VG5zoiq1VrUr9WgiXGvZZ0KrSRUzURbhBYt + jKl1JFr1axSMs3q0RJoY902M/wY0R/Ce4tzQm+SFIZ5zIMUX3fHuaI0y8rMaHiNH1Sp7VK4QJhNj9kob + 1KyxR/VqO5SvtEbpciuUrhBLQFuhaKUlCsWMYNZ90eK5KFsyH9XLrdFIUiZmJffE6tEdrUU7Bf7sDGCx + 76/VLPhYzP7tYgzvTzRgKMUJfSSRXckmkk8nNJOAN0rLgRCS4fsf1OXO/gtYCMF6gVwfNOT5oa9mOYbq + V2OgdhX6qldKS0L3lC5Cd/ECdBaFMJf6oJbtKczfHAqYHN5b1gqS+tWOKGQd5rK+0lb8ZADbICrYEhFB + 87E+0BJhQVYIDbbC2iAbrA0mFtgjjLlGIFwYwMu1iF6hRuxSktvFMqQucmSfdGAdyVCxhqJpvRbdcS4Y + SnTDaLwLNiY6YQv715YYJTaF22Bi7VxsCLfEtngHHMwy4GSJB06Xe+NslR+Ol3pidy6JaIYaMySlM2lK + TCfJsDmOQp/kShjAO4QBTGG2nW21lfe2mY83hQsDmP2RQm2U3zORpMEU63Uq0wljqXoMc0wNkuz2xsnZ + Thyj0RR20bZojxKw43OKLeaPngRHDCSxbxNDwgROdMSgNAtYhuFEOSaYi8SS1TM8n5iVLIzfn/D/Yeyt + 4+M60qZRmcQaJo0YLcm2bJllyyxbFjMzz4yYmc1sy8zM7HDs2HEcO8zMG9hsaJPshqlu9ZGczb7v9917 + /6hfn6EDfbqfp2rqdPdqfmc599UnGcDWWL3YHlsT1JIBfCCfGDaA95LcSqN/0+ywK3VolNmWVFte82is + TBiB5cIATrDCSsa29WljsCHdBlsybbG7UIGjlXqcbfDAuSZPnBMGcLsPLpFsX+r0weV2T1xocpWmg75c + px8ygGtU0pP0D1I4PcwcLwxgMT302UoFLvHzK02Mpa3OuJci/N52F2kk8H0tzrjQoMbJKh7PIsM+kwzb + Sp2wuUiGtblyQkkSL8c2kvNDJKrHy/U4Rg61n+d6mDhDMXcfj3G1Xo0bwgBuYS5rVeC5Fke82mKPN9vs + 8V67DO91afFevyfeXRaAV3uC8FitDy4UuGAfxfrKcAVa5spgEn1xGjHZEUWTFCieoEJxkBqFASrk+iuR + E6BEdqAcOeMUkgksjQIWBjC/Yw7UoHY841awi2QAd40ndw3UoT1Ajc5A8shxFNQTiEl69IZo0TFVi+YZ + 5GRhJNAUbiYKKtNCJcwRWtSyfzaIqc8KAtjX/NGY64vGHL7O8+X75K2MfRYKyCry2nq+7i4dj2WWECyv + nMJyMvrNk9Bnnoi+0gnoLvBHpzBsy8Zha+MMbGmegZU1wRioHo++mvHor52AgRqBIPSax6Kr3J/H9Obx + 3FCZrkVpghzl8QpYSPBrWVdiSun+bO4v2wcryJ17Eo1oYzttiWM/ZD+ojlAzb2hRsVDERHLuuS6MdTrk + sz7zxzmxPp1QESBHtT95tC+3vZ1Q5c3XPrx2PzlM/vYweY9Ay1hrDE7X4vRCPa4yB9ymWHuO/eSNWD1e + j3bBc8IAJj89O1OJ3bxPm4O02BBEIUWsH6/DmnFaDHD/nR526HK3QQ/LHg97DHg6YsDLESu8ZVjF4673 + U2OdjxqrvNjXvFUYIPr4Xm8A+T/vWWMw85mvA6K9mP+8bBHqaY8QLxkCvJXw9BJr+jpIpq9CawclodDY + srSBSm8Pg5tCMoE9uW93LxVcPWTSFNDOBmvJAHZ1s4enhxP8vJwQ6CvHZLavsAkaCnQ3pM7xROY8L+Qs + 9EUat5eGaBAWJJdM4tCJbpgW4olJxPhJHhgX4sHSFVOne2DRwgBkpUxHWe5slGfNQG7cOBQnTERF+kw0 + 5M9HS3E42kqWoKloPhry5qKxYB7q8+eiLn8O6gpYChRxm6gtnoOaojBUF81GReEsVBaFwlIYClPRDJQV + Tkd5EY9TMA3FBZNRlB/yHxRORFFRCIqLJ0soKZ2C0tKpKGf+KGfeNZXNImbDXB4Gc9lcVJTNQ1XZQtRa + lqDOEom68qUw585DdvxUJIcHInVRILKXTkRZInN29gI05Cxk+1zA/LMQzbkL0JLLMm8++8lc1GeFoSY9 + FLVpoahLnYaG5MlojAtkzvRCF3P1BuaHY2y/F/K8cE+uq2TyPsR4eX++FvcXDpu/hGQEFxpwhZ+dzdbg + KLXfngQFtsfKsTmW4j1Oh03sg5sStNgcp8RgnBN2sa/sS1TgCHPJCcbik4kaCUfjVTgQJ8fOaAdsjbLD + hmhrbI63xWCKE7amM7aly7A1ldouxYEa0Ak7MmTUgUSSI3Yn2ONAohNOZahwqcgF91kYf03eOFniin08 + v8FsNQaomeojxzB+jEbBvNHInWONnAVOyF2iJjfTIzfGGXlxRuQluLA9GCQDOCtSI0EYwHnUOmLkRQHP + dcgAHkIJr0EYwJYUHSoo7oURbEpmrEpkP02g/uVxa9Mp/HkODbl3jWAtWlmPQ6BmLhbGMDVpvgy1Obao + zhyDGmrfhjx7NBfL0VGuQU+FHn2VzuivNg7DTUJflSt6hflrNqLD5Ix2E3Us0WPh51WeWFHHONTgi1UN + PoS7NF30WuaYnS0GnOhgful0xeNtLnihSYtXa8QIMEe8U+6A95lnPmSe+luzDu+1afFWiwqv1svxXKUT + 7pic8Gg5dZ1Ji4fNzri/3AWnczU4JKbvjmUejbTF/hgHHOH9Ph4/ZAILM/gwS2EA7+X935Omwa4MPbZl + u2Aj46gwgPuzDWjn+w3JcskArkh2QjXrriGHcbOQ/HfYABZTQAsDeLlkACuxnrpwa5MGe5krj3QNGcBH + mIv31Xpgp8UV28tdsc3kge1i6ue7MHnx/SFIRnD5kAEsmcDl5DxlPthU6IH1ea7SVKrCTBEj6gTW5rpg + W5kfdleOGx4BHIJtzAtriz2xMt8NAwWu6CsSBjC5brEr6grJb/MJyQD2lMxfMRJYmMG1PE5V8fDo32ED + WAI/rxAmMM9HQDJ9/wJh/lokeBNeMJvdYSLMvF5LOfl2KblsKfVDBfNPlQ/6a/yxvHosVtdNwMa6KdhZ + OxuHmsJxqiMGFwfScL4/Hcd7krC7ORprKxkrsqeiODaI+sgTcQuIiAAkxoxHQlwwYmMmIDpqHMIX+2NW + mAsmT9Vg4mQ5gifaY/oUJ4TP0SJpqQuyoo3IZS4S01gWR9mQW9uhP80BW8SD/v/LAFZKa/9eKlbinmI1 + 7i/R4qFyZzxS4Y5Hq73weK0XbtV642adF67VuuOKxYAzYvSvMH0lA5i8SGyTEx0odCR/ZdtjfzrF8mye + Ey7kOkkG8D3E/eR7D6c54hHGk8cYX4QB/GSqE55Ik+NOhhK3MsXIXzluZClxje9dTZPhYX73wWQ7afrn + K4m2kgF8ShoBTB4YOwY74oQBbIe9vL7DuTKc5vWcN6txb5VBMoEfrGFfYX96tM7Aa3HG0zVGPFfDfke8 + yNdi9O/ztQY8Xa3HbYsat/jbJ/neS2JazR4fvNQ/ZAA/2uGK+xoMOF+lk0Y6b811wMoU6tR4a3RKxq0D + +jPkWM5Ys4J9cpVAHnN9tg4rMrToTWEcIoc2SwawPQrnU28xDlYwztUzZrcxfvck2mNVGjluDvljmR0u + VznhSXLT1xqNeJPn8xb72Ktd7rjdbMD9jBNnxaxpSSNxUYwALh6DJysd8DR/87hFznuowAXWxbF88RC1 + EjuITckKrBw2gAeoK5alaDBAjdFPDGR4oI+atUusB5rkidzFGiSSd8bOdkLUHDkWzxXTP+sg1psOm+uK + 6dSjwvydSkyZqYMY/RsyVUnIua3CjFlaTJup5mdyhEyXIWSmE79PjjBbjhlhcoTOUyCMmmxBuAaLl2qx + JEpMB61HaiZ5Rd5YZOf6IzXDE4nJRsQnOSM+0YC4RD3i43WIpuYWECbwkAEspoBWSyZwMvNZGnNFJvOC + mAI6k/kujfktNdYRyTF2SFw6GsnMR5nsE9lJDshPI/djW8tjDBXIT1WhkL8rzjKSR7Bvl/r+aQCXpIsH + lcTakfwNUUTdY2KOqqIOEgZwW7KWdanHKsbXTXku2FFgHJ7xSMU+IaZ/VuBBswa32dZeaDDilVotXq+S + 4w2LA940UQtUOOFj6pTPmCf+2eGBzwa88EK3FpdqbLEtcwT6oq1Qv2gUapbYoC2T+q6EGrpYgS72u74i + e6wupY6s0eBgA9tosxonWoUBrME93To80M8+PeCKR/tccaPbiEdaNHiYeeVqrRzXGpW4ztfX+JsH69hP + axzxcJ0MN+qUeKJRjVfq9fhbjQ5/t2jxEfXNe8yPb4mpn9nn3y9R490SMeWvM57Kp65iHZ0i794bZcSa + cD0aIjQo4/0tjTQyFonRgu7IjXdFToI7cpI8kJvsjdwkX8kAFsZvZoyAO7LjhAHsg0Lq99JhzW9OcUNV + CuNrsg4tacIc1WB5th5r812xschNyie7Kn2Ze7ywqcwNG5kfN1rcsZlxbLCKYEzeZnbDjjJX7OZnQwaw + K45UeOBEjZdkAh+r9pBeH670wsEqP+yvDMBB6pBDzVNxoH0mdhPbW6Zje2sotomHVqunY9A8GZuKg7Am + zwdr2E42sN1sNbljd5U7f+uCI9W8H2YVY6Yjjhc74gzj5iXW2/3kC1erjLhW54yrzPcPtepxsUGPw4xB + Owq1WMN73MWc3MS83ZDE+JGulwxgafBYuoc0/bMwgHOJomSxHq1BGqEuHlIoFOavAOtKGv3LfiMMYEuq + AY3cR0eBL3pLAqnDgqQZnJrZ76uSvJHHe5bFfp45z4DMOeRjs6gjZylRNot8ajY1ymLGvlgDjrBfXshw + xb3sJw/yPB/JYowlHiPfejxPjTsFRKEaT5dq8RzzzfMtQXi2bwau9szGKWEAUwN2sJ+Lmd7yEt2QT4jr + kUbVksPlJznxtQNKGP8tzBt1+UrqAjVahznZ8jqxJIcvNnYFYUPHeKxrm4S1LVPQbQ5CGa8zSRjAU0ci + hTEshzwznzwzN5LXs9QgLQ1XGCdGHPvBnO6PshRvFMS5Ijd6aAaajAgVUhfLkbTIQULaUidkx6h4Xjrk + MrZkM8ZkMv5kUPNlRlFvR8tRKAxgxhfT0lGwLBH/f1qhiWUX++xAvBXWpI7EZsb13Yzru0y22GG2JvcZ + Q84zBpuJ9aV2WFvkSC5mg+6UUehOHIW++FHYmGqNAzmOuFiiwnXyvmcrdHiN+eld8sm/NbrigyZXvFGr + kwzgp0uZU4sccKPAFtcLbHA93wa3cq1xJ98RTzEGPcM++nSZOx4v88B9JW44nmfElhQVlicq/2IA62CK + N8Ac7ywZwEVRBpRQ05YneKBSGOaZY8m5fam93VEojf4VS+0ZkcZ8MTQFtBKxcxibGeOFERw9V4WoMIEh + Azh6rlZCzDyCfEWYv0uZIyJmyBApzF+BaY6ICLFFePCY/zKA42bKpPWAJYQ6ISHUEak8XiqPkTKH94zH + T5+v5rYSCWEyalVq45k2iBpGdKg14sPsESdGAi9SIG2Jiu1BjTzG8eIoFcy8p42M4X3kxuvICwUn3Wn2 + wQ7BVVlfg0Wu2JTrjA05OqzP1WMjY/zWPDdsZ/zZXcB4T768I90R+8l1zpSpcV+1M262e+N6qxcuVGix + O8Mag+k22CRmuCNX2JirxTbuU/x+a5oaW6mndkeNwZHo0dII4JvkSM9lyvBKtgyvs/2/VarD+9XueK/R + G282eZPLuONSnhInmNsP8Zz2Frpgj8kPm02+WF3ijb4CN3TmGNBBDtKVyXjJ8xsQs5IUO2Md46M0Q0Kh + HmvYV9eLdYCLqReJTeSBAuuLVfyOmvxahbVsf2vIEUW5ie1wW60rdjZ4Yme9DzZXemANNcLyXPKILFe2 + XyMaItWoWCA8SDmqmOOronSojnVBdTI5dooXLOKhC5biv90yMeBn2ACuTlKhMUWJbsYU8TDdYKkzdlW4 + YR81137GZskANjGvUv+IZdgO13jiKDXWsdYgHOuajD3NwVhn8ee18hxStaikJq6MVaCWPKCB97aFXKeV + MbA91RkdyXr0k1esTWH95/thT8k47CsejxNVM3B9WTxe3V0CqyWzrbAw1AqR86yQFjWaCYkCiUKyniS5 + pcoDnayA3hZ/rGgNxOquCVjVMRH9TQyq1b5oZkKq5U2oosgyZZBQSNMzuKEszROmdE9YMsT0B+7sTC4o + imVQitFJC2sXxxpRFO/CwO0qPZliIipYSZVJRtSnGNBMctPBZNBLcdTLG9yZqWOCUJFMylAini6cQ4Q5 + oniWNSxhVqidb4XuSCusT6VAZDA4UmiPE4U2OF1gjQtFJJokD/cwcNzL5HQPk/qFfHuczByNw6mjsC/F + iuTaCvvTCfEePztGwnGcweoIA83hPAGxFrATBpMd0E2h3xQ2GtWzbWCabYfCUBsUhNqiKNRBMoKr2DEb + 2WE7FqjRuVCDPqKHnbhjlhNap9ujIWQMasePQMVYK1QEkPBMGoH2GQyKTEC98+TomytHJ4NLE4NA3VRH + WCiAioOdkD/OEZlj7ZHkOQrRRiss1vK+qa2wRGeFOL5O87BCoR8DsjCAY0bjRqkGbw8bwN8ud8F3A274 + vscV/2p2xte1enxTSbCxfcmG/Y8CAz7M0eAdCpLXSPRfT7HHK8TrFDNi+/UkO7yVZI8PUmX4NFUhjfz9 + KlmJr1PEthyf8rP3Y0fj1QgrPL3YCreZHG4S14gHFlnh4lwrnJllheM8t0PThgzgPaGjsGeWDQ7Oo6Bf + 5IRjERT0MSR1TO77mYw2LbDFwIwRqGMdVXhZocHfCv0hVtg0ezT2LbLFaSalB3kuYm2Azwfc8d0aT/yw + wQO/7/D6jwG8V48/duvw23YVftwoww/r5fhpgw4/rjPi25Wu+KyPSaZN9x8DmET1lolJpZKotcHjDfZ4 + ul2GF7vUeL1Hh7d7DXi/1xkf9bjg0x4PfNLpipcr7HG7eASeLLem0JLjlSYVXmrS4uUWZzzf6oInml1x + lQTpdIED9qSNwN7sURSTdjhqVuJiM8XbgAK3NzjhpR0kngfk+OcZNX64JMcvV2T4414FfruowM+nFfju + iAr/2q/B17t5/7a74sstrvjHBiM+XqnDu70qvNUmRgDb43FhAPMY19JG4rE8YQA74+N+YQCPx4/bQ/DH + /mED+IwwgEOk0bffn/HDd5f88f39Qfj5+hT8dns2/nh2PvBaFPBuAvBJOv74Kg/4dxH++Fcpfv8iH7/9 + LQ2/vLAUX98Tgo8PeuKNQT2eWyXDrU4b3GgZg1sdtnhpNc/3WBB+u2ci/ng4GH884IdfLunxw3kVfjhH + CANYmgbaGz+d4rFPBeO7g8H4+5axeHu5F55rMeL+QgfJAD5CnM4fiZtdcry5ywP/OBP0HwP4aT2+e06H + H17V48d39Pj5QwN++Af3/aUBP31NfOWMnz93xi8fGfHLmwb8LEYBP6HCT9fl+OEBGb6/5DRkAB8dNoD3 + a/HrHgN+3eWOfw+KUda+0jrA91casDnBDq0L2S6FkRTjiZb0MJLWCFhyl6A0Nxy5qXMkAzhl0UTJAM5e + NAG5i8Yif74nimZrUMz+XxUyUlo/dB+J1n1FYgqySXi+Zz6eHliCB9rmY3vReNQuViJt6hhEh9ghfKI9 + wsUawGIK6QgKikhf5EX5oyDGn8TPFzlRnsiOcEV2uBH5RMkSN5ijPFAb742GBG8SbC80xrqhPsoFjZEu + aCapaacAaYn2ZPLSoyZiaA3MNsbjzhQX9KQLOKOLArqD5KmH5Hxlplj/1x29cWoMJOmxLtcbW0pITouC + MJDjh97cIKwyz8Su7gQcWpWNfStzsKM3A5tb47DcMg/teZPQljsBGxsWoV+sV5gm1q31QfEiNxTMIXmd + oUHeVAVKZ6hgCVWiMlSB6lkK1JD4iCmhaxboUTlPg8o5alTPZSKdr0cVibxljgZmEjDzbDVf69EZ54vO + WF+0RHigbiG/Q2JmIZkqJ1kqnW6Hkuk2KJthy+87oJwoZOwt4HvCAM4TBvB0iucpo5A+cQQygq2QP3kU + fyemfiZ5WsgEu0QvoXGhmnlHwf3bQ6wBfBe18+VoJllsjzGiO94NHXHuaGHZQAFQk+jCHCcMYPc/DeAS + MU2IeFIszXtom4KxJImvWZam+KAqKwhNhSFoKpiM+vwQ1GaNQ016AGoyAlFJgm8hcRWjf9OZDxN5LcnT + bJE60wmZYQrkkIimUdwkTidZneJAoumAxRPssHC8jbSu9LzxdphLzA6yRSgxPdAGoePFNNByzB82gJfM + IImdqho2gB2QPNke2TOYe8OG1hxtXeqKXoregSg3rI02YmO0ARuXKLBuoS3WL7LBhsUU9zFOOJjhghNF + PjhR4I2j+Z7Yl+VGUqjDxmQN1rKNrYmXSwawGC289q8G8GwZNjA3rmNeXc1rWjlPiRULNFgWTiIboUZf + pBb9sSQ6JPR9RC+3O6M0vP9KNIbL2W4cUb3Abhi8jwvt2Hft0RLpJJm/HTFiFLATWnieTTzf1nA7dFIQ + 9cYqsZx5aFUkzy1CQciwlvzjrwZwr2QAj/kvA/hgvjMOkNj9nwzgral22JRszesdhdWJI4lRWJE8Cqso + iDak20rYkmWLnQVyHLJocYIk9HS9O043eeJ8mw8udfriQpcPLnTwdQvJcbMbLjO+CwP4SpUKlyqUuLeW + OeWuAVytxgW+f1l83qjHPc0GXGFeuixGArcacS/j67kGMWpGwePJsavckcTYAatzKYQz7dCbZovlGfYk + 8jLsIzk/Uq7H0WIFjok/P0sUuEcaiaLFtQaK478YwC+0yfBmB/NZt5y5Uo0PmWffF8slrAjEGwMTmVf9 + yctcsYcEdUW4inxKyT7myP5PkO8UTBTmrgaFgWoUBGiQM3bYAA4ixikk/GkA8zvCAK7g92oDtGgT5u84 + Z3SPYzvga2EAd/E7fePIwyao0D1JjbbJajQy3lSFirghRxn5WfmCIQO4mv2zLsMbjeKp8cKxqM/1RX2W + MIDFWkp+qCKZNsXpUZFoZD/0QAfjX79pEpZXTsWyiqmSAdxvDsEy02QMlAoTOAADjJPraqdifdN0LKuZ + iN5qvl8TjB6iV8J49FYGobsiEB3lY9HCnFCb6wIz+4clRctjalFH0dGa5kZO7I3lmV5YTn7dR1HRkSBi + NONSLOMi+41lvgzmeeybjJWmMArcaWrkBjsiJ5CxLsAB5rFO/zGAfWSo8Vai1pex00/J9/i5uxVavCnm + QxQ4PV+LmxTOzyQ64uU4YQBr8Sbj2fPs648sNuIs4/a28ezrQRRQwvydoMeWSYwBEwxY6StDn6c9+r0c + sNxXTrDf+lOM8zgD/GzAW8bPBOTodpeh2WCLOp01apxtUOPpiIYAntN4HZI97BDhaoM5rraY6mKH8a6O + 8HWTw40QUz4rNDaQqW0hV9tIEK8VWltoDDIYXOVwdRdQSGsES2sAG22lKaBd3ezg7uEAX2EA+ykwKUiN + WRN1iAp1R/wsN8RN1yN2mh5Lp+iwYIISMwKdEOIvw+Txzpg0yQ0TJnkgcKI7xk5yR1CIOyZP98KceWOR + HD8VWclTkRk/kXpqHGP6DNQVhaPFFIP2qgQiHjXFi1CVPx/1pUu4vRBVxQtQXbIQNSWLUFu2ALWmRagz + c9vE98r5efkCYj4sZfOIMJSVzEZZ6WyUFoeiuHg6CoumDaGQKJ6CfKKwhNtEUdl0CaXloSgpnUmwLJlF + zOZvw7iPMJhKefyKCNRXx6CpJh6NlTE8jyiedwQaipaiiWgtjkRXWSx6TPHDSECfOR79lnj0WnhtJUvQ + XLAIDbnz0Jg9j31lLloyQtGaHILOeLbvSG+sIe/YSz14ItMDl/M8yO1c8AC1xwNixC+FusB9BSyLWBYx + VvGzsxT1R9LU2EP9tyVOifXxFPSJYuYIF6xMdpaWD1iboMAWCuAdzCN7GYcPxWtwRCBOgwOxKuxhjN8W + 5Ygt0Y7YEGuHjQkO2JQiw2bqhy3UNMIM3pbshB3UMrsyFdhN7BJTRsdT97E8nq7C2QIjLpZ74ixxpNiI + nflarEuXoTWKfG7JSJQuGo2ChTbInW+H7IUy5CxRIStS/OGmRy61b64wgGMNyGJuEn/AZS5V/8UA1qEw + kWD5HwNYS55AgZ/mjAoKenOyDmW8PlPCkAFsSnRiXFCiOp39N5PxjPXUUuCM1kLDMHRoIZry+Tnjd3UW + eUom+1aOAxqYX5qLVWgrZXw06dFlYbysMKKnkryv0k1Cd4UruswuaC9n3CnjfgVMjDdmD3RVMPZUe6G/ + 1hd9dT7oayAvZB5a1mTAYJsRhzvccKXTHTfb3fBMkx4v16jweoUc71gUeE+MtKrR4l1qpDepf15tYr6g + bnq6Uk7tJcMj5SpcNevxoJk5yuyGM2wPR3iNwgDeFWmNPUupGaOp0ckXhAk8ZAAzfyUqhg1g7V8MYFfJ + AB7INqCDbUisFVbFuqvgPRUGcL00DbTznwZwd8XQqOflVTqsrlFjQ70aW1t00vrGhzo9pTWADzd6YF/N + fwzgrSYPDK33O4QdJi/pD7W7JvD2ch++P4St5d4YLPXBlkIPbMxzwwZhAmcbsS5HwAVriS0lPthhDsBe + 5oh9zBWD5f7SiKvluW7o4/f7CoUB7Ml7R05Z7IKaIiOqhRnM94bgxZji9efUzxWEZdgANg8bwBaeRwXP + R0AYwBV/RYUvzBKGDOByC7nqsAFsYluwFJNT85hNYsQ020FvtQ/6K70kU7qH57Y835/nPBlHmhbhXE8i + zvcn43RvIg61xWKwdik6c2fBzNiYsdAXcXM8ELfID4mR45AUG4ykmAlEMKKWBmLePHfMYAyeRN45bpwN + gsaOxmSWC8lt48m7M5aqkEOeVhxpg3pqsoE0RwwWqHGE9/AU2875ch0ulqr/YgCrhg1gvWQAX+U1Xed5 + 32Q7vlnjjRs1Xnio2g2XLAacKhPTPytxqEyJA8MQ690dpBb9vxrAOU64P8sJD6U5SAaw+HNTGMB3GF9u + p8rxeIYSNzOVuJEhxyPcfpjx54FEB9yfKEb/2uEeYQDzOs6n2OM0f384yRZ7xejfuwZwCt/L5nGLlLw2 + Na5U6HBPNVGpxn2VClyt0eFmnQF3aoZM4GdZPletx/M11OU1QwbwExUaPFGpxbMNLnit0xtv9PnhlT5v + PNnjgRviocAmIy7XOuNkhR47WWfrMh3Ql2SHbh6/h+fUmy5GASuwPIe8OFeNVeS5YhTfigyNZAA3x8hQ + GeGIskUO0hJGhfPsUBEhp/ZUoDeJ++O1b822x4F8W1wg13ykRoGXGvR4h8d9l7HivS5hApNfdLjg0Vpq + 41JbXMmzxoN5o3Cz2BpPmO3wdAXrlXHk4TIFLrIujuUy5mcpsT1ThQ1JcqxkLFguNCrzwrIUHQaoZfup + XQeyfdCT5Ue97oeKBE/kUfMmzFMgmvoico4S4XOpd6gn5851xqw5LpgeZpQM4GnCBJ6pQ4iY7nmKHCHE + 1GkqzJylQygxbaaSuV/Gz50wifx1MrXRtFlOfxrA8xaqsHCxGuFLqaNi9EjL4LELAiUTOIX8MS7BGbEJ + 5BrxBkTHaRETo0ZklAJRREz0XQNYmL9qJEgGsBqp5HuZKQbkphmQJ0zgBGq8KFvELB6J2PARSGQ+So+1 + HTaAZchNGRoNnMX2lsecJ0YBS2sB57NPM97cNYCLhg3gnCgl8qNUKIpWSwZwhTCAmZ9akzToJhddyRi7 + KccZO4h92RocYns4LaZDZ1+7wXb5NNvQK41GvE5t8EalE96y2OEdky0+rHTEZ3UqfNWkw7fMEV8OuOPV + XhUearZj/xqDtckjMMD21psmR1+BFr0lKnQWOaCr0BZ9RXZYVeaI7TUaacrhA3VKxmIlzrZrcG+PAVcH + XHBzuTvurPDCnQEP3Op0xs0WLW4xxzzeqsetNgMeYynWpr/RqMLNZg3uNOvwLM/ldTElda0Bn1fq8Sn1 + zUfs2+8XE9Q4wgB+q0SHF5lTH2euuJyqY84xYHeUAasi9GgkzFF6mMhtSqmDC2PdWYfukgGcRx2fn+qL + vBRhAHtLxm9GpNt/GcDFfxrAjMspLszpBtQz14sZK/rFw0G8R5uKPbC5ROQZnyED2OyFTYz/G8vdsLmC + n/1pAIvvuGF7qQt2lorle4w4YHKRpn0+wRh3stZHwrFKavBKHxyu8sPBSn8crA5kXU7AkfZpONIzG4eI + A91zsK9tNrZVTWE8n4BNhf5Yn+MpTcG6udAVO3kcaY3KaiOOVRlwwqzGacZJoQuFmXePMIBLNbhm0eM6 + Y8/1ZjWutVKH1mtx3KzELsbqdeyz3eQxjXGOqEuQoTaVOkcYwDlDBnBRkhE5cTrkxutQwPaXT06UR06X + y/4gDOCSJANKhg1gYf4OTf9skJaW7C7yx3LTeCwrH4eeokC0igc/UryRH65DFrVR5jw90mez78yklpwp + R/ksnkOYPZYvVmE7edpRaquLGa6M6UZcJb+6IRnAKjyWo8atAg0eL9biDjXxk2VaPF3liica/XC7ezIe + ZN2dEAZwRQja2c+LUzyQk8i2kOiBfGrG/CQ9txVsG04oJIpSyeUy5ajJJz8p0qKVeau7khyEun9dmy82 + d4/Hps5grGufhDXNk8nJgsgDdUgSU0CH2iB9kQq5MUbkxbggJ9oF2ZFGwgX5cWIaWtG2/MktPZHN72Qs + 1SA9Ui0Zg8mLlUgKd5KQtlSGLOrHPO43h/1fGL8pjOPJSxz5XRn3J0fRsAFcumQETAutUD3fCq0RVuiL + GSH9l7EpfQx25FrjoNkJ+yscsMdig53lo8l/xmBz6SisK7BmLB5NrToSXQkj0JswGiuY87am2+FIjgyX + CxW4UarC8ybGDPKv99kfxVTx79XrJQP4Jea550wK3Cl2kIzfa3kEj3czZ8yQAcz29Ax53NPl7rglDGBy + ouO5BmxOpt4kR/xvA1iM+DWiPNaIYtZbaawrynl/KtgPqzICWPqzTXn+aQBnRxiRGj5sADNXxIvRt2Es + 56sRO1+DGOaOuwZwDHNIrATGdCIyVBjAsv82gKcLA9gG4ROHDGCxHFvcDKchTLcfwowhCLM35a4BLJnB + vG+z5YgVo38lA9ie+7XF0hm2LK0RyzYcP98Jqcw5mcw5edHUFTFalDCWm2NUaE51Rl+2G9aQU4qHEbdb + yE3JU7eUuGJDvpEclDEnW4c1uXqsyzNiEznnFsagHQUu2M62vyPdAQfJd86TIz1Y7Yxbrd54tNkTl81a + 7M/gPU+3xdYMJ2wmxxnM1WEHY4WYSnpzshybosdgO9vP4chRuBxvh1vUWy9Qa72SJcPruXK8VazBe4wp + 7zZ44nXy7CerjMz/cpxmjj+Wb8DBYjfsIXfdTKwir+3Ld0Enc1AH+X1Xth49OXoMMEavLKI+5P1fQw25 + Ok+D1exbQwawftgA1hBabGS5gbxwnTCAySXWFVNfMnZtof7YVcf41uSNfY2Mt+SGm82uWFcklmohx810 + Q2+yK9pjnNEc5Yy6xTpUhCtRuYRltJH8wp2x3AdlyeJ/XDeUMo6VJhqo25hLmasbhAFM/SEM4C2SAUxd + TO65r3poBPBu8tN9ZgP2m404WOWGQ7VejM+M0y3jsbthvGQA9xS4oimd8S5WDks0tSB5j5gSuiFZjaZk + DVqYp9oS1ehn7l5Lzbwt0xO78/ywN88fJy2T8ehADN7YVQSrJWEjMG+aFcJnWSFpyRhkUmgV8eQEyW+g + 2Gup8kZHnT8FXgD6W8ahv2k8umoD0SLWmynzRi2FTEWmM8pS9VKQlqZsSDCiULjeaR4M0u7SOkjZbIzp + i5QEg+9i8RSKng1Uj5xIimMmUzGFQTEba3USBRlFbwdJW2+uO3pyXdBKklMZo0DJInvkzrZFTijLmY4o + FFNuhg2N/l2XYo0DTN7nGCguVclwb5UDHqi0w0MWe1wz2+M6A9MNsxw3GESulslwX6EdLuZY42TmSBwj + jmcRDCinSh1xppyNrkyOEyWOOFbohCMkBHtI7jey0bayvupCR6Nyli1KZ9ujIFRMG0rhzw4o1pUs47nV + znFC6wIFuhepsYwdcblYt5DbKyhc+mfZo2faGHRMHIn2YCt0TR6J3ulj0D3dGt2hJNuhjmgliayZbAdT + sB2KJsqQM8EJGUGOSBlrj1iv0YgwWmG+1gqz1VaYy3KJsxXiXK2Q4839zbTCoXgbPFYmnrB2x+fLXfHv + FS74YZkbfujhdqsz/kWx/l0t36t1x78sbviKROHTQj0+zFHi3Ww5IcPbDMrv5yvxXo4C72Y44p1UYQA7 + 4lMKmi8paL5i5/16GF+QaH4Ub423okbipaVWeFaMBI4egTvRI/HI0pG4wmRxOtQKR6Za4cAUK+ybPgK7 + Q0cR1tjLgLWfAetgOIU8k9MhEuCdS+VYM9cGPdOtUBdkBYuPFeoDrNDP366fPQo754/BsUhH3JPMwF8u + w8ddzvh2lQe+3+CG3/5PBvAOFX7cNGwAb9Tjx/VGfLPKFZ/3GyUD+E0KfWEAP8N282S1E55qkEl/ZD/b + qcary414a6Ub3l3pjveXu+D9fmd81M366nHHJ12ueLnSgUlpBBOPNcWWDC/WyfE8Se4LjVo83+yMJ5td + cY0ESIxA35s2iu1oDA6wPR0p1+Icxc8DPUo8tkaG5wfleHuPHP84JsM3Z+zx43k7/HrRAT+dccT3xxzx + 7X4Z/rmb9b5Nhy+2OOPT9c74eLUBHy7T4N0eFd5sUeKFajFFhg0eyR6NR9JHSQbwq0yiH/f54J9rg/Dj + ton4Y/8U4DBxahpwdiJ+PhOA78754bt7AvD9QxPw883p+O3JufjjRTH6Nw74IBm//yMLv39TiN9/KMNv + 35vw+9el+O2THPz6ajy+fXAGz9kP7+52wSsbNXiqnwKt2x5P9cnx5kYX/Pv0JOD+qcBDE/H7/f745ZJR + GgX8wzkNfjirx09nXfDTaU/8eNIfP54I4nUG4OPNPniLZP65FmfcXzg0AvhwohVO5o7AjQ4nvLHTXTKA + v37AX1oDWDKAn9Xhu5eJN3X46W8GfP8PHX780oAfvzHgh68N+PkLHvfvRvz6rhG/vKrFz88St9guHlbi + x3sU+P6sHD8cl0sG8K8Hdfhjn5Ftxx0/bfPGPzf54t0VfnisyR37MmXoocCqX2SLuqUuDLgzUJm2EKUZ + C1CQMQ9ZSbOQGi0M4EmSAZw2NxBZcykC5riiaJYSpRNHoYb9ftVsxp14GR5lInu5MQRv9s3HSwOLcaNr + EfYUT6CwYJycZov4KY6InEJBOJ0EZJ4rE3rAMAJRGBeIovgg5Mf6ITdSiFoPFEd4ojzSG5YoH1THeKMm + yh1NsYzjsW6S8dsa5YI2lp0UKi1LXaXkVcsY1cj43Jmox4pcD6wt9MSaQnesZOJelkXBl6UjOaDgENPQ + McGsYuLZVEjyYB6HzWXjsJxidqBgPDbWzcfJDQW4sL0CxzeUYnd/NjY2xWCZeS5ac4LRlhssGcB9wwaw + meeXP9+Z8ZyClteYHUJCPJVknIK6YoYcVaEkxnPUQwbwQuaGhVrUiOmh52hQRVSQHJnDFDDNkqF0ugPK + +f2OaC90cb9i2sk6Ev2qUBksJFKmGQ7SGr5l02y4bQvLbAdYwhxQQvJ0dypoaTroYQM4lfcobbwV8kJG + SgZwpRgBTMLXHK7lvvVoYh5rpLivneeE2rlOPC/GbKKBcV8ygEkMuuJc0cF6v2sA1941gJkT7xrARSle + /0EyX5N4FlBAFiZ4SCineKzPm4hGYQDnTUJ1RiDJhVjTZSxMFJhi6hphAGcw5yTxWpJZD+mz5Mhi/eTM + 1SFtlgpJ00lWWafRU+RYOskJ4cGOWDjBAQtZzpvgiNlBdpgZaI0pY0djRpA9ZgfLMH+KGoumaUksdYia + ph42gO2RHGI7ZADzvkgGcAQJJdvT8igj1kXqsYkxfNNiR2xaYovtUY7YGeOI/ckqnMrzxPlyf5wp8sYR + ish9Gc7Ywby+OVWDdUlKrCFJX0Uis4KiY3W4bMgAnivHxjA5NvD+rue9XsNjriLhXsF2sIzttp9tti9S + x+Pr0BOrR1+cQSo7o3iPIpTso2L9aHtUzLUdhg2q5ltLI4HF+r/CAG6PlqE10h6Ni6x5f0ejeaG1NBK4 + l3yjn5+vWKrA6iVyaWSymPp5LcWQ2JYM4HljMDBv9J8G8P4sZxwkUT4oRgHnqP40gPdmOGAXifPWNDts + TB6D9cmjyVdYplpjbZo11qXbYHOWgwQx8mJnkRz7mR8OUVgfq3HB8Xo3nGnxwvlOH5zt8MaZdg+cbfXA + xRZ3yQC+XKvBRQu5D3Ph5SoVHm5xHfozr1otjQK+XKvFZQqpyw06XGzS4xJxpckZV5ifzoqn6asU2GeR + Y3uZI9aTFy0TT+lS0LUljURfmi1FgSN2l/J8hAFcqsapcnKsSuauehc8wN9fa9RQBKhwSxjAhDCA3+pS + 4INeJT7u1+Gjfhe8t1wYwEF4c8Vk3G4OxAUSdGEALycvamQbLZ4mQ+5kOXImUdBO1KAwiHwyQENokROg + Qo5k/qr/lwFcGqiCOYDixp+c1Y8CJ1CPDqKbvxcGsJgCun2sAl2BSr4vQ9ckNVonq1E/TYNK9gsxO0DZ + XMWQAcz2VMl+Wp3miTph/BaMlco6YQDnj5UgZq0pjxNreRtQmeImmcKdReTF5skYIPpMQwbwCstUrKyY + goHySegtDuJ7wVheOwU9VRPRXjkO7VXj0VE1AV0CNeP5/jhuB6HdHICmEh/UFXigKtuIKrapukwjGtPd + 0Jbugd4MbwppT2mZgP5kxhiKCvGnXCvbX3W4I8zz7GFmvzFTNJrCtCieqpQM4OxAe8kANvk7DhvAMlT6 + ylHvo0aDL2OsnxI1vo6oII9s8RiBTeScp9nfbsVTlCc54RUKjFcoJF9hPHsq0h0PLnLDiTAXrA9in2W9 + rhlHUTWJInGqO7ZOcsXasSqs8pFhNUthDK+fQHE5wcDvatDL43bxs1Z3B8IRTa4OqNCMRpnKCqW6USh1 + tYPFn7kySIt4V1ssMtpglrMdQgx2GGtwgKfBEUZnJ6j1jpLh6yQZwNYSJAOYUGodoDE4wWB0hLOLE5xd + uS0MYJe7BrAt3Nxt4SMM4AAlJo3XYFaIHhGhroic4YzFk5SYP0GGueNlCBsnw5QAJwT7yxA8To/xE10l + 89dnvCt8JrhhbIgHgqd6YVqoLxaHj0NkeCCiw8ciMWIcLHmL0NWQjmUdhVjeXYSe1mw0VsWjgehoSkdb + QzJaGpLQ2piMtqYUtDcnoaMlBV2tqVLZ3pKKtmZ+RrS0JKKlOQENTXES6htiUNsQier6pRKq6hajsn4x + KghRVjYs+RPVDeLzCAmVtUtQVcOyOgIVRE1NDJoak9DZmoHezhz0d+fxXAuwrrsYm/vKsVWgpwxbu0sJ + ll1DGOTrwa5ibOzIx+rGDCyrS0FfdRL6K5OwrCoJy82xWFUWgQ0li7ApZwa2Zo7H/gxfnMzxwT1Fvnio + 2AMPUFQ/VOjMcgj3i+1iI+4vNvA7Rpyl8D9G/rEvXY8tKQaso6Beyby5jPmyn/pyIM2IFRS769kHBpM0 + 2Jmgxb54LQ7G6XAwltsUwLujldjGeL4lToENzDMbEplPkmXclwIbk2TYzO1BltuTldidqSaU2MXXOxMc + sC9FhqMZapzIc8bpEjecLHPDfmqlQWql5Sn2qIuwgmmRFYoWjUIB80D+YifkiHW3GEsymJuyovTIitYj + W5i/LO+OvkgX34kSBrB22ADWM/f/Zz27UmppE6+3Kt0oGcCmZL4fp0R5vJM0PbwozUkKVKQoUJXG/ss6 + asozMkY5D0OPxnwd6nmeVVnkUxmMC5n2qMmTo6FYzRijQ3OpHq1lesYc6m2TEZ1mF8JNQofJFW3lLmih + NmwqpiYvdUGzeG0ilzR5os3igc5KL3TUeKK93h3tDUb0MKes73DDXuJ8pweutbvjTqMBL9RQR1Wo8FaF + Gu9UavFOjRZvUh+90qDB8/XUWtRNdyrleFSsJ1+uwoNmPe438/7zPM4WGnAkQyUZwDuXjsHOxaNxIMoO + x+JkwwawUjKADycqsS+ROZfcdMgANmJjlhGrsoQBzDiZPmQA1/K+3jWAa7O1aPiLAdxTSR5T7YIV1Gtr + mDPvGsA7Wg3Y3+aGQy0eOPQ/DeByd4hRwHchzF/xB/2OuzD5/IltZd7Yytg+KP58I5fezBi/IccV64kN + ee5Yl+NGXu2FwVI/7j8IuyvHSwbw+mIvLM91/9MA7inxRIeYBrrEFfWl5Lll7izvGsDeqC3xQnXpsAHM + 71rYzyr4mYWQDGCTNyrMPhLujvq9CzH611wp4EN4o7yC+c4iDGA3mHj/zeyXVaI98No7K9j/an2wrNob + 3SUu6MgR6y27kUME4WD9XJztjMb5vnic6Y7HkfY47KiLQm/+XFTFT0bOwgAkzPZAzDxvJCwJRHLUBKTG + BCMtPgQJUeOxeKE3ZocaMSmY8Zm81MfTCv4eVpgaOAqLplojcYEDssgVy2Ls0ZTsSI2iwI5iPQ6xPR9h + +xZG6bkiYRLKJQP4cokaVyQD2ICHyoy4avbAI7w/wgS+UeVJje6B+yvEyGFn8hsNjpnUOGrW4PAwDpXI + cLjQQfov6ET+0HS3QwawmAJahntznPCAMIDJ8x5Jc8TNVCc8LpnAMjxOPJamxM0MJW6kKXA1VYEHkp1w + T7wt7omzwb1xtrgSb43LCXa4kOqIM/zt0UR77Ofnu/j5zgRb7E6yx6EMHruA10UOdrFCh8sVWumhvysV + cjxYo8GN4VHAT9Q445kaA56p0kvlc9VDBvCT7Hvi9QtNbni9y0cygF/q9sKdTlc8Qq0tOOOVeiNOVzlj + d4kKG7KdsCzVAX0p5MPpQxjIlJMfKrFy2AQW6/wJA7g/RY029sfaKBnMS6jHFjiikHzbEs77I3h9qhI7 + 8jU4IGbkK3HCw+SbT9Wq8WazAR+0iP9hiC5XvNvFc+t2xbMtBtxkTLhpdsRjZXZ4gnjG4oBnKxW8DjUe + IQe9XKTGsdyhEcBb0xVYy7i+Ml6JZfFi3UdqBMbN/gxX9GZ5Er5oTfNFZbwnCiNdkEYNEUNNt5TaYgk1 + 5MI5KsyjXgoL0yN0tgEzZhulacinhxowlRooZJpSGo0eEjJsAIfqMGu2MIjVmEKtKgzg4Mn2mDTNftgA + ViJsgQpzF4pRwHcNYAOSmbuE+SuQlOaG2Hg9YsknBSKjtYiKUiIyUhjASkRHqxAXI0xgNRLIwwT+NIBT + nZGb7oJCxjexBnBipA2imIdiiIQlI5DONpWb5IDcFPaTJFtksC2lxdpK6wLnMV8UZBlQnO+K8mLv/xjA + 1GTCAM6NVSGfebMoRjNkAMdpUM+c1JykQmfS0JrKGzIN2Jalx74sDY5kq3AmX477SpS4zbbzfL2rNKr7 + DbbJNysc8K7ZFu+bbfBJpSO+qFPin01afNdhxNcDRrwtBkB0O+FiNXVPrjU25TphfYEKK4pU6GV/6ywc + g+6i0VhWYoe1Jkdso6bZXaXEnio5DtYpqIs0uLfLGdf6XHBruQeeXu2Lp1d444leN9xuZ19oG8KdNgNu + NevxGLXKrUY1Huc5PEUd9EKjHm+y3/y91oAvqWm+KFPjs2IFPilV4kO2sffY115j3HiabfdajgZnef2H + 4pkTonRYuVQnGcCWaAPM1MBlwgCOc0e+ZAB7ID/Je9gA9pGmfE6PckPqUqNkAIs1gcUawCXCACaXEf8H + WJJdUEVN1CAGQGVoGfPJr4s8sIXxfIswgMt9sIvxeYfZG5vIRTaSi2xiHt4szF/GsS2M0YNlrthW4ozt + jIW7xPrMzN9iFPDxGm+cqqP+bhiLEzV+OMYYf6TKF4crhQnsh0N1gTjaMhHHe2fieH8YjnSH4WBrKHZU + TsTW0kDmKl9szObxxLS6hUbsLicPshhxrNqIk9Spp81qnDcxHpVpcA+14r0lGnI49lMT41IV0cTY18L4 + y5x6xsJczb67MVMsLeaEpjgH1MZTl6RoUJPtjspsL5SluUsGcC77R27i0MhfqW3GqYcMYDEtNPWPWANY + cCXJAOZ9EQa6MIB7iv2xqmIiVpomoL80CG25/qhN8Ubh4r8awGpksu/mzySXmuWIhrmOWLFYhR2xzjjG + e3GR3OuBDAOuM77d4Lk+xnZ+kzHvVqEWj5docZu55jZ1+p1KF2kGiesdwbivJxTHWmZgY2UI2goDUZTq + xf4nTGBP5CS5sk8akMc2lJcsRyFRxP5YlqlAZa4GdUU6tFJjd1Y6Y4CcanUL67xzHDa0j8eqlglYXh+M + 9vKx0vUmz7dD0jwnZEWIenFHHttdFttgVpQrMok8EedSxBrTfsjmZ6mReiQvUSM5gliiQRJ5aNJiBZKW + KJC2VIEs9vchA1iN9EgZkhi3ExbZIiWc8WOpE2MBOWeMHcoWj4B5gRVqia6oEViZyD6bZoud4sEe9tdT + 5HonasnHquyxz2KNXeVj2B7HYH3eaHQnUFtG8XexIzCQYIN1jE27Mh1xPIc5lLz0OnPqc+x3r1vUeL9K + hw9qdHiXXFEYwK9y+0XyxzsljpIB/FCODR7Ossb17DG4k+eApwvVeJYcVRjAN8mNrlBHHMnSYlOiAv3M + Sy3MC7VsNxbG2SED2EVa97cszm0IiR7k2F6S+WtmvRWL/+FixPTPrNMlBqQu0iJxvjB/hzFXiYQFasTN + F6N91YgMUzKX3DWAh8xfYQRH8b3IULlkAosymoia4Yglk20QPul/G8Cx0+0QQ4gydro9kmYrkMzcJAzg + lDliWyxdIJOmf44NdeD+HBE10wFLQ+25f/6GbThxoQLpYjpwxqXCOCOK4w0oZRy3MI+0pBolA3hVoSc2 + kiMOMpZsKffEBmotsZ7/CtbZikwiR4/Vuc5Yx/6+Ic8Fg+TJ27LV2El+c4RcR/Tzq2ynd5q8cKvJE/eZ + tThKfbE3zY7fcaLWU2I797eDnHVQ/H9MLbUuYgQGw61weOkoXI6zIy9S4AXytlfIm17LkeNNMQ20yRnv + 1LrhtTpX3LHocC/zylkxwwR1wKFiN+xiHNxIXru8wA09YvSvMICzyO//YgCvKCB4/1fm6Yc4CmO3WGt3 + M7nfFuoeYQIPGcECKmkk8DryxY0sN5VqsI0ccHedGw40eeMgsbeWnL5S8Ht3cnPWVYGntATiqnRyX8b2 + 9mgX1CxSwbJQBVO4hrnACHMiY7qYSlwMfmX9F8dR08UqYYmXUYcoJAN4Ofv8plIDtpsZT6k99lS5YTe3 + dzGu7DNRc7Au9vFc9le5Y38tz6PeHztqA7HO7CdNf90kfNFYOUzRDqikHqqivq2hvq2jLmxIVqGVumgg + hjyOWnhnOnULdfc+nvcp80TcGojCO3uKYBU1zwYLZ1hhUagV4hZZMxg4MGDIUcZKraFwaKDYa6RQaK3y + p9gLRHtVIJrNDKYkDtUkDRVZ7ERpegZkDbIptNOWypFBYZvLiy5iwCuIZ0CKNDCQqNmBFEiYr2JJMsPO + k0CClLxAIyGV21mLKGgTKC4y3NGVI4Z4+1Iw8PipepQtobCeY43U6aORPs0W2SRcRTPtULdgBJbFjcK+ + YiUu1hrxUOvQ9B83W+R4vNkJTzbJ8EyDDM8x8T/foMVzdRo8SWLymFmOayX2uKdgDC7mjcGF/DE4X2xP + AaCQ1s47Z1bgdLkMJ0sUJP0KikpHrIuxRVvYSNSGjoEl1BbF7HRivcjsGbbImm6DrKljUMhSjApr5bX0 + MtiujBRrCGqlheW3RuuwZbESmxi41/N3a3gtq6ePwkqib+pIdE8djQ5eW9MUe1RNtEPpBEfkTJAhbbwc + iYGOiB/rgEjP0Qh3scJ8oxVmG4awgNtRfC/Lywq9s61wgoH1NhvP++0e+HKZK75bYcSPLH8ksf6+3QU/ + NLngp0Y3/Nzgju+r3fENhf/npXr8nUH0ExKvj9gRPqQA+ISd/BN2iI8Klfgg2xEfpNnj7xQEX6Y54SuK + lG8obL6loPmaQufTRDv8LX4M3okfjdeTRuOVZGu8kGKL2/EM1kwa53hewgDeG2KFPZOtsJPXvIv1uId1 + tYf1sXehHPuYlHZHKLF5ERMx73XXdCvUT7CCxW/ICO6bZoV1c0Zh27zROBRBscRj3sy3xXvNany93A3f + rXPFr9s9hgzg/S74Y58B2KvFrzuV+Gmzk2QA/7hehx/WOuOfK434x/AI4LcaNJIB/HytCi82a/FSpx6v + 8LPXV7ji/Y2++HjzWHy80Q8fr/XAh8tc8GE3CWOvK/7e7cLE5ISnykbjWZMtXhQGcA2TWDXBfT3XaJAM + 4OsUZeeL5TiQwevNtMaBPAUFpR6nKcbu7SAxWsE2ulGBN3bI8OF+W3x+1Br/PjUGP5wZg38ft8Y3B63x + 1S5bfLbVDv/YqMTf12vxtxUavL9MjQ/6VXinW43XmxlMqyk6/2IA38q1wctMnn/r8cIXqwPw3eAE/LY3 + BDhInJgCnA7GT8IAvjAWP9wfhB8fmYSfH5+J356Zhz/E2r/vJ+KPv6fjty9y8Nu/S/DbTxb8+kMFfvuX + Cb/+owC/vZWMH27MwVdnx+FvB9zxxiDF5SqS5T4Znl3G89rM9nV6Mn67MgW/XhmPn6/44edLbvjpojO+ + P6/Hj+eceY1sl6c8CV/8cDwQX+/1wUcbKQL7KV7ZZx/It5PWAD5E8nAi1wqPdsrw9m5PfH5+PL59OBA/ + 3vHCD89yP88bhg1gLX74gOWnLL8y4IdvDfj+Gz1++opt/jNn/PY3F/z6ph6/vqjHL09q8fN1NX6+X42f + zrONnFTi5yNq/HZIL7Uf7HHHbzt98a/NvPer/fFMpzeOF6ixLHI0GuaPYdDXojpmIgnELOQnzkZmUijS + 4qcjOXIKkhcGIyksAEmz/JAxyxO5FJLFMyiOg0eiMZjteJYVTsdS1JZ64L2mELzfMwcv98zH9ba52Fs0 + AS1LDcghUUicJmei1yE+TDyFxv0Mm78FMUGS+VuaFEyyMh4F0X4oiPRBWZQvLDH+qIj147n5oC7aAy0x + HmiLcWOiEtP1ukjo4uu2pc5oltaqVaOHhHpltiu2W/yxu9ofu6opNCo9sVX6k8sFO0gStpFYbczTYVO+ + HjvLvZm0ArHVMh4rCwKxomQidrQtxcXtJty7px5ntlRg77JcrKuPxIApDG05E9GZNzQFdG/pdNSlBzAZ + +qBgkQvyKKSzKapzp5AQE+VTZaicofjTAK4lyapdpJdM4Lp5WtRJU0QrUREmg2U2yTtJkIkkyDxLrP/q + js5IdzQtMvB7zCckUZapNtI66+VTCMZoizB0Zznw944oJ2kScVzEbWnd3+nWQwYw407qOCvkThoxNAU0 + RX3tXJU08nfI/GVJcd+4QCGhYb4cjYR4TxjArSTmLSTdzcx9jSRiNXEGVMY7w0xCUJbgipIkEoNkNxQk + /QdimqACktG8WNZJrCtFOIlpsg8a8kPQUjwdTYVTUJMVBAtJqiCq5UkkGST/JZHO0hTQ6XPkSGedZZA0 + Zs/RSkibpUbSdObcGSrETVUharISSyYpST4VEuYHOyFsnD1mBPzHAJ41QawFrEL4NC0iZ+oRPU2D6Eky + xIc4IGmSDXKmCwOY9T9fw2vVoY/taHmEFmuXkGwsdsIGCofBCBvsjXPE4RQFTmTrcLnMF/exvZwv9cGx + XFfszzSQlDAfpmmwPlktGcArohyxfLEDVi1ifmRdbiTZFVjH+7qedb92rgarF5CcDhvAfazjPtZxD/Nr + V7QWPTE6qexYqkVTuILtxhGVYcLst4E5TMwWMgaV88agdqGdZACLNYBbIx3RzFzSFG4jmcAti2zQHuEg + rQncx8+Xk8+sXDw0MvmuCSzKZdzHXQNYrAG8PUmM+qXYLnTFwQKStxw19mXJsT/DgaUTdmc6YTu3N6fa + StMeidG+GzPssDHLHpuyhfHrhG0UQTsLFdhZosQe5t69Zg0OVOpxuNYFJ5o8cKrdCyfbPHGi1Q2nm91w + rskNFxr0uFCtwlmTE06Tz4g/BB9mznmo2QVXyHOEASxKMQr4Ur2W3x/CxUb+jjjdoMOhCvIb/n6wxAFr + C2zRn22NzvTRaE0eiV6e55ocR+wkDzho5rnwvI6XU+xX6XFvvREPch/XmDOvtwwZwE82OeH5Vie80SVn + TFPgo37mn34j3lnmibeWB+D15SHkZUE4X+SK3Uk6DJAH1oeqpQc/ckLYbieqkROsRUEQRX+ADvmBFDKB + wvhlfBhPXjmBJSGtA8z3hAFsGqtCxVg1asayXwZo0DZWK5m/7dI6wAq0+jEu+PF+j3VE50QS48lq1LEv + VExTsv8rUMp+IwxgS6SOIonknby1KtMT1Tni4Qs/1LEU5m9LQQBqM71RnmBAWTyFZKIzqlPd0ZDpI5nA + vWUTJfSXT8LKimlYUzMTq6pmMN5NQGdxELosE9FmmYAmcyAaK4LQXDkOrRVEVRA6q8ahvTIILaaxqC/x + Rm2RJ2oL3FGXR6Kf54HWbC90ZHqhJ0MYX14YEOZXsgG9SRr0pevRzvZXzb5jnm8HC/uOhaLUzP5fyr6f + z76bPd6Rdco4edcAZr1U+zN++bIP+zGWsQ6b/GWodRuJDs8R2DyO7Wm2Go/HqfBCkgwvxavwDLnsncV6 + XJ3njDOzDNg1RYOBsXboC3DC6glaDE51x84ZXtgx1YO/12NTEHnvRCO2T/PA1ule2DjFDcuCNOj04z3x + kaHe3QG1rnaocbFHhTNjs7O1ZP6WeDK++CmRy/sZ42qPBc52mGGwQ7DeHr46e7hp7aHXiemfhQFs918G + 8H+MYDvpc63eAToDv290IOwkA3gI1nBxtYGXtxMCglSYxPMPnaynFjIy7hkwf6ICYayzUNbZjCAnhAgD + OFCJCeOdMS7YDf4T3OAR5AJ3wjvYAwGTPTBxmhemz/RE2CxvhM/zQ2L0RDRVJ2Ptyips29KGLRubsGKZ + Ccv6S7F6lQWbN9Zj8+Y6bCQ2b+H2FlHWYMvmWgwONgy9t7keGzfxO8SGzTXYwM/Xba6WsHZTBVZvMmPV + RpOEFRtKsXzjX8DXy4axfD3LtSUSBtYUYfnqYixbVYz+ldxeWYKVq8qwfm0FNm2s5fHrsH1TPfZtbsbx + 7Z04t6cfl/ctk3Bhdz/O7eyTcGpHN04MtuPIphYcXN+AfWvrsWdNHXavqsVe4sCKahwZMONkbxFONCfh + eHU4zpim43L5RDxkHoer5b54mJziarELHioZwoPF1HDD5b18/zyF/Il8Fxyi1tyZ5431mb5YnumPvswA + 9GSPRV+2N5ZluWNtujM2p+gZh/XYw755gPrzQCyFdKwOu2O02EERLNah35Sik/LNaorkVYlyrEuUYSPL + zcw/25JU2JWuIVgyb+1OIWdPU0l/JB3J1eMoz+VwCcV6AXNWlgx9STaoXWqF0oVWKAgfjYKl7GORbLfM + R9lReupgnYT0SK2EtKVq6mCx9pp4Ql8uTQOdx/P6qwEs/twTBnAZr8OcOjT618LrKktgjIyRo4RivyTG + AaWx5C48Z1OiAmaK/ZoMPRpyyDVynYehR12uDtVZSpjTnVBO7WbKZN/PV6GuWIcG6o+mEgNaSp3RKkb5 + DqOl1JVwQTPRwGsVo0zrioyoFyXvSx3vVy1RJ0agkhvWV7ihvpYxqpG8kjlnVYc7dhAnOzzxQJs7Hqt3 + xjNV1FcV1CgWDd6o1OL1Gi1eqdfhhXo1nqpxxO0qR9yscGJ7kOH+MgXuKdfgSrkOl3g+Z4YN4N0xdti+ + ZBS2h4/E/khbHI0dmgb6eILqTwN4f5IaexkLhQE8SH6xPsOAlZnOkgHcnUlOwHtaJ6aBTpZJBnBNlgb1 + BayrYme0m93QW+WGFTWuWEldtrZOJxnAg00abG/WYU+zEQeZbw9SM++v9YSYtm2Hye3/aADvsvj8B2Y/ + 7GY7F9hR6o3txT7YVuSFrYXk1sSmXDdyajdyak9syBX82gNb+J0dpgD+PgjbzAHSmmcrCzwxwO/1My8I + A7iz1BOtZe5o5vGbyM2byMeHpoD2kVBb7oMaHq+qzBuVpV5/rv0r8FcD+K/mr8CQ+TsEUxVzXaUXTBUe + sBBmXq+FbaCGbaPF5I6eKi+sbvTHOmJtrR9WmXywptgPW00TcaRpDs52RuBCbwzOdsXiaHssdtZFYXnh + fDQkTUfR4nFIDvNGTJgX4hb6IyliHFKppTLiJyMlOhhR4f6YO9sNk4Jl0ujfAG8rBHhYYZKvFcLIzSNn + jkLGYnL7BBla0xRYn6/D3jIj9hdpsD9XjmN5TjiV58j4IcOlQrlkAAvcV2rAgzz/qyZPCdcsHrjKe/lQ + pRvus7hIBvAZsw4nzFocr9DhWKUORyu0OFwqx5FCRxwrkOFUoRJnihSSAXyRnO2eHPl/GcDX2d+EAXwr + ZcgEFuXNVDlupMnxCEsx+ve+JAdcjrPBlRhr3BNrI20PGcBOOJMq1rl2wAG+3s3PhAm8K9EWB7hvMdXu + GV7HBZ7jJQu5nEWBy5IBrMb1Wj1u1Rpwu9YZT7MUpq/As+Rqd7efr3fBi83ukgH8WrcPnu/0wONtRjzc + qJOmgL5c54xTlQbsLlZKBvDKDEcsEyN/M2V/YnmWAiuylVidoyI3HBoBPJCqQnuCAvUxClRGkE8xxhXN + tYZ5ITk1ef26DDUOMN6cIre916TA4+SlL5OTvt/qjI9aDfi4zRkfdhrxQbcL3u0VBrUbnm3U4plaFZ6t + VuKFKjlerFUSajxXo8Mtix73MYYdyx16YGcz63RVvCNWxCrRH69Gv5iumPGzN8MNXeRNrWls+0JTkb+k + khtFhTohgvp68UxHLJolw/zZKswJ02DWbDGyV48Zs5wxfbazVAoDeNJUBYJDZJhILjVlqnLYADZIawFP + nan4bwOYGix0nkoygOdQG85fRC1FTRIZ64wE6jyx/q9AQrILomO1iGZ+ElgapZbM36XUHHdN4NhoxZAJ + HDeEJPIxYQBnpRmRk+GKwmx35KRokRxth9glIxC32ApJkaOQmWCLfLa73CRbZCZaIz3Omv3LGllJTshJ + VSIvkzknj1qUsUhMA1161wBm/hFGW2E88xBzU3mcVjKAxei5pgQlOhLF2srMf4ytW7mPfZlqHGWOOct+ + cH+REk9Wu+DlBt4/YQBXq/F2hT3eM9ngQ4sN/sE4/2WdAl83qvF9uzO+6TfggwHe1wEFbrQpcdJMnVQs + w9ZiBdYUOaG/0AbdBdQgJSOxsswO6y1O2FqpxM5K5uYKGQ7UyHGqifqmnZy0xwW3lgkD2A/PrvTBU30e + eLLDiCfZrgSeYBsTpu+tRg0eZ1y/3aDBU9RBL1ATvcn29EmVDl9adPhnuRb/pMb5nDnoE75+t0yNl3hd + t0QfT2POYRsXD5VtYe4e4D2tj9BIusEcZZSWYiqMc6WGF6OAPf80gMU00GL659SlLkiJcEZGtJtkAAtz + ThjAJSlinUh36g7jnwZwZ6YeK/JdseEvBvBWxvKdzCnCAN5czM+YqzcwDm8UawKLaaFNrtjC2La12MAc + o8POIj32ss8dNLngWLUXTtf742xjEMsAnKj2xVHGeIHDFT44WO2PIw1BONoxGcd7ZuJwxwwcaJrKug7G + 9pIADOb7YFOWEVvILbYyZ+4pc8EBszOOVxmleHGGWlXEJJG37ysjSjR4oFiFa+UqXOc9u9GgkB4Sfpj3 + /mKlmjxKi63ZYo1uGVoSnFAT58hrV6MqyxWWTA/WCeuS+iqPWis/yVniR3cNYFEWJVGDpbDOyZMEZyqL + 10ptVdRfS5YH28xYrKmchNWWYAyUUVsJHZfqhaIlYgpoDTLnk5exz2fOkKGAMUAMCGic5/TfBnCaM+O5 + HjfICR9ljBHr/z6ap8HNQi0eK2Vb4nU+buI2c8Yj1e54qCUI93TPwJGW6VjPehN6sTDVG5nJwgQmknnf + k3lNjE15KUr2T2ECO6EkXQEL911ToEWLeCCP++sTPKTJG2tbA7CmORADvGc9lQFoITcQ/DB1oSPSFivJ + M52Rn+AltbdMtj/RtqT2lcD2x7Yn1p9O4+vECB3iF2uQsEQrbScu1SBpiRLJESryUuWQAcy6FgZwWqQT + EsPtEM/YnbzIDpkRDpIBbIqxhzliFCoXWaGZcWYgfgw2pjtiZ46YHUOOE+VK3EOedJl86UydjG3DHvvN + NthdakOeMwo9cVZoibBCd7QVVjKfbWHePpCtwEn2LTGDxrUcBzyd74BXShR4x6TCB5UavFutkfrnG8xn + L5NH3i51wiN5tngg2wYPZo7BNeLxHLs/DeCnytxwg33jIvnA/lQFNsQzZ8WxjYlpctl2KmINQwYw+6mA + +P9MQEz5XJ7kSS7tw9J76EGOaBfkRrogkzkjZSHrbp5CMn8TGNvvIl5M9cx8EjFLjiUzZYiZq5XMX1FG + z9EgerbyTxNYlDHMNZFsb4un/McA/nMK6GEDOHqarVTGzXCQ1gVOnK1AUhhjvwTxWiZNAR0/m98nYmY5 + Imr2EOLnU1+I0b/RbGfMd0XxbiiJZ5ynDhJxXBjAvexjgk9uII/cJMxf8vnV7NPLsrXoy1CiN535M0vH + 1+I/YQPzvDM2Uk8MZpGHZzIGMtbfy7Z/vdIZTzV54clmb3IoA05mO2A/dcaedJk0I8fOXAO2iwdGyLXX + xdhgbbgVBtl2jkSMlAzgW7z/L5JHCAP41eFpoN/gft+qdMErjCu3y1S4L1+Oc/lqnKD2EgbwjiLxgKE7 + +rlfYfq2Z+mlWCm2xdrG/XkGLM8TJjC5v2QAa7GG/UqYv4Pkh4Ol+v8ygTcXq6VRwAKbyKu2lFErVhix + h5rmQIMnDjV64UAdUeuF/TW+2Fvli13lfhgs9MfmvLHYmBOI5ezfLZEGVAkDmLnexG0T249JzM4Yw/gV + zXwapaJ2k8NM3VKfJEdXmhLLcsQ01DoMlhsY143UFC7YZXKW/mvbW87YTewxG4ZGBVe6Y2e1DwYr/bCG + 3L47l/qMeVgygKMcUMH+Kbar2N6rqQtrqGub2e6XkTtsjqMmSqduoVben+WFU+UTcKs/Au/sKYBV/EIZ + SdAoLJw+AlHzrJEU7shE5cSgq4U5xw1VBe6oKvSg6PNBY7k/xYUfaop8+Bk7TIaRCUzPAKRBFi8udTED + xyIHNkAFha8WOQykWUyMyeFaxM1XsEOIRbPliCYihxEtDWdXIJaELCnMAaZYCtEcX/QweC4rCURPkS9q + eS6FC+yQPnMk4ieR4ISMQdZ0OUpnOaEjwhpbsxxwsc4Nj3b54ol+DzzT54wX+ig6e1V4Q4yO7NLgnW4j + 3ut0xdvtRrzWasQLJJ9PVCjwCInFg8W2TFj2JKZOuJ+k5QpJ5nl+JgzgE6UKHMxTYFuKPVZF2qB1zijU + htrAFGonGQZZM2yQNs0GqVNHIzVkBHJZWmbZom0JiVKMDuvjSZSY2A8yqR0ljiW54DDfP8DgvW+BDDvn + 2mFLmDVWCRN48ki0MRjUT7SDZbwdCsc5ID2IHT6IgWOsI6L9HLDYfTQWuo3EIo/RmOc+ArPcrFhaIYrI + 8bHCsnkjcTZDgSfFUPpWN/yz3wU/rDDi52Wu+JnE+qcud/xCYf5bqyd+b/bEz/We+I7C9ysKns9Jdr5g + QvuMxOcfFD+fM7F/UeWMz/jZpxQ8n7CD/4Mi5Ms0B3yd4oB/p8nwPTv6v3m8L5Id8GmKLT7h5x+yQ7+b + 64Q3cxR4jsHgUXb+exaOxIkZVtjH+7cjmIEgeAS2Tx+JXXPssZskeU+4CrtYJ4MUDmvn2qJ/tjU6eL9r + J1qhfKwVasZboZev188bg8H5o7F30RiciR2Dqxmj8Hq1E77sM+Lfa4cM4D/2egIHXAln/LFfh992q/DL + Fjl+XMvzXaPGv1fp8MUykr4eHd5vIwEkIXyVQuPVJgPe6naXph9+d403Ptjoi0+3j8OXu4Px+bYgfL7J + F39f5YaPerT4qFsvjTx+k8TmebMtXqhwwKt1SrwsjN9qOZ6pUuCZej2eaHLDzXpXXGanPpRliz1pttiX + rcKBQj1OVDjjUosaV/t5v9YyEA464t2do/HxvhH46ogVvj1qha8OjMTnu0bi08GR+GjDaHy42hEfrJDj + 7V4Z3ux2wttd3O5U45XGIZF0p9hOMoBFvTyWz/OqUuPdTnf8fYUfvtkUhJ93BeP3fcHA0Un448R4/Hwu + AD9eDsTPDwfj55tT8MsTs/HL8wuBN2OAj1OAL7Lx+zcF+O2ncvz6WxV+/bkav35fid+/LMEf76Xj19sL + 8a/Lk/D3o948d1e8so4ic7kKL67U4r3NXvjuxBT8eCYE358Nwg8XxuLHC94s3fHdeRd8f94V359z5+de + wwawP77c5YG/rTPglR7WSZ0cD+Q54GTCSByMt8LJvBG41aPEe/t88M9LE/Hd9Qn45Wl//Pw82/XLbOev + GfD9Wzp89772vwxggZ+/ccEvX7ng90/c8Pu7Rvz+qjN+e464yfbxkBa/Xdbg1zNq/HZcg98P69h2jMA+ + 8TCBD37Y6ovP1o3FK/3+uMQAvYZCqiFsBKrESKtwfxQsmYwMYfpGT0VS1BSSrEmInzsO8aF+TOJeSJnu + iqypGhRPtkMt+3jXVLb/eVa4J8keb5K4/6N1Cj7umY2XO8NwtSEUewsmoD3KDQWzVEgJJVGb64rkBZ7I + iPBFXnQQCmPHExNQkjgBptQQlCeHUKyNQ3FMAMxxgahKCEJVYgAJjx+aor3RHumOTu6vO8oVPZFMnIzJ + 3dGuLA3oZixanmzAxnx3JiB/nOmZjPP9U3C2bxLO9U7AqY5AnGjzx8mWsdJaBLtMBiZAPQ4yIR2o9cPO + qvFYW0JYpuBAXzzu3V2F+/c2Sgbwrt5MrKpejN7SUHTkhaCncArW1cxHd/FU1GcGoSYlkMnLG2WLPFA8 + h7lklg6mmRpUzFShZpYatbPVqJunQ/1CvQQxEriB5L1hjlgfmMmOhKcy1J7fH0IVyVVLuDNaiYb5GtSQ + aJkmj4Fp4iiUEeWTRsM8eTSqptnx906oDnNCBfdRxlguRgIXzRxaC1is/5vKeJMaZIXciSNRItZvZ66p + IfmrJwlsWCCMXyVaFsgliId9WhYpeVw1oUQTtxv4Xu1CBWpYVjGumUiySyPV0iwXYimEPBKynDhBuP+D + bOZL8dSe+PM4W5i6RHGCN+oLJqO9fBbaSmZIBrA5zZ/wlZ5alJ5eJFEtjKBACuc+WT9Zc9TIorjJEO2H + dZk4jcRxhhbx09SInapF5BQdIlhGTNFggTA6ghwxM9AWU8da/2kAixHAi6fr/jSAY0PkSJrshORJtpIB + XEJSWkkC3EzS07NYi2W85lUids+3wQbG551LbXFIrJ+YyVxaaMRDFC/X64PZf/xwqsANh3KMJJMkZela + bCCRWZWgxPLo/xjAa1mvG+aSwLPO15Bcr+M1reG1rVogRo3q0R9Owkdi3hWhRSfFTPtSNdv5UNlKEddA + Ilw12w7mmWNQPmM0SslxykNHomLu6D8N4FYKnaYldmhcbIMWli1LbHn/mLsX26GLn/VEUjwsccIyciJx + XsIEXsX3VvK3/RRGwgAWU0CvjXDEjmQdeQJzOwnqoSKjZADvp7g5SHF0iPxhH3PhLpLcbZkO2JJpL432 + 3ZLtiEHmya15MuwQD5kVqbGXwnJXmQY7SyhES5XYbeJ+qgw4whxyrNkdR5rdcLiZgr7BBafqjThTq8Xp + CjlOltqRJFvjgkWGqy1GCffUqHCReegKc9KlWgp08ppzdWqc5euzdRqcrtfgOMt9ZidsK7XHxkJbrCqw + QW/OkAHcljICvZk2WJXniG3l/J5FjwMmDY7wnM5U6XGF5/BAizOutelxvU2Nx5pluC2WTWiyx8vtDsxL + Tnivl/mnV483+9zwar8vXugdh+u1YhQgiW+MQloeo2aGGoWTFciepERmsAY5weSU4ylsAwzIFSOAA9WS + +Zs3QYv8iSyD+XqCCvnkRX81gKv9h0ayNvuq0OanQouvAs0+vMfejmj2tuP7dmifyH7Ltl0zRQnLVAXK + ZpJHDhvAJral0qVaxlGdtGaLmaS5NsdHMoGFAdxWPA6NuX4wkc+JP8eECWxOcEZlogsas3zQURDI2BaM + /rLJWFkxA+tqw7C+bjaWMTa2l4xDa+k4NJQGoa7MHzUmxmdLIOrNgWiwUNhXBKLRHMDPyK+LvaWRXI0l + 3mjidhv5dme+H7rJi/t4nIF0b2kK6GWpzhhIFUKNMT1Nizq22Ury7yoRcxZqUTlfD9MsLYqmKpE3SY6i + CQrWFePmWCWqWKe1gRSEY7WSYd4epEVHIOvGxxp9vmOwfbwM58K0eDxeg+eSlXg6Vo2bjG0PhLH9MI7s + mqTAKsaNdp8x6PBn35jEvjzDEztDvbFruhd2hFCsEbu5vWe2L3bM9sPG6Z7o43HaeI8avWWocWdcNdrA + 4kK4OcDs4YhyL56nD8/XR4U0XyUiXR0x1+CAaXp7jNPYwVvjABdCr3GEUu0ABSFX28JJYw0n9Zi/mMC2 + UGjsodbaSdDobaHVW0NvEBgDnWEUDMbRcGfbGMvrDp6gwfTJOsyZpse8yVqETZAxJtphWoAdpgQ4IGSc + HJOCdZgY4o5xk9zhHeQCl7HOcB5rgNs4V/hO9JCmgp4Q4oqZM30QsXgCsjPmYsVABfbuXYYjR9dhz75l + 2LSlBTv3dOPYybU4e2ELzl/Z+ifOXR4kNuPcxS04d2kbzlzcKuHUhUGcIU5d2ozTl7dIOHNlkOVGnLy0 + AScvrscJ4tiFNTh6cRgXVuPI+VU4fG4lDhKHzqzAwdPLJew/NYADJwdwkDhwrB8HD/dh/6EeHDzQR/Tj + 0KF+HD3Yj1MHluPKsbW4emYQty7twp179uH25d147OIQrp/fgYdPb8VDJzezHMRDp7fggVODuP8kyxNb + cPX4Jlw/tAY39vXi6oYqPNCfxXixFA83huHRuil4tCoI183euF7ujmvlroQLrpYydhEPF7vgviIXXCxx + xelSL5woD8ABczA25AViWe54dOcHo5M8SUyx3p/vi9XZrtiQbsT2FOaVRCP2xQ9hf7wz9hK72Ue3prhi + MMMN69KcsTxehWVxCqyOV2Idy43EFuagbcxFO4jd6Wrsy9TgcJYeR3IMOJCtxf5cLfYW6rA9T4nVmY7o + TqZWi2FuWTIShcx3RYxnBbFizTqRy43IYj7/c+QFOUBSuBwJ8x2QMM+BOlkuTcf3fzKAxRTQ4o9NMQLY + zLI8UcQkBfKWOiCfOaqAxyqMJGeh6C8WU/NR8FekalHDfFqb5TwMPaqydIxh5B2pjHHCBM7k93LV1PSM + FcVG1DNPNbKem0qGzN76YmfUFfC3+QbUEFX53AdfV4ltlhX5RIERFpYSChj/Sg2opI6pa3BDW4s7Bto8 + sZk4RFyivnykxhl3LGL6PjVeYg55idsvVmnwfI0Gz9QocavSATcsdrhqcsD9pY64XOzEe67E+RLyhhI9 + TuVpcZDnvyPSWvrzaNuiEdi31AZHyBX+agAfTGSOTRIjgPXSg2Wb03RYwzpZkWHAMtaH+HOohfe0Jom8 + IIUxME2BanKTOjFSmtfdYXH/LwNYjAAWawBvaqAmbVBjZ4MO+5hvD9S7/X8awLsrfLHHMgyzP/aS8+wp + 88XuUvLnEl/sZDzfISBG++Z7YAu592C+FzbliqmhPTA4bADvrhiHHZXjsMXkj7V8b0UhY36RF/pKvNBd + 7o0OsxfaLcwPFh+W/mixME9ZxqKJx2zg6zqzH2qJarMvaljWiNLki0qigtsWoqLC779gGS7vjgI2VQgD + 2AsW6pSKcg9Ul3mgsdwTHfxsWa0/NrWNw7aOYOzqnISdzURdCA40zMDpjoW42LsUl/qicbY7GsfborGr + dinWlIajLX0WTJETkT7XH3FhvoiZ64f48ACkRk1ERuwUpMaEIC4iCAvmeGI6ddOk8Q7S9M+TA0ZjRoAV + 5kywwpJpVkgPt0ZlshxdWWoMMk4ctnhgXwF5CjnXUfKqk7kOfxrAV6i/BYQBfH+ZCx7itTzEe/dQuRse + NLnifrMR9xJXLEacr3TGmUoDTlU74yTLYxYtjpQpcKxYhhNFcpwpVuIc2+jZfEdczBua/vm+XBkeIr+7 + muH0pwH8eJqY/lkmGcCPEo8kO+LhZCc8mOQojf4V5u/l6DFSeSl2aATwJf7mbBrbNb8jDOA9cbbYwc93 + JlhjX6odr2toGuiz7EvnLYRJgcsWJR6s1pBXGXCz1igZwE/U6vFUjR7P1OrYz3R4lq+fq3PGC03ueKnF + A692+uDFDk881eqCG806aWTeFbb5C9Viila29wInbCBXXZPlxNjKXJ8jRv0qsDxbjhVZMkKO1VmMnbk6 + rBw2gDvYDxuiyT2WDBnAJXOsYREz6jBODWbrcJL1fMmkxbUKJZ6pVuINctGPWwz4e4tOwiftBnzU6Yy/ + 9biRN/Ic24x4qUmPVxr1eK1Ri9ebdHiV2y81GPFEtbiHLjiarWJ/F7M6OGB5jB0GomToYazsZczsETOk + pLmhJdUd1XEuyFvEODxbhugZTlg4xR4LpzlgPjFvhgPmhMoxi3oplHxJmLvC+J0RZsRMMRKYGkgYwBMm + OSF4ohOmkv/cNYBnzNZiWqhSGgUspoAOmU6uMmwAz56v/C8DWIwAjmVOSs/0JnwQyzwREan6E4sjhszf + uxAm8F0DOC5G/l8GcHY6ryeLujnPC3npBqTGOSJ+6SgkLh2JFOaknCR7FLEtFSTbc9sGGXE2SIthGe+A + TMbAbMbCPOa1kiJPyQAuyXNHcaYLv++MQuackiRn6ktnmJmXKhKYW+LVaOD9bU1QoD9ZjXWMs0K77c1Q + Sgbw+VwFHipS4NkaF7zW5IY3eI/eqib3N9vhg3Ib/J0x/ssaJ3zdoMA3xHdtOvyrl/e8T4a3BuR4tkeH + B9gGT5iV2Mu+trHYDssLRqO/0ArLykZhrcUBm6hlBi1ybDNTL5kcsbfCifpFgUstGjzUybbf746nVvn+ + Xw3gO01ayfi9zXZ3ixroKZYv1qjxZqUGHzEvfcE+9S+LQcLXxGdVznjfrMPzvK5HMuxxPsEGB2MdsCNK + gXURSnQzr9cIbb9EhTJqhxIxkyXzvjCA8xM8kJvgOWT+cjs9yhVJiw3kAgbmfVfq/SEDuDiFdT9sAIsH + SoWBKQY8dTFnCQN4U6HIB8wTxR7YXkZuzVi/0+SNTeRGG5i715a6YB3zzgbGsw1lrtjMPP5XA3hPMXWp + ZAB74FSdH842BRIBOF3nj+NVvjjBOC5M4EMVPjjEeH6oaQKOtk/F4bZp2F8fgt0W5qASf3IeL2pWA7aK + UX0FBslYPmTSS/HxTIWOsUjHvq3DPcL8lQxgFR4oEbNtynGdmvTROjluirWYeQ/urdHiZDl1LrnIynQF + 2tkehQFcyfxtSWe7Sxs2f8mNpOmfqcWE4Xt3FPD/yQAWI4BNxJAB7Ib+4rFYXzkR66omYkX5OOon5sRU + TxQv0SJrvur/0wA+muKCS+ST18glHktT4Va2MICVeDRPhUcL1dISi4+WUhOVq8lfdXiogny10R+XOqbg + YFMI1ghdl+eD/DT29RQfwgvpqR7IombLIS/JSVGzXzohj3GrkLmhPEOMAh6eBpr1J5bkGKjzwPJ6b2mW + jS7en1be//o8XkOcBhmL5ciM5LWI6Z8TvSTDNz3WVTJ7BTITvZGT7Mt+7yWtmx8brkMM41DcYh0SlhoI + PRKWaBgvGE+i1MiK1yKPfT6b/TwlygkJi/9jAGdF2JF/Up/F2qEycjRqF49AV/RorElxwPZcJQ4Usd+K + fFSlw7UODzzc4Yp7mvm6njmz0p7tzw6DOaPQF2OFpoVW6IqwwtokB+wkvz5OfneW+7iSaY+H0m1wJ9Ma + L+Y54E3ywHeZ296tVOPt6v9tAN+XPQb3pY/ib0bh0Uz+jpz8KfK4J8hlrxUacTZHhV2Jjlgb7YA+ojVa + jtoYlWQAW+L+2wAujfccAuuxjPVYHO+BvGgX5LCexPTPfzWAhembNF9MBz2EuDlDo3/DZzhiEXNJFNuU + MH6jqJMjuX3X/P2rARwd6oQlU20lAzh8/CgsDh6NqCl2iOHvhfl71wAeghPiZor1gBn/iYRZQ4Zw4hwl + IQxpvk/Ezh1CcriK8UWPHF5bIa+lJMEdZcx9Jrbp6jj2jb8YwOtKPLC+xA2rGUsG2K97MlToJNfuSFFI + 6493M6/3ZerIn3VYK0ZTZw79j3Wa7f8hszNukSs/3+qL59v8cLPaFefyZDiUZof95D+7MpXYnU0uTt49 + mKrEWrabdeFW2PoXA/g2j/ciudsr5BICr7IdiNkWXjcZ8KJZj1vFcolXXchT4xT1hxhcsTXfiNW5RvRQ + 37Tz/Doyhh6WEa8Fx1+WO2QAr6JmEVhDrBfxkNxju9kN28oYw4Tpyn4mIAzgTUUqqdxSouHnOuzgte0l + v9hX64YjDWL6ZW8ca2SsZOw81hiEw9VB2GMKJJ8fxxgbjI3ZgehjXTexvVSzX1Ww7Zhj3KT/ZvPZR3OY + 1/PIiQqXOqI8ygG1CU5opwbpZ94U6xNvEg/DlOt5fgbqB9ZZmZp6QSthJ7GjjJ+ZGNfJbzeR868UMwAx + FtcmKlEZ7QTLUiLSicdlDGU/rYxlGWePBm4PsN1vZt/eneaOg1me2E/9e6IkEDd6FuHNnTmwSl6sweJQ + a5KhUYiYbY04SZw6ITNajSIG2BIGwbIMXlCOB4WgNyqYCMw57CRpTHRJDNCxKmQwIaaE2yN+rg3JvC33 + IeaWVyCVSTGFnSeWAXdpmBOP44Bw8fQDO4BUsmEvIRlbOs0JEZNt2QFsmESNaMsNRG+xmL9/ArqKKGCS + Karn2yJpqhWigqwQHzwKmewYZjb85SQ0RxiIb3T44cXV4/D6Wh+8tdYN76414P01Ony0miRjpTM+XemO + z5Z745N+DxJMd7zVSnJZT0JgccKNckdcK3fCw5UKPFxLkVDH4FUhx6lyOUm/HHsoKDYl2GJZhDVawkah + RhjAYv3IWQ5InW6NhMmjET9pJBKDrZAZMhLls2zQJkb/Jjhja6oL9me5U8z6MzEG4b48X9zDm3GJCe5C + jBano5Q4vNgJW8NssXr6GLQH26B2vB3KA+yQ42+PpAA5YoJIDMc6IsLXAQuFAUxE+Ngh3HsMZntZYR4R + 422FPH8rrF40Bhez1XiKCendZld83eeCH1cY8cuAK37pdcOv3Z74vcsL6PQG2r3xa5MnfqxzxzdVWvyz + QoN/Mtj+s86ArygW/lnvim8a3fBPCgrJIKaQ+gcD9Rfs5P9MscO/2dF/YlL8geLgqzQHfJ5uh8/zFPi8 + SIO/l2nwIcXWG4V6PE1Bcy3KBhfmjsLBECvsoIDbxPu4ebIVts+2xc5FcuwmidoeTkExxxbLZ41G76wx + 6Jg5CrWTrFgXVqjhb3pnj8YmtrMtC0djx4IROBE5AvcnWeF5EsxPOrT4ZhWvcxuvb58ncNCNMAAH9Ph9 + jxq/Dirw01o5vl+txjcrNPisn+fXpcH7rVq8RXHxRqMBb7e74aOVY/Hx+kB8vDlAMn+/2jcJ/zo4GV/v + moB/bh2Lz9e54+8DwgCmeOnU4J0mBROTA16qkXEfGkmovFCrxHMklpIBzPq71eCB+xjUjmSRtKaKKUGV + 2E/hdLzcgAskvQ91KXB7pQIvbGDiGxyF93dY4dO9VvhiH8udVvh4ixU+WGeF91aPwLvLbPFWjz1ebbfB + i83WeLVV/NGuwasNSrxQKcOdYntclwzg0ZIB/CzF4VvtLvhowBtfbgjAD9vG4efd4/DHofH4/fg4/HI+ + EL/cx1KM/r01Db88HYZfXl6EP96NAz7LAL7Jxx/fl+C33yrwG2rx+2/1+PXHavzxjQn4MBu/P70EPzww + DV+cHosP93vijU0GvLRCjZdXavG3LT74+lAIvj06Cd+eGIfvzgTh+/MBhA/+fcEL31/wxHfnPPHDGW/8 + eNoPP5xg/e5ww/urNHi50x63q+zwQJ4jTiaMwcE4K5zKG4k7vG9/OzgW3947BT89FoLfn+d1vOqDX1/3 + xE9vuuKHtw347n0dvvu7Dj9+ZcCP34ppoPX4+VsjfvvaFX985o4//uaK3990xh8vO+P323rgER1wnw6/ + ndPgtxMa/H5Ey7bjDOz3APb54Kcdvvhq01i8vTIQD5OUbUmyQ8scK1TNskNJmBuy5gWRKE0guZqEuCUh + iFkYzEQfyOTtg5ip7kicTNIfLEPR+NFs0yROYVbYv3QEHqG4/oik/JvOafisNwyvdIbhwZoZ2JPPuBfj + jeI5/N1cI9IWkUQu8UPm0rHIiwqiyBiPgpgJTO4TSZinw5w2jQR4EhPOeFQmB6MmZSIxHg0JASQ+Puhc + 6o7epW7oizSij0mqL0qMmmTCjNZgbaoB24tcSf79cK57Ih7bMQ+3d8/HY7tm49bOWXh0cDoe2TgZV9eE + 4N4BJr86PQ4zVhyvNeJIrRf2VY/HZlMwBmtn4sTKVDwgDOBddTi+rhSDrUlYWbEQvSWh6CmYioGS6VhV + GYau4ilozAlGc/YkNKYF8zzHozZqLMWUF2rnu6J+njOa5g+hcYERDQsFhAGsReNcNRpJuOrCZKhlDK6a + aYeqGQTLmllOaFqgkVBPclRJAlUWPBKl46xQNp5xZMIIWCaNRs00O9TNdkLNbEdUhznCFGqL0hm2KJ5p + jXzG85wpo4dGADNG5UwchWJ+v4LErSZMgVpx3LlOaGCOa5rniNaFCrQxbrVTOHRQELYx7zUtkKNmrphi + 2h6mufYom++A4kUOKAiXIXeJgqRSSZImoEYG8+xdpC8lsReIIJboJBRRKNYVTEG7OQwd5bNQkz0OlrSx + vO9+0rolZRSb5WKkcIwrSikyC8MNyGUdZYbKkEpxkzxdiYSpSiTP1CFxBsn/dAPbpTOiZxgRxXLBRCVm + jxOj3OwxdazN/zCAh6aAjp6uRtxkOVKmcJ8hdsid7oDS2XJUzuW1zpWhe4ESA/OdsGqeHVbPGYXNC0Zh + b5QdjibLcC5Hi3vK3XGjfjweb5mCeyvG4nypN45T2O7JMWJLmhbrJQNYheUkM8sXO2LVIhnWLqDInivy + gRKreC1rwlRYPVeDFfO1GFioQ+8iPbopZtooYlqZO1ooxJtFKQz4hST7cxxRMcMG5eQ1pVNGopjcoWSG + FSxzKGAW3B0B7IiGxTaSAdwaYY+2pQ6S+XvXAO7md4QBPDBsAIvpqYcMYEf0L7JFz/zRGFgwBuv4emeK + Doco2I8Uu+Mwhfm+HLW0DvChAiWOMh8eFH9MUjzuypVTNMkppGXYni+nmFZiZ6GKQl2DvSSfe8UDFiR9 + 28g7Bgv5nVIl9lTocYA5+FA991vvjP3MzwcpiI7V6ingKaJMTjhSZI0jhWNwqUqBa+Q2dw3gS9UKXK5T + 4SI5zblaFc4QJ2sUEo4zTx3m93eV25MA22J9oTVWFgoDmLk3bRRak0egL8uWRNqRBJrnV0HhTx5w0ExC + Xq3HxUaK3hZnXG3T45E2sQ6wE27W2eFOgw2eb7HFax320lTQb3YzP3Ub8WK3F56gYLjHxOtIFlN926KD + /fT/zQDO+YsBnB+sQ8GkIRP4rgFcMmwAW/zFOrYq1Poq0OAtjF85mrxkkvnb4GmPRi9bNPrakF8NGcDV + PJ55qgxlbFuSATxfgbLFPI9FSqmPFsSopTWmKjM8UJ8rDOAAtJeMl57qtqS4SgZwqTCBGUPLosXU0UY0 + ZXijI38c+ksnY5VlBtbXzcGGhrlYVROKTnMImkqCUF3kj6piP1hK/VFRPhZV5QGoEaN+zQGoLvVFRZEX + LEVDU3k2mvzQUu6P9lI/dBeORW+eH/qzfTGQIdYAHpr+dnmmEDtimkMdmmLZ7iNkqCP3rF2ip1B3QcVc + Z5TOZJ1NUaFoohplAQpYxipQwXqrZr22BurRGcS+NEGPvmAt+gOdsDrAHrtZTxfn6HArTounElW4FanC + A/OVOMkYsHu8DKvITVu9xqDWaxSaub1iqjM2z/LC9lne2DXTG3tneGPfTB8cCBuLfXMDsCPMHxtmeKFn + nA4tfgrU+8hQ6cH4bBSjfq1h5r0y+yph8tegcKwGWb5qJHgpsNjVCbMNjpiid8A4jT28NY5wUTtKBrBK + 5QAFIVfZwFEtIAxgARvI+J5cbQelMIK5reT7SvVoqDWjoNGOhFo3Atq7BnCAEhMmaDBtih6hU/WYFaLG + 9HEOmMJ4GOxvjYmsj5BgFaZMdkHIVC+MC/GAe4ALDD4GaHx0cB5rhNcETwRMGpoKOmz+OCQmhaGiIgU7 + dvbj1LkdOHNpDw4e34Q9h1fj3D278eidc3jihXvx9KsP4hni6VcewFMv348nX7oHTz5/Lz+7H7efuw+P + P3sfbj17Bbf53uP8/hMvD+GpV+/HE6/cizsv87MXL0u49cJF3HzxwhBeOIcbz57BI0+fwtWnTuLqnRN4 + +PZxPHznOB66fRQP3TmGqyyv3jyMhx85gPse3I0rV3bg9JmNOH16A86f3oiLJzfigbODePTybjz38DG8 + evMcXrt1Dq88OoQXHj2D566fwQs3zuLV25fw+p0rePXxK3jl8ctS+SbL166ewCtXduGZwwO4M1iFx5an + 4fGepbjdNhuPN0zEzSp/3Kjwwg2LOx6hSL9W5oJHSl1wrcQF9xe54FKZB7UYc0bdZJyon4kNBdSF+RPR + UzIVXaVT0MU+2V8cgNXUpRuy3LA9VcwswPiSYMR+4kCSK/anuJF3e2Jnpje25fhiQ7o7Btiue6lbxYix + tTEKbGC5OV6JLYkabKfe3C3Wc891xtFcxvQ8I/Zl870cDXbkq7Ell7/LdERnii3qqQtNMdbSGmlF8WoU + iCkLedzsBFdkxrkgJZJ5l7wgcbEC8QucEEs+MKSxFVL+z+f3xfq/4g/NYqJEmL1x7KfC+E3WS39qlsYx + 9i2VI5t5KXuhLXIXD6Eg0hH5kQ48tgymJDUqUvWoTGPMShfQw5yuRWmaCsWpjJPUHGVZCph4DZZcrbR2 + bG2hEXWsY4GaAmdU5hlg4XWaM7UwZahRnknwtYk5vDyH55GtQwnjTDE/L85iP81UobCA51quQ02dG1pa + PNDd6oU1LV7YTZxq9MR91c64YVLjiTLqIWrCZ7j9jEWNp6v4XrUS1y32eNhkh/vL7HC5xB7nCh1wtkiO + 00UKQo1jWUrsS2L+iRiNwYXUi4tGYt9SWxwhVzgezxxG3nAoXs57TZ0u1oBO07ENaLFRLFWSpGScFH9g + DRnArZka1CTL/zSAqzJU/20AV/+3AbyOuXJjPdsEy+18vYc5968jgHea3TFIbjO0DjBhHjKA91T6MVcO + Yb+F8U+YwOV+2FPig93FvthV5COZwDuL2B7zPTCYx30UeGFjjrs0CngL39/JfLCncjx2V0/AtoogbGSu + WM3fLy/2Zn7xRq/JB90Vvuiy+KCLx+uqDEBHlZihbRxaK4PQXBWExqoA1BO1lWNRJxnC/qhlrqlmXrGY + /GEmLBZu/wUVEvxh4r5NFT4ot3jDZGFOMotRxF6o43HF8l/d1f5Y2RCI7V0hONA/DSdWzMKJgTCc6J6L + U13zcbkvAvcsi8aV/hic64nGifYY7K5dio3mCPTkzEV1zBTkLAhEwpyxiJnjj5j5/kiOmIC0qJBhA3g8 + Iub7Yi71VRg56NzpKsyf6ojwqdaImDoasTNHIWuxNarJMXtzNdhl9sTxal8cKhF/FKqlqZLPFshxQZi/ + xUrcQ041ZE44s625Eu64t8xteJs8xiTWnCZnqnDB5SoXnK92wZkaF2l023GLDkfLlTheIsfJYoW0zuV5 + 8rK/GsD35vy/G8A3yHeuJTngIbZlsfavGPX7pwEstsUI4ER7XP6LAXyQr+8awDvix2Av442YfvFkoQJn + 2J/OsR+dNylxxaLCg9VaXK9zxmN1LrhdZ8QT5IjSKOA6HZ5h232W5XPkji+yj77U6omXOnzwTKsHHm/S + 41oj64ZcUMwkc6ZChSNlgqPaY0MGOWG2E9bnkofnqbGWfFaYwSszZYx/MqzOZNzM1bHUYFmqGp2Mn43R + SlRHyGFa5ITSubw/jFl97Jd7ClxwsdITD5LL3uL5vlClxFs85t+bdPisWYvPWli26/FppzM+6XbBh73u + eKfTFW+0ueDNVle83epMGPF6sxEvN7jgqVpXXLW44TDPYUeKI9bH22FZlC11rgO6o+ToStCik/G0hbmg + Jo5ckrwugTpx6RRbLJpih7mT7TFvmiPCpjlImD1ThtBQMbJXgxnkS9NnGf40gMU00CHUUMIAnkjcNYCl + kcLDBrA0Cnia0/AawIr/uwEcZ0QKc1EyERWtQ/gS+V8gQwT5m8CfBjCvJS5aGMEsYxX/ZQDnZ3ugpMAb + +eSAaYkyJEaNQUrUaGm0b0GqI0ozyGuJojRH5CXZMyfZIyPeHumJjshIVSI7S4/iIo8/DeCiLBcUiv98 + U40olcy1/xjA1ZIBrBw2gDVYxxwzyNi6J12JY7wHF6hpHmbMfk4YwI1ueJ3t760qFd5lbP9buQ0+q7DH + N3UyfPtXA7hHh8/7ZPigX4bX+w3SlM331GjZ3xTUP7ZYXTACK4qssNo8GhurnDBIrbKFWmdLqQO2ldhi + d5k9jlWzjzeocV+rBtd7XfH0sAH8dL8nnuz8HwYw2/nteg0eZzy/xdzzJPWRaIdvsj1+yH4kRv3+y2zA + d5Uu+DdjwJe8lvfY959hDHkgxRrHo0diT6QNNlPvrVgsQxt1auVCtnOimPqzkNo9X4z4inOVDGCxDrBk + /sa6SiN/E8P1SFqs/4sB7IviFB8UJ1PHJ/0PAzjbiBUFbthMLfCnAVw69HDRLrMPNhW6Yj3z9hrypNUl + blhb4o71JWK9YCMGi5yxrUjPPDNsAJe74FiVO07V+eJcUwARiPMNY3G6xg8nq8SawGIUsLc0FfSBmkAc + apqIw9Tq++smYa8lCDtL/LCd7WMLc7+Y1nV3vgH7SvQ4XK7HKWrCs5V6nDfrccmkH4qxpVrcV0y9wFh5 + tVSO62YZHq2V42aDEjfZ3x+s0TFuUetSD68jx+hKUUimSAXjhCmV/CKZ/VXwqBgxk6iObdJFek88JCfW + ARYQfKk0hdom0YAyvi6PJ28R7TRZh9YsVwxQZ22oCMaGyolYWT4OXfl+wwawBtnzqDPnaZExm+UMJxQO + G8BN8xjXhAEcR23N9i9GAD+SppWm73+cce9xxr+b+So8Sl5yo1SN66UqXC9T4Sp5zX0Wtt16H5xvnYh9 + dROwoswPtTkeyEvzQhrvcVoKy1QPZHKfWdxnNuNldpITshjf8xLsUMIYJq0FnKdEU5EK7eUG5nexLIUb + OhnnWniP69geKtlHhTZNlwxgHbJiXCQDOFu0szg3pMW4IZ3ISPLm/n2ZSz0Rt9iIyAWMP2LNWra/+KXO + SIgwIF6MBhaz0kQPGcBieupMxpdk8sq7BnAikbnYBkVRduS5NqiLtkYzY8yyRDtsYmzZV6DD8VI9zrEd + 3Mvc81i3N25S519ln7uPcf1MlQzHzOyvOaPQH22F+tlW6AofQX7miP3ZenI9Iy7laXBPmi0eSh6NW6kj + 8XyWNV7Lt8VbxY54R/x/XaXFGzV6vMzyTpkMj+Tb4b4s5s20Ubgv1QrXMqzxKPPv4wW8V2z7D5HTneK5 + 7WROWMPzFgawmO2tLlqFSuaCCsZgs2QAu6Esnn0vwQulklnqRQ7vzvp1RfZSPTKXsH6XOCMzXPefEcBs + O381gGPDVFgSKsOiafaYz7wiRgIvnaWSEDFLiUh+tnTm0BTQ/9MAXjRxNBYEWWHh+BFYMmmMZAJHTbVB + 9DQbxEwXfpiAI8To4PgZMsRzH9KI4DBh/hLMMeKcEnlOCQv4eqEKaRE6ab3n/ETmhmRvaWSzMIDNwwaw + WAO4J9OVscWDscMTq4vdMMD66mIOb0uVozXZCc3MD23sk20pSnSkq9GbIZZ5UGO9uN85Kpwv0eERtssn + 6z3xSsdYvEzcrvXA5QIFjqTZ4yD5zz5qg93UCTsztNhCzr0+cjQ2LRmJ7YtH4EjEKFxiHnpcMoA1eIW6 + 5GUxFXSOAq8WqPAaudoLjMW3CmS4n3znYq5YY96AQ+QQg9RkKxiHuhg32tJVfzGAdRLHX55rlAzg1QLU + NOvZvjaT4+2sIGcn/9hebsRWnv9gsRaDhVrGVw02FlL7idG/wgCmltnOvry3yoi91AJHeI3HGr1xumUs + LrRPICbiTONE5p0JOGyZgEOmKeT0IViTORY97Idtid5oSPJBFdtSebwbsiPUyAh3YhtyREGEw5ABHO/E + upWjl/19dT65Ffnq5lINdYSW5ycMXyV28/rFLIDCDN7GeLqVfWxzOWM+eeuyQje0UttVMxdXRDnBEjFk + AldyuyLSHhYJtqiLJCcibxAzX+0RBnCmJ3WwEccK/HGtYz5e3ZoJK/FkUuQcYcjasCHbIIqBcGgYOYNj + lBaZDMJiIXYRhEvT2agonotSxRoGDBbRGmmR8GReXOxcG0TMGMmGPgaRs+wQPY/vLVRK5m/EbDkWziDh + YqOfy0Y+f7oDXwtDWIHw6TKET7LDwgljpIWxC5Ya0ZwThO6iCegrm4B2Bm6RFHMX2iFxihWiAq2QMGkE + ckLtUEOSuSVLhUs1RjzT74/3No/Dx4M++PsWV/xjixGfbTHg801GfLXBFV+v88DXa33xJcnBZ8u88FGP + p2T4PV2pxC2RoMxyPEICfK1ei/vrtJIBfJJE+GChE7al22M1iXr3wtGoCx2BylBrlLPOCufKkTCVHXfi + SERNsELMOCukjBd/NFtLI4DXso72ZrrgNJPnQ2Vj8RiT6R0Kudv5nngsy4hH051xjQnhCpPckSUKbJ3r + hO6JdqgNYkLws0Wqlw1i/R0RGShHxFgGDckAtsYiItLbAUt97LDAewTCva2Q5GuFUgaTDYttcSlbhacq + nPHeXQN4uRG/DhvAv/d6Aj3eAAM1Or3we4s7fiZh+65Oj29qNfimnsSsyYBvml3wrzZ3fNfhiX+3uOLb + Wmf8kyTpH9m2+CzdGl+SEH2b4YAfSfx+ZFL8NtcJX+fL8A0b8LeVrHOSp89r3PE3CutXGWDuUKg9EGGL + o9OtsCvECpuDrbCR5WDoGIp6J+xcosTWcAVWhI5G38yR6JklzLJRqON3zLyu+klWGKCg2B7DzkHxvydi + DE5EWeHeBCs8WTSS1yrDl8v0+OmvBvChuwawBr8OqvDTOuWfBvA/+rT4qEtMQaTHOy1GvNPmhveYuD7f + EIwvtgbj8x0T8OW+Sfj28FR8d2QK/rVvIr7dGYB/bnbH56v1+KRXgY87FXi3heS1zhGv1snxRqMabzSL + p1R1FCnOeJZ4inV7p8kbD1e740yhhsFRjr0UeXsZII8yCJ2jCHqwQ4FbAwo8u5r72WCDtzeNxIdbR7At + j8TfNvLaVo/Am8tG4PXeEXi1cwxebhmD5xpH4anqEXiu1hqvtyrxSr0Sz1cMGcA3coamxhAG8NMk02+2 + GfFhvxe+WD8W3w0G4sddgfjtQJBkAP96IQi/PjgBv1yfiJ9vT8NPz4bhl9cW4/f344AvsoB/FwI/mfDb + 71X4Aw3AH434/adakCkDH+Xgt2ci8NPVmfj6wnh8etQPb29xxksrVHhpmQbvbWB97p6Afx6YiH8fn4R/ + n2Z5bjz+fT4A/77oj+8v+eO7cz74/owffjjNczs2Fp9tdcG7yxR4gdf4mGk0E4AYAWyNQ3FW7Ecj8YQw + 3w8H4t8PTMNvPF+8MgV4axz+eMsPv77tiZ/eccEP7xvwwyd6/Pgl28M3BkKHX751xm9fu/Ca3IFPXPH7 + u87Aawb88aQeeJR4UIc/Lmrw2ykNfj8mDGC+t59taJ83ftntj2+2jMUHa4LwaDNJOMVV51wrVEwfjfxp + Yp1VHxKDQMQsCEbUgomInBeMmNlBiJvhi9jJLkiapEHWBAeYQ8Zg1SI77GIyPJ9mh2dImD9tDcS3vdPZ + HufgpbbZuLdiOnblTURvfADKFrgjN9wbWZEByFwqMBa5kUHIix5HjCdhmYyqrNnELFhSpsGcPBk16VNQ + nzEVDekhaE4Zh/YYP3RHuGMg3BnLFmtJcJnMGWvE1Lar4+QUCM44Kf6oWzEej22bjtfPLsFblyLw9uVw + lovw+pl5ePnoLDy/fybubA3B5W43nG8m6a834ATb9JGqcdhtEaR3Ni6sSsND2yy4d7AChwfysL46EivN + 89FfOgsDxTOw0jQLy82h6CyegtaCEHQVzUBv0Sz05s1CJ8+7LX4cWiN80LbYE+3hnmgLd0PzIlc0LTSi + UYwCXqBB41wS5DAFGsKcUD/LATUkSjUzbFE705bkkuSF+aaRqOV2BYlU2YQRUlwsY2wuJ9GquGsAhzqi + bpY9asMcpOn8y7mPUuZAMRV0LklYKmN6Kr+fTWJWxO9bSOyqw+SoCnUgeLxZPF6YnTT6t32xGh0UFqIU + r8WTpFWzbGCaaY2S2STPc2yQP88WOfPtkSmm7qFwTKbgF0iNUCItUonUpQRzRtoSNdK4nzTep7TFOhTE + eaMufyo6zHPQYQpDTfYEVKaNRWW6HyzJXtJUI2aSWAuJqyWO+ZmENX8eSQdFTco0ByRPJXGcSpIopoGe + rkX8nwawC6KmG6WpTv/vBrAGS4lo/jZhihxpU+VIn2yPfMkAlqGCddzAe9DFvLVsngNWz7fF2rkjsC18 + DI5Q0J0hSbuXgvRhiszHmoNxp2MaHqobjysVAThtotgs9MC2bBdsTDNgdYIGyyKd0C/M1oUyrJqvwOq5 + BOt8BYnvchLfARLq/jkq9JB4dy3Ssr61aA5XS9M9Ny6SEywXytEw3wnV5DHCADZNG43SqWIUN/Py9BEw + zx6NWp6nMIDbSZiEAdy0xBbtFD0dfN3+/8sAdkD/IhuexygMLByDdfztrjTm8AJ3HC/zwhEK8f0UNQfz + 1ThCgikE0pFSAw5TjIspCneR9G3PFyN+VdhD0rmvTI/9Ys0P8eSheAqQZHBToSM25juQqFLImLUkpBTM + 1XrspAjaVanFHr4+yO3DFhUOlzqRp9jgUNEY3FuvwbVWVzzcLP5MEdxIgcv1Klyo0wyZv9UKklcZ+60T + DlWR0FscSTBtsbHYmkT0PwZwe9oIigEr9DPfi+nYtlnEOThjTwWvoUKNo9U6nGkw4BK5wn3MeQ82UwjX + O+JatQ0eq7PGM002jGf2eK1dhtc6mQ86nfFchweukVifyJZj89JR6J49Eq1sR/+/DeCJ/9sALh42gM1+ + KlT4KFDjLUOdp0waYfpXA7heMoB5n4dHAAsD2DRVjP53kgzgMra3YrafnAWOUh/NjpCx72lgJu8VBrAw + fu8awNXkwWUJQ+vqlLDflizlOcToUJdEYp41Fv3FYuqxIQN4nTCA68LQUzUdjSVBsOT7wlzgi/JCotgP + 5hI/VJSS45b6w1LkhbJ8V8IN1SVeaGAfaTUFoIOf9RQFSAbwgDCASeSXk4cvS3fBylxXab32viyDtM5R + PWNJQ6SYms6AusWuqJhnRMlM8mdec16wEnkB5K3kkqVj2X/F9NiBFE+s64FJzlg52YB1zFWbJyhwYLIa + l+fq8FiMFrdjVXgkgm1pLtvrJEesCbBHq7c1KtxHwuQ5CvWBDlg2w4iNc7yxdbY3djIf7g8bi4NzAnBw + fhD2zA3EZr63eqoHOoK0aPRToNZXBosnea6rNYrdGad9ZDDzXpcHGZAXyJzqq0a0hwLzXeUINcoQYpBh + nNYJ3honuKqdJANYLRnA9n8awA7qMZCpBIYMYJnKFnKFNZzkoyBTjJSgUI6ASm0Ftc4KOmEAew0ZwOMn + aDBlih4ziGlsI5MZB4P9rBHkOxoTAu0xJUSHGTO9MHPWWEyc6guPAFfoPLRQemig93OG13hPBE3xReh8 + 5v/42cgrikN7lwmHjm/BhfsO4+y9h3Dg1HYcObcL1+7cg1feexrvfPoyPvjqTQnvf/EG8Tre/exlvPvp + S3jn7y/hrU9ewpufvIg3Pnkeb336It76x0t493OBF/H+V6/gvS9fxnufv4B3Pn+O7z2Ptz97Fm9+/swQ + Pnsar336JF75+DZe/vAWXvrbTbz4AfH+Tbzw3g08/+51PP/2I3jutQfx9Av34vaTF3D90ZO4cHEHzp4d + xPkzW3D+1Bbcf3Y7blzei+euncJrj1/G20/dR9yPd556AG8/8yDee+ERfPTaY/j83afw1d+ex5cfvIAv + 3nsOX7z7LL5860l8JL5z/RRePb8JL+xvwzMbC/HMqkQ81bsAT7RNxa36IDxW64ebVcIE9sB1ivUbpW64 + zhj6UIkbrpi8cbmWOaM1FOfb52ObeRrWls3AclMo9eE09JYEY3lxENZQJ27MocBPd8XuZBfsE7MuEQdS + 3HEgzQN7032wN8cfO/MCsSnTB/1xzuRFSgxEKbGammJ9rBqb4lTYnKDFNskAdpZmdDiaT45T4Ip9OYy9 + uRpsy9dgQ64CyzId0Z5KkZ1kj4oER5TEyxkvVNKolewEI7ISXJEeKwxgLRKGDeBYxhZhAMcvYF6WZsnS + oIBxRPyZKf3pnmZEUaIGRdxPMc9jaGpDHYrZ/3KZhzLD7RibbJFNDimQG2FPOKAgWsZ4pIYpWcd4JaaO + JsS00akaFKeqCcaoDPX/w9hfx0d1tV3jeLB4RjLJZOIuBAkhIYEkJMTd3d3dBQvu7u7u2kKRAm2xuty9 + 671bqFCjpXhhfdc+Ae72fZ739/7+WJ8zc+bMzDln731da82afW2UUytX5JmiKl+NumJzaVZvgwRL1Oab + oyrHjBpfhTLJNFb2IdNYem9ptgmK+VohP68gndeZIUdeuhz5eUqUlJmirsEabW226CE/ntZuj8XExhZb + 7K8zx0vUhK8Sr1WaUP+qcKXKGJdrjXGJ2vuVan2crNLH0Qo9HCzTw74SA+wpkWNXkUwqd7uVemldkj5W + Rg6UZv+uiRiEDTEG2BYvx45EBbYnKbGR9359khxrkplTU02wLEWFBUl9Jb5n8HyfG8A9vIYmYf7+Xwzg + KdSr/5gBzPy5mPpsWYMxVjawT3D/5lY7qSScVJKt2gZL2V+FCSzN/q2xk2Zora93xcY6opYxsHYw87oL + NlY6Y32ZI/l2nwH8HCvFjN8Cvr/IHksK7LCE2+VlPKbGnZ8zDOsaPbCybggWMw/MLXfCTGEAlzmw7zug + t9oBkzg+Jtc6SeUhJzcOxcTGYRhPdDUPQ2fTELQ1DkFLgzta+XqrqDhRNRhN/KxabmuqB6O2xg01f4N4 + LlBd6yKhUjKGHVFf4yTNJG6rcUU3r6u3YTDmtAzB+sm+2DUjAIfnh+LY/Cgcnx2NYzOicXJGDE7MiMPR + qXF9M4B74rGhJRbL66IxvTgUbSljUBI5HKnB7hwTrogJdEFSmDtSxb4YD8kAjhVrqUe4IT7SBanRzsiK + tpdm42QHs++FGKAiivw7Q4l57MubGhyxp8kFe+rssLfaEgcrNDhWKQwJ02drSpvjRKWGsOQ+KxxjbDlM + bnq8XDy3wIkqC6kE9AlqmuON1DjCAG7oK2+6u0b8WVtJHqfAbmJ/hQKHK41xsFSGo+ynx/OFAdxXAvpM + luH/bgCnCANYH6eTDfDSMwP4eJwOTsTr4mQixwD7+HEec5Rjaj/fs5PH/t0AXpkwEOtSdbA1x5BjQ449 + 5UocIPc7TJysU+GVRjNcbLHE6y1WuNxshSstFn0GcIswgE1wnfzvrTYzvNtli3e77fBWtz3eaLfCOfF7 + V6MSR+pkOFDH66sWy1OR75H3LcrSweJcIyzJV2JRAccUx/r8HHLyLPJzYl62HIsZS+bnqPsM4CRjtDOW + NkXLUR1uhMpxemgjj56dbkr+a8vvcegrG1kjSsIr8VmDHN+3muCnNhP83KnGTz0EeeIPwgSebIVvJljj + K+KLHht8QU77eZcF/t1ujvdazHGl0RKnq62wKVOG5bxX83kfp4sf+8nFJ8UqMJ7crYuxsynBDJVRpsig + Hojx0kaopw61jT7Gehth7CgZ/EYZEgYY4yvDaF8lfEarMGq0KbzF+r9/M4C9fVQYIdYAJv5rAJv+0wD2 + MYKXrxF8/P9vBrC5NAM4JdVGKgUdFWMqmb4SIhXSNoK8U+C5ARwXI5dmAUsGcJz8fxjApUUOKMqzRHYa + 9WOCPnMOdWYyeRXbpyZXiUbqkLo84z4jmH0rJ8kAmSlGkgGcw3hfQg1Wybj0wgBmDhKTe8qZj/6nAWyM + LraxZABnmGNZphnWcfzt4Gcf4hg4zbj9FjXCR80W+Ija5JNaBb6oMsA3lbq4VW+I31sUEoQBfKdbjd8n + q/HzFDluTJXjs6nsm2zzs21qHKhXYC31yMIiLcwt08KCukFY2mCI5dQsSyv0sbREF8uLB0rH7Kgzkn5D + O8LPPN1tiqszHF4YwJcnWOCNbk2f+dtphjeelX9+jce/3qDElXol3q6V4+NKhWQA/8j89Dv11x91FrjT + YIWfmAs+p+65VswxnjYQW2O0sDpKGwsi9ahTDdAZrI865vIy6vqSMOZ/cuSCWDUKEyxeGMBZwpSLZZsz + biWHmXIrloQQBrA9ilIdUZrmgNIU6olk638YwJNyLTBLrBNf+jcDuMyOOcdR+pORMIDnM2/PLrHGLGJO + iQ3mlVhJM4OXFVtgRYmG+eW5AWyBncxX+5odcLDdBYfaB+NwqxsOiDWBGTfFLOBttfbYxHyynnF+feNg + bG7xwAbmkfXMEeLPSiupM0TJb1HWtc8App6lpt1TayHl+IO8b4eoYY9WqHGC+vVEqUoqCf5KmQLnquV4 + lTr0YrMSF9m+IlYdqzGnNjbDUsaPqeQVYl1MYQBXsG9J5Z7F7N9nZYklAzitzwAWs4ALCckATn1mAD8r + /1zNPtqQ0mcATy9xxsKa4Vhc54E5lUMwifywLeOZARwoR3agSloqK2e0EUrGUAsFGKJz3HMD2Aw7+H2H + M8xwLkOFS+QKr1OzvlGgxGvU7xfLVNLs33OMwWfLlDhdocLxKjMcabLHvvYhWNvghulss8ZsK+Sn2SEt + 1QFpYksumpmhQVaGCXIYL7OTjZAZOwg5jO/FKXooTzNAbQ71a4Ec7aWm6K4wIzTSUh2Cp9TnmaOS55TL + uJAWYoQMXktWrCVyE22Rkyj6mjCBCT4XBnBWshOSY2wRE6JBOK83fCw1VZg5EqIskBRpgcRnpaCFAZzN + eyhM4HTGmeQIfSSF6yIpVBvpEeSZ5FuVCUaoT2SfZ66axLw0l7ltVa4xtpZqsK/KXPrT1OlWG7wxyYlw + xKXxNjjHeH2EuWV3jRHW5g/C7HgtdI3VwtSIflieJsP2AubochucLFLjpQw9vJI8AJdStfB29gB8lK+N + T4v18FmljHFEhX839BnAVzhWzxUb4GSODo5kDMBRHv9yhjbOMi++ms82KVTjZJ4JdvP81jKnLojXx7RY + Q8kAbok1RgN5f12iJWoSOd44RoX5K1CWZIcS3re+dX8tJPM3k+M1O8IMWX83gMcqX8wCTg4ykUo8CwM4 + jDkk2EtPKgMd4avgVoFw5hSxzIAwf6PYz/5PAzjYYyDGDdFCMBE2vD8iR2gjmjkqxltbmgUsDODYUfqS + ARzPvPLcAE76mwGcIi2jqkJKKNsx3JQcSYO8eCv2J15TqjC2/2sA18er0ZaqwYQsS0ynrpnN2DKLMWMS + 75dYRqMtxQCtbNtW3rd25oi2FDk60phLmVumpCukNl/3zAB+td4G19vs8dF4VwlXmm1xosQYOzIMsCXD + EBuYF1YTK1OVWJpkhMXR2lgeNQjrogZiW4w2jiSyvagt3s4xwfs5SryXreBWjg8LjPEhx9e75cZ4rcCQ + nIqciLxjvzCACy2wNNcMM8TM30wlOv9mAE9ibBKzgKdxjIhZwLOfGcCLqCOXVdlgTZ1DnwFcxefPSkAv + Lha/s6mwsFjZV/6ZcWtZlRorahjjhAFMDri1yRq72uxwsHswTk7yILxwfLwX4+hI7GkYgd11o7CFmnR5 + 8XDMyx+KablDMD7HHc1iiT72r/QQBduHOTdUHwXhev8wgCcxR88qVGIuv3+R+H7GkeUVvGcVcqwlv1xH + rGFOWsmYKkpXLyy3wNxSK0wpsEB7mkpa81ea/fvcACZqqQlrJFCbRuhiBrXjMsbI9Zm22Jxtj9XM6dsK + nJkrg/De0kxo5Sc5kXSbI2asHFH+hoj0M0DcWBnig2QUqnIkMtCIxcKzYsW0cvFvE5G8rJARrZZM4sRx + RkgKNkK0H4mVZz+Eeg9AmI82wsdwMDCoRvgZSYZvwEgdjB4+iNDmY30Ec5BEBag5UIwR4qGPce4DETFC + F4UMTs1ZruikUB9f7I6OPCfUM9gXhhkifZQWUkZoIdtHC2XB2ujm4N5SYY6znTb4aKYDvl/miF/X2OD2 + anP8tlojbW+vtMTvS63x+yJb/L7AAb/Nc8avc5xxa6YLvp3qjLcbKUprFLhAnGtQ4WwrxUIzSQif7yyn + +CwwwoJkHUxh0GoP6Idqby1U+A5EKe9RQSCJGQds5PB+iHDXQoSrFhLctFA0coBUGnRBHIVDtiVOFljh + YokdrpU74OM6F/ybYvGjYg0+YAd9mwPxUrY1jiWZYzMD8oxRRmh210OR/SAkWg1ApAPvowsDCBHhIEpA + 6yGSiLM1RJwdtw6DkOzUD0WD+6OF938ZG/8ISfp1JtivhXE7xQIPp/UZwH9NscbTKbZArwMw2Q4gsX5K + Yv2owwL3KQ7ukCD90a7GHRKmPydY4d5kW9zvtcc9kvA/O3kfeX9+KNDBD9kDcStzIG5TJNwrluNhmQke + VpniAcmfMJMfdtnjbo89SZ4TbrU6kARa4p08Fc4nGGL32H7Y6KuFlbyPi72IMf2xgmJuBUnvkjAjTB8z + AL1+/dAbMAAT/QagjcfVD9NCO4+dGayDTWkkHbyne9KMsT9hEE4ma+FyUT982qKPH6aY4P5y2z4DeIs1 + sM1CMvKerDWVDOCHC41xb44pbs8U/zw0w81JGnzdbYGveB++nGCHr6c44ZdlI9l3RuLXDSNxe6sX/tzh + Q3jh7pYR+HODO35faYtfF2nw4wwFRYqM7zXCZx2G+HebMICV+IRCRswu/3enNd7vsMHbHfa43umMS21O + OF3vgL0FaooWI2zINMQOEqRDTJCne0gsepW4Nl2O92cb4eO5evhiri6+nK2Lz6br4N+TtfFBzwC83d4P + bzb3o7Drh6t1Wnijitde3R9vNejjXRKst54ZwBfZRufzdXCpSA/XKbQ+6aGYmu6AXxa64c8V7ri3xh1/ + bXHHk91D8OTIEDw+PVwygB+8MQr33vLHg4/D8dfXCXjycy5wtwR4WI0nj+sl8xdP2/FUGMC3K4H/ZOPh + tVDcO+uD28eG46fdbvh8hQXem6nAO5MYzKeZ4ZvFrvhp7XDc2TEKd/Z54/d9Hvj94HD8cXQo/hQ4wHPa + 54Y/drngl/X2uLGI96/XgIK1P86V9MOJbF3sZjtvS9TCPjEDuPeZAXxqFHBtDPAp8YUXwWv53BEPP7fB + wy8t8fCGBg9umeHhr2Z4fFuNv37X4Mlt9oefrYDvLfH0aw2efqzG0zfVwCUzPD1tiqfHTPFkvwme7uJW + rAO82RJgX3qy3hV3Vrjh2/nuJLC2WE+iNsFPC5Uc97kjGOB9bJEQMBix44YjKtCDGI4EblP93ZAwQoN0 + DwUqvGUYH0zSlKTAPia6SzVmFLaMQ73D8PNUH3w9eQxFuy/2lY/E8nxPTE3zRFWYE0qiByM/dgiyIt2Q + FeGKnMjByItxR0HcMAo0H7QUhqKtOASNuWPRkDUazTk+aM/1RXeuDyZme2JyymBMjbaTyubOpiBdyHNY + GKKLJRTL6yngD7VZ4OxsJ7y90QufHRqLm2fCcetiJH69EoVfLofjx1eDceOlAPznsD8+3emLq0sH4/w0 + Bxxvt6BQs8K+WlfsqBqGnfWjcWJqMl5ZVIJj80qxsTsdcytDMKdqHGZVjcXMSn/CD1PLfTChZCR6ikdi + SoUfZlWHYGbZOPTyfMcnidLXzhgf6YQJEQ7oCbdF5zMDuD3EDO0kXe1BSnQEyNDBXNU+Wg8tzDXNvtpo + Ha2LTuawLhKidl5nE18XBnClRz9p9m8VUT2sHxo8B6LRWwcto0l0JANYD3XCAOb7y4kSX33kj9JDxshB + bLeByPbURhHJXSXJW52/HLVSyWkdNIzmd/rroTtUgYnhJCRhJFEhxhQRCjQHUBjynCp5TOkYHRQG6CA/ + UBfZQbrIED/+hsiQHEqEy6TcmhpBcJvGfJoeoeJWQBA6NdvZAc353hhfMRbd5X4UFUNRn+FKOKOe4rFa + GL8krnUkG/XcljOXF44zRtZoA6SRPKZ4GyDR2wixIwwQ48E8MsIYUZ4mCB9hglBPFQKHyV4YwKPc/m4A + G78wgONGGSPJW4GMURRO3s8M4DGGqOE9bOG9mzhWH7PIExaG67N/DcC6WD3szzHFy+XWuNDoiIutrnit + exiFgTfOdY7ASy3D2XeGYAfF5boSJyzNIRlNJIGLMMREiurecYaYFmSEacyx08gfppFITyYJ7hHwk6Ob + xLeLhLeDhLclzBjNbIPmUDmamXNbBPheMTu8gRxEtFW17yBUjR7I9hjYZwAH6qAz0kAygDtE2Wc+Fuav + ZABT/EgGcJQBJkfxPCIMMI1if7pkABtgdrQhZkXpY2roIEwe1x/TQgZifowh1pCIbmOO30sBvbPCBpuL + zbClRI0dFMm7mf92VQtYYBvF+NoiikxRFpokdBNF85YaK2yts8KmOkuspZBeWipmXOhjHrG4VIYVJIKr + a0yxspoksVKJ5dJzsUawChurldhUJsMmxv2tZXp4qV2DM12WOEWhfZw5QQiwoy0qHGxWYV+TCrvqFdhW + J8PGGgO+3xCrqwxIfIUBrIP5JbqYXayDqXmDMCGzP3oorqbn62FBuQIr682wvskS6+rUWFevwiZygW1N + JtjTYoqDrUocaTHi9+njpXptnGvSxpU2HbzTZYD3u2V4f7wx3p1gjmtdNjhSqsC6JG3MCtZCpy85Fdu3 + 3tcYJV59BnDO3w3gweYvDOACUQJ6hBpFnv80gEsGK1HhqkSVsxI1DnI02pM/2bFdHWXoclSg06nPBG5z + pKhxYf9h/+9g3xYGcOULA1iG8nFyFArzd5wesoL1kBNhhMJ4lVQKWhjAXSXko2VD0V3khpYcB9SkWKIy + 1hSlkUqURxmjOlaN5iQrdGe7YGpJnwE8r8kfc5rHYkZzACY1+KKpdDAq8yjKcinOChxQVuiAiiIHVBYL + OKKCXLAoV4PSPAvUSsuuOKGr3IXf64JJxc7oLXCiwHB4YQDPFOOG3HJ2vhUmZogZwBwHkQo0MnY0ULDW + jDVF2WgV8j2VUgWKtCEGSHFjDHLRQ56THiocDdEx2AS9HhRL3lZY6GOF5aPMpbV9d4wywdFAU1yIMcPF + GBVOMy4dYPxdOpJj1F0XdU7aKLHrj1LHAWgcKsOUMZaYH+iApQGOWOnnhPVj3bBpnDvWEysCXDF7lI00 + y7jDTZTpVqDeyQhV5LaltjootddHKdup0l2NsiHmyB1shhQnFSJslQiwVsDHUokR5koM0SjgZCqHjakM + GmEAK/UgV+pKZq8hYWA8CEZKAR0JBnJtGMoGQt9QCwZG/WAo7we5QksygE01/WFuNRC29gYvDGBPTzW8 + R5pi5DAFPBgH3XmNg5214TFMjtGjrRDEawkLH4nRfsPg5G4HM1s1lNYqmDv3zQAe5uuGiIQgZBbEo7Ih + H5NntmHLnlXYe3QLth3YiNU7VmPH0V24/MF1fHHrW3xz+wd8f/fXZ/iF+Bnf/fkjvrvzPW7++R1u3CH+ + vEl8i5t3v8WNuzfw3b0buHnvW3x3n48ffIvv7/2H+76Wtt9ze/P+c3yFG/e+xDd/fob/3PmU+LeEr27/ + G1/++hE+uyXM5bfxry8v4/1/X8Bb772CN64exdHjG3HgAM959zLs27UcJw6sxfmjm3DtlT1498JhfPT6 + SXx69TQ+f/Mcvn7vomT2/vHdh3jw82d4fOdbPOb5Prr9H9y/9Tn++M8HuPnOeXx16RA+PrIS72+dhHdX + VOHdRVl4a2Y43uz1w+UuD7zRNhiXmpxwodYBFyptcKHMGhfLbHC23E6qGHGs1RMnJ4zF8d5I7OiOwJqW + UMyv9seMEi/MoPCeXTQE8wtdsIRja4UwgNNEhQFzbBJIs8aGDFusy3LCujw3rC5wx+IcjlFq2Qns05M5 + fmfGqTAv3gSLEkywJMkMy9PMsDrLAhvyGJc5JjcXWWF9oQVWF1GIF5lS6CsxJcsIXal6aEgyQE2yXDKA + C+MYw/g5WfEaZMZbID3WAql/N4CZIxPG6SMphFqW35sbb4oiCvKSVEuUZ1mjkihONGHcMUYRUZKg4uea + oEQYwBT3kgEcqoucEH3khhogl/k2n+K/KIbxK8kElSmidL0ZeaGaYGxKe2YAZ/BzskxQnqNCRR6PyTdD + VYEG1fka1IhZv/mWqMo1R0W2Gcoy+T4eXyLA95ZkGEvGbxEh1q3LS+F5p8iRm2qI3DQZ8qg1S4pNUVNr + jeYm8rU2e0xotcd0YnGzFTbXmuOAMOBqNHiFOewCc9alKmNcrDbG+WoFXq42wrEqIxyq0Mf+Mn3sLTOU + yuxuL5RhW56c7WcoGcBrYnSkH9/Xx+hjY5wcWxKUUunnTbzv64g15NWrkhVYnqTEYqmst1wygGdSJ87I + 0bwwgJt5zvXpxAsDWN1nANfaYFqjrWQAz27SYG6zGRY1mvSZv/XMt5IBbI4t7Q7Y3CJMXvFjvA2Wlplj + WZklVlZZY22dA9Y3uGBDgyvzoys217kRg5nf/2sAry9lPyxxJJzJA8QP67ZYUWCHVXy8qtS5r7RcjTvW + 1g7jd3j0GcC1Q7Coyk2aATyLmEFMLbVFb6k1JnGM9FbzOb9rWtNw9DZ5YFLLCIxv80R3qwc6WzzQ3jQM + XcIUrhuOjprhaCOaakegud4TjQ0e/xP1w9HA7xWoaxiKhoYhaGkcilY+7m4YhkmNwzGd3zOv2QNbJo/F + gVlhOLkwFmeXJuPc4lS8Mj8Jx2fG4vCUaOyfGI0dnZHY3BaNTW3xWNUYh7kVUZiYG4zaRB/kRHkgMXgw + YgJdEcdtYsRQpERzX9RwYhgyk0aiMHM0GorHorM8AM3kv00ptmghX+xmWy8osiSPscfOZlccaHXDEXLN + Y82O5CJ2OMX+eL7JDucbbfCKWOOXHOxYpSUOlVO7FJtjb5EZDrHtj1RocJyvnay3wctN9jjB4w/WWVDb + mGFvnRn2sN/uZp/dVaHAHnKhg+Rcx8i/TnD/iXIVThSKNYAN8FK2Pl7J0u8zgDOeGcDEa+xzLwxgxouT + hGT8xuvhZT4+lSLDqVQZXkqT42iqHPs4tnYk62Fjoh7WJIg/vQ+UDOA1qTrYxO+Q1jcmjzrEczpWo8Kp + elO82myBN1ptcIW42ixm51j+zQBWSeVur5MTXu+wxnUx87fDBueazXGyTknNqcfr0sPeahl2VsmxudQA + K3N1sCRbB8tyjahHlVhKLMlTYlG2AvMzZRIW5yixrMAMi/PMMZOxYmIyuVW8Es0xCtREyFATSi7NsbqQ + 3HhXhR1OUwu8Rs34dq0aH9co8WWdHD80K/FTqzF+6zLFr91q/DLeDD+N1+DWJEt8N8EaNyba4qvxNviy + 0xKfktt+xOsRawBfYrucYLtt5H1ewns1h/dzRqwBpjIGT2a87CF3a4szRV0M42eYChniN01RdZCcL5g6 + JtBHCX9iNB/7jqL+8ZHBx0eBUeSizw3gUc/WABYGsO8YNbyog7y8jSUD2HeMCcb4mTwzgFWSATySOmXU + aBn3KeD3wgCWSwZweJQpYphzElOskJxqg/hkS0SRP4ZFKRAhIEpAcxseKZcQKQxgPo/lvYyNVSCO15UQ + KwxgFdKTzZCbZYnCPFsUF9mjmPwvP1vNeKyQysoWM2ZWs52aC6hJSzToKNKgMc+E+xjD2c9y0hXIYjzP + YcwvKrRFWbHgozYoybaSDODidAvmDQ3KxTIEzw3gJBVakvoM4N5kE8xNM8fSdDOsSzfG9gw5DuYZ4lSx + Ea7VqPF+vRofML5/zL70eaUhvqnSw616I/zWpOhDmwK/d5vit8lq/DRViRvTlPhsqine7zXHxQ4Tahbq + mfIBWFashUWV/bCkXpdxWB/L6/SxrFwHK4oHMV72p34ahF11htjfKMf+egMcbjDEa5PZv2c44tpUO7zG + fnShS43XOtXs76Z4rZW5p1mB1xrkeIO4UivDm1WG+LDcCF9zLH1fxT5YY4bfmbN+b7DAj8wFn3KcXxEG + cMYgbI3rh5Ux2pgbqYte5uIO6oR66tUK5vOyCGEAK1HINu0zgMU6rNbkAlbIiBEGsPpvBrAl8qjVC1Md + UJLGey8ZwFbSvRYzWDt4X3tzLTCnyPaZAWyH5SXMEyU2WEYsLbbComJrzC20lkq5zqRW6DOAbbC4xEoy + gFeWkMdTg24oVWMLx8muGhvsZyw83OZEuOIo4+TRFlccJO/ay7y1tdoWG6hb15TZYlUV8xPzlsDaCles + LrTDihxzciszrOVYF1xoY6kltjGO7qm1xP5axlNROp9a9nCFGkdLTXCMEIbQy2UqvELNeo459EKjChea + TXGmQcOYxRhbRV5WYoHZueKaVZIBXEYeIxnASRrCDKL8s2QAp/eVJi/iay8MYHKnfxjAHBuN7Jvd2RaY + zhy7qGYYljKHzqseiilFrujIovbiOJQM4LEcA/7kL37kbv5KNATJ0R0sw8ww8oh46vZUXkumGmczlLjE + /i0M4MvFxrgs1v4tNyFHNca5MjnOlilwqrLPAD7cYItdTS5YUe2AKfnm5BhmHI82SEm2lcZ8SqoV0tLU + yCAnyUynJks0RFr0APaHAShIpJ5K1kVlhgHqGHObipRoKzGRSkI3k3M2FKhRI7Qh+0cmtWliEHkkY0tq + pBnS2b+kWb8JtlLp58wkB2SlOCI90REJUVYIH6dGMK8xWJQlDhEGsDWSIi2lUtDJ0cIA5vmQ+2bEKZES + aSDN/hUGcFqkPu85dSTbvS3bHF2MMZN43jMyFVjI2L+u0BQ7ys1xkG1/kjnzbKsdrkx0xvVJTrg2yR6v + j7fFSy2m2FcjI4fWxZKU/pgV1R/zYgdgDTnYvmJL3jtbnCkmN8wyxLmUAXg9rT/ezR2Ef+fr4PMSfXxR + IcNnNcb4pF4YwGa4VqXC+RIjnGB+OshjDyRr4Vj6IJxm3j1DLno6T4VjuSrszSI3ZN5dlsw2jZOhh7Gz + zwDWoC7FmvrdFtUcfxUphJj5m2AjrZkr1vwVZZ9F9T1hAItJGJnPDGAx01YYwAkBxkgKNOFjFWL8lIga + I0xfI4SN0ueWj5lL+p4bIJyQTOAxRojxl//TAB4xEOOGaSF4qBZChmshzKO/NBM4ylMbMV7C/BXrAesj + zseAucuIkEkloBMCFEgkkgL7zF9xbmKZ1XRRNTDaAnliLXJxTUm2KBeznOPMUR0rShOT/3LsdGeYY2q+ + DfWTHaYzVvRQF7SkGPDeaKMxQQdNSXqEARrZP8XM/DZiPPPKzFQDrOE93sd+eY55XBjAH3Q54cMuZ1xp + ssFLJSrsTDfAJvKc1Yn6WMHPWJZghGXxhlgerYvVsbrYRM6zI0EPh5PkOM08dJUc/K0spbRU6DvUVO8V + KPFBqQrvcny9nm+A0zmGOEbecaDQDJvzyDXI4afxPd3k7x3Z3JJbCBN4PHWLwCRiSo4aM6ht5jDvLa6w + xvIqO3JoooZxjDx9aZkZFnJczS8yxrxCckiO64Vl1H6MXUs5jpdRq6yuMyeft8CmenPsarHFkR53nJ7s + iVemeOPsVF+8NN4HB5o9sbfeC9trvbGhyhsrK32oRUdgYt5QNGe4oCzehm1kiCRqPmEA53JMVcTwPica + oZNcb2IW9UmBcZ8BTB65pNwYS8Sf7yqMsLqSuoY5dD21k1h2cVmlGRZQa8woMsdEXl9bqjHq4xWopv6r + jjSUTOC6cEPURhhIqOM4buF2BmPjsjQL6l87bMpxwIpkc2zOd8ZLXUF4UxjApRnuyGegSApVI4ZBMYKd + M8rfSDKC+6BHci4WBTehaNVI/zjJYCdLCjVBHINm7FhDJHAb7aePwBH9Mc5rAEJGaSPER0+a9Rvsa4AA + dmZfj4HwGjJAgp+Y8TtahdggS8QGaBDqaYRxQ7QROZKCNspSGpgN2U5oy3NBS44jE4MGJQx6OX79kTdG + C+VB/dFEQTidwXJfgzUTvQ0+nW2Nn5ZZ4e46c9xbZ4o/16kJDe6stsQfy63x+2Ib3F5gj9vznfHbPBf8 + Mtcd380YjHdbzKR/I58nIT0r/knJ5yeazBi0lNjG4L4y1xAz4wcyOWih1lcLxSO0UOjdH/n+hsjkgI4d + qYvwYbxmNy2EOmohxkkL+cP7oy3ACAuiTHAg0xKv5lvgSqEl3iu1wrcNTviOye9bdravy83wKRPuW0yw + ZzOssTfeEvMZqFuH8D7YDECshoHBahDCHA0R7SxHlD0Dia0BYm0MkGBtiGQbXWQ56qHIXRdNPI9ePx2s + itLHEXasN2vM8U2XNf4gqXo01VwygJ9MtcLTKTaAmAU80QZPuizwV6cGjzrN8LBDjbsdKtzp5L3r0eD+ + ZCs8nGaLR9MdcL/XBnfH8z4ymP9QrIsf8gfiVt5A/Faoi3sVSjyiUHraagV02wOTHfG01xmPpzrjwRQ3 + EnsnfFNvjQ/FwvlpRtgf0h9b/bWwdrQWlvloYbF/P6zg4FgRZYRF4fqYGdAfUwP6YWpgf0weOwDdvsLY + 1kIXj50TqottWRY4XuogmepHGWheTu2HyySDHzfq4+ZkY9xbZoO/Ntjh6VZrYLulNAv46Vo1Hi9T4dEi + E9yfS4I3kyJjijm+o8j4T48Vvuqx7TOAec4/L/PEb2u9cHuzN/7Y7o27u31xd6c37m/3xP2tQ/HnWnv8 + vswcv85X4ceZctwQJvB4I3zeKccnHQp8wvv3eTfFSpcN/tXtgPcZHN/udsO1rsF4o8MdJyqtsCtPjq05 + +thTJsPRRiXO9Kjw2iSKtCkMfFON8SFJ8ce9cvx7kgwf9RjivXY9vNU8CJfrtPBatRZer9HCG5V8XN6H + NyoH4S0S2jdr5bhaboDXivRwsVgPrzGBvlVnjM+EkJrlhF8Xu+Pe6qF4sH4o/to+FE/3EceG4ckrHnh8 + gdf3Oq/3LX/c/1cYHn2dgL9+zgbulkozgJ8+rAUeNwN/tXFfA/BTGZ5+kYZ7lwPx5xlv/H5iOH7ZNxhf + rLLAuzPkuNath2udRvhkhg1uLHXDrQ2e+HWHF37ZPQK/HfDE70dH4M6xEfjjwBD8sdcNP292xLdLzPHl + LAWvWQeXeY2vFGjhKIn3rvgB2C4M4Px+eH2isVQC+o9T3sCbAcDngcBXo4EvPfDkUxc8+tQeDz+3xsNv + LfDwe/btn83w5Df2z9/ZD363AH5hn/jBHE//w/3/NsHTt4jXTHkPVHh6Uo0nB/l8jxp/bVPj6RZzYIMN + nm5wwd017ri5cIi0nvP6FD2MZywQM0uzhxsgdZTVMwNYmL8jEBXkieQQL2QGDUGShynyRjCJjhOzEsyx + nUnsDAnTv0iUbs0dgZ9ne+G7qaPwQbc3Tld7YEOuOxZkemJqpi+qIgejIMoVWZGuSA91RkaYC4mJG/Ji + hqIo0RNVGX7oKI9GT0U02ovD0JI3lvHSF515vphc6EdhMBpzcj0xL9kVC0hsloSosCZUhnVhOthK0Sz+ + xX6BceGdNS745uho/HYpFLevhODPd8Lw8F8RePBRGO68HYjbr/vhl7N++PGYHz7bPBJvL3LHuR4bnGiw + wuFqexwod8P+yhFMKpE4NSMTB3qzsK45DnPLgzCvahzm1YzD7OoAqQT0hMIR6C70QBe3k8pGY3plEKYU + B6An3QMdcW7ojHZCTyQRYY/ucFu0CwM42ALt48zQQdIlZvh2MLZ2MTd1+uqifdQgtBIdo3XRE6RAdwhf + H6dA41gmQh9tVHv2QxXJVS1R59EPjSMHoslLGMZ6aPc3QHMARRxzXNUYHZRzX8loQ+T56COD8TR1hDYy + PXWQN4oCb4wcNZIJLEpHG6CJ72ln7usJUWBimIpbFTqFOT1Wxtf0+8oPSwawHgr4HXmBeuwPekgbx7hN + oZEUQog1ASk4BMSSCalhSqRFkMyFC0KnJjRsa3s05Hihs9Qf7UWjUJvuhppUJ9SSuNal2KE60Rq1RF2i + DeoF2YugQBqnRNYYfaSRQCaTaCZ66SOS+TXMXQehQwwRMlSGoCFGCBhqiLFDjV4YwD6DdTF6iAH8h8uY + x5WSARxNxI/qW0c4fZQMuT6GKCIhrRxtgJpROryP2pgUqI95kQosI8leEa2P7WlKnCyzxqVGF8Y9d7zR + 5YbXeobg9Ukjcb5nJF7u8MT+hmHYToG2ttQVi0VJzmiSuXF66Bqrg/Fj9Qk9TOB9nsj2mExS3e2lh1ai + jWS6PVDM+KU4IjlvDCepD2V7C1AQNY8j0Q+UoWWsEZr5/sYAfTT466Oen1cXoMv2G4TmQG10iJm+ouRz + BLfCAI5mW/J5Dx9LBjDFTy8fT2VOmhYmoIeZ3Dc72oAiRvwDfCAmj2OeChmA+bFizRMN+YI99tW5Ylel + HbaUaLC1jMK7yhJ7KL731jG/EztqrCQDeGWejCJaja01FNLkA9sbbCQDeHWVGguL5Zidr0foY0GpDEsr + FFhBkbmkXIFFzBlLKDxX8rlYH3h9lTGFO8VOuRG2V8lwot0cpzvN+9Z0Y054YQA3URQ1mmBnnQJbaxkD + qg0k83dFlT4/Xw+Ly/X4XXoko7qYnq+NydkDMTFjIGYWGmBxtQlWNWqwtskSa+rVWF3P76ag31CvxNZG + Y+xslGFvgz4O1unieL0OXmnSxuttunizyxDvdMvxDvPbOz3kQB02OFAgxyqKjBnB/Thm+6PVT5TqVqDE + W448TwVyPVSSAVwwzBwF7hQzbhTswgAeZooCTzMUjVS/WAdYMoDdFCh3VaDKWdFnANsZodWOYt5ZiYmu + JhjvZoweVyW63LhviBI9niZoH0ny7PV3A9gIZRyTeRyfWUHkVCF6yImSMcaaMsZaSWsAizV8J5QPw/gS + d7TnOaMpnQIy3kxa17sqxkQqLdWeZocJuYMx7dkM4DkNYzCz0R+93PbUjkJdkStKs2xRnGWDklw7CaX5 + thLKCvg8jwKUYqY4Wxg01mgocUBHCWNhiTMmFjmit8AR03LsMT1blIC2wawcm77ZbRmmaE+QoyGcY5Ji + o4p8vYLjptDTAFlDGQNcdBHnrE0OSXHpNggJLoxrDoxN9hxTbkpMGWGO+b62WO5nizWjKXp81Ng72hTH + A03xarQGr8aocSqK+0LNMJ/itn0YhYybNvIdB6DYZRAaPOSY7GeJeUEOWBzghGV+Tljh74xVY92wJMAZ + c33tMdHDHK1spxa2RYMw65147x0NUObAmMttobMMJe4mbFMNMtw0iHc0QbCNEqOtFfCyNMZwC2O4Wyjh + bKaErVoOc5UhVAoxw1cHMqUODIXhq9SGoeI5dKFvNAgGRgOgZ6AFPWECy7Qgk/cZwBrzgbC01oadgz5c + eF7CAB4xwhQj2T9GDJVj2GADDHbRwdDBjIujNAga54zoGG8kJIxFSIgvhnu6wcbJEiY2ZrB0toTjMHsM + HzMEcemRyC1LR1VTEcZPb8PKzYuwausyLN6wBIs3rsLuk8fw1mef4+tf/8A3t//E93cfEo/w/b37xAN8 + f/8ucQffP/gd3z24je8f/fYMv+K7hz9LuPngp77Hj37C9w9/xA/Ej49uSfj+cR9+eIEf+vDX9/jhyfd8 + z3e4ef9bfPP7l/jyp0/w6Y338K8vr+H9j1/H9XfO4tSZvTh2fBsOHdqIw/s34PTRrXj1pV24euYArp87 + jLfPizLPp/Hpm6/iPx9cwR83/4WHv3yOp3e+BckWSLaA+z9y33/w+38+wrdvv4ovLx7GR4dX4Z2tvXhn + VS3eXZqDt+dF462Zgbg2wQtXOofitWZXXKxzwkWKdWH+Xiq1xasVjjhZ745j7d54aWIQXpoai4NTErC5 + MxILy30xM3cY5uQPxdz8IVhAUbs0zx7LM62wJt0C69M02JBqho1plliXbo01mQ5YneOK5blumJ/ljClx + luQYJpgQrsD0WBPMiTfBAo73xdSaS/ne5ZkWPN4SG/KtsK7AkjHbEiuLzbG4SI1ZuUpMzpShI8WAOdcQ + VRx7ogxzPvNfVqwxMmJMkRZjhlSOnZSo/xrACeReicH6EEssZUQZIy/BFIUp5tIPnBU5tqjKtkER9xXE + GRMKFMYpUZqokmYE58fIkM1clMNclBtmiNxwI8IA+ZGMU9FylCWZQpSNfr4mXmmKCUpSnxnAmSYoz36G + XDUqyEEr8gluK/M1qMyzQKUwgHM0PEaNsixTCeJ9AsUZKhQR/zWAyQNSDJGfLkfhcwO4ygoN9bboaHZA + Z7MdepptMb3REitqzbGtRoMDDRbki+S+tSY4X22Mc8SZagVeqmZ+qpbjYCW1fLkhIcOuUjm2FRphS7aM + bagvGcDr4ok4fWzkfd4Yr8DGhL6Zv+sSjLA6qe+PlSuTFVjCfQv5+gK2ydwUBWanqRgnzaQKCeOzTNAi + GcBGqOO59xnAjJ1lFphQK87XDrOarDGnifGwWYPFjaZYKeU6E6xtUGN9kwW2tjtgS6sTNjTYS2sAL2OO + X15mzlxqzXzoiM3NbthE3rOZ2FLvhq0Cta4vDOANpdwypm8occHaQkfyADusKrDH6iInrK8czPd4YFOD + B9bVjcD6+hFY2zgCq+qGYUkNdUGlK+ZX9WEmuca0YmtMLbPD1CpHzOA4mdnkgWnNnpjcOhKTOGZ62kcS + Xuhp88LkNm/0NvtgcpMPJjaPRk+LP18bi84Of3R1/hedHdQU7aOl/R183t5JPdHhi/GdozGBmNrOccfX + 57WNxlI+3tkbhiOzY3FqYQouLM/EpWXZOLcoDUemx2L3+Ahsbg3BqppALK8ehzVNMVjVlIDFdfHUAlFo + zRqLkkQfpIUPRVwQ9VPwYCTwcUrUCCTHeCI11hMFGWNQWxyC3qZ4LOhKwJy6QMwu8+C4d8BCjs8tvPa9 + DS7Y1+qGwx2DcbJzCE51Dsbpdheca3cm93TFpVZHnGmwwwlyr8OVFthbqsEOtvu2fBV2F5lSv6jZBy3J + XWzwUqM9eRN5So059larIda33Ftjgj3VPLZCjr3kWodqjXmsKXmOJU5Va6SZbn0GsB5OZ+nh1SxDXMo0 + lAxggdfS5JIBfCZZH6eEAZxoiJNxengp3gCvJMtwJkWO06mizKwchzm29vC4bYm62ECetDphEFbEDcDK + xIFYk6aDjfz8rfyuPeSIhyuMeU0meIV987VWK1xts5VwrcUG16lTr7Mfv9liimvNxrhKDnhFlMBts8Dr + HdY432qJlzke95VxTGX3x8ZcauwyA+yokGFTCblhng6W5+hgRa4B+yj5pwDH+rIsjrHMPqzMNcHKAg2W + FVhgFuPDJMaGjgQFmmOUqI2QoTaUOjlOTn6vxq4yW5yqc8CVBmu8V2eGT2uo42vl+KFJjp9blbjdZYrf + u9X4rUeNX8eb45eJFvhxgjW+EwZwjzW+aNfg4xYTvNdgjOt1jCFVJjhaasr7QT6coo85CeTn8UaYFm+M + yfEqdDGGNsWoUB1lgqIwE2SLH/DHGiNqtBIhPsYI8jXBGF9j+PgoMcrHqA+j5PD+mwEszQIe0wcx49fH + l/tHqSSImcLCBBYGsI+fiWQAi3WAfakTR1Mn+gcaIyCIoB4RBnBEtBpxiVZISrOREJdsgag4NcJjjBEZ + q5IQEU3NRR0lEMGYLkzgGN5LgVjmAzETOIV5KiNFg9xsKxTk26Gw0A7F5IrFeeYoYnwrTicfZm5qyDFG + J3PVxFLGNrHWe0HfmvAlGUoUZKqQnW2KHMb9AnLP4oI+DlqSbc04b4GiNHOUpIl1gNX/NYCThXlAbc24 + O4k5aTbzzGIes/6ZAXwo1winigxxmePk7RoV3q9S4iOOl88qDPEfaowf62T4pVEh4dc2BdvZBL/2muHH + acb4hvi0V4X3JprgUrsSxxsNsa1iAFaXaGFFNft+vR5WNBC1elhZrs39A7GuqD+28PEeYQA3cMxU62JP + 5SCc69bg6lR7XJlqiwvsT2c7VHi1XYULbUSLMS42cTzWG+FyvQxXqg1xvVwf7zHvfEEddZPj/edaM/xW + q8Gv9eb4gTnrE2EAU4OdzNbFjuRBWBmng7lRuuilRuykJmwMI+dmbq9k25WyvxWLP3Ul8r4mWSGX7Z0d + Z4XMGAukRZIPRFDTC2OJz3Op1wup4YvFLL0UG+ZtS4jlHhpTTNGZocaUPEvMfW4Al5CbF9tgWZE1FuVb + YCHbemGRDeYUUAOw/WcW2WF2sR3m8bjFJdZYzvZeXWJOzqLmWFZTl5pJ628fbLClFnTE0VZnHG9xxgnJ + BHbGfo7LbVU2WFdKjlNkxffbYGWFE1YzZ60udWQssCEfMsPKTA3W5VpgY6ElNpdYYXu5JXYzbu6ttsC+ + Ggvsr9LgYLkZDpaY4EiZKY6VqnCy3ASnGKfOirwv1imnfjzLe3uO+fOleidsLbfB/AJzdGdQQ6WIyie8 + h+xzwviV1v5Nt+ozgEW/TNXwnlEbkt+INYJLOYb+YQBz7Dfx/T1Z5phebM+cOZT9ZgQW1Q7HjJLB6Mlx + pFYzQ/44BXIC5Mj2l6EgQInKIBVaQlUYHyrHzDDq0zhTbOf3HKauOsM4d4Ex5jVhAJca43KVKV6rMMGr + pQqcKzHCK9wKA/hYlRkO1VHH1/F7y6wwKUuFWvIvUQkmiW2dmGyNZJ5vMts3lXEyPVWBtAR95roBSI/q + j7y4QShM0kFZmgGqmD/q8+VoLlKhmdxK/EmtgfdI/FGvJFXNfGmEuEDhyxggPsQYieHcF20pzf7NTnZC + RpIwgZ0YK+wRG2GJkCBTBI1RYJw/41+wORIibZAcZYnkaHPmWRVSGF8yGDNTyTGTI/TIV/WQGkmeGS9H + ba4V2kvsMZncZRr74sw8DebnmpJrq7CxyAw7y81xqIa5pJF8vc0OV8c74Z1Jznin11EygV9pUeMg+d1O + 5pQ1mQOxLHkAliYMxCbGjMPFljhTYYvz5NXnc2S4mD4I1zIH4cN8XXxWpI+vy42ktbn/U6fG540afCQq + vVab4nyJDMeZm/al9MPuJC0cTBuIk5l6OEW++BK5+THGvv25jEvkd6vSjDGbXHB8nAwtYnmCBMYzYQCn + Ur+nOaCSY7AskXGUeiAnRtNX8jlcg8wIM8n8TX9mAguTNWWcCknMIQkBKsn8FUbw8zV+xSxfYfRGCvN3 + lBEifAwQ5q0vQTyO9mObsc/FC8/omQEc6jkIIcP7IXh4nwEc6tEPER6D+mYCj9SVSkLH8v2SCUw9H0sk + +Mmkz4gjEqRZwKIktTGSQ8SkETED2AI5sVYojBezma1RGmsprU1eGc3xwRhVH6dCG/vQZI7pacW2mFIk + jH1jNJJv1MQOQG3cQNTzcR37Zg05dx15SkO8HroSDTAtmTE4y4icidy9zgLXWm3xDvnGe+TEl5nXXypW + YXuyLtbGaWNp9EBCB8ti9bEi3hCruRUcfkuSIXYmG+IQubn4w9sl5qsr5OLX0w3wZoYh3s1X4P0S5gIx + 1go4vnINcVzMAM5XY2OOCRZmKjElQ8EYqUBHDvM8dYqIHZ3UOZ2pxujiuBLrF0+lzpkl/pxWYYOl1JTL + xHItjHHLKi2xmJx9XrEJZhcoeYyMcVOFBYxXiyvNsIQxbGm1OVYyB6yhdtlA7bKTWuboeHec7vXE2ane + uDDTD2d6R+NQswd21QzH1uoR2FA5EisrR2Fm4XCekxtqku2kNaTjxxogMUjvhQFcHkvNSP7XnqbABHKp + 6fl9BvDCchUWlSmxqNQQy8oNsIo8bD155qY6UXXPnOdOTUKdMbXQDD2iYgJjZQO5lTB/JQM4whC1zEV1 + 3NZFGKGeurCV/GEac8pixs81WfbkeY5YnmSOjXmM/11BuCoM4MocDyYhVyYoS6lcs1TP3EcfoaN0ETJK + RzJzw0cbIJaEJjFYzPo1R1KoGWLZ+SLGGCByjCEv0Fjq3KHeOgj2HoQwH77XV5R5NsQ4wp+dedTwQfB0 + 70cMwGhPDgw/NRJDbJEUbM0BQ1I2XB/RHDhiABYzaYo1Eeoz7KRye6IMSbn4QS54EMqDB6AxUhcTUoyw + MF+JAxSZr/dY4fNZ5vh1qQYP1poSStxbq8LdtWb4c7UVfl9hg9tL7PDrQnv8Ms8Rt+Y444eZbvi61xlv + N5vhdUGiSQBepig9SWJ/hElKEP7NZcZYmmmAKTH90BKghfKRWsgbJtb51UKGry6SOCAjR+ohZOgABDlr + IchWCxH2WsjhdTaP1se8MGMcSSfhJtF6hwnzM3bEW81O+KXZBrdq1Pi+2gxfV9niAwbWiznWJP/soMEU + pMMo8K37I9JEC4Hqfgix1UW0owwxdoaItzVCko0Rkq2NkGmrjxJXIzSMUGICA9G8cTKsjdTD0XQZrrMj + 3+y2wZ3J5ng81Qx/TbXA0ylWQK8NMMkaT3ss8KhDjYftJnjUaYKHxN0uY/xJYnZvojCNbfBklj3+mu2A + B9NtcH+yBf7k8bdI5m6VaeNn4jbJ030K5Met5kCPrWT+YoYjns5w4nud8WimK+5McMZ3vN5/l5viMoPH + 4Yj+2BmkhY28nyv9tLA0sB9WkUytijHE4ggdzAnqh5nEjHH9MG3cAEwKGIjOUVqYMEYL80J1sDXDDMdI + jE4VWOEkA8YrGf1xtXgQ/tVggG8nqvDnUls83miPp9t5Pjt4vVt5but5/ctM8XiRGe7P1eD2dDPc4vXc + mGCBr7ut8EWXNT4Xs4CZtH5c7IGfV3vit01e+H2bN/7c5YN7O71wf6cnHm4fhgcbnXB3lRXuLDPH7YUm + uDVTiZu9cnw9XonPu43xGe/jp53m+KRDrF/jgI96XPFejzve6hqMaxSm5xvtcJgBZy/J8sFKI5xsUuJ8 + tylen6jG9UlqvD2JImcCwc96v1OJd1uNcL1BF5drBuJihRZeLSO4vcTthVItvFbWTzKA324Q5XcUbHeS + 8FIDvE4x9wYDydsNPK9JNrg524XjYwgerPPAo80eeLp7OHDIAzg5AjjriceXvPHgsg/uvjUW9z4Mx4Ov + 4/H4ViZwpwRP7pYTVcC9eqIZ+LUGuFGIvz5Owp+v+eOP0yMlA/jXA+6SAfz2NCO81sbzbdTGW+xP/5pu + jU8XOOKbNe74YSvv7z5P3D7shT+OeuP2/mH4dYcrbq62xmezjfHxZH282z6AJEsLZyQDeAB2JWhhOxP9 + vnwtXOyR4YsNzrj9kjeeXA8APgsGvvQDPuc1fDwYjz52xINPbPHgK2ECm+OvW+z3v7APiNm/Ar9Y4umP + Gvz1DfvDJyr89bYx/nrdGI/PKPDXSyZ4fJj79vG1Hab4a4sZnm6yxl8bnXFv3VD8sGQYr0usKaeHyeyP + lUM51ofrItWHMXGsG8mYJ2KDvREXIn7U8EVOyFCkcmyW+sowKdoMq7JIwsutcaXLEf+Z64Ffl/jg5wVj + 8OUUb7zRPAx7ClwwP8GeiXYYerP9URE1FClBtkggkgLtmOgdkR05GEUJI0gUfVGTPRZdlbEYXxmDjpJw + yQBuzvZBZ94oTCvxx8LKsVhe7oc1BSOxId0VWxKssJsCcl+cIY6RLJ0X/6ZeZIvPdwzGb+cC8OjdSDz6 + MAyP/h2CJ5+H4K/PxuHBh/64++Zo3Lk0GrdP+eHbXd7414rhuNzrgDMc18coAg6TbB8sdsXx+jE41hWJ + Xa1RWF0bhvklYzG/IhALa4Iwu9IPEws80J41GK1MkM3Zg9Ge74meQh90ZI1EU7wrGiLs0Rxui45wB4or + bkOt0SLWAA7SoHUs4yIJV0egmAFsiB5/ffT46qDTeyDaic7RehgfrCCJV0rVF5pJjkWp/jrv/qj17IdG + z/5oHNlfMn+bmada+d42Pz20MEELg7DPANaXzM3cUQZI89RF4nAdpHjoIsvLAIW+Rqj0V6KRJLAtuM9k + FrN9xazf8UQXc6AoTd1GotfIvFjrK0xlXZT6G6CA35EbZICMIEOkMkaLJRYSQhT/QHKIWMODZC6MRDNU + jZQQDWGOrAg7VKaNQHO+DxqyR6A80RFlJPrl8daojBelXSxJ1PpQG2uBSgrMoiA5csboIZ15OInXm8j8 + GzWEedldG6FDmZeHGb0wgAP+HwZw3GjmaV8TpPqqkOkjRz75gZglXcV7VUtu0D5aG73jDLAoVoXVycyZ + aSocyDfHmRpHXG4djOvd7rjcLQxgd1yc4IGzE0biZMcI7BSzXEpdsDjHFjMS1OjhZ7T5D0L7mIHo8GO7 + El1s025ykfG8923Ms01eoty3PprHytEURnEUSWEUSeFIAd4QRoi1f9n2wgBuHSdHm7Ql8Q+SSbODm8YZ + ommsDlrGaaMtVBudJGRdFDsCwgiWtsIYfmYAT47Q/5sBrPvMANZ/ZgAPwORgLUwRBnA88y6F8fYKR+xr + cMMO5vlNpRpsqzTH7lob7Ku3I7ilSNpOsbS6QIFl2QZYR8K8heJ5a701thEbSKqXV5mQEBpheoEeZhDi + 8aJyuWT+LqDgnF9sgIXPZgWvoRhaJ8pDV6lIQBX8bBUOt5jhpJj922T8wgA+3MQ2ofje3WCMHcwRm2uN + sLbGCKvE2jzV+iTFBlhSYYiFZfr8fD2SYl1Mz9MheL38zmV1jF0UYKsaSYzrTbCiVkmCrMTqOgXPWY4t + dTLsqNXHnlodcicKsSZdXGrXx9UuI7zZrcSbXSrmP3NcbrfFkVI11qfKMCdCF90B2lIJ8SqKpiJv2f80 + gIdopNm/Oe5inymKRmpQ7MXXPE3/VwNYlIBuspehw8EYE91MMYXv7x1mhinEZA9TTPJUY/xINfsS+8xI + GSo4rss4XksDCfYN8ScNyQAmkc6L5WenalCXY4e2IldMrBguYULpUHQXuqGdZFqs+ytKP9fGm6GJonJ8 + rgsF1XBMrxiJWdU+mFHrg9660eip8UZbxQhU5TmhMMMKBRmWKMyyllBE3leYbYWiXGsUZFsgL0PN/cKk + sUQdeU5bsSO6i5wwodABk/Md/mEAz2A+mZxuis54BceAHsrJlUpGi2UJtJFPIZnu2h/xdv0QaUUOSYSS + m4YOHogYN22kO2qj2J5jwU2OKZ5mWORnh9Vj7bHBzxzbx1C0B6jx0jg1XqWIOR9jjpdj2ZcjNZg9muPL + Qx+lg7WR4zwAxW46qB+hwCR/S8wOsseCAEfMH+MgGcpzfXiuo2wwcYQF2tiG9c5yNLgao9bZmO0lQ5mT + oWT+FjhRHDnz/rsZI9tNjSRXM0Q6mMJfMn8V8LBUYoiFMdy4deLW1kzxwgBWyLUhe2H6asNAPugZdKBn + KGb/9oeeQT/JBNY36jOAVSb9YG4xCFY2OrDn9z83gD081PAcYYrhQ+RwdzMg9ODpoUAgc2945DAkJPkh + OTkYUZFjMXrMSLgMcYSloxVsXK3hNMwBw0cPQXRKGNLyE1FQmYOmnlpMWzQZk+ZNxPi5vZi7ehkOnj2L + 9776Hv/57SG+uf0I3/35pA93H0u4ee8Rbt6/j5sP7hJ/4rtHd17g5oPbuEF8e/83aXvj4W/c9wu+f/Ar + fuDj7wQe9eH7x7fxw2Pu/+tX/PjkF/z49Ffcwm/S9ofHP+Hm3e/4/d/gq5++wBfffYxPvn4f739yDa9d + PYPzl07g/KvHcO6VQ7h49jAuv3oUb148iTdfPYHr54/jvUun8fH1i/j6g2v4/eYnuP/LV/jrz5vAo18A + fufTP3/AvVtf4revPsQ3b7+Kzy8exgeHV+Otrb24trIaby3JxtsL4/HWnGBc7/XFlW4PqRT0hXpnXKx2 + xKVyO/JaO7xa6UI9NgRH27xxfEIgjvdGY9+EGKxvCsH8Qk9Mz3DD3OwhmJ/rjoUcW0tyRQloC6zJ0GB9 + uhrrUhkbOYZXp1pgRZotlmawb6Y5YnqKPSZGm6OLuVas2T811gQz400xj2J5YYq5hMXp5tR+jHk5jHm5 + llhVaInlxZaYX6DGtGzyjAwZ2pKNUBtnQFFvhEIiJ1oYu2JWhjGSRXk9IinCFInhxtKfvYQBLGb/poTJ + INb/zSEXEzNdxA+dFdk2qMxkPHhmAAszWZjAUjloaVawUipLnxduhPxIOfIkyKTHxTGKfxjA4od7Yf5K + BnCmiWTm/t0AlkxgYQBLJrC5hCpq1P+XAVwoSj+n8dzSFISMsYznl2uMsmIz1FZaooG5rrXBgWDcarDC + xDpLcj8N1taaYwd1+uEmC7xMbf1KrYlkBJ+qMcaJWmrkagX2Vxlhb6VMMth2lykkA3hTthHbTx/rkw0I + I6xLlGFDggLrmW/XJQjzV4ZVCQZYlWSIFUnMiUkKLOHrC+PlWJiowPwUJeammWJOlhmmEhN4LW0898a0 + PgO4NlPxwgCeVEMe0mQvGcBzmecWNAkDWC0ttyAtv9Boho1iRnOrHTa3OHFfnwG8osICKysssY7v39zo + jO3sx1ub3CRsayQXaHDHtjo3bKpy+YcBvLHYBesKHLE6317CmmLurxyMjbXDsLF+ONbVeWBdwwisax6J + NY2eWNEwHMsFGodjWf0wLKh2wdwKB8wqd8DMamfMaRiKOS0jMZOY0uqFye0+mNDpg4ldvpjcNRozO/0w + uz2QCOLjUEzvicDUiZHoJaZMjniB3knhmDwxVNpOmtyH3kmhmDY5DNMnhWDOBI69nhAs7QrGmu5g7JkW + i6Ozk3B6QTrOL86WcGpuKg5MjsaW9lAsq/LHbOqRGTk+1AJ83hiP5S1pmFObiPHF4WyDQOTGenFcDEV8 + sDuSwocjLXok0uO9kZUwCiVZ/mgqDcOM1gSsmJCEdeNjsZHXsKnOE1uq3LC31gUHG1xwoNUVhzvd8HLP + MJztGYpz5J0XxB8Pu1xxsdURr7BPHquxwoEK9sViNTblK7EhR47N+XLsJA/bX6nB4VprHCVPO1xnhf3s + t/ueGcB9JrAx9pBj7a+S41CdCifYH862WOGsKH1ZboKXCkQJaAOcIa/7hwGcrpAM4PPsw68kGuDlREOc + YJ+VDOBYPe4zwhn23dPJMpxMMcLBJAPqXV1siddmPx+IVYQwgFclD8S6TD1syurDznxDHCxR4AS539kG + M7zeZoOr7Xa4LtBqi7darPFms4VkAF9tMcbVNlMeo8aFFg3OtVrgNF87WmuKLXkDsTxFCytStbCxUAfb + SjnuyDnX5ukx9ulidbY+1uSQK+bKsSZbSQ1r/AJrGT/WFDC2ErM5toQB3M6xJ0pA14YZoSZYV6qys4hx + aEeRNU5W8RwbbPBBnQafVRvjmxo5vm+Q4ZcWpWT+/tGjkfD7eA1+G2+Bn8Zb4uZ4a3zZaYFPWlT4sEGB + d2sVuFpjgrMVJtSd1BvClOZ4npdsiFmMD8IAnkgt0h5NThSpQAX1QZGYGRViSo2ukioOBlPLBI42xWhu + xYxfb+qa5/DyUcKbesdrjBlGUvt4+/ZBmL8Co6iJnhvAkgn8zAB+XgZamL9jqBP7DGAVoXxhAMcnWSM5 + 3U4ygGOT+gzgqDiTF4iI4XFRfSawMIAFRBlogZgYuVQO+n8YwAXCwLVGWb6ltC57GWNadSY5Wq4K44vI + fUXJyBILdLGtmhjbRYl/8QfDPOa1XL4nP485J89GMoCLc21QyPxZxNxXkm6G8lQzVKeqyXOps5JN0JSg + Qqsor81cNCPJBAtEfk03wc4sJY5IawDLcLmKfJ9t+x7HyoflMnxaboCvKwzwfa0cP7P9BH5tNcavwujv + 1eD7aSp8NUWJf09U4p1uBS60ynCiXh+7KgZiQ1l/rKemWN9ogLXct5YaY12lDvdrY1PJAGyv1JXWGD3Q + YIQ91drYXTkIp9tN8MZkG7zeay2Zv6da5TjTosDZZgXONSnwagPHZp0hrlCzXKkywLVyfbxL7fMpz/vb + GjVu1Zvh53oNfmrQ4LsGc3zC+H+NOekUx9uedD1pXdH5MdSF1ILiD8StUTI0sb/ViGpBicydSWYoTrL8 + HwZwOvlGWlSfCfzcAC5KFuWf7VGWbIVy9oe/G8BT860wr9gOi4ttJeNXYHGBJRZRWy+k1lxQaIM5PGam + MIElA5jcm8cvKWZOKrbA2hIzrC80wZYijr0SU+ZWcxyps8YJUeGg2QEniZdanHGy1RmHmLN3MpetKzLH + cn7+UvaLZfysVSXMcfzslexry8mnVmWbYz11iaiIsrWEmrXMCjuZ+3YxB+6u0mBPBWNmqZm01N0h6rwj + JSY4UcbYyPh4hvf2LO/l2VoznCMvuNBgj9N1zny/HRaRW/VkmqI21RglyX0GcN+sXyuUZVj3bTMtuc/8 + hQksDOCSJHPpfpclkM9wXFTHyaU/KYwnbxOm+LLaIVjd5IVlDZ6YUz4Ek/Jd0JBgiSKOx5yxMuQGKFAc + ZILaUDXaydUmRigxK1zxwgA+xL59imPpXLYMF9m/3yhT4fUqU1ysUOFcsQyvFBriVImc10cOU6HGgWor + 5iRrLCgww3jG/Bqei6gEEx9njfgEKyQmaJBILpdEbpKaJEcyc0By5ECkRg2QykDnJ+nwGqlJmTtq8uRo + FAYw27G52BxNbNe6Io7TdA35pQyxQfqIDjBEFK8jNph8M0KDNH5PZpKY+WuPtAQHJMbaIircEsGBJggc + I/+/GMCmhBLp5JypjNViBnAaeWw247jgj03sZ91lDphK/jK7yhnzS2ywpJCcWFSyLDLFDrb3oSoLvFRv + jVdbbHFNTHqa5IQPeh3x9iQ7nGtW42iVmDUqw8ZMbaxMYS5LHIRtGUoc5uecKbPGBV7fJV7vZeaad3N1 + 8UmRAb4qk+E75txb5Izfk3d93WqJj5utcZ05Wdz7o1kc70la2C6WBkzpj6PpOjjJ+3acOV0YwAfzTLAr + zxRrmJfm8l5PiJWhhfFTlEGu5visSrZGZYqdNPu3OMEGedS4oqR2JvtCZqipZPwKCOP3+TYtRI2UIOaR + QFPJ/I17Zv4+h2QC/y8GsDCGYwPI/wP7ZhALAzfKRx/hXjoIGzEAoSP6cyswQDJ/BaI8dSRIRrC3HmJ4 + vHhPjDCCx4iKu0aI9ZfxPGT8TPHZ7E8hKmSISZrRjC+iykCUBYqjzFEcyTESoUJFhAxV1CeN4k8SOVbo + ZUyZVGSBDuYR63QVAAD/9ElEQVT1ukQdVMb0RxVRTe5RFSdmq3Jf1CDURGujnc97E3SwJE0fOzgWTtWY + 4YpojyZLvNVsg9dqLXGiQInN4s9qUf2wJKI/lkYMwooYA6xJMMR6YhO5zmbm6Z3kOgfIw4+nyHGWjy9x + 3+UUPVzlZ7+dK8P7RcbSLOBrRYzbeWJ5DSX25qik9ebnUXdMSjVCW7oM7dzXmWGCDsaNthQFWsmj2lNk + EGsXT85WYXoe9VyZDRZV2GCxMH4ZqxaXazCfsWk2v2M6+9z0fCPMKVZifrkpFlWaYTHj2JIaCyyvMcdq + csD13O5ossGRHjec7vXA2WneuDjbD+em+OBg0xBsq3TF+lI3LC8cjHkFQzAx2wVNopx4NMcj40zsWD3J + AM4I00dehN4LA1jokPGMLVPyFJgt1gHm9c4vUUq/8S1hzlxJLbSxzgSb2f9FKeoV1dSewgDmuPs/DeCq + CINnBrCYBSxDfYQcDVEKaTmwXsbH+SmWWJlhh/WZDlieKP7U7Iqj5O6Xl2VDq7bAk0HWnYnKRpoFHO5r + hMARg4iBEgI8BmAcO2HEaHZyfxXig8RMYROpvnmwNzuwrwGSxnFQBJvydbk0azianT1KGMQcJKEcJGNH + GcB3hC68hw0ktOHvbYTIsRYMWk5IDbfnAFEhZKQhOzcDIz8nk0myIJZilEmxJrXvn1FVHLyVkXpoYPId + z8aek6/GWiaeg8IA7rbEFzPN8dsSDR6tNsPDNSrcW2OCP9eQUK62wu0VtvhtqQN+XuiAH+Y64NvpDviy + 1wEfdtvgDSalcxXGOF6qwOFSOQ6UK5nIjLGd2/XCmc8wxISo/qj310KRpxayPbSQPkILiV4DpHrtwcN1 + EDi4P/wdtBBgpYUway1kufZDAwft7HFyHGHAvszE/VGVHW40uuD3DlfcaXeQSoz8QvHwHYXkJ9X2uFJk + i5NZFIKRlugYbohsy34IM9aCv1ILQeYDEGWnjzg7Q6TayZFBZNrKke9ghOohJN2j1JgeqMbSMBU2kJQc + E/+oYGe+2WWNO5M0eDxFjSdTzPsM4MnWeDpRzPw1xYN2FR60GeNhhxIPOo1xr4f3bYIJHk6xxJOZdsA8 + Rzyd74THs+zwcJoV7o43w29NMvxKAvUbcYfk62G7KZ5MsASm2QOznIC5AnzfXBf8NccVd3tdcIvi5DMm + zusczMej+2NfiBa2BWlhXaAWVgVzG61LMW+IZQw2C0K1MI+vz+V2TthAzAgZhImiJLQf9wUPlP71fThH + g9N5FnglmwFEGMBFg/Dx/2EAYwfPf6coA81zW6/Bk+Vq/LVQg3uzzPAr78d3EzT4ukuDL9ot8Gm7JT7p + tMRnE21xc/4Q/LB8GH5eNwK/bh6J37d74c/tnri73UOaAXx/oxMerrXFgzU2uLtcg9sLTPHTTBW+6zXB + NxPF7F9TfNKuxsdt5vhXuw0+7HTC+xSi7xBvdrjgtWa2cyUJQ5kRjlUa4VSTkkLVFJd5PtcmqHGdbfAW + 2+M6ieubzTJcq9cj6RiECyTD54q1cJY4V6KFC8SrfHypVIukWxtvsS3eJrl+q8YI1yoNcbXKCFe4fbvR + GJ9NssGNOS74ZdlQPNjkhcc7vYAD3sDxUcBpbl8dhSev+eLh5TG4+2Yg7n0YgQdiBvCPWcBvxXhyuxRP + fysHblcDv9YC3/H559l49G4M/rzgjz9OeeGP4x74df8QfL7SEtd7DXCusR9OV/XDxUZ9XO4wxrVJanw4 + zwbfrB+CH3fy3u73wu+HvPDrnmH4YYMjvuB9/LDXUFr7V5S4fq2S11faj6J6APZRoO5O08LB4n4432mA + T9bY49cTI/Hosj/wcTDwmT+efsznH7rj4QdOuP+RHe7+2wr3vzDHk1vsB7/a8DrYF26z/z8zgB9/y37+ + Kfv+Owo8ekOJh2dlePyyCo+OGOPxfhM82klsNcVfm63x1yYX3N8wDD+tGME2csKOXAVmhQxAg1c/5Hjo + IMXHjKTAFYlhI0no/JAS5Y/MSF/kBTOueilQH8jjSVg3kVSfIun+YOZwfLfUBz8tH42bC8bg3W4PHCtz + xLJEDcYHm6En3h2T8wJREeuBGF9zEgtzxAdQPAbZoyBuOCrTfVGdHYDa3CC0lUairSQCzflBqBel0tJH + ojPHGzNKA7CsLhibmkKxszYA+0s8cSiXhJ9E+uV0Bc6XGON6N4X1Sid8t98D914fx3sZy3sZiadfhuLp + V8HcBuLxp2Px4P0xuHd1DO6cD8D3+0fh87Uj8PZMF1xk/z5Osn8kX4ND+dYk/e7YXz0K26r8GJvHYlGx + HxaU+WNBVQCmFXuhM8uNQtKBBMyOBMweNWmuaMwYSvLhjspwW1QGW6E+xBItoTZoDbZGS5AFmsZSuPqb + oJkCu5W5pJ25pZPEd7yfPib4aqOTcbjDe6BkFk54bgCPk0kGsFiHt953EBp8BqLJZxCaRxGi/PMoXbSM + 1pFKOLcEGqIhQB+Vfnoo82WSHqWPTC99JHmQeA3RRtwQHaR66iN7lCFK+P2t4eboJNnuDjeVyhB3knR1 + jVOhI1CFtgAlmkYboZ4krYZ5sWqMAUr9jZAfYIScICOkB8mQMk6BhGCK+WeIH0dCGExiKNYXIZLEvwzH + qZEUpJGQGkJRzv5QleGBylR3FJLUizVKCkkwSqLNUMlt9TPUkOxV8byK+V05frpI99WR1qhPHElCOXQg + woUJPEwfoaLE81CZNPv3uQEsjF9fd70XBnCwtzEifNVI9KNw9dMgc4waeWNUKOQ9kAxgXz3U8Z4Ks3Y6 + iceyRFMSfDX2UDweL7el0HbGlTY3CoLBuEzydGm8O16dMBxnJnjiSMsQbCh1xMIsS6lEyYRwOdtWG82j + B6JtzCC0++uine3RwTbu5L3sJrFuGanPnKrLe6uPRo6nxjCKEwrq+igKOAq3unAl6sUs4BAFmoL4ebyX + bby37WJGeKgK7eFsnzDuC6ZoD2bbM5e0cgy3h+qgPUwHHc/QFaYrYQLJmjCAp4QLs5cI18WMKH3MIv+Y + Ga3H/QMwSRjAoQMxL0GOtRTG2yvFbBRXbK+yxWaSta3VFMb1ttjXYMf9wgC2wVaKpRW5RliUoYNVBXJs + rDDDJhLOjcQaEs7FlSrMpliaWqhPssfvKzLEvFIZyaER5vKxwAKKo+VVxlhFUb2WRHwdc6swgbfWqLC3 + ToXDjRyTDUocrSenIQ7UKbG/3hg765XYVsfvrDHkdxlhZU2fAbxUlIGuMMSiUj3ML9LFnEI9fo8RSamC + 5NkYKxo0hBmW1ZticY0CS6pkWFojx4paOT9Hjg21Mmyt1cfOOj0catDHyUY9XOgwxBudMlzpVuIq4/+V + dg1eb7fDy9W22J5jhkUJJOmhhmgZw7FHfljoZYj8kXLkjTBGvocahcMtUDDUHLnuKuQOEWWh2a+9KPpH + maNwpFoqAV0wWI5iVzkq3JSodlFKBnAL0ePSZ/7O8LDCTC9rzPK2wUwfK0z1scQEb41kANd6GqGcferv + BnDBOI7zcXrIDjfkmDORZuQ1Fzqjq2wIJld7Sgbw+NKh0tIkXSTRTZmMY/FmqE0wRysJdm/xUMysYOyt + 8sZ0orfKCz0VI9Fe7oHG4iEoI78rSLNEYZqVhPwMAUvCXDKF88gV89JNUZgtZuYxFhbbol3MAC52/h8G + 8MwsW8zItML4ZBO0RBqhYqw2inz7IV/kJArJTPf+SHIghzTTwji1FgLNubUjP3XXRuxQfWQ466LYURfN + g2Xo5f1c5G+D1YG22BTAPhtghqPjzHAqxBTnOcbOxZrjpThz7IrSYDZ5f6sHhcxgbeQ5DUCJmy4aRigw + McASs8bZY26AA6b72GDKCOayoWp0su2aBqtQ4yJDpRMFqIsxKp2VKHeSo8SR99zRANlOekh3MkSGC/m/ + mxqxLmoE25tglJUcwy3kGGKhhCvhZKGAA7c2Gjk0JgYwVuq8MICN/mH+/t0AFjOA+0FfXwsGhv/TAHZw + MICLixxDh6okA9jDwwRDh8jhNtgAQ9wNMMpbjZAQZ8TEeiI+0Q8JCeMQHRWIgLE+GDbCHQ6udrBzs4Hj + UHsM9XLDuOgARCSFIik7DkU1eWjorkFVRzVqe1owa8USnHjtMj668Qu+vf0E3/7+F27++QQ37xL3hPn7 + GDeIb+8/JO4Td3Hjwb0+PLyLbx/ckfDNvT9ePP72wW3cvC9mC//BY/4LyTR+/Du+/+sOvn9yGz8+/QO3 + 8CduPb2DHx7fxnf3f8bNOz/ixh8/4MZvN/DNT1/jsxuf4r1P38VbH1zD2+9fxVtvXsLb1y7ineuv4r2r + r+Kd18/i+vmX8daFl/HR1Qv4ksf99u2nuMv3PvrjOzy9/xNAPLp9E7/f/BQ/f/aeNAP4i4uH8MHhVXhz + yyS8sbQcVxdn4a3FiXh7XgSuT/NjfhiBS61D8Gq9Cy5UO+FiuT1eK7PHqxUuOF7njkPNXjjSGYAjE8Kx + uysca+vGYm7ecExLdcG87CFYmOuORXnOWJZri5WZ5liTwZiYZoK1KSqsTjHF8mT272QK6CQbTIuzwoQY + S3QyT7YzL3QyJ0yOMcH0BDVmUyzPSWYfJ+anaLAgzQxL+HmLcyywJN8CiwotqDvN0JulRBc1VksS9RcF + fWk0c3y0IbIoxtMpvpOF4RtBTRzO/BlugoQw5vdQ2TMD2AgpYdRwUcbU3KbIFYYvv7eU4788nbGBcSc/ + Vom8GBnyYhnf4o1RxvMvSjRBAQV9QYQChVFK5L+AAkU8vixRjXKec3mKGqXJptKPd8WiBHTmPw3gshw+ + /l8M4EpeX3muhq/z/dmmEkr43ucGcPHzrUC6MbdKFGXye/NUqCzRoK7SCo2M7c21tmiqtUJTjSW6qs0x + q1ojlVTb2GCOvY0WOMY88jI19ynipVoTHK9lvqphfmJO2UP83QDenCNjOxpgfYoh1iUbYW2iDGsSZFgd + Z4RV8cxfxIp4faxIZB5LYk6kNhQG8KJnWJAsfjAyxRzykmmZZpiUYSL98745XYY68QNthhxNBdxXZoHJ + tXb/vw1g5kBhAG9qssHGRgesq7HDykrLPvO3ygabGxyxvdkNO9mPtzcNxjZiB7Gzkc/rB0sG8IZyJ8kA + FthU4ioZwGvy/msAr6tw42e5Y221O/PqUH73cKxp9MCaZk8Ja1tGYm2bN1a1eGJ5/RDmYvb/ShfMr3HF + oiYPLGz1xpwWb0xr9UJvuw8mdY7G5G4/TO32x5yuQCzoCsHCrkgs7InD3ImJmN2bhJlTiGlJmPUMM6ck + YEZvPGZMTcD0Z5gxLQ6zpyVg7pQYzJ8cg0UTY7ByfAw2TIjFLh5/cFoKjs5IxclZGTg5OwNH+Dm7eqKx + ltpjdoE3c9QwdCV6UNME8J4mYlVXLpZ2ZGNmfQraCiPYZ4VeGoGU0CFIjfBAZtwo5CSNRl6SLyqoc9rL + wjCnNQ5rJ6Vg78x0HJ4agyM9Y3G4g3Gh0Y18xxn7mx1xsNUJJ7rccabbHWe7BlMruuB8uyPONtvhRD31 + CbnX7jLyrUIV1uTKsSrLEKuz9LCRfGw79dAecrH97LMHai0Jc+yv1ZA7cR951j72071VShyoFpxKhZea + NTjbao3zjVY4W6XGK8Wi/KRR31qEzwzgNzLleIPj5LkBfJp99aUEsf4vOdIzA/h0vNhvgJcTDHEsUR/7 + E/SwM04Hm+MGYX38AKyMGyAZwGtSBmFTtiG2ZBtgc4YetvO89xUYkWsb42ydGq+32JBvCwPYHtdabfAW + +6owgK+3qnG1VYXL7WrGWDOcbeL4azbHcfbx/dUmWJM5AAvitThetLA2ZyC2FHPcFXHc5epjTbYeoY+1 + 2Rx7OQqsyzbGhmwVNjKOiNk4GwvMsbHQCqsLLDnGTDCZ460txggNEUaoCqZGGDsIXeTQ85MU2MoYc6LM + EtdENTje1//TAP6jS4073RoJkgncY46fiRud5vis1RT/4nEfkGe+KxnA4jc7UxwtJufNE2Y0xzvvsSj5 + PjVOifGMk808h+pwmfTDt/gBPDuUsfiZATzOxxgBviZ9BvBoFbx9lRjlq/iHASzMX08fbkf1QZi+o3z6 + Zv9Kj8XsYb5XmL99MJZMYGH+PjeABcaOM0ZwmAqRMWbPDGAHJKXZIi7JEtHx/7sBLEHMAI7pM3/7IJMM + 4OS4f5aALhIzd6m9K6i7ytgm5ZkK1DKuteUYY2KhGjNKLKUyn+PzzNDCPFDJ+F1CfpmfY448vicv10oy + gEsk2KI42wqlWcJws0BFurm0nnwtc0p9kgqN8So08Tw6mJt6yd/nJquwKYvjI9cEJ4oUOFcux5VqYQAr + 8e4zA/iTckN8RW3xPdvtp0alhF9aVPhFlPuepMF3U1T4YpKo+ibDm+2GON+gi5M1OthfOQjbqrSxtd4A + W5tk2NxI1LH/1+hjW6UetpUNwu5qPexvMJIM4L08VswAPtEsx6UJlrg40RwvtylwosmQesQIp4hXeNw5 + ft6FOgNcrjPC5WoDXKsw4Lka4WOe89e1avZHM9xirL/VyHNjvvqMj9/iODnD8b2f429tCrUbc9DMWCNM + jJOjm/m6I8UcjSm8T6kaVPJxaUqfAZyTYClVzHxuAKdG9c0AzuDjnARryQAuSbZ7YQBXUgsLA7iLueq5 + Abyo0AZLOL6WEoKDLM7TSAbwwgIbzC2gtim0xexCO+o1eywsspPKQ4tKJeuK1dhQYIythUrsLjbBAca2 + Y8zLL0ul8e0lvMyY+XKLE4422mNvNfNakQWW52uwlJ+/lH1KrE+/Ml/M/uX+dDVWkweJiiiSAVxsja1i + FjDH9HZq3e3l5tjJ2LqHXGBviSkOlKlxSJSCLjPFyTITnK5W4wzv71mO/fN11rjU4IAz9c7YVW4rGdvC + AK5JUUoGcJEweP9mAAuUs0+WpIty0NR//4sBXMnxU/M3A1iY4strhmBD2yisavLG/MphmFrkhjaOvfJI + tWQA541VoDSY9zzSHF3UOL1RJpgdocTKWBNsI+c6SL7wEmPLGca/CwUKclITXKo0wbkyY5wiPxFVH45z + e6yEeaHUFLvJBdaXWmB2lgpd5CvV8Qqkx2oQS74Zy8+Pi1UjgXwuIV6GZHKXxBgdJEQNQHL0AGTFayM3 + WReF6QYoYf6oylegodgULRUWhC1hj8YyB3I4K36mMeJDZFJl1nDq1whR3j7MBMlR5khLsENqnC2S4uwQ + H22NyDALyQAe6yfDuAAlIkM0UlnoJFHFNUbzzAA2RjrjShr5ZkasAjmJbINUNarZ3q0l9hhf4YQZNW5Y + UOuKpVUOWMl2X83YsrHQBNtF3yrXQKzpfE4sPdBlhw8mOuHDyY54d6IdXm1W4yRz5sESjt8MbaxJGkgO + Nwg705U4IqohFlniQqGZtL7ymwVyfFhoiC/K5Pi2SsVYYYbbHXb4ud0O/2m1woeNlrhSoZKM9wPpAyTz + d1OsFnYk9sMB5sdj6frSxJajuSocymd7CI+IeWkeeeFExqxWxq46tm1lPHlyggX7DWNdgi0K46zJ3c2Q + FqJCqrSmrvEzw9ekr8SyWF9XGMGhGm41SAlSI95PiWhfo//VAJbgayiVf47wMZReSwiiJgg2kdYOFqWb + hYkb6aOPiJGDJER6ie1AyfR9bgI/N4KFCRzppSvNGo4cpY9ofmaErwEiRxsgZrQ+Yv24JeID5dIs4PQI + DTLE2sXhZsgjCsNMURxmjJJQUaregONEgTaOkQmFlpjA3NDOXFGbqIty9sOyqH4ojx2I8hhtlEQNRGn4 + AFQSLdHa1E2DsJB9dEuOAV7iOHiD8fEK+dG1enNcrDLDUXKfjTFaWBVJ8L2rYvSwTlTsSZJjczLbnxx9 + E3nQdo6NPakyHOLzl8h7ziXo4yK//40UHVzPMsB7jFkfkI9dK5TjXL4MJ0WlFnKP1WlGmJGsh27ypJZU + Q7RSh7VTi7QmK9CSaIRmopXxuZMcfwKP780zxdxSa8xjjJrH+CRKKEvmbwn1HsfzVPK+qXmGfK7E/Ao1 + FlaR8wtUW2CZmAVM7SJm325vtsXh8W44NUUYwF64NGsMzk3xxgHy/Q2iQgPz5sw0a0xIseZ5UMcxzmeF + iuVxxRjVQ8K4/xrAZTH6qCMHbE1l7siQYXKOXDKiZxcxnzKHzif/WlJm+P+XAVwfL0dVlCEqIxgvwg1Q + G26EOurP+kgF6qkLm8kbJjA2zkrm9TDurU6zxzJykA0Fg8mfQ3B5eS60mkpHoTJnGAqYjNIjLRDGzuU3 + tF8fhvTDaPd+8B82CMFe+pLpG0WiEz5ajnEj9TB2xCCE+hggOdQc6QwqiSK4sJMnkmwlcLDE8nkkB8u4 + MQr4extijKcuoY+g0UrEBNsgJcoZSWH2CB1ljKARHCy+cumfEonj5MgkccvnYC1PoEhNEP/uEdPXxeLJ + xphVYIFVVXYUV044QsH2ercVvpxhidtLLPBolYAad1eb4fdV5vhtpRV+WWaLn5c64MeFDrgx1wFfTLHD + R3zP1SYmJBLoE8UyHGBH2JVHckFsJrFeTxK8StQHJ4nviR6EuoB+KPTSQqZn3zrEUWLa/tD+8B88AGOc + tTDaVgtjzLUQrNFCumM/1HLgzmSAPkwCdZUk7NN6J/zYPgT3Jg7Dgx5X3Gu1xZ+tdiRDzvi6wQlvlzMh + Fjhhc7wtuj0NkW2lhVCFFvxkWvA35mPzgYiz0kWGvQw59nLk21H4O8pQO9QYHd6mmBGgxnImgS3sECeE + AcyEf6PTGncmaPC41wRPJpvjiTB2J1ngcY8aD9qUPAcF7rfK+ViO+53EeGM8nKzGX9OtAd4nLHIGFrvg + 6TwHPJ5lg/u9ZrjTqcIf7QoJ9zqM8RdJHGbYAPOdgIUufe9ZyMcL+L75rngwzQW/dNjgq1pTvM3A/VIs + g3W4FnaGMHgL8zeM23gKHgaGVXEDsYSvLeK+hdwuZhBZGKWNaYH9MGWMFuYE8ngGlUNMzK/kWeA8A9fZ + jAG4WjTw/5gBzHPfaQ/stgW281rWW+DJcl7/Agv8OU2Nnyeq8U23KT5vU+PfzWb4FwXRR60afNxtiW/m + uOLG4sH4YdVQ/LJpBH7d4onft47AnS3D8edGd9xd74QHa+3weL0tHrKv3VtqjtvzzPDTLA2+n2KGr8ar + 8WmHCf5F0fIBP/cdCrN3Wu3xDoXom232eKPZEi9XyUiM9HCyUh9nmhS41GmCqxQ919gulzsUPMYQr5MI + v1Gng9eqBkpGqJgNezqf4PZsoRbOFRHcPjeA36w3xNsUSe/Uy/FWrRHepFi6VmOEd5qFAWzNfu+Cn1ew + 7233wZN9vsDRMcDLxPnRwMUxePq6Hx5eDsDd60G492EUHn2ZiCffZwE/F+LJz8XAT6VEOfBDJfBVPp7+ + Kx0Pr0Xi3qv+uHvaB3eOe+K3/UPx2Qom6Un6OFWnhSMlWnipYgBO1+rjXIsRRPnmfy91xI0tw/DTHh6/ + zxO3tg7G18ss8a/pFABdA3GluR8u1/eVuX69eiDOl2rjWF4/HCnoTyKhjTNtOvhwuRV+OjwcD3nO+CAE + +FcAnn7gjYfvDsH9d1xw9z0H/PEe+/6/2OY/sj/+yv74G/vDbfbTZwbwoxsq3P+M/f9d9v8r7PvnZXh8 + SomHx4zx6KAJHu5W4eF2UzzeYo2/Njvj3qZh+HnNSHw42wNHqkjIEw3QNU4XOUzeSRSKCYHOSI7wQmZ8 + ELLiApET6YOCYDeU+KnQTWK5JNcGe+pc8cZUT3y+bAx+WDMW36/wx8czvPBKraM0e1LMaq1nbG2LG4zJ + RSGoTPJGlI+GJMIcCWNtSD4cUZHmg4a8QNTlBaEmJxC12YGoyQxARcooEhoPVCcOQ3umJ2aVB5D4hmJH + eyQONI3DiSofnC4ZgrO51jhLkfgaSey74y3x5SoX/HjIE4+u8D5+Gg98HQN8G07w+bfj8OSrcfjr34F4 + /E4gHrwehJ+PjsY3m73w0Xw3XOm2wckiOY5kK3AoxxT7+Nm7Ct2wrWQkE6MvlhX6YlHJGCZhX0xkjmlO + cUQlxVBxtAZFYkuiWp7oRMLhiKJgS5QEalAdZI56Pm4ItECDvwb1FNd1FOiNFOjNY2Ro92cOCDDEBD8x + M3QQOkf0R8fIAegmEZo4ToEeJt72IBmahAHsr8P366LJTwfN3Ir1apt9uPUlgZAMYG55bAPjdCU/t4Sk + Kpt5LmUESdUQPUS4kpS5aSNhuD7SRhoiXxiRzHMdUZboJMHqDFNLs4HbxqrQEmCMZgr/eh85apknq3hs + hZgtS/In1pnJHEtyFqRA8jhjxPE8YyQw3wUqEStV0FBISOBnxQeYEGrE+auRGGiFzEgnFCe6oSDOEVkR + FsgMNyG5Y35kjizl4yqKSoFaEr9qPi8l8cjx00a6rzaSvAcikcQykrkqzH0AwobpPTOA5X3lnwm/Fwaw + /n8NYObkqNFmSA2wQhbPITfAHEVsn2J/EkkSzypfXbbLQHQF6GB2lBwrU82wNdccBygOTlbaUsgz1rU4 + 4kqnC17vccPF8e44P2E4XpngiX0NohSnJaYlKDGR7+0KIXkbMwhNPgPRznbqHGuAjrGG3Iq2JlHyU6DJ + 2wB1JL+1YwxRH6REA4luA/tRLcdWdaQxaiJIYsO4P9QYDby3LTxGtE0nyW83SXAXRV8Xj+0Ml6M9VA8t + 4waiKUgLzUEkt8ED0RbybFZwiA46Q3VeGMCTw/UwRRjAEbqYHqWPmSRwM54ZwBOEARw+SPqHqfgRbFu1 + I3Y1uGCr+EG40lIygHfW22KPZACLLfczLy/J1MO81IEkjoZYW6rCWpJPUfp5RZUpFpSrMLNUjt5CA/Tm + 62NakT5mFZOk8vmsAn0SRWEAK7CsyoQCV4PVFF5rSFTXUmBvoGjaXiXH3lolDknmrxIHmQf2VpNw18ix + vUaGLcwJG2oMsbraECtq9LH87wZwiR7mF+piXrE+Fpcr+flmWFnP72gyx7I6NRZVC6JsiPnl+ljI7VJ+ + 7qoaJdbVKbClzgjb6w2wv8EQx5r08WqXAq93KXGpQ47XWrlt0eBiix3ONDhjb7EtVlLMT49WoWmMHsq9 + 9FDgZYB8L1EG2hj5I0SZZwtpFrCY/ft3A7jUx0IqAy0M4LwXBjDb3k2FOie2ubMKk9zNMX24JeZ42WGB + nxMW+Dtj/lhHzPK3w0S+v82LfWaEEcr+YQAboSjEELkhBtJMu9IkM9TlO6C9dDAmVHlgSu1IjC8fiu4S + d4wvdUdP0WC05TqhOslcmgncnuOI6VUjMbduNMWyD6ZUiOM90FE6HE3FQ1CT74qidGsUpFiiMMVK2ual + WiI3xRy5qRrkcZudrOY+Xme2MGSEAWz3vxrAM4QBnC0MYBtMSDZDayTvAcdhse8A3sNByB4+EBluHPd2 + AxBIDin4Y6ClFsKcGAeG6SOe4ztrsCFKnfXRPESGSbwfC/0tsTrQGlsDLbF/nAYnyN9fCVfjXIwpzsWZ + 4US8OXZGaTCHsU2UgK5kbCxw6I9SF70XBvCMcTyvAN7jkbwfgxkLHcU6v7zHjoYodjBAiYMMZS6MH2yn + IkfxB0byXEcDpDnpIYmvJzrJEe9mikgXNQLsjDHCQgZ3jVwyfx0t5LDjc1tLJaw0MqhN9WGs1H5hAAv0 + Gb8Dof8PA3igZAAb/G8GsLUOHPm9zvzeoUOMMZx9bNgwFdx5T9x4f4YwNo4aZYZx45wQFTMCEZFeCA/3 + RWjIaIzx88JwzyFwGewARzdbOA62hetwR3j7j8CooJEIjPRDTFokUguSkVmeg9KWWsxcvhSvXHsHn976 + A9/fAW78/gTf/kncJYTx+8wA/ub+I+IBcR837j/EjQcPiPv49sE9fPPgLr65J8zge8/wJ48huP9bYRI/ + w41HAn/i5l/3iDv48Ykwf+/h1pN7+OHxHXx3/zZu3v0N3927jR/v/4Yf7/6Kb3/7AV/duoHPb3yFz7/9 + Ap998S988vH7+NeHb+HDd67i3Suv4dqrp3H1/Mt4943z+Oz9q/jl289w59bXeHD7Ozz+8xb++uMH3Pv5 + G/zy9cf48d9v4ZvrZ/HF+f14/+ByXNs4HhcXFuONhVl4e2kK3lsch6vTA5gfPHGhbSjOMS+8Wu2MCxWO + eK3cCefKXXC42o35whMHW8bgUFcw9nZHYGNDEBYWjcTMjMFYkDsEi/PcsSTPBSskA1iDNRlqrEsTFSmU + WJFkjMWJxpiXaIYZcRboZj5oDTVlzGe+DiZXCFNgfLQJpiZoMINjfgaPm55I0ZwojGAzzE83x/xMCyzI + scDcXAvMzNVgYoYKHWnkJInM8TEG5DNiVq4Bc7Mh0plfksOMkRCmogamDuY2npwkIeS5ASyDWO4hI0qJ + rBjm8Vhjad1g8aNmaao5xPq/wgDOjWYOJwr5ejnPq5jnVMDHhYyZxTEqFHCbH8VjKfLF/pJ4U5Qma1Ca + Isoj9hnAhf/DABY//qtQlmv6zAAWlQb+aQCXijKhwvwlhOkr1gIuSufnC+OAz8XnlWYa8zP7Pqs8zxTV + JeZoqLRBI/N+Y7U16irJ3SrM0ca8NqVSg/lVzCG1ZswPGhxqYCypN8NLxAlqwqO1JjhUq8K+KgX2iNxV + ocTuUgW2UYNLBnC6AdalMl8lUR8mGmJ5nAGWMQcvj2XeiuXjeH0sS3hmACcIA1j5wgReKAxgxtM56dTH + mWbopW7sSlOgNV2BhjTyNOrkxgKVZAD31ttjFvlKnwHM9hYGcIMpVteZPDOAzbGe+zc0WGN9rQ3W8npX + lptjdaU1NtXaY0ezK3a3uhNDsbPJXcKuZqJxaJ8BXO2CDRX/DwO43BVrKtywSqBqMHPzYCwTqB/GHDwC + 61q9sK5jFFa3jJQM4CXVrljM8bGkbgiWt3pjabsP5jV7YQYxpdUHk9p8ManDD1Pa/TC7LRDz20OwsCMK + C7sSMW98CuZMSsOsKWmYOTWV2xTMJGb1JmPm5GTM4GOB6b1JmDE1EbOmJmPu5HjMnRCHBd2xWNYdj7XE + pp54bO9JxI7uOOwan4B9k5Kl7eb2GKyoC0VvlhdaY4egOc4DPdkBWNSUhnWTS7FxWiVWTixjXk1FY24Y + ChN8kRnhgazokcjl44JkP+bI0aih1umpDMeC9jhsmZKOU4sLcH5hGs7PisSZXn+cbHfH0WYn6c91+8iv + DrU44ESrmN3mgFPkG6ebRVlnSxypNcc+9sctxeRb+QoszzbC4nRdLEkbhBUZOliXa4itRQrsKjfFXnKq + A/UWONRoxf4qjGA19rEf7K9RSeWfjzaq8DL5zNl2a1xoscKrtRrGKhNqcsU/DeCM/xrA55L18XI8NX+c + Ho4TJ+N0JQP45RhdnCROxOriSLwu9sbpYEecNjbHDZQM4FViRk08H6fpYHuuHDtzZdiWqY9tGbrYk6uP + I8J4Jhe81GBFvm2Lq7zma7zm602iBLQFrrZqpNLPr7drcIGPTzWaSebv4Xpz7CbfXJ2ljQUJWliU2A9r + c3R5fxTYzOtYn2uEtdkGWJulj3W8VxuzjQkVtjAubGWM2JqnxrZCC8kIWltghXmMC5OTyLujDFAbypw/ + dhDKx/RDO/n0nHgjbMoywbFiDa7XWeOj/8UAvtOlxt1ujYQ/npnAv3Sb4Rue+yeNxviQnPU9cldhAF9n + 3Hi10hTHS0ywvcAE6/JUWMqYNDfVGJNjqCciZKgPNUBlKDneMwM4lxogaaxJnwFMbeP/3AAeYwIvaRaw + At6j5Bjpo+RzFUb6mmKENzmIlzE8Riox0ksBL2/l3wzgZ7OAqe+fG8ACfQZwn/n7DwM49u8GsJ30OIY5 + 578GsAoRMc/MX8kAVvzDAI5iLoiNfmYAJ6mRm2GBQua74nxblOZZoYK5ScT4SsY2scZ5Z7aS+sEUs4rM + MZPtNDHHDG1sgyqxrnsm+XO2Bvl8Ty4hDGAx+1dajoTbcqIi2xpVmZY8vs8ArmFcbYgnIg2lNu6ONWKO + VGJLDvtSgQYvlxrjQpUxrkoGsOJvBrAMXxDfc9z8xHFzi215SxjAnWr8NF6NGxON8VmPDO93GOBqsy7O + Vg/EyapBzPs62FtngD1NzAutKuxqEUvNyLGrXobd1C67KvU4Lg1xoPG/BvDeykE4ysfnu8xwrkeN482G + UkWio3UcX9QmL/PzztRRm3D7eh3HpzCAqX3eqZaxTyrxJeP8DY6PHxj7fxAGcLMFvmiyxLt1Zni1zASH + 8+XYyPu7LEWJObz2KeQWk9LMMTHbBh3ZVmjKskIVc3hJSl8JaGEAZ8ZaSIZvGrnz8xLQwgzOif9fDOCE + fxrA88n/F1BXLsxjLmJufg7JAM4XBrAN5gjzl5hfaEtOZC2t/7tKrP1baIJNjHPbC5hTC5U4zPM/ST16 + mjHyTKMtdZgtTjeJ+OiAk032OFBjw7FvjlX5GizjdyylPl+eZ02dbiVVQllOTiX+5LyRY10YwJuL+mYC + bymxkJY7EthWosZOjvE9JaK0vBoH+J1HuD3O7UuVarxCnXqu1gIX6mzxWoMDzlILitLwzw3gqmcGsGTw + /s0ALs+0liqkiFnAJeRjzw3g4r8ZwNUcQ7VxMjSzXcbz/s0ussWK2iHY0unLvDkKC6s9MJ3arTvLETUx + 5lIZ6IIgJcpDzdAcbYUJ8ZaYFmOGuRHGWEleJgzg/eQLJ3KUOEUecp4x8UKpCc5Tn59mjDyeZ4DD2Xo4 + lGuAQ3xtbzFjEXnQqkINppNjtCcYojJWjtRoNaKjzBETZcatCeLEmt7kjHHReoiLHIi4qAFIjBmAjERt + 6j895JPvFDGHVOQbo65Ug9Yaa7TXOBLOaK50QWWBPbJ4zYmMa+L3ozA/A4T5GyKaXDaBMS451hpJMVaS + +RsbaYmIMHPJAPb3M0RQgByR5KTxURb8TnOCx8eoCROkx5pKJnCu4JoZlqjMsUFDkR06yMMnkWfMrnPH + 0gZ3rK53xfpKO6wrYh9j7N1aoMTeEhWOMB6fYa682mmDDyc541+THfHeRDtcbFbjVI0Ch0vk2JqmjfUJ + A7EubhB2pspxJMcUp3LNcJ589EqhCu8UG+PjUjm+rlLh+zpT/Mrx93unPX5qt8UXDRq8w3x1qViGk7l6 + 2JPaTzJ/10VpYUucFvYk9sehVB0cFQYw88FzA3gd21AYwJOEASxK5UazzaPJlWM1KObYLIztmymbRk2Q + PE6JxEC5hOQgYwmivHJqcJ8BnClKQ4dZIi1Yg9jRcoR76Umm7//NAH5u/sYF9Jm/qWFmyAjT8P3UBQEK + xIw2QoyPLmJ8dRHlrS2ZwJGewvTtM3/FesCiJLRAmPDaPLkdqYswfm8oETaK7+P7o/j+yNH8HPaDJOqa + lFATCcK4zgxlm7Jv5AdTbwfrozBUGL2GaKQ26CqwwPgiC7TlqlCdpIfS6AHMlVoojupPDERBRH8UhvRD + GdEYMQA93D8/cRA2ZOnhRDl5Dfn85RpTXK0xwwXynyNZutgc2w8byFm2kK9v4Xjewpy8lVpsayp5hTCA + E/WxOUEf2xP0sDfeAMfi9KU/xp2L18HFpEG4kqEvlYF+r0iJ64VynGfMfSmPsT+TnI3nOCV+ENrJj5rI + p0Qln2b2o6ZkGZoSjajHjNCSIqM2U5BrkguQo8wsscTsUnNCgzmlZpjDcTqjyBi95DeTcwwwJc8QM0uV + 1ChqqVrRomcm8NJqMyyvMpMM4G3NdpIB/PLfDODzU7yxn5x/Ne/f3HTx26Ic9WEylIcrkRNshJQgUabd + 8P9qADcLozrdEBOzZJjC+DKd1zybsbrPADZ6ZgCbYjPzz3pyu78bwN3PDOC6eDkqohgrIshzyLmqw41Q + E6FAbaQS9eQMjUQ34+I0atlFyYzlKbZYlmTDcTsER8aH4fLKfGg1lvigKteDAdeVgtQG4eyUfsP6wddd + C75uWhjlqoXR7gMQOEIHId4GkgkcMsoQYz104D9sIELZyZMjrJAV54D0KBvCmgnOmoHPFsl8HhtmhfBA + U4wbo0SgjxHG+sgR4m+C2FC+HuGImGBrjPWUYcxQXQSNZMf21UOkvx6SKZYzIxUoZHAqo8CtJvloTlJi + KpPhIiaNjQ1u2N82mGTcFpc6rfHlNBvcXmSNRyssCTPcWanBryvMcWuZFX5YYovvFtnixnw7fDXTDh9P + tCFJVuM8RecJdrIDeUbYmWWATRQCazO0sYodfAU7x7J8JYW/ChPYYeuDB6F4dD9kjNRCgocWQnh/Anhv + fF204ONIWPE+afpmW6Ta9UMN79esQCMcySDpLbUikXDBz93D8WiKJx5PGoJHXc6EE/7ocMHNZme8X+2E + V0tcsJ2EYIK3EXKt+wzgAGEAK/l9pv2QaDUIuY4yFDkrpB/RSvi4ZrAx2kYYY9oYkmAO9G3sEC9nyPAm + xc6NdisSaTUeTTLB48lmeNyrweMJZnjQYYw/m2X4s8mIW0PcazXC3Q5D3O2R41GvGZ7MsALmOwKLnYEl + rsBCBzyZa4OHM8xxbxKJ+kRTCcIQfjLLksfaAUtdgOU8VmCpMI6JRa74a6Yzbnfb4BuK6fdKDPEKA/Xh + aC3sDtfCVmH+MuBsSxqI7Wm6WM/XVvG1FQzqywnxz9cVHOzzGIBmBfTDgnEMLtG6UmmOs/mWeJVtc57t + daVgID4ksfuGZPLPZXZ4vNkJ2MXz3y2MYJ7bRls8XWmLJwus8XuvGj/2mOKrDhX+3WSC9yns3m9Q4332 + h486zdk/HPGfec64scwNP6wbip82eOCXjR74bcMw/L7OFX+sccTd1bZ4tNYWj1dbsa9Z4M9FFri9wBI/ + z9TgG94fUQb641YTvEfCe71Ojat1GlxrpBijIHu9kQmxXJ9iaBBertDBeQqgS+3GuEbBc7WLQq6FArJW + G+eq++N8ZX+cK9PCmUItkhAtvEycyuPz/D6cJfoM4IF4k0T3HZLh95vleJ9E+V1+rpgV/F6zEl9MssbN + +a74ZbUHHu4ZgydH/IGXA4CzY4HX+vDX62Nx//JY3LsejPsfROHRZ4l48k0m8H0+nv5QCHxXBNwsBv5T + gqf/ysKTtxPx4FIo7p/xw72XRuHPYyPx2/7h+GSZJV6fqI8TtX0lmw/w3A+XDcRxEvrTLfp4e7Yl/rN+ + KG7tGIGfdw7Ht2sc8O+5KrzL91xp1cIbTf1wpbEf79UAvNmsx8eGHKc6OFOri/MtBhTdg/DeYpLzfUNw + 7/wY4J1Q4L0gPHnXFw/e9MCf19xw500n3H7LBr+/b4kn3w0GfnEn2D9/tZcM4CfPDOB7n8tx/305HlyT + 494FGR6+osTDk2IWsAke7lXh4U6OmW3WeLzVGfe2euDXjT74eoUfzne7Y3OhOaYnMLmOGoh4xrT4IEck + R45EbnIw8hODkB/pheIQFwpRDaaRrK4tc8KRjuF4a4E/vlg9Dv9ZHYjPFo3GhU5XbM1VY3LQIJQx7pZ4 + G6IpbjAmloSgOs0XsX4Uin42JCGOyI12R71Y57coRDKAxSzgspTRKI73JokZitwwZ5THDkZbxgjMrhiL + 9a0R2NMdjcMtQXip2htni9xwJssMZ5l43iAhe49C+6uVTrh10AOPLgcBn8QAN6LZ1uHAD2HArVA8vcn7 + +xW3H4fir7dC8fvpAPywyxefLxuGd3sd8HIJY1ymPg5myLGb43JHtj22F3lgY4k3VgoDuGg0ZhV6oTtj + MBoS7aT1mHJFCZ5wE+REmvO8rUg0rJAbpEbBWFOUBahRFahBjT+F5xhT1FCw147qM4Bb/eToHCvH+LEy + 9AYYYtIYHfSMHIhur4EYT4I7MUiBLhKdFibfBrHmq78Oav110UA0i9m+AXqS4dTsp48mYQjzM5qCZKgL + VKDcXyaVeU7z1Ef8MH1EuOkh2GUQgl1JyNz1JRM43csAtWEWaCaxbiUZbCGpaySRq/dToG4MEy9zXI2P + AlU814rRSpTxedEYXivPO81fjpSxgmCSuAcaI4riIzJQiaixxogmQYziZ0TzM2L9TNjexBgKh9FmiPM3 + R0qwDXOhHQmdBUmqCYmpDMkkGVmhchSFKFFBoldJVIWZopLPS3j92aO1keGjjWTemwTPgYhi3wofMhBh + vI4QUeJ5WJ8B7OdugNGDCV7jcwPYb7gRgrwUJLKmSB1LITvOGvlBFGTBRICK12WIahLO+jEDMYHkZj5z + s5h1tYOE8kCpBY6XU2jWMj7XW+NSqz0udrrgQs9gyQA+1TMCO2udMJ99ZUKEPrpIXNrGGaCR5ytmagvz + t3ucDF0UN90k5OODVOgeq0ITuUOtL++/P0kO27kmTIXaaDNUkcxXRBmjMkLJ62c7hJL8UNw1872tJMNd + YWr0iBnbFGDdPLYn0hjtYX0GcGOgFtEPzUH90Rqqzf3akvn73ACeFK7XZwCH62N6pB5mxhhiVqyhZABP + DuuP8cFa6A0fhNkktqsoYrdQqG2vd8amahtsrukzgLfX2WAXsVtsa62xgSJyUbo25qYMoMg2oFhXYkWZ + CssrVFhcaYw5ZcaYXirDpEIDTMzXQ2+hnlQOenqeLrdiRrABiaAKS0hQl1FMr6qzwupaK6yqNseaCmNs + LJdJawHvr1PiQL0S+8WPJRUk3OWG2FpJUl5jJM0Afl7+eXkNeQ6PWVZpiMWl+lhYrIvF4h+ItRRPTdaM + IdZY02yJpcyT8yuMMLtEl9DB3BI9LOLzVbUmWNegwqZ6BbbVG2JPgyEONRrgTAcFc4cc58gvzjVwyxx7 + XqwT1DIUh6sGY12uHWbEmqHBVx+lXrr/MIDzRjAWPDeAh/zXAC70pDgVJaBHMIYMUfzDAK5z41h0NUGn + mxpThllhlqcN5vs6YUmgG3nRECwOGYx5QU6Y6GuJtlEmqB5pKBnAYtyXB8oocsipwuQoCDNCAUV6eaoF + Ggud0Vk+FBNrRmBy7Uh0lw5BV9Fg9AgDuHQoOhlP6zIolImuAlfMqvPB3EZ/qfTzxDIPdBQPQXOhO2rz + XVCR44jC1D7j9znyki0k4zc3RYOcZDWyEnldqWIN4OcGsP0LA1haAzhfrAHsgFnE7Fx7zGKsnZJmhS6K + 99pxFAJ+Biglfy/0MkLeMEOkO3Osq/ojSC3KP/dHDMd3rKccSZ5K5HL8l7tRQDEWTBqlwnx/DdYEWWDH + OHMcZM56iWPmLMfXuThTnE0ww4lES+yMNsdcX8bgYXqodtFGkcMAlLvooXG4EhP9rDBjnAOmBdiha4QG + dU5GKLbWRq7lAGTb6CDLVhd5DoyxLiYocFIhj/w1y9EI6TwuydEAMQ4GiHSUI9LVFCEuGvjYGWOIuQzO + GjkcLBSws5TD2kIGK0slzM0MJQNYaawN+f9hAOvLBhLa0Od+Yf5KBrB+fxjo94OhoRYUfzOArV8YwDK4 + D1ZKs4CHsb+5u4vnMgwbqoCXlylGj7FBULAr/PxdMWbMEIz2HY4RI90xZKgrXNwd4ORmC3sXKzi4WcN1 + mCNchjtgiLcbfIK8EBDpj4TcFNR0NWHRhvW4+N5H+PynP3HzzlNpBvC3fxJ3xPZRH+49wjd3CbF98fhB + H+7f7zOG+fjbBw8l9O0TRrHY91/ceChwHzcfP8DNR/fw41/3cevJA/z4+D5+EObw/Tu4efcPfH//T/z0 + 8B5+fnQfP967g+/Fvj9u4/vbP+Pmre/xn2+/whdffIKPP3oP7799HW+9cQFXL53Fm6+fx0dvXcb3X/8b + t3/4Cvd/+x6P7tzCQ27/4PMfPnsf377/Br564yQ+P7ML7+1bjMvrOnF2XgEuzcvAW0vT8f7yZFyeHoSL + 471wvn04zjUNxqs1rrhY5YJLla54pdwVhypEmdfh2Nfog/3tgTg4PgrbW0OxomI05hcMx6KCYVhKQbvs + mQG86rkBnK6S1oRdmiDHggQFZiWYopfxpoV5oZ55V/yJSKBFLN8QSf4Vp5FM4Cns671xakyLN8M0Pp6Z + YoZZqeaYnWGOGVnm6M1iLslQoS2N+SeRcSKW/TxaTr7HfPw/DGDTZwYwn4c8LwH9XwM4M9oYmTFKZMep + kJ9kgqIkNQrjxR+fhQGskAzgAr5emsiYkMi4F2cs6eFi4rkBnBfFmBWtlN5XwvcL81dCignjjQrFmczX + WX0m8HPTVpQKrRCloPP+3wawMHzFrN8+41d8DpHd936BygIz1DHnN1TYoJGoq7BGTZk5akvN0Fiswvgy + DWZUmWNpjRk2UgftbdDgcL0ZjgvUmeEo88yhWlPsqzbGniol9jEH7i6lji2QvTCA15CvrkxinkpgzqH+ + WxilI0E8XhwnDGBDrGBbr0xSYlkSdTDbRTKAk8QsYBPMSzdl+7E9yTnGpxlLPxC1EA3pCjTmq9DK851U + Z4eZL2YAW2FRiwWWUKutZn5bz/NbX2dOWGBDHXNitTXW8jpXl1lgXbUttjU4YXeLO/a2DZEM4D1N7thN + 7G0ewsfDsbPBnZzA9X8YwOuZX9bmO2B1gQPWljhjTakLP9MVK8vcsLzcDYvLnbGojKjm87qhWNXoIc3+ + XcHt0ho3LOEYWVHnLu1f2+6LlcS8xpGY0eCFKU2jMJGY0OSLSRw7Mxr8Mac+iK9HYG5LHGZ3JGFmdxpm + TErD9N50zJiciumTUvg8BdMnJnMfn/emYeqkZAnTJ/H4nnjM7IjFrNZozGuJwdK2WKxujce6tjis5OcK + bODj9cRqfseS2khMyhmD5oQRaExg/swZh0WtWdgwrRq7FrRh+/xWLOwqQmdJHCrSxiIvmjom1gd5cb4o + SByDotTRzMHBmFwTiSWdCdg5LQ0XVxbj6socXFkUhzdmBeGVnqE40eooLQW2u1aDPTUa7GdfO1itxmE+ + P87+JnCQ+4S5u6FI8awCC3lUqjbmkYctIiQTOE8fW0qU2EVu9f8R9pbhcR3r0qhsizU8oxkxSybZlmSL + LGZmZmZGMzMzM0PMTkyJGYIOc3bIYc4OGQL1VS85sM8+594f9fQa0IKG961STXcfabfDCfaF453CDDbg + KPnLkTYtjrcLA1j30AC2xzXyo+vtLJtscLVGi8ul8gEDOF+Gm3lyyQC+nieWOhSzfwcM4MeEAZwiDGBz + PJZghkcTTXEqyRQnUs1wKOU/DeBNacbYmGGK7fmWOFCmwSPlWhziuNhfaIlDRRY4US7H2TotrrB/3uL9 + PtnhiKfaHfA07/+pdltqahvc7LXhffJ+u23xWIcNTvKzo+zL++oN2Fwqw+ocY6zL5TXKFNhTpcPOSi2P + VdhapMA2Pst2lruKNIQWexkX9jFG7Cs1YH+FHb/viC1itiJjw7R0BboTLNEUZYrq8YNRHWhEbm8qbZuy + JVeNU+XWeJa64J8G8Odt/zCAJ9tK+HMWsDAJ73Rp8Va7Gq+Rt77UQpDX3mZ7XG20xqM11rwHPbaWWWMN + Y9tixrupiTL0itkw0ZbUQn8bwKVx1FHUmInUVtGBOoQE6RAYqMU4lr7Ul77jFPAbq4DPODX8pNda+IxV + Y4yfBqN9VfD1U0omsGQAB2gHloQWBjDh/z8M4PHUc/89A9hGMn2F+ZuR86cBbIcEcrc/9wCOYxz/2wCm + JmTsF/v/SgYw43xSggIZzA25jPPFwgAudkQVc15NsS3qigyoZxs0iR+15CkwuUiNOayXxRW2WFTOvFWk + l5bLbBYGMMvyAj1Ki2xQUjxgAP+5DHRtqTPzAsFz1/Ma9TnWaGJuakhVoiVFgRbqoQ6ij/U8N02J3SV2 + OFVlh8frrXGdcfLpZs3fBnC9Em/VDhjAYjnXr6gTvuT4+aJTi697rfHFRGt8OFGFt/pkeKFbTHgwxhP1 + g3C23hinmyxwql2FUz16nOy3xXGWR7q1eIR94ZFWJQ5TwxxnebxDgWNtcuocMxxp5DiiBrk0gZx1ghan + 2y1xvMmUMMHpZo63Vsv/MIBvUvuIZaBvNynwaosa73CMf9hhwCedNviM+KTbAe/1OOCVDjvc4Ph+rNoa + e4qtsY55ZGm2FvOYV+YWO2FOhTumV7qhv9wVDTk2qGSuLsuwQ3G6LfLZ7n/u/5tNff4fBnC2K6qz2H6Z + 9qjPYA4mR2ln7p4gDOBSeyytpIYptcEysWKSwJ8GMPP1cmEQS7OAnbGE5fJyB6yk/l5bYcDGCh22V6ix + m7HoAHGU41rMUj3fYMBF6sXLbQ640u6Ey53OuNzligvEaerT/cyDWytssJ7XFD/QXsu2XVtM7cf7Wc/+ + sqVswPQdgB3B11W2hA1hwO4qxgWWBwmxFPRRat0TNXqcFuYzY83j1KhXqFUHDGB3XGz3woFaF8kAnsS+ + 28h8XSPxFhuIvX//mv1b4PyXAVz7cC/gamEAE8IArmd9N6VZo5n9s4P9dEo++30luWDbSOyZFITtvf5Y + 1eqDBdRyYpuetjSeI0aLCo7Nuhg9upMcMC3NAXNTbLA4QRjA2gEDmO0rlhM+U8L4XanGE1UanGc9PsY6 + PVZkhUcKLXCY5WHGyv2s852su9WMizOylehOob4UP9ggt0xKsEFivAHx8RppDCfGmyMh3hRJ8UOQ8tAA + zsmgRsq2QDH5TnmxHPUVWnIpe/SQl/Sznvo7hqGXub6J3KEk1x7ZyQakkFfGjLdETIgMiZEqpMUakJ5o + h7QEWyTH2yEx1gaxMQZEhmkREixDWKgMcVFapPB+MtgHhQGcnWyLnFSDZAAXpJN/Uk/WFbuitdwdXdSe + Exq8mH+HkTuMwLoub2wnr9nd4ont1bbYXq7BzhLmogoFjtdq8Dj53HOTXfHmrKF4c6Y7XprihOudOjze + rMbJKiX2MsfsSDfGNmEAZ/FvyE3P5GtwsVCDJ5nbhAH8dp3IC1p81qbDN8y933AMipn4r9Wr8FSFDBdL + zHEy3xT7MwfM340JRtieYoT96YNwlPn8nwbwIfLbfxrA3dJeqUrUiG0BEvXk7GLPXxtpj9+sKHL0CHL0 + EDlSpaWVeSwmI4apkBWhhVj+uYA5pDjBCXnRtkgKVEhmbCLLpGDGaCIxiPr1TwOYEIaw2CM4PVyLrGhr + agNe66EB/OdS0Bm8XmaoAmnBVkgJtBhY7nks+4ePKWJHD0HMqMGIGT0YUUSkwBgTRPGzaF9zxIjv+RMB + ZognEoIskBImtphTEWrJ0M6OVCI/nNok3IowQ0m0KaoSLaXZ9r0c5/3MDV0lGjRkmlNXDEY567M8YRAx + BGVxg1EWZYRqojXGCBPiBmFR6mBszjPHqWoV470BTzVZ4xlyrRu1jLcF5tifYYwDOTIcIU84wvhxiDlm + fyFjQ44KOzJk2JZmjm3kODuS+L1kM5wkfz8vzQI2wzXynKfz/jaAb1epcIXHjxWrsC9fSS1nhhkpQ9CT + Yow23m9rtozxUo429qW2TOY9Hgte358vDGAtprP9Z1faYC7j0gB0mMvzzilXSubvtCJLzCqTSwbw4ocG + 8LJGA5bX67GS/GI1c5rYB/ifBvCluWNxY2EwLs/2x9Fu8m/G27mMWx2iXkOMURJugewwC7a5JZLCZUgK + M0dahDnyYiz+MoBb+LwdvPe+XDmmFiiZm1WYVarBPN7XkioFVtUqsZ75cxt5zq4uR2zrcJIM4CU1zOOl + OuYHLbpzhAGsRn2iAjXxVqiKNkddrBUa2L+byB9aU3hPKdQ6qTpJzy4l11id4YA1GWIG8EicnBqPJzdW + wKimYBTJw2iSgpEoTHFFfLASoWOMETDCCOOGDkAYwGE+5ogca4XocTJE+llJBnDoKHbEQHbgeAcUpXtI + JnBxmhsK092Qn+aBPL7OSHRGcowdYsP1iArRIHI8iU64ge85Uxy7ID7MFkGjLeE/3BjBo40ROtYYUUEm + SIm0Qk6sAiUJKlQnK9GcpkF3lhazitlI1XyIVi8c6h6GE0wmV3sd8M4sJ3y7xBH31zjg7moDvltlwJcr + mcxX2uHOcke8v0TsE+yI12Y44HafDS43MZBXMpAXy7BfLK1DQbA514xE2ASr8sywssAKK9koSxnQp2dT + LJL01ISaIM/PCCmjjRA+zAiBnkbw9xgwgIMcB2YAx9gZIcfVCM2sr0UcfKfybfFcrSPe6xqKryePxoPZ + fvh95ij8zg71+2Qv/DTRC5/1epKAeFBAeGFftgtmsE5LnY0QJ4xfLUvbwUh3MEWppwz1I3VoHWODVm8D + 6jxVaBqqQo+PGrODNVjF6+1NluN8vgK3KXY+7rXDD5Os8WCaDg9mCCPYGvcmafFzjwL/Jjn6rtUM/24z + x09dVvipV8Z7UeD+DGv8Ns8OWOIKrHAfMHZXuuKPZU74jXV4b74N7i2wHcBie/y23AFY5QKs9wQ2DgU2 + DeOxMIMHTOA/Fnrip6lO+LhTj9dIBG8UmOB8ljGOM2gfTjbCgfTBOJRnjMN8f3/+EOzJHoydmYOwTSxJ + JH6VmmGC9Rz0axOMsSnJDHtSrXCCifkSCdLVIh2u5pvjqVJjvNJsgQ+nqvHLOjf8vpvXP+gBHOL9H2Ap + DOEN7vhtmSu+E8vOTNTh7U4NXmZiut2owvNMOC92WOOVfgqT2c7sJ854d5kb3lvtgTvrhuGj9cPxGfEV + n/H79e74YYMz7m50wq8bHfHrenv2Nzv8tNIB3y0iaZxpjXcnUrT08ZwksE/z/DdJhG9wQN9s0VAoKvF4 + LclopTEu1JngKsnrzV41np1kwJP9amkJnAsNg3Guzgjna4xwoYplmRHOPjSALwgD+CEuCQO41ghPNg2h + KDLHS11yvNarwms9KskIfr5djle61Hh/pjM+WzEc323zxYOjofj9sXDgYgRwLQp4Mgp/3IrAg5vh+OVW + GO4+G4N7LyXh/htp+O3dPODDYuCjMvzxXgn+eKcYf7xaiF+fSce9a3H44ex4/HB6HH487oMfj/ni28Nj + 8MYqe1yfJsOpZiblEiPsIw5WDMbRWmM81maBZ+c44MNN3vhylw++2uGN91lvr89T4oXJ5niu3xjPTzTD + y1Ms8co0OV6frsWrU/V4boIKT05gHU5m/5lmiZc5ru/sH4Zvz4zFb09F4fdneP9PBeKXm7749/UR+PaG + B7572gU/veSGP+6MBL4aDXwtTGD2yW8c8ftXtnjwiQ5331Pj7mvEbRXu3lDh3kU17p/X4tfHrHH/KMfM + QRv8dsAZvx4YhnsH/fDjgXB8uTset5eMx1ESsqVFDigdz1gVKENqpPjBiw9KsyNQkRGGigRf1EZ5oC/J + HgtJYrc3DcfpyX54emkYXloVhueX+OPa9JE4UGfL4CxHR9AgFDPmFjO+tqYOw+SqSDQXBCE3xpPkxANF + iSNQkzMOXZVR6K6OQVsZPy8KJWEORHmKHwpjhqMw0g31qcMxsWgcljRFYOeEZJycnobHeiMoqsbgXKET + zmfKcSnXHE9WWeGlfi0+4rj49jjjkphN/Xo08HE88EUs6ykO+J7lV8QnPH43nm0fj5+uROLr4yH4ZIc/ + 3l46knFUg5NM/EdzZUz8FB181l1lI7Ct0g8bKgKxkphX6ov+HC8SdNZXlJr3qUQeSUpOtEb65V1+lA75 + YRoUUzhXhOgYZ/VoGG+NBorrxkA1minIO4OYzEKFIajBjAg15kaoMI/EZjYJ1CwS4GkkUVPCFeiPkKMr + QoY2Jt7mEDM0sX1axpuhU5i/TMydYVY8tkQH0cnvt5P0NfN8NSRjJSRtmT5WSPK2QpSXOUI9zRDGMnqo + JeKHWyDN2wIVzF+tzGcdsbZopcBvIOmrY7yuC2BJ1PNe6wLEvs9qVPOey4O1KBqvRg7zajrJYEqIFomh + WuY9DeL4vHF8Hc/YHUcCmRAkSKQOicHWLPUklxQOQTZIDbVDaphe+iVhKu8zNVQs92JJIilHeaQC1REK + VIbJUREmY/1Zony8BYoCTVHgb4qccSaSAZziY4JE5uxYHxmixygRPkqB0JEyBA+3RNAwgmWgOB5hhfHe + FAs+CsSN1SAzxBZFEQ4US/aoi6YA433Xj5ezTsVevGaYQ0GzOoeCk6J0P0XhIxR/p2qspV/8PkFCdbnD + Hpd7XHB54lDJAH6sfyR2MB/OTbPEpBhT9IabolO00ThjtI4bgglsuynRakymuJkSo8OUKAriCB3HhwLN + QTI0sZ3rSHJr2Y8ahPmbbE1Cr5HMu+poBRqjlWiNIvkh+e2i2JlAUSQZwEl/G8D9cZboiTJBZ8QgyQTu + jhzM98wwgcJsotgX+KEBPE2Yv/GWfEZh+lphQaoCC1PlkgE8PXYQJkcbYUa8MRaQeK6rsOcYd8XOFnds + E8tpNTtgR5MddrHc0+SAfY322NNgh82VWizLMcGirCFYRe6xloR0dY0GKyl8ltSpMa+WZLBWjmkcn1PL + eZ1yc8wsM8esEjPM5uv5VTIsqddhJYnp6jYnrG93wQZyoLViaWmeY2O1HDvq5DjYrMEjrSocbrTCvjoL + 7K6xwK46S+xpFkupKbCpWcwAtsK6Vt57i4IEU4k19eLXh1bYwL/d2kVx3+uC7X3OkgG8irlrUY0l5pYb + S1hQaY6lvM76Vmts6dBjW7sWu9oU2MfzPdLG+E9+cZY56WyLBc41yXGuUYvHWygI+8fisY6x2FbmibnJ + 5DEBlqgeK2YAy1A6VoUSXy1KfQwoEwbwaFuUeFtLBnCxtxbFo3TSHsEloxkrRnC8DlP8bQAP16F7hAFT + vG0xx8cJi8e5YeX4oVgbNRLrYkdhVdwILGYcncox1e2vQTO5bJ0AxV49Y1F9nJZEWs24rUJFihZ1eQMG + cH+dNyY3jsGURh9MqBqB/grG15qRmFI3mqU3Okvc0V0iTNqRWNAWhIUdIZjdHIAJ1aPQXuqFpgI31Ba4 + kF87o+Kh8SuMYCG0y4UhnGuHkiwbFGVSgKfx2cQMvmI7NJQ5oq3a7S8DeHqVB2ZVeDCWemAhsbiM4HXn + 8fxT0+2lPbFbKDRbwmwIOzQG26PK14AcD4pZ8sZ0xrQsP47nAGvk+gsznbF1tBo9fuxvgVosDaXYiaJY + izLgGMfM2QQ9LqYYKMw4jnl/j2U6YH+yHZYEqTBtjBydw63Q6MkYO9QK3aMptoIdMDfcDbPGO6PfxwaN + HnKUOBgjx3YQshxMkO1sgXx3FYqH6lEylM87lIJ4qBbZXiqkussR70Zd4aZEpJeB3NoOfm46DLVTwdVW + CSc7JRwdlLC3l8OWxwaDFaytLaHSmkKhHsCfS0BbKkxgJTeFpYCMr62MYWk5RDKA5XIjaNSDYK0bzHOZ + wdnJHB5ulvDivQ4njx45XAPvERqWSgljRmng46OFn58BY8fZY/QYe4wa5YxR3u4YPtIdQ4e5wWuYKzy8 + nODsbgsnNxs4Ek4etnAeao9hvp4YGz4W2RX5mLp4Ng48dhpPv/42Xvvoa7zzxc/4QOwD/MOvEj768YGE + Oz8J8L2fB/Ahjz/8+R5xXyqFKSyO/zSIP/x5AH/OIP5rJvG9BxI+eXAfn9y/j89+vY/Pf3uAzx7cw6f3 + 70rLS3/y80/47N5dfHX/Ab568ABf3r+HL8Xru8QvP+GrH37A5998hU8++xTvvfcvvP3ma3jjlRfx0u2n + 8Oytq3jhmRt4982X8MWdt/HTN5/i1x+/wt1vP8U3H7+ND197Bu88/QTevXQM757fg5cPL8etTf14fFE5 + Li3Mw9Or8vHiulzcnB+Dq9OCcGmCHy52j8bl1pG42jySPNkbF+pH4FjdMBxqHIVD7QF4pDccx6ck4mB/ + PLa0hGNtnT9WV/lgTeUorJUMYBdsfGgAb8rVYm2mAsuoFxYxbs9O1WIac0Unc0ML83ZTuFpCO3NEf7wB + 01JsMT3NjrDFVPb7GRTNM1INmJWhJ1hm8zu5zCW5evTlMdbk6tCSqUGd2CstWYWyRCWKEuTIi1chO+6h + ARz7twGcwZyWEaP8Pw3g0gwteaP1wz2AGQeS1CgW5i4/r0rToTJt4P3yZJ00C3jA/CUSlDxWoZz6uDKd + 3xPL9xFV2eRSOWL27sA//AcMYB2qqZkExFLPdSXUkCU2fxnAoqwuYvzhd6uJqgLm12Jb1Jfwc35PoI5/ + V8+/a2Kub6lyQHOVPdpqHdBR7yyhpc4BTdX8bqU1msvV6KvRY2ajDZY22zJP2WJ3my0Ot9rgeJsNThEn + WxlvWvQ40qzDI01iJrAWB2s12FOhxA5hAFOXb8xnrsqmHk8zx5IE5s64IVhIiOMVKRZYk6HAhhyxRJwO + 63OssUbM+hYGsGQCM7aJZaCJuewTMwixR1h/ngbd+Rp0lOqkffYmkIdPZw5d2OGEpV2OWNXrgHU99tgk + zF/e29YWG8KOcMA2sV9i/QC2N4uVyLxwuGck++dIHOoaicOdI3CoYwQe6RyJI11jcKBjJHY1DpWWgN76 + 0ADeXs3XYh9gxvTNlR7Ywtebaob+ZQCvIVbVDSWGYWXjcGIEVnFcrGr1xhqB5mFY3zICm9pHYVu3H7b1 + BWJTXxCWtvlhbrMvZraNxbTWsZjSPA5TidkNQZhXF4qFDbFY0JKEeV3pmNufi7lT8zB/ZjEWzSFmF2He + 9HzMnSZMYZbEbGLWtBzMmpyJ2f1pmN2djDntSZjbmohlXSlY25uF9d3pWNYch8VNMVjRloTVnalYw/Ov + 6szA7JpYjpVAtGX6o684Est7irF9bisOr5qEQ8SaafWYUp+J5vxI5t1AlCUHst8PGMHVOcHorYnBHF5r + /cR0HJydhaurivDchkI8tzIVzy6OxPXZfjg/wQPHOuywn1pkX50SB2qVOFijwCPkUydatDjVYYNj7Gv7 + GqyxuUqFFUUW7A9mWCR4WPYQLM0ejJW5xlhXZEbdosDeBh0Os5+e6HTA8S6xzRj/vsNAzafDiQ4tTrM8 + 22XAE712uN7jhJudjrjVZoeb5LxXy5W4UiTD1XxLXKcmupmvxrV8FZ5g/z1LzisM4DOpLJMt8FiSOR6N + M8XpBGEAm+FEqjkeIfanmmJXqjG2pxlL///YlG0mGcAHyzQ4VqXHsQqOk1I+X7HlfxjAN9sdcJO88IYA + ufcNjq1bXWLlFVtc7rLFOT7HcY69o63CLCe/qxUGsArreG6xzPPuSrGkp4GlHjvLtdhRosHOIhV2EXsL + OSaJfYwd+4usqe31OFBmy3Fqjy2l5AXiB51pMnQnWKApcgiqxw+SDOC+SFMsEgZwtgonS3R4lpz4LwO4 + SSEZwN92qfHDBOu/DOCf/jSA+4UBrME77Sq80arEq20qvNKuw/PtfKYmAx6r1eOgNBPNgDWMbQsZ8yYl + kI/EWkqzkBtiqBUSdJIBXBZvh/xooaMMiA3RI2y8HoHBOmm5Z59xKoz2k2GML+GnhC95qA95kQRfNd// + 2wD299chgBwqiPoskFotQDKRNQighguUDGANxlOn/m0AaxHFPJBA7pSW6SQt/5yR4/zQALb/hwGsQyzz + QZxkAAvzV4dkxvvUVJbJfM04nxgvRzpzTY4wgMlPywsdUFXkiJpCxnExu5fxTOxt3pOvxLRiLeaX6bGs + gm1TboM5jNuT863RJnKB2Mud7VVcQC5WxPMUk4eWOKC6hOcShnKJE+O/Hapy9KjOUKM2TYW6ZDkahLkf + a0b9a47ueCvMSlFgF7mqMIAvNhrY36zxNHXCs41KvFCvxMvEG9Qy/6pX4GNqii/ahAGsxhcdGnzVo8Xn + fTp80KvAm10WeL7NBDcaB+Ni7SA8Xm+K89QmFzqt8US/A85PcsCZXlvJDD7WrpF+2HqU/UZa5ahDlHIc + p8441szx1C7DxX4dx6Yap1v5Xr2xhJNNptQilniizVJaAvom/+ZWi2xgGWhqopdb1Xiz3Rrv8pp3OLY/ + 4bj5uMcR7zEPvMp8cItj5jw13IFyW6xnPS6l5l1YaINFFa5YyDg9t34oplR7olnsU8tcXZpmQKEw1qg5 + s2K0hEYqc+LI85NtUSqWgM6mLshyemgAkzMzf7dnUbPmMWcW89zMyUvYbsuYk5cXGyQIA3hFqQ2W87Nl + 1AhLiWVlDlhZZo/VZQasL9dhM/PuznJqsRIZHimxwslSGc5VKXCxTkduxTjBZ3my0wlPdjvjVo8rrvS4 + 4YIwOagj91TbYgvPs6GEepK5fy37x1o+58Yi5j/xI+cqR+ysdGQpjh8awJXCANZjF+PGXpYHGEMOM6ce + qRbLQOtxiuP0TJ0NHmd+FebvtVYX3Gj3GDCA64QB7ICJ7I8NGUrUsF4rWYd/7f9b4Ej95Iy6ItaTMICl + WcB2/B7LHHKWbFs0ZtqgiTqlOUWJdmKqaJ9qV2xsH4k9EwOwo88f69p9saRpDKaSJ7azvqvjyKOo+2qj + mf8TbDElxQ5zkvVYwrG3PoWxLkuPR/KscapYJ+1Beq5Sg7MV4kcsShxnfD9cwHhcYIEDhXLGQjV2l5Mn + cJwtZ/tMyVKhNVmBco5ZsQVIYpwe8Wz3uDiO7TgZ4jiG4oQBnGCMlCRjjmljZGeYIT/HEgW5VigtUqCW + sbi10QFdbW7o7xqK/u4R6OschZaGYSgrcEJOqg1SqVmjQ2SICZEjUawsF2dAarwtUuJskBBjQHy0HjFE + xEMDOFR8V0w8YDxKjdcjI8kG2YxLueS8eeS7heyDVflO5HluaCMv6aTm7KvzxDRpBvAwrCWf2Unsax+K + XbV22C720S+0wh72saPVSup7PV6bOQzvzhuBt4QBPNkBN5gvn2hivTGvHshlXmNO25FiggOZchzNUeJ0 + tgIX8hS4WaLEbXI+YQB/0KhmvFDjy1Y9vmg34EPyrxcqLXGt0BTn8ofgGPO1WP558/80gHn+U+SMp4UB + zPY4XGrAVsa7pexXMx7OAG6KI19nvZXG6lDwcJnnrGhh/qqQFq5AGusyJViBZAlypI4XM4I1yKUuLoy3 + Jy93lgzgxAC5ZAAnBSn5PY2EpCDWbYCYOKFEQuDArOCUEDXS+fdZUTrk8Fpi5m962ICxnE7ksD3yqUHE + 3sP5/Dw7jO0YYIV4X1PJ/BWrzEayjHiISO8hiBptjBhfc8SNs+J9WPJ6FojzN0NsgBkSx8skE1gsB50u + zOAwGbJDLZEbao7cMBMURpuiPNES9VnUPowtXayjlkIVatj/ypMHU0sYoTxJlMbMmUNQFs08HjUILVHM + 5TFGmJ80CBtzzHC8QsEcrMfTjdZ4rlGPJ2t1OMe+cCzXAieKNHis0gFna91xiuPwCPnB3lxyiUwZtqaa + sd2MsTVuEPYnmuAkOdGFDDmuZlrgZrYlni2Q4UX2q5cqNHi+WoNrLB8VBnCBCmvSzTEjxRi9RGumGZqz + rKjB5GgV441oZ3/qZm7rLdBgInnKFPKN6WUEucxMCWrMZB+bXabAzFI5pjMuzubreTUa8mI9ljZRp/BZ + lon9gOt15N46bCSX2svYePwfBvDNRcG4NMcfR3qGYg25xyzqzLZoE5SHDkZBmCnr3Fzaozs+3AoJoWZI + jWDdRwsD2BK1KTI0p8sl47qX9zulYGC/4pm81zl87kWV5Kc15GQNGmxrt8UuxuhtHS5Yy9yziHF1erGG + +lMtGcBt1Hn1SUpUxlqgItqMMGfflvM9NVpSxR7BOvSSQ0wnx1jEeLEyzR6r0h2wtWIkTk1PwFObq2CU + myj+MTWcQXcEcpOcEMtOG+ZrNmAADxsE/+GDMX6UKSL8rBAxVsaS8LVCuI8lwsaYI8pfhrRoGxSmuUso + yfSQUJTpxYDiwUDlJm06nihM4EgGpHAD4iIZoKIckUREk4j5jzKHL681znsQgnyMEOo/GAkRFsiMkaMg + XoGKBAUaU1ToFMs7iCWgS/VYz8Sxu8WdgtERlzrt8cY0B3yxwAG/rHTAD8ut8eUSHT5erMP7S0k2F9vh + jXm2eHWmLZ4hqbzSosJjVUyOxQzg+RaS+buVgXc9O+8qdu4VLJfly7GMwX8xO+80JqVWivvKcAtkjR2M + xDGDEDZczP4dhACvIQgiwtwHIdJlEJLdBiHfcxBaWV9LmfRPFdjidq0T/kWR+OVEb9yb6YPfZnjjj6nD + 8NtkL/w4yQOf9bnj1VY3XK1xx75sR8ziIC53M0KizgjJtkbI9TBF1Uglz2mDXn9HTAlxx4QAZzQP16Jp + qAJ9JKmzST5XRSqwP00pbVz/AjvxRz02+PckHe5N0+LBdD3uTdXh5wlK/NBthe9aTfEVCdc3Tcb4d7s5 + fuqW48d+Je5O53fn2ACLnYDlYmavB7DKFVjpDKxwwoOl9niw3AEPVjri/mon3F/riN/XOeGPjW7AFk9g + 23Bgsxewnn+32l3aE/jeTGd83muDt5tUeL7KEk+Wk4gVmuFMvjEHN0lbmSVOV5jh0UoLCcfLTHGoaDB2 + 5w3Czpwh2MnAvifHHAeyZThEsX+aifkyicl1EqPrBVZ4qsQUrzQNGMD3NvC6e4cNGMCHhQE8FNjFe1o/ + FL8uccc3U2zxUa81RYgKz5GcPl0jwzMkqrdbtXixT4/Xp9vh9dkUKexLry50wJtLXfCWMIOXu+OjlW74 + eo07/r3BDT9vcMaDjc6SAXx/rS1+WWWHfy814PM51vhgshrv9DOIkYw+XW+FGzVMXtUUhPUyXKq1JMxx + sdoUl+tJeltleKpHhWdJWm/0yPF4szEeqzHC6Soj1oURzpQb4WyZEc6VDJi/F/n60kNcrTDCzXojkm5j + vNhugddIpt+aqMYb/Sq82q3ge1Z4rZtCa44bvlozCj/s8cdvpyLw2/ko/HEtGngyFngmDr89HY27N6Pw + 8/UI3H06HveeT8K9l5Lx4PUs/PF2PvBOIX57LQ+/vZCNBzdT8dMT0fj36WB8eWg0vtrnja/3jcC3B0bj + y72j8NoKR1yZSpLUPAR7eL87i42wt2wwDlazrdtkuD3XFXc2jMGX24jNI/H+Elu8NUeJV6Za4tVpVnhn + HgnAUlt8yD720QoXfLjUFW+zLV6eZ8Bzc5gUFmvx+jp7fLDHC58fH427l0Lxy9UQ/PjEWHx3YRS+ujAc + n11ww7fX3XH3heH4493RwOd+wFdjgG/YD751wR9f2+PXz/V48KEW997S4u6LGtx7isdXNLj/hBa/ntfj + /gl+fsQWfxxxxx9HvfHrsQDcOxGL745m4M3NCTgzZRxWVrmiLMKMid4KyVH2yEj2RnFmMMpTglAZNwr1 + ka6YkOyIRQUu2N40Ekf7/PDE7EBcnheAs5NH4ECzI1aIX+vGmaMucDByRxoh31+OxtRh6KsIR3NRMEpS + RqIgYTjK0sagka87KiLRURmF1rJItJSEoz4/hAIiAKUJ3iQ1XmjNHoMZVSFY3RmHfVPScWZWBs4LA7h6 + BB7N0uEMydeVHBM8XWmOl9lHPuO4/eHkaDy45g+8EgLciWJdEf9m3/hZmMDElzy+Ew+8mYC7t2Lw/dkI + fP1IGD7eOA5PddvjUQqNY3lyEjwNtpOUbynyoojwHZgBXBGAuaV+6M/2RD2JdhFJTx6JSVaYnMRKgcxw + FTJDlSQpSuSTHJWEiH1mrVEzXoeaQA3qSKiaAtToGq/F5AhrzCChnRNtjYUxOixhfF1Ccr2Y5HpWpBqT + QuXoEcZumCVaSXgax5tK9VoXSMLA121hFuiIkqMjQkbI0RapRAsJWD3vqSJYhfxxCqSOJrEbTrLsaYFg + T0sEe1khjIj0Iskaaoo8PybYCFvJBK5nzK3yZ34aJ0PFWJZE5Vi1hAp/IkCDkiA9CoJ1yOQzJLNtEwLV + iAvWIoZ/G03SGB2kQwy/F03E+msQF6AjxF78AsyVPE6QjkksA8XSMiR94y1J8iyQEylj/2OuCLGUZvwW + BBijYNwQFPuT6AWasC+ZIM/fHJljTZHpb4k03me8nwIxYx4u/zxShvHDLDF+OJ9zuJUEsRy0eD/U2wrR + PkqkBVmzXWxREW6L2khb1IWq0cR67giXYyLz85JMHTYVkSRVOeBQjTCAdThZo8YZsVdLkw6Pk8Q/3uGA + J/oo+CaPxLEON4pK5vHYweiLGIyukMFoCxiMRt9BaPbje+EyaRnvySTDApMiSWJIoFvJS5pIyuvZTyrG + W6GM/ac6QYvqJB3KKaxKo2QojbBCNeukkXmwhYS+Q+zNHGuDyRRFYgawWAJ6YrxKMoDFvr9iD+CuyEEk + tsb83BKTk6wwJZHgeJyaYIEZCVaYmyjD/GSSxFQ5FjC3zk+TUShaYHr8YN6nEWZQwM3PlmN1hR021Tth + a6MLNjc6YQvF2+YGW2ytt8F2it+dNQZsr7HG+lIVlmQJA9iYYl6ONRSWK0h0l7LOFlQrMKtOgenMS1OY + lyZT9Ewp572UmmFaqTnJqxXm1/Lvmw1Y0ebAMe5KUeaOta2uWNVgh1U1OhJSOTZXy7G3QY2DTUocbLDC + fmH8Mu/sbZBhf6sKezrU2NqmxIYWBTa0q7CpXY1NbYLsin2FKeo6bbCr34Xi2RXb+pywoYPX47nE7N+Z + jOczmYvmiaWiea9rWqwptA3Y3K7Dtla1NMN4f7MVhb0xjtYMxsl6M5yutcJJCsRH6+1xtd8fZ7oCsZVC + fGaCHk3+Fqgaa4mysXKUcNwU++pQ4mMjGcACJaMMKB6pQ+FINfKGM0aQBxUSRcMVKBoq/8sAbhthjf7R + 9pjh44h5fi5YGuSB1WEjsD5mFNbHjcay6KGYG+aEif7W6BzLmEIuW0fuKgzgBgqwpiQ9atmXKsXyqimM + PTk2aCtzR08NhXetN/pqRqG3Yhh6KoZLM3sn1/tgUt0YdJcP4/vDMalmNOa0BmJuWzCmNYxFR9kwNOS7 + oDLD7i/j90/ztzLXURLaApV59igTBnA6BWkK40W2HtXF9mgsd0Z7NQX4Pw3gSg8sKPfCImJp+VAs4zUW + FHpheoYLeuJt2N9t0BntjL54L/TEDGO882Ds4zUC7FE63g5FIXYUKPYoZlkbyOdjbJnE+DMvRI8VEXps + iTHgAOPqsVgtHo3X4HHWwxOZBlxgXTya5YB9SXZYyfg811+LKT5a9I5SoYftMslHj5nCAA5zZemMCX52 + aBymQpGzCTLtjZHqaIp0NzmyvLTIH2HL9nNEwUg75jtbZAzXIdFThSgPJULcVBjvZccY5AgfT1t4Omnh + aK+CHWHrIIeNvQx6Wzl0Bivo9JZQ6cyh0JhJkKlMB6DksTB/rQZgJZm/QyCXDYFKNRjWOmPYGEzg5GQJ + N1creLlbYaiHDMO9VBjJfuQ9XI1RI4QRrITPKC1Gj9YOLAvtrcOw4dYYOtQWQ70c4TnUGZ5eA3B3d4CD + izXseL+2jlo4uOrh4G6Au7cLAqODUNFag1U7N+HSc0/jqdfewq2X/4Xn3v4Eb3/xIz78/gHu/Jv48f5D + /Crhw59/wx3ig59+Je4P4McH+PAn8d6f4Gf8roB4/5/4+O7vxG/45B5x/1d8+uA34lfJDP7k/gN8dPce + P7+LT/n6c37++T2W9x7g87v38QXx5S938TXxzU+/4Ot//4DPvvgCH3/yET6684FkBD//3JO4/fQNvPrS + s/jgX6/i60/fxy/ffY4fv/oIn733Kt558QZeu3IK75w/iA/O7sQbR1bg6c0T8cTiSjy+MB83VuTjubV5 + uLU4CVdmRuDS5GBc7PPH5Q5fXGnzxbVWX1xoGo1j9SNwqGE0DrUH4nBPJI5OiseB/jiK4khsbB6PtbVj + sa56DNZyLKwrdsVG6q2N+dSHWWoKXissSDLDnCRLTBPLYYkl59m3W5hT6sK1qAvToJnHYuxMTrHH5DQH + TCEmpdhgCjE5WY8pqdb8jHkoTYcJzHW9RHe2Dh251mhhWZ+ukQzgUp6/KEGJPI6b7HgdMshJ0slN0mN1 + kgGcGaMlxD+BVchlvhJ7AA8sAa1FMc9dks64k6FDVaaN9A/kkiSNZAALY7k8WYMyxqVSUQrTlzlM/DC6 + iBDL1QuIWcMC5anCDCb34PNX5GgYa3hO6qUBA3hgZq+Y5VtTPGD+/mkA/4nqQgOqCvQShLHQUsE4VOWC + tiontFY6oqHMFk3lwvQVSz67or3OmcfC/HVBJ18LA7ixygY1pRqejzmYfGBKgwHzW+yxkhD73O9m/jrU + aiuZcsIIPtJsjUeahQmsx2FhANfpsKdSje0lCmwpkGMDsS5HhuVp5lgQNwTzYgZhbrSRdLw8xRJrMlXY + yGfcUmiDzWz/deS5Yhno5alKrMjUYhnbaUm2FguyNZiTo8U08tTJrJd+1kdXmZ58mjmhglyhkt9pc8Ty + bmes6XPBJubATW0GbCGP2cp73trEfN5khx2NjtjOHL+jyYX5zg2HOofhiDCAu0cOGL/t7LPtw/EIj490 + jcZB8Y/opmHkAR7YWjtgAG+rGToAMRNYlLUjsKVuBDazv29sGIENjd7Y0DSKOXoM1reMxsrGkVhePwzL + GoZjdfNIbGjzxrauMYQvdnPc7OgNwOaeICxv9sP8Bh/MbPLF9EZfTKr3xeS6sdQE4zC7IpgcIxYL6pOZ + pzIxtzcP86cUYsmcCqxYUENUY9GsUsyfWYQFs4oxn5g7uxizpuZjen8mpnenY0ZHCma1JGN2czKWdGVg + /eRCrJ+YjyUdqWzjRCzkZ0s7M7CyJwer+wsxvzUDfdQpzdkB6CoIx5LOYmyd04YDKydh3/IJWDmpDpNr + M9GUG4GqlED2ZX8URPuwb/uhPjsYE+visKA9EZsmpOLg9BRcWJiGZ1Zn4fbyRNxeEo5nFwbg4hQvHCdn + ESuf7KXWPkCtfaDKEoeqZTjSpMLpbjuc6LLHPrbhphoVFuebYh7518I8MyzKNcGSXGMsyx2CVYVm2FQu + w846LQ60CsPXDke77KRzS+jS42SnTjKAH+20xoUuW1zvccStbic83elAHW6LG9VqXC22wuVcC1zNpfYv + UOO6mOWUrcBZxiPJ/E0VW2FZ4dFEc5yONcWpeDM8yn58Kt0KxzOscCjdHHvSTbErwwxbs8ywJccM23i+ + /SUqHKsUP7A04AR547EyOU5VKnG+wRrX2u1xvY38qtEgLY98pV6HK03WuN5hg8udtjjfboOTHGeHOBYP + NNljt/gxYhX5aJEK6wuU2Faiwe4q8vhK1iOxp1xP/a7D3mIt9hZosI/YTxws4PgkDhQRjCO7yzjmGEOW + cExN5bN1x5uiJcoYtaFDUB88GJOiLbAsRYFt2WrJAH6anPj1Fhu826jBnUY5PmuV45sOJb7v0+HnyTb/ + YQB/3W+Nj7pUeK9ThXfIWcWKbW902eB5PtP1ZlucrbfFI9W22EnuvabAGvMYBybGW6Er1gqtcTI0MU6K + FYJqEm1QnkjeE++ETOr0xAg7RFDTBIv/PQbq4DuOOd/XCt5jLDHGRyGZvX/BVy3hzyWgA/31CAowYHyQ + AUGB1tJewOOo7QKC1AiingumTv1zD+DQCC3CmF+i42yQmOKAtEwXZGQPGMCpDw3gxFQDIUxga8QxP8VR + 08QnapGUokdqugEZGTZIYf5JYqxPjFcgLUmJnAxrFOeSN+bbo7rAHnUFBmlv35Y86uQ81kGhBrPZdosr + DFhdZS/tXb+QbTSd8VzaBzhPi0rGweJcLUoYL0sKB1BRZIfKYvLTQvLFXD1KMlTMKdS2STJqLUvUxJii + PtoEzdGm6IqjPuL72wtscKLCBk+wX91oZfs2q/BMgxy3a2V4gTrmNeqYd6gT7jSp2dYayQCW0MXX3Wp8 + 0GmFN9pM8FzjINyoMcKV2iHsw1a40qrEtR6OrwkuuDLJGY/32lE3GHCyjf2+TY3j1C0CJ9oVEk63cyy0 + cVx1yHCxR40LnQo82mKKEw3GOFFvgpONpjgvtiJrl+Eav3eDf/NUqwK3WmUctwq8wHt6tV2Lt9jH3uvU + 4063De702ONfvfZ4tXtgVv3FVhccps5dl28t9fdF1L1La9yxtGk4FjV7Y2b9cHQVOzNu2aCUbVrAvpeX + IJZ/VSI9Qqz+oUJOHOs9xRblmc6oynZBbbYT6sitG5j3m5n/O7M0mMDcNIPtNL9Ij6XEssL/NIBXlZKH + l4lloB2woox5lTl5TbkN1pVRi5dTv5UrOH6tcLDEAieKLXCm1AqXKuW4XqvGk016PNtqhxeY417sc8Pt + fg/c6nfH1T53PN7jgSMNDtJM1s2lBmzktdbzGTcU20k/8thabodd5AECu6vFHsCOEEtA/20AG/5hADOf + VxsGDGDGK2EAP9E0sPfv9TY3yQC+1O7FXE/tWu6AftZnXbpC2rqiMk/MAB5YArqqwBHV+YTYA1iYv4Qw + giWDOJf1lmOHJqnu9NKMuC5iJvv5CubaLSLvThiHHX3jsLHTDytafDC9zAMdWQMGcBnbpDZSjfZYa0xM + 1GMWx9/SfxrAbOcTjHGnGbdOl2twslSNI8VyHC6gps6XYV++FfYWKrG7WPwA3gYb2RZim5AJmRo0kA8W + xiqQGq1GfLQWMdEaxJD7xTI2xcWZc4ybIzXVAmkpZoQpMtNNkJNlgdwcKxQVKlBF3tTc5ID2NmrQLi/0 + kl/0dfugrWkkytjHstMYFxKsER2mQEyYCknRwtTle7G2SI6xQXwU4wljT0zkQwM4SIbQ8XJEhqoQHcF7 + ilJLJnBWkg3y0qgLeb7CDFtJm9YWOqOp2AUtpc7kRW7Mzx6Y1+iBVa1e2EFes6/DC3sa7LGjTI0t+WbY + XWCORyqscKFFh7fnjcT7C0bi7ZlueGmSA57kmLrcODDZ7nCeKfamGmN3sikOpstxJJNjNtMK53MscZV1 + +mypDG9Uq6QVA96vk+HjBhU+adbg3Xolniszx+WCIXgsxwhHsoywO80IW5ONsDnJCDvTBuFA5hAcy2c+ + Jec8zXFwooLtx9y0nW24LF2JWclK9JInN8eqUE0uXhhJni7+90ikhyuRJkzTMJYhSml5Z2kJZ39LyehN + D9UgJ9KAonhHcnIn6TgxQIYEfyt+V0No/0Ii84EwgRODHq7ox1yQKgzfcDUyWEpLNgeZ85wKZLEdCmLI + 9dluVWkuqE534bE9MsarED/WDNEPDd+IUX8j2tsYMWNMkDDOUpqFnBIsRxLbNtbfHNH+ZogPliGJ507m + tZJD5dJkkfQQC2SGmCEzzBh50ebUEXLUUB80MY+3MI/XkVuXp5qgJHkwSlOGSMdl7JflSaaoiDNFbcwQ + 5vRB6Ikywpx4I6zLMMbhYktcIU9/hlzj+QbGlFo9LpGvP1oo9sYmN6p1wSVy3sdbhuFUtTMOFRmwJ4d8 + nn19U/wQaevPA9RmgvM8niHHDd7D03kKPF+sxIscay9WqPF8tQ43yFHOlJJzFKnJ660wO91MWgK6lWUT + +05zJtuUzyLQxhjSmU99VqBDH59LbIMwqZi6j5haoiTkmMbYOLNMgVnl7BPkTrOr1JhdrcG8Oj0W1Ruw + VBjBddZYLlbZEwYw9cq+blccmzwUZ2eOxsU5fri+MBBPzB6LQ92eWF1uwDT24/Z4c1REmiIv3JSx3gJJ + kZaIC7dEvDCDIwdmAJcnWqEujffLONeRpUIv73cS73cqY/106rKZxRosKNNgGbXPmnottpDP7exyx9Y2 + xsh6O8wrp5YiV+vNVaGHuVtsF1BPvVcWwzaNMkFRhDGPmacZe5rStIyHrAtqwinUmfOpZZdR0y5PZSyv + GIHTs5Lw7LZaGKUwQBSkuKEozV0ycmOCFAj3s0DgyMEIGDEEQaNMEOZriSh/BSLGyfmZlWQAC4T5WiBS + /AohVIscDoyCVJ4n3Q3FRGGG50MD2PW/DOAB2CI2nEQsWIux3qYYPdQIviONMM7HCCH/MIDzSXrK4uWo + S5SjJVmGvjQ5ZpLorKwU/1wVy1bY4QIT2suT7PHJHHv8e6k9vl1sjU8XaPDePA3eWqDHq/NIGmdY45nJ + JMYkkmdqrXCkxBx7GZB2ZptjGwPQRmJtrgwrcy2xPE+GpazoJcVMwiX2mERB2RRHoR1qiTS/IUjw4WDk + wAwZaUJYImykBWJHsqFHmiJ/FAcOn6cjQIFlTDKn8m0kA/jtNk981jccP08bjQdTR0jm7wPih0nu+LTP + Fa+JX0ZxoOzPtsXsECtUeRkh3c4IWU5GKOP520g8J4Y4YWaEBxbEjsDMMHd0juJ9DZWjd4wSMxlsVkTK + sZ/C90KhGi/WW5PA2OD7SVrcnabB/Wl63J2ixU8TlPh3txW+bTXFlw1G+KphML5vM8OPXTL81KfAL+K7 + sw34Y5E9sNwZWOUGrHZhKY4d8WCVPR6sccC9dY64u8EJv2xywP1Njvh1Ez/fyu/uHMrSA1jP4zXEEnc8 + mOuCr0ns3yPJeo0i7cVGFQmfBjfrVLhOgXatmaKpWUFiwNckd5ea5ThXb4HjFaY4XGKMQ8VmOFxogaNs + l2MUUmdIkK6QsN4gMbpRKMNTJWZ4pdlSWgL6LwN4P8uD7ix5PzuHS0tTP1jkjq8n2ZJ0WuOlBiWeqrDA + zXJL3KqS49kmDZ4XyzZP0ePF6dZ4YTb7zBwbvDjfEa8Qry9wxjuLnPDpClf8m9f4eb0r7m8YMIAfrBN7 + AVO0LDPgy3k6fDRVjXcnqPAayehzDTx/rQWuV5vjRq05rtSY43rdAG40mOFJCqBne9V4po/P3mGBcw2D + cJpE+ESVEU5WGuHRciOcI8TSz8L8vcL3rvEzgevVRniKxPk2CfTLnZZ4c4ICb09WseS1u2V4qd0Sr/dq + 8Ol8d3y3wQe/HAzG72ej8dvFWPxxKx54NpFIwq/PxOGXmzH46VokfnkyAXefScJdvn/vxTT89nI2fifu + P5uBezdS8NOFaHxzIhhfHPDBx9s98ckWD3y61QufbRuOj4mXlzng0hQK1RaK2KrB2FY8CLvKjSnKTfFo + mxLPz/PAnfU++GrzGHy9fgTuLLbHe/N1eGc264zlxysc8NVGT3y7fQS+2+6Nb7Z54/ONw/D+Wje8xb73 + 5joHvLPVBR/tG4bPj47Bv88E4dvH/PHZcW/cecQTHx51w4fHHfH1Ex64+9wo/PrGGODjccCXY4GvRwLf + sU9844DfvjDgt491uP8va9x7Rcvn0/H5iEs6PLhgwP1HbXD/hB3+OOkJnPbBH6eD8eCxePxwOhvv7ErD + +TlBWFnnhrJYC8Y/xsBoO6QlD0Neqh+KE3xRHjUU9eHO6E90wHwKvg01w7G3bQyOTvDDCbEMbrsn1pO0 + z6Dwbwk3RqHvIKQON0J2gJJJgkKiPJwkbDzK00ejOHkEKrN80cjXzSUhAygNR0t5pLQPcGN+CEXEONRl + jEFvSTDFSBy2TErDoRlZeGxaMs51jsfZCk88lqnGOSb4G7nGuF1lRmFjic/XO+HH4yPw4Iov/ngpELgT + gT++jsQfP8UAv8QCPxBf81jMAn47Hvefi8WPl6Lw3alIfL5jPF6Y5oXz1dY4Jv4pkGfAlhwHrM93x/pS + X6ytCMKKSmEAj0V/lhdq42xRSLKaKxEiBYmXIF2EWGqFyCE5LQzRoDREh6rxOmkGbY2/Ek0kVMIAnhJh + jVmxBsyPM2AxSfvyeGusSLLDsmQ7zCHJnhgik/b67Qi1QAsJT0OwKarGGRGD0DDeDM1hlmiPUqCdcbKd + okzMFG0iCasKVaOY18geq0CS2B93mNVD81cmYTwR5mmOKC9TZIxhbA6zQVM0RQRzV+k4BYp9ZSjxU6KY + KPFTD2CcBiX+FHuBBuQHWSPDn8TQT47YsSTggVpEBWgQRbIYwfejxvH1Q0T76wjmyQDmyAA9iZ01QQHB + fhFHMhofwL4WbIHUcIqFKDnK+CxlJHgDhu8Q5I8djKJxxgNmMJEfwO8FWiKHeT0zkKTQX41YHyXJpByh + I+UIGW4lzQQWpq9k/Ir3iXBhAI+RI3kc24v3XxZiQHWYHrUhKtajAr0xasygYFpdYIcdlU4Ucs44Um+P + R8R+MDUqnG3Q4PEmLR5vJRnssMeFHjec66NwIFFcQILZF26EnjCBIegIGoJmPyNpBnAvc6xYxnsiCbqA + MH87xDWDlWgcT8FGgl4cZImCYEuUx6pJqljHJPUFEVbsOyRCRE24DA1idjf/XhjAkxLsMDHBBhMSSArj + lZIB3E8R1htjjL5YY35mjmmpckwnOZshyiRLwoqiQY55JFgLiLli5i+5x9xUS8xONseMhCGYHGeEGckm + HN9yrCy3xdpaR2ys51ivd8QGCqT1tRTRJLEbKeY2V2gJkthiBRZnm0hYVarA6ioNltdosJjCZw7z0Mw6 + OabWKCi65JhUZYWJzFGTKH6miuWg+fmCRh2WtlP8dzhhZYcrVlJQr2hxxXJeb3kNxwPJ7TqKre3Mrfso + oA40yHGQEHsAH27T4JEuaxzo1lHIUbwxHm/p1GJbtzW2ddlga4cB2zoN2N3ngH2T3bFnkgs2d9thTQtJ + KfP2AsYMyQAmBgxgJVY167C2TewVrMOmFjW2Ncmxu1nGdjbBoRpjHKsxwzE+xyO8ryOVBpxpG41jzb5Y + X+COSRTHDeMsUElOKQzgYj+VZAAX+9qgVBjAo+1ROspGMoALRnB8chzmDJMhnygcJkchX1d6KSQDuH2k + HhPGOGCGjxPmjnXF0mCS8/CRkgG8JsYbC0NdMZ1jsdeXQsFXgQZes5bcVewBLAzg5iQ96pKtUZXCvp6s + RVWWAU0lLuisHIauSsbjiuHoLB/KuDwUPXw9sW40JhBd5cPQXTEME2q8Ma3Jj/BHf/VoNBa6oTLTDkU8 + X0m6AaVZtij7hwFcXeAsoSpfLAtt+x8GcE3RgAHcIX6B/X8YwEv+MoCHUYC4oifOHh1R9uiJdWc/H4m+ + OG90Rw/ne8PREs1cFOuJqjh3lMe5oSqaAj/cEd2h9phBHr44ygZrGFe3xxtwMFaLozFKnCLfPU8hcSHT + GueyDTiVZY+9ibZYH2mDpaF2WBDsiFkB/Pux5Kv+9pg73gnzw10wa7wLJvo7oGmUBkXulkh3NkOKqwzp + XlpkDjcgx9sBuaNckDvaCVmjHJA60gaxw7SMr2oEuqsR4GWPAG8X+Ax3hqebAfYOKtjYK2HjIIPezgrW + tjJoDZYS1NYWkGvNJcjUAyawXPHfBrDMagiUChNotaawNZjBwd5cMn89PRUY5imXMNxLLRnAwvwdzf42 + aqQKY7z5ms/hPVKL4cSw4TrJAPbytIfnUMe/DGA3d3vYOel4jxrJAHZyt4Gzp51kAIclhqO5rw3bH9mP + ay8+j/O3nsGjV5/BleffxCt3vpZmAX/4b+KHew/xK/FAMnfF7N/3f3zwN/jZBz/+TvzxEL/xvQEMvP83 + PvoFhDCB/8DHkgn8u2QED8wMFqXAfXwiZgkTnwoIo/guS+Lzn+/jq7v38e3dX/HtL/fw9Q8/4Otvv8EX + X32O9z98D6+++gJeeO4pvPTCU3jz9efx3juv4ouP/4WvPnoHH775PN547jJeeuIo3j6zB3fO7sA7x1bh + +R3TcHVlPS4sLsaVFYV4el0hnlyeiatz43BpagQuTQzBla5AXCWudQbi8baxONE4CoebxuCRzmAc6Y3C + IxNisbcvhnEqApvaQrGubhzW1/hgXflwxlY3bGA+Wk9RvTpDjqXJZpidaIJp8aaYmEjtmKhBZ4IBzTEG + 1EboUBOmRWOUNTrimRtSHDAxzRETUh3Qn8zXRH+iNf9Gh94ENXqSNOhKpejmOO3gmGjN0aOJurA+TYOq + 5IElmwsSlMiN1yBTMoD1SIuzRhp5ijQDmONKmMDZzFnCJC5I0kkGcFEK4x2FuoBYBlosa1iZrpcMYGEo + lwpzN1GcXxjCKr5WoYhjs4i6uJAoTmDcJIQBLe6hLEWJsjQVyjOJbGECayUT+C8DWDJ/xexfG2lm7z/N + X/FeTZHNXyawOO6sdUdPvSe666k361zRVOGAliph/rqgu8kNXY3uaK91+dsAZg4UBnB1iYZQorlSi756 + 8twWe/JSe6xsMGBzox57WmxwUCwJ3WLAoSYd85PYY1UYwDocoHbdzby4rVSJzYUK5gqFpM2XCQM4fgjm + xQ3GvNjB0vGyfxjAW4tsJQN4fbb1wD7AKQqsyGB+zdJiKbEwS4N5OTrMyNFgOstJBdboLjego1I/sBdw + hQbzWx2wvMsZa3pdsbnXBRtb9bxfa2yR9ti3YX6zxc5GB+xscsKuRhfsFT9C7xqO493eONI1AoeF8ds2 + HIfaxN7Vw3G4wxsH20Zgb/NwbG/wwtY6T2yr9cL22mESdhDb6lg2jMIO9vUdLWOwjTphW7sftnWMZU4e + h80dfszBo7GqaSSWN47k8Shs6vDBjm4/7Or1w54+f+zs8cfmzgCsbBmLxY1+mN3oixn1vpjEsTGp0hfT + yMFnlQQxf8RgYW0K5rdkY15PPhZMKcXSOVVYtaAeqxc2YPncaiyeVYGFs8oxf0YJZk0rwrQJuZjclY5J + rSmY2pyMGY3JmNWUisVdOdgyqxqbZldj1aQiLOnNwcLObCzuzsPKCUVYM6UCC7ryWa8xaMkNQldRJBZ2 + FGHz7FbsWdKPnQu6sbinAv0VKWjMDOM4CkBxtC/1wUgUxoxBfWYgeVAMFrXGYXNfIg5OTsCZ2fF4ankK + XlgRjxeWheP24gBcnu6J410G7GuUYR/5xsEaCxystiD/sGSfUuOxPkec7nfG/jY7bKxVY0G+KWZnGbO0 + wKJC8ph8MyzLJx8rNMOGChl21Gmwr8WabWmLI522OEZONGAC/8MAJh7ne9e6HfBkj9hSzBHPtNrhptgL + tdgKV3Ko9XMs/zaAs5Q4ly7D2TQB+YABnGSBR4X5m2guvXcmW4nTOUocyZLhQJYldmeZY0e2ObaK7bFY + 7imU40i5TjJUTlWKf3Kr8SjHiVhp50aHI661O+ByowEXa7USLrHfXuYzPN5hg9MtejxSr8MecsSdYqnX + alusE3vn5qkYLznWivl+hS32kMfupS7dw3Gxt1TM9tViHz/fTxwgDj3EQWEIF+qkvYA3F1OP5agwjWOx + J84EbTGm1FUmaA0zxoxEOdZwDO7K1eJ0mR5P1RvwBu/3vUYNPmpS4NMWGb5ql+O7Xi1+mmT4HwawDh91 + KfF+lwrvipnAPQa82WOH2+0GyQA+12CHo7X22PXQAJ6bIfb/FTOAZWhjbGxm3GxMFj/ss0VFkgNKk12Q + E+eMlCgnREfYI5SaJjBYj7EB2gED2McSPuSGwuz9C34aCcL8lQzgcQMGcJCYBUwI81fAP1CFwD9NYLEH + MHPL3waw7UMD2BXpWS5Iz3ZCSoYDkjPskZRmR9ggMVWPeOaD+IQBJKcakJZhi6xMe6SmWiOJOSghTo7U + RAVymIOKcgYMYDEjsqGAOS2fuSlPjb58NaYV6bCgjFqAcXh9jQPWVNpjaak9ZhczpxUxdzG2V7M9SgXy + ya8LCJalhbYoLbJDCY8LMjXIT5GhKHFg6coqojLKBHVRxpIB3CkMYObULbl6HC2hxqsTS0Br8GSjHE/V + WeDZGis8XyXDq9VyvF2rxIeNara1Fl9Qg3zRpsIXnSp82qXAh+2WeKNpCJ6pMcKtajGhwRRPtihxq8Ma + T/VybE1wwY0JzrhEHXKG751q1eB4638awCfbFHi0U8HPFbjQKccT3Uqc53lPN5vgVJMxTjVyjDWZk0/I + cLlDjuvsb8IAfpJ/d6uN99uqwPMdarzYocFrHVq8zeu8x3jyLjWR6G8vd9rzuwMG8KEq1ifrbVG2CvPZ + 55bUuGFZ03AsafXG3OaR1GyeaCtykvanLaaeyI1XSat+pFOfZlCvC35QkmqHCvaD6mxn1LEv1GczZzLv + t5BXdGWLGcDCANZjnjB/iwxYTojlnwVWMU+vLrPHqnJ7rCBWldthNcesWIp0A3PY1nIVx4Mc+8sZ+0rM + 8ViJBZ4oYxyqUuDpOjVuM8e+xDj4Wo8z3pjojlcne+FZlrcmuONKvycea3PFATG7k+N/S6kBm4rtsLnE + HlvL7LBNmgEszF/nvwzg3TXiPVvsqhZLQNtgH8v/3QC2xcVmJ8Ypd9Y90eaJS+1DcYi8YVWFPfpy1ahJ + l6OSz1/BPlWZZyvtAyx+ICtQlW/3HxBLRItZwGIGcFOmgXWnRyf500Tm/nm83zUNzLPt3tjbPw47esdi + U6cvVjG3Ti8lX8myQ02cFuXhCtRFqNAarWHc0GAW+eF/GMB5ehxnG5wo1uF4sTB/VThUwLqVzF8F9hJ7 + itTYwdgpDPL1ZU5YUMxnydSimrEnlzpK2qc3SoXoSDWionkca4WEJEukMN5nMN5nZFoNmMBpJkjPNEd2 + thXyeY3yKnLLRns0t7qhrc0dXd0j0NPtg1ZygNJiZ2Sm6ZEUx9gSynOGq5FM/SaWfv5PA9iacc6A8FAd + xgfKJQM4fLwCEURUiAwJUWpkJLCPSgawnWQAl1HnlWezflm3deRSLUWOzM/OmEWOt6zBDVtaPaVtrvaK + Hwqwr23NM8Mu5s7D7GPnmzl+ZnjinblD8eYMF7w80R5Pt+twhbH+XKUcR3PNsC/FGHuTTHGQefDofxjA + lpIB/BpjxtvVVvgX8/cHNTLcaRSzguWSAXylyARn8gbjSLYR9qQbYVuqEbYSezKH4FCOCY4XcsyXiVna + /20Az05Woi9eiRbyb8kAjlAjM2xglqxk/IrjcBXSQsVsXpX0fzaxz26CmOAYopZM38I4BxRQZ2cwtgsD + OJkx/5/m738bwGwXsepfqFhSWoHU8axzsVRzINs7RI6cCHL8GD3KE1nf6a7syx4oT3ZGTriO17WQln3+ + p/krEDPaFPG+5rwW75t5Jj1MzfMqeL8WiPY3/8sAHoAMKSGW/J45YcrnM2GftEAJeXFVllpaCaIuX4mK + DHMUJQ2RUJZmKr0uT7NEZbIwEy3REGfGnD5EMoBnRhthZfIgaTnvC5UqPFOnw/PM6bdrDbhaqsb5QhXO + lVqTf7jgKjnv5fYRONfogROVjjhIvrA11RybEoZIM4APJpvjdIZMMoBv5bGNC5V4sUSLFysExAxgHW4y + jpwXs7mLOS6pAeZyjPTyHlvSzNCQYUkNpiDUElpzNWhnHuwq0KGHvKW3UI1+jtmJwgSmFplcosDUMgVm + CBO4QomZVSoJs6rVmF3LuMFYtZTPsqRWh2ViVT5yqP9pAD8x2xdXFwTg8Vl+ONDlgZXkNFOFER1vjrJI + U+RGmCItyhyJUcIAZv8hUqMG9gAWP6SqZ19sIU/pEktwU4f0M9ZPEqunsG6mFVGflGqwpFyNFbz2Jmqm + HZ3u2My8s4ycbTb5mjCA+5nje9mvO/P1rAM1SuPMURhpTN48CEXR5qggR2hIU0urJnckkRMxps2j3lyS + bJBM4M3UysIAfm57HYzixBT1GHtksnMnhOkQFSBH2FhLBI0ylszfUJKiSH8FoUT4WBnC/CwHZgD7WkoG + sDCLozgYhHmcm+SMghRXEgcX5KW6SshMItnhoImL0iMqXItIBqMB6CWEcBCNHmmMEV5GLI3g62OE4IAh + SIi05D0pJAO4hISuMsYSdbGmaEswxeQMKyws1mIDE84uJr7HKMxu99nig5m2+HqRHb6Yr8Od2Sq8OVOJ + l2ep8ewMDW5MUuFKLztnswLHKi2wr8AEOygCNmWYYiM71RoS7lU5MqzIlVMMKLGYxH0Rie3sQnv0knDV + itnIQRx4fiZI8DOVpuBH+soRRXIYO5YDMZCkLJjfC9GhkXXVzcG/NJaBiMnsmWoHvNHihjvdXvh+4kj8 + PGEo7jPh3p3kge8nueDTPme81koCz4S6P8sac0ItUMe6yHMj3I1QPdoKPeMpoqNdsThhOAfgKCyI9kCf + nzWahlqhw1uOKQEKLI1gciLZfpwE8EV25A+6bfCtWPJ5mlqaBfzLFC1+mKDCd90yfNNqhi8bBhOD8F2L + KX7ospQMYMkslgxgO2C5I6Tlndc4Sfhj7cCet3c32OHnzQ74aYsjftpqj1+Ie1sdgG387i53lm7AevF3 + zsAyV/y+0BXfT7fHnR4d3iYBfKNDj7f6HPBqrz1e6rfFixNs8OJEEhMS/5cm2eK5fmvc6lbjMonZmXpL + nKyyxIlSCxynYDuZLcc5DpyrTE43Cg24WaTAs+UWeJ1E7uMZOtxd747fdnnht71u+H0f72PvUGD7cD6H + F+7PdcUXvSR2JKLPk5heLzbF1SIzBi4r3KpX4hmSwOcmaPHMFA2emWGNp8WPBmZRcMy0w4sz7fEKj99b + 5Ihv1goDmO0nGcAOBOtkNcXLCht8t0iHz2dp8OFkFd7uUeDlFis822CJpxos8GQ9weOnGwWs8HQTkx7J + 6At9ajzD715pNcXZeiMSJiMcqzJi0DTCoxVGOEc8Xm6Ey3wtTF/xS8mbtSTMdUZ4rmUwXuw0x2u9TJxT + lHhnijCAFXit2xIvt5vjrYkk3Yu98ONWPzw4EgY8Hoc/riXgj2dSgOfTgNup+PWZRPxyMw4/Xo3GzzcT + 8MuTfH0rCb88nYx7YrnnW6n46UoifrgQgy+PBeLjPaPwwWYP/GuVA95b6YAP1rji/TV8TTy/0AFPTBLL + 9Mixp84MW0uNSRRMcaDaHI+2qfH8HE/cWeuLbzb64rv1I/HZUid8ssRWwmcrHPDNJk/8yPPfOzQO948E + 4N4jAfjl0Fh8s3cUPmO73tnJv987DJ8fHoWvj43FV8fH4ZPDo/HOTg+8stkeL2+xxus7dfj4pAt+uDEK + d1/2xW/vCwPYH/h6NPCdJ/CtE377yha/f6rHr+8b8OB1a9y/redzWuPuFWvce9yAe+dscf9Re/xxhv3n + 3Fj8cS4ED84n4KcLefjXgQxcWDQey0mIShnUE6KsEBdtoEhzR2biCOTHjEBpmBvqQx3RG2uPWelOWF7s + hQ3VI7CteRR2kJiuq3HFvFwGcfHLoMAhSPc2QtwwI2QEaVCdMRIdwgAuCaFQ8EVJ2ijU5I6VZgA3FAYR + wWgpj0BHdSy6a+LQy7KvKhoTqyMxtykBa3szsGt6Lg5OS8fxvkg82uyLs+VuOJ+nxaUsczxTbI5X2Q/f + 7rfEF2sptg+74/5Fb/z6/Dj88WE4fvsmAr//EgXciwWEEfwNjz8bWAb6t5fZP27G4IdzUfhqXzheneeD + 8/VOOMhktCvXDhtznbEq3wsri32xsiIISysCMKtEzAAeJhnABWEq5BDSr+4ilEglAUslgU0jkckMVSOf + BKyEMbRivB5VJFNVY5WoH6dER6Aak8IGDOAF8Q8N4AQbxkJ7LE+huI3WoS/Ygt8jWSHhEQZwXaApyvyM + UOprxHOZoEHMDI4Sy3UoSWhUaCYxryXpKyVJyxtHkkbxH+ctQ+hQSwR6WiF4qEJCkJccIZ7miPAyQ8po + Ob9vQG0kBTgJX4GfAnljZCjwUaBgjBL5PqoB+KpRMFaHwkAb5AUYkMocEcfvRBERfmrmzQGE+jGv+mqY + UwcQ6cccybgeNZb5cZwOMQLCAGaejP2HAZweboXcaDnKhAkcZsXc8/cM4EJ/Y153AAVBJB/BFJ4ktdlB + rGfmqfixakSP4X2MViB8lHyg5GuBCGEOE5E8jhkjRxLrJNtfjSI+a8V4irRgJVrZbpOS9FiQaYNNpeJH + WC440uiM4xQsR2s1OFmjxNlGFZ5o1uJiu14ygM93u+B0pzMFpQLTY4zQHTJgAE+IMkFPqAnaAwZJewB3 + j7dAf7gM/ewXPRQ3bUFyNAdaoZHPUB9C4koRI2Y1ZweQtEYpURynQb5YVpM5MyfIBPnkDqWsn5pQOVrF + DGD2uYkPDeD+BK0kAiQDmIStP94UExLMMTnZCjMzVJidRRHIcmaqQlrebG66CgsztFiYrsHsFH5H7P1L + 8TIzyYylCaaSMM9MNcOCPCX7OoV5rSPW1jlgdQ1Fea0NVpPArq1QY22ZCutKVVhfqsSaYrlk/i56aACv + qtJiWbUGCyjQxQzf6dUyTK0mWa0lcauSY2KlFSZSXE3iZ7NYtwtbbLGs04lwxuJWJyxqcsaiBkcsoSBb + ShK+hAR3ZZkcm9gGO+uU2N+kxJFWDU6QC5yaYI8TFGWH+yjWu3TY3qnBjh49dpM77e61wy5id5899k9y + xv6prtjZ74j17VqsaFBgSb2M98hnLx6EmUWDMLfCAovr1IyBYjlqa6ym+FvbpMKmRjl2NMmwp8EcB+vN + cKTGEo/wGfaLJQZJyA9UumFnqReWZTiwD8hQR5FV8X8ZwGMcUTbaDsXe1sgfoUKWlxWyyXfyhAE8lPCS + oYLjs344ia63zf9qAK+N9say8KGSWTmRY6uD/bqZ47XOxwLV5K617FcNkRo0J+rRmMJxncprJ6ml5Vjr + KH5byzzRRrSLstQDrSUejM1e6K0ZiZ7qkQ/f9+TxCPTXjUZ/7Rh0lA5FJYV0YbJWmulXIEyedANKMm3/ + mgUszN+aQpf/1QCuLXZEU7kzuqo80V/tiSl/GcDumM/rLeB9LCrxxOKSoVhQOBzTMj3QE+eEjigndMfw + XmKGEyPQHTkCXTG8x7gRaEoYhvpET1QTtXFuaI1xQV+EI+ZEOWB5rC02cHzsTDLgUIIGR2KscDLaAmcT + xD+rVXgsQ4fjGewjjLubIu2wJsIJqyM8sCLCE8tC3bEsxA1Lme8WhbtKewBPDmK9MYYVs23SXSlCPXVI + H2GL9JHUGd7OyBxNXTDGFWmjnZA02h7RI/QI9tJhrIcWvl72GDfKHT6jPODJY3snLfT2CugdZLC2s4LO + 1gpqgyVUAnoLyHUDkD2cBfynAWxlZTYAafavCdQqc+j15nDgOVycLCXzd/gwDUYOEzN/VfAWyz8P12KM + t+4hNMTA7F9hAI9gHxw+whrDhokZwH8awE4S3DxsYe+sg42jhqU13Lwc4D7MCR6jXCUDuHVCJ7Ye3IvT + V69g78nHiAs4e/NFvPDu5/jguz+N33v4QML9AQjz958G8A88lozeP/g5BsDj/zaAB8zhAQOY5V3i3u/4 + +IHAbzz+VXo9AB7fH4D4TMLdAXP4U5Zf3H2Ar3n87T1hBP+Cb3/+EV9//zXufP4R3nzndbz88m288vJz + eO3V23jtleek5aA/fOtFvPPSk3j5yQu4ff4Q3nx0Jz46tx0fnF6H1w7Mxa2Nnbi4ogqXV5bi1roy3FqZ + i2sLU3BlVjyuTonClf5wXO8Lk3CxKwinW/xwtNUPx3pCcWxCDA5NiMWe3ui/DOD1jf7YUOuLdRUjsY5j + Yh11weocaq9UcyxIHILpCYMxKc4YPfEW6GTs70i0QRNzQg31aGW4DvVR1tSUNuhLcURfKvka+URXggHd + RFecDp1xjBmx/Lt4FVqTNGhJ1aKZY7UpU4965oYaMfM2UYWieOalWDmyYlWS4SuM35QYghowVSwxFyuW + gdQhm+fLYx4qSNajMMVa+oFIcZqAMICtJQO4Il2P4ocGcFEc4yLvW8z2LWRZTE1cKPDQABbLThdR8Avz + V6A0RYlS5q2y/8UAritibHm47LNY8vmf+E8D2AaVBQYe26Kr3hO9jUPR0+iJzkZ3tFY5oY35vqvRDT3N + 7uhq8kRHnRvEbOBO8uGWWic0VtuiuoR8gbm+rkKD9joDJjbZYhaxsG5gb63tTTbY02zAviZr7GvUYD9x + uNEahxr12MfPdzInbi1TY3OxChsKVFgtdHm6ORYmmrBdjSWI46XJFliZrsA6asLND2cACwN4NetgJXP4 + yjQNVrGdhAm8mPl9QY5uIM/zO1MKrNFVrkdHBdu6wlqaATy32R5L2x2xussZG7odsaFlwADe2mTA9gYb + 5jZhADNPNjlhd6MLDrZ64Fj3CJzq9saxjuE40jKMGCrhkdZh/HwE9rcNx77WkdjVOhzbG4Xh64XtdWJG + 8HDsrB/B8/GzpjHY2eqDvZ3jsLcngH08CHuJXb3B2NEbiI1dfszFY7C6ZTRLH2ztHoudPWP5HaJvHHbz + b7Z1+GNtmz+Wt/hjQZMfZjf4YWotUeGHGSXjMLc4GIvKY7C4JpU8IgfzewqxaEoZls2uxur5DVizqAlr + FjRg2ZwaLJxRgTmTizC1NwcTOjLQ25yM7tp4TKiOx+SaRMxsTMPi7gJsndeIbQubsH5OLVZPq8SSCcVE + CVZNrcTamXVY2FvMHJaAtoIw9JTGYWFnCTbObMWOed3YNKMV81oL0V0Uh/q08ahKDEBh2GhkBw9FfsRI + 1KWNw5SKCHKcKGzqjsaBidE4PS0StxbH46VV8Xh5eTieXzQWV6a743inDvupaQ7UmuFQjbmER+oscaxN + i3OTXHF2sjsOdjkwVqixoMCc7W+C+YWWzKEyLC2xxPISc/IxS6yvkrF9NNjDdj/QbovDHTZ4pEOPI+Sx + R9t1fy0B/Riv93inAde67fBktwOe6bTHM622uFWjwbU/DeDs/2EAZzw0fwVSZTiTZIkzieY4k2KJ8/z8 + AvXZ2QItTpBPPpIrw/4cS2oqS2yTDGBT7My1wMEiBY5X6nCykpyOY+tMjTUut9rjRrszrrU54XKjrbTU + 68VaHZ5osMbjrTY406bHsUYd9vLetpZrsYl9fl2pHivyVViWrcRaxsvNHAvbGRt2MQbsLiEn5PFesdyz + +GGvZP6qcYg4kqvmvfE4T439hVrskQxgPZbwPNM5FntjTdARZ4b2WAv0EOIHlBty9OR/NjhXaYun623w + Jse+ZAA3KyUD+ItWK2kf4D+XgR4wgA34ul+DjzuVeL9ThXe7NXin96EB3MZ6bzRIM4CPkGvvLGPMz9di + DuPABGkGsBxtjJXCAG5gnK1JtkVlsiPKU93Ix9wYi12p150QEW6HkBBbBATr4UP9N4YcVJi8/gFaCeP8 + NRhL3eZH/GkA+4/VIoCaLEAqNfyO2BdYJRnA0ixgaRloHULDrSXzN5z5JTrODonML38bwAMzgAVSMgTs + CX4n1YB48tAEIjWNfCnTAVlEaqrYR1QYwORSiXJkp+pQRM5YmW+HxiJ7tDBOd7L9egt0mMI2mVNqoO42 + YB3rRixTv7HGESvLHTG/1A5T2L5dbIv6fGtU5ukGDOB8WwlFhUSBDfLZXtlpSmRT7+THm6EkzhzlbNMK + arXafxrASTJszGJfKNTgbI0aV6g1btSZ42a1KW5VmuNZapZXhKHzDwP48xYNPmtV4bN2BT7tkOFOqwVe + rx+MZ6uM8EwNyyYrPEfN8WyXLZ7rccRTvc64wfF1iWPwDHXMKWH+8u+PtSlxrF2Jk4SYWPBYhwLn2Vcu + dlF3dsn5XTPJAH6sxRRnWizweLscl/j51S4lrnXwPnn9m8Qt/r0wgp/rUON2uwavMF681qbDW7yeWBL6 + tU4bPM84cL3FDheaHLGPOm8l+/r8TDlmc9wsrHTE4kYv5gxvLGwfxRznLXH2FnL7SnLmHOboTOr0jEhh + AMuQT35dlu6AqhwX1OY4oyHPBU25TmjJtUd7jgE9edaYXKDHbLbTAo5BsaTwco6vlTwWWFVKXVlujzWV + 1JkV9lhbaYd1VXbYWGXA1iqd9MOp/dSPR6oscaqcz11mgetsh2dqFHi+Qc3n0+MNxqp/9bvg3SnueGuq + J16Y7IanJ7rh+gQxC9gNJ1qcsKfKBtvL9NjKPrOtzAHbxBZHlfbYJczfGmEAO/F4wACWUM18znv4vwxg + 8WONK20uuNnhTnjiRttQXG4fhkMNwgC2k2a1VaVTB2aRx2RrUUYdVJ5tYEk9lmOD8lzD32A9VeSQJ2WS + r2QIE8Qa7fxuf57Y69oOSypdsL7JCzs7R2Nfv8iTvtjc6cPcOQozSslV2C61cRryPyXqibZoFTmiGrPJ + uZYlaSUDeHcWnyHPBkcK+RxFWhxmHD9IHnJAmL55wvxVYQ8h9kXfWmzAZtbRmjInzCm0Qxf1UiXHa1ak + AonhCkTzGpEC0UrEJyiQmqFEFnlZHjlZNs+Rnm6BlFRTJKebIS3Lgu8pUFqhQ1WdHeqaXNDY5IoW1ldH + xyg01A9HYYEDUqgt46PViApVIo76NYXaLC3RDqmMNX8bwPr/NoCpdwUigqwQEyZHCushO8UW+cIATrej + DrVFIfloEWNMWaaYHapHd7EdprO/LWJ7b2B77Wl2kwzgXWUqbBOT6PKG4GAp81iDAs/02uKVqU54fZoT + Xplkj+c69bgmJgJUKnGc+etAign2J5niUJoMxzLkeCxbhifyZLhZLMftMhler7LC2+y771SZ470qC7xf + J8dbtXI8X2GJ62WWOFdkgqP5g7EvexB2ZBDpg3hsiiPCG+A5TldocYpc7mSlAY8wL/xpAM9JVko//m+L + 1aCGPLwogu0jGb9sD2Giij15IzQsNUgOUSHuoQEc72+F1BCxl64B+XH2yIuxRep4lTQzOFUs/Ryk/Q9I + BnAgY3WQEonS3sBKJLHeU8dbISnIkp+LfYPNkRb6TwPYXpoBXJfljopUF+RF63kuGaJ8jRExegjC/1z+ + mcdxPuwr/jJkMM9kR1gjJ0onLSedGGyF2CDe73gZEtmuiTy/MICTQiyREmJOmPL5TJETZ0nNoYBYIaiK + Y66c9V/MNimgVipKNkZpGmN9hgUq2DbVqXLUpSrQlGhF7WSO3mgjTIs0wqJYI2xNG4xTRVZ4slqL2xzj + tzneb5Rp8ESRBo+TE1yuc2HMHMZYOwJPtA7FWeqDo2U22Jlhia1JJtjB6x1OtcJjGQo8IRnAStwuUuPF + Mh1eLNfhBbbj7Wpr5hIDzpOvHC7WYQPH3ZxMS/RwnDSnmaGO91nPOFyfyXFMNFHviFUw2vKEEaxiTlSi + r0SDiaUqTCxTYlKpElPKFNIs4OkVKvbph6hSYyafY061Dotq9VhM7rT0/zCAL0jLQI/D2RmCq7thWakW + k8R9xBqjKGwwciJNkBplhsQotkUEy0gLpMdYUatZsT6VjFUqtFCbdbH+u7M16GYc6JN+9KNh3FdjFutg + Pu93Ke9pvVhxqN0F65odsahKbAugwlTGoImMOf1FzBXM403829IES/alIcgKNUJ+pClKeK0qtnFDioo8 + SI6+OCVmMe8sTLTGklQbbKqgXhEzgHfUwyh0rCVi2ZkSSVhEGRmgQOhYK4wfY44QXwuEjVXwPRXCSZBC + fK0G3vMbmP0rEDLGFCE+pkgI0SCTA0QsKZ2T4ITMBHsJKfEMRuzk0eEahHFghXJQDEArIdBfjhHDBsPL + wwgjhhvBZ4wRAgMHM4DJkMkBK35VXRxjiZJwM5SFDkJt5CB0UfzNyJZjBTvbVvHrHJLgp7r0eHuqAZ/O + tcFHs3R4d7oSr0yR4+kpClydpGBiI+lul+FEvQwHmRTFr1a2ZJlgbbopVrMzLWfHXJZphaU5cixmJ1pE + MjW/2BbTC5iYGQwrmMCz/U2R6GOMBF8+L+87LlCLhGAGhFAHFEQ7oy7BHZ1JHuiKsEMfg+6iaCaOLGuS + IXu80uiKd9s98VX/CPy7zws/9rrhxwmu+H6iMz7tc8JrrQ64Xm2H/ZkazA8zR4uvEcpZH8VeRmgYY4EJ + YQbMi3PF6tSR2JAxGkvjPTHJX4cGT353uCUmsE0WhclwgInzCZKEFxrs8T7J8jdTdPhpukZa2vnnqTqS + bA2+61bgm1ZzfNEwRDKAv2k2xr87LSQD+N7UAQMYwgBe5gCsdATWsFzngD82OODXTXb4ZYsdftzugB92 + OODHnfb4mbi7wx6/7+B3dzkD24kNPF4r/t4Zfyx1xU9zHPDpJAM+6DPg/Qn2+HCqC96b7oJ3Zjrj7ZmO + eHu2Pd6Zw3IOk8cMO7w4RY9nJ2hxvVONxxsVOFPJAF9gipPZFjiXo8JVEtWbHARPlZLYkGS+JX5ROEuP + n9a44P52D9zjfTzY7YI/dosZyUPx+zIP/DLDCZ9QxL1Vp8KzFHuX8o3xRK4JnqAgvFotw41mEsJuFW5O + UOLmZA2uC/A+bkzW4+lJejzH8o3ZNvhsuQt+WOuOu+td8Ot6R/wuloFebYN7q2zx83IDvltgjc9nqvHB + JDXe6howgV9oscTtZis8T8HzAvF8C5Mahc8LJMEv9SrxbKcVLjcNHjCAa41wrNoIx0mKxTLQ54iLPL4i + fiH50Ph9qsEITzca4YV2Y7zSY4E3J8jx7jQV/sX+/uZEsfSzGV7uMMG7bPNvlg/F3Z3++P1EFHA5Gbgl + zN8s4KUclhn49ekU3L2RgB+vxOGna/H4+XoCfr6WJOGnq0n44Yl4fHcmCl+dCMEHu7zx9jo3vL7MBi/P + 1eC1+Xq8tdAeby5mH17sgmfmOuD8RGsc7dRib6OSgtMC24j91VZ4lAT++dme+GiNL77Z4Ifv13vjqxWu + hDO+Zbt9v9EDP+/xxv1HxuL3U8H440wY/jgbzjIE907544ejPvjqkVH48ugYfH2M5zjuj88O+eJfO4bi + hdUOuLWYYnuBOZ5azvrYqccX54bhp9tjcf9fAcDnwcBXvsC3w4DvXPH7N+yvX9jitzsGPHjLgPsv6nH3 + aWvcvc7yIvG4Le6fdcIfj48ALo7DHxfD8NvlFNy7Voz3j2bj8eVhWNrsjjKSOSHMoqJ1iI2lyIvzYBLw + QGkI40GIPbqi7DElyRlzM92wKN8TS0uHYlnFUMzOd0A3Y1tNqDnyxpkgcaQRIocNQgoJREWGN9orwtFU + GorKnLG8xhjU5fujuWQ8BV8QWkpC0V0Xi0mtaZjZnYX5fTlY3J+PVZMKsXFqMXZOL8Ke6fnYOzERh9sD + cbJhBM6VO+MixeGTxYyLYokVCu6PGSO/WKnFD/scce/8UDx4xgf4MBS/fROOX+9GAr/GAndjWF/sN1/G + A3cSgTdTcP/ZBPxyOQ7fHo3DK4sC8Wi9O7Yx7qxNt8GqHCbFAm8sLh6LxeXBmF8WiKmFvujNHk7STQJF + opUlyBaREq5CUgQRqeWxFulhWuSGkXyG6qUZp+UU4aU+ClT5ytHC/NNHYT0r3hYLEmyxOF6P5Ym2WJPu + jBWpDpjO83QFmKCNMbo1WBjA5qgNNEUx80kBUTpuMGpCLCheVWglCWyJ0aAhSo1KEuiCQIo0X4rr0XJE + i2WQvSwR4CX2x1VLCBwqR5CnBUIZaxNGyVEQTAESYY+CAA2yxlDceTM3jJIh25vnGSVA8TxaiRwfHfID + bZAbYEDKWA1ifVQkcsyv/CxkNPMpj8eLcrQKYaOYG4mw0cyTo7UI599G+OoQNU6HaNZDTNB/GsAZ4bK/ + DODScBKMhwawmAUsysKgIdKs4KIQMTNWjYJQCg7WX2awHkk8X5yvCtG+SkKFGD81ya4a0RI0EsR7saz7 + hDEkm34KFPgrUU4RURMkR3ukGjMy7LC8wAk7qlzxSL0Qja442WSPE3VqnKyV4SzH/qVWHa502VGQO+Bs + lyOOt7G9cs0whSSyN4yIMJL2Ae4naeoaPwQdgUPQGWyGHrZTDwlzOwlzg58Zaseaoo6CRSzXWx4sQ5av + CdLHmiA3XI58tmdWhBXSgkyRPm4QMnyMkOdvgsoQubS8Zx/7yoQEO0xItOGxFr0cc31iCWhhACeYY2Ky + Faalk1iSSM2j+J7Lck6GGnPTKe7F0pEUm4uYw2cmWWJKnAkmxw3GtERTTKdgm0HeMIu8YSGJ20oK8VU1 + DlhZY4tlFB/LqqyxvILvk3SuKlJgdZEca0pYPjSAF+aYYqUwaynaF1fyehUkpsxJ0yqEAazC5BoSvSqF + ZAJPKBczgWWY3WCNRe0OWNrljMUdjCmN9pjN6wksrHMkcbXBAp5zcakMayrl2MJxvl/8Yr7HBmenuOD8 + TA+cmeGKIxPtsK9XzPQ1YE8/Ce5EB+xjTpYw0R4Hpjhjz2QHbO02YE2LAsvrrbCk3hILqkwwq0QYwIMx + t9KSZFnN97VY2qjBiiY+K9t8HXP1lkYr7BJLTzda4jAF3CHey858K2zKssJG8c/5DHvMidWi3Z9j1I+C + g3zzfzWAfRwJe5SM1v+XAVzwpwE8jOR/hBado9jO/8MAXhk2Aisih2F+kAumjDWgl+OvdZQVGkdboZb8 + VhjAdRRaDRSDzQnWaKEIbqAIFjPuSlM1qM7n62JXNBW7oZloKnJFY6EL4y95XuUwdDCO//m+OO6uHoGu + qhFozHelmNJRbIn9PhXISVQhn4K9KNUaZVl2/zCAXf/LAC5lHK0rdkJzuQu6qj0xgZha7SEZwDMrXDG3 + 1A3zeM35he5YUOSFBYUjMD1rKDpjndES4YiWMFe0hXugM3IoOsJ5j1HD0BrlhQbmJWH8Vse7oTbGFS1R + zugLd8CcKI7jGBtsTDBgV7I1DvNej8SY42SUKR6NNcejyTKcSlXjSKoeOyicN5CHrgt3wgaef1OsNzbH + jcKG6GFYw2ssjXDDnDAnTCM6g2xROlKNTA+K6qH2SBvpiJSRzkj1dkXqaGKMO5LHOCNujCMiRtow3lpj + jIceo7zs4DvKC2PGDIXncCfYu+ph7aAgZNDZW0Hz0ABW6i0kKKwH8D8NYJnMXILcygQqpTl0OivY8m+d + HWVwd5Vj2DC1ZOyOfoi/jd8B+IwaKEex/E8D2OZvA/gh3D1t4eCqg52zBo68X4/hfH+ki2QAj48NQUNX + K5ZtWovNBw9i9Y692LT/OE5ffQ4vvvc5Pvj+Lj78QeAe3v/xb/y3Afyn0fvQ/JUMYPwvBvDA+wMGMFP2 + vT8kfPTgdwl37v3213t3hAksvf8bPmQpID7/kPj4/q/47N6v+ILlV/fv45t7d/HtvZ/x9U/f4eOvP8O7 + d97F62+9gjfeFHgZr796G2+98hzeeOEmXnn6Mp678iiefnQvXju5FR+d34aPzm3C28cW47ldk3BlXTMu + r67GzfXEmiJcW5qFa/NScW1GIq5NicONSTESrvSG40xHIE50BuFkfyROTInHwYlx2N0bha2d4djYGooN + TQHYWOeHdZWjsK7EC6vzbbA8U4GFKaaYQ504OW4QemMHoy3GDK0cj83MAw1xdqiKIr+IsEZNtDWa4g3o + SnFEbyr7LTlFa6wO7ezrrdFqCc1R/LsYhbSkaEOSGnUcp/VpOgp6NSrE3r/ih8oxzP/UrGn8rpj1kUzt + l8hzJ5JnJP9pAPO82fHkOBTiBSl6FHJMFbEsThPQkefpJQO4XPwDjtcR2x/lR1vx3ATjSH4MuUqM/KHx + K0xhATm/q0SJmIWcIuKWCqXMX//TABbmb33xgPHbWG6PpkoHCeJYYMAEtpPM32qxHCj1VU2xHTrrPdHV + 6IWuBsaUBjHbVxi97uhr9SKGoqvZCx18/SeEAdxQw/ot5fMUk7uVa9BYo0d3vQ0mNxgws84ai2sYR/h6 + WwNjCvPHTnKGXdRk+3l8gO/trdMNGMDlamwuUWNjoQqrchVYlmGBxSlmWPQnkkyxKNEMS1OssCqTuSdP + h415NtIS0GvSBgzgVWkarE7XSktBL8nSSDl9bhZzfI4eUwt4X2V6tJfr0Vmukwzg2Y02WNRihxXMs2s7 + 7bDxoQEsZv8KA3hnozCAbbG70Ql7m5xxuM0DJ7uH49GukeQ3Q3G8WcBLwuEmL+xrGoo9rKd9Hd7Y1zkK + u1q9JQNYzPrdXj8cu5pH8fMx2N3qi13tftjfG4j9fUHY2zce+/vH48DkCOydHIrt/QHY0iNMYB/JDBZL + Pu/pH8fvj8UBYh//bmeXPza2B2A1sazNHwtb/DG3IRBza4OwoHI8FpWFY0l5LJbUpPIZc7CwuwiLJ5dh + +awarJnXiPWLWokWrJxTj0VTyzGzNx/9Lanoqk9Aa1WMtOVMR3EkestiML0+DYt7irBhTgM2L2zG+gWN + WMu/Wzq1AkumlGP1zFqsn9OERRPLMbEuFZ0l0azfZCzurcCGGa3YMrMdaybWY2Z9NjpyI1GfEsjcNA55 + 44cjY5wbcsd7oCZpDKaUhGBRXRg2doRib28oTk4KwfX5kXh5FbUHNdjzS/wYN9xxokONfXVmDw1gMxwW + qGMeE0btVHecn+aFR/qdJQN4YaElZuaaMo9aYWk5+Q35yYoKK6xmub6avKleg10tBuxtt8HBNj0Otuhw + iFz2SJsWx9s1A3sAd+vxBPnRtS4bPEmO+1SbDZ7h3zzJfnu9aMAAvvr/YQCfSyXIPc+lWOB8ugxP8DtP + FFnjQrE1TheqcbxAicP5MuwtkGNHLjU0+eKObFPszjXHIY6ro+SVx8pUOFdng6ttwvx1xtVWJ1whB79U + b8DFep6LY+lck15a+vlgnRY7yDPXcyytpg5cnq/FokxyUV5bjJ0NjBFbCqyxo4A8gKXAHn5HzPw9KEGF + w3kqHM1V4RjxCHGQ59lbIgxga8lInp4ktlUZjK44U/QlKTA5WYnFHHdbGE+OlDviiRpHPNtgi7f+hwH8 + WbMFvu5SSgawMH8F/j1Jj6/6NPi4g1q1Q4l/daolA/j1bhvJAL5cr8OjNdbklgZs4z2syFFhFuOA4Pad + cQMGcCN5XF2SNar/YQAXpXgiK8EDiXGuiIl2Qjg5UHCorbSP71ixlHOgNYLHGxBEnRQYZI1x/lrJ+PUb + K/YAVmIsOepYaqYBKPgZ3yP+NICDQ7QYH6pDmFh6NcoakWIfzng7JDG3/GUAZw2UGdkDZrCYETwwK9ge + CUl6JCYZkJbugIwsp4cGsPhx+UMDmPE+O1WL4iwDashPW4sd0FXqgH7G9snFBvJzPRZViB+f2krmr1im + fluDC9ZVOWNJhSNmMtZPYJxvLbJFLdu6jPGymOcRKCywQ36uAZlss9QUGdKpj3IfGsBlbNOKaBPmS2M0 + CQM43gIzyA3XpcuxP0+BRzl2LlIjXKk2xtXywbhWZoynSs3xUqUV3qr72wD+rEVNKAkZPm21xJ0WC7xR + Nxgv1QzGiw3meKFVhRc69Hi+yx7Pidn11I7X221xsUWDx5qU7Mvs99QkR1o5BtrF0s9KPNamxJk2OS6w + r1zqVuNihxUeazEmTHCuzQKPd8hwpYfjsleLGz1qXOtU8pwKyQS+xb71JM/xDMf1c20avMgx/lKrFq+2 + WuPVNh1ebjfgmVYbXG6yxWMN9tjNvLYswwqz0ywxneNnbpktFjS4UZN5Y2m3DxZ2+mJGi9gyZrikFfLI + DzKZwzOjZRIKkrSoYJtW57mgLs8ZzeTxrQWuaC9wRFe+LfoLDZhWbIt55bZYRCwX+/1yfK14iFWl1GQV + duQ79mxTB2yoscfGWjtsoQbcVWvgOLfGEebTU7VWOFtliasVFnimSobn6xV4tVmDt/g877Ju70xwwUfT + 3PGvqa54mdrw9iQX3Jrogsv9bjjX5YZHGuywu0ovrQqwkzxhZzXB8burxvkhXAinvwxgYRjv4ff/2wAe + WLL+8WYHXG13/csAvtk+FJc7huFQows1sD16c5WoSDNHEWNkQYaKJfu4BGsUZlqzv1MXPkRJJstMPUrI + mcrJeerStOjKs8PUEicsrHTBKnKWza3DsKd7NPb1+WFXj8+AAcxcO0Os6pRmQF0s9V24MIAV6Iih3o5X + Y16yBsup24QBvJPj62CuDQ7lM3Yy/ok4uC9fjb35SuzKU2JPAb/D+LeTvGpLCfUT49vKMhfMYBu2CS7H + 86VHyBEXpkBUmBIRvFYUr5PMe83O06OgxBYlHIv5JdbIzOa45rMnppkhKcMcmTx/ETlJWTV5FMdwTb0r + 6ho90NQ8AlXVXsimXoyLUyEqQoHIUAXiosgxE2yQnkydFW8vzQL+/zWAg60QOd4SCdHsn4l65KTaSrOA + C9JtkEPumR0vR36inG2iRJv4UULpQJ9cU2VHrkbuU2ePXcxB2/NMsDN3CA4Um+B0Dcc/x/bTPTq8Otke + r06yw+0uA242a3GpSoVTeRY4nGqKA+Rth1NlOJ7BHEhed6VQgaeZy15kDHmjWvaXAfxupTn+VW2FN2tk + eJHvP1klx+OMKSeKjdkmxtidPRh7snjM8x4vkkuzfx+t0OL0QwP4CO9XGMDL+QxzxUzIOCXa2e615OVF + 4X8awEqkhGkkpEZopTIpRPyv7aEBzFIs45xFvZDHes1mnSaxLsXyy8IATgrS/geEARzPXBIntmsLEtu2 + yVla8fvm0uzfeOEhsRQzj/83A7g6w5383pafqxAzzgwRYwYjbPQgRIwahKgxQ5A41hIZPG92GDVEtC0K + Y214T7zvUF4nxArxREKYTIJkAIdaIjnUnBgwgLOZHwvIi0uZ88vISYozLJGfZMy4ZMLcaIriVHOUpFug + nBqqOl2FxnRqoBQVepPk6Ber5YUaYVa4EVYnGOFQlgmuss6frdBJuFlGnkPu8gT79BX2kRstQ3GjcwQu + USs83uSG0xzne9nXd6aaYTevdZRj/UyGAhczZbhFPnG7WIsXyqzxYrk1nicXf44x5CbjyoABbI0N5B+z + M63QwzHSmG6GmkwL1PD+a8hhaniuej5PQzZ1GrlIU44cLXky9JVqMIEapL9MiQnEZPI9YQJPLVdhSrkS + UypYVigxrUojmcDza8iLajRYUvvfBvCZGaNwdvooXJjli1NTR2EnOdcicjGxJHV1lBHyQgYhK9L4oQFs + hoRIjudIc+o+K+o0K9RQk4gZu83UZu2McR3UIx2ZGnQz3/Zk8x5ZB9MYX2YVUb/yPleRx21ocZS2d5tf + rsWMInKsIjWmlFpjIvVaf6k9WvIZJ5KoPcOHICOU1w8bQp3INky0QjXHb1OMJbqiLDEtlmMgjs+VZotN + lSNxcnYSntlZDyO/4cYY72uBaJKXaHasAQOYwcJPhjCx5LM/g1eASno93seSsOCxFUJ9LRHiY47gUSYI + 9B6CcD92tHA90mPsKIJJWNgpE6O0SKCQjonUICJUiRAGnmAOjOBAJYJJtgT8fMVSbIPg5moETy8jjBlj + hICAwYiNkiODpKeAJK4wmp02RCxnaYTSYCNpPfKJFIALsuXYWEAyys5yo12H1ybq8cEsksvp1nh9ipjN + qcDlCUqc7VHgVLscx5plOFQrx74yOXYWWGJjtgVWpZtjCTvjIrG8VBoFZo4SC3M1WMBEPI8CeGqBA1rF + r2EimMSFUeNjjKSx5tLgTwmzRWqkWFbGC5Wp3ujM8cOUfD9MTPLABAbe+Xz+/UxeVxnob9e74S0OhM96 + R+CrXi982+OGf/e54vsJzvik1xGvt9jjBjv7fnaMJRHm6B03GA3eRqjy4POOMsaUUDUWxTHhpw3Dlkxv + LE90w2R/DercjNHgSeI92gJzgy2xP4sDhh3jOQrU93oc8dUUG/wwXY+fpxvw81QDSbYW35Fsf9Vijs/q + B+OLukH4umkIvms3x49iBjDr7cEsPbDQFlhqD6xwAFbbAet5LJZ6FrN9hfG72wE/7LHHj8RPxC877fAb + gV38/nZiI4/XEascgeWuuLvACV/OsMen0xzw6QwXfDrHHR/P9cBHC9xxZ4ELPlzkhDuLnfHhYle8N98R + b8y2xasz9Lg90ZpkQYkLNeZ4tGgITuWa4GyOFa4W6XCrRAQeJV4iufkXid3nc/isq5xwd4srft7uiLs7 + nPDbDg/8tt4dDxa74Icp9viwSYVXKxlwCs3xeM4QnM82wfk8M1ykALzaIMf1Djmu9cpxpV/JvqPCpX4m + rz4trvZocYsE8qXJerw/zwHfrHTD3XVu+HW9M/5Y74jf1tjhV9aTWCL7l6U2+H6eNT6focWHE9V4q1OO + V9qt8FKbDC8LtMpIMsWxFV7uJLqt8FyHGa42GeF8gxFO1xvhZM0AHqs2wrkqI1zi8bVaIzzJz55qHJj5 + +0LrYLzSaYo3+i3wr8kUSjPUJHRyvDnJHK/1iGWhh3AssL1XDsX93QHA6VjgWhrwVAbwYi7wSr5kBP/6 + TCru3UjEj5fj8NPlePx8KQE/X0zCj08k4PtzcfhKLPd7JAQf7w/AG+u88OIiBzw3S4OnJstxe6oGL7Gd + XuS4e362PW7OcMCZfgOOdhqwn8JzS4UcW8utSAxlOE1iLRnAq33w9XoffL/BG9+scsf3a9zw82ZP9qER + eHDIB78d572eDQEuRgFXooHLEfjj8fG4f8YfPzw6Dt8/OhbfnRyLb08G4OMDY/DaRnfcWKin0LfCo32D + cHbKYDy5VIZ3D3N8PeWPu28GAx/zfGIZ6O9GSMtA//GtA37/in32Exs8eNcG91/R4+5zBtx90ga/XDbg + l4t2uHfBCX9c4vev+rPeIvHHrQz8+mQF3j+RhwurIrCk3RPlOTokkORHRmsQHW1H8uXGhOyK0hAnyQDu + iLBHf5wzpiS5YFq6G6ZnETlu6Eq2QU2YMBMtkOFvjrgxxojwNiFRIKnN8EZbZYRkANfkB6AqZyyaioPR + Xh6OtvIwdNdEY0p7GuZPKsCKWeXYML8a25c0Yf/yNhxa1oJDC2uwd0YB9vTF4WAzkxUJ8QUSt2skRy83 + 6vFelx5fTrPFtwsM+GqFBj/s5rOe8cCDp0YDHwgDOAIPxAzg39hf7ot9gGOArxOBT1OBf2XgtxfT8OBm + Gr49lYLnFo3H4TovxlE95iboMD/TDQsLx2BOSQBmlwVjekkg+vJ80J5J8hrvjNwIPTLDdUgNt0YyCVdC + lI55gqSKxCqNn2VH2CIvnMQmxAYFATrkjZGjWBg2vnK0M0fNoJiem8iEmGDAokQKXV5vWaoDpggi72+C + 9kALtJHctoSQFASYo2AUE/NoIxT5DUZZkBnqo9RoitOhMVqHGuao0vFK5PorkOZjhURvGSKGCQPYCsHD + FAjx1iF4hEYygAPEnsAeZogZaYWcQAOKQ+2QNVaNFG8SxBGWSB1hhfQRMqR6y5E6UoF0bxLrMVrkBpCg + +dsgZZwOsT7Mg97Mr0TQSDmCRsgxfpRSQuhIlnwdMlJFqBEqmcBiWWgdokkqY4PVJJX/NIDlyIsikYsm + /jSAA42RF0ACwDI/aDBfm6CERLM4nEKK9Z0fakD2eANSg3RIGkeS6qdC3FgS1nFaElOttNT0n4gX+xGL + GdHMKyljmH/HKSQDWMyY7IrWYna2A1aXulL8eeAYxcnpVjecarbDyVo1TtfKcL5RiSsU8teZ2y73OuEs + hfzRFj3W5ptiZvwgTIk1wiRCmKoTo03QE2aMzuDB6AgyQSfbqTPQDC0ky7U+Q1Dla4xatmsNBUxpoCUy + mYNT/YyRxTbOZj2kk+SmBJgixc8IKWzr7LFDUD5e7AWsQVe8DXqJPvaXPvZPYQD3xpNExplJJvCkFCvM + yFJhPkXZwkIbLMg3YC7H9Hxh/uYZsKzAjpzAgBlJlpgYMwQTYnjvYllR8oWZGRaYnSXj32mwguNrVbU9 + llfbYDEFyOIKki0SzmUlCqwokGNFoQwrSRZXEYtzzLAozxwrSEJXkLssrFBjTqkC00pI1MrlmF6tGjCB + q8QsYAUmMDcJA3hWgzUWtNljUYeTtFTlzDobTOW1plboMbvGDvMouOeQ3M4rscJyfn9jrRIHOmxwcqIT + Hp89FBfnDce52R44OsUBBybYYd8EW+zrJ+eY+ND8FaBo2z+ZYn+CDTZ3abG6RYblDeZYVm+BBdXGmFVC + AVA8BPOqrLCQbb2oXoPFDWosbVJjeZMSq9nuGxvl2C7242uS42C9Cger1NiWb4W15FdLSIQXxPLZKFRa + fE1Q42smGcCl5Jf/qwHsa4+SMYa/DOAsL4u/l4EWS0APVz00gP+cAewoGcCLg9yxNGQoFoa4YcZYe0z0 + 0aFrjBItHK+SATzaDNXkvXVidnm4Cs3xOgp3ezSl26E8QYOSZBUqcxij8x1Rm89YLpDnKKGhwBktYjYw + 0VDogvqHr9sqvNBS5inN/s0jdxX/+MmIkSFLGMHxSuSRywoD+M8loP/LAE7VoDRLLNXqwPO4oKvKHRM5 + vqZVu1Og8DnKXTC7xBVzi9wwt8Ad84uGYV7BSEzPHo7OeDc0RTqjMcwVzRGe6IgchtZQDzSFuKIh1BnV + EU6oinJEZZQTjx34zA7oYQybTZ66LNogGcC7k3V4JFGF47GWOBVjRpjgZIIFTiTLcShJg62RKqwl713P + vLY53AM74kZhb7IfdiZ6Y3PsMKxg3psb5oBp4Y7oGm+PstE6ZA1lvBnmhJSRLkjydkXSKDckjXZD4hhX + xPu4UNQ6MN7ZYKyXNbw99BjuaQdvb0+MHO0FjxEucHC3hbWjCtYO8v8wgFXWFtIMYCVLAfn/YgDLCaXc + DFqtFWxs5HB0UMDNRYGhHkqMZFwfM8oavqP1EvzYx3z4WkC8L5X/MIBHjvyHATzUDp5DHf6CMICd3PRw + cNFKpTCuvUa5wnO0O4KiglHeUIOJc2di5vLlWLB2I9btPozTV5/Fyx9+gfe+/xnv/5v44Re8/+Pdvw3g + n3/7vw3gf+C/DeCBGcB3foaED+/+LmHA+P3t4euHBvB9Qpi+xAcPeA4BfkfgzoMHkgn86b37+Oz+PXx5 + 7y6+vvczvvjl3/j4+y/wwRcf4+0P3sHb77+Fd959A2+/9TLefOVZvPjUJTxz9QxunjuCWyd24JUTm3Dn + /FZ8dGEz3jm1HC/sn4nrW7pxaW0TbmxoxK0NNbi+sgjXFubi2qx0XJ+eghvTUnBzWhKuToyhdgvF6d5w + PDYlDo/OSMHhSfHY1ReJLZ1hWN8Sgg2NgdhYPxbrKkZjdZEXlufaY3EG9VuqHLOTZeiPNUU780tjlDka + GXfqmQtqYu1QEWmDcvKOmlgDmhJs0ZXmhN40Z2k2cFOMBi3kc01RSjRHKtAQKUdDtAz1sQrUkuuJPX+r + k9UoF8ZrvEIyZXOEXo2QkdMMzPpIiNJI3CYhWo0kni+VyIjVSctDCwM4X8wATiWPSGOsE6sDkD+VERWZ + BpRSbxZyHObFifOKvf7NCStpy4c/DWCxHLRAIUW+MIDFD1ZK04h0FUozeW/ZGgmSAZw3MPu3ocT2ryWc + 22pc0FrNeFExYP42lonSXjJ/JQOYubCqyI7fdUVrzQDaat3QXu+OLub7Ce3D0d8+Ap1NHnxPvO+GNqK5 + zhkNNfaoKtejtESFinIt6qqt0VZnQE+dnvFMh1nVOizn6/V8vbFWgy01KmyrVmIX88meej12SwawFlvL + NNhcosGGIjVW5imwNNMSS5hDlqYPYFHygAG8OMkCy9NkWMU8vj5HjzWZGqwS+/8ybq1OVWM160UsBb1U + GMBZOszL0jLH6zG9QI/echu0M38KA7iPuXhWgwELmmywjHl2dZstNjTrsaVBL5m/ArsabbCb2NPIHNrk + jEdayHs6vPBox3CcoL4/0TwUJ5pE6YXDjZ78ngd2tnhhb4c3DnSPxu62UTzPUGypHYqt9cOxp20M9nX4 + Yk/7WOzpILr9pRnAu3sCsbcvGI9Mi8Kh6RHYMykIO/v92e/F7F8/jgF/7O8fhwO9fjjYQ/T6Yw//bmtn + ANZ3BWB1ZyCWdwZjWXsYlrVGYGVDFFZUR2NZZRyW1qRgUXM2FnUVYsnEMqyYUYO1cxqwcWGrhDWz6yVj + eGZ3HrrrEtBaEYXG4jDU5wWjOTcYnUURmFqXioU9hVg1vRpr5jVgzfxGrGa5bEY1lor3Zjdg/bxmnqcC + kxoz0FUeh4nVKVjcW45105uwYWoTlnaVY0pVCtqyw9CQ4o+aeD/kBnkgzc8R2QHMV3HDMakgAAurgzjW + g7Cj3R/HWAeXZo3H88si8fKKUDy/1Jdxwx0nO1XYV2OMAzUmOFxrhiN1RL05zvYacHGGBy7MHIpjk9yw + qV6LxcVWmE3NP79YhiUVCnI29hXyrDU1SqwjNjdosb3FgJ2teuxp1mFPgwb7mjU43CL2H9XidLsO5x4a + wJfJcW92GHCL3PbpJj1uketcJ9e7kk09n22J6/kqXBXmbvY/DOBUGc6lCFjhfJoVnshS4lKRDpdKDXii + TI+zpTqcLtbgaLEKB4qU2E3utC3XFNuzxKp1JtgjTOBCKxwltzxfb4erbS642uqMKy0DBvBF9tMn2GfP + E481WuNog451o5N+ULFKjCPeyyLBeVOtsIj3sjxNgbUcF5tzddhOHryT5c48LXbl8rlz1TgozN48NQ7n + KnE0R4njOSoczVPhMO95b7E1NrNcwfdnppihN2YwebUZpqSrMYvnXEEOvbPUAcernHGx1gnPNdjhrSYD + 3idn/FgsAd1kSZjjq04F/t2v+8sA/n6SNb7sVeNOuxzvtSvwTocKb3Vb45VOPZ5t0+NinVaaBb2f43YL + 72FplgIzki3RG2uBjng5WhgjGxJUjNc6VCUzniWRZ6W6oTjVEzlJXkiKc0NcrAvCIxwRHGYL/2At/IO0 + CAo2IIS8aHyIrXTsTw0qZgL7jRVLQxO+Svj6iFJALr333wYwtVuU4f/x9dfxcRxpFygsWyzNSDMjGjFb + LNkWs8XMzMyMlmXZMjMzM8bMGCd2Eoc2sNnNJtkNOA5uOLZjSByf71TLye6+997vj/Ornp6Znu7qquc5 + Z05XFabEmiEmzuKpAWyL9CwHCWNGsCOycgXGjOCsPEdpRHAy80JyqgUys2yRnWuPHDFSmHkiOZH5hLE/ + TeQEMVNMjjk5qTW6ymwxWGmH6eXW1NpqzK+wwLIaNXOiDXa3OTC+OGJnqwM2MS6vqLPDvGp+ttIGPWVW + 5K5iZKUapQVWKCGKCq2Qx7iYkcWclUZNRX2UR/zHANZCHTlhC/OpGBEmlspZy/a7L88QpysNcLlOF9eq + xrMda+D50vG4WaaDt6tleL9BgVvNKnzeZoIv2hT4spX3vdUQX7To43arPv7ZoIX32Vf/0WqMv3aa4O1u + Nd6iXvxLjy1e6bLGC+1qXGmmrmyU4WSzDMdaZYy7chxn2zjdboSzbUa4QJ1yqUOGa2xHVzv1cb5NCxfa + tXG1yxDP9RrjhUET3Bw0w0v9KrzYo/gfA/gVtq1Xu1R4vVOFN9tN8RbP8+1Wos0Ub7Jf32S/vtJghpN1 + FthWbIwl1H6j6WzjWQaS4b6g0QHLe72xcmASlvYHYF7PJMxs90NP7QSUMS8LAyA7zoAlNUsa83GeDTUF + 82QRc3CJMzrEA6TFdugttsJQiRozyy2xoEqMZLXCCsaEP8zflWXCAFZjXbU1NtTYYFOdDTbX22BrozV2 + MA7sa7LEUfb5k9Rk5xrluFwvlrczwJu1MrzTZIz3xXqqnRb4tMcKn0+1w1cjTvh4uh3eHbbFW9Ns8TJ1 + 4vVBR1ztc8Ip6ssD9RbYS127p5ZtiTldGMC72IZ21tljV70DtT9LnsN/RgD/lwFMHOXrk/VqnGmwxFUR + mzod8WL3UwO4y433yg0Hmx2wopr8K0+OijRtFKSzzTFGFjB/F2YoUJRhwtIERczfRYwpf0Dal6KQHoCr + IxfrLbCW9NGyehesZQ7e2uGOPbwn+/smYnevH7Z0+2FNqzdmltijO90cjeRjdeRpjdFydMcqqOlNsCDV + BCvTzLCe92hHtjkOUP8dYCzcn6fCXsbDPYyBexj3djGm7yk2xc4SM+wsVWMredUG9sEVFY6YXmCJVvK3 + 0gQF0skH4yPlmBJpzDgzZgBnkt8VllqjvNoeVay/kgo1cgqMkZZpgCS2qWSWmYy3RezHZbzHlazzKnK1 + anKvuga2p3InZGQwrpALRkYYIDpcLhnAacmWyBLTzCdZS6OA/8cAjjRDeKgxIsONER3Gc3lqAEeH6iOe + 1y9GAecw5hSkWxJqZDNuZpB3ZsfqooT9vDnbGIPFZpgrHrQpN8c2tol9dZbYw/yzq4D5qFATh0qpFat1 + cZG593qLDG/2m+GdQTXe6GF+bFFJBvDZQgMczdDBoRQdHGHuO5Utx5VC9k3mudcqFfgrc/D7Ysr4GkP8 + q1of/6rSw/tV+tKo4LfrZHiV712t1MPpcm0cKdHB/gJNHGQeP8p8e7pcgXNVJk8NYBOcrDLD0SpytkLm + IGEAk7dPizdGZ5wJ6snLiyPFjIPCAFYiNcpEQppkACuRxDoSBnBswP8awHmxamRFmUqjf1PEcmqM93+a + v2IwIMvEYCUSuV8M1hAmcEKgIRKC9JEUpIekAB1CG6mBYj1eY+RPYRyPM0d1sg1q08cM4LocV5Sl2PL3 + qB1CeI/+ywCO9dPkdw2QHapEAe9rKXVMWQLvWawpMtm+UoTxG2GIxKdIihCjgQ2QEqHP93TZHnWRk2iI + gjQ5SrOoIbKNUJIhDGBtFJFLFzF/F7P/lXJfJe95XZaJtC55J/vaYJoCQ8wDA6HjMD1EA0umaGB3ynhc + LZbj1XIVXi0zwYulSlxlW75cosJzjAsvtLgyxrrjWrsLrjY74RzjyEHyj71Z+thPHn9cMoDl/zGAyxh7 + qRveqjbHGzVmeK3OHC8yrlystMBhxr4N7H9zcuTo5febsvRQk62PGvaXauYgMXtALY9Xn2WIBmEG5xqi + Od8Q/U8N4AG2j4EKI2kk8FC5EaaJskKOoUqxzwjD1UrMrFFhrpiNr1aJpfViDWATbGqzGjOAp7nj7Exv + nBnxxPmZvjgxzZMc0RYLyMN6UsejKkoDuaEayI7WRFqMNpKn8F6zvtOoO3MTDKnVZE8NYIVkALdlGqGD + Ma2T6GI9d1Oz9ZGXDecbYSbrdD7PcTlzztoW5oBGC+Z1JUbLyLEqTDBarcZItQ2mMZd3lljy+o1REKOD + rMhxEvL4+8XSrB36aJiii84oXQzHyDA7zvj/aQB7u2jA31MTEf4yRIt1foOMEBmgkBAVqCS4TYRNkiHU + TxjAYhSwTELoRD0Ee2sjwH0cAj21EMF9MUHGiA0xQgyDjLRAuQh8bOwRYfx8sAGC2aFC2DFCxNN2/A1P + T104OmnAzk5DKr19xyMoSBuxFN5ZSaYoEAvp8+TzQrWQ46+BokANNIrRQ4mamMNGtK5AjoMkttdIzt8a + MMOHs6zx3kw1/jJkzsTPgNBtguN873ATBUI9yTQD0S5W5nY21g1sjCvYgBYwIM0lZqdQFOQqMZ9Bf16R + JeaUWGO4yBYdGeaonCJHbrAusoIMkCemKo23QX6iM7LjXdhpfNFRGo7RungsrIvBjGwfDMZYYx6D8G4G + 60ulVrhZ54R32CE+Yof4rMsFX3U74vteJ3zbZ4fPSHb+3mKJFyhED7Fjro01wKxgLfSz0zc7aKDbTQOz + +Lsrpphhc5ojtmROwPJEWwz5G6PGbhzqHDXR5aWDGZN1sIlB7kSeGDpvg/c77fDFgA2+HbLGD9Os8dNU + K/zYb4rvSHi+atbF53Ua+IoQU0F/366DO72yMQN4lhmw0BJYYgWsIFap8WQDX2+1weNdtvh1rx1+OWCP + ewdtcPegNe4dsMb9vVb4bbca2MXPbSc2WQDrWa6xBlY74tfljvhxgT2+neeIb+e74tvFbvhmiRu+XuaK + r1a44OvVTvj3WhfCFV+ucMStpbb41wIr/G2mBV7vM8ZzzXo4X6aBUwXjcIFJ5wY77SvVCrxVZ4S/txnj + 1lRTfLPAEj+v5rltssW9LVa4t9UaDzfb4cEqWzyYb4MfpqrxUb0Mb5fp4Ua+Ni5RTF3IY9Iq1MelMkMK + FAq3dhme65Hh2V4mm34FyZAprvSY4nIn2xjJ5qs9KvxjhhpfL3bELzzXX9c54cl6BzxZZ4sna2zwZK0d + fltlg/tLLPHjfHN8PdMUtwYVeJ/HfLfbEO+SnI7BAP/oYtltgL936+HNbh283D4Oz7Vq4GKLBs41EY3c + btAgkSOh5uuXiNdbxZq/4/HXbm1+Txvv9evhw2kGuDXTCLfnKPHJTDn+NV2MCNbBewPa+HS2CX5a44rH + +4OAs8IAzgJezgHeyAfeKsST17Px68tpeHAjCXeuxuPOpXj8fCEeP56Lx3enY/DlkUjc3h+Mj3f545+b + J+KNJS54edQGL001wfOsoxdIrl8eUOLmkIr7KMyY9E/3qHGs0woHGby2VSmxjYF2fy2JersZ3pztis9W + ++KbdT74aaMnflrnjHubXPFopwd+O+iD349NxpMzwcDVCJ5rDPAS8eIU4Hokfr8WhodXQvDLpUDcOReA + H84G47NDfvjbRmc8P88MZ/v0cahZAwdYh+eGtPHmZmt8eTUAP78dhkcfheD3LycDP/oQrnjyA+/T9zb4 + 7Wtr/PqpFR68Z4H7b1vi/utWuP+CJe49b4VfnrXF4+c9eA48n5dZd6/n49fXavDRmUJcWh+DJT3uqCxS + IynNFDHxYgSwFTISHUkUHFAeYQexBnBXjAP6ExwxkOSEgRQn9KY6ojvFHnWx5igMNUJmiByZYp2IMJKQ + cDMmfpK93Elor56CtqpotEpTQUeiuyYGfQ0JGGhMxPT2VMybmo/ls8uxaUk99qxuw9HNAzi7bTrOb5qK + kytbcXBOKfYPJuCZNl+cb3HGjTZrCitL3Bq2xjezbHBnsT3us6/cXc/r3muNR2ec8OgFT/z2z2D8+nUk + Ht1jvf+WADxKBu4kAT+lA9/kArcK8PidfNx/KRdfnszC8wsisK3WE3PS1BiMM8UQ49P0fB9MLQpAf1Eg + ugv90Zbnx6TshbJkZ+TH2SGTsTGNSIm1QlK8NYXtGNJibZAVa4usGIrfKGtpuuI0HxmyvQxQ7MskzxzV + QwI2RMIzHMtEyDpfTGG9MJXkP8EMA1FM8iRx/dHm6Iw0QQ3JV4HPeOQzpxSQPBVO1kZ5uAy10SrUMpZW + 83PFYSS/zEOpPH68pz4i3QwR4U5y7aVC9EQLhHuPGcABrnoIctZBlLs+UicqkelPIugrQ6K7HhLdSN7d + SLLcDZDsKUOKJ8mhtxIZvjx2IEmjMIADLZA4yRRTfJkLfYwQ6iVHqDe3fZXSyN8wvg7mcULEaGP+fpgP + c+8kFWKDTBEniCXbR2KIMYmkIVJCSQKj5CiKMUYZxUt5FIVlmC7bkw5BERWihbwgEgFhBpPoF5DAFkeY + ojCcJDac5xNixro1I5kkcQ0UhHYMiUH8DQHuTxIGsFiz2FsHqT56KCY3qKaIaCJp7mddzy+wx7pKZ/Zr + V5xscsG5VkecbbGm2FMybhnhSqsSL/ZZUVQ64oUhJ1xinjvRQUJOkr+GpGkpifu8bF1pCuWRJF3eUx3e + PzEFtA66Q7TRFayN1kAtNEwah9rJwgDWRXWIAUoCSJ4naSGD9zKbBDkrTIz+NUB6EMnW5PFII2HO4efL + QkgG2R7aYs0k0t8db4JeCp2+JGP0Jcgo+rTRE6eDoVQDjOaosIREalmZDZZSnC0sssDiQgsspyBfWWaL + ZYWWmEXSPBSvzTY+HtPECGCSzjm5JGoUhAtLTLCcpGxFrRWWUfguogBZUMH9pXIsLpFhaZEMy4rkWFFs + TCGvwNJCQyyjaFlJYrqymm2Y5XwS1NEyGUZJTGeRjI7WKDGDXGV6NYVLlSCpMsysV2FOixpzW60wi0J/ + pMYUU8uUhAojVaaYWaHCKH9zdokBllTJsFGMqOqzxekZzri6wAvPLvLChbmuOD5ih0ODFHGM1Xv7zbFX + TAktRgMPWGLvVJbMkzvIE7b0KLCuQ4bVrfpY2ayPhTXjJQN4TrnWUwNYgUWNKiwSBnC7CVZ0qLCK9319 + iwJbWoyxm9jXpMKBejNs57WvIdeaT6I6k2KkP0gHrbxPtRN1UCEZwPKxtbMnmRH/3wZwlgtFzAR9aRRw + CftKtadSMoA7vc0x6GOFGb7WmDPJHgsCHbAg2AmzA20w7GeOfvaz7onGaGOfbfGhSPDRRY2fLuoC9dHM + Nt3K9tGeZolmCuCqJJU0DXRltjmqci0lVIu1OQkxQk+sjyRM38YiB9QV2qFObJc6ornMCdX5NihmPhCm + b2aMATJiZch8ipwEY5Rn8Th5ttJ36ovGDOCqfAo5/pYwgSspuOoLrNBaZofeKidMq3XCSK0j24Ij24Yj + Zpc7YW6JC+YWuRKMu4XeGC3wxXCuH4ZyJmE4LwhDWYHoSfBBUwjPL8gatcGWqAyzREWEGpURvB7GgIYw + NbpCLTAaYY5lUyywJUmN/anmOJVqigsUe+eTDXCG7f1Eoi6OpxjiIPvNtmg51pHbbw5VY2c0+36SNw6n + T8KBDF/sSHbHmlgnzAm3xNQQC7QFmqHc1wS5nlZI97RHircTkrwdkeTrhEQifqI9YolI3q9gTzX8JpjB + w9kMrs5WmODhCFdPZzi528PWWQ0LMQ20jTHMrA1hYklYGEBlpg+lqR6UJvpQEMYqXcifGsByyQAWpR5U + CgNYmBvBxloBR3slJrgo4e2uwiQfMwSwnQX5WyFwMjHJEpPYTiYLQ9jHHBN9hQFsAh9vU3h7qghTeHoI + A9hibB1gN56nmzVc3a3h7KqGo4sF7J3MYe9sCVcPe7j5OMPNzxUBEYHILMpFdUcrOoaHMWflWmzcdwTn + X3wD737+LT784a6Ej+7cxcd37uGTew8l3Lr/Gz75Zcz8/fjOI3xyR5jAv/6X0fsUwvyVILZ/x6fc9+nd + x7j9y+8Sbv0ijvPb2PGIWw/4WYGHj/HJI0KUxMfcHsNvEm79+is+JW4/eoDPHj7Al4/u4+tH9/Dlgzv4 + /O53uP3Dv/HJvz/Hx198gk8+/RC3PnofH77/Jt56+Vm8dPUkrp/ZjxtHt+Ct4xvw4fnN+PjiJnxwag3e + PrIQN3dPx7XNvbixuRuvbu3CS2vr8fySUlybnYsbs7PxInFzdiZujCTj4tQYnB+Kw6VZqbg4NwsnRtOw + dygWW3sisaE9HBtbQ7GhMRBrKn2xvNANi3IcMT/dBvMyrBmzrdEbp0IrNWh9FDGFnCDOClWxalRMUaM6 + 3hJt6Q7oy3HC1HxXDGQ7oi3JHM1xSrTEEjFGaI6WoTGa8YJ9uSFOLhnANSnGkvlbyj5RnKBAAYV1TowC + GcL85W8lRiuQOEWFRMkEJnisNJ5HRrwKmQliFDB1baoapZlWKM+2QWUOy0w1yqgVBUrE1PFJRsiLM0R2 + tB6yKOCzIvWQO4V5njGkRJi/KWJNYOb1FKMxAzhTJcUOMW1fZY4Y9WuGGqK2gCg0R0OJBZrKrNBSTT1b + 54ieJmd0Nzqjo94erTW2kjHcVGGDBua7WureCua/8gKxXrAV6ssY7ypt0Vxtj45GV3Qz3/e1uaOnzW3M + 9K1zQBshyuZ6BzTV2aCmmvGmkudSzfOoNUcT0V5rhp5qEwwR87i9vM4Ma2pNsIF5bhN5wTaWO+tNCTPs + ZF7cVskcVG6C9eIBq3wjLM02xPIs5s0cuYRlGQZYmqaPJSl6WJqqj+UZMmm9UWn931R+JkWO1alKaRTw + StbPsiwlFvF9YQDPz7NgnrTkubCN1Fmhv1aNqTzHUfFnC3Pr0jY1VrVZYlOzGtuank7/TOzh9r5GMxxo + ssThJhsca7HHyTYnnGmfgNOtroQoBdxwtMUFe4gd3L+n0wv7u72xS4wAbnbH5no3bGlww+42MSrYV5r+ + eSexlXx9Rwe3uwOwpzcYR0em4MiMaBwaDsOBoRDm68nYNzAJ+wcm4nC/Hw73CkzEkYEAHBwMktYC3tof + hA39IVg3EIH17D8bBuKxsSMR65sSsKY+ESsbUrG0NRtLuguwbLAUK0eqsX5WPTbPbyVapO3l0ysxv68I + vfVJaK+cgubicDTkBaM5NwjdxVEYrkvB/J58LJs2NoJ45fxGrFrQhFVz6rFydgPWzmvBOh5v8XAlBhvT + 0VEWg/7KBMzrKMCKqVVYRcxvzye3SUJXfiRaMoJQnzQJReEuyAmyI4e1Q02sK4YKJmNRTRDWNgVga4sv + Dnb54Py0yXhpQTDeXB6MN5ZPxIvzXHGmT4WD9Vo4TJxo0mP9M39Rr18ZssK1UWdcnjUBp4adsK2F7Y56 + dF6hHuYVG2BROblotRgFTF5aZ4y19UqJN21pMcfWZhNs4+tt3L+7UYGDzQocbRXT0KpwvtsUF8l3LpPv + XGtW4gV+9uUmU7xYrcANcrtrubp4LlsP1/PkuJavwOUcI1wQf3iyjZ5LN5TWAL7A8lK2HFfJIZ8rN8fz + 7DPPVqlxpdoCFyqZi9n+j5QrcaDECDt5vjtytbAtSxO7crSxn6+PCgO4yQrPtdnjeTH6t80Gz4kRwM1W + uMJ2erHFAqeaTXG4wRS7yRU3lYuHIAywMNOQMVKG+eS+i9lPlqeTm7FfbM4xxY58c+zMNSHYF7ONsTfH + GAeIg3nGOMxrOJpthBPcfyJfhSPFZthbYoatRSZYXaDE/GwDzEjXx4wMOWaJhygLLLCOfHo/48Zpxpxr + 9XZ4o8kaHzSb4xPW52dNhvic9+rzJh180yX/LwPYAj9ONcVXPUb4pMMQH5KDftBphH90qfAW6/yVNlNc + JRc+XUN+W2UmjUBewnocSdZDX5yeZAC3Mn42JilQl2yK6mQLaZSVWAO4ONUZucmuSI5zQBy1pjB7g8Ms + JPM3KNQEYdwOJ0cKj7RCaJg5gqmTAqmHAvwV8BejgCXj1wj+5KsBYkRwALcD/9sAVkkG8JQYC8TEqRGT + oJYM4MQUG2ka6OQ0O6Sk2yM1wx7pWfbIyBZwQAbzVnqW+IwaycwNmWL0b64Dsvl+epoFkqldxKyIKbGG + PH8xy4M5GskT+xivhyvsMFpuI00bvLjCHKsYy3a02uNAlzP7iyNjjB02N9liNet/cZ09Rqvt0M+43lLI + HMg4WJavRkmBJQr5Ooc5Iz1biUS2zZQk5pynBnAleWAN+WB9vBa5siZ6qNlGGXPXZcqwP98Qpyr0cbFa + G9eqx+O5inG4XqaJl8t08Rb71bvUhB82KiUT+HazEb5okT0F7z9xq0kfn7Qa4V+dpvh7twX+2mOFt3rs + 8HqPPV7pssENxuJLDcY4WauPo/V6eIbt5mirDMfaDHGi2QCnGg1wgce4TJ3ybIcBoYvLHdq40qU79h/V + gAo32Z5enmouDeK42UNtKhnAcogpoIUB/Arb1mti6ul2M/ylhdtsny/XG+Mlapzn6sTIQiMcokbbkGeA + Bek6bOe6GM4xpGajFm60w7IeL6xkTF424I8FfZMwp2cShlq8qBlMkZ8kQ26CPvITZczvJqgl328qZt6l + ZmgrcURHicP/MYDVfxrAy8X9rLDA2ko11lZZsrSUpn3eUGs9Nvq3wZr5yQZ7Wq1xsM0Kxxm3zlBzXWwy + xrUGQ7xaZyCZZ//g6w9alPi43RS3uyzweZ8lvhi0xkdTLfGPQQtpGb5XqQlv9NvgSo8NznVYM5aaYV8t + tWGdJXbWCO1uhe01/D3yhe21YvYvlny9q8aS4OeqzbGf5UFq4UNiCl5un6xT42yjNa4wRl3rcMANtskX + Ol1Y9xNwhdhdT71dqkJ7lj75DLV7shay2K5yktnOmb/zqUXy05XIzyAYpwTy0oz4njHrVEbupU+9Jkd3 + niX1rz2W1TtjDfPvprYJ2NHljt3dXthGbOzwxsomT8wstEUPdU4TOV59lJj9yZAcUYER6p6F5F4riHXp + 5B7sX3tyBEywO0eFXXmMiflK7GKc21Gows5ic2wvVWM7OdVmseZwuS2WlNljap4ajWkmKIpXIJXcMTZS + Lo3+jSI3jCVPzM5lXyu3QxV1XSX7YjHvdTbjf0qWIRLJZZIz5UjPVSGffbmUXK28xgFl1Y6EPcoqHJCX + Z4WkJCUiIw0QGqKD6HBDyQDOSLFCdrqdtOTmmAFsgfinBvCUKHNEhisRFaFCFEuxBnB0qBxRoYaIjRBL + 2CmktYBzGWdyU8yQGW+MVGr0tEhNFMRqoZ6xoK9AhVnFplhWbMI8wnrh/d1bwvxQqIuDJTo4Wq6L01W6 + 7CeauFKng1fYr97oNcXrXSZ4sUnBuEBNWSTDiUw9HEnVxTFe65lsMfOFEV4qU+C1CiP8lX3sfcaLD6oZ + 7xlP3i/Xwd/LtfFOpT7erDHEy8TVKj2c5b5jpdo4XKyNo8zhp5gHz1VRt5IzCgP4VKUSxytVOMocuqvI + VFoOZCH1/HCCEh2xpqilDihmjM5hrE6PNEHqFFOkRBNRJkhh/SRQ48YFGSIuwACJYq1f7stmfQqkRSiR + xHifIk3zrERyiEqCmPY5nogLMh5DIO89IUYRxwfwvgaJQQr6yAg2QE6wDPnh1A783UpqkNoUW9QxJ9Rn + O6EuxwVVGQ4oYN5IizSWpoGO8tOUpn+On6iFNMkAVqAo2hzl8dQxCZYojjNHzhQl0qVRwDzniDEksI0k + EsncTo7S53XqIZt9Ji+FOiKTOoJ5vITtrTBNj3pED/kpulJZTG5QyRxQn22O1kwLdKWbYSBVhaEEtoPQ + cRgK1MCCCA1six+Hi3kyvER+/lKRCs8XGuNSjgwXeU+vkcu82OyEF9pdca3VEZcbHHCOcetIoRIHc2U4 + lGmA4+Tv5zIM8WyWHC+RI71eaoo3qizwBmPO63XmjL/muM74cZ6c6ADj7LoCE8zh53oYdxuIav5WJb9f + ybZUlW6ASqKa11KTocdzN0BjrgG62Eb7ygjG7v4KYwwQ/eVGGCwX23IMVBLCCGb7FCOBZ7GcRyytM8Wq + BnKLNmvs63HE0aluODXdkxzSA2dGvKTXO9ptMa/IAB3JGihnfeQEa1CnjUdalCbbkjZSpuiyLxmggPGp + lDpNTAHdkCHW55WjKZ0cJV2BNmqTtgwF2tlGu8itBvOMML3ICLN5fovrTLCiUUxJTb1UpcBstuu5NeaY + W2+DWdRtM+od0Vthy7pge+bviNHH2VFiGmotxkVtlMRooyZKC20R2pjK+z+T+nFJhhqbqnkdc1Lw6q4G + aHg6a8BvggaCfHUR5s+gwMYdGcgA8xTCBI4IUCB0kgwhfmJqaDESmOVEYQjrI8hbF5Pdx8PPlcdxHY8A + Ty2ETtRFJDvPFAan2KixKRDCQw0Qwg4QxI4VHCxHcJACAZON4eyiCTsHDdjaa8BeGMBs7MHsJLFigfJk + NfJTrZBHAZ0XpoucgHEo8NdAXZgGehK0MIsNSDzRuJcVc5HJ7ZV+M/xjlj3emiFGHVnjdAcbTpMZdtea + YjvF6NYKJTaTUG8qM8HGclOsZaNdwgY0O1kXMxJ0MJKkI60PNJckeE6hJUaLbDBNTM2RbY36RBOUMJiX + UdhXJduiJsuNgtsHuUnuFPGTMbUhGUv78rGyPR0z8yahf4oNZseYY0uqGY4x6F8pt5dM4Lcout9rtsfH + TIhfMCF+1mGDj9jI/iqm8qkwwxF2yq3spCtCdTCXddFro4EhRw0s9NPGGgaNrUlWPCYTXYwaA7wfldYa + qLEZh7YJ49HvOQ7zJmliR7w+LpGcv0Vi8E8Kg0+77fF5ty2+6rLC112m0hN4n9Xr4Ha1Br6s1cA3jZpj + BnCPIR4OK/HbqBmwwPLpNNAsV6rxRJi522zw+x5b/HbAHg8PO+D+YVvcPWSNXw5a48F+YQBb4MlOC35O + DWwyBzawXGuFJ+sc8dsaV9xb5oyfFrvixyXu+HGFF75f4YmvV7jg32tc8P2GCfhxiyd+Ir5bPwFfrXXG + 7WV2eH+uWB9YgZtdJHg1GjhVqIGLpePwYp0eSZoMf22R470uY9yebo5vFlnipzV2uLfBGnc3U0gIrLPA + naVq3J1lgW/7TPCvWgO8WaSD5yiiLufo4WKBAS4WGfKYMiYuirU2OZ7t5navEa6SOF7tt5DW+jlHoXeW + BPSaeLppwBy35zri7kp3POJ1PVnnLF2jtFbyOnuW9vhtpQ3uCRN4niW+GjHBx4NyfNBrgPdJSt8jPuD1 + /LObSY74R48e3unVZcLUxktd40mUNHC5bQzPtmpQ1GngpXYNvEq81a3JzwrjVxfvE/8a0sOtEUN8NofE + ep4Sn89R4NaoIT6ZqY9bMw3xxQJT/LzWBb/vDwDOiNG0GcALmcDNHOCVHDx+KR0Prifj7tV4aZrnH07H + 4NsT0fjymQh8uj8U/9zuj/c2+eCdtV54c5kHXprljOtDFJy9lrhKMXa1VdSZDM+STF9pV1B0q3C8neSv + 1YqCWawdYoLtDLgHaoxxThjAs1xxe5U3vlnnhZ82uuPOJic82O6Kx/s88PiIF3B6EnAxCLgeAbw0BXg5 + mucaNYaXIvDkRgQeXgvGL5cD8eOFYHxxZDLe2+qBGwuscapHjr01mthSoYEDzeNwbZEZ3j/qh3+/FIKf + 3wnAo1t+wPfCAJ6AJz864Lfv7fDrN7b49XNr3P+XGr/83RL337LC/VescO8G8Rzfe94DT4QB/FoCnrxZ + gF9eq8YHZ/JxYcMULOr1QEWRtbR2T1yiBVKTbJCd5Ejy54iqWEe0xE9AT6Ib+pMmoDeZ20QnxWdToiNK + p1iRgFBsRTB5x9kw6bqhIscXtQWBaC6PQFd9AvqakjHQkobB5nRMayNEbOnOxhwx5fOMEqxeUIltK+px + YH0nTm2fhos7R3F56zBOr+7AM/MrsH8wHsc6fHGVpPvNaQ74dL4Tvl1qj7srHPBwnQseb2K72G6H3/bb + 4NfTjqxXN17/JDz4NAwPf4zBk/sJwANhAKcCP2UD3xYDtyvw6J1SfH+9AO8/k4VTsyKxotIbg6nW6BB/ + qCbzutPd0ZztxyQ8kUnaD1W5fijN8ia5cKN4dUNGgjNSExylabgSE52QKEpCPJUtkMz6S4y2RVyIKWJ8 + 5UjwInnypihgrqmcrI+mYEO0h8vQF22M4XhTjCZbYh4F9axUO8wUI61TXdAzxRo1zGUFzGv5vtrI9qaw + 8NZEtp8OCoOMUBphivIoNYrCSeyY45J8DDHFXRcREwwQ6cGc5WuG2EkWiPQRBrAMAS66CHDSQZirLqI9 + DBDjzvzmoYsYN13ETtBHHBEvjGAPGZI9SRD5vVQ/E2QEqJEeQOJIJE7m9fiJaZ6ZD32MEDmRZNyPpNxX + iVBPOYJ4jEBXfckIDvNRIHqyCrGsg7hQ06cGsJhSxgCpJO45YvR4rAJlzJNlwgwOJ4kL1UVhmA7yQ7SQ + EzgOWQHjkTFZC5mBFFMkqwVhZsgP4/WGmEnIJNKCzJBCJAebIimIRDZQjAgWIKFlzo/30kGajx5KWGe1 + 4Qq0sM4HKBaEAby2wgn7q50p8pxwljlNTJF1plGFC81KPNtugpcHbPH6dBe8RFwdtMfZPlsc67bBoS5r + 7Gw2x/pq5l+SnXmZFNLJehiJ18O0aH30h+ugh9fREaKNlkBNNAfrSNN5VwRqSyZ+7mQdZPuTD7AdZP4B + Qa79tZH59P0SkuzKcCPJBG6i+BIjuTpijNGdYIyeOBnao7UJTQwk62M0S4WlJVZYUUEhX26DJdxeRjG+ + otSG4tsOy0utMSdLgWExZTR5x3CKGP3L86YQXFhqhkUkrktJXJdRCC+hCF5IrjGXomROsSHmE4sofJYW + G/GYxjymEstLFDymAiv5uZXVZlhWxWNI3yHJI1EVRG8262a0WokZ0hQ1CgyVyTAspokmKZxJYjpco8S0 + SgUGSnk/eNxBllOL5ZheLMMoRdFiCqlNLWocHHTEyVE3XF7gg0sLvXB2tguODtviYL8ae3rMsKObwrZH + hR3ELr7e2WeGXQPkS30qbO1VYFO3ETZ0yLCqRR8LKsdhVul/G8DGWNSoxKJmFZZ3mmFltyn5jwqrWxTY + QGxrMsbOJhPsa7TEjnIzrMmWYzbrfChkPHp4L9v8daQRwBWTDVA+2Qjlk1Qon0hhM/H/vwGc7cq27i5D + KftZjZdKMoA7vM3R722JaT6WmOlrjVmTbTFrkg2mT7TAgLcKvb4KdE8i0fYj8WZfb2QsqfHRRl2AHprJ + q1qFUcR23ZRshuokcjyK+MpMnkumMGVMCTHlmHhtgYosNWpybVCdyxhTQC5YaIfaYgdpVG9Bikoa7Zsd + L0dGrAEypGlhx5AVZ8RjWPB7YyMAGooc+R3x/TETuDKb71F01edZorXEFr2VjphW44jpxJgB7MT24YLZ + JW6YW+yB2YVemFXkizllgbwXsVjeloa1PXlY2pSGgfRJqA22RaW/OSoDzFAhZi1gHy9nn68kaoMp7vh6 + ONQMSxkHt1JIHkq1xMVMK9zIs6IoU+JCKsU12/qxVBkOJhlhxxQ5NoUZYXsEeXW8C55J8cSRNC88k+GD + 3SluWBfnhJnBJmhj/VZ76qPUW4kcTytp6mcx8jfRxxEJvo6I83OUzN9oPzuE+9og0NMCPhNM4eZkCicn + Szi42sDexU4qrR0toLYzgYWNAubSGsAymJobwEQYwCa6YwawSk+CkVJXMoCN5CxlOlJppjSElYUx7G1U + cHZUwsvNFJPYVoInWyIs2Ia6xB6hLIP8LTF5ohn8fcwxmZjkN7YOsJge2tuD32Mb8xIGsIf52ChgCcKs + toLLBPWYCexMuHKfpwPcfFzg7usKv+CJiEqKQVZZEWo7OjG6bCU2HziKizeFAfwNPvz+roSPfh7Dx/ce + EMIA/hWf/PIIn9x9hI9/5msJj/Dpnd/+Fz8//h/cvvM7bt/9DbfvcZv4YyrpW/cf42NCmMAfP+CxiY8e + Eg+4X+Dh72N4agB/8uuvkgn8yaMH+PThA3z+6D5xD589vIvP7v/E3/gBn//8PT779kt89uUtfP7pv/Dp + R+/gb68/h5tXT+D5k7slA/gvx9bj3dMb8N6ZjXj35Fq8fWw5Xj0wH9d3zcCNbdPw6o5hvEj+cmVRBS6O + 5uK52fm4MTcfL83JxY3RdFwaTsTF6Um4Mi8DVxbm4tyCXByamYzt/VOwuSsSm9rCsKEpGKsrfbEo3x1z + MtwwyrY4muaBkVQP9MQ7oyXGjkLYEjXRVqgm16qgdqqIsUB9ki0GCj0wyu/OrvSh+HaSDODWBBW5mxKt + sUb8rlgjnPEihog3QmOKUhoBXCGNPjFGET+bz9iRHSOmkDNGcrQCCdFKaV028cdcYqyY5YRcgJ8Ro4Az + 4k2QI0YBp1mhNJvxLc8Blbm2KBVrr6WbSVNEFjOGFLC/5cYx3jEfZkTqShBTTI+Zv0qUpqqkaaKF+Vsq + zifThLGDfTvHlHzLlHHJAnUCheYSGkrUaBJ/+lc+NYCbXdDXMgF9rS7oEiZutS2aKmzRwnxeT61aUahG + cbYJyvJMUVFghhphBPP99gZXdDa6oKPBGa0NTmjhsRpr7NBESGWdPRrrbFFbY43KGtZzjQVLC9QwxzVU + mqK1QoXuKhXzlxnm1TH31ZphNfPcWmECVyuwtZZ6oc4c25kXtwlzp8IU64uUWJk3ZgCL6b1X5SokrMxh + Ps1kbk0dM4HFaOCVqWLdX2PJ/BVYxbpZlc7vZ5JrZCqwIEOJedkqzM+3YL615nnYYbDJHkONthiqUzO3 + mmNeoxkWt1hgZZsam5stmcfUY9M/N6qlEcr7G0xxmOUzDZY41mSL400OOC2muGNdnmmdgLNtboQ7jrW5 + Yq/4I7rdDbs6PLGb2NHmhW3NbtjcMIZtTR7YKsELm4l19W7Y1MTPdUxmfg7CkWlRODIciaPTwrkdimND + ATg6NBHP9DPu9njgcLcXjvT64digP98PxL7BgLGRwkPB2Dwcga0z4rBteiK29SZiS3siOUES1rWkYkV7 + FpZ152HZYBFWTq/EhtFabJnTiE1z6qXt1TOqsHRqCYabU9FXG4fO8ii0FYWhozAUA5WxmMkcs6A3H0uG + y7BsVjVWza/HmoWNWLugEWvmibIF64jFwxXor09CS1E4usvEyOEULOopwNL+IszlOYzUpWBqZQJ6Cnn8 + 7GDUJ1MDJXqhNsEDLcwvM0uDsLwpHOuaA7GpkfXSRP7S447LI954edFEvL7cj+UEXByywNFmXRxr1Gbd + U9N3GePZAQs8O80Gz4444NIMF5ya5oQdrebkXcaYX6SP2eIhxCIxEtgASysNsZIadXWdkvdAxZjCdlen + wPoqOdZXyqUR6nsbFXimRYmTrULnEk0ynK0zGJtqlTzoZqMJXiRXu04O9myOHq5k6uLZbANczZFJRu85 + 8tyzGWM4nz6GCzlyXC5Q4JpYN6+aeVcygNW4xL5zllzyBHnhM2XG2FdkiF352tIo4N15ujhAjnec/O9i + E7/Taovn2olWa1xrsZJwpVmNi61qnGgxx0HyxZ3VJthQSr6aqYf5afqYl2qIBczrS9hflqcrsDpTiU3Z + Ywbwjlz2wUxjbE+XYXemHPvIdfdnkQOwrz2TIcPRTCOcyDPBETFNdLEpthWZYA258JICYyzm9nzun1tk + Tt5rgU3kzodqHHC23gnPNdjiTWEAN5nh40Zj3G40wGeNun8awH+sAXx3yBw/DJrgiy4ZPmrXx7/aDfF+ + p5hFTYG/tLGeW00kA/gc44QYabilzFwygIeTdNEbp4fOBBlaGD/rGZ9rk01QxZhekWSFkkRb5FN7Z8Y5 + IHGKDSIjLBAcYo6AIBMEBqskAziUGiks3BzhkWppOyTYDEEBfJ+aKNBfCX/yVGH8BopRv9RIAdSYAUH/ + bQAr+V1TTIlVIzbeCrHkVcIAjk+yfgorJLAUSEyxRkq6jTQ9dBr1a0q6NZKZF5LTLJGZY4/cPEdkZTsg + LVVNTcx8wjyUEKVHbkmuTE7aRJ7YT40yvdwOs8qsMK/UAkvJs9fXktu32+NwjxMOdTpgd4sNNjaMLVGz + pM6O+c4GvcVqtOSZk8eaoTyP3DBfjcICtTQ9bQbvfxLvcUqKwZgBnKSP6mQD9ksdNCRooi1RE72MtbPT + DLA51xiHCuU4zf5zqUZnbAroKk28UKGDVyoM8AY1y9/Yp95nX/qwzhi3GuX4vNkQX7bK8VWrEb6QYIzP + Ok3wUY8a7/ZY4W0x/XOPHV7ttsPLneKhBnOcr5HhGI95qFobhxoMcLRFjqNNBjhWp4sTNdq4UM++1qKH + a+16eK5TF8936+J6rwFeHDDCS4MqvPzUAH55wAQ3e5V4ie3txU4ZbnYY8TcUhBKvdZhIDxe83KTAjSoZ + rpTp4RJxtkwfzxSx74llezK1MU8YwBl6GGZOmsl+O7fRDku6PLCszxeLe30xj5jdMxEj7V6oyzdFcaoc + BYn6zOkyaZaOunxLNBfbo63MEa3UDe3Fdugssnk6BTRzUJkF5ldZYXGlGssqzLCK2nJsqmdbrKsSBvDY + VLxray2xod4SW8TU1G3sZ+1WOM74dpZ67DK11/UGGV6tN8TbhGQANxvjI+qyW7zG27zWTzpV+Bd137u9 + Krzdb4JX+81xvdsclzvMcI7HOVyrxF7m5t01T2fj4LlsqjDHJp7DZp6fwBZub6syZ3wR00UzHnD7gDBs + +FpMz36c/fNMvTUutdrjqvSgihPhjBsdLrjU7oKtlWaYma2PplQtcikNZCaOQxrbWVaiASFDTpoxcpm/ + BcR2NuNVZjK1FN/LjNVDLlGeaIj2HGpi8fA28/nKBkesbXTEplZn5jwXrGdeXtXoiiViOZ0Ca/SkmKE5 + ToGGSDH7kwF6440xI40aPMucfMIcazPMsDXLAtvJp3aQA23PVkoPxWzPo07OV2F7AeuDMW5bqSW2st+t + J49Yzn44r9gWPTnUcORvebHkglFyxBBjBrAccfydPwzgylpHlLIf5peyv+UZI4lxNZ4xOZn9Li1HhZwi + 8i/yrbJqJxRTBxaU2iKH7SaFx44hDwwP00NwkDaiwsYMYDH9cw5jSE6qvTQNdBLjT1y0GX/fXEKUmJVA + TE0frkJ0mAJRoUaEDDERMsZCBevdVBoFnJ1kggzq1JRIHaRGaiF3ihZqUgzRm6fEKK97SYGKfEyFXYwz + e4sVzEOGOFYuw+lqGfuoPs5WauJiNft/i4FkAr/CPPkCY/2zVca4UCzHGebCY2nUlMSZLENcKZDhxVIj + vFJqiLfK5fgH48V7lTK8W6qHv5Vo4+1SLbxZrofXKg1wo1IXV4iz5Vo4UaKFYyU6OFliiHMVzIPkixer + xgzgkxVKHCeOsK3uKTbHOvK9xdTz0xNN0E4+XhNtiiLWRQ6RxlidMsWMvN0UyZFioIUC8SFGiA2SIU6M + 3hXTPbPOsqgZMgmxncRckRJCbi9N9axEImN/fJCC3zFGTKARpgTIERtgiBh/Q8RO1kN8gAFSgg2RTe1c + GEHOHqFCaTg5uxiEwhwhDODaNDvUZjqiNscJ1ZkOKE5mDuB9jQ3URfRkbcRM0kbCJJ2nBrAxiqOo6ePI + rZlfxDTSYjrpjHA5ksL0kRhOROgjPlIfCYTYTqaOSBWjuuMNkcf+U5RB/ZItplo3RkEa95E/5yTp8D1d + FDFeVZAP1GdboCXDAp3sG/3UJVP5XWEATwvSwMJwYQBr4lyuEZ4rNMHzhUpcZTw8T75zscAQ1xizXmq2 + xwttzozf9rjE3HO20gLHyOWfyZfjEHnIsVQdnEnlPWXbv8HjvFyswmuMMa8yZrxCXfAC8/tV5rKzPJZY + amJtoSnmkGf05MrRwN+qIcrT9VGRqodKQpQVKbqoTNeVpoZuzDFAK9tXR5EMveVK9LGd9BO95cboZdlT + aYS+p5habYwh8rwZ5FRzyeGW8PdXUgtsJafa0+WIZwZccXyaB04Nu+P0dM8xA7jDDrML9dHGuFUapoFs + 1ouYhjldMoG1kcHYlJcolx7SLWPcEuvy1qfLUcf6bkw3QjPjWQvjWku6MVqpWTrIs/p4TcPFxhjl+S2k + FlpCrbGA+XNerRidbIr5zOMLmu0wj3pjdrMzz9teyuPlycwxsbrIZ3/Nn6LDbW0Uc7s6ShOtEdoYjNLH + DMaNxRlqbKz2wMk5KXhFGMA+EzTgS0z20kLIJDkiSWz+2wAW5m8Y94dMNESwMIB9ZQjxNZAQSgT76MPf + Uxu+rhrwdtLAJLdxfE8XkeIJCjECmMFFGMChIXokUrokTIYICJBJT9D58VgurppwchkHB37XSRzDTwuh + bOCxMebITLFBXqot8uLMkB8pQ16IFgqDxqE2fDy6E3UxmkWBJ4IRSfIpJu3ne0zxl+m2eHGqHc6QOOxr + tMLGMhOsZuNcycC9Ml+BFSTbK8TrYhMsYzATT0KO8FhDcTqYJh1ThVl5aozmWzFZ2GBqgS36KdLbMqxR + Q/Fem2jBm+iIumxhAHuRILmhPGcyBhtTsXygGMvbMzAt2w9dkZaYzk66KsEU25NVOMrAf5FB/DoF+KtM + nO+wQ7xPQvwBReW79Wr8hY3+uVJTHGPw35NsjK1MTGv99TDbUQPzXTSwmvWyMcQQOxLMsY3EcTkD1qAP + G76lBqqIRnsNtLEOB/jZVcHjpKc0b5Ik/LXeDu+zI37YbItPKGI/JTn4tNEQt2q0cKtKA1/UjpMM4B87 + dKURwA+nKfB4pikwzxJYZAUsVQMrLfBkHbe32QKSAWyHXw/Z48EhO9wT5i/xSBjAuyzw+3YLYKs5sJnY + yO/ye082OOH3DR64v9oNd5Z74KflXvhxpRe+WeaOz5c64osVjvhmnQt+3OKBO1s98cOmCfj3emd8udIe + Hy+yxD9GTfDWVEMGE01cKNfAs9UaeKVVE3/pYJLoNMQH/SSQs8zxzRJL/PzUAL6zWY27G81wd7UJflpk + ih9HVPi6ywgfSgYwCWK2DgMWE1CRES4yMV0sleNKrREJJMVYtxj5q8S1qWo8x7Yk1rA8Q4F3rFyHokwX + NwVxGrHHD4vd8WClGx4/NYGxzolwANY74slaezxaaYt7S+3w3RxzfDZsjI8HDEm49PBP4qNefXxI/KvP + AP8k3hvQx9+m6uMv/dp4qXcciRjRMw43WL5IvMbtN3vH428D2nhvUBcfDvH7xCfDerg9U4Yv5hnj64VK + QoUvuf3lfBm+WmCEfy8xw888n9/3TQJORgGXkoAryXjybCoeP5eK+1fj8fPFKfjuTCT+fSwMXz0Ths/2 + h+GjnYF4f/Nk/HWNF95YPgGvLHLBi3Nd8Px0F9aLC57tscfldnNpqtfLFMIXmihsSe6PNRjjGQq8Q02W + ONBgjR2VFIis2/1M7OfazPDWqDNur/Tk/XbHTxsn4N4WJzzc6YTHBybg8REPPDnrB1wOAG6EAy/zfF+O + AF4RiAReZcl9v70QiofPh+Du1RD8+2QAPtzlh5eXOOMMCewe3t+NJZrYVqmBE1ON8fo2d3x6KRDfvTYR + v3zggyffCAPYDU9+csZv3zvg0Tdsy1/Y4sFHVvjlH5Z48Fcr3P+LNX55yRr3rtvxdzzx+MUgPH4lHr+9 + nosfbpbhr8czcXxlKOZ2TZCmT0pNt0RysjVJmFjzxRnlSRPQlOaB7gxf9Kf7YiDdG/1pPugjuvm6Od0L + FcnuKEp04efdUJrjg6aKMHTVx2OwNQ1T2zMxvTsPs/qLMGewBHMGSjB7oBCjfXl8XYgF00uwbE451i2q + xvZVDdi3vgPHt07FuW0jOL9xKo4tbca+QzPnuQAA//RJREFU0ULs6Y3GiW5fXB90xnvznfHN2gn4eYMj + Hmx2wO9bJwDbXYHdDngsDOAT7M+XXHH3ZR/88n4QHnwdjcc/xwN3EllfKcD3OcDXpcCtWtx9qxK3rxTi + ld2Z2DUUgdESb7SReDYkOaA60RmlvP4yXmtJxkQUZE5Efs5E5Gb5IpP1kJXqhbQkDyQnuSMpyQ0JvP74 + JFcKYlckie3kCRTMLpgS44DIUAtETFIh0odE1VMPSR7ayPXWRvkkPdQG66ElXIbOSDkGmB9mpNljVoYL + RjMmYDTTi6TeBTVBZijwkyHXVw/pnlpIcR+HZHdNpPsZIC9IhcIwC8ISWYEmSPA2ROQEbYS76CHKg2Td + zwyxEy0QLRnAhvB30cUkB20EOWsjxFUHYS7aiHAlAXfTQdQEXcRMINnj5+L53QRPEnpfFZInmiB1sjmS + A8yRQiT4m5LIiZHFCkT6kYBPMkG0H4m5MID5PckA5u+MGcAkkv4mTw1gnl+oisTUmKTTAGliHVzm1qJY + JcpiTFBCgVFE0pcXqou8MB3khGgjM5BCarIGknzGIWWiLl/LmT8pTHi8bCIr2BSZoWZICx7DnwawmBra + X0nSaoz4SQZI9NZBhp8eSoKNUBvxhwFMIpZni9Ul9thT7oBjVXY4VU+C12DJOGmCy62meK7LgoLbDq+N + uOLlERc8N80RF6c64sKwK85OJ5ma6oT9XfYUtRZYUazEggwDzEk2wKwEQ0yPM8DUKSSbkQbootDpiNBD + XZAWSiaNQ/5ETRT481pJsHMCKQJJ1DODZSRfrJNAfeQG6COf7xfyvVJhAofJUBNuiPoIIfZkaIuVoX0K + iSFJUUvEeLYTXYp5sea/FVZWOGBFpZ00EngFsZJCbU2FPUtbad3AEQq0YfGwWDrPNVeBBcVmWFxugcUU + cYtJXJfUqLGIImQ+xfLsEhlmkRzOLRRrBJN4lRhhSYkxlgkDuFQ1hgoTrKBIXkmSu7TGHAv4em65ArNI + UOdW8hjVKsysHDOBhyh0Bsv4+xRSI5L5ayRNZTPA2NpfJEdvoXhKVx/Tig2eGsAKbGy3wv5BJxyf6Y5z + 831wdq4Hjo044uCAFUmtKXa0KymQyTU6FNjWocSOLiW2CzO4d8z8/QObmTdXNuthHnPvzGINzC7TlNYA + Xsh8ubCBRPWpAbyi2xQreJwVzQqsJTYwF2xtMMGeRmvsrLbE6lwKbdZ5X4AGegN10BHwdA3g/4cBbIly + X+v/GMC+ahR6KpEzgcL/6QjgIvaXch8lar1N0eBpgjZvc/R4WWDQyxzDXmpM97XEsA9f+5ig11OBbmEA + T1agc5IYBUwC7qWLWnLeBnKsFmEAU2w1k981JJigjiK4nsKnKtMcpeJp7hQFRZEpiimEStOFIWyOymxh + 2I6t51uVb4PqAop6bmfFiz8mDJEZZ/j/agCX8BhV/N4fBnB9sZgKWowipgDk9+vyLNFI7tlWbEuhYoeh + Gvs/DeCZlS5sG4xvJR6YXeyF0SJfzCr1x4KaKKzsysSGaSXYPL0Cq7pzMZgbiJoQG5SJKbUnU3AG8vzZ + t0uDTFAeZIoqvm4IVGGA2/PDKQpi1TiQbIMrufZ4pcwZL5VY4dlcFc5mynE8wwiHKWJ2xxphe7QCu2Ms + cDjJEUeSXbjfBc+ku2Nf2gRsSHDAsL8c9RM0UeIyHoXucmR5qJHmZYcUX2H+OiCOiPGzxxQi0s+OGsKa + +kGs/WsKFycV7B0sYOOohrWDFWwcLGFpbwZLOxOonxrAZv9/DGDj/2MAG8t0Ya6Sw0atgL2tCVwdVfBx + N0Mg21NkkC2iw+0RHemI8FAbBAVaIkAygAlfs/8PA9gU7pIJbPHUCLbEBF6fi5ulBGECO7tZw83L8U8D + 2MvfG8HRoUjOyURpQyOGFizG+j2HcOHF1/H321/jw2/v4l/CBP7xLj766S4+vnufEFNA/4pP7hFibeCf + H+HWT8TPD/HpnV//F//HAP78zu/4XIwAfopbd37jMYhfHuPjX34jfsVH93/Fxw9+w0cC3Pfhg8f46OHv + hCiFQczPPxLmLz/38AFuPXiA24/uS/j04T3cvn8Ht3+5gy/v3cHXP36Hr775Al9/8Qm++ORdvPfWDbx+ + 7RReOLUHLxzbgtePr8c7Jzfgb6fWS3jr+Bq8fmQZXjm4CDf3zsPLO0dxfV0f41M5To7k4PLsAjw3twA3 + 5uThudEMXB5OwcWRZFyem47LC3NwYVEujsxJx+5pCdjaF41NHeHY0ByKlVUTMS/XEzNSPKnjvDGU7IfB + lInoTZ6IjiRv9ms31JNX1CU5oSLWEhXUl00pdpha6oW59f4U2BMxVOCIzlQLtCeboT1JhfYEBdrixcMh + RmiJlaM5kfkv3ZT6zxQVwoBNUqIwQYVcscbvFBVSmYeTohSIjySimUP/NIBNpGmg0/i5tDgTZCeaIy/N + BiU5dqjI4/nk2qE4wxIFjDH54pjJSpZGyPk/BnBenFwyfkVMKhVriqcIE/g/BnBtDmNWHuMLUVcopq9X + S6N/BeqKLNBQrEaTWDeqxmFsFG+rGwbaxRq/LmivdUBLlQM6G9zRUjMBNYw/ZbkWKMlWoSyf8aLEEnUV + tmhtcEVrvQuaa4Xx64CGanvUVzFuVVqjvtJmzAiuYzyrtUV1rQ3KGffLqhjTmR+rqMUbylivzHP9NeRs + deZYWGeB5dWmWF1jgnXMdxu5vbXWHFuZF7dVWWBLhbn0h6OYYnZptux/DOBVuUqs4uvl6YaS+bswURtL + ySFWpsmxIlmAn081xqo0av5MMS24EeakEZkKzBMPeZfbYFot20CTA6Y12WFanZrnZIY59SZYSA2zotUc + myQD2FIygPc0WkjrEx+qN8ORRjMco3Y/xtx2vJH8p9lBMoDPtbnhXIc7znd44niHG/Z3umNXpwd2CPO3 + wwPb2jyxtcUdm5vGsKXJ4ym8sKnRC2trXJg33bG9bRL2dAfhGfLrI9PCcXxaGE5MC8GpaQE4OeSHo70e + ONI9AYd5/GO9PjgxOBnHpwfi4JA/9gxNxvbhAGwbCcP2WbHYNTMROweJ3iRs70xhPs/Aup5srOrLxcqp + hVg9vRwbR6uxdU49Ns+ulbbXj1Zh9UgZ5vfkYGZrKobE7EM1MRiqi8Xs9nQs6S/A8mnFWDqjDCvmVGLN + wnqsW9yADYubsX5hE9YvYrmoCUuml7F+k9BdGY2B2jiMtqZgGbXM6uFSHiMfC7vysLAzF3Oa0zGzIRkj + tfGYQYxUx2BmTTSWt8Zja38KOUkUtrT6YEuDA/a1s64HqEXJZ24u8cIrS9zx7AwbnOqQ41SrAeveCFd6 + TPD8oBpXBy1xeao1zg/Z4+SgPXa3qaUHDhYW6WNWrjahKRnBi8v0sYwadWWNAqtrVVhbp8Iq8bpMhtXl + cmwhn9pVr8ShZiWONhvhZLMcJ+r0cbJKB2crdfF8vQIv1qskA/h58r2r2Xq4mK6Nyxl6uJSljwuZhjiT + aYDTGYaEAc6QQ55huz3LNn1ejBAuMcPVSktCjStValwklzxHTniq2kz6M/twqQL7ivWxl3xyf7EMRyqM + cbrOVDKAL4tpn9tt8OxT81eUV1qtcFEYQi3M62yrO6pNsL7UBAvS9aSRvwtSxTrp7FPsH8IAFg9NbMii + Vmfs2E6uuyWd15yqjx1phtjD89ybxt/l64MpYh1HIxzNUeFIgRn2FY0ZwOuIFcUq8ltyYvLhedy/qMgM + mxk3niGHOV/viOebbPGWmAK6yRQfNxrhVr0ebtdr/2kAC+P3TwO43wSfdRjgw1ZdfNCmj390iCW0jCUD + +OVWE2kK6AsNahytY/+ssPjTAO6J02PclqGJ8bOWqEk2QUUSeVwiOWS8FXJibRmnrREboUZosAkCyIkm + +ysQEKiQTODgEDENtCnCIswRzDKEGlIYwEEBpgiWjGAFuYISwdRKwZJxzO+FiO/+HwM4zhKx8TZ/GsCx + CQJq7hcjg8cQG29B/StGB1sjKdWG+MMAtpLWCM5hbhgzgLmP+SMuyhBx1C3p1C+ljPtNjPcDxTaYUWZL + HqjGghLGUjG4RYzabBMP2tpjP8vt1FhrGG+F1lhYbc3PW6IrzwSNjIPVWawfxvlSoqhAjQLmjKwCc8mE + SsugZkwxZK6ToY4xtSFFD02JWsyPmuhP1cFctuMdxSY4xph+rsYIV+v18UK9Ll6q1cHL1AevVsnwepUc + f2Xf+UeNMT6okeGjekN82iQMYCN8LdaAblXgq3YTfN5tgY97rPButzXe6LHGy102eKHDGjfaLHGpUYVT + lfo4VKKJfeVaOFCnhyPsf8caDXG0RgcnK7Vwge3ouRY9XGebeaHHADf7DPHSgBw3B4UBrMDNqSaSCfzq + UwP4pmQA8zPthpIJLBnB1EMvsX8/XyvDpWJdnCnQwqkCTRxluTdHAxszxmFZ+njMFQYw+/JwvjFmMj/N + brDDgg5XxjIvzGOMn02McnukzQMNhaYoJ38uZj0WJhlyW0Geb4Fm5tfWUuZc8v6WAubkAt6TfAv0M1eP + MBbMZZteWG6GZRWmWFVpLhnAm4UBLMxfoaUYH1bX8L4yV25kP9gpBly0W+JEmwXOtZjgarMxbvyXAfwu + +9sHjXL8q8kIHzcpcKtFmMEy/JPX/W63Ed6mzhOzG15/OqvBGbF0T6UMeysMsaNCjk0lcmwsNsY66te1 + zOXrRV4mNnJ7M/P59krGDW7v4r59PN99khHMPMkcfpL69nyzLS612OLZVgfCEdfanHCe5foSJYYYJ+uS + NcilxiE9fhxSErSQnkDtlEjNxPiUnaaUILYzko2QniTj+9RUsbrkXvooS6S2z1Khj3U3q9yS2tcGy2qs + sYp5eTVjzvI6G+pyO9apHYapr3qSTdEa+4cBrIfeeDlG0xivsi2wIkuNNdR+m7LV2JwpjGATbM6iLmZM + 3JprwvhIfkI+tKWQ111siY1lVlhdao1FxexX+dZozzLn+SjIB+VIjJL9jwEcL9YFzjFHSbmtNAV0Ifts + dqEJUhm7Eti/YpMNkcjYmspryWB/zGPfLi53RH6JA7LZRlLJO2NjZYgI10VIsDZjkSYiQv8wgG2Rm2mP + 3DQHaRroJHJcYQBHR5phCiHMX2ECCwM4MkyJqNCxqaBjI4zGDOAEM+SkWEizrqaR7yZF6SI1Ugd5MbqS + AdydrcCMPHIo8q7V5GLbyMmEAXy4lHmIOe9CnQJX2cYu1eoS2rjepIcX29i/WuS4Xi+mbjaSDODz+cyd + jBvCAD7NvHgpzwDXi/k55uO/lBjibxVsj8y377D/vcl+90axNl4v1cHNMj1cK9PGpXJtnCnTxKkSLZws + 1uG2IS5Xsc0yV16q/MMAVuB42ZgBvI91vDHPHEt4L6cLXi8MYGk5NFNkhZshhXWTzHpKZMxOjBj7jy0u + RI6YIJlkAotpnIXpK8xfYQKn8vMp4nuhJtJ0z8L0jQ00kiCM32h/GaImGyImwBDRYmnVpwaw9J9duAKl + /J2KaFNU8req+bvVzBM1idbSNNDV6faMx/aoyLBDUQp/L1bJczHgsXQR56+LRH89pAUZIDeMnJ/frYxT + o4p5pTTWHAVRTw3gUH4uTI/Xooe4SP52pD7i/zSADZEdL5MM4EL2p+JMAYU0JXROkj6y4nWQE69L/SFD + Od+vzzRHS5oFOlPM0c92MRAnQ3/4OEwP1cDi6HHYSS5wJleFK/kqXM1X4mKOHGczyXvyDfA8+/5L7PMv + sY8/z1LwmbOMZyeKjHE0T4bDjKFHksbjROJ4XGBeeZbx9Drj6UulKrxQZYob1ALXqAUuMI6cZAzZXWaO + NeQUc8gzevi5hjyFZACXpemgPEUHFclPwe3KVF3UkW815sjQnGeI1kK233IletguhAncXW6MLpadbGvd + lcaSEdxPDLLdTed7cyoVWMS4upJxdQu5lFjr92Cv09go4GF3aSTw0SE37Oiyw2i+HlriNFASooHsQA3e + 47FRwFlT2HcSDBn3FaxL6jPqjqo0GWrJperIpYQB3Mh9TeRezYQwgduyjNDLaxpinBWz+S2oZUyqN8U8 + ctH5LOczjy9sssHCVuYbxs+5ra7UL47MHeaoSpVL0z4XMiYWxuqhKE7n6QhgTbRF6WCQnGEm+/WiTPaH + Gk+cnJuCV3Y3QGOSpyb83MdjoocmgifKEB7wH/M3PMAYoZONpP1BfmMGcKgvSx8BYQDLpBHBwT56mOTO + 47iMg7+nFsInsdGysaewYSbHmyE2WsGApYeAydqYPFkfkyYZwpfH8PIygLunDtw8tODiOg4uE8bBy0eL + JEyBKdHsbIm2yEy0QQ7Fen60CvkRBigJZbKI1kV3CoM2A/KqUgtsZcd/hgHofJsKz3Yz2XRa4mCjlfS0 + 0oIsOWaRwMxmBc1lIp6XZYx5OQrMZyCbm6XAKPcPJepjgJU3lGSA6RkqTM9RYzjXCkO51hjItUFfLgUz + CVlTqgXqEy1Qy85akWSHggR7ZMc6oSRzInpqE7CwOw/z6pOYYDzRFGyOXgaJ+dEmWBljhC0M/oeYHM4w + yV8icb5RbI5XyyzwFyZ48dTDTSb8qyTMJ3LNcDjDBAfiFdjNDr3WWwsbfDWxPVAXO8NJxBNMsDuVSSpG + iel+Oqiz1kC1lQbqWTbZaKDLTgOL/DRwIFmfAdMCr5Hwvc0E+A8SiA9qzfCvWiN8KBZYr9LCJ1Xj8UW9 + Jr5t1cbPXfq4R8L04E8D2OpPA/jJCgtgnQ2w1Q7YZYvf9trgV+IhcX+fFR7ss8SjvZb4bQc/u42f3Sww + ZgA/2WCDJxud8ftmbzzc4IV7a7zx0yoffLfMA58vdMHH82zw8XxrfLbMHv9e44wfNrrh+42u+GqtPb5a + ZYsvltvgk0UWeG+WAm/06+JGowYDiwb+0j0eb/Xq4u/9hvgXz/mL+eb4dpk17qyzxV1hAG+yYGmKu6uV + +GmRCj9MN8ZXJHyf1FFIlOrjxTw9PFfIxMQkJhLThTI5LrNunu80xfU+czw3aIHrw/Z4YfoEXOt1pNhS + 4XCJDo6VauJakxx/G7DC13PFqGZ3PFrljt/XTmAdEeudJAMYG5zweJ0D33PEj/Mt8eUMFW4PkXzxfAVu + DfBcBAZl+Jj4cEiGD4Zl+Ns0fbwxpI1XBjXxylSC5WvEW1O18Dfuf29YFx9N18etGfr4dEQft1l+PluG + rxYqWacqfL/cVCq/Wy5eK/D9SlPc2WCHx3t9gCMheHIqGr+fnoJfz8fivjTiNxxfHxdTKfvj1p6J+Hjn + JPxz22S8u94Xb60S4toFL8y3x3OzbHF1hj2uTnfFswx+VxgQL3VY4VIrg3STMc7UGeBErSHFnhEOUUDv + rxPrh1hgOwP6liI97C2j4G1W4c2ZDri93B3frnXFT5uccW+rAx7utMdvB53x+MgE/H7WG7g8CbgRArwc + DrwaRvxREq9F4AnLxzfD8PBGKL4/F4RP9vvjLys9cHHYFvsblNhcqo2NpRrYQ/F4baktPjjmi29e9MWd + v3ni8ZdewI8ewE9u+P0HJzz6hr/9lT0e3bLG/fcs8eBv1njwFtv1K7b45QVHPLzujUc3gvDwhVj88lIG + vryWj5f2JWDnXB9Mb3JAMUljeoolMlJskZfqhNLUCUycPugpCMRwcQhGCoKlaTmn54ZQMIRiqDACfSUR + aC+OQFNxKJrKI9FeH4upnRmYNVCEhTOqsHhmLZaM1mPp7EYsm9WARXw9b3oFZg8WYxYxb3opls6pxNpF + Ndiysh47V7fgwNpuHFnTh8PLOrF7VgU2DaRiW2cITvX54ebIBPxzOfvVFjfc285r3unAfsy2utMFv+8Q + fdkKj47yes864+frnrjz9iT8ciscj/4dgyffxuHJN0n4/assPL5VjEcf1OCrm+V452Qezq9PwXL+Rlee + J6pTnJl43VCU5IacRHfkJPsiJz0AWZkByMicjPSMSSSwfkhN9UVykg8SiXjGybgUT8SIkohP9UYMX0/h + 9yNjXEl0bRARoEa4nxIRniRTbtpIY74omKiP8kB91IYykYYZMMEp0RVrgcFEBwwkO2Nqmge64t1QHWyJ + fD9jZHrrI8lNE3HMMXGu45HoqYf0iUZM2GbIDeG98yex9jRAuLM2Qp20EenG/OWjQqwfCbS3CiFu+pjM + 9yY6aMLfUROBzsxRRBj3hbvqIHyCDqLcxAhiGeI8jRDvZYwEXxUS/FRImkiiOJnk0t8McSynSAYw86uf + QlrjV4wAjvA2lkxmMcrY30WH2/oI9x0zgKcEmSBGEM1gY4mUJpAQpoYaISdSgSJh/pLQlkwxRgFJXk6Y + LrKZHzNDtJDmPw5JzAMJ3ix9tZHub4gsktWsIIqQIJJFIk0gmISf+MMATgxQIN7fmKSV18E8nuynh6xJ + wgCWozpMjqYIGXrijDFKIrEi3wo7KHwOlVnjaJUlTpE0nWkwxZV2xs5ea4pue7w87ISXRpxwfbozro64 + 4vJMN5yfMQFniCNTnUmu7EhILLCy0BiLmasXZTA/kxCNpigxzN8ZmGKIzkhdVPN6inw1JAO4kNeST7Kd + S9KdFcT7SOQKgzuQ5JbIDyBYFgUaoDTYAJUh+qgK1Ucd0Rihy2vQRnOYFlrEg2QUOMMUlvPzLbG83AGr + qhywspJlpT1Wc3tNlaNkBM8n1xgRD4uRvM2iYJtH4Sb+cFnCvL243ByLmMOXkKwuqFRJI3lHKWhm5utK + BvAC5peFJUYSljDfCCylkF5SpsKyagusqrPCirqx0cOSeVxGEkrCOodiZpYwgAlhAA8UG2CIJHWYpHUa + y6FSOQZKSMqFAZyvjz6S0SF+ZgY/u7hGhfUd1tjd74RnRkha53jjxKg7DgzYYFeXeLLRGJuaZFhPbOb2 + tg6K+G4VtnUrsaVLgc3d5Cw9Tw1gbi9v1MFsxtTpBRoYLR5HMa2HeVUyzK8zwvxGXk+7CZZ18nrajLG0 + 0RgrGoyxqtYYG5gLdtbbYBvbx3LyraHQ8ejlvewL0kMHBU39ZN5btrNK9seKiSpU+JqjUoz+9bVh+YcB + bIlCTxVy3ShUXMfWAC5lv6zyM0WtrynqvUzQ6mWGDk8z9HlSqHiYYypfD3K7T5i/RJevMXonq9AzSYkO + X7ZjxoB6ctVmf320k6u2sy81x6rQEK9CU4oZGjMtUU3RKEbb5SfKUZCsQqEYnSdM4AxzVGRbSgZwBXmi + QCW5Yjn3CdM3fYo+0mP0kSGmgP4vAzg73hjFqRR/Tw3gphJnaeroP9BU4ojmYju0Ftmjo9iWQsUGg9Vj + BvCIQKULZpS5YaTEEyNF3phRNBGjZUG8B3FY2p2N1UPFWDlQiMUdmRgsCEFNuD2KWKcFEynyJitRKBCg + QrG/CmWMeVWTFbwHbF/BZlgRZY6dFJPn8xzxcqUbXq12xgullhRzKpzKMcYRcud9SUbYQ166L8EMBxPV + OETheijFDofTnHAgwxWbkuwxjcK3njy+hFogX4zY9jBDmpcNUnztGRPtESeZv3bS6N8I3t8Q3tvJnubw + mmACZwclbOxMYWlrBrWtxRjszGBpM2YAq60MYaH+jwGsMtEl9KFU6UlQKMfM3z8MYAXLPwxgR8kAVsLX + 3RQhfpaIC3dC/BRnxEQ7IiLUBsGBFghgvPf3NcFktqn/VwOYcPcQMB8zgt0tJAPYVTKCLeHqRnjY/mkA + C3hM8kJgRDBi05KRXV6OrukzsWLLTpx+7ib++smX+OjbO/jXd3fw4XdiKuh7+OinX4iH+PiOMH9/xS1u + f/rjr8RvxEPc/vnX/8JvuP3T7/+Dz+88wec/P+F7BLc//fl3Hoe4+wSf3Hss4SNhBt//XYLY/vCXJ/jo + gQDfezC2/xNufyKZwY9w6/4jaRTwpw/FyOT7uH3/F3xGfHnvLr698xO+/f4bfP/N5/jmsw/w4V9fxFvX + T+Pm2b24eXIb3ji1Ge+cJs5slPDWyfV48+QavHliNd44uhI3d8/FtfX9ODWvAkeGs3FuVj4uz87H1dk5 + uCoM4JFUXBhJxrnRFJybm8bPpeOZ2enYOyMJ2wZjsKkrEhtaw7Gy2h9z870xLcULg0m+6E+ehP5Uf/Rn + BqMvOwjd2f7ozJ2ItmxP1CTYopJ8oTnVlvHTA7PrJmN2rR+5mSN6Mq3Qla5GVyrjSYoKnUkqdFC7CTO4 + na87sizQImYAEHFALFEUr6TYVyItSoGkCOZNIibCCDFRxojl/j9GAYs/8FMkA9iMmlaNvHQbckd7lOeR + M2ZTS6ZZIpcxJpe/lZ9ozFJObWkgGcDpzH+Z0XrITzCSDOCyNBOUpQsTmH1ZGMBpClRlm0kPj4iRv9VE + 7VMDuEaM3i0wRXU+YyW369mnmytt0VnvhN5mV/S1/mEAOxJO6GnxRkeDJxrKnVBVZIPSHFOeo9mfBnBL + nQuaahm3GI8amB/FvppyK1SXWaK23FoaBdxYx/21dqiqsUVZlRWKK81QXMZzphaoYc5roebtqTHHcJ2a + etkKS2vUWEkOsLrGDOuZAzfXUtNXW1HXW2JLuSXWF4k1RpVYmmX0pwG8WoIKq7MVWJ4hlwzgBYnaWJKk + j+XU9CtSZGMmMHP7SvKJ5ZlKzE83wswUQ8xIl2NWrilGWReDPMf+ejsMMkcN8Xen15hgtEaB+Q3MZ82m + 2NikxnYxg4VkAJvjgBj9W2+Ko01mOM59J5ptcKpFmL9iGmhXnGt3x7kuD5zt8sLxLncc7PHE3h4v7Or2 + xk7u29Hhje0dXtje7iNhR7uvhO3tftjW5ouNDe7SCOA/DeBpEdLo3+PTQnFyKAinhvxxcqofjkkGsCsO + d7nheK8nTk2dhJPTA3B42iTsneaHncOTsH1GMHbOisKeWQnYN5yI/UOp2DOYjp0D2dgyNRfrp+VjzfQi + rJtZji1zq7F9fh22za3F5tlV2DSnChtnV2LVSAmWDuZhXk8GZnemYUFfFlaMFGMDP7+en1k5uxyr5lZg + /eI6bFzagM3LmrF5aZOEjcSKWeWYxe/O6EjF3N4sLJtWgE1za7B9UQN/oxobZvF3iA0zKyVsGq3AZr7e + zHLLzFLsHC3CkXnFODKahj09gdjW4ozdrbY43ueIyzNc8fy8CXhxgRueH7XHhV4TnO9Q4GKXCle6TXFZ + TNNMnO02w6keKxztFlOlihF0JlhUZIjZudqYmTUOM3O1sIAadUm5DMsrxXTQCqysUpIPGmFZqTCAyZWq + VNhRb4L9jUocbjTC0QZDHKvRxfFKLZyppM6sN8KNOhVeqFTgGo99OVsX59O1cS5NB2fTdXA6XQ+nMvRw + Ml2fMPgTJzIMcJr59Xwhz7XMHJfK1bhYoca5SjXOVJlJaxmeqDTFcXLBQzyfg2VGOFyhwAm207ONFpIB + fEkYwK1WuPrU/BWlMIAv/GkAm2MH+9bGMlMsTNPHwlQZFjFmLE1TYlnafwzgdVliGmhheKiwIdUQG5N0 + sTVZD7uI3UnU8Ek62Jco1nCU4TC53OE8E+wrMMHWQqVkAK8sFjP6KLGwUIV5BQosYrm52BzPVNvhfL09 + bjTZ4O1mS3zQrMLHTfKnBrAWPmvUltYA/m8D+Lt+lWQA/7NFF++16uPv7WMG8BtilGa7GZ5rNscFXvsx + 6SFzNZbmGI0ZwPF6aE+UoZHxUxjA0nIeiaYoTrBAQRz5WbQlEsLViAoxQ3CAEv5iTd/JxtL0zsIEDqA+ + EkawMIElQzhQmL98HSTMYCLYBMHcHxpiIiEoRJjGyjGEjhnAEWLkHX8rPtFWMn/HDGBh/pojaorZU5gi + Ooafi1fzPTGDmFoyg5NSLZGSYS2tD5yd5/ynAZwkDOBIQ8SGa0mj84oSqH2zTKgJxNq/1uTmaiwqfWoA + V5thh3hYhW19V7MZNtcoqWvIzdmW5rFtDRcxtzFu1qfJUJXB3JFjjrJcxmgxCriQeajYEln5ZvxtBQoZ + M6vYNhozxZ/V+mhO1kZnqhYG2abFlN97Ky1wmrH7coMKzzfLcbPJAK82GuA19ofXyf9fq5LjzQo5/lYt + xz+qDfFhvSFuNRri82YZvm4xwtftKnzdaYbPey3xcY813umyxsudajzfZokrbLuXm6gpa41wpJRtr2g8 + 9pYJA1gXz1C3HG+UsR/o4my1Dn9fFzdaDaSRvS/3y/HaoByvEC8TL00dM4FfmarifrafPjGjoAwvdOjj + hVZhVOlLZtWLrTI8X2fIPqiLM3maOJEzHkdzx+FQ7njszNDAujQNLE2n9snQxkiWPqblG2OEum9mnS3m + tDhhbrsbRlsnYGaLK2awnMa82sz2X8N6LGPOESZwWZqRNC10I+u5qcgWTQXMmbnkIqz/duakXvapaew3 + s0pNMZ/5ckm5CivEbJVVaqwXo36rxQMs1MvMn2L2qJWMZeuYj8QyBfvb1DjVQc7eZoZrYgmmJiNplkRh + AP+deuyDBjn+xVKMvv+k2QgfCwO4nfeFdfZOjzFep/Z7oV3BelfgbL2cul4He1jv20v0saFAD2upMVdT + a66idl3FWCKwhue4rlSBTTzHzXy9rcwMO8tNsJs5fg+17EHWzxG2u1Psp2KGsEvCCG62x2XmzNMs1xQb + sS1ps68KA1gT6fGaSE7QRlqCIdLZh9OTjZFBjpORqpC205KNkJYkR6pkAOsjP16GskQjNLAdd5IPDLO+ + 55RbUIdTl9dYYhG5xbwKc+kBiRliiu1cS3T/twFMXiUZwBmmWMT3ludYYVWmBdZnq7GB+m9jBvtTpgJb + sk2wSYD3aFMeeQG51PpCC6wlL1rOPji3wApTc9Ro4nGK4xRImyJHgjQC2OhPAziBsSgzx0wygEsqbJBX + ZI5M6quULDniyVlikwwQx9iayLiczONkks/lFtogO98WaeScCdLUz/oIDdZCYMB4BPqPp3YxkDhmVpot + 8rMdkZ/hhMxkW8kAjo0UI36F6WuCqPCx0b8C4YxVfxjAcZHGSCRPzUwwf2oAmyFVMoD1yWn1UEAOKkb/ + t5FjDTEGzM2UY1kmc0OuHHsKjXG0QolzteKBAzPcYFy+3mqMa4wB15v1caPFADcYC67VMh8yt0r/sxcq + cDprbBTwqUx9nM/Wx1W2resF+nilyABvlzFWlMjwZoEOXs3VxCsFWrhZrIPrJbq4UqKN88TpYi2cIk4X + 6eB8mSGerTbFVckANmEuVuIE8/WxMoVkAO+vIIcsssSyHAuMiIc7ycWro8xQEGGO9DAzJIebITHCDPGs + n7gwxdjypcFjBnBMEO9LsBE/M2YA58RZISvWmvqeMTrMlO8p/jR9/zB+/1Ma/B8D2Ag5zA1i5sEK3peq + SDPpPCpjzCUjV4zkrUy1QUU62wbLvCQLpMcokBgu4+/oS+sIi2mkM0JlPHcFypk7xBI21dTs5f9lACeH + 6iExTIc5TgdxETqIl0xgvf8ygOXIZV4sYH8qJAcoIvJT5MiKp86I1qLO0KbOMEAp+1otdUZLmjk6U8zQ + l8RcEyfHYJQmZkRoYFmcFnYzL5xkvDqfq8QF4lymDGczdHEpl/ef9+Jmky1uttjjeiP7PWPWWcaHE4VG + OMb3j6Rp43DCODwTo4FTPNZ55pXLWQZ4tsAIV0uNcJk85zx5zinGkiPsyzvKqA+oA2aTZ/TmK9FA/l+d + LUdJshZ1mBZzvBbjgBYqyFGqUvRRx3NpJCdozpOjlb/ZRd0hmcBEV5kSHWwfHeRTHRXCDJajp0yGfra9 + aWKdXbahRXWMsQ1qcnE1drTZYF+XPZ4ZcBkzgEc8cWSaG/m8/dMRwONQFqaB/CAichzyp2ijgPGrJFWJ + ikze6wyVtE5vVYYMNeR8Ykr1hjT5mAksDOBMaqJ0Y7QLA5jXP1T6hwFsjgX1ZphL3jm/gds8n4WMnwtb + HbCgzUUygIeFbitkjiGnE+t1F/M+lvD+ie1ycqG6GB20x+hjiHFyFrXloixLbKj1wol5qXhlbyM0/H31 + MEmM4PXQRKCY2plkJ5ykJ1yQnslGCJoo534BGYJ8ZQgmRCkQMtEIEZOMpOmgA710MWmCJvw9tBAxmUEs + 2gLZKfbS3PRxDFBBgbrw89OEn68ufP1k8PaRwctLBk8vfbh76MHNXRuu/L4o/fh7gmjFRFnyOJZIYwfN + IanKZ7AqjWAFxhqhmwFytNAKKyk6N1aaY3cVO3wdiXEjiTITopiuYglF49R4XfTG6mKQFTNMQThMwjvC + Sv8D05hcBphQBtgppnJ7KoX1VCaAQSaAvkw1f4cJI8sWXRTrrelWqE9Ss9Op2eFMGUBMkBFlw07kg86q + WBKAHIxUxqIldgKqJrHz+CsxHKbC3AgjLIkwxAYG1t1JChJoI5J/Y1zMVuIKG/KzJNHXSsxxmQnlVJ4F + TuZY8n01jiWYYn+YIfaHGOBQhAwHp8hwiEnkADvlRiaw2ZO00OmsIa0T3GyjgRZrDXQSo+4a2BqlhXPs + KNdLzfAK6+JNJuR32Lj/VqaH98q18WGFFj6t1sZXjTr4vlMfd/tk+GWqMR4Mq/DrTLP/MoCt8ERMA73O + FthsD2yzw287rPHrUzzYaUWo8WiHGo/F1M9bxPTPxEYxBbQVft9kL001+2SbD37d7IeHG/3w8xpffLPU + A7fmOuL9GRYSPuLv3V5ih69XO+O7Da74eo09vlptg29W2+Hfa6zx6WIzvDfDAG/2jcebvePw9qAm/jqg + g3enGuDDmUp8tdgC36+ywZ0Ntriz0RL3Nprhl40muLdKgZ8WGuHHYUN82a5L0WGAd8sN8Qo77g0mpGdL + xgzg8wwAl+oo4nrUeHGqDW4M2+GFGS54ddQPz/e54mQN70W+Dg4UaOBClT5e7zTFJzMc8P1CN9xf4Ylf + 13jgyToPXrMrr92ZpbNkfD9e64Q7i6zx71mm+GK6AreG5PiUuD3tP7glMJ2EbCZJ2qgMf5+pj7dm6OJN + gZm6eGtEF38f1WM96eNfo/q4NWqAz2cb4ItZBvhytiG+nm+Eb5eq8NMqM9xZYz6Gtab4ebUKP681x71N + tvhtjwd+PzARvx0OwsNngnHveBh+OhqCLw9Nwsd7vfHPHe54b5Mr3l3vjrfXuOG1pS4U1k54dtQaF6ab + 4/SgKUFxOuyCK8NuuNTvhAtddrjQxsDeqMCxan0KVD0cqDDEAYrgvRSsuxjEthbIsClHE7uLtHGKpPKN + EVvcXjYB3611xp1Njri3zRYPxbrShxzx2zEX/H7WE7jiB7wQBLwSCrz2f/B6GPCXsfK3l8Pw8+VQ3H4m + CH9d74urs5xxsNWcRFSXglSDon0cjk8zxtu7XPHFFU/88Lobfr3Fe/SDF8H79cME/PadIx7/2xG/fmaL + +x9Y4f7fbfDwr3Z48BrxojMeXffBw+sh+OW5aPx4LQX/PJWKC+tCsLLXgUnDgqTejOTJiknVAUXJzgz0 + nugoCMD0ymgG70QS0ATMr0wgIWVZnYy5tWmY1ZSBURErOrIx0puH2dNKsGxuPdYv7cTmVX3YsmoAm5b3 + Yf2yXqxe1IFlc5owf6QGM/tLMNxbhNGpJVg4sxLL51VhzeJqrF9Ug00LGrBlbiM2zajC2v4crGifgo1t + k3Fuqh/emOeFj8WU23u8cH+vM37d6wjsdcXvO53w6zZLPNytxv1D1rh7wgE/XpmAH1/2xr1/BOPBp1F4 + 9HksHt1OwINPMnD3/UJ891Yl3rtYhCvbk7F9biSm101GdaYHCpPdUJThg+xUHyQn+iAxcSLFbBCS0wOR + mOqPpLTJLCchMWUiiexExCVPRGyyL2JSfDGFEGVs6kREp/oiKskbEbEeCI9wRGSwHcInmSPU3RDhLlqI + d9NGpo8e8kmsSoP0UBXCZB9OgRppgtZoa7RMsUdH4gQSfDeUBVkj20eJFHd9xPG7UY7jEEFEczvB0wCp + jNGZgRZImajCFDc9hDpoIpgId9GVRgHHiHV4vRQI5XuTnLTg5zAOE+3HYbLjeAQ48bOOWgh10UGoqy7C + J+gjiucY522MeH4vzleJWCLej8Kdx48T6/8Kw5eI8hMG8FP48Piehgh05W84amMSzy2I+VAYwFHMH1EB + AiTrgSSaJJLxJKYpJO85ESoUTaFoFwYwiWI+hUF2uC4yQzSRFqSJpEkaiPPRQKyXBs9HEykko2kBMsII + qYEUUYHGLBVICWT9EMnBKiQFkXByv2T+Eokks2mTDJA92UAyU8sC9VAboouOaEPMTDHB0mz2tTzmXuat + QxR+xyj0zjSa40qnJW702zGO2uPFIQfGUkL8WTfHA9fmeOLCqBtOMbYeHnLEnm5b7Gi2wuYaC6wrUWF1 + oRlW8HiLKIrnpJliSEzXHEpi56eBIl5P4UStPw3gPNZLDs9XIE8ygOXS/jEYojBAf8wE5nmXkX+UB2qj + Kmg8aoPHoZHHbAnXROcUPUxl/p+dq8aSUnuKa2dpFM6aWpa1TlhT4yRNDT2Pom+EImgGieVc5tUFzNeL + yiylaboWVfB8mWMXVZphnpjCmflkep4upufqYHaBIeaVGGE+ha6EojEs4PaCEmN+31xaO3hFnTWW11Kw + VpljLkX/bIrqOZWmhIlEBodLSL6LDDGV4kgYv6IcLDaU9vWL0b/5en8awCN8T0wfs67DBtv7HHGApPXY + qDeOjIinFklqm1VY22CIVTV6WFVngA3NRtjeZYYdvebY0qnE+jYjrG+XYUOXETb3GkvTQC+t15amf56W + p4Hp+RqYTUE2u9wAc6vkjGlGWNykxJJWBRY3yrGoVo4lNXIsrzLCGpLprby+TeLJbHKvAdZ/X4AmenlP + 2ibpoH6iDmrJO6v9jFDJ/lLpY4YqXytU+dlyny15FEWRnxWKvEyQ726EPDc5CtknKyaS9E6yQK2fGer4 + XrOXKdo8TNHlYYIed1P0e6jQ507Sz8938nvd3kboY3/vZV/s5Harhz4avXTQxrbdzb7UHWv65yjgtjQ1 + GjPUqEqnmE8aW2tKTOucn6wk1zNFSYY5ysgPywlRjoG5IMOMwl8PKVE6SI3WRVq0HiEMYcP/VwO4udQF + zRXOaKl0ldBeNQGdFS7oLHdGZ4kdOkutMVDlQJLvhGG2y2l8b6jUjffcHYP5XhjM88W0oiDMrI7BvI4M + LO4vwKK+PGl7sDgcNdFOyPFVIMuHAo/1K5A9kdfjZ4yCiUoU+8pRR/ROVmBuqBnWTlHjaLYDnq90xyt1 + bnix0k4amXSmQImjYh3AdDn2kyPvT1JiX4IxocT+ZHMcoGA9kO2ELWn2mEGh2+g5HqVu41HkQcHJ+5Lh + bYlUHxsk+togjvd0ip8N46ANIiZaI8RXLRnAni4qONsrYGmthLmVCubWZhLUNqaw4D61lRGsrGRQq+Uw + NzeEqak+TEx0YaLSh0qpJ0Gp+I8BLEb/Ko30YKEyhK1aASdbJVwdFZjoRm0zyRop0W5IS/BA/BRHRIRZ + ISTAHAF+JgjwEesDm8CPpY+nQjJ/JbCNSQawp4p6RYwEFjCXDGABd09LuHlYw83b7qkB7IQJ3mIdYA9M + CvFHWNwUJORko6G7DwvXbMTxK9fx148/xyff3ZVMYMkI/v4ePvzhF+IBPvrxIT754SFu/fAIt3/4DZ/9 + 8Jj4FZ//9Ph/8eOT/8EXP0HC5wI/A7d/EiYwcQd/rhv8yT2xNvATCWL7o3vAx/cFnkgQ+z8V5QN+7v5v + uP0LcZ/ncf9XfPrLI3x2j/jlIb689wu+vXMHP/z0Pe788G/8+NVHuPX3m/jbi2fx6oX9ePXMTrx5djve + Ob8dfz+/FX87twV/PbMZ75zbjHcvEhc24/VDi/H8liGcXVKHo6MFODWah3OjucwRmbg0MwMXZ6Ti3PQk + nJwej6MjcTg0Eo/9I4nYNRyHrVNjsKknCuvaIhhDgzC3yA/TMn0wRK4xmB6AqVnBmJofxpgYgekV5CpV + 4egv8UdjqhNq4i3RlGyDwRIPzKqdRPhhqMgZvTk2kgncm2GBHvb/nlQzacRIF/t+t3idY4XOXBs0MD6U + k/uJ5YnSI8WfRMyZoXJMCZMhkpotOmJs5EfcUxNYGMACqXHmyEiyRF6GLYrZ10pyHFCYaTP25xv7U06C + gvHGCDmJjBexBsicwrwtDGCWeYxBwvQt53mIqSTL0hiPUsfW/61mvqwvtEZ9kZVk/gojuCbfHFV5JoQK + lTmqsamhiyzQWGaD1mp7aQ3g3hYXyQDuqHNCO3Pefwxg5z8N4LJcc1QWW6GugjGr2gmNVY5oqHRAPV/X + lFmjstQSFSXUxdyu53Gb6p1QV+uAyirxR6clCstMUVCsQDFRVaZEM/Nad40aw3VWmNNgg0XMfctqrbGy + RkxtqcYGlltqrLGlkhBTLBaaY2Uu+UaWMZZnGmM1dfMaXs8a7hPl8nTq6xQ9LEzSkUYAL0uRYWUakWqE + FdTZKzIVWM7vzMswwvQkfWnd/xG+nl5sjr4qK/TU2KCvxoqx1hRTK4yp4Y0wt06BJQ1iKuAxA1ia/rnB + HIcazHC4wQTPNJriWLMap9vtca7ThXDF2W43nOn0wJluD5zq9sKxHk8c7vPGgT5f7OufKGF33yQJe3r8 + Jex9CrG9u3sSdrT5YFurL3Z2TOL+QBz5bwN4WuD/MYBdcKRnAk70e+D0tIk4PTIZR4b5W8M+7B8+2MHX + u2aFYd/sOByelYyjszJwaGYW+08udrGvbR4txIbRYmycU44dC2uxc1GdVG6bV42t86uxbSHLhdQW8yux + ip9bMaMQa2aXYtMivre8AVuX1GLdgkqsmV+OTUtrsXVFI7avbPoT4vW6hZVYMpKPJdPzsXpWKTYvrMLe + 1W04tL4Le1Y1Y9fyRuxb2YwDq9txeF0njm3swfFNfTi5sQ+nNnTjxOomnFtdh9OLC3BoWiT5oid2tdvh + cK8dzg474fJMJ1yd6Yhr1OKX+y1xuXtsyaZLnSY4367CmRZjHBdr97aY4lCbGrubLbGxxgyLydFmZ2tj + eroGRjLHk9PpYVGJAZaUybG0gnyHPG5JqTGWkrutKldiQ7UptteZYk+9eLhZjkO1+nimSgfHKrVwulIX + V+tkuF6nxHW2n2fJyy7l6OJsuhZOpmjhRIqmNN3hsTQiXQ/H0w0lHEszwDNp+jiWJcfpfBXOFpvhbKkF + zpRRbxMnykxwvNwEJ8gtT/Kcj5BLCfP3qBjlVG+Gc02WkvkrIEzfP3CF13ipxfI/BnCDBXZUm2NTqSkW + pxpiUYqcpQLLUv/XAF6Txetkv1gvtpP1sDZeG5uJ7Qm62BlPxGliV5w29rEPHWS/Osi+t4fnvTlfgTXk + CGJmvcUF4mFKI8zJlWFBnhybikxxpNoG5+tt8WKTNd5pscAHvB+fNMvwaYPuUwNY6/9hAH/bp8Ttdn28 + 36KDd1v18E6bAf7apcBbPeZ4rctibGRoqw2ON9piZ5UlluUa/78awBWJSpQliDXyzJEfK0ZwmSMmxAzh + gSoEThZr+hL+CmlqZ39/gprC/+loYGEGi9G+AqHBpggNMUUYeVJoqAkiwnmMMFOEhIkRw8IwViE03ERa + AzhyCn8jzhKJyXbStM/CAI6Jt5AM34goItIU4ZEqbpsiivumxArD2FwygRNTeI6ZtpL5m5Pviizyqj8M + 4PgoGeLCtJBC3ZIfqyutKdhfYomZjJFzGYOXlKuxkrF2PdvHFvJ/sZ761noF46kxVlXxXrMNCDNsqFCF + jmxj1LMtVAlDMpv5hLmhhFqukHkjv1iN3CJz5OUqUZIlRgkr0Mi425xugBa25+40bQxlMt7yHh9gnD7f + IKYeN8cL7Uq8Su3wRqsR3qTGeIPx8/VqY7xWboi3K2X4e6Uh/sV+8kmDgTT995ctcnzTYYJ/s79+3meN + D3ts8Bf20efYVy81si80mOJUnQrHqg1xoFgLe4rECGAd/qYenmmQ4QRxpk4fF4nnmgykUbyvUK+8NiDH + a1PH8PJUQ7w8NDYS+JWpSrwuTOB+Y9zsNsCNdh1cb9bG9RaiWRfPN4kpZnVwpnA8jmVq4Jn0cTiYpYG9 + xJZUDaxK1qCG0cCcTC1Mz6bWyjPCNPbRYeaO0QYHjLY4Y4S5dLjREdOIwXoHtJWq0ZDPHMz6Lk2ToyRV + hgrWZS31ZH0B38tj3s42Q2O2CVqzFejKUZDXG2NmETk58+VC6sBlxCrmzNXUhqIUSwct5z1eWqki+F6t + EptYV3vZ1890sv8L/d1uhpdblfhLkxHebpDj7w0KfNBgjI/YHm6x/LTZGLdY/x+2yaX1tf/eY4w3uhV4 + ScyASB13gd85XKqF3azzbYXaWJejhZXZWliRb4Dl1K/LqNUFlheL2TSNsVYYwXy9sYRtr1SJ7WUq7GC5 + h+WBChMcq1PjZIMlzjba4Bz77PkmexxrtMMKHmuA7ak2WROFSdpIS9RGSiK1EzVXWrwRUhONkMJ+nJps + jFRqsRS+TiU/ShYzLfH9gkQFysjNatMUaGX86mddTy8xxawy8bCDGBFM3V6sok4ywzTW99Q8K3SRt4kl + PuqiDNFCXtXLY45mUc/nU4Pn2WBllgVjoTnWZFBDp/O62M/WZyqxjlibTd7BuLeavGo1+dXKImr2QkvM + yFWjl9+pIz/Lj+V5RsnZX/8wf/8wgJXIIpcSBnBRqRVyC0yfGsDGkgEck2iIKQkGiOX5xKcokUI9mUFt + mZapRlKKKWOEEWOPNoL8xyFgsgbj1zjJABYPGIr1fwtynFCQ5YysFDvJAI6JoNYJVSI8RMHPsQxVSAgL + FubvmAEcG6VA4hQV0hPNpSU3M5KfGsCRBpJ2LYyToTKRWpkxvydJDzOYFxam6GJ1ui525BniBDnTJfKi + 6x1WeLXPBq/2ijhgjBdaDSUT+Lk65sYqPZwv1sO5QkNcYHs5k2vEPGggjQQ+m8X+m6eL55h/XyoQo4Dl + eKvIEK/lauOlrPF4IVcTN9j+ni3SxaViHZwT/yPztTB/zxSJKdrleK7GHNeEAVzFfM/+cLzMCEfKjHG4 + 0hz7K62wnfW9osAKMzMs0cZYWyW8pAgLpIaaIzHUVJphL4bxOybEGDGsmylBRhLEdM5xIayLCBX1u5r8 + 2xb5yY7ITrBFSgTjNes1cpL+UxiMlf6GkgEcNVn/fw1gHjsnTIXiCMbaCDNUMg8JiGmgy2PMUR5nIc1S + UZZig6IkK+TE8z5EK3gfZEgMN0RyKPsD71d2hBFKppiiivmkjnmlhlqigttFvIdZETKkiCmgw7SREK4t + zRYRT+0g8D8GsPgvgzpeoCDZSPp/I2OKLvPKeKRHaCInVg/F7GPVySo0p5qjg/qnN1GFQfa3oSnaGI0e + jxXso7vZ346Rg58iZzjD+Haa9/RMug65jz6ukzO9zLzwcpMNbtSTl1Spcb6Uny0wwgm+fzRVG4fiNHAg + UgOHo8bheOw4nOa+c9lsEwUGvMcGOCZmOmEMOVBuJq23vbLQDLMKTdGXz9jJ3xPr/xbFa6I4bjxKBeLH + s63qoirFYMwA5meaGUtbCxhXyX26yaUEhBnczuO2s420sa20l8nQWWyAHvHfmhi8wfi6uF6NFfUW2CCm + gWZc3d1ug4N9Djgx7DZmAA+5YVe3AxaR7/VlaKEuVgPlkeNQGqtFvmGACmqzmmwLxnk16nLMUJelQm2W + EWp5zmIEcB1zbxN5ljB/W7NM0crY0pFjjJ5CsdybAjMZ38WI3/nUG2JGonnkcPOpQRY222FhiyMWtLmO + GcB1DuhgHBEji8vIf8oTDVBJ/SNQlWSIBr4WS2IMJyswJ9UEC7Issb7OC8fnp+KmMICDxdNvPvrw82Rg + mSiTDOCwQBIbfyUC/YwQQIhSgq8Mgd6GEoQBHDpJPAEh/qBWSFNC+7trY7KblvSHdVocO0uGK3Iy7REf + Z0qCpQNPTw14eenC21sOL28jbhvD00MGD8LdQx+urtpwctaEC0s/McrYX4UoEq84krE0dpxckqZSBlOx + Hm83hfiMEgcsoxBdU2mJTbyZuyrk2FOlwFaS5GUkpdOZbFsjNdEcoYOuGDHXvxH6mCwG00wwyEAtMMDt + AVbMYKopS1P0p5sTFP8ZFuhg0G1lQGxNtUR7BkVzujU7nQU7LAN3sAzx7OCpYex8KZ7orIjBrJYsTC2L + Rn20C0p8lKj2NUIn62Iqg8hIkC4WhOhhZYQeNkbpYUesPvYz4B/hjTpJgnW+wBzn89U4m2+FcwV2uJRr + h4sZ1jhL8no6RoGzcQqcjKeY4fkf5XnuiDXCIv/xGPHWxKC7JrqdNNBlT1hrYJozyUrgOBymuDiXY4hr + TNov5unjlVwdvFGgiXeKxuODci18WqODf7fq46deOe5ONcb9YRUejJji11FzPJlnDSy2wZOl1vh9uQ2w + xhbY4ABssseTzdZ4LLDFGo82WeHRZgv8tlmN3zap8UQa9WtBiG1+d5MD33MFtvvi922T8XibP+6u9cO/ + F3vgk1mO+NuAKd6Zaor3ZljgwzlWuL1YGL7O+GaNI0sbfL/eBj9ttMW/V1vikwVG/JwW3h3RxN+nixGx + mvjHdD18NMcY/15mgR/XWuMOf/PORnPc26jC/U1K3F0lx0/zDfDdkC4+axFiwwBikfnXSw3wEjv/NYq8 + S6UyXKiQ4XK9MV7qt8HLw464OcMVN2d54s25Qbg+4IljJF+7SYD2ZGvgVIk2XmhS4B+DNvhiljN+WuKB + h6u88XidN6/Zg/Xjht83OOP3jS74jddxZ7E1vpltii9mKHB7uhyfjxjhs+lG+EJgxBifzTDC7ZlG+HS2 + MT6eR6I2l2R5jgH+JjDXAH+fzXOeZ8D6McQnfP35XEN8zdf/Jr6ZL8N3i43x4woV7q6zwH3W/QPegweb + KKY2mOG+2N5qg992u+DXPR64v9cHd/b64YeD/vh6ny8+3uGOf2x2wjvr7fDmCmv8Zak9bi6yw3OzKSxn + qHF6QIkjbB8H2g1xkAT77LAzLo644/ygC873OuEsRebJRhUOl+tjH5PznmJd7C1lP2Td7qJ43kIhvCFD + A7tyx+FUtR7enGaJz5Y64bu19ri72Ra/bLfCgz1W+O2wHX477ogn59yAq97Ai/7AK0HAa0/xejDwF+KN + PxCCJ6+H4t5zYfjieCDe3TIZz893x9EuG2ypMMSqAg2sKdLAThL8m2xHH59ywTcvOOPhP3n8b3j874gf + PPH4e2c8/sYRj79wwKOP7PDwH3Z49I4DHv6Fr19yxaPrfnjI37h7NRr/Pp+I13aEY++MCRiloGohcSuJ + M0NejDUK4x2YwJ3RmOWDgdJwzG9KwequHKzrzMXa9nys6cjDqo4CrOwuwcrBcqyeUYeVs+uxcl4j1i/r + xM6N03Bo5xwc2bMQh3fNx/4ts7BzwwysWdqLJXNbMGtaDQa7itDTmssyDzMGizFnpAwLRkuwaKQYC/h6 + QU8hFnRkYUFrEpNFCNY2++LyjMn42/KJuL3VDz8f8MEvB1kH++3xeK8Tft1hh/tb2U52sL/st8JPR9jf + zvPePO+Ou28G4P77kbj/4RTc/WccfnovHd++XYiPbhTjhUNZ2L04AnM6J6K11A8FqV7ITPFGdtZkpGb4 + IzbFH5GJ/ohKCsaUlCDEJAUiLjkAsUlj78Um+3N/ADEZUan/QXRqACJZRiRNRFicD8Ki3BAR5ozQyVYI + nCBDgCNzi4sWkj11keGri9zJuigOZLINNUIlyVU1Y3FVOGN0jAvqp7ijKMgeqZ5KxLkYIIrfDbHVQJCN + BkLtxyHKVQeJPgqkTTZDgrcxIp11EGg7Dv5EiIMmwlz1EMm8FOEpR+gEXUxy0oQv46sPjzHRTgOTHcbz + fDSlKaGDXXURws+EuxsgxtcYcX4qxE4UI4jHzN8pYq1fX7HWrwqRvkpEiFG/RDhzRJiXHEHCYHZkzrPX + xCQX5mFPfYQx30YwN4f7C8ilh6oEuYwLkiOFZD473ASF0eYojjVFcYwSeZGGyArXQ1qwFpICNBHnq4Fo + 5tsoDw1M8dZA/EQdJPkbIInHSQqQITlATgiTlwSXOUoYvwnEfwxgOZIC5cgkCc6VzFQ9FE3SRCWP3Rah + ixGSyEUUR+uzxqZF2ldsgmdInM62WOIKhfyNqQ6MmzZ4nrg+zQE3ZrnhxQXeuL7AF5fmeODkiCMOMH7u + oljdzRiys9kS22vV2Fpjg83VdlhTaoPFFFVTYw3QFDAOZT4aKPEjxD2XRviOGcB5gQqeH0ueszCAC3m+ + BRLEtjCuSRKFETxZm+c/DiWTNFDhr4F6kuRmEuQ2EuP+BDlmULwtLLLF2poJ2FDvTuLHssH1TwN4Lknn + DBK4UZK0+UWmkvm7pNL6PwZwpRnmV5hidgnFe74+hrK0MC1bGzNJZGczDs4plmNOkRyzKYJmPcWcIhnm + l1HIV6uxrNYKy+qssYTlAuaaOeWqMQOYxxQG8HQeYyq/IwxfgQEeV6Cfokkyf1mK12IKaGEAz68xYdyx + w5ZeZ+wdcsfhmd44ON0dG1vNsLrOCEurdLGYHECUa5nLdvTyPgxaY32bEquaZFjdbIg1wgTuNsL6TiMs + qdeV1v4dytEgxmFmgS5mFOtjDgXY/Gq2hTpjLGkUU+fIsbBSzjqRY1m5MVaWKbGxiqSzxBLzxcN2wZro + C9BGF/lgq682GtmP6ycaosZXjipvBWGKam9L1PraotbPFjWT7FA50RrF3C+MXzEVdJmfKWoCrFAfYI1q + bld7q1DvaYJmDxO0uZFIT1Cia4IxulyN0OEsQ4erIbrZz/r9lOhj/+v24n53fbR66aNrEveTW/ZOMUEH + RVR7vCk6yfeaKRbFKL+CeBmyxEg8CuEcCnNh8paIqaGzLKSyMJ39UIA8UhjEqVG6SApnjIrUHjOCxZPU + T01gMQX0/xjAZS5oY3vrqPWQ0F3nib46D/RWu6GzzB7tJdboI78dqnXBYJUL+stc0V80AT35bujJ9kRX + lhe6siejtygc0xqSMJOxf1Z3NkY7MtFfGonq2AlIY50mM44lk3Mnk1OnkLensa4zyU1zvGQo8jTkPSBH + JedfRFG7PdkWZ0om4LmqCbjGdi9GI50tMcXRfArqbDkOZhhhf6ocu+L1sTPOAHsSFdiXaoG92XbYnGGL + uazDDorfKh8dcmAZcr1NkOlDse2tRoKPJWOiFaL9LBE90RIRRLBYc9fdDJ7OSjjZGcNcbQQTc0KtkmBu + qYKFlTEsLeWwsjSEpVoOtYUMZqYGkgH8h/EroDDWgbGRnmT+KgiVfMwAtrEwgpONAhMcFNQoZogOsENm + nDdyUnwRF+2A8BBLhPoLA1gJf9bXZG8lfD0V8PKgRnEXpQI+kgEszF8l3NyVf5rAbk9NYMkA9rSCm5ct + Jnjaw83HAS5eDnD1doV3gA/8I0OY1xJQ3sRcvmwFjl66ir9+dBu3vruDT777GR+z/OhbYQbfw4fER98+ + wMfEp989wmff/4ovf3hM/IavfvodX/74B8Q+lv+Fr358IuHLn8bwmRgZzM+JEcFiNPCtO7/j07tPcPve + GCRDmK8/vY8/cZv4TOCBKHmMe4//xOcCdx/ji3u/4qu7D/HtnXv44eefcO+nb3H320/x2Xuv4B+vnMdf + Lh/E6+d34a0Lu/D3S7vw3uWdLHfgbxe24d1L2/HP53aTS+zFO6dW4+aeWbiytgNnFlbixKx8nJqZjdMj + aThLnJ+ZhlPTEnBkMBr7ByKxoy8c2/ojsFlgIBob+6KxtiMSKxrDMLd0MkYKiLwQTC8Iw/SiSEwvjcKM + qhjMa0ogL0rE9OpQtGWJ6aBt0JBsg/5id8ysmYjRal9MLXZFX549+nNsMZBjLT0EPJhpSY2oRi/7dz/7 + /ECBLXoLHdCSbYMq7s+ONkJyqCHigw0xJcgAEUF6CA0mFwjldrgMU56awElxJkiOVSLlvwzgwmxh/toh + N80SGYlmSItVIDNeIT0okpPIPsq4k06tmM6YkkX9mp+kgFj3t4IxSEz5XJauRHGaAhXZZqjJt0RDsQ0a + S2xQX8T4WahGVa4ZyrMVEsoyjFGWye+K6aGLLaX1fjvqHKR1gHtbXNFZ78xY5IyuBk+0MP7UFJPP5lqi + NIexLoe/x+/UMxY1VNhLawTXldqhljlaGMNlJRYoLTJHRYkVaqv4mVpn1Nc5o6rGAQXF5sgpUCI3X478 + AsZ45rtm5rfuamtMq7PFrEYHzG+wx5I6eyyvZd6vtcX6WnIAbm+pYkwp4+sCNVbkmGBZJnV9ujFWZYmR + v8xvuaZYnTNmAIt1gBcl/8cAXpUhx0rGqpXU1stzlFiWx3yaaYShZOb7FD3mZ8a8QhP0lKvRWWmJnioL + aZ2wfmrBaWUyzK4xwuJaY2xstMCOBubGhv81gI9IBrAlznQ54WKvG7WQO872eeB0jydO9XrhRK83jvf7 + 4OhUPzwzdTIODQVIODAtWMKhqSH/g4ODQeRDgdjf64+93ZNZBuJAfzCODIXh6FAoThCnhgKlKaBPCAO4 + zx3PdDuzdMXJQTecnu6L0zP8cHS6F/YPe2L3sAd2jPhg1yiPO28Kji9IwekF2Tg+Pw/PzC3A/vnF2DG/ + BJvnFmPLgnLsXlqLvcvqWdZh1+Ja7FhSi918vW9NC9GMbctrsWVpNbYur8EOadahBuxc1YAt3L9hUSX3 + 10r7dq1t/BM71zRi64parF9Ujg1LqrB5WTV28ruHN3fh2PY+HNjYhn1rm3F4QztO8PXZPVNx8cAILh2c + gSsHZ+Lq/um4uLUbVza34NyKEhyZGcc6nIx9vS7Y32OH41PtcXqqLc6SY14YtMWlPhtcE+imdm03IxdV + 4XidDIdrZThQxzzFe7erwQobybeWFCkwK1MH01LHY3qaJmZRp84vMMAi8rRF5FqLSpRYUExew3IFOdi6 + GgtsqTXHjloT7KqWY1+VPg5W6uBopTbOUNdebjDC8w0qXKs0xrMlhriUq4uzGVo4mjQOhxM1cChFE4dT + tPBMuh6OpBviSAbPK9UA+5N1cTDdQHrA6mSBCifILY8Xj+FoMbU3f/9IqQmOV5niiJgKukKBI9VjBvD5 + ZjHS10bCs21E65gRfLlJjQtNFjjXaoWjLIUBvPOpAbyUfWVxCpFkzL4iDGAFVmSQ8zE+rGb/WsM+sjpV + hpUJOlgVo4kNsVrYHKuDbTECmoQWdiVQ46exDhhPduaqsDFXgZW5RuxjrLdcOeZmG2Bmhi7mZuphU6GK + usAS58hrX2hU46/NpvinGP3bbIDPmnQk8/eLJm181/P/4+yv4+M40qhhVLZYGpJmNGJGy5LFzMzMzIy2 + WJZlZmZmZgozgwObbDYbBiemgMNM5zvVcrLZfd/v3t+9f5xfdfc0TXfV85wzZ6pKhe/GLPHDXBuplHoA + 95r+HwbwPwet8dKADZ6mzn+wh3Xg7wYw2/WcVGN0p8nRlq5AI/lmbbroAUzOlmJJnW5JbqZBbKjo3MI8 + 7y/7bwM4UM5lhQTJCCZCqS8kA1gyfzWM6ZaIJk8SIxTGxoi5gi3uGL9qaTmSXFIYwGIO4JQ00QPYFkkp + tkhIskJMnAX3EfuaISxSJZWRMWaIiTVDbJxa6iGcmmGN7DwnyfwtLPFCXr4rsjJtmT80/zGAo3WluTnr + 003JB7WYrCa3rqKGqLXEphoLbKUO216rwi7y8p2NCmxn3d/Eeru2yRJLuY/oYSqMxqYME9QxVjbmm6O2 + kPmEKCvRoIR1sJQoY9wW2xryzf4PA3gszxirihU41ewo9eh8nBru2T4NXuozwys9Zni1ywKvdGjxQqMZ + nq00wctVYnhXkykDuNlUMoCvdyhxq0eDm/2W+HjQAW/PccDTrWrcSy1xsUGFsw3knHUKHK8xxeFyfRws + 18ORaiO2OxOcbjTFBZ7rHuKhFhme7JTjOdaPFwbMJAP4hREZroya4rkRIzzH8tlhUzw/osQLw0pcGZTh + mdmGeLxrOh5tmybhkVZdPNSki3sqp+FCsQ5OZungWIYOjrDcT2xP18FatuPl3LY4Tx8ThSYYZU4bFkMY + 11lhvMEec5nHxpqdMMy8Nsw8NlBvj16+G9ELuKnYnDlbgbIMY1Sw3dcyLzUwpzUwjzUylzezLbUzX4l5 + IAcL5OQxCixgvlxSzrbKmLSWOmoddaAo11SpsKqaWqtKieXUX2vqlNjC53yg1QKX+xn/ZtvimT5rXOnS + 4OV2vg/GJskAblbhPTEPM5c/pub7iM//gy4F3u1R4o1+JV4hnus2wxOdSsYzOc5U6uFQiQ72FE7D5txp + WJOjg1X5BlhZbIoVpbx2GeNjKbUhIUzhDdy2mXF1G+PWDsbOndy2l3r4IO/3ZL0FzjB+nm+yxkXq3EvN + 9jhJrOb3nJNlgGaigjk8J80ImSkmyKDuSk+Ss94rkJqsQFqKcgpcThfr/Cw7xRwlGRpUCk1FXtTCWNbL + ujrMODpebk59ao5RYTCzng4y/w8Vk88V851kW6KNxzbGmaItQRibCswrsMSyYmrwYjuszbMib7DAumxz + bMhibMxgfMtSYB2xlnFS8JDVbDNryItW8pyLiqwwSi3Yk0MORD2UL4Z/jpYhMUZxx/z90wBWsU1bo7za + nrzIGsVllshje8vgu09mTI7nd45JNEIsuV58ihzJjM8ZWRqkpquRSE4YSx0ZEjwNQX46CPLXQXCAzl8G + cJ4wgPOnDOD8TEekJUwZwOGhcoQFyxAeIpcQEargNgWiJRNYgUTGHvEHxaxkwUstkc1YmZGo5P2bSrq1 + hLq3OskYDYn66IzXxQhzwOIUXaxNn47d+Ua43GgpjTrxDPPxK2MueHnEFs/2q/FMtxyPtRnhoXo93F+l + j0vFerhUZIR7ysxwt8hzeWJqIWNczjfF3QXcr8gYTzD/Pl/Gtsv69Qzr2RO5unisUA+PFBvg/hIeWyKG + ZTfAhSI9lka4u8wUD1Yq8Rjr1qOsWw/UTxnAZ6sVOFnJuFGrwZFaG+yrd8KGCkfmeHt08nvWxGlRyDie + Fm6BpFAzxIWqEBvG8u/mL5cTWCZHUD8zpufweQrztyLbA8UZznw2VkgKUyFyloGEKH8jRPmR9wcYI1oC + 3yOREGT8lwGcH2WOshgNqqLJy5k7hBEshoOuihWj+DHmJlmgPNUGhcmWvJ450kXvbMZ8MZd0VowKecwV + RdTX1clWaEq3QWuGPZrTbVGXYiWNBFgQI0NGlOgBPGUAJ8cY8HiuUz9kxFNLJMqQzzZUyNxfdMcAFuZv + HttAVowe0iJ0kBk5HblxYg5ZOWqSGfeF/5WmQX+KGkOsg2OsnwuTDLCeuWd/vgYnGcPOMpadZ+w6n8n6 + wNxwP+vFE2z3zzVY4dlmazzJ8jHGyAeqNLibMeJyoSnOZerjWLwODkfq4ChxIlYHZ1J0cC7bAOf47k8W + GuAY68vhUjkOkv+IubbXsr1MFqkxhzmpifxJGJ4lCToo43nK43RQxbpZQ95SLxnAcrRS97STn3SyvvVX + acn1qTuqLNDL83VVmBMKtFfIGZ9NuY8xesTva7zv+bUW1CPWkgG8tUmDHeT6+zuscLTfAWdHPSQD+NSo + Jw72O2MDudW8MhljigFaeT/15B/1mUpp/uRWMbpDGVHCeFNsgVbeizCAGxnnGnmP7TniTysadPE5dlLH + dJNHzWb7GKlm7GKdXkLNsYSaY1Gz5o4BbD1lALc7Y2mnGxZ1uGKUeaeHOqYlV5i+Rry2jLmEuZ3nbmK8 + 6shUYHamCvOyNVjE+LSEsW1z4wycWZKBp8UQ0DFhWoT6k/D4mJAUKaXevxHBFlwWBrDyvxDsK0PQTBMJ + obPkiOQ+CWEaJEZYIJYkKSqAAcZPJv3DLjvZGUW5nihkQEpO1MLfTx8eHjqYMcMI3t5yQin9oOI9Q5jA + SnjNkMHNzQAODtNgZ68DN1c9zPTkdcR8iSRoqRFq5DKglcczYaZp0cvGPF7uimU1rlhbbYcN5SpsLZdh + K1/qOlaaSVaQPgau+ghd1EcaopXBvoOBrTvVnA+ElUECRV+2FQYp5AX6MyzQzWDbnaZGZ7qGSYJJJZkP + l4GxI1sYwHaSAVzBoJkZZIgEH11kkhhWZnijvzYRCzrz+PIS0JjgiWIfc5R7k4TyOXUFyTAnwBDjQQZY + GKyHFSG6WBOuhw1sqLt5j0f4ks4y4VwstGKQs8cDZS54rNQVTxU7Mwja4fFMNiAmuvvTzHEPk8LFDHMc + YQPdHKaPVcEGWBKgh7leOhhx18GQow7muupg5SzRC1gXp9N1cXfWdDyQQZJDPJevg1eY1N+o0sUHDfr4 + tEeOrwbN8O24Gj9OWuCn+Vr8stAKvy+zxx+rHPD7Gnv8vtYe2EBsFkMbE1v52RY7/L7ZBr9utMYvm7T4 + dZMVS0v8JrBZiz+2WuOP7dxnpzN+2yXmG51FBAL7Q/HdFn/cWu6Ft8cdSFJUeLZLjpcoAP41aoH3Flnj + 5lon3N7sgs95jS+22+LbXbb4aju3r1Phg+WGeGexHt6cr4fX507Dm5OG+GCpAp+s1eKLLTb4drsVvtlh + ge93mOGHnQp8u9EEXy01xOdjerjRQ3SJYWjk+Ee9DM9RrD1Wo8SD1XLcXycnkTTDM4OOeH7CA89PzsSV + RYF4dVk0Hh+msGYA25etj/3ZDFQlenioQUGya4l3xuxxY6Ewgb3x4yYf/LrNG7/tmIGft7rily0u+HGD + I75aYY1PFpjj2rwps/f6pILLctzg+q35KtxcqMS1hQp8tEiBD5ap8O4yGd5YaoJ/CywzkZbfWW7Cz0ic + uX6D5Wfc9hmXP19uii9XK/DNejN8t02Ln3dZ4pfdfBe7xbIFfhbLe2zxywEn/LDfFd/s98Dt/TPwyUEf + fLTPC2/yff5jgw2eX2WBp5ea44nFWjy2gMF6Qou7xi1wboCJtN8UhzqNcahLhotjzrhnwgt3jbjj7kE3 + XOqxxXkGyOPVJjhUqo9DZfo4XMF9y0xwkEF1bwHrOMnjoUIdXKrVwz9GNLjGenV7ky2+22GNH/ZZ4sfD + VvjtlD1+u+AE3OsOPOwNPOUPPMv68nwQcCUIf7xAvEi89De8GIYfHg/DjQtBeGNfEJ5cORMXBl2wi+91 + XdE0ilIS95ppeGipGm8ec8CNh53w4+uewLWZgJgL+LYPfr/tht8/dcbvN4irLvj1LSfJAP75RWf88own + fnsqCD89HInbl6Pw/olo3L/SGxvbLDDIJNWaSgGVaImaRCfUpbqRgM7AQFkYA3YKtgyUYv+8OhyaV4/D + E004OK8J+1nund+GvUs6sH9NP/ZtGMC+zUM4tHMCpw8twYUTq3Hx5DqcPboKJ/Yvxf7tk9iwajaWLGjD + 6Jxq9LQXoq0xG+1NWehuzUZfVy4GenMw1J2NgZYsDDSkYaAmASN10ZhoCMSG9pl4ZEkI3twajGsH/PDl + iZn49oQzvjtqj58PO+LnA7b4Ye+UAfy9MIBP2uL2RUd8dr8bvnp6Fr55ORxfvxaDT/8Rh4+eTcZbj+Tg + 6TPZOLUlGWtGQ9Df4EOB6IPsdB+kZ/ojPS8ESbnhiM4KR1h6KMLTwhGZEYaYtDDEpYcgNo3ICEWcQOYU + Yv4HUZkhiEoLRkSyHyLjfREV5YnQQDsEeMjg56SHCOaFxBmGSJtpgGw/I4i5YMvCFSgNV6E4VM11Lcoj + nEiyKKBDHJHsyfzhYoIIB10E2ujA34rk2VYH4Y66iPMwlYZrjveUIcJZH0F2/JyfBQuj2EV3qmfvDOZF + yQCejlkOUwawH8sAJxLxO8NBh4phmz1IBL2METeLpFr0+A2kYA8kwQzSIE7MYzyLQp+I8iVp9DWfgo/o + /SsMYJ5f9P4V9+BhhLCZpiSTCkT93QAOUiCGRD4x7I4BHEnxEysMYK00FHQhxUZuFIVTqAFSgnSRwPgf + 662DmBksfXQQz/ybxByU5G/MezORkBLI7x8gY0miG0jBwWukBiuQIoHEkwQ4nyRXGMBFAfoo5jmrKDxa + mb8G44yxKI05iMRlN0XMYZKqk/UkeN22eHDAHo+NOOFRYQAP2+PxceaxhZ54eoUP26g/7l8yA+fnOuLo + oBUOMoYe7rXB4R6iww6Hu5yxv80VO0ja15RaYXakAZooeGp47ZrAaagONUEV76s0hAQ2mO+cvEOYwFNm + sBzlvN9yknmpZL2oIJEXJnBpoAGKeI4SX34Hnqc52gidscboIjGeTTE5nqXG4iIbkiMvbG+ega3NnpIJ + vPEvA9gC8wvNsIAkbmmZBVZU22BVnR1WCAO41hLLpd6/aiygGJ5baIiRPD2Mih4mFDWTorcJecn8Uhnm + lZhS3JtImEcIw3h5rVYarmpVE89JLBfDVgnzl1hYo8ZkrTnmUtCMkmj+3QAeJOYUGUoG8BC3jZLMjlfI + MFEpw6I6c6xts8GWHkfsmuOC/SMe2Dfkgo2tat63DEsqDbC4XBfLqg0Yz8ywd8AOB0ccGTMobptlWNcq + w8YOGY9XYCOxutWU92WKsYLp/G7TMV5ggIkiEyzi91peZ8b7V2FVI0thBtcosLJaKf1YsbHaAttq7LCp + 1BqLUinGw/Qwhzyo118fXbMM0THLBC3kjI2+CtR7qwgNGmZao8mX4sbfEU2BjK0BdqjwtUAZOVWlrxp1 + gZZoDLZBU5AtamdR/HN7Pblkk5c5Wj1U6HBToNNVjk5nU3QRPW4U+eSXQ2xvg8Qc8rI+ttUebz4/ct9h + CryhODX6BZIt0Jch/vBni6ZM8eeeqV54Yl7fAjEEa64lqkiihQEsegMLMSUhVSl9LoZ9zoim8IqioJKG + 6/tPL+DcJPEDkPq/DOBe1rf+lpmY3eqDwdZZGGnzxXCzN2Y3uGF2rRMG610x0uCOoTp3DFR7YU6ZF3qL + vdGb74Pu3FlEELqLI8k/kzCnJQPDHdkYbc/BnOpENGf5IyfIChl+GmQwHmUEqZEZrEFWiAVyxfD33Fbi + Z46GAAq8UCssiLbGhmQ7HClwwaUKF9xT7YB7WMfvqrHGBQqncxUanChU4HA283qyLmGAw+SuxwuscKTE + AbsKHLCMgnGI/LgjkgJEcOMQKxQG2SDX3wbpATaMQVZICLBEfKAVYokIP+qPmVaYJeYAdhI9fVVQWyqh + 0iphplVBw2WttQJWVjJYCwPYesoA1lqIXsBGMFcJGEowUxpApTCSzF8B9V8GsBwutip4OZoxtlojJdwV + RekBKMkKQEKMI6LCrKh3NAiepaK2USJwpgq+Qpd4Uqd4KuHjpZoaCnqmOTyZTzyIGV4aahkBLTy9rahf + rODhZSkNB+3uJYxgB7h6CzjB098TfhGBiEiMQ0lDHUYWL8aR8xdw5V9v4J3rn+C9T25PmcCffo33bn2D + d29+hfdufof3P/keH332E659LvAzrnH5Bssbt3/FrS9/wyfErS9+J/4sf8enX/7B7Vz++g/cEkNCfyV6 + Dv+Mj1h+9NWvEPMEf/SNMHOFsfsHrn4rDGHu9wNp0d9w/ccpXPueuGP6SsavAI+/8e0vuPXNT/js6+/w + 5Vdf4dsvP8N3tz/CzXdexDsvPYhXHzuDVx48gn8/chzvPH4cbz96BK8/eACv3bcHrz+wF+8+eQQfPnsc + b9y3HS+eWYkn9o7g/o3tuLCkDOfm5+PseAbOjaXiwngqzg4l4PicaBzoE39q82dcCsCm3lBsmx2FbQNx + XI7F+s5orGyOkubDXtaQhCWNyVjUkILFTWlY3pmFNf15WDs7F/ObY9BTOAPNaXZoybBle/LEeM0sTNT4 + MIa6YbDYESPFThgrccTcYnvMLXLAeL49hsSoUAXWGKtwxiDbRie311E75omeHmHGiA8xZn42RHiQPsKC + 9BAeaojIcG5jXo6PVSGFOTo1wQzpiRbISRUGsB1K8hxRmu2AgnRrZCWxfSYokZOklP4okp8il2KJ6P2b + E2eEAuaocsaO6lwL1OVbSkM+1+SpUZXLeFKgRWOJDVrK7dFaye9VbiMZwDUFalTkiD+tMAdmMRdmK1HF + bfVlVmittkdngxNmt7mhn/lWDAHdUeeM9mpXNJQ7o7LABiXZGpTlalCRr0EN43djlTB976DCnvvZoprb + K8uFAWyJaskAdkYzc2ZzkzvqG12RX2SO7DwZcvNMUVggQ301tXS9Dfrq7THa5IT5rS5Y3OKKFS0uWNPk + io1NztjC7TtY7iIH2M5rbSmxxtp8NdbkqCTDan2uOTblacg9NFJv4HWSAWyClRlGkgG8NtOU+wjzV4n1 + kvlrhtXFaizKV2E0y5Ra3wRDBUrmT9EjwBK9zOHCAB6s0WC0RoUJ6odFjSKfqbC9RYt9zVY41MIY12Ip + GcCi968YAvp8py0u97vhnkEP3D3khcuDM3BxUGgQX5wfmoXzI/6sw4E4Mx6MMxPhOC0wL0rC2YloCWcm + YgiWc6MknB6NwKnhcJwaiWQZiTNjkTg3GokLLC+NheDCSADOD8/CuUEvyfw9P+iOi8ztlyZm4tKkD8/p + jWPjHjg07ol9c2fg4PxAHF8ag4urMnDP6gJcXlWCcytLcXJ1BQ6vrsKelVXYu6YOh9c14sjGZhzaQK3C + 5QPrG3GI68d2dOI4cWBLK/ZvbpZwQJSbmqbKjU3YuaYWe9bVS9v2b+E24oDA5hbs47bdGxqxl8t77xxz + Ync3Tu3vx9FdnTi6tR0nd3Xh3P7ZuHxkBPccH8PdAkdHcffhIVze2Y17trXi8poynF6UjDOT4Tgx6o1D + sx1wrN8aJ3otcKbHAhf6rHDfbDs8OuCER/odcH+3Ne5u53si1zleI8PBWgX216mxt9EGW2utsZrvfqGY + xzNTHxNZ+liQb4RFReQ4ZeQzEsjzyoUJrMHqGjGHqrU0t+quBg321ClwoFYMf2sg9QIW0x/d36bEY+1q + PNJghkeq5Hig2Bh35xngZJoOjqQQ6cJQ0sVx5s4TObwn4miGMfanGeBguiGOCUM4X4mThSqcYH09WWKO + 46UqHC8hyri9UoWTVUqcED2byO2EAXyv6PnbZU844JFuezzSZTfV+7fVEneznl5ieZL7HSH21VlgJ3P4 + WraJlZlEKut3GttTJtsP29UGtiFhAq/PEcOms/2kGGFDgh62Jhlge6IhdknQl7CXn+3PkuFAtgp72L62 + Fah4XlOszDfBUj7TBcIgTNfFggw9bOf9n+R176rT4PEmc7zSqsTbbaa42m6E6+2GuNGuj1udRvhi0Bzf + j1tJBrAovxzW4MZsBd7qNPzLAH6t3xyvD9viFWqKp/vt7xjAdvxujA9FKszNMsZAmgl60hVo53dsylSh + IVMNMQewZADH/8cAFh1fAu4YwEFBKgSLIaAJMRS0BGoLgVDuKxARboHISAvERFshLs4aSUl2SEi0RWy8 + NaKowwSiYy0lxPA6cQlinl+bO7DlupXU4zci2hzhkUqERihZqqTlyGiV1CNY9BBOY07KyXdBYYknikq9 + kZfvhswMuykDOEaGJHLKzBg9fhc91KWR+7Mez6+2Io+3wto6K2ypt8R2Putt5N/ba+WSAbyz2QxbWrVY + xxgmDOBxMYwm61i7+JE8V4lWYfJS19RwW0WxGcpKCe5TUWKG6iLycWo8MV9wx98M4HG+69UlSpxpdcaD + nc5SD8D/NoC1eKXDClfYHp6pMMZLlSb4Z43oASzHBy0yfNwmuzP/rwbXqQGvDjrgrUHqROqTi7WmOFpu + jIPlRjjI4w5WERWGOFBugCNVppIhfLrOFBca5LiP53ukRYFnupWSAfzigBleGJLjxWFTXBkxwvMjhnh+ + 1ATPjYh1GV4YluH5AWM8M1sPT/To4PEOHbZbHTzSqoMHGnRwT5UOLpXo4EzeNJzInoajdwzgHaIHcMY0 + rMqhZio0xoISGeYyTggDeLhGiyHGlKF6awzW2mKwzkYaWWJOrY1kAHdUaNHG91TPnFOWboBSopJ5qIZt + rp657D8GsBI9bJ+DBYq/DODFZXIso+5bTZ24hnpqNeOAWF5ZqcQyasKl1HsrqxXYVKfC/mY1LvXaThnA + jI1XuizwMmOSMIBfa1bhzSYV3iU+bDHDNWq+a51muNqlxPs9SrzFZ/eaMNC7+b46VHymclysMsDRkmnY + W6CDLdk6zL06WEbtt4Tff1GxKRZSzy6mnl1aLMNyrq8pkkkm8KZyFbYwZm3lvW8ndlMjHqaOPVFvgdOM + oWcZg8832+FYkx1WFiswJ9sIraxbVVly5KWbIpPcR/TwTUsktyInEkhJ/BuSVEhNMkNWigZFGdRh1GmV + GdSAGdQdfJ6zyTkGWXeF8dtfaIS+fFP0M07NKeY7ok7pybNGayrrfLwMrYnG6EuTY4x8alGRJVYW2WA1 + 9d3qXC1WZ6vJK8ywKp2xkjFlBfdbnqHAMsaWpdnMDeRGi8nFJqgF52TzHfM+ynhvmWyniVEyxEUrEPu3 + HsCpaWZs0zYoq7JDcZm1ZALnlVhIBnAKzxmfLEd0gjGi4gwQQ+4n9QRONZd6/kbHGiMsVB8Bs3QQ4KuD + QD8dhNwxgNOEAZwl+KQzSvNcUJDpRC4pDGANQoNMua8RggOMCROuyxAWIkeUMD0ZexLjzCVumpkkzF9L + PlOtxEOnDGBTFFP3VsQboTpmOpojdTAQo4OFidOwOlVHMoDvabbG48w9z812xCsjTnh5yBbPCQO4R/GX + AXyPmK+3SA/n8w1wF2PGPaUWuMg4c6FAjkvkhHcVmOI+5t5HWIeeLVXg2WI5nio0wRMFxni0WAwLbIJ7 + S4xxudgIFwoNcLFQD3cxv97DuvUQ24OYb/bRJks8yNwshoAWBvAJto0j1eY4xDa4hzxyfSW5ZoE9Ovj9 + quIskRthgZQwDeL5HGJCiDBhAqskE1ggIVyFxDC+l0g10qMtkJ1gQ81IXpzryfrmJq0nh5sjis9Wgr8R + ImeR84tSmMFETIAhda4JkoP5LO8YwKUx1MQxFqgiaqK1qGFOqIpRczvrBnVzQTyvxXeSznqTGiWGEb9j + AFNDCAO4JN5cGi66LZP8PUdMS2qP+lQrVLIOFHK/KQN4agjolFgjpMebICOe10+UIS9FhaK0qT+qF4k/ + I6SyvbG+ZccaSAaw6AGcFa2LXK4XJchQlUgNn6pBB9GXzDZFbTLG9rIwmRyb7WEPdcFR8vJTzA1nyRvO + CQM40wD35xniCb7H58mnn63X4inmpKeYmx5jnHyoQo37i5S4kGWIE8IAjprCkVgdnCBPOplFzpSnj8N5 + utjPcg/rwK4yEU+0WCGGxxcxMluOeua+snhdPg8dlPLYctbLyrjpqEs1QmOmDE3k/y15ZmjjMZ0l5PlV + 5Pg1hPjDZ5UGXbyPjnIF2liH2li/2lnPuouoCxjThQG8sslGGgJ6K7mTMID3dWhxuNcOp0fccGHelAF8 + eI4rdvU5SfMFDzNWdzOfNmcSjOftxbbS/O7tZba8hhW6qJEEOorN0UG+1M5n1plnji7GnS5qsi7Gp25y + mDmSAazGZIMWi1utJeN3Ee9hMcslrTZY3u6IZe1OWNzuQu3kKOWdHnLF1jwFv7MMLdQ4HYV8Z0UWaM83 + Rw/j4VC+FgsYoxbmaMl5tdjQ4IVTi9Pw5IEm6CRG2SIiSI3wADNEBmsQFUKSEmjBdTVC/cwQRoTcQZCv + HAEzjCWEzlJMGcDhJCbi3xRxtkgnUmNtkRJjg+wkZ+RnuSE/141BRgtfHz24uU2Dp6cJvLwU8PJUYaaX + Bt4zhAksfliRw8XFCHZ202FrMw0O9jpwdtTFrBlyqadxYphaGgq6hA2kNlXLZGlHse6CeRTjSyvssIwB + ZSUT0MpCGb8sA36qCZpiDVERZoAKCvHqSBPUU4y3JJqjO8MKPZlMztl26ON5ZmfZoo/r7azoDfGsXLGm + aGQQbCAaE80k03fKALZHU5olK5voOWaAJJ/pDCQa1GXPxFBDIhaLIV0b0tCc6otCPy0KZyhR7m2Keh8S + p1nGmM2gMOJH8jRrGub6TsM8lqujDbCDgf5gpgan8q1wdwkFTLkbnilzx8vl7nilzBWvFDnjSo4VnszQ + 4GE23ruZkE6zQe+PNsa2SCOsDdHDUiaFBd7EDB0smamDFVzfFEzRkaSDC2xYd7G8P1kHz+T9xwB+v9EA + n/Ur8fWoGt9NavHTQmv8ssQWvy2zx+8rnfDHGif8vlbAEVhHbHQBNruydALWO+D31db4daUlflllQfB4 + lj+v1uCXdVr8sdkWf2znPrtc8NtuT/yx1wfYGwDsD8MPWwNwc6kXXum3xCN1Rri/Wg+P1uvjSjcJ/zxL + XF9pjy+3uuCrbfb4epc1vt1jhe93W+Kr7Wa4tdEEV1fq470l0/HWgml4Z5EBPlopxyfrNfhiqyW+26HF + d7vU+GGXEj/ukuG7TUb4ZrkBvpqnjy+GDPl95bjaIf4Rp8QLTUo82aikaJPjYRLlR9uYuAad8PzEDLyw + wB8vLwnHK8ti8fhwIM7W2WJfjhA+03Gq2BD31SnxTLsFXqXwfHPIBh/Pd8bnqz3x/cYZ+GmrF77f5Irv + 1zvim7X2+HypFjcmlVMG8Hwlri9U4PoCOW4uVOHzJWp8ttQcN5co8dESYQDL8e4KGd5aYYw3l09BLL+7 + wggfsrzG8tYyY3y23AifLyO4/uUaOb7dqMAP2/ns92jx615L/LbXAr/uIbj8yz4b/LzPDt/tc8RXe13w + 2V433NjvgQ/2uOH1Lfa4wnf2+EIZHpowxoO8x4dZFx7ge7hnwhIXR81xalCFo31yHCFBPDfmiIvjHlM/ + Ogy64XyvPUWAJUk5Py83xJEKfRytNMTRMiMcKWVZKobN1sMJ1rlL1dPxypASN1bY4PYGK3y3XYsf92nw + 8xEL/HbaBn9csgfuZ/16xBN4aibwjC/w3Czg+Vn448os/P7C/yIQ3z8RiOvn/fHvvf54aqU3Lg4zKNeq + sC5/OtaTuO6smob7J1V4/YAtbj7gjJ/+6QV8wLp4ww/4zFcygP/41Bm4xete98Dv77ril3864bcXXfDr + M9744+kwfH9vBD46GoiXt/jg9LAdlpebYA4FbjvJUWeKPXozZ2JOfgDmVkRiVXsGtg+W4viSFpxb3YOL + q3txcRWxZjbOre3H6XUDOLlxECe2juLYjjEc2z0Xx/cvwJlDi3H2yDKcPLgUB3fNx56t49i4egDLF3Ri + fKQePe0laK7PQU1VKirLklBeEovyshiuR6O+KhYNZfFoKo5FU14oE14gE8MsrOvywSMrQ/HWzmB8fHgW + Pjvpia9P2uObY7b46Yj91DzeB62mcNQW3560wxfnHfDZJSd89oAbPn1iFm49E4p3Hw3BC+eD8dDBCBxb + H4H1E2EY7wxCa3UA8rJnIDnNB0mZAYjPDUV0biTCcyIQkhWB0IwohGdEIDItEtHpYVPICEdM5p/gZ/+D + 8MwwRKSFISw5EJFJgRTM3ggOdICfpxK+zoYIcRXz7RohYYYB0mYZIYcEV8wBm0VimzZLhlQfJbL8rJAb + 7IhsHhftpkCooxECbafD11IH3hod+GpJopljwhz1EM5zRjLvhDoKA3gaAmz5GRHoMA0hYohnXmvKAJ42 + ZQAT0lDQztzXRRdBrnoIFr12PQwQ7mWMGB8FEgJIqkMskRpqjZRQS8QFqqXhnqN8lYiYqUSYN/MqEe6t + 5DEyyQAOdiNJJ0K9TBHuQ4LuN5Vfo4OVEHPxx4aaIT5MgSQiI0KF/AhzFMcIA9gKZQlaFJAc5kYpkBZi + hORAfcQzt8QyDwgDONqHy7N0CT3E+vL5zdInDJAg4GeCJD8KFv8pM1j0CBYmcGqwDJl8rmLe4PxAI+Qy + 1+XxXKU8ZzXP1xaki7F4A2wuFsOzWFLgWeBUsyXuogC9b8AeD4864VFh/jJePD7XGY8v8MCTy2fiiVW+ + uH+JF86O2+HokBbHh6xwYsAGJyhaj/XY42iPMICdsI3EfQWJUUfQdDQwl9X7EyG6aAhXoIbkvDyEZDjY + DMUh5ighisQ6CXxVlBhex+oOtKiNtGD+V6A00BhFzLnFPFc17701ToEeEtxuisA+kt1hijMxDNT6Wjds + avDApno3bG50w7o6Z6yussfiYpKnEqJYg0UlGiyvssFKiv3ltVaEJZZWk6SRVE6WyjFewDxPsTNaYIgx + ksu5JJnzKdjnUjCPUzCPkWwKjBYZYYLbFlabYQmJ8vJGnquJYLmYYnlhrQYL/jSAqxSSwTvyNxNYGMCS + +ctylIJnosYM86qUmODyfC4v5nHLSU5Xt/B7tZPQtot5kVRYVCnMZz1MUNwvrDTAmmYzbO+3xZ4hR6xr + I49qkmNNi5z7y7Gxk7G0S4m1whhuMcdEkSFGc/QJA4znmvCZKLGsyhwreL2VNSqCpfiRotIcG6pEbwRb + bK12wBqS0Ek+56FQQ8wJMkSfvzF6/Um6WffaZ8nRxHbRQE7Y6KlB0wwKdF97tAW4oiXQBfWSAcy67qNB + tZ8FGgKt0BBkjboAK1TPooDyMUcN21OthwoNbO/NLnK0Opui3dEEXY7G6HExxqAHn9sMBYbZ5oY8FZhD + HtrnZYJBfwXGIjUYpSAboBgbTNIytluTG9qS66lRFGeMXAGKqAIK8doCW9QV2KE6zxql6WoUJCskFCWr + UJzKOphmTlElR1qkHgXm9P/vBjDJ+JwW8sd2f4x2BmK82x/jHX4Y7/LHvM5ZmNvpi4lWX8xt9cNYcyBG + 64IxVB2KwYoIIgZDlYkYqE3FnMYs9LfkYE5bLgbb8zHSnI051cmoz/BHZaoPKtJnopKoyvBBVaYPajN9 + KaJmkt96oyvBCwNJXliQ6oW1GW7YmeuCY6UuuFDrinub3XFvkwvub3clXCiuLXAozxh7MqfjYI4xTrEt + XGQbOdfkiQPVLlhTYEORYYfxPCcMZruiI90NDUnuFN1uKI51QXakPdLCrZHE2JgQYo24EFskhDkjMsAR + Pp42cHSyhNZWDaWFEgq1HOYWcmgtFbDUCvP3jgFsJZPWxTDQwgBWqwwlmN8xgM3umL9apQls1DI48HhX + GxW8nRhP/e2RGeNFER+Ekgw/JEQ5UPNoEe5vhlDG7pCZ1DjUJ77UIzPcTAk5fFivhAHsO9McHu5KYsoA + 9plpiZkzrTHD2xpiOGg3dws4uWrg4mYB9xm2cPWyhbOXHTxmucI/wh/RSTHIryxB9/AAtuzbiwefehov + //stvHntOj749Au8f+s23r9xG+/d+BzvX/8SH37yLa5/9r2Eqze/wQfXvsTV61/h2q3v8Mntn/DZl7/g + 09u/SMuiFPj8y1+l7Z99/Rs+/epX3PjyZ1z/4kd8/MVPEq599bOEG98KE/dXXPv2Fwk3vuf697/j5g9/ + SLj1I1iSJn37B65zv+vcR+DmN79JuPXNr/jkm59x++vv8dVXX0sG8Pe3P8Ltq//Ex689gXeeuwtvP30e + V69cxvUXLuDdJ47j9QcO4J/37sS/HtiFd544hPefOsxt2/Hi+dV48tBcPLSdfGlFFc4uyMfJ0TQcH0zA + sf5onCCO9EZgd1cw1tR7YVXzTKzvCsLm/ghsGYjDxv5YbOiN5XoKtszOJQqwrjcPq7pysFaMwjJWjq3j + FVg/VIDJ5hj0FnmzbduhJdMW/SUeGCqfgZFyT8wpdv7LAJ5H3bWA2nJRhTsWclmYweMl9ozDbpIB3FHs + gNpsK+REy5EYYohYxrQo5t2wQD2EBOgijHEuPNwIkdEyxDAvi6H2kuLEcHvUscmWyOe1i3McUZLtiIJ0 + 278M4KxEhRQncpJkyIo3YV0lx2FZnM4Yx5jTXGpP2KGpxBqNJVaoLxKwRlOpLVoqHCQDWPQCFkNAV+ap + UJIlQ2mWnCVjTzbzYz71ahnPU+2IjgYn9DQ7oavJAR01PK7SHnVFNjzOBsXUowXUmUWZZijL06Cm2Bq1 + pTaoK7ebQpkd6nkf1aVWqCydMn9rKmzRWOeCJmLKAHZDLu8hI4vfI8sY+XkyNNTaoaPeEb3EUKMzJppd + sLDFHUta3LCSsWZ9E/Nukyu28fgd9S7YWumAjWJ+/jw1VmUyr2QwH2ULA9gCm/ldxLC16yUDWMbPTP9j + AOcpsKFAifXF5lgjhqYt1WBxiRrj+QoM5ckxxO1zytXordLeMYCtMNZojfnN1ljcrMWSZg1WNZpjezP5 + DXPo4RYrHP27AdxBbUS+cnmOGy4PuuPysBcuDc3AhWEfwu+O+RuAc+MhODc3FGfnReDMZATOzo8mYnB+ + QayECwvjJVxcmIhLC4j58Tg/EcPjYnF2NBrnx6JxcSwGl8ajcGksFOcGfHF+UFzDG5dGZ+DSiDu3ExO8 + /qQ3zs3zwom5bjg87o59wgie74eTS6NweU067lubh7vWFOL86mKcWluOo+urcXB9LQ5ubMDhTcTmRhxk + eWBDPfZvrJ9a3taMg8S+rU1EI/ZsacC+zQ3Ys6kee+9gx7oq7NxQgz0ba//Cn5+J/XZv5jKP3SuO3dqA + gztacGhXq4TD21txdFc7ju/uwMl93Ti5txvH9nRI2w/xfg6vrcWJVZU4tawAJxYm4dRCapAxH+wnz9zT + LqaXkOFQswJnOrW4h1r0kX5nPNLrhIe67HBvmxXOkJMcJR/aWymXhibdWWONzdXCALbAknzRM8IYEzkm + WJBvikWFciwtUWGZQBn5XLkGS8osyfUsyQOtsUWYwORlO+tU2FMrw4FaI5yoN8bFFhnu6zDDY10WeIx1 + 45F6FR4ol+PuImOcSJ+GAyk6OJCqg4MZujiSbYJjeUocyeHx6UbYnaKPPan62J9pjINZpsyp/D651NKs + u4eK5DhcqMCRYhl1NEHud7RchuPVSskAvk/0+u12xCM9TnisZ8oEFgbwPay7l1h3z9ab40idGQ42mEsG + 8C7WdfGHiFVZbA+pKqxIUWAN2/i6rCkDWPRyW8tYsY5taUOaKTYlG2JrqjG2p5hglwRjCbv52V7GlT2M + JzvZvrfmKrEq2xRLswyxIEMfc1OnYSh5GiZTp2M7v8OJchUuVsnxSJ0pXm4ywtttRrjaboCbnYb4pNMA + n/XK8PWwRhr+ecoAtsbXYhjoYXO812uCN3pM8C/u8+8BC7wxZo9XxdQyfXbSENBiDuC9bL9ri/kuc0wx + kG5KPa5EO79TC+NEUzY1QIbl/2EAhwoDOEAuGcDBQSqEBJn/N0LUEkLDNBIiwrWIjLJETCx5S4IdUtKc + kUokJDsgPsFWQlycDeISrBETb4XoOGEGWyCGZaxYj7VkLlAjjNotNPy/DeCIKBU/+9MAtkduPrlSqTfh + g7x8D2QwV6UmapDMXJIabYCcWAOUJumjLs0As4tUWFAtNIiYR90G25ussbNBi23UAdtqTCUDeHerGtva + +blkAFtggjplqFSNOazjc8q16CqxQCvjYX2REtXFSlSS01eUmaG6xEyaQkD0VG3LNUPn3wzgufmMs6Uq + nCMnfKjLmfXPGk/1mONKtxIvdSrxSqcFXmq1wLO1SjxdYSyNuDdlACvwQasc19sVuNFthhs9FrjWb40P + qD3eHHHD0z02OFfDupavi23507GzxAB7yo2xr8IEB8pNcYRt+Tjr0ukaOS7UKXFfkxKPtajwDM/1pwH8 + 4qAcLw4Z48qIAV6QDGAjXBkzkQzhF4aN8NyAAZ6ZPQ1PE8/0TcNT3Tp4rEMHDzXr4P46HdxbOQ33VOrh + YqkeThdMY1uchn0F07Gr2BCbhRlbLjSPmTS88GiVGgNVGvRXatBXIaDFbOrhfsYMgW4ud3FbR7kFmoW5 + zndWmqqHcpaV6cZoyGUdZR5ryTNHe44YBtQMg0VmkgG8sEyBxWz3S6jvVvK6qypEb2Dmuv8ygPkZY9um + GiXzlBnOd1nhwV4rPN1ndccANsc/GB9f43P/N+vCO43CAFbhepua7U+Na10qXO1R4t1eM7zRy33FMN6M + ZU80y3FfrSnOlOnhIL//9lwdrMvRwZI8HSwsNJRGuZpXbIr5LBcIQ5hYUWiCNbxvMST0hjIlNlH3bqLe + 3cZ731ulwpFaNY4zfp6kvj3TYs+4ZItlRdRibLet2XJUst0WiKGeU1RIT1aSKymRQM6UEGeGxL9gjsQE + NVKSLJCRIoYttkRhugXKqMWqRS/gXA26C8zRV6hEN+toR44eOnIN0ZWvJNezxkCZI3oKyZXSNKiPl6M5 + UYwYIMNgjjnmFTDei57AYjSwHCJbg2XpZljKWLk0VYkljJeL0pRYSCzg9vmZ1Obcb4ToydSiMc0ChfEq + pESQ84XLEBmpQEyMSjKA4+KoCdPMUEiuVlxqjaJiMTKKJbILRQ9g8kJym4RUBaITTREZSy5JzZjAayZS + V4qev6HhuvD1mQYfLx34zdRB4CwdhAVNR1ykCdKFAZxpgxJqrrI8F3I2J3JMGyQx/oQEmsDPxwD+voaE + EQL9hAksR0QIzxslnqcFUhM0PAfvhTFSTFGSwfudMoBlKOS1S2P0URmlg8ZwHcyO1sH8BB2sZowX5tw9 + LTbMe3Zs+7bS3N3P92nxbJ/53wxggzsGsAFO5+rjgjB8ycUuMf9eKjHHRb7/ywUK5ko5HhTGL2POU4zl + TzEHP0E8yjj0MOvS3SUyXGQdO5tngIvCSGZdu69EGMDmeKxWi0cZ9x5stMTlWua9asYIto2DFczTbINb + q+ywvMQGw8wFTaw3JdT6GcwBSaFqxISaUf+Z/c0AnoIYEjoxQoOUSDFHsHgm1shLcURZljtKM92QwxyQ + ys/iQ/hug/je/E0QOcsY4bOMEO4nzOApEzg+UPQAJpf/mwFcwfciGcBiCGjRI5jbiyLI+1lv0sNNkRYp + Q3KkHEkRJoz5JkiJ4XZqiJwoJUpizVCbbIWOLGf05rlJJnCDGDpaGMB8bxmRwgA2REoUEWtyR0+IqWXM + ee/k6jlW1L5a6fcK8cfSTOYTgew4Q2mkoZw4A+RxuShehooEBeqTxbRYGvTwHHOoT0ZYP+cnm0p/htjO + 2LWfMetojpLvVoGzmSa4nGmI+3MM8ESRDM+Tbz1brWYOYB4gv3623gZPM1c9Qh5+NzXB2aRpOBangyMC + rFPH0qbjWLYBjvId78vRxQ5ia54hNhaaYiV50ST5/YAYjjxRH9Xx01ESPY3P444BzPpZGTsdTRls01lK + qQesMIBbiyzQyfzWW2mD/hobzKb+EJy/i7G6rVSBFtarliLGH16jM1+MpieTDOAVTTbY2MZ8Sg65q02L + PR1aHOiyxokhF5yf540zY544NuyBA8Oe1KIOGGce6KLmaM5WSjGoQxjA1GrCAO4ot+Y1xfXtMFTvgOFa + e2pI3kehlrGKKKQOYdzvZf4dLDfDSI0FJlmXF7faUBdZSQbwImqPxa22WNrmiMVtDphk/Byrt8acSgv0 + MK+08/jOInN0l1DPlFmhr9wGPYwvswstqFttpc4twgCeZExbW+eB4wtT8Ni+BugkRTsgOtRS+hEkKkSU + FncMYA3C/M0lCCN4ygAmafrTAPad+oE6ThjA0VYUsI7ITXGVev6mxdlTzDogK8UJOZkuFMDC6NWDm6uu + ZPSKf9F7ephLP6J4i6HUPNVwc5PD0dEIdrZ6sLXRYzkN9oSXu7H0z/xYkrG0KBFgtaiggK7PsGFgt8ec + QkeMF1pjgi97AYXd/FwZhllRWhKMUcFGUBRqhKIwUxSKoSDD5KhhA2pN47GZ9uii+O7KcUBXlh3aua0+ + 0QzlbEBl4YaoYgCsiVWigduaJQNY/OPCAc3pbGzxZsgLMUaanz4KozVozpuJuS1JWD67kGI2B22ZgSgM + tEXuDDY8T17X0xh1fGZtM43QxefQ6zUNfR466GcwnwjWxWo2tO1MYIfZOC8XO+PRUjdcKXPHaxXueIt4 + u8QFr+ba4ApF+ZMk7Pez8V1k4jrBBrw3ygBbwvSwLlAHq/x1sIbluhAdrA/WwZZQNio2rHOJOrhM/GUA + iyGga/RxtdUYtwfN8c2EFt8vtMbPS+zx2won/LHaBX+scyNc8ftaF8IZf6xxAbiO9cQaZ2ClPX5fZImf + F2oINX4kvl+sxg/L1Ph5tRa/b3LA79uc8fsunmO3F/7YMxPY7Q/sDcEPm/1xfZEHnm8zw92l03E+Xwd3 + F+vgyWZj/HuMhHCFLb7a6oJvdzrg+73W+H6/Bj/to0DYa4Yvd5ji5nre+6ppeG/pNHywzADX18jx6SY1 + vtxuge93a/HDXjV+2qvET3tk+GGLEb5fbYDvFxniuwl+3wE5rvUq8TaJzz/alXi2VYnHpeGbWHZqJAP4 + ufEZeHFBIF5eHIl/LInD48NBONfggANMVAdyDHGKxOe+WjM8TqH1fDuJbrcGrw9a4v1Je3y+yg3fbvTE + 1xtc8dUaB3y+0gY3+Ww+nifHR2Ko5/kKfncFbi5W4NOlany1UosvV1rg0+UqfLxUzu9jgvdWmODtVUZ4 + 8w7eXmmEd4mrKw1xfYUhbvE7f7ZcH5+z/JzrX66R8Zpy/LDdDL/s0eCXvRr8zmfw2x41ft1rgV/2WfL5 + 2eC7fXb4aq8jPtvnghsH3PDhPje8sc0eL6zR4LGFpnhgrhHunztlAD84aYX7Jq1xecICZ0dI3AYopAfU + ODVqj7Njrjg34oFzg2440+uI061WFMIqHKsyoTg1wMkqQ5yuMiaMcK7aBBdrDCkAdXFPzTT8c1CGGyu0 + +GID39V21pt9vOcj5vj1tBZ/XLIBHnACHmYde8ITvz/FevPMDPz+LPHcDPz2/P9iFr57dBaunZmJ13b5 + 4PGlnjg/4IQdVQqsy9XFJhLXg/WGeGS+Bd48wO/9gBt+fZX18B1f4CM/4JYv/vjcHX98xrr9iQdwwxN/ + vO+O315jvX2J9f7Zmfj90TB8eSYYb27zwuOLnXCwgySxUMwbaoj+JBXGcrywuDwKq+uTsaUrFwfHq3Fq + cQvuWteH+zbNwf0b5+C+jbNx3+YB3L11EJe2D+E8cXrXCI7vHsXRPeM4sncejuyZwOFdE9i5aQjrlndi + 6WQzJkbqMNRfje6OEtTXZqOqIg3FJYnIz49DVnYEMrNDkJMbjIK8MJTkRqKc2yoy/NGY74vZ1TOxpncm + HlwVhDd2BeLqUR98etoDX52xwzcnbfDTcXv8Qvx81Ba/HrHFz1z+8aQDvj7HOnvOHrcu2OH6ve547z4f + XDkzA5e3u2L/UnesHPTEaLsPOmoDUVMegvRMb8Sn+SAuMwBROaEIz4lESE4EgrOjEZIdg7DMaERkRCMq + PRJRGZGIzoxC5N8Q8TeEE6GZkQhND0doSggiBGJ8KdCdMctLDV8XEwS5GiPK0wQxXuIPOIZIC2AcDpAh + wccI0Z4kzu4miPNSIcnXGsl+dghxksHPzgAzrabBU60DV5UOPM114CNMYOaXQDtdhDjqI1gYwA7Tpd7B + gcIEttdBkKOuZP6GEcLwFQawGAba33U6/F2mI4D5LNBVD4FuPNbdACFeJH4+csQFmCEl1App4bZIDbNC + fNCUARzhQ+E/Q8n97mCGAqFeJOSeRghjngjzlCFshgzhPmJefeWUAUyiHk2ymhCpRmK4GZLDKY6I/HAS + vmgLlCZYE1bIj1EjJ9IMacxzyYEknsLspWCImTkN0T7TETNLl/c2ndBDlI8ut+khzkcYxcZInGWKRL// + GMBiSOi0YLk0V3B2kAw5zHNZM3SQy3xVwrKMuavOVwdzSMDE3Hy7K7U4XGeJ0+02uNhni7vn2OGhUUc8 + OuaEx8eJuWKONjc8stgLjyz3xr1L3HFmri2Oj2hxZtwGZ0ZtcXrADke7rXGgzRo7KBLXlVJokVB2MZe1 + BOigKYhgnmsiUf7TAC4OEj2AzVFCIl8aRmIdqaWoo7hLdpTQnGSPxlhrVEeS/AaZoFjMH+yvi9pQA3TE + m6NXzPdKkdMdb4IBis6JbBK/cgesrnbGmmpHrCVWVTlgaSlJGAXbEhK5xWVail71nR8GrbC0Wpi//KyK + JI3kTTKAKVRGiwhh9ArDl0J4goJ9lGJ+hOvD3C4wVGQklWJ+XzHviDB9FzdaYEmjFgu5vKBOI22fYK4Z + r1JijKJGMoHLeR5iqHSqJ/Awl+dWqzDJfSfF8DHVvA9hBvOaApNVcizk8YtqFFjA5fESQ4wUTsNwAflH + mQGWNaiwvtMSW/rssKZNg5XNwuxVYk27Cus6zLC2k+hQY00rCSSvOZ7L+JclYIyJfJ67mOKYZFrMbby8 + 3BwrKdrWlWuxmaR3W7U91pOALqGIHosyxmCQMeZQlM72lxMK9LKed5BLtniTa3ko0ehBPuVljTZfR7QH + uKFVGMBsxxU+UwZwjZ9WMn5r/bWonmWBCl9zVMw0R+UMFarclaglj2xwkaPF2RRtfxrATsYYcuMz81QQ + fH4ecgx6mGI2edmQnxxzw8wxl2JsmMJsJFFLkWGNvgwr1DO+F8UaUxCZ/mUANxY7oYmoy7eT5n8vSjGT + UJamQWU27yvXltu1FFOMS+FiGGhjZCfIJIieff9lAFe6obfeC7ObvTHc4Y/x7iDM6w/G/NmhWDYSg9Xj + sVhJrBqJIxKxYigFy+dkYHl/Nlb05WNlfwlWzanG8sFaLBqux/yRekwO12HBcAOWslw2UIO5nQUYac3B + UHs2BomhDi4TIx25GG3JxtyGbMyvyWD9TcaaynhsKgvB1iJvHCz3xvnmWXiwOxCP9PrjyaEgPD0SiHs7 + XXCSovsI6/Fpip7LTQ54qNcHD84JwsmOmdhe74YNDd5Y0xSA5Y0hrIehGCoPRV9RCNoKglCb7YPCZFdk + xNghOcIO6bGuyE32RUb8LEQEe2KGtzNsHS0lA9jUzARmFnJYaOV/GcA2NgrJBP7TAFZLBvAUzJVT8/6a + ywyhVXFfcznseR5naxU87MyZP9QU5E7IjfNGeXoA78MbyVEOiAnVMt6qpD/ehHrLEcBY7CvMXxdjeLma + YibrpTCABTy47OFuhpneWvjNssGsWXbwmWkDTy8LOLuYw85RBUcnc7h4WMLNywbOhJe/K0JiAhGXHofM + omw0dDZjydrVOHP3JTz54hX86/138f7Nm3j/+k18eOMTfHjzU5af4aNPvsSNT7/C9Vtf4oOPP8U7H1zH + O2Le4A8/wfUbX+CTT77GLeImP7/5yVfS8qeffYvPP/8en3/1Iz778gd8cvs73PriO9wgrhHXv/qe+AE3 + v/6R+AE3vvl+Ct9x/bufcOuHXyR88sOvXP+Vn/2MG9z3xjf8nMuffvObhM++/ZX4GV99+z2++eZrfP/1 + Z/jhy4/x9fU38dk7V3D91Ydx7eX7cevV+3Hzpbvw3hPH8a/79+Ifd23Dq/duxb8f3o03iX/cvQnPnF6O + hw+M4r7tXbiwqhqnF+RTXCfjYG8U9rWH4FBnKA4QO9sDsY51a22LDzayrWzqj8CmgVis7yf64rB1KAO7 + xkqwa7wcmwdLsG5OITaPlGPvogbsWVSLjSMFmGiKRHeRFxrS7NCcYYeeQjf0FbpSKDujr8ABg9STwgCe + LHfDkhoPrKybiRW13lhU5Y75la6YW+WBwTIXtLP9V7Od/90AjhAGcBC5hOgFHEreEG6EiCgZoiLICaLk + iI9WIDmW+TtBMzUMNPVn8V8GsOh5oUIWtaDoBSyGa8uIM0FmrAnykpWoyLVEY4kjOmvc0cH81F411du3 + ucwWTaWMJ2XCwHVAm9heYY/aQg35oALFWTKUSAawEmXZZqjKZ/zkMc08R0eDM7oaHdBeZ8tjxbDR1tLI + BuXZ4kdVc+SnqSQTuDRXg+oi5lGipsRGQm2pHer+MoCtUFNpi7pK5ttaFzTVuqK50R31Da7kqubIyDQl + +D1yFWioZdyrd0F3rTPm1DljhPcw0eiGyQYX5j03rGpyxwZiC7G1zgWbKhywgfp+De9B9L4Rw9euzTLH + Jq5vzrNgOTV87Rp+R2ECr8kwwbosU2ygVttUrMKGEjXWipxUwRxdYYF5JeZ8vyq+QzX6ytXoIXfprbbC + nHpbzG22w6J2eywjB1naouW9qLGtyQK7hQHcbIVjzZY40XzHAO60woVeB8kAvjgohmH2woUhb5wb9iH8 + cG40AKfHAnBmLFjC6blhODURhtPzIqd6AAsjeEEMLi9NJJJw99JU3LOEWJyCSwvicWFuPM6PxuCCZP5G + 4/J4JC6NhuJ0P88/MJPXm4m7xokxd1ymHrs84YFLk9Q/8z1xckIYwC7YP+6KI/Nn4eTScFxclYx71mTi + 0qpsnF2Vh+NrinB4fTkObqzC/s212LepRsKejdXYs74auzdMYSfXd7DcvmkK2zZWYvuGSmxbL1AuYcua + UmxZV4ZtAmtLJWxfV46tdz4X5Q5eZ8emKmzfLEqed0s1dm2txZ6tddhL7LmzvHtLLc9fgU0rS7BxST62 + MBbsmMzCvslUHJwXi8PzgrF/2BM7yVc21RtjY4U+dtca41SbFnf3OOKhHmc83OWEhzsdcV+bHc7WWuBI + hRl2lyuwnbxka4UlNlRYY5Xgc/lqzM+RYx7r5YJ8MW+tCkuKzbGUdUbwu4WlFtKf/pbwmFXV1thQZ43N + PN+2WhV21siwV/RUbDDBuVY57iFPeqTHAo+zXjzaosGDdWa4p1yOE1m62J+qg73EvkxdHMoxxZE8FUs5 + 9qYbYWeKPnYQu9KMsCvdGLvZTvawze7P4fnzTLA/3xQHC0xwiHzyIHGo2BhHK2Q436RhLrbFQ/9jAIvh + n+9uNMcF6vET1XIcJPbVKrGnRi31AN5QaI7VjAOi9+/yFLaZNLanTKVk/gqIdrQuU4GN6QpsTjPFtnQ5 + tqfJeW8KgiXb325+vofxZHe2CttyldiSw3ZJLrgoXR/zUqdjNEkHg4k6WJA2HTuLTHGSz+FCpTEerjHE + S416eKtVH1fb9XCrywCfdhnii34Zvh2x+K8ewN+MaXF7VINrAyq8P0eFtwfUeHvEGm+MO+CVIUc80WOD + e9hOTzXaYA85uDCAJ7NlfxnAbVkqNEsGsCVqhAGcbImCvxvAQWL+3ykDOCTIDKHB6v9CWLjFfyE8QhjA + wsi1RkKiPVLTXZGe4YaUNBckUWsIxMfbIT7RBjFxVlKP4DBpXmANIqnTRBlOHSKZv/9lAN8ZCjpajbgE + rWQA5+S7oahkJuGDvDwPpKWQK8WrkcxcI/5QmB9vhIpUIzSw/swuVJLTW2JFnRU2NNpiZ4sddjVaYhv5 + /7Ya0QOY74ltY3uHtWQAi1GKJsjfhhn/xmpsMF5ri9mMjV2l5mgmj68vlqO2RMm4Ti5dYob6InM0FqjR + nmeGziwTdKbrYXYm33O+CdazPZ1rc8EDHayDbI+PdyrxbIcMV9pkeKlNjStNZniqSoanKkzwAst/ss28 + 06jAh8IAloZ/VuPmbGtcH3LA+yMufLceeHbAEWfqWOcKpmNT/nRsKWL7ECPJUeMcLFfiSKUKxyvEHJ8K + XKhW4j5+vykD2HzKAJ5jhhcHpgzgF4b18cKIPq6MshwXvYG5zG3PDejyOjp4fmg6rgzp4rk50/Bk93Sp + J/CjTdPwcIMuSyM82GCMu6oNcLbCEMdZfw/Xst7Xa7CR2mwNn/Ey1r25NVrpj0TdpSp0sQ52M7/0lmnQ + Uz6FrnILCZ3MPW2iV7UwgFP0UJaqx2Ujqfdva77oraVGB3NZL9un+HPSPD7/Rfy+kgFcYoIVZaZYyWfw + /9EAbjDDmXbxxxALaQ7g51i+2KbCS00yvNpgitcb5HirXoEPms1wvV2DW50a3Owyx0fdKnzQa463e9V4 + rZvPr90MTzcp8Bif7d3VJjhRbIC9fB8b+T6W5k3H/EJ9TPCdzC02xQTj0YQwhAuMsKSQ91Iiwypq4LVl + SmkkzvW8983UjDt5vweoT4/w2R1rssLJFnvsZTxdJIxZxg9hnJSTaxSQd2SlqpEu5rymRo+PNUNcnAZx + MWwfdxAfb4HkBEukJmuRlWKJ3DSt1LOxIkP0ptZIz7IzjzEgxxhNjLktOfrcxuuU2fBdOaGnSAydq0Ut + uVZDojHaUk3Qx5g2kmuOSR6/MEeDJdlElgaL082wiLFyEfXrQuq8+anU1SlKTHB5LrXcuJgyMscSnZk8 + X6qW2kKFBGH+hsrY/hWIjhHDuyt5zwqkp5khN9cCuXlqwhw5RAavmZ6jQho5TXKGCnHJPCbeBDHUi4lp + 5khKUSGGbT4wWAczvHTg7aFDHTJlAIeH6iMxWiY9q7wMaxTnOqAs15lcjxpH/GmEzygsSAY/H0MeY3DH + CDZGKONeuOj1GsXzx2m5nwXS+EzFHxPFFCXp4o+KUVMGcEGsEYojWVcjpwzg/igdTMbrYG0681qRGILd + Cg+3W+PRNgs80qrCU52sO91KaQhoMQfwww2GUwYw69CpXH2c5ju5UGSGCyUanGeePVugxHnm3kuFctxb + qMCjjDePs/4/UarB42UWeJjt5gG2r0slcpzLM8bpbH2czzHEZebG+4rk/Nxc6ln6aKM1HuS9XKo1x5lq + BY6xTexj/dsq/vzHNjXC3NVKHV9BDp4TrkIS47+YvlSYvwLRYSoJsaJnNBEv5gSOYMyN1CAlis8o2pLc + 3A6Fqc6say6SAZzG7SnhGiQIA1lMnzrLGGGSAWw81RuYy3EBRpIBnBmuQB6fd3GMBmWxGlSwFAZwNeN+ + JXNAYagpMkOMkUANkRBsiIRQE8SFcj3CCImRxryOOIcMhVEqVPN9tfMd9+W5o4vvu4FaoipJg6J41Z05 + gP9jAOck8dxpFijPsqYmcERDkQOqcqxRyO0ZkfpIi9CVDGAxyll+oilhwjxpLPUALmf7qE0yQ2sS41ui + GfpYh4e4z0SSKZYkM/7zme5kuzlIznCSHOrMHQP4gSwDPFFgiucYA54j93qevOP5Wmu82GiP52vs8Djf + 7b3Z5ARpejgp5gEmjiRPw1G21aN5Ym5h8qIcXWzJ1sWGXAOsyjUilzAgr9BHX6IBmmKmoyZ6GspYF0vj + plARMw1VsXrUdErGEhXzPvM/42lLgQU6SizQU2GDvuopE7an0hIdjMXNxQo0MmY1kmM155miLdcY/eQr + kzUarGi2weYOO2pOa+xqt8TuDi32dGpxlPnp3NwZODvXCydGPXFodAY29rpggnWwM1eORvKiRvKONmqW + thLbOwawuK49BhscMdHqhnnNbsy71D/UUb1FloQGfaz3fcIAZn0eJcecLwzgNhtp2OdFzVospP5Y1GKL + Ra0OWMAcP95gjUHxx6Myc8kA7mId7y3TMpczxlGLDVTbYzavO1hijQXUUMtK7SUDeIJxZnWtO44uSMaj + e+uhkxBpj+hQEhtCGMCRQVrJAP6zF7CAMIGFASyM2EBvU8IEIT4MIv5KxIQwiNzpAZyZ4MTSAamxdkiJ + YwNJsEd6iiODjTB7DeDuagBPD6Vk/np6COPXQoKHmxrOTjLY2xnCzsYANtb6khFsb6sLNxcGL2/xY7ga + SSRheSRXJUnWKE9hhU61RKvUm9cCA5kqjFHwjmTI0ZNsyoZFohRmhKxgI2SLH7KDFchlQyyONENtig1a + 2IDasp0JR7Rk2KFBjKMeq0QxjykOM0RphAmqGCwaEpmgU63Qle0gGcCtmTaoY4MojmSADDKQGnRbvjcm + W5Kxak4RFrfnoT07BIXBDsj2ViPTnY3KzQTFboaodNVHjTMDKdHmqoMOBvPeWdMwESXDulQN9mRa4WKh + Mx4pdsOVElf8q9QV7xLvs+G+zkb7cqY5niFhfzjFGHcnGOB0LAVF1HTsYSPeET4N28KnY0ekLrbH6GIX + P9vHhiEM4LPEXXcM4Gfzp+FVBuT3G01wg4H6KxLv7+Zb48cl9vh1hTP+WO0KrHMHNnoC693x+xpXCdL2 + NW7AShdgqROwwBa/jlvgx1Fz/Dgi5m8hJswkE/inlVb4baMjfhPz4O5yxx97ZgC7ZwK7/FgG4vuNvrg2 + 3w3PNStxMV8HpzJ1cCGX5IsC4Z8DJCTLbPDFFmd8t9sRP+23xk8H1fj5oBmhwrd7Zbi93QDXN07D1dXT + 8NFqA9xYL8PnW83x9U7ez34tfjqgxi8HlfhlvwI/bTPCD+sN8dMyI3y/wBhfjMhxY44C75Es/rNbgSsd + CjxNMvqU+NcbSdNTcxzwDBv2lckAvLgwEi8tiMMTg0G40OiMo0xYhwsY6EjO7qWgeqRBgyeb1XimXY0X + SED/OaDB1YX2+Hy1O75Y54rPVzng1lJLfDSpwocTsinMl+HjRQpuV+H2Sgt8u84S36zV4vOVJGXLZbi6 + whgfrDTGu6sN8faaKYjl91cb4aNV/N4rDHBr+R0DWIDrX64xwbebZPhhhxI/7eJz2qPCb3vMJfy6T41f + xTPZZ43vD9ji6/0OuH3ABZ8ccsPHB93xzi4nvLLRGs+sUOER3tuD88z+MoDvnbTGpQkLnB5RM/BRtM5R + 4/iwLU6SrJ8a9sDpQXec6nWi+LbGyQZ+VmOKU3yH5+pInBspiptluL9FgQdYPtRkSKKui9eGWO+Wq/Hl + ejV+2G6O7/fI8dNhBX4+aYbfLmrxx312wIOsX4+54bcnXPHbU2745Wk3/PqMB3559n/wjDe+ecgbH530 + xD+3e+Hhha442W2LbSTN63P0sJVE9XSbGZ5b6ogPD3viywe88dsrrINvzQI+8Aeu+QCfeeKPz1i3P2V9 + vyl6B3vg99dZ3//hhj+em4kf7wnAzUO+eHW1Mx4cs8H+ZnNppIEFTDDzs+2wtjICu1pzcLi/lAmhBheW + tuOuVV24d30f7tvYy7ILd63jtg0duLSpCxe2duPstm6c3NWDIzv7sX/rAHZvHsSODbOxZXUfVixswdzB + CvR05KO9JQeN9dmorsxAcUkSCouSkFMQj8zcWBLGKKRmhiMtOwwZRE5mBPIzwlCc5ofavJnoqfLCyl4v + 3LPSF//aPQsfHp+JTy944MtzdvjmrA1+PGXHZ26HX0444LfjDlL5yylHfH/WEV+cscWt09b4+Lwj/nna + BQ/tccTBJZaMb1ZMYvZoq/RAZZE/CguCeH1fxGf4IibLD5HZQQjjvQTnRiA4J0ZCWFYMwjNjEPk3iPX/ + G8IyohGaGY3gjAiEpIUjPDUU4XF+CAlxZw6wxCw3BYLcSbS8ZIjyIrnyNkA8iVbsTDEHrx6CxBDKzkYI + c5cjhvvHzLSGv4MpvJlPPCymzF8nuQ7clCTTGh342UxDgD2PcxTgsSyD7adLCHTQQbDTlAEc6k7ifMcA + 9nMSBrCuhAA3PQQwp/m7G0oI8uK+PqaI8VMikbk0JcwGSaFayQCOYu4M8+b9e8r/C8GeJOQeJI6eMoR7 + KRDuLUeYjwIRAVMGcFSoIKfCANYw/5GMkpimcz0vTIMCbiuOI/EncqM0yAo3k4xbMbRzgp8h4nyF0Tsd + 0bN0eU96iJg1hShfPW7TRxwJajzJ6p/mb0qg/I75O2UAZwgT2N8E2Twml6Kj0Gcayn1ItihE6ilA5pCI + rSLx204ScrjBCqc6bXG+3waX59jiwREHPDLXCY+NO0nlgxMueGCBGx5Y6oW7F7vh7DzGkTErEikbnB+3 + w5kBWxyiIN1Ogbq+zATLSATnpepiMHY6eiOno53iozlcD40RMlSHKVFKAl8YoEARSbwwf6uirFEXR2GX + 7Cz1OhRoI1lvIi+p4XMqCzLlMczB5AN1zO0d8Wp0JZijI4bLFDmzkxQYzRTDQFtjaaktCZM1YUXxbYUF + BRSFJVosq7Cl4LaSDOAFxOIykrRKLaHBogpuK1NJBvAEhfE4IcxfMWyzMG2FeStM2z977v7Ze1dALI9V + KTGvTo359Zq/MMn1eaL3b41KMoD/bgL/3QgWy2IfMVewMIwl8Fhp7mAK75FyE4yWGGGs1JilMQYL9DAn + j++PGC3Rx/waBZYzj63ttMLqDkusblVjNeOmwJp28zvQYFWLFvPLFJibz+tm8TukG2KM5bxsUywQvYFJ + pJcVqbCSAm59mRU2l9thQ7ENllCYj0cbYyjEEHMCTAgF5virJPQHmKPTR4nWGeRa7iTk7mq0eNqg3ccJ + 7X6uaAlwRp2vHSq8LVDqbY4q3ykTWJi/YrnMxwzl3iqUeylRyeNr3GSod5GhxcUU7Q4m6HEwRp+jCYZd + +cwYF/7EEOPIoIcJhnxlmEsBNxGtxRgF2WgCBT25YE+KmJ9HgcIYCqN4MU8OxVcyhUWJM1pKXdBY5Iia + PBtUUPgL1OTaSJ+1lrmivtABJWlq5PG47ISpnr8CBRTzf58DuK3CFd21Huhr9MJQ+yyMdQVK5u+SkWis + X5CKbcuysXNVHnavLsLuVWXYuaISu1bUYc+KZhxY2YWDq/txcO0I9q0bw87149i2cRxbN4xh+/ox7Foz + zGMGsXV5HzYt7cYGYh2xfrlADzYs4/YlvdiysA/bJjqxc7gJe+dUYk97BnbWheNgfQgudUXj0cE4PDMW + ixfnx+PlRXF4cjQQd7c740KTNe7pcMRDfZ54eiwET01E4/JgCI70B2L/nHDsGojFtoEkbOhPx4ruNCxs + S8V4SwpmN8ShrtAfeSnOSI2xR07yDJTkhqEkLwapyaEIDvWBk7s9zC3NYKoygZlGDo3FVI9fKysT2Noq + JRNYrIs5gP/XABY9fzUKY1irFXDQKuFkZQ53WzW8HTWM1xYU2E7IifFCSYov348HRbwj4sOtEBtghkhf + xt4ZMgSyXvi6GmMGc4mniwm8Wa8kA5h10EvM/+uphq+PFQID7BAQ6ABfX1t4UM84OiphZSuDrb0Sjm4a + uHpawWWGLWYGuiEiIQQJmXFIzU1GRUMFxhdN4ODJw3jkmcfxypuv4e2r7+Gdj97H1Rsf4+rN6yyv4+Nb + N3Htxk1c/fga3nv/Q7zx1jt4/fU38OYbb+H9d7nvBx/h6tWP8SFLAbH88cfX8cmNz/DZ519I+PSz2/jk + 9pcSbgh8OYWbX31FfIEbX0/h5jdc/+Zr3Pr2m79w85tvuc+3uPEFl1ne+up7fPb1T/j8m59w+1uBH/DV + t9/hm2+/wvfffIrvv/wY39x8C19+8DI+/fcTuPWvh3Hzlfvw8fMX8M5jR6Xevy9d2kRskIxfgefOr8Fj + xxbh3j0DuLS5DedWVeLkfPIp1rt9XaHY0xqIfcSetkDsbAvAllY/CnN/bBEGcF8o61cU1vZFY21vLDYM + sM2MFmL7WAk2DhZhrTCAR8uxd3ED9i6pw6axAgrnMHTku6OOGrAxzY6i3QXdeU7ozXMg7DCnwH7KAK5w + w7I6L6xt8pOwvN4Hi2o8pwzgEhe0ZtugKkWN3BjFfwzgIH1EcPlP81cgPMIUkeGmiA43QQzLhCgFUuPN + pR8uCzLtUZQlhoC2Rbb48S3BDJnxYhhoFaGQ5u3KYdwR89zVFQmD1xU99Z6EO7pqGR+rqUcrpkxgMfyz + MH+nttmiOs8cZZlyFGea/scApvivKrSSeu+21LhIBnCn4HM11MPMa6LXcFU+dXCOFYoy1NKPsaIHcGkO + Yy2P+9MEloxgxnWB/zKAef2GGucpE7jBDXX1LuSsFsiiLhcoyFejvtoJrfy8s9oZPVyeXeOIQR4zwuV5 + 3L6Y320Vsb7BFZu4voHfa32BNVblaLA0XY7lhOgFvCFbjU25FtiYYy4ZwGIeYGFeCQN4fbYMmwoV2Fxi + ho1lGqyt0GB11dQftSaZp0fL1ZhNdJG3dFdYorvKCgMNdhhvssWCVltp2LWlLRaSAby1UYPdDRY41GSJ + Y01anGjSSHMACwP4XK89Lg644cKAB84PzcC5oZk4M+yLM0N+ODPiT53khxMjATjK9aMjQTg2FoQT42E4 + OTcCpyamjODLSxJw15JE3L0kGfcuTsE9i5KlXsAX58bh3Gg0zg1HEuE4PxyKc4PBONXngzOzvaUewJfH + vHDXmBvuGnfBXRNuuDzpjgvzqcnmueIwOdeBcWccWeCDk0uCcW5ZNC4sS8QZXuf4kjQcWpaFPSvzsHN1 + IbatLcbWNVPYsrYIW9aUYPNatqFVxdiwuhjrV7EtMQetXUOsKsDalX8iD2tX5GLNHaxbTqzIuYM8rGHu + WkusW5WP9WsKsW7tFNavLsAGrm/g8kZe7+8Q28V5VizMxIqJNKwcTcHakQRsHo7GjpEw7Br1xfbZTtjQ + YoZVlXpYUzIdO6qMcaJZi8tdjri/k1yzwwkPtTvhvjYHalErHOE7301utrXEHJtKtVhHbreiQAyHR76U + Q97EtjK/YGp6j0VF5HVilJdSS0wWW2CiSENeZ4llrCOra62xvsYCm2rMsLVajp3VpjjUYIJTLaa43GGG + B4UB3GODxzot8bDoocv9TubrY1+6Dnal6mBPph4O5spxON8MB3IU2J1ujB3JhtiWYojtoqctsSPNBDvT + TbGL7XZXtjF25xphb54R9hUYYk++AUt9HCKPO9tgjrvarfFAt/1UL2BRdtlKwz/fxc/O1ylxrNIU+4k9 + VXLsqlJhe6UaG4vI5fidxZCmy1NlWJUq2owC6zKVxNSfKMTyJraxLdy+LUOJHelK7MxUSdiVZSZhN9vf + Lp5H9P7dlC3HikzxI60eJlKmYSRJR8LizOnYXSr+KCaGkzXCIzX6eKlxOt5qmY6P26fjZqfelAHcZ4Jv + hszx7agW31ETiPKrUQvcHtHgkxELXB/R4sMRa7xHnfDGmANeHnDAo3zGl8lHj/P97qq0kOYAnuS9z+Hz + 62aMaOF3aMxivMliTEu3QlmiJfLiLP7LABZDQAcFit6/ZggL0fwXhOH7v/i7AZx2xwAWZTJ1hoDYLoZ7 + FgawmAs4JEz09jXjseYSxHJImELCnwbwlPlrjqgYDcSw0anpdshiTioo8paQk+NGXkQdGTdlAIvRZIqS + TFHNOtKcSS4tGcBarKy3xsYmO+xsccAOYQDXmRN8X018X+2WkgEs5jRcVGWOeWLeWsa/8WprTNTZYrja + UvozTFsJ+XcJ+TPL2hI56oqVaCg0QzPbRkee8r8M4MkCGTawXZ1pccI9rXZ4gJrh4VZTPNlihOdajHGl + WYVn6hR4gtrjqXJTvFitwGu18r8MYDH88yd9fL/DDrg+6oJ3GcdeG3fHE7PtcbKebatUD1tL9bGpSB/b + qFn2UOMc4n0fqTTD8XIlzpQrcIFa6H7qRWEAP911pwfwbGECyyQD+MUhfbwwqifhxbmGuMLyyoiuZPw+ + P6zD7dPxsvhsWBfP9uviqe5peKqDZYchnu4wwRPtCjzSqsS9jUqcEx0c2K7EaBBbm62xgXliRbMddZcl + +kupI4vkaC9QoEP0PGXeEYa6yC+dzD8SKrRoY1mVaYwK6iZhBFemm6ApT/x+rEV7PvdhHOpj/BkuoXZj + vFpcocKSMrlkAC9nO1pBLfmnAbyK7Xk59eD/GsAnGRfvajPHox3meKZTjedbFHiBMerlOhO8VmeKN+vk + +KDJHNfbLfBJhwVudWvwcZcKH/aI3vYa/LvbHC9R9z3L7/x0szkerlfiYoUMh/kethbqYTm142ShPuZS + s46XihGtjDFeaCCZwAsLjLG0iBqwmPdZqsAqauC1vPeN1Lzbea97WScPUtcebbbC0SYbbGe9m8/40SdM + E8aWsjQzcg4NslO10lQZos4LwzdW9KRne/oTcXFaJMZZIpltOj3ZSuJSOSkalKSrUUeu0pyrQQvP28T4 + WZ+hh0YxP2e+Er3ltphd6YKeEidej3FBzHMab4SmFCN0sT0NZAkPge2DcWNhJkEOtJAcSGBBKvNDKvV4 + KrVsipmEsQwL6mArzM62RnsG+VGqJbLjzBAXIUd4qExq41Gx5pIBnBBP3peqQgbjagbjaibjk0A6v3ta + thnSszVI43WT0syRQJ2YQK2ZzOuncD0m1hgBQTrw9tbBTE8d+PtMzf8bGWaA5FiFZADnMsYVZtuRqzlJ + yM9wQEaiNSJDFAiYZUz9oi/Bz8cIwf5iXmAloiN4vVhLpMRrkRqnQWaSlfTc02LF0McyZMaYIj/GCEWR + upIB3EIIA3hBog42ZBngYLGcuUaLB5os8BDr1EPNCjzeJseTHTI81Wn6lwF8b6X+lAGco4fjmcIIluEU + 48qxPDmOZZviBN/TmVwTXMg1xX18Tw8w3jzEHPxgKXNouQUusx2dLpThZI4BTjKHnuW1L+Ua435yvEfK + zfFYtQUeabDC/WybwgA+XaOQRsrYXWKKDUUyTKQboS1qGkoDpyGXHD0l0BhxAXJpatFI5oEIIjKEy3xW + 0cFTkHoDM14nhptLv7slR/K5xPD9xtsil3E+O84W6dF8dpIBrKJ+lP9lAAtE+BpIiPEzQGKgCdJZH3Ii + VCiMUqOE8b4syhyVrMuVkebSVGX5wcZIDTREnL8uz6Uv6YlogVAD5itDJIWYSJ078rhvJd9VK99vb66b + ZAA3ppOHJ1ugWOiHKJO/DODkGGNJSxSzrtcWOFInuFMbuEm/W+QnKpAWrofU8GnIiNJHXoKJNM2MQCE1 + RzHbRhn3qU1UoSVx6reynjg5BuNNMZ5gjIXEyiRjbEo1we4MYxzJMsUpxrZLGQZ4INMQT+Sb4rliBZ5n + HHu+UoMXam2Y+4UBbCuZ+/flMn5nGOFU6jQcIzc6kjYdh7P0cDjPUOI7wvxdn6WLNWy7y/i+J1L1MZyg + h554PbTF6qIhRhe1sdNRmci6SdSIKRHiDdCcxhzGWNJANLJdSfG1WMtYbIOeyil0lGnRXGSG+nwZ6vIY + I1iXGnOM0ZpjhL5Ck78M4C2d9pIBvLNVS+2pYR61wME+G5wZ88C5CS+cHPvTAHbFJLmh6AFcny5DreAe + +Za8hjCBrSUDeHatPYYbHDG3yQUTjS4Yq3HCYKkd+oqtCC36Wd/7S1QYIkcbq9NiQZMVlrTbYmmrDRYx + by9kzhEG8HzmnHmN1hgmD51dboY+HiMM4B7mjX5quIEqOwxW22NI6KpKO4yU22Extd7KCicsyrOUDOBV + NW44Oj8Jj+6pg050CMlKsBZRwZZsCP8xf//XAJZ6Agsj2Fcpmb9BM+QI9pFJP1THhYlhoK2RGmvP0hZJ + UTZIiCZpieFynB0DjgpeHkbwdDOZMn/dtX/BQ/xQ4mwGezsT2FgL89dwCrbCDNaHk6MRvNxJ1HzN2BAs + pH9eFCTaooBkqSiODSlehTpW8s5UBeaQqPalyNEcZ4zCMH2kBRlI8x6KOQ7TAhgoSfhyQlUojbdCbYYT + E4QLK4kT6tJsUZXABsSglx9sIKEwzATl0TLJAG5jQuphcO3Jc0BHjpgH2AIVDLz5FPtl0SRH+V6Y35KI + NbOL+NLy0JYdioIQJ2R4a5HiIkOGkzGyHdnI7KYh30YHZbY6aHDSQbPbdDTOmIaeECM2KHNsSbPEmXyK + lwJnPF/ojNeLnPEBcTXfHm9lafHPdBWupDCwJurj/vjpOBetg2PEETaGw3H6OMJkdiTJBEdSCIqJ4yn6 + OJU8HecTp+FuYQCTlIsewK9VGZKAm+HzAUt8N2GDHxfb45eVLvhjjTuw3hPY4AVsnCGVf6z3wB9rPYBV + /GylG7DYCb/Ps8fvI1b4ebY5fuhT4vteOb7ul+HrIQV+WGCBn1bY4tcNTvhtmzv+2CV6//7HAP59hx++ + WTsDH0044ul6Gc5m6uAo7+00RdIDZSRjXTJ8sMgKtzc54sc9DvjtsDV+O2pOqCT8dESB7/Yb47Mderix + aTqub9DDJ1tk+GKnGb7bo8Uvhy3x2xEtfucxvx9W4dfdJvh5sxF+Xm2MH5eY4OsJOUWFHB8OKPB6vwIv + 9TBAkfw8R/Emhk15ot8OTw6545kxPzw/GYErc2Pw2JwgXG5yx0k2sBMMXufL1LirSoMHGCgeqRc9gUlA + 25W4wnP9m+Ll4yWO+GSVM26tsMfHCzV4f0KB9+aaUsAY490JY1xdIMMnK8zx9Vor/LjJBj9stMaXa9W4 + tUqG67zPj9YY48N1hnh/vSHeIz7g8lXi2hpD3FxlyGMN8dlyg78M4C9WG0oG8HfbFfhxpwI/71Hgtz0q + /L7PDL/vN8evBzT4+YAVfjhog28POeKrw864fdQNnxzzxNUD7vj3DoqqdZZ4aikJ3wJhADP5/h8GMMlb + vwaHB21wdNCR6244PscVx3uccaLNFscbLCQD+CyJ5l3NMopRczzRo8bTJJXi35nP9Mj5nA3x2pARri1V + 4osNfF87VPhmpzG+O2CMH47J8PM5vue7LfH7fXb4/WFH/PqII35+3Ak/Ej896YIf/w944Mv7PfDBMVf8 + Y4sbHpjniMPNGmzKN6aI1ceOYmPc3WeLf7K+3Tzuh28f9MMfLwcC/54FvOsHXPUBPmXd/Ix1WxjAt1hH + P+L6G1x/lfX+GV98c8EHH+2egReX2OMetpfDFJ2bK7XYWOGIrbWzcKwrB+cHa3DXeBPummzBvSu6cO+a + Lty1qh2XVjbh3NIanFpSjlPLKnByRQVOrKnC0fWVOLi5Cns3NmLryjasW9yGZfPqsWCkBsN9JehsykZN + ZSIqyuNRXJyA/MIEZOXHUhjGIT0nBik50UjOikFSVpSEFCIjIwrZ6eHIS/FFZbYX2ivcsbTLFReWeeEf + e7xx9bQ3Pr/bC1/d5YDvLrHNn7fDz2fZ7k874NeTjviNEAbwT6cd8fUpO3x63ApXT9jixUN2uMT6uWlE + gVGKtyYmq8o8N+RnByArO5j34ovEbG/E5vggKtsP4TlBCMkNRXBuFIJzoqZ6AWfFSQjPnCr/3xCaGSsh + mN9FICIjAuGJQSTS3vD3tYW/pzmCPUjWPBVSL+AoLwNEztBDqLsu/BlPfeymw89emMDMSx7MX55azHKS + w9PGEG4WOnBUEXIduAoDWK0DP+spAzhAMn8NCEOpN3CIox5CnHUR6qLPcxgh5H8MYDH0szCA/dwMCCP4 + eRhL8Oe+gd7GUk+ymEA14kMsCQ2iA1QImylHoKcp/FxNeAxLwp/5MNDdkN9JXMMUYV5yRAjzdxZJ6d8M + YAHxj0TJACbhTGe+zWUulExgktB88e/EcDVJpkqavzdJ9IgmGY3x1ZfM3ih/fd6DAYnpFCJISsXwNLEB + piSnMmnuX2H6ppPICohlyfwNkiOHnxcEGJE8G6I62Aj1wXqo99NBe+g0jCUbYFW+AtsrzdkurHG8yxqn + GUMvDNji/jEHPMgY/yDL+8fscfe4I+6Z54x7F7nh8kIXnJ9vj7Pz7HBh0g4XJ+xwdsgah7vU2FRlhJUU + mktz9bAgUxfz0owwkmSEnhg9tEYaoC6MAjpYhiLm8rxZpigKVFGcWKIh3gGtKWLIWQ90ZXqhM8OD6y5o + iCU5ptCpCJGjKozkLJw5PUpBEmmGthgFWiMM0RplgF4S28FUJeblaDA/3wILRO+QfHMJkwVq6QfBpSRX + S6ttsJAEcl4xPysRPw4K49cM80tVmCxRYpICfbJMgXnCKOWyMGyHKdAFhiikB8pNMbvM5C/0lRhKENun + 5h80w9waQipVU+bvnxAGsOjBy/NIqJRJQ0PPFdsIsbyggffaZClhQSMJX40ag+W8FoX7bAr1OQX66MvV + JaajP08Xg3zWY7z2gjoVVpDoru6ywboOK6zt0GJVuxqr2tRY2UI0m2N5g/i+vCcKr1EKt8FUA4ymGWI8 + zRgTGYaYpABYRuG9ukCD9SVWWFdghRWZFMwUInNYb/r9CT8Z5pBHzvHTEGqp7PZVod2LxN1VjgY38ykD + 2NcZrb7kaH4OqPa2RomHGYo9xZQaFE4+alTOVEvLpd7kc17cTlQxNtS5ydF4ZwjoTnsT9Nrz2g6mGHPm + M3JVTsGF9y96BLubYGQmnyGF4GSUFhMUeOMJWgwnW1HwqFEdZcr2ZYJcqQewAoUU2o1FTmijiBLmbXOp + E+oL7SSI5e5aL/TV+6CjypPb7FGewfYp5gam8BcQc+9UZFmgNt+K+4uees7c1xXddW6Y3TwDw+2zMNkf + guXjsdiyNAt71hfjyLYaHNvRgGPbW3B0WweOb+/D6Z3DuGvfAtx9aAXuOrwWFw+vw+kj63Hy6DocP7IG + Jw6vxqn9K3Bq73Kc2LsMx3YvxlHi0J7FOLxvCbEMh/euwPF9q3Byzxqc2r4cJ9fNw6mls3FsvBYHejJw + tCMJd89Jw5NzM/HCgiy8uiwH/1qZjZcWxePRAV880OuORwe98eSoH15YFIUrSxNx/6SY2zIKJycTcGQy + DQfn52Lf/FLsmCjBhtESrBwuwoLZOeiqi0JJjidS4ymkU2egrCgK1RVpKCxIRlxSBLx83WFpr4XcXAaV + 2hRqjSksLEwkA9jOTglbW2EAG0Ot1ofazOCOAWwCc6UxLJQmsDSTwV6rgou1OdxsNfByYB5w1SLY0wpx + fnbICHdFYfwM5MW6IjPGkYLZBonBGsRSp4g/4Pi7G8Pb2QAezAke5O7e7ir4zbSAv48lZnprCAsE+Nsi + lBw/JNQFflx2dTXjfZlCY2kES2tT2FHTOLlbwNHDGjP8XRAaL3oARyGRea64uhD9Y33Ytm8L7nvsbrzw + z2fxr3dewb/ffRXvXn0D7119m3gL74vy/Tfx1juv49+vv4p/vHIFL77wNF558Vm8/uqLePP1f+DNN15l + eQdcfvut13D1vXdx89pV3LrxMW7duoZPPr2Bzz6/hU9u38LNL27ixu2buM7y+hfXcf3LKdz4kusCX9y6 + 85nAJ7h5+3Pc+PxTqbx5+wt88vlX+JT45DZLrn96+zY+v/0Jvvz8Gr789F3cvvYabn/wAj5762l8+sZj + uPHyPfjgmbN446GDUu/fK+fX4/mzq/HcmRV49uwKPMXykWMLcc/eAVzc0oZTy0txdCId+2dHYldbAHY2 + zcKuxllSubN5Fra1+WFLux82tvlgLdvL6q4QrOoOw8ruKKzuT8L6wSysH8jFqt5sLOvhMuvcroV12L2o + BhtG8iicg9GS5Uy9p0VtkhXashzQnmWHziwbdGdZY3a+7X8ZwOua/YkArKyfhcXVXhgvd5NGnWpKt0RF + ggo5UVM9gMWPNVEso8JNEBllgggiNNIYYdSRYdR34dSUEcHcL4w5N4Y5NpE5PM0GhRmiBzDbwf8YwLnJ + SmQlmKIw1QzVvKfmcmd01npidpM34YWeeld01tijpcJGMoEF2qsF7NHIXFWRIwxf0/+LAWyDulIHyQBu + ryNqGbsqrXgM41Kh9i8DuETMf55mjuIMM5RnW6Ay3xLVBTbS5xIY24UpXFlsKRnAVWXWkgkszN/mejc0 + NXigjnGtpNTmTo8XNYoLLVFT4YCmSke0ljuivdwenURXhT36uX2oypH5zgWLalyxkve2ttoJ68ocsLbQ + FiskA1iBZdT5KxlT12dqsJHbNuWqsSFbzGM6ZQKvy5JhY64CW4pV2FLOzystsF70EKy15vu0wvwaLUaq + LdDNPNZarJSG5uyqtMRAvS3GGm0w2WSFhY0aLG5kvqtXYTPz6d56Cxy5YwCLOVVFD+DTXVY43W2LcwOu + 5C4eODPkhVND3jg55IPjg74SDg/44OCcmdjXPwP75vjiwOAsHB4KxLHRUJwYC8Op8XCcmxeN85MxuEhc + mh+LS/NicH4sCmdGInByIATH+wIJf5zom4XjvTxvN6/R68nreuHCsDsuj7rg8pgTLs915rEuuECcJO86 + OGaHfaMOODTpiaMLZ+HEgiCcmAzDkYkIHOA1djNGb1mYgvWLU7FmaTpWLcmUsHqpQDZWLcvG8sVZWLI4 + E4sXpWPRYmIJsSgNixamYYmEFCxZQNwpl85PwbKFyVhKLFuUymNTsXRJGpbxuGXLMrD0DpZx2/IlGVjO + 6y5bkjqFpXdKHrNkfiLmjcZicigaiwaisHQgEqtmh2D9HH9smuOBDd02WNEghkadhhWFOthSZogj9Wqc + b6NGa3PEfa0OuE8YU82OOFtri8MVWuwuVbNOqLG+0AKrWQ+X5Kgxj+1hknVoXh75XD5LYn6BBSa5z2SR + BcbJY0byycOKLbCw3BLLWI9WVqmxtkqF9eRzWyqMsbfOiHXDCGfbFLib/PXhXms83muLx9rFkJQWOCN6 + L2ZNw/Z0HezOMsD+PCUOkU/uZV3dkWaKrSkm2JxsJGELl7ckm2ArsS2VIKfazmN2ZOtjJznbjpzpLKdh + X5EBTtYqcZFa9N4OGzzQYYcHWT7YTs3ebIXLfBZiGMyjFSbYU2aEHWXG2FZmKs3LuaGQ7YQcbVW67D8G + cLqYW1v0ohfb5VibaYaN5G1bMlTYyuVtxHY+K4GdWWoJuxgTduRyGyF6Di9PN8aCVH1MpEzHaKIO5qZM + ozYwxH5y1HO1fDZ1xni8Xh8vN03DW606uNYxDTc7p+NWhx4+6zbEF7MV+GrIHF8Pq6XyiyE1brP8ZNgC + N0as8NGIDd6jjvj3sB1e6LfFg60WOM92eqTKQvoD6so88l/y0D5qhQ4+x8Y0OerSzVGdYYGyFC0K4yyQ + HaOWhvQUf6j9/9UAjqDGEAZwVIzV/6sBnJzi9JcBLAzf4FAlgqg7gkMU5AliWTG1zuU/jeG/G8Ax8Vok + pVgjPcsRufmeyCvwRGYmz5vIa8aYITVWiVzxw3yaAnV85m05cgwyzgkDeFWDLTaz3m9vssN2MQR0nTl2 + sB7saOL7Yl3c2mGLNS3UBKy7kxVmmCDmCQOuwQ4TdTaMvSImKtBSZEKNb4oGgSJy6UIztLIN/N0AniOG + +mbs3MQ4eqLRDpeoM+5pVOKBRiM81qCHpxv18Wy9DE9Wm+Ix1j1hAL9Qo8CrkgEshiBWSsM/fzpHi0/G + nHF1zBWvDzvhyiDbbacFDlYbYVupLuO3ITYUG2JLiSl2VShxkG3vOLXmSWEAl8pxoUKMxCfH421m0vDT + wgB+YY6AHC8OmuLFIUO8MGKAl8b0JQP4xXGWY3qELjENL0/o4p9zDfDKuAFeGNLDc7N18XyfAa70m+JK + rwLP9Zrj6R4NHmrX4GKTGY7Wm2FXPXMKn+/aJmssbbDBSKUGPUVKtOaZoCWHyJWhvUCJ9iJqmmI+N8Yd + YQC3E60l5qjLU6A2R4Ya6qfaHIVkULTmWaCN+fHvBvBEuQqL/m4Al8ixovQ/Q0D/aQAvobZbQS24ke19 + d50SRxv4XJoUeKhVgSdblXi6wQTP1Brg+SpD/IPP9d91MskAvkF992mXVjKAxbv4qEeND3ot8DZj2Cst + ZrjSpMLz3O8J5r8HavnMqVV3Uqeu4vuYT4wVU5czpoyIUkx1xLY+L98ICwpMsLDQFEuEEVxohFWMf+vK + GSurldKz2yeNpmGNgw0W2FhujoksFXrF/L1papSmqFGQZomcVBukJ1ghKVaLuGgtYv4HcbHk8SwT462R + kjhlFqcnmiOfx1eQt9RJf/ygFsw0Yfs3QF22MZoKzKd4Ro07uitcUE+OU56oQEWsPmoT9dGWYoQ+xr6h + DGps6rQJcp95xHzel4Awfuelaqh1NRhLVWOE24YztBgkZxRTSbZkWKMilRwuXo3oSOVff/L4uwGckiIg + k5CaJkM6r5fK66XyGQjzd8oE1v4H2WJEAPHHEBkCg6fBx0cHs7x1EOSng/AQPcSQXybHKpCZLEaUsURe + JnVytiPKxTDQ2c7ISrZFLONMcICpZP76euuxNETALFNpGGjJAI7nc2ZsTInl9YWh/jcDOCNahvwYE8kA + FkNAd8ROx0jCdCwXeYnv9wjjxcVaDe6pM8N9dQrc32CKh5kLH20xYptk2WqAh+oM/ssAPpw6HUfSDXGY + 3HRvmgH2Juthf4ouDqfp43i6Ac4LE5Ec7nKuCpcZdy4w/pwqUOBwtiEOpU/HsXRdnMk0/JsBrMFjjGMP + 1Vni3gZLXKgjN6tW8d4YM0pNsabAGANJuqgO1kE2n1/aLB0kiN/DAuWIDFQiLIDvSRjiXA8LNEUEn1VE + gAxRwggWwzsT8aFmSGDOEGawGPY5gzkgM8ZaKqVhoIOV/1cDONxHH5E+utSchkgJMpmaUi1chcIIFYpY + ljD+l4UpURIiQ5a/ARJn6SLadxoifacj0k8P4f56CAvSRSQRF2iIpEAjZImRbKPN0Jxii+5sF2kI6JZM + O9Sx7pWyDWTFmCItylgygJOiDZHNOl6aLaaIcaM28KZmmIG6AnvpN43kkGlT01RxX/EH94Ik5X8M4AQl + SqlFhAHcTF3SGW8mGcBzYowxGscYQCyL18faRAPyFT3sSTXAMb7PC+n6uC/TAI/lGOMZxoFnSxhHK9R4 + qc4WLzLXPF1lhceKzSWT/xJj4MkMUR90pHd7IEsf+3L0yXP0sSFDB6vTp7Gu6WJhmi5Gk6ZjIG46emKm + 81700ZFojNZkYzQw59cRzalEEvN+CvM+82OtyJFsW/XZ5mgmj2svtmIcpt4r1nLdXIq9VVnGqGJdqiHH + quM9N3G5t8AUk9VarGyxw+YO5tNWS2wTIwGJadJazLGXMfPksDPOz/PC6bkzcHDEC5v63LCA+kH0AK4m + j6tMFbGdMSif16I+6qywRT+1mTCAxxudMbfBWTKAh6nZ+kusJMwu0WIOecxwlQZz66cM32W8/t8NYIGJ + BmuM1VpgDvN3L3NCD/Nwb6GK59BioMKax9tT3zhOoVJMWeSI5dRia2vcsJTaT/y+ubL2bwZwRKCY83cK + of5qNgj1nfX/0wAWn4X7kTz5qhA4Q8yVJeYCliE6WI3ECGskR9uytEF8mBUDD4M0t8WGW8PfVwkvD1N4 + usnh6W7O0pLQSnBz1sDRXgVba2NYWxrA2spIgo2tMWxtjODgYAwXJ2PM9JRL95KT7IK8JAdkxTJYRTD4 + UXAXx8jQyMrbmWKGNlb4yigjpAfqItaPDZ2NMZYNPMFPgUQ/BtwginY22rIUB9TluKI22wkVyVYojWMC + CTdFVqA+coOEAWwqGcCNbFTtaVMGcG+uPbpzKMZTtaiNU6E41BDlUbxunicWNCdgTX8hlrTnSgZwfogz + 0mZYIt5RhkR7I6Ta6SPFWgcpGh3kaHVQ6TAdde4GqPQUP6jrYyiSRDxJi2MM4PfyOs/mOeD1AidcJT7O + s8f7TGz/TlPiZVb6pxP18FC8Di5G6+CUQPw0nGECO5chx3kmvvNMKGdJEM+lm+A8G+ZlBsB7knTwAIn5 + s3nT8K8qI9zstsQ3Y474aaEjfl7mhD/Wih6/M4CNM6ewwfsOZvAzL2ClB7DMDZjnhN+GbfBLnwY/dKrw + Xaspvmk1wZftRviyV4YfJ7X4ebk9fl3vjN+3ugM7hQHM8+z2kQzg37b44MuVbvhw1BpP8T5O8L72R+rg + qOilXDANTzcZ4J0JDT5ba4sfd9sBx62Bk2pCBZwyw+8nlfjlmAxf7zfEZzsoILbq4fYOru9V4fsDFvjt + mBWPsQRO8Jhj5vhtvyl+3WGMXzaY4KcVvNeFcnw6V4GrI3K8OSjHq7PN8GK/OV6YrcUz/RRvfXZ4dLYr + nqCQf3o8FM9QiD/aH4i7mym6q+xwpsIKF8q1uFShwd0MbPfXKPGQ+BdiswJPdZB49qvw5oQVPlxsi4+X + 2uCDBWq8OyEnTPH2uBHeItn8YL4JPl2pwXcbbfHLNjv8vNUWX2/id14v5jI2wQ3e6/WNRvhokxGubjbC + xwIbjHB9Ld/baiN8snJq7l8x/LPA7TWG+GbzlAH8ww45ftotx297lfh9n0oygH87qMGvYp7Xw7b44Zgz + vjvuim9OeeDLM964dXwG3t/vhtc32+H5VVo8cscAluYAJi7OnTKAjwyY40CfGgfmWOHAbHsc6nfB0X5X + HOt2wfF2OxwnsRMG8HkSzgfE0Nok9y9RtP2DeGXIEq9Q2L0yZIp/DunjoyVy3N6gxNe81y+36+PLfXr4 + 5oghvj8tw88XzPHLXZb47QFb/PoAn83D9viR+OlRB/xIfP+o/d/gjC/vdsX7h5zw0gYK/zEb7KPQWJOp + h9Vp07G72ASPjbrgnS0B+OxkML57MBB/vBSEP173wx/v+OOPD1knP2Hd/Ix1+1PWcWEAf8z1t9gW/imG + n56Fr8/PxNVdXnhhkT3u7bfCGQblI81uONEZgIuzk/HweDUem9eKR4mHJlvxwNJ23Lu8FecX1+DEZAkT + RCb2DCVj71gK9ownY/eCZOxanIwdy9OwaWkuVs4twfw5xRjszEZvcxra6lNQX5mIksJIFORHICcnChlE + arZADJKIhJwYxGfHEnESxI/KKRlxJJSRJIO+KM3yRHOpK+a3OeHUYjdc2e2JD8974/b9M/DNA074/l5b + fH/ZBj9eYP274IBfTjvit1PCAHbAT8R3J+3x+VFrfHjEFi8cYLJbZ4dV/Uw0FBrlJKYFGR7ITA8heQ1F + crYvEnNmIDbHG1FcDs/xR0huCIJzwyUDWPQCDuU9hhD/a/j+L/5PAzgSESmhCIv2RWCAI/xnaCQDOMKD + ZMvDGJGeBgh2m45ZjtMww0YHHpY6mGmrC39HU4S4aRDirsUsZxU8mEvcGHOdzHXgouB+Sh34Mg77W+lI + cwMHiF6/DroIcdBDqKMuwogIFz1EuBLu+ggRvX0dSb7teQzLwDvDP/uJnr9uJvDzmIK/pzH8mRODZ8oQ + Povkn/kqOoBC31eGIC8T+LoZYaaTIWY6m8DHRfQyM0Egv0eQuxFBUu6lkIaJ/ssADlD9lwGcGKlBcgRF + QqgGuWEk/OFa5EVokR2pRWaY2K5CMsloIslovJ8JYkhCo0hCo/wNSXgFOTWcMoFJSCPvGMBJFAJpoUqS + UzPCHBnCAA5iXiUBzmJZFKZCBYVMI4WMGDa5K16Gzig9DJL4LaaYXU8Rt6fJCke7GAN6bHCKbeT8oB3u + GbfHfRMOuGfEDpeGrXGeceDCuAMuTTrh4nwnXFjgSHB9voNkAJ/jPke6zbGBYmFVkS5WFBlgeYERlvIa + 85nLZieIf3GSrAUbojTAGLk+JMPeRijic6qOspbM3u6sGczT3ujKnMGc7U5C6Ix6EvWaSLU0bHRdpAoN + USo0RlOwx5LYRpqiKZTEL0yP38kQfYkmFHYUgJlKjGfKMJ4lx1wSxclCNRaRPP5pAC9mDpikSJ9HgT9B + 8T9RJMc8gWLuS4E+nwJ9QSU/o0gXpq1k/lbJMVgpw+wKU/RTtP+JnhIDkjgDkjkjDHKfEQrlIe4njhmh + qB/n+hhzjDCA5woDuNIU4xTjc3nsvEoTqffuZLUMY2UU4WVGWNykwTKSxmWttljcYoOJOgsMst32Feij + J0+fHEYPvTm6LHXRx/X+fF0MUtALM3kRj13TbYf1xLpuG6zptMRyEt8lDSosqVNicY2ZZACL7zyWY4qh + VB6XbizNzTJB8j+ZZoTlOSqszud58i2k+ZMmYo0xmwKme9Y0dM2cjj7yxdnkkHP8SFj9SWRZ9viaocNL + iaY7BnCzlw1afZ3R5OOIeh9blHtaoMCFddFNhhJhAs8wn4KXGUpmUKh4Usjz+GrGhnqeo8lZjnYnGboc + TNBnb4Ihez4zJ75LF6WECZ5rzFWGUbbdUW9+RiE4j+1qbrQW4wmWrNuWaI9RoTrC5I4BLJsygJPN0FAo + hm52R0+dJ7pqPNBW4SxB9OQdbBO9eINY+qGL643FtijJNENRBsUey5IMc1RS5NeJf4eW2komSFulM0WZ + E3pJ0gdavTHWHYClo1HYvDQT+zaW4fjOBpzY3YzjYp7EHd04tWcAFw7Ow0MnV+HRC1vxyLkdeODcTtx9 + YQcunt+Gc2e34NypTbhwfD0uHFvHch3OEWeOrcXp48TJ9TjFz0+d3IILZ3bh3vMHcd/JPbi4Zy3Ob5qP + cyv7cHy8AicGcnHPaD6eWFCEFxYX4dWVxXhjbTFeXZ6BJ0ZD8PCgD54YmYWnJwLw0rJoXFmZhAcXxeDc + /BicWpCIowvScXRJAY6trMGhFfXYJYbgnV+JZaNFmNOWiMqimUhJsEdakjtKiiJRU5OJsopsZOUlIzgy + AI7uDjCzVP1fDGA57O2EAWwEtbmuZABPzQNsArXSeGroZ40SLtZmcLVVw9N+qvevv5sFgj21jInWSA12 + QEGMG/JjnZET54SsaDsKYS0SAqlxWB9miTjtbHjHABZDQJvB30eLAF8rzPKxgN8sKwQH2yMi3AkRkW7w + D7CDszPvyYr3ojGAhaUxrOwVsHUyg42LBVy97eAf4Y2IpGDm71gUVeWia6AV67atxMX7T+LpFx/Ey/9+ + Gi+//hRe/fczeO3154hn8a9/s3ztGbzyypN48cojePrJe/H4wxfx9CN34YWn7sfLzz2Ef7zw6F94mfv8 + 48pj+Pcrz+H9N1/B1fdew8dX38CNa+/gs08/xKeff4jrn76Pj2+9g48+eRdXP3mHeFvCR5+yvPUmPrzx + Nt6//hY+vCn2+QDXb32Ea58Qt67h2s2Pce36NXz88TVcvfYRcVXCx9fex42P38aNq6/h2nsv4Po7T+PW + m0/ikzcexfWX7sK7T5+Uhn9++dJmPH92DZ45sQyPH1mAR48uwLNi/t/Ty/DQoXHcvb0TxxcX4OBoIvb0 + hmBniy92NMzAjnqiwRs7mmZia7M3NjZ6YVWNC5bXuWE591nREYhlXWFY1h1LJGJJZwomWxIxtzkeK/qz + sWWiHNsmyrB6diaFsz8a0x1QEauWhlJrSWesyRA9OCzRnTllAI+WOGM+2/jSWk+sbvTD6oZZWFo5A/PL + PDBa5Iy+HBs0pqhRHifm5fqbARxqhGjmlJhY8hNqx9CoKQM4JNgAoQH6EiJCjBEbqZCGN8xMtkFBphMK + MxyQnWSFDLEtXvT+NSOU0ugBZeRbTWLIacaaHj6DOS1EsxeXXRljHKSeu6LHr4AwgNtET9wiNSpy5H8z + gBWMP6r/MoCbhQFc64I2HtPIc9QViT+m/KcHsDCAxbzDJZmMs8IAzrNEdb6YH9hyCrmWqOD+FUVE6ZQJ + /H8zgMsZ4woKrCSUFllzP3vUEg0ltmhifBRoLrZCW4kNukttMFztjHnVLsw1zlhR5YQ1ZQ5Y85cBrJQM + YDF36boMDTbwvsRQ0H83gEXvX2EAby0xwxZqtE3V/LzWEusabLC8wRoLGm0wUqtFe6mCsVzOGDzVO+tP + A3iiQYt5tSrMr1NgaY0cm+unDODDQt80WuDUnR7Ap7oscYo58syAC84MeeD0sBeOD3nj2NBMHB6ciYOz + vbGnzxO7ejywvdsNO3q9sLvfG/v6Z+HQQACODQdLOD4cguMjITjF8iTLk4PcTr15pC8ABzt9sb9tBuGF + A20ehDsOE0c7XXGqzx1nB9xwcdgZF0fscWHUHufJuc6RY52gDjpAzbWXnOvAXBccnPDCobGZ2D/sQy3i + hx3DAdjM660dj8LSudFYNC8WC+bFSVg4Lx7zJxMlzJ2Ix9jcOIyMx2CY+0kYi8IIMTYWjXGW4+PRXI7E + XJZzmbfm8ZwCkxMxmOR5JyfjiHgsWJSEyQUJEuZx+zxeS3w2MS/6L8y7g4mxcAzODsZwfxAm+kKwsD8U + S3sDsaLPB2v7XKVRSpbUmmBhyTQsK9TBRnKofdVmfDe2uNjigMtN9rjc6IRLDY44XWOHw5VW2F1qgS3F + FlhXoMXyfC0WsF7PzSA/ybHAXNb5udw+l7xlghgnxiTzV42BXDMMc3leiRYLK8S8wOZYXqaQ5uRcR861 + vdYI+xuNcLzFFOc6lLi/1wqP9jrgsR47PNRmhbPkVfvItbZnTsOubN5nnhIHeb49rKvb02TYkirDpmQT + wpgwxaYkE2wkNnPb5jRDbMnQx9YsXWzLnsZSB9tydLC7QBdHq0xxpt4cl1uo01uscV+rpQSxfKlegzPk + jUfKjbGjSB9bivSwqcgIm0pk0tDoa8mpV6fLsILXXp0qx1rytDVZwgRWYWW66Elvjo3ZamzJIlhuZTkF + c+wQxi+xk89tR54G2/PUfxnAC1MNMC9FD3OTp2F+hi42lspwpFaJS40K3N9kgqebDfBKyzS81T4N17tE + D2CiYxpudejj015T3B5Q4gvi9oAKt+eo8NkcM9ycbYZrcyzwwRxLvD1og3/NscXzfMYPtGhwtk6DQxXC + 2DfHMrb70RQDdMcaoCXeEHVJpqhKVqFcmEqJamTHUh+JIU+plaJC1QihtvH3l///ZQAnJtpL5m9Gpvtf + BrAYCjqVZWKy3X8MYNH7LshUQlCwMHGm8HcDWDJ/o6kTRS/HeC0SU8hP0u2RleOK7Fw3anpHJJGTCgM4 + nbmhME2FyizqsTwVOvkuhxjn/m4Ab2u0xbZ6S2yvUzNn8v008T2122BLhx1Wt1hRlygxv5yoYIyr0mAR + 4+IithuhE/rL5OgsMkYr0VREbcT42FygQls+td/fewBn6WN+iQKbGUePNljhHOvhpXo57qkzxEN1unis + Tg9PsH0+VmGMR0uN/jKAX6lV4O0mM3zYqsL1HjVuDVjh2qgj3hpywJU+KzzSZYHT9f8Pa38ZHcmRLo/D + 0ojVqJZazMzMzMzMzMwjzWiYmZmZGczMa2ZmXHvX9tq7ZjveyNKMd/fe+zvn/fD/ECerq6urqrMynyei + ozNThp3UfxuLdbGJumgj2+22cjn2UFMdrjObNYDZ/86zbV1i+xYG8MPdmlkDeNgMT49p8PSoCs9O3JoG + eq4Rnp02xLMzLOcb4vkZtsEF+oQeXlpsgNcWGeOVhSZ4XhwzyWMmjPH8hBLPj2vwzLgFnhjR4t5ec1xs + UeAgtZcYzbqWGm8l88oi1vtoJZ9DsRwdeSZozzVCW74pOpl/xIjTrlI1uitmRwGL6Z87qBfbxJTapWL0 + mRglRq1DnfTvEcDmGCqzwGQFtUi1GeONBsv5XZdXyLCS9b26UoW1fG7ratX/NoB5P6urbxnA7GtHm+RS + Hd7ZrsADrXI82GCIh+rm8Bno4+laI7zaJMP77WL9X6tZA7jPHJ/1q/FxvzneH5g1gF9sV+PZVjWebjXD + 42xDDzInium2D/E5bqD2XFJpgmnqVbH80ESZESaLDTFVTP1ZYoSZEhNpevDFpSZYRv2+msduqFFiO7Xj + 3pbZ9fQPt1ljfyNjDvXyNHVRf7YWzelaVBIlmbYoyLRHdood0hJtkBRvjYR4KyTEkbvfQhL7YHycFilJ + NkgRf5pIskAGuVN+mgZlWRaoIW+py1Ghlrq0LtdYMtxbGHN7ahwxRF3WW+vKfTaoSCUvStBDHdGaZoS+ + DGpT8gvxR/ApMcpXTPfM881kmmM+MS+TeSHbAlPcN8lyPNcKI/m26CtwQGuuHSqzrHnfWsYJFSKilYiM + FQbw7BTQ0gjgDDWyeH4JWQrGEO6jNswkf7ltAOeQe+WTgxaWOqCgyBbZ5GHJqeJPJHOoO3QQQkSG6iI+ + 2hjJcTJk8Nz/LwM4P8Oex5hLZq+Y/vl/GcDRYppta6QzNqYnaJAlpqBPZZy8ZQBnk8MWUf+KKaDrE+Zg + IM0QSxhnxcwqh+vJgRo0uNJgjutsGzcb5OyLJribff++NkPc3yGgj7sb9XGzxgCXmIfOFOpL6+EfSJuD + fenMS4m62J7AnJakg70pujiYqosT6fo4xTh+OtsUZ/j8TpDDHskzxr5MfiZNB8ey5uBcjjCAjXEn458w + gB+os8JdjEU3GfeEAXy2QY1j7Bd7RN9gOxzmeWvCdZDtr4MM1l9SsAFiQxXk40pEMAdEBMkQHmiK8CDh + Z5Gz83V0sBjcqEBciJzcXoHEcCUSWCYzb6SLwRZsh8IEzoixkAzg21NARwYYSYgOMECUnz6i/eYgzl8f + aSEmyA5XoCBKjeJINYpYljAPlHFfcYgpMgMNkOyvi1hfHUQL+M/hPekiPFgHESG6iAvWR2KQIXJCjVEe + o0Zrqg36cl3Qk+d0ywC2RlWayHPyPw3g1DhD5Ik/DFGvdNR4ob/JH4MtAdIMZcIATg3TQXrk/zaAS1Ll + KEv9twHclmKGHmLWADbGXObYhcTyRD2sSZ6Dzcm62Mk6PpIxB5eYH+7INcQDwgAuMcXj7ONPMI4902SD + vzTb4kHGwnvLzHBXuTmuFoslMvRxNFsXh8gXDjKv7MnXJ++Yg/VZOliVqYOlbC8z6XMwkayDoQRdyQAe + TDGW+ukwNU0veX9Xvgp9zIk97LctaXI0SLlfgQa+biTPk6bZL7FCN7VKK2NsU66KMUKGSvKVKqI2i+07 + Ux/NWQYYZCxfWG+FtcylW7sdsb2dGqNZRVALMAfs7TbHiXFHXFjghXMzPtIawFsHbxnA1FzVyfqoTDVi + /FGigddtEwawWH+43g6TzU6YbnHGvGZnyQCeW+OAkUpqTuqnUfLTUeYIYQDP3DKAV902gBkvl7ZRu7Cc + 12SF8VozDDEX9JfJMVCmlAxgYSCP8zpz6xwxxXNP1c0awAuooVZTL29s9sKqCnvMUC+toS4TBvD9+xqh + Exl0e51fDcL8VdI0z+J1dMj/NIDFNokRy8gAM8kADvaanQo6PsyCxMoO6XEMOML8ldYTZiAMs0RUiKU0 + hbOXhwIerkpCTVhKcHfRwsXJDPZiXS/xz3mtIUthBBvD1tZUgoO9DI4OJjzWBME8T26qKwrSXaQ52VMi + 5eyQxsiLkaEmlUmVZK8hhY041gQpIfqI8jdAhJ8xogLYOQMUSAhUIilEhbQIM+QlWKI03Q5l6TYoTTZH + aaIahVEy5IQZoiDcGGXinAyAovHfNoAH8uzRn0exzc7WwoRTJUYJU8z3FXhgSWsS1g8VY0lHLtpzwlAQ + 6oB0TwvEOcgQZ2eEJFt9JFjqIF7DTqfVQZkTG543xbmnISp95qAryBiLmTAOZNrgSo4tHsm3wyuFjviQ + +ITX/oBJ8i0K35cpFJ5M1cf97BA3EnVwiQH0EgPqDRKPO0s0uJvi/y4muzvY0O9gx7jJIHozwwh38ph7 + UnXwOIXEK3Um+OugLX6YccOvy4nV7rPm72Zh/gYAWwNZEpu5vcEff6z1xh8rPYEl7viDhO0XkrWfSLr+ + SWL/j3pjfNtohL+3GOLvXSb4ecYGv6x0xK8bXPD7djdgtxf+2OsL7PHndiB+3eqLvy93wjtjZni4Rl9a + BPxglA6OxungYo4OHqyfg9dI3j5frcU/d1kBwtA9awGc0wDnzYALKvxxTo6fTprg24N6+PteA3x7QIZ/ + Hlbix+Pm+P00jz/Dz53VAqeF+anAr/tN8esOGX7eIMN3KxX4crESH86X4+1pBV6ZMMOzFBp/GTbHIwOW + uJ+i/t5BZ9w37I0HJ0LwCAX5fYPBuNnpjcsNjrgoDOAaEiIGsmtVZrhRrcAd9XLcQ9J1X5sJHu4xxTOj + Srw23wLvLNHi3UUavDWjIGR4Y54h3pjWx/uLTfHVekv8sMMBv+62xy+77PDP7Vp8s02Nv22V48ttcny+ + 3RSf7jDFJztvlVtZbjDB5+tM8dc1MvxtNc9BCCP47+uN8Y//ZQAr8ftB1tUtA/j34zbSVL+/nnPHzxe8 + 8OMlX/zzagC+vRiIT0/44K1djnhuvTUeWqzB/cIAntHi5owFLk+Z4xzJ8LFhNQ6SKO4nSTw4aIcjrKPj + g2442ScMYAfJAD5N8nm13RQPDKjx/JQ1Xl/oiNeI12fsCCu8NqPGK/ON8OEqJb7cqsI3e/g9duvibwd0 + 8PVRPfzjlDF+OMfneEmDX29Y4dc7bPHz3Xb48W5b/HSvPX4k/nWP7S3Y4V93O+Hba25475ATnl7ngBsk + 63srjaTksYE4RALw5CJvfLAnAn8/F4kf7gnHH89E4I9XQvH7W8H4/T227y9ujQL+KyEZwHz9NrdfZpt9 + MhDfXwnAx/v98cIKNzw47ox7hnyIcDwyNxXPLqrAi0ta8fRMOx6basK9E3W4OVWHS3OrcHI8HweG0rGz + J4qJJBRbB0KwbTgE2yeDsW0esTAUGxbEYMV4KiZ7UtDTEIXWqjA0VkairiIGpUURyM8PR05OFDLyYpCe + F4fU/Hgk5ycgqSAJCQUpRCoS8tOQRKTmpSAjNw5Z6QEozfFAc5kL5rU54dhidzy2zxvv8nt8cz+f+UOu + +OEBB9aFLX680451zP4sTOALbIfn7PDTOQf884wz/n7CEe8fdcUzh/1wfr0nVg1Yo5fCpDzLAflZAcjM + ikVaTiyvG4TkAj8k5PkjNj8Q0QUhtwzgqFkDuDBBGgUckZ+IKIG8/wv/bwM4LisKUYmBCAtzQZCPFmEe + SkR7yGYNYMbOUGcd+NrqwIMx1d2c2zZzEOxkijB3zS0D2AyedsaSAexmoQMvMx34MwZHWukixm4O4h31 + CF0kOusi2UUXqW5zkOauy9g9h9BDBpHsRmLmSCJmr4NwBzE1tC6CXfQQ6GpAmCBQmMAecgTfMoJDfWRS + XowKVEnTOYd7m/IYI/i5GsGbcd/HyQQ+zqbwc5Yh1FMumb9hniT53uJ4NWKYp4QBLJnAEbMmsLQmiTQN + tDkyIi2QGzlr+uZGapETrZVGBWdFktCHqZFKYptMEptAIhpH4i+N9hX/bmT5nwZwQrCJZADnkIwW8bz5 + URpp3d+sUDnySHiLIlSoT9SiI80GwzkOmCwguSiwlNZTWUyRu6HWEns77HFiyAVnRpxxZtgBZ8dscXHS + AVfnOeD6PEdcmbDFWfbLM6MU95N2uMD952cccHmxC64sdca1Jc6SAXxprg1OUMRvqtHD+ko9bKwxwaZa + JTbWarGKZHEyU4aueGPUhRqgnN8h38cAOV4GKCGBr4u1RlemG4bYDocKfdGb4yUZwq0pTmiigGykWGym + EGqJ16AtgSI84bYBbIqWCH1iDrpjDEhwjTGaZopx5tiJTGNMZlHo5imwiKJ8abUNVtTZYXmtDbetsKiS + grCUArZIhuliE8yj6J1fppAMYPEv+6WNFtKavLcNYGHu/l8GcH+FIfoojvpK9TFYSWJLgT3MGDbKUhw/ + VaeUIM4zn6/nVRlLa/guqKQYqzHCskZTLK2n6GadzZQbYG2rOTZ12WNjl4M0jc0M72OsRoHhcmMMUKj3 + SyYwUcTrcbuvQFfaHuM5ZxpVWNdnj02Djtg87MjSHkublFhUL8OiOjm/F79blRIzJJ3TBaaYyjHB4gIl + VhaaYbko85VYR9K7tkCD5Vk8LtEY4xF6GAjQQQ9FTbf3HPT7yTFE/jhrAJP4Blpi0F+DHm8ztHuopCmg + 23xs0RbghGY/B9T5WKPMQ4MiZwoUVxm3Faj0MkO1gKcZKryUqPJUotZLhQZPft5NrP+rQJ+TEgOOMow4 + yDFJDjnPSYEFrioscOF9kYfOc5Nj+pYBPM3+Ms0+NsX+NZVkiZEktvkYMWLcFCVxwgBWoIgCvkwYwGWO + kvE72i5G4vlKo3cHmz0w3umL+YOhWDwWhRnmB2Hm9ja4oL7EErUk3dWsF2HA1BZQgJRaSdO2dtY4opsE + XRwnpnUdaRcmsi+WjEdiy/IsHNhSgWM7GnB8ZxOO7mzFkR2dOLF3GBePzODe8+vw0PVdePDqHtx1eTdu + XtmFS5e248L5zTh/dhMuntmAS6c34OLp9dzeiAvnNhFbcP7CNpw9vwNnz+3GxUuHcOf107jnyilcP74b + l/etxvlNEzi5pBkn55Xj2qJKPLisCk8sq8Azq8rx4tpSPLsiGw9PR+G+iSA8ODcQD88E4fHl0XhkZQJu + LIrG2QWxOLkoCccWZeDYskKcWFOHY+tacHB1K3avasbahVWYHMxEQ3UwMlIdkJzkjMLCcNTUZqKmLh9l + VQVIyoiHl78ntHYWfxrAVtrZKaAlTWDHbWoES3N9yQA2UxpI0z9rVSaw0shgb6mCu70GHo7mjLUaBLlZ + IpLtKMbXCokB1sgKt0NpgivKklwodF1QnOSI3BhrpEeYSzpBrAEcKNYAdjGGN9uKv5cGwQFWCA22QUiI + NcJCbREZ6YCYGCfExXsgONQOzi5yaC31YWZhAAtLY2htec92Sljz+o7uVvANdUVEUiAyi5NQ21KCsXk9 + 2LZvLa7dcwqPPn0Hnn31QTz78v14/qX78cKLAvfNls/di+eeuQt/efwGHn3wEh665xweIZ568AqeeeQa + nn2Cn32SYPn0Y9fxzON34MW/3Ic3X3wU777+JD569zl8+uFL+Otnr+Pzz17DR5++gvc/fgkffPbKLbws + 4cPPX8b7n7yA9z99GW9/8ALefO954kW89/6reO+D14g38O57r+Odd9/AW2+9hjffevVPvPXWy3jnrefx + zptP4a1XH8Y7r96PD169Dx+/cjc+ePoK3nrkFF6+cy+evbwFT51bi0dPLsN9h2Zwz6H5ePbaJjxzdT0e + Ob0Yd+8bwOllRTgyN4k8MxR72r2xu8kDu9k3djd5sfTCNr7eUOeC5eW2WFJpx/hHbtIZhBU9EVjeG4sF + bdGYao7BaF0khmsisLAzDWtG87F2OBeLOxMxWO4rTf1cm0StmGqBtkz2xWxLdFFfiRHAYgro6UpXxjtP + LGvwxspGfyyv88GCMldMFTtjtMAOfTy2hXqzOlGs66VAmjB+w5hTWSZQMyYlix/+yFMYO4QBHB5uiHDm + rYgQA0RTr8ZHy5GaqEFOmh1Kcl3J15yRzxwrRo/kJpuhMN0cRRmMeRlqNDHedNV5oa/JG4OMN6MdPow7 + wgx2QW+jGAFs/SfEOr7tVZZoKFH/DwNYJf0BRYo/JcyHFQ5oqxPmrys6au3RUmXNmGQpzUzw3wawuVTe + NoDriqylsoYcQOwTU0NX83PVYlYYyQC2n53+uckNrXxmwgCurWUfK7OVUF1hhxoBPrv6Uh4vRhEzPtYX + W6CeerWlyAKjjIXTDa6YYVxcWuuEVZX2WFtig1W3DOAVGQqsum0A5wkDWPt/GMDyWQO4VoOtDTyuyQqb + 2uywtt0eS4i5fC2mO21izm7jcd3VWow02mCy2RpTjRppNo0FDTIso6770wBu+R8GcC/1DrXi2TFynwkP + nJrwxPFxLxwlDo0Js5dtd9ATO/vcsLXXBVt73LCj1wP7Bv1waDgAx0aDcWQkCIeHAiUcGQzA4QF/HO7z + w/4uL+zr9MKeFne2eRcJe5ocsafZAQdbHXGk0wmn+l1xbsQVl8accGHMBufHrHFuwgbn5tri1KQ170GL + /eNWODjlgENTbjg4zmsPe2L3kDe2Dvtg7YAvlo8EYmY8FNOTEZg7GU5EYnoqFnOnZk3e8blxGJ2IxeB4 + BAbGwtA/Goa+0VAMDIdicIRgOcTXQyMhGOV7oyNhGB8LlzA5EcnzRfFc0RKm5sdhajpWMosn50ZhnO+P + 83rjk/wMMTYRiomJMExye2I0BMP9gRjpD8BUfygWMBYs7g/Cct7zmgFXrOm2Zr9XYGmlAVaU6WETucve + WjMcb+b3byW/bLbHhWYnnGt0xKl6exxhv9jLNr69whobSsnjxIjfXI1kPkyzDU+zzU+xHU6VMP+zLc5l + rp5gexwv1GCE3GaM29OlWvIrDRaUq7GoVI6l5SZYU2WErfXG2NtsgsOtpjjVIceNfivcO+iEB4adcG8P + +W69CodLjaUfNm8bwIdLtNL6ubvIkbZKBvAsNqfJsIXYLEzgDG6Tg27NMsD2HD3syNPF9lwdyQTeXaSL + w+SBp8jHLrdY4FqrFW60W+JmhzVhiytsr2IU1JEqE+wo1pPW7txUbIDNZeTUJQrJAF6fK8c68vj1vIeN + OcIA1khYna3Emlw11nHfhhw1NrKONnP/1lvYwX6/k9jFfreb9biTdfOfBvCiDAMsztbD8kIj7Kozw5lW + M9zoUuLebjme7DbGy936eKdfH18MG+KvA4azJnCvAb4YNMXfRhQSvhpR42/DSvx1SIWP+5V4v1+FN3vV + eHVAi+epQx/vtcad7Ifn2bcPV5ljW6kGK/h95qYZoTtWjzzfCHVJJqhMUTC/m0nTsmaR+6fFmiNZGMDM + 8xGhSgQH/dsAjoywkPD/jwGcnGJP/esqrQN8e/RvZpab9Do13QHxtwxgMdo3KISakAih/hL4XwZwgkYy + f8X0z8nMAWmZdjyPI7JznSVkZDogNVkrGcC5qWppRob6AjN0lJphoFyJycpZA/j2FNA7WM4awHw+rcIA + tsaubjts62YcZTtZUiM4vBxLqhVYXq9hTLTDum4HLG+3xnS9GYYrTNEjTOASGaFAF3NJT4k5eovV6MuX + MfcJA5hao9SU2swMR5rMca5JhUvNMlxrMsadTQa4p5Fgv7inyhD3U8vcNoCfb1TizQ4N3u8xx0dDVvh0 + 3A7vTNjh2UFLafrYCw2m2FOqhzU5OlhBrCmiFmTf2VImx+5KBQ5SW52oVuF0pRznK2W4XGOKe1pUeKTb + fNYAHjHHs+NawgLPTqjwlwkZ/jLXBM9OG+O5BSYSXlpogpcXG+HVpcZ4fYUp3l6uwBtLFXhlgSlemi/H + i/O5PV+DV+Zp8eK0FZ4YtcBd3bxmgzF2lulT48zBwnwDzC+RY6JUhQHWUTe1UFuOEVqzDdGWJ0YCK2YN + YGGe3zKApRHAjB8d5RZoLzNHK9tsZ6kFOhh3JAOYMaGX+W+I+yYqLKjzzLGYeWkZn+8yPuflFSqsIlZX + ETWzawCvIoQBLNYGlgzgBvE8lDjTpMD1NhXubVHifj6HB2r18HCVHp6qMcRL1IvvSFNAW7LfafF5nzk+ + 7VPj4z4+F26/2WWGl1rVeL5ZjaebVXiCz/fhZktcb9LgGDXolhq5dM15wvylphwrMWSsNMTcYiNpJPC8 + EmPMUA8vKmU8IFbx2A3U8duphfcyfx5os2Q+tWRsUGJ1qQyT2WboySBnIRerSLNEcYYd8jMckJ3igLRE + OyTF25JTCcPX8k8kxGsRJ6ZyT7Ak2HcSzJGebMH+ITiTBcoyzFCZRc6TJUc1+U8duUEjY3t7tQN66t3Q + UeWC2nzqylQFSuP0UEM0JxuhK1WGoUwVhjNUmOA5hAk8RR4mSjHqV4z+ncrm88nSYpwccDTXWhr9213o + iMY8B5Rn2fxpAEdSP0bGKckD1X8awNlZ5HfMO7mMqQLZeQJqaQro2wZwXqENisn5yqrE8hmOyCMXEwZw + ZJQeQkN0EBasg+hwPSTGmiAtQYHMZPX/MoDFFNCleeSUGfZIYV0Jszc4wOi/DOAIYQBHqVnHWqQnzBrA + YhrorBQLZDLWpMeKkaQy8ltTVDKeNqcYYTRbjvXV5BYtDuRA9rjUKtbctcBV8qUb9TLc1ST6oxHu7xAw + wH1tBrijThfXKvVxqdQAp28ZwHuSdCTzd1OMDjbF6mBLPF8n6GBXog72c//B5Dk4mGaAA6mG2JNuiF3p + etiawmOSdaTPn8kxxOVCY9xk37uX/eTeWi1u1lvgeqNWMoDPNKhxlDFnN9ueGIU+nK6LmkgdZAfqIC1I + F4nBRogKkbMuGf+DxOyyjMv+pggNMEG4vwkiAkwRGTiL6EATxASbIiZIbBsjlvuSbpvAbJdpUZpbBrBs + 1gD2F8vAGSKKdR3pOwdRPnMQ46+HlFsGcH4U+X2kGQoi1Cjg66IwMfrXFOkBBkj05/HeOogUECO9/XWk + tZ7DeM/RgfqI99dHVrAxSqPIXZO06GZu6M52QHuOMIBtUC3awX8awLGGyGUOlAzgak8MNgdi6LYBnCxD + ShjrI0IX2bEGkiEspoUWBnDxfxjADf+HATwRry8ZwEsT9bAqWRcb+My28tkcYj1fYH64mce4X2CCR0pM + 8Wi5gvGfcaTBEo81WOFu8qc7StW4UWGOyyxPFhjhYLYu9pHj7GNc3UWetDVnDtZlMQdk6mBRug6mU8Vy + czoYiNPBYIIeRsmRpsWyYuQfE4ybI+RsowXmGGCfak4xRW2iMapThAnM+8/WoDmf8bbQEm2Msw08pjZT + gcp0E5SzfZWznVWl66OWaCQGGbcX1ltjTYcTNnU6YCP5/8Y6GTZRD2xpkmFftwW5uz3OzvfAuQXeODQp + ZqRxxYJGa3RTe5TF66I0QazxLmee1qCdnLOX/HO43hYT5PD/aQBP1zhgtJKa8/9lADMvSwZwq41kAC9i + Lp8i5xmtUkrmb0+xjPnn3wbwZK2tZPyKc982gOcLDSVGADdRJ1c7YkGRFmupoYUBfN++BuhEBM6av6IM + 9iEpElM7B6i5z1yCMH2F+RsVLAxhkiTuixAGsK84Vo4If7EOsBUy4h2RkeAkGcBxoVrJNA4P4Dn9NPDz + UsHDVQEXJwWcHZVwcTbntgWcHM1hb6+EjY0M1uJHE60RS2EAE9amsLGVwcFWrA1sCicHMYW0HMlxDgz0 + zkiLt+F1FbyWCTujgg3aDBWZFihhg82KNkEcxXawjz4CPI0Q5G2KMD8ZogOU7MgKxIp/a7BDJobLkBol + Rz6DdEmyBgViXV+K+GKK9goK+5o4OVoYvHsYXIcY4PvZ0fpz7fnaFm2pFMWxPCZWhf58Dz6kBKwfLMDC + 1nS0ZPojN8gKSW5KRNky2FjrI9qKndtCB1EaHSRa6aLATYYyHzWK3I1Q4MwA5T4HI4GG2MJAfCbdCg9k + WeOlXDu8R3yUY4MP+d3eZSJ4NdUET6fq4QF2ijuJ62k6uIMd7sFyFR6tIzlmQ3usxgaPsOE9XKbF/Uwu + 92TKcDcb+r2pc/AIO9srNTJ8QfH6w3x3/LrcA7+tdMcf67yBDb7AJn9gcxCwJQTYGAis9sfvy73x2xJ3 + /DbPBb+y8f/UrcW/SBC+q5Xh6wpDfFNthK/rjPF1myl+mWeLX5Y74td1Lvh9qxt+3+mJP3bx3Dt57h3+ + +GWzN75aYoc3SPgfqtbFaQaOY0wEx8VIZnb2+2p08PKwET5eqsK3W4R5aS4ZuTjP8oIauKSU8Pt5E/zr + hAH+cdgQ3x0xxQ/HFPj5pBghbIk/zloRWvx+2gy/HlXgl0Om+HW3DD9vk+O79RQZK5X4eLEc7y1gfc5V + 49lRlbRw/f3dZrizS4s7KNzu7HPB3YM+eIAi+R4K0ZudHrhCQXmxxkoaAXyp0hxXq8xwlWT0OonoDRKt + mw36uLtND4/0GeG5cSVeW2CGtxaZ4fUFMrxB8vnafEO8MV8fHy6T4++bLfHjbgf8sof1udsG/9phhe92 + aPD1DiX+tkOOL3bwGe0yxae7ZPiE2x9tNcXH60zw6Vo5/rpGiS9XKfBXYWYLE3i9Cb4VU0DvVPxpAP9y + QIHfhAF8WNShFn+csgfOueKPy174/Zovfr8RgF9uBuFfV0Pw1Wk/vLvbCS+ut8GjS83x4EIL3DvDepjH + ID2uxplhFY71KXCgR4X9vRY41G+Ho/3OON7nipO9rjhNcXGaxO5cq5J1J8djoxRrC23x3nJnwgXvLnUk + bPHOci3eWUlRt9EMf91lhq8PyvG3A3Pwt8O6+PuxOfj2pBG+PyXDv84q8cslC/x8xQo/37DGjzdt8NOd + dvj5Lnv8eKcwLok7iJvO+O6yBz7Y74y/rLTH1X4zSUBsydXFDpKNUxQmz630x8cHo/DNhRj8fG8U8Ew0 + /ngpDL++GYLf3gsGPmVbFybw52yfn7MUBvA7fsDLLJ8MwvdXg/DZoWC8vs4fz83zx7OTEXh5OgXvLirE + J8vr2IYa8fJYDR7rLcKNtkycbU7F0eZE7GuOxvbmUGxp8cXmDi9s7vXAjlEv7JnyxG72u90L3bF9gS/W + z43A/L4I9NX7oKnMA7WlvqgqDkRxQRBycoKQlROO9LxopOXHISU/Hon5iZL5G1uYjpiiDJaZiC/IQFKB + MIHjkJkZgKIcDzQUuzDhOOHgAi88vC8A71wPxT8eDcIPT7jjpyfZP59ywq9POOP3B53xy51sh1es8ctF + AQf8cMEdX530xDtHA/Dk/nCcWBmIZV1u6C4lsczyRl5WJDKyEpCSk4CkvHDeUzDi8kIQkx+K6IJwRAjz + tzAaYQWxCBNTQfPeI3jvUbeRF4+YWxDbfxrBkgGcQMRJmDWAIxGVFICwcGcE+pgjhHEz2t0E8Z6EhyHC + HHXgZ6MDD8ZWD3OxPQehziS4HhpEeVrNGsA2hnC30oEPIUb+hlvqIMVBD7nujPWepijxMmQsnoPqwDlo + CDVAI1EfrI/6IAM0BOihylfEa5IlJx3E83qRDjyPnRh1PAfe9vrwczZGIO8rSBjBhPhjVJi3DOHMjyEs + gz3EiDID+LrOjirzdjIhTOHrxPc9VAjzVCHcS40wHwoHfzXJnhLRwUrpH4rRJJuzBrA5YYEUEs/USAsk + h3FfqAppYSTuESSj3CdGBqeHapAarEYyiW0CCW2cvzHiSRqTQ+VIDBNE1hgxzDNxLMUIYbH2b2GMBuUU + U4XRZsgXUz/z2OJIJSr4uiPdFsMUE/NK3LG4ygPLqp0p7LRYxfi3tdUOx0Y8pPXAz0644Ny4E85NOODc + pBiJ4oAr0444N2qFoxSYR/vVODVqjTNiDfFpioeFwgB2k6aDvjLjgEtTtjg5aI4tdXrYXGeAHU0U/W0W + 2NvlgA3Ma9M5JDzCAGZeLwvQR76XPnI89FFIsl7F792W6oS+XC8JXZnuaE9zQksyiTFJeiNFY0u8BVrj + zSUDuDNRGMAqyQBujtCTDOAukuD+RCMMJovpoA0wzHw5RvExlafAYubRpRQ+y5hXxfTPC8vNMb9Mhcki + U0zmG2OygKS40AhTxaZYSIG+pM4cy1sssaRZKxm3E7cM4DGKZ2EAj9w2gKuM0V+uj97SOegp0UVv8RwS + O5LQcl5fmME8ZoLiXmCKYma60gjz+d5MuR6WVOphRY0eVjcYYnW9IVZWk4xXGWJ7izn2dztib6cjyas1 + 5teoMFIlx1CFCQZKjdBPwT5IoT4ojQjWJ2nVQW++Ll/rYS7z2OoeG2wYdMSWERdsHnaSzN+ZGiPCFItq + 5VhUrcAMyec0Cf78fFOsLNFgY7kVttXYYke1HbaWWWMdOYdYI2YqhmQ9TBf9FDLdFDVdHnroYd/o96XI + DiBxD7TEsD+Ju68YAaxBhyfFhrcWLT62aPJ3QIOfAyq9tCh2p1hylaOIKPOQc58aNZ5mEiTzlxCjf5vc + VehwU6HbhZzMSYkhRwqWPw1gORa4KrHARYH5LnLMlwxgOeb6EuxrY6F8PhRnY2wnA6KdkBfWRMpQEmOK + wkSKIoqhigwztFU4YrjFG3N7AjDR6YvhNg+Md3hiXr8fFo2GYvlEJBYOh2Kim++1e6CnXozSs0VDmQVq + i8xQV2yOpgor7rNHN4l6X5MrBlrcMdTmheEOD4x2ekrn2bwiA/u3lOLAlkqimtt1RBOO7OnHuSPTuPPi + Ktx/fRuxAzcvbcPVi5tx5tw6nD6zBqdPr8E5ludOrsTp48tZrsYlvn/l8g5cvLQTZ87vxKlze3H63AFc + vngCN6+cxs3zh3D5yEYcXT+K/YubcHBhJS4ur8E9y6vx0JIyPLy0CI8tzsbDC5LxwFQU7psbgvunA3H/ + fH/cszAYN+eH4vx0CE7Oj8TxhYk4sjAdBxfl4sCSUuxfWYtD69pwcFM3tq5uwszcArQ0RTBXOSE2wR4p + 6V7IL4lFeVUWSqrykMLc4hvkDUt7c6huGcDWVnLJALa2MoKtpQHsrA1hx22txhBq2Ryo5frQqoxgY24C + RysFPBzM4O1ijgB3C8Y6apNoN2REODM+2iI/0haVSS6oSXVDTZoLKqkniuLtkBNthfQILeJDtIzFavgL + E5jtKcDLQjKAI/jZ8HBbREbYISraDjExDoiLd0VwqM2fBrC5hSEsqGEsqGksrHnfjmZwcLOET7AzIhP9 + kV+Rju7BeqxYP4UT53bhgccv4y8v3o0X3ngQL7/5EN586xG8/dajxMN4603i9Qfx5qsP4PUX78Erz96F + l/9yJ1566iZef+ZuvPHsPXjzhfvwxovC8L0fr79wL7cfwNsvP4wPX38cn7z9NL788AV8+clL+OvHL+KT + D5/HRx89hw8/fgEff/EyPvvyNXz21Sv/xl9fxifc//b7T+OFlx/C08/ejxdfeBQvvfQ48SRefPEJPP/C + k3j+eZbPCYjtp/ACX7/4PI97ToxEvhMvPn0dLz99Ba/95SJee+w0Xr73sDT981PnN+CJUyvx8JHFuHvv + FO4inrm0Ds9dWY9HTi7AnTu7cGFFEU7OS8LBgSDsYf/Zzf6xp9kdeyhgdzW4Mz84Y22FLZYVa7FQTNVf + 44xV7QFY1RVOjhKFufUhGKoMQm+ZP/rKgzDREI151GbzyMdGawLRUxwbti0AAP/0SURBVOSGVuq3plQL + NKcxJ2RYoD1bi55cKwwW2mG8zAnzKl2xsNaTcdwbS2u9sbDSnTGeYj3XFv2ZWnSmadCcpEa10I3xSrYt + GRIjTCQDODFBgaRkNeKYX2LiFWwnpoiIMJZGAUeEGUkGcBxjS0q8Bjnp9ijJdUOxMIDTZw3g/FRh/lqg + lPdUUyT+ue+O3kZf9Df7YLDNh/HGC4MtbnztyPhhx/et0F6tvQXmuQpzNJQoUVUgpn2WozxXjopcYQDP + zkJQXaCVpnJuqXRGB3N5e5U9Wspt0FRqIxnA9YU2qC2wRhXrozLbkqUwe8WyH1a8HytpKujqAkuem/eY + q0FFkQWqShjbKm3QwJh2ew3g5iY3NDW6o77eFZWV9qissEN1pTCAbVBZxnOXaMlzzVEhUGiO8jwlavLV + GKx3xnijCyZrHTFT5YCl5bZYxeuuyGNOzVRhaaoMK9OUWJ9ljs25/zaANxeqsOm2AVwkDGA1dtRqsK3B + AluaLLG5zQ4bupyxtMMRk01W0gjgxmITNJcqpak5+2ssMMK8Lf4sNVnN3FZrKhnAW0U+vW0At2hxtnXW + AD7To5VmPDk1JpbDccWRYRccGHbFvmE37CEn2jnshR1DntjW54ZNPc5Y3+6IDcTeQTEK2B+HhvzYxn2o + p7yxv8cb+7qpDagx97S7Y0eLC3Y2OWNHgxO21zkQdthea40d5EF7m2xxsM0eJ3jOs4POOD9kj7NDVjg9 + rMXpUUtyMRucmrDCoVEL7B+2wMEJHj/hjP3M53uH3LFrwAOb+z2wvMsV052uGOc9DA/5EwEYGg7G+IQw + Z2MwNhmDkclYDI3HoGckFJ0DgeigDm4nOnv90dbtg9YuH7T1+KCzxxfdvX7o7QtAf38gBth3B4eCMTQU + gmF+dpj5bHgkDCOjYRgjhodDMDgQgL4+P/T1+xC+UjnAcpD3M9jHkucd5HnHugMw2e2Hecyni3o9sbzP + GSs7bbCsUU0uSv5RbogN5DY7a8ywv94SRxptcazBFiea7HFMmL+su/3kbbuqbbC1yg5ry+2xrIS8qMAc + c/M1mGT7mWSbniixxDjb5ESxBcbZHseLxOhfDYYLzSQTeKKYxxarMLdIgekiEywsM8IK8rdN1P27mkyx + nzjSIsPlPkvcNeSE+4adcXevPc4LI1ZMYUt+uIdccX+RCgd5nb355tiZrcLWDLbXdIWETWzbW9KV2JLG + fZnclynD1ixDbM0WBrAetgtdmzcHOwt1caDMEMcqZTjfoMHlZktca7fBjQ47XCcu8fVpXvdguQn7xxxs + KpiDDYV62FBshA0lcmzgd1jP+CBN+yyZvObYwP4ssDJLiaUZMixM43dMNea2HCt5n+sZPzbmmWEL62yb + uPciLXaz3nYIA5j9ThjAy3ivYhroZbmGWFsqx75GC5zv0ODOXjUe6JPj6T4Z3hgwxocjJvhqgtp/xBR/ + 7TfAl9z35ZAp/jaswJfEV8NKfDWkxBeDSnzUo8DbnTK83CbDC51qPNVtjoc6xGgvLev2tgFsjhW5CsxN + NUFHNDVcjAEqqRXE9KUFjNFZ8WZIZ7xNjdUiiRpKMoCprYIDhQFshnBqqPCIWUREWEiIira8Ba2E6Fgr + RMdZk6/YMLbbIjHFAUmpjkhOc0SaMICz3ZDJWJ6S7ojYRGtEUa+FRCgQKKZfFSZwKHUgdVVIuBxh1Fbh + 0WpExpghJkGDBGH+inV+s+yRkeOIzBwnZIiRv8L8TbNFUiJ1X4IK2akqlOaYoYHtsbOcsbJCGMBq8nIL + rBKzHDTbYPt/GMC7WgmxlmGnLTayXNUgZjKSYWmlCVaw76xrNMPufmfsHHBljHLAynZrxj4FBktNpB+X + e9hO+krN0F9KTlyqYX5UYIDPdixPn/zfECuoI/bVK3GqSYHzzTJcbTXFTeJGozGu1xniZqU+7q00xCPV + MvylXoHnGpV4vdsCbw9Y4v1Re3ww6YSXR6zxUJcKF2oMsI9tdXW6DpakEpk6WMF2KwzgzWUyacrZA+Wm + OFphilOVpjhfzWs0yHE/29cjPbcMYMa85+ZaSXh6wgxPjMvx5IQpnp4yxXML5HhxkRyvLJbj1aWmeHOl + Au+sUeO9tRq8vdIMry9R4tXFKry2RIO3lljhrcU2eG2RPZ4c1+LOHiWOU5NuKdbBIt7XZIYOBjP10ZNt + iO48GTryTNGaY4wWoj1fhs6i2RHA3WVm6K6wQC81Y281cw63O8uJMnN0UA90U0d33jKAexgThAE8yPgz + xvfmVlhiQaU1llB7LmHdL+G5ljNXLSllXmI9iFkIVlWrsJx1sY76cKtkAGtwrJn5qckcV9p4363muK9B + gQdqjfFwjSGeYB0/X2+C11sU+ID19km3Bp/1meOTXjP2MzXe7VbjtVYlXm5R4fkmFZ5uFMaNGg+KUZ4N + Yv1lFbbxWivZhhYwpk3w2YwVGzJWGmKyREwFbYx5YgQw288ixp4lvE+xbvEGfm57kwX2tFpif5slcxj7 + LM+znPl3JEONdnKx6iQNSpO1KEglD0pzQFaSA9KoDWYNYCvEUcPHxQlz1YLQcFuD2FgzxMey/8Sxfydb + IIfnyU+3IH8yl0bKlzKWCe5TXUCtyHptJM9pqXREY6k9eZEFilNMURSrh6o4PTQmGaGdrwczzTCcocE4 + MZmuwWiKEuNpjPvkG5L5S4wJ85fcaFjwwUIndBQ6oy7PAWVZNshMYXwRBnCsDJFx8j8N4NQUFXL42Tzy + r/xbyGYszSGybxvAjL+3DeDyajdUVLqgiJw0lf0+Jlr8iXB27d+YCD0kxRojnbpUTH0tGcCZVijKsUF5 + vpOEohwHaQroWQOYsSfAEH4++vD3M4BYE1gygCNVSGE9phLpcWopRmaJtca5nRptgswYExTFmaAmyRSd + zEdzGXe2NTriRLc7Lva44FqnPW6QF11nG7ujUSGtl/1InxoP98qlKaDvazPCtWodXC7TvWUAG+Bwhi52 + JsyavhtjiFgdbObrbcT2OB3s5Otd8cxzSbrcNwebk5i7knSwnu9vTtTBAcaHkzkGuFBojGslMtxVYYa7 + asxxo84M1xrNcZltSxjAh2tl2FHFvlJqiME0XVTdMoBTAsVoWiNEBMsQGixHaJACoQEshQHsf8sA5nZE + gDCChaFrfMvU5WdYd5F+RogJkiEpwgxpUVpp/d//NICjxbF+hoj00SOEAayHWH+DWQOY9V0QraH+5DML + UxFy6fe2bOaFtCAjJPjrI9JLBxECPjoI89Pls9JDaCD3i6Xc/PUkA7gkXIZaMZtdoqX0+1xbph0aJQPY + EoWJcmTzmaULA5htJjtJRm5thdYKaoZGaqIGP/JeB+QnU4OEzUEy21SamAY63ggF3FeUKgxg8cepWQO4 + LuV/GMCJJphIMMACYQAnCQOYvCJZGMC6OJihh3M5hrjG3HAX+c79jAcPlJngwQo5Hqw1w33MU9dLFbhS + qsIlPrdzjGnHCk2wJ4ttIlsXewoMsJOf3ZpngA25PHfOHOYBPczj8xvjsx9imxlOMmD8VWAh+8rSYhss + LrGRZnCZW8j+SF7SnGLC/myICt5njWQAUw+R3zSwfzXyM7VZ/F7kV+XkCmUprMtkA5Sn6KMmTRjAYgSw + GWZqbbCyxQHrqRlWM3atZa7cKGZ/aJSTq1viKHPXqWlXnFnghf0T7tjQ64QptsG2bGMURumgMEYXFWky + yQDurLKZNYDJScfJSafFNNDNzpgnGcD2GKduGq+0wliVljCn7rHADPXJklZr8lwHrOig1pUMYDss4r7J + enOMVMrRV2KKLtZdH3O0MIDHmC/m1tpiPjXDPGJaGMDV9piqssVSMZtSgxtW1jhhUak11jV7zhrAexqg + I0zaiEBzyawN8lYgwJPBwkeJUD+1tC8ySBjAFogOIRliefvYEF8VoZBGAydGMvAlkAQlOCOJ29FB5tJo + 4mAfFfw8VPByU8HFUSb9c9/eTg4HRxUc7DWws1PPmr/WptKaXlqtsVTO/tBjChtrHm/D4/kZR3tTuDrL + EBVmzcTgyMBmhzh2vBgGt8RoJdIYaLPTGLzYSGMptkPZYbzd58DTmaWrMQK82MH9bv3bI8AYgexgQexo + MSH6yEs2QxmFfXGykglBhrJYOSrjFKiOkaGRgr6XwXU4z/GWAeyIPpK0Tgr2BhLLOiafgXx3PqQErB/I + w/zGRDSmeiDLj8nJmQHFSg/h2jkI0+oizJwd20IH8TZ6yPZUIs+HCcDFGJk2Oihy0EGbhy5WRshxJNEc + d6dq8Rw79ZvE+xlafJBujneTFXg12QhPp8zBQ8IsZae5t0AfD1Uq8HSzNV7qcsEr3W4kyy54gYH6uVoH + PFlqhQdJ4O9JNcK9qXp4mJ3tZSblT3qs8d2kK35a5IGfl7ji1+Xu+H2lF/5Y5Y0/1vjjj/VB+GN1AP5Y + 4o1fZzzw01xn/Dhijx/5uX82m+P7aiX+wUT/dbEBvik3wrc1pvhHmwI/TVrjp8X2+HmNM37b5IbftvK8 + 2z3x+zZvwgc/bfTEXxdZ49U+QzwskgMJ1flUXZwj6buYpUOyooMXh/TxwUIZvlwnww975Pj9mAo4q5FG + /+IycVWUMvx8zgj/OmmEf54wwU8nFfjllBq/ndHi97NWhBa/nlbjl2O8p8Mm+HmfDD/tVuAfm+X4+1oF + Pl0hx/skfa9NkehQdDzUZYI7WkxxtUmJKxT5l9tsmOCccFefF+6iSL/R7oorjfa4WKPFRXbWS5UaXKky + wxV2xms1JrhWa4Crtbq40cTv0K2Pv4xStMxT4/VFary6wBSvLTTGqzMGeGuhAT5epcQ32yzxrz12+In4 + Yac1/rVTGMDm+GaHSjKA/7pDhr8KA3inDB9tN8V7m0zw3hpjfLxagS9WmeGLFWp8vkLFbTm+Wi/Dt1sU + +H7HrAH8I+vs5/1y/HpIhd+PmOP3o5bAGSfgojtwzRu46QvcEYDf7wzCj9eD8fVpP7y/2xkvr7fBU8u1 + eHSxFvfPaHHXNMXliBJnBpQ41q3AQRL1gz0WONJnh2O9LtKPECe7nXG6yxZnOyxwiQTgHh771FwzvLnM + Dp+sdcFna11ZOuHjtQ74kOf/ZIsVPt9liS8P8bueVONrPr9vTunj21MGhBG+47P8/rgcP5xS4scz5vjx + giV+FObkdTv8cpPt6oY9fhEQr6+54ocLXvhojyueWeaAaySyB8r1sJdk40gtn0s/29mmEHxxPBbfX03A + rw/EAc/E4vcXw/Hz66H45d0Q/P5xCP74NBD41I8QBnAA8A7Ll1k/T4Tgu6sh+PxwGN7ZGIY3FkfinfnJ + +HxRHr5dWo7vltbg88kKippcPFIXj4vFQTiU54XdBZ7YWeqBrSRx21pcsavHHftGXHF0xhOnlnrg1ArW + 3UpHHFvpgb1LQ7BmPBgT7WKBfifUl7qiotAdRTxPVpYPhWUwMnIjkVYQi5T8BCQUJCGuMBXRRZmILM5m + mY0YYQIXpiE5L5bCMQCFuR6oK3TBSL0z9s3448H9EXj3jij846lI/PisF35+nm3hVVd+Rw/88aQLfr3f + Ab/cYcX6tMav15xY3z7465kgvHk0EvfviMbemWAmLV+0FvmhJDMEudlxSM9ORHJuIhLzopGQH4XYvEhE + 50ciKj8aEQXRCC+MQaiEWITz3iPyY/neLGJ4n3G5s4jOi0N0bsKfiMqJZ8n9uTF8PxpxWeGISvJDaLgj + Y7YawYzl0W5GSPQ0RZKnEaKd5iDYVhe+ljoSguz0EeGqQLSXOWJ8rBDspoanjQG8rHURbDcHEYy1CfY6 + yOc5av2VaA9So5uifIBkaSLFCDPZMizMlmOaBGEq0RRTJFIjkfpoC9BBpTdJpLsO4hx1EGClA0/Gcjde + 09tWH36OhghgLA9yNZHWBQ4hgolADyP4uxnC10UfPq5iXUkjeDubEnL4Oql4rAahHhqEeYlZNcT6+mrm + VAoIEtMIQvxTUYwCFj9cJEcTURZIDBdLMfA7BpgiIYi5L5QCIsKC0CItxBwpQRokBYoZL2SIJ4lNCDJG + CklmKnOLGPUbF0iyGWiIRObIrBAZKhJIjFKsmffMUMy6KOZxVTEq5j5z9Gc7YG6xGxZXemJVvRfWNbpj + ZbUN1tZqsYME5eSEF87M9cCZCWecnXAkHHBm0gFnpxxwbq4DTgxT9HUpJBwbssTJMVucnrTDxQXOuLLY + HdcWCQPYEZem7HBy0AK7W0kI2+Q41G2OYwMOODrohi1NdpifyzxMklofYoAKEuICbwPJAM71MZJGAdfH + WaM9zVma9lmsB9ycZIemRBvJ/G2kaGyOJzlkvp4d/UuBTvHUHmuC1kg9tEXpoTvBCP1JxhhINkRfoh76 + SWyFCfxvA9jyz7V/p0m6xguMMZJniLFctpt8Y4ySuAoTeKZChSW1swbw0tsGcI1cGs07Wi37N26N9B0o + 47VK56BPoHgOBsv1SfAMCTEamAKZuXWszIhim/dSIv55T1JcroPV1RRG9XOwpdkAW5tJmhsNsaPBFIc7 + LHG2n3GZuWt7gxXmU6iPVIq1hk0wVG6MwTJjliYY5nkHivm983Uk9BfpYqLKCCu6LLFuwF4ygLcMu2BR + g5yE2BgLSIDFKOBFtQrMlMswTQG2sECGNaybbVV2ONDsisMt7thb64gtxZZYKUh6Iu87XA+DAbro8dZF + J59XJ/tEL7lPn7cG/T7mGPBWcVuFbi81OohWHy2afGxQ72uHWj97lHlR0AsD2J3cjCjjZ6s81aj1NJNQ + c8v8bSTPbCHP7HRVo9dFjQEnJYYdlRhzkGOuPe9XGMAuwgCWY56LDPPdFZj2UGCSHHaCfWgoSI4h8smh + GA16yelaotgHImUojjZFUYKcQoHCIdMMXVWOmOjwxcxAEKZ6vDHe6Y653Z5YMOiHJWPBWDYehoVDQZjs + 88FErxfGuzwx2OqM1hpL1JepJSO4pcoKXfUO6GtxwVCHB0a6vAhvwhPjPNfisVBsWpmGvVuKsXdzCfZu + KseeTZXcrsOh3T04fWQCVy8sxV1X1+Oua5tw7cJ6XDi7CidOLsXRE4tx9PhinDi+BMcOz8fh/fNw/Mgi + XDy/Hlcub8P5i9tx6uwOnDi7B8dO7cPp04dx9fIp3Hn5GC4d34I9a4axdWEDdi2qxMmV1bi+vAJ3LSrC + HTPZuHMqCXfNjca9U5G4byoU984LJEfww9UpX5wZ88axMT8cnReKIwvicXBBCnbPz8D2eTnYsbgUB9Y3 + 48j2Xuzd2ollS8rQ1R2PPOa5qHgrhMfYIDbVG5l5McgqSERMUhi8AlxhYauGSmM6awBby6kVqA8s9GCp + 0aUu0IOjrRGsLQygMtUhdKFV68PW3AhO1A0e1Bi+jK2RAbbISfRBRU4QytN8UBDjgNIYe9Qmu1DwuREu + qEt3RkWSA0oSHVFAbZER64Bo6pxAT8W/DWB/YQDbICLCFpFRtojmPcfE2iI23gnBodZwdpVJBrCFpRHB + e+Y9CNg4msHJzUoygKOTA1Bel4Px6U5s270Ml68fwpPP3MRzr9yLl954AK+/+yg++OBJfPTBU8QT+Pi9 + x/HR+0/gE5afvvMYPnv7MXz+9uP45K0n8Pk7T3L7SXzxzlP47N2n8Pl7f8GnLD/l6y/efRpfvv8s/v7h + C/jus1fw7eev4MuPnsdHPOajD57GJ588j8+/fAVfff0G/vbt6/jqm9dm8fVreP+jZ/Dyqw/i4ccu4667 + z+Deey7g/nsvEVdwH8t7776Ce+6+jPvuvibh/ntucP9VPMj3H7rnIu6/+xQeuPsoHrjzAB6+Yx8eub4L + j1zYhIdOrcYDh5fggf0zuHv3XFzfOoxrW4fw0JEFeJzt9Z59w7i0tg4Xl+bjzPxEHB4MxN52Yfy6YG+T + G/Y0uGNHjQs2VdhjdZEFluSrMZNnxrzkgDWt/ljTGY5l7ZEYrw6gOPZBZ6EXekr90V8eJKGv1JuC2RUd + uQ5oybJGa7p2FpIBbIm+AlsMFTtgvNwZU5WumFfpjgVVnozn7pgmJxvLs8dQFvttCnNIspq5RY2aRA1K + E82QE6dEajRzLWPFvw1gNWITlGwn1KxRphDrAEeGk7uEMf9GKZAcp6FetUdxtisKs5yRm2aD7GRzFKRZ + oJhatDzXGs2VLuiq85QM4L5mb/S3eEkzBfQ1OnGfHd8TI3/FFNHmElqrmOeYn+qYnyoL5CgXBnCOAmXZ + SpaMndSBlTliemgx4tcRbeWOaC0Xa5jb8rUtGoqsUV9gI42Oqc6xRlW2FaolA3h22udqYQCXcH+hJc9t + jqIcNUrz1JKBW10u1gFmzq1zQjN5Z2ODM5oaXNHY6IYa8trqKnvCdtYALrdCWYkFSovNUFKsQUmhBsXM + sxUFanTW2mOgwQlD4seRClssKLHiszbH0hwzLE1XYlGSCVakKrEuU3NrHWAtYY4thWbYXKAiFNharMDO + CjV2MQ/vaLDAtkYttrbbYjM1y7JOxu8mK/RUqfidZWgolqONcbmjlPyiXM78a4yxCkNMV5vMGsDNGuxv + ssDxFi1OMZ+fbbHAmXZznO7W4uSALU6MOOLICHl2vwN2ETuYe7cNuWLrkAe2DHliU58bNnQ5YXWLrTRK + b++QDw4O++FAvzf293piL2O+MH53d7B9t7piZzM/3+TE+3bEduaI7ayPbTU21BKWLC2xu8EaB1rtcLzL + Eaf7iH5bnOq3xAlyp9PkWmIU8KlxsUyPBfYPmePgKI8fd8B+cY8j7tjF+9rc746lbY4YI68a7HJGD/VJ + L3NZb58fhoaFQRuJodEoDI7FoG8kCp0DwWjp9kNzl49UtnT6oJ65vq7ZDfWtbmhq80Az0dbpiY4OL3Ty + uC4e10309Pijp5fo9uf52R/7A9DL110dnmijNmptIWfj9+5ocyNc0NnONt/mil7qoV6ec1D8MUr8yYqx + QBjWi/j8lrRZY0m9mpxMjhXkNWsrZdhMLb6tRoOdtVbYI6Z8brDF3jpbbttgJ/nqtmpbbKq2xxrGiyVl + tphXrCVfEyavOUa5PVIiRpJoMUaMMr6MFXN/kQbDRWYYLlRjVIB9aizfFJMFRphfaoRlbCMb6k2xo0mG + PY2mOMjyfI8lbg454u5BJ9zsoS4Wo5F4f3uLTagLTbGvSI0DbPt78y2xI1t9a+SvglBiU4oCW1huFYZw + phJbsvhelhE2Z+thW56YGlEPO/L1sbNQD/uKDXG4zBRnas1wodESV9uF+esgleeaLHGsVoV9pabsF/rY + yM+sK9DDukJDrC0yxfpCOV8rsZ4xdD1j6Kz5q5WwgtddkGyMcXLgsQRdTKUYYmG6DCsZR9YJEzhXhS38 + zI4iLXaxb24vMpf63eocUyznvS7J0seKPGNsJA8+SA58sdMcd/eZ4aF+BZ4h3h6W47NxFf42V42/jynw + 1aAMfxuS3zJ/xahfxSwGVfhiQIWPuhV4q12OF5tN8WyLEo+2qnF3kwbX2K/PUoMcrGDf57Nalk1OnmxC + Lj8HtVH6KIszRn6cCbLjhbFhjtR4C6TEWiEx2px6yhxhwdRe4of/UGov6qmwcDMJ4XxPICLSQkJklFZC + VJyVhJgE5v54a4K5P8EOCSl2SEl3QkaOMIDdkZzuiOgEcgVeJyhMiUDqrgBhArMMEiPxqK9CIhUIjVQi + LErFYzVISLVCcqY9db4TMvNdpDI10xFJqbZITLZEAo9JilcgI5najDG8gW1RrF8+VCkMYBUWVGuwvM4c + axsYI5qsJQN4J2PVrhaWHXbYyv6yhvUl1pNdJsxfMUtajQl2tJjh6IgrDjIu7B50weYeB8zUsJ2XmKKf + cVGsadgvjF9y/OFyC/YPNUaodSaoe6Zy9bFQ/CGBfeBIgwwn2fYvUrddbVfgSpMpLtcaSiP/7qaWebja + FE8ylj7TrMKrvVq8PmiFt8ed8NZcVzw9aIk7W41xtFQHG9J1sCiBSNFhOxIGsB42sI1vJnaWmmB/mQkO + lxviFLXRBWqSO9geHqJOfLh31gB+alSL5+Za47kpazw1psFjowpChqcm5XhuvhIvLlLilcUKvLZMjrdX + q/HeOgu8t16Ld9ZY4PXlZnh1qRpvrrTEOytt8c4KB7y53AlPzeX99SlxooEaq1QXC3lfY7zPrmQdtKbM + IXdgm2Pbb8k1RWuemP55dtR0d6kaPRUa9FRq0Uu+31dtzddadN0ygLtYp8IAFuavQO8tA3iA/Wm4xBwT + ZdaYV26LhSWWWMh9i0rMsIh5bT5jz8IiQyyvUEgm8Arqu/XVCmyjztzboGGessIZ5plLbba4wed+T4MZ + HqBue7jWCI/VGODZOmO8zFj1dpsSH3ap/zR/P+hW4q0OBV7ms3ulWYEXGhXSqO3H65W4n+e+WqPEMV5n + e6Ucq3jNRcydE4xpY0VGjJPUeSUmmMvX87l/IfXhIh6zlHFvVZUc62sZ55hDd7daYV8rc1gjczffW8y2 + NMB415RkhnL200L205xEK2QlOyAjwZ591h6JcbaIZ7+LpY6PZR+OIW+KilVx2wzR0UrEsg8lxKqRlmSO + 7FRL5KdboihDi+IscgphAudqyFU0sxyFsb2mxJb8xRpFfC+fXKIwVh8VcfpoSDQmr5NhMNMCo/z8GHnh + WLoGQ4lyjKSwn2WZY26OxezI3xz2hxwrDObb8Zk5o63QBbXCAM4WaxKbI559NSLWFJFxMsQlCQOYMSiN + PJGfzSN3yi+0kiDM3xxyG2kkcC5LIr/QBkUl9ign96uockVxkQPSUsknY4ykqZ8jQnQYv/SQHGuEdN5b + Tpq5ZAAXZlgyNlijLM9RQkGWHXJSbaQpoCPEH1D89eHrMwd+fvoIDiAXZTyKi1QhKVrFuGiGNNZpGusx + k7EmNUaJ5EhjZEQbSQZwLfNSD7nePMZZYQAfZx4+T05zvcsBd7Rb4Y4mFe5tM8Nj7Nd/Ifd4fFCNR3tl + uL/NGFerdHCpTAcXSw1xmvnnUNYc7GAflwzgOILlFmH2JhJ8vS12FsIU3sDXa1muJtbwuA2JOtjDvnec + sedckTEuMybcKFfiZrUZrjPfXWO7uszcIAzgQ2zz26pMsbjYAH2pOqiM0EFmgA4SidgQQ4QHmUprwIcE + KxEiTGD/2VHA4X5iVluZZP6G+xsjws8IYT483tcAod5zuG2ASH8TxIey7pgvhPkrGcAhrE+eM5Z1G+Un + RgDzOCKG9R0fYITUUFNppr38aA3yIjTIClEgk5/JjlAik0gNNkVCgMGs+UuE+xC+cxAcaCT5VZHScm76 + yA42QTHPVUUNUR9jhpYUa7RQO9Snk7MLAzhJgZx4Uz5LQ6QwD2bGm6Ao3Qx1hfbopJ5pq/Ign7dBHo9L + ZTtKDGWdiKmgo/WQk8CcyT5QLM2coURligo11DKtxJ8GcBL5T5IRZpIMsTRZH6tSxDrAc7CNOJBlgDN5 + RrjM53yDuItx6u5SA9zNuH0Xc8+NKjUulcpxvkyJM+VqnCQOF5lge4YOtmbqYDc/s0u8LjTGFj7f9cTq + fBMszjHCdLo+8zuRwu0MBRaLP6sV2WB1sT2WFZHPFYjp2KnnUmQoj9FHaawxqtJUqM+2QG22RkIN+3xV + BnUQjxEoJV8oSTJAOc9bk2aAxkwxQ54ZpqqssZT8cXWT7a04a4oNtdQCjUoc6LWSDOATUy44OUPuPu6G + Nd0O1AxqNKTpI4d1mRelg/JUGRoLLdBN3nnbAB7j+aZbHDGv2QnzqeGmye0neC2BcfL78WoLTNaYYx7z + +GLm8OXM3SvI55ZLBrA9FrWINX7JSSuYm4uZawqM0UNOKgzg8QorTNWIGf947npegzpsknpskvsXUkst + q3PGilonxmQ7bGj1xsnF6f82gG8j0EsOP3cT+HuQsHA7xJckxX/WIL5tAIvjhDksRgoLRPL9pEg7ZMS7 + ID3OEQnhJD/+agR6y6V/0Hu5yOHmpICDrbE0tbMwd8XIXhtrJaGYNXtvQZi//8bsv/4lA9hWCUd7MXpY + hiA/CwYuEqNYEjF2QBHIokmoYhi04hh4Ixm4Avx14e2hCzdnHbjY68DN0QDebtzvbYIgXxNpKgR/bx0E + sJPF8/giBv2aAltUsixLUqGCwr2Swr2S79Wx7MmwxkiBMwYZWAdJ0AbzXdGT5YiWJEs0MGkNFnhieXsS + NgzmsfLj0JDsjAxvBeIcDRFqqYMQC90/EWk1B/H2DN6eamR4MfA6GiFFq4McGx00uJBgBBtjNxPbNQbi + J5jQXiHeSTHHe+yAbzHgvxyvj6cZMB8lEXmI5P5xBrpnOqxIqlzxwaQPPpkMwIfDvni7yx1vNLviBQrv + xynW70szxj0p+ng4Sw8vUuh+0G6Jr4ac8N2UK76f54QfZpzw40Jn/LTQTTKFf1nsjV8XeuLXaVf8NOaM + 7wfs8H23Fb6nIP62WoVvSRK/IRkR+EepMf5Ro8D3bWr8OGrJc9nixxWO+GWdC37dSGx2I3hO4l/rXPHF + Qku82meAJ+p1cHfRHNxZaIQ7+F3uJMF6vEUXLw3r4935Rvh4uQG+3myAn/bL8ccpNXCOuGwGXFMRSvx+ + yRQ/nzPGT2dM8OsZOaHEb2csCEup/OWUGX48Lse/jpjgh4Om+GG/At/uoODYqMDna+T4cIUar81T4qlB + U9zXpo+r9QYkliY4T9Jzrl6DC83WFFXOuNnlihutTrjaQGJVbY4LVea4VKnGZdbD1WoZrpGMXqvTJ3Rw + s1kHD/QIA9gEL80j4V2kglhj5JVFRnhlgT7eXmKEz9aq8c02a3y3yw7/2mWD77db4R87tPh2uzm+3qbG + V9spgIgvdsjx8XYZ3t9igrfWGZOcGuGDlUp8usIMny4zx6ckrZ/x9VfrlPh2iwrf71Dhn7vk+EGMdr5l + AIsR1H8cswLOOwNX3IHr3sANb/xx0w+/3xGAH6744ZuTPvholxPe2GCH51eSPC+zwsMLtLh3mkJrVIXz + FGKnSBCPdpvhWJ8ljvc5cNsJxyjGj3fY4iTb3/kuc8mAfWBUjWdnzPHuKnt8sckVf9vsjq+2uuKv25zx + 2XZH/HWPPf522A5fn+Z3vqDFPy6y3VwywfcXZfjurKlkAH97eBbfH+X3OWmOH89Z47fL9vj1mgN+veqA + 3wWuEJfd8fNZH3y2ywMvLnPGnf3mOE5hc5x94mK3BR6cccF7+6Lw9/OJ+PGuFPzxSBL+eCYOv70QiZ9e + DcePb4Xhlw/C8etHIfj9I3/gIz8iEHiHeDkIvz0Rhn/eCMeXRyPxwaZIvLc0Fp8tysS3i4vw89Jy/LKo + HF8O5OD1xlg8VOSLi5kOOJCixd5sEt1iO+xlgD9AonR83B0Xl3rj+jpf3LXFB3dt9cQd29imtvngzIYw + 7F4UjGXD3hhvd5NGZdQUO6MwxwXZWe7IyPKjuAxFen4UUgriJAM4tjANUUVZiCjOkSC2Y4tSkJgfy2MD + UZDrheoCNwzUuWH3gmDcfyAab98Ri6+fjsGPL/nj51dc8MfrbA+vu+H3Z9k3H3HCr/da45c7bfHrHW74 + 1/UAfHYuDC8dicGVDdHYMBqMkVp/NBQEM1ZGksgmIS0nEUl5iUjI4z0RsbkxiM6LQVR+DCIKYv7DAJ7d + FvvEe+IYcWz8LcTmis/+G9K6vxKi+X4UYjNDEZnog5AwewT6qBDCOB7rTkLlbYoMHxmSPIwQ5ayPEHuS + JTs9hDOexnqoEOerRUKgDSK8NfBzMESAvR6PM0SC0xxkusxBpbcM7SEUtNFmmEeiszxPic0U03vEP1Wb + tNhRo8G2MgqVQiVWZ8kwnWiIvihD1AQbINNTF+G2OvAR005rdODJGO9lowtfB30EOPFavE4g78mfmDV+ + b8MQXs5i+mc596vg56qBv6s5gtw0COY9h3ipEOarIvFk3g1QSH9WEv9UvG0ACyRGmiNW/Gs9UM5jTRHt + L0dSkAoZYRbIDLMikbRASpA5ErkvQazPLwzgQBLCMBLOSCVSSB6TgphzggyQFqiHgjBTNKRYojXDBrUJ + ZqiKlqM6RoGmRDN0pQlS5YD5ZS5YXuuBdc3e2NTigbV1ttjQaIXdvY44NubG9u2Mk2MOODVmh1Pj9hJO + ThDjdjg8oMWuNpmEQ/1i+hQxRaEdLrBvXlrojiszzrg83wkXJ+2lHzCP8phTI7a4MOmMS1OeOD7kRvFo + +6cB3BhmgGoS+CJfI+R6GSDLUx/5fsYoDzOT1gJuiLdFbaw16mItJdTHmEtEuZHipjFWiZY4Bdrj5ehI + kKEjzhQdMYboJFnuF//+TaMATDFGX6I+eilIBlP1MTdXTrFrgcWVFtK6v9PFSoznGlMA6mOQYmY0m6SU + pHc03wBjBYaYLlNgUZUZlrIdLSGma5WYWy2fNYGZK/4To5WGGCrTx3C5PkarDLnPBFP1ckw1iONNMVZl + hOESvlekh7FCXcwt0MGiEgqiShLmBn3saTPEwS5THCYOdpjgSIcSFwcdcGPMA+d7XLCbRHJBuQnGK014 + LVMJI1WzBvSYMKDF1NNFuugt1MFgyRxMVhtiWYcF1vTaYjO5gTCBl7eK76IgVFjSSDA3LqgwxTyK/kWF + plhXrsVOEsyDzc442uqOI+Qce2scsa3EGutyNJiONsRIsB76fPUkA7jDzQhdbnJ0uSvQ7aFEDzlitwef + h4cCbWIUrxefl7cVqr2tUeVnh2JvCnpPDYrIlUqIcm+S+FsGcJ0EFRqE+euhRpurCl0uavQ5qzHkrMKo + owrjjgpMOCgw7aTEfLEOsAv7sqsM83i9uZ4KjPnKMRqoQF+QDH3hSvSxrXTHmaGJHKwi0hRFURRcbC+l + yUpUZZmhp9YZ0z0BWDwSjPkDPpjqccN0vwcWDPlg0YgfFo8GsQzAvGE/zCcPmz/oi/FuN3Q12aC5SoPm + SnO011qjt9kBgx2uGO/1xkS/Dyb6fKTt6QFvLJ0MxYblSdi1MQ97NxdJJvDuzWXYu6UaB3d24PjBYZw/ + OQ9Xzi/F1fMrceH0cpw6vhBHDs/D/oNzsffAGPbuGcGu7f3YvqUfe3eN4sSRRTh9cjWOnVyDI8c34sjJ + HcQenD59CFfECODLx3Hh+DbsXT+OLYubsHVRJQ4vr8T5JcW4OD8bF+em4vJEDK5NROCOyXDcNRmMO6b8 + cI2c89y4B46wn4o1L/dPBmLfVBR2T8dh69xEbJxMw+aZfOxeU4v9W9uxb0cn1qyqwuBICkqr/BAVZw6/ + YAV8gs0RGu2CqHg/BIV7wMXTBhorGdQaY5hrTaQ/itraGMHSXAdaxlx78mUne33YWelDJdOBwkQHFmod + 2Frow5law5MxNsBLjeQoJ1TkBqOlLBJNhUGoSHFBdZITGlOc0ZzugpYMJzRlOKI2zZkC2h1lRF6iMwW+ + JYI9lfBxUcDPwwyBzCdhwZYIp76JjLK+NR2kLWIS7BHMY13cqFms9aC1NoKW9y0ZwFaKPw1g30BnxCUH + obaxAHPndWPTNj6Pcztx/0Pn8OiTl/HkM9fx7It34pVX7sNrL98j4Y2X7sGbr96Hd199AO8TH736ID5+ + 7SF8/Pqj+PTNx/HpG4/jszefwKdvPYHP3n4SH735GD549WEe9zCPe0R676/CEH77KXzIz7zx8v14nRAj + i999/0l88Mkz+OjTp/Hhx3/BR588jfc/fBJPPnUVd99zAhcu7sGx41tx9PCWWRzahiMHt+DwgW04eGAr + y50SjhzchSOHduD4oe04cWgL2+Z6bq/m9jKcPrgUZ/ctxIWdc3Fx2zgubxzC5Q19uLC6G6eXNePk0kZc + Xt+NG5v7cHF1I47Nz8PpeWk4NREtTYe7v92DudgZexpcsKvWBVvKHbC2kMI4R4UFGYxBWeLPOTZY2+yL + te2hWNoShtFyH8YzT7TnuaOz0BsdRHuBB9pyndGSZYeWTBs+by1a0gXMJQO4I8eKcdABw6VO/LwLJoix + YgpoYqLICeOFThgRM0BlWqEjSY0W6kNhANcmWaA8WYvCJA0y41VIipVLU0CLER+3DeAY7hMmcHSUKSLD + TRAVaoyYCAUSGWfSk6yRl+4oITvFBlnkjvliHbwsMcLWGk0VLuhk3u2u90Z3I8sGN/TUC1P4tvnLeyfa + GFcEWhhbmsrMqGXF6F8ZynJMUco6KsmUSyjOUKA0Q43KXC3qC23RVGyPphI7NBbbSrht/tbkMf7mzJrA + YlvgtgEs1hAWpWQAZ6tQmMXYmG+GihKtZO7WV9ujocYBdeS+DfXsW03uaGhwRU21nQRhEldX2aC8whKl + 5eYoKbNASYkGxYXU3Sybq63RXWeP3mpbDJZZYqrQHDO8zsJMJRamyKRlBZanKLA2wwwbc7TYkm+JLQXC + CNb8lwG8u9IMe2rMsaveHDuaLLGjwx7b+lywotP+TwO4hblaGMDNJUo0F5qwrRiit9iAbcAAU9W8ToNY + A1iDA43kLc3kJcznZ5vNcbZNg5PUFyf6rXF0iLlv0Al7+nj+bnvJRNnY54QN/a5Yy+utIf9f024vrT+8 + ltjD+L5foEeYv+7Y0+GBnW1u2NHqgu1NjoSThP82gK2xtVqLrTVi6kxqi2YbHBVLb3Tb4XiPFU70anFy + 0BJnR61xYcIOZ8atcWTYAgeEATxijYPkZQdHnXBgjNcbEVPWCQPYHuONNuhttUc7NW5HB/tLpxd6uwPQ + 0xOMnr5Q9PSHo5Nla1cAGtu90djmiaaO2bKmyRXVjS5SKYzghmZ3NLa4oqXFDa3CDG73QlubF8/LPki0 + 83VnF9txlw86O/geP9dU54AGtuUmfs9mft/mRnu0EK0NDuhgv+/k+XsaXaVZMoaa2Q/Fj2ctYr1SS8xU + KzEjjIhyMSJOhtUVKqyhJl9Pnrahiu2i1gpbaqywudoSm6qssYHtaS15ykq2zUWVduRpVhgtMcdwgRqD + hRoMCuOFbW2kSBhdGuk9UQoMF6kwwvY5lC/DMLme4HliqtMl5FDrGxV8XgrsapRhP7dPd2pxZcAON9ke + rnSIkbgqHKmUYU+JKXYVymYN4GJL7M23wo4sDbamU3cIAzhVhU0pwgS+ZQhnsGSM25hlTOhjS64BtuYZ + SiNkdrGd7i0yxv4SGU6wnZ+tt8SlVltcbXfCJdbPiToLHKxUYneJGA1vjA0FRlhDfrqKn1+Vb8xtU6zJ + k2NtrhJr88ywPtcc69mX1uVYYFkGY2uKCcaS9DBMDix+dJ2Xxu9KDbQ6m/0uWy6ZwNtZVzv5PbYVzxrA + axlrVmQaYWmmPlYWmGJLtQaHW3hfwgDuUeOhXqVkAL8zosIXk+b4alKDr0bFlM8qQkz5bIYvhlT4fFCJ + z3jcZ/0qfNanxkfdKrzVrsKLTXL8pUGJB4nrtQpcrNXgRJU59pSa8fuZYWGGDEMJRmiJ0kN1lAFKY02Q + K9bIjNdIo+BS4q2QTF2QKEbzRlhIP/wHih/9qaWEARwappZw2wi+jdtTQP8vA1jK/bbSaN/EVHukZbkg + PdtV2o6KI1eIJGf4D/P3NoLCZOQ3hBiVFy7WiVeTF2iRnGE3awDnOSM9xxFJ6XaIS7JiDtFIU8qKteVT + EoxRyHZRl69AZ6lCMoDnVqkxj7p1cbWKbVuDLdRlIt7tYt3vbrXBjjY7bGrUYmWVEkvKjLGinG2hwgDb + 6mXUDOY4OeyE4+T5BwadsZ3xS5xngu1qqFCOPl6nj+1/qFQr/cA8UW7BfCinDjHGPLanxfm62MJz7as1 + wuF6E5xuMsX5ZjnON7CsMcYVapq7Ko3xILXM43xuf2lR4yXGqpcHrfD6uCNenXTFY33muNKoj/3UIKtT + dbA4WQdLMnSwPHcOVlFjbK6QYyv7+S7qmP3lxjhSYYgz1Ua43GiCO9vleJiff4SQDOARSzw3aYNn5lri + 8RHuH1Li4SE5Hh9T4JkpNZ5fwHa0UI6Xlyjw5io13llrgXfWWeGt1RZ4dZkZ988awG+vtsM7qxzxxnIn + PDGlxZ0DapxqkWEnc8LSfD2MZ+qhK0UXTcl6aEo3RHO2KVqpEzsKqWmE+csc3FMuzF9zafSvMH9vG8DC + /G0vMUMn40sn+05nkRZdhbPmb2+BOfrZlgcYj8aon+Yy184vtJRmK5jP+DOvgNow3wjz2P8Xl8qwgnWz + slyODWwH2+rUkgF8lLntVKMtzjMOXG2xxZ11GtxXI8ODrLOHqwzwlxpDPN9ggjda5XivU4UPe1R4v1uJ + dzrleK3VBC82GOHlJhmPkeEZar0n6hS4jxpWDHQRf2TZUWYqrau6uNgUcwuNMcp7GS6idi02lgzgGebU + BbyvJbynZfzMcm6vYazezHsTf0rY08xcXG+GdTzPTLYxepJlqItXoiRagdxoNTJjteyzdtKSksmxtkiI + sWbbtyaP0iKGWiGaOj4yRsVtFaL5mehIJbmU6pYBbIX8TGvJDC3K0hLmKM62QDF1aAnjXFm+OcoLyDty + Lci5xBq3RiiIM0Q5UZ9oijZqvMEsK4xkWWMs0xJj5IeDCXIMJ4l1gc3+NIBHGCuHcskZC+zRXeyC1kLm + wXxHlOTYID3NnH1Wjog4E0TGmyI+WYXkFDNkkmfmkmcKg1eMAhbIEWv+Ev9pAOcxL4i1f0vEKOBKF8kA + FuZxfIwxosLmIDJ41gBOiTFCRqJcMn//pwFcmuuA/AxbZCVbkZNqEBFsgkA/Pfj66v5pAEeFmkoGcGKU + Eskxasn0TWF9CiM4OUrMFmeEtEhDFMQaoy6VcYD3KNbI38B2fKDJDieZb650sH11WOPuVnM82KXFX8bs + 8eyknTQV+2P9cjzQYYIbtXNwpWIOLpQZ4hTbykExm0WSDrYk6mBTPMEcs4X9aBvzjRjxuzWer+N0sDFB + B+v4/moet4rbAuv5uZ2MDUdy9XCWseFiiRGulMlwjbHtmviTQoMZLjWa4XSjGgfrlORMcixi2+xN06GW + n13/N4EQBnBYsDCAlf+GmA1C/N4mzN9bEAZwuC+P9TEg9CQDONRLX1pWVMwim8B8IaaDFgawKBNDFNJI + 4LhA1q1kBpsgXgy0YP0LAzgrQoncSA1y+Ln0IBlSeVx6mALpfA6pIWLGvv/DAA7gfQbKEBVojPgAQ2SH + mP6HAaxGQ6IWjcmWqKV2qEy1kJaqum0AJ0fqIS3akHpWjvJMC/J9JzSUOKGcbTg3Qcbnq8/71kE821RS + OOsnRh/ZIsckylCSzM+kqKRlbpqILmqa/mQFxthfp1JNyMWNsSzFgDHbEBvS9LCdOJhjiNPMDRdZ51eL + DHCjUA83iufgRokhrjN+X2KsOsf4cIo4Xk5eVK5k3DfGJj6fjel8tmKWFOa1XaVyxhnGfb6/sVTNPKDG + EvKVeZmmmEw1xlSaHAuzNeQyVlhfSG5dYIsZapTRPEt0pClREWOAoigjVLDv1WRqUE3NIzA78leBMn43 + gdIkU5QkGaE8yRC16UZoJH/pyVdhvEyLheSOK+utGWNVWMW4J6ax39ZM7tZnjcPDtjg26Yhj8zyxc8QN + K8nFh6ghapJ0kR2qwzimi3LGl2byox7y9546ahnG5FHy7bnNDphucpAM4Hnkv5PVNgRzaw1z7C0DeKpW + LB9nRY5u818G8GLy/inynqFyBXqKZOhgLugml7ttAE/X2mEBefOMGAVcR+1aacvvYkl+YIPFtY5YXueM + 5TWO2NzhhzPLsvDAvqb/2wC+jUCv2dHAYf5m0khgMf3zrPlL8sRjBSL8zJAUIQK2CwOHnfTP+RAv8c95 + E3g5GcPdUQZne1PYWBnB0sJAmubZ0tKYEIYvYWUi4X8awNKUb5IBLMzjWQPYycEUHq5yhPIaMVGWiBCE + jR0nVKyxEWKCoGBDBjg9eHjowMVRh5+Z/aHI0W4O3JwN4S2m4vQxgr8wgBkMg/11kUaRXsEG1EzRX8+y + hgG8KpFiNMoYpWEGqIowRle6NQWAWGOQKHTHSIk3BgoomDIoXEjShot9sbIrDZtHCln5swZwpjcDgaM+ + wix1EKrVQYiWwcNKD1F2woSQIdlDjWQ3JRLE2sAaHaTzuCre87ifATaGGuMsO/gD8SQtyRZ4LUmDtxLV + eI2E9jk2rqcYFB/N1sWj5YZ4udcWb8/1xGeLg/HNqij8c2UMvl4Qhs+HffEBBd1r9S54psgSD6Sb4B6S + +UdI0F9gJ3uHpPCTLjv8jQL27yM2+HaUGLPBP8Yc8I9xB3xPgvavMWLIDt/zGt+0afENg+vXDKp/J0H8 + mo3vawqKb9jhxUjgWQPYDP8a1uKfU1b4YbEdflrpgF/WOuKX9U74ab0LfiS+I7H6fEaLN/oN8WzLHDxB + 8vgEg/Wj9XI80WSM57oN8OqIPt6a0sM7M7r4dKUuvtthjF+OKIEzZsAlDXBVTSgIOX67bIrfLxLnFfjt + nFoa+fvbWSv8yvLn07yfE3J8f9QE3x82xT8PyfHtXt7/NiW+2KDEx6s1eG1GgSd4L3c16eBClS7OkCSd + prA7yaRyus4cF9lpr1AkXyehutZoicsk2RdIki/x/cv8zlel0b9GTEB6uFZ/2wDWw1NjxnhxvvjHoRIv + LzIhjPDKQgO8vcQYn63T4OutNvhmhy2+3WGNr7dZ8Z4s8Ldt5vj7Vg2+3KbGF9vV+Hw7ydlWBd7aaIrX + VhmTpBrjreUKvL9MjQ+WaPARSeunK1T4cp0K3242w3c8/ntpGmgZfhZTQB9mfRwT6/9aAxdcgCse+OOa + F3697kl445drPvjXBS98e9wDn+12xnubHPDqals8v9wGTy62wkPzLXDXuBmuUpydpxg73WeBMwM2ON3v + gGOd9jjSwmDYbIET7Ra41GOOO4Y0eHTKDC8uscBH6x3w9x1u+G6XF/6xh9fY64G/7XfDN0ec8d0ZJ/zz + sgN+uC6mcbYgVPjxhhl+vMT7PyXH14eM8bd9xvh6nyn+cUiNH05Y4peztvj1ooOE3y7Y83k74nexnvEJ + H9aVB15b6or7B21woVkl/ev4nkkHPL8pAJ+eSsB3N9Pwy4MZ+OOJFPz+bBx+fTEKP70SiR/eiMCPb0fg + p3dD8ct7/vjjAz/gwyDgbeKlUPz2ON+/k/3pRAw+3hKND5cl4Kslufh+URF+XkBM5eLztli8UuGDB0ka + L1PAH00yxrFcJrlKLc602eISRc4dK7zwyI5gPHUwBM8eCyYC8fRxPzx1LAz37I3F2fVR2LEwGCtGfDHW + 5obWKmcSOQfkZlMQZnkiMycAabmhSM6PQUJ+ImILUhFZmInwomyEFWVxOwMxhUl8L4biMQD5Od6ozHdH + T407Nk8H4uaeCLx0LQqfPcHv/HIwfn7dE7+94Qq86Y7fX/TAr0+44teH7PDLfQ746R5PfH3ND++dCcIT + +yNwfGUYlvQGoIvfsTovGAVZMcjOSUJq7v83BvDtkcC3EZvN9yXMGsBxWWGITPRGSJgdgnxVCPMwkUb/ + ZvnJkRegQibLJC8TxLgZIdLFELFupkjyZmwNtEQaP5MQqEWoqynCXYyQxM9lehii2IuiLVCJgSgzLGC8 + 30AxdrDNGudHHHDHAj6vGRdcnXTG5SFnnO1xwFEKqe1M0CtLLDCczkQfbogUV8Z1Wx34muvAixBTUHvb + 6MLfTg9+YlpohznwcZzDHKgPLxcDeLsKGEkGsDfjv6+zGr4u5iw18HMxQ4C7CmLEWRBzZ7AP864vcxqJ + ZiSJZgwJpvjnenKMFnFhZogKUkn/WAzxNkaED8mmP8l7sDnSQi2REqRFUqAGiYFm/O5iFLApEkk2M0hQ + cyMpsMK4HWyMLObK3GB9VEaboiPTCv15tiRPGjQnKtBCwdNDUTGUSxFKAbKo0hmrGjywsc0HW9o9saHR + HptZJ/v6nXFk2JmEiHU0bI9jwzY4PmqH4yNiamg7HGFe2c+YsbXZBNuaKOAZI45y/4lJe5yfccXFGTdc + mHbCxSlHXBi3w5kRsY6dA67OeOCuJX64a2kgTg67YEuTNeZTYPfGG6KFebk23BRlJMUFfibI8jZAFkl5 + AYlyRYSGRJ8ij3VUEWmGKpLtmig1aily6mOVaIghKYuVoTWWgj3OGO0UN52xRuhNNOFzlWM0S4XhNBP0 + kxD2Js3BQKoeJnJkWFCiwcIyDaZLSQ5JuIazDCTzd4gYydLDWI4BRvL0JRN4bokp5lcosajODIspeqeZ + I6aq5CR5MkxUm2KCueU2xioNJBN4otqYhFCBxW3mWN4l1v+g4G8UxrExCZw+Jot1+Rx0MJ9YXkrRVDMH + B9qNcXpAiQvDalwiLgyyHNTinml33D/fD1eG3LCPYntZpSnm8bpzef25NbwPCnqBucREjTFGyvUlE3qc + 9zFdZ4JlvPaaHmtsGnTAFj7btd1WWN1hQbD9871lvK+FlSYUgwYUV8ZYVy5G3dhSFDIftLngeLsH+4sb + DjW6YleFAxbEm2As1AD95GVdnrMGcKcbySv7pECnqwlfm6CV+5o8+Iw8Naj1skSltxUqfG1R7GOFYl8t + SnzNUeZjjgpvEnovM9R4aFBHDlXHzzSy7wgDuN1NjR5XMww4m80awE6zBvC4E+vSWYkpFz4L8sdJF9aH + uxzj5K+jfgoMBynRS0HYQ4HWQ8HcGa9hW1GiPGrWABbrIAlBVJWlRn+DC2YGg7BsIlQyfOcPuhNuEmYG + PbBwxAdLxv2weNIfS+cGYvFEAKYHPTHQ4YDOBgu0k9x3N9lgoN0Ro91umBrywfSQrwSxvXDUH8umQrF+ + WTy2r8vAnk352LulCLu3lLCsxIEdzTi8pwcnDg7j1LFJnDk+jVNHp3HkwDj27RnC9u292LS5DevWNmDV + shqsWFqDdauasXNrP/btnsTuvTPYvX859h/djMMnduLU6YOSAXzj8nFcPLENBzfPxbZlzdiysBz7Fhfj + yEw2js1NwanxeJwdi8DF8VBcHQ/C9Qm2sQkvnB91x/EhYYA4YUevC3aSd+4YC8GW8QisH43C6rEErJ3O + xNYVZdi1sQ57tjdj/fpqTExnoK4pCLFJ5vAKMIKDuz6cPGTw9reGp6817J3UMDM3hJmZASwsjGFjawI7 + WyPqCB3YkCs7M766M6462evBTKkDubGOVNqSZ7vYiVl/TBHqa4bsJHeK3nB018WhuyoCDdmeaMpwRUuq + E1rSHNBGDt+a6YTmbDc05fqiIT8AxakeFMTW1DFKeDlSx7jK4M+cEhRgRp2hkUYGxSVYITHFDmJKyOAw + C7i4GcPKeg601oaSAWwhQQFrOxUcXSzg4+/IYwNQXZODoeFmLF46jO07luLYiS04c24HLlzeg6vX9uPm + 9UO4g6XAXVf34+5rB3DvtYO4n/sfun4Yj944gsdunsQTd52Zxd1n8cQ9Z/Hkvefw6J2n8OD1ozzuKB6+ + fgyP8fXjxKN3nMT9147i5sX9uH5pL+64eRB333Mc9z54GvcT9z1wCg+wvJf7jh5dh527FmPjhmmsWDGK + pYtHsGTRMJYsHMXiBcPEKBbMH8aimXEJixeMY+nMGJYvGsVKHrdyUT9WLu7GqsUdWLuoDZsXtmD7gkbs + mWnEofl1ODyvBofmVmLvSAF2DuZi32ghjk6V4sB4Nnb1xeJAfxQODQTjQJc39ra6YVe9E3ZStG6psJ81 + f7M0WJRmiulkQ0yxXFJqgzVNPljbGsx4G4jhEk+KeHe0ZrtKaMxyRj2fcV2aLepSxVpzWjQw54s15xqZ + 71oytGjPsUZvkSOGSp0xUuaCoWIxy5MNejMtMZBtg8EcWwznOqCPHK/9PwzgukQLVCZbojTFArlsx2nx + SiSJEcDUj/GJZmwjKsTGKWZN4EgZ9SrzdTB5CvVqHHNxUqwFMhJtkJksYC2NYCnIsEJpthX5mw0aypzR + Xu0mmcAdtW5or3FCRzXbbJUV2qq1LM1ZatBaaUaYo7lCg8ZSNarzGbtyZTyPDMUZchSyngpTTVGQIkoF + SlmHNbmWqCuwkYxgMe2zMH/rbpm/EoT5S9QK81fsL5xFfakdaoqtUZFvgaIsJfLSGSNzVCgrtEBVGY+v + tJUgzN56YfAxDzQ2uqC2xo4Q5rC9ZA5X1digotoKZUQp772EeaSy3AIN4rvxvY5KK/Qw747nqTCXuXk6 + VYZ5Scw7CcxRyQqsSddIBrBYB/g/DeAthUpsK1FKBvA+xtq9jLm7qNt2Mf7u6HWVfqyZbLRCb6UKrdTB + DUUytJQo0Ewd25avjz7mNWkEMHWdMIC3N80awMeb/tsAPtFljmN9VmyrttgvRv9222Jzpy3WEWs6bLGK + +mgZr7W0xQYriJXN1ljXaoedfR7Y00N0ufOeXLCLbXx7swv5kSO2NthhRyPvk9s7Ghywvd4e22vtJAN4 + SxW/I5/5DvLQPQ3WOMRzHemwxpFOLY51m+P0kBVjsz31hpiFxZb8yxIHxRTQ5FSHyMkOUssfGJ+dnnpz + v5v0g9Jkgw26qW9bW9imWpwJN3S0eqO91Q/t7f5oawtEa3sAmloZF5u90djC2NnGstUTNXyu1cyF1Q1u + jONuqG92R32TCxqb3Qh3NLV4SGjlsX+i3Rsd/HybWB+6zgX10h8CbPnM7dBYbY9GPvcGoomvm2sd0FLj + wDbviO5aZ/TVsX828J7rxTpnWkxWMI+LUWe3ph2dKSVPKyPvKldhSbkZVrK+BFYJVFpiZbU1ltfYYmmd + PRawLc6tsMJQiZlkcvXmKdHHtjOYr8awWPe3SI0xYQIXmWG02AwjxUruU2CogDyRPG+swIBc0AiLyavW + Nan57FTYSf62r0GFE20WuED+dKWHWrTVAifrlf9tABea4UCx1S0D2Bxb09TYlCqMXyU2sl1vSDLFxhQZ + NrLPbiQXXZ9hROizrRtgS64RtucbYSfvY0+RKfYWy3GY3/VkjSXONdniYqsTzjba4RC/854yFXaRr25l + X1jPNr4yzwhLsw0IIyzPZdsmr12ZLcfqHDXWZAuYY1WmGGWvwgxjxViSAYYS9TCapIe5YhRwhjGWZ8p4 + DL9zlvzPUcDCAN5SqMY6xpuVWcZYRm68ihx5a7U5jpB/XiJ3vLNTjQe6FHi6T4l3yFU/n9Dir6Nm+OuI + Cl+OmOGrYTN8OWyOz4fM8EmfAh/2yAkFPupV4YMuNd5qV+OF5lkz6h5y2IsVJjhdqcCBUiW25Kt4XTmm + yNl7ovXQFKmHqmhDlJDji5kZ0hKom+ItCVskxdkgIdoS0eGWCKGGCvQXvx1qEBomMGsA/zeEyaT9LwM4 + Ot5GMoD/NILF1LRJNtLI35QMJ2lEcCTjekgEz/8/DGCxHcDY7x9sIiEwlLo0hvmB95go1v/NdpDM39Qs + eySkiutYIDJaLCNADUjdkxijj7xU6p88OTqK5NIU0HMr1ZhmXxCm24pqtqV6LbY3arG72UoygLdTp63j + /uWlJlharI/VpWxLFfrUBnKc6tHi7JADTg074vCAI3Z22mEZj51kuxoqkLFfKJhLyaVLtJiotME0+9BU + mZr9TYaFRWxP0hq9etheMQd7qw1wuNYIJ2qNcYo4U2uCS9VGuKvKBA/UyPAYdcMTLSo812OBFwYs8fKY + A16ccMIDPWqcrdPFznwdrEqlvknXgVj/d3WhIdaVybCtmn2rRom9VTIcpO44Tk10vt4E11pNcXenAg/1 + W+AR4tFBczw5osVfJqzwJNvXI0PmeLBfgfv75XhkWMl9KvxlWoVn5ivw/EI5XlmuwhurzfHmGku8tsIc + Ly5mGxODNZZp8epyG7y6zA4vL7HHY3O1uJNt81wX+22zGdaUyzDF9t2dZoCGJH3UpuiTY5gwdyjRzXjS + U6pBF7Vid7k5uist0FNliV7Gb2EEd3GfWLu5pUiJtgL1LPI1aCe6Wc/duWr05jIWMQ6NFFlinHl2soCx + ju/P5b7JPGrIXEO+NsAMY94S1s8Kxr315QpsrVVhT705Dtdb4iTj+tlmW1ymzrhZa4a7GafuqzLEg5X6 + eLxKH8/UG+G1Fhne7lDiPWH+sm++0WGCl5qN8Hy9AV5sMLllACvwOPvc/cIApoY9TuxgvF1TbIzFRSaY + KjDCKDFSaIQxvp5bbDprAPN+hAG8lG1yKe9xFcsNNWq2S5GLtbxXM6wWx6cboi3egP3VGAXh1PLhCqRF + kUdFWyEl2gZJRDy342L+twEcTT0fFTU7+EsYwOmJmj8N4ALytkIJYmpksT6uOQoZ44pyzFCcw23quKxk + E6THGCA/zgjl8caoT5KjNUWNAXK84ezbBrAFBhLYF5IUGMtg/TNGjmdb/JcB3FXkjJZCZ1TnOaCIn0sn + p4xNlCOSujcqQRjASqSkUYdkaZGXa4088qy8fEsJOeQuwgDOytUgK4f3n2uO3DwxQtgGhcV2KC13QlGh + /X8ZwFEhOuSO+kiNNUYm7+u2AVyQLgxv8qn/wwAWfFMaAXzLAA4S0xSHmPxpAEujgBlnhPErkMBnERes + j5Rw1k+Myb8N4CILrC4zx/ZKDduZBc43a3FTTDXeosHDPVZ4dtwRz/2HAfxgpynuYZu6UWeEC+VGOM2Y + cUCMABYGcIIuNsbrYlPiHGxJ1pcM4K1im/s3S6N9dbGe26uTdLGKx69O1sH6FB3szNTB4Tw9nCk2wvli + Q1woFX80kUsG8JUGM1xsMsMZ4mA9c1+N4v80gGOCDf40gIODVVIuCA0Sgy7Ekqa3IUO4n8l/GcASvAz+ + NIClUcBhrL9bJnAy84UoU8LVs1ND83VKmAxJjPvJrO+0UBky+H5GiAIpwhz2M0BiEPczV6RwX7y/ISK9 + dSVE8FlF8FmF+PM+A2SIEsfzuWUzZxSFzRrAdWz3dfEa1LLtiynUy5M1f44ATmXbFgawGAWcFWuEQrZD + 6U+d+bYoIXcWBnB6NI8J10UC21RCsA7vWVfqE7lxxihk2y1NUqKKekbMgttBCAN4PIVcnNxkUSo5RJqR + ZACvFyOA0+bgADnKqUJjXOBzuUIefbVwDi4X6uAy88SlEkOcZQ46zXhwvEyOo+RphxgrdpHPrONzXcPY + v73AEHvLGeuZ03ZXqbGTHGIb4+aGCvK3EnMspBYYp+6bYN+dyVBiJfvhhgK7Pw3gMWqabmH4sm8URBig + NF6BilQ1oSKoiXjvZQKS+StHSaIJYYzyJObUdBM0kuN05LC/k8/MI2dcXku9Wa5m/CIvY3zdyna1n+38 + 4CB597gDDs8ldx90lgzafnK7SrZbYQDnxcxBRYYCrdRD3dRAveSsA4zJwgCeFNNACwOYHH8euegUc+pt + A1hAGMBziQUNYhpoGywnT1/eSt76/zCAuwpMMViiwhj10hTPt5BaYkGj8/8ygBeRPy+rd8Gqelds7w3C + +ZW5ePhgK3SEuSvwbwPYGL5us/D3MLk1JTQ7iJ9aOk5M/Xx7qmiBcF81O4ItAwfJT7gtwn3MECCZv0bw + cDCEi70xHMTUbVoDWGj0YG4uftAxkn7UkaZ8voX/twGsnDWA7RSwFz8CWevDx1OO8FCSNtGBg0iuAni/ + vvrwcNeFq6sOnJ104GBP2OnA1lqYwLpwcTKAp/huPkYI8DdAgJ8uQgPnIIedob7cmSLbi4LQicncEjXJ + KpRGGKIoUBelDIRtKVoMF3tgtNSX8GHFBmCE23157mhLs8doeSDW9GVjx2QpFjbFoSnFGVk+MiTcMoBD + iGDLOQiz0UesI/e7KpHorkK8kxxRFgzqSh0kmeugmPfb5zkHK3z1cDjICHdEyfB0kjleSjTDqySzLzFR + PsVA9jgb2sNZOnisyggfTHvhq9Xh+OfWRPy6OwO/78zAz2vi8c10MD4f8MXbFGQvltvgUZLk+5IN8AgF + xQvFarxebYH3KIQ/7bTC590k5CRmX/aY48teK8ISf+u2xNfEN12W+Hsr99cp8SWFzJckAH+nAPk7icjX + xDfc/gdJyLckaf9oUeP7AQt8N2GBf85Y4Ycltvh5hR1+WmWPf61xxD9ZfrPUFp/NI/EaMMRLHQaEAq9Q + TL/QrcErfbyvETneGjfCmxO6eGNSB+8t1MFXG/Twr71y/HZCTANNXDEDriqB60r8cVUuGcFiaug/Lmrw + +3lL/HbeCj+fs8RPp83wzxNyfHvUBN8eMcF3R7h9UIm/71bjr1s0+HS9BV5boMCjvfq40aCDs+U6OFWh + h5MVxjhO0nK8SkUiq8GFBktcI6G+xoR3mYnmQpUpLpLYXhbmb40RrtcaMAHpSgbwjWYd3N+jiyfGDPHC + DL/bYjleWkRytcgIry42xjtLZfh8gxZ/22aHr7Za8z4sb4HPgPhqqyW+3MbtHZb4bIcW72zms1+rwEsr + TPHiElO8ukSBtxar8PYiNd5fosbHYhrotSp8IwzgrSp8t/2WAczv+dtRM/x+QotfT9qw3lxZRx747aoH + frziTnjgX5c88N1pd3xzxBVf7nbFJ1uc8fZaB7zKZ/bcUms8tsAS905ocHNEg0v9alwc1OLSkB3OCQO4 + zYZJlgGxlvXUQoLYp8E9Y2Z4Yj6f43ItPtvsgH/s9eB9+OKnw3748YgPvj/mhX+eEdd3wy93uOHXexzx + 2322+OU+3uO9Vvj1phb/Oqfm85Lh7/tN+ZyIPUp8f9AC/zrGZ3rKTsIvJ+3x6wlH/Hqc3+OgF77Y5IE3 + lriT6DvgZq817mZwfnKlF945FIWvLqfgn/dn4rfHs/H7X9Lw67Nx+PmFaPz0cjR+eC0K/3wtAv96MxQ/ + vOWP3971Az4IBt4OBV6KxO9PxODXuxPw/ekEfLkzEV+sSsHfl+TiH/Pz8c+JLHw3kIiPav3wcpEtHqJY + v5aoj3MpurhE0nFHswb3jtjisbVeeGZvEN48E40Prsbho+sx+PB6FD64EYV3rifimVMpuHtPIo6vicD2 + BUFYNuiLIfGP+jJ7lOQ7ICfHBZm5PkjNCURyXhQScuMRm5eCyPwMhBVkEemIKEhDTGECEvIjkZITgNwc + H5Tne6G90g0rh31wdlMQHj8XirfvD8G3L4bg5zf88ftb3sA7vvjjFT/89owXfn3cGb885Irv7/HExxc9 + 8fwRL9y53R+7FgViss0HTSXeqMgNQV5WDMlqElL+PzKA/yeE8XsbwgCOzwpDVKIXQkJtpNwT5UVy4yNH + XqAKxcFmKAgimfcnofJmXJXMYTnS/NXICLVGdjTJc5g14pi/Erzl0nFFfjLUkFR1U+BPxFPQFVjgQIsV + bsxzxZMb/PDq/hC8vDcQz28LwLMbA/HEmkA8sNQf16a9cWLIC+sbHTBKMVEZqoc0Dx1E2OogkPHdm/Fb + jAj2s9aFr+0c+NrrwttBF55O+vB0Ye5xM4SXq7FkAHs5yeDjbAYfJw28Jajgy5zg4yaT/njl72mMQG9j + BPmQEAoDmPc6awBbIiZEjYgABYJ9TRDkaYgQMQ026yMhQI2kYHMkBVkggXk6QTKAZ0cBJwfJkEWSmhep + Rl64DPlhJIShhigJ1UdTPAlPnjUmKDgGKXB6SJR601QYySYZKbDETKktltc4Y32zB7Z2+GB7tzc2tzpi + KwnJgX4XHBp0woEBexwasCOscXjQ5k8cIFHa1W2OjY3G2NRghD2dGskoPjnphHMz7rgw44azcx1xdtwe + Z9lXzozY4PI8F9yxxBf3rQzGfStCcGLEGZspGuflmqKPYlGs29tI8lvNOikJItn1M0KGlx4yfQ1QECxD + IflAQaAMRaEkeaEKVEYqUSMZwCrJAG6MNkEz82gTyW9rjCG6KdSGKHDGslQU1xqMZsoxSHLbT2Hfn6qL + sWwTTBepMI85c7zQFEMkuQMZerMGcI4ehrL0MEqMUJQIE1haC5j5cH6VAgtJGkU5TYEyJZmwBPPGbYxV + 6GOcEMbr8g6S2UEHbOb3XcMYtqiFn2V+mc8cv4DHLCqfg2XE6jKKoAYS7T457pjU4v55Vrh/2gr3Tlnh + vil7PLHMD48vD8aNcQ/sb7HAykpjLOJ5FlLMzzQqMa+B99MoQCLfYIrJWhMJ8yn4FzYrsKJdgzU9JN0D + ttgy7ITNfLYb+2yxiVjP+1rRrMIi3vtMCe+JcW59BYl6nRX2N1rjUIs984IwgV1xot0ThxvdsZR1O0Eh + ORighx5vfXR5GKGD3LKdfaHdlduuJtJ2M8sGNznqPMxQ7WGBcm+KWV+KFT8blAZYodzfEhV+WlR6W6Da + yxxVHhrUuKsJBRr+wwDudTVD/y0DeFgygZUYdVFigv1rguefcFPwNeveQ4YR8t0hfyUGKP66KAi72Fa6 + KJjb481RQ0FcGkkhQRRSQBUnmaAySynFZjHKd9V0OJZO+GPRqCcWDLtgesARUwNOWDjigWVzfbBiXgBW + LwzByplQLJrwxXi/K3pbLdHFttzXZovhLhL0fjfMH/XFzNi/sWQykJ8NxbolsdiyOgm7N2Vj75Z87N5a + hL1by7F/Wz0O7mjDoV1dOLK3H8cODOLI/iHs39WLnds6sHFdA1YuK8fMvFxMjKRhYjQDC6YKsWZZHd/r + wqbNI9iyYx52HVyDQ8e34tSZ/bh69SRuXD6Ki6e24Oj2aexY3oTNM8XYOT8Hu+cmYe94LA6NRuLoSAhO + jwbi3IgPLvB7nx1zx/EBB+zttcGWThts6BBtxQMbh/yxbjgYKwZDsGQ4Cit4jvVL87F1bSm2b67E+g3l + mL8gE22dIUjNtIRfqBHsXHRgYasLRz4bFzclbO2MoVLNgZnZHGoFQ9jYGcHRwRjOjnPg6jwH3ox7/r5i + WZg50Kh1YGKoA7mJDmwYg10Yd/3YziIYE/NS3dBcEYZ+8vL+2ii0FfqgLdcdremO5PW2aE+3RWe2E8WU + JzpLgtBZHomKLB+K4VkD2M3eAO6OjN1sL77MMQGMLWEU7AlJVkjNsEdsohWCw8x4zwawstGB1tqAMJFM + YMtbsHdgjPexRVS0L/Lz4tFQl4/uripMjLdh3rxuLFjYi2XLhrFqxShWLx/BmqVDfF5DWM9965eNYCOx + ecUYti4fw/YV49i+fBI7V01h50pizbSEXWvnYcfKSR4zjq0rJrBjxSR2r+Fz5nHb+Jn1i0ewYqYPyxb1 + YuWKQaxZN4Z1m+Ziw6YprN84F5s2TWPDugnMn9eGkeFa9PVWor29BC1NxWhuLEJTQwma6lnWl6Cxjvvq + yyW0NpSjvb4MnU3l6OGxvS2F6G3LRX97LobaszBFLO7MxpruPGzuy6P4zMHWrgxsbE7Aaj6P1bURzCcx + 2NwSgfV1ftjS6IMdLR7Y2eSKHfXMM1UO2FRmhzWFVliWpcFC5qf57ItzkwwxmWKMpSXWWFPviVVNAZip + 9sFgoSu6cpzRnOGAhjQHVCUzdiQwnsRrUJHA2JI4u3ZvTZIZapPVaEoXBrAtBbUzhkrdqOvcpB/2WlM1 + aEhQoD1Fg+4MSwzk2qM3i+2Fr1sSVdIMGQ2JjEXJjEuplihMsUQmzyvWakwiEvl+QoL6Pwxgalbm3dAA + sTyRIaKZm8TMHonRFtIItXS2J/EDZmGGNcqyrVGZb4vGche0VbmhtdIVrVUuaKnkfVXYoLlcK5m9Yr3f + lkozlmbSzALNZdSyzFNVubcM4Ezmw1RT5CcbIzfRiDBGXpIpitKUjGWMcbnUunm3pnnOvV3ObtdkW6E2 + xxp1OSzJD2ryrVFbaCOtn1fHOq8s0KIoU4kc5sq8DDmKxQibIi2qyq1RVWaFKt5nTbUt6vgMm5pcUF8r + RgU7oKmOrxudUN9oj+oGe5TXMb7XaFFGPVpZqUV9lRW/ixat/I6dhWoMi6ld+R3mJptgKsFYMoCXCgM4 + QxjAltic998jgIUBvKNUhT2Vahyos2Be0mJvkxX2djiSi7hiNWPUVP2/DeBGyQCWo7WIeaiAub3USDKA + 59eY3jKAzXGwyQInmrQ4TZy7ZQAfo2Y93KPFwT5rxj87bO+wxoY2S6ykRlzeLJZ/sMYCXndBvTmWNGgl + A3htK4/rdsPOTlfsbHfB9pbZEb9bWQ+b622xmXWxg9s7mxywg/WzvZ7H19r+aQBv5jPeWqnBjlot9jfZ + YD+vc5Da/EiXBmeHrKU/LV6ZdsH5SUecHLPGkVFLHPrTACZfG3fBnhF3bGYuEj8ozW2wQVe9JVobbQlH + tNQ7o63BA6313nxNzt/gi+YmPzQ0+RDeaGrxRksb97V6o465vbpemMDCAPZAfasn6ptmRwILM7iRfVig + mWjhe82SCeyNdp6jrdEDTbUuqK0Qa0Lbol6g0o6wQUMVwf1N7PdNor1XOlDHOElLL/TX2GO8xhYTVVqM + lskxXGSE4QJDDPG5jRQbEaYYK5Fhgs9zXrka84mF5eLPe+ZYJGZwqSafZR1Psz5H+bq/RIWuPBN0Zhmh + m/yyP4/nZBsaYRuaKDbDKHnfOMsxyQAm9yvg9cjzxgr0yfEMbxnAZthCbG9UY4+Y7llMEd5piQudVjjH + 7eN1/9MA1uBAMduMZACz3aaqJeNXGMAbkuRYxza+Lt4Ia5OMsIYxbk2yAdak6GFdpgE2ZRtja64JduTL + sLtIgd28rwPs80fZZ07WkT9TmxyrtcO+cgvs4v5djA/bK7RYz++5lJ9dkK6P+RlGWJhlgsWZpliSYYqV + GUqskKDCinQVlqQrMI99eozXFgbwcIIuJpL0uc8Ai9OMeYwx+54pNmYrsb3AHNuKNZIBvD5P8acBLEYY + b68SBrAVLrRZ4GabGe7rUOLpXjO8NajBJ8NafDogRvxq8MWwBn8dNmepxSd87/1uOd7plOHdTjne61bh + PWqGtzo0eKFFjcfqFLheboRTxQY4UmqMnQWmWJslw6JUY4zEzkF7uC7qI4QBbIwixtxssZZlohZJ8daE + PRLEdLJRVogO1yKEujGQelBMAS0hTCWZviGhSgSHKBEiYdYAjokR5q8we4UBLKZ/njWAo2ItERljwW0r + JKTYS6N/hRk8O/2zAoGh5AuEKIUB7E+O6RdkCt9AI/gEGHHbCEERpgiPVfJzFkgiF0nJsENimjV5hSXC + o3lP1Gvh4caIiNBHXKQushL1UUVN0lpAjVJOPlupwBTL+cLgrWAbqtEwblhgb7MN9rSSl3F7dZkMK9k/ + VhTOwdoiXeygnjjeKsflAUtcEb/nULsdYwzb3WGLldVmmFuswGCeTDIju3LUGGBcF+sJztTbY0G1FgvK + lVjK660oMcTKQl2sL9bBdmqTPZUGOFhuwPZoiJPUHBeJO4n7auR4hNrjUWqap6kHn+mzwAsj9nh2zAF3 + d8hxopKfz9PB6jSd/x9rfx1mR5V3DcPt3ce1+7S7u7u7u7u7JZ1OOp5Ox909kCCBCEkI7hocBgYfhoFh + hGEGGFyCrG/t6gSYue/n/b7reb8/1lV16lTVqbPl91vrrLP3Znskis2wlf1lZ4OG2kLPfqXH9eKPFM0K + nG6V4/YuJe7mdQ8NafDYuBFPEE+yDT21wB6Xp7i/wIBHRnV4YEiF+9meHh5T44kpDS4v1uDpGTWeW67E + S2s0eG29Aa9tMOD3cwa8uEqHZ5ep8PxyLZ5bpsezS/V4Zqk9Hp+2x72Mo+dHHXGTmOGhnTFdmLt5MjSz + LurSLNDC/T7GiWH2tSH2vf4aIwaYvwbqHTDY4IAhxpsh9tH+OiPzjBrtxUp0FquuQotulnFvkRp9zHX9 + BUoMcX+C+XUhOc/CEm6LdVhUrMFUETUL9edUiTVmKtifq0QdKLCdsVAY5YdbDLi+WcQcB9xKPXa+zSRN + jXsv9ZqYivsh1tETdRZ4ptkKr3bI8FavEn8YVOHtASVe7bHF7zqs8RK15e/aZYQSL7QqcZnl/mirFnc0 + qaVBMQeEAUyNOyt0bqktn49xl9t5A1hx1QBWSwbwGj7XmkpqW7aVLWynu1mX+1r1rFfGm1IbTGVaoCPJ + HNWxliiMtEJOpAyZscJMEzOdmaS+mpzgIA32SkwW63AbkJD03wawYt4ATtX9YgCXUlOUkrOViFG3wuzK + MxBqFJOvlORrUMQYl5tmg6xECxSn2KImXY6WLGpIcrvRQmdMFDphYT7LntePZrAvMD4vZGxclC8MYMN/ + GcDu6LxqAJdLBrCOfZnPlS5DErlWGq/NIVcRo38lA5hx/xqKyF2KSowoKNQjv0ArGcDiWEmZI8rKnVFZ + 7XbVANYjTTKALckbxayl8wZwgTD7rk4BXUIeW573qwFc9hsDWIz2jQj7rQEspkD+3w3gdMYjMUI2Mcwc + 6WJ5zEQZy0bJWKDDUuau9eSX4g9FR1iftzC33c68d1e7Bo/0G/EC+/OLi53xDPuiMIAfZ997tE+FBzpV + uFgvw62Vdjieb4H9mb8awLuYW/Zk2Ujmr5j2eXe6OXZyu525Z1umJbZkW2FLDvNfrgV25JrjQIE5rmMO + PsV4drrCBmeqrHG+njGhWY2LzL+3SQawHte1abCn+f9gAEdYI0ZMAU3dHxHJmM9cECMZwCrEMSfMQxjA + jM3/bQBzXxjASRHCABbmL8vwqgEsTN9cxn4xir0w1YQC5of8RB2yYpQQS6+lh9shk5+bGc52EWyFBH9z + JAVbI1PcJ1KJFGHMXzWA44Mt+Dk2iAqRISZUzvpQIDXUDoXMJRXMCY2JajQla9DI/lCfoqG+0aCKuqMs + TSEZwML4FQZwZoIl8hKFqStHTa4B9WyD1dyKUcHCGM7mORkx5kiNMJOmg86Ks0BegjWK2N4qUhS8twKt + qeTH3I6wXS/KZq7JUWANOcIGxr1N5AVbhKGfY46jRVY4VW6Hs1cN4IvMDbeVm+Ect6fLzHFzuTVuZL3d + yHx1A/n5dYwTexjPNqabYb24R7EVjlHPHKceEH/ePMjtvkYTdtSZsLHaiNUlGkymWmJBmjX5iIJcw4At + pVcNYOqWRdQDY0RLqgJlzJflbLvV7CMCNRnUQ1dRkym2Vw1g6okaYQDnyNCeSw1APjHCuDxdbcAaxu61 + kgGswfZmHfa063BkwBHHRp3Iqd1w3bQ39oy6Y7bDAcOlMtQlm0lTQJfzGRsLGdMbXDDY5oFh8vixVics + kAxgF8kAXkEsa+H+VQN4sTB/mx0kA3hxg4651l4yfNdRM6zrdv3FAF5y1QAelAxgO/STA41WqbGQ+WWm + zR1rurykUcDLWjz/wwBeKQzgNi9sJlc/MB6DC5vLcPlkH8zm1/LVSgZvqB/JyVXz97cI81dKo5PEyF9x + vtiKY8IAFv+yTwizZ9BwRmKkCRE8L9jTFv4eNvB1s4WHiy1cHedH/xp0FtDrra4awLaSASzgIAzg35i/ + vzWAXRzVcHNSQ0wF7eLIcw0W8PGwI3nTIJwdVqzjERLMz/O1gIe7GdzczOa3Vw1gMQJYGMA+ntYI9Jch + lB0qgh0xIswSsVEWKCu0RzsF9lBbEBO0D7pKndCcyc4UZ42SEDOUMRC2ZxgwLgzg2lBMEYvqw7kfhtEy + iplcDwrGKGwbL8GhpXVY052B7hxvFIUwmHrMG8ARRjOEG80lAzjNS5i/WqT5aJDkqkCUxgKRcgYlrRmK + Hc3Q622GlX5mOBBggdsibPBkqhYvsYP/jonuRTbqy7FmeJId5olSCzzXocJHG6Lw9YF0/HRdPnBTOXBj + GX7el41v1sbj40VheK/PB69TND3NzvNoli0uk7z/rlyHVymK/iBMYJKrPzNg/qVLh792avD3LhL0Th3+ + 1qHFhwymH/G9D0m8/1onw1/Zsf/BxP2vEht8UmSLT4pt8SmJ6GfVCvy7UY1/k+R9NqjFvyd1+HyJAV+t + dMC3a0z4eq0jvljvjM/XOeGT1Sb8neTqj5MyvD0ix7sTBry30BHvLnLE+4tN+GCZgaAIWGyBNxeZ4Z1l + ZvjbejP8e68M35/QAWcNwO3EHdy/S8utah63a/DzxXkD+IerBvA3t+rxxU0qfHqDHJ+clOHfJ8XoUg0+ + OWrAR/sM+NsOe8kAfmLYCpdazHBr9TUD2BY31SlwY52KpEeLMyTVt7cbcQfF/8UWOW5rsMZt9Za40GSF + O0im7mixwB2t5rijzQx3d5nhkWEzPD1ljZdXKPDaGoVkAL+yygavrrLF22vk+GCrAR/ucsJft9njL9uM + BMXPDhP+ttNROv73PcQ+J3yw1xFv7iBZ3sQ2MKfEi8JMFmuYrNbgrVUa/JHb9+c0+HATv9NOLT7fo8YX + +8QU0Cp8f50WP9xgwI83m3DltCtwwRc/3x6A7y/546uLPvjyoje+OOeNf5/yxqcnvPHxEV/8Y68P3tvu + ibc2uuKVOSc8t9oJj5MEP0gSfBfr9K4FJsKdZNhVWhPrGIn90UY73NytwB0UdA8v0eP51Ua8tcmEj/a7 + 46vjfvj5pjD8dCocP90Siu9PB+PKhUBcuScAPz3kj58f9wGedMOPTzjhp8ec8fNDLvjmohFf3qLFZ9er + 8Mlh4oAGnx8x4Itj9vjmekd8d8KJcMH317vhu+M++OqgPz7c6oc/rAnAM1NeeGSRF56eC8LrB6Px99sy + 8NkDefjmchF+eqEEP72UhysvpuG73yXim1eS8NWrCfjy1Th88UY0vn4rHFfeCQP+FA28Ewe8moyfn2W/ + eiAT35zJ5HNksq8Ry3Lxr4U5+NdgCj7qjMJ7tR54rYTiNNsC95HY3FtkhoebrPEMy+PlWTe8fYx98Gws + /nlvGj57NAufP8pnejQNnxL/fCQX79yeh2dvysade5Nw08ZY7FsWiTVjgRht90JbnTuqSC6LSgOQWxSC + 7OJYpBWJkbJZSCzJQ1wpUZaD+LJsJEsGcBwyi8JQUByCqtJgtFf7YVm/L46tDcK914Xjd3eE4aPnY/D9 + W7H4+Z0Y4I8x+Pn1WPz4UgS+fyYQ3z8RiI/vC8Drt3jhwQPuuHmzL7YsCcJIeyCaKkJQXRKDksIUyQDO + /v/TFND/jd8awGlFCUjNj0FSeiBFurOUe5IClchhbC0laauK0qMiSoviMDVyxXTQ/iRYAXLkhmlQGEcS + neKK4iQX5EaSlIVrUB5JwhSpRmcESX28DiuzdNhXb49zE054ZlsA/nhDNP55eyL+cSEafzsdhb+eisV7 + NyXg7esT8dL+BDy+LQFnV4RiZ7cbJovkaGQszmesTmauibA3QyjjfKjJDCFOwgC2QKCbxS8GsN9VA9jf + U44ADyWhQ4C7ju8LaBDgqeR7Mmma6BBfW4QF2CI8UBjAaiTH6KUfiiUDmIRVENTIIBnC/WwQScQyryUF + q5EaxrwSpidR1CE1XIsU4poBXBitQkmsCuWxJEWx1qiLtUIThddIthrLKp2wqs4FS8oM80YoBamYemp1 + jQlzDc7YTBKzs8cH+/r9sH/AH7t73LG31w1Hh71wbEQYQM44NuxEOOL4iJOEY8SREUdeY8C2djm2t8lw + sE+sOeWOW5Z4Swbw2eU+OLXIFTcvcMapCUfcOikMYG/JAH54UzQe3hiDUwu8sKvNiKWFMoykWGGARLQ7 + WYs2lkd9rB7lYi0VEuWcICvki39IkgsUhNiiOFyGMpLtOmEAJ1F0UyC2J6nQlmCHNub2tjhLyQQeJAlc + KP7dW2KgwLHHNIX2JHOkMIBHMs0xmS/W+FVicZkKC5jvRvMsCEuMFliSbP63AWyJRWXWFMIyLKtVYJWY + prBBheX1SixrkEtYSjEutuIH5qX1ttzaYbZTje0jzjhIQnl0qT/2sow2stzmOpRY36bE5nYVtrWKdUhs + saPBHMe7bHFxQoPHljviuTWujNOueHoVsdoTv9schuc3R+HeGX9c3+fAa+TYRCG/oVOL2S4NiSWfo43o + 4DN0KLC8U4kVXRTsPRqs7dVivRgBPGiPrSS50jTQ4x7YM+GG3cSuMRes79JijTCUa2ywmiR/R4NGmmr6 + OjEbBEnqyS4B8Qchb5zs8MZGEuEZCtbJCEsMB1lgiO16kO21308mjQYWBnAP+0U7ty1eMjSRF9X7GlFz + 1QCuDnVCTbgj6sKIUHvUB101gH31aPDRotFbhRYf9mlhAJNXDXppMeShxZinFuNeGox7EuRck95KTPjI + MeEtx5iPDOMBCowzloyyLw2EKtETKUcfxXB/qhE96UY0pahRTQFRLn5MTLVDVRafjcJgYa8P1i6KwKbl + 0Vg/E4rZaX+sWuiBGZaNwKoF3lg3E4BNjBNbZ6OwZU001i0LxfIpP0wOOWO01xGTg66YGvHAkglvrFgU + iJXT81i1OAhrec8NKyKxeTYOOzYk49DOXBzZXYjDe0txZE8Vju5uIFpweFcbX3fhugO9OHawDwd2d2LX + thZsmqvC6mWFmJpIxehAHEYHEzE9kYVVM2VYu6YJ6zf0YuuOSew9PIvrbtyB0+eO4c47b8bdt1+P87fs + xI0HlmD/ujbsWFaCXTM52DmVxPYYi4MLonBkMhQnJoJww7gY9euNGyc9cHjQhF1sM5vIjdZ3OmBDvwc2 + jgZi/VgYZomVEzGYXZyEzWtysX1jMXZsLcOWLWWY5euxsVhUMX8mpavhTTFsIP91dDGHu5sNnBwtoNOY + Qa8zh9HeCs6uNvDypB4JlCGSMS0uRof4OD38/Sxh0JvBztYMckKMDvb1IN8OtEZCpArFmW5oqw7BUGss + hhui0F8RKE0P3J3rip5ME/pznTBY6I7B8gAM10ZhqDERDUXBkgEcGaCCl4sFvNws4ettjQA/a4QIA48C + PD3LAXmFrkjlPcRoH08fSzjw+e2laaDFKGChY+TUN3K4OmupPZwQG+2PjNQwlOQnoLI0DXXVOairyuY2 + Gy0NhWhrKkJbQwH1SD46uO1pLERvUwkGWkox3FaO4ZYyDDeX8RlLMML9kZZyjLRVEGXkC2Kf77eWcr8C + E52VWNBdg4mOSozy+EBzMTrq89DalIP2tnx0dhejZ6AC/QOV6O3ntq8CPd0laG7KRm1NGqoqUlDKXF3I + Zy3IiycSUZDL/VweI4pyU1GUk4rS3BSUcVtZkIbawiTUlSSgviyWfCEObRXRGKiMpVZKxMqmVKxvT8fW + 9jRsaUnCxtporC0Ppqj3w/qaQGwi1pV7YH2VK7bWumB7vSt21rtgW40LNpU5Ym2hESuymKso3GfSFVhC + 0b44W461lY7Y2MQ+2RSAmWofjJZ4oDffFW3ZTmjMMKEySYeyeCXKExSoSFSiOkmBmmQlalNUaEhTSyOB + e64awGNVvhit8EZvgRP7vwq1CbZo4bY728A24iyhL8ceXZk6dKQb0JZpj+YsExqyTYwPJhRRJ+amzZvA + mek6pFO7/YcBHG2LqFDxr35LxDE3xUfN/7krLVGPnHQH6QfMslzeq5CxrsQZrdXu6Kz1RFuVG9pr3Akn + dFQ7oL3KQG7HZ6j5FZ11Rm71aK0QBrAGtcViymcFShm3SlhWRWk2hDCBmRfFv+DFlGgFBmnZo9p8A+oK + jBLqC3ms0AEN4o/QfI6mAmEEX50GupyfX+OK1irnXwzgQt6/MJv35H55sVaaCrq+2p5t2kFa67elyRXd + HT7oaPNEq7Q+ML9ThyfaO9zR3O6GmmZHVDXZo7bRHo1NPL/BhPY6B35Pe/RRs44VqDDFz1icIcMM47Aw + gGczVdjCZ91Z7IjdpYw/JXpCi52lauwuV0kG8NF6Ha5rMeJ66rYTXU64fsADhwa8sKXXFctaTRit16Cn + WoXOCjFVmxy9zNkDlXaYqLHDVL0NljNvCgN4f6e43gG3ML+d6TThHF8LA/iGfj2ODxhwdMiB9+Vz9Nhj + C2Pg2lYD1rQasbrVAcv5+cub9dLrayOA9/Z7Y2+PB/Z3kUO1u0rY3eyEHc38Hi2OkgF8qMsDBzvdcUAY + wC3O2NPI9+qN2FWrxa46LfY06HCY9xcjvo5So5/sEwawM+4gr7pE/nRhxhOnp11w0yInnFwofqxywfEF + rjj2GwN4rvuqAdxkRDc/t5v1JEbcdrMvdTf5o6s5EB0CrcFEEDo6AtHVFYzenhB091BbtPuhudUHzW2+ + aO3yR2t3AFo7/dFG/G8GsEBvdyD6uhh/OwLQ1eqH1np3tNS5oqVWmMAuEjrqhfHrhq5Gb3TVe6KrzgNd + NezTte4Y5vEF9c5YyPYhptwbLbfDcCk5XLEVBsm7BstsMFxmx+MyLKhkriYWV2kwU6nFUvaNmToxusIB + 02xr4yzL4QoFeousGS8sMVRoi7ESckGxzi/b0HSlBlMV5MJiW6nEggrZvNFMTFVcM4AV2NKmw852PetR + h4OtWlzXYcCpHgec7THhdIcRNzUJA1iJw2xjB8UawNIIYGEAO2Af+93OTDW2MZ7Nj/4l10u1xcYkK2wk + 112XbIF1KRZYn2Ym/dC6LU8YwArsLxfTO+txmHHgOMviZIMTbmx2lczf49w/XOOAgzx+sJHtqdEZW6v1 + WJlrw5hpgWneZyaXvDOHHC5XgfW5aszlqKU/6q3ldnWOAsvY334xgFPNpPWAl2ZZYmWmtWQAb8qVYTv7 + 5Z4SHXYz3lwzgDeSo68rtMHmMgX21unY9xxwrtuIu7oNeLBHi+eH9HhzVI/3R434YFiHv0/YS8bv3xc4 + 4G8LHPHBuD3+xOPvSOuRKqURin/o5TVs3y+Rdz7eqsKFaiucLDPHEdaDGBG9gd9lWbo1RhPM0BljhuY4 + KzQkkbcx7uanaKQ/16SnOiIt1RkpSU5IjjchIdpADiFGAP+3AaxBBPVWBHmD2AoDOEGYT4mOSEh2mh8F + /FsDWBoVzPf5OiVdTNksRu06SNM/CwP42uhfaeRvtAKhjPmh4XLJ/A0IIZ8gQqPsEBWv4HXUbJkOEp9I + SrdHfBKfKU6JqGg5n88WsdRqwgDOT7NkvLZBO9v9cDXba60cS6rJ5yttJcNtWyM1bYtBMoCPdjtje50a + GxnXNpVbYyvLbUeZGY7XW+G2HhXuGXcgHHGRuu0mxrDDPY7YVE8dxHY/VqjEYIEaffkaDFMXzYip0xmv + 1zBWrGH8Wc82valWhrWlZtjAe+6oMsfeGku2S0tcV2uDG6lzzjUpcTfj6IPNSjzaocbj3Ro8M2TAsyNG + vMB49cykMy612+BkjRn28x7bi8zZjoRJbYkdtUrsatSzTxlxtN2AGxjnTvEe5zpVuLNXg/sGNHhYrC09 + ZsTj40ZcnjRKBvDjkwY8OqbFA2xDd/cpcA/b0X3Dajw8qcWjU9RM0yo8OaPAMytVeHFWjxdmtXhhtR5P + L+P7i+R4eIEdHpyQSXhoAT9jyh53M4aKpXVuZtzczbi5Upi5eUrJ/K1KNUejMICrDeRlJsnwFUbvQL09 + BusdeMwRQ03kF41O6OfrDvaTtgIFOli+86B2YTl3FyjRna9AD3N2fz51SZEB4yWMU0VGTFBDLSiiLi1S + 8bX4E4otFlXYYRlj0voqFXbWME+xTo6IfNcoYo49bm0x4XyzEZcaVbirzg731Iq1OC3waJ05Ljda4uUO + GV7vVeBNltMbAyq83CtjH7Ml7PC7bgVeoSZ9ieX9TDvLpU2PO1t0OC20XpV83gAutcVMiQ0WFttQ99r8 + xgBWSwbwmjqNtE6wMOBmK8S043LsbGKsaNKQ0ymwlnF3AeNaW7wZKqKFOWeOTHLrNPaVtCgdUmKNSIoz + IiHOnjBKf7SIJ0+KS9AQaiRQywsDOCGO5yeqfzWA85wkE7g4h3wqR0+uSuQYUMD4VpCj5Gsl8skbc1Kt + kZ1oKRnAVYy/TVladJLnjRQ7Y6LIBQsLnTBFDjRGzjlBzBvAekyzPsRUs5MljswzbhisnDeAG35jAKel + K5GcLpeM4IwsDXLJsX4xgHltMTmLgDB7C1jP+YU65JGP5ReKkcD2KOa9y8pdUVHlLhnAYvrojBQ5y8Ma + idHm/2EAF2bp+F31KMmZnwa6ptgVVUW8Nt+F39nE635jAIfMrwE8bwCL+6mQnqCdN4BZpsIATo2RISHc + CgmhZkgJM0dRvC0a0+zYJtVYXKrB2jIVNrHOxUjwG8VAqBYVLrF/izWAn2V/fl5aA1iPyyMqQo0n2d8f + Jl+6g7HgDHPg9YXW2J9tjt0ZltjJvLI3i/fKlWMfc8se5qe9mZbYxe2ODCtszbKSZsDYXmiH3UV22Ms2 + c6jEEseJm8ptcEuFNW6ttMS5Wlucb1TyWdSSAXxr5/80gGvizJAbds0AtkFMBGNrhJZxXs+tHjHMB78Y + wCEC8v8ygAWsfjGAE8JYv5Gs32gN0pknMsWo33gtCpgPitIcUZ7thrJMVxTxdXacGqnhtkhmvE8NJrhN + CjBHrI8Z4v0tkMp7pTIvJIX8TwM4NlSOuDAFksMVPM8O+cwjZbGMPayvejFLWbwK1ay3SmqbcuqMkjQF + n0EmGcAZcfMGcC51TIH4HYNtvK7QhFq26zLRbtLkyEu04fNZzI8CJoQJLNYGzou3RimvqU2SUwMp0cX2 + N8R7SwZwrgqz5Anrc+TYwPraSI6wK4s5ucgKNzI2CAP44jUDuNIC54hbyy1xqsoWN9XIcXOjljHKgBPk + 6DvYHtYxDqxLZw4ptMKxBjGLgSNOtJPHcLuHMXNzpQFzpeRwbCdjSeaYTLbCUuqBNQU6bCxxkgzglcUm + LCZEv2xjvxAGcFmCHSr5HQWE2VtJ7SAwP/JXMf8ey6qauqgpyw7t5Da94g84hFjyY3mtAbPVWmpV8hvm + ol2tehzqM+HIkDOOjbvi6EJP7Bxyw6pWe/JQO9SxHMrIQ6rInVpKDOhv8sCQZAC7YrTFCRP8PovanLGU + nH8Fc+k1A3jmmgEswYBFjOVLm/RY1WbCHLWLMIAFX1/T6YIlzIcTdWKpAbHkgFhzXoEhcuEFzElL2tyx + 6poBTL0l1gCWpoZuYPk0u2NtG/UPufrBiVjcvrUCz9w4ALOIQBIeIsxPiSDJ8JXNw1uGQC9bCUHecoT4 + KKSRv8IoFrg2CjgyUENoCR3C/TU8V4xwEmsd2sLPQwYPV9nVEcA2MOr/0wD+dSSwDA4Ckvk7PzX0NQPY + 2VEFFyc1XBzFvi0c7S3h6WaDEPH57KiCxAUH2cHX2xIe7uLHI3Np6+FmATfxY5KLBZ/BCn7ethD/4I8I + Fwt/i+H/1oiPsUQZxW5brZe0ztJQI0VKhRtFvQ5VcbYoCjZDSagFWjOMFAu+GK0KwnhVMBEiYbDEH505 + 7hQk0dg2UYZDyxqxri8HvXl+KOZzpXtaSWsAhxvMEEZEO1pKI38z/PRI9dIiwVmJUIUFgm3NEKsxQ6Gj + Gbq9zTHDwLDN2wzX+1ri3mgZnoy1w7MxtniGwf/xWDNczrHA8xQfr0+44PM9SbhyIge4qRCMsMBp4ngB + ftiWjM+WReD9QS+8zsb3DIP3Y9l2eDqfxKdUh5cr9HijSoe3mKjfqVfjPQqV9xoU+KBJhT9z//0GpYQP + Gvi6ToY/19jizxQ+fym2xN8LLfARif6/SMA/qZDjUxLPT0g0Pm5T4ONe7o+q8O+FGnyxVI+vVhrx1Wp7 + fL7WhM9mTfh0lQM+Wq7H32Z0+NsSA/6xzBn/WuWJj2e98MmcJz5Z54x/rNbhg2U2+MNiM7wzY4YP1pjh + 4x22+PqoBj/dagRudwDutAfu0v9iAP98SY2fLurw420OuHLOhO/O2uPrWw34/CYVPrlRjo+FCXyjGp+c + 0OBf1xnx4UEj/rrTAW+sUuOJkV8N4FvrrHFLvR1O1atwiuT5FIPUaXbIi20G3N6hxcVWW1xossB5sbh9 + kzmvE+avGe5sM8Nd7WZ4aMAClyfM8dy0NV5ZKb9qANvh5ZXWeGEpiddSa7zJY+9u0OGP6/X440YDYcSf + tpjw/lYnvL/NCe9uc8Q7Wx3w+hZ7vLzJgOc3kDTPavAsn/Wl1WJKaQ1eX0lxxNfvrVXh7xvVLB8NPhMG + 8H4lvj6sxvfX6XDlRiN+OOWIK2fc8PNFf/x0RxC+vSMQX97ui89v98ZntxGn/fDZzQH49EQQ/nUoAB/s + 8sU7Wzzw2gZXvLzODS+sdcMza9zw+HJnPLrUDQ9Me+KOUVfcQmF3olmBE21ynB1Q495FJOGrTHxmF/x5 + jxs+PeqJ7076A7eGA2cjgXPh+Ol8CH66Mwg/PRAMPB4EPM33n/PEz8/y+Z5y5zEPfHe3I746a8TnJ7X4 + 9IgG/z6gw+cHWY8H7fHVYRO+PeJEOOO7w2749qAPvtztjw83+eOPq4Pw0pIAPLMqEK/uicWfT2fg3w8X + 4bvny3HllQr8/Fo5UYwfXsnE979LxdcvJ+PLlxPxxSvx+Pz1GHz9ZgS+/0OEZIri7QTg1TQ+WxbwUA6+ + uSUN/9ieiD8ticEfh+Lwp84Y9pVQvF/rh3fLWU8kJ8/nm+GZYnM822SFlwdleGelPT7Y7Yl/nInAx/fE + 4ctHkvHt5XR892Q6viW+Jr54Ihcf3p+PP5zPw9MnM3DvgRTcsikB+1fOm8DjXb5oa/BFZYU/CooDkFMY + jvRCMQo4CykleUgqzUViaQ4SyzKRUp6C9NI4ZBVFIK8kHGVlYWisCmTS8cHWRf44tT0Ij90Sir9cTsI3 + r6fhh7fTcOUtxo5XU/D9iwn45qlIfPl4BP5ydwievt4Tt7It7lzuipkRX3Q1BqKmPBzlJfEoKkpDflGm + tAZwZnEa0kpSJUjr95akIKE0GXFlyYgtT0b0VYh9cUy8J85J4blpROr/gpTCpHkU/WoAJ2cGIzbGlXlH + hyTG/ewQJYojNJL5W07yVRSqRE6gHdL9rJEZYEsxoUJJgiMTvCvKiSKKiFKKiqooNdpJ2Poo8KcSKGLz + 9LiRCfbB5W5441AQ/nlbFL6+PwZf3R+GL+4Ow+d3RuLTO+Pxz9uT8ddzafjjLVl49lASLqwJwrZOHcZy + LdAQaY4CxutEJzNEij/6mMwQKtYDdrVEoJvlrwawWP9XMoAVzI9q+Ltr4e+mgx+3fu5qQsF8KUYI2zD/ + 2kgGcEQwiSa/Y3KsAWkJ9kgX05dF6iSSGhUkRgDzHF9bRPnZIT5IJZnAyczNKSynlDBeJwxhlkUmyW5B + NMlhNAlRtBXqYy0pvCzQl2KN5aVGbGp0w5YWN6ytsccakq31NSZs5eudHR7Y1e1JuM2bvn3u2NfnRRHM + fb4+OOCBwwOuODRAsjboSFzbEkNOODhowp4+I7a1q7GjXYUDvXrcsMADp5b44vRSP5xa7IUbJp1wcsyE + m8ZNuIX752eEARyCJ7bG4fGtiTg37Ye9YgRwoQzDSZYYSlGgL9WAzhQT2lOd0MhtmfjnZZgM2STXOYHW + yCXyg5m/Q0lgSb6bk7XoSNPzGg1axbr+zPstMeYsAysMZMgp9vRYWmmieHXCknIjFlCID5PYDpGUiu2C + QjmmihUYL7DGUI45RnItMZJvhTESVrEW8MJiitkSKwnCAJ6plJE8KrCqQU3Mr4m0ol4uYSVF0xqKlbUU + TuvbNdjOMto94oR9JJRHFnngplVBOLnCH4cWumHviAP2Dtrj0BDLs9+Ag51yHGq3xs19drh7UoPLyx3w + 8qwrXp11w8uM0S/PeuL3m4PxwqYwtml/aXq34wNGHGQdCJNuc7cWK5ptSDxtsaxDhhVdSqzupVjv02Fd + v55g3fPcjf322DLsiO2jbtg16o7dYmQysXPUBRt4j7UtCqxhjlxLTrCrWYPj3Y64dcQTZ8d9cbLbGcdJ + XI+3OeFIszO2luiwMtUWU2x3Y+RSY6wTMeXyeJgGwwFy9JFrdpN3tnnZocnTDg3eKtT5Gn4xgGtCiTAn + 1AmIEcBXDeB6H4oZL4ogLyWaeE2Hnw7dRJ+3Dv0eGgx56gixVWOA5wx5kSx72XDfFoO+bEuBcgwHK9Af + okAH+WN7OMl/khYDWSb05ZrQkSPMHR3qMlVooOBpKlKjq1qP6QEfzC4Kxcbl4Vg/E4S1i72xesoNyyec + CGesmfLkcV9sWhGILWtCiTBsWBGC1TN+WL7IG0smPTDNepked5f2xbGVbOMSFvthdiYQG1by/msisH19 + PPZvT8fBndk4LEzg3aU4sK0cezdVYOf6CuzaWIX92+qxZ3s9tm2oxMbZEqxZlotlU2lYOBqPsYFoIgYL + R5L4eVlYPFWI5cvrsX7jAHbun8Gxk5tw7uJx3H33jbj70jFcuGUrbjywEPvWNWHr0nxsXZyGjZMx2DoR + gZ2TodgzEYgDYz44POaJo3z+I+JPAuzTmzrYhtieV7TqsJr1Pzvoy/wVhFXjoVixMBKrl8Rjw5o0bNmY + ja2bcrFlUz42zGVhZkkiBgZCpTWvIsUoYHczODKOujhbSDP32JMzG/VmcDBZwNXNCr6MdXGMhZnpzsgj + 787OdERkhAyuLmbQqM2gJTy4HyLWaKfIT4tToojn1JV4oqsmEH1VARRMfugp8kR3rhjNacJgnhOGiijU + ygMwVBOO/tpo1BcGIitW/JlVAU9nsdawOXy8LODvZ4HQMCvExsmRyfZRWOKKrFxH6UcpT3J1e8Z+o8mc + Wws+8/xSNyaj0D9qBPk68pl8kBIXiJy0SOSmRiI7JRyZSWESxOu89CjkpUUgPzUChWlRKM2IRllmHKqy + ElCTk8htHCrSY5jTolGVHc9jCagSx3NiUZ3L13nxqM1PQF1BMhoKE9FQkIg6HqvL5/GCBJTlxaAgl/wg + Lxx5BfyM0lhUVCahtCwehQVRyM0ORVZmEBFMhLJ8I5CWEobU5BCk8RlTE0ORmhCOtPgwgu/FcT82FJmx + YchJ4v14blF6MIozAlCeGYDqLPKXXJZrURjjYhRWVMdgXW0M1ldHYn15CNYWs70XeGGu2AvrWUezhU5Y + XUDRXcIYxHi8tcYZGyrZnoocsCJHjyUZaixOVxIqTGcoMJOrxmyVE9bWe2Bltae0Vu9IkRu6cpzQkmmi + IDdIM14URjEXxNigmDqqnPG/MkGOqkQF6pJVaMkyoqvAGQNlnhiq8EFXvrM0pVpVvBzlMdaoS5SjLVOP + nnxH9Bc5oy/PJP1Q2JFphFg7vzXLEU1ELVGWyTaRpmP9apDFbUYqc3GKWAdYhQRhAPM5IkMsJUSH2SI2 + XIF4chExEjgr1YgCtseSbGGsmubXcysyob7EhAaxNq9Yo7fSkTASerRWadFWrUE7t+2MSx3M3e3VBrSU + 69FQpEUt41VFLnN+loz1IWO9sAzSxb4CpZlKVOZoUZWrYxvid83RoTZXPw9yoro8I+rz7dGQ74CGPGEE + z48Ubq1wkQzgtiqXXw3gTPFDJO+dLUdJvhK1FQbU8RlrK+1RW8UYWu+C7naWq5gKutUTnWJd4HZPtLS6 + oq7JEVX19qhu4PmNDmimTm1tdEJ7nSM6eG1viRajBSoszJJjMfP00lTm0DQ51mZpsI1ls7vUGXtKHLGz + WEdosLNEGMBK7K9W41ijHtc3G3ADucMtvWK9XC8c6ffC1m4xks0Rk9R1A7UadFcxrlcyNxBDNXJM1sow + 3WCH5S1yrG9TS+sW3tDthNPdLjjP2Ha+2wFnunnfXh2O9mixv1eLvV167Oxifu34TwN4BbGyxQgxAnhT + lzO297iSQ3liL/nUvk5h/rpgT5szdjc7/mIAH2h3w2FyrsNdHsz1bjjQwnMaTdhZx8+oUWMXn3kP9fqB + Jj0ONutwpFWLkz163DrmgovTXrhjqTcuEeeWuOGWaWfcsNAZ1y9wwbFJNxxbeM0A9sE6PoNkANcb0NVg + Qpeop3q3+dHm9X48FiDx/s6WIHS3BqO7Mxg93aHo6w1Fb28IOtv90drG/t3hj/ZuMS20mCJaIEAyfjvE + dNFEJ9HNYz18v787GAMCXSEY6AyRRhu3N7At1Lmitc4NbfXu/Fx+fpMPept5TSOfo84HnVWe6Kn2wCDb + 3ig5mliTdLxSixHW9WAJ83aRDbrIwwS6ud/HY8NlcoyJNXuFoVumwiIxrXOVDgvrDFhQp8Mo28hgmS37 + NXlwvjlGed2CUjvGECWmK1RYXClGATPeEIuqFFhQLsNEKbleuQ2mq8ihau2wukGJTS1abGMd7Cb2Natx + tE0v/Tn6tPjTQBvbCfnf9bVKHCyXY3+JHIdLtThKzXio2Ig97H/C/N2SKpPM32sG8IZEK6xLtMRsvBnW + JJhhbbIZNmRYYUuuHXYXq7G/Qo8jNQ44Vse6bXTFiSYB1m+9Mw7VOuJgtQmHuH+QHH4v39/I8xdnWmEi + xXx+WucsayzOESOCVVjHODCXrcEsY8KqLPJU9rWlxKJMWyzIECaN+S8G8AreY32uTBoBLAzgXcVa7CoX + o+7nDeBNYh3gIltsYRnurtFIffBMhzCAjXiwW4dnBwx4bchADW3An4f1+Nu4A/4+6Yi/TJrwwQJn/IXt + VGz/NOaAt/pUeJ389NVOFV7pUuNZbh9pU+JcjSWuKzPDgWILaVrsuRxrLEm3whDLqi3GDE3xjNnJcpSm + qJDLuJuRbEAqNUJKsiMSr47+jaOGiggTawCrEBmpnQd1ViS1ZDi5qYRIDSKoGWPjHBAbb2KOZ/5O4rXJ + JsSnCAPYBUnphDQVtDOS+VqMEI5LEtM/axERrUZYlBLhUcIIFqN/FQiLFK+VCCFnEeavf7AV9+14vhLx + ydS2aUbey8DP0EmzjERSs0VFKxAjTJl4G2kKaDECuJrao6XEEgMV1uwLtmyPdtQv/2kAH6WuPd7jgu3C + sKMm2Vpmid2i3MrNcKrJCnf3qfHIhD0eoe66e9gBt/bZ42gHeX8dtVa5jhpHhc50O/TkiGmgjVjC9jXb + Ln5EdsYc4+rGJi0211PHlFlgXakZ69wMOyossK/CEkeqbHGiToHTjSrc2azA/dQLj3Sq8ViPBk8PGyQ8 + NczPZjs402iJE9VmOFpjjiPUFEfZhw6K6Tab2K7Yfg4wfgoD+MZOPWOwFrcx5t7Zp8V9A1o8NKzDIyN6 + PDpuwOVJezy1wAGPTejx4JAK9/QpcKlbjjt7lbhrUI37RnnNmAr3L+CzTMvx+DIlLq/Q4MnlGjy2RIkH + F8pw96gNLg1Y4PZBls+IHe6d0OC+STFKmvF/2BXH+92wgXF6ETVyZ44SVexPpSlmzJt26GbuHWgin2Ss + HmiwJ4T5a8JQE/llowtfO6Gv1gHt7L9tBUp0EO0FCkKFdubNzjzqkFw5uoieHOqiPManPC2G8vXMgTpM + FBHsb+PUoZOlcsYjOWYYkzaSA+yu0eJggwHHWuxxPbc38fNvJc4xx52vleNSjQ3urrHCfTUWeKjGDE82 + WOKldju81ivHG0MavD6owcv9SvyOZfZyv1rC75nXXia3f5557THmtbtb9TjLOj9crZAM4DUlNljC/jdJ + TFD/TvFZllQyfrDfr2SOumYAryq3xhrGzE18jh2NGuxiPBRTSK/OF7HFjHrcDKVRZsgJM0NGqDXSIoSx + pkVSjB4JRDz5vuD8cQnC/NWyL6oRR8QnKn8xgFMT1chO1UuGZ0meM3mIE/mIPfKp3wqyxXEd91WEgvtK + 5GUKA9iG8cEGRYy3leREjTy3I8eIkRIXTBa7Uu87YxE5xjhj4wQhDGBpGuhie0yVmpgrnDAmGcAekgFc + LxnAYg1gPdLJT4X5K03/zM/OI5cqJp8rJo8qLrJHEe9xDcL0zSvQIidXi2wij/y3qNgJZbx3JfNeJbcF + 5GGZqUokx9siMdoCqYxx2YxxBeTDBZkaFGdrUUpOWp5rj6pCZ1SRz1YWuKAox5E81HDVALZGaAj1i2QA + 2yEmXI7EGD6jWIokkWCZppOjJkfbIT7MUjKAk4j8GEtUMx91ZdlhYSF1f7EcGwutsLfCBjfWXzOA5bif + MfqpMROeYR+8PKaTzN+nRnV4epR9stcBd7FPn61S4USxDAfzeH22DfZky3CA7f1woRrHyVePFSpxiLll + L/PTTuYaYQDvLJCR56kYt9Q4VCHHsQpbxn/rqwawlWQAn62xxlk+y7lmFc4JA5h87LcG8FCWGaqYG7JD + zJAebo6kCHJv8u5o5oHISAOiIgwsD61kAMcyJ8SEKAk5YoJlhC1igoQJbIvoq0awMIDjQ2VIjlAgLZLl + xlyREa2TTOAC5oCSDBdU5rLucj1QkuaEHJaxWL83IcgCiQFEoAXi/c0kAziOmjKR908WpnKwDeKDzOfB + 3BAfYsu+oJmHMIBZb7mRchSzPsuJyhgiVoYKoixOhlJqleJUBfKvGsBpMebIjBMGsB3yidJ0DWqoLerZ + tivZVkozNChI5j2FWcxzJRNYjAKOtUAOrytiO6vkdU1JCnSyvQ2Sfy/KUWNFHvs3tcUacoS1qeZYT36y + M5Pxu8AaN5Ta4EyFHS4wH0mjgKutcLGG+41q3M4YcoF8/Gy7CbeQG59sNGCnMIDFCODfGMAnW53Iodxw + otuDfNce69g2lmXZYoLtcITxYoLcaEmaHVaxP24g/99EXbK23AUrKlyxkFqpnf2unM9elmCLCpZFBflV + BXNZOft6earY2qGCOqKcx8v5/asYCxr4XVoZx3sYiwfzFZggn1lCzriaPHN9tQ5byJN3MO/toR7Y32vC + wUEn7B9xxdY+fm6zWL9dhoZ0c+YEC9SxbDrKqRebqCmpd4aaXTDM3DDa7ICF5PhLWp2xrNUFS5kbJAO4 + 3kTNYcQifvdpYqqecaZezABIPdHhiPXULIKvz7JMlrZTuzRoMUwt0M94K5aC6CdHHaOOmqJWWCbM33YP + zLR5SAbwdL0jP8MZK8gR1/BZNl81gC9uKZ83gMP8VQjxVSDQS/z4bItQP5IVQhi+gZ528PeYX7cwyEuO + 8AANYkL1EiKDSGz8FNK5wTzXX6z362oNP/d5CNM40FsJbw8VPFwUcDLZwcEozF8badTvrwawTPqX/DWY + HBQShPnr5KiCs4mQzF85nJ1s4epkIxnAAXzm0GAVwkO0CA4UawPbwNvTCl4elvPgM3i48DW3vl4yBPrJ + ERaiRkw0k0gMO3qsHZJIqsQ0EY0Vbuhr8GMliR+JvNgQ7FGTwM4UaoHySFu0ZztjsMIfA+VEKVHsh/5i + X5IAD7SQ+I1XR2LzaAkOLG3E+oF8Ju8AaQRwqocFoux/NYBjnCwkAzjdR4dkdw1iTSxjuQUCbM0QrTVD + obMFenytMe1jgfUeZtjraoYzgea4L8wcT0ZZ4kkGscfFGsDFtnit3xEfrA7C10fT8MPNucAtBcC5cuBs + BXCyED/tTsVnq8Lxp0E3vMoG+hSJw2PZtniaov15komXSnT4fakGr1HsvEmS+E61gB3erZbhT7UK/Ili + +N0aGd6lIH6XYud9bt+rssZ7JN4fFJrjrwVW+LDEFv9ikv9XvQr/bFLiHxTN/+iyw78GZfhkTIHPpzX4 + YrkeX64y4otZe3w+a8Lna0z4dLU9Ppt1wmdrnfHvOXd8tcEX324LwHc7/PHlFnd8MmePD1cr8d5SC7y7 + xAx/WmGGjzZb44sDKly52R4/X3AC7jQBd9nPm7/ET5c0+PGCDj9cNYC/OWPEV7fq8dkpFT65WYmPhRF8 + sxYf36DFP08Y8ffDRvx1twlvzDJZjdlIBq6YAvpMgy1ONylwhmRHGL+nG404SyJ6gcHrYrsSl9qtcanV + TDJ9xYjfuzrMcE+nGe7l9oFuMzw1YY0XF4vpn+3w+qwSb65T4/W1cryyyhbPLbEgSRXmsAVeWSHD62u0 + eGOtnu8b8Qa/89vrHPHmehN+P2fEi6u0eGqlGpdXa/HkrB5PrNTiMsnqcytJ1njs1VVqvLlKhT+tVeCv + G5X453Y1Ptmjksro66NqXDmhw5WbjLhyixPLww0/3h6AH+8OwbfEl3f54/O7/PDFHQH46mIovj4Xji9u + icSn14fjw4MheH+3P/6w3QdvbfXFWzsC8Mb2QLyyyR8vzPnhieU+uH/SHbf1G3GKpP50nw53Thrx6EoX + vLjZHX8+5ItPrvfDVzf44sebA9gew4DzEcAFbm8PBu4OBB4KAi5z+zzxkg/wohfwnDfwlA9+uN8VX513 + wL9v0OOTwzp8dsCAL/bb48u9Jny9zwnfHnDBt/td8N1+d3y7xwdfst18tCEI768Jx+srw/Dyxkj88fo0 + fHxvMb5+vhI//6EBP79XDzZm4J0K/PxmAX58LRvfvpKOr15OweevJOLzV+Pw5euR+PbNKPz0Vgx+fiMB + P7+cBjybhZ8fyMK/r4vHH1cF46UeLzxb5Y4Xit3xcp4L3igw4W0mp9cLLPB7iqs3m6zx9pAcf16qxb+2 + s21f54MvLrFsH4zEN4/F4rsnE/D9E8n47okUfPtkKr5+PAufP5KPf9xbgHcu5uOFm7Nx/8F0nNmehAOr + ozC3MBwjXcFoqPYjcfRBTl4gsgrjkFmcgYziXKSV5CK1NBspZWlILUtCRmk8soujkVsSiaLySNRUhqKv + zg/Le32xf4U/Lh0KwVsPpOFfz/NzX87Gly+n48sXMvDF06n496Nx+OjBGLx5Pgz3HvDEgVkHLJ+gmOn0 + RENtEMrLolBcLKZ/zkReUda8AVyUjHRhAhMpJWlILk1DQmkK4ojYshREl89D7Itj4j1xjjhXXPO/IbUo + ZR78rLSiRMkATskOowD2IDkzIiFAiYwgEvlQMQ20ilAiP8gOmX5WSPExR0aAJfJIbssSHVBNgV7J+Fwa + Z0QZCV91uAydFOADFBnT8SpsK9Lj9jEPPLfBCx+cCGJ/CMOVh4Jx5WFffPeQP759kPH1wQh8+UAsvrg/ + GZ/el433zqXhmQMROLXYhHUUrIMpFOSM0VluJHMOZohyZKx3Mps3gJl7Ajwp9MUU0BJsJQPY30OYvjr4 + uenh66YhVPBxU8DHfX7mjHkD2A5RwQokRRuQHGtESpy9hKQoHQm6GtHBckTynAhfnsfcFhuoQhzLJj5I + jUTmxKRQ5pgwDVLDxfrAFD9RzGcRVqiKMENzrBn6kswxlW2HbQ3OONTtg8M93tjV4oydYhrCLk8cG/LD + daMBOD7qiwMkOXt6nLCr2xG7u12wu8uVWzfs7XXFgR5XEiInnuMoYf9VHOh3xt4+E89zwM4OPa/R8zwK + 1HE3nJzywk2LfKS1g6+jQDg+ZMSNYw64ZdIZ55d44b65MDy1PYFIxu3LgqW1rFYzf40mW2E4hfWXJkZp + OqI7y53CmeIrg4KP5DubBDmDBD0zgAKJyCOhro7VoDlZrG1sRFeaTjKAG6PN0Uiy2xprjv4MGRYWG7Cy + xgVrGtywvMaRQkeFoQwL9JHY9qaaYTSX5LPQjkLcBsPC/M2zxhiJ6wTz8JT0o6EdpspssajMBjMUKCtq + FFjdoMYaCt7ZBgph5sfV9TxGrG1UYEOLBlvaddgz4IjrWA7HF3nj0IQLDo074TRz+m1zobhlZQBOLvbA + 9QtccdOUO8uH5/YpcWOfDOeH5XhgAXPDEuaONc54e84Nb8664/U5L/x+YwCeXx+IR1f54+4ZH5xbyGtH + nXF4wB47u8WU1JaYabQkUbTFyl4lZgc0WDsg1h42Yl2/Pdb3Ggl7bOKzbSbJ3T7kgu3DLtgxwu2QWM+Q + hLhdjbkWBTYxT+5t0+ME6/rCIn/ctTQYN/e74nibPQ6TvO6v02FnuQ4bctVYnsRyirbGInKvZUkOWJpg + wkS4Bn3+MnT7ydDCftJA/llHzljrZ0BtkCNqQ11RE+Y6Pwo4xJH9zB51gQbU++tR66VGtbsCNV4KyTQW + awd3BhjQ7aNHj6cWvR4aQo0entPlISNs0O5pgQ4vK/T426E/SI7+UAW6KbyaA6zQQoHck6rHcIErBinm + B8rc0C2mYS02UuCzvdU6YFiQ9yFvrFroj/VLAzE344u5xe5YPeWM1QsdCWesnXbHerbhDct8sHGlPzau + CsB6xt5Zvl67PACrl/pg6ZQbFrO+p8edMbPQFcumPCQsX+SBVYu9Mcfz1jPfbJmLwq7NCdizNRn7tmZh + z5Zc7FifjU2rMvnZGZhbloVNqwuwcU0B75+JlYtTsXRhEu8dh0Wj0Vg4HIMFxMLhOEwMJWJsKBULFxRi + zdo2bN01gSPXrcWFS0dx7z0ncPftB3H+1Eac2DeG3XN12DiTjY3TSZgbD8e68WBsmgjA1nFf7GS83DPK + Pj/G/j1kj609bAttcgoMGZY0sW47HbCi3xMrxvyxYkEonykcq5ZFY93aRGzalIKtG1OxbVMmt+lYN5uK + ZTOJ6Oz0Q1a2GoHB5nB3Fwbw/NItYjSvg5FbxlMPD3MEsE+LH3NLmQurKkROdEM6+3RIkCU8yJU9GIOD + fYX5a420JCVy03XSVHA1hU5oK/NAV5kn+ko90c067s1zxECuE0a4P1REoVbmTyEVjM6yYNTk+CAjyoBw + xlZPfrYn7+1LsR4YYI5IxtDEZAVyC/kcle7IL3JBcooOvoFWcOC5RmFcm8xgMlnB3sEazkY7uFO/hPg4 + Mm7zvvGhKMyIRX5yFDLiQii4g5ARGywhPTaE4nse2XGhyIsPo3CPQGFCJIqTIlHAa3N4fm5MEAqTI1CS + wjxPFCbznilhKEkLp8iPRHlmDMrSw1GcEoLCpGCUpIaihK/z00KQnuKPlGRfPrMvUjMDySnCkZkVzPzq + iahIZ0QTiQmeSEsNRGb6vPmbnBiE1IQQpMQTfK7UGG5jwpASFYKkiACkRYops0NRkBSCguQAfqYPihO9 + UJnsgdYMXwyStywoCMXSkjAK9TCsKwuhcA/ERuqojYXe2FDggQ2FbpjLN2FVrg6rCnSYK3XARmH+ljli + Rb4RS7L0mMrQYGG6mlstocbSfB1WVzhhVY0rZsqdMVnigqFCZ3RkO6A5gxouWYuiKFvksz0URFmhkPGn + OE5M6y5DRYIC1UkqNGYY0J7nhB5yut4S5pJ0PSoTVCijPiyOtkIlzxVTRrfnOKCrgOfxGTtyjdSEYj1h + IssRzZlOqOe2KsMBpWl6lrMWOak6ZLNtprFtJCWpER+vYNnaIOKqARzF3BQdKpfWHUsS08gl6dhe7dk2 + 5kdzCBRnih/2GOeK7FHP8miqMKG5Qs+tFs2VzGtVjHuVfLYqPk8ln6XSHk2lRjSQ19QWalGerURxlhxF + mQpifluSpUKp+IEkW7yvQUWWBpViyaMsLWok6FCbrUMdNXAtn0FsxShgsV5whzQi2R3t1S5oKHdAZYGG + 97RDQboNCsQo42w5qku0qC3Toaac5U801DihvckTXW1e6Gr1QmerJ9pa3NHQ6IjKGgPKq3WoruPnNJp4 + 3BUdza7oqndGJ79Pb4keo3lKLMhSYnGGEjNpwgBWYl2OHjtY13vLXbGn2IQd1LPb/8MAVuF4kw4nmnU4 + JUYhDnriDPnM8V5PbOtwweo2Z0xT14016NFXw1xRqcRgtRKj1L0L6+TMjwqsbFFiY5tWMoBvJOe5jTzn + Up87bu9zxplu8pVuPQ53qrC7Q4mdbWps79BhU7uBudEea9tNmG0nZ+lwwhrurxOjf3n9TvKlfb1u2NfN + bSefv8MZe9rENK3kVsTuVmdp5K8wgI+Sgx3ucMfBFp7XQA5Vo8F2fq/dtWrsJZ/Y3yhMYDWOkEtcz2e5 + edgZty30wCXmj0vMMednPOZHATMnnSCvOj7hhqMLyDMmxRrAvljX7S79ENVfS17E3NZdy7Zdxz5Q6034 + cj8APQ1B6GkJRn97GPq7ib4IDPaFYUCsD9wRgE4xkpf6pKs7ZB49AkFE4Py2OwjdRE9XEPr53mBPGIZ7 + wzDSEyFhiPfsafFHR6M3OhqIJm/0NQdioC2ECEVvM+9dw/crvNFdydhd4YahCmeMsu2NVRowwn4wUKJE + T5EMbeRkbXlW0rarQKzlZsdYIMNokRyTRaxXto0FZWppvbRx9psxYoh8rb/AHCOFllhIHre4gnVfqfoV + 1YwxVWpMV/H6q9M/CwN4SY0dVrCdrCLWN6qwmdjB3Le7QYHDbHMn2Q5OiXWjm7W4nm3qGK/fXyLDXj7n + gSINDpcYsb9AL037vCXFDpuSbSXzdwexNU2GTUk2WBtvgdUxZlgVZ4Y1ieZYl26NzTly7CoWa+864Gid + C65vIj9k37qOOEbueoDcdW/VPA7w9X72tx31rljDPjmRaoGhRDPyZ3OMZ1phYY4dludpMJejxTrGgFXp + Cml0/bIMlkGWAoupDRYJ8NzFmWLKRWusyrKR1gDeVsBnLVRjJ7/LrlKijG2zVI3NrIsN/J7CAN5RocSB + KiVOsR/e0WnEA10GPNVjwO969XiLfPP9YQf8lXz3L8Sfxk3404QTPiBX/Qt50Ls89mq3Ei+22OG5Fhs8 + 2yrDE8QDLTKcrbPCdRXm2Me62Fpsjdk8sSagFQb43VpZVg2J1qhOkTMnKpDJGJ+SQC2UaGROs0ccdVRc + lJ4xV6znr5ZmEAyjPhIIF1NCi3WBryGKr3luZLRRWuM/KsYekXEGRPM+McJMTnNFSpYH0jLckcR9MUI4 + ju9Fx/EaapGIaHEP3pvaSyA0Qpi/amm2EDE6WIwCDgylzqMui0nQICHFIEFM+xxFbRoZpUIEtWoMz03g + 61R+n+w05qQsW9QUWKG11Aq95ZYYrbDBlPhDwtUpoMWP1AfIv4/3sN9TN+2rYZspt8KeMgscqjDDyRpz + XGy3xSODGjyzwISnFzjh4VETzpP7X98xv97islIDBhlzmxKs0MH2MMj4Kn5MXtM2bwCvazFiQ5Mem6lx + 1lVaYV25BTaUmmMLsbvcGgcq7XCMcepmxqnbm+S4h/X4YIcKj3RTswwb8OSQDo/0a3F3J9tHrTlO1vK5 + Gq1wS7cOZ4epdwZccbDNiD1iOmvicKsON1BDipkXzrP9XOK19/TNjwJ+kN/j4VEtnpx0wGXiEe7fS410 + Rxd1UocMt3cpGLOVuGNAjUuDMtw1ZocHFsrx8GIFHplR4uElatwzYYdLI1a4MGiJs13muK3PCneOKHD3 + pB53UJeeGTLhRI9JWl95hm19IE9BTmCH0gRzch0zVLBviKUXeoXx2+SI/kYHCWJ/oMkZA9TYPbUmdDFP + txUJA1iFjnwVeYdCQhv7dTvRliVDZ7YtYYdO5u0e1kFfjgZDeXqMiZHAjBsTpWKdcjUmy1RYUkYNVqXD + 3moDjtSz/pr4nHUG3MSYfkuNHqeZL8RovAtVlriz2gr31VrigSpzPFFvjedb7fBKtwKvDmkILV7h9ndD + arwyrJfw+0EjXhl0wAt9Dni82x73MZ7d1mrAYcYzYQCvYt+bZjscFyiyYXxUYIaxct4A1mJNLXUv495K + xsvfGsA7JQNYJhnAC6mxWxPMUEIt/osBHC4MYA0So3WIJ2JjdIiJFX/EmDd/Y8Uf6QjBp+Lj5UgQUxaT + r2WmkHdlmVCc74wi8rmCLAPyMnQS8smj8sl58sh/8lmmYpubLkMB+YT4U1xFBjUkeU87ed1IqSsmqP0W + kl9MFTlinPFRmMCT2SosyGEuKPlPA7i/3B0d5R6oL3FFab4wgA1IJ09NJadKI5/K5j3z8h1QmO/I57JH + Qb4eBYz915BH5OZpqX+0vE7F83UopF4p430rq8ihee9Cck4xq0xKggxJsZZIS7BFToqSvEtDvqgmB9Og + JJNah9+5Is+ESmqbygJnlFDf5JAHJ8YoEBlug/AQK8IakWGMOeEyJDC+JMWqkRbP541TISVWgcSoXw3g + xBDWSyTbd6wZ2tJYz7m2WFFgS64+bwDf3KjExTYN7mxV4r5ODR6nHrw8ZsSTo2IEsAZPjxnwzJgjHu0z + SSPIz1VrcLJUiSPMz/uYR/aS2x1gPzhWTP5SbcIp4lixFvuZm3ZkMr5nWWJXoRz7yjU4Uq3HcbapEzUK + nKy0nZ8CWlpX1hpnarmtleFMkxLnOnU4zVxzfbt23gBm2+tPN0Ml21hWMNtYuAWSI2WIixZekB5R1HnR + kcIA1iCa+SAqVEleTq4eKkN0sN1/ICrIWhoRfM0ATgxnfglXIo35Ii1Si4xoLfKSHFCS4YbKXC9U5Xmj + NMMFOQl6pDDWxwnT15cQW795xPlbElZICLZFfJCVNPJXQJjBSdQHmcw9GTEGpPK5Uvm5WeG2yIuwRUE4 + tQzrtDTKGmXRNiiJsUUJ20cx20V+kgyZ8db8nmJEryW1pB3yqWOKk9WozCEnZ1utpZapyDZIawELEzgn + XpjAFtSh5si8agAXsK2VxlqjPt5OWjptgHl1OleLlflarM5VYkWqJVYx764ltmWY4zD79A3FNjhdLsPF + KjnurGEcrrPFneRFD3Q74sEBN9xPLn6BfPp0uyNuaGKMF7N4ZJhhQ6YZuY01joiZQ5odcRP57019vthR + ZcCqHBkm483Rz+8zRE40lmCJRankYNRGm6j7tlZ7YFONJ9bWekn9sp39oSLeRjKAS8mtylJlBPdTWE58 + XZzM98i7xH5pkjCJbVFHHdPCz+nOVWAgX4GxYhX7Ob8j4/0cNddGapWt1AvbW8nbOgzY00tO3ucozeyz + lMeHSsUsApaoy7BBE7VXV5UL84E74787+huYE6hxhuoNmGgUa/1enfa53gFLiMW19lhYq8MCtm+xnWL8 + XMT8uaROi9lWB2zoEgawB+aoC1Z0uWGq2R5j4g+sNWr0kGsJ9FdrqWccMNXqimlqKIFF9U7zBjBz0LIm + F6xsdsOGDh/sH43CbRtL8JSYAloYwMHecumH50BPMfWkGhGEMHaDvMRoXjselyHYS4HwAC1iQtlZQsV6 + wap5k9jLDv7udvB2sYaXswW3ltLav0G+vK+vBn5eWni5quHsKINYB9jeXvwzXpi+89M//9b8vWYAXxv9 + KwxgJwduTcJAlvG1DdycbeDlZosAXyVCgkjcQsQPQCr4+8jhw+cXhu88bODpastjwvxVI1h8LxK/uFg9 + 4uIoyJk4REAtYOCvKXai0PDGUGMAC9KbCdoJdSkalEWxYZCQ9RR6Ybg6hME+CJ1FPuhg527OcEVdsgl1 + CQ6s/BCsG8jH3iV1mOvLQ0+OHwqC5EhyM58fFaY3QygR62yJVG+SOW8mODcGG37/QKUFAmRmiNGbo4jl + 1heowLSfDeY82SHczHAjA8YdDMSPsiM/SVFwOcMKLzGQ/mHCEx9uisDXJzJx5dZc4Gw+cKGU22LgRA6+ + 35WAT1cF44/9jnipXo0nCq3xeI4tnmLQfY4d+MUCLV4qYMIvVuLVUhneLJMTtnirxBp/ZAd+n4L4/Vol + /sQg/y4D6fvNarxHYfxnip8PGFT/UmqDv/G8j+qVEOsDf0TBLAzgDzts8a8+W3wyIsfnU2p8vcKIr1fb + 46tZB3y51oSvxHTQc474eoMLvtrgjM/Xu+DrTZ74bqcfruz2xTfb3fHZRkd8PKfDX1fY4U+LzfDHGTP8 + dc4Kn+xS4LsbHfDjeWfgDifgLgf8fKcaP4nRv7dr8cN5La6cs5+f/vmMEV+eNuCzW9T45BZh/qrx6Skd + Pr5Jj3+eNOLDI/b4q5hieU6PpydkuKeDxK/BDOdJVm/j9znfSsLTYk+YCCNubyPxbJfjrk5r3NVthvt6 + zPBgvzkeGrDEo0OWeGzAAk8OW+B3M3K8sUaFt9Zp8O5mPd7bZo93t1D08PXLq+zw1EIzXF5ojudn7PD7 + VTq8skqPl1YY8MJyPV5cZsDzyw14eqkGjy5S4L4pGe4V2xk1HlzCY0u1eHoF626VBr8Xo4BXq/DuWjn+ + slGBj7bxO+5W4sv9Knx9TIUfTrIsbjbg+1ud8P1t7rhyKQA/3BOK7+4LxZf3h+Crh0Lx7YOR+P7+eHx/ + dyK+vT0JX55lm7kpFv+4LhIfHA7H+wdD8f6hCLx3MAp/3B2ON7aG4MVZfzy+xJME2Z6E2YA7Jk14eLkr + ntvkjTf2+uGfN4Ww7ENx5UwQfj4TyPYYDNxGXODr2/2Bu/2Ah7h9kng+AHjZF3iFeIl41hc/PeSBry6Y + 8MmNenx8RI/P9rMe9znh670u+HaPC77b6ybh+z0e+G6XD77eHIhP1ofj72tj8ce5GLy9Oxl/O5OPLx6v + xHev1gJ/aQb+Qfytkft8/W4Ffn67CD+8notvfp+JL15Nw+evChM4Ct+8Ho3vX4vGj6/E48fnUvDzE+n4 + 9mIC/r4rCK9MuOKxWgPuTpHh/jgFHidZei5Zjtdz7fBGoTneJrn+84ACf1+ixSebTPjmiDu+u4XPd2cg + vnowGN8+xrJ+PAZXHk/E948lEyn47rEMHuezPlKAjx4oxh8u5uP5U7l45HgOLuxJx9H1KVgxFomOel+U + FrkjJ9sHOQWx0vTLmUW5SC/OQ3pJFtJLU5BWligZwFklMcgpiUJ+eQwqKiLRVhaEyYYArB/xxcmNQbh8 + axLevDcNHzyWjX88mYmPHs/Ehw+n4q/3xOPdS9G4fCIIpza7Yv1iB4z0O6CxyQPlVUEoKo1BfnEy8ouy + kFuUiezCNGQUJv1fGcACqf8HE/i3BrBACr9vam4EkpN9EB9uj3h/BdL8ZcgLJnknkRXIJTFL8zNHsg8J + XoAFcsOEODOgKsWEikR7lJDslYTYojLIEu0kT/0kT0vixD8L9XhgkTde2+6Lf54KZF8Ixk+P+uCnx9zw + w+PsM497sc4C8O3jYfiOdfcN6+2fdyXhjZNheJBldP2oAcuLKOIirFDiZYYUE2O8kxkiiBDmwUDmoP9p + ACuZa+fN318NYDW8XeXwZvz3k0YAi+mfZYgK+dUAvgaxBvC8ASxDZADhR6LKMolhPo4NUCCOuTAhhPkl + VIskktoUyQCmWCDpLQ4zR02EGTrFv+jSLbC6WI5jJBanxwJxK3GyzxPX95N4jfjj1oWBOEXcOO6FwwPO + 2Ntjj10dRuzscsCuThfs6prHXu7v6XLCXhK8vd1i64R9YtvrLBnGuzopnEmYdvO6vSRNh4dccGTMFcfG + 3XFUTBNN0XB0yIgbxky4dYELLswIAzgUT2yJxROb43HHyjAcH3DHBgrshZkyjKSqMJhmQHeaPUWyKzry + PNGU44byZAfkRKuQEWKDjCAbZAVYI5ekujxGjcYkPdrTjehM06Ml3hYN0eZooCBoixMGsB3Fnh6r6lwx + 1+yJ1Q0kTiUaDFOc9lLcdxGDJHbjYopAYpQkd4wiaAFz5nSlEjMU2TPMlWLd32XVcqyiQJml0F3fYsC6 + Jh3WNWqlH2bWin/LExuYR7dRnOymqD404owT0964bsoThyiUDoxQuC/zwfm1wbhtDct/iQduXuSKs4y3 + t06SMPcrcXqQxHpchYcXqPHMYi3emXPBexs88Kc5D7y93guvrvfDc2v98OhKH9zPsrww6Yabhh1xtF/U + gQrLay2wpMEcyzpssKJXgdUDGsz26bC2z4C1vXzmHgF7bCRvWM/62kySu5n7WwacuO8grQG8sUODzcSO + Di0OdhlxctAJ56Z8cGmJH04Pu+FkD4VcmwEHSFL3VOmxu8IBGyl8V7LuVqQZsTbbFbMUSQvJxYQR2+Vv + h2YvK9STg9b7KFHnb0R9CDlYmBuqw11RFeLMvuuAygB71AYYUedHzualQqWbHFXsT7W8pjWAdRxoQIcv + 4alDh4caHe4qtLnJ0EI+2OhugQYPMzR7W6AjwBbdwQr0ULy1h7E9BFqgKcIaPel6jJd5YqzaByN13hio + dUNftRMJvAnDLc6YYFtfMuSJ5eRes4u9sHbGE3PTLlg95YjZRU4S1k6zHS1243vumFtK0r7MW8KaZV6Y + Xe6DVbxm6RQJ+rgjpkbtMTXmgEUTJgmLJ5ywjPUtTOJ1wjyeDcHW9ZHYtj4aW5jfNq1J4L3isWpRLJaO + x0hYsSgRK6eTsGxBHGYmYrB4PBqLRyMxPRKBqeEoLByOxMKhaEwMxmJ0MAHjY+lYsaIGm7cO4uCRFbhw + 6RDuuec47rp9L87dPIvr9g5i59oqrJ/JwLrpBKwZD8XqiUDMTfhjw7g3tox7YDv77+4xsS4020mvGqvJ + i5Y2sz+QJy7udMCyfg+sGPeT1jReuTQMq1dFYP06Pj/787ZNCdi5KRm7Nqdg24ZUbFybikl+Rk2NI1Io + yEICzeDNenJmLHV2MIMj+bMY4evlZY6gQCukpRhRXuKFuhp/VFV6oqTYmddRsIdbIkaYs9HWyGI7K8m3 + R0WRI2opEJvKXNFZ4Y5eoq/UVZrid5AYznfGaKE7hgs9yeF90VsWgLZif1SmeyCVsTPMmzqCsdyHPDyA + Yj081IK6wQbpmcwn5U6orvPi1g0ZWfbSen6u5OyOfFaTI+FgAQd7K7gYqUmoY0J9nZAY5oe8pChU5aSi + LD0ReQmRFOfhyI2PQK7YxkUi7yry46NQEB+NwoRoFCVEoSSRW3FeTCjyYkNQlBKD0vQYlKTxuDCCUyMl + 87cqJ46IR1VWNErTwiQDuDApCPlEZoI/kuI9JYM3PtEbCSk+SEnzR2KSNyIiHBESbER4uInf0R3paYHI + ygxDRlqIZAKnJ4cjPSmMiEBGQgSyEoWBzWPRIcjm8xQmRlBkhxPBFNd+jMc+1FBe6MoMwEh+EBYVhGFF + STjWlYZhQ0kQNpcEYCu11FaW/ZZ8N2wpcMWGfBNm84xYUyCm/DJhjmUspvZakmvAdKYeCzK1WJAh8oCO + 0GBJvo4C3RHLK5wYs02YKJqv107WR3OGUTKAi/8PBrCYEroySYn6dB2acxzQUehCuKOWuaU8QYXiWBmK + YqxRznNr09RoyjagLd8B7URbrj1arxrArZkmtAgDmNvqdAeU8/qiVB1yU3SSCZyeqv/FABazToULAzjY + irBFlPhhKVSBBPKTlFgtMpN1yEvVooDfsSBdi3x+bnGmChWMnbXF9pLp2lQ+bwA3VajRXKlGa4UObZVG + tDHGtlWIqZod0FDE716gQ1mWMH4VKM4SRvA8hKFcmkVtm6Ul1BIq2J6r+Lqa5StQQwjztybLIBnAzSzT + tnJXdNd4SlPydtS4oJGfVVWolQzg/DRrFDI3F2UrUE5NWVWkRnWZUUJtJTlkrbO09q9kAhOtTW6oq2M/ + Zk4vrdShqtYe9Yyxba1u6GpxQ3eDC7qqTOgtNmAkd94AXpShxOI0GZanK7Ge7UEYwPvYn3ez3rfzObbx + M3cUqyQD+ADz8XXMuyebtLilwwG3D3nj/LA/ruth7Gp3xly7C5a3OmGq2RFDdcxBwgxk3p6oU2KqXoGl + 1LyrWlSSAbyfnOck+Y0wgO/sd8elPhecZX68oUuHQx0q7GxTYEerSsrpkgHcYY/Zdkes6XDGakLsb+D1 + 23rJl/rcsL+H6LpqAAvu1O5ECCNYjAZ2wYEOd2kK6N8awHvq7bGjmryhSikZwPsaBJTY36iSRgCLdYBv + Yg4+O+GOi+SzF2f4fRe74/QiF2l5jZMT81PWHZn0+h8GsFirUpgTvXXO6KtzR3+tL+GPvvog9DUGY6A1 + BMOdERjuCcdwfxSG+sMx1BuG3s5AdHcEoLcrFN3dV8HjPX0hErrFtmd+yuje7mAM9oTyugiMEsL8He2N + 5DYKAx28V2sQelsC0SNmYWvn53REYrAtEr3NYeis9kd7uQ+6KrzQWy6m6nfBcLlJWpd0pNyAwVItegqV + aMmxQXO2tbTtyJfxmIyxQM74zvZTqMBUsQYLSlTM7ypMVKgwyTqfqBSjem2kP++JWVtWsHxX8PgycjoB + YWYsY7kvruT1ZTa/GMBixOWyGp5fa4fZWgXW1yqxlW1nV50cB9nurm/R4ybyvxtYT8fJCY9U2GFPkQ12 + 5dthX4EKBwoN2Jurmx/xm2InmcA7sn5dB1i8XhtvedUANseaJEusI0/dnCNG3fJa9r3D5CbXNXrheJM3 + jjR44kCNK3axXHYwHu6sIv+ud8feFm9sqnXBTL4Kw8nm6Es0w0CKObmtFSZyZFiaR16ao8EcY8xK9q2l + zL9L02VYwpixhO9PE0tyeCzbFiuoc2dzZZIBvP03BrD408U1A3hLKftMqRxbyvgdiu2ws9gG17NML7Ya + 8ECnPR7v0OO5Dh1eI898n9z/L9TU75FH/GHYAW8O2+Mt8tS3efy1fj2eb5PhyXpLPFFnjke5fbDBCvc0 + 2uBsvQ1O1FhhX6U1trHeZgvsMJ1tg4FkC7QkmqM+yVoa9ZObZIcUxu74OCXihHkkjKQoPWIjdIgO00gG + 8DXzdx7M97/dj9QReskElhBtRJiYOjreiGixJrAY9ZvpjrQMD8kAjk9yRHScEVGxOskAjowRBjLvddX8 + vWYAi+mhYxJ00tTQYjRwdLwaian20pq/wgCOilMhPEYumb+R1DNxscwNzAtZ6RrJvCrLk6OObamd7bCv + wuoXA3gF2+GGBvJtMTV8hyO1nCtu6mG/bxTThdvgaKUVTlRb4LYmK9zfo5CWqHqFfPVl8tWnJ51x95Aj + TnWT09WZsLzEiIEMFRrjrNDKdjFQoMV0rRNjInk74+baJj3W1Wuxnm1+XbUt1lXaYEOpFTaXWmBnhS32 + sy8drdPghjoVzjfKcGeLLe7vUOKhbhWeGDLgsUEdHuxR407W8S31ZriJeuQU988NMlYzRp0Z9cYxxkxh + /oq1bcWI4BOMxbd2aXFbrx4X+zS4o1eFu6hf7u1X4MEhjTQN9JMTDnh4RI17emW42CHDbe12OCe2XXLC + jnHbCheHbXDvAgUemObzLFbj/ik17hrj+UNWONdvhTPdVritz4Y5Q4lLozqcFdqU8XV/C7VcrQbjeTJq + SRtUJlogP9oMOdTSRZmWqGeb76wzoKfRRDhI6G1yJJzRU++IjkoDWsu0aGO/EQawNPJXmL+5cvII2TyY + SzuybAkZOjLl6GQ/7MnWYCBXj1HJALbHZLkRk8z5wgRews/cxPy5t8qAI3X2OMEcerJWjxtrDDhVrcMp + xrkzbB/CAL5DjACutcKDNRZ4vN4az7JOXupS4OVBFV5m+Qm8KEzgYT1eFuD3fnnIAS8MOOKJHgfWnz1u + azPiMOt8C+PZNQN4LN9S0sVi6nzJAK7WSgbw6hotVlEfr2J7EFNAi3WotzMf72R9bqVWnuU1U8I4Z0wq + YTnmXp0COj1C8R8GsBiwJdbmjonVIIZ9IyZOIUHwqbg49m/ytKR4JTLYR35rAOeTL+aSQ4klOfIyNIQK + uRlyyfyVkKEgxyI/4racMbc+mzyKXGeI+mCszE36M+FC6oexHK00DfR4phLj2eQHxcZfDGAxBXQfz20r + dUNtkTBcTcjJ1iOD/EmYv2m8Z3aevWQAF+SZUJjDfcb9vBzyQ95XTBedS26Xw2OZPD8lVSlt8wtMKKFm + qaC+EQZwwW8M4GT2yd8awPMmMHkuIUzgcn5GRa4DOaPTLwZwUqyY7tgWEaGCf9ogKlwhTQEdH6mQzOFk + vp9CJDPuJETaSgawWANYGMDZ4WYov2oAiz/CLyuwxcYia8Zf26trAOtxV5sG93dq2a+NeGLEgMsjYgSw + Fk+N6fHUiCMe7nPApWYdzjCXnihV4DDz8l7m6F3ML/sYz44Vs61S/52ud8H1zOl7c+ywLcMCmzPMsUPk + zKsG8HWMKSeZa2+stsNp5t/b6gRsmRPscKZejjPNSvZz/S8G8N4mFVaVWaM3bd4AzhYGcIQwgOW/MYD1 + iGacF2sAR4WrEBnGsgqRE3a/4FcD2OYXA/jaNNDJYSppkEVqhJgKmpw/wYiiNBdUZHv+hwGczLYtDN8o + HzNECxNYMoDNJfNXIJ73jg+yJiwlSAZwiAxZMQZkRhmRKgYUhtgiPcSK/cQKuWEWKGA9FUVaoiSKukbM + cBRvh6JkJfIS7ajNrJAUYYa0SAtkxdpSU5KfJ6lQTk7fUOyKeuqdKrYT8WfQ4jSxXr6cz2mDzHjeP06Y + xpbIj+W9Y6xQS83bGm+LvmQZFudRc1FbrMpRYHmqBZbFmWE2wQzb0s1wKM8KJ4tscWuZHBerFLibdXU3 + +fTdrIcHOh3xAPnzvf2euL3bDafbmKMa7bGvRI6NmWYS9pTY4lCNDkcZx65vdcfxdk/mFC1m0q0xyPrr + YVscJCcaTbDCFDnScvEHukoXbKujhqzzwVydLyaKndCaIUYA26CE/USYvSU8tzTFdt78TbJhOVhLxrDY + liTaoizZDrXkV83Zduji95Km4CdXnCKWkdes4TOsY4zdWKvD5kY9trXqsLPbAdu6TVjbasJiPvNgiTCA + rRhHZGgtMaCrmnqpzhW9DWJr4mst+nneuBjh2+CARdQ/ixinp9iuF1bppCVNJqhbFjBuThHTNeSdIo42 + 22N9pyvWUQ+s6/HC6m4vTLc5Y7zRSJ6uQbdYwoacq7OMz83PGK13wES9CeNimRTy+qnfGMBiFPC6Nm/s + G47EuQ3FuHx9z68GsBj9G+IjpzDVUZiS/ASoJYM3wEuOIG8Fgn1ITAK07BAkQUE6hPgpEeglg5+7DXxc + hflrBU8nS2nr52aHIF81gvy0/2UAz4/+FWv8/n8zgCXzVzKAhfkrl0YQ/2oA2101gDUMaHputQjk5/l4 + yuHtIUxgO8IW3m5y+Hvz+wXw+wTPz/UuppRIiNdKSSM1Uc4kQQFcQEFf5Y6Bej8M1Pihs9gNjelGVPGc + RgbQPrE+WB2FSnkQmrLdUZvijIp4e5QyQVXE6NFbEMCKycbOqSqs6cpBe6Y3ssW0nE7z04KGXTWAY5wt + kOQhR6KHEjEucoQbbBGksUSQ0hzx9myUngoM8fssCaKo8LXEbi8znGCguBhqhofZGZ9KscZzDJ6vtjjg + vcX++GhHDL65KQtXzuYCFwuAS8WSEfzzsVR8vS0S/1zhizd7DHiWJO2xfHM8mWeLJ9lAn6aQeC5bjedz + VXipgCSAYum1YqLQBq8VWOKPbFD/oDD+Jz/nb32O+DPF5d8GnPEhycC/eh3wLwb9Dyl0/t6gwT9aNfhn + pw4fdXK/Q4EPO23xcb8dPh2R44sFalxZbcL3c474dr0jvtnA7UYnfE18u9kJ32x0xGcbTPiS+9/ucMf3 + u4UR7I6vtrjwuAM+Wq3Gu9OWeGtKjAI2x4dbZPj6egd+X2EAuwJ3m/DjnVr8cNUAviIZwEZ8f9Ye35w1 + 4suzBnxxWot/n9Hg01u5PW3k1h4f32SPj46b8PeDFB8b7PHclJKk2Aq3i+mc2+W4xORxO0n0pU5nwoX7 + JtzJpHIXieS9PO/+AXM8NmqFpyZt8OyUHC8QL07Z4XeL7fCHOR3e3+qAD3Y64h/7XfHPQx74cL8b/rLb + GX/cYsALS21wmd/puaUs95V6yfh9egmT50I1Hp1U4uEFfJYJOe4YscZtg1YkoDY4Py7HXXz/gcVaPL5U + i2dXavHyKi1eX6PCO2vl+PNGOT7apsCnuxT4ar8S3/5iAOvx/WlnfHubB767MxDf3xuGbx+MwNePRuPK + 03H48blU/PR0Dn58Ihc/PpyLK/dm87wsfHE+DR+fTsFHNyfgHzcm4MMTCfjrkRj8aV8kXtsUhOdW++CR + aTfcv8gZj6z0xPObA/DGgTB8cCKc10bixzsi8fOlUOB8IH4+60f44KfbvPHDBU/8dIcnfr7fCz8/7g08 + S/zOZ94AfiUAeN4PPz3ijS8vOLKODPj4iAGf73PAN3td8d0e0T74PUQbIa7s8sT3233w7YZgfLkuGp+s + T8ZfN6fgr0dz8ekdZfj22Rp8/1bdvPn7KfEx8VED8Fcee68SP79Tgh/eLMDXb+Tgi9dS8dmrsfjq1Rh8 + +3I0vnsxDt9fTsQPDybh3zeF4k/r3fFsvwH3MVmdYVK9EGyJB0imLjM5vkZx/HapDd5vU+Kfixzw2Ton + fLXHDVdu9GJb9MY3d/ji6wcDcOWRCPz4WCx+eiwZPz6awvJOxQ+PZODKY7n47okCfPl4CT68vxh/vLME + vz9XgqduLsGlQ0XYsSIJQ+0BqCx2QW6WB8lhDPIK05FdmIfMogJklGQgozQJmWUJRDyyiOzSWORWxKO0 + LBYNBdEYKAvDTJsfdi4KwG27o/DYDfF4+bY0/OGuTLxzKR1vX0jCG6dj8OINEbh9pzd2L3fEolEHtLc7 + orzOC0UVocgrjUdOcSpyi7KRVZSJrMJUZBT+340AFhDnpwrD97+QUpQyj6sGcGphPNLzoyi0A5AU5Yh4 + fxJVXxLgQFsUhtqhMNxOWv811d8MKSRWmYEWyAuzIyFSo4xiW5i/RXxdFGCOCsbS1hBL9JPcLiOZPlhp + xKNLfPH2bn/GiCD8/HAI8ATb5GUX/PyUM356ygU/Ps229rQ/fngqFN8/GYV/3xuF924Nxu8OeeHu1W4U + NEaMMo/UkcxlM94nOZPgcRvqYvWLAeznafkbA1g9bwC7zhvAPm5aQgNvVwXzla1kAIulGMIDBQkVU0Rq + kUBimUCiKiFCi9gQEtVAsQawGAEsQxRzeDTzdXQA80qQWL9Eg7gwLRLDNSSmamRRVBVQAJSGmaEh0gwD + SWZYlm+N7SQZp0d8cO/iUNxDXJz0w3ni9oWBuDgdiLNTPrhJmLUDJhzo0WN3B4lPhxG7SOZ2dThjF9vH + rnYn7GwXo3yF0SsMX0eeR1DAb+ex7Xxva5sBOzrtsbPLHnt6Tdjbb8K+Qd6z3wEHBow4MmyPG8acceuU + Ky4u9Z1fA3h9BB5cG45Ly0Nx/aAgeGIaaA3GmK8HUsV6vlo0phjRkOGEuizm43RH5CZokBkuQ2YoiTIJ + dTZJelGUAjUJOjSnUYDzukYS2TrJADZHW4IF+im6rxnA61o9sLbZDUurWKcUp30p8wZwH8mtGP07wf4/ + wTw5ye10pQpLSdBWNugJEmLmw9UNKswJ85diZ1OrERub9djI4+vr1VhXr8R68e9nksfdnQZ+d0ccGXPB + sQVuODLhhAPDBpYJBc6UE86t8sX51X64ZbErbp12kUbznFvohFODFDhDcty3QIsnFmnx0lId3ptzwQfr + 3fDeOne8NeeB38164vIqdzy4xIU5wwlnhx1wQ58eR7vVrCsZxbk5Zq4ZwD183afESr63upvP36XDWgqo + uR4j1vU6Yq6b5JNEV0KP2BqwrlONjRR7O3qN2Ndvj8N99rhu0AGnxl1wdtIVZ8fdcOuIC27g9cda7XGw + 3oiDDS7YV+OGzUVO2FDgio2FXpjL8cSieCMGKWyuGcB1bPv15HENQQ5oCHdFbYS7ZACXBzuhNMCIcmEA + B9qjxk+HKi8Vysjvyj0UqCI3bQ5i/QYa0epnQJuXDq2eKrS4k7+RK9a6WqDSlSLQ3Qz13hZoCbBFZyg/ + N0qF9ihbNISaoymW9Z1twMI6PyxsFlPn+2GkxQvDJM1Drc4YJQ+Y6HbG9KArloq1ftlW1yx2w+y0E/dN + WLPIkZg3gQVWLyaEObzEjXDHqhkBNyybdsbiBU5YMGrE+BAJ+4AGo6x3gfEhHaYnTFjB84VZvG51ADbM + hmD9mhCsXRHM+4Ri6UQwpob5fL3+GO8JwMKhEEyPRWB6NByLr2E4DNNDoVg0FMb3w4kITA5FYWwkDqMj + SViypAQbNnZh36ElOH9hL+668xDuOL8DZ25Yjuv29mPH2gqsX5qOucXxWDkZihWT5LeT/lg76YONk+yL + E27YMUHhNW7CxkEdVvewLzD/TbepsJh9fGZATInti+XMNyuXB2E1n3/9hghs2hyF7ZuisWtTHPZsTsDu + zcnYtiEZK2Yi0d/rgwr2w5R4S4QFzY+6dXUkTGbk8ubwJx8OCWacT9ahvNQdjQ3+hC8a6r1QWmSPPDHF + GzltQY4GlUUOaKp2RyuFYWejN/rqvTHA/aEaDwyWiRG/rE/m07EiF4wXuWOM7XGo2Ad9pQFoLvBBGfl9 + MmNviKcFvPgM/h7k8BTlcdG2yBBTbBUYUF3LZ2j2RWWNJ3LznRGboEZgiA08fazg6mIBRwcL6h1LyQD2 + dlQj3McZKeGBKEtLRHNRLupzM1GRlsTPSkB56lWkJKEiJVlCZSq3RGVaCqp4TVV6Mrc8lp6Eqqwk1Bdk + orEkC03F3BZnoKkkE63lWeisyUN3bR56anLRXp4hTQNdmxdH4R8ljQBOSfCen00jzhNxicII9uS+G8Ij + TAgNNSIikjmW76enByIzKxSZGWFITwtDZnokstOjkZMei7yMeBRlJaIwLR4FydEoSY1GTUYCGrLjUM/P + qc8MZVwOpg4KwGBOKBYUhmF5SQTWlkdhU1k4NpcEYluxH3aw3Hfku2NHngu257tgc74j44Mj1hVRWJc4 + YlWxI5ZRmy3KpkjO1GGBZALrMcH9yUw1FuXqsLTEATOlJiwsZMwucMAg79GVZY8W6rfaZA1KY2UoZr1J + P5DE2aE0XiGZv2WJSpQlqVCVquEzG9CS54hWPkedMHGTNCjidYXin/W8pjJFibpM5ptcI5qIxhxuxWdI + RrMwgB3RwOtqUo2sLz3LQ4f8FB1yU/XI5OvkqwZw5FUDOCLYmhBLPNgyx8uk6eiECZyaoEIWnymbn5ed + okBeqgpFGdSneb81gA1XDWANmiu1aKnQo7WS+rXCxPp3ZjtwRD3bfxWvKclQojBdGL/qX1CazTLJ0qGM + ZXjNAC5nWVbwWBWPzUOL2qx5A7gh34S2YldpGt6+Oh9pimAxCrip0gnVRXoUZcqQn2qDQjHCOEuBklyW + bb6SfVmHSvbnKj5vXZUJzcwBnW3zI4FbG11RV2tEhTCA+fyVwgCud0RbizCAPdDd4IquKkf0FBswmK3E + eLoCC9IUmEq2xQy364QBXOyMvRWMQyUmbC3UYmuRGtuLldhdrsDBGhVOMO/e2KTB6Q4H3DnsjYvD/ri+ + i3ytlTGr3QWzXe7MgW6YaLLHIHnQcI0Sk3VKLGKOXt6oxhrqWmEAixkuriOPOdPtgkt9bri911kygE92 + aXGoQ43djHs72jW/GMDr+HnC9BXmr2QA89pNggv1CQPYFft6XLG/y+VXMK/Mww37OlxxQKDdjfcm2rkv + 1gBmDt1WrcTWSsX/NID5jMfFiORBR9zK3HvbAk+cnyZfWOSK08z/N4slNsgvjjFnHZn41QCeu2oAD9c5 + oL/eGYMNbhhkLB2q9+d+IAYbQzDYEoaR9nCMdUdJhu1ofxRG+sIx1DM/Ari73R89nSHo7iK6xdrAYejp + 53tE70AY+vpC0feLARx21QDmPXp4L26He2IwxHsPdEagvyMcgx18n8dGu2Ix0BqJroZQtFWKEcB+6BJr + c1d4YbDCHcNs52MVDhgpt8dAqQ49hWq0ZtuhhVqsTYyey5WjN1+BoTwlJvLUmMpjXiJ3nBJmsBjZUaHG + kloNljVosaJOrFmpwupaBWa5XcPyXc1jEurJ72o0WMpyF7O7TBZbYrLUClPlNlhcZYul1dZYWWWHtVUy + bKqWY3u1DPvrVDjeqMNJQkz9fKTCFgepD3flW2F7jg1289n25mmxS0xjnibHljQZtrN9787VEuTX2Vq+ + JldMssVsvBVmE6wwl2KLDdkqbOF124vIv0sdsL/KFYeZ0w7Xe0rcame5I7bwvc2ME1u5v4PHdjD3ra12 + wYJcJfpTLNAjZrThdiDDGmM5cixm+axhzpxNl2N5ig1mEq2wNN0OS9inhQG8JFeYxDIsz5NjdQH7Hct0 + 0/+DAby1TI0tZQrGdzk25FliY44FDhVb42ydBve2GfEI+9LTrVr8vsuAd4fJW8kj3h1xxut9BrzUpcYL + HRpCjefa5bjcZINHa83wSI0ZHiRnvbfWAnc2WOG2JrH2pB0O1NlhR7UCa0uVWFwgx2CGDVpSLFGTZC39 + yJsRb42EWBtERcskIzUqUo3ICDHKSzO//u//MIDVCA2fHxEcGqbivlbCvBGsQyi1l0BErA5RYjRxsgmJ + 6a5ITnNFIvlCTLw9ImP4fjTvH6tFVJxO2v9vAzg6Xou4JINkAsclGpCUZo+0LBfCGQnUM5GxPE9M2SrM + YT53glijM81IbmNESb5W+nNNY7mM8VGGwWrb+Smga2XSjENbmo2MH064jrHq5kEPnO53w82MSTfUy3Bz + nS3ONFjjng4ZniDXfGnCgDcXO+Ptpe54eZEbHqHOu63fnbHGEcuLjehPV6EpXpSpLXpz2WeqHBgXyXWb + HKR+Mcu2PVsjx2y1HeYqbbGe/WNjGdt4hR32MVYdrdPiJPvCGdbT7U3WuIt1el+XEo8M6vFQv5b7KtzR + aovTjea4pdkap1n/54YccZExSiwnc6yL8Z19aDdj8n7GuutaVNIawGe7NTjfo8TFbjkuddvhjh473Deg + vLoesAEPD/9qAJ/l/W9ptsGpVmvc3GKJG9vNcbbfEndNynH/tAYPzuhw35QGd06ocGHYDucGiH4Zzg8o + cJ5a6xy5+Y09GhxpUWMb88MKtu2BTGs0JVmiONYM2dTSWWJt0XRzVLPNt4ilGMQ6v/X2EjobHAhHdDC/ + tZRp0VCkQDNzYwvRSgjzt5X9rC3LTkK7MIAlyCTzt4PoZn7uzdJiiJxzjH17ghxgosJAaLFYrMdazhxV + rseRaiNO1DrgZLUON1RpcXOlGqfKlTjD+PNbA/iRems80WiDp5tt8TzL6IV+BV7gd32eeE5shRHM9vEi + ef2Lg0a+Z8LlXgc8QA14gRr+CHXsFt5zVbEVFhVYYpT9XDKA2Q9nqjRYWW1gPKUmqKEmpkZeXSHDLNvE + Rubk7dTFu5sN2M62MVdGvcB+25ZkgTKxBnCExf+1AZwoGcDa/2kAp2mRlaJGdhr5FGNtTroMuRkK5LJc + czOVyCc/KiLKM1Woy9GjLY+5UMwiUyr0gSMmCu0xTF0xwnNGGCNHWS8LCsk9GWfHix0wXOJMjuJCPu+M + KvIkMe10ThY5H7lURrYO6bn6XwzgfN47n7wxh8ezGPszyeuyyLNyyGWycnhuhgZJKXKkpWuQk2dEQTE1 + b5kbSkvdkJdjj/RkJZLibJEs/oCaaIecVPH8GvI7YQLrUJihIxebHwUsIccBxTmOyMlw4DWMe1FyRIYJ + E1gmGcBiBLAwgeN4PJ4xMolIpBZOiLD5xQBODhMjgM1RmWDB9miDMeaCZaxrYQAfYN4TBvAlyQDW4v5O + 9r9Bezw5bMTlYWH86ggx2t8BD3YbcLFBg1uqlDhWwhyZZ4tdObbYlmGFnexPhwtUuJEc9gx53w2MM7uZ + JzenmmEDsS2XObNUhUOVGhwjTzvJPH2qjn2U3OdSsxoXm5Q43ySX1hs/16r+xQA+QT62TxjAJZboSTFD + dRTbWKgYAWx51QBme5IMYB3EVNAxYs33qwZwZAjLirx8Hr81gO0QS87+WwM4ibkimTkjmdeKUcCZzA/5 + 0jTQbijP8eTWWTKAE1n2MX5miPQxQ5SvGWL8zSXE+ltJiAuykXDNCE7k5yTz8zMitEgP0yElSIGkQBuk + BFogPdQC2aHmyAuzQD77TWGUFQqirVEkDOAkubTmb3qspWQAJ4fzO0dbISfWFvnUPaXpjEOFLtQJbqih + ViqntipluynJYP8Rs0ywbQkTODvOCnkxViiJskRVtCWauN/NvLpY/JG/UI9VOcp5A5hxcG2CGTmLGQ7l + WvzGAFbhnnqCXPruJjXubGY7aTdJnsrFdmfGZROuJ689UEJOkWkmYQ/bxoFKPQ7U2ONArRP21DhhLl+F + hYwRfYy1PcQgP280wfoXA3hjuRM2kQttqPLA6movjBaa0ESNUMLvXxhnjULyp0JygiLJ+KVO4b70WhjA + ieQKibbSNNC1GTI0ZzPuSgawCqPkNVMlGiwpUmIlOeMs4+w6xrcNdTpsadFhO2Ph1k7mQuqHKeqY/iI5 + GjMtUSf+yFPG2F/jio4aZ8Z+E9oZmzt5bU+1BiO8flyM9mV8XMg4PUkdN1Guxih1y2iFHJPV/FxhAPPc + 6Wry0wZ7zFEbSAZwrxfW9PlghtplvFmsNa9BF69rLbZFS5ENOljuvVU68gI9Bqv0GCYmmHsWMwdJ00A3 + umCO+mvPcARuW1+My8e7YRYujF5fhWQCCzM4OkQvQYwCFscDxFTOPkppRG9YgBbhQSRD/hrpuK+7Dbxc + rOHpbAlPJyt4EJ7O1jwuQ6C3GgE+Wvh6auDpIqZx/v/dABb4xQCWzN//gwEcyOcJMXCrR6CvBr5eyqsm + sIAM3u58fj6DeD88xCgZwHFibQGSsJQkJVLZWbIZSEsZqBsoKnpqfTBYS1FT5omWHCfUJuvRmOWEvopA + DFSHoL3QFxVJTDK8RyGTVCE7vlhbsivfH6u6srF9shIrOjPRku6BDG8bxDjMG8ChhnkDONLJHPF89jg3 + BhhHWx63QZDWGsEaKyQ5yVHhq8NIhAnLSFI3sLPvZqA4StwmDOAESzxNkvA7Jv43e1zw11Wh+GR/Ir4/ + nYsfL+QDdxYCdxUDZ7Lxw9F4fL41BH9f6kGyrcLlSks8VmCOy/l2eJwE48kMEmwmwmco2J8lyX+RAfmV + AiLPGq/lW+N9NsjPW13w7ZAfPp8Jxr9WhODTZUH4cnkIvlkejG8W+eLTYXf8s9eED3v0+KhXh3/2cUti + 9o8uG3w6IMdnowp8uUCFn9Y646eNLvhhswu+3+KM77c64bttTvh+myO+3eKAzzcZ8MVWe3y70xk/7PHA + FUKYwcIU/mTOiHcX2eK1MTO8NW2GP6+zwedH7PmdXfHzJXf8fLcTfrhTjyt3qPHjJS2uXBAmsAHfnzXi + 23NGfH1Wj6/P8f7n9PhMrCt7zpFwxqe3OuFfJ53x0VE3/GmLE15cosVDAza4s90Kd7O87mLCuotlfFeP + G+Eu7d/TZ8S9vQo8MGCJR0ct8Ny0HV5ersQbq3V4a5UOb67U4u01Wvxthwv+ecAdHx/2xJcn/PDVjYH4 + /GQAPjnmi7/v98Br6zR4dpkdnl2qxIsrdHhmRo/HWE73DMtwR78Nbh+wxvk+K5zqNmcSM8N1nRa4acAW + 5ycYSKd1eJik9fJykrOVGry6RoU/rJPj/U0yfLRdjn/vkuPr/QpcOSIMYM28AXzGGd+c98S3dwXhm/sj + 8PUj0fjuqUT8/HI68CbbzWvlwMsVwPPcPlWBnx8vx5WHS/DNfYX48s4cfHY+E5+eScO/bkrCh9cl4A87 + QvH7DQF4YW0Anl7ri9/tCMPbR+Lw91tT8NntyfjuvjjggRjgXjHlsz9+OuuJH0+74cpZV3zHsr9y0RU/ + 3eOKHx9x5+cRz3vOm8AvBwIvBEgjML+44ISPbzKyDI34Yo8TvpXMX09c2e2D73f54grxw05v/LCF+3Oh + +H4uAV9tysQnu3Px75tL8fUDNbjyUh1+/GPdvPH7ZQvwxVUj+J9NwN94/M/VwLtl+P6dInz1dhY+fyMZ + X74aj69ejMbXz8bg68fi8N09cfj4On/8YY0jnuwk2cmlUGESuhhmhQcjbfE0BdJrFMd/pND5x4gjvlrr + g693eOPbw164cos326MnvrvDC9/dz3J4KAI/PxpHpODnh1KBh9Lw88Pp+PGxTPz4VB6uPFOCL58swyeP + VeEvfP4/3FWLp8/U4eT2PMyMRqKh0h0F2a4ozI9EfkE6cgoKkVVYiIySdGSUJiKrLOE/UZGIwuJE1OYm + ozM/FqM1QVjd54+D7Mtnt0fg/sPxeObGNDx7QzKevi4WTx4Kx/17gnF8tTtWjdujr8eEaiaNwmpf5FVE + Irs0CdklGcgqykZmYRYyi1Ik/L8xgP83iLWE5zFvAIt1gDMKokmog5ES74JEMcWxrw0yA61J6JjQI+yQ + F2KFjEAzpPuLaV5IikhuCyJkjNFiqmgZ8nluEeNohbcZWnneAInt6lQ5jteb8PhSP7yzJwCfi5HqjxBP + eQPPOAPPmdg2HfHzC0746QUP/PScL358lvHvoVB8fCkI793si2d2+OKGATeszNOjK5Si0M0Mma5miHc2 + Q5jrbw1gC+ZL7nszb3nNG8C+rvPwchPQEEoprwkDOND3mgEspohUIZZ5JjZcIyEulEQ1UCGZv2G+tgjz + liHCj8Q1QMPjakQHUSSFiPO1iOf5aZEqZFNUFZLYV/B7t5AIj6eZU7DLKGz1uDThg8cY1x9bHor7pv1x + L3HfdADunPLDhQXuuHnEhOMDBhyk8N5DAb6rQ0/YS+bvzjYTtrU6YGsLyZDYttpjG4/tEOD7W3hsc8u8 + EbqpVY/NbTpsbacA7DRgRzfv02PA3n4Djgw74oYxF9wy5Y6LrI+71wThvjXBuHOFP27j8xztdZUM4BXF + GoxTOPUlq9EYy3xJ0VKeoEZZspjKxohsMRVUtBKZrPu0MJLnUFvkkeyXx6pRl6xDA6+rI0mujbEgobVE + R5IVBrPkVw1gZ6xrdcdcC+uzzoTJQjkGMswpHszRx+0I8+IERe5UuUpaG25pLYlwoz1mWxwII+ZaDbxe + hw0kh5sodDeL79usxaYGLTY2qLGuTolNJMPbOwzY1+OAI0MuOD7hgqOTzjg4KspBg919chwd1eHMcndc + WOWNM0tccW6JC+5Y5olL0y44N6LG7cyrDy7S45klBvx+mQHvrDbhT6sc8fZqJ/x+hSMuzxhx35SO56lx + lkL+5l4NTnSKH4pl2NFkhTW1Zlh21QBe3k1B163A0i4lVnRRvFPEre7UY5b5by37/xxF/1wXvx+feZbH + 17RrSEbV2MS62zfsJK0Be2x4vn2cpPC7ZcwB51mH56c8cWbUDTf2uuBYK89huV7X7o9Djf7YXeWLrWV+ + mMv1xLQwgIURe80A9rJFvZ8GjaFOaIigQIlwR1WYC0qDKKgCDCgX5m+QPSr9dChnPyohjyoh16uUTGMj + mvhes58Bzd46NHmpUM/3qt2sUc4+WUyUsH9W+1iiPtAObeFKdLBddMTZSdOBNyfaYLDQiJm2QMx0h2C6 + NwgLuv0w3uGB0S5XjJEDjLNMFvabsJjfedmkI1YvcsHsYmesnjZx34RVixyxaqHDPMTrKSesWOSM5QLT + 81jM9xaOGzE6rMEQ67uvyw593fPo75FhYliHGZ6/ktxtdoUf1q4KwGr2g5UzfphZ4IuJfg8Mdbqir8UZ + vST0Qx2ePOaPhQPBWDTM5x4hhoIlLBoKwcLhUCwYCsUkSf/4KPPAaDympnOxdn0z9hxYgLNnt+POS3tx + 6dxG3HpiGtft68GOuVKsX5qCtUtisGJBCJZPBmDlAn+s5uevW+CFjZNu2LrAFZsnnbBx1B5rhnRY1kPB + 0qnB4h57LBl0Zfl4YdliH6xY6YfVawKwfkMwNm8Kw/aN4di1MQJ7N8Vgz+Z47Ngo1geOwcxUOHraPFCS + p0BKnAXCA8zh6zE/+jbQ1xJhwTaICLdGGvtwFXNhR7tYlzKICEBzvRvqq5zQVOeKxlpXtNd7oI/tbbhT + rKMfjImOAIy1+GCszhMjFW4YK3VhX3bFJEXwRJEbxou8MFzsg/7SADSyXRYlOiAh0BaB/GxPcvgATwr2 + cFukJapQmMt2WMbPavFFOz+/rsEXxaViJJA94hKojcKU8PeRwcPVGi4mK7heNYAjvF2QHhGC2pwMdFeU + oqO4EI05WWjKzkQztxKyc9CSl4fW3Dxpew3NeTloystGS0EeuirL0FdfieHWOox3N2FBbzMW9jRjur8F + S4basWKiC6smuzG7oBsrx9qwpL+B79dgqKUU7XU5KMmPRlqaP2LjPBAb74GYOFfExIo1mJ0QHmni1hFx + PJ6WFoCMzBBkZUUgI0NMEy3WCI5DUV4ySgrTUFmYgYq8VFRkJaImO5HPmYaOwlS05yWiPTcKHbkR6MsN + xVheOKaLIrGmLArrK6KxuTwMW4r9sb3QGzvzPbAr1xW7qbV25TphW74Ttha7YEOxM9YUmbA83wGLc/RY + kKXHZKYOE5kGCeOZWoxlqLAgW4vFhQbe34iJPB2GWDeDefaSAdyabkR9ikaa6lmM4hWjfiUkKJkzqPlY + lwKSCZyuQ322AxqyqfkyHHhMKxnAeVE2KIi1QUmiHFVpKtRm6X5BPZ9DTB8tpppu5jWN6fbSmsNVaTqU + pOhQkKpFXqpeWgs4NVn1HwawmIYvPMT2KmykKflioxVIYk5L43npiTLpRz6xztv/NIAZ5yQDWEwDrUNz + hREtlSa0VDijpdwFjSVOqCs0ST/sFKarJRRl8ftchTB/S1meZXz++VHAYjSwRjq/kscFKli+wvytzTai + udBZWuNOaOMBxu8etvfOWg9+tjNqigzSCOP8VFsUinWGM+UozmFMzlWgtJB5uZD3LeG9KuxRX2NCW7Mb + Olo9JQO4nvm8sopxvMpw1QB2Qivf72z2QFe9KzorHdFdpGfuVWI4RY7RZBnGE6yxiGUyy2fdVuSEnWXO + 2F5M3lE0bwBvK1Fgd4X8qgGswU3NGpwjV7l72AsXh31xstMZu5mvt3S4YlO/D2b7fDDd7oSRGjWhxESd + Aoub1FjerMaaNi02tGqkNe6PthpxqsMR53ucCcf/MID3tqmws+NXA3iuQ0z//KsBvKbdnvnSCTv6XLGr + 3wV7mRP3dzHnd7vgkECXO7di1K8bDjKuH+xwwYE2Z+xn3pTQYsLuBiO2/j8ZwD1G3DDkiFvG3XCasfns + QlecXuCEW5ijbppwxIlxRxwnvzr6GwN4LT9zhhp/vNEJw01uGG32xGiTL8aagjDSHILRlnCMtkYy/0Vg + ojsaY8IAlkbthmFATPvc5ofOVraFdjESOEiaCloaBSxG/v6vBrAYOSwM4GgJ4/3MRX1xPBbL92Iw2B2F + ke5Y5rIEvp+A/pYItrNgtFb4sy34o7vSD72V3tKaiyMVLhitYL2xP/QVCwNYg7bs+ZF0ndz2iB/xclin + xMJcxohcDZYWMDflK7CoSIWZCg3WNBqwod2Eze0O2NRiwHrW+7oGFaHFuqZ5rG0k56nVYlmlEtOlNpgs + ssBYkfnVkcCWWFRhwfespWkm11fYSsbInmoFjtRpcF2dWpr6+WCpNfYVCvPXAlsyLbEjyw67slXSSN+t + qTJszVRiZzbrk9xDYE+eUTKBN4s/OiTbYY7YkK7A5nwdthTqsaVAtH3y73In7K12w14xAqbMhE2Mg3O5 + Oszl67GhxIQt1e7YXO+NVVWuGM1RoifNCl0pFuhOtUR/pg1G2Uen85RYLdb+TbHFTKIFphPMsTTdFkv4 + jEty7DCTa4cVLK/V7FtzhUpsyFdiC8tQGMDS9M9iDeCrBvAOAcak7RViLWBbrM00w2yaGb+rGW4sl+FS + gwYPkA8/yb71u3YxDbQT3h9zwztDTniZvOGpRjs8VmeLJxtleKpZhsvNdni8wRKP1ZvjYW7va7DC3S12 + ON8qx00tChxuVGIX62o9Y8gMY8ww405LOjVOojXyE6yQTI4fHWWFsAhbhEbIERaukMzdayN/JZOXuGb+ + XjsWQj4aTN0VzPMEQqihQiM0CInUSQgVU0PH6hGd4ID4FKf5qZ8TmTdj9AiLnJ/2WZi/MfEGyQj+rQEs + 9sUU0PHJRiSlOSA1wwnp1PSZucy3WS5ISLH/TwM4RoNkapvsDBPzLmM681xNqQ4tVSr01ioxWn91ynrG + gjlque3UXYe7XXFDnztOj3jhwpAHznWbcLZFhfPNCmnE7cM9Sjw7osXvJ6gdFrMOlnngjSXueGrSA3fw + /AMN5KzFRvQx3zXF2aBJWv9TjolyA2bqHbC83oDldSpppqNV1TK2r/kRnmtFHyizZv3LsJfxV5rKk33g + llpr3FZvidtbbHFXhxwP9OtwH7ni3dy/2GqD08L8bZPjXK8B54adqXHccWOfCw5SS+7kd9zB+++ptcVR + tosbWxW4tUOJs50yxnVbnO+wxoVOa9zZK8MDg2o8PKzFw0O8d7ccF9rtcKbZBjfWW+BErTn7oxmON5rh + 5m4zXBq3w/2LtXhwqYFaVyxhpsGFESXODym55T7vc9ugCrf2qnCcZbanzg7rymywKM8GnckWqI0zR0E0 + tX4EEWeGnDQLVBQr0MC22CLM3hoDYURrrQD5QZUeDcXkD/l2aMiTkWPK0EQI81f8cUWM/JVG/0rG7zUo + pOm3OxgnOjNV5FJ6DAvjscwB48z54xV6TJepsJH9bm+ZFoeZR0/U2OME++DJcuY+vneqVPE/DODH2c9E + 33qaZfNMG9Fjh2f62Of62eeIp/vZPgT61HiOdfXcgD2e6nPAg9SsF7vscVQygG2wUsTAAvNfDOAFzL0z + leIPM/ZYSW28uoaamjp5dTnzNXPyBuYtMT35PrbRXU0O2FAj+i31V6o1KmLMkR9h+f/aAM7LdJDM38Jc + R8kAzkkVS2uQT5E7ZKTYIZPxNpuxNIdlmsMyzSOEASz+BFdDntlaYCLncGJOccRgkQNGCgwY4PmDvG6Q + HGcozRbjeWqMFegwLN4jz+oscJT+JFdGrpSfoUc2eaowgDN5v4w89t3fGMBieuisDA3S0lVIZXwXpm82 + j2VkapDCY4nkOcmp/C7ZOuQU8LuQBxcWufCeBqQkyJEQYyWZwOnkoznsn2Jksxj9O28Ak+8RRdwvShd/ + zDOgIMsBOekmpMRrJX4ZGWYncc3IMBmiuR8TbocoIjbCDvGMk3HhNkgIt5qfAjrMHCnhZsiLtUR1ijVz + KrVpgRzLi+wkA/hg5f80gB8fdMDlYXtpmvenqGOf4vYxMXCmQ4fb2JdFHjhUaIPd2VbYlmmFTSnm2Jxs + jr3MNyfJa882uuHmWvKdbMaSpPmphTfz3B1FcrZxJQ4zD5+oluNWtsE7+Ln3dOpxJ+99e6sKF8jVznP/ + fLdBWqLjBu7vb1JhZaElepPNUMv+WiT6K79fijCAGcdjosX0z/MGcCzb3DUDOILxPyJEMb8N/c+RwHEh + bHOh8xAGcKJYwoXXCSRHqJHGmJ2daCT/d0JJljuKGeOzE/UsV17vbz5vAIuRwNwXiPazREyAFWIDrSWI + qaAT+DlJwTKkhFIPhLKtBKuR5M868rNCIq9JDTbH/4ezvwyT48i2htFq7i6mZmZmZmZmZu5WM0lqMUOL + mSXLskWW2TLITGOYsYfB5wzzjMdsi9ddkS15POe8773fd3+sJ7KqEiIjI/Zeu1bGjrQgGbJCTaWZ8/lR + 5siLFmKnNQoSbRYF4OhFATiRzzAl3AQZURbIFgJxipp2iPErY1YpDXS2Lcqyjey/7C+patZ1MX10VqwF + cnnOwkgzlEeYoI5ojzOXBOBV5CGrc1SYJ5dYSfu3IV6GXWkmOJxthjPsH5IAXKXGM3VqXCUPf7pBjUdr + +IzqdXi0yQ6PEOfIaU/SRhyk3dyWYSJhbxE5Lf3M3jL6slIDtpL/r2BMMcpr9PL59UbLMMDtRQHYCssE + d8kzsD4GrCiww1yRI/o57urImfIjZciJMmX/ZRux3nm8pzwel5/AmI4oSBQC8CJExpBa2tsmcoh28qJF + AViDySJyxgIFlhMrS1S0YxpsqNZiM3nhtlYjtrTaYkU9Y9MyNbpp22vT6RvuCcBC/JXisgrGZ7TNHZVa + dFZp0M92GapUYrRCRZ/KknZ6CW3nYLE1+SzHWOV9AViL6UoNfa6R8YQr1nd6YH2PJ9b2+2C+xwNjrQ7o + q9OhrZS+hOOxPt9MKltp8zt5zi6ih3Ueoi+YqDJgrs4ByxljrW1mzD0YisvrC/DGsQ7IIgJIUvwW0zl/ + VwCOCCDxEbN8RZrnewJwsB+JkJ8agd4q+LrbSOKvu5MQfs0k8fe+AOwtZt56ch9PDbzdNNxHrOErBGAr + CNHX7lvxV6wFvCj8itJoXBSE7Yhv00CL1M/2/Gxnzc8WcHG0kFI7+7FeYmZvWJARwQFGBPho4eulWhSB + 3RWL8GD9ffQICTRwIBsREa6XHEq8SKtCx5DMzp6ZrJAWUa9mINla7o7uSh90l3qhLY9BKo1nfQYD4CIf + tBf7oibNmR1Lw0GnRA6JYm6wEsWROnQVBGBNdzZ2jFVgvi0NTaluSPOwQLStDBGEJAAT4Y4miL0nAIfb + WyJYb44ArSVC9JZIdlah0t+I4ShHzPOcm2lwdvvLcJgG42KIDC8mmuN7eXL8iAPnV8Pu+OumSHx+PBW3 + ruThzpP5wDMFRCFwIQ3fHI3Cx9v88PulzvigQ443K03xWrEp3iiwxisZVngllWSbAfvrHFxvZlnhnRxL + /IDk5kOWPy+S448kel/3+eLOXCRubUvG17uScX1nEm7vTsGdvcS2GHy5Mhj/mvLAX4ft8NdBA/4u0K/G + 30goPhlU4LMRJb6YVOLuRmdgmyvuLLji1k5n3NzlhBu7HXFjlwO+2WHAZ9u0+HyHHtf3OOD2fjdCpPZ1 + w1fbXPDJBgf8ZkaBHw3J8MMRGX610hz/OGDAVw+54OZjbrjzNM/3pBE3ntTg9uM63LwiYMD1S8RlI76+ + bMDXjxjxhcAVB3z1mAu+etQNn19yxSfn3PDxKU/8lnX6YF5P4miFpzotcLVHg6skPFf7XPBMj5sEsf38 + gC2eF28aDpnjjQkz/GilAr/aoMNvN9vhdwKb7PD7Lfb41yEvfHHKF1894I9bF0Jx63IEbl4Mx5fnQvGv + U4H49S5n/HCtFu/Oq6V0z2IdxxdGSdC7LfFwq4mEB9tMcaxJhgP1RLMMx7tIlEc0eHLagBeW0qku1+Gd + FVr8cI0Gv9ykwO+3yiUB+FMhAO+X4+ZhBW6eUuHGWR2+uejI+/bAN1eD8dW1SHz5ehxufD8D+AX7zG8r + iQbgo0bg5/XAj1l+2Ii779Xj9ltVuPFKKb56Ng+fP56BTy+m4l8PJuM3e0Pwi4Ug/HRHCH68OwS/PpOA + v15Jx1cv5OHWazm483oy8Fo0cC0EeNIbty4548Z5e3xz3hHfXLDHjStCtHfArReccfd1V9z9njvwnlgH + OAB4NwB3XvbB59znnw/Y4uPDdvhitxP7g5jx64Vbu9mmuwLZD4MIf9zeFoC76yNwZ0MSbixk4ctD+bj+ + SCVuvlqL2z+swZ3f1ODuJ7y/b1oW8QXxSRPwD373F97vH6px6/el+ObX+fjiV+n44qdJ+Oz9aHz6eiQ+ + eYFt9WQU/nncB79abYe3OhV4koT3cZL950kE3yQ5fz9Hjp8x4P1tpwGfLvfCzZ3BuH7QD9dPeuHGBeJR + D/ZNT9x61hd4IRx4KYZI5HYS8CLB7buv8vNbGWzzAtx+vww336/FZ2814W+vNuMXV1vxxPEKbF2RjJ4m + X5TlupDghiAvLxXZeQXIzBcCcKokAGeUxBMsRSpoCYnILUxGeU4aGrIT0VESgrEmP6we8sWe5f44vSkc + j+6Jx+N7YvDoQhgubQrCA2v9sXXSFWM9DmhsdkJRtRtyKgORVRaFzNJkZBZnIl0SgDMk8Te9KPnb1M2S + eCsE4OJkxAkBmIjmMQLfFYATS///EIALopCeHYyURHckheokMiTS/OYIATiCzp6BgxB+MwJNkBVshpxQ + K+k3kQI4J8ASuSRZRV4ylHvK0EKbOkhStJ4O/0yjI15byue72xefXWRfeskPeMcTeN8B+MAO+KEtYcDd + D+1x9wfsq9/3xe03A3H9WhA+fswPvzoRiKfn/LCnzgkTidaoI7Er8JAh2UWGMFczBLlbIMDTHH5eZvSh + loQN/OkXxRrAPq5aeLno4OEqoCaU8HCzpv/6twAcQRIYKdYjCRZ+Wb2IQBJUfxsEe1kR9CGe1gilnxYv + bAmfHRmoIllloBSuQawgpBFKZJHwFoZboJJ+pIPEaJZka3e1ksGwLZ4d98Ab8wF4g33ixWlvXCOen/LC + U2NueHSJEx4aJFHr1eJwpxp7GXzvaddiD8n3rlY77Gixw7ZmIyFKO2xtNGJr030x2B6bRfqSRgPW12ul + mbEbGtXYLARSBgxb2zTYwaBhb58tjg464syICx6mP3lsqS+eWuWPp+d98Mi0O84uccG+FgM2VelIxJQY + yySxSVKiNpKEN1ik+zZHViSDOwaFKQwG06KVSItSIjWSZRgDPnHv0SqUxzPIS1CiigFUjUhtFm+JzmRL + DGaJ9eG0WFXrIAnAG5pdsZpkaYaB9TD94WCWBQYYhAgBeLxEiZkKDZYzeF3NIHZ9iwM2MqDdSCK4uY33 + 3m4gMSSaiRYdtjVqsKVWzWBXQeIolz7v6TTiYJ8jjg074/iYM46MOmD/oBa7uhVY6LDEoQElHp5zwmMr + PXBlqQvbwwXPrfTCs0td8dioVnpb/aVZA95dasSPlhvx0+UG/HRWjw9ndfjelBbPDFnjYrcFzrSZ43Sr + Oc60ylmKtekssVBrgnXEfL0Z5tutsJw2bSkx16HAsg41VvDZrmLgtLrDgDUM9tcSa9qNWNHMwJ7PbCUD + rXXtGmzrNeLQmCtOTbnh9JgjTgzocaJfgweGtHhiqSeeXu6LJ9iPHhnxxoMkq6faPHC2OxgPdIXjUEMw + dpT7Y222KyZi9OgNIun2s0KjEIC9OYb8tWgMc0J9xKIAXBG2KACXkOOVEpUBDFh8dCj2UKNICMDkexW+ + WtQG2aKeaCDfqyPvrCb/q+B4KnU1RzHHY74zx6arjMeaojrQGk0RarTHa9CRJEdTrClaGeAPldlhvisI + 8wOhWDoYjOlBf4z3eWK0xxUj3U6EEaPdBkz1GzE7TPI/IURgIQA7YMUkP0/y+HHbb7F8gkHJmD3mJuyx + dNIBS6ccMTVmi9FhHQZ6Fejh825rMvsWHS3mGOhRYnLUDstmXLBymRdWL/fBiqXeWDbtgakRNwx02KGL + Y6qtRofWKj26Gx0w1O7Oevlist8fU4MBmBkIxMxgIKYGAjDBcpyfx4fDMLYkCuOjcZieycDa9VXYs38A + 58+vx+OPbseVS6vx0MlRnNjXjp3rC7FhaSLWzkRi+Xgglo35817Emr5eWDPphQ0TbthMP7Flwhmbx52w + jvVdQTsx26vDbB/vd8gZyyY8sGzWEytWeGLVKk9s3OCLbZsDsZN+ZvfGIOzdFEpEYNfmKCxsjMGmNXGY + HQtGa509SnNVSIuzQkSgDKG015HB5oiLskYCx67446ahzgMDfWFYMhSO4YFg9LR5obvVA31dvugnBrv8 + MD4Ygjne87LBMMz1BGGmne3T4MkAy5UBmwsmStj/il0xWsBnW+CxKAAX+5HvuyJfrDlGn+HnJIMH+XsQ + bXoSbUxuqhYVRU6orXZHm5gB1xOCBvrUsgoP5OW7IIOxQkK8HSLD9Aj0VdG+28CNMY6nnQrhns7IjAhF + S0Eehmqr0VdWio6CfHTl56G7oBA9RURhMXpLStFXUiaht5Tg5+7SUrSXFKK7vIxt3IWVo4NYOz2CTcsn + sW31NHaunsPutbPYu2Epju9ai1N71uMky5M7V+HYtnns3zSLrStHsGKqC73txSgriUVysg9i4twQGe2I + qBgnlkIEdpAgROHEJG+kSrOAQ5GeHsoyAtk5sSgtzUBFeTZqyrIZM2WgJi8FTQUp6CzKZF0z0FuYip6C + WPTmR2MwPwLjBZFYVhyF9eXR2FweiW1lIdjGeGoX23xPniv2Zrtgb6Yj9mY5YleeE3bymWwudsHqfI6B + bCOmM7WS+DuersdouhB/DRhJ12EoTSUJwRO5/C1Ph2HGcP3ct5/HdGYa0Mp9G1J1qElatPsVCYtCsJj9 + K2YBF99DEf1GWZIGNRm2qGUdqjNoa5K0KIi1QU6kJbKjzZEfZ42SFJ4jQ42KdDUqM2hfMmhn0vRoTDei + Kc2IRiE4p+qlGcUlPF9+slpK55zJPrMoANOfCwE4xBSLa7GJNdkEFsXgqAgbxEWLFH9yJMeK9KWWSE+w + hljfrSLPgNpiOyntshCAG8q0aCglyoQALLJXOaKlwgXN5S5oKHZCdZ49ithG+amLfxCKmSEF91DEehez + fUozF//0KZUEYZ20XZapl1CarkEly2q2ZQufRWelmEXvh/5GsS4sY2H2/4ZyJ1TmG6S00nmMJ/PTrCUR + uCBTpIImctm+eSqUFmpQxTrXVtqhqc4ZrU3uaK53Rl2tPSqqDCivMn4rADc3uqC90Q0dtc5o5712FujR + lapEf6Icg+RXw3EWmGDMvpLPfUu+PRaKHSQx7FsBmLHr7nIbHKoit2tQ46FmDR7tMOLqoDueGPLCA+2O + 2Ndsi90drtg95IdtSwKwQrzcU6PGcJUco9U2WNpMP9giBGDyFR6/o0GFg+Qsp8l3LnQ44nK3PS50GXG6 + a1EA3t8mXor7jgDctigAr+pwkrC2zRZbux2wU8wA7nfBfpYHO50k8feIBDcc6/aQSiECH27j7y2O2N9k + L2EfecbuegO2k69tr1RgN+u6j/e2nzhAPnW0TYcTPbb0vY54aNQVD4+74PyYEx4mr3iQdvnMiB1OEidG + nCQB+Ajt+J4RH6zvccfyNheMN9Kv8ZmMtnhhtNkPY83BLEMx1hopYbQ9AmMdkRih715CDHaFoK89AB3N + 7AdN3mhv9UeHQIcQgYNpExcF4N6BsP8lAAsMdYvZxIsC8EhvHIZ6YiQReLA7GiN98ZgYSORvidIM4I6a + QLSK2b+V7HdCAGY/HKykra5wxhD73wD9dXehHp15WrRkKdHGvtgp+CG3+7M0GCHmcg1YlqvH8nwdlrJP + zpJDrqjgs2q2l1Jy7+ujDepywg7yti1NGomfbm7WYxOxvoE8iH52vkKJ2WJL2jITjOTLMFpkSi5ogskS + UyyrMMeqMgtsKLPE5jIr7KqQ41CNCkerlDhSLse+IgvaOTPpD87NaSbYnm6Fnazf9nQFtqfJsZDN/kMb + doDjW2BfAevFOm+jrdmUqsD6FBtsos/bnq/HVo6HzbzXLflGqe/vLHXC9iI7bOD+a7PJ3TI1WJWtw5oC + O2yscMP6ag9pbfSBbBW60qzQnmKGzlRzSQAevicAr+SYXZFojtk4GaZiZVjK/ZZmWmM20xJLs62wuliD + deTHG9huW/JV0vq/u1ju5rje8z8E4F0VOkKNrYVWWJMmk9YH3Josw7F8M1xk371ap8ar9Uq8w3b+Sacd + /mvQGT9n332vWYGXK83wfKkp3miQ4x3yzPfIR99pU+DtVhu82S7Hy4w9rnHMPdapxTmOuWMcm2I24Uba + jqW0L0O0Nc28l5IE8ee1OeKjTBEewRgszAqBoTYIClUgOESFEMZGogwKXURoqGYRQugNUSMwSEHIEch9 + 7kMSg8O1EoIjuG+0DpFxtohJtEcM/b1I/SzE3+Aw1bcCcEy8USr/bwJwcrojMrLdJPH3uwJweAz3i7RZ + XP83lr6D3+VkOKIo3wHlRfaoLtWjWcwmoh1Ywphqsk6F5YwrNjBG2tnuQFviigf73HF52JM2zx1P9thD + ZLR7uk2k4VTgzV41vj+sxU/GdPjvWXv8cbk7/muZO96f9MDVIQ8cbnDAyiI9+mh3hQBcH09unM44qEiN + afLN2WqOKcYzK2gvV1ax71RY3Uvzay2NgYUKG+kllcN1tEt83mdrLHChVqSetsBjfJZXe1iXLpE61gaP + tFjiIr+7yNjykT47XGZ/eJD29WiLnnZOiW2lFoQpdlWa83yWONVkjXOMZx5us8aFVktcYnxzud0cj3dZ + 49k+FV5kHPXKkB7Pdiul819sECnIZThSKsNhlkdrZTjbLsOjw1Z4TswAXmbE83NGPD2hxeMjajy2RIMn + Rg14fIkBjwyo8TDPc5j13l5hhlUFpow9TdHGPl3NcVIQbYKMCBky4sUMYHOUCYGX/b+ePq2+Qo+GSvIP + QojCdWXkF4UK+mVr1OZaoz7bGg1ZVmjiOGshhPjblm79HfH33wJwa5qCvynRxfHdRxuwpNROSn8/WmHA + NM+7sUSDvSVaHOLnk1W2OMlxeIZj8myREg8V2eAybdJjbL+nqy3xQo0l3mhUSC9YvN1kgTebzfFGuwXe + 6LTAa10WeLXLEq93W+PNHhu8xXv/Xq9Gynz3Rq8tnu+2xRXGrkfqFNhSbokVxaaYyJNJArDIjjVeRNtK + uzrPOqwQ4m+lnn1DjZVlCvYNFTbV0EY00ca1O2FvixO21NliGflLJ+1NRYyYyfi/BWAh0kVFaqQXIaKi + 1RxnSnJVATliydtiYqwRG22NeG6nJWqQk24rib/5WXbII//JIgcT//Enx1sjNcka6ck2yExTIitdhVxy + xdwssX6umnxIhaoscilyTiHodpFb9ObbYoB+ozdVjt5kK8ISfSnixRkVhmmDB8jJerhPK7lWrZhtS36a + Tb6VQe6UxnOnf0cAzuF5c3PtkMlrpKSqkJSsIL+2kbYzyMlSyGWTON7i+F18shwprF9GjgE5PHd2rj3S + yCETyEdjo8yRGGOFFHLYzFQ1+51Guk8hAAvkETmCdybrGKvwM9sjO1UIwGzLKKUk/ApBUyBCCJtQxhh9 + AAD/9ElEQVShiy8gRoVYIZZtHxNqcU/8NSVkSA1j3BxvjppUK3TTd47l22C+wFpaA1gIwOebOW7aDXiK + HOS5Tj1eG7DHG5IArMebgzq8OaDDyz06XG3V4lK1HKdLLHGQvnAnx9EWMQmBY2l9jAy7Ui1wutSIS+R+ + 52odsDvLEuv52yr6pE3pptieR79aZI1DpTY4SftynnblGfK653vtOdZt8VS7Fk+06+kbDHiUMfolkRGl + XYeD5G4reL3+JBnqeZ2yKBNkR1hK/w3FCwFYrP0brpPwXQE4jL4iTJTBcpb32koIwEQsv4sLWUQ894vn + ft8VgVOi1EiP1SMnyR6F6S4oSHNAVoIOCeE2iPKnT/KRIcJXhvB7iPQxlQTg+xDib3ww4wBeJzmEYyFQ + iSR/BeJ8+Hy8TRHL4xMYEycFyJAuZgGL2b8xlsinrRYCcD770P8UgMUs4NRIji/uk5+skkTfmkJnVAmf + wr4r0oYL/p/H/isE4HTGHpncNyfGAgU8rizCBLVCAKZfldYALtBJAvCKZDOspv3bSOwWAnCuWANYjvOl + SkkAfqqOtr5egyfpoy5XynGpSoVH6o24XG+LB6sNOEV7ebCAHCjDDAuZ5thHu7Wf/WBHoQ4bc9VYTRs4 + y7E3wmfXR/QTA3EmWEIfP5lkhRnyp2nyqAmO0TGO6yXkPx3kTFXxrDvvPSuS4DPPijFHTqyFhDy2jUB+ + ghUKGF8VMa4oS5Ez/lOhKVuJjlwV+vLoW8ltJoiZfAXmxIsPJUqsLlNjXZXI6CcmeZB7NBuxvFaHEd5v + R64latJMaQvkaC6xZSzmgPpSW8Zo9AP0B220jR20hz3lCvSXyTFcquA15JL4O1xogwH272H2b0kAJuec + ribo5+dqDVjd4oy1HW5Y1+0lCcAr+rww2eGM/npygRL6k0Jz1Obx2vmmaMinXym0RjPLdo7VHl5jiPWe + Ypw1V22HlYy9dvQG4eLqXLx+pA2y6GADwgNIXnwUkuAbHqCVUkCHB2oR4qeWxF8hAvt7iVIFf277uivg + 5WINNycLuDl+B/zsLmboOgvxVQVvdw08XNRwdZLfE4DFzF+be0LvYilgMCyWer0lDOK7eyKwgL2tNez5 + nZg9bC/W1LI3lwRgH0/5vdTOtggOsJWEXj8x49hTDR8PNa+thq8XiZufQdonPMTAwc17C1fRsdAAM/hP + TZBLArBwAuU06PVFTmgtdUdHiSdaC9zopJ34UB3YOThYaEgLomjggzhAOEgzAokAaxTTkPQWB2Ndby62 + j5QxgExGY4orMjwtEWsvQxQRZitDKBHpRMMqUkB7KBHpaI1AnRkCdJYI5/2luapRE2DEkhhHzMcasClc + jl3BJjjoJ5PSzr6cZol3S1T4KUneb6Z88PGuOFw/l4O7Txbi7jN5wNNiFnAubj+UiC8OheKvmz1J8Ozw + fqcV3qo1wxsVdPQlVngpxxLXSDiukXi8zGD9FRKRNzlw36eR/REN/H9xUP613RXXJ0KBjcnA4TzcPpmP + O2cKgAcLiQLcPZGBG7vj8OXGYHw274VPZpzx8bg9/rlEj4+H1Ph0iRqfjSjw+YQcdzY4AgtuwE4X3N3r + jFv7nHB9vz2+2WeLL/Zo8clOFb7YrcVNfnfnkCtuHeC1d7viy63O+HSjE34/p8YPB0zwXr8MH0ya4Lfb + 1fj4lAO+uMj9nnTHN487EAbcfFSPG5d1hB7XL7C8aMA3F/X4WgjBj/B6j7vgxlMeuPmkF75+1AtfXPDC + Z2d98Yd9bvjhagNeXmKNp0iCnulR4yoJz9U+J267ctsNzw244Bodm1hf5LVRK3xv2hK/WKvGH7ba4q8L + jhL+sdMZ/9zjiq9O+OHGg4GS+IsrUcDjMbj7aDTrE40vz0Xgb0f98cutTnh/pR7fW27E63O2eIbE8zyJ + 2Ml6ExyrIVmtM8VeYmeNKXY30tl22uAc2/axaTs8u9QeLy4jKZs34Adr9fjlFtZjQYG/77DBZ7us8fVe + K1w/YI2bJ+S4fkaDry444osnvPDNC2H45tU4fP1uKm79mM/yN1XAX1uBf3QBf+4G/sjyd738vh/4Bbd/ + 2II779bh+svF+PLpHHx+OQ3/OhuP3+4Pxkd7gvCrA+H4r1NR+PsTKfjy5UxJwMQH+cD304C3ed+vBOLu + U264ftEOXz9swNcP2eKrh1hessX1x21x46o9br3sgltvuOKONOvSD3iLx1zzxZeXXfCv0w74+CDrvsMZ + 13d44/YuP9zZFUyE4e7uSNzdE4G7O3idjbHA5iTc2Z2O60ezcPuxEtx+vQJ3f1SBO7+twq1Pa3H3ZjNw + qw34hviiCfiUn6W00PW4+9cq3PhDCb7+dQ6++Bnv8Z0Y/OMljp8ng/HPi0H42yEP/HqdHT5YosKrDSTK + 1Rb4HsnMh3RqP2lW45edGvx5Sqxp7ce+HYxbxwJx84wvbj7sixuPeOPW49648xTvTcyI5jOQZkcLvBgJ + vBQOvBbB+44D3stk+3F8fViDG99vxuffa8MfX+nEq+drcXRbNqb6QlBX7I6inEDk5SWRWOYhPY8oTkVa + SYKUBlogjUgpJYpTkFmYisK8dJTnJKKqMJiBozf6mt0xNeiBdbMB2L02AntXhWLnsgBsn/HDpgl/TPd7 + obvFHZW1Hsgr90FWeRgyymKRUZqCDLHecFEG0gvSkV6YjNRisVZvClKJZF4viUgUKElBnACP+Rb8HC/A + bbGP2FfgfwnA3/6WxPMShfFIK4hCWk4wUpM9kRJpK62HkRFig9wwkd5RgSLa87xwa+SEWSKXRDYrxIL2 + 2QyZfubI8jFHnrfJtwJwa6AMwyQGG+ioH2hxxCtLPfHLvb749JI/bl1jP3yPtupDW+AnBuBnekID/FQH + /MiBY8IDeN8Pd18PxNfP+OPPD4fg7c0hODfggfWFSvREmqCCpC7T3QSRbuYIdRfr+Zoj0NcCgT5WCPSW + I8BT+E/6RvpFd2fCVQM32n43VyXc3azhfU8ADhXr+wbKFxGgIEjgBfxITn1sECBmCvP8gR7WCPJRLq7d + Tz8eHqhCONsnmn4uLlJF4meDrHArFIWZooakvp8EanWeOY436/DEsBNenHTDm0u98PqsB17h9iuT7nhh + 3A1PDzniSr8dzvfqcaZLg6NtSuxj8L2nVY09JP47hMhJEiTSji20OkjYLGZVkJRsJjHa2mrP0hbrGkgW + a0meiDV1SqwXf1Y0izVy1djeYcDePgdpXeDT4s/LKSF6+uDxeR88NuuO86OOONyhwUKtAhvLF1OxTOZo + GIipSEjNkEsinCbIMP1kvEhbFGGB5GgGUDFqpMRqkUyin87+kSv6iJgxLNJ5MoCqJ/lrJ+nrTrPBUK6S + wSvJbI0tNrS6YyOxttEZy6ttMVWqxhgD6RH6RRHkThTLGeSqsapWjw3sO1sYzG6lP97abo+FTnvs6rLH + bmJXu530h6JY82gzie96BuEbKq2w0KTF/h4GwQNOOMS2PzziiAPDttjVq8K2ditsbjHFvh45Hpqyx+Mr + PPDYMlc8vdwNL672wbUV7nhq0oCnx7V4ccaAt5ca8YNltvhwTo/vTzJQn1DhpSUK6QWiY3UyHKgkqmQ4 + 3WSNB1qVOMZyd505NtabkwRaYr7VBkvbVZgR4LOda1NjnkHTSmJFqx7Lmkg+61X3oMSyRhXmm5RYx2Br + +4Adjk554iz7zYNTrji9xBYn+lU41a/EU+QDz670x9PL/PHkdAAuDPpKAvDJdj+c7gjB4cYQLJT5YWWG + E0YY3HcFWKHNzwoN3haoZ9+uD9KjIdwZtZGuqAp3RXmYM0qDHVEcaIdicrlSXyOKvXQocFOjwF2JEm8N + Kvh9VZAdagKNqPHRoIrfl5IjFjqbo8DFVBJ+c11kyHGXoYgBVyUDrMYoHTqT9OhmsN1JLtSTr8JojSPJ + dSBWLgnF0pEgzIz4Y3LIG6N9rhjuccAwA8yhDi1Gu3QY7yVBHzJwPyOWjtpidkSPuVED5vh5ZliPyQEN + JgY1PN6AKX43O+GA2SknjI/YYXhAi55Oa7Q1m6KRz6qhdhHN9P+dbdZYMqjH9IQTlnEMzM96Y+m0B2bG + XTE66IQOjp3WWjWaGEw1MUBoqzWiu9kRA21uWMIAYazPl77CD1P9ftL2aL8vxgf8MT4czGuHY3oyFnNz + KVizrgi797bj3LkZXLowj/PnpnDmaB+O7q7Hwroc+odYrJoM5X35YmaJD2ZHWY8xT6yY9MIajtP1rNOm + aTfCHRsmnbFq1AHLBm0xR7uxdIkzlrK+S/n7sjkXrFjmgvWrPbB1nQ8W1vti51pf7F7nj93rg7BrYxh2 + bYrGzk0J2LAyFuOsdxufQ2meBunxZtJMHoH0JAa42Rz31Q7o7fbHxGgkpsajMDESgqEeX/R3emKwxwdL + en0xNhDAZxGGlePhWD3CciAY8zxmaYsPpms8MFnuwjHvglGxBnCOE22ACwYLPNFb6IP6NCfkMYiPoc/w + c5DBR2Tx8TFBRowCxZlG1Je7o6nOG+1tQvQIQmOTL6qqvFBa6oHCAg9kprsiOdYBUSFG2noN3O3k8DTQ + Jnu4IDc6At2lxZhorMeSqkr0FRehv6gIg6WlGCwjSsslDJdXYKSymvsQlVUYqqrCQHUVRhobsGV2CnvW + rcL+zWtwYOs6HN65Hid3byY24cz+zbh8ai8ef/AQHjt7AE8Sj5/ZiwvHF3B871q28wyWTbaitSkLWZmB + iI11kWb9hkc5QswADo+052dbhLGMinFBbLwHEpP9kZwahNT0MGRmR6OyKge1tfmor8lDY1Ue2irz0Mty + uKYAS6rzWO9sjFSkYbw8le2chLmKRKyuTMCWmgRsr47Gjsow7Czzx94SH+wv9MTBXHccyHLGPsZae/Kc + sYfx17ZSF6zKNWA2Q4dJjs/xNI6lVB3G0vUYIZaka9GfosRgqgrDmWoMi3Xy0lToSVOjm8d0pOvQlmFA + S4YQZvWoT9GiOlGJ8jgbyQcUx9qghCiOtqZfsJZmAddm2qKefaEm0x4lyVrkx8mRHW2B9EgzZIs/WJLk + KEmjvWF9RMrkCl6nOk2HeiE0S0KwEIS1KGe9ipNUyE9WIidFjQzWMTlJiTjxQkMEOUGICWGKsBBzCYvr + spkjgtwlJsoKCaxPAq+bGG1GH2aBAiEA5xtRV2KPxgqinH2wVI/aYrUEIQi3VDotCsBlLqgtFG/12/H6 + eikNdUGaAflEbopISa1FLusoZooU836Ls2hTRWpR9uuSLH4W3/P3onQNyjMNqM4VaaU90Fntg546f/TW + +6Gz1ovXcmN9HFGZy2PZFoVpcuSn2khCcG6aNfLSrVCQJSdXZVsVaFFVYou6Cgc0Vjujpd5NSgddzzFe + XWWHCvrZylo71AoBuMEF7Q2u6KhxRlupHdrzaKPZfr1sP0kEZhuOxltjKb9bn2PAlkJbLBSRfxTpsJ0+ + fEeRDfuPNY5U2uAs/dWlNh2eor99ftAFTw244UH65YMtRhzsccfh0QDsGw/Emm7aAtrTkQqRTtUay8hL + VpLjrBYvOzWpsLVegb3kLGIW8IP08xe67fFQl0ESgI+2a3CwTYu9xA4hANNvbmhdXAN4ZYeThA1dDtje + KwRgR+ztd8ahPjccZlwpBOBD/P1IlyuOsj6iPCxmALc5YX+zA/Y02mJPgy19thE768glakQaUhU/a7C3 + gWCd9jWpcZj++hjj1TPDjniQHOqhcWecE+LvsB1O0fccH9Dj2KABx8g3jo564sg4x96oPzaT56/qpC1s + oR1sFjMKvDHWQj/RGorx5nCMt0VhtE0IwERbOEbaQ+n7QtFPm9fbGoDOFj90NPlIArAEIQqLjAw9IgV0 + KPoGwtHbG4peMSu4Mwh9nSHo6wjm8WEY6gqnPxWziaMx2B2Fod4YDPfG0r8lYmoomX4zGcMd0ehqCJbW + AO6q9kNPlQ/6qmjjqzwwUOmM/nIndLNfdRSK1J06NGVr0JKlRjttQRfLPpZjmVrMF9hjZYEdVuYLIViB + pflyrCnXkq+Sgw144sSwN47ymewjf1vg8xPLlYjsLRub9FhHLru6SosV5J5zReR/eaYYzRczgM0xWWaO + 6TILzFdaYnWFNTYQWypssKNCjn2VChysUOBAKftjoSV2iHTI6SZYn2KCLen8nK3EQpYKC7RdO/P02M3x + vb/YHgdKHLCv2BG7C2yxNUeLjekKrE3hudOV2MJ73JzPeuXy+xw9tuTbYgvva0Mu65jBOtIuLaedXJ6l + w/IccpJC8g1iOM+ArkwF2jkuW1PMOZ4sFmcAsy2mcxRYnmqFpfEmmIySYYyYTTaX1tybS7fA0gwLrMqT + Y22+ktdVYBs5khB/9+az/xWw/3Fs7xECcMm/BeDdVeTrxTZYl26K1QkybE6U4WC2DA9xXD5ZrcSL1Qq8 + yTjggxYdftZlix+x/75db4UXymR4ttgE77Zq8AHH14/7bPGTQXv8eNgeHw7Z451BO7w66ICn+hiT8Pdj + rTrsYuyxvpb3WWaPftapIVWOQvHnN+11TBRtLeOBoHDGSqEK+DMmCghUIICxlFTys3+QEkFBGkKNoGCt + hADGWALiN//AexDbISoJgWFKhN0TgMV6wJExBvpLrST+CkH5uwKwmAV8Pw20+F5sixTQiwKwE9Ky3JCe + 7SbNAk7hZ/F9WKSc+1vTHyuljCJpaQ7IzRICsCNtqR1tqVgDXoN2cr/+ajVtF597g5YxlRG72hxxvJt2 + jnz18qA7nhxwwdUeWzzTocPztFev9KjxTr8aPxzS4OcjGvxmyhZ/XuqG3y3zxIdTXnhhyAPHaHNWF2no + W8WLkeaMlUzRnGaOnjzGQMUKTJTJMcW+vqxKjuUC7PMraG9XVymwgZ+3iVm7tFH7WacjDYwJ6ixxrtYE + FxrMcanZCo91qvBYhxKPMJa80GqNSx200916XGYceKHPEScZW+6vtsFCqTk2F8qwpUiGXeWmOFRrgZON + Vnig2RoP8jznmi3wcIsZLraZ85w2uNqnwYvkza+P2OMV2r1nu9S4WGeFIzzH/gLGQuxfR6plONsqw5VB + C1ydZF9kDHVtzo7bejw1psOTo3o8M2bEU+Txjw1rcKGX47jOFFtKZbQfMkyyH/dlmKMx2Qyl8abIjjVB + VqIJ8jLIIQrVqCzToaqcvKBUi1qWNeJzqQpVRQpUFyhQUyBHfb4CjTlyNDDmqE+zJD+xQBPHZPs9AVjM + tl4UgOXkMHK00Le20A600150MfYdpM1bIgTgKltMV9BGleiwk31if4UtjpEfHC3U4gTH62mO27N5lrhS + bIUnyyzxLJ/RS2zXN+jP3qq3xpuMA19vMMUrjEFeYcz4UpsJXmwzxctsz1c7LPF6hw3e7lbje30GvEb/ + 8izH3OUOPZ+DNTaVmWGZyISQJ8NwjiljYwuMFcoxyXh5rtzAPqHDPO99WRljxtJF4WRTlR47mhywv90V + +zvcsL2JsRbvoZv3WynWG/2uAByuQULkvwXgCEkEVhP3BWAFYllGx9ggNtoG8bFKSQDOSrdFnhB/yfty + yAEzkjVISVAgibwvOdEGKUQGOWIW7WUe+UN+DvkRfUQh7XBFFjlVtgHN4qU3lp3ZevRkadEl/icQadCT + rdGbYsX7VWOIvKQ/z4gujscWcqQqXi8/hfGKyCpK3pecrkYK7XA6ryEE4Kw8O2TxvCm8djx5TBw5TGyc + JbdZrxQVEskZ45MViE6wQgy/S+R2CuuYlqkn79YjkXxSzHaOjuIx0VZIiuf98nrZ5J05/F2IvdnJamRy + v/R4OTITxLaWfM8Wmcl2SI7TIzZKiJu0LUFWiwi2ZmmB4AAzhAWYI4ocNCZkUfxNDDNBEpEZaSKtoVrH + vtmZw/GfY4ll7FMb883p3+R4uNmAR8mpnmgz4ipj45c5hkUa6Nf7NewzarxKe3OtU4OnyanOV1rjRKE5 + 9mWbYFu6DBuSZFgbI8OaCBl2JFvgVKktLjW640Hywl1Z1lgTL5PSC69JlmFTlhm25/HYIgscK7PCQ7R5 + T7cbcK3fCdd4zWe7OGY7jXiC5WPE5Q4jztE/HKKfWZlrwrjBDF28Rm2cBQqj2T60w4nh7FshAhpEh7IM + V5OD07YTIUSoeGkn1AZhQjRnW0UG0SazjA62QUww+x/9R1yIguCzEyIw7X8Cj0uirU+J0iKT9j83hbY7 + xR4ZcTokilnHwRaIECKwnwlCfGQI9RaxpSki/cwQRUT7mSMxRI4knjdFIJjn9FMg3pf93NtCEoCjvWSI + 4bHxfjL+LkNerJjFarMI9i2Rxjmb/StNzBYPl7FOssVU0JGmSI2xQE6iQpolXppjRwjhV/B/A4oYz2Sz + L2bwPKlx1ox3rRn3WCA/0hylPLaW6GD7TZNnrSrQYQ25/epUc6ylf9/EZ7k30wxH82mbae8uVKjxKHnT + 4zU6PFGrxWPkrRfLae/Joy5V63CxxoAHaR9PkTccpF/ZlWmBXexf+4t12EM+v4V2bkWKDWbiaVfizDEc + a4oBoj/GjKU5hhIsMZpkg/FkOUuOSX7uTbRCJ/tqfYIFyrifSF2eGSnjs2bJeCqLnEAgl/cmkMf7zI+3 + Yf+Wo5TxRDXjLMEhO8ivevO1WFJkIM/TYZr2erbAZtGO0e+urdRiXQ39bb0Raxr0mK1SY7BIjtYcK9Sk + m6OWnKqBx9YV26K6mDaFtrm2VMfYTINWtk0nOWFPiRwDPGaw0JrH2rAUArANhkvlGKNfn6rVY6bWiNka + PeaqjZgXL2W1OGFNpydW93pjvs8bk4wV+usZexZboibflLGaKapyTHh9M9TlmqMu2wxNOeboyLNCH/3P + WJkWU+V6+m07bOvww/kVWXjjYCtksaG2iBRiry87PCHW+RVr/N5P9SwJwF4K+Hoq4EOIFMuernK4O1tJ + 6Zjvw02A3wl4OCvg5aaCl/hz20UFF6fFNM4OUupnMdN3Ufw1GKwk6PX3Sp2lVIrfbaV9bGBntIIdv7Mz + WnwrALu7WEp1CfRjvQNtJQT6GuDvY5DWHBYQqaf9vDUI9iepCrbj4NUjgoM9gmQwNoJGlk4kg4GlSKVQ + KFJg0VhX0VCL/OjNhe5ozneTUoJVpNqiiAY0lwYhPcgSKRykAqm+hI/Ika7BQJkQgHOwZbgI0/UJkgCc + 5WONROfFdKBRDhzojjJEu/BYbxWP1SLGlSRUb4ZAvQUiba2R7qpCbYCYAWwvCcAboxXYGW6CQyEyPBJn + gldz5fiAA+ejflf8aT4Inx9Jxt1Hi4CrhbhzNRd3n8rC3cfS8c0DMfjkQAD+sNEJv5jW4r0usd6DOd6s + tcLrDHJfYkDyQq4NXuDAe4GD7iV23DfzLfF9dsKflCrwuzo7/L3PE1/PR+Hu7kzggRLcOV8GjmLgqWpe + pxx3rhTg5gPpuHUkAbd3RePmxiB8Ne+Bz6cd8eWUHT4b1+KzUQU+H5fjzhp7YLsbsMsZ2OeEW4cc8Y2Y + 2XlIi3/tU+LjPXJ8sUeNmwftcPuwC24ecME3u1zw2RYn/GuDE/44p8OHfaZ4o1OGN/pl+PEqK/zugAF/ + P+uEzx5xx2eXnfH5ZXt8fUmPby7o8M3DWnxzToMbD4ltHb66YMA3j9jj5hOuuPOMN+4+449bT/jj60d8 + 8cV5f/zpsCd+vN4Wr4zaSALwk11KPN2tw9O9dnimxwXP9buTGLvipSW2eJX39eakHO/NWeGjtSr8dbsd + Pt7pQDji833u+OqwN26cCWB7hQCPRAJPxABPxrKM47NKwI2LsfjsgQj8ZpcnfrDaDm8vM+LVOXs8OazH + 2RYrHK4xxS4S1R3lZliossB2kq1dTXIc6FAzwDfikSlHPD3nhOeXsr7LbfHuWiN+sVWL3++Q4+8L1vhs + pxW+2WOF6/utcPOYDb45pcYXQgB+yg/XX+ZzejsFN3+YhzsfVQB/bgc+GQS+WAJ8RnwyCvxrEvjnFPDH + EeCjHuBHrbj5RgW+fDYPn15MwV9ORuDXe/3x0b4A/PpEJP7Me/r0lWTcej8V+Gk28PMc4Cfcfo/3/qof + bj/B/nBeiy8f0uLrc3p8cZbgMxGzsr950g43nnfGDSECv+qJu6/7Aq8F4e6zfvjqogc+OeWEj/c74YsF + F1xf8GE/E+JvBPtkDO7uigd2JwE7U8AIE9iWgLt7EnDzaDxuXcnA7VfzcfeHRbj1m1Jc/6Qat242Anda + gZttwFdNwJfNuCuEYJb4Vz1u/rUS3/ymAF/+LB3/fDsWf30uBH9k//jDKQ/8cY8Tfr/JFh8t1+GnEwoG + pNb42bASH40zgJox4PfLDPh4swu+3u2DGwd5z6cCcUvM/n7IHzcvsOR57jzqBzwdCDzrT7B8PgB4kff7 + kjfv2Rd33wwG3okDvp+Jux+U4tYHdfjmvRb8481OvP94Ax7eV4B1E1For/JBcY4v8nLjSCyzkJ6XizQh + wBYL4TdJQmpxEpJLkiUxVczMzS5MQ25+PPIKQ1BY5I3yShfUNzmjt98L4+MBGBv2wXCfB4Z6vKSZUx1t + /qiv9UNJhT/yaNcyy6KRXpaI9FIx0zgTacUZSCtM53WFAJyClMJkCd/O3L2X4jmB+38X8fdL1i2hOBmJ + 93B///8JcQ9CYL4vAKfmBCMlxZMkxh5pETpkhatQEKVGaYwWZSRYJbFaFDFozg+XI4tEK83PFGkkTFne + 5shnKQnARGsQg5Yoks8sK5xsMuIlBsAfHfDDp4/448Y1d+B9J/ZlPfBLHceAhlAAv1KybxvZt2nDPuQz + e5vP9jlffHw5CD87FI6nl3pjXyMdd6opGgJlyPcyRZy7BcKldfXNEexniSAfK8IGgZ5y+Lor4eWsos9U + Sv7RzU1NLArAPl5W9GU2kgAcHiiEXzlJo4BSQrivgsRxcc1+X1dL+LvznPTRwleHBqjpt0UKGwYT9FcJ + YiZshJWUKkas/9sSbYJJkuFtDOIf7rXHi9PueGPGDW9Ou+CNSSe8PumM1yZo60ad8Uy/vfQ25YVOHR5o + 1+JoiwL7mm2wp1GJXY1qSczc0qjFVgYBOzucsKPDEZsa9VIKvU1CHO5wgEivt65RhxU1Cgkra5VY26DB + egb5Atu67LCvzwmHh1xwZsxNEoAvsy2vLPXEJdbl7KABuxussL3aCluqVNhQYcDSQj2GMtRoiGLQ6L+4 + 7nN8AEkxn2tsmBkSpFlUaumtV1GKGcEZJP15UdYoZgBVQcLcyACrI12FnkwFgzklRhicL2WAur7NHVu6 + fLCxnUSr0QXzdfYMsnWYKFZJaa7G6TtnSWJXk6BtaXPAdt73Au97R6cj9vaKPxRdJRzk9l4GRnua9djM + QGlNoRnWl1tKbbaP7b6v3wF7hwTssGtAh23dCmxqtcD6Rhl2i5d9Ju3x+LwnHl/mhmeWu+Glld54cYUH + np60xVNjejw7YcCrs0a8s9QO79MXvEc79Bbt0XNDcpysM8H+Cp6nVIY9ZSY426bE+S76lw4dDrcxEG+0 + wcp6ayxvkWOuVY3pe5ht1WB5ux4riKUtOoxWWmGo2AxLSs0wWW2N6To5lvPZr+V5tg/aSwLwuXlfnJt1 + x9kxe5wcVOFkv1Kq81Pz3nhiqS8enw7EQySrRxudsbfaGfuqPbCrwhsbC9wxx+B0iMGSJAD7W6PJ1woN + ASo0BBtRH+6MmkgXVIr1f+8JwIWBdigkxyv01KGIyHfToMBDjRJvHcr9jKgIsENVgEFKB13qJke+sxly + HE2Q62KCPDcT5LjJkO0hQ4GPGSoYZDXFGNCVZoe+XB2Gy8S6LEZMNTtjfiAAK0aCMTcaiOlRf0wu8cZI + vwvtoz0GO/ToayPfY1sNtpP4t6uwpJv9h4HuWJ8G4wx8Jwf03NZioN0Gfe3WGBHfLzFihuNrZsoV46OO + GOzTo7PVBo11DKyqZaiuXEQdt1saLdHfo8XYiCP3d8fstDdmJjwwyfEx1GeP5noFmqqVaK5Wo5kBVgs5 + YSuDkc5GB/S2uWC4yxNjPd4ShmnTl/R6YUyIwMOBmBjlfU1HY5mY3bsuB3v31eOBM/148MwATh/vwdF9 + Tdi3tRSbV6Vi5VQ4lo4FYnLIC5PDXpga8cLsqCeWT3jzN0+smfHChlkvbOR43TDrgVUTHC+s89ywEICd + 2H7OmB13xLSYBT1ph9VLnbBx3g1bV7pj+7w7FlZ6YMcqb+xYG4BdG8Kxe1MsdmxgveaiMcq6NzNQKclm + kJbOoDXNBEW5FmhiUDQyFMi2ZN2mIzE3FYGZ8WCMD/qinwFRb5sThjrdMD7gIwn4K8aCsGYkEGsHWfYF + YFWnP5Y1MHgSaaDznDCQbos+8vu+DHv05bgx8PNEY5ojiuhTEhmQh5C/h7qKQNsCBQlqVGbboaXSE211 + Pmhr8kVTozca6r1RU+3F5+eD8hL65mxPpCc4IS7cgfGUAe52CngYaJM9XFAQG42BqnLMtTRjoqaa46sI + g8RIeamE4dIyDBSXSOV4VTXGa2owXluLsbo6TDQ3Yq67Azvml+Lw1o04uG0ddm9cyXZbgQNbhRi8CocX + 1uDU/s146OgOnD++A5dO7Mb5Yztw+sAmPtdl2LJqhM+wCc21GUhP8UFkhD2CQowIZAwYFGZEUKgBASFa + QichKJSxU5QLYhJ8kJAUiNSMcFTW5KC5uRgdHRUY7K7DZH8zlg22YDXL1X0NWN1dgzXdlVjfVYmNXWXY + 2lWMnZ352N+Zi4Md6bRBSTjWHIOTjVE4XReBBypDcLrUH8eLfXC41At7yzyxvcwFq3P1mKaNnkwVb3ir + MJ7KcZSmx0gax2uaBr3JSnQnKdCTqkRvmgrd/NyZrEJ7shptKRq0ZxjQnmWL1gwxQ1eH2kQlKiUB2FJK + BS1mA5dEW0nbFTxGrAHcVuiK2ix7lCbTtsSRR0SbI028OR9tiexEa+TzWgX0PUUZGpSka1FB1LJOQvht + SNehJo22J0WBQtYrj6WILdN5TFKSHLFxFoiIYJ8KNUEo/XFYqLmEiFBLhIsyzBLRkYt/8MVHmdN3myI5 + htxFiM0FRtSV2qOp0oFgjFpqQHWRmqC95HZLhQNayp3QWEKbme+AIvFHaJIBuckirZstclON7JMapMWx + PklqZKfQfmbaooD3KtatK8oUfwLZSqkDxR+ZhbyvMn4nUsW1lHuho9oXXTVC/GW/Z/8X16kusEdljpHt + wP35jPJSbHg9co0kS+SmWaEgU6SCVqO8QIfqEta5whGNVS60V25oqnNBQ7UTx40DKqtpt2vtUVPrRNvm + ivZ6t8X1s0rs0Zajo40Wz1qNPtZ7IF6OJfFWmEqywaosDTbmG7BQbMSOYj1LFXYW22BfiRWOVdrgoSY1 + Hu8y4vkBB1wbdMLT/Y54uMMWx9uMODnkgVNTgTgyGYAN3U6YrlVjlP55gn5uGY9b2azCqmYF1jbSL9Pe + 7iRnOdRiwKkOO2mG2lmeVwjAxzu0OExutL9Nh50iqwn95gae/74AvIq8YHOfM7b3OWAnIbjOEcaTR3rd + cEis/9vuIJWHu1ykUqzfub/VEXuayAsajNhZb8CuWvIr8g0hAAvsqtdgT4OWPEyNvU0qHkNu1sv6DDvg + 7KgLzo2RN4044DS509E+NQ52qXGoR4cjA444MuKBw2NCAA7AtgE/rO3xwVSrK0ZbhADsg7GWgEUBuGVR + AB6RBGBRhmNJeyj9nZj9KwTgQHS1+qOz5Z74+x8CcCi6ekPR1xeOXm73dIYsponmvt3N/ujhsX3twdJ5 + +tpEOulwDPVGMQa5JwAPJ2N6KBmj3THoawlFdx2Pq/FBr0hBXuMprePeX+WMnnJHtPHZt5APNubp0Jij + RWO2Bs3ZWnSw7M3SYjRLh1VFjlhTxOeRtygAL8uzkdZz2812PsYY6OyIH04Nsl16nKSlTRZajZIAvIG8 + dW2dFqsrNVhRpsBcoRUm88wwVkA+VEo+RF63tEqOeWJNtQIba5TYSixUKqRZwPvLyZdL5NhdZIWFXHNs + TDfFuhRTbMqwwEKOCjvytNhBG7cz34hdBbbYW0ReWOyAPSWO2Floi8255Mjpcik985o0G6znfW0iV9nA + MbEum1w1x8Dv9FidyfqlqrGUNnCWY2VpFu1mlgHDHJcija940bE5lUixQsu3ArAFRnPlmM7hPaRaYiZO + holIGUbCZZhNMCU3M8WyNAue0xzzxEruvzFbju15KuzOV2N/vuZb7KUdEusA/1sA1mJnmQqbcyywQcx4 + ThVrA5rg4TIbSQB+gW31Wo0c7zWo8GGzGj8g3qqzxovlJniBfPVDjq2fcqz+ctgZvybP+M2cDz6a8caP + Jj3xJjnQc8MuuNTrII3jnY1GrCZPmCy2QyefeXUyeR/teWqMjfQyjZhJGxShRECoEr5BKvj6K+DtJ5fg + F6C8BzX8AwU0CAwSArBGgn+g6tt9fAMU8AmUSxBicniMXloHOJSlEH/F7N/7M4qFyCsE4NgEW0kEFmmg + 74u/Ylus/buYAtoBieQaqRku0mzgZG6LtYHDIhj7hVtLQldcgg4ZGQ7IzXaASG1bmmeLikL6MrZ3Uymf + bYkNRqqUWMp+up6xrFiS5xhtydke0UZOeIKc9VnGcM93aqWZeG/2avD9fjV+MqTGr5ao8dtxI/4854o/ + MN76Edv6hUE3HK/XY22hEsOp1miOM0NjkpkkAHdkWqAnm/FAoQUmSq0wQxsr+v/ySjEGlFhVS3tMO7mV + tmmhQY3djIcP0H4er7fEGcYkDzZa4FyTJc6T915okxOMS9qVuMj4UqTUF8/0fDefK/vFvgoLbC+SYUuB + TCr3lJviSJ3ltwLwWZHaudkc54QAzLhJrAd8tV+LF2nz3iC//h656Ev9RlystcT+bBn25slwUAjAVTI8 + 0CLDlX5zPDOuwEtzBrw4a4vnJg1STHV1jOWYEc+M6vHUEi0eYTxzpN4UCxUmWFdqghWMhaZoC3rybVDF + MZKfZILsJFPkCV/HcVFarJVQXqRFZSnjkhINSgvkKCOq2ab1HCtN/K2Z46gxywZ1KZaoSzZBQ7LZ/xKA + 2zNtyF1s0MKxL2a2t/D7tiwF+ujrhsrIg8ULylVGrCnRY1upEXsr7HC43AEHOCYPcawez7TGA3xmj9Fu + PUOf+ALt0ctVHHtVNnijygqvV5nj1RpTvNQgwzXGnc833UOjCV5sMcdrbVZ4m75DEoB7hMCnxyX6moM1 + ItW3DEv5bMbuCcAiO9ZogQ2h5FjUYIb9c5b3PlekxDL6ZZE+dWOlAdsb7LGX/mZ/pwcWWlyxssYBPbyn + KpGiNdwM6SEWSA2TS6l04yO03wrA4WJ9VrGONyGJwERMjArRjOtjo+SIj1UhVQjAaUbkku/lphskcTQj + RYs08r7keAWSE+US0kWa2wydlJK5QKy1Sx8hsqyIJTDKBZ+j3ayjLW3hdjv5XCd5XHeyDXppR3ulF8YZ + ++Xp0U+73UUO1JxjTx7I6yWokES7Ex9rgwRy0cQMLVJpnzNzbAk7jnM94hMViCL/jIyxIMw5xi1oI2wQ + S74Yw7pFkdtEJ4jPvKcUJc+j4jEqxLL+0TG0CbRpYsZzYjzvN1kr3W92mgFZ3E6L533y+knkjymxSqSz + PbKT7ZCRZM/7N9Ae0gaxbUOCrCUEE4EB5vD3lSHQ2wThgaaIDTZFArlpSoQpMqPMGPNYoIJ2oE7MUGdf + Gsigb8ihL8s3x4EKBc41G/FImx0ea7XFUx0GPNdjhxd7OKa6lLjG2PeFdjmebVHiyQYFHiyzxBH6z92Z + JtiaJsP6RBnWRBP0OQtJFjhRbMAFcr8zVeRKWdZYTZ80FyPDsgQZ1qabYEu2KX2lubSe/gPVNrjSrMXz + tBkvkFc9z+s+3WW7KACzHpfbDaybFofoa9bkmWKe43WcPreN7VwRq0ZeFOO7ULGUmhKRgSLDnlqa+Sva + JzRMiWDRTuFyltYIDZEjLMgGEUFWEsQs4OggOWKC2QeD2f+ECMxj7iORfTWJfTaVPiAjwYisRFtpOzGS + +0WIWcSMA9juQgAO8ZIh3Idt72u6OBPY1xzJIUqkhKgIlkFqxPnKEedj/b8FYH/GpYwl8tlvilJU96Ck + TVJKs3hTxUukESZIYPuKMonxRAr7W2aCAjnk0vli5jghXgYVma1yyPuFHiZeIEiNtUY6+1sW456CKAuU + R5qjXqwBnEC7n6PB6gL6iBwl1pEjrE+inU6RYX+WBY4VyvFguRoXqjR4pFKHR1heqdbicoUQgBW4QF5w + kXzqAnnCg7QPJ2kvDpGH7M22xv5C8mjyuQWOq3Ucd5McH0PhJhiMNMVAjBn6+bmP9e+Ps8Qgx8kQ73sk + WcHSGgOJVuiIt0BDrAkqYkxQHG2KHCJLgrkUv2XFMjYhcuKskcMxl8v7zCNErFZGm1DN8dpEW9BOjtUj + CcBGjBXrMFWgwEyhDeZZ91UVWqwhvxFZYdbUGTHPcqJcJa3/25pjjdpMS9RkK1DLmKeSbVTBe6rkOSrp + E+pLaPuLleSs1ugqlvMYG/QXsu73USTHcIkCY5VaTFbrMVtru4hqI+ZElpN6e8y3uWM5bedctwdGyV97 + eP3aAnNUkF9VZfPes2SoyhQwQU2GDHUsW7Mt0J0vZhozli4V68aL9NXeuDifhbcPtkEWH26HaLHmr/jz + WJpFpGMH1SOUZbAviZAnyZKH9eLaum4298RfMft3Ea4SLKXvPFwVLG34vQKeLip4Oqvh4qyAk+P/FoC/ + FX91lhJ0OgvotZYwcNtoXPxNYFH8tfwPAdjNxUISgMW6v2L276IATPgY4eepZ5318PEgmfPR8TcjwkNs + 7wnAHPShHFAkhskkWFkpHAiZOhTl6CUBuCLXFtV5TqgX6Z9znFGdboeSJD3yolXIChEzfy2RFkD4CYHB + Aum+FiihMREC8JqeLKzrzcZETawkAOeSNKZ5mCHRzQSxLotIcLdEhr8GmYF0Bu4q+OvNEKA3R6SdFTLY + drVs94FwBioxOmyMkWNHpAlO0Ag+kW6ON9mBftbmhN+P++Af6yPwzal04OkS4DkhAOfg1hNpuHk5CV+e + jsA/9vrgt+ttJcHqvR5zvNNmgbcaLPEqHf8rDF5eZEd7sYRkvIikgB3xLXbKD0hsfl6lwh9aHPDPYR98 + uS4Wtw9mg8wdt69U4s6z9bjzUj3uvlKHu89X4M5j+cB5/i7qsS8OtzcH4cZKT1xf7owvJvX4fExFyHFz + Xg9scf63AHzYAV8fNeKTI2r8fb81/rHPCp/uU+D6QQNuH3bGjf3O+GqHE/61yRH/XOeEP8zq8YNuM7zS + KsOLHTK8M22Gn2/X4HdHHfC3c274+zkn/POcHT4TAuODWnz1gJpQ4ZuzAvwshODLDrj5hDvwjC9wNQh3 + nwrEjSt++PpiIP5+3Bc/3eSA10gIn+4mYWq3whMdajxJ4vwMg8JrQx54iYHzK2MOeH1Sh7enFfj+nBV+ + tUqBv2014F87bPHJTnt8ud8D14/64uYZf9wVAvCVCOCJaOCpOEkAxuNJuHMlEV+ei8Hv9/niw3UOeGuZ + ES/POuDxISNOtdhgX5UZNhfLCHNsrrDBlloGlM0Mstp1OD5gh/MTznhsxhlPz9jjhTlbvLHKiB9v0eA3 + C3L8bbsQgK1xY68NbgoB+LANvjqhwmcXnfDVMwG4+RqfpxAYf8E+84dG4F9DwNcTwI0p4Pok8M0cy+XA + V8uAj/nd7/n7zztx83s1kgD8j4cT8LvDwfjVTi98tM8Pf3ooDp9cS8eX7yTjzk+SgY8ygF+mAT9LAN6P + YD/xxvXHbPHZQ0p8zmfxxQMafHZai8/OavDFRSO+etQO3zzjhOsvuODGix5S6me8HIw7Twfg6/Ne+PSE + Cz7e64QvtrvimwUf3NoViju7o3F3dwLu7hLiL/vdDl5zK7e3x+LunkhcPxKCby5E4+a1FNx+Pws3fpWP + r/9ehuvf1AK3mnivzbxnll814c5X3L7eKq0PfPvjalz/XRG+/nkmPn47Dn97NhR/uuiN3x93wR/3OOBP + 22zxx416/H6dFn9Yrcaf1urxl822+NsC++hOJ3x5iP3+qDduHGU9T/vj5gN+uP0g2/zhQNy+6I/bl9nv + niCe8uaY9WIfZF/kfeNFJ+AVd9x9wxd33w7D3feS+IxyceuDCtz8QQM+fbcdP32mEU8dL8XO+UQMNQXS + TnkjLzsK2bnpSM/LRmpBMlJFuuSSJGnWb7IkxKYiScyoZZlelEYkIKM4ChmFAcgqdkd+pSsqm9xQ3+GF + mhY3VDW4orreE9V1fqioDUZpRQgKSkKRWxKFzLJ4pJelIL00Daml9wTgIiEAi5m/qf9XATip9D/xrRAs + UkEXL4rAAt8Vfb8LIQCnCBH4OwJwUooHUuPskR5lpIPXoiiWTpYkqyrJlrBDeZxYm512PdACKSRUqV5C + ALZAgY8FiklyK7xlaA2WYShKhvlUMxyoUeJZjqdfHvTDJ4/648ZLbsD37dnvdcB/aYHfqAhrbhNCEP6Z + A/ChB/A9H9x50QufPeaP35wJxyvrfXCaAfYaEtSOMBlKSOiSPa0Q6UUC6W2OUH9LhPgS3xGAPegT3Zzk + cHFR/IcA7Md9Qkj6QgNsECYEYD+ST36O8OU2sSgAK+DvYQMfF0v4ivX2PZUIEsszBKoRymPCSEyjwxUM + BuiDws2RE0pSQBLYn2yJlQXW2FunxpVhJ7zGwP+tWRe8OWmPN8eJCUe8Pu6CV5Y44WqfPR7vNOICbc8D + rTocZTC/t16OXfU22FGvxDYG+ZvqRUpnPXZ1uxDOkgC8rl6k0SOR63LEQqcjNvB3If4uFyKwJAAL8VeP + 9a0kIj2O2NfvisNDJP5j7pIAfHGpFy7NutPWOeJ0vx77mmx4TTl21uuwrc4eK0ttMZKtRkusOQqDZEj1 + I8ENkCEuhD6W9yoE4AQGhInxOiTFMwiLUSOd7ZATaY3CSCEA26CJZFmsq9STrcRgLkkkyZtIp7Wu1Q07 + +gOxvdcfGzo8sarZBbNVBkyUqjFSYIkRBhPTDKZX1mixpcVOEn93dTljT48zDg264cQSL5wc8cKJIXcc + oe842GaUUjeuLTDD+lJLbG/SYnePSD1oh5205wv9BmzrYzt2KrBBEoBNsIOB0wPjjnh0uRcen3PDU7Ou + eH6pB15Y5o6nJ+zw+IgOT43ocW3KFq/POeC9eSd8nz73rRlbPDeixekmcxypY4BWYy4F65f6GKANu+CR + IVec6nfCRgZj83U2WNqkxGyzGtMMlKZbtZhpVWNZu54k04jZJg2GSs3Rmy8jOWWgX2GJqRpraRbwmk4+ + t0F7HJp0xxn2nwdmXPHAmB1ODWtwepDkn3W8POWMy/z90qg3TrQ6Y1cZ+UyeGuvJs9Zm22E+3RYTfDZC + AO5mcNURaINW9tvmYC0aQ+xQF+aE6nBnlIc6o1SkgA52RL6/LfK8Gay4q1HgweDFXYsCL9oALx1KfQwo + 8zWi3I9BPDmhWBc419kU2Y4myCHvyvHgtocJsj1lKPAzQ0WYAi1xRj5/Bwwy6BivscNkkyOm212xbNAP + y5YELM7+HRXCqSeG+13Q322L3jYdOptV6Gpivdl+XU0KdDfboJe+e6BdgcEOJYa7NBjsVPN7Ev0Wawz1 + aHgOO0xPukiC7uS4K4b67dHRqkJDrZkk/FaVL6K6QobGOkt0dzAAGXTE1Lg7ZiZ9MD3ujckxTwwy4G2q + k6OBfaqpRoPmWgNLA1rq7onAzQ7ob3djHTwwRAx2uUvlSL836+CPqdFAzE5HYNnSWKxfl479e6tw+kQL + Th5twpH99dizvRTb1mRizVwslo4FYXrYD+NDXpi4LwCPeWPZhC/mp7yxasYX62Z9sH6ZD9bNeWHVhCuW + jzhhbthBwuwSB0wvseXxOkwO67B8wlZaJ3nDrBM2zThh8xyx1BVbVnhjYU0Qdm2IxK5NCdi+JgHz48Ho + a3FGXYmYPWGF8kJz1FVao7/LCSuWRmL1fAxWsVw+HYa58UBMDfnwvu35PHToa7PDEo7HmQFPLBv2xuph + 1nMwABsGArCuJwjzTb6YLGcb5TigK0mLtjg1OhL06Ex1RFeWC1oyXVCT6oD8KBWS/M0ZhJujIFaJilQ9 + 6vIcJAGsrdabbe6Fhhp31Nd6oq7aC7VVfqgq9UNhrpckAMeH2yNUEoAZL+mVCHN3QmF8NJbUVHKMtXI8 + 1WBIzP4VAnBZqYTh0hKOt0IMlRRjrKqSsUQNJmtrMV5fh+m2Zizr68L6qXFsmZ/FmpkR3ncHxntbMNHf + SrRgeqANS0e7sWq6H+uWDmHDsiVYOzuI+Ylu7lePvtZS1FekIjs1COHBtvD3VcPbRwUvUTL28/ZnzObP + 2I3w8GO856eCX5ARoZEuiIzxREJyECqqs9DZXY2pmR5sWDuJPVvncXjrChzfvBwnNs7ixNopnFw7gdNr + xnB29RI8uLIfD8134fyyNlyca8DlmSo8NlmKJ8aL8MxYIa4O5uKpnnQ82pGEh9qicaDKG9tLnSUBeCZd + gclk68UUX5IIrMdIqhaDDNi7E5VoT5CjPZH2I0mOjkQ52hjQN8fTjiQx0E7ToyPTFu0ZRjSn6lDP/Wv4 + e1WCDaoSFRIq4m1QnaxGfaYRXSVu6Kvw5rY9SpNoY+LEHyDmUuq0dPEHQpINclOVyE1nzJihQVGaBqUi + HXSaFtVpatTyc2WaEsVChEiyRo5IN8h6p/GYRH5eFIBNEBpmgrAwM4SHmSM83AJR4eQJ4ZYsrREdYYnY + SAtCCMCLM4DzxIzjfCNqpRnAjmiudkRDuRHVxRpJBG6g/Woqs0NTqQPqi2gzcx1QkGKLnERyJPKiXDEL + JMmAJPrEhCgxG0aJtCQNctKMyOO9CiE4P8OAgnQxU1iHXN57Ie+pRKwBXMDrlbG/Vwrh1wetlV68lhtq + Cx0YKxtRxti5mM+igPecI8TfBAtkJJgjO2VRAC7J0aCiQLwFb4+GCic0Vrmy/m60Wa60YYyxqxljV9uj + qsYBtfcF4Do3dFTdE4Cz9OhiXXqTNejlWO3nsx2Ot8Z4giWW03+vz9ViocSIXaUGiDS0e0rkOMj49mS1 + HJdatLjaa49XyHNeGnTA1X47XCKfOdtth3NjXjg3G4RjE370vbRX5CXj5VaYpo9bKvwjuc6KRhusJtfZ + UK/AQoMGB1oNONZhxAPd9jhzbwbwSdrpo8RB+s/dLRps5TU3tBqxlrZoJbnBqi4HbBn4TwH48D0BWIi9 + +1rtsL/NXhKCRSmwt9leEn8XavXYTp6xs0Yn4b4AvJP8SmAXuddu+uP9bVoc7jbg5JADztD+nh11lsTg + 4/06HOxSYk+rHPva1TjItjg87I5DoyIFtD+2D/hjXa8vpsh5/k8C8Jgk/C4KwMOt4RgSYq0QbQkh4nYL + EbgtcDH9s0AHt0Ua6O4QCT09Yeju4nZ7oPSyTFu9N9qJTm53NfsTfrTX/uhpC8KAJAJHY7Q/HlPDSZgZ + SsB4TzSG28PRx326a0QKci/013lioNYdvVXO6ORYaGHfbyg0oD6P4ztPi/psDRqzadNz2GeydBjNNmCl + WE+82AHzuToszZZjaY4V1tKv7G6yw/Eedzy4xAdnBj3I1xwZZ7Pd2xZnAAseu5rtvbpC/R8C8HiBBaZK + bTBdocCyahXm6YvX1KrIhTXYJsDPYhawWIt6T4kCu4qtsS2X3C7dHGtSzLEhwwJbc9VY4LhYyDdgh0CB + UcLOQjvsKLbH9kIjNuTy+uk2mE+2wEqOp7WZamzgvQnhdx3HxRre3+p0LVbSFq2g/Zmj/Znm9myWAeP8 + vTdFiVbaxoZ4S2lNvPpECzQnmqIzxQL9GeYYz7XGTC55YKoFZuNlmIqRYTLaBMv5uxB9V6RzjKWaYz7F + FCsZK23MtJEE4D33BOCDef9nAXhPtR57KtlvixTc3xJ7c81xosgaF6vVeKpWgxcYc71GvNugxA/Ioz7g + uHmXY+71anO8VmWOH5Fn/WzACR+NuOD35Bh/WhGE384H46ez/nh7wgsvjLjjkQEXnOiwx45GOyzn2B/K + NaCZ91tG254bo0AqbV1MNGOoSMZF4Wr4hy76Ng8f+jZv+jWWPvRtvn5qCX7+Ggn+AUIA1kkQgvC3ArAQ + jhmPCQgBOCLWgMgEWykVtBB/Q3gNMQNY4LsCsIC0FjBj1cgYHaIYn8aQawgBOD7ZTkr5nCSE4FR7SQwW + vwkBOJyIIS9JTBJriooZwPYoJFctFjY3n/6mQIW6QnLYQvJLkZ6cdmJtA+OwFlscJUc62+WCi7Q9j3fa + 4tlOHa6Rj77aq8PbfVp80K/GT4eU+K8lKvxuVI8/kYv9fs4TP5xww/P9zjguxORCOf2sJVriTdDC/tfK + /tCWbobODBkG80wwWswxQHs5WyXnGFAyvuM4aSDHb+HYYWy3nc91J3myeGH4eKMlTtWZ4UyTpYSzYgZv + qw0epk16uEON850Gac3Oi7Sr52mLT4rU9hUW7FMyLIjZvyUy7K80w7EGS5xstsKZFqtvBeAHW8xxsc0C + j3XLcXVAi5eGjHh9iT3eES8x99vicq0lDgvxl+c5Rm59rFrGOshwqccUT4/I8eKMXsqm9MIkMWXAc+N6 + PDemxzOjOkKDJ4ZVeLDDEkdbLGgvLLGFfH81OeZwmRJ1Gab0e4wtOEaEAFyQq0QRx0QRn09xgRZlxfSN + hSp+Rz+YR55RpEJjiQ4tpXq0FtBOZSlQn2qF+iRTxqPm3wrAHd8RgFv4XXOaNRrTrNDI7SZ+112oQT/P + MVxlJIe0wyr2/y2MiXdV0I+U08ewDgd47qM8xwMZlngs3wZXi2xwrVSJlyuVeKXCmrDEqxXmeKnKFNfq + ZHi+XoZnG+6B29eazL4VgN/uM+DVbiOu0s9dYox4qNYKG8tMsPQ7M4CHciwwIkQG3utYPn1pPnkb732a + 380VKDHPe19XrsfmGlvsbHLGXsbWCy3uWE2f35etQnWc5X8KwBFKxEeovxWAw8I5rjiWwyNViIpSSogW + AjD5TGykEICVSBECcIoQRPXIJpfJIlcUAnB6opq/qQillIkllXYik3YzN8eWz8wOBdl66YW3EtrTMtrQ + KqKGnK2ZvKOF3KYzhfFeikJ6ybA3Q4l+cpo++huRIroz34H+xp7H6ZEZq0BcuDk5nDnHvQ3ieVwS+VF6 + thFptMlCzI0mp4wgpwwntwsXJRERa4noBGtExlshgojidhSPF0JwNPlpdKwNbQd/j+bvUeSI9wTglETe + W6oRmbxnMfs5ifYuPsKKsJT+90mP1yAz2Z5czwHJIhvBPQE4KMhaQmCgNfz9TOHrJYOvx+JSO7FBMiSH + m0qpcovpMyrT5KhlP6rPsEJruin60mSYyzHDpkJL7KPdOdNoxIVmjrNmIx5t1eMpjuVnOzV4ptUaTzea + 4ZkmCzxVb40rNVY4VWSKA9km2JFugq2p3xGAI2TYlmCKI/QlZ6udcLKCPjDLWkr/LARg8XLSSu6/KdNE + epFqX5E5jpVZ4OFahZT2+VnyGjEL+Crtx5Pkd4+SD11u0eFcI/sq+7pYr3gDfdMycoUe8WxjNSiI0CIp + UIFIX2uEE2KSRViwDWGF4FAbBIayjcIWERIiRHP+dk8AjuR+UUFyRAezH4qJFiEKxIQpv0UC+21CpBpJ + 9ANC+E2jzU8WLxQznkyItEFsmDjeirGhCYK9F2cBSzOBvU0Q7WOOZJ5XCMBJwUSgSpr9+10BOIb7xvnK + kCjWAWZfK2R/Fi9hChSTB+QnqSQBWIi9QviV0kCzTI42RQrjmHTGTBkcC2J9bAnslxkcH+kJKqSRX6fG + LQrAAhnscwVEJftfE3l3L3n+DDmWEIDX5SjJZSyxKZnPL9UE+7OtcLxYiQfLtTgvibwsK1S4xO2LQgAW + 22UaXCrX4HyJFmdpH07QXhzOleMQ/dlh2rC9RXbYQn6zgvVbEm6CHvbHnjAZuhmD9TAu6ouxkgTgAdZl + gPHbMMfzAOO+XvbVFsZXVexPpVEyFPJe82LN2I/NpVm/mUS2WD4qTkAIwGIWsAK58UoUsr0kAThdhyaO + UyEAd5NLDhcZ6ed0GKefnSJ/EdkMVlRosKpKi1XVOqysMWKuSocxfn9fAK7Ppp3PFqn+NSjnOcrpC8po + r8uJGvECUAHj0wIrdBDdIj0zy758guUAzzFcosQo22e8UocZnl9gttqAadr6mVp7zDQ6YarZifzcGX11 + RrSWMo7NMWEcJkMFIUohAFfST39XAO5hO4/QBk+VkB/ynrY3e+Hy8iy8d7D9ngAcamBnNrAzi1LMCDZC + rPcrZv96uVnB09UCnixF6mUh8LqKmb5OQujltqMQgPmbK4mVuxoezkp+r+R+Krg7qeDsKIfTt+v43heA + vzP7VwjAekvotBYSpFnA92YEGwmR/tnBzorHW0qQBGBnC0mQXhSAjZIAHOQvRGAj66yHP+HndV8Avrf+ + 7z0BOCZMgQTxx3i8msE8nXSeLUppzMsJ8fa0EIBrchxRKYm/WuTHcj86nDw6oFwa0CwahCwaBIGcQBuU + x+glAXi+IxXzbakYq4qW1gAuCmWQ7WeNNC9zJHksIs3HBtlB/J71SfRUIUBnigC9KSLtGDi7WqOGJLSP + ZHWW19rAzr6DnfkBkoxn863xXq0B/z3ggX/Mh+DzhVjcfDATuFoMvHBfAE7F9Uvx+PxkCP66ywO/XqPH + j8es8S7JzjvtFniTxvjVGku8XmVDsq0hdHi1SoPXSGbeLrfBD0nkfkmC/scOJ/xrzA9fb4rH7aM5wKUK + nrsat6814M4bTcDbLcBr9cCzYlZwIfBQLnA0FdgZibsb/HFz3g1fTdniyzEtPh9V4JsZFbDBQUoBjX3O + uC0JwAZ8fESFv+63xN/2mOPjvVb4ar8WNw864Jt9jvh8hyM+3uSIf6x1wm+n9Hivwwwvkbi90CbDayMm + +GC9Ej/fY4vfHnfGH0854s+nbPHPU3p8cpLXPKHGlycV+PKUHN+cVuPrB3VsFwfcftwDeNqPbRYMPBWI + W1f8cP1iID45FYBfbnHGm1MqOhNLOhASyjalJH480+uEF0c88fKoB+GAl8fVeH3KBt+ftcYvVyjw1006 + /Gu7EZ/tsMNX+1zxzREv3Drjh7sPixnA4cATUbxW/KIA/EQi7j6WjK8ejsMfDwbghxsc8cacES9OOeDK + oBFHm2wYOJpiXaEM64otSZjEW8Uakk49dtK5Huq1k4L7SxNOeGzSHk+zjV9cxrbZIMdHW23wF0kAtsGt + /Urc3m+DG4ds2BYqfH7ZBV89F4Sbb8Th7o/yFlM//70D+HIcuDUL3JkjWN5awXIl+ACBz2eAv4wA/9WD + m+/W4/OrefjzA9H4aK8ffr7dDb/c64O/Xk7EV6/n4MYHmbj7qyzg19nAr5KBn8YC74fh9kse+PKKHh+f + leOT00p8ekqNT/hsPuEz+fQhPb64bIcvn3DC18+44PpzHrj1gg9wLRh3ngzENw/74LPjbvjXHmd8zut9 + teCDm0IA3hOD27sTcGtnIm4vpODuthRgawKwPRK3dwXhq4O++PxsIL56Oho33kjC1z/KxBe/L8DXn1Tg + 7he1wFd1izOAv2rEHSEE3xBpoVtx99Na3PxjMa7/Mgefvp2Afz4Xgb9e8mW/csNfDjjib7vs8bcdtvj7 + gi0+2eWAL/a54MujHvjihDe+JiTBl89dQGzfeID1fZDb5/xx+2GWF72BK8Rj7INPuOLuU04cPxwTz9sB + L4q1kL1w560g3H4nFrffS8etHxTj1gc1+Or7Lfj1iy145aFqHNuQgdmeMAZ/3sjPCkNObgoy8jIlATi5 + KBHJJSKdchqSilIWBeAisZ2G1KIMpBanIq04EemFkUgr9EdGiSdyK9xQWOuJ/Gp35FcQ5d4oKPdHflkY + 8oojkVsUjazieGSWJiG9JA3ppTzPfQGYSOG5U4QAXCTSQP8fBOD/gf8QgIn7AnAif/ufEPtLs5iFCFwU + z3tcFIDjk9yQFGOP1GhbOnBblCTaoYoBdK1AmhOqkh2QH0FCE2iJFB8zSQDO8bVCkZ8NSn0tUEni1BIs + Q3+kDNMkoNtKGCCN2eMn+33w8WMBuC7E+A/uCcC/1gK/UxM2wH9bAx/x8y/424/cgHc9cfc1T3z1DPvI + hXC8u9MPF0eM2FpBRy7eQgswRbo3ybyXFcK9zRDmb44QP0uCBFy8UOWmgIej8J1yOH9XAHYnMfdVItRP + gXBBSolwHiNE33B+v4j/FIB93Gzg56lEoFjHXxKAxRuL1ogJJ5GLtkEGiVQhCWBLggWm89TYXKnF0VYD + nhh1kQTgN2ec8OakEW+O2+GNUXu8OrL4h+kz3ba0g0Y83KLH6SYtDtcpsVuk5qqxxtYaG2wiAV9fq8TG + Zh129jhL2MDgWPxxtqnFgB1iXbVuJ2ziOcTM3+U1cqzgMet4LrFe1XrWYXuvI/YNuOHgkBtOjXni3LQn + Lsx54eKsGx6ecJAE4KOdWhxs02F/uz12tzpjXZUDxnPV6Ei0RBnJYQ6fZyqRFGYqpYBOjGEgFEcSHq+T + ROBkSQBWIofBU0EUySxJbmOKGu0ZDOgYfPaTtPVlWmCM5HVNkwt2DQRJIvDGLm+sYrA6XaknEVRiOM8c + g1kyjOaZYVmFApuaGMzyHvf2uOJAvxuOL/HEmTFfPDDuhzOjXjg14IpjnWINPx02FlvQpltgc50aOzpt + 2S7sK71GbOrVYUO3Cus72JZt1ljfYoEtrVY4MeqIR5Z64bEZdzw67oQnxp1p7134zOzwyJAWjw7p8Mw4 + 7f+sA95Z4Ybvr/bC28vd8Dzb7OEeFc7ynGcYiJ1h2z026o4nJ3zw6JgPTrOd19baYCmf32y9EtNi1jqf + 33SLEIEZJDGgWn5PAB4uJ+GmLxosNsFYuRCAbaS00Gu6DdgySLI+6oQjE2IdYwecGNHhxLCa59fggWEt + HlxixEMiJWW/C/bV8P5JjlekWGAu0QrTbP9JBrAjMUpJAO4NVaKLgVQn+VJrmAGNYXaoC3dCZZjTYurn + EEcUBtlzHOuR5ckg312FXA8Ncj21yBOpoD3EjGA9ir0MKPERAjA5nRf5mqs5cpxNkStm/3qYIdvTBNkM + ngoDzVAVqUBLooGBvBOWVDhios4BUy0umO7ywOygL6aHfDE57IuxJV4YGXTHQK8LetoZ8Ddr0VqvQjvR + xvZrq1cQcnQwyO1ssEZXow16mpXobuE9NSvQ1abCYI8B42yL6Ul3zM54YWbSEyNDLuhs16Gx3vI/BODK + MpJ2crSOVi0G+xwxOerJ/f0wPe7DbS/WwxmNdSo01CjRWKNFkxCAa41orrMljGhvtEdPqwv62l3RSwgx + eLDTHSN9XhhfsigAT0+EYtlsFDasScH+3SU4caQWh/dVYu9CMbaty8T6ZQmYnwzDzBI/TA5635v964MZ + 9p/ZCV8sm/TF/LQvVsz4Y/WsL9bM+WD1tBfmx1wxN+yEmUEGKoN2mBqywwTH7wj74kiPAjPsG8tGDFg1 + bo81tLlraW/WTDpiPcf6pnkfbF8dgh3rY7BzXQI2LI3CaK8H2mrZ3rUqtNBudLHtxwddsW5FJDasisHa + 5RFYMRuMOY63ySFPDHYY2f5qdDWp0d+mx1iXA2b7XLFq0Avr+EyFALyhLxgr29gOlR4YyLZDK/thbbgV + 6tkfmuINaE2xR0eOBzrzvdCY6YySOA1KGSfUpBtRn2mHlgJHdFR4orXaEy3VHmisckd9jQfq+Lm+yg81 + ZX4o/lYAtmOQr4c7Yx53vQJh7uzLSTEYravCCkkArpYE4GFipLSEKGYAWITBwgKpHK2swER1DSbFLOD6 + Osy0N2GurwNz/T0Y7WxBS1UxSrKTkZscTdBfC6REoSgjHmW5CagqTEEV/XNFfjL3i0dOSjjS4vwZ67kg + kONEZGpycbaEiytjKldue1jDxZOfJVjB1dsa7vQzXv5iNrAdgsOdERXng9LKdAwuacbWheU4e3YvHr98 + HFcvncALF47h2sOH8eLZg3jp7H68fHo3XjmxHS8f3YBXDq/Gy/uW4tU9k3ht5xK8tb0fb2/txvvEDzZ2 + 4r3VTXh9aRWeHsvBwTpfbC1zkgTguXQ5ppItMZFijbEUJcZStVjCYH1A/DGXqODzs0YTA//meAErNDHQ + r2Pc1BBvg+YUrSQCCzQna1DPQL9BiL2pGjQy7hNoSNPyOduiLd8ZA5W+WFIbgMYse5Qk0H7EWiJDpE2L + oC8X6cOS5FKKNDGrV6y9JmbKFrEepfyugnUTqZ/FOsGF98TQ7BT63lSbRQE4+Z4AHGUizQKOjLSUIGZ0 + REdaLyKC298KwJaMUc2REmeJnFQFinP0qC60Q325I1prXNBc5Yg6aRawFnXFxnuwQ02hA0pFCsRkI7Lv + CcBZRGq8FvFR4qUwa8RFiTXxyJGSDdKaeblp3I/tcH8WQE6iGgVso5JMParY3xtL3NBc5iEJwU2l7O9F + 5Fm5jJnFi9Nsi4JkBXITrZGVaIHMePP/FIBzNagoFCnQ7NFQ6YSmatdvIQnANa6oFqmga5y4zd/rXDje + XdFW4Yy2Io63LD06WK+uRA26id54OQZjrTESa465VDnW56glAXhvhS0OVOhxgLHs0Qo5zpJvPN5mwIv9 + jLHIZ16hv3quz4jHuvW4OOCAy7RfF5cG0Xf5YHOHreQPJ8ndZshtZmutsayOvq7OCitqrCQBWKzdv4/n + O0Ibc7rLDqc7yYm6tDhFH3tCzAKm79zbosY22ijBbda222Flhz1Wcd8tA45Y6P+3AHyQNulQtzP2t4oM + IUbsaSSaCLFNCPF3R50Qf4WYyPtjKXBfAF4gh9hOmyggXsTb06LBwU4djvbb49QwOdMSZ5wYsMOhHi32 + tMmxs9EKu0T2li5bHKT9PLDEG7vo27b2+dCXe0sC8Mj/EIBHW8PvzfyNlDDUGoGBtjD6lCAJQvjtJrqE + 6NsWsIh7AnB75yLEesDic1uLH1rqvdhvPWjHadO53d7ggw6BRh/aa1/0tgZjoCOMNj+GvjeB/iMWEz0R + GBEpp5v5e50nehs80F/viYG6RQG4vcIeTcUG1BUaUJvPcSAEYPa3xhwd2jheetg/R7ONWF7ohFUcO0uz + 1ZjNsMRcljnWFIkXCgW3dMaZAQ+cFmm5O/k86DcWiG8FYLb/qgo1VpR+ZwZwHrlikRXGGTtMldtgvk6D + tUL8Is/b0qDFthoVFirl0izgXTxuR7EcW/KssD7DHKtEykTxp2mOit/psJXYkn8P4nM+uVUReWGBDmvJ + TedFeuYkM3InIQArpVnAQgAW4u+qTC1WpmuwIkOL+QwNbSU5HL+byjLwvnn/6Wq0JtlIaS+riZo4M9pK + E3TxfAPp5pjMtsZcrhzL0y2wPMUUy5NMMU+Otj5XpFdXYE2mNVamWWJFqhnWsN5CAF7gb3sYQ3xXABbr + 9u0qUWNniQY7y9nnqvXYX23A/gpydn4+WqbGuSodHmG/fqZBj2ts19eJ95s1+CE50E86DfiwTYv3G+X4 + HnnUj/j5ZxyjkgDMcfqn+RD8dj4UP54NwltjXnhuyB2Xesmt2xyxvd4e06xDF21wLe2CSOefE6NCaqwG + 0dEqhIarEEBe6ROslsRfV8ZeHmIii48K3r4a+PppJfjRxwn4B+j/HwvAUQn0798RgO9DSvMcq2esai8h + jjGqJPzGGyVBWIi/cbTJQvwVSEixkyBEYCEAR0QppBmOYvZvaootsjMcpBd1CmjXC9mfS9nPK/N5vwVy + tBQpMFiupt0SAjDjsBYj+zR5N+OSS7Q/j9NeCeHuWocKr/VqJQH4wwE1fjp4XwDW4g+T9vjNjCt+QD7/ + bI8djrM/r2dfH+Fzb483QXuKJdrTRIpic0kA7suWYbjQFOOljCcrha3kGKnn9Wm7Nor1zjl27gvAe5tt + cLTREifqLXCqyRKnuX1GEoDleEgSgDV4mH3gQocQgW1Z2uFMgwZHqy1xoNxUymK0T6R/rrHACR53qtUa + ZxgfnWm2wJkWIQBb4EK7Fe26ElcH9Hhx0IhXibeWOOLlXsav7E8PlJvhVJUpTteY4ESNjOeX4XyHCZ4c + ssa1SS1enOZxU4t4flyL58a0uDqqwbOjKlwdU+HxESUuDKtwckCF/X0GbGY9RyvJv7PN6PvE+r9m9KPW + yM1SII82Jj9HiwIhBHMMF+QJUfjfAnCTEH/LyDMLyd05xhozxAxfti9LSfwlOu+VkgCcYYXGVEvUc1zW + pVqgPp2xAZ99T7EGA/R3E1W2mCcP2FhqiwXaQzELeA/Hw4FsJY7Q/57mea7kK/B0kQ2eL1XiWoUSL5Zb + 4SXGcy9VmOMa2+V5tsnzdYvC7318VwD+Xq8erzLme1YSgFU40kB7xmPni80wlW8qrQE8lCNSystZ2mDk + Hsb4eUK8WM3tZQVKrKR9WMc6b6l1oD9yx0KzhyQAD9Bm18ZbokASgM2RGmazKABHqhEjZv4S/xaAlYjk + +BCIFjOBWcZE2iAuRoEUkfY4xYAs8j2BjFQd0sUM4CQ1ksn9/g0FOZka2eQWBTm2yKetLKDtLKbtLKM9 + rSIXquXvImtMC3lQhwS2Oe1pj7S+PO0Nn3FHHnljrj1qOTaLUnRII6+KDjFBWKiJNLtXzOiN5/lSaI+T + eP7YBDntggXtgznCIs0QFm2xiBjywjgrhJPrhYnfWYaTe0og7wyLskQoOWGYBCtE8X4TGJekJOqRRp6X + nmSQ+JwQf2NCzREbTu7Idkkj58tkPJOW/D8E4EArCQGBlvD3M4EfY2J/LxkiA0yQyLpnsT6lyfQbvNeG + LBX5sQ25siVaU03QmyrDMvq/LWVy9jUVbYUBZ+lHH6LtudikwaPkIk+Sazwu1vuuM1lEjRnOV5jhaJ5Y + J1aGrSkybCY2cuysi5NhQ8yiAHwwV4mTZbY4QS4nBOCVQgCOlWGSWM5912eaYFuuOXbnm+FQEcc0+/GF + BgWepO14gTzvOcbLIg30FXKxi4wDH6xT4lCZFf2SDbaLmfLlDhjOMqKW/qEgRIkkH7avJ5+FF+HLdg6w + QEiAOQKDzOEfbEE7b0mwrUJsEHJPHF4UgOWIICJ5DoFo+gOB+wJwHPvqogisQXK0VkIifUKCJAAr+JsS + saE2384C/q4AHOVjhsRA9v8g7hfIMUC/k/BdAdjHFHHShAcTpISZITPWCsXsl2Xi5QWiVKQ2T/5PATiB + 8YtAMuOJ5GgrpLEfpjN2ymQslEGIZVBT4jh+YuXSDHJRpsTa0IcyfuHnQn6uiVegjecdSFNxPOuwmpxr + UQC25rM0xUK6Gfbl2uB4sQqn6fPPlmtwToKKz179LS6VaXGxVIuHitR4gHbsBG3EUdrIo8V6HGKMIDKh + bCBvm40jz+dY6gyUoS1EhvYwU3TSPvRKAjDB+G4gQSGhl+Osk3FgfYwZyiNlKBYCsFhTnGMph/suzvy1 + loTfrDgbQpTiM+MWxnmLArAG1ekGNLF/tGbr0MnxPVhgwBLa6ZFCGynz3wy53DLew3JymXliWZUQZvUY + I7/pLaQvzrFCfbZcEoArc/lM6KeFry7mfZbkqVBOP1CTa42GXI4l9uMOjqPOXAv03ENfvg0G6c+FCDxC + nz5ZqZMg/n8UmR6mau0xUWePkXo7DJL3dFaS8+Zboow+uYTjqjRdRvslQwXxPwXgPl57lP5nmjZ4Gdt6 + R5MXHl2ahe8faIcsNtyWRoPEJNIBSTFOiItwYie3RRBJkq+7NdyczeDqZLpYOltIYq+LmPXrbCOVAm4u + cniKdQ3FmldiPUNnse4v4aiU1v51tLf+DwFYEnfvzQI2GhbFYGkW8D0BWEBKA227KBw7iz/LneWL13Ow + 4Pn/LQDfTwEthGCx3m+gL0mcDwmc9/8WgCNJBuMiVFJqSJE2oYAPvIxBc2WxI6qI2iIX1BS4oCrLASXJ + OpJJBv2RDOg5cAtIKAvplPI4yHM54PNCFMgnKkgG+0oCMdscj+mGOJKDSLSke6A8yohiXi/bzwrpPovI + DuBxwRrkhxqR7K1CkN6UkCHKzgwZbpao8VOijwZnOtwK6+gcdtI4PpxpgZfZIX7c7og/TQbgy40xuHEg + EXfO5wDPFgHXCnHn2SzcfjwVNy7G4ZNjAfjTggs+WqnGB6Nm+F6PDG93mOH1Zjr1OjETWIF3mwyELbf1 + eKNahXeq5fhxvQq/atTizz3O+HTKHze2JuLuiTzgShXuPFOLu680Am+1AO+2AW82Ac9XAk+UAA8XAMcy + gN0xwMZA3J73wPVpB3w9pseXS5T4ZkKJuyIN9A7X/xSAD6vwl30W+PNOE/x9lxk+26vE1/uN+GqfPT7b + 6YiPNzviH2uc8GuSsu+1muIFEpOrzSQrvJ83l9rg+1t0+NleR/zmqDN+d8QefzlixD8O6/DJERU+PyLH + 58dt8NVJnvOsHjcu2OPOo+7/FoCfZD2v+PH7QHx+JhD/vc0F78yQKA/K8USnNR4lQX2sXS8JwC8Me0op + oK/2G/BMP0njsAW+PyvHR6vU+OsmPT7ZZovPF+zw9T4XfHPEE7dP/x8E4KcSuJ2Au0+k4OvzCfjToSD8 + cKMTXp014LkJO1zo1+MgyerWMhOsyjfBSgaYq8qVWFujw6ZGI7aT2O/ttsfxIWc8uMQBl0bs8KhIVTOt + xuurLPHTzVb4y4IcX+xS4c5BDaHA9cMKfHZSgy+uuOPLF0Jw4y3W4RfFwJ/5HD/pWZz1e3cpAIFl3F7F + cs2iCPzVHO7+Ywx3f9OPG+824NOnc/CbY2H48VY3/HizC36+2xN/uhiLr9/Mw52fsQ/+juf9LfvBR6nA + T4QAHIob11zx2SN6/P20HP88ocQnJzT4+JgaH7P85wM6fHqB7XbFCV8+4YpvnvbAjWd8cPfZYLZRMK4/ + 5IfPj3rgk92u+HS7B75c8MPNPRG4sy8ON3byuguxuL4tDre2xOLO5kjc2RqMGzt82Yc88K+TnvjsShC+ + uhaFL95NxKe/ysCXfy7CrX+U486nVcAXDZIAfPdrtoOYASzNAq7Hnb+U4tZHefjynSR8+kIU/vWIP/5x + xgN/O+SMjw844dODzvjysDtunvDGHZHmm8/4zsVw3LnAOl8kzgfyuwDcPifWgPbF9Qd9JNx8yAc3Hvbk + vsRlN9y94ow7jzuwT9jj7lU73HnBAXdedcftN/xx6+1I3Ho3BTffz8PND8pw/YMm/PXNdrx3pR7nd+Vj + 7Wg0Wsp9UZgVhNyceGTkpUoCsBBepfVzS9K5zVKgkNuFmUgtzEFqURbSCtOQXiBm04Zz2x/pRd7IKvVG + ZqkXssR2sT8RjOyiKGQXxLFMRGZRirTGcHpxhpT+WSClJENCcnG6dM1v1+79fykAfysE3/v+u1g85t8C + cEphFFJyQhgUuyE20hbJtK15iQ503M6oyXRFfYYLGjLdUZPmgjwSsHQS3BQfC6R5myOPNrckiA6YxKoq + wBRNQTJ0hcswSmK5Ns8MDw8Z8MFub/zj0UB8/ao3bn/ohLsi3fNvDMDvtQTt169tFmcE/9KO/Zt27H3a + krdo56754OMnI/CTI0F4aqkD9jUpMMlguSbIBJkklTHelojwNUO4vxlC/a2ktM7BXkIAlsPdQfgyG0kA + dnFXE0q4e9jQh6kQJqV7Xkz9vCj+CjAIEvBWfisA+7paSQKwL88ZSN8RGqAkkbVGBMl9XJg10qOskEsS + WMWAZIiEfl2lPfY1O+BsjyOemfDA60u98MaME96YMOK1USNeHraVxN/ne+3wZLsRl+knzpLciz8F9lcp + saNcrHNmhY2V9E9VNlhDvyFSOS90O0oQ2+tIvjeKtdS6HbCT9nNLhy1W1iuwvNYGK+rkWNOslmb/CggB + eM+gGw4Mu+HkmBcenPaSBOALM66SAHxmUI9TDLqP99rjaK8LDvV6YEuDs/SnT3eKNaqjTFASZUr/TP8Z + YYYUBknJsQokxmsQH6dloETyTcIvBODsaDl9uDUqSfoakpWSADzAQL2HQXZXmimGC1i/Bkds7fXDlm5f + rG1zw3ISrokyjfRbfxYDIBKtPhKsKdrnjbTLu3tcsF/M6BnyxOkxH5yb9MPDUwE4N+GNB4fd8UCvM461 + 22N7hRxri8yxXqyRJWaYdDJo79ZjbbcGKzuUWN3OdmS5od0GG1uscXjIHudnPPHItAcuDNvj4pAdrow4 + 4PKQLX0Fg60BIewa8fy0I95e5Y331wfge6v9cG3OA1dGHekfnHBp1JWlOx4b9+F33nhoyB2H6ENW8tnN + VDIwr1Viqk6LyUYSzHsisBCAl/G5z4gZwBWLAvBAiQlG+cynGVAt5z5reozY1G/EAuu0e9DI+9fiyACD + wUGS/yENoeVzY78ZsMcZ9rOdZby/VFOSehnGSNCHGbgsYSA7wmcyzMBoIILPIEyNrgg9WsPt0Bhuj7oI + Z5SHOaIoyF4Sf3PJ7TK8NUjjGMkgsjwY5HiRWwkR2F2DAncdCt2FCKxHuVgn2E+NAk9r5Llx/LubIUfM + /mWQm8WAqyDIlP3GBi0pegwUumCs2hWTDW6Y7vDCTI8Ppvt9MD7gjdEhLwwPemKw3w09XWLtXVu0ki81 + st2ahABbrSDkaOQ4aKq2QlOlJZqrrNBSY4NW9veOJhU623QY6HXA6LArpic8MTfrh9lpX4yNeKC7yxbN + jQwYqkxRWUHSTpSXyvjZHK0cI7099hgf8cb0pD8m2bfEdj/HQAPHYn2NGg21OjQyAG+ss0UTgwKBtgYH + dDY7o6vVRUJPqysGOtywpNdbEoCnx4IwORqIuakwrFuZgL078nF4Xxn2bs/HtvXp2LgyEatno7BsPPie + AMw2GfHB3Jgf5ib8sJR1WTblh+Uz/pifDcDKGT+s4v3M895ml7hiatARk332hC0miDH278EWOQZarTHa + reT3WszR3i5j/1guyiW0DeOOWMu+vmm5P7auDMOONXEsY7FsLACDHfYY6rTHAAP7JT22mBv3xOa1Udi0 + NhLr50Oxai4AyyZ9MMn2FWszd9Sx7Wst0VHPALFZg8lOO6wY8MDaIR+sFwJwfxBWdwVhusYTPeT+dQxw + i+kTSoMsUBWuQG2snsGfJ/t8APpL/dCe64K2bD77PJY5jugodEJXuTvaqzzQRjRXuUuzgBu43VDpi7py + f5TmeiI93gHxEUbacR08aeM9GMuEewp/FYux+krMtzdjsqYSQ8UFWFJUgNESIQIXMfgrZBCYL5XjVeWY + rK7CZG01+2ctZjtasLS/E5PdbWgsLUBqdBh9iTO8nfX/AT9Xxm5edgj1c5QQ7O2AQE87+LgbpKxMblI2 + JmvY2ZrC1s4UdvbmsHMwgz1jKgcXMzi6msPJzQLOHD+ungq4+6rhG2xEAMdjeKwniitSMTrVgUMntuK5 + Fy7g7TeexPdffwofvvYEfvTy4/jxC1fw0xcu4yfPnsdPnjyLHz1xHD969CA+vLgTP3xoE370wBr89ORy + /OzYDD46PkteOYdf7R/FB1s7cW2+DAcb/bGlnH0iX4+laYyFki0wlWyF8WQFxtJoi9Not1PFrG0bNMdZ + oj7alMG/gDnq6AeqiBrGTo2JKjQlqSWI7cYUDeMyPdpzGDznO0royHNAR74zuovdMVztj9HaQDTlOKAo + zgY50eZII0+4LwBn8nriT5NM+o7MZBWyk1TI4+fCRCVKkhQoIoQYmp+iQBZ9U6YQf1n/1LR/C8BRrGsU + 6xYby88S5ItgPxRisEhbGhNlIaWBToixYJxqwTjVRlqiqCLPIKWBbhMCKSHWA64tMaCmSI+qQh1hQGW+ + WJNXCL96SQDOTrZFRoIBidFqxISTF4RaIDpMnFuBVJFelDFuVrJ+8b7YTllENv1jfopaEoAr8+2lWcUi + 5bMQghuKXFHLNqsQ64alMo5NUpKH2fAYK0n8/X8iADfW/Bv1vI+aWnI4orbaiWPJBc3cR6Szbi20R3Om + Di2sm3hRoyNeie5Y+mE+iyG243SSlSSSLYj1D6vtcKTaFkeqNDhZo8KFBg2udtri9UFnvE1f+DrtzQu9 + OjzVq8UTI854knbjkaWBODHqha3ttEM19G/lFpih/Z6ptsBclSXmqs2xvMoC68lZttIf7uV+hzsMOElb + dKpDJwnAkgjcocGxNvKjVtalidyHvnRdmxGrO4guI7YMOGAHfeGufnvsJd850OOE/bRre5sN2FWvxc46 + 3SLqF7FAuy5m/goh8bvYXqvm90puK7GZvmczfc9Wcqod9DN7xVrE3bY4NihiREcc6TNiH+u1o9ka2xjz + L9DP7KZv30s+spc+bWHAC5u6vcg9PDHR5oolrR4YbfPBaGsAxtpCpZTPQvhdcg+DbRHobw9Dj5j9S0gp + ndvvCb7tAd+ijWht95fQzn3aWv3p47zRVOtBv7iItlrazzpPdDZ4L6LeC92NvuhtDsCSrjBMD8Rgpj8a + kz1hGOG1+pu80Nfggb5GNww0uGOw3kMSgNvK7NBQrEeNSDFeoP1WBG7I1dNmG9DNvrOE5Wy+A5bl6THD + /jhJnjeTzvi6wFJqz0NtdjjV64qT5K4Hyct2kd9sb9X9LwFYpDAVAvBErimW5JhhmHHDEOP0JcXmWNFE + LttiKy17spnPc2st+0G1ErsqleQ+CiwU81nlWWNtJvdNNcNKxgdrs8j3stXYkKPBeo4RCdzekKvFBiH+ + kpeuZH3nks0xm2gqCcGrsxRYl6PlvjqsztZJKdBXZqgxn0neRvswm6HFVLaWdTSwjnp087cW2p3qWHNU + crxURZugIYaxT6IJhtLMMZ1ljWXZ1liRaSWleF6XacP6qLCj1A7baVc25iixNsMaK5NNsTbVHJsz2Nf4 + uxCAD7C972N/iVaafS+lYC/ndpUBB2rscJjc+QT59IONjrjc7IjHWxzxbLMdXmJM8SbHyA/IM39KjvOr + fkf8vNcWP+aY+rBNjZ906vELjpdfL3HHH8gvfr80BP9N/GAiAC+Raz/W5YyzrYy1yHvWl4v14BVoibVC + Jbl/fqQQgNVIiVmcORgcqoJfsAqeAWq4esjhzFjJ3UMBbx8NIcRfnQQ/f/pNwj/A8P9VAL6fAvr/lwAs + Zv0mpDggMcURCckOi8Jvop2ExZm/9vewKP7ehxCHo2Npq+M0SEqh7U53QE6m47eZGgpok0v4/CsY/9QW + KNBcpMRghZZ85t8C8LEOR5zrdMQjHYzhaK/+bwLwf4+o8NtRNX43bov/nnLEe8N2eKZTh5P1KmwoNMdo + iow2l0i1RGc6wT7SwdinO4MxQZ4MI0WmmCi3xHL2+dWMhTa0OWAzY51trQYskL/eF4CPNFrjuJi922iB + Uw0WON1og7PNcpxrVeJhPu/ztJ0XaJtEdoaLjBUfbKJNrbPGUfLg/eUmOFRlhqM8/nSrAmcYJz3QZo3T + LeYSzrYKAdiafUIl/T93bcCIV4l3R53x1rATnm3X4nKjAuebbHBOmoksw5l6Gc61yPD4gBWeH1fh2pQO + L01pJbzAz8+PqfHcqIpQ4PkJJZ6b0eHJGQPOj9P2jzKmHXTCNG1DM21AIdsoK9UEGan00+k2yMpU8nmp + kUe/lMcxnJdDTpArl0TgykLGDCU6SQBuLtSimd+3ZMvRxTHVQ3RxfAvht4vnuS8At4l1gpPNUJtkihqO + w1raj9ZcBboKVegr02K03IC5YtoLjtet5bbYXWGLXQVq7OPYPUQbc5I25FK+Eo8XynG1RIFnaY+eK7XE + tTKi3BwvVJrhuepFAfi5hkU832iKF5st8DpjUSEAv9Ojx+uMVZ/nuHyEPu4423OB/nF1qQVmC9hP8swx + nE2fnGONQdqUYWKINmVJpiVGMiwxnkm/yntdViRSQdPOVTB2rHeRBOA1tU4YpM2uJ38oCid/CDFDepg1 + ksXyVRFCAFb9vxKAMwSXSdVJSE/TIS1Fi1TyhyTyNYHERAUSEuTcZhyZzueTZeDYWhSAxbIe/xaAtWi8 + JwC38bOUCpq/dWYwpuPzbaOdbckxkCvaoVIst5GgQXKEJSICZQgOktEmmEgzemNTed0MHeJ4vZh4MZN3 + UfQNFSJwtKWE0FiBRQE4lBw2hPsE83eBoAgzBIWbITDMlLbMDCFh5mwP8YK7FimJBqTSXqSQx4kJbdGh + /C3YROJ38WynlDi2w3cE4NgYzbcCcGCAJQIDLViaI5SIYEycGE6Oy3qUkL/W8T6b6Y9a2I9b2Aeb0y3Q + lmKCfvb3FYU29G8a7KnUcGzqcKxGg1OMR8/WKyVB9pEGa1ypM8WjdSZ4pEaGS5UyPFAsw8EsGbYnybAx + kWC5WayHn2KG7eT3u9OscbiA3K3MFsfZh7fTL83T9szEyjBOnzXLY1ZnmGFLjjl20AfvyzfD4RJznKmy + xiPkP1e77fDCgLOUBlqI0BcaVHiwRo7DZVY4UK7CvnpHbCHfnCYXqIuUI4/3n+BhijBXE4S6ER5mCPUy + RaCPiSSK+/qb0m+YExYICLKS0mULAVggPFguQaSMFvifAnBsmBpx4RrpBQYh/AqIbfFMhAicFMVtxprR + 4nx+rAOvKQTg+2mgY30tEefHPu3PuECIv76MCXwsCQvE+JognvFqMsdJGv1dDvuyeBGzMtcoLcdSniWW + cCGPFwIwY4hE9p94xkMCiex3STFWUqpwsVZ1ZrJI+cyxESfnbzasm7WEJDGWGJOkxsiRxbKY+9dx306O + g2Fea5r8YnURfW8uuS5t1GZyiZ0c6/vzFThKf3S8VI2TpSqcYflAmQrnyJ8epo96qFyNi+QHDxdrcLZA + iTN5SpykbTpGe3W0xBb7i+2wjedexTE3EW2NPo6jNn8ZmjmmxKSdtnATdJP793Ec9cXLJfRyuyveGq38 + virSBKWM14qiTFDAcZQXZyWlehbCbybvMYv7i/I+suIXBWAxY7qMY70mwxYNWbaMOTjms9TSLP/BfDV5 + Hm1ZvgUmihmLlpFnVegkzFQYMFmhZ9yukVIsN9EG1mbZoJJ2t4L2XMQ+xWwjkRmiIIftyD5dwX1qss2l + l4daibYsM3TeQ08u7y3/3lrAIhU0zyswUS6EYAMmahwwVmuPoVpb9FUbpPWEq8lFi1NlKEyWcdzKUMrt + 8rRFEVgIwA0ZJmjPskA/7e84fYaY/buimDy3UWQXzMIH+4UAHGFPAyKMhCs7hieSYt1pROwRzMDfy9UC + Lo4mcLKTwcnBBI4OpnByNIezoxWcnayl0tVZIYm+Pl46Qg8PNx3cnDWSAOziqJTEWwFHBzkc7OWws1PA + YLD+VgC+LwjfF4Dvi8CLArAQfVU8vxKeYnaxm5LnFOmmLaV01IG+WoQGkYgRItXz/xSAxXZokJED1Zb3 + RHIVrkNiDB1Doh65aQY+IHtUFDuhutQZdWUuaCjzQF2xOyqzHZCfoEJ6hAXSQy2RFWGNwhgVSmN1KCKx + FEJwEZ1SUZgKlXG26C0KwERdNMarGTCVR7DRvVETz0A52oiCIAVyAkhMifxgEoIQdopQPVK85Qg1yBCi + lyHGzgSZruao8bNGd6A5xkNMsTrSFLviTXClQI63G4z4r0EPfDwfilu7EnHnRCpwOQd4TgjA+bj9TCZu + PpqMb85H4x+HvfH7bQ74+TIFSZ0MbwvBtEOG15qIRjO8S9L1Yacd4YD3Wo14p1GN9xjk/rRRhf9q0eFv + Ay74ggHyne2J4AgFHqvhdeqB11uA77UB77RyuxG4WgE8Wgw8yH0Osz4LUcD6QNxa5oGb0074ZsSAr4ZU + uDGuwZ15W2CbC7DXFXcPOeL6UVt8cliDP+8xw58WZPgL8fFuG3y+V4cv9tri0532+OdmB/x9tSN+tUSF + NxtNcJVE5UkSlSdI3q6NWeKN1Rp8f6s9fsFz/tdeJ/xhrx3+slePfx5Q4+P9Nvj0kDW+OCrHV2d0uPGQ + nSS+4Ulf4Jkg4IlA3L3ij1sXg/DV2WD8boc7vr/MgFdG1Ljaq8Rj7Qo82qrFk132eKbPDU/1OOISSev5 + BjN+Z4L3phX4zVo9/r7FDp9utcUX9wTg6/cEYHxXAH46gddkWz6ViLtPJOP6xUT86UgIPtzsjJfn9Hh6 + zIgHexg41VhiQ4kpluXKsJTB5vIyBp81BqxvtMPmZnvsIKE/2OuAE30kyQN2uLDEiCvjJKlzpvhwgxn+ + uKDCl7z/u4f0/x/e/jpKrutcAkd7eBqnaaaHmZmZmZmZmUcwYmaywLbIYsmWLEsys5M44Njh5IacxPZN + 7KBjtliqV/v0SLZz81vvvbXeen/UOt2nTx/Y8H1VXb33xp2HNSxjDT49ocdnT/ri89eicONHrKN3WWf/ + EobnEHBr9r75ewcruV0wgMX2+lLc/vc0br83gmtvNuHDJ3Pw+wMh+PE6Z/xknQm/2umJ987G4PPvsg3+ + oQ74gG3kLxXmaaB/lQi8FY6rL7njkycM+MdxFf51VIOPj7JuDmvxz8MO+McxHT48yzZwwQWfXfLEF096 + 49pT/rjzTBjuPBmJ62dD8NnDvvjoAW98tNMXn+0Mwo19Mbh1IAFXd8WyzCPxxdZIXNsagZtbQnBzqz+u + 7uSxD7jjn4fc8dFj/M7z4fjse7H49Jep+OLdfNx4vxS3/1kJfNIAfMH2K0YASwYw2/UXzcA/qnD3TyW4 + 8eNMfPlaIj6/EoZPzvjh34c98elhD1x9xBu3T7H9PBoCnI9k22fdPpUAPBnN16zrSxG4ezEMt88H4Maj + frh6zgdXz/C5zvrg2hkv3DzniZuPubHNueDOE064e8WI208bcPsFJ9x+zR23v+OP29+LwI0fJuPWW+zP + PynGzZ814KM3O/HrZ1rw7KFy7J5PxkBTCMrzA5GfF4Os/OQFAzgDKQLSCOCMrwzg4nx+XkQUIrM4j0hH + ZlEC0gsjkV4UiixhBAsUhSC7JBxZxdHILk5EdlEqcoRhXCLW+81BZmkOsspyJSPYbPzeQ+Z9mEce///G + AE4hUst5Pn6eVpaE9OI4swGc6s1YrkNStJiq0BU1OV5oyvdh4vZmUvVFY5YXCqO1yAlVIJPEKYsoDtGg + kt+piWCsJqFrCrVAezhFLInC8hxLHGffe3OXH/5+ORyfv8529nNP3P69M+6+a8Ldvxhw5y8a3H5XiTt/ + 0gJvM479xhX4GWPZm6zP77CdvRSFP5wOxavr3fFInwNWFtmjVUyjE2yDpEA7RAeaDeDIIBJ+xvf/awAz + R3qq4ealhLe3HGFBXzOASQQj/RWE6iv4KhHuI0ewl9kAFn/SCvATxrHSvG5wkA3iSBJTwm2QR1FSEWuF + rjQllpU7YXe7F+/RA+dHPPDSYl+8vswHry92wXemDHhtTEcSbcBLg054nvnhSrsR55uMJPc6HKxjfCKR + 3l4ux8YKO6yrssPqanusqpFjbasDtvH4bSTh69u1WC9+BF0wgPcMuUn7V7eosII5RhjAa0jY1zO2ru/U + YduAC/bwXg6Me+PYtB9O854eW+qDxxa5SwbwmTEDTo044eSIG46NeOHoiD92d3hivlSPIQrlpkQr1CXx + GUkCixLskRsvpq5RIi2BpDteQ15DxKqQSeKdR5F0zwBuSVejjyJuvNSAforUbpKn4QI7LK0X6/d5YU27 + B5Y3mbC4hgSvVImhfBv0k1j1kGh1U7yIUcAbmvXYO+iNg6N+eGQyAKdng3B+SSguLA3F+blAPDbhi0eZ + s08NeOKBRgesL7fBGgrvTWIENJ9drKW7qluN+Q4FVnTKsb7XARt71PxMiQOM72fmvPHotBdODznyHAac + 4/bsoIG5QoezAzo8PuaI52Zc8f01QXhrYwTe2BCOb60KwbPzgbiy2B9PzoeQ5IXh/KQPTrIeHuoyYFuz + CvMV1tLIlblaFebqtZhp0mOuVY/FwgDuNmI5cc8A7i9muZRZSusBL27W8D553wMk/7yfLYN6bOvXYHev + Eg/2K1k3FIJjWpwaN+D0KO911Jn37YpdFUqsYvkuoZgbj5RhMFiGIQqYsTg1xhP0GInTYiBGi95YIzpj + TGiKMqE+2gUVEc5m8zfIiJwAHdK9VEj1kCOL2xwfDbJ81Mj2dkA+uWehB8W8p5gO2oDqYEdCjzL2lWIf + igAva2n65xxfGXIotIopkuvYTjqzjRgt98B0ozdm2/2wuC8QiwaCMD3oh7EBX4wO+2B42BuDrL+eLhe0 + NzmitV6PBpZbQ40S9VUCctRTZNazXutYv3UVNtxng+Y6BTqaKJrIr8To4fFRH8zNBGB+aYiEGbb1Qbb9 + TopVYfhWV1lIqKwgga+yQgvrqafHEeNjPpidDsLUhD8mx/0xNCimHNaikfXW1KBbMIEXDOBmE9qbndHZ + 7IrOVld0tbqgp93dbAAP+mNmIhhzUyGYHg2QjOC1yxKwZ1su9u0sxI6NGdi4Ognrlsdj1aIoLJsOweJx + Hjfmh/mpIKyYDcHyRQKhRLAZi0OwktsV0/5YOsH7JG+cGHDCuBgh0WskDBjvcsBAsx36mm0w3GmPiR4V + pgcoavodMDegxdyQHkvHnKTRw2sX+WIDy2brimhsX52A9fNiFDLLbcwDU0POmB4x8Zq+2LYpBpvXR2Hj + ylCsmRejkX2waMJNWo+5q8EGLTUWaKu1Ql+jDcbFtOZDHlgz4od1w4FYPxKKdYMRmGvyQ3eOFtWMj+KP + AQVsF6UhtqiK1qArxxNjFeTzdeGYrA7CRGUAxit8Kc480F/iir4Kd/RUe6K33gudRBvbT2u9N5prfdFU + FYDKfE/kJDlKOUosq+MnlsZxtEWUrxOFmRgBXInlnc0UdJUYKS3EWEkhJsqLeZ0SCr9iad94eQlmJAO4 + WjKAF7U0YmlPB5YP92GmtwPl2WkI9HCGUWULrcISOqWVBPFaz62T1hbOBjmc9XK+tpNg1Ivldaxg1FpT + X1Fj6XnsAnRGCxhNlnB0tobJ1QauzCsu3gq4eqvg6a+Gf6gBweyPkXFeKKpIwfhsJ46c3IVvffcyfvKT + l/HLn7yCX//4Jfz2zRfxu+89j7e/9xz+8PpT+MNrl/D2q+fx9sun8bvnD+N3T+/H7y/txNvnN+Lts2vw + 3rm1+Pv5TXjvxHL8cu8wXltTgwdbzQbw+hIdlmfLsSTDDkvSGa8y1JjJZszO0mAo0wHdKXK0JlIzxclQ + FytggdpoS2lWiOooCzQmygmFBDH9cxtFfneeE+vQHUMVXhIGyz3RX+6NoSo/jNcHY4JoL3RBuTCAo62Q + wXNlRFkhM4FcIkmJ7FQ1Mpg/MsSPKEQONaKYSqyYnxWmKFCQpkIB7zM7Q4wyUSAtU440bpNT5ZIBHBdv + Nn+TxQ+RRArvKyVFzdcqJPIcicIMjrNl7jIbwClxVshOtkVhhgrluQ6oLzWiq9EL3U1eaK9zRWOFI2qK + tagsVKOywAEVeQ4oztQjL1WLvDSDNPVzRqIOidFitIINIkMtERNmi4RoBXW+BulJDsgkMpL4XLx+VqJK + +mGkMM08ArimyAkNJS5oLCXY9huKXFGb6yRNeViayribpEBeoi2ymYPvGcA5qTbU1nKU5KpQUUjexXtu + ENNTV7uhtc4TzfWeaFlAY4M76om6ejfUi1HNta5orXFDW6WL2QDONaA5WYnmODnaGLO7Yu0wEGeNsXhL + zCYzn+YKg02HB2sdcaTeCY8wPp9q1OJSmwGv9jvjzTF3vDVuwg9GdHht0AEvDGnx0ownXlgejMtLA/HI + hCe2d2qxop65v8paMn6XVFtjSaUVljAeL6uxwromswH8QKcBDzKHHmHeFqN+xehfMcPGqW4NjjHOPNSh + xu4WJbaQ/2zo0GEtj1vbo8NW5nJhAD8wZMLeARMO9Dpjf4cj9raIaZ1VhBo7a8mt6szYtoD/NIC31yux + tVaBLTUKbCTv2rjwR7ztTUrsYR450GPEwUETDjJWPthn5D5+h7F3c50ltjXYSUsJ7abm3818trXfE+u7 + vLCMXGqaMBvAAZIBPCEZwNHcF42JrliMdscyh8RgqDsK/d2hEsSav8IEFibvfeO3MwhtnYFobQ9Am0Cb + P9pb/JifyM0ZJ4X521F3zwD2Zk7wR78wgBt90N3gjZ4mH4zwfDP9kZgjZnrDeE9BGGlj/2zzxGCrB0aE + CdzE77KdtLHtN4i1Ntn+a4l6gUIHNBXo0cF2IwzgsTwD5vIdsThXg5kMW0ySv80QywsssZXl+JBY17nX + FUe6HLGP5bOzhWUv+Gy7nvxOrPXmgDU1Gqyp0JBzyjEjRrvlkb/kk8cQI8UWWEmevL7LRM5Lnd6ix1Zy + PWEu72Kd7qxSYXuZCpsK5VidYwMxpfKydCusyrLDmmxy4RwVVrOf3MOaPDXWFGiwKl+FZdl2WJRqibkU + tsN0G8kQXpOvxtp8LY/jveXrsJrbFblaLMnRYC6LeZX7pouMGOFWGBVtjJt18daoiZGhJlqGRqIvWYYJ + 3seSHHsszyWPzyGfz5djSxGfv9yIBxs8sLfGGdtYnhtyFVjN669Ps8LWbHvsEQZwkda8Xp8AjzlQrpMM + 4B1lYu1jYQDzHI0mHG11x9kub1zs88OVbi883e2OF8mjvs22/0OW9y/6XPD7EXe8O+6JP4264vfUHb/p + N+K3xNvDznh3whv/OxeAP5F3/M9MEL5HPvZkOzllE/thrRabS9VYkq/AYIodmmOsUBFpjaJoe+THiZFX + OsRGOyCEms8vWA3PAOorTyXzGnWXZABr/78ygP3FusHB99YApjZLcERskkkygCN5HWEC30NUrPa+AZyW + 6YbUTFfJBJYM34VRwRL4XjKJM8TWbABLo4KFoZOqR0aWM3JyXCUDOD/bCYVZRhQy/5Xli+klmQuKmdNK + VRiuEQYweXkz4wnj3iNsz4/2ueIy44wwRF7o1eLlHg1ep26QpoAedsBvxtSSAfzOpArvTOnx9rQj3hw1 + 4FlyqBOMdxuLLTFBzt6VJENvhg36sqgFcqzRIzRQlgwD7AMjRTJMke+uYJtf2+GMzazfbd0ukgG8nRpv + V5tqwQAW00Db4VirndkAbrLDqWaxjq8C53jMY4ybF4RR22MgqDkZO88wjj5Sb4ODNZY4XG8tjf4926vB + 2T4xJbNCMn9PdtjgTKctHiOvFAbwC8NGvEqt+L0xE34254VfLPLD90dc8XyfgZ/rcKFThdMtVjjdbMnz + W+DSgBzPT2jwyuw3DeBXptR4meXy0pQSL8/y/bwBzy1zwsVFJpyadceDU15Y2eWEnjI5yjItkJUiQzr7 + SEa6LXO+HDmZSuRmKZDL/pzHPluQp0Ax+1d1kQrN5VppFLAwgFsLxLShYi1IHYaLdZIJLKaBFgZwD7fi + dSf7XH2KJWpZDzXst7Wp5La5/KxQgT7GlVGeb67UAavYBzdVGbFLmKslGjxQoMIBXvcI++9jvO4TxQo8 + zf75TLlCWg/4Rdbbi8x3LzLXvVhrgZcaiRZLvMSyebnVGq+22eJ7nQr8UBjAfTp8r0+PV3v1uEI+f7xV + hT0NcmyosseyUlvMFNtKBvAwY8kQY8kI49ZQJvk+Y8xohhUmMi0xw8+WFCmkkcBryth3a50YJ92xps4F + o2zPTeRGpZGWyA0j34kQBrAYKan+/9gATogj10rUIDNFrIsrRgEbkE1kZmhZL4wH6WYTWHAuwb+SyFvS + ydXysrTsU8IA1qGUfUsYwHVZejRmkHdksJ7StWgnb+wg3+zksZ38vIO6oY0xtyVXjyZyoYo0PXLjVUgK + t0S4WE83SIbQCJk0sjeWnDCR147j9eKJGDGil9wuIlYYwWYDOCrRHpFEdJI9IhJsEBZngxByz2By2KAI + gno1MFTGeMRzh1sgOuorA1ggmc8dz7gXQ00dGWKBWJZfYrQSqQlaiCmgs9JdkC7+gML3XzeAQ0NsEBFm + jwSeL5O8s5B8roLP2cjc0VFArlwg1tJXo5N12pllje50C9apBVaXk+c0GvBAnR77q9R4sEaFw8ylj9Sx + T5NHPdZgjceFAdxshUsNFjhXKcMjjBX7GTc2J8qwLkGG9WzPm9k2xEjfAwVqHCnW4xjz+UlywMNVTtjG + /ct47ByPnYyXkevJpGUJNubZYFueFXbnW2A/c++RCmucq2f/79BKI4DvGcAXmtjXa+35uR2O1OlwpN0T + e5q9sUxw2QhbFPhbINGddeQsQ7grwddhnixjb5k0ItqPCAi2ICyZF4RRbosI6sMIlp15qmj5fQM4dgHx + kWrEEfGRrA9hAjMXJMZwSySw/QoDOIW5Sfw5SZjAiSz32FCek9eS1gIOtJIGi8T6WSPOzw4J/vbSNs6f + uoH74gMELJASZk1NQr4dZy/9AbMq14i6QifUF5lQS64jpjPPZzsXUzinxljfN4CTY62RliBnvKI+kaZL + 10tbaca8WLYDauF4njcpVqwjzf5B5CUoUZnqgBb2pV72kzHyqjlh0pY6Yj1z0CbGl61sHzvz7LG/SImH + S1Q4WKbGoVIljjA3nahU4zQ5wdlqHU6TQ52rdMBpHnO8QI5HGBMfYaw6RA73cBn5arGB59NiGbXQOPtH + L9t7K/tSc7AMbWHMRewTfQnCADabv33sMz1EF/uUyP9C95VGyVASa4ki9r1CoeGSxIhfxmTJ8KVeo1b7 + Cuz/Quuw3Vexz9fnOElLAbWIPz9kKdGbp8Eg2+ZQgR2GC20wUaLAVLkGs5V6zFToCDH6V4fRMg26ye+a + cmxRx7KoypGjkvytjPG8mNsCllEBuVZxli11uxVqsi3QQLRmy9DObWeWGcIE7s23wQCvJdYEHmP5jZPj + TAojuIrXYswU674P1erRW8X8wfup4veLU2UoZP8oZR4qI7etymCuYF9rzLFES44wlxmbC5SYKzGP/l1T + ZsA+8u6nl+Ti5/s6IUuMcWHw9EB2uh/yMoMYRP2QEOOK8CAtfD1tFwxgS5icLGAyyeDibA1XFzsznG3h + 4a6GtyfJlJ8BAf5G+Hjp4enuAHdXDdxcVNwKE1cpvXZ1VvIcKsncNUP8E91sCOt1dgsGsHkEsNgnDGAP + Vweek+f31xM63pMSvh5y+LiLdYmVCCKRCwnUI4zkTRjAwTxOGMCBCwZwVJgTYqNMbOBOSIw1UsA7IjdD + TH1lQGk+xWyJs2QAN1d7orXWD80VPpIBXMhGkh5hiYxQK+RE2aGEQb4yUY9yduDyWApkJqcydvhaksGB + kmBWEAVTVSTGK6PQk++PljSK2yRnVERoUBwqRzGDRmm4EiVhKhRHUHizg0c7MggZZEg0WSDXwwp1gQy0 + bPSTDPir2Jj3UgA8W63Bz3vd8NfZIHyxPhZ4OB04nQ1cFgZwMe6+XICbz2Ti+qVkfHkuBv94iMR5mxG/ + WSbHTyYs8NawJd7st8QPOgVs8HMSQTHFjlhn5Rd9TvgZydcvOxzwh249/txrxL9JyL+cD8HdnQsG8KVa + 4PkG4PU24A0x+pfbbzUBT1cCF0qA47yP/Tx2cyTurg7CrSVeuDntjKujenwxoORWhVuLdMAGV2CPJ/Cg + G24eNuHzgzr8Y5+tNAL477ss8OEDcnyyzwGf7nPER7ud8K8tJvx9tTN+T7L6AxK25+pkuFwjw4UGGZ4a + IHGZU+L1VQb8ZLMrfrnFGX/Y5oh3t2vx/k4F/r7bXppW+tOHxChgLW6edcLdCx7AFX/gmWDgSeJSMG4/ + HoarZ8Lxlwd88ItVTvjBjAGv8r6f7dPgMsvkSqcTnuxxw6VOR5yqtcEj5TJcbJbhB5NyvLPWgH9tdcYn + W53w+Q4Tru53w42DwgAOAM4JAziS1/maAczt3adSJQP4/UPh+NkWN7y6lKRqwohjnRSdVSTThRaYI7me + K7bDUnb8FfVGrG42YUOrCVt4L3u6nfAg6+lQt5ZE3wEnB+zw5IwMP1pniT/vdMCXDznj9kEjocf1I1p8 + etKIT58OwOffjsXNn+cC77MeP+oGvhwBbpsN4DtYjltYye03DeCbH07hxrvD+PwHDfjb45n41W5//GAZ + yeBSLX60wRlvn4jAx9/Kw90/NAIftAB/qQbEVNC/TATejMDVFz3xySXW40kt/n1Uj4+POuLfhw34x0Et + /s7tP0864d/nXPDJRU98dskHVy8H4PaT4bhzJQbXWCefPuSPD3f74F87/PDv7YH4ZGcoPtkVhg+3huCf + WwLxMfHptkBc3eKLq1u9cHW3Bz7e64J/PmzCh2fc8dnTgfjsWxH4/Efx+PK3Wbj5TgFuv18G/KsO+JTt + VzKA281b8f7vVcCfSnH3p7m49e1kXH8qCl88GoDPjvHcx71w+zTbzqNsN4+Hsm4jgKdiWK/xBLfPRLF+ + o1nfEbhzKQA3zvN5HvPBF2c97xvA10674/pZF9w874w7F51w5wkDbl3W4+azjrj5ogtuv+aL26+H4ub3 + 43DrzTTc+nEObv60Ep+91Yp3X27Dd8/U4MiGTEx1RaCmyJ+JJQyZeXHILE6VDN/k0nQiw2zElnArDOCi + fGQUFUnILCpARnEOMgpTkV6YgPSiGO6LWEA0sopjJXM4i+fLKspEtmQYCwOZKMlFZhnfSwbw15GFtFIz + zMYzry1GAxMp/4FkYQITSeXp30ByReZ/hdk4FiZwMtJLeL8FkUhM80FEuJaES4O8VDESxRtN+b5Mvt5M + eD6oz/RCUawBeeFqZAWR7ATao1AYwFF6VEVSOJPw1oVYopGkopvEeibZAg+2qfHtzYyZj7PNvR6Caz/3 + w8233XH7PTfceZ/96X0d+4Eat9/Rsa0bcfe3jCU/d8Hdt5xx83ueuPqdcLx/KQxv7fHGhWmS1wYdepNs + eV1rpATbIUYQuyArEjyS/oCvDGBpCmjmRQ8vDTx8tPD00cDHV2k2gANJLgMpGAIWDGA/lQQx8jfSR4Vw + b3uEiKmfxZrBfB3ox/MKszjQlt+xREKgDGl8zoJwa7SQCE7n6bGlwRMP9/jh5KAnnhj3wEtLfPDtZV74 + 9iJnvDKpx4sjWrwgZjkYcMJTFLgXWx1xtsGIoyQcD9XqsLtKgy0UkOtIqldXybGymqhVYk2LAzZ2G7CF + 4n1dmxbrWkkMO/XY0W82gLf2mXiMWjJ/BVbz9TqS9HWdOmwdEP+odsf+cR8cm/HHqcW+OLfEG4/OueHc + jAnnxnkPFPSnKOSPDXvi6JAf9nV7Y2WlgULTHq3JVsyzcjRkqFFFIleSrEKWWA9IMn4F6RbT8aiRyW0+ + BWNJnBy1PKY1U0PR7YipCicMUmyIEcDCAJ4lsVrWYMKSOqM09coMY/BYsT0GKTr6SKw6SbI6KF5G8yyw + ttEBe4e8cHjcH8emAnF2UQgeXxKGJ5aG4uKiIFyc9MdFfvbYqB8ebDdKawCvLLPC2gaxjpQGqylalnWo + MNcmx3yHPdYwnq/rccD6Lg12UnA/POKMQ4MmxnodDjE/iB+dH+nmlsecoBgXhvDlCRe8sswf31oZJJm/ + r64Oxwuro/D0ygg8tSoGl5dH4eiwG/Yyl21usGO5WWGuzJIk1g4zVUrM1DlgplGHRW0GzLPOlosRk8Ti + Vi1GmY/6KLKGSq0wWWOPxS0arOjSSwbw+n4DNvZpWe8KbO+yw4P9KjwyqsWxMRL8CUc8NuWKC1MeODvs + gf11FPwk+2sy5ViSZIfRCCsMR9piLEGDsUQdhuK06IvRoifGiI4YExqjnFAbRd4Ubh79mx9kRBa5XKqH + AinucmR6U8D4OiBLmMDeFDJuGuS7Ex4OKPEzojrEiTCiLMA8CjjX0wq53uRXfhYoYD+siLGTpoLty3fG + aIUnpht9Md0eiNle8eNzEMb6fTHQ543ePg90k3d1dLigtcURTWwTDRQyNZUUXRUk3+wLVWX25I+2qCix + QXmRNcqLrVFVao069o2WBgd0sd6HeJ7RYW/MTAdi6RJhAIdilm19lO2+h/2mnryissICVZVfGcBNjUp0 + dRgwxP4zwfYzOWbGyJAPOngvrY0UKo16yQBuFdM/NzmhjTyhrcmE9kYXCdJo4HZ38xTQQwGYnQjBonsG + 8EQw1iyNw/YN6di5KRObVidi3YoYrFkWhVWLwrFsJpjH+GMx2+/8TBBWzoVgxWJh/oZi2VyQNBJ4fjYY + y6aDsGTMF7NDnhjvc8FQlwGD7TqMtFMssq0Ms5/3st11NrAttdphqF2B0S61hHG254leLaYHDFjM/r18 + 0hOrWC7rFwdj07JwrGM5zc94Y9GkG+/ZRDhifs4DG9aEYP3qYGxYGYi1y/2xeqkP5qdZTv0O6GuzRQs5 + YivRTb443MI2N+CClcM+WDMcgLXCAB6JwlxrINpztChjW8yg8M/0kiGf4rssXIH2TFeMlbGMasOwuCEM + S+pDGQsCMV7iiYEiZ/SWEpXuGGzwQn+zD3pa/dDR5IOWOuagSi9U5bshN9mIFLbpmFA1/N3t4O3E+E99 + VJ0dh8nGcizvrGffK8dIaQHGSgowUV6EicpijFeI0b+FfF2KmdpqyQCea6xnf2zCst4urBwZxGxfFwpS + E+GiU8HWQga5tQz2hJ3Y2pght5NBYW8BjcoaaoUVVHJLKOQWElRKC6jVVnBwsIBWa0VYwsFgCQPv0Ug9 + 5+RqDxf2NRcvJaGCp58afiHCAHZBRKwnsgtj0dVfjR0PrMSVZ07gpVfO45WXz+PbLz2K158/h+89fRY/ + eOosfvjUafzwygm8eeUo3rz8MH74xF68eX473jy9Dm+dWI4fH5vHL47P4/enVuAXB6fwxs5evLSmBgfa + grC12hUbSnVYlafE8mwxTakKS1hfs8xjE9wOZzFepIppuym642SojhVgH4q2REWkjPneAvUJYvpTBRoS + FGhMUVFs69FX5IrhCm+MVvtKGKnywXCl2PphvDYI43VB6OAxFUkKyQDOjLRARpQ1MuLtkZnIPJKsRip1 + YDJzifRPeb7OFj+UUCvmpvA76YxDzC1ZmWqkpSuQnG6PlHQ5ksQPgYm2iE+wQ2KSXBqBksYYlJ6hQUaG + ntDxeC1SUjRIYr5O/A8DOC9NidJsFWqLDdKfDrrY9trr3NDI/CVGg5WxnEpZTkWZShSKqZzTtMhLNyAr + Wcf7dEBClBIx5AKR5ASSARwp57lV0uwY6SJfSjD/ECh+LClI5TkXRgAL47e+xAV1hc6ooV6uyjagPJ2x + lmVawHvNjbdGdqIN27w18lLElNXUurzXsjwHVBYaUFPiiPpyFzRWubFveqKp1hPNwggmGuvd0VDvgXqx + FnCNC+OrC1pY920VLugoZizLZXxkPdZH26Ap2hrtrBNhAIspoGdThCkmx/ZiB+yv1OEI4/OJeuZFxsWn + 2hzx3UFX/GzCAz8dd8JbIzp8d9gBr47o8e3FXnh5eSAuLfbBkTFnbGduXN0gx4oaW6yotcW8ZABbYmmV + BZbfN4C12MN4fIA58mCXDkfFD+HMw6cEutU4zjx+iNjXpsSOdvIk5uyNzNEb+nTYPmzC7vsGsBP2M78e + 6DBiX4sY+auWTOAd5FFbqsXUmgRfb6tTSfi6AbytVo7N5F0biQ3MLxuYw4UJvI18Yjd514EeRxwk53qw + n9fpMXCfBlsbbLG+WoZNNdbY2sjrUMfu6HXHZmJthzuWMj9MtYsRwD6Y6BAGcAgmOiP5Ogbj7dEYbY/C + QEck+joi0NsRJpm+PQsjezsW0NUVgg6infvbOswGcGurgB/zkS/zoNkAbhMGcK231HaFAdzf4o8BMQV0 + ow+66tzRVeuGAcbTcZ5nuksgiPfjh7E2b+YRTwy3eWKkxQuDjZ7oYVtpLTeyXYo1ps0mcB3bgWQA5+uk + qcP7iLE8I2a4nWX8mEq1wliyDOPEfK5MmsnmoTYdjvW64GA7y0vUM9vB1iY1tjKHbWghl23QYm2tFmsq + HTBfqsB0gTVGFgzgoQJLxmprLJem/DZhE7G1w5FtxYDt5IY76zTYXsVzlamwvkCMtLXB0nS2rXRLLMuy + wwryV/EHl2U59oTYErlyLM9TYBmxONsOc2nkauScS9KteLxcioerxRp8xLpCPdYWGbGCMXFRjgYTGSqM + 8jlH8shtcsUfmTRoE2s4sm9Kf45hXGyKkmEg2RJTvI/FYo3fbFuszmEbIT/bVqLDnkoTDjZ74wDrY0ep + AZt4vXWp1tiUboMdOQo8UOCAfcU6HGBsPsDjxXZ/hR57yJO3lZAL8ln31BjMBnCbBx7r88floUBc6fXG + k93ueKHbFd9hOb3V64rfjHjhj5M++POUL/484Yk/jbnhDyMu+CO5wB+GnfH7YR4z7I4f97vh9W4XPEs9 + crrGAQ+Sd20lJ1+ebYMJPkcvn6+RcaF8wQDOjRXrL2oRHaWRzFofYQD7q6UZlgS8qZ/8AnSSAewvGcDf + nAL63nrAAdRh/oFirWAl/ASC+TpEyXOqEZ3ghNgkZ0TG6xEVo0NkrH4BOkQJ8znRyNjvgrQsd6RmuiFJ + jAJOdUJ8sqOEBGkksAnJC+v/ft0ATkkxIFWs67lgAIspoPOyHBlXxZT9Dihl/VYValBXokYby9tsAJOX + N+vZ54043ueGxwbc8CR5z/P9TniRMejlXrMB/INBLX5KnffbCQe8M6nBO1PCAHbA29MGvDWmx3M9Kpxu + VWJ7pTXmhOZhWx3ItEF/lg0GcqzRl22B3hy2oYU/P0xKBrABazudsbnHHdt6XLCNcXJbqxo7GQsfIOd7 + qMkWhxttcKTJBo80WuF4gzVONtridLMc53it8+0qPM54+kS3Hpd7DbjErVhr9iw/O0X+dqZdiXO8/8eH + xfT9Ojzap8KJDhuc7OQ5uH20ww6Xed/CAP4WeeKbk6741RI//HZZEH4264fvjLvhOcbfS706nOuQ42yz + Lc40W+NijxLPjGnxyowBr83qCZbTlAYvjavw4qgSL0wo8eK0Bi8voSae5/cXu+LMIi8cnCVHHfDASJ0e + dezX2akWSKEmTGa/SmEOTEu2QzpzU0aGHXkA2yP7d1GePetMiaYyBzSX69DGuNVaqEBHgQLDZdSypXoM + sG+JUcB9zOM9/F5npp00PXRtkgVqEqkLiNpUcttcW2m9yZ4SJbWZmnrOAcsrdFgr1tgltrNd7Oa19uUr + cDCP5VekwoUiJS6VqnC5TIEnqVmeLbfFc1XWeJ657oVaS7zYaImXWqzxcqsNXiGHfq3NDt/vVODNHg37 + qg7fZy77Vp8Bz7J+zovfH8WsX9Q362rEqDIVxvLtMMhYIjDEex7MsMEQ++YI289EhiWmGWMkA5j3sVKY + wOWMrVWOWEn+Mkyu0BhvidIIGfLCLJEdwfKLIneKVi0YwGpE8vU9A1hMkX5vmnRhAMcJAziW2pBcJi2J + ejDTyP7ihBz2GTEKOIN8KJ18RTKAyRmFAZxITpFKTpaVrkZhljCA9SjJ1qEiU4v6bCMaM6n30vVoISdr + JTdrJU8TawK3ZjK/sA82Eg3koDWZehQlksNF2SE2WIZQ/wUDONwC4THkW+RxseRTMbxefBLvl9soXj8i + zhbR5JQSksjNkhWIJZ+KJu+M4OehMTYIjrJEAM8TECLMSILnDQ61QBS5mzBz05L1EhLJQWPF7C7iD34h + VuR5wsxTIoXHZDHmSAawmH0ggbFJMoBtJUMzLMQasTxXZqIDihlbxKwuTYVG9JQ6or/UKI2AFAZYb46d + 9AeQvkxLjGZbYS1z4W7qzT31RjxQrcFecpYHq+1xsJr9u9YKp+os8ViDBS6xPV1ptcXFRnucKrfBgWzy + ELbhlcxBq+Nl2Jxpjb2FahxlGzhNzneK+f9UgycOVjphM68p/jA+Q24/mWCB6WQLLM2wxhq2/Y25VtjK + /L27QIYHiy1xvNIK5xvZrqk3xYwHwgB+nPr5dI0dHqmwxYkmI2OFDw60eGN5sRMaw6xQ4CNDorPMPADP + iVsXwoP1Rh0YxM/8iIBAM/ypC4MDrBEWJKaIFiawHBGhwgBmOyTuTQUdH6FBLHNDHLcCCcw/ov0mENLU + 0DGskzixLjD5fqIeqXwt2nhMoDWieI1oaWuNGD8BMeKXbcfPhq+FKWyFOB6TEGiJtEg7ZMYI3i1HYaoa + FTlG1AoDWPhY5Ohl1DkF3J+ZKEeamE1ImMDkzsl8LaZ6zia3zxFryzPH5KSIAZFKyQCOj7bl/dtIJnAy + z58WK0cedUE1jxUGcA/PO5Kjw0yejn2YnEcYwOQHWxnbxIjtB9i/97NvP8j4c4Bc4MEiOQ4Wy3GEceoR + xp7jxMlyNY7xuCP5tniYdXmwUIWHS7XYz/i3o4gxIccBi5LlGI6xQifbfDPbfLMYARxhgR4+R780/bMS + g0QPtVQX+1cbn6su2oK6zwIlbFvF1Exi+Z4CMfqX5/pqxK9aMn0l8LlyqOdyWR4FyRpUMEbUZhnZp/Xs + 3yrJAO7JUzMma8jz5BgqtMMon2OsTIPJcj3GGb8mGMdHy7QY5PN2Mg80MvbVkpNUktdV5KmYp1WM+0rm + b94HY3kRY2JJuoV5dG6mDC3sDx3/aQDn8RnJMQeKFq7HMhMG8GSVTjKAx+ocMVClRWeZGk0FdoxXMhSS + HwoDuIQoY34QBnBdtiVa8uzQQQyQ240VabCUeWY1OfOGMkc82BKAZxbn4Rd7uyBLjnNHRpKXZP4WZIew + gQSwQXggPEQPfx8lPNys4Sr+Ge5kASdHGbfWcHG2I2wluLuTVHlrERDgiMBAJ/j6GOHp4QA3Vw1cJQNY + BQ9X9f0Rwc4mlTQKWBjATo4KQgWDQQG9zn7BADaPBhbrAIspoMX3/Hz0CAo0IjTYiZ3QkZ1UA293Ma20 + FdxMNhDrDwf6iTWLxchf8+jfAF++92fQ+5oBnBzPgMhgmJfpRELF4E2RW8bOU1suDGCv+wZw9YIBnBFp + 9TUDWIkKBtwqdt5KYQKz85ZFKlGbYMBAcRCmaqIxXhFORKAvn+In3R2NSSZURbKBhSvuoyzMHsVhSuQG + UIgz8MSYZEhxtUCeF0l6IBtDgAwTbPSr2ZgfYvJ8uZGEbdQLHy0Px81t8cCRTOBsNnAlD3ghH3dezMX1 + p9Jw9WICPj8ThX8+TFK93RG/X6nCr+bs8MtpO/xi0h4/HSIGFfj1qBFvT7oR7vjdqAt+M2jEHwed8AFf + /2vMFZ9NeePacmEAJ/Na+cBjFbxWFfByE/CdNkBMBf1iA/AE958uAg7lALsSgDVhuDXvjxtTHrg27IjP + etX4hOTso04baSTw3ZUmYJsHsNcDtx92xdWDRnz8oAr/2msr4d97Vfhkvxaf7nfCRw+Y8OFWZ/xjrQve + ntDgzXaSlHoZnqiU4UyVDOdaLHChzwbPTKjw2mI9vrdUj5+u1OFXq5X4w3obvL/dFv/YbYuP99vhyyMa + 3DrtiLuPufOeffksgUQQXwfj7uNhuHY6DB/s9cWvea0fLXHG96ZMeHXEUVpg/nIHiV+XK55od8JJJpRD + Rbx2jQyv9lvjd8u1+McmEz7ZYsJn2024utcVNx70wu1jAcCZMODxCF5HGMBJC0jE3aeScfV8Ev78cBh+ + utkFLy/W4fERIx5u0WBtiRVmGBwmSLCnCu0xxyCzpMaIZQ1OWNNiwnrew9YOI3a2OmBXk5wEzAZ7myxx + YVyGN9ZY48+7jbh62BM3D7ngxiFHXD1iwMenTPj0uWB8/r0E3Po16+pvrLuPe4Fro8BdswF8EytwAytx + 674BvAq4vgTX/jmBL94ewEffqcGfz6biJ1u88K1ZEu1RW3xnGcv6UAj++VIObv1PLfDnZuC9auB3bC+/ + TAHejMa1l/zw2WU3fHTGCZ8cM+HjR5zx78Mm/ONhI/5+0An/Ou6Cf59xx6cXfPDpE/64eikYt65E4c6l + eFxlO/74QBD+tsMHH2z2wvsbvfHOGnf8cZUz/rTGFX/Z6IF/bPHEv7Z54TO2qS92eODqPk98doBt+GFH + fHjaGZ9d8cEXr4Tg6veicP2nKbj9u2zcfYdl8NdK4EPe82dsz1+yPD5rBP7F9++zPb9dAvyU/erbKbj1 + dCTrKhBXT/jg+kkv3D3rz77AdnOBuCRGkUcCz7N+X4gmotgnuH0uAnefDsLNS764+jiv/5gXrj/qi+vn + vHH1tBufy4RbjzrjzgUxIt2Am0/ocP1JA64/I0xgD9x81R83X4/ArTficfutFNz8cQG+eKsOf/9uO376 + RAPO7sjB0v5wNJb6oDg3EFm5kcgsToIYeZu0AGkUbvE9AzgPGUWFZgO4kNvifKQXZhBpSBfTQRfFE3GS + 8ZtZlIT0ohQek8njhfkrji/ivkKklfB7ZXnE183fHDN4HYHU+yawGcKM/gaECUwkSSbwV0iuyPqvkKaz + lkzghWmgC6ORku6PiAg9osPUyEpyRHmWB+oXpn6uZrytSnMnATCiIIokh2JdGMB53JZF6VEe6YCyEHtU + kkRV+8nQ4GeBfoqO7TUKPL2CcfB0MD78Vhi+/Hkgrr3thZvveePWBx648b4R197T4sa7etz6ox53fmfA + 3V864s6PWX9vsK/9IBj/fiEcvzkagOdXe+DhfleM5ihREm6N1GAbxAaSlAcJgvc1A9hLCT+RNz008PHX + w4e5zTeA+TZAYzaAA8wGcKy/HJF+CwawrxoRPtwSYZ72CPaUI8hLrP9rhyB/W4QHiillSBT5bEkUIpkk + ryXBlhgiGVxX6op9Lb54pM8PpwfccJFx/vlF7nh13g0vz5nw/LgOzw6JKRKNeKrPWYp3j5Lkn6g14CCx + v8aAHdVabBTT+VYqsLJGhZW1RINY/8kB6zsN2NRpxNpWrYRNXUZpeudd/8UAXsXXa9oY7zp4XK8jdgy7 + Y9+4N45O++PknC9OU2Sfm3PDWWEAT5gkA/jkkDOO9rvhUK8X9nV5YXWV2QBuT7FinlWgRQgy5vOqVC3y + E8yGbyoJeGKUCimRfE8SXhCnRmmcQjKA2zIcSK6cMVPpjOECFQZybLi1xxSJ1SzJ1kylltBhmuRrVBjA + +SRmJFvCAO4k0RpmjF5Rq8CefnccGvOXRgCfWRSMxxeH4uKSEDwxF4hLU8REIC6MBUhTDW6stMOyYgss + r7LDigYlljOOL21XYbqFsb7NHit6HLCy2wGrO1nGrQpsalViS5MC2ymgdjfYY2+zPfZz/4P8zuFuHU72 + O+KcmAlCTBE97szreeDJJQF4elUUnlodi8ur4/Do0nDs7TNiUxOvWW2BRWXMLQIV1iSW9pisVmOmQUz/ + LEb+OmFVnwtW97pgcSvJbaUwgC0xWMpja+RmA1iY/AOO0jrAYsTyhk65ZAA/PKDB8XH9ggFsxBOLPHF5 + kS8eG2O9trvg4ToXPFDpgi1FJixNc8AMhfpkih6jFKl9rJsu1lFnJIV2lCMaooyojnCSDODSUGcUBDki + m5wuzUOJVDcFMrw1yPbVIctXi0xvB2S5aJBDjpgrDGB/R1SFOC8YwA4oFAawh1j/l6KA4q0yRkVhTzFT + 6IqhEg+MVnlhssEfE60BGO8IxGh3APq7fdDZ6YHmNhPqmg2oqdWhusoBtWwP1eXkcmVKlFLglJbIUVpo + i5JCaxQXWKE43wpF+ZYoK7JGNeu6oU6N9lYD+rrdMdDvgfFxP8zOBGLxokDJAJ6c8EZ/nxOaWLdfN4Br + qmzQKKaRbtOhr9eE4QF+d9hHMoAnhv0wxD7Q3eYiGcFtjQZp/d929tX2RifJDG6pM6G13iQZwL3t7hjt + 9cbUkDB9Q7BkKgSzY4FYMhmM1YujsWlVArasScLGlbFYtywKa5ZGYBXb8LKZIB7vh0WTftLUz8tmA7F8 + LkQyf8U+sSbwHD+fG/HF9KAnxrtdMEBu0tPsgJ5GDfqatBhqozhiLOhukKOtzhZdbL+9LQoMtCkxwDY8 + xP4/3KnFGEX7VL8zz+WGpeNeWDFJoT7piSXj7pgZNWFy1ICJEQEtpicMWDLrguVLPbF6mTfWr/TDuhV+ + WL3EE0vJ2yYG1OgmJ+pskKG30QJDrXZY1O+EZUNeWMmyWzUcgrWjMZjrEFP9GlBEfp9C0Z/qKUNOgPgR + SkwN7ozRItZVRTCW1LIs6kIwXx2A6VIPDOU7obeIdVpuwkiTF8Y6/THcFcj68JWmt62vcEVVPttsmhHp + 8TrpR4FATzt4mywQxTZcnR2DyaZSLO+sw0xdKUZK8zBWkkcxWYCJSmECF1HsFWO6pvw/DOBmrOzrxerR + Ecz29qAwLQnOOrVkACvsrGBrLYMNIZdbwZ7vLa1ksCKUKjsJ9vaW0j5LHm8jTGK5BfdbQK2xhkZrBQcD + dZeTLYzO9nByVcDZQwUX9jcXT+o/PzV8gw0IinBBWLQ7ktKDUVyRgpHJVmzbvRy79q7ETm4f2LUM+7bP + 46Gt8zi4ZRkOb5nHoc2LcWTzLA5vnsSRTWN4ZP0gjq/txOl1bbiwoQOXN3bi6Q0teGJ5FS4tq8CV+VLs + aw/Ctho3bKRgXV+okcyO1fk6LCt0xGJqtal8o/RDhFj3sTXFHnXxlqiKZ/+h8K+ItURFlCUqo61QT9Hf + mKJEQ7ISTWmML7lG9Je4SQawMH7vQTKAidEqf4xU+6OjiDwiWY38aBtkCv1H7Zcez7gjpuVkbhEzSiRK + fyxSIoX5JS1GgSxqQzGtWm6mDrnZOmRkO7CcFIhPtUdiqhyJKQokJXGbKEdyqgrp6cL4ZfzisVnih0qB + bKNkBqckKe4bwGIKaLMBbDZVqwv1aKvxQHutB7diBLAJlRT3JTlyFGSQ6/B6+SyX/IWpncVamMm8V2H4 + CgM4KtQScZIBbI+kGDlSYhXmf/sniOfjcyz8WJLH5y/lvZkNYHfUF7mgtoBaNkdM/axBKZ+hmM9UkGCL + 7AUDOC/FDoV85pJsDcrzdKgsMPB+HVFTQn3NXNuwMMtWY5UHGqo90MjnaKgV6wB7StuaKhfUVThTf7ui + rdyV9WBCe85XBnBDFHN9tAUGE6wxxTJZnG6HlVl22JLHPFzMnMicfbJGhwsNejzb5oQfDnvgf6a88Mtx + J/xsTI+3xnT4/qQjvsvY8fK8Dx6fdsfhQfKaDjU2NCmxvkGBtfXMwzU2WFZlieXVVlhVa8vPVNjGfLi7 + w4B9HXo83KHD4U7mO+br05IBrMTJDjmOdihxsEuNfT067Oo3YDvz5FZq653DJuz5ugHcbcQBYSYzvu9n + jBQm8E4xpXONPTZX2XMr/68G8GZh+lbYYT3z9oZKYQCLUcA8tkGN3TzXgR4TDpJ77ud2T5cBO5mvN/P+ + 1zKnrOfzbKpXYAvz0bZuV2xkTlrd5oolra6YbBMGsC/G28UU0KGYEtM/t8dgvDUaA01h6GgKQmtzIBGA + 1pYAtDFXtncIszdIgjB/2wQ6Ce5vbeexPKat2R+tTX5oqfdhPhIwG8DdDV7SqN/BNsZOYqDJB911Yk1f + Z/TVuWOklbmO9yPM38l2b0y0eWO03ZPwkgxgcUxXlXn657pijWQAC9TydYMwgHMdpBFafbmGBQNYh9ks + BfmGBUbFn/cSZJgnf9tGPf9wux7H+1y5ZXmx7jez7jeznDa3kNs0a7G+SYe1tXqsZtuaLyVXK7DFSB45 + tRgJXGJL/qTAfJsBa4QB3OOCrT2u5ENO2N6sZ505YEuVBhv4vVX59liabYNF6dZYlGGFpTnivZ2ERVm2 + hNgSfC+M38X8fG7BAJ4m51yUboFl5LurxIjcXHJnMRV0ifgxzxkrCo2YzVFjONUOXUnW5MREJvOY+CGT + MaOV+5vjrdAUKUN7FJ8/2Rqz6TZYnGEtjUheRe67Po/tTowAFj8ONnhiL/vjDsbfrflqbMtUYFeWEnt5 + zf3MfQ+WsO2W6nGghBDrb1casJs8eXOhHOt4rh0VGp7DCUfYrh7t98elwQBc6HTH460mPN1hwndYRj8e + 8MTvyR/emwnA++RCf5n0wnvM+e8w57874YHfs6/8pEOD19knn2F7f4Lt/my5AgfJxXeSc63J5TOksT5T + bNAjlgGItUVFtNkAzhYjrWI1iGBsDoxQmg1g6ipPXw28CG8/B/hRa/13A1gYwyr4SlDAx08uwS9AGMBq + +IeoINYUjk5wRmySK6ISHBEVZ0B0vKOEqHgDoUdMoljb1xUp1Kcp1KbxqeJ482dRYnpqMSVrqhOS/psB + nGY2gDO4PyvLBblZzpKpJZasy01n3M1RmQ3gUjXjpArD1Q5YVMd22iTW9hMGsDsukDM+M+yGlwad8eKA + XjKAv9Wnw3f7tfjxiB6/nzLg3WkHvDurwTszGvxhVo+fTPG4QQ0uMKY9LDQaY8sk2/twlg0G2UaHcqwx + lEfkW2C4mO2/zAqTlbZY1qLHGtbrph5qPdEHvmYA72qywf56SzxYY0EdaYlDtTI8UmeJk43WOEM+eK5V + jgvtSlxk3HyiW4sne3V4mtriqV49nmQMvUI9+uSwI64whl+ZNOHyhBMuDDHOd9vjZKcdTrTa4Gy7DS52 + KyQD+NvjLvjRlDt+Se3x6/kA/GppEN6Y9cFL4264wvM91qnGGWqqM028LmP4k0MGvMyc8PKUgAEvjGvx + /LCKOpjtbkSB58SMgDMGPL3YBZcWe+LsYj88NB2EjWKZGLbvjioxkMgOKYkyJDCuxMdZIDbaEgnkI8IQ + Tktj/s60RSH7c0UhuQjrrLlMi7YSDdqEAUwMluokA3i4SI+hQi36c5SSAdwh1v5NtUQtzy0ZwIxddWzz + bXliDUk5uovNBvBshQ5LGZ9WVDpgHfvelhIVdhYzJ/LcD+bLcapIhceKlDjP/RdKFbhYao8r5XZ4mjrj + 2WprPF9rhRcbrfBSiy1eabcn5HiNevSeAfwj1skPWR+vs15eYXt6lnr9HHXiwS5n7GpzxspqHcYZ3/oZ + 1/p5zwPpAgsGMOPXNwxg5unlvBeBFSXUv8U6HmuP+liZZADnSwawLTmXAslimlxqw5ho1TcM4KhYpYSY + BQNYrIkbH6NEInlZMvlZTqYT+4xJQk6mQeJU6elaswGcxuPu8TDyrDRywwJytiKiOFOLcmEA5zihkXys + kd9polZtFltynhbyNbGtTVOhkvynIkWNkiRyvljyqDDx+47ZAA5dMIDF1M2h5C2Rsfbs88IA1iAhWcPY + oGD8kCOO341PUiM2RcP4wM94HYEYcq/wOHuE8LvCAPYLlkkQBnBgsAUiI+3YvjRITdJJSOBzx5DPRUeI + aYptEUXEkZsmk/ulpxiRlSYMYNNXBjB1sDCAw0OtER8tJ2cUa8c6oaHAER0ljuTHJoxVOGGc8X2MOXWE + /Go41x7DjO2TbHtr2dZ2NTmTtzhhT4MOe2oUeKDaFvvJlx6qtsAjNTKcpf56oo3tq1uFl8iDLjVrcLDA + QhoBPB8mw0rW92bGlX1FOhyrdMHpGnecrvPEqXovHCgzYn2mDWZ5zHiMDBNJFphkzhJLwYg/LK3NtsKG + bObvXBkeKJDhSKkFv2+LxxrluNKuwaU2YQCzj3Pf8SpbnKFOPtPljYeaPbC8QI8WtrFiHxlSnGWI1MsQ + 5SRDrDv7rg+5sb+VNBo3QBjAYhQw69PfzxJBREiANUIDbQk5woPliAxVSIgOVUqIDWNbDVUjLlyDWCIu + Qhi/YlQw2zHzUIJkAIuZdozITDYjI8GAZDF6OFSO2EAbswEs4G+NWH8bRPtZIcrXQtpKBnCwNTKE3iBn + z2EbEsu1lGbpqDkdUScM4GIXVOQ6SjP4ZLN9i2mgk2JskMS2lBJvj3S2N7HsS066o9kAZq5JS2S/iGP7 + lAxgXjfCEolRtkhju5UMYOoIMRq+i+1/MFODCXKNpQVarBVTQBeYDeBtbBc7Cuyxm318L+PNniK+Fvsy + rbCbHOMBcp+DRXIcYcw6zNj1UK4N9mZb4gHGhX3FDtjDGLiF51vNc09RS/RHMc6xzTcJE1hM/yxG/8aZ + R/8Os98MEj3USB3M+818thphABOlMRYojjNP/ywMYDEV9r0Rv7nsf8L0lQzgeG4TNMhOUCKf74tZjpXp + DqglGjL/wwDm8wzxvodLyLEYt0dKtQtwwADvvTdfyZhsz+/ZoJrPW5Flj7I8FUpyGVsYy/PIxcSSOAVs + v8WpFqjMWDCA2X67yWO6c60k9OZbo0/MNFhod98AHi9TY5r9bapaj+l6E8aJfr7v4L005tuhMssCRaky + FJEjihHA5WnMFbyHRmH+8r57GW9HeY+zpQasqnTGRva1reUuONwajOcX5+OXu7sgS4pxQ1qCJ3IzApEv + RgAn+7HBuEtr5wb5kTh5iKmebWAS60UZZDA5WsHFZGuGsy3c3MTUlSRT9wxgX0d4emq5XwMXF6Vk+krr + AX/NADY5KaXRvWJrclLDaFRKBrDWQUwDLUYCm01go9GO31NJBnBwkCMiwpwRHe7KzqiDj6ccJt6Po1YG + F96bt4cc/t4qBJDkBfio4cfXwhQODzavASymgJZGACca2AnY+MU0WRkOKMkTItWFAtUDTZVeaCjzQCWT + gDCAs6JskBn+NQM4RY8aBtVqYQIzKZUyoAoDePBrBvBYeRgrkoInnedM0KM6kp0oXCGhMswe5aE2KAlh + g2CHT/WQSVMRpHtaSOvUVTPgCAN4KlSGdQx+R9hJvkXx+faENz5dHYG7wmg9mgGcJi5lA89m4/ZzWbj2 + VCquPpGAL87F4OOjgfjHA+7480YD3lmlxR9WaPD7eQ1+Q6L360nxbz8n/GnWnfDAH6fd8EeSqz+TOH04 + 7YFPZ7zwJQnTjRUhuLud13ooEzhRCGmdX2ECP1sHPFMLXK7kPXD/4RxgbyqwKRa354NwddoLX5AkfNqh + xYfNdvhHnRX+VifDxz1y3FxkxJ31rsBOD9w54I4bh0y4etCAzx5S41Pik4d0fO2ILx52waf7XfHJTjd8 + tImCYFaHn/Xa4bUmC1yukuF0OUkkt0eZZM6RBF7pV5G0qfGdSRV+OGOLX6+wxl+22OKfu+3x0T57fHlQ + g1sneO2zvPYFH+CiH/BEALdB0tqt106E4K97ffG7da742TI3vLXIA9+f8sCLFNNPdpH4dbjicocLztYz + eBXLcIrXf7ZNhl/MKPD+GiM+2eKCz7aZ8OVuZ1w/4IFbR/xx92QwcD6cdSRGh7Icn06UtneeTMLn5xLw + 3oFg/HiDE15Y5ICzJOi7KfaXMkGOpFOgsc7HSd4mGWSmKa7mah2xrFGYKE7YQIK/uVGDjRT26ysssKWa + yXZEhu+tscWf9zrj6lFf3DjsieuHnfH5URP+fcYVnz4fii9+mII7b5cBf2+7bwDfvTuLu5jHDazAdazE + TbEG8N01AN/f/XIRrn4whk//pwd/f6kcfzyehDfWueGFMZLHPku8OKPCjx6gcHsqA1/+qAJ3364H/lAN + /KYA+CXb5o/icePVEHx+xRufPeqOz06645NHWJ+H3fDPgy7452FX/PsE953zxeeP++PzS0G4dllM/xyL + O5cScfV0LD46EIK/bPXBH9e44HcrTfjFEgf8dE6BXy2jYFlnxJ83OeKvW53x8U5XfM72fv0htt1Dbvj3 + YUd8dNoZX1z2xLUXAnHttTDc+D7P+/M04Hd5wHulwF/LcedfNSwLtucPuX2/HPgT2/iv83nv7FevJeLm + k2wbj/rj2kn2h5OeuH3aF3cf9cPdx9h+LgYCT4UBzwvjdwEviW0E94Xg9tP8nhjV/Lg3bl3ww83zvmYD + +LQJt8654PZjTrh9wYCbjzvg+iU9rj1pxLWnnXm/nrj5rUDc+l4E7vyQfepHmfjyzXL8+wet+J8na3F+ + VyZWDASjtdyTccsH2bkhkombUpKKpAWI1ynF6UQmUopykV6UTxQgo5Dg67TCbKQVZSK9OI3fTZEM5PSi + ZCKV+9PNo4SFaVxcjDQila9Ti/OQViqQQ/D7EsTrHLPRfA+lX01B/Z8GcJIwf/8Lksuz/ivMBnAW0soz + JAM4oygGqVmBiI4xkeSKtTS0KEw1oYoEtzLZCSUJAiYUxhmRL00DrUSGWH+dZK04SoeSSAcUBtmj2NcS + pV4yVDD2tpK0ry2xxdlpPd485IsPXgrFZz8Nxhe/98W19/xw6wNvXH/fCVf/V4/r7+px84863P69Hnd+ + pcftn2lx403W4Q998Qnb+jvnAvGdbd44MeGJGRLnUhKp1GCSyiBLxAaR1H3NAA4WuYk5U+Q130AjCb4T + /IOMCAzSIjxITSJIUhlAUugnJwEk0fQVI3/ViOD3BMTo3yBPe2kd4EA/GwQHCANY/IOQ+YTENZ15pICC + oZZkd2mOEbtrvHGkzR9n+n1xjnHtPMXyU1NGvLjIiQLXEc+M6/DUEMX2gBOFuDMeZaw5We+Ew+Lf/MSe + KgO2VmuxvsoBq6rUWFmrwcp6B6xs0kpY12bA+nZhAOslbOpywo4BV+wcdP0/BvCKFhVWtqqxmmR9bReJ + 34CLNAr44QkfHJv2xskZT5ybdWOdOOPchDPOjppwot8krW31UJcb9nV4YHWVXppqqj3FEu1pCumfuS2Z + eooz1jOFT7YwgCM0SAxXIYVEPEOs2x8rDGAlapNI2CgGR4qdMFPhjLEiBwyRwI0UyjFOwjRV7oDpinsG + sJZETPwDkKI2R4YexmcBYQAvrrDD1k4TDgyLkUR+ODUTiMdmA3FhLgAXZ/xweTIAl8b98eiIDx5sd5QM + 4PlCGZaUWWO+Vo55lsmSdl6vWY5pCu6l3RrMdxJi1GKtDeYpqFZUWmBNpSU2EJtrrLC93g67m5U40OGA + Qz16HO3V4lCnEgc7lHikT4dTo654dFEQLiyLxGMronF8UTC2dWmxqsEai5kzZytkmCwjyq0wXm6HiUoV + phu0WNRmxIpuE1b3uRGuWNLG8q20lUYACwN4gvcrpoVe2XvPANZjnTCAu+TY3m2HQ8NanJg0SgbwmUlH + PLnMD0+TD1yY8MXpPm+c6vTDkWY/HKjzxaYid6zMdcWiTArNRB26IuRoC2MdhmnQFK5HHXladbjZAC4P + c0FRsDNyAwzI9NIg3Z192lsjmb8ZvmJaaO5zUSOL3DLHQ4uSABMqQ5xRFWJEqb8DCtg/8rxsUMD+URnN + NpLhhJ4iTz6bH0bKF4wg3tNwky8GWnzQ2+6L9jZPNLW4oKregNIqDYpLSeZJxitI+EuL1SgulqOQbaWQ + gqcw3xYFeTx/npWEfBL54kJrlJfZoaZagaYmHTraXdDd5Yr+fg+MjnlhetJXmgJ6atIHQ4MuaGdfqGFd + 3zOAa6vt0Fiv4H1o0dPliIEeZ4wPeUtrEk+OChM4AIPdnujheTubnRbMX0e0NhgJRzTVcFvvKBnAfewr + o70+mBryhxj1u1RM7TwZjGVToVi9OALrl4mplGOIKL6OxJql4Vi1OATLZgKwiPe3eIrgvS7iVjJ+x30w + OeSB8UEzxtheRtkvB1sd0dWsRVstxVO1Eh2MDX1830fu2tXIfXX26GhS8J4U6GlRordVhf42HQaI4Q4D + xtj2JvtcMDPkjrlhV2lU8LhYP7hXjaE+iq9+iq9Bij9ifFiFuWkj5he5YO1yL2xc5YdNK32xdt4TSyYN + GO2x4zmtMdJhi/EuJRYNOmHpkCfmh3wwPxiEVaPRmOsORzsFc3EsOThjZaq3DDmBliiPlDOemDBayDoq + C8CSyiAsrwnG8ip/zJS6YjTPQIHG+y43YqzJA1O9ARjvDWRdeKO1zgW15Y4U48xDmeLf1QaKbx2CfGzh + IxnAWtTkxLC/l7Kv1WGuQaz5m0eRl4fJygLJ+J2sEmv/lkqjg2frqjBXX3PfAF7V34c1Y2NY1N+PqoJc + BPt6Uo9pqaeM0Ok10OrVcHJxgtHkCIVaCblSDr1Rz/cGqLVq2NjZwMLKCtZ21rBX2kKusoFSYwsHnR0c + DHLonOQwOivh5KqGyV0NZ3dqNQ/qN/FnW/a/AGqvkEg3RMR5IS6ZWrEkEU0dxWhsK0RDUz6aG/NYBjno + rM1FT20eemry0F2dw9eZ6K5JRW9NMgZrEjFRn4BFLYlY3ZmCTd2pjKHx2NwcgT1dsTg8nILdbYHYVueO + TeVO2FSix3qW99pCA1YUm7C02BnThU4LBrBY31eO2kRrVCUKE5j9TjKBrVEZb4v6FBWaeUwzNV5rFtth + gQl9JW4YKPUg3DFInTdY5kl4E16Mc9xW+KCjUBjAWhTE2FL/2SIzWvyQwhwizNQ4MbWb+Fe/BkmRaiRF + qJBMDZgWq0JGMvMO6z0722Be9y1dhbgUBRJSFUhM5XG8HzHlcxpzT0a6FpmZOmRl63m8431kZRmRmqz8 + mgHMe0i2u28AVxXq0VThipYqVzRT0DeUOUkGcHGOvfQjQ06KOFYpGcBZfIbUGBUSeX/x4WKKQGtEh1nx + tS332VPj2yNFrPm1YABn8rq5vD/xo5JAMXNqDcusodgN9WLqZ76uzGJM5HOViPWO+VwFYurnBQO4gHm4 + JEuD8lwdKvMNbKOM44WOqGaeFagrc5FQX85z8RnqKt1QV+2OxroFA7iS/YfP01guRne6oqPAGW0sjybm + 66Y4ezTF2KAj1grDvOZsuhzLsxRYnW2PTVl22JFti4eLlThRrsHFer201uiPhj3xW/KJ35BD/Jpx4edT + Bvxk1gnfX+qBlxe74wJ175F+LXZ1iGl/NdjaosGmJiXWMseuZv5dU2eLtQ1ybGp2WDCA9djXrsPD7Voc + Jnc53iUMYA1OM8ac6rDDsQ4FjvD9g/1iaQgDdg85YefC9M9i/V9hAO/rXzCAxXTSjHsPdRqxt8UBuxtU + 2CqN8LWTjOCvG8BiOmHxWoz8XV8hdB+fuVJhRg2Pa+D3yb8OMA4/3OeOfeRvu9vFKFQ1NlTxOahX1woO + UcfztwgD2AUbu9yx6r4BLKaA9sN4ewAmhAHcEYXJ9miMt0Shtz4EzfV+qG/wQ0OjLxqb/NDU7C8ZvffQ + 2hmC1nsmMN+3twdJBnB7S6DZBG7wRVs9UeeF9lov9DR4o5/nEubvWHsghlt80V/vxvjgjIFaF4wwrk62 + ey2Yvx6EJ8a4HZMMYA/08pj2Skc0Uh/XCAOY/K2GqC1So6FAjaZcDdpyHdDPWD2eb8Rsvh6z2QpMCcPw + awbwTpbHIdbDyQE3HGJd7KqzYxmznGrtsIllt57les8AXlWpxRJygCnJAGYbLLLFRAXPWadhGRqwkjxw + Q68Ltva7Yzu321gfW+q12FytwWp+b1meHWazrDGTboW5LBvJ4BVm76JsG8xw/3SmNaYEMngMP5/l/tks + W8zx+OlUGbcLBnCeCmvzeV+MA1J8rHDBiiIjpnKYU8mFG2PIH+JkaEy1Jh9mLmPM6Ewnl0iyRgc/6yWm + Usx/nhCjkZcTYv3fdTl89ny2sxIDHmBs2c2+uL2MbajQAQ/ka/Fgnh4HS0w4WGrCQ2VG7C81SDhQ4SgZ + wLvKtdhYIMeKDBk2FdpjLzXDoWZXnOnxwWPd5H+NTjhV44AnmvT4dq87fjzsjd9PBeB/yVXfJ1cWBvCf + pzzxv1MeeG/CHb/pd8T36m3xbIkMZ7NlOJErw+ECa+zNt8YWcq4V2daSoT+SaoueJDtplqNK5nJhAGeJ + H9rJ9cMZ9wLDFZIB7EVd5R2gkyD+cCv+bOsbQP0VqIN/oAMhTGAxJbQDfPyU8PZRwNvXHl4+Zggz2E+M + CA5RIzjcAdHxZgNYjASOijdK23uv7xnASQsGcHKGG/OACZFxeoSRg4YKMytBx32OSJCmgV6Y+nkByakG + CWmpRmTys1zy5NwM8WO9A8G4yzqtZDuvLxEGMPkROeocy3Y129tOlu8j3dR35GVPD7nixSFhAOvwYq8G + r1ArfLvHAT8a0uP30454d0aL9+bMJvCf5vT4xZwBr0/o8fQo64rlv61Ng6WVcowK45fxVRhAY0X2GCvm + VtIOtpiutsd8s45ajvqG193C2LKVfWpbm9kA3t1oiwO1Vniw2hKHamQ4VGuBo3UWkgF8tsUej0oGsAIX + qWGe6FLjyR4tnus34Pl+I15g3Hxh1AUvTLpKS908TTxFPDHmiDN9KpxkzD3eYo1TrVY432mH56lfhQH8 + 1qQ7fjbjJY0C/hU1yBuL/CQD+GKvDmfIO0/UMV43qHltHS72UPuSHz7D7z4zzGcf1OJpcs0ne1S4Qt75 + 5JAGT44ZcGmKZTojtGkg9o+HYONgCBZ1BaK/yVta6zEt2QpxsTLERMsQHiZDNLfCEE5hn8xKt5EM4PJC + pVRnkgFcyhhVpEQn0V+ixXCpHqPFRmpSAwbz1NIU0MIAbkhmf14wgGtT2K8ZIyTzlzFFTAE9zHw3XaHD + ogoHLGVbWFWuxMZShTQaf2eRAvt47HHGyLNFKpwtUeEc9z9aaofHWX9XmGueqrbBc3XWeEEYwK12eIU6 + 8hXmsddYJ2IK6De71fhRjw5vUmt+v8+I14fd8cq4N56gBhB/NDhAHbKuzhET+XL0pVqgXzJ/zTCPAKZ2 + FDEtl/GG+Xl5mRrLuV1WKEYDqzHHdtyfZod6xqWyCAsUit/ahQHMvpsUqURMlArRUUpERiu/MoBjFBLE + NNDCABZr4sayzwsjNClBwz5DDpbhiJwsk8TH7hnAKenCAOYxyTw3If5ol0pukZumQUG6A4rIy8rIFe8Z + wPXcX5+qQQO3Dfy8MU2LOr6uJEcqSSQfI2fKi5VLHDEpxFL67SWUCAsmwi3JlcXavdYIj7YzG8DJ5I7k + ZXFJagkJqVq+F6YvuSLvMZncKpl8J577ohKVCCX//G8GcATLJ04yu8lHCfHcsVFyCVHhYopiG8SI8ovX + IC2JujnVGenJJiTEm6eADgkyG8CRYdbksfbI531UkrM2kbN1M/6PMqZPVzphtsJADaQl39ZgskBFKDBL + iD9DbW9yZqxxwu5mxv56JXZV2+IB9vF9Vezj1TL2LwtcbLdlP9bh9UkPPEfOc7zUGtvZhpdHyLCKOWrL + ggF8tNyEE5WuOEEueLzGHQ9w3+pUK0xGyjBMjCVaYII5azrNFovYJ1ZmWmFtlgU2M4fvypMxJ1nw+1Y4 + XWONi2INYnK5C40KnGMeP1Vjx37uiLOd7niowRUrctVoD7NAhZ8MWe7so04yJLlaIM2XPDtYjoww1lOQ + JYJ9WNYLJnDgggEc7G+NEH8bhATYI1Qs5RZkRmSQXEJUMNtoCOsiTCNBjAIWU0HfWyM4gXFfzEqXnijM + X7bPNGdks17SY3XUEWrEsl6EARwbYHMf0f7CALaUDOD4IGsksW4z2eaFAZydYB7dWpRBzp1jQE2hCbXF + LqjMNX3NABZr+7J9sg2mJanYFrTmdbKF+SvBgAxpGmjlfQM4hm3XbADLkZdEfpWul/4M0c7+0UuOP5qp + xJxYsiKfnLRAiU3kNptzrbEp1wbbCu2wi3FnJ/PEduaLjeQuGxnDtqXLsL/AHg+x3z/MmLSfx+5iHW7P + suTxKuwo0UlrCi8njxlNsEQ3Y4GY+rkpVIYWtoHuOBv0J9pjmBpllP1IMoCpCdpjrNEQbY0asfRPjCXK + qP+Kqf2KFtb/zWU/F0vaiOmf8/g98yhgNbLjBTSEEjlx1EvcliarUZNKDpkhDGA1uvM0GCjUYojxeajE + AcOE2A4Wf4Ve8qMu3nMLuVk941xFmhXKM+1RxvIp4f6C7P80gKlPWSZmA9gCPQU26COnFBCm7yDLbbBY + LuHe9M9iDeAZxtg5tt9JYrDKgI4SDZpYjtXkQWId+lJCmL9VGRaoZ65uLWT5lOkwVKHHdLkjlpEnbmDf + 2l7tgR0VbjjaGoIXFuXjVzs7IYsNd0JCjJgn3htZqX5IS/BGXKQLA5leMoC9PMUUzraSAexokMHJaAln + JxsJwgB2dVXAy8sBfv5GyQD283Pie51kADs7K6Rpn4XxKyBe/6cB7GzS8LXqvgH8lQlsA4PBRppCWkwB + LUYAR4aKH/+dERpE4uajhJeLDdyMFnBxlMHVxQpeHiRr3gr4eskliGOC/R3YUR0QEULiRvIm5mRPS9Qh + k407jw27ONeRwtpEMUEBWuRC4eqE0gydZABnR4s1gL8ygKtSdaglSatNpsCN1aCMyamWHXqwJBjTtTEk + RREYLQtBT64XmlNNqOMxNQy6teFyCVWhNqgMsUJZsDUK2aGzGGTSvRmM2MkLfWWoZMDpYqCfCSeRjpfh + eK4lvtOmxR8mPPHpmnBgdzxwKBU4mYK7j2fgzlOZuPlMumQAX7uSguuPJ+Dq6Qh8djgQHz3ghX9tc8MH + m03433VGvLPCiD8uMeLdxSa8u8Qd/0u8N+eCd6dMeH/KGR/NeuCLxV64sdQXt1aG4s6WWOCBZOBgJnA0 + G3dOF+DOmULc4vbWsRzc2p+COzsTgU0xuLMyHFenfPDpoAv+TaH8z3oF/lZlhQ8oPj+okOHDVltcm9Tz + vCae1w2397rh1iFXXD/khOuHDbh2xIirRxxx9agrrj3iiauHPPGFGNG5zQsfLHHEbwZV+H6bDZ6uscDp + MiYZCoMD3B4leTnbQgJJ4vJsrz2+NWSFXy61xfubFfj3HiU+3a/A1YNq3DxuwO3TzsBjXmYT+IIfEYC7 + j4Xi6rFg/O0BX7y93g2/WO6Onyz1xltzfvjOmA+e7XHDlQ53XOl0w2ONGhwtscCxYhmuNMjw1rAt3luu + lwzgz7c64ctdYhpod9w87IvbJ/ylc99fB/gp1ttTcbh1OQGfnYnHu/sD8Rbr5NlZFR7p0WBTtQIzYmop + CqgRkqVRduAxBp4RduIJYQLXOWE5E+4aJtx19WqsZcJdU25JwcpkOyLDd1bb43/3ueHLYwG4ftQX1466 + 47NjrvjwrDs+eSEMX/4oHXf/VAH8vRX4uAe4Now7d6dxB0txE8tx4+4K3L69CpCwDHc/mcHV94bx8U87 + 8L9PFeF/Ho7Bt5Y540q/LS52W+HpcSW+u8UTv380ER++XoTrP68Cfkv8TyHu/jwL+FESbn0rAl8+6Y8v + zvvg81Pe+OSoBz4+7IkPBY564eNTvvj8sSB8+UQIvrwSihtPRuHu04m4cykJV0/F4t/7Q/C/m0nk5/X4 + 2VINfrxEiR8vtsPPlyvwm7UavLNJi/e3GvDxHmd8cUCUuzeuHfPAZ8ed8MlZZ1y95IHrz/jg+ovBuPma + MFTZVn/Fe/tjEe78bwluvV+GO/+oBP7K7TsFuPubHOBn/Pz7qbj7QjT7UoA0dfPVE564foLnP+WJ22e9 + cPtRb3P7uRIMPBdmNn1fWsDLfP8y+86Lgbj+lC+uX/bB7Uv+uPU46+SsK7485YwbZ5xx85wjbj6qw/Xz + aty4qMW1SwZcvWLEl8844/rLXrj1eiDu/CAMd95MwrUfFuGj7zfgN1cqcGFnClYO+KOdQbw01x05Of5I + L4xDcnEKEhfwDQO4OBvpxbmEGAkskIvUomwiE+lF6ZLpm16cjFQJqQT3ieOLColivi9GSlG+ZCSnltyD + 2ez9rwawQOn/jw1gHiMM4MziWKRmh1BYuTOOk0xHqJCbqEdxokFa9zc3Uou8KD3yYgzIjXJAVogCaSRs + GSRpRfysmGQsL9BOmg42n+SvhGhgvF2aa4XDQ0p86wFXvPNMMD76cTA+/60/vnw3ADc/YL29b8KXf2GM + ek+PG3/S4tbbOtz+NfFzDa6/5cD6ccEn3/LBXy7644093jg97Y5FTN5lkRZIDrS4bwBLBM/fXprGOcxX + gxA/AwL9HeEX6AjfIMf/YwCL0b+xvgpEM4dF+Cgk4zfcSyEhWEz97EX42CFAENNAG36PRNGfopPIZw6p + irCUpkjZVOaOQ03+OE3BenE4ABcH3fDogBZPjGjw7KQOz0zpJZF7edgJF/udcK7DCSeanRhbHSncjZL5 + u50xaGOlDuuqdVhZrcXKOgesbNBiRZNOwtpWxqU2YQAbJGzqNGHHgNt9A3htmwarmigAG+SMYwqsIFFf + QTG+sk2N9V1GHuOEvUNuODTujhMsv7MzxJSLZACfGXGi2HTC4S5nPNTpir3t7ljDexnLtkFnsgU6UuVo + SxdTNOko2nQoS9QiJ1qNlHCKPRLy5DCxlANJHsWjMICrSZybU+QYyNdjsozitZgCPJ/ElsR1nOJ0quwr + A1hgvExJYW6PoXxLDGTLMJDLGJ3PHF1qg/UtBjww4IGDI944MemPs9O+eGzaBxcmKZLHfXFx1Aen+t2x + n2UkpoAWBvAi5pAlFCZLm1VYzOefZP6abJNjUZcaSzopipvsMVdrLa1FOF9pgWXlFljBPLqmwgIba0iy + KW528nsPtKmwt9UeDzRRfBH721V4uNeAwyPuODblj2NzITg444cNnRosa7DCHIXZLPPFpDCBFwzgyQo+ + L+tytkWPZV1Okvn7lQFsh94i2X0DeAl5yKo+R8kAXtPHOu8VU38rsKNHjsNjepyccsTxcR3LwISnVgTi + meWheHzSD2f6WQZd/jjS4k8R5o+dlX5YX+yN+Rw3TCYb0RFuj5ZQezSHqtAYqkVtpEEygCsjnFEZ7oqS + EBe2ZwomHx0yPCmgvNSSCZzmo0Gqhwpp5JWZLiT0nuzjgc6oCOH3gh1RQu5aQC6Y72PPcyhRn+xEwu2F + gXJfaaTfcKU3hqt9MFDrhb56b3Q1eqK92RMNja6oZtsvqdKioFSF/GIVCilSiimEiyiE80m88/IonBeQ + l2OHPAqaeygkqS8ptkNlJTkfy7ZZGLRtLujsdEb/gAvGRr0k81fAPA20HvV1tpIBLFDHttHcqERHu27B + ADZhbNALEyP8zpg/Jkf8MdLng/4ud3S3OaOzRRjAwvw1oKXeiKYanbQVBnB/p+eCASxG8wZJBvCy6TCs + mAmXpnpesyQc65dFYMOKCKxfzvdLQ7FyURCWzfphybS3hDm25alRd96DK6/rjEG2k/5Ox/voY3/vbtKj + tU6NRj5zU4UCrTUa7tOhi+2qo4l9s17Je+QzNal4X2ru5+etOvS26NDfbsQwY85YtzMmelk+vUaMdFPk + ddrzGe3Q320roa/XmrDBcD/b7Rj7ybQeK5e4YONKX2xdG4BNq3ywYo5CaVSN2WElZsgZ54Z1WDzqgqXD + nlg84IVF/X5YNiLWmIxAT7UXyigoMygy0wNlyAm2QGW0Am2pvJdCPneZP/tfIONdIFZU+mKW+mAsT4fh + QqLciIlGN0x1+WC8xxc9bR5ornFEdaleMr4qcp1QkOFILaVHiK8NfEwyRPk5oDY3GjOtZVjd24AlTeXk + dvnsg/mYri7EdE2phJm6MszWCwO4UjKAxRrA9wzgdZMTWDE+xnJrRlEe82RSHBKSEhAeE4kwIi41CTHJ + SQgICYaHjw/8ggIRFBEG78AAOLqaoDZooTE4wMGohVKnglKrgNaghM5RDb2TGo4uGpjctITYEu7UbF4a + ePrppD8pBYa5ICDUhed04zW9EZ3gIxnCEdEeiI7yQCz7a2K4O2Ouh4SkUDckUa8lhjrytQFp4XoUJVBr + pbmiNZttnxxmON8dIzlOjIuu2NgYiO3N/tha74HN5SZsKjFiHct7TYEey4uc7hvAQznsGxkatKYpUJNE + TZVkhcpEG1QkUIQn2KI6WSwLwM+z2f7yHNFZYEIPtZ2EAmd05TuhW+zj6+4CV27dCHf0ljAG8LXZALZH + NnVfVgxjTqx57a5kbhPILQSSIqklxVRv4UokRTMOJTpIPz6mZxmQkqVHYoYD4tPVSGJuSpGmIDTj3uhf + aQQwc1ZmpkEyfgXE668bwCkJdshMZoxJk6MkR42qIgPqS02SSSpG/9aXOi4YwIr7BnBuKl+n8joJwvy1 + R3y4HWLDbCXzV5jACRF2CwYwr8FnTI2XI0No3VTGNt5nQSrjJlHM+69m2YnRvw3FrtL0z5W839I0swEs + tkXi3hJtkZsspjhToTxHi4o8vQRhAksoNEq4ZwTXlJhQxWeo4jPUVLpJ5m99jRtqK5xRw+dpKHNGS5kL + 68EFrSyTVt5LW5IKrfH26Im3xViKPZZkKbE6V40NuUpsyrTF1jRL7CMfENPLXazV4aVWJ/x42Au/m/HB + 2+QRb08b8dtZI35J7fvGEje8NOuCC6N6PNKvxT7m3N2dOuxivBXrvwoTeD15ygbm2fXkKZtbtPcN4L3M + gQ+1OeAwcbxTrP+rxtlOJU632/G9HEd7VHiwT4u94k+9Q0bsHPq/BrCYqvlBch5h/goc4HX3NmuwgzFS + mL/CCBbr/d4b+XvfAGY+Xl9ugw3lYqQw74uQDOB6B+xqMWI/udGDPe54oNMFO/l+C7+zrtIaq6mT1wpj + k+fczHi8lTxqE/XsqlYXzLe4YrrVSxr9O94eSATfN4BHmyPR2xCCZubsBvLHxmY/CU3M463tYvSv2QBu + 6TTjngHcwXO0tQWhozUI7WLEcKMf2ut9JfP3ngE80OSH0XbzmsNjbX4YbvTAUL0rhuqcMdbkLo1KnhBT + U7e6SxhtccNIK49pYj+tMaG14t70z+wTzMu1hQ6oK1SjPp8cgv1EGMCC300UGrCIbW9RrgozGeQ8KTJM + JMuwIs8CexqE9nbE2WE3HO0yYE+9PfW0BdaTY4myWi90doMDVpPvrijXYFGxHJP5NhjJs5b44ESVSuJO + i5r1mO8gJ+p1xuYBd2xlDtvCnLapQUe+psGKYgWW5NpiKtNKwmy2LebIGcRWmL9inxglN5ZuIWGS76eF + KSwMY96zWLN4UaYllufIsYbPubHEgM1lrF/2l42MAcuK9BjLkktLk4h1fiuFCczXTek2aM9UoDtdiZ4U + WwzEW2E00RqL0+yxIlOOVRl2WJ1hizVZdlibbY8NecIAZpstc5IgXu8o0uEAy/BwoSMeKXfFkQpXPFzu + iH0leuwr+6YBLNY5XplpgbU5VthRpsaD9eTtrMcTra44VKnBoRI7nKtV4TUxAnjYB7+dCsB7kgHsi79M + edzH/4674dfksd+ttcEzJTKcyZHhmPihv8AKu/KspHUgl2bxWViPgyk26GYMak2UozrOFsUxIl6L9UOp + lSLsERAmlwxg72AdfIIMEoT56+OvlQxgyQQO0EgQ5q/YftMAtpMgRgH7BqrgH6xBcLj2vgEcFXfP9DUj + IvarEcD3DGCxjSX3FOsFh0SqERwhR3isBjFJBskETkw1IiHFcB+JyToJyUk6aY3P3Awn6Yf6bMbBbMb2 + Isa+CrbzOvJSYQAPVLBtiz/lsq1tr9fiUBvbNPnU5V5HPNtvxPPk6c+TT71IvEqN8Sa132+mjPjTrNkA + FnhnsR6/XuqIH8454dVZN5wfc8buLi2WVcsxRn08wtg6ynKfEH2gTI6pKgVmahSYrVViqfgTMDngevJb + ofuEAbyjgzGpXY291DYPN9rjUL0NjjZa42iDNY5Ri5xqssG55nsGsBxPdChwiXH0qS4NXujT40Xe90uD + jniRmvSFcRfqVGc8O+OGp3lvYiTw+UEHyQA+1myJ400yPNpui2cZc79FrvfDCXf8ZNpTMoB/MR+E7816 + 47lhZ5ylZjoiZvFj/DxWpcGZegPOtTjiQpsBF1q13KrxuBhByHt/ot0B51sVON+uxPkeHc4NuuAE88nB + 4UDsGgjD6p4wzLaHYpDxraaU9cN+JgzgyCizARzFbUK8eVrozDQbFGTLUUbtIGYsaCp1QGsZuUmJEl0l + qq8MYPa34WIDhgsc0Md8LqaAbk61RL3o14kyNKSKdSPt0M1672e9D1aqMVLlQC1H/cb4tLhMxTjFnMX6 + 2VxKXca4s7dQgaOMkycZJ0/yeqdYf6dKbXGO2u/xKntcrrHFM6yb55us8JIY/dupItR4hc/9eocSb3Sp + 8KNuLd6iRvkh29P3hz3wypiX9BvCMfbjB7s8GCudMJm3YADzWb9uAA9n2GBc/KGFOmmezyri6IpStTQC + WBjAswVKDGVQM8RZoirKCsWRNsiNsKVelyMpQoGYSKVkAEdEKSQT2GwEf2UASyBnF5AM4HhhxpNbpemR + Rf4t+Nh/GsBiHWABwbPSklXI4mvxx7cC8p+SNA3qcshBMo2oTVGjhp+LbV0qdSlRleKA8mQ1OawcBfEK + 5MYqkBFhc98ADqOOCA+xQHi4FcIihAFshfBo2/sGcFK6jn2c/JEQZrB4n5QpzF8jUrIdJQgDWEwLHRZr + 918N4LAwa+l5E+PUEsTo5zi+FzCPAraRtuKz1ESDZP6mMh7FMeZEhisQHGheAzhK/BGQ/C+fcaUqkzqV + 2qa7SIuRcp008GhxlQHzFQYsZdtcXOSAxcUE62wV29vWBhO2NzJPNLOvM4/uYM7cVW2FB6pleJg42WiJ + x6nfnh/U49tjbnieefYMteG+TBnWs1+INYC3ZdqwfWpxmJzvWLkz84sz84szduazfSQxF7If9RMjPH6c + +Wsi1Q4zzGnzGdZYk808kGOJHfkWeLiUMaDCEqeZL4Txe7FFhcfJ4c43yvEo3z/G/n2uwxkP8Z5Xsh92 + R8hQx3oq9rVAjrcl8vzIXcO0KI0xoJixO4NlJ9blFQZwkK9MMn6/CVsJIQEEt2H+dhIihBEczLYYqjYb + wOEO0ijg2HAVwfYZzfYXq6YmNCwYwC5sd85Ii9FKfySNC7aTZgkUxm9coK0EyQT2I2/ndRNDbJFCLp8V + xzYbJ2Ydoj4R7VC02ywtKsnVqwtNZu3JOhVTQN8zgFNi5chkm8tKZb/4D2Sm6JBKrZDA3GkeASymjLZH + Rjz7RArbfAY1B3VLCzl/F7n3cLoc09kKLM9VYG2eAmtybZjzLSVszLfF9iLyV2KLMIDTZdiQKsNW1vve + AnvsZzx6iJ/tL7DFzhwLbGc9bi8k72X7WsN6X0IeMxRvgfZwGRpDzKN/2xhL+8j7xejfUfbTMT6HMIB7 + 2T/aoq2kmYFqY6xQFWuFcmqmEmomMQI4L9F+wfwVUH9lAIuRv/HqhXIkYuRSPy5OVLF/qyQDuDVbg648 + B/ST/4jYfA+DxVr0k4P1kXMKdDNWd+Qo0Zxlj1ph/qZaoYy8qpT7xB+18rOoxTKUkn4rSLNjfLFGGTlo + LculOdtsAA+yPIYYq0dKlRJGF7Yirk9X6TBbY8BcvTMWNbpjijx5mPy3q0yLFsbQWvLKsiwLVJB3CfO3 + hryoiXXSwZzSX2nEeLUJS6qcsbbaHdvrvLGb2FnhjqMtIXhxLh//s7MDsrAgLYMGyUcsCUuCBxuCG987 + soE7SAaqp4dcMoCdTVbSFNDCADY5WksQJvB/M4C9vfWSAWxykvM4OVy4FTA52kum7z1IZrCLAxydHL4a + Aayxht7BRoJBZ55u2tNdiQBfHcKCSLRCSaZCDQglWQv2VkprbHm6WsHVJIMHt94etvDxtIUvt76eJIFi + nWBfIkCB0EAmjzAFkhgMM5Mo8hnoS/NNKCcq8ozS/OklFMGFbAh57GA5bFxmA9gGpQvD4evTTagTo4Dj + 2emiVEzQjpIBPFMXi4nKcFZmADqzXNGQpEc1E1ctO23dAmoYvGtCZahgQBfTc+b5WyDX3xL5gdYoZVCq + 8Wdj5+eL2ei3kuCeJun9LsXmnybc8NmaEGBXLPBQAnAsAbceTcHNy2mS+Xv9mXTcejYTd55Kx52LCbh9 + Lho3T0Tg5qEQfHrAF//a6Y6/b3bHB2td8P4KV/xluRs+WOaG95e64S9zLvjbrCs+XeyJa/O+uL0iAHdX + h+LOxkhgG6+3JxG3iRv7k3F1XxK+2JuIL3bE4fO1Ybi6MhS3loXgxmwgPiUp+LDdgL9ROP21whYfMDB/ + UCzjVoYPG21wfUSP20tNuLnBGTd2OePmQy64ecQFt48549Zxvj/hipsnvXDrlB9uHvPF9Yd9cG23H/65 + 3AV/GNXhR10KvFhvjdM850P5MuyhKNhXYkFxYYcTtfZ4jATzmXYZfjpng79uVeOTfRpcfUiNG4cdcPMR + XvukCTjnDjzqiTuPehN81rPBuHY0CH/f800D+MeLA/CDqUC8OOBFUuqBJ7s98TjF8/FySxwpkOFxJrnv + dlvhT4u0+HC9CZ9vdcbn200sG1fetyduHPNhHQQBj4cDl6OBKzG4cyUaN56IxcenYvHOA/54a7UOT0/J + 8RDJ7+pyJjgKncEsCsEi87D9IRFsijQMPFoSbgOW1BuxokGPVXVMwnzmlWXWWF8lw/ERK7y2RoV39nvh + 8+MhuHY8AFePe+PTk574J5/1o5fCce1nWbj7biXw92bc/bgbt68O4e7tSeDuYty5M4/bt5YBN1YA14lr + S4B/juPa2/349xst+NOFXPx4TzienzXifKcVHuuwwhND9nh5tTN+ciQS7z2XhU/eKMHtX1bi9i+KcevH + WcCbqbjzWgyuP8XyfTwQX572x6dHffDJER98/IgfPuY9fsayv/p4GK5ficD1p6Nw+5k44LlU3L2czONj + 8a8DwXhnswd+uliDtxbL8aN5BX680h4/XyvHbzap8O52Df62S49PDjjj2iFP3OYz3zrtjatnXPD5OSee + m+3rsjtuPuOPWy+F4NZ3YoCf8Py/ycWtPxbg1rtFuPWXUtx+rxA3f5eNWz9Pwx3e991vx+PWU6H48pwX + vjjuii8eYZ0ec8GNU264eZo46447572ASwHAM6zjF0KBl4TxS7zK198iXg3Gzef9+Vw+PJc/bl7kfT3q + hs/ZBq+edMS10wZcO6PBl2eVuPaYmveqxbWLenx5xYAvn3PFjdfYfr4rTOBY3HwjH59+vwa/u1KCJ3Ym + YPWANzoo/MvynJGT7Y20gmgkFibfN4CFGZxcfM8EzkB6SdY3kFqcSYhpolORWpJMJCKlNIFIQkpJCqSp + nEvy+XkhkksKkVScK+ErA1iYvgLfNITNhvM3RwAnlaTfR2Lpf8fXTd9vGMML5xBTWpsN4Hhk5IUjJcUb + sZE6xIaSfMcwqceokR2mREaICpkkXlmRJDrhJFokusm+lkglkRIjgguitMgOsJfWe8xykSGfqCLJm2Qy + 3ttjh+e2OuK3rNN/vBGIT37N9vmnAFwTBvBfXXH1r47mUcDvaHHzDw64/TsN7vxKhZs/UeGLH2rx6Xfc + 8NcrfvjJQ354jHF0vkKNciECSSTjGNfjFgzgWOaf6EANxYIOEcyVocHOCAg2keCbvmEARwcoEe9nNoBj + mL+ivJm3CLH2b5gnCbyXHYK8CV9b5jVhAFshggIklsjg9crDLNEab4eJDA0eqPPFyfZgXOgPxdPjIXhq + 1BMXBnR4fECBJ0fVuDKuw6VRIx4fdMK5HiNOtBpxuMGIh2uM2EMBsL3CiM0UBGvLtdLI2xU1eiyv02E5 + Y9GKRoOE1U1GrKMYEIboen5/S6cJO/vdsHvIDdsHXLC+Q4uVJObz9XZmNNhjaRNFYZMcq1ocpM939Bpx + YNiERyZccGra7f8awN1OeKjTGXvbXbG2QiP9UNZDYdydao9OCrs2irwmoiKRbYKiMY2kOymYQjLY/hsG + cAUJcR2JYlcm4ywJ3jjJ538zgAXEaOBJ1qUwgUeLbTCSb8XjrDBZYoM5iujVDQ7Y2eOCA4MeODrqjVMT + njhLPDrqgQsUy+e5/5hYu71WhQ2l1ljK3DFbZIG5SlssalBglmUy1mKPsVYFprso4rsdMNei5GdyLK2T + S+sRzjPnzJfJsLLcAmsptDbVy7GJ5baZ5bi51hJbiR2NVtjDc+zrdGBbNmLfgCv2DLlj5wjLqkuNpc1W + WFRniTkeO11ticlKPkM5xXm5PSaqVSSWDpLpK0YBr+p1XjCAbcwGcBmPr1NgvpP13O+ENYNfGcDruyn+ + ehQLBrAJx8YMOD3lhEvzfriyNAiPjfvgVK8njnX44FCjDw40+GNPTSA2lvlhPttVGgFsNoDlaKZwqqcQ + qwknb1owgKsi3VAR7o7iUGfkBzgiy4dCnlwwxYMi3pP16yZHiosC6a4OyPbQLxjArigP+coAzmU/KQ/X + oCnVBf2l/hiuCsBglS8GKr3QX+WFnmoPdNZ4oK3OHU31rqiq4XdZ93klSmTly5FD5Oaz/eRSROSokE1y + n00hmZOtRA5f51AM5WRTbOTyuFyxtUNBAUVAmRyVVXymOr1kAre1OKKbbXiIPGl8zFPCGNvJYL8JTRSr + VczlkgFMIdvSLNYA1qKPwnmoz4ThfneMDXliesIPM+OBmBjic/R5oa/TDT3tCyYw+6AwgZtrtdK2q9WE + gW4PaU3j6RF/LJkKxvK5cKyai5DM3xWzoVgxF4zVS0KwlhxuzdJgrFocxH3+WDbrjaWzXlgyw2uO8doD + JvR26ngdNa+jRpsEDTqbHNDJPtBep0FjlRw1pbaoLbFDY4US7fVaaYrq1kYdWhrUElqJNra1dn6vvYnn + 42fdjBn9rXzOdicMs68MiOduV6C3zRrd7VYLsERXJ/t6lwX6e6xYFnJMjmt4j0asX+6Jbev8sXWtH5/D + BStnjFg+rcc8sWzGhGVTjMdjPphhO5zq5jMNhWHxUBQGm/xRReGcG22N7HBL5DJmVlFYd6QaMFHogUVl + PlhR6Yc11X5YXeGFxUUmTBYwXhQbMCbEVZ2J/dad9+yBrmYX1FfqUEG+VpmvQ02hM0WgM7JSDAj3t4Ev + c0009VRDQQwWdVRi/UAzlrVWYbqmEDM1RZirK6HIKzOjoWIB5hHAwgBe0taClYP92DgzjU1Ll7LOlmBm + cgx9A31o7+lGbUsTalqa0drXg5beXhRXVSM5mzk6Nxf55eXIyC9AREI8vEOC4SpGDnu4wkGMDDZo4OBI + 7WXSweAioIUTt07sT8IINo8GVsLN2wHe/gb4BjnBh/3QJ9AR3tx6+GqldYLFdNHu7gp4utjzWeWEAr7O + SviY5PBxtoe3WKaH+jHA1QIx/rZIC6YwZkwujVGihgJcTPHbm6bEkjJ3bGkOwLZGb2yucsWGYkesznfA + 8lwtluYbsahQ1AH1VrYD47cGzekK1KTYoiKZwjvZRkJVihx1GWo05+gl47e3xA29pe7S9M9iFHB7lh6t + GewjmTrz6ywj2rJNEjoL3NCaxxiQrEUh7y0nWiEtJ5ARp0Wq+Kc+eURClA7xkdwS4keemBDxD3/GojgN + UpL1SEoTIzrEaA6CejIt24AMvhZIzzQgLVOLNOblVEJs03gv6dIawESa1vwDpZiiMNEOqYnkK8nUoenf + NICFSSpG/0oGcKH2vgGcy1yYkyxHVqJKMndjQ60RHWJlhmQAW0ojgIUJfM8AFtNbZycztvFeilgexbyf + Ymrgcr6uYZk3FDqhscgZ1TkGVPCY8lQVyoiKNDWKWdYFKfbS6N+yHOrhfIO0LWX9iK2EPJ2Einw9dbYe + FQU8ppAoYYzncwjzV6Cm3ITqYqP0fE3FrI8iV7TlOKGDZdOZyjiTpER/khzT6Sosz9NgQ6EO2wodsI2x + eGuKBfakWeBwri0uVunwSoszfjpETTfth3fnXPHuIvHnZyf8dqkz3lrijFdmHXFRzFrR54CHe7TY3+uI + vV2O2CVNX+rANqjGZsa6Ta0abGnVYTvzoTCAH+BnB7hPGMDHOszr/z7aocTZDnuc6pLjeK8SB/sdsH/Q + gD2DRskE3jXiiD3Djv/VAD7Iax7sNuLBdh32MCYKE3hHrUKaElpCvQrmNYIV2FRhgw1lzP/M2VsqlRIk + I7hGje2NeuZ/Z+Z/V+xqM2ErudmGKhVW8/gV1N/C1BSjWoUBvE0yatywpsUFy5pdyUG8MNHqJy2DMNEa + dN8AHmqKQE9jCFoaA+4bwML8beFxAvcM4Nb2ELS2CfM3FG3toegg2lpD0EF8ZQB7S+ZvZ435z1Zixo0J + fne6M4jX8sV4C3NhM/NMoysmW1wxRUy0unK/C0aanTHc6Mx47Yy+Bua6Gic0k5fWlIi1UM3T4X7dAG7I + VqGDMXio0Igpxo+lJUSBAxZl22I6Q4YZ8v01RZbY36LBqQFnXBj3ZDtwwj7yLjHLijDL11bbY02NAqvI + 21aQ/82TC8wU2GIsxxJDeVaSATxG3jTBvDfDfLaI7WN5tyM29LliE/P1JtarmEJ6XS25V4kcszliJJwl + prLNo+HElKjitdg3nmGB0TQZhlLMEK/H0y2k/ZNs03M8Zj7HBqsLVNK0+NurXLCj2gXbqp2xrpwxMV+D + wXRbtMTLpPXPy4jKOBnq2Cda0mzRmyrHQJpc+uPELLcryHvXMpasJ39ZnyUn7LE60xbryG22FOmxhX1z + K+PMdr7eze1DfH+kUPxI73bfAJZGAPPaD1aasL/aEbsrdNiQz/NkWWEl71uMBn6AWuEQ6+twvSP2sbz2 + F1jhRIUdXmT7e2vYB7+eDMA7iwIlA/iDSTcJf51yxwdTHvj9gAFvNNjiuXIZzuXLcLzQAofIv3fmW0s/ + NM+xDgcTZOhNIi9IskNbkgJ1cXYoi2X8E1PzRyoRGWEP/1D7bxjAfoHCANbCx19z3wA2T/esgp+/WtpK + 5u//gwEcEOrwDQM4ItaR0CM8RichlBpTGL3/TwZwMHOeuKfgSAUi43meRD3iksSawdr7iEvQSIiPU0vr + eIrpOoUBnJWiJhhvMxX3DeDWMhX6SoUpq8Aycq7N7PMHyMeON2lxnjHqCvXA050qPCMGSBAvtivxg141 + fknN94dZHcvfAX9eosV78wb8foUJP5l3xfeWeuEy62FfH7Ud4854HtuoaL/ktJMlCsxUqjHHmLO4QUOd + YsYyXm9NG9t8uyP1gBN2d+uxt1vHGOeAw+1qHG9V4gQ53ak2e5xutcdZ4lHiPN9f4PYicaXdXrrPF6iB + XuplDGcbeJnx88UxZzw3ZsKz1IPPzLjiyqQTLo5ocabbHo80yXC0XiwJZ42nerV4lfrxjUl3/HjaG79c + Eoifk9d+Z8oLV/oc8UidWKfSEnsLbHCwWI1HKvU4Xm3A8QoHHKW+e6Sc8Zvx9EyNBqer1ThCvXaozApH + 6/i6mW2+zQ07Wn2odQPIyYIwUh+E7roA5i1XFDDeJCbaIJx9TzKAuTUbwNaSAZzPPlaaxzZaTM4iRgBT + V7aXqdFVrpEM4KESnWT+ChN4tFiHwXw1enLkzH02aGA7ryOa0q3QlcccSB0+yO8Nsx5GiHHGp6lyNWap + N5aSe6+tVGBzuQpbWVdiStaDpRocpa4VeKRYTtjhZKkdzlXa4fEaWzxZz37WYoOXupR4tUdDaPEy6+Fb + HQp8n9u3FqaBfos65QfD7niVmuWJATecWJiRa2Md4yz1c3+alWQADzHmSFgwgCcYd2cZD+b5vCtZ1sJA + XFmilgxgYSiOMg61s+zqqcvLY+yQF2mDdGFOhssRFyn/PwZwZLRcwn0jmBztngEsTM+kBDVSkzVITyX3 + EiCnEn+8+7oBnMR4IaaATk1UIIOcQphludwWJitRnUneQw5XRQ5VnkBdxm11kgMqk8lpkjQoEdPGxsmR + F0veRL2QEUkuFUaeFWRx3wAOo5b4TwNYmL7JGXreh4HgNtOI1K8Zv6nkOv/vDGB/nj9YjAJm+cSyTO4Z + v183gCPI+YS5K8ojOYHXSWAsitNL5RgWYoegAFuEciuOTeH9C6+jhny5JUeDngI126Ka8cQBy2qMWF1j + wqpKJ6wo02MF4/2yUh1Wsv1urDViE+t9G/Xb1kZykVprbK+1wq4aCxyoleFYiyUu9Cjx/LARr4244MVe + J5yvJW9i39vBnLY13RI7qJn3MHc9zDxzmDn6ELnfw2z/gs8tZf4a4vN2EwMxMgwnWWOU+WsyzbxUwso8 + sW69MButcaDMGkerrHC61g6PNQkDWIEnmMsvMe480aHB49ST5wTXohZdxbw7EC1DK/toTYg1KkPkqI7U + sY+5ojnNC42ZnihkzI0PtkSorwwhRFigLcKC7KTpn8VAi0Bf6hgfKwQuINjHWkKotAybGBGsQgzzhGQA + E2YDWLVgADv8XwOYmkIYwPEh5OtBZuP364gNEKN/hfnLtsY6F6ZlpjB0me8EpHbLti28K+FhlbD9CtMz + Lc4WqexPYpafjETmjgWzN4MaJV38uSiJuoPbDGqdVOabBPapuEhbxEdRd/AaOdxfzLZanSlGw1PDs520 + U4/0CzM+ww6LGdNWZNthWZYllmfKJKzOscLmYgW2MNaIP2qtI99ax1y9KUuG3ayvvdz/UKkSD5IT7S6w + xg4es5mxYQPz2QpqGGHw98XK0BxqNoBbwmXojLFEf4IdRvhME8yBE+xHw+yTfXy2tkhLyQCuiRUGsM3/ + MYDNsxlpJBTw2XMTHe4bwGIktUBGlJjpyQ4F7NPljAMN7AtfN4AHy4z3MUDe053HuM04LNCRyxxM3tRI + 7VUlNCg5Vym5WEm2QjKAxQjgfPKt/HQl60iOohQrFCfKqFFlvI6M57CSppYeY0ycqNBKmKx0kDBbJWZ/ + NWKu3ok51gWzTe6YbvbEaB31LPmvWEaggWVXlWuDGqKWHLEhj2VSxH5cYcRwrTOm692xQsymRc69u8kP + +8njd1d74pHWULy0qAC/3tUFWYCvEsEBamma5NhoZ0RFmKQRtgE+JEaecni42/8/GsAm01cjgH39Dd8w + gF1d1TzeHo4GWwlORjszHMW6v2Y4O4lpyzQwih8hJAPYBjqNDQwO1oQVjDorHmMLdxc7+HmqJFM6OpT3 + GWagqNUx6Dogwl+JIB8SPTdLCb7uVvD3sIG/J+HBIMpn8Pe0h583X5PMhQTaIZYEMZPkqyjTRDLljPI8 + MW2bFgWprDB2qPwEe+TH2yJXMoAtJQO4hJ2ohh2iIYOiNdURNQlMEuzUDSR39wzg8Yow9BV4o5WkrZYB + uCrCFrUMxnXhNqgLYyUxMQgDuFwygGUoYEAvDLRECYNRFfc3MOANstHPM+jtSJXhLAnL99s1eGfSBZ+v + CQZ2RgP7YoDDcbh5JhHXL6bi6pOpuPFcBu6+nAe8RDyXBXAfrhCPJ+PWsVBcfcgfn+/1w8c7vPH3dSTa + q13x95Vu+NsyN/ydpO9fS93wxbwXbq/0B1bzOqtDcXddGLAhAtgUhdsbI/ElX3+yLgQfrQnFR8sD8a9p + T3wy4YVrk774csgTH5L8/Y2C6C+VcvylxAYfMDh/UCTDXylAP2q0wY1hHW5ThF9f44RrW024ts+EG4dd + ceekK+6ecsedM164c9YPd84F4c6pQNw+4o9b+wLw0SqxLowRP+/W4LUGEpdCGR7KYfkw4GzjdjdFwYPF + ViRwFjhfJ8MPx3ndLWp8cUCHm4e1hANuHdXjzgkn4Kwb4YHbpz0ls/AWr/Pl4UD8fbcP/rDOHb9c4WEe + Abw4AN+fCcIrw354ptcTV7o98HibESerSQoLWC9lMrzCJPebCQ3+ttIJn25xxqfbTPj8ARd8+aAbrj/C + c5/1x90LIcClKNy9HInbl8NZX1H46GQk/rTHB2+ucsCTk3Z4oNUWyyjUR3MtMJxvxyCgx2i5AX3FDugq + UKCXJGmMAmu21oB5YbrUOWBFFYVcOQNsNZPtiB1eXaPHn/b747PjEbh6IhhfnvDDJ6e98M/zXvj4lUhc + /0U27rxbAfyjGfikG3euDQK3J4C7c8CdJbhzcwlwfSlwlfhsFnh/CNf/pwv/fr0Bb5/NwBvbgnFlTItT + LRYk8FZ4rM8Ozywx4Pt7g/Cb8wn4x6t5uP6jMtz+SQluvpEJ/CAdd19LwM2nInDzIp/7TCi+OBaET48G + 4lOxPRWGq+ejcPNyDG48HYPbz8UDzycBL6Sx7abgyzOx+NeDQXhnizt+ukSFt+YV+OkaJX6xSYVfb1Xh + j7vUeH+fFv86YMCnh5xx4xEPth9v3H3MGzfOu+Dqo448vxE3Lph4DS/cejYQt16OwN0fJODOT9Nx69fZ + uPXHfNz6UwFuvZ2Dm79Kw80fJeH29/j5y1G4/kQAPme7/OyII744yvb6iAnXTwoT2IX9zhW3z3ua15N+ + OlCa8hkvhUojf/Ea+8zrxLeDceuVANx43keaDvrWE16SAfwZ2+AXxw2EHp+fUOHLkwpcPcPtOQferw5f + PkE86YjrL7rh1rf53e9F4PYbufj8+xX43eVCXN4RizUDHuhkAihjss/O8UBaYeR/MYDFSOA0aTRwumSg + EiXpElKLBVIWkLRg/iYgWYJ4n0Hk8Lv5SC4pWDCAv2745i3g//8GcGZ+JDLS/RAfbSTJUpAUKSkW7JEq + CBLJV2qwCmli6ucQknx/ayT4WHC/DfJIsvIpzrMCeIxY89FFhixnGUo9GW/FvxHbbPHEOj1+ft4Xf/ku + Y86v2E7/6I+r7/vh6l/dcO2vYhpoA669q8WNPzKe/E6N279W4ubPFfjiDQU++Y4j/vG0D355xA+Xlnth + BQVkdYwFkvxkiP8PAziGOSsq2IiIYObZYGcEhjjDP8RsAAcFahERpEFMIAmhLwmhjxyx3kpEe1EIecsR + cc8A9rYl+SR8bfgdkk8S1ghxnQAxlSkFYxRJE3PZskJHHGwJxGM94bgyHI4Xp8PxPOP15UEjLvYpcXlI + hUvs1xdHjTg34IgTXQYcbjHgQL0Be0lAtpWLqeaMWM+YtJrCcxVF8/IaPZbVEg3C/DViZQOFQqMj1jYJ + A9iIDa2O9w3gPUMUzYOu2NCpw6pWtdn8rbPFUmJxvQ1hy30KrGpWYhPJ+p5+PY5KBrArzhGPMu+ZDWBH + HOkx4eEuF+xrd8E6Ct6pDEv0UmT3JNuii6KunSKvmeKpKsGBda1CuvijV7C92QBmO8mneCyhaCuLJvFn + +bTye/25SoxQ9EgGcKECYySvU2UaTJOQSeYvX98zgCdKxfRnttxvhzmK7KXVSqwSo3O6nLBvwAUHB90Z + i91wmjgz6IxH+51xrteEw00O2F1hj/XM5UvyZJgttMBMhQ1m+NxTzSqMNssx2qbAJPPbkh4d5llWy8Vo + 21aiSYmVNfZYXmVNMWaDtXV2WFdnDzE95YoKEu8SGTZSdO1otsYDHSrs69ZhV5ceWyl61rc7YJ2Y/rlT + ifk2ayxqtCKZtMR0zT0D2BrjzCGjFcw5dUrMNWmwjEJpZY8TlrTpJAO4h7lWGMBT9TzHggG8esEAXtfH + a3Srsb1XiUNjBpyYMuHoqAGPjBnx6KwHzk9748SAK450uODhJjfsq3bD7hov7KkLxoZSX8ymGtBPQdMR + ZocW9tnmMA3qw3SoCTePAK4KNxvAVVGeKA93QwH7i1j7N9ldgUR3Cmo3OeJd7ZHsrEC6mwOyPMjnhAEc + Kgxg8jlftgP2mxzywLIwwdOc0Vvsh6HKAPRX+qCvygvdRGe1O1p5b401rqip4ffKdMijUMmgYEnNskUG + kSUMXxL57AwVMjIYc0jmM7kVr7OyFMjOUiInV42cPAqnXDny8inK2JbK2E5rqnSop1hupgDtaKeQ6HfF + yJAHhtk3xAjg4SFntLUqUFNtgeoq9l1hALeo0M120E/hPMx2NMy+NMbvCAN4bjJIGgk8NuSNoV53DHS7 + oLfDhO42sRawHq0LxmtXmzMGeswG8MxogGQAr1gciTVLIqXpn5fPBGN+OgDLZwOwakkgVs75Y8WcH1bM + +mHZrNd9A3hq1BlDPTxvsz3qa6xRV02hUWNH2KOpRoGWGhWaq1SoKbVDOQV+RZEtathfmmt0aK7Xo6VR + j+YG9s16zQL4mu9beJ+t/LyNnKa7yYhexo5eMZq4WY3OZlt0NFmirVmGjhaiVYb2Nm7bZejtkrE8bDE+ + qsKiKcalpa7YssYX29b6YdMaD6yfZ3xY6ow18ybCHavmfDE/4Ysp8rjRDk/M9gdj8VAkRtqDUFdgQAEF + Yx7FY0GUNarj5ehI1WG8wA2LSxnHK7yxpsoXqys8sbTYhJkiA6ZKjJiocsIY24owJvpbXdHZ6MRn1qCi + QInqfNZ3iQuqCt0o/BwREWADP+aaaH8h2GKwtLsaG0dasbKzGnMNJVhUX4wlDeVY3FjGPlpOVHCfQCU/ + r8ZsfS0Wt7VgxWA/Ns3NYf+mLTjy4EM4cvgQ9h54EBt3bsfyDeswv2E91u/ciQ279mBi6XI0dfehoasH + /ZPTaB8cQnF9HZLzchEQGQ43f1/o3V2gcdQSeuidCBc9DIRkALuIUcBmA9jRRQlndzXcfXTwCnCEp59B + gpu3+FwBnZM1dNSCF0nDNQAA//RJREFURupCJ50MLjoLuOotubWGs5ZaUcf9WupGws0gQ6C7JaKZuxID + 7JARbIMc5iyhg1oSbDFd7IItzFfbmnyxucoN60ucsDxHg8VZasxkaTGVa57WdYCvOzPVaMpQoDrVlsLb + CqUp7Od8XZmmRH2mBi3kRz2l7hiqYj8hBkrc0Emd15jCWJAk1gamcBevU7UU8AaCbTHXhd9zRWWyTloy + ICdahaxYDdLjdEiJ00sGsDB/4yPE+s466lAtc7kCUeQisdEOSIgXU/zpkJBmkH7MS+f1MvNMyMp1QjaR + IfZl6ZDK+xMGsIAYHZySrkVyqgOSktXmKQqlHyjJVb5hAGskA7iuVBi/5tG/daVGtjktirIVyEuzQ3ay + HbIS7ZAea8f7E+avBcHyFqD2jCHiqUUTqEuTxRTQMfY8nrmRZVCUrUdpjiPKc/Qo5z1Ws/xqJfNXGLKM + xdk6lKerUc5cK0zgynSNtA5wUboCpVkOqC4wSqPfy7IdpNHA95EloOb9O6A0V4uSPB1K2EeKC/QoK+Yz + MO5KBnAZY36x+fkahQFc7IZ2avPOLCO6WTe9qWqMpKmxOFuLNfz+Vn53d8n/i7i/jLezOreG8e17L/e9 + 1tru7u7u7u7ueyfZcXc3CERJQggEiZAgAUppS+W0p+dQKqd+arRUKA4hPv5j3msnQOV5n/fL//0wfvfy + W+ac1zXGGve8pgH7GHN3Zzpib5odDuc44UKtHq91eOLN0WD8ajYQf1zhibdWmPC7Fe74xQoL/nuZGV9f + bMSz41o8NqTFCca2I4NmPMS890CfO/YxB+7u4u8zf+7oFNDzuQH7mf8OMicf4muiBPTJHjXO9ColA/hc + jwyPLRjAxwY1ODRswAFyrP1jRuybMOEAOczBMQseHOZ+GNMf7jWRy5hwlJzmmOA13OcD7Trsa1ZhT4NC + Mn3vQRjBwgDeXuMi3US2rcoNO2qUhALbGXe3EDsaRflXXo8OC3Zxu6Vegw3V5Cfl5AnlDtjU4IZtzO/b + ye129XCM9XphY7sHVrV7SgbwTEcgZtqDMdUeirmeOMx0J2CkJQb9zRGM3yFoaQuWzN8vGsBdYqavMIA7 + Fwzgrgi+9rkB3NPJx/y9zuZAdDX6orPeB9313hgSBnAL43F3OBb1hmGm0x/THT48Bi/MtIkZyVbMEsL8 + nWxzxyg55nCTCQPkpD1N7uiuM6H1ngFcqkSdMH9LtWgSBnCxzQDuLRJrapowx/ixkv1qdbkOywvI2/LE + bFo7XkdHHBZ/DI974OKsHx4jX3uY/HMn+ej6GnvyXCesqqYur3Fj3HfDfDE5Ur4DxnLJh6Q/7YQBrMBU + owrTbLPZdsaobj3Wk+9tZvtu6TORC2ukm7WX8vsz+U6YJF+dyXPCnJgNnOeMmVxHvkbNn83fzLDDEPvv + ALWIeDyWSXArZiwvzXHEmkIZNpXx+Jh3DjT7YD+xq8HKNhbln2UcG45ojqeeibKhmo8bku3QlupIHSDD + eJYCizkWV+aqsbFAh60ch9s4HreQtwgTeG22CzbmkYNzXG3i65v5/g7GlX0lBjzIa3mkUPxJb8bRSgsO + V7Kvluv/pQEsZmYJA3gjz3F3hZrvGXGoln2zyAn78+1wvNwZL5CnfG/cHz+ZDcH/zofiD7z+fyTn/9Os + B/68yAvvLPXD76cs+EGXAq81OOF8hT0erxLrOSpwsEKGdXm8jrwu/Yl26BM3gKa6oCvFZgBXMZ6Jmz/v + G8DhNgPYP0yLgBD9lw3gIPGfJRGoWIBSmv3rS50lwd8VPtRZAsIM9g9WfMEANt83gMNj+FqMWtoKAzhG + GMCpJqRleyAjz0faJqa7I4a5QRjAgRG2mckRcSp+X43YRDViEpT3ESfNbhRlbW03FeVnuqMg04hcxr88 + tmUx+aYwgBtKFWivUGCQfXGq1FUy/zaRg+1nnz1aL8OZJhmeaZfjErnllU4FnuP2aocM3+xX4s0JLX65 + SIffLNHireU6/H6lEb9aY8EPV3vhe2sC8cK8L46ISj+NMswU2GOK7Tpd5IqZMhnm6zRYRu4mZv4KCAN4 + GbG2XY9NnYx3A1YcHDDh0JARxwaMOMX4erZPi8f7NTjXr8I5xswnu+U41yXDU11ueLrdlcfpiovtLrjC + 7UuMp1/p0+Cr1IKvjhjwyqQFVyfc8eKMBc/NWnGJWuP8mIbayg0nyQ9PNtvjyQ4XPEdN8tqYGd+5ZwCv + CMeP1kTjNfavZ/rEbHVnbOP43cWxd7BIJa1l/TDxIPPH/jw3HMh3ZV+X4TA53IMFjJccjxvZv/ZRF+6j + Dt5ea2FcIJ8WlUKKGc9KfdFc5ouqUitKS92RSd4REyfMOXK9WDukJNsjnZwkN8vFNgO4UI4GxqxW6mhh + AHcvGMDDFTqMihlmZUZMMfdNlumpRbUY5nH15bihheNYmMDt2U7SrLMxjrWxag2hxHi1nBpOQZ3K8c22 + XyYZwBzHfE/MAhZrAR+qUOLhUjkOl8pwpNSNcMEJ5oVHGd+eqHPFpWZXvNDhilfYLp8bwEq8xvH3za7P + 1wH+PnPXd6htX5v0wcVhTzzax1jQYzOA56ifhzOc/rUBnO+CRSXCAGYfqdGSS1OTMjasKlVjeakG0wU8 + z3Q3tKfIUJvohqJoZ2RGkqNEuiGRYziOGjEqRiaZwDYj+F8bwGImrGQCJ4mZwGK5DS0yxOxG8qr0DPKs + TMG1VHyskMxfUQI6UxjA3G+OKKdLHVCc7EZuQx5PHlaZTG7D46lIUqAyRYWKVPKdZBVKpLKx/DzHaG4i + tWCsG1LIqeLCHBAV+s8GcGSsM8e4230DOCPXhEwiK88dWfnukvF7D2ImcCKPVxjAUeRwQZE28zeIv3nP + AA4hX44Id5TKPYu1f++Vf07ktYiLdpUMYDELOCXRZgCnJRmQSG4aFeWGsFBnhAQ5SQZwPK9pRpIcJbwe + 9cwNHfkq9DOujJS4YZZ9ZnUDc1iTB7kD80ydOzbUWrGGeXd1hZaPRTU4PbY2MZc0K7CZmnV7oxN5igMe + aLTHcVGWfVCBF8cN+Cp5zyvMiRepAx9lX30gn1wt1xl7mLf25StxqEiDh9nfHyrR41CpnmPUFfPMX4M8 + 1y6ea18M82KiA0bSqPkyZVjMsbSaY3RjiQK7yjhmmRuO1zrhsUY3nGuT40KHMH+VeI79+LlBPc73MO70 + 6nG0VSOtHT/O3+7j+OyIEevHqpg7qJ2z/DBUFMxYGoq6HCuy2b/igtmGgXaICXOTJg3GRMgQycdBfg4I + 8GG7CPiyTXzsJQgTODLIZcEA1rLvihnA4iZR2yzgewZwBtsj+54BnCFmAJP3/4MBnBRK/r6AxBAnpEa4 + IpN5LSdOQT2iRDbzXHaCi4ScRCcUUjOIUtAVuXpp9q+YHZwe54yMeBdkso/mcSwIA1iYvZnJ1DJJYjkb + jgUxYz5FlIBWI4X9J0n0ZWGMpmhRkmVERY476rLJ0TOp5amVOqkt+lKdpaUXFuW6YFmeC+Zz7bGUHGae + WMHcvKlMgW3l5BWFTlhPrrU+i3yLvGtXsTMOsF89VK3CoSrGXOat3SWu2FpM3sDYuJy/N53ugP4EW+nn + VjH7N8YefQlOGOa4nKBem+G5zXB8TKSqMJzghm5q9pY4RzTwGogKIKL6kygBLTR9Acf0lw1gvWQA5yXz + +nBsiLWUc4hMxptsaqXCOPFdUcpZhXZxg3GhBoPsjyOVJmnJp6FKAwYrDOhivOokVxLoyBfln6kls1yp + GcVNyMIAdkU5c7TNAFZ+yQAWJaBLGMsriXpymM5cB4i1hKdrDVhUI0qvm7C4ziBhvtGdsEjm73yLB5a0 + eWOOXH2y2QuD5IFdlTq0cAw0Mj81M74KtJET9DCfDNea+TkPfs8H68kVdzYF4CB19eGu8M8N4KXF+B+x + BnCgHzu1v+jcWkRHGhCxUPpZmL9+Xi7w9nL9PxjArpIB7OMjiNTnBrAoAe3hoYTJ5CbN4hUw6p1hIoxG + mQRhAIv1f00WFYwmNfR6GXRaF2nmr1HrSNjDpHOA1egET7MT/HgMwSRmMcEqJIZpGHT1HBQcTPEkW1EU + 40FMEr4chF72iPByRJi3E0KJYG9XaTawmBXs7+OMwAAnRHOwZVHQl2abUVNEwV9oopBVoyhV3DngIt1B + UMrOVBjvhNxoe5sBzAQgDOAWBojmTLPNACaBu2cAL14wgHvzPdHCgVYT44rqCEfURjmhMcoRTexkjfyt + BhKEGnbw6ih7VDJR1LADNsS6sCM7oJsdfjLODmtIHvaTSD9Z7ojvUpj8fsaKa2IG8J443N0XgzsPx+Pm + mWRcfzpNMoBvvpQLfL0E+GYF8I1S4LUCG17h60/G4fbpSNw8Fo5PHwjEO9s88JeNVvxtnQf+utoDf1vt + ifdWeePaKj/cXRsMrON+BMT+BNaG4/aqUHyyLBDvL/bFO7M++NukJ/5McvcOBfOHAx74oMeMvzbr8Kca + Of5Y6YY/koi8zeD85zJH/LXKHh+0uuD6qAa35o24ttaIT7ea8Ml+E24cEQawF3DWF3gigMcaAjzFfZ4N + x91HQnHnUAg+WO+FP0yb8JM+Nb7ZLMPTJRT6DDY7OIA2E9t5nfYX2uOIWC+mzg7fHnfA29vVuH7YiDsn + 9JIBfHvBAL77mCfuiFmcp71x45QPrj8SiI8eDsKf9wgD2Bs/Wu0jrQH8H4sD8PpMEF4bD8KLQ354ts8T + z/S44zHu/2ipHU4TLzTa4b9HFPj9chP+vtmM93aY8eE+Mz5+0ILPTnjj5ll/3H2a53MhEncuRuLWxQhc + vxCF986E4jcPeOE/N6hwedYV+zqdsLxGrK9CskRiOMeEO1lvRn+5Bl0UVaLky7goR9pgxIoWE9Y06aU1 + OFfXyJiEHfDIuByvrnfHrx8MxQenYvHJ6Qh8dCYY7z/uj7+dD8CHX2Nf+WEB7vxmwQD+sA+QDOBJ4M4c + sQS4uYivzQKf8vm7E8Bv+nH9jQ6899U6/OJ0Jr65JQRPjajwSIs9Hu1wxtl+NwpnLV7b6osfnojFny5n + 45OvFeP2t0tw6xs57IPZwKtpuPNcAu6c5/4fj8W109H4+JFIfHIqCp+ci8eNi8l8PxW3XkzC3ZdSgZfT + 2V8zgRczce1cAt45Eorf7vTAm2vU+MEGNX6yU4tfHNDjfx/S462jevzthBEfnDTh09MWaWauNCv3GV/c + esaK60+xnz2lx2dPGXD9GS/cFLNwX4zArddicfu7Kbj9w0zc/lke7hC3/ycHt95Ix63/SMKtr8fh1tUI + XHvaDx+eYt8+asAnxwy4xn1d5/Mbj1q5LwtuP8k++4wfcDmIxxvKYw8DvsJ++7VIjkFhAofhzteCcevV + QNx5Pgi3v2AAf/SIHh8d1+LD4wp8fFzO66HEp2c0uPa4Fp8KE/iSAZ89b+Z3vXHrdY697+ThY47rn18s + wqXdcdgw7IVeioBKivK8Ai9klv47A1isB5yGrIp0G4QZTNgMYLEV4Ock0zcVqRUpRNqC8ZpLFCCtvOhf + GMD3IF4T+P+fAZxbFIu83BAKYzPiSaqSwmVIJqlNDnZCSrALUoNlhAvSgkmeGOcTFwzg/FiNBFEOOp0E + LtXDDpliFrCXHXqS7LCuwQWnlmrxrRM++N9XgvDOGyH48Jf3DGAvXH/bis9+b8K13+pw/ddq3Pi5Arf+ + R75gAMvwwdcN+OtzvvgJ48llxpD19Uo0J9kjkwQ2RRiz/2AAx4QZEBVmRti/MIBj+H5CiBIJ/iSEzFkJ + viT4RDxzn5gFHOnjhnA/Enl/ZwQHOyOUhD8iyoHE3w5JFAuFonRKAgU7SczmGg880h2G80NReH4iCq/M + RuLlmUA8N0pCPqjCpVEVLozr8PSEEWeHDDjRo8fDFPL7Sex3keRvofDdVKnH+mrGnCodY44eq2r10t2h + KxtNWNXkznhkwlo+XtdkwEbGp83tXzaARRnorb0GrO8Ud4rLJRN4eRPJY7MwgUn264QJTOHaJsOuXjWO + T9kM4HNfMoCNNgO4z0oiY8HGSqW0pptY06wv0RG9qW7oITnsyNSinqS2NFaJ3IgvGMAk8EUk0GXxMlTE + OKGKObiZoqKbonWY4n+kwBVjjLViHeDpchLNcpU0E3imwmb+TlXKJQNYYHGdAssYf1c2abC2RcNzNWH/ + oBmHxDrFQxac5PZR5saz/Qac7abwaJDjAEXKlhIHrCgiWS51wOIaF8lUnW5lbOd5j98zgClY1gyYsFH8 + icjf3NxnwOZOLda3UvC0Ebx+axtdsarOEcsq7Sj47SnAXLC3yw0HKOD38zd2dKqwvkXMtHbByhaijde7 + wwnzrY6SCbyo0QGzNY48J0E+HTBWyb7SQGHVppJM3tV9Jqnc81S9K4b5vjCC55qV0nuiBPS6IaNkAG8a + ovgb1GDXgAqH2X8emXHH0VE9jozocXrSglNjHni424B9DVrsYh/aQpG3sdiILcJYy/fABEl4T7gLOihG + 28KVaBEGcIQe9VG2NYDr7hvAvuRS3iiNsCIviILWW4EkL44NTzkSPWVIsSiQ4cmx7a1DUZA7qoQBzLFV + FqBBIcdKjqcDSkPc0JBsRFehD4aqAjFQ4yeVAO6u9UFHnQeaayyoq3FHJft7UQkFQpGMYpzCK8sR6ewj + GST1WRSfmekypKfxPfY3sRXIypIjW5jDBYwxhVrkF6iRTyFdVKJEebkaNRw3dRwzzQ06tLfpMdhvxShj + +MiQFWOjHhgdsaC7W8wUdkI9+UtTozM62pXop2gdGnTH2LAV48Qkx9LMpB8Wk5cII3h63BcTI54YG7Ri + ZMCCoV4zejsM6OY+xNrA/V0eGOn3+ScDeMOKWMkAXrEoBEsZC5ZN+2HFnD+Wz/pKJZ9XLBL43ACe5vgb + pIhubnREDftcTYU96qqdUVdF3lrthpZaxrpqBWrIX8oLHVFR7IQaCsBmxo+WRmEAG9DWrEdLk5a/oUFT + PduZaG3QoLWR7/EznYwd3S16QovOZgqrJie+ThFItLdQrLcS7Xbo6rBDf7c9RgZdMTWmwuJZA1bOMx6s + 8rWZwBsDuPXB9rVe2LLWE5vX+GL90iCsmA7CzKAPxrq8MN0XiEXD4ZjsC0VnnSeq2HZlbM+KJFepPHw3 + Y8hUsQVLK7ywqtIb6yp9sbbKCyvKKajKLVhUZcZMvRUT9RaMNFnQ32pBF2NgA7mbmJHWSNHYXuOFZn6v + Is+COMboIIsd4oUBXBSPFf112DbZgfV9DVjeWollLRVYwa3tcZWEpU3VhDCAa7G4qU4qAb1yaABbl8zj + zOEjeOHZK3j1q1/F8698BWcvXcThM4/h8GOP47GLzxKXsfOho5hdtRaTy1Zi7c7dWLZ5MwZmZlDZ2oLo + 1BT4hoXA6OMJjVkPtUkHnTCA+fhzA1j3BQNYya0oBa2DNzWed4CAHlYfvm+RQ29yJJxgoi406e1hFeav + BOpDYf4SQssZdfaw8H0/iwMiRF4LkiMjlGMq0J7j2h4tSTLMlHlgS1sYtrcEYRvH5qZyM5bnqjGXKcdk + ugJjmYyXeToM5mrRnaNCS7YctRkuKKewrsgQBrArqkRZaDEDuICCvcoHEw1BGK8PlGYAd+YZmR/4fqKM + WzdqOLEmvAr1adR26ezjOSa05FpQnaZfMIBVyE3QIpNaMS3R8AUDWC9BGMAxYXLqSfHnmwZxCYQwgdOF + AWxGdpGFscRKWJAnzOACE7Lz9MjI0drMXyKNeSs1Q4WUNCWS0xT/xgCWSwaqMIDrK0z3DeC6cgMqitQo + zuFn0p2QneyErCTxx48Tj88B8RH3YJv9m0C9mUwdmhojZgeI2b8yFKSrUJojbig0o5bHKUo9CzSVuKO5 + 3Ir2Ck+0lllRm6dFJa+/KJsuGcA89iqimm1RX2RCc5kFDaVmqQx0aZYoqShDoVSS2lbCuiRXhTJhDjNG + ljJWFhPCBK5j7K2vtTKumFBdZjs/yQBme3WXeqC/yIzhfBPGcvWY5bVbVcgcUmLEHvaNB/jZA8Vq7M91 + w/50BxxmvL5Ya8DXu6nlxsLwm8Wh+DP52J9WmfCHle745QoL3lxuxuuLjXievOfJQS1O9elwnHH2KOPo + YeJBMYOt14jd5EJ7iN093Fe30WYA3ysB3aXCyR4VzvQIM0OBc702A/j0ggH80DA/O0peMG7Cvgn3LxvA + 3Ndh7uPYgBknhjxwgvs8Sh39YIce+1rU2NP4ufl7zwAWpvCuehm2V7tiR60cu+pU3CqxndsttSpsq2ce + bjZgZ4s7tjOWbqrVYH2VAmsrXAkXbGqUY3urFjs7Tdjd64mdfT7kFZ5Y3eH9uQHcZjOAZ7piMNkZv2AA + RzL+hv6TAdzREYLu/wsDuLedW47lniZ/dDf6obeR+bfJD6PNAZjpFGZzCPfNHNPhhdkOT8x1ML52CgPY + Ipm/4zynYXLRfubOnnoduqiBO+uMNgOY/KyuguO2TIvGMuaaMg1amLvbmH/7iwwYL3XH4goL1rB/ra1k + niC/m88jZyK2MXcdJyd9asoLF5nvHh8TbaDDnhY3aQbwmmoHLCc/Wl7pgvkSF8wVOmM81w6jCwbwaLkb + JmoVzAFKTLCNBI9b0kl+TO60ke27kdv17RqsamSOKnPBlPjjOdeBnNwJMwUutm2OIyZyHDCcYYeBNOa1 + VDv0Jtu2g3w+xO1Euh1W5LqQNymxtYLHV0+e2e5HDuyH3c2e2FBtwlSuK/rS7NGUYIdK8trKSOboWPKI + RDt0pjgyZiowy3G6nHFzXb4eW3ltthfosE3oA8bP9dluWEN+syGX/DJfjbWMNeuyFdhaoMJujtV9/NxB + xtoH+ViUg36Q1/pfGcCiBPTGfFGe0wmbCl2xXTLOtNhfqcLOAkfszbfDYXLgi80afHPECz+YEuXZ/fHr + SQ/8ftIdf5o1429LvPDh6kC8M++LX40a8b0uJa42u+FymwZPd5hwvFErGcBTKbxW5P7ieok/pMXMpH9l + AIfcN4A1EOv9ftEA9g8kpK1Cwr2Zv18ygH1dJNgMYPl9AzhW6M8UK6LijQiJVCI4UoHQKJVkAMeTZyZm + mJGe4y0ZwOk5XtIawKI0tCgBLWYAC2NarE8slYPm8UbwWO8hKtoVMTHC+KK2TWQOEgZwhkkqAS3K+98r + AS0ZwKUyDJa6ka84YWkJr32xI3aVOuJQhRNO1jrjyWYZLlA3PNupxOUOOV7skOEb1AlvjGnx81lhAOvw + 1kr9fQP4J2t98MaGYHxlmT9OjpiwtVGGRQV27K+2WcAz3NcK8rVVrRxP1IkC92YBr14wgPcOWKVKBw+P + uOME493ZETOeGjbh6WEjocdTA1o81avCuR7GTeqWp9pd8XSrC55qcsQFapMXO9zwKvmwMCJfHdLjK2Nm + XGX8vDplwXNTZpwf5feHlXii3w2n2hzwaJuTVEb6eWqSV0fN+CbH9PdmRRW/UPzn8ghcnfTFGY7NnUUO + WMUxtY58Xtz4sLNIjx3FBmwl/1tPDrE+jeOM/GEz89XaZEfMUU9PhtphLfnE2gIttZs7x64HWhN1qGVb + VqUbUZ5tQnEewfyXk0vdnuRoM4DjqPs59jLSnZGXvWAAF5NrMF4JA7iLXLGH46KvSo1RjqNxjmMx+1cY + wNNlekyJ0qPCgOBxtqfYoz3VXioJPcYYJyaITFVrJON3qpJ6VcwAL5dhSTl1HuP9RuaFrTVKbKNm3cnX + D5TJpFLQD5a44sFSAWccLnfGCcbAx+pccYEx7wqv+ctsDzEL+BW2zSscd68SX++S4zt8/l22xX+yDb8z + 4YmvTvrgWeqOM9TiNgPYHYuK5Bgh//pXBvAU453NAKZerqGWreYY5nVYvWAAz5K/DDLmdJH/NJB/SwZw + hDOSIp3JW5ylcSzKuf8/GcCJ8dSFkgksRxKRSl6XlqZBWrrgV8IAts0CziCHyUxXIov7y0klUmRSKd0C + cSNoErkk+U15shxlwoyOZ9vFk7uQM4oSsSXJKn6GWk+swSrK8FLDZjLmpPCYxU12/9oAdkJMgpu07q9Y + 8zedHFOYv9kFFuQUWpHJ7T3zNyVbhwQebzyPK5bHEB7rjGBh/n7BAA4OtkO4uOGf10fM9I1nnBBIENck + 6nMDWFyLFLFkSYIO8Yw7wvQVs3+Dg5xtBjC/YzOAyYWZB8RMxr4COYaLXTFbocAaYQA3W7GliW3cIIxg + L6yrMWElNe1q9t81oi2p7TeQW2xocObnnLCDGvFAswOOdjrhiQE5rozq8MqwO/uUiTHciHPM4UfEGvH5 + bswHMuzNkWM/9/tgoRoPFmulNYG35TFPM5cN8Fw7eK6dzGdi/fr+ZAeMcWzOckysLFZhQ6kK20XfrnLD + sVpXPNokx7l2BS50qfFsr8a2ljg52MV+DZ7q0+AENfWWYgfMJjGvJtpjjPx6LF2LmVwr5kr8sbiK/KeO + fKbUFyXpesl0jQtxREK0KLGtka5hdIQCgT4O8POygz/h520HXw8bgn0dEBbAax+qJM/WITmOENWCFspA + 29YAFgawmIFrRB5zQm6aO9Lj2D//DwZwUpgz0iKpk5gnsuMWZq3GuxLOyCIy4xyQk+hCrs22ZP8qEP2a + fVeYvxkJ/Bz7bH6GrdyzmPWbnijMXu6PYymZv5cubpZI4lhJpPbgb6eLGbLUL+U57qjKI+9njGvI1KGZ + OqEjxRXd1BjD1Boz5CXzBa5YxNywKMeOHMMOS3Lssb5Mji3sP+vJk9bw9bVZdthIzrW92Bn7q5R4gNz0 + YI0a+yoZg9l+m4rdsLqQbZ7tSI3Hdmbbt0cL81fM/nXEQAJjSjJzXJoKsxlazGbqMc12G0tSoJ9jr5Va + RzKAOXarhXfHzxdSyxcIbZOqkMo+CxQtGMC2GdTiGsoloz+N+iiTyONYLeZ3Gxgj2sh5usl3+qjlhyvd + qSONGCCH7CMHa89XoI19UEKezQBuypahRqpARR0qGcDKBQOY+/2SAcxj4/mVEbXkMG2Z7NOM6bO1JszX + W7CEWFzPeFprxJIGdyxp9GBu9YQo/7ykzRdz7f6YavXFUIMF3TXkweKGIpFTmEvayhToKBc5xYDROgtm + +J1lLb7Y0OTDcemP/W1BOETevrvGC8fIz68uLcaPv2gAi1nAESFqBAcoEegrh4+3C7w9neHp4SLBYnGE + u7s93Cn23U3ONphdYbXK4eWlgb+/HkFBJgQEGOHlreHrChiNLtDrnCQIA1iCwRWGBQPYJAxgswpGbo1G + fl7vBiM/a9Y7EHaEuJvcHp4me3gZOfDMDKreFLdBMuRwgFVmeaGpKBj1WT4oj+WgClEgw9cRyZ52iPGw + R4SnvWQCBxLCAPbxciKh40ANdJHWcCpKN6GGSV2sdVTGhi8hCShNd0NFugzlqRxUCU7IEQZwnM0AbmDw + buOgaM02o0GUeE6k6OAgHr1vAEegJ9eCRlE+gglAzPKtirBHI8W46KgtiY5oYTBrjrdHCwdSW5oM3UxO + fZm2JDie7oKlHFzbcp1xtMgVlyj4/qtXiz/OWHFDmLG74nF7VyRuHozBrVPJuH4uDdcuZeHmy/nAt8qB + /6oF/rua2zLgu8XA67nAlRTJBL5zKgKfPRyA93ZZ8c5Wku2NZvx1rQV/X+OJD1Z747PVCwbw2lAb1nB/ + a7hdFozbc374ZILkfMSCdwfc8Q5F8dsUq39p0uCdFj3ebTPgrw1qvF2twJ85sAX+RrxT6YZ3613wUbsb + PhtR4/oiHT5dbcAnW4z4eI8RN45YcfdRb+DxAOAp7vt8BBEFnIsETofj7sMh+GiDF96eNuHnfWp8t1mO + SxQRxxlUdnAAracA2MKgsa+Qr1U5kETaZgD/dYcet466A48YcPO42mYAn3LH7dNW3DwtZuh649pxb3z0 + kC/ePeCPP+3ww682eOOHK73wnTkrXp/2wlfHfUko/XF12A/P9nvgGYr0s21Kaf3hE0V2uFhth2/1uuFX + i/R4e40R72xxx3u73fHhQXd8clTMFvXB3aeDcOd8KG5fCMftSxG4+WwkPjwXgN/z/R9sVeGFeRn294oZ + ca6YqZKzD5k40CmIOej7mWS7SPAHqtWYbGRAaLZgRasF61rNWNdsxNo6NTbUUciOqvAy2/FnD4Th3ZNx + +PA09yEM4HNB+PulYHz0eoJkAEtrAP+1FfiwF7g2DNwcA25NAqIU9M1x4NNB4GPiz/24+/N2fPbdBrx3 + tRI/O56G19YH4uwAz73ZUSrlc7ZfhWfGNXhpmRk/PBCBPzyajPcvZuL6i7m4/VIO8HImcDUNuJzCa5CI + G4/F4VNhTj8Si8/OJEk3Lty5nIm7L2bh7kv83MvEKwsG8MtZuPFMAt45HoLf7rPiJ1s0+NluPX79kBm/ + P+mBtx+z4m9PWPDBOQuuETeftvIae+LuBS/cueiJW+fNuH7egGvP6AgDPn2G7X05ENefC8GNl9mnvp2I + u/+Vhrtvcv8/JH6QiVvfTcGt1+Nw4ysRuH4lCJ+e88IHJ4348KiObck+e0yPzx4RJrAZNx9lP3qc+3yS + 7Xve3zYLWJjAXzSAvxmGu6+H4O7XQnDnxQDcvigMYCs+Om2SDOAPj2rxwcMqfPCQHB8fVeLaKQ2undHi + 0yd4zGI94MvuHNMeuPW1MNz6VjY+/noZfn6+ABd3xUoGcA8FdzkTVO59AzgVKWU2pJal2VCehrTyVGRU + pNkgyjtLBnD2F5C1YBRn8LMCmUQ2kUPkEvlIK8uT8I+G7z/ivgHM7wvYDOB7yELyAlL4+hfxZQM4ZwH8 + jniPEAZwJs8jSxjAxbEoKAxHRqoHSRWJcqgMcUEkaQKM6Qn+Toj3c0CCnyPi/bkNcERaqCgpRMIfLUdm + mAvSg52Q5muHNOaIHJK4RpKNuWIX7BtQ4fI2C/7nfAD+/J0QvP/TYFx7KwjX3vbGjbc9ceMt9qvfGnD9 + V4xjP5dLBvCNN+X49HtqfPA1E/5y2Qc/Oe6PZ1d6YkOtDG3J9sgliU0hiU0I+bIBHB2qJ4l3l8o/B98z + gENsBnBsmIYkkCTSlyTdywGJzMPJPq587oZYP3GTkxvC/Z0RGujE73NLgRFJoiTWH0ohWS4VxIl5bGmp + EXta/PBobzieGQzHc+MReHEyBC9N+OO5IRMuDapxeUyLSxMGPD1hwmPDBhzr1ePBdh32NJGI15PcV+mw + tlKH1RSdq4gVNQuoNXBr4taEVXUmrK4zYk2dAesaDdjUumAADy6UIR7xwHbmjA3dWqzpVGNVmxwrWykI + WxUkKBSujGFLKSDWNrthe5cKRybMOD1j+XwG8JhpwQB2xxGKzn0tJmysUGJRhj0GeM49FNu9FG99zKPd + JIeNSRqUxVKkRciRFuaKVF737AiKOWEAx7mhMsYJNRTpjfxum5hFkOmIfpLPoTxnjBSK9dcprMuUUhmk + 6QoVJklmJymyJytIQpnPFtepsLxZi1WtFLLtemztEWXPjNjfr8chcacpcbpXhzM9WjzWocYj9W44UkPB + U+WCTZWuWF3jimX1csw2KTHRIsdomwxjnRTxfUosG9RhzZARm5lnd455YueoBdsH3bGFv7WpW4P1HQqs + ErOm652wkljf7IpdPUrso3Df0yPDjk4XEj5nrGpwwLIGe15Xe6ns8+JGB8y32mN5qzOvuYu0xvBkhT2G + S+0wXmmP2UY3LO3kOfWxLSnWlvPxohYlj5HHSYG3pE2NFb0GrOo3YM2AHuuEATysw44RPXYPanFo1IjD + 40Y8NKTDoUE9c5IZR3jce1op+sljVmZzn+Q2c2ynRWlqTJOED0S5UeC5oCXEFc0UTY3h5FdhWtRHGFAX + YUJtpFlaA7g62ptcygulER7ICzIiw0+NJG8F4r05RohEDxVSyT8zvbXI9zegIsyCylATSvi5Ai9XZFnt + UMixUpugRWuOFX2VfuitETN/vdFe54mmGjPqSJorKrQopqjMLZQjiwI1JYs8Mt0ByamOSOF4SqG4SKHI + SEqgSKO4SuA2KdEVaRRe4k+F7Dzuv9DA+GSQjOCCYg1KKWgry7WoruJ51WjQ1KhFT6cZQwOeGOb4GB6y + Emb09enRznHRyHZpYZt2t6swyNdGBk2YGLXaMGLFJPvE7KQoyyyMWU9MjYnXPCSMD3lgiBxlsNtMeGKk + xwtjA/4LBnDIQgnoaKxbHos1S6OxfC4Yiyf9MDPqiWn+/uyEBxZNUmjMeBM+WLrIF/OzPpgYM6Kvm+1T + 54CqCjuejx2qK5xQXe6MWnKWxloVGsj1KinwygocUVbkhCqKkYYaikZh8La4o7XZgOYGcQ1U/I4CdeSJ + TeQvLXy/uUEvzRZuF2Zxo5ghrECrmGlcY4cGcqymeju0kte1twkD2AH9XRSgA3KeO/soeeGyRRasnvfC + pjV+Uhno3ZuFEeyL7Rt9sG2dP9YvDbYZwORxo7wu472+mBoIxPRAKMZ6QtAuSs/mKCjg3FCfKkNvjjCA + 3bG03BMryjyxslTAA8v4eL7CC4uqPTBd64Ex9p3+OjO6KNTE+r+NzMkNbOs2/l5vvR86awIkbSEEfaiH + HbdqNBfEYkV/rWQAb+xvwKr2KqyQDOByogLLWyptaCKaq7GUWNzIbXsLVgz0YuvSeVx47Cy+9Y3X8f03 + foBv/dcbeIGPH7/yPJ547kU8/41v4dJXXsOh02exYusOLNm4GTsOH8aOhx7C4nVr0dDbhfjMdPiFh8Lk + I8pA66B210LLrSgDrRfmr8U2A9jqqYNFlIC22uDho4O3n0GCp6+ez/kZvm/1kBMyeFpl8DK7wccsuw9P + d1d4EGZqRbPJBWaDIzxMDgiknowNVCEjguOWMTov1AlNSYy1pV5Y2xiCTfWB2MwxuqHcA0tzNJjhGBN/ + AgymuGIoU4V+tlFXjhpN1EzVGS4U1k6SuC4XZnC6K6rYls25OgxW+2G6KRQT9cHoZzu2ZelRE0+xnkAk + uqE6idskOaqSFYSSfUCLugwDqlINNgM4Xo2cRC0ykwxIS9QjJU6LxBgtEqJtiI8UN3MpERWuRAwfR8eq + ESv+cEvRIzXHjMwCYf56SgZw7j0DON+IzFw90rM1SMsSBrASqekKJKfJkXTPACbSv2AAF2QpUZ6vvW8A + N1aYpZmytaV6lBcoUJDpjJwUe2Qm2iMjyQnpic5IjXNCSowzkomkaIJ5L4maNJV8ISNWzBxwQ36qEsVZ + WlQU8LdKPNDIPt7Cfi/W/G2tsKK92gvdbIdWPhczgMW6vxU8NskA5vVvKDCgsYjjm99rq/RCSwU/J8rQ + 8bwKeOy5PJacFGfk8RyKc1QozdNIM4CFAVyUryY0jCcmxhN3VJKvVPH86soMaCo3o73SA31S6W4vjHP8 + zYibMjgu15easb3UHfvKLXigzCitI/cAr8EDWc44nOOIi+Qh3+jxxY8nI/DW8kj8hXHhT6vFDGATfrnM + HT9a7o5vLzbhpXE9zvdrmac1OMn8/ciQJ46PeOLhQf7ugAkHyDf295uwjzlxH3OiMIAf6NL9swFMPCEM + 4D4FTpNDHmMOfGiEnx0zY/84j3PcTLjj4CgxbMJDjOlHhtzxyLAHTo164wRzgDCAxezifa0q7G0Wxu/n + s4D3NSqwr0mF/S0aQsf3NdjTqMFO6u3tDSpsrVVLBvB2xs+tjKdb6vXYKBnAYr0+ObmobT3b7a1i9q8F + uwd8sKvPF1u6vGwGMPXmTDvjYVsQptpDMN4ajpGWKMkA7muOREdLGFrbgtEmzF9CmL9dHWHo7gxDJ3HP + ABbmb5eY9dsZie6OSOa5SPS1R2CoLRRDrcEY5u+PtAViWDKAmZfaAjDV4Y8ZHsN0B/NapxVzncIAtmC2 + wx0TPN6RJi0G6tXM1eR2PKdOnltbnR4t5KANRCNzTAP5aVO5Dq2VzB+lWnQX6zBQYsBkmRlLGavXMU6v + qzJiZYlcMn9XFtphZ60bTrFtzzPXXWSee3zcghPkNQfbFdhKLrqu1gkryIuWMcctLnHGTIETxnKEAWyP + UeY3YQCPVjMm1ZC7NSgxxTZbTN68otuA9YPU530GXlsVlrH9ZspdMFnkgvE8ci5yTDEjbprbqRwnTLC/ + ilm/vQIp5LLJC+BjYQRPZdqRP8mxrUwHsRTL/kYrHuI1e6DLH7tbbH/ITwoDON0OLUl2qCOnraOeaSAn + bhfmaDr3x3G6NE+P1QVGbOR43UZ+so1jeXO2EhsyXLGGMXN1lhvW8vkaxtPlaU5Yzdc35ir4OTV2ZSuw + O1OOvdly7CtQY1+x+r4B/HCtGYeYA/dRG2wnb96c74ot5NBbi2XYxuu9u1wlzUKUDOACOxwqssdj1S54 + qUuPb3McvDFkwE9HdPjNmA5/mnXH3+c98fGaQHywKhB/XuyNn5L7f4d8+OvkKFdHfHC2y4xNBQ6Y5vUZ + SOA1kq6TE7pTySEXDGDB8zNiFIiNdkNouBsCw1QIoKYKCr1nAGsk49eH+ceX8AmQS7hv/C7Ax98N3tRg + Ar4BMskAtq0BrEN0nDtiEswIi9FRu8kIOUKpMSPjdEhINZM7eiA9xwcZeb7SNindirgkE99XIzRSRs3n + isBwF/6eE0IjXAlyhAWERzgjOlIYNMwJiWrkLRjABRk6FGaoUJarRHWhMICVaCuRYZDadarQEUsKHbBK + 3NyQb4cDxXY4XuWEJxpluMCY8ix11+UOJV7skOO1Hjm+P6LB/0xr8b9LhPlrwO9Xu+NXa6z46Tpf/HBj + ML62zBdPUCPuqZdhKX9vlv1+Ko86gm25upkaoY3jqd2IFW0GLCFnW9JEXUcttKHTyPhiwUHGt8PULo+Q + n54b98D5cSsuMB6eZ3s+TZ35VJ8oy6rC410ynGt3wzlqlsdr7XCOeK7ZBa9Q57xKvfNVaqqvDBvxMmPn + 1QkLrvD7zwyp8UQ/422PC061OVNjueKZLgUu92lwlTrxq9zvN6d88I0pX1yl/jw/YGUfVWBlmj0mqY2n + EhywKJU6iONieb4e81kqTCW7YCLeARPMmZPxHN/R9ugOskNngD3G4lwxlqrGcLoePeQFJdSTeaHkLGI2 + XooauZk65OWIJRyoRxIdEfVPBrDrggHMNvuiAcz4PFCjxRjH0JSYsVVpxGS5wWYAl+gwyTw5mqviPp3Q + k059mivHNOPcEsaBxeSaS/j9RZUyLGIsElha7opVfL6F+tRmAMuwna+JWXZ7S9ywj9t9pc4SHmBcO1zl + itN1bniqRYFLbIPnqUFf7HLDC11yXO2U4+UuJb7Kx8IE/mavCt9mu31r0gNfoUZ4ltf1DDXM4V4vbGlk + zGZ/tBnALhi5hwUDeFJUPGAsWC4ZwOwjPHZhAK8tpaYs1WBRkQYjjDG96eRz5GHFMS42AzjCkdyK15Nj + QRjAUbFyCdFxMgmx8WI9YOpAYQITiQkKyQROTLDNnk9K4vhJUVK/qanjyLOkSisaqRx0NjmkKKmen6Yk + N5FDlNEtIl8RBnBZihwljCXF1HcF8c4oIFcqTJShhPywOEWDAvLUPOrX3CRhtKmQyX2lRLvcN4AjFwzg + 8EhHxgpHRJB3RbIPxSbyWFNUSMoU5Z9NyFrghlmFFqlaTHKWDokZaiRQHycSyRlaxg0tv+/MOPa5ARxK + RPDaREU6ISaKPDpGTvB68DpFM6ZEhwsDmK9TX8dFidnB5KTi5pQwOcKCZQgJcl0wgMkvyX9L0t1Qx9gu + jK1eyQCWYaZCgVX1BmxssmBrszd5BfVVgxfWVFFvlSiZF5VYzv63ktpvVZ0r1jJnbuQY3kbsbXEkR3LG + 6T4ZnuZYfZE69qVOA64wZlxg7DhZpcaD1Nh7mbd2ZbliT44MB/JUNgOYeW4HudxyctnhcDt08FxbwwiO + 264Ee+ZKR0xkyzBfqMLqEjU2lcqxp8INDzGfn5QMYDUukM9dJq97acSIVybccXlIGMBKnOqQYVe5PVYw + V67MdMQa7mc9ecJW8lxhkG1oDsKixiD0VvqiMpvtw+uazGuYSv6fQu6fJKo7RCgR6OMIP087yQT2oa7z + MtsQ4G2PUH9ee+abpBihF4xITTDyexpqBSWS4pRIoZ5IF8vJJDFeJOmRkahDaoyK+1Eg4R8M4OQwFwkp + bCubASyXkMW+f88Azoh1RFoMeX+cI/JSxIxX9k1xU0MyP8c+m8n2zUnTIE8ygHWSuSvWIRbGb0KUK+LY + T0TpZ2H+CiNYlILOTtUiP4McPtcd1fkeqM4yop59sSmd+Yb6qzOZnCVd3BDkhiXsK3OFTphh3pnKtsM0 + sYp8aWOFHOv4+mpyptV8bUOePTmBC/aImb/kcfuI3ewHW5lPxP9DK0SVgCwHTKYxr5PHiJu7+hiPB6gf + BoUBzPE4lcp4x3NYnGXi1sCYreZ7CrTxWjRQ7wgDuCrF5tkViLHLcxc3dogKRwIFqRy7HH854vpJ19CN + beyC1FBqJvax7GgHFPA61jIutORq0U6u1FlswEClO/rIdfoqDdLs2pZ8ObWlnJ8RUKBVMoDlqKHurExz + QUWWDBXsz2XUNyWSAUydw/hmKwHtinxytBKiNpGcLc0Bg+zLkxXMo/VWLGmgzql1x3SVHjM1BszUMbY2 + eGIxx+CSNn/MkadPtfpjpNkTffUWdJH/dfJzHeTB7eViXXn1fQN4lvxweRM1NMft1jof7Gz0pWbwwdZK + cRNhCJ5fWoQ3D3zBAA4JVCAkQIEAXzHz1xVeXs7w8nSCh9VZgsXqBJPZASZ3Z8LlPswU+qLcs5j16+9v + uF/+WbxuMDhDr3eSIB4LiDLQJpNMWgNYmL8C7gLuSpiNMlgM3KfRAR4GOwmeOg4wsdXawV9vhygve2Qx + mFWm8uTLgjFWH4eRikj0ZvqgNc6EmlAFijhIUzlIY4lwbwcEeztKBrC3pyPPyx5Bvk5ICBOlHLSoyTOj + vtCEKjZURYYbqthY1VkKlKeJ0nCOyOYAy+NgEwZwIwdFuygTlmtGU5oBDRzIrWkWjJWHs6HiMVUdjp48 + C5o4CEWZyYpIsR6j+LPZHm3JzuhME3BAl/jTmaRghOJ1mmJ3VswsoBBeVqLBZgbYB5kgz9ZqcZXE6gd9 + JMdTFtxYE4q7W2Nwc0soru8WM3qT8dnZdHx2MRs3Xy4E/qMS+GE97v5PPe78pAq33yjG3W9nAy9lABcS + cPfRCHx22Bcf7LVKs1X/vtkd76wz4921HvhwjTeur/HFndWBgIRgYFUosDIEWBSAW+OeuDZgxsc9Rrzf + oce7rTq8TWEpGb5MAu9QqL1DofY3itF3ajQS3uMgf79WiQ+b5fikU4HPSDo/ndPeN4A/2WPEzSNW4LQP + 8AT3eZ77uxRNxAJPRwGPReDu0VB8sskLf50x4dckeP/drMBLFS44S0G2L8MemygAtmXa44FSJzxa74TL + nfb44VIF3t3jjtvCAD6ux60FA/j2SXfcPGnB9ZNeuHbMCx895Im/7/fEX3Z54w9bfPCLdV54c7kHiaMR + Xxk14+VhT7w05I0Xh3xwacCDScSEsxR1xysdcKzIDk+W2eGrrS74ybgWv53X4+11JryzzYT395vw4WEx + W9Qbd54OxO3zwbhzMQx3r0ThzvOR+PS8H/582oyf7dXi1VVqHBp2w6o2EjleK1HvfVknRTFF+WCtDj2V + CozU6zDbZsHSNi+sbKOYbfNgsrJgbZ0O65n4jgyq8MJKC368Lwx/PR6L909G4oMzIfjgqRC8dzkcH7+e + iFs/zAd+XQX8uQV4vwf4ZBC4NgRpJrAwgq/3Ax+3Au/x/d+34vab9fj06xX4+6Ui/PjBBFxd5oPTPQoc + ITk/zQT7xKBOuhPz6oweP9oWjN89EIm/nYjHx4+n4OaFdNy+lIw7F4inE3HzTDw+ORGNj47F4KPj8bjx + eAZunWe/fC4PuJprM4sl81eYwOyrr2Ti5sV4/P1UEH7/oAW/2sfry+v5x0e98OenffHusz744IoXPn3W + AzcvWXHnMvvQZQ/2Gyv3a8atiyZcFybqRT1hxKcXvXD9ijCAg3DjKvuYWAv4O0nAd5OB76Vw3PCYX+dx + vRqJz66G4NNLvvjkCSs+PGnAh8e0+OQI++xRHa4dN+CzR0y4ccqE22csuHXWC7fPeXO/QcDzHCcvixLQ + xOvEN8O4FfsKwR1RBprHLMzqj04b8dEjBnzA3/zgQS3ePaDAR4dUuHaC+3hUh08e537OG3HtEvvPVQ/c + fjUUN7+RhQ+/WoKfPp2H8ztisH5Y/CmnQ1mhFjkFXsgQBnBpCpLLbEgpT11AClL5XMwC/hwZ/HwOIQzb + e8j+B9iMXBu++Lm8BXzx/X+P1PLPkcLfTVpASgWffwGplcL4/TJs79lmDkvHXJaGzNJE5JbEoqgkigSe + ojpai9hQN0QHOCBGgOQr2ofkmzE/ypux398eCYFOSCGJSiW5SqW4Tg8naQpzRnqgPVJ9bCZwmSgzw7i8 + liLx9GI9/vOkH976ajDe+xHj7O9DcP1PPrj5tidu/pEx+LdGXP+lBtd/tmAA/1COz76vx4evWfCXS974 + 8VFfXFpuochxRQeJTAEJbCqFpFjHI4HELj5ELq0BHBWiQ2ioCUGh7ggMI8Q22CAZwHHCAA4mQfPl55mr + kjwdkCJuemL+ivOlkPCjIApwQXiwE0IpAsJIeKKSHBBPQpFBYlGTTPJMUrKu1oqHuoLxaG8onuoPxqXh + YFwe8cPzQxRw/QY8O6DBlXFup9zxDPHYqBHHKLgPijXvGM83N2ixjgJ1ZaUWK0hIVlYbSPr1WFalw7JK + HZaTtCwjVpBwrOB7q/jealEaqNmIHd0W7GXM3D/ijb2jntgxbMHGXj3W9+iwppOioUOJVSTry1sVJD4u + WNrggrXNMmzjew+NUiTweM7OWXBuxiIdlzCAT/SbcLTPgn0tRmyhgF6eQ2IoiCLFdn+yKwYo7HqzDGhK + 0qA8Rol8kuZ0Euq0EGdkk0RLBjBFTxUFWR1zujCAW/n9rlQ7dFMU9GU5YjCXorVILq3DLqoxTFUKcqbE + RLkM4xTTExWumKO4FiXQVrZRyFLYbO42YHu3mF2jwr52OR7qpNhgjDzTrWK+UOJsgxsea1DiRKsGB1u1 + 2NKixqpmtTSrdrTJDcOtrhjtdMNMnwLzbJNVQ3psGnHHLubcPRMe2CVM4AEDNpEHrOtSYHW7DGuYLzZ3 + K7FnSIuDo3ocGNZidy/Ff4cjc4Mj1jU7YW2bI1ZSjM3V2GGWWNZiz++6YS2Pb2WbHLO1ThivIHGvsSfB + lGNlrxHrBphX+tyxslMnGcLLu/VY2iHWB+Zjtt/yXh1W9WmxhgJLGMA72Va7hwxS6e6DAgM6PDBgxJER + Kw4NuGNbo5qE3R5THAtjbKdhcqHBSAq5cEd0c1y2BbuiMcgNjcFy1IcoUcexURemQ22YAdXh5GQRFnIo + DwklYR7ICzYh01+HJF8KZR8N4n0prrw0SPLWIp3IIQct4WfKOJaKfNkHPF2QZbVHQaAzauI0aM42k8T7 + oLvaGx21nmgmUa6rNqKCfKuoRI68Qhmy8l2RQXEqzN8ECtEEjq0kcreERGH8OiOO/Scu2hnR3MbGOiOZ + IiON4igzR4e8AhMKCt2RT/GQX6hHcbEeZeR0lSTm1ZVq1JIftTUb0NdjlUzgoUFuB90xOGBCd5dGWgu4 + o1WOng41hjgWR4dMmJRMXivGR8wYG3bHFPvDzBiFwji3ApNiZjAx4YUJjrUJcpaJQV9MDPhhaigY0yNB + WDwZimWz4Vi5OEoyf1fNR2LpbDBmx70xJs0eNmB8yIwJjtOZcStmJz2weNoLi6Y8MTZiQC/7nWQAVwoD + WBjBTqjieKipUqC2WoXacjnKi5xRmu+EUm4ry5Sor9GjucmI1maztG2sI9emMKwsc0M1t/U1ajTXCwPY + gBZynDZhBEuzghVsFxfUcV+15XaoY98VJnB7K3lzhwv6u2QY7ldhgsc1O2HmeVixfJEVa5Z5Y9MqX+zY + 6I+dm/ywa4ufNCt4/dIQrJjiuY74Y6zXE6M9XpIJPDMYgkUjkRht90d7qQ4NFGgN6W7ozycnL3XH0jIP + 8nEr5gvNWEIsKvbAbKkXpsjVR8rc0c9tR4URLYx/TYx/jdU830ojOms90N8YyBwdiDoK6GTGoAgv5gHG + 9daCaKzsq8K2yTZsGmjAmo5KjtEyrFrAyubyL6ASK5qrsLihktyvESv6e7Bt2TwunD2Lb37jdXz3v9/A + 69//b8kAPnv5CvEcnv/GN/H01Zex/8RJzG/cjNm167Dj4Yex99gxLNu4AfXdbYjPTIVfeBBMXu7QmDVQ + u6ulrd6shd6igYkQawB7eOpg9VQvQAMvHz28fQ0SPL118PLmc445X18t/DgO/TgeA70Jjsd78PVUwcdD + CU+rHB4WOcwmaj+9A7ypISP8VUgJ1yMjQoEc5mRRTWm40AvzlQFYWeGHteU+WFPqifkciuEMFcZSZRhI + ZvukKdEnreGrQUOmHFUU1cL8LV1ASQqR6Ij6bA0Gqvww3RwmGcB9JRzv6VpUxbH/JcgI9sVEmYTyJCJR + zPxQUlfqFgxgNfISNMgWf9YkG5CWIO7oZ7yJ0SI+mrFHzPiNUiMmnPk8Qo3oSFFmT4UYxhkxCzg5U6zt + ZkZOoTCArVIp6GxhABNiXeB0xos0Ufo5y2YAp6TLkZIml9aoSycy0mTI5DmLdR8Ls1VS+eSaEiPqKkyo + p4gXqClhfMmXIT/DEVnJdpIBnJnCmJfC7zIuZfDc0nmuaXG2NX9TpbJwYuaACwpS5ShmzizLFevyWtBQ + 7oWWSm+0V/mgrcIbbVVe6BJl8usD0Fbuwb6slwzgch6XMIBref1bit3RyjZqZ0ztqPRBO7/fUGRGBa99 + bpIr9+PAY3JCXqqb9EdIaYEOlcUGyQQuzFOhQJSHLtKhnK+J2cAVRE2pXjK426qs6GOcHq32xRSPZ3EF + 9U+ZVZoVvkMYwMQBfv6g+OOwUIEHGbOP5DnjAmPK13t88cPJcPxheQT+vNoXb6004jfLDPjFvBE/WmbC + dxe5U+PpcbFHjce6VNLSF6eHPHFy1AtHh8ibGJMf5PbAkAUH+7kfar8D1L4PMh8+3KW1GcC9NgNYlDR9 + XBjA/cz7A2ocHdZLN0Q9MG6W1v/dO2bGbubJvcMG7BvU48FBg2QAnxz1xukxYQB7SOWgDzDm721Vkt8o + sZf5eG+TSjKA9zercLBFgwc7jDjMvPGAKLNK/b2rSYOtwgCuU3MrHpM3kLNtrCfPqhXcTfzhrsLGBjU2 + ka9sbTdhV58Hdg/4cuuHLV3ekgG8pNWb+jIA022BmGoLwXBjMAYahWkbjd6WSHS2hqGtNQTtbWLmbzA6 + 20Ol9X2lNX4JMdtXWvP33szfjqj76OuIwBgx3hGGyc5QCSPNjMMCLb4Yb7XN/hXr/c50WbCImOs0Y4bH + Ot6ixVCjCn21CvTUqtgX1ehgDmklxxTVJRprGXOJBvLR5grmj0o9Osp06CszYLDUgGnG5xV1nlhf74X1 + VSasZk5aVeiI9aWO2FMvxxm28aU5H1yc9cYTzCMn2TaH2K47yUM3kY+urnbCioovGsD2GMtzsBnAZa4Y + qnTDYJULRmrlmGhUYo78bp7ceTX7yyrypBXkWUuaFZjm5yZLXDGW74wJYQDnuWA61wVTuc6YzHaSSj/3 + LUAYwd0cx90p5ElZdpjLd8Tmcg32MK/sr7fgQJMnHu4MYD8MwG6229pak/RH7GCmAzr5nZYEOzSTZ7Vx + 25vKY2VOW5JHzlZowjpic6ERWzmOt+RqsSGDPDLVBStSnbEqy41QYHmaC5YkO2BFmhPW5cixOVeF7Vly + 7GCc3ZXphl25CuwuUOAgr7NkAJM/PUTsY/7bUaLElgKZNPN3R6lCWgdwJ6/5zlIZdvGa7S20x4OFdjhW + Zo/zDa54hVz5m+S9P+xX4Nejavxp1oS/z3vgI+bwD1b5490V/vjdnBd+vMgX318UKFVkuzDgxd90wnym + HcZ5nUZ4zQZ5rD1prmhhvBFriBbH2f4ojxMlTyVzVonAcC2CwvQICNbbZv0S3oFK+AQo4e0vk+Dj6ybh + ngEsXvPyc5MgDGI/ctTAUBVCo3SIiDFKCGbcDwyVUcPJEBKlRFS8HolpVqRmedkM4Fw/bn2RnOGBuGR3 + vq9FeJQCIeEuCAhxhH+wPTWg7UZegRAiLJx6LtIVibHMC4midKdJ+kO+MENPqFGWo0JVgTCAVWgtlmGw + 0Jl9wAGL8uyxPNsOm3PsJLP9OPvu4w1yXGhV4xK11uV2JZ6nbvhKlxu+O6hkfFTjl9S7v10uDGAzfrXa + Az9dy7i5IQhfn/fGM9SIB2tdsSKX/VDM8CpwlGZxrmlxtxnAxLIWHRbVqyQTeCVj0roOPXaKG2eoAR4m + Tz1JLvnkhCfOU8dcnLDgwpg7nh4x4sl+Hc72qPBYhwyPt7rxOJ1wptoOjxPPNjjjZerCVxlnv9ZnwFf4 + W69QD10ds+CymEXMGHu2R4bTHc441SoMYLGWsJj5p5TWPJZMYHLhq4zd59q1/IweW8lJpzgu+iLs0EmI + m4YHmSNHmP8GySe6EqhFoqgHIxy4dURLuD3qqNvrAu3QyHZqZF9qiJajOtINmQH2SA90QEY0HyeJmaRq + ZKaTy6RQm8fZI5K/E8PfT0oWBrAL8rLdUJxHrlGsYl4jB6zSorNaSw2ilv7jG28wY1oygA2YKNUyVmgx + VUTtma/DBNt6gGNyIMOFsUOJReWMK9QrK8g1VzO+ryT/XlEpzFUZVpZT2/G5yAfbGPe3Me5sK3XhuHSR + TGAJpc4S9pc741CVG07U8/ozRj1DDfpsmyjB7SyV4X6B7XKV1/PlLjleandhn5HhNWrT15jTXqI2uMS8 + dWbQBw/3emNLoxVzhSoMSwawK4azXGxgbBulRp8ocMFMiQLLqKfX1hiwgbpgPfvRujIef6kGS3iu4zlK + 9GdQn5F/lVKjZ0W4IIkaMTrMEZF8LAzgyFiZhHtGcGy8UkJCgkJCYuLnj8WM4IREIkmOxBQlxyTbJ0sj + LbNhM4DJ7TiWCqjbCsi1CslpioUJnOSCUvKm4kRXFC0YwKL6Z0EC2zBZxc9opTVEc8UaosIsS2Tbi5m2 + wkwLd0B0qB0iwoRBa4+wCEeERjoinFoxPMaZx+6K6HgZ4lI1PBYDMgqsyCY3FLN/U3MM0szfuFQeq3if + Yz0jxx3Z+VbEkacKM1kYwALhoQ6IjHSSEB3tgphoGaLZPyMZRwSiGENiIlylrUBstJLcVIUIEbvEcpnU + 28IAThBrvZL3Fqe5oTZbLs1m7CmUY5jxe0oYvOyb69k3tzRRVzV4se3MWM64P1cgpxZiXqlQYL5KjqU1 + LlhV74L1Ta5SNbJdrU7kKM441uOGs31KXKGufaFNhyutRjzbasZjdQYcKlJgT44Ltmc4SXll7z0DuFyP + XcUarM5kv4m1QxevZRPPuZFjtlU8T7TDEMfCDI91WZEKa4vl2Mr+vY99WVRae7xdg2ckA1gnGcBfmXTH + cyNaPNUnx6PMNQer7bE53w7bi/idSu6T/OEo++/xLn/sIpY0eqGn3BMVbJ9stmt6vIp82oDUZCOS4nQ2 + A9h3wQAmvC128HC3g6dZzAi2l6ryxYSrkBRLvZBkRhpjflIc9UKMivFcGK8qpMWrycfVSOXzlBglUtg+ + iZFyxIs2oVa0mb+u1EbC/HVBagT5eyS5fIyAGzLYbvcM4PQYB6RF20tGsDSLPVUhGcDC8MxOVlATKKgf + bOWfM9M0SGW/TeWYEbN/4yOdpfEVH8X9sF8KA1iUg86RDGADSrPdUZlrQVWmAbXpGjSmKdBCbdFBfjCQ + 4YBJ9pXF5QrMMq5MF9hLFVLGyVmWFDhQu7lhXTE5VK49YYcN5DFb+LldVeS0dTrsJo/bzniwsVSOlYwP + S3OdMJ3B3yCHGWJeH0xyIJxsiHfCMM91krFBGMDz2dTjme6YTtFhKJE5kLqmgWO1JtEZFclizDohn58X + BrC4yTU7WS4hj9dCIJvxRSCH3xPln1ND7JDOfpYVJZZ6dUQVY0VDNjllngmt5Es95e7ooc7vIQfrZv9s + zlegKfeeCSzMYiWayJ1q090kLVrJsVSZb1vyRix9U5yrQTHjWylfF5NLC9iPS4naRAc0p5C7ZCswkK/G + uOCsVWaMlekxwrg4yvg4UqHHZI0VM43eWNTqjznB0bkda/HBcLMX+skHe+rFsihGdJADd/A7kgFca1v/ + d3mjj3QD5MYaT2yp9cDGSnesJz/ez995dmkh3jjYC7sAX1cICCNYbIX56+NpM3//yQB2d4LR7PIliDLP + Fop7Ly81fLy18PbWwOwuyjy73Dd/7xnARqMrLHzPYpbDalHDbNXwd8VsYRWfqziQ5PB2d4EP9+NncoCv + noNMawdfHQeYgYGVAy0rhAKUA7Iz3wdjteFY3JyA+fpYzBUHYyrLF4MJ7kzgChQHOSPNzwEx4s4MsT6w + lzO8PRzgZbXn4LVHbCAHUbQC1WLWUL4B9XkU2GykWpJcYQCXkRznxVNQx9ghN8EZ5RwETRT0nUWilJgV + rekmNPE42tI9MFYeYTOAa8LQy8DexuTSnOKG+gQH1PM3mtmhO0hS+7JdMZBH8VDshokKNWbr3LGiyQer + m/ywltuNJPn76k041Uxx0m7Fax0GEmQt3qKQ/HSpP26uCcZnawPw6dYwXDuUgE9Op+L6hRzcfLkId/+j + CvhxHe78vB43flqJG28W4s53siCV1r0QhzuP8jtHfPHRQU98tMeK97eZ8d4Gd7y/1oqP13rhxmpv3F7p + h7srfIHlAUQQsDQQmPbFbZKp691GfEqB8yGF2XtNarxd5Yq3KIT+VCXD3+rVeI/i8/1GPd5vMnBrwEfc + ftys5XfU+KxPgxvjelxbpJNKQF/bYsK1PSbcOvwFA/hiOHA5hojj8UYDj0cAx3nMW73x7iITfjegxQ8p + kL9BwXW5UoHjJL57chywj+LsSLUrzpHEvDTghJ+v0ePDAx64KUpAH9Hg9jGtZADfesSMGycsuHbUAx8/ + ZMW7+y34804z3tpqxW82eOKnq73w30s98JVRHV4Y0OO5Pndc6bPiSj8J7IBVWkj+jJjRVeuCoyV2OFtk + h6t1jvjvARV+Pq3B71YY8PZGI/6+24T3D5lwned1+6lA3LkQwnPiubwYC1yNxo3Lfnj3cQt+w898k58/ + NqHEOhKtRfUKzDUYsKzTj4KcA5yCfqBWg4lmE5Z0cTB3+JJk+2BNsyfW1FuxUszMq3TFA90KXFrijjd2 + hOCPD0Xh78fD8f6jofjofDg+ej4a115Pwp0384BfVgB/bAL+3mWbBfxRH/DxAPDZIPApX/ugDvhrNe7+ + sgbXv1eOD18qxJ+fyMIbuyJwedqMEx0KHGmlcO434qkRE66MG/HqjBE/XOOLX28NxJ/2hOHdQ1H4+GSc + VO75M7Ee8SNR+OjhcPz9YAj+/kAE3jsShxuPZ+PO+XzguWJeD7Fudc6CAZwKfCUNeCkVNy/F4N3H/PHH + oxbChL+c8cDfzvvi7y/448NX/PDpV7wlg/TO82bcfs4dd64ImHD7slHCjcsGXL9CXDbjsyu+uPV8CG6+ + GIJbL4UBr0bj7msxuPsNtsc3OS6+EYfPXo3ENWH+PheAT8574ZNzFp6HHh8d1eAT4hr70adH2X+PGXDj + ESNunmRfOm3FjcesuPuMP+5eDmb7ijLQxNfZj4X5+zpf+0Yw7rzkh1tXvPHpk+b7BvCHhzlOHtDj3X0q + fHBQhU+O6PAJ9/fxGQM+fcqEzy6Ycf15T9x6JRTXv5qJ9zi+f3wuF09tjca6YR90kbiUFuqRXUCRWRL7 + bwzgZAn/2gDOQ3ppAf7fmbr/3xvAOcUxKC6NQX5uIEmLAWJ9jnA/e0T4Mjf42COcpCyEOSLUaocoX3vE + BTpKd9SJEswCqWFOyCCpSqOoS/K3R6KXHbJ97FAf7YTZQjc8OKjGNw5647fPB+O9N8Jx4zfEH/1w408e + uP1HxpTfmXDzVzrGVyVu/kSGmz9S4sZ/mfDxax74y0Vv/Pghbzy7xIxNlc7oTrBDcbAd0sQ6wMIADnZG + XLAMscEqyQAOCTFKBrB/iAmBAkF6hAVpEBuikpYzSCSZTPR2QArPKY3kMtWH5+Arylo7Iz7IhWKDokKU + GopnjiMxTiVxyhd3lZE8z1Io7iBJONYXitM9gYxdfni6zwfn+ynEe91xoUdrM4AnTLg8a8Ezs+44y/F8 + fEiPAxTeO1rU2EBRv7pWLQk3yfCtMmIpCcl8OUUbCcp8iQ5LiKUkLPPc39IyrXSX7wbG/R1dVuzt95IM + 4H3jXtg5YsWmfgM29ultBnA7hWu7Csso9OcbXElUKF75eHu3GgcHdTg+bsCZGXc8PmXCY2MGyQB+ZMAd + x0UJ6DZ37Ko3Yn2xErPiT64kRwxRvA1latFHstqcrEUlCbcwgDPY9um87mLmdyGFkjCAa+Jc0CiqcSQ4 + oj3RXpop0UHi2SX+hMuyXzCARenne+avAuNlcoyVunLrgmmKbTELWPz5saZDjw0dWmxqU2JLixt2Njnh + IPPQqV4VHu9V4lynHM+0CIEtRIgZp/qt2NdlxLp2HWabZRhpcMZAC4VyJ0VNvxxL+pVYyXbZMMRrOG7F + nikv7KXg3jki1pbjvvi7G/vU2Dqol2YVHZqx4sicFQ8zPh8Y02DvkAK7B5QSdvD3NlKEzdfZkx/ZY1Wb + EzZ08zj79Xxdh5XtJPANjsw5TljK4187yH474oUNgxasZq4XhvCqPoJb8XgZhdWSLhWWdvEYe9k/BnTY + NmzAzkEDdlFw7RElFIn9/e54aNgDB/ot5DMqidiPciwMkkeJP2B6SLa7KGLbyM9agkjeA2SoD5Shlqim + QK0NVqM6mG0YokdFqAllHCOlYWYUhZhtBnCADsn+OsT76hDnZ9sm+oi1gXXIIP8s4HuFARoU+JD0ezgj + x9MRhRS9NRRwzdkWdArDotITLdVW1Ne4o6pKzPyVI5dCJDvXmcKb8SGLMSOFHJHjKZ4cLoHiIj7eBXHi + Tm7GClFiSwjwqCgKKFECLEWF9EwdcnPdkZfP46R4yM3ToyBfh5JCDcpEOegyFSrYnxrrNOhqd8cgx+LQ + gAcGB8ySATzAvNpJfiFm//Z2ajA8YMDYsBlT4x4SxkfdMcJ2H2ffmBxxx9SYCbMT7pidtmLRrDeWzJE3 + TPlhbjwQs2PEaDDmxsKxaCIM89MRWD4XKRnAAssXhWHxVCB/xwtDPSb0d2olE3i4z4DxQRMmhk2YGjVL + +xnmeOxhP25iP6mpdkA1Y1t1hQuqOA6qKhSo4PioKJExH7mihNewpMgVFWVq1NUY+R0Tmhvd0cjxWss4 + UlHiJhnE4vO1FION4s98ch6B1nqdDQ3idTfJ/K0mz6qttJPM5/YWF3R3yDHQpeax6jDK6zMx5M7zs2Ce + 42D5Ig+smvfEplXe2L5BGMCB2L4+6L4BPDfqjwlyudFu8vUeT0wPBmLJaCgWDYZgkLxb/AHSlEluXqRn + /LRKBvCSIl7fXCOmc7kvtu0o+X8/27VTmF95OjQUaVHHWFhXrkV9Bc+DAquzlsKsIQidVf6ozbFIVQhi + mJuyIrToKI7imKrg2G7heK7Duo5ycv8Scn8b1nwRjWVY3VjB8VvGOFmLlf2d2DK/CI+fOIarL17Fa69/ + E1e//jqe5uOjjz+BY0+ckx4/ev4Cth18AJPLlmF0yWJs2r8XOw49gLk1K1HVUofo1Dh4h/rC4KmH2l0F + lUkBjUkFnVkFg7ghVyr5rIIH9ZyAJ/WcMHzvmb/34OtrlG72DfA3IEhUf+LjUN/PEcwx6e+lpdbSUHPx + 9ywKSfuJZYA8TK4I8lEgJlCNRObElABHlEbJ0Z1lwUSBF6bzrViSz3bl9V6Sa8Jcjg6TWWqMpKvQl6ZE + T5YGbTliSR6K7QybAVyygMJkRxRQc9VminJYPphsDsN4XRB6i71Qn6pGZQKFeiL7bgL7bSIhzN8khYQy + juPKNIOEwgSNVP45O9nwJQNYMn5jbIiNVkszfwWiojSMCczt0SrExGuQmGpAapaY8WtFXoEHYUFuPuMC + kcX+JJCZo7eVguaxpmcqkZ5hgyhR+O8M4JpyjqUKkwRRMrks3zYDODvFAVnMhTn8fF6GbYZLTpqKr6v4 + ukIygzMTXZFD5PKcS7jP8lyttO5vTbEFjZVeaK32QUe1r2QCt1d5oafWj305UCoDXV9g+JIBXMfvCgO4 + rdyL8F7YeqGh2IzKHC334YKMOHtkMH7eM4DLyFmreA4VHGPCAM7PUUjb4nwNigo00szgSnKKhkozj8UD + vXW+GKvzxzSPaZ7HtLrcA5vKzNheYsDeYgMOcPwdKFTjgUIZDuW74liBK87X6fHVbk/810gAfrkoAL9f + asXvlunw6yVa/GwJ9fS8Ed+lbvnKkBaXqJ0eb1fiTJcejw5ZcXrUG8eZuw4zFwoD+KAwgBmfxdrADzBO + Huox4HC3TjKATzEHCgP48R7+BiEM4JPkj8IAfpCx+sC4Gbuo23cMG7GNMXR7vwo7+Z0DzJUPDZDPjHrh + 5Jhtfw8xv+5vtxnA90xgUQ5aMoBbNXigXS+Zv8eGvKRlMA50Gsk1NNhUpyCU2CRM3not1tdrCPKSOu19 + bGgSN+UZsKWTx9PvLc3+3dHnh02d3tIawKK83Fyr0JwBmBAzdZuC0d8UgoHWyPsGcHtbGDraQyUDuKvt + cwNY4N8ZwL2d0cwrkRiVTODPDeDRlkCMtQZgrM0PE+2+mBIGMPniTJcZc91fMICbGecbFOirkaG3RoEu + cq528tGWGg0aq7XSDGAJCwZwKzmoZACXGzBUZsQM+9CKOi/JAN7APC9Mhw1lMmyrluFgM/kZOdXlRd64 + OOOJc2ynU+S+D5Hj7CE33dYix4Y6N6yudiPXvVcC2kEygEUJ6KFiJ/SVOaO33AkD1OAjNeSMjSrMsM2W + 9eixjDlqvkOJxa3kkdzfRKkbRvOdMSb+6MxzxRwxQ54xk+2MiWxyWGKE3HMokxwplVyJnGmiwAHLSmXY + Uc1+XsM+2OiJB5q97hvAu9p8pBl1s+SrwmjpTXdAF7lsJzmLmEU8nCGMZhWWFxixttCE9YUGbObjLcxb + mzgW16S7YEWyM5amOGNlhhtWMJYuTnHCIsbPZWIWcLYMm3KV2CYMYAlu2J4jw658OQ6Uam0loL9gAO8k + Z95aKJcM4J0LBrAE5vzdosJSkQMOFNjh4WJh9DnghWYXfKPDBW/2KfDLUTX+yDH5t8VmvLvMA+8u9cK7 + K/zwx3lf/GJpIH6wJBjfmQvBlREfPFAvSvLaYxGv1USWWDPZ+b4BLLj9PQM4PvL/2QCW8A8G8D0I49fT + 11WCeN+XmiwgRCmVgQ6JpH6LFL+p5mtyyQAOY9yPTjBIBnBKpqdkAqdlixLQvtLz+BSz9H4EPydm/foH + 2cOP2jAgxOFzA5iaLpwaVRjASXEqiHKheWlGyQAuorYpYt4rz1VLBnA9OWVLkbhhjX2IfXMm2w5LM+yw + gddlr1hvucINj9Ur8DTH0TPNSlwQ1fN4zV9qd8br1AX/ParA/8xo8b/zBvx2pRm/WGnBT1Z74wdrA/Da + Ik880824U+mEVfzdxbl20jrYa+uou9osWNMqliPTS8bvbK0cixiDljdrsKZNi63dekkHPDjsjkfGLHiC + OubpcQvOU6+cHzXhKWqGx/s0eLRTgVOtLjjd5Iwz9U54tMYBT9TY41KDC15uU+Fr3QZ8g3H3Veq+V8iD + r5KPPsvvPkV99Gi3DCeoZx5pccSjbS54ot0NT7a54ZkOBa70avHSqAcuM26f4Xg8VKPCyiwHDEdxbIST + S4baScvwNcc5oy1ZgRbmxboYctoIB9SEO6E2wgXVoU4oY9sU+9uhyI8IEDeROiBX3DjOx6nU8+mxwjRR + IS1FSe0tozagFufvhlPjREXbdENaqpgBzFybr0RVMePWggHcUaNF1z0DuJ48m/FpnPFrrEiN8QIVJvIZ + N3I1mMhUYDjNDSOZcswyR86Ta66u1EvjflO9QYr5G+vUWF9D/VZJvVfJ8cYYub2aY7HCFVtLnLGNmnVn + mauEXdSwu0qdsYfvPcC4dIQx7tFGGc41O+N8syjP7oRLLc54rsMNzzM3vtClwHOtTni+zZmPZXhhQIvn + xEzucR/mSx8c6vbB5kYPqYyzMH/vGcBD2QJOGKaeGqcmmGY8EP8jrBH9p86ADbwG68mZVzOOzFMfTeao + GPPI6ZKVqIinFouiphLln9kewgCOjHJFRIybhP9bAzie7SoQl8zHKQokkVMlkw+lkRdlpasXZgCTf6TL + UZwmRymvs23pR7ZXEh8TRaKUbDxBzljIYytK0UgGcE6yMIA15FU2AziVxyWW2YgNtZdmAQsDODTcASHs + U8IEDiHumcFR5JwJ6Vqkkdtm5FmQkq2X1v2NTeE5EUlpWqRni2oxnsgv9kZSihpRMa7S7wmI9X+jovg7 + 98BYIa5ReIgjwoK5f8YRMRPYtnXl+wpEMgaKCq/BAXLJAI6iJhHrvd4zgKuzZJL+6S4QFQXcmK/kWCJu + 9qhzx8YGT6ytFXpIxz4oxzjz1lS+C2aZmxaVy7CY+W95vSs1C/NFsytzpxP2tjvhoS4XnOqS4yL17HMt + GlxpMeBSqxlPUA8+XKLCbua+bWmO2EH+vjtPKVVyeZAaai/z9wbuZybZHr0cT41hdqgXJnCkzQTuIc8d + ZS5aRN67grxvbYEjtrFPPyiqejDfPsnce5H68EXysJfHjXh+VI9nmGPOdrricJ099pXZ4yD7/+F6FU40 + 6vBYmxWP9fpiX7cvFjea0VbEWJvOtmU7ZafoyaFNSFswgMVSL8F+TvD3tpfgY/3cABaGsHgvKpTtG62T + lqlLSxIGsK0Ed2KsGknC8CXEjF+BpEi2N5EQwf7zBQM4RZqwYoMwfwXSo90IF6THOCGTeS4zzkkygAVE + Keh89h2x5m3+vVnAhOD+wvzNSePxMNaJNbLvGcBxHF9RoQ6SCZwoZsImyKUZwFniBgf2waIMURXXhAp+ + v5rjpSFVjibyBckAznTCFPPP4io15ipkmCp2xBhzzjBzz1SOHVYy7qwn51mT74i1+fbYSM2/lX1ld60G + exuN2F2vx+YKlTT7V5i/YvbvOHnPSBIhJrCkMnakuGAwwRF9MfYYiLbHeIIMs2kaLMlyx+JME6aSbQZw + C2N3Ha9FZRw1pJj9y2uRx+d51DnCKBczoQVy+P1sAXGDCcdTdiyvZRTjOPtXBsepWAdYVPqtSFOjJlOH + +hyT5Au2U690lhrQSd3VRTRTbzQx/7YwpotS0S3kUl82gBWooqap4Hv/aACXi6VweIwV8WLNYmdeT1e0 + k7t0ULN1ZsjQn6dmPqduLSDvJXqLVBgqN2Gs1gPTTb7kl/6YbPHDOPn6eJs/hlt9ydWtkgncWWkzgHuZ + H0bJF+fIF5c3eGNNjQfWV1kId6zj8a8pZX4m/76wtADff6AXdr7eThDw83GWtj5i3d8F81fgXgloq4co + +ewMk8X1Pu4ZwO7ubrBalfy8Wtp+0fy9N/NXvCY+K/4IEH8IeHnq4OVlg7d0tziJmacCgVZXBFldEGJ2 + QrCRBMlghxAi2oOdPdAFDSnu6CnwwVh5AGZrQrGsMQarG6KxuiIMq4pDsJSEayKNwpTivTRCjmQfB4RZ + OGCtDvC22tsGq8UOMXxd/DFcwcDenE8RQYEtSiHUMGFXsjGK2dmzGXAymMyFAVyRoeXnLOgq9kJXvgfa + MtzRkmxCe7onjyVSMoCna8MxUOyB7jwDuimCO9kx2jPd0JXthj52mLFSNSYZWGco0uZbzFjZ4Y3NvSHY + 3htGURaCvST2R7p8cK7bCy/2euMbFJ0/JFn67ZAO705Z8TGJ2QfLvPD++gB8sDcaHx5LwvVncnHrpeL7 + BvDdn9fj5k8rcP3NfNyVDODUzw3go3749JAPPtnnjY92WPHBJjM+XO+Bj9d64sZqT9xa4Y07y3yAJb5E + ADDnD0x441a/O6516vFxq1oyf98hsXyr3BG/K3HAHypc8JdaJd5v1uHjNhM+7nDHxxRwn3SY8GmnAZ/1 + 6XFzxIDbs0bcWMrn6wy4ttWIz/YY/9kAvhJDLBjAT/D5iVBc38HzXWrEH4c1+CnF2feaVHiVgfspkp4j + FGeHuf/TjUw03XJ8fcwNv93kjk8O8nwOGXDr4XsGMB8/YsH1Y2KNXne8u9+IP+8w4a3NJvx2gwW/WOuB + H630xH8u8cALgxpc6lHjQpcO57tMON9rxVN9FjzaZcDpdi0eaVTgWKk9TjHgXa5wwHdIZH84rMIvF+nw + u9V6/GWbEe9xH5+d8sHtJ4Nw91IY8DzP5xWe1ysxuPNCAD562gt/PO6J7+2w4PSsBht75JirY2IlWV3S + 6oWZVk+MUrSPNOkxwwQ13+WLZe1+WNFM1HpiWYUZi4s0WFrkxMHsiiendfjuRn/8Zn8o/vpQMN47FYJP + Lkbg2ktxuPnNFNz9QR7wi3LgD43AX9ptJvB73cAHYjZwD+5+1Io7f6/EnT+W4uaPS/DR6wX4+7NZ+MPJ + ZP5uIJ4Z1uJYmwzHef6PD3ngwrgnXpqy4FuzFvxomSd+ReHw+/W+eHurL/6+NwjvHwjE+/sD+dgff97u + iz9s9cEfdwbhLw/E4PrZXNw9Xww8VwZcLeE1yWcfFTN/xQzgVNx9MRHXL0XgvSf88JdTHnjnrAfev+iD + D67646PXAvDp6/64/jr75KsW3Llqws3n9bj9nB53njfiznMGQrxmxM0X3Ln14DYAd14Mk8xfgTsvh+PW + VT7+Ch+/GoGbr0TgkxeD8fEV/vazvvj0GS98+gT78CkdPjqmvm8AXzuix2dH9exD7MPH2X8fEW1sxp0n + /XDnAttZlIJ+ifga++03xOxfmwF892V/yQC+9tQXDWDDggHM8bRfhY8OafHxcQP3acQn3Pdn5624ftkL + N3ic13ht3nmhEG+eycETm6KxdthPKv1QSlGfme+L9JIYJJcm3zeAPzeCv2gAizWBibJMfj6byEVaST7S + pJnAwtQV239t5H6OezOBv/x6Wmn2l3Dv9XvGr0ByaRYSF5BczufEvzKC7z22fSaT382EtJ5xaSoySpKQ + XRyLkrI4FBWESeQqRtx57cP84EUI85dxPZA5I5CkLNybQszfHnFBzoSDhMRQR6SRHCeTLMdR3MXwOwnM + B0X+JDXJJJIUQ89tcMcvn+YY+m4UbvySeCsAN/7oiTt/8sTt35lx61eMZz9T4daP5bj9QzVufZ+x7jUP + /PWCN35yyBuXF5tJbpzRF2+H0iA75qz/ewNYrL0fTZIeH+CG5AAXpJFQZvs6Ikds/V2QwdcyglyRJu4S + 5HkkkLjEkRwlMk/lJNoxl5EskRivrrPgQGcgHukPxSOdPjjT7oGzHSTfnUY81anFU11KqQT0sxNGXJ4z + 45lZEx4bN0jlC/d3U0C2KrG+UYVVtSosJcmbJ7lYWmXE4jItFjOHzZGYzJEICSyisBVlnOaKGbtKVdjQ + ZMT2biv2DHhh36gP9k/6YBcF+eYBIzaIGaQdSixvccPSVjnmm2XSDOB7BvC2bhX29atxmPHm1KQBj03o + cYYE/tSQAY8MmnCi3wMPd1lxoNWK7WLmcQ5JYQYFS6aKwlOLXpJVMQO4MlaJgig5MkOckRZEwsw8X0BR + WR4nk9Z/bCHxEhU5BJkV5q9AT4YwgCkuCvl7JaLss838vWcAjy4YwJMUDzPVCunPj+WtWqxpU2NNoyvW + 1ztiS60d9jc64iRz0bkBFS70KHGlQ40rnTpcGfTEkyM+eHjAik18PsfvDNY6oL/ZHiOdTpju47UYUGDV + AAX9oBbbxtyxd9oT+2e8sHvSA1tFaeghLXYwl+6btuDhxd44sdwPp1cF4NQKfxxdIsxgMw7PmvHwtEky + hLcPyLGm1Rlr21zIM5TYyd/YPWrFNl7LdTy25S0u5CEuWEHRtHGM+2Cu3zRsxdp+k7QW8dpBd6wfsmB1 + vxHz7BezzAFzbSTt7D9r+7TYOKDHFuZ3UaJ6e7ee7SfWTOS+B63Y1WPGGvKCsTQ7aa3mHvIo8QdMO8Vc + W4gDmgKc0Mj+XOcvQ60/ybMfybPYsv9XBKhRHkD+FqhDcaABRUEG5AeZkMPHGXz9iwZwnJ8eCb56pHrr + kEYOmeWlQraXDHneMmkGcB45bRHHXU2CXjKAW4us0nqV9ZXuqGYfKi2nYCqiSKAQychifMh0Rkq6kzSj + PobHHRfviPgEF5sBHO/G8SbKa7lQdNtM4BiKp6RECiuKpswMI3IomnJzuKWwz83WojBXjeJCBUo5PsrY + r2qrKB4a9ejtFqWgbQawMH+FCdzbo0NvhwZ9XVqMDBoxMWLB9IQwgK0YGzFheECLUWJsUIcxjtUpjo25 + GfKDxb5YPh+I+UVBWDoTgvnpMMxPRRDRfB6FZbMxWLEoihCln/n6dAhmR/0xxv33k9f1tmskE7ivU4MB + 8p4htudwP7ds435yoe52OVqa3VBX68Jr5oIqij7J/C1T8tzcUJTvgpICYQC78jxlKC/XoLaWAorCpLHe + hLoaAz9LMVTows86SWZxdbkS9dVaNFEMSiYwObFAS4MGTbW8TuRWVcIA5rax1hntzQr08NoMkocNdht4 + nHoepwGT7KOLeH2WcKwsm/PA2nkPbFrlg+0b/LF1bRDWzYsS0IFYNOqLScaPsW4LRompAR8sGQ3C8vEw + zHb5oZ+xrS3HjRzdiLlKD8YyD8wVuGMy24jRLB0G03XoZhs3U2jXJQuxJ0cVBV4lxWB1iRa1ZYw9FRZ0 + 1Pigrz6YYtGfesKKbIr3JOaX/GgdesqpU/rLsXOsGVv7a7GxvQxrG4uwvoEQ2y+ioQTrGsqwvLaY47Qa + q/rasWXxNB45dAAXLzyDF196CZckw/c8Dp44gQeIM3x89MwZrNu+HYPTk+ibGMXqbZuxYfcOjC+dQUld + GcITw+AZaIXBQ8z8VUBtkkFrUkBvlktwt8ph9lDAw0spwdNHmMBa+HCc+fgZ4OtvhG8A81WgO2FCMLeh + 3IbytQj/zxHqx/zmo6emo76zaqj7lLBwP+4GN1iMrvCxyhDk6YYIL2dEMQ9nh7igMdmAnjQT+lMpYlN1 + mEzTYSbLgNlcA2aECc8x1Z+uQjfjfWu2CnUU1P/OAK7JUlMMe2O8KRRjdYHooW6rTaUwT3BDZZJMMn9t + xq8cZckKlCVRpKeoUZFmQHm6AQWJWuZUnWQAZ6UYJQM4KUYtGcDC+L1nAMeKWcBENBERrkBEpAJR0UrG + DC1S+FvZeRbkUy/mUzuKG0MEsnP4+gKyqBOzszUSMnleWTy/bOlPSjmy0+TIy5BL5mlloQ61pSbJAL4H + YQBXMAcXU7PmpYsy0M7Iz1Tw8zqCsYc5MZ+6NTedvy/+FEphTEwWpeKUKOf7Vfl6VLGP1xSJktKeaKkS + M4AJXreOSmEA+2KgIQCdHA8NBXpU8rcreFzVWSrU53GsSjOAPdBaYiW45WOxfvD/0QDm+CovthnAedTb + Avk5NhTmKVFRLG6moLau8UBPvS9G6/ypi3yxhMe0qtyKDSXu2Fqkk9Yn3V+gJhQ4WOCGQ4wtx4inajR4 + mdrzW31mvMEc+vMZPX69SOgzmwH85mIDvjOlwyv9KlzslOEcecdZxsDHmLMe/YIBfGjIigcG/7UBfJy5 + 8CS5yqPCQBYGMHPrGf7eKebnoyNGHBoz4+CkFbsnzOQ8aqwlH1jf6YpNHW7Mi2oc7NPxcx44MepFzmXF + ITHDmLFtb5sKewjJBG4lFyIOUHMd6jbh2IAnToz54tiwNw70uGN7oxLrqt0krK9TECqsJdbUqcn/1FjV + oMXqei3WUUNuaDVhKznZzj5v7BCztnp8sK7dEyvIo5Y0ezKn+0oG8HhrIIabgzHQHIr+tkj0tkaiqy1C + MoDbO0LR2RkizQDu6gy7jy8awKIEtCj9LNDbFcWcEkFuE45Rfm6si+OQGG0Lxmh7EMY7AjHR6Y/JTk9M + MR7PCPOXELOA7xnAw/VfMIDJJdqpj5ur1ZDWW6+0ob6C+YL5pqlUg/YS5s5y6uZyE+aqxQxgL9sMiFp3 + qTT2NvEHZJMGhzsNeJJ85/KcFy7OWnGOPPgU8+nhXg32d6mwq12NLU3kOLXkqGVu9w3gkVx7DObbo7fA + Ht1FDugqcURXqTCDXTFcLWeckfM6khu3KbC4XYlF/J3JGjl5oxtGC1wkA3iukDyvQI4leW5YnCv+yHbG + LDElSkTnOmI0U5TbdcZ8uQxrq7TYW+2OB8Vau/Xsj03sm7xmh7oCsLuNbVijx6ISJSYLZBjOdsZAKvmk + MH+5ncxy4z400prZ6wvdsZHbTcTmfB02kpOsSnfBMskAJv9Od8NyxtJFKTy+FEfMM5as4rjcwPG4ldvt + xLZsN2zLlWEnj33/PxjAB6qN2FWmxrYicvgifl6amaWQ1gXeVuyKncXO2FvsiP2FNgP4sWp7vEAN8K1e + BX40qMEvyVX/MKXH23Mm/HmRO/6ySKwH7Im35n3wqyX+eHMuEN9hDn9hxBunOvTYUeGClfkOmGObjGY6 + oZfn0sqcXBtPDhIrhyjfmRAl+ycD+F4JaD9R+jlItTAL+MsloP9PBrB/sEIqKR20AGEI+5Nb3jOAxQzg + hFSLVPLZZgSLmcD/ygB243E4SCawmAEsZgQLhFKnRIQ7SzP6kuPV/2QAF5NPCgO4Ol+JhmLySPKobvYp + cfPAZKYdlpBrr6OO2VvgiGOVMpzhmDlbr8Tj5G1P1DrhKeqN5xod8GqbI/6j3w0/nLDNAv7VMsbJZWb8 + eIUH3ljli1epL57sUOBAqb1kAC/JscOKMoVtTdAOT8YOdyxvpoZh3JmqEnpIhqWMR6uaVeQ0auzs1uAA + tcHxEVFZyownR90JI54cNkjV4x6l9jhBHXGsyQHH6u1xus6Jx+qEc9xebpHjK4zHrzN+v06t9FXG4JeH + 3PEif+sStc+T7C+nGU+PtzvjeIsTThGPtrrgsRZnaRKIWAP0OWqW84zZjzSpsLPUDTNJ1B8R1B1ELfVH + FXVIdaQjamLdUB3jioooctJwR1SEOaMinH0oxAkF/nbI8qF+l27AtkOKtx2SfYkAPhb/I4jSqeQMKeQP + CdQGwvwNDbNDiGQAUjvE2iOFXCSX4/CeAdxUSY5ZrUNnLbkk89RAHXk8Y9M4x9IIY9cIPzeayziSQ92Z + pcR4mow8yI1jWYl55v9l/MyaCj021Rqxo9nMXGHBrhYjtjHWb6ySY1OlHDtq1dhRo/6SAbyj3FWCzQh2 + we5KVxxkXD1cJ8MjDewnjewbjfZ4hn3jIvXg5XY3XOmSU7fK+dwJF5od8EyLI55m/np6kG0w7oOTQz44 + 2OWDTY1WzPLchnieg8IEznbBYI6AE4ZynTHGPjpNnbCMXH8ttcDGBiM2Mm4JA3htqQ5Li9SYIpcbylBT + h6tQQ15WGCdHOsdAfISLbXbrFwzgyBjbLOCYOFECmjxroQS0ZPwuPL5nAMeS68VyG0O+F0/uk0juk0z+ + nsn9CIMsP1WYZjKUpApQu/Bal6eSExJlRCnfL0rmZ/gb+eSKBWzvvCQVuY0S2Um2GcBZiSqkijV4qQWF + ARwdZn/fAA4K5/jm80ABvicM4XBxEzH3n0xeKyBm/Ubz+KKTqC25TzH7N0twxhIfFJb5IZW6I47nFknd + KWYCR0aIG48/N4Al8zfMSTJ/QwPtvmQAR4XxeoXLER4qRwhjnW2pT+4r3E0ygDPFufG8hQHcyljfmS9H + H/PUaLEbZkuVWFFjlP5LEjf/T/K9oQxb+d8R5qmpIo57jq1FFW5YWi/DKubLjU0ybG5yZt90JG9xwfEO + GZ5hPnyuRYvLrQZcbGMsaLHgSJkGu9lPtqY5YruoLMF9SzcViUoXVSZsYT9fQi4vlvhq5lgVBnCduHmD + Y6ydmrw/1RGT1GqL812xNMcea5kLdpc740iDHGe5v6e7NLjCOPPiqAHPj+hwnnnmcR7PIw0OOFzjhGPs + 96fIA862GnGeXOjJwUByKl8sYt9spKbL5XXJEm3N2PtFAzgmQiHN8hXrAAcQYu3fLxrAQb6OiAiWIzZC + w/htQmqCCYliXXjqhARhAkcpJcM3kfE/MYJ9hltR+lmYvwKJwphfmAF83wBm/xf4ogGcEWsr/yyQGe+M + XDFjnZqhJFODgnT1ggEs+rgaOel6trMGSexDNgNYRR2jQJy4sSKE/Yn9JpZ9Kol9OJXvp3NMZbJvF1C7 + lGQYqK10qKZ+qE9ToCnZBe2Maf2ZLtJ/ZIuq1Jhl3JkodsJovrhxTdyQZYdlRU4c33KsK3LGhiJHbGY/ + 2SHKPzcacIDtv4d6fwPzycp8JyzOcsB0uj2GE/l9tu2wMIFTmdPISwbiHdDDNhexeyTWFZMpSswxF87w + nMYTNejnWG+McmQMt0cFr0VxLHV2nBNy+Vh4dlnCKI9nPxflnsVW9HnG+3vIYNzPiOA15DjK4XsFCTLp + JuCKdC3HhBH1uXo0FmjRWizMVRO6qEvE45YixnHqjzbxXq4WTYzPtekyVJFHfdEALssTZaC1KGGfKmNM + rxAVq6jpahmD6jnmG5Nc0ZToguYkZz4WS8K6oIPjoZ16TkKODD3cTz/3O1rjifF6H+pZX4y3iJsnAyQD + eLBF6CTTvzWAV1NHrauykEu6Yy014+oyPbljAJ5ZVoDvPtgLO08Pewh4eTrAS8yQ9Vowfz3uwUWCh6dY + B9hm/Lpb3b5kANtMYJlk7oqtMHz/0QA2idm/Zjl/Sw1fcWe4r8EGHwP8fXRS+bAQXxXCvGWI9HJGjKcj + osVMLg6uRB5bDgNXNQnWaEkgpiuDMFPhx+DjzyAVgnW1YdhYEYrN5WHYXBaMVcX+mM73QWeqGTmBDIYW + DlAxUAkPk+1xFH87I9ABpRxQzTkqtORrUMeLXsFGEGXE8hM4wKLtkBpph+x4J4pfUf9bGMA+6Mn3RFum + haTThI77M4DjJAN4qMwL/RTBwyUWwoThUgPGKoyYrjNjSZMVy9utWN3rifVDftg2GoL9kzF4YDKOiMGR + 8QicGQnGBb738qA3Xu8x4k0Kxl/1KfE2A9pfR/X46yzJ8QpvvLMtBO8+GIvrT+Xh9kul9w1g/LwBd35a + gVtvFgCSAZxy3wC+fjQA1w/747ODfri2yxsfb7Hi443CALbis1VW3FjmgdvzXri7yAuY9QWmfAAK1Rs8 + jo/aNHi/WYG/1svxdo0bfkty+CsS+t+WOuDtWhneb9Xj0y4zPuv1wLVeC7d83O+OGyRut6fccXfegjsr + +Xy9MIANuL5Hj9sPW4FT/84ADgMeCcbNPV74cJUBf5mgUCApebNNjW9zXy+06HGWgutMA0lJpwovDanw + 3Rkl3tpmxscHLLh2UIebh+4ZwEbcOmHF9SMWvL9Pjz/v0OIPG/X4zToDfrnaHT9ZacUbyz3wnUWeeJaC + /cl2BZ5o1zBpGHCu24yz3e440aEjaSVIKo+VO+FEnh2eKXHA11oU+M8eFX4yocWvlmrx1kYD3j1owacn + fHD7XAjPh+fyUjzw1USC21dCcO2iH/562hdv7PPEY0u0FORMuDUOGCdpm20wYZrkbqLFgAkmqDkS7vlO + Xyxr88PyJj/MV1AoF+pJmpSYzXbAtjpHnB1V4NurPfHLnQH404EAvHciGJ9djMKtryTi7rfTgDfygJ+V + Ab+rB/7UAvy5DfhbO+6+2w580IE77zXi1l/KcPv3Rbj2Ri7eezUTf3kqGb85HINvrfTCU70k3K1yPNrr + jqfHfHFlyg9fm/HCfy32ws+WeuA37De/X27FH1aZ8Sf2pb9sINiv/rjeil+zzX9B/GqDL97aE4XrZwtw + 9wKP5blK4Go5r00h7l7NkGaq330pGbefi8Wnl0LwwZO+ePcJT3x4wQefXPXHp18PwLX/CMT17/njxnc8 + cOs1A269rMWNF5S48bwKt1/UEexTL5pw6yr73FUL4UUE4Y4wfBcM4FtXQ3H9+SBce55j4WowPn0hCB9d + 8cdHwvy95INrz3ji2jn2oVNafHRM9SUD+NphnYRPxYzdo0Z8etyE22fFTO8A3H2WfZi/hdfYj7/Ovrtg + AONlf9y+4oNPn7Tiw1MGfPSIER8eNi4YwFq8u1eN9w+o8cFhPT5kP/34MTM+ecoTn13y5jFG4JMX0vHX + K0X471M5eGxDDNYMi/KSFpQWWpCVT4JYEoPELxjASaU23DOA08rSiIwFZC0YwDlIk0zg//elnf8R/28N + 4H+eCSweCwgDmJ8lpM/8CwM4qzgOJaVEYThJvCdihbgn8QpgLA8U5i/jup+eMJCMkZyFUrRF+jsQYktR + FuyIJIrsOG6j/OwQzu+F6ijwmGOaSTKXUzifmVLiRycD8fevR+P6/0Tjxu+DcOMtmwF893dW3PmVHrd+ + psatHytx54da3PmeCdde88Q7533ws0O+eG6RGVtJRgV5LSchz/hXBnCwDqEhJooDmwEcEGKUDOBgfyXC + fUkG/VyQGujKnOeG0jAKEkJsi0jkC0JlyAuXITvCFelhDkgKEXew2aE0zg4tJMZzFFXbmrxxuDcEp/uD + cYyE63iTiFtqnG5WkiArcK5ThguDKlwY0+DClB5PTulwmo8P87W93TJsoZBe2yjDcgr7JRVy5lk1FlGw + zZaoMFukxHSBHFN5FP/EdL5KwlS+gkJQgQ1CkHZbsWvAC3vHfLCfsWL3uCe2UsSLEtArWsWfBS5Y3OjK + nOmCeWI5hcNaHteWbhX2MNeJmdjHR7U8Ji0eJYEXszMeGTTi5KAHjvf74CEKz32NHthQosVy5u3ZXB1G + c3ToIVltInmtjOW1ipYjm0I+LdAJmaHM55EU+hTtjSkKtJOEdaS4oivFEV1p9guzfx0wQNE6nO+M8WL5 + ggFMcrtgAI9QPAsDWJSBnqxkvK4Va7YrsbxRgRW1TlhdbUcRboe99fY43uaCc/1KXO5T42We88vdBrw8 + 7IVL4/44NuSBLZ085jon9FVyv412GOp0wFQvBc0AhRS/t25Qg21jJskAPriI5zrthZ3j7tg+ZsCecSMO + znng6FIfnF4ThKe3RuPpLZF4bG0gHl3ph9PkBieWWPHAuBY7B+TMLTLsGNBIaxE+MO2NB5jTdwy7Y103 + j73NlXnFDWv7dJL5u3PaF1vHvLBxyIINI2bCik2jHljLa7+4U4mpFhfCGUva5VjJtlrTo8X6bi02dOmw + ucuAjZ16bOsUayJbsbXTHSuqFBhMtkN3jB3ayKNEOaemYCLIEfUUUrV+zqj2dUOVtyvKvZ0JF5T5sM/7 + KlBCLlgk1vH10yLfX4ccfwpjbtMCKK4CbAZwrJ+eMPCxEcneeqRYKaDNFExmiiJPV8kALvRzRUmoArVJ + RvI8C5qLzGgoNqGqzIBy9ukC9tlsCsn0LEeKbQckU5QmJjtIa2pH87jj4hylmb/CAE6gQIiP5hgWf0pQ + QEVQOAkTOJbiKZn9LiVFi4xUHTIp2jPZF7MyKMIyFCjIlaMoX8m4RQHAPiXWwm0jfxnos2CAHKmvVy8Z + wP19Bmn2bx+vqTCAJ0etmJkUBrAFoyNGDPWrMdSnwlCvUsLogApz0xYsW+KHFUuDsHw+WJrdu2w2AsuE + 8TsTi+VzMVgxFyuZvwJLZ0KxaCIIk0O+GCZPE+ZvV4sS3S0qdLdy26pCX4eSUKGX226ii2Ozne81NShR + w5hQxbFRxZhQxniQl0PxxLFTlOeK4gIZSouVvK461NS4o76eqDWhpkormd+FHFsFuQ4o5raylEKoUo2m + egNaGo229YAb9Whp0KG5VoXaChdUljhK2yaOtfZmNXo6DBgkx+xnH+tu1fGYNRjq0GNy0IzZMQ8snrJi + 5ZwV65Z6YdNqX2xaFYC184FYMeOHxaNemOq3YKzbhJFOAyb7PLBk1B+rJsOwfDgYk00W9PHYJytMmKvw + wFyxB6ZzzRjPNGIgTYcuiujGeJm0hnhZrJM0O6A0k3GZYq+cgrC62IDGCis6q3zRXxeCnlJ/NGRbkc84 + lB7khOI4tndlDNb2l2HXWCN29Fdjc2sxNjbkY7NAfT42EWK7ub4AmxoKsaGhGKtqC7CypQJr+lqwbfEE + ThzcjfNPP4Hnnr+C85cv4/ST57Dv6GEcIE4/+QQePvkIVm/ehP6JYXSP9GPZ+pVYs3U9hmaGkc8cGxLj + Dyt1l9FDCZ1ZBrXJBTrqN73ZFXqh7TxcYfZ0g4eXDFbC00cJT281fDj2/AKo1YLEzUruCA21ICzUirBg + KyKISCI66HNEBJoR6m+Cn6cOPsIANqsWDGAZzHpXWKkHvYxO8DfZI5D5OsnHEeXRajTGatAao0BnjAx9 + cW4YTlZiPEODqRzyYaI/U4NOjqkWXvvaTOo1UQI63RklAgsGcGGiI2qy2V8qvTHSEIThukB0sj2rU5Uo + S3BDRbLN9C2XjF/GGm5LklTUfWqUpulRmmFAfjJjTpIe2SkGZKUZkRYv1v1V2co+R3F7zwAmxPPoSCUi + mJtDRVUS5ucYUfKNv5HNmFOQ70FYkJdrQj6Rm21ALs8lL8fIrZ6v25CTpUXOwuyUXJ5jbroC+ZlyFEsG + sOFzA7jMBmEAV5XoUM78W5TthoJMYbTyPPIMhI7f06EwW8/XdfwdW8lDYf6Wcj+V+XrUFPI3hAFMNJRZ + 0VThiVaivdxzwQD2wWCDH7qrPNBYoEOV+ANjofyzuDteGMAthWY08fsSRGy9XwL6ywZwoTCAC/SoKDWi + rFgnlX8Ws6NyMl2lP8lzsxivc+Q2A7iSv1trM4BH6v0xWeOLRVXeWF5uwZoiIzYVaLCD57w3T4l9+TIc + zHPBA/mOOJzvgMcrZXi+RY1X25X4FnPfmyNy/GxKjp/P2gzgN+YM+Oa4Gle75TjP/HeuWY4nmLceZ846 + M8rcOeyJI4MWPDRkJQ+x/hsDWIMTnQo82mWbASxKHZ5mbD41rMdR6t1DjNcHmbv3THlgRYcb5lucsLzF + EauJreRee6npHxx0xxFhNg+Z8WC/CQeYQ/d2iBmoauxtU2IPIWYFS+sO95t5XN44ORmAExO+OMC8sbmB + ObjCEasqBfdww5oacodaBVbVKbFCoEFDaLG6SY/17e7kAVZs7/Pk1hMbOj2wqtWMpc3uWCwZwKIMtCgt + 54fhVpsB3CcM4Hbber7CAG7rCEVHpzCBbdt7+KIBLNAjmcARzGERjNPhGOoOw3An0RMqYbQrjAjFRFcI + JroDMdnticleM2aYi75kAJOvjtQp0H/PAK5Rol1UjWDuqatQse/bUFtqmw3ZUMSYUKRi3NVhuMIdc9VW + LK/1xLo6D8ZTM3bwXPe1uJM7uuPkgAXnJ71xRTKAzTg3ocfJIQ2O9GnwQK8We3nNt7eK2dRKLC0X69yJ + NXwdMJxrj75c8hlq//YCe7QWCjigs9ARveSH/ZUuGKt3Yy6RYZb5co65dYK5a6zMDSP8DWEALy6SYzk5 + 9IpCARWWFcokLCmw/aE9x88sZ65cV63FllojDlTxmKvZR5hPH2ww40inHx7uCsS+Nl9sqDFiWZkGczz3 + iTwZRhn/RlIdMJHugjmOpeX5OqzlGN9Q6C6ZvwIbOY7X56qxknFzPkUYwG5Ymkaku2FRqgtmU3iMYnZw + jgJrOb42cytM4C05btjGfWwn999XZjOAH663GcAHv2AAb853w+Y8N+5LRrhiW7Ebthc5Y3exEw6UkBtX + OeNcvQte7lThu+T1P50w4teTevxuUoffUYv8YcqAt2aMeJvt8rtFXvjZtAf+a8ITr4964nm22zODnjjE + vrGJ13SePGKEnK0nzQltzMfCAC6NJe+XDGD5vzGAtba1fxcMYN9Aha3Es7/NBP4/G8AyqRS0f5ANvoF8 + Lcj1SwZwbJJJKvcsYCsH7f0vDGAZj4O5jzxYMn6pTQTCRelWsX6nWH8y4Z8N4JJ7BjB1VwP7UHO+Czqy + HTEgquxQw8yl2GFtuh32FDjjSKUCp6tVOFUlw6kyB5wst8NjFXY4X2OHF6g5Xu9yxH+NKPDTGREXjfif + xSa8OW/G95d54ZUJEx6nTttdQE2cYYd5YbKQq21p9cT2bm+s72DsaNRgusqNfduRmsgZi+vlWNEox3r2 + +23kjiLGHR7Q4/SQEWeHDHh8UIezA9Rz5K8nGAOPNDvioXo7HKJuOlbrgDMNrni6mbG7U4uv9pnxLbbz + t6iZXqNeEgbw84yrF0eEgazByW4Fjra78DecqG2dqG2dcKqRv8Htk+xXlxizz/Vw3NQrsCbHAUNCf4RR + H1MnV1ODlBNl4Q4o5bUujaI+iCRvCCdHC3OmxnZCXpADsnztkOplh0QPOyRwG0fE+vCx0PPhjkiRDBM5 + khJcERPjiDD+diC1TWCQHbmRnWQIJyY6MNfLUFJAvlwiDGC9ZAB31VGrEv3EcJUBwxxPg4WMddmuGGQe + HOH4G0uXYYwadSKV8Ye5c3mRASuYG9dW6LG11h37O7zwcK8vHuj2wF5q7i3UWlsq5dhZq8auGo7FCjds + LbUZwGIt4O2MTzsWsJv69QDj6sN1chxjvHqkzgFn2RZPEeebnXGx1Q2XOsTsTRme4TV+gq+frrWTPneq + U42zY8xFw3440OOHDWIGMHX4UI4MAzz2wRxXDOS6oD/XGYN5zhgrkmG6XIllNVqsqzdhUyMhZgJTe61j + rF523wBWUYerUJ9MDkYulh2nQHK0mzQWvmgAh8dwjEgGsG0WsGT2si3iqO3FVsKCARxDrhfNmBAp2ijR + BXEJ1HCJrkjje5lJbuR3rigkNylJYRsxDopZwBXkXpVEOflSBVHGYyomP8xLlEvITSAvS1Aim+NTMoCp + +1Lj5UhkH4oNo24Us3TFzF9uA9nnAkLsGDdsCGC/CIl2QhR/Jz5NlHxWI4K6Mox6IpLHmsD9pue4I6/Q + E8Xl/iipDERGFrVtikYqBR0V4yKZvqL08z0I8zck2B7BAWIGKvsd+6/N/BVgTAl1Q2iwbZlPUeE1LMRm + AIu1X7NT5MhnzK/KkqGZsb4jX44utt1ggVi3Xvz3o8XyGhMWlWrQT37dkWhbnqA/i/GGsWdSGMUV/Bxz + 3OpmDTY0K9m+LtjSYM8+6YKjYlZ+m5j9q8OlVgP5lhlPt3syB+jJ3dywJcMR28n97hvAVeRBNWZsrzBi + BTXzcIIdWhdmAdfw2tVzjLVwLHcliQoXzpjMcsIM493SLDtsFhUmmH9P8RieIG+61KvB88wvzzHuXCBH + e4LH82i9I07VueCxJiWebDfgArnGC8JvGQvDwT5/zLJf1vJ4RJUcMcv7vgGcZPiSASxm+gb4Ov5LAzgs + kO0UqpJmAYtS0InRwgDWSLOA46OUSGDsjw9zQXwo+6P4L3JhGy8mdCwYwAJp/JzNAOZjIj1awGYA20xg + R2QKo5PHKko/l2VTBwiuv2AAZ/H4s9m/slK0NtNXjCeOl5Q420zkOOaaCOafcHHTQKiDVAo6kZorOVos + GcM+Tr1bRC1UImYAZ5CTcxxIM1aTndGb6YJR9o+5anKPGhXGSsT/ZnbMQ3YYYnssIRdfV8ZcUOyKzaWM + PcxFe+rYvuScD3V6Yl+TCetLZJhnP5pOtcMY21P8X9pPDLKPjaY4MvbZZgCLSQOdbP/+KCeMctxOpWox + wRgxzGPs4vUQNwaURdoxjtujgH0lj7E4N9aB8cOZ+oPXK9aNcOX1EgY6t8L4ZRxJlwxgF2QSWXw9j9em + MElJLahCaaoGFdSAtbymNYxNjdQb7cIArrJya0Q7NUxniREd1PxtuTo0ZZGHUquJm8IlAzj3ywZwGXN2 + eY4SlVnM2zlaNFHDNqSQszIu1XP81yc4oS7eEQ1JjmhOdUVTGkF+1sLf6uTvdJdQ95abMVhpwSA57XCD + N0Zb/DG0YAB3kSf+WwO4zhNrhAHM19ZUmLCqTI+dbQF4ankBvnOoF3YWdl53dmKrxZ5wWDB/babvFyEM + YKuHzfy9ZwBLWDCARXlnqfQzH0um7z8YwOI9TysJl7cW/r4kY35GwoBAH5IyXxI0HzXCfZWI9Gaw9nJE + vKc9EghR+lL88d2QaGJS8cWy2kgGpRAsLvPBklJPrOB2fUUAtpYFYGdFMPbVhGNHTQTWV4dhuigA5ZEc + jBycfiY7WPQcsMYFA5jIZJIvZVBpzpBJ9bxrKUaLEx0l8zcnzpEdhvuPdpACQjVFe1uhlQLDBz0FXmiX + DGAD2tMsGC0LxVx9DKZqKHAqKFoppqeqvTFTx2NsFrM3/bGmNxgbB4OxZTQI26dCsHsuDA/Mx+LI0mQc + E1iSgJNzMXhiMhSXRvzw8oAVr/do8YNOJX7eLcMfepV4i+TprXE93l5ixZ83+ONv+yNx86k83H2pDPiP + apsB/DOxBnA57ryRj7vfSgeuJgHPxOD2mTDcPB6Mm0eJQ4G4vtcPn23zwiebPPHJWis+XeGOaySANxdb + cXvWA5jyAsY9cXfQLM3+/aBFhb83uOHtGhe8RdH5v8V2+AUH/W9K7PB2nRs+6NDjs34LbpK03aCIvkni + dmOUvzXpgTuL+HvL+VtrzLix3ojPhAG8S4/bhyy4+4gP8HgQcCECuBxNxAIXhQEcAjwSiFv7PfHxej3e + mVPjd4MK/IwC7ftderzWZcClNhUudijx4qAW35zSksBq8fZ2d3y434RP96lx65AGd4/qcee4O24ds+D6 + w1a8u0uHP23S4DdrNPjFSi1+ssyIN3je311swdenLXia1/tMsxyPtmjwaKseZzpNONVB4U9B+HALSS1F + 4ZFyNxzLs8fj+fZ4icnvWzyON4e0+PmMDr9dY8Tf93rg46N+uPV4KHAlHng5EXiN7fB1br8WiRtXgvH3 + swH4ySFfPLVChx09FGxV9hgrdcR0LYl1oxHTLXpMtxkxR7G+pN37vgG8qMSEKRLCURLDiRR7bCCxP9nj + jNeW6PGTjZ74wx4fvHc0CDcvxODuV1OAb7MPCAP4J6XA/9YAv2+yzQT+Uwvu/q0FeLcVd96pw623S3D7 + NwX49PuZePdqCt4+G4tfHQzH64uZtNn/TvMcn2TbPjsVhJdmg/DtOV/8ZKkvfrvcG39c7oG3l1nwx6Um + vDVPATevx++JXy/W4cfTGvxoVo+frfLBH3ZH4+bjpbh7kX31OeLFCtx9sRC3X8zC3avp3CbixuUIfHIx + EB887YUPznvg0+d98Nlr/rj+HwG48d/ED3xx/Xvsp9/Q4OZXlLj+khuuX5Xjxktq3HxJi5tXDbj1kjtu + v8S+95I37rz0uQF888VQXH8hGJ9e8ccHF73x0WUfvP+sLz645IuPnvWRDODPLnji+lMcD4/q8clx2wzg + Tw5z+7AOnzykwccL+Eg8P8x9nfbE7Sd8cfeCP+5eCQBeDWMbs92/xj799WDglQDcfc4P157yxEen3fHx + SfbPw0a8d9CAd/dq8d4ejW0m8CEdPjhuwsdnrPjkSR9cu+jL44zCh1cy8PalInzveA4eXSsM4GB013ii + jCQxpzAAKcUxSCxJQlJp8peQXJZkmwlckraADCILacU5NtwzgCX8f2cA35sRnCw+x22SgPhMeeaCCZzx + uQFcFIui4liUFoYjJ92HpEUDP6s9fBjb/QUJ49aHMV5APBcmcIgPyTGFm0BYgD1iQki2KfDC+DzIws+p + Kex0dqjg8wmS24c5Fr9/yA9/eSka134QjRu/tRnAogT03d9bcefXBtz+mYYxVok7b2pxl33xxle98R7b + /5eHAvDiIjN2lLtgWBjA/nbIIDFP4P7uGcDRISpEBmttawAvGMB+IcyHQTqSdBJMLyfE+ZLkkbQXR5B8 + MO+1Ek0JBtTHalEdTXJBIlkU4YJcEv9Mkv4CsV4RyU9fqhNWM8kfaPXDyb4QPNYbiKMNOhxmjDpS74oT + JOenScqf6JHh/IgSz4wp8NQECfOkEo8My3CojwKx3RHrmxywstaRAsARczyX2VI5povlmCqUYzKfJIyY + JEGfzOXjPJWEyTx+pkiOdUKMdluwY8ALu8d8sG/CB2I9W2EAb+jTYXmz2/+Ptr+MsuS4mobR5j7MfaCZ + mZmZmZl5mruHmZmZNaIZSSO2JIsty5ZJlsxsP2Z4DGIYDcYXWadnNNLr9951113fj1h1sE5VZebeEScq + d0pln28bwMub5VjVqsSGTrVkAO/tV+HIoAZnRrU4P6bFvV8ygO8dDcTZgUAc7fDFDnFXG8nYQpEJEwUm + 9Gfp0UJyWBXP60MimxMm1nt2QRbbvICEV5T9bCVB7s5UUWzK0Zvuip4MZ/RlCvPXlSSWxLbQXVoDeLJS + I5m/t2cCjzHmj/NaCANYYKrGHbN1MoofdyyvccKa6s8N4DOtFM28xs8MaPDagAGv95vwGkXzc5MBPA+L + 9AeJuOGnn7F74I4BzGsywGvRp8D6AV6LUaP0B/KhOR9pFvC+KQt2LzFh36QwgG04sdQb96wJxOO7E/DE + ngRc3haJhzaH4f41fjjLmH1gTI3dAwrsGyHx5n5Ozgfg1NIgHJ8LkAzgdd0U5a2uWNkhw6ZBI3ZN+mLf + XCB2TQkT2Atbl3hiy7inNDN4/SCvMfPsdAtFH7HQLscKfn91jw5ru3VY1yFmQusJAzZ3eGB7rw2bOixY + WqVCf7IjOmIc0EwSXyf6KQVHA9ukPtANNX5uqPR2Q7mnK8rIO8vE1puC3FuBIh8lCn1VyPfTINdfhxx/ + PTIDKGYCtEgWBnCAAfGBJsQRCeSSSd4GJFkprE2uSDFRAJCz5pNLloaoyAG1aEizoDXfhqZiC+qKjago + 0aG4WI08il6p7LOY+ZvuJJm/onxbDI9ZWs+LgsJuAFOgi7vMY5R3DOCICJfFklwUbwmiDJn9LttUcVd4 + iigNp0BGihtyMikwctxRVCBDRalYA1eOxnoVujr06Okmeiiw+42SEdzbRRK/WAJ6yagVM9IMYHLMET2G + +9QY7FFArIM70C3jcwVmJ81YNu+L5QsBWLk0BKsWIqRyzytnY4g4u/m7aACvnIvGUnJPUSZ6asRXMoB7 + KdA7m5XobFKgq1mBbo5FyQjmtrtVjq42bpn7xbG2txhQX6dDbZUO1ZV6lBZrkEURn5nhiAJxfoVKlJZQ + 7JTpUc2xWVdnRn2tB6qrtChj/CjMd0VBriOK811QWargfsSav2Z0tlgltLeY0U7u01yvRb2YZVxKgcet + MITbmymE2j0w2GlFH7ftDVq01nIcN2kx1KnHeJ8HptmvV0zbsHbBCxtX+mLTSn+sXxaAVTM+WBgnJx80 + Y7yH17FDgyW9HlhKPrNmIhhrlwRjWZ8fJiikxDo8s+WemCbXn8ixYDTTA32pesZgDSqjXFEYznONdpZK + TBWL8nEUd+VFPN9iDzRV2CgS/TBQGyzdKNqQ5YFiimpxI0pFoh5DFdGMgaXYN9aAvQPV2NFWjB2NedjV + lI9dDdzehe0N+ZIZvLYmD2uay7Chrwm75sdw/vAePHn5Ip776lfw9LNP44FHLuHw6eM4Sjzw8IM4fc85 + bNi2GcMTQ+gb6cOK9cuwdssqDCzpRW5xGnOOJyzeapio4QxmN2g9nKHzcIHO7Ay9xQUeNhdYvFzh6e0O + T44fb2oybz81/AL0CAwRVSssCAu3su/bEBXuhahQT0SHeSGWiOdjgbhQL0SHeDLfmuHnqYOPVSOZvxaT + Ah4G6kUDdaTeDVa9Izx1DvBhDo5lHs8PlqM8VIbqUFfGCmc0hTqhM9oV/YlyjDFuj2XrJAO4M1OU61ag + LpPjKd2Ngt0VpURJxqIBnOxKvcY4X+mNocYgDNYFSTP/K4X5mSRDeaqSEDN+VShJVqCYKEpWopjivzhd + j5JMEwrSjMhNsf8BlENksP2SxPq+i8bvlw1g+0wLGYKZ50PD3BEdo0CKmEGcbUVhno2wSMZvgTB/swzI + zzbwsQmFuQaU5HugpMCDz/l6pkYq41YgzF9RolDcZJCrlfqXMIBryolSk1RKWTKAywyoKtahLF/JvijM + Xz4uMPKxfRZwMfdZlK0ntCjK5PllqKU/i6oLjagt4r4KzRLqyyxoLrOhjX1frPnbWe31BQO4sYBjftEA + FuWfW/jdtlJh/nqgIc+Iep5HXR7BPFzG38hNEn/A2A3gvFR3FGSr7H+GlBiksvhi5q8wf7Mz3KStgDCF + q0pFWV9q63pv9DT6YaQxEJP1/syXvlhWYcXqYj02FqixvUCJPeQc+xlTjxS64liRM06XOOFitTueIqf4 + arMLvtbmiDcHXPCzcZlkAP9qwYAfUKO9PqLEc53uuMzPXCQXucTYJgzgB8f8cGHMB2eEMUscHbYbwIcH + LDjSZ5ZKNUsGcLcWZzqVuJda8cFupVQK+l5q8wsjxjsG8AHq3l0TFiy0uWCm0QHzzPMriE2dbthDnnOQ + 8f7YiJhpzP0PeuBgnx77mAf2dWmwj/xgjzCBuT3M3zvBYzgz5osL00E4NxUAsbzCpkY5lpc7YiU52iqe + 86paGVbWKrCyXonldSosb9BguTCBW/RY3+mBzb0WbGFe3tht5XMzVpKnLWv2wEKrDQvUl3MdYk1eXu+2 + YAy0hqK/PQK9HZHoFgZwZzjauyLQ0R2Gzi/jSwaw3QQOlwzgfj4e7AnHYHc4hvrCJIz1RUoY7w3Hkr5g + TPR7Y5J5aIqY7V1cB7jDjEnG9XGex1CNHP3VCvTUqNgn1Wgsk3McsB+WKiXUkHPWkpfWsx80MZd3MacP + lTOOV1mwrEZUIbFKBvCeNhuOUkufG/LBpSW+eGrWD88sFWsAW/DQEr1UvlsYwEf7DTjYa8Ru5pSNjWrJ + AJ4tJucrFLNcnDGQ54Buav/2AnIaPm7k45Z8J3SVkEuWufJ43THOXDrVLiqmiHOQY6TcHSNF9hLQS3m8 + q0tE+UMtNpCDrBOPCbFdW6LCmmIlNlfpsaPeA/vqLTgqDGDmJGG4HmU+PcV2Ot4ViIOtvtjC3LpWLL/C + 780UKjDBMTRJTjubzb7BWLCGeWkjx+f/YQDna6Syz0vT3LEsjVty4WUZMsxluGOG35/LdMOKXAXW5Kuw + KVeJLeT6W3Pl2C4ZwOyX5QYc4XGdaLRJBvDBGqNkAG/nuW3Kc8WmHFf+hht/y91eEpqcZz+vweEKF9zb + qMBjrWq82mfE2xM2/GbOE/8zY8b/TOrx23ENfjeuxf9M6PHHSQ/8dtKCH3NMfXvQgFd6DXi6ixA3QnSZ + pbUE15ermaPdMMDj7Ui2l4D+f8MAltYBDpJJJrDY+ga4S/Ah/L5kAMckmSSjVyA+mbw0wxPJhLQGcLz+ + CwZwIHOFZPxGyyVEEmLGY3yc4JF2AzgvlTkhg/E824RyxvSKfOYCxvoGtkMT9UpbNvUL+dcwtet0igPW + ZjhgD6/7CXLve6pVOMfrfrrYAadKHHC+1AEXKx3wVL0DXml3wPeGZPjJhAY/m9XjR9MGvDVnwrfnrXhh + 1IBLLXLsLXLE2hyCfXdLnQHbhQHc7YP15F8L5K/j5dRMpU5Ywnadq5djJdt2A3njVsauPdQHx/q0OEfc + K8rl92twH/nrOfLXk+0uOM5YeKTOAceog043OONB8szHO7V4nrzsa9R5b5CfvjHqh1fJ0Z6ndnx62AOP + DRvx4AD3yZh7os0NJxi/Tza5UOM64Wy9I85xe7Fbw89ZcInx+oi4gSPTEX2L+kOsJVoZ6oBSojjcmVzO + DYXUheLm4DyhpyNckR3ijPQAR6T4OiDBywFxPoQf+QkRQ62dEEI9LwzgGPssyoQ4UQnIASHcvyjpHUDN + H8zPRPI1oSPyOX7KyJNryvVo4hhuq9WjSxjADcIA1mGQOrOfY76HY6Y7zQm9ac4YSnXGmDB/iVnygOX5 + euY9E9aUcOxWGLCrnjGhxw/nhkNwasBXWhZJlH3eyfYWZVb3kaPvqlLYjd9FiLVSBXaKGcDk1IdqFDjG + NjtZ54ozNQ64j33iIeIyr+ejbTK2hRKPdcjxcIuz9N7pKrZXOdurUYbzg1acHqJe7PXF+iZPzDAejLBP + DjJGDDFGDDEWDxS4S0bieKndAF4u1qSvN2FTA+NQnRGbqR/uGMC5qjsGcHO6FlVpOhQmi7VSqecWDeCo + GDFOqLm4jSSnjuE4j4tXkocpOF7kX0BcAl+jFhMGcHQiP5/gxvHoitgEV2o56sN4F6QlOCMrnlwxxW4A + l6URwgDmMVSTg1WRL9Xk6FCVRc6SruHxCAOYXJ5cNJc6MDtRLRnAmeI4+XvJPK54UREqyplt73LHABbG + rz91r0AA+12IeJ9aMjZFiSjuKziKn4tylB6L0tA5hZ4oKvVFWXUwyomcPCvSM6htyU3jEuTUo+6IY7+z + g3Ej3AUhopIA+6xApDB+I3i+7MvCAA4LcUNI0OdLfIoZwOJ10XezU+SML66oZN5ozqMGZP7syWPbUaeN + FcowzbyyUG3AJPunWC6rjn26LdEBXWkOGGQuG2NenC6XY475eRXz9bpGFTayP22uccTeJlecon68zBz4 + VKsej7fpcbnNA5e7GL8bzDhQJMdWasft2e7Yzd8+UCJKznvgcC1zNfP2ej6fSHNBZ5wDWvi7wuhr5LaV + z8UyBwPpzhilXhfrxs4y5q1jLt5V5owzTSo80KbBo+RoTzOXf4Wa+inyrYeb3PBArTMu1rvjUeafp7o9 + 8NygN16ZisDTU1GSATzNc62mhpCWSUnVII8aIDvNhFTB/eN0kgEcFsjr6e9yZy1gManQ+y4DOCxQTk2k + QlykBgnRerv5SyTG8bkwgaPYP8PYFxn7Y5kDxGPJCF7E7TLQUuln5glhWtpNYFeksV+lxzjfmQUs1gEu + TFOglH20gvy7PNcoGcC57FuZSWImrxoZSWq2tYLaRclzUCFZzESO4fGxj0QGO0kGcCT7aCz7S0IUf59j + TJjA2YkqFKTqUMq+V52pQyPHZzO5Qgd1Vl+mK4bFzP4qDWYYc0bJu4fuMoBnqfFXF7lhAz+zrVwh3ZAi + Zv+e6PTCmX5/aRbwhhI55vnZCWHmJzhIMbo/9rYB7ITxNDeMUMd1MmaLm3d6OUaGE9wxxnMa49geZAzo + 4PWojXBEeaQjSvl+UTQ1ZKwzcuNcpNm/4hqlxboxVrveMdKltZR5PaStOE8+zmW+LUyiPkrRoEQY36la + 6Sbg6izqJGrNBmr89lIPdFdRF5WZ0Vlqpr7nljG5LdduANfzczUZKlRS51TliOV1NMzX2kUDeHHpBr7e + TK3XQg3YmKZBA7WouGmtLtGNcJXKQjeKpWNT3FHP2N/IfbZka9DGnN9J3tZJ7SPKUPdRHw02eGOwxQf9 + TTZ01prQIS2BokNflUkygOcbvaXlZdfV28tAb6i1YR058eoyE3a1BeHhFYX4lpgB7GFygNHoALMwSC1O + 8JJm/ZL0eJEESRCP3eEpQQaLp/yOCSzBzOeS6WufDWw0uUuPjaIM9KL5K57brCRaXhoGIT2DkX3NKIEQ + Pg/20yDUV4VwbwZrmzNiLI6I58BKtjqiOFSBZpKq4Tx/LFRGYGNDNNbXBPNEfLCy2ErCbMPmUh/sKvHF + gfIAnOL7x5vjsK8pBqsrw9DCwZvm64gAnqdN6wAfnmsI9x1vdUBBoAPq4pyladftJLm16S4ojHdALoWr + GFxZTB65KWKAadFYaEFniRf6KvzQV+TD71Ckpi4awGVhJEAxmKoJw1R1EGbq/LGsJRirOkOxoT8Cm0ei + sGsqHvvn4nBoWQyOrIzFsTUxOL0uCefXpuGe1Sk4tzwe98xF4MElgXh02BNfJUF+vVuNtzsV+EWXDH/s + VeBPfSr8cVSDv8554K/rfPG/+yJw/eF8QBjA364BflSHmz+pwbUfFOPad7Jw/bUk3HwmDjcficL1+8Nx + 43wYbpzh9kQIrh0MxLVd/vhkizc+WW/FR8tN+GjOiCszHrg+bcOtJZ64NW7DjUGztPbvuy0q/LPOHX+t + dsafKhwlA/i3JJZ/qnTEP5rk+LDXhGsUzTcnfHFjyg83J31xc8YHt+aIZd7AGrsBfG2jCZ9tNeCzXQZc + P2zGzTPCAA7BLWEAP3XbAI4GLgUD5/15nGZ8vEWH91aq8b/TGvxhXI+fDhvw7QEjXqZofmXIgDcmKeyX + GvHr1Qb8a5cZHxww4uMDKtw4pgVOmXDrtAXXT1jx2VFPvLPLhL9t0uN3q7X4+VI1fjCnx3dmTHht0oRn + h/W42K7EPU1Esw73UCSfbaPop4g+1KzGgQYlDjLZHaGgOUFifE82yXSZDF9vUuMtHsvPlhjxO17Hf+zw + xHvHAvDZfWG4+bhY+zcReDUZeD0J+EY8bnw1Eu89EorfnA7CMxuYDPvcsJQEa6LEETMUujMNOsy06Cgg + jZjrtGCh3QvL232xssUPcxzAUzlKBkcXDLOvrsp3IJl2wrNjMnx/hR5/2umFd08E4vqjscAracA3M4C3 + 8oAflgC/rAR+y37yu1rc+lMD8I9m4N8tuPXPWtz8azFu/a4An343E+88m4S/XYjGb/aE4huzHnichPti + hw6Pj/rj+dkwvDoXiu/O++PXK/3xt9V++NdqL/xrpQ3/Wm7G3xcM+NO0Fr9eosBPhmX4wbAaP5ww4Ber + /PCXvQm4frGKbV2PW0/zN5+pwo1nCnH92RwiDVefjceVp8Lw8eMBeP8xGz58yoorL3rh6hu+uPpWAK79 + xB9Xf8rnP/Rg/1bjxuty9nEZrr8qx9WXlLj6ohqfPa/HtRfZh1+04foLPrjxQjBuCAOYuPpcKD5+KgAf + PO6Nf1+24l+PmPHPR21493EvfCRm3D7lh6vcXnuUv3HRgisXDJIB/NEJtd30PaYi1PjgqIB4rsPV8xwj + D7CPX/bHzSf8ga+y374cxPYmXguxP36OY+1x7vshH3xywYoPT5nx7iET/rNPj3cEDhrw7lEjPjrvhSuX + /HHlsWB89mQwPnk6Bu88kYE/cIx/41gG7lkZjTWDIeiu8UVFsR/yS8LsBnBJEpLLhAn8OW4bwCkl6UQa + kUlkI604146SL6Es57/ibrNXMnb/y2fuxp3P3W0Al2YjaRF3DOAKO24/T140h4URbH8tC0lEipgFXJaG + jJJkZBfForA4BiVF4cjP8iPp1sPPypxlcIAfY7pkADO+C/iRlAWImcEkZgHedgRTxEUEOUtGcDCFXQBz + gJ+G5Jt5oZifE3ccHmOsffNQIP7xTDQ++X4Urv4+6AsG8K3fmXDzlzrc+pkKt36oA75rxbVXfPHh48H4 + PePqS/Oe2C/MQpKZKgrGTArChCBHJAST7AW7I5rkMDJUi9AwIwLDTPAn/EL1CAzSMh/KEeLpRMEpZq0q + pIoXfTm+GM71xVA2E36GDV0pJBAkkzUk+uXcdwnPo5rbDhLkiRQS6koPnGnzxwN9wXiQZPtsvQanamU4 + 2+KO8+1u0vpJD4+o8OSMDk/OafH4vBoPzShxftQNR/tcsKXZAWso+JYzHs2WOVDcuWKG8W6i0B1L8mWE + Oya5nchXSKbvpDCAC4QBrKRgUGJNswFbus3YMeCJXWPCBPbCrnFPbKMo38SYvYpCf0WrAstbVVjRpsZK + Yk2nBpu6ddjeq8HePjUOD2pwepRCf0yHC6N63CMZwGKdNi/mxxDcS+F7ossfu+qs2FhpxnKSs8lCEway + hQGs5nVToSSGxI5kOivYTTKCi0mo60geOzL16MnSoIfkqi9DRjLrhsEckk2ey0SpCrMUpnMUAtNVOkxR + nE9Vi2Ub1FhC0TxGIS2qNEiodmO+d+VnXSQDeH2tI7bVOeJgo5PdAO52p8BQ441B5ioe+zd4HZ5nTrxn + 0AO7OpRY4GeHq0mYW0l4e1ww0+eOpf1yrOiRYW2fEluYi3ZPWLB/xgsHhAE8bcWeCQ/snTLh0IwVR+dt + OL3CB5e2ROKRHTF4jHh0exQurPbF8RkDdg+Jmb9KHJ/1xNnlQTi7IhRnV4bg2FwAdgx78JorsKzZGSva + 3bF50MTf8iU/CcLe2UDs5HFum/CWDOD1I2asoZBaEKZ1mxwzFHULzJEryE1WUWSt7NRioVGBuTq2aaMW + a5kvN3eLdcLMmK1QojfZEa3R9jJONRQbtRx79UEkvIEyVPvJJPO3hJyz1MsZpXxc6i1Dyd0GsK8auX4U + xuSJGf46pAbokBSgR3ygkePKbEeABxK9KbYsCsQZnJFsdEKWzY3flaEiXIeaOA80Z9rQWuCFRnLG6iKj + ZEIUFKiQnUshkENxkOmOtHRXCm0XJCSSg1KQiD9xoikq7AYwBTpFUQJFVByFgzCARbk+YQBLs4BjxR93 + 4g8hdyTGy5FEkZ+UQPHBfWWkOiMn0wUFeW78XXdUlrmjhn2ogXyqrUUJsfavKP/c26NDd4daWgd4qF+P + sWGx1q+VsPCxDsO9agx0yQmK9C72W/aV6XEj5qc9sTDji+XzwdIM4JWzdxvAYgawvQT08plILEzaDeCZ + MX+MUwD3dxjQ1axCR6NcMoHFDGCBTo7RzhYZutpUPCYeV6cJXe0WNDdaUVdtQmW5AcUFGqRTpKeTN+eR + Qxfmq1BcrEFZiQ6VlSbU1IjZvyZUVQgDWIWiAncUiRnAhWIGMIWVKIfX5oXeDm8J3R1e6Ggxo6lelIFV + oZbisb5KheY6iqBGHbrIx3raLDxeE5r4en2ZAi3kS11NGgy283pR7C9M2LBq1gvrl/li4wo/rFvqh5Uc + PwviOg4aMcp+O9gux2iPBvNDFqwc98Ga8QCsGQnC0nYf8i8bpss8Ge9sGMum0Eo3oyvZgMYEDYrEGvIU + y9kRTshLkqMwk3EmT4cyUR63mMddZkVXlS96K/3RVmBBLQVlMUVnAeNPTZIeQ6XUAr1FODhai/39ldjX + XoS9jbk40JRPbpmLg8SB+lzsq8/Bnvo87KjPx/rqHKxrLMLGnnrsmRvBvYd349nHLuHVV57Dy688j0ce + ewjHzxzHKeKhyw/i3gfOY9vOLRibHMLwWC82bFmFTVtXYni8C7lFSdJyA2ZPMePXGQazHXoPJ2ipj7Qm + RxipvczMQZ6+bvAJkEl/lgsEBusREmbmmLAhKtqT/V8YwML89URMuBfiiHhhAhNxfO2OAWzTwtuilsxf + Uf7ZqKM21LtJBrBF70RN5gg/vSOimccz/N2Q5+fMcU8x78ncRtQzd7ZHO2MgVY4Rxu1+arEOXvemTKHX + 3FGeyjGVwhiSyhifJgxgF8KdYpuiucILAw1B6K8LRjPHfXm6MHxl/LwKpcL8JQpTlChgW+YnK1DA1wvT + dSjK8EBBugl5aR7Iy7AgN8OMLD7OSPVAivhTn3lZGMC3TWBhAEcKEyDUHUGBzggJEX8Ky5CcoEN2phkF + ORaC+xIzcTP0yM9g7MnUoYDPhUFbVWhl/7GgONfA90X5NQHGP6IkSy398V9TYkZdmRk1zHXVJR6oKjGh + usxuAItZwJWFWpQX6lFWYEBpvgFFOToUZrPPZvF8+DtF0gzgRQM4mzGxwIjaws8N4Druv6nUilb2YbsB + 7CkZwAP1fryOFtSLPzAWDWBR/lmYv+38fFOBh3SnfA3bRTLYiaIU8Scp9XO8M7KSnJGb6i6VshazgEt4 + nMXkC3bzl59hzBWPhSEs3qsp59iu8URbgw/HtR+GmgIx0eAv3Uy9UGWl5tdifYESWwsV2F0ox/5iarFy + Gc7XKHCJ+uxxxrKnyXXELLdXWhzw3T5H/ITc5pczGvxq3oC3p3X4+pACz3W44eEGRzxY70bNp8OlQU88 + vIS8SZS3HPXGqVFhANtLQN+eBSwZwOQppxmvT3dSI3Yo8ECXSioFfW+/CueZs4UBfITxeveoCRvIY2aa + nXj8DphqdMBSHtN6/u5OqdKJHodHPHCYnz/EfHxgQE/uo8M+xqU9jFE7mWN3kicc4O8dJWc4SS51dioQ + Z6YCcHDAig2M1csqnbCCPGRljQzL68gdmIOX1QluocJCgxpLGzVYTu26ijpyXbcH1hJrOs1Y3WEi9zJi + WasHY54VSzu9Md/li+muAIy2BWKgLRj97WKt33B0dkWivTsC7T3c9oSjoydMQudt8L2urgh0cyuBn+vt + DkNfT4SEAX5ngJ8b7A2VMDoQZUd/BMYGQjA+4I2JfqtkAotZwPM9VnINC+Z53DMNGoxWyzFYpUBvFfMk + eVgjuWhdqRzVxXKOGYJ9oKZAjlrm1oZcd7TnMz+yjyzh2JirNGINc9DWBjP2tFlxrNsT944F4PJ0IJ5Z + CMCzzA1Pkks9NE6eSa4mDOBjwgDuWzSAF2cAz5bIMMV+tqREmBou6ClwRnuBE5pyHNn3HdGYx+fFbuhi + Xh+oVWK0WY0J5szpDj1G2SaDFW4YKnLBWK6zVP55bbEam4p12FZqwHb29x0Vn2N7OX+7Rhic7HP1Npyo + seBElRnHqkw4wnM5IdYCbiYfbPDE1hr2sQq2b4ka89zvTLY75shjluWShxfosKHYiE1FHthMSOWfhQnM + GLGBeXt1lhxL02VYSCefS1dgIdO+nMpUhhums9ywkMM+lavAOo7LTeT2kgmcJ8eOQjX2MOYcqrbgeIMN + R+ss2Fct1gDWSGNyQ64L1uc4S1thAO8uV+FwrR5HazU4UumGc3UyPEJ+8XK/B3447YPfsQ3+Z86GX08Y + 8MsRNX42pMIvRjT4JfnOz4b0eJtt8k2OiZfErK5WNZ5kH3mwxxOnOjyxt9mG1RVG5motuhkrvzwDWFRi + +G8GsH+wRjKABW4bwH4BCvhSf/n4y+AjGcDC/HWTIB77BLpL5q8Peat4bocb9yFDYLgC4TFaREvGrwnR + CUZExuklwzcuxYKENCtik82IitMhIkaFUGEAh7oiiPokXNxMGKskVIgWNxfy2BPiVXYDOMmA3BSRLxjT + c0yoyDeiqkCPasbPOnLXBuqw1mwXdGfYS38vSXbAaj7eVSDDsQo1zlarcJp98oQovV3sgNPc3kdN93it + A16k7hBloH84psSPJtV4e0KL707p8I1pozSh4mHyvxOMK3uoe3ay7XY3W7CjlX2ug9ecGm+W43KkxAWD + JU4Yr6AOYuxdxX6/gXxxC2PXbsbFIz38/W7GxW4lLvQocE+3XJq5e6zFEUcYE48I07Zdgfv42UvUEk9w + 3D1P3fjKsDdeH/HD10f98RIff4Xx71Fyt0uD1ILUh6eoXY62uuG4QLMbTorSrnUOOClmsvZo8egox/SI + FScZ51bzWvTFOtr1R7jd/C0MdUI+OVluOHNQhAw5bI8sMdsu3A0pwc5IoG6P8SX3FxXE/KgDxPNAgvol + nt9PIP9LIa9LEmZcjItU8lkYwAHCAObnJAOYmieBuS8/j/m2RI9a9tMmjt/WOgM6hQHcaCA30aGvUolu + 8uK2VOqkBAdyTUe2Ja8pOcy0uDGDPGYN8/RajuF1JdTWjA97GM9O9gYw34TizIA/jrYzvrGN9tQwr9Rp + ySGZS/h4l2i7Chl2lLtjW4mrhB3sD6JND9UocYyx6UStK05Rh4oZvheJRxqd8UirOx7rUOFR5p+LLc64 + h+10vMIB+0odsLfaGQdb+VvtjCmtFqyiHpgWZffJ+4cKVYxzAox5xQppPdnxMjmmKlRYVk1tWGvABp7/ + ZvL+LVXCANYxn2swnavCCHlFT7oareRFtezvJWk6ycRKjJNTi3GM8HqHR7kigtsIqRS0AjFELLVYnDCD + 70JsArf8bhw5XTT5npgBbDeAXajlXLhPJyTHOiCd/aJQrIObqrDPAk6jHk1ToipTI5m/tbkca9kGVJCv + FUmzgJVSKdncRAWyEqgdRclcQhjAKbHUh6I/RLtKs3TDqAuD2eduG8B+3AoDODjSGeHUiFHcR1iMG/z4 + mj/7TiSfJ/G884p9UFwegLLqEJRVBSM33xPpGUYkp2ipS8WMZyUS+dsCIk5Ei7XORRl5UU2AiIni+TP2 + xUTyN9i/Q4JcEBzodpcBzGvC1+N5LVOEiZjsjLIMFzQx1ney/foKlRjId8cwMcbcOl2u5VaB5kRHlPFY + q9nXm8VM4BwntrMbljAfT5Yzd1Qyl5S7YUWpM9azr+ypd8HJFgUebtfisVYtHm7Rsi8Z8VCXN843WrC3 + SIaN6U7YksU+mSPHPuaVQ+xHh2qt2F9nwxbqx4U8JXrFLGC2lZj52xrvgI4kJ/SIMsTkjcNp4kYJB44T + B6zMccDWEmcca1Thgvg95t8ne4x4pseEZ7v0eKzBHQ9VOeNyrRueYf99qdeC10b98PpcFL4yFYkDPb4Y + L1WhMpXaLlkYwGrkMPZmphiQQh6fFGs3gMODeE39eU2pUwK8HeFjdZDWAvb3cuRrLghjfogMVVETqfh5 + sUSMvWqQWANYMoGjlYhl3I8OdkF0kDNimQfss4DZd7hNCHVDErdpbNd0tmMm+386+39qtAtSIp24FQYw + eTP7YT77ZIm4QSHXKKGUfbUwXcs2VbJfKqSZvCkcD4n8fgL7Z0KMyItKJIg+EsH+EeKESPZNuwHMsRHp + isQoNyQzJ2XGi9nu5Osch9UZOjRSP7RmKNBFftCb6YKhAleMFLOfkPcMFTliMN8BQ1n2EtDT2Q5Yke+E + dfzMNmr0vXU6HGGsONPrh/NDwYxXntIMYGEAj7N9hQHcH+eAQbbvMHPYONt1SYY7RjkeO2Oo/9jnuhlP + BxLc+L4Cw0nkg4wB7RxnjRxDtXxcGS9DmbgmvDZifV+xTrIwyoX5m8Jrl8bzSiey4jiGJXD8Erk8x/xE + LeMANVIqtZIAx1pJugHlHPfVmWrySp57sQmdQhtR57eRR7UXmNBKndWSq0OTZACrUENtVUm9VkndVSEq + Hon/BqiVxFbcuCVuSm7Mo77JNqKROrOB7VfPcxFoSFVKqGMcqmX/q0pyQ0WiGyoZu2qon+ozZOSbCrQU + qXkcBvTWWNFLDthN/tVRzeMp1/N1PforPTDOMbRA/bSq2Q/rqJvW13ljY6031lPTrSrzwE7y+4dWFOGN + o/1wMBocYNA7wMPoAIuZwt8mZvzK4CXKf30BCgk2L7FGlFyClbDZlFJp59uzgEWpZwGjxyKMYv1fkiVP + Lfx99Qj213MA2RHmp0e4v46ggPZTItKLg8LCzujBRMvjSeXx1JNYDWZToJSHYUN9NLbVR2JzZQA2lHph + LRthA8Xr9mKSwSIvHC3zx72N0bjQFk+SEYeNVWFMqHpk+Tsh1OQAH52DtEakKP+c4efIYOaMHoraQQa+ + HorKWg7+gnhHdnwXBgBRgktM46bALbGhrcwbvRV+vMB2A7g7xxMd6R7ozvTEkvIILNTHYbaO28ZwCq4I + rO+NweahWOwYj8Pu6XgcWpqMY6uTcWp9Ik5vTMCZTfE4tykJF9an4h6+fnZZNM7MBOLCiCceIhF6pkuN + r3XI8Wa7O37e6Ybf98jxp34l/mdQgT9M6fHHVZ74264QXH0wB7eeLcGt1ytw63tVuPZmKT75dg4+eS0Z + n74Qg88ej8DVS2G4LszIC+G4eZY4GYobh4NwY28grmz1kQzgD+b1eH9Ki48m9Lg6YcaNMStujlhwlaJX + lH/+d5MSf69xxZ+rHPFH4g8VRKUj/t7oiv90qvHpsAW3Jn2AuUBgIci+hvDSAGC5P26t8sattZ64uc6M + a+tNuLJJhyvbdPhsnxE3T/sCD4bi5mPCABYloOOAJ6OAh4Jx6x5vXDmox8c7VPhwrRLvrdLj7xTxv5ui + eBgz4TsU2d+fMuMnSz3wq9Vm/HmjB97bY8VHkgGsxvWjeuCEGbdO8DwOW7kvT7y/3Yp/8HP/s0KPH8+o + 8b1JHV7nOYu7Hi9TmN/bqsLZJg3OtphwpoUip9GIg3UkwCRLO6tlUgkVUWLnSIYjzqSRMFHovFJL8txp + xA+HPPDLGRP+wOv5v/v88IGYbX0xAree5nmJNYC/ngB8Mxl4OQ4fPR6FP9wThtd2eOPEkAyrScJmyxwx + T2I9TwE/RzI916bFbLsBC+0WLGfQXNXqjaUUgrPsqyMpjhhm0BSJ73CNA4WRE747q8Aft1nw7lF/XH2I + 1/OricDXUoDvZLFvCBO4GLd+WoKbPy/Hjd9VA39tAP63Efh7NW79qQj4dR6ufCsN7z4Vjz+fCcevtgfi + m7y+T7B9L/E4nhomIZ8Jx9dnQ/AWBfTvVwfgX2v98O4aL7y72ob3hAnMtvgTr+nPB93xVqcLvk/C/oMl + HvjFykD8fV8qrl+sw81Hm3D9iXpce7IKnz1ZhGtP5+Czp1Jwhe3/6ZMh+PgJX3zwpAUfP2vGZ69acO27 + Xrj2Y19c+6UPrv/Kgus/N+LGWyrc+q478G05r6kc116V4erLSnz2opYw4eqLNlx9wQfXng+SZv4KXH0u + BB885o3/PMI+cMmIvz6ox98eMuHfly38PR9cedof14mb/P2bl71x/UELrpwz4KPjanx0TIUPjioIFd4/ + rCTUeO+IBlfOmHH9Xk/cuuTD77AvPyVMYD9p5i9eDQZeCQWeD2UfCMKtxwLx2X1e+OS0Fe8e8sC/9xrw + zn4T3j8qTGFPfHZ/EK4/Go7rT0bi6lPh+PjJOPzjoRT84nw6XtidgJNz4VjWFYSOSl9UFgehoCwKqSVx + SCpNQHKZMIE/x+cGsIAwgDPsJnBxNpHzf6Ik678ivTz3C/jy+2JW8d24PRP49sxfgWR+7jZuv3YH/M7d + +PKM4ZQyMXM5HenFScgsjEVeYSSKisJRkOOPtHgjAjyd4S0MX+YMf2H6CiOY8BOkbBF+XnYE+AqS5iRB + 3LHnw8/56JwQzvxX6E0iQmJ7kqL1B4dD8M8nY/DJd9gOvwu0G8B/+dwAviUM4J+qgLe17H9W3HjJD58+ + Foo/n4zA1xf8cLRKhUkS1lqKR8kApiiMD3RCbBDFAQl4RKgGIaF6aeavL7e+IVoKRxWCfdwQ6umEhAA3 + 5IvZv6kWjBUFYbokCLNFARz3/ljCfNOfoEU7BWwj999IkdrF/Y+RHK5Oc8fhaiseaPPHpU5fPEDSdb5O + aV/np0eDB4fU0p9dT85RaK+14sWNNrywwYwnGVcfnFHi1IgMW5ocsJpCUNyQMlcuYDeAl4hyTnmijJ0b + JiiqJygUJkjaJRRpMEliMl2mxAqK2vUdRmzpNWPbsA07KMS3EVuGhAEs/oDUYHWnlhCzR41YQ3K+oYei + kGR9e68Oe3rVODigxskRLc6O63FhjKJ/RKwDbJHW6Ht4OhwPjofjVHcAdtVbsLHaA8tJaiaLjOjP1qEl + RYU6ir+yGCUKKO5zRclsCvxKku+mND26skzM2Tr0ZinRn8ncT1I1yni6pIixlrF1ZZMXljdYMVdrxGyN + ATN1ekzV6jBRpZBmAY9V8BpUumO8yhWTVS6YoSBeUeuMzQ0u2NnkjCMtrjjf4Y6He2X2ZQmGDHhz2IQ3 + xnm9Jz1x36AB+7pUWNPsjMkGB0x0OmF6UJR/VmD5ANHtjlXdFEeDGmwfNWL3JMXSNPnNNLeTZuzj9uCM + FYdmzTi2YMO5Vf64b0MoHt4aKc0CPrfCC4cm1NjR7469I8xjzL/3rAnD+dXhOLsqDAenfbClX48VrW6Y + o7Bf2uLCdjFg17g39s4EYM9sAHZM+Urm70bm/1V8b0WPFku7tVhg2y10aLCc2xXC/BWvtaoxWuFCwe+E + KV6jZY16rGW+WtFkojikqOSYEmv31FE81gQ5ojZYzO5ToC6IQttfiTJPNxQLE9jbBSVerij1kaHER4Fi + Xw2K/TQo8NUiTzKADUgnX0wJMCDR32if+RtkRWKQDQn+ZsR76RDnIUec3glJRmdkerojn5yyKtJEgm1D + S44PWgp90UiuWEUCL8zLXIrezGw5oUAG+4JAaqoMiSTfsbFiLScHRBBxFBSirFiy+EMiQS39SRcdRQEl + lYG2G8BSSS4KEvGHUBxFSByFR1wMjyXOEWkUNVkZzlK55JICd5SXkNxTKFeWO6KxwQ0dbWp0Mcd2k/N1 + tCok9HVrMDxgxMSIB6bGLFgyrMdIvxpD3QpCTsgw3CvHxKgesxMWzE95Y9lMEJbPhkpG74pFA9huBMdI + ZaEXJsMWEYr5CcaVMX8M91jQ20rxIGYBE2JGcE+bBh0tcrQ3y9DVrkE3uU13h0UyaFubfVDHGFNWImYw + qpFGcZJBoZbLa5fP5wUFahQXalBWSgFVbkAVUVFKHl2qQWmxAmWF4vxlqKvUoKXeA31dvhjs9Zcw0O2H + rjabtC5wQ5VGKvVZV00BRv7VQhHZxr7V1mDkY7EeqhLVRTI0VCjQyvd7hAnMmDI9asZSjrPVs95Yt9QX + a+a9sXzKhrlRxogBUTJajr5WVwx3yTE7aMSyYStWjXpj7WgQ+zNjLMXSZJkXxgu8MJzliR5xw028AdWx + auSFOCOVsTYjwkkS30U5WpQWGKUZl1XUIQ3FFrSVe1Ek2ijYtKiIdUexKC1Isd2QZKBgDsHWrjwcGq7A + 4d5SHGorwMHGbBxpzMXR+mwcq8vG0dosHKrJxMHabArnHGyqysTG+jxs7qrG/rkhXDq2G688/Qi+840X + 8a03XsFTT1/GuXtO4sKFk3jiyUt4+JF7sW//dszNj2F6dhh79m7Crt1rMTnZg6KSZASHmajd3OxGr80Z + nsw5Fuoug9kROuZQo9URVh8n+IpZA+FqhEbqJYRHmBAVbUNcvDfhg1hhAkfYEB1uRWyEJ+LCBexGcGyY + DRGBFoT6GZmHdXcMYJPeDTq1MwxaV5iN7rAa3eBjckWoTYZYHzlS/dyR6eOMbE+OF+q0HOZ1UZmjOcIB + vRTFw8IAZozvzGQsT2f7s++VcayWJjOGpNhRxNeK0+TSOrRtFaKMsVgyIwiNRVaUpqlQmCSXSn0VCbM3 + WZQ6UyKXAjw7WYGcFDXymSNE6bd8aru8TDM1oBU5RF62jX3chox0K9JSzEgQa3sRdxvAoSGuCApwQkiw + qAwg/iDWIFPMJM4wEQbkpmvYbwhqS1GmLT9NrNvFvlziibpST5SLks38TLEE1Z11vSrzGcNKLagvt6K2 + xCzNBq5aNIGrxAxggVIjKvlaRZGHNPtXzCTOy1BIs4mL2BdF+WdpRrEwaTO1qOZnakW/5b4Fagv5G0Vm + NHMfbfyd2wZwbw3jZrERNdnij1E5arLIS/i9znLq3zIbH5tRyzapEseaLENBghv1szvyuBUmcA7bRBjA + eRlyaRawWPtXzPQVM38z01wkA1iUgi7K1zBOGFFfZUVTDeNMgy86Gqm3G/0xxu1Ugw/maixYVqLB2iIl + tpUosadUicOVCpyrV+Nylwee7bfgeWrnr3KMP9/qiFfbhAHsgJ+MueAX0yrJAP7BtA7fGFHh+S4ZHhEz + xhrsM4AfGfbGo1MBuDTph3vJM8QavYep5w4NmMlHPHCk3wNHew043qXByXYlTreLZXFkuK9TlIJW4kIf + deOgVjKADzLWbGWsWdbhKpm/Y8QSYqHFEWvIDbb1UU+KZRmoXw+Oe0jb/cPkBYN67O3XYBc56NZ2Oba0 + iYosKhzoN+Aw49TxJT44NuGHfTym9eIGujpXQo6V9XIsrVdImCPfm61XSubpXBPzcwuPo1WHlTzH5e3M + +x0GLCc/W8GYvqLTTD1hZW73xEKPL+b7gjDWwVjcHoj+jhDG/VC0dYejpS8S7Yto6w2X0L6IDqKzJxxd + EsLQ3RuBXm57BHpD0dcXRoSifxFDgxGLiMTIYCjhjfEBK2OzFbN9NizttWE5j2lFhweWtRgwUU2tyzbu + r5Cjq0KJFuaOhmL2Q8b+KuaSygI+zpOhJscV9VmuaGOO7csnpyOfmy4jR6nUY3OdEbuo5w/xfC+M+UkG + 8FeEAbzgjyenrbgkbjIk5zzFdjnWp8OBHj12Mg+ur+V1LbMbwLPMN9P8/dFS5o9id3QUkX9T+9dkOaOO + 2xYeTzs/21+vwVCzFuO8zhO8zkN1zOXkjP1FLhjOccZCvhzryJm3Fuuwi/19P/v7/irbHeyrNONAtZma + 3ozjtVacFgZwhRHHy9kHKwk+P1Brxi7y3q08t43l5NLFKvuawtluWM6xtJr5d4Molc5YsYXj2T7718jf + JC8vMmAduc8qcp6FDJ5Xupj5q8As8/cUx/eSTDcsyXDlYxfMZblhZZa7VAp6E6/pZmJrgQo7eOz7RKWh + WnJRHseuCj12lKj5GRnW8RwFNuS5YjOvyZ4qUTnNgpNNRo5VGY6S89zfIMOz5Pzfn/TGr9kGv531ws/H + jfjpkAY/6FPgB/0KvN2rxA+pBX7A9vg2eebXOrR4ulmNR9sNuNRtwz3sryf7gqVyhqtqvTGcT17AeFoe + r7xjAEdGKhBCHRXM/BUSYZQM4CBxs62YBRyisYM89LYJLEo9C4gZv8LcvQ0x0/dz3H7fbgT7hsgREK5E + WKwe0UkeiE30QHSCCRExOoRHaxCVYEQMX4/i6xHMF+HUJSFRcgSGufG47EZWbAJzSAJziTAJyC8FUpO0 + SE/SI1sYwGJZghwzKvLFzTom9n1xAw91DtujKccd7WyvnhQn6ldHLE9zxbY8OQ6XsT+TO4lqdSdKHHGi + 1AGnihxwocQBj9Q44AXGx2/1y/D2qBxvjcnx/XElNYoaX1uiwbODvM6MO/e363Cq3YijHVYc7PTC7g5v + bGym3mIfn+Z+h4qd0V/ijFHqoflmDdYwvmykttvC7+4inz3YocDxDmH6ynCWce9Muyv7gjOONTviaJMj + jlMD3T+gx6UhIy4xxj0+yBg+5IkXhrzwypAvXhz2wbOMC48y7gpjV6y7for89yjj4kHql2Pc9/E2otmV + vMmBY8MRDwgDmFrr8qQXLnAfmypNGEh0Qy31R1kIdT6RF+qK7DByDebs9AglMiJVSItUIilchnjqk+gA + R4T7CzggjHwvVJol54gY7iMuzAnx5H9J5PqJhJjxGUF+EiZM4DAHBPMzogS0WD4mKZmcn/munFy4juO6 + ieO6rc6Ejno9+jgeBpr06KFm6shzRmMitXyMA9rFGqdsy0ly6vksFVYz124oshAmbCLn3lZmxJ46D5zo + 8sO5gWCc7vXFkVaTNPNXmMD7a7U4yP2L7e4qFXaWy7Gt1B1bqTkEdlLL72EsPVKrxolaJU7Wsl1qnHBv + nbgZygEPN7ng4VZ3qf0vEw/yOp9vYJtVOWJfuQO2E5vEsgOMyytrdFioNWGS13ikVI/BUh1BHk4Msf8N + lSsxRogKWkvJ51cxFqyt1mBjJftItQ4bGLtWFWkwm0sNmaFEH7lJB/lQQ5YBpemiAosOydRdYlavZABH + uiI8SvaFGfPRMTJea/kXINYHjifHS2Q8iEtTSmvsihLQcYnOSIx3Ji9zRgr1XUasEwqSZJIJXER+WZwi + k9b9rchUS+avqGhSkyMMYGEKkRsmqqR1RHMSqBl5XALC/JVmAMcpkCJ+l8cTGyPKubsiJNTp8xnAwgwO + d+SYd0EotWIE9xNEbeDDviVM4EixD/LE/GJfFJUFoLg8UNpm59qQmkbNm6RBApGU+DlEnIiPs5vAkeHu + EhKEyRiv5mu8PhEyBAcKA9g+A1ggPEQpGcPRPJa4CEdkJjiSMzuhMU9UzxBtp8VgoRKDee5SVbRx5paR + YrH+qxNKeJwCdcKIzXJEf4EbRhjjx4plGC1wxniuI2ZyHZiPHLCz2hnHm8SavBo81KLG/cKYbdTiXrEM + Q40eW7nvNdTF69McsSXTFbupxfeVkBNxjAgDeAdz3xr2qaE0Z3QnO6Gbv9/Nxz3p7ujP4LFlyTBCDjmW + 7oipDMa9XCdsLHbFIcamsy1iIpcRT3aZ8VXq2xfaPfA0udFjFa54stoVL7Zq8M0+K749Hog35qPw+JIw + 7GSOGhA3aHMc5iS6IDtJiUxe47REsZ6vDomLBnAE4/1tA1isBezvxTb2dkKgj3jNVTKAI8Q1DiXCFIiO + YHxnfBHmb3K8ljFDjZgwthc1QnigE2KC2S9DGXf4WlyoO+JD2Iahbkhhm2YKk1LcZMB+JkzMJLaX2GbE + i/Ll1AeZelTkiRuDzCjNMaJI3FSaJgxgxrN4dyRzzIhZvXHsi7Hcxka6U59xvDD2xXIbzTgYxT4q8GUD + OJ3jKJu/K2biV1GPNGZr0Z6tRneWnHBBPzlPT7Yjuoi+fMYstvtwNnkuIQzgZWLd+Fxnxhw5Y5Mex9u9 + yLGCcd9YOGOXL7aIqgA5jHPixiViLMUR42zj8XQnTJCDTGbLpTL4PQlO6GRc7IqjBkxyZWwkx6JW64xz + Rxv1dUu8Ck1so9oU6iRqqwJemxzGC2EAp33BAHaRDOAcjg2BvASthPwUAwpSjYtb5lrGHIFC5t3iVDWq + qZ3qee5N+Qa0Mvc2k2c0iXV/c3TSNWkiGqhL66m3ROUAqWy8gPhvIFeLcsYQYQBXSQYwjzNbj/oMxrh0 + PTUsv5uqkdDItmvgb9WmKlCVJG5kY+6IdERumCMKohxRGu+ImnRxk6McrYyZnYy5neSI7VXUaxUmtJXp + 0cHxMlBhxni1jTrAByupm9bW+2EDddyGWh+sr/bCqjIz+3oIHlpRjDeODthnAJsMYgYwhb/FGZ42Ydb+ + nwawt49Sgqe3ElYvhQRhBnt6qu0msFUhzQS+DZPZDmEAC3PY18tuAAf56hDip0OovwER/npEBnBgBaqR + EKRGMgdPqo8z0r0ckG5joubA6kwyYKrQH2uqIrG5NhLbqkOwpdQXGylWNxYwIRZ6YC8F9OFiL5wuD8AD + DRF4oDUWp5pjsaUymJ2GDc2ELoxlYf5GeTogjSK9LMIVXRThEyTh05UGDDP4NGS4oCTZBUVMGkXZBhTn + ibutvdBY4Yvu6gAM1FAYVVKUMkj35vmgN8eTQcMXM9UxWNGchGVNsVjdEYeN/YnYOpKMnUuSsXcmCQcX + knB0RTJOrEuSzN+zm+NwZnMszm1OwIUNKbiwJglnlkbg1LSvNNPpIgnvUxSAL7e64HttrvgZheT/dMvx + +145ftMnw69HlfjtUhP+tMUPH55NwZXL2bj6QgGuvV6ET76Zhw9eTcUHL8Tig6fD8NGlIHxyfxCuXgjB + zQuhuHku7C4DOACfbfPGp+us+GBWh/eWqPDhmAZXSMavU8ReH/bAJxRD77Yq8Y96Gf5S7YI/kQj8uc5Z + wl9IDP5NAfzhoBHXSLgw7w+sCAZWEqsEAoHV/ri52gs31tpwY50Hrq4z4tONWny6ib+zU4ubp3xw64EQ + 3Hg0AreeipHM0ltPRQEPB+PGBU98fEiNj3bK8OEGGT5Yq8F/Vhrw1wULfj1rwU9mPPDLpVb8z2or/rrJ + in/vsOLjfRZ8epC/cVCD60cMwHEzbh2x4jPx+h4bPuT5/mujDX9YbsRPpnX4zoQBr4wZ8dyQAQ93i1m/ + WpxpNuBcmw0nmkV5Iz0FjpJ9SYYtZYJIuWInxc3BVEecZNC6yOT1YoUO32w24XvdRvxo1ICfLzXi95ts + +OdBP3x8judxORx4LhL4WhzwejLEesCffSUef30gGt9hG9wzrsJGEthlJFfLayjk6kj+mijMWuWYa1dj + XhLuJqxus2BVg1j3R8VE6yyVvthS7IgzJNNfFYbrnBp/3mrBu4d9cOU+/u4TkbjJfnDz68m48Xoabn4n + BzfeysW1HxXg+i9LceuPNcBfRFnoctz8XR7w82xc4fG981gM/nQsGD/f5IdvTprxRIcal1oNeKLfBy9M + hOA1Cui35/3wxzWB+M96P7y3zgvvr/XEh2s88c5yG/4yZcQvh1R4u1OG7/dp8YMlVvxyZQj+sS8D1y/W + 4+Yjzbh6uR6fPVaJzx4vxtWncvDZk+zHT9oN4E+f8sFHX7Hgk+fZX1434/pbNlz7hReu/Y796PcW3PiN + Hjd/rMStt92AN92B78hw/esyfPaqAldeYr96yYTPXmSbv+DLcRH0BQP4vce88O+HPfD3iwb8+QEd/vaQ + Ef961CKVgL7yjD9uPBMAPE084Y9bj3jjxr1mfHJCgw+PKf8PA/j9Ixp8eop9/7wVNx/wwq2H2Jcf9wG+ + 4iut/YuXxWzgMOAFsRY0Hz8RjGv3++DT0554/5AH/rPPhPcPss+e5G+fD8T1SxG4+Xg0rj4WiU8eC8f7 + j8bgDxdi8eahWDy+PgwHxwIx1eSD5mJvVBQGI78kGqnF8UgqiUdyaSKSSpMWkbhoBKcguYQoTiXSiQwk + F2UR2Xfw/80A/vIM3y+///+vAXz3e3e//2UDOK0kCRlFscgpiEBhIZEbiIwkM8L8XaUS0MIAFjN6gzwd + EehpJ2Z3w4+5JMDXGYGE2Hozv4j14L0NTghj/ivwccAoCenpXhV+fDgU/34yBp9+OwJXf2s3gG/+mfHt + jzbgtx7AL3SAMIDf0uDWG+yPL/jh08uh+NuJSHx7WRBOUxjNUmDUU0CKEs2JAQ6IZw6KIRmPCpaThKsQ + LP0JoYcPtz7BagQEKBHs7YYwLxcpD5bE6NCR4YXp0lAsrQjB8rJgrCgOxHymDeMJJOphrujlvvt8HTBD + Mr8+VY4DRQbc1+SHR9v9cYmx64EGHe5vUOFih4YklyR43oZnV3rjpU2+eGNfCL59KBTfOhiCV3f54Ssb + bLi41ID9vU7Y3ELytjgLeL7cRfoDbIko+SMEAUnykkIZJopUWEIiIqFYi4kS8aeACgsk4KtbKe66DJLh + u3XYgi3E5kHm634T1jGfCON3dTe3vSbp8YYek2QAb2P8FX9+7u9X4fiwBmfGxTrABtw7ZsK9o1bcv8QX + l2cicXFJOE71+GMnhfD6SiOWMYdPFFJUk3jdbQAXRor1khUoJfmuTyFJyjCiK4vI0KAnQ4H+TDmGKT7H + i3WYLud+6j2xts2Px++DpY0WzNd7YK7BgGkS2CXVCowyB9xtAE9UMgbXuGBlnYu09s3uFhccF38Kd1Fs + DCjx8qgW3x824u0RE/OMFa9Me+LSiBHH+jTY1umOZW1OmOtzxdJRFVaOa7CSMXNZlxtWdrlLZaC3jOjJ + IczYM2UjxFYYwFbsn7Hg4LQHDjH/nVgqTGA/3L8hGBc3BuMs4+/BcTV2DcpxaNKIcysDcH5NCM6vDceZ + VWHYs8SG9d1sp0YnTFc7YKHZGRv6ddgxZsOuST/sFOsAT3pjE6/3Gub15b3C/FVjaY+OWz2WESu69FjJ + 5yu6tJhuUKK3iIKQpH+QAmyqWo1ljbxuNQYM5cvQkmAv3VQX6ojaEBfUUxg1hLI9QrWoDlCj1MsdJV4U + Xt5i9i+3vnJCiRI/LUEiTr6YT554xwAmb0zwNyLGX5R/NiM+0IY4PzNibTrEmCii9E5INrkg00vG76lR + GenB/mBDkzCAC4QB7IWqIg/JcMjJpojPElARGglpaWokJYm7yu139os/d2Jj7QZwCoWVEN6iRJ8wgMUM + YGH+iju+7XCBZABLcCYcPjeAM12Qn8vzK5ChjNeprMQRFaW8LrWuaG9VSQawgDBdBXo7Ocb7dFgybML0 + mAWTo0aMDWoxwvg00quUMMpxMjHKWCNKjU77SAbwspkQLJuOwHJpDeDYOwbw0qlwzDN3z0+ESY+XToVg + biII4wPksJ0e6G7l77eo7hjA7c0UGuQgHXzc1W5CV5uV8OZrPqirsqGY3DsnQ4X0NF6/dCVyMlXIzdYg + L1cjzXooLtShmLGhrEhLiD/BKIqIqlIVqhknmmoN6Gi2SabvYJ+/HRzTXe02tDQa0VCtlUxisU5wfQ2F + Fp83Mq42VPL1CoqpYoVkANeXi1nAPMZGDQbadTwfI2ZGLVi6hFxploJn1oqFJSbMDOswKdZQ5rjrbXHE + UKcrZgbZp8lxlzM+rRryxfJOP8xQKC0p9cZovjf6MzzRHm9CTST7YrgS2cFOSA10RCbbvCBNg5JcI8oK + zSgrECaaBfUFZjRRlzSKWZ0JjOGMy8VhTuyDFKrJRsaZYGztyMThgWIc6S7E4ZYcHGnIxPH6TJysy8Sp + GoEMHK9Ox7HqTByqzcS2ylRsqs/Bls4KHJofxFNnDuBbLzyOH3z7Fbz13dfw4gtP4KFL5/Aw8fxXH8PT + T17EqeN7sH7tPNaumcHRIztw+OBmLJ3rR1VlmmTkevvICHcEBCkQEqZBAPOR+DPb5usCL+ZT/xB3hEap + ERlnRGyiRUJcvCcSk3yQnOKHpGQ/xMd6IjpSGMAWxETYJNM3LtxbQkyoDeEBZoT46OHvqZcMYLH2r1Hn + Cq3KSTKALdSEXmYF87UasUFGJAcbkEYdmOVPAe/ljEyzA7Kp18qFASxKgCXJMJyllao8CAO4kf2uSpTv + SxTL9rhLf+BJSOV1T+d7uTq0lHuhuzYQXdRtDYUW6joK/0Q5CoTxS+QK05fISlLawdyRkyaMWiPyMszI + zSQWDeDcLItkAGeKdR3/iwEsyj8L4zfQ3xGhQczz4e5IilEjQ6wjLNYCTtFKBnNeokKabSzNOOYxlFH4 + N5Z6SqjI0aM4Xc3jF1ChhOdpX6/XAw1lVjRU2FBXYpFuYLEbwB6oFMavAIV9ZSlRbJFmAIs1f4UBLIxm + MaNYmL/5vGZivbBS5j9xfWr4uco8fpcQM4LrqKWbik1oLbNIBnAPx4Ioe9aQr5XMX4FajvHmQsYDsU5w + uSdaiiyoy9XfZQC7Swaw+GO1INkNovyzWAM4P0OOwmye06IBLGb9CgNYGMEFuTymIh2qy3mejC3CAG6p + 90F7vS96Gvww1OCDiQZvTNd4YL5EjTUlKuyoEn8WanGyUYsH2g34ypAXXh73xtdGzXi5T4WXO53xWqcD + vte/aABP2Q3gH80a8K1JPV5i7Hy8zR2PtCjxcJcRj4344tGpQMkAvjDmhVPDVhwaMOEAOct+4lCfSSrH + fJQx+nibAqfa5DjD79+7WAr6nl41zgzocJK/f4AxewNz7GyLE0bJo4YbHDAuykAz36+mJtoqTN4hHfaT + 1xwgLxPbfeQFe4cN2DOgxQ7G+M3tMmxodcNm8oldPVrsHeRnR23YP+qFXf0eWEdOt4oxenmjAiuIBeZh + sQ6nMH+n6hWYalRjuklDDWnHAuP6PLG0w4BlHczrXSYs7/HAsh7mjh4bFnp9MNcfiFHGwMEOf+aEYHR1 + haC1JwzN/ZFovY2+8DtoI26bwHYDOBTdfNzTK4xgoi8Evf2hEvr6wyT0D4RLGBiMwOBgCIaHvJnXrJgY + tEkG8DIey4ouC9Z2Wal3PRiPNRirErNo5egpU6KtWI7GIjn7qhzV5KFVdwxgty8awGJmWakWK5gr1rOf + bCMX3kcNe4795CG28VNz5LzzvnhiykJOZsB5tokwgI/2arC/m59nPlxV7Ya5UnfpBshZam7Bb8cr1Bjg + cXQWy9CY54qabBfU5riigXm9mfmom7mor0GN4VY9RtuM6KtVoLfcDX2FLhjKdsICOdH6AhW2sb/vLTHi + YIWVIGcTKCe3E6ZwmQGHy004XmnGyUpyvFIDjvH1I+SohyrZD8h5d5YbsKVMiw3MqasKFVjK81/g+a/m + 2NpQrMcWxoKtAsW3DWB+nr+3udiAtQXkmjkKzEsln4kMGaYzyfH5fCzDFaNSeU1HTKY7UW+4YG2+EhsL + FHbw2m4qVGF7qQ57eCx7eSw7eAxbeAwbc90l83d9rjM2FrLvsq2EAXyyzYZTLeSrldQoJQ44Q978GDnP + N0as+MmMD34x7YWfcgz8kPzme11yfJs5+rtdMrzVo8GPBj3wNvv7N6knvtqixeVmHS61W3Chywdn2L+O + sk9uaQ9l23ijO9eEioT/3wxg3+AvGsBi6y2M4P/D+P3cAP4cskUDWHXHAI6jJhUGcHi0Vvrt8Dg9ohJN + iBSvxWkRHqOyG8DMD2IbTS4Zl6gl9IiP15FfaiWOKQzgNDF5JUUnlSIty7GgssBiN4DJraoZR2vzFOQa + CrQyhnaluGAwkXoi1ZXtIGc/UuNElRqnec1PlrngZLmTVAZaGMAPk/c/T433Rr+7ZP6+NeaON8fleGNc + hVdG1Xh2UIXHetS4yGt+vtuMU4wNx/r8sL/HF+uohxZqVJgql0sGcF+pM0aqZJhnf1/DOLqpm/2MMXJn + p1jHXIEjjGMn2t1xqt2N/cAZxxkTTwi0OuNUhysucNzdz7j5ILnuI+RuT1InfqXfiuf6rHi6z8LjMOLB + Ti3OMuae5L6OdshwoNUVB7jP4zzGE50KHGtxx6E6RxyqccR97DOXx614dMabejEQOxp9MEKuViP+SKcO + Lwh2RG6IG7LC5Mggp0uJVCGFXCeJbRVHrRgTKkNEsDPCg5wRxs+GhjpJRl5EmDO5jhNiw52lGcCJ5IAJ + Uc6IiRRrvjoiinw/MlqAOj/GkfrBCSmpLsjNVaGU+rKmgryw2ozWWiPzmgF9zSYMNnNbrUJ7vgsakhxQ + f5cBPCXW5c7WcqyapRLuG4uM2MKxK6oG7KpifGix4TS58/FOTxxq1mOPmKRC7bW3WoMDdcwtiwbwjjLm + mxI3ftdVwo4Sd+wlZz7KOHWyToVT9XKcq3PFffXOeLDBCQ+3uOIRUbq3Q4VH2IYP8rqfa3TD0Wonfs8R + m8ocsabMGcvL2eaiQlalnjHRiKFSPfoZE/oZc/sZDwbKNBgqFzcH25dQWqhUYyU/v5p9cgO3wgAW6wB/ + 2QDuzDagkRq9jFo9P1UnmapJ1F5Cb4VFuCCMXFqYwLchjGFhAt8NYQAnkMslp5OjcZ+xKQrEkRvGJ7kg + KcEFqdR26fHOyI53IVdxQ74wgZPcJP74ZQNYmgEsqsIIAziBOjHWnd+zz5AUSIuXSxDHmSpm5cZSO8bK + EBnlhlD2mdvr/wrzN5D9JjjK9QsGsK8wiEOpM7mPRPLOnAIv5BX5Ej7S4/RMDyQmaxHPfYs1j4Xp+wUD + OPa22Ws3gMXzeFFNgK9FiQoIga6SASzWABYQBnBkuBsiw6hryasz4h1QyP4mjKXuEi2GmHuG2CYDuTL0 + ZzljmHl2tIz6lDmuKta+ZGY9+6gwgPuY8waZf4e5HclzwShfm8x0wPJ8B2yrcMbRRhnubVPj/mYVztfJ + cbpGjuM1auwpkWFtmiOWiwqWiQ7YwDwjSkHvLFBiN39/T40ZO+ts2FDlgSU8jsEsNwxmyzCUI8dgjoqP + ldKN+yNZYt17F0zz2FYUuEuzSvfXa3G6xYAH2814stsTL/aQF7Za8DzHx1eYh5+tcsFrzO1v9lvwfcaH + N2YjcGnIHxuoMTuY8wp4TFkJTnZzP16N1HitZNyKMs7CAI4MVUjrAAsD2A7x2I4Q5oxQ5ojwIDljiBLh + wdyGyBATLkqZq6X9JDEvxIazvagVwsR/gsHuiAtlnwl1RyzjUlywm2QCp4iqBMKsTNYgK1ElGZnJjDep + sYxd1BDC6C3LIf+nrhF5oUTM/s3QcsxoJPM6Nc4NiZEuiI1g3Ap1ph5xlRDD34kOdZNMYLEV7wmIEtB3 + G8BpzKFi9nFBkgoV1E0NkgFMnZ2lQFcmOVaOC7eiH1Cb5QoD2BEjOY6YIGZy7OvGCwN4C9taGMAnOrxx + gXxPGMCnev2xo1aHteRLC+xjc9nOmCWPmsshz8pxZzxQsk2FASyj7nNGF9ukK8ERPcku6E+Vo4/juSPe + Ha0ci83xKjQyV9oNYJ4/j1nk/yy+nxbr+iUD2B25CRoJeYnMq0Quc2xeioEQW0I8X0QBr30Fr2ctdVgD + dWcjY4JAQ47d9BUQM6PFtk7cVLtoAJcxfpTxepXkaFAuleamPspjDsghsnT8rB71jCnSLOA0HerTxHMD + 6vi8JlWNykQZisXSsxyjUsUxjlOxvnFlshPqeV0kA7jChI4qM9rID1vJC1uZF9pLmE/KzRittGKmxgfL + 63yxmlhXI+CNtdRyq0o9sKMlGJeWF+GbR/rhYLE42c1fqzB/XeEplX/+fMavt4996+OrkuDlq4bNWylB + PPb21sLLS0PwdYviDsxWBTwscphMblKZaGEAS+v/emsQ7KNFRKAR0RT+cRT+SWFaZEYZkB+lRWE4Tz7U + FaVMwmItqKF0E5aVBDFphGNTeRC2lfljW7EnNuUzIRYy8ZWYSZY9caLMG/dUBeDB+jA82ByNs03R2Foe + gD4OnsJAB2khf2H+ihIfYn3A9nQ9psu8sLrRF2tavHnBPNDOIFiZqWDjifWTzCjON6OikKK7zAddVf7o + r+b+KnzRX0JRWhzIQOmP0dJgLG1KomDJIFKwcSAN20bSsHMiHXumU7F/PhmHliXh4PI4HF4Vg6Nro3B8 + fZiEk+ujcHZNHM6uiMbJuSCcWGLDWRKhBzrkeLzFBS80OuLbzU74McnSb0h8ft3lhp91uuCnA274xYwW + v1lrwz8OhOM/52Lx3qMp+ODZNLzzQjL+9Ww0/vVECP79kB/eveCDDy7449Nzgbh2Lhg3z4Xg1slQ3JQM + YH9c3+aNK8IAntHhvTEFPhhR4pNRLT6jGL0yYMB77Sr8o0HM/HXG7ysc8acaJ/yt2RX/aJHhHyRk7w/o + cWWJFTcX/IBVQcDaEDvWBeHW2kDcWOuH62u9cHWtFdfWmfhbeny6To2P1yrwyRbV5wbwYxG48XQMbj4d + i5tPReHm5WBcvc+Gj44o8dFuN3y42RXvr5Xj3dU6/HulBX9ZYcPvlpvxpzU2/H2zJ97d6YmP93ris4Ni + tq8R14/ocFMYwEcsuLnfiis7LfhkOz+z1RfvbvDBn5d64GdTJrwx4YEXx8x4ZsgDD/WYcL5dlH224Gy7 + N441WbGLJGYzxd76ElesL3bhYzfsyHXD/jQXnOCAfJCi6XkOvq+R2H2DAuW7FJFvTWjxs2VG/GGrFf85 + 6ocrDwTi5pO8Ni8JEzgReCUZ155Nwv8+lIC3D4bi0jRFf70DVlY4YEWNG5aRkC1tciGpZlDkNZ7voMjv + 1GBthw4b2gzY0KjBOpLujST2Rxvd8UifHN8Qs25XGPH37Ra8e8CKj8/54sqlAFx9KhRXn4/GlZdicfW1 + FHz2rXRceSsbV39SgBu/LcOt31fg5u+EIZyBmz9Kw8evxLPfhOP3BwPwY7bb6+MeFGtKPNCkxSPdNnxl + yBcvj/vg7Vlv/GldIN7Z4o/3N3njA+LDjd54Z7U3/jZvw2/GDPhRvxZv9unx9rgnfrUyDP/cl4Vr99fh + 2qUGfPpQLa48UoHPLhfh6uM5+OzxVHz2ZBw+ezoMV5/xxafPWfHZKyZc/7YHbvzYguu/teHan9jP/sL2 + /IMOt36hxK0fuwOSCeyGG2/IcPV1Ja68osanLxlx5UW2+W0D+PlQCWL9XzHT951Hrbz2Jmn27z8fM+Pd + p73x6VcDcf1F9tkXgoHn2FZPBQCP+ePWg564dlaPj46r8P4xYQAL81dAhQ8Pq/HJcR0+O+OB6/facJOf + vfmoN27xN2591R/g/vDS3QZwCD/jj6vnfNivrXjvgAUfHPLCxycC8Nk9bKeLUbh6OQofXAzGvx4IwN/v + D8VPj4filW3BuG/eD1u7bBimkKjLs6E0P4gkMRrpRfFIJlKKk5BUnGJH6e2S0MIA5lYygNMkEzipMFPC + 5wbwIoT5+t9Q/CV86f3/tw3g5PJMpJYJAzhZMoCz8iNQUBiBooIQZKd7SzNqA62OkgEcaHNAiI8L4Yog + XzcJgeIxEeDrikA/N/iTqPl6O8NmdYDF6ABPgyNCuM33dcBoijCA5fgJY+M7T0ZzrIQvGsDeuPlnH+CP + nsBvLcDP9cBP1cD3NbjxGvvoc+yvl0LwtyMReHNFKO6tN2I5hUYT804W92s3gB0QHUiBGESSSIIYIK1D + pYV3kAY+Yg0qfxJ0bwoDb5KWIIqQeBN6sn0xVxGGFZWhWF0ejDXFAViW7oG5ODWmSeIngxwxG+SALSQM + x4pMeKDeB091heDJNh88RJF5sVaJy20aPDVswssr/PD61jB8e1803joej5/fn4pfXUzHrx5Mw4/PJeLb + x6Lx4u5g3DuvxYFBV2xsJTmvdcDScsYgkrgJyQB2uWMALylWYaxYgyUlOkKLCQq+KQq92VoVljersaZD + i/V9JmweMmPzsAWbBi3Y0O+B9b1GuwHcpcfqbgPWdBmwns838vlmxrjtFPR7epU4NKjEKbEG8CTPa9JC + eOHilD8uz0Xi4kQYSaQvSaQBa8t1mC/SYSxPmLriTlUF6kiAy2KFAaxAUbQaVclGNGWQLFFUdmTo0ZFG + oZlKckmRPZKvw6QoF0jRIdbM2NAZiHVdAVjR4skYbMF8kxFT9XqMVVNw3DaAq4hqVywRBnCtC1ZSPG9h + TtzX6iaVJ7vYo8LTI1q8Nm7AD0ZN+MmoGd+ftuH1eS88MWHGPaNGHBhQY32PO1aMKLBqUos1xAqe80Kn + G5Z3uWPNgOqOAbxryordYg1gYo+YEcxrsm/SgP2TehyeNeLEUivOrvbBhTW+OL3MigMTauwb0+D4gifO + rgokxwjGubVhOLMqRDKAxfq/wgCeqnbAXIMjVvcosXnEJK39K8zfLcIkZj5c0Wc3fxduG8A9BixjW61g + u63k4+Vss4k6BTrzHNCSIdbGc8GImClTbcB4mRZdGa7Snxr1kY6oC3dBPYVPE3leM9EYYUR1IEmytxwl + Xu4o9SbEmr2+irsMYD2KfPWSAZzNx2l+OiTyeayvAZE+BkT5CSPYgmgfD0RZNIg0uCFWzAD2cEGGlwx5 + /iTiESZUJzJmZnqiMc8HDcXeqCqyoJDtnk0hKZm/JO6ZJOaZWfwNCiuxlm9cHAV1lBMiIijSooUBrEQK + hXiyuBNbKr11twF8G06wG7+34YgUxgFRAjpXrJGbL0NZkdxuABc7obKM16XWFW0tFFXs+wJ3G8D9PVqM + DxkwN2HD7IRVMoEnhnSE5g4mx/SYm7RKBvDS6cA7BvDSqUismLGbv8IMnlsSgtnxQO4rZNEADsXCZAgm + h70x0mtFH7lFbzvHUBvbrUWNlgYZmuopsprUaG8xEhYelxea671QXWFFfq6W56VEOpGRrkYWBVA2kUPh + k5OtlmY+5FHI5eeKtX95ziUchxyrtZUUPDU6tDSa0dXuhb5uH/T1EL0EH3cKA7jJhIZaPWoqKaoqKMCE + ESxM33IKrCIlRa8KVYUKqQxofblKMoA7G7XoF2Wgew2YGOSYJX+d51hbOumBWfLZ6WEVpni9hrvd0dNM + wdrhhBk+X8p+vzBgwjyvwUyzDeMVnhgu8ER/lic6kiyoj9JTiyiRF+iODMbv9BAXZMfKUZxpRDmFd0WR + DeUU4TUFVtTnmdGcZ0JjBo+T/UHcLS/KptVFu6M7lcfE+L2tNRVHevJwpCMHhxvScKw2BSerU3CGOFsl + kIwzlSk4XZmGo9XUERVJ2FqfhW2dpTg634eXLhzB2688hZ9852W8/Z1X8PVXnsaTj92Lpx69F6+9/BRe + eOZh3Hf2EPbsWINd21fi9ImdOHFkC1Yu7ed1T0dsjAUhIRr2az3iE8xITrYhjucZFatHWJQa4YyX0Ql6 + JKR4SGsXpmb6SEjL8EN6ZgAyMgORmh6ApAQxC9gL0RFWRIfZECMZwL4SokO9EB5gQZC34QsGsF7j8rkB + bKamtPH3xPrdkd7IiPJEFsdqDrVgnjCBPR2Rx3wuDOCmcIr/JAWGqMsGcgzoyNKiMY39QJRz/i8GcCnz + QJUQ66Vsw5pAdFC31bKNClJV9hJ+YsZvohxZSXZkcLxnJKvYn1XISjMgh5pTmL/ZGR7ISrcgk8iSHpvZ + 3y1fMIBjYzWMDyqE32UAhwe5Sn+wSAZwgg5ZiRr+rho5iRwP8TLkM1/nJ8hRyOMoZ+xpLmWfL/FEdbYO + ZcKgFeYvUcr3KnjONQVmNJZb0Vjpifoy6x0DWJrxW2qSIAzgqnL2Q74vZgEX5+qQn6lCPsemHV80gCvF + usL5esn8FeuHVfKxMIQbCo1oKTUvGsBe6KiwoDaH423RAK7j91qLzNL6yj1VPmjnsTcWGFHLcV/BfYv1 + lAtT5GwHPk6ToSiDj7MUKGasLRXrYjFXlxZoUZCjQE6GWB9drAtOzV1sN4DrKzmOqniutZ5oqfVGZ52Y + xW3DSD3HZqUBMyUqciEN9jSYcKzZA/d0mvBwnwXPj3vj1UkfvM5Y+fVhLb7e64bXux3wZr8Dfjrmil8J + A3jBiJ/Om/HmnBWvMZY+26vFE8xhj/P7T4z749HJAFxc4otzo1YcG/DAfmqXPYwnAnuZ7w50aXC4U41j + 7QqcFAZwuzvOdyhxoVOF8z1qnO7X4diIGXsZT9ZQs001OWKAHKqfGGtkru1wlqp7bO7XYOewDnvHmcfF + sg7c7iF2jxmxa0iLrX0qbKTeX9vqinUtruRFCmznsewcMmEH+dS2fiM5kw6r21RY1qLE0mYF5prIvRoV + 0g1ZSxoUWNKoxkSzBtOt5IqtGswyvs8Qc52Mi11G5nLGvT4PLO01Y77fhvkBH8wOBGBEVGTo9EV/VxC6 + ukPQ3BeOxoEINC2ieSD8Dlr6w9HB9zuJLmEC94aguzeUW2EEE30h6OkPtWMgTEL3InqHwtE3GIzBIeYf + YQAPiRnAVizvsZEbkitS66xvF6XsyDFqVPZZwOQWHcyfLUQD438teago/1yTRzC/1me7oj3PHf2Faiwp + 02O2jJyFvHR1hQqbuI9dDRqc5PneP+rJtvbEkzNeeHzSjIeYY++hbj/Zq8ERcqO9bOONzMFLK5wxXUSQ + /84wzwh+O16pxiAfdxYr2O/d+buuqMpxQzVRk+uKljIF2sWaxfytgWYdusnBu8vd0fslA3hngQ77OdYO + cgwfLDFJOFBsxJ48NfYydx7kODlaoseJEgNOiMfEEXLtQ+X8TpkBO8m5N5GDry9SYQU5+UKmM+YznCVz + d0up0W7+lnpga/Fi6ediAzbzdTGLcG2hBstzlJjJcMdkmism0u0YTXPGcKooJyzK0Nr10GSaI1bkyLCO + 13k98/jaXPbLPBk2iDLsPIYdvMZbeRyb8t2xnue/nhphY4Ebj439nPl5F/P3kWYzjjebpKVx9pY44FiZ + Ax6sc8OL1ALfG7fhh8SPyJHfGtTjW11yfKPDHd8jJ/0B8/jPOa5/NuaD7/ZY8HKrHo82aPEg93W+zROn + ydVPjcRhdx85TkMQBoptqEhUISdGgaQoBfmZAqERagQz190xgMNuG8BaCZIBTPhSk4nyzr6BwgQWkMEn + QJjAd+PLBjA/FyJHYIQG4XGG/2oAC2M4MpHPmVPDJANYjRAeW0ikDKE8zph4DeISdYhPErP8DOSXemnt + +NQkHfOMKEFqN4BLFw3gasZ2MZuoUqyXnk2tk0VOzbZrT3ZGT5wjJpNcsCbbHbvYJsfYV0+z35+pYqyi + ZjnL6y4M4EsVDvgqOdA3+lzx/UUD+HuSAaz83ADuVePBTh3OddkN4OP9ATjU54c19TosVKuksq9DJcIA + JuevUWC+VWg5EzZSH0g6rkOFPe1yHGpzx1HGseMCLU6M2U7cOjN+uuIktc4pxsOz3QrcJ36P4+9hct7L + XTo8xt9+pJNt3aHBuVYljjW543CLGw7ye/taXXCom/qQ/eUUtdbRNr5e54iDNY48XiUeHvOQDOAHp4Kx + tyMES7I9UBPuhBw/B+QGOSMnxB2ZYSqksm8ks40SorSIj9aR06vZZ5QID3eXEEZ+HxrpijAiItIN0dzG + CpMkWhgl9tm/MRFO5P3OiCefSGA+TyAfSSQSElyRnOKOLOa9Qua7CmrMuioTmmuoQeuN6G/1wHCbB/MD + +XaRDM2pjmiMc0CHMID5eJJjc3mOjuPObgBvEgZwoV6qHLCtlPqO2vdYqyeOtJqxn2NiZ7USOyoU2M0Y + JUzgPVWiBDRf+78ZwPzMqQY1zjaJmZkyPNjkhkvUsKL886OtYvavGg93ifVUVTjL94/WuGBXuSPWlzAe + lDLWlIn1X9UYo84bYqztYyzoKaGGkaBCd6mK8VqFYTEDmL+3wONZUWU3gNdze9sAXl2kxlyuCmPihmxy + ni5htGSL8qsGyQBOT7AbwEKD/TcDOFKUUI+RI5qc/DaEUZokdFwG9SK5Tjx5SSK5T2KKG8eWG/fphmxu + 89hOuWynfG7/bwZwZSb5CvcljLAcYfrGsu9QG4p1RMXMTGH+pt42gBl7kvh6/G0DOPxzAziQHPb27N8w + 7iMiTs444IqAMEfpvXC+FpusQVqmBzI41gVSM008Zh1jhALR/LyY3Wwvc61EPH9PbGNjxM3IcvJ5Xpcw + N0RFiuWJCMkAViA4yA3BjGV3DOBQFSKEARzugNgIB6SzzxWmUJuTg3UzvwwxvwwXaTGQK0dvphMGGdeX + ULMNsT2bM5xQJyp6pbKf5jihN1+BPuYBYQKP8nMjWc6YyHDAfLYDc40TDjPGn2tW4nyDHKeq3XCk3AV7 + xH/o/O5K7mc+xgHL+ftrmWe2MHdtYQ7fUqjE9nI9ttVYsL7ajBn2j9F8JUaZs8YK2dfIISUTmPlriBxy + LEeOWXKBlaUabKJO3NtgwMkWD9zXacMT3d54udMHX2+14pU6LZ4vZ86pcsUb5EQ/HLDgh1OB+MZ0GC50 + 27Cc+apBzP7lMaXHCsiQGivWzLXP3BUGcFyUClFhwthl7A5gbCDEjF873CXzNzSA71G/iNdCxPNAV0SG + uvO77H/cl90AZm5aNICjhQEcpkDsogEcG+yKOMan5EiFpBtERaK8FGpt6oa0GFfqCTlyU9TUn4KzW1FD + /fm5ASyqC9kN4JRYN6lSQVSoIyKC2L9CnAhnRIW43mUAu/N9MQuYsYz9J54xLjGKuiWa/Zl9K43XIJe/ + V5qsRG2GGi1ZGnRkKgg39LCtO7McpBnAvTkOGMx1whgxlcfYkM/2LXAhF3EhB5ExVulwskNUZAjGvaOh + 0jrAexvJSdiv1pDLrSJPWEVdv4oxZBXj23JynVn2x7F0N/Qyr3WyXToTHKWbnHrT5ehJIcdKcEczj6+e + Y7+W470qUU0tSJ0TS10hGcByextyvKUwXqdxrEkGcKKW0FMD2pHN3JvNbY54vLi9/TgvSYsSjulK6sLa + DC1zrQ511GhiRnA9r7WY9VvPayLwBQNYqtyklgzgUsZwcRNvJbdC39Vk6bkvQhi/jG/13NakGlCdzPfZ + dgJl1IeFMc7I4/jMDFs0gNkvK3gtGsQNXxyfnRUe6Ky0oJWaqYW5pbXEiHbyx25qwaFyMyarPLFQ443l + YtZvpRdWV9qwilpuBd/f3hKMi8sK8Y3DfXDw9HSFzeYCLy83eHvb1/m9PdtXwMfXvvX1VUnw9tNIxq9k + /vKxMIBvQ8wGvg2bF0W/TZSGdqfYtxvAvt4a+PK1QC8OpCAj4sM8kBxmREa0gReawjbZjBoSn7p4NRtX + TPNWYSLbjNWlgUw8AdhQ6EUy64kdRRZsyzdiJ0ntAYre41VeJDg+uK/WHxcbhQEcifNNEUyUFDIcOCVB + HND+Dkgm8qLd0cBBNVHmi80dUdjTH4XdFDIrWyg0i7WoyRaNx8bPNFKg6lGYxWSUb0YzyWVHqSd6S30w + WBbAoBiGicpwzNRGY213JrYO52PzcDa2jWZj10QWdk9nYM+M3QDetxCPXbPhRBB2LwRg7zJf7F3qg/1L + A3B4PhhHpwNwkKLz0ICepEiBe0lwHqFgfLbOAd9scMAPmpzwi1Y3/KzNBT9occDbXU748bhCMhn/Z4s3 + /nQwEH87H4n/fSgGf3ssEn95JBB/ud+Lr1nwr7NWvHvWGx+e9sWV0wG4eSYEOBGKW4eCcGuvP25s85HM + 2Q9ndHh/VIF3B+X4cEiNTwa0+Iii6J8kBqLk82+KHfBL4o+1TvhHmwz/Jjn4D0nbR2MmXJv1spu/60KB + jdz/BmJjIG5tCMD1Db64ut4TV9Z6EAZ8tEaLD1fL8f4qV3y4UY6bJ71x64FgXH8sHNefjsGNr9gN4OuP + BuOz+2346KgSH+9xw4dbnPHeWhdCjXfWeOBfa2z42xoL/nejMH+98Mk+L1w/SBy24sZhE24d1ePWYQNu + HbDg+i4LPtlMbPHCx1v88d56f/x1wYqfT1nwzQkrnh+34KlhGy5RZJxvt+BcuxdOt3rjcL2VCYmiJ88V + qxnM1hQ6U9S4YwcF58FMd5xMdcWDaTI8Q4L3AoXmSzVyfK3FHW/0K/D9CQ1+tlKHv+yx4f1z3rj6iA9u + PRsMvBBDJOLGM0l453Iyfno0Ak8sUBy1MGBWOmCVVFLUCSuaHLG0lUmynaKx0wWrOimwOuXY2iXuriTa + FNjfKsP9/Vp8dYkRby1Y8D+8Hv/cbsF7ez3wwQkrPrjA6/eQLz5+IhgffiUUH78Yg0++noiPv5OGT9/O + wtVfFODGr4pw4xc5uPbjFFx/MxEffTUa/3tfEH67xxtvrzDjlRE9HiYBvKdOSTJowuVuK54btOD7Mzb8 + kdfx3Z1B+GCHHz7Y7ocPt/njnQ3++MdyP/x20oqfjHjge70GCgxP/GpVJP65PwdX7qnGlQdq8MmDVfj0 + UjmvSyGuPZZLpOP6U/G4/mw4brzAfvOSJ66/7oFbbxI/N+PGn6y4/g8Lbv6T+Bvb9ncq4OdyYNEEvvld + Oa59S4VPX1Xi05f1uPKi5Y4B/NkLIdyG4Mrzwfj0q0H4+Bk/vPeEF9550gsfCPPuJfa/1yKAb0QCXyde + Yj9+JhB4kniY7XafGZ+c0eL940q8f0SODw4rJXx0SIVPjqhx5YQe187xGO+z4MbDNtx8zBO3vuIDPB9g + 39cdA5jj7qEg3LgQgE+Pe+H9gzb854AN7x32lcqFf3AhDO/cG4y/sr/87qQFvzjmhW/t9MYTK2w4OWrB + SpKYHlFOIoMJPycQefnRyCqMR6pA8W2jlxCmrzB/v2AA22cBJxUKiJnAdgPYPiP4i6bu3UguEmbx5/jy + +/9vG8BJ5fzNsnSklqQgvTAWmfkRyCsIR3FhGPKz/ElyNAj1cZbKPgfZRNkmkmuSsLBApR3+chIyO/kN + DhBGK4W9tzOsVvuyBzYi2IPC0McBI8kOONPjhp8eZox4MoL9KQzXfxuEa3/xxc0/+wJ/8AZ+bQN+YQJ+ + ogPe0uH6qwZce9oHn9wfjL8dCMWPVobjUqMFaykmOkIckXO3AUxE+DtLdwr6+yvgEyhmXjHH8tj8/Xic + PiRlRGYICUeSBf15flhgjllTHY6NlaHYVBKIlSkGrCA5W0kysyrMCZsinXCCoumRWl882xmKF3tD8HSL + FY9Q+D9U646v9Ojw8qwnvrstHD86noxf35+D3z9aiP99oQL/frkK/36xCn99ugS/fDgX378nDc/tCsGF + pUbs7nXGOjELuNwJ80VumMxxxni206IBLJdKAwkDeLxEjzEStyWMf0so9Car5JhrUEhr/K7pNmDTsBlb + RqzMjTZsYNxY32OSTN9VnXZIpaA7KHQp9Ne1KbG5jfG1S4a9fQocH9Hi/lkLHpr3xqUZHyIAj8xH4IGJ + EJzs9cE2Ekux/tlMPoVmNvlCKklhipwiRYFyCqUiku7SOBK3dDOaMjzQmm5AKwlWa7IcbRR8Xfz8aJEB + 0yRSS+s9saYtAJt6g7GhN4jH5YNlbVbMNZsw2aDHaI0Cw5UyjFa6YazahXDFeJUwgEl2652wpdmF8ZiC + p1uJy/0aPD9mwBuTHvjJEjN+vsSCH8154jsL3nh+1oZHpm04xZi9a1iFdUvUWDtNIjyhxrIBGeY7XaUy + 0KsHVNg0qseOCTN28fO7pq3YOWnBzgkTdo3rCQ2hwt4JFQ7y+8eXeuD0SsaJZRYcmNLyNQNOrfTDuTXB + OLOWWBOK06tDcHCGvGfIgJUdMkyTX0zXso07ZVg/qGM7sa3Grdgw6oFV5CJLmd+F+XvbAF7Wa8QyMWuI + 7bqC7bis24SJesakQje0sW/05MswQCI/Ku4CL1ChKckJVSSx4s+XegrSJoqf1jiS1lgLGiPNqArUocRb + iWLyzhKp9LNMMn9LyTO/aAAbkMXHyb4UYeSQUXnBx0UAAP/0SURBVOSWoeSYYeSUET5GhHvqEWqSI0zr + jGi9MxI9XJBGHpvjr0JxmJ59wYSqNDFTzQt1Rd6oLLKiMN+A7Gxh/GqRmalfhBFpJOVJFPviLu4oigax + xq8we8Ws3zQS9VQKcrsBLNYAduFn+H60gBOixZ3/McIEdkJ8rAvhhPRkV2mWWyHFcimvzecGsDMqyyio + a13R2ixHV6dWQnszxQ1xxwAeNGBh2htLZ70lo3d23EgYJMywH0wtMUmvixLQC1MBWDodLBm8C5PhWCHN + Ao7m4whMjwYSAZhbYn9/6ZS9FPT0qB/GB7wwxPbs69Cju1mD9kYFGnlc9VUuaKxToaXRgOZGDzQ32FBX + 44myUjNyKHTSKAzTUpRIT9cSOmQQmRRCmZlqu7meIUNmuguys1xRzHhRXaFHfY0RTQ0eaG/zRDfHWHeX + N8/b8w46OOZaOObq6yiKKsUfZ2pUCbBPlfH6FefKCHeUFyhQVaJEfTmFqWQA63j8Boyxj47363lOWp4b + r9OoDlMcZ9MjKsyMaDDS7YbuJgf0tztihjx36YgRM93UA60GjFQb2W8N6Mk0MT54SOZvOWNxPvNHNsV+ + OsW8KBso7iAuy6FekW4m8ERVoSfqC21ozDOjI1fcaKJDLcV6ZagDqingWihChxh7Fkr8sb0pEUc6MnCk + OQ2HaxJwvCIOp8rjcLYsDvdwe095PM6XJeBceRJOVCZjT3kCdtSlY2dHEU7MduPr9x3FT7/2FH76rRfw + 9je+ijde/Qqefew+CW+88jReefYRXDp/BEf2bcSR/Rtw/tROnDy6CSuX9qC2KgVJiZ6IiTEiJcUTubmB + KCoKQ25BMDJzfJCabkNKugXp2Z7ILvBHbnEAcouCkJ1PrlEQQoQhJz8EGVnBSE32R0Kcr1QGOirUU0Js + uJ+EqFBvhAVYEcix+X83gKkpOX6jg20U6QHIjvNHfpwX8qM8kB8s1v52Rr63A8qp2RojnNDFmD6QLdbE + N6CdQrwhjcKcOfa/G8B8L8+ABuq19pogdBBind1c9tUM8ecdNWF6AkGhnZ4kJ5Qc16KcuRpZbCdh/Iq1 + ezPSTUhP82AfN0ljXzy+bQAnxuslAzgmlvEoijwj3G4AixLQ4cH2P1gSo1XIiFUTCmSJPybiZCiIdUNB + nCsK491RmOCOykwVWkXp8GKrtI5ueSrjQ5rSbgALo5a5vVbMLC/3RDM1bkMl+1sx45lk/poJsfWQDODq + co7PCk9Ul1qlsuSiRLm9FLSa+NwAFjOLK/he1V0GcAV5pSgLXc/+f9sA7q7xQlupiZqYYy1TLq0B3MDP + tJVY0F1FvVzti64Kb7SWmNHIeFot/vyQjl2YzCqUZSlRnsNtnhoV1EhVYuaaMKup28VM4PxMGXIZGwpy + RUzU8RyMkglcRdRUWRh/bGittqKj2oz+GjOGK3SYLFVhNePC/hYLznR74cF+Gx4bsuGFJT54bdoHb0x7 + 4puMi98clOGNPke81e+In4254dfTavx6wQO/WOaJHy33xbemvPAyOfUzA9R+Q954cgm5xYQ/7hOzf4c8 + cLBXjz3dGmzv0mJ7txY7uRXG4IFOFcevEsfb7aVNz/Hxeb5+hp890aeTykbvoOZZ3irHGPlTTxVR44Bh + 6vnpDics75FhQ78K24a1zN/kWRMe2M0YLrCTz7fz9c18f0OXHKtaqTubnbCenGhTj0ZaumFLvxGb+vRS + JRWxlMbSNhUWWpSYJWaYNyYalRhj/B5vUmO8RcO4psZEmwZTncwVXXpMM3fPMEbO9Zkw32/GQr8H5gZs + mBv0xvSgH4a7vTHQ5Yu+7kBpRm/TYDjqiPrFbcNwxCLC0DwYho7+MHT13UbIHXQuomsgVEKnhBB0LKJr + KAw9Q4HoG/LCIHnh+JAF0/0WLO+1YW23BZu6bdjYZcPyZh4vOcZ4tUoqKdpRKEMr+WcjUVcgQ60wf3MV + kgHcQHQWKDFUwphfybxYrsccc8TyUvKbSmrnWgUOt+twfsADl8hxHltixePjZjxMPnRBGMA9ahzqVmFX + uxJrG1wwW+qAyUKi2A1TZUpMVvDaVqoxUK5CR4kCTfx9YQBXZLmhLMOJfd6Rx+SGxjJ3tFUp0FWnRifz + Z7eYvVzkiqGczw3gXfk6HOBYO1ikxwGOC4H9HCM7OSZ2ZcmwP0+Jw4VqHC/UEmocK1DjSDF5XRk/x/Pb + XqTCRvHfRL4cy8QsmjQHzKY6YR0/v5VjTDJ/xbbYXvp5cwn7TakRG0sMWFOowTLm5+l0N4wnO0nLSQkM + Uv8MJDpK6y4K9BPCBJ7LdMHqPHesyZNhpZhtle1CuEqG8OZiMTtYmMOuWJfnIm03FrpL5u+mIhm2c7we + qDNKZWl387rsLnHC4XJHnK9xwVPtanx90IzvDVvw9qgVb3LsvNGrkvBDts/PJ33wm9kgjt1gjmNvvNJm + wqP1GtzfYMC5JitOtvnj1Gg89vTHYkVTCAZLvFCZpEZujALJ5P7CAAmLUCNk0QAWyx/Y1wIWy+/oJPiF + qAmVZOT6BMukdX79guUSfJjvfQJdFsHHkgEsjOHPDWDxuZBILaLixfq//90AjkggR43X3TGAQ6OV3BKx + KsTEa6Xyz8IATkpmXk7SM7capNm/6dR6tw3gkly7AVxVZOaWsZLxs5LxuDrdHTXk2Y1xYq18ath4RyzL + cMEWtskh9tNTtWqcZR+8h33/fAWve4kD7me//grj0de7nfHmqAxvjcnw3SXCAFbgZfKk2wbw/Yx5Z7vM + HBeeONbvh4PEGo7FeY7FCfbpwVIX9JW5YYT7niN/WtXlgfVd7GMdamkd4J3t7MctrjjU5IwjTU4SDjc5 + kvs44Rhj27EONxyn3jnV6Y7z3Qpc6FLgvjY57muR4wHi3mbG1xYZTgrzt8kNB5pdqbFcGIPdcXxQi3Nj + JpxirDza5ooDjLUHqWVOtrvh4oiBGssLF2dCcagvCtMFnqglj8+mFs9mW2aHkJeGaZHCdktgG8VGaRET + Z0BkLPVEtAbh7DvhsaJ9qMnj5GwruVSqO5rbuBjm9RiZVFo1hvw/mvuNY05PSdWSFxnJGcRNpGKWppzt + SX7BvJubSy1DnVxdYUBTjYlc1QMD5LkjHVYMN5BzlpJzc4w1i5mVHHMDqQ5SGfaludTEhR52A5g5f3Oh + HpsLNNjMcbejjLqv3oSD/P4etvG2chnHO7VzmUKqWLiTWnxHmZzjz17++W4DeA9fP1KtxqkGDe4R5Xlb + lXiI+ephXvPLrQo82qbGI6LqH/Pa/dTlZ5oUOFLjju3UK6sZD+eKnDDJfY4ztg5Sf/fx+EX54M4iNVqL + FGhhXGotYiwWa6bzeCaJuUoVljF2CgN43V0G8Bpy+vlcpVTudYCcoStbh0ZynooM6j5qsYxEuwEcK4zT + /2IAR7BNItk2MdT7t5GQqJZm/ybeZQAnkZMkkRumprDt2S55olpJksw++5c88DZ/FGsBCxNHmL91+WIm + skZaLiQ3Xo5Mtr0wgAWHzGC/SF80f5PJ66QS0IkqJCcopZLVwgAO+S8GsDB6xezfSJ6TeBzC10KiXBgT + qCe5r4RkLZLSqEGJ+GQNovm5sGhXCRHUo2LG892znmMY64QBHh7hjtAwV4SE8RoJg5fXJkrcaEIuGsKY + Fsy4JRAWpkL4ogEcQ22eGisMYFeerxJd7KODwgBmfhlgTu3JcpHKIk9WGbCEuq2b+a4t2xntjP+dfL2L + mraXuWmA+WyEj4eZh8aYh2YyHLChyBH7qR9P18twutYNR8udmLccsC3PAev5/gr2c2EALyVWxvM19vkN + HAPrRF4pVGBDGflNBbUu+9UY9z9KfjhGDOWL2ckqQo1BHvMYn8+W6rCSn93EY9zT5IHjHFv3UFc+Rnyt + g1yv1YbXGbdeLnfDazVueJN86KfkHD+ZDsCr5H0nW8iLcp1QzWuREenA3OGAFF5rkUMSGa/F+r3CAI4X + N8eG2ctACxM4gogUM6qJiGC2Z9Dif42+7tKMYFEWOsjPGWFBjBNhjB1RaiRGae4ygJ0QFSzKMbPfUi8I + AzhGGMCh7tJvZyZpUUQtWig0SZJK0i2ivHMh+7aY/Vtd5IXaYs//bgCzrwoDODLIgcfkgJBAUc6ev3eX + ASwQGca+QMREyBDHsZXAfiOqZ4gbGlJiZVLJ88JEBSpTFWhMF2t0k/tkcmyzrbqynNAt/vfJYswS/w/m + OWO20A3LOfbXlsiwkbxpW7lcqkZwssOGC+R7946G4NygPw612bC73oxt1NybKvXYJNqvyozN5Pxryf/n + RZuTn/Qwt4mY2JHgiE72U2EAd6bI0ULd18Djq4mWoZLjX6z9XxivQl6cvQJIFp+LMZrGMZbK8ZIWKdZV + dkdOohY5zLW3kZ2gR1bi58hchHiczc8WcH+ljOWVjAHV6VppPeQaXue69EVkau/gtgEstE9JphLFYskb + vlbCz5cJzcVtdSa/z/asTSMY32qY3yuTdahgW1eQu1Sl8Pv8vcIYF+SyLwrzV2yLmN8rU8ktc5Tkvzp0 + VlCjEa1lHtRrJmowE9qKjGgnn+zj47FyC2YqbZivsGBZGXk1PycqJS4lD9zWEoQHlxXidWEAi3JgXt4k + Nr5y+Pp9cbbvbeP3ywbwF7Bo/grYZwLb4emtgcVTKZV/FiWhfTzVBPdrcYe/jcEpUI+kcArrCAMbzYi6 + DArJbB90ZFvQmWFEHwPgCJPpbI6ZScKbRNeGdXy8hWJ4FwXzrkIOdp7o4UoLTtV441y1D+6r88dFEsGL + LRG4pzkcu0q9MRTrgioOggIOgHwG4lomlAHuay3fPzKaitOTKTg2HodNnQEYYSesYQcXpcIy2BipDL4Z + DOgFqWyYLD2ack3o5T6HKwMxVR+JuQYSz9ZkbB0uwN6pMuycKMCO8VzsmsrG7ul0blOwazoB2yYjsGHE + D+uGrFhPYrtx3IQNxGaKD7FG4s4BDoQuNYWHDEdb3ZiUnXGJBO3pOpI04vv1zvhJsxt+1OyCN/n6d1v5 + 2oALfjCtws9WGfGrrTb8/pAf/nw2GH++Pwh/uOCF358y4U/HDfjHCQ+8c9KG94974dMTvrhxKhi3jhEH + A4Hdfri5xRvXVlvx0bQO74/I8Z9+d7zXr8B7PUq816XEn2uc8asiB/w4xwE/In5f7Yj/7VDgHQrS98Ts + 30lP3Fjmv2j+hgFbQohggvvf6o/rW3zx2UYbPl1nwsdr9XhvtRL/WelGOOPdje64dsILN0SJ6sthuPZU + 9KIBHI1rjwbjipgBfFSJj/YKA9gJ761zwvvrVHh3nZGw4F/rLXhnCz+z2wtXD3ri1mFP3Dxixa0jJkAY + wIf0uLnXjKvbrPh4gwUfb/TGx5sC8N7aAPx1zgs/n2JiGLfh2TErnqAQfbDbinPt9tm/J5q9sL/GjPU5 + bljFpLci1xmrCpxJxkSpChIikpYzWXJcypDh6TyS5iI5niUhfq7aCS+RpH5jwB1vTsnw6016/OOIGR/e + 54lrj4uZwBG4+XQMrj+ViA8up+AXxyLw3HILTlDwb61mEuT1XVPriFVs5+UtTJBt3HY4Ym2nEzZ3uWBX + nwwHB5Q4QpwdVuKJKSO+vmBmP7Dirxt5Pbab8cFeIz44asK7p/R454IZ71/yxnuXffDBs6H46NUYfPRG + Ij5+Mw2f/Tgb13+eh+s/zcK1t5Nw7Ttx+OjZCPzjHn/8cocV31kw4vkBksA6kvRqkvFGHcmiAU/3mfC9 + aSt+L8o/7wnGh/sC8eHeIHy0JxTvbA7G31cF4rfT3vjxmA3f6TVSZHjhV6ui8a8Defj0fDU+va8an9xf + iU8fLMX1hwpw49Fc3Hg8k+2ehJvPRePmS8G48aoPbrxhBd7yAH5lwc2/WnDj38Q7Ztz8pxE3/qgBfq28 + YwLfeEuOa99V4ZPXFPj0FS0+fcEDnz7vhc+eD8CVF4K5Jbi98Wo4brwSyveD8MmLgfjs1VD+ThRufS+e + v5UEfC8R+Ea03bh9jv34cT/cumTDlXsN+OCkKPssDGAFPjykwMcHlfj0kAqfHdPi6mkDrvNa37jIY7xs + A570wq3n/ICXuZ8XiWc4Lp4Kw62HQ3DzviB8etIH/zlow9/2mAkb/n7YH389FoDfH/XBLw9TEO/V4Y3t + ejy70oD7luixv4uxsFSBdvHnZqoZpVmByM+NRnZ+PNILEpBelILU4lSkFAmjNwUppXZIBvCdMtBpSCoi + vmAA/3dj9zbEZ+/Gl9///2QAJ5dm2cHPfdngvWP0Fmd+Abe/k3gbZeK5+N1kpBXGITMvErn54SgqDENB + TgCSonWI8CfZsjkhxMsZkYEUa8FKQmNHkJpky45wIjCA+c3LBTaLo2QAizLQoRbmBz97CehzvS742WFf + vP9kGK5/KxQ3fxOMm39iHyDwPz7ALz2Bn1mAHxmBN4249pIRnz3uhY/uCWQ7BuNnKyNxucmGLSnMMyTj + RT4kk9x3IhFLIhbp64RQXxf4+zHnkiz6+DHvchtIhPO1RG7zw3VoSBHLC/hTNEVQMEVgc0Uothb5Y1WS + BmtIbDaR4G2LdsGhJHdcKrHghZZgfKM/Cq/3BOH5JhOe4Hi9XOuCF4cMeGOVH35yJB6/u5iHvz9biX+/ + Vsfx344rb3fi0+934t03mvHXl2rx26cr8L17MvDsjhCcEVUJKKxXlTtivtAFUzmOWJJN5LligiJvrMhu + AI+WaCWMUZCOUViK8shTte6Yp2hc0aHFxkGSOua4TSL3DViwtttu+krmb4cBq/iZVSTkq9pUWE2xL8oe + bqGI39VNkTqkwf3znnhoqS8uzvpQ0Afg4lwILpC0H+/1wlYSyxU8lilRGihTho4UN7SQqN42gItJZMtJ + 4hoyhAFsQkuaHi3JajTxmjUlOKMt2ZXnYMJMjSeWNfpgTUcANveHYuNACNb2+GEZSetcqxlTTUaM1ikx + XOWO0Sp+p5pCh+JmCWP9XA1jdZ0TtjQ5S392XOhR4clBio1xI747bcHPmGN+OWXFTxe88f2lPnhthQ++ + ssyb52XB4UkdtkxqsJ7Xes24AssGXDHPGL+sxx2r+lVYP6LHdn5354wXdjDebp8kTxg3YOuohlBg26gM + 28d4rSYUODinxbFlZhwnDs0acHTBgjNrAnBuXQhOrw3CqTXBRCg/E4zdU17YyH6x0OKCabEOcLs71vRr + sHHYiI3kJ2u5Xc7nkgHcI8xfLY9LzAAmgez2wEKXKA1tw4oeT8w2W8ibSDqLKciEcBR3DxdqKeTZDhRU + 5aEOqApzRn20Cs1xBhJ5T7TFeaIp0iIZwGW+apT4iLLPcmk2cJmfiiBhDuB7AUYU+xlR4G9Clr8BST46 + xHqpEGZVIMhCoWVVIcSmRohFhSCdC4I1jojUOyPBwxWpXhQvfkoUhmpRGmNERYoZ1TmeqKFoKi+yoTDf + hJwcEn3yuqxMI7cCwughL00U6/yKO6ntJq8wgMW6v6kpemkWcLwQ8Hw9Inyx/FuUmAWwWPpNMn8FeBxx + TsigaMnNkqGoQImyEp7bFwxgZ9RWu6C5kaKmndesQ4eOFgqsFiV6O3kde/VYMmSSZveumPfFcnKW5bNW + CUunzJifNGFalDeesGB2whNzE358LXBxjd9QLJuKlDC3JAyTw/4S5sZvG8B2E1jMCp4Y8sFwnwX9HJNd + zRR5dQrUs5/XlLugrlqBhloxa5ccvdqMqkoriouEQaZBarIwzlTSrGlhnAvYzWA1QRHJc09JduRjZxQV + KVHFftLYQNHSbENXpx96uv3Q2eGF9nYb2ikIxbat1Ypmxq+6GgMqy9l2xbxmAkVqFOcrkC8MoywXqZS2 + MIAbKsXxanjcegzw+Md6TXcM4IkhLaaG1JgcUmCGY0bMBB7pcr1jAE8PqjDPcTDJ6z5SryG316CVx92c + qEFNpJp9V42iADlyGaOzAtyRScGfHSXWjtWjKt8LdSV+Un+qLfBCU4En2vM90cfHfdQpbdQZjVHOaI6k + SI53x2S2EavL/LGjPhZHqBmONiThaGUsjpdG4FRJBM4VR+Ie4kJJFM6XROOe0jicLk/A/rI47KlNxZ62 + fJycasPX79mHH7/wMH7wymP49guX8frzl/GVh85KEI9ffOI+PHh2P47tW4/j+9fj9OFNOLR3JeanWlBV + HoeMVG+2iRV5uf6oqIhGXV0iqqpjUFoRjgJh+Bb4StuSyjCUVoehqDwM+SWhKC6NRFFpFPIKw5GdE4r0 + 1EAkxvshMtwTEaE2RIZ4ITrMBzFhvtLjUH/LFwxgD4PsCwaw1YOa0lOLmBBPpMcGIjchCIUJfhS+NhSE + UXgHuqHQ3xHl1G0N4c5opyjuzdSjm+NVGOz1olTWl2YAizXcitKEAcz38oyoL2GsqQ5EW02QNFs7S/TX + GLE2lDtS4oh4GVK5XzFzI4V5IZXiOzvTJJm/YsZvepq4IcTEfm7k+6J/mz43gBPsJTujYjSIiBIzzWQI + DmYMCnReNIBlSIhUII3vpUe6IytKhpxoVxSJmeHRziiLc0NZvBvq0pVoLzSx7xilu+wrxDp0zGGlkpHK + 87hjAHuhpcoXjZXe7PdmVBIVpRaUF3ugQjynyK+p8ERdhRdqymwoLzSjmPFNGMC56So7uM+CNPvawqJE + WUWuHpW5dxnA+XrUFy4awFVe6Kr2RGuxWP9XgWpR/jlHJRm9bfxdyQCu8bXPAi7jmOU51OZqUZnJcZPF + 88jmsedQN4vy0UV61JQwfpRxXFfwOMs9pJnAhTlK5Oe4oyCP8Z85o7xEzxipRylRXm5CdbkZjRUeaK0y + 8XdMGKrUYaJUhTVVOuxvs+B8P3nBoBceHxEGsDdeo+Z4Y8YT35o04lvUst8ZcMLbA8IAdsevpzX49bwZ + v2D+/cnqQHxv3g+vTfnguVFPPDXqiyfIKS6N++L8sAVH+wzY06XBtg4VNnUosZnYysc72sXsUCUOUf+K + 9SdFtY+z1O3nurQ41aPDUcbrfdRGm8hv5ptlGK51QFel3QAeZMyZ6mBuJ69Z08d9MjbtGDNIpu/OcWH+ + mpjLjdg2rMOmPjXW83MrW8m/mp2whpxILNuwsVeHjX16rOd2DX9vNXPyglgiqFWNWWmmrwpLmpUYI/ca + YxwXGG9TY0m7BpPUD5PkXpPM4VM8xlnJ+LUQZswNWjEz6Mk46YMh5vSBHrZtr79k4DYNhaJ2KAy1g6Go + 5uP60QjUjgmEonEkFG3C2O0jyJs6+xeN3/5gtA/Y0TEYQvCxwECQHYN2dA35o3fIhoFBD4ySJ07yWJb1 + W7G2l3yxx4aN3Tas7GD+azZgolaN4UoVOgtlaCuQo5Hxvy5fzPyVsX+KmxOEASxDTzH5aLlBMoBny3WY + LVZgodgNaypk2FTtjj2NCpzidbt/0IDLo2Y8MSYMYKNkAJ8i1znQpcK2VjlWUYNPFztgopAoIuel9poo + J8et1KC/QoNO9sOmAmE8u6GCOakolRoixYHjyQW1zO9N5e6MPUp08ri7KpnPeQyDuc6YF2bpFwxgYf5q + cYDjZG+eGtvSXbE9Q6yJKMM+cobD5NlHJKhxmDx7f5kGe7ndWmg3XlfluGIh3Qkz1C4zyXYDWJi9Urln + AWH+Epv4eEOJAeuLyb0LyOmy5JhKc8VokgOGFiEM374E9td4O4QJPMJzms5wwnJh/OaKMtM8h3Rqggwx + M9gVq/PdsTaP1zfPhXDG2nzxB74bNhaRywsjuESBPdV67K3RYUepO3aWUrNUuuF0jZhxqMRXe0ySCfyd + MU98l3iD3PN75KC/mA/EH6ilfr8iCr9ZiMJbwwF4sd2Mi7ye5+p0OEEecbjFlxohBtt6orBQF4h+8rqq + ZA3y40TJTBVimKvDIzUIizQQJoREeCzOBNYjIEwPf+YZv1ANoYZfuBJ+YcxJIXL4S5DBL8iNEOt0CrjB + hzlJLJXgTY12ex1gYQCHRukk01es/ysgzODQKA2CI1UIjdUhPJ6/H6flYx4LeXAoERGrlhAdp5FMYKkE + NHNKUqJOmgWclmyQDOAs8tG8dJNkAJczD1QxrlcxRlcXkoPkqlCZ7kat44CaKAe0EAN8LN0IwH65p1iO + k7UanGtQ495Goob6pMxuAD/V4ICvCQN4TIbvL1Hge5NKxk01XhlT46ujOjxK/n8vY+BZ8v3jPVYc6fPG + vn4frCJPmq1SYEmlHANlruhnPx+uVWKmjZqg00MqAy1u5t3crsD2Vnfspi7a2+CI/fy9A9weaHTAwSZH + tp0zjlBfHmFMPN7hijNd4mYad5xrdsG5RmfcQ5xtcMapRr7f5IIjLW44IMxffvZIrxKnxLrdEx44PaC2 + G8DcvzCAj7c6474BDS5NWqkXQ3CYmni+2AsNzL3iZuycQBfkkMdlUhekRpLLR6gQzT4SHadHpDDo2R5h + cWqEJ2gIag1yg0jywRgB9qt46oKEGDnihQkX7kKN4Eo9wBwv1vnPsyEn24qMDD3bUCUtJZPKnJuVrUFh + gY75mvy3xgOdTeTa5LsjHZ4YbbRgiLy4k3mwhWOwnejjmBNl2OeZH9cUctwWmzl+mVeKDNiYr2LbunPs + y7CrUos9HFc7q1TSTLstHF/byoTxS5TKsa1Yhq2MO1uKXLCZ2Mo4tp3Pd/Ozh6pVONmowYVWDR6k/n64 + TYnL1B1i9u9jzCmPsA0vMq/dz7xxhprkUK2cv+EslfedLnDEeKErRrj/vmIlukvUaGd8aisUMZFxOM+V + cEZrgTNGytk3KpijGLtXLBrAa7kVszWlNYAZQ+dz2J/SqeEXDeAmcjyx7m5Bmt0ATo63G+8REa6S0fnf + DGBR9vk2EpM0/9UATk6Tk9MpkE1+lZ8iJ4+XkzMqUMR2EvxRzAIWHFKYOLWLBrDgYAVimRByxnT2ofRY + N8kAFuavmP0rzN8kvpfIfpEizGoiLl6BCPYPYQD7BzsggLhtANvNX2rLBKU0C1iYwML8FbOBJRM4VoZo + vi8gHovZ58HUmcERTtyfk90EF9pTzEqPckP0XQZwSKgLAoMduXXm+3cbwKIEtB1hjHHCII4Id0B0hANS + qNELUtx4vmp0Mk/0lxkxyBzRmyNHD/PaQC61S5UeU3UeGGLu6StSoJs5tZvt1sU8JibNCc0/Usj8nO2M + 0UUDeB3z5p5yJ5yoccFJ4nCZI/YxnwoDeGOWg1QCekWio2QAL+MxiPWA16TyNb4ubmhawf0vFKsxxdw3 + nKfAkNh/kQaDBRoM8Fj7iIE8FUYZB2fLjVhR5YGNtWbs4dg62mbF+S4fPEa83uGDN1tt+HaDDq9VueGN + ene83aHGz6mrfzrljeeHrDhQK+N4Y+6OdkBqmAPieW0S2HZivdz4KKVUvtluADNO8PqJMtDCBBbbyFAV + opg/IkMY04N5vf1k1D2i8qAzAryduWW7+bM9pFLQSineiBLQUWyXCMai6FCZ3QAOd0eMMGZDGE+oHVKi + lZIBXEwtUszYImYBC2M3L1Ujzf6tELN/i70Jm7QG8O0S0LfXAE5lP4tnPxEG8P/D21vGSVbdXaPVVt3l + Xu3u7u7u7u5u090z3ePGuLsCgxMsuIUQQgwSCIQEl5CQ8BA82PjMumufnhmIPO9775f7Yf1OyakjW/7/ + tWqdvXegN+H7fzeAo4gYapVrBjDjmpgGOpttupj9pIp9QYwCbqEWECZwO9tHK7lHO8tOjBYfZP3PUpOv + KNawb6uxsdgJm0sV2E19frTVBaf6fHHrSBBO9fvjcLsX9tS7YUeNCzZVWLGlwgVbazwIL6wvd8XSPC1G + xEjjBBu0xdtQ/9lI/+91UJ+3sN/WU/dVse+Us+2XsA+IWX1zolXIYiz4VwOYGi+C4H0JCFNXMn4lg9eA + tFg90phzU2N1ElL4/TXEUDPxWLksy0KWQUkiNQ3jSplYUiBFJ6GKMUaMDq4U5q+kfVg/qSqCcSWdeosx + LZ/aS2iuIqHnuH95CvN3Eres01LGqmLmFjF6uYi5RpjAhbFK6mAHCOM3k20xm3k9P8YO5dS2dVkaNLHN + txRb0Ep91EwIE1gYwI3kBU3klR3cDlDDjZW4YLLYipkicmh+P1NgJAy4rtEPty7Nw8+FAezjq4aXtwq+ + fhpCy9ckQ15qCZ6S8avhVpi/msXX3tp/wX83gMUoYC1cXNWwWBSSCezmooKHswKeFjl8XBjIvdWI9tcg + NUzPwuWNZPmgp8APfXke6M92wUiWGeOZJhJOE5bz9Qpu17CRX5drwY5CZ5JgK8mwFQfLnEkm3XGCYvXG + Ki/cUu/LhBbMxBaMPRTMkwlOaGAArvCToYEBfDDDwmDhT4EXhevHUnHzdAqOjcZgU7svxsqtqGKCyIlj + MBdPeYWJ4eNyZMY6oShJjeo0BsZiDwxXBWCqIQJLG+NIeFKwdbQQe2cqsHOqkCIuExuHkrBxOA4bR+Kw + bjAMCxRTS1rMmGzUkCipMEsxt7RTJ62jt6qFYq6BorbGARuq7Uhk7HCChOdWEqAf19jg6QpbPEey/FIt + iVqdA37Dz35JEvWrNhl+3SfHc2MKvLhUg1c3GPHWTmf85YgH/nzYGe/u1+P9fVr8zwEjPjtoxZf7XfDd + ATdcOOiLy/t9cWmHNy5vcselta44P2/BtxM6fDHohE+6HPBphxyftMjxjwZHvEPCKMzfF9jJX0yT4Z1S + G3xEgfR5hw5f91txYdpncc3fNUHA+kBcvs4f2EJsJbb54dJWH5zb6IZv15nxz9V6fLLCCR8td8BHqxzw + ySYlTh9xw9mb/XDmrhCcv1+MAI6WpoI+d28gvrvFHd8cVOPbnXJ8dZ0tvlpnh6/Xqbk14Mv1VnyxwYqv + Nrvg9E5XaeSvWOv38n4LsN8I7NPj8m49z2/FufVu+EasUbvKC1+v8cfny/3xwaQ3/jjqjp8OuuB+JoG7 + ut1wU6szTja64ESzJw7WuWF7qQkrUinaKXiWpjM5iYXmKWq2k/QcLiB5opC6L5sihuTn8SJuSYgfLrOR + Rm4/3mSLZ3rt8MKME968ToOPj7L8b/fHmTt4Xz8Kwjd3RuDzW2Pw2v4gPL7Miuu71NjB+t9cZYf1rONV + JLTL64lGJtNWGa7rkGFnrwMOkrCfGFey3Wpwz5wWT60w4sU1Zvx5gwWfbLbgq20mfLPTiK/26vDZITU+ + PsbtKQs+u90FXz7gh69+Eoqvno3C188l4PRLKTj/x3RceDkZ534Xg/O/jMC3j4Tgf27wwqubnPHLKQMe + 6lTiBrbBg2UOOFKtxg0kjfd2GPCrMSveWeOFf+4Jxre8h+/2heDbPRH4dFMw/rrcD69NuOOFPh6j3Yjn + Bt3x+vIofLI3D6dvqMS5W6tw9rZyfHdzLs7cko7zd6Th8n0ZwCOpwGNx0lq9Z57wwPlnXXBJGMDvOOPy + P5xx6UtXXPzKGRc+t+D83424+J4WF99S49LrSlz4A/GiCqd/ocCZpzU4/aQBpx+zEl44/bi/NPL3DLeX + xUjfn4fiws+Ccf5ni+YvXogG/pAA/CkFeCUZeDEOYFng6RBcetgX5+9xx5nbLfjmpF5aC/jrA068Xyec + 2avCOeLsAQ3OHtHh3EkTLt5sxsU7rbh8rysuPeQB/CRw0Ux+jHgoFJfuCsSlWwPwzVFvfLTLGe9tNuH1 + 9Ua8znb8+g5PvLLdHb/b6oyfrdXhoXkNEybFP+PFdRRxYzlOaEpUoSLBSoIcgPyMSGRnxiI9OwHpOUlI + yU1Ccn4SEoURLEzfawawGAW8aALHCxNYmgI6/QquGMD/PtXzFfyHAfxf9vkhkgozJCQW/WB0Lz+/ZgDz + c+m7K0bvfxjAYl8invsICBNYGMDCxE7Ki0VaTiQys0OQnR2A7HRvxEdQuPnKEeRhjxBPkhs/MZ2KBtFB + +kVQ6EeFLCIiUEcipIKPuwM8rDbSFNCeLiTCHjKUBskwm2OH2xkD3zjgia9/HIRLv2Rce41x7F1h/voC + b3H7R3e2M8aU54w4+zMDvn1Ah69uM+PzQ+74YKMP/jAVgPuqXLAjQYtxErkKTyZxIpXnSPS2QSQJYaiH + Lfy9HODjJYe3t6M0/XOQnwqRvPbkQA0KIsxoSPRAX5YvlpWGY6EgECsyPbEmzRkrSGrWUYDsYI46QCJ0 + KlOLh8vd8eu2YLw8EImXegLx61ZXPFmnxkPMF78Yd8YfN4fgL+xnHz9ehi9/04Sv/9CO82/24vzb/Tjz + 1gC+fq0XX/6+C58914H3H6vGb69Pwf3rvHF4gEKN8Wh5oT2W5NhggvFvNNsWwxR5Q3kKDOarMEDxN1ik + JpQEiXSxWCPXgYJBmMAqLG8zYGWHSYJ4vUCxOU8stBokA3ihWYN5Csz5RiXm6+VYWW+HtRT6m1sdsbtL + iRNjZpziPdw0wfg87sWtN44znhxot2JjFfMoReh4lhMGKSK7M9RoJeGqYR8ppQjLpwgrJomrTjZJ62xI + BnCiFnUkjzXRtqgnqRIG8ESFK2ZqPbDQ4o013QFY2xeIVd0+WNrujlkS1+kmC0brdBiiCB6pdMRopQNG + K+wxybg4V2mLVdW22MS8vVfkbcbxhwcM+PmYBS9OuuL1STe8NeWG1+e88PIybzy30hdPrvDBPfPuODpt + wNYJNdaNM/8PKTDfK8dspwPmOp0w363BygEjNgnzd8oD17EMNoyYyCconAeVWDsg52t7rB/guUfk2DGp + xt5ZIw4wlxycs+LIMjccX+Urjf49tsIXh5cLBODwCvKiOV9s5nWt6tViaZsCyzqUWNGrw6p+8hGec3mf + AUu7tZjr1mFpjzB+9ZhuuTKdZKMO081i/UBPrGRZLbT5YarGE6Mk7aOlrhhgeXZnG9BEslpJAltE3lVG + YVpL8dQUY0V7vAeaoz1QH+aCqkCTZAKX+KilqZ8LPZSS+VvmZ0R5gJmwotjPijxfK9K9TYgnxwwnp/S3 + OsHbZA8fsyN8yS19TexDGhv4CwOYn8c4OyLBzRGpnhQFgVoURhhRImJmOsVSrgsKKZ5ysyzIJL9MJ6fM + ICfMzLAiI33R9BHrKwnDd9EApsgOd7xmAkdRaESEU4QHifXBZAgRQjrCFlFRFIzRwvS1QwzbVky0DeJi + 2e8T7ZCV4bg4Api8QTKA8xcN4JJCkvpSW9SyrzQ3atHarENbk04ygTtb9ejtNGKEOXTJuDuWLfHCiqVe + WLmU5b6UbXUJRdKkMybYJsaH2YaHnTE57IGpEW/J1J0a9peMX4HJoQCM9HpJmBz0w5KxIMyOiRHAIZgZ + DcT4oDeGe9zQ125BB+u3sUqF6lJHVBTJUV7CeizVcCtG4xpRTDGRl2NiWelZVhokUwwJJCRoCC0SE9VI + TFIiPsERMbE2iGUZJCXZIieHQq1Ei/oGV7S2eKGr0x9dXb5obnJDY4PzIhqd0VBvRW2NGRXlemna6Lwc + 1SLIs3IznJCRbIdMis2CXF5bkQJ1lWq0kJN0NhvQ32HEcLeZ92LAaJ9YD5g5s0+F8X4VlgzrMDOiw3Cn + HN2NNuhttsUYuc1ktwEjTQb0VbLs89SojHVACYVxkb8jChiPc32VyGLOyKS4zwxWIydCRy1gQXWeF+oL + /VCb74m6HHc053qgO5/lWODL+OiOXoo8MW1xH0X7KIXiXI4z1pX5YntVGLllNLlUFI6UhuFIQQCO5wXg + +rxA3JhLcZwXjBvyQ3CqIBwnCyOxvzgceyoTsKcxC0eHa/HIrpX46Y278MTN+/DgTftw3837cdvR7bjt + 2Hbce/MB3H58B47sWo0dG5dgx4ZpbF0zhpVz3ejrLGB7C2PO9GF79EJhfiCqq2NZ5smoq49DeVUECkv8 + kVvoiwJuS6pCUVodjqLyUOQWBSOb15eVE8TcG4z09CAkJfojJsobocHuCA50RWigO0KDFk1gYQAHCgPY + wwRvNwPcJQPY8XsDWO8AVzO1pYsWYf4uSAzzQma0H3KiPJET7iwZwAVB7C8B9igNtJWmj29kPG9N1qOZ + AryB2+okLQU0+1O8AoXxYgSHEwoSFZJxKkbOlmaZUJnnjJpCd1QS+RlminqVNHVjfLgcscwNsZHijztH + xMeqeT8U/Cls1xkuElJTLUhOMvFzYf6a2Lb10uvkZGdurYiJMyBS/GEcoUaw+KMt1An+gQ4I8LNHqHiq + P0gh/ZGTECxHcpAD0kMdkRNmj6JQ9vlw3lOkPerZ1lp4zZ2Zeoh1jWsSlSiNl6OYeb2Q9ybupZT9rDLH + gvpi9pNSL9SWekrr/JbkMzbmW1CYa0ZxnhgF7IKKEjdUlrizX7iiKNcZeYxtWSkaZFK7CmTwmFnc5vK4 + BTxfkRhxnGmQ1qkqyzVK60vW5JN7FDmjlZxCmMANjOdVWewXmcyrOTo08PsWnksYwN2V3uis9EQrz1vP + z6tzeK1ZYiSxMJN1vG4dqvINqC62oJY6vYF5tr7KHbXclheL69YjP0eNgjwVt2LdcNHfeX3UVQUF7P9F + JlQVm1BfakR7uQkDFUZMlOokA3hHowXX93ji1l433NPvjMeGXfD0uCt+OemC5ybNeH5EiRf6HfBynz1e + HVbgrUk93pxxwavLPPEH6pPfzHjjyRFXPDTkhvuGPHHXsBduIa842mPC7nYtNjczxzaJaZgdsbrRUXq9 + oVGBrc0K7G4l92LOFCNGT3TpcKLTgMPURHuJrYLviDxJvd5LftAhUMV408B4Q04zI4zdbiXW9GmxcUCH + 6wb12DRkknDdoAkbGLfW9mixSuTkFkcsJxda3uwoTSm9qkOLNV0GrBKjfzv0zL06zDIvLyGfWsLcMdmi + w1iTFiPMH4MN5GXEEL8fadVhlNc2ynwy3m3CRI8Zk70WwroIyXx1Zsx0RX+XFb09rujq9UBrny8aBv1R + PRiAyn5/lPX7oWo0CBXjQSgfY/wYCUTDQCCa+wKuQLwmuG/TwCJamG9aBn0lNPf7EN5o6vfi1gutAx7o + 6Leiu49122tmvLZgtt+VXMQVa3gNq7tceK8umG/htdYwdlcwzhcoGadVaGQ+rc5UoCzVUUJ5igNqmR96 + mKOGqdtHi/UYL1Bjgnp9tlAYwOTNFY7YUiXHoSY1TrEc7x6w4v4hK37UR47JejzG8t3VqsLGBjnmK2UY + z5dhJI/It8dIoROPqeaxdegr06OjWIemAi1qc1Uoz3RCYZodcpnnijJsUJ5LvlNMrVapQXu1Hu1lGnQV + OKI/2x7TuQqsYvvekq/H7nwT9hYsjgDemaPFNvaz9Sl22JBmj03Zcu6jwM4iFXbxvLuKNdhdosd2nn8r + c7GY/llMy7yU551OssFUooAtlmeLz9mGeMxr4LnW8Dyr8th3eO75LCVm0+WYYJkNJ8gwcAXSCOArRrBA + L9+P8HqmhOmbYYsZbqdSZJgUpnCSTDKB5zLssMDv5jNtsEB9sJz6YGWOvWQCr8lnvylUYEupFltYBptL + FLx+BfaRtx+qUuJkjQo/ogZ4uMeKnw6549kxT/x6zAO/X+KDt1aE44N18fjrmji8tRCD59jWHmx1xtFy + BfaUq7C90ogttW7Y0haE1U2BmCj3QidzbGWiAQXiD10xbWcU+WIk9WGkBaERzozTVgSFmeFPLehLeIVo + JHiHauFHfuoXrpPW8/ULIsdk/PYLcCKo0a7Ay08OsTawh7ccbtRuHt7knoEqhIQzF8SaEZvgjKhYC8Ki + DAgI5TGCVQgUyyqI5RV4LUERYvQvEc6cwa1kAItrlMDXkRryRx15ox7JCWZyx8X16HPSLMjPtKIox4xS + cq+yPBOqRVxm3VamK3nPclTH2KIxWobuGLZb1s/ydOoCcqRDVVrc2KDH7c1G/Iix4Uc1ctxFzfJwoy2e + EVNAj6moUzR4cVqH3y4x4lczzvjJhAV3UQvc0K7B8U4TDnZasIf9cDM117Jq9qlyJwyzHnpLHNHD+uwX + n1ETzLRasbxdTH9PjdKixAbquU21NtjCvrS9WoYdVTLsrJFhV60Mu+ttyGlssY887FCrPY53OOJkmxzX + 19uyXchwPXG8xgZH68SawcIkdsKhDicc7FLgSJ+aGlCH6xk7T/SocaTNEfvqZdjHc4j1hW8gr7uFnPjW + cR/s7/LHshJnag4H5PvIkOfvgJwABTICmfODNYgJUSIiTMV2wvqIViMkVoPgeNYZuWwItWIot1HJRsQk + GVm31AUxYo1VFaIiqAOY08PFiDl+npZmRVa2O3WEK3mEgTxYSw4suLAGqeIhrExyGvY/MQ10S50rups9 + MNjiyVjtjsFKCzoZR5rYj1vY5zrYt/qTqbfTHTHPvryKnHttkYX92ITV7N8LaWJQCrUf9cSmUjU2MT4I + 43dTyeL7zcVienYF1rP+1+XYEbbYyJi0Kc9BwvZCR6kPHarR4IYGLW6l9riLOvw+5q372EbuY74Qay/f + zdxwW7cFx5lbdjF2rslnDMiSYSzbRlrztZfH78xToC2f156rZkxWSeZvdaYdqjJkaGQsGClRYxn76qpa + C9bUmLCiVBhESqwmVjKWL2PsnOF9jqUqMJCmRkcG9UeGARVEYZoeGdQVyeRtYm1docckAzjsexNYGMDh + rA8x7bMY+SsQL5bqIU+8NgV0ipqvVUgi0lPJ4cmJhClTmKxGMTWM4FpXDeC8BDl5l1iaQ0PuJUb/KpEd + p5BG/iZHLK4pmhwtlwy2RCJO4pByxPA64shR44QBHKvkdTkiINiWMUPG2HHFAKZuDI2mruS1RvA6BYQZ + LKaF9icv9JOMXntp2nEB8dqPOlMyka+MJA4I4j5X1qUODBZGrygPsd6wwzUDOICcWbwX05iLKaADiSC2 + +eBABfdXSb8JE9OXh9vwHuyQkySWUdCjpcCKznwj2jJVaE2Vo4MQawGPleoxVWXFiOBgzEG9zEFdhVp0 + FOjQTY7WTwwWimW45BhNk2GWdb+ugH2+WIbD5bY4Vu2Ao5WOi1NAF9pjW74cWwsUzHEKzFMnL1AjrmTM + WmDbn2H+meLrqXQHTGQ7Ykgs6UD93M19e9i+upm/urOYV3mNnURfrlh+zIi5MjNWsx9tqbViH7XkyTYP + /LjTG79q98RLLW74XYMRz9Ur8dsmBV4mt3qN3OuVUQseov7bXmov5b6iUBkSWMaRLO8IfxtplG5EiBOi + hAn8fzKAGUfEVqz7K0b/+no4EPbX4O9lhyA/ljnzSQTzSrgAfx9xZX1gYQBHhyokY1iM/o3lVhjAqXE6 + 5KZQb4sckGxAFmOKGOFbkM4ckEO+n0+un+eK0mwLeYcJhelGyRzOSdYtjpwX/1sE2UlTTQf72yKE9xMe + JOc9yBcNZyKcrwWEASyNAuZvYoUBHKtiv9MgPZ79hX1Q9JVy9qX6DD2a0jVoZl9qTpajId4GzSy7NtZZ + X4otlhZrsbrMgA3k6JvEFPTMD3uYH461WHFTjzfuHA0lzw5mvPfD3no3bC4j7y0xY2ulG3bUemE7saGC + nC+f9UqO0k1O0xFvixaBhEW91Eh9VBPHvMf+JgZ6FEarkBdJnS6Zv2IEsAoZ/ExM057CuJEs7ieM/ZWx + IyNGj8w447URv8nMu8nRGmm6b2nKb+aABG5jebxY9hMxbXQ6tWJ2tAL57NclSWKWJi3KWMYC5dT25Ywn + omxKREwh8lKUEnIFGEtyk8TMS9Q5It7wt8WsR2EoF/B4BbzOfHH9vNY8botiVCgk8hg/ssJskRVqg5wI + 8spYOSqo2+rYT5uYB5oKLWgtdkFLqav0wG4j9Vc9v6vP1KIlS4cevh/iPqOFJkyyT09Rh02SL0yyv6yv + 88FNM9l4ek8HZL5+Ovj4kvz46yUIE9hbmMDE4qhf7RXzV2z/E/9q/mqkrZubGq6uGri4qGG1iGmgFdK6 + wO5Wp2sGcJCbHGHu9hTGQsi7MPD4k1wHYrjAC6P5rpjKtWCKwniOyXMhjcSVyWA9heqWPCtJsQsJsYs0 + /fMBCsujla4khs44xoZzQ60nbmkJwk0twThS7481OQb0sRA7Am0wlqhh4vHBttpQHOqMwY3DCbh5IgGH + +8OwockTYyUWVDMY5kQ7IilUjrhgeyQxEGfxfRGThJgDvKvEE8M1gZhqjMDSllis6EzG1vEC7J2rxM4l + xVg/kIqFzkgiHKv6IjHX5oexOiv6K1QkSww0ZQ4YqnHCJBPvdL0OM5VqzJTKMVdig1UMmNsoGA9X2+NU + rQPurrLFE2X2eJaE67fVSjxX44hfVNviZyRQTzfK8FSzDZ7qtMWzw3b47ZwjXlmjxns7LHh/lwnv7tTi + L8RHe4z4bK8ZX+6x4ru9LriwxxOXd3njojB/11hxcbkF5+ZM+HZci88HHPFxpz0+arHFhyRofyFRfI0C + 6EWS/heSZXiZgf3dUhv8T50Cn7Xr8XW/Cy7OBuDyQiAur+J2rT8ubfTF5W0BwC5iDz/f7YcL2zxxerMz + /rnOiI9XK/DhGif8zyYVPt5lwDfHPXHm1gCcuycM5++PwsWHYnDhwSicvTcI393igW8PavDdTkd8tckO + X2+U45v1anyzwYB/brTgi+ss+GqLM07v4n1JBrAzLu8z4/JeA8+tA3bqcWmTM86tdcPXKzzwz+Xe+GK5 + Pz5e6o/3xrzxYr87Hutzxl0UmrcK87eeZKfOBSeavHCQ4mJbkRELyfaYIzGbYxksS7eRSNVuEq7jZTrc + XqLFoxSCz1QY8fNqA56pUeMnNfZ4mET3AZLRR1tYT/22eH7WHu9sM+HT4974/KQXPjnpiX8c98WHR4Px + x50+eGzWiBuZlPbW2mNnnQO2kPSuZx2vrpNhfYMMm9pk2NNrg+NjTuy4Ktwxr8KP12jxkw1aPLdVjze3 + G/DxbiO+Ynme3qXHd8TXezT4bJ8T/nFIiU9PGvDZrVZ8eb8vvnoyBF/9PBJf/yYWp19MwPlXUnHh99w+ + F4nzPw/H6UdD8Y8bffDaZlc8O2XEfe1KHGeb3Mt2u59t8HidBne26fEMk+ebqz3x5b5QfHs4HN8disI3 + +2Pw0XXBeHuZD14ccsYz3O/pNooKCv3Xlkfj4335OH1jJS7cXouLd5Tj2xsy8NXJBHx3UwIu3ZsJPJaD + y4+m4tv7g/FPsS7vT11w/kULLr9rxeWPXXDpGzdc+s4V57+04vxHxF9MOPeeFhfe0eD8qyqcf0mFM79W + 4uwzapx5injMgO8edZfW9z39mC/hg0tPB+HSM8G48PMgnH82BBefjwRejgNeSwLeTAPeIF5NBl7iZ8+z + PT4VgDPiWu5yxrc3GfHNUba/g044vd8J5/YqcX6fCuf2q3D2sBZnjupw4ZQJF2+14NLdzrh4vzvwJPuB + MIAfDwYeDsPFu4L4fRC+PuaDv+2wSubvb1mfv16hxe82uOG5Td742Tp3PLjUhNvZJw+yXWypVWJ5iRMG + SJSbKSpqGS+rUgJIUKOQlx5HcZGEzKwkpOYQeUlIyifElNCFCdLI2e9N4MVpoK+avv9v8O8G8H/b54e4 + agQLE/faa35+zeC9YgTHF/I9EcfPfojv98uUIAzg+CKem9eelBeH1NwoZGSHIiPDH2lJHtcM4GASrVBP + EhlfkqlACoEg/SKCDRR5i4gK1CGU3/u7OcDLKoObicTcjaSPJL0pTobrxJTJ03q8e8gb39wXiEs/82M7 + 8GXb8AJe9wH+6IVLL7jiu2eM+OcTWnzxYxU+u80JHx9V4sOtOvx5wQW/63HD/cVW7I/VYT5QiVYvG5R4 + ypDvLkOmly3iPWwRSYR62SNQWpdYPJlJMhhAwRisQ3qIHsWRVtTHu6M7zQczBSGYSnHDBAXqUpKSlRQg + W2IdcSRVg5uY8O8ttjAfeOLlzhC8PRSJ94bD8Xq/L56naH+mS4OXF7zx18MJ+OKhYnz3fCNOv9GNM+/1 + 4+LfRnDugxF88/dRfPO3cZx5f4L9aApf/74f7zxQhmfZl++cc8UeCvmNFH/Li+wxk2+P8Rwh/mwxRCE5 + kM82SREqzN+BQr4ulPO1HEMlYnpkB4yT9E9VKbCkWoWZOrU0NfQMMdegxnyTDstbDFig6JwX7xspBhn7 + 5mttsarBDtc1y7GtlbG2S4mD3RocH7bi5KgLTg67Lq7P10aSyXgkpvebylNinGJklEK5m/m+jqKujOQq + n8KqINJJmhauOkkYBwaKbB3LlgQy2h61MczH3H+EeX+80gVL6t0x3+aF1d1+WNnrK5mcSztdMdvmjKlm + MyaYsydqlJhk/p6qdGDuFtP1U2DX2LKP2mN/vT3u6FLhsQEjfj1mxcuTbnhjYtEAfmPOC39c8MHv1wbg + mTW+eID56CTb2vYxJdaPKrBqSIGFPkfMdZML8J6XdWuxop/keMoTm6c8uI8Va4bIgwbYBgadsGLAAasG + 7LBmwBYbRlhWkxrsnjFi31JnHFzmgsPLPHBkpTeOrfTDkeU+2LfMm/DFgRVB2DcfgG2zXtg4IWYkMUrm + 78p+vYTl/QbM9+qxtGfR/F3Wa8ZsB4ljI+u5gnVe5oTxWhOWtvmwnMKwqiMcs/WBmKz0wUSZF9uEMzrF + FK0xcpRRTBX5yFAeKEdduA7NMc5XDGB31IW5oCbEgspAI0p9dSjyJPF1V6LYS4cKfxOqgl1RHeLGY7gg + z8+KdC8T4sgtw5xV8LM4wkNvA3c9BbbBHl7cCgM4UG+HcCvFuJuTZACneCqQHUgRzxhRnGhFcZoLCjOt + yCWyM8zIJNIonDL4Xjy5n5Fu/Q8D+CrEVNCBARTdhDB/A3lvAqEUjVFR9hT+csQnyJEQ54CYGDvExtjw + ODKkUMBkpNkjl0K2MF+JojwnQo4i9qXifFuUFNmikn2lvlaFpkYt2poMaOW2o1mP7nYjhnqcMT60uMbv + 8qVeWLvcl/DG8tlFA3h82IjRAQNhwtiAK+EujeSaGPQl/DAxFICxXm8Mdnqgv90Nwz1eGOfn08OBkjk8 + MxrEfXwx2ueJ/g7WXRPFRbUGNWVKVBQpUMJ+XVJAkcVrz89jWVJE5GYbpdHTGRk6pKUaWGY6xDEvxVEo + xieouKWYjaV4jpSxLGRIJH/KyiKHLtKgnqKvtdUHXV2B6Oz0R0O9C6qrzYQFNTUEtxUVJpSU6HguFbIz + KeoyFpHF/JeWLMrTlt85oKzYEXWMAS2NGnSRa/R3ivIyYah30QAe7dOyPDQsBw1mhvWYHaWo7GacamW/ + b7LDcLMTRhlHhhuN6Ks0oC2fIi7SHtmM2Xne9ij0oxBjXM7xJ4I0yAkRbUmH0iQr6nK9KML8KMa4zfFA + R54X414ApkrYF/K9MZrpjJE0E6ayLFhGPbOy0AObyv2wqyoYB2tCcbQqFMfKgnE03w/Hc31xfa4fbsjx + w415/rgxPwCnGPdPEoeKw7C/Mg4HGjJwpK8cNy/rwY2rR3Fi3SQOb5jGPmL3umnsWreEmMbWlaNYO9eL + hck2zI01YaKvAt3NOaitiGE9hqAwLwilhUEoLw1DXW0cmpqT0NgUj7LKMOQX+yK30FvaFlUGo6QqDIVl + IcguCEBiqgfimG9T0vyRnBKI+Hh/RIR7ISTIHcEBbggRuDIK+KoB7OtuhJebHm5WNcxGR+g1dhJMBjnc + zCp4u2gR4mNhnnalyPakFnRGepABOcEaFBDFwU4oDXZAVSj7B0VxQyIFbjJji2QAM04kaVDC9lbE9lYg + gfFDiOwU1mOGESWZZhSk8XgU6ZmM/+Kp9hjquahQe0IuIZJ9W0zpLqZ4zsh0JdyRLv7ETbWy3ZqRmGhC + AhGfIP7UNSEp2ZnvLdKILfEHvpjOMzBcgYAQR/gHLf7ZFubvRK7hhJhAR8Tzs5QgB2SGOqKA5y7juevC + 7dHGdtYb54gBXnd/ihrtiQrUMoaUMX6UxDtJ91KUpEKJmFos24S6QlfUF3uhpthTWnO6iPo4P8cs9cX8 + HBNjiTP7gyvKitxQWuCC/GwLcsQfqImLxq/YpvOYkglM5Io/QVPVKGAfLhYjgfOMqMxn/8s381zOaC5j + Py1zR30BNXGOHlVZWtTkGtDI9608T2eFJ3qqfNBR6YmWUjfUXTGAFyHWLeZvGCuqC4xooEZvEusJ13mh + pd4LjTXuqK5wRUWpZXHUL3N3Xq4G2dkq9nMnclkFctkXi6i/KoqNqC1ZNIAHK02YptZaXq7D5hoDjra7 + 4FSnlTnXhAf7jXhy2IRnx82SAfzCmBq/Z578Q78crw4p8eaEAW8wZv5hzoNa2QtPMy/f12vE3X38PePm + rf1uuKHPBfuZ67Y0K7CunpyH+VxwkoV6OZbXOWJVvQM2Njpie6sS+zrV0pTPx7sNON5lxMF2A3ZR62xs + Ys6sV2OsRoFe5svOKjk6qu3Q1yDHaAu5EPn8PPP7ql6NZAKv69dhPfmCgFiaYT1z71rm3pUdKsn0XdHi + RJ4kwNftaqzhuVYTy3mdy1q0mG3WXTGA9Zhq0WOc21F+NshrGCCvGuQ+w63iwRfGOWKs24hxxsjxHjNB + 3sPtqDBf+dkIy2KAn/X1O6OLZdI+yLoa9kXNkB8qB7xRyrxSORaAiklqj4kAVI4HoI75pXHgezQNBqJp + yP8aWod9CC8JLUOeaB50QxOP3TzkipZBF3QMkLPxvvv7eA3EDD+fH3Ah93EhB3PF6l4PcjIrpup4XxU6 + 9BSq0Mm20ZLDHJWuQGmKI0qS2W+o02uYH7qLDBhkexnIU2MoW44x5tq5YiesKlNhPbnoJnL8/fVKnOow + SHX/4wEr7uwR+luHI61XDGDW8XyVDcYLZRjJlWE4j7kiX46RIh6Tmr+vzIBOnqOt2IRmnq+GebE8h3k9 + 3QGFaTZ8LUd9iRot1XrWvQHtZTp0kSv3ZztgkvuJEbgbC/TYWSjWADZid74B23K12MT2v1qs45tuh7XC + vClUYHO5+hq2luuxuUIvTZ+6pliDhTwFZtLsMJVsQ9hiKslWmtp5IUONldlarGQZCaxiWazK5/451JHs + W8sy5PydPSZTyeeZm0f5+1H+fpjbYR5jKNFGmvp5WIwsZt5ekiXHVIYt95dhLEmGCX43KUZ6pYjpoWWY + S5fxvESmDZZlyrAim7xUjALm9a+jNtjIsthEbClVY2elFntr9NhTqcbeCiWO1Wtxa6sR9/Q64xHW/c/H + vPDbGX/8aSEM76yJw/vrk/Daijj8bDQQt7ZYpRHEawodsLJYjeWVFqyg9pmtJr8pckUrc21VEmMh47QY + 3ZMQIx7SMSM82hlhkS4ICbcsGsCheviE6OAZqpbgHa6Ff5QBQdEmBITp4M/cExCsRFCQQoJ/kDB6HeHj + 5whvX3JP6jZ3ak0vb8Z9MforwojoWAviE125tfJciwawX5BS2gZH6hEUqUNghFYaGSymhg4SxjA1XUSU + nvvreG1KhISKkY5aaXkBsexAGu8lO9XMOE7OmmFBQaYRhVl6lGQbUMU4XFdoQT1jclO2Di3kR23sA2L9 + 2LEUMTrbThr5eahGi5ubTbin0wWP9LnhsS4DHm1V4KkuR/x6SJi/erw4Q8wZ8cK8M15Y6YunlrjhR9QC + Yj3do4wZ+zvN2N5hxhrqn9kqJcYqnDBUoUAPtUAPeWJ/jQbjTRZMt1ox326WZnVa1cK2zLi5vkaGjZUy + bK6SYRuxne931Mqws06GXQ0yyQAW00Cf7HJiH3TCKfKyG+psJFxPnGi0w4k2R1zfrcKNAzqc7NfghDCA + e1U41qWQPj/ZrpDWFz7IYx5rspemk75l0IBbR91xoNMNK0R/jbenDhEPestRyHrJCnBCUsDiQ1rC+BDT + 6kojMqkbQ+JVCGa+DE6k3kjUIZ66IIF1EB2nY/2KGYA0iIoQ+kBBXeBE/iAehGR9pTqTC5M3iGl8ryBB + erCMuj6dHDJLg3LGi6ZqF3Q1emKw2RsjTd4YqnZGT4EWrRkOaGX9tbOP9bB/DabYYzpbiQXGiNVFVqwu + MLNvaTCX6ojZFDtpWvY11N8bCjXYJB6yEPGhjHGEfUNMwS6mZF+ZYYPV7Jcbcx1wHbEpxwHbChyxi/W2 + n31Q/J93M/PE3U1a3M888gA1+QOsw4cH3PDQqJhhwxVHmE82lzAX8jhT7N+jWbYYyLRHN+OrmBZ40QAm + P2N8uWoA1/C8rbn2mCjRYHWdC7Z3+lLPu2NliQorCplb86n1ue+ydBGLHDCRqsBQOnk8+UhTFnM+27qY + /URMd5sqtEW0UnoIV1rrlghm2QuERor1cdWIuWL8LpY5uZ4YhU3Ep2oRS66TQK6TLKbjTtVIU+WKZTDE + 9M4l5IpicJdkAJN/SSYwtznc5orPyM+yYxcNYGH+SohyQCLfi5G/sZHkj0RMJPke208c208U9w8Rpi51 + oqefDF7+MvgGUy9GOCCMHFQYv5HxWkInTQUtDGBh/noHcd8AG/gG2UrwDrSBD3/rzWOIrYCv+J4QRq8f + vxdmr4AY9Svgf+V9QKAdAgL43t+BWwcEh6gQFsZzi5gjyiyKHJUcNDHWETnkzOIhwxbyxmaWfXWCvbR8 + U3vKFQO4xEDeJdYVZY6uMEtL5XSXMLexLXcXL645OkSeJmaGm86xxQrmzM3FNthZIsORClucYr69lbzo + RLUKBytUOFChxQGxLECZEWuS7LCOOW99uj2Ws+0viWeOoW4eFssSMJf2ZtijQ4IjOpi7OoQ5naZAgzAf + iTbyxd4ctfT/z9JiHdaW6aWHg442OUtTQP+6wxMvt7njpVYTXm7X4+VOFV7pUeC1ASVeGtHjwW4ttrJt + d/OceSz/+AAZwvxsEOwlRs4K45Q6lrlAmL8CkSHqawawZAIHiveL5m+IP+O9l6M0AnjRBF6EmApaTAkd + 5GsvrRsspo8Wx7hq/grEhAoTmPqE8SiWeSCR8SUlRosM6o7MJAOyqHkyrxjA+WIEcLYzxNJDZbkuKMmy + ophapzjDjEJC9JmMBC3bKY9NjRPOtnB1pG9EsJi5wPGa4SteX4V4HxXmyLaslKYzF8sPZPFYuURhql5a + D1tMz96Qrkcj20xtDPt6lAz10TI0s/x6yB3minSSASw4isRZmCP2VjPOtFhwS4837h6PxG2D4dL6/Tsr + rVhBfrE6l/ygzMr84M484YY1JSYsJWcZY1zoSbRdnAaaaGIMr6c2qmWfFDP5VsSqURQrjFQ1coXxG6lA + ZpQaWYwHmdR06dEqpPLzlHAVEnhvCYwb6dE6adpnMc1zquAI1G/xzL1xAixzAWHGhwXbI4x9LDaEfT2c + Gi7CCVlRChSxDoSJK0xggVIJanJQEUdUyE9aNH3FUjtXzV8x20CuiDHUqwUJjD9xSl6rAzIi7JHDuJFL + SFvWVz7LXjKFGVuyw+wIW35vJ60LXEGdWE+9JzRYU4EVreQ8zSXUhYIL5BgZc6nR0hiHMzRoJy/oy6dm + yjeSvxowSi02mqNl7CYfrPbCyalMPLGz7d8NYAOhg7ePhkTnhwbw/44fGsDC+BUmsKurCq4uGrg4q6W1 + noQJLBnAzk7wcWZgdJUj2NUe4a62yA7lRSe7obfAHyPF/hjN98R4nguWUNzOMBnM8YaWM2ivSTcweVmw + vcBZMn93FTtjd4kz9lFcHmJwOlRuwYEyE45WueJUsz9uagvCDW3B2FHuhrkEJ0xFy7GKnWNriQ8bZDCO + tkVQ8EXh5EAE9rT5YEWFBUMspJokBfJY+KnsEInBDkhj0sllhZUyUYikJAzgweoATDaEYaYlCss64nHd + SC52LSnDtskCrOxOwJLGIAqyYMx3hGGs1gO9pXq05zuiOccGLbl26CySY6BMg2EKg5FCEqo8CgMGTTG9 + xnWFttjDgHS80gG3ldvhwWI5flLihF8wcP6C5OuZKgc8VS3DkyRRj5HwPN4kw9M9Mvxmwg4vzyvxzgYD + 3t9swJ+36vDBdh0+3mXCF7vN+Ocu66JRutMdl7Z64OI6vl5hxnkSvzNTBnw9osbnfY74uN0eHzbK8AHP + 8Q4D+J+yZHiRxF+MAn4jX4b3y+zwYa0Sn7Wb8E+S9jOT3jg744vz8z64sMoXFzeK0cUBwN4g4EAwcDAQ + l/f64txuT3y11YJPNmnxD17bP4QxfcQF397sh/N3heKSZP7G4uLDxIPROHdvCL672R3fHtThu51O+GqT + A77e6HTNAP5yI+/rOhO+2mLmfTlLBvClA5ZFA3i3EdilB7YbcHEDr3G1G75acMdn8174eKkP/jrti9cG + mRy6XPBgpwW3UWCearTgGMXaUZKxk01eOFzrTqJkwEKiPduPDeZIyuZJyjZm2eNAqQanqvS4p1KPp5nI + nuNvn6c4eZ5l8ksKyJ802uNh1s9DJLiPtsvw0yEZybUCb28x4s+7jHhPYKcV7+7ywkvXuePRSS1OtTuS + wIqpbkjO+PvN9TJsYP1u5TH2dMpwYsQOt86qcPcKDR5Yq8ETW7X41U4t/nhAi78e0uPrI6zHAzqc26PD + mV1afL1Hjc/2OuHjAwp8dlKPz2+z4p8P+OLrn4Ti62ej8O1zsTjzUiLOv5yEC7+Pw4XnwnH+Z2E491gE + Pr05EG9u98IvZphEO0i0q+yxp8IR+2qUOErCeLswdkdNeG21Bz7bF4ZvDkfi68PR+GJ/DN5fF4RXlnjg + 2W4jHmHif7zFiGf7PfGnFTH4x74CfCsM4DvqcOnOMnx9MoVtIAZf3RCHcz/KxKUH83DhwQz88+4wfP5j + b3z7lDvOvuiMi+9acekTF1z+zh0Xz7jj/NeuOP8Jt39zwdm/GnDuzzqcfUON869ocP55Dc79QoVzTytx + 5nEdTj/qitOP+HLrhTPEpacCcfHpIJx/JgDnnw3CxecjgD/EAa8nAW+lAe9kAG+nA2+kAq/E49Kvw3Dm + CW+c+bErvrvdjO+uZ3s8rLpiADtJBvD5/WqcFQ8qHNbgwo1iFLAJl35kwcX73AAx6lhMAf14yBUDOBgX + bwvB1yf88cFON7yyxoCfTcvxxBIn/HS5BT9b44NHl3vhriUuuGHIhB1NSqwpc6QQsENvsgPaknRoTnFH + XUoAKtMiUJQai/z0RGRnJCE9S4wETrwyHfSi+Zv0QwNYmgo6mfi/G7lX8X8zgP9P3yeKtYWvjDL+DwP4 + yvvY/0CqhISCTAmLU0GnIk6Y2lcM4HRhAKf7ISXB/XsD2H3RAI7wJonxJ5EKJGEjhAkcE7yI6AAdwn2U + CHR1gI9FBk+TDMGeMmSQ+HWnUJQ2KvDkvBV/OeKHb+71x8UnvYHfeAIvsh5/74nLv2N7fNYZXz6qx6f3 + qvHRLU74nxO2+NtuO/xltSPemTLi+WYzHmQyPkwhv9pXgUFvezR72aHK3QZFHrZIc7dFHLdRXiQYXiSD + 3CeM5FFcX3IoCVeoAUURFlRFOZP0uGEgyQN9YVr0+9liSTCJcowT9pFo3JRjwD3FFjxe7YrfUEi+0ReK + D0Yj8dFEJD4YC8Lro554adIF720OwRe3ZeLsz6px8U8dOP/BIM5/NILLn02yD03gm8+m8O3ns7jw8VLg + fxZw6Z0l+PjnLfjjLVl4gr+9ftCMPS1abKxRYHm5HFMFthhinhrKt8NgIfNYgTB+HSXzd6DQHkPMbYNF + DhgqdcAwMVrigLFSR+mp8bEyOSYYR5bUKrD0igm8QHxvAMsxV2OLhVreZ6Mcm5odsbXVAbsp6A8PGHF8 + yIxjg8zzveLPVi2uq6eYLFdhKUn/HDnATLU7hktc0ESCWhGvRGEUxVy4PUpiFBQ1Osk8aKYYb0xUoSZW + jlqiPV0tTVksBMwohc10vRULbZ6SAbzQ7Y35bvdFE7jdijmKiLlGchKed67aAUur7Eim7HBdnQN21Iup + yuT4Ea/1SV7rc6POeEWM/p1ww9tXDODXVvjh5bWB+OUaXzw074brJzTYPizH+iE5Vg+yfPucsKxXgdlu + NeYoTBb6LVg/6YmNEx5YM2zBigENlg9wv0FHLAw48DXPP2SP9SOO2DKlw64ZiqqlLti3zAX7l7nhwIIH + Di33wYF5T+ya9cDOWU/snveXsEUYwLyudWMWrBo0YOWgnsdjvrtqABPL+ox8bZGmfx5jnfVS1HUV2GGI + 5H5JnTcWWsKw0CyWwgjEeJk3Ros90ZNlQXOiGhUUtML8lQxgCp5atm2x/m9rrAeaolz53hnVwWZUBCwa + wGL0b76bEkWeWpT7mSTztzrMA6WBrsj1tSDFw4hYNw1CyCX9TI5w18rgqpFxayO99tHaIdhMEeOuRKwn + CT+3yV4UBYE65EYYSbytKExxRm6qGZkUUOkSTNK6XWkZFsYTZ77/3w3gkGAKb96Lry+FIUWiGP0bTFEf + GWmLeIqSZJL91DQ1UrmNixUGMMUkRVFyogxpKeS5mQ7IzxXmr+M1A7gwl2XE/lRaZIfqCifU16rR2iAM + YD23iyZwX4cZQ2KU1ogbls14Yu2CD9YseGH5rAtmJywYHWTb7dVhuM+AYe433OtCuGK83wtjYtRvnzcG + O9zQ0+KMriYzelpdMdjlidE+P0wOBGB6OAhTwwEYH/DFUJcHurlfa60RdRU6VBaJEctOyM+hQMl2QnYW + xUw2RWi2HtnZJmTnmJCVaZFM4LhEzRUTmAIqzhGhkTYIDZchiuWQQGGYniGXDN2aGvZP8qv2dn+0t/mj + qtKCslIDysqMKC83SSgpMaAgX8vzKVgnRKpSQlqqo1SWmWl2PJYdShlbFkdPK9HVrkFfpx6DjA3DwgDu + 1/Oe9JgcNmJ61Ii5MRNmxwyY6lNhtMsJg81yDIl1OlnGg/Vm9FeZ0VHIthjlgCwK/3zmlBLmjuIwEwpC + DMgLZTsK0aIgnIIvwYS6LA8053ujJd8LLTmLo3/HyoIwWxaIJYUs2xw3TGaxjijQV7BfrC32wpYK9r2q + IOyvCsSRikAcK/XH8QJfHM/zwclcH9xAnMqndikQBnAgThYE4WhJOA5WRuNQQxqOdBXjwEAVdgzU4LrB + eqwdbsD8YB2WDjZidrABS/prMdFdieH2YvQ15aOzLgNNlYmoLo5AeWEwyotDUVEajtrKSNRVRaOhPg6N + TQmoq49FcXkQcgq8kJ3vIZnABeUBKOD95BYHIi3bC2J9w7AoC2LjvRGf4IeYaH+EhXpKxm+w/xUEuCMi + 6KoBbJUMYE83PVytaph+YABbrhjAPq5ahPqaER/sirQwNyQHGpF0ZbR1frAGRcEKlATLURHqgBoK+toE + PeqSjZIBXEOIKbhKKaqL2OaEYXrNABZiPFWPghS9NB1aGuN/SizbJkV2FAW9eCr+6h8i4aGO0h+4KSkW + ZLJOM7KEAeyGpFQr4pN4bcL8TRIG8KIRnJhkZRsX6z3qERypQmCEEv7hCvhTLwoDOMjfSTKAIwMcEePv + iIQgR6Tzu5ww3kuEE2qoJ1sjmC+ZmyYTFJhKVGIkie033hENsfaoiLFDiZiKkJpVjEwpThFTKRtQzXZU + W+iBqkJ3FOVYkZ9tZv8wIpMaOTtTz1hiQUmBC0rynfnaimwR31gOqdSuAmnxYkSBglv2Jb7OYrlliz8p + qK0LeQwxArgi34zKXBNq8q1oLHFFU6kr6gstqM0T0yHquDX9VwO4udQNtT8wgMU6wsL8lQzgIhOaKlzR + VuOFziY/dDb7oq3OC/XVHqiudEVlmRWlxSbk5+uQmc1ry3CUtnkFWhQXGVH2AwN4uMqCJeyny0rVWF+h + xoEmI060GHBzqxb3dmrwcK+WWkuP58aMeGlMh5eGVfjjoBNeHVTjjQkTXp91xe9n3PAsedFD5BG3t2tx + c6cBp3rEaGIrjnZbsZPHWk8NtqLGHktrybmq7TFb64DZGgcs1Nhhbb0DNrcosLtTi0PC/O014WiXGfva + jdjeYsZaxu/ZWg1GqNV7qhToombqYIzqa1BimPFmSbsK851iGmg1VvVosaZPh7XMsxJ6iW491nQLA1iN + 1e1qrGwjx2lVXjGANZIBvIbnW2gnD2lSY5b86aoBPM2ymGw1YqyFMY2cqo/6q79JgwHyt4EOftbBPNFl + wAi12agwfoXpy9fDxFAPt+QbQwMWDAy5oHfYDV0jnmgZ9UX9iA8qBz1ROuCOqgl/VE4FoHTKDxWTfqgb + 9UMj88dVNA0HomkkEM0CowFoHfUhPCW0jLrxc8b/IWe0jFjROmxFJzldz4AJA6yPEWKa554jlg26YHm/ + K1b2uWMZudc0y3WUertPTENZyByZSz6XQZ7BvFCa4oQyaqNqMS1hnhY9+RryECf0Z9hKBvCyUhVWV2ik + WZS21qqwj2Vzqs2IH7He72E53Ma8cZJldLBZjV2talzH+l1BDjpZLMMIue5gjg05rz0G8xUYKNKij/mq + q9SErnJntLP91vN6qvKU7KeOKEm3R1Wukn2HObzKwP5BlOrQybzfl22P8Wwxqk+NtWzvW4X5W2TGrgIT + tvB+NmSrsJBqi3le93Je98oiJ2yo1HyPKu7DY66vMmJViRbL8pWYyXDAdKo9IbZsp+liTWAl5jPJqTN5 + vCwVlgvjN1eBZVksC/avOe6/JNWO+9thiRhBnMHfpztgKs0eEzzGeAqvk99NkrPM5quYw5SY4j4TVw1g + QpjBYqpPYQDPXjWAr2BFDvsJeYMwfq8rI08XKNFgC7c7ee27eA9by8RIRfL7Ejn2VihwpJ59ke32gW4L + fjLohl+NeeN3M8HS/wa/WxqJBwa8ya/FKGYbzOTYYorHnyJPmGIdjBSzHrKNqCcPqZQMYDMy4hirhQHM + nHXVAA4OF1NAG+HHXO4VooZHiBLuhGe4Bv7RRgTHWhBMPRnI3BMUrEIovxMIIYKCxRT/TvBjTPf2lsNL + jPTyVSI4RIeICBNi+duEZHfExDsjIsq4aAAHLxrAwvT9dwNYIEQYCrzG8CjmEuaHoBDmjXBhdl0xgJmT + slItyBYgV82lrslN16KQ8b6csbi+0IpmxufOIgv7BTkM29VQliMms+VYyHfEddRdRxv0uI3950HywZ+O + +eHnIx74GXn+r0YMeHHKjJdmzXhhzojfzpnx3LwznqNeeHzKFbf3aXBcGKuMGXs72T7bDVhRp8KSSieM + kKsOss66KxjjytXor9FivJl9tNWCpe1mzLdSS7SosLLBEWtrbbCxSobN1TJsrZFhe60MO+pssLNeht2N + NtjfIkb/OuGmXjVu71bhtjYn3NrsgFsk2OMW8Z7f3cG4fueoCbcO63FjvxonyOGOt8txY7cCpzpU7L9y + nGi2ww1tjripS4VbeY+3DjvjYIcJa9l3BlPs0BghQx1zb0WoErkBcqT4OSAuUE5OIDi+HTkr9XgMuX6c + E4LJJYKZJ8MTdUjKdEFShgtiyD9i4oQBrENUhFoyf4ODyCeY/2NjtOT7esTF6BErDMlYLWK5rzAkE5O0 + SGaezRDrQuZqUFtmRnudB2OzF4YbvTFc44p+tuWuPDU6GD/aU23QmSxDl3gQg/1ySZ4GC0VWrGA9z+do + MZPKts/7mWO8WZ6rwppC0c8M2FxhxuZyPTYUMb7kOWGlGJXP/rmKfXJjzqIBfB1j0Da2jR2lSuxj/R2t + UeFUnVIygB9gvT3aYcWjPa54fMQbj0z44Tbqif31zEXsd5MpMozzWCNZduhnbOhkLGtjXFk0gBVooE6Q + pn/OZFlzn54CJ8yWi6WkPHFoIAT7u32xrlyDlYVyrMi1Y3xirOP9zol7zFBiPJOxldqiNceIRvbnKmqM + IjFDE8tvcRpocisx4lWUe5hKQig5mDCApXV/kwzXIAzgRRNYizhyqMRUarN/N4DTyB9TdZIJLBnAsXIJ + ubHUAORi2XEOiwYweVNq1PcGcCI1QrwY+SsZv/aIiZDz2gQcEc3rjIx2ZKxxkEbsevgt4nsDWIz+pb6M + 118xgBXS5z7Uk57UlZ7C8OVWwIvw4W8lA/gKfIUJ/AMj2J+v/f0XjeDAa+bvIsTn/v720tIkIWzz4ZFK + RIm2G61FFPmwMKxT4tUsD3K2PDe0FLqhXswKE2WDyigZWpPs0UsNNi4MYOa5iXJyBuq1oQrmPsHJigzo + LDQx9lgwTJ42wXa3rECO9dSzO8rtsK/cBifIn+5kXL+vywW3NIr/18mbGP8PVluwl212S44COwq12MG8 + uo4ac0Y8kETd3C8MRfaBTuanNuaedurHVjEAJllOHWCHsmjqZl5njRgZyr7Qyzw4xja5jLFvA3PDvkod + 7qg34RfUu79vdcbLbSb8kXztT4xrr/Yr8Rp54UsjWnJGPbaVy9GTIEMu6yuOZR7mw/LzYLkSgb62CAty + +l8NYGH8CgT7MX77OsFfmv5ZGMDfjwAWEFNBL8JGMoHFbyOZG2JCVFcMYNUihAEcokACY0pipBop1Cap + YiRugpYgZydvz6euKc0Sa8G7oiTbGcWZwgC2SLhqAIv9k6N5PPaXSKF5hNlLRFLviJkL/qsBLEY787ur + BnA6tVZOOo8njGUx6ph9sSbDhNo0A8tdjfIIO5SHyVDDuNpInd+VQL7MWLWimDxFPKTJ3LDtigF8rMWC + m/t8cfd4NG7tC8PhBi9sYvuZZX0vS5NjNfnQhhIL1lAvzOeoyTccMZxsi954xkLJALZBQ7wdamMdUR2v + QDk1TRnLpSB+EWKt3syIqwawBpkst3TGhbRIarsrBnAc7y01SoM09oGUWB2SRczmd/GMI7FilHe4UkIU + yyGE/SeYbSEiyB6xoXIkshzTosQsU8Lo1UlGsGQGU18KFCYwtjNn5FC3LY74pbaithO4agDnCXC/XPFA + CcsuNdyW1yxHNnPSVSNYoIDlLwzg3DAH5HKffMaY0ngncl0N6nPM1GDOaKLOay50QQM5gHgwtyKdOjFZ + gQqilnmmOZuck5/35pIzU7sNMG8MZpEfiAcEqzxwdDIdj+xouWIA++nhF0DSEmCSTOCrprCPz383fX8I + T08dPH9gAC+O/l00gF2d+fqKEezuqoaXmwIBbgze7o4Id5cjlh2lgISrKc0DA8IALvDBaK4bSTKFHkXv + XAZJbhqFEoPSBiaDrfku2EHxuWgAWyXsYWDaX2bB/nIL9pCYH6yw4gQb16m2AJzqDMbBOh9spCBdS5G7 + KdeZx3DH7jJvHGkKwsluNsQOf2ytd8Usg1AvBYWYhksUfhobQQo7hZhPvDBRg6p0IxOcIFtM3BV+GKsN + wWRjOKabo7CmPx1bxguwcSQbS9uiMV4TgIm6QMw0h6KvxJlJUsvA6ogqNvaqZBsSVXu0iikMxFz2mQr0 + kngPMrmKpypXZdhgMwnu/gJ7nCyww4/y5XiQifTJEhWeKlfhJwxWj1fI8BjxKInV43ViLQ8ZnhtxwMuz + Kry5Uov31mnxl016fLjNiM92WvDPnVZ8vcMFZ7e74MJWd1zc4Ibzq6w4N2/C2Wk9vhvV4kux/m+3gzT6 + 9wMe8z0e/41CGf6YJcMr2TK8VWiD98ps8ZdKOf6nXoPP2i34lOTq814Lvhh2wTfTbvhu3gvnN/otGsD7 + goDDwQS3hwJw6ZA/vt3jhs93m/HZPmd8fswNX53ywdkfhUjmLx6OAx6Nw+WHY3HpgWhcuCcEp2/ywOlD + RpzeqcQ3mx3x1XoFvlmnxtdr9fhiPe9tgxFfbjFJxvb5/S64uN8Zl/ZagF1mYKcJ4Hfnxdq/K1zwxVJX + /GPOHX9b4o63xjzwYo8znm434b5WkspmM66vM+JohQ5HK824odELR2vdsUOsl5Noh6UMPkuZIJYTm0la + jpHE3F6jx8O1Bvy6yYo/dLrilV5X/JGi9SUx+qtXiac77PBYiwyPtMnwRK8MPx+1wQvzDnhljSP+tM4J + b2w04M0tbvj9OpKtcR1u71TgRJMTA6USB0iKdzaRMJMk7+ExjvXJcNuUHPcsqPDwWh1+slmHZ/fo8eJB + Pd4+ocdHJww4TVw4osOFfTqc3a3BN/s0+HyvEp8eUuOLG8348k5XfPMo6+CZCHz7m1ickUb/puD8y4m4 + 8NL3BvD5x6O4bzje2RuAXy944N5uLY7VOmJPtRL769Q4yroXa4P8lGT8T6s88I89ofjiYAQ+PxSFf+yL + xqurfPGbcWc81qbGPTWOeLDZgKf7vfHKqjh8dKAIX15fjjO3V+PcHSX454kUfhaFj4/G4MsbU/D1ben4 + 6s4UfHxrKD6+2xdfP8n28aI7LrzDuv3EFZdPe+LieW9c+I7t7HMfnP/IE2f/bsb5vxpw5m0tLrzG+39B + i4u/VuPCM0qce1KHM4+64swj3gT3fcQLl58KwOWnA3mvwgAOxKXnw68YwImLBvB7GVeQDryZjMsvxeLc + MwE4+7AHztxtxdmb2WeOaXHmwKIBfG6fEhf2a64ZwOeuN+D8KQMu3m5mG3bFpUf9cPExnufRYFx+KBSX + 7yZYvt9eH4S/7fHCCyt1eGTMDvcM2+PecTUeZDu9Z8Ydt0y64vigFVsb1VhOkTyWboO+FAf0MA51ZXox + ZvqjJjWYBDYSRWlxyM2IQ1ZWLDJz4pGWl4CU/AQkFcRLSCyMR8JVSFNBi1HAwqz9T0P3/yv+TwbwD/G/ + GsC8hv+G+AKxPnAGYgu5j4A0tXU8UvKikZ4ThrR0f6QkuSOO+SPUR8wowYTtbo8wT5IZHwWi/FSIFvAn + 2Q4Q0PC9BhHeFHauDvAzk1ibZIgU00KFyjBAobS3SYmfLXfD344G4Nu7/XD+EXe2FWfgl4wpv2IbfNYF + 3z7B+HWfBh/dpsLfTzrggwMy/HWzDO8vs8e7Izq8wDjyEPPVMRLFdR5yTHo7oN9XjhYvB1R52CHXnYmf + 23i+j/Eh2QuiUAwhEQml6A/VIzNEj7xgPYqD9KjmtilIh1beX5+3DEtDHbAzRYeTOSbczbz3SLUrftbI + WNbhi3cHw/DheAQ+mYrAP6aD8delfniXffGTg7E4/eN8XPpNPS6/1YVL/xjBxS8mgG9mcOmrGZz5Zg6n + v1nApS9XAJ+uBD6cx7cv9eMvD1fgt8eSce9yX9ww6oK9XRSWDQrMVzhggrlgpNAWw8LolYxfB8kMHiq0 + 52fCAHbEUDG/I0b4erTEEWOlcoyU2GO01B4TFfIrI4EpbBuvGMAs+6V1jlhSZYPZKlus4usNjIdbKOh3 + dalxoN+AY4NmHBsyU0wasaeTxL2FoqFWhzV1VqxmzF7e5IvpWh905JpRxTxeRCGWRwJVwm0NyXM9hV4T + xV9DoppE0gk1JJONiWItEwV6ctXoL1RJo0xmGp2xossby3u8sdDtgWWM7+JPyIU2Mb2ZESsaSXLrxZ/E + dlhf64BtDSS5DXIcb3TE3W1K/LTfiN8OO+PVcTe8Rbw76Y43Z73wxgo/vLTKH79c6YWHZi04OaLA9n5b + rO+3x+p+innJAFZipltD6LBswIo1zFVrR92xcpDEuI/lNKDAgjCABx0IO6wadsD6USW2TBuwg8fcPUdu + JMEZe+bcsG/eU9pum3Yh3LB9zhs7lvrguml3rBuzYtWIGauGTFg5ZMT8oBELvPb5XnIvyQA28HpMmG7V + YbBKjm7We0ceSTmFnpjyebLKD5OVfqxTHwxQQPZSjIgHVGoohMXanQVewgC2kQzgGrbtxkgrmqLc0BBx + 1fw1SOZvsTdFOXlhjosT8txVKPE2ojLIFZUh7ijyd0WmlxGJbjpEu6gQYqHIMsnhoZXBRS2DmzCBdTL4 + GSmuXSmkeKx4Hx2SuE32oQgI0CE7zICcODPJuEV6mjYtefGpfDFVW3KqESlEaoqZENO+GvG/GcB+vjwP + 70uM/BXr/oppnxMSFItTvGUbkJtrQnamDonxDt8bwOQMaeR82RSx+bmOKCafK853RFGBAwpz7VGQa4Oi + fFtUlLKNVijRSIHcUkdOXKtFc70OXWJq404xOsqKmQl3rJj1wArW5/wSq2RsDrNN9LN/DLC9DHSZMNht + xWCPFaP97hjudpfWdOxqtqC13oDmGi23JnQ3u6C/w5Pf+2BiIFAygcU00aO9vuhr80BHPYVFlQnVJRQ4 + +RQwWeTBmY7ISHdCOgVEVpYWuXkW5FGE5Oa5IJOiMDFZjzj2q5g4BcKjxRRmMgQxrkZEUVSLdYDJebMo + 8MvKeNwaVzSyvzaxvxZRBBbka1BYQEFVpEeRMH8L9cilCBTnS0l2JFjGyU6sGwekpYoptRcN4JISO1RX + 2aOhXo72ViW6OzXoZ7sdYRsWo6Knhk2YJRdZOuWM+UluJ8QIMz0mejUYYT8dalFhqEkYwBb0V1nRWWhB + VbwSBSFylFCYV0VbUBnrgtIoMwrCeU38LC9UgZJYLerSXdGc44HWPC+053ihr9AXE+VBmKsIxmxJIJbk + e2EyxxVLcpyxUOiBdaXe2EzdsLMyEHsq/HGw1B+HS/xwlL87mu+DE8T1+X44VRSIm4qJkiBcXxyEY2XC + AI7CofpkapU87OwoxPq2Qiy0FGCqOR9D9Tnor89Fb0Muevi6qyYTreVJaCiJQ01+OMpzQ1GRH4yq4lC2 + rwg0VMegqS4WLQ1xaG6KR31DLOsjEgW8lsxcd2TkuCArzx25Jb7IKfJDeq434pJdEBKpRwDzUXiEG6Ki + vREZ4YfQUC/J9A1kHxUQI4HDgzwkU9jf2wKfHxrABvn3BrBeDnezCn7s01GBLkiN9EZGhDuS/HXMi6xv + 5sucQGECs58EyVFGHVZJMV+TYEBdqllaz70uzYzqNBPK2I9L2O4KGe+FAJemTqZeK0jSsL9rkR4npgFz + QmKkQhr9GxnsID0RHxLoICE8TIzg0TEOWJGZ5SmZwN8bwFfMX0IaBZxoZFs2S6N/w2K0CIxQwD/cCX48 + hn+omPLPkcdk+w9QSAZwrD/brBhtFMbrilChnPs3cdvD2DIeq8DSJBWWpagxxfY9kOCE5lh7VAkDOI6x + Ic4R+eIhJt6XNAo4y4qqfFeUsb/lZ5mQk2lk/9AztqiQkcb4mWVEUa4VhTlmfmdCOuNwsljbONoJCbx/ + sV5dcgz7k/gzM56/YflII4N5DXmpGmkUcGkukS2mbxYjjp1RX+wsjTKrzRPmruGKAWyVpnzurPBCT/UV + A7jE9ZpJLCD+kFg0gHWovWIAt9d6orvJD32tAehu9GOMEyawO2oqXVFOLiNG+2bnapCZrUBOHuNBMa+l + xIzykn81gMUI4JkiBVaVOmEX49nhejVO1itwO/nDvW0KPNajwa+G9XhpzICXhrXUZCq8OqjDGxNWvDrj + huenXPHEsBk/6tLhxmYVTrZqcbzDiCOMsfs7zNjcrCb3kGOOHGRarANbYcs8t4hZsdxDrT3Wi7Ut2zTY + 363HMerfw11m7GkzYRt15JoGE7mNDiNVavRWqtFdo0EXuc6AWI+3SYXpNtZ5uwIrGbNXMc+v7iF/6TFi + de8i1nZfWeO3g9+1a7GK51nZQg0gDJU2Hb/nOXit8216zDWJ9X+vTgGtZ55mzKOeFQZwPzlVr3hoq4Ht + rYmveZ99PNZAB3M5uZNk+nYZpNdDnQYMiRG4g84YoZYfJt8YGPNE77g32id80Tzmi+phD1QOeaJmwh/V + UwEoW+KHiik/1I/5oWkk4BpaxoIltI6HoHUiEG38fduE5xW48jsXNI+SJ5B7dIxa0T1sQd+QBUMjzhgd + sWJqyBmzQy5YSiwMuGC+xwVz7az3Jt5XtRGD5Qb0lpjQnm9k/DWiLkuHqgwxBZ8TKlPkaMxQSOtpivUL + +6iZFg1gDdZW67C1wYidjXrsb9LhhjYjNbcJd3QYcFOrBkdYTvvIb3ewTWxpVWE1+dySMhsMZcnQnylg + i74sB/QWqNFTrJcM4O4KYQA7o6FQPKChRAXPW07UivUwSw1o4bW2lxFFGuYIB3TzGCOZDpjLVmJljhYb + 8/XYUWjGjnwTNuWybrMUmBXr6/K658gNFgrkWFvOa5egxupKbqv0WFNhwArm5qXCAM52xEyGgIJwktbT + FCbwXAb5NbE0Uxi/5JXZbNPMm3Np9tLowRlh/hJLM/k5jzHHc89xX3GcJcy7S3jMJTlKLGNens1TY5rX + PUGNNJ4ik4zgqXQZ9yFXz7TB0iwbzGeLJbIWtyvzyEmLlNhWSU5aY8bWat5fmY7QYguvXUwJvaGQfSDb + Dst5zDU8zqY8e+wtluOGSiXurNfgQfLsJ3rd8IvxQPxkNAA3t1iwtYTlw/ONcf8h1sUQy7m/wIjObMaZ + FBUqmAfKmCPyE0xIiyWPizYwX5kQGmlBSLh1cf1fad1fDTyCFHANdIJLkBPcmNf9mN+Co00IoZ4MpnYL + DRVTAy8ikggnQoOV5H6M+X6EjxIB/twvhDmMx4+Pc0ZSMvVooiuiYsyS0SvM36sGsDB/A8IXjd/vDWA9 + c4mJ+xsRyrwQEuKECPFHdLReMoBTU6xIJyfNSGasFw8zpWgg1nLPS9eiRDxsI6aCLDKjs9iK4Uo3jJaZ + MVHEWFCsxsoKNTaLP94ZD+7scsWjw374+VQwfj3ph1+NueIFaoE/LHPHS/PO+O2cCb9cYsQzxJPTzvjx + iFgTW4nDbU440K7BbsaHTdQAy+uVmKqkzit3RL8wgFlX3Yxx/TVi1gErJlutmGUcnGP8mW+hRmJMXktu + dl2tHbbU2WFbvT12NthjV6MDdjfZY1+zA44wFt7YrcYd1Hf3Efd2iSXG1NLAg3s7lLinm++pS+4bt+C+ + MQvuGjXhtkEtbuwSxq8wexW4uUuFWzpVuJWvb+8Rx9LhdmEADzI2s39vrlWzLTMeiOlEmf/qI8kRAhyQ + 7mOLBH97RAsTN8QOYWH25DkObAdyBFEfBsU4IiKeOiGTHCXDBfEJesnUFfUTJabwDnEg77GhNiCvCFdQ + M6ilkcHCEI6MUpEnaSRjUjwYmcg8m0wOK2a0KS/QMSc6k695YIh5cLjGDQPkxb3kv905TujMtEM7+5iY + CrqH8WCE/XemkPqvyIK5PC2m05zYB+3Z/5ywVDzcUcByLqU+rzBjQxnjA2PUCt6vMH/neZxFA9j+mgG8 + Jd8JO0qU5KFKHKlRXjOAH2JbeYJt5ck+D7YXT9wv1sRvN2F7OWME+/swtcwIt0NZdtLasJ05jLWMe615 + SjTxuhuyHVDPftnA/tnG8w8XM2cxZu/t9MP1w2E40R+IbbVGrCtyxFry95Viuvgs+eKsBNka1hHzEnlE + J3lGMzW84B3F5DrZ1O1JsdR2kU6LWowc/JoBzH4jDGBhtCelmK7hmgHM3yYka5DIfiMe0P3eAKbuTNP/ + iwEsjN+rEObv4ihgBbLJw8S6v1fN3wRhAEctjv6N5mdREXLyYYLvI/h5OD8LDLWTRv66+XxvAAeL76kt + o9iOohMXDWCxBrAf9xXmrzv1pTCAhfF7DfztD+HN7wV8rhrAAoECtj8Y/bsI6Tt/YQzbM56JUe5O0hTm + EmLV5L28LzEiMc2ImjwPNIsHDFPVKIqwQVm4DE3xtsx7SkyQi02XWqR19UfKzRgoZR1Ro7Xk69DCOuss + MEgG8BRz0spiJTaXOWJvlRxHqhxwE7nZ/V3OeKTfC3e1ueB4lQ77y3XYVcx8nK/CrhI9Dte445AYcMWc + uZQ5aUQsQyDWomf7b0+zQyu1c2uGHM2pctTymkoiZcintsxhmZZEyFDLfVsTmaPZPqf4GzHqfWehHKfK + lXiKuvf5RgN+T770CrnW64ILDmvwxogCL4/p8NigCTuryJOSecwQYQCzP/vYS+avrzu1PmPEfzOAxSje + EH9HyfgVCPSRS6N8fd3tqXvs4e1m+2+wgZerDbcy+HvZIpi/FdNJC9M3Soz+vWICRwezjqRRwE6ICxMm + sEoayZsSqyFUyKS2ESNyi6kHSoUBLI3+XTR/BaQpoJPEg5+MOZLmcVyc6eiK4RvJvvNDhFNb/RAR3Fcy + gOPVzD1G5GZYkZcp1hg2o5Q6v5K6q0pMfSymXw6jVmGZVYv156NZXwm2GM8SnEGNtSUaXFeqkgzg3eTA + R1udcVOfP+4YicT1nUHYXeWGtbnMVYzJ00l2WEbeMZ9NTpNJrpHqiJFEO/SzHfSybjvixBrAtqhnn6xh + XK5kDC+NU6GY91iQwL4br0G2MICvjQAWBrAWGdz+iwHM+0tmvEiJXJzuWZRtQrhaQlwE+8MPDODQIKER + bRDGfhTN+B7PckmJEDMCaHlOnXROgQJeQ6F4iCLOaTFWUMctGr7UMYmLr68awLnUXMIAzqH2S4+0R2qE + HXWvHFlXDOCryOd9SAZwBGMR98tnPiqlDqxI16E+z4KGfHJOCVbqLSPKM9hnEx1RQP1YHCdHVYpCGgXc + Sl7UwTLtzKIOIXrIB/sFJ6xif5tMx4OSAewrRv6aGDDMDBQWvjZeM4EFvL11PzB7xXrA/wofHwO8PPXX + RgFL5i8h1gB2cxWm8OLWi9/7e6gR4qlGuBeTpTdFuY8TSqLNJOxeGCr0w2iBF8ZzXDDJoD+TqcNS3sRy + itt1mUzi+RZsL3bDdorPncUu2FlilbCLgWmvAIPTHgamfRSKh2tccaLVm8nLH0cpNneVuWIbifbWAmds + oUjeWeyKQ3V+FH5BONTqg03VViyh+OxiwdWIP4BYAekhcskEzo1RM0lQ/IqRLXnO6Ch0R0+ZN4aqAzFa + F0yEYL4zAeuGMrCqLwWT9eFM5r4YqvDHWE0QWrIZXJOVKGVSKWBHyQuToZgBtoLkooYNuYFCvynaFm0M + av3ETBwTNoPYljRb7KMQuCHLHnfmOOLHBQo8zOD6SIkDHi61IWR4uEyGR6tleLpFht8MOOD3kwq8OqfG + WytU+GCDDv/YasYXO5wl8/fbbW44t9UNF6/zwIXVrji7YMaZWQNOj2vx9ZAKn/eK6Z/t8PcGGd7nMd/m + 8V/Nl+GPuTK8WSzDnyvs8X6lA/5arcBHDTp83GzC3xt1+GujCh926vApxds/Z91xbkMALm0PAvYTRwQC + gKOBwPEgnD7sjX8ecsOXx7zw9U2+OH1nEC4K8/eROOCxRODReOChWFy+P1oaKXn2Rk+cPcTr3KnBt1uU + +Oc6Fb5arcY/V+rw2WoDPllnxBebLfhuF+9tvzsuEJf2uAI7nQHeNzZZcWY1r2vBgo9nnPHBtCvembDi + lUErftGhx2MtOtzTZMBtFJcnxZNJpWocpUC5scEDx0nKdlL8rGRQm2edzDMYrSK2UYCcLFfhnjo9fsLE + 8jJFytskSu9MeODdJR54a4bEetKI344q8UyfLX7Ss2gAPzUgwy8nZXh+zga/X26HV9fp8OZmV/xxgxue + mTHjwUEDftRjxKlOXkMbyTHrdHeTDIc7ZbhlzAb3zDni4VVqPL3JgF/tNuKFI2a8dr0Zfz1lxmenjDhz + vR4Xj2pZBmIUsBbf7tfiy/1qfH5Ej69udsFX93ji9JPBOP3LKJz+XTzOvpKCC39Kw4VXkiUD+Nzz4Tj7 + TBjOPRGFr++NxfuHwvD8al/cRyJ9olGJfRRlB1jvRxo0uL1Di6dIxF9Z6YG/7wrBx/vD8fGBKPxtTxR+ + t+CJp4ZNuKdZgVuq7HF3swFPDPri5TWJ+PBwGT45UYavbq3AN7cV49PjqXh3Zyje2RmCP++NwvsHY/D+ + 0Si8c9Qff7nZC58+7I0zv/PGhbfZZj9h3Z7xweVL/rh0zg8X/xmIC5/64vxHLrjwdzEVtAEX3yRe0uHy + c1pcelaNC08ZcPYxtvWH2Y4EHvEEfuoHPB0gjQK+8PNAXBYG8CsxwOsJwNspwPvpi/gL8a6YDjoBl54L + w/knfXDufjecv92C8yzrc4eVOLtfIeH8QdU1A/jMcS3O3MB6uNmI83c64+JDPjj/sD8uPBiISw8EA/fy + fPdE4/SpMPx9nw9+taDB3f02uL5DhpPd9qxrHW6i2DkxZsUhttMt4mlaJtHxLFsMU6CPMAYN5vmiLd0b + dcm+qEgKQklqOAoyIpCTGY3snFhk5MYhNS8OyflxSCpYREJhHOL5Pj4/YdEAvor/Ytb+f8H/nwawGMWc + nB+L9NxwpKYHICXZgyR80QAOJLkKcmPS9nBEmBeFNPNLpICPahG+CkT5KBDB70Jc7eBnIok2yhBLAVdM + EjmSbotDzRr8apUnPjoWhO/u9MXZ+11w/lEDLvzEgEs/MePs42Z8+WM9PrpNgb+edMD7B2zw/nYZ/rKG + WGKPPw/o8GKlHg8nanHczwnrnSnSPOwxFqBAv78KTd5ylPB9rqcj0ngtKUEkauFGEguKljADksQU0Pws + 21+NbObIfHc5KjwoqNxtMOBjg9UkXUfyrLij3BWPNHji6VYv/LLdGy93CwM4GH8bC8En02H4dFkIPl0b + wvgfiu9OpeDS4yXAS03Aez3Ap+PAV9PA6aXAd0tx4fQ8zp1eicvfrubna4DPVuLi21P4/FftePveEvxy + fwIeWBuMU9Me2N1rwMYWFZYyF0yU2GGsRBi+DhgqEiN/+bpArJUmx3ChE+F4BXwt1gUWhnCRrYTRUjtM + k3SLaaHnG7RYTvG5vFmNuVo5pipkmC5nvK2RY02DIza1OWFntxr7+w04OsR+MWrBEW4P9Bqxm+J+S4uZ + +7hhc1cg1neFYKE1mALFDfVpWpTEOiI/3IYcQ47qeBXqUzSSAVyfqEJtjALV/FxMA92YYI+2NDm6KWAH + eb3jVXosbXHF8i4PLHS6Y1mbFcsojpczlq1tMWBdsxbrmhRYX+eAzfVixgYnHCRuaHbCva1K/KyP8XnI + Ga+PMTcQ7zE3vD3jhTfFFNArvPHsMjc8MMm42u+A7cwPG3rssKpXjoVeJ8z1qLCkmyK/24DZfitWjLhh + 5bAb5vuN0nfL+pWYHyRZvmICrxx2xLoxNTZPG7GNOW4HsW2JVcKOJa7YNefOz1yxadyMzRPO2Drtia1L + vLBhwhVrRixYMWyWsJwxe9mgkefhltcvDGCBWV7HBOumr9wO7QUUZDk20rpP3fkG9Be4oj9fGL8uaE81 + oiVRh7poJcpD7KWRvz80gKtDdGiIIHmNcEFtqJj6meJbjPz1ViPfU4UsFzkyrA7cKlDgqUOZvzNKA12Q + 72tFqrsOsS5qRFgptiwUWmYHeOpkcNEsGsBeBopcK8WLhwpxfnokksOm+OuR4sf+FaAhl9NRDBiktV9S + 47VIImFPopBKEE+WU4gLCON3cc1Pw38YwGGhDggOki0awERwsA2i2XaSklTIyDBIZmgROWUJ211hgQXp + qQoeY3EKaMkATpFdM4BLCyleiBL2jcJcB+RlUXiyTEuL2NdL2CYpmuor9GisZnmRk7TX69HbJoxdk7TO + 7+yEC+YmrZgZN2J8UIv+LgV62hXoE+ZnpxEDXRbJBB7ud8dAtxu6Wshb61gvFUrUMI/UVWjQXGNEe6ML + ulvdMdzlh6mhIEwPB2O8PxCDnX7oavRAEzlxbZkRJRRzOZmOSE+XI5XCLCXVCRkUaQUFFJ4lHsgvdGPO + YR2lG5GQLJ4sd0RIhC38Kc79WWYh5LwxFHFiFHAaRXxegQ7FpRSR5FfVtR78rZpluDjta04uhRS/zxWj + ASkkxbkSEhxYP46sFwckJtghVYwAZi4UBnBxsS3KK2xQV2OH5mZHdHawnTIuDA+YMD5kwpIxZyyQk62Y + 9cLKGXcsJ/+bG7NgmrFkrEuLkTYNhtmnhQHcV7loANenGVBGMVkRrWe8cENDqjeqElxQFKFDThCFWqAD + XytQm2RGU6Yr2nI80JXrhYFif0yVB1NchWJZRShmS3wxWeCOqTwXLCv0xBpqhuuoCbZVBGBnmR/2lPhh + f7EfDhb44nC+L45R/5woCsQNJYy1PM7NlaG4oSIYx3isQ1WROFiXgAPtWdjamoOVjVmYqE5BX0UiOsqT + 0F6RgrYraClLQkNhDKrywlCW4U/h7ovyvEDWfQSaamLQ3sTfNCegoyURrS0JqK2PRgWvWYz6Tc10Zh2Z + kZbtjKwCT2TkeSEhzQXhMdSDQUp4Mo8KnRgW5oGIcD/2Cx8EBXrA39+NcJEM4LBgD2nr622Gt8f/bgB7 + mHksfpcU7oWcuABkR3kiyV+LWObHRC8KY//Fsi4MckAJxXt5lAbViUY0pFvRmOkioT7LGZVsd6VixC/7 + ojCAhWmaz1ifyz6eFadCKuN8EgV2XLiY8tn+igEspmGzlyAMYDHlZlKKM9uVl4T0DA8kplj+xQAWiGNs + iGEMiYzRSaN/A/hb31BHCeJ1oPjjIFiJiEClNAW0MIBTQyj8w6khxfWHK9EepcYQNeVsvAYrUrRYlS6m + dFRiLEmJzng5apiPSohCaTSKE+/FCUXJatalCWVirS8x8jeN8YxIYT5LSnBCCu89O02PvEwzYUJmKr/j + /ScwFsdFyBEr1j2OEkawI5KFIc7ySUtUIzWB5cPjZyWrkJehQwE1dyEh1gWuEtNBi6fL2c+rxQNVYmQw + t/XU0C2lHuis9EF3je8VA9gZtXkGVOdoJdRcmf65Kl+LuiIDmsVIyRp39Db6YrAtEH0tgeho8GVc8kJ9 + jQeqKkXstLINGpCdr0FeIWNEuQXl5VZUlJquGcBDlWZMlukwlS/HcsbLbRUq7KtU4FCFA26sccQd9XI8 + IPJvrxYvDBvw0pAefxzU4NVhI96YcsOflnjil+OueKDPgFPUJ0eZuw81aXCo1YB97SbsaDNgPfXsfLWD + xEPGyENGqIPFVmCqzAYL1XZYI0YBN6mwh7r3SI9FGmW2u9WMrU0WrG4wY6ZGj5EqDfunBj2M4T11GgxS + K482qjHF61vappQMYAFh9krTOveYJIjXaxnHV3fosLqdaGUbIS8V/GgVtcDabsuiAcxrniNvEgbwogn8 + vQE80qRHH8/ZU6NEdx3bVb0SXU1qdPMYva28rrbFEcH9PL54PdhhxAi5xviwO8ZGPTAy7omhCW/0T/qi + e8of7RN+qB/1Qi11bi0/q5n2R8WMP6qW+KNhnPU4GnAN7ZMh32MqCB1TfoTXIqbd0TruTJAvEJ183TtK + PUMMM1aPj1oxPeKMOea5ZcT8oAtmOy2YaTNjmnlsot6MEealgTILuoosaC9iW2Qbrc8Rf0ySdyTZozrJ + Dk0pduhIs0MfOf14viOWlmqwvlYY9BbsbjHhAMtKjBy/qU0vjR4/yTrfX+uI3cT2RgW2MS+sa3KSeO5g + pgw9qTJ0C6TZojPHCV0FGnQWG9BdZkVbqTOaioyoyVGiknmyMssJDQVa9gm9hPZivTRCri3THp3pNhhK + s8d0hgIL2RqszdNhS74Rm3PZ7vh+JfPgdNLi6Nol2XaSCSymTL2KFWXC2NNyq8N8EWOImAI6VykZynPZ + fJ+twkwWIZnBV+GIWebd2Uw7zLA8ZlNtGG9sMZduh1mW0QKvdzmPsZCrwgJz8QKPs4zHEMdcyr44z3uZ + 43fCAJ7k7yfTxDSwtpghZnmNy8hhFvLssSLfgbCTsJrcZhOvdW+DlWXtjt31zthUYcCGEtZDMcs2X4EV + WfaYSZZhIor3Gi3D8kQZNvLYe3PscZya4hb27bsbjHi42wP3dLhhfxnLgOcf5X59YmRYCnko762VXKSB + dV+W4IiiOAXjpg7ZcQYkR+kQzZwdEqZHUJhx0fwNMsCbOszdTwFXPwdYfe1h8XeAi5jeOVTM5qDl/jrm + NTUiw1SIYryOjhDGk4rgZ4zjocFq5jc1gqjRggM1CA/RIybKSk7pKunRq6OAw8SI4iujfSUzWIwyDls0 + hK8ilNo1NkHMqmFBRLSWeZV5Q/wRTe6RxM+FAZzKvJOSQC4r/tRnfktLVCIrlbkuS4uyHPI6tp/2YguG + qth3q1wYo8jdyR9X1+qxtUGPY+0W3NnjjsfYN385E4bnZ4PxHPvi7+e88MoKbpe74TezJvx0SodHRjW4 + l/Hytl41jrc74kCrE/a1qbCTsWhjiwYL9QpMVFIjVTiSL5F3VqnQLeJcLTlXI/tnqzP7qREz1EdienoR + s9Y2KnFdvRO2sl/t4OtdLUrGShX2MgYe4LFPkIfdynh874AVD4+44NF+Cx7rNRMmwohHqEceGrbgIcYL + gfsZI+4eMkpG762dCkKJ26kP72LMv2dQh/sY6++jlvnRoAG38bcnugzY3ajB6hL2rRxHDLHs2mOZTwPt + kUl9kuRji1jygKggcoFgYZSR6zNfBgoTT5h7YvRdhjPEDEEJ8WJ9Zg3imf+jw1XkOvZsCzK2Cf4+XEyp + q1zUCtQ/YeGOCIt0IldYXBM2jnlacNmMNOZz9tO6QhNzqBsGqjwwwPzXxzwnDOBexooe6oROctwOYQJT + O/Sxr47nabCE+VGMsBunVh1NpgYnJ5/OdpLiwIK09ibzRokOK/h+GfunWLZOGMCr+VqYv5sZC8W60JsL + nLC9WIFdFQocrlZIBvA9jVo8whz2ZJcbHhfLWPW64I4eZxysV2NdgZhiXoZ+8vihDBsMMJZ087wdjHnC + AG7JVUgGcBP7dCO/a05nzOR5JsUMAHUWHOsLxB3jkbh9JAyHqKvFuqAbCxywjvFtA2PBOsbT1by3+ULm + d3Lw/gIz2sk/GvLMKMkyIodaXnAWYQCL8v13AzgyZnH0b0qq+RoWzV9qO3KsRPLD/zCAU/UoJtcXBrDg + j/+bASzMG2EAp8U4SeavNPr3igEcEyVnfJAjIkKMAneUphEP4/vg8MW1ez2oFV28vzeAhdkrTN8YXquA + MIOD+Ftv7uvGfV2v7PtDA1gYwj/E1c/FCGHJAA6y47lsr+Gq+SuWKgrwt5EgRqmHkaOKa4xiGQpESlvq + KrbN7BQDKnNcmbfcUSZmQA2VoThEhoZYG+Y/FSbJ4ZaUmDFBHiaM3j6203a2wwZqtDrG3lbmrkF+toRt + bw3j/rZKJQ7VKnB9nQJ3Nuvw2IAXnhoNxEN9vri+mlyrRIutbDsbsxyxn7rrZLM/jjWL5XGY95mrxIMG + nTFs+4z1bcxRLZlyCY2pDqiipi6kpsxleWaxDAp5rVXMIc1sm8IsnIiXkVfLsCPPFjcUO+BRtvFf1irx + Qqsaf+zT4c0RA94e1+GtCTVemTLiCXKP3eRK/cztRTxunL8dgn3k8Pewgc+/GcBiHeAfGsDBfnIE+Tpy + H0f4e4qRvrbwcmG9OwuwLv8N7tbF7eJxGWsCFZL5G8V2HBnM10RkENsT9UlkMPVKMHVLmALxjC1Jwggm + nxdTO+ew7RZlW1Hybwbw1dG/YtajZDEdedjiMjf/agAr/wWiXfwQ4v8O8d9HYgLjXgr7HmOfMIALxBTT + 6WaUpVCHJGpQzPZTFGyLYtZDlRgBHM18nGCPEfEQGmPCyiIVc70SW8oY82u1ONLmhlN9Qbh5IByHWddb + y5yl6eynqOnH4xlfksgvUhwxkeSIMR5nUNQn24BY076dr1vi7FBPTVQdq0A522xJnBpF1DjCAM6jlsoS + BrC0/u8VAzhaR2iRHsW8yZwqGcAs00SWZxLzegLzegK3YvRvHPPuVfP3qgF8Lbazz0UG2knLwSaHMSYw + H+Sy3+bGipG81E2M73m8ntxYR8YMR2TFLyIn8Sp+YAAn8lqpucSU8lcN4HTGi0z2w2zqs6uQRgJH87eR + cm4dUEAdWCqmac/UM9+T71KDCdTlWVBG/VggjOZoO2RG2CA/yg7lPG8NY11jpgZNGWppeYjWdGrPNEf0 + ZpAfMufsn8zAj3e0QiYM3IAAK4KCnBk0rPDzE6OAjRDGsDQS2EcvwctbTPeslkxfd3eV9NqDr319TfDy + NEgGsICrmzB/xVTQegkeHvythxF+3iaE8DgRRLSvGvF+FJ8BJM3xVnRleWOkwBcThV6YznPFTI4ZS7P0 + WMjQkvRpsZHvpZG/ZR7YUeqOnaWuhAt2lYsRwSbsLKEAK7uCciP2VZhxqN4Vxxo9caTWCwcq3LC72Iot + JNqbKG6355txoMoTx1v8cLTDD1tqKDRIxnvSVJIBXMSGJAzgVDaYwgQdC97MZEThUuAqGcBdxZ4Ud34Y + qg6QRgNPN0dieW8SlnbGU/gFUSB4oKeYAqrMj4JEiyJRkSG2SPMh4fCUIZWBPjvADgUkHaXBrLBAGWrY + 0Fq4HWJAm2FAW8VAt5mB8CDJ+g0Mircxwd6b74T7Cx0IGzxQJMODhBgJ/LNGGX7d44AXR5zwyqQCbyxV + 4e/rDPh0ixVfbXfHt9s8cHarB85v8sSFte44v9wZZ0j6vpvU47thDb7qV+CzLgd82GqDv9TK8I4Y/Vss + w5/yZXid53i/0h4f1Drhgxon/K1WjQ/rdNxq8X61Cm+W2+PdBgU+7DPiM4rssxuCcHlnKLA/GDhKHAvA + 5RNBwA3BOH8iAN+e9ME3pwJw5k6+/3EELgvT94lE4PFEXH4kAXgwDrg3EhfvCMa5k544e8CKMzsN+HaL + Fl+t0+LL5Wp8Pq/Hx8uN+MdqM77Y7Ipvd3vh3H4fXNjnjct7vICd7sA2d1zayO9WmPHJnAEfTJrw7rgZ + rzIB/K5Hh5+QiD7QoMSPSA5vJlE+XkkRWOyEI+Va3NjgiuO1bF8FaqxmcFrBACSwhthJcnMDyeQDdVo8 + Q8H91oQnPpjzxt/nvfHhKl98uNYX7650w6vLjHhhSoFfjNji6SGZhGdGF03g3y21kQzgd7a64+2tPnhh + hQd+PuOBx3ms23t1uL7DHkdaWfctMtzYL8Pd06zrBTmeWKvCr3cY8eJBE1693op3brbio9us+PIWI87c + oMOFoxqc36+VDODv9uvx1UE9vjxuwje3sw3c74tzT4fj7POxOPtyEs69no4Lr2fi3J9ScO6lOJz9bThO + /1xMdxyN7x5Iwt9OxODF64LxAAn3DW1ieiwDDlM8H23S4vbORQP45ZXu+Mv2EPx9dwT+vi8G7+2Kxi/m + XPHggA63NjniRIUdbm2miBv2w4trU/C3o5X48EQ5Pr25DJ/eUoQPjqXixY0+eG6tN55fHyDhd5v88fxW + N7xywBl/vcsd3z0fgPNv++L8x164dCYAANvUJbaxb0Nx+ctAXPzUHRf+YcXFv1pw8W0zLr1iAH5nwOVf + 6XDxaRPOPeaKcw+xHT3ohvOPeAA/9Sd4nJ8GS2sB47kw4A/RVwzg5EXj968ZixBG8FspwMsxuCSmi37U + CxfvcsHFm0y4cFyDc4eUOHdQhTOHVDh9UC0ZwN8dUeG74yqcY32cu9WMC/ezbT4gzGM/XPwxzyseePhx + HE7fGoW/HfTHM8vUuLlbhr31i2viHO5T4MiQHoeHTNg/7ILt3VasrCb5L3IiDJgp9cREkQ+60t3QkOiK + 6gRPJmV/ktkg5GeGISczEpk50UjLjUFKfiyS8hcN4PiCWMTlCcQjPj+R75Ml/LtRe3Xd3h+u3/t/wv8/ + BjA/EyOXJQM4jvcWgZQMYQB7Ii7ShFASsAA3WwS5Mmm7i+mgSWbcSXrFiGBhCAt4OiDcQy4hiCRNmL8+ + BhkS/W1REWWDiUx7HG8z4LervfHJ0SB8e6s3vrvbgtP3aXDmIdb1Q4xBP9bj09tV+Nv1crx70Abv7JDh + 3etk+MtyGeOLPf7ap8VLZTo8TFJw1MMO64w2WMJzTforMRasQ5e/GrW+SpT5a5AfpENuuBnZMVZkxjiT + DJiQzH1S/VVI83JEstUOqfx9MX/fQMI4RmK4OdWEU+Ue+HG9F37a6Ydf9frhN93eeKnXG28N+uJ99rN/ + TAXi8+Uh+GpzBL45EIMLd2UDP68EXm1hm+4BvhgHvp0Gzi0Dzs7j8vkVuHR+DXBmHfAd8c9VwP/M49wb + 4/j0F61458dleO54Oh7h8U4t9cK+QQvWMt4vZU6YKrfDcJEthpmPhigSh/NtmcflhALDBUp+psRggSPh + QNihn/lEYLjIDhMk5jPMJQsNzPEtekKLOeaYiTLWRZkMs1X20ijbjW0K7OjRYv+gEcdGXXD9pCtOjDnj + 6KAZ+3vM2NVFDtDjhV1DYdg+FIn1fRGYqvdBW54JFRTdheJpVrFWCV83kEQ1URDWkyALA7iKebmK39eS + ZDaJtZfSbNCTY4+hEiWma/VY1mLF0iYLZhsMWNpAYV2v4b1rcF2jGpsalZL5u4PY1+iEo8TNTQrc36rC + s30mvDTkgjfH3PDOiCveG/fAuzNeeGupN36/zAM/W2LF/aNqnOy2wY5OGTZ022FNjxMWepSY7SYp7tZj + otuM6V4KokE3zA+4YbbHiCWdKsz1qjA/yHIbUhJOWMntmjFe05QZm3ncLVPO2DRhkbB5Uhi+Ltg8ZcX6 + YT02jJj4uRvhjrWM6yuHhPFLjJixMGzCvDCBBxYN4Flh/vYYMN2hwyjzZE+pHVrzyFEybdCa5YCWdBXa + MwzoSDOhLdmA+hglqlmelSTJpRSgwgAuvGIAl/k7oipYg9owI2FGVaARZeSAYt3fPA8VclxJiC32SDGS + I5kpul1VKPA2osDXgixyy0RnNaKsCoTwux8awK5aCirCz+KAUDcKKDH6N8CIxEAzUoLYn/y1SGKfSw4k + 1wxn34rSIZFCIY5CKj5WjRgKCLF2lLR+FEl9Qryewkcv/ckTFSnW9xLCmccOsUcQuZkwf/2JUHK5ePLE + 9HQj8sgLS0rcUVHphcoqL5SVuknTJKck2/NYVwzg1EUDuCDPEeXFagmlhUoU5pIXsjwFxGjg0gIS/XxH + VBapUVfO8iIXaa7Wo6vJgL52sUYjRTjrbHLIwK0Ow2wLPe1O6Gp1QnebCn3iT/1OM4auGsA97tKU0nUU + 5JUlDigvtEMFOU4tj91YbUJrvRW9LZ4Y6xOjgMMwMRiKke4gdDd5o5mcuK7cirJCxikK/XSKh6RkB8IR + aRQR+QX8rtwbRSWeyC1wQ0a2BUnpeoSzr4nRv75BjK/ktAEUiOFiLWDy2SSWSUYWhRO5dgkFYBn5eyqP + m5hkJ32XnqGQRgFm57D8Uh2RkOiAmFhbggIs1ob1Y3PNAM4T02cXylBSSgFaaYP6enu0sQx6xVSmjA2T + FPZzU+5YNeeDNfN+WMu+t4bxa2GafWnYgim28bFOPUZbWV6NFvRXO6Oz2IJm3kdNop4woYW6pD3PH/Vp + HiijkMyhEMz0o8him6hiW2lKt7AvuKIrxwODxdQBFcFYVhuBeWKuIhCTJd7UNO6YK/bCygofrK8IwKby + AGwp8cN2YleRH/YUeGNfnjcOF/njaEkgTpSH4FRNOG6pj8SNdWE4UhVMrRKGfXUx2N+Rjq3tWVjemIah + ylh0lEShrTQO7RXCBF5ES1kCGgqjUZUXgpJ0H+SneaI0xx81ZeFsC3FsJ0nobU9Gb2cqOtuTUFMbzroI + RGauB5LYl5PEqHgxLXqOK1Ky3BDNcggKp+7zlcOFuVU8CBwY6MJ+4UP4/YsBHBTgCrEOcJC/K3y8qAvd + qQtddXCxqK4ZwAatPawGR3iYlZIBnB7jj/yEIOTGeCE5QBjAYokEG6T4sq342yM/UI6iUEeUUdRX81qa + s13RwmttJZpy3VGbzXYo/swTJmackkKYYjrGiTlVgQzGpNRoCv4oBeIiHBEt/hART7kzl4YGsV8T4aH8 + ThjASc7IzPZGVrYPMjK8kJBsRVyi8V8M4NgEI6LjqGGjtZLh60d96MdrExDvg0L/1QCOC+A1hGqYg6gh + 2X7qI9g+Y3WYjNdhIcmANewv67J0WJ5BfpeqRl+SArVRtiiNZNtmP8qPYiyM5jbeCcUpOhSlG5CXwTJL + Ukmmb0KignFMjkR+n54k/tw0EHqkJWqkP/bElNdi1LMwvmPC5ZIZnBSrkExgsU8KY1gSf58m/rTg+bNT + NchN06AgVZgLRlQwh1bmmVHB11W5FlTlWKQ/IJqFAcz23F3jxzbngWb2m9pcMf3zfzOA9WgsNaOtyhW9 + Dd4YbgvEUJuIMX5oa/RBE3N1bQ37V4UrCkosyBMzAlDPl3H/CoESM2qKDWgrM2Kwwohxxs4J5uiFfAds + og7bWSrHvmJb9ht73FJtj3sb5Hi8XYlf9+nwYr8Brwzq8SfmujemvfDKEh/qMCvu7tDgWL0D9tfIsbdO + jb2NRuxsNWEzeciqevEHiRxj5eQ0pbYYKOGWGKYeHuN55ipssZK/21CvwK52Aw52mbCvjb9vYf5tMmOV + ZAAbMVKpkwxgYZB016gxUK/FSL0aUy3M4e0qLO/UYGWXmNLZgLU8xtoeK2HhezPWivU2241YRT66qkWH + Vc3CTBEjgXVYzfi+qoM5mtcqDOA5fjbXrMdMiwFLqLWmqNGG65kHanneagU6qpzQVu2EjnolOpnHu5pU + LPvFEcE9rdynWY1+3odYP35q3BuTEz4Yn/LB6JQfhpb4oX9JALr5uoXfNY55oX7CC7XTPqhe4sutL5om + /NA64X8NnUuC0T0djC6BJYHonvElvAhPdM96oI2cpIMcrnPClcd1Qf+EC4YnnDE67szzu2BmzEUygJey + npb2WzHFcpgWBnArXze7YJzafITtoq/MFT3l7ugsc0dzgTOq05lTE2xRTo1enyiTDOD+dHtM5CuwUEHu + 02DF9hZn7G6zYD/L7gh1/0ne+wly2SPC/K20w44qB2xvYJtq1+I61tMC28FAxuJIJPFndEeyTBqN1CZG + vuVp0VnEds0221psQn2eGjVZCgkNeRo0F2nRQrQXaLm/Eq28nvYU8t8UO4ynO2FpFnlvrg4bc4T5y3aX + ocZ8mhPGyRfGhDGaYYfpbHssI0+YLyKKVVhGzJdqudVgltxa/NEqRucu5bXM5moxk63GEubXJcyj0zzH + lECamNrZjrDBdKqNZAAvTRcjbghuV+WosJq/X8VrXpmr5nsNlufwWvh6OT9fYB+ezSYfzuRxeO9LhHGb + 6yAZv/P5cqwQI3mLFFhTLCDHqiI51pUosK1Kh4Mtbjja4YP9TeScFYx3hSqexwnLsx0ww7IYi5ZhkDxh + lBxhlhxhNTnCNl7f/mw7nOAxb6nS4s5GK26sNWITOecU61aYUO3cr4nl1Jhsh7oU8iXyhMIYe+RGM16K + /+4Yn+MjNMxPammNXjHq1496y9tPAw8fJ7h4OcDqZQuTpw2M3raw+trBk3nGX5ruWY0IbmOv/CkcRx6Y + EKVEQgxzE2N4ZJgO4eSyoYGLiAzR83MrEuNckJLoTh7jwVzhhqh4K8KiDAhm7BcGsDB//UJVPMf3CCYn + jWfeEYgWDxZFirVlyUfJUxPiyV+TrEgS6xSSjybEqZAY68T35F/ij+U0FQrJwypzdGgS07Ayfo6Qw0ww + Rs5WGbCSvG8zeePhNhNuFyOAR/3xiyWheG4uBM8xDr64zAd/WOmNF5a74RezFjw6psbd/WI0rSNOtDnh + YLM99rY4YXerUprtYF0L22CdI8bEQxFXDODuKjW6qnXorTNhoMGC8VZnjDfpMdWkwdJW5rgWxjfGmo3E + NsabnfxsN/WEmL1pf5cehxn7bqRWumOQemjIDY+Pi8ED7vjpoDvjtCt+Sg315LALHqOGepRa6rFxdzw8 + 7ob7RxjD+/S4vVOJ2zoU+FG3CvcNGvDgqBkPT1rx4LgV9w4bcccAj9+jxyGed0uVEivZf6bZvnsTWW7U + KNkei//FJvraII68LtLfBuH8PCTYFkHk+MGhNuSeSmRmiCm4rcybWtaBmjmTdRQhpk+1Z/3bIko8YMX9 + 4mNZp/ytP7VCUKgdebA9QpmDw8lJomIdEEsem5rEdkrOWynWbWbe7C51RjdjSDfzZDdjRXc+OQJjVk+e + A7oybdGZZosu9on+TCeMCfOX/XWIMWQgkTkp1Q5jGXJMiFkAChgbinWYL1RLo/1nRH9n3JrndjX77Eb2 + uy3sq8L8FdjGPnrNAK5V4R7q24dbjMydLniQMfL2ZjHwQ4Pt5Q5YyGYfZX8TBlt/mgw9jAMd2Qq0M/60 + 5irIx5wIOfmyHVoyqKPTZRhifJgtVmJbgzNuHAjGvZPRuGciAjf3+Ujrf28tEoa0PXmwBltLDbiuzIJ1 + 1ANzpS4YKWGZFAoD2ITSTJ1kAIuH1aLJ4YQWCw4RXEspQaydLY0AJme/av4mp5qQSB4bl8w4QF6UIEB+ + KAzgTPKcqwZwCflSmRgBLEbmCbNXxJBYgUUDWBg6YkTfVQM4IdIe8USc2EYtGsBRYlRvBHkk+ZUw/YPJ + twLYJq6O/nX9wQjgELaFqwawGAUs1gMO4P7C2HWmVrayPYrf/LvpexXiOFdfCxNYMoCDhdlsC99Am2sG + sBj5K0am+3P/QLbrRZ4rZ+ySM3bZSQgTI96JWF57eoJGWj+2SjxgGCdHFmNyPo9fG2XD/KfCVKEeS5jj + JthGh/m6h3mhhZqwRhiyjL2NzFsDbJszRRpsoLbcRc5zvF6DWxgH7ms346kRP/x8MgxPjlDb1Jmxl210 + Y4YD1qTaY1+lM062BOAYsbPGFWKd+sEEG3SwrbVy257ugNZMR57PEY3pclQzx5dEyVBAjZnHMi0WUxAz + j7QxJwwS02ynq6m39+Tb4sZiOzxU6oCfM4+/QM71pwE93p4w4b1pPd5bosNrs1Y8NenB/GTEUJYcJeTd + sf4OCGaO8PO0g680XbN4MMQJsWJtdsbzqDDtDwxgh+9H/nrYSaN73S0yuJj+Fa7m7+Emlp5zkUnTQQsD + OZx6IZK5IJzHDA8Sy8c4IMTPFqH+rJ8AO0QHsZ0FOyKe2iKBMSctTn3NAC6+sv5vkTB/qdny2Z6zE9RI + ZVuNZ0yKZj1HhvybAczcJvJbeLBCwqLpK6ZWX4RoxzHR1BZsE6kpRmQLAzhLzDrE87GNlCQb2Uaoabhf + PttJEeugMtIGTYxt3UmOGCH3mMpmLGIcW03esqlMhZ21Ohxu98ANfcE42R2CPXXe2FgszH4txuPsMRxj + gxHq/OE4OwxxK9AXwzjDeu0QdcvXwgCuoyaq4r2VUtcVEfksi9z4RUNWWvc3ahHfG8C6/zCABeJDqPmE + 7hNgnv+hARwTppAM4PAgxhn2nyD2xzBuo9mvElmemSyb7Biel31XmLU51JdZjAVZ5B6Z0dSsjB0C2Qni + 4ZH/NIBzmXv+3QDO4O8zfwDpeIwtWVE8Do+ZJ/Qf41ZFlh61BVbUS1M/u0gGcGGSktdjj/Rw5rIQGbK5 + FX24nJ/XpqpQm+KEenKkRm6bUuXMKWpMV3tiz2Qm7tnRBpkQ80GBrkxcrggMcIGfnxgFbIKvnxgFrIef + r5GBxAhfySg2IzjIyv2t3F9sLQjwt8Lb0wBP9ytTQQvz918MYAN8PE3sSBZE8LjRvgbEiz/m/FTIoFCu + S3RGL4X3eL4PA4g3lhV4YCHPihUUnWuIzUXC7PXE7nJP7CzzxPZSd8INO4QJXOaCbYVGbC3QE0wkhVps + J+neUUKSQSJ0oMqKfeVW7C02Y2e+AZsylLgulYSGxPtAhQtONPvgZE8QiY4P1lV5YKrYDa3iifJYLYW7 + HMlBdihiYqnKMqMx3xmthRQuRRQdAsUe6CLa8l0xXBuE2Y5YLGmNRl+pH5qznCkQ3JnUfVBGspBDUpDO + RhTPABFtlSGGSODrVA8bZHvZIJ/Bv9STAZeNrYvBfZQVORchwyo2/u0MgocYaG/IcMTt2U64p0COexnc + Hii0wcNFNniyXIafN9jiN11yvDigwCsjCrw5o8aHa8z4fLMrvt7uhe+2eOH8Zk9cWM/tCjecW2rB6UkD + vh3R49sBDb7qVeCzTgf8vdkGfxajf3nM1yl4Xy+U4R0K4b/XOeHDBjX+p0GDDylk/1ajxbtlTnidZP/3 + OTL8ocQe75Lg/WPcFec2hAC7o4ADYcAx4kQQLl0fDJwKxcWbQnHmlmCcvSMMF34chYuPxgE/SV7E40m4 + /Egi8EA8cE8ELnK/c8c8cHafFad3mPDtZj2+WqPDF8u0+GSpHh8tNeLD5SZ8vMEFX+3wxdm9AbiwNxCX + 9wQAO3wAcc/r3fDlMgP+Pq3FOyMavDakxe/7VfhFhxMerLPHXTUOuI1C/mbe14kqBQ6VO+FYtRY3UnQc + qzFhN0XWOgq/NfEyrGVyWU/sIgG6odCBv9fg111GvE9R+/EqL3y21htfbPLHl9uC8NFmH/x5vTNeW6HH + S8sU+O2sHM/PyPGbJfYk3zZ4cd4Ob4i1mrd74oPdwXjjukC8uCoAv1jqh7sHdLi5wx43dMhwfacMd4zK + 8MCcDE+scsAz16nw+30m/OmYGe/cbMEHdzjjszst+Op2A87eqMX5I2qc36eR1gH+br8RXx8x4+sbrPj2 + Lk9897A/zj8bhXO/T8S5V9Nw7s0MnH8zE2deTcHZl+Nw5ncR+O7ZMJz5SSxOP5qKT29Lw2t7YvHwEk+c + 6jLhCIXE0XYLjlM8396lkwzgl1a4471twXh/Vzj+vCcaf9oajieWuOBH/Tpc3+yEQ1X23BpJxv3wqzVJ + ePtQOf5ysgIf3lyBD24qxGsHkvAUBciD02bcN2HGvWMWPDBtwcNLdXh2kwGv3+iCf/4yEGffCsK5j/xw + 6XQQALYpgTPhwFfBuPS5By5+4ozLHzrj0nvcvmrC5ReNuPxrvWQAn3/MFecf9MS5+11w7kFXXH7CF3jS + j20uEJd+yuP9ku31pUjgVbbFt4QBnAZ8kEFkLprA76YDr7FdPh+Jy0/5S+v6XrzNggvX63DhmBrnDqtx + mvj2oBLfHRImsAqnj6pw7qQW504Zce4ud5y9j+e/zwcX7mPbfIB9g2389B3R+OBQAH6yVIOTrOsdtWLK + bxvs61Vi/yAF0pAZ+0bcsWvQAxvanLGCxGl1vTtW1vpjttwHgzkuaE0mSU52QW2GDyoy/VGYGYCc9GBk + ZYcjPScSqXkxi6OAC+MQVxCD2NyYKwZwvLSmbryENAlXjdrEwvR/wdXP/zfE56X8C76fWvpfEV+wiIRC + /o64+j4uP+XfID4T3wuTOP2KAczPxfrFVwzg1NwIJGcGIiXFCwnRFiZoBQLc7RHkRvImGcByaZRvsMsV + U5ifh7jZIdSNgowIdJbB2yCDj57iz8cGVSQwM1kOuJHt+3cUxZ+wXr455YFvbjPimzvV+OYeFb67R4ev + 7tTi41NK/PWIHO/utcE7W2R4b70Mf10uw98n5fi7+MOxnEKUQuAAid5qjQyTJIBTvgpMhxswFGpEG1EX + ZkJ5hAXFMSRWcc4kBM5IkwxgLZJJPhN57bHi2nRM5rzWJuaGmSgl9ha44a4GfzzewVjRH4Tf9Pvi191u + eLHXDa8NuOOdIQ9ehzc+XxGEMzuicf4E2+2DBcBvqtm2W4APe4AvR8DgD1xYCpwnLiwn1vD1OuAs8fVK + 4IsV7E9zjA1D+OI37Xjv4Wr87lQWHt0ZhdtWBmLfkBVrm+RYUinDWKkMI0ViTWAiT5jAwgBWcavhZyoM + 5DsSDuhnzuq7YgCL0cITFUpprTwxBfTKFoNkAi+tV2Kywg6T5bbSGrsrG5ywkcR9Zy/z9ZAJxyfccP20 + O06OO0tTQR/sM+PAAAk848sBisu9EzHYOhaD+fZA9FBY16QoUBJti4pYOWqEAZyoRiOJWH08iRGJWzXJ + VwUFRFWkjJ9RcIiRBekU2xTfY2UKLKnRYUmVlvepwtJKJVZUOmJdDUV0rQLbmBN31Dlibz3jHK/zZKMC + tzUp8FCbBr/sNeGVQRe8NeKKd4dc8Ocxd/x52hNvz3nj97Nu+NmkEQ8MKnFDpw12ddpiYxfFUJcC810q + LOnUYqLTiLEuKya7XTDNup3pccV0pwlT7RRZPRT4zNkLQxosH1Jh5ZAaq0cpvBg/N0xasGHcgvWjZqwf + I/h644QzXxuxalBD6LBuhO9HXbB62ILlgyYegxj+3gBeKgzgfhNmew08lwFTbToMs156KaTa8mzRlGGL + hjSS8UQ5y1OF5gQtGuNUqAwTD7PZSA+0lVKIFvvaSOZvIbel/o6oCFKhiu27MliPMvK/Ii8FCjxIjN1J + YF0USDXZSe09xUAya3ZClqsGWeSPqS4axJlViLQIA9gRIVbHRQOY/UOsAezB3wQ6U8TwWJIB7G9EQqAJ + SUFGJPppkECemRCoQlKoFokRPFaEGNWhoHgXU7QpEUUiLxBLUi+MX/GUv1gTNJJiS0zxJhBCkS3W/RUG + cAB5XFgor5VtKVuIMHLAigpvVNd4o6bWF1WVnigsFGvjKhifbJCSJEN62uIU0EUFClSU6iSUUSwX5fP+ + s+yRwzLNTrdFbiZFVaY9inOcUFGkRnWJBg0VOrTVGdHdYsQA24BY33ZYrPnbq8FAlxLdbU7obFGgs1WJ + HjGiq9OM4R5njLBfDPZ6oJniq6pUjlLyxaJcGxT/P7S9dbhk1bU9erzc5bi7nzru7u7u7tbn9Gl3V6yb + poGmcXcJkACBS3JjxI2EhAgkIUYCtMt4Y+063TTk3vf93nvf+2N+u2pX1Za11pxzjBp7zVXogqpSOeor + tVKZ565GDwx1BWByMAJTQ5EY6w1Fb4s/Wus80VhpRYWYkZur4j3IkZrmRpMhM0uFfPF0frk3Snn/hYxL + OQXujMkmxCTIEBYl/oxYLVVGE4JwLLFsIslemljPN4t9m29gntIjMckF8SSACQlOfC2Or5AsMcmV+5wR + FydKbTuyT4QA7ITMDBfk5DqjsMAZJcUOKCt3kGYBNzS4oL1NhT5R1nTYgplJLyyS3K9fDMCm5UBsXwnB + jvUh2LQUgLXTHlhkDJuhn051WTHeZsVwgzt6K8zoKCLWzzahNYfvS4IwUBmO9nxfVHJ85IY6IptjoCTK + lfFER0JlRFuWGT15Hhgm1p+pCcNSYwzWNMVgrjYUU1WBmCz3xUJlINbWBGFDdQi2VAVja1kAdvD7u4v9 + sbfQBwcKfHFTaRBuqwjFXY1xuLctAfd3JOB0eyyO1ZOf1IbhcEMUDrQnY0dHOpZbUzFWF4/eqjh0Vyei + uy4ZPXUp6KV11SShvSIeDSURqMwNREmWD8rIr2rKQ9HeFM/xkoLB7jQM92dhoDcd9fWRKCkLRFaep33G + RKpOKuedmmlGSpY7om06BIXL4enrBLO7Ezw95AgIsJAH+tIvAukX3uSHdgE4NMReBjo0yEPifGL2r7en + 1i4A6+0CsFHnCnejHN4mFYK9dEiPCUCBLQgF8X5ID9Uh0Ze5j7woNYBxIIjkN9QNJZEyVFwTgPO9GYd8 + 0UFrL/JBI9u+MlMvlUoWwm8eiXN2vBxZjO9ZCRxrNjXShG/HyhEfJda4WiX4ETJEhcvsay7aDPRnKzKz + fWi+yMgQM7mssImSzzznNbMlk78mGqQZwGGMIyE8VjCPKezLAnB8qBxJ3OZFaVERS+Ier0NHnAbjSUYs + pZmxhe27g/6yK8+ALTk6LNMnRknaG2MYL6Ppq3Eu0tpP+bSCBPEgslpaQyqXlpokQ2qyAsnMaYn8LClR + Jom5WakaZNLSk4QArJJm/dpiZIgTT/VzzCZEuyJFzIjmZ5nJ4nsKvpchTYjAqfTxNBVy09TIT9NArAtc + Tv+sIgev4DVW51tQky/KMlrQSr/vZszrqQtCZ5UPWsssdtE3T4taUQa68FoJaC3qGT+ay03oqPFAf5Mf + RjtCMNoZKgnAHasCcGODL2PoNQHYiJJyKyprvVcFYB57VQAeJraaZFycEeUti2XYVa7AgTLm4BIXnKx0 + w+lqV3I6NzzHXPxGtwb/3U/+NWzEjyc88fO5QPxgLkiaXXZ/qwq3El8crHHD/joV9jO+7mlj/iRXWdek + oe/KMcnPxqrcMMLjjjL3jZW58NwuWKhywYY6ObY1qeiPBhztNEizSve1mrCzxYQNTSZJAB6r0aG/Uo3u + ShW6qxQY5HlGG1WYaVNjkZhmhde3vleLTcz1W/vcsXXAG9sGfbClzxNbuz2wudMqLTexoU2PjW06qUqK + EIA3dvEcnUZJAF7iZ0sdBizx/Au89vlWI6abiTPr9Riq06CX99FVLUOH2F4TgFtUNDX624T4uyoAdxsw + NeKN+ZlALLCNZhaDMLUQjAnayEIIBriveyYA7dN+aJnxRdOcPxrm/dFEa5/hGJgNQhe3wvoWwjAwv2ri + t4y/A4t+NB8MrPHl597cz9fzPhha8MLovBcm5zwxPeuJedrilAeWhAA8YsWaYXfMMufNdZuJQ6yY7fDE + VIs3Jhp8pJlzA3X+vEc/aU3qhmy7AFyZYBeAe7NdMV6gxEK5XloiZGebBw50eOBQuxlH2JY31ctxSx1x + OjnqzbTDNS44yPcHW5Q4zDy6p12F9Xw/ms1jMYdLIjDzuRCA27PdiIPEOmtatBUZ0F6sR3OBGg25Cpoc + TXkqtOQr0UxrIQ5ozRRLjTihLdG+Tt4I8+hMJjFljgqb6GObcnVY4fWvyVRgKtUZk2lOmMzilpxkvoQ4 + uVSFNWXCiP3KdNxqMC8JwCosEmcvFemlCnazPN5srlivV4FZnnNaGPPldIYTxPqdc8S3azKdJAF4bY4r + 1ufJsKVIi238/ZZCDTblq7Axl+MyTw0xG3hdPnEmj7vI+5rn94UIvJjvhmXiFiH8bixVYmM58WeFGluF + VSqxuUwuCcD76/S4tcMbJ3oCcVOLJ3ZW6rCpUI4V4p0l4p1FcU023mM0t5GOWEMMvoF9t4/7b6F/38Fj + 303/uafOgNu43ci2H41xQB9xhJjt1cC2rEt2RHWKM0oTiQfinJEb64Ys8qS0OPts3dAwBYJCVAgM1RCH + CPFXBS8/N1i9mcu8HWDwovk4wOInxBVnBIfKEMnfiJlYSaL8ZjRjZayCxxPrqIs1A/WMp3rEhGsQFaJB + JI8ZG65DQqwZSQliFrAHUlO8mEO9mC88ESetm2+UBOCgSDUCI5TSusDB4XYBOCyKeDTFXTJRCjo2Tov4 + WC2xqZ4xnfg1SRyXOXH1ocVE8cd+vCvjtytjvRz5GeQ3uVo0FBvRU0UMU0ssU23ATC3zSbMO21vt5c5P + d5jxOOPLi6P+eG0qAP9FH/7OMrnIOj98a8ULr81b8NSIKKHshjs6XHBLqyuOtLjgUBv9oUOFfR1q8j05 + lhvcbhCAiT1FjGGs6Wf8HGgyYqTFiPFmLWZaNFjTIcpAa7GRsWYb/W0PY9kBYtNDfSYc6TfjJtqxfitO + DbnjwWEvPDniixcn/PHVCT+8Pu6PN2lvjPvitQlfvDLhg5cmvGi8B3Kp58Y98MSAEQ92KfFAl10AfnrE + iBcYO15kLHlh1gNPT5rw6JgB9w/qcbJXh6OMe7tr6T/kpGPkhU0R9v9dxSzgjAAHpBLXJRKr2ojzo0Md + EMFtOLfxMa7ISNEyLxog1tVMT1RLpVil3Mp8mky8kU4ukEvMmJ9jIWYlBohyJhZwZB87IoJjMop9FpPg + IuHZVJsTc7gryun/jcyZney7LvpfN/2wu0iN3kLi+CI5+ord0Ffggl76XE+GI3oznDGSp8Qo48lAmiP6 + GOOG6BPDYj9j0mQ+fZS/XxBVAcgh5oQATH9fJp/dlOeKHUVK7KFP7SEH2V0il8qpH6pS4lidEvc0qPF4 + sx7PtRnwQrsFj7focVetEkerXLGFnGEhw17+uZ8+18djdmeRCzImdIjZv/Tp9kLmmAJXdOQ6oTPLAQM0 + 6SGtUp6jyYoHBkPx7HQsnpmMwqPDgbidnORoBfN2BWNwrZ741sjYa8WeBm+sr/bADHnHIDlUM7FERRZ5 + lpi9S84eF+2GiAi2LfFbKH0pjBZ5TQAmHk+7JgCnm4jf6Ksp5IPkqMKSia3S01XIJr4pWBWAK4jfa4nB + qvi6RMx8Jf8oTLTbdQGYGEkIwFniwTlipVTxEAYtmRjTFk/8uCoAR/HaIomzQiPts3+FSCtKOttn9Doi + kNw4grFECL8JqcbV9X+FAOwmibn/mwB8bcavMHEsMatYmBCYA8Us33BX+yxgvr5WEjpImvnrIAnA4cFO + iAp1QQx5bKx4mJn7hYnxHcHxHcsxmkacLGaOlolS2PGMo6sCcC1x6BC53izz2zxx2RSx3FiRjuNSg5Ys + GWpSxX8rjsxtrlKp6Hnmox0VGhyt0eAUx9MjxEfPEst8bSwYb83F4bWZWJxucccRUSI43RnrGL/38ri3 + NPrjtrZg7GdeX8s8NCSEX461dubMrhwZOvM41vLk5GTMr+muqEkSD/U7SuWfq8TsUyEWcnxOc2yu47jf + neeEY8Rr9xO3vUAM9yYx4Ts9avxsxIBfz5rw/oIBv1tjwLsr3nhtIRDHujwwxbFcHuOMhCC7ABzsx3b1 + c5ZEWiGYJoqYHG9EfLQe0WJ9eGJ7UQL6ugBM3iIEYCHwWg00PfMKTWzdjavir9VuQgAW3w8N5LgRS8aE + qbjl8Zh/Ish5QjkGwgI4XgKdEBPCfiMHig93g40YPp34PTdNK83ILc13R/mq+Cv6T5R+zk5USqXKE8SD + KWH8vahOEMl7IDeRbFX4FWLzjQJwNHOdVLo+Ri4JwEmiSlqqHjmZFuRLArA4l/WLAnC4A0o5fmriiW2S + 3TBA/DKZy/HC8SHirHjgZkcF8XWdDkfaPHFLVyDjcBCxgBfWFRgxS84xEu+CYXL8QXL8gTjGDtpgvKMk + /opc30nroLUybtbzu9X0uVLG3iLyO0mEFYI4OWpughB9hQAsZgNrbxCAdciIYRxgzEgUM6olAVgJG7mb + sOsC8KolcF88vyvW/o2kH0UEOSKa2wT6WEqEC4+v5PHFrF8hAosHjkXZaRmy45iTiUEy6T9ZjPV5yUL8 + ZY7+ggCs4etVAZj87poAnBUrfm+3rOsmjueCbHEs8r1SxsCqXAP5lDuaSj3RTBMCcDGPnR3rjPQIB6Sw + P7LF7PgEV5QxdlXx/NUpbqhPdZOE4JYMObqJ72br/XB4NhePHeyCQ3x8MCIjfREe7k0C74WgIHcGEDMC + pTLQBgYSM/ebERJEEmwLRFZGFHJz4pBHy0iLQFSEF8m+EIDtZZ59vbTw8RQCsBCDtZIIHOBj5GC2Ii7I + zCRrkEp9pQWRbIYQJBP8jOT5Y7YwEGtLg7Ch1B+bi70ITK3YxZs81hKJY83hOFzlh71lXkxe7thdauXW + yuBhwT4mij0MSrvowDuYBPcwge4rUeFQBQcdwf/BEg32EdjuJTDekeGGnWmu2J+rxq1VZtzZ5o+7+kJx + vC8Ch7qjsK0tBqOlAagl8c+mY6SGOpF4a6Qk0VJoRUeJB3pKvdApFmAWZDiLZJdBU5SEnu+Iw3x7PPrK + A9CUbUF7vhd6SwJRKQYnHTHdn+DC0wFxDBCxtHiajcEgjcEgh4GjhMG/jt/pZNAeYmCeiWLyJijezuB2 + mKTgeIYr7mEwfLjQDY8XOuPZIhe8WOqEr1Y64a1GV3yrW47vDSjx4xElfjWrw4cb3fHxTl98ticAZ3f6 + 49J2f1ze7IeLa71wgYDvzIQen43o8akkAKvw9x43fCgE4Hoh+jrg3Qpuab+rd8FfSBT/SqL5904T/kqy + +cd6DX5O0v1OjhPeZOB9iwDlxyTFH5K4XdgaBRxOAG6LB07GAXdF48qpCOC+GFx9KAaXHqE9EY+rLyTh + 6qvpwOtZwGsZuPKVNO5LBZ5OBh6NweV7wnDuNk+cPcRr3WvCZzsMUunnfyzq8dcFPT6YM+J38wb8XpR3 + 3hGAz/aH4eLhKFw5GIGre4NxeWcAzmz2wl/mdfjt5Oqi70MKfKPPDV9td8JjNQ64r9oR9xLU3keQeg8J + /Z2NatxNAn2q2YRj1RocZlvvJPjZQbC1k/cpZmQfIpE6VeSE5/nd7xCE/mHZEx9v88a/d/nhzEGxznE4 + /nkkBB/u88Zvd1rx6x0m/Gq7Ee/SfrZFgx+vl+GnmxT4zW4z/njQHx/dEoPfH4zGT7eG45vLgXhmRIeH + +1zw4KADHh5zwJPzDnhpnQO+vt0N3znEdhfi7ykLfv+wFR89wT5+3IRPH9Lhwj0qXDiuwsWjalw4osfZ + m9lud3jizH3eOPdkEM6/HI7L30zE5R9n4sIvsnHhV7k4/6scnPl5Os7+KAlnvxuDT9+KxrmvJeH8qzn4 + 9OkivH8yB19ZCsK9A1bc0W3ByR53nOoyE3AbJAH4nXU++PXeCLx3KBq/PBiDb24NwZPTFtwzqMOxdiUO + MfHeSgJy37A/vrLOhneOlOBXd9Xgt6dr8Ys7i/CN/TY8vuCBuzj+bm5zwy0tcpwgoD89JMML6/R455gn + /vJKCM78NALnPgjFxU85jq7EAKCdjwWkWcC+uPIPL1z9C+0PtJ9bceX7Zlz+hh4XXzPh0kueuPysLy4+ + 6YFzT/Cz532AF/xx5cUAXH4pEFdeD8bVb3HM/oBjVcwCfj8D+GM28GEu8IEQgbn9Ffd93wa8EYZLz/jg + 0kPuuHjKgMt3G3DhDi3O3q7BJ7cpcWZ1FvD54xpc5P4Ld7If7rPi7CP0ucf8OO7tAvDVZxJx5pE4vH88 + hO2rZ9s643CrIw50uuHmYYLjEZKkcQIlkp9DEwRGBFC7B4Kxpy8MO7oisKEpCDPlnhjMNaMv3wO9ZcFo + LQ1BZW4AirODmLDDkZMXhaxCxuiSRKSWJiKxKB4J+fGwFSQhqTAJiQUpdpMEVyHS2gXd/+cCcNoXLLno + f7brM45LhAgsxN90u4nPvmD8TBz32gzhVQE46T8E4DCC/UCCcQ/EhmkQ7iujCfFXrDFPIO5OEEzQFWR1 + QqgHSYOHI8JpYWI/Y68fgZm/1gFJ3gS6UY5Yk+uGezstUgnzvxwNxCd3euDT04yPD2jsIjB97N/36fC3 + u9X48JgSf7hJht/vd8EfdzniT5uc8dc1jJHjnvg5SfjTBFyHePwVhQOmCP5mg+RYE2fGTIIHhpN80GHz + QkOiF6qSPFGUaEV2vAkZBJapoSqk+Loi0eqIeF5bGo9RwZzRFeSEdQR9x6t98VxPJN4cicI3x8LwVr83 + 3uo24lu9Zvx4wIJ3h6z4w5QX/rE+CBcOc5zdw3j6YhHwrVrg123An/uAj4eAs5PApTngIu3SMm0DX2+i + T9HO8PW/1wF/W8KV30/j7M+G8Pdvd+O3L9fi+w8W4uvHM/HYNubLYS1WGh2xWMd7ZJ4QAvBIgTAhAGtI + FPQYJZgfJiEd4r4BxsyBIhKKYmeMlsswXavCYpMW60gS1rcbJVthnpmvc5NspUmOzW0q7OrR4dCQAbeO + m3Fyxgt3znrijgkLjg0ZceugCbeN++DYTAhum4vGzfPxODhnw4aBMAxVu6MhU44qsa4iwVB9khyNYv0n + EromEviGOAXqCWKrCZzEGibNNuZeMcuD8X6ARHa82AUzFUrMkSgvlMqwXOpKQOuMHSTF+2plJKxuOFwv + I3lhzGqW454WUe5Iga906/CNfhN+MuSBX4144Dfsk/fHPPE7sUTAgj++P++FN6eNeH5EhdO9Ljja44qd + zN0bu5VY06XGdIcWE51GjAlhisRkstsLUyRRU4y70516zPaqsThIgD2qwzra+hEtNoxqsGnMiE3jJmm7 + cZSvx0zYzBi9ZdKCjWN6rB1UYnlAjXVstw3DFqwMm7BWEnsNki2NGLE0zC0/F7OA1wyavyAAD1fJ0VPs + itZsMevCGbUE5KKEtpj520DAWkEiUErcUh7uhEoC5TISzzKC5xKSmHISpUoSnQrivfJgFUoClCj2laNw + VQDO8SC5NjkjWSceenBCmoFEx6RAupX+YCYoN6kQy/dRVpIkq/yLAjC3IVY3RHuTXPtpYAvQSxgzMViH + xEANEoOUSKJfJYerpXI/0hOeQgiK4TaWW44DYaLskUR8xBpfJBMx0XYBOCKMhJBk4JoALLbR0S5Ioz8W + FnqiktivpjZAEoDr6rmt9UVFhRWFJEHZ2S7ITHdETpYzCvJkKC/VoqbKiJpqIyrL9NL7ogK5JA5nptLf + E52QleqI/CwCeJLpShLl+nIdWuuM6GwxoJ/4a6hHzPIVpZ/VGOSY6emQo4vjrrNNvNbYBeBBT0yM+HLr + i/ZGPWrL3VBe7ITiPEeaE0qJa6rK2G+VerTWWNDZ4ImB9iCM9oRxG4iOeh800X/qyiwoLdAiP1uJTJIH + UZI5PUMhCcA5+QZJBC4s9kRBkSdyCjyRkWtFPAloRAzbi+NBCMB+bLNrpaDj4l2RlKJEMomfjX4YR6IS + He2IKGJdYREkreIPnqhIkleSmjgSoJgYIQA7kXs4S2sAZ2e5ISfXhe3rgiLGnNJSxshKR9TRH1uaVejp + 1mOQsXCSPjc76Y01QgRe8MPO9WHYsykC29eHYsOCL1YmPbEwYqU/WTHZacVYszv6q81oZ9xq5311F3tj + oCIIwzVh6Cj0RhmJXiaxufizsJyErSlVh2ZhaTp0koQPFvlgvDoYM/URmKwLxUhlIAbL/TBa4YepKjE7 + OAgLlQFYUxaA5WJfEmAfbCRH2JrngZ353tgnZgJXheJ0dyru76P1JvF1PG5tDMXh2iDsqw/F1vpwrGuK + xWJrAiabbRhusqGvIRFd9TZ01yegR2xrE9BZE4eWyijUlQSjMt8XZTx+FXlVC3/f1RqP/q5kDPVnYLAv + HQ0NkSjmZ1l57pIAnCT9aaaFLYX+k2ZCFMn0NQHYSL5ipa+Jh3qDAoXg60d+6I3gwM8FYDH7NyTQnZzP + RB5I/uehsQvAuhsFYAW8jCoEiJn9QVZkRfsgL9YHmaEGaW18m58TUv1JkANdkB/qgmJysXJJADaiNccb + nXkc1wW+aOF91ZFrldEX8xnjs2M5PuJIqG8QgLMTtUinP9vo75+XQVMgRhKBxZ8dvM9EA1KSzUhOsdDY + Dsli/V8L28Au+t5o0pqNNgPbRYfIOB1CY5SSfVkATgiVIyVMhULm9Zo4I5rj9ei36THHc2zMZJ/nuGNv + ngV7803YkWfAOnLJiRQ1GiMdUSlK8HHcF9HEGlD59INCmwJ5zF+ZNrsIkMz7TUmWM1bJkCREXPpdWpJK + KpWYnqhBmm1VBGZME2t6xUW5SjOVkhnrxH6xplgajycE4ZQEN6QnK5Ah/kygf+bQPwsz1CgWa03m6FGR + y3iVa0I1Oa8oB91C7NlZ7Y+umgC0V/mgucyK2gI9qvMY3/J1qL1BAK4p4D1JZaCt6G30w3B7MIZoPc0B + aGtkH3KfmAFcXeXBcWhCQbGBWysqqomPaq4JwCZ0VZoxXClmAGuxUGyfzbWnUo2D5Srcwhx9d7Ua99Uo + 8EidAs8wX321XTzoq8W3Bwz44bg3fjIXjO9OB+EZYqVTzWrcVCPj792wq0qFnXUG7Gi2YGurBWubDJgj + v52mTdZpMF6npV+rMF6mwGSpGxYq5NhA7LKN2GVvix4HWnQ42GrCniYj9xHHNJiIX4wYrdahh79pL5Gh + nb/rrVJguF6xKgCrsdylwTrGqk09PG+/D7YNBWHnaDC2DwRge68vNnd6YkObGRsY9+0CsKiSQqzUYZQw + 01qBlzqYw4kLljsskgA806zHGK93pE6PgRoNeqrl6BBWK0c3Y2Nvq0YSf+0mXttFYFECenrUG4uzQVha + CMHcUghml0IxtSYEY7ThhSD0zwegZ84P7fO+aKU101ponTMB6JrlZ8LmAjC4GIqha7aGfb3kT/PF8JKP + tB1d649x2tiKPybX+mJq2Zfn8sH8Gh+sWWC8nvbE8sTnAvBCvxUL4mE44qHpdua1Zk+MNvJY9b52AbiG + saDUA/WrArCYAdya7oTBAgUWq9h+zG072ryxp8MbB9mmB1uNONCoxP4qZ+wrd8LBCkdp9u8RYrkjHDdH + 27U42qXDvnY1NjfIMZXviMFMBwwSF/YxT3fmEANlukkzT+vTuGVubMpVSuUwm7JlaM6RS9sGgZFSnVHD + nF6fQItzRGOsA9piHdHD9yNJLphOdcPaHI6DbC2WeP0LmSpMM8dOZMgwRgwwmu2GGY71eTHjt0zN3KGl + CQFYh7liFRaIMRbEDF3mrJk8FSbFDOJsBaazOM4k8dftugA8m+6AedpSphOWs1ywPleGbcTpO+ibO4r1 + 2JJPDJmrwIZsFTbmqPi5CmtpyzzuNQF4gRxpSYi4YiYv/W5zuRobK7TYUqnFdtpW+uPWMjm2EC/vqdbi + plYP3NruI60DvI2/2ZDninU5LliX64pNhTxGngbrec/rGcfWJ7tgS5IjDuW44Y5yDU5V6nBnhRonq9gf + pUqspDlimO0nSoO2CPFXiADs77JERxTEOyJX/PkayzhGHJcYTQzCGB8UIiMGUUhln/0CVfDxY97xcYXV + ywkmL0cYyK2MNCG8+AaIkqluiBFrtzPfpREnZjJnZMUyJjKG5iYbaCakMpbHhWoQFaRGZKCasV7L2CqE + ASNs5HFJNitziCdS0ryZQzwRY7OvBywEYP8wBQJp1wRgUR46NsHMfGJGbLwRsXF6xMfqkBBnYFwnjk3g + lnlP4FJhNiE6CgwV74zUROa6FBljtIZx1oj2Cgv6ay3kPQbGK/KoJjW2NGtxuEmDk4xRp2j3t2jxVLcB + r5Gn/vcaX3xrifxxjSdemjTi4X457u50xa0tLjjc7Mq45ob9Yq3zDjV2E19uanLFmnrnGwRgFQbqdYzp + BvTReuq1xB5KDDWoMcXzLraRSzBmreN1bGSs3Nluxp5uC/b1WXCgz4rD3N7S546T/R64p98TDw1444lB + b7xA3PrqWADemAjE6zQhWL8y4Y8XRj3xPO3ZUQ88NWzFo7163N+uxP2dSkkAfor85XkhAM96SQLwc9Nm + PMX7eoTc5/SwDncQMx9t1Umz0uboo31CUAgjZyGmKySmzyN3yQ13QA5zbxqxaDwxazT3x4Y6whblQgxB + fJFsX4NTbDNEvk2QS/mymHmxusIXtTWBxKUWpKapEElcKx6CDCMmiWCfRUkPMhLHxjkgK8kZxWlyae3y + 1nw9OujHncyTopyyfXkdIQDLMCBE4HyxnrkTuum3/UL8zZKhl74gKhL0kiuI1/2MdyP0m8l8OWby3TBL + H5vJcsR8hqNUCnoT9+1gHNlTypzJ7e4SxQ0CsOoLAvCzLUY8VK/G8UoX7C12wJo0B0wkOUjrcfbR7zqT + HdDBuNKeo0QrOUobr7W9yA1dBc7ozuV3shwwSlvMd8Zm3sPNzIeP9gfhxckovDAejsf7fHC62YCTzKF3 + NehxJ3Pm7Y1m3Mq4frjFB5trrJivMGGQ2KGJsawsXYEcxodUYro4sUazEIDpn6HEWcKi6Oux19YAXhWA + 04UALDAssVAieUZiMjkH+0ksl5EpSrCmaiQBuCrLhJYiLzTmW1EtHngj5ilLU0sPE+YnkZd9SQDOFkJ/ + mh45xPwCb4kHMmJiyD2Jq4QAHBEpeI8oyeyAgFAnu/Ab5ozAcBcEE39FxisRn2xEQqoJ0YmiWpIoDy/n + 5843lIB25G+d4R9C4zbwBvPjZz78jjdNrAccyO+EhrshhBw1ONgZATyGsEB+L2hVAI7i72L4PVHiPI7X + EcHPI7k/huM9itcZG+5ILEgeznsq4H3mxTCWcr/wiSpyuOsCMG2SfTLMsdqTR0yX5oKaZEfU2BzRyvE8 + yLwlHjzaUarGzcQep5uNeKzdhOe6PfDqUADenI3Fa3MJuI+5WFTW3Mixu4a5ej1z1i7yzIP15Gg1Xphj + zuljbG/neGtnDu3KU6C7UI2OfBVamYuamNfqeO66FLGMJvMA/UnM/h0TuS3HQVpL/uYyN9xTrcDjxD2v + EHO93aLAD/vF2r9G/HpGCMDif3sTfr3RD28Q69ze78c8q0NpFNvJ3xnh/nKE+NnFXTHTV5R9TmLcT2Gs + tsWa+F4rPQQkhNtw5pfQIBmC+d0AX/ajO/OJ0QFmvQM5j30r3ov9Pp6O8GXu8aMF+rkh2F/M9iVnCGG+ + ooUz/4QFuCDE35HndkR4oBPzjDPjkCti2X+xHCdJ4oGURJU0C7gkl/w824wi8rZcEZfYj2KmuhCA49mv + InZF04SYGcVxIiwyTDz4KsRfjt0IewloIQAL8TdOPBzP/CnMJioaJGmQmW5ETpZFEoAryFWrMi3EWXqU + kUeI9iqLcuIYcEFbqhxDOWpMkwfME48sl2ixnrhlK3HCLuajncTEO2utfO+BtfnE8akKDJHX9EY7oS+G + sSPG4br1cAz2xnO7KgC3sY+bmONryIUqeP9F9LUC5uW8OCGmqpGXoEOuTYecBCEAi9nAdvHXLgDrkRGj + xTUBWMz+TWYuTpTMLv5KAjBfJ0hbBRL4XdHeot1iyT+F74g1gNOixQzdawKwDsVJOvJOUXbaLgCn8z7S + ie+ECHxtLeAvCsBqSQDOXRWAxfczGD8yY2XI5DGEpV83F6TRMhNckJPEPJ+uJgczoq7YAw2lnpLVMdcU + MVZl83upQgCmZUYzjxELFca7oJT9UpHkRhxKnJqhQgt9uZP8bLohAAfn8/HI4R44JCVFMID5M7D6ICzU + TuSDSMrtZaANCA0mgBECcKAR6akRqKrIQktTiWQVZRkklX4I8DNwYGvgJ2YBC9HXQw1Pkn9Pkn+x/q+/ + l55ORaATaEZSsAFpwTpkBLHzgpVoSbJiNMePYDYQ64oDsanEn2DRhwnLEwcqfXGiLVr6E2RPqRe2kixv + ziVYzdNhc44OW7k9IK0DLMzE1wYcrjDgSKUeN1UZcZRA+UCRCntzZNhH20NQvSfDGYfzlDjOz082e+NE + pz9u6QrBgY4IEsBYjJWHoC7VjGyS+bQwJ4l412Tp0cwk31FiRVeJB1rEur5MFuWJbiizuUkzgoUAvKYr + EQOVQSQDYgawD/rLg1GTYkReBJ1WlBnxckACA0GCh30WsLAUAtAsAtBSBuY6BuYOBt5BBuApduQiAa+Y + BbybAfEIycQdvP77mcwfzXfFMwWueKnYGV+rcMV/kbx8q0OBd3qV+MmQGu9N6/HndV74eJs/PtsZgLPc + Xtrsj8sb/HBxjRcuzFhxhsDoMwKjT4e1+GRAjX/2yPCnNmf8vtER79c64Le1jvhdnRM+bJHj710G/Itg + 7ZMBL/yr1xMfMnH/rNgF3yIp+iqv76sMwO9U8LdDFpzdFAUcsAG3JQEnE4C74nDlHu57MBZXH+PrJ+Jx + +ZlE4OU04PVs4M1cXH09ExdfTscVIQA/lQw8HIsrd4fi7FEPfLrXiE93GvDvLQb8Y0WHv88b8JdpA347 + oce741q8O2PAH9b54J/bQ3B2XxQu7InAhR3BOLfFD/9cseL302q8O6bAj4Zl+M6gHG/2uuLlDmc8ynu8 + l3Z/kwwPdmhxf4cG97braEacatbh1nI3HMxzwi4mll0EW0L83Us7wvf3FTvipUY13hk04o88x792uOPT + PV44dzgAZ24OxSe3hOBvR/zwp0Pe+JD2p8N2+8MBd/x2N6+d9scDnvjL0WD847ZYbmPx7vYIfHttAF4a + 1+PJYTc8Ne6EZ+cc8NKKA97Y5ozv7lfg58f0eP8eKz54yB0fPemBj59hnzxlxGcPa3DhHqW0Lu2FI2qc + P2LAuVvccfZOH5x/KBDnnw3Dha9F48p3UnDl5zm4+Os8nP9NPs69l4czv8zA2Z+m4Ow7cfj0G7E4+0Yy + zn81H58+V4r378rDV5aDce8ggXq3FXd2u+O+Xg88PmDG1yYt+P46P/yabf6rgzH48b5ovLouAPcxyd7W + r8FBkoadDTIcIBm4fcAHjy3G4M29efjJyRr8/FQtvnesAC/vjMM9U+44zLG7rcoJ26tcsK/OFbe0ueKx + OT3eZpv99ulA/Ot7ETjzu3Cc+zgCVy4KATgWuBgHnI3E1U/8ceVf3rj6Nx/gQ27fdceVH5px8Rs6nH/N + iCsvenK8+UgC8PnHLLj8tCeuPuONK8/64pIQhl/2w5WvhwLf4Rj9CcftexyXQgD+c67dPsgHfpMF/CgR + V9/i2HrWBxcetuL8PQZcvseEC3cbcPakDp8c0+CzWzU4e1yLS8d1uHxCi4t36HDmbhPO3O/B39D3Hg3B + 1adjeA0J+OThaLx3PAQvEojcQd872sm41KfETaMmHB614uC4Nw5O+OHQdCiOzkXjyHQsDo5FY/9gJHZ0 + BmNtnRdmGfumqr0x3RSOofoINBUFSLN+inPDkJ8XiZzCOGSWJiKtVJR+jkd8vhCBE5FYYBeAbQWpsBWl + S3athPOXBeBr+/83SyxI+4LZZxX/7yatO3yD/Y+f/48C8LU1gK8JwOFIzwxCRrI3CZoB0QEqRBC0hfso + IEpABzPOBppoFkeEeLhIAnAY426oxUEShn21NBVjMN9XM94uZbnhPvr+txkf/3zID5/cQZ++W8++0+Gz + B7Q0PT6914iPTzEOnTThb8cN+OvNGvzjsAL/3KPGJ5s98O/FYPyy0RtPEizs4/GXFQ6YZYxfIOFfl+KJ + pYwATGWHkLQFEED7oSrFCwUJJhJODZIJJpMJJBMJDhN4fUIAzuK21s8Rg1EybMlhvqr3xYv9kXh7PArf + HA/G6z0mvNahxNtdany/V4uf9+nxuwkr/rbii3OHOJ7vYZx9Pgf4ZgXwqybgT53Ax71g0AfOTwDnJulH + 88ClFW7Xc9+qfbYW+Nci8NdZnH9/DJ/9YgD/+G4n/vh6M375TBXevD0dp1d8sG9QhY3tzpirJgAXs3tJ + AEfyXDFOojBeZMRYoQ7DhSoMFcgxWESSUOSE4RJXjFWQqNZpsKZFj/UdJulPTfsfm/ZZwGtom9o02Nal + x+5+Iw4NmXDzuBm3M1bcPmHGbcN6HO3R4Cjv97ZxLxyfDcats+E4Oh+DQ/Px2DAQjKFqMxrS3VCdSKKS + 6Io65ur6BAIhmwxNBLcNBHJCAK4haGpgrm0hGekSpJrxfSjbERMktHMlorSWHGtEubsCR2ziPe4ud8Kh + ahluqnHDTXUyHKuXk8QqcH+LEo+3KfFqtx7f7DXhJwPu+BXtN/0W/HbYyn7xwnuzogylF745a8ErjPMP + DShxS68cu7s5PtiPc21qjLVoMNJqwFC7FYNtHhhp98RYuzvG2y2YaDdgin0916fBEttg7agBK0NarAxq + sW5Qb7chg2Trh43YwFiyUZR4HtJhsU+B+R45FtluS2y3xT6xT5gWi71iZrEG8/18PcA+EMIwr3lxwCQJ + wOPNKozUKtFbqkBrjisa0uwCcA2BZ308CVmMXQAuox9VhDuhKsoN5QTN5cFOKCWBKSexqSCRKg2UoSRA + jiJfmWR2AZig3VOJNJMLknWOSKKl6Pna4IZkI/3BoEC8SYk4kwox7mpEupNwWdzgZyCp0pAMk2AFmkls + PWWI9VVLs4DjA7RICFDDFkiQLwnAJHARYq0XtfSEZxyx3bWnXUWpZyEEfy4A62FLIMHj55ERJGQk0MKE + 8Cs9UR3miDgB1jMNKC72RnV1oCQA19b5263GB5UV7ighYc7Lk0vibz7brJgktqqCAL7awu9YUEmsWlFG + Ekf/yMt2QyoJbzzJTzLxVGaKEwpIpktylagq1qKxyoC2RgO624zo79RjkH4x2KPDAMdNd7sc7a0ytJPk + drYqMSBmCQ+tCsBDfvyNGfWVSpQXkzjl2ctNF9NHy4uJa4mPG3hNTZXEtnXekigjtk2V7qgtM6Oq0IjC + HBIcIfymifV/FcjIVCIrW4XsPD2ycg3IzbfQrJIAnEncK566j4xnu5EYSgJwgIP0Z4SYERET54aERLZz + kviDzBWhHC+hofxs1UT7XhPZY/m5vbyaXQhOpg8LETo7S4bcXNdVAdgRpaWOqKh0Rh19sbGRBKdDj95u + E4YHrBgfdsf0mFgz2RtbV0Kxe1OEZFvXBmED9y2Ne2Cu34rJLvpWqwUDNUa0sj/aSGB7yjzRX+nHOBKI + Vt5jIa8nhTg9lVZGEtpIMteQpERjMr/PsdBX4IHhCrHsSwC6y7zRWuSOlgLyBRK2vlIfDJLTDBd5YazA + C5P5npjN5XXRVnKs2Jznhe1FfjhQHYZTA5m4bzgT9w6k4O6+BNzcEooDdQEk0IFYqQ7AQn0o5luiMd2e + wLiQiMHWZHQ3xqO7LkayrtoYdNZGo70mCs2V5DIlAajieavL/NAg7qUhnOMkFn1dNvT1JKGpKQql5QHI + yXdH6nUBWIO4RPoSiX6MTY/QKBV8Alxh9nCCxeoGL3I8fz8LggPts3+DAj2lB4dDrgvAFmn9X29P8j93 + uwAshN9rArDFqICHQQlfE32Z30kJtSI7ygvpIUIAdkOinxOSaWkBTsgRS+UIAThOjdpkA5ozPdCa6Ynm + bE/UZ7mjIlVPjqYioXYjmSZhpm9mJ9jF3yz6c0Y8c6v4Y4M+HyVKP4e60sRW/CEis//RnmhEcrIZNpuB + ZuJ7MeOX778k/gpLSBJ/2BvZLkZEJxgRGquifS4ARzHOxDKX20LFGv8qFEfpUB9nQlu8ASP87WKqFVuy + PLGHfX+AfrOfvHJ3ngEbyTGnktVojnCSHkqqiHZCSQz5Z6xdAM5PkCOXsTYt1hU2+oQQgEUJaJsQhMWf + Psxpqbzn9ES7AJyeSI6dqEUqt0lsAyH+SqUqY2VISVDxu2rp+3YBmMdNom8ns904prNTVShIU6IgXY3S + TB0qiD0kETjPhNoCM5rLPNBR7YfOGn+0VzFelFpRk69HVa4W1eTk4nVNgRB/+T5fhYYSexnongZfDLQF + op/W2SSqDHijmVZX44kKYtki+l1eAfuzyITSCg/6tRCArWgst0gz3EYYO2fI75fLtdhSpcP+aj2OcHu8 + WofT9UY82KDDow0aPN2kwsutKrzWrsJ/devw3RFvfH8mGP81HoAneizk/TocrFFiR7kcW8pV2MLjbG6y + YFOrB9Y2WzDXZMBMk5FmwnSjCZN1ekyUqzFVosBChRIbaohNmvTYQ9vbqMM+fnd3gxFbeQ3raLM1BgxX + atFVIkdLoQtaiXm6iXnsArAGi50aLNPWMpZvJKfa0u+HbcNh2DUWgV1DYdjZH4StXT7Y0OaODS1mbGgl + TmplPhcPyq0KwOuIm9Z1WrDSZcVSB6+Zn0/w/oeqNRiq06GP19hVrWA/0WoVktg70Ka7Lvxes35y3lFR + XWRVAF5eCsficjgWVsIxuzYMk8uhmFgKxsiaAAwtBqB3jR+6Fn3RseiD9gVf9Mz5ontWbP0kE6Lv8HKI + 3ZaCuPWj+WB0rRB/fTGx3h9T6/wxze0Mt3Mr/pjn/sVlXyzxmGtnvaUKDaIE9OKwheaBhQFPqVLDWKsV + w41WDNR7orfWm+aDrkpvtBQzp2arUZlCXJLshA4hnhazfes9sK3ND3u6/bG/m1yq20sSgPcTs+2tdMSu + EgfsK3fAoVpnHCGGu6VNi1u7jbiZGO5ghxY7iXuWymWYIhYcz3PBSL4cPblySQBuSCF2THJGfRrxEN83 + My81k0OImVFNma6oJ5asSSC3YE4Xa+TV0wTObKZ1xDlIa9uN8vcLvO6lbOKubOKvLBWmaeOZCoxmcbxk + yzDJfDQrHnqgLTJfLxIzrCF2WCjRYp74er5Ihzni7UnihbEMN/5Wjin+XgjAM3w/myFmA/I8mU7S7F9R + 9nlttis2EpvsLjNgV5nJLgDnqRmDZNjAHLuRv1+fpcBaUao6m5gxRy6Jvwv8jRCA15US91eImb8abnXY + UqnDdtrWSg22lMqxiVhjZ4Uo/WjCwXoz/YzHznfDSrYzz+uGbWJSBjHQwTpP7K+wYo+ozpdn/5/utlIN + HmAfPyRKx9bocYL+fahUjZV0Jwyx3brFjDP2cR37uizZmfzJATncL2bfpDG2JUsPuyil9dj9g2XwDZbD + jxhQrF/v42sXgD28nWEhzzJ7OsLs5QBPX0cEBDhLf8DHh/AY4XJkRSuRy2PlM4cUMJ4Wp5lRnOGBbJsZ + CUIADlAi0k+F6CA1470OMeGiPDSxZ6yRGJK5NM1bEoFjEy2SABzIvOAfJkdAqBxBYUq7ABypRkS0DlHR + ekTF6BEbKwRgsaawEH7Fa+LYeGFCACaejWO8J7ZKjCceoqWR0xSI0pCFeqnKQneNCb1sr8EqNabrldjY + qMaBBhVu4/ZYrRwnqu0V714Zccfb8z54a94Dr85Y8dSwBvf1yHCi3RVHm1xxqFmshS3HvlY59jOG7uR2 + Y4ML1tQ5YZrHGKtRYFha+1ePPsbIHmLTLvK59ko3DNSpMNGoxRy5neB3a+rV9EMtNjcbsaXNhO1dJuwi + 3toj1lyn3dxFPtdpxp20ezrMeKTXHc8M+uLlMSH8BuErE4F4YcwPTw264/E+Mx7tM+GhHgPu7VDhVKuC + WyUe7lPjCfKdZyfd8cKUXQB+ftqMZ6eNeGragEcm9bh/lPyZv99Tp5bWp5zNVWAw2RVtzK1NbMt6Gy3J + VfqzvCKV+VaUa44lHwl3YH87IDHcERnEGAWiXHCaVhIRc4gBi7N0xFZeaK4PQltLOGqqfYn7iZvihPjn + gBDm6vA4Yo5YJ2JZR+Zu4nseuyBZhmqxTiO/256vQWf+DQIwsXk/udYA840Qg3uJd0Up3B76Zw/9uTPF + LpB1cNspKhOkOWKQPj2ax3hBbD8lBGBy2Pls+nuOMzbny7BTEoDV2FOswp4SJfaWK3GwUsFx8bkA/Eyb + AU8xp4kHqW4mrt5OPj+bSD5MTtIrHpCmr4kHpVsYV1rIC1oK1GhjjusocUMP+X1fngOGxexf2rp8Z57T + FbfXG/BkXwBenYhgn4bg6V5PSRh8gHnz/hYDTjebpIqLd7R74+Z2H2zhGJ5nnBvIU6AxnbyJfSREEFHS + NjaCPC/cBWFhMml2f3A4ORp9PTaOvE0IwOkmZKSbyVVMEoZNIBZKEAIwMU0KsU0Kub8QO7PJP4rYh5XZ + ZrSX+fIevKXKJnViLfkcEyqJeYrFTGH+Ji9ZeV0AzknVoiDThPwMo1SSWuCuGF5XVCSvi9vwGwTgYF5r + EE3M8A2NliGMPDOKmCuBuDIhxUTsSJ8nLgsnBxXfCQgjXwp1QmA4eRGxZAixZFCEDCFC4F01IfhKArCf + A/yFyBvK8xHTCgsKdoY/uZawwCAeh5xLVKuSRKwQJ8SRw8aTu0aTX8XwswSO6ziaLcoZWSnEqZl65Cfy + HqMcpQchCvmdylAhACslAXiO2GycMXqAnLSTuaaeY6822RGNiS4ci64YSpNjjrljZ7Eat1ZrcR/jwmOt + ZjxDbPJSny9en4zCa7MJuL/dVxKAN3DcznM8zSc5kQMxjxSasSaf+CXFVRpnbUIAzuC4J37sZo7roI+0 + Mkc1MS81ZMhQn8ocwLHZzO+K2fCzHHNbipxwU5UCd9PHH23S4oVmNV5v1eBbHRr8aECPn48Z8aspA34z + b8Afls14b5M/3lgOw4mhIMyWGlHMvovxcUSYL9tdmL8MEcwfMRFqJK4KwEmxxP+RjNWrInBkmFgLXomw + EI7HQOYb5hUPiwNMBgdyHftWvPf1Zv/6uiDAzxUBvq4I4rGFCZE5LFDO8yik2cZibeAQfzE72Anhgc6I + ZF9GhdjFyCiOj7hwciNR6YLjrzDLiKJMo33mL8e0EH+FCQHRFuksCcBipreYyRrOsRPO40QI/rMqAn9Z + AI4lT7L/HyIeiJcjgdwgNUWH7HSeJ9eKijxP1OZ4oJb+VcmcWMHzVJCf1AoBOE2BoTwtpond54uNWCrR + YYW5XMTazWViNrAG67hvIZdYmvxCiL7tHGdtEY7o4LW2RzOmCWzErbAuxs8uxp1O5vbWWAc08n01+V05 + /awwyhX5zM155F559KE85ki7APx56We7+CvWAL4mADMO8J5TotQ0LZLF8gt8fW0NYGnmL83G7yXwe7H0 + QzFzOoFbG9soNYb8KFYuCcB5Ng2KEvUoJR8tSFLzXHJJAE7jPX1ZAC5IJY+SjPGElkdfyxEP8sbbv58W + w6304Jpd+E1ljhEmxN9UWgbbNlusT04uJjhYTTHbv4T9QBNVmYoYp7IT+Bv6bWqkA+/VkdfI80sisJOk + Udawb5qztGhl23cUGjHVFIQDawrx8E19cLDZwhEdHYDISL8bBGB3mhlCAA4JIskVM4L99UhJCkNTQzGG + B1ska6wvQnxMoCQA+3iq4eetJelXw8Oqgru7GlZuPaxq+HpoEeptQKw/iXaQAelBemQGqpFPYNZCpxrN + 8iG49MfaPPFUvDe2FnhhV7EXDlX64aZaXmyFL7bkmrCSQeLEm1lOV2ApVYF1GUppHeDjzYG4qyMUd3UG + 4y6SyztafHCi0Qu3VZtwtFSLo0Vq3FSowdFCJY7mK3Abk+Ad1QYmJwtubnDHrhp3rCOpnS32QXeuF6qT + TMgigEwPEw3phiqet5GN11poQiuTRH2WBpXJbiiKI0lnJ4l1gRe7ErHSn4aR2lC05Xuiu9iPQCwUdUxI + hVFMOnTAVAbuZG8HpPjaLdmHHebviLxgJ1SQ+DdEMqGzEwdpUxzwCwxuK3SCTXSC3Qx2t6Q54xSBwMME + BE8x0b9AYvK1Mje8RXD3rRYl3ulU4qcDGvxmwoC/LHnh443++GxLAM4y0F3a4I8rK364vOiNCyRYZwiI + PhvSSvbpoAYf98jxlw5X/KnFBR82O+ODZlf8uVWGv3dp8a9+K7/njbMj/vh0wA9/YnAX5Z+/lemA1xmo + X2cA/l65M35DgPUvksYrexKAW5KBEzZJAL56TwzwUBzwRAKuPJmAy2Kd31fSgTeycfWtXFx9IwsXX8nA + 5edTgCeTpO9euSsEZw6545Odevxriw5/W6fFR2t0+OusAR8wkP+C9/nDPiV+NKzGr+as+JBk8h9bQ/HJ + 1jD8e1MA/rniiT/N6fHeuBw/H5XjhyMyfGdEibeHFPhan5xgxwWPtrvh8R6tJGg+NmAk+KT1mHEfieBt + Zc44kO2APUxUQvjdy/s8QDvGRPMI7/UVgurvDxrxwYoJ/9phwqd7rDh72Adnbg7AmVuD8O/beA23+dMC + 8I9V++stfvjzUS/86bAn/nzEF3+/ORT/uDUaHx2Jxns7I/AOyfDXJg14kdf8lTkXvLrWCW9udcJ3hPh7 + qxa/u9uMvzzkgb8/6YF/PeuBT55jvzxjwJlH1LhwjwLnb6MdVuHcESPO3+qBc3f54cIjIbjwUjQufj0e + V7+fhqu/zsOl9wtx/neFOPd+Ac68l4Wz76bh7I8T8em3E3DmzVSc+2o+/vFkIX55LB0vrgnE6QErThC0 + n+y04sF+Lzw97I43pj3xww0BeG9/DN49EI/v7ozCM/PeuL1fhwPdSmwngdjSqMB2koHD3Z44PROJr2zL + xHePVeGdk1V466Y8PL01FsfG3bGjRYWVclf6oAybK9ywr94Np8f1eHW3J376ENvsv9in70Xis79F4NI5 + jqUrscCleOBcJK6eCcCVT32kUtBX/+SNq7/xwJWfmHHhW3qcf8OAqy964srTXrj4hDsuPG7BJbadeH/l + aR9cesob55/3xqVXeIy3w3D1B7G4+i7H7R8y7eLvX/KAD/OB39oF4Mv/FYmzz9EPHrHg7D1GXDzN89xr + Zjuz/2/X49NjOpy7XYfLx/W4yu2lO3Q4e5cRZ0674/yDvuyLIJ4/ChefjMU/H4zAL28LwgtrLTjBcXyo + 0xUHelU4NGLCfhK0vaPe2DvuhwMzoTi6EIdbFhNwZCoWR0YisX8gBNvafLChyQMrrX7Y0BONhc5Y9FeF + oCE/EJV5oSgtiERBcRyyy2xIL7EhsSBOEoDj82yw5SfzfQoSCtOu2zVB98bZvZIQe4PY+z/Z/y8CsNh/ + XQBO/x8E4LhVATgYWal+SI23Ii5Ei0h/BSJ8Cca8CZ6tjvAX6/xanBDsSVC9OgtYzP4NMjnAR8weVBAE + 8ztVBMpr0lxwX6se315wx58P+OCTE+44cxfH0H0GnL1fT2M/3mvBJ6fp56d9ceYeH3x2lxfO3WGW1im/ + tD8QZzdH45ftfng8xg17CP6WtQ5YG8BxzXyytSAIG0siMVsShb7sYIJYf5SneiGL4CQxVIZ4fxfY/FyQ + 4OmIOF6fKAGd60GyFeaK6SQNdhdbcVe9D57tCcabIyF4e8QXX2tX4+UmF7ze4opvtcvww04FfjvG2L/s + gU/3B+PyXfSVZxhn3y4EflED/LEZ+FsHrn7cA3w2SBNC8BR9SZSCFiIw7QLt/DJwdhH49ywu/WWCsWIY + 5345iH//oA8fvdWGHz1ahJcOx+KeFY5RMbO0wQETJXYBeJjkc5RgXRKACwwYKVqdBUwyKGb/jjBvjJN4 + ztbrsNQqyhlasEGUNaSJPzdXCNhXWrXY2mXAjl4L9gyYcGDIxHFvxM3DBtzMuH+kl+S1XY5DXWrcPGLF + zRPECZNBODwThgOz0VjX64+BCh3qUp1RlWC3GlotgZkkAhPYXhOAa5lzG0nKRVm5nlRHDKSLJ5gdMUUC + u1Aow5oCGZbzxKwFB2zNd8BB5oVbquXEFjLpT5Xba2U41aDAw80qPNWqwlc79fhmtxE/7rXil7z+93pM + eK/fjN+OeuA30z74+bwP3mGcfHPKHU+NGHC8T4XdvI+1rQpMNysx3EiS1aRDf7MZfc1WDLS4Y5gEeazV + gtFWA8Y71JjpEbOAtdKM3TUDWqzp5es+tidtuV+PtcxlK0IIHjZKttyvxRzz+wxjzFSHHNMdPFeHUrIZ + jhlhU8K6SPaYDxeZ14QALGYBz3URsLeoMVpH0E4g35brhoY0Vwn0VxP71BC81pLgVpL8VpBAiW11tByV + JKwVJKjlIa52C5ahmL5Q5OeGQh8h/toF4HwfgnZPJdLNrkjWOSFR68gtCb/BFYkGGRIMJCRGgnOLGrEe + GkR5KCUBWPi2N33Mi+ZrFLP8XRHto0SsH79Hiw8g2Q4kuA8hUQ8Va8BokEgTQF/MAhSE59pTr9cEYFEG + +ssCcCjJszBRUktYJO/RZiPozjajpESUf7YLwGL9X8mqve0CcIkeBflK5OfIUMRtBd/XVlnRUOuO+loP + VFeYUFFmQEkhcXAOiUki/Z4EKIGWQsyXRSKcm+GGMpLeunIdWmoN0nq+vW1iJrABQz1GDHRp0NmmQBux + WluTDO3NcvTRb4QAPD7sS/NHf5cHmmq1qCyVozjfCfnENEXEj6WF7KMSLWpL9WgoM6O50h0tQswpc0dd + iRlV9F9RAjY/U4nMNBKSVLsALGb/ZueokUU8LATgrByz3fLckc6tLZV9FO+G8GhnBJB8+vk7SH9GhAly + LdqZbRcXr0J4pCtCSFCvrat8zext7HKdhMaRYCYkuJJ7kPRmkoBlyyUBuID+WVTojNISZ1RUcDzW0qfr + 1Winj3SyjXo69Ojr1mO034iZMQ+pFPSO9UIEjpS2m+Z9sXbSE/MD7phk7JlgLBqo1aO5SIa2Yg16yq3S + GpP9lT5ozNYhl8RbPLyZ7OmAYsaMuiQZ6hJlaEhWoDVDi94C+mqpNzqLPdFArlKRpUN5pgY1OWxfvm/O + NqGd1p1lwUC2O8Zz3DEjicDu2FDgjS0lAdhdE8Z4kIY7hzJw52AycUE8jrSFYk99ALbS1tb5Y74xBHOt + UZhsj8NYRwJGOpLR32pDX1Msuuuj0FkTia66KHTURaK1OgSNFYGoL/NBQ6U/GqoD0Ew+1doYxrEUga6O + eLS2RqOyOgj5hR7Mp/YS0InJ9CGbCjGJWsQmGRBJEu0XrIDVy+ULAnBQoLdd/F0VgKVZwEEeCA6wSOv/ + etFfPcn/3M3K6wKwWAPYpJfDopPDQydDoIX+R/6YGmJGkr8WNl83qQS0WAc4xc8RWeRGRfRDIQDXJOml + WcBifebaVBMqUwwkuUrkMP5kRIsnsF0lATgnQYUsXn+G+GMwmuSesUis+xsR4oKwIOKAVYtgXLomACcl + C+HXSDNLZhd7jV8Sf43XBeDoBDELWI8wnuPLAnBcuBqJYUpk0Eoitcw1JnTEMR8mWbCYYsGWdCv2ZFtx + IM8s2Z4cAzZlGjCTpEan4IERjqih/4iSdEVxHOvxrtLaxjn0K/F0vy3GSRKAk5LlvFaF9EekXchVII3+ + JQTgjCSdZGnJBiQnaMjT3SQB2MaclxSnQDLb7XOTIzWRMTiJ/p1E/xYzYCQBWIWSTC3KsvUo5zVKf0Dk + W9BU6oH2Kl9JAG6r9EJjiUUSfitzyItpQgiuYtyyG/PsahnobuKXvtYAyToa/dBay99We6Gm0oKSYiN9 + Wosc/jYvX4+iUivKyj1QU+GBFsam/hoPjDF2zlURJ1QZsLPOjIO1JtxCu4Ov72OufIR58vFmI55u0eAl + coqvtCjwVeKJtwc88d/jgXhl2A8Pd1twrFmPPdX2crXrmNPWV+mxrtGCdS0eWGK+nWfunWkRZsVMkwVT + dUZMlmswVazCfLkS66o02NpgwO5GWj2Pxde76o3Ywu+tZQyZFiJMGfuyWIaWAhe0lcrQU8ncXq/CbDvz + ayfzdYcwPdZ3uWNTry+2SAJwFPaORGH3YDi29wRgU4cnNjLvb2gRpaCJkWjXHpbbSD62vsuKFf5+scNM + 7GDAaK0GA1VqDDLe99bw/FVKtPM+O+uUbHM9BtoZE4mtbhSABzuYL3qZ58d8sGYmCCtrI7G8EomldZFY + XBeB+XXhmFsXgumVIEyuDcLI2gAMLPuhb8kXPWt80b/gi15imt4FH/RzO7IchNG1wasWiNEVX5o3xtb7 + YGKd3SZXfDC9zhcz/Gxure91AXiZx1vhMdbOemENeeHCCP2FuGme+Wys04xB9m1vvRC6LOis9qB5oa2c + 8bbQhOospSQA1xPzdTJHjJcQC9WRW3aQQ/UF4VC/P3GjD460E0+KJTyqnLCnjLxeCMB1LjjcpMCtHToc + I167tceAm7oNONhpxLZGPZYrlJgvVWKyiO0oSlFKArArc4CLdD4hVDRmuKAlwz47WGybUhzRkCD+uLRb + E62ZOLMl1kEqadhrc8RwsgtmMtVYyBLirwazWWpMMr+O8V5GaMPEBWP5KsyU6jBfJtZh1GOh3IBFYoc1 + xA7zxQbpj/lp4u0J5sbRdGLrDBkmM4j1MmWY4+uFLDesyXbFMnH5crYLVmjrctywaVUA3l1mwk4eY2uu + CpuINzamybApXS4JwSv8/RKPs5AtwyJx32K+XCr/vLZEiQ0VasmEALyZ+GSrmAlMH9lcosDGIhdsI97Y + W63FrgruK3DleZ2wnOmILfz9vhoTbm71xfGOIPqiP26u88JN9OtbKnW4m370RLcPnurzxQOt7ri92oAD + pVoss30H2G5dSc5oIf6s43WWpLgwJgrx14Gx3kl6uCWB2DM6UomgMCH+usEnSCYJwP4BKmIRJXz8ZPD2 + dYWHjwvcvZ25dYSvvzNCglwRGyKTuFhGhBz5sWoUxWtQxhxYkWZEdY4n45ofCpM8+B0tov0UCPeRIzJQ + iehgDSKJM8XakDFROtjizUhJ8fqCABwQroQfj+3PcwTeKAKHq4iN1MRDGkRH6xijdasisNiKctA6JPA6 + 7CYEYNn1WcDJNmLEdGLLAp1UJr+tyohOtncfx+sY8dBKvQJ76xQ4Srulxk2a1XlvgxwvDVnx1qw3Xp9x + x3PkIA/3KXGq0w23tbrSD2Q41KzAfsbOveQk+9qU2Nkiw4Z6Z6ypdcIs+c6EKGdP/jbcZJR4SjfjYGcd + sVelDP21HL/1Gsw067DImDQvHvRlXFpmnFzboMW6Zi028rNN3G5tJq9t0mBvkxqHGtW4qVGDO1p1eKDb + A08O+eLpEX88QXu034v7jLinTYs7ybFOtihxoskNJ1rkuKddgQd7NXh82ISnJ6x4bsoDz/O+np8x4flZ + A56dM+DJGQMemzbj/jF33Eqf3kef3spxtUycN52vxgT9Z5Q4fIR4eIhjubdUg1b6ek0esTvHW3o08Qix + bArzclGqCmXM1SXESkI0qywQD1h6o6UxiNgzTKoAVFBoIEZwRmCEA4JiHBHKPB7OY4gqNwLfZ5CL5hPP + VolZWZIArEMnc19XITkWc8xAqQqD5YzjzCF99LW+AgW6GAs6M13RmeYIsf61EGLFti2FPpFmX5d3iNc7 + nueGCfLVqVwnzOU6Y22uC7YUCGHuBgGYtrdchQMV5LE19hLQj7Xo8TRzxBONOpyukuNosQO2kCvMpPLY + Qvyln7XQz6SYxjjTmKOS1jpvL1Oiq0KGvlJnDBc4YCrHgfHGAdsKnHGQnP9UvQHP9wfg6xOReH0sBF8Z + 8MYLve54gud7oFHJvG3A6VYr7urwZvz1wZZqI+ZKNOgnbxKxtZDtKESVhEgnSQQT69mGh5KX0YeCw+TS + TP8Y4q/EJO11ATgtlTiOGDbepkR8oh0jpSTJiYOIn4ihMm0KaTZeOfuxtcSb+Zm8p9gdjUXkZwXuqJXw + O/uXfS3N2BOCjRDXiI3y0g3SLGBRaUWsAxwT6SzxFSH+XhOAg8MdPxd+Y3iNq+KvwNO2VIskAIvKOhGx + Kukz8Z0w4jPpu8S5UcRrkXEaaZmR8CjGmVULJoYVFZWECBxAXHyjACxEXyH+BgQ6XheAQ/nd2FBnxIU4 + SmuY2kIdEB/EMcixnMixKSxF4Evyl7IcI8e6Arkco/nh5Ij8bjVtOFPBHKPDbKEOI9kKdDO/tTLf1SU5 + oD7ZiWNQhq4UGcbSFMwVjBfMu8eIp+5rMOGRJhP72YTnujzx6mg4vjodhweYjw+xf9encXxyXE0zD84x + hokZof2ilDBzZCvHWauYBcx81MlxJmbIi4ckWkSVDebFBuYmKe9y/HfQxjIcsFLghP1VCpxs0uMhjuPn + iJFeadPh6+0afIs8+Uf9Wvx0RI9fTujw61kdfr9ktM8AXhuBO4ZDmGNNKApnX5LfhXi5ItjbFUHkImGB + MimuJ8TopVnASXFmxEfRvyN1kggcTXwfFbEqBIcopZm9Yqav1eQAsygFza23B/uE+4NFaWmaEH6vvRbl + o4WFB3EM8FxCABZ2jaNEBrlIAnB0qCu3jlJVgnhyhBRy4hwhKKaRm4rZvxyP0sObkhBMTC/wPu/n2jq2 + YUGO0vHCg13Ie8QDsOK+RJUzN0kE/lwI5pgWRi4lHsAWpaAz0wwoyDZLAnB9nhcasugjqQZU0b+qEmTS + f0EtqXIMErtPFZk4XoxY5JhZLFJjifl+mfFribFikf04Tk7RRx9sDSPP4b00cIw18zpbopwkayXvEdYe + 60zOxDFAvNTCMdHI99W8pnJeWxFzfAF5V75U7nnVviQAX1v7V4i/6WKCDTGBsDT2o7BU5tiUGB2So9X2 + Wb80sTSQEH+/IACzfRLZLmmMMZnkTUIAzqcfF5OLCitM4rnJuyQBONpJilXZcSK+/6cAXJjG7zKeZIuH + bdl/qbwnwedETLpmwh+Fpca7SJae6EI+xmMRJ5blss0Zo6oZq4SJB3KL0smZbDLp3Kn03WvnFyJwATFC + OTliLTmcmLQqKpt1FlsxxTx1cLkEj9wyCAdbQgRiY4LZ4YEID/MhifdaFYCFmRDob5DM11uDxPhgdLRW + Y35mSLKO1iqCkRD4+5kksi9KPrtblTCb5DCZFDAaSfRFuS+S/CB3AhwfPZL9jcgI1CMrUIMCArMmdsZI + mifmsr2xyIG1NtOMDRxsO4s8cbjSD4erApmwvLCByXaRxHSeiXOBQUdsl1MJVqq8cFdnOB4eScQTk8l4 + fDQRDw5E4nRHIE42eBJAmnGC4PKOShNOVhpxShiTzKlaI26v0WM/Aey6AgImBqBuDvZGaXo7Bw+TjCgB + ncWGLWNH1rIDGnJ0HPxaVPO7JQxW+UzmokxXTylJS18aNo/mYKIxEp1FJLrlJD91kWjKdkcpg3o+B1Im + nTCTAVr8qZG5anlMasVRrqghqGtOcEE3B/0wA+AMA+BcsiMWmXgX2bGb6AgHGDBvT3XCfRnOeCLLGc/l + OOFVksyvM/B9q16N75PQ/bRbg98OG/CXOU98vNYPn60PwBmSrQskWZdI2q7Me+PypBfODZtxdlAv2ZkB + HT7uUeJvnXL8rUOBv3cq+FqFv/NY/+434zMSsPOjfrQAfDboj7+QlL5LQvvdbEd8g8H3zUwHfK/CFb/q + MuLvC0G4uD0WuCkJOJ4InOTr07RHbHYB+Kl4XH7Ohiti3d+vZ0kC8OU3snD55QxceS6F3+HvHozDlZPB + +HS/GR9v0eDv69T486ISH8xq8OdJA37Ha/4Bgd83mlzw3+2u+OGQWNzdE39c8sdHK4H465IP/jRrxm/G + Vfj5sAt+POyKH40p8M6kFt+Z0uMbk3qCET1embDglRlvvDznL9lLU2IdEh883mPEnZXOuIlg5hDv73C6 + A44QZN1MO5XvgKeqZfgaAez3+w34cFmHf+/QSTOVzx7ywNmbfHDhuD/OnQgzH0xmAAD/9ElEQVTCWd7D + mTt5H3eGSvbxHcH4Oz/72y1++OtRX/ztaBA+OhyKDw+E4ldbA/G9NZ74+rSJwFyNN5fk+OYWGb6/V4Zf + 3qrDH+4y4a8PeODjx73xybOe+OxFCz57wYQzz+hw5lGlJACfPSbD2SN2AfjCbZ64cCoAlx4Px+VX43D5 + bbbrT7KA94tw+YNSXPywFBc+KMa534nZwFm48PNUnH0nGWfezsCZr+bhz4/k4EdHbHhu3hd39xpxrE2P + O9pMeJTA/IUxb7w954OfbA7Fe/vi8YsDNry9OQIPjFpxpFuFHe1KbGolSWwh2CfY3t1uwe3joXhiYzLe + vKkUbx8rw8sHs/DQxigcFOVICQRnit0wW0CiWeCCTWXOuK1Pg6c3WfDtO73w/tdC8M9fROPff4rCuU+j + 7bN/L3M8XYikBePSGY7tf3njyke033vh6i/cceEdIy7+lwlXX3IHnvbA5cctuPCoCRcfs+LKE+40T+7z + xLmn3XH+BR9cfD0Ql78TiUs/S8Dl99Nw+cMsXPlLLq5+mIsr72fi8o8Tcf6tcHz2vC8+fdQdnwrx9z53 + XHrQAxdOu+PMSfbFCSPOn9BfF4AvntDis5McG3eZceZe+tyD/jj/WDjOPRaFv90Xip/eHIBnly04NqDG + /i6CJ97zvkEjdpOg7aTP7Rzxwb6pUNy0GIdjy4m4ZS4eN09E4OhoCA72+2N3rw92DQRh33g8tg3bMNsa + hfaiANQXBqOqOAqlZXHIK0tAZrENyflxSMiNQ1xugiQA3yj+CvuykPv/3lZLS3/JvizwXhd6V/d/2WxF + GZIlFKdKdk0ATi1OREZRAjJyI5GZHYqcjCBkJHrCFmGUynKF+SkJ4EiyzQTENwjAYbRwL5frwrC3mkBa + 5oAYrQMq/RywwHh7miT0uwtWfLTfF2eOc1ycNOCSJPKbaBacYz+fvdebfR6Myw/Trx4MxeUHfHDlLm/g + 1jCc352Ad3sD8RhJx06zA9ZaHLGJQH97gR/21sdiR1MyZitj0ZUXjOp0EsUkK5LFmlMBToj25rUQfMa4 + OyBK74AkAscif+aWeBWWsow4WO6Fe5p88VSnL14f9MObg+54mcT8hRoHvFzniK83OuE7rc741bAGHyya + 8PFuxus7wnFVPFDzZjZ9vxz4bQ2u/KkZl/7Whqv/6sHlf/Xh8plRXBWzgC8v3WBrpH1Xzszi0scTuPjR + GC59MIYLvx7Gpz/ow+9fqcW3T2fj2f0ROL5gxqYOZ8xWiNm/dgF4OEeJ0QIDxgpMGCEQlATgIpkkAo+U + yjFeqfqCALy5xyqZJAKLWTGdBuzos2DPoCf20Rf2DRiwnwD+YI8KBzvdsJ92sN0Nh5inDg+wbYat0lrZ + +yeCsHcyDMud3uglca4mSSln3iwjgKzgtop5VcxarYuXXReAG6Kc0Uzg2cl83p/sjJFUR0xmMPfmOGMp + X4aVXFG2zgkbSWp35Dji5nIZTpA0n6xV4k5hNXLcV6vAY00aPNeixlfbtHi7XYcfdBrxc9q7vJ93u/V4 + b9CC9ya8pHWAf8I89S3Gz5cm3XEHfV7EyzWNbhivF3+gyNFTp0Y3iXNXvQk9DWb0N4iZLyYMNmox3KLC + RAfbr0+L+X4d5nq1mOvk6y6DZAs9xEm9Bqzp12OJ7bbE3L7Qo8ZUhwwTrS4YbXbGaJPrdRtvsdsobazN + jccWIjDBO9t1oZ9kXBKAtdKfy5IAnCNHQ5pMmlldEeOICrZfVaQbqgnMq0lgK2NkqIlRoTqK5CBChkqC + 6TIS1JJgNxQFuKLQ3w35vjKagkYQ76NBlqcaaWYZEvUkqVpnJAoBWC9m/34uAMdZ1YjzJNnyUCLM3RUB + JkepDLQQgIUFWZ0R4U0S46dAjL8SsQGivKwKCaEqJJKcfS4Aq6QZInEkB8KuicDiD7ZEkoiUJIO0FfsE + OQqR1lMStjozlfeXkqJHXr4Hysv9UVMT9L8KwKIMdFGBCmXFWtRUmNFQ54nmRm80N3hLYnBlmRlFJLZ5 + JNZCABYzgOMjScyJK5NiSSYSnVCYKWcsV6GhkiCePtPZpENPq04SgfvatWhrlvF4LmiuJwlrcEUP940M + uGOceG2ceG2ozwdtjUZUlyslwTSX4zif47koX47yYjWPrUdtsQkNpby+UhK7IpKLAgsq8k0S4RDEI4ME + PyWVpITEOyObBDOH+7I1yMjS0wySpROzp2QakJCiRiRJTXi0yxcF4HBRKk2FGJK2KLZ5SKiLVKrMXzzN + vmqB/G54qDNiSfCECJ9oUyOepMhmIxYn5s/MkF0XgAvzXXk/rigtISksk6OmSo26Wh1amgxooZ+01CvZ + HnJ0tygkEXhpxhebloKwfX04dtA2LwViZcobC4wv4x06jLWwTWvV6KxQoKdKj0H21UijH/qqxPqSJG7h + jpIAnCbNAHZEE7lHE6+phZykgwSrt9CKvmJPtBZYUcX2KEoXa7YqUcJtOT+vStOinmS9hWS6O5P+nOOJ + yXwvrCFXWF/qjy2VodjdEIWbepJw20AKMQHzfV8s41wIdjT6Y2ODP9bQZptDMN0ewWuOwUhnHIa7EjHc + mYihtgT0NYlZwFHoqotAe10Y2mqD0VLtj5YqWm0QWuqC0FoXjNb6II6XYLS1RKGtPQa19aEoKvFGVo4J + aal66c+zqDg5ouLpR/SFWBt5YLgGnr5yuLvL/mcBmCa4Y6hYD9jfHb5eRni56+BpJSc0q2HUyaBTu0Cr + coJe4waD2g1mlQt8DW6I8KCf+tHnvHg+T2f6uYNkicyJmYEkspGMIcyjlTY9KmxaVJDol9OKGcOzIpyR + Hu6MtAgX6QltUfpZ/BGQJUocx6ol8TdWlFALZ2zga/HnR1iQi/RHiPgT5JoA/LnZBWC72Pu5ACxei/V/ + JfE3To+IWC3CYzR28TdGgVCOafEnXXSkqDKgQXI4/SRMiTIhAMeyz+MNGOVv53mODckG7Eo3Yh/HycFs + 5rYsM7ZmMH4nqtFHv2mLduVvGFPj3FCaIEdhAuPlDQJwYizjY4Lb/yoA3ygCCwE4JVGLhFjx4Isb4iLE + WsC8b8ZqG6/dxjYTM8uSeQxR1jCT/itKQAthQQjARRy7xdk6lGUbUc7xYReAvdBe6f8fAnBFthplmUqU + Z/G+sxhfGNcqcxWSANxUZuS49PqCANxS44k6xsqKUrv4mytiS6YKWTxOfqGRvm1FfZU3Omq8MFzvjSnG + zjV17thcZ8HeJnccaXTHcdpdTR54sN0bT3R44ekOK54hV3m+WYVnGtzwXIMCX+224DXylmf6vHFvhxE3 + NRCTVcixQs6xKCp8lGt4XBOWeMyFJivmmq128bfFAzPcN1VrxmS5ThIAZ0oUWC5XYWONDjvq9NhVa8Du + OqMkAG+u1WNNlRYT4o/7IrFGoivaitwYU5QYYP4ca2KuZqwRAvBipxqLxAlryY3WdXlh40Awto9EEcPE + Yf9oNHb1h0izgDe2W7Gu1cytwFkWbOK9bKZt7fPApl4PrOX9zokHwxo0GKpWop/Yqq9ayximQSdjohCA + O4gnhADcx3sX295mHfpWbbiDvyX2mmO+WJoJxYZ1sdiwMRbraCuborFW2MZwrNkYhvkNYZjZEILx9UEY + WxeIkZUAjCwzx4gyz8t+GFlizuH+ifXBqxaAiQ1+NB9M0qaErfPGNG1m1eZWvDG/1huLy95Yu8xYuMYP + 6xd9sTwtRGAPLIyxDwasGGo3oIdxvZ3t3lZpRGuFheaOJo6RmgLGhXSZVAL6cwHYIAnAu3sCcHgoCDcN + B+PmQVHtzYrDLRocrHXFvkoH7KXZBWAZbmnX4HZy/9t7zbi934LjA97Sw8tC7F+u0mGG+KefHLU90wUN + YraxKCMrzimE5xQHNPPcbens8zRX6Q9sMTupldZmc5QeMBSlDMWf2+3c18V9g8whk2kcU/SzadoUbSJD + jTHmXEkAzlZiKJf76T+z9B9hYi3GRd67MPFa/Nk6wXw8Qb8bTZNjgu0gBOBZ+t8C/W+Z/reSp8D6AjnW + 5cmwIVdGLCvD1nwl9pYZJNtdqMU2fm9zuhs28dqlLW0972WtEJB5v0s53ObZ1/8VAvB68eCEsFI1NpSo + salUJdk1AXgLsf5OYo6t9K/1xByLaeRYxNZbiojh6y24vTsId/eH466eUNzR7ofb6XMnmky4j2P96UEf + PDvij4e7vXCszow95cS0vA4xC7Er1Q2tWQpUZyrIn5yRwfZMj3dgXHRCPGNnNDFbeJgMfozvnswdXoFu + kgAcEKiWzD9AQZPDx18Gbz8ZtwKHMC+EMg4yXqeGK5ETpUJxgg7liXrUpJlQn+2B5kLm0OIQlKX5ICVc + L+FMIRSE+csR4c/4HyBjXuFxwlTEL3piFqu0DrAoAR0Ro5MEYF/mHj/iYGFCCJZmA4fYTYjAEREaKX/E + SDOJr80GFiWhr4nAqusCsC3BmXHbifFahhLGzmrizSa2Uyv7oKtUhuFq9le1DDu5PVTliqOVLri13Amn + at3wfL8Zr0954ZUJK54gr7qvS4E7iP1vauZ3mxU4wNi5nzxjb6vYKrCryQ0ba53oT85YIK6aYRybaDZK + D6UOtFgkAVjEmbYKmVTqXjwsOt2kx0KLSeJ5czUazDEWzfKzuWoFFmhrahRYqpFhHa9vfbULNlW7Yhtt + f70Cx1qNONXjjnv7yXn7PHGyw4RjvKajdby+amccpB2pccItja64k3zlvj4dHh0x4alJxv5pK56dtUji + 7/OzOjw/p8Wzczo8PWfCI9PuuIdc8VivBUc73LGnkXmXHGtTgwUbyK/Wt4p1192x1GbBVIsBQ+RgreSv + 5akKZEU5Ip3YXKy5WJUjlkQgRs6zoLbEA001vsThwehsC0NDvT+xlBm2FHIH4nh//iaIFhJBDBxG/sBt + Krlors0Z5fTX5lzGtHwdugp16C3WYKCMHK9Ch5FqPUYqdRis0EqicE++inFNhtZ0BzQK8Y0xpInbFsad + Tu7rzXbBIPmqWIJppMAF4wXOmOZ2XR7blVh/d4kQfTV2EVhYmVISgG8lh727UY1HmBeebjfiSd73/bUq + 3FLqjB2FjljIdZIeihZldhvpZ6KqQS25QH2OAs3kD53Md73s+6FKcscSR8wXOGB9HuNqkStuJS5/kD79 + 6lAI/ns6Ft8gN3+Dfv21IW88yzz4APvz/kYN7m024642D9zS5oktNXrMcQz3Mk6JNWZz6d/JbD9R0vbL + ArCw/zsBOI54SFRIERhJemAujthJCCXEUDk2BYrTNGjIs6K5gH0o1tYUInChB+rYr5XEZQK7CwE4i1hL + CMAZYhZwihZZyRoJa9liXBAV5ogI4s+wcF4XY08o8VVwuH3mrxB0xTq/McRjoppOfAq5ZbpVEoCFwCtm + +l4Th6NsxL68B/GdOGI2IRaLktFRseRLqybwpZgF7B/khGC2Qyj5dRhxbUiIiGFOkvh7TQAODnRCWCBx + 9Krwm8jrTBZbcrJkjsPUKCEYOUlCVGmOgZzPjIo0FUriHVEq/ivh2G2ijTLOzhdqMEueOpjhJq3L28jc + Vi3GH8dBB/NXP7HiNPPW+hwNDpebcUeNGaeJix6s0+HhBh2epD+9NBiMlydi8EC7Pw6V6LAuzQUzjOdj + PN8EedSQzQWt4RzXNPFAfgtza0sq9zGXtTCPiRnnjYz79RkK6eEfkedbU+0V28SDDtvL5TjWqMeDncwf + XWZ8pduE14iz3mhT4JuMEd/vUeJHgyr8bFSFX06p8N6CDr9Y7403ViJxcjicuM6CYnKIMKsDAqxsS3cn + +Hs5I9hPcAUZsTPjb7ROKgEtLCGa/CDaQM5uRFyMAbFRzAkRWvIf5hpfF3IfR2nmr9j6+7hI+8ND1AgJ + VHxBAA7id4UJ8fcLAnAgcwtNEoCZL64JwGL95ij2YQI5aDrHdpYk/IpqBMTP5Jd5okQ5x1F6ArF9FI/n + 74ggctZgcmt7aWn7sUVpa8GFwsnDxRJXwiI4hsXDDMIiIhwhlmKK5xhMS9YiJ12P0mzi8VxPNOd5ozHT + gjqeszZZhQb2XzPzUK94eI1YbIrxbDZfjRnijjlihtkcGWZylJjg5730w1YetzbIAdUcnzW0eiEEh4sH + X53RGOmKphg3NMcQQ8W5oCWWXJtWT9+tISetJOcrZR4sJL/LJx8UlpdoLwEticA3iL+p5I0pEczpwqLJ + B8nXshJMyIynMS9n8HViJLlnuFwSf4XFEzsIEwKwMCH+psQKUZ1tTD8W5Z+FAFzEcwoTawGLdYCzyMnS + 6U+ZxCF58S4oZJsUsk2uCcD5oqJA+n8KwELsFQ+mXDMRo8Q2xeYqVfhIFxUQUuXIy1KjOFeP8nwTyumr + wspy9NIxs9imKTGrAnCMWIeY8Y3XUGBzIy5m/+QSLxdZ0VnqgZ5yT8x2RuHI+go8fnwUDgnxQgAOkUTg + 8DBfuwAc6IHAQHeaGf6+eqm0s5e7ioOdxK21GmvXTEjW2VaD+LhguwAsSj57amA2y2HQu9Jk0OvcYCLx + 9zDIEWBhkPPSSQJwur8OmX4qFBA8NdFpRpLcMZvugXmCrQUOquU0LXYUeTDJB+BobQgTFokQCahdAJbx + OwQRJL9r0xTYX+GBOzrC8cRkOl5aLsRXFvMIBFJwf084TrX44VQDQQTtvjpPJhwPBiN/mi8ebvbAXUz+ + ohzGQoYzeqI5yMLEUwZKacZuOgGkEIAz2KiFCS6oJAioyVBK4m85O6eQQUqUSihiQukt88XGoWzsnC4m + aYzle38CsDBMNcWijc5SyYFSHMPkwePlcaAXRLogTzJn7ndDOTu8jp3cxoDazeAq1luYTnckMXDCNAPt + FBPgIm0rA/Jhvr+D33mQYPqpDEe8xIT/Wqkc3yTx+x6J3k9b1fhNrx5/nvDAP+d98CnJ2WdrfHBu0QcX + F3xxZdYbVye9cWHYgnNDhi8IwP8kEPy4R4tP+/X4pN+ITwZNODvigXOjPrgwFkAL5H5f/IWg79eVGvwg + 3xnfy3PCf9N+UCXHrztN+GjaD+c2RQKHxDrANuCOGOCeVQH48QRcfSoWl56Lx+VXUnD1jQxJAL7yRjau + vMzXz34uAF+9Ixif7bPgH+uU+OuiHH+cluEP4yp8OGrEez16fLveDV8td8BrNY74ZrsSPxgU5R288Pt5 + X/xx1hPvj+vx8yEZftjniB8OOeNHEyr8kKDwx2u98MN1PniH5PS7m8Lw7a2R+Pb2aHxnWwz+e2MU3l4J + x8ujnniwQYYThQ64nWDmBO0O2t20h0qd8EK9Cq81a/FOnx4fLmvwyU4dr5Vtecgqla2+dNwPV+4OxuXT + 4bh0bwQuno7CudOR+Ox0BP59Vwj+cTwQfz3qgz8f9MHvd3vhve1evC4rQZIe/zWlx38v6vGdjRr8aJcG + v75Jhw/uNOMf93vhk8d8ceYZH5x9wRNnXjLhzAt6nH1GKwnA508rcPa4jOdX49xRA84f88KFewJw+ako + XH3dhsvfTgPezQM+KMOVjypx6a+VuPhRGS58WIgLv8/FhV9l4NwP03Hmm5n45Ku5+P396fjuvmg8NeWJ + O5lIb2tU4QTB4ZMEcK9MBeBbawLxs61ReG9fIn66NxFfXRtK4qzFnnYFtrSTGLZpsY5Afm29HlsI8I4O + BuD+5Xi8crAAr91UhGf2pOGetRHYSaI9V6vACBPFKAHueKYTFvIdcYDHeGDJiNduseIXLwTiox9F4l+/ + Zzv+Mxq4wPEkBOCLUcAltvM5P1z+tw8u/90LVz/g+H7PHed/bMLF/zbj8lfMwNNWXHrcjPOPGHDxUQsu + P2zF5UfccYl29nH6wTMc4y974/zbwbjwoxhc/HUSzv8hDZf+nIPLH+Tg0vsZPJ4Nn70Vjk+f98Mnj3rg + 03utuPCAF49Fv3rAG2dPse/vMOH8HQb2vx5XT+hx6QTHBe3Tk0acuccDZ+/35TWE4ewjEfjonmD85Kg/ + nlmy4Fi/Bvu6FdjL9tvVb8C2ASu29Xtgy6A3do8H4abFWBxfScSxNfG4bToct04G49aJIBwd98fRyRDc + upCAw7PJ2NAXh55SX7QUiVk/Uagqj0NRaQKyimxIzouFjSZmACcUJCO+KA3xhen/IQDb8lO+YF8Ud/9P + 7D/FX2HXhN3/pwKwTXrNfUIALk5BanGSXQDOi0JmTihyMoOQneKDpGgLokN0CGNeCfYkuTY7SWVi/Qnm + gr0IxmkR3m7XBWAvIQC7OSBaaV9nd4Hk5lSdAt+Zs+Cv+xnDjnviIv3uyml3XLyHfX2aY+S0J87fR99+ + OBx4kmPwCY6/xwJw9T5/XD0ZgXMHbfjFcBAeJUjdzmMu+zpge5Y79tVF4EhPOvb352JGrM+YG4iSZA+C + BT1iCciiCNCi+P1Igs8IE01HkM7X1QQwYxlGbCpyx5Eq5rFmH+YuD7zW64mv9xrxUqMLnqlwwPO0V6sd + 8F+NDvjZoBx/WDDgb9sYI46H4Mpj8cBr6cAPinH13TJc/l0tLvypEZf/0Y6L/+jExX/348r51VLQVxaA + q4vS9srVWVy+OI2LZyZx8eMJ+hbtj6PSTOC//lcrfvlMGd68IxmP7AzC/lE11tQ6kHQ6YDhXCMDCn3UY + JVgZlspAf1EAnhB/BlwXgM3XBeCN3WZs7DJhS68ZuwY8sG/YC/uGPLCXPrGrS4XdbW7Y3eqMve0uONgh + BGA5DvTqsI+f7x/k90f9sHskkMe1kjC7oZJ9WsL8XczcWcp8XUZiUylmrSbI0EBgWx/DLXOwePKwK45E + N8kJY8nMvWmOWJPlJP1htjHHGZuyHbEl0wE7mW9PVCpwTx1Ja4MW99WrcW+NAg/WyPEkSfQLTSq82qTE + W81qvNOixY+ZI37aosbP29V4t4/5adwDv17jj1+uBOMHSwF4bc4Hd/brsK1Vhvk6Z5J+F/u6fTUqtNXq + 0V4r/jQ3o7fWgoE6A/rrtRhgHBYi8GSXBtPdWswwNk8x1k63GySbIbGe7SSJ7tJhvptb5vOZTpUk8o40 + 8h7ZTwO1jpIN0obqhXF/gxMG+flwM4k88+lsjwZzvWINYLsAPFKjRl+pGm3sW7sA7IoyYqZS4plyEl+B + m2pIaqsIlmti1aiJVnP8ChGYeIkktSREJgnABX6uyPN1oxHU+iqR56OWBOB0C4m6wQU2nQsSiR8T9W6w + EUPGEzuK9X/j3TWIJ36M9iCR8nCjfzt8QQAWD3yEeZEk8bjiz7nYQBXiSLrsArAKyVFaJNFsURrERfGz + GK1kNwrAYvZvarIo4Sf+fFMhMpLk+ksCsFgvOD3NjKIiH1RWBt4gAPujusZXEoBFOVNRAloIwCUkzxWl + BtRWWdBY74mWJh+0NPigrtoT1RVWFPM7uasCcMKqAHzNkjhec1KcUZorR3WJGo3VWrTWadHBsdfVokMn + x1kzcVBjLckTcZDYdhH/DfVZMDbiKwnAw4P+6GpzRx19rqTEledyRF62EwpJzsqK1Kgs0qG6yISaYjNq + SBKqCq2ozLcLwKV5BuSTeKSvCsApogR0tl38TRf7M0k0M/U0HT8zIIkENJ6EVKwBHBblggC2mRCAA8TT + xyRVkSRbkVFqhHI8BAY6S5/5eq8aY6AQgSMjZEiII3lLMSElWY8E+moix1pqipskANtLQLuhkP5dXOSG + 0mKxtjJxeaUOtTV6NDcY0FCrQW0FMXsJ26WS2L5NgZkRK5ZnyCPWBGHbSii2Lgdj3YwvFoiDxzs0HPcq + 9NcpMdQoxGAPTHcG0nfC6BveaM7XopA4P4XXl8sxUE9S1p2rQXeOFt1ZOm6N6Cuwoq/EC22FHqjJs6Ak + m/2foaFpUZKuRVmqFlXkNg2pBnQyJwzkemGiwBdL5UFYXy3W943CnrZ4HOpJxJF+YfGMbWJfMLY0+WOl + 0R8LjQGYaQ3BVEcExkjiRrpiaQmSCDzaacNgazz6mqLR3RCJ9voQxpAgtNb4oU0IdQ3B6GgMRUcT9zcE + obkuAK1NoWhpiUR9QyhKynyQk2uRBGBbogpRseyvGDliSKbjbRaERhrg46eEu4dcKu3s72tBYIAngoXw + K4yvQ1YF4CA/uwDs7aH/ggCsVblAo3SCVuECnTCZEzzUTggyukkPdkRamKPNjlIejLbQBzwckRHEmME4 + UkpiX5agJ18i+Y+WS5YTwXERRD+hf6ZGkIDHitJaJNjxWhJ2rUT4Ezie4jneEmPU9C/x8IcK0eFCDFUi + lmMx0Wbg+PpcAE5KstD/LZLoKwTfGwVgYdFxOraLKN3HccxjSeKvNItDiQjGkthoEWO0SIlgXAtXSQJw + Y4xeEoBHEnSYYZxZm6DGtmQt9nJcHMoy4ECmGdvTDViTqMZwnAw98Qq0JChQFy/nPfNe4xkvuV88ZS7+ + vEyifwkBOJFc+P9cAOb9RrKdyXFjIl3ZDvQzXnscc6BdAFYglf0uBODsNDXyMlTIp31ZAK7lOP9cAA5A + W4U3GkusqM7TozxLxbEuR3G6DMVp9M1MGSqZL64JwJ3k4H2tgehrCUQnx3NzrRcxKn2FGCEvV03/5vXz + t6LMvJgFXFrMczGm9tT7YbTJD3PNvlhu8MQW2r4WL9zU6k1O4o1T3D7U5YenevzxbK8XnhF/AtKfH612 + xiPMqc+26vBcjwce7nTHyVZihVolNpQ6Y76A/LrQFTOMH7PVesw3WDDfaMVsM63V47oAPF1jF4AniGMm + C8WyEEqslKuxuUYnrW12owC8UKHGSLGc+MMF7bS2Yjd0VzG+MC4J0WSuQ4/FLmEaLDBvr2kzY7nTC+v6 + grBlOBL7pxNwcCoee0YisLXHDxskAdiCje0WbO6yYmuvO7b3emD7gBc293thqd2MqUYev0aJ3go5+hjn + +6oZk6qYJ6o1aKtWor1OrP+rQ2+HkVsD+pqJJZqEEZu1GzHBY84xXyzPMA6tt2Hr5kRs3pyAzVviaLHY + uCUKG7ZEYu3mCCxticD8llDMbg7BzMZgTG9gPNoQjMn1gZhaF8j3Qdx/zQIxs8kX0xt9Prf1Xphe54XZ + FS/M0IT4K2xhyQvLS95Yv+yH9Wt8pVLQS+Tzc6PuGO838bpF3tOgsUKFRvZFY6kRjWVmji0zqvN1kgBc + mewsVSfpzFJggp+LEtD7+gNx0yj50ngIjo0E4HifB27uMOBoowL7qx2xl3a43hlHGt1wc5saJ4iZ7uy1 + 4BSx5+mxQJwYDsS+dg9sYP/OlWswUOCGjgwXNKY4oZY5W1gdrT7JAU3JjuhIF7P0XNFOLClE306bI7oT + ndHF74jXrcSkYn8HX/czr4qJBxOpSkzSJtKI09JVGM2wC8BDvI8h8cdpITEc/UeYJACXmyUBeKHMPttm + IluUjRaTGGSYoP9NZcgxx98ucv9KvhrrClTYzFy/KV+BzTly4lkZtuUrsY/H21uqx25ikO25Smxhft1C + v93KttxC28B7Wcl0wxLvdynbFUu5tEI5looV0sz5FbE2b4kK64pV2MB9G0uUkgC8mTh/K3Pz1iJRatoZ + y+JPerbPLG1zoZL+Z5IE4HtHInHPQAju6vbDHRzfwjfFElxPDXvi6VEfPMC+urXBhF0VBsxl06fYpl28 + t1ZikHLGipxEJ6TG2SumiD/EoyKIM8R6m6Fu8Ca+cPd3WhWAVQgM0kgWQFwYQFzoT/MLVBCH2MWk2Ahi + ROKTTOaEQuLCCmLA2lQjmrM90MY83VUWgu7KSNRkByArxkTeJh40dpVKhYb6uiLYzxkh/sQ9IaJyDHFl + HHNGohXRCSbmBa20/q9PsCt8mc+uicDCAoLc4B/I44QR14arEc3zXxeAmTdEKWhbHC1BI1kic0NiPOO+ + zZWfOSMlyQUFjJ3iIcPaMsZZxqY2tv9AlRvmql2xvcoV+yuccajcETeVOuAuEQ97THh1whsvjlrwcJca + d7fJcSv5wWH6wIEm+kWTGvuJI/fSbhSA15KjLDWJuMWxyLg00e5OzGGfAXyjACyWi5lqZDxtMWGGeHWm + Wo1JxqbxUlf6pTMmadNlLjQnxl5HzJRwbHC7hrZRrD3LeHWE+Pa2LgtuIqc5WK/ELl73VvE5OebmIgfs + KnPAwVpnnCC3uZf875FRM56ccsczMxY8O2vGc3N6Sfx9fk7D11o8M2fEE3PueHjKk37thbuGfHBbjyd5 + uQcO9XrjUJ8nDnLfkTF/7B3zxeZhD6z0eWGy0QddJRbpv19RjliMu+pcscY9cV6RB+qZC5tr/dDeHILO + 9nA0NQahtNwdyZkKhMc5wi+cGDiUGJgWTOwYHUZuH+2A7ARHSQBuyhGzG4kji7TEjzoMVRkxWmPCeL0J + Y3UmDFYZ0FtCrFmoQmcev58u4o0DajnmG0UJXDELkv7Vk+2MgTw3DDE+DRW6YLTIhbnKBevyXbGtQI5d + 9M09jF+7S8mjhZWL/87luJnc9c4GlTRr8mlJPBOVNAw4Sb53oEqOdRUKjBe6oSedMY/nE8JfbZoL6umP + LUKYZq4ZqlVjgseZY38uFzowtjjgCMfgHTzHEy3u+Dpz2TuzNnx3OgrfnAzGW+N+eKlXrDXshgfq2X+N + RtzVYsWtrZ7YWkNfL1Ojl/cqBGCxpqUtgryL7RYd6iwJwBFC/CSfCA2VIUJUc7pBABbc7LoAbFN+LgCL + bSz5ZZQj299ZqhQjSh5XpNPPs4yoy2cuKbBI4m81sU4ZcXuReBBOVEWhv2XQ0omzsoiR0oiVEmPdEB8l + rscR4WFOvJ7/WQCOIQ6LS9bBJq6J15eU4S4JwBHkyMHkl+HEYNE2+nuKjp+ZkJxlhS2N8YW/EeLxlwXg + oFAeP5Rxhrg2PJK480sCsNiKctAhjH9i1uc1ATiJlsI2FJbO9swkdxeT23JtLqgidmsoMqOOvK6WuUus + 79tK3ily1hgx3Dzzw0yeBoPMB00cdzWMueJh+mbmmy4pV2mxkGPAlkIjbqnxxJ01VpwinjpNLHJvrQqP + EPc81xeIF0eicV+rPw4QD67leaZ4/KF4GvldT5wT6ugfNbzOBvLgZvpHA+N7Y4oLGsR5md/qMuWoY34T + 19jA/NuW6oCRHEesK3FjDtfh3g53YkAPji0LvtZrwhudGny91Q3foH2v0w0/6HXDT4Zk+NmYDL+YUeEn + xB9fXxeFO4bCMVNsQXE4x5XZAT5i1i75h487OamXk1SSOYo5Ik6IwDFGuwjMHCBt48zkq+QKsUbERRs5 + HrQI9pfBz9tZmvnr5+0kvY8IFbOENZIQfE38FRbo4yxZmCgFTRMCrTBRDlpYFHNGdIhMqmAUzb4UAnAE + LYZxJZE8IJVjMpO8QYi/BVlmFGZakEuOmUl/SKRfBPtyXHgy/pBfB5G/insRAnB4sJzG83Gs2Kuc2bdh + PEeoMPaFWJZJzAZO4jjMJF8p5PisznFHUz45MbcN5Cx1aVrGJDVa0hToYh8NkROPMaZN5qqkZSkmydfF + GBIPEgymEYuSw9TxuOUBDigj/xdbUYGxmueuo9/U0yca6RON5CXN5DqNMRwDcc6oJweqZe6roq+UCT0t + SY+CJMOqAKxHDvmeEIAl7kdfSY9WIjmcHIkxIpW5PY05PZMcLIfcLod5OSfZHdlJVmkdYLvga7fPBWAx + g1pwLXKSOCGy6hgLeA62RcE18Ze8qoA5OS+OcSHGFRlRThBLUeTHi9L15G3JbshPtq8BnCcEYMaUHPFA + CWNKOr8jRNtrArD0QK/gdNwvtimJbkglv0sT/3uwbYUAXJTD+84zoIgmxOAi8jIhLEsCcCyxEH1aLIMk + HljJThDLGLihir7ZVGhBW5kH8YsXeqt9MNsTi6Obq/HEnRNCAA6/LgBHhPsTwHhLhD4wwB0B/maplJeP + h05axyk+JgjdHXXYvGFeMvHalhAKby+dVO5ZCMBGknmd1hl6rSj55QoTzV0nR4BJjUgeJy3QjJwgI/ID + SSoJzNoidBi1WTCX6o55BsbZJDUW2ECbmGT3VfjgcE0w9pb7YRuT7fpsA1bYiCtZegJTPTawQXYz2d7G + 5PvwaCqeXyzEi4v5eHIiHfd1R+Lu1iCcbvFncgvAw83+TEb+eLU/Eq/0huG5Lu5r98a+UjXmGfA6GBQr + OCBL2fk5DLJpdAwhAIunvvLYuKWJLihPlqE8yQ0lBF5i9m8ufyNKQPeTDG8Zy8PehQqs6UoiGQvFREM0 + CWQ8Ogv96CSWVRFYxu+7oYzEvsTG1+zkCg6UqjQOegL9NibV7ixn9Gc5YSzXGRO00RQHDMc6YIzXIUTg + 7Xx9hEn4JMH0QwyAz+a44lWS0jcJwL9dpsCP6xX4VbsGHwxZ8DeCnX/N+eLf8144M+uFc9NeuEhSdWXS + C5dGrTg/bMK5QQPODujx7161ZJ/x/XkhDg+749yYO86PeeMCAZEQgMUM4H90e+DDRjN+RaL702IZfkT7 + PgPwzwgCftthwkfj3jizEgLsjQFujgeOcytKkT4QBzxCezwKl56OxuUX43Hlq8lS+ecrX8vC1a9kAM+k + 8PMk+3dPhOLcPnf8fY0cH0254YNRN/xxUIkPB0x4t12Ptytd8SLB4FcIBF9vcMM3Gex/NGjGL8YseFeU + iB4SZR9c8J0eB7wz7Iwfz2jws7ViDd4w/OZANH5zKB7v3ZSCX92ajl8Luzkd7x5KxS/2JuLbSyF4sVuL + h2uc8HCVEx6pdMYjFU54lED66WoZXmnU4o1mHb7Xq8UflzT49y49PtsnZgBbcPaIFZeO+wKnQ3D1wSjg + oWhcfSAGFx6Ixjm+//TeCPzzRJAkAH+wz4pfbNTih0tqfHtGibdGZXh7UoV31hrwk20GvLvPgA+OW/CP + ez1x5jF/XHg6ABef98OFFzxx7iUzzj6vw9mn1DjziBLnhAB8uxxnb1Lj3C3sw+N2AfjqszG4+mYSLv8g + U5r9i4+qcPWfNbjycQ0u/bMCl/5Sgkt/zMeFX2fi3A8zcOYbmfj45Sy8dyoJb28PwaME1ifaVLilTo4T + BOXPjAfi9blQvLMuEr/emYj39qXihztseG42EEc71NjRpsSmDvoogfsyCcB8jQ4r9Qbs7fHBqfkovLA3 + B185lI/HdybjxJpQbOkxY4pAs5/juJ8EdDDNEVNM6tsbFDgxRQB/wIgfPOGL3387DP94Lwrn/hYNnOV4 + usAxImYAXw7G5Qv+uPypDy597CWVgb78PsftT0248G0zLrxswOWn+foxA849rMfFh0249KAFF+/nZ/eb + cOZh9tvjFnz2nDs+fd0PZ78XhfO/tOHs+ym48GE2LvwxCxd+w3b5YQL+/VYE/vW8Pz5+1Av/Ok3/uN8b + lx7yx0VR3vleb5y/S8waNeHiCQOu3qGXSkB/JuykHmeEQHyvD88fhrMPReCju4Lw40O+eGZRCMBa7O0m + 0eJ42t5rwOY+C7b0WrGJpGTPeBBuXozB8ZUE3L7M7XwYjs8F4eQCifNyGE5vjMP929Jw18Z07J2Iw0il + J9qLfNBcFo76ijiUlcYjpygeKXkxSMqLRUKeDfGF1wTgjP8QgOPzUr5gXxR3/0/sP8VfYdeE3f9vAnAq + UouTJQE47UYBOM0XqXEeTNjG6wKwv9kZPgYCMKsLgr3kUlnoCB85QtwJkAXAU5OYuTkgllZrdcASge2p + WgW+t+CJj/b744x4gOIOKy7fze1dXjh/tzfO3cNYeH8ArjwWDjzH8fc8x+JTHH8PcgzcFYZPjsTiJ5OB + eChfiR0ENesJaPaU+eNwZyJuGc3HvqF8jFdFoy7LF7nxJAMk/RGeJBAEaNEEjPE+LogTM6CsTOR+Tmgm + wFhT5ImdzINHq7xwqsETTzRb8CqJ2utdOnylyQVPlTvgacbAlyod8PV6B/x4QIb353T400YzPj7iyzEa + jisvJuLKf+fg8o8KcOFX5bjwe/r/R/aZwBf/2UXfGQLOTdGXZoGrQgiexWVM49KVSVy8QPtsApf/NcHf + jOHi+yP49w968MEbDfjRYwX42vFE3EUgvaXDDTNljhjNd8FIroLAXMPXBgwXav9TAK7+XABe32HGRjGr + pccdG3vss4G39btjl5j9OyxmALtjD31iR4cCO1pdsbPFGXvbnKWZwIe6hQCswf5+PfYNWvl9b+we8sNS + kwndOc4oZ44uIuEpYt4sZt4sopURGFUx99YnKFEfq0B9hF0A7maOH7Q5YYIkdy7FEWvTnbAp2xVbRSyS + xF8HHMx2wn11WjzabJJKTT7aqGOOUOKRGhmerlfiBY6fr9TK8Ea9HN+qU+C7fP19ktwfNsvxU+anX4xY + 8Mt5H7y7Ngg/WRuItxb8cWrAgG3NrpitdkQ/26+rUoa2KhWaa7RoJRnurDGju9qMPr7urdWhr16NwSYV + xpjjRTnoyTbxNL4W4816jDWJ9Xr5nnF6slUnCcOT7WqMtxCYNxBX1Dqgh+Okm9ZL66924HFXrc5uQgge + 4fVMdqgw063HbKdBEoCHVwXgdgL7xnQFagk6y0ggi4iRSgmWq2PUqEvQkRxq7UaCWx2tRhVJagWBdekN + AnCurxtNjlwfJW1VALaSpBtJNogfk8TMXz0BuI5AXC8EYCUSJAFYjzgvNX1mVQAW6wALEZgmHuoI8yIh + 57Gj/Pi7QCXighSrAjDJQLRWEoE/F4C5pf2nAEy/lARgtVQWKexaCWj6syQAx5JwpYvyz36orgpCVZU/ + zVeyigovVJR7orTEhKJCErJ8DYoLtCgr0aO6kgS71kOa/dtYJwRgIX5YpRnAOSRJQgC2cXzeKAAnkghn + cDwWZhEnFpEAl2vQWKNBC62V40DMcm2sJWliP9ZV2a2tSYH+biOGB70kAXh0OAB93Twnc3B5Gds7h6Q/ + 2xkF9FFRfrqM11lWZERlsZnmzvO4o7zQitIC3gOJhiAeaalySQBOTlfaZ/5ma1cFYJ0kAKdm6CTx15as + QaxNIQnAoTcIwP6BzggJZluGKUgqFQgiqfX3d4Kv738KwNFRCiTaeHxi5rQ0IcaLNbxckZp6owAsQ2E+ + r79IjlLi3nKOS0kArjKwLfSoqVChotiJZImYvsgBTcRxg51qTBHXLk3bReCtyyHYMOcvlRkVfjTIdhts + VGKqy4r5/gAsj4RjZTQKE21+aGf/lTI2ZJG4lsY5oiNHjdEyK8bLPDFe6o3RUh+MlPhgkLG+vdgL9YWe + KM8jGc9i+6WTKLJtylJ0qEzWoz7VjLYsL/Tl+WC8iOepicCmphhsb0vAvp5kHOxPwf4BG/b2xWJHVzi2 + tgVhfUsAlpoDMN8UhJmOcEx1RtoF4M5rs4ATuE3AUFs8Blqi0dsUic4GIQAHoq2G11/nj46mYHQ2h6Kr + RYjAwWhpCOD4CUJ9XRDHZRDKynyQn+8uCcAJjI1R0W6IEGXB6MNCAI6MNrEvVfDwUEjL/fj7mBHoZ5Vm + +16zEPJGYUHcLwRgny8LwEonqOROUMucoBHm6gCznH2vcUaoiePD4Iow+nE4fTuSOTqGeTA9SIb8SDU5 + l16yAvpuNuNNDi0txAWJAQ6wBTkiOUKU4BLrNJGsiyfA468JwHIk8h4yUyzITndHerIFyfEGkmwDff7L + s39FKWgrkpOsSEq1i8A2sTawEIOTjIiz6RHBY4XzGoT4KwnAPKeYBRxGi4hWSn/cJ0YbyBt1yInQSAJw + U7RdAB7mNU3ye2uYdzbb1NiTqsHhDAMOZZqxi2N9bRJjt02JwUQVOhPVaKAvlcVxrMe6IDfGFdnkmkIA + Tv7/IACHhzgiIswZ0WyvuGjxsIUQf1X8jpqxzy4AZ6VpkJepkWb//6cA7L4qAAegQxKAfdBY4o5qxoqy + LCWK6KeFKa6SlWS4oZL54poA3F7nid7mQPS0BKGzMRDNjIMVpfSTPB39WsmxZ3/QRJSazyN2KCu1Ms4x + fvG742L8NzO3N3hhc6MX9rZ446Z2X9xB/zzV7ocHuwPwZG8Anun3xpPdVuZoFe6tcMQ9FeTJDczR7Sac + bjPhVvK2ndVyLJc4YjpfPLTmiIliYpIyNaZrDZhtMEtln4UAPCsE4EYrZq4LwHJpLdiZfBl/r8TGSg12 + 1JmuC8CbavSYKZFjsMAZ3bmME8RCXeVK9NcxNzebMd1mxWybEIGF6TDHHL3QxpjU6YuV/mBsHo7Avhkb + DtD2TdL/B0Ow0mrFCq9nA3+7uUuIv57YQV6wrd8Lm/harLU5UifEXxk6St3QS2zVR5zQTfzQzjzRVqNC + a50KXbzvnlYj29/A9jSgnzZA/DLCNpnq9cD8sC/WTodiO3nGjo2J2LHFhh1b+XpLLLZuicHWrdHYvDUK + G7ZFYf32cKzdFkYLx5qt4VjaGobFzaFY2BQi2fzmILttCqT5Ym6jj2SzG70xu94LM+t43St2m1/+ogC8 + 7poAPO/NWO0tPbgz3Gfg9avQQnxVw3usYdvXFBFjFDGvFhmkkuN2AdhVejitk2NpotSEtcTLewcCcdNY + EG4bD8Zx5sMTzIvHus24pUUtzfw9UOtsF4AbXHFzsxInyF3v7jXj/hEfPDQZjNNTYbipzxdbm8xYFDPy + 8lzRke4ilXiuFYIIeUNtggPqbQ5oTnJEd6YcvbyWnmQXab3aPpszBhJd0ZfoJAmYkgDM33Uw3/emuGGE + uXUsheNKCMGrAvBIBu2aAJytxFieBtPFekwzD82VGFbNiHnm7Zl8vVQ2epw+M5YiBGAFpjPkWOC+pWwV + 1uWrsaFAja1sry0FKmxZFYC3Mv/v4b49hRpJAN6Rq8R25tbt6XLs4LG2ZzJG0X/XZ7phmfe7lOWMpRwX + aUmURebdtWUqyQeWS1RYWyxEYDHzVy4JwKL8885S4vUSGTbnu/L3jpjjPYsZX5sKeF7m6VvbfHD3QDBO + 9viyzT1wvM2AE80anGrT4OF+Ex4etOCebhNuajBhJ7HTXB7HeBr9iffUzPYoZj9nJDDuxzkwtjkQq4nq + IQ4IJh4NZF7wIuawBogZwGINYPV1ATgomBailiwwWIGQEFEGUwkb8WEq80VOjBYlcTpUMVc3phvRkeeF + nhJ/9FeEES9HozE/BPk2DySEaBAu1on0FuVCeU5fR5rAiYyx4UK4IVZNMCMqnpxUEoDlXxKAyVFpAYGu + kggsZgGLctAxMfYy0HHi4WBupdm/sWJL/BunluJ4vFhKI5b4ONYZtgQn4kclionlqks1aGA/tBa7ob+S + fKya/KXKDfsrnXGI3OIoeeLJKhc80WXEy2M+eGHECw90aHCiSYbDdU7YX+OCveQuQgA+0CpMQ1Nid7MM + W+gf6xvdsNKuZ7yyYK7LA5OdHsQc5FpfEoCHaul/jC0zjDXT5EuT1SqMlsswXCKESSeMFouY6yDZKPHZ + aKF9O0WbLyVvrnDBVnKqnY0ct/R58bCOEBbnsu1rfa7JceBYc8CuSiccJ686TQ71yJgZT06745k5M56d + NUmzfoX4+/ycmq+1eHpWhyfnLHh81gMPT3njwQlfnBrxxslRH9w+5kfjlvtOzgXh+Fwgjsz4Mgb7Y1NP + MKYbfNBTakBdthxV9I0K5sXqPJNUKae+xBNNVX5oI97qaI9AU3MIyiq9kEb+G0nM6MMx6SNwMPlDEC2K + fDQpyoG53C4AN2aTU5ED9NAX+5kjR2vdMdHgjqlmti9tsNqAnjINOovE8jvkrWmOqKYfVXPci5jTJMpA + p5HTkZveKAAPF5HDcbu2wFUqAb2DvrqLOW43/VLYrnI59pSTQ1e44jjb+D5yxic6rXi2zxtPdHvgvlYL + bm0xYat4aKlaxD0FWtKcUE0/rk1zRgNjSBs5yRBz4BT56mK1gjHBSRLodzOv3lLsglPlCjzf4olvEEf/ + cC4RP5iJwXdnwvD2ZAC+0m/Gww0y3F+jwGnmx7uarbit1Qvbas2YZa7tzReTrZyRKsRftuGXBWAhfAoT + GFUSgIlxUumv6Wmiio1dABYloK8LwJJoaxeAkyKdpOVCcuKJrfidMuKeCnIYUblHbMvS1CgU6//yd9Ls + X2KwNGHxxJzEWknC93iMqHAnhEsCsCNCw1x4PWJW7pcFYPpuqgHJGRakZBFXXheAVQiOdJXWABYCcCLx + X1qOBem5ntJ341P03E8O+iUBOJj3LEo+RxDX/m8CcLAQgKUSwp8LwGL2byrbMJNxMjfaUdI08uOcUZzk + glrG09ZiE1oLdGhnnO1j2w/lyjGazRjCPLFGPIDE7wykkGtGO6BSmBCAmW96yQEncoldyRl3lrnjNmK6 + kzVWnKzQ4GSZHHcyJtxXT9/r9CM2i8CpRh/mHC0W01wxKnIgY3gv82NnvDNq2Y7VqzOAmxnXGpk/m5gz + xXrv9cypNbTadOZ/Mf6Yf4UAPJnvhK2VStxOHPV4rzde6PHAV3st+Doxw1tdWrzVJsM321zw3U5X/KDb + GT8acJUqgv5w3A3fWbDg1TVhONYfQl+xoFCI6+I/BZon+YenEIE9HBDowz5mjI4JU0kzf6/NAr4mAEsW + b2ZstnBM6KRZvv6+jPVe7BNuxXuxPzpCj9Ag9jtzkhB/xUzgawKwWAvYbl8SgEOE8MsxTr4jxr+Y/RtJ + i2J/xnIMJsW4IZ1jODfNQL7pTqzugfx0M3G8geOdec7HCX68B19P8mtJBBYzw+k/q8cPDRYPLTnxuhx5 + XcyfjFHXTDz0Hh3lisQ4lcQnROnzsiwz6pgTm/I80ZBlounRRI7QQszSnk6sy9g4LPCI9FCaAqOMl0PE + FAOZSnSnKtFE36nktRfzXIX+Digi5y8lhyvnuK3hPdZHKdn/apoSDTGMd/TTenKe+ng5cZYK1eQ0FeQ0 + ZeTRhakm5JKT3Vj+OTNWi/RolTT7N5FxIilcwffkg8yj2TZ+P8ldMiEAZ4kHfZn7/2cBWDw4LERaJdKZ + e3Pox/ls0wLbjbN/PxeAs8mXM6OYi6XSy66MKXIUE9uVMJaIamAF4mFwtlNOslISbMUav/+TAGxLWBWA + k1YFYHKiTGI68T9MQQ7PmUsOzG1BFs+bYa/WJI4nZhOn0TJ53CybG42ckdvKHPZPsRXtFZ7oqvYmL/DB + TG8sjmytxRN3TwsBOFQSf4VFRwUiMtyPg8Kbg9MdAX5CADaR8Is1fvXISI3D1HgfjhzcgUP7t2NyvBe5 + OYnwcNdAp3ODp6f2CwKwUe0KE81TK0egkcHMg50Q6onKWF92qjdaYizojTFjnB0xn+qONWkWLCRrMMtG + WGADbOTF7yLZ3Fvhjz0knLvKfZnIvLGj2Bvbi7ywncl3T4U3bm4UTxHG4cGRNDxCu783AXe1heNksxCA + g0n+QvA47YXucLw+GI2v9oThZSb2Z3uDcZTgcokAqouJoVw84e/njPRAJ0kATgtjomACymHALIp3RAkb + tSTBBcXxTigQAZSBsJydNFQThK2Thdi3phIrA2mYbIrGdHMcSWQCekuD0ZLjwwBmRU0qCQsTU02KBjV0 + GLFuTW22AnUMsi1FanSIJ6pIIHtLmMQZPEdEKZc8J/SLdRgYcCcIdFeY9Hcl2csR35PphKcYqF/Ol+N1 + 2jeY/H/AgPuLRhV+12PEX8bc8Y9pL/xzxgOfTFnx6ZgFZ2gXx91xecyKi8MWXBgy4fygEZ/16/HZgB7n + R8y4NOYh2cVxL5oPLo754tyoPz4d9MFfCAp+V6PDL0uV+AXtZ+Uq/KxKjfca9Pg9SfZHQx74dNEfV7dH + AIdigFuigNsjgbu5vS8SVx8KxcVHw3Dp6UhceiEeV15OxZWvpOPq82nAUynAI0nA/0XdX8XJcZ3d4nAP + dE8zzXRPD2MPMzMzMzNqQCONmJkZDZJBkmXmmCHgOOjYMSSxg4bYTuLYjklM67929ciR8+a851x8N9/F + +lU1VVfvevbzrNWr9t4n44CbwnBxmw2fL1Ti0zE5PhlQ4B89anzcZcLbTUa8VCrHk3kyfI8k8lkS3R80 + qfGTDg1+3qXGL3uUeK1PiV/1OeNnvTL8alyO3y4x4/0tYgrmVHx2PAv/vCMXn54qwj/vKcc/T5fikxNF + +MdtBfjkljz8ZWs8fjFlw/M9GjzfTXTo8EyrGk82qfBssw4/oJB+uc0Dr/Ya8P6sDp9vMuKbHRaHAbyX + 7XvUWzKAcR9///2xwL0xuMz9S/fH4OzpKHx5PBT/POiLD7a7461lCvxy2hk/nXTBS2PO+Pl8Jd5YacA7 + m0z4y04T/nGLDV/d5YdLDwfh6hPBuPaUP9vNB5eesuL84yace1CLs/eoce6EGmdvUePMYS3OHzXj4q28 + did5HZ6MwbWfpODab3Kk0b/4VwOufVWPq18TX9XgyqdluPJRoWQAn309A2dezsJnT2Tg7Vti8MPV/rh7 + QI+bW5Q4WO+G4+0GPDUdipcXR+OtNYl4b0cW/rg9E6+siccDJNH7+PrGDgNWd5qxtN0Ds03umKrUYnGN + EZs7vXBsfiQe3ZKNJ3bl4r6NiTg8GyxN9zqPRLQ3ywW9FHUDFJuTeXKsIjHcM6jEA5t0+PlpL/zhRyH4 + 59sRuPAPtunXxNlo4LwdVy8F4cqFAFw54zs3DbQXLr9vxYV33HHxVXece06Pi48acO4BPc4JA/huMy6d + 9sClE2y7Oww4c0qPM/ea8c0jFnz1jDfO/jwc538Tj3N/TsWFv2Y78OdMfPN6Er78cRQ+ezyAMeODT26z + 4IvbbDhzwk8aFXrldAAuC4P3dvar4+64cozfddyIc8cNOHubCefv4Dmd8MWVe8Nw4Z5IfHJrIN7a4Y3H + F1klA3hbjwqb+/RY28326xFrfHlQfNiwc8KOgwujcHRpDG5eEoFbl4Th9mV23LMuCo/sTMZzRwvx/E1l + eHR3Pm5ZloDFJNH9JGId5SFoqY5DZWksCgpjpBGzaWIUcIEwgFMRV5yOOGEAF6ZLuG7g/t8N4LT/Bf/T + +L2O5KI0CSkl6d/Bd4xf8Z65bRLPT+BbA7gk9VsDOKM43mEA54Uhb84Azkj0RmKkBWF+GgR7UWx7KEjk + XOBvdUOIt0Z6PsJfjQhvcZefE/z1JDluJMVyGbq9ZVhDonlXox5vrgjB33YE4cuDjIUjNpw76oczN/nh + 7K3+vI681qcDcfUh9u2nGH/PEU+E4vK9AThzPBif7IvErxcG4d4qPXaxfm3LMmFvSyQODmdj31g+Yz0V + fSUhqGSty4wyIj5AhVALxQMR76dCbiSLO0V/brgSxdFu6Mo0YVUlhWi1H+uUF47XWHB/owlPtxnx/Q49 + nmt1xWNVMjxaIcPTNTK81CTDb4ZUeJdi98MVJvxtszu+uMkX5+5nv3khGRd/wVj+TRH7egWufdyEa/9o + Zf/vwLUv+oEzo8DFCeDKFK5dncIVTOEyJnHp8jxcPD8Pl78Zx+XPx3H17xO49OdRfPFaN957oRa/vq8A + j+2Owv4pdyxvlGOi2BXjFIujwiQpMGCkUKwBrPm3Acy6NlGjwUyjAYtb3LGMeWJFlztWSwawDev6xJ+b + XpIBvG3Ihm2DHtjSY2ReoYi9wQAW5q+0FvCADrtZt3YKA3jYC1tZo5Y2mtFHQVwlRv9SUFSwdpZRuBbG + 8zFreGUixcS3BrAc7VGu6KM4HGVtn0/RvpixsJpid2O2M7bkyHgdZdid64RjFM6PtnviiU5vPNluxWOs + Qw9Vq/FgtRseq3XDk9UKPF3tihdqXPHjahf8pMoZv6hxxqtslzfa1fjNoAm/m++Jd6RpoIPw09lAnBx0 + x4YmOaYrZehlLeuqUqCtWoVmyegzfmsA93HbV2dCvzQKWIfhVh1G27QYb9NjrMmAYfF8rRZD9Vppf6SR + rzdqMMqaNdKgxEA982s1Y72cYLz0Vjmhv86ZkDlQL+PxyTO4HWp05nHVcwawByZbjRjh+fSLPyIoEltI + PuuSKZyjXSmaXKWb5mpi9KhPMKEu3vhvA5ioilahMsINZRQxxRQeBf5y5PgpkONLce2tRo63MIApMDxJ + 2i1qpHqokGxWIpZ8MlovoEScuxYJNh0SfNln/AyI8nFDsJWiRtzIIaZzJwI8ZAjzcUZkgBxRAQrEUnTF + hQgRoEEySX4Kzy8lWofEaO2cAawh51VLBrDYCgM4Zc4AFlthAMdEupEPyxHB32inIBKIoyDJyjCjrNgP + VRWBqCjzRVmJTUJJsQXFRR4oLDCigII5P0+DwnwNiop0kglcVemB2moraqptqK6yoZyiuzCfv581L40x + l5wgo8CUIZ4Qo4HFn5sZyU4oylGioliF2got6mv0aKrRMT40aKpXoalOjsZaZ8kErmMuaG6Qo5t8ZbDf + inkj/hgbDcRAvx9ami2orKAAyXVFTrac56ZCUQHFSaGe52dAaYkHz9ET5WVi+morCgsplvJNyKLwSKOw + S05TIClViYwsHTKz9UgXBjDFX0aOCamZBiSS08YlqREVp3AYwJEUtnbm2UBnBAS5SiNtgoN53YLlCAwS + o3+dEEAB6E/OHTC3HxTkJF2PJIqrzAwLMjLdkZaqRcoNBrAwy/MlA1jNa6DmeWt4znpUVwrj14Rq/sZK + cuiyQmeU5stQWiBDTZkM7WyXIdbW+WNWLJsJwJrFoVi1MACz5MjzunUYalVKI+sXDHph6Vgwls8LI8Ix + 1R3AfmNGNfNBIa9LbSpzBfvANMXUbF0QljSEY1lLDBY2RGG0KhTtRT6oy7ehNIftR8GclUyRRk1Tmsrr + T8HawNzflu2HvvwAjLEWLGuMw7qOJGzqTcGOoQzsHE5nDkvCxr4YrOm0Y0V7MJa2BWO2NQgL2+xY0B2D + 6d4YjAvztyMaw8RIZ6yE4fYYDLRGorcpHN0NIeioC0A70dEgDOBgdFEPdbWEcD8IbY2BjJ0AxqMf4zEA + FeU+KC62sd2N7AsqakGFNBpbTNudmGDhdfFAYKAGPl4q+LG/BviYEOTrTnggWJjBYusnYJX2/bzM8LMZ + 4S0MYLMaZp0cOqUTNAonaAmd3Al61l531mBvMQrY5Aa7ZAC7IIz9OoJ9Opp1MS1QyXpI8RxrQlGMCXmR + jD+7UkJaCAVzsIuEFNbM9Ci1tOaT+BMgkzkoNUZHEa9CarwJxXn+qC6PQGlhMPKzfJGeQvHPfHXd+E0U + 0z0TScIgTrMiLdOG9Cwvxr1VMoFjJfNXjbAIFcIi1ZL5G8ZcEsrn7LEahDNfiJHBifFminp3ZPFcC6IM + qIg0fGsAD8frMS9WjUWxSqxJ1GBbmgF7MxwG8I5MD6xKM2NBigFjKXr0JrOPiz8nYxUoinZBXowzclij + 0pl/rhvAyRT+SaxlyQluSJ0zgdPmDOD0JPbRGwzgeH5vTKSY0p55LIR5knlNTLWelsj38H1pAuxr/zaA + 9SjMNqA4y4CSHDH9mxnl2WbJAG4q80Eb9Xh7TSDaKnzRWOKJ6jwTyjLVKEpVoID9tShFjrIsFWoKdGgo + MaG5wgNtdV7obgxwxCHjsaXeXzKAC3N1yM7kuafytxEZPE5BkTsqK23oaArGADHWHIiZJj/MNnhjVaMN + m1u8sa/NDzd3+OE24mSXP+7p8cWD/V64r8cDdzWrcZz58GbWu+O1CpxgDTtG7KV+E6bI4nInyXAYL3TC + eLGCfVGJedQqk3UGTDWY+F0emGm2Yn4Dt7Vm1mcxBbRKujF7Ol8hjYJcVSEMYA9sFSYw37emllqmwBX9 + uayv5Avd3B+oZS1uZg0lb5jp8MJUC/ebzYQR86mlF7TbsITnvmwgBKuHw7FlMh7bpxKwYzoRW8aisITn + sIjHXtHqibVdntgg+FGfjdrAE0s7PTDBOt9PvtBOPdxaLCdX0KK33oBuoqNeh3aiTazPSY7QRb7SS97V + x9cG640YbjJhosOCmT5vLBr2x3JqjfWz0di4LA5bVydg29oEbF0Ti41rYrB5bTQ2rY/Cho3RWL8pQsLa + zRFYtSlSwsoNEVi+nrlwrR1L1gY7sCYQi9f4YfFqXywiZlcxZ670xsIVXphdbsOi5dwu5XPEImEAz00D + vWIxOdxCPjftjalRK4b7TehoVqKxWo6qYheUFypQXqBCOWtrOWtYRa74A98NVYy9xgwlOrPVvJ5mabrw + LX1+2MPfdmAkAEeG/XDToDdu6rPipk4DDolpZRvF6CFX7KuX42CDG24mp7qjxx2nh71x72QI7p2JxE0j + QeSdVmka6JF8OboynKWRd2IknrSsCHmlGB3XnuqCwRxy3Sw1hhjHg0kuGElyxQj7w1CyC/r5ejtrvDCA + u1Kd0cdaMpLmhrE0xl6GMIDVcwYwz1+Mpskmd+NvGc9jXLJOSygQECNsdJgSI23IxSYzyQMlI1lMKa3C + fB7LYQCrsYJttIZtJAzg9eThwgBem6PAOoFsBTbmUncWaKQRwJvIMzbzOzfzc5tz1Vif44ZVWXIsy3D5 + jgE8W+SGJeUaLC4VJrAWS0u0WFGixqo5A3hzpQY7yVP21puwnVpIGFBL2WaLUp14Hho+Z8beRgsOtXny + GrjjIPvC4RYdjjZrcYy8844uHa+BAcc6jdjPfri52sLvJKfh+XSRLzWzDcSNJulsdzFLSix5vpheV+S2 + 4FAnBIa4woewBYs1gNXwl8xfPbmHHiEhRKgW9lAd94WBQh4YRe4XS84RZ0BBnBHlzIm1zMPN5HldeV7o + L/HHYHko+isj0VJoR0mKN1IijIjhscXo31A/MVUoa1iACzki62akBjHM93FJYq1PM+zRjjWAxRTQfnzd + n7w0MFRFfqSWjN8QcVMcIQzgWDGSLMaMGNaxqCittJ7xdURFCiNBiQjy7YhwMWUndWOsszRzQnGhGtW8 + FsIA7ihTYqhaiQW1SslI3Vkjx74qFxysdMYxapP7Okx4asQXT41Rf3QYcLhegR3UH1sqnbCV79/N67CX + umJ/uwF72rXY0arCphYV1nYwlno9sFzcMNLrhcluGwYlA5i5poY56AYDWExJP0E9PVWvx3gN47mKsVyu + wHgp9WGJCyaECVzqjFFqntFSGcaYpye4nSIWcn9pJeONmC1xxvw8GeZRg42mcpsppnzl60UyrC93xuEO + LW4fNODeeR54ZIEnHlvogccXmgkDnliow+MLtHhkvhYPTWlx/6SRcMd9UzbcN+mN0xPeODnlhzsmfXF8 + nheOEbfP+OMO6rJjs/44ujAY29n3lzFvj1QZ0JTtytig5klwjPAqTdegKp81sdQbzTVBaG0JQ2NTCEor + vJCWp0ck+/91AzhgzlCJYZymMl7zElxQmc6cxnzRzpjuLaF+q7KwzZjzWNum23ww1eaNwRoTetjXhNna + kiMn/5RJM1tVM+7rmXvENNBtfK4720kygEeYG0eKCNaCqSJXLCmUYzX73wb2y43C+KX+3lqm4FaBzWz/ + 7cQBas7bqCnv7bTg4X4fPMB6cLrbC7f0UIdzu4h9cLREhw7qhjp+Vz25cBPPpatAiUn2+yXk26t53HU8 + 1iby7Z3k3UeZp08yDp/ib/nZSCRen07Aa1PReGXajh+N+eKJHpM0BfSd4rupZ25tsjIf+GBdvZW11oju + Qg0q0shz2F6xoWw3tmN0qDBdhfkpl2ZnEogih4mN0zoM4DTqkTSTdBNjSgo1IzV+YqK4ofS6ASxHYhR1 + 1pwBnBNHLUG9IpbYKCXvKUtlXkmhZktU8vpQo/K1DHKtTHKwtBhhslAD8Rjx5GNi6mcxM5Sd+UbcGCxu + PAkRNwqHuyCU5xdKrmWPUUkGcCJ5f1q2J9JzvZCaJQxgEyLIx0KokcTav9HkgknMNem5VmQy36Rli3WC + jeSczAGS+eswgsPJb8XsSWFzBvB1E1wYwMFzBnBwsDgvZ4njhfE5YQAnU4elsv0y2JYF0c4oiWMcJ4gB + bXJUM482Mfd3lxjRV2LAUKlYwkKPBeUG5ngjVpQZsaqMPIV6tp/xXBchQ7kYLCfFnhsGsozkQxasKvXC + DmqimxrJyWo8cKRMjYNF7J+Mg+PVatzb6oUHukNwCzngRtakmXRRE53RleSM7hQFOpMVaI5zQSPzWWuc + Mzr4WKA9xRWNKc7SqPPaDDlqqJXFyPBG1t8OMVtbvjM2M7fc3u6Bxxi3z3R54MUuE17qNeAnPXr8tFOJ + X3bJ8VqPHG/2uOCNAVe8PuiKnw8748VRNR6e54u9XdRi+e7ID2Y7zt1QbqMG8fTgvvifwZvX119Mwazh + tf+uAZwQK4xfB+JjLAi3s84EqRHgx1zv44JAf6X0OCLMyBxu4nXR8DGfo64RU0ML8zeQCPbnd/M77IHC + DP63ARwZyhi3O5aviQ4TawE7SeavQAzzf1KknHVQLY36Lcqykat7ozDTE9mp7oxVLULEjdY8fx9Phwks + blSSDGAxCphaPFLUklB+r7hxIJD1kzr8uhEcxu8SS14lsX8JAzg71cBjG1GZ64n6Ahsa8ixozDWhUTKA + tWhLU6GH/GOQHEwYv2PkIcN8LKYI78vUoTNNi4Z4N5TxvAuZC/P4Xbl+DiO4NMgZtaxvjYzzJuqoBurO + 2ig31EYLMO/EKVEjGcD8/hRqkXQritM9kJvgGPWbE69zjPxlLU9jrUxm/0gKoyZkHc1kTc+m1stJ9JDM + 35xECzLizEiLNiCe7xGGb5yYBpq4bgDHSQawgrn63wZwcaoZJckmlFILFpMjFFFjFsZrkR9DjRrNfMHc + ks8YLo6XS2vvVvE31zGuxFq95dRQJcIApmbLZt9LjWGfvNEAThQGsFjaQWg7OVJTmG9SqXPJCbPYfrnZ + WuTlsP15HKHNcsgTs1JVyOL3ZAmjOF6BTCKLnxUGcFainN+l4LUyoqFILJdCLVXtLWGyJwZ7hAF8xwxk + 8XGO0b8CcbGhFIlBiLD7ITTAhkA/i3Snd4CvhQHiTQFdgA1rl+KuE7fg1J03Y9OGZWhqKJOmgDboXOHl + qYPZNGcAi9G/Wjk8NHL46BjwJg2ibWy06AC0Z0ZiICcKIxkUdskURSmeWJThhRXZ3ljORLiAP2AihoU+ + icUrz4ytlQHYVW/HnoZwabu7xo5dNaEkNsHYUR2AA41hONIaiVu64nC8Kx43c/9Igx2Ha4NwvDEEd7fb + 8VBXOJ4ZiMEL/VF4piOQiSIIT/aH4eZGX6wqMqGfyb2KHSDTJkOav5NkAIu1pRwGsOzfBrAEF5TwQhXH + u6ImXYtRftf6qSJsW1SJFUOZmG6NJeKkEcCDlWHoKgpEa65j2HwTRXQLO00LyXwzi2ozSXRLmQadVTp0 + Uyz2kzgNEENiWifxJ64YHUmROpBBsZomwxJuN7DY76UQvY2F/WEWymcK1Ph+nhI/IQH4dakb3q7T4D0m + wb+PeuKTSRv+OWHBZ2NmfD5sxBdDJpwdccelUQuujFhxecSCS8MeOD8kRgPPPT9uk3Bp3BuXx31xacwP + Z4d98Fm3BR9QUP6pUo23KZiFCfx7iuA/1hjwfpM7Pmw345M+C74Wo4xX24HtkcC+COBgGK7dHI6rx0Jx + +Y5AXDgViIv3heDiQxG4/GgCkYxrD6UADxCnk4A7YoFDobiw0ROfz3fD50NyfN6lwKcUBx82G/AbttMP + i+R4nEL7oXwnPFrqgieq5Hi6zhXP1TnhhUYn/LjdBS93c9snw6+meK7rvPHPw/E4f7oIF+4vx9lHKnH+ + iVqcf7oR556sxzePVOHM/RU4f3cZPjucht+vCsKrUxaSFk/8atwTPx/y4LHMeLnXgp/12vDLXm+81mfC + H6c1+NsaA77cZsGZXRac3WvBhcM2/oZghwH8oBj1HIurD8XhyiNxOH9/DL4+GY5Pj/jhrzvd8Zvlcvxq + gQy/nHHGT6ec8MpCBd5YpcHvNxnw5x1G/ONmYQD748rDQbj2JI/5dACuPOmDy0944sKj7jh7vw5n7lbj + 7AktzhzT4OubdDh7C6/jbd64dJqfeyoK136WCrydB/y9CviqGVfPNBINuPZNPa5+Xi4ZwBf+lIUzr6Xj + 65cy8feHkvHWATteWOqJu7qV7CNyHG50wwkK42cXhOFny+Lwu/VpeH9nHt7enImXlkbjVL+NosGEjR3u + 0nRli1stmKk3Y4KxvajSgE0k0bfOj8KD6zPw6NYMnF4XhwPzA7C8lXFe7IqONCd0kZAMZrlhmvG8vEaL + rd1ynFzphh8cd8dbT/vh49cYMx8xNv5FfM24OhuMy+cDcfmcv7QOsDQN9Kc2XP6rFRf/5IFLb7B9XtDh + 3ONsowfZLvcacfG6AXyHEWePa/HNnRp8c9qAbx70wFdPeuHMy6E493oszv8xBRffz8LFD3Kltvn69WR8 + 8VIM/vFoID464YX3D5vx0SEzPr3ZE1/fxj4iRoaK63SS7X47+9RxEy7ebsIF4vwd7rhwpycunvDFtXvC + +f2R+OdN/nhriw1PzFpxkzCAuymyenVY1anDCgrfFR1mrO6yYvtYMPZOhOLgjB03LQrFbcvDcO+mWDx9 + MB0/vrMYbz7cgjceasPLt1fgwe0ZkmG8oNkHAzUhFGUxqCqOQGF+OHLzI5AhRgEXJiCxKBWxRWmILcxA + fIEDiQVpEv7vBvB3jd0bIdYWvnH73/Adw/c/cP31G9/3rQFcnPKtAZxeFIeMgmhk83flZYdIBnBmog+S + oqyw+6oRaFPB20MJm5li26JCiLdYG1iHyAAKc18VIqwkyGaSKA3zOjFJ0rydcXdfuwW/WxuND3fY8cke + H/xrnxc+3+OHz/b544ujAfj6mD/O3cX+9zD74bOMvx9EAc/YcfnBIHx5ezA+2h+BV1eE4OEuG45V8ro2 + hOJwfwoOjudjS186JqvD0JzphUISkuQQLWK9VQg1k/ARqQEG1KT6ozXPn0TXRMJrwECBBWur/LGryhcH + Kjxxa6UZ9zL3PcHa8EI70abAE8x336uW4bl6GX7S5ozfjWjxl/nMx0uJ1Vr+Dg98eWcgzjwWjXM/TMH5 + X+Xg4u9KgPfrgY+bce0f7cBnPcCXwgQWI4FHcO3KOK5iApcxD5eujOHixXH2sTFc/mqcfW+an5vCxT+M + 4LNfdeBPz1TjR8fTcWJNEDb1aDFNgT8v3w2juWqMUjQMU9yOsEYNFSskA3ikwg3zatSY32jAbLOZecKM + pYz1ld1WyQBe3+8tjW7ZNGDD5gErNjPnburSY0M7+wd/7+ZWV8kA3tunwoEBDfYO6bCHNW33kAU7h8SI + D1+saDRLaxE3UqRUk0fUUzBUZ7hQ2MkIZ4p4N1RTHNaTuDVFUXyQvA2y/k+QQM2yrq+k0NmY5oJtWU7Y + mS3DXuImCur7eNxne/zxXLcfnmu34akGIx6tUuORKjc8Xs1rIWpQlQuerXTCDypl+BHx0xrm9AYKkDYl + 3uw34K1JD/x2gQ/enA3ATxcG4vSgBzY1KTBdIUNPsQydlXK01vC85gzg7loP9NZa0VfvSbijr4Fx0aTH + YIseIy3Mna3C/DVII3+6eS691Rr0V+skM3igVo2hOiX33dBfJ0dPlZNkAPfwu/pqXDDI8xpsdJVG/QoM + 1JNn3GAAT3cbMb/bA5OtJozU83urDOgtM6M934i6VA3KKaKLwuQoI4mujjGgPsEsoTZWjATWSaiiCK6I + VKKUpLqIgiYvgATV1w1ZPiS3XiS3XiSynmqkCwPYqkGqB8WwmcJZr0CUnqJLGMAeOiR46ZHoZ0RCgBEx + fkrYbU4IoqgJnEOotzOiKJxiQtwkxIeqkWCn8I/gMaMIioqUGC0SY4SIE2sAO8zf6CiltE3kuaaS2Ken + uEvbBIqnWJ63gPjTIZyCJUwYwBQjmWkk84U+KC/2QVGBJ4m5SUJuthE52WI0m47QECrk5oo1a9UoLNCi + qEiPkmJ+toRCotjEvKxHQR5/P8VtRipFQRIFHWM2kRDb9EQn5FLwlrIeVpIn1rH962uMjA0DoUVTvRrN + 9W6EHE11LmhgrDWQA7U0K9HbbcbokC9GRoLQ3+eH5iYLKijsc3KEkapAbp4KBeyb+QU65BXokV9kRmGp + O4pKPVBQ4o6sfBMycg1I4+8QI38TKdLjxVTMGVqkZ+qRSnGTxt+bPmcAJ6RoEZOgRHi0i8MAjqCoDaO4 + pagWUxwKAziIW2H+OuC4Wz2QCCLXDhbTbIv1f3ldHCOAzcjMJNJ4XZIVSJ8zgPOYpwty3aS1lcuKtWxL + LcrKDaiqEOavCeVsp7JiN5QWCqOAnL1QhooiGRrYJ7tb1BjvN2J2wgcrZoMlA3jRPBvm9egxzPwy2qHF + giErFo35YslYIJaMBmN+bwD7gxWNzGmVYopRtl0vuft0tQ+W1IdiNXn+ht4MrOxIZV6LJLf3RmUG2zDN + gEwxqjKBIi1RK4nHKorWhnRvtGb5ozcvCKMlYVjalIA1nSnY0JeGrcMZ2DaSjk1DSVjXF00eEIYl7cFY + 1B6KmbYQLOiMwIKeeEz3xmGsMwYjbZEYbIvAUHuUhMH2SPQ1C/M3FJ11gegQ0z+L0b+Ngehs5uOmAAnt + jQFobfBHI1+vrfZFTZW4mcEbpaVejFkz2591kjkxOtINsdFaJMV7IDbKLP2R4e+jQoC3BoE+egR6Gxxg + 3wwQsPE5LyNhhr/NBD9PA+uwDlajEiaNC7QKGdSuMmjkMui4NYoRwJIB7CQZwKHu7GceCoSZnSQDOMoi + Q7K/GzJDKcAjTcjnOeREUNDbmS+ItFAVkkPdCAVSwvlcpBaZ4m7vOdGfypyUFCX+uPBEVWk4WhqSUF8d + g7LCEIpqL4rufxvACXNTPIvRvim8TsL8zcr1476Nz3tIf8JJ666Fi/UabzSANbAzr0RIf9QZv2MAF0YZ + URnJvhptkAzgoXgDa4weixgPa1LJ+dKN2MNY2Zttxe5cL2zI8sSSdHdMpFGPpujRwutQGaNAMftUvjCA + 2a/EH5fCABZ/GqRI5q/jzvFU7jtGAWskA1gydG80gOPUzHVuc3f2i3XreG2ZCzNSzBLSU9iXU3UOA5h9 + zmEAG1GUxXzFrUAp92sKPdFQSi1LTd5WFUDt6oP6Ik9UMg+UpgsDmP2T/VWMAK7I0aKuyIBG5rvmSgta + arwYj/6SqdvRHMK8FYDKMgsK+L6sDJ57iiuSmWcyMjUoKrZINyd0NoWgrzEIw43+mFfvjfl1nlhab8X6 + Jht2kOcebPPBzcSxdm/c0WnDqR5PnKL2vb1ZhZvFOpEVTjjC2nwLOZMY/buzSYN1tQrJXJhf4YLJEheM + lyjYFwlq51ExVSlr6HSNnt9lwvxaE2ZqTFhYbSK30WAiX475NxjAmyUDmGi0YB3r83g+62muE/rzXdBb + pGD9NWK0xSIZwNPUQPP4vvE6M8apjaaarZhu88LCTj8s6gnEsn471o7GYMO8WGyeSMDG0WhqKOqoWncs + bfakrvLEuh4bYcWyLg/MbxE3ZqnRXaFEM/VwMzlKN8+7h7W6q9GIjkY9+7pYNkDHrQGd9XyN/LGP7xnm + ec1rtmBBlxcW9/ti2XAgVo7z+6fCsGE2CtuWx2P7qgRsWx2LLauisXUNsS4KWzZEY/PGSGzZFIlNmyOx + flOUhHV8bvX6cKxaZ8eKtcEOrKG+W+1P+GGZwCrm1ZXMm8TiFV5Yspz7S/mcwBKewzK+RxjA3F+y0Aez + 016YGncYwO3kSHW8ZhXM6SVs4xJeh2LW1pJcFUrFDVLCAE5XMD8r0ZGjwkChAfOrzVjbYcVWxsROcsu9 + xIFeTxzts+JWatmbO804zDjZV6/APvKj/TWuONqsxm1dZtw1aMO984Jw/4IoHB8PlaaBXl5jwBi/tzvD + Ca0pjhF4YjrM+gQZHzuhl+cwxpo+L4dId8M49ew8xvN4qgIj7A8Daa7oTJKhY84A7k11wYh4H2N/MlMt + jd6VDGDW2/FMFUayWJOEAZyrwbw8rbQdJacYzVJilL91jJ8dmzONx5LJq1OVmEpTYj6fW5ilxmK+dwX5 + xRry8HVFOqyfGwG8LkeONVkuWJ4m41aOjeQCYkSwMIM3CUOYfEVgPd+7KssVyzKd/8MAVmJRmVbCEmEC + F2uwoliNlUVukgG8tUqDA03uuKXTB0fYL3exD60vErP6uWFLmQG7atyxi31gV50Bexmb++o1OMR+eaRZ + LDOlJjS4lbX45g4j9jNGN5P/LmVtHxXT4BZq0cxrK6aaz0ggXyK/jw4XN7U4RlgGcSsMYF/WBJ8QJfxC + NAgIEQawASFBBoQG65n/dJIBHBqiltbdTWCdSJ37k7iIqEym/mLubE43oTPHgt4CH/QXBaK72I7mvBCU + pnojPdqM+DDm/SA36Y/6MDGdJmtRRLgGcTxWorjBKNUirQEczuMHszaJUcABPKeA6+ZvmI41RZg6GoQS + 4ZE6ftZdMoGF+RvOOhMaIifIpySI0WRy/g4F87irlMvjop2YO5XSDXHCAG4uU0trjo/WajDLdt1Yr8Ju + aoD9zHmHql1xrFaO09QMj1JnfW8kEHe2mxj3cmwtk2ETsbXGDXub9TjItj8spkrv1GN3uwbbOpjreo3U + ZlasGvTCbB9zWbcnBtrc0U090l6tlAzg3iqlZACPN2gxVq/FRIMeY8xRQvONM7dOMFdNlsnnpoCmVix3 + wkSlMyaoYSerZJhivp4hZqvE9NBihJ8MYznUJOkyDLLPjWXKMMPnllArrS13xn7Gy7F+Pe6eM4AfnfXA + 47NmwojvzYqRv1o8MKXBPaMqnBxS4q5h7o9TR09Yce+kDXfP98PJSS/cNmbBMeKOKS/ctcAPpxb64Y7Z + IByY8GO+Zf6u0aAt2xlFkTLkhsnIQwjW5cJUNfOPmW3vjbqaAFRV+5NLeyCR/Tc80eXbKaBD+ZkofiYh + SkZu4owS9tUa9vnGHDXayMN7Sg0YqrZgoskbU60+rAu+1F3eGGDt6eI1bS1UopHfX8M2EAZwzZwB3CLy + SaoMvXxtiHVJrAE8xn44xnog1gBeXCjHSvbZdaVKrBcj88vdeK1dCfZ7MYqa3HhXuQtuYqzc2e6O08yV + d/V64YQwgHt9mDt9sKjZA+NlOnRmy6W1zhvSnNCS44K+PAUWsE+vKlBgU4kbthW7YAevzb58GW4ucsZJ + 1tMnG214uT8Mr4xG4afDdvxw2A/P9HnggRYVbqdWvrXMBTdXaHCYNX0v6/nKOivGy41oYf4pSnZFkjC6 + 2KejiEjyFqHFIiPJTcllYoXBKkbEJ+iRIt3ApieHEVv25xQxZTp1yxzELCli2ubEKBckR7pIpm52LPVE + nAIFYiRwkhrFRGGiSjKFhfmbFeOCdL5fcK5U8uEUcrH4KGfERDojPJT5Jshh6n974wn7Y7DdyTEKOIJ8 + Nkqs7yvW9XUYwBl53tI2nlxLrP0bwuOERrsiMl6FBGrKNOaazFxPpGeL3GFAnGQAixsLxewywgBmjiBv + E2sgi5tA7Hby0TCFZACLUb/S6N85fidGdYbzuXhqqhS7s2QAZxLF5I6V5Iv15GlNrC/NrJXtbOv+Yh1G + mJunq8g1ajywrsGGrU28/uRcm2psmBXTlMc7o5YxXMaYrmT8NSUp0J/Bz+RZsJrxv7vOH0ca/XCwyow9 + xQrsyJNhN3G4VIE76xhbLX7kYlasY02ayuBnqXk7yPk6qO06WLfaheFLdKUo0U99OZhlQB/7SBvfV5fm + Ipm/Vek8h1QnaR3sTmI62wmbSuU4zjzzCOP36RYdnqfO+wFz1k97tPhFjwqv9rrhjV4F3uqT440BOV4d + dMWPBmT4Xp8LTg1asJX9bUjo9gBqUbGklDCAqT+s7txSg/gI49TXFRGsF2J9dzHds1j7V1r/N9r9W8RG + uUt1JUjoJD83+PpQ+/orpcf2UD0iI0zcavhYicAAN4dB7OeCAAFfMVrYRTJsQ28wgCNYUyQTmNc9KlyO + 6DBnwkmaSl5MA50YSU1Obp8rRqdm2sjThQFsQ04qcxB1iT3ImceeM4DFaOb/MIBjqJsi7dQ0rCdijWBp + muhARwyJqc3j41TUf+KGUmoDapLcdAOKs4WpaUVdvgUNuSY0ZOnQTA7SypzWSa7TK/7HJ+8ZTHPDQKoK + PWkadKfr0EZdUcN+WBzhjHz2n2x+T5afDPkBMpQwVuuop5qokxpj9dJ+FfWnAwpUxTjW/61gnyhLph5J + s6AwzSyN+hUzPn277q/4vyec50ydJm78z4w3SnAYwNSPiRZkUaOlsNYm2lWIZdvG8ffHh6kkiH3HY4cR + nBKpRDr7oBhlXMJ+XM52LaNuLEkwopCarzBOg/xoFfKYH3KZKwrjyE0T5KhMUaGemqilzIZ6cYNsvjv1 + E9svUS7lf7EMgDCB0+Jdqd2o6ZLk1KOuzFXMT9ymsQ+kp6lY2zUSctjGudl6FDBOczO01GziZl+FY51g + 8f9IgpgRxQ1ZkvnrgDCby/mZ2gJ3NJVbqdlsaKmwYawrCrvW1eEBYQAL0/e6ARwfZ2cghyI6IpAB4osg + f5s0zVdokDcSYu3obKvD/j1b8MgDp/D4I/fg6OGdGOpvYacIgIdJAYtZBbNBDpPeVYKHVgFPjQJ+ejcK + fJVkAJcnhKA3P47CK4mJIxLT6f5YkO6NZdl+WFPgT5LoicUMmEkmmMk4JyxngG2pDMSuhnDsaYzAzvow + 7KkNw17xuD4cO2tCsKcujIQzCodbY3G0NQ4H6iOwpzIYu8uYkChS72gMxf0d4XiiLxpPdYfjMSa27zX7 + 4nvddtzWFoz15Z4U5yppCmhhAKezk2QwqWZGuCKLBTs/Vpi/LihnQ1cycX4LXoQGCuPx5nCsmyzA5gVl + WD6QgamWGIq7GEw2xWCoKhw9JUFoz/dFa56NWys6KW47y0zoqBR3zunRWadHLxNYf6sRw90mjPWw4Paa + MdFDtOkxSoI2WuSEqQInLCt0ZuGWYy9JwXEW5QdL9Xi6UI8X89X4Sb4SbwhTlkLv/W4P/H3MC38j0fnb + mAl/G9bh730a/LNPiy8HDDg/ZJbM3yuj/zaBvwWfkzBiw8URb77XC1+SBH3crMNfSPDeYUJ/myTjHZL+ + P1AE/KXKiA8bzPhbiwmfUjx9NeqJK0uDgE1hwM4wXNsTgiuHQnDpSADOixFpx31x/lQAzt0divP3RePS + vXG4ek8CcJq4Mw64NRJX9wbi7BoPfDqhwOf9rviiTY7PxMhmCoY3K7X4AcnOI1ky3EVCeFeeE+4rccID + FTI8UinDYzUyPNMsw3PtMvxw0AmvLuR57wjBl3ek48qjlbj6VAOuvNCMaz9qxbWX23DlR8249HwdLj9Z + jWuPlOPMbRn4aFsY/rDCB39a4Y/fL/WT/rR/Y4ogIXxjPACvj/jj14Me+M24Cu8u1eKfm9zxxTYLvhHr + AB+w4drxQOCeKOAR/qZHiccTcfWJJFzi/tl7o/GvWwPxt30W/GGtG95a7oo3lsnxq0UueG0Ji9QqJd7e + oMUftuvwt6NWfHnKF5cfCsTV7wkT2B9Xn7Th8mMWnH/IhDP36vDNaQ3OntDjm9t1+OpWA745LgxHb1y8 + LxAXn4nElV+m4ZpY//fTGuBMC66cacaVs43AN/W49q8KhwH8h2yceSUdX/4gDR/yevx6VyCeWWAiKXTF + TXXOuIWE7V6K4hcWRuCVFQl4Z2MW/rI1D6+vScHTkyG4lcV3V7MRm9utWE3RvVjcQU/yOlmiwRLG+bYu + X9y+IBb3r0nFQ5tScWp1NPZPUug3qjBIwthKMd2e6Czd8TxToscKisPNXQrcutgFTx/W4bWHPfHeywG4 + 8G4M8M9o4Mtw/pZgXD4b8C2ufu2Pa5954+rHjL/3PHH5txac/aEeZ5/S48wjYq1kEy7c6y4ZwBeFAXxM + i69vU+Obu9hmD7jjm8dt+OYHgTj/q2hceDsJl/+Sicvv5Ult8/WvU/CvH8biowcD8e4xK97epccfd2jx + 171GfHrEyphhe5/0w9W7/HDlpBcu3i6+w4xLd/L75taQvXinL2M8DJdOhuOTQz54a4MFTy2w4BYKmO3d + FOAkLMtJXJa06rGsxSitoSzu+N826Ivd4744vCAAp9ZG4elDWfjlPZX47ePN+OAHg3j/+4P43cNN+P4t + xTi1PgXbxiMx0xqBnppIVBcEozgnBIV5YcjOj0ZaUQKSipL//9oAFr8hvTAaWQXhyOFvu9EADvVRwd9T + CS93NawmkiwLRbSPHuEBBkQFapEQoEWctytimedTSfIaSfCWsXgfLDbg4R5fvLU2Dn/eGo73t/rhw61e + +OsmH+YCX3xyMABf3BqAb0754/IjAcDzduBHEcAL4bj6WBi+OhWOj47E4LUNUXhmOgL39UXgRH8Sjo7m + YOdQLpY2xrLu+aGC5COL4j/eT4konmeogcSStTMn2ILW7DAMlkegs9AbbXkeGCv1wroKf+wu98aBMg/c + UmbEPVVaPF6nwbMtGrzQpsQzTewf9TK82OyEX3TJ8c6YXjKAP1hixPsrtfj7NiNzjTfOPGDHmafjcP7l + dFz8NXPBH6uB94QJ3AJ80gl81g180YNrX/cBF4dx7eooLksYwaUro7h6cRzXzk4CX0+z/03h2vsTOPfO + EP72cgt+dV8BHt4RgV0jJiyscJGmSRzJVWA4R4mhXPbvPBL6AlcMFrtiWNwFXq2S7gxf0GzCbLMBixjr + SzvcsbJbTH3uhfX9RK+VcMf6LgPWsU+s42/d1CoMYDl2dLhiX78Sh4a0ODCsx75hM/YOW7FnyBu7BinY + my2YLlKSeIo/6pwocCie81QkcM4oYJ4piSdBo/iri3ZDK9FLMTYSp8R8EqilFEfrk1ywLc0Vu7OcsC9b + hqP5FLNVGjzaasXz3f54kbnshRYLnmWOeqJKhe9VOszfp4hnq1zxXJUzflDlhB9Vy/BT5s5XmtzwWocK + bw4a8daEB96cb8PrMz74KfvzfTzvrS1KzFRRxJdS1PAYLbVzBnC9CT11FvTV2TBAQTbQYMVAo4kwYJDt + Nsh6LLb9dTp0VVDIlbmhs1yFbgrqXtbIXp7bANt6oNoN/Txmb7Urn3dGP89vsF6BkWYVRluVhAKjLeKx + HEONLhhucpUM4KlOI6a73MlByEkaTBiuNWOg0h2dRUbUp6tRFuuKQoqSEpLtymgD6uPd0ZDggbo4I+ri + SeKJGgr0Sgph8Z7CEMa5PzmVDwmrtwJpNhXSiQyLCqlEijT6V40EcsUYIwWPMIGN3LeI6Z8NSPA3IiHQ + gFh/ihY/ChgKpogAB2KCVUgk+U+M1EpbQfBTuJ9G4SzuAk2jqEgmYRfG7v/JAE5LMiGDBF9sxeM4nncC + RUUst5EUQxEU1fExbkhPMaAg18acakVOpgnpqZoboJaIe0a6UjIss7OUENMW57Iv5LEv5OVqJOTmqCWD + uIDP5WSSsKeTyFPopiVRHCQ5SWZwFkVvUS7blvWwpkKPxhoSeQrpFnKtlgax3i1jpEFNKNHa6DCC6+vk + aOC2o82AgT5vDA4EopvxWlfvLpml2TyXDH5XFoV/bh4f52uRladHVr4BmRT5Wfk6ZPBxag7bL1uLpEzx + 5wRFEQVKrBAnaWqkUMglU9ClZPB9FOliX4z+jYylsIxyRni03PEnSJgCwXYFgkLcECJBjiBxlzW3IeTX + oWFyCfZwhTR9WgSFXky0EgnxFHEUmxkZBrYLr0uqnG0ql9pTtNV1A1ise1dSokMZ82JluYkwSFNClxYr + UMZcU1bsjPJiJ1QUy1BbJkObuOGhS4vpESuWzPfHioWBWDTPi1xbh+EuNcbFNNH9JswftGB22Ifww4KB + AIy1e6ObHKaZeaQlxw09BVrMo2aYrQnGqtZ4bOzNxqrODOa1KNSJO5OTKEoT+RvE9LoUrZkUrUWpFlSm + e6E+wwetWQGsBaEYKYnAwro4LGtNxuquFKwfSMOGwRSs7Y/Hqr4YLO2OxKIOOxYS0+1hmN8Zifm91E7d + sRhui2LfD0Nfi526IUxCX6tdMn/bxcjMKl+0Vfuhvd5PMoA7mv3R1sjnCDH1bnOtL5pqfFHPbR3fV1vl + gwrWmULqE/EnmpgaWEwRHM/+kxxnRlykAfZAFYJZt4J91Qj20SBQTAVt07DequFnVUm11t/K5zz1Evyt + OnizP1v11IQqGbRywsWx1bvKYCKsNxrAHm4ItygQ7u4iTQEd5SFDvBeFsT/7VQhjIcyMzDADMuyMiTmk + spYKpEWwn/McM6ONyIoRgt8dGay1mUkWFFJb1lfFoK0pBY21cYwHOwW1N1KT3ZFIMS8g1vu9DjH9sxgB + nJnjy31PxCWaERaplG5UEAawPVyF0EjyCoFoMQ20Zs4ANkBMAZ0cY5LOIz/CiIoIvWQAdycwf/I408lm + LEk1YU0GdS2xK8uKfXle2FPgi8254gZo1q50MwZ5DdoSxSwKSuZZOYriXJHLrfjj8roBfN38/X8xgBMY + hzHMdeKPHYFI/g5h7qfxfMR7BNKS2YbJGmSmMD9lOkzgAkKsY30dVfkW1BV7obGMcURu0lTihdoCC8rF + SGHqdmEAC4gpWsXUvML8vW4AN1V5Me78WNcCmK+C0Vj33w3gzCxxY4cnGuoC0d4QjO56f9Y4HwxXWzFR + 7Y6FzIOr6qzY3GjDnmYvHGq24UizFTe3euBW8ojj7Xrc2qrG0UY5DtS44oAwPxo12Nukw9ZGNdbXK6kv + lFjMmjhT6YaJMiXGysSoKRcMlriwX4qRakpMVqgxn3V0QbUJS+o8sLBSJ/GKhYVKLCvTYA1175YGDwmb + Gy3Y0GDB/FLmEXGzW5EC/aVu6KtijWbtHGtyx3iLFWM8zmgtwbo+zno+znOfaPPGVJsPFnQGYWlfGFYM + RmLVUBRW9Nml3ztJzDZ6YlmbjXnCU1o2Y7bNiPF6Dforlejg97QUk8vwnLvqjOhlbRDTsooRvx3UZB3C + /G008jUDOYAeQ7VGzGuyYEG7D5b2Mg8OBmL1cAjWjYdj/WQENs9EYceSBOxakYhdq+Kxc1UsdqwRiMGO + 9THYtj4a2zdGYevGSGwWRjA5r8C69WFYu86ONWtD5hCE1Wt47G8RgJWr/SWsWOlHcLs8QMLyZXxe2ud2 + qT+Wzfpi0XwfzJ9nk6aAbm9UoK7cBRUFTigVBnAeeYeoA8zHpaxp5RkK1LA+NGW5oZ2Pe4RpWqajvjRi + LXXUpg4ztjI2dhIHu8mlyS9v7bHiaJsO+1k/9zFG9pAbHWpQ4VinCSf6PHF6zB/3LyCPnwrDnh4fxhzb + LV+BngzqVWGEJDlM4KZkJ3RlkDvxO6cKzZifT2RpMM26OU0uMJWuwjj5wGC6HD0pzpIB3Jkik/ZHMhh/ + WeRafL9kAqdrHKauGEFDjM8ZwNKU0JniGAppKs5B8gQxqnhYGMx8/1gK45XcQ3yfMIBneazFPOaKPB1W + sc6vLdRiHeuWNAV0rhwrM52wlL9hhVjqJFshTQu9lhCvC0NYQOyvzHbF8hxXLCUW87dLBnCJGgtLdRLE + /pIiNZaJPlEgx2rG/dZKDY60WXFHfyBu6w3E4XYv7CZv2V5hxI4qd2l/N7ntHmEAN7D9GccH2T8PN7HP + NqtxE7XNTa1aHsOIfewz29jPV9ZaMFluRHeRDk2FelTkaJBFnp4YLZP+DBezswhDRhjAQaFy+NupA0NZ + m0J1/9MAlkxgMQpYrLdL/kK+ms78nJfsgbIUd1STA9YzRwsDuJ38rjPbiq5cH+qIANRn+aM42UZOaUYC + OWZMuAYx5JvR5JrRYnmRONaPZDGDBOtLphcSUmyOaaBZF4KjtJLx+28DWNxU5DCAwyK0iIjSS+ZvDOtH + OI8Zalci0N+J4G8KEBCjjMmdApUSnxJ5PJZ8S+TOIvI4YQC3MUf11uoxr8GAJU16bGnUYi/b90CdCodr + 3HBrjQIn+Ny9nVbc1+ONY8wPuytdsaXECZvLnLGjVo0DrWYc7fLAzT0eONxjwv4uPXZxu32AeW7QhlWD + 3pjt98R4z383gIdqGbv8TnFzyni9VjKAJ2rZN2rYJ6o1WFCpwsIqNwnzqUlmauSYrnXGfGKG+XohMVvL + LXXKJPnbvHwZY59Ik7E/yLCgQIalPN+17K+7m5S4qUeHU2Me0vTOj8xa8eisGY8uMkp4aL4ed4+rGYty + 3NrlguPd/P2DGj7njvsm2QbTYiQwY3XUjNuJk9y/Z7437iWEEXyMr+8kH1zepMUgNWxpuIxaXYasUMeI + yixqoNxkNQrFDVDFnigqZmyQO8ewloXGyRAYxbiMJJeJcWINdkZqvDPjzA2VWTrUs+41sW+3sl9eN4Dn + NXphsoVo9cZ4kyf6aoxoL1WhhX2vfs4AFlNAi5tOmuZmE+hOl0lLqI0WKDHO/jmPmCiUY36ho7+uKHLD + ataItdSHm1jnNpc6DOBNJc7YXOSMbWUuOMj4uLnVyNzngdvEWvmdXjjKnLe125dx5MFcqkFXlgua+P2N + vA7tWcw/zA2zWa5SPtnK79gl/pcucsLhQicc43FPsI4+Ss34YkcAXuoNxrMdXniM33E/+/id1S44Sr17 + iBz9ADn7buaFLbWeWFTlgf4ixjLzeXYc20yM/mV7R7Jvh4st9YLQbHEx1GwJ1IVEUrKRGoE8J4V8kLhu + ACclidlrvmsAJ0WTO0W5Ip1bxyhguWQC58e7SUawgMMAJteKcUEa+5d4r/iM+GxshDChndn3HPlGGK4C + Iu8EBIqbT/g43FUygAXEVM+xyY4poNOpGa8bwGJ66GAeSyCM5xWTpEVyJrlYtoV5w8K8YURMvFhuRMw4 + 4ybddBgeoZKMX2EAC9ipof7TABY5QSxZFG53pV51RTy3KXYXpIY6IZvxWhrtwvhRoC1bg55C8lLm015q + qeFijTTyd2mdJza2+mFvdwhu6gvHoc5Q7GoOwNJiE3oTnFHPWJYM4BjGQSLrWZoWkznuWMm431Xrz1zu + gz08zvYCF2yaWzprT6EzbqV+urPBC0eqPbG+QIcpal+xVEJ7mgKtrGmtwgBOVbK2qiXzdyzPjMlC8qV8 + E3pYH8U6wLWZrtJMTPXiBoRkxj1jf4q1eB05wc0VStzLvPME89sztS54vkmBH4vRv31qvN6vxlt9Svxm + wA1vDLrhl4NyvNgvw8N9ctw+YMFGcqs+1t1MH15HvQw+NxjAYhSwjzBOfV0Yf0rmeT01qkGqGxIiTd+B + qCvXDWA/X9YhbsXjkGANr4uOWxUCA934vBy+Ps7w93WSIJZBElth0Ippmu2BvLaEw6hVIJLXW4p9Xkth + AAvzV8SiuKFBGMA5jJeCDGrPLC/JAM4VNyBRl0QKrR3A43vx+MS3U0DPHVfUryjWILEv1gcWrwsjWEwh + LmJI3GQhbh5NoZ4Vo4CzUvUQyxqJGa6EqVmXY5QM4CZyDjEleGuiKzoYJ93Mcz2Mj+4kFTqoKdqoKZpS + tKgQ/StChmz2k3TWNMkAZr8pZqzWUUM1J3qggfW4NkbrWDosnFqeMV4WKWfsku/FaVCYoJXW/c2hrskR + 0z7fYACnUJslhwnzl9qb+kz895MuzQjF9wkzmFo2XdwYHKZBPGtoNH/3dRP4Rlw3gJPZh9NiNN8awBVp + VpQlmSUDuIDfVxCrRh7z0XUDuJh5o5T9qypNzO5rREupJ+pLrNIo4FJqJDH6N519RywDkMrtdQNY4EYD + OD1V/IekRnamVoIwgAXy2DfEyF+h/8SU9snx7NvimAluEm40gHOSVSjJYDvmGqnZyGmotRpKLBhqD8f2 + 1TW49/i0MIDtFIKhEFuxHnBibDhJRQgDLhChQT6EFwPPnwIxGgO9Ldi/axPuO30bHn3wFI7fsgfzRjpJ + oIJhNrhCp3KGSecCs94Bi1YOLzU7gU6BELMSMTYSt4QQDBTGY2FFCmaLY7AgKxBLsvywKj8QG0qCCF+s + ZOcXo38n4klS2YibKwOxvc6OrVUUKXx9U6kftleHYEeNHdurQgk7iWQMDjTFYX8jhUpVGAtbADble2Fn + kRduqgzCXc1heKQrCo+2heJ+JqEHaqx4uC0It3fasb7cG/1ifV5vBiQ7SQY7QaZdjiwGXTYLdyGDWZi/ + 1STx9Uyc9dks3gK8oK0Uv/NaIrBmIgfrpwqwpDeFRTyCiCQJipRGADsMYB+05dvQRZLQW0lQ1PUKsdZk + QF+zHoOtOsn8nRiiiBy1Yf6YJxaMEiRd062CPCkoQEmwyxXYUqnGPhKD26rNeICk+oliPV7I1+DlfBXe + qtTjT83u+GDAC/+Y9MPfp234cNyE90l6/trjho+73fBZjxpf9+pxfsCEy8MeuDJswdURK64MeeDioJgS + eg4kPueYIL/qccc/WrR4r1qOP5S64HdM7u+QbPyeheOPRRr8pcSADymG/1ZvwOdtJnzV74HLC/yBtXZg + ix1Xtgfj8t4gnN/vh7MHbDhzxIazx7xx7o5AnD8ZhosnInHlzmhcuz1aMn+vHQ7F5e2++GqZEZ+NyfF5 + rxxftCjwKcX7ezVavFWhwfcpAB8k8bmNZOQYC82JQhlOlchwd7kM91UxuTfISDZkeGHYFb9aZsaHh6Jx + 9v5CXHuuEfhRB/CLbuBV4rVO4JUWXPtJA/BiFdiYuHAqA58eiMDHWwPx8eZgfLQxGO+vDsSflwfhj4uD + 8faCYLw14YfXht3xCovKb+er8OEad3yyyYovdtrwzT5vXL01CLibv+fRJODJZOCZFFx7Pg1Xn07FhYfj + 8NWdwfiU7fD+di3+uFGF369X481Vcry23BWvr1bgt5vU+P0OHf561ENaA/j8Q/648rgwf/1w5XsWXHrE + jPP363H2HuK0HudOGvHNCSO+ut2Ir+/0wLnTPrjwENv8+UhcejUdV/9cCPyrDtfOtuDyWYcBfO3rOuDz + Clz9sBCXfp+Ns79Mx1cvpOKDk1F4ZYsPvjdPjduanHBTjQy3d+jwyLgfXlwYgV+tTMQ7G7Px9voM/HxJ + LB7o98bBBi228fpvpvBbQyxt8MBsDfsxRcmqGoq9Hn+cXBSPB9em4pHNabh7TRQOTXljuZiaMYeEMl6G + DhK+URb7BSV6rGrQY3O3HEcWyPC9vUq8cq8H/vyCL86+HQF8THzO2PomCFfPBH6La18H8jf6AZ/44Npf + eQ3+YMO5nxhw7nkDzn7PiLMPmXHhPsb43R44f6dJGgEsDOAzpww4c787zjzqiW+e88OFX7DN3krElT9k + 4OpfcnHxnWx882oqPn8xDh/cE4B3jrjjtY1ueHW1K9tBhQ92GfDPw2Z8c9yGS6d8JRP44p1WXLjDzNh2 + x+UTYvSvwwC+eioEF+8IwT/22vDmGjOenu+OY3167OxSY2OPBktbVJht0mBxo45tqMPyFgPWd7pjK/PA + gSkfPLAtEb+4uwrvvtiLv/9sBF+9vhBf/noGH3+/H2/c14hnD5bg+IoMrOqPx0B1GGpy/FCWE4CSPDty + 8yKRwdybVJiIuEIxCjgdcQUOJOSnSvhPA/i6MfxvpHwHklkrpm4W0zZzX+D68//5Pum9c8buf4P0nqK5 + z3MrkDAHYQAnF6citThZMoAzimKRXRjxrQEspoBOiLQg2FsJP6sSNncNLCbuWyikffSICCShDtIjOUiL + tAAFMiimi0m4BoNdsTldj+PVNnxvKBSvLI/F66tC8eZKb7y53ILfEn9Yzxy61w//vMVfGo1/6dEA5ooQ + 4KUw4AfMV0/F4Ov7YvHR8SS8tSsFL6/JxOPTaTg5lomDI3lY3ZGG0dJQNKd5oiCcJMVfjjibAtEWJcJY + L2PNbigJ80F/YSym6pIwVBaC7gIr5pFUry/3x55S9q9SD9zCfnG6XINHqlR4qlGJ51tVeLZVjueanfGj + dhe80qvCO+MGvDtjxF+XmvDXFTp8vEGLTw9a8PWpQHzzcBjOvpCI8z/LxNW3SnDtnQrgfeaAj1oAMRL4 + U+Jfnbj2TS+uXuzHlcuDuHJlCJeJq5fFFNGTwJn57HvTuPbxJC69O4Yvft2L3z5egSf3x+LglAVLKN7H + 8tiuFKsDmWI9ewX6sl3Qk+uM/gKKRgrPsSo1Juu0mGkyYqEEPRa3GbCccS5GAa/p8cSaLg+s6jJidTvz + R4sSq5vlWN/sik0trpIBvL9ficNDWhwa0uHAkAn7h6zcemPfoB+2tXtheZWBAsINwwVuGCw3ooMCuzxT + rPsjI3FzJqF0Qa00/bMSgyS4E/EqLCJZXZ2oxNZkV+xNl+NgthOO5rK2UDw/0MA622qlmPXB91tteL7B + jGertXiqUomnKtzwdBWFR7UCz9XI8UK1K35Y44KX6lzws0Y5XmlT4fUe1q1hM34zOWcAz/fBzxYG4MEx + CqcONWbrxBrAMnTys82s9Q016v+rATzQpEUf825XtRptFPdNFOBtJRRVpSp0lQso0cfz668meLw+Href + xx+slWO0mYKvTYeJDi3BfWJeuxqjLW4SxPPTXQZMdZoxj6J9jLl9uNaEPrZlOwVcrfiTP9oZBWGuKI5Q + UhDqUSdGAJPA18WbuG+QUBOvQWW0WjKAC0JJTAMovH1ckealQIqnEqnsq6nubkhiH4ifW/c3Xqz7K0xg + cdOgWf0/DOC4AEHeKUzsJPsUOSlR7NMk9lnJVuYBMzLiTMhMMHFL8i9Bx9d1SI4Va6hpkBAj1lETBjAF + 3ZwBnBTP96W4IyuNQl1MBcvH8ST+YpvIz4npU6PD5fy8GmnJemSleyA7w0hhpEZCnCshR2IcSbkg5iTf + qWIkG2MoM0OJ7CzH2rXZWfz9mSTpcxDmcJ4wh/m6QE6GAplpLshIJf9Mc0VuthxlhVrUsM3rq01orvdA + e7MnOhl/nayxnW3u6GD/aWvUoqVBhVaiod4NdbzOjXyuq9MLPd0BaGv1QWWlGfkFamRkKpCWxvPKUiE7 + V5i/YipnHVLJa5Mz2Q483yQKj8RMAbYxOW8Mf0sUhUpUrDMSUlRITNUQWiSlibWr2KYpakRT2Anz1x7p + xC3Fq5gGjQIuVJhlYSrYJVAHMAbs4k8MvibW7xKI5DWI4jWIosCLYjvHxvAc2K6p/I5MHl+M/pVM6zkD + OD9HIa15JwzgUvKL0lLqijIjof+OAVxe4oIq8tXqMmfUsm+11FGUMrbH+oxYMO6NJTOBmB23YYxceKhL + hVHW4Ile9oleI+YPWDEz6IWZAX9MdvtiqMGCbh6/LU+FbrbZUKEZk2W+WFofwxyVgSXNqRgqDae+MSGH + 8S5GDCRGMMYZL1l8rjjFk6LQBw0ZvmjNDEJvfhiGiyMwWUkNVB/Huh+PFV0JWNEdh+Xd0VjeG4OlvdGY + 7QzHTEc4pjsi2BejJPN3rCMagy1h7Psh6GkMoYawSxD7HbVBaK3yJxwGcFudr2MEcJNYp47f3eAnGcAt + dT4OE7jWB401foQvait92WZejDsz0ijWE2OV7CvsXxTP8ZGO0U5hAUqEs//Z/dUI8VGz3qoQ5KVEoM0N + gZ4qQsPHOgQTQTYtfD3U8DLK4a6RQe8mg0Eug1Ehg4nwIDyVMnjrZAgyK75jAEe4OxEyRHq4IMbTDYl+ + rJtBRqSFGpFu59ZuQGoYEcrYDWWMRFLcR5mRHWtGTpyY6suCnBQL8jJ8UJYfhLqqaP7mBMcI4IIQxpUn + +6oRcfHMJ0TMHGKZs8RI4NQMT2kUsBjFFc3fHxquQOANBnBIhAPBkWyDSBVjXiON0oiJ0pGH6JEWoUcO + z6883IDGKCO64s0YTqaWS7dilrljWZoRa1L02JLujl05NuzI88aGbE8su8EAbk+ixoxXozJeiVKKe/En + pViPLjV2btowQowCFkhLur4OsAZphDB9rxvAYpsYzxzGPhYiRomEOEOMAI5h7kxONEhT3qfw/Sn8XEqi + SjpWVrpGutM8X4B9sIB9vSBdJ60DXE1uUl/iLZnA9YU2VPO5Ur5WxDxQyFwhDODSTCVqC4xoKnV3oMID + jZU2NFb7SDceNNUFop5xVyFmHPgPAziL+chhAAejtS6IMe2L7hob+ivYhhWs65VGxyiVegu2N3hS+1up + +804wNp4gFr6cIsGR1rVhAoHm9ywr8GN71Fje70Gm+vV2NCgwbpmHTmFgf1XhxlxQ1o5616xWEdR/JlO + /pLnjNFCF0yxri4gl1hS547F1XosLFVjEbGySo/1teTljVZp9O/mJgs2cX9prRkzVTqMl6kxUKZEF9Fd + pcGAWEeR9XyYeXyI2l9CrQcG+RtEbhmpJ99r8sF0eyBmOoOwoCsY0y3+GKl0xxgxVWfFwhYx7bMNi9s9 + MMXfOVTD45eSwzDftZWo0VGpQze/o7fBhG62R3ezO7paiCYzeprE7CGMqzqztMbkok5/rOgLwerBUKwb + tmPjaDi2TERj+0wsdi9MwP5laTi4mlibjgPrUrB/fTL2rkvEng3x2LkuBjs3xGD7+mhs2yBGBjuwcV04 + NqwNw7o1oVi/xk6EYN3aEKxfG8rX+B2E2F8nnl8dgrWrg7F2VTDWrAz6LpYHYuXiACxd4IcFE14Y7TOh + g9ewjnm8Mp/cLc8FpbmuKBV1gPWzjLVTjACuZT0VMzS0sc528vmhQqVkOC1r1PNa63nNqSmJ3eQzhzs9 + cHOXMIDJHRkTe2vcsLPcGftq3XBLuxG391hxasQP9y+IxF3zI3Bw0B9r2aYTBXL0psvQJoyQJIf5285a + 3S+MWsb7whILFhVZMJtrwGymFrPsPwuztJjM1Ehmb58YBZzijK5UJ2kE8DDrmjB7hfk7zfdMidG/6SrH + aGA+L8zheTlzBjBrsxhFPJgi1hV2GMAj7C/zWK8FptlPhfn7nwbwynwt1hRqJBN4LevXarbb8kwnLBYz + yqU5YVmmK5aRaywnVvC1NcIkFu8jVuQqsCyPyFdgCfn0kmKlZPouKNERWiwoYn8oUGKJeJ3XZTn7zZZy + NW7u8MKpoRCcHLLjeG8gburwxwFy2D11HoQZexin+2oNbHsBHQ7Wa3GQ/fJIowZHm9h3qYEP8Vrtb7Fi + Z6s31jV5YWGNBf1iPXHyzypx85oYIRjjGAkVJoyXYJk0k0hwKGuRMFrtWgSG6iUIAzg4UI+QIJ0E8Ud9 + WJgecdEm5kzyxWR3FDI3V6RbUMv83JBuRAv5XZtAugmtzMtNmV6oFGsIxnogLVqs9a5HEmtDEvluYoI7 + OYsHOYsnMlhzsnL9kUntnZrlh4RUG6KTLIjg+0IjdJIBLCDO0R7B8yDE6F9hAEfzuJGsH4IvBQcrEOAn + k+Awgf9PBrBaMoBrSnXoqDZikP18iv1+eYuReUmHveSCIsYPUZ/cXC3HMcb6nY1G3Ma8cLhWw7h3wVZy + JbEm7N4GPY60W3Gs1wu39dtw84AHDveZsY/b3cOe0tI8/y8G8Cj13YhY+5c5VxjAk3UazOdzC+p0WMzv + XFanJlRYXM/YqVNiUb0Cs8QS8ViCG1/nc5VyLCh1xkS+EyZyZJimHltc5IxV5WJ9Yzl2NlAHdmpxx4g7 + 7pv2xMOznnhkkTth5r4J900ZcOeQCkfbndgGMhxocsItnXKcGDDgnjEP3DvlKY0ePjlilHDPuAcemLJJ + uJc67QRxZMyCLR2sE2UK1DPeihlr0gi2MBky2P4ZrMcZyUrkZBmRnWNGIvtveCLjMI7xGCvjdXdBopim + M5VagCjJpH4SI+f+wwAerPLAGPvIvEZy0iYbhlnXelkv2llvmguoCXNcpCmYG5h7mpl72ogu7g9SZ4/l + C+OX7cy+OFWkxPwiNyzkdgmxvNgNK1nHVpcqsIH1YhM1+BZhBIstH29jG+8Rxj/72yFez6O8/kc6bDjQ + 7YNtXT7Mn+6YpKbsyXIYb808h64MJwxnOTPPuGL1nAG8lzr5MI95K6/N8WIX3Ek9en+FBk+yLj5B3Mdc + fKLSFbdXOuNomQz7xOjjAidsY+4Q09MvLzZigmjPUaE40RkpkTLEsU9HB7ENA68bwNQHczfsCt6SKLhL + KvlaihHJSeQvydSC5E5iNLAwgJPF9MrfMYBdqBeFsesiGbtZMa7IjpEjl8jj68L8/U8DOJUQo4aF2faf + BvB1BAY7wT9ABn/uB9ldpLV6hQEcRq0ZLThlmjs1lifzgQ3x5GR2/oZAxk+AGB0eJUdEHLVWKn9LBvNI + qgfiyMvEyF8x60wINba4mdY+Z/xeR5idGssubqjl9xFie/0GP2H+RhJxfD2Z55NmZ55gzJZEOqM+WYG+ + IhPGK60YLTdjlPppjDl9ilpqTaM39nSH4NbhaJyeSMKdw/E40hXB/uYhTQHdEPVvA7ghQc5apsIY434J + a96WKh/sJE/bzjy0iXV6XaYM61grt7PfHinR4LYaT9xU441NYu36XJ1UM9tYE5upe1vS3dBO9Gczb+QZ + Mc3jLSz1xkypJ0YKTOhkvm9kTW/IlPP9ruigRh5gHM7wO9aTsx2l3jtd5orHWMOfqhIz4rngR+1u+EW/ + Gq8PCANYhbcGlHh9SImfDynw/IAMDw644VifB9ayJnWnKJEmRvr+LwZwGPVPZLiW11+HKOZxCeT319f3 + FbjRAPb1lSOAeikwkNc6gDqJ2yAeIyBAAV8fF3h7O4xfAV9+t9gGCoi1ev2Y64kQf9e5EcFiBLJYA9gx + AjiWsRMXIZOmNE9j7OSQ4xeyRgkDuCjDJumfpGhyfruSus2V5+/E4zohJECYyowdIjxYrC3M3xPG+hOs + RChrS7CfGAnM+Ob3hVOri/9HhB5PjCc/Z1/KpC7MpRYoEmtlM4fV5BgkL6yZ3KUljfwrzhnN0cxNjJP2 + GDGdN68vz6+B/a+G/bAklv2N557OfpLMupZB5M0ZwGLGuGbWyUZpFjkdysOU0vOFIQTjNy/MGTmRCmRH + K9k3xdTMamTyM5l8rzT9M/VMagT7+rcGMM9ZzP4WRX0Y4xgIkB5NvcN6m8B2iWV9/U8DWOw7HiskfMcA + TjGjgnqwlPqwmFoxn98njf5lG+WyDwsDuCRegbIkN1SyBtSSAzaXWtFQbJEMYDEFdFaCC1LZPtcN4HT2 + oTTqODGSNzmBfIa1IiWRuSdNTP3suBE3hxxS2gozmLpMvDcx1kWajSAhxon7TkiJ53HENNA8lhgJnEkN + l00U8DilvD6V+SZUsc/XFJrQ32LH5hWVOHXLhDCAw5hQ7YiPC+dFjqQIjEZCbARiIkIQYQ+QzN+oiACe + XBi62mqxed0S3Hp4F04eP4ibDm7BxHAbvzwYnmY3GFROMFLou+uc4KF3gk3rDC+NMwJ0TFTiDz4vLSoS + AqU/umfKE1mgorAoOxgrc4NZAIKxuTwY26q5X+aFJYIMJ7licbYemyoDmFyCsSLfhqlELRYJ8VzojY3l + QdhcEYotlWHYURuN3fVx2F4TzSIXShLrg1VZVqzPtGBvkR/urA/Dg+0xuL8pCKfKLLirzJ37ATjeZseq + Iita2bmyDY4RwJnscNlM4NlRCuTFu6KMJLuGhLwum0FeaEBrkZlwR1uRBzpLbZhsY4Icz8Dq8SzMdsWT + /IRilN83UhuG/vIQdBX7oy3XhrZ8K7oZEP3VNvRRPA40GTHQysJPcjHSpcV4vwkL5lHgTftg8XwfLOV2 + 6bgXZnv4fLOGZEmFtRSr22rEXZPuuL3OgvuqzHiMCfw5koiXCzT4LQXoX9o98cGIL/6+IAh/W+iDD6bc + 8ZdBFf7S5YoPSH4+6XTD5x0qfM3vvNBnxOVBd1wbtuCyMIB5Duf4nMBZCq+vug34pEWN96pc8U6xE37H + gv0bCuTf57nhTySdfyKB+TO3H1AQfEzh+1mzEV92mXBh0gdYGQpsCMGlLUG4uCMA53b54sxuT3yz14pv + Dnvi3M3+uHA8mLDj0rEwXLuFOBKKq/sCcXGTDV/M6vDpsByfdyvwebMCn1LEv0sSIRnAuS64jwLmFuKm + bBmOk0zcXizDHSQWp1gA7m90wkNtTnh21A2vrrHhk9tTceXpGuAlYf72Am8NAm8PAL/rBt5sBX7VCLws + Rgfn4eK9afjq1ih8fsCOz/bY8emuMPxjqx0fbrDj3RUheGdRAF7ndfrloAE/7pbjlRE3/HGJOz5c74lP + t/vi6/3+uHxzCHA6FngsBXg6FXghDfhBJreZuPK9JJw9HYovbvHG3/cb8cFOPd7bocfbG5X49Ro5Xl/v + ht9u0+L3ewx47yYPfHrKC2ce8sOlx/1w7SkfXHnMAxceNOD8vVqcO23AhbvNOH/aA2fu8sBXJ93x9Wm2 + 7f2+uPC9YJz/YQwuvZmBK++XAF814Oq5OQP4zHcN4CvvZOO8MICfScZ7vB4/X2/FoyyUxxvYxrVOuKvH + jKdnQvHDRZF4bXUy3l6fiVeWxOGFiVDc0WrCLhL/zTVabKZgW0Msb/DAkhozllTosb7OHQf6AnDP0kQ8 + uSULT+/MxsOb4nDrjA9WN7hgnKS+J0GGXmKcIn4hheVq8WdNlzNuWiDDk3tVeO0eK959zhdf/ToY1963 + A58EA18G8jdx+zXxDdtbbL8kPuPzH7Ot/uzD32TGuR8Sz7jjrGi3B4i72VYnhGHrMIDPnjLg3H18/WFP + nHnSGxdfDsOV1+Jx7Xe8Zr/PxaXfZOPML9Lx+XPxeO9UIN7aa8LLy0kwZmT41VJnvL3ODe9uV+GTg3qc + ud2KK6d9cfGUFefvnDOAT9q+NYAv3RmIc8cC8bcdFry+woCnp0y4rUeP3ZIBTDHd5IYZipqFFEgL2dcX + VFGYN6qwoVOHXaMeeHR3Cn7/VCe+fHMW5/+wFFfeW4srf16Nr381ifee6sHPbq/H/VsKsXU8FcNVoagh + 4ayiEK3IC0VBbhgy82OQVBCP+EIxCjgVcQUpxP80fq/j/8kAvtHAJa4//5/vu/G9/w3/+XmB7xrAyUgp + SpobARyH7MLIbw3gtERvknMzArzc4G1RwmLWwGomEfPUwe5nRFSgEfFBFAbBauSGKFFEUtwQ6oSFJDb7 + mP/vag3G0/Ni8YOZaPxwfiC+P8+KF8cM+NmMGa+v8sRfdvri45v88cXdAbjwmDCAGWfCAP5hNK49m4Cv + HkrGRycz8c7RAvxieymeWJyP46NZ2NaThamqaHRk+qAqzoSsQIoQL2fEW+WI83BDhIYF3OSGmih/TJan + YklzJsYrwtGbSzGYa8bGUh/sL/HC4WIPHGOOPUUh9mCFCo/XueFZ1oTn2pTSVNAvd7nhtUEd3plnxLs8 + 54+WmvHXZRp8uFqJf+w04ItbvfAVz/2b70Xh7PeTcfmVPFx+owjXfl8BvCtM4GbgHy3Ap2249q8OXP26 + C1fO9eLKxT6iH1cvDQEX5wHn5gNfTOPaJ5O48sEYzr09jHdfqMcLNyXhlkVeWNmowAj7c38G+zNzc2+G + M7ozndCZxT7O5wdKXDFW6ZgSbFr8+dpgJPSYbdFjabsZK7qsWNlpkaZAX9Gmx8pWDVY0KbCCeWJtozM2 + trhgR7srDvRSbJLYHx7U4NCAHgcHPXBoyIsQd6/6YnOTFcsqedwqI+Y3eKKv2h1VwoQj6colcS6xO6GG + pLKL5G00XoOZRBWWp6ixgUJ+V6oChzIVrCsuuKPIBfczrz0q1l5utuDFVhu+32DBc9UGPMvr8DSF9TMV + vBZVCj7nhhd4XX5A/LiRaJDjZ6xbr3XrWG6M+O2YBb+d9sSbMza8Md8Xv5gNwqOT3tjP15c0urK/OqGj + 2gmN1RT6PFZLvQndddY5A9jrvxjAGnRTuLfy+5sogOoLnNFUSIFUJP4QVqCDIr+nUimty9Vfo0FfjRJD + NW4YYR2d1ybMXRPENM9TrPESunSY1y6MYA2fN0CsATzVacB4qx4jdVoMVuvIXzRozlagMtEFhWzHfIqR + okg3VMRoUZdgQn2SGXWJJsIgoSaB5DNWg5IIJfJC5ZIBnO5DsupNQW51Q5K7AglGClWDHNE6ChxyRbH+ + r1j3VyDGQ/MdAzg+QM9+rEUyRVharBG5FMt5aVYUZPmgODcA+eLu11Qr8kjUs5ONyOI5ZCToSY75mTgN + EikahIkrpjaKjlYgKkoYIXMGcPKcASymgeVnpGmhk4wUPvxeCg4xIjgxTsvHej5PIUFBExPJc6Ygjg53 + 4r4zuTSJOcl5UqIrUlPk0kjg7CwKtGyx/U8DWIX8HJL0XMdIYLGfnSGX1gTO5XsL88TavzrUVZrRwFra + 2uiBng5f9HX5o6/bj/BGT7sVnS0mvqYldGhqEOsEk6vWatDWakV7mx8aG71QUmJAFuM/Nc0VYp3NdPLZ + TGG85LAdKSySeJ7xPN8YCpTYJOYmirl4ipi4FDdEkYdHUMyFR1F4UtzEJ6sIjTTtc3yKSnpOTPscyngQ + BrCdQkgYwNKd65FqhEdqECFBhXDGgdhGsS2j2e7RbNcYcZc8r01MrBKR/Fw0xVRCPEUcv0fcBZuRJtrL + MaI6J1MuGcClcwZwWZlOMoHLS3WoIMpKlCgplksGcEUZRWW5HPXkrnVVFKbkMe31LuhvV2GC+WJ20g8L + xm0Y7dVjsEuFQfLiUW7FlNAT5L6T/R6Y7LNhotsLQ40W9IoZewo16GS79VL4Dud5YqrUjkV1iZiujEdX + bhCKotmeYUI8OiMmlGIuWi1NP1WS4olqYQCn+aElI4i5MAyDBeEYKY3CRFUUZuqjsLAlEgvbwjHbHo4l + PdFY0huLBV2RmO6MxFQH39cZjXFiiHqjrzEYXbUB6KoJYg4IYZ4Qj4PQVh2Alkq//2oAd0gGsGME8LcQ + RnCdMIX90VTnj+oKbxTli5sbDEhlbUyMdkOKuGmCgjoqyJUQd01rEBmkRLi/EmF+hK8Sdl832H2UCPUW + M25ouK+R9gOtKviaXGHVyWBWEm6OaZ8t3LcKcN+LmjHA5IIQD4XDAPZwIZwQZpYhxMB4Mrogkrki1leH + 5GD2x1ATUu1GCn32wVD2xVAt0iLYz6NMyEuwoDDZhqJ0GwoybMjP8EFpXiAqSuyoKYtAeVEocjO8kRCn + R2S4iEEtY1BMs+dYwzeafV6YwOJPODEVdDzzWQTfE2yX32AAi9EbSoQQgdSJAUTw3POR4WrEinXH7Vpp + 6uqScOZBnld7PPVeigXzmJcmmZcmmX8WxiixMkGDDWkmrEs3YQW3i9PdMcV9YQB3JLE/U+/WJmlQnqRC + YZIaOQkqab0n6Q5wiv4U9j2B9BsMYAlzBnBGqpl5TUxNrWOeU0trxYk/CsPCFYiJ4XVl3hPrnycwP8bH + qtguzMk8fhr7dVaaBrlpWmRzP5fnkCfWycs2ozLXHXVFXpIJXJNnRWWWGUUpGhSIPxySFShmf62gVm6g + Tm4q80BzuQcaKzzQUGFFfaUXGqq8UX991HmphblPN2cAy79jANfWBLIWMi4rqZ35+a4yA/rKtBgt12G2 + 2oxV1BWb663YWW/BrgYzdtUbsKNOhd0NChxoIzfoJC9o12JPs5rvUWFTrZLgtlGPLeQamzs8sLbVHcuY + N2fJR6ZYL4cFd8l08Jdh6sp5rP/zyzVYxHq/iPVvSZUWSyt0WEudvYk8YHuzDVsbPR0GMPfXtnpjGfen + qvQYKlOirdAFbaUKdFeopdHA/RUGwkQY0VdpglhfXNwM3kcdP1htwVC9DUOs9yMN3hissqK/zJ3HccdY + tRVTTZ7MDzbMb3HHODmTmNmjrcgZrUVy1npxI5iZecED/U0ekgHc02IhWDOaPTDQbMUwMdHsjcUdgVg/ + FInNozHYNBqJrWNR2DYejd3zE3BoSRpuWpGFY+vycHxTgYRbNuXips1ZOLwxHQc3JGPv2njsXhuHnWti + sXPd3MhgYssaHnN1ODausmPTmggiDJvXRmDLukjJKN62IUra37wuQnp+09owCRvXhH4Xq0KwdlkwVswG + YOGEuEHHiE5qoroSJ8aeM8pzXFBKblaaxTw/ZwBXspZeN4BbWTvFepV9+QrMK1djtlYnGf0r67XUolps + bdBhD2vmoTYLDre5SwbkHl7/7awVu6oVOEo9e6zLEyfJJe+bDsfdM1E4OhKIjWzHqQI5+ucMYGHCtKQ6 + o5PfOZirxWSROxaX2bC81IZlBe7S4IUl2XosZq2YYZ0Vo3mF6dspPpPiLJnBgxmKb6eAnp9J3pUhzFwl + Joh5rHmSAcy+JD47mqnCSDr5dZoCo4SYAnoea/RUhhZTWVrMZOkxP13zHQN4eZ4OK/K1WMW6taZQizUF + aqzKccOSTGcsJD9fkOaE2XQXyciZzXTBIrbpUvK75XnkwwIFSsfo3iKVNO35EuqPhdwuKOH3FPGcC/g4 + V4HZXFcsynbid8qwuVSJYz0+uG9eJO4ei8SJQTvuHAjDLR0B2N/ggb11RuytNWJfjR77uX+gzoCDdeyr + tVocriOfr1MSar6mxX72pb3t5POtvtTBXhivsqC5QIuqPOYm8vSkaMcf4RF2co9Q1gvmtuBQsaauwwAO + Zn0QEAZwYKBYn1EYwFrpj/rwcOa+WHfmSnfkkEMWkztWZTLvZDBfCQM404C2dANaiEbm5lrWhMJoAzIj + yAuj9EgRI4eTPZCZZiNP8San8kZWli+ys/2QTS6aw7qTlR+MND5OZB2KTbGSJ5kl41esAywQFqmTzF+H + Aawj/+F+uBYhwsQOlEvrCocEEqy9wYHkWKy/kgEcfN0AdpH+KHYYwHryAA+MsJ8vaLNiVbsHtlBXiSmd + 95PzH2K+OFLpgiNiyt8KtjH1y54yObaVCAPYFTuoFQ41m3BLlxfuGPDFnUM+OE5NdfOgJw4P27B3zBtb + h73nDGCxdMb/YgBTMwkDeLRe7TCAG6ixyE0Xse8tI1Yzf63m45XkrSu5Xd6oZh5W87HGAZ7vam5XCKOY + 2mohz29BAeNLmL/M0xvYXzfze3YwLxxs0+DYoAl3T3niYWrQRxZZJDw8a8Hd1MPH+vg760VcyrCtUoZ9 + jU64ud0NJ/qNjqmgJyw4PWzA6SEjY9YDD0/b8BB12gPzPXH3fCtu5+t7uvVYwdzQl059FuuEKnLh4ihn + ZM8ZiWI0ViprYIqYDYec2R4vkwzg8ERqfXLpDPbNvByxrIK4iYr6KP8/DWAjBit57aj3Rolh1rWBOnJO + yQDWoGnOAG7g97ew37Yz/3Smsk6lO2MsR46pQvZFagXRH2fYL2fZXxeXqLG0mH34WwNYjnXERu5LI4EZ + A1sqVdhKfbidfW8nr8lu1ot9jJ09bZ7Y3emNbR0+zJtmTLPf97MetiXzu4k+1scR5sEFGS5YnccYKlZi + P493K49zB6/37aWuuIM8/DR16IOse3eVqXBzjhOOFMhwtESGg2VO2C1GILPerspiLqLmEfmuj3munv06 + m/06gX06OlCGKOK6ARwdoSBPIb+hxkxPMSNFaDVynKREMeUzdRx1icMAJocThnAiudh3DGBnpPDapQlQ + q2VEuUrIpubIoR4Uo4EFbjSAkyOckBThjASh7+YMYGnK+RsN4EAn+AXI4EsEBDshKIx9lxwrNIp6R9xA + nGRCUoYVqVlejA932MnF/JmvfPmbgsLJK/nd0fwNCcliFhqzxEPDqJOCqCHE8QJDHDfuiangw6ijr5vA + 4oa+oCAx9bPDBL7RAI6aM4CT5gzgTJ5zSaQMTWnsn+XMEeT/82usmE99OVEq4kclTf28vycEJ8fj8fDC + DDwwnYE7BuOxvtoLg+RnNxrA9QlytCay9qVrsTDfjI3kdlvJWbZQk63Pd8Ya8qiVjNNN3B4sVOEYX7uF + emRbmRWzBWYM5VGzUtM1sgY2p8vRnuHGOqrHvEIz64snlpT7YHGFDzWWJ4ZK3NHBftKao0IH630fdfI8 + xs2yfLmUu24hx7qXsf29Slc8W+OMF5vkeKlDiV8MaPDaoBZv9mnw5oAavx5S4+dDSjw75IwHBhmTPR5Y + Td7UJm6otP7fDeDwUOpZIsJOPUtEhlFH2IURLPSEY2aJoCDVtwaw2BcmsJ+vQhoRLMxffz9Xyfz14nHF + 9NK+c2v0ChM4QBjBYsvnBIJ8eH39qIECnBHGGItkzETbnRAXJkM8614Sr0c6OXtesg7FrFuljK8SoXuS + LdSezEXUbdGsJWJt4RDWEmHyit8h/ZZgJWKEmf0/DGCx1ADjK1ToGWECiz7H/kM9mE4Nks08l09dIG5k + qSK/kQzgbC11Lfsuc6MYJd7IGGni+TUwP9axf1UzR5ZHU7tHOiGdMZ/sz/7tI0Oarww5kgHsghr2kxZq + pMYkD2kZMbG0WCHjOpe/O4d9LIufSw9l/2VMp4S5IjmSOoW5IIOfE6N/M6jTxDJA1w3gJDEaeG4r1vIV + M8KlEolhasSFUP+wnv6vBnCowwBOpU7KFbN4Md+UkQOUJJtRGG9AXjSfj2TbSwYw8wZ/a3G8G8qTxfq/ + atTlCQPY8zsGcIYweJnbHFNAOwzgdMZeFj8jRvJKI3oT5dRe1Hri5ttM/b8NYG4zUvjb+J74aNZ+tm8s + 2zqeMZDIXJXMGpTO3JXJeMigXsxKdEMO319IflCWa0B5voG1hxyhIRjrl5ThxJGxGw3gCCQnRlM0xkom + cByfE1NBizWBo8L9+JhirKYAyxePYt+O1bjtyA7cfHAzFs/vQ2l+EmLsXvD31MBdCH2tTLrj26pmR1I7 + IUDHwDOxQW0qlMZ4oScvApPFMZjKCcHSPJL9QgqGUjGaNwx7GyOwrSYAK/OMmKGQXMKiKQzgjeUBmEmh + AGQAjDCQFqQasTTXE6uK/FnUQrCpKhLb6+L53iisLuZx2REW8WItYaHYkm3DLdV23NMajbvqAnF7sQfu + KDLhZLU3Cac/FrGRa7yckKyUIdPTCdnBcl5YJfIZ9MVswGoSc6lY5+vRUWpGF5Nnd4UNXURPpTcm2yOw + fCQVy4ZTMNMRheHaIAzXBGOoOoiCNQAdRT5opWhuyTOhk5/vq/JAH4mv+BN3qE1MP0eC30sBQQKyeJoC + cgHJ7kJ/rFzgjxWTfljcb6Hw02K2XomVJFhbKGj21bvjeIMV91A8PlJqwHNFOvyEBOC3jRb8pccbH8wL + wN+X2PG3pQH460JPvDuuw5/7FHi3wxUftcvxz1YFvmhT4mynFheFCTzgjksDZpzvNeBstw5niK+Jz9tV + +KjWBb8vluGNHBneJAn4DYn+70n6/0zR8wd2+j9SfL1HAvphqQ7/IJH/tN2Ab0a9cHFJEC6uCcKZDf44 + u4XY7oszOzzxzQ4Lvt5rxdlDPjh/NAAXbgrGpaMhuHKE2B+EKzv9cGG9BV/MaPHpoBv+1anE540K/JNk + 0GEAq/FDCsH7SULE6N9bi2S4o8IJJ6uccaLaGadqnXBvkzMebHfGM+NM+hv98dldObj2YiPwUzHytw94 + ewj40yDwhx7gN2249modrv20DJeeysb5+xLx1W2R+PJoOL48FI4vDkTg093h+HhLGN5dFYzfzfrilVF3 + /LhHjRfbXPBSrxyvTxvwxxVWfLzZD1/sCcA5/hbcFQc8ngo8kw78IAN4KRv4Ec/jmVRcuD8MX93ui8+O + WvC3/SZ8sMeId7ao8OpaOV5Z64bXtrBo7eIx+frHJ7zxxf0+OPewDy4/ZsPFB91x7m5h/mpw/jSv3T1W + XLzPi+ftha/vteHrB/jeR/1x4Vk7LvwsEZffzsGVj8uBM024drFNMoAvf90AfFkLfFaOa38txNV3snHx + l+n44vF4/PlIEH620h0P97vgdhLn29n29w9Y8cKiCPx4cRReW5WEN1cl4wfzQvFInzduprDeXuGGjVUa + bKRgW9NkxQrG5zKS1+WVBmzi/tFBfzy0Igk/2JWPHx0owLO70nB6eTAJphKLipwwSjIrMEnxuYhEZHWt + Els7nXDbImc8f0CPt+71wV+f88cXv/DHlT8GAR8FAJ/6A/8Spi/b+iv7HMKAz0OBfwTh2nuMrV974sJP + rLjwgg1nn7Di3EMWnLvHA1+dMOHL4zp8dVyDsyf1OH8vY/9Bvv64Fy58PwhXfx6Da6/z2r2VjSu/zsa5 + n6TjX88k4t0TwXh9uxEvzDjj6WEZfjQpw6tLnPG7tc54d4cr/nWzERdP2XDptBXnT7rj8ikPXLnLYQBf + uIPxftwP39zkg4+2mvHrJVo8Q4FyRw9FmjCAu0nc2dbT9W6YobiZT+EzSdEyW+2CNW1qyQB++lA2Pnxp + BJffXYtrH28APtkC/G0TLr29GP/80QjeuLsVj+0sxZ7pdMyrDaHA8GQh8kNVbjCKmG8zcyOQkh+L+IIE + xBUkz+G/m78C/782gK+P7L3R+P0/fV5AmL+JhXxclIxkAZ53amEcUvNjKK4jKbRDkJXuT4LvRSJjgq9V + AatZAZNBBXfC26JBiI8BEf4U+wFakgglSljo61hD+uJcsS7HhGMNQXioPwbPTCXh8ZEIPNTri3tb3XFP + iwZPDZvwk8U2/G6rPz44GozP7w7F2ccZby8yzl6OYn9OwNXn0/HV4zn4233F+MPtNfjF3lo8tqwEh/oz + KWQTMcga15BoQWmYBukkfskWEjeLM5LMJOisj+k835ZoP2lWjKX1qRgtDERnmg6jaRpsKbLhUIkVNxWb + cVuJHidJ1O+naHuM8fF0kzCAVXixU42fsH68PmLAHybNkgH88RJhAqvx1xVy/H2zBp8fdMeXtzE/3B+C + s0/F4dKPM3DxF8wLrxcxFwoTmLngQ+aEvzczplpw7V+tuPplOy5/04ErZ7pw7Txz5vlh4Nwk+xjx2QSu + fjSGC38cxscvN+PlO9NxYpU/1rNejFHU9VEc9rA/d1OwdjFPd1AEdLN+DBS7YnzOAJ6gWJxqMGCGEFNB + S+sBt1uwrMOC5e1mLG+l6OY1WM4+sbyefaDBCRubXbCj1Rn7uuU4JExgMRV0nzCCTYSFecabz/tiT4c3 + NrI+rmmyYVmrH2uyFTXCYCNZyiF5LiGRriV6opWYSNBIo39XpaqwheJ9f7obbs52w535briPovZRnt8T + jSY822zBC6yvL9aa8VyFBs+WuuFpCo9nJQPYTTKAX6xX4UdNavyU9fpnrWr8qkOD37Cu/m7EA29PeOJ3 + 873w1owX3pzxwy9ng/H4tB8Os/6uaHGj+HdFW7VMMqtqKhVoqjWii+ctDODBBh/CE4NN7t8awGL0b0e1 + Ek0UPrUF/EwuyTfrYmO+i7QeYPu3BrBGMoDFKGCxPte8Zp00sles7zvT6475PSYJwvSd6tJLEOavwCT5 + wWirBkN1buivUqGrRIn6DCeUxArzlyAJLWJfqojTfmv6OqCTUJOgRWWsCsUU7nkUr9IIYIqjdB8Sc6sS + 8UZXxJAfRuspWLXOBEm5MIA9KF6IGAvFs1WHeF8DEgMojgPYj0PEH3BGZCdZUJLtgzLmt4qiYFSVhJCL + +qEo2zENUkGGO3LTTJIRLKZFFcaI+DMggecTF+smCZuoSLlkAIupocWfChkU52IK6JQEYfAaJFNYPE6g + II8n4RemcHK8GEmsJvmmmKKoFmsDizWCIynMooQRHCWme6NISRLTLYupnikUchxrAgvTN5tbsZ9H/lRU + qENJAcUbxa1YD1iMCBYoyHWs61ZRwnasMpN7u6OVsdffHYChXnLLPqI/gI990dNmQXuzMIGNaGas1tew + 3VmLG+vNqGfsVFVZpHWI0yiyk5JdkEQhn5KuRBp5rfhjKpXCIp5xH5PoivAYisw4F8QkUwilUDzyN0SK + 5yk4wogYiorYRJUEMe1zTKISUfEUi9EUmIwFyQCOpFiOdCUoMim8IiigosWfIEQ0203AYfpqESfMJ16b + BMZKHK+P45pQ4AgjKkkptV9Wumg3YQArkJ3p+m8DWJi+5XqUlol9NcpL1NLo3+IiF5QVu6CizBl1lXI0 + 1LiisdZVMoBb2L86xc0W3YxxaaYdK8b7DRjpYYx3M3exBk/2GTCv34h5fSY+NmG0Q/Q5E3m7Ed3MwcIA + 7kjXoSfNAwPZ/hgrjsJAXjjqk7yQFapCfJArIoOcEBHkjOQozbcGcFWqD+pSfNCU5o+u7FD05YRhoCgS + o+XhGK8Jw0RDKCaaQzDVEooFXRFY2BMjTfs82RmFiY5ojBPDbRHob7aju466QkzxXOmPjqpAdFFrdFYH + zo3+9XNM/1zrh44Gf3Q28TUxApg5pKXem+0gtg4DWBjCbXxPR7NYJzgITfX+qCq3oSjfjOxUiuZYOVLZ + VxLD2S8pwmP428TIe7G+dkKommKagtou7qgmQjUU1jrEBuslxARpEemrRqinAgHuTvDRO8Gb8NM5wZc6 + 0Zs60Zsa0YfbQJMTQtydEebhAjvfK9boDzHIECDMYb4eanZGtBdzRpABqXb2zzCHAZwcSsEvYBd3f7MP + JVtRkuFDse2Fokwv5KUzF2T5oTA3QEIOH4sRWxFhCgQHuSBSuhlBrLH2b0TFsq+zz4v1gGPijdLaa8F2 + VwSFuiI0TClBGL7BPEZAuAL+Yhsml6YeFX+aRDMGEkM0SAvRojBMj+ooE5ri3NGVyDhKMGKA8d8X7oxh + atnpCBcsps5cFK/EwiSNpGsn0pnfU/XoStaimWhI0aMyRcMY0iKPjzMTlJIBnPgfBrD4c0aa/lnkuiRx + k4qY1cAk5S+HAaxCcIjDABaj8aP5W+Ni2O/EzS3iRoxoN24VzF0KpCYrpamgc8Qo/GQ1c60aufz+kkwj + yrNMqCnwRG2huLnQHWUZRrY7c1cCc1eSHMVpSlRStzeVWtBSYZXWn6ovt6CuzAM1ZVbUUTfXVHijltq5 + gtymMNfAfs38xByUSlw3gKsYx9XlXqgucUd9sQHNRRp0UhsMlmkwQ22xos4dGxtt2E7spObYXm/EBvb3 + TeTLu5pV0vqV+zsM2EUOsY11eWONm2QCb20yYkenBTu7vbCt24aN3F/dYsIS5k0xe8kQ+cpAmkzajvPx + dIkbuRm5eSW5SK0BK2uMWN9gwZYmT2xv9pJw3QDe1OmPVW1e5O8mDJWJqTvFTVku6ChzQ3e5Bj3lYh19 + E3rKDHxsQFeFiWBslLPWlxqlpaG6yt3RW+WJ7lJ39PC397MdhyutmFfvCbFu8AQ5wBg5gFjjv425Tkz/ + 3FmuQ3c1P8fz6m3g8RrM6GslX+jwwggxr8MHUx2+WNwdjI0jMTiwIAOHZ7Owl5x3z0Q8dk/G49DCNNy5 + rgint5Tj/p3VuH93Le7dWYW7tpfizu1FOL4lDzdtysDBdSnYtzoRe1YlYM/qOOxeFSth+8pobFsRgc0r + wrB1VSS2ronCtrXR2C5GDG+Mx84NsdjBfQHH85EStq0Ll7B9/dz+2jBsWB6K1YsCsXDME6PM1Z3kHw0l + TtQxzqjMZn4XEAZwjorxyHi7wQBuoYbsyJGjO0+OUdaF6WodZusMWFanw5paHTaQd26tN2BPswcOtnhg + P+NmN5/fXq7ETnKcQy3uuLXLCyeHAnD3RCjumo7A0eEAbOZ7ZwoUGCCnFQZMc7IMLWku6MoSf1yTyxa7 + YwnjdUWZF1YWW7Esj3w2h7w214gF4o9tcoDuFGe0JzmhLdFJmgJ6mOc8SX4wna391gCeZP8RJrBkBGeR + J/P1eaw5wggWo4KvjwyeZD+ZztJhJlsYzA7MZy2X1gDmsRaxTy3N1fA8GLfkFysLNVjNurkiTyWZvfMZ + 49PkcvPTXTDDujrN56YzuJ/tikV5zEliZG+xWjJ+l5ZqsLhMjH5XYYb9YaZYielCFabzlfxeBRbmuGJh + lhOPK8NGcsRbu3xwr2QAR7Edw3FqKAK394bgQOOcAVyjx75qPQ5y/3AduTuvz2H2v0NVahwk9z1A3rqH + OmEvOcy+Nl9sb/PH2hY/TNYwn5DLVJI/FaQx9wmjiLwjyk4ORj4vTYcaJqZX1iAwXM+8bWS+0yMoSI/A + AB2CArUIJm40gIWJm5/uyZrxXQO4mTW+lWjJ0KMu1YDKRCMy7cxRzPHCAE5PMLOe2JCX44ecXH9qUX9u + WWOk/QDk5gcht8iOnIIQpOcEIDHdG9HxFoSE6xwGcLAbwoThe4MJLMzfMJ67GOErDOAwbsND+T5+p12M + +g1iDg9wY+1SIDTYGXHRrtKooOI8cr4SI3qZI+a1eGFxpxfWMoa3t7tjX6sR+xs1OFSjwkExyr1Ehr3U + C7uIbQVO2FrojC3UZcIAPkzde7zHBycH/XBy2A93DPvi1mFv3DTqjf3jPtg24ovVwz5Y1O+Deb02DFCn + /dsAVkgG8GCNEiPXDWDqDWEATwkDmOewpFGHFY16rGsySFjLz66VRuizbxJrm/4NMWJ/HV9bU6/BSmre + ZSVyrCx3w4YqMduckflej13UwAdatbiZnO2EGL27wIaHZj3x6GIvwpf914Jbe3XYUe2M1XkyrCmQYUuF + DPvqxEhgDe6b8Mb9U964Z9Qdp4fMjFkPPDRlw4NTVtw/bcE98z1wasoTRwbdsbVNh4Vl/H3MO63k0VXx + 5KIxcskATowR03e6IYF1OIb1WDKAiehUBVJYC3MLzCguNKOswIQqoi7fiEbmjJY8LdqoAXpKTehn3h+s + 9pBmhxgg3+8jhAEscnuzWAM4lxw2ywXtmdTUzEG96c4YyZRjkn11YZGYjt2AhQUazLKfLylhvy/RYhnz + 3wr21+sjgNdSK26gbt3I37GR/WtztVYauLFFoFbPWuqO7cxzW1ss/L02bGn1wqpadyxg3x/JdZHWXe0h + RngOk1nipg851hUpsYPfc4DHO9nqgdO8ricqFLijxAUnycNPU4ceZ4ztz3DG4SJnHGEMHqqSY0+5AquZ + M2ZSnDDMtupOcEZzEvN6rDPSw2WIp6aSzF9/9u0A6izui2VJkhL01Gke1AUW6gMLklOMbHvqunjyQ3Io + sXyMMICTyZX+pwEs1gB2QqpAFL8n0oEs6hXJBBbTQpPzSgYwda0YKZxMjvatAUyIm35FrpFmHJgzgMX0 + z348Tx/CN8AJ/uR2gWJ0LnWvnfwyMs6AWOaZJOaZmESztHyIXwg5MT/nz20w+aM0WpjvExCzyYiZZsRN + h8JY9gt0kkzmYOoKMT2vmP5ZMoCpMYIJx3MuzH+OaaD/mwGcRX1aHu2Mtkw9xiu8sLDeD7O1Xpitcsd8 + 5vcFjLE11cy37f64aywWj89m4vFFOTg9lozNdb4YSpWjPkqGUur+cm5rqRMbiB5qxals9mHyvE1VVmyu + YN8tdMXqbBmWMVbWs87sZ504Rh16a50f84wX45OchrpXGMD1GXLmW7k0GnggR4eJAncsJP9bWuaDJRW+ + mGE9HSdv7C0iP2I9685mfmH+X8i438jv2sfYvaNagwdZu5+pU+EHjUr8uEONn7HfvzJswKvEG/1avDGg + w6+HdPjZsAbPjrjhgWEdjnR7YAX1dTM5b5KF15Kaw9f0HwawpxiVK6ZG5rUMcuRge7BaQji1Rzi1T6Rd + L9UTe6gOwXze318JX18Fr5lK2vf2doHNU4z4dYWPjzNsNh7bKoMX4c19b36H+B6xTq8wnIUJLPb9vZwk + I9juR23EOIhgzEUx9uJE/2DdE/Uvk/q7IEWHUtatctawsgxPFLJ/iOWvEqlvYhlH0hTPgQ4D2B7I30EI + E1gygHn+YeKGImEA+woDmPkrWIUIO+M23A3R1PHxMUrWSiW1hQpZ1AN51IZFrDvlGRrUZlKnkL+0krs0 + xgvDV4YGnl8946SWdblSxJ0YKEBk83Eqf0eCL8/fh/vCAObjwmByO+oRYQA3J1MrxBlRxvMuoN4Ur2cS + YsroZPa1ePaDOG7jGOtp0Q4DOEsygVmTI+emgY7g+dqvgzmDei2JvEBM/ZxAfSZG/143gGNCHCbwjfiO + AczzyhbTTicLHe/+rQGcG0N9FKWUDGDHNNCufJ6cVEzxT+5VS87XRH1TV+QwgMvYR64bwGlxThKEAZyR + pKDOUiGTW2H+pnH7rQGcxdqRqZNqvHhOvJ4Ux7rPNhYzn0hTgUeyPdmvk2JdkMq8JUzgjESlhGzWojx+ + rpTcsCxPj1Jep466AKxdVIw7Dg0LAzgcsdFhiI+LpJCMpWCM45fE8ILbJfM3logO96PgDEVTXT6WLuzD + oV2rcN+dB/HAqcPYv2MFpoZbUFuWhrR4P2k6MJvRyXG3t0IGixsDWsUg1jJpGl2RRzLWkRFIoRWK8XQ/ + LM0PwfricGwuC8eu2kgcbovB7nphCntgSZYWy/NNTCqBWFPqh3nxFFBMbr0MpKFIOYaZMCd5URZle2Nd + eTi21iVgfWU0lhUGYz4DaTxWj8lIkge+Z2+xP47V2nFbVQCOFXngZhbgw4UmbC9yx3SCCtXsiOlaBqOX + C3IZEPm8oMUM9go2foMYyp0vRv4aKNDMJDle6K/xkba9Vd6YaAvD0qFELB6Ix3S7HUM1vhis8scABWxv + mS/aCz3RzGM0kcS3FmvRXaFHDwVHPwnRYIsKQ+1KjPVoMDlkwJJpbyyd8cXyBf5YudAfy6f8sGhQ3NFH + gVGrwOIKFlyS5F0kzTfXu+MuEoSHy4x4jsX/pxSRb7fa8N6QPz5aGIZPVkfj0/Vh+PuqAHw4a8UH43q8 + 2yXHB63O+HuzCz5vUeCbNhUuUGBd6jM5Rv9y/wyJ0TfE110afN6mxEd1LninUIZfUxALvJUlw9ss/H/I + VuP3DNw/pKvwF/629yguPqLY+qhFj08GPfEZidU/FxMrvPDFBj98s8UXZ7ba8M1WK77eacWZvTacO+CH + CwcDcfFAEC4L7PLH5S0+OL/Ggq9m9Ph8UIN/darxLyb1T0gm3yep/B0T/cskEo+TvJ4uleFUrTMe4Hk+ + 2qXFw0z897cqCFc80O6MZyc0eHNLEP55VzYuPlMD/KQT+FUP8LtB4I8DwO+7cfWtFlz6eQUu/rAAF5/M + xNd3sd1uCsHnh0Px5eFw/OsA23BPGD7casefVgXirYXe+MmwEc93uOGpZmc81+7Kxxq8PuOOP6204cNN + 3vhiXzCunowDHksDns0EXsoBfp4P/KxAGgl86ZEonL0rEF8d88Inhzzw/h4T3tqkxE+Wu+CFxa54YYUb + Xtqgxuv7eMxbPPHxCbbnXVZ8dcqMr07wGt2hwdk7Nbh4lxlX7/XClQd9cfFhtu/DfjjzeADOPROCCz+K + xsVX03DlL0W48s9q4HwLrl5qx2UxCvjLOuBfbI9/lgPvF+Da21lsgzR8/mAM/rjfHz9dyrjqdcadDTKc + aFHiwQErnpsJxUsLw/GzRVH4+WwUnhsNxOkOD2kaoe0k6MIA3tDgjjUNHhJpXFFlwirG+laKuGMU0E+u + TsbLewvwytFi/PRwHp7aGodjE57YXK/EbJ4QoRSjOS5YXERiWO2K7R0y3LVUjpcOu+Pt+/zxt+cD8cVP + fXDxNz649mdv4K8+wN+D+BtCgE/t/D3hwJeRwOfc/iMU+CAYl37ji0uv8DM/8mGb2HDmEcbeve748oQR + nx/X4cvjjHW25/m7TbhwvwXnH7XhwtN+uPYjHuOXycCrmbj2i2xceCkDXz6VgvfuCMWrW4x4atwJD3fL + 8MyQDD+ZkeHNlTL8aasTPj2sxfkTFly628pr44Grp8WIYE9cmjOAz97ija8O2/DXzQa8NqthGxpxgn1u + vzCAidlmBcWSG6brKa6ruSVZFmvhrGnX4OZFwfjZqSp8+so08OFG/u4t/M1biS249v4KfPOrafzhkS48 + ubsU+6ZSsLDRjj7mzdZCf1Tn+KM4KwBZOaFIzY1GQn4s4vIT5wzglP9q/gr8bwawZNLeYOZK++I56TW+ + R4DHTyDE4xshpnP+T0jmsPjMDe9LKHIcI6lwDvnxkoGdkheNzLxIZLOOZKQHUBTYSFiMsFlcYTa4QKtx + hdpNDqNGDm+zEiE2FeL8FMhlwa8hoelP0WAxC+JBEtsHh+LwxEQKHh2JZ6wH4UiFBfsKeE1IiG9njn58 + xAO/WBuEPx0Mwz9PR+Cbx8Jx9QXG2cvs3z/OwJUfFOLrZ8vxyeP1+P3JFvx4byPumS3DtvYUktdIDGQH + oznBgrIQFbJJ8jJJKtNMJAB6ig+NDEU8564YT8wURGCa9bAz3ohmipExFu/trINHit1xa7EJdzLPny7X + 4wGKtsdqtXiC5/ZMmxovdmvx0wGS3DEz/jjlgfdmzPjbEgENPl4uxz/WK/HZTj2+OCJmCBA5IhwXn09k + n0jFZcb2tV8zJ73NPPDnKvaZWuCjesZWA6592oArnzfg6hctwFfMm9/0EsPcH2XMjePaP8Zw/k+D+OQX + rXj1vhzcvzkEW3s1mGCt+LcBLKaLchjAXbkyDJa4YpxkfbxGjXnMG5P1OsxvMGBBkxgFbMISCsil3xrA + BqxoEXeHu2FFg9wxArjJhQLVCXs7nHGg0wWHelxxqFuBw/zewz0GHO31wNEeGw52eWN3uw+2dfphdXsA + xmo9UZcliBrJphAwJNH1RG+0AtOs80uTlVib6oYdFOxHMpW4g0L6Aeaux+sMeKrJiGebTHi+2YLvM7d9 + v8aA58tVeLZEgWckA1iJZ6uUeK5agRdZo17iOf+y20zR4YHfDlnwzqgFvx/3xDtTNvxu2gtvzffGGzN+ + 0gjgJ6YDcFOfO1a1KjHK39hSSdJcQTJMAV1fTa5UY0FfvRcGm8gpmrwwxHMYaHTcPNZbTz5RRQFV5IKq + XH6GdbmWqOd+c5GrtCZwD0V5H+OlnyJpgO090qDFRKteMn8X9FqxsE9szRKum8AO6AkxIpjCv4XCrM4V + fVUKdPH31vKaFpHEFpB8FsbIUELBXJWgQV2SDrVJYsSaY9SaQBW5VXmMGwrDXcj9XJBF0p3pr0KaD8m4 + lUScnDBK54IoYQDrBOSIElNBe2gRK2DRI9YmRv+akBhoQnKICSmRJhJpC0WIDeV5/qgqCkJNqV1CZVEg + SvN9UZLrjeJcMTLYA3npYoo/HdJ5XmLK5qR4JeLFuktRCoobV/JfPiaXTI7Xkeca58xfI8WOGRnkkWlJ + ZiTG6REfrZUM4ERhXka5SWsCh1LAC9gpSCQjmDElRgTHi3U6ScAz03XIydZJZm8uOVIOOZMwgwvydSgq + pMgpNaG8hMKiUI/CfGECqyUUFqgc69wWa1BTaUJ9jRktjVb09wRiuD9UwlB/EPq7/dHd5on2Znc01RvR + yHitqdShokxDaFFSLI6rc5i/Sa5ISBLT0XGfsZ5CYZCSIaZx1iCOoiU6wRXhsU6IoJCIShB3pLshioik + SInkc+L5mAS+L15FKLmvRHQcX4+RIyyK4jJCmL8UqhHk+lE8Fjl6OHl0pDDLxXpdiWJ0JduOiKOgik/U + IzHJgGSK1+QUPc+N15tCM4bHSuD3JLNPSuvgUFg6DGA5sjNdkJ8jR0kR26ZUi8oKA8rLhQGsQlmJG0qL + xWvOqCh1QSVrZx15RIMwf+vlEAZwE/tXK7e97G8TA+6YYm6fN2iSbr6cGjVjZsRdwiSfEwbwaJcBw+1G + DDSzz9WR+5ca0cHr2cLYbmV8dKX6oifLjqZkf8a4SVpfPpwCP8zfCWGBFGXUH1nxJhQnW1GR4oWaJC80 + pPigjRqoJ8eO/qIIDFG7DFfzmtYGsX9SGzUFYrLNjsmOCEy0R2Aet+NtkeyHkegTUz3XB6Oj2h9tlb5o + LfdFW4WfZP521gRK6/+21wSgozYAnfVB6G5yQDKA68VoXy801Xhx6y2hrdFPMn972kMw0BWG3s4wxlIQ + c48XKqiP8hkbOUkqpIs/OKm7ksLYfyl8CyiCS9M9UZHljbJMb5RzW5rhjZI09rtUB4pSvJEbb0VGpBnJ + dh0SgnjdiXh/DWJ8VYj0UiDCU4FwT8aJpwvCrIwfdxmCTTIE6mXwZW30VcngT10WwudjfJRICTUgPcKE + tEj2z0gDUsPFHd9aJFHop0SokC+m6MrxIXgO1IUFWV7I53nlEOmpVsn8jWE/DgtTIJQiPzJSKY1Gj4xW + IYKxKtb6jYgWMWqQTGCxrq/DAHYYvCFhKgnBRBA/LxnAfM3f7orAEFfYqR0jg90QH0yxHqxBnl2Pcp5v + bYw7mmNMaIvWoT1cjvYQ1kbmjEFu57HfTES7YIL9aYr9YDxdj8FUHbrZL1qIxlQ9qvm4jCjk45wkHluM + WCBuNIAzksU6XXrJBE5hX0sWsxgwpyWK6eyZs6L5O4UBLNaKk6YTDOdvj+C14PNifWBx80VstBzxwgDm + NRfHy03TI4fI4znk8fuLM/QoyTSgLId5K9eMimwzSni++WJkQJwcOcwhhalKVArNXO6J1kpvNJXbUFdm + RU2JO6qKPVBV4oHKUiuq+Xx5sQWFOcIA1iA9hXHGnJSdrUdxiSfKKxhPJbyehQZUsh7X5ivRWqBAX5kK + 82vJDxqs2NDsje2t/tjV5ifpjJXs96vKnLCuxhVbmpTY2a7HjhYNtjSosalOhS31aj42YXenBXv7fLBv + wA+7uN3S5Ym1Tez3BS4YJVcZSpNhmHVuXrYTpsR6isIE5veuqDVhdZ07NjR68vhe2MHv39HiLc04slEY + wF0OA3gBz2+4TI3WfBfJAG4rdUMnH3eVUfsz5/eUmdBdLsxfM593R3uJkTxdh9YiPZ8TU3/68HVPdBdb + yeE9McD9kWorxustGGv0wDjz/RDzfXsp24S5r4t5sLOaNUKYBeVq9n/mq3YvzB+yY9FwOJYMhmM5sX44 + SjJ+795YjXs31eLWJTk4PJ2KQ9PJOMb9h3fU4an9LXj2SAeev6kLTx9px6MHGvDA3lrcvasCd24twK0b + c3BkTToOrU7D/pUJ2LsiXsLuFXHYsTwKW5dGYPvyaGxfFYMdq2Oxa0089qxLIBwjh3dzu0vaxjqwPhp7 + iL0bYqT9nWsjsWW5HWsXBmHBoAWj7WJ0sxxNxc6ozXVGdbYrKnNcGXsKlOeoUUFU5YgZ2lRozmZ75CjQ + nitHV54CwyVqTFTpsaDOhKVsr1Wsj2trddhYa8AOatW9zR7Yx/bczdjZTr61s0aHAy0W3EL+eGI4ECfH + gnFiIhSHB/2wmW0uplUdYg3qnFuHsDlNjACWY4DfP1lkxKJSC5Yxtlfwui3NM2MJY1tMB/2tAZzsjLYE + GVriyY9TnDHO52byDZjh69K6wRkaTKWppJG987idyFRjkrxhIlcnQdrP1mIqR4dpHnd+rpGfFQazCTM5 + Rkxn6jDFmjnD/iSNAmbbLCGfWEYOsJx8YkWxjvtqLMhy5Xc5YzKTyHDFZJYc8/4/3t46yq3rjB6VBjRi + GmZmntGAhpmZmdljj8fMzOyYKbYTU8Bhh5mbpEmbpG3apJw2hTDYMe63z5WdpvB+76311np/7HUljaS5 + 95zzfd/e2vecw+fDaXKMZNhjIofak/pnlljumeNrNvmEMIGmON5mFiowk+0g/j6Z62QzgNknwgCeQ/65 + qtAJu+qdcaTTB8d6giQc7QrCoXb/mwawCTurqb2qjNhXS21T64KDtSbsJ6/eR766p1SBXSUK7CDH3s73 + bGecbW7yxUpy4OFiA+rFjO90sde4EmmxrLFRdoghp48IZc1lXgsJ10gma2CEgXnbZDOAA/QI8NUiwE+N + QP9/N4DTk1yQm+qOYqs7KqxiCWhn1KUZ0MBc1MT615CmRQ3zX1kieWGgPZKY41PETOBEckurN/laAHJy + A5BNiFm/wgSWDOC8QOQWhiGvMJxaNRDJ6d6IIW8N4bn5BynhF+iEUMkA1v+AMMkA1koGsFgCOjxUJcFm + ACsR6Mc65CduXhIGsD3imK/Fj8NF1LLV5JE9tR6YaPbEgi4frO7xxdZuT+xoFUvja6l11dhRYodt1Geb + smRYnynDuhwiX451hfbYwHYXNz8IA/iOfj/cMejHGPDFYckA9sZOYsMQ9dSgj2QAj0oGMPNYA2talTCA + HdFFPdInZgFXqjF40wAerVZjsl6HqXot5tfrsaTegJXkU6skGGxo0mM1dcnqRj3W8PmaJgEjY87E3Moj + Y3cVY3NVhQ4bmNu21lOjN7tK+xXvbuE46tDjQLcWx4eNODvphgfm++GhBSG4ayoQh/rcsLGKGpL6cw61 + 6NI820zg25rUODvhh7snA3Fm1Asn+515zc44PeKC0+SCd/K77hw34xT12smZ/jgw5sdzdMFkkRZtqfao + vGkAi71kE1m/42KpJeIdEUG+LAzgEMZ5bDq1To4ReQUu5KbO1CfO0jKctWJ7BPZZM+Oyldy/s9BIbim2 + 2LFts9PFfN5dztcq2b7lBrQWCrPYibnNEe2Z9uhmDuoTs2bJi2fmaDC3wIB5rCFzC7SYwzhfUKLDomI9 + FlEDLGH8LmXtEvsAL6N+W8HjSj5fyVhbTW24mu1qO7LtGZur6swSVlLrrmRsLmZdmcPvGc9zQo9Fhl7m + vQmxNzhjcTmxjjVtC//fbcyzZ9u9cI5tdGeVCsc51o4XynFHiT1uL3XEIeaPY3UaHK5njHNcbClTYV66 + HENsp3bqyXpq83KhzyNkSA2VIeGmARzuS23lZzOA42NUSEk2SuZvdoYHeYMbLBbqQ+oRYQCLJZ9ThNZL + Yaz+mwGsQlKsE5IYL8nUKJYIscS0HKnkXgJWPs+ItEemmA0c7SCZwBnRCqTx/SnUMclEUpToZwUSxFY1 + YeSr1H+3TGCx/LMvz1MYwF7iyNd8ybUkEzhcbBHCOI8xIDLOiAgeg/maH/Wwt/8tE5j8MYz5IFxNvsn3 + Rmmlx4HBjpKx7OXD7/Tm+8TywAFili//v9jfVZi/RBg/H04eGhZij9AgmwEczedx5OvJPNc06u9s6rIK + cru2DBNGSjwxWeGF2dQC0+VmiFUXp/OUHCc6bGO+PUGucP+sFDwyNwtnxpLJrXyklSdq2TfF7JviSBkq + mHuriRZyviHWq9m5eqwod8EajteVHGPihov5HCvLU2TYkSMMYDfmej9srvDGfPKZwTyOf+bxGo7jujQH + 5lpHdGeoMcK6NivfDfMKvTBXLANd6IEx8sSeXCM6+PcuqxPrphrz87XYRE22r8GEU8wp99fp8SRz0Yst + OrzaZcBPqOHeHHHFm4zlt/v0hAFv9hvw8pABjw1rcfeQCbd1uGA+OVi9uDnAlTqe2sPPLJcMYFfCQxjA + btQjXnLJHBVLMgf5KREcQB0gEKhmX2io+3XM3USYASEhrDUBGvj52cxfYQS7e8jhyu9yd7cj+Jj/Szx3 + Izz42EOYwTwKE1iYwT7CCOZRQOzdG+JDzs4xFsFxFcW4iA+XIZF9kEa9npmoQEEqNXCGWOWONSzDDYWp + LkiPpQaIVCM+Qo0I1pNQsYKEMICFkU2EBXAch2r5Nw3/5sRrc+R12iPY14njScxq1lETUAtF8zuk30ic + fjCAc1M1kgFczH6vpD5vEAYwOUcjtUgtx0Q9Y6uW46SC8VFMFPGcc4lMPhYGcCJjJIlIIYTBm8frKo1w + QqPFVTKBa+KNKKN2zmetzaKOTmcMpBAJRCwRxc9EB8oZw2KfX520D3BGHLUhY8fCuEkM4/mGUIfdhDCB + b920LLYPixXLXwco/ssAjruJBMai+ExyOK85Sk0NTy2XZER+sgkF1IX5CUbkxFGLxbAt2D5iKWixjHxu + nD3yGA+FKQqUkX/VSvme/ZJnJlc1IF0sAc0+S4tn3iHSEplvyGOyydkErOI3j2QnZJJ7SFvwiJUjyOmE + +Stm/4qlnhPZvmLWbxz73zYLWC4ZwGIWsLhhO1XMAE6kJkxUSnsBC7O+SBjAjKtC9lFLlR+Wzi7A0V0D + kMXHRSEuJoLJM5rJMo5iMgZJcZHs8GCSiyAeg5g4gyjCkjHUW4O1y8Zx8uAGPPXQCbzw+Gncf3Yv9mxe + hDnjrWirzUKOJQCxgQb4mBzhpuZAd+AgJzwIPwU70ZNEPtEdAxl+GEn1xtzsQKwoCMWakjBsrYnCvtY4 + 7KgLxWoKwKW5JiwjkV5dFoCFeZ4YjlOjP9IJ3eEO6OBAamEi7OagGUt2xpIifkd1PBaXRGBWph8GY43o + 5KDvC6R44yBZwYKxNc8b+0t8sZ/J5TY2xiYS7hVs5BmxStQzueYzGPMYrLkhKhRwsJey4apIrhvyjWik + MGsheRZ36PYyaQ7W+dqWcibGmoNIiGIxuycaM1oC0V/piV4K355yT3QWe6Alzxn1JO7iB+h6EmZJDJIk + dVQp0FXrgO46Bwy0KTHWo8XsUXdMT3hi7gwvzJvJ9pnwpghy4fdqMFppTxJux2tUYF0lhQoJ8+0kCneX + MqHxvF6tdMavO3zwZwqWfyyOx+frkvD11gR8tjEK/1wRhL/P9cQf+lX4Q7Mcf6mT4dMGR3zdosT37TrJ + ABa42KHDN61qfNWmxtftGnzB4z8aVfiI//dnFMZvUxT/jHifSfuXaU74VbIKH6Ro8CEH6m/ZRn+giPpd + Ax93mfHbARM+HDPh91Mu+Nsyb3y52gffrvHCd2vc8e0GD3y32QMXt/ng4nZffL/NH1cENnjj6ipPfL/Y + Fd9OmfDloBFfdurxJQnsP+u0+HOtFr+u0eCNcgc8w/Z4oEGO+zsc8QST/HMTHniG7fdovxEPdqtxf6cD + np7U4731QfjkWCq+eaAY159vAl7vAH4uZgETv2jH1bfrcPGFQnz7eCYu3p+Kz46G4a87/fD3XYH4x44g + /HVLIP6wIQAfrgrA+4t88eZMNzzDvnq4yRH319rxqMBT/H+isPx0phm/mO+Cv24MwPfHYoH70oAnM4BX + coG3CoA3CoEXs3D94ThcPheKb4/54p973PDRZhanZbyOKRnuHpGRmPK65jrgeWEUbnfGB/uc8fv9Jny8 + R4e/7WX/HNDh28M6XD3pghtnvXDjvFgi2h/fPxSI7x4LxnfPhOPiqwn4/t1MXP1TKa5+XosbV1tx7Vob + rlxqwrUvqoB/lgOfFAO/zcGN99Jx5SULPjsXhd+wT16Za8B9XXKcrJfheKMCZ7uMeGjUB0+NB+KZMYEA + PDbijxMtZuxl4d1cpcUajslV1SasqDZjOcfiUhLY5aUabK4z4fhIIJ5cmYKf7M7H+0fL8P7xUvxkXzYe + WhGFA/1uWFWmoVi2x+wsOebl2WF5mQybW2U4t0iNV/e74zd3BeAfTwTgyxc88d0brrj6ritu/NoD+J0v + 8KdA4C/BwN/DgU8jeV0RvK4wvh6KGx8E4vo7Abjysi8uPeWNrx50x+d3OeOLk0Z8elSLL45q8NUxnbQM + 9KUzZnx/rxsuP+iF60/w+15MYL+lAi9l4tqzmfjmoVT8/nAIfrLKgAcH5TjbLOM4k3HcyfDOIhk+Wm+H + f9xmM4CvnnYneI5nPXD9lAf7iWP6dm98e8ATn+92xx9W6/DTKSWeGtTjTrFUXbsaazo1mMN4nMF4m9Go + waw6NQmaE+ZU2WMVY+DUyni8d38rvnxnGjc+XsPrXAt8SXzNx39djMvvzsYfLvTg8W1F2DWegAVNYRir + CEJHvi+qM7xQmOaNzIxApGZGICk7GvGSCZwkmcD/y/wV+F8G8K3ZuT+evXsLKQUWJAujtsCGxPwkfk+i + dBS49fot2JZ2/hd+/Ldbn0kQn8sjeK7J2fGwZMcS0UjPiaKwDkNKuh8SEjwpkI1wcbaDXiOD0kkOuVwO + R8KolMPf2R4xnnbSfhJiX4op1paN1Z64szccj0+l4ZEZKTjZGoptBW5YRtGwgIRnEYXcWgqdw8xnj87y + w9sbwvCno1H49O4ofP9oJK4/lwS8nIsrz5fh66fr8Mkjrfj58RZcWFeNvcPZWFARheGsQAxkBqIz2RN1 + YRpU+NmjxFOOXBLNTJ5nvkGGKm879MYYMSPdC4MkFrX+dqghyRmLc8RWkt4DBUYcK6YYrXDBXVXOOE+R + dh8F8f3MhY9QxD7VocUrJLs/H3PFb2a44o+zXPD3ec74+3w9/r5AiX8uU+CzdWp8udOIr4564JtzQbh8 + IQZXnozH1RcsuP6aFXiH+ekXzE2/KQF+z7zwl0rGUCVu/I34Zy3wGfPm5y3AF5089uLGZwN8fQiXPurB + p282cVzm46Gt4dgyoMOsEhn6MmToShVLQMvQybohloDuoCDoL3bEiPhhoEqNUfHjADFRo8NkHT/XYMDc + JmfMa3GxGcAtwgCmkG2geG2kaG1wwNoGe2xokmNbC0UF4293uxy72+wJR+xuVeK2Nj32tjvz6I5drIVb + uwKwstUPE9Vu0uyQIgrNUgq+qjA5GkPl6KOom0pQYFGyI1alOGBbugKHKC7OlhjxSJ0bHmtwxhONZjzN + 83q20QXP1znjOda4p0uUeKLIEY8XK/G4MINZz8Us4KeqhQGsw1vdrvjliA9+M+6NXwnzd9QNv5hwx7vj + 7vgZ69TbM7zxypQfHprhh/09LljSrMJwrSPq2XYVJXKUljiikrmzucIZXTVe6G/yJbwx0OiG/gYz+hvF + 3f4k3BTWVbkylLF9S9jW5UR1luwHA7i7XEuOokNPtRZ9rJtDFEjjrRRYXa7SPl7TvTYTWGAma/YtA3hG + h9gXWIWRZgUG2eZ9rHO9VY7oKlOghv1ZGEtiT5QmyVFO0l9N4lptIV/isTLpFpxQRsJaHG0v7ZklGcCB + Clj91UjxumkAm0nEjY6EONoQZVIixqxGtLMGcW4mJHibkejvgqRAZ2REeSAr0ZOk1hsFVh9p9m9lQQCq + xRKvhcGoLAxEGfNdab43SsgZC3PckJfpjKw0A6wWHVIpXoS5IfbrFbMnYin44yjqpTtcYygQYsTsXi0s + CSakiT2FLW5ITXIm6TZIBrD4ezwJv9iLKowCxGYAi6PYX8dmBovZwOIucWE0W1MNyLISFEhiJrBAbrYe + RYUmlBS7oKLcFWVlLigqMiKfgjY/TyehoEAjGcBF+SpppmtVhQH1tS7o6QhAf08w+ruD0dflj842H7Q2 + uqKxzoxqjsvKch1Ki/hZivmcLLY1x3waxUh8gh3i4uSIjXdAPMVBAvsmkW0RT44bxz4Txm5knAPCBSgi + BCIEmIMi2FaRNyFM36g4GyJjnRBNnhzBGJL2/RUzfyP4eWH8RoojEcXPkV/HJbHtUvTSUSA+WYcE9keS + RY/kFIo2tlOSRSst4ybMeTH7N4XnZhUGMEW/NHs6k2IwQ8wApsDKV0oGd0WZntCgvFTN5xxvxRRexQ6o + LHNEdYUD6mqoN+oc0dIgllS3R2MFY+PmLGAxs2ys34zxAWfMGnEl3/bBolm+mDPmjpnD5NzMqaNdBgy3 + GzBInjNU74Y+9lkr+7OOWqQ+1oSWRB80JAWgKMIVFh81gs1yBFC0B/lwTPjbU3xrKNLZt4muKEl0Q1mC + K6qTvNCY4ouO7BD0FkagryycWoKPq/wZo74YqPXBcEMghhqDMdQUgsGmUAw0hKG3NlRa5lmYv02lPmgs + 8URDsScfe0sGcFdtMDqITmlv4CBpX+DellB0N5IDNPpLBnBDlTvqqtwIdzRUu6Ol3gddrYHo6wylvovE + yFAshvqi0NMexDbyQz01TG2hC8qog4rTddJsz5pcD2qXEPTXx2C4OYHnFy9hoCGBryUwV8RL6K2JR0d5 + NJqLwlCfF4iqrAAJFdYAFIv4pQ7MiXNBZpQJqWE6JAZyXHnZjGBhAvvqqRl1NkM4wkOGxCDGU7QJWfGM + 53gzYZKEfyrjUtypbYlyQlayEUXZHijJ9UJRjoAPcjI8kSH2/E00IzZGh+hojTTrVzqyzt+C2I86lN8T + JpYn5/cKEzj6pgEcHOqEwBCFNLvMNsNMjcAw1b9mAEtLRDsiRPxoH+BIDayGJZDxHqJHYagR5ZGMzwiO + m3ANGkIc0MR82EoN28lc0R8mwxBz5DBja4wxMJKqkwzgLsZLM1HPx9WpepQxRorTjMjla2mM1xTGsTB/ + xWzdWwawVez7m6hl7rHlMTHrVyz9LPbyEntti2UEA4PETBFeC89XzFiOEst787rFagjRzInx8cIAFj84 + MFdZTcizmpFP5KXpkc8xkJfGPMVjoVXPMWFAfgpzG+M2LdoO1lhyGwtjk/q6scwTLRW+0rGm2A0VBWIG + lFFCcb5ZMn+L88z8HzrGOeOEOjKd35uVxXih/i8q8UAeP1OQy/8jZv3lOKE+n5qZsT7BXDi/0RMrWRc3 + c6xu7QjE2nrGcL4d5uTLMLdQjsUV9ljTqMa6BnLrOg3W12uxuUmPbeQWO9pdsLvHC3v6/bGz1w+bu7yx + ptkdU4UKjFODDLOODlPnjmfaScv+TvL/zipSYWGVSbq5dUWtG9bUe2JTszc2sS6vqXfHigY3rGzzxsIm + 5o8qIwaFEVvgiKZCR8aAkrpfhfZiPTqEAVzqjM5yF3Qx/7eXuKClwISGXB2aC41SDhisZ36vZn4v9kJX + iRd6GOt95e4YrHLBMP/XeIsHc4QrOir0aCvnd4plDKm3KnMcUJ4tJ2/QYaid+WwiHssnk7ByPBGrRxOw + ZTwZJ5eV4JHtbXh0WztOzM/Dgck0HJiZhpML8/Dkrna8eKgPr9w+jNdPjuLl48N45nAPHtvfjgdva8Jd + 2ypxelMpjq8tlJaH3r80DbctsmD3Yhu2L+L/mB+HLQsJyRROwDZhEi+Jx46l8dJx57IE7FieiJ0rbNhF + XSOwe5U4xvE9Udi0IAyrpgIx1W3CCDluN/V+a6EDGrLtUZdNDsKxUJWjkpYCFvvBVudq+LoaTdkqtGQp + 0ZplM4D7ChlPFUbM4niZW0deWe+MJXVGrKwxYx1fEzPHtzd4YEejBzbXOmNTrQnbm9ywv9MbxwYCcGww + AEeHAzlWfDiWxBLP5K6sq8KAaUlhLbHI0JJqhy6rI4Z5LjPzDJjm+J6b64w5HMfTYmlm1v7JDA1GrCp0 + W+zQlihDMyGWgJ7BsT3NMT4lVrwT7xO/RzEWhPk7KozgdPIw8oUfYyxThxlZegmT2SZMZpkwK9sZk5lG + TFi1GOfnxX7CU6ybs7NUmM7W8Hx0jA0t5hXqMDeP58lrGGctHc2wJxQYYW0dTLfnOYllZeUYZBuPkHuM + cdyOFTlJe4DO4OMZRcL8ZSwUqiQTeBZ5xuxsJ8kAnkP9Pp/9s7JQiQ0c+9urDbiNfHVfC+OsyRO7OW63 + s313kkPvJa8+wHg92uiO42z72xtccJR9cqRSi0NlKuwtdcLeMi12VhqxtcYVG2o8sKSS9Zd925imQEWq + ba/xTPJLSwzzbYQdOZkDIpiTxazaEOba4Egjc/WPDGBvNfy9lQjyYz4P0kgGcHyMWZrJm5PixlzmRv7s + jCrm2BrmuLpUJRrIP2pTlKhhjitNJFcJskMic2dKjEEyjrPTfcjn/JGd44csgSwBmwGclRuA3PxQ5BaE + SQZwUqon64kzgkI18Atwgq+/AiFhwujR/4Aw1kGB0FAVczTrUbASIcFOCCZvDgpQwNfLDgG+wvhRIDSI + uTrakdxWy/xoQE2RCd017hhr9sTCbj+sGwjEzn5f7Oxwxq5mA3bXqbGzzAHbC+TSvpzrqBn+ZQDbYS21 + 2Q7qSjH7/USfH+4Y8JdmAR8Z8MbeQS9sH/DEWj5e3OeN2d2e5E/sjxZhAGvRVm0zgDsqFOgpV6KvUoV+ + ajxhAI+J/X/rGRfE/DoDltYz/qhfJHO32Yh1/A6B9a1GrG/ikdjQbJawqdlFwpYmgmNmPcfIFsbtTub+ + ve3e2NfuxaML9lDT7GxUYE+HE44PmXB+jh8eXBCO8/OicGTQDxtrdVggVnNIlmF+pgyrS+2xvVGHO8aC + cHYyFHeO+En7gR4k3zvYreNRjQNdShwd1OPkpBfuWhiJ0wtisaXXH1NlRrRYHFAWI0d2pJ00S1TaHzbK + DlGxdgiLsZMM4NBE8m1hALMW5uc7s+Y5o4J1r5o5ooZopLZvFqtK5hrQRs7fUWBAB+NToI0cvqNYi65K + E3qqzKwXRrQzfttylehg7PYyZgepVcczRPwxtplzxB66C/jZ+QVaLOb7l5aaCD2WMWctL9ViKbXqEsby + UmIZY3lZiQrLy9RYUaHBCurE5awjK1hPllWyj6glljL2ljB3LiwzYF6JnjGvwQBzXX+SjPnDCavIHzfV + sAZWmLGNbbKPtfFsmxfubnXFadbbO8rtcZx69mSZnfT8DOvuWerO21udsbtWj/XihhLmmp445tEoGSrD + ZSgiF8qhNk8Ps0NyqB15lByR/nJECDD2EmLFjWImZFtdqQM8qQvcYEmmrqAWEQawMHxT+TzNYiCHIS+U + zF9ysXgeY1VIEluaUKukUKekiL4TZjNhvQlpJjB5UGaMQkIGdY6V2jAtVo1Ucv6UeA0sYuUicqmocOqe + UOo+8jhp9q+vDF48evoQPHpRE/oG2sMvmLErOGO4GgGh5GDiyNj2I1f09nfgZ+zgHeAAn0AHBAQx1vne + UHEjSITtRhA//t3TUybNGhVLBos9wcXNHxIC7SD2h40KUyI6XIVI8tBwcjxxjA1nm0QwV0VSB5Ib51Hn + VpLXtZDT9ee7Ma+7YmaZK6bISabzxY1CHBvM+VuqmYs7A3DPeDwenrbi9Egi48cbo+lOqGUfFZO7iqWk + yzjWq+Lt0JjIumFhvbAqsaDYiFUcD6s5nlYU2GEh68ky1sit/O6DFe44WOPH8WIzgAdydGhiLq9Js2Ou + tUO9xR5tfN7PmjeRZcZsavfZee6YzHHFSA5jIINxkeqEbub+GVkaLC7UYwtr+gHmhjPMJQ81mfEU+d1L + bUa81u2MNwZd8daYJ94YccGbfSa82WvEq70mPD9gwiODBpwddMb2VhOmi/SoZfyKlfnCzdQcJjlcDTKY + CXc+93Lja+5y+HtQ21GfBHgpmIOdJPj7iZUa1MzVGoSK3B1uIsxSzQkI1MLLWwEPTwe48DvMzjI4/w+4 + CCOY/1uYwdKMYGH8sq/FUTwXZrDQk8IAjgqUIZqaIZFj1cL8k5HggLxkJ5SQQ1eKrVly3FGT7YZSqws5 + uQ4p4jeLSA0ixQ1EHGPC5A3mOQuE+is5dlR8nWNSXIe3I3x5nYE853Cef3SkATGxIraECSxmAYu9aqnH + ydPzBP8nVylKU7FmUguTuzSxf1pSqW8SFWiMsZdmAJfzfIuIQsZIDpFFpPN5agDBo5XHHB6FASyWgW5i + HRaoTTChIkaPAtbBbOoUsVew2DM4jhAGcCTbIpLxlRguVuPQIp06LSPeSC1oQDI1VjyvN46xJIE1NI5x + JF6LDxYGsJqvqyT85xLQCXyPmCEsZgyLWcQpRJowgNkG2Ql65FIT5sbrkZdIHcbHOfE65DIf5DI3ZLF9 + smJk0jZzOcz9hRynlcztFczNFbnihlk9MhIdkM6Y+QFJDtQ/bE/yxPxMvW3LnRRhBgvtxe/+kQFsYV8n + xzlKRm9CtDB95az/hLhhnvpRrEJh4TmkMmelxTtJGlEsA53D/irKpHakhhemvVglbPGsAhzaMQCZMH5v + GcDJCbFMsJH8slAiBImxwUhLDkdeViy6O0qxetkEbj+wFg/dtQ8vPnkarz93N1547A6cP7kd+7cuxPpF + w5jRU476olgKdU9E+WjhrWYQ2XNwyzmoHThwOdAr2WE9Ke4YTvHEbCtFSk4AVhaHSAbwnuYYbK8LxbpS + L6wpdsfqEh+sKPbHNAf0UIwaQ+yIPnZIhxgsLAqd7KhxixsWFYVjaXkMZmb4YyDBFW1Moo2+dmhnMh5k + J09T+K9IMWNnnjd25ZH0k5xvZMOuzjBgKkGDVibSUi92GgMhL1SNQhaUMja62Mi5voAivIDiQixBxQTX + W+WBoXpfHsXegu4YbfbDdG8EZvdEYEYr/3+VG3qZ7HrK3dBe5MwiT+GfqUaVVYFqkuQGitTmEp5/iRwt + pTK0lsnRVS9MYCY+MSuBiWtymBilkBz1xAy+NtosZk3ZM2HbYX6JA1aWq7C5TIODJTqcJh4uMeJlJu7f + 9AXgb9PR+HJNKr7dmYHvD2bh230p+HpbHL5cGYJPxk34c5ujZAB/xv/5TasKlzv0uNpr/i8DWAKff9lu + wMfVCvwy12b+vkPh816qPX5JAv6BRY0PUnX4kIPrIwrbj2pM+FWjAT9r0eLtThXe7tXglxNGfLzQE5+t + 8MG3q7xxcbUHLq73xMUNnri0yRvfbfbB95t9cWWTLy6v8cKV5R74foErvptyxjfDzviqx4yvWoz4rEGP + vzbo8NtGLd5tVOK1Fkc83WOPp0fUeH3aA28v9MdP5wfg1ZneeH7cBU+N6PDCLCPeXxuIvxxKxFd35eH6 + U3XAyy3AT4UJ3An8rBVXX6/Bt0/n46uHrPj6XDL+vj8Ef9nmh0+2B+BPG33x4RpvvL/CCz9f5IU3pt3x + wrAZF9pUuLfWEXdXO+D+BhUebdfhyU49XhzS441JtsMqP3x5MAY3zqcBT2UAr+UB7xTx/5bYzOBHE3Ht + ngh8e8wfn+x2wy/WaPDCPHvcNyLD7V0yHO6V4c5xOzyyWIfn1xjx081GvLdFjw83a/HnrWp8tsuIb/eb + cfWEMBm9cP0+P1x9OBCXHwvBxafD8e1L0fjupyn4/oNcXPmkCle+bsSN6+24Rly51IirX1TYZv9+XAD8 + Jgs33knFleeS8fm5KHy4zQevzjHg/k47yQA+VifHiRYV7upxxkP9nrjQ74VHB7zwII8nSOb2NRixpUaP + tSSNK8XyaCSCK0gClpM4ri7VYEe9GadJtJ/nmHzvUCn+eKYBH59vxIenKvEqx+g9c0Oxs8UNSwucMIfk + fD7H2YoyGba3yXHfUgPeOuiF398dhM+eCMJXz3niyxeN+O4nelz7mTNuvO8O/NoX+F0g8Ocw4JNIIgL4 + Kx//MRT4kPhFKPvYHxef8cVXD3vgs7td8MUpEz67XYvPj2nw5VEtvjmuxcU7jfj+nAuu3OuJaw/5A0/E + AM8mA09bceNJxtH5VPx2bxBe4zk90G8zgO/rkOGZMRneWiDDb9ba4dO9Oly+wx3Xznjg+lme2zlP3Djt + KRnAl4554Zv9Hvh8lxt+v0qLt2Y54ckBLc606XBbuwbruijQmQNmtuoI5iWKtrl1WsyvdcI6xufd65Px + wSNd+Prd+by+9cBnxFdrgG9W85oX4sr7s/DxE714akcRbhuNxcKGIIyV+KIrxxs16e4sSG7ITPdDWkYY + krOjkJATg7icRMTmCpP2/x8D+BZu/f3/jQEcn8fP8zuSea7JWXESUrJikJYTSYTCku6P+HgvEnEDnM12 + 0KpkcGStkclksCcMTiRwRhIHEqqSUAf0MWetKHfHgbYA3D8egyfnpODewRjsLvPAAgqFIT8SWg8KHZKu + WRR1a3NVON7uhsem/fDutjD86UQkPj8fjouPJeHq8/n49pkK/PPxenx4vhkv7avH8Tl5WFYfg0GrN3qS + PTGSEYBRqy/rkguG4w3oJTGvJ6krJ8GsYT1so8gZS9JhbhaJboIK9axZdV4yjPF/b83RYn+BDrczv5+r + ccP5Bg/cV8djnQn31mjxIHPPkxw7rwgDeNRmAP9pyhX/mOuCT+cxZy5U4fOljvhijRJfbdXj6wOu+PZO + 5toHwnH1QhSuPhWLay8k4cZrqcBbzFPvZTOe8oHfFwN/Ij5mvvqkHPh7DfNFPW78sxk3/tGO6//swvW/ + 9+Hihx347K0G/ObRIjyxJwY7x/SYXyXDUJZM2gO4xyojcZejg3HdybjuK3bEcKVGwki16ibUmEGBPlmn + x5xGs2QCL2wxSQbwQhL6xY0aLGtSYlWjI9Y1OmBjkx22Mfa2CwO4VYZdLXIbmuyxu1mF25r1hJmvuWNH + px9WtfhgRpULGq2OqKDYrCZZaoik2AizxwDF4FS8IxYnO2ANBcguqxOO52lxf5UrnmzywtNNbniGAuM5 + 4vkGZ7xYSwFBkfxMMWO38D8NYCWerFLh+UYd3uxywbuDnnh/xAPvDrkSzvj5iDN+ynom7kr9yYg7np/w + xgPjPtjXbeY1qqQloGuLKayIkmIHHlVoKDehg3yjt8H7RwawM2GSDOAGcoFKtmtpBol2Oo8/MoDbSpXo + rtCh+6YB3Ps/DWD3/zKAxRLQE+1qjLZS1DU7SgbwQL0dBuoc0V2lQF22HOXJMlSlylHDNq1JV6GGXKCK + IlCYvhWJbOebKCVhLSJBzaFozKaAzwxSIiNAIxnAia4k3c5OiDUJCNPXhiiz2gZhALubkeDrigR/V1hC + XFGQHIjijGCS2WCUZPvx6IPyPD+b+VsQiMpCf5sBXOAtoZhcLz/LGVnpFAgpFAokw2kk2EkkyGKWrphB + YQPPgSI5NlIlGbzCABbmr0BKIs+BYiQuisKCgiqO/DMyVCyjZCeZvsH+4miHID+KJyHOKWYiw8SPFSTi + Fr20n2qmlcTeKmb/apGXa0SxmA1X7oGqag+UV7iiqMSEfMa5WBJaArmmWAK6INeJR2F2alBbbUZni69k + Agt0tvmipdED9TVmVFcYUM73FBeqpL2Ds6wOsFJUp6Q4IIkCPSqK4pGiPSbOHrEJbHcJFECS8UvEUvRF + OyCUbRLK9ggVj3+AI/9mQ3S86t8M4KhohWQAi78JEzgsnI8j+F03DeAw/k18t9gzODFVz6MwgNmOPMZb + tEiy6G4awHo+1iBJmPM8t2SLEqkUk2J/O9sS2hRYWY7IyhAzgIUBTH5OblFRTuFbrkF1lZZgG1WpUVOp + RD3zSkOdEo3C+G10QivzR0u9I5pr7dDE/CQM4IF2LUZ7TRjrd8Yscu15M32xeMof82d4YYoxOjnAv/Xq + MdJlxFCLmXEgDGBXtLA/q6JUqIo0ojbGE6URnkjz1SLS1R6+zOneFPJ+3hwXAfaIphgVs4Vy411QzPz/ + gwGc6of27BD0FEWgpywcXRXB6Kz0Q3e1D2PVm7HKfq71J9jXNYF8PQgdFQFoKRfmrzc1lifBvifEc7EX + cA91U09jOHqbItDXHIb+lghqinD0NAVLBnBLjRcaKl1RW+kioZ46pYV5pastEP1doRgdiMbEWDwmx+Iw + MRSN8f4ozBiIxWRfNEa7ojDC7xpri8ZUTzKWjGdj1axCrJkuweqbWDVVgpUzS7FiskTC8hnFWDJahPkD + ucwvGZjRaSUymH+sGGq08Lri0FYWgcbCEFRTA5ameiE71oy0cPFDuxqx/hxv1HCxrMeJgRzPjLu8ZGfm + OXcUpTFm0l0oaJ2RnWyANZ5inePMmsiYyXSRbv4okuCLnEwvWNPdJAM45qYBLBATo0V0DGPgJn4wgMWs + 4FgxW93AeDFC7AEsLfscavtxzjbDTIMgQuz/a9sDmODfxZKdYgZwXJAGliDGfDBFfAjFd7gJZaF6VIdx + jIYopJuPWpgT24iecBn6GXdDiSqMMiaGmackA5i6qpnHWwZweZoRJelm5PGxWN7rfxvAeqQm6JAYx9wp + ZjZHME55TeHiuniOIdTNQcEOkvkrEBbKv4eLpd7E+xT/bgDzPHLZlvkZNuRy3AsTWNz9L35UkIzgVLEs + Nf9vnMK2t160jM8Zm7cM4Mr/NoCLcozSss8CeZnMj5L5q/ovA7hQGMCFZuZDtl+ehnmecV3ImlbGGlbn + grnMfUubfLGxIwRbOoOlLR9m59lhFuvhVD51BDXEcnLnVXUqrK5VY3OTATvbzeTaLoQr9nZ7Yl+vL3Z3 + +2Jrhxe5hRvmF6n4eQeMk7OMkrtMUK9P5jpiJvPNVJEa88r1WFhpwtJqZ6wkH9vY7I0N5Amr69zJ+Vyx + pIF5pM4Zk5WGfzOAm8gTmvj5tiKDtA2UWOa5s8wd3awBYkuplgJnNLAutJW4Y6QpDBNtMRhpjEBXmT86 + S8nhGeM9fG8fY3ao3pMx5IvRFi/01royN7iggxAGcEW2mBkrQzPz4kg789l4PFZMJGLVWALWjiTgtllW + nFtZgce2tePCpmYcnZWBfWMWHJ6ZhrOLi/Dy/n68dWIC75yawnvnpvGzs7Pxxp2TePn2ETx7pBcX9rXj + oV1NuG9XI+7aVoOTa4txdEWutGfwoRXZ2LfMij2L07BrSaqEnYss2LEokUdicQKRiN1Lk3Dbcgv2LBfH + ZNy2IgF7VyYSPL8VcXxPFLbMD8OaWYGY7jRirEGDvnIFuooc0ZarQAvHQRPHQwPrZK0EPeqJhhwNmnPU + aMlSoTVTgY4cJ/QW6TBcYcJMttMc9s+CehcsZv+sqHPFGo6XjeTTWxo8sa3JB5vZdxtqXbCF42BPpzcO + 9ftLODgYgF0cI2IJ6Pmss+Osyf1iJl46a8nNpaBbLXL0pTuS66sxkUENZ6WG41iexfo1ybo/Lu3fy/NJ + sUdnslzaA3hAzN5jPAgDeDb7/pYBPMF4GE1RYiRVyTEoln/+kfmbpfs3A3gGY2VGphEzs82YkcFzI88Q + pvEM/k8xC3gqU40p1s45uWKGlxZzCrSYyhU/sJPbZThgkPV0MEOBfrZXdxo5Y4ocbeR13fx7X54K/YX8 + G7nkEI+jxATHsjCAZxYwTvKV/C6xehfB9piX7YiF7J8V5CDrS1TYVKbF1iojtjFWtlaZsZltt5lxsZtt + f6TVE7e3euNO4jRxqtkDd7Ld76wz42SNAceqdZIhvJecZ6swFMiP5hcapDZrTVeSeypQSM6ZLfIg834c + +bwwZEQuEzNpQ1mbQ6JMzNU3f4z318HfSwU/L+ZpX/UPBnBctAmp8SZkW1hPWFMkA5h5roZ9UJNKnZaq + QjW5SDXzcplYVj9ELKnKvBtjYJ41M0d6wprmhXQrj4S0/2+mn2QAZ+aIZaCDkZ0TJC0BnWBxJ1cyIoAc + 2NdPAR/xY3yoqC26HxAWakNoqDAVlAgRhlCgWOpVgUA/h38zgMOZvxNjnJDDnFyaY0JtkQmd1W4YZT5a + 0O2PdYOB2DXoh12drthJPXVbvQa7q5TYRc0gln/emC3D+psG8NoCOdYUObCPqDdb3XF7jy9OcuyfGPDB + kX5v7On1wOYeN6xkzlzQ4YFJ5k/BiXqbjf9lAItloP+nAVxn/JcB3GTCuiYzNrSasanVGZt53NxGNDtL + KzSIo8AWsR9tsxt2UMttb3KVbtLYxvFzW7MXDnQyPnmd+zs9sIfXt73eie9xxP4uDe4c88A9s0Nw15wY + HBwIkozjOVl2GIlnbUiTSTNhN9WbcHgwCMfHQ3GUMb67jf+vXo2N9QrmAntsbrSTVmY7RK12en4kTi9J + wrbBUEyVO7MuK1DMWpfB2i2WE/7BAI6xIxeWI4Q6MyxBjhiOoWTGdS7juzCXHIDHyhw9qqjr6xnPjdla + tOToCA1aGZ+t5PwCzfnMYQVqdDKn9zG395Kv9Ygbh8QKktlKyQAW+4GPU6/OJj+em2vAogLqZWqIhcyJ + y0tNWFFmJgyS+WszgFVYXOiERYzjRWJf4CIlFkuzg9VYylhdUkqtzfctJK9eSC0hZhEvLNVhATG/xIC5 + zKUjqfboT5RhMkOsROkq3US/uZJ9IgzgCiPuaHTFOer3M3UanKp0xMkKOe6sdsDZZh3uoiY+0+3O2HeR + bg5ZWcw8lGaHTvaJWFq4PFyOQuqm3HB7ZEU4IpV8JCnEEbHB9ogRYHwLXiMZwBlukgGcYXVBUoKWXE6s + XMJckKSVzF9hAt+a/SvMX4GUOB5j+B5qltRIfj/7LE3MoiR+bABLJrAwc6hvsvi5bH5/ZiL1YxJ5ZrIR + 6UlGJEkmMDkjz1UsuXxrlq4n9Z8Hub8HH3vwNW9qAN8gR8kEFhAmrzB+xWu+jGFvclybCWzPzzpIOUGs + DiBuDPmXAWwvmb9uYpaouwy+QlsE3twPOMgeEeSTcZHUU1HktuHUY6EO0jGe3C+Z55hOPZsVq0E+9Whl + sg6NzG9drBuDHIvjHDOT+WppOeV55A5LWNs2keMcZA45OxSJB2Ym49RQLDbVebHOkH+xjUpDZShhm5XH + O6A2idyGur+TGEhXYIp1eXm5CWuqTVhZ6oQl5CJLU2TYlK3A/go37Ke+2SCWgKaOEtsmNKY6ktvaoTaF + SLJHU7IDv4u1L03HumnCZKaZY5znytrWmapGe7Ij+pj7xU0Py8mlRD7Y12DG6UYTHiRsBrAJr3W74I1B + N7w55onXh93wWq8Zr3Qb8TzxeK8B9/Xrmd9M2NCgxyTrXHWk3Q8zgH2E+auVwaBjm/O5F1/3FRBGsIcd + /D3Zh8Is9XGED3Oxv78KQSHM1+T3wgAOCTUhMIj1JkDz7wYwdaGLs23mrzgK4/eWCSxeE/hfBrC0B7Gv + WFFKhuggOWLZ/hbmmPQ4xgrbv5hcoSpDj7pcFzTmu5NHevC5K/JYr1KpcRIj1YjiOBIGcJCv4geE+NlM + 8xbWFAAA//RJREFUYHEUz/29WF/chclN/S+272E9iorWMbbETaQ2AziV+spqUbPmaCUz0WYAiy1SdWjK + NKDVqkdzshpNsY7SMtDlwRwrhNhyLY8QvwNl8XkGj2I56GzxOuMnj9clDODmFFc0pbqjjlqtMs6AQtbz + LOaANMbSLQM4RhjhbAthhoulmm2zgPX/ZQCLZZ5jA5U2s5fXL5nANw3gW/ixARwfpkJiqApiqWjxnZZI + FfMEdQl1pzWG5xGvQ068HtnC8L1pBAsDOIfPc5hbRM6wsiZYY3hdCbyuFEfWZfKGXGq3HANK2UaZ7C9r + gv2/wPGcK5m/OuoiE/I4znPIAQXy2Kd5bFNhAFupj4QBnBRrQyLrjECCZAbf3ILgpgEstmwSJnAqdZw1 + gRyJ/VXAfikiTyxgvzVX+GMxtfuhHYOQJcaJ5Z4jkRgfy6TGx9ERSIoOR0p8FDJSolGSn4y2xnwsWzyI + 0ye24rEHDuOJBw/jyYeO4OmHj+AZPn7srj14nLhwZidu37EAK2Y1o682HWVpQYj31SLUaA8/FZOWhp3I + wVwaSvKcYGQhccZYsgumSZyWFQZhc3UkdjVEYVtNMImILzZXkcSUB2JpgS8mmHSHYjQY4ecGYw3ojqCY + IhHr4QCdmeGLRcVRmFcYjr4EF7SG69DAJFrnY4dmH5LZAEeMsXPnxWqxgYVjS7YrtmSRZGSbsJEBsyDN + TBHuhGom42IGc34oB3aCEmUk4FVZJIK5asIR9RQeLcUG9FS5Y7Deh0exVJMrRpp9MLsvFLN7QjCDwmyw + xhV9LI69JAodRUa05OpQx+RZZXVATaYd6nPkqKNArc0jKFbreWwpk6OzTomBdgOGOs0Y7DVhuM8ZIwNu + GOtxwUiLFuNib1AW1flljlgiZgEXOWEPReWJQg3Oszg/T7L80UgIPidR+X5bDi4fKsD106W4ckcevj+U + ztfi8cVcH/y9V4e/Ndrj0zo7yewVS0D/3xnAX4vnFGH/aNTgdyV2eD9Dhp9R9LxLESMZwEzKv8kw4qMC + V3zEa/51gyveaWQSrlXgOZKoF9sc8fYwPzvHDf9Y4o2vl3vhuxUeuLSGWEus5/MNXviex8vriJUe+H6J + Ky7ONeO7mc74btQV3/a74psOZ3zRbMLfWwz4U7seH3br8PN+FX4yrsRbcwz45Qpv/HZNCD5cFYZfLg7G + z+f74Y057nh1lhHv8W9/ui0an5+04upD5ZIJfOPlJtx4vRU3XmvClecq8c3Dufj8XBr+eSwWf94egD9v + 9MNfNopZv174+RJ3vDnfDa/OdsNz4854rEePexudcLZagbNVTri3Vsfio8dDzVo8TvL53LAB7y5mO++J + wrXzqZKBiNdzbQbwOyXAq3z8WDKu3RONr44E4E/bXPHWYiUeHZfjjk4Z9jTIsLNZhgN9cpyZqcaD87V4 + fqkOry3T4N0VGny0Ro9/bGab7HHH1WMeuHHW22YAPxKEK0+G4/vno/Dd6/H47t10XPp9Ea58Wo+rl1pw + A124dqMDVy412Azgvxfjxh9zcONXVlx7y4Lvn07Cl+ei8NutPnht2oAHO+xwsk6GQ5UyHKyzx4lmJc6y + 7e/rNOH+bmeJ0B2XDGATtlC0SQZwhQAJPsnnqlIDi70eeyic754IwSvr0/C7k9X47MEOfPdkLz59uA0f + 3F6KZ9ZZcJLjViztMz9LjoUUJavLZNjbaY8LK8x494gfPj4fiq+fDsO3z3nj82f0+OoFFS69rsPVt8y4 + /jMP4Jd+wEfBwB/DgD+HE6G4/js+/5DPfxWOaz8NwqXn/fD1o1747F4XfHHWhM9OaPHZ7Wp8fpRj/Zga + 357Q4dJpxsFdHrh+rw/wUAT7KZFgH17IxLfnLPjtriC8vtiIRwbkuLddhge6ZHh2QoafLrTNAP7ikBHX + Tnvhxl3ewN2ewF3EGWEAc6wf88Q3+93xxS5X/H6VBm/OUuDJfjXOtmmwr12DjV16LOzQY3aHEVMdZkxz + zM9rMmAxBdYm5oF7N6bgN4/24JtfLAL+uQn4ivhmDfDtKuBv83H5vQn85YkuPLUtD7sGwjGn3B0D2S7o + tLqhLsUFJRS5Oak+FKshSM6KREI2831Owr8bwGI/YGlP4FQJCXlpP4J4fnOJZrFcszB9i24hDTYDOAWW + AmHw2iAZuP9fDWDx+R8M4PgfDOBUyQAOgyU9EDHxXiRdBpiNdtAoZXC0l0Euk8FBLoORz/30MsSTTNVE + iv1KjNjWEIDTJLiPzIrFhcloHG/xxSqrBv1+dqgj+St3kqFSLUOnpxyzWGDXk9gebTXimYV++OVtofjz + yTB8ej4eXz2eg79dKMKH95bh9WPluHdtIdZ1xWKI4qQ5hrUi0Q1T2UEUZkFYnOuHDSWBWJnliqloRwyS + yAyH8fuTxN48riTZ/liYZ0AfSXYXyc0URaS4c3I/heDxcgPuafDAQ6wv9zd64e5aE+6q0uC+OhUeb9Hg + 1T4TfjbkjA8nXPHxlDs+neuOz+cZ8cVCFb5c6oiv1ijx9Wbm8r3Mqbd74eo9Ibj6YCiuPhaOq09H4+rz + cbjxShJuvCX2vc4APmCO+oj4Qz7wJ+atv4jVAqpx7W/1uPYJc+bfW3D1kw58+2ELPn+nDn94uhQvHE7E + wSkzllE4jzGGu0n8/9MA7il2xEC5CkOVakKFQWKoUomxai0mqnWYVW/EbOaTec3MBc16zBczgBspYJs1 + WN2ixIZmBba0OmJnmxy7GH97iL0dRLsce9vssKdFwXyjJvS4jXlnV7sP1jR7YbLCjOZ0e9QnytEUp0A7 + iVI3ReCwZABT+FB4rLPw86zTZygsLtR74pkWLzzX7Ibn+T0vNDrjhToTXqzS4/kK3Q8G8BMlwgBW4rFy + JzxWocQT1So8V6/BK60G/KTLjDd7zHirx4g3KTre6NOznwx4ud+IF/vNeIoC5fywJ27rNGBBnRP6K+Wo + KSRhLpKhuMhOWtK2lqK8lXW1q9YDfez3/kY39DU4EyZ0U2QLA7iC7VrC9hUGcAnbuzpbhsZCB7TyvLqq + dBK6bxrAgxQ8YxzHs8Tyz70eNw1gV8kAtu0HbJRM4Anmo7FWBUbZ1sNN9hiSoCCvU6Apn/yFPEYsx9mS + TxGXTY6U5oQKiz3KkxxQnngLJMDxjiiMtkcOyX7WTQPYGqiBxUuNBFeSdLMCMcL8NakQbbYh0lmYv1pE + ueoQ5+lMDumGxAA3CnUPlGaEoyIvEhX5YSjLC0BRlheKc3xQnh9A+BM+5KxEoTdKieJ8N+Rlm5FFEp1J + 8puZrkMGYUlSIYHnFhdjQ2w0zyNSgEKAgjk5kUKfYiQ9xQ0WipF4xnJsFEV/tF46Rog7uQPEj3EygqKJ + 8PeWw8+LzylWwihqxF2zlkRhOuuRTp5kTRf7/upQWOCMslI31FR7o7bOG1XV7ighVyzguCsUJnABxVUB + BXueGnkU5Lk5ChQWOqGKdbW5wRNt5JsCLRwP9eSalWUUF8VaFOUrkZ2lQAZ5ZlqKHKnkaBb2R3y8HSKY + U8IoyCLZF1FxToimSBCIYG4TJm1opANCIuwR9B8I5usC4u8CUfHsmzhhArOfYpUUiGIGsDCPFdL3hEUI + A5jge8PFjOAoe76P50BRmJgqTF814tj28ck2iFnINmgIpTTzNzHR6aYBrP7BAM4hD7cZwBS9WfY2A7hE + hQph/lYyDpg3mhrNaG3kUSxJ2KRFK/NiG7msQAdrbEeLGu0cw63kvZ1iWfN2LYa6jRgm950YcsP0hDcW + zvLD/ElvTJF3Tg4a/80AHqh3RXeRMxrZn2XhKpSE6FEc4owMP44NN0cEGinYWWfcTRTtnhwH/mx3cTdx + hFgqyoTCOBdUJlLcJnujxRqIDtauLmqWztJQtJUFoo2ap63SEx0VXhLaJLCvy30Yy75oKhbGrxfqCj1Q + w3FdR+0iHjeVeaO9JgC9jcL0jcRgezQG2yIx1E50RKKvOQSdkgHsKRnAdRXOhNhX2gUtHE9dbf7o7wrB + 6EAUZozFY/aMRMybmYxFU6lYt7gAm5cVYeOSYmxeUoJtS8uxa0UtDqxrxuFNbTiyuR1HtthweGM7Dq3v + xMF1HRIOrGvH/jUd2LOyGduXNGDzwlqiARvn1WP1VBWWTBRjejAbk92ZGG1LQ399Eq81Gg0FoajK9kNZ + hjsKU8Ty2YwLi56xb0ZVnifqinxRW+SDumIf5ktvlOW4II+COSNZLHulQK7VgKI8dxTke6AgzxvZ2V5I + T3dFcrLJtg81xfy/8D8M4Ih/GcBxjH2xJ1tYpDB+iTA140iDkEgbgiJVEsQ+b+HUpJHUmTGhzG0hOqQE + 62ElsoLEnexGFPNxRYgW1RwT9aEOaAyRozWM9THSDj2sSYOMg5EUmwHcR3QyXpp5/F8GsJUxlCrMjySK + fWEAS9DwNa20R7nIYbYfA52kveLEks/B1N0hYhnrYDH7lwhhzPJ6InhdEeFK5ghhAIsfUoWxrJHyVm6m + K/LEj0nCALYakWPRIZtxK5BjYVzymJmoQoq4A136MfyWAayXln5uFgZwuRdqS9yl5Z9L8kwoyjYiW9wQ + k6aCNVWFNMa6hRwoNUVNbqplfxltBnCpJwpKxOoIYrawHlVFjPNSDborDBitZa2qc8X8ei+saQ3GhrZA + LOV4nplrj8k8OaYK5ZhXbo+lNU5YXq3EqhoVtrWYsLfLFQc63XGwwx0Hurywv9OLHMELm5vdsbbOhbpa + hzliZmO2AybE7N9se8zMcbSZXdTa0yUazC3TY4GYHVVpxrpGT8LDtlRmrRnzq02Ypo6ZKNNh6EcGcCP5 + QhPPv6XQgBZeT2uxGW3F7uhi23TwOpupn+vzndHOWB5vi2EdTsJYSyyvlXmi1J/wld7bU+WBwXq+pzUA + o+2+GGAN6K3zRGeNG1rLTahkrSinhmri/x9t9cOioRgsJVb0x2DtQCz2z87GuWWVeGhNA+5aUo7bBhKw + qz8Oh2ek4Z5lZXjjyCjeOzWNX56bh9/cuxAfEL+4az7ePjWF1+8Yx4u3j+C5wwN45kg/HtvfhQd2NOHu + TTU4u6kKp9aX4/iaIhxblY/Dq/NwcGUO9i3NwN4laZIpvHephY8t2LcsFfuWp2L/cj4XWJGM/SuTiETs + WRaHXYujsG1+GNbNDMR8wUnI5YarlOgnn+lhG/YU69BZbER7sQnNpeR1JSa0iMf5ejTnsI2FAZylRHuO + iu9nP5ST09SS4zB/z+WYWcC+WsLnK9hma+rcsa7OAxsavLCOf19T7Yz1DS7Y0e6Jvb1+2N/nh319vtjd + Q+7e6o6FNWZMFqoxmEduxXrUkipHQ5IMzUQX+U9/qgJDqU4YYQyMcVyL5ZyFGSv27R1Od8KAWOYy1R69 + 6QqM5GgxM18YwCbMFstAZ2kxKQzcNA3zAHkxPztMzjCaKZZ//tfsX4GJLL0NYtYvMYMxM55h4P/RYJQ1 + U/w/Met4lmQAqzDNdpnK1WI2OcVktgojVkf0p9mjJ11Oju5Iju6IVp5Xo0UuoY3PO6k9OvPs0ZUrR1++ + HYby7TFOzBRLohc4YYptMEV+Ms33CQN4LsfeojzGmzCAGaeby3WSmbChVOyvzCM5ysZSLW6rccExYfp2 + +uEu4u5OX9zT7k144l628d0tbjjX4o6zLZ44Uu+BHeRGy/MZl2yvEXLNLvKBWrZLCdsnlzkzlVwkntwj + mtwtkrk5PNJArmJCSJTYa9OMoBCDZAD7eqlYlx3h/2MDmHU5RTKAXVCYRl6W7ozKHxnAtZIBrEIl816Z + MIAiVNIeg4lROiSSEybGm5GUYEZikpmcxQVWq7dkAGcIA5jIyPJjTvNBcroXYhNdEBqug1+AI3z8hNlj + j4Agm3kQSIhjcPAtqAhyzEAn8kxhAjtJyz/7+zhIS0CH8e9RYczTcWppdYaKfBfUMVd2kEsOMyfNv2UA + D/lhV5cHdraasKdRj73kRvur1dhZqsDWAtsewD8YwMQGxthtjS44enMf4Nv7fXC4hzmyyw3rO5yxtMUF + 003OGG0wsl5T3/I7xRLQ/zKAOb4rnND7HwbwZN2/G8BrxEzfZhdsbnXB1jZXbG93IVyZo52xpclImAhn + PnfDjiY37BQGcKMrtjD+thK7mzyxv80Ph7r8sb+DGqpZGMDM8Q1CGzrhUJ8RJ8f9cMeMKOzuDsaKShdp + ufPeaBlGLTLMJ39cze/Z0R2AvYMhfA/bi+e1uMQRC4vlWFImw7JKGdY2KrCd/PDQzBAcW5CMrcPRmFnh + hqY0NYpj7JHO+i32lL1lAEf/hwEclWyPhHQlMsWNn4zfYvL/Mo7fikwVajJUqCMa+biRurMpm8hinSAa + shVoZGyJFSP6eO791W7oL3dBbwnbnDHcl+kk3VAyTkxZhXlHnZynx+I8HZYU6LGqzIzV5HmrpFX4dFgm + loIuUmEB43Me43cuMb9AgQXUFQsKlbxmNaHBAnGTE+NX2vu7UIP5zLULiIX8v/OZS8eZM/rjZRhLscMi + apXVZc7YUMb+4ntuY2zfXmXA6Ro9ztaqcaZagTtr7HG6QYFzrXrp98I7O1yxv8mMTZU6LOb/GmWeaUu0 + Q22sPcrIgwqpHfKjnJATpUIGOUyaZMRQF/C1xBge48lxLOQPmW7UBB5ITzNJs3+lG9cEb7k5A1gYweKx + JUHM2hUgXyLSGC9p1C3pMU6EAmlRcqSz/9KpjwSs1CwZUWIJaAWyEpTISdIhj/wzL9WMHCIr1QWZKc78 + fhMSySWjqBl/MIC9yf+F+Uu4+xDUhmJ2rxd1gDCCBcRjL38exXN/R/79Fhzg7u3Iz9tMxaBg8ktys6Ag + 2wzg/zSAxTLQYh/gCPK5aHK3xFg9kshTY9lu0eRxcWyzRLZfKs8xM07MXNQjn21RxnapI59sowbuydJh + OFtsL0C+k+mIORkc9zkOWF+klJbmP9UbhPPjsRD7t29p8MZs1tMWxk+FMPY4xmtY45qZJ1tZczrTlOhj + bRun/hRjZmW1GSsrtFjO+rEkVaw24Ig9pS64rdILa0vdMV3ojN4MNRpSHVCTYm9Dkvh9xgGt5PAD5JZj + 5Lnj5Lyj5KH91O5drIldFgWG+b/m5xqlm4I2VZmwu8aAO5iL7mNueaJJhxdvGsA/GXTH6yMeeGnQDS92 + m/Fchx6Pt+nxQIcOZ7q1ONKjx+paDcZzGYvsc4sH29RsBx+DHcw6GYzUcsIA9hbmr4sNPq5y+LjzPR7s + Q0/CRyzRrYA/+ymQnD+EPF/8DinMX1+x9++PDGBnfo+Y6Sv2/pVm/BLCCL41C/iWAez9fzCAY0LtkBAh + 5zi2RxbbqijFibpAg/os8h9yyDbqw+YC6sRsdxSnGJBGjZNIfRJFvv8vA1gYvqwpRIhYzlrMZvZ2gB+v + yddNzHAW2wwoERKoRmiYWBlJgRjqe7EEtCWeupwaPZM1MY/9UZSqRDm1Vz35R3M2eW0Gj8laNDEW6xjP + FWFylIk9gMPlKIqwQ0GEPfKIXMZZHpEfzpgPo54PtUdJuCOaU93QkuaB+iRnVMUbmQ9UyOI4T2V8iSWj + JQNYGOHCAA4Ss6GF7uB5RWkZ18LwNiCJHCA+VIlYXnPszZm+t5Z2jhdLQP8It5Z/lmb/UgdZIrTUMDpp + WemUKGqgaM0PBnBGnAZZ1FZZwvBlPInH2eJ5rAaZscxXMY58L3NILDVQkhy5HNtF5CvFRAnzf1EGYzHJ + QVoG+hasydSrfF3cFFuS54xCtmF+pgH55HLSMdtkM4CFRvofBnBSrOMPSOT/t7CPUpjfhAGcQk2ZGueI + DPZXDrVkfhq/L02PpvJALJpVjIM7hiFLio1FQkw0k0ccvyQWlthonlgc8tKSUV2chYGuKixf0I8TR9bi + hSfvwItP3IFH7t6NM0fX4tTBFTh9YDnuP7Eer1w4jJ8/dxqvPHQQ5/YtxZYFPZhsy0dddhjyY1yRFsjk + y4QnZoEUM2E2RCvRwcbtZZKaIZZwzvdnMIdjRx2TTWUgttcEYmdDGDZWhmBRjhdG4pismODGk10wTMLV + F0PiEalFT4yRiSkEi0tjSWwD0RpF4cmOrQ9Uoo6B2cTk2kUCNRxCskqBvsJiwto0MzZyoG7NdcE2Cqtl + OR4YpuBvCiWpDFBxQLLTKK5LUx1RlqFABcltZZYdapgcm0liu1mMBygYuqpd0FllxnCrF2b3B2N2byCv + 2ReDFBj9FId9FWZ0FRvQyqJcT0FSY2WCyxKQozKTSdQqQ2kaj+ky1ORRRJSRcJNM9ZAAdbWx0Hea0N/t + imFirN2ESSa3OXUs1JVKLCp2wKp8B2wnkTlMIn6WAvUpFt/fTkbim3VWXN9fjOsnyoEH6nHjvkpcO1WA + 6wesuLQyAl+Pe+CzdhU+q7fHt61qXPo/GMBfdWjwVbsOnzXr8DHJ3a9z5HiXCf1niTK8z8H7SyafD3Od + 8SFF7Ie1XniPQvqVeh0eKZfj3hIZHqqVMfk64v1JMz6e74nPF7rj68Ue+G65Oy4KI3i1J74jLopln4lL + S11xcaEZ30wZ8M0MMy6OueHSkAcudrvhi3Zn/LPTiL/0GvGnUSM+mqnHB/P1+N1KV3yyJQCf7YzE37fG + 4uP1kfj96jB8sCwAb8024O0FZny43h9/2ROLb05n4+J9xbj8eBWuPF2H75+owbcPFePT0xn45HAC/rAt + GB+scMeHy9zxuxW++MViL/xkjitemumCZyZccKHfhPtZSE7XqXCKRPp0lRZnqw24q1qHu2tUON+swiMs + Lq9Ne+KP28NxVSwB/WwG8HrOvxnANx6z4Ordsfj8YCB+t9ENL0874e5uGfbXyUjCZVhTIcOWZhn29Tji + jhEnPDipxlOzFHhtjgq/WGTAX9Z64OtdXrh61Bs442MzgC8E4cozUbj8ciwu/jQJF3+ViYt/KcOVr5tx + 7WoHgF5cQxcuf28zgK//jWPkd5m49l4qLr+ehO+eiMeXZ6Pxu62+eG22Hg+2y3G8Woa9xTLsFIZslRxH + 6xxwqlGJ081qnGo14Fiz2IPBjC3VjKtKAwmngInE0MxCzxirNOEQRd39M8Pw+iYr/nyqFt8+1o0bL47i + 8nP9+OR8I97eV4ALSyw40OWLpSQMi8WdqRVyHOp1xFOrXPHB7UH4x4NRuPQc8aIfvnjagM+fVODr55S4 + +LIWV14z48bbHrjxCz/gw2Dc+F0Ibvw+BFc+DMK1D/j8l6HAz0Jw+SV/fPOEN7643wWf323Cp3dq8dlx + NT4/psKXx2wmsFgK+vIZV1y/yws4HwI8GAc8lCzt5fzt6ST8cVcI3uYYfXrMARcG5HhsUIZXphkLK+T4 + 4xYFvjnqDJzzBe4lzvM77vYAzooloN1x6ZgHvtnPcbzLBb9fpcJbM+3xZK+SYleFg+1qbOnSYWmXEfO6 + nTGHMT+PY14shbus2Yhtw564f3M6fvtEPy7+einwxVbgO+LiWmIV8Pf5uPz+GP58oQWPrk/HpjYvkjEN + ekieOixmNFKgViS7IT/FGxlpgUjJCENCVjQSchIQl/MvAzgu7yZy0yTE51mJdBvyUwm+L9+CxMJUCcnF + NlhK0mApSkWqMIELk5BMJBXYjN//JwM48ebx/50BnPAjAzgKadnhsKQHITreEwGBephI3oQBrLCXwe4/ + DOAkNzlaYtVYkO+Gw12RuDCdgkenonGvWOKN+Xo2BV2jWYY8OxZxfjaTKFHL0EoiNoPkZRXrwJ3MkS+t + 9MMv94bhD3fG4Y93p+H9U+l45VAGHuD43j2ZgPFiT9STMDSyPo2kelJ8hWJzVQR2VYXhVGciTjaH47YS + CieKvvUFamyvc8PtQ5E4N5WM3e0+WMAaMTtZjpWsOdty7bG/kDmgSo/7Wj1xoTMQD7T44K4aE06Xq3BP + tQqPNWvwao8Z7wwyD4+74S9T7vhsrofNAF5gM4C/Xq3ENxu1+Ga3Ed8ddsfVM/64em8grj4UhKuPheLK + UxG49lwMrr8Sjxtvcry/m8a4sUqrA4gl4vEH5q6PK3DtLzW4+pdaXP5rA6583IxvP6zHFz+rxV9eKMcb + d6TiJPP72nZHTLKeif2CeljbuiUDWI7OHDv0FIk9/JwoZpWECn3lfMy6N1hBMVhBMk7xOFmrx3SjAXNY + C+c3arGwQY3lzVqsZl3a2KbC9k4l9jIv7u+1x8FeOQ732REOhAKHOgjG0uF2Aw61uWJPuyfWN7ljVpkB + bRSvzRTkHYlO6Inj/yZZGolyxKw4BywhMdtAUXswV417KLSfbPLG86zrL7a44SVh/tYb8UK1Hs9XavF8 + ueYHA/jJUic8xuu5UKrABV7LkxQUz7BGP9egwotNWrzUosUrbRq80s7HHSo826HGs522fZsvdBtxV78r + drTpMLfaAb3MsTUFMhQX/ssArqHobiw1o73SFT11HuhrcEUvz6e30YSuWwYw27r4RwZwFfNnQyG5SqmS + /ERHnqJHV43NAB5oMGCUOWVmtzumej0x3SMMYDdM9/67CTyjg8Kw3Ylw5PsdbkKJgTontPLcWgoc0VOu + J8xoK9SjLoNCwGJHgUkhzzaWjkmOKE1QoDDGATlhjKdgmwGcHqhBspcK8W5KRJkcCSdEGVWINNkQ4axG + tIsBUe4UtF7OJP2uSA72IAn3QWlmGMpzw1CRH4KSHD8SZQ/kZXqiJNeX8CGJ9kJxvjfb0FsygYsY67kk + 17YZuCTsYpmdTCPSUsTyYErEkSTHUeyLO8jFHphiqdQ4xm5SIsVTigvhhmTmzvhYI2KidIiLNkjHCCHO + xd3dXhRot0ChJgS6MP+EQBcz6sQd6+LHiBRhTqVSNFG4loj9LyuYI+r80NDohzqK6/IqVxSXmlBYaDN/ + bxnAuXlOyMlxRG6+AmWlOtRWu6Kh1kNCHR9XlhlRLN6by/dRxKel2SE1RRi/ciQn2hEOvEabARwSKoO0 + P++t2bpEqDB5wwkKteAwOwT8B4IiKBpvIiSCfcXriYoTJrAakRQ9t5bODY8SMyf/NfPXBjv+DztEUqzG + UzAmplKY8RhHQfIDEii+JLAfEihiEgUUSLY4IZXtlZGuhtg3OUfsoZwtloC2Q242RSN5b2mxEhXlatRw + bLe2kIt3uqO70xWdHSYeiS7DTXCcMtZ6O8mp2zXoalGim8dejvH+DgM1jgkjfa6YNeqF+TP9MG/Sm4/F + /sCGfxnArSYM1ruiPd+EGvZnEUVjnj+FoY8Gsa6OCDbI4aWhmCfMwgSmcPcRy3YFUjiHqpEeoUdetBk1 + yV5oSvVDR1YIOvPC0V4QyngKQlOxP+PcC41l7mgpdWfsuqOB46ShmMciN9QXuqOuwF0yfqvzXFGV44zq + XFfU8PXGMm+01fhTN4RiqD2K5xuLkc4YHqMlA7i/JRRdDf5oreG4YR6pr3AmTGiockZLgwe1hi/6OoMw + 0h+BGaOxmDsrGcsWWLFuaT4ObG3A7btaceK2dty5rwd37e/HPQeHcO+hUdx3eBT3HxnD/UdtuO/wGO49 + OIZ7DoxKEI/vPTCOu/eN4tSuIRzf3kcM4NiWARxY34Vdq1qwaUkd1s6vwcrZlVgyoxxzR4ox1Z+Psa50 + jLYlY7A5Gv3Ugd11gUQAehtC0N8Yht6mMPS1hKO7MQQtlT6oLDSjMFPMgHWU9k/Kp7bLz3cnvJBFfZdu + dZH2m47hmP2x6ftjiHEsZsmG3zSA4xKNSEw2S8fIGK20FHSo2M+NOjKMj8OitQjl6wIRfH90tA6xkRok + ROiQHKZHarAe6UF6acWDHGECB+pQRlQFa1Af5oTGMHs0Me7aI+3RHc86aFFjiEJdoJex0pmmRcv/wQAW + s35TqMFSRawwrsSsXUsC/z85TkyEE8RMEDFLJESa8etg28NYmvnrJCEkRMWcIH7kUfG6nAjmwFgl4sVe + emIfPYseuRmuyM9kO2byaHVGZqIWGcybApnUyOKYxhyaFCHnOJfBctMALs1iTeD4baz0JnxQx7Fdyecl + eaKf2C48X2lJM+anJB4T4sVqBUpYM7TMdyYUcNwXiT2Ay8VewK4oZ26sZQ1vpsboqmY8kv+MUnNMVbtj + WaM/VjGPzi+jRs5lPS+wx5xiRyygTl5GTbasSonVtSrsanfB4V4vHOvxwu3dXpLJsb/dAzupWTc1uGBV + lRHLmGPFD+FzhLnFvDuZ7YBZNw1gseztrEK1tB/qnDJyE57PmgZ3rK534/8wYQH19+wyNSbJD8ZKNRgi + 2m8ZwKzljYUaNBYYCJOEZsZ1B6+xrdQHTQXihg4XtJZ6Y6QlBjM6kzDUFIOO8iC0lwZIJnBnuS+6q7wx + UO+HsdZgjHYEMj580SuWca9xRytrcQVzZBlzZEOxDmMt/ljYF4WlPVFY0R2NdT2xODArC6cWluLs/FIc + Gc/AJrHtSWcUjkxYcf/Kavz06AR+cWouPji7AB/dswQfnV+K3/D43pl5eOf0NH5KvHVqNt48PQuvnhzH + 80eG8eTeXjy6pwsP7mzBPVvqcffmGpzZXIU7N5bhxNpi3L46H0dX5uLIykwcXpGBQ8uJFelEKg6sSMGB + lRbsX5EkYe8tA3huKDbNCsLSfg9MM/eOk1eNiJVjKgwYJlcfZL3srXBDJ/NZR5kL24g8hG3bksuYyVKj + NVuJthy1NGNukP00WU++w76aXeOCaX5+DvPfQraXWOJ0CR8LM38Jv3sZn4v9Lze1uGMX9eiePl/c1uuD + 3X1+2NjphSXkX7M4RkaKWD9ylWi3Okh7ATclytCRTH6b7IA+AY7nYdayiVQlZmSQ12aopSWgB8mT+qwK + DPEcx/P1HKsGTBcYpf0TZ2Xr+F72WzqvkzlsSCBNieFMLcaE+UuM3pwBfMsQHs8yShgjRjL0kmFsgxLj + zIeT/D8zs1UcyxqOY/GYr2c4oj/VHl0W8vIUnjd5cWu6PRr4vI7XUUs08rUW8omWLBnaxWo+YvuWHDnG + cu0wkxp9VoFC2jNyKpfHHILaaA6PC8lXlhWpsI5tdMv8XVekps7RYh15ygY+3llpxBFy8jOdfrivNwD3 + 9fjhwW4/PNTtg0d6fAk/PNIbyNcCcKrFD3uq3LCyQC8tYz1OHtCbo0cj20T88JyXzNqaSL7GvCXMjyjm + XjHLNizKjNBoF4REiSWXjZIB7OOlhJenI/x8VT8YwILXpcQbkZ3ijMI0M0qZ42wGsBY15B817INqiwaV + FgNKk0zIitVLS07GsQbEhGsRTY0XzedR0eQBcXryLzEL2A/WLJsJnGb1RnKqB+IsLuRMJmkpWD+x3Ku/ + vQSxDLR/oJO0H7A4BgT8O4LF8pw3EeQvTGAxG1iJyDAta40aaeSpRVnkBEXkAcyVHTWeNw3gAKwbDMLO + YX/sIs/f2eYszZI9SO5/uMmIfeRMO6i7NlEnrMu3sxnA+TKsL1ZgV50Jh6VloH1wrNdbumFme7szVrcY + sbDOgBk1OsncFasKddULA1j/IwPYAd2V1Hj/YQDPoKabXWtbAnpZgwlrW5yZe1yxjdhJznYb/8duYluz + CZv5fVt5jtuanKV9fnc0iRnMbtjawM9U6rCR2E4uJmYB76de3tPKHN5gxNY6FbbUOfI7FNjXo8ehIW8c + HAzFlvZgLGQNGaS+ayUP7kuQcdyqGPOuPI8AbOoKxvpm6u4y5m3q1HGO9ynqsOkSGRZSl61qM2DbcAD2 + zE7C1olkzGAObrLqUSIMxXBhANvZDGAeo6NtBnBorExaBjqC/yvOQl6e7oRs5oD8DBWK0lgf0xxRQdSk + K1AvYHVEPeOynvmkjqjNsEddpgNa8jXoLjOzLd2klSUHmLP6C3UYEDdxMMYnUhWYyc/P53cvYv5YkqfD + skID1pY7Y02lC1Yzty0v1Ut7uy5i7M1hLZudw/ilFp+dyzqZJ8xgJ8wrUEqYy5w2J8dJqn9z81WYX6DD + Auq7RcXsO/7fGcwTfXEyDCXKMSdTgeXUp2uKtNhYoMaOQiUOl6hwokyJM6y552oUOFPviHPNKtxDTn4P + deaJNhfcJm4AYJ2cy5o6xO9oZfvUkf+XsA2LqScK47TIj9MhN0GHrHgxs498IUGLVGHokn+kpogtddyo + Bdyk/X6j+TmBWGo4MeM3JUn3gwGckkBeJLanINLF/qX8u/Umf7GKFWOEiU+Nkkreki7MG/ZfOpEV54hs + vj83mbwtlXzEKviPK3Kt7shJd0M6taElgRqVnFEygH2p/agBpdm/twxgcZQg5/ObkB7zNV87ePg4/ABh + AgsD2N3Dgd/jAP8AFQKDVVIO8PWV/98awNHkbfHMPSnkqCmJJmnbjzi2YXIM2ypex2s1IIevFyRTW7Jd + inn9YhnoxhQNOqxqDEh1ScF+tZNmxi/i+F+T54DdlVqc6PDB3SPhODkQiu2MD7G0eAfHcw3bqZqaspF1 + qjPbhE5yvS7WHLGlwZDVnvVBiUXM/SvJ1VaImebpMqzimN5eZML2Ug+sLHLBZJ5R2su3PsUetRYHVKc4 + oCrJATX83gbqxR62/XAy657FiFHy0H7y4e4UNfrIEcdZTxcXOLPGiBsJjKwnWtzOfHZPrRaPN+nwQrsJ + r/a44PUBd7wy6I5n+13wTIcRTzRr8UCTBnc3q3GiXYUDHRy7dVpM8rpa2C7ZYsUhd0cEUc95mmXSHsBi + CWgx89dHmL/ObH/Cw4V952pHjce+lExgB+ZxRwQEqqWZv2LpZz9qQx9fpx8MYFf2mzCAhS68BWEAC9P3 + x7OA/08zgMMD5YilDrfEOCCD3CKfvL+cOaBGLL2ca0YHa0B3iS/ai/3QlOeFsjQTMsRvGTcN4DD/WwYw + a8lNBIujN+uPB+uRmx383Dj2PBXw43n7EwGB9tQHIr4UHFsqJMU5MZ6cqLOYz9gXheQ3ZZIBTD5LTdqS + QW7LfmuMU6I+0hHVPN9KgWh7lDM+S2OdUBLjhGL+vfjm41J+d1mkAhXRTmhJcyen8kQD48tmACuRFWJv + 2zfYz7b8s5gBLAzgSAExI5pxIExuC/WY2JohMUIjzeYVxm4sY0iCeCxmygvjN1QYxBrE3Xz9h9m//FxK + FGt4jFGaTZzOWv+fBnBmvFaCWA5aHK3UWtZoMcte7Bduj1TGRjpzf3aSnO3jgALm+wLGWAFjLT+d38Ex + npZo/wMy2Idi+edisUR0vjNKqFuLcswoynaWjsIAzrbqpH2B/7cBTO31I0grHLCfhAEsZgMnMZelxjtK + +zbnWLTIpXZsLA/EgpnFOLB9GLKUm8ZvsjB/Y6I5sBJQkJ6G+pJCTPS0Yvu6Objr+CY88/Bh/OS503j2 + wYO4Y+8SbF02gLVzWrFuugX71g7j4RNr8caFQ3j36RN4+b69ePDwauxZPoQlw1UYb0xHb2kUWnL8GfBm + lHNgiD346kPs0BJkjyE29MJssTRAKLZWhWBzuT92U+jvb4vFluowLMz0lAzgCZKoyRQ3jCS5YDDehJ5Y + A3rjSObzw7GwNJakl0IqUofGcB2FNYMiVIcOojdUi2EK3Rns5PksLktZTNaR5G3Lc8ee6mCsLfLBpMWE + Nor30kAFiphUSxJZkJicitPsUJphM2yrSYCbS9TorjFjoMkNXXVGdJLYDFNEzh4IwGyKhMl2bwxSQAxQ + TPaz+HaXGCgCeU4k3vUs6A3ZLPKZdigj8S5kMs1lMc0nURBGcA3Jc3OFFq3VFLp1erSSBHWzYA52uWKc + JGmq1QULmkxYTOK1iAJ3Gcn4xhwH7GNRv4OF/NEqPX47HYPvtuXhxu1VuH62FniiDXisETfOVwInCnB9 + SxKuzgvCd/1mfMnC/F2bFt93GXGtzwVXe51xqdOAr8XM33abAfwlj5+3qvFpoxZ/qVLgo3x7/CJdjnc5 + wN9LVuBXFB2/KXTDBxXe+AVF+OvNnniUyfhkkQz7s2U4XizDA412TMQG/GqmBz6e9sRn8z3w9SIvfLvU + G98tF0cbLi71wHeLXPD1XCO+nNThqwkTLo6748qYDy71e+KLbmd82mvEJ8Mm/HXKjL8uNOOT1a74dIs3 + Lu4Lx5UjiTwm4/MdCfjH1hh8vC4MP59jxBszVfg53/ubdf74ZC//diwdn53NxRf3FOGzcwX428lM/Glv + In67KRw/X+CGn0xq8dOZerw71w1vznbD8+NmPMH/+dAASQwLydlWA06ycJxg35+sMeFktQkn2G/Hy51w + Z40T7mpW4pkxV/x6QxiunM8Cns0DXisE3i4FflYGvML+eTQFl8/F4h/7AvHBWlc8Pe6EE00ybCuVYRnF + 1mKS8ZUVMpJhOfZ1OOBUnwL3D9rj6TFH/HS2Fn9c5YEvd/jg6lFf4LQ3rp33txnAz0bh8mvxuPQzCy5+ + lIOL/6jGlYttuHajG0A/rqMbl7+3LQF97ZMiXPsoE1d+loJLryTim8fi8MXZGPx2mx9em9Lh/jYZDvEc + tpIMb+D5bCmUYTdJ8cFyexyudMAxFtwjjWIGsDO2VZuxvspE0mnGmgoXrCU2kKzupOA+SjHx0FQEfrol + Cx/fWYPvHue5vDqGG68O4dsnu/C709V4dVsOzk2GY22pI5by+jdW2eFovxOeWeOG35wIxeePxOLKizG4 + +mogvn7OhM+fUOCLxxX4+kklLj2rxZWXTbj2ljuuv+eLa78KwLUPg/D9B4H4/n0+fjcQeCcYV18JwLdP + eeGrB13w+b0mfHZGh89PavHFcQ2+OMaxflSFr49rcekOM66e8QDu5ufORwD3xQH3JOC7O+PwyZ5Q/Gqt + J16bo8YLM+3xwqQMby+W4aMNCvxllwbfHXPl59gn9xP3efNznpIBfO2OfxnAn+90xu9XKfHWTDs81euI + u1uccFgYW11arOw2YVGvC+b1umNBjwcWU7gtp/DaOeKNh7ZY8fsnB3H5w+XAV9uB77cBl9YRK4F/zMPl + 90fw2/M1OL80DsvLDeiOtUdHlBJtzJNNsSZUJ7qiNNkbuSn+yEwLQUpGFBKzEhCfnYi4nBTCgthcC2KI + 2Lw0xBCx+RmIy7feRBoSClIRX5BiM4CLUm4awCmwlKbCwmMqX0stSkYKYSlMRFJ+IhLykn7ALfP3x4av + eP3Wa0mERSwjLUxg8V5hAovP/cgAtmTG3lwCOhpp2RGSARwV50HSrIPJKJeWgHZy+JEBLJaA1slgIcHp + oWBeVeqLs4NJeH5RNh6ZjMIdXT5Yk6tBXxDzsJaCjp+LIWJlciTZMT/z+5pIxkYp9jYy756fcMXr60Px + iwMJ+Cnx9I5o3L0qGvtnR2FBgy8JrBIl/qxtrEVTmd7YVBWBA43RONkahacmM/D0ZAoeHgzH3d1+uGso + EA/OjcPzG/Px+q5K3LcwSVqicHO1GrsZXzuL7HCw1B6nmWseaPfCY13CAPamuDLhjlIl7qpU4rEmLV7p + MuOdARf8etQNH89yx6fTHvh8rglfzlfiqyUO+HqlAt+s1+DrHXp8t4/j+6QXrp3zYd7ww7UHA3D1UcbH + k6G49lwUrr0Ug+tvxOHa24m4/q4F139lxY3f5AC/K8L1P1Xg6p+rcPnjWlz+Ux2++XU1vvp5Df72cgXe + vcuKc8u9saXbCdPM/31iPzGS/95Me4oEMZPAAd0UBJ2FCnQVK9BT6iQt69dN9BY7ob/ECUMUjyMVasys + Ydvx+ufVa9mmqn8ZwJ0a7OzR4MCgCkeGVTg+6oST40rcOaEhdLhjmBjU49SAM050u5NDiGX+nDGnRIuu + VDt0JNujO1GJ/ngNBkmWRqIcMCvWEYsTHbCRAuZ2it0HatzxDAXPy23eeLnZDS/Vm/B8jZj5q8VzFRo8 + T/H6dJHCNgOY13GhxBEPEQ+XKfBEjRpPVCt5VOCpaic8XeuIZxuUeLZRiacaFSzFDni0yQEXmpTMrzqc + 7jFjW4tW2ue776YBXCJMYGEAs52qC0mui41opaDvrHZFT70wf83oaRDcQ02eZi8ZwEUZ5BPkEMVs74os + GeoK7NHE9v2xAdzNcxto0GOk2YwZnW6SATzVzWO3WA7ahinJBDZhspNiv1NJKDDe7oDxDgUmOtQYblKh + q1zc5U/h2OCK4XoPyQRuyFahKtUR5RRzlSkKlCc7/ocBLEdmsD2sgU5IozhK8lQi1lWFSKMC4SYB1U0o + Ee7M110NiPQwItbbGXEB7kgJ80ZGrC/y0wLJT/1QlMnH6Z7S3diZqS7Iz/RAQZYnCnMJip+ifG8UFXii + IM8VOdkGZFhJ3okcitXcLLM0CziFIjNeLAVNURPLMSBmv0WLZaBJ6BNJ8FMtZuLfDeB4ioM4iozIcC2C + xB3czAseFGkC7hRwYh8f8dhf3LEbStEUI4xmIlGYNErkU6iVUwSL2b+NDQFobglEY7Mfqms9UMp2/C8D + OFdJKJCTR15apEZpiR6VZWYJ5SVGXievKdMJmekUFhzfFgvzXDJzWCIFQoI94Yg41oHwSLlkAIeECyPX + AcHhdhKCQm0ICKbIDJHDP1TA7gcEhDn8gCB+NoqC538ZwJIJHMF+FLN/GVORUY7SbOMIipRoCpAEisXE + VIovi80AjmV7CIglqWPibYgVRpBkAgsDWHHTAFZB7P+bk0MBk6NAtjCAyXmFASxukBAGcB25cke7G3r7 + PNHf544+1s8B8tn+PvJw8tx+YnDAFUN8bZD8caDbgP4uaod2HXra9OjrMGGI435y2BNzZ/hgzgxPzBwx + YZx5xGYAGzDUZjOAW8USfswdeUGOsPooEO9qL5m/vhoKeNYZk5r1hrVG3NEtfhASYyQ6mGIsjP0UZUSN + xRut1kB0i9m/1C1tBcFoKghAQ6Ev6oq9CGH4ukqoLXBBTb6AM6rzXFBNcViV64zKbPY/UcXn1QVuaCjl + d1b5SWboUHs0RrvjMCaBmqgzCv2tIf9mADeQm9WTp0kGcKM7Olt90NPhz/YJxYzRaMybnYxVS7KxbW0p + Tuxrx9kjfbjvxAgeOj0DT5ydiSdOz8LjpwRsj29BPH/sjkk8enISF3h87A6+dudsPp7Cg8dm4J7DYxLO + HRzHnbcN4fadfTi4rQv7N3Vi99o27Fjdhq2r2rB5RTPWLa7BuoWVWLegBGvm5WHZlBULJ5IxbyQZc4cT + MT2SiDmjSZg9nIDRznB0su7WljgjO02BdIsj49yI/Hw35Bd6ITvXA9YMVyQm6yWjV4xZsR9uJGNdPP53 + A5j5J0K8pkV8ohFJyYz9JBOiqT8jojXS7OBw6sTwaC3CY3QIj7UhKs7AvKBHQpQGyaz7qeEGpIVQuAdq + YfVTI9Nfizx/6kuiKkiLulAlGkKpBYPlaIlgfWQO6qVIH0gR++yp0ZOmQRdzVGuaDg0U7TVpBpQRYg9m + sQewNAM42QnJzLMWxkpKsgoWxlViHOOL1xUZ5oiwEAcEBtn2/BUI4JgNDBRQIEgsMxgsZp8pESxWMwgT + +1EqEM2Yjotnfk7mNVj0yJFm/7ojL5NtaXWBNUGD9Hgl0slxxFHMprGIJcjC5YhjfpFmAPM8SjMNqCkU + Y80LTRybtWXeqOTYFgZwfoaWuZc5IVrOvGpDXCw/yxyRman7lwFc7oXiSk+UVbqjQty0wDHbQt7TVWtC + PzXyYKUBMyqdMb/OC4trvTCn1IipfBXmkGMsZJ1eWq3DihoNVlSrsKFehwM9Xjg54I87+32pp3zID7xx + oM0du8TMsnozVlfqsaJcj2VleswvtJnAwvwVsxxnFygxJZa9LVRhqliNKWECl/L7mROW1zpjMc9lXrkW + k+Qy4+Qxo6VqDJZp0M5zaSIa+bl65vT6fCPqBPKMaCxyQ1upF1pKfdAgbu5gjNcXeqK3LhxDzbGs2+H8 + WyDfE4h2oqPcH11sy/76QIy2hmK0g/HeHIC+BpsB3MKaUJElDGAHfrcOY8IU7wjDko4IrGQeWNcVg30T + VhybysWhUSu2tUVjTa0/trRG4Oh4Bh5cWYs3Do7hvePT+NWp+fjwriX43fnl+OieZfjF2QV4j/gFX/vl + 3Uvxy/NL8P69C/HOmfl4/eRsvHx8As8eHsbj+/rw2N5uPLKnHQ/ubsb9Oxpw77Ya3LWpAmc2FOPOtQU4 + vjoHR1dm4MiKdCINh1am4OAKCw4sT8K+pfHYtTAKW6dDsXFmIJYPMCe3mTFZr8c4ecxEDblLrRsm6j0x + VO0prcDWedMAbi+03Wzfmq35wQDuZJsPlHKc1LljJjGj3ISJYnIbts9M1tqpAjVmiRnfUv86YV6xluNG + LE/rhq2d3tjR64MdPT7Y2e+HTd0+5KFumM2+nijXYYif78hQoMViJxnA7UlydAp+mURwPA+wpo2nKTGR + KYwlDYYz1BjK5LhgPRvJ1WKiQI+pQiO5sgnT+WIGsA4TGTppBq9k/hKDaSoMZWgwwr+N5rAWZfNIPjP2 + A4wYJ0YYb0NWHQb4/2xwkgzn8SwVJnJ4fdQ3M3NUmEGuMJJGHcRzFT/mtyXZlq9uSpGjlo+r44h4GerJ + JZqEuU1e2WKVoTOTfJ68cjxHjll5dowxBeYxPqaFAZztKO0BLEzg+azRS8lT1pTZVv9ax/Zcna/EavIY + gfWMz+1lOhyqM+N0hxfO9/rj/l4/XBgIxGP9gXhqKJgIwbMjkXhiKALnu0JxuM4HG0rMWMQ2msHrH8g1 + oIU8rpL5Md+iYS5kzpXyHvN4pJ68w8z87IKwGFfJBBb7AAcE6OHr7XTTAFZKM+zCwwWfM8DC3J1FrleQ + ambssMZaTahJ16M2TYta/o/qVB05rYna2Rm5CeSEYhUYsdQ0c2dYKGtGGHmruGlIGDGp7sjI8EU6+ak1 + yxepVi8kkkNGJ5oQEatHEN8rDGBfcfMgIZZ89fNXwIc8wU88vgl/YQwTPzaABUICVczral4nzz1aB2uy + CSU55JMlnmiu8KQm8MJQkzfm9QRiDdty+3AAdpIX7RT75LY543C7WH7bBYcaTdjD/LilVIENBQ5YV2iP + NflyrKeu2cE4O8i8eHuPN450e/JzrtjcYsIKcVNulQaj1D/d1GvtZSq08zvayb/aqpRorXBER6VC2iam + t0qNPmKI+Vds8TMh9Bw11Dzq2FsG8OZWV+zgudzW6Yp9XR7Y3+2BHXx9a4MBO1vM2NHszCPf0+zC13kO + dUasLVdhLf//pmojtje4YHeLJ3aJZaLrjdhcq8KmGkdsbnDEbV067OnzwNYOX6xpDGCMuUixKfYwbY2T + M460mC5zw5L6AKxuC+Y5+WBWkVa6abmXunU4m3qfOmxmmb2kQVcw9jeOxWLDuAUTzJnC7ChjHU6LsGO9 + J88WBmSEHFFR5P2sgSHRBHNAGOMplvkghdooM90JOTzmJtuhgChl3qhJJweQ4CCZv7Xp9qz1coJ/s9qj + kTHTXkyuSs42WOWGEea7YfL+YeaP0QzmFn52Ms0Rc61KLMjSYjFfX1ZgYPyZsUrMnGe+Wypm/4obm3ic + lWOPySw5c5JcOk6RS0/nKzCHfHpOriPmsH5MZzoypvlaDvNhngYLxLLSRaIm2gzgXl5XbwzbhjliUa6K + 8c36ylywnRplHzX+EWrP0+UK3E0dfG+DE+5v1eDBbhec7/HEMfbvjhoDlhWLm0eo+Zk/W1OcUEtNXhbj + hPIEHcqSjShOorbh2M4lciwmxqcR1ptLO6el2gzgDKsrkhKoQ9juAtHUHUnx4kY48otbuGkAi5tEMpKp + AcUepkQWH2dRm2ZSb6THsH/YZ2IpaGEGp5GXiL3Fc8ix8siBCtLIRzLIfwSoMwUfsv6bASyDr1jy2ZMa + 8KYJ7CbAx66Ei4cMztSJZh7FY/Gam5cwg+1/gIePI19zgJs7nwszzk/BPKGEP48+4rv5uf80gMPJ1+LE + alU8jwxqYHFOKYliJrBa2gYkPcmATLZdnsUZhalEkh555GvFsQpU89rEMuZd5MuDqQ4YS5VjZooMC5jv + V+XKsa3MCUcZn+eGQ3DnYDDjzAdLqD37WCcaOabrE+3RxprTTc7SnWNEB3Vap4Vjg+N2jHVgdqEaS8qN + WEqutIiabUWGIzYwf68vdMEScsBx5vEOMe4Zk9XJDqgkpFXD2PbVRFssxwb7doT9PUwu2p9CTmwR/FiF + yUyOcX7P+lJnbKowYAfz0JEKccOBGk+0GPBipwmv9Lri1X43vEAt+ESXCY816/FQnQp31SpxmmPyWIsT + 9rVrsalBj0Wl1H9WajPy+gx/FRJ8mc/FXr+irV3l8OPR21kGLzP7QRjDJjlczIQwbd3s4Ol9c+lu9ldA + oIZHYf4q4e1jM4BFf0oGsPhtwMMOHu7se/alMICFTjSbCPG9fOzFfhY3kPsQ0m8LfI83jwEcA2IP7PhI + R+mGy2xy/2LW+SrW+Hpyg3ZqxJ5icscyP3SVMj8VeKM83YwM6vXkSDViQqjP/cUewE4Eef9NAzjQm2OM + NVHMavbitfq7s/548LmAJ2uUL8dasD3HuRIJHFcJwmSMd+LYcmJMKhkbaskArs02oTHbmZzBiAbWY2EA + N0Qp2KZEtBOq+bkqfq6KfVrBWKxk/IljlXjMmK3i+2vEVqzpbuRUXmhMc0Ulx3UB/29mqD0sATIkCPOX + kGb/BrI9/IlA5lxqm7gIJ+Zg8gDWZrHncVy4WIlJyevmkYgOprah/hFmsDB/E8K0kgEszN//ZQBnJphg + JS+wUgcKE1jsAZwZp2XOsJm/ucxP2Yy1VGqtNGrJVF5rCnNHCsduGuMjk/wqizo0L11JqJFLHpeTqmQO + oj4VJvBNZFLz5JHf3TKAS/NdqZFceBQ3y7pIBnAW2zctSYFk8kmx/+//kwEskMr4SY52ZJuwPombXBJV + yGSb5wgDuCII8yeLsH/bEGTWhESkCPM3OprEJpIdmoKmkhLM6u3BrtWL8ehd+/HGkyfxJvHi/ftw197F + 2DinFZPNGeiriMVwTSIW9BVg1+Iu3LVrLp47uxmvnt+D1+7bgwtH1+LczgU4tGoYW+c0YcVgEWY1xKMr + 2w21TNaV7MhaDuyeMBafVDesLvTH2kJvbCr1xf6WSBzpSsSO2kjMt7pjPJ4EOd0dk6muGLe4MjGwICaZ + MURyNacwnMQ9CkPp3miLMzF5mNGd6I6hFB+MWYh4d4yRGI4FO2GcA2EeO2x1igHb8z1xoD4Mm8r8Mc1g + 6WKwlAfboSjcHiUJdigmGShKk5EU2mbV1JIgtVWQ3DSS/LdThLZq0d+mlZZonj3ojdn93pjZIfYHNmCA + xGiAQqGXRLiLYqOFhbKZoqQpUykV+1KS7xyx7ESIbR8JYQIXixnHWSyEJOplFCaVpVq0kuT08zvHOjwx + TSxt88AyEqFFJGCLScjXspDvyrLHMRb2h/k/P5wXh+92FwFn6nHjwRbg+S7ceL4NeKQeOFsG7MsGVsbg + yqgXvm3X42KHAZe7nXGt3x1X+9xwqcuMrzu0Er5s0+DzVhU+bVLib3VK/JkE77d59vg1yf6vKSR+SyL+ + u2I3/LrMCz+v9MLrJOoXKM5OkqBtZRFZwbbblCPD4QoHPNBuxMtDnvj1pB/+Ou2LLxYE4OtFAfhmkS++ + mu9JeODrBe74cq4Zn03p8emkDp+PG/HdDE9cnfTHpRFvfDFgxqeDRvx9gphrwj+Xu+CbbX74fm8Irh+N + A06m4vqRNHy314Ivdsbhr+vD8O4cA14ddcAbMzV4d5EbPlwfgg+3ROGj3Qn47R4LPtydjA+2xOK91aF4 + Z6EPXhnT4tleRzxHvDCowVMDOjzSo8M9nTqcYl+fbNbh9iYDjjYYcbjBjCP1bhQorthfocPeEgUOso2O + 1zjg4V4T3l8diUtnC4CnK4CXK4E3q4B3iFcKceNCCr47HYO/7vbHT5cY8WCvAw5Wy7AuT4bFFFsLc2VY + XsL+rZRhe50MB5vscGerHA92yfHyGNt+mTM+2+aFy0e9cf2UN66e98eVC0G4/GwUvn89AZffTcPl3xfg + 8hf1uHKlC9fQD2AAN2504+rFJlz7ohLXPynGtQ+zcOWdVFx6KRlfX0jAZ2fj8OE2f7zCPri7xQ67yuQS + IVjGsbaK57WBcbAt3x67KBr2l2lwsMYZ+3j9O6qFaeWKDTVu2FDtgY3EFhLWPfUeOEHy/Oh0NH62NQ9/ + OVmDS491Aa+PAG8M4drLvfj7Q/V4+0AuHlgYTiKvxAq2weZKO9zep8LTq1zw4clQfP14Aq6+HIcbb4Ti + 0otu+PJJFT6/oMAXDzngm0edcPEpLS6/aMaVNz1w+R1vXPmlPy6/74dLP/PF5bd9ceOtANx4lePoaU98 + +4gzvrrPhC/vNuKr0wZ8dQfH2s2ZwJ8fUeKb2/X4/g4XXD/ji+vngnDjrnBcOxOJiyci8PnBYHy8wwe/ + XGXA24sU+OlCO3yw2h5/2q7GP/ZxvJ5ww427vYH7ifvELGJP4JwHrp3ywPfHOcYPuOKzXc74wxo13p7t + gOcGnXC+wwm3dyixu0eLtT0mLO9zxSKKtsW9HlhCIbSc5GX3kBce2ZSOPzwxiCu/EQbwNuD7rcR64OJK + 4O9zcOndQfzqbDlOTYdhOkOFWhLNGk8H1AWo0BiuR32sG8W9N8oS/FGUFIzs1AhYrLGIz0xEXHYyYnOT + EUNE5VoQlZeGyPw0RBVkIDY/8yasSCgQJrBY/pkoSkZyMVGUhJRSCywlFsn8TS2yIK2YEEawmAWclygt + NS0gzNykfH7mpsEbnxvP1+Ol91j4uRRhIAszmM+TchOQnJskQXqcTWTG8ZxjkGyNQlpmJNKzo5CcFoSo + GA8KZh2czfYwaOVQO8mgsCPkMpgcSaDUzLUkayMkydvrwvHwjEy8OD8HDw7HYF+9F2ZRgFSQaKWqZAjn + 5wJkMvjL5AgmEu3lKDDK0EwyNI9E+WinC57iWH1tYxKe2RCHs4tCsXPEH4saPNFu0aCQNS2fBK8xUI15 + Gd7YXReBk62RuLc7Aq/Nt+KnyzLx1nIrfrLKircZE+8eKMdvz7bij/f14qeHK/HIyiScYc67Y9AdR5o1 + ON4gSKsG91EEP9zqhfsa3XG22oSTJSS9ZUpcoEB9kfn1bZLdXw654g/jbvj7LHf8c7YJn891wheL7PHF + Mgd8KZaB3qJhfdDjylFXXLuT4/KcF67d6yPteX31QiCuPBGCy0+H4sqLEfj+1WhcfSMOV99Jxo33rbjx + QS5u/JY54w9luPqnSlz5QxW++1UFvv15NT59tRK/PJ+N82v8sbNfhQVlMgxQSPdb5einqOyhoOzKJfKc + 0JbniLZ8B3QUOvCxHdoJaak5Csdeor9IgTEK/RmVKkyT1M+jsF8qDOAWCs1OFXb0qnFoVIfjk3qcmW3A + vQtdcP9idzywxBMPL/LBQ/O8cd8MD5yhADjM+NlaK/ZHUmIwmVwj0Y7Cgo/jtRiIVGEw3AEzSZQWJzhg + c5oT7ig145EGLzzf5oPX2n3wqjCA6wx4vop1gULjWda2Z9juT/EcH+e5XiAeKrTDA0VEMR+XKfBwuQMe + qbDHo+VEhR0eYz14stYRjxJiRYwHmOcf4Gt3N6lwkvV3C/t4XrUjBsvtUF8gQ7kwgQvJQQqcUJmvQU2B + npzMhNYKEzrFD+A8ny4Kl/ZaNep+ZAAXsN4KE7iUubo63w4NJU7oqNLxM3p01mrRWa1Gb61YBtqIsTZn + THa5EWLvX1dMs/ZL4Bia6jETRszq0RAqzOx2IlR8rOd7Kd5aTBhrdsFkmxcmKAwHqt3QkqeVljOrJuGt + tZLYk9iWk+yWJjihMIZiOoxkN5hiO1CJFD8KCQ8lolyVCDcqECKBQlrApESoCwWYmx6RnibE+bkhMcSL + JNuf5JtI9kVGEgV4ogvS4o2S0BWzIDJTzcimaMjNckNejgfyczwJsU+UGZliCZ00jYSsDDED2IQMqwGp + Fi0SGffx8YRkAlMkUKxER1MUxFFM8HtTKJ6FARwXa4DYPzSe/DIh3oyYKANCgpQUczbh5iru4qWQc6GQ + Eyawr7ccIYH8zigtkuJ1SEpQwSLuKCehLytxlwzgpsZANLcGoanFH7X1niircEZBoQ557PO8fDXybhnA + jJncXCc+d0J+vgqF+VoJBXkaXosTr8uB1yJHUiJFEnllIo9J5K9xHNNiVm0sBYNYjjlUMn2F+UuwPwT8 + g2Two5jyJRcX8BcmcAhfvwmfIPkP8Cc3DhfGWbRKQoQ48nkERZrYYzQinIhQIIqiKEbMyKHgixEGdBLF + I8eDQDxFYyzFjHg9Kt6BeZuCjoIpJp7iloIoiX9LEvuaplBYUThlZoh9k8VS2La2yMtyREGOE4ryVCgt + ogCu0KKR47mryx39A54YYs4cHHDB8JAb4YyRYWoFYnTEE2NDHhgZ5PN+Zwz1OqO3g59jbe1pNWOAOX2c + n58aE+YvNcaAHsMc/8NdGgx16DHE9wyS67XkGFAWp0IWRafFyw6R7PMAA9tOyzHAGiP2jjLpORY4DrzE + MtA+bLMARyRQe2REaFGd4oXWjEB05YQy34WirTAYjQUBqCvwQU2RN6rE8s4FboSrZPpW5polSMZvjlgC + ma/l8LF4Lc+Mar6vTvrx1wdd9cE/GMATffGY6I3HSFcUNcotA9i2BHQT47WpxhXN5OotjRTcLV7oYq7r + 7w7E+HAE5k4lYtWSLGxbV4pj+1pw5kg37rtjGA+fHcfjZ2fg8VMTePTOcWIMj50a/wHi+aMnR3HhxCge + EceTfH7HGB4+OYEHj4/h/LERCXcRZw4P4vSBAdxxoB8n9/Xh2G29OLy7G0d29+DQzi7s396Gg9tbcXQn + saMZB7fU4rZ15di0JA/rF2Zj3eJsrF+cQ2RjyVQKJgej0d3sjwKOlbRke2Rl6hlLHigq8UU+NWVWridS + rS6IFTcvMMbDIx0RyvEvblgQS5zZTGFxIwOPRHS0mrGuZ0yZEE/E8HFEFMc8ER6llszgiBgBLSKlZaXF + fpJaxEeokByhQXq4AdZQ5h1ygHRfJTJ9Gfs+Tij2YV7k8yp/R1T7OaDGT44GxlVblCM6WZd6GCu9Fid0 + p6nRxbzVlmFAI3OVMIBLU3QoStUhO0ULa7JKmv2blOwoIVk8TlQglrUsivo1IpzXFyp+lGLc+tvZDAdh + MhD+hJhZEsj8FRCkQGCwEoEhCgSFKSQTXLRFfLyaeY//h3k1M9UZWUR2ihlpsRqkxqiQKu4yJ1JixBKN + CtuP4BF2SI+xk344LWKercx3Rr3YB7jKH/UVfqgoZn9w3Oaka5AUZ8fcyLgnYpkDhAGcxmsWyz/n5JpQ + KAzgCi+UVHmhrModVVWuqK9yRlsttX2tCb011NgV1PRlRszm3+ZVuGF2kQFzmD8XCBOvyoCVfN8a1v41 + dTpsazbj9n5/nBsJxrnhAJwb8MWpbk8cIqe6rdEZOxpdsbmB+qXeFauqzFhUosc8avDpfCXm8DinQIPZ + wiwsZD0sIoQJLJbNrDJiYaUeC8q1mC5VY6LIEWOlThgmL+srVaKFn2ngZxsKdKhlHa8tMKEmz4gq5pFa + tk9TsScaS7ykmf22uGZ8lvqhtTyIrweiocgfzUUBaOHj1nJ/dFYFoKeOcd4chpG2UAw2B0kGcGelG1rL + nJlHtKjP57gpdcYo9ficliAsag3FyvYIbOiKwW3Dqdg7lIKtHTFYyX5ZTWxpjsDR0Qw8sLQGL+3sxzuH + ZuL9E3Px4dml+N09wgBejl8L45f4zT0r8eG9q/DR/avw4f0r8cG9K/He3cvwzpkFeP3kNF6+fRIvH5+B + F46N4rkjg3j2cB+eOtSFx/e14cJtjbh/ezXObirGHWvziBwJt6/OwJGVaTi0Ihn7liRgx7xIbJwMwopB + TyzscsZ0sxEzyXkm2OeTdWbMavDAzEZvjNSIPZRN6CgxS3sri5VI2sQ+mrm3DGAVOllL+4qZy8uNGOFY + GSnUYoi1Y0SAdWQ02xEj2dQFxKiYGUeeuKCSY6fBBevbPLC5S9zQ6I1twgDu8cVKvjaXY3Am+fdoKXlY + hgJtFns0J8nRliT293VAF+tYd7wcA4kOGE1TSXsCj2WxlmSqpZm/AiNiH16e2xTPex77ak6h2O9Qw/cL + 45f8NEWFgRQ1Bvh8gHVwKIPnnc3ryDMQZp47wTgZzeE1ZRv4dx36+d5e1k0JqQp+VoFhq4LXqMRkrhYz + c8TewHwuTC7W3E7GXDv5QmuSDA3kDML8reJrNfF8nmKH5nQHQo4WcspOos8qw4wsOabJ1RcWOWExY0Es + pTtX/OCfaY8pqz3m8PEicpeVpUasLTNhVZEOq9jWK9nWq3MU2MB42l6ixn7y0hNNzjjb7oH7un3w+HAI + nhkNx3OjYXiGj18Yi8aLMxLwSH8UTnCMb6twx1LGzqQwgNkOrZk6VKXrUMhcmME8dcsAjo02Mhe7IiLW + HWHUuz8YwIE6+Igf5L3Ej9piiVXm8XDm+Gg9LMztWclmFKa6oCrbA3XZbmjINqOB3LGeXLHOakJVmgvK + LK7II+9MEf8jVIPgIPE9DggJEbzHZgBbUtxgtXohPcMGYQAnpbqT75hYJ3TS/vEBQWK2L/MwIcxfAbGM + qJ/YT/ImAsRzHwdpv19pz1/m67Bg1q4wHWIixNLVBiQR1mQDislza5hbmyu9bhrAjPvuAKwcCsLmYT9s + 7fXE9k5X7G53wf42FxxsdWXec8GBejN2VKixmTxKGL9r8u2xvtAJW8s12Ed+f6TTEwc73SUzdkOjHkuo + IWaK1Zr43na+t7nQEc3URC1VGvIPFVorldQYKvQQvUJrVHHsVpM/UcdNVGsxVa3HfGqRJbV6rG40YGOT + CTvEsvwdzjjY44HDfd440O3F5+6EG3a3CfPXWcrdW5vMWMfvWlnqgBXUNWvK1djI7xL7Am/nuW6pN2JT + nQbrqhyxvsYem6mtNrYYsKzGGfPK3BlzOjQkyFESJkNltByNyUp0ZRows8KX2jIMS1uCMc0xJpZmb6NO + 7KB27aSmGiiQY5TXPIv5YG57ABb2RmKiMRidzNnVmayJ8aIOOiGZGic+yp7cwbbVSkiEDMGsbeFxcsQz + J6QxFjNSHZEljAHGVx7jrpScvZb5o0GCI+ozHFCXbk/YoVZAGMDZ1MvMWV2MpyHWuXHWwvFyF4wx141k + KTFmdcAM8v/Z/P651F8LslU2E5h5ZUmxAQvF8s1FrFOlrItlOsyi9p5gDI/y2saImdmM2zwFZuc4YjrL + AdP8n7P5v2fzOM3zmZvlhAXUGQsZx8IEnsnzFDOAu3h9o7yGOXzPCn52HfPoFn5+G/PEAerPM8WO1Lka + 6beJx1uMeLTLA+eJw40mbKnUMUc4Md8p0Ee92JqqQn2yBrXJrI/kGNWMtXLyjTLGYyH5R0G62OKDbZ1u + Jh8xSss+Z2S4IJ2vxVG7hbFPw0JkiCT/ELMUbeavhvxIbInB/hHmL7VedqoWOcwXOeRQeekG6mUNcplj + M8ibLOyrJLGcd5hcmsWXmaCQeEyuhe9NMfL9PAerMIA9JQM4jfkiKU7HHOKAIOomb2/ZfxnAwugVMLnJ + YKA+1BPisTCBJSPYUy5BGMBuXrcMYDvJMPTka9LywswB0nf/2AD24fii/ohmvhPmr5iNnJPhgWyrB9It + JskEFuZvhsWMXGri/FSC7Zon9jKOdEBOhD1K4xxRm2iP1mQ78k05hlNkmOSYn8cxIf3+WuKAg+yrs0MB + ODMShH3tXtLWfqMcb+0cw83knB3k2D3UJd1ZrLusN62JduhkbRlk3RgTNxBIY0aD+awJSzOcsCpbi5W5 + Rizg+0esanSkOKKO51CRYI8y6r9icsdCxk4ZUU8+2RUjTGAN+tl/veTFPYnMPRYVZrEWLi90thnAHNPb + ybcOlSlwtkaNJ9ud8XKPC17uc8GL1HjPdJpwoVWHh+rVOM/ccLrKAXfUOOBIA6+vRY09YsUBaqElRa4Y + 43hqijWiPNKI7BDqf+bcmAByY+o8L/adh5F9QDhT35nEPsHUfm5ujvD0VLCvFNKMXz9/sfSzCp7sT3cP + B6kv3SQDWC6Z+97ejvD2dIAH+1n8bmDidxhvfpd47ku9GBRA7e3L/ykMYL7mw2Mg+1zMdk2ibsmkrs4X + v69Is3/V0j7iHeSSvcxJPWW+zBW+aMr3QinjxEquLvazFSZnRKBC2vM3WOxZLMxfwteD5+NmJ/0fd16j + L6/FVxjCNw1gf197BPFzYm/9WHL9OGqnZGr7NMlQVDOGtChN16KKubQuw4j6VD25BDkv39PA99bHKFHH + x7WM01p+po7xVEvUpTHWLXrpeU0yOStjttFioDZ25bjyQpMwgDmO828awMmMsXhh/t40gEVbRATY8ZoI + EQthTtKqHAliL+xIDWKlFTpUiAq1ISKY18B2jZFMX9sqTYnhBLXaLQNYwCJu3o1mXY1jXMXqJQNYICOe + sZOgQw7PKSfRYLsxJcmItGjmF8ahMILFjbApsfZIibOHVczuZd4X5q/YniiXmiebvC6T2i6DsSNmAgtk + cTwLPVSYJeq4CaW55Bn5riindhVmcH6WSVrRKvUHA1iYvjYj2GYG24zfW0hme4v+sRCJwgBmvCdH3zSA + mQNzqCMbKoIxd0YR9mwegCwnKQkZsbFIjYzkhUZSPORidl8v9q5ZTVF/DO88dQ7vPXMnXr13D+7dOR+b + Z9RhoiqRCdsdJWzsmiRXdOYFYWZDCglHCQ4u78X9exbjpbPb8Mpdu/E6P/f8qc14cP9CnNo4ij0LGrGs + JwUDue5oYqPV+cvRGWSHCTb24gw3LM90wTYKnWOd8Tjem4Kd9VGYx8EwxmQ7kwVhgklNzASeSHPDBBPe + zGxfLCiJxPzSKExk+6GHJK2L5zRs9cWs/FDML4hgUQvERIwJQxzIfd5yzA5zlAzgHYVeOFgXSnLpz6Rk + Rl+CE6pYBEpZAEpJikuYEEuZECuySYrzSRrK7NHd4IihDhXG+3QY7VNjxqAOk0NGTA+7YnqA59PpguEG + LQZrSHxIcvvLDdKeNe15arTn6tBCkl/PgVAabYeMIBksvjKkckBnsnhlcQBlcvCIzb3TKSay0h1RXW5G + T4sXRtu8MafdF8sJcdex2LxfuluHpHx7ph0O59jhgRodPpgXh2/3FgP3NgNPd+HGqz249moX8CSf31sN + HCkC1iXiyrgvvusw4WKnGd/3uOJavweu9LnjUrczvu7QS/iiVYvPWlT4R4MSHzNx/r7EHh/m2uGjXAX+ + XGLEP2p88bfGIPy6xgevV7rjsXI3nChhQs1XYZ6VfZosxxye31oK5oN1JjzQ6Y03RoPx0WQw/jY3DJ/P + C8Hn07745ywPwg3/nHLB32eaCD3+OdOAzyaM+GamJ65M++PSDG98MeqMf47y/04Z8I8FRny+ygXX9oTi + xpEY4EQScDIdOJ6ByweFARyLP68Nws9m6/HSkB1eHXPCW9NmvLPIC28t9sObS4PwxtIQvL44BK/M9cPL + szwpOsx4uleJx9vt8HCTDA802eGeJgecbVTh9joVDlQ78Tq02N+gl5Y93t3ogj1NHtjd4I4d1QZsZSHa + RYK6v0yOu9p0eGdZNL46UQY82gQ8T7xaD7xVB7xcjBsX0vDtnTH403Z/vDSlxrk2OfaU20zWpSRQy/P5 + WBjAfG1zhQy7q2Q4SJypl+Gpfjl+sVCDTzY749IRYS5648p5P3z/SDAuPROJS68n4Mp7Gbj6pxJc/bYF + V6734DoGpRnAN6534/p3Tbj+RRVu/LUE1z/MxpV30nDppRR8fSEJn56Jx6+3BuIFtvGpFgds4PUsyHHA + fArBRWlyrCRBXU9SuDVLhV0FOuwrd8aeKhfsIDndWu2OzbUe2EQRsrnWB1t53NPohZO9AXhsThze3VaA + T07W4fLjHI8/GWJb9ANv9OCzJ+vx7rFMPLIyGPs71VhbLMOWCjlu71HiiWXO+OhEKL59MgFXX4kD3gzn + ePbGt0/r8eWjSnxxvwNhj28edsJ3T+pw8SWO6dfd8P073rj8tg++f8sb37/hheuv++LGyz648pQHLl4w + 49sHiPvM+OZuM746o8dnJzT49HYVPj2kwBf/F2NvHR/XdW6BzmhAGmlAoyExM9NII2bWiJnJAtsyyLbM + zBwH7cRx4oCTmMJMDTTQJoWkadqmmLZpAw2ZkjjxemufkZO299733h/rdwbPnLPP/r5vrVln733UC+eP + eePr4zZ8c0cALt8RwsdhuHQsFOduCcFnhwPwwUEzfr/DE+9td8df9njhn9fxeG4x49KdNnwn1v496wuc + Ic7y8Sk/fHePH76+ww9fHrHg02vN+OtOb7w164EXp9zx4IA7bu9V4/oBT+waMGDLoBnrBn2ZJ21Y3UYR + 0+aFQyM2PLLDjj89PoyvfrMG+Gw3cJEQBvCFjcA/FuP8zwbxy+MVODYRholkd5R7UWh4yFFlUqCZArg9 + 1obW+EA0xYfCmRSB8rQYCpMEpOalISU/DUmF6UgoTkdccQZii7MkxJXkILEkH0nFREnu9wawawRvOjLK + UyXYKzMkZJWnEenIrsiAQ5jBwgAuSkFyQRKS8xNcJvDclM4p+SlIyotHCt9LK+I+JOPYjqwS7rcwBan5 + yUgrSEW6hGTJ/M3ITUSmIwEZjjhk58TCwe+n28MRF2+TRgDbLGpYDAoYPGXQKmXQyEnYVCTMfF5A0jWd + 44cjXSl4ZkkxnluQi9MDydhTEYBekoAsErsodxIufs/C7/nISIpkbohUuMFOklbHXD1tZ3x3BOCh6SQ8 + tdKO+2dTccO8CKx0WtFr90Kxvxy5JImF3Fe9WYHZbBtuaorGvd3ReHQkCj9bZ8dvduXjD9dW4E9Hnfjo + VDc+eXQAnz8/ji9eXoi/PzGEd0804ZWDeXhiXSweXByE06MmnCBZPUkxdbrRgFMN3jhRa8AdFR64t8oD + D7HWPN+mwxvM5W8P+uD3/Pzf51vxz2lvfLxUjU9mFfhktQL/2qjAFzvUOL9fg69vNODyMRP7tgWX77Hh + 8hl/fPMA4+WhYFx8jPn26QhcfC4aX78Yh69fScJ3b2Tgu1/m4LtfFzFnVOC7P1Xhuz/W4et3a/DVW058 + /modfnd/ER7eFo7rRjyxqlqGMdbPUdaBYeaKIQrT3kI1uomOAiXaChVoJzoK5BK6KEo7WWfFdHO9hXKM + zv2ROl3rgRmnB1a1emJjuwe2dKixd0CDI/MNuHPGhPvX++OZvVF44WA8XromAa9dl4Yf707EkytCcHqe + Cbd2GHCN+OOgSIUFaTyeJO6bsTGa5IWhKHcMRSqwMF4YwBSwDg3urLbg0dYAvNDNmka82mHFyy0GvCAM + 4BoPPFOlwdOV7niqQo3HyAkeKJLjfubqs2UynC6V42SxHGfK+XqVGx6qUkh4uE6BxxvUeLRRjfuZw08y + p5+qccOJJncc7dJjd7sWKxvcMVGrQlsp+xn3V1WqRFWZh2QAO0tIqsu90V5FglzvjS7W+Z5mHboaSahZ + k+so2CrIBa4awJVswzrJAPZAN4+7R3y+kdt6XoM6D2kq6HntBkx2kkv1mjDdb8GSYZuEmSE+pnCaGSZG + 9IQWy8hxlo0asGLMglXjQVhJUbh8OARL+0OwoDOQXMeKTtaClgJymzySeQpDJ8V2LcltVaoHyhLVKIhR + I5ckXCwFkhnsiRRfd8SaKUi8VQg3qH+A0R2RZg2ibQbEBfggJcwXmTHBcCSGIj8tFI5UfxJsk0Tyk2MF + yRWEl2Kf5DyHhDxXmBU5FhTkmrk1IpeEN5txmU2hL+Bw6AiSeyIrS4d0ivxU8r7UFAqAZA/JuEyg8ExM + ophI1SOTgjo93ShN75eYpENKihFpaSaKISOio7QU/RTxc1M5ibt4zUIUUkgF8nUxZV88BYYYTZyext8S + JDxXj7ISozQFdEtzCNo6wtDSFoSGJtcI4GK2Y2GxF0FhIFAo1gD2kCBNgSzA+iuQl8f2zFIikzwrLVWG + 5BQXUlLlPHYxopZIoeihYIiNF6OAxZTPKmmq1yheDwFh/gZQVPlRYAoIkzc0Qvk9xHv+cwgMYX6k0BJ/ + dgqIUS9XIabOjZXeU0OaRpvC3bWurwZpmWxLyfylSMtQIzFNiYRUJeLIc68awMkUTOl2Nex2jbT+rzCD + cnIpmvK9eO46lJboUFIsTG9PlBd5ooJtVF3uCWedAW1iOvQ+G4bIYcdGrRgdMUkG8Djjf2qC2mHcFwsm + ArBwMhBT4+TSYzaMDVkx0OODHnK5vnYfDHdTM7Dmzh+xktd7Y6SXcdKlxmCnB4Y7dRhp42carcxZBlRR + zOZSgKb6yRDNXB8mTGAikNdf/ElgFuBjMXVXKPVGVLASyeEqOChI6+1+aM8NQU9hBHpLI9FZHonW0jA0 + lQWjoTwQdaV+qC/xJSwSaotMEupLzNLWOfd6PQV/fYkwgM3SqGFhAPc2hWOkMw7zehNdBjAx3h+Hka4o + 9LeGMl/4o7We59BoQwf7W2ezr2QAd7f7oZf6or8nCOMjkVi8IAlrVmRjx6Zi3LC/AUevbcUdh7tx79E+ + nLyFONI7hx6cvrnve4jXTt3UI+E+gcMCXTjBx/ce7sXdfP8EcaeEHtzJ9+840o/jR/pw+029OHpTJ47e + 0IEj17fhluvacOz6DtzF750Q372pC3dc344bd1bjuu0VRDmu31GJG3dXY8+mEqxbno35o/GorWAOECNt + ioyorA5ErTMCVXXhKK0KRWFpENIzGceM89gE9v9oXpsoxkacuzQCOCnZC4kU9KL/im1KkhZpKd6MJ2/G + kJ6fEzc8eM4ZwcIEFjdBeCIu0QsJCV5IihN3k1OIs67kROuQy/yQF65BbjBjN4hx7K9CmZ8S5RY3VFrk + qDTLUc8+1BhMbRnlhk7WoW7qv27GQi81Yl+uFl153mjN9ZamgK6kgC9lLBUQYk0o+5z5exVi5LwYCRMT + 7SZNPx8dLUaRyRHM/QeGuEYpiLUnr5oO0pSjkgHsLiGcxy7WCI6OEjMhMLeKmQuYV+1iNgQiO0WHLJ6r + necutlmJ2n977i6NTBB/nIp1OUtzdKgu8kFTlR86nKFoqQ9FTYUfygp9kJfNvMA6nJQgk0xgYf6Kdcod + YoaGQiOKxDTRlb6oqAuYM4Ct3xvA3Q0+6GtwGcDDtTrMq9JhgRj5W2HEomI9ljJHiJFKYvTJZqcJ2xqN + 2NHsjWs6rbhjNBynJ6KkJT9ODos1SG24ud2E69uITn/c0B+Kgz3B/I4Vq1lrhQG8vNRL2t9MqRZL+FgY + wAtZlxdS0wosrtRgCTFT5YlF5AbS6N8a8otqtTS7SWuJFtKIX8ZqQ6kL9UUGaY3k6gJvaQr3hnIbaorM + qMr3Ye32QU2huMnDF87iQH6efL0kCK0Vwaz/IeiuC0VvQwSGmiMx2haJ4dYwDDQFoofau7PKzBrvi6Gm + IIw2BWM+MUN9vpKf29gZgx19SbhmOB37e5KxuTECqyv92UZh2NkSg5tGsnDf8mo8ubUTr187QT22FO+d + WIs/ntyA35/agPcETm7kdrOE35/ejN+d4eOzm/Ebbt85uR4/P7EaP7t7Fj87MYs3716Gn9y1GK/ftRCv + 3TmJH98xDy/dNopnjnTj4etacGZfLU7vq8HJvdW4a0cJjm3Jxy2bsnH96lTsWxqLzeQZM51i6mYvTDfr + pSlk55P3SgZws00a0TtWx7wv/lup0KOrXEcOwnhhXehgfegUxkkRY4j1YrBMi34+HmANHWY9HWLtHCYH + Hc1XYSRXQcgwnCvHCLX3ZLEKS2t0WM3f2SjWhe72x/a+AOwi39kxEIwNXX5Y1mTCkgYT5lcb0Z/H37GT + x2YwbhmDfUQ/MZjO/WeqMe7wxJRY1/e/DOB5hewrrO+Lxci6GjNmyo2YytVgjN8ZluCBIcb5cJYGw9zH + CGNjJF+PMXKHeaWsVawB80pNGC82Sq8P8zcGRM5gjRXrJPbbeRw8rhGHEvPy2V+LdVhcJAwcd0xl8lzF + KD5h5JA3dAsDmI8bWIsb+HozX+vg9zsdKnRR73eRU/aTy484ZFiU74ZZttF6ao9NlZ5Yy1iYJadfmueG + xcI4EqYRz2018/CGKhM2crulnJqWcSBG/+5m/Owv98Ahxsnhek8cbdThvi5fPD4aiR/NT8Cz86Lw5GAo + nh+LxauLMvHUeCru6YnFtY2BWF9uwoJ8LYbzdOjg+dZnu26IyUvXITNFmLniD2qxzrsVscm+iEq2ISre + LE0BHRKmRUCgGn4BbggMUkhT4MeKP30T+F1yuzxyvLJsC1pYhzvKg9Fd5o+uMj+0FlnRnM9667Ay/5JX + ppiQHkduGuGFCDGbQjg5FbVjPHOg4IiZdgu5pS+16RxyAyQTODXD7FpLPl6PiGjP73NuWJiHdDOOgBjx + K6Z4vorgAAXhhpBAHi9zdWwU82aiD9KTTMyfRmQkksem61FeYJGmgBYGsJgCeoT6ZbonEKuHg7FpxB/b + +qzY2WPC3g4f7G/zxqFWH9zYbsFNrP3XOA3YU+klrfsppn7dXuqOXcxlYprem7ptuL7bij3tzKVNOiyn + FpsoV2KQn+ssdENzgYK5SSXpjNYaT3TUeTI3iamhXRAGsJgGeqzWEwvqvbC4nvtwMrb43iZ+blujFw60 + 6XF9lxGHB2y4dTgQd0yE4bZ5oTg86I9DPVbs42/vatVjGz+/sVaNtZVyrKti/2N+3cL97G71xl7m7z3k + gGLq6K1ONTbV8jPUV6trVNKU/aPsMx3knLXs30VRMhREy5DPGllKPtzLXLusOQrrexOwtisak2Itcbsb + GsmjxVToncwNPdR4fcz1/dXeGGsKwPyOKIw2R6CV/aMyxweF5BS50ih0d6n+CkMyMkaGiDhyW/5uRha5 + eo4n8rPI3dPl7EPUadzWMbbE0oBtzFUCLXlsyxwxEpjtKsBYEq93M6/1s8bNqzdjirXwqgEs4nqc8T0/ + W4lFWSosyXHHMuaj5XxdjNwVWFLsgWVsg2WVrIs1YsYBDeYzficYx5PMedPMg2Ia9yUFzHv8vRke00yW + G2ayCT5ezmNayRy6mnl2TaVBmiJ6nMc+EMucydq9gNpjlUP8L+iG7fzODuaOG5kn7qM+fpzX+oVmH2kW + rae6fXFK9Dn2t53VOswWuWMyRxjAGnRleaHNzvyda0F7ni/bwYb6HDOqs82oyGJc8nFxjgmFbOs8h8sA + dvBxFrfiJtNItndEuAyxMeTk1G/S1M/p5CSZ1H3cZlPjXTWAS8mnygtYZ4XRQn5Snm9AIXOsXdyEFkEe + QmSTlxSkka+RxxTwe/mMMTECuTCLx5Hri0KHRRr9K244iYqkXhL6SRi/cwaw0FFXRwCLrTB99dQDOmoE + A3WiGA0scNUEtvq7wUpeKAxgYRgK+Pq5SQhk/PtzPzZ+3koIAzg4SIaYKLFsBrWsMH/z/FBaGMCtr2T6 + CvP3vw1gMWIxjxzXHimHg+dYEu+Gaub6ljQxa4Vc+q9mIa/jMtbA9SVy7KxS4oZWHU6MBeEexuThPuYR + 8q5p6s+BTDep1vU4vDDA9hM8VUzj3cp+3cGY6WPdESbwgiINlpZ4Yob1diX75lrquTV5WixlLMxjrepN + VzHOxHG4oYx9qYjXsYDHVsYYree17BA3RfJ6iuVR+lJZz1JUGM3wwDRr4bpSo2QA767S4kCVGoerVbin + UYOn+8x4edhCmPDCoBHP9OjxWJsnHmhwx6k6Be6udcMd9W64tcENt3d44niXGUc7/HBdcyB21ARiRQn1 + YS7zaAb7YArbNskH0YFKaUpom4HXgPjBAJbzurjD19ed19+FwCAvQiNdQxP5vYBFmL2EMIWDAvkZf9Yh + X6U0gtjA/Ri4P8lMtrAfh1E/x3khKsI1u5ifMIXZT8LZp+KpObPiVCggzy6nnq7Ndt1s30Zu0U3OLEYA + 91eSC1YEoKnQilIxi4+4OTPWZW7GRVCnh2oQHqKRzN9QHouYytrKc5Mg/W+hRhCPTzKCxVrAwjAOo85h + 7YkXRjL7fLq4AZT6XoyoL2FMVTi0qMkW//no0cjfbOZ7zUkatCSyLlBrNRNNqRo0MRbFcjYtrNutDr2E + Fn6vWaxLy+92OIzoyqceLfBDm8OMevbhUv5eLmMsPZTxKaZ+ZqwlhIpRv9Q4YUrEsf7GRCgRH03NRn2d + FCuWZ9BySy0XI26YciGaOkfciJ0Qyc9Es47G6Vk/jchM0Ettc3UkcEaM0DNiFLCA7gcDWNw8kSYMYDGl + OpHhjQIRYyli3WGhhcTIWzXsySoJ2eyvDvbvQnK3IskAZh5hnsknP8vLoE7iewL5GRpJzwmTuIw6r4L8 + v1rkplIbcxRjl/kqz+4pzZgkbpr9YeTv1emg54xf1h7XYw9eHz4m0qhx09hfxHGJWVLy7XoehzeaayKw + dH4ZDuwagqw0PY2dPBF58bEoSknAeGsjDm1chyfvvgO/eOoBvPX4nXj91CE8eGAFDkw1YroqicHhi2p2 + pmJ2ylJehNp4ErJsPwyXRmJpqx37F7Xgvr1L8PTRrfjp6evwxplr8eN7duHpY+vw8I1LcdumTmwbdlA4 + hWKISWw4lqKJF3pZhgGbCqy4rjESdw1m4o7hbOxriMUSvj5KQTvBxp5g4p2fSQLOpDdTHIxVNTEkJ6nY + 2JyKFZXRJMxW9KYaSZ5ZKPOCsbSQJ+sIkQzgeTzmsWAWNu5rKzvbNRWBuNEZjv01QVhNYTqWqUCruAOS + SayBybAuX0GxJqdIc0MrSUdPoxqj3R6YP+yBRZNaTE96Ysl8LRZP6TEz6YOZeVYs7PXBeIsW88TUJ/Va + jNZQqFbqKES80FfiunOxxa5FFS9MLsW5ncndHuSGnEg1sinAM5nYU5ikk5kA0xLlFMxsW6cf5rXxXDpD + sKGbaPZlQfbCLAv4RhbbfXlyHCmUM8np8c7yRHx5YzlwRpiO/fj2tX5883of8EwnX2sEbqnAla1puDQZ + iPPdRpzn8V7st+CbIV98NWjDhT4TvujyxhfdenzaocUnbRpp9O/7tQr8odQNvyXx+0OJB/5BQf5pRwQ+ + 7o3Dr1tC8FyNBfeUGXGgSIdVeRqM2pXoSXXDCIvBTBHJf40PjpGYPjUUgTfmReK9hdH466JI/HV+AP4y + YSXM+POEN/48acDfF3jjo0U++GTaB18s9sOlmSBcXBKAzxZa8NECAz6aMeDj1d74bIsFV26IBm4Vo38z + vjeAvzqciU8PJOHPW8LwxrQezw+54cVRd/x4vgEvLTTjRwt98dzCADw7PxBPTQTgsWEzHhsw4rE+LR7p + dMdDrXKcbpThHqcMdzqVuNXpgRtIfg+QdF7j1OJgkx77SWz2tJqxt92PWxt2Nhqxs0aDPRVKHCiT4XiL + F368LBYfHq7G5bMdbP9u4EVek1ebua3ClcfycP7OFLy/PxQvTnving4ZbqiWYTML8MZCGbZVyrCLxWpP + vQL762Q4VENixfeP18vwSJ8MbyxV4M/bPHHhiBXf3OWPr84E4+IjETj/TCwuihHAb+fj2/f52xe68M2V + IeCqAXy5H7jA4/jMCXxQiSvvFeGbnztw6aUsfPloJj4+kY5390bg2cXeuK2DZJrkfoaCbglJ5vIsJdY6 + PLCVBX83+/GBYm9cS8J8sMqIfSSle2pt2NXgi10kyXuag7C3OQDXtgXgOK/548tT8ct9pfjgjmZ8/aQw + gHk8bw4AP+vD5z9qxm/vKcCzu2NI/ilIeL57eK43d5NErjK6DOCnrxrAsbjyegi+et6E80944YsHVPj0 + tByfn1Xi3CMe+PJpLc69YMSFVy249LofvhJ4xY/fDcC3L/jhm6etkgF88SETLj5gxoWz7O/3euNfx7X4 + 6DYNPj6ixr9u9sDnR7W4cMwHl261SlM3X7zVDxeP+uGCAB+fu8UXH1/ng38e8saH15vw2S0mXLjdhm9O + +OK7kzZcOW0lLIw5G8RI4CsnA3H57gB8yX19epMNH+w3490Nery4UIUHRhS4rc8NN/QpsW+AsTLog00D + Vqzvs2BViyfWNVMwD5nxyNZ0/PGRPlx8Zxb4ZDtwfgdwcRtwbgPw92l88ZNe/PTmIhweCsYIc1yxSoY8 + OQmVjmImiHkk0oaOmCC0RYeiJS6CxCsGOfY4pOaluMzYglTEF6UitigdMcWZhDCAHUgozvtfDGAxZXMa + MsqTiSRkVqYiS4DPs8pTkS1Qlg57SQrSChKRlBuLhOwYJObEIzk3SUKiI56vxSIlL4GfSUEW95ktRgCL + 0b/5SUjKiUMSP5PiSERKDj/DxxlXwe/ZBRwxSEkNQUyshWJajwBfDfxNalj0CmnqZ4MbiRvbIdaTtcrX + jQQ3AMe6U/HcogI8MZqJE22J2JIfiOZgDRK9SIDcScjVcuj5PS8Zvy+TI8jNDSneMtSEyVlPDDjSF4P7 + F9jx0OIc3DaRjG1tYRjLY+EmGUnj76Tzd3OJGr0cs6xVR5oi8cBANF5YEIvfbnfg/euK8Y/b6/HJmQ5c + fHYMl16Zwtc/X4xv3l6Gc29O45MXR/HXB9vxzq2leHV3Kp5cHozTfTrc26TGPfUeuIdi+06K9KsG8Fnm + nacaNHi1Q4df9Ojwm0ED/jLPjA+YRz9cpMaHyxT4aFaOj9YxTra44fxuNS4e9MQ3h/W4fKsRX99hwlf3 + MF5OMf+f9seFBwNx4bFQXHg8Apeejsal52Kl0feXX8/E5Z/n4rt3inDld6wx71Xju3dr8e3bTpx7tQ5/ + eKAYT+yMwI2jJPqM3wnJAFZgOM8TQ/me6MlXoyNfidY8BVpYWwXa8uUSOljD2im221nPhOgeLHbDWJkK + 80nuF9epsIK1d22LGuub3bCzzx03szbctyYAT++Nwc9vy8Gv7yvBu/eW4A8ny/Hurfn48ZZYPDRlwe2d + elzv1GB7IesQ6/oExd08EqKhOAoLEscBkmqXAazGXgqUO6oYZ9II4AC81k10WfFKmxEvNejwXB3bucod + T1a64wkx9XOxHGeLZDhdLMOpUhlOcnuigFs+vr/CDQ9SRD1EYfJwnRpPNHrhsWZP3M98fh/b5p4qUVtU + ONyuxa42LVazxkzVqtHF7zq5n+pSJWpKNagv0UkGcHOpN1orSJRrdWiv90Jngyfane5o5m/UU7CJUb9l + bLvyHBmqeAz1pWxf9o0uchAJTk901c2t01XnjuFmL4y16jHJWv8fBjDF08yQCbPzLFg57oOVE0asIrdZ + PWXDugWB2DgdiY0LY7FmIgrLhsIwRfE0LKaSpdBr5nVuYhs25xokMVBH8VyVovkPAziLYiI92B1JFE0x + JiUihAGsVyPUMAejO8JNGkT7eSMuyITUCH+KmDDkpURQlIfBkeIvEfckMcVPtBopFDhpCRq+RuKeLKYW + JXEnOXfYDcjOdK0FlZHmwa2YIpXgMWWK1ylEMglhAKdR7KenURSkeCKJEAZRYrIX8wpFgmQAe7sMYAqB + pGRvpKb6IEkIQwqJALGmE4WagDQSeE5IBdjkCAlUSWsFCxMpnWIhPc1lQou1iCvKzdIo4KaWIGn655o6 + C8oqDCgo4vust3mFHi5IZq+HhFwx2jeXPNEh1hRTIYs1OT2DuSlVxuORIZGQDGCK6uRUBRLJvxKTlUhI + UiAuXoF4CoIY9nWxXq8LHghh/xfGrn+QTLpzPYQ57HsDOExMRSZHAN8TCKT4ihRTHsa4DN8otr8YZShB + GEdETDTFWJy7ZACLaWTTKRLTJQOYIitDhaR0vs/ji+exxSXLkUAkppDrCvPXoUF2thZZWV7IYRvl5esk + 87ekxIDyMhcqiMpSPapKdait0KHR6YP2NhP6em0YGPTF6IgwgMnlR82YN8+EyXEzpv7DAA7AxJgfxsh1 + +7t80EUu193qjcEuC0Z7rRjrNWG42wu9bQp0Mdf0MOf0kcv1NxkwUG9GW7ERVWkaaeaeZHL3aF7rKAr3 + SCvFO4V6iEUu/VlgpaAP4GuhbFNhACdJBjBFe6YNrblB6CoMQ3dpuMsALgtHc0UoGsqDUV/mz9gVsPGx + FbXCBC61uB5zKxlGEszMCyaXAVxuRXtNALobQqW1cUe64jDRn4j5g8n/ZQAHMHdY0SnM3yY/np8/Olt9 + JQNYjALu7QzAyEAY5o/HYtkiaqo1Odi3rQIHd1bj0J5q3LS3Djfv+wG37K/HLWI7h6N8/+jeWty6twa3 + COyrwc17q3GYr93Mzx45KFCHm4jD1wjUE4246ZCAE9dfU4tr91fi0P4KXL+vAjcerMYthxpwjO/fKrb8 + /k27K3HjznLcuKMUh/dUcL81OLijAlvXFWBmOh1tjX4oKWZfqbAyriLQ3B6PhpY41DREo7w6Atm5ZskE + FtMcx4nRsoyBJOYNsT6wiHVh+kp3uhOp4nVhADPmExO0iIvV8POuUe/fQ4wcTtQggTkokTkuMVyBNF7r + nGgK+ygvFFJzFoa6oyRYjRJ/JcqZF8rZP8rJJyoNMtQxbzjZR5rDZGiNYi2MZx1kPHRlqtHDXNqZZ0BL + jkHKpRUU8cXS9IUa8jZ32DPnzN+5bVq6O8RaeLGxSukGDRGnYvRvMDWvy/xVMY5d0wuKx8IElqaFZl4O + C1cjgho0gtsovhbP76elaJHONsjgNlNAGv0r/iARxq8ODmFACCQZkJMiplf0QpH4U8hOiBxX4I1GMTKt + MRytDeGSAVxa4LqjPU3kKiKFGjdNxD/zwtX1f4tKfVD6HwbwDyOAuxuM6HUyXuv1GKrVYqxKi4lyLRaw + Ti7I98LCPA8sKdBgtkSLDdQlW/n5XU1GHOq0StM/nxqPwKmRYNzbb8MdYj3MViNuarfgSG8gbh6OwLV9 + odhBfb2m2ttlAHM/Vw3gxaVeWMCaPL/MHVOl7tJ2fpkaC4jpCncsYL2dIMaoEwdZ/7tKWIN5XK5p3Bm7 + Io5LfFBTwP6Zp0V5rg41xSbXH9GsmaW8zmXcluUaWcfNrOO+qC3yQ32hPxrLAtFSHoSO6mB01ISity4U + /Yz3Pmcw63kAOitdBvB4ZxQWDyRhpj8BSzuisbw1CitbWbPbY7G9JxF7+5KxsyMO6+pDsLLSHxvEKOCG + COzrScZtC4rwwJpGvLR/BD8/uhi/uWsN+dRG/F7g1CZiy/cGsMBvhQlM/PbMljkTeCPevm89fnVyHd4+ + tQa/ODmLn983g5/duxhv3DeNn96zEK/cMYbnjw7gqSNdePzGdjx0fQtO7a/FXbvKcNu2Qly/OgN7FsVi + /Yg/FrWRn5C3zG/UYUoygI2EjwSxFvBQpRY9ZWKabS90lXtJo61/MIDJpeYM4H5yk+4CJfrIPfvzVRjM + FXDDEOHayjGQI0C+WuCGBZWemHEasKrZjPXtNmzq9sW2AbZTfxDWdvphptGExU4TpqrYD1mXu6mLu1m/ + ehiTwoDtzyC/4nMxknc8xwuTjIXJgh8M4FEJ7hgvcMc0+5YwgJeWe2Oeg/0mXSxTQ14qRjwxzgezCAf5 + cw5BzT1WzHNnPxovt2Ee8/4YY2WIdXKAn+nlb3Yzb3QzlsRIZLHcyVCOkr+jwXSpAcvEWsMFnpgmb5hI + lWMeMczf68sQOYc5KFGGJsZkqzCFeS49PJ6+HBX6xehfcvlx8stlBQqsZb/fQv2xvdoLmys8saZYjAJW + SAbw4lwlFrNNlpGzri43YWO1BdtrrNhVLQZ2GHGgWod95R7SLGIHKxS4vtodx5tNONsbgsdHovEY68+D + rEViqZsXp9Lw9EQ6Tg0k4CZqrK01rOP5WgyKP72zvVCfpUMlkS8M4FTma5G7xejcJAtikm2ITLIiMs6E + 0Cg9OY4nxNqafsy1AUFyaS10lwHsJRnAuWne5M8WdFZHoq+O9bI2DP3VoWgv8UdTvhU12VaUpluY74xI + jtZJf6RHhJCrij+WY8gZk3TkkUbJAM5y2AhfCTnUm7n5weQ2fkhJM/HYjIiO0yKSvDAiSoPISG7DBTSS + GSymeJYg1gBljg4NIg8jfxCzzcSRb2akmHi8ZmSQf2YkutZGLSswoY79oY3t0+30xWCTDeNiqvJuK2Z7 + TFjToWf867C5SYutwjR16nCwyQfXtVhw0GnEniovbC/zwOZiJbaWqLCN12c/P3NthxkHO83Y3qLHGmqo + aV6vkSI5egvYX6jZGvPc4GRcNZSoqUOoR+q80ENd0sff6BMjgalThmrZ59lPXAawF5YRq+o12EhsaXDH + XnKrazsMuLHXjKPDAbhjKgLHJ8JxmI+v6bFgV6sOWxo9sLZagTVVblhdJce6WhXzFvsgf0uMTN4tDGAx + dXSHD7Y1abCO+mp5mQxLy8RUz9Q7dhWc1H1lYopf8raMcBlSQ7klashTJ2rCsLY3FZuGU7GEfLyngDwt + mTpK3BCRIUMj+39DjhsamDc6K3ww1RWDKebSnvow5nQ/VBdYmbNNyLNTI8TK2a9co4Cj4wSvZa1mXSvK + 16PQ4YEC8vXidDlqxPS3zAFthZ7S7JACbcxZbXkq8kMlWvJcEAZwTxn7PGvZvDry2VozJqtNzAFajFIP + zHMoMZWtwkKxFjBjdVGOO2OQj0XMc/8Luc/FZZ5YWumF5cyZSxl/CxmzU0VilKYC09ISB2IadzGCWIXl + DgVWZLm5wMezeWqsKfHCOua6jTU+WFOuwxJ+bh7bZ4jtOc42WkpdvYbttDlThu18/Sa216lKDZ5lvv5J + mx9+wnh+ss2KE6zb19XosKNSGMBi9LIHhpi3ehjDndkG9iv23yJ/nrMv21sYwCZUZDEuc4wozvFBgbih + V9y4m+0NO5FJjfk/DWD13DTQwgAWU6cKE9gDDuZSYaSIUXW1jBWBeqKa9beUdTgnVYkMXi+BXD4uomYR + yCPXzyFXFHGWJ0b9Oazcjwlp5EHx1D8RYvakQOo/cn9hAAsNJWmpQDnB1wkT3/u/DODvRwL7ugxgsV6s + jY+F+Sv2KWYREqN/JQNYPCfCqNeExsqkLs3P8UVpYRDKi4NQmGeDmBI+O50amDpYPBamdZHdjPxUnTRN + bZoYdEYUxMpQwZhoYg3oZp8cc8jJndywrNAN68sU2FmjwnWtWtw56o+7JoJxZNAfO5uNWMLrNmQXM12I + mxQ9McC262ONE3y1hTWkjde/k/170K5kvSM/Yj9cLG5KYL9c6fDCCubuRXYPjKazXqYo4ST/q2A/KuQ1 + zOFx5bA9SxijtXzeEqdCR4I7uhJV6KKG7UlkrZ5bV391kVhewBu7mXcOVKlwuFYp3VD/VL8RL42Y8eNR + I14e8sbzPXo81eaJhxvVOFvvhnvr3HB3vRx3ON1wslOLs+SBp/sDcU9vGG7rjsShtihsqY/CiooojBWF + oyrDhtggFXx57YQBbBEGsLcCRqMbTD68ZlZ3WG0u2HzFlM8aBAReNYBl8KE+NIsbxG1u0nTQPxjAammW + KGH+Cog1gH19Re7wou7wRlyMxjUNNL8bTJ0ZSe2dGOEGR5waRezjVZkeqGM7NuYwb+SRAxUZ0cf+3Fce + iA7WrDrGSn6yBzJjlEiLdo1wjf8vAzgkgMcsDGoex9X/LcSxSQbwHMKDWedCPREd4SX9l5Ecx+OjNrJT + DwgDuIhcvyxLy+PRojZdCyfjpJmaoUkygDVoTfFASyofMw6bxEhfxmAz9X2rWNpGgh4tDj3aGf+djPGe + QpED/NDG+K/PICemrsqJdJPydZLo92yHeMkAdpm/cdQsMUQczzGeeicpRpi/c+DjRB6zZACHqRAVSl1z + 1QAmT8hkDRVrBqcKAzjSne3L+GBNFqOAhcYR+J8GsBgBrJduChHP81INyCbvELMhudbfpS7j9bGnqJCV + pkZuphh5K27+oT7i9cqjRsvj61eRmyaeu6OAnytmHhT8vyLf6FoLmHW9OJe/w+8LA1hopv8/BrBk/BKp + It7jVTxHD2mWlALmzCKHUTKAF0+WYN/2AcjK05NQlpKAkpQ4VGclY9VYH04dPoSfPf0Q3nnmLF6+4yAe + 2bcCN8xvwUxlMkmpPzrZeA3sTFXBCpQywZWHKlBPEtRMIdhp98Wi+lTsGq/D7RvG8Mh1q/DcrZvxyt07 + 8dJdW/DjE5vw5JEluHd7H65fUI719TGYyffFYgrwFRTge6pCcbQzEfeN5eCuYQd28WDns3H7mRiEUTzO + zrUwy4RZJry1JGvbWlKxv9eBfX0ObGpKwrxsCxOFFl3xXuilSB0jYZqfZuE+jFgg1mSM02BNig478804 + VBGE62qDsa/aH2uLvTHFYtqXTfGdp6Co8IBY77e1UkVi447eRi9pyuepYRbAKR2WL/HGzCItZqYpDqcN + WL7QhOWTNizs98FEixbjjRSmTi2Fip4ESI/BUpJ0kuJukvVWuw5VPJeCEAUcgQxqJhgHSZ+dJDCdRC8h + lAJeDG9nQnSwc9SXmjHUEITFbSFY1xmKDWLNowo9ZlmgNzJx76OAOUJSJgzgXy1LwBc3lgFnWsDsh8uv + 9eHyVQP4dCNwuBTfbkzG+XkB+KzTiC+6fXCO5OvigC8uMBl+ScL4aYc3Pu3U45M2L3zUqsE/GjX4CwvC + e6Vu+E2RAn+o0PI1P3zMhPnBYCJ+1hKKhypMOMKkvDmXIjybgosdvSlZiY5UlSSCVpYZcU2dDfd1BuPp + vhD8ZCQMvxoPxTujNvxq0IxfDRnx9qAO747q8McpIz5YZMZHiy34dLEvzs8E4sKyQHy22CqN/v141oB/ + rffBF9ut+O76SOCoGAGcCRzPAW7Lw8XDdnx6IBl/3hKJ1xd446leBZ7sVeGpQS0eGzLgkSETHhqy4oF+ + X9zfY8XpdiNOU2ye5fmeaVbjVCMLhVOOu+qVuLVOgxtrNSwyGuys9MCuWvadBgOJphHbKRC3t/lie6sN + 2xp9sJ1kd3uZG3YVy3Ck3gNPToTiTwdKcf5EC6480cvr0QG8yGvwfBXwRBEuncjE36+JwitL9TjdI8PN + dTLpu7vKZbimUYEbOzQ40qXFzR1q3Nwkw63CkOb2kX4ZXl8sw+83q/DlYQu+ussfF0+H4vwjUTj3TCzO + v5qGr94uwGWxXueFHnx7RUz/PAZcGQEuDwDn24B/OYG/8zjeK8U3P8vFpZcc+OLRLHx4wo539kXjySVG + 3MLf3cgYWFpI8i6mmCGBXcNruSXfgN3EfhadfcUk4CSjOylgt1easa3Oim0NftjRGIBd7COH2gJxfCgK + jy5Pw8/3l+FvdzXj0pNsi9d5TG/24covunHutVb87dFKvHEkHfctsfI7SuyqlOH6NgUeXemN3x8XBnAa + vnk5CVd+EosrPw3H5ZdsuPS0Hl8+qMZnZ+QuE/hBFT571AOfP63Fl88ZcOElMy69bMNFfvbrF3zx9XPE + 02yvx8346lELLj1sxYX7TfjyPvb3O4UB7IGPblbik5vV+PQWDb48qsf5W3xw/mYTLszh4lF+7xj3d7sw + g234/IgVn99iw4XjNuk6XL7HD5fvteDyfT749qQPvjtlBu4XU0EH8bVgnL8zEJ8fC8SHN/jh97tMeGlG + hQfGZbhtQIYbemU40O+OXYPe2DZA8dzng9Ut7ox3krFBHzy6JQV/fLATF95aCny4GfhiC68l8cV6XHl/ + Gp++0oOXr3PgULcfBqOUkgGcr2B+1lGs+evQEWFDR3QQ2qND0BobjpqkKBalOKTlJiJNMoBTkFCcgrji + VMQUpyOmKJPIQlyhAwmFuUgsykFKSRZSxRq90ujfFGSWJyOzIhGZlUmwl3NbnoDMMj4uJUpSkFGUiJS8 + OCRkRSAmPRyxGZGIy4yZQyQS7NFIzomTRviKkb9i+udMMfo3Jx7x9kh+h59Pj0JiRjQSM6OQys8LpEuI + Qkp6GBITAhAdZaJwNpDUaBFsIwnzUcPiSXKjlCNILUeSVoZqEuzZPD8c60jAU5N2PNSXiKPVEVidboPT + n3lXQwLkoYDZXQHdnAGsI4IUcqSTKDWymK6p88dt81JxZlEu7luQg4PdcVhG0tUq7hYjyYtVkqjxuw62 + fa2eIirNiJsbw/DkeAJ+vioN/7y2FJ/fVotzp9uktbC/eX0+Lr+9BN/9YSW++8safPOHWVx8exoXfjqB + T5/pxe9uL8Er2+Lx+IQZp9qEAazC3VVq3F6uxPFyNU5UqnG60h2P1KjxAgnwG52eeKefOXTEiL9PeeOD + hR74xxIFPlwux4erZPh0oxzntylxYbcaX13rha9v0uPSrd64dNwHF++24Nw9vjw2f5x/MAgXHgzDBTGr + wONR+PqZeMZQMr55LRPfvpmDK28XAb8uJ2px5S0nLrxSiz8/UIxndkfhyDwd1tXIMOmQYTSbpJ2kvz/X + E10Ujq0UtdJa+BKEAexCu3jMz7dmUURQQPblyzFc7IZxipGF1W7SGrkrmRNXM//tGdDg+Ao/PLorBm8c + y8H7jzbgoxc68eHzbfjk2Tb8/WwN3romA08tDcDdFABHWL92FyuxkiJ1Kp6iNUGJwWgVesPcMEDMj1Vj + daoH9lLM3F7ug4eafPFsux9e6fLDa102vNLug5ea9Xiu3hNPVrnj8QoVHmP7P1wqxxlh/hLC/L23yGUA + 3ydGBFco8GC1Go/UeeDRBi881WrEE20GPNjojpPVMtxdIcPtNQpc16LBjhZPrKxTY7JKiZ4S9rNCOWpL + lKgr8ZTMX2eJAc2lRrSUkyxXaaW77dvISdpq3dHC695QrkBtEYVUHkVdPvsdj6OBx9gqpmdjTWonOvjZ + dn62rdINndVKDDR4YLiZHIV1XkwDLZm/o35Yxno8QwG1csKCVZMWrJlvxtoFVqyfDsSmxaHYtCgKGxfG + zBnAIRhrNqGXgr45XyWtAVyf5S6N/nUZwAZUp1IgSAaw+5wB7IH0IDUSfVWIMSkQblAgVK9EiEGJYCLE + qEaYiULFzxvxIRaKl0A4EiOQnxaFAsa6GAEsDGAx3U8S95lMQZSaQNJLsSGQKrZJntJamBLIHaU/BUiQ + 04hUivm0NE+kkxC7IAxg8i4KFPF6SppWMi+TKZhTSPQz7D5Iy3AZwGKKv3ix/pswhCgeIqM8ERQs7tCW + SxDTQdso2AT8rHIEUMRHkSeL9YMz0oWRLKYm80BWpjsKyQOrqyyorbehssqEkjID8gvFqFdyQWHyitG9 + Yks4KJ4FshxqZGareExKCemZCh6jHIkU3dJIWiKJj4UBnETeJaZVvmoAJySKrTviJFAMEnFsp/AohTQN + tDCBxWhflwHMa0KEhBNhYq06MYWsG4IZK1fN30jWlwh+JjzcTUIE3xOIjKCIjVEhgW2fynZMZZumso2T + MzRIpIgRI3/jUxQSxAhgMUo5JV2Yv55w5OmRSwGUk0PRI+7ML6IAFOZvOQVRpQ+qiJrvYUR9tRGNTjPa + 2yzo7fHDwIAfRoathEkygUdHfTA+asLEmBWT8/wwfzzANQKY/Xx0wIbeDh90NOrR0aRHfwc5dpcZ/e16 + yfRtI9dqIR9rb1Ciq5F81snX60zoKDejlkItJ5aiVIjyAIIaKD6IojTIDTEU+cIEFn8Y+JvZnhTxUeT5 + wgDOYttVZ9rQnBuMzqJQdJWFo708knHtMoAbK0KIIDhZT5zl/qiv8EV9mQ11EqwShPnrlGClLrBIaKyw + MRcEoLMhBL3NYRhsj8ZYTxwm+xP/pwHsFOavP7qaAyR0twVI5u9VDPYGY2woAtOT8Vi9PFMyVretL8S2 + DXnYtaEAezcVYN/mQuzdWID9mwqxb0P+HPKk7QFuD2zIxf6NLuzblMvv8P3N/O7WPOzZkofd3O7ekkuI + bQF2bhXIww4+37Y5C9s3Z2MnsXurMKC5zy352LuZ+5WQj2s25uMg931oWwGu3Ukhu7UE23mMs0vs6O+O + kOKqusYPzW0xaOtORjPrvbM5FlW1kcgr9EdWrgXpGQbGuFjn1xXj2Q4L+50V6RT0qck65goxbbteMoBT + GftJCZ5IiPVAYryYHvoHiOmkxZTnYu3wRNaUxDA50sKUyIlSozjaE6VRHiinpqsIVaMiUIlqXxlq2C9q + fGSoIxr4vJF9qJF9qTGUz8UfX4lytKcp0ZmtQXuODk3sbzXpnihL1aCQdUoYwLnMs9lZzAd2d2Rc3WaK + mGOcMa7FKGURq8Fi+mfqdJcBrEZAkJLPVRKCeUwhYcIEFiOBhZnBuCaimKfjxXRqbIOMFAMy50YBZ/J5 + JrV1VoIO2cL0TfYhTMhL9UF+ujcKM71RTG1bwuMtcehQKmaCkAzgCLQ1RqKmwh/FBWIaR+aFJNfav2nM + A5npKun488Sf5EU+KCo1obTKZQBXSQawL5z1VrTUm9FVb0RvnQH9tVoMVntihPpkrNQTk8ydYkTRuJ31 + PEuBJcybq0u8sJmf3dHgLa0jeetgAO4ZCcaJPl/cQe17rFWHw6zrR9otuKUvCEcGQ3GI/X9Hyw8G8EyR + J5ZxP0uKPTFdrMFksTvGS6hpyScmuJ1gnZ4oVWKqTIXJCjXGWHcHWY97yAHaWcvFdMxiDW8xxbNATZE3 + KvPYPjkathFro5iqnLyj0C5GG3mhMFvL171R6mAb5FlYz62ozrehttgPTqKp1B/NZQFoq2AsV/qjvYqo + 9EVbuTCvrJgeSMbqCQfWT2Rh9WAqVnbEYjXzwfr2WGzujMPWTm5bo7DGGYyV1f5YUxuI9fUh2MpYuWHM + gftm6/D8viH8/NalePfutfj9yc3f43enthBbv8dvT/8bzm7Db89sxa9PbyY24p0zG/D26TV469RK/PLk + cvz81Ax+fnIpfnrvQrx61yReuXscLxwfwdNH+/DIDe04fdCJu3dX4YY12dg1HY+1Q/5Y3GHCJPOzwFSj + N6YajJio98ZIjY5trEFfmQbdvEYCnWXkOKUadPE6CTOls9BlAPfwcT9fE7PP9Be4o5+8cyBXiX6H/D8g + pjjuJvfsz5FjVEyTWkXdy99a0eSDVS0WrO8OwJquAMy2+mKx0wcLa1lXyg0YKvCU1jLsYTwK9LIf9xPD + fDya7YF51MvjuVqM/9sIYLEGsGTe5KulaaCXVflgUalYX5H9JkWGHtbF3lQ1+tJc+xpkHhCm5yD3NVJo + ZH+3kCv6En6Yx3o0SC7R6+C529XoyGDeSFegK8MN3WJNRv7OlBgJyBo6W2HCCmEE8xim+dkFmUrGiwrD + 5BK9aeyvwvwlh+hIlaGXxz+Y64GhXHeM5Cgxj220IFeGVWybzYw58T/Injo9dpCPbuB1mC1USaN/F5O/ + TOd5YDpfi5liI9ZXWbHN6Y99rD3XNPnhkNMkTQG9p1iBPSVuuKbCHUcYo8ebfXFvexBOtvjjbtbZk43k + 96xdj42m4GR/PI50RGCnM1AygAd4rm1sEyfzSCXzTWGGmKFA5BSttAZwbLyPNPVzeLwJ4TFGBEVo4Rfo + DquvXBqhFxAsR4R0sxp5iVg3MIn1PE3EnAVdtdEYcMZioD4KAzXMW0X+cOZaUWF3jf7NiBWjfz0RGeKB + sBB3aSRxjOCirBHp6T6wCwM4yzYHK3KpN/MKQpCbH8QcZ2N+NpOrGRAbp+P3tORKWmpXHaIivSQzODaK + r/G5QAyfR0domI/dER0pDGDy1GQjc7IPc7GPdNySAZxnQl0p82O1DZ11VvTU+2CI8TLeIkbQa7GkSY3l + DWqsrFVhdaUSG6s8sIPXb6/TmzBiV6UXtpa6Y2OhwgXmtO3UDvubjdjTbsTGBubAGiUmS2XsazJ0UWe0 + 5MrRkOuGOsZTPWOruYKapMYLXU4v9Dg1EvokA1grrYU+VafFojphAHtKBvAGpwe2ONXYRc16sE2H67qM + uGnIF7fOC8Eto8G4YcgP+7t9sKVBw1yskAzdlZUyrK3l8Tfyuy1e2N6iw04xQrjThH3dVhzosWBnq1Ya + /TvDz09Tn43muTEm3FAdJ0NBlAzpYeTIrLOJ5LvJrLn55LGdzK8z7YlYP5yJ2d4YjNX4oIF1pJzxUM1Y + qGJslBMV3E8z+ehoeySm+pIx0BxFLRbMcw9GXbE/87WYmYhcO4Z8ME5OfqAgr9ChiDWtlLFQkueFkmw1 + qhzuaCr0QruYql7crEJ08HGbtESgO1pZu1rI/wXEsoE9Zcx3zBFjIudU+2BeBXMga9FwjkoaaTnO/U1l + E8xDVzHJfUwxHqeoyxaUaLBIrFnP2rmUtXARr/0CcfMSY3khsaRIrPerwgox2pffXZWtwCrW0NV8vLqA + 14q/v7nGhK31FmwSJjCfL3UoJBN4HvX0QuaMlWynTeky7GI73cy+cbZaix81W/Gz7hC83hGARxotOF6t + xzWVWmwr10qjisUNW2Lmgr5sA7odrOu8DsL8aS/wRWOuCTXZPqjIFnFJbsGtNJsT2zOT/CLdrkUa62Vi + sloygCOpYYQBnEKtKXSfMICzmRscGV6EB7LTqT/tGtRV+KGhhvyata+BtVPETRVrcnG2J2swdRkhHpfy + d4qpYx3cfxb3aadecpADieUwHOKG4DgPxAidxD4UIEboksf5civM38AQaj9y/gByLz/mGjEK2JucT0wB + 7U1t+L8awH4KWP3FyN+rcION2sHv3wxg8RuBwgykRksSPCzTjKL8AJQXh6K8JEia+UoYv2I2BIHsNB3E + 2ub51J455IQZMUqksv+LGyDy2EfLEtzQSP3VzTowyuu5oEBJrqPCWvKY7fUeONSmJWey4LYxfxwZ9seu + VhN5EPudZACzhmaJm5IMrKfURlnMyWmuAXRtooYxVkT/nMxn32O9W0a+M8t2neHnFrKuDSezRiUyfzAu + SyN5PDyuLMZkDmOzmM+ro+VojFOhNV6FNsZUe7wbOhlT/ayNExkqzLKGbSn1wq4qd+xnfjhc74a7WpSs + GVq8MGLAq/OMeG3UGy/36/GjTk88SU33SKMbzjbIcdJJ8PHDPTo8Qb342EggHhoOxZnhaBwfTMB13QnY + 3pyAmZo41KZbEReklvScNPrXW4zWVcLHRwWTibAoYbaoYLGqJTPY108Nf3+xFa//YACLqb3/hwFskkvm + r5H7FLOIBQQwd7B+pZNPJ7IuhQTKEchrLtb/jaGuSGGuyomnrkhSoZp9WhjADayFLXli2QsjesptRABa + i8idM8nR45RIi3RDSqQaSZHU/YLbs24JAzg8yGUC+4npn4VenYNrCug5A5jbEB5zWLDrxiRRjxJZr8Qo + YHEzqCPNS9IixRmezI+eqGKfq032RGOyF5q5bWWfa+PrbenMbZlaaeBjE2OwiTqliX2nifVbMoAJlwHM + c5AMYH/mQepduxHFCRpkR1Frs39IUz8z3mJD5S7zl4jluQkIwzyOeichhjlBmL9xLiTGihs1rhrASskE + FwZw+r8bwKJ+R1HDhauR+l8GsFj/12UAe0nTQBew3uYL85tbcdOrg5wjO9FLMn8zqAVdUCGd1yhDGg3M + 3JFKrZbGHEROl52i+g84kpUSxDT0ebymxeT/YvaksnzmvTxh2OokEzkzldeSsZWaQM30fxjALhN4zgBO + dEcqY0eMBLYzH+Zm6lGQLW5g8UFTTSQWTZRSWw9AVpEag8rUOFRnJqC5IB2bFw7i8TtvxC+fPYPXTh/B + mW0zuGWqHRvq7BhLC0R/kgU98UZ0kKg0UdjWhrAzMtlJoNCsYwP22P2xsDoJ24Yqce2iVty9eRxP3rAK + zx1dQ/K/Aa/ctQYvHluOh/cM4+jCCuzvSsM2kq1tZUG4oTkOJ4YycWYqH3eP5pBghmKSJ9LDCz8YpcB4 + IhNKtgnrKsKwtTEeezsycN1QnoQdHalYxA40RMHaFcviyc7fzc4xEueFBckGLE01Yg0T4tYcM/YW23Co + MgCHqgOwp9KGDSTGSwop7lgQR4WobDBhsNmM3kYd+lv1GOnyweSgGUsmzVi51IK1K32xaoUJK2dIrJea + sGqpDSsX+lGAGTFJYTnRpMNkA7ckyeO1BgxTLAwWk6hT5LYxOKtj3FHEDpkXokYOAzI7hJ0ymMEVQhIY + yKBjARB/HiUz6IWg7qaQXtAQgjUtYVjXQDFS5o2V2UpsynbDfooWyQDmsb6zLF4ygK+cbQae78Z3r/ZJ + wNMdwKkG4PpCfLMuEZ+PBOBjkqd/dRjxWZcZX/bZ8EWvFZ+STH3UZiB0+LBFi3+SaH3Q6IU/17jjd+VK + /JZE8Y+1PvhnWwg+GojHn0dS8GJLKO4q8cZ+EpxZEvPRTAZ/qga1LJxi8e9eJoiF+QZsoQC5udkPJzv8 + 8URvIF4eCmCCNuOVbm/8uEePV3o88eaAF94Z98YfFpjw90XC8LXi82UBOD8bhM9mrPhkuRH/WmPE55vM + OL/LF99dFwGIKaBvswPHc4Hb83HhcBY+OZiKP26JxivzffBIpxJnmxU40+aOe1o9cRevz50t3riD4u7O + Bh/cQaF3l1OHexu0uKfBAyecStxdr8LxOnfcVOuFgxSDOygwN1HobKzWYRM/v55EakOjDzZTHG5ptmAr + ifTWGg02FcuwlST5UIUS9w/6451tefjXsQZ891APr0En8CyvwbNVwJPl+PZkDj68Lg4/WWHEA/1yHGuU + 4bpqGW5skuOOfi+cnrTgwQV+uH/CiNMDKpzqJrHqleGZeTK8uUyO329V4/Obrbh4dyAunA7DuUei8eUz + cTj3aga+eqsI3/y1Ht9d7MV3340AGAfE9psB4Fwb8IkT+Fs18LsyfPtmPi69mIsvHnHgnycceGs/hdcS + Ew53UhQwFmYK5gzgHA+szvXC5gIDdhJ7C72xQxRiktYtRVpsKvWmuDBhY60Fm+t9SRhtJPdBuI2F9eEV + aXjzQDnev7sZ557swZXXB/Hdz3rw3Vtd+OrNdnz2YhPeO1mMR9aF4EifBrurZBSMMjyy0oD37ojGuWfS + 8PXLSfj29RjgzQh890oALj3jjXMPe+Dz+xWSAfyvs274VBjCj2jw+eNeOPesEReet+DCjyy49JwVXz3j + i6+fsuGbJ31x+Qk+fsxXGgUsDOB/3eWFj25zx4e3KPDRERX+dbM729YLX96sx5dHvHF+DheO+uCr2yy4 + fNyPWxvOHbXi3DEbLt3J5yf88PU9Vlw6YST0+OpePb65z4jvxHTQ9wfh27OhuHgyFF/cFYKPjwXjT9f5 + 4rWNXnhksQJ3jZM4D/Gc+5XYO6jFzgFvbO0zYG2LCpuaFLhh0IDHNyfhj2dbcP7nC4EP1uHKZxuALzcC + n67FlT8uxCcvduPp3enY3WJCT7gbCsUIYAWJnpZizU+HtghftEcHoTU2BC1x4ahOjkS+PUZaTzc9Lwkp + hclIKklBAhErTODCdEQXZCA6PxNx+VlILLAjuTgTKaVi5G8qMiqSkFWRiKzKeNgr4pBZFov0UqIkDhlF + scgoTEBafiySHVGITQ9BVEowopK5TQrjNhTRqSGIz4jg+zyGgkRk8zftxSk8ljgkC/M3NRSR/HxEYjCi + E0MQnRSMOD4XSOT3E5KDEJfgT7Fso0im6A/zRkSIAeHCBLZo4K8nCVcrEemhQKbeDQ0kcqvzfXGsTUzH + nIRTbeE4lG/Fklg9akxKJLC9gvl5C2GQu8xfExGlkaMgSIVe5uHtnRG4czoLJxfn4raJLGxpisK8XBsq + wkgsdDKE8fMJbPMcdxnqveWYIXk46gzBi9NpeG9rHs4fq8flU6347nHm5Zfm4cqvl+HKX1YDH23iddyC + Kx9vxLd/XYnv/rAMl385Hx8/2oJ3b8zByytD8GCfJ043qXCiWoljFLe3lZH0VjAvVKrxYJUCzzBvvdam + wdt9evx+2Bt/nTTgrws0+Pu0Ev+cUeDDWRk+WStjl5Hjwg4FLu3zwKVDXrh4kw4XbzHgwm2MhTut+OKE + L86dYs49HYLzZ9hnHwzDV49G4aun4vDNj1Jw+ccZ+O6nDuAXhcBbzCE/q8Oll6rxl7OFeGFPLG7l726o + l2G+mFrPLscAiWq3wwMdFARimqsmormA5F6MBiba8lxozZahOYPIlKHTIcNAgQyjzKdTFTIsrpFhOfe5 + ppm5lfXh7NYYvHpLLv74sBNfvjrIfDfBuBjG+Z8O4NOn2/CHowV4cXU4Tg554yhr2L5yNdbwWBYkyDAe + r8BgpBK9ocIAVmAyRhjAGuzN0ePWUiPud1rwVKsVL3faXAZwh4k1zoBnnZ54otodj7IOPsK2f7BMjjMl + YtpnGe4T5m+hDHcT95bIcKZSiQdqPPCoU4vHmw14ptOCp7tMeLjVCydred3KZbi1Uo5rGtyxrckDK3hN + J7jP3iI524bCqEiF+mLX9M9O1lZhADeXGdBUQXJdqUFztRqt3H9rnQea+Li+TEEhK5dQX6YkyaMgY+1q + 42daeMwt3H8Lj6m5TIbWCjm669QYaPLEeIfLABbLVyyf50/4YtmYBbMTFqyctGL1lDCBbVi3MBAbF4Zi + 3YIwrJmMwIrRUCzuC8BArRZtRWrUsm3LU+SoSHFDTTrFCTlOXaY3aihCy0lKC2NJQv/NAE72VUoGcBjj + MphxKhBk4NZbhVDznAEcZkVmfCjy0qKRlx5Fgvw/DeCkODVFv4eE5Dh3JPJ5QqyKQsCFRIrIJCKFwimZ + SBKfS/ZAKsn7VYMyhUgTBrBAhh6pGTpCj7RMAzIo+FN5Hokpemm61xhyybhEHeIpIMRUfsHkcIHCYAni + NpCCn2L+eyPYKqPY4u8n6KV1hDPS9XMjkUn8sz1QUqxHablY85JiItcDmWI650w3ZFJgZ2QpkM7nGVnC + HHEh3U4BT+Gdki5MUwWS0tx4XBRFiRRF7NfCBE4UU6sKAzhFLZm/Vw1g12O2TYoGiTzvJIq3RIqYSLZV + WCSFH8WVMIFDWDdCpWmgf5gKWpjCV0cGx8RppJG/YfxcCL8TTF4ewu+FcSuBr4lp0WLJ2a+uAyyQQBEk + rfn7X0hhW2RQDArzN6/QBwUFRgnFxT4oKfVBOTljZbUF1eQUtTVW1NdYvkdDrRlNDVa0t/qit8cfAwP+ + GBnyxciwhfCRME9MBz1ixviIFZNjfpIRfNUA7iH3bWV8CnS3GaWpoLuavdBar4CT/MNZKUxgJdqdXuis + p0CtM6OrxhdNxWaUUNBlRcuQFSUnWF+iKfaofVLDvRDFvh1I4R9AhFDARzPPJLHt7LEeqMyyoTE/BB0l + 4eisiEQb0VwRjqbK0DmEoakqBI2VgWgQ68yV+zGe/b43gMWohau4+lpjpS/zQCA6nMHoagxGLzXCYGc0 + xnpjMY/4dwO4o0GYv4HobgkiAtHTHojeTm47hBEcgL6uQAz1h7KNojAznYxVyzKwdoUda2czsGEFMZuO + jQLL07CZ2LAshUjG+pkkCZvmsHk5t8TGFclEKr+Tho0rk7FuDmtmk+bA3+DzVSsTsXqWWJVIbZWEdav4 + 3VUpEjbxMxtWcJ/cbl2Vih0r04k07FydgR3rs7FjQy62rMmjLsvCyGAM6utskgHc1BaD1q4kNLbFo64x + RhoBnF8UiOw8G2OJOSRNz/7ninFHjhW5ub7IzGCcpnlLU/xlcivWWBNmsPjTIzFW5BvX9NBXkcCcInKO + yENCq4k/lzNYU/IiVSiJ1qAyRoMa9ovaSHfUh6rQyFzR7K9Aq58Cbf6sewFuaAl0jQKu47YuTIbGWPa7 + ZH4mwx3NjA0n9VRlqgeKqaUKGNdiyrA86qwc1tRswk5enuXwhN2hlUbGpKYZmJ88EcX8GBgqRvi7DOCA + ED4Xxu+/TQHtmgbaQ4I0Au17A9gLKUnMW8lzbSGQzOdJOtiZ/7KTjXCkmJGbakV+hgWFdsYEdXlxlt6F + bK1093od+29HUyTam6JRyz5dVMC2ztJy3wqk8hwzMlTIzuK55HihgHqiqIT7KDOjrNoPlfWBqK7zR02d + Lxp4TcX61V11Puit1aOv2gsDrIND5e4YKXaXRpvMY84U6/yLKW4XO5RYWehBPaLHVmrwfS1G6gpf6io/ + 3M64v4W17wi13k1NWmka6P/NAF5WosGSAg8sLvLAwkJ3TBWqMVagxEihAsMFCm75uMgNYyUKjJcopRlL + BksV6CIfaCMfaCmWo7FECydz2VUDuIo6uCxHrEPImsjzFhBTwzmkP4fEiAEPFJBnFma57tYXI5/Kci2o + LLDwu2bU5FtQJ6Z8LbTCWWRCQ7GV3MCC1jK2Dfv8kuE0rJufj41TudgwloV1vYyxjjisJedd2xqFtU3h + WNMUhlXOIMwyZ6yuD8aG5nBsbo/GodEs3D1bi+cPjuFXd67C76WRvmLUrwu/PU2c2vY9fnOa2zPb/wPv + nt1KbMa792/GO2fX41dn1uHt06vxyzMr8cvTK/DmqaX46X2L8fOzS/GTk4vw4xMTeO62ITx6UzdOHWzC + 4fUF2DmdhNUDQVjUbsZEo/ccjJhoMGKY175XGL8l7hK6eI06S4mrBjCfdxR7oKvINQV0D/uAMID7uRVT + QA/kqyQTuNfhhp5s8qAsck2iw85rxr7TTvTmyNmnVJgk15oW06bWG7GCNWY5+8WSRisW1BkxWW3EPPKx + 4QIt+nLc0ct6LgzgPl5XMRWzWINXjAIedWgwRs181fyVtmKqZ/bXMfLgSR7j4go95vMYxUjcDmHAspZL + I55SqDlYH8X+hrgPMcp3MM/AYzNhQU0ApuuCMV5hIU/Wufg1OUJruhvayQva08UoXvbPAk8slNYZNmNN + jQ3rq61YU8bzydNhJtcT08wd49nuGBSGMblEO39fbPt5/CPiWPM0mMjzwIJcJZbmu0lTPm8Xo3id3tjP + 67Gb12Mr22lNqTtmGCOL8tVYwO+M87zn52qxotSMDYxhMSPYobYgXMc2PFBrwL4KD+wpVeNAhSeuqzbg + xmof3MIaf3OFETfymI+WGnBvczBOd8fgzo4o3NASiu3OgO8N4Ha2iZO5URjAxeRpwggVBnCcMFSjDYiI + MSKUCInSwz/UU5pi1UxeZvETPEchTXcf/d8GcLYZrVUR6K6NQjdrRVc5a3GBL2oczG3pJuSQd6ZEidG/ + HoggxLTNwgCOErPRUOcJAzgr04Jsu5UQWzPrig15+UHILwiCw0HummFDcooPP++NBPLC+Hgd4qg/Y2LE + eqI6JMV7E8Y56FlfxMwTnhDLa8QRaUkiFxthT2FeTta6DOBcH2mmkOYqK9qqzWhne3aTlw9Rr8yrV2Oi + xg3zq9ywqFyOJdQrK0qV0hTe22p02ClukOH121yixjpxffNlWFsoxwZ+Zke9FlubdFhVK2Y4kGOMOa1P + zNJENDFG6omaHAXzkTuaysmjqrXoJJfqqveU0FvniaFanWQAT1KLTNd6fm8Ar6fu2VyvwrYGFfa0eOIg + dch1/WYcGQ3EjcMBONRvxZ5OA1ZXK7CEeXQJc+osOdkGfm9Lixbb2/XY2eGN3d0m7Omz4AD53EFiN7+z + gec8Q301nzpMrFvdylgoZ03NFVP8kqsmBJEzEwmstxncVqdoMVYbgZV9acw7SZhuC0Z7oai5MuoZGUqT + ZchnTBaQWzuLDOipD8JQawz6WNc66sPY5mFwlgWiotBCbSK0hhuSE0R9U/G6k8OSo1WWW1BRbEAV80Uj + eX97CflkqViz3Gtu1gLqqAIxmo+ajvmkJdeFjnwNeqgBByq8McZrK8zf0RIdhvKZY7KVGM5WYUzEMON/ + Hp+PE6IOjmQrMMYcN854nGCOmc9rvLTBhBlp+npvLKzSYAHjbyHr1lLm0RnWspXU4mtz1VhPnb7BocJ6 + /v565qUtlewj9RbsbLRhZ4MNW8i715ZqscjuhqkkGaaZM1aluQzgvcyjR7mvB5kjX2j3xxu9YXihLQD3 + 15txjPs5UOolGXereA6Li3gu5Aj9Dm/mXB/05dvQVWBjO1jRlMc+zdcqpZuhvFkT9eQN5B6M+fRMxi01 + pkBCkljORmgOXtNY0e6q7w1gB7+Tk+lF8DHrqph5xMm82ewMQROvYVMtOXaF4NGsqyVGVBdTr4ptEX+X + GqTUIaZ3FSODqcXI8+xJ3FeGN2OPcUu+Hyn0D/uPGJUrRv/6k8MJDSVulA0mhxIIDFPCL0guGb1XzV/x + +KoJ/P0U0HO4OvWzBP8fDOCr22BhBkYJ/WpATrYNJQXsdyVhKCsORJ7DRzJ+xdqfqYRYCzSHXDBHTFMb + z+9EUjcKfipG2rKtShKpc9JU6BQ3AfGazye/WVHpSe7jKa23faBNixt6yZuGrLhJGMDtFiwuYUxTl0p1 + KduLfMiEkXwf9JO/dWW6SyOAW0QNY38Y4OeEATzNureMtWsFec5MBvsi42IwQY52xmQNNVQxOW8OtaOd + 5yZGAIupoKti3OCkbm+KVaAxWo5mcWNkFGtTvAxj1LfLctTYyH67s0qF/TVy3OiU4XirHA/0qfHciBde + nzTizXEj3hjW4bUeDfugCk+3uOHRJhkeFGiW48k+LzxLffj0qC8eGwnAg6MRuGckHjf3J2BfRzxWOmNR + l2FFQrA7/Iy8VgYZfLzlMBoV8DGqYTQpYTTzMSFMYAGrTcnrJNb/Fa/xGptdBrB4/t8GsMXsJpm/Yrkg + P1/q6WBqCNYYO/m04N4RoQrJ/I0McUN8pBLp1Op51NXF1PLfG8C8BmLJrQ5ygq5yX3SVuWasKEnzpCaV + I4ntmUQ9khCukqZAjuS5iBG9ESGe0ujeAHFcNjdpKyCt/UsIA1jasm6GBKql5ayiqBGEmSo0UDq1Txbj + LIe6Pp9auCRFg/JkD1QlaeBM8kRLCnU082pHho68RI9OaZpn5r4MTzSk8zOM4UbGZZOddYM1XEwBfdUA + 7ikOQFu+L+qyfFDEfpsV5YYU9tk4nkss40uY4f/TABY1UiPplgRh/LKuCojH4r2YcNb7MNX3BrD4D0ks + JZbBGpwa54XEaOaS/xcD2JHsiZxkL+QRuTy/bCIrkW1AnWWnNhT5QUy37IKSNUCANUCAtSCNeSSd8Zbx + X7AnuEnIZkw4yPfyqfmEJiimRhAQN4QKA1ha//d/MYCvGr+ZKR4SrhrA/74VOSHX7o38bB8UOExoJL+Z + nizD3u1DkFUmh6EmLQqNjgR0l2Zg64JePH77Abx05jDOHliNQyNN2FSdhWl7OEYSfTGa7IvBRAv6Yn3Q + FaNHazQvKoVjTZAbypmgakJUaIkzoNfuj+nKRCytScGOgXLcvqofZ3dP4ckbFuOlY8vx5ol1eI3bx3cN + 4NSsE3dMFuPmnnTcziJ8djIXDy0qwr3jDuyuDsF8NmYvL/xQNAtaohpLmeg210RiT1syDnSl4/rBHFw3 + lIPdHUlYVRmE6VwzBtg521jwhbjui1BgPsnhikwfbCGh213ii2sqAnBdVQAJKItamQmbyr1JjLywuIpE + pdEH050BmOjyx2inBWM9FkwO+WLRuD9mFwdg/apAbNkQgvVr/bF2loR6hQ3rVgRg7ZJALB70wSQT52Sj + FlMkQ5P1OkyQJI9WsGiX6tBLst5m90J1jBIlLA4FbLvcUC2ygr2QGqBFPBHp54FAs1xaTywqQCxK744G + FsOxqkDMOkOxui4AqygqV2aJtYzdcCDbDbeQvD3UoMc7y+Lw5Y2lwP1NwPNdwI97XHiyDThZjyvX5OHS + qgT8a9AP/2jxxj+Jj9pM+KzbF592WaXHHzTp8UGzHn/nOfyD2w8aDPgzydtvqzzwbqUX/uj0xT+6ovHh + aBreHU3Fw03BuJ7ntSmbYiNDg750LRpSdahksFQnMsiZDIbZkZeRAO2hiL+5yYoT7VY81GPDI10+eIzt + 9Vi7J57scMcLTNY/YdJ+m8n7Twst+GCJLz5Z5o8vZwPx+QorPltlxhcbzDi/1Rdf7Q0Arp0zgI+5DOAr + t+fj/E3Z+PBAKt7bHIMXJ0w426rAXXUsELVK3FIt1gvwxE01WtxUpcNhXpebidtJhu+s0+JOpwZ31Lvj + Dm7F6N9ra7ywh+JyY7EGa4vE2jY6rK315jUwYE29wWUEUwhtItHdVClINEmqQ4Y9JMv3dFnwxlo7/n5j + LS6dbAce7+R1aACeqnbhbCE+uSkJP1ttwsNDbrizRYbbWvm9QRUeW2TGS2vD8OaWWLy+NhgvLjHg2Sk1 + 4YbXZhR4Z707/rJbi89u8cX5u0Nw/nQEvnwkFp8/k4AvXrXj4tsl+Pp9/taFAVz5buwHA/jrAeBLYQDz + vb/VAL+twJU3ivHVC4X44uF8/PNEHn5+IBEPz1hxQ6cGG8SdgwVeWOQgqc71wKo8LTYWGLCtgAQ8X4/N + 2WqstSuwju+tK9RiDcXmmioj1tVQ+BF72wJxdCQaD67MwE8OluHPJ5rx2RPduPxqH755sxOX32qX8M3P + OvHhE/V4flcs7phHouh0kwzgh2d1eO/OKHz5XDq+eiUZ3/4kDngjEvhJCC49b8K5x7zw+UNqfHZWIRnA + n5xV4rMH1Pj0YQ988aQeF54x49JzFmn07zfP+ePbZwJx+alAXCG+eSwAlx604twpIz69W4wAdhnAHx5R + 4JPDKnx6xB2fH/bEF4e1OEecP6LFhaMGfHW7Cd/eIUYB23DuFh7DMYs0AvjCXVbCB+fu1BGeOH+XJy7e + o8c3Zyz49sEgfPtwBL56KBJfnArHh3eH4S+3BuKXBy14dr0nzs4occeUEjcMKbB/QI09A1rs6NNiQ7MC + WxrluGlAhyc3J+APJxtw7qfj+O79lfjuE7EW8Frgo5W48t4CfPRcNx7enIwtTgM6SPTylDI43EiwvOSo + 89OhOdwXrTEkv3FEfDiqUiJZcCKR5YhBZm480gsTkVqShOSSZMQXJiEmPxlRuSmIcKQixpGGuJxUJBak + 8P0kpJcnIaM8HpkVccgqj4G9PAoZpZFILYpEckEEUvIikZYbjdScKCRmhiE6OQCRif4Ij/NHWEwAwriN + TAhAXFoIUrKikJkXh2z+vr0gHqnZkYjn61FJrs+FxPgiNNpGMW9BaJQVoZFWCngLwiNNiAwXI39NiA73 + QWyECTERPogWJrCfF4JI0kI8KJyJXG8V2ijaN1Bk3N4ajof7I3Ci3ordJErzQ5So0MkQL5chVKmAjTDK + xPTPMgQoWHSNKtSTFMynkDs4kogTy3NxYmkuDo9lYG1dJAbsvigM8kC0B7/P7ySy3Qs0MjQwfy+JVeO2 + hmD8dJkdf91dhG/uagQeEFPCD7EPTwF/mAU+XMeY3ApcElN6b+c13QR8vB74ywpcemUA/7inEm/vSsZz + 883Ml1445eQ+yyi0SmW4s0KB+6rUuL/aDY/XuuHlFjV+0aPFe8MG/GXcgPfne+Jv81X4x2IlPlomwycr + ZewyMpzbIselnSppPeDz13rh/I3sszcb8fkxMz6/3YIv7vLFFycCcP6eIFw4FYRLZ8Nw6eFIfPV4PL55 + NhnfvZgOvOoAfloOvFbNGCvHX07m4eW9cTi+wAdbm+RYVCDDIIVAD0VGeyZ5AQVBc65yzgBWo+XfTGBp + 2qssmbTukkBbJr9H8T7EfYzzPKcp/pcxh2/qUOHIEj88d302fvdAAz55sQ+Xf7WA7bgE3/x2Chd/OYJz + L3bjb/dU4KdbE3D/PBNua9fhAGvXOoecXEKG0Rg5+sPl6CMxFgbwBMXcqlRP7MnRS7NYnKphTSIHeL7N + jFc6rfhxpxkvthvxbJOWbeyBRypVeKBMjrM8rqujf+9hvr+LxypwD58LA/ihOk881mzAk+0mPMta91yv + DY91GHDGqZIM4FuI/bUqbKmn8Cp3w2Qxj4nfFyOj6/NVqCvUoKHIACfrplhHsLFYB2cpCXSZBxor2H7V + 5Dj1JND8ncYqdwpZpYSmag+0OnVod+ol87ehQknI0chjbuCxNbHvdFQp0Ov0wHi74QcDeMxlAM+MWbCM + 7bZ83IzZcRNWjluwcsIXq8h/VvAzM0P+WNTri6l2M3oq3dGY64YyCr/COOYaooICpSZNO2cA61FGDlAQ + S7EQ7o6sUHfJAE6hsIihAAozKBCkc0MgESAgDGEfNSJ8KbLDrCTeIkfFIjctkhBrAPtJ5P3qGsDJ5EaS + +ZvgjkQKpLhoBWIi5YiOcCGO4kFAjM5LIOIZj2K0XhLJexJJfDKvu4AwgtMztcggUU7PciHDYZTMoZQM + g2QAx5DoR8ZoEMVziY7VMQdpEEJRESzA8woh9w0S6wVRrIvpoMW0TmINtwTmDnFXrz3DG1kZFBYk+ZkZ + FHO5JOZ5FBGsoekZirn1e5lv2P+T0wXkSElX8jnFRJoYLSsMX4q5ZO4zWY74JJ4fxbYwf10GsBwJFAUJ + c2ZvYpKKW543X5OM2FS2E69LCkVZGkVZSoYe0WyLcLaZGAUs1gMW21C2m8sAViAsUhjEKukP0whCrH0q + pnwOomAPILcW61MFBsgQRIQQ4g+RcO4nmuJTmMBxCRRqRAwFUAwFTxyPJU4a/SumqKZoyqTAy9FJ5m9R + iQXFwgAiysQfZpVWVNfYUFvvh/oGwukHZ71NMoMEGvm4yWlDa7MvursC0Nfnj+FBYQLbMDoiTGATxobJ + m4dMGB20YN6wDRNjvhgf4fsDVvSRezbXe6CpzgPtTTp0txrQ1sDYYi6tYYzUEk01asYS66nTBx0NNvQ2 + BKKrPhD1RUYUp6tRlKKkIKdgS/Xi1hs5sewrQWxTK9uEfSCMmiiGAj6RbZkR646ybBucRSFoK49gDEaj + tSoKzZURjNNwtBLN1RFoq41Aa00oHwehsTKAseuP+jIK4lLxZ5Xv/2IA+31vAHfw+Dobg9HXFo6h7kiM + dospoSMlA7i7KYDviZG/wgAOlkzg3g5+tusH9HcHSWsBjw6GYeFEHJYuSMDMwkTMLIrHsmmC2+XTsVi+ + MBYrFsRg2fxILJuKwMxkOJYSy6fCsUJgQQSWC0zzfWLFomh+NxJLF0diyaIILJoOx6KFLkwLLOJjYgnf + n1kchWVLYzBLLF8Uxd+KJCIwy32sWRKLdUvjsH5pPNYvicPqmUTqr1SsWZaB5YszeO1j2Ed8JQO4oZm6 + tiUWtQ3RqKiJkNYAzsln/sg2SzGdkKyVboJIzTQyBs1wOMQf92bGJ5+nG2FP84Y91UARrUWyMH7FFM/S + TSci3zBvJGgID+Yid6Qyr6SIP9ioU+2sKQURKpRHe6CWuaKBaCbaotzRFeWB3ggNBiM9MUD0Mne0MWac + jKNq5o0qPq6LIneg0G9MUcGZTm2dxn6TqEJBPPc7ZwDnOzyl/JFDOPK94MjTwSFGz+eZkWk3ISFRKxkT + gex7AcFiLW81/IP/PwzgcA0iuBUjzuJj2C7C/E1h3kpztUVmigEZyXpkJhqQlWyCI83KnOzL47GhSPwZ + yfYryfYmDCh26KU72OvZdzsao9DW+J8GcCpzVDrPLyuLdSFXh3xqCin2qcVLyq8awAGorg1ATS3jvsaK + 5loTOmuN6KmmjqZO72Md7C9RYoD8Qax1OkotPM8ul6a4XZbvgdXUa+up1zbxs7sadLix24Jbukw43ELt + x5p7Q50ShyUD2Ae39AXgyIDLAN7Z6oe1NUbqVU9MixFUwqjjb8zLU0rTBg/kkT+IaYO5HWS9Hini7xfz + vVIlugpF/Wbe4OuNxQrWbi0aS81oKBUj9q0oz9WzrXjtWAPymD9yWQcc5EcZ4k8d5sesVCVyxAhv1om8 + TLYL83RhlnFuVLA3ylmTKnOMqM41oirHgJo8HziZO4UJ3F0biMVDaazTuVg/7sCG0SxsGEzHms4ErGqN + wmxTGJbXB2OFMwgryElnG0OwvjUSW7vjsb03EYfGs3FitRMv3jCF35zaiL8+ugfviZG9wvglfiPBZfxe + xb+bv785O2cA37+F2Ipfn92Ed85sxK9Or8NbZ9bil6dX4WdnVhDL8KuHV+OXD/L5/TN47b6F+NHxcTx6 + pBe3bC7H7sVpWMn8s6DNgolGM+Y1Mo+Tj43Ue6OXerS9SC2ho1hMoapGG7ftJQS3ncUecwawa/RvH3X7 + YIkXBgsZb+RTgwXCBHZNbdztcJMM3xbW2mbBO1l/GwjBPXvz3TBSQn5U4YXJKj0WM/cvZq1ZUCdG4Xlj + XoUBI6V6yQAeYvz153pJJnDfnAncZxdrJaowlO2O4Rxh+BL/ZQCPkvOOF7J/kdOJ6aC7+Nst4uaPGBna + yVO7ktzInZUY5H6HqbuF8dnn0PIcvCXzd2ljOI+DdYxavEtMBTlnALeSKwjTS6xNPF7CY68mh6vzxQZn + ALmmPzZV27CuxIxVRd5YVqhj//Zk7KjQnybnb/LceRxDPH5hXE/y/BZS1y/m8a0oUmFjOWOpRoeDjUYc + ajZJJvCOaoP0P8FsqReWsI3ni5HD4tzZx+fn6bGCx7itKQj72oJxqNUfBxrMOFDnjX2V5OX87gGxhBTb + 8mCxHvtzPLA7VYFrslQ4WmnC7fVBOMzatq/WFxurLNKowasGcINdI62LXkQeI4xQMS1rrBhJG6Eld9Ej + OFKPwHAv2FiPLb4KaSpWMRovMFT5vQGcFEfex1wpjJKSLDPreiCaWCeaS4IYw2IqTfKQTB/mXdaEeG8k + RjKvitG/YRqEii3zpZjOOS5eLBnCHJlmYv0wI4vfycpkrnNYkJvjh/y8AOTnBiA7y4b0dBPSyAdTmVsT + EnSIj9NKRrBAGvNqeoqZ8CGMzJMGJEnLD4hpLsUoIPLHVL0LyV7IIe8oZT4QU8k3VVrQUmFCc7kWbZWs + M+Qug+Qyg9QZI+Qy4+T+85mXlhTJea14LXnNtjKXbmEf38D4WV3ghtlcGVbmy7CaeWwjtcNa8qOlldQm + JTIM87Uuvt9CXeZ0kB9ly1GTK3SK0CR68hU9OurZF+t16BQjgevECGBhAGsxWaOVDOCZOg37ojvWUcNu + YP7dXK/EjiZ37G3T4mCPD24Y9sOhIV8c6DNhB3Xb0lJqNh7PIh77iio5NrXwmNv12Ebs6DZib78FB4Z9 + cZC4hhpmb68PNjd58rNumM/viGndWxjPYo3RXNZVMeo3nn0glohjzRXLeORFKtGWb8N0Wzxm+5Mw0xOD + QdabumwVKhlPxdQ2DsalI84Ntfne1E9s50rWtdpgtFUHo6E8ENUlvijLNyM7VcMaqUI6+XcGa3dJsQXV + 1QGoZT2r5bVpKDfy2pjQXeGDnnJviPV9u6jrrhrArbnuPxjA3LbneaC7SIf+UrYjvzNSomP8izygRq+d + tY/aYYT5ZJTxP5LDxzzmYersAdbCoSzmsDw1RsXApgpPLBbmb7OZWx8sqhNTQXtgUZkaM6yjy4vVWMOc + upFxvpk5cht/Ywuv62bG9I4qb+xusGBvix/2twRgT5Mfttda+HnukxplGbEhW4Gt2W7YR419rEyDhxot + +BG55Ms9oXiixR+n+PlbKryxh/vcyHNdVeyNpaz3Y+Qsvdl69GQbJQO4I9fM+sm+zLpWlydqnBFlDgNr + oRjxylhlTklOEzeyUueQP8RTW0Tz2oh1l4UBnBRPvZQklvwhJ8rSI9fO2JZMYA05E2sx80lrUyhaGkPR + Wh+C5hp/amdfamZftPBxa53g277ScisV/P3MeDekipHFMcIEplahDkxL8KLGdEO4MHuFAUzeJtYADqQe + Cg6TI4xcP5zcKzzGE6Hke0HMN76BbjALXTiH/08DmPu7agD7MW8FsL+KkcZhwgyM9aKeNEp5pbggEOXF + Idz6IVfc/JegRlKM0Ltu5KxKybS2k6umU/sm89hE/0+jPsuOVaAoQYVaarBWsWY8+9NkoQdW1npjbZ0e + Wxr02MsYu6bbgGv7fHDtgA07WI8XlbCOst91k7P02Vm3imyYV2RlDTSwT3qhc24UcCtjRqxBL24emmZ9 + WS4MYDtzCX9vijxnII5xyXisiZChkO2YxfOzE+ImjWLWv0qeQ22sEvW8rvWRzDfUpY1EO58Pc/9LyPfW + lahYe5SsDTJc1+D67/x0txxPDavx+nwDfjnfB2/PM+BnA554tUuNFzsUeLpNhseJx9pleLbfA88PG/A0 + NeIjQ2Y8MByEEyNRuLk/Fvvbo7DSGYm6dDPiyZuFF2MmfLzdJAPY4K2CwaiEwYePTXJqfdYXwmxxg4UQ + W2H+/rcBHBzE/hDgzj7jDpuFn+d3xTq8QYEqcm8Nc75JuoEonZxbTG0cKc0Ey2sX7c6+OGcA/9sI4MYc + LVoLjOikDuwWs8KI5YPEetlJ1CRsSzFiNo7tG0dNIgxgUbsiw1gjCWEEB/krEeinkLaux66Rv4F+KgTY + rr6nkJYjEOsTx7HWJcQIzeNBzuoOO3WJg/muMNkDpfxNYQDXCwM4TYf2dAO6sgjy1h7GUgfjuD7VHXXU + MLXcOtNYN4hmct0Wct12ctuuAl9ytwCeE2svNVkB9ZU9SoEkXvvYUMY5zyWa/TeG5xMbrpTW/42NYC2P + 9JBujBA3S8XHuUxgAfH4vw3gxChPiNG/Wayzaay5KYwnyQCm7kmZM4Az+b2rBrCAMHuzCQc1X3acmtdC + rK3MPE89KGJL5IdkHudVJEYLMA6ZOxLZn5PiGHvMU6msIf+OdOYsAXuCywx2MK/lpquQT35TQG1UkOX1 + bwawfM4AZi5KEuavmGZaQy6gkbb/mwGckSxGD3Mfdm/kZfkgP5s1qMZlAO/bMQxZXVownBlhLDbR6ClJ + wrqhepzYsxz3HZjFNQvbsLIqQzJ/x1P8MZ7qj4m0IMxLCcBwgjCCzehL9EF3jAHNYeyQFJktJEjdiSaS + 3wCKshD0UiBOFUVjQ1surltQh+Nr2vHg7kG8dGQRXr91KV69cQFe2DOMx9e14OSCIpyZysNjS4rwxEwJ + Tk85cKghDMsoiCaYrBame2IhT3R5jje2VIdhf0cSDnQm4fqBTFw/lIX93SnY0RyD1RWBmKRw6mMSaWcA + iJHD0ynCAPZmcbNgP0XpDSTQN9QEYk+JD7aVeEsG8OpKPWYbTFjR4YsVA2EUU6GYGgjA/CF/TM8LxMyC + QKxZHoIt68KwY2sktmwKwcY1/tiwOgCbVgdjE99bOmzCFMnMVJMXpkiCpuq1mKjVYqxSSxLGQi7W9BXr + lzBwyqNUKAp3Rz6D0WUAeyHeX4dwmyd8DUwgnjKEMHkkh7mhPIXfLfLFkqogzFb4YSVF3yo7izUJykEW + +2N5Cjzi1OPdpXE4d30xcFaMNO0AXmgHfkQ81gTcU4tv9+Xg3LJ4/LPXhr84Dfir0xt/I4n/R6sFf2/2 + 4Wve+DPJwfvc11+dOvyj0RsfOI18TY/fkvj/muLndw0B+HNnDP44nIbXh1JwvM4fm7M1WMTkPsTr05bm + jdo0H5SRDJcnU6wm6ym0tBQ8OqwqM2J7NcVDvQG38PdubzLgzkYN7m50x72NSjzYqsZzvV54fcSA38y3 + 4K9LA/DxMn98NhuAL1b54sv1Nlzc5ItL2/xxeW8QcCgSuDkRuDUDuN2B747l4osb7PhgXzLe3RCFZ8d8 + uF8FjlXJcHOFG26ocMd1JLyHKkg4KfAPkvBcS7F4M0nzbXVa3O70xG0kvcfqPHCEEKN/t5dosJakaJZY + UabFSoqWWbbFSl7Xtby+64j11R5YX+aGNSSca+wybCVBvplt9tyiRLy3rxyfH2/ClQd5PcR1eKwWeLwK + V84U4tMjSfjlGhOeGJOzeMnw4KgSzyw14I0tIfjdwST8/cYM/GlfDN7ZaMMbs574yawCb61T4Y87tPjg + oA8+O+qH83eH4fzpaHz5aAI+ey4FX7zuwPlfleGrv/C3zg8B340DV4jLI8ClfuCzVuCf9cCfK13TuP6k + BJdfKMG5R4vxj3sK8eb+JDyw1IbrOjVYV07STtE1TYKwVBjA+TpsLDRga6EeWylK15EMrKBgXEEBuZIC + d5ZEdYWYnrya/ZPXeXuzH24ZjcaDq+147Zoy/OmeFnzyRBcuvdqDS2904JtftuLKO2yXt7vx2fNN+On1 + aTi5yIIb2lW4toXtsdwTv7k9Ap89k4aLP07Gtz+Nx5U3o4A3IvD1i74495Qen4tpnx9U4lNhAJ9R4LOz + Knz6gBpfPKrDxSfN+Oo5X1x+PhDfPR/KmAjHd0+H4MpTIbj8eBC+esiXbWfCZyf0EFNAf3hUKRnAH9+k + wL8OK/HZjWp8fpMHviTOHdHg/C1euHSbAZfvMOMbYfoecxnAX95mxhd3+BAGfHbcE5/f7s7Hapy7R4uv + zlpw+ZEQfPdkNL5+Kg5fPBKDj+6Pwt/uC8d7x0PxxiErnt9mwAMrtTg25Y7rR9TYN0gh3Esi3qrA7lbG + N4nKs1sS8Kf7avHlK0P49g9LcOWfK4CPZ4EPZvDtryfxwRMdeHBDMoWVHi0slmIa4iwlCZaOQs1Pj6Zw + XzTHhMAZF4y6+FBUJIcjLz0cjuwoZOXGwV6UgIySRKSzDiQVJiIuPxHROUmIyE5CTHYiYh0JSMyLR3Jx + LNLK4pBRFo30skjYy8KRSaQXhyE5PxRJOcFIZu5PzQ5Hsj0M8SmBiIrzpeg2IzjchyTZTIFuQUS0DfHJ + gUjJ4PcdUXDkxfI4opCaKUb5+iMqXhi/VgSEmeAf6g3fIB2JtJ7EmFt/T/j7eyE4kPky2JsFnmI60sLi + bkF8mBERfE9MJxvu7o5ED08UGcUfr57YVmjDXW3BeLSfZI/idFcySSpJdqmaJEkmQ6RagUB3BaxuJOdE + tKcbCgPFnztWrG4Jx/VTabh7VT7umMnB9aPpWFETia4Mku9ADaI1JCkqN2RomK/Z5u0+FNPx7jjRHIpf + zmbjw71F+O4uJ/AA87EwgH86yRhcDggj/8JmxucOFy5tBc5tAj5chSu/GMM55oy/3ZKPn6+PxAvjFjzc + 4YW7apnTKuS4s1KBe6vVOFujwKO1bnihWYU3uz3xW/aXP5H8vj/phb9NqfHBAiU+WiLHv5bJmUtl+GK9 + HBe3KnF+tzvO7dPg3CEtvrzBgE8P++DTm0349FYLPj1mxZfHmV/u9MPFewJx8VQILj0Qia8fjcW3TycB + z6UDLxWyxpTh4hPFeP9uB17dE4e7F5rZZxWYEQI8VYbOFDcSQjc0URA05wgDWI2mfLXLBM6fWw84h+/N + GcBiDf7mdNfIDDHl2LwSGRZWugzgnf1anFgfjTfvqsI/fzSAi29OAO/NAH+fxZX3l+LrX4/j4uuD+PjB + Brx1IAMPzbfi9g69ZACvzZZjgmRsgGSylyRSGMD9JNgTUUqsJEnanaPHjQXcf6U3HqrzxpOsTT9q86Fw + MOGFTh8826rHE6wPD9ewvUspNnhcJ4vFCGA5ThTJcCePVUAYwKfF+r/1nni8xRtPdVrwTI8Nz7LmPt5l + wv2i3lW64Siv30Feu23c38pSNywodEM/vy/McKeD4iyXZJn5tq5Ah3rm27oC8oZiEuwSDzSUi/V/WWtZ + qyWjlzWouYZkmmh3atHJut3RaEAL65IwgJ1lFFE8XskA5rGLUcBiLeCxNgMW9Jl+mAJ6zIalo2YsGTVi + hrVz2Ri3fCx4zZIhE6YpBud3GTHZ7o2xZhL7Sg/Us9YVzf3BUsD2LaForkrxQl2GN2pS9SijAC2kaHCE + uSMrhKQ0UBjAKsRRAIk1gIUBHKCVw5+waSl0hSls8mAMe5NohyI7JYIig3kqJRhZyb7S9D3irs2UOGHA + /G8GMOOY+U8gmiIoNkqOBHItcRdtLMl6XIxaWkMpIV6DJBLkpBQNUlL/bwM4OV2PhGQdoil6winEwqME + NAij6AimOJMM4DkzRdzF6x9AEThnAAdSzMfF6JCaIu7sFX8K6rkloSfJt9vZFpnC4KVQoGCOnxvFK9bz + TeDzhBSxPq5rFG98EoVgvBxxFAoC4nEM2zmWEFsB8Xp8Is+N3DIhSY0EsRWjfrkV5yiZ3elXDWAD86wB + cYmezM3Mk1FuPB8XxLTQ4YwJgf82gKNjeV0ovMQfEtLUZIT4A0RMTSYM4JAgmbQuVkw0j5ViNSaO14NC + J4oCKIrbWIqXWOZcYQQLAzh9zgDOLzJJBnBJqRklZWZUVNlQXesPJ7mmszGQoLAVJnC9Dc46FxpqrRKa + nFZ0tPqjp8sPg73+GBqwYZT9eWTYzK0PRucM4NFhKybYv8VoYPF8oMcHzU41BRHzT4MGHS3aOQNYiZoy + 1sxSOZqqPdHaYEZ7gw0dTX7obQnGYEc4unlMDaXeqMtjbOYYKVZ9UJvF4082IZN1JpbXXZjAEWyX2BA3 + iktxB7c7ih1iOtcQxm4k2mpj0EIx1swa0lYXhQ5nDDoa4tDdFIfOhmi01QtDOBiNVTz/MjFdnfhjim1Q + LkxgX0hTQ5e7DOA2YQA3uAzgdmcAuluD0c/jHOqMJCLQ3xaGnuYgdDUF/tsI4GD0dYawHUIx3BeB4f4I + DPWFSgbwcH8IxkcjsWA8CguJRZNCNHI7PwqLJ8UaQpFYPB6ORfNCiRAsHAuWIHTSonlBfI+PJ4KxaIrv + TQVj8VQopsXj+SGYPz8YU1NBRDDm87UFxNSCUCxYEIbphWFYtDBizgjmbywI53epxSZDsGQ+teCCCCIc + swsjsWI+PyewMIaI52dTeO2jJQO4UvSfmiBU1YSitCIYBSUByM61Mq59kMSclJDkxZjxYH/0YIxdXQOY + 8Zkh/sDnVozmEsZnih4ZiYwZ9vtE5pBExoB4nMKcJv6MF1OhZTCPZDCnpEZQmIfKkR2mRFGEGlXMeQ18 + ry3BC93JXujnfsaS9BhPNGB+kjcmkwwY4We6wt3QGOgygCu5rWJ9qmUerUtUopbxW8lYLmYc/bsBXJDj + hXzy73zWhjxqytwCvWQA5+ZbJAM4kfkqKtYToeHC6BV5yhNBYZo5A9hdgnhdIDRcIyGMnwnnVqw3GRut + lWYuSEtkLkw2II36U5xvGs8hg8efyX6enWpBbpqVx2NFYZaNfVsYwD6SUVmSZ0RFoRlO6tU2ZxRanJGo + Lg9AUb6PNJInLUWFjDQ1HA4vHrNemvq5tIzxw/5cWmFDWbW/awroGn9eR/b3aguaanzQWWNEd5UYAaxF + b5k7eovc0JcrlwzgsSwF5pNbLCvwlEYYraXeXkudt6HSE1vqPLG/RY9rm7W4ttED19ercEO9AoebvXCk + w4gjvb443B/8vQG8rpa1r5i6J0+F+bkqjOcpMZKrwECOmzRCtDtbhh7WvcEiBUZK1BgoVqGvRMxkIpfM + kbo8chm+3sgc0Vwu1v81M+59pGmfC+wa5Arzl/kvO1UBO/Nhapz4c0iGDOb5LGGMM18LM0EgR5pqj98T + ZlemDiWsIWVZBpTatSh3CBPYiKYSK9smEONdiazRqVjWl4JZblf3immg47C8ORJLG4OxhHlixhmIFU0h + WNkaji298dg5lIq9Y5m4aUkxTm5qxSu3LMJ7D27DX5/cj9/evw3vntnyb+BzYf5y68J2Cb+VzF8Bvi+N + At6GX5/djHdOb8KvTq/HW6fX4Zen1+DnZ1fhF/evwq8eWY+3ibceXoOfnV2B1+5bimduG8OxrTXYs9iO + 2cFITLVYMa/RihHm3yGnD/pqDGgv1aCpgBySaM5XoiGPvJKPW4QRLJnCHuigXu8pEWv/ajHEPiBuvB8s + EiawBkPEQL4G/eRWXQ5yTnJNJ/WrQB3rbi3rr+CgnbzOYtTwSKkXRvn9iUofCWIE3li5ga/pMVSsmzOA + xTSYWvQ5xOx37ujOFFDNTZOpxqDDQ5r2eSxvzgAWyOdr5HnzCthnpRHsKnTy95vIoZqJtljXKODBLE9+ + Toth1hlhfIqpNvtydRhnjCyoC8IIa2V/gQHdYl1c8onWDAVa0wXk6Mx0w1SZN2ZYI9c4/bGJ1387sa0+ + EFuq/LC+gpqmzAeLC7XSKOABfqeHvKOPbTGcpcJYric5qR6LivXSVOizbFuXAazFQacB1zaZcKDRiN3k + yltrvLGWcbmMbTKV54G+dCW6yPv72RaTBd5YVeuLLY0B2Mnrub3WG7uIfYyxA/Um7K02YkexFttzPLA1 + 1Q2byCV38DgO5GhwTaEB+4qM2FLMffA4pth2/TxWYVrUMYbKGR8F5O5ZyZ5IjWfdjXStpxsSQW0YqUUg + c5qNnMwWoILN3w1+QW7Mgy4+ExXl8R8GcFGmmXFFiLVHiUrWiopMI0rSjS4DOMGIRObF6DBPKVeGhIi8 + ST5ELhjD/SQwP4qRW2mpBtjTxc1+zHXZZuRQO+bn+CM/1x85WVa+LgxiUWcs5J8GJPI7iYkCOmSmi/f4 + Gb4vkMHjEmvRJ5CjxQsTSow8StUSOuYIT+YQMV2ttzRqsbHcjCZezwb22cYSFVpK3NBOvt9ZSL1DDBHj + BTJMF8kxU6rC2kovbKjSYWOlDuvLNFhVqMBy5q0V1CAr+NnVFW7SzEQLy2UYo3YY4Gsd4uYW5rda5r+a + LDfmHg/Usf44ywzkId7kNAbJBO5w6tBNbTIoGcDsE8R0jRc1nDCA1VhXr8b6OgU21SvZL9ylqZv3dfng + 0JANBwdt2Nfrg+1tOiyrUGBRiRxLeAyzNW7Y3KbFVuq5Ldxu69Rj74AZ187zxzVjfhL29puxmTxulpxu + AXXZYC61jl2OymQ58mPlSCY/FcZvjOBlrLcJ3GaGsOayPYfrIrC0V6yfnoTR5hA0FoopxlnLGQ/ZjMfM + GDmKWXvLHFpU5nlTT5F/EWJ2htI8HxQwJzvEMi/sk5niT/lML5SV+ZKrksMx5prrfNHOWOyus7J+WdDH + fNLN3NLJvt/B32oVBjBjQEKuC+25GnTxvV6Rv1jTBljbenOYXxifYurePnGDCeN0JJd5inlthO8NO9To + E6M0MxXMSSoMUmeP8PpO1VPricFNjNlFjN/pWi8srtRgWbkHVvH99aUe2MbcuaPUE3vK9NhZyjZmX9pV + qce+BguuIce+rj2E2yAcII/cWW2W1gpezTy6nbp0Hz97bZknbmds39/ii6d6AvFkZzD1rg1311hwU7kR + 2xm/6/N5fZgTFhUYMZKtR1eGFu3p1LFZRrRSczXnsp6xPevzxY1OPmxvvbTeqD3NHamp1DKpSukGUgFh + AAt9IemNWAUSqTlSxKg31kzJAM5ibNu9COaJPL3LAG6cM4CdIWitDUQLdUYbX+9sCEGnMIdrg+Cs8ENl + IWOQHCxlzgBOZQymJ1J3kv+J6Z8jyPWE3hE3wIqbYYP4OCRcLumnSOrTqHhysDgtQiPdERCiknKP1V9M + 9yyHySYgDGA35ibF9/AVJrCA0Ff8nDCAJX0VJEewmLqeelPcMCJuKM5x+KIoz18aBZyfY0U29Vwi2yCW + mjeGGiwuUi7dmJhGrZtC7ZvM403iMYrpdO0xSuQnkFuSTzYyj3aKGStYE5dWGbCK+XxjowF7yIsOdBux + v9eIvT1WbGoxYz7rQA9zezt1aVcG61mRDRPF1FuFPtJ6wD3My2IUsMDAnAEspoBeka3BLLXeMnKehWzT + Ieb41mjWXB5rEeMvm+dr57HlUrsXM9YqY93IgRWoFSax4MPU8vX8XDvfH6EunsllDmGO2878tHfOAD7W + IsO9XTI8PqjEa1N6/GqBCe9OGPHWsBY/7XHHq11KvNAlx7PdcjzTI8fzg8IA1uLxAS3O9OhwT48Jt7LP + ij6+g/puKXVXTapRmgJarP8rDGCTUaz/q4DOoCQUMPgIE1gOHx83eBvdYPRxTfvsI0xhyQCWwyymV/aj + Zg50Zx8hBw/0cE0TbVXCZnXj9VUhlLUkOkoY+y4DOCPNh/1Z9DNqePaflGh3ZMSpkBsvpoCmtsjQoJ7c + oIl9ur1Y3FDihx7BtUv8UWP3QX4iv8N2u2oAx3M/8RHuiA33QnQEaxgRxcehPLfgAGH+KubMXjH9sxgF + zOO1iddc74ULA5haQhjA8dHiZljuP07JmFAgS+iSJHeUUktVJWvgpNZpyzCQf3hLU7t3M557C8zoZCzX + p7ijhte/inFbw2OsZ6w2sIY1Es38fCv7cXuBP7mdH2uMmX3UAxniBn722dgQOaJ4PlHsC1GhbqzDChcY + E5HC4I2kbonxZLt5STdJXIVkAAuTWIwaZhsksF6nxusZy+J/JK00m1wi2zdRamdqOb7mMoCZQxjv2dRv + dmrFTMaRnciIoXaJVSEtmrmBmjA5UoGkKLm0RnMiHwskMAfEC0SK0duyOTNYxtzhxpj8wQBOY7wKZMS7 + SeuPZybI4SBvyslQI5/xkm9njefWzpyXwXyXTn2QkaxEJuNWrG2eQw0gprnPJjJTPajRPKSbQKQt21eM + /rV/bwAbJRO4oTqSurwc+3aOQNaRG4aOnFC0O5j8+HhxkwN75zdj3/wmrGzKwoQjFOPpAZggpjKCMJlO + sZ4WgnkpgRhN8cNwig1DSVYMJJjQk+CD4VRfLMiPZOFOxhS3XQm88HEmDGcGYEVNAnb0ZuOG+aW4d20z + HtvZi5cPjeHl/cN4amMLzi4pwRMzpXh2tgzPrSzFQ9O5ONodg60UhWuYYDawmK6kgFxV4IONFf7Y1xqD + AxQ3Nw5l4JbxHBwZzcb1/WnYXBeCxTnemEfxPMKLtTCFxMMu1hjWY51Dh/0VvjjSGIKbKIZ2UkBvJgHe + RFK/tsobayg6VvcEYM1IBFaMRWJ6JAgLRwOweFwYwAFYtyIE2zaEY9f2aGzbEorN6wKxaW0QtqwNwZbZ + MMzOs2EhiYnLANZgPoXnRK0G49VMlhU66Q6uvnwWOxal+iQNSqPcUUgSmRXsibQgLxISHcKtWlh1TDTu + LCxGBi+Tf2GcBh0MiElhAjOYlpOArGTH2JzshkPpbrg9RxgAOrw7HY0vD+bjyn01wJPNwNON3IpRZ7XA + 8Qp8tTMLn03H4P12M96r8sIfSQD/WK3HH2r0+F2VFr8u88BvKzzxBwrsP9fq8bd6I/5K/KnOiN/WmfAr + kpe3GwLx65Yo/KwnEY/0xGFfpQXT7KA9LJStDP46JrGKDBuKM/xRlE4xn2ZGPQlxOzvrGIv/UhKeteWe + 2Frthb01njhYo8Z11QrcWCXHbXVueLBDgxcGDfjFhAV/XhqED5cF4pNZf3y5xh+XNvrjmy2BuLwtAJd3 + zxnAhxOBo2nArXZ8c3MWPrkmFX/ZGY+3VofjCe7nTqcbbq6U48ZyBW7geR0ShKZMi50UXduz3bCHwv4G + Cstb67U41uCF2xo0OEqCelO9h7T271aSojX5ara5WrorfAW/v5xtt6JGg9UktGvrPNh3xB1JJM0kx2sy + ZVifLsMu7v9kTxDeWOfABzfW4Jv7WoGHW4CHanHlgTJ8dSIHn/HYf7XehB9NyvHkmAyvzOrw1vYAvH9j + HD67PRMXjmfhX3z8l12+eHe9Fm+vV+J3Wz3w9wNGfHyjDV8cD8aFk9G48GASzj+Zhi9ezsa5Nwtx4d1q + XHq/BVfOjwCXhflLXBoGvugG/tmIK3+qxLfvFOHymwW4/BLxbCnOPVKKv95VgFd2JeDeaTMOtHtgdak7 + FpOILiSRFAbwGjHSu8iArcTmPC3PVYklFM2L0liUWexn2L+XVOixlGJgKdtpA4njkbEYPMg2eOVQBf5w + Tys+fKIT51/pxMU32vDVL9lHf9MJvN2Bz37kxLvHHHh0dQCO9mtwfZsMZ5a44xc3BeLDRxJw7sUElwH8 + sxjgZ9H49tVgXHzeB18+4YXPH1bjMzEVtDCAz6jw2Vk1vnzIZQB/82wArrwQBrwYBfwoGng2AleeCsO3 + jwfjm4f9ceGsFV/ca8S/jnvho1vd8eERJT4+7Mb2dWPbK/HZTSp8fpMSXx7hPm9xx4VbNfjqNgO+Pm7G + V8etOH+bFV/ebsbnx73x2R067scDn97O7wgD+F4tvnrQim+fjMB3zyfg8stpuPCjNHz2bAo+fjIJf3sw + Hr+/Owq/OByIH+224cxqb9y+SIfrRt2xv0+FA73uuHFAg9PTvnh1Vwr+fqoO517ux7fviWmgZ4ilwPvT + +PoX8/CXB5rxyOZ0bHCSRLP4Z2lIqjxkKCRJqQk0oiHCF/XRQaiOCUBFbBCKE4IpIENIkiOQlxuD3KI4 + ZJXEw16SiLTiRJcJnJsomb9x2fGId8QhKS8GKYVRSCuJREZJOBGKzJJgCelFQUjODUBStj9SHIFIsQcj + PtkfkTEWCmYjiY8Wvr6eJDxaBAUaEB5qRHy8L1JSgmC3h5HQRiI7JxzpmUH8ni9i4q0IizLDP8Qb1gAv + mG0amK0eEkxmJSxWEhV/L4QHGUhsfJAUbSVRtyEh3IQIPw1CDBT6KhZ1D4o2kwdrgQ57y/xwsisYzzCv + n23Q4hqKpCkS7BIFi7RchiStElE6FULYbiFqGTJMKjhZv+ZXhmLHUBJuWpyJO1bl4raZbBwcSsWisgi0 + JNmQ6+eJZK0Cdr07Sowk1SSEQyT52zL0uL8jAu+syMQne/Lx3fFq4IzIyT3Aa6PAHxYDH64Azq9jjG4h + tgJfbwa+XM84Xc64GMPlH3Xiy/uq8P41mfjFijA8N2LC6XZP3FmnxJ01KtzD/Hm6VomH6xV4plGJVzs8 + 8CuS2t+P6vH+uBf+NuGODyZU+GihAv9a4obPlsnxxSo5LmxQ4Nw2Fb7cyX69T4svrtHj4+sM+OR6b3x0 + A/PLTUZ8dsTMPm/BhdtsuHhnAC7cF4KvzkTg8sOxwONJPI9sogAXH8rH+7fb8erOGOYOKw50qjBbLpcM + YLG2WDO3jXY3NOcI89cdjcynjQUqEr2rBjDfy5KhiXmzUYzIIMS0fMIAFiOAhQG8winHwXEzHt6Tgd89 + 1IYvfjKJb3/D/v+XlcDHYiT8anz3h0W4/IsJfPFEB969IRePTAdIBvD+SjVWZcoxSjLWRwLZRSLZTUHU + Q9Ex/l8G8F3lepyt1jFNa/AE68EzLTo82+GNZ9r1LKk6trMHzpTJcUoYwKVyCcL0FebvHXkuA/gU68GD + cwbwkx0WyQR+qtuKxztNeKBJy2umwjGKl2urPbBLmNOlKgpiJQZz3cjFlHDalagmKrNJqh2eqMwR0KCm + wAO1kgEsRv16olUygIXZa5RMX4GuJgN6+LtdzQZpGugmnruTx+vkcQkDuJnHKwzgTvab4VYtJnuMmB6y + YLFY/3fUiqXsX4uHDVgywhw+6oMlfDw9YMD8PgMmunQYb9dhXpsOoy1iLUYvOHPIT+YM4EKKtyKiPFGD + 6lQ9BYEOZXGeKIzygCPEHVkUHJIBTKGRYFMhysddmv7Zz4uC15OCmPDTyWETr3mrSfotSI4KIOEOQmai + P2FFWryB5NmL+E8DOCme5J58Txi+kRQMkgEsRBAFxFUDOIbkPIbXO0Z8Ls4DCYk8jmQPJFGApGSI0YB6 + yRy9CjH9c1KqDnEUAhFi6uNIijWKKWGshBHCABZ/KAZdNYDDPKTpoG2MfTMFoL8vhUoURUayUZpe1i6m + laZ4S0+ngEhTIEWM6hWjeVlD46SRvHIek3guRvOK94Sh6/qTI4rtG0UhER2tQBTFcbQEpQux/AxFSWwc + RRpFijCCYxN4zsIQpiBwTcfsKU39LExgcZ4CSSk6xCdRFPI7Ufx+ZIyaW/HYhe8N4Ei1C2JK6BA36Y53 + q5Ww8HrZXH+ChDKWItjmon3jKQ4TKUBiKQ7FFG3hPHaB701gnlM8hUxaBsWNQyuNAC4sMUujAIUJXF5t + Q019ABqbg9HQFCSN/q0h96ypMaO2WoCPK0wS6qtMaGnwRXuLDd3tNvR2WSQTeHjQLI0CdhnBYlSwGAHs + MoDnDVsx3G9CWxNFaK0cjQ1qtJOztzdSiJLPOav4eoU7mmsoSrnvtkYxlW0AetqCMdIThdGeCPTxeVe1 + L7oovtuLbGilaK2z21AQxz4UwutA4RxD7h5HsSoM4FS2Z0GODZWlIdJduM3OWDTXR6G1PppxG4fe1iQM + daVjoCMVvW0JjN9YtDlZX2rD0FAZhLpyf9SW+aNeTAtNiNHAdeU2yQBurwv6DwNYmLw9rSHobw+T0CcZ + wCHoFiawZAAL8P2uMMn4HR+OZbvEYmQgXDKBRwZCMTYczvaKwCSxcCLShckITE+EY5rbRcIAHg+TsHBe + KBGChePUS8T0RBAWEPMngzBFLJgIdj2fCsaUMICJ+QtCML2A+yIWTHO/05FYvJjilFiyNBJLl/D5oggs + FiOEJ4P52/w8t2I/iydCsEjsczwE83k8Cyaj+XoCBvoiUV/vi7JyM4qKzCgsEuswmtnHTEhNNyCBWlCY + vtGMkwjGTWQ8YybBg3HGuBAmZ4q39OdLFpEttkl6inItxT7jh3EvIB6nx3siO1VMr6eT/iSwx7gjI1yB + rFAF8sPUKGe+czLvdSRr0Zemx2imEZNZZiyym7Ekw4yZDBOWElN8f5i5qyNCjgbxRzRRwdxVEeEaBVEZ + r0S5+NMn9j8N4MJcLxQWGlBU7I2CEu/vDeDsHB9k2oXJTU4UL0YBezFn6Hiu5FtRegSGiHWBXQgJEzMY + aBAaJoxil6khDOBw5rCoSA3jWPzZI9Y+FlNds42YI5JiPJh/td+voSVNA019l8dzKuT5FfO3Sx0+KC+w + oKZUrLcXwniKhLM6FBWl/ijINcJh1yEj1R12xr4jx0s69kJhjpZbUMJYKq3yR1l1AMpqApgH/CQzv7bK + wnrng85qYQCz7tToJAO4p4D1PFes9eiOSeoPoS1XlXljXTlRYcDqci/CA+uqVNhUo8TuenJqxvr1DSrc + 2KjG4VZhABtwU7cFN1D3H+wJxI5/N4Bz3V0GcK4Sw6zNfcIAdggDWC5tR1mHR4i+YjV6CDGbiWSO5MnR + VOqFtmoLmqmPnSVGVFAviamfhfmbk6qSkCXWQGaeT46TSUhj/hcjgaU1xJLUfE9MPekOB2tUTqoG+czf + BUQxa1URUZqlIy/wZl23oK0qAH0NERgWy5IQk02MV24XNTG2nKFYUM+4rAvAUubT2dZwrO6KwtbBJOwc + TcfBBbm4fV0tHtjTi9fvWIbfPbIdv390F359dit+dXaLhHfOEMLYPS1M3v/LAP4BLgN4M351WqwHvAG/ + FEbw2XV46wFuH9pAbCTW4ef3r8ZPTq/A08cmcGxLHXYvysYKxvFEky9GGmwYrDejl9ejvUKHpgI16nkd + 6tj2NVkCMulxQ54SLXxPGv0rRimVGzBcacS8SuZ/9oWro4CHiAExYpd9pT1biaY0fp/ctJ6oTZahmnXY + ydfayMF6xOeLdIRWMl768z0xyMeDhS70kysO5hN57I/sx73ZGnRmMJbTVIQS3RkK9GYJk4Y8i783+u8G + MHmcZADnKTC/yB3z2Mc6hfnMuL9qAIspoOfzuk4Ws47l6aV1gLuFwUxOKAzffsb/YJGRx+XN17ToyBTG + qNKFdIU0Anh+uREztTasaQjAJtYHYQBvdwZjG2Nrc40/1lZYGDN6TOa4DGAx+refbSEM4Hm5Yt1rbywp + MTAWtJgtFuuBarCDvHMfeedB8k5hAO/hdofThI11Jqxg7E3y/HrTeQxJcrSlMGayPHkO3pipMFMT6LCM + vH81OewOYQI3mLGr2htbi7ywkW21gddgPXnQJraFMIO381y2OTRYl+eF5Wx/sd5pD19rIneqZNwUJSjh + IM/JJMdJZm6KixI3sDCfRWoRTN4VGEG9SV4mpr8PCiZfE+uek7P9P5y9dZwk5dk13KPt3ePu7u4zPdI9 + 7u7usu7uLjiLOwTYZWEXD0FDgAR34oYkJBAWW2DZ3fOdq3pmIXnyvO/7+/44v6q26qpbruucOnXf938z + gIsY74vI9WSKx6IUHUrSDCjl+8Xp7vzMk33Qk33UxP9gPI3QXzCAI3icmFjGyzgNEhgrk5N0yJRpVzMk + 1nkpKMr1Q1GeH7W2j/K6IMcbeTm+yMzyQjq/J2sIpzAX5PL9/DxfQrbejJHki6nkj+RxMrpRbujmpPN7 + PLe8dB0KxQDOMaPa4oZ6q5i/3LL91xU7oDrfbtS2FKjQRW0iBu5kqYN92t9yNdZX6hXTfivLf3Ml42aZ + K1YXO2F1iSNWyVTR1Agrq6QNqTBGDdZP7dDG48gDLtU8bhX7Tw3rpdZiRh3rt57/3cSY21JjQke9Gd21 + ZgzK7IfUUrNiAFcbsKpOi3U/MoC3iAncqMbOVgP2d3soUzkLDsoIYJnOuUXHtqvGugZnbGS83tlpJAzY + 2qolqJ363HHpeICCSwgxhLdT06ypdblgAHfkOqGW/VHaSip1X6wfdQE1vyAhSIVU8tbiBPbdcvKJ7mQs + 6UvBaBt5l415LIecjTE6h7E5gzw2K9FJma6zJEcPG+NuWZ4ZlmyTMluD1EcOY3MW60RGoMoatOVWPzQx + 9rYKN2sg52oIwECDH2OaHwaqPZXRv+2MM+1s222FYgDbTeD2Ai062P862M+7irToJnqLNOgtYN/PVSuG + XZc8ZML9YTGAmUMnSljWjEkj7H/97CfdWU7U0I7oLXTFAPvbUIUW47VGzDSYsYg6cWmjCcuZR9dUsX+x + LWwn9lZQB1cYcFGVGw6yr4oZLK8P13nhshZ/XNkeym0wriCXvJg8c0M++yy1/MFKM65s8MF1zb64uckH + d7f54USXP44zl95R540bmb8vs7pjG7XsWsaqZblGTGUzrlKLdLJNN5KT1THPNbIcm/LcFAO4wUJ+X2Q3 + gAvTZf1rZ/YRmQnpRwYw82QctUYcdVE8NVASuVIKtU4G6yFXDGD+Tz7rKj9Hi5JidzTUBqK5PkSZBrqV + 21a+llG/HdwXA7izOVwZGdzIXFpd5qPk3AsGMLWRzDqVTB2oGEoyQ1KoA0LZpmRGpBBytwUDOEZG7aeQ + gyWZERnHWBFJXRjmopi8st6vp6/jvAEsxi/14oIBHCjm7zz8ZUkhakhqqxBqiIgIZ8Ysajvyr7Q08tNs + H+oJPwV55F2ZjAkJLIdo0b5s0zJSMinKkefughTqj5Qw53kD2AHZ1MP55J1W8kkZjdmSKe3JGWNsYyuq + zdjE9rG30xsX9XmzL3phT7cv+58XJthOxfxtJkeR9V1HLdRS5NhjxZ7Kg1CyBn4Hc0iXPESU66I8DLSc + WEvesyFDg3XpaqxMVWOKdddLjdvIXGelZixg+eWy/OQegswiJgZwDa+lmvmwmp/XEGIAd/LzKZ7navaZ + TYxXuyrFAHbE5Y0OuL7FEXd0qfDggAuenzThrVkvvDvlibdGjHi5T4Nf9rrg2V5nPN3vjCcHnPHUiA5P + jOhx/4AWP+lQ4zrGmktbPLCXfGN9pQcmeU0VzA3xUj9m1pVMAy3TPru7wGByhl48Gg8XwgFubiqY+B2B + G78nJvCCAezt7Qy/ADWCgnQICtZzq7UbwH4yFbQztbOanFuvLAGQnkr+nuGtjPBOTNQx16gVAziF+Sqd + 9WhfA9gVlZk6xmEjOY8buqze6GN77SPXFgO4WjGANUijpkhguSVQlyQzP6XK2rixJsRRB9jBPBamQTjz + ot0AdlSmew5RDGAnBLKNigEcGuSMCBk9zFwneiCe+S4+Su6nOLAvOCCLOkUeJlAM4FQtmphDO7Pd0Zvj + wdjjiT4B20l3gRca+HkVdUw5Y2k567cqzgU1bIe1RF2KEY2Z7mhm/mvI80F1licK4uU6HJHAuo8LcUAU + 20m03GfgNpJ9LyrUCZHhzsro5Bj2MVmnOC5aj/gYOy4YwFHyuX20cKJMFS0jfqVM4u0zySWxT8uSYunM + 35l8L0sxfXXIS9Yjh/sye1eazMAR48KtHcqSP2L4spwTpazZVuUek0DuN8UTshUzOJm/TWI5KXGEcSpN + Mc/lnoAd6SyTdMkxRA55TR75k90Apl4gr8ulZsghr8wmZD1zmdHAkm9CEfVUIeOlPOySlc6yYuxLZV3I + VpkJIY1xcMEAZp3ItqGKul0M4H3jUE1UxmPMFo3+olB05QUw0UdjZVMmVjVmsANEYDjLHxM5gRSvQZjJ + shvAs+lhmE4PxaSMBk4PJAIwlRGAycxALMoPZ1LPxEX9ldjWVIDRtAC0snG3k4iNkEQtLgnChrpoHOjN + wDXTRbhnXS0e3NyEBzdQfCwvxc9WW/HMOht+vtGKR1cU4a7JdFzVHYPDLeE42BJB4hqErZW+2F7lh/1N + YbisJx63zOTjnlUVOEbcMJ6NnQzmKwrcsIgBZzED+Do2vI3F3ljLDrMxV4fDFb64TjGAA7CLYmCbheTT + asKGChPWNnliDRPX2qEwrBwNx9xQEGaH/TE36o8lk35Yt5xEekMYdm2Pwo6tIdi2MQDbNwRjx/pQ7Fwb + gY2zQVjW647ZFgNmGsUA1mC6VoOpGpJgkqCpSiZpkuRhEveuXDOqKKqLGdhzKcgzSCjtBrAePgYnuKlV + 8GdAiQtwQAGDQAuJ6HCuJ6ZZiYuZPFeluWI7BeNlKQ64JccRDzJ5vzUZhn/tzcH3t1iBkzXA/VXAiUrg + Tr6+uhhfbU3HPyYj8DsS97dK1Xi3VEdo8VaJFm9a1HiVguTNYle8Z9XiD5VG/JmC+0+17vh9rRfeq/PD + W03BeLU5DK9QWD7VEY/rZT0hkr8hJud6NvSaZDPK0/woToPZgMNIjIK5H4iKTB/UZZnRmW8gSdFjjiR1 + RblMqazGlnJn7LQ6YG+ZCpfYVLijWYtH+8345bg3/rAsGB+tCsY/1wbgi42BOLMtGGd3BuOcGMB7g4FL + IoEjCcA1aTh7TTq+ujIdfzuYiN/viMbLq0Jwf58BN9c74JpqR1xZJdN+mXAJE9xBmwE7C0g+s1XYQ6J8 + mdUFNzTyu6163NKm51aLG0hKL28wKKRoE8Xlan5/VbEaa0mW11TrsZb1urFBg81CZmucsInnvrHAAZsp + TDdSRG6mkDpSpccjU9H4zR4LTt1Qj3P3NOPssSp8d2cxPr8hA59cEY93t3jil0uc8PwyZ7y3xwcfHInA + l7en4PtjOTh7ZzpOXx+DTy72x/t7zPjDHi3eP2TCJ1f54YubQ/HtsXiceTANZ36WizPPWvDtK1acfrsK + 3/y+Ed990IHzX44C304Cp7n9vB/4uA3n/sj/f6MQXz2fhS+eSMOphzLw+ckCfHx3Id65KhM/3RyG68dJ + /lpcsLLECXNM5LMk0WIAbxTjt8wdu4mdFKAbSZBlDZBpJnxZT2hJmRGLSBznKNYXsYw3NHjh6ql4nNxa + iOcvr8Jv72rDR4904tQvOvDVy6349s1m4HddOP9OO079vBZ/vsuCZ3ZF4bYxA8mmCnfOOOG5g+74893h + OPV4LM6+KAZwHCB4MQJnnvPF10+Y8PnDWl6DCz477ky44tQ9anxxwojTj3rjzONsJ89EAc/yNz+PB56I + xfmfRuLMQyE4c38gvr7XF18e9cCp20349CYd/nmdGv+81hn/vMoBnxxxxGdXCRxw6mpHfH6tI7641gVf + Xq/F1zeZ8c3NPvj6Zj98dZsvTt3qgX/dxmPcpuO+Gp/frsHXx0z47uEAnH8qDudfSMe51/Lx/WtF+ObV + Inz9YgE+fSoLHz2cgt/dFYPXrovAkwcDcXKLD25dasI1kzrcNO2Gu5f44sktMXjn8lx8erIJ3zw/gPO/ + nQE+XAq8Pwf8cQbfvDSGPxxlHN2Rg61N3mgjac0jEck2klD5qkmgPNg//VAVHQBbFPtnTACK4gNQkBrC + xBCGksJoWEpikV8Wi1yrrOcrI4GTkGpJQnJBMlIKEpFaGI80SyzSiyORWRaOrLJQZFuDiUAFWaWBSCvw + QwqFbhpzSUpmACKi3BTS4++rgaeHMzxMJL9uJETeahINPRLjfJCeEoicrFAU5ooJHIZsxoxU5pSEZF9E + xXohKNQdPn46eHmL8auGJ3/r5eUMH2+ZqkT3bwZw2rwBHOFLoU+CFuHIxO2qQ6UnY3CCGZfXBOKBwXC8 + MBuGx7rdcGOpBquZuOsMJKBaFfK8XZDu44oEll2iSYWyEB0GcwOxvj0eF89k4PpVObh5bR6uW5aNvX1J + mCgMYrl6oMBXi1w3F9gYu5t8KcB8nLGIJP4Skp+HeqLwzopU/JNx+ex1pcBPGJPlQZBn+oB3p3Hur4tx + /tPV7KMbgO+2cLsJOLUO+GgZ8PYY8EIvvn+gEZ9db8GfdiXjxaVBeHjIA0cpgO+o1+D2GmfcVeuEE/VO + eKTJEU+3OuPlXg3eGzbgL2NGfDihw98mXfHxjDM+XeSEz5axHa9ywFcbnPD5Vhd8voPYZ8CpAyb847AR + H19kwN8uNuBj4pNL2beucMdXV3niq+t88NUt/jh9RzC+OxaB8/fF4tyJVJw7mYOvjuXiL9el44U9Mbh7 + sQ8u5v+vq3LCUAYFOOPDggEsU1u1WDRoVExgFzSL+cucoxjAuSq0Mh7LOsBtRNe8ATzNuCpTQK9tdsRV + S4Px9JESfPjEEL59aznbP8vs440sL5ab4MNVwHuL8PWTvfjdtcV4aEkIbuo04VAFRQNj8kiESllOoosk + spPoClJhYsEALjDhKoro22xGHKVYvqfSBfdVy0heNR5mXnik3YRH2814sEmPe6udcE+5I+6p4Fam4bba + p39eMICP8r0TdXYD+JF2DwUPd3oSHjjRbMbRei1uqdHgCPPIIeaIrVYKJebf0XwR7c5oyHRCZbojrOnO + sGa4oDTTBWVZrqgooGAr06KRorypykABa6R4dUNPsxf62igE2rzQ2+bGLd9rMStrcsk00A02mY6SdcAc + 28p9MYA7eW2DLVpMdJswO0huNuqN5aNeWDriTpguGMBiBs/2mzDVY8BEF9FhVNYOnuxwx3iLuzL6RtbJ + UqaATrAbwKVxrrCROJdTCFtJqC1RGuSHuiI72BVZQeyTFBrJFEAx7Mth7DcLBrAP4ce+6K3AEWF+RsSG + eCIlypdEmbEi3pNCxqgQdxkBnEbhsGAAp8q0zgkUyGKMsk9Hs65jotiPSdYvGMAUEzHRFMkUU7Ek9WKS + xolJSmGSlPaDQbqA5HQjElPEIJUbffYRscrauOF2Ezg4gmKJAiQojMIpnNdCESLTQftTUHn7yPRdjoiM + 4HGT3ZCeLusAm5GeISOOnew3M1IdkZhsN3wTkih0KKzF8BXI+lZJKbweEnoxfSN4PeFEBK9BECmgABFE + 8dwE0bzWGAoZMYIXDGGBHCORgiBx/jovXCOvLynVyHLQKqaYXGcMy9W+pTgUAzjyB4SEOiI42EGZlkyu + z4ciVwxgefo9Ikym23ZmXeiQKiNyUnXKdYgBHMp6EETFOSA20UmBGMGp6Wpk5eiQX0SBUuKhjAQsLfWE + jRy/WgxgMX8bA1Fd7YXySneU28gvFbjDSi5iK3FDFblIg4wQrPNCW5MHOls90NfthcF+L4wMe2FUDN9x + 6pgxP8UAnhqzTwU9PuKN7k4K6XoVGhvZJ8g7O5qNPAaFdYMZTXVuaKn3QSv/v7UpgJ8FoqcjBEN9EZgc + iMJ4Tzgm2sMwTi0xXB2CAVsIOixBqKbOKYo1IINtIjmUdRnmRIFIEUiuX1DgA1t5KOrqY9HcnMD/ikVn + Uxz7bDKGezIxNZSP8f4cDHWnoq89STGBOxpj0FwThnrFBA5UjGBZW1UgI4EVA1huYPE8LhjAzUEKZKRv + b2sIEcZ4QHBfDOAFg3iwJwKjg1GYmUjE7CTz2Ug0xoYiFfN3YiTSbgBPiPEbPY/IC1g6FYklxGJijppi + bop6aSoUc2LSzmN6mpqRmBXzd94AnpVRwDLid1E4Fs/xGMTixdFYQogBvFSM32XRWEbItNBLFodjVo41 + GYSpiQClLqepx6ZHA3l+wXwvVDnHyfEY9PaGo67WB6VsE/kUyLl5MrKX8UL6Mdt4LONEdLwLIqU/xbAf + UYRHJ7giPlEeBmE/ZbySaTezU90pnD2Ql2xCDt/LipEbERT+hOxnx+tQmOqGohQTCpMMyIvVII+xoDDc + FWWR5FuxerQlGTGY6YaJfA8sKvKldgjA2qIArMv3w/p8b6zLY7zNoVbk+Q0nu6KL59IQ5YgK5icrYYtw + gC3OCeU834URwMVp6gsGcBnbvqyTXUzYDWCTsgZwZpa7YgDHJ5oQG29i/zfzmt3JpdwQHKZF8IIBzH1B + WJjObgLLyDYZFRyqZqxxRQSvJTpCzRjKWBLDOBLjjHgZSaLcTDIiPYH/l8Rykumg09xRmOmOYqIszwMV + xTI9eRAa2W4bqsNRXR7M/uqHAtZHTqYemWksQ+rzBQPYUuqBEqs3Siv8UMb2XFYdyG0g44A/KqjXa6t8 + mO88mbNkCmgxgGUtWDX6i5GEt8UAAP/0SURBVMkxLM6YLjNgCXX12koPbKz0xKYKd+p5M9ZQx64qc8Fq + myPWkkfsqHHEwUZXXNbiiqvatLiqXY+rOky4gnn5si5fHOryw45mb6yvMmM5dfGcYgC7YrLABYMFjuiV + tWMVOKG/0AUTlWaMVpjQX6ZBD7lkK3N4tUyNWuSMlnIZDeeHlipv1JJXlFErFWa6Kmt95VIv56Y4ISfV + GVkyRT9zp0CmeEtLdEQaY2MaY2dGApHojGzmqdxkNfIZvwsZV8UEtmToUCqjgHNNqCv24v8xDlQFo5ux + qLc6GANVgRiuDMIYy3K8yl/BdK0/lraEYk13NDb0xWLbcDJ2jqXh4iWFuH1nCx6+fBwv370ev3loN945 + uRNv3rsDb95nh5jAb9+7C28f34V37vt3s/fX9+1R8OP33j2+g9hpN4GPb8eb92zDW/cSJ7bhjQWc3IJX + j2/AC3etxqPXTOC6LbXYM5uLFd1RGFOMEl/01nihg7G/qVSPugJnVLF8K8gPreRz5eSXVeSJdeSPYg53 + lunQS905Uu2JiTofXq+vMnXqsNWAQRlFJ2aujKgr1KBdDGD+vn4etWICU8c2ZpCn5rmi26Lnd00YKDKg + m3XXkeWsrLXbm6edB3l+vpgtBmVkrqyB2JHuinbWaTvze2eGk2JW9uW4YLiQ3G5+GujxIm7ZTmQNYBlZ + voh8bqrIFT3Ck8X8Zb7sJhcYJE9YVhFEPc26s7hhuMCAnmxeI4/XmuWEDp7TgEy9WSBTLerRkSkGsIuC + dvJHGSU4bXXDMubGdfX+2Mx8ur0+CNupgbaxLSgGcKUP27l53gC2T/88IDyZmn+S57roggFsxJoSLTaV + qbGzXI391TocrjfioiY3HGh0w95GL+xo9MEa9r3pIqOyRmQLOU2zmMAZriwDDcaK9JjIc8YIy3kmxwEb + xExu8MCuKiO2l2iwhZ9tzXTEDmIn62BnhgN2ZzthZ74Gm3kuK1l+ss5pN9+XqbptiSoUUOdmxjggPZZc + SrnZyhgfZUBktAmhMUaEROnJ0X54wCU8UkxbmfGEeUAM4DgxgPWKAVwoD/SQ6+UmMC4lsa+SwxSnmVCU + 7oYCMYDTvJCa4E5+abYbwBI7xQAmt5XppMWckbV6k8ibMpgXfmwAF+b6ET6K8VuQI699UUDk8r3MLM95 + A1ivjBguYG4oyJetF3IzZTQxuUSqhjpZbgTz/Pg6j3oljzyuKF0MYCOqyJ/qyuYNYMatWuqm8hwVKrPI + +Quodfh6oNQJkzZXtieZ1lnHujJgPWPplhoPbK41YwPfW2vTEM5YU+6E1dRvq2pdIesHj1U4ot9KjUaN + U5unQgXrr5xtpIptslpGalrcUVMs52BGA7VJq4zWV+K0ed4ANmGJGMC11IU8phjAG2sdFWxqUGNbqwF7 + qMcPiQEsI4AHfbBvwINwx+5eM3ZQe+zoNmJXF9tKuw6bmvn7Rmfs7jIpUz8vmMBiAG9rM2B1rTw8IdP0 + 89rZZhrYJ2wprkiXBxTJXaOJSCKe+i+FfDaf+buxyB+jLYnUNkkYbo1GO/uILVfPMnZFjkzRHy838FXU + IA7Keu356dT8rJfsZC2yU1jn1BHpbDcy/WaWmPTZJlhLZbaaEPLJUHI08rL6AAywLw43+DM+k6syJonx + 28I23srYYjeAtehkfu8uNKCT8aWTr7sYrzoZk3rE2FUMYA1hX3t8kN8ZK3bHpNUT46XuGGbM6ufxOhgj + REt3MHf1Mjf1lLpisIrxh/12ppn9mlhVb8Ja9uWtNQbsZP3sp6aUqdkvZv47XGHEfqsOB9lOLqr1wKWM + xZc1BuCSWj9cVheIwzV+2Eodv92ixSHm5SMtAbihPRjXt/jilhZv3N7qjVsZF66r9sCRCk8cYizZyDi1 + PFOHWbbbYXKAfrbjjhQt6snBKli+dXx/wQBuZk6rL6IWEANYRrcxLyanOCgGsEz/rIC8SWYaiqPmEwM4 + kcdJIsdLFxM+28g+Rl6Uw/6Sq0MZdUUd61TWAW6sDVLWAG6uDaCGtk/93NFA/t4UrowMbqwOUh5gkyUY + 0sm9UsgXZbSfaElZTiguSk2t44qoCDGB7ebvDwawM2LICRNSycGo+2QkcFi0zMCigT91r0+ArEfuBE8f + B2VqemV2gnkD+N/gL6OBVQgIckAoNabEl2hyz/gE6jZ5oDhDYgnjCGNKtuhKxo/EOGpbat9I6rEonk8C + 9WKqmFXkranUrCkh5BbhTshmnCqgXi5jG65KY7xIc0EDNbysHz/DOl/f6I5dnT7shzKq3g87uwOwpt4L + Q2yLTeQmteSlTeQh/XmezG1ehLsyAlgM4M40B8Z/R0wUaMh7tcrSgRvYXrcwn20hZ9mQxTZAzTfJ77ay + L8nDjhYxgYlC5r+yBOZ0lnnVfxjADURvggMWs72vt5qZizTYzli1v9qZbdMJ1zQ749ZOJ9zXq8Yzo2a8 + OuWFN8c98eqgAS/0uOLZbmc83e2CJ/tc8fiAC342pMOjIwYcH9TipnZXXM44tJd9YxPb/hLmu37qh5I4 + 5hNqeDGAfT1ZHz5qeHhqYDC7QCcGsKeLffSvmwpGkx2ybzeAZfSvI3x8XOAfqKFG1iv3QgODtPAPUMN3 + 3gAODlIr+SQ21oTUZHfWo4cyk0RSot5uVLKtJVGHi+mYJ1pADGBqgAaeXytjrkz/3FcVpBjAHdZA1LBO + LIxJ6dQSMnI2WcxjtkFl5rREd8THmBRIHosK1yrr+4awvYkBHB6iRmigK4ICZE1gan1uw4Lt0z/HMHfa + DWC1ch8llscW4zM92hEFcS4oS9Kgmm2imVqri7qmn3msr8iLXIuYN4BltG8Vr8Em9cy2aRO9E02Nwz5T + EcffJxtRk+GBygz2e9Fgsbz2MAfEhjBuiwEs7ZoxO4KvFch6/tTXcn7RkbJ8DXNxlFYxgRUjONa+NnAs + yyCWZSjrBUuZKvt8T1lGbN4AlpH9mQli/hqoawTMtckGxn490uPUSOY1SwyQ/iRI5jmLASxlIIgXE5jH + VcBjx/OYclyJF8mxdsjDGGksq/R41gkhI/SVUfqMYWls92IAZzPX5JE/WdhnLLlaFDHOF2RrlVkMBEWM + ZcXUemUWT5RRZ5WwjAsYM7PYvxQDmHlIthnUCrmSh4iCLDfkZ5mRl0mtUBGmGMCH949DtbYjGyuaUzFT + GYOh4mD0UZyOlYRivDhMWdtwKMsX47mBmBQTOFsM4DAifH4roDDPDFIwmxWMZQWR2NdaiFvmOnDNaCOW + 5kWiK9KA9jAmL1bEQKJ0fDNWlPphW0M4LupOwI0T2Ti2zIKTyy346YpCPLOuBM9ttuGpdcV4kK/vmsnC + DSMpuLIvHhe3R+BAczD2NwVxG4prh1Nxck0Fnt7TgSd3teHW6VzsqgvCqkIzlmZqsIoJYJs1ADspJjez + s2xjUr2YpPe6xmAcYQLbZTEoBvDmUpIGEidlDeBGDyzp9MNcL4l3tw/Gerww3ueJqSEPLJv1wfqVAdi8 + IRgb15FUr+N1rCOxXhuMnavDsXVJKFYPeWMRSchskxazJDrTtWpCzGAD5mrdMFtDkkxBO1ImT0SwkiMc + kRvGRqGMGtAi3JvBQYKLhkHHyAbvo0JOmDPqkkzoTXXDSIoRk6zgZQlO2B6nwqUkwrdkOuD+EjWDnR8+ + 3pqCb64uwLm7ynDubgvO31kE3JCP8xfn4PM18Xh/MAhvk3S/lO+EV0gqFvAyidKLOY54le+/WazGryma + fk8R/bsqd/yaIuLtugC83hyGF5uj8FxTLO5vjsW+Sj+KFxM6eB2V8TqSLC8Up4v5G8HGGk1EKfslbDsV + JMJNhW7oLjZjxGbGFInF4goNVjCIryt1ZP2osJsE89oaNe7rcmMQ98Z7S4Pxwepg/GOd3QD+flswzi0Y + wHuCcP6iCOCKeJw7wmu+PAn/ujgRf94djXc2heK5ZX64t0eDmxtkOmYnHKlT4/J6PS4m2TlIEryjyBFb + c1XYQ5J4GQnvDU0a3N6tx529RhwddMdR1uONXV64hElhR4kL1hc4YF2xMxME20utHlvqNdjG3+xodMW2 + OhdsrXDC1mLWCYXd5iwHrGdC3c//uK3NEy+sTMQHF5Xh9K21OH1bOU7dlIe/X8n3DkXirQ1mvLzSFW9t + 0uP9S4Pw2U3ROHssBbg3DbgrEd/fFIGvjwTgX5d44u8Xm/DJlV74+pZQfH80FucfygSeYv0+ZwVeqcG5 + dxtw5nfN+O7PbTjzURfw+Sggo4A/68f5jztx9s91OP2WBZ89m4a/PxSL9+8Ow59ujcCfbojHu0cS8Myu + CNy52B2XMGFuqXXCIoqHyWxHTBHLmMg3k2TuLPfCHpsndlspHAp1WMzrnCCmcl0xU2ak6NRjyqYnkdBj + Q5M3rp5LxgM7S/D8lTX4zd1teP/hdnzybDu+fJnn+XYT8McO4Dft+PqX9fj7yXK8fHEy7poy44pWFW4e + VeGnW1zx7o2++OThSJz9ZQKvMx54VdYCjsa5XwXiu2c98dVjenzxgBqf3+eKz+8hjmnw+b0GfPOwN77/ + Wah99O8v+Juf8/dPsL08GoVvHwjGtycCFQP4q2Ne+PJOT3x+q5jAenxyvQafyFrAVzniX1epFHx2tQqn + rhE4Ei74/Do9vrqBdXGzP766PQCf3+6Dz+5wV6aT/vJ2Pb78iR6n73Xj/4ewfhJ5zjnAeyXAb204/7tK + nH2vHKdftuCTpzPx/gPJ+P3RRLxyXTSevigMD24PwD1rfXD/+mA8vjUarxzKwF9vKsXXD7fi+18Osrym + gfcXA3+exvnfTuL0L0fx27uacf+2XGxt8SGpdkRRIOMGiUhZkB61UZ6ojfVlwvWBJZLEMdoH+XG+FLlB + JLkhKCuMQklxNAqtMci3xSGvPAm5tiTklKUguyQVOaXJyClJ5DYW2aWRyLGGESHILQ8mAu2wBiHT4ou0 + AoLCNomCOTBIQxLkDA+zA4w6EiTGNLNeBS++DvRxRXI8BXBaIEVyKIryw0nYQ7kfjJysIKRnBiKOn4eE + e9gN4PnRv96+Wvj6qhVTOfhHBnAKr08M4AR+P5ykK9TgiAgHJlcXkg4PDWYTzErcf2IyCm+viMavxv1w + X5MZezKdMEBiUe1L0cw8VRSmRjaJdy4FYhN/s6QyCrsH03DZogzcsDpbweUzKdjSGokBkpWaEB0svBYr + z605yIgBlvccSf36cEdcbfHAT3sj8c7yBHy8IwXfXZ4L3GgBjtUAj7axTQzj+99O4OyHi3D+02XAl2uA + L4h/rQI+XAK8PQS81IfzjzUxbpTin5fm4r3NMXh6xh/395pwV4sWt1QzxlSrcLTOAQ80sr80qfCLTme8 + MaDDn0aM+NuYHn+b0ODjKRd8MuOMU4ud8PlyB/6VE05tdMFnW4ideny6x4CP9xnwtwM6fHRQy60G/zyo + w6mLTPjqUnd8ecQDX17rja9v9Me3twXj7J2R+P7OeHx/Vyq+uC0df7oyGb/cvWAA67Cu2hXDWRQVqQ5o + oSBoznGm2NWgpViLBosYwGoKPRe0CvKd0ZLniLZcB7Rl8zeETLMoawDPlNsN4HWtzrhpXQxevKUWn70w + i/N/2AD8cxvLagvLbB4fs+z+sBinf9GH399UgoeXhuDGDiPjvRNWycgGCoo+Col2ksgW1m8H+8g4idyC + AXyN1V0ZAfwTm5pwwp3877urHHEP8/jJZh0eaDPiwWYDTvD1vRQeJ2pk+m0XHOP3xPgVE1img7673BH3 + 1WrwULMJD7aa7Wh3w0Md7jjZ4oZjDXrcWqvDVRTdFzEPbi+jULJoMJ7njC4K93qWl43lVsJ+XJzqCEsa + t2IG57mgplSHRhkNU21UnrZvrzOjt8UL/e2+hJjA7gqUUcCNRrTVyIhhZzSWyagkFdpYFmIAd1Sx3Ter + MdZpwHS/OxYNi9nrjiXDboTdABbI6xnmxMkucrcug2L+TnWZMd3tgRmKxO5yHWpYX+VyUy5ZnuDlecc6 + oyxeo5i/ZXEGFEWqkRfiohjA2cEkp9ym+KsRxz4Tyb4pa/8GiAlsWBgB7AB/N/ZhHx2ig0zKQx3J0dLH + 3ZAcI09t6hTinpagvjAKOC1ZhzQxg0msZRSwTAUtWyHhPzaAoyk6omJk5KwLYhL4XqILhboaCSkaJJBX + KVtCzNKEFAqIRAoLCoAfG8Cy9q9AMX/nDWAZBRwRZb/JGEjR5OsnRqmjYqgkJpqVNeIyKI7S0njOrNek + ZJniWQxgiggFckODSOL3CRm1K0iQ/+f5hoU7IJRtV7YLCCd3FETKlGREFK8xmterXNuPIOvxigm8cJ1i + dC8gKdWgXKPdAF4wgQmWb2iEE6/zBwRThMl0Z76MlbK2kTfzixjAshaW3AxJk9GQ6W7IzDQr1yrXoxjA + 7HeCyFgHlrmjAjGBk1NdLkwDLSZwEVFc7K6MBqys8UdtnT8qyT2tNhklqOfn6nnolDVQSwpNsFrcUE1O + UlflgYYaM5rZH9qa3dHT5YGhfhkF7IPJcX8F0xP+mCFmJwO474eBfhOaGh3QUO+A1mYNf2dEO/tnR4s3 + WppkjeEAIkjZtjUHoKuDGqknBGP9YZjqj8CSvigs7ogi14/EVG0EBm1hjGO+qKR4LaT4TCOvT6RITWAd + JbFs8wt9YK0MQ21jHJrbEtHemoAubge60zAxmIvZ0SJMDefz+JkY7Ephf5aRwPFoq49EY1UI6iuC5k3g + eQPY5j9vAIeim9y8q0lGAss6wPb1fhfQ3Ryi4D8N4CHmprGhaMX8nZtKxvS4jASOwdRYtAIxVmcmozE3 + s4DIC5BRwIumIjA7HYGZKTFpZT/MbvLOY2o6WIGMAlYgI4Bn+J1Zfp+Ym5mHjAImFi22Y/ESHp+YW8Tv + zoViYjIIo2N+GB71xfCQlzJ6e3SAGmrYF6PDsu5zGIYHI9DeHoiaahn5a0Zujh6Z8rCFPIiQqCWXkFHt + LsrIX8X8FcQ5IzKefURiBj+XEVwpCfxdEn+f4o4C6q0C6q48atesKDVyBNEa5LJuC+ONKEokEhjf+Foe + cimNUKMqWovGBCO6U0wYy/XCIos39W4ANpAfbS4ligOwpdgPm8iV1lK8Ly9gfM0xYSTDgE55ij6UMZR9 + rJRbW6wTbPGMpYxTxYmEGMDZGsUAtpayn5CDl5CT/9gAzsiUWQvEADazD5sURMW5KaOAxfwNCpEpoH8Y + CbxgBitbatAQxq7QUMYbtt0oxrToSFfEMn7GRjsp8VO5IRXN+CsPOcSbkZXojpxkN+QxvhVlmFGS44by + IhkBHIT6qlDUVoSgvEymf/aZf1JdblS4KiZwTo4OedTkhdTmllLWm80HJeW+KGGbLpXRwEQ5X9dUeqOx + 0oM5y00ZAdzP3DdQrsWwVYMJmw5L2PfX1PpiY70PNjFebKhwxzrGjGWlGiwtceZWhZVlKmyrccL+Rhdc + 0qrGkXY9riSuoFa/pN2Mw+2e2EuttqnWjJVWHpMaWMzfmUJXxazrJz/ppj6WqYN7+b6sKTtR6Y7RSjf0 + Uet0M4c3M4fXkMvUkd+08rOOOj9lbc7KIj1KMu0jf8X8zWG8V5DqjOwUF7Y5lQK7Acw4Og9lZACRxfrP + ZvzOZezOT7GbwHJT3JLJdpBjRLVMmVnKeGVlnCLarX7oKvNBjwIvnp8H+sltRlk2s4wDq3pjsH4gFhsH + E7B1JAWHlxbhjr0dePz6Obx+Yhvee3gP3jy5A2+c+AFv3Ufcu0vB2yd24937fsB7J/bY8W8G8C4F79wj + JvBOvHV8u2IiK8ch5JjyH68c24if37oS9182gqvWVWPnZDaWtDOW1oj564POSk9elxk1RVpUsOzLqa3L + 0tk/yOdkKyaX3QBWo8tmQH+lGWNsB9ONAZhp8Mc4fz8iy2/J6N1S+1ZG08ko32YeqzHLUYFwrvoMJzRl + kYvmqtFeqEdfkQl9BQZ0ZLE+M5zRnumijLRVkKlGD/uiQBn5m+GCdtZvG+u3jXldTOAefr83W2Z2ccWI + GL9iAAvPs7hiosgV09wu5TnPFGsU87UjXoVe8oLBDDW5oBFLywOwmHF+kjlRpoFWDGBZ65folDWH2ed7 + +b3OLC3a0l3RmikjgF3QQU3Tm6NWRgUu5vVL39hQ64eNVewjNi9soH7fUsn9Sh8s43d+bAD3Z8iU6q6Y + Uh7UJ/9TpoA2YDXPUdYJ3W51wd5KDQ7V6XG40YyDTe7YR52/o5HxjG19hrFIDODmJJZrsiNa0mVtYmd0 + i4HOOuvkNQ7yf5ZanLG9zg07qgzYWuKCbcUu2MM6PEAcYo4/xHI6WKzDHhkdXKxXDGCZ5r2LdS5mhZX9 + JSdahfQI9h1yPeVmrHLz10gOZEZYrAmh0QZlOuiIKMM8hJ+pERljN22TYrVIT2QMSjMx1pvsBjBzRR55 + VwH3LWlGuzEsU3P+hwEsD8zIrC/C96IZD8VQFgM4JUHW42M8zvL8HwZwIfOBoIgcQZCX6608sCOzT6SQ + a+ZkM47muhOydUNulkmZSjg7Q6fETZnuUUG6TnkYxML3ynJkSmIzapkPlGUpShiDihxQma9CTR41bJEK + XYyBA1Ytpip0WES9sYxlvrLKiHU1bspsB5vr3bGx1oj1VXqsq1ITLpCpmlc3ajHH7Ri1Th91Q4vFEdU8 + pi3bAVa2wQqZDrnAHRWEnEN1sRG1ZXo0UJ+0VRrRz1g9WmXCbDV1NLXOyho11lIvbayjPq5xwNpqB6zj + voz03UVNcXDQB4eH/RUcGPbBgRFv7F8A874YwDLyd329E3/niB0delw86ofLyA8EPzaAZ6h3ZEmdLmqm + RvabcubOzAgHZernKHLWCCKOOj85yBGZUfyc9dRVE4XBllgMtMSgozZEua4ilr8YvfIgjsRimbozNc6B + 7cYZqdxPYY5OJadI5jY5jp+Ta2em6ZQpeeUGfW0lOaSYjdW+6GBM62NfHGRe6GOO6mD7bi3QoonxRmKO + mMDt5LXdRUb0sh+JAdyRJ4awzFjgqpi/3bnaC5AHTwZkUE2JB6aYOyfKvDHEXNqbb18TvClT1mxm32Ob + 6C5TMzZqMVJHvUeOu5RY02hiG2D/ql0wgPU4VKFXNOlhbi8mLmEbuYRt5JIaL37mjv1lZhxiPtnHfLLD + osVOXsNB5uVLGXOvYAy4ssEDVzeYcU2DG66udcelzMOHGUd2MpauZlnOpVNzMo8NEmIAdzGXNVDDybSw + YgA35pLDM5+1FHujgfxIDOD8VLWSG0UziQEsy8ckMf+JTlJ0DXmcIIFcTkzgNPaNzEwD8nksuwEsfElm + DJKHyfxQV03uTDRW29f/baHWaKsL+jcDWGbbKcv3ZL3zvxhblPgiJjAhJpggmnorIsyuyxT8mwHsRr3l + rhjA4YwPsgxHQLAaYvh6+TrD08dRMYDFEF5YA/jHBrCyJrBiADsqD61EM1ZJzIqjppYHijPTGVuy7A+V + ZGeYFANYZgmIZUwU83fBAJaRiqls32kRLtQjzsggn8sjz7WkGGCjTqukBqwkB6lOVKGeGCpwwUpqqG0d + 7H9DQdg/GITtPUFYwfrtyWFsYZsvJxesZZxsZ2zsZczqJddWciHzXVe6I4ZymNuY75awfazM12AT2+l2 + 5qhdWUZszzVhY5E7ljNe9JAD1fB8S8NVKBLEMK6znqt5HVWxjDX8rJbXUMfPZA3gYea4FRZ5uM8DG8i3 + Npc5Y0+FCw5Xu+CqRjVubtfiaJcWjw2a8MtxL7w07Inne/V4qsMFP2tzwk87XPFItxoP9brggT4tTgzq + cUe/Dld3MJ8x1m2tM2JVhRmTFurAbMZw1rHECn93FQJ9XRDgL/chdTB5qKE3/2AAu7s7/DACWKaKnjd/ + vX2clZG+YvqGhBgUAzggUKO8p3wm0ywHuCKcuSQmxoikBDNSyNvF/E2Mt0+3LHxbZpBKZT3mso2XyLIw + WTpyHiPjsRkd7PM9VYHopT4UA7i2wIt1q0OGjDxle1Smj5ZlW5I92Ic8lPwlSKQmiGablFHAYvKKCRwR + qkV4MDUB26h9SmgxheVBBzVkdK3MsCEmagyPK9Mxy7q8qZEOyI1xQgn7nWIAsy12sE0MFPignzpA0Ffk + iy72pSa2tWpqLVu0o2IAS72XhZPPhTuhjNdYxvZtpaYqSTRRVxmRKUYq/ycm2I5I6iLBggEsa2ILxACW + cxSICSznKhDz1w6eP48l5y79dmEro34Fco9IZpTLTjIih7otN8XImE/MG8Bi0orJK3UgWBj9u2AAy2jo + eGr8BPYtwUJ8sBvAPyAtVmM3fKk1fwyJMRmJjtRSKkUfyKjfkjwdSvL1KObWwroWyDrmJYr56w5rMWNj + qZ+SY4ry3RWO8GMDWHJQXoZRQT77uZi/udyvKZeZtGy4SAzgQ5NW7BgswNpWMYHDSSTN6KKA6yVJ6cmk + aMihwM4LxHhuMCZyQjGZFYbprEgFM9kU/NlhmMsRhGJRdghW5IfjYGsh7l7agzvmOrHJmoyRBA/0kCj1 + RLqgh4XUz0Q5SgG4mMR1bSkTSWMQrh2Mw7G5dDy0NAtPrSnAL7eW4RdbyvD0FiseXluKe5YX4raZTFw9 + EIMreiJxeXcEEYW7Fhfgmd1teOvIOF67fATHlhVjb30g1lJUrmTQ2VLiiQN1YSSq4dhd7o09pTIKzBfX + 1Afgskov7C0Rc0+HDSSbSwqdMEUSOl5BYddAsdTigb4mBrhmkuxWAwa69JgcYeKc9cKq5T6EJ9at9MLm + 1X7YsjIAO1aHYMeKcKwf88fSTiPmWjSYrXdWMFevxpIGEvpGT8IHS5v8MUNC3sbAWcrOkxXigBQG+igG + hFAvJwS4OcJrfkrEMA+S3EAHBkQdOhMocBi8R1iGcyS9W4lL41S4mYT6BM//V50e+GBtDL64NBPf35KP + M7dm4+xNWTh3ZTq+35uKT5dE4o9dvnitRIvnSPifp+C5gEwHbh3xIkn264VqvEPi/WurCe/Z3PBWhRde + rQnErxrC8PO6SDxSHYGbKkOxyuJJAWKicDLCmkKylObPxhuB/JxY5OYmEPFMvrEkveEozvUnSfRCfTGF + fDnblpBDlvW01RVLKABWFjpgPUnrRSSat7ea8FOSuTcWBeAvKwPtBvD6AJzbFozz24MUnNsdgnMHI3D+ + 0licuTwRpw7H4qO90fjtllC8wjp5ctYNd/c44eYWFa5vcmSCcMZlja64qE6N/ZUUHyUsP/7fHosKl1Wo + cEOzE44OGHBizA2PzPrhp0tCcM9YAK5vJ+mxkaQWqrC5VJ4i12BXA5NZkwa7SUb3ELua1CRQLthpVWMX + ydbmbCesTVZhG8XpZfzt/QN+eHtLBj45YsWn11rw0ZE0/P5AON7Z5ouXVmrwyioX/HGvJ/51XThO3xED + 3JtIxAN3RuH8TcH4/jo/fHWEn1/hjs+5f+bOSOBEMvB4PvC8FXipGnhLRtO24dyfOnDm/S5897cenPvX + IM7+awBn/96J7//ajK/fLccnz2fg/Qci8dvbfPHG5Sa8ctgNL+71xs+3++He5W64sp/X0eig3DAZz1Zh + lIJrnG1lKUXidgrGPSRM+6p8SBZ9KNwoMJnwZWH+EYrOcZLBMV7/qExrVcrE3+aP65am4+F9NrxwTT3e + O9aGPz3Ugr8/04JTLzXhu/cagL+2A3/sxJlXm3DqsRq8d20W7pkjcWxivfWrcN9yFV65zIS/nwjFmV/E + Ai/PG8Cvcf+VUJx7wRffPmXC14/o8NX9Wnx1XIMvxAA+psM3D/jgzGMhOP8My/QXLNNnWGZPJOL7R2Nw + msf76h5/fHnMF98c98M33H79E098fpsbPrtJj8+ud8W/rnXGp9eo8MnVdsi+4F/XuOBfV+tx6hoPfH6D + L07d4odTt/vj87u88cVRL3xzlxtOH3XDt/d74/xTEcCvUoE3C1g/rKs/VQDv1wF/qcW592z46lf5+PSp + bHz4YDp+e2cKXrs+Ec+zTT+5LxLP7o/Hi4dS8Zur8vCPn1TwWtp5vf3AuxM8zgzw+3Gce3cMXz03jPfu + aMKJrTnY0s5ky/ZXFqlCnj8TbZiJpM0bVQneKI7yQH44k0UEEe1JkeuH4qwgWAsjUFYShRJbLIrK41FU + mYTCyhQUVKbzdTosFbJNQWF5AgrKo1FQEUGEobA6hAi2ozIEeWV+yLR4I5kEII7J1NdfpkwhOTKooNOo + YFCTIElcM6kQ5ENCmuRHoRTMxBbGxBYOS14QY0Ugt2EoIJISfSHTR/v4a0mWSZ659QvUI5AIDiCpIiJC + jD8ygGUNYLcfGcAapLuQdLhpMBdvws2t4fjlkjj8dXMSfrsyDM+M+OHqCg2WpajQG6tCW7IWNUkaEhH7 + 02lD+d5swwk4NJGBS2eTcGRJMq5cnITdA+FYXuWNjjg1KnwdYfOmOCbBG4lyw5IoEzZFaXAg3hm3lrnj + yf5QvLskGh9tjsPXrMvvr8rG+dvKcO5kHc49341v3xzEd3+YwNkPWJ//XGrHx0vYRvj6jV727S622UZ8 + f2cZTl9vwYcHM/DKmnD8bNwb93QacCuF8I2MX3dUq3BvvQoPNqvws1YVftXjit+T3P5tWI+/j+rx8bgG + n0yw3c4444vFzvh8hQtOrXXFJ+vV+GSrBv/Ywe/u1OGDPRp8sNcVH+12wT+5PXWA/eqwEV9easYXV7rj + y6u9eR7++O7mUCIK396aiM9uSMYfLonHCztjcfcSf1zUa1BmSBjOc0QXRYGyPhnjR6tFT2GnR6OFRFHA + PCOjggVt+a4Uus4kik7oIWRqx5FiFabLVVhUpcL6NjVuZ729fncLvn5tOfDBVuCzHcDn2+xTZn+5Cfhk + DfvVUpz+VT/+cFspHlkWjJs7DDhoc8IqiWOs136SzmZ/FRq8fjCA15CY7i9yww2V3riDYvZWiuVbmB9u + Yby/TWalqHLE0Tpn3NuowQkKhePcP1HnggebtHhAXvPzu+R7/P6djJtHKx0UY/iBBj0/1+MkcX+LEQ+1 + e8wbwEbcStF9dZUBl1SYsLNUprjTkGPZp/aqTXVURtUWJalQQFKYL9sUB1jz1Khm+TVQVDdVmuYNYPf/ + 1QDuaeLntVo0V7ooBrB9BLCDYgK3Vzqit8EZQ8xf491GzAyYsWjYTcHckBlLRt2xhNu5ARnxq8VoO2N6 + h16ZBlow0yvrAct6VgY0MnfX5VC4kUdUkMCWkeRbE0jmLxjA2gsjgBeQHkRx469HrI8eoR4UIBRUQeQ9 + Qe7OCCSCPVwR6qlGhB+JfAhFS7iJZNtAaJBMci3TIiVTEKXIVDoJLshIoeinAJF10pL4XiJ5VSLrVoh3 + MkWUEPNYigxFtEeSa1GEiCEZHeekGMEK+Dv7VkapuiA2Yd404jEEdvNXzFC7ASwjgJVRwDICWJ5AjTUq + kKlVA4KcFQM4kMIqTqZforBIS9UjJVmeVKc4Jy4YvyTtC8ZvYpIW8YxDYj7bDWiKNP633FyQqcB+bMiG + zSM8wlnBj41guxlsRyyvS0xgGe0sJnASy+kHA5j/wfcXykCu1z4dNK8rlMKXQmsBMh2ZTEsm01t5kJcq + BrCPCsF8XwzgrHQ35MtNz1xP5GRTyFKsXjCAKfgWylsQRd4an+SI1DRXZObokEM9kEcUFppQXOYJa4UP + bOToJVYzCotltKALsnIokhQ4IYf9pIC/K6YwKi91RxV5anU5uSj7VGOtGLnk7l3uykjg0WFfZQTw3FQg + Fs0EY/GsbAMxMuyBthZn1Neq0NTgghb209Zmvtfsi+amADTUBfAzgR+aGn3R3haI7p5ADPYGYXogAisG + o7GiJwZL26KwqDEKY1Vh6CzyQ32mO0oTDUgPY/u7YABrkF/gB2tVJOpbE9HamYLOzmSeYypG+jMxM5qP + xRMlmBu3YHIoB6N9GcpI4P6OZHQ1x6KlNhwN/zYK2D4SuLE6EO2N/N+WMHQ0B6O9KYgI4Hv+6GjwR1u9 + H7eBdmOYnytGcEsoY0UYhvuiqGniFAN48XSqMo3y7GQCZqfkPWIqxo7pKMwIZiIuwG74RmBqOhyTk2Hz + 78v2B0zOhPLzUMxMzYPvTc3afyPvTxP2rZjFIZie5b6sCTzL38/xuzMhmJwOxgg11cCwN3oHPNHVY0Z3 + lwk9XWb09DDO9XgR/ujuDERTkzcqK6hDivTITKe4l75GcR1L0S0j46UfKQ9ysE/8GPK+PDghNwkSYtRI + jZMnwU2wpHuiRHQN+2++mL4xOhREEzKjAWNaYYwWFr5fGm+ELdaACn5WH28gjzCin31hMs8LS4q8sarU + HxutgdhSFkjO7Ef4YHOJNzaWemFNsSeWURdN53pgKMOEBsaY0gAVLOxT5YxRtnhyuARHFLOvFKe7wMJc + WlpkUAxgq43npxjAbsgrcFMMYFnPOIH/H8tzioyW0XAGRMSYeN0mxQAODlUrD6iIEXwBjMeBQXwvyAmB + AQ4ICpSR/jK6RW5wsq+yb0cx/si0+rHcj4tgvIpiLIvWk3OZkMH/yiLfy0s1oDDTiNJ8D1SU+KPGFowq + XnOpxQ+FeR6QqTHTGO+SGF/TkhizM9TIztMir9CIgiJ3FLA8ikq9UWj1gcXqi7JyX7sBXOGLRsaCNtZt + N/NeX6URQ5UGjFeZsKjGA6vZzjexbW9tZhmzva9lLJDleuYsLpgrciSoX8glNte6YHeTCw61ueLyDpny + T4OLqeMONTP/N5uxvdGMNeU6LC52wSz19DRjzlShK0byndFDLddOHdTO2NNP7jJiNWK82gvDVR7otRnR + WcbYUcL6Zx5vkBv7lZ5oq/FVpma15mlQmGY3frOTnBXksBxyUpkLxQAWI4G4YP4yVl8Ac5z9BhHjJKEY + wYlq5DJm56dqUJypV0YBVxd5orbYh/raW5k+s9nigdYigm2jzUIeUGxAb7kbRlk+i7vCsao/Bqt7Y7Bx + OBGHVhTjrsM9eOb2FXj7od14++HdePXENrx6cjuxA6+fsOON+3YpePMEv0O8c3KPgnfv34dfn9yH907Y + 8ev7uL13L35zfC9+fQ8/F8wbwm+LgSy4z/77l+/ahCdvWIpjB/px+cpybB3JwExTKM/VC50Vnmhh/K8j + b5QRh2VZDorxa0lVoUQM4EwVqpgPGopc0UoO1UvuNlzrickmf8y1BmO2MQCTVV7KA+di/g6XuWGgjPGj + SKZXJe/MlQcPXRU05ajRnKNBU65GMYyaWWed+Xp05bIu2e8aUxzRlOqEVtbjAjr4vkAxflOdFfO3lXXc + TL7WTE3cle70IwNYPW/+2g1gude0qEyHlTznxVYDhrMc0ZdKzpvlignmtFnW39JyP8IXM6WeigEspq4Y + wGLudPBce3L0ivnbyv9vSuG58f86yLfFABazeIRxcIblt6LKE6tZDqut7lhlMSpYx3a5nmW8rNh4wQDu + ZZkOZDpitECDyRKDYgAvYrktJ+dcxXNez3Peptx0V+Ngre5/NYB7MtVoYTk0MP42M783p1Ef8ditLJem + aBW6yWln8h2xtd6I7TVabLU6YTd12OEaIy6rNuGKKiOurHbDpVXuOMA2u7WM51BEDprpgA4ep14eNCR/ + yCSXTyZHSWJcSuB+fIQacbK+YYxZiXnh/8UAlhG7C2bKjw3gfLnpK2vskn8JZF9MYXkIKE+m5kzxIN80 + KwbzwgjgEHJaGQUsBnAsc4Y8QCRrpedluNvN3mzG5mzq7lxf8hRq7Tzuz6OI2lJ4UlaOO1LTyQ/FZOQ2 + K4uxNItb9muJlzms39xsvYL8rHlkaFEgD4Cka1HK9ysKTPMGsLuyTExVkROqClTKWuQtJWwLNh2GGTcn + iBnqjbkK8ntuV9e4Yz31w8Y6N2ysN3Ffj3Ws13XUbmupdVa36MlrtBivc0V/lQv7mDOqqcus5PrFbGNl + PDeZgrosxwRrrgHlBTpUWqih2a6b+J895dTEFTLzoRGLqtmGqEXW16kvGMArqVtXVjso0zxvbzdh34Av + Dg0H4vBoAA4y5x8kZxMcGvfHoRFfZfSvjPxdTa27qkqFbdQjl4wH4EryhSvJHcQk3tr+Pw3gBvaFinQN + cmMckcC8GumtQjh5q4wETghm7CWvLiQ/b7KSP5FnddRFMnaHobLEFyV5bijINCFbTMUUNduLC/mB3exN + ZFtWpv4k4gmZ7lMeQFVuvme7oZR5vZK5rK7cB7Wsm+ZyD3SzH/ZVe6Pb6oZ29k8xfpvY51uy1GjP06GL + /bxfpnZnfXbnG5R+3sGYJFvF+GWf/zHkIZCxEi9MWf0wzpw5yDzanUcOwljRKA+45DqgnX2306pGX5UW + Q/UGTFAbLmqzG8AbZTAL62Y7P9tTrsF+fu+gjXmxXIsra8040uCFK+q9cWm1J3YyTmxjHN5dqMduiwG7 + GRd2M+7uKzfiYKUbDlWZCQMuqtLhYh5TRhHvKdFiB+P3+jw9lrIOJqk/hliGfdQ6/RmMaeQLLdQgtalq + xQBuYFtqYS5rK2XOt3grBnAudcSCAZzCeLtgAMsDsopmSiBvi3e5gJRkfj+NvILHkmmgC1geZSUeqLSx + Phjzqiq8qRW8UcdtPV83cNtc7a/w6AUDWHh2eZEPeY0G8YwtEl8SZXQfdaQYSALRkpHhjsrDuP8vBnBw + mN0E9vZzUQxgL18xfn8wgP8T/oEO5GpO8zFLz5ilp5Y0ktd6/A8DWKaKT2PZJpJbyTrAMgV0YtS8AUyk + k1dmUKvmxjBukKtZyU+rGH+qssywJTqTv5JvEu2MsTMVOmxo88LeoRDsGQrFlt4wLGnw42cahZOW8HrL + Y13RkKhn3iPvIY9RZr1Ic0R3hhNG2T7mSvRKzF7D3LqNbXd3tgH78szYU+CBHeR468l/R8n/GhnHbTzf + EgH3K8hz5WGAGmrW2jjmdv5fI6+jLcYBkzkGrGF/2lTlg7U8/nq26+1lauxnW72c7fiGFhN+0mbEQ73u + +Dk137N9nniC8eChJlecZNy4r1mN420aHOtwxV2drri1W4Oru7S4uE1L7qfDKpmllbmmh/2ulrE4I5zx + nXEi0Iv1KyZusAm+ASa4++hh8nCFu7cr3DztBrAYvwtYMID9/Mm1A+3mb1i46Qfz19tJWSfYW5lBy4nH + daVuF8OS7Yb1vDByVQxXaW8LBnAOy0QM4PIsHWrYphvZ91uKPdBJntBVEYhWa8D/0QCWB5iS4u0QA1h5 + WGreBBajNzrCQI6vv2ACiyn8YwM4ju0whvw/kjk3QjR/ENsY9zNZd0WxTqhM0aIxndo7U2YmmTd/2YfF + AO4s8FQ+q2JfLYuilongb0LI5YIdYAkROKEg3AVF0RpFY+Xwv1JFa8ybvzL6V8zfcG7/mwG8gIVz/bEB + HB9rfzhrod8uGMDKvaF5E1h4QH4aNUiGBwpl1o8MIs2sGMAycvf/nwEso4t/QBrrVUzg9HjyBCIjQfbt + BnAWNYHMClRI3VrMWGkrYh+1mGEtshu+gtIit3nzl5qi2AtWyU8WL8Y4s/JAbTL1QgpjazrrQdZBF+NX + pn0WiPkrU0JX20KweMqKSw9OQnXT6npcOluKHf0ZWN4Yib58E5OMCb1sRH35PujL88NgXiBG8kIxmhuK + 8SyK+qxITCkGcCRmsyOwODcCS3LDsTg7GMuI/fVZuGOmFbeNN2FPdSZW5ARjPN6EIRb6EAtskJ15gBhL + dMQMg8Y6iqX99V64ZSgKJ+dS8MSaHLy4owwv7anES/vr8PNdNXhsayXuX1eKWyaTccNoPK4ficMNY4l4 + cL0Nr142iD/ftgx/uHkxHtlQhYMNAVhfqMPafC32VvvhivZoHOmMxeFakgoKiitq/XBVnS8upkjcV2bC + diaw1YUUejkqDDFZ9lscMcAA2FNjoIgjua7SoKXWFR0UjgPdOkyMGDE3TdI+Y8KqJSRQy32wcbkvtq0M + UgzgLdNBWNHDBNuqxWyDE2brnbCowVUxgJc3eWBFszdWtvljmUwpx8otZ7DLYvJIZIcKZUAI9iQ8HJTR + MD567ptJchmEbGzYrQwIXWxg/QzAU+wIW/i7yxi0byYhvi9PhReajfjLslCcOpCEM9dm4sz1aTh7dRrO + XZyM77Yl4OOpEPym2QMvUtg+naIiHPEMG51AXv88zQHPZzvilXxXvMl6eafUhLdIXF5lsnyhKhBPVoXg + fpKk2wr9cYDtYzzbjOZcN1Sy0xSn+ZCYygi+WOTmJCEnJwU5uUReInLzopGfH4JiBgVbsSeTrjvaKXx6 + Wc7D8mRiiRqLKbiXZ6uws9gB15CknOjxxIvTPvjDCj98vMYfn6/zx9mtwcC2eQN4VzDOHQjH2cPROH1R + LP6+Jxx/2haCt9b64ReLzHhoVK2sCXBTmwrXtqhwZZMKlzQ44FCtA/ZVOWBbKcsvX4XdJImXlqtwQ5MD + 7hvW4dFZJo/VQXh+YzQeWRyKO3o9SX6csYvf21Wmwp4aZ+xrcMb+ZqKd++0u2Mv9PbVOijDaa9NiS64j + VlPkbKRQlSmmbyShfmY2HH/cl4c/HsrCe/ti8cpmXzy/Qs/3HfHyKmd8dLEfvr41AmfujgLuiwWORwI/ + CQFu8sP5631Yn1748loPnL45AOfviQYeTgN+bgFeqgLeaAR+3Qb8oRPn/tKJ7z7sthvAfyc+6sKZPzfh + u9/X4fNXi/HRY4n4zR1+ePVS/vdWJzyxwQmPrnbFiaVaXD/ojN0NKmW6tEU87+F09glegxjAy/I12MG+ + s6/eH/vZfw7W+2GbzR1LKEaH2P762HYGC9hHilzQz7ocLXbFls4g3LAyC48ersKvbmzGu/e04w+KAdyq + GMBnflMPfNAO/Jnn/UYLTj/diD/dWoAHVvrgctbHdd0q3DmlwrO7XfHXu3zxzdNROPeiGL/xwOuyFnAY + r59t4TlPnHnchG8fMuD0vVp8eUyNL45q8e39LLefhuL80/zus0nA06nAE8k4+2gcvr4vDJ/f7Ycv7vbF + d/cF4szxIHx7zA+n7/TBV7e54YubdfjiRhd8dp0Kn16rwifz5q+Cq53x6VU6fHKVOz/zxj9v9MWnt/jz + PwPw9fEAfHvcm1svfPdIIM4/G8PzTQfeKsS535bh7B9twIe1wEfE7yvw/evF+OZXFvzr8Tx8dDIHf7gz + E+/cmIHXjqTh9Ssz8NaVWfjj9YX49GglzjzWhnO/6AXeHAN+N8U6H8P5t8fw5S9G8M7tjbh3Sw62dPuh + p0CmDlQhj4m1NMqImmRvVCZ7IT+SSSBMiA0FZrQZ+UkkC5n+sBWGMaFEoswai2JbHCyViUQKiqvTUUbY + ajNRVpOG0upElFTHoLgqkghHSU0oEYKS2hCUcr+oIgDZJHYJGTqEx7nC19/JbgAbVTDoSI4Yz3zMDvD3 + dEJYAIlJitwYDEVZUQQRTpEs5m+Asl9aFElC60+x7U7SpYGPn4aEWNbRMCCYCAnSIZTkKjLYiNhwD6TE + 2A3gRDGAfUncjM6IcmKSdTUoBvDieCPu7IrEW6uTcWpfJj7eHoc3VoSRCMoUZCrMss8OUWB15mhRn0rS + ydi4tCoI+4ZScdFkCg6MRWH/aBj2jYRibbMXxtgfmkJJhEn4ar0dMBztjuVJ3tia4o6LUo24hmLnaLkb + ft4fiHcXheH9dRH4Yk8cvr0kFeeuK8TZuytx9ql2fPtSD868M4Rzv2ed/lVGds9wO8m+PMr23QG80Ao8 + Xs8+b8W526348qpC/GFXEp5fGoyTA2bcwdhzPcXwzcTddcwDzSo8yHj3TIcj3ul0wQcDenw0YsDHY3p8 + Oq7BZ1Ou+HxWjc+XcLtSjU9Xa/DJBg3+sUWHv23V4sMdany40wV/2+GEf+5wxqndany1T4+vDhrx5SVu + +PJyD3x1pRdOX+2Pb64NxTc3xOGTqxPw20Ox+OXuRNy9LBiH+s1YU6fDSJErRax9LaMO5uS2YsO8AaxH + k0BGBBfIFFj2tY+6CtTKmkV9zMcDhY4YsagobFWYqxQD2BV3bE3GG8da8dUby9l/ZNrnHcAX24CvNgNf + bwQ+W8u+tQynX+nHH+4oxSPLg3FLhwGHbE7KFNBT7BN9FEYNzKc1Hip0kFCOx/Azttf9JFY31fjhjmoP + 3FzqiusY768tZF5gnriR53BbBcu3xglHZcrtSkfcw5zwaLsej1I8nKhzwjF+fhe/d5Q4zs9P8HsPMO6f + JO6rUeNkgw4PtS0YwGbcVmvCNZVGXELxvItiZvW8AdydSfFDoVsmpm+CCrk8Z0EeX5flalDFcqu3GufX + 2zIrBnCPGMBtPhcM4P52D2X7YwO4weqgmMA/NoB76sh1ml0w2qHBVB95jRi+xOygCYtH3DDXL2avHmMs + +5FWF0yyLBUDuMeAWYqsuW5vDNTo0FrigOYiZzTmaVCfo0cVxWh5shE2it8yCtYFAzgnRH0BGcFapAQZ + EO9vQCSFVJinC0I9nRHm5aIgVF57cN/bBTGBFEUhOiSEUhCR5CdHCAEXc9d+4zw9gRwqhcclwZU10tIS + Za0mfkcIPol/CkXFggEcRSijZslBI2LElHRElIBiU9kqkPVq7WZoVKzdIIqM/t8NYGUNYFk3M96sIJIx + VzFaApzg7+9AcSc3KgxITZY14pwRz/qMVwxg5x9G/fKcExJl+2MDWEbn6vn/PP6CAUxRdAHymgIoLFxG + CMs00Y4KFCOYXDuKIlAQE+ekmMBiaovZm0iBsDDltYx0/ncDeN6g/ZEBHCAg3/QnR/X1s09x5aGsifSD + ARzN85HRLkXkhQX5npARLMnJYqzZzV9BhFK2rAMZhckyjmU5SBmkZ+qQlW2/8ZlH/VFEjlhi9UJxmRvy + LTpk5zkhLdMBKeQigmQiNcUBOVkaFOYYmCtkOmgzKsnnq2161FQwxtQZ0N5iRHenGwbI4UaHfTA7FUje + LgZwgIKJcW90dqjRwLjZUOeCJvbRpkZ3wgcN1BG1Nf6oooaoqvZBbZ0XmlsotLsC0dcdgJmBcKwcjMbq + vhgsb4/EUhkFzBzYZ/FFY6ZJeQAiM4wikcI2kWWTTMGXT95srY6yG8Ddaegi+nvSMTaYhdmxAiyZLMXi + yRLFDJ4YzMZob7piAve2JaC9gb+rkKnp/FBd5qtsa21+ys2qNplisDkM7U0higHc1uiPVrlhQ57WUuuD + tjp/tNcHokMZHRyMnuZQxoswZQTw5LDdAF4yk8ayScai6SQsmkngNoE6J1YxgBXz9z8MYMG0mL9TYZiY + DMUUX0/NhGOKPPcHiIkbhhl+Z3qaW743KZj/3eRUKCamqA8ngxRMTIdgnK8npvn+TCjGpoIwMhGEgVF/ + 9A55o7XLhMY21lELc2+LFo3NWjQ169Hc7Ma680B9nQdsVhPyGYdSkijIExzZ19juf2QAL5i+YWyDYYz9 + YewfEdEu7C9s++zfsYwtiRTvaXEyBagnylI8UUr9WhxnQmmsEcVRBhRSi+UHu6KQMaCY/b6C3KKa36mN + M6A50YjOFBMG0s3UR+6YzSMvKPLG2mLqRGJTkRc2MddstHhgY6kn1pV6Y3WpH5YU+WIq3xsdCTrY2J+K + 2M8qFAOYuSDBAcVJRLqzYgCXFNpHAFttXigp8/o3Azgt3YR4xpoYnktElN38ECMkPNrI/qy+YAAHiuk7 + b/wGBDor09b7y6wFsu4cY1ZgIOOKYgLLyAAHRFBryk2XKMacGF53fKSOYByJltHAckODfThJi7w0A4qo + C8uKfFBRHIjyYn9YqPvkhrj9BqUj4mIckCCmZ4r0fQ2ycvXIzTcjz+KJfPb9fJbJggFss8l6375oqPRC + K3Vjd4URvYoBbMJ0rRc1tT82si3v6IzEzo5wbGXbX2U1szzVLE9HTOZTKxeQQzCfb6SO39nkigNtalzc + ocfhJjUO1LtiX6OWuseITTV6LC1x4fcdMMHfTeY7Y5LHGeK2K1OFpjQV2rKdMMB8PVbpgbFqLwxV8Zxs + RnSUGdBWakBDkcxwokdrhSfzro+yPmdZjgYFMtpXzF/GYEEOyyKHOSubMfLfDGDG4PRE1wsGcCrbr7yW + aeJkSuh0MYT5nkBMZJkGtkzWm8xzQ0WBB6oK3FHFsqwpMKEuz4i6fPIF8qv6fDVaeH49le4Ybw7Akp4I + LOuOxPrhRBxeXYK7L+vH8/duwDuP7cMbD+3Ciye24OX7t+GV+3fg1RN2vHafYBfeOLEbb53cjbfv30fs + xbsP7Md73H93wQCWrRjAxAUD+J7dCt4+vhvvyAjh+/jeyb146c5NeOyaRbh9ZxcuXmrFpqF0TDWEoLPM + HS1EncWAKvKeskx5AEKFYnkwjihmDrBlO6K2wBnNpXp0lpvRX+OF0QZfTLcEYtF/GMCDpSYMzRvAPayf + TvJO4Zxt3LYKNy00orVA1qDUoS7TFfVZrmjO1qCVOaYxxQn15F8NyU5oYptdgJjAypTPivnrhDZ+fsEA + JmQ01P80gGXrgukSVyxhrlpd64HlMupIvsPvThcaMFfsgWU2X77vh2Vs+7Ps46NFpgsGcIdiAqvRla1V + pn5u5n83MD60yMjjDGd0ZDgqDxLK+qBTJUYs5vUvY59YWqTH4ly1ghUWI9ZYPbCU5fuDAeyAfpbzSAHP + s4Qcj2U1x+0y5uCV1PXrLM7YWuqE3eXsQzXa/24Ay3myzMQQb2Rub0pzVYzzJtZZEzlPXaQK7cz7k3mO + 2ESNsI19chu59MFGA67s8MQ17T64ttUL17X64kiTDw7XUFMxpouZMJLhoKwxKSPVFANY7pvN34SOE4SR + 40VoERUjpgvB2BcSoUe4YgILqBejtYyNOuYDzQUDOFdG7MoavLLm3wUDWD8/KtjMfuqBzGQPfp/8LsqE + CBn9+yMDWIyZBOaAlAQD+aest+eJonkDuJCcqCTPB6UFfighN1qApcCHecoLWTluSJWH8VI1SJcHGDP0 + BPfTqY/TZK10xgll+kcdCuahGMCpavZ9DUqz9CjPN6K2xJ383h3VLKcqcnExaustjmizqpVZE+RBlZFK + 5iSW5QTbwrTNhBXV7tRpblhfb8aGehNhwDplnV411jZpsabVcMEA7qtyZX/8wQC2sC6KeW4lWSbCiJJs + PUqZd61sOxVs53WlbJtlWgzZDJioYJuu0mNlrZ7/pcEGHm9dtQPbtwrLqe1Wk3tt5n/tG/TDwZEgHBoN + xEHm/ANjvjgwSoz5Kebu5hY11tQ4YgV/t6xcha0yAng8AEfmwnHV4gj+1gfbqOfXMKbPUfMNFTtSf0pf + dlEM4ALGzyTmsEhyVjGAZRRwTJADtYUDshI0qGTOqi0LRL0tBI2VYagsDUAZ66kwxwO5GWZkM7dlJuuQ + zvaRRG0QH8VcxvYcR24rSGC+TibXWDCASwrIH4rcYLOYUV5kQD1jUJtNBsC4oaPExHijQ7M8eMJ4Iwaw + LJHXQy47yP4+SP7bwxgu9yM65L4E0ZOrQ08OOW3uAgwYYN4fL/GmTvbHGHPmQKEHuvhZK4/bJLMb5FHv + Md50LBjADXpMtLlhUbsb1jQx57EPbmXe216lwS6bK/aWuWA/cZFNg+ua2A9bfHEN+/alVZ7YyPggA1s2 + ZzphO2PGbra1PSXUzsp6wQbsKuMxylyxm7/fY2WulUEg1PLrWAdL2VamU10wwlzWz/zXm6zBIMuon+2/ + jZqtlu2/Nk2LumwDmngNreQA9RYvWJnDJM+JAZycwjyZ7kLdQh6RrqWO+Z8GsLIWMI+fys8uGMBEaTH5 + kjxYyj5iY9yr4H611ZP17YFavm6s8rOvCyxrACsjgANhI28TA1hGOsYyvsSTH/6/GMDR1Gz/1QAO1/9P + A9hf1gV2UPDfDGAZASwGcFSMjBLVIY4cNFmmClYMYF/GAx/IFNBZ1Nxi/IgBlEh+FU99mxRNnUR+mybg + uWXx/IvI08pSzajK9kYt45AYwKUJTiji94sJebhmoNgZK5rdsXMoBDuHI7CpPwKLmwLRyD5UzGstoBYs + pt6sIp+uIy+pI3dpYkxuT3VQRgFPMLcsJtdYUaTD2jxXbGce3cv4cJAc5WChJ9sY+ym1yyzbb5tMA83/ + LSNkWv9K5s/qJB6Tx62Pd0ILeU4rtXkXudFckQfWVQViE+tqdbEBq9kGNzHW7C5jHKhywzUN7riV532i + 0ws/6/PHT5lP7m/UKfds7qxxwh2Ma7cxnt3crMZ1xBFqicNteuxqMmBtnREzzMO9ReRMmQbybR1jBXU+ + Y0SQjxihRoSFubE+3ODlZ4S7txYe3mq4ezldGAWswE1mx2J9sn7F8JWpn0ND+dtwk33qZ1/WvZeDop8F + PvxuAOs6NIQahXw6NlpDzBuXbDfxkfLwOtsz25ViADPulzMHVJMz1zLuN1JLtFIPtpcHoJVttq7Qh9yI + OYTaJkWmLZ43gCV/pcS7kX/PI85NGQkcw9xoN4H535EmRIcblZHAYWynMgJYRgfLTEDKufFchP9HsP7D + qFHCA9gvuJ8WrkI+Y18FY2MDY2RrhniInsoawD1iAFuoRfM80ZBuRGWCGqX8roXxUtpRPo+TR+RTb2Qx + FufITHFh7O/UHUmMyzHM79GEMvKXCCPEBA4PdvhfDeAYahOB3fzVKQ9mKSZw1A8m8MIUzQsGsCwFUZDh + CUsWtUcW83amhzL7h4wCllG7SSxLMX5T5o1fgbwno+ylr8Wxf/0PA1gB49Q80sgT0sg5MuJZP4IE0U3y + cKeLYgDLDEElzPVWtsGKEjPhrqC8xBM2QozfCwawMgU0z5WxUpbVSU/hObK/LBjAsnSETP2sGMDc5rLs + s8gvqqzBWDRZZjeAj2+rwy1ry3DxTBY29cRissILA/yDXgbeXosM2/ZnkglEX24IA3UIhjJDMZoRhvF0 + CviMCMxmRWBpbhSW50diSVYwlqT5YUdpHK7uLsXVHRbssSVhU0E4lqZ6YoYXPJuoxTSD9Lg8zUESOMMO + vyrHEdtJFo6Q8N0zGYvHVmbghe3FeHlvBV45WIfn99bi53vq8OTOWty3qhDHlmXjrsWZuHtJNp7YUYu3 + rhrFR0dX4+/H1uK5Pa24rDUE63JdsTzDFbt4PZe1hOJIeyQuaQjEJdXeigF8OYXbQasRe0mG5OnClUWu + GMtSoY/oYsLsLGZCLlGjloS3tsSZhIBEttoJnc1MXl0ajA7qMDmiw7IZE9Ys8cK6pd7YvMwf25eHYdtc + CFb3e2KxYgA7YrreAYsaXLCEiXdZkxnLmz2wqs0Hy1sCKCTNqGbFZUsjYicQ8zeIEHIS6u6IILMKIUYS + XAaKEn9nNAS6oo2dstePBJrf2Uoyc2WsCrcxaJ/IUeGX9Vr8dS4AX+yIxdlLkvH9JQk4ezgBZ3bH4uu1 + UfhoOADv1pnxQq4Tnkx2wONJjniC4uFx4mc8xpMUuM9mO+BXFLxvFGvxJgnL60ySv7J54ykGmJO2INxU + 5ItD6e5YmWxCT7oZtUwk5em+sKQHsgNFIj8rAbk5acjJyaCwJ/JSkJMfR4EfjgJ5CpINt9JKslrhgXaK + +T4ShxGSiOlCVyzKpkjPV+GSKh3u7HDHz8c88JulPvhopQ9OrfXB2S1BwFa7Afz9zmB8vy8U3x2IwKl9 + 4fjzZj+8vcoTL8yZ8NiYGicGGfB7HXBLjyNu7nXGDT0uuKrDCZc0iQHMsiu2G8D7LCpcxde3tzvi0SkD + frHSC69sDcVru+Lw9OpwHBvywBVMHnuKVMo6xQdrVLi42QGXdTrhsh4er9cRl3Q74OI2R1zU5IqL69XY + U+aETVkOWEexspmi9SBJ810kXC+sjMWLG+Lw3LowPLbIjAfH+J9jKry82hkfX+GPb++MwLl7woH7IoDj + YcAdAcBN3sD1Xjh7gxe+vckL39/O9+6NAX6aDjxXDLxWA7zTDPx+3kj9awe++7ATZ4jz7/O9Pzbj+1/X + 4sybFfji2Tx8cG803rzSDb/Y5oiHlqhw77QKd42rcFO/Aw41sfytJOW81hm2pxExgCncJsQALtRgR50v + 9jcF4GAziTq32ys8sZSkf4DX2Ul05bLv5BPsQ4MUIVu6QnDzmlw8dmktXr6tHe8cb8fvHmrD359tx6lX + eF5iAL/fCvylA3i7Bd//ogUf3FWCJzYE4toOB9zYxXNj+Ty5yQG/vcGIU48E4cxzkcDLcXYD+HWW06uh + wIt+OP+MJ84+4oZv7tPiy7ud8eVdGnx70htnHg3F+Sf5XRn9+1Qa8Hgqzj+SiNP3ReLzuwL5PZb78SCc + vS8EZ+8NxpljgfjuTm98fbsJX9+qxhc3qXDqBhX+db0dYgb/82pn/OOIHn+7wh1/P+KNf9wQiM9uD8WX + x8Nx+mQYvnkgGKcf5HGeYH0+LyOW03HuzTycedeC735TjHN/suH8XypYZ+WsuzKcf92Kb35RjFM/LcLH + Jwvx/rFC/PG2Avzulnz87sYCfHBrKU7dW4vvftaOc8/28brHgV9PA2+N4szLg/jn43145YZq3LUxA9v6 + AjBM8l5Pkm5hnC1l8itPMqEs0YSsMDXSgl2RQuGaxoSeG29mv/WBrSCYZDcc1tJoFJfFwFIuBnASSmtS + UV6bjor6TFTUpcFWmwRrbSxKqyP5eSi3oSirCUZZbQhsdWHcBqOAIiSRZC+CpDwoTJ54c1GednMzqeDJ + eObv6YgQWf8zTE9Ry98WR5KMR6O8NIKJL4hCOQDWwhAKpzBkpPojKtKNxEmOo0FgkF55mi40WKAnGdCT + GBgRS2KWEi1rAHuT9HggOkCLKDcSKVcDslxNqDJrsDjOgKPdUfjN+nR8cygbX+xLxO+3RuORKU9c1uyC + 9RUumLKoMVhAwZXtgu4cV6xvDceBkSSKzyjs6GV77/XDJpLKWQqdThLXam8SVl5TR4ATlqX6YkdeEA7m + ++LqfA/cVmjAfRTez/X54d1Zf/x5RQA+2RKGz/fG4bvLc3DmFiu+f7AJ3zzViu9+1YWzr8vI7iHgNyPE + IPtDN9t1E/DzWuDRKvZ5G3C0Cmf5O5kK+q2NsXh41INx0hU31qlwQzVjGLdHm1U43qLCI8QLrQ54r0eL + Pw0a8NGoEZ+M6/HZhBafT7OPLNLg82VafLZCi0/XEht0+McmLT7eoiZc8M8tTvjXFgec2uaMr3Zq8PUe + Lb4+ZMSXF5nw+cUmfHGJO768LACfXxmODy+OxJu7IvDM1jjcvjgY+5n/VjWYMFpmQG+xCV0kNB3FRrsB + bNGjoWge+TLlk0yBpUVrrqxzpKboVSvr6w0UOLIuGHsYp+co9te3iwGciNePNePLN5YBf9sMnNoOfLUV + +Ib732wEvlzH95fh61f68Ps7SvDTFaG4tcNEMeuMdczti2WERawDWphr60nsOynqxuOcsEoMYJKqm2oD + cFu1B25g/j+Sp8LljIFHClW4hjlCjODbbSr8pJyxnNvj1cydXTo81a3DY62ueLjWEQ9WOuIBnuuD5Y54 + mHzhoUoXnKxwwnGbE+6tdMX9DUacaDTjWL0bbqsx4dpKEy6xGbGr+N8N4Grm4uIEEuM4FbJjVMgicvi6 + NEdu7pD4k7M0lpvRzPbVVmtGZ5OHYgLLGsBi/A6wjfa3k3z/yACutzqi4YIB7Iz2Kkf01Duiv9kZQ23k + ZLyOucEfDGDBdI8O451axfxVDOAuuwE83WPAXJ87FvV6YbTRiN5q1luFAT0U0h3FnmjK80JNmgfKE91Q + Fmf6wQAOVdsRokY2RUZaqAGJgRQg3q4I93JGmCeFFreCUIqqEHKgUA8HRDNexJL7xAQ4IzbICQkUBkkU + oskUuOkJDshOdkYexakYD4UUtFmJOvuTzxQ/aUTqBQPYiQKB/xFB4RBJnsXfCyIELGNlnzFTIFPF2uGk + GEci7P+PBjDFmt0ApuiPMfP4BgQHucCP7Swk1Blx8VplfaoEClkxgGMVA5hifd4AlqmeYykGEhI08waw + jM4VM4flEyfrC7M8KLTkJsMFhMmxuVXOaWFKaDGcxQDmlkJLIIZurICi+sdTXsvo3wSKBbsB7PI/DOBg + Hj+Ixw8Oc0AgtwsGsCc5que8ARxAHhpCUSZPBsvoXzF7ivI9ka8YwBRjMXKDhOdNyLS7C+UqBrCYw7GM + o7LWcWoaxVC6HlkU33n5bsqU0HmFemTnU9CQkyaTmyYm/YAk9pEscvz8LPsUSSUFBooiI4WSDpVl7Cfl + GjTUatBCcd/dYcbQgKeyhuyi6SAsmvHD7Kwvpqa80dsrpq+DYgDX12lRz/5UW+OJ6hpfVFT6orzSh/BC + ZbU76hq90dHmi552H0x0B2BZXzjWDsRgVQc1UHME5upCMVgsax1pUBrjjHQK2pRgJ6TK+rEiMIuY2y4Y + wBno6s3EYF+mYgCL6btoooQoVvYnh3OUqaBHetPR35lM7RFLDRKqoLk6DE1VoWisDEZTTQjaGkLQ3hhK + /LsB3DpvALfwWlqoe1rrZVSwfUpo+xTQERgfjrEbwLNpWDqXym0KkYRFswmYm/kvBvC0GL8RmJwJx8Q0 + MUU9OBmKcb4WTMxGYGLODmW0rxjFF8xhvi+/mf/dGH83OhE4D7sBPDoVfAHDrK+BsUD0jvqja8gb9W0U + sI2uqKp3QSVRznhbXukMq80VVtZ5OWOppYjiN5N9in0sge04nm0t/t8MYBeEsW5CiZAY9ptoxgOKeeWh + kHBH5QZHLPtTcqQalmSK7WQK70R32IjyODNKowwoYiwrZCwqYt3KtM/VsQbUJ5jRGG9Ca6IR3dRG/WlG + jKQZyJ0ZK3PM1MlmrMw3Y3UeNWOeAasLzFhHrb2uzBtrbYFYURqIRZZADKS7oS7CPgq4PNIBVvYTWRet + mG3+fxrA3ijh7wt4nNwCN2Txf1LT7DFDTA77iLd5A5hbMYBlxK8YwAFi/MosBWL8En6y5hxjlR/7t0CM + YDGA7XBQEMr+Hx7McgplrCCXjAlzVUbdJUbZH7SRp9llTUR58tyS64GSfJ4fUcD97AyjUh8xjLGRjL3R + 3MYnOrLvs2+ICZxjQE6hG3IL3f+rAVxPrdFa7oaucqOSawYrTJip88HKlmBs6YzCru5Y7OmOxlbqkhXU + 9TPUsCPM+aPM4WPM5VPM4+uqXbGd7WcvtfnBNj32N1Cr1blid50G22r1WFupxYzFESOy/ITon3xHjFk0 + yoOtnTKaijFIRgAPlJkU81fWmu2vYP4t06O9VAxgo2IAy4jVZpsHcy7jRqEZxVkydbPLvAFsH8Wbzdgo + yGLs/XcDmPGOeSKNcVr2lRku4rkfx3wmYHuWEWjpRE6SCwpSNYoBU8a6t+W5wZpnhjXXhHK2sfIcPSpy + NIQrKnKdUVOoRlOJFl3Vbhhp8cNcdxjWjSXj8Dor7rxiAM/etwGvPbobrz68E796YBteemA7Xn5wJ159 + cJeC1x7Yidfu3403Ttrx1oP78Dbx7oP78c4D+/DOiR9MYDGAf028N28Av3NsN7ELbx0X85ef3b8fv3ng + AF6+azMePTKDm7a04fBiKzYOpmOqPhRdpeQRRWbUkTtW52lRRj1TQv5mSRHICGAHVMroPosW7TYzeio9 + MMj2MNroh6nmQMy1BGGGcXDBAO4vNbHe3NCvGMAGdLIPtRXqlFF4HeSonSXuaLO4oSnfgJpMNfkL80Ga + KxpSXVAn6x6KecltfbLAWdk2KWavHS1JjmhNFvzfDGBXwvnfDOBVVR5YxPYzXaTDYvbrZWz7q6oCFCyr + ZK76DwPYbgKLAaxRDOCmZOavRBWa+J8yEkvWclwwgCfYFmeKye147Bn+bprlKFiUq8Zy5svFFp1iAA9n + kwtmOqA/y1E531G+P8VzkpFcS9mm/5sBfIgc/0CDG/Y2eGF7gw/WVHhhutCIgSwtOjM0aE1To5loYVm2 + pjqimedYz77fypg2yv9Zz/64tdYZO9kPD7ebcFWfD66jfr2xLxA39Qbj6rZAHGKdbrEasYy6YIh13sG6 + l2u1sT6yySmSgskHxPwNETgjirFZ4p6M/BUEy9rmYgBH6siJfhitGxv3gwGcI2u9KwawTPn47wZwbop9 + 9FQG438ieZ3cJJcpO+0GMHPJvAEsU3dmydIPwoFkmmdZ61cxgD3/LwYwY3a67kcGsFaZGSE9XYxEV3Ic + 8mXWsWIA5+jIce0GcH6qGgX8vCRTx35vQJVF1gKn1mVdVbKuagqc0ViqRns5+U8lNUGlJwZkJHyJUcFY + qR6LK5mT6tywpsGM9WIANxi41Som7fpmHda2GrC4UYuJOmqyKtbjjwzgogwiS9akN9jB87KwfRXLSH1y + tspCV7QW83elOoyxnc+UiwFswnrlP3jsGmcsr3RQsLLGCeuatNg35I+Do0HU3IHYP+yLfcNe2DvoqWBn + D3/b6IyVlSosKaOWs4oBbMDhUT/FAL5mSRQuGvfHrl53bOC5L+X5jpZSx88bwFUss+JkljFzfYzkMea4 + UHLXSObZGLad1FhXlq0bSnKZ7wvI/UoCYSv2V+pNRnPnZnnZlzeRmXzYThL5/bgo6hHy8pgI4b9sf7Lk + TJzcgNcoU0AXkQMrdUZ9W0p9W82Y00Ad3MQ+1czYI7MNNLMfXzCAWY99zOXDVh8MEbIvo3m7cmUmAmpp + AWN83zx6GOcHCzwxXkIuaw1gnfpSO9sNYDmeTGfflOekGMDtZWLiazHcqMdkuxmLiDXkxptYFzvq9NhZ + o1H6tWIAs9wuIn++odUHN7T54bpmP1xR44WNqU5Yzzi3hfFjd6EWh5mPD1e44RBz4E7mlc3U7JvYPjZx + u7nQCRsKWV+5jljCnDnFuDTMOGk3f2X0rwnDed4YyGNeT2fM5XtVya6ozmT+ZA5r4LXXFLgrU5z/VwOY + 9ZnIPpP0bwYwdRb1WkI8ObcYwCwfWQdYDOBi6omSYnfChBIZWVfsppgr1dxWl5BzlfugsSaQfDoYDRWB + qC5j3ed7IJO5OJY6SKZUFl74vxvAdk32nwZwTILMRKD/Xw1gmQb6/2YAL6w1HiUjMOVhE3LN5BRPcipv + 5BJZaWa2SzGBtEhlGSaLpmKMTaG+SqPmyiRnyCLfLaSOtLL9VmZQy+T6XjCALeQeubzGQsbmSsbWdvKf + mToDNg+GYOtIJNb1RTInB6CadZTHvpLFvpPDcyuh5iunVq7kf9WRb7cxP8s6wJMsY2XpAOae9WIAsy3u + YT44zDZ7abEPDtt8savcD8tkwCHrtZa/l9HHlcztlcytCwZwI9tKG+u3g9t+5pElZbKUQQg2VvljRaEB + K5jD1jPH7eR/HarwwBXMpTc1eOJYmw8e6PTDvU1u+EmVK26yOuAGmyOur9bgOl7XkTodLqrVYU+1Hhsr + dVjGGDUunEDiaBrjbLwOaazn6EBnBPs6IIj1FRZqZNx3J392Y90Y4emnh+d/M4CJhemfZernYLlfyd+G + hhnhpxjAzv9mAIuGFt4dxPqOJJ+OjnBFLOs5PkarrLmbEG0fBSz3M8QAtrDN2xhrqxgTqvOMqCdfbma/ + bysPIIJRX+RHnWBEFuOQMmJVeDk1SRrzU0q8+d8M4B+PApb1gOOiTEp+i4rQK4awGMDK1NAhLsq5RYU5 + IzyE7ZF6X7RAKDWCGLSpzMO5sp5vso6cibFNlrNh7BN0sA91FngzFrmhJlWPcmqEErZJWfo0n7k7l8eR + JfeyeKx0tqt06pA0/mdigIPiiUURYvzKiGP53/8XA3hhPeDYeQNYmU5bTGDFmBWD9j8MYPaLjCSDMvpX + DOBi5m4L8/iCAZwuBrCYvixPxfidRyJjfzzjfqzEf/afeNbTDwawq/IgcSL5hmIAR7FvxhiUUcAZ1Iky + a1JGgo6ayYXcgv2Tbb6QfaQsn2VUbEa11QNVVk9UlXmiglxYMX/nDeAS6qRiaslCmR2B3D8the2D2iFJ + dAT7ygUDWMxfQtb/zaEWzeL7laIzFwzgR/dV4MG9Nty+sRAXz6VhZVswhso80C5Dy/PYsBgkmrP80ZYR + hHaiKy0IfSlBGEwOwXCyfU3g5XnRFLPRWC4GcIo3NuQE4WBlEi6qSsa2PHZW/n5tmhdWpbhhFcXpSjaC + FezUy1OYHNJIAnOdsKPIFRdVG/GToVA8vCQRT67NwjObCvD0lmL8bFMJnthegad31eGpnTXcr8Jjm8vx + 003leG5vC964chAf3rUC/zpJ8XJxL67vjcFqJqhxNsg12VrsoFg7UOWNwzW+uLTaB5dRuF3EpLWHnX6X + GMBMYiuKtRjLIVmnyOukUGqWtfZynBWiU57vxAThjDorSX4NyXcjE1ibK4b71Fg0bsDyGXesXeSFTUt9 + sW1pCLYvDsW6IW8sbRcD2AFTdSrM1pFwk1QtaTQoJvDKFg8sbfJRDOCaVFdlLZNEBtZQmZqEwSA+0BEJ + AS6I8nZApJmB3I3B2cMB1e4UGNzvZ+CY8VBhJzvCNQycP0lW4X4K1hcpZt+f9MXXGyJwdlskvt8ahjOb + w/D16mD8azYQ73d7400GvOeYkJ9mQv4Z6+BnFKY/ZWJ/lMH78QwVnuE1v0Dx/GqpFq+zfF4u98SzNm88 + ZPPD7UyKF7Mzr00yYpjBqSWFCTTDD5XpQShLC0VJRgwsmckkqxnIyclCVi6Rl4ac/ETk5keS8PrDUugJ + Gxt0XbkXWsrd0cX/GKDQmCjSYC7PAasp1g/YdLilxQ2PD5jxzpwn3l/mic9WeeLs5gDFAD67PRDf7QjG + 6d2B+GJ3MP621Q/vrTTjuXE1Hu13xkODTnhgVI0Tk1ocnzbg5BJPPLDCD8dZTzePGBQTeFcpy69Q1v9V + 4Y5mR/5GjV+t9MQ724Lx6/1ReHt/DH65JRz3jZtxRbWDYgAfsPH7jTI1sRq3Tuhx25QWt8xqcPsiNW6b + 0eCWcS1uHtTh2k49LpUn63IdsCGNRDVdhUtInu/p98RDUyF4YDIId/bqcXsn621EhZfXu+LvV/njzNF5 + 4/d4KHAP8RNf4GYPnLveHWducMN3t3jj7B1+/IzfeyQZeK4IeKMK+LWspdsK/LUNZ99vw3cftuDsBy3A + H/j+uzU4/6oN3z9bgC8fSsX7N4fgtb1aPLVKhXv437d0sw21qpgQVdjO61tfLKN97QbwGEn+AEXlGK9h + GetnO8XY/tYAHGzzx4Fmf+yolDXM9BjIcEQbr7E5k+DvWok+kj8xgG9bX4AnrmjAa3f24O3jnfjdw+34 + +y86cerVVpz5TS3wpwaijefZhvMvtOLvR0vxi22huJ11KOd276QKT21Q4a3LXPDRMXecfioEeDEaeC0G + eIvb1+2jgPFzH5wTA/i4Gp//xAFf/sQVp+/1xPcP8fs/iwWelCmz08CGjvMPJuO7e2Pw1VH2jbuC8c1R + MYBDcf6+cJy7NxRnjwbi27s98e2dWnx9O491qwpf3KLC5zer8On1KtaVKz683IC/XuqBD1lv/7o1Ct/c + l4xvHkjEt48m4JufxeHbZ+Lw/fMJOPdiCvBqJs68lo1v3szHN28XEPk4824Rzr9XCrxdxmux4uzzpfj6 + iWKcergY/3rAir/fU4IPjpbgo7vL8OnxKnz5QCO++1knzj3Tx+sd57XP4OzLQ/jn4614965aPH5RAW5e + k4Cdw0GYbaY4YB+qyXaCLdUFljhnFMSQRItxwsSaSPKWHOqEnFi9MsrFluuP8qIwWC1RKC6OhsWWAEtF + Isqqk1Fem4rK+nRU1aehsi4ZFbVxKK2KRKE1CJbyQJRUBfB7ISivD0NFQzj3g5Bd6oUkCttYEuDIGJNy + w1GmO/FizApgTIsIYmIk+bCWxaCqMg41VURlFEl3CCossvZKAEVyADJTfRAVaUQAiZOfrytJkjyZpiP0 + CsKDDHYDONSEpEhPpMd6Iz3GCwnBBsR7G5God0eW2owKkytmmYTv7orE78QA3p+Or/bH4a97ovH8+iDc + McZ80KLFolJnjFq0GKRQG2Vs3szv7+6PwDaSyc3tnmzPXhTMBgxmOqCesVdG/zZRRE4yFm4rCsWlVdG4 + whqIaxnf7rAacX+NCc/3eOHtKS/8YZEH3l/pi79tDMbne1Nx+goLvrmtAl/eU42vH2nAt082s72wD7zU + aR/5+ysxfyvZZm3AQ1bgPuLeauCOCnxxdRF+syMJD4/zfzrVuKFBhevYf8UIvp3x6c4W9htuH5X1gNuc + 8VaPDn8cNODvwwZ8OmrA5xMGfDVjwJeL9fhimQGnVulxai2xUcD+s9EFX2x0wlcbHfHVZm63ueD0TleW + mw5fHuR3Dmjw6QE94YUP9vri3W2+eGaND+5dEoCrxnyxo9sLSxvdMMr43ktx1U10sDxbi+XpXnlyUUdo + UUtxXJelpUDXoinDvoZZZ7Yz+piDB5gL+rNVGGeMFgN4c5cGd25PwJv3NuPLt5YC/9hsn/756y3Ad9z/ + diPwlRjAS/DFS1347a0FeHxFGO7ocMelFLZbeLx1FCOLMlwwEOeITpK2nijGNpImMYAPlHjghlo/3FTp + jmvJR67kf1/MeHYJt1cWqHCtRYWbS1i2jJEnamStZQc816fFiwMGvNSnx686tHihUY1nKh3xNMXGkxUO + eIzbB6ysC/7uaKkjjtlccE+VHndXm3BrpQnXlptwKduJTKW1plCDqRw1ulgGFcznhRRU2cztGTzHdPKD + LIq6EpZTRQHFcokRdWVEuQGNVQa01ZvJS9zRLWuftropBrDgBwPYlfzFEfVlDmgWA7iS5VzrjJ5GZ8UA + HmQbGekiX2G+nRtyw0y/CRM9eozLw24dGoy0azBGTHbpMdMto38NWMzvLhnwxCK276kOD0y0+GKiMQgD + FCKdRf5oyPShmKSAjzGjiAIjP5TiUUzgMLUdEVpkRhiQEqxFLEVRuKfd7A0T05cIYd8KJsLIdaIpwmL8 + yIUonKJ8HBBHMZBMwp3B8smlaCxi2ymjeKsu9kZZridyxQCmOE2PIrGnmLpgACsmjxil/B/WfxjLVrBg + BIfKluIkIpaiJ0ZgHyUoplFoNM8r0hkh4QIXBcEUa3aoEUaiHy0jRGLFAHajYDcjJFijrJcbSBEfTUEQ + R1EWG8fzT7AbwAkk/YlEAoV1XCLFH+O0mLTxyRokpRmRmuGGpFQjP9MyjooBzfON5LkTC6NqQ+TmgwJ+ + xusKj2J8pTCJ4HVFRrPMKNDF0JVRwDEUG2L0xiawLPh/8fJ0u9zg4Gv5LIr/L1iYAlpM59CIeeOb5RnE + mBdAseZDnirC1ZcIomgLZ16Ji3JBfiYFVJ4nCnPdkS8jW5IpKnmsCJ63nF84zzuSIsoO1iUhJnAMy1sM + apnSLYUiJS1dr4wKTs9yRVoWRQ15eQq5SBI5alIq6z5NRgM7ITOd7YmiKZ9xpCBbAwvjSnGhlmJJS7Gk + RiX7W32NRhkJ3N/rjvFxf8xMBWJm2hdTsz6YmvbGwJARra2uaGhwRU21lvnIiIpyM6zkvdYKL8IbtkoP + 2CpMqK5xQ3M9Yxn7W3+DG+baA7CmLwpre2Kwqi2SMS8cw6UeaCCvLgrjOTI3pAY7IjNGg+xUEyxFQSif + N4DbujPQ3ZulGMAj/RkYH8rG1HAepkbyMDGci/HBLL5PiEnck4rutgR083fDvekY7c/GYHcaX8ehozHy + wtR1CwawTAEtJnBLHVFLDce41kz901zrg1aZElpmHxKtd8EATlSM32WL5k3guWQsmo2fN4CjFfN3eibS + buRO2Ufvjk2FYmw6nNswjHB/hLx2ZCYM47ORmJiLsoP7U/zd5Cz3uZXXY/y9YHSSv5vkbyYC5xHE49mP + M8T9wXExf/3ROxaI7hF/tA94o6ZVB1udC6zUOaXVziguU6GAcTmbsT072xG5uS7IpbbJorZJilMpN2MT + YtnOiQUDOJR9OYTiPZgIokYMljZOyE288DAxN9lXqcUSwpyRT6FeKuZvEsV4EsV4vBm2KHKmEFcUBzih + OIj8KtwVtbHMawlmtPD77RT23dRHvck66mQtRlI0mGB+mc7QYi5Tg0VZGizO1GIx2+xK6uzVJd5YYwvC + irIgLC5mGeT6oDNJj2qej40xrpT9WKbGsySqUMQ2b8lSzxvAHooBbCnzRp7FnWVgYn9hPFUMYB37u5Yx + QGBQHkYJZ6wVA9g++nfe/A20m78/GMAOF0xgMYBDgxnreI3BMiV0gB0hMjKYv43gZ1EhjCfycAtjopjA + KfIkfSLbOmOXsv5Ultl+8yHDjIxUA2IYQyMk7hLhRAxjYXyiExLT2M9ZJpmM4TkFbv9hAPsq0zXW2tzR + zFzZXqZHJ7Vpf6keU1VeWMGcs6k9Ejs7Y7C3OwZb2P6X83sT1LED1C1DYgLn2g3g1ZUu2NKgxq4WHfa2 + GrCnQYddddQ1tRpsrNZhRbmaOpS/Y87vlQfC2a6GxAAuUqOT7aqFsai7UI2hcg9lPd1BcoVu/ldHiQ4L + y1ssGMANZW6oLfFkvmb+YyzLS1EjO9FZmcY5k/F2YVpnGd2bIk/uE2n8PI2fpTImp/L91Hj5zAUpjI0K + xPzle/IduTGdk6RWpoG2ZMoIPDF+xcAwEyaC7ZRtrEQeGCCnKslxhDXPGdVFzqi3qtFabcBUbyjWTafi + 4EYbbr6kGw/dsQRPH1+LFx7YjF8+tBUvPLgVv3xwO159ZDdee3QP3hA8tBevP7BbwRsP7sFbfP3Ow/sV + M/itk3vw9ok9eEfB/FrA9+5R8PaxnXjz6Ha8zq2M/P3NQwfw+0cO4ZW7t+ChSydw3fpGHJwrxYbBdExT + R8j6xY35JjSVuKOp2A1VORpY03kd7NulaY6wZTijJl+DZnKhrgp39FV5Y4j6dITxbUKMX2Kq3hfjbCPD + Njf0lZrIRc0Kui0GZY3ftkJuiwzKaONuqyfr0QPNBUbUkmdVUzfVJLugNskZtWyjNQmO3HdEjdyw5rY2 + wQF1AvIyQT3bclMS+dUFqNCZIWvx2g3gUcX8tY/+nVAMYGcsLtNiRZUZq6s9saLCA0us7ljGPr2ygnml + KhBrq4OxojIAs2WedgM4V4NuxfglWB5iAMtaxC3kQI2MD43kFO2pjorx3MPcOVqoY3vWYZJtdoLnMZbu + gAn2CcEkNftcnhqL2F7FAB7Ld8Eg20i/zISkGNZajDOPzhbr/hcDWIP9tXrskfVDa92wtdYTK9lHJ/P1 + GMzWYiDXiL5sA/msnueiY39SK6N3WxjLZK3jQZ7LmgonbK51wq5mDQ53mnB5jzeu7vfDjYMhuGkwHFe2 + B2FfrRfWs38tEk0gD5qnUHORH1cRBeQOsgawTAEtBnBsMLkP41KYPJAXriE30igP58k6vTLFppi/cdRq + 8TJdszyQJ1M2J8jMBYw7yhTQ3JJr5TB+yn6eYgC7KeZvapwZ8VFys5yxNFw/P52+C49NDsX4n0atK6Px + ivN87QZwlgcKMz1hEQO4wBelBf7KtlgM4IIFA9gT2Tkm8h1Zq16D9DQxf+cNYHJaMX8FufKgW7YORezP + YgAXkPPksn3KeoFFctOY75cX6FFBTVVJHSHmay1jVpM8mEIu08n2L1MOd5ca0WPRoYdtYoDtcYr6YXmd + G1Y3mLGuwYiNYgg26rGpSYdNjI/r20xY2sw420BNTG7UUuaC6gLGEbaTokyCbdCSo7dDRimzTRWQqxUx + TpYxHzflU2MUaTDMdj5p02J5rRlryZvWN/L/6vRYWeXM9u2E5dVOWFWvxt6hAMUA3jfsjz2DXtgz4IFd + vWbs7DViK/XVugZHZdTwXClBLbO9y4TDo77KFNBiAF82FYwDQ77Y2mnGygYDxspkBipXZUr3esbECuai + XOanRLaXCPLYYPKzMOa5KLadJHLSrBTWP3NXfqbcOCeXzfdW1mouzPVGbpY3+aY769mMpAQ94qJd2Bac + EBUuxg15LY8ZTZ4bT/0gN+EzUnXISdchW+ou0750gy1Pg5oCDbWvzJRkN6YbM13RLH2Y6MwxoL/IgxzS + h2Xmg8ESL/TkM16xjXRnS/83oy/fHf15dvQy3g8WeGG8xB8TpeRQFl/053swLhjRwv9V1jPPc0JroRPa + GW/6KrUYa9BjutWIJazfNY2s53otdjUyF9brsL9agwPs2wdtrrikUoPrW7xwQ6svt364qt4He8ivBQdL + DLiMcfWm9jBc2xKEiyrN2F7ojHXUy2sWwPy7kpjLZMzJYB5mf+1lvOxmPO1N02EozwsjhX7U+V5oStMr + 0/7KVMQVaeTtjBdV5AIVkseYO8UATk9i/mN7TyHn/8EAZh9mDoxnPoxjnoyLdSTHIKegvl8wgAX5srQM + uVZRocCAIsb4Yu5bi8yoKHJDhcWsGC01Nh/UlssMO36oKPFRHigWg0b4YEQo+Uq4k2LyxBIxCwawPHTL + 95UZmQiZTWbBAE5IdUdckhsiY43UmQa7ARyigZcMivBxhAf5lqefI7zIvQQ+CyDPUgzgADGAyb+om0PJ + M8PF5JKRmNEG6ioT9ZUb0hmfUhmrUpIYQ1gWqSyrFOaqFMbYNMbaDJZFHnVeCXlhZaY7ahmT6rO90MB2 + XZvnzfdMKOR3snh9+Wy/8rBhI7nPMNvKmv4gbBiOwPKuUPRZPVBKDpLJfpNC/ZdGnpjP38jUzRXU4bX8 + L1n7vo/tfJw5VQzglcVGbGBb35bpjF2MVxexLq62+uMK5rS95Har8g0YSnFUlgaoETCvV6W6KgZwDXVq + U5Ir2lmP3cQQ88hSqx/W14Qwb/hicR7zEnPKWm63l7rhQIUnLq3ywLW17rijyRtHW71xR50R19mccKRY + hStKHHGkUocrq804zJy7w2rCilz2h3QXdCaQS1AXWCLYzoTPkt+GC9f1d0KAL+HvQu2rQ0iomfVhYt3o + 4em/YAA7w93DEW7uDgo8+NrL2xnevq7wD5qfsTCUCDGQV6vh68PPvFjf1M5e8wawL8szgG0hPNgJ0eFs + x1GMUbF6JM1D7l3IaNMM8r+CZGof9olyxvxKxt3afDfyI2+02QLtBrCFeSbDDbnx8vC7i2IAp8TpmOvY + RqhPkuLcLkDuwcbHmH4wgKNNdhOYbVXeW+D8odSwdjgokAe+QwX/YQDbqHdqFQOYoIYXNJKb1mUYWK88 + Z1lejxrBEsO8xb6TT62VK/o40G7+prJNpfg5IJl9Io77MTx+JBHGNicjji8YwCEsKwHrSlmmhv3iAiKo + 81hegugoNWJjee3sj8mJUgaMG9SCC5DXYv6mJNgN4Px0N3JpT8UAFshU0LnMCTJKN5llmRzN37B/LyCR + 1xAf4UANxPMMJv+IZNsRRLEOI2WGCMYm8o7EKDuS2W9TWZ8ZCeQUCSa7Acx2LgZwNvttIXlnWQHjHjlq + bbkndY+XYgLbyIFlJomSIncFhYxnudRL0teT+PsE9t8E9kG7AeykPIAky0fk51B/MYblZcn0z9RXyWqU + F/th0WQJLj04AdXzl9nw/JXVePRQBW7ZVIBtw9EYY2BvJNGUJ6YqWRiV6QwUqQGoT/En8fJHW6IfuhIC + 0BtPop0m6/7GYH1RLNbkhmJFqhc2ZPpiT3EEDlmjsC3bFxvTPbA5wxNbiE1Z7tiU7YYtWSZCj605Wuwo + oBgjyTxUrsfNXf44MRWDBxYl4MRcAo7PJuKu6STcuywHD68vxc931+OFAy345f5WvLCvBb862IGXL+rC + 72+Ywt/uXok3Lu7FbSNJWM/kOspGOcugtIrJZxtJyEES7Esq7ebvfhKjnSUUfhRvWygeVpAYjZMEC1nv + yFWjgYm5nELDQqJczCRaQfJbXcJkbXNBWzUDRj3JaIcrpof0WDJhwppZT2xc7IOti4MUA3jDqA+WdeqV + KaCnalWYqSXZrnPBYgrOpY0yFbSZ+57okyf2hMjxPNOi7Z0pgckmg4I6J0KjjB5I8lIh24OBlsGi3swk + Skzw9Qq+f4DfvYEVf5Sk+KEcFV6qdcUHI974Znkwvl8RgO+W+eFb4tS0D/4+5Ik/tJjwKonALyhmnyHx + eJzC+zHiUQqrR0nefsbA/zRF7/MUiS9ZdXi1woxfVnrgSZsX7rF64xoSk50krbPsUB0MUnUJ7qhMZcLM + CGHiDoctPRalGckkgT82gNORm5+M3Lwo5OcGkPh6sUF7UdB7o5mNvMNGUlNmxJhFi7kCJ6zg/+8iYby+ + 3oRHSfxen3TDX5a447NVHvh+kx/Obw3Eme2BOL09CKe2+eAfW7zxh9VmvDanweN9KpzsYFkMueDxRW54 + aq0fnt4UjF/ujsUrh1PYZhLx6PoQ3Damx5UtzmwPKtzcyO/3O+P5WSN+uzUAH14Ug/evSMBvLorGK7vC + 8MCMEVfzOwdtKlxer8JNfU44PmfGQ2t98Ogmb/x0myee2O2BJ3Z54rEtHnh4rSceYJkfnwnAFU167C11 + wfZ8FfYUqnB1vStu7/bGrV0yrYqOxEqFEzICeLMGH13thzPHwoHjIcCxYOAocYc3cLMbvr/OhG+vM+Db + mz1w5g4fnOdn5x+MA57NAd6wAb+uB/7YBPy1Gd+/34QzHzTg3F/53juVwMulOP9sPk4/mIxTd0bjr1f6 + 4fXtrnhmuROO9sv6yCpcQlK9y6LCZmJDkQrL89h3xHyRKaFIJGSN36UUFDsavHGgPYDww/5mX8UAXsFk + P5hNosl+VpuuYt9RoZm/VQzg7hDcvqEQTx1pxht39+Pte7vw24c78Lefd+LUy6349p0anP9NFfC7RuDd + dsUA/vhoKV7YEYZ7xp1xR48KD8gU0BtUeP2wA/5yhwFfPR6I87+Ukb9RwNsxvH6W2UssKzGAHzbh9D2u + OHWbCl/c4YKvj7nj+/uDgJ9GAz9LBhs68GAqvr8vCd8cjcHXd4bj9F1h+PZoKL6/Nxzn740kuL0nHGfv + CcTZo2Z8d5cLvvmJCt/cocKXtzngXzc44m9HNPjLJUb86RIvfHRtGL4+moLzPy3A2cdz8P3TWfjuuQx8 + /1IWzr2agfOvCfjeq5k4/Vq2gi9fzsDpl8UUzsf3rxbhzAuF+PbpQnzxaAH+9QBxsgR/O2bBB0ct+Ps9 + Vnx2fzU+f6ABXz3chtM/68J3zwziu+dH8dmTnXj3LiuevDQLx7Yk4KoVEdg9HoSVvT6YanFHV7kO9RT2 + ZckUZmImMSamMWakMVmlU7QUxOtRmuYBW44vKgpDSYgjUWKJRrE1HsXlCSirSoS1JhmVtamoqk8hkuwG + cGUECig6CkopdkmYS6uCUVEfhuqmKCICpXUhyCPRyygIQArzQUycUVlTLsCXJCKQJDpaT2Hrg7qaBDTU + E3VxaKqPRWNVuDIFU1k+j5tDwZXiqTyNFuDvCj8fkjB/NQmABuEkVoKIIIOC2FAjZO3f9BgxgL2RHGZC + op8ZyUZPZGnMsBkYh5mQ7+wIx2/XpeHrfcSBWHxwIAqv7YnEgysDcWmfESsqnDFtpeC1eWJRlR82d4Vh + a1cANrZ4EGZsbHfHEgqkHvaHOhKSGhK3QR53Xa5MVRaLa5sTcKQqCFeSkN5s0+P+GgNe6HbHW2Nu+M20 + Cb+dNeGPS9lm1kXhHzvT8cnFefjk6iJ8dmsZTrEev7y/Et8+VouzT9Xh/BMVbFPFbK9FwElu7ytjbKjE + +dvYHo7k490dCXhg1A23tLvgugYVrmVsuo64kfs3s0/fwf1jjFsPNjrguVZnvNmpwZ969cwDRnw2asaX + k2Z8tciEr5aa8cUKbtcYcXqDEd9u1OO7DRp8t1FNuODbTS44vYV9YKcrvt2nw1f7dTi11xX/2KXBhzvN + +PUmM15YacJ9U3pcM0AhSVG+ptnMvEdxyvjeVeKmoL3YjGaLHnX5WlQLv8hWK0/7VqfL1E/MJckyZZwD + WlMd0MNcJDdhBygkJxg3lzBO7+zV4Z5diXj3ZDO+fnsR8MlG4ItNwGniO8EG4Ms1OPfhHD77VSveuzEH + j68IxV2ssysrNNhd5IRtMtK2UIcpCpKBRMYo9olRitLVPA8xgK+p8sa15ALXFLjiSLYDLmZMu4jncCXj + 93WMjbeWqHC8SoXHW1V4vscRr49o8e6EGb+V+h0y471O5ivm+ZfKHfG8zQFP2RzxiJU5iQLkbsbVO3gt + PyGPuK1Ug5vLdLjWZsLlFCJ7iw1YV6jFTJ4W3TJdGdtXPjlBZgxJcRT7K6EYwDzPcoqmavKGGorwqjIN + RasGTbJcBfNlR4MJXc0mchN3DHR6oJf1oBjAFWrUlTkQFHfMY61VTuhqcOHnruhvccFAmzOG2T5m+sUA + dsc0+8IoX490qDHSrsZoh96+/m+XDrM9esz1GbB0yES4Y+WoP5YOBGBRdxBmWkMxVBmkGMCNmRSX5Ael + FBSF4WIAa5AfQq4T5opcEvXcSJJUkuK0UDUSxCAl4Y8kpxFEEOEURhFENPuYrNsliPVRIY5CIZnxK4t8 + qZDisVT4GdtUHUlya0UAqskv8hO1SAunYIpwRQYFcyq5ioiomHAHigSKCELM0/9pAFNUiPkbR2ERQ2FP + oSIjBGXEYAgFTgj7+oVRv/MjfwWy/q9M8xUVY1ZG/0bHuCMyyg2hIToKPgf4UchHRDjzfYJtLjbRAXFE + PIl/AiEjcmVkrmLUUozK6NxUMU1y3JGWSaGWouf7FDU8J0FENM9NzpUIi7Ibwoo5rFyL/X25HjF/f7zu + rhi7MRQzsl3YX3gtxq8y2jlWPpP3ZNSzCyH/S1HFbRgFW0iQA+P4vGglQnltUWFOFFRq5FF4FvKcxfzN + o/CQNY8TEzTKesti+Ei5L6xPHMXyjCSiZKSyGMM8d7mJIzdzZDS0Yo6nkP+K4ZtJYcOYkML+KEZwKl+n + Z1A4kbvKWq/ZmSJ45CapGoWMLcUFRKErrMUU9pUuaG0yoK/HHeNj/piaCsAU+fDUrDcmZ7wwPOaODnL1 + xkYNqqvYv6hDyhgDihnDSxm/ysQErnSHtcKIigoDaip05K06dJRrMVbvgRWdoVjfF4u1XTFY3hKBEZlO + LtUJhRSFcqMknQI3l3lW1hcqLmKerIpGQ0si2rsz0NObgX5isDcNw33pGPo3pGGoN9MOvu7rSsHwQDaW + zJZh5dIqzE6WYnQgi/08ET1tMehqiURns6wFHEIEKSZvW0Mg40KAAjGBm2q90VLvazeAO4Ix3L9gACdg + 8WzyBQN48aJkzM3GYXZmfvTvTJR9NK9M3TxpH7k7MhmM0ekwBUPToRicDFK2ozMRGJuLwthsFManIzFB + jMv+DLfE6GQ4fxuO4YlQDPMYwxNBdswfb5jHGCCH6WNc6RnxR/dIIDqH/dDa74PqViPK6tTkF1pYqiiY + SxyQw9icxhidynYiyGT7yGS7kRGVMh2jtEtZ/ylaRv9SmAez7QVGOtpB8R5EhBAyml7ad0QI2yR1WBy3 + 2TEGFMe7oTzZEzXJXqihcK8kd7GGsm2Rx1iDnFHF/t8Qa0QLv9cmBnCcAZ2JBnQzBvUnqTGY7IqRNMbQ + VFfyaWcFE2y3k2y3s9nUjwXuWE4utbQ4EHNFgZgs8Mdwtida2W+qopyUqfGKJNaRhxeSxxWxrSuj3UvZ + Nsu8UEQtJSNnM3IM7Bt6JKfJAyPyMIpWMT5k9Ft4hExBZ1BG/4rxe8EAnjd/FwxgWbNcTGAxfwUh/F6w + si4w4edE/uWMYO7LqADhcZFiAjN2x7L/yzR1SSzn1Hg1MpPJ71J0yEzTK9Nhivmbksz4OB8HlNhLRCkz + AJAPyhPsGRqksTyyZSpoXpPdAPZjf/RDFfVnTZkZjaVismrRRi3SVcj8VGrGokofrG4Iwda2SOzqjMKW + pmAsszF/iQZhexhi2xjLdcRMoSNWVrhiY70W25sN2E0tvIc6fGeDEZtrdFjLvr/EJqaZ3fzt5O86cx3Q + W6TBALWpGAld5AUDzNcjYjZWe6NPpvIsNZDbMCYU6dDE7zVwW28xoIHxo7bYk7nJnXVmQC5jeqZM4Zwg + o3ldWE4LcEYyy0DWs7e/Zlkk2G9KpbD9ypqSst6kAsbmNL6fLiY7yzMniTk1VYuiDLbTLDNKGXctuSbC + jKIcvTLyrChbRrYxHuWQP+Q5otzihCpq0oZKLSYHwrCGfX7vJiuuOtiMn1w9hOM3TeLhu5bi8eOr8ATx + 5L1r8fyDm/Hiw9vx6qM78bqYwQ/vwqsP7cJrD/L1Q7vxxsN78MaDe/GGjA4+sQtvCU7uwjv3ESdkxO9u + vHXPDrx29xa8enQr3uZnv+b3f/vQPrx4x3qcPDSEI6sqsXsiH+t6kzFVF4reMm80FZC/WL3RWe6Derb5 + qiwNKhjnyzPY7xjr6wt0aGEb6K70QH+1L4ZqfTBU58u4bMcEXyvTdNvc0VtKbmQxKuikZpXRv208ZnsR + 3yvzQA/bWCf7U0uhSVnGooZ9VgzgGuZnxQQmapIcUE3eKNuaBG7ZJ2uYzxcgI1PFiG1OcrQbwJlO6M11 + +ZEBbB/9KwbwZLEj5krUWEqdsIrnv5ptakWFN1ayPa8ij1lLHbGuOoSf/X+M/XV8Y9cVNQybZNmWZFuy + ZWZmZktmW2Zm9pg9zMwMGeZMkgknE+akgYa5YWySpm2apG0YJ8kks761r+zJtE+f53v/WL8rybJ0dWDv + te66Zx/GBZ7fsMkVPezPrkyr8Sv7gcpRzGBZ9SvfJyWWW8mJutLs0ZfF7+PvHOXvHMlRYSjdFoOcD3Iz + 9wzGmEdnM1dOEnID/mAeeXGuPc9XjUHOr2HOs0mzy/80gHdUqrHN4oRNFU5Yb9FidYUbFnKOjvC8+rOc + +d16fqYnZuUZ+Jjnn6fj6w7oSbXemDGLc2wJ+fGaahW2NJJ/t7riklYDDnQacaI3EJf2hWFvky82lrth + UZ6sXOb/8fy7UmzRynatSyX3Yz9kMYYkMZbEMX7LXoGKARwiBjB52TTCGAcjIjSIjrLurxgXo0FCrAvn + Fvknc3N6vMa6CjiB8SdO5pUG2Yk6zlk3Qs85647EKFkdpUVEKONpiMRSJ4IciZ8dS32bmmxAQa4finJ9 + UZDJuJzGeS9bo2V5oijfB8X5fJ1HMX4LpEwnkZtrQFYW/5caKIXjTY6KAZyuVqDwGiJHbnLLEKNVyuu7 + IF9WBTPHZXKc5TCfFHJeyPYwRVmOqGDfWYga9ltDMXUB+6Sl0BUtUoHJpEEz+7U5V43OfBWGS1ywoNoN + S+rcsLxeizVNOqxXoGU8daXedcciPp7k3wZkq5ciR/Jr5j3GE1OGPeMM83A2z0vAPs9m7s0mR8tNtUEB + jzVZdmjn2O+n3hkuccLcSllxbMDKeg+srHXH0konLGYeX0g9srjaEVv7fLBz0B/b+32wpdcTW7v12NSp + IzRY3+aEFfX2WFRpg9nUVHNK7LC5000xgA9PBuP4vDDFCN4zyw+bujywlDpoiFpLWdDDtmkpNKLW5AWT + 3FgpvJM5PpA8NkhMhiBZvUXOEEfdwNyZRr6dnqRFToae8CCvNCKbeiY1meOAuV34RATfHxYiJoQVIWIS + kt9Gkc/Gx8iFeEekksOmJzuw/6yVO4qyVKhgPLDwWEXdUkMdWkce28g+FrRlatGdr8cAz1VMYDl2kx90 + ZLozljB+Mb53Zbujh0dBN1/vz/HAcIEvRgr9OGe90JtjQEcG+z2Vn8vvaJYbl3JkH2A75is1RmpcMNmo + wfxGFyyrc8KaWielBO4OYk+tBnsrnbGP/XKI/X2ywYBLG42EF47VGrGPevVAuR5HySMvawrEjX1xuLIt + FHvJjTfwO5Zxfi4hFhOL2P/zOcfHONeH+LybcbGd8amNMbWTPEWM64F8b8ZHqZjjggrG2VLG2DIpccvx + Xs5xXsr2EANY9gBOS2R+TGZ+5NhP5DwRA1gqGMUnOlE3UD8xV4r5Gyk6gppHDOBszi1BTo4VeTkaBfnU + 0GICF+brODfFCCYK3FDKmFVmNvAoq8A9lO0sEuWmNY4VxQAOs4es/I2iroxUDCZqJo6D0OmbZAXhkTwX + xo548v2EVAO1nAGRsbInuQ4BjB2+wc7w8FVB721H2MDgY8vn9gqU1cDEjAEsnEy25/BnTAsIogalfpbY + Fi5l7qmdY2MYyxiv4mPZHtRNcuNBMttQTKBktnUqkUXOWEh+UCmrMBl/GnK8OB680chjDdu+PI3tIgYw + 42cONaRUHqtkv3WVqjGvwweLyREmm/yVrRHy+PcU6u946vJEnnsW462U8i1ne8sKYLkRqZNjfTCHc71A + iyWMO6vznLGe+WgTY9U+9sVl5f64tCoQe0q9sCJXg/EMFXr49yaijv9bSW4sBnAluVIDdXEr+U1nMnNT + pk5ZAbyMeXEhOcFEpjNmpzpiSZYL1lP776RO28c8erjCFZdV63FVgwdOV2lxtNge+8222F9gj0Oy5ZbF + AzvKPLGK/TxMHtXC/itn/2Z5WX+XXHvwJ7wIbynR7W3PI/mxjyN1vAbevhp4+rAPCWsJaJWyD7CbwVaB + h1FWdzuyH9Xw9neBbFvnF+gC/wAXZRGLt9GBn80+9uRnG/g9YgDzu2QrpRB/O0SGOED2/k2kjhCIARxL + bh0TaoskjsUszhMzx7/sv66UgpbV8syzTcXUedMGcFG6HtnUD8liWnK8xokRGSGf6UoOyRg2jZky0DMG + sBi/siJYIKWhhesH+Irha0Ug20nMX4FixMo1GY6BZOqn7CjmBfJRWeVbn6pBDfuumvpHVo2XclyWMB4W + kcsW8JzyBZEqjicVcvh706mRkxmHkzimkji+EqhBxACO5GthhBjAsuL4ggFMnSYIC1YpkBsjLkYYP1cQ + TkRFOSkGcFIC8z3jeyJjxQXIc4n5ibK/u4bz3ZW5Va+UgJa8ncfH2cnMz9NcfKZcdML0MZ6/Qfb+jWRs + kLLYckNQtIBxQLYSipZVyJyr8WzLePKPBLZvUrRWuaEsLd5qAFtvBHVAZpID8pjHC+VGLs4bxQDmmK4o + kf1+ZT95N5ip80zkxNkZLkjl+2PIfeSmo2jqQ0FCrC1/jx3zlHAHF0gJfEE242iGcAvG3lKzF2aPFeDA + nhHYvHVFNd66qgHPnqzF7btLsXduMuZwsjeR8JVSoBYku6EwyQslib4M0N4kvSTisUY0xnihLcoDQ4l+ + WJwfjbXF8VhrDsPKTB9syPbFroJgXFIUgu15fticZcS2bC/CG1tzjQq253oQemzjD9pVYMDeEj32k+id + avbCTbMicMtoFK4SEtjhjyMtDBjdEbh2NBn3LS/GE5vr8OKedqIDz+1qw1NbGvCnSzrx7okRvLizDTeO + pWIHk9RSEsQ5DEpLSEY25Kuxq9SdiUqvlH7eWkDSSkK+hoJyNV9bWOJOkqpBFwNXMyeWkP+iBHvkMGnl + JVOEZzuinKSqukCNBorE1kpH5eLpSLcGc4ZcsXicpGbKiLVTflg/Jwhrx3yxuNsdUw2OGK+2UzBFojun + 1kXZC3h+PYVrnYGiRAdLKjs+icGX35PKDsxgMDZxsBVSwOcxyeRIqQVOCilZ2cOJMUks9bPFRr5+iITj + 6hgb3MoEe1+WDV7keX3UY8D34z44O+6JsxMe+GHSA58PGfBRlyverlLjuTxrmefHSEgeylDjARLNB9JV + uJ+k7g8Uyn/Md8BTxXxfuRYvVLrjSYsBf+BgvL7EEwdI5MXAH4/ToJWJzhLtilLZXzTVH5a0EFSkRaM4 + LZ4DeaYEtJjAadMGcOS0AeyFUhKbaiaABg7wVrk7t8SNJEaD2eynRTn27BtHHKvU4O52DV4c1ikG8DfL + PPHzWm/8tsEfP20KxLcb/fD5WgM+XuGOt+c74/kxBzzSb4N7u23x4KgWTy/zx6s74vDGvmS8fyIHf7+q + AB+cNuO1gyl4dH0w7pirx9XddritzxZPjKvx+mJ3/HNHML45FofPL0vEh4cj8drOQDywwAVXddvgWJMN + ruF7b5/rjEd4Hs/sCMLLh8Px6rEQvHkqEG9dFoQ3jgfj5QNheGF3DJ7ZEo+7F4bhqgEvHJISR2U22Gex + w9FaLY7UuOOARY1LxQAetcELG13w8XH22Y1BOHfGH79d7wsIrvbAb5fr8NNxF3x/3Ak/XOaKH68y4Jcb + fHHu9nCcfzQVeKkAeNsCfFAD/LUG5/5WjZ//XonfPqzAby+acP7xLPxyfyK+uj6EvysAHx3wxNtbXPDs + Mhfc1q/CFSTV+0ptsInjYq3JBquJxTkk2SQBIxyXPQwyg5wHC/Ltsa3RE3vafLCrmXOYJH5DmR6LC1wx + QIHZlG4DC8leDf+vYXoF8PqOIFy7woTHj7XgjTN9ePvWTrx3dys+eqQVXzzTiB9eseDc61IGmef+hpQ3 + bsA/byjAC5tDcOe4I27ossHdYzZ4cpUNXr3EHp9cr8cPD7J9ng7B+RdCgVcjgJd5fDYA+KMXzt2jw483 + qfH1lTb49moVvr9eh19u9cH5u2XFdLxi/p6Xlbo3xPA9wfjycn98f3Uwzt0UgV9vjsRvN0cBN/Mzb+Hx + VjHjvfDbGS3O3WCPc9fb4Sw/86vL1Pj0sBYf7nHFXw/44PPTMfjlzmzgkWIoezI/k49f/5SLX1/NA17P + IbJw/tUsnHspDT++kIofnkvFN08n4LunkvD9U6n4/okMfPdgOr6+Jx3/viUFn16fgo+vzcBfTqfjgysz + 8dfr8vDxzSX49JYKfHJTFT65pQaf3t6IT+9sxp/PVOCxo2k4sz4cly0OxP55Adg65ocVHHPzu7ww0qRH + d4UGjRT4FSkkgkwO5hh7FMSoUEDSWJLsirJ0D5RneTG+BZH4hqOkMApFJbEoKotDkSUWxZVxKK9KQEWN + IA5lVdEoLA9FbqEvsmUD+mIfFFZYDeCqxkjUtkSjojECBZXByC8NQbYpAKkUT7EU27IHQyIFdxa/s6Qg + AI31MWhujEFTQxRaG6Mh+xw2VgShwuSNwmwxgA0KMfH1cbAawD4qBPmrSTycFcwYwFFBWsSGuCIl0hPJ + kR5ICCYB93VFvNaAVDVFhLMNhkPscE1zEN5Zlowfd6Xjp0vi8PEezvFdkXhodShODusVMbSoyh0Lanyx + tIFxvD2QY9gXa5oZ3xt0WFbPeE/hKRcwWik0upj856frsK0iDEcbE3CqKRaHynywz6TFSeaK2yuc8Ey7 + K14d0OEtxqQ3R5zx9qgb3hn3xrtzQ/DBihh8tIV9vjcdnx5i/5/KxlfX5uGHW834+bZ8nLsti2Myi2OS + Y+mWIuDGEvx0mQmf7kvFy6vDcWu/lkLMDsdrGZ+mcaJm2gjm8Woez9Ta4r46zqF6B7zWqsaH3Vp82u+G + L2a54dspzqd5zBELDDi7VI9fVunx21o9zq9xxfm1Wvy6VqPg5/XO+Gkzjzvc8P1OV3y51RmfbHTGX9bp + 8MpSHR6crcHpHhV2NamwotYZkxYXDFIUdpXqrRcfzK5ootiqpRiwSDlC5puyNB5JSipIVqT8U6WssGAu + a6QA6WDckQu3chF3qpA5vNoGuwa0uHNHPP58Rz3Ovj4O/Gsp8PVy4IeVwFniJz7+ejHO/X0cnz9VjzdO + puPBeRSpzW44wfPZXaTG1hJXrCzUYZLnMMjv6Cc/GGZsW5rhiJ0UgEd4vkfJfU4wnp2gcD7EcxCczLXB + 6QIb3Fxhi/sbbPFMlz1eHVLjvQkd/j7HA58w93885omPeg14v9kFb1Sp8FK5PZ4qZ06SctDFzNFmG1zH + GHtlni0uy7bFKZMjLi12xVHmv11FFEpSji9fq5RQklJIuTw3WeGaRGInBnBWnC0KKIxLsjWwULBWMl+W + FahIFh1QU+6E+koXNFG0t9Zp0N3sit42zv3/MIAZm4k65qGmSjt01Iv5q0Zfs6OCGQN4qp/5nWNEjN8Z + DDMPS/nnyQ4NprpcMKdXgwWDWoLcZ9gb8/t9MNXuh5E6X/SWeqM5xxPVyRTS5AcFYRTdIVIC2okgnwlV + IyeMxJ/CJCeKRJUkPZVkOSmY5FUqE1BoJBBKlQIiOdBWeU8W359JsZBFgp3P+FWcxN+eRU6W74wGtl9L + uRc6Kv0VMWROkP1XbQkHpPL7EinY40IdEMUYcLEBHHzBNJ2GmKtihMZSQCgmsNUAFgSR1AeRj/0vAziY + 4koM4PBIVwUzBnBIMAW/j51SNln27w2PkBWvtojiWFdM4Dh7xQCWEsxiAIv5K49lb970LD2y8jzJnxjT + 0twUU1gp4UxE8n0KYqfBmB5BiNl7MX43fn83gAW/l7cm+BulNLOYykqJ5igxf9VWkIMKlD3zopwRwd8f + FmJPYUiRLL/JxxahAfaIYfsmkRNmp7pCSg7J/mdSAi8t1Y3CS4MYCj8xe2WVpVKe+r8QEUHIxRueS1Q0 + xS7fr+xZzDEfw/kZy/kQRySkcEwwjyWl2SM5VYWUFCKZfSygIMrga9npjsjLckJetgpFJgdYyshNGLd7 + ujwwMuKPsQk/4ncDeGTciC5y9cZGDSoYJ0pKnGEu0CKfvKagzMAcSAFW4a4YwPK38kIVaogmordMi9kN + vljeFYEV3dFY2BKGYXLaJsY3WbmZQdGaFUqxm6ClaJe7d8mTKyPR0BiP9s4UdHenopvHnvYE9HQkoLs9 + npg5xvP1JPR2/G4Kjw3nY/GCSqxYWof5s8sxPitPKRM90JmInrZodLdGEGHobgtBZ0sQ2huD0NYQiLbG + QIgZLOavrAzuaAlAb2cwZvVHYGwoBpOj8Zg9bl0FLAbwnNkJ0wawdfWvYv5OG8BSunmWrPgV83YiWEH/ + eCB6Rv3ROxaEAf5tcCIMg+NhyipfBXw+S1YLy1HM3/FQDIwFE/yMaQNYeSzmL/+/e5Y/OgZ90NbvTfii + pc8bDd3eqGzRo7hWg6JaHfkF+5ixL3vGAGZOFgM4lWNELhamcj4lTZf5VC7YMn5IqXQ/jkGfMCt8+diX + sSCAkPLqQXJXOeON7DcVzcdpnNf5MW6KAVydZERtggHVjGkVFPXlgY6oCOZYiGDcjXVHW7wBrTGuaI6m + NiLXaY9zRhfFfXeCCn08H8FAgt00+JjPh5j7pET0ZLYHJnO8MJHrg0kxgU1+6M3UoymJsT7WHmbOjVzy + 8NwEW5jSnVGQq0NxgScKC8m/qMnSc1yRnK5R4kZCspbzRioGOCmlA0NCXRTzNzhE8/80gBUwVinwlZX+ + csHHHgGyP7CPPXy8+Zj8K9DPkRxMeJi9MvfDeZRVwLGM4fHkd3JxJEVuwIl3QnKCgLEhUS5QqhlH+P6Z + WMv5EcGjzHO5ASZRVsHxN6Rn65Bl1sNU5IXiUl+UlfmiosQDlYzxNWKw5juigfm5OctBMcHEGJtb7o0V + 9cFY3xyqGMDzy1wxJCuAqf2HMu0wlueI2QWOWFTujJU1WmxocMNWcrrtLUZsaiC3q9Iqf5ssUqE/n/yD + vKOZaKKOactXobuQ8cPsgt4i5kWLJ4aqvNBr8UBnqRvaqOFbZWsLk4tyg1ujlPgkl2goNKC2gNo4zwPm + dFlJ6IQU/v6kaHtltVm8AnvIfn0K+DiB8U8BY7RADF/FAOZxBvJcDOD0BBel3LZ8bm6KmEI6mDNckZ/l + piAvU6uUH5WbYnLJZXL5Wwry7FFe5IgaiwYtDXqMD4Vj0bwUbFxlxt5tVTixtwWXHerA6aNduP7UIG6+ + Yhi3XTmO+66fiwfPLMYTd6zEc3etw4v3bcQL92zCCxfKRG/En+7ZgpeUEtGb8eo0XrvDijdu5/HWjXjp + zFr86cbVeOWWdXj9tg146abVePTUXJzZ1oH98wuxtj8ZS9qiMFoZgC62X4vJDd3lPuix+KK5wB11uVpU + ZzmjivG9hn0v1WRaitzRVeGB/qppA5gYqvbErBojRqqNmFXliX7q1C7yvpY8MX1d0Ewe2pTrhKYc2ftX + qxjAPeVGdJYY0cqx15jrilrOs2rOz+pER9QmWVGdaE/YWQ1gQspCV5OnzUD2ppVVuFYD2FYpwzxjAEsJ + 6GGTirDHCLX0iMkW49TIYgIv5DhaUuGJJRbvaQPYRzGAZbXT0gp/ag4PjJrd0Mv+vNgAnkFHulpZfSUr + qdqT7NHLHDjEtpog7x7Pd8Es9v8A58LFBvAIH8tK4KlstWIAi9ErK5QHOb+GyIEFw/lqTPA4L98JC/Mc + sNxkh3WFdthSqqLmUWETc+u6EgesKnXC8hIN5nL8DzL39ZNPjxd4YF6JH+aV+mN+uR/mFHtigvNkjJ8/ + kW+LuQW2WFbhgHWyAr/BBVuor7Y3uGJXiwEHOvxxiPlpe60Rq4pcMI9zeYTnP5Bui35y9+5cZ7Rmi6Z1 + QB45glTISSSXiwm2s5aAZny23vxiRWSEhvxFh9gorWL+SknIxGnzVyAXYjMTGHcuNoATZM66ISvRnfOW + /Et4XZgW4SGMp+R1AYHOSjwVMyY+1hWZqZ4ozg9UqlcVyB6CKW4wMefLheRi6tkSM3WyyWoCF4q+JfLy + yPEuMoDF/E1Pd0F6Buc3kZXhrCCHYzE3Q4sCubkjS6MYwGL+pnHMZbDP89kOsh9vAdu+PMcJlXJDpFQh + YHvXm6XqkgvqOebrc9So43isy3RASzbHBMfe3EodFtW6KgbwOmqlTdQOm5q12NTqhnXUEEuadJiq12Gw + WuaaI6pyfzeAC/hdJqm6wnkkZnBOmh2yOKZy2FdmwsL+as51QDdj70CxWllxPFdWvNcasLxGj6VVsgrY + EYsrVVharcamLiO29vpgS48XNnd7YnOX+wUDeGOHC1a3qKnB7TG/0hYLLPbYwr9LCehDE0E4OidUwe5h + 2aqJc4ljqZ9zrJncQOZ4J8dgU7G/Yo6kRZNfyg1f0yvLxNyTUs5SLSSBUG6+YQ5LT3ZVyutmpXmwfw3k + shxD0U6K8Sfmr5i+MwgKtB5FX0Qzt8VFk6fGso+Y53OodWcM4FK2XQXbvzLDAVXp1G7KSl3qN6IlU4OO + PM5z5nYxf/t47MrVo5X5o1nZW1OLtovQwdfFCB7iWJpl9kZ/rid6s/VoZx5tIicWU605nbEowwat5Ek9 + RQ4Ytjhhdq0T5tepqas5d6lVN9U5Y1ejFvvYZgfJrQ7VanGsTocTzI2CY7V6HK5yx74yHQ5W8HmNNy5v + Cca1XZE41RiA3Zz7G7JtsIJ9vyzZFkuIxWnsowxbjDHOSNzp4jhtZXxsZTxtS2HMYq7qyjKgnTyngbyl + MtkJlhTOafKAcrnROcNFWQFcLHmMr2UkM++lOlILOZH/uyCB88S6hc3vBrCYvxFiiMhNIfyejAzOZwHj + ZhbnTXYm8yXxuxHsbB2/eRqCx2yZY9PzLNONc8sJsRwnUn42gkdlhR95pGL+EnIjq+gXMX7l5kK5WVa0 + kqz+TeSYSc7wRALjQkwC9WC02/80gK0msJ2C/2UAK7yMOlgQIJVYAlQIZowLpa6Qc4iKpCYkl5C9jxOp + CcX8TWLuSWFbZzBX5acxJuS6o77Ih/PXl/nNG+35POZ5Mx54co66wkQdmsV2y2b7mRhTytLIf6hvxpo9 + MbszAEO1XqhkTslkGyR6UY95iEnHz582gCs41muoZxv4fa1yzZjjeoo5Y0mhFmuYo8UA3sDz2cu+PG0J + xOm6UOxnjltr0mEh/z7Ctu/KYU7OUKOSsawywV4xgOuT1BwrLujg2BhgnJzifFhEPjinQM98wHhCzbcg + 3QlrmBu3l3niEuq0faUuOGrR4bJad1xWrcNR5qr91Al7i9Q4UKnH3kpvbCnxwdI8zi/mgPoQRxT6Mod4 + 2iDSnVrAYAMjoedv1BttYSCkZLOHpz08vdTWVb88KvBkPyqwV0xggRjAnt5WA9jL10mBt1Qw5HO5hikG + 8AWIyTwNqwFMDRzioJR+TorVKQawlICW6xZSpUD2m5UV3bkc22b+/iLlRgkdqvMM5Jy+aCwORLWJ+SXN + HZmxTkjkmJTrHtEhKkSFkptHuRJuCv6XASzHaLlRKkKrGMDC8ZWqP9MG8AXzlxpJ4qasepXKGymcA7mM + m8WMmZVJWtQkU7ew/8qpXUoZA4t4LIx2gIncNp88Ny+KGp0wUZvlRjohg+enbJfkM20Ac9zHsk+i5MZ5 + fk+omL78LonTgnC2kVyHmCn7/N8GsNyQodyUQb0nuk/KP4sBLKX7U5Qj9UkCkaTjYx3SGVuVqkUprshN + lYo9Bs5/D8UAlteEb8uNlymx1huEkgXkCWICxzEGRDLmy3lFBEv/yZYA1EScn9Lmgji26wwSImVF8f9p + AMtczeFcNZPXlJoYD0vcpw1gal6O78I8cnvy0pwsrbI1RCLn04wBHMV5K4iL4fycNoCzGPfyst0UA1ge + p8sNZtSdxSYjpkbNVgP4Hzc246ObO/DGNa14+EgtLl2Zg5X9Eegqc0MpSUZuvA558Ubkx5GwxHihJNYT + 5dEeqIoyoD7CnSLWB0vM0dhkScLWshhsMgVhuzmAky0Y+4qDsK8oEJeYfbGXg1Owp8BHwSUX4I39Jb7K + RfNDJMAn631wZjCaiMKxRiN2UchtYRCRuzsONwbj+pF03LukBI9tqMPTW5vxxKYGPLiyAo+uq8FLezrx + 7JYm3D4nB5d2hGEvif9aBpZ1DETbinVKjfhLyt2ZrFyxucAZa0wkrRSUS0m+57ORZzEYtTNR1DPZVFCw + mijWMkksM2NtkZ+sQglJrSWXBIpkprlcjc4aR8ySC6L9rlgw7I5lY0asnhADOBgbpoKwrM+IOU0umKhx + wHiNPSarHTGnVoM59RSsDe4kVR7o4e+rkgtVWXYo4XkWkaCVMAhakilyEjWoiOME52Cq5eDq4cCaw0G9 + islmGyfSQQb9KygcbyIBvpMJ9n4m+RfLHfC3dld8MWjAl/06fD3ojq+G3PFJtw4fNDnjlTI7PEkh+Djf + +yhFwYMk0/dnqvi/DriPhPAPFCSPkKg9WeGCZ6tc8QxJ2mNVBtxHgXV9qSf2cRCuZeKew3Pr5WSoJnku + JVEuTfRAWao/ytIjUJQRh/zMJGRnpyIjOx2ZOVYDOCc3iknXnwTYG2UU9xcbwN2ypxKF8xz2iRjAqyk2 + DpSqcXurC54b1OHv8w34erkRv6z3xa+bAnB2SxC+3eSPz9YZ8fflbnhzrjOeHbbHY0N2eGhQhcfneuC1 + jdH46IQJn15VjC9ursR3d9fhW+KfN5bg/VPpeGl3GO6f74Q/zlXh1SUafLjWgG8PhOKXK+Lx3dUJ/N9Q + vLnXF39c6Yybx2xw7ZAN7l2kxlOb+NkHQ/HeZTH4+MZkfHpzIj67Iw6f3xWPf9+aiI/PpOCvV2fj/ctM + ePVAHh5ek4gbx/xwolWDPSStu8odsbvMhclKhZOttrht3BbPb9TiH8e98f31/jh7vTd+udYbv11jxG9X + 6vHLKRd8f0SFr4lvT7jg2ytc8eN1Xjh7azDOPZwAvJADvFUMvF+O8x+U45cPy/DThyU4914hfnk6Dece + SsT3d4TjX6d98M8T3vj4oCc+2OmOV9d64IExN1zP8zpcbqeUw95cbIcNxAqzHRaSME6I6IqmUEy0wVK+ + tqfFiH0d3tjVZMDWGnes49yRMh/9OXIXo9UAruLYqs+0QS+F3ob2YFy3woQnjrbgrTP9eOfWTvz5zmb8 + 5f56fPpoFb57vgK/vMTzfqkKeLkZvzxSi0+vNeFPW0Jx36Qzbum1wQNTNnhunT3ePuiMz2/2xtmHgnDu + iWD8+mww8GIYf38I8JQ/zj/M8XE32+aME74+bYvvrlThh6s0+OVGL+BWvueuOOD2JPx2Qxy+uSIMnx72 + wj8OeOCLk3746bpI/HpjDH67KQaYwS2RPAYAN3jgt+tc2B/O+PlKLb65VIt/HXLD3/YY8PGRIHx3fSrO + 318APFEGPFdqXXH9WiHOv2kG3ibeygVey1ZWA599NhnfPZGArx6JwtcPx+CrB+Px1QMJ+PyOBPzrTDw+ + uioaH56Kxvsn4/DmkVi8fiQOb5xMwTuns/DuVfl48xTH1Ml8vHzSjBc4th85mIabNofj0kXeODDHE7um + KJzGvLBm2Bsrh/ywoMsb4416DFJ0dXBuNVKkNZIIN5LcNpB412Z7ojrLiIpsb1TkB6G8IALlJTEoLY9H + SUWCYv4WV8WjvDruIgM4atoA9rMawCSVheVBKKsJRVVjFGpbYlHVHI2y+giUVkWioDwEeQX+JOPuyEjV + wUTSX17si4bqULQ3RaGtJYIIR1drFHqIzrpw1JX6Mwn6KHsqyZ4O1guQDtMGMBO8v9O0AaxRIAZwTLBO + 2f83IdwNsQEuiPXWIMZFiySVGia1DfpJIE5We+GVhfH4dkcGftyTiI/2ROPVnRH449ownJ7wwpZmHVY1 + eGJ5UwBWtYUqJcytBrCHYgAvqXbC3FIHjObYYjjdHvMyXbCeZHJ/QwxONCfgRH0kc5oHdjGJH6XwvZ1z + /dlWV7zGWPzWiBavDajxSq8zXujU4tkuN/xpyBtvzQvF+ysi8Zd1kfjrdsaUvYwlxxPx7eXJ+OF0An65 + Khm4Lhs4UwhcW4BvjmXjg22xeHqxP850OeFknQ2OVNvg8DSOVNngKI/HeLyMuKbaDjfz+f08PtkgJrAz + 3u9ivBlwxefjenw314jv53vi7BIjzq/xBtYTG4yEAec36HF+vR7nNhrw81YP/LyD793hic+3uuGjja54 + c5UOTy3Q4tYhR+xvtMNqCvM55SoMljgpVR3aijnOzDo05GkpNlxQJeZvBklhqgNKUlWoICmpIMlX7hSU + i2mMNY0UIF3MZyOZtpjKs8FiKf/Mzz406oYHdifggztr8dMrQ8BHc4EvFgLfLgF+IL5fCnw+H+c+GMG/ + H63B60dT8YcptlGjKy6zaMkzNNhZpsca5pq57J9ZKbbKjS0jFKZLM1TkLVocKtThSJ4jLs1xxGXMyyfS + bXGS8ew0z+OGIjF/VXiy0xGvDbENp3T4ZJEHPl/qg6+W+OHLed74fNgT/+h0wweNznirxgkvEU9TYD9U + boO7i2xwk8kWV1Mon6TAOpFth5MFWpwoJS8p1mN9oTsWmN3Rl812khWEzOv/aQDbkfQ7K3siyb6CFrMG + JSZ7wpZkUYUajrV6ixrN1RTXDRp0t7j9Rwnoan6/oLb0IgO40Ql9zWICU2C1OWO8xxWT/XqMdukw2GYt + /ayUf77IAJ4tN71NG8ALZ7li8Swj5pHrTLb5oN/igXYz40qaK8pitSgK18IcIgawi2ICW1f/qpBDTpNL + /iKiIT9WoEYej3l8nhul4ut8DzlOHsWtia+XkG+UkYiXk7BbSNRrSGob8nVoIjdsIZ/rkr0Ya33RVxOg + 3OlfKndz8jvS5M7SYAckBKsYH+wRKXfry4WfUNsLBrDg/6sBLKZvAAXVDILCnJTVv8H/FwNYWSni7wAv + imV/uTjE7xLTI5KcMorjPSbebtoA5vmRnMtR9rVKyXRFZq4BOWYvZOV5IZWxOiGVMY1zRUGyI0FhwcdW + 8DlFYTSFcxTFvBjMkRReUdPm8Aysq31lRS9/H39bqJiyxO/tICXM5O8E++JiA1hKKcVE8Xm4I0KCKAYp + VkP87Cl6KFgpUlPIA3PY73myaoLnK8ikkEpNduVvZIxmn8o+q2EXwWoAW+/UDRcTWMQUx4WyUjqKzzn+ + wwUUNpExtkig4E9MsSfYp0Qi50kihVNigh0SiJQkO+YMB2SlOfL7KTrzGGNKHNFQ64LuTgOGh/0wOu5L + WM3fsQkjxid90NvnieZmV1gqNSgucYG5wAX5jAUFjBf/YQAXOZGn21EH2KGec6+jUI1ZFj3mt5Lvd0Uq + BvCIxYi2XGoI9q05kqAQL0rWoTDdHUXUQlWWcDQ1xaNz2gDuak9CZ2scOpk325ti0KaAeZFob4xlXkxE + X2eyYgBPjRdg2ZJarFzeiPmzKzA+y4TRgSwM9SSjtzMWvR1RRAQfh6G7PYT/G8rPFTPYujJYSkPL6uAe + 8rLB3giMDsbyM+IwPhyLiZE4zJlIUFYB/7cBLPv9Kpje73fGAB4YD1LM376xAHSP+BH8bKJ3NAh9I0EY + GOF7iMGxIAXWUtEh0+Yv/1eMX6J/xF953MfP6+b/tg/6ornPC009RsIbDV1eqOvwgqXZE8W1biiqdUcB + Y3ou2z+LfZE8bQCnMG+kpshFVxXFtZO19Fm0BtGRTsoK/MAQ8ghqKSNjgBfhTfgQ/iEcz4L/YQDnxlAL + J3mgOsUL9clG1MbpUR3JOMR4Vs353xDNGJvggY5EaplYNzRxnjRFO/GxE9rj1OiIc0RnnAM6Oc+7OTcV + cF52cT52xtqjh38fSNZiKNUNszI8MWWSFX/BGDH7oUfKI6ZqUcb8aIqxQx7HeH6aGMCuHEueMJs9qK30 + SMnQck7wtxJKtQB+dyjncbCshAt2VszfwCAX+Ac6KsbvDP6vBrCPLfz87ODvL+Xv7OHtZQejpy38fWUb + DkflIuSMARxGRDK2RjMeykqFuEi1UlotgXEmgXFUEC9lyngUszeKvyOCUG5QiWI7x1hL3kvcExM4RS5W + 5LmTMxo5F31QWuqDimJPWArdUEWNXJ3jgFrO7bpUWzQxFnSlqzFioga3+GBlbQDW1PsrBvAsKWXL/C2r + H8XcmlssJZ61WFHthnX1emxp8cL2Dn9savLGskpqT3KWkQIVevJs0cYcLVWM6qmVG3M5z8X8ZTwYktLP + VV4YrPRCd7kBHdSu7SVuaJXVdczlLTxHMSSbiwxoKjKirtDrggGcJTf2ML/ER9gihrHPCnnMPKDAlu1n + pyCOMVBgLVMnsBrC8lhWLiRzbKeKQZEgK4GdkJXkhJwUDXI5VnLSdYx9Un7bBdmZTgRzbpYDcrJtUWB2 + gKVcg5YmT/T1+GNiNArz5yZi1fJsbFlfhL1bLdi/oxr7d1bjyCUNOLm/GZcdbse1J3tw5tQQ7rx6Eg/d + tBBP3r0KT929Bk/d+TuevXs9Xrh7k2ICv3TXJrwiuNOK1+7YhFdv34AXb1qNF25cgRduWIHnb1iORy+f + i7v2D+L0+jrsmszBiq5oLGhmnKnyQ2+JAb2lnhipDcZoXQi6K7zRKuWg8zSoz3UhqGPytXxNTGIPDFR6 + Y1D6ptr7ggE8TAxVkRuwnzoK+P5sNcF8MA3RQ4o5xP7qLZMV3d587IkWE7+HOqkmzYnjTI068lTZD7iW + +ac2WaWYwAo4H2dQQ9TJKlxyyga5GM5jR7ojevidg3nkUdRfs/IdMMT8McwxNoucciTXFhMmB8wr0pDn + yl7AXsoq4KUVvlhh8ceqqkA+9sO8Ek/FAO7L1vyHAdxFTq0g0xltnAttzH/dKeTfWS4YzSOXMxP5GqsB + zPgoK/HE+FXM3ySCxymOj6lcJ8xm+4wXumBYtkPjY9kDeITnLAbw3Dw1FnAeLMu3xdoCW2wuccDWMgfl + WsFqPl9epMJixuLZ/Jw+KQOaao+xfD1/SyCWV4VhdV0EllcHYrFUDCt3xZJyJ6yodMaaWg3W12mwjlhb + zcfVWmyqc8POJh/savHD5koDlvIc5pCDSxnZ0Vwpny371+rRU8B4wPYtSLJHFrlOCnNtPPlZTBj5SoSW + PIuIsiKGMTpGTNwYHeLJS//bAJZ9gDPitchUji48ajlfdYr5m5mgR7L8f4ROWf0bFsR4KrE0wEmJp2IA + J8a5IzvNC8WmoAsGsKw0NaVN7ylr9kFZoS//7oeifOrlaQM4n7E7m3NVjN8Lq38F6WIEi/nLc5EVkHwt + P8N12gDWIp/vzSDHS2b8TCU3ykm0RT773ZzmgDJqm8ocDapNWtSy72WrnRqOQdFeVZliOtqjMs0WdYyN + 3Rx7k8yjC5lTl9fJyl+rAbylSYstre7/YQAPsX/aitSoyXNAKeOJmZ9jVgxgZ5jFSOPjHL6WnWqjIJ/j + rZTHhhxqDZMKfcVSscEJY6UumFehw6JKjgPFAFZjaZUTltU4Y22LOza0eWJTB0G+tolaasYA3kzNuoGP + 11KnLKOOXVavwuZuN+ye5Y0DE4E4PDtEwc4hH6zv1GNhnRa9nGNSmU7meHcltUFZ4AUDODbUBlHUA7L6 + N4J6IIbcV8o6x0jsVWIueXiCFqmJrkhP5v8kuStjR0r/hofK6l/yZv7/DIL4OYJg+TyJ5+T5sherlC7O + TnWEiRqzkO1fnME+4uOKdBUqeZQxLFsgCZrYt+3MfT3UMP0FXugxUU9lu6GRsb02kf2YqEYDuUC9gHG/ + hfm+k+NiIM8TgyYvZT/g3mzGunQNmhmrGpNt+b+MReyLFuazHpMdZpWpMEVNOrfaAQstdlhOrK9WYUeD + Mw40ueJoozuONbrhJI8nGw04Xu+Ogxwjl5Q4Y2eBmlpVq6wCPl7ni8ua/HGEsXaXbKeYZ4+NjDPrMlVY + k+GElVlOWJqjxmQ6451U9OK5tHGctlDjNDEXSnnfxmQXNDNfNfE31FPz1HIuVJHLWDI1sGTzcb6BWpcc + XFaycS7IqnjZKmLGAE5kuyg3xrK/RF9cbAAn8ntm5lR6upOCTP6/IEdWqzOG5mTJYzVyOT/yOD9yxfMg + cvh/2cnkItSAsj+08MEo5mdlZd+0+SuYuYF1xvyNIO+LjXdVzN+UTC+kZXsjOcOb3MaTekyPQOrhGQPY + 3cuW+E8DWPYEVvYFnt4TeMYA9pl+7EdeJtVYAsi5goLsIPuxyo0IEXJu5BYJ5JNJzENJzEOpRDZzQlEO + xxZzWmu5H/kKUeSD7gI/dDImNVFbVmeRTyeSH7DNsjlmpfJYIfNCHfXNYJ0Bo4zDPRZPlFJvpbEt4sUA + 9mT7+tggnRzZFG6LcvK5Wn6vGMByE1IH+1q2HFhkZozPd8GGdOYKMYDZZ1dVBuKaxnAcrvTDlmIDVjHP + zy12x2ABefT0tQ/RThXkyQ3khDMGcH+mFmPMy/OKvTCZ646hJBWG+b65jHsrOb+3lBqwq9wNexhfDpQ7 + 43i1mMBuOG7huC5VYx+5335ygUuqfLGRvHJRrie6YzinQlTIZ9sm8jeFutnAV2/dm9fNwxY6Dx75urti + CNsRstpXxdd4VIxfh2nYX4B1BbDVBP4dDjB6kUdfbP5eZAD7SDUtjoPQAGr2UPLhSA2kXHM8c1d0mCM5 + Nv/mz3FN7ZLMPspk2+RxfpvJSUrSNKjIcWesp0Ziv1rYp2YxLRnj4sPsEUtuLjdoRoY4klPyM4kZE1jM + 3xkDODzESYEYwTMICVRNw/4/SkCH8PGMARzNMSEGcA7nYFGCMyxJWlQnuShjopQcv4j6vSDaDibmZzF/ + BbmMs/nRahTE6ZAfp0FWOOcnzzOZ41yQ6M8Y7G+HaLZHBL8rgrE2nIggZxbIPskRzPVybVgQHq5WjN8Q + 9qVAMX+p9RQ9R10SzbmZQL6cRh0uN/WI4SuQm3usN/i4Mce6KSWgc5mzZwzgfB5nDGBBWrxUNmK+JlLF + PI5jHIqSkvByjmwPiRX8zgjOSTHypc1nDOBYtmcMNWNsGPuWfCKVv/3iEtDpnDdZ1K55zA9F5FHlsji0 + zOOCASw3/Yr5m0lOmpJor5i9sup3xvwVxLKtZRXw/zSA+VpKPONBvicmR0w4eMkobD6/tR2f39mDD27s + wFMnG3DdpgLsmJ2MsWZfhURkxfALoz2QFe3JAMEGiTagMFqPskiSr3BX9CVRPBVGY3ttKi6pScLu0nDs + LQnmhAvGwdIgHOXxSFkAjpQyUZT441CJHw4VCwJwkDhUzMTNpHyEOFzmg0sbAnHrcBJuGorD/goSECbM + lQwI60hod1BQnWiJxrWDGbh1tgn3LS7DQ8srcc/CYjy4rBwvbG/DC1ta8dCyMtw6mcn3xeNYazD21/lg + j8VDWQG8u8wdO0tJKkh0l8tqU2I+G3o2G3nARBHHhqpm4C+hwMqJskcKJ1wKk3l2tD0KEpm0lbJDajQX + O6Oj0gmDLRpMdLtirlIK0YiVY/5YPycUm2aHYcWgL+a3koDXqTFeq8J4tRMma7V8ztfk7tt6A/oq3Thp + 1RS3KtRZXNFgofAociURoEiTJJ5CUsCJ1MnOneAEWhWnxk4m/6MMiFeSDNzEwH13ki3uJ9F6KN0GL5bY + 4YMmF/yDhOmjNkd8wqNi/rY44c0qBzxXYIM/8n2CRykIH8y2x31Zdrgn0w73kuD/odARj5S74IkaVzzN + c3yS5/hQjQfuqvTAdRyMB/PdsJWDagUT9iQJbmsyk3WShu1FMMmVpAeR5ETDlJWA7JwUZGSnIpNHxQDO + iyFZDEABCXD5fxvA/M0XG8CriD1FDri5yRnPDGjx13kGfL3CiHMb/fHL5gCc3RaMb3j8crMfPl7jiXcX + 6vDciAOemOWIx0Y1eH6pP97fnYZvrqvGD3c04Jc/tOK3x7rw2+Od+OnBenxzVyk+vjoNL2xyxytrXPDh + Rnd8tsMLvxwPA66Jw9lrY/CPk/5455AXntjoiLsW2uD2+TZ4drse754IwSc3JOGrOzPx44M5OPtINn55 + MhPnnsrCz4/n4uzDZnx3fxm+uLOG72vA64dL8cj6VFw/FoA9NWpsKrLFFvb3HosKJ9vtccuEPZ7dqMXf + jxvx9bXe+O5aT5y92ohfrjTg5ytc8cNJNb46ZI8vDtnhq2NO+OqUBt9c7YHvb2Fb/CEGeD4DeD0PeLcI + v/65ED/92Ywf3zfhp3dy8OMT8fjxvgh8ebM/PrncE5+eNOLTw0b8fa8R7231x7OLA3FnnxGX1jhiZyET + dJXs7eOIjeUOWMXznE/SOBZngzkcX+tKVTjYYcShLi/sanClONNiXYkOiyky+3NI6KYNYAuPVgNYjY3t + IbhhhQlPHW3BO2f68WcxgG9vxHt3VeGjB0rx5RNl+OkFC849V4Xzzzbgpweq8elV+XhlSzgenqPFfSN2 + eHKRA17fpsHfThrwze2B+PmREPzyeDB+fioQ558JIYJx/jFf/PoHT/xy54wBbIfvLlfhx9Mu+IXtiTNB + wG1sq1uTcO6aaHx+1B8f7nTFn7c44x97PfHNqVD8dHUMfr0hDr/dmMD3JwI3xwE3RgDX+eP81Z749bQe + v7ANvz9hwGcHPfHRXi98fmkkfrklG3i4BHjaArxEvFIKvMnn7xSxTwp5NFlXAr+UgR+fSsS3j0TjywfC + 8cW94fjs7ij8+7ZIfHxDJP52Ohzvc2y9cygYbx8Mx0uXhOK53cF4bm8U/nQkEX86no4nL0nBQzsTcP+2 + eNy2KQZXrw7GsYVe2DPhhi0c9xtHXLF+2B3rR4zYMOqHlf0+WNDmgTn1egyXajFY7IqhUk/MKvVFP+Nw + e4EP6kkYLDleJNr+sBRHorIiDhWViSivSkJpdTxKFQM4FhU18USsYuoWloUgt9Af2WYv5PNzCstD+N4w + VDfFoLY5FjViAjdGo7IuGuU14SiuCILZ5InCPD2qir3RWh+MvrZI9HdEoqcjFN3toRjoisRQVwz6WyLR + UhWMSuaHzNQZA5gEmMQ4wMcBsvokdNoEDgsgcSEipw3g+FAdCY8GUb5qRHmoEemkRoK9HXJVNujytcEe + sxaPj4XhnxuS8OWOeI6BGLy0LQIPrw7DNbP9sKOdOafZE6tbArBGyj93/qcBvLTGBYurXLCoguKmXIeN + lT7YXU8y2xyHY03ROFwVgh25btieocaRLBXuIPF8rtUNb/S74Z0RN7za54TnGZcfrbHHgxYHPMyc8HS7 + G14a9MTrk154Y4E33l3uhw83+OPTncH46kA4fjwei/NXco5fX8gxmI9/70/Dm+sj8NBsI67tUOFYjQ0O + WIjK/8QhvnbcYovLLfa4ptIOt1Hw3VfngCcb1Xip1Ql/7tXhHyN6fDHljW/meeHHxT7Aes6TzcFEAOFH + +OL8Fl/8ti0A53YE4addQfhuZwA+2+6Dv232xgtL3XDPhDNOtdtiY4UNFpQwXpQ4UOxr0FXirqyGqcnV + oIbEvpqCqyLdHiWptihOtUMJBUVFoiMszGPVFIPKKgqKkEYSG1m5M5Fjg4WMSav5W7a1OuDUpB6P7kvE + 3+6uws8v9QJ/GQX+PQf4ch7w9Xzgq4XAP+fi3Luz8NlDNXj9QAr+MOqDM3Vy16mWHEOHveQBGyk2FuW6 + YJRka4ixbSzRBssy7LHNRKFAwXIsT4XLmeNP5zjgNHPjVdnWlbu3FNngiTYXvDKow/tTbvh4sQFfrfbB + D+sCcXZtMH5YEYCvp2SrBT3zrw5/adHhnWYdXmnS4PEqezxQZoc7Cm1xg6wAZow8lsb+yXPCpSUe2M85 + uanYA4sLDRgk0auVizlxtkgnoRMDWFY4ZJH0m1OcUEQhVM4xVmHSkCjaozDXBuWFdqgqdUBtGUV/pRpt + deQnjdoLBnAD4/n/NIAp+sX8nTGAR8llxvsYK7p06OfzoVYrxAAend7/V8o/z+3TYOGgFktG2JazPBQD + eKLViM4iLRrI1crJUQookE0kvPmcj3mKCUxORZKeQ3KeKwYwhXoeOVYR+76cIq8iXYeKNC3KyHkEpSSs + 5UnOqORr9Tl6NOYb0ZJnZMzyQg+5Yl+FrMLSo7dKj1kNXhSqARiuD0RniTcqSe5NFOUpFCmy57lSYlrE + BAl6KDnd/9UAni7//L8M4ECK/xkD2H8aM+av4GIDOCqKcWvaAA4McFQMYF+5c5bfKSvgIsTQ5HiXMtBW + A9gBsUS8UgrVBWkUuDPVFXIKvJGR54HkLJ31rne58EGeKkjmYysoKtKcEZ86YwarEM3PkxXFM+avwGoA + q5WLFaERcue6HYJ4ToEULwJ5zfo3xlgeZRWhXNQQEzg6hiImRqOYwBHsw1ARZsH8HsbnRL6elkSxQQGV + l0HRlGlFdqYn0tP0SEjUISZWTDgpAfs7/sMA5meGs43D+FoYzyssjH1E3qucn/RVBIUhx0Sy7AHG+ZFA + XRCXKO1ngzjO41gikSIqLcGOos4BWel2Fwzg+mqX/1gBPDruSXgoBvDElB+GhnzQ1m5AVbUWhSUamAo4 + bgs1KChz+y8DWM05Z4vSDBtUZduh2eSAnmLGkjrZ8iUU81pCMVLlja4CV9SlOaIimWM7TYeydH5OhhtK + 2Zc1lhA0N8WiszMZ3d0p6GhLQHtzDNqZL1vqI9FcF46m2hlEorUhBl0tcYoJPGeyCMuX1mHlsibMU1YA + 52NkIFspF60YwJ3R6GUe7e0OV0zgPubX3vYIHmVlcCg6mgPRRU3Ur+z9G4Op0SSKwURlFfDYrBjMHo/7 + 3wawlH6eXv07Mvq7ASymbe+oP3qoe7pHfNEx5Kegcxaf89jLdhX0jwSgj20/QA48OBGkHAV9YvoKpg1g + MZDb+L9i/tZ3e6K20wN15Jw1bUZUM75UNBpRXK1HEVFA7ZTLPJOR68Dxb4ukCwawA9KYV9LinJE8YwBz + foZx7voF2sPIeWgItIEHYWQsuGAAB3Mu/LcBzDmdG+eG4iQPVKV6o4GoT+R5xbijOlKLuigdmuP0aE9m + 7Ev24mM3NHC+NHDuNEU7ojnGCS0xKrREO/DogDYeZ9BCPdccaYtWHtuiVWiPVaM7SYvxfD/MKwvH7NIw + DFMfd+f5oinbA2WMhSbO7fxUFxQwPhSST+XnGZCR5YZEvhafxN9KxCY6K3M8NILxKdiRcEJgkLPVsFCM + X3vGInvr8WLzV3DBALaDnzz3lRvvbGH0ZHvppSz0/2kACyKUm2sYbxjXo8WEiWRMY8yMZXyXPRFlbz6B + GMAxjEmCyFj+D/8WLRfjec5yITee8zuROS4lW4dskwcKGf+Ki71QXsy+p86oyCVfoFatSrNFNfN2Led8 + U7wdutNUmOCcW1RhxIpaX7YfeS717SDnqaz+nVviivml/Dvn8wrmizX1HtjS5o9dPeHY1OLP/2PeK1Rj + 0OyIzjx7tHGOi/lbQ9Txc1qYp2UP2SHq1SHZ+9diRFeZAZ3lHugs06Oj2I15R49O5vEOQkoWt5Jjy6qb + GQM4M16NeOaaGI65KI45KRsnx5nHgmiOw2gxI9h3AlmRpqxKU8xfWRlMPisrOziukjherHsBOylQSkJT + i2emTK96ynAm1MjMVCGLXDSHmrqI8au2mnq7OwCjoxGYmorG3LlxWLwkBatWZmPjmnxsWV+ArRsKsG1T + EXZtKcO+nZU4uq8eJw804fSRDpy5fAj33DgHD966EI/cvhyP3bUSj9+1Ck/dsxrP3bMRL95rxUt8/PLd + G/AS8cqdG/DyHevw/C0r8OyNS/H0dYvw+FXzcNehAdywvRXHV5Ri60gqlndGYGFLCKbq/DFS7Y3xugAs + 6orDku5ETDQzplnYruSUTflaNOZJOVst2gtdyQc8MFjprazMnnWRASwYrPJAT6k72gpclJWPteR6Annc + kM35yc+Q1cZ97LP+CsasUm90FHqgWfYfJpdpzCTYlvXpTqhj3qlTDGBZCWyPmiQHBdVEbYK9sgewYgBz + XDby2JnBcZNNDsVznWVy4dEBAxxbQ+S2g+SVsjf1aK4dZpudsIBjaCHH10L+FqsB7IfVVQFYZvElrzZi + zOxGnf2fBnD3tAEs39GRqkIXz28gnTyOHHLK5I4psw6z+ftGshyUijeyldMwMSJgrhxPtsWcDEfMyZWS + nRpMFWoxUazFGMf6aKEOY8yDE/nO/LujYgAvJQ+WCmGbiu2wuURWA9tgJZ8vLbDHQrNKqazTw8/tZF6e + xTm8qDwAq2sisLk5jvMsEusbg7CuwQfrGzywocmAjcR6ctQ1NTqsqHDGinIXrCJX31jjgc31XlhbTn5J + Lj47wxbjGWynAvJPts9UhTeGy71Qm+VMPcGYSA2RwTmSEsUYyLgcH+1GruJOTqBXEE/EEQmMz2LiyR6u + iXHkTYoJTPBxerwWGXKBN4EQMzhBxznljvQEPRLFAA7TIixYLoqT8ykGsBr+QcJbXJAUr0d2hqzyDUZJ + LvWwlJBM0cGcxryfbUCpWfYU9UOJyQ/FjOfFBb4oIkz/wwBOTXPiY+tK4CzyukzyQdm/zzRtAAvyZUVk + nJ2iDcQEzuR4y02ygymV+irLSdk/tSpPi2qODUuWWjEaLdRe5Wl2qEixRTnzZCXRxtg2VuaMBVWuWF7r + +n81gGfLCuBKDdoKnRQDuIxzp4Cfly8GMGNjfq4aeTnWm+5yqG2yqN9ymY/FSKplDG01qciTnNBr5jgs + VGG8WI257OtFFuppixOWk5+tqNVgNcfC2kZ3bGg1YEObOza2u2JTx+8G8JZePTb3yMpkZ6xtc1Ie75rl + jf0TATg0O4THQGzt88CqFi3mUavLCuBWjhsp9d5RJivk/FCUJltFqZTVdHHkmlFiBIeTRzInR8tzMdMk + d0WqlJsEpLKN3NyYHC8ryF3IfcmNpQRpCHUBjzMIYvwOpL6QMqmh/ExZmRVPjp/CmJBFTpKfroJsJ1hI + lLA/yvjckin5zBFVjC/VGS6MRzq05Uu1Amoc6px2jo+mDC1qmB8tjPUV5PCVhIU6pYq5tCGJWo/6qJv6 + qC/fE/3kAz0cH2IAtybJHqqMRQLO9yb2Rw/jzqwiO0xW2GGOxRbzqAWXlNtgbSX1b50ah1rccKLFgJMt + elzGo+BYnRv2lqqxNd8O69mWm5hPtpuclHLQhyr1OFDhhktKtNhTpMEuxtgdZi22mw3YVKDH2gI3LOIY + mcp2xKx0B3SQszfF2qGGXMBCPl/F3yLln1t4/m3Ud008/9ocN1RT39aaDMyf5MtFzP/5zKF8LSOT8+OC + ASyah3M9WbSJGMDkFNQLMwZwgpRDJl9Knl45LNWC0tgP6akOyEyX/bWZF9kPgkz2SWaaPTJ5frISL52x + PI0cJVGqEpEnirEj2wdJWdcoatgLBjD5jmIAU7+IboqWG0uS9Yr5m5Hri8w8P6Rl+/E8vanxPBEUqYNv + sAs8yKPcjXb/DwPYBp6EGL/Cy8T89ebfffh+6xYdtvCntlXK4vL8RNPKb7cawOTC7PNU9nk++6pC8qXF + G901geixBDBX+qK/xA99nAttZm/UsV1LU+QmbBtkiwlMmPj/lTl26K2htm4ipyfPKWC7yPZxCT4c1zxn + WQGcHmyL/Ag7lCkGMPPftAHcxu8eTLPBfOqvVYzfGxgrNjEf7mPfiQF8bVMkTvB89lDDb2beXlrpg4ky + T3Sb2PfsgzLqYlk92pTsYl0tTl4oBvAIz3XKTN2W5Yr+eHsMUkdPMu4t4RjbWOyKHWU67GE821uuxpEq + DS6r1+Mkc8th5pQDFjfsqzJid5Uv1pJXzs0mbyPvriDPz+JviTFw7rrZwIs8153QedjCha/pCFdCKfPs + Yc/Hv0PvaTeN/zKAp01g2Q/YYBRYVxF7Gy8ygb1+N4DF/JWKWrJ9gWIAh2uoW5hzwl049hhnOBaC+HcZ + i/GMW2kxPGe2UT55RyFzQRnbw5Lroaz+Lc8xIpdcMIlaPob9E02IARwRQl7Oz5V97MUEFjP4YgM4jDoh + NIjanwgLVl+AmMJhYqryM0LkpgPFALZXDGAxpuUGiWTOgWzOwcJ4Z5Tzuy0JamVMlIj5yxyVz7GZS+Qx + rgpyyG3zyWGLEt04rlyRQ42Wzt+d7GeLVH87JPMc4tkWMUFsD9EV4ZzbhKx2t654d+JrnPNS3SPMCRER + PPf/MoBFywXw/OQo5frjyJetZq+eedUN2UQWc4FASv3nZhiQlyb79hsuGMByzFUMYMYdIjPJFdmp7sgk + 5LPSE3Xk4U6Ii+K5hdkhTK4v8TulHHQ422rGAI4NE/NXzbbieZNDCEdJidUhNZafS94iBnAa500G5012 + qi1M5GulZo1i/pZPG8Bm5nS5ISyN/DNRKqNxnl5s/v4/DWDGyjTmiuQ4uSneAxPD+TiwZxQ2X93Wji/v + 7MKHN7ThuZN1uHVHKQ4vy8HivnA0FrBheJIZkRSZUR7KMTtKj7xod3YqxRgHUl+KD5YXRWJ3QxoONaXi + QHUMk0IYjlQE47glCKcqgxWcrAjAyXJ/nCCOl/nhWFkgjpUE4nhpCB8LxCz2x2mS/HvHs3H7aBoOMOis + JkFdwkm+ikF8E3/M3vJAHKkLx8nmKFzbl4K7ZhfgrjkF+MPiMjy3qQl/2tKKp9fV4ZGV5bh3oRm3zcnG + NUMJONoUiN0VBuwqc8e2UjdsKNRgGZPYApMzAwpFd5GeQpuEP02DMiZbM0VXRigHjSxH92PH8LGJHVVB + glabS+FBotxZocFgA8lyhxvm9Hhg4QDF50gA1k2FY8PsCKycRfHS6YHJBheM1jpS0DhhtEaDsVr+T70b + Roi+GldreUZCSjJ1NhrRwaTaSdLdTZLfl65WNkmfSLDDcgqOnfz+EyQL11KY3EFh8ge+549MrI+TID+e + aYMXC23xDr/r/QYV3qtzwPvNavyl1QVv10tJShs8lW+Dh8X8JSl7lOLjQeLeLFvcTSJ4N4XI/SVOeKhS + h8d4Lk+0euKPzZ64r94Tt1V74JoKPY4XG7Cf4mhHgSeFgAcDsjuaObgqE51QluyK4jQfFGaGIS8rFtlZ + ScjIJngUAzg3Lwbm/CBIGRwxgKsoaupJ5ltLpRS2u2IAz6ZYnzGAd5ltcUODI54ccMF7c93x9UovnNsc + gF+2BuHsjhB8u13MiBB8tsUfH64w4qVJZzw14ownJ9zw6qpQfHQwF2dvacKv97cDj3UDzw4Az/fi/FMt + +E1Wn96Ri/cO+uAvu93x2R4PfH/AB+dPhQDXReHsdeH45DJfvH/CiGd3qPDwOhs8st4e75zwwT/PxOCH + BzLx6xNmnH/aDDxnAl7OA17J57GY31GO809W46dHWvDNvd348OomPL+3ELcvicHeRq0imtbLatpqR5zs + FAPYAc9s1OLD4x747CoDvr7KHT9c5YGzV7jjx1MafH3MHp8ftCNs8eVRNb444YzPL3fFlzd44od7QvHb + 04k4/1I68FYezr3N3/xWNr5/Jwtn30zH909E4dt7AvH5Td7455We+NelRvzrmBGfHvTCR3uC8fb6WDw2 + FYbr2nQ4REJ4qsUFxzle9jc5YRcJ4XoKvWUcH6so/HZWq3G8yxPHOg3YXeuMTaVOWFckBrA7BpiAGzgG + LUz6FYTsA9yXr8bm9hCcWW7CM0da8O4N/Xjv5k78+ZYGvHtLKT643Yx/PliMH56qxC9P1+C3J+tx9p4q + nmc+Xt8aicfnu+OJeS54db07/nrIB19cE4Qf7wnHucfCFQP4pycC8OuTQeyHQPz6iC9+vs+In253ww83 + OuPrK+zx7WUq/Hi5C35hm/52fQDOn4kCbknCL1dG4Z/7vfHuBhe8tMwOb63T4KNLfPDliXD8eDoOP1+T + xPcnE2zXa+Pw21Wh+PWKIPx8qR9+OO6Drw6y/S7xxN8v8cbXV8biN44jPFLK8VXBMWABpKT123z+5xJC + DGCOkTdlfGThxycT8O3DUfj8vlD8644g/PO2UHxyJhR/uzoEf7ksBO8eCcAb+/zx2iVBeH57AJ7Y6ocn + d4bh6b2xeGJfAu7aGIEbVwbj9BI/HJ3vjb2zDdg+5ooNsyicBxyxYtAJq2dRQI8ZsGXSB5tHSHb6vLGm + yxvLmr2wiKJ6YUMAFjSEYE5dGAYtgWgt9EF1vhcqOC+rSsNRbYmDpToJFURpTTzKqmJRJgYwIat/iy3h + KCgJQm6Rv1IG2lwagKIKMYDDUdsSh7qWeOUoZnB1YzQRiWp+V6XFD/UWH3TU+WOoIxRjveEY7gnBUFcg + hrqDMNYfjtHeKAy0RaCtJpjxIYDC1125E81P7oT0sUeAn9UADvZ1IEi6xfwN1CiIEVCYR/uTEHiTMBhI + etT2SHAg+XAkKSXJWp/mgLu6vfDu8kj8fWMU3t0WjRc2R+CB5UG4asJ72gBm3mn1xeqOQKzrYDxv91EM + 4FWNroSb8nhDq1G5gLinNRT7miNxoCECB2tDKZT8sDmDgpXC4wBFx+3FznihVY+3Bj3w7ogBr/Zq8Axj + 8h/KbHC3yQZ3Mh4/UGyPP1ap8FSLE57pdMJLgxq8OeWKD5bq8e8tAfhufyR+PZUGXFOIs5fm4u87E/Hi + ihDcNeyO060OyqrffYzt+yw22F9pi71VfMzjfosdia8KxytUOFWuwtWVjripWoV76hzxUL0jnm9zwTuD + enw86YvP5vnhm8UB+G1TJM5vjSBCcX57KLA9HL/u5HzbGYmzu2Lw7e5ofLEzAv/YHoK3NwXikQXuuKZf + hZ01FJKMa+NmEv8CFQWsFq1Fbor5a8lyQkWGmnFBpdwRXpQssEUJxUJ5ggMqKdRqSIBqSGjqSBbbKUTG + Mu2w0GyP1eW22FLL39KpwrXzDHjmYDw+ubMU515o5dzqAz4ZAz6bIKasZvBHs/HrG7PwxX01eH1PCh4Y + NOLGahdcWaHF8XIKVgqAraUeWJanwXiynVVAkHStpLDdZVLjYD5jMkXLVSZHXJuvwg15DjiTZ4fbC+xx + b4UD/tTrhncnDPhokRGfrfbG91sC8TPb6dw2xqWNYfh2kS8+HzfinwPu+Khbjw+Jd7sM+FOTBk/WsN/Z + D7cV2uNqxtTjbIvjWSpcSu5xuNQLW0u8sKzQE8N5bspFxgKSvAwSOrnAkx5ti5wEFUwpTiggRynO1KAk + Ry4K2cLMHF5WIKuAHVBX7oAG9nNrnRPaGzSca1q0VDmhrswOVewfwcUGcHcDOQZjfS/RL0Zvp04xgYc6 + NXwuN7hZMcyxMtKuwWSPK+b26bBgkHF/liuWjxuweNiABX1emGjzREch+VGaI4qj7JEbaIc8Et7cQBfk + BDkTFJlhaooBFcwk8bI6spgiziIrbLJlNY8bmojGfCkXzmOeTrkI25Lvjq4iI3pKfTBI/jhSFYCJ+mBM + NPhhtN6I0QZPTLT4Yk57kLIHcV+5N2rStDBTZMg+RdFGgoI53J+YFstWA5hCRgxgEudQtnEYxb4YvzMQ + AziEYsW6968tAin2LxjAwfbwl1LIJPcz5u+MASz7AEdFGxBJvhwcpIG/nyOMPA8f8ki5SBTK7wzj9ykG + MHmdmLUzkBVwqVnk3PkUHkWyv7o/8ot9kVPohfR8PVJyXAk3pE4jPUenICObIoVjIpmkX4zgBI6TOHJm + KSf9uwFM8UQRFEFuK3v7ivmrGMChNgjgeQnENLpgAE9f1BBERMld9i6IjaWAjJF99GQlsNyprEZ8lLNy + kUzuiM1KpuBQBJbAQBFiRDpFVSKFUwzFjhi8oWzH3w1gMX1FsFlFW6hcTOHrSv/IOYVQHPPoS2Hlz9fi + FIOI35mkQjz5cHQc+1bakccYHqUsUmqCLdKTKUjJi4vIJytK1KitckZnhx6DQ94YGfXB8KhBwci4J8an + OKbGAtHd44OaWjcUFlM4mTluzS4wlfA5eW9xuRuKy7QoYmwryrFFETl0OedeQ669siqmv9IdU80BmN0S + jJE6P/SVeaLVpOXfXVHHvqzK1aM0xx0W9mkddVFzYxTaOxLQ1Z2EjrY4ZeVva0MkGmvD0FAdgvqqGYSh + qSYSbQ3R6G5LVAzgpYtqsGxxHeZOlWFsKA/D/dnKHsI9HTFEFHq6ItDXHYn+nkgMdsdioCuGx2j0tIcr + ZaF72kMx1BepGL/zpzIwZzwFY4Mx/CwxgOOxYI61BPTUZLS1/PNkBEYnQzFCiAE8PBqEIVnROxqgmLZS + +lnQNeyLtkFvtErZ5gEftA94obPfqED28+0e9kEf+Uj/mD/hp6z8FfNYIAZw77AfOof80Mz/r+vyQI0Y + 8m0eqKIGqWj0gKXBiDLO98JKinNqpLwKinjquJRsFZJS7ZS9opOSbJHCsaGU1eJ4S1YMAY7bSClf7gRf + fzsYfG3gRrj7Ww1gWQkspaADlFU8MwawLaIp4NOjtchL0KMwhd+f6sXY5o36FB7jDaiJcUN9rDuaEgxo + 42vtRGMcY3cUx1uEI2ojGY85z+oYQ+oYQ+p5bIxyQNM0Gvhao7zO2FLL768h6jn/+tI9MVkUijkVkRgr + D8NAYQj1oB+q0qi7UzTKfq+mbHeY8zyRw2Nqug7xSilEMVF/N4DDeA5BIVYD2D9QDT9/R6vJ638RZozf + afiI+SsXGOWocC47ZQ9zo4cNPAxsJx/GvwsGMOcsjzMGsGICh8pFD7lDn5i+sC4X1CN5jGR8lRLQMXGc + uwlqJTZFSUyKluoHcu7OSnWDOImDGVpk5OlhKvRGIWNfKTVnab4WZcyX5WnUGexrC+d8JeNoDeN3M3Nl + f4ZKMbwWVXhgTqkOI/kOGGMun1MkRoOer+uxuNwdy6sMWFPnhU2tgdjdG431zBnzytwxy+SMfs77Dub9 + FuZ9MX+rqKllH8umbDU6zVplVWpfuQd6KzzRXU5YOL75vKfcwNc4zslvuyt80EWu217hj/piH+XCXGG6 + K7ITXJSLd7JiQsxeuRlpxviVx5KbpEJFNNtQMYBlJdpFBnB8tHVFcDz7VoxgWQmcFOeIVB5ltXsaP1/2 + Xk7jGEgjR5BVhBmKAaxGVo4j9Tf5VxnzbKORcTAUs+fEYWpuDObOj8WCxQlYsiwFy5enYtXKDKxelYE1 + q7OwYW0OtmwyY/f2ElyyowwHdlbi+L4GXHmyCzddNYQ7b5iN+29dgIfuWIw/3rkET969Gk/fswbP37cW + L9y7Dn+6Zx1e5PHlu9fjZSkdffsKPHPTIjx2zRw8cOkIrtveiFNry7F/YS42DsVhVW8ElnWFYXFbCBYy + Tq3si8fmqRxsnszDioFkjNYFoLPYHa3sC9nDV46dRa7onTaAh6u9rQYwed6sai/MqvHCIB+LAdxq1ijG + b026nQKrCexIjqFBZ6Fe4Q2DFsaicsaqYiPazHq0kou05BG55CLkKA1p5CoXGcDyWFYEiwlsvQDOec0c + JGWgZRVwR7oTurNcMJirxVC+BgPZDugnXxPzd4AccIhjbFa2LSaplWXPxHkleiwUfspzWFnprxjAyzmW + FpQZlXLO/cpqX6sBLMZvb56YPxr0ZLugO13N2OGEEfKHCfKnuTz/OZwPsq2IGLOjsiqL8XGMx3EexxNt + MSfVHvMyHDE/2wnzTC6YU6DB7BJXTJa4Y6LYDWNmZ0zkqjHF857P85StoX43gG1/N4ClYphJhYlsqwHc + wd8/kM55V+KH1dSFmxtjsbUtmpopnAjCNuqqbe2+2NzqhfUNeqyocsXiUicsLHbColJnLC/XYY3FgGVF + 5Jr8/tlZ9jwHFebzvOZZvDC3ygfjlcwV5IiWTGcUMSbKRe/MOFlZ48Z5oUdCvAcSEj0VJMpRnisGsI5H + LZ/LKisX5SYhqRQhq3sU0zdBjGAr0uOtnxenrMSSi+Sy+tcZIXJjHx8HhTDWyr5+8cJ3vMk3AlCc7UN+ + 4IGCVHIHxuyiLANK8r0VE7gozweFOUalJHSR2Vu5QCsXamcM4IuRRmSmWs1fWeWfm+YCM/vWnPWfBrAg + gzomh7wnL8UehaK1OCaq2DaVHHsV7N8K6l4xf8tSbFHG2FlKzVNGNGXYYKjIAbPLnbG4WoN1jTpsJDY3 + E23TBjB17+xaHforXNBsVqEqxw4lnD+KAcy4qBjAOVYDWErN52Ra9wHOSbGBKYkxmmO8yeTAeeqITpMt + ek12GKK2myhmf5azvytkBbALltdosKpep5jAUop6Hc9hfasWG9qs5Z/FAN7aZ8DWfj02dfM8ia19euwh + pzgwGaQYwHtHpfyzO8/ZGXOqZd9hfmeuCs1sj5YCo7JKrjBZpxgWYgDHR5BDkgPHMDdZDeDpvCUmMB/H + RjAfkfuKESyIIdcPJ++f2YPyPwxgcgfFACaC+Rnh/PwY9osYcnJDYm469RtzlKwCLhITOJO5jPGnTDGB + nVHNvqrPZpwhz+8we6KdaGRf17CvK8hniqPtUcy+LhEw7ymrLpMc0cRY38Zx1E2O2Ut0zRjA5MoSixo5 + F5t4bGG/97Evhs22mKIGnFNmg7kl1gpba6gHt9Y64jD7/NJ2D1zW4YEreLy8TQxgHfYUO2ATY9YKjpnl + /D1rUm2xmTFhV6ET9lNXH2R+PWTxwP4yPfYzfu0r88XOMh9sKTVidYErY4MWEzmMhSkqNFLTWqiBSthO + pWwjufm7NdeArkIftDHfN5g9UE80MO83lfqhnjGkskBW1xuUfXzTqXMUAzhVc4H3CI+IJL+KIM+Q1deR + bKO4WAckJAjskZzsQG5orRCUxjki5m+aYgSrrGYwj6l8PZUxMZVcIoVaIpmaO57cQsnP5IhS3jUqxGrQ + RVCzCBTNQoRQE4pOimHMSE7zoIbzUbY+yzEHITsvmNosgOfqTT3pBr8QDTz9pISwCu7G6VXA5FgCjxn4 + 2MCT8JaFD+RhAi8+9uZ7BT78m2zTEcCjbMcjZXml9Hgcx0RSvB2S+TvS2d+FjJ3V5DbtteTdDcEYrA1g + jvPFEHPKYJkfOoo9lX32y5k7zBwjOewbMYDzOGbKMuzQxv/trmI/FLojX8qZsy3kpupEgR/HNeeClPUV + s/ZiA7iVkC0H5uY6YCXn38ZMe2xh3jnAMX6VxWoAn6oLxkHG8R21fuRjgZhbyXMsNKCac6WUuVNWADel + uKCd478jxRG9zCdDWVqM5kqlHOa8WFv08VzHOB4XcC6tZe7aQY22h7HsknJHfrYzLm1wx8l6dxypdsOB + aj0uIRfYZvHGikIjxjJ0Cv8u5G9J8eR8dafWJIxiAJPrivnrRGiIGQPYldAZeJw2gGfKPl9sAIvpKwaw + GL96D76m/N0GBnJoZd9fwmoA83iRASx77coN1TK+xKiNi9SSS6shZaGD+HfZr1z2LY9hPyeznzLYR7IK + uIDtU5rpirJcd8X8Lc7QKzdDxfN9wjWlykEE41MYERVKHR8mewprlYoWsVGuCqwGsFoxf2XF74wRPFMW + OpLaSUotS9llWXU+YwDLqmTZdz+R8TKT48BMLloa74QycnwZE8UxtiiU8cT5ns15mcP2zuUcvWAAJzFH + ErmyGjaMOi7ADqlBDkihbhEDOFbaI0SF6AgeCdnKxwpnxQSOiZSbe13+DwNYSj9LPPbj+YkJHMbvjqXO + yEiRrak8mKOsFcqy0/k83Y2PDcjL8lBuXhfTVzGA+T4pAS0loYVXC7JT+F7mdvkMMZIz+VzKQQsfl3OU + mzHkpgzlxgylnLcYwI6IVsxfxowAtikhK4ITozTsRzVSYqwloMUAFmRy3uZmsN2YV8uK3FBKiAFsUgxg + Z8YwxjS55sF2vdj8lW0H/pcBLDeYZZBHpCRQV7E/Chhr5cbxfbuGYfP9Ha344rZWfHhdI166tBb37inH + pavysXIwAu0UO4UJ7siNNiIr0lMxgLOiGIRj2CjRPDEOnP5UHywvDMeehiQcbUvD0YY4HK+LwImaYFxR + G4yr68NwdV0ITlcH4AoS2ssq/HApye0JBp8TJYG4tCwUJ8vDcaI8GMfLA3FdazQenMrH/ZPZOMmgsCHN + Ecv4Y1dRGG6k0N1h8sRuJok9xV44XMn39yTj1uEs3De3AI8uLccTq6rw1JpaPLOxHo+vq8If11hw76IC + 3DCSghMUFHtrvbCDxHJjqRtWkuguKNJinMR6yOSOthw3WCieTRwomQzo8RS/UhNe6t2nc2CaItWwpOpQ + x/e1MKl1lJEU1egw2uKO2Z2eWNBnxIpZgVg7EY51kxFYMRyIxT1emGzSYqROTTEicOZjDcZIckaa2X4k + Vy21Tqjj35plxU6THj3VfN2sxmCWA8aljAIT5waTBntI0C+j4DnDZHoPxcIThW54vkCHF/Od8WKOPZ7P + tcVLBTZ4s8IBb1XaKyt+36pzxLtNLnidxxfEACZhfzyPR77vcRL3h3NtcC8T+90k9nfl2eKuEifcV6nD + HxoNeKjNC/e3GnFHowduqjHgmko9TjMZXFbli5NV/thHLGOyH8wj2aAwqmawLk3xILkJ4kSKRlZmPJN1 + ogIxgPPyYlBgCibx9ftPA5joKdKTmOgwxWShlIAmydzJ87u2XoXHBpzxzlw3fL3GB79sCcAv24Px0+4w + nN0XiZ/2R+ObnWH4xzo/vD6f7TGlw7OzPfDamgj841C+YgCf/0M38EQv8OIgICvHnm8GnrTg5/ty8M/T + gfj3cSO+OeyBs4eNOH+pP85fE4afrg/FF9cF4e9XeuHVg2o8f4k9Xj3kgo+u9cNXd8Xg3GOZ/JwCfibx + kgl4LRd4I58o5vMK4Okq/PJoM757oAd/va4Fz+0vxm3LYrGXfb6GfbCGJGxXtSNOdDng5kkHPL3RBR8c + 1eOTUzp8cbkW353W48fLXPHdCSd8ecRWMX8/P2TLx474/Lga/zqhxsennPHZGU98/1A4fn0uAXg9A7+8 + noYfie/fSMZPryfjh6ci8PW9fvjiZiM+u9YTn11GnDDi30e88K/9IfjbjmS8uiIB94944epWFc4M6HDj + iDuuH9Xj2lESwR5XHG50wYFaFY40OeF0twEn25hkK+yxkaR+XaErlhQYlDucm3PkLlMSUyb+Wh77KWq3 + UMjftDQfzx5qxp+v68N7N3bgvTP1ePM6M167Mg1/v8OMbx9iXzxWi98ea8TZu6rw79MmvL0tCk8vMuDl + VUb8ZU8gvriCfX17HM49FIffnojCuSdC8dMTQfjpMY6HRwPw0x98cfZuI87epscPN2jw9eUO+OaUI76/ + 1Jnt6I6zV3rj56uCgRvi8OMpjpddBry20hGPjdvgiSkHvLJSgw93+uPzw9H48lgsvjkZi2+J70/EsA8i + 8N3RcHxzKBj/3OONDze74f3NrvhwN8fNNfH49a4c4JEi4NlS4JUy9kMJ8Dafi/n7rtlqAL9lXQX80zNJ + +O6PMfj3fSH49PZAfHorj7eE4+MbwvHRNRF4/2QI3jwUgJf2BOC5bQF4emswnt4Vhcd3x+B+tsm1y/1w + ZNKAbUMURcT6EQqmYS1WznLBsiEKqUE11oxSKHEO7F7gh0NLwnFkURSOLUrA0YXJ2DsRj62DsVjbHYWV + XdGY3SR31QegocQXVYV+JIthqKmMQ2VNIiqIMlnxWxmNssoYIgollnAUlYfAXByAfAX+KCgLUgzgspoI + NLQloKE1QVkFLAZwTWMUGpqj0dIaic7WcAx2hGGkKwjj3QEY7/LGSKcBo11GjPf5YfZgMMZ7wzDQGozW + Gj/lYnkqBXlEqAsC/B0VI0Uxf5lAg3yY4IlwfxcmVorzQBdEB1Cg+VMM+KoR4WWPSBK0aGd7pDjbwqyx + QTvJ8kqS0OsZr1+YF4S3VoXhjU0cZ2vCcfs8H5wcdMf2NlesbzFgVasXVrb7YnWbD9YwBq5u4muNbljb + 4oFNnRQ3fUHY08e8x/G9vdoX28u8sbfCH3uYmzZQlKygsNwa6YBbGLdf5P+/M+SLd4cZS3rd8GyzCx4q + c8Dd+ba4LdMGdxJ3Mw4/UGSLh0tt8WyjHV7rc8J7kzr8a7UvvtkRjnPH0oDThfjmaA7e3RSLx+f74aY+ + HU422uNQjS32WQiKuANV9thb7YB91So+V+OARcrhOOFgqRqHS1TMtypcY3HAjZy/d/E9z3a74b0Jf/xj + XjD+vTgUP/Kzf9oSjZ+2RuDnHdH4ZVcCfiA+3xaDf26Lwz+2x+KDrVF4dX0Qnljhh1sm3HGw1Z651AaT + zCu9FJitUp4xS42qbCdUZJHEZJIUppHUp9gp5m9hEkEhWULiXhFvj6o4ClmKrloSmhZikO9bVOCCDZVa + 7GDeOtimwmWDTrhtkR4vHeR53JKHc09Vc061AX/vBz6dRYwC/xgH/jKJ8y/Nwle31+LN7Sm4v8cDN1ic + cFW5hrzDDceqvbGrzBMrGa8mkmwxi4RpLs9lfbYd9heqcYwx7bRZhRuL+H3FGtxe4Ig7TPZ4oMIJT7e6 + 4u0xL/x1oTf+tcYf32wLxE+XhOLc/kj8ti8a53dH4+y6EHy7JBCfTRjx8ZAHPp5lxN8GvPFerxGvdujx + FPP+feVq3Jhnh0tlBXC6PS41ueFoCc+rxAcrKXpHSeTrE1Uwk6xl8vxSheyTTOclOSmrv0wk/HkpauRS + 1MpFlnyOn1Lmk6pSR2X1b3O1Gm31FE4NGrTVuqCZr9VyXFUy5wtq2VdN5AftbNuuRjV6mhwV9LU4YahD + Q7hgoN0Z/a1qDPA1wVCbC4bbtZji+J034IrFo25YNsE5MdsTy8e9sHjIB3O7fNFX4a6smimiGM8mCc4N + VCPH3wmZPg7I4Hw1UYAUkkeVxTmjigK+kaS2OV+HNvKZDrmQW65XLtgO1/hguJaQVT0VfG7xwgjF4uyG + IMxvCcHC1hAsaPXH3GajFa0+mN8egHmcj0MUePUZbKdwO8RRuEVS0EVQNIdRKMtFdimZFcq/hXCOhkba + KWWfw6PtEBHNmBHnSKgRGUuxE01hz/dYzV+KbIqKCwYwRZC/XPQRgSarCyMpoC4ygCOnDeCAAGeKdQd4 + inBn/AkQgcDPktXGigGcaI/YJMcLSKTITSO/zDRRfEzvrS4msIl8OY/xMNPsoZjDM8jKd7eCIl6M4LQs + MYJ1ihGckOoE2VtTWWknkLvkY2VFr6zspcijCBMDWIxw6wpgtgtFzIwBHCIXN3gUhLPPoqJkry0KU2UF + jRaJCRokxkv5QzGAnZGc4MJ4TaGU5Iq0RJ5Pkh5pyR4UIzMrgEWo8fMvmMD2SllegQg2BYr5y3PiuQRQ + vErZbD/CW458LTzGgb9hZlUz+TnnRlQM2zHeFvHKhQ97fqfsBeyA3ExHFJnUqCh1QnWlE+rrndDWrkNv + jzv6OIYHBt0wTI5j3RM4hK8FKAZwQaEz29MR2eTVeRyThRyTYgAXlbigkPGhKNtqAJdlcC7l2qOFsaK7 + whXDDT4YbwnCaGMAhmr80cdx2FnmhbZSLzRxftdSs9SW+aC+SgzgcLS1xaKrMwEdrTFoY55sqQ9HQ00o + 6iqDLxjAdVVhfC0cLQ3R6GpLxNR4ERbOqySqMGeyFKNDeZjVn42+7hR0tUejuz1SWQE80BvN12MxMpiI + 4YEEzOqNR29npLL6t5c5eJQcYN5UGhbPy8b8qXRMDFvLQM+dTJpeARyvGMATsvqXWkbM32ExgGU/39FA + 6/6/YgCPyKpdWf3rj85ZvmgdMKKlzxOt/UbCA+19VnQNeqGLsbCbObB3xBt9Y4wVinHsp0AMYDGJ2we9 + 0djjiep2d1S16GFp9kBFgwdKqg0orTGiuMqTc4EatMQdqdRDSVmOSEizR1wS5zrjeALHQGK8Cqkc6ykc + r0mcm/HhzojlUS5i+AbYKgawK+eiK+OBB8eVdRWwLeez9W5xKW8WFih3ztsjPVaH3EQ9zCkGlKR4Uv8Z + UZNsRFW8HlUxbqiJY6xOMKAxhX0sxjDfb+FcqQhXEXao4Hiu4HyXC57VEXaoYVysjXJQUEc0cC7W8jUL + 518ZY0MpUR/tjJ5MI0aKQzBQGISuPH80ZXmhQvaTTNYy9muRm+HK8a1HRrorkvlcMX6ZH2ITxQCWEtDO + jEPOnE9OigHsF6CCr58DfHzF6JXSz/8bXl628Pa2ZcwS2CnwYuwyGm3h6SmGMOMfuVgQ43oIERbIOBno + 8LsBLOYv46IcI9ie4fxd4TyGyTGUMS/KFrFxKiQksV94vjFxTsrF25h4njt/Q7SUsWfuS0jTIFXuXqfe + LzCz382cg7kalGYIj6DGYF+Xc95bImxQxfatZzxtjbXFYLoDJskdZst+pGVaLK1yx/JaD8KTjz2xpEKP + ZZUeWFXjjbUNAdjYFo4VdUGYkgpg+Rr0Mg+1m2R/WCmXaqusNq6mBm/gOGslZ2gvcENHsTu6ZbWKGMDM + TZ3Ur30WI/orvdDDHNVd4Ysuiz86LjaA01yRw/iYwFgbw7aIlotzoVL+2U5ZAaxUpghgG3H8RTEOyuoz + MX7F8FWObKO4aOtr1udiCltN4GQeUxnXZW+ytEQtUtmOqcytaWkuHB+MZZmMY3nOMJmdYWF7tLT5cg5H + YM68eMyeH425C2OwYEkcFi1LwJLlSVi2ItmKlSlYuSoFq9ekY/26LGzckI1tG03YvbUYBy+pwokjYgR3 + 4vor+nHLtcO44/ox3HfTXDx42wI8fudSPHnnMjxz1wo8e89KvHTfWrxy3zq8zMdP3TQf918+jFsOtOPo + ykJcsiAD28YTsW4gEusGo7B+KIqPo7FpJAn7FhXg6OoK7F9aho1jmZjdGILeUgM6C3XoYF918djDWNBf + 7oGhKuqJWv429q1SCprP5bUBcoduvkcM41qOnxpyrhnUZqjIQVzQoRjAXnyv1QDuKfFSSkF3UNvKlhbt + Jj3a8lzRnOGsmL410wZwfYqj9bliANuhUVbdMQbVxdmgjuOxlTzNugpYgwGO3/4sFWGHwSxbDEwfZ/E4 + znwzyXE3R8ySEgOWl/tgdXUA1lQFYjnH00IxgE06DOQ4o5N8ujPLGX35rug3uaOX59XH3N+XpVMukI+T + P8rq37kFesw3u2F+vhYLcl0wn1x8Pv93Prn5wgxHQo3FzJGLiAV8bR7H+Jw8NeYUSTl0fkaJG8Z5TuM5 + jpjKsuffbX43gEvssaXMDuupWVZJCegCB6UE9BzmzD7G4g5ym75kflchOW1lGDbURmATc97G5hBsaQ/G + 9u5gbJPy660yDz2w2OKKOcVqTJFvy17d8/hZCzmP5/Pz5mXzc7N5bjlOWMi+n8+5NkcxgH0V476Wv788 + i3k73Z2cWI/MRAN5gAf5CZHkicRkTyQlGZGUwMfx7uQursoq4HhZBUw+kxTNY7SUYnRBFnmLmMBpckOb + mMP8u+zDKCU5I0PJ86T8c7ALuYsO4eFu5DI6REW6kQPpyXc8kJvmCXMa53uqgXBHUZoeRZkGFOV4opAw + 83E+43ZepjvystyRQ66WJZxvxgBOuRiyYkn2PiUSHJHB2JhD7p/LuZ3Dtp0pAW29QdQG2WLgJIsx64hy + MYBzXWFRDGA1LGkqlDNPljN2looBnGCNoY3UIP3UDmPUhvOpcVbXa7G+QYtNLa7Y0uaO9W0GLGlww1S1 + zDNyKOqWcsbFolRq6jQ7pWxuXq7aagDzcS7HshjAsgo4N9UGJn5XRbYNGsz2aCtUoS3fhvnMFj3UvkNm + O0wWOWB+qQqLLM6Mz86MxbIFkw5rmgQa6m0N1rU6Yz31yMZODbZQf2zuc8cmORLbBzxwCfnDwalgHJ4T + ij2jvljf5YZFDRwzVWqMVTijm3Gvie3RRE5dk8t8kmQ1gKUEdCyPMeT4UqVCbrCJZY6WFcESm2XFZxS5 + fgxzeUIMeS4RQw4hRoqYv3IMYZ4LnkZQsC31ADkEIRxfTIco9otSlSbFQbkhUcp7mjPFBFahiO1VwvlY + wrlXIfuaZzM+Zbuyjd2picgp5MZB8vhy6oJC8vf8CCm3a4MC5jwpq1oaxxjGcVDP8dNM3i/Xr7uIDsaB + jgwt2jiGGsmLmxmL2qm1u9hnQ9S542z3udSD88ttGFdssKzCButq7LC9Xo0j7Xqc6vDA6W4jruz0xOVt + ehyt1SgG8OYcW6xmfy7l5y3l/F7G45ZcBxyscMOJOm8cp147WOGBg+S8Byr8sKfcD9vLvbGB8WxZAeMR + 8+dAqiNaeO6VbONicp1icoMK/rbGTFfOZW+0F/mikRq4odCIBuqdxhI/1BX7o5J/KykwIp9tk8Hfl8i5 + EpNAbSPGLzWBbBkTwb6LIOeSdo+QbRaoEWLZRrGcJ8ILE9gGYoyK0SsGcAbnSRbnRhbjs5SFTkslb5RV + rjKvGLuTqAlluwYZD3JTgOTmSFmNGEo9NA3RSILgEGqZCDV5DMcWY0Batq9i/uYVhiDXHIqMnCAkpflR + a7pTx2hh9HOC3ssR7p62hA3cjVYYZuBtA0/yMC/hX3ITnq+dchPxjAHszceKCUz4kcf6EyFsyxjyq8R4 + e6QwDmRwrhfnk1+yfzqpTQabAzFCbTJcwxxZ7UOd7IsO9k19ng7lsjqd41TKPysGMI/FybaoznZGNedO + RboT8qJtkcm2zeS8SKdGkxWb2dRzBeQiFnJuqwHM8cbPaWVsGUrnGMt3wKpcFTZnq7CT+fYQc+DVigEc + gcsaQnCkPhC76gKwtp7anXqpn/FcMYDjbFGZ4KAsLmvn+O5MVaOHMbKf5zHAHNyfpkYXz7GH5zrMuDcv + w555yQk7K7S4xCLbK6qV619Hlb2s3XG4xh17ie0WA9aXeGAh9XJ/EucdeX4O2zNOz/aT8s8Gcl0PagPC + ia858rkzIeWg3cl/XQ220OkFdgrc+FxwsQGsmMBi/spjgx3c5e/8PDGAjfwcgbeR/UpOrZR/JmT1r1TU + uWAYhlGvSElmMVrF4Gd/ywrgcH/2MeNLEn93Bsd0bgpjCdulhPOnhHy5KN0NuQnU45wHseSU1psNbRU9 + E8rxGx4kBjO1vGIEM55FahVEUiOF8btD+fcQ8nk5CqLCp/cEjnRhnnPmc1kNLH/nuBeTk+cmBnAC50cG + dYyJY6GEnFQMYBkTZfEOfG4HM2OWGMDZYv7yqBjA0eoLBnAO83EK51Ayf29asCNSeX7x/P6Y6fkmZfcF + MYrpy3Ontolhzo6N1nHMa/+/G8CpcsOVVN2Q7anckUlenpkmW6YwJ2cbmJf1yE//HbnM3zn8nwzqLoGs + /p0xgLPTDUqFyuQELRKot2Ko+4KpL+WGjBmIoa+AvyWc7Rrub0VUIH8bzzOB80f4exrbKo2xJ43zJ4Mx + NieDuTNHRd2jRXGBjkfXCyuAU8k3Exl7xeyVEtACMYNjifgYxi3O/zQxgDl3cpkXsjO1fE4tzFiYwP8p + zDMoK4Av2TEEm5/uasGXNzfir1fX4bVTtXhgTxkuXZ6Blb1BTPh6VCSTzMT6IDfSyMnuiewYT+TGCSiI + Y1zRm2LEkvwgbK+JxuGWJJxsicOppkhczsl9TWMozrRE4qbmcNzQEIxrawNwZZUvrrD44GSpF04wuJ8q + C8apinCcsoQoK4Vv6ojDH6fy8fDsXFzXEYVd+W5YS5K9kT9mS6YbdvDkd1EU7jIZsLvAAyeqg3FVSzTO + 9CXhlsEU3E6R8ODCYjyzvg7Pbm7A05vr8ejaKjywrAS3zMnCqb4o7G8NxPZab6yv8cKiMj1GzO5MnK7K + vphFHLwZDHDx7LxQVw5wDRuYx3QG4cIIBsMUdzRmeaCNgqCj2BU9Fi2G610x1Upi2u2NZQOBWD0ailXE + sqEgLOr1wWSrXBxyJpwwq94ZY806TDGxTnQZMNTBzyHJaWx0RANJS0cjk2SNC0ZIjMZJthfl2mJrqRbH + azxxdZUed1Tq8YhFj2d4fJ1C9p1yPd4hYX/dpMIrJju8arbBayV2eK3MHq9WOOD1Gie82aDB6w0ueKnG + Ac9bbPF8hS3+VGWHZ8ts8VihDe4nKbs7zwZ3mGxxa5EKt1VocEe9O+5s8sCtzQbc2OCO6xlEr6OQvqHB + Dzc2B7Ff2e5tIdhRa8TCIg1mkaCLCVyZyECU4gtTWjgHYDTS0uOROm0A55tiUWgOQUmhv9UAni4B3U4B + 3V/EfjBpMZuJYnG2GMC22E6hcVWdAx4RA3iBHl9v8MdP2wPx065g/LwvCuePJuHc4QR8vycK/9wYhHeW + eOLl+Xq8ON8Lr66OwN/25+L7M43Agz3Ak/3ASwPAy93ACw3AU6U490Aavr0hBN+e9lHK+v54RI9fj3vj + tyuD8MsNYTh7WwQ+u9EP712mxdsnnfDh1Xr86yZ/fHdvJH57Io2fkwv8yczP5fGVTOCNHEKeF+PcE2X4 + /sEa/PvOZrx1RQ3+uCMH1y8Iw06S2hUFNljJftpRpcKJbgfcPNseT290wp8PuuLvx5zxLyn5fEqL7064 + 4JujjvjysC2+OGyHr444KCuAPzvmiI8P2+ODg7b42xVO+OIOH/z0ZCR/WzLOvZKEs68m4uwr8fjltQT8 + /FwUvv2DP76+zUtZMfzlaQ9+thFfHjfi80NB+GRPEj7YnILnlwbh/glXPLjAgIeWe3POBOCJdaF4eGUQ + 7pnrg5tnueG6Xh1u7NfjShLy/SSOm0nkNxa6YTn7cpQEr8PkgkomfREYNST//RST21qDccuifDy/vwXv + X9OP969rx/vX1+O1K/LwzJEYvHddNj67swQ/3F/N/mjAD7dU4vPLzfjzthi8sMyItzb649PDkfj+ukSc + vzcVeDSJfRmL356O4G8OwY+PBODsw/744V5f/HiHF87e4sn3uuKryxzx1UkV24vHYy78vW74mr/57OWh + /N1++PMmDZ5bYId7emxwZ6cNHh6zw8sr9Hh/SxA+2BqE97cG4C/bg/C3nSFEEP66NRh/2RyAt9d44E9L + 1HhphRp/3mHAV1fH4ue7MoCH84Fn5GYA4lUT8Cafv52nrMpWjrIX8Jt5OPdiOs4+lYSvHo7CZ/eF49/3 + ROLzu+PwxV0J+Pz2RHx0fSzHWwRePRiKP10SgRf3ROOF/Ul4bFc8bt8QjhMLjNjS74RFrbZY0GGPJUMa + LBnRTcMFy4gNs92xZ4kvjq0Nw427MnDn3gLce6gSDx6pw+27LLhseR72TCRhy3AClvZEYxZjdavFH7Wl + JNuWUNTWxKCqNg7livkbhaKKCJSUR6K4LAyFpcEoKAmAWYxfOZYGKPv/FlUEo6w6HI2tiWhsS0RNIz+j + IQp1DZFoaY5CV2c0hnujMWcwErP7AzDRyfnewpjY6oiJDhfM6fPAvAFfTPQGor/JDy3VRpQXGhTRFR7i + otx1HRTojNBAEhB57OugGMAR0wZwjGIAMwkrBrATonwo3EjAElxJUt1VKCUJ6yRRWUnRemWzOx6d9Mef + loXi5bVReGQxc9OwHgc6nLG9jeK33YBV7Z5Y1mrEcsbAFU16rKQIXtnoTjHqhS1d/tgzEIq9/RHYWu+D + 1WYXrMlxwU7OA9nXfkOiBotIOtaQfNzI119s9cG7s4Lw9ixfvM7f+UKrGx6lML3frMIdFMu3c67cTiF+ + T5YNHsq1wXOVtnir0xl/HXPH5ysYb7ZE4tyhDPx2WSE+P5iF19ZG4v5xL1zbpcGROnvsZ1zfX01UOeJA + NYkvY/7+Gg32VZMMV7pid7kWOwqdGE/tsKfQDgeLbXCUcf9UEb+zWYMXh33xDsXz35dE4ssNCfh6Szy+ + 3BKDr7bH46tdyfhkayLeWReNVxhTX1wdjqdWBeO+Bd64cdKAk/06bKR4nMN41s/zb+Tcr6QAKKbYKiCZ + KaGwKKXIKkl1QHGKrWL8KiBpLyEqKVBr5GIZybyUfu7ha3NzHbGeRH1vkyeOtmtxesAFN09q8Yflerx2 + IByfXpeMnx/mPHu5BnhfTOBe4KNB4MNZwLtjwHND+PamOryzKQX3tjN3lapwTYkzrqhwx6laX+xlzlmT + 54LZSTYY43cuplDaxvx5rJTvKVbj+hIn3Ekh8YdKd9zLx/cUMgexPV8b8MHfOVb+uS4YX+9kfjjEfjkZ + g99OxeH8yQTgWCJ+3RuHnzZH4aulAfj3bB/8e9IXn4z44SPig1k+eLXbC49Ua3BrgT1OZ9rg0jRbnKTA + OkrBu5d8aE2hL/M+RRkJoYnELpOkLo3nmBnvqKz8klKSeRT2WQl2SCXZy2Bb53HslFLU13JMtVKst9dT + MDXpFAO4tcYRjRUUZ8W2sLCPBDXs/yaLA/+mQleTI2GP7mYH9LSolFW/fS2O6FegJii2iIFW5vh2HSZ7 + XTF/yA1LJ9yxco4Ra+f7YM0cPywfC8BiuYGj0V+5aFoeJyt/7ZDj54hMbxVSKHpSKIDygmR1sDOqknl+ + ZiP6Kyj6LB7oLdOhj+N0vN6I+W3+WNodhmW9YVjUFoS5Tb6YTZ4xu84LC1sCsbQjGEva+X3tPljYSjEn + aCYPafHFQr5/tNKIpkw1zCT9IuyixACmqI4QsSIGhaw6lT1wox0RHkNyHifGKEVXnFqBmBFyjIgRA5Ti + PsxWWSUbHCZmsKNiAvtSXPhSVAWS3IdSSIVRKIWJiIrQITxSh7BId4oON6VkqqeXHTwo8pRVwIwJgfws + qwFsq5Rpjk7k9wooSOMp5lKyXZF1wQBmfK0IRJElCAVl/sqq4JwC8nDZ+1NAHpxNLiomcGauG6FHRo47 + 0vgZsi9ofDLjYRwFh4C/UQxgWR0osK4Elt9IkSmGeLg928VaHlouagSxrWZM4AiKL0EURVdcHMVakivS + 09yQmqJBUpKskLjYlHBRLprKHkaJcXJx1BWx/J+oaGflM8TwlX15FMN35gIaRapA9u1RxBtfU8xfxmwx + gH3ksVxck36giAyhoAxhG8qeymICxyfY8zykxJvs8eVEgeZEAeWCogIXlJU6wVLhiDLy3epqOzSTa3d2 + uqCnV4uhWQaMjvkoK1v7+gNRVeVKnuqItCw7tqMauYWubHd3FJW5orDQmeLJXjGAixnrKrJsUWtyQEuJ + Bl2MFQMcuyNykUXQEMS8GoQBap7uSj90VQegvSYATZX+aKwNRlNDKPNiJDraZL9f5sh65s66EGVffAU1 + oYoBXFsdhobaCLQ2xaKnMwUTo4XKyt+5U+WYGi/B6Kw8DA1YDeDOaQO4vzsGwwNxGBtO4vvTMD6SipHB + ZPT3xCirf/u7IigAE7BwbiaWzM/BwjmZmD2eiKmxBCyYk6YYwLOn4jAxEaWs/h2bCMfIZBiGJ6b3/502 + gJUVvCOB6B7mbyRk9a6s+m0b8JyGAe3ki4IOPu4cJGZ5oHPYEz1jXugZ9ZmGL3qZg8QAbhswoqHHA1Vt + brA0U382eKCUuqOgwsB5YIS53AM5Re5IpyCOTeO4ZJ6JZp6JiuORkDLDsdEOSOI4SwzjmAzlfA7hfA51 + QniYGv6MSZ6cg2IA62QVMPO0J8eY3GDgz2Mg57Tc3R4ebM//USE1VlaEuSE3yQ2mRI6DRD3K4vUo5etl + UTpUUANXxulRneiBWqIiWoOScCcUM8YUBTMPcsyWMH6URtgphrCFc62Sc05QQ61ZF++iHOVvJRz/BTy3 + YsaWWs6h9kwjWjI8UcPvLo3XoiCOgp5xNTPeGemyyjNJi2Qe4xOclVW/ivmboCF0iI3XIZrnGBbhwrnk + BD//mX3kxOhVKceL4S0gn1LilKxMuHjliVyI9LaHN+O4P/83MMAJoeRkwssighlLQqx36V8A57aYmJEh + tlbzlwhh+4byKGUKZS/gxGQXJKcyPvH8oxhrlfjL3xEreD6nAAD/9ElEQVSVyBhDxKUyrmS4KrHMlO+J + Qsa2wmxn8gkHlDBvl5InXDCAGQNqiHo+7iK3kBWVs0vIhev02Njmhw3tfljV4IVl1NCLZRVwBbmdxYhl + lb5YzPk4v8IXo4XMQflu6DK7KSWB6zj3LRn2qMh0QHWWI2ozZb9YFzTLja5mLdqoV+UG+Y5ijnE+lhXB + PURXhRc6y7zRXu6L1jJf1BZ4oSxbbiDQIIt5JZHjIJ59HSdHjoEE5iExIeQCs5SPE0gZbVnlm8hYLfF0 + xvS9gCjrUYm1UgqaSJbV7mIAJ8keZzrGZS3SyBcy0zhmsnUoMOtQXKxDdZ0RrR3+GBoNx8TcaEzOj8Ds + RVFYsDwWi1bGYemqRCxZlXABS1fGE9bjcj5fszpNMYK3bzdj985i7NtTgUP7qnDiaANOn2jD9Zf14uar + h3DXDWO4/8wkHrxpDh69bT6evnspXrh3JV68Zyn+eP04bj3aidPbLNgxNxkbRqOxdigMawbDsGkkGjsm + 47FrKkVZFXz5xmpcva0Bx1dbsG0yEwtaQjEoK7BL3BT0l+n53FqWW24aG2sIwKw6XwxUk1dMm7+9ZVKZ + RIdG9mkdeYGs+hXUkpvWZjiigeNKjP3uEuEhPugtZWwq8VJWAXcVeaKTY6PTzL42uaOVbSmmr+wFLPv+ + Ko+Tp/cEJpdtSHJEfQI/l7GoinmpMVGFNr6nI11u6iCXyiKnylJhKNuBsMcg84zszyv7VI8SE+Sl8zme + lpMXrasNxNqqQCwr9cYCntuoGChZzvwslbLqdxbPbRY1x2CBB4bIA4by9HyPOybzZeWvHnOpyRcRi006 + LGW8XFXojlUFrljN3yqlWdeZ3LA6l/Mki3oyQ4U55KKTmfb8fyfMYXvN5niZpKafzOPzbBUWZNthKTX/ + 2gI7bC1zxHaLCptKHbC22AGrStRYUarFAv7fALl+O+dmV7w9pvI418qDsa4mHJsaI7CR/bdZVgB3BXFu + +mJdkxEraw2YX6bFhNkRY8qqfQe2gz3G2UazsxwwlSFHNebkOLNt3DGv3IApzt8x9m1PqSeayDer8wwo + zRbz1RM5yZ5ISTQgnnE6gcfEZA8kJRqRFM+jvCYremM0CoSnJEYLpBQj5yhjfAbjZzJ1p+ztFx/J/BEh + F8vJ7xhHpfxzSLCGvMMV0dEeiIoyICpSz/noTr7jhhR+Rk6iK8yM2UWp7ihO16NIVhVluCNPDOpUHbIZ + 99ITnRjDnZGR6sw56kIuNW0AJ6v/A2mMk/K+1Dh7npMt0uJUSKcWyGDbppM/plAfpHCciQEsZaCzk+yo + Ech1crSw5LjCki0VmJxRyXFv4euWVFvFBK5gDK3isTnDBr0mWwwX2WN2mVpZhbtGDGBq1M3tesZOI5Y0 + uGO8UkNe74Aq8p5i6tVC/m8+jzmMx9mMkTkC9lM2Py8rnedBTZJLmPjYwjFTX0SeJMi3QTs1bgfRR4zw + u6eoSefxu5VtlahZV9TrsKpRi1VNzljdTFCHrGlVY227EzZQ827o1mJDjw6bqEW2D3oqq35nDODdYgB3 + c8w3OmFutRPHiAa9RVItQMe4bURdnhf7hbw1knGXuXmm3L6Yv0qZ/SgxgW2V0tDWm3NsEUu+KuMjSSrf + RDor3EBZCTfNVYOnIZx1pqqQ8NNQIoL9IluUJIvpqLSPPfLYVqZMFcwc04Xsl6JsJ45dZ1Qwv1QxvlST + u0sZ5Boeyzk+ihPFLBHzhO1NTZNH3lsUZ4cyxpoajpu6TA3qs3Ro4vtbs7Vo5fN2QgzgFvLidvKj3mTG + Gn7veJ4KcwsdsajcAUsq7bG80haryYk3N6iwu9kFRzuokTsNuLrXC9f2euPSFlccZjteUqLC9nw7bKRm + XUWNL1U5F3LsbcmVLag8cXlzAC5t8MeBMgMuKfLAbsalXcS2EiM2MJ6tZPxZkKvFqMRBap4Gcvhy4UfM + d7KiuZoaopnapdnsjfoC9pOZvIf9VWPyQpXZB2V8XETkM8alZ8oNb+R+0ewDaWt+VgT70Lp1jPQJ86gY + t/x7VCz7kJCV2LGxshpbzHh7ZdVvTpbLNLQcw7LXthMyksn9GbNTeY7JnGuJHBeyP38kx4nkZun7yBB+ + VxD1I6HoFSKQr4WQX0aL5kkRA9ibuiwQeYXByDGHID0nEIkXDGANPH3FAHaAOzWxAjGBCT11qgJyLg8p + BU1OJvDyk8dW4/fiVcCKCUxdKwgkf5Xy13EcG6kp1C+cfwW59qguI5es98Ag9fF4awA1ti+GqaflRut2 + 5tA65pzSdHJPuZbANpK9gPOJAsaTIuY0M+OMKdpWGXe5fD03imOYnNVEPmoi7yhJIIelzqzjOK3nWG8m + ZA/gMeazxQWctyYnbM9zxh7m36MmLa4m57q2OQyXN4XgGLGzLhCrmaunyKV68nSoYgwrl+tCjH+tHNed + RHe6C3oZJ7uZa7uTHdCVxHHNOdFFDMo1o3Q7rDKpsbvSDfurZasvJ+zhGN9vUWN/lQZ7q7TYWanFemq1 + pWYNJqgPW/k7TGzPNLZ/tJ7akvBl28sKbA37wpHPVYSsAnb1tIO70d5q+PK1/38G8AwMBjvo9baK+Xux + AezF7xGj2YuQ75TVv7LiVszZ6DAn5Sg3VoZSo4QQwexnKQN9wQDm787iOM1LZQxJ16AwQ8c8o0M+80UK + uWUc51Y0x4PsGSwGsGLWBsjRDuFBDooRHBnM7wsXU9d6c6ys8JUyz2LuhvEYHuKo3PgUF62zIoa6grlS + 3isloUOoneRzLzaA82McUSzmb4JaGRPVKbInsBolfC0/0rr6N4vvzWJszSX3LUjQwiTVNiLJjam9xADO + DKO+CdcgPpjnGGSPCM4t636/1Bbh1ArMx1FiAMvN6MzlsZxzMwbwBSg3ZdgpN9zLvuwR/G4pAZ2eRk2R + 7qYglbk4XYxduaFKbsgiT5cbs3LFRFfgSuiZr12RxfdmphBK+Wc9czYhZaBT5WYzuaHMBbIiOYhtHMC5 + OIOZLXJC2e4hAXYI82OMUsB+4HtjqJUSo5nrJadzbGdw3mYyR+dk2vF8HFDAeVNIPVJErlaYx/NhflD2 + AOb4TyDHjCMnEMRzjsrK36R4B6UCVjpjv/AKMX/FCJbXxByO5/wtNhkxNWrGJTsGYXPujkZ8dWMd/nZl + NV47WY17d5hxbGE8VnV6Y7BUj9oUI4WWHwojvJEf4YX8WC+YE7wpho0oiXdDJwXxvCxvbCwPwb6GGJxs + jcXlLZE43RyCG1pDcXtHJO7qjMQdbeG4pTkY19f64qpKH5wicTtRzARTGoDLLKG4oioUV9aG4PaeeDw6 + OxePzMnFLb2xOFxmxI4cHfaQ1O41e2A/k8pB/t9BHqUU8UGSYCmfeJSE+Xi1H041hOCmwVQ8sqQET62v + wdObG/D4xhr8cV0V7l9ZilsW5eGK0UTs6wzD5uYgLCSRHCrQo0WSbqYbgx5JmAwYBgA/Jw4eNSeRjoOb + Qbg4QsNBrUdjhgfa8z3QYXanSHBR9saYqHfH/DYvLO4NwIrBYCwbCsaSAX5+jy8m2tww3OiCkWYNRlu0 + mOrSY0G/N+YN+WCkj8KxS4cWkpvmFkd0NzthpM4Jsxm8FpltsJ7k6HCNDte3GHFXkycebzbi1WZv/Jn4 + a70X/l7pjg9LNXinwBFvmu3xutkWrxXb4eVSO7xSocJrtS54o8kVb7a64w1+/6vNarzO73mn3RmvNjri + WYs9Him2wb0FNri9wBY3FDrg+lJnXM+AeTXJ2GkSwtO1fMzfd4bffXt7IO7uDMU9xO09Ibi01QebKrSY + n6/CYIYaDUwG5STahclByEmNoAiNQ0pGgmIAm8xxKCoIRWlRAMqLvFFJciAGcEepBwZIEkY50IXwL6Eo + Ugxg/v4r6+3x8KAz3llowFebAnB2RxDO7g7Gzweicf54Cs4dScb3e2Pxz40heG+ZN15f7IU/LfDGSytC + 8d6uDHx9bS1+u78LeKIPeLEXeKkdeL4GeKoAvz2QhLM3B+HHa7zx4ykDzh4TA9gH568IxrkbInDujhh8 + c1swPrpWj79drcM/z3jiyzsC8OMDEcCTKcBzmVYT+AVZDZwM/CmVyMKvz+Thu4fN+PedJfjzVaV4+oAJ + d66Nx6lxtlWtGotJglfwt4kBfLLHHrfMscNTG9R454AL/nLYAf84Yot/HVXhq6NqfK0cxfxVKWaw7AH8 + GY8fHbTBe/tt8OFJO3x2ix4//jEI51+Ixa8vxeOnVwSxOPdqHH59MRo/PRqE7+7yxldnPPDV1R74+nJP + fH3CiC8O++Nfl8Tg450JeHdzGF5e54uXt/jh1d2BePNAKP58KBZv8e8vbYzAE8sC8NAcX9w76omburQ4 + WWWD3YW22FKsx4piX0yyL3uLXFGVYadcoKkmSRzIZeKn4Lt1oQkv7GvFX64ewF+v68SH1zfi1VP5eGJv + JF49noi/XpOLz24qwTc3W/DNtaX457Fcnk80Xl7hg/e2BOGzYzE4ewPb97404HG2+5OxOP90JH5+Kgw/ + PhKIsw8FKAbwD7ezH2824rtr3fDVKSd8cdwBnx6wxSf77fCP/Y74dL8W/z5oxIc73fDKSgc8PsUx32GD + M002uLPLBo9OOOK5he4Knl3ohheWGPDick88v8QTTy/wxJNz9Xhitg5/nLTHU4sd8NZ2PT67KhI/3pmM + 8w9lA0/LWMjBeY6B317NxG+vc1y8ngW8wb+9la8YwOdfzcVv/Psvz6fi+yeS8M0fBan49pFMfPtQFv59 + Tzr+fiYR712RiLc4vl87nIKXj2Tg8T2puG1DFA7N8cTqbhUmec5jrXaYO6jF3BEd5o9QfA+7YOWkK7Zx + DhxZH4Jrdyfh0aur8MKZNrx8az/evGMUf7pxCPccqMdlq0y4ZG46Vs+Kw3hbGDoYO+vLfZSLz3W1Uais + jUZplezdG4aCshAUEb+bv37/YQAXlAUqJnBJJf+3MRb1Uv65IRpVdRGor5eL1xHo7YzASG84ZvcFYqrb + gPF2NUabbTHeYoPZHRSAPS6Y12fAZI8P+pu90FKtR3mhm2ImhIdpFdEdEkThHaohUXFBsL+jUgY6PIAE + hq9HB7kgRlYAE7H+zojzVyPRS4U0TycU+JCI+Nujl8RoJUnpFa2e+MNkIJ5eHIpnlkXg7ilfXN6jxV6K + zO3tWmzu8MDqDk8sbdFjSb0rlhLLanUUpq5Y2+LFv/thV38wLukNwToSziVZtljKpL01zx0HGNu2prhj + WZAd1pEgXZfphOeb/fDuYAjeGvTDG4z7L7Z54FGLFg+YnXBXth3uIFG/k7g/2wZPFNjhVQqu9ztc8Qnn + 2rcrQ3F2K+f1wUycO1mIT/Zk4oXl4bhz2BNXtmtwoMYel1Q5Ym+1M0muM/ZVu+ASxu29NW48umNHpR5b + y9ywgd+1Nt8e600Ue4w92xiDdufZ4HSlA+7rMuDZ8SC8uSgC/9iYpBi+/9gaj79v4zjcGI+XVkfhsUXB + uGeuP26b44PrJz1w+ZAOB7udsbXFCQtKbTFEMd9GcVhBEVFE4SD7yeSRmBelqSgu1ChNVSn7/srq36JE + ERbWi7jVRC3f20BC287Hw6k2WFbkjB21njjW7oUr+9xw85gOD3BOPrnagDf3BuCjK8Lxw10pOP+kiXOr + Gni/FfhLD4+DfD7M+DCI76+twztrUnAPc9/1Rfa4ttgZV1vccVWdHw5VUJRS9Mzluczhua7OssHeEify + EB1uqHLFbcT9tXo8UuOhbIlwTyFzJPPoq7O88fGaCHy5m/HoeDx+u5rncIYx6WbiTAZwHef6Zek4dyAR + 32+NwrerwvDNwiB8PumPf4wwX4/4cBz44qlGHe5mjr6W/X15mh2OU4wcyTNgP+fU+kI/TGbpUR9Lwkzh + mRFho1zkyVAMYDeYlVUOTsrFH+XOf7aZGMBlBRRflS7oaHBFdxMFU7OrsgdwS7UjGsocUMNYXWFi/xD/ + YQA3qtDZaI+uJgf+jwp9zbIa2EE5zuwN3Nfsgv4WDYY4NyZ6GGvEAB63GsDrFvhi/YJArJkdhJVjkZhH + XjVQ4YcakmYzBUSmr8xBO8S7USQQ2f4cByTvdSTWvaW+GKsPIGTfPh1Ga1wxj3xiRV8Q1g1HEuFY1ROE + Je2+WNjoiQUNHljE2LC0zRdLOIcXtxqwqMVdwcImPWHkYz+MWQxoyaAQYdulUkjHU9BFUehFUazEhtpD + SggpBigFQUQ8HxOyEk2M34sRKWWgp0slWy/sUFREqBUD2IfCwofzO4BiKVhWAVO0CULDNAiN0CI4XIdA + xiwfH0d4Gu0U8aesAqaIk7LGMwZwJAl7ZDyFDhFFQReXokYSSftMCWgxfQvLA/7vBjDfpxjAjD0zBvCM + CZyeLXuDMjbKZ/+XATxznCkHLQiPcuRzirtIxla2k5TElaP8bil3JqWaIyMZW2V1TIpVSEmp0eQkMSpU + kDJ60XxvjNwJT1Ep5fKkRFNMlIaCjXFczF9+xsxFE6VsHr9DBNqF0nmyqmL6Ypp8/4wJrBjAFLOyUtlq + AhNykY1HxQBm2yWlOCoraeQu2ZwsDUx5FMaFGpSWOKO8XIWSEhtYKmxQX2uPVnLgji4XDAzpMTLqjVmj + Qejq9kV5mYZclSIqg3Mry5FtrWOOo/gq1VkNYMbQ4hw7lHLuWnLtUGdWobVUi+4qPfrqjJjVFGBFYyCG + GoMwVB+M/toA9NXz84m22kA01wWjqV72AQ5De3MkmuvDFFO4QcD8K2WgraWgmU9rxBiORHtLPPq60zA2 + bMbkWPEFXGwAd0kJ6M4oDPbGYXQ4EbMn0jF3KhuzJ7MwPpyGwT7ZRzgcA92RigG8YHYGFs3LUozguZMp + mDeVgkVzMy4YwOPjkRibEIgBHK4YwMOy9+9owPTqX1nB+7sB3DVL9gD2JozToEYadFfQOWSwYhYxbED3 + qJHwtoJxsXfYh5/hh7ZBI5p6PVHT7j5tAHuiuNoT5nIDTNSCecUeyKAYTqImjEpyQEiMDcIEHAPKKn65 + 8Bduj7hQzqVgjskgR0QGqhEexDnKeCTz1YvCW0pAiwHsxpjgwXnsxTHmx6MYwEpJ4+lSfwmMVUkxzkgj + MshFcqJdkB/p8v8j7K3j7Cqv7vFxuTP3zpVxlzvud9zuuLu7ayaTmWTi7kIICSEJRCCBECQQCO6upVBa + KC1QoVBoS1sKReNZv7XPnaSU932/vz/251y/5zyy91pnPXs/yOUYNxudUBDuiqJoN3IeN5THuNG3qZAf + yvdC7ZDLMWsOtkYhz6eY86vEaEuzU47FtHLOvaoYZ1THuqCCc7Ek3A75HONmfq+Uc6U6zhWVsWoUhjsi + iz4nLdQWJvqiRCPPi98VkTCaPixKTHwWuZeUIBSL5vlExch+5PRFIY6Q8s4i6orIqwi+PFpMHrNN+NhD + Sg+6Wyv+Stlvzkc+K5/hcy97xSzZv84KDjOGuSI8lPhLbnxyvivG55EimMj+XDzf8BD2ifi7ORMBODrK + ThGAk01qzlmeb5wlC1j8sIi/shAmmn4lPlWt+LCcbAPM9G3mdGcUmmwVflHCuFdG3CAloKvoS6tpkgXc + TvwxwHiuCMB1Omxk7FjPeLGS42hplR6LSsm9S/SYKTJgQYEHJvI9MJrvjv5cAzpztGjl2KrPdkVFuiNK + U+xQmmqPyjRHVNPq+f91Gc6oyXREHfFDY67sRUvjsZ08SAThtiJ3NBd6oEm4baEnKrM5flPdkCmCD68x + IdxWsbgIHvk8if0vN4AiOW6lnUQwFx8q4q9UVfixABwtYrEYx0MMY1gcfXVcJL8/99kkqb6QSL+cRL8s + N7fYvhmpGvpBjst8Lcp47TX1XooA3DsUhKF5IRhbEIyJ2VDMLI/E7OooLF4djUVrLDbLx7OrojC7MhKL + aLMrIrBkeQxWrknA+k2p2LQpA5s3Z2Hr1hzs3JmP63eX4aYbanD0pkbcfnMb7j7WiVO39uIh8r4n7x7D + 8/fOx3P3jOPhW7pw4rpq3Lg2BxvnRWLtcAjWDgZh3VAoto9HYc+iZOxfmoGDK/JwfHMV7thWiyOrS3HN + ZBqxQAhGy+lnS3QYKtMr+wSPVnljrIZxv45GvzvMYz9f663wUoT5zkItmrPZd+n2NCc0sA8bMuW509Xn + rXnES2yjTvZdF8fFFfFX9gJuM0tJVpoIwPQ79cmOigBcGWt9NftXFj1KSfLaBAfUzgnAVfRLkhHcypgu + WUzdacRR/L8+xhWLACwZwDYYpIkILDaW4YhpnocIwOuriasqA7CU40jE3KEMYrFUR7Qn26Eni1iMOGu8 + 1A+jRT4YLWQ7EBeM5ZJDEQ9MScad2Q2LaUtE/C2UzCe9ko23mWN/W7EHthUYsDGX7/H6F6fYY4qcfSLJ + CuNpNpjP9ppi7Jwyk1/mkVvmOGNJjj1WEmduKLTHjjInXFPphK1ljthU6oT15DNSsnlxsRYD/K1Wzs32 + WFsMcw7P5HMO1kXgms547OiMwhb24cZmP6wW8beWOK5Sq2Tsj+Y4YpixdzjTDqOZthjheYyn0IiRJ4nn + 5vM8pyRJoFCDiRIDRojjexgTmtlftTnuKJUsW5MHMhP1SIrV0jeqESsL0OL1luzfGD1Ni9hozVUBWPaH + VyzCCUn07bLYx0SfG8+5JZmflmw/4qQQJ2ITJ6Xygez/KwKwbPMREWFQBOAooxuijfwdxoXUKCfkcC7m + EyMViQBME+yemaRGegL/g5ZCX2cSn5DIzydbhGARgJM4fn5syQmMPfxcUrRkIxJD00/IvqSJEdaK8JtI + n5cUaa0sEk0lnkyPt+V/kXNluKAsS4MKEYIzVKjg2Kng2Kmg/ywnx6qk1aZYoYU4pjfXluPHHvNLHekj + LWWYN7ZosamdY6bdE0vqiZHKVWghd5QKbz8WgDPI6dLYP2LpypHnwddlD+AMmpm/X5Fnizr+flOBHZrI + P1rJO9tpXZlyj8gKoyICFzlghv8/W+GC5bVq+mtagzNWNTphFbnIauK1VS08tpHHtjtjXYdKEYK3/igD + +IapYEUA3tCtwzLylYV1rhivcFUE4Bb66BYpKWz2QUmGAen0mbGhNlcFYMGvsogxXo6R9L8RdmxvYlnG + r1jGsqRoYl7JHJc9gEUkEZxKU8RfERvEFKxsQ/xPDMF+EQtjH0UzViUk2SCF80L2ms1MtUUWjzlpDsij + LzCzb/JpReynEuLWknQ1ytLUKKUVcVyY4/kd/k46sW46OaGIcPlxks3thCr6lNp0V8XqaFJ9qZGvNdGa + +X4rv9sZT37OMaH4llwnLGFsXFnpjNU1jpyX9thIDrijyRG7W1Q40O6Gmzt0ONHribv6vHCowQU3VNgr + AvCOPBtsZp+t5xhYyRi8MsEa1xa44OYmXxxvC8aRel9cS1+zNdMFmxm3t2RpsZk+cx19zMocV8xyLM4n + txk1qdARbYcaXk8J410B8XwxsVt1smRAa1FF7lLJY6lYmg5F6Xq2EecQeU0G2yaRbSJ8Rtm+h+0RTG5m + 2UaG/cI+DRKsIbyAfShbTkREycJA6zkB2FrZA1gyf7Mz1DRX5Sh8Qcqrpstc5JxMIadJjnNEIrFVNH9f + KpqEECOGBkplE1tFJBO7Uv7bn3gxKISYJ0oWtdH/pHkgLdtPKQOdmuVPPuGD2ERPBIVrLHsAezsqguKP + BWClTLDHnBFzGQSTzZkiAPsIfqOJ+CtVWmhSBlox4ljJdJSy49G83kT2jQjA2eyvsgJ7NJNb99HfjrX4 + YqJRBGB39JGztBa5oibLAUX8bJ4IwPQjWRxrIvbm8nEux5qyd+sV42t5MfYoSCQuJc4oTNBwHGpQm8wx + SOxWRx/UyDjYRb8wmeuM5YUqrCdv2pGrwu4sJ9zIeXi80hd3NIXgaGMQbqLtID9aTkw2yvfaxEfF85w5 + Z2rpD1szNejkWOrhuJES0O2MtXKfSKq9tPDcOng+/Xw+xTixMs8J11bqcX2NFteV83GJLXYW2eCaEjts + J//bVOyAFfR1CyTuJpC7cZxksy1NbPdI9kGQaD58Lm2vYh/Ya61gR3MUwZeY2NJflozeKyWgrwjAV0pB + /7QktAjAep0sALdg6/9LAA5g/0oJZhF/xSQTWEoIi/h71XytLCWged6SAZymCMBOyEsh1011RZ4s+GNc + ieP7ivhLHhHJx1ICWoTaIH5fflMRJAPIcSQzVWIb/89IDC8Wyngn4q6IwSIMR0e4KsKvYoynchROLzEx + OJC/Nfc/8Zx3UgI6l3i1kPhHhN/aFLWS2V+TomHMcUUhzy2H2DeV812yyDPId3LIqdKJZRPoO2N4jlIC + Os3I+Gjk//I8ZL5Jyf2wEDvFwkPJ5xhjwyULOEqFWPKcmP9DAFbuI9C/hNCHyzYzslDWgotl8brGskhS + YnGSijjZ7X8IwJmSGWzSKgKwmAjACrYmxr5iyYlaRQCO4bmIMC0CcACv44opffgjuyoAcy6H+fG8GEtk + oZkIwGnEiRkSH9LslK0U/lsA1qIgx03B8ln08ykmwQe2SKJ/T5yzJKX6mSwao/+i7xdMIWWgRQiW92M4 + V6QEdLHZE1Pj+dh9zRCsztxdiS9uK8FHh4rw9r5CPLQxFfsXhGF1uwET5e6ckH6ojw9FZXQgSiL9UBzr + j+JEf4IAb5TS0bXFaTA/xR1riwKwq9aIw62RONoShuPNQTjZEoSH2kPwWGcYHu8IxyN8fF+DH+4iOL+N + 4O0IydLhEm8crQjA7XUhuIvfe2QgDs9PpuKZSRNO90TgaI0P9hO83iQZw2XeOFLph5vn7DCf7y/QY3e2 + C67JcMBOOphrCIwPVvvh3sEEPLHIjOdWl+PZdRV4fkMVnuLxsfXluGdxNg6OJGBrexhmq30xTBDZSgJY + l2VAoXQsB1qonk7Wnp04JwCnkyQXhalRFaclAaDjzOS1szM6CFq7C50wWqnG/HoDFpJwLu72x2wPrdcf + M10+GGvVYbiRga/FFfM6tJjpI6ga9cPiiQDMG/XCwIAOnX2u6OhwQn+rEyabnLGs2hEbyqWUpxPbUovH + ur3xUpc33u32xSf87X90+uGfzZ74vMoNfylV4Y8FDvjAbIvf5P9HAP5FmQPeIQh6r1mHD7o98bted/yu + X4+PhnT4bNQdH/Vp8WsG/dcqbfF0qQ0eLLbF7fk2uIW/dXORlAzl/xfa4UCFI25r1OK+Dm881ReK5/rC + 8HxvKJ4dCMZ9Xb64sc4N6wukTI8jwYYzqqPdUBzng5yEEA7CaCSniAAchzxzDAoLQlFSGISyQl9UFnmi + XlbnkpBI6QcRgKcUAdgaq7Ossd1shdvqba4KwF9u8sOZawJx9rpgnN8fg4sHE3FeEYBjFAH4Dyt88d4S + b7yxwB2vL/LDOxti8dcjRfj+dAMuP9sOvNYGvNkE/KwceDkTl5+KxfnTATh3lzfOHfPAuUOeuHTIDzga + ikt3R+HSAzE481A4vrjHG3+/xwNfPeCDHx7jfz8dDrwYj8svJeLCS0k493wcvnvaiG+eCcO3T0fhy8fj + 8Ol9SfjgthS8tCseD6wJx7EF3ri2ywUrymwwzaC8jEB4R409jvTY4f4F1nh1gz0+2OuEP9xgg49vsMJn + e6Xksx2+vskB3xyyx3cHnSDloL85qMK/DjjwfSv8cY8VPjpojX/e64rvnvLCxZ+F4fLb0bjwq2ic/1UU + Lr4TxeeRuPRqML5/zBtf3+eOb+50x7e30g574Mv93vhidzA+32XEX3aH4JM9QfjkpkB8dnMQ/no8FF+c + iMXnR5Lw8fXx+O2WSCWr+tVpPzwxZMBdzY64scIJO0o9sLrEH1OlJN3FUrLGhgGABEMRgBn4m4x4YKEZ + v9jTgk9uH8BfTvbgz3c349eHzHhxuxEvbw/GL/fG4vcH0/Dp4Wz87WAWPtqZgF+vDsU7K33x0dZgfHkw + GmdPJlgygOcEYLwagQuvGvHDc0E480wgr88X30v/nPLCt3fo8NXNKvzjRjt8fB3baacV/rDTGh/tcsCf + rnXFh1td8IsVdnh5gQ0e6rXCPc0We6jHGo8N2tHs8fiAPZ4accATYyo8MuSMU10OONlqj/s6HfBAH8fk + jDXe2a7B324LxjccJxefScHll1Nw8fVknP9ZAs69xbH5diIu/4rn/E4q8OsspQQ03s22PH4vGxd/mYUz + P8/A9z/PxPdv5OL718346qU8/P2JLPzldC7+dGcePjyag9/cnIvXb8jEg5ticf2kB5Z3OmK0wQoDzbaY + 6FdjYkiNySEVpgYdsXqK4Ge1P27dFYvHjprx/jP9+OSVKXz22mL84+cr8elLy/HWfaN45EAzbllfiK3T + Jizsj0R/UwCaq3zQXB+CurowlFWFoqAsELnFAUqZZyn5nCuW74scEvrcAl+LFfG1OZNS0PK96rpwVNaG + o7omDPV1oWhrDEZvezCGO6XsswHzSODmd9hiusMKs11WWNJjRZ9JAtirwVS3BwZbPdBCEFdWpGXA1THA + Gxj0tTCGuxHUuyHMqCYBc0KwvwAEAoIgEgJaNIl5dCBJeJArEoJcYPJTIdOPhCpYg4YwJwzFkUSaVSQ4 + PnhkMhjPLQzBczMhuHeIcYiEcm+7Ctd0qrG1y0CSacCSRg0WVjszRjhjcaUKS6tJjhsMJMfe2NHlj50d + flhb6orFaZzPJLtbstW4qTQIuzK8sD7cEdvCbHEixQGv1Xnh/d4g/KaX/on2Vqsnni93w5N5Lng40w4P + pkr2rzWey7PDL0i0P2zU4dNOd/yDseGHFWE4uzmWPi8F3+/LwcdbTXiV5316wJ3ES4Vd9Cc7Sx1wLb8n + tou2s9wVOyvdsINgeFOZDuvYjitJ/JZm07fSry4j+V5J4r2O5PzaPCvcWuOMRxiTXl0QjN+sjcP7G2Px + 203R9J/ReGFxEB6c8sbtnPMHe9TY2+XM63bAFs6FtQ12WMTYMURf1p5uuaFQSDCeSwIg4m8WiWd+EuOm + yRElbIfiuSzgIpIT2YNKxOIr2b9SFqo3iUA+0xprS1TY0+iOYz1euHdYi8fna/DyMh3eXKvDezsM+ONN + nvjyrmCceSwG+Llk1lcDH9K3f9AH/HIAeK4H3x6rxvvL4vFwjQvuInG9i6T3brbH3Q3+OFTpja1s+1n6 + qMUksltyGePKXXBbtQ6nG9zxaJ0eT9Xq8UyVFo+SPD1otsaTVY74eb8Bn22MwNf76ffvTAMe5lx+OofG + +fwUj4/xXE5l4eKtqThzYyLO7ozBefrMb2eC8LcJL3zM/vzDsA9+0abFkyQnJxkHbiPgO5TihH3pbthj + 9iFZ9sYEAXOtrLIleE0mWE4gmU2OErCvQS4BaWaiCqZoG2UfGJO0syIAk3zJKv0GN3Q1u6GT1t6gVspB + 15bYoyKfn/lfBOC2ejt+zg4djfboovVIRnADj02ONOc5swjAA62uGOtkjKbPmR2RLGA9Vi/wxNppH6zl + 2Fk9GYmFPUYMVQWgjsQ9n4DY5GmDBBKoKFeLpZJcFRC8N6QZ0F/qhwXEiDOt3pjkmJ9pNmBZtx/WDQZh + 81gYNo2EYH1fAFZ2emMZ31tCDLKY17dYOap5dMVsoxx5Pg0amg6L6t0xVuqGNoLoCrZRLolKWqATYkl6 + okhW4sIcECvlemKdESnCg5QRU/ajJNHnc8Vi5cj3ox1gJKGRLFmLkZSRfCgZwPwtT5IxX1nxSTIVECRm + T8Ih4qkz/INV8PF3vCoAK+Se5NKTRE5KzQaTwBlJYsOiSQaiSP5oYTE2SvlTyQJOztQiXVa8F9LXFvki + jzFWHstraTkGpGbrLZZFH5nlhlQSZbE0Pk/PFkFYr1hSqobXJsKv/VUBWCwyhj5z7hgeJWKwvM7XSGT+ + NwE4NJQkjMdwER9iVCRPFoHhigAcK2XYOE7DgkXIILEkgTUGW26chs1lX8o+WbIqN4DEUUxW50rWpR+J + kohvYvJ+MP9LWb3L35K2kra+KgCHWiFQbvoYLWbJsrBW9g1NIOmRfS+F9Miq/pwcEYBdUVTkjGLOgeJi + K1QoArAdmjnWO4jH+gf1GJaSxIM+aGpxh5nzyJRqjQTOqZR0e2TQT1wRgAvynVGYZ4+SHHuUZduiMscO + dfmOaC5Ro7PKgO5aD/TX+6Kv3kc59osQUeePvloRgAPQQWurDUQzrbGOVh+sxNv66gDUks9Iaej6yp8K + wHxcZ0Rrc4wiAA8PZmNsOJdmxvhIPkbmBOCeriR0dUajrzuan4nHxHgSpqfSsWg6BzNTWZgcT8PwQDwG + uiMw2BOJ8aFYZe/f6fkpmFmQys+k8LNpmJ1Jw8IFFgF4bDxCEYBHJ6QEdBiGJkIwOB6M/lHJ/g1A74g/ + uscC0KWUgfZX9gDuHPHhYxF1PfnYHV3DOpp27kieM6JDh3LUo5McRIRgyQKWstBdI75oG/JCc78n6ogT + qloMKKv3RGGVJfM3u8gDmWaDsvd1LPs4LM4eAZxHARwDshhAyoeHSKYGx05EgB0ipKSaQrbtEeTHzwbY + wz/Q/r8EYA3Hnp7j7r8FYCljLJketoqIGRlK8syxH8fHiZwPJr6eyvfTaFkc13kRriiM1igVsfLDXZAb + 6kCzR06IDcz8TiHnU1GEE4qMjH/EBAWh1jDzPAv4XinJfwXnU1WcK8p5LOHzYiPHV6QK5dEuKI5QIYfz + ySSr43mucTzHGF5fJL8bzt8y0i8ZIzj3ImV+i19zncsA/okAzLb4sQB8xUT0FXP3kBtUbAsDH3vawlOE + YbabmDz2nBOAgwKciL1UMCqlT+lbZA8x/kcMj1ct0gXRES5QSrWJiBImpRnpG+SmLPspOsoW8Yn0cSZX + JNFiE/lZ+qbwGF4H+zQqwSIAx4kAnK5FVpYeefRr5jQVCkxsQ8ZsKWFaztgnIls1rY6xUCqIdBBXDBJD + THHOL63RYE0z+UmjgY91mK1ww3SxFpP5bhjL1mAwQ4Mext3uDCmdKXxehwZy+upMVxSn2KMomf1D3FKZ + KgKwM2rSabJXY5q9JSs4g1w33YlHxrNcDZrytWgy61Bn1itWzbFamqFHbrIrUmPskaSIvyIuiMjggKQY + R6RIyeZYXiv7LzLMWskEFkEinn2ZwPEQS78cHcn2EOPYsJgT29gZsRwjsfTXUn4uPlaFpHj64yQNUpIt + ArAs0JGbWvl5epRw7lRWcl41EOO3+aKDOLSLc3Vg0hejCwMwtSwMC1eF04xYQMwiNr0qDDNzNr0yHDPL + +XiZURGCl62Oxcq1CVi9Ngmr1yVj3cYUbN6ShR3bzdhzbRH27ynDwb2VuGVfLY4fqMfJw604fUsXTh1p + wYnrq3Foaz72rEjFpvkR2DAehs20bcQPexYm4KaV6TiyJhuHV+bi6Lpi3L6pDDevKsRu+rPV3Ty3Gh9M + 8FomaogbiOcmGwMwvykY85qDMN4klRfog6voU8o80F6iQ3OuC+pFtM9wQEOmC5qyXfnanHif7YLmLHnN + BS18LuWe2yXbd670c3OulI627APcQmvKVKMhlX2eaIfKOMlSshxLo4mvOP6q5OZnnB1qYmVbE1s0Jjqi + NckZHRzP3WlSAtoZfWkO6Cc+6U+z+Y8x5vSnWGOEY2sqT4Pl5Z6KALy6zA9LCwyYJLcYSCVG45hsS7RF + P8fpguogzK/idZOnzePnJoq8MJavx0SeGybNfH9O/F1GW1uox8ZCLTYVGbC12B3XlnhhR4E7sa8b1nAc + LzU5YDrRGpPExPPI4RdkO2NhgRqLinVYQl6/nBxiVYEL1hQ6Y0sZOUClC3ZWkd+TF22vVGNLlQ4bq7yU + zw5wzjSzPVpj7YjpVZggDllTY8S1PcnYzhi1nn20osYDy2qJ6ao9MF3mhol8FwxlO2KAfGgw0x5DGXYY + TrfDaIotRpOtiYntMS/dERNZzhhnTB7ltQwVG9DLa2nNd0c9MVF5hoF8Q4+MOC0Souif6DulRKRkCYn4 + Gxt1RfyVG9kWATh2TgCOjXAmniZnjFEjIZr+jDgvjH5W9jsMkkw/mr9SRl+OjsQnrsQewkX1xDYazltX + SFnNaGKcZM7xTGKrvAQXFKZoUUDLI3bPlCoACc5II8ZMJd5MJW5Koa9LnbtZm0IT0TeRWEYydq4KwPxs + UpRkpdJ3EvvIMZ5+VBaAyv6/sldpMseeSQTgBFvksC+L5gTg8jkBuDKTfou+qppjr4r9W0OrJ+dsJ44Z + yHfARIkzFlSQ55LjrqyTvXfJHdvdsZ5ceWmTO4bJj5rIHSuIi0QsyiffzTXZINPE/+S4vWJpfC4icPqc + FWZbo6qA3KSIc6+A84F8syVnTgAm/+wmbxwgFx3Pt6PPdsAMx9bSGlesIL5f0aDCykYnrGwib2+2w4oW + MXusanXAatqadkds6tVi57AX9kz4Y/dkAHYSS2zsM2B1hxZLeQ3jHJvdHLcteWq0F3mjrTgQ1Xk+yCN+ + TaIPjmIsjjbaKgJwIv1xUixt7phAnxvLWJzAsZESR3wt2eQcO+EhUh5VFjBK5q8dQoiJg2VhowiQ/C0R + gAXfi8nitEjGqTjy3mSOYVOqZJ/aEqPKXsl2yOZ8FyE4V8RgxpZ8+hZzigr5Jol1NI6JXI6DjEgRRqyQ + QctiP+cn2KE02QmV6SrGJRfFqulbZKFSNX+jlpyyIdEBbfRFPfRPIyZ7TDJOLebcWVmqxroaNTaTP21v + ccH2VhWulap+tAPkeLd06nBHn5ciAN9Y64Q9pTa4ttAW23OtsYX9uYXxdVOmLbZm22M/ce+tbUG0YByg + T97I/19Dzr+WPm9Digs/p8aGLDXW0oeuzCFvyyLPy9BiJFmF1mg7pXKHlIEWEbiE/rKUuKCY11zE9/Np + 5iTieOKDTImhfJ7Ea4ri90LDyU34XTER3ZWFpT8SgJXKQMRFFgHY5icCsD3b30kRfrOJAcQy09V8TYUM + tnlqInlEvCy8EAHYQckG/x8C8JxdFYDJZ4I4Lozic4i94k16JKd7KZnAialeiEl0R0SMDv6hrvAihpL9 + fzXEWiL+6tytyQ0tJmWf3cmRPfzs4C5bcghG8xEB2JZHy8I8qciibM/xIwHYj7hQeFSwCH70CXEccybO + 0UzJ2Ge/NZSr0F1HrtPogfFGbwzT93ZXMqYRJ9XQBxSnWCl7AEsGsIi8IvbmRFgjh7+lPKZdFYBjiVFN + GpoWJck6+gQt6vi8nr7qigDcl2KHGbMrVhWpsZHzzyIAO+NG4qTbqvxwR3MobmkMUkpAb630xWJisuFM + JzQl2ii4roL91MD+aGec62H86GFfdZqc0BJvi2aeQyPxXhPPTSpN9PHzk/RnK/KccA3H4/W1euyuYHwq + 4ZgtsMLWQtmywBrrCmywhH5nPNVSaa6KbZXLNktl+0WTm4d4kQN4sz98rOHM57Y62o8EYMnY1nvYs7/s + oHWX/ZsdFLHXIgD/x3TuNvyclIGm8X2D2P+PABzkLwKnLJxWKWXmRZxVsnZ5bldM9tv9sQCcwrmdybGa + zXmRRZP7Qknk4TF8X0RZ2StYqhhEkrPI9iKKAEzuI+JvKP1XmCL0SmYtuTpNyjuHG2nE7UqGrWD4SPIJ + xkOxWMbGK/Ez3KhCKH2fkRw9mjwnKZxcOdoR5lgnFPOcatJc0cB53si+qyMGrk7Xo4xz2Mz5lEqfm0L+ + k06cmykLr8hlYji3IoXfBNgglf9rYtyOEjGacyuE5y//JRZGXiULyY1yjiIAX8kADnf+j/j7IwE4mP9j + 5LlFxziRc7j+DwFY4qtFANYgK12H7NQrAjB9giIAS/avxaQEtFTYSYxzUUwWXCaQa8XFyCJ3Z6UtRQCW + /bivWJAf/cKciQAcwnmsmIjBwk+D2F/kAxJvJLM3m1gsR7ZUyLJHbpYD8nPoB4lLFQGYeFSwfG62VqlY + kEofnza34F0Wr6Ty+6mMCWIpScQVPMp78rpsjSUCcFKsLcoKfTAzWYS9u0Zg9eURMz7dn4Xf7ErD69tT + cHpVHPaNB2BtuxazNQSU5nASpXh0p8SgJSkctQmhqEwOQnmqZHl4oDNRhyk6uvWlwbiu3ohDreE42hKM + 483+uKvJF/c3++HhFn880R6CJzpC8SBfv7fWG3cwWBwt0eNIqTuOVvvizpYgnO6NwJMjcXh2PAFPjkbh + wZ5Q/oY/jlV64NYqHxyv8cOJ+sCrdjudx7EKb+zP1+BagsbtDKyrYxig2Ij7SQBO9Ebj1GQaHlpqxpNr + y/HE+go8ur4M9ywz4/BECrZ0hGNJYzDm1wdjoCKIZCEAFXTY6exMyQAWATjQwXLjMt3LDkWhalRywNXG + kxRwoLSku6I13R7tWQStRU4Yo0Od3+CJ6TYfLGhnI3f5YZo21mrAUJMGo61qzOs2YOGgF5aO+WHJ/EBM + z/fH2IQn+ke06OtTYbTDCYvaVNjQ5II9DS5sSw0e6vHEa6NB+PVoID4ZC8K/hgPxba8fvmlzx5e1Gvy9 + QoVPih3wewbp39DhiQD8drENfl7mgLfr1XiPn/v9oB/+xH79dCoQny8KwJdLg/GPBX74ZNgdbzPwP19j + j4cr7HFrvjUO5NliT64NttFZikhwTbEtjjZr8QD/88WxSLw+FoGfjxjxxmgInu33xz38/b3laqzKdsIo + nVArA2BltCfy4wKRlhAFkyIAxyLPHI3CQiNKC4NRXuSHqmJvNBSTpJGI9JJwjZCELSAoWsKgtYagcIfZ + CrfXWzKA31+owxcbfXF2ZwDO7w7BxRtjceFgIs7dmIhv98Tgb5tC8IdVfvjlrCdeGNfgmTEdXp4NxPu7 + UvH5bcX44cEaXHqqBnhFsn+LgBdScfmpaFx8MBgXTvri4m0+uHjYFzgcDByNxOW74oHTCbj4cCy+Ox2C + bx8MwtknwnDx6Qhcol18KgrnHo/E1w+F45+nAvHxne74wx1a/OF2d7x/zAe/OBCAF64Jwt2LPXBoVINr + Oh2xotIaM/lWmEizUrKAt9fa43CfZABb4aUNNvjtXvbhDdb46HorfLLbCp9fb4NvDjnhh5tVOHvEhUcX + fHtQpewD/Ne9VviTCMAHrPCPu5zx7eN6XHg5wCL4/jISF34ViYvv8DrejgB+FoazT4pA6oFv73LHd7fS + Drvj6wMe+HKvN/65l+PhQCC+OBSAf93uj3+fDMC3p4Nx9sFofHeXCV8cScFfdsfjT1tj8O6KULw25YdH + e3Q43qjDdZyX6zh3FlYEYKjUE5WcgyICWQRgF1zTGI4HF+bj7T2t+PSOYXx+ahCfnWzDr2/KxzMbQvHI + Mg88tz4Qb22Pxm92xuP97XH41aoQvLnIB++t4ni9JhxfH47D+ZOSAZwMvMijIgBH4eIr4fjhuRCceSYY + 3z3iz37ywQ/3eOGb23X48ogKn99ojz9eZ4UPdlrh/R1W+HCXHdvWDX+4Tof3NrvhrVVqPDWP7d9hhbub + rHBvqxVOtvGxHFv4vJPHbnvc3maHg1VWuL7YCgcqrAlcrPHIpBXe3q7GZ8cD8O8HInDuGVkMkIBzr8Th + h1ei8P3PonH257G49CbH0ds871+lW8qEvyvZwFm0XFoezv86F2d+nYcz7xbizDsl+O7tUnz9Win+9VwF + /vZwBf58Txn+dGcF3jlSjCd2pOL6KR8s6XDGUD2BT5MdRnrUGO5XY6zfGfP6SY4WaLF3QzBOHUzHaw/U + 4e+/XIRvPliP73+/Def+tAvf/PYafPzqarz14BQePtSOg1uKsWHGhAUDkRggiO9qCVPKU5aVByKvyBdZ + +d7INHsj2+yjWM6PLCvPm+/LZyyWTSso8Ud5RTAqq8JQW2tUbnR3Nvqjr9Wfvs0L8zo19IkOWNJrg9WD + BGajNthIWzvkgGVDrljU547RLk+012tRWW5g0PNHRkYIkkx+JFHeiIpzh5FEPiTMmUCfgJ8BVPaukJIp + 0SEEBCTiCfTTybSMYDeYQ7WoitSRbLCNUlyxpsgNh7v9cXoyDI9NheLReYG4o9eAQx1q7O9yw65uLbbR + R69t02FxnQrT9IkztIVljpgtJxmt0Sply7bSx+9o88Ym+vyVJEVrMmywM1+HW6qN2Jfnh22xrrg2kv40 + 0RYvV7njvc5AvNvpi/f431IS+vkyPZ4gQH6Igf4B+rvHcvi5YhV+y/jxcYcf/trriy8YI75fGoZv10Th + q03x+Cf7//cbkvDSVAhO9bqTnDliR4E1thcy9hU7YxttO4n81hIXbC3TYHOZDmuKdVhGcL1IVvRn2mEe + /2s+ffoCHmfph1bSdhIYH21S48ERHzy7MBTPLQ7Gc4wPT0pp7FH+D8fYtmYS7lobLKvm92qtsLDGGvMr + bRj3rJVyXnUkEGVJFhKRSQKQGUeimmADc6Jk/hIUpjqi1OSAEsmqSSIIISGuTLBCDT8rN287+L1RnstS + sz0JgQtuavPAPSO+eGSeAc/NaPDGSh3eXuuGdze74oPdrvjsiB5f3u2HC88lAW8Vc141AL/uoq/rBoEG + /n2oHO8ujMJDFU64M8cG9xS74v5aL5xqDsLRGl9cW+CKFSRIq3je1zJ2H6l2w5317nio2ROP1OnwKPv1 + Mbbl/Xk2uDfXirHRDi/36/DJZvbFYRMunOb8fb4QeF3MDLxWALzMx0+acfn+LJy7Ix3nD/Lc6DMvrgzH + V4xFn0364k+jPjxNPZ7nmLqf7XZnhj1uIZjbnyZVTjywOtOA0SQXVAlAJmBPIDCOJUGWG8dpBJ9ZyQR/ + UuKRZFnKACVJe/Mais2OqKtwRVuDDp2M1R00EYMbq5xRW+qAcsadYl7HT0tAt9bb8TvEMEopaAd0zR27 + m53Q3UTSOGciAPfTholNJnpcMD2oxqIRDRaPSTawHiuJZVbNi8B0dyj6SfBqUt2QQ1KRQIITrSEZV5G8 + OPN8SYLMYQ5oTHPHUEUglhHzLe8NwOIOTyzv9sTaQX9sGgnC1vEQbCXm2Tzgh3U9XljF+bicY3RxrYrz + 0gmL6+eskc/FiJVEFJ6pJs4qUqEz3QZ1CfYoi9HAHKFFMn1ELMlKYgRJfRz9xFzZVMm6FYuKkxWijlct + TsqpkjRERos4askYDo9yRiiJh5SB9iXh9yRhkYxeKb9lETBtSMRt4R/oAJ8AR5J2O3gRNyoCMEmejqTS + Qz7L/gwigQshIA8myQ6Smxkks8HsTyP7NYoESsl+y9LT93opPji7wFd5nJJlgClTh2SSq+QMHtM5FsTS + SJoyXJUsYCkHnZEj2cH8bLoWMfEi7or466AIvmJRsZItyGuMs2QMyt5VcoyIcvkfArCyDzCJZJjcCIlw + mBOAXZFCf3pFAI6JtlVEHtmHKkRKV5FkhgRY9hGSG6iB9NP+gWyfAGtlXx5vtoO0mxy92YbSjmKBkh0c + Zsmm8CexVPb/5RwQ8yOx9Q+1QoD8j/E/FiY3d9iH8UnOSEpxRlqqC2OGK7JzXJFfoFEE4KJiEYCtFQG4 + vsYOrTLGO10xNMhxOOyFzh4PVNeR9GXZIJF+LI6+ITnV9qoALCWgCwtUKClwQrnZCVV5jqiWOVeoQhPf + 66CP76r1RA99TGeN5dhT64M+Wi95S2+d/1UBuKU2gHFRLAgNNYGoqfBFVZk3qitEBA7+iQAcgoa6MLQ0 + RfF8kzDQl47hgSxaDkaHcjE8lImB/gx0d1sE4P6+OIyOJGFyXgpmZrKwZJEZszO5WDCZibHhJAz3RSs2 + MhCFieFYzCPXmpo0YeECEX8zsXhRBhZOmzB/MhZj45GKADwipgjAYRjgvOwfC6QFoW80AD18LFnA3aN+ + 6Br1Rc+4L/omxLzRM88DfeMGmh69xOO9Y1p00UQEtphkAhP7j3uje4ztNeaDDvrHtiEfNPV6oYYxoLzB + yyIAl7gju8hdWfyQkKZBVLIz54stfDgWvEM4pzi3/The/Tm+AoVo+9gi1MsGwV4cL54cd94cSyTevhyT + Hn42cPO2glqMY1HHsSWisMxhIfAh/A0jLYwmN/3EjGJ8P5ImK9XjOG7jeEzmmM6YE4HFzOGu9Hsk8LRc + zpt8ziVZ8CJVD/KNdjBzTOdwjuRwXGfzN/OCbVDEz1TEqVEVr0FVArkTH1cn6Hgk6TeqkMn5k8j/i+H8 + iOQxUs6P/keEbpmXIZyXcuNZMvgjYywloEX8lRLQVwRgX38RfCWr11IC+opdKU2n01tMbki602d5eNvD + 08dBMXks5kULDnaBMdQVkfSp0VF6REfrEUc8Fh+t+4+RI8cpmXZqxEQ4QbJWI+njjJyrIgDLzdh4+rhk + k2QB03+ICEyfGxlj/78IwDrOSb2S/WOmj8s32aOA3EIWkJXLAjLJwqQ1kvdL6cEOYgoRgBcwpi+tklKi + OqyocyM/UWO61BXzCtTkma7olZuJcQ6o5/82Mt42pzBW0q9WZ7ihjPFYFq7lE78UJzN2pohwokJ1Ko3H + KmKZqjQnVKY6oDTZHhWp9qjJcEF9rhp1uRpU57ihij64IkfKv7ohi7EkmWM1nv0UJ2ID+8lS9k2FtEQ3 + pCZokESfGsMYf1UAjlKxLfkaY45UrBCLnDvKzaZoKcUfJdkZLmxnFeJi2Y4cP1KZwTQnAKdJDCaeKCrw + QFkp/UuND+obfdHQ6oXmLg80E890j3tgaIEvxpcEYP7yEEzRJleIBdKCMLUy2GLkfVPLgrFgWQhmFDNi + dlUEFq+IxuyySCxeHoXlK2OxanUiNqxLwbZNmdi5OQe7t+Vh/zWFOLK7HLfurcIt15Xi4DYz9qxNwzVL + E7B1YTSuWRiDPbMJ2L88BYdWZ+CWddm4ZW02Di/PwJEV2Ti+rgjHVhdgP/3T5sEYLGkKxMJ6PyyUCm4d + YVjUacSirkhMd0ZgXkswhoVvVHujs8yAlkIN6rMclZLe9XKDmTGhOU+DtnwtWgtofCzZgY1ZKva/mCua + stVopjVlqfldV9Szb+tojWJ8vyHNGdVJ7Pd4xpN4G2IMjkfG8kLG8PJoG1TG2qKG47g+njiHsbE1iXhk + TgDu5fjp4fjpY2zpMdmgJ4VmsuLRimPSak4AVmOFIgD7Y3Up+V6BDvP4333JtmjlmG/huJSSz4vqwzBT + F44pxoipKvYXPztWqMOYWYN5xPwiAEvp55W8vnV8vjFfg438rS2FeuwsNGBHvh5bst2wJt0Zy0yOWESu + MmOyxSK20xJ+fnmpO1ZWeGFNpTfW83w2kE9s5BzaXkluU028WuWCXTVq7KzWYXuNB7bU+mIJffRAiiOa + oq3RGmuPHs6tYfrrhYW+WMNzXVkdgCUVnpgp1WG20oBFFR6Yz/g6anbBQJYD+jLtleMgcfFQuj1GyBdG + k20wxjk2xuejGY6cv04YNqsxyP7r5fW0mfXsJx0q0vQwcw6kRakRq+z5TswTrkJkJOdJpBvtivj7HwH4 + iggse8THR3DO8XEMj5L5G0w/608f78944UcT/+nBmCI+1C9AFvm5IDhEQ8xDzBTopJTWjAyyIf8kdif3 + y411QoFJo/gAM+djttxo5nhIp89JYdvIvr6KAExfeCUL2CIAz2X0EL/KDWrJDhKRN5axTskC5jhT9v4l + XhQOIO8lRTMW0QemcmzksC+LiH/KsjW0/wjA1RnOqGPf1rFtG9jOTVkcg/kOGCZvnFfuiulqVyxmf0r2 + 7bpWd2wiX9/YHYDlrd4YKeccoV+tTLVCaSpjVrodCvk7ebQc/pZYNl/LzrBFVro1jfGNx+I8O1QVcu4V + 0dcW2KHRbKWUgRYBuIM8tIOcr4eflVLQE/m2mCp2wGy1C5YRyy8jpl/R5IQV5J4rmu2xvMUOy1pssbx5 + zvh8XZcaWwfcsZO4YSexx/YRL2zqd8eGfi+s7vHBBPmAVGls5pzqKPFGL/l5c0kwSjI9kEk+FRtmjRjJ + qmZ/JZMPyNYKUnJbKbsdK9U/JPvahX5a9oL0RCLjmogkluxPwaki+jkz9vI14lbZWiZE8Dz7J3AO44cz + LkUTUyZwbgmmNKVYykFLNnAGH2fw9UzGtUzGpCzGk6wkR2RzTOQSz+ZxTGRxjGRE8/Psa8kEzo6xQX6i + HUrIqyvSGZPYv7JXq5T5rpCYxN+SPZ9rpEwuP9vP+DjG312Q7ogVjH9ry92wqU6Lna1aXNepxe4ONXa3 + qnB9ixNubFHhGPnp3QM+igC8r8oeu8jxd5itsVXuWebKfQ578mcn7ClR42C9N461B+Nwkz+upa9dkWiD + Zfy/VfR9IgBvJR/ZlqfFjiJPbKd/Wl/oheU57lhI7jLI+dASZY0yxrwCYnvxnwXkEeZYO+TGsw04P6Ry + RnqcE0zsjwTOgyhZLMt5IJm/Iv4KFwjkfBPOoPAGPpYqQWHsUxGAIxUBmJzqRwKwKUn2/lVxzIr4K4uk + 3JCZruFr5A3EJDInk/hfScQjUqUjhvH4fwrAfD4n/oqJACvcJURK1Mqe4cRxcSZio2RiJGI5YzT9hNEF + 3vQT7sRdGoMNXHRWcCPmMnhasnxF+PUSzuhnz885kvM4KI+FR4oYLJ+RBXzigyzVW2yuCsCS/Su8SjIe + JQtYSl4nEgtlcH6Zs6xQU+yIjmot+mt1GKo3YLBOhy768RbOt9ocxjDOazPHaQ5jmVK9jX4mh+NYTBF+ + rxh/N5ftUkTMVpKiJTYyoDJFh3r6uYZEFerp95v5G0Mci7OMP2vp2zfluyoC8J5sFxzIdcOtVf440RyG + mxuCsK/WH1vKvTCbSy7G2FfPc5BKGlUcu03pLkpVlr5cA7qltDnHvOC8Bs6rOlrDnADcw5g4znm1zKzC + DnKFPbUG7OG8v6bUHjuKbbCNvG9zqS3WFdliSa4VJuhvetg2VRw7ZrZXBrF4DHF1KE04qY7tKQKwNfvm + xwKwwcsR7j6Sve3ExyLiO0LZ69fwo0xuwdPyWXIOxeaEX4tZRF9F+BUBmM9FAPb15PglL5EMXKkiIRW0 + jBxTPxWAQ/n8xwKwifMkjfMsXWIKx2wa40oicWYM+z86hPFC2WbEnr/poPye7AEcyrEr5euvZtSGEXNL + nOS4lco9Ei+ltLJF9JWFmf+x2FhXxMW58ahmTBUeIIsWJYOVsSyavitOhQLO6bIUtVLCvjHbgMY8WZzl + jtosD1Sma1FI/5oRYYsUztNUYuEU/n8c+yCK1xZOi+X5mfjbyYzRsgWPUmpfWdhhMcn0l/sT4m9FABbx + N0oEaZ73TwVg5fOcu5H04XHxLkgiLr4i/v5UAE7nOWemXSn7bMn+la0armT+piWSi/A3RPhVtmahyVGw + d3Skk9KGwsf+I/6KEPzfJgJwsJ/tnJFbykLjYDuFHyXSx8l2LbnEm2bOFXOuM434Ic9S/lkE4MI8nYLl + 8/MMyKbvkkUr4sPyOEeUzOAMqfgjgq8DTFJOmjjAIgxzXBCnigCcQnxRWeKP2QWlOHD9OKw+3WXCh1vj + 8fO1kXh2hRH3LArBvkF3bG7TYEOTL1ZVxGFpcRqmzSaMZsWiLTkE9UmBqEklkUjxQh9tYa4/NjOw7mkK + x8HWUBxt9sftTd64s84d99BO13ngsVZ/PNkRjIea/XCq3hN3VXvgWLkWh8t1OFrribs7AvHYSCSenxeH + Z8Zj8MRQGB7uCcZ9/N4dfP+uOh+cbPDHPY2BuKcpCCd5vLc5GPeSBNxW5YWDRWpcR5C/nE5hBZ3EpgwH + 7Kn0wMH2ENw2mohTi3Pw4MpC3LvCjNtIJPaNJWJjVxiWdxixtCcOM10JGGuNQ0tJKAqSDYj1s0OgE4OM + CMAudBKedigi4KsgiKwhuW4k0WpmgGsx2aE11Ro92XYYKnbBRJUe8xo8Ma/ZE1MiBM8JwAONGgy1uGGs + U4/5/R6YHSFYngzAommSrGl/jM5zx+iIBlO9KqzscsXODo1SiuO+bj1eGPLFe/ND8dFUCP65IATfzgvA + D0Pe+IHvfd2sxhc1zvhrhQM+opP7LYP1O4XW+AWPb5TZ4RcEUr/u9MAfx4Lw6YwR/1wRia/WR+H7LdH4 + Zi2fL5G9KbV4rV2Fx+udcJTf3Z1Dh5nJdiQpWZRsKUN9qFmLBwcD8epUNN6ejMKvx4x4bywEb40E4ulu + b5yoM2CnZFUlE8jHadEY5a5ki2fERxDsxJDEx8wJwOEoLRAB2B/VxT5oICDoyPdAX56e40ul1PJfymC0 + nv+/K88Kd9TZ4nkRgGe0+Od6H0UAvrAnGJdvisLFg/E4e1Mivr4+Fn/ZHIYPVvrhZ/N1eLzfCQ90O+Lh + YV7X6gh8uDcdn9+Wj2/vLcSFJ0X8NQPPmXD5yWhceigUF+8NwMXjfrh0xB84HAYcjQXuTALuMwEPJeDc + Q1E4/3gkLj8XBzwbh4tPRuLsw0Z8dyoUf73VH7+/SY9f7HbEq9fa4ZVrHPD8VhUeW6vGPQvdsK/XHtua + bLCi0gqTDD5jBL3DJHozDMpba+xwuN8Gp6at8NImEYDt8fv91vhorxU+2WOFv15vje+OqHDumBrnj2pw + 9hY1vjvkgq8OOODzuc/8aZ8V/nHCAd8+qsX5F3yBt8Jx6e0IXPxVBC69EwmIAPxmOC4864+zD3riu7v0 + +P5WA74/bMC3Nxrw1T7aAW98e8QX393mh+/v9cWZB3xx/jE/XH7CiAunE/D98WR8uT8Wn18bjT+sC8c7 + s0F4ftgT93Z4Yl+dLzbVBGFxdSCGy7xQTcJWxIBcSSA4QLK8ozECDywswC+v78Bnd4/jn6fH8dd7u/HO + jYV4co0Rd09yXM144rnlIXh9lRGvLQ3CS/M98fKEO369PBB/3clxeiQRF0+yPxQBOAF4lf3zOvvuFSlv + HYYzz7IvHg3C96f98MO9Pvj2dgO+POKKz29yYlta48M91nj/Oht8eIMz/nKLr5Lh/PGNwfjgOo7nFW4c + J7a4p8MKJ1utcGuDFW6ps9gxkoyjrU44UEcgUWCFdQQOmwmCr2df3j9uhbd2qPHZCX/8+yE5hxicfykW + P7wUhW9fCse3r0bgzOscoz+LweU3E3H5FxxLb6cC76RbBOAPcoHfmXH+QzPOfJCPHz4sxpkPy3H2g2qc + +XUNvnuzDl+/1IAvHm/A3x9qxu9P1OD5PbnYN0MC3emCoQZr9JMUDXa6YrDbBSM9Tpjos8eaGR1u3BqO + J24vwG+e68X3f1iHi3/ZiUuf3wB8cRAX/3ojvvpgFz5+YwPeenQaDx/rwo3birBhSSoWjsbyt8LR3BCM + 0jIRdD2QkSvmiaxcL8WuiL/Zed7I5PP0XO+rlpHjhdx8HxQX+6OqIgR11SFoqfFFd4MXhls9Mb+DhL/H + FasHHLB5zBa7p+2wf5Ej9i50wDVTDlg/7oxl9EUTvXp0NmlQW+WOygojikrikFsQzfMwIjbZG+FxeoSQ + pAcK4CeIkZWfEoCjQ1WIDXVBQpgrTCIAh7mhMEKHujgDOgjIJxgk11a441BvMO6ZZ8TpeaE4NRqA27rd + caTTgBt5vI62rcsdq1s1WFzriOkKG0yV2WBhiR1mS0hGK92whgBzQ6M7dvCadtTpsanICVsLVNhX7onj + 9RE4VByI65J12EsCeWu8LV4od8e7bQF4p41+vDMAv2j2wfNlhqsC8IMZ1njc7IBXGQs/JJn6c68Rnw2E + 4G/0r/+YNuLzxeH4ZFkk/rAqlnMiDs9OhOCeTnfsq6BvEWJmtsOWAkcCbRqJ2UYpu1OsVsTuZYVazOSq + MS/TWSmpNkjfKjZEHzROkxX/yziud5Q54HC7Hrf2eeK2AQNuHTTgCIn1rnYN1tU7YmEZfVcRiXox/Vc5 + rZLEstwObQU2qKOvLudvSXlnEX/TSCAy4kkckuxgJkktSlGhNM2ZJMMJ5SSoFSkOqCLxreF/18kNLX6n + P8nakv1b7IRddWrc2uuFR+YH4pkFHnhJyrGv0OEXq9T41QYn/GabI/6w15nzWIvvHgzH5RezgZ9XAr9o + o29vo89qwj/2FuGteSE4XeKAO7OscV+pBo80+uN0axCO02ddX6jG+jTGuSwb3FDmimPsx1PN3ooAfLra + DaeKHHFvri3u5LXdkW2FU2XWeKbXDR9sjMDnh5Nx9qE84JVizmnaLwt4ZFwRIfqVQuBpMy4+lIuLJzKA + G+izttAvrA3HP2YD8cm4D37LuP1KtQMeZjy4J9Met5LEH6BdS7K8ikR0iKS3nKQk1csiNEQRUMaGERgT + eKcn6ZCWoEFijB3i5eYPCZPsuVVkdkRthRqtDRzrTRZrb9ChuUqNujL+Xr71fwnA9RzTzVXELvX2aGtw + QHsjCSKts8Fi3U3O6Gp0uWp9Ta7obVTR5zhjuMMZk32SCeyCeb2OfKzCohFPLB0JxmR7ILorvEgKXZFO + MB9DEhWhtkKIYCl7Xg/JVB6JQ2OqO0Yqg7FmMAqrB4OwotebfsEbG4Z96RsCsW0iEDvGArCN2GdTrwfW + tLtheaMzZmvsMVtrhyU876X1DljC12S/r8V1zlhU44QF5c4YLXRAD8dSa5oD6kjAyxIMSCepkhtzSVGy + x5MKCfHOiIkn6eH8jIyzRTQtLs4BcVJCia/HJ5DwEOxHzwmmloxZlXKzJ5hkyY+Eyot94+lNIzlThEwh + kAT2vv628CZ+VMp3kdy7k/yJAGxgf4poLAJwIHGqCL5ylAxG5UYGH4dEWStZybEkH4lpWqRmSykxD6Tn + efKxO5JIokQAiycBF5E4gXMrwaRCYoozkkmYlSxg+jllb+AcA1IydIglyZE9ja8IwP8Rf13YBiR0NDlG + x2kUATiEhPG/BWDJAJYsPltESOlZ+rUknl8KSZMIwEmJUhaa75FwBvM7sodqENsgUDA0iW0AH8veq9I2 + 3mwrEXplP2RpO9nXSsydz+W1gCDLjZzAUFsE0BQBeM6kdPYVATiQdiUDIJRkODKWY43kJiHZESmyIjZT + zRilQUEhYwBxeXGxI0qKbFBZao0GyXznGO9pd8UYcczQkBfaicvLKknC6AsT6Jdik6zYxjaKAJxbpOFv + iJDsQtzqimpaXYELzRkNfNxU6ob2and01hLL1niijdymq8YL3TXe6K31QU+tRQDurA1Ae20gWmlNigAc + iLoqxspyb56XF48+fB6k7P/7YwG4vjYUzY2R6GyPQ1+PCYN9aTQRgjMxOJiO/v5UdHUnoLMrGgP98Rgb + Tcb8yVTMLMzC0tkCLF5oxvT8TGU/4JH+GMWG+yNpURjh/BsfTcDMVCoWzWRgyWwmjymYP5+/Mx6JkYkI + iwA8GY7heeEYnAhD/1iwYn2jgfixANw95ou+eX4YmC/mg/4pTwxOutMM6J+nR9+EFt3jOnSOXhGB9egZ + 9+R3fPg624q+sXvCl+/7oZXzvr7TGxWNniggj8spNiAzXwdTFsczx34452gAx5snx4QH55NXAMcWzcdX + xF5rBHDeBbjzsSzkpUnZPE/JmlAyK2wtAjDHm4ZzVk9y7qnc5Od4p4XyuZHzVPbbklXzYoH8fCA/L4Jy + GB+H8xjOo9w4Sgq0QVqoA7KMzsg2qpAT5qRYbrgj8sKdkD9nuWH2yA62RWYA4yN/O43zQCwn2AalMbKP + mhvqUgyoM3mgMd0HteTWZqML0gM5rvk/kfys7GNu5PmJSK3sm83vBoVw3ikisL2ySCUy2kURf+VGpOwB + fEUAljLQPxZ/fXzsLaIvfbJiWhrb6scCsJev41UR2FMyqUNcYTTKTRc957wH/aM7YmP09JsGxMXQlH02 + 9Ugk5kqI0zFOyV7gzkqFgKgIa0RyrkbT7yUkOiLZ5IwU+i4TY0UifUgs414U+zUqgcdklSIAmzL0VwXg + PPo3EYALk9henKPlCdbKTe76BDs089hOztFFHDGcaasIwEsqXLGyVoOl1a5YUKpSysyOidCUQd4eb4/K + cGuUcAxVxDihhny+mv62Is0NxTyvvHi5CW2LoiQHlNG3VtKnVNHXVqW6MLY580g8k+yA4kRbRQSu5POq + TBdUZbuigr6nnLG8lCZl+dLpc2Xv3xj2U0yY5aacCMCmOL6XpEUGTR6LMBwuN2/pb2MjpfwzfbT0Zzj9 + Ni2CfjmCcUwsKtxSnk8yraX8XKy0c5z6JwKwhu0m2b9eKK/wRW2dHxqa/FBP3NrQoUdDt5pzTY+BKS+M + LPTB+NIATCwLwLhifphY7o/JFQGYT5taEYT5y4KwYDlNjktDML08FDNLwzA1G4KpRcGYXhSChYuMmF0S + gVUr4rFuZRI2rU7C9nWp2L05BzdszcHeTVm4bm0Kti+Nw7bZaFyzOA57V5pweG0mjm7KxbFNeTi6Lhs3 + r8rAwcVJOLQkBcdX5+H4mgIcWpyFa8eTsKbTiOVtoVjG47K+KCyjP1s6GI/ZvlhMtoVhpEn2XvdBR6ke + jezvGmIsKdtdn+2sCEGt+Vpl7+YO+pQO+hQRgUX8rUt3RB1xan2GStnvWR5L1ne1kgHuZCmvSk4rx2pZ + GECMWzaX/VvEMV3AOC5ZwBWS/Svib6JkNDkrAnBHikUA7qF1Ewf3ptqim/GlO8UanclW6CR+FiF4JN0e + C3iOK8ml11X6YnWpNxbzHCf5v/0c+80x1mjheB80GzDLmLCoMQozdUZM14Zgkn08WqjDaD7xfoEbFtCW + 52uwmvh/DX9zXZ4rTY2NZg2257lhK00y9Nbw2kQAniVeX8o2WF2gxVqlBLUfub0/NtO2Vvtia5UHtla4 + 4ZpqDXZVq7GbtqdGi+tq3LGTsW4bP7ekwB0DJieepy1a4uzRzXnck+SMAWKFMc7hsRzyMLObkoW/oETP + eWnABGP0MM+tP8sRvZkO6GdfDaQ7YIg2Qr4wYrLDaKodH0tWsD2G+LnhXHJg/kav9GWujn3GuZuiRS59 + Xwp9XkyIVCCRKgmS1US8E67mXJE9DK8IwLJ4wrKAIppcMoqYLtpIvyM3wUMdERpop5RwVAQWZT90qZRA + DCf+0dOafpH+098J/gEq+Ps7I9BfMraI3ejb44OtIeUwc4i5CpOJHVLc6Lc4FzkOsuYEYFO04Hk7pNLf + pXKMpLGNpGyjZDiK+JtAPJoYJ2UdJSNVhChrxHF8JShirw2S50weK885LsRMsdbIYl8WS/lntktZjgZl + 9EsVVwVgZzRmOaElxwltufboL1JhhPxnslKDmVo3cl4NVtST87V6YGOnYO8gLGv1wXCpZHRZoYqcqSLD + DhU59H+5zighPiriHBMrzFWhIJexLtseedk2MGfbosRsjypyKRGAG4nLG83kHSIAZ9H4e+1pHPvko1IK + eiTHGhMFdpipVGEJOeDSBhVWkG8sb3WiOWJZC8dnsy2WNNkoJo9Xy57AfTpsJY7bNuKFLUMe2NBvwKYh + H6wb8MdEjQadhc6QfdvbS7wx1BiDjspwVOf5Iz/FHQkikoRZs13tFfE3XbK0OWaV/iBHSJItAWN/LADr + 6H9diHOJkQWrMu6HR6posjjUzrKlSgSx7xyuFyE4jPw2itw4PtkGJo5fU5qdIgKniMlrNClLnMa+l30g + RcwRUSeT4yKLYyZDRFCOgfQo4tFo9i+xrgjAxZxnIgBXsU8rMyzcuizFXqm0VczfrKR/aufnBzkuxjm3 + p8mHVhWosaHcDdvqOG/b9LiBXHRflxZ72lS4ocUZN7a44LZuA04O+uLufm/cUGmHawqkupkVfYVsHWWN + XYVOuJ7j4UCNHgcbfXCoOQB7iXfXc94u4rXOcqwu59hezzm/I9eA64o8cUNVAPbVhWJnRSDWmb2wIscD + CzLd0MNxrmQBE8cV8Ghme+VyPGfH2iMz1kERf1NjOS+EE8mWPIL5+dkr28AofIBxNYhc4b8EYMbZcPZD + pFQmUnCHtVIaOYG+OZntLGJvDv8/K8NiVwRgKQEtJdct/NoibkkWpZFYy7IYkPiQeE/K34oFzplSgplH + WRAQxtgcEeuKSPL0SMZkI/1MUJgzOaO9IuTqPG3gStylIt4SAVjwlmT6ivgrC4d9A53hG+xsEYFFAOZ7 + Bh9bS0loL/JJ8T9zYrA3fdMVAVgygC0lb8m52Y7xscSXKcSX5DRlnIfN5VKpiPOh0pXchI8rVGgptkdd + Luc052BBnKV6mwjAVzJ/szk/fioA57BvCzhHSlK1HHPuxEJ61NLP1XO+NHC8tcuCA8ZNWUS0tsiN8caV + 40aFXcRG+/K0OFoZgNubjDjSEIwbyIm2lHtglv58MI1YjudcyXOoJp5r5tjuYrzoI5ftTGPs5e9KskAt + r02snucoWw108bxHOJcku30budfuOndcX+OGXeXO2FXhiOuqnLCzVoXN5Hcreb3TebYYot+p57UUcvxk + sr3iRNwXf0/73wVga2XfZk9/NTz8ZA9nFfReTjB42kMvGcFz4q/YVfH3vwRgS+z4/xOAZdskqZoj403Z + s5fnIhZC3C/nF85+jub5JnA8mxhjUxhjr5jEExGAZZuAGPabbDMSH8V5Q6wZwbkRxjkiou0V8dciAAu2 + dJoTf2mMhTHEkjGxjJEcw9F8LKWWxaKjVYiXhQ1S8jiGHIP8RrYoSeL8zEhwRS4xZxHnUQVjcW2O7OdN + HlNArMn5XpfriaosA4oYB7Ml25XnZuI5JnFuRZPbS/avcK4YxmzZRz+RMVoWYUn2rwi5VxZ4hJLj/FgA + FvFXFniFs91+KgBLVQBZsB5NbpUgSRMmrSL8CjYWEwE4iXPdJPGXOF2ygEX4FRFYxF8lFkjZZ9knmNdn + iuPvEMvL1jsxjBcxEcQMbFvB5tKWsiDk/yUAB9H+WwAmXuD1yfYuFgGYbZitgVnuWxC3FRCnFRHfFJn1 + FvGXR8HyRWzTPLZvXraWnzGguNAThcRdZs6TbOI52cv8fwjAnE8iAEuZ6ZryACxZWIab9s2D1QfrIvD2 + shA8v8AHD4574M4RDxzsccP1HRrs7fDHdY3x2FaVgtXFcViYG4G+RB+SJw/UJ3qgNdmDk9YHM+YAbBQB + uCWCASQItzR54/YGd9xBcHh3lRb31+jwaIs3Hm8PxEPNPri33h131RlwrNoNR+iQjjUYcKonEE9NxODl + qXg8NxGFJwZC8ChfO93GQFTvgXsafHCq0Q/3MdjcT7uv2R+nWwLxYFsQ7m8Lxp18/8ZCDdYTHC+jU1gR + b4WNeSpcy8B0Q1sIbh6JxfEFKTgylYx9Y3HYORSJdb1hWNkXidWjKVgzmYNVk/mY6EpBW0UkA6w74jw4 + QVw42bTWyORkNvs7oCSMAZekqz7OBc0E+LIasy2JICbNBgP5zhgtc8NotR6jvL7xRk9MtHoRdOjQXeuK + rloX9DWqMUryNc0AOzsRiNkZIU3BWDDji6l5eiweVGNTnxtuGnTHvQNeeGbAE2+NeON38/3x52l//GtR + AL5lX/0w4Y4zQ1p81+mKrxpV+EetEz5hsH6/1Bq/KrHCW8VW+FmFDd5uVuM3fV74eH4Y/rY8Ct9sTcb3 + u5Jxbq8c4/DvrZH4dEUg3p3nhWc76ZxLbHENg/1yOsj5JNmTvLZlDPo3NLIfh4Lw6oJo/Hp+JH43EoLf + DwXgveEAvNLljYfYR4dIONaTzE/Fa9EVo0dlrDdJdCgyUiKRlRWFPHOUIgAXFwShoiAQ1QUkpGZfAlFP + 9HPwjqQ7YT7/bzkJ0RYGrRsIFE/W2OKlXme8v8AN/1jjhbPX+OPi7gDgQChwOAZnbkrEF3vi8PEmI95Z + 6oPnhl3xQIctTjRY4/YWBzw66YM3NkThgz1J+OxIKn64Pwd4Skp3puDyYzG49KARl+4JwcXbAnHpSBB/ + Mxy4OQ64LRGX70zC5VPxOP9gLM4/Ho1LTyfg8pPxOPdIJL69Jxj/Oh6IP1zviTc3u+LJpdY4PWOF+xfy + nKdscNuYLW7qscO2WiusLLUiqbPCMMHzAEleH9t1SsTEKmscHbbFw8vt8cZOZ/zuJid8fMQenx60xd9u + tMc/b3LEmWManD+uxcXjOly4VYszN2vwzU3O+OcN1koZ6D/vs8IXt9nh+4fccOFZL1z+Ga/lTSkFHQH8 + UgRg2ltRuPxCMM4/5IXvTmjx/S1anD2sxw83avGt2CEDztzqiXN3e+HcaU+cf9iD12vApSf9cPGhMJy9 + MwLfHAzFF9eF4uN1wfjt4kC8Ok5/0Sfgj8SP83JprT+JBB09A38pnU01HdAAndH2xgicXlSEX+3rxt/u + ncJXj83g76eH8KsbS/HYqigcHzHgxBDn/6gXHpvwwxNjnnh8QIen+t3ws/kct1vC8e+DCbhwdxLwKO3F + eOB12htxuPx6DC6+EoXzL0Xj7LNROPdEOM49FIKz9/ji2+MG/PMWDT47zDY9rMKfbnbDZ8e98dX9MbQk + /PNkEv5yPAnv7Q7Bc4td8eCADe7usMKReivcWG2N/bWO2N+gxl4pk1PuhNWZdpgliF9FoLSr3Aqn5tng + rWvd8Je7/fHvR0Nw5tlInH0pCt+/aMQ3L4Tiu5eM+OGVCJyXTOXXea4/59h508Q+SVP2AsbvC3D5o0Kc + +2MBzvy+EGc+KsO5P1Xjwsf1uPCHepx7n/bLZvzwchv+/WQn/nhXLZ67Lgs3TPlhWbsLRmrpbxrsMNDq + jKF2+p1OR0z1O2EL58DxPQl49XQt/vzmfFz4yw7gX/uArw8D390GfHMbzv/tML75aC/+9s42vP3UIpw+ + 1oYbd5Zg/ZJ0TAxEoaUhACXFnshi0FH2mMxxRyYtK9cDOWZvxUT8TcvyhCnTg+auWEqGAZnZHshnwK8s + CUB9hT/aqzwwUG/AgnYDVvbqsIXz8/r5zrhliRPuXueKezeqcXytMw4stcWOaTusmXDC1IAK3S0qNNQa + UFVlRHlVAoorkpDHGBSX5ofwJHeExLkimOQsiIE4hGRbsl8iCAKiCbTj6KMTQ1RIpZlJ/KViQycD//x8 + A7Y0BuCmgTDcPhaOu0ZDccegP27t9sbhDi8c6PTCtZ2e2NrhjlXNrlhSa4+FFZy7nL8L6Rdni5ywrFSN + FRVuWM24tblWh12Mc7uqtdhdocOhWj+caAzH0fJgHMzxxjG2xz0ZGrxY7oW3m/zpi33xbnsAfsnY9VKF + AU/kc9xl2eKBLGs8XuCEVwhe3+sMw4e9EfhwIBwfDBnx/mgYfjMeil9OhOLNeWF4ecKIh3p8CaB12Esw + u91si61mB8Y6e6wjoV+T64A1eY5Yma/CUpLyhXlqzMtSEfA6oI9+tVtuNtHHtjM+dhM499Mm+NrSHDts + qlRja60btpJ8b2S8Wl3F7xc7KeW5BvJs0Jlri64CW3SyLXoqHdFJgN1Q4EjAZ0tgZ41s2XeGsddEAJ+a + SOJAIFKY5opStoHcFK3McEU1QX1NmhPqSFYbkm3RxDnVSRsj+F+UbYONZU6cc2rcydj39Ewwnp/xxEsL + NfjZYg3eWKrCW6sd8c56R/x2uwN9rwu+OBGMC49xTr1YCrzSRP/chG9vr8TH2zLwyoAf7sy1wR0krg+y + f55sDcJDxAx31HvjxhI37GRb7WafHqrSsT098UC7Px7g8WS5K06QJNxKH30L5/uxDCvcXkTfToL82pIA + /O76GPz7/kxceqUIeJf/+5ti4Lc8vldGf1uKy68U4tIz+bh8OgeXj6Xh0vWJOLMlGl8SZ/1lng9+16PH + G7UOeNxsxfFhg2PpDjiQZo8dbJflJmcMEMhXkMRKBnCs3PAnMJa9awUUmziWk2QlZhQBHUlQHNs7hf2X + l2OPihJXNDMOd9Ind7X6oKvZE221etSVu6Cc/SYloMv5n9W8llqO6cZKG7TWOaCtwQntjc6KdYg1OKOr + SYVO+r4usQYSRhGC653R3eCIvmYHDLY5YaBNykTboLfZDiPEIfO7PTHKMd5R5o7KdFdkc07GkjiFawiI + HUh0bHgdbiJ42KEh1YAhAtFlPaFY1R9A88bqQS+sH/bCpjFfbJ/wxU7Ggx3EPlv69FjX7ooVjQ6Ypd+b + JSZY3uCgZAcsaxTx1xGLquyxoMIO8zgnRgvpG3Ns0JPthLYsHWpIUHOjHJBC0pTCtk0nCE5Oskcc41R0 + nDWiSDpjeYzne/GxDiQ5zgphSCCBl1WvMSTxChkSUk/SEUbSFBhkq5DFKwKmiJpXBGC/ABJzXxJ2XruU + 99KR5Mm+TrKPk0+gNQLk5gXJtJSIk8xfRcwkaZNM4JBItpfsOxXvgliS6qR0KSUmwpfeIv4SX8WQfEcn + iFBCIpLINqbFJxPkp6pgSnehXyaByXVTfHdqpg7xiSRrigBMsjInZouJABwrhC5Bq4i/kj1olEwGoyys + sUFAMM+JpDGERE1KzYZLJl+0E9uDREghURok85iYRGIY54Ao9nco+zY4wI6ER8Rf/k6go1J6V0RxEcrd + 5SYqTdnnSo7y3IuvK21IAkXyFkTiJuLvFfObM3+54fMjk3YTC2YbGkU4j7FBDPG/ZAGn52iQV6BHQbEO + hcVqFBerUFpoj+pSjr0qR7TXO6GvXY1JjrXRYY7ZVh1K+V4qca8iAIslWyMtV3VVAC4t1fD7WtTTmku0 + aCpRo5mPW8q0iujbXu2N1ipPtFS6M+55obPKG93VPuiu8UMP8VFXjT/aagKUfYCb+biRr9VV+qG63BvV + kgHMY11VIM9PsoBDUM9jbRWP1aFoaghHW0sUujrilf1+e7uS0d9rQl+/CT29SejojJkTgOMUAXjePBOm + pzOwZFEeFs3kYP5EGkaHEjHUH41h2iB5z0B3OAZ6jBgejMHkhJSMTlUE4IUzqZicn4DR8SgMjUVgaFwE + 4EiMzOfzeRHoHxMROBR9Y0H/JQD3TvhgcNIPQ1M+GF7gjeFpTwxPuSs2NF+EYD36yHF6xnX8nh695Jv9 + 830wMN+X3/VG/zxf9JHn9M4LRNd4INqGAlHZ4oWCSj0yC7RIzXFV9seO4vwMibaDb6g13AM5fgKslaxe + 2SPNUzK0OO+83TnXDNbw0vMzOn5GbszwNXdvO+hpGi9ruHLsiQis5/e8ODdlzIZynIbLymyS+HDOZ0sG + sRX85EYNTY4B7nydFsIxbOR7kpmbIKXLgu2RHuKIzGBaiBOy6CeyjSL8WiyL72XIZ/jbKfxOMr+bxN+Q + 54WcO5WJWtSmeqCBnLolOwANGX7IMaqQEkhfxfML53ckS0FuDAXymiXb2T9I9soWEVhuRhMLGR0RFu6I + cFmhryxWIUbi+SgCsJ8sTLGnb3JQTMo7S5tImTrFZL8yD1u4e0nGr2T/OrJdnJTjFQE4MFiN0DAdf1vH + /zAgIsqAqCidYpGROkTzGEful5xAbJjkSRygUzJc5eZ6coITkuIdkBzPeWZyRJrM0xRZfS97WrkiMdkF + cfQlMcn0TSYXxKe7KYJ/Bn1fzhUBWLaSSGF8NNmgymSHev5Os4nxi8ceYoqhTEeM5zhiusgZS0pVWF7p + isUVKkwVO2OiwAXDeZKFSf4eY4viUMnAlra3Rxn9bRn9WQlxYkGS7LvogDxaYSL5DM+xzKRCBf1uBc+r + jFbOOC0ZWEVyI15EYp5DmYjCxDeljH0lGWoUpquRTd9rYuyRjIwo+tMoycz4kQAs4m96opulDDTHQFQY + YxL9r5R6jlWypyUzQ/Y9s5TqkzJzUrovnH7Ssv+yM6LCLdnACfThpiQ34gExuRGkRm6WVrlBVFlFX1Mf + gMYWPzR2eKOpy4CWPh26xwwYnPLEkMzVWW+MLPZRbHSJN8bIJeYt91VswQp/zF8egAXLAxUReHq5JRt4 + wZJgTC3m41naomDMLAzDzGwYli6JwoolMVizLAYblsdh66pEbFuZgK18vJnvbVoYjs20XcvisX9NCo6s + z8TRzTk4tikHt6zJwKFlJuyficWNM3HkCqm4bWUubl6WjX0zadg2Eo+1ffz9OfF3yUAcFg/GY9FAPCbb + IzDSGIy+Gl+0lRD70H9XZTmgJodYlX1/RfztKnFHVymxUqEBrXluSmnoao6fahM/m+JIzODI8eXA/rZH + ebKdkvUt3LaROLaefVvNz5QRP5TEW6OEGKxQBGDGocIo2b/QhvzXkfjWGU0cMy209hTiJ8ZnEYG70oiv + iPl6iPm60mzQlUJcnWKNvlQbjGY6YVqydsm/1jImrC7xxlLGselcLcazNejimGtNJpbP1WOqxoiFDZGY + YWxYUBeKeRW+GC5wwyh5xWSRGzmLFqsY/9bymlfmqLAqizw22xnrclywKcsVG2nrOV5X8dqWJttjcZIt + VmaqsJFts4XjZWtdELbXB2M7j9fUBWCHiLyVWuyscsO1nFd7eLyhxoDra8ibqn2xhbFsUZ4e/ZwrLbH2 + aCKeamc7tPFxM/FqK+dcR7w9ejlPRrNdFSF4gn59xKzBIM+pl9fek058meaIfvbFII+jbHMRgYc51weS + ievYVoNsu+FsFwyxnXrZdx1Z7L80DcqT1MgJd1KqvUQRgxlpUlYzjDwwPEwyq9SIDrdkAkdHWUzK1UeK + YCNCntwUJ34R8TeQ8UTKgXrR/3vST4v4q6fP1+qtlEUzUq5VfKQ3faMPzdeH3+HnI+iTE4JtkUafIhnA + RfQpxSn0KSY18pNdkZeoQma8I1KIV5KjrZHOx+n0N2IiAKfQ34iPjGdbiSXESGli+osoG/oMEXntkML3 + f2ymOHskEfsk8vckIzg90R5FOTpUF3iggv1Rlq2mT5LsUEfUZjihiWOgnXOhq8AZQ+SzUrlwknx2usYN + i8j/ltaT3za7E3P7YG2nP2bq3NFf6IQG8qHqdI5t+teafDWqCmiFbqgsdkNVsRaVHHPlhfR9ylYZDigi + Jy01E3PNCcDN5Fot+fZoybFGGzlZG3+vjfyqI2WuFDRfk0zg+WWOWFitwmw9/XeLC5Z30NpdsLSVY7TF + TrElkg3c6oCVnS5Y06PBxgE9Ng0asL5fh9U9PP8eHZZ1uWO02gXt5NaNHP8tRbJFR4QiANflB6I43QvJ + 7Kc44ojkSAeks3+ylQwwufHvxLjFforjeCJWNsXSt8Zq2QduiAxzRXAwMUioxFrB0hxbIoiwv2VrmfBo + Ylj6Aj/ifMGpIfQPUeTZIgCnZTnT2M8iBHMsJxJnJpD/yp6tyfGyp6OIOfxvxqNUxoe0eBWP/E4cxwnn + UQbnVA4xrgjARYyfIgBLdncF504pOb5sXVDI/5E9msvI8dv43yIATyTaYjrVDqvyXTi/XbGjWoPdTVoc + 6NTTtLihTYUDbOtD7W7K/r/3DvnhJDnZfvIq2YpvA/tnDftpA/HxDvbt3nINbmrwxIFGH+ytI2crcMVM + nA2meN3TtNlIG6wkTtuR64499GH7qwNxoC4E15X7Y1O+J9bleWJZLjkgY2cjeVApY3ERLZ8cLSfaBlly + rZwbafEiyMp2CJzTkfaK+OsvC2jZtiL0SlUgP8bVQPLjYMZIuQ+kLFhlHA0Ns0EYuYtsPWERgDmf2H6y + qCKFPjkjVUQfNTLnLIM4RBZjyN6/8VJKl9+NlkWv/A/Zm/+KABxMvCZijlgAXxPhVVkEzKNUOZIs4NBI + J4RFOyvHIOJA3yA78j9raIn3NMSQLloaufAVAdjb3x5+gU7khi68Fldek2QLS8apDQze5JDEqzoe9VIi + mr8hWcCK/UgAFiE6iG2hlL0lv4yhLzBxfGXI4vwsa1Tmc/7LXCx2QGsFfUA552MJMVS+LOqwIo6xIu6Z + E4Hpa3LCbZDLNsjlUckGlr6h38phfMsjlitKkWopIgDrUJXgihrinEZ+ppttPEkMtJS+eW2+hvHGGRsy + HLE51Qm7c9xwpNIftzYZcbgxFHsZX7ZUemIxY9YgY2Ej50mNWKI1GhljOxmjenPIr4iv6jmWazhW6ngO + Umq6gUfZC7iD3H0giWOPc2BjpQHX1Xvg+jodrucYv6FOjf2NPLa4YVezGzbL/uK87vlmG3Qy5pbzN0XY + TuR4MpJLyJZEBvajC/2+LfvJntzBmUetN9va35n8XQPvAA370iICu3s5kOfb/yf7lzHCwNhw1X4qANNE + 9BUB2HPu8X8EYI5xWdwXRq7Nfgxjf4roe0X8DZUFRkEWDBkfQd8RTX/BGHHlKDEgmfMkkWM3LtIWsZF2 + imAZT4vhOIwUIZh40sjfDwm2oQ+zIV9nnCTflsWFYeEOxPX8f6k8Q98TGydbyQiPoJ8TDMq5Fc9+lnsj + iQlqJNA3JYl/kjLtqVoUZMiCIz2qaHVmdzQRdzYWeaG+0Ae1Zm9U0BcUp+sZA+lfYxzpe6UqDuemCMBs + d6myJPe54mTxoyyqIZ+RbaOUbF6ecxDndQixs0UA5nXwmiJE/GUMDyPPCmH7hV41xnK5Ll5zrFTHka1R + OE6vZP7+WACWLOBUcg8RYNN5lDgglppEH8xrTY0X8deF7cu2jBZMTjzPc4gm1ogiRhd8flUAJg8UbqYc + haeRS0pFKnkcID6DuEIqpAnGCAuy5Xftid0diN0ZEyT+KBm9OhSY9Sgi7isr9kBpkSeKC9xRZDagpJDP + aYX57ihkGyuLO0t9UEofW8T2zs/TkStpkJlG/0acmUlLUzKCZVsZ8QWSKBKApYvKcHD/PFj9alEgXpv0 + xuMDGtzbpcKJThVu7VLjlm43HOvxw5G2aE6iWGwpCcWKXH9MJOvRHe1KUOeGXpMHRjN8MZMfgPVVYT8S + gL1we4Med9VqcW+1Fg/UGfB4my8ebw/AgyT09zQYcCffv5VA45Y6DY63GHB6MBjPzY/DKzMJeGFeNJ4c + CMajUqqTn7+7Vo976r1wqsEb982VlT7d4osHxFqlHK0RpztDcLTKHdflumAtA+AyOrJVGQ7YWm7AdgGo + JD57esOwsy8UW3oCsaE3CCt7g7F8MAKrJ0zYsrgQ16yswYaF5Vg2VoTB+mQSPi8SdTtketshi443h442 + nx1XzgFWy8HXFG1ZkdnO4N2VZofBXGcMF6oxUOKG/nItBgiW+3n9XZVqtJYRhBTZ8UiA26DFZA/bbSQI + CxeEYNGiECxeHIjZKQ+sGtVj57ABJ+b54cmJALwx5I33+Pz34+74dIEH/jnriX/PuuP7GQN+mNTih341 + viY4+rJZhU9r7fFBpRXeKbPCW6VW+Hm1Ld7pdMMHo774dDYCX6yPx9m9GbhwkHZLBr4/ZMK/98XjX9fF + 4eO1EXhtzAe3VTkpez0sZKAfZvAYY/CYybbCNXScd/b74aX5EXhvnhEf9fnjTz3e+G2fL37W4Ymnatxx + J8H8dSSdK+IJ6uN0dOaeKEoIRI4pDNlZ4TCbI1FQYERxfjAqzUGoyQtAA8dUa44X+rJ1BPqOiui8koHo + 2jRrHOb/3l9li1e6VXh/vhZ/X+mJM9v8cHGXL3CDH3DQiO/2x+GznTF4f20IXp/24Fhwwskma9zMdrip + 3Bp3drvi6YV++Nm6MPz2umj8+450XHo4C3gsFZcfisPF+8Nx8WQYLtwahEuHQ4DDEbRYXDoUjfNHonD2 + eBR+OBmFr+8LxzcPRODb+yPx1d0h+Pst3vjzDR741Xotnpl2xl29VriljdZlhYMdVtjXwmuos8K6Qhss + yrbDmOz5wyDVxWvr4TVOElBtrrJiPzvi+S1q/OZGPT4+psHfTrjiH8ed8dWtrvjmVi3OndDh/B16XLrD + gIsn9Dh7VKtkAX+53xZ/v8EKnx+wwpe32eOHB7W48LQnLr4ciAuvByuZwPhFlMV+Ho3Lz4fg3ANe+O5W + N/xwxA3nD+lw5iY+PqjBmZv5P3e44/wpD5x/yB3nHtHi7GNqnHvcDRce9sTZu/m9Q5741y5vfLLGB7+d + 9cPrEz54bNgHxzo9cE2zB5bW+WCk1AtNJGOyAXwdAfQAndk2EYBni/DL/b34233T+PqpJfj7g+N4+0AV + Hl4eh6MEmYfa9DjcrKXvccepLj3nshseaHPFEz0ueG+5H/5+Pfvhjnjg4YQfCcC0n/P5zxJw+fVEXP6Z + CZdfpT3L549G4Pz9gfj6Ti98cRfnzD0++OJ0EL55LBZnX8zGuRfy8e3TZnz1qBmfnjDhza2+eGK+A052 + W+FwgxX2VttgF33XdgG2JLnLzc5YSOI9RbCxnCB4V5U17puyw1t7tPjrvQH4+vEQnHnOyN+OUATgb9nW + 378Yhh9eDsf5VyJx4dUYnmM8Lr2RxP6Q/YCzgY+KgU+KcfajQvzwx0Kc/XMFLnxWi0t/bcSlP9fj0kc1 + uPwhH7/ZgW+f7cTv76zEkzuSccM8L6xscyZpI+ipssFQgwNGWp0w0e6IxYOu2Ls+DA8cycY7T3Xii98s + w6V/7AG+PgT8cAw4d5fFvjmBS/+6Bef/cgB/fnsDXn1kHCdvbsauDWYsGI1BS70vigt1yCaAy8zVIYNA + PSvHgGwG8Nx8L+QQvGfkeCI1wwNJ6e5ISjMolpymQ3qmAWZ+rqLIBw1lXuiq0mO8UYvVfe7YNWbALYv0 + uHeVFk9v0ePVPR54aa87HrnWFSc22GL/ChtsnrbGomFb9Lc5opEgrrIqGBXV8SivTkZRRSKSckIQneED + Y7oB4aluCCOQDydBCCfxiiBoiCYhk/JfCaEE8kH2SgZObaJlr7dFZd7Y1c0YRZ9/85ARxxhzjnX74pZO + b8YtT+xt9sT2Fg9sbtFjZYMzltTaYWG5iL9WWFRii8WFjlhSpMJS2jKS2TXFzriuwQM3kAjtr/XALfX+ + ONEYguOVQThRHIhTxX54vMQXL5Z7441aX7zZ4INftfjjl80BeJWx6kmSJhF/78+2xqMk2C/WeOKNtmD6 + 01C81mnEy52heLErFM93B+NZxqwnuwNwutULx2s0OFiuwp58B1xDgr3V7Ij1OfZYnWWH5Vn2WJZNokyS + PsN4NJnjghGS/t4UO3SI8Evf08zYKPvlSSmdDoJtWZQywVgpe7YsLNJgmiR+Is8Z/QTtbcm2aDbZo5Uk + U/ZSayngscgZbRVqtJRpUEVCWZzuiDyTLcmapRSZlCVOIeHMSnNBUaYWZfTtlVlaVNMf1GWoLTfS6Oub + pXoGgX5fsjUmM9i+bIeNpfYkBc64g+PlyQX+eGbKnbjAFS9OueClaSe8tsQRb650xC/XO+C9bS7466Eg + /HCK8/5xybytxYWH6vCPg/n4zeo4PNPliaPp1rg90woPcxw+JQJwsz/urvfELRVa3FSmxqEqLY7x+Uni + iAc7A4kvvHBHmQuO8lwOsl1uTKY/Zyw8nGuFY+U2eGhIi59vDMRf6TfOPWcG3ikFPqD9oRz4fSXwm3LO + 2SJcetHMc8rBhZMZ+OGmRHy7IxL/Wh6Ev83zxke9Brxd54inC6xwknHgKGPd/lRrbE8lbkmyJWG3UcoT + yR7AsQT+kokWRXAZH04gGy2ZDASdETYIJ9GWbKqkBAK7dFsU5TujqdYT3a2B6OPY6euQ8uveqCNZLy+w + RynjupSCriq2Rg3HdH2FDVpqHdBW74Q2EYAbVGhvtFhnkws6GtXoalCjs94VnXyvo46fqXPg0Q7ttfxu + tTWaGMOaaV31xD/NGgxwLrQTc9Vka1BEoJ9EABxFEiXVVHxtSUpJfHMJ8utIGPoIXhc0+WBJpxdW9Hpi + Zb8H1g4asHHUA9snvLBzng92jHpiS58WG9pdsarRAYv5v4s5L1c2OWFViwrLG+n3eA0zFdaYz2saL7LG + GGPucL4thtgePQUaNGapURRPDBdngyy2b1aKPYmAtXLjJYZjVSyOcyIh1pZAXFZLktgQ+CeJOBpnMSl7 + JCZlkYwE/JJ550vSrZQunhOALeKvNfyJESUTUQifEHzLqmBrknw7kntZyUoSQGItmatiIezHUPanWBhJ + m5SbVjJ040mykrVINLkpvjWBx3gSFMmSC2csCiVJl8zX6AQSviQSv1TJAiaZ4fWKAJqerUVKBs8/UTVX + ApqE6Ucm/xHD/xCBW56HKjdPZCW9rKiXmypWc+dqTZJFMkWickU4jk8S4VdD4zmSKAmBkVJIxhBHhAQ6 + kABZSj8HBzkjMNAJPrx2EehE+FXKYdPkZoiYCMAebD8/ufEq4rpi8pikT26gsD2C+f8BbCcxfxJ2MSVz + mibZFtKOYZwLUezjBJOTIoDnFxmQX6xHQRH7v8iVxMkR1aWMK8S4HfQx/e0azIwFYnLYH50tJK/Fdkjj + XFdKQNNPigCcmuOMvEKO5WI3VJTrUc+x3URrLdOjrUynHBWr8kBrpTdaKjzQXO7Ox15or/BCB1/rrPJF + V7UfOmitVf5orvbnvPFDI5/XV/qhtpwEWazCh89FAJYs4GBakFISWjKBG+vD0NxoRHtrFDpao9HVEYvu + TlpPArq6Y9HeEcVjDAYGYpUS0GNjiUoW8KLpLGUvYBF/B3pj0N8biYG+KD6ORG+XEb0dYcpro8OxmD8v + CbOLMjAznYp5k/EYHovC4Eg4BsZEAI7CyFQ0BnnsHzeibywMfeMhigBsMX/0ERMOTfpiWDIKp8U8MLzA + YDFyGxGBByQbeMJiQ/O9MTzjh8EpPyULuH/SD/1TARhYEEyj/5o0orrNC/n01emMTYnpDohJdlDKBAeF + 28InxBrunG8G+hgPXzuOIxu4e9jC091GMdlry6Czgd7NGjodx56ec1L28PK0h5unLVzdraHm+NNLKT1+ + X8ZtOMdtZACJOX83yteS6RvEeexHv+XjZgVv+jIfzmf/OQvm9+UzUhY6OdAWpiCSbRL81CBHRRCW8tCZ + nBPZYU7KMSPYARmBNjDxt5M86XP4/RR+1xzhiPJExsgUD9Sl+dBn+TNW+iEn3JW/68A4YKsIwLIPmHIz + gecnvsYvyFaxwGDOFf5fELmpCMFhESqEGp342AmBQU78rCzCkBuNUlZQhF1LZq/cfBSTMoQGLxrbRm5q + eXjL+078nLNy9CAHFvMP0tAv6BAQIkcpa6hFaJgGIaFqBEt2cKhkB+tgSvRGRooPctKIF9M8kJdhQB6x + gDlDowi5ecQTcsxJVyMrVbJVXWGiJdHiUizZv4mZOqTM7WeezaM5wxUFaY4oSXNQ9uGtJT5pJMZoTXMl + /3bBYKYLJvM1mCKuWljkgqUljA8VrlhS7oJpqc5VIKKR5bPV9JuFjLFZwYxH9HmFxI9F9Pki2BTQnxUk + OismMazUZLEy+l6xUpMrSog7i2mFiY4oSuI5kR9I5nBxCo3nU5zOc+U1ZCUwZtN3Rc+Jv5G0n2YAS0UP + KQEtArCUmxSLltJ94YwD4fS59IeSuREa4oBQYlopPxoaJONVxGC5ASVZwGwv8u5UqRCS7IY0E2MAuXgO + 21zKxlXR7zQ0BqK1PQAdPf7o6vfh/PXBAPnEEOerIgAvFOOcFVvM+Uubt8xHsQUr/DClCMBiQVgoIvCy + EEwvCcbMslAskpLQS8OxeEmEkgG8dKkIwFFYtSQaa3lcLzYbjnULw7BuJhQbFoRg84wRu5bF4foVidi3 + MhE3rjbh0JoUHFqZjP2zfH0qHHsnjNhPn3NokQmHl6bjxtkMXDvfhPVDMVjWG4VF3ZFY0BuNKdp8+rfx + VvqrugB00e82F2pRS8xanU0+yn5v5NhoK9Chg3Ghu9RDsY5Cd7TkapUSz5VSmSbJDlXJ9orwW0YMW5Jg + jdJE4jERgPmZhiwN6oljq1Kd+L4d3+dnYq0V4beQMaiQ+LeUMaiKY6KO46HRpEIzx0lbigvaOTa6OOa7 + 0omvOP57aF0Z9ugh9u5Ns8OA7HmbqcI0Y9fyQgP5hSdWF3lieYEBs7QZPh6Zuxnezrg+VBKAydowzBfx + l7FinPxmmHhHBOD5pW5YUmHAukoPrC/RY0Uu50KmA1ZlOWJtjgrrOFfW8Xok+3elyQFLkoireJ0r0p2w + ntxva4UfdtQG0UKUoyIAV3thm2QAl6uxkxh5T6Ub9te444Ya8irGuM1lPphPfN9D7t8ca4f6KFsaj8QP + NaFWqOF8q2cbtcaR3xGrDPL/h7PV6M+W7F8VOZpkRjuih/3QRxvg41G21Qjn/GCyHfoUriAisGQBqzCU + q0Yf26qDPqUhVYMyzrUcoyP9pR0i/YilaKH0w2HBKuISF84j+iajG/Gz+Cg3REXKY1dl4bCRcyv4ys1a + +lp/YhXZY1PEXxFcBMsJjhM8p2EMUEq3etAnejnC29sBPvSNgd6c34wBicR46ZzfeXHOKCQ+KuY8LEim + P6DfyKdvyU5wRDoxfgoxXAYfZ4oYlWTJAk7j+5KBKOJvXDTxqGJSEl6yuWyUctDyvlKmWEpH00zxxH7R + Nogj/okhHpK9IQtFAC72QmW+O8qJxUvYhmUc09WMoU3ZxD+Mp330iSPlbhivcsO8KvrN6jkRuM4NSxtk + yxVPLG5wx2iJlGJlXxIbiQBck+OEOo6z2iI31MkiizIDcZE76nmsKdWiUkTgPPrEPM4hWg1xVwOthRy3 + rYB8I9cGbZnW/yUAd/K3e2iSCTxWbIv5lU5YWEee3eKK5R1qxZa0OWK2lWOVx6XtTljRqaK5YHWPGmvJ + Edb267CqW41l7SrMNDhgkrxmkL/TQo4sZeAbJNu/lNiL86YqxxdFqR5IIb6MJ9Y10UeL+GvO0CKX/juD + /jwtQcp0SwloR8STc0VJhl6YC8JDXRHC8STbK8hWC7KNSkwC8Yngc/Z3NPtHykArFWs45hUBmPwikRw8 + K0+DbDOxeZazIgDLYkPhHnHkzrJPY2KcCPoqpMh+7rEaZWGQPBchVMkKZl/nJjowRtkrsUYEYBF/y2kS + F4v4HwXErSIAl/J3W2P+IwDPpNpiFXn9hkJn7KhwwXW1LjjQqsWN7ZzHrS5K9u/RLnfc2eeLU8TEJwd8 + lD2At5MzrmffrCBfWs3f3ZJlg70VGtzY6IX9jT7YWanDEl7LEK93lPN8gtc8n7aQGG1jugY78w24rsQD + u0s8lX3Ht5rdscnsgTV5BkyIL+P5VXPcltIKOcbzOOYzRQDm9abKwrF42Q6BcTBCMA7blCaLaP3Ij6Wa + kpgsFA1hrFS2sYkW7CML4shj+FkpiWwRgO3I8ewV0SeJ88dEXpSWJH39H0uRRWr8jGRPRvMaJF5H8PdD + A2XhHfuS2EtK817J6hPhVQRYWcAqVYyEE0oWcGCYxQJC7ZTtgrz4WfmMiL9qYklXYklXHsWnSKUoyfwN + lHFl1CAoTM1rUylYTcff/KnJAtorAqP8prevBQtKtSbZ91S2BTGGEW+QFyWw/1PYZ9nsv/wMaxSLEGy2 + QUOxPXmLI5pL6Z8L+RrnXVk641gSx0689AEt0pa41Ab55KR50i80EeelBHk2MXh+sholKXplD+AKcsnK + MFs00tf3sv2mOIeWZrsp1SdWE6etpP9ewfG9nfHzAGPLzU1GHGwKxZ6GIGyuop8hZhuib5F7U/UcZ7U8 + 53qTLeMc4yT9l8TOel5LbZS1snivnufQSGuhdTDe9nD+DJPbryrW4No6D+ytN2BfgwGHmvU41K7HwQ5L + hb/dHRx/TRosq3LERJE9mlN5zfzddPGd7O8g9rVUm3JjmzrT/zvR98tCUT35vEcAeWyg+qoA7PETAVgW + esuib4kXV0zihtiV5yL8evH5j80iAJP3E+NFGR047hi/OO7CeS4iioZx7FwxKUUeSSwZy/EZx76xLAyS + GGHNcUv+wbFtkkXsjBcx7DcRfxPoP+KE6/OxlEM2GkVY5fjl3AjktcqigTD+p8wZqWIQwc8oi8OVewMu + yuuBQdYwhjPG0A8lMkal0ldKhRkRTTPTtMgnRi/hfK5gvKnifK/lPJftPRuKvFBb6M3XvFCa646iTD3y + +N10mdfRxMH0k1LSWkTgcJpk2yvbxsi9BJ6TJfvXsrgjaE78vWKy2CM8QgRqC9eRhRdhV43Y+P8hACvi + r9yfYntdKQOtiMByVPyCiL98TL8upZ8VAThaBGC2I8/PYpbqIZI9fUUADpJ7GOR3gcQBwtEESwRw7Eg1 + ETHxGYLflUWc7G/JHo6OslSek/OxYHZynVw9igs9UFHqh/ISuR/vqQi+xWzfUmJW5cg2LmWMryDuki1e + xEqIEUuJG4uUjGAtcoix0onvUolr5b5sBh/XVvhj6aJSHNw/AaufT3jhhWE9Hu5yxr0MrncxuN7V6Yo7 + u9xwR4837ugMwy1NBOKVgdhW5IOVWQbMZ2OOmfSYyg7AooJgLC8NxZa6SOxtjcSh1mAcbeH3GvU4Wa/F + 6XodHm3ywFOd/niyMwAPtHrhniYD7mo24LYmLY418386PfDwaChenBYBOBEvigDcH4RHOn1wX6MH7iRA + OVljwD2c2KcaPHF/ky8ebBHzxmnJLO414mHaHQ0+OFThju05zlhBR7acAW9DkQbry7RYT+C6vtaAVQQ0 + y5v0WNLqgUXtXljUw/MfjcPmxWbsWl2DvetbccOGLuxY3Izp9hzUpXijMtoNxSRaBezUQlopCXclHW29 + kQ6LjqOTJKCfjmo41xWDZjV689VozyPoz1ehtYAkIJ+NnsvvZNOB5dmijQB6hOc92U8yNR6ImQVBmF0Y + gGXzvbB+nM6Ldu9UIF6cH4h3hr3x+yE9/jSuw18W6PGPxXp8uUSLb2a1+H6BG34YccN3BED/7nDFXxod + 8btaK7xTYYW3q2iNDnh/0AMfLQjG56ti8O9tybh4MAuXbs3GhTuy8f1tqfj6SCK+PWjC5zsS8YuZINzZ + qGGQtqMDJxgjOBkmOJvMJAAoc8LNHR54eiwE74yG4E9d3vikzQPvd3nhbbbjy9XueCBfi0OpbtiSoMVM + vA49CSSeCb4wmwI5qINhzjOiwByKUlplbgjqcoJRn+OPthwf9JKojhLwT/E/19D538BgdFu2NR6ssMVr + BHrvT2rxt+Ve+H6zH87v8MblXR64tNcf/9plxIcbw/DGYh88M6LFqVZ7HK+1xk0lVthbaIXDtbY41a/F + 0wu98eZGtsORJJy7Nx14MM2yx++9ETh/VxjOHQ3ChYMhuHQwAhcPROCHPaH4encgvtwXhC+OBOGzo/74 + 9Jg/PrnFF3/c7473d6jwqzVOeGHSAae7bXEL2/0A231/tRX20HaWy8bzViRdBLMmR/QnOKCLwFz2qOrh + 9U0x4G6rs8HJGVe8fq0Bfzzmg7/c4Y4vTmrx1d0afHuXDt/f5YFzdxtw/m5e60lPXLzLHeePG/DDzRp8 + fdAR/zpgi38dtMHXtzvi7Gktzj/hiQvP+eHiS4G4/LoR+HkU8EY08Fo0Lj8dgjOnvPDdLW44c0gEYDec + O6jB2cNqnLtVgwt363H+tB4XHuXxcQ3OPKHCWdr5R/iZk2p8f1jDttbi07W89iXeSnbuk2NeuK3PgGtb + dVhWR3JKZ9SWQzJAJ9ZkcsFgtpbBNhKnZgvx1r4efHrvAvzz0UX45J4RvLqnAvcsjMNNnX5KsL6ec/xg + vV7xCScaXXFHnSPuabDD6/MN+Hh7KL45FoVL98cCUob7VZoIwG8mAW+ZeKS9xT59MwN4nccX+PpT0Tj7 + UAi+ezgU3z7B/nwuAedfy8Lldytw+Z1qnHurCmdercK/Hjbjt+zv55ercWqQ46XRCtdVE7gS1K4s98Qi + kumJVAeMxjhinEF3WZotdtXY4L5pR7y1V4/P7wvEt0+ybV8w4tyL/J8Xjfj+eT5/MZQWjvMvReLiy2z/ + V2Jx6dV4XPpZMi7/kuf5+wLgT0U4+8cC/EA791kFLn1eh8t/b8Tlv9bj8p+rgD/WA79q42+246OTFXj2 + 2mQcWuCDdSQ48zjWhqQsb50D5rU4YbrDCas5/o9sicITxwrx4fP9+PrD1cA/bwAnOXDmNrCTgYu0Myf4 + 2lG+dwhffLAN7z4/g8fu6saN15Rg0XgMWmq9UUyCl0uykpWnRYbsOcB+zWEAzysQAdgdGTkeSM0wICnV + gMRUPZJSDEhO0SE9ncGLYKCiwBONJQYMVOsw26ZX9ug5NuuHRzf449WdfnjvQCB+f0sg3jvmh9cP6fH4 + Xhfcud0Ju5dbY+W4NUY7HdDK+FFfF4La+gRU15lQVp2CrJIYmArDEFfgR/NCLM8rPkOPOJ5DXKKbsiG/ + rCBLZmBOI5gqYeBuJegYZsBcWR+IPYPR2D8Yjhv7gnGwxxc3tbqT+OhxPcfeTinnXOuGdXWuWFFjh8VV + 1krp49liKywutMXifHvMmh2wKM8Bs/Tny/PsFAH4xkZvHKzzwtE6P9zO/zhe4Yu7GLRPl/ri6TJfPFfm + iZcrvfBatRferPfB280BeK3GE08VuuB0tg1O0R4iOX662gPPNPji0Xo/PFjnj/tp9zX441RjAOOeL+5u + 4H+Ua7CP57GL/78z2x47zI7YZnbC+hxHrMiyw5IMeyzKssdMNn1prjPGc1wwTLLZnWqHtmQSQvrXBllh + ybhVTYIggLs71QYDWSoM52g4Z9XoYSxrpc+qi7dHBclYJUFfXbob6nN1aCxwI6ijlcoNAA1BnSvMaZa9 + i1L4WwlXBOAEkl2SgMIsHcqyDSQYlv316uVmTbozmtMc0Uqy2k6yOmCywfwMGyxmfFxXYI1dVfSn7a54 + YNQDj4y54bFRZzw+6oSnxuzx3Hw7vDLrgJ+tcMIv1qnxp71B+PfxZJy7z4wLD1bgh7sr8Oc9mfjlkgg8 + QbB/M0nPCbbvI1V6PNnij4eafXFPvQduJxY4VkcMwjY90eKHUx3EJp3BuId9eVupCw7RP++lnxa7gTFw + H2PgARLhE23spyUe+PAg4+kjmbj8ViHwfgnnajnwEefs78px6d0SXHo9H5eey8EP96fj30fi8dU1Rnwh + i1kmvfDpgAG/blLhpTI73Mdrvo2/fTDDCrsybbAqxQZjJDP1JMNmktx4EkrZGyWKRCAulGA23BlGgmIp + hRVCExE4ju2dzHbMyXZAQ403uttDMSR7ffZGoaclCHXlOpTnO6Ik10YpBV1VbEOzQl2ZNZqqHTjf2Rci + AtdfEYFd0dHkqhy7RPytc0F7HfFMrTNaavh59k8T/U8d50adCMk8tlbboLveBT3Ee23EW7UcFyUmFdKl + vBpJajgJb6iK44NkKt9oi9pUNboLDBir1mOa829JpwHLenRYzVi9fohxY8yAayY8sWPEHVv63bC5S401 + Lc5Y1mCrlH5e2azCqhbZK4xzkXN1mvFWBOAJXtdEkS3GSHDHip3RX8T5TzxYnkLsRkJZkGYHM2Oy7I2U + zPkgbScWL2M3Vm7CCCEg4BcBOFGLhHjtfwnAUh4p3OioZMj6s08kC/iK+QnwDyYBILgXMViIn9scyRey + 7hfkqBAVWVErpeLCSdLCOb8sJuVbxWSvYUumbhSJS2yCBvEitJrckJCsoY9zQVQcCQ7nrwjHETHWiCb+ + tAjAJBFpJDNZrkgjaU7NEuHY9Ud7AFuE33ASPDF5HBkjj0X4JUmRrF8SQ2V/LZpFAOb/iADMc5Pf+E/m + sKtisiJYMozjYy2kLTzMWRElAoMcEBzsSALnQoLpfFUAviL+KgIw2+eKAOzF9vMPkpsmcwIwiahYMElX + cDR/J0Ze4znxuhUhOIKP5fmchfB5KN+LiCMhTrEIwOYiA02P/AI1CgpcSaKcUFnqdFUAHmx3w8LRAMwf + 8kNXM/1UoZ0yLpI450UAjqNfSslyRK4IwPR5VeUktRUGi8Bb5o72Mj1aFONr5B3NxAtNZR5oKrU8bqHf + bysnJir3QTtjQlulL1p4bKQ1VfjxaBGA6/hcjhYLtFi1iMBzAnClCMAWa24yooV8rL0tEu2tEWhvj1LE + 347OSHT3WgTg4aFEDA/HY3w8CdPz0zB/wqSIv90d4RbRtycCfd0RyuOejjD09URimHFxcjwBMzOpWLDA + hPF58RgciUTvoBF9I+EYmheFoflXBGB+fywcfeNh6Bm1ZAErAvA8vx8JwMSD0+4/EYA9MSTZhnKkjc34 + YXw2EEPTfuifFAHYVxGAB2eCMbwwDIMLwlHb4QUzY15KLn1fijWiEm1gjLVFIH2IT5A1PEioDTK2fB2g + 97JXbsq7G2wUMxhsodPZQKsIwDyKGeygc3fk2HOARvbukoxXbylTLvtuOSGKczRWMm7J8+L52zEcs0aO + 00D6LxGAfXRW8OZ89tVbLIjj18jxG+1rhUS5+R9giwQ/GyQF2MFEop/KeZBGf5AlAnCYI7JCGStD+Ro/ + l+zD79A3pvrbwEzMUhLvhopk2VPNEzXp5J0pXsiN1CI5xJnnZAcjfUoQ54ncRFDE358IwIoIHGKvWIiI + v/zPYM49iwAsWcAOStnSHwvAlkzfOSFYRF7Z5+x/EYDdFXFYShSq4RvkxqMLvGl+QbRAFXwDnOHHNpT9 + MCMiRAD2QXaaHwqy/FGY64vSfD+aJyryDSg3a1FmJnYg3ijM0iIvXW4mucKUpoaJjxNlT/MsPZKJ7VJz + 9f8RgDPVKMx0RmmmE6oyVKjPckFzlhodmRr08L0RYpepIh0WlbhhaakbVnDcrJIFnOT+C4lX5hW6YihX + g450F1TF2ykZmyIAZ4fbIo/+q1ARgMn1JWsvWa1YSbKIvRYBWDnyuQjARXxcxMeFiSoUJTnzsYrxxQWF + PBak8HVej5k8KJ2+UspISgawZDf8dwaw7C2mJW7SICGKffxjAdhojyh+LpKPI0KknK29Iv5eEYBF/A0O + cJgTgOmLozVITmRbcfxkEIdnkIenp1j2OJQbR9Wy8KQ5BN09oRgYDMMI5+74ghCMLfDHyAIvS7a+LNi4 + Yos4h2e9MG+JDyaX+mKK2GXBMn9MLwugBWFGTMpALw7GwqVhigC8eGmEYktEAF4SieWLI7FycRRWL47A + mkW0mVCsnQ7GuukQbJoOxdYZI3YujsauJdHYvSQKe5fFYt+yeOxbEos9nPu7xoJw7aAfrhkMwO4xI66f + H4c9U8nYNpGIlX3hWNARgonWEIy2GzFCG24zYrAhCJ0VXmjhOKg3qxUBWLBIQ74bmgq1aCv8jwDcRT/d + xvHYlOPG+SbZ3cS7ibaoSLJTsn5F/JW9puVYRbxax7HWwM/WM7ZWEcOWEvOWJdmjVEqFEzsURVmhOEaE + FxvOY0fUpDijgRhIsoCbTcS8yQ7K2OvMJKYi3u7KdkFXlhN6aVL2eCiTPJPje4q/v4RzZAXx0QqzHkvN + HNP5+qsCcLNkF3PMdeZ6YLDUD8OMI8NlPhgupp9lrBorUmNBBb9f64lNdb7YyNi0kjx2WZYDVvB/1mQ7 + Yy3/Zy3n0OpUJyzn9c4mWisVrpaY7LCK57aR/7W90h87qoKxvToQO6r9sa3SA1vK1NhOfHxNiTP2lKsV + AXhftTeuY2zbWOKFUV53R6ydkp1VTexXwfFeGWRlMc61WuKJRr4nmcA9SZLtq1L4Ri/bv4fnIuJvF9u+ + R7KcUxwxTDwzTFzTz/OTikXd7AsRgQcznDDE+d7H9uigz6g3ca7Gqf5bAPaVcv5SzpmYhH4pPESNiFA1 + 5wuPEW6IpElZ6Aj6SbkhK6KvP/2xv48tfGW/dPo8DxFZBK8IVqHfvyIAi4ij1YsI43BVAA7y5fwOskMy + 8UsmcUse535hIn2FLChJol+gf8in38hNZAzg9WfE2Sn7AufQj2Tz9Sy5mW4ibqNPEaHqigBsEX9pfJwY + 66BkMMpNa6V0JcdBCp8nRNsghv4sirgtKUYwLmOJZP7PCcCl5GilxMBV6XZoIjfsJB7qL6HPrNRivEqH + iSoN5lfRf9JfLhAhuNoV03xtvETGKfF+qjVqyYOUDGB+vybPFTUcaw0lejQQ/zSUW6y2RIeqQjXK8hzJ + De1RnmePukJHNBU4oYXWUeCATr7WTk4mJaA70i37AIsA3EXr5mtD5CgT5Q6YrlVhcZMLlrSpsaxDjcUd + Ksy2O2MJj8s6XbC8y2Ire9RY3UdfT1sun2l2xGQNeVS1HXrL7dFI3lOdQc6Rq0YN40kF+WgRfWReghtS + rwrAbLM0LYpy9Gw7V2QRQ0omdaosCOV7MZJRRnwfxlgaSkwbEsY4F0k8nqAnDiY3YD8np8oiTb7GPjVG + 2UDZokQWJhKjxybZwsQxm1OoJ57UI4vnIlnAiUnWxNBiNkgkZ04i104mpk5WKj0xFka7IinOVckIzuDv + yt7AZlqhLDiifynn/ChPZ1vTilPtrwrABcSwVwTgfv7/uCIAc27nOGI9ueC2MifsrnbG/kY1bmzVKOKv + 2K09nrh7wB/3jQYqZaAPkg/uLLLCZvLhNSYrrE+VDGA73MBxclOzNw6QT28rd8O0LM7gHB8kZxihjXKu + z+NxGa9pPc9xM33KNvrhrcTl2/IM2EK/u85swHSaC/oS7NHE8V3F8V1C35Eve/9ynGckqDjGXcjJpMIF + +VI425S/KeKvP02EX2/hYLQrArBUMooiR5MsYEUA5mfC2L9R0ofkWLKPsHA8KbmaFCdzR8p7q66aZP8m + cP7I/qmR/A8Rf0WIk+xfRQAmBgsm1pNsPlksIgKwN32GVDaS7E/hgQFBNvALpvEoFZ9k2x9Z4CrVjjT0 + H1cEYA2PsiDWQ/wN8VOwUYPQcDfyH1c+F/xlBze+L6bjd8W0IgLPPRYTAVgqS8niWamcpFSBYVuEEWtE + GK0QS19r4vjKTLVFTpo18jnfZCF4TaEtmkvZ7mX2qC+UOW2Fqmw7lJEflzAOFtE/FdAHFbDNCsm95LGZ + 7ZJNP5NJkwUs2RyrBRz7pbQy8skKtncj/U+/CMApnLfEZCuI0ZZxXM7GWyvlwTdkqLGbseqmxjCOvRDs + agjAesaVhfkuGEq3VqqpNtLqyc3rTdZokSoZ2a7oypSKq3aoj7VBA/2miMBNfNwSZ6sIwFIGuo/jfQn9 + zo4aPW6Q+3LN7ri53R23dPHYZcCRPncc6PPA7i49NrXRVzS4MGY6opbtYmbsk/L5cj/Fn3HLg32nIy7X + sJ91wuV59Aiwh7c/8bCfqyUD2HtOACYu1ntYFje7K4tQ/yP4yj0AsSvP/28BmP3FvosxOhAfWrLPxZdL + 9nk4x5CRFib3gnhe8lpUmGwnwv6NsEZcpAjB7Gf2mcQOWRykjGGO+bgrAjDnUCyPwt+NykJvzg1Z5B0s + fN+a/syG408We9sq9x+E48cRD4tvk9cCAslzRABOcEKCLFQivk0jXpeyydmMNYW5BuJ7SfzxQGWhB6qJ + sWqIR2qJI6oKPIj33VFMPF+Qqec41CCdvswkvlXJtLdGpFwn51kkx6xUEouMJOblHJbMXxGARfz9qQCs + iMDhzgiV8s+M4f+XABwTo/ofArAi/orNCcDJiq+hP5AjX/upAJwcq1IygBPoW+KjZR9gOdLXS0KGVFuS + BZrBPE/G/0DOxf+nAKxUJiGf43cieE1yvTHRDoinT0rmOWUSu+eQ/0ip58qyAJQT413Z+7cwT48S+s5i + mgjAJWzvMuKuUpoIwCIGVxMP1hCzSWZwYa6OscyRvIBjI0H2m/+JAPz6qDueH9Ti0R4VHuxS4XS3C+7v + 0eD+Xi1O9XnidG8I7iG4vq0xFIdqg3E9T2iT2RdrC4KwsTIGW+risK0pDtd3JuJgVyyOdoTiVinbzMl3 + b6MeDzbp8XizB57u8lcymB5o98KpVnecbHPH7W16HKfd3eONxybC8fLCBLwynYgXxqPwRE8AHmrzwr11 + epwodcWdJHF3cWKfqvfCA81+eLjNnyYZwD489xA80mfE3a0BOFbvh72lBqxNd8DSFBusNquwskCF5QWO + WErQuqhcRWDjQoDggvFaNcab6Hz6wrB2Kh3bl5bg4JYOHN8zjjt2T2Hfql4s6czDaFkMujMD0JTkjpoo + F1QSDJQxIFRz0DZywHYyYA2RtI4SjA4ywInDaiTQqqPVEnhUETSVE9yUMniWE+A0SGZKjQEjbd4Y7/PF + vBESrAkfLB33woZRD+wf98R9kwF4mfabER98MuKBv0y64+8z7vhisU4RgL+e1eD7GTecHdfhzIAbvunW + 4PM2FX5XZ413q63wToM13iNI+mieHz4jKftyUxK+352Gyzfn4PKJXFw6mYMzd6Ti26OJ+P5wCv55XTLe + XWLE/Z0euLbIEVM8VylVPMigP85zX5pvh32NOjxMcPDWUCD+2OmNP7GPf9fugd92+OKtWm88WaDDiXQd + rk/SYTXJ6HiSBxoTvQhWvEny/ZCfE0IyGmIRgHNCUUdryAkkGPRGX6YWYwT6MwREG/ifN2Xa4q5cWzxc + Zoufdbjggwk9/rLUG99s9Mf3W7xxZqse3+7wxMeb/PHmUh88zXZ4kGP3RL0Nbqmyxn6Clt35VthXaoWj + jY64f0iDl/j9j3ZH4bvjKbh0Kg24LxHnT0bg7B2hOHNLEM4eDMb5A0a2UxC+4H/8dYMBn2xyx0c73PHb + XXq8u1uPt69R442NjnhlsRWeHbfCAx1WuKPOCof4P/uKrbCHdg3/e5PZCqsyrXg9NhhmQOxkEG2hU25j + oOnl9S0yW2NXqyMeWKbDL/Z64dM7gvCPU3746j4Dvj6lw3enPBTB9izt/H3euHi/Dy7y8cW7PHH2Vh2+ + vdkV/z7kgK9vdsR3J1Q4cx/HwsPuOPcEP/dsIC69ZAReiwReiQJejMbFx4Lxw11e+P6ICL86XLhJg/MH + NTh3sxrnbtfgwr1uuPiQFpee1OLiM3zvORXOP6PChcfUOHNSxTHiiq+u0+CvGw343UpvvDnjiWfmeeL2 + fi2uJYBcUeeOsWJPdOV5oCldi1Y6+VE6rK0tkbhrcT5e29uO3905D3+8dwK/vrUHj28txM3jkdjV7EOS + qceOMjdcTyJyk2Q3VjrhULkdbq20xlP9LvjtOj/842AYzp7ktTwRA7xAezUBeD0ZeDPFklX7C/anIgJn + AW/w+GoyLj0Xi/PPx+IcH194MxMXfl0EfNxIa8Gl39N+3YzvnivDx8cT8cZmDzw0zxaHm62wk/+7olCF + BQTpgySiPQQ7PRF2GGZAFYFtZ40d7p1W4Rc3eODz+wPx7VNBOPdCGM6/aMTZF4w483wozinG116IwMUX + InHpxShc4HmffzkeF98wAe9m4/KHeTj3uzyc+UM+LnxWhst/r8Plf/D8/l6Py3+p5nny+F4Lzr3ejr8+ + VI2f3ZSFO1aEYHufGxZWcV5yzE3VOWJhqxOWdquwaVyPW7dG45ljxfjDC4P47ndrrgrAl8/chkuX7sSl + y3fiojz+6jAu/eMAvv7jDnz46iI8d6oXR3eXY+m8GLTVSskJNfLyGIjytEop6GwGkhz2Zx4DkQjA6SRR + JslKY1C1CMA6mFLckJHuhvxskkCCgWaSw7EG+uI+LxycCcGDGyLw5g2x+N3haPz19ih8fqcRf747BB+c + 8MNbt3njmUOeOLqJ1zFlh6leJ3Q3adHeHIbm5iTUNaahsi4dhTUmZFfGIq3CiJSKIKSW+CO90A8ZZj+k + Z3kR3DPAxzCI8liQqEFTjgdGyvwxWxeErd1RuH44Cnv7g7G3ywfXt+qxhwRnd70Ku+pcsZ22scYZa2rs + sbzSCrPlkvlLK7DCYs7XRXm2WJhjhxkS4hn68WU5tthT56Hsg3O4zhtH6QNvq/HFraXuOG7W4Z58HR5j + gH66xIDnytzxIu0Vgt03G/3wWp0nnip2welcO5zib95HcvxIpQEPVnngDsavWwrdcLiAVqzFYT4/XKLF + TSTsewXgZlhjK4H8tiw7bM8nsaKtJbGT7N9Zjs/pbAJwPp9k7Bs3uyoLkyTLoC3VBs0kh/UEy5WRNMkC + po9vJxHt4VjvY1+3SXlmAu3yWFsUk5QVEaCVEgBVcD7XSGmXAi1BnZagzpVEwlm5IZtDUJHO75jirJUV + p0kE0ikJDshOc0V+lhtKMnWMe26oZoysT5fY6Ez/4Ij2FFt0JdtgyGSDKcbIWZLMlTlW2EL/ub/OHieI + Q072OuPeXgfc12uL0302eHiIPmHSHi8ucsRry9X4zfYA/PVgAv59eza+v7MY/7q5AH/YnoK3FhnxKLHF + sRwb3EHC+hB9yyNNssevL+5pJMlt8sKdLT7EDP64pzMQ93cFMfYF4076sZuLnHGDCLJsm+tIRnan8MgY + uIvnd5Bz//4JDd68Nhif3pWAsy8znr5bAPyuzCIA/7ESlz/gXH67EJdeycN3p1Px5c0x+OqaMPxrhS++ + mPLE54zxH3Zp8FajCk8yvt1XZIvbC+1xiP+7g302m+aADgJ6KYuVSpwh+0yKwBAbZIuYULnpK+V7rBQy + LOWtotmPImCmkeDXVnmjQ26E9sZhpD8RvXwsq/PLOEaKOdbK84lHiu1QVUISWGaNhkoHNFbZoVmE3VrH + ORHYFR2N/x9l7x0eV3V1jatrJE3RaGbUNRqNeq+jLo1677333tw7xjY2NmDABoMx2IBpBgM2xfRQQk0n + CWmkkjfJm57QbXBbv7XvSIa83/N+z/f7Yz93yp079557zt5r3XX2PlpuNehp1qCb46KrwRsd9Sq0yf7V + rmipclKyiBt5r0QE7qhxRk+jN3rpv9sr1CSUHihLdUcBzy2b55kmGW8krzkkEuUklU0kEL12X0zU+GK2 + WYvVHVqs6yVhlNn8wxrsHvfFvkkD9o35Ye+oDvuG/bCrV4utHSpsalVhc5tk/3op2cCr6zgeq52xxJgx + z/acJ7GVMnIzVd5K6boejpmmXF5zrjtqOC4qi0hm80iKeU9lDWURgFPZfmkkqekE/xkpAv61JAS+/MyX + wHxZAE5wCMBSMlDWppGSW46MX4eFSXavzP62SLlVZxhJ7mRdTZkZLMQwLILkS0oO8hiOdXhViCN2jFdM + BF8RZGWtYcc2jsTFMRNXTTLmEFqTSFBkfyXjlRbD8eYQgN2RkumBNI7fzFxv2IhBs0jAUzKkNB2JBvHH + VwKwiMzy3h3RjGmSrSDl1GS9XSmvJuKvZdlkkoH1SgawowS0Q5yW8xdS6aUQywT5PIbHFfJlUZEILQvA + kT5sDy8l+9n4vwjAfiIAk2wHf00AtpAYiUXwXCN4rtYEvifRtXBchNN3WdivZA3liGWL5PsoybRgW6TY + vBQBuIB4tJA+tIg+sJjjqtSuQk2FCMBe7NfeGO3SYWksBLPDQeht9SUudVP6RBrHfbJYhivb0pMxT4Py + Mi3qFQHYhHb6cRGAu6r80FapRxv9eyt9dGuFzHo20IzKa7H2Cu5PctZBctZOctZWGcB9g9FCa+Z7yfxt + qgm+IgK3/B8CsMNayL1aGsMVEbitxYrO9ih0tFvR1sHXXTHo64/H4HAiRkeTMTYmloTJyRTMz2RiZiIV + /X3R6OmwoK87Av29kbQo9JOrDfZFKhnBKxnACwvpmJtPxcR0IobGotE7ZEXfaCSGyclGiA1GafJ6aCpW + EYEHJ3mMKQstFMOzZozNhWB8IfA/BOCJRSkDbeLrQEwuBWFqKRjTSyGYWWPG3LoITK4OU7KARxeCMbJo + xviqcJoVo4tRaOkLRHG1Gun5bohP5/1NdUZUogvM7JOSWeHPfmNU1vUVAVhm43NrcFNM7+cOX70bdDpX + x1aMn/sqArCK5g4DfxMU7AVruA/iI0jsrST67L+ZFndkksinkcAn+PM/9STwHMvBkgHs95UpAnAgxyDH + ewr3T+H5SLlmEYLTzXIMD0cmsCIAy7rA3iiMVSM/ygvZ9BNZZpJy+ozCOG/YiVvKk/WoTKe/zvTn1h+F + CQZkRmmQHMGxxX2ltJiUfpZrl4eLwfKwcVkAljLQVwRgjkNZ+1cmX4SFqxBm9kRIqArBYd6KCBwY4jAR + glfEYP9Ad5iCPGEM9KCp+Nph8pBLHnD5SmZ1sA/Hqgb+IV4wKeKw/Nbx+0ApEW2m/4p2CMAF2aEozQ9D + uT0EtWVm1JUFob6MHLrcT7H6Ul4rcaU9V6uUY8yyaeizpNS3H7IKTUgnzswi5szm+/wCmVioQ3mBGtUF + PmjI16CF1lGgQy8/H6RNFGgxX+qL9VV6bK014uoGI3Y2G7Gt3oh11XosluuuCMD1ye6wRzvWf8uLcVXK + tUq2XiVxbDXxbBWtMtOX90GLimUxWKwyQ6tYGV+LlaapUaKYD4rF0n1QlO6N4gw1Cvh9Jn1lfJSrktkg + mR3xVvanKPaTWE9kJYsArEUm/Xsq/ZzjwZ/je9lKOehYqwjA9NMW+kD6RxGqIvlafGwk7220VbIQtIxR + vshkv8nL8kd+tpHmR1+m+0oArg1V/MXwUAz9Qhxm5+MwtxSN2aVwjs8gjtUARQi+Ynw/tTqQYzQIs+uC + Mbc+GPPcLq0PoYVhkba0LhyLHMNS+nlprWP939VrIrFmdSTW8fV62sbV0di8OgpbVkVh21IEttN2ropU + sn+vXRWN61bH4Po10bhxbQwOrIvHzWvicRPP64aZcOwbCcLuPgN2dNN6A7Br0IydwzzWYDQW2sMwQsw9 + 2BiMgeYwxfqbQtFTS//KftVYpFbE36Zi9hO7Du1lfuhgn+uSdX/pn/sr/dFL/9xBbtOcp0Ztlieq0lxR + TRxbw1hane6OihQXjkdnZVvLuNqYp0UL+2FzPvEv+1BluidqM1SoTvNAOeNOeQL3JfatSna9IgA3pXuh + JU1FkyVP3NGV44PuXDW684iVFAHYi31XheE8lSIAj2d7Ypb7rGFfXl/oizV5Gqzi+YkoPEOT8smN8cRw + 8gA8S4POPF/0cL9+8o3hEi0m2MdnKn2xqt4P21qCsIfttLsxQMmM2lhAnkgMtIX/s418YBuvaUuWBzYu + C8BrUsh5pHoeP9vG/9/DuHVddZiSDXxtDY/FeHcNOcse4tR9pZ64qdIHhzi2bq0PwE21gdhJ/j9BzNcT + 74LWWBGAnVBNPFFLXCFWz7HWQqzRxu+7yKl7OQb72S59IvpmqtCX4Yn+dDf08j4MsK0GyStGMj0xIhyc + +Kyb8b2beGeA5zqc5a5k/A+SX3STczbK+ExcyQAmTqHfjggWscYD4aHEEPR7VrMPx4wjGzgqUoPoKC2x + HLeRxHMcWyIAy/rxigAc7KYIwP7La246/J8T48dXIo6GsUBv5D7+bgjh/1jDPJS1hx0CsLciAJcke9NU + sKd40j94wU7fICY+QvETmRqaFsVZWhRxvBaQU+fIQ+oUKd0pmb8rJmLwsoBF/OcQCh0CcAaPLQJwfJQT + /YVMwnUh9/Kh79Wjiv61kjiwOscb1eR5dcTBDgHYByMV7C+1vpiq1WOqzpEFPFunwUy1D6bK2RftbPc8 + V7Qy7jYQD9VxW5vljNocN9Tme6G+2AfNShaw7xWTrOD6UjX/lzi7gOOokFi/xCEAd9J6ecz+Yt5vcpHe + PPaBXCf00UT47aP18/VwsROmqojhyTeWWrywqp3joUuNNd0+WN3tjfU9Pljfq8aGXh9s6PPBxj61whvE + JDN4dZsH5ptcMVnP/lXhynHLfpjFc+dYq87RoCSDMZiYNY++OYt+OGVZAJYSphX0laXs+wXEkLnsd7Yk + d6QSd8ZzHyvjrWTqWeh3I9lv4hLIDdIMxN6OzN+0TB1SeS9T6Pvj2bej41wQxf4aR38g2NzG8V5cbqLR + PxfpYMtVIZ0YM439PY0+Jy3NU+Ee6Sm8/8l+5CY8fryWWy2yUjTIYx8vZHwpTiOWpV8pSxdRn+3MY5eT + +5Upk1xdFAG4jLy1iuO5nVx/gLx8kuN60eaKzfnu2MH7sbfSUxGAD7WK8KtWyj/fwTa+TwTgsTCcmrbg + 5HgojrSrcTP53g0lLthX5Ir9pW64pYr7NhtwV1cw7ugOVdYFX+L/jpGPjNMmxBhbZ7hd4pjdkOKMbTy3 + XWz/veR815UYsLfMgJ3EAusYvyezfNCTokIzrTrVU1l2IVdEGHKdNFqSVHeLcYc1UjiWkzIxNTRCsI/w + Bho5ckgEuYGIKUlqch1vRbSSTFgRf6P5OjHek8dRcfyo2J4OS2MfSOexlaxJxTimOL5SON7i+V9R5ERS + FjiSJgJwOP9LzCwC8LKgsyIAi/grPE8qQQWHOiOQGC2QWxF/jcsZwiLYiu+QCSSK8bVk8wYQv4aG0wfR + H1nol0LZv+QzmTS8IgDruJ+Y77KtZAMLd1IEYOICs5W+jv5HqlNZiAvl2uNjiUNT3IivPIjHhPcyThU6 + o67UhRzEHW3VnuQrbqiXSRLsGzWMDdXZ9BUcI+WpKpSxXcrpZ8p5b0qSPZGfSLxK/yIl7LPpj/LI+4o5 + jso5jmqIbUQAHqF/WuDv19IHbeA4WpPuikWOg0VytG387DrGlVvIYyT797qmEGyt9sNioQoj5F5SDaCd + 1kZrznRGe5YrfYUaw0Ua9DD2tSS7oDlJ1gpm/EtyQSdNSkD3MT4M0hZzXLFHKlO0mXBnpwn39JpwnBji + nn49jg3qcWTIgEODfthP29Wnx9oWLX2hu6LN5DKuJMY7I4J4MIQYLIjYy0TM5s/rMnHsG4m9pdKQMdBL + MYNg5EDH8iiSxW1k7JAlaGQygGK8b4Zl+78KwLyHIgDHErMnR7OPku9KVm+iZMcqExFclJLQIgTHcCsT + E8TPS4b6VwKwC/uvCH1q2GhpSSokxUtmKeOIIgB7IYFcXbj7yiRzmYQeJdyavi88kpyKfT4i2pWfrQjA + Mvlch0hyfwv/U54BSLWvVFknm9gmI4McxkacS4xSIsJkqUEpWayIwMRbipUayav17HN6lCiTOH2RR5xv + o++SZy2SbS8Tm2J5LTFyXYoATMzLc4okHpbzEWHaIQBLhrKHMtFjxayM92IRjLlisjyXw9yVTGfJeE4g + LkhL1/Gcfb8q/fw1AfgrEVgEYIc/WBHSHdm/4hfEV3D/JO2y8VjkaukpfkhK0CKG987KMScC8IopmcCh + bvQTLgijnxAT/mYhj4uwuMIqIrCUmJfz5PXGx7F9+V9ZPMfcbPKiIn9UV4SisjyI7WtAEdvPTuwp6wGv + rAlcRl9aLhnBNMn+rZHlpIj1W1si0dxkQS3HWmGuN3Ik/hDniRDcQDy3fnU5jtw2Bad3Jo14fVyPl8d8 + 8RK3L0764cUpE16aCuDrELwwGoHnCLif6o3FqZ4EnOiMx5HGGBxqTsSR3mwOqDwcHs7BsbFs3DuSgvv7 + o/FQTyge6wzAE+1GPNVuwHMdIgCH4MXBUDzdF4TTPf54rN8fD/Ua8WCfCY8N8zsSkrfWpOGthRS8OhGD + 53iMJ1v9cZLA5D4CzgdEBCZYOdUSiKc7w/Bsj5nG43WH4JmBcJwZisSjPeF4oCMcR0gE9pEIbs5xx9Zi + L2wsJigocMGS3RULZe6YZfCbrPHAKJ3fUI03ZjqCsHk8GXtWFeGOazrw6G0LeO7YVpw6tA537xzHvpkG + bOrMxVxNAgFnCNpJ2GoZgOoYINo4aHoTVBglgJvMM2CUN6mHAL6JAbGWgbiaoKmKwbiC2zKCqIoMAmE6 + 2S4C8gES1OEOf4z1+WNqxITVoySsowbcNmHCqZkQvEX75WQw/nsqEH9f9Me/1vjj3+v88NF6PT5dp8O5 + NXqcnzPgS96zz4d98Y9+NX7d4oKftzrhF91u+NWwFn9abcY/tsfjs/2ZOH84F7ivCHiEdroI50/acPZ4 + Gr48loWPbsnC+1sT8NxwKG4qV2GBDniYAGKE5z5B57iY74wb6tR4jETsndFQ/LI/GL8RAbjDiF/3hOCn + zSF4kwP/iVw/HMvQY1+6H9ZlGNGbbuL1G2C3BaAkLwxlRV8XgCPRmh+OrrwADNMxTJOQrCMgujbLBUfz + PfAoweJzBILf6dbg/Skj/kQC+uGOcHy4Mwj/2OGHP11txE82mfDarA5PDHrjkW4v3NvoirtqXHGozAU3 + 2Z1woNQJh6qccbzdHc9O6/DjHWH4911puHAiE5ceS8WXD8fg3IMWfH63GWePhOOzW8z4195A/GGTFu+v + VuEna7zww40++NZWL7yx3QuvbvXAS+uc8dykE57oc8JDjU64p8oJh0uccHORk7J+ssyW28Zgtpb3e5ak + cIjgvZODu5WkrUMEYLbnRgLT2wbVePHqAPziTt6jUzH45JkIfPq0Pz5/2oQvng7CF08F4fzTobhAuyT2 + ZDDPOUgp1/zZvTp8ercPPjuuxdmHaI/54uxpP5w7E4jzL4Th0qtRwOsxuPxqLPCNOJx/0oKzD/DYd7LP + 3OGHi4d9FQH4/D00/v78KQ0uP+eLy6/44tI3dbj4hg8uftMHF57X4OyjDgH4owNa/HWPH357VQDeXe+P + VxdMeHBIg5sIILc2GjBTYcJQiT/JrYGgXo9Zvt7bFY0H1xfg1Zvb8cPj4/jRfaN4544OPHZVAQ4ORWBX + gwlXkzhsL9Fgb4WOpFKNAxUeuKXMDYd57062uOF7G4z4w8FwfPpgNC6eicPlb8Tz2lJx6c00XPp2hkP8 + fTfbsf1BHl/TfsC+/p0sXPpeFi6/V4DL75fh8u/rgX/0AP8cBP46APy+D+e/24S/n87FTw+a8dJabxzr + dMK+St47kpNxklEZ320Mtr0EBWMkZGtJoPc1uuHRVRr84BZ//O10GD57KQznX7PiwuuR3Ebhy1etOP/K + svE+nH81GhdoX74cjXMvx+L8G0k8L/a/9/Jw4f0CnP+1HZf+UAn8pQH4e4vD/toM/LEVl3/RjgvvduNf + LzfjvQfseGp3LG6dNmBzEwF9Nc+z2ROburxw1YAa180a8fDeBLxxfyX+681JfPnbnbzWW3D5kztx6cv7 + cBEPKXb+i+O48NERXPz7IXz+wfX43bfW4c1Tg7j/QDU2zyagh/ekkvdDFqMvLPQlWXFYAQNOUYkRhcUm + 2PL0SMsi8RHSIwJwFgMiyU9OjpZBiiSQ+3aV67FE33/dlBkntiXgzQOZ+OCBAvzz0Wx8cioNn5xOwL+e + iMWfT0Xid7QfnYzCkwcDcWA9yd2YGuOdevS2WdDRmoSWVhvqm7JR0ZiN4oY0FNQnIK8hGvl1USioiYS9 + MhJFxWEkUDrkELiU2QxoLDBhtCYc6zpisGc4EbfNpuPQVBz7XSj2d+pwfZMK1ze4YH+TG25s9cQNbSrs + aSFBanbG1gYSF7bvavqQpQInrOGYXpVLI8Bcsjljif5xfbYrDjYSaLYG4VhzAH1PAI7X+eOech2O5atw + otAHTzMOvVDuh5fYFi+V+eKVCj3ebgqk+ePFCjWeJBl+rIi+rtQLp6p98VCZFnfke+OGDDfsITHcS2K3 + L88De7PdcG0uwW22M3bRf1xjc8G1BZ7Yx/u0h2T+KhJuKf28Kk/EX3fM8f2s3QezpST53GeY59KT44F2 + xqUmksJqgnFZ/6SJ/r2Dn/fxXvcXk8yTqFUSUBfHOilroxTFOsNOMFmW6YMago9GXk8dj1lJwF6c44bi + TJIAAgtbiisyEl2QRn+XTpPSZHlZGhQJ4Sbgq6TVkug1EsRL+ecuWg99/SDJwXiGs0JO1+U6Yz3beHuh + E26sYgzooD/v9MR9nW54oNMZD3Y54ZF+Zzwx7obn5zzwymo1vrc9GL++ORF/uSMH/zxaTD+Rg5/uSMQ7 + C8QEnb643+6CE6UeOE3s8GSzEU+0BuKxdhpj1qmBCDw5GIkniR2e4OvHiSnuq/PF7Yw7N9B/7yWhuIHt + s5/3+lpur6HdUOSM+3s98M3t/nj/rih8+Dzj6ncLcelnUga6BvigDvg1tz8px+VvF+PzJzPw0dE4fHx9 + BD7cEoJ/rwrEP+cC8V/jBvx80BffJul+pU2NM61aPNZiwFH2iz1s45kMWTfNCcUkuekkj0m0RALI+HAC + dJqFpNTM76wCzEm2E3gvM1JdCMD90doUgb6uBIwNpGGwOw4ttUHKeC6XGfkkO7Xl7qirdFGsqcoNTdUi + BJMM1nmgUzJ9m6X8sw7dJEdiXc0adNb7oL1WhdZqDzRV8jflxDGMefUcHw300230mV21vK/EUy1s72qO + kTIS/xL2tWKSv6IYKbUpa+URE6V4oCWb/1GswYisQdagxmKrD1Z3emNDjw+2Dnhj5wj7NTHp3lFf7BvT + Y/9EAK4f9ceOXq2S/bupxQvrGtyxulaEXxesqXXDmjriPNqqWi+sqvPBfI0PRstU6CuWdcfYnnZPtJV6 + o5F4srrYjXjEBek8v2SeXxq36bzfUk7PMStcRwLgy8/0SEmUygIakkPJtFKToHgpMzjDCfjNMuuTBFHM + QtIhJYsE/AcHO8NkIFmXWd7cCkEUATg2XoOEZJ0jayDFB4mpXiRaJGipUkbOIaqKSBsX77VsfE18mcAx + mJjkSSInhIbEge0pdkUAZqySh0ypNndk5nopD5syc32QTLIWw7glIrBjHWDJPHZkG8vnkoUs2bOKAMz+ + FEZbEX7FInnPoti/oknKxGJIGqUUtJSJiiFRVM5PxN9YksooB/GKsHiwDeRhhEMADrVI1qG7Ump35QGG + 2JXZ7fIQI9QVQfIQg+QtXAidzFKmWfl/YpHx7rDGkwCSLFpJ0iPpa8Si2e/FJBM6LplEOMMDadly/Rrk + FKiRW+iN/EIvJTveXsh+WS4loKWcOfsG/cP8cDCm+wPR1aTl+HBBLn2rCMBSmi+Fvikr1xPFdg0q6NMb + qkQA9mdfN6G90oCOCj+00q+3kOg208c3lfqhsURPc7wWay4zonl5LaSW8gC+9+f+QRw/tMpAHjPwSglo + EYFb68IVuyIA15kVc7wPQ0sDvyexa2+2oLU5DM2tZnR0RmJgKAEjo0kYG0vBqLJNwgQ5zexUGib5vrfb + ivaWEHS2haGny4Lergh+FoEhcruxsQRMT6dgYT4D8/PcfyYZo5Px6B2OQlc/8fmQFQMTsRiaScTwTJKy + HZwmF5qOd2QCSzloxviRmXCMzYVifCEIkwv+NBMmaJOSEbwYgMmlYMysCsPsmnDM0ebXWWmRmF5jwfhS + GMYWQzG2FI7JVRZMrIrg6yi0DwWjmD4ljWM1jv73KwHY0V+l3yjln4McpZ0NJk/ojXxN8/XzgE7vDq2v + iL/uDjPwM4OIv17c1wsBgd4ID9UgNkKLlEiO+SgNbOyzeVYv5LPfZod6IpVjN4Fj2OrnhFCO55CvicBf + CcAuSAlzRzIJv5RrltdSullKQmdxHNgiPRUBuChOAzv9iT2ReCqW/xPlRVMhl2NHrIj+oTSFpJ68qSw9 + AAXJRtji6IOi6BdkconZVRF/xQLDHSYCsIi+FqX881cmWfiS/Rtq9nRsJUvX7KNkm6xYoIjByyZCsClY + xbb0hEF5wOUwPymZzetXBA9/fhfAfQI9HGaSNqf5S7acG8w85v8hABeHoK4sDI2VIezz/miu5JigNVVI + NrA8GNIiP1uL7GyNku2ba/eHrdgfGUUmZBYYkV1o4Bj2Q3GhPKDXoYZYpYl4tLVQh05uewp8lXXixgo0 + igC8odqAncRYe9tDsLctGDuIyzbVGrGGY3aiSIdemw8aktxRwj6UQ1+3IgBL+eeabAPqc0yoo1Xb/FCd + JYK8TvlOTF5//b2YlEIsTvVBAf24WB59eh7fZ9Onp9BPxlpdEBvJ/hslArCIu25Ii2XfSlHDlqZR4k2a + PPSTB9XkG0mKCOzMfeXhnyti6RdFAI6iRbMvxVjpeyUDzapBXDRjU7wf0lPZTlkBKMoLRHFBAM2klJIr + zPFF2dcFYCn3PhGPubk4zC/GYHbRwvEZQpMx+5VNLQZhemnZiFlmaLO0hdVBtFDMrwrFwioz5pf4etGM + BR5nccmKpQUrVtHWLEYqtm7Rig18v4nbLQsWbFuIwA5+vou2ezEa13K7l+P8+qVo3LgqBtcvRGHftAV7 + RgKxs8+ALcRG6xq9sareG6ubfLG2IxjzbSEYrjWhgz65jX5X/LGYVBxqKdWjnv2gjr6/sUiDZrsOrfTD + nfxerIvWU+GP3soAdJfzN+xD9dkq3lNHxm9VKjFSGuOEiLqprihjTJFtLXGrLGvRyr7YUuCnTGaUdaDr + bN6oyVShQkqyJrlcEYClBHR9hgoN6TKh0hONPG4jcXInY3JXnprmEIB7873Qn+eFIcaZkRxPjGa5Oyqh + 5aqJ5TWY4/9OM6ZNZvI7mpRPrmafrWD/qGVMr2E/ruN/tzPm9RPjT1b6YqHOgHVNJmzvYP/vZltyDGyr + 8sXGIhUxtis2iBCU5YotmW7YSLy/kZxgfZoz1qY7Yx1fr2Xck1LQO8nh9jJm7WZb7ea43cX23lHCz+3u + 2E38dD2x1a31BtzS4I8bawOwi+06x7YYSnZHV4I7WuNc0Mgx1sw+3UQs0RrtjF7ilz62h4i/PVIRjdfT + TfzSw2voZRv1EcOKiQAsNiRbfi/CbztxSgd5SU+iE79zxZBNSmhr0WnzRX0ax2KiGnnRXkil340NcYMl + yAVhQW4IkYkp9G3hIZ6whBFbmFXEKN6ItEo1FzWiIhkD6CvD6LdDg2n8bTB/E0C/HxAgJfGl+gGxi8kZ + OqOTUsZVTd8v63jq9JIhLA94VRyjXkjk2BQBOIfjvpBYrjjRE0Vsi8JE+hhes4jApZlq8lOebw79SLZe + sdIc+sFcyT6lryOfttGnpBLvJctDdxF+FfMgFmU8kuzFZG/lgXUW8V062zM5gb6COC2GfSOJGDuL/Tef + nK0kR43yHHI39qe6PPZHcskVAXi0UqcIwJN1epqjFPRUrRqjxEhDBbxXWc5oJQ6qZ9vXsc1riY9rMkRM + lZKxHqgv8iLWkUxghzWWacgPNWjgsavJP6vIR6sKyBXsKkUA7qL1ke+KADxY7Il+ftfH/xkocKH/dsNQ + Ie9pEV8XO2GCHGNGyrQ2qjDbrMJcmzcWyQ9WdUkWsBprlYxgnyu2vk+NDbR13Z5Y1e4QgCfq3dBb5kxf + 7oRynncVeW4Fx0kxx2YBsXAOfW5mtDtSrc7IXBaAq0tMjDG+KOaYzCOezuZYTmV7itgiImBYiLPSV6Jl + DelkA3G3H5Iz9UqFnrQs7RUT3J1EDpyQ4sbXnsjIYVygLyol5iutYFznf2TTB2RlESOQQ2dw3GRkeCNT + MonJD9J47JREWU9fh1TiBeEj+Zk6ZbKAZJErAjCvo4zjQ6wk3SH8ikkZ33LeNxGAW3nPerkVjj2f7YwN + bOcdZQ4B+MYGLxxiu0rmr5SAPtKtUQTgk5NmnJ6L5DYcR7v0HN8q3EJudytx8x2NWhwlT72nKxD39IXh + rj4z9pEzr85xwTT/02F8neKC2ST+J/vNKp7DpkxnXM3+t5dY+Qb64OuqyHOrGZeJj+cZu4foT9uz6LfZ + Z8szNSjMIA5LY/xMFg7kCVnTVyY8ywRVhwAsE0aJ/3hPxIIZK0UkimUsleXApJStCMAi/sbFcHwkeSOV + 36VyTEopV8USxDyRJuVXuU0XUZhbGXMisFl5fCuP7Vj7V8Qbh31d/F0RgEX8lfXBTeQyIgL7BztMhF+p + cCQmk10FR33d5HOZHCvcMDxSzWvzRhCxoyHAMeFESxOOpOV+Yv9TABYzEXsGR9B/ERuEkXvKusQiNokI + HBcjJa89iQ08kc/+X5TvhtIiV9SUcVxWkQ/XeDFuqlBPf16bz8/zPFFLX1HL+1HFeyHVTpSqJ7QywTeM + N5L9mxHjjPQobtm+OfyPUnK16kg3pQT0CP9vjv1zNfvzGsauRWL2uTgnzNJ/b2I821Puj5vIYW5oCsPu + hiBsqNBgJo++3sa+KmXh2Zc6aK02Z8Y1NwwUazBW4ouBfDWaGY+b2K9aGGvbk50ZD6WaBH9HGyCHn2Tf + 31Hpg9vbTey7JhzvNeL+Xj2O9+lw94AOdw3qcXjYD7eOGnH9kBFb2b/Ha3j9uU4o4DhJI7eIpa+10DeY + yWnDyL3D2P8CicMMbFNZi1kmmiqTTZWJj8uTKMlvAxg7AgLJ++WeLNsVMXjZRAD+uokAHMI+IlVd4sgD + UuNEbGS/JMdPYfxMJD+Pixb8KCKpK+LZvpIdLNUeRPwVW6kQIcKlVH6RiX+ZMnZEBOaxJPtXnhvIBPOV + yeXxyVLBS4ME7hfN/h8uk8CF95PjRwqv51hJZExNYSyKlfEUI+3CccJxmc5+kU5cIxNWsng/C4hn7CLy + cmxXVhA3lxPXE5dVywRPO2NboZb+VIvCXIflZquRlcFjpUg2vhvjGXEx47qIwCIAS7n2aNrKslhybrLk + j1kylNnPFDE4iucszwmi3P/DVjJ/ZZkuWbM4PkGuXeMQf/8vAvCKrUwGWRGCpfy++AVZrkVMfLM8F8pM + NdA/GdnWQUrlHSkDbQmT2CAThNh/aIoIzLEcRo4q2cBKRjD5m0MgdlHKtVvpo0QEjuK1xfA+y0SVNPKC + LJ5rQb4J5SXBKLMT1+frlUzrwuXn62Il9Jv2Ij+UFBtobOcSA9vfiLraYLS1ku+3WdFUF0b870t+pSKm + cCUuIDatCsS6VaU4fOsEnL4954+35wNogXiboP/t1SF4e00o3iFBf4eA/psT4Xh1JBKvDCfg5dE0PD+c + gZM9KXiwLwOPTBbh4bkSPDhbhIdm8/HgeCpODMXg5IAFp3tD8HRHAM2I5zqNeKk/FC8NmfHcUBieHgzC + 6eEgPDIYgIeHgvDEeDheWZWEt9emKwLwy6NRONPBfRoNeLhai+MEDsfLvfFgtQaPNQXgmU4znu+z4rne + cDzXH85zkgzgSDzeF4EHuyJwd4cVt9QH45pSLbYTmIgAvJjnhLlCOqESV0xXuGOiyh3D5QIQXDFGALS6 + 14rtU1k4uKkOD988jReObcGLx7bhmds34ehVw7huqgZbunJIRJIwVhSKrlSSAQaWTlp/og+G03QYzzZh + iCCiM9NbAfuyCH8FrYyOqYRbO4NhGZ2MlCNsLVKjs8IXXfV+6G3xw1CXL+Z6fXE1HdStdFCPTQTiralA + /GYyGH+dDsG/eW8+XhuET9Yb8Ok6P5xd54sv1/jh4pIJF2b8cW7cgH8PafFBpxt+3eOK3w554YNJPf62 + wYqPdifjy1tycPloAfCQHXisCHi6GJcfz8H5+zNw8d4cfH4oB7+7OhXfGLMoM7xW0/mO8VxFBB4jeJgl + iNpZ4ams1/zaUAh+2h+MX3b64/02A37bGYJftpjxg6ogvFRowiPZfjhEx3E122M8y4AGtk15poEgNwhl + heGoUgTgKDTTWnLNdPYBSrvNEtBvspFY5LrhnmIvnC73wku13vh+tx7vTwbiD2vN+Od2K/56VSg+2GLE + zzb44e0FX5wZUuHhbhUe6PDGsUYP3FnjiVvK3XGj3RU3EUzeVOKE26qc8Ei3O95a7Yc/35KIs8fTcf7h + ZHzxYDTO3m/BZ8fC8fkdZnx4UxD+vMMP7y944PvjLvjOpAvenHHFSwsueG61K55d64anF51xatgJD3c4 + 4Xi1E46KyFzkhP0MInuynLCdYHMjgdBivMyGI6GhU20nsGhh8BRAPcC23FrrjmO8P6/tCcEHx6PwyZkE + fPFiNL54PhhfPh+EC8+H4ctnQ7m1KHbxuXBceiYMF54IxZcnA/DZA374/D4dzsq6wA8bcPakHz6jnXsi + EF+eCcXlF6OAl+OAF2nPxuLCYxacvccfn99uwPnbxEQI1uHifb64eFKPC09pgZf8gNf9cPlNPS6+rcWl + N7W48IIG5x7zwdmjPvj4oAZ/26vHBzuM+NEm9gO25YkRbxwkeLyqUY85EvCxUn8CexOGC4xYqgjCvt4o + 3LchFy/c2IRvHRvE23f24aUDzTi+IRt7ukOxqVqP9SQRawu9sY3E4RqO9WtFgCl2xY0cr0cqnPHanA6/ + 2heCf91txbnHo3HpuQRcfiUNF15Lw/k3U3FRsoB/mL1sucCP8oAf5zu2P2Of/3UZ8Ida4B/twOfDwNlx + 4JNR4O9DuPyzdnz6kh2/vzsWb13th3t7nXFtmZMi8A0QtNQSzDUSUPXyPo6TDKzJc8beBmc8uqTGu7cE + 4O9PmPH5S2G4+GoELn0zktsoXHjFiouvROLCyxH48iUrvngpQrGzz0fg0+esOPuNWJx/KwUXv2/j/+fh + 8q+Kgf+qBP5cB/ytySEA/62V79t47q24+F4HPn6zFb9+vBzfuDEJR5cCcHWrK9bWElC1uuGqLhV2Dfjg + 5jkjHt+XhG8/WIW/vD2FSx+IAHyA13oYly7ci0t4ULHzX96N8x/djkt/O4jPf3stfvfWarzx6ADuv6kS + W6bj0FtnRLVdQ6CoQ1GhLwolA5gmAnBxqQmFdiOyGIxSSWSTCAiSGaxEDM7k+5xsks58HzQU69BX6YsN + PYE4tBSJM3sz8aOjRfj3kxX44kwxzp/JoqXg3DOJ+PhMHP7xXCL+65lUvHlPNO7dFYhdM370hwZ0Nwai + tT4KjQ1pqK3PQnmdDcV1aSioTUB+fSwK62i1MSipjOG5mpFFolREQlZfGIje8hAstcdg50gSbp3PVPrh + 4ekoHCDJ2deqwp46F+xrcMKN7U64pdcDB/o8cX2XC67luN7V5oSr6p2wukBmFXJLcCp9Yom+cCldMvud + sD7TBQfqjTjSHKAIwMcbAnBvtR/uZj++iz7sAYLp08VqPFOqw/NlOjxnV+N59vVvsn3faGBcrNTgNPv7 + SdrD5T54mO11Z4EXbmCg3kpAtJZgaD374Cb64A2MIbLdRt+y3eaKXbke2FPsjWtJuHfxmFuLVNhQ6I5F + 2hxtqtAD03Yfjkk9450vxkt0JNre6Mwi8Odxakjqq+ifZK2VtlxP9BRq0E2g3ZDlqpS9K+T/5vD/8wlC + CxLdUUQyW0EQV1+iRw2vr5TXl8/2yE9zQW6KM2wcG5lCDOKdFcsiCcjN8EFhlmOmuxDWKhLhepLVlnQ3 + dGaQ/JO0jvD3kySti/zfNQT/a9nOm9jeu+mzb2n0xGHepyMt7rizxRV3tTjjnk5nnBhww6lxDzwzo8br + 6wLwoz1x+O2NWfjDwTz8Yk8qvrshCq9OB+OJNjUeLHfFiXJPPFqjxWMNvkr550eJLU71m/Ekccaz43F4 + ZiwWTw5a8WhXKI5VaXCwwAV72c7XsM330V9fx/u9m6+vYpvs5Psj9c54YUmLH9/I2HwyAWdfy8GFd8tw + +ZeSBVzjKActZaG/V4wvnk7DZ0ej8el1Zny0JZAxPBAfreLviLc+mDHhF5P++OF4AN4aC8QrI2F4YsjK + /hSMrYVqjEk2isUJuSQSsl5kMn1RPIlndJirUo5KWb9FZieTEMeQEEgJ4yICw+ryILQ0WNHfmYS+zkQl + q7DSrmPsVaHK7kny544atkutUgraGfX0sU3VvC+MSR2NXv+rACxksbnSA03ETA28P7WMeXX00Q12J7Tz + ON1VHuiq9EQz424l20+wTjmtkn2shve5OtUFtbQGEbfzvNBd6IXBMi8SMC/M8T+X2rywtlOFTT1euGpQ + jZ3DOlw7psf140bcPBOCm6dJGAcN2C7lm1pJMGtdsFDlEIDX1ntiXYMP1jdpsK5RTItVtT6YrOB/kNz2 + M6YMkBj2VhN3VfugqdwDVUVukLLlyRwHUrY8lWMinWQkM8kHWSky656EIUmvPICRkj+JcSRF3MaQeChr + vlh4H6wyK1VKE5F4kHT8HwKwlqRReTAgpVqltLOUjZPMAUdJ5xQSEskecKwdtjxDV0gaiaCUQYqJlTJG + bgopjYsnUeJYjEtwviIAR7NPxnH8SYm5lEySKfqGrDyCfUUA9kJiqjuP54yYBFdF8JXSdFFxK+9JKkk0 + Y0l6JaPYTAIoD1kkA/j/FID5O5kdTJKiWBSPRYvmdYtFSTkmRQB3EBwRn0QANlu9lev2D3ZXyLM8zPjf + BWDJ/l0mdssCcITM/KeJACwWJaI1yX8MiWNsCklzsgvbjYSYr5PSPZCR7aVkQMsDt8wcFbJyPJCd646c + HFcSVRf2exXa2Jd7G30w2kHMMhCEie4AtNdJ3KLPWxaAU1OdeW9cYWNbigBcRR+qCMDVy2IDCa5kmjWX + +KKJJLeB2zrGy1rGS7F6xkuZBNVgJ/5lvGwq8VfWRWooNqGx2J9+lO/LAtBQGYAm4ubmmmCOvzCem0Wx + VlpLg2MdYIeJCBzmsAaxUDTWB6GxMQSt7Rb0D8ZjVMn8TVHKQI+OJmB8LAlT4ykYHY5XxN6WpkC00bd0 + dZjR1W5WhODhkThMTiZhbj4dCwuZmJ1Lx9hkIoZGY9DVb0VHTzjaue0bjcPAVBIGp1MwNJOKIW6Hp5Mx + PCUicAyGJyMwMm3B6GwYxuaDMUH/NiFlnhcCMbW4nPErgtHqCCystWJxXRSW1kVjntuZNZGYWBWOCclG + XGXBFPcZX4rA6GIkOukTS+okA9gZsSIA049EJcnDAIcALA+/RAD2C3SDr0nKO8t6XHytCL0e0Pq5Q61k + /64IwCrF9AYvmExqhARpEBmmR6LVD5nRBuTEEOtEaVFs1cBuVaMgzBtZwZ5I5fiNM5Hg650QRgv2pclr + jnEr+28cx7uIv0nsxwk8J3mtCMDs01lWL8ZSlSJOFMdryQX1KE81wk7fIoKwfG6LcEV6uAuyuV9RAol9 + igH2tAAUpPjDlmhASoysPeiJ0HCHABxIvy9rlX1dAJasX5kFb+F+kgkSZnZ3ZP6GeSCU5xIaKqWgHRnA + V0RgKd9ME2E4iN8ZRfyl+YnwS9MHsL2MbmxDJ3jzmrVsWx3bWGd0UczXb9nkYSbfh/NYcdF+igCcZwuB + PTcEZQVBxAyS8R6ClqoAmokmIrCsGSZlN+WBuy/yiCnzODbySwMdGcCFRmTmG2HjNr/QoAjA8kCplhik + qcSAdtqKANxPbDJCnzdXolUE4D1tobixx4L9neHY0xKCbfUB/Nwf0xyjsgZwI/1oKftQHn1dLv2ZCAKS + AVybbURjXgAac/1Rm0McTC5bkeEQfCXTtyJdp7wvz3RYGV8X04cXpkp5Tt7nJE/YxOShUaKUdfZETCT7 + ThR9rTyMZtyI5/s0+vbsZKk0IQ+WvJEW54aUKPabKPodecAX6YwEnlucrPnG38RYGAfoT+PYl+Kj1IiX + 8rXRvoxJBqQmmWDLYHvnBKOkKBSl9mBaIOxsQ1mbrbLEpDwI6myLwEBfFMZHYjAzGcWxTpu3YGYunBb2 + nzbP8UqbngvC1HwALRDTtNmFIPqK4GUL5TFCMMsxPzdnpoVjYZY2E47FOYtiq/n5mlkz1vPzTXy/eTYC + 2+cjcPVcBHbNWXENP7uWr/fy9T7anikzdo0G42oRfzu1jOMqzFbKev7EiqXEtI0GjBI/t5eIyKtCbYEP + 6ohba4vE1HyvQTX9v0MA1tI/69FaZkRXdaBiPbTuSn/FOkoNaMpXozrTXcEqMlmtknFExN8qxpIVAbgs + xRXVWSrUKSWg/fgb+vZsrTKhsS7bWxGHK7l/mWQMJzkE4Po0T+Ic/kaE4BQP1BPLNTCedPDcuvOJtfm/ + PTz3Hsbo3lwVBnI8MWjzxFCaG8Zoszzmgs0LU2nuGONxh2n9NFlDt5x8tIS4UPpvEWO0nZ818DfdjFVT + 5NOrmvyxsS0IO7vNuK6PbdsRiqtqyMWK3JXnOmuIZ9fRNhJ3bySH2ZTlomxFGN7A12vJcTYQS2zLU+Ma + ux92sZ2uKfPDDnKNq3iM7UUuuLrAGXvs7ril3g+3NJlwQ60/dlWYlIzlGZsaw8T8vcnEg8QXPRxr3Yzb + fUkemMrVYzLXF6NsuwG2i2T1dhK3dkkmF9tNxN9+EYAziNdE/OU9EMFXxN9mXmsrr1kRgZOd0cf27bFp + 0WYjJ+G4LEkk/4z0QTJ9XnSoO8KDiCnotwMEe9FCZZ3eYGKMEHeY6RMjLF6I4v6RHFMi6slnYfxdGH13 + EPGKCMBSFUHK4/vx918JwM7Q0N+JACyZwAajZIbS71mJD60qpFndkc1xnx/viQJit/wYZ+QSp8namcKj + yrO0qMz1Q1WBAVX5JsUq6OfKuS3JJb+mD8oVTp3ijVQRfWmp9E//pwDM2MR2zkjld4yJsYIH6TPiuU1j + e9rYvgWZKtiJiWp4X5SM+HwvtBV4oLfEG6OVWkzU8340GDBZ76tkAY8TGw8Uu5KfOaGF2LiO513D49Vw + WyWckdioit/V5rkrAnC93fuKifDbWKpWXosAXJnHsZTvSrzjyADusrOvF8lkY3cM21UY4ueDdjeMsB+N + 8vuxUlqZB4ZLOd4r3TFR64mJOlq9OybJBWfJBUUEXt2txRqxHrWSEby6S8X3Xg7rdAjAc81umGhwRW85 + z5V8spTnXJnjznaXUtxeyoSfXN6fLGLXNPra9FgXFLMvSfZaNft6WRG5q82dvJZYkNcfz3a1cNyFkIOZ + JVtPyn+mm5TJ76lSBS1TS9MoJgJwuk2D9Cw133shg+Mhu0CLwjIDyquCUVYZhOJSP+TSR9lsKmTTh9gY + k+T5SZZMCCI/EAE4KZ64hP+TQhM+ksdYY88gNpFJBOTTpcT2JfQJdo6FQp5nEX1YMe9PCa2cWEkEYOH6 + XXw/minPcDneiz2ws9IL11Z7Yj+53q3kUbd3+uC2LjXu7NXi+GAAHhEBeD5K2Ur53EPkZodb1DjW6Yf7 + ugNxf08wHugP475m3MXtvgYd1hW6YjHXBXPZrvwfd8xme2CGPmSO57FIX7OB+Ht7kTeurTJgf30grid2 + vbY+GFuIB5aIi8eL/Oi/GNfpG6py9CjN5RjI8kVCgorcwk2ZmBpKvBNCC7MQ89AEA/2nAExOIAJwkkMA + jhTRjLwkMV7EXzXblPdGysHGqZAS6zARe8WSYkRwc1eyL+W1TKSI5H+uiL/KhGtuVwTg0GUBOITbAOI/ + EX91xEiSCSxC34ro+3VTeA+//7rJ5yIAyyRZ4UqylaVy5DuZcCd+RkRgDX8r9n8TgEOJ+4LN9HnBTsq6 + xFKmWpblSUvxQY6N+IRxpohjv5R9oLrcHU01KrTW+KC1QmKoB2ry3egnVEq1gJpcDWoY46ptvB9ZOsY/ + 4p0M4pwUjpl44hdiphRyxSTGoQyrM4qiOLbIB1v4+SB91DT93AL90mIqxyL75zT9xyTH0Vr69V2Mx9c1 + mHn/Q5Q16leXemGCvmKY/WeA/qK3gPGi0B0dPJ+ufHf6CA0mybdG7Do081iSwNDKbTv7fCdNllUUAVjK + QI9wu7XEnf3aF3d1Gthf9TQNjveqcU+/D44OaHDnsC9uH/XDTSNGbO/SYbaB7VDghEL+PoPcOjFJOCY5 + PnFZdLoaEfSzIexPIgBrha8qk4FclUmnsoRKAGNFIOOG3MeAQIfw609TJgJwuyL+Siawiffy6xbIz0QA + tpjZd4nd0+TZQ6qYJ6Skc3KiZK+LEOxOkzjgTuN+UgmCryVbPTXeYemMC/nZehQwtmQzfqSnMRZK9TCO + iaQU4kaOixj6vAR+lpKup38idmTsjOf/RcQxPoqPI8eXCdexvPZExtQ0xqL4FLWyRJVkEGeyP2SIX+N9 + TSUuSmeMzs31gb3Yd1kAZkyr8FME4MpSYvtCEX29kUcfl8c+KOJvDn2dQwDmtZDHpwl3Z4yX+CWTmKK5 + lepm8kzCGsvYyq1ZBGr6aUsMYzf7mTwnEFsRfi1KqWg3WK0y7uWZhDw78eS95LXKZH4p/0xfLWsXf10E + Tpes/+TlbGS+ljXArwjAvN4VAVjWZFcs1Re2NLZvhon+KRCF+WG8FhM5DzHEssBrWRaBvy4AO9YFFpPX + 8oyE/koy9SOcEcHxIxYpk0R5zrKMYXqaFjnZ5IDKZE4j28+XbccYwLhSmCNCsA5FeVIqmlvyn6JC8hBy + obISX1QLx2oOR0d7JNqaLKghLism3swhzs1Mdea9MWLtkh2HDozC6UebwvHDTRa8S/vhZtrWCPxwC22z + FT9YY8VbE6F4Y8SCN0Zj8eZ4Cl4dS8fTA8l4fCANj0/k4ORUHh6ezMHD05k4MZaEkyQXp4eseKIvFE93 + BuBMpwnPdhnx4kAoXuZxXhyPwHPjZjw5EYbHRkPw2FgYnp6JwmtrUvDOugy8vZDK/aLwdHsgThGcPFyj + xf1l3jhe4Y0Hqnxwst7IY4oAHEmz4IWhCLw8HoPnRqJxqj8S93eE41ibBYcaQ7GPRPDqMi02EnisynfG + QpEz5soIrqvooGo8MV5JAEJHOEQHON5gJJCIwo7xXNy6sQXHd4/gkeum8eh1c7hrcz9ummvAnpES7Ogv + wNqmFEyVhKOfHaEn3gdDSVoMp/liJMOPoFSHNgboBnbuCnbqEoKmEjqVYr4uItgtpZMRQlFDQlFPwtpU + qkNrtRbdjRpMtKqxmc7qQL8Oj4wa8OZkAH47EYR/TIfgo8UgfLY2CJ+vN+LcOgO+WKfHhbUGXFoVgItz + gfhi0oQPhzX4U78n/jDshf+e9MVflwLw0VXROHd9Gi7dkefI/n3UDjzB7bO0J3Nx+cEs4N5cfHFrLv64 + IwOvjEXg9hoNNjKQT9KxDvN8x9JcCeqdsLnYBUeaNHiuLxDf6w3ETzv98ZNmP/y6JQi/bTHjpySZ75QF + 4ul8A+6hE7qBgHYxxw8ddKI1bJeKHBPKC8JQVRSBmoJINORZ0ZQThvbsAAzRcc3TQWzJdsdN+R64r9Qb + T1b64LUmPd7t8ccvJkPw+9UR+O/NkfjdxlC8t8aIt+d1eGbICyc6XHFvqyfubqWDb1TjSK0GB3lP94uQ + WOiM6+ncRUw8VuvEfuKFX+2OwId3JOPsfYk4d38UPj9uwWdHw/HZHWH4+3Um/GGLBj+ddsW3+p3wxqAT + Xh51wvOzrnhujQrPblTjmXVqnJ5yx8O9zjjOYx4rc8KhYifckOuEawg0t7Dd1jDgzZCwjBCE9HJQt9OR + tEiZEwKigTwnXNXCa1ww4rs3WvHXEwk493wyLn4jBudfMuPiy2ZceiUCF14VQTEGF1+J5meRuPySFeef + CccXp4Lx2SMmfP6QAWdPGPHFw/74/BEDPnvYgHMnA/DlqRDgTCTvcRzwNO0J/v7BcJy9i/vdasCXtxpp + fvjisC8uPcA+9LgRl87ogddMwNsmXH7bgIvv6HHpLV9ceEmHLx5X4+wxH3xyiwZ/3+eL3+/yxY+36vD6 + Wi1OjhJEdkrZXA3Hlg4TpUaMFvljkra+JhTXD0Xjvi25eOamBrx+pBuvHe7CU9fX4fbFNGxtIfjj+Jwv + VGMuj+C9wAubCFC2MfhfU+CCPWyn/bxvpwdU+P5WP/zhlmB8eL8F505F48szSTj3XBI+fyUeX76TjMvv + ZuHyD23K+rqXf0x7j/39p/nAr9nf/6sK+Esj8FEX8OUYcGEKHDDAx+PABz04/60q/P2xNPzoxhCcHHfH + dRVOWM37OEiiWc/g3ErwN8QxPJvpik28z/tbnR0loA8Y8c8nwnD2xTDen3Dlnl16OYpmxeVXonDhGxH4 + 8vkInH3OjM+eCcOnT4Xi4ydC+ToCX7wchwtvpfK8c4D3ORY/qAD+VOPIAv5bM02ygNuA3zTjwk9b8Pl3 + W/CHZyrxzuFMPLQhBHu73LG5jv2o1QXXdHli74AXDs3q8cS18fjOfaX48zeHcf5XW4B/3Ah8cgiXL9yF + y7hXsQtfHsGFf9+Ci3++Hh/9ZBt+8dIUvnG8HXfvLsKm0Sj01RhI4nSosuthL/RlcPdDoV2yfxmQSJAK + 7QZkKuVFvZBAX5fI8Z2WxeBIspNt80QJSWZjiRZDtb7YPhSCY+vj8PJNuXj/eCk+fqoc588UsL9l4PKz + vG/PJuKL5xPw2YvJ+NdLmfjZo2l48qYo3LwqCGv6jeiu1aO+PBgVpVEoKYlHvj0ROfZ4ZNKHpBWZkV5g + RiZ9Sk5eGEGPP7IY8MtsUu4tFFNNkdgxloqb5tNxZFUmjq9Lx23jIbixR6Osv723yQkHul1wx5gH7pnT + 4L4lPe6aYTuOueGGXifsaaHPK3XC+nyO5ywnLBBcLtAfLnF8y0OSrbkeuIVx43ba4Ro97qzwxVH6rWOM + N0cJaO8jSX6UpOcMx8Xz/O6M3YfmjW9U6/FKnQFnKtV4jOD3IZLfB8p9cG+5DjeQNF3FOLFEcD3Ffic+ + RCaSLNCkjM46+o9NNldlNu2uYh/sLNHgKhLvzcVeWE9CvVhEokySPVHogclib8zwf2cqSfLL9RjiOOsm + qW1Oc0E9r6OWMamRr9tIDLr4XWeRBk30v9UykzjJFQUEffkEmdkJrshN9kBZrhZ1JQR3vI6SXFfkkdjl + si1yk5yRzZiWRbCaGe+smJTOyk1ToUCMYLaYYLaUx6zhfs2pLuhKJ9jnf48RkEzz9RLH1qpMRzuvpW2j + z76OJPXGBm8cqFfhYL0Hbq1zw+1NrjjaRn/f44YT/So8NaHH6+sj8IMdyXhvVwa+vzker8+H44UREx5t + 9sIDFa54sMIDDxI7PMS48GCjH060B+DRvjA8MRqJF6YSFRMB+ERbEG4r8cL+HEfG7y620T5e33U8x73J + LthFsL2T9+FQiROeGPTAt7bo8F9HIjiu03H+rSJc/mkFLv+ynD6H9otS4HsFuPB0Er48asVn1wXj4y0m + fLI+AJ+spR9bF4q/rw/DXzZE4I/rI/Hr9dH42bpEvL2YRGwViZurjVhjU6GNJLSYJMFGIphOEpFIUhFD + whdB4qnMRF4WgqPYX+IIlKUMUB5BbkmBP2rLzWisYqwtC0I5x3FJgTcq2D+qit1RVeKK6lJnfsd+UOaM + xkqHANyuCMCy/q8OnbJt1qKLMd8hAHujucITTSXsP/SDdcRTDfTPLXzfyd/3Vnuht0qF9hI31NlcFOFX + qp80ZDsrWQedBexntA723a5CFXro6wdKPTDO34kAvKrVG+sYSzZ2e2HrgBpXD+mwZ8wP10/44+bZUByc + t2DfWCB29flhS4caa+ul5PNyBjD7yHrG/i3tftjYRmvR83sN5qsdIvBklTcmG7SY4OcjLb7o5b7NlVLm + zZkgn23LsZBMf59GspWR6I2sZC1sMtMzSU+ypUNynBrxBPmO9eJINMJJlCyuiJAZpyJ+0qKiZaa6CMDu + /ykAk8gbSRqDSBKj4zRITJaScSIAL6/rm+bIBpYM3WiSryhF9PVUhN9oErJokp+YWBfExjkjjucXyz4o + JEmEWRGBY3n+CSkuSM1yh40xNKeIhJ/j2SEAy/rCkiHrgmiarJMbyfdxHIuJHJdpWV5IzVQpWcSyn0K8 + eNyIKIcAHMWtIjTHOCvCr6w9rZhVSozRlNmrIgY7BGCZ1XpFALbIrHTJOvSAKchNKYGmCMDLtvLaUQLa + FcEWIXUqWJYFYKUEdIybYlaOPRGAo0l0Y+RhJ4ljHIljAq8vMY1EmNeQRpKZlSfX7cPrktnKrkjN4P3M + dIGNPiU/m329nP2zXq3c/9EOP8z0B3IrgpRUNHAisXMisRUB2AXpJEzZxCXFxRpU0482imgl4hUJVFOJ + rDHpi4YiHeoLdKgh0a1iTKzK45ZWS1JWX7QiANNKTIogXFdkRF2hEbWSlWf3R4NkBVfKmsChaKsL57lF + LJsFrQ0WtNSHK3ZF/F22xtog1FcHoKEuEC3E3j39MRgeScTYSDJGhhMxMhLvyAIeTcLIULxS9rmL3Eis + pytC2UpW8MioI/t3fj5TEYBnZtMxNp6IgeEYdPVZ0d4dgVZaZ380+vj54FQqhqbSMTjJ7WQyhiYSMDwV + h7HpWIzNRmFiPgKTi2GK2Ktk+y5xu8TtKgvmiN8X10RhcW00Vq2PVWx+XQxm10RjcrVVyfwV8XearycU + AdiKrhEzyjluMwtdEE9fEk8uIhMAZN3nFQHYGOQKv0BX6Iyuy+KvlHqWNX5FAPaA2m9Z/JXtigDsp4LJ + 6IPQQA2iw/yQaiWhj/VHYYwBxVH0lVaSaasOdrMa+SE+sAWrkBrIcWmg7/VzQqjOCSG+3HJsW9mv44Kc + kRTihsRgVyQEOQTgr7J/vZAX7Y38WG/YRQBO9EVFqhHlKUbYE0jqo1XIDHdGCv15Gv1KbrQaBdynMCUA + ecn+yEzQIzHKC1GKAOzG8eSilD000fcHmEUAduO48+B4VUHWGLdYvWDm/4aa3RXxNziM/ogma/SuZP2K + COwQgmX9XoeJAKyUdqYZg0UM9lYyfrV+rvDm9XrRfHydodG7QMM2EFNKGorJw0+DMyxmHySwDUUAzskM + QqEtEKW5AYw5gWiUiUmVDgG4mZiksdwPtSW+jE16xiY9CgqIM0sCFQFYMn/TyCNlLeCsfCNy8/ldPttt + RQAmDm2niQDcna9DH8fecJ43Zu0aRQDe2x6GA32RxHcRuKE9HNc0hWAbx8xcsR4DNvp+4pNy+tV8+rKc + KGfkxbnDnuKNqiy9kv3bQKvNMykCcHmGQ/wt4vcl9NUi+pZzvwrizLJMXxTz+4I0b2IhFbLk4Rwxk5LR + K5kUjAuxjAmS/StZwFLOTzJ7U+njs8gJM+n3lRJz/P+0GPqcGFduXZHEfRNFzLE4I9YqwrEH4qwqxEV6 + Iz5Kg/gYX8TH+iIpnm2UEoicrFDk54WizB5GrBxCC0JZsT/K6W+qy/wVn9HZalEmgowOWDE1ynE2ZcXs + TARmZy20cMx93eY4ZmfDMD0TjKnpQFoAJmnyemZq2aaDuaVNhvI1xzxtbsph89NmxZZmQrFqOhTr+HrD + TDg2TodjK7dXzViwczaCZsZu/v/uSTN2TYTi6uFAbOs3YZMsCdHihaVa4tgyFwySx3flu6CvXI0Ouxq1 + uZ4ot7kR67ujgvi1gn5asRwfVOUsC8B2X3RWBZBDBKOP199bF0qMEowuEX+lTD85TSPjRbWy5iFxFjFA + BeOgCMAi6IoAXErcJ1aR4YEaHrsxj349V7KG6eNtPqhVBGBvVDOOVnGfilQ3VDEu1aRwf8kk5utqxqtq + HqMmRdZR9USbzQsdPMcOnm9XDnFQtid6bR7oF9GT/z/CWD6VQRzPfSf4fpjn1Ufs3xHH+GVxQgnHvZ2+ + z86+W8A+UshtjTwQz/HAFHnI2hZ/bOkMwY5uM/b2hmNPazC2VqnJr10UMWaR17qaMW4TOcz2fBWuLvTC + NuKzLeQs2/I9lO0Gtu0Gxr+r8jXYUazDrlJf7GC7iwC8jZhP8PlOuwsONPjiQKMB19X6YVeFHhsZE1dz + LM/kaDGa4Y3hNE+MpntjPEuNaY7l9ZWhWFsRjLlCP4yx3UQAlko3Xbw+ZS1HEX/p4wd57YO8LyJ6d3Ef + EX4bee1NtBZer/KbVFnWRotmGYupOhTGM/ZH+CAxTIUo+jozMYeUcQ4wEVv4iwjshtAgd4QFy0NZ4otw + L1gjvIllRADm/vydQwT2QFCIhyIAS3lPRQCWCUZSktVIX0c/J6YWX8gYYDQSF9HvxUeqkSQCcARxGLFL + DsdxLn2MTKQVAbiA/EjEuwqbDtV5BmIGIy1AsYp8E/mVCcVSvj3LDznEhun0DWmJxGfxxDKJKqRwmyrZ + YYr4S7+RqkZWug8yeUzJpkpOdEeSiAJJbkhPlowwNx7HHUXZXqjmfWwqpt8jPmwv9EQfeedYlRZTvHdT + TSZiYz0m6nQYqZQJCuyn7HM1jLGVbOtq4r9q4sbqZQG4mhhJllP53wVgH1QT21eQI1bnuaCRfNQhAHuj + RwTgQocAPEKuNSbYnP85JZWAqsV8eF6eNBXG6rit9cRInTtGRQRu9sBcuzdWdWuXjZyhyxtLnZ5Y6vDE + qk4V1nC7mjbfyrHQxP5TJaVtneived55HsoEkRqO4Sqbnn7cFwWS2UWMncrrK8zkWKZfqKs00GdqUcax + IWVhMxMY29kWUv5XBGDJsIxlX0vJNCGd9ys1y5c4U6Os/SsmJaBFAJblDGx5OuRwPOQx7tgreY+J9Upl + bUZ5KF9qQCHxYyGxYi7HS1YWf7MsAKeSdyTE6ujj2adiJEYQ06dqyKXVighXQl5dSv8iAnAx8X8+71cB + tyICXxGAuW2kdfL1iM0ZM/Sfm4l/d7KN99R64YZGbxxsVeFQpzcOdatxZ78O99L/nqAvfmQqHPcOmnAr + eeDBJm8c6fDFAwOBeHTYgkeGLDgxFI7jg2G4sy8Y+xq12FzmhnWl7ljifV1g31qgr1go9sZigTtW0TaQ + d26v0OK65iDsbwvFPsbjnfXB2Fjlj0XG8fFSE3rtJnSVBaOlLBTVJSHIzzWS83ginPEymG0exPZ3LFMj + mMcFgcQ+Iv4KFhIBWIShqHgv8gTioGjHBNX4GNXXBGA1x5KXUpVD1uBPjvFUll1YWXpBhN8VMTjG6igB + HcH/E1MEYFo4/2sl+1f6wdcFYMFAMhFO1oKV9X7Fvi4AK+v2LnMeMXkt5aFXBOCwCGKyMPoa7ifirw/x + llQa0NDnaLiv2BUBOPArEwwcIniPvifYLJNXnBFEPOoQgL0VoUsE4DzywSL6+VK7J/mMCMCeaKnxQYsi + APMzydhnXK3MVjGGqhUBuMbmq4jAYhX0tYXEOJnxHC/kgonyzIFxKIXtlEuMUsY2bKL1xntgLMkDM/Q/ + 84oA7Ipp+o4JjrEFxtTNBVrsqA7E1ZIBXuWHeZ7PeIEbRovdMcTXfSW0MhV6ue2xe2CoRE3/4IeJMj39 + vTva0hjr2K/bGcdkScVevu7jVjKAR/nZRmKFmxq9cKRNi+OdPriPPuJ4jxfu7VPh7n5v3DWkweER9utR + A3Z0qTEvzz3oI2QcZSfJmsn0oYxZyVk6JGbrEJVOPB3nCiPvv07uNdtf4oAvY4ofzZ/8Q+6hIgDzfpp4 + T2Qry0AFcvs/BWB/miIA830QPw8NdKZvIT8nd05L9lHKOGczduZkEU9meCEzXQUb39syeB9lnXj6iXzG + kHzek1z6naxUyRr2UNavXhGAc4hbM/mdrH2bQp+RnCYlnSXrl2MgQ4/MbBNy8oOQybgjVRyjiFvD6Osl + 09Yqzx+ITRNStUjivpJRH0XuLctP5eYZkZOnR3oGxxDxTArjdXaOcGRi4mUBuFIEYNkSM9jzfZBHbGOT + agpixEnSF7MY39PJ29Nl6Tj6sUzirSRinfh4F8QwVq4IwJFxzsoST2GMoSJQyxgPi3RFmJXnK5WORPjl + Z7JOsJhMwFcE4Bjibo5zyf5NTRMBmDzCZoCNvlrWAV4RgTNSvfn/jvV/lXWAU0QQ9uKWMZZtIH5XMrId + CQG0ND3vA9s3M0DJ/lUE4HQT4mK8iR2cafL8Q56DyPMPqdjkmFC2IvxeEYAtXwnADhHYledNnkB/lRAn + Y1aypKVctp9yT3N43rnsi7kcg457L8u7aJCXTa6Yq1USP4oLfVFK/FXJGNZQH4K2Fgs6aI3Ev+XEupIF + nMWxU0H+tDCTh5uu74fTr/Ym4v1r4/GzXTH42c5oWhR+tj0SP9lkwQ+WQvD2eADeHg3BGyMReHM0Bq+O + xOPZgVg83heHE72xuLc7mhaD+wej8fBwDE6NRuGpkUhFAH6qyyEAP9NpxAv9wXh51IJvTEXihelInJmO + wJNTFjw5bcXzC3F4fV0avrU+E+8oAnAMzrQHKQLwo/W+eLhGgwcIYMVOEGg+2RaG53qteJFE5iX+16tT + CXhxLA6nB3gu/O5wQzAO1AXhWjqNq8s0igC8no5kbRmBQrUXFusYmBo48Bm4pmrVGC73ZvBRcUvg2hCB + te0p2NybjWtGSrBvogp7x6qwb7wK1/H1vvFKXN1fiPVNqZgqDMdAsh7j7ACTtgCMZhrRxQ7XlEAHGkuw + x05bSOBQJLPL6DTF7Ak0AYLs6CXJJC9CIAiM2hiUBwl2Vjd54AY6rIcGtXh93ITfjgfin5NB+Gg+CGdX + B+GL9SacX2fEhXV+uMwtVgXgsgjAUw4B+C/DPvjrpA7/WgzAJ5stOLcnERcPZgHHCoATduB0MfAUXz+T + BzyZDTyYCRzNwtmbsvCnbWl4bcSCO2t02EqAN0fwM0byMkaHOEmyIGVQb6pW4WSbHt/sNOC7bQb8gPfn + 5/VG/IYB/ZcNYfghCdY37EacLNLjcDGJHMHPAIF+I51XdY4fgW4wKgrMqMyzkFyHod4WgvYsfwyxg8+T + mF9FMnSgUAQRNZ6u1uLNFhPe7Q3GT8fC8Kt5K3612oIfLwXhrWk9nhtW43iTCw7XOuP2WjccrlfjCAHt + YfaRgxV63MB2vS7fFXtznHBdthNuszvhZKsLvrvGgP/eH4WPjkTj83sj8fndIgCH4ZPDYfjrXiN+v0mN + n8244duDTnitTwRgF7y2RodvXh2E1/ea8cY+9uOtJjw164WTXc54qNEZR6uccYvdsTbnFgahRd77CQbG + /nBX9MT6oJ3Oo4WOvTHdGQMkUFcRrJ5YH4Bf3JGETx5Pw4UXUnD5GyL2WnD5mxHAWzG4/O1kXH4nCZfe + TsTltxKBN+Jx4eVInDsTis9OB+LTR/zx6QkTPl+xB40490AAvjwRhMuPWYDHo4BHo4GHI3H53nCcOxyA + swe5z0ETvjhowNnDelx8KEBZX/jSc/7A68HAt4Nx+Vv+uPhtEy69Y8DFl/3wxSktzt2jwae3avDP67X4 + w24NfrLdG2+u98bj4x64rcMDW2tUmCXgm6CjmbL7Y6EkAFsbzbh5Mh4P7sjHMwfr8cqRDrx8uAsnd1fi + uvF4rKol+ShSYyKfRjI8QyK/mOOGNTku2ErisIP97VraPc0ueGXeAz/drcWfD3Ms3GfGJyei8cljMfj0 + WbbHa7G4+J1UXPhBBi69m4VLP7bh0ns5uPTzPFz6bQnwxyrgbyIAdwJfDAMXJoHzU8BZ2l8GcPnH9fjk + uRz8+kgknl2lxoFaJ2wgYZgkIOjmPRxgAJpl/99U5IZ99W44OuSBZzZo8MMDBvz7VBjOPReC88+H8h6G + 4dKLvHcvWQHepwsvWvDFs+H47OkQfMT79eGj/vjwkQB8Jr85E4EL34jj/U1X1gPGr3iekgX8p9plEbjJ + kQX8QSMu/KIJ537YhL++XIUf3Z+Lp3dacOuwCjuanLCn3RXX9aqwf9ATd8zq8OQ1UfjWsTz84YVOfP7e + Io+1m9d9E6/7EHDpsGKXzh7Ehb9fjy9/twN/fnsB33+sG0/cWoFDG9KwrjcM/fSbLaV+aCjzVxacLysx + oqTUiFIC9dLyFQFYypcy0BLkxchMNYIUKWVky3JFSYEnmsq1GG/yw96JcJzYkog3DuTi1/fZ8c+T+fj8 + 8Uz2uSTg6Xj6oXj2vTh8+UICPnspA398KhvfvD0Jd20Iw5Z+I3oqfegvGPQy+Z9pgQQxIYhPDkFkoh/M + sVqEknRH0OKiScCEKBHUVxH8DNVEYH1vEg6uzsXhtRm4YyEBh2csuGWIfoFtdkOrE27h2L5vwQentpnw + /N5wvHZzDJ7bG4ZHt/jizikXHOx1xv4WF+ypdPQHKWEzx76whsBH/OO+Ch1ua/bHrfQ3N5Lg7Le541CO + K47x9T0k2fdJGXuOiWeqfPFCjR+eKvXBkyTCL9TwfZ0ep2VZg1Jv3MvYc5Rk+DaSpquTXbCaQGya/W6M + 4HpUhGD+5wwJntg8ga5kIW/MdseWAhW2FPlgI4n4Bv7PuhLGNZLwWR5vgkR7jOcxTvA8STI7XqrDYIEP + um2eaE1zQzOBeBOtmfdMKUtXqEFXkRateSTy9MG1WWpUERgWJnsrgN+W4IYSIQQlJMeSHU4ync/zyOP5 + iACcl+KG7EQ3ZEn2L03KBOWyX+STrBYkc19+VhjrjEqSaZnB2c3YMpTmgklu59JcsSpdzFmZeLFIk1LQ + V5MEXFOlwR7G/b2V9OWVnrihyh030tcepM+/rd4V97R74fRYEF5ajMQ3V8fhtcUoPD8WjCe7ffFQnQeO + l7viXpLTe8o9cE8lCUCdBsdb/PBgdxBODprx7FQ8nid+eIJY4nijEftzOcb5/3tJmvfwPPclsw8QpN5M + wn2QQPGGRGccJlk42eSMVyfc8du9gfjk/kSO9Vxc/n4pLr/H+PrzIuAnjLHfph96MgYXjobj7HX011sM + +HSjCZ9uCMTnW834nFjr893x+HRPMj7ck45/7MnFL7fa8Np0PO5vDcE1Bd4Y4v2vIVEoJCHMJmlII7mI + I6mw0mTmqDyQCA12zFKOZJ+JJZhMJAlLJQl2PDRQI49EoMhG8kasYc/14L1zRXkRgWCxE4m2QwBuqnRH + a50n2hq90d6kRgdNXnc2qmkadNaJAEyyWK5SBOAG/rbR7oKWYleSdg/08bvhBi1G6jX0H57oIplrYixs + tDmho9AFgxXsh3WMDbTRKvbFMm8MkOyNlHtiutYHiy0arOlQY2O3Gpt6vLF1QIOrB3W4ZsxA3BWA/TMh + uGnOwtch2D0UgKu69djY6o0lxn0xRQBu0vBzf2zrMmFLmx82NOn4uRarG32xqkmP0sj3dQAA//RJREFU + VfxsdW8g5nsDMMl9evlZCWNNAcd2FvtxAsddMsd4BvGbLVmLnBRfZBHfZSwLwDEkHOEhBPAkdhEE+yIA + S9avCL9iMdEqJTvYKsJnsAsCjc7wkweEfi5KmcAAEkVrlLfy8CiROFFEYCXzl2RDSjPJQwtrlCPTVjJ/ + Y+PoW0X8JYYUYpSQ6IJ4EulYEqQYnucVAZifJdInieBrrzSgiDg2365VsoCTMlwRze9j6DtkKwKwrEsm + JaOz8jQoJBmQ9cgys71IDN14HJIQ7hvF/YSEKZnGfC0CcCT/T9YCcpiQlv+7AGyWjN5wyTqUmdIuXz38 + EPJMU7J/aY5Z8K4IkVnwsh7fsgAspZ5E/A2PIbEjno5ke0RLmyxnLouIncAYlJxBMpntw+vRIpvXlJnj + w2shoaRvSeJ9TeNYzpJqBeyLNaWeaCfm72WfHuvww2SvCYMtvmgodVf6gY37phK/iQCcRV+ZS1xSTIxS + Xe4QgJsqTEqZ5waSrQbGJcmskfKKFTk0EttyEtwKnktNge5/CMAG5X1NkTz4JUGm1RaRqJUGoLkiGB01 + ZnTWR9Ai0V5vVQTgtgbJBA5XTBF+ia9bG/ma28baQNRWmVBX44+mxlB0dkWgvz8GI4MJtEQMD8UrpaDH + R5IwOszP5L3yOhFDg3Ho643CAPcXkXh6Og1zc5mKTc+kQ0pHDwzFoqcvCm2dFtS3hKGBvKqjPxZ9Iyno + G05GN/+nayAGPYOxGJ5MwOR8CqYWEjG7FIv5NdFYvTGeFqcIvnNLFuUzsaU1sVhaK+Iv8R9tfl0cZtfE + YHp1FKZWW/k6EjOrIzG5FIGxRSu6R8yoavJFNn1NEu9hEmNFXJKUAnNWygD6k3AbRAAOcIWW403Eyv8U + gEXA9LwiAGv9VMvvPeGnZ980qREdoke6xR8FMUGwRxPjWP1QTquI0KPcrEVJGH0nLSdUjZQgT8T7cxzT + H5s5tiUjODrAGQnBbkgKcUdioKtiqST9mezPOZL9yz5dEEuiTrPHaRURWNb6FbMnaFAgArDFDakh9D/0 + LfK77BiS+wQj46hk/2oQy7Eka8CaZa1Ks5uy9p2Bfj+AfihEHjhYJfvXi/7Ih699YI6Q7F53pZygPFSU + h1NBoR4IDFPxt1KSXcrWeSrrAAeFeDnWA5Z1gcN8aGrFAni9en9pw2UBWOukbEUEluw3MXlAKfaVAKxW + BOD05ABkpfkjL90Ie7aRGC4ANcXsq+W0Co6HMh3qSnSoLZW1t4kxZY0rjocieyDyyB8y8g1IztUjJdcX + Gbl+sOX4IjdXi9IiX+IPPY8TgLYVAThPh16OuSHyh2niIVkD+NrWUNzURbzXE4kDnVZiPlluJhyr+Zsx + HrMj1Qs19CWFUQ6BJjvahRjFHSUpPsrav0r551yeN3lpSTrvUYoXchM9kZ/sA3u6lG41oDLHxK2vkjlW + kO6N7CRPRyZvnONhckIMfXikCL/0WfSRIuTKOmcrArDEGck0yEqiJXjCxv+XdfVsIgYzBiRZ6dcZ02X/ + hEiVYg4BmHg3SqeIwCIAp7GtHQJwCMqKw1BZEoLK0iCUsx0r7bIeG9u8PhQdzWb0doZjpNeCyWELpiYs + mBUReJrb6QjMzVixML1sxMrz0+GYngzG1Hggpsb8MTlmovkrr6fGxfj5eBAtBDMTYf9hs1Ohii3w94u0 + NZNmrJ0Mx3p+t3EiFFv4/moef+eMGTunacRsVw2TM/YZiQFExPTGqgZPzFW7Y7LCA0N2eUjrikbywypy + jLJMNxQTMxZnkm9keaCcfrqS8U4y/KqIZ+uLdWilrx5sicBoexRG2qMx3BKJnupgZeJAczH7UKEODfKg + m/GjjDjv6wJwRbq7IgCXEI+LlfJ1OWNKtY2+3cbf0KqyZMKAF6q5lZKZ9TkaVEmlm1RPVCS5oZzxqYy4 + tyyOFu+EUlo5Y3gNj9fA+NtE7N1KztDFbVeGO3r43338fpB4epL/P53pSXzsEIB7GPNb2E+ryAlKzTyO + 1RnljImlPHYx43IlY3qrTTIniXmaTdjcEYRt7UHY0RaI7eQa69l+84x/M8S0Mol1LePcVeQw11f54TpZ + 27eU3KPYE3sqiLeJ1TYTB69m/NxkU+GqAjV2EE+IACz7XFXojKuKnLCzzAU31PvgemLq3eQyV5f5YBPH + 9Hq27WK+lufvhckMlZIRvIpje3O1GTuao3FVoxVrOX6nGTtlveB24gsp8dzD85Ls38FMDwwz9o5kqZQM + YBGA24nNGnndYs0cF6285jZigNZ0NWrTtbx3GmQTWyWbvRAX6gUrLSyY/k4ytPzdEBzgjpAAj2UB2CHy + Srl6S7i3IgKHE6c4BGD+TibG/A8BWLK9RACWddC1BjHGGyXWENfx2Moa8uShyYoATGwVSfzAe5TN81Yq + KZEP2VPYr7IELxhQVyATwgJQVxy0LADTT8rD3nS9IvRlpaiRQV+TIesOLmP5dFpGioiExHYZOiXLKydL + 1k8n7hFhIFuHvDw98nJ0sGVKdrAHcthni3LYJwscAnBrsRc6aQPl3pis9cUM+8p0kwkTDXqM1mqVijyd + 5F610lfpqyqEfxAD1vH+1BEX1aYuC8Achw4BWARfNTGOlH5WLwvAxEv5HD/E1lW0xoKvBOBuRQD2wCA5 + 6ij7y1SNhvhfi5laHWbqeT7E6xPkA+M13hir9+Y5eWGEvERE4LFGD0zTLyx0qrHYrcVipw9WdfhgqV2F + pbavBGDJAl7qUGGe3HCk3hMtdmdU5/Dc5bmE+IWyAHSUm9FqN6My25/+1lMRgPPTPVEn+K7GhIYq3iPG + qBKOz0KOz0xiDlkLVpl0S64lS6BI9m96tgkpjBEisMQnExvQZFmXNPJnWSaroMSEIv6fvSIAJZWBKKmg + VQahoob3nZiuti4UZaX+KMzXw8Y4IgJwepKWfp0xn7E8hnE9LlLWpWUfEF7CGJSXKJOV6PM4vsrpJyQD + OJ9jR0RgRQDm2BYBWJYfbOS96iRuGspxxkyhK7bWarCrTos9DRrsa/TB/lZP3Mx2O9jjgyODetw7GogH + 6J+P9Rtxc5MKO8roI2rdcaRLj4eGQ3F6MgqPjVpxYsiMe/uDcaTHH9c3a7C9xhObeK/W0ResbaT/bvAj + 96LV6LCO/H1DhQ+2NxhwU78V+xl/rmkJxia28xJx9XSJL4aJj3uJhQcaItHbHI/6aivy8/0RHeuJUAu5 + FPFOANtesn5DlgXgYJkIx/cBjJEiAIeSi4QzzoZHSUWmZQE41iEApyQ6TErsJi8LwEnkGA7x1yEAyzaR + nCORcTuG4zeSfd/KY0eI0e9axPh/IgKLGCymCMDk4SsCsJR1Fk4jIq4Ivl8XgGW9X/lcEX+XX8sawYLf + ZOKrmb4jINTBk2RSnQjAPv+bAEzev2IiAIdGqBQBWKotBclkWvLUMGJjEYBTiWlyGKPyJANYBODlDOCG + ak80c5w1iQBcQh/B7yqyGQvp80WXqGJ/rLbpHCIwcY4IwPmSIUmfnUy8FM/2EQFYMEqmxRlFxOO15K8d + jEuDCW6YYPybTfVQROAZ+vUJ9s8p9tU5xr51hRpsLGM/KdM6nleJCEzfM1RB31RJq/ZBf6W3IgQPl9JP + ENNNM06N0Lf05DAmkKt1sY/3so8PsI8PcjtM3zTB7YYCJ/ZZNxxuUeHedk880OGB413uuK/HjX1WhWOD + 3jgyosGhUV9c0+WNmXJntGUzrnLsFKbL8wDi9UIDCoihMrmNpS81M44H8HoNvPfS5sJdNcS7vuQcskb8 + FQGY91PuqfTNUGL6ELOrIgYb5f7zN4oAzPsXIMbPRAAOEwGYWD6S/TqVWFB8eU6WD/EcsWYBOYJifrCT + M5bwfCoYN6rLQlFXSf9VGsx7aoBNKkHw3igxIIcxRATgLB3SGSfSM6QsPbdZemTl0N/lEi8WBKGAWDGn + KAjpOQbEJKnIt52hlFmWieeJjKOMPzEcM1KFK4qYNJVxtsgehOKSQGQTiyelOPi1LUeWSdKhosKIanLk + qkojamgiABcTk+UQq2XST2UpArAncmzkROxfUv4+i++z+T4/n/E7j32VMSuB/UaqlkUT20QlOCOC2GdF + AJa1v8MiXLl1U0wqsFlkqwjAPPcVATiWx0ngmE/V8vp9FQE4m3hd2sXGtrgiAMsEKrZ3RgZjqwjBHCvp + y9U1ZI1wpewzY/B/CMDpkgEsmDsQubZg7mtETIw3x5tMuuC4W+ZjUoVJEYDJv8zkbA5zCMDynMTC8RKh + bF0RaXXneXtAlhdLoI9K4TmkMtZnEAtks91zGOtzJQuY5y4lvsWkj+RyXOdnq9nO5CmFeocAXOqHuuoA + NDeEKEtFNdWFcLz7sw8JdnDmfhqMD6dj7+4OOP3+YAZ+c1My3t8Xh1/sicEvdkXh59ut+NnGMHx/3oRv + TRjxrbEAvDUShjdGI/DqaBSeH4rEqT4r7m8PxV2NAbirORD3dgbj4T4LTo9Y8fSoQwB+sisAT3WacKbD + hOd6gvDisBkvTUbi+ZkoPDsbhTNz0XhmPhYvrUrEG+vT8c66TLw9l4pXRmLxbEcwnmwy4lSTAY82+OJE + tQ4PVGnxYLUejzUGKVnAL/RH4hsjUXhtOgEvjSfgVH8M7iHxO1QbgBur/bGbwUUpAW33wuZyH2xkIFrL + ALW6UYs1Lb5Y02bAYrMfwYYOfQQz3SQRvRxs/QX+6M8LwHgJSVFVPINZGrZ15GFXfwl2D1dg11AprurM + w6rKBEzlmLFUGIk1pTGYK4xAd4ov6mI4IOgYsxm0shkkCugsi+M9UMLgbU8gICNJzCUwFHCYT6JQQqdb + TwfcWeZGJ+dM8uqB+/t88NqIH35LsvVvEq2PZwNxbikI59eZcGm9CZfXGwC+/k8BWIu/j2nxz1kpEx2G + L3fG4tL+NOBwDnC8EDgpAjC3T2Tj0hPpuPw4vzueigu3peDja5Pwwfp4vDZoxtEqHbaTHCzSGU4SaIwl + E3yx4yyQQOyyu+KuahWebtLgm02++FadDj+s0eMX9YH4VWMIflIXjNfLDHiyVIe7S/XYSccwmeON9kwV + QSOdRK7MdAwmcQ4jgAkh+QpEW6bJIQATHG/P9sIthV54oFyDM7wvb7WY8P3uIPxoMAzvTVrw7nQY3iT5 + fG5Qi4cJ8g6W0tnbaSXOuInE5bb6AN5/f9xMIHddMUFOngeu5XlfR7sl3wn3Vomg64lfbg/EXw+Y8emx + CHx2jNu7QvDxbaH4+z4T/rBZh/fnPfH9URe8MeiCt+bU+N4OM354MBE/OZaFnx3PwQ9uS8IbO4LxjXk1 + nh/xwuNdnjje6Imbil1wFQPTAgnKKANjV6gz2qN90Jrqi+ZMLRozXTDA872qT4WTWwPx+7vT8cXpLFx+ + Ic0hAL8WAbwZBXw7AfhhBi0Tl9/lVux7vGdvx+Hci+H49OkQfPJYID46YcJHDxjx6QMmfH6fP87e648v + jwfiwn0huHSfGZeOW3D5HtoxC87fHowvD7AfHRSTctAiGAfji1OhioCJNyzAdyy49N1QXPheMC5+JwiX + XgvA+Sf98KWUmz6swYc3avDfe33w852eeGeTJ06Nu+JQiys2l7liKs8dU0U6BnQDA7sJV7eYcWgxGSf3 + FeH52xvx8l2deP62Dhy/yo6rByIxVUHgl6/GEJ2/zN4fJfCYIrmfY3BfR+KwLc8JexjM76x3wrMTLvje + VhX+64AR/7gzBB/ymj58IAKfnDLj7IuR+PKNeJz/dgoufDcNF9hWF36UhQs/z8XFXxcDfyjHpb/WAf+W + EtCDwBdjwPkJ4Nwk8De+/1kjzr6Sj/+6JxbfWKdlH3LCFp7DAoPbJInQPAHGJskkJ5m4e0CNp9ew31/r + j18d5rh8PAxnn+L4o335dBAuPhOGS8+H49KLbO/neW5nwvDxE4H410kD/vmQH8/ZiM8eYZvzd+fPWHHx + 1UTguzaeA8flb8qA31c5MoH/Wu8Qgf/YwGtowBfvNeBfb1Tj/cfy8eqNMbhvQYv9Pc440KvCLUM+uGVY + hbvmtXh6VwS+fWcW/vBMEz7/Aa/vD1uBf+wBPr2B1y1C8E24+NFenP/TDnz+s4344KURvHVvHR7el4vr + 6Y+XWgPQX65Dp6yPRaJSS/Ii64pWVvgzsJOoyqLydoILjmkpPWqVGVq0eBKkNPoLybQqI8lrqSapayeJ + mLXi9FUpePtANn5zvAB/uT8DH59IxAWZmHA6EniSff1MNC4+F4tzL6TiH0/n4Pt3peLEVgt2DhrRXeYB + exYJmJQlsXgRiGsREqaFKdhRhlDr6wwDLdSfgD3YBakWV9SSSE/UR2LbYApuW2PDHasTcWgqHLeMGnDr + oA8OdDrh9kFn3L+gwvN7gvD24Vi892Amfs22fe/+dLx9iDHsasacRR/cy7F9a7MHtpFASjbuPMf1JoKZ + PSS8hxoDcaQlCIcYk67LdsY1BLg3cuwfJdG8n2T3gUIVHiN4fb7egBcbTHiShPc0Ae1zdb54pk6PRyt9 + cF8JwWixCrcWqbC/wAtbUlwwR7AzTrAzQhuSLQm4TEaYIAEXm2a/XMx0xWr66LX5Kqymj5MS6mtKSIbL + Caj5PxME+cNCtPPFVDRv9No80ZFBMp7mjjYCrbYMFToIxHrztegjcOgr9kNXoS/aC3zRVmBCUwGJKwlp + RrwrzQ32KwKwlBP2QiHHqqybkk/Alp/ijjyC/mz2BbEcmrzPJyEuYIzLI8HO5XWVcduQ4BCAh9NcFWKw + mOqG1WluWJXmglUE8PO0VTYpV+WNLSU6mgbb7CSQJSSkJe7YUcQ4RNtT7ISbK91wvN0Pjw+GEndYcGbE + jMd7DDjR6I3jla44VuqMu+zOOGJ3wR2lbridsevORg3ubjfgAWKSJ8eicWY8Fo/1mhnXtNhHsryX/38d + 76Nk/96Q7IqDJPR3EEQeI/g6wnM9nuuE04wjr3U74Xeb/PDJbey/pzPpPwtw+buMtbIe+ffor19PxuXH + InDxDvpdxpWzW/3w2UYDPt8UgLPbzTh/Lf39DYk4vz8VX+7PxLkbOT525eHdpSSc6QvH7fSPaxKd0UsM + UUeyUEyyYCPZTCChsIr4y/fB/FyEYDMJhJSFjqBF0qJJQKL4u1iarCloI7HIYSzPZ78p4hiVcrel9K1V + bMf6Mhe0kMC313ujrdEHLfVeaBYTQbjOC+0NanTU+iiT1FrKPdFYImXd+Bu7GzpLPUjU1Bhmf55uMWK2 + zcixp8FoDbEU708X/2OQsWGaGG51ZyDWdgVjqc0fsw3EBTzeTJ0ai01arO3QY30373WfDpt71dg6oMPV + gyRoHLPXEn9eNxmIG6bCsHcsmBgsEFf3GZUSkWsa2f8bPLGmwQsbW4hbevhdbyC2tvlhU7MvNhCjbGo1 + YANtfYcR6/uCsLo/ELM9/hhs9UNNsRvKCiSb3QWJ7J9i6fFSxlPD9iLYT/ZDRqIvkmPViLa4I5TtHcb2 + thLsR0lpzhjVFYuLlZKf3oiVTDyzp7L+XIBJzB3+Jhf4BzrIQWQ0903wUdbgSUz1UdbmkRLS4VYSQZJM + ybSNiXdHPMdcPMdRAslQCseXrLmTQv8Qz5gUy3EkIrBSApp+J5Xnn0+8U1kfhLIaE4qIfXOLSPxsJBX0 + GTH0HyIAR8lv+TrN5o78EpJ64uRykrZCjun8Ih/YGIfTSNjik5x5Do7jR/O/RACWrOD/PwJwmIjAIgCH + ykNUEmd5gLEs/q6YfCbrZAl5llnw4VH08WyfCGJoEYAtMTxWNI8ZI9nLJIZxUrraBbGJIgI7BOAU+jGp + SJFDEpRboCUh9UEa/VwirztB2ib1KwG4spi+r0pKQGsVAXisy4ieejVqith+3EdKgqcov3GGbVkALizw + RlWZDg0VfmgoNaChyBf1+TrUkQRX2rxRkeWFUrFMT5TQr5aJMJCnQd3XBWBavYi/NBF/xeS1ZAE3lwWj + vcaMrvoIdIgAXGelLZeCvrImcBhaGs1ob7Ggpcl8RQAWwl1fF4S21jB0d1sx2BeriMDDQwmK4CsC8PhI + MsZHkzEznYnZmSxMTaYr343QROydnkrD9HT6sqXxsxQMDcWjty8GjS2hKK8mZq8xoqEtHC1dsWhqj0It + z6GqPhhN/Kx3KA6T8xmYXUrHPH3X4tokrNuSivW0VWvj+FkU5tdwS1tS7CsBeGF9HObWxmB6TbRic2uj + FBF4cpUVYwtW9NCfVzfpkUufk0y/lZzuiniOAZkIIKW/gtjHRACWsmzyQEbj5wrdigDs5w6N3lMx5fXy + e7WvBzQ6D+i0/L2fF6ICtEg3cwxEBaMkktca4YcKi5geVWZyljCS63BfFNFywjVID1EhIcANkcQf0UZn + xAXLmr8qJId6IjHAFUkc92lh7rBZfZAfpSbX81bW+xUBuCjGYfa4FfNBcaw3ciI9kREmv3VGcogr0iO8 + kBWtQ3q0FolWnmOYG30Kr5nXG2p2RwB5hQjA/twGywMHJfvXh75DC1l3WzLvRfxdeTDlMA9F/PUP8fzK + gjwUE6FDTATgILOG5hCB//8LwD6Ij5aqCUaOJQOy6UMLs/yU7LbKAvb3EvbXUj+aFrV2mqwTJgJwsRHF + xSYUFvsju9CItFw9kmw6JNu0SOU2g9zQZtOgmOOuokjvyJwnx2jnWOziOBQBeDBbhUliqDVlWuxsYMxo + DsHNHeE40BHBbTT2NUdiS3UY5u0BGCDfbGJMtNOviECTSZxlk4xgyQSmTy6XilXZfijltiCNfjFRMKgr + shNUKCQmKsk2kMv6oyxHT1zEfdJ9kJ2kUsTfZO6XQL8VrwjA7oix0m9FujF+0HeRE8aJAMzv5IF+VooX + 24ixmb8tWLY8xoMsfp8aSb9PX5uoCMCeDgHYStzN/hQTKQIB+0acH/2VCVnpQcjLDoI9PxjlhQEoLzKh + lP6lnD5I1rVsqA5Ca0MouuknhrrCMD4QjqmRcMyMWzE7YcXcZCTmpiKxwK3DIjA/YcHMWAj3C8TUsD8m + h02YoE0OB2ByhO/l89EgWrCyn8NCFZudCFZsfiIIC9yumjRjzYQZa/ndOsbwzRNh2MbPRPzdMRGC7Tzm + 5n4jNnUZsK5DhyVy6QXij+kqT0xUemGw1AttkqGU4UxMSiMGL0p3Q1GGK+yMceWMW1X0/bWF4nd9iVNM + 6K4LxVhnLCa6EzDeE4/Rjhh0ktO0EOfWi3+WdVHpv2UN37IUNyXTt3JFACY2LedrEVfEisl17MR+5fTv + FYw3lYr44qlYpWQO5mjRkOeL6gwfVKbyeIxNdsapIvIFEWilTLOdcbSY2zLG1ErG4FrGmKYMF7RnEEfJ + sij8/17+ZiDRBeO8PhGAp4nVR/l5X4IzmtlPa9gfKthXq2N4nkk8F+5bxM/LeczmTGcMkncsEIutaybW + IebaUKPFenKohVxnTDIOTjO2rSa+3Up+vYfc40CjP26sN2JflRbXlHnjhno9zRfbCtyUTOF1bN8tuV7Y + XuiDnXY1TUUc7kpzxq4KHqPaA7sq3bGtxA1bitwUzL6+SI2lXG/MZrpjJsMTizlqbCKPvKbJimvbYnEN + x+HmykDMC+/g9XaxXXqJTaSM5yD9+3CWCiM2FUZtXsoawH3EIj3cR0TgNl6/lINuozUnuKI+xRvlyT7I + Ie5KsXgiNtiTPNAL4aHeCJHJLXwfGOiJkCBPhHIr4q+Zfi9MMoQVAZh4w+KtbMPNxB9myeTxUgTgQPrx + Fb9oDJIlLCTOuBO3yHIDHtAbPWDk+5BgqQqjRoJVjeQIFdI4zjOJjzI51uUZXx59TJEke2R4EzeQVxUH + oqkkCM2lwWgoCVEE4PI8PxTS1+QQE2ZKli99gKxRmpFAPBbvyECSdWBzMv2QZzOiIMcfhXli9Jl5RhTR + Snnc8vJglJVIaUrul61GHrFIEe+fCMCNxWq0kyP2lHpjuEqNqQY9Zlr8FQF4jJx0iJ/12T3QQa4ra/5K + 9m8N+1Yj700L+05LBrkbTYTFGpsL6slzFfGX/EwqfslWrJ7/I+v/igBcmeOKBkUA9nIIwOSlPeSlMvlz + tNwH0+yfivi7IgBLlR5ygnHyjbF6H4zW+WCEXGS0gf2hwQMTjV7kGN5YJFdY7NJgVYcGS5IV3EH+2+mN + tZ1eWNfthbWSHdzDYzX7oLPcDXUFLqgrlOVpdOioDEZfbST6aqJRR3+Zy/YWjivlshurA9AiVVVq/dFS + LXiN/oG4uoT9OTnOhf2E+J+cKpL+PTlDYpMByZlaJKSQA5DviokILGsAZ9EflFSFoLwmDBW1gqNCloXg + IOL0UDS1RqKlNQo1NaGwEwfmMpbIGsApiWpFCIiK8CTPII9jf0og1pGYkU7ck5PgTn8kE90dk1DKyJ2L + OHYUAZj3qZT3p4JWS7zURMzbmeOMIXKcGXLnbcRSu5p02NNMa/LB3mZ3XNfhgZt6vHD7oB53jwXibvri + g61eHN9O2ET+tqfSGXd0+OLB4VCcYmx4dMSCBwdCcHePCYc79djf5sOx7Y2tzRzn5HGbuwOxsTsI6zoD + sKaF/rxRjw21WlzdFoD9w1HY1x+Bq1oCsbrKF5PFXhhmG/cW6cglTRhojkF/Zwrq66OI5/0RFcexa3FU + PBFhLYhtL+WfQ9gmsvRFIMdYIH1CEMebIgJHuCCM8farDGBPRQROiqfxWFeyf68IwO6K8KsYuYy8j6fJ + cg2R9LNRNCuPL7YiCIsJBwrneUgFLim3LKWfpQS0ZIauCL9fzwD++lrAX/88iPgtnHE9klgwKl6tZDX6 + h7go3ykisOArA408aaUEtJR99pP/XDZZPieUGFExcqhgs4dS+UU4WCyxpYhJNsar3BxPFOR5oKSIcZSc + vLbKA0013mio9EFDmQ+qChnTclQope8tlcmsmWpUZi1nAWf7KqXr86RUrqxNS6wUx7aJY1sksO1Tuc1j + e5QTs7TQ3/WRu47S582mqzDPGDCX4c7444Ixxr1h8sppvl9VxLFbqsEM/dEUY894pTeGaojjaAN1Ggxw + 21cuArAXpqp0mKvRY7pSiyGefx/jWR/79kC2E0bor8a4nWB/l6UqN5c44fo6F9zeLM+G3PBQhxse6HLB + Az2uuH/AA/cOeuHuETXuGNNiN/v+NPdv528rOXYqs91Qyb5YUx1KjhOJoqpgpOQRUzMGhzDmBPCaTWbe + n2AXx/rMIvhzG0DMLpOYgzheg6W8rzKJmTElUu6FcH/eb947E02E30AxfhbCrXlFADY7s596IjONfMBG + vpCvRjmxSjnxsWJ2I2R5r4ZqM7FcFDpbYskJI1FVEYz8PB2yJEuYGDmbeNnGe5ZJjJuR6Sh/bJPM3fwA + cvxQ5BWGIL84VBGAc4uDkZG7IgBLZq0jCziS5xHLfhPNGCQZwbIOcCYxr700BKXlIcgr8FMydhNTHAKw + vcQXVfSdtbUBbDt/1NGqyv1QXOAoPWwjlslmv8rN9kJeDvkQ41Feno9iBdzHXibLC+p5jmpifVk73RVx + ycTLbPdIYh9Z8idUxjnHv4zxFQE4XJ430BeI+CvPT1YE4JXyzyL+Ztkc2b+55CA5OQ4BOI2YPlUyfonX + pPR+RqZDAFaqbiRLlQ1HpY2VtX9XBODMVPHRPGaaUbGMVBOSE/XkXSpFAA6RsUieZrGyPem/laUlyNfk + mcjXTUpVW8VPKVvHOcszFIcA7I0kxn1ZvzlFMADPM5vYIJf3VNZ4ziEXEsvmOedyXOfb2H75egXvlxWT + T5FfybOBpjpi/sZwRQCurSRXKZbzJhYhVh7qS8I1O1rg9F+3peM3B1Pwq+vj8P61MXh/VyR+vt2Cn20M + wQ+kRO2UAd+Z8Me3JkLx1qQF35yIxItjVjw5aMEjXcG4t9mEYwSbx9uMONEdjFND4XhqhN/3h+GJzkA8 + 0W7CU20mZT3gM32heGY4HGd4jGdno/HsQhxeXJ2El1cnKxnAb65OxxvTyXh1KAbPd3Hf1gA8yeM/3uiH + R2oYgOgEHqzS4+FaE061BOOZHgteHI7Eq5M8zlg8HuuNxD2tIbiNAVwE4Gsr9IoAvLnUB1uqNNhUo8N6 + goy1TX5Y10brMGIVz2+2wYhx7tubT7DAxuxgYG/jTe9ON2AoPwxT9kgsViZibX0GNrfnYVt3IbZ1FWBd + bTrWViRhW10GtjfasLEmDYM2DlA68iI6iSwO6iwGiPwoNjqDT1mSN0p5U4tiPZBLRykAMSPKWcmUKrW5 + obHAGWOlTtjV6Ip7u1V4dVCL342a8OFYAD6dCcAXi4G4uM4flzf4A+uNAF9j6T8F4H+O6/DhvAnntlhw + 8dpE4GAGcFcucH8BcLIQeCyH2zR8eTIe50/E48Jdcfj8hhj8fVskfrkQjtcY2I/Rye7IccMqEpOZdG+M + JXtghM5xJpOAINdJETkfYPB4juDstVo1vlWtw49qjfhFYxDeqw/EG1LutFyD42Ua3EAyvirfCz02gsUc + Emt24JIsEy2Y5DoYVen+aM0wYjBTj3kGmO3c5+sC8BsNfvhWiwnf7Q7BdwZD8MZwIJ7tZR8gCLyj1h27 + 85x4rk7Yyba7jvf6YG0gDpDs3lDmj3105HvzVFcE4Ju53x3FTni60wU/XOuLP10fjE/uCscnR7m9Mxgf + 3RaCf10fgD9t0+NXi1740aQ7vjupwo83BeL9A0n43QP5+MszNfjrC/X44FQJfnYkBe/tMePdTf54fdYP + TxFA3VGjwjUEXKsY5CR7r5WgpdHqiYZkLeozZY1NF/TzHm9jIHr0qgD8/u5UnD9tA17IWBaArcBbUcB3 + ee9+zHv3c96vX+TReA9/ytc/SMW516Pw6fNmfHw6GP96yIR/HffDx/ca8endRpy9y4hzd/rjyyOBuHBH + MC4cDsWF2824dJj94dZQnD8QgnM3B+OzA4H4+LYAfHQ3r/1RM849b8XlN2P5v3G4+IMonH/Xiovfi8Dl + 18Nw6Wl/XHxIj3NHtfjoFjX+coMXfrWHbbPVHafHnHCoyQlbGESnCfhnSRTniznOygzY2RaGO9am4vTN + pfjG0Ra8dFcnTt/UiDs25GNjlxlDxbIGkpgGfbzv/VmeGCYhHifJWMh2xUb2tb1FTjja6IRnJtzw7U0q + /G6/AX+/PQgf3RmGD+8Jw8cngvD502Z88Y1onH89USkHff677N8/yMD597Jx4ZeFuPRBKS7+dw3wz1bg + 037g7DBwbhT4fAz4ax/wswacey0ffzwei1fWqnGk3gnb2dfXElTLTOmtBMH7qt1w74AWz6wy4jvXBON3 + t0fgb8fD8dmjwTj7GNv8cSO+OGXE+SdEDA7CF2dCcPbpIHz6ZBA+fNyEf5zwxd/v1+HfvFefPcD780go + vjwVjgvPRQNvpPK+yj22A78tB/5QiUt/rgb+Vgf8uZ7nX48vf1aHj79Tgw/OFOHbR5LwxLYAHJ1Q4c4x + DY4QyNw+6o1jC1o8tcOM7xxOx5/O1OHcd0eA36wF/iSloHcAH+9W7MJfr8IXv9mAT95dwC/PdOPVO8pw + /9Xp2D1uxly9Hv1lOvRU+KODhKWRBKaukgGkKgi11RyvJO7FDDKSMSbCgiXaYZKFlkIfkU0gVmFXob1O + h/kuE26Zj8ST2xPx1o3peP9oFv54dyLbIBLnHjTjItsA7Ht4IgJ4hvfvuWR89HQ2fn5POp7aGYm9IwZ0 + l7mgmGQmlcHdImVUSbr99O5Qa53g4eUElYrAmOavITEjAE8hoK4j8Jmqt2JrfxxunI7DLVNhuHXUH7eN + 6nDXmDdJjhseXvLBC9cE4gdHE/CrUzn480ul+Nerlfjzs0X43aMZ+NFd0Xjr+nA8uToAx7p9sbvADQsk + xKtjnLEjS42bK2XiUxiOMd7czth0Pfv+LrbBdSRhdxFkP0RfdMLuhccIrJ9vNOGFRn88Ua7GqXIvPMMY + 9BTtoQpvHGVb3VLkgetJkvfQV23JdMMcfcd4LIEyAecAgU8v21eyAEYItobZ5lLmZorjZJZgdS7HHQu0 + pQIVlkrUWEVSNV+lxWSJCkMk2n0k4N1ZNPryNoKq1mRu0yTjwAvd2Rpl7bzBIj2GSgwYLDGhjyCzr9iE + HgLD9iISVgKo9HgST1pxjhbVpQZUSdnGIh8UMWYVpjqjgMcsSJIsXzfkxjKeLZu8L+TnUvrs6wJwPdtJ + SveIADyX6opVKW5Yk0pCwPdL6c6YF6OfXMV4vLpAh1V5Gqyhn1iXr8IGKSdF8L+e/WwzbXeuK25nvDre + EoATnUF4pMMf9zeqcbTCFXfSJx2hvz9cSB9FP3IL49bBCnccqvfGkRYt7u4w4ORAOE4NWvFgeyBuY5sp + AjD9j6z7ez3788EUDxxO1eHeTBPuzzTgIRL70/zPlypd8J02Z/x+ToNP97IvH08CzmQC30yj/+Z4fj2B + Pj0GkH5+iwkXrvXDOcaVzzfqcXZzIM5dzfG/JxIX98fhwv5EXLghBRduzMaHu3Pw/tokvDFqxSMkydcX + eGEt22go2gUNBL8FJHxJIkCSOISSFAaTUAiJEFFSROBwxpsIbq0hHC/cVzKFo4lBkkhupcSklDjK57UV + M0aVMHZWsm0aKtzQXu+FLrabCMAN1e4c826or3JDc40nWuscFUpaKr3QXOaBRrsbmmitdnd0l3tjsNoX + Y/UGzLcFYk1vCBbbjZhpUmOMvx8qIzGj71zVpsfG3kBsYQzf3BeE9Z0mrG7VY0274DA/bOg28ns9tvT5 + 0rTYNijl432xa8QP14yYsJcY6NqxIOwaDMDOQX/s6DNha5cvNraqsY7/JbaZmO7qnkDs6A3C1nYDNjXr + aHrF1jf7KgLwWvqkpW4Dptr1GGjSoqlMhVoSUDuJb2qcZE87KeU7s2Q9uRQ922tZAJY1OC1uMLM9w2lR + 4a6QNXviCdZXLDFeSvbpkBKvUbK0IsO9eT+8ERKoUoRgUwDJIcm9xSozVGVNHskakHV/ZS0bEhkRgIkJ + o2PcEJfgjoRENyRzbKWlesCW7U0CQyJCHJXCMZdIIh1PnxBLS6A/yCJeKyXhqiYGq2wIgJ04uajMF9kF + 3kjJdEEcx5sIvyIEJzCmZeZ5orCcxL7eH7WNAais9UdFjRF2HiOXv0kjaZMZvooIzDErmcBSEtpCgvi/ + CcBiXxeAQ82eisnDVCG/IvYKYf5/EYCtsSICSxawqzIrWWYnW9l/vy4AxyW5IYFtIwJwVq6WpFSPgiKS + JPoLIZEpvGZFABaSyjEtAnB5oStaKlToqdditM2AYfaTNvbrcmKNPO6jlALnNUsW8IoAXEC/U1miQR3b + s65E1pfXoV7KPOdolCyM0nQS4AxPxil3+kM3FPN8JCO4poD7F0nZZz8l+7e+yPifAnChQckCbiwNRGtV + KDpqw9FWG4HWGgu38toh/oq1NJD0N4Wjo4Xfc7siAEu5rdoafzQ3BaOjw4KB3mgMD8RjaDBeKQUtAvDE + aAomxlMxPZWB+blsxUQElvWCRQCenEhRbGoqVTHZd5i/7emNRTW5VIFdi/wSLcpr2bfqzMoDzJxCX2Ty + GouJ8xpbLRiW389lYGo2GbOLSVizPhVrNogAnICFpVgsrIlXbEmxWCyti1NMBOD5dbGYWRuDWW7n1zlE + YBGAR+cj0DsajmqO39wSjgURgDNcec9535NViOV4E6FT1gCW9RkVMVLvogiWIvgq6//6eii2shawj84d + 3lpX+KhdofFxRYDGHVaDN1JD/FBoDUKJlUTZYkBFuAGV4XpUhelQGUZyzdclFj0KI3gu4TpkmtVIDPJE + YrA7ZM3JdIsPUs0qRfxN5mey/m92pBr50RrkRfkgP8ZbKQNdEEnCblUhj5xArJB93U6+WBjDsW3x5O/Z + tzlW4nmMlHAvJNGHxPP4IgBHmt1gDZcx9ZUAbJKHorLeFMdNZLSavkOnCMAylmRMyYOpr8xdEX1NwV8J + wYq4EeB2xaQEdECo9xXzNUk7/r8JwLIWpognsZGybqFUTtDDlqRDfgbbL4dtms+xYDcoY0jJ/v0fAnCR + stavkb7JgGSbLxIzpQSdVEpQIzXNR3lYk0fMUspxVUus0khrK9Sjk+Ow2+aNfo7XcWKoeWKTTRU67Kwy + 4Fr6tesbg7G/xYobWqKwk7hwfZUZkwUB6CTPLydGEQE4gz4tg77Nxjibl8TxnK4hR9WhiNvsFMnsdUEK + cVhmnDtyU3xQnKVHWa6R5oeSbF9FALbRlyevZP/GOgTgOPpEEYCjxMKdER1OP0zfmRLtpgjA2Sn067y2 + fG6L07xRkkpcleyNHMagTPo+wb1JEVIO2kMRgOMj2O/Zf6Kt3jRZC3ilDLS/UpYuP8uIwmz2U2WdMA2K + GTNkjeWaUiMaqvwZ5wPQ1xqE4a4QjPWFYXrIgrmxSMyPRym2OLZs41YsjEVgdiQU04PBmGLcFZsUGwrE + JHm42NRIkGIzIgJ/zWYZq8UWxsVCsGoiDGvGaaOhWMfvN42HYivfXz0Zhu3cb0u/ifHfgI2dBqxt02FB + sn/rPDFZpcJIuQrdxMlNue6ozHSlv3VX/G2R+Fv6g1LGbhGAqwu1aJDscF5rB7lKX2M4htuiaPSJ7dEY + ZB9oK/dHg5TsZzytYoyoyvREdSb9NTGxWBVxqAjAK+v/SllIMccam64oEaGY+5SleSpbsYp0lZIZLCJw + FftBRaoXf+sGe6IL8tm3RKAVAbgkzmFKJjAxcDWP2ZjmjDZZG5jYt1OEzgRnDCS5YoznMMPzm2UsmWCM + k89E9KwTUY6xsIGYoS6FcSvelX7LgaubGL9k/cSZKg1WkV8sSrU7+s1FYrwZ+k6ZPDrP2L8p1wXXlqpw + U40WBxsNuJmc7/oaNfYS491EX3tjgw7bixwC8BrZnzxja76XIgDvKvXCjgoP7Kh0xS7ajgpnbCPG28D/ + 2JAvW+LzQhVW5XhgjvdmIcMda4ndt7Pd9zZbcH1rFK5tsuAq8qelfA2GpOwz26OfbTxAvD1MnqKIv+SX + YzYvjPD+jKQRR7LtB3k/BmR/biUruJkYqSqR8TnOC2kcEzH0b5YAD2JhlSLKBinmqVgoX4cFqRTx9+sC + sIi+Iv5+ZT6KCCxrAK8IwMoEGfpMKQPtx+OLCCyl8Q0mT+5DzBIm67NrkRhJX8XxmRruggziOHm+J76l + IM6N45r9jGOyxU5eVR6GtgqHNZaGKgKw+BERgG2S6RtPjCfr/capFPFXTMTfXPrR/GwTCnOJ7wrJzWil + RcGK8KuIvyXBqKwMRUU5Py8WcZj72xijJSv+igCsRm+ZN0aqtZhq8FUE4KlGI4bZF/rJTXt430UAbua9 + kIm6zcRDUkK4x+aC7jxyR3KfGvKHqkxnZR3gOvpaRQAu1Somr+UzEYDLsp1RkS0lmD3RZve+IgDL+p4r + AvAU+6qIwFO06To5J4cAPFrrgxGxOh+MNnhjjLxEROCxehUmm70w16lTsoDXdOmwVtYK7xLTkEfQejTY + 1KPD+n49ptu16K7iWOF1Ved7kLfo0F4RhN4aK/pqY1CTF0h/743sZA+U5GrQTIzT1iAWgLY6I1qqdGiT + yW8VjE3sj9EcfyIAW+iXE+izRfyVJbBik9wRSd8v+DSOnDcpTSYl6lBRa0Z1gwVV9WZFBF4RgKsaRAC2 + KgJwfb0FpcSAIgCLAJEUT99ObmGRbDHGeKk2FGtxRTI5giwPkM2YJaXEa3MZB2USIseIlH1WfBS3ZfQD + FeSx9eR4zfnO6CLmHbF7YJa4d2uLATtafLG7VYddzd7Y2eSG3W2uuK5bhQODehwZNeFQrw57612Vcb2V + HHp3lTNul3K6A8F4ZMSChwfNuK/PH0e7/HBbhxY3tvtgX6cGO7p9sa3fH1uHzdg0HIa1fYFYkqpLLTIh + RY+rO4Nx7UAEdvWFY2OzP+YrNRgu8ECP9I8CNZqJDbqbItHZnkjcaUVWvkkRokTQlcxfqXoi4q+8DyOH + CotwV4Tfr5tDHCLHkgxecpPYKHdlHeAEyQikrQi/K+Lv1wVgpdIGt8pyDYzP0eQd0cQDUZHONNnymLzv + YlbJNuTxw2UJDmIwKfGrF25DPiMC8IrgK9v/aV//XNbsjYojlkw1IDXLn9hWrwiHIiIa+L2IvyIC+5Ar + iQj8fxOAwyK9FTwsWcDCu0SAiia+FCEpgzEq2+aOPPLE4gJXVJS4KGWgG6o4fjkGG8u1qC72UeJoKWOj + nbzGTjxSnqlBlU2nWFmmThGAU2WCG/1aLOOOYJkEtlsyfV02rZSfNcZIHHPFKH3ebAbHKuPYXJYHpsS3 + s4/2ybMtxrrZXGI1+iNJWJiu4JjnuQzXqjEoVu8QgPvLPTFc6qn4ifkaHWarNZjg+6ECF/YdZ4wVOmOq + 2AVzRYxttLXsr1fXOGF/sysOt7ji/g5XPNzpipPdLnik14191wMPDXvhgTE17p7QYm+HO+bZz3vo8xo4 + ZpoKvTjmA9DOcdneHY/q1kjkccwmMCZFMPaExbogJNINgeT/0vYrfNZfKn6F8Xv2SQvbPCZRS5+gRWSs + N8wW7i9YnfdTssUD+TuZNCAWGkTMzK0IwFb2ccGMacmeSqnkfMZNe772ipUU6cn5QtAslaJaY9HdEc/z + jEF9bRjs5JE5NlmGT70saGppIgCLAGpAbmEQ8otCFNH365ZdEIQ04sUVAVhEVuHbsg6wlIGOT9UoWcBJ + qVJdizGlOAj2kiBFAE4mXkpOc4GNmLu0jHyWvrO+nkZuKksTSRZwSZGsW+uJHBF+2bdE1C4iTisp8VNE + Y7FS8mp59lBOPmsv9+V5qpGeTf6e6Y54xv4o4ihZ8ieE/WvFB4j4Kz7AbOF3NHl2YlaeS7gqYupK+Wel + 7HOOETZZV5/nb8uR0thaJBM7JSUS1xOrKdm/NHktoq+ssS/2dQF4ZQ3g9GQdTUujr07yRXKCL+LjNPxP + +in66eBQ9o8w1ysCsIWcTkRgWRP46ybn+D9tRQB2iMCSUEAfRUuRCaFpIvhK1Q9ihAz1FcvJ8FZifAnv + h3CosmJZe/krAVieG0gJaBGAy4mNRQAu5H0Y7k/Grqub4fTHO7Lwu0Np+M2NCfjVdbH45W4RgM346aYg + vLtkwPfnTPjuTCC+MxuCd+bC8eaMFS9PWfDMmBmnGRBOdJpwf6sBD7T64pFOfzzWF4LTDBAiAJ/qCsTj + DDinmw041WLEqc5AnOoNxmkRgWei8dyqJLyyPg2vrUvHq6tT8NpCMl4dj8fLA5H4Rm84XugMwZnWAJxu + cAjAD1Xq8FC1QbFHGvzxREconu2z4MWRaDwzGMWBHo5jTUFXBOC9lX7YWa7DVRVaXFWrx9Z6eShoxIY2 + fxINWncA1vIcl1oCMUOiOMwB1pOtJRhXo5GBoiVBje4ME4ZyQjBRFIlpeyyDVhLWNGRiXZMNa2rTsb4m + A1e35GFXWwG2Nedwn2iCpSA0sHOUxpDMRZHkx3iigAGnNMEHZYkEZASs+QweyrpPDOzpHHjZBFsVDNxD + dGLba51wtN2dbeCND0YM+IRB+exUAC4sBAJrRPwNoJmAtdwuBV0RgD8e1eHfk374dFUQzm+PBq5PAW7L + BI5lA/fnAidygIfScPHBBJx9MBqf3xeNc4ci8dE14fjvtSH46WQQXu0Nwj2ValxD4LaOwGKBAWCSgUDW + pZkkEJQ1GnflOuE2Ot6TJALPVnnhNRKH7/D+vFdvwrv1RnyTv3+6UtZfVOFQpaxPSYed64YmOoJSApei + dBLUtACClUBUctuS9p8C8IFlAfhpgq9XCFRf5717k/3gm+w/z3Y4srsOV7lib7EzNvN8NtFxX5Xnij0l + OtxIB7m/IpjfBWJPgR57eLy9vBYRgPdz31t47o81OeO7C1r86boQfCjZpHf5cxuAjw8H48Mbg/GXHUb8 + drUaP51V4edr/PDB3mj89f58fPhiHb74Ti++eHcAH73Zir+ctuMvdyXhjzdY8d6WYLw2748HCUZvsLth + PYHYWJQzmuiwqniPqwjqqgS08Vx7GKQ2D7jikW1G/O5YEs6f4j16Ph0XX4zFxVejcPEd2g8Scfmn/PxX + BcBvimiFwK9p/Oz8t3n/Xrbi46fD8K+H/fH3u3X411E9Pjzii08O6fHZLQacu9WELw7449xNgTjHa/ri + 5jB8cVMIPr8hCJ9cH4gP9wfiH/z+b0eC8c+HrPj02Thcejsd+EE6Lv04BRfeSwJ+GA+8JWsJhwAnTTh/ + ry8+vV2Nv9/shd/uc8O7291wZtIJR1qlXKsTFtm2CwWeWCIB2Fiqw+72YBzdmIanbq3Aq/e24dk7WvDg + 3krctCoLC81B6Mz1QCvBQXuWGp0MeN3pbsqC/oNsu0neqzUMyteVOuOeFic8PeaGt9d54td79fjLQX/8 + +7Zg/PtIED6814jPHmX/fzYCF16OxYXX43H+7WR8+Z0UnH+XbfXzXFz4dTEuSXnlvzYCH3YDn/QDnw5y + S/vvTrZpLc69loc/PxCLNzZqcU+zE/uNE7aR6MjkghsqXHB3lxeeXxWA718Tit/cHI5/3h2JT2Rd5RMc + mw/7Kvb5I3qcO8nzedyIT0+Z8MlpEz485Y9/njSw/2jwl3t88I9jWnxyrx/OPRiELx8Jw4UnInDppQTg + nSzgx7zXv7Tj4u9Kcf6P5bj4lypc/mstLv+hBhd+WYPPf1iHv7xcip88mIFX90fg5Fo/3Dutx53jOtw2 + osKdU954fHMA3jwQj98/VoZP3+jC5Z9Ns+8sAn9YB/xtM9tgCy58sAZnfzqPf78zjvcebcRzN+Xh6Po4 + XEVQL2RsqEKP/uog9Cw/fG6qlVlEJKt1ZgaSIJTa/ZSH4/EEc0qZ0DgnkiEnpLK98vJkkXkfAnk/LJIA + yLqdj22Jwit74vDDWxhjbovAn+8Iwr+PGvA52+HCAwG4fDIUeNKCS2fi8dlTWfjgvky8tCcGN0+YMFjp + qhAamWEY5kvw7OMMtcoJHu5OcHZxghvN25VA2JNgWs39CMYbCH5mSbq29UXh2sFg7O/3xcEBNe4Y8sYD + s2o8vkaDV3YH472jSfjDU3n4x6ul+Pw7HNvfq8fZtyrx0cvF+MsTNvz2eAbe2Z2AR8fNuLFMjXWxztiS + 4IZ9JF6314SyX0bg3vYw3EEftZ9ka1c8+w3B7ZFcd5yo0OAEifZjBLbPNvrjOdopvn60wgtPknifqtfj + /gof3G53xw0E5LtIrHfkq7BJQHGKK8YTnTFM4NPHtu1kG3dz28/2HmA7i8mEHCnLP5nlghmbK+ZIpBbo + M9fUGbBU64cZHnukWKUIwF0k6x1p9EWMMY08RxGC+wgWh/L9MFLkhzG7EWMlASSJbO9ifwwUBaCfYLGj + KBTFBJApBEopie4ozPFFValJKe3ydQFYZrcXJNDi3JBPgJxHAiAm74sT3VBEMiACsDwMkwdVMru8k78T + AXgh1Q1rU9wVAXgpxQ3zBHzzmW6YIfiby1FjOpvxh/5hOssbswSR8zmemLe5YJp9QtZk3sxj3UCweDuB + 4101etzD/nuMpOGw3Qm3M5belu+EW2kHaDcVMgaUOONAtQcOMYbc2aLD/d1BePj/4+yv4xu7ri5g2LJl + 2WKWLdmWmUkmmZmZmWE86GHmzEySCVNDk2TCzE0aaNI2ZU6Z6SkGmjYNDs/61r4aJ9M+fd73935/7N+V + Zenq6px99l5L6+59hr043mHHteVqpfp32a7MI/Fl7juex5xT6MYThZH4bKEVrxBAfaMuDD9sC8YfRkPx + 3jYHTl+fyLwqLc0zgZfScf6FRJx/Mg64y4PTV1lx+hITTuyibTPj5K4InDwYhRNHYnH2qmRaCs5cwfh7 + pQ8fHMrDn7Zn4QerkvD5CS/uYT69UtrqFekxlalBA8FuLklEIslgNMlHlBxJCmNonwjBF0ye99Li+Xwa + yYW0lCygH5XkcM7oEzX02Sbm0K6mMAx1GzFGDCcCcCvjXYO0TatTob0hBJ3SKoq5vJPfubNag/aqUHRV + Bdq6DdeZMNlkx0KbE+v63NgxRXI/Ho0NAxas6dBiRUsI12IYtgxasHsiAvvnonFgOhq7x9zYPuLCjtEI + mgvbRuw0C3aOShUwXztuxp4LVcAHJm04POXEJZNO7B2xKbZvxIG9w1IFbMWOPjO289ql9fMB4ssDo1EX + CcABk/bQ2/pEcCbO6Ddhvpvksl2P/mYDepttaCJRKcxSIysxCD6SsCJiv1KC/OIcOwoJ8rNTtUghuZC9 + lxMJ9NMSBJzrkE2Sl51pVCyX5KCIvuInic/NtCIzxYyUBDPiog1wR2qU9k9y92+MV348CEVKWpgi/qak + a5Q71gN3sAYE4AzOdVaOBnlC3P16VFSYSZaIm0iO/IwvBcyPOcRjmYwD2TyWVISjscWJtp5otHZ7UN/m + QG2zAxWcn8JSnovrRYTfdL4+hzGjuFKHmmYL2roi0NnrQVc/ieVADNq7+N5GEVL1/AwSEsYLZb9hrl25 + I375bnjljnj+/b8EYJIbaXGkiL8xWsi+o/IDrN0VrOyP9W+2LABHSIu3gACstLFN0SkCudz9L8K40tqJ + WEoE4BQRgGkyPstjlJunI7Gz8JodqGIsK6+wwk/cl5cXQhJ4kQDsD1JueuioUWNIfmToZp7rtqCzNhQ1 + xId+GRvJZfy+WYyVsm9RWYkW5cUa1EklSI1ULVrQUmpCC+ekqVCPBlo150is3KdBaVYIyhnTahivGkqM + aC6zKNZSZkULSVpzuQNNZXbl2Mj428Tn20jcuurdigjc3eRFV2MMj/KY1upVcnAfiVx/ZywGu+OVx90k + d0Ly6oizRARub3Ohl3M/PpKEqfE0RQCWKuD/JQCvLcY6mjyenc3G3GwGLROzM3ztfBZWLEgFcC6m+T4R + gKVCvETu4i43oqrehaq6SPqTGelZ0mYvGFn8zlW1DvQPJmOa55uaTcPsilSsXpsRqAbeSNuQifU8rt8o + R9qmdKUyeFkAVqqAt/G4PR1LPIogvCwAj83HoJlxWhGAiZ2z8oKRncd8RPKb7bMiPtkIV7R0A7kgSFqD + L5j6E/FXMf6tMwUj3BAMjU6FsHAVtGEq2Pk41kQ/ijChzOtCbVwE6uKcAQHYa0dTtFWxej6upVXF2VER + b0dpglURgXO9Wvji9MiPN8AXy3gggvAFAbiE1yYCsFhJkg7FCeEojtWgKEaN/KgQGtchuUEl40hVugn+ + RJ0iACdybSQ6VEhxq5EWxTgRJd1PNIw/YUjkGlkWgJ3uTwXg+GQd14uJZuFjg7KWRPSVH6acbpVydHnU + ipAhwm8kr1tM9jCz8rOWze4Og+MiEwFYxlOE32X7bwKwmWbjdUfx/HLjS2YK42GqEYWZJpT4TIpgWv// + IADLDxgVtJJSm9LyWcTf9Dxajo44MxyZWZzznDD488kfua4aK3iuCjt6pFsJccJAkRYj+aGYIT5YLA3H + hgodtpZrsbNcj/3EK4dbPLiUmPBQRxJ2tydifV00Jkq5DnluEWlymR9zYoOQx/hfxPgiLZ8r8vQo5efn + Eb9k8TUZjHe5ySp+pzCU5hlR7beipoQxx29Ttlko4HtkD0ERf6XaKI15RH58lh/zE+Nln1DG0osEYOnK + UcbzVJD3VvH9teTaDQVm1PJ7l2dq4U/TwJeoQjbzggjAmfSfdB6XBeCkeBGeZPsTM7IzbCjItStCUZFU + LJNrFvnCUJKnQSW5VX0ZYxFjVxdjxSBzw1h3BCb7IzE/EoOVk/FYN5OEpZlkrJ9KUmzDtBzjsI4YZPVo + NFYxryo27lb2TV854VFs9ZRbsVXTyxah2OqZSKyddWNpLgrrZ6OwadaLLTO06Shsm4rC9plo7Jphnp7z + YNdUBHO/VcEIWwds2NxrxTpih5Wt4Zht0GCiRoP+8lC0E+c25Kv/TQAu55zXlugZSw0XBGA7umoDN68O + k68Mk7cMtdBaYzDYzDxH7tJCf5EqXqmcq8vlOXkeEYOlErhJqnsZy+uJSUXsrcoKJn4lliUeFxM8qxix + QuAYjFq+Vs6ntIT+TwE4OVD1Wyu/72Tzs2j1WSpaEJqYlzqYc3p9wejPDVYE4CF+hoi984xxa4j51vmJ + fQt0mM7VYIh+2MlzdaSr0Z2jRxd9pzGL8ZefIS2ge5jXRQCWH8vXt5uxtpHnkB/GiX1XMb+tYQ7cQo5+ + Sa0G1zD/3dhpxU09DtzUbcd1XSZcS7up34HriJcO1qqxgde2nte4RbacKQ7FvkotDjfqcbhVh0OtGlzS + osaBJhV21wdh6wUBeEdFMHZWarCZfGaJ8XpTYQh2cQ0eZq66qjsG1/TE4Yp2YsBGBzYxt87x/FMciyny + gRm5+btQjTl/GBaKwwNH8sxFzs1KYv81pXqsLNFhnmt9nOPYw/xfR5xQmBSODMbE+EjiDocabkcoXC7p + asBYJ10NeIyJ0n4iAMdFaxXx9z8F4MQEPdepkY/1nwjAIv5GEL8s3zgj8VGxSC2cEVpEE9slxpu5Bm3I + SSFXStAqAnAe13khMZLwoeqscK5rPdoZ/3pro/6LAOxWbiZZFoBzUz4VqXJkP8B0rmdiyhJiy7KiCFSU + uFFdEUOLRi152n8TgGX/7/JSvoe+U84xrOe4tTEe9lbpMFKr/UQAXuxyYL7NignpilJDHlAuQi/5IvFl + PznQEH1mkhxypiIMMzVSqalFO/1MqoCbisgRysPRSmzUVm1Ae60RbbSWKhGApZUsfZ0mQrG0nh6p0X8i + AE+SO8xI1V+9Dgv0qTnaPK9hnn4522rEdLOWvILWosV0mw4zHXy+QxcQg2mLfQYsDTFejNqwnbZjjKbc + QEobt2LPOPH/tBNrhmwYbtVyjHkt/hC0iwDc5MFoWwLG2lLQXMJxyjUwjgi+sxNbRWGwR8yNwS4nBsm/ + Romnh4iLGxg/M9KCEcu5lfa/qXKTZq50QgtHYnqwciN8YqoKqeTKcmNiQbEJdcRwjcRwIv7WMf4IhloW + gDt74tHVnYAWxqcqYldpAS0/9qcxZ8TTh2I8zKfC7ZjnE2OI3elPsvdqIfNTDfFPZ4WDZkcrsW5Dfkig + MwIxvoi/zf5gdJPP9lWqMUrONtegw1qO7Y5e8idyoAPkZ/t6DdjTqcK+riAcGtDgyjHGgAkLLusLw97m + IOyqC8LehiAcaQ3BDd0G3EG+9sBENB5gHrh7yI7bybtu7NPj2iEjruSYH55xYv9CFPauiMf2hVhsYF6Q + 8V83ILyL3I287OBEPPYMMx902pSqzzHGiX7Gls5SLdoqzehlju7pTUNdSyx8xVbEMQdGMweKACzmTVQr + 3YFEJBWhTURfpQr4gnk4N2LRtDj+LXlXbr5KTQpWhN1l0XdZAA7cpHVB9CXPWH4suTuwDQ/zLflYmjym + pfBxwMh3UpnXE6Sij/xFBD7OlbLPL+0/hV4Fq11kLr5eLCZeOjRZUFgSjfKaeJRUepFT4EBiGr8beZS0 + f9b9/ykAy0248cQL6fwO0kGqgHHcz3VdzhxQw7zQUBtMrq8j/ycuaCKeIpcQHlxfYkAFsUN5dhj9zISG + IqtiIgAXi0CWGoJ04qRk+qPslSzCeRYfS7yr4fNtXAODzGGzzKOLxB5yI9Mqv4aPQzFLHx0np5TftSTW + r2LsWNXAHNdi4pqXbTANGG8zYIrcXNb+ZD0xXb0Gqxgb1reZsU7axTNWzFaHYr46BKvqQrGeGGFjQwi2 + MBftbQvG5X0huI7+fHu/Gg8Nq/H4iBpPjanx5IQGT86E4/E5PR5bNOGBlVZcN6bHVr5ntjqIcSkEoxyH + se5YjA2nY3gsE13DaWjo8qK41qaIwEnZzDOcmxj6iOw/rWxpRJO5jIoT39QiNcuI7Hwbzc5YYEQCeXE0 + Ob+yh7UImEqlKH00SgUvcXwcjyIAyzZeMp5ZzO8FzP/F/LxSvw6lxVI1Sx5aaiTn86Cba2SwNwXDA2no + 701WBOCaKif8ReQgxH25ueHIIQaUvX8D+9+Sr1RGo6Laq1h5ZSxKy2NQRl8rKIkgr7IoN1pE87OXK+jl + 5uuULAPSiSdTMmX/YBOKSpx8n0vZpkW4to94SW4UL6kg/mp0oqMzhvGM3LUzGj00EYLrOW4iOCrCL31L + BN+6enKrJhcam8mBac2tDrR3k892RjJWOlDTYEEp80lRGfF0YZhSBSw3gC8LwIE28CJWqwMCMP3uUwFY + pfwmkZrB914QraXyWY5+Xn9+kZnjo0c6Y3Qa42gWjzJeyphlaz4Rf+U3z/8UgPOkjXwGeSfzcXY65zhN + bsA0ICWJsejC7x7LArAi/hKniwAcsE/F33iuefmtRG7OWP7dZFkEFq4glpIkj0MYi0LIJ8gneS0FPnKM + 5X2LL5jg/DLmjf93AThC2fu3SLZNKdNjZjIHh6UC+C+3F+N/bsnH76/Lxm+uSMOvDiXiZ/ti8NOdHry+ + wY7vr3Phe0tufHt9NL65wYuvLyXgSyTmL6+MxfME9k+OReCRQTse7rfgsSEnHh910zx4isH+iQEXHiPI + fJRA42EC0oe7bXiwz4HHpDp4MRkvb87FazuK8KUtBXh1Qw5eWZWBz5OEvDIerwjAnx+OwWd7XMqP5Q9L + C+gGIx5s5jnoNA+1OfFYdySeHojCc9J6ejgWD/RF41hHhNIG+OpmJy6TvU1oB/ie/Uzke7oisavXjR0D + JB9MQjtHY7CVBGhTXwzWtUdhoTYSk6UODOdb0JOuRXeaHv2ZZgyTWE34ozFdHIvpsnjMV6ZgRU0GVtVm + YWOjD3u7S7G/twK7ukqw1JzLAJWNlc3ZmK5PR39ZDMESSSLPVZthRD0JcTUdqJyTnE8nzvZqkM3AkUuC + WcHAOMrgvJNJ9+YuNV4a0uIP0w58MOfCycUInOU8YHMksFXMFXjM586vjsTJFS58MG/De4sOnNgag3OH + 0oGrcgDOLe4sAu4V4+PjmThzPBkf35OIj+9KwofXePGPvR78cV0EfjjjwJfG3LinyYDDBBDbCjVYX2jG + agb+OV8oVjB4rycg3EmAcSntWLkKTzD4vtgUjq80G/C9Nhu+227Ba/z7OZKPh5o0OEYgdwkJ3GIZE30R + iRJJfFWOEWU5TiYYBoHcTwXgNXTk/aUGXF+p51yb8AwT04uc8883mvBqpwMv9Ubg4TYjbq0PwWXlQdjO + ZLaRJGUzr2U3AeehGgeOElRfTpB9uCISh0pt/B56XF6sVgTgK3jt1/uD8GhnEL652oA/H/Xg3ds9+Ocd + Dh5deO9WN/51rQdvHXLiD1uN+NWSHn/cG4V3PuPDx8+34Mz3R4HfLAC/X8Tpn0zgwy8148QTRXjv9jT8 + 9kg0vrU1As/OOnAzAes+AptFEsAuBi3Zr6eWAVaIYhOvYVgRgNV4eLcTv78zF6ef9AMvFuDcyxk4+6UU + nPlmMs68nolzPy8AflcJ/LEO+FMN8D+035Tg3A98OPO1NHz4YhzeecSFt+4y4+3bDHj7JgPeuUaPf11p + wodX2fDhUTs+uIz+c6kT718aycf8rkci8M4RvueySPzlqAt/uikKf7s3Ge89n4uz3yjB+R+V4ezPinHm + F/SXn/qAb6UBL8cBT9L/7rfio2N6/PPGcPzPFSr88IAKL60Jwj3DQTjawvmoCsIGEtCNJBo7aow4MhCB + 47t8eO7mRrx6dy+euLYJd+yvwqWrcjDfYlfaYXeQyHfl69FLotKfp1Y29h/hnM5wnJaKOWcNwbi7Lxif + nQ3F1zeEMT6Z8cZVdvzjOifevdGBf95mxvv32/DxU1E480ICzryaglOvpePk1zNx6ju5OPWjQpz+eSnO + /pZjJ62V3+oD/jkMvMu5/CftTz38nk04+VoZ/v5IJr53wIlHhlW4jt/lKNfitTze1a3GC6tt+NHhOPz+ + Wi/+dnM03r/bi49FxH1AxFwzPrqPY36/ER8+aMV7D1vx7iNW/PMxG9553Im3HrbhL3fr8ec7tHjrds7P + MQtO3BvJ9/KaH4vF2eeSce6LOUr72PM/KceZX1Xh5B+qcPovdTgnIvBfmnHmt/S1n7Tin19twO+fLsHr + d2ThpUNe3L3aipunDbhmLBQ3TKpx/3oDXj4Sg58dL8I7L7Th3Pcm+f3m6Ter6Ecb6EMbcOoXq/Dh9+fw + 9mvj+N69DXj6sjzctC4O2wjoF0kMp0nOJwkqxjsSMNARj972BPR1xjOZxKGdAKTuggC8XIWWlRPMxBrC + BMvkUqFGO8HcWK8TGyY8uHKlB/duisIzu6PxZa6RH1wRgd9cY8Gfb9DinZvD8cHtJpy+14Fzj7lx9knG + pKd8+Cvj1NcuS8FtqyKwqj0c7SSghQkESBaC57AgmNRB0KiCEBIUhDCaiY9dGpIDXRB8BMTiT2vbo7F/ + JA4H+024rD8U1wyF4JZxNR7bYMKLe+34wWdS8NazlXjvtVp8/K0GnPtxB87/tBPnf9iGM9+mP3ypBu89 + V4vfH6vCl7bn4o5uEhgCkYM5GlxdZscxEpR7exJxH3PHbYyXV9FXDzF+HyIJvNWvxoP1ejxUp8VjBLfP + dTjwPO2JBgLPRi2e6mSu7LDibv59Q7UaR0i49/hVjGHh2M7kvK5AgwUfSbdPjfFsknGC5V7aIMdabpAY + 5hoZ5xqZJdmb5TpZICFfLAvFWhGAmec2MFaubTWTXBNE8/lRjt8g15qIv20pPFdWMMb9JsxVOLGi2kFz + YqE6ArMEdRPlDoyVOjFSEom+Mg8qCA6zRQCWSt5i2V/CSeJAEFdhQJU/FJW5wajMUaMig0ZiUJ6iUn70 + EqtIkTZ4asje92Wp/JvP1V8kAM9wva/LDcVmAq/NJMzrGR/XMs+sIbBU9g8rJOkn0Z3y6TBNoDObr8U8 + /W6uMAQTHINZfpclxteDjLNXluhwHcnEbbU0Et6bK4IV4feGUq5hruMraEelkp9A/8pGEoSOcOZYI+7s + deBeYoLbiS9ExBfh93IRgDmuV+UF43afCffnufBEUTReKPbiixyXb5RZ8YMaA35O0vH7DhXeXWnEqcPR + OH1LPPBoKmOl7L0eC9wfxfwbgdOXmXH6wLIAzNfuduHUQQ9OcD2cvTKeloBzR5Nw/sosfLA/HW/vyMDv + N6Xiu4uJeIFY6J7uKMZBFzaXWdCfQWIQRfJFQhhDYhgjRzGSkGUxWH40EHPz+WhaPB+nkGBkMg8VcH6K + Of/l9J9q5kQRgLubwjDcY8b4gJ3r3ICWumACyiDUkSS2kiS2N5Cg18s2FRp0VIUqAnB3dRj6a3QYrjNj + kvFiRbsLS30e7J1Nwr75BOa3SGzsM2JtlwZLPVpsHTJjz6QLh+ajcVgqf6aisJev2TPpwe7xSGwdtip3 + 8cud+4EqYLMiAu+l7Ru34sC4CL9WbO8zYCfXtIi/+0ddPNqxe9CG3QMO7BuJUMRfsV39jk/E3+3dJmzh + 99rWa8bGHiNWd9OX2jUYb5VKUAuGiRnb6xwoo4/lJKmQl6xBUboBJVkW+LOsyE83ITslDMlxJBckICmx + UikchlySgXwSJF+OCXk5ZhTm2VDud6GiyEVgTrKR7URmqoNE2az8CGm3Mn5xjjycC2lblEySJXeqLgvA + cSTSCcSB8sODCB7ZuWHw+w0or5C7ZO1oaCJhIp6trtOhokqNQvprLrFPHmNHZa0BzcS9Hf1eWjSauyLQ + xO9V22JDWY0eeSXBioCWQd8uLOU6rTOgvtWC9p4IdA94MDDmxchkIoZHEtDV40Zzi4MkjwQnXRXYa5jX + lSAxmOtt2RQRWBGAA3eviinVvzFqRMdI62cRgANVOIoA7FD9VxHY7lIpYlU0iVK8tENL0SElTRsYF6n+ + pd9K9XECSWBKakAEDgjAHCOpzmO895eIaE3yWONEVZWdhNOCAsYKEX+lBfTFAnBzZTD6iEtHyEmGWo1o + I/Gv5P/9jCk5jE8Z/L5ZjJWF+WqUlYSjrFiDGsbm5kojWirMaBZht0j2ChUBmHHQF46qPL6OsayYsagk + m3mQsaqWhLy+2KRYg1SDlJrRVMY5FOFJOdpQLxUc5ZyHatkf1Y2O+ii018rRja7GKHS1xKDnIgF4oEv2 + Bg4IwG0kebXVPH+dBS3NdnR3uZUK4IsF4IXZbKyYy1WE3eUW0KtWFSjVv/KaqanUT2xmhq+fz8U8bYbv + Gx1LQ1MLyX6VtAe3oIbXVF7lQk6e7DPLOWOuFdKdK4KJ7Mnan4RB+s/wWDymZ5Iwv5CCtUsiAOdgw8Zc + bNyUExCCN2dcEIDTsSRtoLfRRPxl3Fu/PQPr+NyKjYmYXZeAsXnvvwnAmeQgSstvaZdY7EJyuhku+pvs + ySXiZED8DYHBEqj+lYpfxSwh0BpVCNMHQR1OI14II46wEk94DaFIt3O9R3NtxbpQG+tAvZdE2mtHY5RV + sfqYCwJwLC3ejooEB4rj6GPxJOUJRkUAzrtIAJYW0CVJnwrAZckGlCaQtHvUyIkIRhavN5O+n8dYUJoY + prSHlj0sM92MAVwXcrNbLI+JXDfJUaFIjZe9ALWKAByjtHYOCMAuxiN3vOb/gwAcqAJ281ojvTquQRWU + 1oXLIm5E6CcWaHf6vwXgi+0/BWB3ZAjiY+RaORbJehSQ84oAXEkcUVdqvagFtFTxmphrbGiotiv7nJWX + 2VBcYkce5zYjz4Q0nxGpWeHKTTLpGaHIylSjwBeGMq69Gmm3y9d3c+30lhjQV6TFQH4oJoo0mCHPXCxU + Y6UvGGtyQrCRPHYH1+2+RjcOtiVgb0citjbHYb7Gg7Y8wycCcDYthzEujznAz/hSkhOOoqxQ5KaqAhUv + 9HU5+ngtBfxfaYEJVSUOVPptKMmnD+SIAMy4lMZrJd9L5+M0yRsXBGD5gU8EYGmbmJMcwjysRZUIvn4r + GsSKzGgppt8VWsiR9UoVsAjS8uNqOvNFBudZBGC5ESA5XlqE6ukPUgmsR0aqGTkZJuSmM4elq5GbGcLr + DEZBJvM98VllYRjqiJFaGcN66i0YIv8aJSad6vVgYSgGa7hm104kYf14IpZoG+Q4God1I7FYMxyD1cNR + iq0Z9WD1iIjAUYqtYf5eMxmJVVPLFoHVUy6smY7AuplIRfzdMBOliL9bp2ki/k5GKxViu6ajsZPv3T7u + VMTfTf1mbOm3YXOPhfhd9gcNx1RtKIYrQ9DN/NVKnFsvAjDnubogIABX5mvoVwZFAJYqx7YKq9Jxobsu + Ar0NbnTSt1rKOK7lZrRKJXSpkeOrQ7VPg0oRdzk+sr9vI8enhT7UTB4qArC0hK7O5rjx/8sCsOzjKjcz + VqQHE+/SeKxkvK9mvK/j+RQR+IIArAjIcjMQMWoN399IPN/Ka24rZB7hd2ikb7YQA/83AVjEzTlpm+k3 + Yj1zxupiI+Z5XWPkHr383G5ig376Xl+RBR1yvfwenRyTIeaoSWKy1czrm+QGXOa4dTUqLBHHLRHPbaHt + I567olmHGztNuLWPPGYoAncMR+L2YSduH3HgzrEI3NxvxZF6tVL9K/sFixC8pYj8hNzuSIsBl3YYcLgz + HIc6QhXb3xyMXcSMO6tF/OXjilBsKVFhc2EQtvuDsb9Kh6PNIixH44buGFzd7sbhRs4zedIi8/MsbY75 + d44cZZ7Yft5P/uMPU46LReFYw/W9nvlnW70Tm4jT1hAPTXOse5j/K4jDsmOJPTzED85gRNhC4LCpiSmI + t+SmuwsCsDdaB6/SGjr83wRgEX6XW0AnJhiIaQICsIi/kReqfz8VgMPg8IQHzK2DK5Ln9Jq4vq1c7y74 + 0m3IZYzO8aoY/wMVwBWMFfU+PZrJtzrJt7qr3eipYW6XFtA1zPXV0gI6IABLjCzM1DM2fFqdmJ2qQ26a + HoXZxKI+xscCJ0oVEVj2fnSjsjSCR2KecmKBqkg0NJCf14lA7EAJ/aeIfllMf6shFmouCUNXuQaDNWGY + bjIqAvCKTjtm6S9j5KUjxPWDZSqMlAWT/6kwVhyMqdJgLFSFYZF4cWWTBVN1JvSUqtHC+RKhUYReaR0r + om8bOZEiAFfz+5ZzDXF+FQG4RARgcgWpAK4Mw0ilRhGApbXrXF04Zmv5mMepehqvY6pJT9NivDEc403h + mGjVYapDjzkx4ng5znfpsMSYsW3UrnQP2C03h9L2TYmRG/C4e4YxaNSB4Taua/plLXFye5XpggAcj7G2 + ZMYGjl++CTXEaF1Nbgz1Egf3x2C4P4qPXRghPp4e9GJiMFbpoJDHuBDPeCwCsGzVksa1mJwZijiu8xjB + qDymMk+lc/3nFRlRQTyqWK2DZkdlnfOTFtAdIv62elFb60KxbHXAuJHBvJAkFW30H09kgMPJjb3S1SmV + uSMnKUTZI76uUKrJydGrItDJGNHMdVKfL/uUq9BUFIy2cjV6OM795GxjdVxLHNO1HSZs7bNi54ANewat + 2NWrx/YuFXZ2BmF/fygOD+sU29MZgu1Ngd+h97WqcKQ9DNd0GXALedbxUTfuHmbM4Dk+02vE9X06XEPO + duWMHZeu9ODA6ljsWZ2ArStjsTTnwaoxO9aM2LFhNBI7mC92T8Vj6whzRifXMOe9j3PSwRjRTIzdUGFA + uxQa9Cajqila2f4hLj0UMeQA0vrVze8fn8rxztDTjEhK18PDvLos/kbw/yIOuWXsaDHyenK2BFoS5yyZ + r12u9pW1pVT9yk1aPErFbwo/R1o/i6XI3yL6pjGPM5dnZIYrlp4h2/eI6ZCWSZ4inYoSQ/l5ATxs41yJ + ACzYTLa9WRaC5W8n51BMxELZKzZCunQla5GVT65Vk4jGtkw0tGagtCqWONcKL3GhSXAtsdV/E4CtPPd/ + E4CFR8XEEidK69m4UCTL92WeEh6UT/7nJ++vIA+qrVahpV6HziYrumUrmXorWquJQ8pMKCf3lO27pBNK + I/GNWC1xSUmOAb40jluiiuNJPkYeoAjAHH/5ja5KBOA0FQaYw2bIgRaLdFjFvLpYHIYVxGVzecGYyFZh + lPxqklh+sVKrdKyQfcCnW7ju24yKADwtAnAz81mdGjN1oVjFuLCerxFb22zACuKCFbUhWGoKw5a2cGxv + C8WujmClpfO1Y1p8ZjSMeU2NR0ZD8cx4GJ6bCsdzM1p8dl6HZxZMeGqlBY+udeLYghOXDOp43jAsNEtc + icTsYCKmRtMwNp6BvrF0tPPvOq7XIo5NNnNxai7zBf1SfE/melkAjo6n38jN4Pk25PsjkF8cgcxsM5JS + mHMSRKyU/WvFghHDNS57iUuVf3w0sSFxfAL/ThGMmUrsJoI98Y20Ti4sINenFXMcGxg/2lqi0NMZj/6e + JHR3xKOJOKeceFiqvEXEzBZuTNwsvipVsHm8nuJyqf6NRUV1LHmyFyWl0YoInFfkRAbxeTx93cPPlnbr + SgU914eyzjKZE+nj4uuyh7Cf+LyCMUe4dqFfh8LicJ7ThGbyxK7uWPT2x6GXMbSvx4uuzig0NbpQzZhb + RRPxt1HaRLd50M7/tXe6FevsdqN3wIseuQG9JxJN7eTx9Em5eb2g3KBUAUt8FQFY2sAvC8BSbb0sAC9b + PK9dbkgXATiL30vE35KKSEUALip2wldo4pyEkSfxdSkqpKUHRGDhFmI55Bq58rtChgbSBjqf+VgRgGk+ + rvnsdHI05uTMVGLuFLkJMwwJsYEWzyIAi/i7LAAvVwD/NwE4OTkMKSnE8DyKJSZdqASOVysmN60kXFhf + IgJLK2if3BxGziA3CYlALUJ1IX1RBODacmkTTt5abUMT84wiALdGfiIAtzURG/w3Afhvd5RBROA/faYA + f7wuF7+/LB2/PJiAn+6MxusbnPj+UgS+tyEK394YjW9u8uIbmxLw5Q3x+OLaWHx+RQyeI4B/kkn4iWEb + jw48PhqBxwgoHxt04dFeOx5sNeJ+Jp97mnS4mwvsrjYT7uuPxKOzCXhhfQ5e216ML20pwqtLPry8mIaX + phLx8kUC8DOyB3CrGQ80GnAPg9X9TWaeMyAAP9zJz+p24YmBKDzcF4V7uHgDArAL17Y6cUWLE0d4vIR2 + oCMSewhAd/XFYOdgPHaOxGPHaDKTUTI29ydjHRfSYkMMZgnGJrh4R3Lkx1Yz+tNNGOBx2BeB0Xw3RgoI + DAoIEgrjMVWSjJWVGdjclI/NrYXYSNvaXYbdI/U4sqILR1Z1Y9NIFYFMOpr5/rpMK+qzrKjLsqAihY5F + x8kgCM3wMsHEqpQ7aHoJujcRrFzPgPR8vwG/m3bh/QU3Tq6MvCAAe4CtbpzfGoHzmyJxfm0kzixG4uS8 + CMAOfLDKiTM744DLMoFrRAD2AXcWAMdFCObft6bizK3xOHFrHE7eGIv3L4nE37c48dsVNnxn1IJXh12c + JxOOlKixjWR6PUnp2iKbcifPCqnYylNhK4P4fj6+hqTgvlo1nmkMxSskFbIf8LcYwL/cpMGLDaF4skmN + e1rCcFVNKDaVhWCC4L4tJwy1DEpl2Ux6tMYc178JwAfKTbieAeWeRjMea7bg6UYG63oDnm6z4tF2O24h + mLm8Igg7SC7WkjisyQ5SRGkRTg7UuHCkLgZHaqJxCRf9JQxWhxmkjharcWVxQAi4lWToqV4VvrXGqAjA + 790ZhffuduKDOyPw/jH+fYMHfz8SgT/usOD3Wyz4+6WJ+PjeMpz/6gDwuxXAm2uAt9fi/O+mcfrbrTj3 + fAFO3J2MP18djR/udeNL66PwAInU0XqSryI1ulNF9BAhJEA465iAB6sJrpikHtoVg9/c7sfJxypx/rli + nH0hE2e/mIIz30jBqdczcObnnLM/VAJ/bQTeqOeR9j/8++eyx2Q2Tn4xCe886sJbx01481Yd3rheizev + COM1a/HuESPePWTGuwes+Od+G/6+z46/74/AX/e78Me9DvxurxO/OujEz69w4/fHkvHPZwv5udU499M6 + nP1lNc78ltf0a2k5TZ/5kuzT6sG5h638rnq8f5sWb9ygxq+PhuHr2zV4ei4Ut/SRDDaFYGt5CLaQFOyo + 0eNSace6Jw+fu6UJL9/VjQeP1uAzO0uwezoFo7UGtNCP2pi0Ogr06C40oI+kty+HJJhAZYpzulYE4MZg + 3NOnxnOzYfjGRh2v2Yw3ruB3usaOd6/n8SYD/nWnER8+7MKpZ2Nw6sVEnHwlCSdfS8Opr2fhxPdyceJH + BTj9i3Kc/wPH788dOP9GD86/2ccxpf22DfhxPc58pQzvP+nDL6+MYhwKw71dwThGEHy8NQhPT4biO7s4 + btfH4++3xeLdOzz4+B43Tj/gxNkHbDxa8NE9Jrx/XI93jxvw97uNeOMeA/52nxF/ud+CP99nxh/u0OJ/ + bgvH327R4h+3mvHxcV7v3Vy7D0bj7BNxOPNiGn0sH2dfL8apn5bh5G8qcPKPVTj7l3qc+3MTzvyuCad+ + 3oQPv9OEv71UgV88VIAvXp2EO1aZCMDDcCl9+mg//XsuBE/usOLbN6TiT/Sr01/t5xyOAz+dBX69SrHT + P13geabx11cG8fVjlXh4fwaOzkdiiURpBdf+bAtJT3ssJjuTMNSZgP6OBAx2J2KA1tUSzQRjQ0lJOPJ8 + wSgoJDDh4woCuZpaHRrr9eglqZwcjMTGSQ8Oyw0Rq224f4MNz+2y4iv7TXj9kBa/ulyNP18Vgneu0+DD + 24w4dZ8dpx+OwclHM/D349l4/bJk3L+apIEkY4hksoqAM93MJK8mAAhWwRqkgplmCSKQpsWGBiFdJy1y + gzHoI1hstGN/jwv72jQ40hGEazg2xyZD8NltZnz1qBt/eCAHJ15rwGmO55kfcH39ohX4FX1Bjj9qAr7N + cf9yC32iDT+5sgSP8bscLQnB5fmhuIHk+nhTHB7qTsID3VG4o8mA6xhbjmQGKoBvJaF5gOT2oRotHmXO + eqbViqdJsh9r0OEx5sEnuyx4hAToOPPidTVqXEIwLu2Mt3PdbCEJWvJrsVCgwSzB3zjjbD/P25NGI2ge + yGL8kJskGPsmmCtkncwUqjBfpsaqOj3WM0Zu4Piv77BjVYsJ8zU6TFeGY6xEo7Tzak0OQle6CuMkp3OV + TixWu2hOknwXZggiRostGMi3Mibb0JZvR4nPSGBEsEFgWVZsRl0NiUC1GTUVelT5w1CVq1Za41XID2Mp + wShPCkIZSUAZyUAF52xZAK7guCiVCjx2fCIAh2JdrgabCci2+MKxkbFgrVQ+FOiwyJgwW2DAJAHOaE44 + RnPD+X1pHJdxaZnHcwwzX84QeG/mZx7wheJyXo/spXxzhQafYRy6UcRfiSEkPJcq7aKDmBf4uE6Fq1o1 + uKFDj1s6rMQMDtzSYMRVxcG4oiAYRwtUnOdgXM3ru91H7JHnwjMlsXi1PAFfr4zB98pd+EmVGb+u1eD3 + jUH4OwnGR1vpv1dEM8cmAvfGA/d4gTuicO5aPn/YhLMHzDi1y4ST2404vceB0wcjcOqIB2ev5Pq/wouz + l8fizKVJeH9nLP61PQl/35qK3y2l4nurM/DCdBruHkjA5W3RWOE3o55EQsSDOEuQUgmc6FIpIq/SEprm + 5uMIMb5GEYAjVEiNCkY2SUhBKtcrgW4JfaiCvtNYoUJnowaDnSaM9jnQ23FBAObYVdOaq4PRTgLWwe/a + zjwu4m9AANYq7eSGay2YbHRiBfHVUn809s2n4tCqFBycj8V2Ev+N/TrFtg6ZsHvcjkvm3IoIfGAmCvun + 3dg/E4Pdk25sGjBhQ58eWwdNShXwjmETtg/rsWvYQDzF9w7xuf7Anr9buvTYPcj1PeLC/lEn9g7T5PFI + BP/meUc92DXgvCD+monJTNjcacCWHn5GlwGLjAnTzWqMN2swwbUy3uVGd4MLVfkE2CSzPgLxAuKzonQj + 8tOM8KUSdKeGkfSGkOxKNZgaeWnhAWKQK+KvEYV5ZpT6SVzKSHikrVwRiUeBmyDdidRECyIj1LAwftnt + jF8k7l6vtBX7dwFYaamcxLkiGcsiuPfl6VBaakY1AX0jCXpru5NkKRJtvOZGkuXSimAU0qeLK0JQ02BS + Wjl3D5JIDcUqInB7b5QiBNcwppdWa1BQFoz80mCUVYeihni6qd1MwkX8xVg9MhGLqbkkTM2mYHgsDj39 + UWhosvM6QpT2zyICiwAsd9UvC8BSASzVyqkcm5QUEpllATg6FNGK+BuwgAAcqDT8XwIw7VMBWIP4RJIh + EuaU9MC4JDKmxPJzxKQ6Wq5jWQBWqgJ9OuQTO4gAXFZhQ3W1Q7GqKuaoMgPyuY7z6OfFcuf7BQG4vpwx + iD7d16hDT304mopVqJAfRhhbcxmfMvkZ0gZa2iWJ+FtWHMo51aBBRIZSExpLDGgs0qOecaqOceoTAZik + vTgzBCUcM7mDvpr/r5YKYVqN34DaYqMi+ooFhGAb6vxGRQRuKpfqSBfaat1orY7gMQLt9STHTST7rSTU + /0UAbm9yoY5YWUTghnozOtpcGCefmZY9gEXcpc3KXsDTWYFq3zmp+M3CzHQGxseIwUaSMDaagLGxJIyP + c+4nUwP7Bs/l8PU5mJjMVO7qrm1woq4hAk0tsaiqpk+TWIv/Wm1BStVDPEmqtNCqr4tUyH1nVxQGSOYn + xuOwerUIwD5s3JyHzVvzsGlzNjZuyaRlYOPWDGzYloEl2oYdmbQsxZa2pSv7Ac8vJWJ83osWRQDmuuM8 + KhXs+eEoKpW2ZlFIz7YhIib0PwRgNQzmQOXvsgAs1b9aYxBCtUEI0dCII8JC6H98HK0LRapVhwKPBeUx + dlR5baiJ4dyIRVlRS6sR49+V/J9SBZzgQGmCDUUJZhQmmBQhOI9cLueCAJzLNVAcr/9EAC5N1KM4Tocc + +noGfT7dGqQcpZtDYWwI/En8TolapEcylvN5j4nG7yMicEKUGilxYcr+ryIAe/l95U5zl4frxhsMzwUB + OPFiATj+/xKApc2zCMB6RQC2igDMeZQWzmIWZ8gnZnYE9lP+PwXg/1IB7I4MRhyvT0TKzCQt46ReEYCr + ixiziJtk796OejnS3+staOaxvtqOynILY50N/mIb8vxWZDCupuTID1CBLglKS3ziiDzyR9n3qopYRCro + O8ut6Ob66SnSoTefeYz4bITrVm4Qm+Qalm005jJUWJOnwcYyE3bUubGzNQ7bWxOwqjEWXYX83FTGCMYz + EYAzeVREYD4n+/5K9W8240E6MUYKn0/lMYvXITfEFUrr5mIr44oVxfmcfxGAGbOy0uVaRQAOV9q5XSwA + SyWXCMBSyVWWzfhRZGVMcaCt3Il2xoSOCidaS+h3PHdxmhqFyVxbySHwJTPWJYcjQwRgEbxiw5EUr0OC + CFf0ibQk2XtZG/hRm9eYye8tN7PkcwyKlBu+mCMKQtFSokVXtRGD9VaMNtsw0U7c1+3GYr8Xq4cTsG4o + kRaP9cPxWBqMw9qBWKzhWl4zSBuK4v+isXbIjTXMs2Lrxj20SKyZWLYIrJtwYWkyAuunIrGBOX7TVBS2 + TXsDNhmDHRPR2DXpxS4ed4xHYOuwA5uVKjGLsjXXJhGA2wxK++fxKjX6y4lRGKNbC0PQwPmt4zzXFIQz + roYr7SrrOa8iADeWMb5KbC4xMr6alc4LtXxdRY5asSrZn52xo4YYs4KYtSyDOYHjI3v8KgIwz9XCWC0C + sFT/irAr4u+yAFyawTlLD0YpsfiylacFK7y+ljhWWkFfLADXMg9UEWvXc+zb/OHoKjWgu9yIjmIt2go1 + 6MhXo4sceLkF9FBOMEaygzHOz54j9l/DfLGe/r2u1IqV9PdJ5ppB+n8fc94gfW64zI4B/r+nWI/hChOm + 6ixYaLZiqdOBrcRym9r12NgYgs3Solmq+RpVONKixjV8/mZioTuIoe6d8OBBzstDszF4mLH2oblo3EHc + dkWjmpg8SNmORmkFzfy5szwYh1v1uKzLhMv6jLi836DYka4wXNIWhv1NGuxmnBahWLZv2sr37CoJxiXV + OlxFX7uhKxI3dXlwfXsEjjZasKs8DBuL1FjNeV1VFKx0M5pXTI154vx5+utKzvE6zu/mWgd2tXiwsyUK + G2pdmGXO784Mhz+OsZFxLpYYN9IRDAdjlc0mrZqJOTzhjHmBDiTeaL0iAIv4+78EYK6jgBBs4JGv4/OK + ABwR2B/9UwE4/FNz6/g8X+tlnEqyIzczEgXEegUpBuTFh6AwjjggKQS12Vo0F5rRxljVVelCZyXjH9d6 + K9d6W3kEWioi6acRqCsWAdim7Pmbo4hTAcsiFsphDM3PJMaUmwx9VviFlxU6UVLkQHGBRdkbUOJQFXmJ + tBKuIp8rK7GgID8M+fSpIlplgRoNfjXayHF6KtWYbNBjgfhvrsOC6RYjxhq0GKoM+UQAnuRrZivDyA3D + sJqcfk2TiWvShrkmCwb5vOwvq7QalrbsnMdG8n9FBFb2dpdqfK4Bf+gFATgMvfzfoCIAh2Ok6lMBeJq8 + YorYdLKGWLw2FKO1xOX1YbyeMHKLUAwRp43w8VhzGCab+fpWHWZatZht5froNSg3jooAvG8mEpfMklvM + ReLgrAsHZ1zYKwLwmAjAcvOeilgrCG1VRvQ3R2G0IwHDzAHK/ssldrTURCjYapzxb5z4eWQgCkP9xFMD + bsyPx2OO+GigKxrSBlpyQLyIi+SfKelq5t1Ai9J/E4CziQPymf+kKo/vyS/WoYgxquKCAFzHa2iSyj3i + vGLmL+lukcZ4LzeZSqcIbxTzf0RAAJZtfmTbmRTmjhxykOKMcDQyT0o1+QDxWDd9q6OY2JQxpVnmWFpd + c456q8MxWMsYyvGbJ19Y22VWOiBtHbRhx6AV23q12NKtwjbZwq1fjT0DYdjVF4qt7SpsaQ7CdtqBDjWO + dOpwBXnTNX1m3MRYLXZdvw1XMgZcMaDD0TEzLp1z4PAqD/at9mLHmjhsXMm8sSIKK6ddyo1Ba6ejsHHW + i60LzDETUZjttmCgTtqiE49zXqqLGWvLtOQ5xJntXpRyjWcQU8ZfEIBF/IkWQUS2zck1K5ZK3iWVmB7i + Tzf/H8FxkxviZL9gEYCj+ZyyVQ2PynzR0pSqugtVvmLCX8i9UpljlZbPFyxJjvK/NA3SGWcymauzcmjZ + emQQl2RkG5HJz08jB0xkno/mehdRV8TeTwRgEX9FpP1PAVjEX6lkjFHRd/TEO1z/zWno7MtH75AfDS3p + 9JdIJKRpFZFXT1xluEgAdhDL2Yn9LBeEYBGAoy4SgGOI/byMZ9IpRkQpEcVSU1RIZyzPZSzPY1wXPlTF + eN5Uq0N7oxVd5JdtxGItNcRjzJtligAsnY2YU4uJ3Wi1xCqlPsY3zkkmx0sqpkWgWm4BXUj/ryJ/bWeO + HGAOmyJOW6RfrirR8xiOFX4N81oIpsjJxnKCMOZTYWFZAG4zY57xaLbdhEmpAOY6n2iQVvEhmK5WY2Wd + BkvNzGetRuW4krFhsSYYG5pCsa0jHLs6Q7G/NxRXTuhx06wRt0yG4dioGo+Na/DctA4vzhnx0oIJL6w0 + 4/lFK55ZacNja1y4Z40HV005sJvrYWO/k9gmBiuki5LwI1r/OOdlOBlNvXGoYv7xE6tmkfslM797UwJt + oGWOxOe88vsAY3RuoYO83I3CUjeycy2MEcRpKcTo9Lc4xUKRKFX+CSL0kTeT9yYxj8naV8YzlfiS8SMv + NxQ+YoccYgKxfJ9aqQKuq3GgtTmafC8WzY1RqKywo8CnRRaxamaGmthTtpjiuenXaelSCcu8URyBknLZ + /9eL4rJo+Ev5XUo85FI2+rAescxVUjkfaK+sUirtE5h7YnmtSkUw/59Jv5cWyuXMYyIAFzMvl1YYUVNn + RWu7B90co/6BBPT3x6O/Lw49PTFoa4kkN6Xv1BLT8tjeGY2uHvLXPmLvnijF5LeGgZE4DI7G0f9j0NHr + RhMxTH2rHWU8dzYxXDyx7H8KwLEcs38TgGWd0xeT5SZMrlMRrKX1dUllQAAuYI6VzlHSoSGecVpitfyW + kE48n068n0bLSmXcJoYXE4FVqn7zuMblt56cDKn81SnCbzr5Vio5W3yMGrExwYjlOvv/JgCHKwKwHD+p + BL4gACcwloj4KzeuJNMfUulXmWlh/GzOMeNRJq9R6TLEeS4k51AEYPpAU410Z+Sxjv7R5FS2iepuj75I + ACZf/U8B+K27KvHWnZV4m/b328rw12sL8NvD6fjxjhh8f4ML312KxHfWR+FbG6LxjY0xtDh8ZX0cXlvn + xRdWRuP5KReenbDjmTE7nmayfXLUhceHXXi4z44HO824uyEcx2vDcCcX8O083lofjtu52O8bjcGTCyl4 + ZVMBvkB7Za0PLy6k4cXJBLw8Fo/Pj8bi5cFoPCXVv00G3FsXjrsIEo43GHB/qw0PtLnwIIHkQ+1OPNQV + gfsJLu/ucCkC8C0dkbiBx6vbI3FpuxuXtLqxr43EryMa27vjsK0/GVsGUrF5KAubhnKwvjcLq9qSsaKe + ib7Si5mSGEzmR2I010lAbsNQlhVD2Q4M5roI1CPRmxuN/rxYDBckYsqfjPmydAaydKyozWZircPh+R7c + sGUKt+xdwJGlAZKocvRWJJIYuGicJJ8L1ekW5JPEpUbRAaLoCHJnOJNDM4nhSibyqxqMeLrHil+QSL27 + woMTq6NwdikK2ByFc1vdOLs1Aqc5P6dWuRTx92MCng9mLxKAL00HrskCbsoBjvmAO3KB2zKBG5Nx9jov + TlweiY8OOPHeJiv+xqD40zE9vtKrx2c7LcoewEdKw7CtKBzr6VzrimwE6DosMgCtySUxIIHal6/D5bzO + Y1XBeLwhBC80afHlFgO+TvsqicAX6tX4XGMoHmQQl70Xd/tVyr6V/TnhaGFAqswl4M1mYuG49vDxRIGV + n2HEvkozrq214FgjfaTFogj+xwlA72g04MY6HQ4zaW0nYFibF9jTZiErCKuYSDYx0eyqcOBAdRQuqaJx + 4V9S4sAlfi0uI7i4piwItzcE4wGCm89PavGjLS789WovPrxXKjkjcfI+jvHxWHxwczTevcKDv+114q+7 + XXjv6nScfaw2IKL9bS3wryXgPR7/MolzrzfhzGfTceIeL966IRq/ORKD7+xMwNMLHlzXqcemilBF0GzI + CkUVrSxLhRom3/5KgqshMx7YloKf3FCBd++pwcnHSvDx05k49XIKTn05BSe+k4ZTP/Hh3O/K+bmNwFvS + wpj2F6kCLgN+kIvTX07GP55w4K27DYoA/LfrwvC3y0Lx5uFQvHNQh3f2GfD2bhPe3GnBn7db8MftDvyG + 9uONFnxvyYxvb7HgG3vs+KkIm0/5cfqbDTj38xac/W0jzvypHuf+pwrnf1YEfJO+9LIX556w49QDeo6T + Hu8fN+Gd25345eUOvLbZgoenjLi+S4d9TNa7qsKxr8GMK4c9eHh/EV66rQUv3dGFB6+ow3Vbi7CB67qP + pKGZwaiVILmD895bbMIAE+sASfEwSfE0CaG0lD5K0npfnxovzOt4vUb8Zr8Zbx214l9X2/De9Sb860Yd + /nW7Dh/cb8PJJz04+XwsTrwUj5NfSMbJr6Tj429l4ePv5eLkj/04+4sqnPtNA79fE60Z537dgvM/rcO5 + 71Xh7JdLcPKZPPzpRi++v8uKz68IZ0xT0YLw5aVQ/OKIA2/QNz66Jw6n7o3Gmfsjce4hJ/CgDWfus+CD + Ow34x63h+OuNGvzhxlD86oZQ/JzHn31Gg1/cEoZf3RyG396kwZ9vCsdbNxvxwTE7Ttzp5LncOPNwDE4/ + m4RzX8rBme8U4uQPi3Hql2U4ybk//T81OPPHepz+TT3O/LIRp37QhLe/UIFfPObDK1fH49YVelw+EEKg + HoRLCOSvHw/Cg0tavHZZDH5zbz4+eqUN574xSH+ZAH42B/xqFc79YhXHZBZ/enEAX7ixBHdtTcCeERMW + uGbnuN7mmDCm2uMw0Z6EofYEDLTHY6gnEcM9SegjOJcfnmsrjaggYJcfnxsJIJuarGhrs6Ony4nhvkhM + j0RhadyDvZMWXDVvwG0rjXhoox7PbwnHaztC8Pq+EPz6cDDeuDKUc6jFx3eaceq+SJx+MAn/OpbK8eY6 + Wu3CYZKOmQodWpjYC40E8MEkWEHBSKDFBakQGxSEJFpmCEGtPgg9TLBzueHYwvfsJcGQO94vbQ3CZ4ZV + eHiVFl884MDPbk3EPz5bhLPfrMf5H9MHfsZ19at64Ne0X9VxnGS9077RjFMvtOK3N/vx/MoI3Mw4d7U/ + BLcwztzflIDHO5PwcJcHd5Mc31KhxpW5QbiS8ej2EsYZEtyHSHgfrdMqrZ8fb9Lj0QYdniCAFQH4YebG + u0jKrmNePFgehG0kQlvKQrGZ171UqidYJsn1k7zladDPc4r4203rzQzCAOOe7KE7ylgyQRI+VajCDEn7 + ChK+tc0WrG+zKlXASx12rCZhn68zYZrnlVjURqLaTuAzkkciTeK4UOVg7rJjlt9potTK9WdEJ8lNc7ps + VaBDQQYBj9wVly0taQyoLDehiqCvslyLChGAfYxtOQQVIgAnq5T9yMoJxMoJyCpoNSTI1QRZVQRw1fzs + Zh67s4IxTGArAvBaEo2NJL9bSPa2FBqwVKDD6gJ+f9oMbcKnwwj/P5yrwYhPgyHGh0FfCLo4Fl0ErAPM + mQv8nK0ZwbgkPwxXl4XjhlINbmTMl24P0vZfqnkPFZHM0vaV8ljF5xrVuLpVi+uJLW6iz99QI1XcGlxJ + knJFkRpXFGhwdX44bvGZcW+eA0+XxuLVygR8syYO369y46dVNvy6Wos/MD79rS8Y/1wIx8ndjAfXeJlz + Y4BbaIwXpxmrpP3z+QNWnN1jxuldtD02nD7owJkjkTh7ZSTOHHXj1BE3PtwbifeY1z/YEoP3N8bj7U1p + +N0WH/FXPj43n407h1OwnSCvl+CviERQRIRsEpBcL4F+FIHwBQE4ksTQRRMRONpFIOkmgPSGwUeyUUAg + KdVNRfSpUubQunL6BHN0H0nXYLcNvR1GtNSHKM+LWNbEeN5GstVB7CUCcBtzWnulBt3VevTXmDFca8Vk + YwQWRAAeiMGe2RRcsioVh1YmYvdUBDYNGLCxT4dN/XpsGzIF7tKficRe/m/fjEcRgHeNR2B9jx5rOsOw + SUTgASM292mxoUeDLT1h2NqrU2xTp9wFzNe067Cjz4o9Qw5FBN6nGM9H2zvixt7hSOwccGJ7jwVb5UeP + ThGOjdjUbcJSpwHzzWpMMtZJdcE018lktwd9DRGopg9mx6powcqecvlJWuQmhSEvleOWqUVRjgHFuQaU + 5hpRznVSTDJcJKSIx9JCM6pKHQTiLtSUSYVGBMr9kcgn3ktPMSEyMhhmUxDstsD8eEkYBewrAjBBfSLJ + WoKQFxKtdJKPnBwdCgtNqKiwKtW/0iapg7F1YCgaQ6NR6Oi2oLImBMXEEhW1GtQ3m5R2zr1DXvSTTIkI + 3D0Yg84+D5o6eI5mHaoatahsCEMNrYEkurndiPZuK3oGXRiZiMbUXAJm55MwPpNIMsY43+mCjzk6lWst + het2uQo4kURfLJVxJCMrDFnZJEQkJ0JkYmNJjBUBODwgAkfp4JZ2sq5Q2BwkzPZgxUR4snAsZN8sJ33U + HaVGjJAjIcfSfi1Do1hyGuM8P9PLtS4monMqn8sgicshlsyTPY+IH/wlZmUP4MrKgAhcQyJUVWVGcXEo + ioglyoqDUcm4LD5dRyzYUhmMjupAO/MGxokKxlIRgPP4XbP5XX2Ms0XElWWFISjzM4aVcIxLdWiU9qF+ + PeqlCjEv0Pq5yifVaCIAa1BK4l5KrCcCsFQBVxIni1UzltUwvtUVm3kei7Ifqhxr/ST0xNj1vP5Gxt/W + KlfAaiLQVhOpVAJ3N8d8IgD3dwWqgbvbPOggqZN2/DVVRtTWSHswB0aHkjA3la0IvxMXRN7RkWSMjtLk + 8XAiRobiMTwQhyHa8CB5zGA8RobjMT5KPjORjjlFBM5VROBekvqWtmi0tnnR2ZlMMh+LwgKbQngt9Ger + OeDPUjFRWEBcL62oOPbS/muQ8WDFQgbWrsvBxi152Lq9AFu3+bBlSxa2bM+mZWDjBdu0IxMbd5KP0dZv + T8eaTSlYXErC5AqpaLeirFaNTMYrEYBzC8PhL7OjvDIaWT4HPLFhAQGY1/N/CcBao7R//rT6VwTg8AsC + sEcXiiSLDjkRJvg9FpRGW1AeRV/i4wq3WbFyOXp45P8qY22oiLOhNNEOf4IFRfEmFMQZkUsul+NWMyaH + 8jHJuTccJfFaxQpiQpHH57Po71kO+hgtj3G5iLG7iHGgKJExhjEn7SIB2E3z8nG8JwSJjN/J5IvxPKc3 + RoOoGDXcUgkcq0Y043pssg7xaUYkpFn42ACPCMDRIXDwvQ53sPKjoYMcU/52RWmUCmBPnA4iCNsigmHi + 9Zi4Hk0iCDsYq8T42GhTcTxV/1v85XN6WzD/f+E9PNo5B8sCcHKcRhGAfanhKPXRv8sj0d4QTZ9105w0 + OzppywJwRbmsVdmvzAJfoQUZOSYkZoYj6d8EYDV8xALFsq64jhroA+3lPA/XUSexSRfzdXeOGr1cx/1c + x7J1xggxxxiPUxkqzOWEYl2JBZvrPdjSEoc1LfHoK2GcYJwpYDyTbUakkiWbeELpBJEajBz5UeiCACw/ + /KemMPYQz2Qyh/pymBO4dksYp4uYO0QAzpHODYzfywJw6icCsFRGByGOeEUqufLI86t8zLUlHIsKxu0a + DwalNWwt1zVjQwNxTym/bymvrSbPzNjhQFmuFVlJ4Ujm3CfQB1LidUjiPIpfSFvolATmk3iVsjef3MSS + mxaEwkwVirOlpbXsnSsCUDh6qo0YrrMx/0mnHxdmO9xY7I7B6v54rO1PxDoelwZo/XFY2xdLi8G6gVis + I29bYk5ZGiS2H6INR2H9qIfG3D/mvmCR2DDGvD8eqdjmCTe2itA76Q3YRCx2jjHnj3mxc5TP8z1bh1zY + wny9uV/2/7Ux71uwps2I+fpwjBJX95Wq0E081+4PRUsheWNBOKSKt7HYiCb6TaNiIgIzDvp1qC3SMt6G + o5yYsVS+P31BrJQ+UJGlRmW2GuWZwRzfIJRxjBQBmK+Xtv4tjOufCMDEqUqlL00RgNNpaTwf88OylaWq + lCrgWuLYhjztvwnAdVkcc1pzvgZdZQb0SovTShO6y/ToKdaih/i+pyCUmFtwLfEt8fAY8fQEca4IwFL5 + u545YYn+sIZ+Puc3Kbh9MN+AIfrtWHUExmrdmKiPwHSjEwstDqxqd2J9lx1b+jiWnXpsbg3BtuYg7Gki + Bm5X4YqOUPJ0LW7rM+H4iA0PTUXhifk4PLMyAc+tScLTi7G4d8KBa1tCsYPxdh3HKFABHITtxIQHmsJw + iBjq6JANV4/ZcXTQjMuI2S7t1vH8WuyrD8WeyhDsJHffxvfsKQ3GYfKSqxuJsdsduJk48SZe47XNVlxB + OyRCcC0xYjm/b0kIVjBXzxeEYJYYX2yBmH5diQmbmdN3NLixqzUGG/l957jeO7k28mO4rhhzpPuNk3HI + xrhkc2gY57Rwxejh9uoQHaNTBOBYYpGLBWDZ6zeO6yc+Xq8cY716vo6YxSN7+zK2KgJwGCJESI6SveZ5 + To/ETB4j/10Azs+KRIkvEmXZVpRnGFCdaaAPGNCST1xWbGWccqJLxN+KSLSVudDE+WsodtCcivhbU+Qg + prQpNxZmJ4cijWs5LSEEGUkaZJOH5ZGHFWQzz0grzjwL/PlWFOaZiC8NPBKLEn9KJXC1VGcxB8t+kCIg + 5JErFpH3VRQEo96vQjOxTifX01gdsa9U3NEmGnX/JgCPkkvO1oRhZZ0e6xqMWEeOtNQiArAVKzhnIzU6 + dBBP1ZJX1XK+6kuJocgHmyv1SmeHjmozWioMaCQ/bBABuDiMfq/HQGVAAB6tCrsgAEvFugaT5BiTNcTj + xLMjNSpaMPqrQtBTIWJ1MPr4eKA6GIPV/L8IxHUhmG4KwWK7RrlxdNeYEwdnPTiyIhqX0w7PR+LQrAt7 + pyOwdsSOgSYNsRVxHzl2G3HSYHsMRruT0dfkRRPxeku1G33tCRgbTMXkWCrGh+MwMhCJoX5y4iHGxulE + rJzh80NxqOf69TEOpInYyzwhVWQJNBGAY2kJjAlSEZxGHJjGGJCcqVZamGZybecxNlXUOpVOKtV1blRW + O1HM3OVjvBFMmyTnZG6QPCEtYaX1czSxVXRkQABOjpa8RDyazThV6kJvdTT66VM9jA9yE1RbsQ7tpcyB + lYFW3/1cd0O1UkkdhvlW8qtuMzYQS20aFBHYzHirJScKxuaeYMaLEHIsNf9WYUN7EDa2cP22BeNgVxiO + dBtxpIPru9uAIwNWHBm24RKeY/+gEfuHDdgvXZpmbNiz4MK2BQ82rvBg7YoYrFwRhRXzHmLAaCwSx61e + GY9165KxYs5L/GlFW7MWFcTipZyXkmLGVnL3SvLJ8loH8issSPMR7zAHxiSrEJOoUkSqNHKvrALmQVoG + 82Ic+WxMsgigAQFYtsQQMU72Mo1lDpetY+TGUanYFkuWylWeJyD0hiCF+TyVfDqFc5jE14rJTbhiSdJx + KIV8TG42JR/LYb7O5drLzg9YDnFwZp5VaZHr5XoVAVipzlVE2oBYZee8iUjooMm1OTmH0jpYrtUtgh/j + hAiFzZ2ZGBgtwdh0Ndp7ffBXRBH76OHge0ToVfAZY5zgtyhiu8hYzYUKYBUc0cSCIvwmGhBDTBDDeOaN + +1QAjiWnVSqhOQ4Z9LMcxoSCPHIiqdCnn7TUm9HaYEVzDXlJpQXVxcQ05DIlxF5VjC31xXbGDjtqpNNJ + rh750o2F4yJttVPi6dvkrTnETVIBXJsagk7yn8E8DaYKtVjJnLyq3IDFEi1WEHvM+UMww5gxztgxXqjC + QrUIwCasbrdhFfOW3JQSiElhGGUcGGXOmaiQ14UwFpH7839LjeFYVctcUaXCUn0wtnVosKsrFJcMhOG6 + ORNuXjDiM9OhuG0sGI9MaPD8rAEvrbDg86vteHmNHZ9b5cCzi3Y8stKJ46vcuHYuEpdMerCT+GTDZAIW + 5YbYkUT0kRt1ky+1DyWiqTcWdR3RKKt3wldqRBrzdSyxgJNzKRbFtRsnnV/ok74iJwpKI1AgFcC5ZvJY + ndJiOTE1TKkGTk7T0qcMSM8yIj1NtvDQ0Yj9kzVKq3ERcKWSN5fxIzOD2JMYQyyL+MXnU6Os1ESOFYkm + 4umaahf8xKBZGfRhxh9pa5zK60ign8uNuYmSS/j5uXk2FPhdNDfyi9woLPYgvzACWbkW8nvmPuYajyKs + cu3QX7zkJN74UER5VcrzXsGVxOFFJTaUVToVAbis0oqKanLYRgdaO0QAJj8VAVgRgaWVu1fZE7i52aW0 + iG7isasnBj3ElD39sejqjaJ50DMQhcExctGJeOXYQ5zZ1utCc5cLVY12+IjLRACWDgCyxiJlvGODESvi + L/1OLI7rXRGAiatTyRvy5MbOSg/KGCNLKt3wl7uUzkKZxNVJHF+J1Un0VRGAZcxk/Sdzzafz/Rkp5HAX + RGCpvM2V8eN8ZWbokcmxSk+Rmy15HnI2L/FHTDTHi0exTwTguGUBmH7yifirViwhQYNk8oI05vU0nkss + VW56T6KPLAvAsl4VAVi6EtAn0sgpUjX8XLlxJVixdMaufPINEYDriI9aiItaGpxolvkgx2pviUCn7Mvc + LN3CRAB2EDuoUUUsOjOZi8MHehH0zl01eOeuWrx7vA7/vKMWf7mmCL8+mI7vb4nCd5Zc+MYaF762JhJf + W+fGVxSLwmtrYvClNVF4daUHn5t24rlJOz5L0PjMuANPjTrxxLATD/dacV+bAXfVaXBndSiOMdHfUqXB + TdUafKZBjzv7IvDgZCxBZxZeWpeLl1Zn44X5VLw4kYCXR+Px8ogXL9ExniLoeLhBh3tqNbijSo1jdToc + b7bgnhYn7m2LwP3tLtzf4cK9HRE4zuMdXZG4rcuDm7o9uK47Cpd3eXGww0vg6CEYjsKGtjis70jGms4M + JsRcWj5WtuVirj4VM9UJmCmPx2xxHKYLYjCV5yEYd2Esx4nhbAf6c1zoy4lEr4+Onp+AgYJEjIgVJmHU + n8hAlYaNPdXYM9mOy1YP4eotUzi0ZoBkqZqJOI3EJYoEwYPWwmjU8XwFJOBJbjpIBEGpi0TXGYzKqBBM + ZITjIBPgQ+12vD4agTfn3fhwdTROr4vGuY1ROLPJjRObIvDhWic+nHfgQ87Bh5NOvMd5kBbQp7Z6gUtS + gCvTgeuzgFtygVuzgc9kANcl4dzlXny8i6/dYMI/VhjxhwkdvtunwUutoXiYYPC2eib8Mi22kkgtEUiu + ISlfJVVZJCerGZQ2+/TYU2DB4UI9bmKAfqAuGM8yKEsV8Fea9fgag/dXSAReZcB+mODtRpKBAyQTSwSi + 47nh6GISrfXZUZ1DEJxtR3euHeNM6LLf426SpMtrzbiRhOFWzvPNTA7X1WhxOUHjvrIQbCaAXc3kMSdV + oiT6k5lBmM0JVqrGNjE47eJi31fhwYFyNy4pdeAgSdYRAt/rmCzu79Lgc+N6fHt9BH5/OAnv3JyCkw8l + 4fSjXpx9OA5n7k/CqTsS8NENcXj30mj841AMPrwhG+efagR+OK5U/55/bx3wwUrgryM493oNTjyVgI/v + duMfN0Xhf47G4fW9ifjsKvpejxabCWj7C0guCcSFdJbwWqt53b0E2Ru6LTi2NhVfO1SG311Xjr/fVYB3 + H5I9UBPx8SuJ+OirKfjo+1k49Qs/zkn75zcbAiLwX/n4t6XAD3Jw+ssJ+OcTVrx1tw5v3iYCcCj+epka + bxwOxdv7w/D2Hj3e3GnAX7aZ8NuNJvx8vRmvr7HgtWktXhrX4IW5cLy0ZMR3jsbgzcf9OP2tZpz7RQfO + /U8Hzr7ZhnNvNOLc7ypw/gf0ndficf5ZB848YsSZB2kPO3HqoTi8dUs8fnAgCs+vduGuYTuubDHishYb + ruh24+bZJDxxuByvHOvAS8e68NCVjbhyow8LHXZ0EHy0kPy25uvQ6Tejv8yK4VIzhkX0KlJjvjQMGzjf + VzTSv8Q3Fwz47jYLfrvPgrePWvDBNVa8f70B792oxfv87h/eZ8XJxyNx8rPROPFCLE6+koATr6Xg469n + 4KNvZeHEd/Nw+gd+nPpRGU7+sBynflCOM69X4Ox3S3H2a0U4+0o+Tj+bi78fS8T/XBWFH++x4BsbQvH1 + 9SH4yX4t/nSdHf84Fokz/M54OIYWCTzqAh604tRxI/55Szj+el0IfnmpCj88FIRvHQjC1/YH4RuHg/Dd + K1T4yTUa/OpaDf54fTjeuFGPf91ixUe3O3DyLhdOP+DB6aficfbVTJz5Zj5OfZ/X+fNSnPi1iMBVOPX7 + Wpz6dS3O/rIBZ37UhLe/VI6fPpqFF66Mws0rtDjSH4y9BO0iAl8zEoT7Vmnwyn4Xfn5bFt77bD3OfLEL + +NYQfXgK+NUa2jqOxzx+92wvnrsyH9czlq/vlLvtVJhqEADmxmhLLIab49HPY19bLIa64zHSm4jBnjj0 + Mtm3M8G0MDl3tUWih7G2u5Mkigl9hMl7fCAa08MkAMOR2DpixCHGl2tntLh9UYOHV4fguaUgfHVLCH60 + Oxh/vkyDf1wfhg9uM+Dk3U6cuS8WH96WiD8eicUrq524upfxpzwMfUyEtSaCTBUtKBgFqmDk8XF+CAlu + KAlueBBaSP4XGDs35odhV3FIQOyrCMKVrUE4Pkl/38Z4eo0Xf3skFydeLcW5b1UCIv7+UoTfcoDjjV9y + bf2U9n3+/Y0anHypBr9j7Hx5nQ13dwQr8e7OKoLH5gQ81ZGExzs9eLDFguPMSzfxM28qUuHuilA8SJL8 + WJ2RpsPjtMfqw/EoY+uTBLhPdDG2d5pwZ6sO1zFGHiTJ3cYYubmMBKyCMZcJerFEh1k/yRu/Sz8BezeB + 4LIA3J8TpFTJjzAOThQyDvqDFQF4vjIUq+oNWNdMosc1trHLiXVtDiw2WDBbacCAL1gRf1uTeA6C9Em/ + CbPlVuY8i7If8EixhbFYj6b0cFQlaVAQH4IsgtJ0ufssOxwFjLGlJJllpVpaGMqLQkkQQpVKiWqp8iWo + qiQQqyRQqyQYq+Lj2tRg1NCq+bk1/NwWArlevn40V41pxsXVOWFYnxuGLQUGbOH1rC8kYSg0YIG5ZbZQ + h4l8LUZ9Ggwz9wwRvAzQenOD0ZHG78HP6CIYHOPnrCOx2eMLw2UkGVf7Q3F9YQiuZeyVtv9HmHsOcpz2 + 0naTbO4pD8IlJBeXMkcdrQnDVdV6XFWhxxXFWsWOFoXhKMnLlYxNN+WZcEeeHY8WR+GFCi++XB2Lb1e5 + 8aMqB35G8vS7pmD8qTMIbw6r8N5qPc7uc+HcpRHAVW7gWg9OHbHg9EETcMAKMHad3WvF6T0iCttw9lIX + zlzB9X/UhZOHnfjXDjP+tdmGDzZG4iPirA82peDN7fn45fZifGt9AZ6ezcLRFg9znwaN/N7FJJqlBMLl + qVrkEVQmkmRK62epMI2IVCmiY0xkCBI9BLKyT2WSFoXpWhSR2BVlqVDs45wwF7XUa9BNrDbQbcNApxUd + TVo014aSDIagkdithdirjfittYrxulyNtoowdFcb0E+yPlxnxyTB5XyHG2v7Y7BtMh575xNxYEUcdk9H + YqlPp7SBXtfFeN6jw7Zhy4X9umzYPeGiufmcHWvaw7DYGoKlTg1fF4617Wqsag3GWj63rlWt2NqWUCy1 + hCuVLduJL6Xt894hl7L3b8B4vqEI7BqMwI5+J7b1WLG5U9aCCRu53jZ0m7Gu04i5RjXGa9WYaNJhptOJ + KeLEgYYI1HK+szmumSQZWQTx2bFq5CaGcrzCUVFoRj1JRFMliVdFBJorXaiVqtN8I8oLTaguIaapEAFY + qoAdBNlOVJSSnOU7SM6MiI4OhsVCAm8LUu7s90aLACxkjcBfiGGSWmmnLHu/ZDKG+bgOi/0WRdCsrSM5 + vyAAD4/FYHzai+5+K6obQlBWo0I18VZDqwlt3S70DnoxMMKYPexV7qYVctXW7UBju1GxhlYt6pvD0Mhx + bGwNRxvHo7vfjqGxSEzMeDEzH68IwSMTXpIzaZvEGMBYk8G4I/sBp3HdpQsppWUTd/kKtPDlG5Q741Po + h7GxGhKiUFqYsu+ex6OjH4bDKS0Z7WpaiGI2WzCs1iClatAVIfvmhCqkM54EJ5HETO7STctUk5ySDDFu + iPgrLbPkR7c0kuFM/k/2OypgrCiUVofFRpQQP5SXm5Xq39p6zgX9s7KC8apEjUrG1mriidqygADcxHjZ + UqFGK62xWIUqxgmpii/g98rl98wntvRzfZQWcH0VhaCmRIO6Eu0F8VeH2gI9Khm3KnI0igBckceYyFi2 + bBW+cFTyOXlerCpPh2qOU7UIviVmpR2uHGtJ3sTqiIHEWspJ3uhbUgUs1l4XobSC7m0XETgg/ioCMLlM + ZzO5RJMD9TX0vSojmuptGO5PwOxkFmam0jEyJEScXOWC9fXGYIAEvL87GgPymDbYF7Chfi9zdywmRlIU + 8TjQCtqH3r54+l0sOrsS0N2dhpbmRJT4XUrbKxvzsdkYBDv9OiaKhDQ1HPn025IiA+pq7OgkTpieTMXq + lVnYsCkgAG/blhcQgHeIifB7ke3KVOxiAXhmkddODlTbTD8rDEa2VHQzLxaX21FWGcW/HUrFg7QS1/Fa + dGbZnzbkE+H3YgF4uf1zqIZH4gatmtfPx5E6EnNzONIcBuRGmlHgMaPQbYY/0oSiCCP8F1mxx4jSGDPK + Yq0XBGC+PtaIvBg9st3Mk4y3OZH0TcbcPBGBo9UooOVwzWeK+Mv1X+AOhp/+XpmsQ026ARVpzKupehQk + hiPdE4x4J+M4x9RDi+XjOL4+nmtKRL+4GGkBHYYorwZRseHK/r/RfF9MUjhiU/SISzXBm6Tn82FwMubY + 3Vxv/2GyZ7I7VouoeB1fF678bWW+MDtUipj7ifFalyt8Zb/fZfHXIHsAc/0auI6XBWOp5Hcw97h5rZ8K + wIxjKVwPuSY0VnnQ2eRFR7Ob5qI50NnqQnO9PSAAl3G8i2S/MjNyC8xIyzYgPk2DJMbCVFpahgYZGaHw + EYf48/WoIFapl7XCeNsu+2hz7bQRK7RmhqCD67ebcaqXmGPogg0Td0jbwXnG+DWVxEUN0VhNfDvMeN7g + M6CE+CE/WQVfQkAAlv3ycxh3svlcZooKGTym8Sg/FqWnqxmjNQomyuO6LuT1FPh0yMvRKVUD2elhyCCG + Smc8lJiYRCwlP+xImz/Zmz/VSx9IUaOe37OrIhL91cTNjVx7bYkYbohBl+wPznNWZTPm5BnRVRWNrtpY + NBS7kStt55ibEjjGaQl6pMUbkMp5DAjAjJsSH0XM5rUWcizKiJ0q88JQw2OjCJHElYPVVozXuzDVHIHZ + Ng8WO6OwukeE3nis60/EesaQZVvqi6N5+TgO6wdiaHxMfK/YoAcbht2KbRzxBGw0EptGIrFl1K3Y1jEP + 830MdorwS9s1Hoddo17sGuFzYqNR2D4chW1DfC3z9qY+B9Z3W7G6zYS5OmI/4o3+0hD0lhKjlISTN2rR + zvjb6jdw3i1oIxZvJn5VhOAyxlI/11QRYy6/rz9DBT/9YNmKadLGWTFFzF2uACbOYR5r4Tmltb9U8ir7 + /2aK8BuimLxHxN8S5h4//WnZSmnSFro2N5zvC+wB3EhfqGdekH2AG4jVWoljeyrIcTnuvdKCu0yPPs5D + P7G07F09VBiOEdoYbbwgHJP54ZjncRWvZx39XCqA11U4sUC8MUacPFxgwjAxxkQt42tTDObbvJhvdWNF + mxOrOxzEOFZiHRM2dWixuU2F7eQ/+2iXEqde1RWKG3rCcGzAiHtHrHh4MgJPzUThOcbZl9Yk8hiHRyac + uIV4bL+fnIRcY2tBkCLobidu3ikVvk0aHOkz44phGy7tM+Jwjx6Hu2kdOhxo0GBPVUAAlhv19zLPHq4m + xm4w4PpWK8/rwmfISW5steHmnkjc2BeFo10R2F1PjFYporcGKwpCMZsbgunsYExzHuS3p/XEV5uqXdjW + HI0N9RGYYR5uT5dW+yGIZeySSkkb45SVHNDuYuyLkdhmYowzEpMYFQE4TrFPBWCp9hW7uPI32sOYGqkh + ZtEgIkJaQIcjwqNFRLROEYFdUXql+ndZAI650AK6IDsSFQUeYgMP/SgS7cUR6Cx20uzoKLUpArBS/cs4 + 2MY131TipK/aUVNoRVWBle+1odRngY9YMIsYMJXYMCWOOTVB2kAz9xG3yz6EAQHYrJjkWtmnsDB3WQAm + 7uRnlDEe+okz8rkG8nPor3nBqCSGqS+WVrtB6KAN1YRilLh/2UQAHiHWlz2Ax4iJFrj21jaRj5FLrm82 + Blqvtlqw2GLDOHltV6nEL/IHcqzaYj4uEwHYgI4LAnDrBQG4sUCq3zXoJQ4bILcVAXisSoRfEYDDMElu + MUksLq1elwXgoSryOmK0DvpQFzl8N/2u94L1k88P8/+TDSrMN4dgfa+eXEI6C3lw+Sovrlwdi8tXeHBk + LkIRgFcNWhk7if3I/Wr4vdvrzRjujsNITzIfe9AgHRfqZM/fFEwMp2NiLJW4yUs85CQusmGSsW3VfBLW + rEjDzHgiOhodxPwa+BgTJB8kMkfEk/dKi9I45pgExoikDOLWnFAkMX7Ic4nEztLGNI8+W1njQlWttFB1 + Kjct5tG3M7LUSpcdublRBGBpBRuv7A3Kc9KU/UF5FAE4N1luLjShtczN3OFBD3NFN9eGCMCdpQaOm54x + RsRfjjfX3VAdY0pjOObI71aT/6wnb9gwIEKwEZv6tdjYHYJNvWps7A0h7wrGUpcKS+1BnO8gbOtQ42CX + lmvbiH3t4djVEY4dfSbskNbbQxZsGTHRjIzxJmyd4PqcsmHtpB2rJh1YmCUnnI/C/EIU5lbGYGZ1HObW + JWLFxlRMrYxF75gDDR16+CuZpzjHRaXko+VhKCGOzS83ILtEj1Ry/jjmW28Kx5H5MiGNOc9nRGaBBVlc + Nxn5FiRlcR0zDkiVsLSBFnFVhCLZMzSR701M4/uSVIo4FMO8KzeuSuvuxAuWzDkUESiZcV3Z6oYmfENM + 5jaZf6dJVaXk9nzOV5EDPr+Dc0nj+s4tdCI9x6RUSorgKxW6UgVs52MReUXAtXP+5KiIv3xOnpd21VK5 + nJbDtct5bO3OxtBkOSbna9E1kI9i5vwUrvfIWBXfq1LOKyatnhPTAzf52YkVLcRb9ig1IojjohNEAGZM + UuxTAVi69cQI9uDYSKWzIiTmqlGUH4qq0nDUVzFnVZtQz9xUSR5VSr5SyJxWyPEuyyVn4VhXF1oYpxh3 + srXIkRbQIv5KdWIczxcfrNw8Jx1MG4iLupkLh5m/ppinV5absKrciMVSLfMX/ZB8csYfrPxuNUnetaJG + h1WNZqxh3lpL/rrQZlZawY9Wh2CIMWCYMWCC636BfrKWcWqDbGvA4yrGiQXGgrW1QdjSxnzTFYJDw2G4 + ft6IzyzoccO0GjePqXDfmBrPzBjwuUUbXl7rwstrnHh+lRNPL9jx4LwDty+4cC199PBcLPbMxmPjTCLm + R+Mw0B+NVuallp4oNPd60dAVhTrymTLyyoIqEzKLwpHAde2mP0XTR+Iz6UfkgzmMw3l+J33DgdwiO33D + iORMYkBi2CRiwtR0vSL85uTZufad5NBWZGWaafTrTPo9X5tFy8kml2BcSOO5U/gZYql8LFXchYXEhlVO + 1Nd5UMk4kk9emU4flhtIUkXUTA1VtkyK5ZzEJoifa+jDBmRkm5CVY0OOj9+BecqX70JmjoWv1yGW+Uaq + 5qPom9H0F2+cmpw8GG76rYjAch5FAC6V/YRleyg7ysmzq2rtqGsiX+1kPCJOlBbQff3x5I1S4etFe4cb + zYLzW5xo4bGzW6p+iWf7opVK347eSHQPuDE45lUE4CHiw75h/q+f/LcnAtWNHCdFAL6wDzivR/ZSDojU + jAv0ubi4wE0e8lh+O8gSPM8cW9MQj4paL2OKB37G+Vy/ietNyziiVuKD3HgvN5amMX5IHFDGj2s+jXFB + xF+ptM3inGWLZeiJ6Rmr04i5ufZSk3RISJB9tkPIx2R9iRC8LACr+bwIvyICcw1eEH7jOMZi0upZeEG6 + +EIq506xwE0AScz3ywLwJ/uXy2+wqRqlU4G0g05JlJs8aYxrPq630kKu3WqOb0Okstev/C7fuiwCk2uJ + +Nva5Fa27yvKkzVvxMyED4f39yHo73fU4u3bavDWrVX4241l+PnBDHx/Wyy+vhSBr62247UVNnyBi+UL + iw7FvrgyAq8uuvHKYiRe5uJ5YcaB56dFALbjWRGAGdifGHbgUUUA1uF4fRjukgrg2nDcWh2OzzDx39xo + wB09TtwrVcDzyfjsYjqeW0jD8zPJigD80kgcXhqOwYv9HjzTYcPDTXrcXUfQWqPBbUxoxxrMONZow10i + AtPBRPxVBGAu2Dt7o3CsNwa39Htx00AcrupPwqGeRIJgkpfGaKxs9GJFYwJmm9Ix05yDmaY8TNflYLwi + FeNlyQxKSZguTMJUXjymcr2YyI3EeLZLEYAHFQHYg15fHHrzEtGXn4T+gmT0FyZj0J+EoZI0nisfi22l + JE012DLehE2jDVjoLCbpSkNnSQLJSyyPcSQKkShKNCKBIDPKEYZoWzgSrWoUOtToiQ3FZhKJ22tN+Gq/ + A3+QKuDFGHy82otTS9E4uc6N99fKc078a8qBf3Hc3x914N1RK96dtePEhiic25uA85cmA1enATdIJTDt + etkXOBFnDnnx8VYH3lttwhvTWvxyKAxf7QjBUwRVd1eLSG/AoTIDtpIMraVzrSLhWOFjAM8OxcqsUGwg + 6NxBAHqQZPpqBui7qlV4siEMLzbp8CVFANbi6wziXyKofJCA8noG+4PZQdjIgDmdq0U/E3djnhU12VY0 + ZNvQ5bOT/FixophAgsn/ABPSFXUGXN1gxNE6HQ5VaLCLgHMTE8cqgk7ZM0ZafI1k0BgQJ3hcYNKRa91a + 5sKuskjsLY3AgRIb9hdqlB//r68NwSMDenxljQe/PJiKv38mHx/e48PZx9Jx9olEnH+cY/VIOs7fm4az + t6fixHWJ+PDqJJy4xYfzzzQAPxgB/rqIc/9YCfxzHuf+ZwBnvlOBj56Mw4fHI/HODW78/nIvvr0zFk9w + XVxJorW+hoC1KIjEm6AtJ+SCAKxCF5OgtL24ioT42Q05+OaeHPzmmky8fVcK/vmIF+99NhbvvZqI976R + io9e9+Hkr0tx9i/VgTbQf67C+V8X4fzrmTj1RS/+8bgZb90te8tq8dfr1fjL5SGKAPymIgDrFAH4T1v0 + +MU6Pb63qMcXJ7R4sjMYD7Sq8CBB35Pz4fjqITf+/HAhTn6rFed+3Y3zf+nB+Xe6cO6dVpz9Uw3O/DQf + +DrH6AUXzj1hxvlHLTj3mAtnH43He8dT8IvL4/Hqpmg8TCJ5+6AHtwzF4fbJNNy3Ph/PXl6LL9zRgxdv + 68IDl9fj0rXZmCKxaMlXoaVIWgnp0eW3YpABeqyC5KJUj2mCkpWVemyuInFsUuPBQa3SvuPbW6z47QEr + 3r7Cig+uM+OD6/X44KZwfHCbDh/dZ8WpxyJx8pkonHg+BidejsfHX0jER1/mGH4tHR9+PRsnvpmLj7/p + w0ffzMeJb+Tj5Nd9OPXVXJz+YhZOv5iO089k4OMHUvGP2+Lwpyud+NUlBvzqsJ7jase/7vLgxP3ROC97 + ez4RDTweQXPg3AMmfHSHFm/foMYfjqrw+u4gfG1rED6/FIQX1gbhZT7+yj4+f2k4fnZFOH5/NefpOh3+ + caMRH9xixcfHbDh5TwROPubFmZdScearnO/vFODEj/34+BciApfj5G+qcOpXNTj3CxGAG/H2l8rw00cz + 8eJVbty8GIZD/ST4BO0HRQAeCsI9C2q8uMuGn9yQhn8+Xo2TL7YBX+4DviNVwGuAn6zDe1+bxs8e6cAj + B7JwaNqB+SYSLwKqkVoDhuqd6K+PQnc9E3WDB10tUejvjMFgbxwGmdzlR+Q+JvLeLo/yeJixdpDJX6qJ + xkieJgbEojHX78K6fgN2DWlxaESDq8eDcWwqCA/Pc2xWq/D1jSr87hIN3rpGg3/drMWJO204czwKJ2+L + x9uXx+EbG1z4zIAWW6sIGtOC0OPkWtISZNLkWK8PQqslBF1ODQbdIZhm4tzCmLTHH4qDJHvSWvkQweN1 + bSo8NG/Al/ZF4TfHMvDe836c/nIJzn2rFPhxFfDTckD22/4F/fxnecCP+Pi7hcDXSvHRC3787pZkvLre + iAd6gpiDVLi/zoInWmPx2Y54PM3881i77EtvZhwMx11VoUr758fqjXiqyYKnGo14st6AJ+q1eKLZoOz/ + +3iXBQ90GnEH8+P1TeE4xO8nAvDGUpIxEYDljkmug4sF4C7GDrG+rCAM5BIY5wVhrCgYUyT1M4yNc+Vq + zFeEYpHXsKrBgCWSdakCXt/uJMC2KgLwYF5AOG0hyOlOC8Yox2qSgH+i2IAxqcAvNKKNhKomRdpXEgQR + +KXGEfiRdMoPnj4C3KICDfxFofBzjEtJ7pcF4BoC0Cqet5qgs4bkppbHWoKyOj5XR3KrGB+38fOlPdAY + CcgM88litgbrcsKxqcCIzX4SU4K0iwVgaSMkYyDVEUOMo/15GnRJSz35HgRsnQR9IwRCKwnituVocElh + GI4W0dcK1LjSp8JRXxAO0w4wb+xhHthJv9hJv9hDX99bGYyD5SE4XKrBkRItLi3U4giB/eGCMBzO1+Iy + 5rxr8ky4JZ9YpigST5Z68FJFFL5cEYHvVNjxOudK9gH+Q0cw/tyvwptTany4yYyTuy04IwLvETuP5gsC + sDkgAtPO7ONzl1hx9jL+/6gDpy+34+QhK97bYcB7my34YL0TJ5jjT25MxLs78vCXXcX42ZZCfHGVD3f0 + xtJXdBglYG0hCG5MUqMhy4ByAaYEnzGR8iM8gTKJobSxi/FokBRNABtnQH6KAUUkAn7OsZ9zJgKwVEU2 + EVN1tZu5vh0YlpbAbRa0E6O1ELM1Eg+INdOvm+lfLWUc+4pw9JAwDtTbMErAKTeMzJEcrezxYGnYo1T8 + 7Jz2YMuoDYsdGiy0hmBRBFw+3sB4sGXQhM20bcM2bB22Y4PsPd4SgoWmIKwhmVvbQZzRHIT5hiCsqKfV + BWyxXoV1zSIAG7Gj145djC+7B5jvB/hYrN+J7cRL2/tc2MbvsqXbho1cb+v4+qUOM5a47tZ2mjDTKK3m + QjDZbMR8pwuzXdEYbnQpP7oXEHhnk2RkiJFo5KdoUE5C0cj81EH82NtC7Efr4/rvlB+Qyh2oL7Px/zY0 + iFhbTrJcZqGRHJU5UEYy6MsxIyFeDYcjCC7GsGjOTxxJQ1KCmkQgTDERgJW9awj2szL1yPOZUFIsFa0W + 1Eqr1FYb2rtsGByNxNgUMeiQFXXNalQ2BKOuJRzN/J5t3U509zMuD0WjZzCK5lHIVTvHornDiIY2Peqb + NSRsoTyqeVSjuS0cHT1m9BOzj/K8U/OxmF2Iw8Q0YzzHtqxSjXyum1z6Sg7jTi7XVF5+iGIFxFZFJQYU + FpvhyzMiPYNEMpY+d0EAlh9TLxaAHc7QfxOARfx1cDzEV71xGsQpbadIWEn20kh+M7KCFUtODZA7uYP/ + 3wXgMOWmlALi1IIinbJfckmJURkzaTfVUG9VKmOr6K+1FWGoo/82VIRwroLRzHjZWqmhL2vo02rUFqkg + VcDFjK8FtCJizOL8IJIrFSqL1IoAXFscroi/dYxLVYwNFTlhKM/SoJLYs9wnFcD8m0cxEX/FLv5bWoxX + FRl5HvMntiz8itWXWNBUZg8Y/a2pwoGWammXS5Lcynlti1FsWQBWROA2IXdO1NeYlWrg/m7m3pFUZS/g + ASHkJNvL1sOc3dcl+0fRf5i7xfq63QHj2h1QbuBKwNR4KuZms5UK4L5+2RM6Ht2y31R3GjraU1HOOJgS + Hw6XJQhmQxAsRvq1VKp6Q5DOXJHLMSmVSuk6O0aHErAwl4Z1SznYvEWqf3OxaXM6Nm1Lo6Vi4/a0C8bn + dmRgw05pCZ2KVRuTsWJdIuZWJWBkOgrtPTYSec53CXNQmVERgIvLI5Gdb0dckhZW+pEIwFLle7EArDOp + FQs3fLr/rwjAoeqAAGzkY6c2GFFGNRLJwdJdRmRHGJDjMiDXpUOOUwuf41PLd2lR5NGjOMYMv+wBHGuE + L1qniL9ZkVy7EQEBONcdymMwfIzH0uY5m9cnAnCOU4XSWPpSmgmtPgfaCyPIBe0KF/Kn6JEZwzjA18fw + tWIibogAHBcVAq9YDNeVNwxRsQETAVhaQHviA0KwiL/RCeGI4HmkTaCN1/DfBGCp/lUqRpKkWlinPGfj + dQdaP1+oAKZdLACLSYW1yRaiiL9GclVF/OV7rIxtzoggrncVEvjZqbyu7KQwpXVxaQ59Xtqdyt7WzBdy + 82Bbsx0dLXLHuksRgMtLTSgi/sgn18xhzk3JYixJDUViWhiS08OUqoa0dI4rsUJRPvOdcsONE82VTq5f + xjc/146Ib+khaElTKThHtt/ppw0wVw7y78GMYEwS88yX2rGixo0VDbEYr41GR7HcjByOkgw1ipJD4CNO + WRaBZc9fRQBODUY6MVMqr0GpRl5uQU/84uN75bpypUooUyqAw5GRplV+LEpN030iAMuP+SIApxMfFfM7 + Nftt6Kv2YKSOa7Y1EVPtSRhtikVPFcelyKTko45SB4YaE9DXkICmkijkpxuQzBibRB/KTDYhK9mC9CTG + 3iQd0vg50poxm1iskGuwnDGnljGxwW9UxM12rsm+cjPG6lyYaYrCfFs0VnbGYk1PLJb6ExVbP5CEjf0X + WwItXjlu6I+9YDEXLAobmWPENg1F0dyKbRYxV3AAbdtIFHaORGP3eGzAxuIDNsLHYqOx2KWYFzuGo7CZ + OX2JeW5VqxmztTqMV4ZhSPYtJdbqL9ehh2tfxI4u+ku37PVb42IMt6K5LCAA1xXrUcN8IPux+znfxemq + i4zxnH5wsVUxv8j+vc0cn1Zi4BaOlQjAgfbPAeH3UwE4+P8UgOuYD2S+lgXgBmJlqQJuIo7s4Hn7q5m7 + a+zoqzSit0yPfuL7wRI9hpk/Rzkv48U6TPj5fYu0CuYVAXglcbBsi7WaeWINc8J8sQ1jIv4WmjBS5sRk + rQezLV5FAF5odWOhzYmV5CKr201Y267D+jYNNrYFBQRgckMRgK/uVuOGHg2ODRhw75AZDxKDPT7mxLMz + brww78ULC148Me7C3d16XFkVjP1+FfaVqbCfOXNXpQqbhadUqLCTGGov+cv+9nDsI4bY16bF/lZafZgi + AG8nxt5BrC0C8CFixyvq9bi+2YJb2hyK3UQ8c2uvG7cOenFtXzQOttiwrVaP9ZzjVeQ988T5kxz3iQwV + ZrnGFjmua7luN/A7r6PJzautXGu5UuHGGCnbndisAQHYJpW7Xj08CUbEJJiIHUyIjTEgXrFAFfByBfCy + BcRfjSL+RjjVivj73wTgiGgDXIz/Iv5GRhkQHWMkjmMeyI5EdVEMOqoS0Vsdj74qL/oqiL9KiRulArhE + uhU40VkdhY5KN5pKI4g5bKggbpIbZEp8zCfZRuQwXmZKm3fyrmTiexGCpQ20L50Y54IAvGx5OQEBuCDX + oAjAFRyfygoXKohJS0stKOY6KM7XoIx8rbY0jLgiFK2cj07OYT+5z6BSVUurCcGoiC41GgwTH41XaYi7 + ORctFmwS41rc2Eb83GblurRhuslKP9ZyzYQoVcA1hVxDzMtN5Xq0kxe0VxjRXKpDfUEoGvPUaBcBmP/r + Lw//XwLwTL0GMw1hmKZNiRhNXD4gAjB5e+cF8benkrz3gg3QRqpFACY/aCGnkJtKRyw4OB+JK9bE4Zql + eFy52otLV3iwbzYSK/pNaON3LSe2qyJf7mbeGetLxFB3IpqrXagusaKRMaSnPQ5DfUkK/hnsFyzE9dpn + xdSYB6sXU7BudQbmp5OJvTyorzCjlOs0l/w1UcQfmrQTlSq1ZQE4JZt4gr6bwJiTLDiW81DIuCWVc0r7 + VH6ubF2SQwybxvghGFcEYGWv2jj+rcT4EMUS6eNJwsVpkk+r821oJQZrow+1F5OrEVN2kcd3lxqUm0t6 + iXcHqsMxyHkc4RgvC8CruoxY28t57DVgHcdtfW84NnTLDbdqLHWHYF0n+VVHCJbagxk7ApWV+zr1OEDb + 0RqGLS2h2Mi4sKGfPH3QgqUhk2Lrh2mcgzUjJszz75lhMybH7ZhiTJmej8LUyhhMrInFJOdmekMyRleR + O01GoK7HhMKaYBQwnhTR7/zE4/4qHfIYA7L8zPn0nXiOTVwaxyIjXBHSZFsIEYEz8s1IzzMrjxURmK/x + cPykFXR0ogqJzNMpzM+pWXxfKnMvn1P2CBXhl38vWzLxQrIIwDThHWIJcuR8LgvCkvNFAJbOJFLZWVjm + RiGxZ2FZpNKqWfbrjSdPVARg4jxlz19yRxFvlapkPhZhWqn8Ze5f3rM4KkGFdFn7ldGKADw4UYbx2Up0 + 9ueipDoG6TxvdKJ0eRHcFsBy8anS/trF8bAqW5+YXIx5xIfOmEBXl+hliwsnPiQmVAQq4o5oFWJ5HSnS + pjg1sIVFPnNkSWEoKovpU6XkJyValOSHIz8zFD5+fx/HSn4rKOMYl9NEDA60f1bRRzk2/G5pscEXCcAq + NGVr0UtONubXY5q2otyERSlo4PnnyKFmi0MwRa41URSEqVJy/jq90qVuXYeTPhiBBXLyyepQjHDdDzJ/ + jDBWTVWQ/1ersLYxDOuawhUheCVjwDxfs7KG+Yj5TfayvkR+Y5zW4YZZLa6ZCMb1I0E4NqzCI1NaPL1o + xefWuPD8aicf2/HYjB33zjAXzUXgmoVoHJojBpmNw7pJcl/imbY2G2qYr2qYq2o7IlHbFoHqVhfKG7l2 + a63IZf5O8RGXc40nZQcrFcHZxBB5XNd5xJO59JXMCzhW/DaZ4yjHjCzyC85rQVEEiordyM93kVPbaBbF + 8nKNyOU452STi4hvJgZighIX6N+pjBO+PPJMYt5qYliJ9/nCvWWN0MeXW5cn8ijtz6Ppb4pQSj+KJz5M + lr1rMy3E2ZGKAJxB3iHPiVAp4q8iAsfI+0IU8dcj1a1StUpel87v4i9zoZSYW7ZbEgG4mhyvvjkgAHf2 + xKC7l9yUJpW+ss9vC8etsdmJxhZy2lYH2joYszoj0S5bWXG+5TeLrv5IDIxGY3giFkPjzJvEjB0DPOd/ + CMBS2R/h+VQAlt8LEhO5nunT8n2laj81Q4O8Igsqa2NQ35TIoxelzLmKAEwslcJ4EJ/CdSSV/xnMtRzn + TD6n3ARCrB8QgFXIIt9ITwlRqm4Vk6rtVKn+DYi/iYlhSitnqewN/ObxqQCs3HhBfK6IwMsC8AXxd1kA + Fl6QIaJ8GmOZYoxrn3QL4nhfJADLHt7yu5B0LVhuu67cfMHHOekaFOcZUMs5aVYqgF1oqicerrcp1iJC + MDlXW5MHTcT9/0sA/uuNFfjjtcX4zRX5+PmhTHxjgwdfWGnDqysseHXOgpemDPjcBG3KhBenzXh5zk5z + 4aU5J16cdeCFaQc+pwjAVjzLoP+MtIEecuDRPgvub9fjnkYt7m7Q0fS4g6Di1kYjbmkx4/ZuB44PefDQ + ZCwen0nEU1OJeHYyAS+Mx+HF4VhFAH5pMArPdvFcrSblPHfWa3E7z3Vrgxk31/McTXbc3R6Je+hQsv/v + 8R43jpOY3DkYi9uGE3DLWCquG8/CZYPp2NaegNV1MZiuiiapiMVIVTKGqzN4zCXoyWGwycCwPx1jhekk + iWmY9iVhOicOk9luTGS5MJIVEID7s6PRk0uSxv935yWjOz8V3YWp6ClKQXcxjyXpBDoZGKrKwkSjDzMt + RZjkcbg2g0ArgyAmRbHWwhgUpzBxuELhttEsdBiTGtmWEDQS0K7gIr7KH44XCLp+OuTCWzNevLcQh4+Y + PD9YjMI78y68Pe3EO6NO/HPYjneH7HhnyIJ/jFvw8epInNkei3P7E3D+shTgqgzgmgycvyoV5y5NwMl9 + 0Xh/I1+/aMLvRsPw/V41XmpW4T6Cq5vLQnA1wdoBOskWqf4tMGLRp8dcdhjmGJAWaGu5yDYz0O9hgr6M + gfyWcgZZAsjnmgz4AgP4V5v0+Brn6oucq4eZ2G8kiTiUG8T3BGHWR2DCwNhCwFubTdLGANTFADhaZMUc + yde6knBsK9Ngf5UWl1TzMypCsZ1JY0NhCFYXqDBHIDeeFYThTIJBgish+MMkctMiJpDcbyBJ2lbixM5i + B/b6LdiTr8Z+gtTr6zR4fNSK721PwV+vLcJH91Ti9CMlOP+UD+ef5vg8lQk8kQM8lAUcz8SZz6Ti1A2p + OH0sH3i2EfjuIPCHOZx/Yw54cxrnft2HU18rx4ePJ+CDuzx4+/oo/PbSOHx1SxQenLbhSKsaqzievRyf + hkI1ZA+mYqUFtBodRWrMkNjuI9G9a9KL5wlcv7vXiz/c4MXf7ojA3x+OxD+e8+KdVxPw3jcy8MEP83Di + N8U496dqnPtjOc7+PA9nvpuKj1/14B9PmPDmPeF481g4/npDCP5yNBh/O6LGGwc0eHuvFm/s0uN/tujw + 41Vh+Oq0Bk91huAOXpfsj/mZOs75aAg+v9uO397Pz/hGK87/tp/fbwB4rw/n3+vEuTcacPZXfuA79KNX + IjkWVo6VDXgyEueeSMCH96Xht1cn4iv0t6dWxOGh2RTcN5uFB1YV4sld1Xjx6ha8dkc/XrilG/ccrsXB + Ra6zaj3q6QtNBWFoKzJw3RBsM0CPVxI0EjAsVBqwttaM7XUGXNsShoeG9fjcvJGxyYzfHLDhrSul+teM + 92/Q4f3/FICf8uDjZ6Pw8QuxOPH5BHz0xSR8/FoKPvpyOk58JRMfvJaOD76UzufT8fEXU3HiC0k49XIi + Tj8fh7PPJOHs48n4+L54/PMWD966wYG3b3bh/btjcOoRriV+XzwdR4uhcSyedCjV0B/eEYY3r1Pjtxz3 + b24JwisrgxjPgvDwWBCemA/CSxtV+OYeLX58SIffHNXjz1fr8PZ1erx3kwkf3mLGx3fZ8fHDUTj1PK/l + teyASP16AT7+aTFO/rICp35ViTO/5Nz/vB5nftiIv3+pFD97NAMvXRWJm1dqAgKwtICmXTsQhOOzwfjc + Vgt+eFUK3nmgkuPRjHOv9AJfHQe+vwpnv70Sb744im8da8AdW5Kwrd+AMQKqLoItaR/UWUlSQZLSXMWk + Uit3EkWgq92Nnu5o9DO595OwDyqib6ByaHRA2kgypg55MTIQjdG+KIz2eDDB2L2CpGNjtw47SDQu6VHh + Gl7fHaNBeGw6CC9znH66R42/XRWGf96oxYljVpy+I5JrLh7/uiYBP9jJmD6mweFmxo6CICwwOU8zyU7F + qGkqTJIoLTIpr8s2YUu+EbuLDThC37q0KlTZJ/xSAsQjtJs7Q/Hkaju+dVki/vZgET5+uQynv+zH+W/S + r18vBX5YBPwoG/gpY8CP04EfZOH8t3Jw9sv5eP+zufjtzbH4wgYtHuU4P9AcjMeaTXiWeef5duYnApqn + Opij2m3KPvUPMM891mTEsyTKz7UxL7ZY8UyTGU8zNj7FPPZ0lxWPdZpxf4fhggAchkMk4SIAbypVYRPJ + 21KFHisJmgMCsOYTAbibcU8eDzEGjhby+5cwjoj4y3gp4q+IwAsiAtdqCZaNWM9rWk8Au7rBihmeUwTg + rowgtJDUtNNkP7HRAqk+kCoEPfOZHg2ZGpQRaOQROKYTaCXSkghE0lNCSRoC+5Lk54WgID+YwCNYEYBr + SXarpcqX81NHoNpI4NlIgNJAQNpIMNVA8FZPQtHAz5QfZodEAM7hPGbxejPVWE0Atp6fvZEAbb3fhNWM + CYtFOszyuj4VgANt8j4RgBn7W3nOLp5/mERulkBoide3m/8/XKDBUV7j0RwVLstV4bBPhQP5KkUA3sVx + 3kGTlttb/UHYydy0m7llL9+zj8B6r4/n4PXt5tjsJ0m6lID8ehLuu4oj8GAJ57rUhRdL7HitzIKvl4fj + 9doQ/LItBL/rD8Efx9V4Zy3X9RYDPtxtwon9JkX8PX3QiHM8nj9oAWinD5hw5pAZZy614sxRO05dZsOJ + S8yKAPz+ZsaE9Q6cWMd1sCEOJ7Zn4V+7ivCnbUX4/voCPDWWgitIQJZyNRgn6O9O06Aj18x4akZuAsFo + JEE7TUQ1t4cE0ENAGRNOkkZykmpAYaZBuYu3iONfxJwsAlct10tbiwl9UmEqYlC7HZ3NZrTV61BfGYq6 + CjUayolLiA1a6G/LAvBggxMTbVGYbvNgmvFhpt2JFT0OrBt0YuOIHWt69JhpUmG6IQhzjSqsbNNgLZ9b + 32fEhj4TNvab+diEtYwPCy0hWNESjDVtaqX6VwTg2dogzFTRmK/EZvl4VV0ISaAWWzos2NZtV4RgqQYO + mA1besTs2EJ8ubGT/t9h5jn5GTyu67ZiTZcFU03yQ5NaEYBXkIisIFkZbyYhKTSiguNZREIh+0GK+UkS + aoo4FrWR6GuLw0h3MmNbwIY649FNYN1BYN1Ry1hZbUVduRnVZUaa7JNNklZO0J1vJUHTwCPkhXMj1b8J + JM4pJGRpSptQDVJIsATop6XInb9GrjHzvwvAbRa0MW70DtpIlIhDR6xo5DjVNHNe2nUkUjaFTHX2RqKz + j2SsT+6sZdwmuRIBuKndgLoWLWoaQhSrblApJiJyS6cOPQMWDI9HYGo2GvOL8Tx6MTAUgdq6MJSWBaOI + pF1aKfuL1Sil30u7tjLGlPJKEx9bUFRoQna2Hl5vMKKjSIKiAgKw26NFZGQYXBGhcDhFBA+GnWazq3hU + 8XkVoqLlBxrZB1naP5PEMkZkkFRn5QQjm34qdz0rlRaMLYm0NK77rMwQ+BiL8rhm8/LDaWEoLAznmOlQ + xWtqIPlparShsY5ro9qAhmodmqrD0VIdRtOglY/baZ3MF+3054YSjgvxZSnXREkO1wVjbClzTjm/c5X8 + 0FkcEIDrGJNq8gPibwXJY1m2BuV8XJ6r5fv4t09EXx0qaHIs4/NiFXnSCtqAKsa42mIL6kTA4vHfKoCL + zbwOC82qtIgWa6q0obXGhc4m5t+WKPpgDNenCMHRgargrhj0dEYrIrAQv642t1IFPCwtuDo96O761LpI + 0ns63MzlkZ9Yd4frE+vpjGBej8XYcBKmpjIU6x9MRHdPXEAA7knlOdJRVRED2XPU4wiIv2Z9EGw8Rsle + 5MzLcmdyfo4GlaUG9BEzTE4kYHExHUtLmdiwMQPrN6ZgaVMi1m9KwvotyRcsFRu2pmFpexrW8O/F9QmY + XxOP2ZXxmJj3om/YQ181o6zaiNIqK0qIT6StVzbXVkKKDjZ+toi/WprOHHxB+NX8nwKwJjTQAlqn5ncI + C4JLr0KMJRRJDh1SnWIk/A6uTXsY0m00uwaZNg2yHfQ3lw75HgMKokX8lcpfxtdI/k8qgCPUigAslkXf + lspfEYB9bhUtGIVRzJUp9Ln8CPSXxqC/Ig5dZdFoynehPNOC7NhQpHiCEcvv43WqEBvBx+6Q/yUAe7yM + J7RIbwjcsWpEXDhKe0B3rLRAVSntCK28Bvnh8GJbFoBjk42IT7UgLtmsVANHerWwcZ1aL7JlAdhgFZOq + YBGI1TA55cdHDSwuNazS3t3J85K3igCc5A1FWrxG2bM2PyUcxdkGVPhtjI2MUXVOtNbb0dwoLSClAjgg + AJcWG1FYYICPOC7bF6iaiCXmkB9WpSV8cnKI8iONVEbI68pKrahmfG2scqGx3IkGvxX15Kl1GaGKCNyW + Lje7BaOH1psagn4+15cZiuE8AybIN6YrIzBbH4uZxnjycq6fIgtqcrleiSOK+HoffTg7kXGI+CLjPwRg + sXR+jtIakhhBhOAsaf1MHJOVETClVVy6HqnMuUkXWrtJJVesO0jZZ7g8W6eIQkP87ImGOObOZMx0JGGs + KRZ91YzbXPsdjAP9NcTSLcmKAFxfHMn8bUJaQhhSE7TISbchN8OJLM5hVqoJWWk6+PjZhfwe5eTtEmNa + yKk6uFa6eeylDdU4Md0YhRXMZau64rG2NwlLfYnY0J+k2MaBZGyibe5ftqSADSQGhOC+OObuGB69tGi+ + 9oINirlpHmwZ8GDroFT1SnVvNHYNxyhCr2IjcTzGYe9YfMDGE3hMxL7xROwZi+N7IwICcIsFc+R/k4zb + Y1U6jDKGD1UZMVBl4ZqRSlorx8mBvrpIfj/GSOYg2Z+93m9ALbGstOMvIb4szQhYSQb5d7oKJReZVAFX + 5xLbMKa3SgtVnqOlhPmC8b2KmLZChF/6TWDf30D1b3EKcyB9Qo7F/Pv/SQBu8AVucJY9OodqXRim7w8w + N/UR2w/ShokTxkppxAqTfDzJeDnB/DXJ65mjyTYoq4hJVjI/rPRbMEsfHeX6EAF4uNSBiRo3ZltiMNca + owjA860OHi3EUXosNodhTYua+F9auZIfdhILd4fgqp5Q3NAdhmP9Rtw9YMR9PUY81G/CkyMOPDfhxovT + 0XhmLBKPDFhxW3M4rmauvKI2FJfVanCAOHEDc+Ja4ugNZUHYWBVMjh6C7fVqxXY2hGEP8cLu6lBs5/+3 + lRBzEzNeUqXB5Q3k8s1W3EyMeAvtJvKSW8kRbyNvvJ7+dJjXvoO5emOVCWs4jyv4vaeYW0c5xqMc7yni + sIV8C1aVubG6mnitmPw0U4ccRQAOQoTzggDMWGWLDIXLq4M7QSrhjIilxXkZ6/5DAPYSF4vFRNOIVzyM + 2RGMZ/+XABwwAyKiDIr4e7EAnJ8VoQjAvfVpGGpIwXB9IgarvUoFcCvnS+JLaynXYhXx4gUBWKp/S2Rb + kSw9MbkRBZnMJYwVGYwVycRRScylKXFqZCZLBbCen2FCHrmuL4txku/JzZKOA1rmWr0iAJeX2FBe7mB+ + dikVYlUVNuXH3ppyPbGpCR019EXin27iORGAB6pU6CWm7uNR9tsdrlJ/WgFMDrm+2YKtbVZs67BiS6eV + eNpObO7AYrsLY8SkncSBDYXBxEPkfUWhaCrhOuJntRZr+byGayKEa4B8oSgMvaV6+j15ZkXYJwLwTH04 + 5prCMU88P9usJVfQYuwiAbiDPtRbrcJArQqD5AKDNUHK/0Z4nGwMor+HYo1sDzNiwYGFSFyxLgHXEVNc + vT4el6+Kxv4VHiwOmonzVMReUgHM79zmwiTj2hBjXx3XZWk+8SLXfXODYCFiKuKkni7GlW4LsRBj0EwM + 1q5Jw/qlbKyY59z2xSp7LFZyvRYQd0rlmFSLKpWjjAUiICqiYlaIUgEs7Z/TySlz5AZFrvMy5sCSMisK + 6N8+fnY240S6tIlmblEq0BKDkUYsnJZI7JHIOE9LSeDf9In0uBDkMZ9W59P3S91o9NvRyDjfzHjVXqSn + r+nQXapDH+dliGM8xHU3WhPG/MIxFgG4U6qADVjbpcPqTsaHTg3WdYbS5KbbEKxpD8Y6cop15GDrW9XY + 2h6O3eQNu9v02NxMft2kxpoOLTkc+VSfGasZQ9YwdqwekMcWzPczfpHfjfYZMDJkxuhkBMZnPRhdEY2x + VV4MrY7B8Ko4DCzEoH0iAnW9ZhTVBqOA/ldE3/PTNwuJyfMrmUP9xBD55APk9ImZYYqAJvv/igCcLN2G + uG7SfCZFCJa20AmMDzHJ5B6ci1gRc5iL03wGpDPfS0vYhBRiKBF/04jxMjRI5uuVIzFBEvN5Euds2RJF + kGfMl+1nRAhOZa7PlGp7Ygx/uRslVdFKhW5xRRTyOQ8ZeVaem7GCvE5p/8x4JKKvO44cnBbBtSxisGLM + /W5ymE8EYGIdOV9rdxYGx0swPFmKtp4slNbGIKvQjthULV+n4blDeM4QJKRbkJnvRmq2g3hNo+wNLCKw + ndgwIoaYkPjQTRNs6GZslOrNaF6LVCkGuk4J7wwmPlEjNzsEBbnkdj75LYf5keOdx+ey6dPZ9Occjlc+ + x6mIY1/M8fZLzEkl7qGfSqV6UkxAAM7md/Txb3+8Ci3EHv1F9IMSI6aLDZhnTptnXFgoCcNMcSim/cGY + LOL69aswXcY4U6fHGmXfehfWk4uvbDGR94djvJJxvzQI44wDs9XBWNlAv5TqX3LYtcwzizUqzIswzFiw + QarVu4NxYFiDoxPhuGYqDFeOBuGKwSBc3x+EOyc0eHjRgidXOfHUSgceXbDj/ikr7piy4fppFy6bcWPP + lAebJqIwN+xGP/FHXSMxBK+tvJFxtdmOyiY7H9tQ1kCsSitknsoiJ0zLZ3wu0sDHfF5UZYefWCufuC6L + eTo1W0RfrmOOXyrxnojBWblm5BU6UEy/kb14FRG40IX8IgcKi5woKrCS0/Lc8j7mPeG7F5tUpGdlh6KY + sb6yKhIV5ED5fH06/VpuIJG2z0nS4lw6aSWpEUOfE1HXHU2erVTyBkTgnFw7cvOcSM+yMIYZmCPDFOHX + Qx8Ri6LviPgb7VUjXmJQupbXblL20i0l5pYK4Ari9osF4A5yPbH2rii0kXu2tEWiocXBseR4Nln4Oiua + Woj9mfubO+xo6XCgtcv+/yoA5xfr6fcXbqaQ37aiRAAOVraLSpHfTuiTAQtR9ukuLnWipiEW9U0JqKrz + orwqCkXMiyIApzKWSFv4BL42jTEil5whhyY3dcr2LiL+Smtl2WNXKoHTpOqW3EN+l0ljHk5LZvxhbE74 + fxGAYy6IwCIAK8Y1smzLAnCmVH2nmxS7WABOiA9BPOcqQV4rgrGIwImMUQlcu1y/ybKG5THnOitFjUJ+ + 5ypii8Za8qFa6ahkUm4Gb5LOcfRVEYUDAnAE/PkaVJdxjU3m4ciBfgT9+lIffnIgHd/eHovX1kXgc1M6 + PD2qwXOTWnxuQo9nR8Lw1EAonhoOw7NjegJEG16acSr24rQDz09YaRaCRhPNiqdH7HhyyI5H+0y4n8nj + vmYdzYh7mw04zuMdBKi3tplxa6cNx/qcuHvEgwfGYvDoqBdPjMTiuZEYvDDsDQjAtM/2RuAJAo/7mcCO + txhwrMWIW+lMNzWYcEuzDXe2ReA4ne84g8ddvbRBL+4kybh9LAm3TWfi5rlCXDmeh22dqVisjcVIiQcD + fgK14gT0lqTSMglOshm0sjFYmI2R/GyM52diJieVloDpzChMEtz9mwCcExCAO3NT0ZGfijaxgmS0FaYQ + 7KSglY9bChLQ7k9Ef3k6hmuyMFrH8zbmYqQ+i2ArE10lCSQWDsRHkMRb1XCZ1HAb6HAmFSrsQRils+8j + iHi0xojv9rjwx/E4vDOTiH/NJ+Cfc168ORWJv0648OaQE28N2PF2nw1vMKG+NWjEBwsunNoUgzO7YnH2 + YBLOX5aGc0fTcPrSZJw6EI8PdkbhnSU7/jJvwo85t6+1q/A4A+mt/iBcVaDCEQK4vaVmbCFRXskENc9A + Np0eihkmhlnaKpLhDQQt23ODcEkegyyB/gN1WjzbbMbnaa81mfDVBiO+0GjEE3U63FZJAuDn6xksF/LC + FRLezoRSl21Ac7YZXT4LhplcJ0neFhhMVxeFYHNpKLbRNvLx2nwVFpmkFvJUmBQBJJ1AMI3gkNbDgNjH + JD1KsDVLwrW2yIzNPNe2Iit2EmTt4Pv2igDcqMVT05H4ycE8vHNrNU48UINTj5QCz/iBz4rImwc8RXs4 + F7g7C2c+k4KT1yfj7F2FwHONwLf6gF9PAX8UmwR+1ouTX6rAh4+m4v07vXj7hnj85tIkfGljNO4Zt2N/ + o7QxDkI3k10dv0NZbohCSOvytOgoCMMoE+GmOg2u6jDR/614da0FPz5ow2+uNuLPxyx485FIvPVsDN55 + JQnvfiMD7/8wFyd/XYIzvy3GqZ/k4OS3kvDB5yPxzhNGvHGvBm/cocFfbwjGX46q8LcjIXjjoBpv7Q/H + G3v0+N2WcHx/RQheHQnB/XUcC5K4yzh3VxRzzruD8NnNBvyC3/nDrzYBvx8E/j4MfMjjhz3A2804Ly2n + v58OvBYFvGDneDg4Znz8TDI+fCAVv7smAV/dFotnFuPwxGIWk20eHllXimf31ePV67rw1TuH8MJnenD8 + QDX2zaaTCISjhnPYQGD8nwLwTKUFiwxg6+tt2ENfuoGg9eERE56bM+Era0341X473rzShn/dYKaF473/ + IgB/+LQbHz4XjY9fisNHr8QrLbVPfCEFH38hFR+8nIT3X0zABy/G46MX43DixWic+lwUTn82Euef+f9R + 9pfxkV1X1jhcUjGjSqUSMzNLJagSVEklZlZL6m41c7fdhja3IWbmmNlutzkOODwBByaTZAKTZJLMhI3t + NrvXu/YtybGTPP/neT/s371Ft+49Z5+917rrnn1S8dET6Xjv/jS8dWcy3ridx7knDe89nI1Tx/J53XnA + s9nAM2nc+tkGCfjwYRtO3mnCX68z4tcXm/DNPfF4YSkOD02ocMeACncThDyxosJLe434/pls5wtM+O+L + jfjT5Sa8dpUZr19rwYlbbDhxbyLePibnWoQTXy3BiW+X4+S/1+C9nzbjg/9swYc/bcNHP+7Ahz/swt9e + asRPHy7EC5d5ccNmDc4bic0AFgH4Kv7fnYsqPL3Hhu9fnIM/fzaAE4914/1nh4EvzeCjry7j5BcW8Yv7 + B/D8pQ24cjUFW3sNGKWvRjj+w416dBG0dXL8B5sdCLbZ0dXpQg8JuqwJOcg4Ozjkw+hIMiZGCejH0jCl + bFNJmJIxPpyE8QEvxvsSMEnyuNBjw+aICbsiepxGoHY+z/HqIYKyMRUem1XhO/vj8PtL9Hj1ahPevtmO + d29OwPu3pOHNazLwn+cw9m/U4lpe30UkgGfy/I7UGXGE4PLsBgOOBIx834UrIj5cT9Bx84gf1/ZacSXB + 4uX080tJFi+h3U5i8vz+VPz42jK88ngL3nmRbfoVWduaY1tm+n6vAvh+AfDv7N8fMF6+nIcPOebef6kM + rz9RhP+6PgVf2WtgblPh8QENnmRee4bg5dneBDzFrQjAMgv4wYgdjzC/PUlw89wgcym3z/TQIi4cJ7B9 + Mur4uwDMfBYTgLU4v01ulqiwj3F0LwnyzoBJEYA38FpnZNarCMBFawIwx+0U4+GclNJp1mO5WYeNAQM2 + MsYuNamx3Mg42azFlqAJO7rtBMyuNQHYpAjAg8UqyDrAPQTxQ4zhYxUxUXWIcbmnnOSS5EnWcikmaMxJ + it2wlDWJhJgWkxyVlcSjXEq/8jxqSR5aeX4dpRq0Mi+085idtDC/GyFoCtMizBVhWhdjtKz/O8CYPck4 + OMN4PUeStUSStYnga3u5EbuqLdilzHqwYLXWiKUaAxZr1gVgElqZDb0uALM9eni8QZ7vVKEe8/k6bCap + OVCmxZEKDS7kd46WMZfRFAGYueMsxmIRgA8x7u1hDNzJ3LWngu1eHof9ZWrsZ77dx/PaQ7C5l9d6gCDx + rGITLq1y4+ZGH+5sSsR99W48SiD5dIMFn2/S4xttGnw/osaPR7T45Sxj8BYz/rLHhFdOM+NNxt53z7Xi + /fPM+OA8K3OxTRGC3+f+BxdY8MFFDnxwCePWUSdOnmPDG/zNiX2MJ7tceGenF+/vSsWH+/Pw3mmVPF4N + /mt/Lb60VEQM5MURkv1tzHeTxdJ/DvRWuFBHgJpJgCwlhj8pAGemGlCUSfKWZ0ZNiaxba2TfaVBFv6qW + mY417LtWA6JhB0aiXgwQV/V22BBuM6G9UY22hngE6Zuh+jh00e96FAHYjsnuRCz0pdKSMdfjxSx/L+N9 + 44Adq0NWLPXIel0qzImQK7N5e7TYOmDGDn62k/hw57AV2wbN2NJP/+3VYDUamyW8ParDljCxBn+3QAK4 + bvNNPA5tqZnfJUnc0W3Cvn4b9vP/9g/YcGCQuZ/ja++AA7v6XNjJ8baDWFME4K19dmwfdGHLIGNSt4F4 + TKsIwFuG/dg6moHFHj8GZAZQjQ1BWdc3T41KjoO6Ig2CdTalFO9obzpmR3IwP5an2NyYCMEZGO1JwhDb + Ihp0orOFv+fYbW+OrcvS0eZFEwmhzBBLJ0lOIXnJILYTMB8r7aNXtkIwpPyzlA0tl5uBVf8sAEf6regf + tmF8xk1zondQj85eHSKDVkSH3SRTHkRIqPqIF6O0gVHG6zEf+oizu0QADutJiIgvg2IqtNBa2T/hqB4D + I1aME7svLPqxwjy+QdbpmvYhEjajvV2HJsaWxkYNAi16tIcsCIaYH3he7VJmudWJpkYHqogV01Lj4U8i + 2fRrkJwkorc+VlIxUYsEb7xibpmt41IpW79fTRIlayPpkVsg5DSOZFNIrooElbGGY7mYMUvWN1IE4AzG + Irk5wXFawTFbJsaxLlYpNzHqdGgJmNEpbdbtIgHilucaDlnRw/OOEo+K9ZPcD3SYMdJB/NluRrfMAmZ+ + aWZMkNkiAcYKsdb6eLTR5z8pALdWGBAoFQHYiEZuY2WfTagrNaCRcaxREX5N3Bfja1pzpVlZN7qV+DTI + fg2RwMv2YwF4fUtfEzF4fYZwZzNJXCtzb0ciBruTYgLwmo32pWOM/jcxkomh/lRFUJOSTyIKjwyQiEcS + 0Bdl//f50E/r60vEAPlSH8dqX4+sEcTPpbT4mvUzn40MkYiPZWJmJk+xsbGsTwjAeRgaLCYmyEBxvh0p + 0pf2NQGY5nWyP70qZMnDE4zrDdUGHjcRE+OpWFrMwpbVXGzfSduVjW27M7CdtmNPJo37fG/73hxso63u + ycLK9nRs2JKGhU1pmF+RGwPpiDKntnd70NIhNyE8qGlyo7jChux8MzyJahitKhhtKphs/w8CsJhaBX28 + CmYtz9+oQqI1HmkuEnvFdMh2aZFFbpbtoDnVyLOrUeDSoMSjR0miHuU+A0qTjCjmvgjAZUl6lJHPxQRg + Nd+LQ6U/HjWpxP5ZOsWaMnXoKLKScyZjJpRLTpiP8WAOeuqT0VrmRmkm40CKRlnXMk3E30QNc7AWGcka + pIkp5Z/lBp+WpoEvJR6JNCkT6E2RMmlyI1KjiL92EejZH/9nAdiOvJIE5BZ5kJHH/syywsNrcNM8foOy + L2v8rovAsh6ww6OFU4RfXruYiL9iHp6nLDugCMAZWhRlxwTg6gKjcuOwscqGljorultd6Ja15kKMtV2M + V12JCLW60VBnRjXzv9yMKSm38pyMPD8t0nLk4RC1sqaZrLcoM27le40cP60BD2Msf0/u0E7O18bfthfr + ESJXDRNT9BRolXVCB/h6qFBH7KPHcLkFE7UuzDQzd4XSsRzOwWIkB6MtSQjX2NHG2N9cwvzI30gZ5RIR + frn9pACcR2yg3DBiboiVkIsJwlKiWko/FxXRCs18X8riW5CdY8C6ACylPMuIj1rKzYiS90y0J2OhKwMr + /XlY6svGTHcaJoI+jPO6xtp9mOhIxVR3NgZakxGosKO2xIbSXBOKcy2oZN+J8FRR5EZFsVMRh2rZdk3M + Ye2NjH2tHO8hxoyQn8fxY5Lb2S4/lnsysLU/l3k4DztH87FrNBfrM35F/P20ALxmY9nYK7OBhzOxe0gE + 4HRaKt8TExFYtsmK7Sc3ODCWgoMc94cm03CY9vGMX9qZ0xk4MpdNy8GR+RycM5eHc+bzcGQ2h79LignA + xCArjNsbGLcXgjbMBu2YDjowSbw/0ebGKG0smIDxkI9t41bE23CjTZntHFIEYInJOgRKYlUamkq0qGe/ + 1RNzrltTMeN6pR7d9ewL/j4acCoCsCwFESjVKp+LANzAvq8nfq1j3qnLiVesgfhABOFG+kbrvxSADcpa + wlGez0hLAmY6fJjpZCxssWNMxN+ADdMBO2ab7ZhrcWJRjK/nGs2YY46R6jdSrnwzc8Ym+vtG9ukibbpS + BGAa+3e2LUkpAS0C8Ao50FLETX+2YbnbiJUuYqRIPHb2xuFgXzzOHtTgkhEDLh8x4pohE24dteGOEQs+ + GzXinj4jHh6249i4B09PJ+HpqWQcm0zCfUMu3NJjx3XkLld0W3BhuxF7yT22M0eKCLyNOHp3cxx2B+IV + 20ssfFpIj9Pb9TjI1/uJGQ+Ti5zTZsBFXTZczhxz3UASbuxPIl/jdjgFN4ym44rBZJzT5cbBdjv2tDux + gzlvlWNjudKCqTwNRpnzJ7M1mCsiJ6ryku+kY7o+CV0ldpQxBmb8kwCshjfNoKyLmULcm54hpZ7/WQBO + SdYp5md8TVbW/FXHxN9/EIC9/ygA00T8FSFYBODsTwjAQyHG808IwD3VdvoE+TQtzBg1oMwA9pNje9Fe + 7WRstKC60IiqIrNS5lkEYBFVshnTsxjTc3l9ylrqIgAXW1HGNpAHPUoKmHPIe8rp3xWlIgDb0MjjN9Iv + WjnuQxz3XcQMclM4HHKhvysBoxxT411WxhWdIvhOtKsxQn48FIjNCB5tisMo+dEU+22pRaus/3tavweH + Bz04NOTBAWLK3czBO4aSsEQcMcZx2dtADFodj1CVGl21OnTXanmtxFLEY8HiOHSQI/bW6JU1r2MCsO7v + M4BDxP0Rk/LAgqxRu0wTAXiU5yTiby9ttEONyU6xeMYvFc+d50fcOt+twkovee6QEQeIhc/e6MMlIgDv + z8eVxBCX7kzHuVvTsX1WrpvnJEvdtJEv0e8Wx/MwQewka51WcYzXVxvJfwQveoihnIiSwwwSa4+NObBx + IzHKTnlorQKbNhdhjP7a2eFBoMmKSvIvWTtSHk6UmcAfC8DkpCL+5vDYIv6WksdWN9lQxzHe0OxAbYMN + FZUmYlbiB1oRY5OSV5SHjbTEVgaaiftrRl5XLDPDmVOrmE9byEc76hLQVsl8RWwpFQy6q6TUPNu5yYSx + ZiOmW6StybNbtVjo0JN7WbCVHGBrn5lbPVaFb/WosYUxYiv5q9g28rUdPTrs7NFjF+1AjwmnRSw4SA6w + q1OHrR3yGyP5mhWrtM3kcVsZNzYPObCJtjjI8Ro1YbTfhPExOzmKB5OLPkxuTMbU5hQMLfswuCEJAwtJ + iEwlIDgUE4CrWuNQ3apBrSIA61HVolME4MJqHfLYPnnE0fmlFuSXWBUBWGb8Zhcbkc9cXlzlQBH5b26p + CZnM8RnM0VnkxPn8TVG1DcW0AubabOKAbOZ0mQGYT/4r4pzs54jAzPidxXyQzXyeU6zlsfh7mT0s4rDk + fG6lrKwIwA2BZDS1p6FRrDVVEYALK51IEwE4NTb79+8CsFqZwetn7k/OJC+iifi7LgD7M9cFYD96h0ox + MdeI0ekacrgiNDPvVzQkIItxIY39Lw/1CbZLzxNh0aMIwR5yLJNgM8F5xF6eZDUS+J6X5pOy0MSDSgnf + NQFYykBninBLXlvInFbC8VlaRKxOvlXGbTlfl+TzM34uS1+U5cWjkjGmknimlu1fXWyKCcD8/B8FYJkw + UM/r6WW7j5HDzDXasdDAeM1xv4FxYZH9OV8br8z8naXN1X9CAO5xYvdAIvYyruzs82CVOWyFPrvYpsZC + Wzw2dmixlX63s8/CfGbG9m49NtNvllvWBeB4cn8Nzp5knpnR49I5HS6aVOH8ERWODqlwzbQad67Ycd9m + Dx6k3bPsxu1zzGuzdlw85cCZky7sHndi06gLU4Pk1b0WtHYaUR80oqHDijpyyUZaA/FIQ8ipzAKWbSV5 + ZnkjY3eAfRhyI9DlQzPjrsJLiANy6Ye5xJyF9LVC8sMC+m25rN1e70VTIAVNLWkfi8C1DYmKKNzAz6rF + pwsMyozfTPrJumWwjYUDS8WAavLIJmLYQBO/zzggD5hn8TtyjyFLBMM8/jctnb4nAnCiVIUj/vSnxSOD + PCSv0KqUgy4osvN78pCUCMD00TUB2M/8IyaVubKJNwuJO+Xc/y4AMwb+gwDcO5DMrR8Rcs6wzPwlvwx2 + EZeTY7d3EpPS1oXgLvZ5d6/rXwvAk35FAI4w34gAXN3A8UvflBLQigDM65AZyjKjuYA5s7CIbSzG9q6o + tqI5QJ7YkYZgZwbPLyYA1zR5UM4cmcc4ICXhc+jHRYwZUnFIrITcXdZeFtFXZv4W0PdlNrCUW1aMPEQe + xMlnLhYBWBGBs2SNXxGAY+JvyscCsJTP/gcBmONETMqxZ4kALPGduVzE3xL2wacEYB4vg2M3g32VKUK3 + WEZMEM5Jl9n3MRFYZuEX5ahRSR9rrpMJB06aDW30y1AbsTDxlCICdySg5x8E4GURgM8dher7Z+Tim/tS + 8flVJ56c0+OR0Tg8xIFzbEqL4zMGPD6mwSNDcXxfjccn9Hh+wYUXRfylPTfvxpPTNoJFKx6fNOPxKRu/ + 48CjY048NGzBvUw29zCJ3Mskcg8H1V29NtwedeDmqAjANA6228e9uGsiEfcT+D846sexMT+eHk/G85Mp + eH4qFc/y9eMjXjzA7342asOt8ls6z3XyNGGPG7fQ0W7t8+GW/kTcMujFLRMpuGU6HTfNZuPGDcW4ZUsz + PrPYiIODJSQUWRipZQKqTkFfTSb6avNoBeivK8ZwbRnGq8sxVVWG2coSbCgrwobSbCwWp2C+2PcPAnAm + BsuzES3PR09lPsKVBQT/ueiqzkO4Np/APxeh8gyCnzSCH/5noJCAqwRz3RUkAWUkA6V8Lw9tJT7kEGCK + AOy2MnCbmYQscahzxmGAjr6LjndLnRFf7E3AT8bT8dvZXPyBxOkP87KfjF9NJuLXBOm/7nfgv/ts+A3b + +3cE968suHFyux/vHkjDe2dk4/1zc/He+Xk4eSQLb52RgVcPJuMP2zz4rw02/NuQBs90qXBnswpXVjFo + lqlwVpURp9U7sLc+ASsEqIsktQsEJosEOYvZDLrc7mDS2F+qwtn8/qUkA3e06vEoB/hzXQ58kYP8a2E3 + Xur14HjUgzu7nbiizYozSXy2VBsww+DYz4DYycAYLrOinwl8rNaJKXlyqEpLkB+P1TqCkho1NlXEsy+Y + MBgAZkvjMcFEJbN+h2n9BFwyk22AJrOB58v12MLAuKvOgX3cHqyxYH85SUi1CleRwDy+nIb/uKAOf7u1 + AyfvC+GdBwM4dTwAPN1Ia4iJwQ9WKzOA37suByevysIHd1YBT4WArw8AP54Gfj4Ts+8N4u0XAnjzwSK8 + emsW/nBlNv6Tbfz5HWm4ZZKAOaTDQh2BLJNdqEYDKUnVxOsNkQhECf7GKuKwWstza4zH9b06PD6rw9d2 + 6/CjI1r8+moz/ucON/74YBL+9GQq/vbFHLz6b4U4+aNKvPvTKrzzwxK8/c0svPFiIv72uAV/vFuLP96m + jQnAl8bhDxdp8MfzNEoZ6D8dMeK/9mvx3Y0qvCCzQ5k0Ly9nPxercKEI4xEVnthpwE/vKMSJr3UBv5kA + XpkC3qa9M8b9Hr7XDPA/8Y004HMJwPOJwLOpbJc8vHVfHn55WTpe2uvHY0vJeGRjER5ercYju5rxzLnd + +PL1o/j6HbN45uoh3Hy4BYfow4NScqRAhWCJPB1qVQTgsWYPZlpcJB4OrLaRCHa6cYQJ4jqCxPsm7Hhi + wYovrVrw07Pc+MOlHrx2jROvX2v8WAB++17XmgCcpAjAJ4778RbP8e3n02OzgV/I4n4WTjydjjefTMGJ + p/x4m/buU1588HQCPjzuAY4n4sMnkvHeg/zsXv7+3mS8+3AWPjomwm8hr532Yg5N2sHPdvACx5x49z47 + Xr/Nif+9yoXv7tMxRqrwAIHHzRxXt/eq8NCUCp/fqsd3Dprx47MN+NV5evzhYgNeuZx2lRGv3WjG63d5 + 8OZjaXjzhVy8/lIh3vhmCU68zP7+j0Z88OMWfPgfbTj17yF89P0uvPqlJvzsoUK8eFkCbl6Nx0Xs13Oi + 7FOazAC+fY7xe5sF3zo3A7+7uQGv3t+Fd44N4f3np9kmM/jDo2P4t2vace/BIpw748WGkJYxUIXuOhK2 + Oh2CTLjtjUzYzUwq7TKbyo5IRICRE/0EaH39bgwOMBYO+WKCL7djwz6McDvS78UQ4/JQjwsjYTumSDgX + O0jyOnQkESocJnG7sIegrE+Fe8fj8I2dKvz2Qj3+dqUJJ26w4uSNbM+bkvDGNYxvF3jwhd1aPLAhHrcz + /9zcr8edI27cNe5jznDj3mkPHppP5bjOwlOrebQc3E3icXNUi2v5P5e3sT0IFO+bduMrZ+bjv25twBtP + BfHO55vxwdfWBODvSLnnco7nfEX8xfez8dF3GS+/ls/vleBvD9O/r/Hja/v0eHZWhWdGtHh2wIzn+5x4 + LurCkxEHHou48FCPAw9GbHiCbfPMUCKeZ3s8owjATpoLT/XYGQtFAHYoAvA9BLIiAF/VpcX5JLwxAXit + BPS6AFxvwkzN2gzgNQF4rEJKP2sInnVY4ndXmkX8FdMr6wBvYB8u0TYxHm9T1gN2YmunAxtaScpI1EUA + 7mPslPLJfYVxGCzVMBZzHJZp0SEzJhhLKwgy84UskMyk0OTGZS7fkyfjSvn7Mp5HGc+phtZGQCGl7mQG + cIjAKkzw1JPL4+VruOU+3+8lKRaxNipxWwTgQjVmSKzm+P4G2grJ71YSrh0VRuyoMjOGm7FaY8SyiMB1 + ZmVGxDRzkgjA49UkufJUOdsjStI2xN9OEvzN8T9XeH77SLrPKInDebQLeZ4XMneIAHwuc8oRko7D9cxb + jMnb2Y5beP5b+Z1tYkXyYJMKqzyfVeaVLWyHbQSA+/L1OFJmxxUk3DcQ/N5KEnhntRn3k9Q/Vq/F8y0a + fLVbg+8O6fBj4qXfbrHif/aY8efTTHj9LBPePd+K9y4wM//SzjPjfW7f5ev3LzLh/aM2vH+xDe9eZMPJ + cyx483BMAH5rpwPv7PTg/R0+fLQ7Ax8dKMZbp1Xgjwer8fJqCR4aSMLlLVYc4jnMl+gwwfw5UOlBs9xs + TopT+izJ92kBOC/DiBJZA7jUqswQqqnQopLXLQSwjH1ay/Zpow9FRCxjru6gb0nZOFk7LFATh1bm+Dbm + i2A1+7hBh8HWmAA8F02h+THd7cZkpxVTJE7zEQMWI3rMdsYp5dpmSNJEAN6oCMAmbJOn0IcsMfG3z4DV + qB6bmANX+7TYzjGuCMARNZZDzOlrwq8IwHONJI+MUzPM5wvMm5ta1dgZMWFP1IJdPWYSQTN29lixg3hz + a9iKbRyPIv6KbSF23LYmAG/gb2Y6RQA2Y+uID9vH0rHclwIp0TjZkYTBgBdBEv76Ii0aStRKSclImwuD + YR8mB9MwM5yBmZFMzI1lYW40A5MkPaM9CRjoJNgW4N3K9muRpzBd6A6SxLS4UUufKeBYyCJJljLGOVkE + 8gTvUl59XQCOCcIGlAvZ/lcCcJ8VfUNWjE46FQG4f8REwmXk1oHoiAvhPjs6emz8ngsRKQlNbNg/ksAt + SRpxeDuvuZmxppEYoInbAPumvZPjk30wSLw+xuPOLyZheWMqlpZTMTOTxFhvRVeYvhAkcWjXo7PbSoLn + RA9xXZhxvotkWBGBAw5eo00RgKUEeZKPhM0r+1okJWqUm6tevvYmxCmlsN0ulbIvawbn5hpI4EiI5Kl9 + 4rwC+mMJMUol/a6qSo3y8ngUc3zmsf1kdmkhx2gZv1dOPFhMH163Mo71WmLG5iY9QkEbwsSiEZlpyG0f + MelAl51mVWyky4ZRxu5x5rVR7sts4O5m9nV9PNoZP2Wt4LYG2ao5DrQQAbi9Vo924lcp+Syzf5uJ5xoY + t8TqabUkoPVlBsXWhd+PX8vMYGI/EYBFrAoS83xSAP5Ha6+LWWezG2EROIKJ6OtMxHAkGcM9KRjhdryP + hHkoC1OjuZgYzsZglASc/SGzgAd7khAhhor2JCLa60NfNAnRPi/6e73oIzGPRqSyh/tT1hvmb0neRwdT + MTmehcmJHIzSz2MCsMwEzsPQUDE6Q9koL3IhjX2b6FTBZYmZx05yzn5NT47NnKyt0CnnILhgbiYVKyuZ + 2Lo1C1u2Z2DLjlRaCrbuTMOWndzfLtsMrO7IwMYdIv6mYn5TMuZWuCVun17IxMhEGsL9yQh2JykzgCvZ + lgWlZmTnSUlOLSz2uDUBeF381cFoFWFY/SkBWKNfKwOt5n5cTAi28n0nv+Oza+B3aJDi0CLVGY9UHjNN + jMfNsKqQzf088rV8jwZFCVpF/BUr9elR5jco2/Xyz+V+cjn6dwuJfUepTbFgAXlPiWDeREyzHWfD+RgP + 5aC3KRWt5R6UZpqQm6JHpk+NNJ+Ivxpk8NoyUnRIpykCcKpOucHgS5GbffFIYMx3ccy5xZLjlTLPdq8K + NndMAHZ4Pz0L+JMCcEFZIo08tMiDzDwXktIsSExle6YYkcDrWV8PeF0AdvNaPUlGOMVEAE5QwyEz+9cE + 4GT+f06GDkXZbIv8mLAhAnB9uRlNVRalTL4iAHN8ys2J7k4P2gKyZqUZlcz9pRVys4l9WmBEWjb7ITMe + sj6ZlHDMJbaQ0njVVbHy+FLqtE3KeAYSlBsgzRVmtBQb0FaoRaeUWC4yECcYiRN06CNG6ONnA+UWDFeT + bzQkYLo1BYvd2dgYLcRsF/28ORGd1Yy3FTxWiQlVxBbrArDEHCk9L7OQYyazttTI5eexdQRjM4OL+L9F + clNKZv+yr3PyTMiUm0WZGmVdR7mBU0ku3cr2kFmBYy0cGx2pWO7NwmJPOma7U5k36fed3HJ/Isjc0p6M + cK0LtQUGZQmHCvp7WZ4V1aVe1JQlKdvqMg9zuhON1U7GLSe6WjjGQ34Md6dgMszjRtKxQNvQm47VgWzs + GC7E7tFi7B4rxK7RPOwekRm+/68CcHrMhlP5WsTgZEUM3jOaiv0jaYodHE+nZeC0iUwcnsyAMvN3TfyV + mb8iAJ8zn6sIv+fO5+PchXwcITc8MJaMHf0urIZdWGY+XWLsXup0YYFxZI42TX+ZDHowxlwtAvBYyIeh + Vk9MAK63orPWwhhtWhOAiV8YgwOMvyICx2YB/10AbizWIlRl4u/IyZudigAcZsxVBOASEYDj0VDAMcx+ + ryUmrCEerGX+qaMpAjCtif3eWiyCl6wBvC7+ihkVAbivXtb+9bJPk3j+iZhknhQBeKrZhhnuz9LmGd+X + 2jw0F7GOBXO1JmzgNSzx9yv06RWOm5UaOxaYF6YqrZiopjF/zLQkYp6+siGcjKVur1Kad5m5balbZlZq + FAy1q0+NQ4NaHBkx4pJxK64ct+OaUStuHXPgtkEbbo8Y8VnitQf7bXh02I3jE0l4djoNT02n49ExP+4a + TMTNzBtXhR24oN2EA7Vx2MW8vIO2jXlSROCtjXGK7Qiosa/dgAO0vQEtZEmb08hNzg6acQHz8CU9XlxJ + rHQN7aoBGreX9yfhIuaj04ib9hAz7WJbbAt4sKnBjeUqByZytBhKJ29Ii8cox9FUCTFKPbFabTK6ytyo + YKzJErwhs+AY72RZCYlxCWl6+Ih5/bS0dNM/C8AphrWSz5qPTTCKz8utNyb+fiwAyyxgZf3fWAnojwVg + vxnJKbKGsA0VxV60VCcj2pKF4fYsjLWlYziQpAjAXezDYBlzADHdQEsyevl+R70HrZV2jmcTx7OUXDVw + TOs+FoBF/M1iHs1NUysCcBljiYjAxbJ2YK6epmFc0ikl56UMdG2VrAPsWBOAvejs8qMn7GdO96E/TNxA + TDDVl4gZcviZbjPm5CFIcnIRW4eIrQeIdQbIiwaJ88e5XSSX3B4y4fBgAs4aTsThkUScNpqEfcTLOzne + N7HvpjguhwIWRGS2b6Wa16dGqDwO7cRireQVco+noywOUXLEwTo9RhoMGGvWYZo8Y65Nj4WgHhtltnqP + BRt7LYyBZp6ThuMlDv2BmI2TH091a8kvuCWfmCAnmOogF4jEEbPrsHXUjINzbpy90Y+jxA5XiAC8PxeX + 7s3CBbtzsG8lBbPkGdEgeW6nGVODHC8TeQp2amHOKeM5VpWT4zRbEGwnZieHCXeZiJdMGBm1YXlTOrbt + KsaOvRVY2VSIfnKvNuavenLzUvJmyQlKdRry6XUBOGdNAJZZwMXkrBX1statEw0c43XNDlQxRonwW8L4 + VFLKXEneLbmjIF+tLB9QJjPbGedLC/5u0v9l7Hup4NTMOB8g52tkjpLqBi3k8O1lavqZRikvP9lCztzG + Pm7RYbFNh5Uuciy28Xa28TZypC1hHTZ3kz+xPTd1xGFzRzy2dGnIm3TkUeRTYuRI+7tNONhlwb5OE3YQ + /28OabCJ720SsZ6fS39tjNqxRG611G/HPGPION8fYDwZJE8ZGndiZNaLsQ0+jCz7EJ0hL5l2IjLlQteo + E63kFjVBNSpb4mlqVLXq1gRg4inibZlZWUhMUEjfLiq3Euv9XQDOZJ4V0bdQZj9yHP1dGBYBlzyCsbiY + MbOEVsD4mc0ckCPiL2NzAXF4fhlxFr+XxZyQUUgeQpNy0yIIy1quRSIg8zci/ooVrwnAMutXBGBFBG4T + kdbHY9r/pQDsy1AjndgvndwuNUdKVMcE4PUS0H4R84hH6okBIgOFGJmqxsBYGbr78hDoTEF1s5fnaEVG + vgkpWXpiM61S4UXW//Vzayd/MhJ/mxnzbPxfB/9XYp8nkfGP+FFwYeKaYBYTgemnjKUyU1T8ViorFdJn + lbK3tMJc7vOzPJ6XlHn+WACmT9YSk1USP5UqAnAMx8QEYPqszExfE4AjbNeRGua2BjvmGuiHdQbM12jI + 2dWYqo7DNLn7NGPMTH0cFgL0pw7y9F6XIgDvG/ZjL23ngAdb5UHyLiOWQlr6nAHb+yzEGw7sos9so39t + 6lAr1cFkaaidvRrsHdLjjEkTzp/W4+isDudOqHDWkApHBlS4eDweN2yw4o7NCbh71Yvbl924fs6Oz0ya + +R0D9pBDr5ADT/caMETf76Z/t/K/6zvMqA1ZaDbUEa+K1QcdigAsVtfO+M281RBizI0kIhhNQXs4DbXE + oyIA53Fs55IXFtKXxH+K2ddVtW7UNyWRe4swmYaGQBrqGv00H3l5CpoDKair4e8LiR3ZztmfMLl3kEkc + LA8cSqWchkaeh5QkJ+aThw5FAJZlkqTMsIi/srRUZraUAY89CCAisGxFPM2Q6gKFHE8FNmTTn9IyhFfE + yj6LvyTSd3zkLyIM5xBrSqnoCuLm/5sAHOlLQjc5poi/oW4X2jsdaGH7tbGfxUQEDhLTdZJ7iwi8LgDL + rN9xcsTx2TQMTTBWjCSge5DH5zFEAM4l3/fz+tZLQEtZ5WzmzCLyi2KO+xJy8TJir1qO0UBLEtqDKQiG + UrlNZbv6UdPgQhnbLId4LZu+LTOGixk/qhkfavibCsYEqeAjM39FAJb7DHLPM4f/KUJrriK4MhZkGRUR + OD83VgY6LU2D1LTYGsDJa6K5bD9eB3hNAJY+WReAlf7JZYxiTF8XgAu5L8dVlopJ5fdkvBIDpK3b2tj9 + WADmmJN9EYDLpMJNNfNCvQ0tjWYEGg0Iyj0o+ubHAnBXEsIh7z8LwN86kI6v7PTh+RUbnpjR4rFxNU2L + J2f0OD5rVGb/igD88IgaT4wb8LkFFz4v4u+iG09zED0+YcajowY8ws8eGTfh0XEbHiHAfGjIhPsGaFEj + 7uWguofJ4q6oBbf32XAL7UYmixuHCELHPLhzLAF3DXlwD53hkaFEPEmg8ZwiAKfgWTrGE+OJeHDEg88O + OPhbB25gwLi+l4O414Mbo4m4kcDm2qibwNKN6whar5tOxTUzabh6oQA3bm3FxYsB7Bssx2IwB/3VBEaV + KQRmmYjITN2afO4XYaC6FKPVZZioKMV0eTEWSguwWJKFuSI/jcBdBODSREUAHi7PwkAZSXt5PsIVBQT+ + hQhW5pNMcL+6AB3cD5ZnEwylo7sqC4NNeSQsxSQvMgO4VBGAx1sL+HkyCpLN8Lm0cFk0cBtJ+k3xKJcy + 0AzuG+gsF5Zq8VCbA1/pS8YPR3Lwk5FM/OdYGn48nowfDHrw/bAFP+gw4oedevyoU4OfR/X4/YQVf1v2 + 4M2dyXhrfwbeOi0Db56eiTe4fe1QOv68z4/frLrxHws2fLFfgwfaVLiWoO/CchVOV4RdBkUCjK3lBNsk + m3O5RiwQdC4wSSwQ6Egp1u383t5iFQ6XqpTyztfWqXE3E/cxgqgXOpz4Wo8PX2ZAeIZk8B5ur2WQODfo + xk6CoUUpi8Sg2M0EG2ZQjAow5kAcqZF1KnWYrIzHLBPGPAGllAod4+AX4WAgNx4DTFjrJjPZZD1LEYHl + 8zmSrs21TmyvY6KotWMvj7e3giSEZOXybvrkhjS8fE41/nBTB04+EMb7j3Xh1FOdwFOtgAjBTzYCD9UB + d5Tg3Wuz8eZVmXjvzjKceqIZ+FIE+M4Q8L0R4PtjOPXVXrx1rAGv3F2E/70+C7+8KB3fPT0Lx1eScdUg + /z/A66hS0ddUJJSymD5JaBlBZoUVPbz24ZI4Ze3ibWzDi5rjcFd/HJ5fisMPD2vwm8+Y8PsbnPjjZ734 + 40M+/O3ZDLz65Vyc+G4J3v5ROd75QbEiAL/5BR9eOWbFH+/R4U+36/CHa9X4w2Vq/OliHf58Ad87R48/ + n2vArw9p8fKqCs+LOBhQ4YoK9jVB+vncXhWOCcA/ub0Ab329G/jVGPDKJPDODPAet6/1Ar9rAX5cBnwr + A/hiIvCiiJ9p+OipPJy4Lxc/vzQVL+704N4pJ+6bz8EjW2vw5IF2vHhRP7520zS+dts8nrhsAFftqSd5 + SFdmQLfmkyAUqpXySIMke2PNbpJiBxaarNjcSjJIsn9uNAHXDrtw+7AN90/o8dyKEf9+hhv/c6kXr17j + xps32PDGDUacvN2Cd+934b1HfXjncR9OHvPhxJNJeOspP955OhXvHE+hcftkGt56LAUnHuFnjybgncfc + eO+YEx8dd+EUTWb0fnQ8GR88LsKvH28/nIL3nsjGqWfzec1F9IFCXn82LRX4AtvgRbbF0268/4gHJ+9O + xCs3+vEfZ1jxwrwK9/eocEuQ7d2twkOjKnx+sx7f2WfCTw7r8auzdfjfC3X466U6/O0KPV653ohX73Th + tUeS8dqzWXjli/l47WtFePPb0tf1+PBHAXz4Q/roD4I49XIHXv9iI37xUCFeujwBn90Rj6vnVLhkWIWj + UgKaoOcWgp+Hl3X40gEffn5VFf54Rwdee2gQrzw6hv95YBg/uKELx86sxFUr6djTZ8dksxq9tfHo5BgO + kqi1N1oRDDgQanOiI0QCy8TdE7YjGrGhnwSyr9eBvh5ahOOW28EoiSBB26AIw4zL/d0OmhODTPajIZK6 + dhMW2rXYLE/rMdacSQL3mV620bQa39ihxn+fb8RfrzDjjWvNePN6G966gW1xVQJ+c6Ed3zmN17GHeWcL + 23WzC1/clowv78rA1/al4VuHMvDy4UJ898xifOv0Inx9fx6eXkrAA+NG3CJiOP/rmk41HpxNwNfOKsSv + b2/CG0+14e0Xm/D+V2tx6pvVwLdraZXAywUc17mKffitXJz8Uh7eeKYQ/3NnBn58sRtf3anB59jOL4xq + 8PyAEZ9juz3by5zZacHDtAdIlB7otuBJEubnRpi/mMeeYp56iu0mdlzKRvcyXzJ/Pczf3sWceEvEiCs6 + tTi3ZU0AlooHAVOsBDQJ6XKjBbO1JM0k0SLcigA8zjE7W6eNzf5tMWFjwIiNLWIGLDVpsEBwLbZCcK3M + Ag4zjnfasUxCOE1CNVKuwWBhPHoYM2Ud3Wgxx2ApyTsJa4AkqIbvlxLw5AjIIqmQGV1pBF0ChGICsAgv + KpSXrQnAjNdS6q6LOSNSrEc/wdhAsRF9BVpE8zTo5W/6SDb6Od4H+X+jBXGYIkGezY/HPG0DP18hKFst + 0mEb88G2ShNWq03YXEOCWUurt2CB238UgKOMnf0kbCNFWkwQEM8zN6zyeAeK4nAGPzuH+el8bi9ibrqo + Kg4X0A7t4lMAAP/0SURBVLfPaVArAvA+ts8Wvr+JbbqR31mhbeD5SX6bX8txiyRCSwSAW7LU2EsgfXaZ + DRcTaH+m2oYrK424nu14C/PU/Q3xeIZ596uDenxv2oj/2mrH7/Zb8ZczrThxgRXvHbXi3YvMePdCI94+ + 34B3LjDinYtMePeokcb3+fk7F1px8lwL3uJvTu63462ddpzcYce72xiXtjPO7M7Gu/uL8MqBMvzn9hI8 + y9x/U8iKIyRXSyIAlzOGVrgZU0lsCdqVfiMRTPITnCbrCCgNyE4n4Mw2oEpml5abUVWuQ4UIZ+yTYraV + iPo1lXFoadChtcGAFvpYU40aTVXxaJRZkWJssxb2e6hag/6AFWMdHkxHkjBF8jPZ6cRYyEScoyXGYd4O + xitP6k+uCcBLnXFYieiwlWRLZgFvo23tZ19HDVjtlSfU9dgc1SpPp28VMTiiwbLc6OHYmBMBmHlLbLaR + fdRAbMScubEtHttIDndETNhC/LOpXYOVNq1imzp43G4TiaSVx4sJwFuIH1eZm5dI8Ga7dJjrJl4gydg6 + 4semwRSs9Kdi43AO5nszMSg30Qio26oNaK83oYs5KdrBWBdxY7iXODDqwzhJz0S/D5P9iRiTh14Y83o7 + 7Ogh4ekWAVLAd0hmqbnQ3GBFDX24pJjETGYN0L+k5Jus65KXq0F+ngjBsW2piA+VVtTV2dESsCMUciBM + wtTDa+gbtGJk3I4x5toh4uz+ISsGR6X8M0lVmMSV191GPNjepUeQ1yfvhcImki72absaDc0qNNKa2K6t + 7Jce4vOhQYtys2ti2oX5RR82LPuxuJSMmVkfhkYY5wds6Om1oJf/PzTq5f/7MDiSiOiAF5GIBx3Ee+3E + qPW1NuWpVSlz7aMPJnhU8HrikahYHLzuOHicfN9FIsfPUpLiSXKlXKqR8cSCco6rUuK1IvpYKf2tqk6F + +gYtGpqMaCAJrGMsqK2hD1dolfhTSgwls4PXrVR8mGO9qUGDYBv7rMOGCP0yynw02OPCcIRtxlg8zFg8 + TvI52UfMQZvscylC8DAxYjTEONauQ1dLHDqamRMZR0NNMvuXxKmGY4MxSEo+N5EsNhYbUMe4VccYVEMS + Jtu6Ur1iDcR7Yp98LbOAW4h32ohPFfFXTJ7cJVaVrWKy/4nXyjrArQnobffy3Lzo70zEQNjP6/ArNzGn + 6K/To/mYGs3DcF8qersS0BdOpPl47fwdx2ZfTxL6yR/66a8i8PZFvOgNJ/BzlyLQfmxdbvR2xwTkkaE0 + jA1ncJuBIUUAJo8ZlBnAhfxeLuoqk5CTZoLfrYbXHg+vIw4JDpJzd+yBoXUBuDvIdqWfTJPHbSD+3rw5 + HZu3pmLzFo65rT6aHxvFtiRzy/G3NQXL3F/cnIz5FXKv5RTMLaViZjETU3M5GJ7IQXePlN9z0UdMyKHv + ZJI4+1J0sLviYbbF0WTtXz1MVi0MlngYzGJx0JliArBaRGAdTcP9OG7jVTDxPatZBbc1dj1JDlmWJw5+ + G6+J5pcS1xbmQloG/yPHGYc8XnuhV4timQnsN6Ashf7Lbbmf/ulXoyqV8TPbiI4SK/pqiIvq2B/kVd3l + VvIejt36BAw0JyHa7Ed3vR+BMhGAzchNNSIjSaMI7GmM4enJWkX8TU/RI52xPEVK/aVokZisQQLHkNsX + K/csNwAVS4yHLYHXw75QhGDuy3tOEYCT1PDweL50I5KzrcoM4PyyROST2xaUJiEzLwGpWU74Uk3wJLFN + OWbFFCHYw7bxW+BNtvA4RmUGsD0htgawCMA+Hj89VYvcDP3HokV1cax0YF2ZGQ1VFnS1sQ3oo1KuPNhm + QWtAZvOaUcN8L7OiSuUGbbEJWfkGpGVpkJzOfJYRjwx5WKZAjzIep7rawdjoQFOTGy2tHgQCMoOY8VIe + uOB4bC7UIVRkQBePEy4yIVKkRw/Hai9xSS9/H2Uf9LM/hhu8zFFpWAznYj6Si/FgOsK1jGeVLrQy39fw + dyXEJyIAyw1TRQAmxsiTtQPzRfxVI4d+Lib7IgIXFupRWGBUnvDPzpMbcMy/2XpkZbFdaEU5OtQUMhaX + kf8SSww3ejDZmsh86cdsh4iEyVjo5hjoycRSNAvjbYy1TQkIkTfW5Mlvzahgni/Lt6GKfScCcA37r6bc + g9pKJ3O2C8FGjuV2H2NFMkbDaZhhPtvQn42NA7nYNJCNbcP52D1egr2T5dg7ISJwPvb83wRg+Uy+M5yF + 3YwHuwbTsWsolftp2D2cHBODyfUPjGTgwGgGDk1kKXb6eBYOT8iav2IZOHNaSj9nKSWfz57NxTlz+Thn + PmZSClpmDu+QWUARF5a7aN1urHQnYCnsZbskMG/HSinLDOARsfZEDLV40NPoQFetRRF0Wytj67E3lZNn + 0qda5OGbUh0aijWIzQJWK8JJE7GTfF9+19PA/ErrqrGgXSo8yMOQxMOK8EtMXE1cWMV8XU0TIbg+j8fI + 19LXtGgp1qKN/xei/4WIYYPEwiGarCUsAvAI4/d0UPrYi4kmB0YbLJggHphstGGanHe+xY3l9gSaLIFk + x1ydGQtVBiwSoy2VGZWZsMu1TizS5yfpM+NidU5MSdWsoA8LnT7ME4vNE3tsIBdZZr7fGCGWjuqwe0CP + Q8NGnDNmwyVTHlw56cE14y7cSMwgkzBu4XfvIE64N2rHw0MJeGY2A8+Rwx+fycGj4xm4YyAJ1/Uk4BJi + mrMDehyoj8fueg120rYRT6/WxWEz8ZjYliY1drYasIu2M6DDriYtDpJ3nMHfHmFfnhdJwPnML+cx75zH + 8X+EuOZsYqrD7eT7zWbsIPffwri+sclDDuPENOPmcKYGA2nkKilx6E3XYiDPiqEyxs2KRHSUelBJ/JBN + zCtVbxIY5zwJccoDMLImZiJjXBJxbyrzVIaIvykWZK0JwOnJMQFYEX1pIgDLTGD/WrUSn2xpiSL+ivmN + azOBLcw1ayWgRQD2x9YQLslzoLGMmLHWj8FAGkYCKRhsZO6tc6G7gj5VSkxWbkF3nQddtGCtmziCWJzc + QioClGVrUEorYayICcCqTwnA8jCNCICyznd+tpZbuVFNrMh4V8FjV1cwxtIvGhvloUEPOruSmPuZ83uI + FXr9GO1LwjRx6hw5+gJ56GIPuWW3PlYGmvg6Wk0jt+wj7hojP1ok9tnZacSZ9Ikjoz6cNebD4bEk7B/x + YceQHyu9PsZO5nb2WS8xWQdxW6gsHu3EYa3kE63kFW3kVJ2lcTwu+43cc7hOh1FiqSn6xmybDvNB3T8I + wBbMdOrIJbTkFvwubSpswHRYj5mIHtPdMhNYhakucoKeeCzTt/fMuHHakg9nb0zG+dvScemeHHxGBOAD + uTh6oAAHVzOwOEoMGyIWIUcW3L44wVi/JgDL7Mdq8slm+l8781FHhxldnQb09BgwMGTGPPHH6o4CbNlV + ioXlPGUdy+YWC2rIvcqJb4o49mX2bwbxfBavN5sxI7tIZv8yT5BXl5A/VDVa0cBY1cgxXsvxX86YU0RM + WMSYVFzCnMBYI6JOaYkelaUWVAkWltnehdwWWhWr4H5FEfEvx0RjmR21peRwzENVzEn1/L8AeXkH/2+Y + uXSG57fUbsVqpw3biXW3kwPt6nVgN/t9R9hCriRiLvmTCGg0Kae7jW29O2zE/h47zYZ9/N6+TjP2By3Y + 027ENvbXZumvTnLyLhPmiZNnglrMhozkUeTo/M0cY8goY0lPSINwWIcouUo/Y03flAO908Q9Y1Z0jllo + VoSGLAj0mlBDzlYRUCtW2aJFNWNHVQt9vZGYqp7coMaM4mq7sp6qrJcrpZ9ja/7qlLLPucQL+Rxfucyn + ORwH2WzXPMZhEX2LibXF8hnTc8gtcpkHCqrMymfynSy2e1pBHFLYb6k0EYFFAM5n/C/hd0rku3I86SOO + rwrG4NpmHxpb/WhsS0FdwI8yjuU8juM0cjcRgF3EX/Ig3roAnMV8nUWMmsax6s+K+5QAnMxcUlBBjCRl + 27vS0M38HB7IQ4j5OsDcXRPwEpvZkFlgVgRgXxoxVhpxabpOiXHyUJ6BfEpmAVsF59GUJT+88qCeWhGj + E2henpOfsUQE4Az+bzb/N5/XXcAxKtWUZKapVFZS1prlVoQvWfaijFinkm1cRdxUQwxXXkxcx5xXkBWv + rE+em8ZjpNNvM9iHfC0loDv53YEq5rY6EYHJszlOpms0GCcvG5XYQptkfJlmHllooU912snP3coawLuH + k4gxiCWGErG9z4lN9MFlmb3OHLVj0I49Yx5+5uD3md+6tFik327siMP2qJa4xIjTJ8w4Z9qI82f0OHs8 + DoeHVDg8oMKRkThcPmfBjZsScNuqDzcue3DFrB3njxmwN6rm8eMx3RmPoU41IvTbzl7yaPLmxi5irg7r + pwVgcnopAx0gHmnscKGRr5uJS4JRPzoH0tERzURdqxfF4jv0ozzigSLyvhL6oawNXNeUSO6dTC6epojA + jcwV9U3JfD8JTa2paG1LJ65NIb91KOWNC/IZI4hli9kPYvKQdCkxQSVjfX2Dm99NJCd2kf/S99kvIjJm + EDfniABMvJydI2vQiihJzk0/SCI3SyFHT0unb2bJbFh5QNGEVPqUiJci/nrFf+k3IhinE8vn5loZp5z8 + TxfP1cvzTPy0ANz9SQHY908CcGvI/rH4+7EA3CtLWJF/DrrRN5KIwYkkDJMjjk6nYGA8Eb3DzJMDTrR1 + O1HdIOWz48hLYuKvlLKWWcy5xNnF5Bey9FQ5x391NWMj8XQLx2d7ezKCwRS0tSUr51xN7FTKMZxD3CbL + yeTTj0tKYgKwiMbVbM8KxhKpqlGYp2GOZRyXsSLV2hSjv9PXCzINzL2MOblst0wduZgIv2xTtl1Sckw0 + T6KJmP4pAThLzS3f43GkDLTMAs7Nk3sfsRLQBXkmjkPyBfZfOrGOzNZPZvsns8/E0jh+M+U8+LmIv/nk + Evns5+JcYgDmjlrGtnp58LGeWJdxUxGA26XymRORDvJ94oFIyIuGaj2CxJgbF6pw9NwxqGT2rwjAMgP4 + 6UUznpk34dkFK57bYMXzizY8xQH1+KgGj4/pcHzSjBc3ePD5JQ+enXPg2LQZj3EQPTysxcNjtFE9HmGA + f3jErNiDwxY82E9w2WvAPb1G3NlnxK39Ztzcz8E4aMHNBKF3THjw2XEPbu934M5eGx7sc+PxIR+em0zG + c1N+AtJkHJtKxIPjCbhzmMCVgeFaOs81IvgyaFw3kIhr+7y4oseBz9CuHPbiSjrTZZNJuJQk48qVJhyZ + bMC2SAmmW7PRWyXrLaWhqzoLndW56KzKJ0ArIEgpxGBFEUZKCjFenI+ZomzMFqRhKp8kMc+N8UIXxoq8 + /DxZEYD7ynPRU5GPLv4uVFmEtjVr5+sgjyeCcGdlNrprctDXmIfR9mISzFKMixAcLMFEawG6KlNRkmZT + 1gB2WXRwGAhCjVoU2khinfEYJbnfTXJ5JcnAI+1efCGSga9GUvENArpvcMB9OeLES+0GfJnJ88uBeHyd + yfz7BEk/GdDhN1NW/HElAX/b7scrO1Pwt92peGVfOv66Px3/sysJP9/kwXfZh08zeN7SrMJRgr8zCN52 + MSFsY+BYJehYINieyjLRzJjLNmA+Jw4bSH42kRTt4Hf3lqhwkHY29y8uV+HG6njc32TE8VY7vhROwksM + iM+M5+C+kUzc0JeCC7t92BdwYCOJz1i1Gb102jATcaTSih4O3j4GykGSpqFKDYartBip1GGQIKmXZK2b + /9nBARlmEOjlefSyXUT87WIyk7UghwrjMcukvbHehS00EYF31lmxhw5/oFaNox0m3DXtw5cPleCXVwVw + 4v5e4PgQ8EwUOBbCR48FcOqxZuCBeuDOMrxzfbZShvbkbYX44MFqnHq2HfhiN/Bl/u4r/fjg2S68dn81 + /veWfPzyM2n43uEkfGGbH/dOe3E+gdMm/udwGc9PRBKZ/Uvg0lzKQFhqQzcDzwDBxgTPf5nnfzbB9y0E + tc/MqPDj0w34n0ut+MPVTvz5Vg/+eq8Xrx1Pw+tfyMaJbxXhnR+W4d0fFuO9b+fi5EvJeP0pB/7ygBF/ + udOIP12vw5+v0OGvlxnxt6NG/PV8A/5C+/2ZevxoZzy+MBOH21tUuJoJ+BIm4gto10RUOLbLgB/dkos3 + v8p2+AXbREpAvzMLfDANvMH2+d8W4GflwHezee3JigD60QtpeP8p/ua+PPz04mQ8u4VkctiAO6ZS8PC2 + GjxzuBNfunQY37h5Hi/dOIcHL4ji4s3VBPxJ6CGxbWGftcgsQRK9ocYEjDVxjJEUz9QZsUIwvpuB69wo + xzITxHWMGbcOqvHEog7fPc2F/77Eh1evTcTJWxLw1i02vHeXHR885MH7jyXi3ccT8c4xH94+TnvSh3eP + +fHe42v2qB/vPMT3H0jA2w868e5D/N1jNuBJO/CUE3g6gf6QilNPpfH7KXj78VS8ezwTHz6fy2su4LXn + s/8zYqWwX/IBX/Di1HMefHDMi3cfSMaJ29Pxqwu9+PKKFo/2xeGebhXu61Xhyck4fHWrET84YMHPzzDg + N2dp8cfz1fjrUQ1euVyHV64z4ZU7XHjlET9efSYTf/tCHl79aiHe+FYp3nm5Fh/+oAkffS8AvNyKj77d + jjc/X4dfP1yIb17lxcMHNPjsahxumlfhqlEVriPouVXWqmVfP7XVju9dWIxfXteC39wexi9u68EPru/C + c0dqcNOmLJw1kkCiYMJgHQF7jZakVI92grZQwInOdg+6O6REnwM9nRb0EeQPEBQNkVAMyI1y+ni4TYtu + EoOeLjP6SC5EGO4PO/iZTRFC+kJWDLaZMN5mxEyrBkv0vc0km/sZp46yXR6c1+Jbu/T43XlW/O1yK16/ + 2qSIwK9fY8Vfr7DjdxeZ8dOzdPj3M8z44elu/PtpSfjxGan42ZFM/NcFWfj9Z/Lx56sq8D+Xl+Pn5xfi + h2fk4is7kvDUoh130V+uCalwbWcc7p9240un5+LnN9Xib4834Y1nanDyCxV47ytl+PBr1fjg65V4/5v5 + eP9bOYqd/Eo2Xnk2G398KBs/v9qHbx824osb4/DitAovDMXhhT4tPtdjxtPdzH9BAx5kDL6XhOg+EqNj + Ax5lBvDTfR48GbbjyS4LjrGtFAtb8Sjb6AHmuTsIam/s0uOykBZHAiocaozD/mY9dgfM2NFiw2rAho0B + O+brzRiXJ3sZRxQBmHF2tlaLDU0GrLSKALxmJLeyFvCCPL1dG4eVFjW2kJztZH9s62LCD8oaYyZMkpCO + lunQz5jaV6RGD0lQuESNNhLhBpKgCsb/IhKALJKF1DXwIYBE1p4oLtCiokzWACbxlHKr5ST8jK+yBlEP + Y+8A4/gIidpIOfu9UIeBAg36CbgGCuIxTBsh4ZjMF/FXg/kCNTbw8yV+vpFgbBNBzJZiA7YShK0yD8j6 + Zyu15jUB2Ixp5sDxCi1JBI9ZGs9zj2ObaDHB/DBNMiNr0+/h6zNL4nEe2+mCIvoY89KljHGXMN5d1KjG + ubR1AXiVsXmFn2/g9xYYi6d43eO8brFJ2hRzzQwB1wJtEwHbTgLpQ0UmnEnwfYT/IxUU5PjXVdGP2+Px + Qr8B35yx4Gc7XPjdaU68cp4T71zmwAefseO9y0w4ebEOJy7SKnbyEn3MLjbg5FEzTl5oxdvn2/HOEQfe + PeTC27sdOLHNgpOrjE2rXmA749DubLy2twC/2lmEl2ZTcRfH4AWNOmwiOR0rNmOg2Ia2HALiJIJjEsEU + EsFkv5Sl0ZL46ZApZXalLKeUmiOBLmc/yizuEl6/zOouoSkzgcvj0EjC1lAZjzpigoaKONRzq6yNynZt + 5Pdbud9DUD7U5lBE4DESobF2G4bb9BiWtcXaVMQ3bMd2Ej0RgIMqLHWpsRLWYkufrD9lVkqRbYmasJnY + cFMPfZnEayWiweaIlkZiyO8ukdzN8TjzHB9LbOPlYDw2SEmooAabaJs7dNjabcKWLgM2tquVGcLT9P3Z + hjgstWlIDoljIhbl6Xe5ybQpasWmftuaAKxVZgFv6LVgpd+FjYNJ2D6Rgx3Txdg0mo/pnlQMhhIQ4Tjs + aDKhu9WMSLsZ0Q7Gwi6JgXYMRhwY5hgf7+X199gxErGjn++L9TAGRhgDwx1OAnEH2jiWWxlX64lJyjj+ + REiQ9XyEjOeQbHzSpJxTOf2smmOguVFmJtjRzTHcKzG2n2OLuHp4zI7RMQcGRxwYGHEiHLWgne1Rz3Ff + w+uva45ZY0scyVo8WoPEINw2sI2aiPdk9m8HCe/wiA3jsv7vpAsz815FABabo03PeTE26cbouIv/5cL4 + pJffSeX7KRid8GGAWDtKEtfd7UAo6EBTgwVZjBPJ8pSu3Hxwq+B2qBTRV0z2Zc1Y2cqMnfRUKYOtR7k8 + iVtFsl1rQhXzUHlVHCoYx2oaiJ2CJnR2uxHpIcGMJivr+ra2mFBbLeVg6bufMHkwpZZYqqk+Du0BLdvd + xD6wIdrNmNTrxhh5wwj7bDRiU4Tf2aEEmlexBZmlyu1Y1IbBMONZUI1wqxrdLTyOCMB1WrRUaZRKLjEh + QYda9lM1Y1dVXrxitYxnMgu4TmYEl8rapwZlf/21zAIOVFpiInAtfUIxO18TFxKvyutgDa2WPlPnQgdx + bCSQgJ4WEux2+mKbh1s3fdBL/0vCaG8qJoeyMTWch8nhXAzxdX/Yx1ztU2b+rJvcBB7sT8fQQGy94P4e + eV/WX2Xfhf5uXUEnt8z33QkYiMpaeKkYHsygySzg7JgA3J+Pvgg5TiAbZYUeZCQZ4ffoaGpF/E1JIFEl + WS3OY9xgzI6E3BghR5smn1tcTMXGjbTNfmzc5MUSOcgStxs2J2LDpiSan+bD4sZELGxMwvyyWDLmNqRi + dkMmt+Rlc4Xo5bXITJrCUj2y6D/pGTql7J2T52C102xamO16GC0aGMxq6E3ximmNcYopIvDaLOB4TUwI + NhpVMJlUsNs0cPMYCeRkXkc8vLY4JNBnE8XMKvhpKdzPsDNH0qfzEjQolNLPqYypaSZlW5asRyXjbnWG + Fq35jB0VNgzVezDa7MMwsW5vtYO8QGYFG9FWYiA/sJE3utFY7EJZtg15MmMtWYdUv5gGaX4RgsV4rSJc + 8PhS3cGbpEGCT6PM+pCZvspNQI47mzcOVvaDlAaUrZi8J+bwqeGU36Xokcj/kTWAc4rdyizgEvLRfPJb + EYF9vBZ3khZ2T7xiMstX1gT2pdqRmGJTBGC7VweLIgDLrBP2f5IaWekGYgURTmXGWuyGdW2JBTWlZuYT + C7raE+k/ScSVHjQ3G1BTzXhVo0MFeV8ZuWBpmQn5RUZl7d/ULC2SmX/lBpasA1zEPFdeaWeMcCo3dOoa + XWhU1lR08BhGVBELVInAV6RDK3NcB/+3kzm7m8eT9UIV43lI1ameCgd6q1wYbPRhtCUFk6FM5jARgBMQ + KnciIA9KFRhQLOt/yVpgawKwzPaVmcjrlsPPcvid3DwNY7qUpNMjn7+TdX/Ts9RIldkWWTpltoCUeCsv + MDNGmNDMfpc1i/s55kd4HcP1Dky0eJgrfdgQTsWmvmxsGsjFRFsi+uVBEbZdHXm5lNQWAbi8wI6KYo9S + era6VARgN+oqHQjUuhFs8qA3mISBTj/GIumY68/EynA+VkcKsWUkHzvHirFvuhwHZqtwcKYc+yaLsG88 + D3s/IQDvH/1n2zeSgz3D2dg9lIldjAsiAosYvHtYRGBZEzgDB0aycHAsG4eYS8VO5/7pY5k4Y1JMZgHH + xOAzp7MUO2s6F2fNxOwwv7N/JAU7+xOZsz1YYaxfCSdgY48XyxG2C22OsW2yI0FZA3gwwPzHNhuQMvn1 + dkXMbWNubS5lnKYvNFdwbNVY0VptUcTgRr6nrAlcrFUEYVnHPcjvKCJwDX2TFuLrVuK75qJ41BMPVzI/ + V2QxtxATisl+FXl7HXFskzxsoJgWgRLxORr3W2iyDfJcevn/sgbwWID5J+DCSD1jAfHsaA2NW4XzNjmx + 2ObGhlYPsY4Tc3UWzFboMEdcvsBz3VBuxhLzwWK9G5P0l9Fq5n5uxxvdmOL1z5KrTbc5aTbMhyxYJldb + jZqVtT53D5pxgHjhbObwo9M+XD6ViKsmvLh6yI1riCduCFtwC7//WebGB4Z9eH6pCM/Rjs3m48HxLFwv + 4m/QhjMbDdhfp8ZucsWdjXpsb9JjC21jPXFdQ8w2NmqxlRxGbAtz5jaO733EhQc7HDhtzfa3mLGrXo9d + tTrsYE7d3cB98pJt9UZsaSA2a5Trd5LnWDGQo0NfmkYRf7uT49GVqkFXFsd1Dvsp34YArTzDgExiXhGA + EwVziPDBuOVhfEtINTBe6ZHCbXoyY53fhKwUbpONiggs8TXRG68IwMncV9YD5meyZEWSLF2hGF/TfCL+ + ylaE3zVLSjLB7zMocTmfca8qn75W5kFfgx/DzckYbkrCUBNzN/sryD5sI85p5XUFq5jr5WENxpjybDVK + 0pkvM+JQwjhXzJhXmKH5WADOS5cS0BKHDEpZ/TzGFLGCHLUiABcTc5QzllQQX9RWmdHQYGdcZbwIeREJ + Mwb08lyYy0ejiZjsS8D8gBtLxLvLfeSWEYNSBnqYmLCXGL+HnKif22nip01BHfb1WHFk1IvzxhNxDvHe + GWM+7KePbI0SLxHXjjaT89UaEaGvdpKThcjJ2snx1i1IThnmWOwt02CgWke/J3+j70zQP6Zb6d8yAzhM + rkdsLmvUbhBc3m3AjIi+3J+WGcFiPSbM9BoxS14w1R1PIy/ooc8NGnFwKRmHN6bgDNpZq6m4cEcGju7J + xiUH83H0UBEOrGZgw5ibuEmDltp49He5MTeahTEpAc2xV81za6wzKQ8wdoRs6CJf7+pmvujRIzpgxOSC + D8tbc7CyrQDTC1kIhZ1obGU+I/+p4vgtI6bLJv9MZ0wQ8TeHYzaHHFSsoFyNUual6ia7Iv42Bb2opX+X + VhpRwFghVkQsWcxYJOvIVzIf1DKGi1WU2BSuVllkRVWRTbHqEjtxpA119BuZlVmaE0djPGJbCy8L8b8H + 2R8zzWzToB172U+HhpJwcCABh2gH+t3YQyy8PcTx2RqHlabY/Zgt5AU7QybsD1txWo8bh8Iu7O/k78l3 + 9sh4DXBsBgzY3GrEsjzMH5QS0+xL8oxRcuopvp4hH50m/xnqMKKrhbidx+/uNaFnkG06aELHkAmhIY5d + Woj7bX0GNIX1qGnXoiIgIjCtWYfKZiPNhPIm4qgGM0rYxiKeSSlnWe83n+NnXQBOZ/7NZLtllxk+YUbk + VRBDSMUlxlixPFputQm5NSYU1lqUz7LLOd7ZX35ysCS2oWyT8zjmitSKAFzKuF1Wy/9k/+azf4p4zDLi + 9KoGD2qbvagL+FDV6OV5OZFLHJfGc0nkOHaR+4h5UkTkJW4h/shhvk8nTxDB18/8sW5p/L+8CmJH5v7q + ZuK/Dh/ae9LRyvzfGPIpM4BldvHHAjCxhLIWMGOhnZjO7CJuFQGYuNuyhvMcNJkZ7GBck303MaGIeTKz + M5VYKpP/Kw+sSRnhQo7XfJ6DlISW2YViMotUBGF56K2UWKqi2IDKEhON/SECJDGOLAeWS56Xx+srJMYV + Abg8PZ54V8Y9cx4x3Chj0XS9BdMcWxPEd8NVKgwyvgwxvozWqDDZoME8/Wkjee3miIv53oVt/V7sJA/b + MeBl/nJgqcuMxZAWKxHmh2EXdjNv7eZYlrWslxm7Fjo0WO7UYEuvAbtGrDg4wTw1bcGRGRMOT2hwaFiF + g4MqHB6Ow4XTZly1nIAbyT2uXfbikhk7zhjWYXtEhcVOFcaCKkRDKnSGNQj1mRHotaKZnL6OXL6u04F6 + 5q4Gmoi/Mvu3JZKIAHmSWCv5VCe5UoTYqGsgG3Vt9Av6XDHxhMxgLyb+KCeGq28VkTeZ3DsFLe2p3LKf + A6moZ66QtaWb29IYt7PQ2p6J2jricY71CvZ/XY0b9eSEdcyLdeSEIljWNdBfmhhT+LuaWo8yC1bW/c3M + Yu7IJd4kfs4lXhQcmpkp94Hojz76HX1TKQdOSxMhmNxJLIV5VgRMEX2lzLKHfiOCcXoaj5PDayii7xMv + Nzb50NwiRvze6lIE4FAXuWkfOeWaABxmrhERuHNNBJYy0EH2c0isW2b/utFF/t3d70F4kLF5OAHRUXJO + 5hkRgvu5jQyRj/bFBOAa4oMC5pdM+mQKfVSE1Gxi6UIRf4nlKysYIyutqCcnaGlORLsIwGznINs5wNfS + XlVVVpQwVuQJnhcuQZxeWkzOQD5ew/xcXWnjcdhPHK/rPi5lzrPZbjLTXSyP469QBOBsmZ0ts39lxnSs + zUT4FeFc2s0r995EAGa7CvZXLJt9k6NFhlQFEJGe15BDfFNEzFBIPJ+XTc7D48ms35ixr6S/eLxkjt8M + vs7m7/IyRfjVoVCWBchjnMrXo7xQS+7DWMo83FhjQDOxlAjAsg5wT4cbvcTL0U4fekKJaGZ+kCpMqxtq + cen5k1B9bbcfX96ZiC9t8+Bzm1z4/EYXvrjZgy+tJuClzV58btGBp6dNeGrKjGdn7Yr4K/bcmgD8+JgB + j45o8diYHo+O6/HYhFWZBfzYhF3ZPkQAem+fEfdwkN4R1eNW7t9EYHrTkBm3EpTePZOIuycT+L4Ft0XM + uJ9A9PGhRDwrpWimkvD0nB9PzHjxwKQHd4y4cH2/E1czOFwZdeEqBozrGDCuZcC4vEdKzNhw6YAHl44m + 4sIxD86fSMc5U5XYFS3DXEsOgU4GItXp6K7JREdNLi0PHSIAV+ajtzxHmdU7VJSD0cIsTOSnYSo3CeM5 + BO/ZBNy5JGoFHgwXJysloKMVuYhUymzfIgQrS9FKa6kqQVtFMdorC2n8TMpC1+Yh2piPkbYSjLaXfEoA + FiG6NMMBv1MHl0UPm0GLBIMOWWYSWVs8OhnI5+iEB/PjcU2NAw+1+fFkexKeYUc+xwD0DAfW0616PE0A + J/Y8k/mXg3H4VjgO/z6ow88nLfjtBif+sCkRf9qWgr/uTscf96Tj19v9+NFKAr4+68RDPTp8pl6lzJra + y2SwmUF8mQ62kGXBZIYFY6lmjKWZME2Hn8uJxxK/s0pgt5vBfH+5CgdKGWD52/NLVLiSr2+r1uChevpK + MAEvRtNxjKTyHhLHGwcycTSSgtMJTLczcMzWE+ATCIVJzDqYXDurLOjmtpfv9VYRfFUbuCW4ZELvIMlq + 4+BvYWIK0bp4Ht00EX8VAZhEbZhgarbWSiLixiqT9DYG3B0kW3vqjNhbo8FZAR19he21PRsvn1eJP94S + wvuPDQJPD+LU4114/8EAPnigEafuqcGp20vx7vU5OHFtOt68KQdv31WMDx6tx6njrTj1dAfwbBjvPNzG + Y5Thl1dk4PvnePHSTjeeWHDStx041EhwK6Vv2C5BJtkASVwTg3lTCQMUQVwXg8xAYTwmCTpkNvW51Src + 3qXCCzMq/OchM/50sQN/udKFV25MwOt3JeKtY2l448VsvPWtIrz7wzK896NSvP9yAd75ahreetaDVx6x + 4q+fNeEvNxrw16uktLAJr15sxisXGvG3Cw3407km/OKgHl9fUeN+JrxbZGZkQIXLmlW4oV8EYD2+f0M6 + /vxiIz74WRT4y0RMAP5wBngzilN/CAA/LwNezga+JuJnKj74XBrefSoHr9+Tgx9d6MOxFROu69PgxhEv + 7t1cjuOnh/DixUP4+o3zePGaadx9dhjnbSjHvAiLQpTz4tHCQNvL5DbUkEAgyXFG4jtJorBQp8PONjvO + 6U3AZSQsl/cYcEM0Hg/NaPHNA078+uIkvHJdMt65PRnv3uHBR/e78eEjXkUAfu+JRLz7ZBLPjcbte0/4 + 2HdJ+OARH95/yIf3HvDivfvcNDv3bfjoERtwbF0A9rJv03DqmXS8cywFJx5Pwcnj6XjvuSyc+kIO8BUR + wFNpfhq/+1IiPnohAe8/xf99OAVv352JP12Vih/ut+MLCzrGLzWenY7DlzZp8P0Ddvz8LAf++4gZvz+i + xV/OV7NvNHjtcj1ev96CVz/LfnwsBa8+l41XZQbw14tiAvB3a/DB9+rx0cuNwHda8OE3AjjxYi1+/0gR + vncd4+TZBjy+X4sHtsfjrmUV7ppT4Z5pFe6bUuHRJQO+cjgH372kFt+6rBFfPtqIZ47U4DYSmiMjbmzt + MGG8QUeCqkUnx1tbrSwmb4OsXdnZReIalhvNDgx2WjHURVBHYjRKUDbSaUI/CWJXcxyCjXHoaNUi3Mlx + SxLQR8AUE4BpQQv6W02MfQZMtqqxQGKwxFizi353XpjnOK/Bd/Za8Pvz6euX2xUB+PVrjHj1aiP+Qh/+ + n6MG/Ipt9Yuz9fjlWU786iwvfnNOEv5wUSr+chnHxLXZePumUpy4rgR/uCQfvzgnB9/ek4wXVtx4YFSP + Gzimria4u3vSgRf2Z+A/rinD7++vxJ8eK8Yrz+Tj9Rfy8OYLpXj9cyV4/fNZbPc0vPL5VPzp6RT85sFk + /PyWZHzvXAe+tCUez4n4O8IYG43D82E1nu/U46mQYU0A1uEetsf9bIPHmZ+Ok2AfJ3h8ssuKY2yrx0mK + xJ7oNuORiA33RZjruoy4rkOPS0mAzmZ7HGqKxwGSrJgAbCcps2OTrAvG/pio0mGE8WSIsXaMcXeG8WyR + RHpZZv5+QgBeIbFeaognsdNgM89pR7cFewispQz0aoed35eyPFZMEZiOVZoIyBlnS7XoLlWjhTG9jnG0 + nPFdWeNFbrwS0AgQkbIkhQQrZSQDNYzPdQT1dbUEGrV6hAg4IiRUUbnRRZI2WuXAaIUNgyQLsvbeQL5G + Wad3hGRinER1mkRpLk+DhXw1lvjZMvfXBeDVYhJTxvstzAMbq2gE0Ut1VkUAnqrUY5RkfbA0Dj2Mq33F + cZisJAkgWdtYqsFefn52jR5HmX+uZDy9qpJ9T9JxVS3jXJ0KF9bH4RwSVkUA5udb2I7LzFnzPNaUiNOM + w0PMfYO04UwVRrgdJ+ibJACco21ge2zN0WAXz3NvUTz2sb1O4/VIJYVb2X+P9erwJeKhH+9y47dnuhl/ + PXj3Kjc+utaB9+nPJy/T4sQlarx5sQZvXaql6fDWJQacuNiIty6y4p0LnHjvHMal0/m7vW68tc2Kk5ut + wGYnTm1JxDvbU/DKrkz8ZmcevrGUhgf6bLiEhHlLmRZjBSZECQhbM3UoJWjMJPFLI3BMSVITiGoJ7rXK + 04rZMnNAbmoX6kguNATEMeFXEYDZDmJSFlrWdq6lv9Uwn9ev2ccCMK87wLYLs+/7mixKKehBgs2hFhOG + Wkn0WtiWrfTTNQFYZv/KOsAbutVKWcLVqBFb+0yKECz7IgBvjNCX+dkyv7NCAraxW6vYUkc85pmrlHWA + 5Kn1bj1Wu2iMQ1s4frbIDF+OqS2dBizzO7MN/E+Syxn28QbGmxWOyc1hszLLYEVMbjRFrWsCsAaTxEqx + UtAmbIiSWI6lY/tUATaN5WG2Lw0j3V5EeX3dHF/hNmKRdgNJImNfpxkDXbz2sBXDHGOjEevHNsgY2B+2 + IMrPwx3ENCEr46kdQY69YJsbrc1C5KyooN8WckzILOAsIeD0N8WEdGSJCKxGeZkODcrNKSlNx3jKmNJH + nNxPTD00zLE25sTgiBPRARs6whyPrfGo5LWX0u8r6PNV3K8jLpQZvy2MM00tso6vCs3M/e3BeER69Bgb + s2N62oO5uQQsLPgwt5CI2XkvZhe8mOF707OJNO7TZueTMb8hFTPzKRidTMTAsAfRPrZPmDkjZENzk5kE + i+SGY0XWOvbRBxXhd81csl6sNbaVz9JJQgtIVOXJ21rGpLp6E+qZj2rr41HDc69vikO4x4GhIT8mJ7Ix + PZOH4WGSTOakliYtanmd1Rzn6yavG3jdLcxJ7QE185KOfcCxwT4ZY/+Ok1uMRojlRQDujwnAc8QrYosj + PiwMezHBcTUcYS7rULPPiTNbNOho1KKNcaWpXI36Eg1q2G81BVrUEL9UkUxWEouKVTOe1RCr1snMYBJy + xWR/7bUyC7hC1gIWETgm/LYwZgZordwXk3UBg7Ux8beLODbc7FFE4Ah9p7uF1uqgH7rR3xUrBz3WT64y + lIPxgWwM9qTQ95L+pQA8NJCO4UHaQKoyw3ddAO4MOtGxZiEeO9hq43skjvy8TxGB5XeyDjD50UCuIgAP + RovRFybnachGUbYb6UkmpPl0SuWBNMYfeWK6jDG1qY55odujLBUxO52izABeWUnB8sZELC8nYAO55oaN + 9DvyExF8Yyb7awLwig/zy/5PCMB5mFssRv9QFhoCTkUATpdZoiTbUvLO6Yn/fxaA121dCDaa4mAyx8Nm + 18Lp0MDj1tF3eVx7PDz0Wa+YOWYyGziNPpxJn871Mjf6dYr4W5Fu4lZmAutRxbhbIwJwgZH8kvGxnv4X + 8GEskKhUvIlW29EpDwWQ19Qx/9Xncwzk21Am6/LKmpUpBkWgSEli/FZMo2xTk2JrVvoU8ZfnlyjCrNzs + i4m+60Lvuggs9kkh2C7f5e9cfi3cyTxuNv8rz4bc4gQUlvuRX+KPCcDpZiTw/+0JUuKZbevVwpUoZQjt + 8KXGBGBbgpbHjoOdJmUHRQDOzjAoNyhK8o3KzWsRgGXd+eoSM/OKmT4m5ch86AzJzSwNyplXysvjUFqu + RWmZAaWlfxeAU4g7RACWGz65HGtFPJasQ1ZZ60RVrR3VDS7UNjlRI2sqEr+Wlqjpd2rUcgwGSkwIlVrR + UWxGRyH5JbdiIgqHaF1l5GG0bh4vXOVCby3Pq95Lzu5GC7laA8+hMk+P4lyNIrbks5/EYoLv3y0mBMvT + /FpIyb2CQgPPVY8Mnruf8S2ZGEJmAOSIiFNoQVWxjbHAjEZinRDjXm8VeTCxU3818yf56hTbZ7E7BZv6 + MrGpPxuTbYyz5LIhtl19gZ7nZEBlgcwIcygCcAX7rapESkC7UF/BuLguAMsM4I4kjPWkYVYE4NECrI4V + M8cVYudECfbPVOLQfBVOm6/EwdlS7J9aE4Fp+8fzceBf2H7mRZkNLLOFd8tMYMVi+1IaWmYH7+frg/zO + wfEcHBIbzaJl4vTxDFo6Dk9kxGxSSkPTJmSGcMxO43f2DadiZ78Pq5GEjwXglR4vc7YPi5EkzHYnYSLk + UcTfviYb+qV0cyP7khixrVyP5iI1mgrj0FiiRYBYVSmnz/ZtYr5VZgWTezYzboj4K6X825ljRQQWa+fv + WxTxl3mS2E5m/4rgW0Y8WMa8XMb8LCKwiMIiADfSz0QEbmQuaCTWlW0Tc8C6BfheV5kJPdK/zPn9jIcD + xLSD0tfEt4PErEPyQCbPXWYCzwVcmOX1zNRaMMXxMFUYj2n68xzjxEINP69zYUIeGGDsGKH/jzY4MU7/ + nwzYMdFs49aC2XYLNhB7bCbOkSorO4kV9g5ZcXjUjfOZsy+ZSMRlowm4pM+JS4lfrmRuvD5sx63Mj3eP + +PHUcgmOL5Xg0bl83D2RiUs7HDijSY+dlfFYlWWryD22NBiwqYm4jbbUQJzG/Ci2wty9sVGHFTHub242 + YWe7HbuZT3a1WbGD3GZzrRaLxPCLxJJLHPubmFc3EUuukEcss41m6+zkJnb0FxFzZZGbpGnQlRKPrmQN + QqkatKSyzWm1KRpUpXG8SQxj3hE84eVWKhG4fBrGNsZveciFcTSZ2zS/VFVgXEmO2T8KwKn8jszkTUsx + M77q4U82rJmJvzchiVsRgUX4ldLPYj6fAUk+PVL5n1l+NYoydIzjVoSrEzDU6Ge8T8ZISxIGGj1K+WeZ + AdxSZkFbhZ3mRHOZDbJ+ZhFjRCHjXHE6jyFci3kjOyVWAloE4MJsvWIy4ydXhJcsxqNsqUyghZSslDLQ + ZcU6cjPiJ8aQJlm6Sdb+7U5UHvYa7PVhpCdBeVBxrs+lCMAbB5zY0EteFdRghLhZZv+KjZEvSQWd3b02 + nDbowrn0lfPGvTh33Iczx5OwbyiR49KBCfb9QI0OvcREXSXxjLFx6OCYCdFk28nXXUVxiHA8yfJC/TKZ + g99fLwM91SKzgNnvxM+Cz2X938UeE2bDRswQf81ELYqti8CzUX7WY8AU+cF0mLygl3xB1v9dTsYhYoqD + G/04tMmPs7em4rxdGTh6MB8XHSrGvs3pWBx3IRxkXCDvk+o8U0OZGOlNV5a5EowSbOPnMost4kYPMXaE + /xshNxEBeGTGjTkeY241G6PzqQj2ONEYtKE2wLzWZEd5rVWZ7ZtB7izib245+4j8KbeM/VOhUQTgKn5P + yj+LAFzT4Pi7AMw4VMz2KWXcKWN8FyGinvhPEYCZuz4WgJkzxBQBWGb/Mg+WkccV5UgJUMYotncD2zpI + TifV9aYbyK047g5EvThrOAVncVyfNZKEM9h3+znWdwbJwQLkVOz3VWLlbQFy2qAFpxFXn0Hcd3qnBwf4 + +z0yfnms7eyz1UYjNpEHLbWwL1rYhw1qpVz4UG08MY0BEx1WjMvDryEj2nnc5ib6ArlaJ9sxFGVs7WOM + HYxZe78RgR5yG3K6avraugBc3kQcxVhT3kgMJVa/JgBXWxUBWEwEYCn9LAKwiK7pRRpksi2z2JYiAOeU + xwTgPMbYdRPxN0e2PFYBY6u8l0mfTGa7ifjrYzxfF4Ez6bdSAloE4HLmDinlW8BcIQJwKc+jnNijkti8 + ujEB5YzHUn5aBGk5F5nV6+aYFQFYtr6MOGSKCFfM8yXGSyVeSMtbN5VSejq3nLim2sxrtaFGZlV2JaO5 + Mwl1bQmoaHT/SwHY7ZdqLDEBWGb/mrkvArDgPPuaCR5cF4CVGcCMMak8n6zsWBWTIpnVLA8p0G9F8BWx + SxGAaR8LwGzb2MMlxLW8xtJCEaxi4pgSg4jL5GGVkjUBuIrXL/d0w/zNEH18qt5KM2Oc8X2Q3CxaFnvA + ZJh+M8F8MdvK/NEla9Y7aHZsijixpS8Bq1EPlpmbZkP05TY1Fslttwy7sGMiATvH3FgdsGKp14j5Li1z + HfNML/101I79kw4cnrHjzBkbTp804OBIPPYPqXBgKA5nT5hwyYYEXM0YcTl5xQXTDhwc4m8jKsx2qDAY + VJGr02cjGgT7LWiOks/2OdAQcaC+24mGLieaaIGumOgrAnBLmBbxop08qXs4Az1juegmTxIBuIR+VkoT + 8beEvlTR5EJDux/NwZgALNbcmqKUfa4PiPGztlSEOnPR0Z2PQGs6auoSGc+T0NqcgrYWP1paud8W27Zw + K/vN/F1tnQcl7KM85oOsXGLNfI4DYlARgKXUsIjCIvjK0kyfFIBTmGOEO4n56Vex0s+fEIC5n0Yek5Nt + QlGhDZWVbjQ2Jv1/CsAyE/hjEZi4rSPsUURgEX5j6/+60N3r+VgA7maOiQyR49KiYwmK+Ns3Rm466GTs + cCgCcG2TGYVlamU97vQsjqkcYm1i+hLGw4pyxsZKxuMaGxrJB1qbfQiyrRQTsZ3jtI68uqqC/UCsVpDH + fEofLSW+L+e4lOoZlYy9Iv4qAjDf+z8KwPLAA8dhfpaBnxF3sP18IvpKe9FcxB9ujjl54EJmU0v57HUB + WM45i3xC7sGJ+LsuABfmmZXZxNkixEt/8Hgp7AexdQFYJuJkpYr4y/PPlhnIjP15vP4CjkvmgQqZpc/4 + JwKwzPANMGaH1so/9zKWK9aRiEiQ/srx2N3uwdaVenzmommoXtqeiJh58aVtifjKNh++ut2Pb+xMwTe3 + p+DLJOOfm3fg+Vk7Xph34gtLbsWem7fj+LQZT44bcGxMj+MccE9OmfDkjIPmxvG5BByf9eCxcQceIAC9 + l0H/s0wEt3F784AeNzIR3DJuwwMbUnDfnA+3DVpxW8SE+3rteFxK0RCoPjvrw9NzSXhsxot7Jz24bdSJ + awbsuIID83IRgAcScf2oH9cN+3AFg8alvU5cRCB74YAH5ww7cQaT3t7+XCy0ZWG4NgXR2lSEa7PQXZeD + jvoCWj46a/PRQxuoysFwRQ5GijMxVpyOiYJUTOX6MJHjVATgsVynIgCPlKRgsCwLfRV5CFcWIVRVgvbK + CrRUVRBglJF0lKK1qhhtlQVor14XgAsw3FaCsWApJmmzoXJui/m/GSjPcCDFZYTLalAEYJdBjxQDA60p + Hg0OFfqYSBZIOk6nw17LgX5Hgxv3NnvwYNCNB0JsWwKpBxpVeJD2CJPu0y0qfJ4B7euROLw8oMFPxkz4 + 1bwL/7M5GX/alYnfExz9bGsyXl7y4gtTLtzGIHqEwVlm/q4ygM/T8Wb8GkwQ7I76LRhIImEhYJ5I12Eu + R4MVJi1ZM3FvVRwOElAdYkA/na/PpX2GAf56kvm7CPYeJaE51p2M+/vT2bdZuG4gC0d703Bmpx+7Wz1Y + bLBiSHlyUItWkrB2Ju5ghZGE3IQuJuhuEqVOJsZQhRmtxQY0yxO3TNKtTNahHAJOgp8Q9zt53j0kSsME + v7P1dqw0ubGZgHsrg8H2BoKdOhN2kLzsI1A52m3EvYs+fG5PFn50tBJ/uSOEdx7uxXsPd+Hd+1vx7l31 + eP+2CnxwcxHevS4Hb12bgdevz8Abt+Xh5D2leO/+Wrz/QBM+eKgdr93ZgF9fUYDvn+vFl/db8eSSCXeN + GHBZh1H5vxEm1g6eWyCfZJTEsKGIILDIiZYiB8GxCMAEsgQBsu7kRfUq3M1E9IW5ePzigAV/uciF1y73 + 4PXrEnDiTq8yE/XE57Lw9reK8MGPKvDhTyrx0Q+K8f43M/Hu5xLxxuMOvHK3CX+72YBXrjXitSvNeP0y + C16/2Ig3LjHjlaNW/O4cK763S4tnpukno3G4Zyget/arcOckfWafAS9fm4zfP12J93/SsyYAzwEfzeLU + iT58+McWnPpFKfC9rH8QgLPZhul4+YgLD81rcHl3HMehHbctFuCRAy147mgfvnrDHJ67Yhy3n97JpFyA + cfZRR6EebUxQrYUGRQCWUmwiAAsRHqtQK+W/t5HMnhVx4WIS1Uu6tbimN44xQIOv7Lbhlxcl4dUb0/He + XRn48J4k4EEvTj2SiA8f8+HDY0l4/8kkfHDcjw+4/8HjPn5GeygRHz2QgA/v9+DDe138nZ1bK9+3AU84 + gSddwNM81rPp+OjpDLx9LBVvPJaCN46l4OQzKXj/xVSc4nWfEvH3qz62g1cRgU99PhEfPOvj/6TgvQcy + 8fot6fjt0UT85DQnvr/HjJf3GvDvhy349YUe/OHSBPzlqB1/Pl+PV87X4NULtHjjciNO3OjAG/ck4rVj + 6Xj9c3l4/ctFePObpTjxnXK883I13n+5Fh99tw74djPe/3IDTrxQjT88VoT/uCkJX73Eji+eZ8MLZ5nx + 3CETntplwBMrGjxMX3pkUY9n9qbic2cV4cnDRbh/fwFu3paF86e82NZpwEyTBv01JNnVBOUcay0kM81N + TLrBhNi6DgQ3o112TJAcjIdIvjr0ik0E9RhqjUeE8SZI321vIPkjgA8HTYr428/fRENWRINm9Lca+V0t + xlrilHKuSyQHu7g9J6zCPfNqfHevA/97fgJevdyhCMCvXcW2uUKHv1ymxx+P6vC789T47Tla/PYs+vDZ + TvzvOR68cqEXb17mxTvXpuDDG3Px7rV5+Oul2fjVOVn41q4kPL/Bg/uGTbiOcfDKrjjcMWHD03uS8d3L + 8vCzW/Pwq7sz8LuHU/C/j6Xi94/k4He03z6WjN88kYj/esSNn9ztwss3OPHtS1z0NwOemVLhWJ8KT3GM + Ptcdj+dCGjzbrsNTJLCPtesZi7W4p12L+9lGj0cZC0iej0esON7F/NhpwhMd7BPGhcc6jXiQ793dZcLN + IR2uDmlxiQjAJGOH2Bf7A0bsot/vaLVjS6sTm5molwJOTJNEjpJUDjHGjjLGTlWRADfosUSCttJsjFmA + ZLpZj83MB9uk9DOJ9b6oEwf6vdjTm4DtXS5saif5DzgwRxI6XWfDCGNtPwmICMCBIhVq1wVgxtVsgh8p + OyIlXWXmSkkhQZLchKSPNAlxbrKgjdZZzz7nsfpIloYItEarHRgpt3wsAA8VaDDC7Rjj3WRBHGZy1ZjP + 1WCR8VzE3xWaCMCb/0EA3sRzW6FPbiB4nuX+eJkGA8VxStnq7kIVBtgec4ztWxkzDtSacB7P5TK233UB + HW5risPdtLua43Az2/YqbiXGnkP7pAC8VKrCNI81whjdxxzby2vuYw4cyIyLCcFpbG+2wSRz4hRtkQRq + I0GoPAC1he21k+dymHZFLeN3lxrPThjw/V1u/PeRBMbvRLx3HWPETS58cIMRb1+lwYnL4/DGpXH03Xia + Fm9eqscbF5tw4qgNb1/oxPvnJOCDMxhPDtC3d7rwzipj1CYb3t/kwltbvPgL8divd2bh25vT8MiwDZey + r7dXGjCeZ0CEJKyZILFMwCJBqAjAqYoArFEE4AyCRyk7k0OSkE8CWFhEEshrKBbj9aybzAKupFXRqtlG + dbR1AbiR7dXE91uY47uqteipN6K30YhokwF9TVr0N6sxFIjDEMe3zAKeEgGYxGqGxGohHBOAN/UasLnP + iNV+k7KV14oAHNZisVNNQqfBUodasQ2heCy0x2GpU4fVHhO2cWxJObOtYRu2Rmgkidu7bdjCcbVEoigz + gKfYFyIEiwC8zHG5scuAZdqGblqY3+NxFrg/1RGnCNUjjEvj7WplXbTFPi9WhtKxOJCGKSmD2+lGtM2K + SIsRPW069HKs93McD3L8DvH7wxELRsJmjBK3jkZi2wH+V5Tn28v4Gg4Z0dVmQgePEWqVB2ucJCYutHBM + NzXaSTiMBPMk5fS12JovKmX2rOzLOsEFImbUME+2Smk6CyKMKb1RC3pJUPsHLRgadaB/2EFCZSQRi5V3 + LiO5LiYmk22llFAWAZh90sJ41dyiRjO/09rGeN2pRS/bf5z4fG4uURF/5+cTMUPMPkX8Ps2t2MycCL+J + mJfPF5MVm57zY3QyAYPE2NE+C7rZBqGQmbmDcaJEjbxcWa+I18PrUG7M0h/FlBnBzthWiE4Gx1uhVBWo + MKCWY7iBxKWJMayJsbCRuUVmLveTIE5NpmN5QzFWN5djZiZTKSkcYXu0M+cEGuM+tpameLQG1AhxzAf5 + 2w5ebzjEPlMEYBfGSSjH2YZjPSIAuzA35Mb8SIJiC8Pc8vU4fWw4zD7sYD5jjuvkMYN1HFsyE74kThF/ + K/PUqGLMqsrVoZLEriI7jqZGBWNZdaEONcSrtcUiAJtQU2RQrJb7daVSFlqEYF5nlUWxZpJOWRtYZgY3 + V1rRLiVc60iq60mAifW7Gp3oIqbtYtzuYG7ubLbyvBzoFRGk24eRaAZGBzIx2pfJ60xGtJsE+v8oAGd8 + SgAWghhsc6CdvinWxmO3SinEViu66fs9PT4McCwMrQnAMgN4eIBcpr8EIwPViHaVo648DfmZdmSnGpBJ + 0pvBPpfyWZWlGrQ22fhfiZgYTcbCXBo2bJC1pZOwsOShubGw4sTiCvdX6H8rSdz/PwnAKZjdkIG5pVy+ + LsbQeC6a2zzKGm0p6fHw+uPgSohTSkBbbGraugCs/dcCsGxNNHNsa+Bro0WtlI62OQ1wOPVwug1wubRw + 2zVw2+KUmcBeiwqJtGQbxyi5WaYrDrleNYpSdKhIZ37MFBGYhDxVByn/XMOYLBhXBOCBeuLbgJc4yIuR + QAKGyeGk6lEz814Nc2J5Bi3LiNIcG4m+FRmpZqVEqT9R1tBWr1k8/Py/RG7lKXO3V0zE2ZgALKWe7XxP + 7O8CcJwi0q4LwGLyWUwIjkdimgHJIjjnOZR1gLMLEpCe44I/Q9a6NPLYmpjxPGICsA2+VCtcSeSr3nUB + WG4a8dz8amRn6tn/epQWxATgauUmNk2etmduDzQ5GQ9daCPOqaqORwlzipRvl5uRMgtK1uX6JwE4S41c + tmNRmQ1lxBeyFl95nR0V9dxvdHDfjKIKLQrITYsZM6s4BhtL6Mf8fnsxx1ShBaEiC4JixDGttDZ5n+fX + VmIhv7SghZwsUCoCjYM8zYyaAgPKOb6LZX128l6JaWKK8JsjN29iJsJ0Tp5esdz8mPibxZiQkhaHRMZz + H8dDesanBeD6EmIoxoh2xoNuqYDF+NdDLtxXxXjczLjUkYTlnjRaBnOoCMAc+2Um1DPmVErMKbCistCJ + imK3YpUlHuZq56cE4Egb44AiAKdiRhGA87E6XhQTgCdFAK7AaQtVMZuvwKG5MhyYLlaE4ENTxThtuuhj + O7Ruk4U4OFGI/eMF2DuW/2kbyVVs37DMFI7NFt4/ko39zKf7h9NxUCkPnYpDY2lrlq7YwVFuabI9MJKu + CMA7+pPWBGC3IgAvrwnAC5Ek5umYADywJgD3EotG6qX0s4j+zIHEcjJzV2b5tlaZGUOdjKV2tFSa0Fxu + IHYxooX4MqDsG5R7D61lcg9Ci+YSDRoK45U1f9fLPovgW8o8VUI/FCvnfmWWCMD8LjFuvVR9oE+I1eXQ + GPtqxZjXG/i6leO7o1SPLsHZ7OPeSj362N/9/O8oMa3Mjuyj747QhycabJhsIN8i7h3luYzmxWGUPjdO + n54k9p6stmOMGHuIcWOohnibuHu4nji+kTiEuXOMWGyqxUT/IXbujc0Clgftdg1YcWDIibPHPDhPBL0B + F/mXGefyexd1WnB52I5rowm4ZSQF98/l4b7ZPHx2Kgs38PVZPN528o0lco952gJx34Z6A+YbacR9C016 + 5WFUsQ31OizWEcfR5muJ44gHtihcxo6NPLdF/naKOXSM/TNB3DzLsb9Avr9QpcUc22WW1yXrGw+WE3Mx + fnRm6RFKE+FXS9OhjdaQrEEVY00xY04+41gGLVFwBU1uWnskTvnk4RZ9TABOZnzjfurHAjDzFC1dHrBJ + +tcCcLI/Jv4mM/6lpFqQlm5lHLIgiZ8lpVg/JQBLuegUHiOd8TiXeaiK59zO8d1Xy1gfSMZYqx/DLT5i + ZQ991I72SjuClQ4Eq11orXCimPkrn3Ein3GiaE0ALlAE4HiepzxMxdjD12I5GfFK6dVPC8BaZWZeGf29 + kvFVKsw0N/M/gsQMXV5Emef7wx7iVTexqgMzPXYsEgetDDixTKwzE9RhjHh5kJxomNh5kVx9JzH26cMe + nEVfOXfs7wLw2eN+7BkgVmon/q2Jp++KyKtCB3lDJ/u0k33axf1uvtdTrEEPMUCU4ytaTp//hAA8vr4O + cDuxOXnqCnH0Uo8Fiz1mzBFDT0eMf5/9KyJ1rwkzUSNmyBUmIxp+Tl7Qr8XyCH17wYu9G5KwZ4nb5USc + vpqMs3ak4bx9uTjvQBH2bk7H/IQb4SAxJTFxd5sFY/3pGAynKDOA24nFw13EScRE/f2J6B/wIDpkRy/x + de8Q8fyUHZMbk2kZ6J/xI9jvRrMIQkEHaonlq4jJ8hk7sovYL7zG/GrmvyqNYkX065Ia5pEGC2r5P/Wt + 7k8JwEWM/6WMBRXkt1Uc1/V1LjTIWu/0k4pSM/uVeII5q5K5Skx5eKjcgZoSG/OrAYWMMQWMU7KOcR3z + ZxtjieSRiVoDVlts2N/NPhxIwpEhP84e9nPfh4P0gd3tZmwlV9tcF4et9WplRv+BdhsOE/Od2enF4XY3 + DjbbsKvOiG28ni20TTzmMsfwgqwxzLE/XKNmn5I3V6sxyN+PtDMGyUP/bQYE6EcN5NltIQ2CYR3aye9a + e2h9MWvp1aOxW4ta9kkleVqliL/E7WXE/SWNtHotiutkDWDmTPL7omoLihjvikQArrAihxghnbwhVQRg + xtcMtmUmY2yWIgAzB5NXrYu+OdXcrzEih5bLGJvH48nrzHLyYvqqjzE+MTtmIgBLGehc+mtx7doMYBGA + ecxC5owi5pMSnoPMBK5gX5XW2hUBOJvYRkpAS3lnmfkr4q+HJjOCU/l+FrFLZgHPkbgkmxgnh+ebw7GR + TcspjZWcLuW4rQ64lZm/DUGvsl9KjPOpEtD//wrA8kCMT2b/xiFVZh6So8gDa4VF8tAB/7Ncq6wDnMtr + F762PgtYXhfmy3JfstQOfbDMrIjAJTz/QsabfHkgjscqEAE4kxiOMas8g7EvkxyM1ynLgQ3QpyfqGc8b + mMvqyMHk4Yvy2EMmQzXMaU1aTLcaMU8eN0+/WeiwKmLwxh7m/IiL7/H35PSj5K5SFn5l0I6t425sG3Nj + E8fnUtSE+W69wuVX+qx834m9U24cmnXh9DknDk5bsH9Mh71DauwdVOO0USPOm3fjUvKPi5d9OGfawc/0 + xBcqyJrifUHGsZAKwV4t2jn2mwdsaGSMbCJvbOQ5NUXcCEQ8CBCPiInw29KTiNZoEjrIqXrGstE3VYCw + IgAnsO/MNPFb2XLsNrtR3+5DcyiZ3CVmMhu4oUVKiSfTktDYmoLOSCH5fDGCXXlobs1ES2sGQu1ZPLdM + BDvTEOpMR6grDR20YIeUkfajtt6NYvZTHseEiL75xK/5jB158jDiJwVgERVpH4u/9NH1ssVisZmsIvzK + Pr/Pz9LSRADmGCwSAdjzCQE4gdfw/yAAs82CYXJaxh2xDvZt15oArBh5ePeAiMEu9I540DdG3DqaiDB5 + f2dUZgA7UEdOWkxfzeNYzyJXEnG7kLi9vNyJ6ionamqI2cmXZUmYVpkBHBAROAlBblsaEtBYxZgpZfXp + m1IyuYTcorzQiHLyjFjuNKCMsUN8vZxjuZjfEw77rwTggky2sZR0Jr+TWdUi9ro49pw0B8edCMDyIJoI + wBlZhpj4Sz4ky8HkFohIb0B2tkzG0LFv9MgjL5DSz+n8/rroq5R+psl+Ci2d/SD/WSgV/vLYFvmMQ+QA + pXJPttiMqhIj8b/x7wJw478SgL2IBBPQ1mhFT2cidmxuxJWXzEL14mY3vrjFq5TO/NquFHxzdzr+bU8G + vi22KwPf2JqClzhgviilnxf53SWXYs/N25SZwU9PmfDMpAnPz5jw3JwVzy3ws8UEvLCUiOcXfXhKROAx + Ox4cMuPeASPuGNDjlkEtru/X4EYOyoc2peHBDcm4c9SOO5jk7+uz4/FhN56e9OLZOf5+3odH57y4Z9qD + m3icKwdt+Ey/A5/pc+GqoUTcMJ6MG8eSce1AIj7T68b5ESfOoeOcOejAAYKVjcEkjNYkEnj7EKlKRndt + JrrqckkK8tHRkIdocyGGA4WYaMzHNN+brszCbEUG5kpTMV+chLkiN2YK3ZguSsBEcSLGytIxVJ6D/spC + hKuKEaouR0tVJZqrq9n45WisLEWgqoTvFaCtZk0AbuJ/tJVgPFTBYFaBha4qbsvQ15DNoOlCuscE95oA + 7DQYkKRnktCrUW5VoYUO0EfnWyLoO4NE9Sgd/6pKC64j6bmRA+PGZg1uJoC7lXYH7aFmFY61qfA5BrUv + M7h9O6rBj8ds+PWyH7/fkY1fb8/EjzYn4xsETs+Mu3AlE/AeAnuZ4TRDpxshkB50MbG7tYjyvCIJJvT4 + jBhOEQFYh83FauxiID9QHYfT61Q4i8n+TAb18wjmL6Ndw2PdVqbGvTy/+9oTcGtXEq6JJLNv0nBBJB2n + h5Kws4kBnkl4QNYMKYpHM48Z4AAUCzJxBBk0gyQCUropUGFW1ltrINGqF0GVoKeNZCvI/SCTd0cBgWgJ + CVQNwWyjC8vNHpINDzZzfyvB1tZak/Lk6jae4xkt8bhKZqTPu/DC7lT88Gg5fntjM/52RytO3NWKt26r + w8kbyvDOdQV495ocvH1NJl6/Lh2v3piF12/JwYlbinHylkqcvL0Bf7q2Cj+5IBtfOWDH8c1a3DUWj6u7 + 43B2kxrLTKq9JInNDCD1BOo1JO21+QR4+QT9hSIAmxVxZJrXIGspX9oUhweiKnxlXoNfHbDhlQvdisB1 + 4lov/8uLdx9NxckXsvDONwvx4U+qgZ/X4NR/lOGj7+Thgy/58faTLrx+nwWv3mrCq9cZ8frVFrzxGQve + vNSEk5fb8MZlDvz5Ejt+eoYe/7YrHi/t0OH5LXo8sVGDx1bV+MKZVvzg+mT8/ngZPviPyJoAPA98NIdT + J/rx4Z9a8dEvy3DqB1nAN9YE4M+n4+3j2fjdzT5843QL7p5S4SIm0KNdRlw/nYH7d9fjqQt78KXrpnD8 + smHcuL8Nu/ozMMD+DJHctRWaSJTM6CERGm78uwA8Qp+YJrDcTLB5Wpcd5/fYSFI1uDKiYhur8aUdVvzi + giS8fnMOPrw/H7g/DXjIDzySBDzhx6ljfnz0ZDKN2yeScOpRH/BwYkwkfsAN3OfGqXudOHW3HR/dbcWp + +63AYy7gWALwVCrwTCY+eioTbz+RjjceTcZrjyfhTSkn/XwSPvgij/dV/s/XeDwRgGXL9j/1fDI+fDIF + 7z+SgRN3p+FvNyThr1cm4Q+XevG7y9z4n6sS6ENJOHGTH29c4cKrR4145QItTcfXZrx1iwdv3p+MN57K + xokvFuPEN8pw8tuVePt7VXj3eyIA17Cva4F/a8A7X6zGiWcr8OfHCvGz21PwffrIy1f58N0raJf68dWz + PPjcTjOe2mTAY0tGPLwtAQ/uTcdt21JwxRKBz5QHu/tsmGvRYKhOjUi1Dh0Eym0cbwEC26YmJ1o7EhBk + 8u5h8p4IWTFHoCZr9sy1aWhqkrd4jDQSzBHkd3D8t4sxFnQGdEwy9G0m7b6QBX0kGv0kBIP8/ijj0ixt + UwtjRyf9ZECFB5e0eHmvHX847x8E4Ms1+PPFGvzpQg3+cH4c/nSuFn86YqHZ8JcjDrx2nhMnL3Xgg6u9 + +OjaVLx7ZTr+ejQNvzwrjfnKi+MzTiWXXNEWhyvCatw6YcUTOxLx9Qsz8f2rU/CjmxLxs8+68Iu7E/CT + O1Lx49tS8aM7vPh3vvfdWy342jUmvHihCZ873YxnN2jwSC/jKn370XYVngqq8YxUXWgx4EmS2EdbdXig + XYt72Tb3h3R4ggT2yTDbP0LrpnXydYdBmQn8WIcRD3B7Z8iIG/j9q2hH+duzWrQ41KTDvhYLdpG4bW+1 + Y5XgakvIi+VWD2YIJNfLQI+UqTBeGY9ZEqRFjpElkrGlJj23BMnNemxnu+8h0DpAcHXGsA+HR5JxcDAJ + uyIJ2MJ+3dzmxhLB6Dz7eYLAdICkVQTgZpL2TwrAshZMOvNObjbJghDQcjtqquQpO4ciYLXIjEZauJnH + aHRgsMGJEYKwUfrQSLn5YwF4WMTfIh3GCd5kpu26ALyBRETEX7FNJBWrjO+fFIA3k2ytVFmwyFw3VabH + MAl2lOcWZsyMMGaOMP/ItR9qtuCiFiuuCVpxU8iAu9gHD4XicDwYjyc743EfieaNHWp8hkTifPrsYfqp + CMCrzGELzFXjvOZ+5pEwr7ebOTBCItSXFaeIwAOM3yMEeaMEZmPMjdP8zjyvQcpGyw2xzdzu4fnIGvjX + t9I/RrT4zm43fnOel77sx4e3Mi7d7sZHtxrx7vVqnLhahdcvV+E12uuXqWlavH6xGW8eteOkCMDnJuCj + sxm3TkvC+3sY97c58e6KBSeXrXhtkxP/uyURv9yeipe3puHxcTsu45jcVW3ABPNLF8F8vS8OZQSf2QSh + igDsj1ee7kxJ0yCNJE3WhskUAC2zmQoJZtmOQgDFigpiVkIrpVXwPRGCa3mdIgKLANzMrawB3M743FGl + Rne1FuE6LSL1GvQ0xhPnxGGQY1wE4HGOFVkDeJrjRkwE4A0yu7fXgE19RmzuNylbeb3SQ/8N67DAOD8f + isdcexzmxaTkc4dWmSGwlbhw54ALu4j7dvSKOWMWJjHsNGOZ40jWB55k/84QBy0S1ywGtViiP0gZqXke + Z55EcoGkcYb7cn6D/H4fvzvQxP7l7yc7rZjqdCklrYdD9Ol2O6JtzFEc671txEPtOvTTx4aY44a7jRgJ + mzDCcxvrNWG0R/YNjHuMqTK7tl2Dbo7vLsaKzjYB5BYFlMssy/ZWJ9pbpKyTgHgSAfqaiL4C+L3sNymf + LOKplIeuqNSgOWBEMGhCd7cF4R4zCZaZZIuxdcjGrRUd9HEp6VzHaxHhV0xmAFfzdUwAlhLQepJJfo+x + ONjBc5M1zkh0pfTzPDH2/EIipmZcfO3AxIQDk1NOxUQMnpkVk1nCiZhbTMIMt2MTbmUWct8Az4vXHWI7 + NzOGVdEnRASWcqmyznG6CDiy7g0tjfFESKdspdS1zKgrJvarqNCiplaPBo7nANu6hbmppYU4ry0e/QN2 + zEynYetqGfbtrsPGlXzMTqVhpF/WrDWik+28bt3s73CHnu2vZZur0UE/jAR1GGK7jUXtGI/aMNFjVWy6 + z4n5IRcWyDUWhj2KyWtFAO6WfuSxREyuZ9tVx6OBsbeGY6IqPx7lOZqYMTaWSXxkvCjNVqOUca0iX4dK + EX2LTRw7JGfcryzUo5qvq4lja0uNqCs1oV4epqE1cL+hzIxGWlO5hbmUZJmEfn2N4FC9I2aNNrTXWxFs + sKCz2YZwqwt9JHVDPWyLaIay7evyI9qVqJSB/n8RgKVEVGuAeb/ZhGYxEsdm5pQW8gqZERyW3w6kQVn/ + dygHQ0P5GB0qwuhgGcaGatgHtSTZ+agsSURBjpk5Q6s8OCTrh9WwTyU/DPX7MD2RgsXFdGzYkIIFcsNZ + csTZDQ7MLzmwQC65uOyl+bDhXwjACyIAL0kZ6HTML+diw6ZSjE7loY0ktrTSjKRUWe9MBbtLBYs9DiZb + PMyOdQFY908CsMYUM605HjqLGjqrmt/TwGTXweI08DgmOFwGxewuHRw8lsuhRqKYzFwnJ0vhNp3/l+mO + R643HiWpelRmsK+zTKjIYH+nqVGVRtyfQd9h/4sA3N/AmBJwY6TFo6wJKtbH/m0rN6KWObCE46OY7VeU + ZUF+pg2ZqVZlJlqiRwOvR4UET9yaqeCRGw1yk4/mTIhT7NMzP9YEYL62JrA9+Duze91UisnNQrlp6Pbx + +MkGpGRYkZ7jUMTftGwnUrNs8Kdb4OE5uBJ1yqw6l5RGTbPAl2qGi+/bEzXK8eV/vUlSDk2NzKzYTY1S + 4nsRgCsKDcpspTLGubISqWggDxkIjpByz3EoZA5V1qLj2JJ1EAtLjNw3Mk/FBGA//SktW4MctmNRuQ2l + 1XLz1YmyejtKxersKCZ+zSvRILcgDjIjroLjrb7UipZyB9pKaMV28kwbuZcFrQVmNOfRz/NNaKI15nM8 + 5nJ88r+Ep9UXWVBdYOI45znzdXGOXhGAc8njcnLWZv7ydU6OiLqxG27ZclNHsZj4KyWrZa0yDzFDYgrj + XrruHwRgGwKMB23EOx1sE3kIWjCYLI0z0mjHdBvHQ7cfi13JmGpLwEC9DR2lBp5nPKr43xU874oCmQEs + IrATlaVuVJfZUVdhR0DiR5MHPUEfBhgPxhkXYgJwHjaPF2J1rBC7pkqwf7b87wKw2GIlTpsrw6G5chym + nT5bErO5Er4uVew0vj40U4pD/P2ByaJP2b6xAuzjf+wZycPuoVzsGsjC7oEMcr5UWgr2DCRjz6Af+4ZT + Pm1DKdhL2yM2GLPt/X6sRoh9uzz/IAD7MNPt+1gAjjZaiT9M6KjRcxzFo4k+JLN262giALdVW9BFXtlB + zNpaxT6vMCiisFhLJeNcuYjAWuKaeDSXMMYXMm7xt5XEgyLyVnxC/C0WY96SmcBVWfGoL6Av07fl4Y1K + xn8xuQFeSYwoM6Gq+NtqWj2P1cyc0cJjB4vi0UU/jbDPIyXsc2JamSnZzfdlnVSZDTxSY8FwJXMz8Vkf + fxvlsfqJAwY4fobLTBiuYizh+Q/w2vppMqN4oM5II0auN2CMXGC63YBFcpBlYpOVsBFboxbs7bfjtCE3 + DhNDnRax4lBIj0PEJmeRr13Y7cRlUS+uZn/cMJaK64b9uHLAi4siLqXkswi/E2zbMW4nmd8n6/WYZJ6Y + ok3z/+Ya9coDqfPkJHO1xGHVGkxXE+fzfFY41pebmG9lSS+O9T7iZbkueUB+oiQOk/T7yXINjRyhwoIR + xsq+Miu6OE6D2Ua0cey0pYnpEUhl/vSrUcK4lSMx2EHMxDjssqlg476TcSjBJw+q6OBmTHP7Ze1evRJH + U5MMSPcZkMHXYmnJeqTwuyIAy/q/nxSAU/i7mPhrRjrjYgbjcVqmHSmKEGyFT2YD05KSjPB5tUhmrBW8 + nc08VEq83cCYIdUFhhoSGef9GG1PxkBLErrr3OispSnrAHvRXu1BkZR1JCYSAVjW/hXxV2b9ZjGWylr6 + mcnxyOIxZQaQWPY/CcA6BUOKAFxRqkddjQmBJjtCQf6HLOHU6UZvyEk8Y8dwhxWT5KRz7P8lYiGZdTtP + P5gibh8nVpwmTtzeY8Npowk4MuHDueNenE8TAfi8cR+OjPuxK0osSJ4/UEVsRX4QYj+GOGa6aN2M4xF5 + SFeW6CnToa+cHJDWz3H3SQF4IkAM3mogvid/5fmsyPkQk8m6xHP0WRGA12cAz0TNmOwRQdiAKdqECMA9 + aiwM6LA8YsEWYtad8wk0N3YterB/ow+nbU3BmbuzcPa+fOxeFQHYgzDxvQjAHQEzhnpTEO1MQjPbqq3Z + gXCXl7jaSywrVW2Yl0dd6B+1o3fUiuiUDSNLPowsp6BnKhGhQQ9aejxoZLs2MA5VtzhRUM34LrmMcaio + jnmKY1GsuFaHwmo9SmqlDLQNNfyvqjrmMEUAZt+VGYjvzagmD6ghFmho4DEVAZh5s8SEMuY8mZEmpizd + w/xRK6JHCfMeY0+B8Di2uzy4Wy0PcZep6XcajHCsbSIv3xfieCfvP7MnAYd7vTiD24OdDuxuMWNbowZb + a+Oxg32yp8HEWGDHGfSZM5lvDjc7caDOjJ1VBmwt02JzBdu6So/FWgNm600Yk3u3leR95ILhinj0ctz3 + t5jIlxhv6RuN5Nd1bOsAMXhrpxYtXeQw3bQIY21Eh6awFnUhDara4lBBjF7VokZZgGOHfljUwHbkeRXU + kEMw1hTWmtiuFpoNBVV25FVYkUWMkFqgQTLzoQjA6YynGWXMvYzn2RV65DB+fiwA13Cf7S+Wx1whJvtZ + FRzz9N9ExiMv46tYEvfTGZNz6LNFws3YV1LCVwTagkoT8mmFlRYUsX9kXeKiaivyiUkyiVdSmZeTGP9l + 7d91kzWBk2Vd1jxZr1jWg+Xv+VsRskXUluPKmsM5UgK8mv3b6FTEw9pWj7Iv38srtfzfBeA1PCdbG20d + BzoZj7z+ePiF/2fzHIhnChgriokl5KGDCvZvEWNwDuNxFq9f1geWh3JlaaKiQsZZnlsFOUolr1nKkxcX + 0Z/Z7vnkOSKQFfLaimilWeRCkv8Yk1qIvTqJafvZZ6MNVow2crwxX/TVxiFSqUJPBXMZ+1epAtBqwlTQ + gqkQxzz57VzIQtzjxEKXHVPteowE4jDQzLwT5HjvsxC7eBRbGXYyflkx2y0VA0zY0O/A6jhz1YwX++e9 + OMA4sG/Wjj2TJuwa0WPXoA77R4w4c8aJcxcTcR7H8xnTTuwYMmAhrMJ4B/04qEI7t21RHVrJiwPkto1D + TjQPuBHo8yAQTUALc2SgNwEBjiOxFo6pILFN90gm+ibzMDhbHBOA2z30HRNKOIbEf0vJ26rJ9xuCiWgK + JaOp3a9YY1syGlpTUNviR20gSdkP95Ug3F+GjkgRQl2FtHx0dOaisysHHeFMWhY/y0B3L7fcD/A4NQ30 + FRGA2beFxWYUldK/iH8LyT/z8oilFQGY/i0CI02ES5kNLCairwiWImTKA1Qi+q7PCpb7RunMv7k5FvJ0 + KQEdE4ADrWKJHN+xNYD/vwTgUMSD9rCL5lAsREzR0cMcGBWBl/u9NGVrV8pB9436aDwG46x83iYluANs + S8agvCLi7gKtIm6Xlsv5uFHHeFnP2NlInBcTgL1oCzBOt/oQ4ra9gX1W6SQfIPbmOCzL0pK764ihie/z + 5UFVLUpoxcyfsga7VNOQ1/kyJjgWZCk8ZQ1gbpV1rzkGs8jt1gVg4Z4OjkEbzc6xJwKwlM6W9hMBOJO4 + PzuXsYd8qKCYfcIYnk/8nkcOImJwroxLHjNFBHceK0l+yz5Zt3RigyzySZn1W8LflRVKZQgbc4Kdxmsq + ETOhRqqoVeo/FoClBPQ/C8AetokdfWE/dm8N4JrPLED1LIn45zcn4Cs7kvHNvZn47r5cfIf23T3Z+M6e + LHxrewa+sSUNX9uUhC8vJeBLS26aC8/PWfHslBHPTZvx4qwFX1yw8H0HXuJnL2304GubvfjKRi8+v8GD + Z2dseHLCjEdGDbhnRIc7RjS4cSgeN43p8fDmVDy0nIy7Jxy4e8iEB4fseGLMjaenvHhmzofjCz48spCI + +ziwbxp34IpBKy7rt+HSPgeuHEogYPXz/WTcNJyEKzlIL6CDHelx4sx+N/ZzwM5ycPSXuRCp8JKI+9Fd + nY6u2mwCsUz0NGZjuqsMG8Ll2NhRgs3tRdjYnIvNDVnYXJuGzdUp2FSZiOVKHxbLST7K/ZioyCBIzSP4 + LkK4ugTB6koEqirRVF2N+spyNFSUoLmyBIHqArTV5hP0FaCvuRgj7WUkLlWY7apikKvBXHcVBpoKUZ2d + gIwEMzyWNQHYaESigUBVTye0kITQqUQEHuDAXcnQYXeWDofztTiHCe8iKXnJYHoZk+0VtGtrVbijUYX7 + mlQ41qrCc+0qvNQZh+/2m/BTtuV/rWbipwRE31r0KbN/Hx604fy6eGxkwB+j8/XRibsIrEME1C32eLQ6 + 9Wh3G9HpNaGfgHmORHkrCcw+BvHD/L9zCRqP8v8uZMKXNYCvIEG4hiD/ptI43EaQcCsBz9WtblzcnoBz + Oxh0O1Owu9WLlToHwb4OYSbgZgJIIV6NBK8NtOYKI9uTJJ3JtYnWIDfKSo2oZaKvyyNRyyOoIMkPMkEF + Saw6ZS3LChPGGQRmGACWAglYIQHexP1V9v1mBuKVCjU2EqzsrlPhjFY1PtOnw23TNhzfkYJvnl2En11W + jf+9rh5/u74Or11VireuKsA7V+Xinauz8ObVmXj9qjS+n4rXr8jCG1cW4PVrKvHbi0vw8uF0PLfFgvum + 43BtjwrnEcTsqYzDFJNpiEGjmoO3Qp7sz9QxOVpRm2tHK4l7NxP6IBOpCMB72QZXEwA91h+Pf1vU4/eH + nHjjQg/euiwRb13rw9u3+/Deo+l453M5ePtbxfjolw3Ar+uVNXlP/aAQH30lFe897cGbD9rw+u0WvHa9 + CW9cY8YbnzHjxGVmvHOFHW9d4cDfuP3NRSb87Hwz/uNCG14+14avnmnGFw4b8G9HnfjpLan44/EyfPij + CPCnCeDteeDDOeDEwN8F4B9m49S/pQBfScOHX8jEySdz8OvrvfjyQRNuG+f1t9FkZuNECu7eWYNj53Xj + hatH8OjRKK7a2YQtPWmIlpHYMZC1FZqVJ2XDDM6xEtDOjwXgqYo4bCRo2B+y4ki3FecTLF4ejsMdw/H4 + wlYbfnFeMl6/uQB4sISWDTyUCjxCezwVp55IxqljKYoQfOqxJL4vArCX30sAHnAB99HudQB32XHqLhv3 + rfy9m79NBI7//wj76zjZrjJrHG8r96qu9mr3Lunqqi7pLml3d+++t6+75saTG/eEhIQQT4iQEIgnkOAB + hgGGAYZBhhmcIRB3v+u7nlN9k8D7vr/fH8/nnLJT5+z9yFpnnb13CfBYOT58pBxvf7EEr96fj5ceyMGr + Dznx1uM5eO8Zfufk6F/FuP+NQuArLnzwaCHe/2Ix3ua5vH5XPt65y4W37yzGG3cW8nUh3ru3BB/cXYzX + P+3Ay5cb8fxFapoGr1xjwZu35eON+0vwxpM1ePvZRrz1r0G8++9hvPvTMN759yDe+1EAH/C9D78bxJtP + e/Da4w14/ou1+C2P/183F9FK8N+3VOC/P1uNf7+kCM+e6sBX95nxpS163LnFgs8yv1+yYsVpkwbsGzIo + 6+5Mt6oIyrLQ06RGx0cCMI1EJdFpQ3svi3EvY6rNgE0Ea2utGdgcT1fW8V2ln88x9seYb/pIBLto7cwH + HRFZM5GET0YBk2wOJ1MC8DiB3BSB3BJtb3cazhqmz8+l4+Gdavz4sAF/OW7HS/KgwtV6vHKVBi9enonn + LsrAc+en47nz0vC34yr8/Rw9zYQXzjbh5eMmvHmpCe9fbccHV+fircvy8bfz8vHrUwvxza3Z+MKUGTd0 + aXFJPANXkHB8ZtaE+3c68fRZRfjOxXn416vs+PfrLfjJDTb84Jp8fP/qPHz3Gtasa1gLGTOPHtfh80c0 + uHe7BvdMZuE2gsM7eM13074Qz8JDMS2+FNPhQV7r/RsC8N3JLNzbqcKD3Wo81KPBo706PNatx+OdOjza + pcPDXQY82GnAvdze1qHHdQn6dEKFC/j7M3icoy1aHGbR3h+3YhdtW8KObe05WCNwnBcBmIRLpoEWEXiK + 8bEQVCk3XdbEouyfiIp5T429bPtDBFjHSGbPmnLhDNqx0ULsJ1jd1ZWDHe1ObE04sRazYz5ixiiJnTIC + mCRSpoBW1gAuTwnAZQQ89SQ3fnnquInkpJmAuJWgLGlHIkkwl7Shn8RxNGbDON+farGnBGCShVECKVkD + eIyk4WMBOPNjAZimjP7l9qQAvIPf20lyspP5fDtrwNYmI1Z8vHYC2xGeV38Z/Y25dYw5c5G5fHdLFi4i + abihy4Tb6NN3k1g+SJL5eD/zRH8mnhlS4eFRLe5kvv9MtwqXtWXg9JMCMGvYEo8zQQItD+t083q7mLN7 + uB3k62ESmmHujxPkjTOPy3TQc3x/gTVniTVumf2wib/fSaB4Kl9fwni4YyQT39vvwP+cn4NXrmMeupO5 + 8k47Ttyux3s3ZeKN69MY72l46UraZRl46dIsvHwxc/WFzNHnW/Hu8RycOIc57DTmi0O5igD8xmY9Xl7V + 4m+bjfj9Vht+tSsf/7bbhUcXbfhUj45EXY/5Wg26iQ+CJH4egvhKglAXtwIq5UnEQgJWV6lMSZNJQEoA + W52OavZFTW26cvNdTMTfOvZ/Pa2B5qX56BNBXmMzr1UE4BgtyXZrZ7x3NKWjk7WuO5hBjENyF03HYGs6 + fSElAM8wZmY3xF+x5Z4MrLJ/tgzosFXW/mUekq2Iv5v7NFhl/yx3ZmKxPR2ybvBiMh1LJH6bumSdYDN2 + DWdj/1gu9o/mYN+wE/uHcmhO7CGp2MH+35RUpwTgMP+P22XG1wrjcqVdjYVkJuaSGZiXkb7tKsxwf4Ln + OERf6GPe6ud2WMTruArDUQ0GGFMDjMfBmAEDcR0GEhoM8lhD/O1I54YAzPiWEb8zJKKzQyZFBJ7gdQx1 + sC14/t3MeV3MlzKFcHdCi07mwpMicLtMtRvPRkvYAr9HjzrGgMSaEAARd2S0rIwELqO/uxnzUZ5LW5sO + 3d0GdPXpSK70JFo8t1GDst/exfjlf4bZBwFaM/NsiP0gFmXelpG/yQ4t2tt4HLZHD48hI3cnJki057IV + AXhhIRvTMxZMTZkwPSlmxgxfiyA8N2dV3pfXqVHBTkzP2jHB90aI2Xv7VWjvyERrSyZCYTUCATU8zCn1 + dRnKNNf19aoNyyD5Sed7GfD5ZOSvCl7W+0bis0AwCxHmsQTbqo1t3cbjddEGBw2YnyvAru31OHqwWdmu + r5VjfiYf4+QBQ/1aDPWxr2gj/XqMsh8GuzUk9Blsd/Yt+2ycuWGK/TQzkBJ/Z/tMWBi0YWl0QwSWkcDj + DiyO2DHN74x285hsp95WYkzi6xjzbTNjvIm5opH401ORBU85txvWUC5r92XALaKw8nSxVpnyNkjSKSMf + ZZqm1BPHGpI1rTIa+KQFZaRwgx5hfl9E4CRzbEoAJmmWdYFDsj6wmWZCgvgoGaIfRUnumHMHmMtl1O9o + nwsjvambmgOdKQG4vydXEX8H+04KwMUYFxF4uBiyLuBAb64yDW+shf8b0Srie0S2YS1iMgq4jTiV3zkp + AI/QxsaqMDXZgLkpP2YnmzEzGeHxPSScpfC5raghma2kz0ouCbJetSXMGBvNw/x8EVbXSmmFWFx2YGHZ + hsVVC5bX2P5rbH/yyo8F4LwNS+2vbinE8uYiLG8q5rYSa9s8mJyvJj7JhY94JZf5TYRQE3mLwZQGPXmL + yaaG0ar9SABW69IVU6Z81qfspACsMWVBZ1bDwO8b7TpFALbI1qZTjmOhyZTQObYs5FkzkEduVGRNQ6kj + HRXZ9OX8LHiL1croX3+5Do1lGvhJ6JuYb0P0iST7t7vJhCFykRHW3FHWc7Exxv9g1M48So4jN3orGB+l + KtSVGVICcJEJ+XlaOB2ZcJCX2cXIBRXjvtx0kBsOighMkxt/Jprc/JN95YYgv2Owp0PHrawVp2UbaXnu + sq+sHSfHcWbAkadmO+pRUGKCq9yqWHGlRRGBnQVafq6Bg9cpa2vmufTKd1MCcGZqNDH/y8nP8wrlpkdq + 2rmGOj393Qg3a5MiVDBuZHRusElHH2NsEL/IDBTVrDPV9JcqbiuYG6qJAeQJ/xIZRct6JQKw7FexHVMC + cGoEsKyb56E1NFtQS7xQyfxSWZOp/JeP7RnymBm3NiQ8xCpubhusiNebyTdNiFYbEa0S4ZdxWsG2L2U8 + u9Lh5dZfLWvsMlartXCT79ZViqCdhUr2ZbmIwPIAlZwPP5PrrKpJib9yc1WmeZPRyoU8Vg7zt4y+EQHY + JaMoeJx68j4/2yTUQJzNmE8wH8jo0C6vCt3ulAA8LqNA6RuLHXm0HMzE7axTMm21Gs3EGl7iEncV8yav + QbkRVC81xIomrxnNjWa0BJkz6Gu9bYzdLhGASxQBePN0NbbN1GPHdD32L3hxeKkRp6w24ShNtsc2+XHq + aiNOXWvC6ZtoKz7FTlvxcpuyU5c9ikh8TETgeffHNufBIR734EQt9o9XY99IJXYPlWP3YAnNRSvA3qF8 + vp+viMCftP0jBXy/EHuG+R1uZX8XbcdAHjb3yFSQTmzqJw7uz8NyXy4WmNdEAB5uNaOfftRJ/pJk/YgR + o0ToRyIAh2kt7iwkm/ToCrPeNssMCzL9voY8hzmUJoJwnK9j3iy0eNIREZxDH/QTX55c71fE3o/EX5pM + 1SuCcID5P8J8LhZkXzSWpdOH+Bt+5uX3fJ8wWRexmbhRhOAYz6uN9bCDWLiTNbCN/5cgrpWH2WW63NRo + YGIIGTVJbNbLc5GHEgWT9ldlYJCxMUxfH/TrMUR8LDbYxFoVoAU1GA1pMMEaOks+IaOAl4md1sg9tvQY + sGfAgoPDDhwasOEAOcheYp29rVk4QlxyVo8D5w04cdFQHi4cyMZ53Wac2U5sGSM288kIZGI6nqvMQDTW + lIVxEZsjxD9hPSZD/D/aYkiFJdpiUI35QBZmaYthHVbJJ5fCRozTv3vZBl1s1162hxxvsiETE3x/0pOF + SS/PnbxhzG/BoM+CLsZJW5UeraUatLpSFnWxvQuy0OBMRxlzvUzFn8OcZjEyzzEvW5n3svNUqenq5cEV + Wk6+WlnTt5g5rDiXeYWvFStQozCXOUtmVtgQgIt5/JMCcBHznKvYqIi/ZeUWlFYwL3K/qERGAuuQR8vP + lxHAWSgSAZjYTQTghsJ0Zer/OPNCPznTSEsuxpKFGKH1RXNoueiN5tHy0dbsVEb9VpFfVNO3algzRPyt + KiZOLyReZw4pKUhHKY8pM2uUMpeUF8toIOKoilSuE5Mb1sp0rR4VmgMyy4IZnR0OdCtr+1uIQY3oJV8d + TbLP2oiHyUnlAYFNxLBrxLMrysPdMuuOCkfHnTh7vhDnEXOdP5eLC2Zycf60E+dN55NPFigPXM6Td434 + 2Y/M3yL+dtB/e7gdIF8YIe4b8WVhtJG+KgJwI3GZ+HST6h8E4PmkFssd/H9i2vVeI9b6yPX6DIqgM9er + 3Rj9mxKAZ4jt5vp1mCVXmO7NVEYBL43QN4lTt85ZFBF454INu5Zs2LfZiYPbC3B0TwlO3V+JvTJ984wT + PcRzIgC3tTB+evLQ05aDsF+HFubWNlmipdNKLO3AAPHg0JQdIzM2DM1a0D9HjLnCfLOai57ZbLSPZyNB + 7tHS70S0x4lAmwV19P9KcqJ6Yl+3PNgU1SvWENaglvmpjuZjrmoUCxrQwPaoachiPSNWYAwHifGawzaE + I3ZybAuafDL6V7Mh7MsoNZl+Vx6k0iPAXO93W+BmjZOZnKR+ylqufuaOMNu+TcR3tv9KxIDd5BkH2i04 + lDThcLsVR4n3DvNaZWrn3WEVdgczsZe54xDP69SYFWfEsnFGiwOnkpccDuix10cu7lZhK2NzE895mbV7 + Lkiew3aTkd2d7nR0MHfKbFB9LeRJccGmKoToG0G2h/COOH0q1sUc253F9mLeJM8Lk68EycX85GBigURG + SgAmb6kjj65tZiwEiQWaRATW0QxsRxNqmBsq2TZlDYxP4omCStZW5tMS1tCU+KtDhV/DvhDB17BhIvx+ + LP6eFIAr/Fko5vl/JAAzN+Vxv5htWcFrE9G5gbhb/ruataOG9aLGL2Iwjdtqbqsbjagibi8lxnExHvNL + NwRgxrNiIrTxPRkdLGsB1zaa4Gm2wxtyEL/Y0RCQ9Yw1qGBtFwwjax03sf39LanRxfL9KrcR5bWmlABc + nKWs/ytTTAvW038Cx4n4K1uTGPcVAVhmRyhUobCE+U6EKOKU2joN3B6t4ndN7MsG+kslr7uc11/KvCyc + s5qx/LEArEdTkxFNvGYP27meeaaGbV/DNqutSEc9TR5+9RIbNVWyDtMvu3gtMiOcYJnxFiNGGPODIeZ/ + +kQvfUP2J1oZywnWjzYDJllrpshNZ9v1mO8yK4LwREJmFON3W5hTkulKTtg8bsf6ZDbWxm1YGTJjnjls + jjljedjKXGDH7sVc7FshzmCs7l/Kxl7mhj3TjIMJmSLagIPkskcWnTjG7xyct2PrOP25j7y/m3Wpi7WY + 28SQGvExI1rJjVv4PzFyw/ioE/GRHCXuRQQW4VcE4MRgLjpGitA3XYHhhTqML3nQO1bxDwJwvQjAstZ4 + wq6M7m7tKkJrRxFa2osQbSukuRBKFCEUL0QkWYy+ER96hn3o6KtHZ289Onrq0NZVifbuSnT0VvD9cnT0 + l6J7UITgMrTEc9FEnigCcA1zhpsY2esnNm4kNvYyZmr0/08BOI/49KTwK8KlbOV+UTHrV8rUKGX9rapi + zmqgb/6zAJzIRlung+coAjC550cCcD5zKXNsP9unz4kk8UWy16ZYe59dsY5+2RezbpiZ1y0CcD6tAP1j + OcoIYRkB3CwjgBtVzJkyCliWLzPRdx1obs5GhLEUYSxFoza00kQAbo/noYvn2B3LQ0eY/UYe0MI4kgc8 + G8vo0+SpjcTvXqmd1czDNVnKPQm3iMDEWA18LQJw5T8JwLIV8beM+L5UZtZjOyoPHzMGRQAW+2cBuJw8 + o6qG+auB+cTLvO2huc1oqDehVkYEkxeUsqbLw/+5/K0IwCengBaTml9FXiJTPnvrWD/YDz5ao0x/7aZf + eYw04iJ5kHhDAG5lDWpjzVeWcpJZ7LqdyoPhIgJ3J23KA1CH9yRw/VVrSHt40YSnNmfjG7td+P6hKvz4 + aD1+dLgWP9hfhe/vLce/7K7A93dxKyLweh6+tYnfXbHi6SUDvjKnxdOLenxzxYzvbLbg+1tt+PEOO36y + Jxu/2J+DX+zLxQ+3W/mZAV9b1eKJJR0eXNTivgUN7phT444lIx7cWYAvbM3HPYt23DtjxhembXhkzonH + FnPw6HIuHmIwP7ApF/duysdtSzm4asyEiwkKLuo34rJBC64dzcGNdJpbJl24acKFq0gozmeAnkMwe8pg + IVboHOONbAQ/QVdjAZOQC33NJSRVLiy2yXo2zThlKohTxv04ZZjEqL8eR7urWSwrcKStjMWyiMWyEOuB + PKwGirAQrMBkcy0Bdz16gl6SCT9amxoR8Tci5PMg3OhGi78e8UAdOkL16I+6MRzzYSLpx3R7APOdzQTm + ISx1hzAR9yFUXYAKpwlOIwm1VoVsvQG5OoJQrQZlOiZaUwb8NpIFBxMVSfYSHW8bE+6+OhVOYVCczmJ/ + NgnQ+Y1ZuMyfiWubM/HZUAY+F07DF1hMH2eB/Ua3Gj9ggvzJciG+v5yPZ6ateGhUj1t79DjVl4EVAs8R + Bn8HHThKQB0gmHZz67NmIuygM8koYILpRRLe3QQup/jScJxg6upYBq5PpOFa/tenmdw/403DDSQJnyYZ + u56A71NMgJdEzTgrasVhFrXdMSfWuJ0KmNHHwpcggAlVETBzK+s2BRvUJO46hJnMwix+Ys0sQDJyQvmM + 1yxr7ihPTrMYdXLb69Uq0yHNtTixFCNRpG3m/2xpzcZWJoR1ArxNfjXWeE5bGtOwkwXoMAvL2QQlV48b + 8cBWF75Jf//puT789qImPHexG69eWod3Lq/Fu1dU4q3Ly/HmZS68fmEBXjqvAC+eX46/XViPX5xRga/v + pm8uGnDjUAYuYjscYRtsrkvHcEk6Whm43nwWUZeaxJHJpkQHfxmJZ5UJ/dU6TNTIWphpOJXnJNPBPjah + xo+3GPC307PxxkU5/N88vHltPt6+rRDvfbEc7369Du/+pAn4Qxz4Ywvw39z/Dzfw3VK8/0Qu3nrAhtfv + MOPVGwyKAPzKZbrUCOArzXjzGgtepj13jRnPXZ+D/70pD7/7bB5++els/OhSA35ylQX/fasLLzzixYf/ + 3gP8ZRp4fRF4Zx54bRQfPpfEB//Nz35WgRM/KAGeLcOHX63C24/V4Lc3FOCrh3W4YTwNZ9HXzulU45rZ + Ity5L4gHj3fi8atGcO95vbhsRzO2dBehl4kwWUVCXm1AvJYEnklxmKBoLGTDBIn6pC8Tc40Z2ExQvT9p + xGkEA2eTtFxK0HjTSCa+stWKX57lwsvX1ePEXV7g3mp8eA/b4N5ivH9fIT58oBB4sIiWjxOfz8GJ+5y0 + 7I3Rv3bgLhtwpxW43QLcRruD+3dnp0TiLxUDD5fhgy+V4e0HXHj13hy8dI8drz7gwFsPOfDel53AN2jf + on2Tx/xmLk58LR8ffrkI7z1agPcfka0L7z5ahBNPlgFfrsSHT5Tig0fZZo9WAA+V4+07cvHqZ+z4+9VG + /I32+q15ePf+CrzzGP3tG414/19DeO/HUXzwnzF8+J+teP9nYbz3bwG+H8B7z/rx2lN1eOWRGrz8pRr8 + 9b5y/O+9FXju8zV4/n43/n6vD7+5rgL/dl4+vnXYii9t0+KWNQOuYX4+e1qL/UNZ2N6vxWonQXxEpiPL + QpdPhQ6C+zYStQSLR5sUDxEsOvTKE8Ob2nTY2arCTgL0ve3pOMC42S/rcIrgEmJOYi7oZ9yfFIG7olkY + ajdirNNCwklCH5M1f9IxT9/Y0pGGY8NpuGgqDTdvTsMzR1SMIy3+eoEZL19pwGtX6/DqlSq8eGkGnrsg + Dc8dT8Nfz6Mdz8Rfz1XT9Pg77YXz9fRtA96+yoa3r8zGqxc78eezc/CfR+iLrE93jxpxNc/v/NYMXDZA + 31yw4nM7nHjwkBNfPsuBb5zPenWZGd+7wopnL87B1y5w4snjVjx8pgn3n2LAbXu0+NRKJq4Yz8JVXRm4 + qiUdn45k4KaWTNxJ4HpvXI/7xBI63Esiew/JpYz+vbczC/e3Z+BL3D7ao8KTXRo82anBE116PNJlwkM9 + ZtxPAn0b96+Jq3Ex2/VcHu/UFpIwEsbDcSv2xW3Y3mLBZtpqixWLUQtmCNQnmd/HSFhGRbRke8/5Vcoo + 4GWSzmWSudWIir9RY0+nGQcJsI4SrB6TKZ9GcnGwPwd7erKxoyNl25LZzJGyDrsFY03MoW55qCaNuTiN + 4CgNDSQBVaVpqCgjuCdwCjTZEQzaEGKMtrQSZLXZkWyzopMAY6CdZJmgYpTHm2Run5Cp6UiOhupVGCJR + GCNZmyIwnWHunqtVYYFkaLlKhbVK9T8JwCrsILjbyZy+izl/JwnKjqAFK8wPE/y+jIQYIAAb5bmtMWce + IGk8pyMTtwwxhw+b8KVhPR4dVuPpUTW+xVz6/SkN/mVej28sm/DovAH3TenwWYL78+iHh0kwd7AOiIg7 + xmvuJ/Hp5nFFBO7ldoBtMExiM8x9ZRpo2nx5JhaqM7BUK5YSj1fq6dPM4fv4+iz6/vUD6fjqLgt+fV42 + XvlMPnMTc9G9zDd36/HhXSq8fUs6Xrk+DS9ek4bnr0zH3y/NxIuX6PDKhSa8cZ4V756XCxxnDjrDpQjA + b+5k3l7V4G/LWfgz8dN/bzbhFztz8ZN9JfjG1gLcMZWD87pysSVgQR9BaTOJnwjAVQSlIgAXcCtT+sho + pEK5kS4jgCtJRll7RACWEVP/LAArIjDbRBGA+V6A1xhkTf9IAGact9FkK0JwF9uyl/V/gFhgJJGF8WQG + SV06ZhjrHwnAnelY7M7AWp8WWwaN2Mo+28Y+k/1NfWqs9hDXMGYWGDtzSf4uISIw6yPjalOPCdsHbNg9 + SnI3XoD9o3LDmASO24Pc7u4lkWsnCWxl3QilYYbnMse4n49nEd9peEwSzVg6fTMNU9xOxzMxznw0EmW/ + B3j+9KVuXoeIwAPRDGLDTHQHSFZlZLMIwa3Mk4zVIdagobYsjDKmx7v1mOo3KMLvwogVC6M2zPJ6pmRU + bWcGBngNXcQYnbSeuAiRMgpYh07Ws04ZBRyzINlCwhK2IkiM4yYpl1iT6ZKVKZKzU0StjH7ZwLaP8DwS + zDUdzCNdvXr0DOqVUcB99PnuAS3JYRYSjIUEc1CclugkEW/LRAv7IpZUMV7V6GDO7+4yor/fjOFh5uYx + K6Ymed4zdiwsODFDTDgxYcTEuAFTJMCTYwZMTxFXzfA7/Gx0VEfTKiLx7Dzfo03PWjA+SWw4JAJwmrK2 + cAtzUDSSWiM8GNCiOahLrRkekq2GpI04rlmDcFhea0kqM9Hkz+A2ne9lIBFXsfawvVhj+nrUGB0RATgH + 27aUY//ueuzdWYsdWyuwacWFJfKEOfKFuSmez6QVc7TpERNG2Q+yhm8/69VwlwpTItSzr+YHTJjl9c+T + bC7Sp5ZGbFgetSu2NGLH3ADbgH07xDYcSKjQzVqWJKaWta8DjPvGqgz4mIs8iliXgTp5QKaUMVSWgVrm + h3oRhknoPLL+KclZk0fImgHuGi0aqlPEUsSppnq9Yv46nTJaMVBLAsfvhT3Eh8RCSZLaZMjOfStizKet + ASNNHorUIS4icNiE7ng2+trlqd7clPBLk21vWzb6O518zfd78jHcV4jh/kKMDBVjdLgEI4PFGOLrvp48 + tDN3R1l3pC+U/giLCKxHrNWItnYbekQ8HilRBODhkVJaOSYn67E4F8TyYhRLS60YH/Ojo6OSfe1QbkYr + 08cxb/iJ4eIxPUZG2UcLsnZ0CVbWCrCwnE1j7Vlh269mK7ayKQcrm3OxJtNDbyn4yFa3FmJtu4v77OtN + xVjcVM79eozPVaCtLweNIZMywsHMmFHEX5rJngWLQ7shAKug0WdCpdsY/SsCsDZdMZU+A2oZHWxSQWvW + wGDVwWjTw0Q7uTVY1TBbNbBxm2PXIM+hQr41Ay57Ojkb+zxPxF8t/CUaNJWxX0u1CJD0B8vVaKaPRNke + SfIZEYAHwjbmFysGWdNlO8BtX8SKjqAVrV55Ol2Hepk+mTyhstiAYpliNEeLbEcm7LZ02HiNNvIzEX6t + csPhpPG1mJFmkHag6a0poVcRfGlq8jkV2ybLQDPyNfd1/FzEYQuPb3WqFBHYWaBDQYlZEYBLqmworrQh + p0iH7AINTa2IwHlFWra5FvZ8Nay5GbAwZ9m5zS1Ss8bICFgtquRGYy19nn4t621VV2Yo68pVsJ7W1zJG + vGq4fenK6F8RfqvoLxWsOSVyI5KYoYyYwFWRgULGVVF5Bkp4jCq3HnWNMgW0DY3NNnhpHrmJyvar8RlR + RZxRwfauZny6+b8Bt5k1y4aYNxsxD83tQGu9HZEaKyLVFjSTfwSr9cq02+4SNeqKGM80N/vOLaN1KzSo + reC5l6tQztguL5UbOtyyXysY49U1BtSQv8jNnQr2XSnfLy6TURMydV4acuQGcH5KAC4qlmOoUUP+7GVu + kBHGLXVa8ljm5EY9ev068lgNBpt0rFM2zCQYM8RoswniKfLnAebRZF0GfYvtRywi0y7WV0hO4bnz/731 + RjTKAyesJZEm5otmMxIifMrMLF2FmBsuxaaZGuxY8GD3ghf7l/04uNKIQ6t+HOL28Iofp4gAvB7AmVtC + OHtbGOduD+OcbSGcxffO4GdnbmrCGWt+nLbG7aoIxDQe57SlRpy26MfReR8OT7txYLKONboae0cqsWe4 + jFaCPUNF2D/iwv6xQmW07ydt32gh9tB2DYsVcL8Iu0aLsWO4COv9ucrI37WBXKwO5mGZtsDX0x0ODLUa + 0EO+kiRfjDE/y9IU0bo0hOlLLWyruFeFNj9ro+RMvwatviyajAomvyGebmcebePv4/y95Pdm/q6pkpiH + PipirpcmYu9H4q9s+dpDfwxWy1rCMo23ESH6eiP7XRkp7OJ32O9u4i0xD62Rv/PzMxkNHGFujFWnI0Ec + meA2Rn9v5Xtx9ms7caSMBu5tyEoZ600nz6eD5yHWzf1e4rZ+jwb9PpkyXKdse3md/eRvg7yWkbAGY1EN + +ZaG/qPDHLnbUrseax1G7CBO2juQg719DuzuMGGrzBgUzsRu5mhFHCJvOEbOdqzNgKMxFfaR2+1gTV5k + jE6yXcfqie+86RgiDxExbyAoU5arMcL6OMkaPhfIwGIzMVyQmIufzbHGL0aIy+i/s2zzIbZvB9sgybbo + 4vUO1ZDL1BNPuVnjxbyyJrIJwwHmxiYbOr1mxGtYm8rUCLuIF1xahFysm0UauJl7KpiLC5iLHcxtJuY0 + nZL7ZSkAFWxiuWrFnMoU+mriYTWKaSV5jFO+JyKwCMAi/v6jAKxDUaEWxczBJSUfC8DllVbGvxnFpUbG + sw6FPB9ZW7iQebGEvy8tIJ7OJ19yyewPWQgzX8QZ6z3MV32yln80R7G+aB56WgqILfKRCGajtiQTlfST + KrnBTDxRUZxJy1BE32JiQBdNtjISSEyWWajisWuYl2qZ66TmNsgIJvqLlzyumX0iD3V1ddjRJ2v8y0OH + UWLPUBb6iGlHWzIwm8zCCjHWlm4dTY8txIbrxLXbe7XK6N9z5gtwwUIBLlrIw0VzubhwRkYCp9aQ3UZ/ + mg1lYFg4P3O3PLwgS53103fHPVmYYqxNNGnJAVX8Dv2DvjnC/aEm9vWGADwd0/IcxDd1WOkSIdqINdoy + TQTgGWK/6R5+jzbDc5qRLbnDNPHgBHnElIwCHtZhlXh107QRW2bM2DprxrZ5M3auOLBnnZx3RxEO7SrF + 7i0lWJyW5S40iDYzL0SYa8mBO8hXA4yfIPlvpEWH1gTzQa8Z3UNm9E9YMLLgwPCSDb1zJvQusg8XHegg + 1kxOOJAYzUHLsBNhxpK/3YS6KHEP46WB2Nfbqoc3ZoCP5mnRo57XLOsB1/iI//hfbrZHnTcLtZ5MNPA9 + GYkpI4CbycWDtCbyXq9bo4gSYiL8itUTP9Yz7/jqJd8bWEdZg4TD1ZHLudn33kwEPDKbIuPMTX7D/5pj + 3G1mHO4i7t5PTHcobsIBbg8Q6+1hvthHXzkY0ONIsxGnRiw4PWLD6SErjhGvHCUHP+DRYo9bi+1eHdZZ + p1abjJj1GzHKz3p5jsl65jLmh3Ziva6Qmn6tRYJ+1kye2ExuFU+qkezSIt6tRiv7rqVXjQjxeDOxeZBc + r5E8SUYBB7jvl9HA5H0N9M/6cDqqySurmH+qZFpt1seU8GpEGc+luI4xXUm+xNxZSL8rYz9W+lmLeX4y + 8rc6aEBtxEQz04yoCfO3xLXV4U8IwLz2YrZXPvOSiMB5zL8F3Hc1ZCjrA1ezFtfwOMo6wrIvI3YDJkX4 + reT1y5TTpcQcivjLOCwgNsgtydgQgNM3jMdm/i8k7y4n1q9ttMAXdqIxkotG5gIvMX61l/ihXqaF1tJH + 9PAQ83vYB3V+Mz8TAdiMynoLiqvkAT0NMVqmMrJXHu7TEdtpPvFAn9hJDJgSgDOI11K4rKSS1/xPArCf + /tFA3xT8pTyAxzYQMVjWBZaHd93uLDSybcUng0FiVPqqx0M/rKP/sn7J9OMNVenwVmXCV0n/I3aL8Tq6 + +P0B4o/RVsZRK/ELY6KP9UYeFu8MsMaFs/i+FuOMudEk835So9h4QotJmV6e2xHy937yyV7y9oFEGkY7 + szAra4GPWmkWxr8Z0/1G5gID5gbNWBqzYG3GgS0LOdi+nItdK3nYyZjdPmfF1mkztkybsD5lwZZZG/NE + NjbPkreTu44N8n/6M9DRx9zAbWyUvsq80jJpQcsE8SPjPT6eg/hoLhLD3A7lKKOBW2UE8GAu2kX0nC7H + yGIdJpbd6BkrRXOSuFSmLyfnraOvuemDTcRykY48xHqKEesuRUtXCaIdxYi0lyCcLEazrAfcXqaIv52D + XsZMLV9XIJIsR7StDLGOMiS7aT2lSPa6ECeua23PQ3PUTkzMHMS4qPMQzzZZ4W92KFs3a2gNsXAZfVME + YLmnIDNwyRTQhfRPEYCznRvi74Zw6SqR5cLo1xtWQZxZRd9LCcBORQBOJAqQSOYh2cbrF1GRPLFPHiom + husfyud+IXr6WeP4vojDiU7mzC47z9mKRLdNsWS3la9Z47tMiiW43zXgQP94HgbGZQRwLroHs5XvBplH + G4jfauozUdfAHMg4CodzeS7Mw+FsRGUEMPNXK/lUssWJzhjPJ8lzifMcQjxH8oAEc2a4KjXTTyN5upfm + JseQBxhqicfqWT/dxCMe5hZ5ULWOfl1TJiN+U7W5XO7HsO1KZZ/1ubxERkcz3onxRQCWGajEFAFYRu+6 + ZMY94ULMRXUm1BMverxWnjv5SyP7jPtuj1mZFaiC5yQP/Mv9H0X05X+IyQyM8sCXPFjdQCwk9xLknoJi + 7Nsm8p4g84eM/g0yTkOsvdGgFjHmd3nQSZYd6+2wKQKwPBSuPBjO2jdNTH7sQAc+e+0WpH1h1oRHScq/ + utOF7x2oxr8ddeMHB+vwL3sq8eyOMnx3ewW+v6OcVorvbSnEdzY58c1lC76xZMBX53X4+pIO39tkwQ+2 + 2fDTnTb8z347/nTYjr8fc+L503Lxu30m/HyXFj/YocG3t+nx9FYDnthmxhe3mvDFHQ48srcID+0qxBfW + c/BFnsdDi9l4bMmJx5dz8OgK31t14vObsnHvej7u3lyIq8fNuLhfhwsJDGS62av7LbiRBflzUyX4/EI1 + bp+txlXDxbhgqBhnDpVhezwP8805GAvw4n35BMoujIVdWIoV48iIB5eutuCKtQguWwnh4qUALpz14aLJ + Blw4VoeLRmtxTl8lTmlzYXe0ANsixViJVmEqLAJwHboDXiRk7V+/D6FGL0JeD8K+BrQ01pNo1KMr7CVR + 8WMk5mdyC2AyGcBsWwjz7WEsdEQwGW9Ga20JqnIsyDVpYNWo4NwQgAt0BKJaNcq0BHoGFYLmLLQ7CaiK + VJinQ2yuVWMXi9ABBsQpLMZnegy4kEX6cibpa1g0byBYv5WF+H4W0kfj6fhqrw7fGrPj6XErvjioxed6 + snBtQo1DdPZlAtahPBKSbBIfOnMNTaY4Kyeg9mXrEHMygecT2JP47mEQnknwdxVB4J0ienSl424m6Hsj + NIKgO/zpigB8lS8DlxKEHCd5PcqCICO6FoNmjLO4yQ2RlnqCL3kiozIDPgZgI0Gsr14FP4uqjJqQOdvF + Akxs/ga1IgKHeJ0tXq2yXnAXwUB3oxEDLMgTLKSLsXwss69X47nYHM/BuojALXZsYiFaYwFf8pDMyE17 + 2ia2y5amNBwg2Lh6xI57FovwlZ0y8r0W/3NGLZ4/twZvX1SP9y+qwfsXVuD9C0rwzlkFeOW0HDx/hgt/ + OqsSP9zvwiMrNtw2oseVyUycHkxT1oacLE9HB0F6c1EWGgo0qC0keKDVc99HwhAvJYGrVGOS17yJhfdc + acc+PWPJgF/stuClc3Lx9iU5eOuKXLxxXT7evqsY7z1Sife/48WJ38SAv3YC/8vt75uBX3qAf6nAB0/m + 4e0H7XjjTjNe+4wIwHq8fKkGr1yiwWtXGPDmtXz/OgteudGG1z6Xj9fuL8JLX3Dhuc/n41fX6/Gf1+nw + h9t5fY94cOIHPP7vJ4CX54HXZxUB+MRzbfjwf3z48OeVwI8qgO9U4oOnq/H2Y/X47WdL8ORBHa4ZTcOZ + cV4Pwfp1y2W4+0gYX7qgC49fNYy7j/fggvUAlpP56KwxIFZuRLiC5I7FJVFvRB+L1UjQinGCjCmSBRGA + 15rV2CPkNKnF6QSSF3Zk4fqBTDy2asG/Hy3EXy+pwbs3uvHBHdV4945yvHm7C2/cno/3PleAD+/Nx4l7 + c/HB57Lxwd12mg0fyrTPd9iA26zALRacuMWsbHGrne87cOJuJ8B2OfFAMd7/fDHeujsfr/D7L95mxit3 + W/Hm/Va884gDH36Z3/8qt8/wuE/z+F/h/zxVgPcfoz1eiBPPuHDi26XA99lWP6hmW5UB36B9na+/Ql96 + qBhv3FeAF29nfrw1G29+oRwfPNGAE9/w48S/RnDixzGc+HkC+K92Gtv9lzG89+/NeO9fm/DOt7147clq + 9lMlXnuI2y9V49VH6vDGY1689XgAbz7cjL/cVoefX+bCt08x40vb1bhpWY0rFnQ4YyILewYzsKU/tfbO + GMl6P0lIJ+O5oyETbQS+7Y3pLJhZzFvpBPMZmGtnvHfpcaxDh9N7VDh3RIeLCKIunrbjDIKuXS1ZmGOs + j7rT0LcxMrAznIFBgrrxTosC8CZaNJjhsdba0nBwIA3Hp9Jw7XIaHjiQju8fz8IfL6Gvymj1a8T0ePXK + LLx0SQb+doEIv2n4i2IZ+BO/+6fjKr4ngrEOL15qwGtX2unf2Xj+Aid+d3oOfnKwAE8tZeOWfj0u4rmd + EUnHhQMaXLdkx03rDty8xYj79hrx8GE9njjdiKfPseDpsx147FQ77jtgxK079Pj0Jj0unVHjtJ50HIim + 41goDWcHM3Ex/fFqEunPkEDdmjDiDl7bXbzOu9p0uLtDi3tIoO+hj95HUvPF9nQ81p2Jp0h2nuL7T3Xp + 8Gi3CY8R4HxpKBu391hxdVyH8yJZOD2swRHagYgBB2M27InbsE7iIuvbzpBIT9PGSRpH5cleecKahEue + xJ9tzMICyd0SideSIgCzJpCA7WozYQ/bfn+PHXsJuHZxf0cbyXGbBVuTsrVhK8HophYC4GBqHfZe9n2C + 4D9EQuUT0aksDdWlJAMER26ZYsRvQ1PAikDQglCUQCtB8EZw0c7j9nfYMZS0YYjHk7XqZGq6EdahAZKE + Aea4cebzSdoMSc4sa9Y8iewSbZU5cDOJ0xZaSgBWYwfJyU5+bxdz/i4eZxeB7KrXhvFyFQYJhsZIpuZ5 + bkfYr5cPqnEzwfoTJP7foH1rxoBnZ3T41zkdfrJkxH9uNuE/5WG0vQ58d4cNT28x4wFilqsJ9E8jqdhD + gip1QKaiG6xMjSwWG6TJNHWjBICj3J/k/8nI3xWe3xrr02aCxFWSIxF/l9kfa8zhkvfl4Z/LutLwyBYd + fn7cjpc/mwt8IZ/GnPOAHifuV+ODezLx2i1peOmGNPz9Gvr4ZVn0Yx1eudiENy6w4d3z+ZvzmD/OKMK7 + B3Pw6naTIv7+aSkDv2Mc/3qNNWJnLn6+vww/2l+JR7dU4brpGhyUKeYqVIgQQPoIPqtpMiJBBGABo3JD + uqiERLlSpdwkr2KtrZYbB7yOf54C+h8EYL7/SQG4lZbgdYr4m2D7tdO6ZRRtC9sqmYWJTjWmOlWYIcGf + 6UzHXEfK5rsysMB42NRvwNZh+iHJ27YRkrEhE1Z71VjsysQifzffnolZRQAWIViFhTYNVkkOtvTZsXM4 + D3tGT44SkukjS3BorBi7ScQ2JUkCWUenWIOniEFmWrMwE1MRa9Hv2rUYZRwP8bMR5rXRSCYG+Z2BIIko + r6ODWKaTuSs1EjiTJDWTBDYLPYz3buZIIat9zCUDJKQDiUyMEvOISDg7YFLIqIwgFVvi/pyMquX1jHRk + oC8ho3/T0CNb1q8u1rEuxmYX46YzZkGCMd5KLCQ37WXNGQH8MvJXBOBcIQL09SqSbK+MAI7K9M06tDMX + 9zHvDrD9ZOpnWQu4Z0iPzn4tCawWvcMm9LFNu4iN2zr5m3YRfzVo6zCgq4ukvJ81dsyJifFsTI7bMDUh + IrAF01NWTI4ZMT5iUGxyhNcxbMA0P1uYdSgi6/CwGgMDWRgb02OahHpunte7YMPktAGDI2pFAI4TB8bj + amUN2SSvMxE3K9uUGdHG6+/skLxB0sfa3sJ8FZYbRsEMBOlL4TD9KpaF7k4t+kjshweZA3kOi/NOrK8V + YceWYuzZXo6d20qV/W3rBdi6KR9b1vKwvpqLtcUcknozJgd1GO7OUsT4iR41ZsgXpG8W2HZz5AsLfTwm + 22Jp2I6VEYeylRHB08zRI8TE/ezrvhbWRfpDnMQzVJ+BQA2JI2NHnhz2MHfVljJ+SKRrSNBkbaDqMpJG + Em2ZMtZdo0Oj2wy/x5K6WVetVaZtrJbRe7XEgXU6xWQdN0+NhsfVMs705A9GxIMOZR3PeLNNWZJBZsKJ + EtNH/ToayR0xkog73XEnekjAO2N2+lc2+jpy0d+Zh864HV1xEmnuy5TQw31FKRtwYXioBEMDxRjoI0Hv + zmN/OBCJkhiH+d9iIf5HlOcQYx+RKPaSxI+MltLKMETSODBYwv6vwcJ8AJvXW7G+JYnZ2SD6+qsQIfGu + J3mW6eMkn3gZU9FWNYZGsjE7X4il1WIsrxZgcSWX5uRrEX9zaTlY2ZSr2OqmAqysF35ka1uLsLbDhRVu + Fze5ML9aivm1KgxNuxBnffM2GzYE4HRF/DWYRNBUw0rOIlNAaw1ZUOsyodKKpQTgLE0GtyIIy9TQWdCY + 1NCatdBb+BurHnpramukyTHMFi3sNi1yHXrkObUosKlQbJepnzPhdWkQrCABL2P/EdcHSmWaXpla2IDW + OuLcBj3aPHp0+03obbaiN2RmXmF8sg87Q0Z0hSxoYx+3CJnnb0QAriRHKM3XojBXh1ynBg5HFhz8P7sj + XRn9a+XWQl52UgAW4fek+CvCr2ZD8FWMbSKmMqYhXUdTp7byWs82Mzoy2V4imGexzbJgc2Yhz2VEUZkF + JVV2lFQ6kOvSwVmoUSw7X4Vcnp9TEYNVsOVlwJoro15UyC/meVcZWFuMqOG119K/62tprOk1VZkop++X + lJBTsp5W1aSjtiEdDcSftcQeNfXpKCf+KKbvFLMWF5MTuog9ZPpEmVpRbrJWk9/Kenu+oP0jk5E07qAN + tY1mVLv1rG0y1XIW6kSUazAxnqxs22y0enLQ4nYiWp+NUK0doRob49lMY3yWG+Au06G2KBOVhRLP/H25 + mvGsVm7MiPArN3pK5YYPX5eUqVBeITffjair5/9yW1GtRyl/I+tRFxSl6q0Iv7I2dZ4rQ5lKr0x+VyrH + zlKmoAsx7pMNBvTIwwGM8f4mI4bpH1OM65lkDqaVB+qsfE+HPvL5OGuzTC9cXUBjbZDj1LDm1zEfyTSw + MmWoTB0aDZgRCRjIlzNpzKWtdoz3Mv4mKrB1vgF7V5pofuxfaeTWh31LIgj7cGTNj1O3NuOcna04b28C + lxzuwCWH2nHh3hiO74zgvF18X2x3DBfsou2M47ztrTi+tQXnbInirM1RnL7SjKOLTTgy68PRWTeOzNTh + 0HQ1Dk6W48h0JQ5PybZsw2S/HPsnS7Bn3IVdozTW9d3jrOljzO9jJcQILqwPMw8MF2BtpACrrP1LQ4WY + 7koJwF0BecAiTRGAWxVLV0YCJ5mz25s0aPeLQJzF/s9AzEvzkecQT7cHdYw9A/M7+ac/E1H+VgTgj0b/ + ivjLrZuYyU2fFQG4jtZQynrMNg8yv7cwt7d6rPQnPRqJT+W79ez7evZPA7diIgKfHAksU0KHefwoa3qM + uFishRhTBOAY8WWc2yRjQEYGdxM7d8tIYb5uZxy08bNOfrezJjMlDns16PFplKnDO90Z3FehP6DGMHnE + aFSrcK7JVmKfmA4LxEZr7cRbvdnYPZCH3X052N5uwyq/uxjMIs/WYGtES1NhB3nEnih5IuvwNj/xMdty + jrl8mu0jD2YPsw37vJnKjEFdMt0s23uggbic35vl9xeJnRZF+KUt0G+XyGmWiHMmyF/6GNsiZIsA3MHr + HeC1DLFejLq1GBbzGjDC+B4KWnktNnT4mBdlxCPjJlCspjHHFhvgLzbCQ6t3mVAmMxNYmceY43TMaUYb + 8xFzmS1bRgGrlZHAzpwsFMg0zU4VXLRivlYsT6VMAV3APCbmYn4rdmkVIfjkdNClJYaPBOCKSiu3Mh20 + AcUlehQz14uV8rzKirSocqnpI8QIpWo0lajQxL5vYuwnGnRo8xmQYI5qb7ajs9mJ9lAO6zxzEfN+NXOG + rDMoVkY/KeNvZISRrPvnEtxOf5JtMfOJWBnzlIwIqma71EiuI39SRjDVyJqdGWj2qxCPsuawj2XqRxGA + 28NqJNk/7cSSg8S5M60ZWG1TYztx7I4eg2Lbe/TY3atPrRU9nY0LRPxdyMVFczm4cDYX507k4nAf8S45 + 6ySPJf0uwu/J0b9jjLP5oB6LYSNmGF/jPI8RL438csSfheENAXic/jlF7jtD7rzQrlcE4LUe8gCaCMAL + PJeZLi3G5GHLtgyMdagw3aPDdK8GU138PXnEZB+x/RD9a8yAlcmUbZoxYtOsEdsW7di+ko096/nYs6UQ + OzcXY34yB90iAJMjtDDmO4iREsytTYwhXyP9K6RBmPES62S97tOjd8yE4SUHhleIreZZq+dM6CDHTE4R + t0/YERt1IjKcjUCfDY0d9EVyjVpyhIaYBt6EQbFGtntjnNiexy5jWxWz5lUxVusYNyfNzbbxNemUkZjB + kInnwd8xVmT0pSKwsU8FL4rJMgRiyqhv5vtaedipljWLfLSKuV5GcnoZjyHytRZajPW1qzYD06ytWxoZ + 0xEjDrQYsZ84b3+zDnuJJQ/QDjcZcIR45FjQhFNZh07zm3GKj6+JW464ddjP7W6fnvmA7cvaMke+MszP + ZemCVuYqeehGlgZKMpeIn8XImYLkiWH6WRu5Vwf7NEm/SvTpEBtg3uzRoLmTmJ8cqak9Jf4GidPFAuR/ + PmJvD7F3NTlaJTlBZSP3eZ7VjXrFSj3ERswdMmrXyTxSWEvs4OPnrJ+KQBs0oKaZfRI1wc0+bmi1KCJw + LWOiJqJTxGARgCsDWpQwpxWwb3KZ+/PJd4vYbi62ZSn99uQ00oqgTKsNmlHbzHjl9Vd49SipU6Owirml + gsdgTcgj/s8pkSmaRfjN2DByOvK6fMZrKbF+DXOal7HfGMlTzBvO4Xs8Xj3zCDlgmWAlvhacI1NLy/dr + vDb2rxWlxCtF5cRiBcRq5IeC93TEeIL3lIf9NkwwoHwms7IoD+Z9NAL4kwIwOQc5hUwB7fYJ/kpTrJp9 + KdhdeSCcfuNmW4g/Bnj9zfTPSEQeUNCRkzLX0bfq6KNu+qivmt+jBemPMdamzoAR/VHm8rgVg+S6fTHy + 1JbUQygdzawdrDX9rE2DjBG5VygzbCmzbMU1GEpoybX5Of2gN55O/JKmzOTUm2St6cjExAB5KfnvFG28 + 34hR+tb4gJ6vTQpvnRm3YHnOgfUlcsKlHGxacGB51ob56dTMVpPjBvJf8tsp+vEk+fQoufkIfXeYXHlE + hdYxDVr4vSh5Z3TChtbJbMQnnIoAHB/OQWzIidbBbLQMyDYHbcP56J0qwfBCLcaXGtA9WoxgwoI65rq6 + ZrZ3UIMG+pw/bkNIpoDuLqGVIdpVikhHCd8rQXNSfiMCcDk6Bj1I9jUg1FYJTygf9cFc+FuKlFHCLR0u + tHbyex358Lfa4COH8JJPNPiJjX06bplzyBsDxMUpAZjxUCNrAGewtjFWWEtk1GqxzAjHOiOjgEX4VcTf + 3NRnJeQxZeQzJ62SflNdTYzsttAPnGiJ5pHLF6AtmY/29nx0dOaiu5dtsCEC9/bno6evAF18r6M7F22d + bLs25sx2O1raiJk+YRH2vVi0jZyz0wKZHrqHbdw7ksttLroGWCc77Qgydt1e4l3mm/oG1lfGR6wlD7HW + XLRGZCY1mzKbmiIAR7PRyfcHkoX0v0L0hfLQ5bOjnTy8hf4fJG5u3Bix3sAcIsvdKX7MnOvlsWUpBZlN + w0Nf9tCnG4i/aohZKth2ZbRy1uhKxnOl8mAo458xblN4WcpkFLUMupCHPssqUm1XW2tiPBmVNvTLvdQm + O7d2NAUcaGR8y8xApeyTIvKFMvZTVak85EVcQJOHwmrlnoLgTI9oYmbFmpmDmxtlSQADt2I6hBnPLay9 + cWKvZFSHdom7NquCA0bYP2PC57tzsDBWhjMOd+HW67ch7fPTZnyRQfIUSfY3d1fie/tq8Z3d1fjW9nJ8 + fb0E39pciu9uKcO/7CjD97cV47sk6t9etuBbS0Z8Y0GHb63o8P11M3683Y5f7rLhTwfNeOGIGa+fasOb + Z9i5b8IfDmjxi31a/NteA76714Jv7LPjqb0OPHkgD08dKsETB0vxyK4CPLKeh0dWnXhs2YknVnPwGO0L + qw7cs2LDnavZuH05B58aN+Pyfj0uZiG5qEONqwhiPjtkx+dJJB5ZqseDSx7cPFGFK4bLcXyoAnuTBVgJ + OTEZyMGQLxfjzS7Mt7iwl0F46XwTbt4Zw227WriN4MbtIdywHsD1az7csOLBZ0iQPjXnxoUjlTiN39/f + Vob1WLWyXvBIqA49AQ/ifg8iPs/HArC3nqSzngTEje6wH0MtAYy2NGG8NYjxWBDT8RDJXQgziQgmYmHE + 6ytQk2tDvgjA6iw4dTrkaEn+uc3TalGkZuLma4+JHZzNgsqEPkICOkdQsIngcidJ5H469zE60jl0roto + lxJMX8YEfQ0T+a0E558PpeHhRAYe69bhIQKpu7uycAuL79UE+wcrM7HiUmEwLx1RFo0GOnE5E4LcPHbl + kNTwP6NOLXry1Jgn6NzLgnueLx23xLR4hAn4yaEsPNGThqfaMvFkUoMHmNxvICC4jP97AUHhGQQ6+wgW + VmjjLNRyM6SFTuuv5TXJU8xMTm6Sm4bqLDo5g2/jiTe/16iYTJnnZ1A2uTXK6OAWJrqkn8WEZFfW1hqg + TUQcWGRSWo6TJMbzsCmei00JGQnswKaIDSsEBQsESDMscnNsE9nKtEayts3RiBqX95hxOwHuY0v5+NGu + Evz+SAVeP6cB759XhxPHq3DinDK8f1oh3jiWh+ePFeJ3x0rxvZ2F+AILy/WdGlxAYHmAQGKRJE9GYrUU + ZsJfxIRcRFBSSMCRr0cdyYo3jwCUwKCHgT1emY51nsclcTUeGDUyriz47eFsvHZBLt65zIk3RQD+dB7e + vqcY7z1ZjRM/DAJ/7ACe7waeiwN/CAG/8gD/WokPn8xXBOA377Lg9RuNePVTOrx8iQovXpSJVy/T4K1P + m/HmZ2144zZ+5/5cvPWlQrz2aCFefjgPv79Vi19/Ro2/3JaL1x9qwInvtgG/GU2tA/zyFPAq959rx4n/ + 8eHEz6uBH/Fcnq3GO09W4ZUHa/Cr64rxpd1aXD4oayyn4bxBI25cr8Hnz4jh4Ut68NiVw7jjnC6cs9KI + uWgukhVM+iVMZKUkdwQmLVUk4x4Thgg8xwjipnxqzMqodBbQnSQL+1rVyhPJ5yZSozHvF6FnRw5+c3oZ + XrqiFq/fUIVXby7HKzcX45Wb8vHmrfl4945cvHe7E+/yet+53Uoz473bzHj/Zgs++KwZH95g+shOsF1O + 3JqNE3c4gbvz8eHdhXjvzgIex4mX+d0XbjDgpVtMeO1OE978vBXvPmzBe49z+4SVWxvefZL/9WQB3n+i + EO9/pRD4VhH7pASQ9ZJ/Rvu3Mr6m/UsF8GwlTny1Eu88UYZXv1iIl+4vwOuPVuD9p9mPz7J/f9jC3yTY + r+yD33al7DdJfPAfEWUa6He+7cHrX67G649V4c1HRYCvw9tPNuDdpxrx3lNBvPt4GM/f7cavry7Bd083 + 4+Fdaty8nIkr5lU4ayIDewbSsdaViflYJsYbCajq0tFDYtJF6yTw62LMDgbT0U/wPhpJw3oXfzdswZUT + 2bh+0YGbmZ9v316IW9YLccWEA6cmddhEUjlJPx4QIYXEsIPAvS+uxXg7wVbMkFqTKpqB7Z1pOG2UeWE+ + DXftysDXzlXjP6/U4sXrTHjrOiPeuZ4+eq0Br16VhZcuzcDzF6bjf89Lw5+Op+wPxzMV+/P59NULtPj7 + JQa8fLkdL12eze858ZtTnfi3fawfczZ8mkTxrOZ0Eps0nNWTictmTLh63oQrp7Nw/UIm7tikwj3btXhw + nwFfOmTF51mTblrX4xrWs/PHZO3pLGzjb5eZI7Yyrg/SJ88iCL4oYsbVMTNuSJpxU9KEW9sMuJ0E8K5O + HXOqFveQrN6TTMMXaI+R0IgA/JUuDb7cpcPjJLiPD+Xg4bF83NXnxNUkieeEs3A0oMEB2l6Sv30kLDto + K80GzPrVGCMAlym1hkjsZXqtPhLtAZ6TiMBTBETzATWWmkUATk0FvbmFRC2ux/aEEbtE9OV2C/tgE99f + o21q1WM9bmFetGAlbOJ/6DDcQEDOY7ZWpjEmUzfAPikA14lQwfj0yugbgg4/yWK4xYwWHjcRNxKcWwnw + 5eY2wQbJZB/z8wBJWl9tFs+XeY75e5JEcookZ4Y1a45EaLGa9aBSjU1VGmypUn9CAGbMk6CIALybZHNP + KJv+ZcME684ogZcIsTvZDpd2qnEXSfmjSwb865oFP10x42fLBsV+uWbEf2+z4Hd7bPjD4Rz89tRc/Pyo + E98/YMPTxCe3z+pwEfPIkWgatrOPZ9mWYzzmCAmg2Bjr2wTB4KQYyc1MVQaWSTjXeQ3bWLe2ebXcV2ON + 7SYCsAjB6/SRvfT989rScP+aFj8+l7jnJidOfDEPeMhBM9F0OPGgBm9/jjn5lky8eL0Kz1+lpf/KTA30 + /YuYSy7IAc4rxIkzmM8P2PHyVj3+spSBPyyk47+X1PiVIgDn4Bf7y/DzI7X42l43blltxGn9lZhuIIgm + eAwUs88EyBPcF+YRjHIrN6Vl+udKtrsQwLp6khOC3Dp5opLX8P8UgHltnxSAW2jxDfFXEYCb09DDPCHi + 6Hi7BlPd7ONuDWa7VdxmYq5TRgKLAJyFxR41Ng/SJ8fs2D6asq3DVqwSjyyQ2C12ZGGOGGI2mYFZ5vrp + mBozrI0LzDGrJAdbGDPbB/OwYzAfu0eKcWiyEkdp+4YKsd5uwSyJ5WhTOkYD9DlikImYRnmaeDxBkhfM + QDfzUz8/7wvK2sU8b3+GMvq3gzmvk9cl7/cHVcrU1klihfbGTOWBGGWqa+bEnnA6eqPpGOa5TTCe5/pN + WBy2YVFGj44SY4yTaPLaUk8m6zDG2B9qz0B/mwjAWegise3+SAC2IkbCIjfr/R4DaojBpK+yhUDQCthn + MiVXg1dF0qVCtFVLEqUnoTIqa5SNMR8Pj9swzP/tHyPBHpHpk0i6Rwn2R6zoIS5rZz6SdX8TbSIcMzaZ + f4Z4vpMTOSTADkyOWTExxpo7ZsDYKG1Yh9EhtteQIWWDMhLYjPkZB2Y3BOC+vgwMDbFtSaBnZ/nZgg1T + szzuGEl0dzoJYQY6OnidXTyHbju6Om3oZN+J6NvZYUB3jwWDAw4eR94XQVhGm6oRjWYixLoRpi+1JVTo + 6zZgiL4yMWoicbdhifxk82oetm3Ox07ylB1bipTtzm0FtELs2Fqg2BZ+Z1nWLx7RYbyPPtnD+O1TK9MH + LvCaFgd5vH7zxwIwecPKMLHjoA2zvRaMt2mVtay72dedrB/JJuI15tlQXRYCIrIwfzVWMx+SSNaUqlBJ + El1ZlK7cxBWrKWU8Vcp0t9p/EoA1JI3pismoHRGIxeR7Dcx/Hsalv16vTBndQlLYGrDTSGrpH9GACRE/ + MRNzdcRPghdICcAdrXZ0EN+2yXp/rWzvNid623PoW2zbmB19Hf8oAA/20wZcGOgvRl9PIbo785BIfiwA + NysiMElyqxmJhA0dXST0g0UYHS1PCcCDJeiVaaYHyzA948WmzRFs3ZbAymoUo2P1iCfz4PYwvzCHyKh1 + L/NhREbPjzgxPVeIxeViLK4WYXmFOF36aS2fvyU34/7KWh5WN+VjWRGAXRtWiFX2sYwAXuZ2blMhpniM + iYVSdI/mIcJYqifpFZHtpABsNGfA4tDQdHytglqfqQi+KhF9NRsCsDZDEYXFPikAKyKwVffR1mjWwUBO + ZrboYbfpkZttRIFTjyKbGiX2TNTkyc1+LSLVJoRI9EUAbi4nP6k1KuvOtnlpPjPa2aedjYz7JvYT8W07 + +zLJ85Y1SBN8HeNnMgW4t1KL6mI1SvOzUORUIc+hRg7N4VAhOzsL2c4M7qfBms1rtNPkJt//RQBWW1Kj + fcUUAVhG/xrTkKahZaW28trAazBlq2BxpgTglGUip1BGmpiVdYBFAM5zkYsWamhaZOfznIpSI4Ed+Zmw + k88oNxldauTz+kurjajz2OBmzXYrU52Z4GN+c/P6ZO25qqosVBETyI2cBtZRH/GChz4tea6S75Wy5rgq + UiKwi/yoqDK1fl4ZuWINuWB9QATg7I+ssdkJd9CB+iYbatnOcoOzvCIL1RWyLiaxCvsh7MlGxJODiDsH + 4XonYzmbsexAU42dZoOnnH5ELlJZkMm2J+YpkpsuKpTTyor5/6yncrNMRkaIFZXIk/28lhoD6hrMHwvA + xCgF5H4i/ioCMH8j05MXFMuo4EyUlGahhO9V8ZjuMuYTYp94nR7dxFT9TTLK10zMbcdMMhczbbmYFuGW + eFNG/3Y3kicxrkRIrGSdkOli6ysyUctcc3IUoCwlEAlJXbEiGjQpArC/PgOxgA7drDejXbmYHynF9gUP + di56sWuZ2yXaQgN2LblxYM2Ho1ubce7eOC463IkrTu/FVWf046rTenD5KV244lifYlef2o+rub3qlH5c + caQPlx/qxSUHunDJ/i6cv7sd52yL4+wtKVH47PUQTl/14dhSHU5dqsexRdnWbpjs1+HQQhX2z5Rhz2Qp + do2XYM9UOXZPVmDnZDl2TJZh60QpNo8X01zYPFGMtdFizPXlYITYtjuYxThLU0TgpGwbWX8CmegOaViv + degkPo6Tn4g4nOA2wXouwnBHUIueED8Pa5Hk92P8bZgYSNb+/UcBmH1VIlviIrZ9SgDW0H/Y1vTzFvp5 + SNa5Zuy6S9gfxFn/NwFYRgGLAByiT0drshAj3m2ltVRnorUqHTH6vDISmLirvTYDnfUqdDYQizAmZJmr + tmriEGLQdloX3+t283OPCm3EoEliz07ilZ4mFQabRQAm9ojKSGAtpri/SLyxqcOGbX252DVUgN0D+dja + nk3OoMM0Mc40fzvrzcA822CNOXs76/BO4rotxESrbLd52hw/m2TbDvG7MlV1BzFyO7ljB32ynzbOc5gl + llpiWy7zHMQWQ3r+hwEL5DKjvJYeXl8H2/GkANzP6x8mJxhjfhihDXlpzJcDjPGeJsmfZoRrtPDLiB3G + XWMxa2+JAf5SM3zlVviqHKgtMyObuVBmf1AEYIvUgizY7GrYnLTsTDiZLwuY5wqYU4uYS4uZS0UAduVw + X0TgDQG4qEDDOE+Jv/+/BWCJdb1yc7eiXI+qCj2qy1jjyw3w8b1ghRbBMmIF5gCxKOOzlXg70sDa0GhE + ayNxH68tQFzgYfwq00rST8poqWmeafxdMe2fBeASVya/yxxaKg+oqFDDXCd4o45+VMe86hGs7s9CIsK8 + 0mbFUFcOettYd8gz2+QBbfblAPH7DHGsLJmyo1uPncRast3RTc7Vo8NB4sjTJyw4Ppv9kQAs00CfTqy0 + s534nj4iD3z3st9FAO6mDdIn55rJMYlD1lqJicllp8hpZRTwaKNMF52FYdo/C8Dz7UasdBqw2m3Csliv + AfM8nxliyLFkJrE28Xx7FqZEACavmCSmHie3mOxVY3ZQS6zNY4yJ6bA0acDytBGb5q1YXyC/WM3BdmKM + basuzBAzd7RpECGmCxNPi/gbi4qYJWvwqhEIaRGOadHaoUOyl/lyzIihRRsGV+3oXmDNniHX5bHjUybE + ibujIw40sz2aiCMbia09xI3upJgGvnb6aLsZTWJse09Eh1L2SyFzSwW3tYwhEX9lStOUAEwfZ45uCqam + 5PX5hKOlK2v7pgRgFRpqNMrDg2JVsiVfqGZ/f1IAlgeq3IzDAE1E4Gbms1YeY4S26s7CbvLz/REa+2l/ + wID9xB8H/AYc9htxhHVYBumcwtfHfCYcYzyKAHzUrcdB1qe9fhN2MC43B62Y85uVOG13axAlLpb/CTM/ + xBj7yTB9vZm1TQTgEP2Dfds7YEXnIDnAsAlt5Ebxfj3C7McQOaGIvs2yJR8PdfNY5PV++qVPBPUIr428 + SwTgSvZRpYzyJW4qbdCggDnTyXyazTxdyNxYRj5ezXOvaTIpYq2M3G2ImuBl3fPQH+t53fX/LADTSv2s + 6awL+WwzEX9lSugSnwql7BdlGmkeKzWimLgmJFN9W1DTaFYEYBf5QH5FBnJk5ibmqBzyayfr/D8KwOkb + AnAmioljqoiHGgJOeJtzFfMEc4hrzMroYJkm2sVYLq/XodpDXEH8WO+305yo9TpQUWfjMYwK/rLlpitT + PSsjgD9higBMvCdTQ4sA7CA2yynMIp5jrlMEYA3xuQYNxOny4IH4nseXiXpPesoY14LdZQYfWZ7Dzfdk + mZ5gUEduZkKM3CIcMsFPzOZm7WlgHXAz9r2sWY30xSB9MdbI+tpsRi/bvT9pQx+5RF+M/LSFcRRRKz7S + Tn7eHSMvT5r4HQO/o1OsN65BL3myLJuUWjqJHD3GepFg7orTn5JpGOrVYpjcdHSQMdpvwABfD8jSS9wf + JM8b4mfj48Jbs7G46MTCfDYmyQlHJvjdcT16hzXoGtGge5z1n3mjfVyLtgk12sbJlbnfwvdEAI5MWhD5 + SACmjeYg9k8CcMtgjjINdNd4EfpnKjGyUEs/L0IgbkJtkPmZ+KOadVnWAfYyNwaSOQh1FNNKEWovRbCt + GIGEC01xWqwI4bZyxPoa0NJVC39rCWr82ajw0Qea8/g6H83JAoTaCvgb4l7Gcz2xTD1zR32THg00b9Cs + LI/SJDPkyIPljN8q+ulJAViZVpj1pZh+Kib3GXJyUiajg0v4Xhk5zccCsEz/TP+vFQHYiuYAr1vu4ScK + aPlobxMRmJyTXLGLtaarm/udOeigtbWL8JuNWIJ8Nm5HS5xYnNwy3Eq+o5gRwRZZG12r7Le2W5Dslqmh + szeMOZuYpbXdjmDYuCEA0+dkMCDxcpztkWjNYx53bAjAqRnV4mE7OqNODMQKMBIrxGAoH71sw07W2xjx + RDNjrKmSmII51M2cXC/3Wei/PuaQJi/zsE9HLK1FEy3AXNNUr4GXsSnr81ezfWoY6zIzkMzmU00OX8zY + lmm07fLABe3/JgDXMG5lKu5atqOX8X5SBA6SvzQHcuD32ZTjVZSqmOOlpqsVq62gD8lrcgWvzBrGvBti + /hELM2+HiSdCjeTv3IYZz2H6QAtze5y5TQRgMbnf1Ndhx3BfHsYHCjDanYvFiQqceaQbt92wHWn3TVvx + wLwDj6wV4KktJXhmaxmeWadtLsUza8X42moxvrVWgmf52fe2ufDdTXl4dtWGby+b8K1FHb69osMP1o34 + yXYb/muXBX/ab8ALhwx4/RQz3j7NjNeOmfH3wwb8z0E9/vOACT86YMN3DzrxtYM5eOZwIZ45pQxfOVqB + J/a58Oi2PDzEovvosgNPbcrFk+u5eHDNjruXLLh1zowbp834NIP7U0MmXMlCfblMN9ulxc0sMl+YcOHx + hRo8TlLz+bk6fGasAhcPluFg3InNDIjpJgfGG5kQosXY0laKM0drcMPmIB44lMCDR2J44HAL7jsYwb37 + Q7h7bxPu3evHfbuDuHNbE24gWbpkohanDVRjR7IS89EKjIWr0BusQ7yxThn1K9M/hzxuRN0NJBxutDc2 + ors5gMFwEKOhAMYi3NImos2KjbdGMNoSQqKhCnV5DhSadLCrSfI1JPxqFbdqbllk1CxUejqPRQ9/Nosu + iWonnXCMBWW+Tov1BhN2uc043GjH6QzQ4wEHzidZPo9OfRHB2adJqu9ggb6HoP6BeKYyRemdyQzcTHB1 + TSQLx+TmNkntGJNBwknC4khDFZ3YlU/im0Oy7mCBpnXmZGKW5HV/TToubcrCfV1mfHXcimdn9Hh2LAvf + HdDiO/1mPN5mwC2BDFzKQnIOC+opLCY7CWTmaIMkAgkWzxATk7dKhzomGJk6r46FVIbh15EcNbBAeVgQ + ZUorH7/XSJKgjAwmiG5mULZ4dIgRDLTR8Tt9LB4EJ+MRB+aZlJYShVjmdjWRhzWxmBOrUTuWWMDnmECm + WNSmhLDQhhn4k7RVts+hpkxcRAB4G8HJ0ywYP91WhOcOV+GtM2rx/lnV+OCMCrx3zIU3TinAXw/l4dcH + i/CtLXm4l2DwytYsnE4QsY0EZ4JAvZ3tGCpUwVfEBOyyoqbQjMp8JutcNbxs1yiTRQ+T8ST7ZgeJ66fo + vw/PmPBvO2343zNyU9M/X+bA61fm4PUb8vDO50vx3jN1wE+jwJ+7/kkA9qUE4KdOCsBmvH6jjADW4aVL + MvH3i9Lx8mUqvPMZK969PRtvfc6Bt7+Qi7cfLsTrj+XjlUdy8Ne7jfjDTTo8d2su3nywDie+2Qr8cgj4 + yyTwwjjwyoYA/N8iAPM8fliLD75ejVcfKsef7yzDDy/OwT2bVbiwJw3H4um4cMSGm7d78MVz2/DYFf14 + 6PJ+3Hx6EqfPN2AyyIJQqkdzkRFNLvZtkQrhco3ydE4/fVZGDk6Q2E57MrFE0LeFRHJnSIX94UycHqU/ + EwzcNKDGYwtm/HBPPn53TgX+cnkF/nptOZ67vgTP31CEV28swBufZTve6ODWitc/a6EZ8eaNRrx1vQnv + XmfCe9cY8f6GfXCdBR/emI0Tt+QAt+fhxO0FeP/mPLz5mWy8fK0Jz1+lw4vX6fEKj/Ha7Wa8cR/tC7Qv + WfHWQ2xztuFbjxXg3ScK8d7T+fjwmwU48S8FwI+LgJ8VAz8RMZgmQvAPKoHvVuL9r5fjjSddePmRIrz8 + aDHe/grb9dt+fs4+/nkyNfr39z3sY9r/sO1/2YoPZBTwd31485lavPVULd55sgYfPNmA955y4/0vN9Ka + 8f6TUbx8fyP+54Zy/OA8B57YT59eycDVcxk4ZyIde/vo7wRTC7JWJgnhBONhlAB+mDZIEDzEPDFF4D4Z + ScMywdaRES1uWCnAA9vL8Tjj4cvHavDUsWo8tLccN8/m4vwOI3YyduSBikH+tpvksCOUgd4WEr2EETMx + E2YiGiyF07GnOx3nTmbg+k2ZeOI0PX56FWsF/fL1m2x4j330HvffvM6A165S02cz8fzFmfjf89Pwx+Mp + +8PxDMX+dL4af75Ai+cuMuDFy2144VIH/nTcgV8dc+AHe5344pwJ13RkKmuUHwzQJ9v4v0NanE87tzsN + F/am4eqRdFw/lYFbFjW4Y92Am1cNuGpajQsIDE/ppM9FMjDPvDDOOF0g4dpBEibk6DgJwOUxC65NWHB9 + 0ozPtplwS4cJt5Po3NWlx+c6NLhbEYDTPxKAn+7W4ssk2I/3WPD4cC4eGivA5/pzcHXChLOaVThEgL2H + hGMXQfbOiBlbwiYsEGDLuljD9RnoZ9v2MV/18Hx6mDPEBrg/6s5gH6o2RgHrsEZyI0LvZoKqddrWmAFb + 4gZFFF6J6LHM78h2TaaWjpqxQJIk6271s07INF4REqqm4jRl3TNFAKZVMqeJaFhD4FTXICNeCPz5m0Az + QQfBRVRARosJ7SRVbTLagsSinbm6m7m6h23WW0vSz3w/4TVggrl8inl9ppbEnURE1pNf5XYzj7+VIHU7 + 876YjALexd/sJonYHcrGGonQVDlzQnka1umnZ0azcBuB+VPbCvA9EUO32fC7TSb8brMBv6X9cZsJ/7vH + gr8dsuOF03Lw93MK8Iez8/Bz7n/vSC4xhgM3TupwvCsdB1oYDySrs6xVU/T/KW4l98zxOhRjvVrk9awR + dG4nyNpDEryTJHMbQeJmfr5Sn45l9s8af7edxzmD+enuZR3+9SwH/npjDj74QiHwSB7wqB14zMgtc84D + Wrx9lw6v3cyc8mkTXrnKgDeuMOHtSy14/2IHcEEePjzLibcOmPHSVvr6Ujp+v5CO3yxl4ZerOvznjmz8 + 6mApfnlKDb59yIs7tgZx1lg9FoMOdBKohllP3aUZyg0lV0F6as2XknSUy40iGXFIYu9hHXUT8HrcKgLq + DOVp3wb6mJiyBnA1cQD3/bw2uaHwkQDMnBFnjCcYV0nGV9uGADyYUGGiQ6Zo02FWpmuTUZfdKsx2MzeQ + 3M91ZmG5T4ctI3bsmMzFromUbR91YJXvL3Rk0VSYaxcRWIWZRCbGo5nETZmYDPM91ublNgvWuuzKuoA7 + Bl04NFGFYzO12D9ShvXObEyRcPWTsPb70jHIuBql348xxoZa9WhjfY7zukTs7fDR35mrOrzc8vttG+/1 + BdXEcxrlhnIL/SzO607yuuXGstw86xTRmNcr6xyL2D3TI2vJWjBD7Dk3aMHKOH11Igdrk04sjVkxK0SU + bTDUnklSS0IrxFYRgC2KQBcjYYnQl7yMKXmqNI/kIYekXkb/ljIG691Z8JM4hhmzLXE9Esy1XX1mjE/n + kdDmYWzKSVKbjcHx1LplfSMW9A2TdA/Z0EMcpgjAbWKyRrAJfX1WRQAeG7VjlN8dHzFhbJgkeliLwUEN + SbWQaC1GZR1dEmkxEYKnJ8yYHGc7DokAzPbtz1Cmg56aMmB2zoLJWVkHWIO+ARV6SMT7B0w8ngODJMh9 + fXb0yrR6PUZ0Mwf2sa1GR52KDQzyPNmG7e28NvqPiMDRlnR0tst6vrxO4ojpcTsWZmxYXrBjfS0H28kH + tm1O2fbNedixJQc7tnJL20nbvontP2/DAon+zKAKU/2MZZ7XwoAGC4M6LMoUYiLcs9+W+i1YHuCxeR7z + 3J/qMmJYbjyw/slMFgn2eYx+EfWqECERDDJ3ybTNjbUk2yIAl6lQ4WJcMc7kKV3FGHfVFbJez8cjgD3E + NrXMdRUy0offUQgeX4vVCslTCJ88cUzSyRwbJjmM+K0po38I0Yuw9kRI7iLKE74ksiET4hEaa0UiYkQb + 83kXiXY3rUsZASwCcA6GuvMx2FuAwZ4C9HObsiL0deWznXMQi/O/oiSRzN/NETEjWlqt7A8ScP62j3Gm + rP87Wsb+crG/CtHd68LwaDXml5qwaT2KrdvimJtvQme3Cz4R8xrS4WW7NQYz0SIPX4zkYHrOhfnlUiys + FGN5xYXl1UKsrBVtWAEtXxn9u7xZBGC+pxix/FZut7qwsMWFaf5mdKEIA1NFSPRmo5FxUck64yRP+WgE + sDm1/q/JKqN/MxWxVxnxq9kQgmUtYH0WP1MppqwRbNJApwjAOujJsXSyFfFXtuRkJwXg/BwzXLkGFDvU + KMsmZykgJyljDawxIVJlQIBcppmEv7XOxJxiU6Yda/Na0Obma2LbNp8JSZ8eMa8WrR6ZyUiDCPNwuIG8 + rlqFWnKwMnK7wpx05IsQayUPtJMHigDsTAnA9ux0RdSwOkQETo0E/mcBWG4CfnRD0JIOnS0DGnM6MjZG + AH8sAGfBlK2G1amGhf+RMv6PrGvpSo0CFhE4r1iPXJdWsZxCEYB5PvmZHwvA+R8LwCVV5Dnk2D6/E41+ + B82GQJOVZoM/YOb75HR+xgZ9OcD8FyRv84ct8MpNW8ZZRZ0IvrJmXgZc1Zk0mf5Zg7J6nXLj1R2wwUsO + cdJ8zTncOtFAbl/rMaOiSotScuOK0o01s+rNrF/ZaG7ISVm9k3HsRFNttmKNNXZiHROqijQozRW+y9xL + fyotykSpKxMljG+ZLq9IrDgLBa4s5Bfx3Hh8Wduruk4EYBMqqg0oKVOjoOikAMytjLCgiQAs64GV8Pci + 4pTzszq+31iuVqakS5LDdxPv9AeYj1scmG3Px2xbPiZbHRgLm9HPmO9qzKKfEZuxTsgI4FrWB1kHuIG4 + TMQB4cwyk4Ssf9aZcBKT2dHSbFRmDIiSR7XyGMmgFn0JK2tTOTbP1GDrQi22LdRjfY7783XYverGwS0B + nL0vhguPduGy03tx5dkDuPbcYXzqnCFuRxS7/vg4rj93DJ8+dxzXnT2Ga88axTVnjODq0wdx+SmDuPRg + Dy450KnYxfvbcN6uCM7e6seZ6404Q2yLF2du8dH83G/EsU0NOLxUjX1zVdgzU8FtjWK7Z6uxc64SO2Yr + sHW6jFaubNcny7A0XMAazHoXVqODeKSzMR1dfplekvk7LMs2sD2JTTsDmYizfospApg8zBVQoYu1viek + Rje/20mskPSLSJyOoOAe4l5FAFYsAw3M2WL1xbTSdHjYb43s++YGiyICN9PH5LW7lDFMvlDL/j8pAIt5 + 2GcycjtQnoGQCL71GiTozzH2eysxclwEYfp7a2VqSuhkbSbaiTvF2uqz6B9ZSNRkok3ep4ko3EFs0E5+ + kCB2ixGrJIjfOhsz0aeMAtbSuOX1jYd1xE2snd052DlQgD0jLuweKMTWdicWmPPHPRkY2hCJZJrnZWK8 + XRHyEfLtHayB63y9wnZb4HaCWGmglv8j51jJ9qR18neDxImCmxfZhqvEYMtsX7FFYqmlZh3mmogtyDG6 + id876bftbF+ZAnqwVh5wNWCKcT3uIw5x69BPjtDLXNnJXBmXWeCIZ32sm56STPp+FrmJTLdtRGOFFY3V + DjRU2ZDNXGhgPlMEYNYAsyULdqsaduYzO3NlTjbjkNtCWhHzqovb4hxuacV5Wcoo4EJFAFZ/JP66iphH + SgwoK5UpoE0oK2duUQRgeZ0SgEvLdeRHxAJ1VnjqmN/q6Qt1FvaxQVkCoJF976eFKohr2M8h8pqgm8br + apKYlRlB2B4y8recPvNJ8VdMRF8XX580yR2Sk8qZgyo/IQCnRoVmMt/RN9kXQdbeRESH3jZirZ4cDHcS + g0XV6KTvd7Efh9ivs9F0rBNn7ejUY3unDtvIW7cRf+/qUuPAgBbHxow4e8qKC+acuHA2B+cQ2x6UqZqj + GeSMaeSl5KTMR73S/9xONmoU8XdbmxNbiR1WiEdEEJ5oUmGcHHXUnxKBPykAz4oATEy71CnirxlLYj0i + ABO78XzGk8T/yQzGeRaxGX/TrVYE4EkZCdxLrtFPjsFznRkmFh9WKyLwoowGnjFjbc6KzcvZWF/Oxeal + QkyQdyTjamVd2kAjYyZiQSwqN+BN5LJ6hKIGtLQZECdObSdGFAF4gNi2f9mKznkD2mdFACbumjKidZyY + aZi/JW4MEM/6e01o7DbAS/7v7WDfEmsHu1jbxDpt8DAPiQBcxLgRAbjel6WIvx7GhZd5WUZhKgIwz6Mp + yNrYqFbEtzrGWkMduVydjPhVoZIxU8E8Uk6fqSwn1qyi1RBTMh9UyiwaMqMGOUsTY1EEYLEY+2aQfTRf + n4HtQT32Ei/uJXffGzBiP2vxAeLLg4oAnBKB5R7HUZ+IvzrFjpIrHlIEYDN2BNimQRtmWc+HGLNtXh0i + zE/ygHCI/KqFuTYRVrHuZLKN+V4onZhfZilyoHc0Gz0TdnSz7dqGTMoo4JMicIgcSUTgZvZviP3c1MZ2 + ialRF8lEVZDXxv6qZHtV+jQ0aUsNCirS4WQ7ZIu4yjxUwnaq4mep6Zk1qCbGqA8Z4G4xw9Nq4VZGAxtR + S8xYy7xXzbxU1UzeRf8sY20tJhcsYS4s9TK+2B8V7AcZSVzNtqpmHa0J8bcbAnC1PzUC2MWYzhMBmDUh + h3VCzMkacVIAzhHjvgjABSIAs15XNpALNBJzNGUrVk+MJKJwKeu4LHdRwGOUVKlRxZoioq8nkEuMkw+3 + PxfVbgfKaizIZw50EntZiQUF88kU0CfxnpiMCjbwPasIwMSSOQXELcUqYjkNMQtzBs+7waNS/K4xoCUe + U8HL2iHmYT96mOcb2Kdisu9n28vMQC1sy4QIeVErgsRrjcRrHtYdmXXAS/9qpAXoD62NWnSEreiNO9DX + 5iDvJc+LWWjkpIz9hMxGENGgS0YnJk3MU+SmCaNi3QkRrIh3Emoa6zR5c0c8He0J1ps4eXobcw79pLdP + i/4+HfqYB7roP2I93FeMvLWPXG9kjLyV3HFimv46aaQPatE5qkEHc0VyRIznwvcS4zokJliTJ7SIT/A6 + JwyITppTAvCkCMCOlAA8lo3YiBOxoeyPBWCaCMAyCrh7ohQDs1UbAjD9ZUMArvBlooZt3RAlzo0TF8fz + aYU08iVufa0F8LVwSwvGyxgXtQi1V8ETKkS1z4Fyr40+54Qnkgt/LA9N8Vw0tsrSJ3rUsf/q6ase+qeM + BG4MsS7SfMTabsZvHWuOPHQps+98UgAWobeENbWINUamgRZz0XfLiGHLy1PCb8pkRidic3JeryclALdG + c5HgeSjGc0nKOsBJJ81B3mhHXO5ttLLdWA+itAj9JRKxIhwxE+8baTLTgREBxmIT/aqxWa3sRxJmxDrI + PZkzZaroeIcDyU4nWnncYMiMBrc8GEPfZfz/nwIw/VJE4GYLzYr2kIP4Lw/DLQUYYvz0sx27GoiPa5iz + qsnTqvmfzKk+4ioZwS4jfgPMH2HmxXDQjFCQnI54vIX/08J8F/Ga0VRHn5dpmEXErWd7yzrsNOEcIvj+ + vwRgGUEtJsvGVNJkaRy3rGHcZEdzKAfRcD7/Lwc+tq9MB+1hW7vriCdpgu/ryREa+Bu/x4hmnkuUeTgi + 58Q+Vu4PMHenTK9Yq9wfYC2Rh8ASEcbixijgwZ5sjPbnYbQ3l3VyQwD+zHak3TvjwP0s9F9YzMODS3l4 + aKkAjywW4nES9adI2J9eKcHXll34Osn6s1sK8ezmPHxnkwPfWjXj28sGPLuqxQ/XDfjpdgt+s8uMP+/b + EICPiQBswVun2fDSUTP+dMiE3xyy4GeHHPjB4Vx8+3A+vnbEhWeOleKpI6V4fG8RvrSV57FkxsNLVnxl + PQ/P7CjAY1tz8PlVG26bMeJGFvjPjJtxw6gF1/UbcHWXBp/uFOHOgi+NF+Ipkohnlt14bKked01X4pqh + YpzKpLWDDrTERptj0t0SL8HBvkpcvuDFXbtCeOK0BL58ZgxPnhnF42dE8NjptNOCeFzslBC+eCCAO7c1 + 4tqlBpw3WauMHF5qLcZYqAS9gQrEfZV0kFpaAyJuN1rqPQSvPnT4gugNhjAQbMZwIIiR5gCGaaMhEYT5 + OhwiUG8meK9GfX42XCY9HGoS/KwMxayyVRHAaglMTSxKViYRpwoBEu4WBmtfZSYmSPyWG4zY5rVgP0nw + seZsnNXswNkshGcyMZ/L4n81gcdNBAK3Ehh8LpSGe2JpuJN2S2sarmeRPc+bhf3VBO0sqIMF6YjSgd3O + NJSREJeyyFRZ0tFoTkfSno6p/DQcqknHp0IaPEzw851ZB368Sps34d+nzPj3SSe+OWDDPS0qXEmgeDaL + yMGKNGwleJnktpuEvkW5maaHh8FRswFkZXq8GgLYWgakTGfl4ec+eSqeRMlL5/fWqeFn8Af520iDFi0E + 0nEShjYmuZ5GI0bD2ZhL5GMxWYglmkw1vMrXq7EcrJAMLzKgZ3wqTLBNxkl0ZKRXH4nIIMmZjCxbYRsd + ZLG7sjUDDwwZ8M1ZO365uQB/31+O106pwlunlOPtoy68Sp/93U47frrNia8s0Cf79Dg/kI4DbOdlJthB + JtJ4bhqaCzXwuKwk+g7UFDKB5zOB5bLosl3lc/lfmY76YDANNw5q8eSyEf9xwI4XzsvHGxdn443LbHj1 + qmy89tkCvPPFcrz3TQ/wS5n+uTslAP81Dvw+xPcaFQH4gy+fFIBNeP1GvSIAvyDrqF6UhhevUOHdm2z4 + 4O4cvPf5HLz/UCHee6wY7zxZhDdFBH4gG3+7zYwXb8/F2w/U4MOvRYCf9QN/HAP+NpoSgP/ajhP/1YgT + /9HA/6vHO1+pwt/vK8F/XV+Eb55hxS3zmTibxfkw2+/isRzctsePh8/vxJNXD+L+i7rw6cNRHJmqwZDP + hmghE3+eEb489i0JWLBEzcSsRw/7e5D9OVqfiUnaPAHGpia1Mn3NTpJLGc15TjgNVxAQ3DmkxVdWsvHj + wyX4xTml+K+Li/E/lxXhz1cV4YVrC/Hyp/Px8rUOvCzTXn/aTDPiteuMeP1TBrx1pRHvXGbAu5em7L2r + zPjgWjtO3OAEbs4HbirEhzewLfj7V68w4YWLNHjxMg1e/pQRL99gwku3mvDinbS7LXjpXvbTg0689hD7 + 7dF8vPlULt79Wh4++E4+Pvwhj/WTIuCnLrYnTYTgH5cDPyzD+98pwZvPFOGVJwrw0mOFeJPteeJbXn4W + Bn6RBP6ng+3fC/y5j/3cCfxXnG0fwQcyDfTX6/Hu03V47yt1OPEVDz78ihcnnm7Ch0+HuN+CNx8O4Y+3 + 1uAnl+bjmaMm3L7KeJ1Nw/HxNBzoJaknkNrUQmtOPfG9vEHw57k/zzbexM/X2Zf7h9JxOQnQwwer8Z3T + Pfjx+X785GI/fnReA759Sg0eXC3Clb1mHAppMc+4GvIQnMnNGBKAngiJX6sRcwR9syE1Vtlvh3oymXO1 + uGePHt+7MBu/+0weXrotF+/c6sD7N1vx7g1mvHmdDq9dqcErl2fRf7Pw1wvS/w8B+I/nqRQB+C8X6vD3 + yyz4+8V2/PFcG35xig3f3+fAQ8smXNubgTMiaTjC/z3aloUzCRbP6FTjaDQNp9FkpOalPWm4ZjgL1xH4 + XTGmxjk96TiFhFOmQFslEB5hPPc40jDGmF4lyN/n1uLsZjMuabHgSgLaa+JmfFpE4HYzbiWJvaNLRgJr + 8bm2dDzQloFHu1IC8DM9ug0B2IpHh3LwxdE83NGXzWOYcEZAhQOeLOxwq7DNTxJOYLSJBXzWq8YYY0BG + +/bQupmv5GZLl9x0YS7t4Vamg1ZGAZPIyHTRKyQ2qyT+YmthDcm6Vhn1K6+XwnosEBQsEYAtE4wthS0k + ckaMeTToIQBK8Hhh5n8/85LcsBIBuEYIJ62sQka8kLzI6BoSCJk62EuQH+D/BoKyrhJBs1+ecM9EhMdq + ZY5vq8lCV60aPczbI8zP440mjHuNmCQBmmY+nyOwWeDxlmt4nsz3W7jdyvfFthHg7fAasJtkayeB3Irb + jOkKNRZ5/Xvop1f1mfDoejH+7Vg9/utYJf6wy4G/bTXRDHiO9vxOE17eb8VrR5kPz85lPnUxhovwu+MF + +OmZhfgO8/iD6w5cN67G2R0ZJLbsX/b3IuvVgi8DCyQ8S41sM9qyV4NVttE6ye6uAGtsyI49BJg7eE3r + zFXLvGZlLWDaFtbXU+hzdywa8b0znPjzpwvw3v2lwOO0J/NoduAJG048bMaH91vwzl1WvEm/f0NGwF9t + xLtX8v3LbcBFTnxwtg1vEkO9uD0Lf15Kw+8X0/CbpUz8YkWLn2+347+Y9359Wi2+f1oT7t0TxblzPqwQ + kPdKbWQf+SrYXyUktDLVD7FCidxsYpt7mGMbee7+Rj38XhJAWYvRLU9VZhBwsu7T1xroa2IiADfxvf+r + ANyUEn8/KQCP0/eVqdoUkzW8NJjtkZHAWZglwV+RtX/Hndg1U4g900XYw+2O8Rys9usx30k/ZnzOKSKw + BlPxDAw2E+OwXwZoY8EMTNOP51oNWExYsN6Tj/2jFThlpgF7hsuxTBIywDiSBxnaec5dJLVDUTNG4iSf + YYJ+uTFGn27hdcUb0j+yhJg7A+2+LPSQSPWQVHXwOPE64h1es4jBHTSZIrpbBGDmxwFe72hMhakOgyIa + jndx22vE0qgDa1P52DKdjzUSRhkJPElCOtSuQl9Shd4kiWmbGd1JGaHpQIykJewnUSMZkRt++cQGYnKz + r5bxIyMCQlETSZSJJMhIMmRC94AFo1O5igg8OpmDkQknBsd57WMk28NWmh39Q3aSYIsyXbSM/k20GdDe + aUZ/vx2DQ1aMDFswzL4YGdRjeECH/gGeX18WBvrU6Gd/DfXwnBVTY7hXgxHW2tFhrTL9cy/rh5iIwePj + MhW0iQTbhLEJHmvMgGHi8vEJByZ4bmPjuZD1Xwd5XgMDJv6/iM02TE3nYmYmj793Kq/7+szo7BQRmDiA + ftTL9hwZ5Pf4+dyUE0vEYisLdmxZc2Lb5hxsXc3G1rVsbKPt2Exbd2Lnlhzs2pKLndzfvGjF8pQB86Nq + zA7RrwazsDjI/EGcJbbM81juN2+YFYtsqxn233i7Fv0tMkIsTRkRFmU9i3plBDBznEceWjQwDkiy62RE + b2pKZxHuZcomuSkn++WsEzI1VB3xjLfB8hGpq6lk7izNRBljspLEW9YVFasqy0KVPFnMY8koYTm2Mr0T + TZ7ybZbRofKEr4jAAQNNrwg7YpFAasqnViF7YaMyCliEXxkBLEJwXwfbvjsX/d156O/KRS/3ZdpnEX97 + 2p1oJ7FubSWJJCEX4fekRUneYwl+LiOAB4oxMl7Ovi2jnxShu7uAviRTfBVjfKoey2vN2L4ryW0YPYNl + rAkkxo3E6gE1gmEtCb0FvSN5mJorwdxyORaWS7FIPrm46sLS2kmT6Z2J2Ym3l9YLsEyOedIWRfzdXIzp + TS6MLxVhcLYQHcMkzG121DRqlOmBHXkZMNszlTUgdcZ0GCxZyuhflTYDGao0ZKpF/M3amPKZ3zOq+blW + EXgNMtpXMRF9DXxt4Gf6fzARgB12AwpyLSghbi3NVqM8h/1VqEJTuUz3bKYZlZv+wXLyk6qUCByrNyoW + F2PejXtIzIkhouQu4Qa1Ys3yYCu5l7ucflGYrkzbn0fMkWvNgNPKa7OlRgA7HJlw5JAPyrpu2ZmwZPOa + HemKfVIAVkRg7uttGdxmKKN8jdkqvs5URN9MbRrSaTIy+CMBOFtGTIsILJYFO3lKai1gEwrL5IajAXnF + OppGEXpFAJZpCEUAVoycMdeVhYIyLUqqjaj3ZcPTmA1fo521xkaMYENzKBvhiENZrywUkYcO7GglPxML + kp/56Dd1xD+V7iyU1RFv1KhQUquCqzaLWy3K2H41fivcAQc8weyPtsp0is05cPuzUeuWdTq1KGZ8lRYz + xmR2KfaLr84Ov4i9iujroDnJJVPmrbajVoQemQI2Ow0FtELy3yJ5+LkgQ7lZJiYzaIiIm1eYidwC5mkX + 62qZBhU8fnWtCM9GlPB1QVGGIv7K9qTJ78SKXSoU8/clxJPVbDNPCf2nNAsR4qtEvZrY2YCxVvLYjiLM + thVgotWBUWI1EYA7fcRWrG1u5hiZ3aO+PJ31mby4PsWRfcQi4WYbujpcGOh2Mb7z0c4ak5B10YjPonIT + 182aR7w52p2D+ZESrM5UKeLvGrebZquxbbkeezc34tjuCM4+lMT5xzpw8ZkpEVjsqnMGFfvUOSIEj+La + 4+O4jnbt8TG+HsM1fP/qs2hnDOOq0/l92pWn9eKyI+246EAM5+9rwfE9EZy7u5nb0MZ+GGfukLWHPTi0 + XIcDizU4sNKAQ6tu7OP57ObrXQvV2D5f9ZFtm6vE6pgLU912DLVq0RPKQF8gE31BWeOUNYyYdyhuRH9E + gw7yRhF+O2gigMn6g10yGwg5iqzx3xshRqV1BDORIPYTnKBMA/0JAbiOGEqsQUb4MlfXs8/cxKNyM1BE + YBGAfRV6uEvVqHWlo0b6pyg9NR00TUYPN5alo4n9HKJfxz1GtNESrCcxYt04MXKsOgutVanRwAni62S9 + iLush8wPcVqMcSDvKyKwjPr1cJ/YP14vI4pTuKbNw2sjV+5nO/QHaP5MjBCfr3Y6sX2AmGu4GPuYx/cM + uLCFtWGeNWOU+KeXGL+fNsFrX2lMxyFilCNJAw6QB+1m264T9yyx/eSheVkiRVnHd8OEj8gDxAusk2v0 + rfVmDVb8rLfeTGLpTCzS72ZkBiP6bg/bs4e/6eF/9VWQX/Hap31GzDdZMUVMOsjrlAdGu/h+sp55km3i + p597iF8baMpo7OIs9g39vcIEXzVra6UVOcxzRnmgxcA8yK3VzBxmST08I+un5zoYk7SiT5iLeVSxXL7O + Y+yL+EsrLkwJwLIWsIi/FWUy4teojPxVBOAKGRGsRwnPwbUxVWaTL4d1OB/RpjxiBea5OrNSC3zsex9x + XRP7PsRrkRvOcg/LX6eBryoLdYIVBDPwO/8gANOHxETwlYdPTtpJAbiMbVBR9n8KwPLQpsza00y8LDd+ + +9ttGO/NwWQPcVbMgH7xeWL3EWLYuZYM+oAO29p12NJG/pXIwhZy3x3tmdjXrcJhYr4zxo04d8qGcyft + ONpvwvYY+5XYaJy4WARgEf7FxskdlkP8nBh8dwcxWLvMvEdcFSHXo/9NkhvKdNCjTbSgGhMt5AcJPeaI + SxeIaRe7RPy1bJjpHwTgsUQGJsjfpzpTo39FBJ4lX5AlPWQa6MleGnHp5ECmIgLPKSIwsfi0BavEjKsL + TqzOEysPmhFryUIjOYyPcdISNiPR6iT2sSEctSBCLh/vsqBtgBhqhJhlwoy+GRN6FkzomNOjbY7xOm1A + 6zSx1wTrF7G+jAAWEbiJbePvY53pNaCxx4DmXouyNrBiPQ54eb0lbK/UCGD6cxP7X4Q3EXvJN5qC9CFa + IKRTtn62l5ucxMM4l+lIG1gb5L6oLJ1Qxlwi60KWMZbKGIvljKty9oEc958FYMllMqNAL/93kvubWV93 + hozYzVq7mzhyL/n/voAZ+wNGHAqYcJj4UkTgwz4djvq0OEp+eMR7cgSwGduDVmxiLZ9psmFQBGAfcWkD + Y5T/KT4XlYdt/g8BmByMPGBokhiUWL5/Khtdo1Yk2YdR9qUiAtPfxILdGpoOfvI/T/wTAjBzeDUxZXUj + MTd5uEyTXMAcksPYkfV289gurup0VDBfyjq65TynSrcKtU061DPHeVtM8BLnitVHid0jxBIhHou5qpI4 + tZL9UUH/LGfurGxSo6rZgJqwCbX0kVpuZT9lKQFY1hkuZ7sUEafkKgIwz4P9ctJE8BXhV5aAyOX5iRUR + 54sAXMF6Xe2xoNZH3EGr8VpRQczvYr7I4/Wc/G4lMUVDIzFKqBCBSBH9pAANPicq620oJuYsKJK1zTNh + IlbUnhSBaTLbi5ZmtKQRK4oAzPbJzyL+UCmzlpQz79TwvN1sHxnFq/heQMOtYHYV8VomfMzlHvqQjCb3 + chtgPo+EiV/JL5JxhyLwRUTAoz/5mNtl2vFGmSqa/tfEXNDq16GT+E6WpeklzxC+2x23KibrksbDGiU/ + dcbJZ9sYY+1mcmOTYl1JvWKdCQ1NpVhbgjVcLElu38Ya18UaQd/pJj/t5H6yI2UdfK9djJy1g1y2e1BH + XmzEAPNYD/NCF/ODTPPcNsyay/3EiAaxUZ7LGHnKeEr8jU1+YvTvRwKwfUMAJmcfzUZsmLxpkNuBlIkA + LNYx6kLvdPlHAnDdhgBc6slAuU+NmmYT/c9By6bl0vIVawhzX0R+mj9agub2agSSlagP5NOP7ShtoI94 + +btm4lX+ztdCfE1cWEtcKMKyO6SHjznMz/f8YRuxtBluckaZ5a2GdaeqMlO5j3dSAJYHi4SHlpGPygOO + J9cFLi3LRCXxc0WF1DV1ysr5+yqZNpy5ymtBKOhELJKLeEuOYjGeS7yF7cI8GovaEGWMhPn/YZklkNYc + JLfkazF52EZ5yIX5x89c42f+kzzoYV3wMRabGafhhBnRGDlpjH3QQuxKf2uJZyPIuHM3aFBXq2Y+ZK4k + ZvhYAHaiJcQ+CfH/AxbWYROSAZmRkPw3kofhYB4GyUl6iNXaagzESnrmRp3yQFYT28hHrNXoISdj7mvl + /8Rb2d/kJPIQZTuvsYv/0cE+igWyEfXT9xsdCPlp5B+BQA5qye/kwc+TArCMBv6kAFzOuBMhXR5MFZP1 + mGv5/42NVoR43HhrIVqiBYypXASbyE/Yzj436wkxope8x72B84ON9McgeZNca7M84GlFS5DXq4jVcm8g + ZTG2bzxkYJzplFiTUcASa32dVgz1ZmOsLwdLUxU462gXbr9xG9Lum8/FvbO5uGfGic9NOnAPE/Xnp3Px + 0HwhHlsqwZNLxfjKUiGeXi7ANzbl41ubc/HsuhPf3mzHs2smfGdNix9u1uFn2wz4zS4T/rLfiBcO6RUB + +J3TbXj3NAdeO2bDX49Y8ftDNvzikBM/PpKH7x0uwtePuvBlbh/dX4CHduTi/jUr7p3T4YssvE9vzcM3 + 9hTjmT0uPMz9z82bceu0CTePWXATi8iNA2Zc16XDjZ1a3NVrxKMjuXhmqhTfWq7F11br8NBCFW4hUTiP + QOggnWtriAWMRHRvRynOGavFjZubcP++IJ4+swVfPyeMr54bxDPnnLQmfPXsAJ45swmPHPHi3t1u3Lhe + h0sXanBoqARrbYWYCBegr6kIcV8JWjyVaPXUoMVdT/LvJoBtRJevmeQtggF/MwYaAxhsavpHCwQwEGwi + iGew59vhMmrhUKXBnE7LoGXS1HQoPUmkhc5Dwl7rZIImgQzSwdpZeIarNZinA26mM+2hQx4JZ+P0sANn + 0BFO82XhbILzKwgAbiBYuJEA8RZvGu6O0lrTcCft1tZMXB3S4FyfBvtqsrBUQRBemIFwHgkMAXKlPQ1V + BNVegus4C8ski8optem4gaDmiREbfriYg19tzcevNmXj10sO/HqxAD+aysUjnQZc35yB4ywg+3mem1jc + xlio25mIwjUsNtU6uFnIRACW9UwqCIarKmXaEwJZuVGtCMAMgHoDiS73ZUpoEqVgrQYhWoSJoIWWYDLo + 8plSAnC8AAvJAkUEXpRpv5P5WInnYYUJap4JaJIAYoyFb7guXXlqUXkilYmvh+05weS4TrB0NoHLTUkV + HpLRzJNm/GotD3/e5cIL+4rw6qFCvLg/F79cMeL7CxY8MsZrTGTiNBbKbbzGmXyCLRbcaG46AkUGuItY + 4F1O1BQ4UJ1rhNtJEsD2k/+U0b8yxeyZLGq3Tarx1S0G/OoUB16+OA+vX2rHa5db8Mo12Xj91mK89Ug1 + 3v+uH/hNW0oAfrGH2yTw+wjwK74vawB/OR/vfNGBNz9nwhufNeCVa7X42yVp+OuFaXjxajXeudWODz+f + hw8fLFAEiRNPluODp0rw3pMuvPOlfLx6F2P0DhltXIUTXwkCP+4FfjsC/GUUeEm2SXz460bgZ26c+F49 + 3niiGn++vRg/uzwfTx004dMT6Tg1loYDkQxcNlWIOw+E8OjFPXjqU8O4+7wkrmac7RutQG89C0KuDt5s + tk+2FvXZBA6FBI1MlB1MzH0sNEP0wzEC3lkCuhUC0TU3yQlBxr7GDBxrysA5JKTXkrTcN2HFV7cX4bvM + Hz86vQA/OTsPv74gH3++rAh/u6oAz1+Zg+evsuOFqy1sAzNevsqEV64w4PVLjHjrQgPe3rB3LjXj/Sts + +ODqbOB6ts91+ThxjRPvXmHH6/z8hbPVeP64Gi9cbMDzV5jw3LVG/OnTBvzxBiP+eJMZz9+Xixe/kI8X + H8zFSw878eaX2Y7fyGef5eHEjwqBnxSnRgL/tIRWyrYtxfvfK8TbX2O7P5WLlx/PwxtfKcP736oHZJrv + X7Nvf9fFNu9jP/cDf2Z//5bv/bIV+Lcgv+fGB19rwIdfdQNf9dLYL1/l774WpsXw3hMteO5zDfjFNcX4 + 5hl23LmSjutm0nDBWBqO9KRhN31udyINB2MZONSagf0t6djDnLCL+WBXXIRaxvhgGi5cUONz+/LxvXM8 + +MXFfvzuqgD+8KkAfnVJA35yZi2+uqMUnx224/RWEi6PCkOM9V4SrC6ZYrWZfUigPRclwW9WYb0lE6cO + aPCZzRY8cVo2/uOqIvydvv3O3S58cEc23rvZjLfZpm/Qb1+/UqsIwC9epsJzF2bgT+elROCTAvAfZC3g + 89X40wUa/PUS9scFrCtnW/EfR8z4l71WPL6ZtWFUhePtaTid13oayePZJGint2mUEcFHSILPCrM92AaX + dWXi0p4sHO/MwGFpA36+jUB4oS4T/cyxSRPzA/PeDPd30i9PJ2G6gEDn4ogJl5FMXBO34DOddtzSbcNt + PVbc2WXAXe0qfJ5E+uGOTDzRmYWnu7R4iu8/RoL70KAT9w/l4JYeOy5rZY4m8dhLorelNhObPVnYTBCy + 7Ndjiu05wnOQJ6y7mKuUtcCYMzqYx9uYR2UKNXkCe4yxMUsSqYi7LPpiiyz8SyQ4yzSZ5m0xTKJNmyeJ + WWyxYYkAdJ5AcYqkbshDYMxYE6IYYg7zk8AoNxm5LyOAKwgKXQSKhcUZyvp3rrJ0lLGe1JFk+YQAkKwG + eQ1Bglw/z0dunoV4bq1VMnWdmqBLhxH+z9iGADzuNmCSMS6jgGUq6CXm+lXm883cXyco2lSjwTpzuky1 + vIvnuIN5fZE5Y4Z1aa0uA0dJLm+dysGzB+rwuwtDeOG8RrzAnPzyTsb3DiNeor2214y3iDPeOc2O98/L + xQdXlOBN2nMXF+G/zy/GfxyvwDcPFeG+VSuuJhk4Gk3HDpLMdfrFpkAWVnhNqySPa6yhm9gX67TtBJV7 + QnYcjBA/cLuDr9dJAlfY/iIAyyjgTay1B0lYb5mz4NunFuD3nyrB2/dUAU/UAl9m3DMv4Cs5zL8O4EvZ + +OA++j19X2ZneO86Mz681gxcZQUuYa4+14K3Dut4XSr87wp9fykD/72iUkYA/3ybCMCl+PUZdfjR2c14 + 4FAc5y36sYmYRGZRaGVb+mWEItusgmBTQLysjVjPdm30GghajewzAkoS/SYvyTZJWz1rooi/Hxn9zcf+ + PCkAN3tS4m/rhvgrawCfFIBlWmQRgMc6dZjs0WNaMRGDZSSwiMBqzJGUrQ5bsXUyD7tni7F3rgR75oqx + fYI1uo++2anCLONmtl2NmTaZvjkj9TAJ/79bbjYxr4yxb8ZJVKfoy0tJB3b2l+LgeC229ZZiimA4WZGO + MOt4hP4ZYyz1Mk6HEk60BfTK1I4efhagf0YZay2MrWg9ySq3MfpyGwlAl9+AbvZ5F7FQO/u1m8S3Z+PG + 8kBIRTKhQn+YeSHE84mkYyKhxXhSi6G4GqMdOswPiQBcgHXaKoniLPGprBUsAnA/r6uvXc+tBT1tMkKT + xEkEYIL6ugqSAiEMxCEuYojKCiHhOoSjBPhxEtCEBbF2E9q6zOgesGFg1IHBsewNc6BvxI5+Wt+QmAP9 + tJ4+K9o7TYr4m0ga0UaSLdMuDwxYMNBPUtynw6CM1u0h3uvJIKHOQE9XBro70tFHMt3XoaLx2pm/+hVx + mO/1sU82BGAZBTwywutX1lKSJ615rVOyHrATM7N5mJ0rwPR0ASYZq2PjNoyMmjE8bFL25+eJ0RYKUyLw + REoE7hURuIvkn+04KFMxD7H9JvKwwO/Iek4rCzZsWXNg62YHtizbsL5sxfoS/YkxvIM8ZPc2J/Zsy8Hu + rdnYtkKcP8c8OqnB4hjjcygLy8O0ITW3WqwMGGkmLPfT+L+z3cxJ5BDDcRW6WRfi9LUIfT5EizCvtRA3 + tjaSlNJCPjMaSc4Eo1aVp9brOSkAy/p9KQGYOL2axI15y9NgVtb3qapQKwJwaXE6yl0yEpiknFbOvJpa + U0jW+VEr00L7GwxoYp4MkAAGPLK2j4wKNpLc8hwYu1ES6SjJdZB+GvBmQaaFlid+21pkWmjrRwJwb7us + A+xEbwfJb4eDfSvmVMTfzqQdiZgFLaxjYdaFIGNKEYC5LwJwK/0z2ZlHf3NheKwCQ6OligDc1UXS3Zaj + iMADQxWYY97ZujOJ1fVW+mU1wiTPQvCDPE6YBD7ZnUP/LMLEbDlmlqr4/QrMixC8UorF1VIsrJYoNr8m + Qm8RFtaJ3bcUYUkxF+a3FGNmrQTjyy4MzRWhd9KFeJ9Mh2ZHOcl7HtvQni9TF6ugM6dDY8hQRv7K1M/p + Mt0xeVSGWkYAZynTPcuoXxF+jRYDzFYjTFYDDLL2r9hHArAOug2TfRPtIwGYOL40m8TemYGGoo8F4NYN + AbiJ5yOinuyHKlXKCM8o+7SFObmFXCbKHBxWeEwWmmlNNA/9SEYOluWmoTA7DTlWcj5LOhy2TwrAWcjO + VcHG/7WSA/7fBGAxmRbQRExtys6C2amiaWDJ0SpCr86SkRKByeU0MkpkQwD+WPwVU0HWArbnqpFbpEee + y6CYjP7NK5ZRwP8oANvzaMxdOSJ8lmlQXGlATYNMx2xFvVue2me8NFkRYM2MtOQgEstBlNaayKV/uZDs + KEIz+9KrCMCMKa8aFW4Nyus0KKvXKOvslRIvnBSA6wMORfxtaLJ/LAAHcxUBWKaeLq3UoFCEE1pZqQgk + etRXWeCutMJdZYOHJqKvt8YBb62MILSiktcpU8IWiPBuo7EP8snj8tkfskaajOjNo+UXZSK3MBPZzNPO + gnTkF6uUdfUqq00or9TDVaJOjfz9/ysAM0fw2PWFWfDy8wDjv4V4qZM5f4TYbK7DhRny14lWJ8ZYw/pZ + vzp99CXWMMFmDcw1nqpM5gm9siZYo4e13G9Ca9TJfF6G0YEKDPYUM87zFBE4yRhvbdIoN+llqs4u4vXx + vnwsTpRhdboCK2IzFdi8VIMdmzzYt60JR3ZHcOr+KM46ksDxo20490gSx09pV+z8Uzpx8am9uPT0flx+ + xgCuOHsIV54zjKvEZLTw8RHaKD517iiuOXcI15zVhyvP6MEVp3fjkqPtuPBwDBceidOS3E/gvIP8nz1B + nLLFi6ObPTi61Y9jPIdD6z7sW5U1i+uxa7nuY1uqxeapUsz2s7awtg22ajAUVmMowm2L5HG9Yr2hLGVJ + mq6mdPTKev/yAJcYeXdvc7qy3n9fREyFHpmWsolYQEYBEwuL8Ogl9pWRpzWudMXqSjJS673La74vIrC/ + hrlaHjJgHmgokRHA/E5RmjIVtFgd41rWBvbxeDLtYDOxblsjazPrfsJrQtzN/CH3MqqzlOmgW6ozFLE3 + JriE+a21jtxYsAoxS7w+MyUCE5soArAvC60i9BCrhXnOMmOJiMDdjTRfOnq8GRgkNt/UnYddwyU4MFaO + gxOV2DtUjK2dOVigX4zI+sHE6/3ERVPEQ5ubNThzIB/nsG1P7zTjaFKPHaEMrIoAzP/oof+185qSG9ZJ + njBF/rLK/9lGrrGDnGOtMRMLPK95ns8Cjz9NDDfE4/fSbwe4HaQfy6jjKa8WC6xpy0ELZolHB2uJQ/hZ + O9tBBHHhETJ9tjyQWk9LTcXNfmFce8t18FWyDleYkCfT4ZOnmZjbzDSHKVMxpy1TEYfzHIxDbkX4LWbe + FBPxt4jxXiQP3OWS12wIwCdFYJn+ubzMxFou0z+bUMb/qai0oJT9LOKvWBHjXQTgcHMR4pESJMIuYuM8 + RBusCFZq4WXO8DA3NrKNmiqJ6cRqVQjUs8bTDxqI86pZ9yvYjp8UgOXmvOCETwrAsi/Tx58UgMtLPxaA + ayqI36uI39k/8tBmmO3fHiWOardisi8XszL1Y5uFuUWjPFQ5Tvw6JyOAkxpsIXbdTKy9uYWvY+S+5P+7 + 2tNxgHjvtFEdzhwz4VTitt1t5EWMmxlyfJnue5T9O8J+HeN2rlGNreSVe9pysa+D+L49B1uJW1eE+4d0 + mBYBuDELYzICmNx6IqLFVEyH2TbjhgB8UvxNmUwBPUvOLgLweDIDk8TP03w91a3BNHnEwhD54IAeE73k + HMSsoz3piokQPE2MN8fznp8wYpGYVB4eXJwhxiTHiIbTN4StdERDZrTF8xCTWkSs09puQ1ufA50yWnXC + gQFiWRGAO2f1HwnAsZl/EoD5XRGAg0MWNA0Y4O8nZiO2jAza0TLkRFSsXwRgLYrZTiIAVzNuG0UECRtT + FiJuIGcPhvUfCcBNIhAz3zexFvrJzxoamFc2BGBFxKGviAhcwvgoZTyVk6dV1jI/8bo8zF8Bxly4Pp25 + JB0JfqeTvxulbyw3qrA1RC7L/93Oc9jVbMbuoBl7gybsox0I6HCgSYv9PjUONmpwyKfFQXLEfY0G7GZ9 + 2cI4XW22YSrAmkROnyRHb2YuaqQ/BJlvRACOMedGm1nTmC+ayQ072b/jkwUYmynE0FQehmZy0TeZjc4R + izIVdFRGApMfhrgNkS8GyR397Vp44hrUhDNQHaD5M1HLc6rj+dR6WG8ZOy5eUx7bIIdtkcvcUMjrLKlh + fDB3ltQQYzOXVHtVqAvq4I0a4Gs104jHo8QDERkFrENNSKOIwDVsixp+r5ptL/u1EeIW+nMDcXBdVNYP + Nm8IwCIIW1AVYL1nuygCcGU68vjfuTwfZUQyz0VEabGT4m8erYi1RATgMmIZGQVcSV5QRWxU2WBCaZUW + hawn8t0c5otC1pFKYkovc0lz1IVwrEQRgX2BXF6/A+XVRhSX6ZSH0WzEKboN8VcxEYCZC43c2ohjZDRi + PnGGCMBlxKSVMtMMa0kDc7afcRvgNcvo3pAsAdPM9m8ihmWsNvrkAQR5WOJjATgRs6ItISPpHWgltg+L + H9On/OQgYiIA+yW2iOPkAece8gThGl38TRe5hlhbi5G8V/uxAJwkp23jNpGyzoSB3MSIDnLrjqQabUkV + kswBiWQ6km0ZxIvp5MHMb91Zisnr1nbyeFqcXFWxbhXi5LVtfSp0DpHXk/N1jJDTD/NYIyokhllXR9SI + 8z1Z7zc+TnxOE/G3dZI+OfVJAdiaEoAnHUiMOxQROD5CG85GQsRfWnIoTxkB3D5ciK7xErQPFpCfGFHT + lIVKtqWLedLVICKwHlVB4s2AmJ3m4Gsnv+dQRvjW+nOIZ11obqtBU7ySr/OJfW0orrWizO3g62w0NGfD + HRYxmL7DmKj2a+BhTPtbLQjQZ0UE9jCW6z1aZXr4ataFqkryTfqoPFguawCLAFzO+iKzVZWxnioDBFhz + KslVZJpiZbRqhYYmo4FFAGbsiWApAnAgWxGAE7RYmPmNuD4asiIsyxQxPzSTpwaIY5sYqwFebxNzR1Oj + CX7mD78y+4+eZoSXn8kgEjc5bD1znZs1wi8PFTBWm8lFA806BMkJ5GHRaIuT+3byaR3qZOYMxlDQb0M8 + mkfjedBam1OiqCIAMy/FfCZ0sY0Hm3NSArCXHLg+JQDHycej5GKyJEOwgfmWbRVoJA5juyWIt9sTOfS/ + HPotuWuSeau9GANJF7pbC9AeyUe8OQ8tzbmsJ7mI8LXbYyH2zyA/I/YgppDptPPIG4pkFqEy4oniTNZw + 4g62s7S1izmiklhQRgGHI7KecjFji9iB1hLNR4j+EPCZeU5mZQlUGQjZJN8lj2rhdSYiTmINMRGDbcpS + Yi0b9wT+WQCOhejnYWLOFj1jzYT+TitG+pxYnCrHmUc6cdtntiLtvkUX7prJx6108JuGrLh50II7RrNx + /0wBvrjgwsPzRXh0IR9PLeXjmdU8fGNTDr61notvb8nGs5st+M4mLX6wWYufbtPhN7uN+MsBA144rMcb + x0x493Q73j/NgTeP2fD8EVkf2IZfHXLiJ4fz8C8iANMe35eHL+5w4oF1O+5e0OOuaTW+MGfA01v5H/tK + 8eyhSnx5dzEeWMnmeVpxy5gFN49YcRPP88YeA27p1uFeFvgnGJTfmCjA95cr8S+bavC1tSo8MFuMq3qt + OLvdQjCbjQNt+ThjsBJXznnwue0BPLS/CV87I4Bvnt2Ibx734VvHvdx68Y1zuT3Hg6+e1YDHj9Xi/v1V + uHVnJa7aVIFTJoqwrTcfs610rlAeOgKFSPrLCOgrSCCq0VpbSydzo72hEd3uJpoPXfVudHvc6HE3EJi7 + 0evzoM/vRa/fze+XwlPExG7TwaklkN0QgC2qNFj52klQW2hlcSNwrXFmwEvnamIgy3p/A5VqzNYbsamR + AKzZiSNRAvdINs6gM5xGIHE2E7IIwNczASgCMAHQfdE03N8q00Gn4/NMsncRiN0QM+N4kx57SLhnSjPR + y4IRyVfBl8PgtGWgiQWlnQVmnv99Bo95CwnWM+M2/GwtF39g3/xxRyH+vLUAf95Sil+tlODrBEd3EGBe + 4k/HQRbHNZ7rKAtkkmC4uYLHZZJpYBGrIYiWm2AlDIoKkqSaKpkCWoa/iwBsopnRKGvsyNR7dRoEq9Vo + ZkIKs5hGK+XJWDWJM4mMCMCxQswrAnBKBF7mdokgb4kJZK7ZQhBqIOHRYIAkStam7KpIJ5lJRwevaZDt + Oc9z2Mu2uowA5o5EJh5lEXl2zICfLdrwP+vZ+MtOJ/6y3YGfzurw7JQBXxzQ4ppwGg7yNytMqmNMAF0M + /lBuBvxFTMLs06qiHFTnZ6PaaYAnOxMhfj7EvlghET/CwnbZUAbuW9LgO/vM+O3Z2Xjlsly8drkNr11p + wavXOvH6nSV468kGfPDDEPDbDuCvXRsCcBvw+xbgl0048d0yvP9UniIAv323GW/eZMDL12rw14vT8BcR + gD+lwdu32/DhA/nAIy7gqYoNEyG4BB88VIS373HirTvy8c49ZTjxuB/4127gv0aAP9GeHwL+HMcHv/Di + gx/V4r1v1eKFB8vx6+vy8Z2zHPg84//yvjQcZluIAHzlfCk+d7QFj17aiyeuGcKdZ8dx6Q4/tvYUo72C + /WjXosGiR52FAMxCoEECFiahSlYySVWTuLB/xwhUZuq0WPLosUwivEKAu5kFbRv77QAL6nnNKny6x4L7 + mZee3JGPr+/PwXeP5uLfzyzAf53nwu8vLMCfLsrFny+04X8vNOO5C4144WIzXuL21fNMePNcI94WO27E + O/8fZX8dH8l1bYHCombuVoOYucVSq0HMzAwjaSSNhhk8aM8YxswYM8cQQ2KI7ThxYggzOeg4cdCJeWyP + ab21qyV7fO/N9973x/5VNVVXnXP23mvVqrPPmWZ8cJYNH57jwCcXuMJ2rgMfnm3Hu6cb8NppGvxrvwb/ + OKTHK2foeWwDfneuEb8+34BfXWLCSze68OdbXfjLbU68cpcDr37Jhde/wvZ8yo0Pn43Dx99NxMc/SMDH + 349nP8bhw+948MFzTrz3tBNvfdWBNx514Z0nk9iuss5zCdu9ln27IgD/o4Nb9vef6oDfhIAfVeDjZwvx + 8dcL8MnXC4Gni4Cv8zdfrwC+UcVtNT7+agj/ubsYv7+acfCoB/csqnHteATO7Y8guY/AvpYIHGiOwJkE + Uue0qXG8XYNzOjU4u4dbAqRz+iJw0Wgkblw24qsHkvCr8wvxl8tK8K+radcU4w/nZeFXhzPxwuZU3DHo + whm1NsySMHQTMLYSMLasCMB9Pi3GCC4nub+hJgZH+/S4fbMLz52VhN9flY43b0nFR3cmKWsvf04AvliH + Ny6MwWvnq/DPc6LxiiIAi0XhT4rF4OVjMfjzMTXHtwF/O2bBS4ct+NkuI17YYsLj65gjRng9vM7DjYxX + zSoc6zDhjGY99vqisJfk5DDJ7DHGweOMgWfRDw9WR2JreQTWMrbNeTn2sqPRGU/QKXHPQN+m364lYNpR + aMARnwVnVOhxJkmDlIO+qikW17U4cGMbYx7H5G2NOtzZEIMv0b7cEI2vNmrweJMBX2624gECxrs6nbiu + 2YbzmJT3E/xsYjxay3E9w/E9W6RAX/t6AAD/9ElEQVTHFOPUCIlfX0EMWhmzRfytJ4ETAbiesUNiqDxI + 00bi10sCNsy4PU7yNsFzEhsnqJ+Q0ms0ZUvCJ+LvBAHiFAnvVMiDUYLIfgKMNoIgWVssxGP7GKflZoXc + YMzlNouv5SZqAgGMJyEK8Yxx8YzjSfwsg+eb71XDS5JaTPBfxHYT0bCAnxXz95XcVmfEoJExW9b27hMr + Niol3wYZy4cI5EZy1Jikv88w3s8y3s/l6LCG780T6C2VGLGR57g+wNhNsDacEY0lErqzGs14aCEDPztQ + in+e68eJs0vx9q4EvL2J8VLE340mvLfNgg932/HxQTtwthu4hL51aTJevygRfzs/FX84J4txIg1PborD + reMWHlPF2BWJzRwTyxyrsyQ8awis58uNWCCwXUdbT3C7meezjXlmM4HmujIT1hJozhaqlEoO04xJs7nM + HyVRuLLfjK/tTMIfLsrCu7cWAA95gUczgSdSgKcSwrOBH+J53ePBx3e48fENDnx8rRW40gJcKgKwVRGA + 399jwFubNfjnfDT+vCYGf1ijxa9nDfj5oh2/3JqMX+zOwvP7SnDHFj9OnyjGfEMiOgh8AyIA52iVErNZ + 8tQxc2Y235MnJ0t4ziIAlxOgyw2GskIN+y6KoDoShbwGWfNXysgVsi8VAZj7yppSzFci/laXrZR/pjWQ + oDey3dqC9JValSKCDrZw7IqdMhN4jDbRzj7usWNpKA4bR5MVEXjjaBIWBzyYadMr4u9ofQxGeByxwRBz + NP20mecj1kbc0kVS2k1C1cu+Gaw0YDLkxNrGRI5rJ9oJ5H0cn7LEgtw0LOeYriXZauVY93l1yJcxzc/l + ZqLMwvEzp/gL5OaqGEljAQkifa+RxERuxDeTXHVWatAT0KG/2oCBGo7bOgP6arToZAyRm8ndPhU6q2LQ + xnboqlbzWulfvS5M93DMdtgw1GJkm+jRVS8CsAbtDQaaFW0NsSS7ToJ0ByqLLfS1aKUsaKqIFiQI0k+V + PPdgNcmWzNKsI9nhuK9vIYnmcVs6rWjqMKOx3aSY7Ld02dDeHUtzooPblnY7GpotqKknIeC51xH8t/D3 + bfx+a6sWrc3h2b7tLYzVzcRAjJOyvlIDrbk2iuSd7zcwnjdEKp+3tdCY40X8lTLQ7dzvYb7o6zdikER5 + ZMyB8XE3JibjMTmZoNj4eDxGx1wYHrFjiN+R9YZHBm2YmYqnEauNexSBuLfXhq4utku7hedjQnebBf1d + sRgd4PFG3SsCsBVr19iwMCfCrxlrp0yYmyTunTFieS2x73r6JTnEJuKz9fMWfseA+TEt5skl5vpVmFVM + w33GmV4jZruNmOk0YqqNY7VJg/7aGHQGo1DPflXEX465Ko65YHE0x7wONfT/IMmlnybErJhxU268fk4A + pqWnkVgzVuUwruXLTGEp/8y4lkEinc78kcrxJ7N70kgIxeSG72cCsAr5jIsK1qWJECwij8wCriKBlqd9 + Q8oan0L8rPCRUJdznH4mAMtawDZlFnCrzABuEItFW70DzRxDinG/hTyoUUp1hXhNzAs+Eu9K5gifMhPY + jECIx68hwWz0oFnWDu5JQ1dvKto7EtHcQgJcx8/k5k57Mvu9COs2Nio2PFGK2qYE+EIct/Uky61JaOtO + R/dAJkYm8zExW4jJNQWYnpOZw3lYM5+HmbU5ik0tZGJqMYOWisnFNEyuTcXE2hSMzadifG02BqbT0TGc + jMaeJAR4XoWMwYnkEVZ3pCKG6s2ypm8ElHV+xbRR4fVuyaMioyMRHRMNlYamlRnAGhhMBpjMRpitBpht + 3NKMfC0zfnUGLbQrpjPwuzS7NVwCOpE4PtmhUkpAFyRpUE48GxaAw2U/S9m3RezTIvpyCX25jP3qI0fz + Z2vhZ46rIqb1iQCcE4MK5vsybiVnSlnfFGcE4uwRcFkiEGuNhMMeQ9MoArA9VoVYlxo2Z/R/EYBlTTi2 + hYPvO1Ww8LtWt5am476e72lhsKmgNUdBbYpUSkIb7CqYlPWSTzG+Z3bE8H/Cs4BdCTpFCHYnigDM/VUB + OGFVAJYS0OSoxAdSAjqJ7SE3KDPkoQfmdTFviQUllTb4FAHYjQA5WbDOg+rGBMa2OJQFbPBW0E9Kdcgu + 1iCzUItM+lc643Ya43oafSGduCGnxIq8MlkTj6YIwE4U+dworeR4kBnAhbJmsYiw5Mu0JOKW9BQeL82I + 7FT+Pt2EbFpuBmMuLT/TqryXyutMdMUgLjYSLhuvRW7iiBjM/nCT08mMXw+xoDsxBq74sAAc6+FrtkFS + ukaZ/StP+ssT/3HxbAdaQmI04ldMSkcn0JKT1UjhMVLiIpHB4+YlRMPL40qZ2CriuXrmoE6202BNHAar + PRhkXusP2NHBtmkpoY8TJ5ZnRaNIxEny5BK2UQnxqKz96yszoy7kQld7GgZ7stHDbVtjHBpqHKgLmBAi + JqwqjYaf+KQ+oEd3sxOjfSnKjaBp2uRoOuamsrE4V4D1a4uwaV0ZtiyXYPvGcuzaVImd3O7cELbdGytx + 2pYgDm6vweEddThjTyOO7m3CWftbcc7BVlxwpAMXnd5F68ZFZ3TgktM7cDHtEu5feKgF5x5ooDXivAPN + ih0/rR5n7qnGGduDOCKi87YgDm0NYv/mKuzbUIE9y/zf9WU0bteVYvNsPpZ4vtM9cRgj7h5oMKGfOa4v + pEdftY45Woeeai3afdHM01HM19Ho8RM3BGhB4hTm6t6QCl3M2+3ELx2Sw/0qpTR0XUkYD1QQN5Wkq1CQ + HBZ0xUT4zeI2g+Ndtjn8zEufL8rUoTCd8V4pAc3YT99fNXmww8vvKQIwj1mZp0M9x25DmY3/ZUFdkRFV + 2TGMD9EIiAkWZ1wI5cnDaSpljU0/uW8gNwrV+SIKx6CO/EQRgEvUqPaKOMycRaxW4yVfKYxEE3FSc1FY + AO4uZd5rcmFDdzJ2DGRgx9DnBeD+omh0EPsPkGvMMgfsaHbhvNEsXDiSgfP6k3BWjwd76s1Y9hHH8bw6 + eD2N9K0GXn89t818PU4esEQutCVoxla/HotlKqUijojAU7Qxnl9/ZgQ6Ged6uR3mf40SN0+X6jFbacZs + hQnjzGE9vIaWjDDPqeH3hI8IlpOy56vrMIsAXCgzsBlrvGk65KboEc+YFysz3kw0o9wvi4LTJBUUouC2 + STl9+uOKAJzKuJ3mikaKi+/Rx8WSZD1gqQBAS46jjyZomaf1zNlmZDFOZDJOZHCbnmEOi78pjEvp/DxT + 8rsVtaFU5tMMNART0FDJmOZ1EGPSL1OimQOiUZpOY24vIh8qIvYsZ06Xtf4lx+dnRiOL15XBsSI35eVe + WEYasQJ/m5IYFRZ/iRNkPyz+hi09JUaZOCGVQ2RdWFnHsJDtJku2BDmOm+gLPY02DLcTQ3XGYbTZgaEa + I3qrojHoi8CEPxJrRfwNxWBtkNzWH4GFEPlPdQQ21EulsGjsJ1Y6RNy2t4f8py4a08RGo+T3g8RFA/yf + PvbrMHnfWp8Zm8grt9bS6jjWamKxFLJijuNpivxzhON0gDxXWQu4LAb9lcT3AfK/WgPGG8Ii8PQpIvBk + K8dDsw5DDerw7F/y51G+VvhEG7lttwkjHXoMtsqDl5HoaeK4auZ5tUdjuJM8oluLUVkXeJicd8TGbSy6 + iPMCvhUBOD8S/kpiZ+agOuaf2no3asjh6zucaO4lhpaHEkcc6Bgzo2nM8JkAzP3qEcbSITv8/Q5U8bu+ + HvY18asIwCXkOOVdRgRllmCvMywCiwDMWJTBa0+XSkv0jXLBWQELKlbM5xeTh/CkDHR4RmZpmQYV9Ily + EUlkNmtO1OcEYKUsOMdNKt/LJFfLZYwo5PFFiKuibwUYK6SaQA19Ttbc7uLYmGAsWKiifzIfLFUZsK7K + jPU+CzZxu7GSfLtciw2lamxgX23mdhv/e2uJDpuIM+WB57WV7B8f81MFuUa5GbUlxDyFMcTC5FvFbNNy + /ic5kb8iiuceQQ5DrlinQyf5SDexfNegGz0jHnQOu9HG9mtURGD2C/vUz76tatOhstWAMvLIQvIsEYBz + eMwc8vF84gIveVl+ITECMXIKryuObSAz7UQ4TeDrJObQ5Az6C681jW2SzfbIK9ehyM++CZlpxk8F4DxF + BNYi1ydG7LFislawiL4iABcyd4YFYBF/jSsisAXZjFcZxCrJ5I9x2YwjbOc4/q/MBP6cAMy+knOLkz5L + i+J5xSA1Vx5uI7YhN8ggHkzP1fOc1YoA7KGvexgHpLJIVh7PtyIOVaEk+GtSURlMJM6RB90cyPGakZGj + 5zUzxjEXKWWgGf9EAA7P/iUuJH6U5UJiXfIwGmMbsUd6hqxZqlFmlBcXqVDB/q7keAiwfYJBI/xskyq2 + h69CjXJihRLmkhL6uzzgH+B4qau2kh/aUc92qa22KQ+P+sk7KstknKoVAVjuH1SJAMwY0NYQhxYRgPn9 + Jv5WrD4oy9boICXqm2qkGpZFEYCba42KNTGPN9YZ0VCrQ0O9hr6pIt9g3quPIh+JRh35al0rcyCtllbd + HIVAUxT8tEBTNIK0QEsMAvwsxHhQ08Fc2a1WRF8Rf2v6aL1qBGky+zc0oEH1ANuAJuJvcMgA/4oAHBi2 + 0si5FAHYjrrBWNQO0OjftfTv+h4X6rtdaOiNR1N/Apr6ktDcn4JaxtySIPEv21B8Pp7jMY7jMZG4P4mx + P5H9nsjYL5aUb0IKLc1rI/Z1o9CXDF99Hspqsoh345GUbUVijhWpBQ6lHLQ8AJlP/8spMyKzSGbFq8mF + dCimT5cHrCihL3vLOYYLNchhvs7NDk+sy2ScOFUAzuA4zUmL5vvkodzK8mBS5jmf55KdrVdm/WZlScli + FV+vCMCFZkWcDPlcqCHuDlU6USXVfUrNKJWlOolHi/I0zHEcXxznwl1LiU/ld8VFJhRzv7BI1hI2KmsT + F8iM3nwNcokf8gqJoxhniuivJeTbhfT34hI9yiqkdLSLMTEWBeQUueRRXm4rSkT4dKOa5xLiNlQZS37s + QLBM1tf/TADurnShu9yNziLyXvqUCMDVvBY/214E4Eryi4oijuFSEU9lWSWOUXLfplrGqPo4dDcmYaAl + g5aOrvoUtFQno84fpwjAVfxvH62w0Mp4FAOn8ALhDsLjuJ9IHpDMnK1UEVqN2YwFYhnpUWxrXh/PMRjw + EEMk0rc4dqoT6VOxPB8Leb8ZZcSH0rbyMHil3NsrlzWOmauqnGjwO4ntY4n7pZqciMPygLiBWJ/XIQIw + fTlUyTHOfBt+4MIAmW3f0xaLqaE0HNrdiJuuXkTE3WsycfNoIq7udeCKdjOuaDHheiav24ficPdIPL44 + 5MI9TKIPjbvw6LQTT66JxdNr3fjmkhPfXLDguQUdvrOgxk+WtfjdJj1eEQF4tx4n9pnwwQE7Ptpvw3v7 + bPjPbhv+ut2GF7fF4sfb3Hhhexye3haPL2904r4FG+5cY8Yto2rcMhSDe0f1+OqiE9/akopv787C17em + 4eG1Htw1bsfN/Rbc2GPFDd1W3NRpwq3tBtzHxPtkrx3PD7rw45kU/GQxE9+lfXVNMr7QbcFFXXYc70og + oE3HRWMFuH5tOb60qQKP7yrFMweK8K3DeXj2WAGeOysfzx7NwzfPyMEzR7LwtcOZePxgJh7Yk45bt6Xi + 8uVkHJxwY3OfC7PNsRipc6O7OgHtwVS0VKShvigdtXkZCGVnoSY7F3VZuajNykJtRjrqs9PRkJOGxoJM + NHmz0FSUrVgoNxnl6S7kxxkRZ2TwjiKQVUXArpOnGZlEGNyTCV4z3FHI9USjmKSxPCES1SSX7SQgo3lG + zBfbsYWDfV8oDgcDThwiKDvE4HyUgOBiBqCrCRBvYHC+g0Hp/kAkHqyJxKMyQ42J97FOO77U6cKVtVac + Rmdcm06ATiLfRQDcmMoknaRHLf+3m8R1KSMKZxLM3N5gwLc4Jl5ciMc/t6fi1a0peJ199frmLPxlXRa+ + OxqHe9uMuISgaw9B/VoOehGAa2nlDDqFaVrkE8BnydoEdA5xkjRFACbpYoD08pqKCywo8TKoeS0Etnwt + syOYLMtIzCp5jlUEygEm1UavCT10mtFQAkZrPhOAp7k/EXJjnI4ywkDVSwfqyNeilSC8WX7HpN2YSuO5 + tfIc+phMpxkgDxDQXMHzvoNt9HBLFL7BZPEjgr8Xp0343YwZPxzS4tk+A77UosXFZRHYxN+Pu0hwYgm2 + 6PzlJBfeeAbSBAfS413st1hkOxjc7JEIkfgPkehsqIrA0c4YXDOh4fg34YeHYvGXc5x4/SIn3rrYhrcv + s+Pta914+44UvP9UET75SShcClgE4H+3AH+rB/4YBH5Zho+/lYIPHnUpAvD7d1nDAvBlakUA/osIwFdo + ceJW28rs3xTgyaywAPwY97+ShE/uT8CHd7rx/s0evHtLIj56sAh4lsf/ZQ//sxf4Rzvw5yBO/syLd57N + wNtPZOFlfu9759jxyBYjrumPwlGZUUrAt5PE+pI1ObjztGo8dG4rHjy/FTcdqMbRuUJMBhmspTS2WY1c + Pfter0KGPgJ5dhLuBB2CJHMNHBOdBCr9TECjBEnThSZMcTyMZ0RjiOCo3xmJNRwr20iMjwUtuIrj9q4p + Fx5edDCWxOGFPUn48f4k/Hy/B7/aH4vfnGbC70/T4+UDOvzzdDP+fcSENw+b8c5BM947aMF7hyx4/5AZ + Hxy24cMjtNOt+PgoY9YZ3B6x4/0D/P4uPf61Q4e/bNPi9zvU+PU+PX5+yIgfnmHE984y4wcXWvCTSy34 + +ZU2/PpqC35/gxV/ud2K1x5w4p3HXEpJ6A++4cT7z9jx3tcteOdrJmV74ikr3vqqGW895sA7T8bj/W9m + 4MPvFIRn+v6xAXiF/Szi7yvs95dqgRf9wI/K8fGzXnykCMBe4OnCFQG4PCwAP12Njx4P4rUvluCla7Px + o7MT8ZXNBtw0FYGLhyJw7kAEzumOwAW0qwiIbiDguW3ChjvWOHDnggN3MJ5fPxnNfQ0e3x2L75+Vgr9e + 6cVrX/DizRvz8dp1OfjTeUn49cFEfH9LEu4fc+PsxlgsluvRS79pEauIRlulmj6pxgjJ6HRlNIlhDM4b + MeL+XfH44flp+Mt1mXj7thR8eJtHEYA/up79cLUIwDq8fakOb1ykxmsXqPHPc1X467EoRfwVe0mxGLx0 + LAYvn6HGX46yX84w4w8HTfgJ++i5zXo8tmzE9aMxOIuk8HBDBA4RHB7v1uN8EsczCShPJwE+VhmBs0h6 + zyHpPbM6CgeDkdhC0rImJxLjTM6DjFHdCdFotEegkfG3m349RSK+nK3BPoKF/cVaHCY5knLQl9Yzbzba + 8YVWJ25qteGWRrYp/+eLvOYHCF4f5f5jfO+hZivub3Pgdibgq5iIjzMpn1Ycgw150ZjNisJkVjQmGJ8m + CEhGi3UYLNKgg581Mn4ra25xW0MgpwjA8kR9XiS6SQ4HeB6DBIJDBN5iw2IE5UME+GKDFUaMkriMVzsx + WRuP8VA8Bisd6KRvNfB6avi/fh6vnMcuouXRwrN/o5RZLfErNz49jP/K7BbGuxTG6uw8xmqvEDMVvAUk + W9kEnDw3KVEoT79XJsuaZjFoJ5AREbi72IherwH9BD4DJCKDBJZj2TpMEtBNM95PM75P56oxy88XSkyM + kWEBeIRt0s9YLWskXz2UhGd3lnIM+PHa2ZV492gB3qfPv7PJijeX9dyacJIY4+N9DuAw7RwXPrnYjQ8u + jePYSsBrl6XjlXMz8Juj6fjenhR8ZcGNaxjLj9ZFKeXCN3GsSjno6eJozIkAXGHBehLf9ZVWbPQ5+DnP + iSBskec3rwjAGkxyzE/lRmCGcX09989t0eMr6xPxq7Ny8OYXCvHh3fTpL2Uy5qYz9jLmPp4IPBwH3OsB + 7uL2ZifwBTtwlQWfXGIFjocF4A+In05INZUlHV5Zo8EfZvT45ZQBP1xjww8WPfjuchIeX5+Fq+cKsH8o + D3N1cWhjG/ukwkaOFgVsz5xckr68cAkfERaLObbkqcwi9ldxQRTKClXKfmF+lELkpXxYEa9lVQAWO1UA + rimLRC3jfL0vCk0BFVoCMWgLqtBRo0J3PfupyaiURR4hkRcbbtVijBhjvE2PNd12LAzEYXkoEesGE7A0 + EI/5Hiem2F7DtYzvUu4tFIWhahGAVegpj0A7/7eV5yQCcAfJaGdRFMct/68ghrlcg16C/TZeV4hjVcTf + LJLgHObYAub1cmIGvzw1K08+M69nEJTnMseXixhDcqIY26cym1giW6WszVdDAlNHgtzE/+gigB6sMWG0 + 0YqxJivGmy3cN6GX1y1rqTV6I5U1hGVt4PaqGPSTyA42mRUbaDKhr0GvtEkn/b+9TkNCIQKwTVmbtYUE + Q55aLacPZosATPKfniI3/9gPBP0+jv1QLfMlY0uoXgRgEpNWKxpF2CVGr2kiaa1Tw1/L827QkhCLCEzS + 3eVURODmdhKEFinlK+SeZKDagPp6IxobhVjHkGBHoZVxsY34pqUpvMZSXZD4jPGwsVpE4Eg0M3aKtTTS + msLi72cCMGNPN9u/14iBARtGR12YnozHzHSSYtNTIgTHYXzCiTFi9rFRC8ZIpsdJqtdMeTDDzybHXBgc + IEnrMqGz3YT2NhPaOHY6WkhS2m0Y6HFgZNCByRErZibMmJ02Y24NsS59QGx2Uo+5KR3WrbVi83qHYpuW + 7di4aMG6WSPWzRiwzM+XxrRYHBXTY92oGet4HvM875lOAyZaNRhqiEFPKFJZ3znE8aaIvxxrwZJI1DCH + NfiNqCcxrPPbURsgYeO2stQEL3FkJuOdUvqZuDaNMVPWWsok4RbSLD6XIyIY99OYU2R28KoAnMIYKZZM + k99np0WS3DKekjjLjeEikvEi/lYq3wgRlFLhwUobyR77tdrDvnIpr5UZwSTM8tRvQ1DKP8eitcaOtloH + Oho4FqQMG/dlVnBTjU0RfpsUATj2MwFYSo375GlkEvwACTQJpSIAN3jQ2EJu05mMju5UtHUkorUtEXUN + buWmaVtHCsYmyrBlRxd2nTaAtcsNaOsh32lKQUdvAQbGSjE8WY6R8TJMz1dhbilAq8LCuios0pbW+7C4 + oZJWgfmNZbRSzK73YnpdPiYXchThd3whDzPreZxZL9r6M1DTmoQK4vrcYgfcSSrIWmey5lmMNgIR0SuC + b0wEolSRiIqJUl5HRKzYymcqdQy0Wi30xKAmsx42hwV2u1URhEX81WjVNFXYNDHQ6VSwmnVwx5KfOfRI + tIUFYG+yrFFpRDBXBGB9uOwn+7aQua+AcUaEYKmoEZ4NzJjD/qxivJEZwPIQiiIAMz/mcwxlMjZJCWKP + bUUAtkXBKQKw4zMB2OGSGcD/TQDmazvfd4Rn/sqsX5tbDyvN4jLwPV4rjyUisN7K6zdHw2BXrwjA2k/N + xM8NNjlONBweLU0HZ7wWbuJzT3J4JrAiABMThAVg8lTGW9mPS9YgMV2nzIpNI35Pk3FPfJFXZEJRuQ3l + /lhUkY9V1bjgIxbxcVsRcKCE2MRbbkBemT4sAjNHZTMGZjGXZTC+i/ibUWhEdolFEYFzimzK2nmFFTJj + woNSX9yKAGxFEvlheA3eCCQkyg2YGJqGvsZz4bmLpcvsPsUMfK1DUpwaCasCMNvSKSLwihDsJO6TGztu + EXx53YKDnB72DfmwO0GFRCkDm8HjkLck8vM4fh6vlI6OUXCTWGIyj09LJpZK5fmkkb+LiJiXEIUC7sta + ofLAXI3wUl53G9uq2xeLfr8D/WyfLnL5dhGBiePqy4woFRGYOauYuapEmcEga3+ZUR9yobstVRGAezvS + lRnA9VLO3cc8V85cQSwu64I111jQ2eTEUE8SxgZTafTjkXTG5GzMz+Zh3UIRlpeKaYVYT9u0rogxtRDL + s7lYom1YW4At/Hwb/XLHehGIfdizpQr7tgdwYFcQZ+ytxbHT6nFsfwPO3F+P4wcbcO6hJpx3uFnZnsPX + 8t7xg0183aJszznYiPMOyn4zzt7frJSfPnNvA47JrOM99Th9Tx1O31uPwztqsW2+UCkLvTCUitneBEx0 + ODHKXDdUz9xbZ1Qe0uoJqdHlZ1z3q9Af0mKklhikgfFe1hltt2KC+bk3GI12coFOEYJlFnClFs3kMXUc + f/KwhgjAyoxeYgexjBWTmfqylZLtOUnR9F818tM1KwJwDHI47j41YmUvj1GcTl+nL1QRk9SXOdBQbudW + RGAzKjKjUEl8q4jAuTGK2KtYXtiqyElEBA6KAEy8XyMCMDF3A32lvkSLmkK+rwjCKjSVEpOVqdFepkIn + t/0VWsw0xGJdewK29qZiW38aNnWES0CLADzI3/QRB04z/m9rTcDZ4/m4am0prp0vwXVzXlwzk49z+1Nw + Gr+/RP8c4rm2crw205po7cxdM4U6bGHekAkWu2uYi33MySUxmGMOnSVuW0OcNE6uMkj+MsRrWVOhx7yP + 2Jo5a5H/OycVjMhf+ok7O4g7m/k94TqB9HD8FBFYHioVAbiQGEnWWs6nP+UlqZGVoEaSMwpx9Fe5T+Zi + LvAYaSYac4PE0wQHeQzjdTJjWjrjaBb9PV3W/qW/J9DfZfZ/skcVthUBOI3xISvTiuwsG3O5A1kZdvq4 + CSmMH6kpktNNxGlOVFUlork+ixYWgOsr4lFTRNxWYEUo14RgHvMquY1gzsL0GBRmSglonbLEgyz1UCTY + nO9ni6CbxrEj4g8tk9e4KgDLzF/ZV8RhEX+5FZOlJOTBsRxiBxGAZfavVGKq8WnQUmNET5MIwMTXnXHE + OfSROuLSKhWGOOanThWARfylrSP23kgcuKUxErs6VThMnHTmtAeHie22dbC/ajSY8UVjnLhohJxggNxg + lGNyE7HC9loPtgaJvwI2rGM8X+3XKWKTkWJNWAAuikFvSTS6yqLQUxmDgaAGw9VanpcOEw3kfysC8HQr + cWKzPJhH/F2vxnAjOcSpD5WK+NumxUAz8WcDcWh9BHqJTwdbozHcISWh+Zse/mbQhIlhG8aGRAA2fU4A + riwzEPN60NSYiMbmBNQ1u1HPtmomH2kfdKFnzImOMStaiDtXBeDacRNqRiyoHnYgOOhEoN+N4IBHEYPL + 2o0obFErAnD1gBPV/SIAO+Anji2p1aMwqEdxQI9Sxl9fyApfUB6IsqOq2qFUXPEHraj0h2e+lZdrlJmZ + lfQ3EYGLCkWACc/iS6UPKEKCGGOLvM6hTylrWBZpECjRo7qYMUHKx2dFoZp5Re4XdEhflWkwRyw7HzJj + bcCEhYAZS35y2yC3VfKwsxZr2U9ryX3XMY4oYjDjy3q21VK5CbPkwVI5rM9nY6w0o7rUwNwjD3+TN0p1 + ifJoBH3MMxXRPHe2MXligPywulaD+hYTWqVSEdumY8iFNm6b2W4NPVZUtxsQaiOOpVW10lcayU8Zr/PI + qfLKaTwPRRAq0qGQsSaXcVQethQxK4F5VIRgmVUngngyrzVZZkUzjuR4Y1AgghLjXCmvWWZlFrEPCtjO + IgKvWl6VAbIucB7b4FQB2FttP0UAlrLQ8j2+rjQhi3glrYg5vYAxgzguMTtKmQns5P8rJaBpUtI5jhbP + 80okN0hm3k5l3k4nNxdclJaj4Wseg5glkTEgIVUsmp8RBxHLCK6pEkGoJoVjJp6viXcq7PCWWpBN7pqU + EUUMEkEM+JkArGf8s8USmylGnOKKVHBJCnFKZhaPK5yi2IAKtksVrysYNKE6xHFdzXHL9qnmOA35+VmF + CrJWdin5UBXzSIhtJgJwYx35Z40D9VJZhOO2ju0UEg5RplUEYHmIvFJKQNeQHzQloqXBpcwGDgvAtlME + YD2/Y/lUAG4kTxUTkaqhTnyT/1dPPk7uHBIBuDE8s7eunfycVtOh5rjhebWpEKDfV7WIxcAv29YY+Nq4 + 38F82hFDP4xBqEeEXxWCfTxen5pb2kBYAA6uCMCK+HuqAEzeGTxVAB5yoo5+X9/vUqyxn/GjPx7NA7zO + wSSO6VS00qoZa4t4fVn0ozTGxziOCw95oSczBs404mrGbSf7WczBuO9OY/+TQ2SKAOxPRaCpEGW1ucS7 + 8YjPNCM+y8IxZiMGthMf25FDLphJP1cEYPprAXGLzAIuYcwtquTY5mciAOfnC59kTiEflckcwjeT6DMp + HDOy9EAeeYk8dJwtxpzkLTTTz6yKCJyTy/FODir3j/I5ZgrISUu8siyRnXwzFqFy8s9y5r9S4npi80KO + 5Rxy3Gzm5zxeozeD/koMVVpg4riwoIjH9NIKiH/ymQ/zeGyZzZtDyyaOzcnn/9C/xbyFWuW+YiFxWHGp + FRWVbhSXxCKPOVeWdfHmmBhvbAhUuBHgOQTJA0SMDhJXBckRguQN8nBdm8+BHp8bXfxOO7/fwv+tz9Eh + QJ/zk2dX8X8rZRkexhSpsuUr5Tggxq5hjKsPkUczP4gAPNSaiaG2TO6nKQJwrZ8xvyKWPkTuQj5SwGsU + AVgeFlUeHl2pIJRA3pAQR/9jm4sJ15cHeOQegMTyXJ5HPvN/CfmRX2b0Vico5aBFAK4qCwvA5eQDZV49 + ygp0KGMb+dgmoQorGqocaA56mOfj0Ehfqw3E/m8BmONCBOBwZQY1GkI6xdd6Wh2fF4DvnMvFDaMpuLTL + gUvarLis1Yrrut24cTAOtzDJ3dRtxc3dRtw1YMH9dIqvTNrwxFwsvr4Qi28sWPDsgh7fWVLjp+v1+M0m + Hf68XY9XdxsUAfijAzZ8dJoN7++14rVdVvx1qxUvbrLhhxtj8fwmJ57a6MZDy3Z8cc6M26YMuHlEhVsG + wwLwY/N2PLMpCS/szMAzW9Pw6GIC7pt04o5BB25jMrmVdgcTyD09Fnyl34JvDtjx/WEnfjkTjxeXUvDz + 5VQ8t5CEu0fsuGHEjWvH0nHNZD5uXluG+7b48cSuKjyzvxzfOuTFc0ey8dyxHDx/Zg6eOyMTzxxJx9MH + k/C1g8l44nAKvnIoDXftTcY1WxNwbMGFPTyPjQMuzHW6Md6WiKGWVPTXpqHTx0FSTDCYT8vNQmNuNhpy + MghoU7hPy0tGszcVzYVpJHvpaOZ3m0rSUV2QSJBrQYJZ1v+NQKx2BcwSoCaS5Ge4Y5BPsFuYqEEpSaYv + IRq1JLUd6QRQdIi1RXZsq3ThQHU8Tg+6cdRvwzEmq+MEEJcTHFyfF43bCMrv96vxSI0KTzSq8Ey7Cs92 + 6/H8APtxKB53tsXiOBPDNiaoxRwzpvJIEnPd6MmlI2UQpGdpsKtIiwt9WtzXasb3Jjz40/okvL4rDW/t + TMW7O9Lw7vZs/GtTDn4ylYCHCYauIag8QPCxxCTYx+QoAnAZt7JeTn4qyTgJk+IgdA65SSYBoZCBolDW + 1flUAKYRSBfKk7YExsUMmmUMnhUMpD4mzno6dleZHUP+eIwE4xWRQwTgSSbNUT+vgUmzn4Gqw2tEM4/f + wIBXlxFDi0ID/7Oe59NEp2ynww7RcbcQQBwvjsR1BMV3ExA/3BKJb/XF4EfDWvx8VIfv92vwbJcBX6rX + 4UICn2We/yAdv4UJOEjCUSQztd0mpMU5kOJ2knTEIsdG4m6PRD0Bi5RG2lETgfMHNbhtyYhnDrjx4vmJ + +Pslbrx2qUMRf09c7cQ7N8Xj7XvScPIbpfjk5zIrtAn4m4jAtL/w9e/8wE9L8OE3EvH+lx1470t2vCcC + 8PV6vH6ZCn89HoGXz47Av6/U4p3bbPjwS3HAoyIAZwKPpSviLx6Ixyd3u/HRrS68d70Tb3/BjZP35uGT + r4WAn3QBf+jhfzbjk5er8P5P8/D611Pw74fS8OLVbjxz0Ix7F3S4qDUCh9hWOyoisYdg99L5Aty+rwb3 + ndWAu47W4ppdfuwbycKArGvn5Dg2kLhptMjQqJCmiUA2x3yJmwGZxKs2SYf2dB36M/UYJYGaZN9PcHwP + pqjQ4WQ/GSLQzXaeIfHexoR1NGTHFd0W3Epw/vCSG09tTsA3t8QxtjjwnY1m/GCDFj/dpMZvd2jxt9PM + +Pd+C948YMU7+6x47zQr3uf25D4LPuD+hzQRXT7kdz7kdz/m65N7zHhrqwGvbtLjT+u0+OVSDH6wrMbz + m7V4ersWT+zU4rF9ajx5SI1vHtPhhbN0+OF5evz6CiNeuTkWr97NNn2YbfuIDScetdCMeOsRDd5+TE8z + cJ/2GM/nSTfeeyYFH3w7G/hFJfs2CLxcB/y5gdtafPLbIMdABT7+fjE++GYePvhaDj55iv30VAGtCB8/ + VQJ8rYrbIE4+4serd5Xgpauz8ZNzkvD4diNuWxOBK0cjcMUYt8MRuH4kCneNafHgtBmPL7rw5KZ4fG17 + HJ7cHouHl3ltO8z40bF4/PHSDLx5cwFO3JaDd25Nw+tfSMafL+B4PeTCj/j9L8/E4dw2NzaQSAyQfEq5 + 1jZZf4oktIfJZ7gsmsQhGjvqY3ARSdRDuxPw4wtS8dcvpOPt2xJx8hanIgB/coMNJ69hzriC7XKpDm9e + rMNrF0oZczVeOTMafz4WjZdpLx2LUsRfEYH/dLoafz6D+eaIEb/fb8APt6vwrY0qfHkxBtcNReDs5gic + QWJ4rD0Clw5pcfWYGZd363BJUwwu4flcTGB5EbfHa2NwWATgkgjMkUSPMkYNpJBYJsaglQC6hQm9xx2F + 8WQVFjI12O41YEe+GnsJUs5kjD2/xoaLaFc2OXBdkxXX1+txY60Kt9dE4z6pJFCnwiONejzQbMG9TL63 + NNtwea0JZ5GM7yVIFAF4TSaPnxmNkRwVRpnsR4r1GC4liWe8bSS5qCNgkHV6qwnkZO2tsABMMu1Vo4cE + sbtQxS3Nq0IviWAvwWFPcdi6SwwYIDgYDrqUB2SGCRx6CJaa8wgWMlSoYgysJECVdcqUtX9pGdxPZaxN + YI6Jo7ni1cpaMnHMO0K4ktlGmSQzeQQlBTzHAgKpXL7OZizNIcDMZ0wsYUytYoxtIkAUYbKjyMDz1aOX + YLKfgHOQIHCYQHOUNs4YPsHXU/k6rCmQihZmLFbasFhlxyCBbC+vd4tPh1umM/DjA37846wQ3jm7Au8d + yaWPJuOt9cQXizq8s4m+vNNB33UCR2jnuPDxRXacvDSWYysOb1+RilcvSMPLZ6XhVwfT8NzWJNw3HYvL + OjQ4FIrA5vJIZfbClNy4IgFfW2HBOlnzl6BrucKGdWUr4i+vZbZQjzUiAHPMT5JwzmRFMG9GcCypceek + C9/bm4G/XpSHEzfm4KO70oCHaRJ/H03gvgef3OPCJ3d6PhWAP77CynO14OOzuT09HJPe3W7Da0tmvDJN + bDVhYA7S4blhI745bsfXJmJxz2QCzh1KwbauVGV2dwvPqTI7GiXM4VJONkdEKPbRqgBcxDFbwvEia/zK + TF8pISvrABfL0+O85nJaMUlcEa9n1Ur5WhGA6R81ZRyLvig0yoyZoAYttNagCm3VxCJy47XeiMHGFRG4 + RdbI1WOsRYcxbqc77ZjrdWNtbxzmiS/nulxY027DuMwcro5EP9t/gH44xGMNhjQYqIpCd1kEOorDQrBY + R2Ek8zj9MpfnwDEhD3GFBFMwr+YwLyQzP6QyBytib4oGeRlGpHhI0OnDSczR6fTnkkwDfAVmVBG4V5Js + l8gMjTT6AAl6FU1Zwzo/Cp0VWgzRTydbCJjbxOyYaiXOqNErZRar2TY1bENZX7CVMa6LbdEV0qKzWo8u + mSlM66hRo52xoI2Yq5XEtk0RgN0E7m4SFxtK8g3hJTDk5h4xTbj8s5SFI8GpjkVAZgDX20iArajjfze2 + k3y3mRFqYD9XEwcFIlEejIa/To/aFpJsnmdLeywaW6WEL8k5SX2AZLQ6qCXJJ/Hmb2pDkYrQK+KuzOyV + ss/1xCM1AcYX5vH/UwCmtTHPfyYAR6OTPtPdpUdfrxXDJMeT4/GYnhIBOIFbN6boAxMTDkxO2DAxZsGk + YlbMTDkxNe7C2JANfeQVba1qHl+N5kYN/0+L1kYDOprN6OZ19nWZMNJvwMSoAdMTev5Wh9lJHeZEBKZP + zE0Rq86bsHm9zAK2Y9Myt0sWbFwwYxNt85wRm2YM2DhtpPH1TCw2T8ZiccCINV06TLTGYLCefc3rbij9 + bPZvgH1a54tmW+hJBC1KSeXmWiea61xoqpd1h+woY4zOz4lin4UFYJmhIcQuQwh3loq+p0V2tlZ5inpV + AJYbV+H1/VYIIU0RgPl5nqwFS2JazLgsAnAhfbhIHlAoJrEjIZS1fxo4bprr4hURuJokUNYBCpVLyScT + GkM8xxqnIvgqAnA9iW8tiazcgAnJutOrArBTEYBrQ9bPBOBKI6qq6BMrArDMPq+tc6O+MQ7NbQlo60xG + W0cS2jvJXVoT0diUgK6eLMzMBrH/8DiOHl+LrbsG0D9agdauAgxPhDC71Iy161sxt9CI5U1t2LS9k9aO + rTvCtm1XG7buFmvB5j0t2LS7Ccs767C0LYS1m/2Y3eTD/OYgFrfVYXLRj84hL2pJxstDKcgt8iilic0O + EYGl5LOs9ytln6MQrZR8VkGjU3PL9yIjEEGLjIpUhGG1WrUiAOthMhlhs1tgs1lgNOoV0VfF48SoeAwx + Hk+ri1EEYKfdQD6mR4Kd/elSoSjNCF8u+yXPgiDjyKkCsJgIF6UpUcr7lRlaVLE/q8g/qnJPFYBFQPrf + ArCUL5U1LEUAtvMabbFh8ffU9X9NKyazf422/ykA61YEYO0pArCW3xURWAOdJYZbtfLaZBPhV8vfa5X1 + k6WUttEaCatTDbtbB4dHo8wEDq8FrMfqLGARfW3uCMVkX9YIlnWAk8lJU4iTUrLUyg3ObOKlglJyOZ8d + FQEnKoKxjFt2lNNkzbISnxmF5SYUVJiQL7MXSk00C3I55rPlZleRCVm0zGJaIfe9FuSVhAXgYl+ccqNU + SkBnM6YnpX2+DLMyE5d8OYGWGC9cU0yzYmokiPgra+SRX8c5o5SZv85VEVj22SexIgIzb4jg6+LvXfEq + uGlx5OJJMhswzUC/1iOJbfLpf62UXRRLFGFcROhkEaFVyOA5ZXF85PH8CnieigDMuBDMJCdlnm5ge7UR + Z/QQ/4gA3BuwoSfA1/TjDvqmzCAvzVWRE6uZP9Qo8+rgYzvVB53oak3BQHcWejvS0FzvQo1fYgfHXKmK + 8UOrVAFob4xFR5MLvZ1xGOxJxGBfAoYGkzExno6ZmWwsifi7vgTr1xdj/XIR1q8rxNLafMxNZ2J2KgNr + 1+RgHV+vXyzAhkUvNq4rYuwtxJYNxdixuRR7t1Zg345KnLbTh/20Q3t8OLw7gCN7gjiyN4TT91bjjH1i + tTh6WgOO7a/HsQONOEfE4MOtOH6kHeccbsO5h9tpHXyvTTF5T8Th3evKsH3Wi81TuVgey8D8QDLW9MRh + si0WI8TfAzU69IXUxBPkH7U6jNYbMEVMMttqxXyXHYs9sZjtsDK3S9lo4nzijE7imY4qA9qJk5vKzAgS + gxanRSOb/ZMVF4lsWjoxhtiqAJwRz88SyPWTo5HHcZcnJaCTY4h/+d6qJRJTiwCcplJEwAAxR22pA3Wl + NsVkpkoZMXIF88anAjBzioi+gZWZv7IvJjOTq4n3a4jzRfhtKjegmf7SVM5+rdChpVKP9iojugJmjhty + ZtpI0ILpegfWNnmwviMBG2nLrR7M19kxzusdKibfKFVjqS4WB/qzcMWiDzduDOCWjVW4Y0Mlbl+uwDVT + XhzvTcdu5r+1zHm9HKsyE1jE317yhHXlFuxlrjjUHI9DjS7srbZiW5Ue68tisFwaQ+ysxkKZCjPkh9PE + m4s8x2Wem1KKVoRg4qw1JSqMMO8OEGt28roF39UST8ss4FLGR6lMJGsyFxMryexfEX9z6W9Z9Mc0dyRS + BN/RbxNE8DWtGPGgvJbJEymM12mMoRmMjTnxWvapBqnuaMZc8hy3CqmesKUwHqQm6pSHQ0QAzsm205zI + TLcpZaGlPHQ6/b2gwI4qXwLq6zKIV7KJDdLR4JcS0HGoLWLeLCYWL/MQF3pQX+4irjApAnABx1QhY2KZ + V6rwMCZynBVmE5tn6pBHy8+SSgU6YkJ5WCSa+OCz0s+ZzCWK6KsIwVEKbsxKjUIu8WtBdnj9TX9JDOqr + iKFqRQAmLiPfnGgjDmuOxViNCUNVaoxURmLKH6UIwIshmRUagXX0A6nStY3ceHeHGvuJuY5NOHH+QirO + mU/HaSMebOmwYZm4c56+MkX8O0rsO5Efje01LuyUGcCVFqzneFziuFwoJzYr0/F7WgwXazFAjtFbRH5K + vttOPN9RSr+riEIvMdZAUCr/aJQHNGQ28GSLPHQpM4A1YQGYmHBVAB5u4bFaNOhv1qCvkbywgRyhLoL7 + IgDzODz3wQ4Vhrs1GBsIC8CjnwrA4bVNpbStlCitDbGPmlLQ0paCumYP6ojzm7ti0T7gRM+YC53jjJUT + lk8F4PpxYvBRO2pHYlEzTPw1GI/a4USE+l0obTPCy/OpEAF40KmIwIFuG6qIYcsbjKhsMMPXYCFmt6CK + OEzEX1+QOIt4rZq+J2tdVtFvK30GVIj4K8Y2rCjVkQ+QX7OdpZSrYEyplrhq8jo/Tx7kZWwp5TmWm9FY + ZkAjc0ID+XgtP5flojroV8PMA9N+E2ZCJqzhf83SB+e5XRBBOGjEXCW5N/1wmn27poTjozQaC4wNi+zP + eebmaZ8Fo34r46UNzezrAP+njH0q68SKUOgrjyKeVMNfqUKViMAcZz5ahS+C16xCTYsejR0WNPfa0dJH + TEpr7LWhptOM6g5ymnbGXbZXJcdASb0e3oAGBeVq5nZiYvZXaZGIUMTcWRplBmMyY7AsmSP3jpWS2Csm + ayNnS4UymVXINixnDiwLWWgmFAcNKAyI0PuZACzi76mzgPP4/fygVbGwACyzf8MCcD4/K/DzPeLtzFIt + Moo1SOP/pBQw7zNeiQjsYZzyMEbGcyvCb2J6pLJNyaIfM8anEwOmkh/IA3Ip3IoAnJShUkz2M/OMKCC+ + KfV52G7x8NckwReSB91iUUy8X1hhJv7V8bfEOWwHqysCWsY6EYH1NIdLTbyiJm6JgttNDETcksqYmZWl + UwTgUo6TSmL+APu+ptqM2poVqzWjrpr5iZwx6NPAVxbNGMW8xLFYyzarFwGY/EGWlVg14REiBPtXBWDG + hMoSHZpqPWhvSkJLvVvhJVKZqJHjXqqR1Eg5abZ7E32hpc6qlKZtZM4OW1j8bWD8UgTgOhWCdVHkvxw/ + UtaZfLOOVt2pQWjFAvT5qvYVa4uBrz0GlTRfJ/l8ZwyqusmPe2IU8TfQx22/hqZGcFAbNin7PLg6+/d/ + CsCrJaBlBrATdfTrsADsRtMAudEgr5HWOpSKzuEMdAylI9QSiyK/VLOJRlqeCMDsJ8ZoEX9txH1mjlsr + txaOXTPNRpwQl2VERqELhVWpCLaUoLw2n3g3Hu50M83AsWVGar4FWYVW4mED0gvpA17G/0KZ5U4fKdcQ + Q5MzMubmFzOX8PNCL/0mX0N/iWZOCfPMVP53Ov0lK4W4JIP+RUySR16Sz3xUSjxSWuZAUbFVWbqlwGtS + ZusWc7+EuLuM28pCxq5i9jfHp1hVkRVlIupmctxKPOLxpVJKHvNXITlRca4JReRHItoWcD8vh/g+m34m + DyNwPGZna5DN/8/muMwp4Hv5PH+5p1ggQrARRSU8fpmbMZv4PoNtlMpzzZLKsDyPUhd8RTwPYv/qSheq + ZXZyiQXVxMKNUv454EJfwIOucsZ0tpvc76yTh/AyOS7ItX1ShakgBuUFspSSjqZRllWqKtUTK5vRQOzd + XhuHgeZ0ZQZwpzIDOEGZdVxZxrbitReyjfLy9UhhXnbTD1cFYA/344kT47ldFYBTV8VfxgK5TyDVbrOJ + /YT3lxAHVsksZr+b/mZX+L5U/pIloET8leVPi3m+smaxv4S+QW7QEvSQ58ejqYa5SxGAwyWgg8zB8kB4 + NeN5kNhrVQCuD2kVAbibeW5yMBUHdzXgxqsWEHHbfD6uHUvFxV1OXNzpxOU9blzbF4frBuJxXY8TV7Xq + cVWLGjd2anF7nx73jRjxlWkrnpi342vzZnxzrQjAGvxsgwEvigC8TfepAPzxASs+FgF4jwWv77TglS0W + /Hq9Gd9ftuLZZTueXHbggbVm3LFGj5sntLhpRIXbhtS4b8yAR2ateHq9B89uTcUzm1PxxGIiHp6Ow/0j + btwzFLb76ZRfZoL/2ogd3xtz4OfjLvx2xo2XluLx+w2J+NFyPB6f8+D+uRTcPZ+LuxZL8MBmP54gEXn2 + QAAvHC7Hc0cK8NzpWXj2jExaBr55JBVfP5iMp05z48kDHnz1cDwePSMZ9x1Owg174nHBVg/OWOfBvtk4 + bB6Nw9JQEub6U7GmMx3jjZkYrM5Ff1Ue+n0FtEL0VeajtyIHvZUkZrQ+XzZ6qsLWG8wl0ClGhz8LlVkO + pFijlDLQHjPBKwdTCgN4hofAMVGLMpLMSoLQCpLPAIFvfZIOXQSjY9lmLBXasaPSjSMcoGczWRzngDjf + b8fFTNzXErTfxqB8L5PbVxhYn2424PlOA37Qr8NPGOx+Oh6LH04l4nECmhsaYnGU5HOH14HFAjemCuIw + VujBKJ14iWD1EIn6FUyiX+6046czCfjbplS8sycN7+1OwQc7xLLw2qZs/GIqDo9163FDXTSOFkZiPQf8 + AAe+PI0mT3XKejl5KQTTSTFKSQKpj55BAiw3qovkiRHaqQJwEQNHfjqDFb+fT8IlT4IWEwSXp0ajhoGm + nUFpgGB7OEAiWJuo2Dj3h+hU3QwK7QV0aALtGibZUBqJlGL8rfw+NRL1PKdWOmk/A/Ii9w8xkV1aFoGb + pVw2AeZT3VH4/oAGPx3W4gd9GrafCQ/WGHGJNxob5HckH43sswparo1k0WlEgtuORJcL6XYH8qwEdg4S + GwaAuZIIHCDQvmrSiAd2OvDjC9Pw52vS8eq18XjzaidOXBOL925w48TtSXjrS5k4+a1yfPKLWnzyp0Z8 + 8ucGfPxyLT7+fQD4RTnw/QKcfCoe7zxoxYn7aHeY8c4Nerx+eQxeOR6Bl86KwKtXafD2bTZ88IAnLEDI + TLRHUoEHE/DxF0X8deCDL9jxzpVWvHaFHe/enoWPHvfh4++3Ar/rAv7aiI//VI73fpKtCMB/uzcJP73E + gaf20G9nNDiP4PsAScROgvl9jTZcOleIm3ZW445DQdy034dLNpWQPCSiI0uLchsTll6FTDUTmCoGqWom + IwOBg4Pg2aNGNQlWK4N8b7oewxzX4/kE8Nz2kvC1sI1rdRGop/XFRmFNmhFbi0w4SvJwaacat4xacP+M + Aw+vseHRGSOemNbg61PR+PZsNH6xQYU/7zDi37tteGuPAyd2OzhmGZd2sV12iWi0aia+DtuHtJPbTXib + ce3VJR1emtfg52tU+CaP+chkFO6djsQd0xG4dW0E7lwfgS9tjcJXtkfj6X0qfP9MPX7DNvrzdbF47U4X + 3r7XhhPso3cftuCdh3R460GtYm8+pMXbIgw/4cR7zyTig29nAD8tAl6sCM/wfinEPgjgo19U4IMfFuPk + C3l472tZeP+JdHz01WxaLi2fVohPvlrJbYD/UYV/3lGEP1yZiR+dnYDHtupxx2wErp+MwI0zEbiN530v + ++2xOQO+sWjFC5vc+M72OHx7txvPsT2+tdOAHx+246WLk/GfG7Jx8ou5eO+uFLx9uxuvXe/CXy6NxW/P + jMVP9nrw+FIyLu5JxPZaJ0ZIPttIrtrLVej0adEjAkpZFOZIvHaK4Coi/a44/PDcJLxybTLeviUBJ2+N + BcRuZD9ca8S7VxoUAfitS/R47SI9/nmuBn85S8o9R+NPZ34mAP/xDO6frsLLZ2jx8mE9fruPfrk1Gs+s + j8KD7I8vDEfgoh5afwQuH4vELQt63Llkw+3TJtwxasJtg0bc3Mv41G3CJa1aHJUS0PTLxfwITGdGYITE + upeku8MThXZ3JPri1ZhM1WGB4GVDrh7rM2KwNUeFg2VmHKuy4mySggtrbLiMJPtKJtprSKxvqY7BPbUq + PFynxpcb9fhSsxlfZPK9icT8UsaOY74Y7CmOCgvAGdEYJRgYJkEYzmO7FeoxxETfV2JAcy6JHONnDYlN + Nbeyr5SAzmU7E+R1FKjQns+2F+Ox2vJV3Magla/FWghwOoqN6PHJjBI3+ggy2ktIZHN0qGQcLCUYLGUM + LOQ153ErNxVkvUqZsZKQqIGHuccdr0dcvJamUm6uhsuYRIeFRSFl8hQfAY2UM8vmZ3lyA5yxvpKktYYA + pqFAi2aC0VZad4EBfcwlgwUmDJLsDOaQ3OcaMcH3pgg0ZwpJTktozDVryozoz41GH699K0nJLZMp+Clj + yr/PDuHk8UqcPD0PJ3Yk4d9LVry6wLGzyU7fdePj/W7gdMa744xvF9PPL2dsvMKJt69IwNuXpOKfx1Px + 0hlp+NneNGKMJNwiT7vXhWeBzzD2K2WdSfDmSXQXyy1YR0C2SGC5dkX8XUOCPcNrmmbbTuZHYSI7kuMm + UllHfldJNK5kfvgqMcjPD6XiX1dk4sRNKfjknmTGXJrM/n3AqawB/NHtLnx8oxMfX+PAh5fZ8OEFFnx4 + JreHbTi5h7F4Wyz+s2DDy2Mm/HzQgBe6NPgqidCjXQY81G3Gjb2xOL3Lg6UmD0b8JNVS0oaAv5hAV57c + VGYhElTLVvpInhSX2b75PM+iHJI7kms/wWIFtxVFUagQMs9rL+FnRfIdWgnbQ94PkOTXkBTW+1Ro9GsU + awoQVAbUaA1q0BbSoZMErq+efdZgxECTAUONBow262kGTLbbsEZE304XpttiMdlKINpiwWi9FoMh+hhz + 7UAwCiM1GgyTDA5JucbKCHTSL0UEFuuUWcAkPe28hha2ufiBn4SmyEnyYSDg1tC4lZuBcmMv2aNRygA6 + mZdlhkgSc3A+/bgslwA734xSEhEvx7uUhpZ1/yo4zmQ2fB2vuYPEaph4aU17LOZ4zmKzHU6M1VvQSVBd + y++INfK8wmXvw6XvWwi2W9hGzX6xGDQHo9ESikYzr0meeG6TNVhDTgXki9Ana7nJjT0p/ZdFDOSl75eV + m5WbRP4a+2cCMGNHI8+lvo2ktMEAX40apX76bQX9t4pkJkjAX08i32BFDc8xWEMSS+LuryLJDZAsB9UI + BSIVoVcEXxF129sY31oi0VTPaw6FReD/LQCLSEx8xO+1fioCMzaScHe0a9HVYUJvj4jALoyPxWNq0qOI + v1NTsZiYtHHfggmO38lxM6YmbJieZN8Tqw/0GpQy1HX8rxr571CUIlA31mjRyutr4/jpJPfo79JihKR9 + fIS+NqbBzLgGayZ0igA8P63FwqweG9dZFBF4E3nFlnVh287X25fM2DZvxHbylG1rrdi51o2d826sZw5Y + 063BRFs0Buoj0U78Uis3Oxj/ldLP5WwHtpcQpvYmO9obnTwfxs1mD9pbE9BQ72K7cvwUq5FLX0lnrDtV + AM5kP0q5NSmllUHMmUqsKTFVWd/v/xSAiYuyNMpDG2HxV6eYzAIOC8BS+jkWDdVuNJGUylZKQYsAXF3B + Pue5yJP2Ulp8ddbv6ral2o7mFQFYykOvCsB1wVMEYFoVj+FnHhMBWKyax5LZvg285tb2RLR3pqCrNxOd + 3elo7yApHvJiabkR55y/jAsu2449B6YwMlWDrr4KTM01Y8PWQWzdNYqtO4aw+7QJnHZkhjaNg6fP0KZw + 6AzuHxWbxP5jtDPHsefoKHadPoQdh/ux7VAfth8awJb9/VjY2obhmRA6+isQavSijHwpKz8RyRluxCfH + whUfC1usHRa7FVaHlfs2OJx2ZT9c2tkAk0VKPptgs/EzhwOxsbFwOp1w8LsWvq/VqRXxNzo6ElHREYpF + x0QqArDFrIfTZlBmACc5iV0ZV4ozLBwv9M18tuMpAnC4BDTjJnNhKfu8nP6tiMAcC5VZKqXiQAVzZXl2 + FEqZH/P4vVMFYLc1Ak5rjLL+r51mdcTAaqc5ohT7/Mxfmi3qUxMRWNb1Da/9q1O2q+LvqgAsprfKTF91 + WAS2fmZSSltrjIDOFKEcy+bSKOsByyxgEYDDIrDmUwFYbj6KSSloEYaVMtBpGuVGplhKpgrpuVrkMq97 + OYalFHSxz4aSKhvKAw7FSnxWFDPPFvksKOR49lbYUUDLp+XRZNZDdrFFmQUsawHLunm5xVICOiwAl1R4 + lBumcuM0MVUqlny2/q7MwA3Pyj3F4lSKxZFXr5oIwPGuaGX9X0UEXhWAaY4VEVjEXxGBPYn8j2RZt0/W + A5XZv3rIrMBVAVjE31MFYDH5LJXbdLZRJjlsNs9NygV/TgAmpqzJ0aI+n5iPvKazwoo++ng/fbE3FIue + Gic6grEIykNezOkyI6CEeKqUOV9uFslNoM6WZMbLTPS0pyp+rtwUKlMr1lBjZvxyo7PZpcSz9hZ+v9WJ + zk4nero9GBxMxNhEGubWFmBpfQk2bCrDRtrychHm53MxM5XJ2J2B2ZksLPD14kIelhZzsW4pj9/Jxfrl + PGze6MXWTUXYtrkQ27cWYeeWIuzaWkgrxu6tpbRy7NlWgdO2V4Zthx/7d4ZnDh/YHcShvTU4eqAJRw82 + 46wDLYqdub/pU5MZwadtrMTuhRJsmy3ApqkcLI9mYGkwBfPd5P7EFEN1BgxWa5m79ZhgHpluMmG2lbit + 3YqFLiuWum2Y77RgUmYY1sYQE8egh/mxJ8A29zNOMi/LGnFyjyEzjvGcvin+uSoAi63OAJZ+lFnAeTL7 + NznmUwE4O56f0WQ/LABL2XcdAl4zqotF+LUo5pcy/8Qd5YJjVgRg2fqy+TonUjHZFztVAJbZv80VRuIN + E9qqjGj3m9ERsKCLcb6/zo4RxvfRWjsmGP+n+XoN9+cbY7Ek1Zpoa6otGKskxiqKwQR52jIxyenDObhq + XRVu2hjArRsqccf6cty+rgLXzxThosFsHGlJxFaOxxHylB6O117mPJkRvNXvxMHGBJzRkoAzW+JxlFj0 + AP9zV9CEHcQfO6tN2Bo0YD3x+zpiqmWfDstVemyoIpeiLVdosLZUTewfiVFvJAaLohWxsLVAHrILt408 + nFpIbiLtKNXjRAAWy6GfiUCf4ZJ7LhFIYTxMJs5TjD4sD/2lxPIzxrBMV9hEABbLTFAjnbwuI445Ok7D + ftUgNV6DtCQ9MlKMigCcm+NATnYsc7cZSQnhh0Yy0jk2CmOZ/xNRX5uhzP5tDKWizpeA6hK3MgO4sTQO + Hb4k9kcy2oKJqGEME0yex+vIJzYoIR4vpY+Xys31PJNyf0tukovlZQom5HlwLIkALCb7YcH3M8thTslJ + j1GOV0jeV8k2C5WpFAG4pdqAbqUijQ2jDXaM1tkwEiSnJOccIV6crIrGfLUGS9VqLBETridG3dygxq42 + Lfb3m3BkzI6z18Th/KV0nLuUjYOTSdjR58LmNhvW1xqwlvh2hnxh1huNbfSZ7Yznm0uNWFesxVIJeTLH + 5zz501QxsXyxDv2F9K9CNbo43lrJI9qItdrJtdrLIshLI+mD5L3E/eP15AvyQCg5c19NtLI0h4jAI+QQ + Q80axWTmb3+TlH+OQW9DNLrqOBYbOG5WBeB2FYbJk8b6ySmHbRgfDAvAwaooFJE/FBLjFRcQCxNPtTan + oa0jDfUtcahtlgcs7Wjrc6B71ImuCTs6JixomjCgccyIxnEb6olb60ddqBuJR91wEhpGklEz4EFpqwHe + hhhUdhpRM+hCTT/xPWNNFf/X12yCv9mKQKMNfvqFYPoqxnSxUI0L9Y0eBWcFQ/w+fbmSfumrEDMos4BL + S4kHvVIGOgaZGRzrgjFpgjczM0XQjoGvxIA68tRW5ta2Cm7JUZtz1Ggil5F1tTt5zYP0sTEfY2KAXEzM + r8cM/XMuxNhIm6OPzvi0mCC3mSTnEpF/pixGmck9wzwyQXw4HLCii/3dyFwtYkNpcVgALmF/VlaEBWCx + AMdHFceYj31bSWxdSV7nq+XnHGN1nWY0dluV2b/13RbUdpKvdJgVC7VbUNVsRgX5Y2m1HkWVWhSLuMgx + VMZrkrKyBZka5lD6NeNwMuOyzGj8dP1svp/Na87PVSmicRljpJTbLg/SeI0lQSOKGJdWxd+8KvLjSvob + 2ztsxCq8Vln3d9VWxV+xAuaIwpAdXhGG2T/ZHOPZJcSD9L1kcsFEtnUC/z+R/ZPEbdhWBeBImszwDQu/ + q1t5WO4zvETOILMlS2NR6nPDF4rjeEnk1k2O5yBOCpf4zS2SGcT8Hx7XxjbQM+59KgA7PxOAPW7BO9FI + SVYp67pKlaGSYvLLMh37x4BqtoWIv3W1FsUayBnrq9kPbJeqcuLUkigEOB7rg2ZyDvZZje1T8XdVAJat + X2ZaM157eU4VbPfmOg86mkUA9iiViRTj+FYEYJ/hFAGYnKRWjq1bMSn/bFKsrk73qQAcEgG4jRim24D6 + Hp43OaGYIgDT1/2dxDi0Kvp+ZUfYfF30C5oIwL6eaPj7mVtpgQH+RmxIq1hwmLx5yPC/BGAxWe9brHpl + /d+6Pidqe8nBe8nD+uPQPCACMGP8cDq6RrPQOZK5MgNYBGBiPubz+Ez2ATmgzPi1ES+I6CtmchO70yxx + xM7EkGkFssZvCoLNJSivzkeGNw6uVBMcxJtuYs3ETGLNXGJg4r7UfB47j7HAS/xRwhzA/8pjrPWy7fOL + wlZUqFWwoSw7UCAPJQtHpY/ImvPZqVHwcqwVCc8k1ikmx6yocMBX6eLYiEVJCTF6iRXlMgO3zKEInuVe + CyrFCszwcSsm+6W5BuRz7GaJhkNcJCaVULzpPHYWxzItP9OI/CyOW15DrjzkxBwn29xsEYF1yOJ55Mhy + SXKfKl/KQzOekjMUESuVFrvhzXUwJ7ONEjXMeUYU5tKfmYPLCmzMe+yfcsZcnnd1qY1xkDGwyknM7MEA + /aeHPKGN59pEXl0ry4dmcDyQf1WSf5Uzb5bmqdhOauZiWVZFJkLwM/pXiPms0U/s3ZDCXJOKdvphUzAO + Mtu4ku0iM6KLvOQieXokJ7MP5UHRFc4g+zILWJkJzL5WBGDyfHkAXGK3xHG5XyomPuktoP8UG1HFPgjw + /D8nAAvOz1WjiOdbwvFURfxfw1jfSNzVwmtsYmyQewESj6uYL+TBnLAAzP1yFY8V9TkBuKvJjvH+ZOzf + UYfrr5hHxE1zXlw5lo4Le+NwUV8CriQRuGooCVf3x+PyTjsuIVCWWVPX0Llu7NbgzkEd7mdC/PKMGY/P + GPD1WQ2eX1ApAvBvtxjwysoM4HdlFt2KAHxyrxVv7rTir5vM+OWiHt9ZMOEbC1Y8vmDBvWv0uGVSjRtG + YnDjkBp3jOpx36QJD0+b8MRiLL6xIRHPbEjC00speGIuCY9OJOIr42F7dCweXxv34PlJF34+7cbvZ1z4 + 85wTf1vnwl83u/HiJjde2JiEr23KxmMkI4+SdDy1N4RvHarGtw/78J3DxXj+cC6+dTgdzxxKwzcOpeDp + AyL+xuPxfbF4/EAsHj3ixKPH4vEg7daDHly1Lx7n70zEWZvYiAuJ2DmXgq0zGdg8lonlAZKi3hIsdlVi + qbMKi50BLHT4sLajgtuysPGz+RVb2xvApskmzPRUETQmIcejRiKDuIDWzLgY5EnJ3CQtKki8g+kEMUkk + dB4GP7cGzQkm9KaQyGTYsKHAiT0kwsdCibigNgGXVHtweciFawnMbiWRvJck+8sM3k+32vFdApyfjdjw + mykr/rDGjj/Oe/CHden4/mwmHhlMxTUNiTjDl4jNhR7M5rsxWejGRL4Z6+mUZ5SbcC0TxOM9TvxqPhmv + bsvA+6dl4sN9qfhkt1gm3tqajRcJHp/o0+LWpiicV0lwSQIzzIHfmB6lrJO1KgBnypOOUtYmPVopN1Ag + T5xIzfjCsPBbnG9DUZ6ZAYRJmkksU4hVAgmXECsRGRjMAulsiwIrekqdigg8TtA9FkrAMBNoHwNCK8+7 + PlsPfxqTAoNUFf/fz60/hYRrxar5npSC7mGAnKWj7mDiPrsgAldVRuCWYAS+ykTyvUEtfjZqwE+HjPhB + nx2PEVhfQ3C2PSUSw3T0JvZbmYnOTUuy6eBy2OBxxCLDGguv2YCAk4CWAGATgdHZ3TrcvuzCN46m4vc3 + FOCft+XgjVuS8d5N8Xj/Rg9O3hKP9+5OxTsP5+Dk8xX46JfV+PCPdfjgD9V4/zdVOPmzEnz0vTx89GwG + Tjzuwhv3mfDm3Ua8eZseb12vw38uj8FfjkfgD2dF4B/XaPDmHfawAPxIMvCVFOChROA+Nz68zYGT15lx + 4nITXr/QgH9dYMZbN6bi5JfL8OELDcCLrcBf6/DxS8V478cZePPpFLx8hwc/OM9KXzLguqFonFkbgX0V + EdhFEn2w1YVL1hThC1sDuGF3Oa7cVoxz5vOxQKDQSKJcYo5AgV6NbDUJmJogSEVypuN7Fo6LWPaFJxqN + THidyQT5DPTD2RYMZpCYk5jVs30DGpqabW2KRJ9LhzUZeuwojcIZ1ZG4pIUxpEePWznubmPSv7srCl/q + jMCTgxH4/kwUfresxd+3WPH6Dhfe2u7Eie0OvLfVhve3WvCBYiaaASe3GWn6sG3W4+0lLV6d1+FPa7T4 + 6ZSWx4vCPT0RuL4rApd1RODiXm6HI/CFyQjcPBOB+xYi8bXtGnz/sAW/PteOv1/jwOs3W/HuF9nW99nx + 7n1GvHOvBm/fp8Jb96tx4stGvPtVfvaNeHzwAn3oR/nAL4qB38pM4Ep89KsKvP+jQrz77XyceCYTb381 + DSceTcHJRzJoWTj5aA4+eKQAHz5axm0V3n6gEn+71YvfXkafPurBo5s1+OJ8hDIL+O6FaDywTo0nlg14 + bqMVP9wci1/s9OAXu9348d5YfG+XEd/fo8OLZ9rwjyuTcOK2DHx0XxrevTsWb9xmwqs3mfDXK6343Xl2 + /PSwC1/bkoarhtOwtzkekwTPItB0lGvQSaIhAvAgQeScPxI7G6JwiQjA/K/vnx2Hv1wVh7dvcuODmx3A + bbHATVZ8eJ1JEYBPXGFQBODXL+Z4PE/7XwXgP56hwkuna/DHA2r8alcMvrMxgjkiAg+tpc9OsT+muV2M + wD3btHj8oB1PH/bgqd0uPL3VjSfXu/CVOTvun3LgpiErzm+OwW6S0WWSmYX8aEwRmA+mqpQy0F3xMehP + JnHKMGMuy4q1jEWzjBVLaVHY6TVgf6kJh8qMOLPKhOM+Hc6viMGlvmjcEFLjrjotHqjX4cEGA+5tsuDu + ZhtuaDDj4pAORxkXdxdFfk4AHiVYG8zVoC+f479Qh16C9fYCjVICelUAlq2IwELw5LMWgoImggPFsqR8 + WiS/H4kabhXLiUY9QURLqQUdlQ50EhA1ETQFM8NrFhYmELhzm0f/zGIslpsNKSlSslCL+CQdPAlGuONM + iIszwMPcIzdMk+KjlO8JgCvII7DLZixnDBcxI4MxNIfx1UvAW5pJwMJrCmbHoIbnV58t4p0eXQR7PbRu + Ar+eTC0Gcti+RVbMlNqxhjF7imBoiqRv3KtBD3NHL69ra5UKtzL3/2RvGV49w4eTx8pw8kAO/r0xHq/M + W/H3tRa8sdWF9/Yk4IODCfjoWBI+PjdOEVbfv4pj6yobxxY/vzwZr1+Qhn+cmYo/HMrAD3Zn4IE5Ny5o + icE2Et9ZkhhlVi9B9RwJ5ByB4HwRCXKhETMi/LItJwnIJnhd42z78XxaLkkzr3WW+W09z/VYIAa3k0A8 + s8mF352ThFevTMB7jOkf3xMP3O/CJ/fY8f7ttFtiGX9pVzjx3kV8fdyO906Pxfv7Y/Ee49Q7xC//mnPh + 94NW/KBdh6/Vq3FvVSTuDqpwe60Ol3Fc7W60Y6bajn4S/zop/yw3hHL+bwHYy7GWz/aUJ0JLSVjrSMZa + G1wKsavm2A2URKOCY7Kc11/Kdijhd0UALpNZwHxP1kStrWAsJjGvF2LI3zT5tGiSm04kda0BI7rk5lMN + /Z8Err9Wj6FGE0ZazBhrtWKq3YlJYhApqTzaaMEoif5IrRpD1dEE61EYrlFhTG4C1RkxWk0f8EWiW4Tf + orDJfm9xDLoKo9Au4iv9ooqkqtDB8cg84lFFwKUl8GYOjrdHw22PgZ37Vj2JsYGfWwnCiasKmVNKc0jm + 00n4Ofbz6c/ywEIZ20XWYxQBuLMsBiM1RqwVgb03Hou0hZ44TDdLeU4NmogP6tgujTyvxtJoNHDs1LPt + aoujaPRBAu/6iki2UQQaqvhZUI3GkKx15EA9AXslx5TczFi9oScCsPhQLn2/SEi6z4zKoAWBOjuqiTU+ + E4DtCDWY4KsmMfBFIZ//m892KSBZL6lUo5x9UqGYnqROh0qSAB9jjd8fhaA/LPS2tTC2dajR16NFT5cK + Ha3RaGaMllLQivgrVh+lWFgApjVHfGYiBrdEcz8GLU06tLca0Nttw9CgE+PjYfF3atqKiSkTpiaNmBjX + Y3LCiGlizhnG3PER4jUS9sb6SATYNlUyS0CMeKu6KgqNNYxrHAetjVp0tTL+dkVjqI8xknhjYjgGkyMq + rJkQIViF+WkN1i0YsXm9FZuWzdhC27bBit2bHdi9wY5d67hP27XOjr3LHuxdisdmnsd8H324jTiC19zC + /61jO4aU0s+MsTynJvpXC2N1e4tdEUvaW5zoaHejqzOB1+1BDX2ukiSrkCQ8izFZbsjJ7INVATgs/mqQ + lkaMy1ySTswrMVNm83xmxD8rs3nysnTw5hhQmL1iQs5psk50oNyBWhK+BhLa/zcBWGb+hk1EYCkHbUNL + jZV9alVmMiuzmWs4noJyo+e/C8CyFnA1cVutPLDQGo+u3gz0D+bRCtDbX4Cx8Ups2dKNy67cjSuvO4gD + py9gbLoRPf1+zC12YfueNdh/eAmHTl/GWeduxXkX7VLs/It34/xLduKCS3cpdv5lu3Du5Ttw3hU7cfyK + 7Tj7sq0469ItOHPFDp+3HruOzGJxyyAm5rrQM9yE9t561DYH6BuV8AXKUFZZisKSQuR7vcjz5nMbtpz8 + PGTlZiMjOwuZimUjJycHeXl5yM/nd/h5ckoS7A4rNBoVolZKRkdKuWjaqgBsMmrhdpiR6DYh1WMgB6F/ + 5rD9i2JR7bUhsCIAFzHvFTKWiBVzXx5SLWWfl6bQyD+k0oAIPmLFHCuFHDO5zJn/TQC2Wvjf1khlXTcT + 3xf7VPhdtRXx1yDfky1jnpjRoaap+B2Z9Svlnj8TgOW1iMCKmWMU05mioDFEIoZxVMV4KTcTzQ4RgWU9 + 4LAAHJ9q5Da8JrAjTgWrM1KZAXyqAJzAcZ4g1UPIqxKJAZIzGNckFxUZ4SVWKmA+LSw3ozzgVG5sVgRi + FSG4NEjjfonfheIqF4q4LaR5K93ILXUgNc+ApBwt0qQ8HfHLqgBcXO5BPvshlf4j/71aetmzYiLaKg+u + /Q+TiiaKkXPH0Ty8TpeUTXTI+styIye8FQFYTI4Tn6RBIq8/Od2AFOYQWRc0M8OoiMAi8q6Kv7K/+np1 + XwTgNG5FAM7hvghYBdwvIY+V5TKCGWrlYeZaEYELdGgtMaGr3ILuKis6/Va0y8wrnw01JWYEmDt8bM9y + eVjIq/+vAnCAfh0gHq/1Gxm/XOjpSEB3WxzjKmNAgxUN9RY0MD83t1iVteN7B+MxNpWB2YV8rNtYgvWb + SrG4VIiZNdmYmEjD+FgqY3g65mazMDeXjfn5LKxdm4WFxUx+Lwvrl3OxYX0uNm7IxaaNOdi8QSx7xXJp + +diysYDx2YvtG73YtqkE28U2l2DHllLs3FqB3dursGdHFU7b7g/bVu7T9st2iw+7loqxXRF/s7FhPAPr + R9OwPJSCBebnGebHsSYz8YMBE7yumRbiNuKOhQ4rlrqsWNctZsZilwmzbcxLTVpiDuLPGgMGqm3oYdyr + J/b0ET/JUiZp5PWpTm45xleF3yzijWzG7hzBvzSZ+SsCsJiIwSIKr4rDishPPyhiHihnbK8qsMDvZZwt + MClWwf8pYQyQWcDKUhRKdQBiMOJ2uUF5qvmJM0MiABerUV+u51gwoYUxu5XWJuODWEERgOtFAHZilHF/ + vMaC8ZBZEX2mReSptWCeNu0nxipTY5B4ZbREhXXMB0eGs3HpfCmuWSjFF+YLccO8Fzes8eKq0Rxc2JeO + M1qTsDPoJO6NwSBx7mBmFMZ4rtuqHDhQ7cIZ9S6c25qACzqTcU57Is5oduEQc9BpdTbsrjFja0CHjT41 + NhAvim2q0mEzMaNsl8kV54ihpkpiMMHxOkrc0luqRpNXHp4hrmF+lFnUIv4qAjDbXbmHxK0y0zqO7e5h + 3mV/pTto9Nt0+mwa+06qvmSL6BunRaY7PAO4gLwmj36cl2Jkn9ESGdOTDMigyexfEYCl/HN+biz924bk + RD1jRDRjBHM2eVF+vo25Px61oTRi51TUVSUiVOZm3zJvFtg5htxo8yUSB6egk9bgc6OyUPBeWLD1ZqtR + XKBHOTlPOfNHWUH4XldxvpUYwIxcWUud1yfir+AEwQ3yoKCIvrkcS3nkTAWMFTKDq4hjprRQE14Kgm1X + V0FcRXzaUc02rDVhsJoWNGKAbd9fFomhcnKbFQF4mThrfU0MNnO7vUWPvV1GHBq24fRJJ46uicNZC6k4 + ujYde8fisanLgQ3kr+trjdgQ1IeFfPbRFnKkLeS/Gwq1WFcQg+UiNZbI3RaLtZgpkuWJyPG47eT77eQP + snyKWGtpeNtB3t1N/NVHfDrMcxqojUEfuUB3kNi/Ogq9dTEYaCAXaOC4a+SYbQ2Xfx5oDovAPfUyAzgK + Q20ajLRrMdiuwXCnDmP9ZkwNxX5OAC4hvxf+480hFq6wE/dmoKsrC40tcahhPKxvpj8xTnQPx6JngvF0 + 3ILWccbHMTNaxu1oGneieTweTWPJfC+N76WjbjAO5S3Ea/Ux8HUYUTvgUoSiYKcVgTbG6jZitDYHqskb + go2xCMmDOVLdh7GmutbN2JuAJlptHT+nD1dVCh7ThW/oV5pQWWFCCdvQS66fS3/LIYcWy2aMyM0lnijW + IEQM2EQ/7KR/dnPbVWYizyYu5/eFJ3XzuvvY9kPkAsOVbCcffYxcYdyvxXQ1OW6dCQsNjA3cTge1mCBv + GSUOHud4kXWcJ6rIxwJmDATZZgEb+QxxIs9LBGAvMXMxv1teyTYNaFAd4jgM6hAKcUySpwarGdfI7yrI + O3w1UQi16FDHdlq1WvaNWHW7CTWM06E2G/zNFlTWmVHGOCViZQX5UKVURiowooi4Wh4yT2VMFlMeymEO + FZNZiDLjsYj5s7yM7cjzlJLblbSKapkJbEIx42FBlR75HL+55LI5ZYwLjIEZtHTGH5nZm1UhojBjAvtC + BGIxKRXtZf+UEj+X1DjgJVbOl5K7/J4cI508IJVtnULeLGsQi6Vm0cgHUoj1/psAnEZ/TqVfi8l+jjwQ + UkpMJOuMBuMQqIlHVchJXmdTZjTnlzCWeaORlRfJY8TAyRhhZpzTEa9JCejYWGIe54q5ohDP+CfrkaYx + D2UxlhYyhxSz3yoYKwJsBxF8G8kNVk2EWRFoRTyqIgcWIUkeHm1ijhARN7zUjJR1Fh4RFoDlQTMRgAt4 + zSIAi/ArWORzAjCtjm2mCMAcT3LMzwRgw4oZFRE6LAAbPicA19Kv/28B+DOxt7IzWrFy2XbzdXeUIv5W + 9EbCN8Dv0PyDKsUCQ2rFgsMcs0Mcs7SwEMxYsSL++vuZr/vox702BKVcebeD/2lDbRevu8eDRmKOlv4U + ZeZvN/Nkz1gu6to8KOFYyaZfpjI2J2SJ6eBMVcNG/GcmVja5idWZq/TsNxO3IvIm51iJcxNR1VBIDJzD + 37r4vh5m9qFNcGqyGokcH0ns8+RsjiWOtdQ8jvsCYhK2fXZBNPIZf5Vl2RiLi71aBRuWMw7I7NG8jMjP + JmikRqIoe2Wd3iJi8TJeK7F2MBAHH8ddRbmTFktO7kQo4EGQWxFaRewtI44Jm3AgA4rlHqA8jMQ8Jb4o + mCkzLpK5VY184uLcNB1zlw45q9t0+hMtb0UMzibXFcslvheT+4lSLlqZBOi1o8gbi9xMK1Li1UhiDs5I + Zv7PNKI4TyYGMjbyu/5ihyIA11ZwTFY50UW/GapLwnBtEnp5PacKwP50jo3MMMYqYzsWM0YW5oqFx69Y + MfNDRYEK1cxrXXWJ6KpNRLPfwzwvJafZLiVWlMgMZUUANvwvAVhmAa+KwKsCsJR/XhWApZpDXo6U9heT + dbm1ighcUcLxVha2/0sAlnOtyOe4JUatrbChUVkPOJa5wky/k1nMWvhL9UpFsFMF4GClinxfQ18jD2Bc + He6Ox54tIVxzyQwivjBfjCumCPKGU3HRcBquIKC+ciQFlw8k4OJOOy5uNeBSJtdru3S4sVeL2+kod41o + cf+YFg+Pq/DUdDSenY/CT5Z1+O3mzwvAHx20KiWgVwXgv20y4xdrtXhhTo+n58x4bN6CL07rcBOPc/1Q + NK4fjMFd40bcP2XGQ9PyuR1PLXrwjeVEfGMpBd9YTMXTa1LxtZk0Wjq+Pp2K52YS8cPZBPx+PhF/XfDg + 30tu/Hs5Fq9uduDlbW78fGc6vrvbi+f2VeCb+4N49nANvn0khO8eKce3D+bjuYNZivj79IFUPLU/GU/u + TcIT++Lw2N5YPHbAjkcOO/CVo048eLYHdx2Nw42nJ+KKg8m4ZG8aztmejNO3pOHQxiwcWMzGaWuLcGgh + hMNLLTiy2IHDtEMLrTS+XmrD6UsdOH1DD05f38ttP87YMozz98/itHV9GGkuRkWmRXmaMSdeZrnqUJZG + AJDGoMRtXZoZdUnsWA8Do0uP1jgL+lKsmM6wY1O+E/tIhM8KJuIyDtara+NwXbUbt5AU3k17MBSLJxqd + eK7biZ+Pe/C7NS78ZcGFv69z4p8bEvCvbdn4w+Z8fHs+H18ayMWVzVk4VJmMZa8bU3S0iUyCvWwVTucg + u5HE4qk+D14kOHx9RxY+2p+NT/anA3tTaZl4b3sm+8KDpwc1uKM1EpcEVNiRF4VRJsEmEYCZsFYF4Kw0 + TfjGJxNhHh2gkMR2VQAuFgGY/10gtd8ZONJJplOVJ3HlyVwGPDpWPpN+BY/VkGNBR6EDfQThI/5EWjwG + KhgICi2oZ4AKEjyX8X9L6IhltAqSO18SkwOtks4b4OtaOmgnbYrBcQNJ2X4m7wsIUK8nEH28R4sfcFz+ + etqGF6cc+MVYHJ5p9+BWJrQDdMpp/q6dji8zgJWZSGYNHBYLXBYbsq12lFqZaN1RmC5UY2+dFpePWPDI + njT8+FIv/nZ3KV67Nx8n7snEh19Mw3t3xONdsfvT8M6juXj/hQp8+IsQPvhtNU78yod3flyMd76bi/e+ + lYZ3n0rEW1+JxX/uNeC1u/R47VYd3lgRgF8+JwK/OxaBv1+jwRt32nHywTh8ImWfH6bdx/27Y/HhjVac + uNyA1y/Q4l9nq/G3s/jbq+Nx4ktevP+tED75ZT3wCrd/9OKkCMBfS8Zvb7LjO2db8OBGHS5qj8ARfwR2 + l0dhF0nBofZ4XDJTjGs2+XDV1mJcuC4Ph8YyMEmAUMv+KjERfOuZLDTsezUBl4ogRsOEZORntkj4nZGo + Y5BvjVehN1mPAY77vlQj2jxM0vxOhSoClTERCOoi0Wwj2I/XYIEBeyf76QxfJC4iebisPgpXVEfgGgLO + m2j3N0Xgmd4I/GQiCi+tNeLfm9x4c4uIKw68u5GxaaOVZqYZFcH3JGPY+1t0YduoxVsLarw6q8VL01r8 + dEKHr/ZF4Y6OCFzeEIGza/m/3J7ZFl5X9/KeCNw4FIH7pqPwxHoNvrtHj5fOs+I/11jx3m1OnLzTgffv + tuDE3Vq8/UU13rxXjRMPM1Y+wf55Jg4nn0/Gxz/IAn6aD/y6GPhlEU7+tAhvfzsHbz6TibeeTMObj6Ti + nS+n4v2HM/D+Q1l4/8scIw+zv75cjpMP+/HW/VX4601e/OqiNHzniBuPbdLg/rURuIf28AY1ntxqxHPb + rfjJTgd+s8eN3+/z4Lf7nPjFHit+uFODH+yKwW+OGvDPy904cUsCPuJYOfFFE16/ne1wsxp/vdaI319s + xU+POfGN3am4YSoThzqSMR8woqc4Ep0rAnB3JYlaRQzW+COxvSESl02Y8ZVdcfjeWR78+Qo33r7RiQ9u + sQO3Oz4VgN+7yvj/IgCLiQAsFhaAf78/Bj/fEYkXliPw5EIEHlmOxL3rIvDFTZH4yn4NvnmuAz++IgW/ + vjoTv7o4Hb84JwM/PZyGF3bE4+mNcXhowY3r+g04sjILeGNxFOZF1CNR7yNo7klSoT/FwNdWzGTaGB90 + GGccmmHM2JSrw85CPXYRcB0o0+N0EuLTvZE4XhKFawNq3EEQe3+DEQ80mnBPkxV3NdtxPYmWIgBXRCsz + gNczNooAPCY3VJjoB/PCAnAvCZ+scdrBY9cRqFRnRiBE8FDNOCpCcGOuSpnd20AyWMff1oroy89CjF3+ + 1AhU0WRtORG0AozdtQSDjaUE3GVO1DO+Vmao4WX8zOW1SCzNTohCemIUUgjkkgg2k5J1iE80wB1vhMdj + ohngcWkIavg5QWwav5tDQJqfTUBHYJWZyvcYB9MZZ7MYUwsYc4szGXdJeioIPqt4bgGeWwPPpZHkp5nb + 5owYtDL+95DUjRWzfQk815CYT/C6R/NI/LOiFAG4n7F4u1+FW0cT8P2tBfjr/hKcOFCId3ZkKDn/jzM2 + vLI2Fm9sS8SJfak4eSgVHx1Lw0fnxeODK+h7V+vx7tVmvHsl/eyKRLxzcQpeP56Gvx7LwIuHc/DUxiRc + 3aPDnspwGfBJAuuJomisIQmfLtJjim03xfw0QbAmwu8IQfgwr2uEQFHOU26ETWSoMJMWjXmS0N0E5Zc0 + qHHfpAHfo2/9/lwXXr3Kjfdv8QB3ufHR7Xa8e5MN737BgfeuZBy62Il3OE7fORqLt/c78PZuF97a7MYb + y/H4x5oE/Lo3Fs836PHlKuIkntt1RZG4ujQGZ1WosJHEfIxEt4uAMcQ8WsLz8OZoFQFYytNIaR0p1Z2f + R0CeG0UwHYEcjotyHqeVZG9iMBNDvalKacjGgAGB0ihl3V/5vJRtL7OBy9gmlbRAYQxqSjWoJeGtLdfR + tGis0KGB2yb6fDOJTxvJY3tAh46QFt0c54MNIgDbMNpqw3irQxF+h2V2Am24zkhTK8LvYChcCm6s3ohx + fiYCsJSB7mFs7yoKWw/9c7BMhT76lzzV3pwTiUASwbE9BmlSOSWa4Jv5xGWQWb9RsJuiYNZFwKyNhI15 + OZb5Od4uJIikhbgqlyQlh36srFtNcC6lBj+dAVwajeFqPZZ64rFhIBHr+xOxri8Bc+0unq8B7aWRqOc5 + NBZyTNOPa9hmQbaVX9qJbRfk+yGeu6ydXF0eQVAeTeJLHBC0obrCitJ8A0kZ/UaIeWp4BnCmrAfHGKAQ + uAqjUr7MXyuzgEmemx1oaCPgbxUB2AxftQ4lldHIY7tk87+zeS65hcSO+XyPZLDAG4NC9lcJz628jP5X + xXMKsM0aYzDYzzEzbMXkmB3Dg0ZFCO5sV6GtmblXRF+S7s8EYDH+rpk5l7m0ifth4/Xze/XMuY3sw/YW + EYEtGBtzYpIYaZL4fWLKgKlJxktyhVUBeG6NUxGA21ujUB3k2GKflrKdVs0n7VUVrTyx2iTlsxui0NUS + id5O9j2J/Eg/4+RgFCZGiKfGojA7pcLSvF4RfzevXxWALdi7NRZ7N9M22mk27N0Qi/2b4nBgYwJ2kFes + G+Y5dUSip4bXQr+vL2Mf8b9rKogFAzIrWodWxm0RgNs4bttpnR0udJE8tbV6UN/gQDBoRlmZGrkkj0Ls + UmkZGVHIYjyUJ5szM0UADovAGanqU0TgVWPMZbzNFDycKTd09Z8JwLL/XwTgRmL7GhGAOY7+/xKA+fp/ + CsByw7GK+GxVAA6SK/iDdmVdOilNWMPjyA3K7r4sDI0UYmSslNsyTM/UYOeuEVx93WFcc/1RHDiyDsMT + DejsqcLcQi9271vE6ce24vyL9uPyq4/xO8dxzRfOwbU3nEs7jutuOpd2Hq69+VxcfQs/u5Xb287FVbce + x5W3nKNsxS674RiOX7of+07fgM271mJ5yzwWN67FmsUpTM5NYHxyDMOjw+gb7ENXTzfaOzsUa6O1drSj + sbUZDc1Nn1pTUxPHcjNaW1u4bUJ5eRlSU5NhMhmU2b9SLvrUGcAaXTTMRi08TiuSybnSmA9FNKjIi6V/ + y4wvB/w59NV0DQqTIxURWKxYqhTRt0uSo1EsswBlyxijGOOMiL9ebhUBmPk3WQRgxia3zD61q+Gwa8IC + sDkSeuJmA2OXYlYav/OpWSMVE8FW2dqiobNGcRsWgkXsFVsVf8VWxV+tlHxmjNSZoqFhfFQxVkYxfkYz + lsosYCkFHZ4BrENcsnFFACYm+C8CsIfxNJ7jWzFeczxxQCJxgcwEzsiTG5d6ZHuZi5iryuTGhdzcrPYo + M10quC0PuVEW9KAsEIeSYBzKqhO4TUAeMUtKrh4JmWqkCN4okhnAbhT74lFEzpdbYEdKhlaZASwzbk8V + gGXGrkdm7p5q8bKkBbceFdy8PhGB/5sAbCevs0vf8DiJ5OTJaUakivCbbSVvpa0IwMm8/lWxd9VWBWGx + FJ6LIgDTThWAi4mXFAE4XY2aLB2N+ZU4o5kYqKXEiOYSPRpKtKjnto6va0osSqk7v6wfWywisBGyhtmp + ArCsBdxU60LQZ0SoUipPxKK/JxnD/enoIUdrkQeKqg2MX+TGzLPVdfyPVhOaO+3oHojDyGQaZhbzML9c + iDVrCzA+lYXhsRQMDydhgp9Nr8nC9HQGtxmYnc/A/EI61i5lYHFdFpaXM7F+vVgG99OxvE4sDeuW0rFu + XQbWL2Viw2IWNi5lYQP54fql3LAp+/lYt0hby9fzudhAWz+bgw20jWtWbJq/G0vH4lASFpiXF1dsvtuD + mTYHJpotmCLmnm42Y77NgqV2G9Z1WrG+h9ZtxXKXEeu6TFjsMmONiMCyZEWdGUOMi71S+p54vpzYX9b9 + /VQAlvsOIv4mML/Sj3NTYiBlDsXyGdvF/i8BWF6fKgD78i3K8hOVeSbFyrNXBeBopTqAj/1eKaUJiXtl + KY9K4koRhMX8ckOyUIOaYg3qynTEXSbmLcb9Svabz4IWvwkdxII9xHT9jN2D5GMDPnLkSuKrCpn9p8EU + OfqaoBGTPh1GiR8HiBf68yMxy3GyvzcNZ49m48KxTFw6moHLR9Nw+XA6LuK4OactAUca4rAz4MCaPBXG + eW6CeafyorGR43JnqQGHiFWON7pxeV8GrhjIwoU9KTiTefIA847MBt7iU2ED8cqGSmJWntPmKg22ECdu + CTB383wWysgVmUtn/UbM8DpGqozo5HEr04lp2c7FzKNeWiEtl30g95AK2A/59KF8+ldeAvsljv3DmJQT + Sw7Cfstg/2W4I4nviIVpYQGYx0k1kJtYUJJl5zEtyEs2s09NyKKJCKzMAM6yIS83Fun8PDFeC7crErGM + CfIAbHq6zLCyo6oigVghGaEKD6qKnagQYTiP/llILF3uQWcoCR01KWjyxyHEHF6cp4OX/SwCcCHjYVmR + BRWFDlQyh5QW0Pi7olzL5wTglMTPBGARf/MZIxSckGekyTqLOviKGTeIF2XdPxGA69nGbX4NugJa9HAM + 9Jar0U1c30t8NUicM+mLwtqQGuuq1dhI7La1TosdbXrsoW8cHLbj4LgDByZjcWDagz3jbmygr8zW6TDN + /ppnv20IGrC12oytxPtbSrXYxDG5nphzMS8SS8SdS8SvizQRgIc4Prp4fh3FWrQWR6OpmDiSmK+F5yHb + Nlon8XHPigjcK8Ivreu/CMADrRoMtnBcK6Wg1eglPu1vltm/Oox1GjDYrsVwpx5jfWZMDsZiYiCW8TAs + AMsyN3nE917y6WC5FV1tmcSs2WhuiSfOsaKOsaC53YzuQTt6iI07x8xoHzWhZdSMNr5uHXOhbTwR7eOp + 6BzPQMdEJhoG4lcEYPppmwG1vU7Uka+FOqwItltQ3WZHfYcTta1O1DTS6l0IVTsRCIoA7EJLC4/Xlkw8 + 7UF1tQ1++mLVigDsp2/76OdlZQZ4vRrk0d9EBM7LjSafE6EzBj5+Vuuzoi3opO+70cc80FdhQXexHj3K + ElFsQ3KEPvKAfnKWgfJoDFSEbagqBhPkOGvI0ZaIb9eRX8yRW0wGVRgVEbg8EuMcU2P0yWH6ZB+5S7vf + igZaoNyE0hIVOcaKAFwRhUBAjTop30urrSE/ZF6pb+L5kbv62JeV1ZHwkxfXsP/qON5qxNh2YtWt/F07 + +6CdmLOF2Jr9UcUYVs5YJ2tfVkmey/9MAJbYLKY8mJMQtmxiKZnxKLOFq8rNCPpltrVVeZC2MrQiABP3 + FjAn5ivirwrZJcTm5PppIuAWEI8XkZPJzF7+bzb74FMB2Mc+ZlytYC4VK+FxC9kuxeyvAvZXFo+RTg6W + Se6XSQ6YQUvL4vmtisAi2kkZ6CziflkWhhxB2dKnU5k/0sgF07mfK8sflsWi3BcWgP3ERWEB2KKU+M0l + p8tmzM6VsuB5GuKxGNjYDoILRQCW9X9F/HVJCegVATieGC0liRyFeLNAxg2vtZzx38+cUM980VRnI4ez + KVvhCfV+YgPGDD9jsgi2SvWgao7jgIUm1YT+twBczGuXymLljAVNde7/PQP4UwGYY4O8QzhIq3CLGjO5 + noHcxkheI+sBc3ytCMDVdSoE6qIRImetpV8rAjCtulOLGlqoQ4NglwpVMtN3VQDuiEYFrbKb1iUCcBQq + esh/B+if/cyjAyrFAoNqxYJDzKmDWtQqIrCRZqaRcw3QF/us8Pdw7HQyb9OXAx12BFrJuThGa8kF67vi + 0NybopR/FvG3dywP9W3xKOE1ZhdpkcYYn0QemJhlgDNFC3uiBpY4Ynp3NIzMUwbiSiPxpVWq0KSbkV0Y + Tx/JR5EvA0nMTVbiU61gfH7P7o6Ci3giPj2Kn5EvZK9YJscXX2eRg+ZzTBQUSPlnLUq8OkVArPQaUMbz + 8HLsyX2fHPqOCMBSkSK8FIGZMcaOEMdaXSiBmNGNgM+lWDXfa6xNIleMV0o/FzPvFJPTFmdqlW2pvJZ8 + tCIAy4NyshyDVOPIZt7KTSYPlol+xLqZsqVlp9K30mTJAyPyZDYwuW4Oj5OXayCPPlUAtinmzbcjK92I + JLZZAtssLYH/lSb8mH6cGebJFQUmYmKZ/UvOS/7QV5OIscY0Yrs09P1fAjDbUKq9lbDtCrNE+A2Lv7l8 + T2ZK59IK+VklMVcHOUpHdTwa2B41lQ7m8RUBWCYr8n/lvFcF4FjyBbFTBeB4YkcRgU9d/zcrk/GbWM8r + wu+qyQNh7IuqUnLy0jC2FwF/VQCW8yxiH5Yy/sss4OoyC+oq7cq9pMoSA0oK1Ir5iZlqiAuryeul8k9V + aXRYACYWaGKsb5GHHTvc2LkxgKsunELEFbMluGS6AOePZ+GC0UxcPJqOy0ZScclgAi7uceKSLhuuohPc + OGjDrcMW3D5iwB1Datw9GIMvDUfi8fFIfHNNBH64pMZvNuo+JwB/eFDW1jxFAN5sxs/mtXh+Vo+nZ814 + ZM6CuyZ1uGlMjRuGVLhhUMXXZnxpyoqHZmx4ZNaBJ+Zd+NpiAp5ZSsFzJBHPknA8O5+F5+Yz8cJcOn4w + n4JfLiTjlXUp+M/6BLy93oM3lu34z2Yb/r7Lg9/uzcRPDxThh4cq8e0jfjx/RgDPH6rACwcK8a19Wfjm + /nQ8vT8FT+5PxeP7kvDorgQ8stdDc+KRAw58+bANDx+14cGzXbj3nDjccXYibjwzBdednoYrDqbgwn1p + OHd3Js7cnE0rwnnb63DB7i6cv6sX5+3owfHtXThnayfO2daJ41u6cd7OQX42ggv3TOHiA3O46th6nLF5 + FNMdFQjm2ZETFwUvCWJFhgkBgtBqks16BocmAtHmZCsa4y1ocJvQFkeQn+rAbGYstuS7sL/Mg3MC8biy + JgHX13pwc7ULd5LQ3E97pM6JpwlAvtPvxIszcfjTogv/3ODGv7e48eb2JLy1Nwf/3FOAX28pxDfW5OOO + 3kwcDyTwuHZMEXyPxUdhgQnkYLYKNzERPN0bj98upLJPRfzNBkQA3pcCnJaGD3al4uXFWHxrNAZfFKEs + pMJuAhURgBvpWKUkR6sCcE4agwEDSbY8BcFBLQJwUaEZhQUWOgVNEX9l6r9WWcsvmQ6VKkl/xXLoXGUk + AHVZBGgE0N0lTgwSjIv1ldnRzuPUpGvg47kX8bteBijZlpLMlYsQTNBQlkhHp4kI3EwnHc6IxBzPdQsD + wFECp2trIvHVIQN+MmfDS+vceGU5ES9zHP5wLBkPtjlxnABpOYcAi04esDDw6SKQqIuBU6+HR88gZzXC + F6tBOwPkMoHEmQSjN8+58eyZBfjDTT78+8EqvPFwEd57xIsPH8vHew+n48QDIvJl4p0n8vDeC2X48KcB + fPhzP975QTHefi4Hb38jDSdE/H3Ug9cfsuPVe3X49106/EcE4Bv0+M+Vavzlgij88dwo/PMLfO8uO04+ + FIePv5wEPJQA3OPCx7fxveuMePNCNf51Vgz+eiQGLx9R4e+XxuKNL2bjxNPl+PhnAeDPlcAf8/HRjzPw + 9tNJ+N1NDnznLCvuX6/HeS2RSvnnHeUx2E6wdpBE8fwJLy5dLMWFJPNHJ9OxozMew0Ua1LK9SwlSikwk + zHoCHZ0KWRqCEg2Bg5GfEbwEGDzrCVramSS72ed9SXp0J+jQ4lQhqGefRbO/Ythf/F2NRY0Olxrj7Ld1 + 7K9dBFxHSHDOIrE4l4D0YtpVtNt8EXi0IQLPEwz8atSAfy558CbH/tvrHXh3mbFpvRXvrzdyq1cEX7H3 + Nqvx3hYN3t2kxZsLavxjjRq/m9Tgh+NqPN4Xids4ri+t5/gIRWA/7cCKEHy8ke83R+DGngh8aSISz27S + 4KWzbXjtyli8f3McPrjDjffvdODEnXq8fRePfY8G74gA/FWexzMenHw+ER9/Lx2f/CgL+FkePvlxLt79 + Xhbe+GYaXn8yHa8/QnsgE2/ex7FxXxZO3JeNd+7Pxzv3FuGt+8p4vEr86/Zy/PHqPPzs3FQ8f8CJJ3gN + Dy9E4sGlSGX/Wzss+P5uG36xx4HfnebGH/a78bt9Dvxylxk/2q7CD7dH4cUjWvzjEjveucmFD++NxYl7 + 9Hjjzmj8+zaOk+t1eOkKC35+jgPf2p+EOxczcbQnEUs1RvSRZHYSWIsA3EW/6KuIIdmMxGa2zwXMG1/a + 6sR3j7nx8hVuvHWjAx/cYl0RgG348DqzMlPzVAH4n/9LAI5ZEYBVNDVeOqJmfI/CT7ezf5cj8NQSbStz + 0q4oPHVEh+9e4sKLN2filS8W4F9fLMQ/b/Xib9cW4M8X5+BXx1Lww9MS8fSWONw9Y8bFnYxv7Ms9/ghs + KovEbH4UY0E0+km8hwhAxjPtGM+wYYTjcYCgbYSxZI7AfYmgYgNJh6yPfhrB716Ow9MLGPd8atxaZ8Y9 + jWbc12TFPU023PGpAKzH0QrGRZKyZZJmEYBlDeCxXJJXgrW+ApJ2grjeIiM6CnWoy45CiPEoKGLuitXn + qtCYT78iKAhlRPGzSEVgrSLIKKdJXJN1eMtSGOd47ACPXVNMAC9rZhAQlZFw5NEnM+QGF2Op3ORKYe5J + TohGotzATNIhPkEEYJn5y1jm0cDjilEIRYqHfsvj56YRcPI4UopMSkcrAjDBkMwkziMoLBSwyHOTm1zl + NCl1GEiT8yQBJwgNMC7XMB+0ShsXWTBVEYtpgtEx5gIRf7uZL7ro24MEuLv8Gtw8FI/n1mXj91tz8a8t + mfjnukS8NOPCb8as+NNsLHN+Ek7sS8cHh9Lx8bEMfHR+Ik5eacW712hp9LOrLPjgiji8f1kS3rkoDf8+ + NwN/OjsHL+xOwe1jFpzOWL+WRGZVAJ4o1mGMfTHKdh5le49mqTCcGYUhEroB5gmZBTGUHc332X/pKkyx + PaaZUzbyWo+QbF/XqcLjjDHfOy0Wvz/HzTgQjw9vTMKHN3jw/rVOnLjcjhMX0s+OO/DGGXa8edCB13c7 + 8No2F15dduMf8wl4eTIJP+p04smgDncWxeBitsn5HAvnELDuzZO1mozMdxa0kiD7M2JQzL7wEtznE/BK + OZ3cAgPyeQ35eSrImqUy+1cArs/Ltq23Ye1kPmZGszHAON3RYFNKyPmLSZa8kSiTWcArArDsVzGPB6U8 + Dsd5qISEqUSDulISfW5lVkoDiXBzBYEmfb+Vx2n369BHMjfUaMUwfWCo0YKBWsYJAtGBWoNSYnm4Tmbh + aDBAnCBbmf37mQAcjV7GcJn5K9bH2D5CMDtUyff5uiOfxDCVBMBNkm6OQYqWBEkXCZc+Eg59FGy6KBiZ + X8zMF1YDXxtIkJlrkjiOMxJUyIgniaYPiABcSv/xiZ/xOhs4BjrYf4MB+jexzobBRKwfSMByXyIWuj0Y + bTShk+fQwDYUq2Nb+fm7SrZtOcdrpZAHtlkV44C/kGOe1xAoj0SIsbHaHwb5RTnEPvR78ZfVEtCZHENZ + 2fRL9ldhqZ5E0qQ8vV5VY1VE4JomB2oYQ/x1ckOD5IttkVckT/+Gbzyk8xzS+N/hmajEIkIK+Vkpr0UE + 4FB1JLo69JiacGF+jQfzc3GYHF8VgXX8jDiFZFsE4Ka6SJI/EUKjIKWgm5r4mvmtgXmvvi4CtTU8XoAW + pA8H+f16KQmtx4iU3Ru3YHzCgLFxLSaYM8eJ78MCsA0L8/GYGLWhrYUxi7FWSshJWT4xZT0xtlcV+znI + 9q3xRyklqVv5nx0tEehh3h3o5hjoi8DoIH10JAKzUzGfCsBbN1hOEYAdigh8mthmB07bFIuDjPWHtiRg + z7pYbJQ1hXsYY5ibRABuEBGYVsd2quU1NYoA3ESc3WJDaxuxZJsDXZ0iAHvQ1uFBY7MDtbVStk8Pr5f9 + x/YOC8AcU9nsWxLbTBLl8CxgbmnpxLxiMhswbCTNJMoiAMtN388LwDRFADb/LwFYyj7V+uwIllv+PwrA + 4Rs7/00A9vvMCAY4xoIklCIAB0QAtoRF4Fo7rzVBKf88PFKEkbFyDA9XYGZNA3afNo1rrz9KOwsHDq/H + 0GgTWtorMT7Via071uLI0e24/MqzcOPNl+P2O6/FHbTb77xO2b/t7mtx693X4Za7r8ZNX7waN99zLW66 + 91rcfB+3Yty/6Z5rcOPdV+GKGy7EORcfweGzTsPhMw/g4NHD2Hf4NOw9uA+79+3Ftl07sWnrFixvWI/F + detoS1i7tIS5tQuYnl2D6TViM4rNzHxmExMTaGlpQkFBHhwOm1ICOiz8rlokNIwpUgI63mVDajwtzoCc + ZCMqC1yoKY1HbakL/lwzc5waBYki/kYrVpzCWEyT/cJEcjp+5mV+LGJO/lQApkkJ6GzmDOE1cczFntho + uJ06OGN1sNs1MFkioWPM+tSIk8Ni7+dN3tNzq7VEQcPvyFZvjYb+/4MArDWGZ/5GqSMQqQqLwFIKWs// + trs1/0MANn4mABMLnCoAu0VsTYzhNgqeJBrjanyylECMVtYDTifPy8glXmB+Lyq3MYatrnOXiMqaeFRw + vzwoloDyar5Xn8xtMvIrXIoAHM/4mJylRU6RA95yN4oq4pTZv5m5JqX0tFIC+lMBWLViPC/G+lPNFcf3 + 3NxXBOAV+18CMHPFKQKwrP0bx+uW2b9p6eSl2Taa/RQBWPP/UwAWXBUWgOVmGXNx8ooATAwkDyH7eW1B + 4iV5iKuabdXoZT4t0qPWq0aoIBpBbquJBWXd2KDEhNLwLIEKYkS5AaQIwM3J6GlPV7bNtW7GT5nNY0Z3 + WyLGhrIwOZqDPqlg0GBnjNPBX6VCVUBmaKkRbOSxm/TKGvMd/S4MTaVhYi4H4zPZGBpLRy9zYHdfHPqH + EjE8lqoIwqOTqfSvNMwtpGOenHjtugwsidi7nraciiXaunXcLqVgcSFZsaWFFKxby/fm+dl8Bhbm+Dse + Y+1sOubWpGF2Jh2zPO7sRArmxlMwO5qM+RHacBLWDvMYYszFs92ynIQTs10uZV9m/04xVk81WzDTZMZs + qwWLbTYsy9qlHRZs6KZ1WbDcaaCZsK7LjDle61SzGaPEQUN1TvQw9tUw95amy/q/zKMc27LGrKz3K6Ju + DvsrN5V9x7FWkC43PnX/hwDMeC5loP8PAbgij/2Vb0I5x6tizBOl9I0y4rZK8giZeRwuER+tbGWtcJkV + XJUbgwD5QDU5Rk2xlnhLS9zFPif2qyVOqCszorHCiFYf+QK5V0cF+VeZCp3kF13EB/LA3HBZFEaJFyar + NBgrV2OkNAb9BZHoIFYYLVJja5MLB7oScGZvIs7pjsNxtuu5HW6c1ezE6TKTN2TDduaJtV4V1hSoMMPt + nIh9xKCbcqOwh8c4FrThqt4MXDOQhUt6UnFOm4e/M2E78eD6kkgs0dbzPDaSF27heWwL6JT7Btv8Rqz3 + 6bDkM2Cp2o5F9sV0bSz6fTZiWi1KUrWMmVoUJKsUC8+sVqEwhRyD+bSQ74kVsO0LPNHIZ1zKYTzNYv/l + MDZ5k9lXycSI8RrkJfFY9N+KXAf7w4niTBsKUq3sPzNyUkzIXBWAM62Kf6dI3POolZu6dpvMsIuEVEDK + Yb4ulrWAy1zwFfNYhXaU5VuUfg0UWMmzXGj1J6CtJhlNfuaJSie/Y0IxeZhU6BEBuETKaDKWBco9tDji + Qo8y6eHzAnC4BLQiABNPSJWQojyZcWeiEfsWMX9zDNSzb+r93IoAXB7DsaAmD1dxHMSgQx7MJq7qpikC + cCV5QzC8BvCmOg22NmixvVWHnZ167B+2Y8+wFduHTNg8YMJCmx7joWiOoUj0kBOPczwtE9fvqrNhT7UF + 20rV2FQYjfXEb4vEoAv8ziJj1YIiAIeXMuokV2gnZ2gmp1IE4FJiOp5HG01KQXdx2y0isI9bYkJFAA7J + w3n833oVBnl+IgAPiAAspaB5rkNtOgzTBlrU3NdivNuIyV76cpdBsbEevh6wKwJwL/28xk8/I77MI0Yr + kgeqK6x8PwuDvXnEeAmoq7Oirt6AllbGy34b+ohje0Yt6BoVEdiCjhE7Okfd6BpLQu844+F4Fl+no4kx + sZxxs6ieMbrDhKZ+N+p7nahutyLYakJNixUNxI51LbGob3Sivp7YrcZNrMVYUy3rECegvSUJLY3xqKtx + EJMxtlewT0UApvnKTSijr3vpb3nyAG8OMX0e8QX9TdYIDvksynqVHTxWL487wOMOyPrxZQYMMFYMlrD9 + SqMwwBjQz7buK2M8IBfpqeC2MhIj5FlSKn+R8XNDrwdr2+2Y4etJcrGxgApjHFMy+3c4ZMdATSz7hfhR + qsNUmlFZzjFcFMXzi0IlfbqK+aSGvKSuxkiOYCBnIC9tF/xsQy3bqKaRsUtyTAutma9ptc1Gtg2NbSUl + uJs6nGhslbWRbco6tT7yys8JwIylsoa+zO5fFYAz+TqTWCM/jeeSr1XWxK8mPq4JORFk3PIF6GfysGaQ + fsNtIeOMlzEpt1yDbHJqKaUrsymThT8x12ZyrOaUapHH9s+TWb6VxOb8TTHxcFU98XGDk3jFphxLZnsW + M+YW0A+yOL6yeBwxEYFF/E0nT0/Pktm6UZBZwMmZ/C9y9DQRfzPDs36TUokPmD9S6ONZ5AD5jBMl5Xae + t0cRgP3sWxGAZV3jTJ5jJo+ZzXGQmatCAmODnW2hVIchBnQQP7rEBEu6opEQF4UExsFkaTNizzyeg6zV + W05f9DNW1LJNGmvDInATt43VZtTxeqqZI4LlKvIMAxrJQcWktGxtFccb47xYI8dBHbcyTovo/yIAVxaT + NzXEo6stdUUAdqzYqgBsUviKiMdt5CmNjCF1fhGAhcPw/0UArjGhrlaHYI0KgZoYcl/y/NawACxW1yGz + yLUItfMcO5gb26NpzJfcVrVHha0zCj5aFfmirzsSgT5ydFpAykDTggPEW4Mcr4Nq1A2wHfp5vH76U6+B + W8bwPvKfXvY3sUN5M32wgTmjkWO+gf7ZRO7VHIvqFg+ae2X93yz0jBWgl1ZPrCW8PZtYLdNrQGoOsWmW + GS7mH0eiDhZiTwvxpolYU898Ipjd7IyGRx4+yvcQ++bCW5GGhHQLDI4oqEwRSnlvE7GolPt2kUPEkzdI + +e9k5u40YoVMji15OMRbEKNUCvh09m+hAVVFPG/uF2XFII+/yeEYyE8TMVGtzAAW0THgY2yqSWDbJzJO + MjbJzF9aHfF4W0Ma+yqJOYbjPUcEYBF/6fdZOuZQ+hPHq1cRgDnGOc5SiJdTmSsz40VsjkGWVG7lVjiu + WBZzdnaqhjlOp+SznGwd8njc/Fz6Gc0rDzadKgDnWpGZqkeiMxLxPG4qcXh2igEFmSbGcv43+UBZvl7B + xPXkFB3kFP21SRgXAbghFT3lHGdeMxpz5eFKlSIA+9IZrzIiUUrOLsJqPrcydrPZPulsX2kjr9zLyQsL + wG2heNRXsr/pk8EyB6pKpAS1rEUcFoBTUlYEYMEHNMEKqyWg/y8BOJd9IaJvsfTLihWzr8qJ7QXTy/0h + yetlXlnqRaMIwMXs45KcGJTSfHw/yO9IDpM1gcuZa4uIEYt5voEy5hxFAA4v//KpAMycLQJwU0iHvjYn + tm+owhUXTCDinEkvzh4voOXgnJEMHB9KxQWDybiQgP/i/jhc3ufGtQMu3DrhwV1TLtzBhHj7kBp3DUTj + /qEIPDISgWdmIvCDRRVe3KjDX7br8e9TBeADNry/14I3d1nxt61W/GytFs/PG/D0vAVfmbPhrkkjbh3X + 45ZRPW4e1ikC8H1TNjy0xoEvz8bisVknnpiLw9cXkvA8ScYLi1l4YW0WvrM2Ez+YT8fPFlPxO5KMf21I + w9sbkvDOBpk5Y8e/N/P/dom4kY6fH8jHDw+V4NuHS/HNQ8X4+r48fG13Bp7cmYwn9yThsb0J+Mq+ZDy0 + Ox4P7PDggd1uPLzPg4cPOPHgETseOmrDA2e7cP95cbj3vATcdV4SbjuejJvOSsbVZ6Ti0gPpOHdbOs7e + kotzt1fh+PZanLm1Dsc21uOM5VplVvDeNRXYMV6GnVN+7Jutw8G1bTiy3IMzNg1g00gduqvSUS5T5gle + C0kS/Zlm1ObY0ZhlQxvBaEcmk2+GEx0psWiN52vaSLoLC9lubM0neCfgPF7lwRUhF25gcL2ddm+dAw83 + OPAEg9W3umLxg+FY/HbOib8sx+LfW114c08C3jstFe8ezMYbB/Pwl735+N5iOu7tJfgvN2JzsgbTPJ9R + BqA1HNi7SGy+UG7GU50evDibjDe2ZuGTfdmK8It9Sdwm4qO9HvxtgxnfnorE/Qy+V1SrsJdEQQTgejrB + qgCcT0AvpQCkjGguwXABg5EIwLLweD4TfU4OQXiaFqlsi2QS9SQGyWQ6mQQXecJELIdWSrJfy2DQmu8g + 2XGir9RJoCNbW1gAJlnzERwUMTh5+f1CbkvokGViIkoyMZbRymkhfq+TCXqECXYt7TQCpmubo/HUlAW/ + 3ujB33el4K09WXhjbx7+uCkT35qKxxfaTNhD8DrB4NHAdirS0slVUUhUMbFr1PDaVQjFRWMoW4VdTGyX + 9Tvw4OZU/OSSCvz9rhq89Wg13nyiHCeeKcPJ58tx8rlivPeMF+88lYd3vl6A914oxcc/8uGT7/Ozb+bj + vSfT8e7jHOePxeHtRzx47UGO9fsN+M8XDXj9TiPeuMWI167T4dWrtfgH7d83G/HWPQ6c/HK8IgB/8iC3 + X3Tiw5ttePdKHV47Ho2/nx6FP++Pwu9Oi8LL51vw7zvS8M6TXnz8k3Lgj0XAH3LwyU/S8O43kvHXuxPx + /XNjcf9GEy7sjsG+qghsJdncwqS3t9GD0/voBxM5ODaRgT09cViqJblmgGpIjoTPGYVyBwOfRYMisxoF + RgZfI/uD7VZJq2GSa/PEoDdRg/5Egv54LTpjVWgyRyHIdq2IZn/FsL80TOSWaDRzTAyyT2cYZDdwbO1k + cD1EgHQWwcgFBGNX0G4qjsAD/ih8g+Dzx70mvDLrwRvr4vDWUizeXWfH+8sWvL/egJPrdXhvgwYnNsXg + nc0qvLtNTdMylmjw1znGtqkYfHciEo8x5t3RE4Gr2sKC76EajpNQBPaRuBwJROAc7l/Dzx6YiMb3d1jw + jwvi8caVUto7Ef8PZW8d39aVbQFbtizZsliyLFmWZZKZmZmZmTGOHWZmaJqklHKbpimkbYozHabXaYc6 + DG+Y33Tmvc6UKYXp+ta+djrtg9/3fX/s37mSri4c2Hutu+7Z5/373bhynx1v3mfAaw+IAByE158MwVuf + 5TV81YF3nw3HB9/24oPvRuOf34/F+8/H4M2ve/DqlyLw8tOxeOnxePzjwST842IiXro3Ea/cJ9upePGe + DPz17jT86fYU/PrGBPz4mih896AbX99mxReXgvG5+QB8biEQX1sOxjc3GvG9zUb8aLMZP99qxa922vHz + 7Vb8eJMB31unxfc3qPHrfcF48Sz7x/lQvMe+884j7EMPBeLlBzT4rws6/Pk2E35+rRXfOODGYxticbTb + gdkytheJQMuqANxUEIRWEtBeko1Z1sveZjXumdHhmwft+MNN9NF3SwrcVQGYffH9O4y4cosBb94Ugteu + XxGA/7a6BvAfZebvkQD8/nDgih3U4I8Hg/D7vWr8cqsKP9rgh28v++EZse3++OaREPz4nAt/eCARf38q + B698OhuvPZ6BVx9KxcsXkvH32+Lx57Ne/OpoBJ7bHIpPzxtwYcgfZ1rYfvVsS7bpGhKl0WT6vngNBgng + BmJt6IuyoCssBG1mf2Ud6h4nfQUB9kR0ANYziG/LDMEWkrTd7H9nSDAuVFnxQK0Vl2osuFRlwYVqM26v + NOI0SdKBPC02p/ljjkB+PC4AQwQnKwJwMDpTGKQJCNoz9GhkeVUALqSPyff6KbN6yxIIzmklPnl4SKBL + UJcfxXFEkJEtflZ8HssMfs4SwJOgRXE6/WGGFYVJJEHRamXmr/jTSII2ebnGE+YPT/jqA0tFAA6GrP0r + M2Vc/E1JJ8T9hHTF8/gpvJ40HlvWtkqMUiGW1xZHMOTzqunbNUgmuZHf03ldWbTs1WtTjP/PpC/OpZV7 + /NGaTOKeacFQlhm9BEftMSo0cr8G7tdHcLa1QIu7Opz46ngMfjTlxa/HXPjNIPsuifqPCNp/QVzy1zn6 + xK3RqwJwND445ca754x4+zYtLRhv32rEezc58P5NHly5IQqvno3FC9fG4fu7I3B5worjNWrMpdCXk8AN + pNFnp2jQRZLVTdDVw3qWNc+6WPfdtA4CyE4Suc5Y7herRh/rc9AbgBHGkRle81Ye43Q5cdKgBZ+bs+L5 + LQ787lAEXrkuBu+d4/XxGt48YcEbh8x4bZ8Z/9hBv7vVghc32PG3xVBF0P7NQBh+0uWi77LgMsHcrfEq + HGWd7KVtp60lmB1hvGwl+K1iv8mN8lfWrkuOZXxVBGDG0o8JwJL6LEVAL2NxSaYKHSQyk/1xGO2NRl+L + SwGGzeyz1YV6lJEA5qeQULN/ZjMWSkroXJKM/JRAxQol7VwaSVQ6+xXLkkx5MEkylUHLDEQ1r7dG0sKT + 3LWVsi+X8TrZ71uLtGgtFME3BH2SjqYiGN30HR1FgegqDkRfmQ6DFSIAB6GnSINOxlYRfjsYi7vz/DFY + rKXJrBbGCRL1ep8BldHs0xFmpDsMiDEFIlznD7uWhEnrD6NGBRNLi04NU5AKBn4falYRT6iU2T0xjB1p + 7JslqVrU5ZLspvujnjFDHkp1F6ox2+LAAnHwPPveXEc4ZjtcGKgzoKUwAFVpIv76oZTjXUTfbI4HMRGB + s9lnc0m08/hbfjotU4RNNQrydMhODyIRD0Qsx020EKfIAMRGBSJGBGARONj/U9KJh0ishUxmF5J4lphQ + wFhaxPbJI1HOKpTfuS99iIi/UWwfL/vlVYumxfCaEnkNIgAXMQaWVwSgvc2AsZEwTE2FY2rahdFhGwb7 + Tejp0qO9NQiNtWrUyszeUo5LxrLKMhWqKlhWyoxfluX0PfxNxN/8XN5Tnh+KC1SoKGO91XGs8Dh9fToa + fVlfIPr7AjCwKgCPj9owRxw/wnHb1MA+w5iZwfGWxutPpcm2pOnLXa2vIh6/guepoT+uZ6xtpm/upI/u + Zfzt6+QYZSyeZFyen9JhecGMDYtWrJ83YcOCEVuXLR8TgK3YuWTDrnVh2LvOiR2LdqwbC8EkOUwHj1tP + DFPDa6mmVdBkBnBVeRBqqw2oqzWirsGExkbiyzYHWtudaGp1oqbBjgr69MJiPdLZ530cIyIAx9AfxMUH + 8XMIYuOCERsbpAhEMfIio1dEYGJaj4jAWmV2j9fNthdSTCycrIi+BqSwFEvjGP6XAOxAFQl5LQlpDUl6 + eS7JKElgWa4RFSIAF9tQV2pbFX9Zv4oATO7APlNfRvuYAFzNz+VFJhLDFQG4iP8v438rykJRpgjAFuQX + mpCbTxJZbOZ9iugdjfaOZHR0ZaCjMxcjo9XYsmMMt9xxGLfcfgy79y6hp68eFdU5aGytwMR0P3bsWocb + bjyJixfvwCOPXsRjTzyIhy7fj0sPX8QDj1zEfY9cwMWHz+OeR+7GhUfuwfnL9+CeRy8o5Z2X7sSdD9yB + O++/Hbfccw5nbzmNE2dP4vjpEzhy6hocPnkSR06cxKGjJ7D34GHs3LsX23ftwradO7Ftxw5s2roV6zZs + wrp1G7Buvdh6fl6P9SyXl5exuLiE2dkZtLY2kXMkw2o1Q6NRf0z8XRWANQEwGhgHQyUNmRkeB9vWI2/W + Sxt4UJ7jZDw1I1Ue0oeR25CPyHbaqqWIWEHelBwuvzEmM0bKC1EZYrH017SUqAD4uE+kPKxzahEu2TbC + 9AgN1cFkDUCIwQ9BIX7Q6mgfE4Gvir6KcVu+1xp5zatlkIjH5pX1fvU0EYN1ZhGApdTwNw2CDP7Q8Nj+ + xNci/vqtCsCBch7+3xymhS08GE5FADbAFaVHmGdVAHYGwMJ7thKzh7o1tEA4eP+OCBGEAxDG+3UxtrsZ + kzyMSV6Z/UI8FcdYlZgu69nZ6NucyC0OR3aJC9nFLvq1cGQVuZFb5kVhZRTyWEq6Z0n97I4mF6R/9KVa + kZTpQFKGAz7Wvcz+DY+k36c5OaZWZv6uCMBhYleFX+KaUF63PUzWyGPpCGAd/8tE3LHb/GGzqmD7uABM + s8j33Cec3MQbGYy4GKMiEv1LAA5SRN9Impec9eMCcDgxlSc8ANG8hhUBmNwnSst+EqjMDs+JJD4jhiwg + higkFixhHVUST1amBaNM1qtMVqOIMbckNQhF/L5QHuxlcOxmGugn9StrQBbZ0VgdgeYaLxoq3fQTYags + 4lgvtaOrJQojfQkYHUhET1skJKV9ZVkIihlfCxlzC8s0jCtBKKxgTCdPqmoyoa0/Ar0jsegejEFbN/9D + LlfXFIraRp6n1YW2rgh09nowOBqN8ZkYTM7FYno+GrMi+C5EfmRr1vDzvIi/bsxMuTE7LaUHsxMezIx7 + MDXmxeRYJCZHozA+ItvRmOYxp4ZjMDXIst+rCL9T3fxPD4/Jc84wBo832zHaYMVovRXD9RYMK+KvGWP0 + 1+M1JkzLzF9F/LVgjhx9oUmPNU0sG0Mw1xSC2QY9Jmr1GK42oo8+skt8Z4GFdS0CsIiM/iviAtstlj5a + EX8jNcS5q+KvvLBDS44mtqLJbGDZR3noyT54VQBOJhZOJQ7OSghBFv25PDS9KgDnxuuIFbTIiVtZIzzX + p0Uut5XP7AP5tAJyAhGBi9nupeTRV60kTaesB12SLi8FBKMqm7GKvrw+Nxh1WRrUp6lQR+zRQBPhrytD + pQhBvcQgPZnkzRkiADNm0w+1k7NMEadtqQ3F3sYw7GNd7q3UY1+5nvzWgJ38bXNOMJazgzGfEYi5bC1m + aWuytJhPVGGRWGdTkgr7iZ9ubIrE9Y0ROFkbhqM1duwo1mFddgBmGdsnGePneB0iAG8gP9xcpMPWEiM2 + l5qxscSC9YxNayudWFPjxmSVm/jLgWIf6y2KWIdxU5nlG06+ofhYDX1psCIOX7V0fpfGsZbqVCGJbScz + glMZZ9OjQmh6HoOxOpr1z3FbmBRKbBaqzAJOiTYhwRuC+MgQxClrAIfAF2tkzDaspn/WKOuD2+lnZY3w + CHKWWI7dRPodEWQzU0zKGonZyUbkJBlQmGwiBg5FXYEbDaWeVQHY8a+ZQ5KWk7hcBOD8DOKIInlhIw7l + BZEfCcCxXvEjIgCLcOOvCMCyTEQajy8PnrNSxST9u15Z90/S8tYWG1CdT9xCbtmo8G8NmrMC0Eg81Urr + IK7ty/HHcF4AporUmLkqAHPMr6sNwoYmHbaTT23qMWKhLQgT9ewnxI0t/F8t27iWOLmXbTjPY++stmEP + sehG9qd17F9ridsWUsn15aUA4tsZctcxXltPlgjAOtTJ2tX8vTp9RQBuzFGhmXi+TYRfYu321VnA7cRf + bcUqtJWvir815AHV5MRVgcrnzmpi/zod+jmOh5rJEziWB1oMGO00YaLHhrEu+gFuD7YbFAF4uNOGriYz + akq0yGMdyMyunCQ168uG7qYEDHSmorXeg2r6gJoq+r0WO3p7nRgYpBEn94+GonvEga4hBzoHwukPozE0 + noyBsRS0kzs1dEagsJZ4oJr8odOBjqFoNPVEoLpFZrIaUV5rQhXHU02trDnsJI4lhqsMR2WxA9UlDtRx + e8VcxLkO9gWZ1WVEIdtU1nTMY/1lZeiQmsy+T/6XSJyZmuSPXI7FYvKCymIr6kuJ+fjfdpYiAHfnW9CT + Y+BYD0Yfx2lfdiB6Ofa7We+dq3XdSmwtJpmX+iuCMNVkxVIPfXOrndsWTIkQXGPGCNt4kONyoIq8pzaC + bcEYUxGm4M1SWUIkR0sMKemEGZvyWbLPSQroWvrVJsaKNvKn9rYwtHeGETvSyKNaW0PR2GBGbb0R9Txv + I+uqqZX4mri6tc2NpuZwVBG/lhJ7FglGZXxbEYBDkCrL5ZCzXRWAY+VZBDl3kleFLOLuwnQRQATjOlFd + 4VIwbTF9eyE5Uz59TUGZFfm0vFILcYYRKdnkUOnkXskyS5fHZN360jVIygpCGv1pOu8xg5ZJyxURVGZx + sx1LibEL6Ldyi3h9LPOLTUgn501KUZG/+cFH3qWItUpJjpagRrQIwLHkndH+iCbui/GJACxLS6gQRr8m + pVeyQdH/pxH35xeF8dpldrqbcdqOFHJuH4/lYz+Ii1OR3xGPEDeaiVNM9E0W+qjQUH/lRTanPK9xig8h + 1yAOjWH9yPOZRHKUFOGmaQEoylKjJE/Dvs92IJepoa+voq+vkOWdaBUFOlTz/qrJPSvpW0oYWxQBV3mx + TGYDsz4KzEo/TWf9iYhWnG1Ee2MMcUYCmqrdqGGfXDGZBWwhv+J/+Z9atktDpYwBcpECPap4DplpLCmp + y4pCyC/Zr8ixi+inisvVqKxjn2o1oJ78ta6ZPL2R19dAbFTPe6gjZqrjftwubvRXrKSJZTPL1hUra1eh + tIPWqVasoisQFd2BqOnm/XdqUN4WyP0DUNhITNTC87eTH7WwfWvZ9mUcf0X09QVaZBaHIL/cSi5uI2bi + +G2PRXNvIjoG0ukf0lHZ4CVnN5OXhyAxzYRYwac+C3GzAfaIYFhcGpgdgTCyjYLYZoLVDXbiT48BMYlh + yClKQGp2NMK9JmJ0FTTE4bKPYHwD29fM2BPK/u7yrPD8VPqGTPrXTPrcLOKALGKDLOJEWR5ERETBiXks + M0V0jGFcjGZMJEdNY9/JIK4Qflma70BNeQT5YQQqicNL8u0oKyDW43etdXFsxyhlTOUx5uQlEW9K2mXG + rmLeXy4/ZxC3yIusMhZjeH2ypI2PfTlFXoyL1iIhSoRfEYHJkRjX4qUk1pWJI0kcs6lJ5Lo8Zpq84MHY + lsF4mpFiUSw1gRibcV5irswCjmV/ToxeEYBT4tjvEoiZGAdLsoyokokQhXZ0lLmV9M9dRU7GHvLeFD0q + uV8J71uekxZw7BXGq5GbEIBMWipjQirHpmSHSCAeSmM95SQRc8nLSxUeNLEeqgsc5Hs2cm6LIgDn0zJT + jIpoHcN7EaFXXhqVGcBO+qarqZ/FZNvDOC4icByPn8J6z2L/yGaMzGLbZKXrle2PC8CC6bOJ/zMTA2lq + 5KQwfvFzvlg6sR/3KeH9yna2zP7lPtncpzTPzDFqJrfXc1yKAMwxkXtVAJbZ/Dp0NDmwcakAN54Zgt+u + nkTs6UnA3p547O+KwsEOD452uHFNlwfXdUfgxq5w3N7twoVhFx5gQLxPBOBuLS59QgBW4buzgfjF2mD8 + eZMOL23T461dqwIw7Z0dRry61Yy/brTgJ7PB+Ma0Hl+ZtijrMD40asb9w0bcP2TExQEDHhwy4eFhMx4f + t+GJMTs+NRaKz46G4ctTEXiWRONbMyvi73cmY/CDqSj8+2wUfr/gxd/XRuPNRQ/eWAzFywsW/G3JhD9t + DMUvt3rwox3cf1cSnt2dhC/vjMfntnrxqQ0uPLU+DE9uDMPjmxx4ZLMLD20KwyX+56EtDjy2MxyP7wnD + YwfseOKQTRGAH7vGicdOufDItdz3WjceuMaD88e9uHV/FE5visTR5WgcXpuMAwtp2DmThu0TGdg8lIpl + 1u8UQfFQuQMDDPZjNTEkKKmYa8vBdGsO2gpIdEmw40kyE9iB0sPZ+WJNqE60oTEhFO0Eq11JBB9JbnT6 + XGj2WNHisWDI5yQAd2J9Sih2Z9lxgoP0Rjrlu+lEH6yw4IlqKz7fYMO/EdR8pzsUPxkJxe/nQvGf6x14 + fYcLV/ZF4v2DsbhywIc39sfhP3fH4nszobjcpMUJArolBthJOp5BrR9GaOu4fSMHxtM87o8HXXiR5O79 + zXGr6Z/dwA4nPtxuwz/W6/CDSX881aXCubJA7EhTY4DOSmaByppHVwVgAborAnAwkpJIqBTxNwQJJEox + BNdeD0m0MwARDhJpuxqRJOgiWMTS4mhJHGhZJNpXBeDmNDvaCag7M2zozLSgmQO0gscpIJnL5ABN5/5p + vKcMbmeJcWBKWmixjHAOel5bBR1jc4JKEQG25qlwV2sQnmGd/J595tX9Prx7IAnvHUrF33fF48fLHjw2 + YsXxKjXmuX8Lr6kwiOcIUMEXEIhYbQCyeM3VdI7jBBUHSFDPD7nwbzuS8JtbCvGPRyrx1hcr8PozBXj9 + 2/l458dFeO+nRbjywzy89VwG3n42De98K1MRf/FcOj78Qjze/5QX733Kjbc+5cSbnw7Dq0/Z8PITJrzy + qBmvPWzG6/ebFBH49QtGvHavEa88aMJbT4Th/acj8M9Pe/DPJ8LxwSU73rvbgjeu1+IfR1R4YY8Kf9iu + wi+2+eF3x/V48V4P3vxCAj78YRrw6yTgN2zjH3lx5d+8+MdjHHenw/DoOiPOMnBuKfDDYmYg1uTosIlB + cVt9OPZ2RmF3RySWSQDHGdx7GZjqYgJQ5qYzcumQ76CFBiPXRidsU6EkVIVy1lMdQUsnHfwACdhgpA4D + 7mC0mPxRzTotCfRDvj/BewCNfbGIwbGG/5HZmMO0ObbnerbfLjrYwwRyp9geN9HOp/njMQLUr5Qb8L1m + C/4wGIaXZ1x4fTYUb81b8c68URGArywG4+21Wry+zh9vrFfj7a1avLMtGK+tD8Zf12jxm1kNvj8VgK+M + BeDxwQBc6AvAuQ5/RTDcV+mHnSJysi5OlPrh7lYVvjirx8/3hOPl66Px2s0evH1nBK7c68ab99qVdnn5 + viC8fCkIrz6mwxufNuLtL9pZvy68/w0P3vsWx+W3ovDuN7148yvheP3zHrzyZDz+cSkFf70rBX+5LRl/ + uTUZL9yegj/fkobf35iKX56Nx0+uicLzh914dk8onuE4/OoGA75En/ylNRp8dZH9eJ0O39qgx3c3si74 + 2482GfCz7Vb8hL75++v1eH5tEEstfr1Pj79fZ8Fb94Ti3YfsePeyCW8+wmt9KAgv3a/HX9l3fnWDHc8f + d+OpbVE41mvG9Opbwq0kBE0Ejw0kBPIGsqRtHSWx21Tlh3PDAfj6Pht+d6MDr9zNur9gAu6zAhcYJ+40 + 4J1bDXjjRh1evT4EL53R4YUTGvz5qMz69cfvD6vxu8Maxf5wSIM/iQC8J4D+3Q8/2eyHH7B8fgftsBb/ + fpMD//FQIl7+XB7e+Uox3vx8Lt54SmZJJ+HVB+Lx8j2xePG2SPz5rBvf3y31ZMSTC2rcM8JrZEw7XMvr + JRGdJWEaZ1AdTTShP8aKbo8Z7XY9WsxatLHvttBXiw2RoC/Td23PtmA7AdgeEorThQZcqHPhvtpQ3Ftp + wYVSA+5gAL65TI9TRcHYn6vFRiHMBPNjBGfD8ZpVAViHzmQd2gkQ2ggKGlgqs3zpPyWtcw5BRD77eAkB + jFgx/yszPwvkzTYSi7wo+jH6m6xI+jTuKyknZXZjbqIIdSaUyLpTCfSz3gAl9aT4Uw/Hz78EYPpbjlOv + JxhudxDCGYtcrgC4+buIv/ISjo9jTWYPi3AmD7KlTGYZz9JHouEjSYuP0ZBsaAgCCTb5fSavI1Ouh0Ao + g+NULFV8MY+Xz2PVkfS00/f3EMx1xbPf8D8N3KeOwE9ix1aCmFsYyz7bF4Hneh14vsOEH7SyLzcQT9D/ + frdJg18NmvHSugjlpab3D3rxwTUuvHvOgLdv19KCcOU2A9672Y5/3uzGe+ci2dei8dfTHvxgL2P7lAkn + a+nHUxjv6Df6UgPRQVDVFs9+zTruiiOBJkDsEmN9thNMdsRwH4LYLpY9vOd+9oMR3uMk73Edyd8Rkobb + Wy14oNeET49a8NwaO363OxKvnfThvZPReHWvFa/u5DVvNeJvHJMvrDPjT2ts+O2UDT/tN+P5NhP+rd6C + xwjebk8OwLU8916279ZIFZY9AZgmuO5N1KM2gQCY15HFcyfREkkiJa4mEZxfFYBTkzVITwpAdhL7Au+v + mmOzr4FkvzcKYz2RGGoPx0BrOPpbItBe40A9CZmkec5NZAwjOM5kTMwi+czmZ7HcZBGC1TSCapaFIgYz + zpekBqA0lYSLBLOcn6sZG2qzA1HH9quVmQnZjK95gegs0hGkG2ns7yVBaCsMRHuBGr2lQRgslzWAg9Fb + HITufNY743B3jh/6C9UYLQ/GeHkIhgo5Vkg821MtaE1xoimZ5IXYKE3W6TRqEMYYYdWoYA4kQWYctgaT + dPFziNoPNgNBufR59n15m1yIQGOBCT1VdrTkc2znBaArPwB9xRpMNVgwQ/w00xaKmXYHZjudGG4woZXE + tDKNmIY4qZj1KaJvFsfAxwVgmTUt6ynncj8RNXOz/JHD+khJUpPk+yOabSlpgJWZoMREUSQSPrZbvOAh + ErgkEruULBF6SYwI6LNElCNhljJNWQ8qmART3ixfeSs4nGM+kmW0HJvXIKYIwLIODK+3qkqDNpLogX4r + xsYcGJ8IxegwceSASZkFLAKwpIGWmb/lxfQxjGdlJbxHxrSyMpa0CloJvyvM573RP+Zmr2zLfrXVHBNt + bDPigm4S7O4uf/T0qNDfr8HwoAETPOfcTCRGh2Q9ymCS/ZW0fPL2uKQQy+LYy16tqxXBnMflNVTx2HWM + sSIAdzO29rT5oXd1FvAkY8r8pA7Lc2ZsWGPFepbr5gzYtNaELctWbFuyYutaM7YtmrFjrQ27luxKuX5S + j+leNfoaVWiSa2f8FgG4nOcrLeD9l2pRValHVXUIqmuJLxstaGmzo7WDpLI9DLVNoaiosaCwlAQ4S7LY + sL7pp6KJH2N9QTTBsCL8BrOddYpFkcjG0KI9QYrJrECxmEgtfDFs73g9CS9JJUtFDCYxzk1fSQFdURSG + ahGASyQdVShKGWtkLaCybGJcSQVaZEEd+8ZV8bep0orGCrNiDeVi/J34rLbMxnonSWQfkpkm+bk6FOXr + eb92VJGflLEsIofIKzAiMzsYOex3sh5wZbUbdfUxqGtMRGNrFvqHKrFu0wiuv+kgbrjpMLZsW0BbezXy + i9JQVJaNtq4GLC7P4tS1x3Dhwp24/PglPPn0Y3j40Yfx4MOXcP8jl3Dxkftx78MXcf7hC7j7oftw50MX + ceeli7j1/ntw4z2348bzt+Hc3bfj3F234vpbz+HUjdfj+JkzOHrtGRw7dZ1iR0+cwYEjJ7HngKShPog9 + +w5i994D2LZjNzZt2YatW7Zj27YdtO3Yvl22t2HLli3YsGEj1qxZUATgxMR4GI36/yYAq1YE4EA19CFa + OGwGchEjwu1axEXokJvqREV+JMpyXMhLNCOecTOS/EjKRBEqaEncTlLE3wBFAJZZwBkc8/JClsTkHB/9 + aFIQchKDkRoTBEmRFhnOuOvSI9xlhMOph8UeCL1xRQDWBNNYitD7300RgGW2ALc/bjLL9+qMXxGDg01a + bv/LtEZ/BPKYKmJsP963n8wC5rYIwDKL2OjQwOIKhiMyBE4RgKP13A6GNTxQWZvMQswgYrCdOMEeLkJw + IM0fYYoQrIKTvi08kviBMTKCOCUyln4uLggxjPWx8gZ9lg0pOXak5oYqlpYThowCF/1cJArKyYtLVwTg + mEQDPORykRxX0RwjcclWxaLiWFeRIvAGwMF6doT7rxrPv2ofCcDctocFwuYIhJV80hrKayeH+Mhk9q+N + scLqDyu3FfGX+E7MwPo1sn0dIgLzvuUFuZgoPWJlRnC0Dt5IEYA18Lo1iCKHuSr+ummCn+TFOpm9sCIA + SxraIGUGYwbrJ4vxPNvL2ECT2QmFvkCUJQcxtgSjLFWL0hQRAGnEogWM5TIDIE9E4HQ9CrJWTFLC15aH + o6HCjdpSJ2pKQlFdHMox70B3SxQGu+Mw1BOLfnKzDsb5OvoumWVTSiurIsas0SuzgEtkhlazGa3EWV1D + Mejoi0JTB4/ZHIbKWitKK82oIqZtbHWjtTMCPYNejE7HYmLetyoAe2kexebWeLC46MX8QiRmp12YngxX + MkDMTEVgdsKNmTE3pse8mBqLxNRotCICz0zE0p/HYX48HvNjPswP8/NADOZ5HYv9MTQv5jrDMdkSijHG + 5mFy6sEaE82MEdp4jRGTtSbMN9uwptmK+QYzZmtDMFev47Ye8/UhmOH2RFUQhnnv/cTkXSUGxn0DaliP + RRyPWcSiSYKP3TLz96oAHKgIwAlRWiTFMD5LGkOaPMcQUzKacR+xePb9qwKwzAxO4diW2TOZCfSnCSE0 + g2K5xOG5cfQlHA95Pv7G/p0do6Vv0PA7rTIruCAhSLHiFB1NyhUr4Of85GAUyksBaYylWUbU5hqUl9jq + soi1GEtriUsaGVfbGFM70/3RlSEzAYltpBQBOJV4jDGrmfhhIF2NZcaJ7TWMmcRkW4jFtuSpsTVPg008 + 3hJx3UJ6ANZka7AsaZvJYZbzg7FEjLdMTLmJ59rDOHi6xomTVaE4WGrC/jIeT/bLUmGKv4/xPDMiFioC + cDC2lOixo4LxuMqBbVUubKkJx1IV+0alGyOlLrTnhJLfGBQBOMXDunf6w0fOkMyxLMJuRlQI8ZYslaZT + LINtkM7xlkY/kMI2S2dbZMfqkRltUCzXZ0VevBX5CbYVATjRhsw4K9vPAB/Hc1wE4zZ9WyzPFxdjIAfS + wSMvwUqKePqHUPqBcPKVSKcKMcqspgBFmE0lBs+mL8uV9N7JRkUALs8MRW1BBHF0BHGFC2WrAnBWOq+F + XDEzlfE11czvuF9ZNFpqU1BdEkOMLimgeS2CB9n/oohP5SVB4VSy3E46jy//lfSdMssrjxhRBOBK4te6 + YiPqC0PQVEDuyD7dXigzwQPQQizVRezZl63CMNt1vCgQU8VqzJWuCMDrqrRYqmHZxHbvsWBdtwFTzYEY + EMxFDFbPvlQd54cacrIBtp+sAbxHZobX2bA5JwAbMsh32KeW2U8WickX2A9ncy0YzzGjO8uAJl5jFXlC + OfuivDRZx/7QnOuPtoIAdBLbywuenXm8RuLIzmJ/dJSuiL9dvKa+OnLCGhGAiV1lfWB+31urw2CjHiMt + Jgy1GjHSbsFkjxUzA2GYHXRiqo++ocuC0S4bRjps5DRWNJFTlGQFIId9tSg9GA0lLv43FaPdGehqjEZz + dRg6m1yYGKLvmU7C2nlZyzwBC4txmFmIw8R0DEYn4jA5nYal5WKsXS7BxEw2+kYSUNfKNmy1YWDch6mF + TAxPJNFvRqKpLQxNLcSLtLZmNzpavGhv8KKlJhKN5W7Ul7mI0yLQQGuqcnObfrnEQVxhRnG2PMAPUbI7 + ZPN6U2X2L8dPUjzxcgpjRJ4OFaUi2tl5LAeay1YyGKwIwGb05RrRT/w2kK1lGYh+tn8P67mbfaBdxF+Z + bU3rKiHnKtdiosmKZcW3OjFPW9vrxdqeKMy1ezHeEIERXvdocyyGm+LQXReJVo7XOp67otiEShEIZeZo + sYiDsnSLEe1NDmL0CAx0RWCwNxJjo7GYnkjA9HgiJoZ9GCTn7Ovmb/1R5AYxio0M+sgNEtDfI8sYRKC2 + Mox4nDiXvq0gzUDeSV9Lji3Cr7y8K6U8w0gk582MC2S7mlGZx5hX6kZzrReNdV7U17hRU+1Chcy+Jq+t + qedxGyMVq+I5ilhvOYVmpGYFw0eOHct6TkjTIJV1l8WYkCsvQxbTXxRblCVRqmrCeAwXautc3HYox6xv + 9qCBVlZhRW5uEPlAIJLpW2UpnoRkf/I5xoMkmb1LrE9+EM0YLxbDa44iJnJFEFeISCQxh35f1hXNzbWj + hPdRXuEh7o5GbX0Uitk38vKtyMo0Kiljk4gbI+mH5GU1eXktnPjCTRwWTjwWwTLSLbyC/F9eKmUMSSLe + lOc06RzLhfT3ZfTlFQVBaKy2sl+yr1ZZ0VBmQQP5QSPLxnKOG3mRlNZAXiGzgJX0z2x3MZnFW8k+V5Jv + JI9TKy+YVxbaMdiZgrG+DHQ0RKOxKlyxBrZlfYUIvuQyhcQqpay3CnIa5TMxRbHMMraglD6rICcQ+Tlq + 5JG3FpKHF5dpeP8GNLda0cqx3sIx39RiZJ3rUd1I39IQrAjC1fRfVU3kbbSaFi2qaTVtK1bXqUWtWHeQ + Yg09QWjqCUZLrw5NXSHcR4PyZjVKm2R9YSPK26zKer8i/qbkByGBbepL81deDMguYhzhdRdy3NW3x6O1 + NxVdA1m0bF5LDDLzLUhM0yMp3co+RYwabyP+NSsCsJWxxEL8abL7KzN7ZYavnpgzNEJPXBvG/paAtOxo + uKMs0MtSLvKSJ02y/OgFh9r9YHP6wSlxgRwiL9+kpDovlJdGaAWrM0Jz6DPyMnTKUiH5IjAmyJJsjIns + A5nxGmIRxsZkLWOHhW3mYluwD1dGEi+KCOxk+4SjtSYGPc1J6GyM51hnXyTvLM+2oUzSLWfZGeOsyjPF + fHmZiVglNTqAxvgbQyOGkhfeMoh7Un3ERvxORN9ExsuEKI6LKNZlLPdnv8xI0bP/SFxjrE9jX0pjnBRL + tSItwQyfN0jJThjDmJ/ImJ8Sa0AaObKkf5aMGoKFJSVyZa4Jtaz7DmKHLvLklmz233Qj6jhWKhKIn1lf + MkmmIE6FYo7HQhFVkzX0K6wLWlYSS1qB4G4er6bIwTrwoq0miuMigp+dKM+z0zfTJ/HYsoZ/arJeyWIb + Rb/kpD+SmcARrpWX+mN4n1HE9h62VQRNRGCfjD/We668vMlzSCmWJ2mfxc+RzxdkG1BIk7XPRdgVy8+Q + tOxGxeSFmCLGVdkWATiH/CCb95HHNhceUCo+U7i9CMCZ9Is57Nvil8v05Ah6dDIebVouwk1nR+C3vi0W + G9tisLk1CtsYpHY1u3CAOxwn6D/d5cH1nW7czIBwR28ozveZcaFHj/s5eB7qVuPRHhU+0++HZ8b9FQH4 + 50srAvDft68IwO/tXRGAZTbwK9vMeGGTFT+e0+EbMwZ8ecaKp6fseHTCjofGbXh4zIYHR6x4YNCEBweM + eGTEjEeGrXhsyIZPDYXiC2Ph+NpEFL4xGYNvTUTj22NR+N64Bz+d8uB3sx7814IXsmbeKws2vDhvxJ/X + GPCbZSt+utGF727x4tltsfjK9jh8bmsUntoYjkeXed5Fnm/ZgvvXWXFhvQ0X1tlwcYMV921x4OFd4bi8 + 14lHDzrw+GEbnjgehsdPhOGxaxx47JQDl0+78PC1EbjvmijcdciL67Z5cGJ9JA7Mx2D3dBy2krxsHIrH + 2u4YzLW4MVxpIcDRoTUnhGDHjj4S3MFyH7qKYtgxCUANKkSSeCda/JFF0Fnms6A+OQztqeHoSQ/HULpX + sYEkD9qj7OjwWjFGh7GY7MDGFCvBtxnH6QDOFelxDxv6UZKhzzXZ8PWuMDzf58RPR9347Zwbf9sUgdd2 + ReC9wx7881gUzYd3j8ThjcNR+K89Hjw/GYLHGvxwmkBtMx3NAp3PaKAfRvwJ/HR+uDZahUeLDPhWRyj+ + NB2Bt9dHA1to29zA9lCaBa9t1uPn8xp8vl+NWys12JWhwVDsxwRgEimFMJEYJZD8yHppYolJOsSTJMkb + UJEMhuHhDGoOlnSY7lCZBcyBxQF2VQBO5nYOyUAFHUJjkg3NdBjt6aznDDPNhFaC5Goev4iDMZv3kskB + KjOBrwrAUmasir9CGtJZFkT7ozqeYImgd2NhAO7pNeObyxH4y34f3j6ejPeOJLLOkvD6IR9+szMSX1ly + 4rYuHbYTVA0RiNSE0MGwvjIC6Ny03OY5m3nva3M1ON1iw+VpD75/IB0v3FmCVx+vwLtfq8Zb3yrFGz8s + wTu/LMeV35TjnZ8X4cp3c/Hut7Pw3neygG9nAl9LAZ6OwYePufEB7e0nnHjjKYeyBvDrn7bhjSfteOtx + O95+2IY3H7TgrUssH+L3j9rx7mfY1p9nW382Ch88GY73RdQ7b8arZwPxn4f88OddfvjtVj/8bIsffnM0 + GC/e48Kbn4/Fh99PAv49DvhFFPB9D97+agRevOzF968NwyPLRpxqU2N9rgqzJIGzbOPlIhM2VoZiB/3I + 1uZwzJeZMJyrY/9lsGXQqSFRriLZKveYUOFmkHUxYIdr0RihRRsJXo/MOKeDn442Yj7GhBmvAZ0Gf9Rr + /FAZ4IdiPwIXlkXB7EuWANTZVOhmUBwlAJpnW25gW+7y+uEg6/skgfKNCX44nxqIR3N0+BIB6vONVvyq + m/5hIgyvzTjw5pwFb4sAvFaPt5d0eHNZg9c2+uONLWq8s1uHK3v0eGOnAX/fasBfthjxm80mfG+9Hl9d + 0uOpeT0emA7BrQNaXNumwpFqPxwu88NNjX54dDgQ39wYit/SL/zjuhi8ciPH3C3heO32ULx0pwV/v0uP + /zyvxX9e1ODvDwXhlSf0eP2zbLMvO3DlGTeuPBuh2NvPsM4l1ffTXrz0cCL+dj4Vv70hEb86m4RfnUnE + L84k4Wcnk/CDo3H49gEPntsrLxfY8YWNRnx+XQi+yHv68mIQvro2GM8u6/Acr/3bG1cEYLEfbNLjh1tM + +D7Lby+F4JvzWjy/pMEvdofgb6dNePUuK96R9OGP0oc/qsPrj+jw2kMmvHivDb+7JQw/uDYST+3w4Bhj + wlShHzrS2dezROQh6GJ/ryc5bKIfGcjyw/oKP1w/4I+v7rXhN9ev1MM79xiB+y3AvSa8zzr5SAC+To+/ + n9bhheOB+NOqAPy7/yEAs9wbiF/v8MPPd/jj3/cE4Cf87Rc3WvHn+2Lw6udy8c6zpXj/uTJc+UoB3v5c + Ft58KgVvXE7Aa/ezTS5E4sXbI/HLEy48v8eOr24NxhOL/rgwpsI1TexHbMt1JEhzmSRHJPd90SZ0hBvR + YiMQtYag2cY+zf7XxP7XT4K+lgRlFwHSXhLfAzkGnClhTCHBuEBieWeJEbfma3FzgRY3FAXjJMu9rKf1 + JAczvk8KwN0E9R1JwWhNCUYzg3ttShBKCFxkXd/cSPowgohcgoiieALjBDVNi+J4AjkCsMI4NQoIquQh + Yg79dDb/I7ONsuL8lQfNRekmghujksIlgcAkluNFUk96xZyqFQuXNNAkJhHyQFNLIkFzqZXfoug7JfNC + IstU8aEyo1cEZp5HUlomx4gIHABfVCDi6Nvjo7UrD8B4LmVtRF57mhhjgFgKjyFZGbJ4vHICqPoYDVpF + /OX9tvK4Tdy3ib8N8/ibSWCvrzDgcrMNn2804mu1wXiGseWrxQH4PH3v10pV+D4B/39M2xl/OIb2evAe + Y/a759ivblfj7ds1eO8OPd671YJ/su++f4sbb93swX+csuP53UY8PB6M4zUqzKf6YTAxAD3JbAO2SQvb + ps0XiC6C5+5YFXoIoLv5XSe/6yDw6+A1d0XTvIHoY5wZ47VO0RYT/bA3PxjX1ZlwS0MI7mzQ4uF2LbGP + DX/YFom/7/IwFlvxn7QX1pvx+7Um/HrejJ+Om/G9AROebQnB52uC8VipDreTrJ0kaTtA285zr48NxHxs + EPuNAS1xOpRGkixJvbI9fSSScYxDPl6XxNQEIc1JWqSzH2WT2BbST5dkclzyuKNtLqwdjcfCSBym+6Mx + 1ReDSXlI3OJBR60TDUJyCJIzed9pBM1pLIU8ZvjYrxIkRTT7GX1sbqKIygTXSf7I530r6+AqRqC9akX8 + vWT1AVBDVgDaOB46S+Thqw4dRUFoK9CgQwTgkn8JwIoVa9BfpEZ/QQBGSrWYrDFgutqE8VI9BknQ+zPt + 6MkKR292FNoyolDotSHRpoNHFwA747BN7Q9bUCBCgzUwM44Y+V0YMY2H/U7SnqdzbJRnBqOb5HSkkViL + 5+6RayiVB8Q6jPN8Ew0mTDRZMNlixVyXE2Psgx0iEGb4oUwEYN7rRwIwx8AnBGDiiFzuI6JmNi09VYV4 + /hbFfSV10MqasAGIZN/xetWI9QXDRwzk4/iX9TIT0oKRlME25DWmEjtm5MnMOT0JZhDiCPplDaBwjhUH + x5OD7e/mmFTSi8UEfCQAZ2axDYoCUVUla/2GoL1Nj4EBC4aJsUeGTRjsN6CHJLitmUS5Wo2KEt4TfV9h + DtuQfl1SNcv6wTLrV8TgkmLimrwVAViskNul/E9NdQBamzRob1XT/HkeP3R1+qGvLxDDg0ZMjjkxPenB + 6FAYOtsMqOX4zWUdStrnHNqK8EsMJjOWGTskbXYZr6OK5xMBuIW4tKc1AL3tKwKwzAIe7VdhZiwIa6YM + igi8btaMtVMhWDenx4YFEzbRNjLGb5ozYsucCVsXzNhO3L9h2oC5fi2GiWHaKlWo5TkqRfzlvcjM4+LC + QJSy/5WWa1FeGYyaOmJMtn9zR5hitS0kwHVmFJSRtOYGITHFfyUNdKyI7ySEscFsY5o3WBGHImlSflIA + JqYNVyvbcbImNcdzarxpVQAmwU3Us05kvTURgJ2oKXahppAkNMdKX07yxz5SQvJYRiIoM4Bqis2r4i+t + yvIxAdikCMANigBsXRWAjWzfYCWNn8wCLpN0bjIDuNSurAWcy7GVRl+RkRWEHJmFUWhDcYkTJWVeVDek + oruvHIvLgzh1ei9OXrMXC4tjqKjKR2JqDFLSfSipKMDAcC8OHd6PO+68DQ9dvoQnPvUEy8u4/+FHcN8j + j+Diw5dwz8MP4vyl+3HXQw/ijgfvxy33XcSN58/j9O234Mztt+LGO+/EOdp1t9yKUzecw8mzN+L4mRtw + 4vQ5xY5fcwMOHbsW+w4dxd6DR7DvwBHs3X8YO3btw9btO7Bj+y7s2rVHsd27d2Pnzp2KECwi8Nq1a9Ha + 2qwIwAaDXkkB/d8FYI06ALogNaymYBL8EITZ1IghP1ME4IJoFGe5kBlvRHSYP8L0HNPkKDGOFYvjti9M + hURXgJKeVFJCZ0WLKKGm0VcmkJxL6n556JFoRGJsCDyuIGUGsMtp+EgAljTQVwVgEWuDDP8SfiVVs9jV + 7f9LAJZSMaPmE/Z/CcAamXVs8lceTpnCNEr6uhUROOR/FYBXTL1SOul7uW1fFWOdbjWcjI9O3n84LYKY + QGbyRtLXRScaEJtkgi/VjPg0ExIzRBB2IKvQjdwSD7KLIpR0z3HJZkQn6OH16REZq2NppJl4LK1yDhtx + gqyFJ6WNpZ3XJRbKa7kqBIc6eX3kkRZ7AMw2f8WuzvBdEXv5+ePG7yyWFRPxV0zSwEp6RXnIKiKwiL9i + Ms4lDbSIvx8XgMPJK11Of2KogE8IwCnkOjIDWNKDCy4Sk5fiJEtKDjmozFCQh1TFSYE0NQppBTSZmSCp + 6bIY03NTdIr4Kw+LivPMqCh20AeE0Y/ZUVkoM27sykPXjkYPupo96GnzYKArGn3dMWhucqK2xoTqWvqN + BqtilQ1m1JAj1bWHobXXizZigpauSNS1sK/XOzimzSgus3Cch3J/J/1hODp6IjA4Ho3x2XglBfQnBeAI + LKzh9lwEpiadmBwX/x+O2ekIzE26adxngvtPRNP4XxF/xcZjsWY8HmvGfFhDbLJ2OBZLQ6vWH4UFnnO2 + zcm4bMXQRwIwuSZxwQTLWX6/ti0Ui612zNeTRxJHiYkQLDZZzdheSrxWTFxHLC7L1dRmaFGWplVm22b6 + tEiWGSqMyzHhKkTTZCawCLtxjNfxkrFh1RJlJijtX8Iv93H/awbwVQFYHoRmEI9l069/3HLYn3M57vPi + 9PQNwUqq43SOlSxi5+yYQEUIzuVYWZkJvCIG57PMTdQRX9B/c7swmf47w4DqbLZndghqMwNRR8zRkEIc + nR6Azkw1uvhdN8vuLJa0HnK0Lt5zE/lHE+NWF3HCdF4wlkv0WC4IxBLj+lrG4+U0FZZ4HHnBfYZYZiE3 + EBvKjTQD1hWFYH12EDZmqLGV59mdpcXJSgeOVYZif4kZu0tM2M59lon3Jnn8UXLyaV7XYk4g1hXosKWM + +9S4sLvOjW01EdhY7cZ8RThGCkLRnsF+mWxEQUwI0hkfE1n/cRx38uwniWM5heMokzEzO4b1sGoyCziD + 7ZAZqVHqMp/xtDDRQl9rpJlQlOxAcUqYUhYk2ln3FqST1yXJzN9wDWI4pmN4LhGAY6MNjNcrAnC4SwuX + zKyjP5A0lFcFYOVFV/pzEWazkg3Ikxm9KTxPilkRgGvyJVtHOONEGIoZw3Mz6OfT5SG3iWZRBOBCSRVd + EasIwDWrAnDCxwRgLzHdxwVgmR31cQE4mziwgNhQ1gCuKdCjUVK+FxuJZy3oLjWiI4+4OjtAWTplKD8Q + 48S202XBmCOuWVMRhOVKWrUWa+uCsL6FmKmL+KlTj7F6f/QQ64kA3CB9ie3XTDw7Sly2jjxsX0MoDjbY + sJ24fUuOGpvlheZ8PdYXWbFUYsdcYSjG8omTiU/qOK5KE/1Ryv9XsQ81kMu1yjq07Gc9xPXycmdvvgq9 + hTxnGb+r0Ciib199CPob9IrgqwjAZQHKmsDy21CTASOtJox2WDDeHYqZAQd9RQQWRz2YHwrHTH8YJvj9 + WKedGM+B9mozqvO0KElTo1JmKVZGYrwzE1O92Rho8dGiMTOYhJ3rS3BwZyWO7q3Akf1l2L+nkBgiDxvX + Z2FpbRa2bi7H4QMdOHKkB3t3N2N5XQlxdDyGR31YXl+A7TursX5jCX1eFv1dMiZGkjE+nISxgSSM9CZh + oM2H7sZYtNdEoaUqkjwrGl0Nccp33fX0txVu1BQRW+aZ2GfYf0UoSCful/U9ybnSyKNyMgJRUhCCKsns + Qv8uAnBLmR1txTZ0FtnQy1gwoAjAWgxkatCXEYABeQFARGDWe2d+ADkXjdy5m/2gl/h2sjUUG+hn1/R6 + sDwQg+1Tadg9l40tY+n0twmY7ojHVHsiJtqTMMz66muIRgfHbHNlGO+DmJgxQay9JhR9zREY743FzFAC + 5kYSMD+WiKXZdGxczMHWtfnYsraAmDwH6xdy+F0eNvM7sS1LRdi8WIw107kY6UtGZ3O08iKTpF7NSzGQ + q9HHMkaK+Csmsw0TGDdTovwh6aGr8sPQWCYvMMegq8mH9qY4tDWynmmtrVHo6IxDT18K+gbSFOvtT0Nr + WzzqGqKUdZnTyLMSGGNTUrXEvTrkFZhRWuZAWQXjH+u5qsqJOvqqRt5fayvjY3sUunt8GB3LUKynKw51 + NQ7yBhPy8um3MhnnybmTOUaT02Q5Jh6f/ton2Z9iV4Rgb3QA3OTrMvM3RVLC5ztRWRGDxoYE1NXz2upi + eZ5k9PVnkUdlo7szAw11PvIwD3mXk5xBTw4hPEKjZC2Ip0+Tl1eUl9OI1VLp/wqyZVZnGLmViOjEneQq + lZIpgn6itTYUg51RGO/zYbgjGoNt0RhgXfW3eNHX5GFbRmKgIwZDXT70tkajuyXmEyb1W1vp5Dnof1MC + lRfQJgZyMDOaj/6ORHQ2xqxaFNobItlfJS20XRGAGypdqCsXEThUyVYi6aULsomP01XKi8DClwvob8rI + w5qarOSS5PldLvR2h6G/x4X+XvL1Hie6+Lmra8U6u+yKdffYaFa2t5gFvbLUEa1n2KZY/4gNQyP0DWO8 + /yE7uvrMaO0xo6UnFI08Xk078U6DHakFbDOOoZgU8nT6r1hir/RcE7IL7cgvJQbieGjvzUT3QB6tANWN + 8cjMsyOJmD45w04ebydutcEda0aoR0d8rIWVeFoEYMHs8qJlCLFmqDsE0fEO5BQmICM3Ft5YO8zE/kb+ + ZrSqaH4wMf6Y2e9DhedLTIgjRy6woJz1V05+JiZpgZVZoexzUiqZYsgxCpIFM5BvEzfmJetQSJ9SLKJp + oQN17EuNlV6OX46Vao4V8Unse4NtaRjrycZwVyZ6mhLRVhOtpEOuzgtFda5dsZp8jgvebznjW2mmhXzU + omQaLCA/LczktQi3IT5Jiec4YL+XNfBTaGkJjN/JxEOMY5JOOY/xPjeT/V8xC7dp5AISD+OjGA89xFqx + 5MTE/BkJZmQmyXGJmXgv+by/shz693xy3KJQxg8P+ss96MgPRatkguW1VPNcpawvmQEsz04ref9VOSZU + sA5Ks4yKyTGqGLPqWSeNpS60VHrQ2cB+3uijn45Fa3U0mnjc6iKXktFDeHkmY7nMAvbFaogVVIgQvEiM + KLqWpLZOkFn+XpUy+1dE4PgYP/6H9Z/LeuK5pCzgdRTmsaSV8B7ESgvI8fm9MuuX7VjCdpWXKyrYxpLm + WVI/S1mQQezIfcTks9IH5L+5IiprkU8OX5Sj5fc61BAP1FWY0NXqxuZ1pTh33Tj85mojMVcbgTUEYsvV + odhc58BukoPDrS5c0+HGmfZwXMcAemOrAbe063C+S4f7uoOUGcCXu/0+EoC/N6f5hAD85qoALPb2LhNe + 2W7BXzZZ8aN5Hb4xa1QE4M9Mh+LxqTA8umqPTIbiwSEzHug34f5+A+7rNeESB+Zj/XZ8dsSJL4968fWx + KHyD5TdHIvGdETd+NO7GL0ko/jLnwYvzLvzXnBV/mdXjt/Mh+NlaM763LhTPbXTjy1si8dmtXjy52Y2H + 1zvwwKIF984bcfeCAXctGnH7khF3LJlxfqMFF7Y68ODucDy834nLhxx47LBdEX8Vu8aBJ65dEYAvn4nA + pVNROH8oEjfucOPkejf2TLuwdcyN9YMeLDGYzre7MU1HMlAaQiCmQQtBdxs7eXe+Cz2FXjSmhSHNRqIY + QHDpz2BmI+iP1KOSALUlLYJBPArDOdGYyIlVbDTdi57YUPTG2DCZFIalVLYZQeFeOvcTdOq3lelxiaTu + syRAz/W58EPW1c+nvPj9mlj8bXMsXtsbh3eOROOf13jx4SkvSx+uHIvFm0c9+Pu+cHx3MghPNfvhZoKy + /VF+2EQyPRPsh0le32KQHw47/XBfZhC+1mjGr0dceGUxCv/cFANsi1gVgK14m239+2U9/m0kGHfXBGEv + O+Koj0GHgyCLxChZBnPkikDgi9Eq66TJemlxMnOCZRTBbjgHk5MB3mXndqh2RQCm01TWAKYTvCoA55EM + VMXo0cxA15JiQTsHezedXneGHm2pwaiJ06DE46+kGs3i/hn8v6QelRnBVwXg9HB/pJCsy1uj2ZH+KItV + oZ2EZ12BP+4dCsV3Nkfjb0cSceXaFLx3PA44lYB3r0nAC4dj8L2dXlyetOFkTQDWECR30FFX6fxQGKhC + HuurgufrIfHZURyMO3qd+MJSLH59Mgcv3VOGt56qxAffrMe7P6jB2z+vwXt/rMf7f67F+78rx/s/K8IH + P8zHB9/NBr6ZAXwpCR8+4cUHD4fh/UdceOfRMLz5ZCje+HQo3nzagbc/7cSVp1x4/8lwvPcYtx+nPeHC + lafd+OeXY4Gv+PDhl+Lwz09F4P3LDly5x4SXzwbir4f88Mddfvj1Vj/8dDPLo1q8eI8Db30uCvhuPPDj + aOAnHnz4vBtvftGFv0oKaI6BS2v1ONakwloShMlkf0yk+mMhj2Sv1IJNdU5sqA3DZKGewJNEk4CqJZFk + Mz4ETYk2NMQzyMbZ0RhtRScD46DPjDGfETO05XgLtsTbsSOR/dpnxYjZH13sf80aP9SyD1azrA5Roc7i + jxb2h36bCpPsC0suFTbTwe7xso/G+uFUvArnCJbvIeB/lOPiy2UGfKfBhJ+16fFXBv9XZx14Y9aMNzn+ + 316iv1oOxuvr1Xh1SwB9lwbvHNDhncNGvH3YjNcPh+KVY+F48YQHfzjmxk8Oh+ObHCtf3uXCo8tW3D2m + xU2dfriuyQ8XB/zx5UUDfrQrHL8/6sWLp6Pw4hkn/uusHX+73oi/3KTDn28Owh9vVeOPdwbghfs0+Mcj + Orz0KRNe/Zwdb3zFhbe+Gq7Ym19mnX/Gg5ce8eKFu2Pxmxvi8fxBL761P4rmxTf2efHMjkh8cbMTn1ln + wafXmfD0shFPznMMz2vwhbU6fHVJh2eWQ/DNDXqaEd/ewHpg+bykfJaZwCyfX6/Dc2t0eHYmEN9cCMRP + t/MarzHgH7cb8eYDZly5bMI7j+nx1uUQvP6wGS894MCf7wzHT6+Pxqd2RuBYT8hHAnBjuj9qSFAqs2T2 + H9uJhK8vy49E0w9nWTdf2m3Fr1gXf799VQB+wArcZ8YHd6/MAJYU0CIA/+NMCP56QqMIwLL+7++PBH5k + f6D98TDL/YH47W4Vfr0vUHlx4TdnzHjh3ii8/Kl0vPtcGf75/Rp8+L0qvP+NErz7tTxc+UIm3vpUMt64 + HIfXH4zCKxei8edz0fjFNW58j+38tR1BuDyvxk1d7EM1kgraH8sk0NMM2L0E061hIWi06tFkNaLBrkNj + aAAa2ff66DPWEOjsKnDiUBEt34prS2y4oyYcd5TbcS5fhxtIvm4gmL2uQItjuWrsylBhmYRumn11goBI + BOA+Wlc840MCxwrBWgPHTZW8kUY/nKv4zpWHhDn8XOBTo5j7lBLYlKUQICQF87OW4CYQhfwtn2AnJ3Zl + ptFVAbiQvjEvhWAsRg0fjycCcLSL/lTeWKMPFIuiD4yKUCM6QguvWywIMUIuXGrE018mc3/xmbJ+enE0 + /RyvRa5H1jVMJbhK8JKkRdGvR+sQ5xWhWY3EiJX0lyn8z1VL5edkHieF/lFmARfwuOVuf9RGqtDAa2uJ + 9EMryy7uO0HQtDXTH2dKdbi/Ro8nqoLw2bJAfK5QhU9l+OEx+t3PsHy2QoVf9enxX4v0i9vdjHN2vMfx + duV2f0UEfvdOHd673YQPbgvFe7c58eatLvzhpAnfYLvfP6LGkSo/JQX0QEIgugnqWn3BaCaAE1G6k3Uq + 4m8vgWsv26c7IYhtpUNnXDC6YoLQHaVBP+99gqRuOk6lrO28Iy8YxysNOFWuweliFW4u9cPjbVp8e9KC + n83b8LNZA361YMG/z1rww0mOyREjvt6rxxdbQ/BUVSAeJEm/NTsARxk/drIONvtUWOL5Z3n+0UQ9+giE + KxlLJbZJPBNhXl6QkodGMd4AxMSSaMapCUQJtgkQC2TduHwjagtD0F1jwVxfFDZPJ2HDZALWjPgwL4R9 + MBEjJHy9jR60VoQpKQYz49hWbN+rJuujpLLfihgsv2Xx+rKuCp7czuV2Lr/P5T653FdmxWaxlO9K2Va1 + 7PtNucRCHAtthUFoL9TSWJ9FWkX0FQF4oCwEAzLTtywYwyViGoxXBGOu3oz5Ohumyk0YLTJhhGRkKDcc + w4XR6M2PRQXjSqaLRNgchPAgfzi0aoSFaOEM0cAepIKdsTky1F95SJvIcVvIemkosmCw3o3JVg9G6m0Y + qTZivNqACdo4+9tYbQjG6vi5yYzZDsa11jB0V+hRm6VaEYCJFXKkHlYFYLlPqYcc3qsyA1hEYBJaETpT + uG8s6yWKY0URgD1qZa03DwmdCMAiHsYQA62slxmIOBI2X4oG8fQFCWyLRJovRYso9sUI9jUnx4iIv1a2 + vZi8Gezl+Ja2j+HYT2CbZHBsFBaoUVmpRV1tEOrrNOjs1GFg0IDhoasCMPFScxCqK/xRSl9eQPyXl+n3 + UZpnsSJlRrBKEYJF9JXZvzk0RQCWdXOr1GiqV6OlkcZY2NrCmNCuQl+vBiM8z8RoGCbG2FYDJGkdRjTy + WgpyVCR7PA9jhLL2b64/SvLUKM0nbssLQDkxmCIAc2y3yEPJVjV62/xXRGDaAH31xGAgZsd0WJw2Yu2U + EfOjwVgzEYylaQPWTeuxLILw5IptmNJjK8fcBu67MKDDeBf7XZ0atSUrAnAx7zeP15GbG4D8Ig3yJUVq + qQYV9Dm1xA8NrcQt7aHKrI+KBgsKy43IKdAhJZ11zn7vZZ3Lel6R9IGeSFkXVMQgDSJYikB0VfyNiQxW + 0rMpMwMjSHCj9UiMM5IcG0mUDR8JwDkkmEXZkibSSeIps38dJNnyoFnH/kV/TyJbmq0nITWgqsgImQGs + PIyrlrf3TYqtCMH8XGFjPdpRWy7iEI+bR/JMbLQiAFtQ+TEBOIffiQCcyvtKJ97PINHMJkHOznWipCIe + 7d1lmF8cxLETu3Hw0A6Mjvfwt2S4PHa4PQ4kpsShqrYS27ZvwblbzuGBhy7hsSefxKVHHsXFhy7j4sOX + ce9DD+Ee2vlLl3A37Y77L+Hme+/DDXfdg2tvuRWnb7sNN95xD26inb3lDpy68Racuu7WT9jJ0zfjyMmz + OHD0BA4cOY6Dh1kelJTUB7FDRN9de7F3zwHafuzduw+7du36/yUABwb4I0jjD7NeC4c9GGF2+lSZAZzm + Yt+MQUGmS3kjXdaosoZw/BlJ9C0rJjOCo4kP4p0qRezLYpyQlK8fF4BLGJOLM8zISTEjKc4Ad5gGTgfP + 4whBKM1Mbnh1HWBJAS0p4a6Kv1dF3/83AThYzBzIz/7QGlga1B+ZxsB7/D8EYEkjHWxRQU8OZnFplQdY + Tq/MANYpqewszkBYnQEfCcCyFrDFEUCTtYP9+Zn+lnEp1CUzHNSwk/uFMcYraZoZK8MZM93RQfAogm4I + ohOJGchlkzLtSMtzIrPAjQzy5OQsB/2fbVUENnH/YP43mP/VKTN/rcQQZtazPCCzMP5JKkSrtAevQxGC + RZCW65RrWxV/TfJAzar6SOC1KNti3IcmAvDKdzz2qvgrZqGF8vgup5o+e0UAjokJwdUXPa4KwMpSGuGy + Bl8AwlcFYC8xVBx/EwFYOHBKRKDyYsBHmIgYSF7ikrWis+nbc4nb8uLZT2h5ystWxHOSti4+ABnEJCIC + 58usVXmAlGNUHvxUFKw8BCzLM63MtJFUi/QHjdWh9J9hkBTQg33x6OqMQlOTA4205laXkta5odWJ5rZw + NHdFoKXbi6YuL2qbwlFRF4riSpuS7lIyAxSX2lAu6/fVhaGlPVyZBTwyGYep2TjMzsks4MgVEXjBg7k5 + N6ZnwjEuGSdGHZiacGN+2oP5Kdp0JMsorJmMxZqpOJYrtjAeh8WJeKwdj8fSmA/Loz6sH43HOmKUdQMx + WOyNUJZkmGy0YbjWhKEao2IjtKk6C9Y0h2K5LRRrW2xYWJ0BPFOjo5GnVNHnlxGrFZJXMr60EpfXp/mj + PIlYIFHqOfBjArA/vOy/YtHsy7EyC4X9N5ZtdtV87H+KETvHicnvLH2eAMQT+ybH8FixQUgjlszw6ZAR + F0LT8RwhxE70qWIx9PMyUzVKhzR5OYDHVda1JR7IjGY702eICCwpoiU9dDa3M2kZcVriLvaBBB2KUw2o + yBQLRk26BvXkYc0ZAejKCUIPfbyYkhI2V6dYP31/dxbxLe+7mVilgzhhJD0AsznEl8Q1IvZO87sZ2hxN + Wd+VWGcuJxDrGfM2Mr6sLzVgA2PfZh57J4+3r8CAE9VOHKsNxwH2j91lFmwrMWIpW40JYqFhxsdJHncN + z7FcEIItjEO76iKwsz4CGytdWFPmwERRKDrTDKjmfRZznGeTQ6SEB8InL9VwfIutvFDzPwVgsawo1lOc + zOS2oCLdgfL0MOT5TDQzyjPCUZkdiZJUJ8eUlf7YiFRvCBIlHnM8R/G40eQ8EptFQPn/IgArS938NwG4 + MJXjL4vjI8/FeO3keAxFvsz+TWMb0/43Abi5Jvl/CMCC48VkFvD/JgBnpbAPJAcyFrGu2JYVOcHKOtAt + xUb0crz2sX57Ctj25LCDxNpjxcGYIaaer9JjsToES8S26zgm1tWFYLmR2KjViPWdFsy36ziuyL2Iu1qJ + y5rJ69tpPbQpYvXNtWbsbwzFgXq2H4+3oyQEW+kbNpdYsanCieWKcMwUOzGUJ88wQ1DFaywid5FljKrY + j5rI5drJgXtkiah8SUvuh37ivIFiNTG/FgNVweiv12Ow0Yj+RsP/LQC3mYjf7JjuC8P8sBtL41FYNxVD + v+FVxODpPicmOkMx3uFCX30omopCUJ0VhIZ81k1tLGZ78mhZmOhIwnxfGnYsFOP6w524/XQf7rq+F3fe + 2IObz7Th2uMNOLirHLu2luH4wXbcct0U7rx5DW65YRqHD7Rhw3IhNq4rwKEDTbj2ZC+OHGzD7u012Lqx + DFuWS7F5qQTLswVYGMvBZG8ahjuS0decgJ6GOAy2JmGsKx3j3ekY60hBZ3UkGksF69HH5puVmW3FHNe5 + qRr2MTVylQf6OpQX6SEpcxsqeF/loWgjbmsvtqKLPr8/34KBHHn2xnZPD0RfKuuWvkDW/e5lX+gu1KCH + nKqbXKuvUo9+8p2Zdhc2jyZg3aAPWydScXh9Ka7ZVotDy2XYOp1P/5uNxf4MzPekY6YzFWOtCWyfGPTV + eVbNjYGGCEx20IcPpGDTRCa2TOVgy3QWts3mYNdSAQ5sKsOxHXU4ubsR14jtbcap/S0fs3Zcs6cdezfX + EbsXYKwnmfg1HOW5dvKoECSTL8mSPZK5SV5al+0kcrh0cp3iDAvxrReddXHkrgnobU0kV0hEd2scutt5 + rf0pjD9ZmJ0twfw8sSttYa6McakA/b3paKiPQn4e8XcS/S75VXamDoWsx9oaD/lSJBp4j7JWc1NjJNrb + oshpEsidUjE7k4eNG6sVW5jJR09nLI/lIo62ICdXROAgpJN3p2UZFEsn3ktKJs7xBSovAUdG+SuWkmJA + WZkXba3pGB0uY5ysQH9/PvlTGs+VjZnpCiwvN2N5sQnDg8VobU5FTWUcsunjkmKJmWhZ6S5yMo9SpiTa + kCR+L8uF+qoEtDUmKjPNy5UXRQxoIw/oaWR7DSZh/XwBti+VYdN8ITbMFGB5MhcLw+mYZTvODqWxLXKx + cQ378Ewh5sc5ZkZzMDsiIm8ORgcy0ck6rmDfk7TlnY2M35OlWJotJy/LwlBXykc20JmE1lqZZepUhN+V + mcHh9H/hSraSklx5OcYfaeTMGYwXGfQVhYwdVaV6nsOFkX4fJobiMT2egLUzaViez8DSXBoWZ1PJ/VKw + OJVCHJHI88evGvvitFgs1s75sDgfh7ULPsWW1hBTLMZj/VIC69SHudkYTE7FYnw6Hn0jsWjqjEApcU9i + FuMBx52XGMwTxfYiLktMZfzOtaKgxIWm9hR0sH16BgtoRahtTEJWLttEhMFPCMAm5cVJe3jQJwRgyeij + tzC2rArAuQXxyM6Lgy8xHGHheuLZwBVMzfgT6pCXKYkjye/jfBqkpwWjtMiOqjLJDhWGmjInOWCoMjs0 + N01mxpLbMd4UpbNv0Uroi4tltmymkX3AjvoyYr3KSLSI8FsVjdbqKHTTJw21p2KqN4c+tYi+tBQLo8WY + GczneMxSfFZLWQQaCsMU66qN4Xc+WjwtAR3VMWgocaNS1hDOW3l5o0BefEoh/kkibkmW9NQhKMiiX5OU + yrLWNX8vJKctzCGfVsymWEGWnfubkChLbMgLXskWZKfYaFbkpFr4P7MSV8u4b00xsWyZC130n+NNknE3 + EcOVXvTzWroLnWjluepYF+WJQahM06FFcAbHQxfvuX3VOuvoz5riMdCUSEvgdgL6W+g72th/W1Mx3JbG + zyloq4lj3UWSQ4dzfNnoL/RISiCGYIyOIfePZ/xOlXWMiQfktwSO9dhoYslIPyQwBkq655JCcu3iMKUs + yreytKOE11RZIks9SVsSO5SEKaKvtGl9hZucPhL15eHE9qwjefHzqmWKyZrAxDzsD2UiEot4TN+Tnx7E + MRSEMiXNupHc34Kulghspl8/d3YSfsMM1KM80USxDTMlFqyvsmMHicKBZieOkwycanHiVKMF19QE4mxd + IM53heBiVxAe6PBfEYD7VgTg789p8IvlfwnAb+wy4t2rAvAeC17ZbsV/iAC8oMM35v4lAD9JcvDEbATN + jUe5fWnYivv6TLi7W4e7OnS42GnAQ71WfGrYhS8MR+Jro148M+zBs0MePDfkxvfGwvHTyXD8YcaNv8w5 + 8R887u+mQ/DzuRB8f8GIb6y14yvrXPjMJjee2ByBhze6cHHZjgsLJtw5q8et3O+WBT3OLYbg5iUj7txk + wd3bHbhvbzgePODEI4fCcPmwA4+fDMMTJ5x4UhGAw/DoqgD88CkvLhzy4NwOF04sh2H7mAXL/RYsdNtI + UkKx0BaGmQYbwU0wOunMOgjUuvOsGCyO4HdRqIwxIVbrhzA/P3hIwNNDg1EYbUZNShjasrwYzvdhPJ8d + Oo9OqiAB09nRGIoPxXCcDXMpDqxPtWIbg+O+NC1OEpxfqDPhUwQ9z4168LO5OPxmTTz+uBSP/9ycjNf2 + JuPKsSS8fzIG/zztwQe0f14biysnovHGMQ/+fsClCPRf6A7AfeX+OEtnfJAddz3J8mKwH5Zpu01+uD0x + AJ+vMuCn/WH421wk3tsYC2yLBLY7aXa8t9OBFzbZ8O1JEy42hOAACcJkohp1DHSyZm+SCMAE3QJyZe27 + aFpMtBbRBNNRURoSa3+EyYMDknmnPVBJuxZORxhhC1AEYHnIHUcwnsKykGSrJiYYrYlGtKcYSR5IbOj8 + utnx21M0qI0NQFmEH/L5PxGAs6QMYz3z+GIZ/L+sG5NE4J9MS+P1FfE6JS3Smlx/nB8Oxbe2RuGFo/F4 + 53Qi3jsVA1wfjw9vSsIrpxPwqyNx+MqGcNzdE4Ld+SqM8VzNdOyVbNMK1lcjzzfGYHa0MgSPsE2+vTUR + L1yfjzfur8CVp6vx4fdb8M9/b8b7v2vGh39rw4f/1YIP/1KHD39bgQ9/XoIPv5etpH/GFxLwwaMRePcB + O95/wIErjzjw9uMOvPVplk+H4d3PuvHBZyOAz0Xhw6fZtp+hcfuDL/N6v54APJMIfC0e/3ya7fWYE2/d + a8JL1wfiL4f88IddfvjVRwJwIF48b8U7n+GxvsN2/QHb9Qc89jddeP1zYfjLfeH41jE77p/T4XCDCvOZ + fhjl/Y0yaE9nazFPR7NUYSOZs2KEn7tTA9BBAtCWrEUHCU9nhgsd6eHoTHGhJ8mFidRwLKa7sY59eWuy + HftSQ3GUBO14qguHkuxYcgRiigFymHXarfdDp1GFDjOJgJXEwR6A0VCSVdbxRrbjDo8f9hNUHaOTPZOo + wq0pKtyb4Y9HSTa+XBaMb9fr8KMmDf40YMQrM6F4fc6CN9YY8OY6PV5fH4RXNwbi1e2BePNAEN4+GoJ3 + rjHjyulQXLme9X6LD1fuTMVrd0r65UT8StbaPRuPZ49G4TNb7Lg0E4h7h1R4ek0Qvsv+/6tDEfjjcQ/+ + dioCL5y04U8nDPjNcQ1+fUqDX50NxC+uV+FXN6vwp3sC8Z8PBuPFxwx46dM2vPr5MLz2BSdeF/tsOF6+ + 7MFf7nbjl2cj8N0DEfjMkhVPLtrwJMvH15rxyJwJ900G457hQJoGD01q8fB4AJ7g9Xx5nQHPbDTg2fUG + fHuTEd/aKALwiokA/Dx/e36DAd9a1uGZuWB8dUqNr8+p8cOtwfjdcQNevM3EfmrGO5fpyx834gqv8a1H + bXjlkgt/PR+Jn98Ui0/vlBnA/xKA6wjaKlMkBaxKSY9axb7RQxK5rlqFMwNqfH6HGb88bcc/RAA+/3EB + 2PjfBGD9JwTgP7Bfftz+KGLwATV+u0+F3x7S4I/XGvGX25x47YkUvPPVQo6rauBnjTSOpe9X4oNvF+P9 + Z/LwzhfSOGYS8dZjPrz+YCxevCcRf74lFr+6zonvH7Xg8xuDce9YAK5vC8ARxrstRYGYT9eiLzIQjbZA + 1JtD0GBlILXrUB+qRj3JSG9kANakmbGrMBwHS8JxgMThWJ4J1xMU31hoxJlsDc5kqHBdjhqn8wJxONsf + 29P8sJY+Zpp9dWpVAO5l2REXiOY4HtcXgBr6zHICT0n7LGnq01cty+uHPO5TTDBTnhqCSoK78nSCGwKc + UpKLEgItEYPz4tXIiv2XAFwgb40TgMk6IHFu+lBaLP1VnIefPWrlgVaMJwCx3I7x0CdHaPldMBLpF+Uh + TDr3lzWGS2NUqIxlWyewfePpg0XkIzhOp99MkhkRUcGI94YgjoDX5w6EzyWzoEjWxHgMseRVATiZvjiN + fjmb9ZhPK+PnavrlJu7TwfsejQvAYpIaexhDbig34t4qHR4p1+CpUjWeylPhUfa3Szz/kyy/WuSHHzaz + X4zp8fcNHN8HLHj/hiC8d7sK794ZiCt36Via8O4dNly5w4HXb3Xityc5PrZpOXYZ68r8MMfjDPi06Io3 + oNWnR6MvaEUApsk67v2sx/4kHXqT9OhJJDHxhaCLgK+HcWuAcWyC8WY2IQALyf7YmhuE/STahwvUOJLj + h5PZfrhDRODWQHyuU4svdQXimUE9vtZvwBe6dPhMmw5P1AfhUqUGdzGW3MDxdITjZwvvb4k2y3YcjdOg + j9fUnqBHg8+IAlcgMukDZW17H+tR1nOOYP0p64eRMIvQmOBTE3QS+LNPNpQ50Fppw3CLC+vG4rFlJgEb + J0iMSHrmB+MxP5SIsQ4CYZLDlnIC+ExJW6hS1nhJYHuIyXYS21tZA5qWzr6QIca+nMVSLJPXKzPDJfW3 + pCGXtS+ljxSzv1TSL9TJ2mS57Os0Wauss5h1KrN6y8UMyjrAQyxHK/QYLQ/BeFkQJqtCsKbJhsXGUMxW + WjBBkj1OgDxW4MJkWSyGS3yo8pFQeIxKKuhogxYRNI8xGBFGDdyGAESYWR/s12kxQciO1yrrxnRWhmGs + JRIznV5ME69NNxIL15sxUyfpJEUA1mGkJgRj9SZMtzow1epEXxXrMpfYIuV/CsB5IoL/NwFYZrhm0pL4 + XSz3Ud7+9pLMEeso6YFEAI5UI5IkwhutgVceENAHRLPPxSQSJyUFIo4xVLa9HBNXZ/2KwCIpoUT4kLeD + HdwO5zFjlBfr1Eig/0jnefPz6EvKtaiu5j1XqtDUpEYP/fbwoAVDyhrARrQ160jkVSjK4z0wrmeznbJZ + KqmeRaDNldm/ASQqASjk2BMBWMRS2S4rVqO6MhANtSICB6CpgTio6aoArFVmGo8N2zE67MBgnxW9nSa0 + NOhQnO+viM3KrFuet4xjpbxQg4pCIS2BKOfnqmJ/EiA1WhsC0dumpbHkcZVU0LShHn9MDGoxMxqCOdrM + UDBmholFuL1mLJgENghrRoKwQFscCcaGaRM2TlmwZsiAqR4D+njf9WX+qCxQkXjynjPYZ7PoN4kbsvLo + fwt4z6W8lmodqhtMqGuxoqbZhsp6K4orjcgtloc7GsRynMhDAjfr300cGS4zAF1qRSxy0X+63WxX9j1F + APYGfyQUrQjABiTGmZEsAnDcShroNFkrkiSyKJvEsNiF6mK38qa1rAEq4m8m+0ZhqswC1pFoh6CC2GtF + AKZVW9BUZaR9TACusqG1zokWmd1fGYryYiOKCwwoLjKiQtK6VTpRzlIE4OycYKRlyppmfkikL0silk5O + 1bE0sT68aGotwuz8AA4f2Yk9+7agp68F8YlehJiDEGwIgt1hQWp6CuYX53HdDTfgvgcewOXHn8SDjzy2 + IgBfuox7Lz2Cey49jPMsz7O864FHcPt9l3Dzhftx3e3ncd0d53HTnffhxjsu4szNd+PUjbfj9A134cyN + d6/aXTh1/R04du2NOHTiWhw+fgpHjrE8cg32HTiqiMD7aAf2HcaB/YewX9JD714RgDeLALy09P9BAFZB + o1HBGKyG3aKBw8Y46WH9p7tQWhCLXOLZ+Gg9nDbuo+M4JOZ3EKc6QsjpaBFmjnfi0zSviDeS7lVL/yhx + WcQ9NQpTQpCfYkAmY0m8CJrEtDarGlZbEKz2IJi5fVUAFgsiDr4q/l4VfRWTGbss/zcBWEuTWcArArAa + gSH+0Ohl5i9L/u//FoBp5HsiApvCAmGPCIIryogwrx4WSWVHk/V/rwrA8qDKZGc9MAZJaeZ9XxVhFXGY + McpKH2ULU9FnqRDqDoCDmMPp1SBcXpiIC1JmBMenWZCS7UBarlMpkzJDkZi+YvHku5FxIQgjh3RE8Lw8 + loi/MkPi6iwJEz+LL5TvJc2zhfFRzMw2Mkk7WfxgYLuIibhr4j2aeY9mRQz+mACsCML8jb9fFYDt/L+T + 55SXOqIiRfxdSQMd5dXx88qYvvpiR4QIvzT3xwTgWNZhvEeLxAiOLfqEJN6/YCPFWF8JYvThKYyzSsyM + k1Th9ME0eckqwydZOCQjx4oILGni5GGPrBsms4BF/JUHgIXZepTkEBcWyJp7BiU9Z3WFCa2NLvR1+9Db + 60NHhwdt7RFo74hEW2ck2ru96OiORmtXNJraI1HbHI7yGgeKJbVlsYk+LgjpPF+2pBostKC03I76Jhf/ + 50H/SAwmpkUAllnAUR+JwDMzbkxOOjEyYsfIkB3T427MT0ZizUzUik3HYO2UD0sz8ViSctKHxfFYLE3E + Y5m2fjwBG2ibJhKxYSwB64ZisNgTjrkOByRt6UitEcM1BsXGaoyYkdm/rWFYbg3F2marIgDP1zGW8/eZ + Gj0myoMxUsL4Qb/eQR/fKByFOLaI8Vte3MrmmJR0hiIAyyxeD9sjgn3JS1Oy5bBtoohnr1qMiIHsDzIb + TQSJGGLaaFocOYGsdSfi71VLlQeDxB1iadxOp2WKaMk+JJbBPiTpjWXtWiV1PPuGrCeeTlyZyXieGaNB + RnQgTcNjyPIqGuIvLfuIDgVJbH/6ktIULfGVBg303W3ZQejN16OvwIh+9oN+loNFplUzoztXj9Y04i/y + tS76+IE0f4yTL08SLyiCLfHMCG2KWGaGXHomPQAz2YFYLDFgY50Dm2rs2FxuwhbGkd0lFhyqdOBkowcn + mrw4WBeOPVWh2FbGOJujUZ6BDLL/jhMPzeUwDjNWbSqzYmuNCxtrnJgvsmBMZi1mGdFALlQcSXxBHiKZ + 2RLoP6I5rr0cfx8JwBz/IgDnxIYos33FcukXcmgi/tZkh6O5KAr1eR4UJJiQn2BGfWE06oviUCoCMGNt + RmQIjxOMBI7lGJ4jim0pArDyklaUnmM6RFkD2B2uhdP+cQGY10Ge9EkBWF6u5XmSJcsSxyF9lgjA5bkO + jkcbstMMSCc3+98E4MZKH+NyCmpLYz8pABPfecPZz8iV/jcBOCOJ7Z8YwHMHoCBdg9IMDarZ5pICurfc + in7WfV+hju0ehJGiIOLlEMxXGrBYa8ISse064tkNDUZsaGLZyrLDgnXtFsy2BGOwititYEUAbiMe6slR + YSQvAPOlOmwn/j7U6sKBBjv2VJuwq9KktPPmslBFyF+scBOTh6Ery4L6FOI4HzEeMW8R+5I8D2iRFOTE + Vv3E/gO5KrY5ORfH40ChGiPkd6N1eow0GjHSQmzaZFTSQHdVaZV1gRUBuFYEYCPGlNTPDswNhmNxzEtc + F4eNs/QZU7FYNxGNhcEITHc5MdURzuM50VFqRkOOHm1FDow2JGJ5oBhrunMw352GLROFuGZ7M+67fgKX + 75jDY+dn8NiFGTx09zjuvqkfZ4404ejuOtxwYgAXb1vC5Qvb8eD5jbjx1AgO7qrHoT0NOHd2EOdvncUt + 143h2qPdOLa/lf9pxuGdjdi1vgqb5kqwOJqH6d5MjLSLoJCszECeHyrA2rEiLA7no7duZRZwXakDNUU2 + VORZUZZtQmF6MC0IJbnk+8Rn8rKfLPnRUGZDk8z+LbWRQ1nQQ788UEDLDsEA+8Ngihp9SQHoTQlATzr5 + a74OfSUh6CtjvTIeDNZYMVxnw3xXJLZNpGLzWBr2LhTgzK5m3HK4F2d3teLI5nocWFeDnXPl2DRehOX+ + bMx2pmKiJR6jjTEYE2vwYqo5GpuHs7F7pgiH1pTi0GIZDq0txZF1ZTi+uRrXsp5uOdKNO68ZwoWzo7h4 + /STuZX2LXVBsCnefnsKZ/b3YtVyD+eEctNd4UZlvR5bMnOU4EB/s4Ri8KgCn0DdKJoTKvDB0NyairyUZ + /WLtyeht4ee2eAz1pmFmPA/La8qxY0sLdm5rw3aW2ze3YN1iLWYmitDTnqS8QJVGfpUhKVoZ50ryLOQc + Meho9aG9OYYWjfbWaPR1+TA+ko41s4XYurEWh/Z30rqwbVMtRgZTyKMiUVFuQy7bKou4PDuX+I5xOSvX + ghzi9/QME3wJWnI9+hLG+BjiwVxef0tLGqYmqrFtcz92bh/Amvl6xswijNLWzNfxuz7s2N7P7UYMDRSh + uTEVpYVR5JZOGn1NcRxqKpJRXhJH3hZOfyNiUBT6OnIxMVSIgY4UtNe60dPgIcePxdxQKnZvqsapQ924 + 4fggTh/swbGdbTiwuQHb2XabZ4uwdU0ZDmxtxIn93TiyuwM7N9Rj21Itti3XYuu6WizNV2BsIAtNNRHk + KDYMdaVh81rus74Ra6aKMT2c+5FNDmajtzWe/CNyNTW0iFoeNFUTa5SGkefIsjdsU8bjNMYcsQLGsZoy + M9szGrNj6dgwn4ft60txeEcdTuxtxsl9TTjOsXecfevYjloc3lqJg5vLFDu0uQSHtpbwu2Ic3cF+uKME + R3eWKnZsdymO7y3l//l5bwn2bi9inyjEho0FmJrJIKaJQVlNmPLytZd4K4JtJS9Xu2iydnMq2zC/UATg + NHT25qCX9ds/XIKG5lRk0+8n0b8nZ4SuCsBWuGMNxM3B5OzE9cTNVwVgLTH7JwTgfB/y8uPJnaLgjbEh + zBUChyzBwv8If4zz6ZEis2ozifMK7agsdylritdWrAjpsvyHvAQoM0NlvVhZE7s0y4zqHCsqWVZmm1HD + 8dRW6UFXXQx66n3oprVXR6OtKhKDzUmY7c/DxukKbFuox/aFOmyeq8am+Wqsn63EdF82hpoT6Y+JFSsj + MdOfQ99VQn9bTr9bidmBfAzwGK38vb7EjZoSckqer5A+LDddlizg9eRbUcXrrOM1iLBZlm8jVmXMzLPx + NzvLUHJ/yZrhYJwjj4wjVkowIj/DQZwrSymEIi/dSl8oYmkEuS2xa20MeXw8pjrTsH4wHxsHCrDYno7Z + ZvrYevqpmlj0Smr4XBvai8Mw2uTDbE8GFul7F1ZtcbQI68ZLsW6sTPl+mr55vDMdE92ZvO88+ukizAwW + YaQzC91NyWiujUNJgROZ6SakJAYrs4DjfcHcNiIzw4qcLDvHoUURgZMT2XbkfMkJAUrKZxF/K0o5Zlk/ + pUXk4iwr+Vnasa5yJYW9WHt9DLp5X/0cuzK2JLNBTUkY750xIVOvpIEuIf4vybEo9Vwhx2K/EE6QmyEz + g4OIMRiD84yoZMyopV/qaonE5qUK3Hx2Gn7dOXb0ZFvQy4saoaNaIqjfXuvEvmY3jraG42STE8cJng+W + qHCsxB93tYfg3g4N7mvzxyOdK2sAKwLwvBa/Wh+CP28OwT+2G/DGbhPe3W/Be/sseGePBS/vtOLPW6z4 + 0aJeEYC/NG1ZFYDdeHIuEk+RMDwx58HDo3Zc7DXijo4g3Nqixd1tOtzXZcaj/U58esCNLwxG4ssDkfga + y2cY4L8z5sGPJsPxax7n9zNO/Hbaip9PheBHcyH49rwR/7Zox+eXnXhyYzge2uzGvRuduHvJhjv42y2z + etw0G4IbF0Jw/Rodblgy4NZNVty5w4ELe1144IATDx124vJRJ544uWJPngpTBODHT4fjsTMReORUBC4c + Csc5/ufYWis2DgYzmAZhiiBqutmAtR1hCiGZqDBgsDAIQ2yEkXInyYgPk1UJKIsk0JTZv350LCTemY5g + lHDg16e60Z4VjeGCBEzQIUzmxmE+nwQr24vxBBum481YSrFic4oBu5KDcDBdjbMFajzaYWd7ROJn6xLx + 5+2ZeGFrCv6T9tqeNFw5koYPTiXig2uj8M8zbrx/Nhzvn4nGlWui8frxCLx4yIlfrjPhuREdnmoOwnmC + xuvYgfZ6/LGZRHizwQ876LBuJJh7kkDwuz1h+NOMB+9sjAO2Rq2kgd7mwAc7Xfj7Vhd+OOvApWYTjhLs + z5CYNMYwWLtFANYins4smgQ+yiOptAh2pYxc2ZbUz3YGeBsDvcMeCJddQ+BNQm0jSOd3sQTi8byedG6X + kCzVR2nQER+MniSC3TStAnwGMtToJuhpiPVDBYFDIY+XQxInInAmwX46SbkIv2nKW9hBvCZ5E5QDldeV + R9JVS7A6nemP2weseGazB388Eos3T/vw3nUxwC3xwJ3JeOtm1vHpeHx3D/su+92ZWg2WSHJ6eW1NbMt6 + WheJ4QJJz3UEtZ+d8uJne5Lx0i0FeOdSGd7/XDXwwzbgN+348D86gZd6gFdYvtgE/Ectvy8HZAbwMynA + Z+Lw3iUXrlyw4f2LNly5FIp3LofiylNhuPJ0GD74vAf4ghf4YiwtGvgSy6/xOp+lfTNpxZ5JwAef8+Ld + J1148z4TXjoXiP844oc/7PXDr7f74adbRQAOwIt3m/DOp8OAb0UC33Pjw++G44PnXHj9My786Xw4nj1o + wb3TOhxs8McMycEQA/YwA/cE63wyR4uZQj0mSTz709ToIOBvS/RHC4FVR5oZXZlOdGdFoDvdjcE0N+Yz + IrEly4tdGeHsw06cynDiBtpNGS5clxqK/ZFB2OJSY8lBAhqqwpQjAGO0EZLucZYzrN+1Lj9sI1nf41Xh + MPvmKbbBjazzO9L9cD9J/uN5KnypXI1v1Abih40B+G1PEF6cMOHlGSNemdfj1eVgvLo+CK9s0eLV3Vq8 + eVSHt04Z8M51Nrx3jmPkjih8eDEFHz6ciw8u5+D1hzLxX/el4U/3pOKXtyfje6ei8LVdZnxuvQbf3GnG + zw/TFx1z40/HnfjL8VD2HSN+cygIPzvoj58cCcBPTgbgx6f88LPrVfjDXVq8cJ8e//WICf940o6XP+1c + tTC8xHb6j/Nh+PnpUHxjjw2fXbLingEt7ujV4rYBDW6h3djDFXow/QAA//RJREFUcd+hwukWP5xtUeHC + kBqXRv3x1Fww/m2jGd/YYsZzG0349ibT/xSAaTIb+BtLIfjqbDC+OKHG12YD8fzmYPz6mAjAVrxxvwVv + XzbivSfEzHj3CQfeeMSD/7o3Gr+8KQ5P7/DgeE8IpkUATvVDNUFbmaR9Zf2LMFLOtujJ9MOG2gBcPxyE + L+6y4tdnHXj5diveFQFYUkBf/L8E4CD8SRF7/w8B+BDb8iB/434v3GTD3y9G4sqXcvDBt8uAn3H8/Jrj + 6NeNwM+5/aMyfPh8Id59JpP7pOKdzyTizcfj8epDKfxfEv58pxe/vD4Mz+4x4snFYJwfCsbZtiDsLBFx + V41etwp1RhVqzcGotelRbQ9GDX1SLX1RV0QAFkjmdxS4sK/Iib0MyvvoN49nBuNUppYWgDNZAbguT4NT + JL4HMlXYkuKHRdaNrAE8laD5SABuJxloig1ADftxJYGnrFshafPT2cevzhDJlDSB3KcoUYuKND2qCEar + s0yoYRyvzjQpgnBZuh6FSUHI9gUoArAIBpL6JZNAJIm+Ld6zYj4SEFmTIzFGUtv5I06xAOUBRIJX/KJO + ScGWTb9cGKVCdYI/WtMCOI790ZcboKz7XM0xXsTrzeLvqZE8FsfsyppatPBAxJGo+ThOE1km8vrFFBGY + pQjAkgY6gz4zm1bE+qzk5yb+1svjLaTpsD3HQOxhw621obiv1ojLVTo8Wa7FUwWBeJT97BLv5zH6oC/l + +eGb1Sr8rId+bYHjW7KQnNXin7ep8cH5YLx33sA+Rzxyl53mxGu3u/GbkyZ8nf39fL8/225lxkNfbBA6 + CNibY41o5HZLnAadbB9FAE4ORl9yCHqSDehO0qPDp0NHdBA6vewjrLdxEYATVwTgDdkabGeb785WYy/9 + 5EH6o9M5fri91A/ny1W4t1KFB+sCeU8a3FOhxvkyDe4sDsTN+QE4leaHAxxLIv4uRLOPsA0H2Eat0WrU + RKlRGqVFQWQwY1kg0kMJLFmPkhUjgvXn5ray7kiESiGYkipIBGCZEdRW40ZvvQuTnZHYIA9Vx2OwNByJ + hX4vZnqjCXajCODD0SlrGxVJepxg5Ev6sat9hrE0kf0vkccVS6Glkhyl8TrTuY8Iv1dNZoVfFYClvCoA + y1pgNZIdgGNC0sG1yJrAxSHKA4nhKjOGK1lWCk4yYKzCSNNjvDwYU1V6LMnsnmYHFmqsmC63YIqkc4Jg + eqY8BmOlJMAJFhR6DciJMCPZYUCMVYdocxC8JmINsxo+h5rXJimRZD1stm+xHf31EZjqiMZ8N60zHPNt + PH6TDfONZkzXGzEpD6SqQzDKvjfRaMdEcxgGayxoKQxEVboKpSLwciyL+JtNvCECsCL+ivFeRUhV1rql + iQDsi7sqAKtX0gYRw0S4/eFhDHN7AhBB/OEhVvLEBCCS/kDE4Gj2v5gELbeJg6IDEMZ2EPFXZv0qs95o + InoIbgrj8bzEWJJZJYlxN53jNS9Xg9ISLSor6DPK/FBX54/OzhAM9pO091vR221BG/FqSYG/Iv7Kerzp + HAuyPm8mr1vSceVnE2/xnksKNSiUGbLZKhTk+qO4QIMKHru6UouGGuK8OjUa6/3R3OiHzvYA9PUGKwLw + 6LAVI0M2DEpKri4TzxfCY/nzWOwX+X4oLWDfKFKjoljLktebr0Y5x3g1x0RjVRDam0JIhIgrOoLR30l/ + 2e6PruYVEXi4OxBjfUGY6A/GZJ8Ok/1aTA0QgzNGTvUHYqZPTRKnJrlVY+2onkTPjDWDZvZ5CwbbZOYs + z1nAesri/fJeUzle09k303iP6bzv/EL623INymtDUNVIH9tgRkWdBcVVJFqlRmTkkgBy3IdzjDiJX50u + eYmR5qCFBfCzWjGPYF4RgTl2I4k1JX3bvwRgC5J9JiR9TADOkgfKmZLei4RRSHGGWXmZR9ZxkjWd8omr + ixhnFAGYmKuxYiX9syL8/g8B2K68/SsEsK3BjfqqUFSV2VEls4KrZV1Qt5IGWpkBnKNDRjb7T6o/Ejn+ + k1KJ2eUFhHgd0rJcqGvIw9RsH/bt34It25bQ2FTNvhuKAI0KfiKaBgUiwhuB/sF+HD95Eucv3IuHLz+B + +1cFYBF/7710GecfeBjnH3z0E3bH/Y/ilnsu4dz5B3Hz3Q/hpjsfxHW3XsSZcxdw3U334vqbL67avThz + 0z04efZWHDl1PY6dPIOjx8/gyNFrcfDQCSUd9AHaoQPHcOigbB/C7t17FAF465YtWPqEABwCtSL6/i8C + MEudVgWzIQB2iz+i3SEczy722VhkpbmU2WJ2qwohWj/oNX4wEvdLunkrPzvJmYSzpEZqGYtD6B8kPalk + 5hBfwbGWGISs+CAkx5APkRvZRGgkzjCY1DBaxPwVAVjH4ygisHF1vV+WH7ePhGBJF/0xk5m/QfR7V9NA + i+ir1qkUk20Rf9W6VQGY1+zHa/YPFgFY9QkhWS8zZ50ahJGvhpIrXRWA7S4NQsO1isnaZkabSlmrTEpT + aICSctketpIqWoRZA2O8ItYyTolALKJwKPFTmEeNcMbRKJ8evmT67qxQpGQ5kJhhR0K6jaWDn51IygxD + FLmv06OBzcVr4jGV48lxaSsze3lsHn+l5HWsfnd1H1nP9+MCsFEE3lUzm0X4/ZcAfFUglt9M3HbyXmSt + XxGI4mKM9OUmxDKeiFgk41iypkSGaxDhDFSE36t2VQCOcQcpaaCVdMHkn7JmtCzb4KMvlxS3InRJhqt4 + fpdEH59JDCjCr5hk21DEX8aYVGU5BsZ1jssi4k154CMCcDFLWS8sjzw4j78VEH9KGrhC8rKSgiDUV9vQ + 2RaFnm4furqi0d7hRUdnFDq53dUXh65eH1o7YtDQ5EF5dRjyiy3IytMjNUsHXxIxYYKsbxiMjEyZDUw/ + WBOG5nYPugeiMT4Vj9k5H+bm42gxmF0gppjxYGIiHEPDoRgesGNqJByz4x4sTEdjzUwM1k7HYmkmAcuz + CVjH/y9P+rBETLJOxN+pBGycFEvElskkbJwQATgKi908RruDsdjyCQF4nNvzzXYstTmJExxY0ygCsFXJ + GDJbQ18vS0eUhWCY8aU3T41OYtgGxjnhKHnEJvICl2DlDOI9Sd0sWUJE/HWzTWTWWSS3I9lnI9lnr5oI + w17+JnZVIBaTFyo/LgAncXwn8JiSLjqJ2DqZ24qAK2mLo0IUS/MGK+mNBStL1gAROpPoE0QITuHxxGRb + LClSsqhplFTi6dE6+hY9culHColRS5PUqE8PQluuHr305f1sw8FSO4bo64crHCxD+dmB7nwT2jN1aOe+ + XfKSK/n7SLo/xok9x8ndBsk9hmlT5HMzqYyf7EuTORpMF4RgLWPJ+ppQbKywYFOpCTvKbThYG47jrdE4 + 0RaLQy1R2Fvnxhaec5Z9b4iYqI/9d4R4YjorCPOMVcslVizzf3O8vmHGsK4UDZrJT8qj/JUMQ8J5ruJa + EX899ENXBeA0cpNsYvR8n5G4S2YCSxptfk4wojzNgabCKHRVJqC1JBaFCYzR3K+hKAb1hbEoSQlDXqyJ + vCZYefYjAnBcmCxxo1JeevWS78gLHd6IkNUZwBo46N9lDWC3g9iK3OTq+r+JxFipCTx/igl5KRZiZQsK + Uq0oTrejIpvxmrFblnFII/dKTeC4SflkCmh5mF1XFoum6kTinGhFAE6M1SnZ8WSWcTTbOibSH/HsLyIA + pycZVo6RItsaZd3NDFoe26coNQDl6WriavKVQiO6Cw3ozQ9SZv+OFrHtSkOwUGXA2nozlolflolvNzSb + sLHVio0dFmzoZHu0mTDbGIyhcmI3YrI24qEu4p8BYrEJHmOB42dbgx0HWp3YJzOAiS92EG9srbRhQ7kD + i2VhmCpysD+ZUZugQ3kceaNXhXziokJygBr2g/Y0f/TnBGKYmHQkJwCDIgCvisDT8pJlM3F9sxUTbTaM + tlgw0GBQZv3K+r8yE1gEYRGHJzroT3rDMD8UgeWJaGyeS8DWhWRsoS/ZOO3DupFozPW4MdMRTswejr5y + O1rkhU9iqfH6RKzvK8JSdy7W9eVg33wlbtrXjUfOzeHT59fiM/etxeceWIunLs7h/puHccPRFhzfVYfr + j/Ti4s1r8fi9O2jbcf6mOVx7qIvWgbtvnMCDd67ldzM4d2oY15/o4/7dOLWvDfs2VWPLXAmWRvKxZiAX + sz05mON5142VYNN0JTbPVmH9RAn6G+PQWuFGQ2kY6slNJCVpRY4ZJRk6lGURe+YZUVdkQY0IwMVmNHDs + NBdb0crtTn7fV2jBUIEZQ9nE9ukaDCaTs9JndyeqOb7UGCgwoJ/jtV9eEJAXgcmpxxrZbr2x2DGVje1T + OTiyrhK3HOrBvWemcNfJMdx0aABn9/bg6KZm7FlTg63jxVg3mEM/nIG59kTMNPsw3RCNhZY47J0oxNE1 + FbhmqRrXrK+lsdxYjTPbGli/bbjvzBgeuXkeT921jKfv2cC6Xo9P3bUOT90ttgGXb1uPO09M4ujWNmyY + KkFXfYwiAAvelWxlIvx+XABOow+V9M/VBS70NiVjoDUVg60pyizGwbZkDHUkY6w/E2umirBluQaHdvfg + 2IGBFds/iD1bOrBuvgpDXakoy7cinf4ziz4oL431nWdBT0sCBjpTyDUSyDPi0NsRq6Tynh7LwvqFUuzd + 1oxjh3px7GAvdm5txPhQGtoYO0uLOcbp57Lpg3PYZll59EG8j6IiF3LzQpVU0MLNw+nnYsj1iksiMDBQ + hG1b+nHqxBJOHJvH5o2dykzgkaFCzExVYcvmTmzid4sLjZgYq0RHaxZqyuNRnBtJ86KuMgXN9VmorUom + p/IqwnBVSRzGB8uwNFuL6eF8jHYnY2YwlbE1F7vWVeDGE0O4eNsaXGIb3HtuAbedGsfZQ304srUJe9ZV + Y/+mepza383+PI4brxnH0T3dOLSjE4d2deIwbSf7xMJkMTqb6FvLnUr6512b2d+3d2LjYg3jewmtFGtn + StkGJRjty0BPq09ZH7itfkXgaqnxKsKlCMCp5JzJjMepYowXeemBqC2zYaSb43WuEEd2NuHM4V7cfnoc + 52+YWXlp4Ow47ubnOznmbj8xgFuP9dC6cfvRbtx5vBt3HO/CXdfIiwfduPtUD+6i3X1tN86f6cY9Z/n9 + mS6cu6YDZ453YP/eRiyuLUZXTzxKeD/RxFjC6cLo8+2MRaHscxH0/QlJbNdcJ+qaU9HalYXOvjz0DBSi + vimF7R2OZPr/ZGJWX5JNwasRMQY4iREdjCeSBloEYB3jmWB3ozVAEYCj4kMVAbigMBFZOT7+14XIKCvc + kfy/R49oHiM3z42y8ihUVUaRr0WjrtqLhmqPIho20iQFd21JGPmgSckOVZxpos8IRWOxS5mxW1cQiiZu + 9zXEKRkHJroyMNwimQfYHhURGOe42TBehgPr23BsC9t6QzsObGzDgS2d9GHt9FFlmOvPxSjH2EhrMrav + qcOhrV04sXsQ1+wdxq7lZuWFloGWFRG4sTJCESzLC2wozFoRf0XkbGO7d7UmKoKmrDdclkc/x2urKpGZ + r+GoLo3gvk62v01J95ybZkNJLvfLd6OU9VuSG4Za1kM3r11SVE/106+OcIxPVeLQUhOOLrdg/2wNdk9W + YvtIiSIIr+nMwBDrbJrXvWWiFPuWGnl/HTi4sV2xw5vYpznGDqxrx66FBvqfCqzhvawZKcaG6WrGlgZs + WdOEpckqjPflo7stDdXlkcjLsiqx3cdxnETenk4ckJftgKRoL8hzIJu/Z6brlaXY0pI1igCsCL5l4Ssi + cHEYt10cyxForosiN49GR1Mcx1Sc4pemhvKwhrFh7XQ5Rnsz0FIdybqyKgKwCMGl9FOK+FvgQAVjb2mB + XZlhLWnAZX3gwqxgJSOQvAxaXWrjsb3YTP98y3Vz8OvIsKGJgbqRgbqbBH8tgeGOOg/2N3twtC0CJxrD + lNmLe3P9sJdB+pzMAm4OwMVWfzzc4YenlRTQAfj+QhB+s8GAv2wz4B87jXhLZv8esOCD/RZc2WvFy7us + /M2OnyyZVgVgMz49acPj005F+P00ycKn5iNxedyJi70m3NEejJubtLi1ORh3txpxb7sVD3Xa8WSnC5/p + icQX+7346qAXz4178d3JCPx02o2fTznxs0lJp6jHd2b1eGbOgC+sseGppTA8vMGFezeF444NYbh5rRU3 + 8bfruc91syG4biEEZ9aE4OySAec2WnHHjjCc3+PEAwdduHQkDJePOfH4Sdo1YXjqWl7v6TA8cSYcj4sA + fK0b9x524twOG44sGrDcp8ZUiz9G6wIw0aDFui4HthCEyEPL2Wozphl0Z2oIWFqSsdiYhqpoI2IDCSz9 + CCpFAA7VoizGjvrUSLRlRGMwz4fRXAadDA/GU50E5jZM+gxY8Omwge22KyUYB9M0uDYvEHfXhuCLo278 + aEMC/rw3By8fzsfL+7Pw6r50vHUwDe8eT8X7p3x4/1oP3j8bhveuc9G8uHJtNF4/EY5/8F7/sNWGH8xY + 8OUeEx6pNuJOkr+TPjX20PHtIHneTSB+moHroaIgPNsRit9PR+KNjT5gq6wD7AG2OPHhdjde3uLBT+fC + cbnVguNFBsymBaOJYFnW7E0iyBZhQNZEiiDhcZPkuFl6ZE00WrjLH/ZQFawk76F2tSIAu1l6bP6IIQiP + 5zWk0vJIBqp4XS2RAejhNQ4lBmIqOxhz+SGYljVPUlVoYxCpJZEuIWDII3DIomWQnKcT1Ke6dSRVOpIp + PRK8FsRHWpBIR5zpCUR5JMlKqj9uYD18eUM4fnM4Gq+eicW7N/I+744H7k3GO3cl4MVzPvz8WCS+st6B + e7p02J3uhwmSwu5gAl2tH8Z4fdsz/XBHkwFfmY7Ar/cl4LVbc/HeQ0X44AsVwA9bgd+148O/dQOv99N6 + gJf53V8b+H0l8L0c4GvJ+PCpaLx7MQzv3mXFe/dY8M5FC96W9VmfYDs+HYYPvxAJfGlV+JWUz/+WsCL6 + ficR+G4K8Hwy8Fwi/vnlaLz3GTfevGTGy7dp8Zdr/PCnw3747V4//FzWAj4RgL+fN+DtpyzAs2H8vxsf + Ph+Bfz7nwZuf9eD3d7rwb/vMuGdShwP1AZjh/Q4S1A8m8l7lDeLsQIyRJA5lBqInyR9tDOQtPhUaSKwb + 44PRkmIjAXAqa1v3JjkxlxSOrekROJgZgVNZ4ThHuyvLiXto57NCcUOiDsdi1NgdqcIWjwqbGHzX09by + 8zLbfQPLreyPe0kyDkWrlLUyb+C13EYSe4H+6pECP3yqxA9fqlDh2RoVvtfgj5+3B+CPA1r8xwjvf0yD + v82p8Y/1gXh5mxavHwjGWyd5/9eZ8e4tYfjg7kh8cJH1+XAq8EQ28OkcvP/pLLz1VAZeeTwdf7uUxjqJ + w0/POPH9Iyb8+zE7fnfchT8cDcWfjljxx8MG/O5AEH65PxA/3qfCD/b543uH6C+PqfDj0/74/e0h+Mu9 + RvznQ1b8/XEHXnqS4/AJJ1581IEXHgjFz84Y8exOPZ6cC8L5Pi2urVPheK0KRxpUOEjbV+un2IFqPxyv + 88P5oUBcntLic2v5vy02fGubDd/cYsa3N68KwKsi8HdEAN4sn814bsmIr9APfo518cVpDZ5bF4RfHDHi + xdtD8eYDNrzzGH35Uya8/ykrPnjajbcfi8KLF2Pwixti8KltETjOfj9NsthOcl/J+i9hf5B1QAsJ5sr4 + WQTgjXVq3Dyhx9cPheMPN7nx6h129uOPCcDnTXjnNgPePKfHq9cb8JIIwCeD8eejGvxRZgHTfn9sxa5+ + /sMRlsc1eOF6E146H47XH/Phg28U4cMf1wC/rgf+0Aj8kfb7WuBXHEs/5Zj7bh7efy4DV76ahLc+m4jX + n0zBK5dT8J8PxOCPd7rx/eNWfGmLAY9M63FrdzD2lvpjTYoK3RzHNXr6G1Mgqmw6VNqDUGlTo5b+RATg + WRLzLbmh2E0Qs5uBeVdSAPax/x8jKb8m0x9ncwOV9M/XsNyf4YdNSX5YYj3NJwRgOlGLYUktvCoAN8YE + oDraD+W0AvZtZfbvqvgra8WtCMD+rF8NylNJfjItqMuxozE/DA0EHDUEHBUEfjIjIEdmAXPsZZMEigic + kaBW1upNEYv2R5K8lcbYL+tyJMYGwMcx5FO+J1iJDVYerBREB6M0VoPaeH/0cHyPl2iwUB2E5YYQTJGU + d+f5oZr3UxjL6+N4TKL/jKeP94XTz7sCEEfg7KP/TWB5dbZLEu9FZgR/XADOok8vpH+v4r5tBN2jCVps + yrHgYIkDZ6vduLsxHJcarXi8wYgnq4LxdKkOT2Wp8TD72GX6mc9kqvD1Cj/8sN0ff5gOwUvbDXj3tBYf + 3qrBh+xr/7zXhvfvpQ+9140rF7147Xw0fn3Sjq9uCMEdnQHYRYwzxeP0RgehPVqPJgLuhhgtmnnv7T4N + ulhHSupnmrxw1O4LQltsEFqjNLxef3TRPw2z7mbYpnNJ9E/pamzMCMTWjABsZyzaTZ90JEOFa3L8cCZX + hbN5KpzJUeEEr/sE+8Q1mWpcm63B8Qw1+44Km1mfa6IYT9gnBnnuVpLdcva1bJcKKU5/JDrUSKIlOwKU + 2UPyAFkeVEawTmVWaTj7iof1KG8eigBcWWRFRx2JZpOk6orA2sFoLA64MdfrxBRx1Vi7Cz11NrTKmqHF + etQwjpbnBKMkQ6OkeRYRWERfmf0rqaDlRQL5TpkJLG3PPnVV/L06C1hJ/8x9c7idx+9K6BMUAZj1UMtx + UZ/hj+ZcDWQ94P5KC0ZrHRitJuGrNCkC8Gi5UZkBPCYzgCt0xE0OrG8Jw2KdFXMVxFMlVkyWhGKi1I2R + Ei+a0kNREmdEcawVOV4rEuw6RBnV8Br8EWsJQJpbqzw0LCfurZG3QSvCMNTsxUxXDNb00DojsKbdicUW + OxabbVhotmKm0YSxWl5LjRFjPO94YyiGaq3o5nU152tRxfaTtY+VtNfsP3m8x1yOhxxaLu9VxN/MFNYR + LYntGu/zVwRgWffXzXGgiAThJJpuFdvMHy4Pv48iJopeFYLZ/7yyNIYvGJFxWmUdzdBwSbPqB1n3Ukl/ + KkY8ZGUZyv7gljXtJHVSYhDSRAzI1qK4MIiEg1YWQPJIXyNrAffZMdjvQF93KFqbTIqgK9ebxvtJYnul + sN3TeR+Svjovyx/FvN+SgmAU5kr6Zi2K8oJQWkh/WBqC6ko9yagODbUaNNVr0NIYgK72QAz06jCqzAC2 + YmTQisFeC/q6jOhoCUFpkb8y47hE0ksX+qGiOIAWSBIToKSDLstXk0AGoZl139XC/3ZaMNhloLG/dGrR + 3Uzf3OSHAcb0wc5AjHYFYYx+e6xHi/GeIIx3qTHGsT3WoWKpwlQ3x2cfMWJfCGb7TJjusWGg1YzmSh3P + qUY22zIjneNLjH00meMyVWZBy0zlUjVKq0NQUc/+U0erNaOYmD63zIjM3BD4EtXKW+LykCBUZjg6aKH+ + cLA9wpxqGtuFWFcwrgj0Ct4lDvW6RQA2KgJwUpwIwAYk+WTdJD0yEg3ITjFA1kbKlxT+ySEci/Tj9Nnp + HNe5JJSFGR8XgCX1s6wFbCT5FmF7VQAutyozg7tbI9HTFsW69KK9IQINNS62lwuNdZGoqw5HeWkoCgvM + yMs1IIfHzOJ9Zcqb+VnEyWk6xJBzpGSEoaY+RxGAt+9cxvyacZSW5cPuMMEvwA9+5DIB6gA4nA7U1ddh + 5+5duOWOO/GAiL8PP6qIvxcefJh2GXff/zDuvu9RnL//MdzzwGM4/8DjuOu+x3H7xUdx6z2P4Oa7HsG5 + Ox7GDbddwvW3PIgbbn5AsevP3U+7iOvO3YtT192Jo6duwuFjZ3DoyGkcOnwKBw6KAHwUB/YfwUGWBw8e + xoEDB7F71x5s37odWzZtxpKkgG5pRmJCPAz6EATw2tXqq6ZSTATgQH6vJUfTBalgNskLGzoSeRfHSgzS + iWOjvAZYLf4I4j5B/G+w7MtSWW+cmMHLmJYcIbP4gpEVo6FPpD8W38j2y4nXsB3ViJcxT/9tNvghJIT/ + 16sQYlRBb6bxnCFGfsffRPwNYZyU8uMWLAKx/E4f9y9TI8SqpWkUAVjE4KvibwD5ycr2xwRg8hUp5ber + ArDMBBaT9YCDeUxjqAZGRyDMYYGKACzCr8xqUGY2OPib1R8hIrSSq1n4OZR1JSKxzA420D/JQ6+rM5Z1 + vA8j/ZWN8cwhM+ajgiFr/EqqZ5n1m0xLSLfCl0pelmFHMjlBcqaLv9vpA+VBmlrxeYqo/N/s44LvVbsq + +q4IwCrlWi1sNxO3DbwuA6/JxPu0mGUWsMz+XRGA/yUOM6a6tIrY64u1IMHH+BJnRWyUgeNZh8jwIETy + dw/rxc36cYexTWXM0zyrAnC0W4NYjvs4xnGfrGtKrhtHHBRLnxFNX+7l/cgLA/LSnKxvmEHslkn+lMm4 + Ilk2/iUAS8xVISspUJkFIA/YlPRveRYUEH/mpBD3JRIrpLCv0XLkJSBipaoyM1o47jvaY9FGX9DcHKGU + 7e30Cd0yK9iHpqZoVNdEoJBxNTE1CLHEjjHEkZHst1FRsta5BgmJwUhLD0FZhQNNbZHo7o/F+FQyFhZS + sGYxmZaIhcV4zM/FYmrSi+EhF4YYZ0b7wzA1QswxITOA47B+IRHr5lOwPMtyKh7rJn1YP+XDhulEbJxJ + wiaWYlunuD2ZgPXDUVjb48Z8eximGZ/HG8wYoz8el2wd9WYstjmxrsONpaYwLDQwftfbMF9nx2wN43iV + GRPENmMlegwW6dCXR2xHji8CcK7gbDHWqaRWFpE2JtwfEWwLealOEYBpHo7RT5h893FjG4owHMfxHi9C + LzF0ckwQEqPZ5sSIkiba5/bnePdHAuN/ciRxtpf+hJbq5X7sI3E8hqwdHh/Gfdh3EkQM5v/ks6RCTiBe + ENFSMpnIs5TkSLZFlA7pxKHiW/LZZ6pSgtCUrUcXfXl/iQ2D5WEYqXITw3gwVOlCX2kY2vMtaM8yoD1D + j87MEPRkaDGUzlgpPJ42marFNI8znaqhaTGZGYyRLHIVYolRYsOJAr2ybvB8vg7rik3YXuXE/qYoHGqL + xeGOOOxrjsK6UjvGedwuYqMu9tmBZH+MZQRhJk+PuUKz8rL4cFYQOpPJe+JVqIxSIY/YRpbnSmE9Cq6V + dX+9HH8ejk8RgEUkz+D95vpMKEyyKlaUyDLeguJkGyozXGgpikFXZRLay+NREG9CBv1FaaoDZWkuFCWF + IjeG30WGINUTDMn+5pMU0A5J8a1BZISG45yxnH4uLDRQeQYVSv8h5mF7RBOjKbN/icuSicvSFAHYjPxU + GwpSVk3ZtiA3hedJkjX92Q9o6dzOTCFeSDWzNHNcSrrGcJTITOUsF9J4rUmxIUiM0SGR9yjL6Yj4m0ge + ksL/pyWG8Bg6ZCQHKQJwWoI/0llvOazXwmQVSogvK5MD0JCuQWuWBt3ZavSRcw7nB2KsUIuZMh2xs8wA + NmMtx826FhM2tFuxscuKDV0WLLcbMdfAdi4nbyenl/V5+/ICMFygwWRxEOZKgrFcFoLNFeS75TpsLdNj + a4UFmytDsVxOHkH+20ucUs26ySfWyWa/zSYmyqMVkbfWsR90c8yNsg9NEjtO5ZBPZqkwQow1khuANY0c + s60OzLaGYrqduL6NXKDZrKwH3E3O2V0t6aGJxVttmOzkPn1OLAx5sH4iGlvmErF9IRnb6Es2T8dj49jK + mraz7eGYanZhoMKOVvrKzlw7RipieJ4srG3PwqaBAhxeqMW53d148OwUnrptHp+9sIjP378WT949hYtn + e3F6Xx0ObijD0a0NuPn4KB66dQOeurADl25bhxuO9uP0/g7cfnoEF26awW2nR3HuRD9uvmYQ54714tTu + FuxcW4rl0WzMdqdh7UAer60M26arsWdNI/asbcL2+RosDuWhry4aTSVhqC2woo5WlWsml9ejNF3HUoea + PCMaOG7qCoyoKyQ/LTShpdCCNpZdIv4W2TBaYMEIx/5wehAGk7T/D2NvHSdZdW0Bd7WVu3RVdXW1u3e1 + u7u7u870dI+7u7syBoMODgkQAiF5SQgJ0Rd7LwaBhISQECLYDDOzvnVuzwDJe+/7vj/275TeuvecffZe + q9Y9+6CLvL+V1kx/6SCu68hhf+ab0VkkeEwA+qvId9oisXY0E2tHMrBrvgzndnbjwROLcPX0LC4fGseJ + bb3YsbQOG6fLsGGsGOtGi7B+uBDLu9IYc2MxXhVGvhSJ9b0Z2D6ah72TRTgwW469i4qwc1EhDq6owNkt + LXjk+CS+eGEeL1xZhZfuX4uv3LcWL967Gi9IthZfuLgK9x2expGNnVg3XY6u2miU0adEtZtQxgNxw83n + S0AvCMBalGQEoL5EVK6KkwTgvqZEDLUmkwskoq81AWN9HsxNFmDTigbs29qL43vHcGr/JHZv7MEyjn1X + fQzyUnSM/fTZaPpughJFzKXdvLa+lkRyizh0NUWRd0RioCMOo73JmBnOwLplldi0tg7rV9Zg+WwJ81sc + qtmn2Rmco0l+SPWIihka4mhi+EyLJNwJETg2Vilxc5PILeRzefkuDA0XY//exTh7ai0O7FuMZfOt6OvN + Q3NjMjrb0zE6UsxcWkwulcfnWeRrySgrjCZ/CmIMCebjWNSUJ6O8OA55maHISA5EaV4EhnsKsXSmFjMj + BZgayMCyyRxs4Xgc3NqCe05P4Yn7V+HpB1bjkYvzuP/0Ipw7MIQDG5qwlde2dXkV9m1sxom9/Th1YAQH + t/di7+ZO7N0irAtbVjdj0UguWqpCFwTg7nRsWNmE7RvIDeZrmN9LMD9VimUzZWxL2G/p6G1LXCgJ3RSL + ttoo1JeHoCzfjqxkcgvm4jjGiPjblsZYVkZfHexIxLr5CpzeP4h7Ts3g6vllePTSClzl/Lv/1DQeOCFs + Cg+dmJTs6olxPHZyEk+cmcTjp0U7IZmY25KdG8fTd43jqfP83F1jePDMKO45OYoDuzoxv6QULU0xSM8w + S9WcRFUtC/3OTJ+z0gedxG6hEeImOOaTkkiUVsWioiYeVbWJKCqJ4pg7yR9tiEu0EjsZyd11cIVq4QjW + ICCQeNguJ24lThaYnnlNb/aFzanm5yzwZEQgKyeWfDOG3w9GRLQdYZE2hIQTa8ZaUFGdiNb2DLS1edBE + P6+tCJNWUFcKAbgokHzPhcoCh1Q5IJdxozDNgMpcO5qL3VK5YyH+NuQHYqAhDkv6cxgnizHamiat6G3I + d2K0OQnrpytxcF03jm/uZ9uDw5sHcGTbEPau78aKsRLM9GaTO3ukdtfqdpzaM8G4txRXTi5nHOzHMsaH + /sYEaX9zcT5CkF7YmsSIklwbuXwIukQZ+U4POurjeL5BxK0WFAuBusiNmrJwVHEuF2aTY6WwTxKZ39Ps + xLhulOYG06eDeb1haKtPxkhPHud1BdYtacSm+UZJtD7Bc7hr+wjO8rxPru9l7GnFrtk6xq1SYsc0rB5i + PFrTgXO7x3BmxxhObx/91I5tGcK+1V3YMd/C+MM5PVaO1YzRW5fzGGu7sW/TEDav7ODcL0EH52VNWSRz + tw0JUQpESFU6RIUP5vQMB/Kymdd5DZm8tnSOQzL5s9iKLYOYqzDPJom+YtVvEfukOE+siHaRm8cyxsSz + jUZzdTj625KIjYuwdo45YkkNxhhfmyrDUJJtIe/XIE/sYZwutn4R/Wdjn1mlstoZyVqpQkhyjB9xhQr5 + ojoQrTDHhIaqECxbXI5TR6bh1ZxsRVmoAsVM0PVhPliU58TaylBsIXjb3RC8IAAXqbExzUsStw7myXC+ + Uoa7a2V4sNELT3d44WtDfvjBIhV+s9yAP64z4q8bDPhIiL/bTLhFu77Fgr9vMOPtdTb8bM6Mlyf0kgD8 + 1IARjwxZ8NioE09PBOGLUyF4YjQQ93eZcKFZi9O1SpwgGDlVpcLpCjUuMPHfV83PNwbii0IE7g7F1wZD + 8fKgG98ZdOJ7/VZ8p1+HlwdU+OqwCl8aVeOJCSMenLbi8mwAzi0JwPHFFhyaMuAA3zswqsLBCQ0OTWtx + YJGGCUuHo/MmnF1lw/l1Abh3iwMP7LDh4V02PLLXhsf22SQB+MmDtMNOPHHIhUcPBuLKjgCcWKPH1mkl + HUyGwWov9JR6YaDcB3MtZqzrcmNtRzCWkpzMVARgpioIS5s4AenAlYJEknS7xApgPxI8sz8Kw22o5OSv + Sw5BR1o4ulOCCZwD0BaiRmeQHEME+ovC/LA83Bdb4v2wn8TuriIlnmqz4TvTYfjNxkT8ZXcW3t+fjX/u + TMcHO1Lw8c5EfLwnBtf2huL6AQeuHbbgk+MBuHbcjQ+PBONv+wLwV17nW+sD8IvFNny7z4pnasy4J1eH + YwSb21wybGQQ3Mzku5fE9O50X7xQZ8IvhkPw7pJI3BD7AC93A0sduLk8CO/OB+Gnow48VmvC7hwNxhNJ + SML8JQE4LlCBUIcfgkiSxR3VAXbRkjCTPLuccoJvPwZccRe2D6xmH9gt/nDxcQgJeQQDZhyJQDrBeBHP + p5oBuZWJtIfkYpjgd47EZGWhDvM5cowkeqE9ygt1JHbFDOLZPPdUqyAXJF0MuPEuHaKDdCRqBk5eButg + C4mbDgkkATmcD+0xMuxt1OK5xXb8fFso3j0SjmunQ4B7IoD7o/HR3eF471wYXjvowrdX0z/6dNiX7Y05 + 9s8Qg3uvyguL+Xh3hgwP1Gvw9ZEA/GZDGN4/nYybYjXp87m49YMq3PhNA2690wZ80EXrAP7eBPypBnit + BPh+OvBSHG4+FoJrl6z45KwR188b8OElHT64osf1Ryy48XQA8CWx+lcIwKG49ZVw4JuxwKsJ/H4c8EO2 + P6B9m699PRI3nw/GR6KU70Ul3j7ijd/vk+H1HTL8cpsMbxz0w1/v0eCjJ7W49ZKZ33HReM0vh+Kj5+hb + Zx14aZ0e5/uV2FTmjTH2sRCAu2KEYC7DQCrJhthvhI/FvkK1HJeqMC+UcgwK6UNlYWr6vJFmQUOICSP0 + 9RVxDuxMdeFoeiDOpzlwb6oVD6fTmICvpKlxJt4HB3j83TzeLj7eFu+LTWw30fc3x/pia7QMu3gO+/j+ + sXgv3EUycXe6Fx7K9sJTJDLPFnvhBdp/lHjhO+Ve+FGNF37WJMN/N9PaZXht0At/XOyNP6/2wwc7tfj4 + oBHXTnJ+XAzEzfvCOFZRuPU4+/ELicBzohx3Em58ORHXvpSIvz8Rhz89EI437nLiN8cteP2gGb/dY8Fv + tmnx2hYlfr3JH79Y74ufrvfGDzd449V13vj2Jl98d7sffrjXH785pcebl4z4w/1W/OkRO/7yWCDeeVjs + tWzFa3eZ8PImBZ6a8MV5nuv+Es7BHBnWMgavLJBhWYEX5vK9sJztWl7fjgoZLvUr8PikBi/MmfDNlVbJ + L19dZcJ3hAi87LOVwJIYvMKI7yw34euzJjw/qsUX+hT44oAvXpz0xY83q/HHs1a8/5ANHz9lxidfZDx/ + xsLrd+PjJ0Lxpyth+PEhNx5fZseORgVG2d/1HKP/TQBu5Xgsq/DD2VH+9p5QvHnGjX9etOL63QbgXiEA + 63GL/vzxOQ3+eUqLvx3T4N3DWvxhnxJv7pLjt8J2++E1yYTou2Bv7vHHW4dUePd8AD54OBQffyke+F4B + 8ItKzh3a7yqA31fRyoE3yoBf873/ysGtH3rwybcZD78Wj/f5nb89FYs/PxqKP9zrllYBv7LRhGdm9LjS + rcbOYm/MijjioA9reD06bxQY/VFgUaLQ4ocquw/agv0xGq3BfKoRawhy1hHIrmPs2MDr3xnvjQMpvjia + KcfRbAX2Zsixicdbzv6ZY7yaifPHeKwCfSRoHZH+UgloUSmhNIT9SMKczvghBOAUtqmMc2khJPuhC+Uj + s2J4HglalKaYUE0CVEvAUZPlQLnHgqJkI/LiNfBEk9BE+pDUCGLji+RoHyRGibvGF0oIJkb7ISlGIVkC + n0eHyxAdJuPrCn5XidxINYojFagkkGhO9MZ4gQJLa5TY2K7B9l4j1rZpMVHhQ1LthZI4cX5eSAiSISbQ + B9GM46L8s7T6944xDkuloIX4S4vn8yQCa3FjjocxPZcxvTJQhvZIX0yRkK3JsmF3YSBOVrpxd00gHqy1 + 4Ik6I56u0OJLpXp8KVeNxxO88Sj784v0s69zHvyIc/u1ERXeEwLwPjlwSgVcEqXGHbh1fyhuPBCFTx6M + xd/vjsbPd9nx3IwWJ2q8sYrfH2SsagsRoq4K1aEqxi5/VDPP1ob7oIH4qIGP68RzjlFNqC9qCPpq3D6o + Y2xrZM7o5JgNR/hgjOM/TfIyyxg1z1i1nHFqNduNiYxdiT7YmuyHLSSIazkWy/ibKyO8sZbjuZEAcS19 + YimfT4Uyj3C8uyLkaAxXotgtR5oQ1JnDQgRxNMkQTiIRbfVGFPtQ/HEYwj4OYr+66C8Ommg/LwA3ljnR + WeVEX40Nw402jDSRXDUY0cdc3llpIEFQoCzdH8Uef5SmK1CSyd9NVyGb5yz2+E0Sf0RzfgtLumO3X5P2 + ARakjeaJlCGdlhlJX42QMRbIkMMxEuKvKAFdliz2CpehkrmiNl2OJiEAl5gwWOHEYJkNfUUG9OSr0cPx + 7clTSat2BvLlkvg7X2fDogojJov1GM03YCTPjP4cG7pznGhKt6M0zojCGDN914pYqwJBzMNuWjT9K434 + KYcgvYRzpjLTTOLjQE+Nm/0QgsmWUEw2ujBVT4xWZ8Zi2qIGK6bYN+LPZVFisq/MgP4KkyQAd5Ua0Eqs + UZlBAs98l8Xry4r1QqYw5qGF8s8yaTVtsiQAyxAbw3lB3w4J9UEQfcZO/3fYveFw+iCA42an7wfwdQd9 + yhFMTBQml/bJdIWpEBSuYauG3S1Wv/lC7LUpVtppTV6S6KIRYgUxkpl4KSDAH263YqEkUZyS4y9HJscz + nzGouECOqnIlGur06GizoqvDibYWO2oqTfCkeC+IvxzDSM7lGCE2cNzF3kyZqcRFGaJssxo56cI0yM/S + kVToSGD0KC3Uk5hpJRG4pkKJump/tDb4o7dDg8FeA4b6OE5dRnS38XeJ75tEyel8mbTncEEOfSOPmI65 + rZA5TpSEFvsC53noJ7lK1FeY0d4QgN4WK3pbjTQ9elo16OTxW2t80F7nh44GP3Q3yNHbpERfs2hpDT7o + qfdGTx0xYj0xeaM3Bpv9SID9MdTM82oyoa1Kh6oCFX/TjySN109fj+M8jeXjGMZqIQCnZfogM88fucWq + BfH3cwKwJ0+LJJKsMMZZK2O1mXNQ7EtqZiwTONZmI8YlvhUisIPzV5hLuumRLbGv2ylKPuoRFa5HTJiW + fa6WVgEJi49QMhYrGZuJWSP8kcI2KVyIhozdYZzXguARW+cTJxVnaSSht6aQ87hI9znT8zUjaovNaK5d + WAEsBOCWWnIMchFhteVBKC2wkbCakJWuJ2mlZfL68kko8y1I4/PEVJ5jvG5hBXB1BsYmu7B85RT6BlqR + lp4Ag0nzqQDs6+8Ha4ANOXm5mJ1bgmOnTuOKWPX7wCO4fP/Dkl267xGcv+cq7rp8FefvfhgX7nkEZyXR + V6z6fQhHTt2HA8euYN+RK9h/dMEOSnYPDhwRdgn7D1/Ern1nsWXnMWzYvA/r1+/B+g27sG79dto2bFgv + 9v/dKu0BvGHDBqxZuQbL5pZhyeJZTI5PoLa6GjGRUdCLFcDedwTfz8zXm9dCEyKwvy/nGDGA3SZHbLQd + nrQwxCe44CZ/MBr94C/nZ29/Ts5WQz4nykG7OTeFaCP2AU6PUCGT8TyTMSCD+TYt0g/xjPFhYsU4P6fj + 55WMVUr1gqCrNsgkE8KlhtxHzHMx3zVivkvmLZkQUyVB1Sr/F9Pb1GyV/N6CCPx5AfiOeZN/yoT4K86f + 7y2UhpZJ5sfzkYznI7VCGNbzfGze0opga6Aoa7dgYm8zLXmaOF8DsZHFoYKdfMrqVEmrg8W5iz3PfPl7 + vkJk5vHEa2IlsFXc+HtbAA5n/BYCcGyyFRHxBoTFaCURODpJvOZAdKKdsVDH35RL+/2Kvvl3kfd/iL40 + 0X9axke9UewD7AuTlXHU7Mex85HEXzG2Wh3fFyb+mON3pPLPtx+LctBOcsdgtwaRYeTtURZEsQ11MS47 + FAi0kadayWvZBgaQy3LOixs8pJs8GK/FDc+hLrEK2BfhxEfhYr9Yjns4MZJY3RTCXCBWmYqVpBGMI9HE + EsmMKcnMoQuln5lrbwvA0g1XtDRihcJMEyoKHNLqD7HaQqwIEPuCpsTwe4zlKcxHyeJGJMazAsbqylI7 + 6mqCUVlOrFgagKoKB2pqgtBQH46a6lCUlQYhn8fz8DiuELHv3AKWEBbIx+LGJbFqKYa4NTfPhhpRFrM7 + BiPjyZidTceSuTRaCmaXJGHRTBzGxyLQ1xOErjY7uluJO3qDMCVE3pkErF6ahhVLPJifTsTSiTgso62c + ir9tCVg5yXYyDmvG47BKCMID4ZjrCsaiFiemGgMwVm+RVguO1pgwXmfBkhYXlrW5saTeiekqq7T6d6JM + CMBWjJeaMVbCzxcR8xSZ0JdvRGMKsQ7zmxCAk9nfSaGif+Xse7EnLLEUx0Os+g0RmMsik55LovD/YoGc + l5JYzM+Ec4yjiSPjmLdjmb/FamBRGlraworjHMZjhzuJk13+iAsi9hbln91KxNBXIojnIjm/BM6L5GOx + AlZgOyF+hvI3wnkekfS3SOaNSCeP7eT58jgx9Kd4jpGoxJPH2FKeqEJDugFtOVZ0FjrRWxZM7BJKnOVC + U7YVNWnMC8la1CZq0ZCkRlMCOUiC4O9+GGaun87UYiZTj3FixyEeq5/YtCvJH+3ErU3kNQ1xMjQT53YQ + 1w6kKDCRpcc88dQqYvX19KU1taGYEKsS44iXiSUaiHPbiYN7khQYytBhJFOHgXQl2hJ8yB1lKKd/53IM + Upg/E2ix7KeYAF4rcU4Y554QgcVNjqJMdgqxeWY0OU6CTdrbtyjJibw4K/mQTRKAq7NC0JAfhfq8SOJP + vbSFTWqIWhJ+MyNNUpsaqkNSsBoJoiw7+zMsgGMk/pfiXLXxd0yMFSbGMiNNiL82mpvviZW50upf5uN4 + xvLEKCEAG5HF+JSTaEN2ghWeWCNxsZr4WC3l8GjhU0LEjRQrgdXEWMyjtKRYA1sDWxNzvJ7+oqG/aKQ2 + IUKHeAkD8Dvie1FCbBZGDBBLDCD+4CWPS2HfecglBf7MJgbPpxVFyVBFTNqYJENrqgydad7oSvNBf5Y/ + Joo1mC7TYrJcg5karbTqd04IwK0GzDXpMFWlxFARP59FPpNB3MTv9GUpMJgtx0iWWGQhwzhtyiPDbJYc + 83kGzBfbsYjxp9djRjUxZzbjRCL9NpaWTF/PpF8WcI7VMGZ1itXkHjWms2gZ9Jt0X4wRQ4/x+IsqzZip + tUlVeMQq/+FGCwbribVv7wXcVkaeUKlDP+f9cLMNY+0OTHUHYclAKJaNRmLleDRWjkRJ29rM94Zipi0I + 4/UOjFQz9hSYUUdfbkg2oCvbJVVgnKpJwPKOTGwfL8PhZXW4tK0LVw8P4smzo/jChXE8fKoXF3Y3YO/K + Yqk08rrJXOxdVY/LB8bx+F0r8NAZYptt7di9uhpHt7Tg1M5OHN7UiEOb6vm4DSe2NmP3igosH0nHWEs0 + eqvCMN2ehnXjFdi2pAk7l7Zgy5J6nm8+Bupj0FjgRGma7rbgq0FhiijrTnwXL0dhohxlHg35hhaVxN5V + xOI1nEMNxGlNnKftWUYM5FoxnMX45tFigMfoiVWhm9ZBa4pVopnX3+wRq8OJe4ntOkvs5DIOTDZHYvVQ + BtYMZ2HXXDnO7ujBgycW47Hzy3H34Ukc2tCOjdPlPO9ibJkqx87FNdizpA6bRwsx35KIqepILK6Nweq2 + FGzsycC24RzsnijAtrEcbBrNwu65IkkAfvTEFJ65sBQvXFmNr96/TjIhAi/YejxzaRWuHluMM9sHsGO+ + AUNNSajOcyKd5y5ulJIqLtBEHBUxND7YB54YDQpSzSjPdqKlPAqdNbFSie2R9lT0tySgrSYcnfWRGO1K + wdLxIuxe145zB6Zw+fgcDm0dYM4pQ2t5GHISVEgO9SZ3JaaOlaOI8bG7Lhp9ovxqYyy6G6PIP2Iw0BaD + oY44DHclYOlUAXOX2PM2GxODHnKUMHIYA9IZP4UALPYATk5VSvzAk25CaUkocnMciBcCMPOBuPHMQc6X + nW3H0FAxjhxeitMn12DH1nFMT9agvi4BJUVitWcEmhoS0dSYRMway+dRKC2KRH5mMNIYc9IS7JLoW14Y + i5K8KORlhCAzJRBFjIO9bdmYn6rG4rEizI8XYMPSckn8FTcqPHhxFk8/tBZffHANHr20FA+dm8WFQ8M4 + sFGsjCyXVgFvX1WDA1vbcWRn32cCsGRd2LyyAWM9HtQWOVGSvVACetVcLbasbcOqJTWYpb8smSjB/GQJ + lkwWYbTXg0GOg9gfeKgrlfxN7AscgmLmKA99PJ7x4Y74K0xUoSoW2wO0J2Lj8jpcODaD++9ahscur+b5 + rsYDp2Zxz7Ep3Ht0Cvcdn8EjfP74XfN4+vw8/WwZnru8FM/xup6/NEebx5cvz+MFvvbC3XOSPU975tIs + nrwwi4fOLsbRXf3EJaVoqI5CYpyWvG3hpmoh1As+Z2U+Elw9KJh5W+xFm+lCRk4QMrODkJXjRgafJ6UE + IIFjEs2YHhKuRRDjeaAQgN1aYikVLGIPYJMMmtsCsI5Y1GInvw81ISUtFBlZ0UinJSaHIjoukMdxIiLa + irgkO+qbM9A/WIK+/jy0NSWjvjIctSVB0n6+VcRs1czzlXkOFNHX8lK1KPYYUZ3vQKsQXasiUJ8fiEba + SFMi1tDvt841YrozE62FQWjMsWOMr2/l3D66oQcntgzg+JYhnN09ibN7J+kTfZK4O9mVgYmudKlywZGt + g7j/9Eo8fe82yc7um8aa6UoM8DitPLc6IUjzfIrF6tRMK7m8A3VlofSTZAx2ZqClOgalnA95aWZ+xo7q + 0jA0SeWVo1CY5URmsgXpCWKvYCf9gPMgPxRiz/ymmnj0d2Zj0Wg5Nq3skITZgxsHcHTTAC7tncZDR+fx + 0KEluLJ/RhKDj63rYgxqwOrhIsa3BlzcO4FHed4PHl2OB44slez+w/M4v3cKB9d0Y8dcCzbM1GHDbAN2 + rGjH4c1DOLl7Cndxfh7eNYmVi+t5DWloqo7neQUiOVYt3RQWx5zvSbJwLjqJtZ3IZ0zKzrAgM82AVMbj + FOKojDTGq1wLivJtnKti1a4ZRcRjFcXEaG1J0rxob4hEbakLfYxfy+mP29a0YPOKJkz0Zkl7FRcT84ub + VLKSNMhJNZADsP94jDy2mcnENvHEHeQO8YJnMo/k8fOiDHcuMX0NfWF+pgInjyyGV2uaE+XhapS4CMII + UhblBmItg+GW6hDsrgvG3io7dhZpsCVDhi0eLxzI9cK5Mi9crvHCAw1eeKp9QQD+4WI1XltpxNsbTPj7 + ZjOubbfg1k4rQPtkuxXvb7binQ12/Hx+QQD+8ogeT/TpcbXXgEcGbRCloL84GYInx914oNeGi+1GnKnX + 4FilAodL/HC4yB8nipU4X27AfTU2PNoUhGe7QvECE/9L/UH4ak8A/qPTgJc6FPhylz+e6fXHYwMKPDCs + w6UxE05PWXBs2oL9k0bsmtBi55AKu4cV2DehxoEZHfYt1mDfEi0Oz5twaqUFd6214e7Ndty/w4qrO814 + eI8Fj+6zSgLwUwcceOrQggAsykALAfj4Gh22TLP/2B9D7Jte9tFAuTdBlRGbe93Y0h+GNe0uLK2zY67W + jWVNMSQpCaiJNiGOZDhIxoRGAi4E4KIIkrKkUNQyALSlMnklBqE9yoxGgtg2Jr4hEodZtwyrCKh3x8tw + MsMHV6v1+OqACz9dHoW3tiXjr3s9eP9QJj7cl46P9iTj2p5EXNsbhWv73Lh20I6PRXnbEzZcOxGED466 + 8d5BK/66x4q/bHHidyt5nHEX/qPFgasFepxNVmFPiA+28Le3MgjuYuI9myjDFyr0+HF/MN6aCsVHsyG4 + NR+Em7MOXJ8Lwp9nXHzPjkeqTdhJoCdKQFcRNC8IwEqSXZJkm9/CXZYMiHaSZqddARdJjWgtVhJ0ky+s + tAAzybTRG6Ek4VEk6skk6PkMyjX2hZV5/SQNYyTGi9gX63LU2Fqiw/p8BWaSF/anbWMiqSYAFauAU0ms + kgJIuBxaxAbqERVkQEQwSXxIAEKCLSToOkSTUHl4jWL16haC4SembPjJ1mD85WgoPj4bDNwbDjwYjo+v + uPH3i278/lgg/nOTFc+P6XCmxAeb+b2lTByLmTQ2MKGdzPHGk81qvDJqwusbXPjgdBxuXU3Bjecz8Mn3 + S3H9N/W4+U7r5wTg5tsCcDHwgwzgK/z8I8G4dsGCG6cNuHFOj4/Oa/HhZR2uP2TCjScCgGdFCWiOwZdD + cPOlMODlGOB7CcCP4oD/FC3te7HAK9G4xfevPRWA966o8M5pP7x1xBtv7PPG63t88McTCrx/nwbXnlTj + 5osGfp7H/bY4Hn3nS9F47UwgvrLGgDPdcqwrlP2LANxLn+i/LQC3x7P/mLyF+FtG4F9AsJPDPslj8ixw + qWgEshyDoTALVsTZsSvNhWMM8hdSzLg/RY8nM414JteIJ3NVeCjTB3dneuNitg8u5MlxNk+Bkxzf4/kq + HCUxOezxxTGSm1MkJJeyZHgw3xuPFnvji+UyPF/phS9XeOGFEi98tdgLL7P9Lp//qN4L/8n49eNWL/xy + wAu/X+yFd9b6c74Yce24FdfvcuDGfW7cejgct56Ixs0vxOLWc+zL59mHL/DxSzG4+ZUYfPxcBP7+eDDe + uScAfzhnxu+PGvHmXj1e2yrHr9b74L/XyvDzNTL8ZJ0M31/rjVdWe+PldX54dasCP9ijwi+PGfDbcyb8 + /m4L/viADe9cDcTbDzrw1hUrfnXKjK+s9Gc89MZhxpMN6V5YSbK0LNsPs7m+mMmVYTrPC3OFXljF69pW + xT4aUOHxKZ0kAL+8yorvrLHhu6vMeJWx+d8F4FeWGyX72qwJz45o8USPAo92yfDFIRleXSPHGyfN+OfD + dlz7ggU3nzHj1rM2yc8+5PX+4Z4QfG+/E1cXm7C1zo+EbkEALhEEVIg9sSTzfF5I32hNXRCAzzAWf3Nn + EH57MnBBAL68sPoX9+iAi9rPCcBq/OXIggD8xm5/moK+Kb9tvrfND7/bL8c7J/X4xz2BuP5UFP0+mfMl + H/hVOfBb2lu0P1YCb7P9QxnwuxLg9ULgv8Uq4XTceDUFH30tEX9/LgZ/eTqEfe/Gb+9y4id77PiPFWY8 + wRx1vNYH6zIZR+jDlYw/uRqa3he5FhIEqz9qXf7oCFNhNFaHuSQ9VqbqsDZRiQ1xjAO0PSQBB1PlOJqp + pK8qsZeEVwjAq9g/8/HeWJRAAhynlATgzig5miP9SZIXBODcIC/GSy+pBHQqY1xmqBeymNBzouVSeefc + eCUK+ZtlnDNCABYrgCvTbZIgnJ+g42eUSIvy+RcBOCXGF6lxfgRVcqQzJosSgqk8jrAkUR6acVSIPik8 + H0GCCqMVqBLloxJ80J/ujZV1KmzvUuPwqA4nZ8w4zLy6rkuF4TIZ6umfORx/sZIijqRGrGYQpeyiGKPF + nzmSMa5Kwi/fT2QeS6Kl8vV0xuYs5pYixomGMF+SVy3mMi3YRBC1v9CFMxVuXKq0494qAx6r0+O5OhNe + qrfia+UmPJflj2c591/M8cIrnNs/bZfh9TEF3lutwcf0HRzXAhcYI68wdj/EuXuVufChJLx7KR4/3OLi + OOtwoESGpQkcZ0kAlqMuVI6aMOasMD9UhXujOlSG6hAZqoJlqGTurRDG8al0e6MyyPtTAbiNr4ky0KMx + PpiM4xyN8cPiWF/Msl0aJ8cqksxV7OtV8Sosi1ZjEX9rgjlx2q3ETKgKiyNVmA7zx0gQYylzVpfbF82h + Sv6eClmBCmnFb5DJB06j+MPRGyFmb0RafSSRXay0Fn8ii/LPYk9ZsQL4jgDsSdYQZBoJyG1oLjajo9SA + rkoNuitV6KxQSn+uNBNfVeXQ9zx+KGFMLctUoCyHv53L72bIkZPsjUzG+Kwkb2QkCpMhXdhtsTONPu0R + f6ZyzmdE8bPRoky5H+OAL/L5+Xx+tphWSitjjhACcEWKL2p47KY8DTp4XgMVTgyU2dBTaEBnjgrt6Qp0 + cO6IMnYDjPuiksqSGiumy/QYL9JiNF+HkXwT+vOs6CXRaCeZqE42ozTejIIYM+IsvnD5e8GtoN+ZxA0V + fvRROUqSdKgUf5wUBaCj3I6BGhdGG1wYq3NigsefqjFiUR2tgb9FXxupNEgrgHtL9ZIILEpACxG4o9SI + +lwlSsTqWPZBNvsik20GfUnqF87xFOKSpAQaH8eyL+4IwKLss9hPUjKpZLAMNidb8TrH3e72g5N+KISR + QPqGKCMVSDIZEPTZPkJa4iKxIvDOCkCtWMFGDGm1yklU5cQ1csREKpAY64/UZI4h+7MwT4nKci0aao1o + a7Who92J5iY7XyOh5RjfWf0rBOBozgchAKcl+iErTSmJvrkZWrY0jx75WUYUZJOA5OolEbi8UEsio0Jl + qQLVFf5oqZejt1OHwV7jbQGYfdemQ0eTFo3VcpQWCdH3tuUvtEIMzkpjH6YwnrAtoQ/WlVvQXm9HT3MA + iZf4o2FBBO5t1qG9Tom2GjlbObrqFOhtUqO3USGJwT11Puiq9UanWCVc64W+esaxel/01PiiV+x1V6NH + Q4kQTxUkTr5I5BjFJfgi5o4JAZj5Ky3TD5m57L8iJQrYd0WVekkAzinRIy1HQ3Luj+AwGSyMbUIAFiW5 + xX6n1jvi722z23043j5wSK03nHzf5ZAjzK1FZBixJ8c3mvlkwTjfyclimQ9iGYdiGRcTJOF3QQBO4vMU + xnRR6jU/VbUgABeQ8BOzV3MchH0mAotVwWYSVo51rYsEOkiy+qoFqy4N5FgaJHKakapBZoYOOdkmFBTa + kU/LyLYgxWOS9rZKzeDn67IxMd2N+WVj6OppQHJKDPRGFWS3BWA/hRw2ewCysrMxvWgGh4+fwD33P4S7 + bwu/wi7e+zDOXX4Ip8/fj1PnFuzomftw4Pgl7Nh/FzZsO4GV6w9h2ZqDWLH2EFatP4INW05i8/aT2Lrz + DLbsOIGNW49h7Ua+t24vVqzahmXLtmDZ8k209bR1WL58DVauWIsVK1bTVmB+dh4zkzOYGBvHYP8Afb4C + 0RGRMOg08Pf1+T8FYMl4bUpyNbPFDxHkaEmpofSVIASRPxhMcsiFmOrLa78tAGsZd2yck27OTyFiJLiY + u2N0yI8TpkautEUDfYw5I5jvC4FBJ+YxMYZSK4OSPEcSgDnH74iZd8ora013zGdBdDWKz8mgtyk+Z8r/ + IQB/vgT0HQH4jvgrTBJ/NT7/qwDsK4yP/cVqWav3wr7ATrH69zMB+I4gbbRx/J1q2MmvrE4N54OfJFD7 + qfib/B2f2yKwVAKPXE7sIWx3KxAUrkZYjEESe6MTrXysl0ThsFg9IuJNiEmy05wIIR+2B/E3Ocf+XegV + Jl77314XeyqbLP6wsH+sAUpYLAqYTX7Q8lqFAKwRMZSmE+clhF+OgSjJLVb/ihXBdvLSQIcCIZyvEWEG + hIcY4OZ1OokF7fQLsVWREIBd5LBBdjncoiQ0TYi/kgX6IJQWRh4URuxzpxViYzBNrB4VOVzsdxgtRMko + znFiuBRx0x6xlRCDhQgsLJmWQawp/jwVZRRFWb3aUjdK8wKQzXgg9ga9IwCLUv6pCd7Iy9SinBigqjwQ + xYVWFJBjibaszIFKYqzSYhfycgOQnm5GfKKWY8iYxnOSVsGIljjNwVwVFOSL8AgFsvnZmrpwdPUmYmIq + g3OuECtW5tNysXxFFpbOpWFyIg59PSFob2b8bnNibCAMyxanYuOqPGzbUIJNawqxdnk21i7NwPr5DGyc + T8f6JWlYN5uCtTNJtESsn6ZNJmDNcDSW94djvtON2TYXplsdkhAsBKNFjQ4saw/Byo4wzDe6sKiarzNv + COF3vCyArY2tY8HKHRgusaPZo0JJDPuRuU4IwIls4xlfI90+0pgI8TeYeTnURqxFn///EoBFuWjxGTGu + 0czbdwRgcTypPDTfuyNeCOFfrOSNcckRT/wXy7wezVwgtqm4IwALMVgIvsJC6c+iFHIoMV+4XQgiah5D + yXPzk8TLMB5X4MB44r8M4ovCGOK5VD0as6xoLQhEJ32kuywUrYWBqPaYUZagQUmsGmW0Sn62lhihOV5U + 7xIrM9WYZl6fzjJhPI35O0mNHuLWNuaa5kTynjhiYeK8CnKSSlp9hDdaiHMHM/SYzLNgcYkTi0qd6EvT + oj5cJlVhq+HnWogHOxIV5BJ6DGYSTxFTtDDP1goBmL6dx/5PJQcQ293E0fcSOFfEit8o9pvY+ktcnxCA + RQloT4QBeQkBKEoJQnGyC/nxNtqCCFya6kJVptgDOBTp4TpJAE4JVsETquNzgyQAp/FxcohGWgUczTgW + buf8tPvCzdbGGGsUc17PlmbhYyvt/xaATchKthEj25GdZENqtF4a9xgh/of6IyLEj3jKT8rpYo/f2Ai1 + ZHERYusHjVT1IzpMzTm/YHGhakkATozS0jTSb4gbwSTxV9ywK8Rf8olU9qcn1gcZcd7IIk4TVZjyIrxQ + zFhRxXnfSPzSnERewraV1pEqw1CuP8ZLVJgoV2O8muNcp8HiZoMkAC9t0mOmSoWRQmKkLGKmDBl6M/xp + xHHpfhhIEyu4vTDEY4q9okdTvDGVoYEo/TxJntZO7llGzJLJsUvkmMXSxA3M2ZxboqpVI8+tn/4zQ/w4 + n6PD0mw1lmSrMJunxuICLRYRV09XmTFZx3lL7D3ccEcA1kgcpbX0jgBsxlDTggA82eXCTE8wFvcHY34g + FPN9oZgVz9tdmGoJxHitHcMVAehmrKthn9XS39vTAjCYH85YEM1YkYJN/fnYM1mKkyuFCNyKBw924eFj + vbj/YDvObavB3qWF2DSRiVVD6di2uAynt/TgvsNTuPvgGMTewZsXF2LPykocXFuHXcvKsHNZCQ6tr8HB + NVX8fCHm+1Mw0hCBLsbnieYkrBsrx/a5Vuxc2ox1kxWYaEtFG9+rSDdKnMnD+ZRFrpAb548c5oBc4rw8 + csriJAXKkxWoSFWjOl2FBs6hZvKYFlo3+d1Ing2jxGrDHh05tGZBAI4hj4rVoImP6+KIpfl6I3+nmZ9r + KyT/KWL/1DBmdqVi1WAWti0qw/FNHZLIfe+xGZzc3oft87VYPVooCcBbpyuwd64eB5c1YddMOVZ1esiV + YjDXEIeVLYzX7alY3+vBpoEMbBjwYE1/KrbO5ODYhnrcd3AIj52YxhfumsOXLq3A85eFrbxtq/HFc8tx + 9YgQbYawd0UrJjsy0VgchpxEsVhH9qkALFYDixgaR/6dGqVCbpJJKgPdWBKO1oooaR/Snvo4tDMnVoub + lPJ5nVVhmOK5bpmrw8mdI7h0aBEObezF0uEi8sAgZMcQV9NP04irM6P9pW20WkqD0VUTge5aWn0kuUUM + +pujJRtoj8F4byrGepMx0BmHrpZI4ugAciPm3mQ/SQBOIG9KSGR8Z8xLYSzOy3EiI92CGM5jF+eFnjjD + zryQmkpO3paJTRsGsX3rGJbRN3o6c8mJguFJNSHTY0VRgRslhSE8RiAy0wOI1e3kljwW44a4cTSNsbA4 + JwKF2eHI9riRkexAbhrxfk0iJgeLsGikAKs4tttW1eLojg7cdWgAD1xYhCcfWIWn7l2Bq+dnce+JSZza + 3YOdK6uZd/OxfCKHebgY29fUYc8G+uv6Vmxd3XTbmqX9gHsaY1CcQS6UQh+ripCEZiH+ina0LwsjvbSe + dAz3pGGgI4l9lSyJwIOdaehoiJWwi9hvOYk4R1Sni2MMu2OiDLSocNJRz7w/XYoju4dx9sg07j6xBJdP + zOIcffTUniGc3j2Eu/aN4crRaVw9PYcn71qOp84tw1Pn5+lr83jmriWSPXuefneBdnFeEoSfuyDeX4JH + T8/g7iMT2LOuHdMDeeSwoYzLKuJD5gDmdUkAZg623t7OJ9Dlj/BILWLjzeQAxKVxeqlNSLJwrM3S6+J9 + N8fGFawhh9f9DwFYLbC+wNJGH5iJRwPdesQnBSHNE4609AgkJAQjOsZJsyMy2oJY5rWK6iR0dOWhqzNr + YQVwOf1brLLNtaMi14ZKUT2AmKzAY0BushqF9LmqnAA0FQehvSwEdfxcY64DQw3xWDNeii2L6jDTlo62 + AnJCfm64LpaxqQR7OLf3rmrFwfW90srYkztHsXttJ5YMFWCUsWqkNQXznDcnd43h4fPr8ewDO/H0vdtx + /uAirJmpwgBjXDt9QezhXVMQhDL6vdjCqDjbjirOtZaaaPL5BNSIGyLSzMhKMqAok1iyTAjA8WyjkJ/u + gId9mhprIDe3oSCTx8kN4fd53Gpiyo4szI5VYvOqbhzcMopDm4ZxfMswLu+dwYOH53DfvkW4tHsCZ7cO + 4di6bsbwRmyaqsCBVW24Z/8MnjizGo+dXI1HT6761MR39y5vw4bxKqwZrcSmuUbsWt2FI9tGcWb/Ylw6 + sQonD8xi44p2jHTnobMpDZWFYfAkipu3ydXpM2n0AWkFMONRTkYAMtNMSBfVBRIUSBYrgG8LwNIqYNFm + iy2ezCgvcqCrOQ797UlorApBeb4VvXy+fKYMO9a1YsvKZox1Z6CB41jg0cPDeOUhJstK1iKP3Fzaa5lt + KvllQpSS5yMjvvBlHNBxflmQlcJ+TNHTt4Mxy5xz/NBieHVkBKM62kAgJ8oaEgxwoFaXBGMzycCuajf2 + Vtqxu0SHnfl+2J0rw6F8L5wp9cLFKi88UP85AXhWg9dWm/GnzVa8v92GG7sCgD12YK8dt3bZ8dF2B/6y + yYn/EgLwpEESgB/r0+KBLi0e6jXjsWEHnh4PxlMTIbg64MTlLgtON+lwuFKBvQXe2JPrjQN5fjhVosWl + SjPuq3fi8XY3vtjrxjM9TjzTYcKzLWp8sdkXT7Z64+EOb1zp8cWFfjVODulxaMyAvRMGbB/TYtOoClsG + FdgxomDSV2PfjA57eP57lmhxcN6A48tMOLfWiosbrbh3qwUPbDfg6k4jHtltxpP77Xj6oPNTAfjxw0G4 + Z0cAjkkCsB+WdBEUsV8GKwmQKmVY2qLDtgE3do9EYCuByermQKxoDMLy5nDMMmnWxZiRQDIe4u2FCBLi + ZIscxdEO1KZGoC6FySw1HO0JnLzhRjQw+LQyEI0w+S0jORRC42GCsHvy5Xiu1YzvjAfh12tj8PaORLy3 + NwkfHPbg+iEPru1PwfWDifjkQDQ+OejGtUMcj6NmfHzCho9PufDBCRf+dsSC9/ZZ8bcdQfjzhhD8dkkY + ftAXjC+UmXHZo8XhcH/s4O9ut8loXjjKwPxwoRrf6XDi10MuvDcZiE8WO3F9hseeceJPY078sNOGhyoM + 2JauwDBBTQWTdbq449W5IAA7JQHYHwEMfnaa064iuSaZZmshoTaRmFtNJNZmOYKM3ghjsIxl0Mzg4zKx + 8s7li5EgH8wyYa8gUFqbQh8t1OJQpQH7CHBXE7yOx3uhl8C4meCzmIAhXRKAScwcBBQOAyJcBoQGmeAO + tiHIbWZS1pBMEdTzGoV4uYpA+MFhA35A3/3TETc+Pu8GHggFHg7Bx/c78M+7HXjntAO/2mnFNxfr8WCd + Hw4TIG/n5Nsc5IUD/P17Cn3wfJsK3x3T4fX1Nrx/KgI3H4rHJ19KxfXvF+H6b+pw452W/0MAzgRejOPv + ufHJeTNunNbj1hk9rt+lxUeXdLh2vwGfPGrFraec0urMW88H4eZXeX4vRwHfjwf+Mxb4MVthP+RxvitW + AUfg2rMO/O0BLf58Xo4/nvDG7w7L8OZBH/z1vAbXr+px40k1br3A3xIC8HciebxYXP9SHF4/48aLq004 + 3u6H5dn09QQvdNMPFwRg79sCsC/aSRAbSBDLSejEHsw57M9MJlNRhjvDSsJiEasoFegNNmEuxoYtKXYc + TLHgbIIa9yUp8QyB7UsFtAolXqj0x/M1cnypXoVnm3V4mmTl8RYDHmk24f4aPa5UaHF/hQYPVSrxRJ0S + X2pW4qvtKnyzU4mX2/zw9QYZvlbthf8o88I3Gbu+y9j1owYv/GezF37K+fqbMS/8YZkv3t2kxIeHLbh2 + xo5PLrtw82oIbj0RiVtfjMGtL8Xi5pejcevFKNz6CsePfXzra6G4+aIbH33BifceMOMvF/V4+4Qeb+1n + LNzsi/8Swu+Khb2Vf7TaC6+ulOHlFTJ8Y7UfXuFvfXeHGj89oMcvj+nw2lkD3rxkxlv32vHWFTvevGzF + fx+34svzStzd6osdJGNL2MdzqQoszlJjMkeJ8RxfTOT7YFGxN5aX0d9qvHF+QI1HpnT48pwBL6+24NU1 + VkkA/t5KE179nAD8LbYvLzfi68t0+MpiA54e0uDhTjnubeK87mRMn/PBLw9p8XchAH/RghvPmnHzOcb1 + Lzrxj0cC8Tv2zyt7A3DPpAYbqrwxnOaFOhLOMhL5olhfEnEfFMTLUEI/aPMs7AF8vE+JF9eb8avDjDN3 + 8Zj/QwBW45+n+ZvH1Xj3mBZ/3L8gAL8pCcBK/Jb2+l7/T+13BxT4yxkj3r83iOcVA3wthT6fC/yqBHij + FPhjGW79qRy33injfKK9zdd+zzn1egHwy1zc+mkmPnk1Df/4agz++lwo3n3cjT/c48Jrx4Lww82BeGGx + DVe6Vdhb7osp9n0DiUeemmRWK0OWyRdFjF11biW6SOCHo7WYIcFaEi/Hqnh/bCbJ3Z2ixEGPCoc9ShzJ + UOIwba9Hjs1J3libIMPyRF8soa9PMonfWQG8IAD7SgJwDueNEIDTGEfSGb9yIn2QTwJXmEgAkaRFERN/ + CcFFmcdC4mhlSxCQbOBnNMiM8kcak79U/lkIwIJU0sSKkXQSkqxkARwIRlJUBAj8PMFiKs89IVKABvGn + oS9y4hiz43zRluSD4Uw/zJX6Y1+fHqen9Lh7uQEPMpbdtzEQhxYZsYw+2lNEks98lMG4mchzjhOl7oQA + zLgrSj7H8VoSXOKPcBmJlp9Uat8TRLLl9Ea2QybdJFIZ7I3OODXGM6xYme/AjvwgHMx34VSRE2eLjLhQ + qsLDNRq82BaAb3UF4bsk+N8s1+EbJf74TjVxSJM3ftEnwxsToqS7Ah9uV+LGEQNunWV8vByBWw8k4ZMH + U/CPK8l463QiXlkTTAxiwM5sbyxmnhgI90ZHuBz17LsaWjX7rzrSW/qTq5I5t4IEUfyZVSaM11guBGC3 + D+p53o0kqG18f5DfG2M/T7I/J0kkp0n2hM3GqDEfr8d8nAGLY4yYZk4fJugfcOrQ79Cjz6lFn0uJbjv7 + nPFS7B/f5PBDtVPBvlEi1a5EuJl508i8SdLgZH4MNvsizOIjib9iH7NQ9qXYVzYoyFvau2ZBAPb5VACu + yjOhNkeDhlwFmgt80czc1FTIc2fbWOSHGmKsyiw5zR+VjDGVBWpUF2lRxbaErxdl+qMwQ05w7kfg7itZ + dgrnQ7IMGfRpUfo4nf2YEeNz+w8MOfI4HwqZEwqTvVGc7IMS+lMp21I+r0jj9WUo0JinQ1uxGb1lDvSU + WKV9qlrE6/xcc4o/OvmbA/lqzFRZMEP8J1YxjPD5cB4t34jBQiv6BIDOd6Ih3YZykrBisaqCucbl64Vg + hViRwPNzeSMrzBuFcQpUputQn2dGU4ERXWViL6wADFXZMMrjj1fqMMXcIkpAT1QbMFSm5XlpFgRg2h0B + uJNtc4GW888XBfT9HObDLOZ80RcePhblN5MZA5OECBzvK+3JGyUJwL6fCsABHGsh/n4mAAvxl7hHWLBo + FSSPSjhJJB1uNaz0ByGoCPFXpZdJ5VTFyjp/lRdUGm/oDf4wmxSwkWiKksNhwX6Ipk8mcE57kv2Rm6VE + Ga+htsaE5iYbWlvYZ/V2lJUYkcb+TuAYihXAEYxBUZzL8dEypDJmZKapkc0+y8nQS222IJkk7rmZBpId + HQqytCjMUUHsB1zMvFRWzLFjzu7pNGCQGH+wz4w+zrWuNh3am+mDNYwvzMelhV4oESbEYPKLOwJwegox + A7FUQZYC1aUmtNYEoKuB1mimsf9bjOhrNaG9Vosm8oSWKjnaqxXoaeJYNarRXc+5VEffqfWl+aC71ht9 + 9cQntO4aX3RVK9FWzrHjXMihH6ZwnGKZv6LjfBDJ/BXF8YrmmMbTv1MzSaRyGTcL6ftlnEtVehQS22YV + aZDM/oyM80Yg48PnBeCFPZl9OA5+CybEYKs3bDQrfVHsG2vj3HXwvaBAlVRKdkEAVksWRU4WHSr+OBZi + As+FPhNHSxACsCgBHeGPRBHbGadziQuKMtWo4lz4TADWoIZzVwjAd/YBbqp0oKnKgYbKQNRXOlFX6ZKs + vIhENVXsK+iLFI61x6NBbi7zCeNuXoEDmTk2pKZbEJdkhCcrGLUNOZic6cbs3DA6u+uRmBwJrU4OGXnM + HQFYrADOyM7i56Zx4OhRXLr3AVy+7+qCAHzvo7h45RGcvvAAjp2+GwePXcT+wxew+9AFbN55AnOr9mBk + agPaeubR1DGLls4l6OhdisHRNZiY2YTF89sxS1s0twXTs5sws2QjZhavw/T0akxNr6Ato81jemYJFs3M + 8b1ZzMwswsT4BIYGh9DX24fOjg6UFhcjKiIMJoMOKoU/FP7e8Pf1/h8CsI8wH16XP8eV8Tck1Iq45BDE + JoTA5bZAb1LCX4ipjDWihPT/EIA55omBfszNBhQnGmlCBFYhOcxHKv8rBCSxykwIjRpJ+PWl+Uhiqtgj + TPxhJEzaW9fCOU7/WTBfyXRmH8mM5E6fN0PA/z8B+M4q4P9TABYxhiZauZ7XRr8VpaBNdj+YyeWEGay+ + nwnAViEAi5J3es4HngNzlbhBRYi+dwRgYXLGLbGS2UBetrAKWIXgSK1U5llYcKROqnoQHKFFaLQeUQkB + 7PdAvmdDYIgaloDPxPHP24IAzP6R+s0bBvaNMDPPSwi/NocKAeSaATbGU/IQA/tbq2U8FTGU9qkY/G8C + sJizVmnOilKxKoQE8fx4LIe44YacNZBx2SXeY74WJvYEFvapAOxk7GdMDnX6SLn6TisJwMQ/brbhbGOC + GYuYp5KiGZfEjXuiYguxWXIUXxOrgW8/zkxSSWX1GipC0VIbJe2pJ1YD53L+piXwe4zlnxeAczzM4wVm + lJfYkZcj/ljWIluUh8uzoZDfy8myIpUYMo4YLJRxxsL8JFUyYI4yij9B2a82qwxOB887RI6MrABU10ai + uz8NM7P5WLu+Chs2VNLKsWF9KVatyMX0VDJ6u0LQXGtFF3PN5FAMNq4qwP4ddTi0pwl7d9Zi5+ZK7NhY + ij0bSrB7XRG2r8rF5mUZ2LQkDRtpm2dTsXlRCjZOJGDNSDRW9oVjaWcwZtuDMN1kl6p2SAJwWyhWtIdi + rj6QWMGOsRKztOJ3pMRGC8BoiYOvCRE4EMOlDjRnCBGUuID47jMB2PczAZixXAjAIQE+CKaP/rsAHPh5 + Y/842Yoy0GJcJQFYVHJgHA8PWhCAJUGZx1xYAfxZKWdp9W+QApFCAA4QAjDjghB/OacEvgsz00cMMrg5 + 99xmP8YM5gv6byh9WTx3MyYE8fdFZRhxw2UK8V9OhBxlSTrUMm435gWipTgYrUXBqMu2oziJuTuKeY+f + yY9QoDDcH+XECA3ErT0p5DPM7+NZxD6ZVoymGdDP43QnaNCeqEIzOUsNfauKubI03AvFzHuiwpfg+g2x + fugkr+hJ06BPCFPxCmJk5nWB7dnHTTH+aEtUojfdgIFM4ihiiuYkch7m3Ar6eGE4cSR9P5lYOjnYF2lh + Cmm1bwJjQ6zDVyqFHct5FCNEYLcKmTFW5CU4kJ9gR06smbyHOTlKrAwOINYMpDklATiJfZserpWE3zv2 + PwRgYm1JAGY+DmB/m+jrYgWwWcx7zn9JALbT710cH6kENPMxuUJClLjZwkisEoCcVCeykmycnzr6kBzh + xHDhxHCh5DthNPE4gvMmkj4hLJrXFkWLDhcriIjvXQpE8Hxi+Dj+UwFY2IIAnEAeIUTgRPZjKjFsOi0r + QU7cSQwQzTHneOQTu1UQs9UleqM1xRvtxC8dxFHtxDJtSV7o8cgwTBwzVqbCaJWS+FaF6UYtlrQYsLRR + j8VVKowV+qI30wud/GwXMX4X8VEXj9XL4/TxGGKf6AHGlH5i3UGxN3SmEUM5drQwdpRGkFuS1yXRD4WQ + 7yEPKQiVoYpj28aYNUr/mefYr8k3YS2x9+pCA1YU87dLyYto0+ViH2IjRsU+wHXEeMThHRVKtJTK0Vys + IGZTo6fGiIEGK8banRjvCMR4eyAmOp2Y6nBiWpSIb3FgojEA4/U2jBHTD5Yy9hCjVkWR00Uq0JpowUBO + CMaKIrGoMhYrmxlbejOwZyIfR5eX4dyGGlzYWoe7ttTg6Opi7JzJxrrBNCzvTsK6kRzsW1qHkxs7cWJj + OzZO5WP5AL8/mSOJvevGs7B2TAjF+di+KI+fz8CSzgSM1IWhp9SNsfp4LO/N5/dqsWm6Bkt6stFTGUku + YieHUCFFxCDytlRib1HOPYP9lhkmQzbbvCgf8hpflCcpUJeuQWu2uFHWiE5yuwFyu3HG8YlsC0Y85JWJ + anRFK9DBed4SrUZ9DPlcFHldrBJ14saQTBNa8gLQnGtFd4kL4w2xmOtKw5rhfOxeVocj6ztwlNe4g4/X + jBdhJV+/swJ412wt9s83YPfiSqxhv802xmK+idfVmogVLaKNZyyOw1xbLGbao7FiKAm7lhXj1NZWXNzV + jfsODOPhYxN47OQUHj85gydoT55cjEePLsJ9e8ZwdnMf9q5owUxXLlrKo5GXakJsMGMo4++d8s8ihsYw + TidHqpCTZEZZdiAaisMlEbipNAyNjHfVWTbGBhUKEhizsiwYrI3DqpFi7F/VgVPbhrFnZRsWdWcxJgYg + I4Lch3Eqxc18wMd57KeabCt9zoX2imB01oSjpz4KvQ2R6BHWHIXuxkh0NPD3qkXpWo5fttiuxR8pkvjr + wzzqTWPcivVHPM8jJUmPRMbRcOI+J8/fbBIVoLwQF6tFZVkMxobKMTNZi/6eQlSXx8KTYkYs/TU+WoUs + j5Wcy0aOZkJinA7xMTrmFmIQ5hqBLeIjDSjIDEV+RgjPIZD80yqtnqwoDEVfWxqmB3Oxbgnz7Jp6HN7W + hlP7enDp5CiuXl6Chy8uwZUT4zi3fwAHNjRig7hpYdiDqd5EzA1nYPXiYmyYr8Ta+QpJ9F2wCswM5aKx + PBjZxCEe5o6qIhdG+7IxO1Eitb1tKehsTkRrXRTxSQQ6mmLR3ZqAHsmS0FYXg+qSIHIPLfEOuRdzRDT9 + /46J/6LSeewafmakO52/X49ta9uwd3Mv9m3pwa717di+uhk7VrVg99p2HN/RjwsHJnDfiVncf2wG9x6Z + xAOHx/HgEdrRcfrcJB45MUmfm8ITp2fw+IkZXD0ygUt7BnF0cyfWzlShvymN/ehAZLCSeI85gPFfbEdp + Zk4QC9PsxLwOhz+CyMuDGadDGMfdjOvhEeRtMXrExBgQwfgfzNddxLMut4bcXQjAmn8RgMWWLmI7FMHh + jRbmnEANIqMDkJjoou+4EBNlR0Q4cXC4GRERRkSK3EbuVVWViIa6RNRURKCqJFjCeyVZZslKcyzSSmxR + /jkrXo48xoBSj9gn3IbGfAdqMi2o55wYrCGGGirA2tESjDcmoTXPiWZyvL7yMMaATKwbLcb6iXLsmGvE + wTVd2Le2C5vnGjDVlQWx/28v59F0dzaObhvBfadWSSLwA2dW4+SucSwfLyPvjuMcDJX2ARYlnktEOWT6 + b65HrHa1obyAnLPQzX62IzVWzVymRn66DZXF/E5lDNsIZKcyj0bTz9mvIr9mpxK3ZAfxu2GoLYsklkzD + 1FAp1i1tx+71/di7rg+HNgzgrh3juEg7s3EAx9Z24/CaDuwXJZxn67F1phoHV7Xj4u5J+sJyPHx0BR4R + dmwlHj6yHGc2D2HTZBXmGXeW9hVg3UwNtvC7+3is47smce7oMhw/MIuta7oxM1xG/86i/0Yhk/NUqvQR + pkRKgglZaTbOVxvSU0xIJddLjieGETeYcEwy0rQoYMwtFKWxOV53BODSAjuaqyPQzhhTRd5dQFze0RCN + uclibF7VxOtswFCnBzXFQVL55yRy/+Rof85xFbJTDMhLMyKD+TcpWoNY4rlIYrI4YhTxmihTncnPeETF + yHwXZsbKcGTvInh1ZYWhjkSrJoLJJFZHwBeAFYUubCh1YXtFIPZUBmBfmRH7S1Q4WOSLI4WfCcD313nh + iQ4vfHXYDz9cosFrayz48zY7Ptxlx629TuBAIM0F7A/Etd1u/HWrG/+11Ixv3RGAe7S4r0ON+7sMeLg/ + AE+MBuGpyVA8OhyEyz02nGrR40CFP3bke2ELwcjOLBmOFihxrtyISzUBeIDA/+EOBx7psOKRVj0ebVTg + kQYZHmzywj2tXjjXKcOJHgUO9muwa0iLraNabBhRYe2wHBuHFdg+psTuaQ32LdJh920B+MC8FkeW6nF6 + jQnn15tw9yYD7t2sxQPbdHhoh0HaC/jpgy48fSjwtgAcjLt3BuDoWh2TuS+W9nphotmL4MULY9VeWNqk + xo6hIByYjMLekUhs7nRjbVsQVrWEYLYmjEmZwZykO9THC5EknikE9CVxTtR5ItGQFon2NAbNhEC0E6w2 + kfB3EuBPM0ltIAE8kCDDuTRvPF6hwdfZXz+aCcIbG6Lxzo44/ONAIq4dT8PNY+m4cSQVN48k4sbhGHxy + JBjXD38mAH9w2oH3Tzrw92MW/OOgDf/kOP19czj+tDIKv5iIwEt1djyQqcOpKDn28nd3kwxt5TmIMtBX + Mv3xtXoLftppxx+H7Hh/0o4PJniM8QD8YcCO77ZYcH+pHptT5Rigs5YGij9g/QnkGThtJPu0AJLmAKtC + ModNBWeAWmoFKTcZ/WE1kVjT3ATiETqSNFqhxRd1THh9Qf5YQfC9jQl1LwnvwWwN7qqy4J4mB87XGrG3 + 0B/zBKtDMQSyTCRVJEXZVk4aHj82gADdYUCoQw93oBFOlxkOtgHs/yAG42gCjRISl0Ue+nq3Ct9ea8Pv + Dwbiwwtu4KEQ4LEgXHvIhg/vt+G98zb8br8VP1hhwDMdSlzMkeFYvDcORdEH07zwWLkPvtapwA/GlXht + rR7/OO7C9Qcice3ZBFz/XgGu/6YWn/z5tgD8YQdu/aMZeKcGeL0Y+P4dATgIt86bcPO0DrdO6/HJWS0+ + ukC7YsDHD5nwyeMBuPnFQNx43oUbXw3GzW9F8LsxuPWftJ/y+z+h/ThhQQR+JQrXX3DhH48Y8c7dcrx9 + 1he/OybD747K8P69etx6woRbT6v5u3rcfIXz99Vo4OV4XH8uEa+fCcULKy041OSLWV7bCAmAEIA7ea09 + Cd7oI/jpkQRgb9Sxz4sJ/nMJdDLpM6kkVCkksMmSEdjqfdBoV2MkRIsV0XrsiFXhWLQfrpBcPpOpxDdK + lPhukxzf65Dj+31q/GDYyD604jv0sZcnAvD1iUB8ZcSB5+lrLwzY8JUBK74xZsH3pm342ZIA/HKJHT+b + 1OOH/X74TpsXvsV49R3OyR82eOEnjA8/6/LCr4Zl+P2cL97dqMY/dhvwEefE9QtO3BSrfx8Lxa0vROHG + c9G4+UIsbrwoVpkK8TcEt/6D/fINxrevOfl+AN5/xIC/36PDu2f1ePuQGr/Z5I2fCuF3KX+P9r1lXniF + 9vV5L3xtuQ++sVaBVzar8P2dGvx4nxI/P6rGr88Y8NtLVrxx2YrfnOO84nx8fk6Pi80KbEhlPGFAnyEY + miQ5H8nUYDBHgeECBaZK6OflvthY442zA2o8PKXF8/M6vLzahO8yJgsB+Psrzfju8oUy0EIA/uYyA77B + xy8x3n1pWovH+1W4v9Ufd7F/7mH8fGaS575bib894sDHz7JPnjXzOkU56AC8d9WB315w4Bu7zDg74o9V + 5SSDQgCmL1Ry7MrEqgSSvBKC4HL6Qke6N5aUynCowwfPLtfg5/sMePeMGTcvm4F7PhOAr51T4YMzHIeT + avz1uBZvH1TizT1ymhJv7NHg9T1qvMa+el3YfgXePKDCO2eM+MeV2yuAv5pE/84BflUEvFmCW38sxY13 + ynDzL6XAn2/b2yXA7wuBNwqAX+fi5k8y8cErCfjbi2H46xfceOeBIPzhXAh+tS8M314ThKcnLTjTrMEK + xtkOxrxi+m4WQVsGQVuh1Q81QSq0EQT2BMsx6PbFeKg3lsX4YFuaCodJzo5l6XE0Q41DaQocSGMMTfWX + yv9uYL+sSvTDHIncJMmJEIDbInzRHMljhnujhOD3jgAsytNlCWLPzxQnCdHXgOJUEu10E8ozrCjPFHe8 + m1BAcpHNOZQR4YfkEBkSeIxkgmohAnti/ZAeR/BxW/zN5vnlCEGHcTM7TcfHOmTQtxKZV0TpHVFWTIj4 + ral+GMv1x8oqFXa1a3D3nBWPrjfj2V0WvHQkCC8cj8CVTQ5sG+V11HuRVJLsx3pJe78mBi2Iv8JimDvi + XAt/6ghLDVXCw37LZL/lBPmhwOWDEn6+gWR1MM2MRXmBWEfwuKcoBAdzA3GYQOlIlhJnivxwtU6Lr/W5 + 8MORcPx8KAI/arXh+w0a/KRNhZ/3+HJOe+H3097483I//HOTCtcO0NdOBuPWBcawK2l4/+40/PFsMn6x + PxFfnY/ApSYLc5QvptnHQ+z/rmg5mjiGdeyD2mj6dYw3qvlelRCB2acLJkMFx1qUiK4Jl6MxzA9NIT70 + BRkGGMPEnveTBGbjJOATJKjCpkjYZuJMmIm18vUAjIQHoCfIhk4HSabFgEazBg0Wf9SbfFBD4lFt4e/Y + fFHMHJlplSPRokSogfnQ4A87c6PDJLZG8EWw2QdhNubHAG9pf0F3oCgv7INA9qfYZyiSfpVGwFiYqUdF + th6V6QpUeWSoyfBCbbYX6vNoBRy7Il5zAa8nT46aXJLffDXqSnSoK9WhniZEpYoCDcryVNKqzMIsOUGq + H4G9D3I5PzKTFgRgaRUw+y8zxhdZ9LscEuA8xoU8EmIhBBcl+aJECMG0cs4JUcqsIc+A1mILOovtaC80 + oyVHizr6XlUc+z/BB53pnF8FxKflJoyXGhj3lOhn/OvLVmIgV4f+AjP6ix3oLgxEa44T1akWlMabkBTg + C7e/F8LVzD/sH7EXWQbzegHPr8JDYpmtQ02WGs0FenSXWzBAGyozYKRMi9FKLcaq9Bit0PLYKh5bie4S + rSQC3xGAeyrNaCs2oDrLH0VixaoQgGkZzIVpbFPifJAUK0RVb0mAjSUJEOMREsKx+z8EYJvTFzbiJGFW + ly+sgWKfTT4nebQ6xUo7uXTXsErnDTljkRB+/YQpvaBUyaDR+sFoUEjlTcWf9S4H8WWwN6LCxDn4IJ19 + Xsi+rKg0ob7OiqZGJ2qJp4sL9dKd6wnM3THM6XcE4Lhob6QkKqQ7V0V5YCEYZKULMy6YR+wdzDgiSoWn + izLRPvwM+zjXGy2N7K8uEwb6bRjoM6O324DOdh3aWjjmdX6orPBCecltI68QQrAkABN3pRO7eRKJH9KZ + R4r0aKiwooN4tKPOgo56sR+wEIJNaChXkzD5oZb8pKncH10NOnQ30upV6KpTorOWc7qOuKTeDwNNCvQ3 + cixr5ehkTKsvVKGI5+zheMWJa6aFRcsQxrkfTh+JIMaOTfZGMq/JwziYwfmRQy5UQL/IrzDwuRoJ/H4o + fd5Ov/oXAZiYx2zzJuH35WtCfOJjEn/xp49JCErMJeLPBZvFG6K0bEiQGlF3RGBaZLACEeKPY+LWCLeP + JAQLAVisUEuKXLB4xndR6jUrRdyUoULlvwjAatQUCRFY7AfM14tEXwVIVl9OjlHuIJF2oIZWlGtCSrwv + YjjeCTxeGnNDbq4FxcWByC90LgjAGRbEk9CmZ4egvikXU4t6sHjJEDq66hCXGAaV2hdestsCsFwOk9WK + tMx0jExOYO+hQzh/9724eO+D0srfi1celUo+nzx3Lw4fv4hd+09hy45j2LzzJJau3oe+kdWoahiHJ6cZ + yen1SM1sREZuCwpKOlFdN4zm9im0dy9Gd/8S9A7OY2hsGYZHl2FkZA5Dw4sxPDLD59MYGZ3E2NgUxsYn + MTo6jsHBQXR3daO9rR3NTc0oKshHZFgIx8UAvUYFtdIPSrnvbRHY+1MB2Jv8zNt3odXqGF/dJsQkhtDC + 4Qyycj4q4auUQQjAPn4LArCGcUfsASwE4CjyjiTO4dxoHQrj9DTOF+aGePfCqhYhHokVwGYh8BqFoOsH + jVnsqesj7RFmMAsRUwi//2oGYhBhYr9dYZZA7b+YMUAjCcAacqj/NwH4Tvt/CcB39gIWq4BFqxWiM39X + T5/WW3x4DmIl8sKKZSEAGyxyWOwaWO1aPlZCrWOfMkZJ4u/n7M4qYC2v22T3QYBLCRd9PzTKyDlllCof + ODgPXGxFCfwI5s74FJckBEtloB28fvbdvwvAQvQVpZ6NPE8Tz9Nsk0tmtSsRIMRfp1oyp0PLGKxhv8th + YP8oFV5Q8LzESm9JCBbnRqwnBGBJBBatGCdeq9i2KIjHcDlVCORxXTSx6tclVv7eFoBDnEL8/bwAfNuY + o4W5Ge8XjH5CCyFHjmDejgtnziCOEFt0JEtG/xHiL01gNGHisajkks9YLFb+NlVHLOynl2dDdsrCCuDP + C8DJxHPiJo/CHCNKCvgZxnJRki4tSYPMdLO0V5n4gzomiucdIv7oXBB9xfWKVTA6ce3sDxG/xE0sQS4/ + pKYFoFKU3BzKxvzyCmzb0Yadu1qxa2czdu1owro15ZidzkB3RxjqKi1orrFhYiAOOzZU4tThbpw+1ofj + hztwaE8LrREn9jTh6K467N9Ugp2r87FtWdaCLc3EtiXp2DqTig0TCVg7FIOVveFY3BqE8Vpx0xZxQbUF + sw0uLGl0S+KvWPE7JG4Oyyc2KLCgP99KYx6iDRba0FdgRUOGBkWxYlsV9hFxdiLb+HAhAHtLgnzQbQE4 + mPHb/b8IwELw/Rfj++I7YmyjiG/FKk+x6lOsGv1MUGaOcXKcxWeEABwk9hxWIsbNeE9fiWC+EBZmI66j + 7wp8F0x/DqIfumhBxH1hAUL8VcNtUSCQ8SKQc87J8QmihfMcEl3EY6HkC4nM88RCNVlONOYHE+sFEXNZ + kBOj5TUz74X4IZOWzdxSFOqD+lgFulN0GGReH8uySv8HjhCP9yUZ0U3f6OB7Lala1JC3VMczLxPTlAlR + KlyGImJfscqzinyjKpJYMlaO6khfFBJz5bMvxWrhBsFzEjXo8RjQl2lEB/lHYxI/R4xYTqxYFO2LTOIU + D88lI0KObGLmrBgDPGFqpLCP4sXeypzzAuuKfXsTgrVIizAgLZzYJVSLJLdaEnUzokzIjrMhN9bC4+j4 + fS0yI/R8vLD6d0EApv8z3yaSw90RgIMZg1yMZf8qAHt/tgcwfUAILiIfR4X5cGz9ERspqicRCyQJATiQ + c5IxKkyDMJ6rdLOH25+5Xez7z+dBxApsw9yi6gfHmmMu8nxUiArh4jVivdAg8Vz4jhYJkZrbtlACOiHK + XzIRFzxxCmRz/uYnc04nK1DAPiyIIoYS4m+CH9qImXsy5exnP/QTv/QR83cKIViIuDneGC6RY7hSIYnA + 43VqLG4yYL7BgNlK8pYCX36enyWmbU+W0ch/icW6iGl7yPP7GE96GVfEjf9dxA2dyWp0ekxoShQCMHEg + cUsS/T2Z454ZTL+IoG/RT7o5xlM835VZBmwqsmJLiQ2bS61YR9y9ssKEWfKMqVItRso1GKoi7q4WVYqU + aC31Jz/xRUOBH5pLFOisWCgDPdYaKNlISwCGmsSKYRox7XCNGUPVJoxUmTEscD2xj9j/toLculJwNebg + vswgjBaEY7w4HDOVEZivj8aajgRsHUnDvkU5ODCfh72Ls7FlLBmre+KwuDkS0/URmG2Nx7rBHOyYLsPO + xeWY60rAWEMI5jrjsLwvCYvaojDdGokVfYlYNZCEeb4+1RiBwcpgcodgjNbE8BjpWDVYjBWDRRhpSCD/ + CEKlWKXF+SFulI5inEggd0slBhfbKnkYmzJuWz7nWjl5fFOGHp3Ebb0ivuXxWhnfJvOsmMo2c84aMED+ + 2S5uKg/3Q30EeR0flzKvlNGPqpO0qM/geBHX1WWyzbWhtzwUY/WxmGlLwcrhPKyfLKWVYNVoAZYO5GDZ + YB5WDedj/WiRtAp412w1+6AcK7pTsaghCkuaYrG0NQGzjVGYqWO/1rrRW0G8Xm7DSHMwVo6lYft8Cfav + qMTRdQ04s6UNF3Z249KuHty9swf37OrH5R0DOL+pB8fXMo/MN2CqIxuNpVHITjIhStxEw9j2aQUF+lYM + /SyZ8yM72Yqy7CDy13DyVjeqcp2oyAhAEWNNOnl6OvuwKF6BtgI3x8eDzVNVOLBSlLWulkTh4gStVGUt + lv2eyP4X/19kRfmhmLy5OsuCpmIX2ipD0VUTTgtDJ629LgxNFS5Ul9hRyjEQ2+GIKklpib5IImeN5dyI + jpIhmrk6kr4fGUX+xzGIjCBucImtRJhHmTMCeS2R4QrkZgWhQazwbMpEbWUCsj0OxEdrGBfI3USsTjTB + w35IZOyOCVcy/igZP+TEHMwJdnI2xric1CDJPPEB5AXE9DHkKRl2acXlWHcaVi8uweblldi1ljl2cyOO + 7m7H+WODuHBElLjtwqHNLdiyrAzzQ2kYa49Gb10IhltjsWgoA/NjeZilzQzlfGrDHWmoKmDMi5Pzt3xR + mmvHYFcGpukjg92Z6G5JRgt9qqqU/k0u0VwXxeuL/9RaamNQTs7uoa9G0bcjOAYR9Ps7FktfT+GxC5iL + xDUMdaVjYjBXEpjFnsKzY4VYRJ9cPJSHJaOF2LisDvs2duL4zkGc2NmPY1voS5s7cHJrF05t68BdO3tx + nv52eU8f7tk7gHv2DOHc1h7sX9mIjTPlWNSbi5ayWGQmWhi7yb8F1mP8NzH/mtiamYttYuFagD/sDuYJ + cYOvTWzlRAwnROBwNSJobsZ0J7m7k7Hc6SaGFeIv+V0AMaGFOP2OACyqBomKPzoe20J8Ghyip89Y6TNm + hIUYpBsMhYltR4J5nFhi4tzsYJSVhKOs0M2+c7HPbShgLChIJ7fINEhtFuNDOnlcJvNEfqIaFcy3NZlm + VIptH9LJxxnvlvfnYkV/HoarY9CW60BrbgC6ityYakjEbHs6lnRlYv14OedhE/FXM1ZPVGCkMQUdZZFo + L43ASFMadizvwPEdEzi1exLHto1g77peTLMP64t4jpk2zkk7Cthmpxg5xszDnGdZqQb6thnZqfTPOC1i + Q4lzxc1oxCnlBcFS+Wch8mYkmW9XT/GD2AYhnWOSn+FEiVgFXByBdp7LUHcels/UY8uKDmxd3o7dKztx + bP0Ajq7pwZ65JmyfqcXWRTXEjbXYMlWNLZPV2LesBWe3jODKnkW4Z/cM7t41jStsL+2cxK4ljVjalc04 + mIypNvr8UDFWTfP7PP6+zUM4sX8JjuxZjK2rezAzXI7u1kyeSyTSOS/jiPMiQ5ibY/Wcp2bGASMxN3N4 + DHM5c3YMc6CoxJbBMShgXxeKUt051k8F4JL8AGk1vNjjV4xpFnNqHfH8BHONWFG/bFGVdCNHZYELGQlq + 4lQZEiJ8kRqjQEYi+zVJhzT2ZwLxSBQxXQRjTGyoEIBNyEu3S21KrFgIEojJ4VIc5HV7dWeHoSHBwuSs + RWeCARMZVqzId2BDkQNbyxySALy/wozD5VocK/fH8RIZzpR54WK1F+6r98LjHV54acQPP1iiwW/WWvDu + zkB8vN8JHAoCjobQQoHDIfhkXyje2xGKny8z41sTejw/rMOj3Rrc26bCfR06PNhjxaPDTjwxHoJHR924 + uy8Ap1oN2FPuhy15C+VPN6V5YX+2H06WaHGWgP9SnQlXWqw0I+5t0uLeen9cqZPhcoMXzrZ44Vi7DAe7 + 5Njdp8a2AQ02DquxdliJNcP+2DCixPZxFfaK/X8X67FvVov9S3Q4yOs4PK/BqRV6nFujxcW1aty9Tol7 + Nypx/2YtHt1lw1P7hQAchCcOB+NRXtvlXXYcXavHpmk/LBvwwVS7F8Z5DlP13ljeqsHO4SAcmo7CwYko + 7BwIwebuYKxvd2MJE2RjnBEpOm+E+zPpk1ylOD4TgJvSItGdFoHeOAd6CGy7SMZGmTBWMVAeSPTDBYK7 + h/L98GKjDt8dsuG/Zl14a2Mk/rIrBh8eTcLNM+nA6XTcOpWGW8eTcONYDD7hmFw/4sRHRy346KQN75+0 + 458nbPjHCTPeP2zDB3td+GBbOP62Pga/n4vBd9qdeCxXjQsEbocZnPcx6e5gEt7DpHUhyQdfKtPj+00B + eK0rAH8ZtOPdARv+TPttpw3fquf4FBuwMUWBPoJ6sQLXQ/IbIwiyuJPGwuBJgm4jibFZlLBbGShtaqm1 + mZUMvLcFYLYhejoz+yebBKeWxLuTwXWSJHV3sh5nsoy4VGDElTIzniAYfLY3BE90OHCxVo8tWT6YJmDt + JzBu4ufzbL5I4fFjbDpE2A0E/DoEOvUMzAbYHHqpNJidQT6c/SyEyxEC3tPNCnxzZQDe3B+E98UKYCEA + Px6I61ct+PghK/55yYo/HbHiv9bp8XX618PlMlzKkEl70d6X44Vna2R4udsX/znpxzmiwnvHbPj4vmB8 + /EwsPvluPq7/pgY3/tz8/y0A32XiWOppOlw/o8WH5zT48LIeH91vxPVHrfjkaQc+eT4Qn7wUhBuvhOHW + DyJx88fRuPmzWNz6aSzw04SFlcDfjcYnXwvGP5+24J37FfjTJX+8dcYHfzjljY+uGgG+fuuLGuArBtz8 + FufxqzHAywm4/mwyXj8TgeeXW7Gvhv2a5IVhEoGeaJIAmhCA+1PFHcS+aI2TSaJJAYNQJkFVqskLcRy/ + OBXHkUlPWLKCZEXvgzaOyYTbF2tIqPYTLF1KlOGZXF98q8YXP+33x3+Py/Frzs3XV9jwxloXfrk2ED9f + E4SfrQ3Fj9eE4UdrwvGj1Xy8NgS/2BSCN7ZF4J3dkXhvVyT+sNaB15Zo8bNRX/ywS4YfMyb8vFuGXw34 + 4bVRP7w1649317Mv93Isjwbg+jn24T0u3LoajFtPhuHms1Hs00h88iL77CuRuPFV9iv7Dl8PBL7BOPd1 + J259meP5hAkfPGDEPy8a8ecjjIWbvPGTZV6Mi174Hu07c154mfbVWS98Zd4bX1slxzfXKvHtzUp8d5s/ + frRPjv8+rsVvzpvx+sUA/OqMDT854MALjJcX29RYz9g3TEA0Fq/CsLgjO0OH3mwtBgo1mChVYa7CDxtq + vXG6X4WrUxp8aV6Lb64y4NXVovyzCd9fYcKrt/cB/tYyHb6+VIevLdXiRca6p6dUeLBPiQtNcqkU7jFR + 3WHQC9/cosBfrjrx8bMBuPasRRKAP3rSJgnAvzlvw0s7DDjOeDdfSjLI86snQaxJVUkgo9IjTI2qVDk6 + M3wxW8jY3STDU4sU+PE2Lf583IQbly3AZQNNB1zQsO+V+PCsCv84pcJfj2vw9kEFfrdXgTf3qmkG/FaU + 1t4nTIfXxCrr/Wq8dVyPdy8E4H2xB/Dzcbj1/Wzgl0LgLb4tANP+UopbfykB/kx7h3Pq7SLgLSESFwC/ + ysH1H6XhH9+gvzznxruPBOEvd4firRMR+PnOUHxjVTAeGLBiK+PsUIQXqhn7chmLMgjecgkKK+z+qLX7 + osnqjTazDIMkD3NR3tiRocXxAjNOkqAdy9TiIGPgvhR/7KFtS/bHxmQ/rCZJXxCAFeglUGtlQq9nnKwK + lUl31YsS0GIPYFGeLjtChoJYJUpT9CgjgBNWkWVDJQFWRXYAigmwcuM1yCDBSOUx4hmr4/h98YdWCo/r + ITjPIAHKSlFK5QGF+CtZukYqsZPH8com4EiK9EYirzOV87mE83k0X4l1NWoc6NHj4owRz24LwH8csuHV + s3b8+Eoo/vPBBDzLHH98uRYrOa/66QtVqeJ8Ob95DpIAbCcRYisE4BQCk9RQgtNwFTLDVMgOliOfVsz5 + XxHig44kA8ZznPSpUGwgSN1VEoY9OQ7sInnfkeKNY/neeKjJgG+MhuBni6Lx2qIY/PdQIP6rx4hfD+rx + m1EFXp/wwVuLffDOcjneW6/D+3sdnNtR+PhsCv5+LgN/OJmOn+9Pxisb4ok3InGs0opVCf4YD/fGcKwc + 3fFytCb6SOXTGpg7GuI5LuyPOuaQeo5tfbQvTY66aAUaCKgaYtRoiiQhJ5BtJ9nsj+GxktSYICgbjVJi + mOBV2Ei0HuOxFkzE2jEc5UBfOMmxKwDNdguqTFqUGxQoNfiglGSgxEgfIEkoYI7MNJPkMgdGGxVw6/3h + 0MsRIERgk1gN7AM3/VCUKAwnCQknaXEH+koCsMtFUkLyKATHVJ6PIAZlGRqUp/mjjLmpguNUncl8yhwl + BOCGQl5boT9JNK+N415XxOsqN6CxQo/Gcj3qSw2oZb6vLtagokAtCcFFWf4kH8yrHiEAM7+T9KaxnzzR + JN000XroU+m0jGgZyYgvCpIEsfaVrCxNQaJOoJtnQnMhSV6RHY15RtSJ8+RnRUn56lgvtHsUGCw0YrTU + hJFiPfrzlOjO9kdXpgJdWcRG2Xr0FJDAFDrRQVJUn2VHWQIBL+dmCPOMwFbpgT7IdsuQFSzmkkwSn6sz + Ga/SFSRHCrQW8hjFRvQwpgrBd6BEjcFSDQZK1egukqOrgL9VrEZPCT9XqkdvhRG91RZpFXBNthxFqTJk + S+Ivrz9B7P0rQ3KsLwm7L+JjfGjEPiQCEeF+CAmRw8Xz+bwAbAvwhpVjaHWI0qr+sLAVoogorWpijhSt + 0SpEIT+odDIoNLIF8Ze59I4plN6SEKennxgNvtLqFfEng0vsM8lrj2IsSGLcyc5Uo7jYhJrqADTUO1Bd + RUKSTwLB2JQY54MY8acF444QgGPF6jPOjzRRLSBNi0xBMG+Lv5kklhmpOqSnquFhjPMki9Xm9AFaVro3 + murZT10WDPQHYKDPgt5uI7o6tGhrUfJ3fVFV6YVK8onK8oVWlIQu/DcBOMfjQ3KkIdEyornKhpYqM1qq + jWitMaGpQocKxubiTM6ZLGKOIl+01ZDL1OvQWadCZ40SHTX+0mrgvkbOw1YdhtsM6K1Xo6OKxJjjlkMs + nUifjWCsDOY1B/Gagxhvg+m7YRzD6CRvJPEc0sg90vPlyCpWIK9CizzOifR8NeJSfRHM7wcw3pkZ64wc + TwP7XE/MIwRgIf6a2JqsMulPZUlEoj/qmUPuCCpiKxR3oBLhwVqSN41kkW4lwsSfxoybYUG3BeAwfySI + PYAZb4QAHMdzTua8yuS45aUr2RcGVHMcxerfBQFYrAAm6RdjXWxGXamNFoB6cru6cqckAFcVByA/S08/ + FUIz4zTnnIc5IjfXelsADpQE4LRMKxJJ0jNzw9DQko+pRd2YXtyHlvZKRMcGSb73eQHYaLEg2ZOGwbFR + 7N63H+cuXsaFKw/QHqI9jPN3X8WJs/fgwNG7sG33MazdtB9rNx/G5OKtqG+Zhie7Gc7gLNgC02APyoAz + JAthkXlISK5AVm4jSiq60Ng6hvbuKfQOzmJgeAn6h9gOTGNwaBKDwxMYGBrD0Mg4hoX4OzSC3t4+tLe3 + obm5hf7XQCKeIwnAARYz54oeep0KGrUcSrnfpyWhPxWAaaLEtYrzzu7UITLOjaj4UDhcFmj0SvjI/1UA + VrMVAnCwnj5EvpNI7pMRqkJWmBJZ4XKkkY/EMC8GiT8Bye3sxA9WchuxelZv84dWtGbO5f9FABaC64Ld + EYDZ36Kssdhz93NmsGmgJb+6IwD/u/grVv56kXveeSzek0Tg/0sA5mM52zsCsBBuNYwxC61YzSD2LRai + tT/9XpR+5u8zbynUPvBl//j4026Lv978XW+2onqBOIbBJvbQVnDM1XCH62k62N3MdUGiCoKc4y/KQ1sQ + m+xkvwfwfSN5m4J+9tkqYGnlr4HHIocT+/yKFb+C04kVv9LKX/tn4q89UCNxP6dDBxs5ocnIcWc/yHlO + CiEE87FYASwEYD2PKwRgsTewVBqaJlbvB5KvCwFYmBCD3TyfIAfz9P8QgMlh/xcBOMjpzc/L2NIPaKHM + 2RHB4mYUzvMYsdqPc53YMImY444ILMTfBM7RBFEGmq+lEz+W5FillTSVzH/5GQap0ouIC8kxzENx3kiO + ZwyLExUglMhNN6Ag28K4reVrSpoKKUlGpCQaGOvVCHEzLzGOiVh1pxS2MLEiWuxRLW5cEQK4QwhwiTaU + V8ahbzgPy1bWYdeeXuzbT9vXjX17u7BxfR2WzOSgqy0K1WVWVDIODXZFY8vaapw+Ooi7To7i9LEBHD/Y + g5OHunDXkR6cPtCGQ1sqsWdNEXasyMXO5TnYxXbXMrHCLh2bppKxfjgeq/uiMdUQiIEyxnPGuv5iHcbK + LRgvJ74qEttCGNCTLcyIzizTgmWa0Z5hRFumHq1ZBvIVNfJjheD47wIw478YE3JXN3PyZwKw7P+3ACyE + vc8LwNIKb773eQE40vU/BeDwAF/JQpnzQy3+CCK+c3F+ODkWTvqjS/wfYuM40QLNCtg53+x6bxrjCH00 + lOcQTz/yhCpRkGBASYoV5R47MQr9Q+xNl2BEOs8r2b1QhSeNuSWDY14Q6kusq0VXigED6RaMEUNNZNgx + mmZDf7IJ3clGdKQa0UL+WZusQY0QR1Jo5A1lsf4oCvchlvdCPnlHDq+1kH1YHCJDnhCAyWPKw2Soi1Gg + hbi4k8fo4ji0sP/rEuWoivNDeRx5AC070pfmjxz6YkG8EfnEcdlCYI3QIUGIo8RFoRaOD30wnH0k9kAW + eydH2/0QxfgZy7km9vYVwnBGuAGZkWLfXwOyIk1sjfAwtqSFCcFYj+RgHRKDOEact5FintKngxirHbSF + 1V/M37Q7ArAQh4MdPgv5mHhfCDMx0j79PGaCFVnJds45E6JDVJIPuMXqPJHDg/0RzP4WInCwEIY55sLC + eD2SCCzlejlChQDskjPXq3hcLef4HRH49h7AkcQq7BsRE9LJ5/LY90WcxyXsx+Ikf5RwrlcR37Wmq9GX + q8NQnqiUQ+6Rq8BIjj96PULM9WLfe6GPWGmgXI6hSr5Xo8KiBj3m642YrSR3IabqIz+QVg0nyiQT23p1 + Ett2x9HEogpaK3FPC3FDU7wSTRzXujgdSsIVkgAsSj97iF1yOZ+qyKtaOLaD5FaLUtRYTbyxtciCbcQj + 28oDsLHShtWVFiwmt5gg9h4skaOvjJi73B/tpT5oKvZBPblfXZ4PeYof2ojLe4XI2+zASHOgJAb3EQ/2 + V5rQJ3C5wOe0wTLGmxIzeomL2lI1KA3xRinja32MBj3pTgzlh2C4IBgjRS6MlbgwXeXGirZIrO9LwMah + RKzqjsJsczCmal08lh0Dxfy9CjcWNcViRWcaVvWlY6gqCO3iRpPKQIzVhfC87fxtO8b5eLoxVBJChyoC + 0U0s1V0chMGKCEw2JmNxRwYmW1LJH8I5Nx0oTTPBE+Ev8eUQxpIo9l8855IoS5xCE5XAUjmXcjinKhOV + aM00SDexiOpHI/mMewU2TOXTsiySANwXr0ZbhB/qiBurw3xQEeaLIvE/LLFjWZwa1fxMnRCFUsnpiOOb + cu1o5/n1lIdhuD4O463JmKRNdaRicXcG5vqysaw/G8tpa4cLsHG8CBtGCjDbEo+xqhBM1oZjcVM02zCM + VAahu9SKmizyu3Q/jp8Bwy2hmGW/rhxOx8apXOyYLcG+FVU4tLIGh1bU4Cjzx5EVDTi0tBa7Z6uwfqIM + Q40eVOWFITVGjxCRJ4UATBMrgKU91N3Mc5FaZCfbUJrt5mdDUZ4ViOI0CwqYz7LJt5LZZ0nsyyz2QXWa + Gf3lkVjancNzqMKSnhxetwsZIX6IJxaLIXYXW1SJ/y7S2FeiLHRxig417JumUjdaK0IkaykPJi92o5J9 + Xsg8kp2mRnqyHB7OwZQE4nSBpcN5nuQSYeQUIaGMVxy3MPqem3PijvgbIPIFryM8VI7URAtyM4JQVhCJ + vEw3EqJ1Uu4I5ecjgokBYhmv4pijw1WS0CTdMML8EWiTSRYZLEQyB3m4k/1lYewQqwHFzf1m1JQEo6c5 + FotHMrF0IhsrZnKxanEuNiwrxO6NNdizoRZbV5Rh43wJlo5mcF5FoK3CiXr6VmtlMPpbYqU9lIfp88P0 + h6H2FFoqepoSUZ7nlErRpjIHlGQHoLfNg/HBAvS2Z6CjKQkNVREoFqvbs61oql0QgFsb4tBcGy29V5ht + 47WJG2GYuzhWwsKYL8Lp7zEcA1HxID1Jj5LcQGKcYNSKaif10WhvjOFxotFSE4XW6ki010VjrDcTyyZL + sJE+tGV5HTbNVWHD4jJsXlKBrXPl2LW8mj5Xg4OrG3BkTROOrm3BziU1WDGYh4m2NPTVJaIyOxgpUXoE + MbfYmHvNRvI3cTOhQQjBPpIIbCVfE6uCBX8TZiF+D2SsdxOrupnrhThsI6e3c3wcQcoF8delIg5VkAcS + 0zN3CeFXLnAmObzAmOK4gcSMESF6jq+O+YOYkvhSmIvfc9nFfzv05wQL8rID2W9OlOaLvXHpN+la5N7+ + Ty87RYl0Yj3pf5gIH2SL3JyoQlmKFmWJ5NGpxESMOXOdGVjSkc54xL7jGLbROgtczAdRGKmOw0htHJb1 + 5WHDVDXW0eb6OaZVsWhizBTWUxWP+aEybJhtxHramqlarJ2uQ199EorocxmxamQlMi/Giy0MFrYySmDs + SWHsEZYUrUR0qA/HWdzwyHwmKiPlBEp7/JbkBvO5CeHMoeIGvEj2qbiZIdfjQDHHp6JQ7AOciM7GNEwO + lGAFf3v1FMd7UYO0f+9WnsfKgSJpJe98D7FpXwFW9Bdi3Wg5ti+qx5HV3Ti5rh/H1/TgyMouHF3VjQPL + 27G8Lx+jtfGMgVEYqBX7iKdjmte9fKoGG5a2Ye+WMezZPIb1Szsw0V+CtrpUlOa6mfO1iOA5hjPvCcwn + 5moic0x8lMjjxAmMPZGMAYnE9BmMuwWMJ4Xs72IhBBOLCyvhHBHibk2xWyrn7GF+L+H7Yr/kmZEiTA7l + o5PzqTwvEBkJGukm0XjOD/FfQFqsRjKx+lcSonke4YHeiGGcSE800y/sUpsQqUaex4nxgTLs3zENr87M + IDQRYLXEadFH4DfNhLAynwm5yM7EbMe+SgcOVdlwvMqIU1UqnC73xrnKBQH4SoMXHuvwwldGfPG9JRr8 + ap0F7+0NwvXDbuBYKHAynBbJxxG4fiACf90Rhp8vs+KbQgAe0uHRLhXub1Ph3jYN7u8y4Wq/TVr9+8iY + G5f7AnCiRY8dZT7YkOeFdeleWJ/ihd0ZMhwtUuFUhQ531epxscmES80GXGrS4UKjHOcavHG6yRvH2mQ4 + 2OGDPd1ybO9TYvOgGuuHlFg7JMe6EX9sHlNh14QaB6d1OLJIT2M7S1usYavC8aVqnF6hxF0r5biwyg+X + 1/rhng1qPLTNjMf3OPHkwRA8fiQcVw+F4uLOQBxbZ8LWxSqsGlFittsX0y2+TIwKbOizYg+v59B0OA5O + RmDfSBh29IdgS3cIVjMhdok7IQI4UAwicVZvJnkViuLsqE0JQxttMDkUY1EBGA9UYJKAdBUT394Ib1xM + V+GxYjWeq/bHt7s0+NmEFa8tDcSftoTjb/vi8MmpVOB8FnBXJnDOg1unU3DjZByuHw3FtaMufHjUhveP + W/GP4zb8/bgZ/zxhxQdHA/DRPheu7QrHh1vi8NfVcfjxgB3PlspxX6oMZ0g6hQh8gMH5MIPzXQSAT2Yr + 8U0Ct583OfFmpwtvttnxZocdv2ix4T+qTLhcbMZagtMeTvRinruHZEoAdZe4k4ZB0MIAazP500j0hQhM + E60Qfs1GP4JuEn8DnZkBMpUEp5yBtpuOPc3jbSAZPkeg+0iRHl+otuC5Jjv+oy8Y3xwOw1eH3Hi6KxCn + Kg1Y6/HHRKwP2sP8UWjzQTKPHWPRIsyqR7BNB4dDA6tDB7NDzeAsh9VCwse+TmdyHoj1wrF6Nb65PBhv + HYrGP8+F4tYDwcBjDnzyqAk3HrHgwytmvHvChF9v1uAH9J0XO33xOOfI1SIvPFHG+dHkhVf7ZfjZIl+8 + tk6OPx824v17AvHR01G48WoObv66Crf+1AT8sxN4vx03/9aIW2/XAL8pBl7NAJ6PAx4Mws2zJtw6rsfN + E1pcO6XFh2dpl3T46D4jrvE8rj8VgGvPO3H9pUB88m03bv6A5/qTCNz8WRQtGviZEIHjgR/E4vo3w/CP + 5wLwzlU13rlPgT9dluMd2kePGnHzC2bcfFaHmy+ZcPNbnMvfFQJwMq4/m4Y3z8bgmTkLdjEOTJEMjJAM + DMb7YDDRD0Mpcoxla9CfrkBzvIyA0wu5ggSwHxNJnqLVXoiU08TNDn70d18vZPN5Lce1n6BrngBgN/v7 + cpYXXqz1xY8GVfjNnAq/W6vBn7ZZ8O4eF949EIq394fg93tC8cZu2t4IvHkwFm8dS8A7pxLx3rlk/PN8 + Cq6dT8Inp+Pxj90u/HmjGb9brsbrM3L8dkKBN6dVeHtOjz8v1+NvGwz4aLcVnxxz4MaZQNy86FrY+/ex + UPZDBG58KRLXvhyOay+yfSkcn0gCcAjwjaAF+zrtRSdufIF9/zDnzz1WvHdCj9e3+uBny7zw3UVe+A7t + lcVe+DrtpcXeeHHWBy8tk+NrjC3fXOePb23wxvd2+EirgF87Z8WblzmPLoXilyfC8NIaGy50KrCOhG1U + rFAkkepP0aOb5Lkrm0SnQIdRkqHFFXKsrfXGiX4FHpxS4tl5Nb6+QotXVxnx3RUGyb5De2WFnr6sxVeX + 0k/nVXh+mRqPTslxvtsf+2t8sTpbhnWMt8favPDMagXeuCcAH3zRjmui/DP95Zood301EL86b8OXt+lw + qMcbi0u80MPza0wlScvUE/RbUUsSUptpRC3nfme6PxblcmyZMx7s98V3Vinxx0P02Qs23LxgwK3zGtw4 + p8S1s/746KwC/zitwF9PqPCng3K8tV+J3+3T4Xf7LfjdATt+e8CBX++14td7DPjFbjV+tVeJ358w4r17 + g/A+59P1V9Lp53nAa0W49VYxbrxdhBvvFOHmXziX/kx7R4jANLES+A98/kYBbv13Fj58NRb/eDEUf3vK + jb8/FIp3L4bhzaPh+Mn2KDwz48LBKiUWkQy3Mu6V0Z+FCJxr8EIhQWGx1gvVfN5CHxcC8FKCr105epwg + wT1FYnaMfXKApHdvkhw7E/2xjXNlU5If1pCoz/O1CbY9jGVNoTwO46soLSyqDxTQstwyZJM4ZIuSRNEK + knwdSj0mlGdaUZnroDlJeAgiUozIJqgSBDI51BuxAjzzXGJ5jORwxs4oH4IxFUGiFnlpGgkoZqUopDtW + szlGOala5CSp+VlvpER4IZPzsN7jjdU1WhzvNeKBOSue327H90468NNLAfj1gw688UQIXns6Aa/cHYX7 + d1qxa1KB2SY/tOZ4I5/gM4G/H8mYL8oTR34qAPvDwzicGS5HNklPHoFKIclNabAot0zfTrdhpigYy6oi + sa46ChtLQrCBxGFtqgJr4r2wJ9ML9zZo8fXxYPxiWQzeWBqFNxa78btFDrwz78Cflprwp3kt3qZv/3mV + Dn/ZZMO7u4Lx7t4Y/GFfEl7b58EPtiTjxZUxeHgiHMcanVibpcMU59UQyeIQ+6CXALoj1R+t9OdmYo7m + ZI5togwtCd5o5fi1JirQmqxBW7KerRHNCXpp5XJDqC/awn3RRzIzznEaJ/gdilShP1RBU2IgQovhGDNG + 4wIwEB2A7ggb/cmEejvHlDmpUO+LPOa5POaeXOa5LBIMjxAOzL6I0vsgROeLQI0vArQkJrQAvmanuZhD + Q8RqEfHHlFRyUpSnFHcZk5CwX4UAnJKgQl6KBiWpJAKpfqhgPq9MWxCAazg3hQBcX0gr8kVdoR/qihSo + L1GimTirpcqApko9mioMaKw0or6cc7xEi6oiHi/HHwWZQgD2QgbnRxoxQQrHPoVYQViyuBGAfi1KKyYz + H2TH+iI3QeyvROM8ECsXiumLVdkG1OWZUZ9vRRXHozxVicJYGfL53XLxJ5NHjb5Ci1TKbaDEhN5CLbrz + VGjLVKGF+aaJ74s74ltybWgvdJHUc14km5BKAhFOohXDPs2inxXHEF9xrIsTxQpgsfpYsSCIp9L/xHF4 + vNYcOTry5egpUKCnUJh47keS5IdO8bxYI5WD7md/DNRY0F3BOMfvFKTIkEkfFXv/Loi/JK8xvkiIIimg + b8WSBEVxfkaE+d0WgMWdxN4IIHkPEMIvH1tswvxgDPCFKIuqt8qkFXZ39vvUMN6odN5S6ag74q9o/ZUy + yYQIp1T5QE0/0dNHjPysEIHFHw5CYAhjjo2N9kaqWDGap0d1lRN1tU5UVQbwuQ4e9ntivBCqvRHJfCMs + OlKsHCbR4LilJiklITg9TYfMdL1kHhLL1GQliakvksV18/qTaGnsj+oKxv92M/p6bejtsUKsBu7u1KK9 + VYWmBvZ5jReqquiHVTJJDBargAvzvZBDv8xMFcb5kEE/ySYZylOjomChHHlFPv2Y41+aTT9KlyGH8zSX + ny/P9Uaj2CuuWk1ToK3SH+01cnQ3qDHUyjnZZZFsoFmH1ko1ipmb0umTYuVrCGOmk9jWwZjpIFlz0XeD + 6c8RnPcJKcSNGSTVuSSqBXLklKiRWyYEYA1iU3wRQh8V3zMx3uktJPT0NyEAC3HKRFxvsMgkMzJHGDjH + F2xBTBGrgcWNkNIqYJeahJjmVkt/CC8IRd4SsRR/Nos7oRMjOUaMK4n0KbFnVnI0+ynZD/kZSvaJARUc + x4p8rWSV+TqansTSSDOghjmprtiO+jInGspdqKNV8Xlepg4J9AtJAOZ1pyWpkENSWlDoRF6+AxnZNqRl + WJGabkduQQTqm3IwNNqIwZFmVFbnICTMBn8hJnp7SWWg/eX+MJpMSExJRt/QILbv3oMz58/jwpX7aPdL + QvD5y/fjxNmL2Hf0DLbtPoINWw9KAvD49CaUVw8jMrYUKn00/NXhUGgjoNRFsj9jEej2IDq+EPnFrWhu + G0dP/yxGxpdjfGo5RieWYWR0FoPDU+gfGkf/4DAfD2N4dFRqOzo70dzchIaGBtTV1SAvNxtRkeHsexts + VjPMJh3HRQ2NWgGFv++nArAo/yxMiMBKzjeLVY2gEBuCw5ywOYxQaRTw8ZNJ74vP+98RgNUyBOvJeax+ + SHT4MR5xDnHepzA2iz3wIzkv3fQXF33EyTnvcJL7OFUwOsT+vXL6kh/0kpj5/08ANgkOI5lGMp1NRV9U + SOKvQufzLwLwHfH3jgB8573/NwFYYfCBysh4RH8VpqY/L4i+C+3nBWCjVQWdUcl4JYefwhs+/reNmP9T + AZjmx/5UM66JEtJCALbT94XYK8pBi8oHFqcvLCJW8vWQSBMi4wMQHmOBK1QIwOwrIUYLEdogk1qxgtpg + 9lvgcgE8hl0IvhoEsD+EAGxj/4jnDpcOLpcRgYF6xmENx579JGIoz038MSdWZ9wRgMXqVyH6aml6I8+V + fWDl7wYEkJ9yrAKFAByohjtQtWC3BeBgXs+CMS/fFoGDHYwXvKZgJ3O301u6OcdFXxB7AgoBODxYrC5k + TIrw45xUMIf4SyZEYGFimw6xR3uMECs5/4UonEncUphhklYDi0ou4jWxf16yiPXEo8KSYuh38QpkEgdk + p5uQTvySRMyYEKNBgigpGa2RytOKFUlm4g+xH7Va/DnJ8Rfir1oI9TTxuohdFvphNPFMfkE456EHEzPl + 2LS1E9t30na0Y8f2NqxZXYupsWy0NkaiosiGohwDmutCMDuZj93bOnBk3wAO7+/F4X09OH5AiL9dOLqz + EbvWFGPLXDY2zmZgG9tdywuwe2kBNk15sHYkCav64zDfEYGRqgB05jPWZ/ijhdaRpSQvYn7J4Gse5gGP + VrIm5ithDal61CYzhxDDVYgqRQkKZEcTl97GKPGiT4mXIomhxWrsBQHYB8Gcm2L1p5inny/7/Hnh944F + BcikuL0gAGsg9nMPd/+rACzKfocJbOLyRxTjfLRbIVk4fSQ0wE+yEBtxnGXhJj8h7to4DnbOSQf92815 + LcwpBGDxvhCB6aNBxAmhxBHxQtjlb+clmIm1rCgSlmzjcxOyonVSWeVEYkRRlj450BcZbubRMAUaE8kr + U5mvPVaMZggB2IHRtAD0J1nQmWSS9nhtptWSgwoBqZY8tMZjQDl9rjDKF9nMoRn0Hw+vM4vXm8fnucyp + BcEylIX7oFrcNEmfa6XvNafoUM/+rxKlQ+PkqCRGLUtUSze6FsQK8VePkkQzz92C/ASxatkkre6NFnOJ + sTCQfeIS18w5L6osCAvl9Yv9k2P5mcRgDVJp6RF6jrGZZkUG40dKmJ6YVIuEIOZuzlWxJVm0MJcKES4F + QhwKBAb4I4C4y0rMZZEEYJkkADsZc13iZgDO3zD2WWQIxy1M7OWr4/wySuKvKN0cHuSPILFXNsdZiL6h + xP9SqVB+x+3i+YvfCeJrtHA3jW0YTRKAaeJ5JMcoNoxzM4JzVOT7SMYC8ovkcOYQYsoszuVCIWqm6Ylh + tSgjb6lM9kc98VlXjhHDBSaMFhowXqTFeIEGY8RMg1l+6EqToZN8vTvPmzjWD33l/hgkv52q1WG2zoDF + lTpM5JOzEHt1JvFzKfwO8UVHvLe0ArgzzgsdxBytxPeNjEN1EaJSkhw1HLcKnmchOV4m45i4eTk/Uo7y + eA0akjTooo0nqzFHvrkqXYPNxCpbi8zYWmbFhkoLVleYsKhQxXOWE+v7oKvIB23F3mgmL2kolJEf0HJ9 + 0EAs3lJEXEn83VdPPlBvR3c1cSWf95QZ0FWiRyevuatIh74S+nKhmf1BDsPfLqQfFhHj1EST4xHL9Oe7 + MVjgYutAX54VQ8RCM7XBmG+OwHxrBKbrgjBaacdwmR09RVZ05JjRXWDDcEUwJuujMN0YTV5gRg35THMm + OQljXHse50muiZ+3ob8kQPpeZ6ENbfkBaOfvdJUEo78yitwhjuccyesJklarFpJLJpNDhnHuuBh/xT63 + 4gZqsSJYbKmUTEvk80w3sTK5fEe2CSMlTkwQy03wvCd5XtN5AZjIsmAolf0QS4xNrlEVxLnHay7m9/J5 + /fl8rYBcpIjzrZSxsCiB/XL7cSnnZKXHhIZcO1qL3Ty/CPTXRGOiLQVzfVlY0pOO2S4PlnSmYWm3B3Od + qRivjURfcSCv04FBUVq/woWBMgd5mAllaQtb45R4yCmJRcVq4OGGMCzqTsDyAQ9Wj2RhvbDhLGwayaHl + Yf1gNpbz2DNtaWgvi0OxJxgJ4Rq4iJUcxNSi1H0wY24o42wU51kieXVGAuNbZhBKs9z8PDEq41hmtBpp + ocRZ7LN4xtw0lwwl8Vo05zgxXJ+IJb25GKxPQEWaBcn012geP4LHFauvxT7q4oYgTyS5LfunLNOKmgJi + 5pIgyWqKXMTXduRnGqT/T9LIjcSNs8ISYhj7mXtD+H03+93NeeDi2AXymIE8DztzhLi5RNpOgb/nIvcT + VQJio3RIjDbyWEIQJc5hbIkIFjeEiBtOiAfEdgKiVDxfEzeghDJ2Cywhbhy0s0/CGFdSYq3wxNuZ/83E + CDrmfz1yeH0V9PHWukgMdMRhoD0a/R2RGOyMxORAHOYm0zA37sHi4RTMDCRhsDUKzfT3qlwjSjLIIXLN + 5AxONFeEoY2+0FEXh66GeHTWx6O5KgolOQ72gegHvfQ7HU3E/J1ZbFPRRB+vLHGTXyzsT9rI77c3JUht + bUU4yoqCkJVmkm54C2dfBbF/gjleoeyzyGCOSagf3yO3jNUgg3knm58V2w6J1ZKiZK5oi3M49vT54mwr + 6stD0d0Yj4m+DCyiH033pmOiMxlTXby2nlTMD2Zg5XAu1o4XYeNUKTZNl2O+Nxv9tTFoLgphjAlFTrwF + kYEK+poMNpMvzMTOBuZXsRWInljeQJxpNHlLN8VpBR5iXpZu4mXedTLmi5LeYssMYTaOTwDjuahsI7Ct + hRzPIDA8v6/SEWMSXykEriKmEjcGO8j9w8kBI5mbQpmHgpiHXMQBolqqk/g40OaD2Ehy7zQb+8GO4jwn + 8hkHRAWuzGQFsZ+C40+eIXAf43JauDcyonyQG+sPse1VEa0sSY92Xus4x2+MY9lTEoq2vECaS2o78oPR + URCCzuIwjDUmY1En+5E21JiC1pJw1OW4JWsqjkBvXTKGW9JpGRho9GC4OR31hWHMTfRl5qmECLHNgS95 + pUwS9SOJbaPFTVNh/ogWq1T5uhhr8ZnkWC2vwYQcD/2JmCMlTi+Jv4GcL262UcRTGUlitbMbpbmhqCmL + QUNlHHr52xO9hVjcX4ylg6VYOVKOud4CjNanMM7S36viJRuuS2TMKcL68Upsm6nH9qk6bBytwDpRRnqo + DCv7i/idJHSWhDG/hKC9PBKdteyfphQMtmVivKcAKxY1YuXiFiwZr8VwdyEaKuKJuR2IC2cu57iHMN9H + EkPHRYo9/gU2kBNTC0wvjLGcnN1D7JSfbUdhrhDvHSjI4jXRCsVCnhw7itiK+ZQapySnN9Onw9HZmISO + hkQ0VkajOIt8PEHPuCcnPvBBvLghPEqJJObeeJ5HNONDBDFHOHFdNGNIaixjIfGfKKMdQxySlRyAkZ5S + 7Ns2A6+2VCtaeLDuRB3G0o2YyzZjDZPVFiaUnRV2HKhy4kh1AE7WmHGmWoNzlT64q8oLl2q8cOX2CuCv + jPjge3Na/Gq9BX/b75ZWmeJEOHA6CjgTCxyLxkf7I/Dn7aH46TIbvjGpx5cGtXisW4UH29SSAHxfpwH3 + 91pwdTAQV0eDcKnXhmPNWmwTAnCBF9Zn0lK9sIPA5RABwskKjSQAX2gy4kKLEXe16HG6WcXv+OJwq68k + /u7t9MOuHgW29iuweUjFxKLA+iF/bBiVY8e4CvsmNTgyrcOpabGvoQ6nZ3Q4MaPGsUVKHFsix6l5f5xb + yutd5o2LK31xeY0K92404qFtdlzdG4yrByNx3/5QXNjhxomNDhIUMzZOG7FySIOlPRqs7DHyd1zYOxmM + A1Oh2D8Rhv2jYdgzGIxdg2HY0hOFsUIrSkQZNzpParAfMpnoiuNsJCnB6EwOxURCEOYjrFjB4LGGQX4/ + J8uFWF88lqvHC9U6fLPZHz8eVOG1WSv+uCYIf90RgQ+PJOLWXRnA5RxaFnAxHbfOpeDGqTh8fCQUHx1x + 4f0jNvz9iEUq/fz3YyZ8cMKGj445cO1AEG7sCccnO+LwwcZY/GbSjpdbFHiSIOyeFC8OqZckBJ9hgrvA + 9qEEHzyfp8P3qwLxi6Yw/LzWiV80OPHjOjteKLfgPMHPqlQCIxLaEpLcNF5nFMmUiwD+TnkFq8kPNiMB + t5mB8rZZSHLMBl++LifI90OswRt5vP42fn+GJG0zE+2xZG9czfHl76jwcqsFr/YE4odjIfjhZBi+NxmO + b01E4/GuEBwqMmBpoj96w/1QygCaavRDjFmDMIsOwVYtA7YKVoda+tNF/JFiESSPgD+ZQb2PQPdApQZf + m4vEW4fS8PfTEfjk3iDcetSOG4+Z2Fpw7T4z3julxxs7lfjlOjV+sEiOr/XI8FyjF77U4IWXu7zw4zFv + /HKpP17fIMfbh3T4x+UAfPhkBG6+wvH5ZQXwxybgb+249fdW3PhrPW7+oZqvFwHfTgee5Ry634UbZ0y4 + eVSHG8d1+PikDh+c1ePDS3p8dJ9pQQB+2oZrX7Lj+led+OSVQNz8gRv4SRhu/SwcN38WiVs/pf0kFrd+ + EINr3wrD378cgD89psY7V5X4ywNK/PWqBh88ZsD1Lxhx4zkDPnnJjBuSAMzf/2YqPnkmHb87l4AvLLZg + J4H5NMnAWLwMEyQe0wS/09l6LCmxYSxXJ62gqyA5yCHoEWQwgX0pBOAI+YIJATjGh2SRrRDP+kgW5+lT + B7O98Ui9D747ocMb6+340y4L3jtsxftngvDRXWF4/64I/O1sOP5yIhRvH3XjnRNheO98LD560INPnszB + zS/k4+aT2cDDHty6kkBfd+L9PVa8t8WEv6zT492VJvxtrQUfbgrEx9sDcX2fE7eOBDJW0c6zzy678Mn9 + btx8PBQ3vsix/lIEPvpyGD56MRzXXgpj34b+P6S9d3xc1dU1rDKa3nvRaKpmpCnqGvXeJRe5yr0bGwwY + GxsbY9zoHUw1vSfUhBBaCBAI6aRXUkkICaQQqru9vrXvWI7Jk+d9v+/3/bF/d/rce85u666z98Gxr0WA + r1Nei+blpQiOPyPfKcPhh3zUERv+tKcEv9xUgO+tLcC3Kd88vQCvnlGIl9cV46V1JXjpbA1epj68uqkE + r53Hz+0qwq+uN+GPd3jx7gMx/PORarxzbxav7/TirgUl2NZSgDUEXgtp+9Kiay4DgwCACdre0m4D1vaV + YNNwIW5YqMFDp2nx7Nk6vHauEd/dZMH3zrUoR5FvbjIrr790jhYvrNfiuQ16PLxGjWtmF+O83kIsqy7A + MoK+CwYL8OA6LX5MnXv/i14cesaDo89Sr54N4/3HgnjzDg+e223B5fOKcHo3QWJTAaY3EHy22DFK8DCF + QWwak7Ix2v7cOg3OoN++qKcQd08vxKtrS/D2ZVbsv9WFw7dacPQWHQ7dosLBWym3afDxrRr86yY93rtG + g79cpcfbV1jxpyvdePvqEH5Pf/urSwL4xW4HfrJDhx9fWIzfXmnE3+7044PHYvj0pSrqfTOO/7oDx/7Y + iaPvdODIu+04/jfaklT//q33s/IOX/t9K478uBr7X0/g4+cj+PQLYXz8YBD/2BfB766qxNfOCePW6Xps + 5jUsoo7OYKI6yISkm4lcB5PCdm0BhpjAzeNrp8WLsbVOj8vabLiewPPGdgeub7TiyhoTLstqsTulxq60 + ChdmVdhKEb+0Ol2stFGfygShj8lvD22ml//RRbDWysShhSKrV1vKZQ9BI7pqbOhtdGFACOD2gNJqpauW + iVPGhPqEFtX0tSl+XwjgJONFVtpAMwkUgrej3or2OhMTDD2TKZVSOSbSVKVHc1qPOiaNjfTxnQRtC9qL + cMVcGx45Q6q9A/jpvjL8/kEf3n7Mhfe+5MHfng3iz88l8PPHK/DCzWHctsWJ7YstWNKrQXdlIVL01UL+ + xihCBKd4LjVhFRoIQJsoLXzcXqbidRajn8ng1IQBK1oCOIsJzznDCWwYiuHsTj/W5cw4vaoYZ9AXX8gc + 4PZhLV5aEcAvzy3HnzZH8d55EXywPYb9O+P4dEcIH23z4+/nOfC38734284Q3t4RxZvb4rSDOF47pwJf + WBXDHfNKccWoB2c3GrAwocIEE7N5KT0W1ZmxoN6IiUYtZjeWUAoxs64Ac+uLlX2w5tZqKUY+Z87U4MBs + ynjWijEme6Ocp5mMMQsJvFfytZXMqxbH9ZgfUmOCidj8qAGLklYsI8BYXOHknNupSwaM+jToIYhrJbBo + IgiQdvn1BIY1jENpJv4JpwplBB5+YyE8esZLQ+FJkcqPAIGKVKhECTbk5lFYSGCCQSGAQycI4FrOrcx/ + N0GCEMDDDSqMNBVSCjDaVoAx5lhjXRS50dJZTMCnxliPGtP69JgxaMb4sIVgT8SG6YNWTB8wYUqvEb1t + JehskhbQJwjgyn8TwNWUKuqTVNWIPkpVegPHuok20JzRKMemFPWAdtFdZ0R/zqJIJwG17BvcRFtrpE10 + xAoxWmPA7DYXFvX5KG4s7HNifpcNM5t4HpyTkWqN0hZtpM6CaW1eTJUWYLUO1FG/Eswz0gQRzUzGh+ps + GG4kUK3XKuTvJAHclS1EV7oIfZkijNYX0XepMKtFQylRZAbzjBktxZjbrsG8Ts5pN3VlgLrOvHj+oA1j + rRq003cqLbBT0raqCFUV0sZThTTttqJcgwrqSHlMgxgBUIhJurTQ9HmL8yQwjy53kdIm2CErhF2ypyeB + IePmqeSKrBoW8lf2zpwkf+WxhnohMkkAi5iMxbCZi5UcS1pBB+if5GZEnP4gzXHPNRox0O/D8DDHaoBA + pN2GhnoDMhmebzJ/E0NWscc5/knOaUWSNs34k0lrUFNN/9FgolhQRx9fTeCZ5TWnKjjXHAORbJpz16rC + lFET5sx2Yu4cztncPAE8h3n/TOauY4z1o2Mc81Hq40gRBgfoV6mH7dTJVupmexN9bBPHNqdGW65EaQfd + Rt1tYu7XmBWR/afzuicV6F25Qgx1Mg71qTG1n/rbz3kc5pxNM2D5XAdOW+DF6vluLJphpg7r0V4rFQQC + UAtQSn/pop9yc4zcYYJxXnuQOhzlfKaqipCtK0ZNswp1bdTNLtpTrxWN7SakaE8Rjo2fumrj9820XZk3 + mT8rbVNIYIW8o8g+olbmsjbOiTyWFpMiQgB7CfQnqwfDpUIklSBEQKmQCWGC5piQvkaCPYNylJXxaZ5j + Dce8qUYIYD2BsRV9zL8mpb+FNtXCxzz28TjS6cSUbh+m9gV4/UEC6BBGewMcZyuy1NeEECAJxousHk05 + O1ppSy2M5/U5F2rqnKhv9KGtM46RsXrMmt2F8ZndyDVXwuMzoYR5nZC/xcWF0Gg1sNpsyFRlMX/xQuy6 + +GLcesftuPO++0/K7Xffhxv33YErb7gZF19xPfZcthc79tyItet2YXB4GaLxLhRrIigoDqKwpBSFqlLq + fwRObwaJVDv6hudj4ZL1WL1mC85afwHO3nABzjz7fKw941wsW3UGFi0TAngpZTGWLF+KxUuXYtq0adS1 + YcoQhkcGeX3NSCTj8Pu9cHuccDmtnA8jbUcLnUYqgPOEriLyWEU7pN3ZrEIumuD22ogXzLQ3NYpVhcpe + wSWFtEsejfysW0/fbBYCWI2Ml0Cd2CdLDJKhv07xKGRFmDYf5OMA40CgzARv0AyHXw+LRwOz+IIT+qPI + SeL3hDhLFMm3gJbKYa0iVo/s/6s/2f5ZyF8148ckySsiLZ8LmH9PEsBC/E7KJAE8SfyKaMwFMPF/zB6K + VP+eQgDrT/FRQgCb+Z8WhxYGC/9bXwKVQv4Wn5B/VwILASw+TL4jRLa0uPcE9fCW8Viq5fN8JwQHRaoo + QjEbIgkXQnE7fGUWhdCVSl8zbWpSLMR3VrsadpcWTrdU/hr4OSF/jcpzB8XtEwLY8j8IYAPHRWkDLTfm + KNICerIN9KTI/9mdPC+OhYvi9Wrh952oAg4Y8kQwr+NUCQVo1xKbeT1y01akzFecJ39PESEdo2VFiASL + lGqhFG1cKoHz1cAlFOZ2jKnJKPMq+qwkRboAVNGHSUvYOkpNRYnSHk6kmnmfVObUVpZAWklLJYbkAg3V + NuZ/0qLOzN82I0V/IvuRSvcQH/2X3IyUm5sGIcFlHKg7MjYKCcz4I5XBVvqvUMiEqmovunrKMWtuI9ad + NYT1G4Zw9jn9WL++H6et6cTE7AwGeoL03zbkmAfLTds501NYt6YHWzaOYtt5Y9ixbRouuXAcl14wih0b + u7FJbkovTmH9ohQ2r6jBhWubsWNtCzYuyuCsOUmcPiOKFaMBxmIrpjF+j2SKMVhB319ZhBHm1yPpEoww + xo2mtRjOaDGoiB79vPYejmVbeTGaT0gd45xS+UufXym5Sow5A/NtIePlxqMQwGWyaJ32FqAt+unXTwrH + SmSyCktEKob/TQBLu06jUsH174pizrNsy8DPRJgDxEvViAflpp2GOZwaYfoJkRDtOeig3tM2ZC9xJ+dB + IYFtxQjSrss8Op6PbJHFPII675P5cBYrrYwzIT3qmWu2Zl1oyzrRkrYTG5hRyxhSGzWiOqxHhv+bkWrZ + gBqNtLfOqB5TMjbMriKurLJicZUDK+u9WF7rwUL+xuy0FTOY107NWjBcZc5XDkonIh57GC9kTIX0q+U1 + 1hPHNPJ6W4QApnRGitDLcR2k/gn5NiVlwnClQdmTtC9RgkHq7VBWKorNGKgWQtmOvmoHxYmeKhc6q9xo + Szl57mbiGtoTr9NHX+OV8aD4qJc+HoPUyyhjboJ5c4qfk/195Tu5pANNSRfq6TeqIhbmogZiEq3SYjtO + G84TwAZUhMycBxOklbuP/s1tZ14m+ZNSqMAYLzog96+oD2LPsl9vImyg7RhRwf+RVs5SiScLPUo5z7L9 + huR5EdpW5ERr0CC/U0aRlp4iEfq7vDDu+zWIiNBfCKGTCOmQ4rzI/oJywzdLbFdD7FTPcWtJ6dDN3KuP + Oe8AMd1AjZ75L/N15rdSGbqcsX5Fpw0rO02KrGg3YGmzBgsaiWVyxZjDfHY2c/15vcQsA1qsHDZhzYgF + ZzC/P63DgMX1KixkzrOsyYilOSPmVREjMeeaw3xIKn+n0gcN0WZkS5wBYoy+eAmxHPMQ5tyN1ANZvDxA + TDq9jjip3sbfs+B0nu8G5vqb6/XYRux1YZsFF3ZbsbXPik39VpzBvHplF8+xswiz2wsU8nc6sYkQwFPa + CzG1rRjTmYPP6DRgVo8FE0PMv4ddmDtIne23KVuzzOm28LrMmEvfML+bOKvdiVlNzNGJcZUKdfrMgQod + ZuU8WNRRRglgfqsHc5sdHDcPVjIvWjMSxmljISwfFELTj2X9pVjQ48PMZjvxgBMLuvxYOhDG4v4gpjAP + lrbbA/Q7M5ptmNXGz7TaMbOFj1t45GvjrU5Mb3Hx6MF4u4/XVEop4/UEMdQcQE8D9Zs2l4moEKb9+Ohb + pNpVSODJxdMZjqdUqTbQngbp1+byXNbyHM4ciuCM3lKs7fRiDX9/ZaMdi6rNmE07GyPG7mde28nvSVV+ + E+clR7zdGJYW6xTGDWl1LHveNsSKiM2LlKpZaZ3cT9ue1l6KGd1lWDxWgTPn53DGRD3WzKzC6mkVWDkl + iWUjceKxMl6nC1Oog9M4FvOkvX6vF7Pa6RsatOhkri5b47QSX3UzT50u2/WMhrB6PIm1s1L05RVYS1k3 + I4UzKWvGEljSH8ZEdwSjLTG0VpWiImxUfKuH+YaPEmB+Ld0Yon4VKiIGxjw7Wur86GgoRXuNB7mUjb5O + iyr6cNnXVwjgasbWtgrGgFrpNhXCwtGUcuykT8vKIkv68QjHXVroJ+U71JNaYremlNw3saO32YshzttQ + O+erxYt2jk9jjRH1VbTNCp5HeSExHmMzxzLM7wb4G16Ou5dz6BFc4c53EXDQb9kpsvjTxevwS8xgrh/n + deS7/wjJK4tAhehVKzFC4onsPa4IHysLQ+ljgsSOLv6Ok34vRL+fTkibVw+qkk7GHgvHRYhZN7qJh6cM + RjA+UoaxAQ+Ge+08OjFnqg8LZpVhwYwwFlImpoWIC3wYoO52EQu2VmnQwutrqTagnWPQ1xrASHcUUwcS + mDJQjsGuELpafOjk2EiF7lhfDOOjGcyYUoVpI2kM9sbQSfzQRNyd47iPDSYwc2qG/12Ovq4ytObcqM3Q + p8cY86ibASU+ch6C9OGREuY5+S4aUk0p7XTrs0ISmpQuJi3Enk2yEFnmgPGnISvVjcQ7/L/pg2HMoW7O + GuD1dPsxvcePGX2lmDccxZKpKayYUY21Ew2UHBaOVGKkxU/ddKJN2vczFsqierfMD+Oq3VLCfKdIyXtM + zIlNjMUmyQv53My4I52cXNQdL3N66ejlpv44KEIAu5g7uBlj3fTnDub30sVL8nnZ2kW2S5EuXjqK/JZU + EvsY1+IBPRJBI2KMSZIHBBmfhACWeCQEsOhJLWNic4NUkfqIk4nb6fdridtrJM+jLtZI3hcvQl2Mds24 + nKOdy/3DVtp2N3O+qS0BzOkSkjeMGbTx6ZzD8WbqSJMHo/VujPK35TMzuyKY3cs5647T/4YxTF/V3ygi + hSelGGwJYrg1hJH2CCXM52W0Pxdqk8x7IpLXSC7EOaUdCLkvxzLmubKoQUTam0foz2RP/UrGOCH70+XE + tpKTxo2Kfks+KlLKx1UJm7LNQmcuRH2LUP/KMW2gEvOm1mLpzCbOazNOm9WEpXw+uyuOqc30z82lzFO8 + vDa/0tb57HntWE85U0jdKTVYMZJVZMlQJWZ1hjGFtjLGMZnWG8X0/nJM6SPe7Y5hrCeB+eM5LJrdioWz + WjExPYeBjriyz7ZU/5Zyzkupv3m8ztgdkU4eaiWfzwv9SozzQz1upr9vb6bdNPnQThtQpNGNFtpYI3Or + 2jR9WiXtjjbTxTnpb5UFJyHaXxna6tzM9S2oFpKZdlMZVTNn1TJPYA7D/y2XXFJySkpFmDlQ3Ew/YMsv + TKOfqWMetWRuDy7beToKZmSMmEPDWVZvxboWBzZ1uLG9x409fV5cNuTFNcN+XDfixc0jDtw2YsQdwyW4 + Qwjg0XwL6C9OFOCVlSp8/xwzfrvdhQ+uCuHwDVHg5vI8+XtLGsdvSOKjy2P4y+4wfrzBjVdPs+DZJcaT + BPBDQgDPtuCBeTY8vNiHh1cEcNcCN64bN2LPYAl29hQzUSjAhbkC7KFc3VmCmwb0uH2KBXfNsOPOWQ7c + PsuKG2eacPVMDS6fVYLL55TgkokSXHSCAN65VI/tS9TYvlSNXSu0uGyVDtesNuLG1SbsW2XC7SKnGXHL + Gj32rtVi7zo1bj5LhX1nF+L29UW4a6MKd2/S4p4tFtx7gRv37SrFvZeEcSdl30Vh3LwzjGu2BHHR+gC2 + rXJh6zIXLljmw8Wry3DJqhAuXx3B5SvDuHxFGJctKcNlS2O4aHECa/ocBC4MzAQerQxOnRkGzSoPptYE + sbA6hHUpH7bGHNhJB3IZHcrtoUI8llHjhS4bvjnVgu9PaPCb1Xq8s9GN93eE8fGVFThyS12e+L2/BXig + Gbg3h2N3VOPwzZX49JowPrm6FB9d7cGHV9vx4XV2fEQ5cKMHh/eW4ug1ZTh+RRxHL0rg4I5yvLvej1+u + tOLrM1T4ApOxB+sKcF+W858swD3lBXiAieAXqrX4eocPPxqO4Y2+AH4w6Md3Brz4UpcTNzL5Ooegb4KJ + ax8NXsBBgoYsK9ycBJlyc9IhBLBC9goRnBc7QY9DKpxsTIb5vIbOb4DJ9HImLucni3B9bQnuzxXh+a4i + fHtUi5/Nd+HNFUH8dl0cvzkrgTfPrsDPz6nGq6vSuGvMhwvqdVhOBzjMhKHRTqOx6RnwTQQSBjpVHVw+ + LWx00DYm/tK2z8fzSvP85sYKsLtDj6dXxfD7SxvwzxsT2H93KY496sXxJ+3A404cfciBj2414y+Xa/HH + XQb8ZosB31+rwqvzCvAa7eMHywvx67M0+CNff2uHBn+9xoQPhQB+knby9Ubg573An6cA/xzH8fen4cjf + R3H07UEc/2Un8I0G4OkKHJd9Tm+24ci1Jhy5wYz9N1rwya0W7L/LigMPOk4hgCmveHDkm14c+0EA+GkI + x38ewbGfR3HsZzEc/3ECR98ox4FvhvGvr7jw3hcMeO8xHf7+qA7vP27ER0/wt79kxeEX7Dj0sou/EwK+ + lwJeq8eRp5vw9m21ePp0Ny7pLsI66sHqdCHOajRjI/3Gxm4PzhsqwxldLkzUCdDLJ9uy72I1nWOKAVX2 + uU5QKrUFyKgL0KwrwBS+t5xg4vy6Qtw9TY9X1trwuz1BfHQLx/qOMA7fH8LRh6M48nAcB+6P4qO7I3h/ + Xyn+fqsfH9wZwcHP8fy+nANe5ni91gO81A4804Tjj1Xh4E0cZ+r5J5c68OEeHi90K8Tv8cvDOH51GNhb + Rl9FuY2v3enHkXs4zg8FcfTJMI58OYrDz0dx4CsRHPhq5AQBHMaxr0Vx/NUY8GqcQj/3EuVZzuUX5Rxp + W7c58OeLNXjzvEKFAP7WaQX4Bo//JoBV+Cr14atnl+AV+pVXNxXg+7tV+N2Ndvzl3iDefyyN/U+14B+P + NuGNK0K4f5kWO7oKsLa6APMqizCX9jSnkYCcwGJOswEL29VYRTvY0F+A6+er8dBqLZ45W4NXz9Xju1IF + LLJJRPYFNvF1A148R41n+f9fOkeDe1apsGdGEQFEAWalCjCD87aOoOvG5fyNq8x45xGO4dMBHH2W8/Bs + HP98LIRf3u7Dl3dZcMncIqzhuU00FWBaoxYjTEaGm2RfGSemMkGeKrZfo8G6+gJcTFB310g+XvxulxUf + XOfAgRtMOHy9Bgf2FuHgzUU4dFvJSQL43Wt1eOcqI/54uQ2/v8yD315Whp/T1/5whx9vnG/Ddzar8Z3z + CvDzPVq8c4sH/3gogg+/nMLBbzbg8E+bcPjXLTj8VguOvN2K43/tAP7aBbxHWxOR/YCFAP4r9eWtdhz/ + RQOOvJHBwVcSOPB0GPs/78MHd4fw1tUJfPPcEO6drcdOAtLT0gVYTLA3p1yLaQT6w24t+ozFmGorxFKC + 341VBuwi+Lus3YarCG6vbbHiGiaqlzFpvTijw84KNXZWFuOCdPEJAliVJ4DpZ8aYCPXQP3YTOPSFitAT + lZZqBE9MHnLhQuSYzDUR1LVlzegkqO5r8eQJYCYI3fUOAkgLGhlDaqVNKO2uknaXoGRoW3XJErRxLrqk + SkSSZvps2feygdLIc5DV5M1MOHIEMG2MR8P082v6SrBvqRMvbPHhhzcE8afPhfHek17842kHPnjOjQ9e + DODvX6Vf/HIFvvtgCk9cGcfV6wJYN1Va66mVtlVCACsglsmfQgBHBGTy/wh0hdxu57X1MPkbYgIzXmnG + 6o4QzhosV2RtTxBLm+xYSP1ZUFGIZYw3W6lHNw1q8MwSL3OJGN7aWo5/7Ejgk0tSOHAJ49ueBD7cEcV7 + 5wfwzrYyvLUtws+V4ZXT/HhyoQcPzPXj+lEXtrdbqJNGTCRUGOa4j8RUmJUheK23YT792USTHnObNJgr + N0kaZIFDCV9XY4JxZIJAd4JAQyGAOe6y75XsAzzM2DSTx4WVRqzI2rE8bcHCuB4T1Is5ITXmhvWYz8R4 + CWP84pQD8xNWzAhrMcqY1MMEt5VgMEeRzhPVBIUZggfplhGV1Z9yE4ogwUXfKTcCJ8VL0CBgOE8AlygE + sEICCwEsoDGkQoLXVlupRxP1Typu+2vpm5u0THRVGGuVlfUFGKXtKwSwEMG007FulbKnqhDB0/sNGB8W + EtikkMBSDTw+aMTUfiP6O0rQ1Vx0sgK4nv6jVtpO0kbqkoz3UrUUK1QIYKlKr46r0EAbqK/U8D3GdYKU + Wn6uJS0VtHq0VesUYrg+wdeZE8mq90bqfk9KhzH6k3m9fizoF5GV9B7MaLFgtM6AgawGnRU8l5QWg40O + jDK5Hqp3oTGqQSXzJtmPrKWc1039HyW4lX1/R5p0GG7UY4CxqiuT1/sOSn8V9aG+GNNyGooqL018TpnV + WoKJdqkKFgLYfJIAlgrgNvrnOvrO2lQhqqT6lyAsQ+CVZtJfQb1IRLRKq68Yk/SQ3AhUCGCVAhyFAJaF + ZzZXsSJmB0Eh53WS/JV9MrUEmpPkr8hJ8lfkvxDABiGALSq47MytXFIFzLyLviXCHDJRzvHlWLe329HL + XL+vj2Ck04lG6n4mTeBwggCOcg4iFKWVGY9CBst7QgLX1RJ405fUEoBnMhqkOO+yd3CFkMWUSo5FQy39 + GXVk6pgFM8ZtmMs8fe5s2s9s4o6ZOsyYocP0cfrS6XpMmarGCPHFQL8KvdS/ro5idLdxTjm2rbS9lrpi + NFOaaotRRz8sxGdtJf8jW6hII+etnXrY21KEIeruaI8KU3qLMGNIrRDAK+a5sGahD6uYK84fNxHY6dBc + VYI0/ZGsQvZTRxzUFSd9pkshgAtRSr8c4f9UVBUhVc15zVGneU4NHVq0dFuQ6zAjXadGjPMtBLCVfs5I + WzZw7ozMcZXWsXYhjaQykfOhEL9FsHNOlHZiVua/lPxWKGql8ijAHFSI4FLac0iqA2QlL8FdisBYWk2J + VAkBXCEtITkOlYUKAdxaLxXRVopZkR5KX7NFkd4TMtLpUlbzT+sLYlxujgxHMKW/DF2tDmUPYKkslAqG + 6qwQ/FY0NbuRYzyvITDNVNtQW+9FS1sE/YNZjI41on+gHpXpUl6bGirmc0IAl5QUQ6PTwGyzIJ3NYP7C + Bdh10R6FAL7j3ntOyr6778KN+/bh6r0347Jr9uKSq27GJZfvw9kbLsOUaWuQqOjnb8ZQUFSGQhWluAxa + Q4y5eg2q64YwY/ZarD1jG87ZuBObt+zB5q27cM6523Hm+vOw+vSzsHTlKixcslj5f5G58+dhaGiAut6D + gYFennsvWqQCOBmDz++By+34vxLA6hLaI3NWi7kEDqceDpcZNrsBWr0KxUWFUBXQFoUApggB7NRSh0xF + KHcQpLuFAGZsdpUgQ59eIYt73BpE+VoZ/UBpQIdg2AJfmfXfBLC7+P9MADtKFLHxt0TMLiGNhQiWCmId + /YiWuqiGxizELq/hFAJYqf7lOQoJPEkAK/v/UjQ850kCWIjfyaOZ52Shfk4SwFLpLiTwpEwSwEarhqKm + vypBiVZI31MqgP8rAazKL7716eDmOLiVign1CdFQtPAGjQhGbSiL2WlrFr5mUPb1NdOuzEqVrhDAfMzf + EhLY5tDA7tRyjmTfNZkrnfKa1S7kvUFp4y3k78kW0HxdITl5Pnr6WUV43SIG/r6IWSpApCrEpVZEujVM + ksA+SsCnVyTI8xWZJIClnV+eAKYIAayQikL6FyjE7+Qx5C9UWr6LyE3QSsasVIIiiz0S9FVxqaDIt+eP + yo0z+i0hgSvpe+Q92RMsw2MlPyMEcBUxb02SuRi/L4+l1V6GuWtdyqq0hKtlnlJVaYVUqpaHpNWgdOYS + /c4TvycJYOqGgfHFwDFRboSaORYUj0fL+GCiX/BhcKgCcycaMDG/nrZWgzkT1fTrFejp8qOOuadUM6fi + Jaivpi/qLMP41AwWzK3HkoWNWL28BWetbsf6Vc04Y0kNVs6OY/GUUiwdK8XK8QjOmF2BdXNSWDklpLRa + XcDYP6vNqiz+6ksWoTNaiA4hdyidjFXdfK5IjO9xPDrLmUsz12vj/zdFi1DHGFjDz9Yyt5DKXxm/Co5j + kjEuxXiQiDLvkgV0J+ZJCOAA7c1PWxRyZlL+kwCWG5by+f8bAay0leZnRKLKjX3J3dTM4agfCgGszRPA + 9hLmeEVw0nbtxMwOjr0QwEL8niSApUqY/sXv4O9RH8tpP9mIGfUVDjRnXWhOO9GQsPA1HXGBBtkyvSJp + 6mPKp0aWOtnA5x0R5lHlBowmDJjKfGVmuQ7Lat1YVsN4mbZhBuPOlAoDhokxBtJ69BHrSFtJqSRsr5Su + Psz7JMfnNdbzWgX3S0XwJAHcTTzTF1Ojn789xP/ojzPvihQrbWn7mA8OSQthxpkpDXIT2kMM4sJAtQu9 + kwRwxoXauAUVshCENidEkLTYV0hgjo8cg7TVKOOrEMAVHMtKXmO+HbSdY+BETcym7BucEJuk/5K9leUY + Z7xNlBqQpF+Jl5kVAtgvMfkkASx2wRhPHZAYXcr5CfI3IpRYUE9blCpvIX7zVf5ys9rPXMLnoV4wfofD + /GyU500MIARwKSXIzysksFyPSKn4C+aGnJO8CNnD+QxplJvpaepkllhJCODGhBptzIl7aEuTBPAg8+ex + BhNmNdtOtAZ2YmmHDUvajFjapseSFuaszPvn50qIbUows7kY05n/z+oqwbw+De3KgFXM7c8YtGMNc5tl + zI9XNBtwRrcbazvdWNyQJ4Fnp4h3mXcM02Z6Occ9nPMe2lFXmHguWIRW+q4cX2smthshJp3V4MQC5uTL + czacSSy8ib+zpUGHbQ16nM/fP5/nt6nLhI29ZqzrNWB1rw4Lu4i7iEXGRYhNpnUXYhpfG+8swQzm3rO6 + zJjdbcWcPgfm9jsxp18IYAevg5is24aZnVbM7uR7nVJ168I4caS0TW6nT2jleUoL5BnSrpZ+aF5HAHNa + PZiZczC3d2Mpc6MVQyFFlg4Sg4oMhbGgtxQzW50Yb+b/tUtlbwBzOzwYYh7dwfHorijCNGlr3uKkEBc2 + 2SgO5b+nSnViE3Mv/ucoj4OUgZwXQ01+9OWYe1PXm4kj05ESpUvApG8RUkEI4QR9UaqMwjghbaC7GQuk + lf3pg1GcPRTHWczhTuf5rG7yYEktc2xe3zjta4jf6aEttvA3Gii1zE+rGWOyAeJL2qVIFX1hlr4vwznL + Umppq80VOnRVm9HfwHNtdGJmdwirZlTjtFn0zdPSWDoSw8KBMDFYKWa3eWm31MOUBv0ZNceI89DtxYw2 + G4YaDArp25xmjs4xyhET9NbqMK2dnxkIYhHHdeFAmSKLmY8u7gtBtvGZzjEca/Siv7GMuDWAirCJvpM4 + SWyeOYaXR6nQLBUSuFRIECEH3WitC6BVIYDtqGbOnKF/TfF6hTiXa25k7GtLGXlO1IcmL7pqHKinn0vK + ohz+ZpAi1cVxjlllGWME428jP9/KMZW9THtbS9HTEkBbA/Ni5sP1WSEmdYzTjBmMuVLtFw1LZw+eI8fb + yd+aFDvjqp1x1UYfZaXI0UF855F5Zv4XKTMo3X9k8cfkAhDZh1ZIX4knshhUWRDqz3cQmSSAhfx18LeC + Hvo8aWtfKdWTHsZbu0L8yN6pLfVO9Lb70NvhQGeLAe1NGnS36zEiWzwNOihuTB9yExNxvttt6KSNyj6y + UklaTYwuOUV1Qovman6/kTrbHiL2D6OnNUh8Jq1sSzHQSSwxWIGpw2mMDVZiuD/J/wihudHDmM+xquaY + d8f4fgqDfeXoagsiR72vqpTFM8yBOWa+SRKN+p4gTpaKZ4mhQgDL5+oyRuI8k0L8NtWa0FBjUBarVhOP + VjOG1FMHZe/UDupjD/1NV70J7bRPua8g9xd6G2wYFjK8qwyz+oUgTmCE59FeZUOuwsz4YESEObfomItz + I4VoQgDLAji95EOMM4ow1shRqn+FuFXwtegnc4DPEsCMIcRxTuaCNsYNq1sWdDJ3YjwxMq5INy/DCXJZ + 9CHAGJNgrigLkSQexRiXQhJvJN4psYfzHtQiQ/1uavCio8XLowU1nKs0/U+W2Lw6KQQw8z7qZB3zQSGB + 62NSeCGLPhg3OJYDdW6M0L5GOTcj1OUR2rnE2z7OUXfGgu6sDb20jX5+TraP6OGxs9qJduaMrbIlQ8aG + FuUohSd2tFY50cY8oZF5QjWxaUWE8TCoYp6TJ/V9HAupfPdS10WUXFdyn5C0TZaqWbGfPGEqeVOCuYpU + v5dJHJXvSb7F7yVDetSm3Giu9aOtvpS6F8JARxTT+isweziLuUNVWDhajdl8PpoL8HpcvBYH8xMLOlJm + zOkpx0KpGh6oxERXFOPU3+nNAYofY/QH4u/66O+G2wO0hSim9MbQ31aGduYkbRyH/vYYhruTGOmhfndX + 8jx8zLONPM9CpTuBnKsQ3LEyuQ4NcwnmdByHKP1wlLExxmMypkVNhtiaYyp787Yy1xGRSv26DHWddiat + suXYkDYhV2VFc5UDbXX8XI0bjRzvmoRZ2fs8FdczZ1VTtEq1b7lsJyHbSjCXSPBxRdiAVMRIPCBbSjFn + oZ5my+1YOKsLF29fi4I5KTUW0TDWNlmxgc5hGxPrnf0epfr3iiEvrh324YaTBLABd4yolJv4QgA/NLUA + zywoxOunqfGTc634404vProqjMM3xIGbk8CtGR4zOHRdEv+4NIq3dobxo41efG21DV9WCGCDQgA/PNuk + EMD3zbXggYVuPLQ8gLsWeXD9TDMuG9PhkmEt9vQUYVdbIS5qKcDVTFhuGTLgzmk23DPLibvnunHHXAdu + 5G9cNVOLS2aV4JI5alw0ocLu+RrsWqjF7sVa7Fisxs4lfG+ZFlev1OOGlUbcssKAfcv0uGO5Hrev0OG2 + 1TrctEaDm87gf5xZjH1nFuKO9bzmDWrcea4Wd26y4PbNTtx2vge3bPfjph2luHFnCDfuiOO686O45Jww + tq3yYdtyH7bzOnYsC2D3siAuXhnCpcvL+N+UEwTwnkVxrOm3YSRTiM6KYhqb3Jj0MYkIYDaVe3l1Kc6u + dOPCuBWX0xnuJSB8kEDmy3U6fH3Ajh/OtuHni3R463Qj3t3Msb8ohkN7q4E7T5C/D7UBD7fi2P05HLmr + GgdvrsSHV5bhw8v9+OhyD492fCzk2DVOHL7Rh2N7y3D8ujCgEMARHNwRxr+2BvDuuT78crUFr46X4Ms9 + xXissRAPpAtwHwP6/ZTP0+k8z8T9m91l+BoTo1e73Hip04WHmYheQSe8jgBhDkFV/wkCWFa9+2ksQgBL + 9YODTtZJ0H6qCAHstBBw2anIBDlNTOanlZXgzAoNLqlW4w4GsCc61Hh9SI2fzjTiD8t8+PPpEfx1Ywp/ + 2ZzGn8/L4Pdb6/DGWTV4dCKCSzusWEuQMo0G2ebSIGOloTiMTP4Jogi0XARdNoI8kUkCuIJBYAoTos31 + Kjw414+fbK/Ce9dV4qPbS3H08z7gSSfwmAvHH3Ji/+1W/O1KPf6824i3tpvwi3N0+K5Uxi8vxC9OL8Ef + N5vx5+1m2oAOf73ajI/u9uHg4zHg5TrgR53AH4aB96bg2N9GceivQzj8hz4c/Vk78Brf/2ICR+Xzey04 + dK0RR26wKgTwp7ea8ekJAlj2AD78JcrzlJedOPZNN45/n+f40yCO/zycl59EcOyHURz6TgSffr0M/3ze + iXe/YMRfHxcS2IC/U/71hAmffMmKgy+4cPAVL458KwJ8l3b8Wg6Hn27F27c24Mune3Ep7fHsqgKsTRdh + c6sdFzIBvXAkgp3TynHuYCmWtZgxnlWhh2C8lUChgcG9ig5cSOA0A2aVqRB1DKid1IHZTD7PrC7CFf0a + PLPGi5/tieP9fVkce7QGx5+o5PWXA1+I49jjURz4XAif3BfEB3f58P6dHuy/n9f0BM/vKzng613AN3uA + VzluLzbj+FPVOHSbGwevteLTK6z4+GIb9u9x4chlpcA11HNloUoZ/RTl9gCO3enDkXt8OPxQAEefCOHo + 0xEceT6CAy/QFl4M4+BXwzj0UhhHXo7g6MtRHH+F8/cKz+2rkwRwDEc+V4aP9rnxzqU6vHleMb77Pwjg + Irx0ZhG+elYJvnp2MV7ZWIyvn1eIH1+ix9u3e/HPz8Xx6dP1nMdufPhUF35xYxqPnmHFRQOFWFtXgInK + Qsxh0jMnZ8fsFgvmtmixsLUIqwiSNvYJAazCw6vVePYsNV7dqMO3NxnwnXNFjPj2ZhP/y4hXNunxwjkq + fOlsFR5bp8Kti4uxbbQYK/g7stfpcKQAS+oLcNEcfob6+ut73fj4Kfr1Z+I49HQSf/98BD+71YcvXWjB + RbOKsJogbU5jAUEAAUCtEX01FgxWmzBaZVDaLs0naDyrthCXtRfhPsaNry1X41fbrHjvUit9jxkHrtHg + 0+sKqdOFOHTrJAFswLvXGvCnK0z4LeftF7tc+NGFHnx7qw9f3+RUWli/dFYxXltfgB9cUILfX+vAX+8O + 4p9PJPDxy9X49Hu1+PQn9TjwZgMO/a4Jx4QE/nNHvu2zkL7v9QHvCgFMeYv29yZ95o/qcPTrKRx8NoL9 + j/rw0b1leOuqKL59bgAPT+hxRW8BNtRS56tUWEngvTjtxETMjhk+HeYSsK9iML6AwO4Sgs5L2qy4pMmA + yxuNuJLg/OKsAbsqGYOSJbiwkuNNEK0QwPyt09KqPAFMX9PLhKmXx0GC/P5yNToIJloIRIQAbiDAaDix + IrWt2oqunAu9LT50E5h01FjRkjUziWWCFKN/I6ir5O8oBDDns4H/LdW/PUxu2uusTCq0qEsXK+1qcxkV + mpk4t1Zo0RIvRE8FQXdTAc4d0+Lh03345u4yvLkvjHcfD+H9pxk36Dc+/YoHn75Sio9eK8c7L6bxiy/W + 4JU76nDn+UlsmZD9RAiaCB5kP6MIkz+pAhZCukaugdc2SQDL9fVHZT9dA2YRAK8miDidiflpPWEsJSif + VaXHuOwxxWuYoC/Z1MD4P6DGI/OceP2MCH59fiX+sjOFf16cxT/2pPHejiT+uj2Ot7aE8ZvzIvjBWaV4 + YYkLD4wbcdOgAZd1m7C5QYvlCbUSk4aDxejkuUkL6ulZ2lM9gWkjj01GTDRrMSEEcK5QIYDnnSCAxf5m + yyIMgsKZNTZMY8I8SmA5ShAzk8cFlSasYMK2nMnw/Dg/H1JjtggTtIlyPZYweV6ScWJhhQUzCFLHCPB6 + OUZt9I9NlEYmk9XeYmQI8JT9zggapLpDqQIh6BBxidB/euhLA45CRPg5IYCjAQ2FSSePkmDHwkI+yspQ + HeeZIEghgHUYadZjSpsGUzqKTxLAo52FGKUtj/K10a5JKcGUHg3BofEUAthMMSkE8GC3hiBQhQ7mBEol + JnOZBtGrlIrAWc2jRlmNKjpYSR3OEIxUc+yrCVDkcSX1VCpv6hL8PONzQ2UJahNFqOJcZxk35IaEkMDN + vIYegu3pbdSJLg9m0sbGO9xM2q0YpM/pTmvRSsAjiyTa0wQ49S4MENi0JPWoot7V0oba5SYj53akidJs + pOgw3KQjwFGjM1uItsoCtFP3u2kTg7VF9GclGGtQKRXBYw2FikxrVintoed1GrCg/98EsOwB3MZ4WEv/ + WaMAMZVywz5Fe5VVmpKgJ8I6zgfBfRmBTVAI+hL4OWdCAnsoTgI8mzMvZgdBob3wswQwQaKsGD5J+p4q + er5OmSR/dXqCS2MRLBb+rr1E2dbC42LeJTefSwsRVaqA1aiXVd5tdnQyX2trdyHH8clkCBx4/vF4AUKc + A2ljFuQciIQ4V/J6paw0pm3W1BCY8yjPE+WFKOe8iUjlcIKfq8pQJ+oL0SstxUdNmDHNjJkzGL+EAJ5l + xCzKDNrmOGXaND1GR/UYHtJhaECHvh4tejq16GoVApg+qq4ILZyT5jqed5a5ZKoo78P4WKSR+tdC/9yZ + KyBQK8JQZxFGmafMGFYrhO+K+S6smu9RKoHnTtVjhLrbmBEdlGo82hJt0E5xUF881FdfrAillAjnNJkp + QmUVx4zXUttSgnraTnO3GY0dFqTrtIjRpysEMH2JEL9ChgmBb6LdmjmP0vJLCGArc12b3FQQESKJeabS + BUe2RHGqCJJp627qBUXAfpB+IFJK/YnqlSq9GvoWaYdWJTdE6K+riRtqOQaNzImbadfdOYJ3Eep4DyVP + CIsQ0FOGaTcj3aW03ZCySn76cBRjA2XobnMqK8il/XOG1yJz21BvQaPsRdTgQIbxrjJjRoZ+rSFXis7u + BAaGqtHaUYGysBVa6luR6j8IYOu/CeDdF+3GbXfuw5333nVS9t19J27cdxuuufFmXH7tjbjkqptw+VV3 + YOPmqzA+60xksmPQaCtQWBhFsSquiE5fCV+gFe0d87Fk6Racc+4ebNq6B1u2XXSCAN6GszZsxpp1Z2PZ + qtWYv2ghZk/MxYxZMzE2bQq6ujv4XX6/sw0dlKamBsTLI7Q/J+wOy/+ZAKbkCWAhv9RwuUxwuy2wWnXQ + alX5z5wggLUUA79rV1OPDIUIE9MkHWpkPDpk3FqkKUlKwq1HhK+VyUr/EwSwt+yUCuD/CwF8co9gV74V + 9H8SwCYhgG3/JoCF6J2U/ySAhfjVmkugs6gpKmiJv4T0/QwBTKyUPy+1InJuJp6X7AEsZLDc1MoTwCUw + WEqgpl7I3sgnSd9TRcP/pYj/Mopd8LftnnybPKdPqn81SuWE7J0m5K8/ZEYwakUgbObrRuWzk9W/Jku+ + +tcoN9RM8vzfRLBSDezkZzkO8pqIkMFSEezzmeCR6l+Ok1XOWW7yUT5DAPO6pVpDRCGZxY5lzJVK4GKK + CrInnJvi5TWIBDifIgpRxGsJK+2h862glRu39Pdi29ISUm6QyVFaxuYr/ulziJWlzaO0kJOqgYq47DWq + QoLxUroVxOmLZY+8OONjOY8JihDDlRH6KRHG2hSPmZgK2XiJsk9YhnlXMiwVU/QbCTN9px21WYfSbrIy + bubv6nkexN2MOXJj08hxMJ5CACuiVKtIFUwxpQg2joGXuW8lf6uDuVv/YBx9AxFKCN19QTS3uBgfjIwH + xQjxXIUErUxokatnztoaZFyIYLAvginDccyamsB84sd5YxHM7vdhRpcNM4jbZ3YS63Q4MZsxagZj1TT6 + Ndlapj+jQWc5YwKvvYk+u4W/LxVuzRR5PClNHK8cfXMjY1c984BqviZkR1qE362Q8eNjIdMT/EwFx6ki + qkW0rIRxQeZJJE8A+5z5dpuTcioBXPofBHCccf5/J4ALEZL5Vkj//LwrrcF9zNtOIYAD1F23uRB2zoGF + tmKnrbipg0L8Buk3/C41z4nxwkERQtPDOBzQIxu1oK7CwZzPxZzKrtzYToe0SDHnSAnxS12UfXMrGGPS + vLa6Ui2a+X5HUIUu6p50axvmcXG1A0vo8ycqzJhWzrjMXKaX+thFnepMEp8IbmDu1sw4Wc+xEwK4lrFU + IYApk/MirWc7FJJQhZ5ICfrijO08tgSZl3FOhNAayhiZczkxrdGHKQ1ejNS6iCOJcbJOhQBu5bXUKASw + URkbuUejkL+0Uan+FSnl4zBjbpw5c5J+JMn8Sq61KmJBbdyGLI8V9Cey6Eb2Vg7SpsvovyJ8HqP/jZUa + EaGtCsnrpW1PEsAe6rm0A1WqsOSGvFdH0VM/Jtu8C1nDvI66EqAOCJEhxI5SGSZVwNQFIX/LQnqUBrWK + BDjmQgZPdg0o9cvvys1+ldJmWkhk0SVZABanL6gMMY8+QQDnklrmuQb0EGufJIBpE2MNFsxqkUpWF8WJ + BS0mzM3piF00mBBpKMFsyqycGtNyxZjSzJy2rRhzmOMv6DdgxYAVpw85sabPiVXtVqztdmPjSATnDIWx + kjnCRLUOMyqYEzO/k62KOui32jnf0la5izbWzvmUlt9ig61lzL8yJsyus2Nhow2rmuxYzxzkvCYztuUM + xMoGbCUO2dJqwLmdRmzoNeHsATPWDhixpLcEE92FmNVdgJk9hZjRV4wZfG1Wrxaze4i9em2YK2Rvr0tp + Kzyn34m5Ay5M9Lkxu9uJGZ0O+g5pu+zFeKsLY4129KaIEainrcR9fVKZ3OzBRGcZP+PDuFSw8jMzeJzf + G1TIyCW85sUnJYp5fWWY2e4mBnAp1bwz+LtTczZ0p0rQyrypmznwaL0NU3IOvm7HVF7vtGb5vOAU5l2N + Qqa6OF92dNc60EWM0tvoRZeQALSz+rQZaSHCOKYe8S+iOzxKC9Son7FA2gDzvQylmb59WrUZq3tCOKM3 + gnXdZVjT7seyBp4/87SZtK+p/K1BfqeTviXHvLaGIp2QKumDBJdLe2mpdE3K8YSIT6zl+DRLC/YqC1p5 + Tq3MN4ca3Zg/lMSyqRksHqnA/P4IdaYM421e2qod/Vk9/QFtm5hiejPnpcODqS024jCT0nWqJU18lyxE + LkEdSZegt0aPqRy/mR1ezGj3KDJTjtI9jjnnUIMNg/Ue9NSXoinjZzwz0z+q4WGOIRWvbubXIl4+F5sr + DxtQnSLeqyml+JBLOVEdM9DP0/45dimOQaa0CNX0OfVxjUL65oRQJB6vlCpFjrW0k5c91IN8HJNxob1V + JfScF4tSideek/06Azz60FTLvDhrZe5tQqZCpyyyljavErPL+Hs+jrHYvuyjPylW/rayZyx9lIhUjgrp + l68Cpu9mThNh3heiTwnTpyiLxZgryFYRYRFZSCLC1yYXmggpLgSwi1LK/KO8zEh84EVDVSnxkYf4wEac + YEWNEEk10jpYj8Za4gViqbYmNfpod8PdVooNQ912DDDedjWZ0FyjVRZmyyKylMTEcBF1U4O6lI3j6+EY + BNDdItW/IY5JkFKG3nZiiaGMIkO9SfR1xdHO93J1XtQyhtRROlvKMNjD97rL0c7HTfVeZCvNSPC3g9Q/ + 0XvxnbJ3uuyNLrFTYmg6aVIwT03GwN8xKJXXjdWcvyodqon9q4jtqyryC91qZasLxpP6SpXS+U62QBOp + icuidFmMYEB7rXTR86CvyY+OGicakhy3OHVBsDnnTRYayLxIcVqeAJa8P0/6nirSJUUhgBkrvIylQgIL + GexkLuDkdThlfhiT7fTrNs6xlZ9TtnNiTJkkgCVnlapiO2WSAE6HTEjyGGOuLYu6gsztffzdAH9Pth+o + KDcRV7uVStI65ldC/ibpg9IJ6rgs+OP1VzFfrJH7LfQV1Zy/WupzXUSFXFxHGyRGrKIfqqL/ovTIMWNV + iNImjkUuYeCRUmGhL7CiiXNUX25ELeejmli0SiQmwueUGp6PkJKyZ720II7wHKUDhvgwaXMueyRPtj2X + cRX7kG4z4TLGNsa0vKgV0jcuWyJw7sPMVSRPCtBvCfkr5GqEOl8RNVG3nchVeZV20V3UsQHRva4EpvVU + YPZAGtM64/Qx1NNKG1p5DTmee1O5AX21bgw3+umL/RhmftHP6+7ldffSlruyFrTLfdUG+h/GhakD5Rjp + iRJLB5RuOQ0ZO5r4m631AYV8bqkJIJOwKAtQZMGO0p2A5ynnLJX7sqBSdFi2cooqC/zEfvOVz7Kgu4a/ + l6t2K78p0sg8Jyt7BguhK/ft6KsyMeo1X5M90BvSjBGysIX/maFvy8Y575Qk8zaF+OW4lQf1zGPzx0SZ + gX6T+WfIyNxGi7ITCxsqIzZMTO/A7i2noWBhphirG7Q4u9WCLd0OXNjnwp5BNy4Z9OCqEwTw3uFTCeBi + 3DNagHspD08pwIuLivCd07X41XkO/GVPAB9fHcHRvQml8he3VeP4TVl8fE0Cf7k4gt/tCOOHG3145TQ7 + nl5ixuPzjZ8hgO+dY8a98xx4cJkfdy32Yu9sK66cbsRV0024YliDS3pVuLSzANd0q5R21HdPt+P+uR7c + M8+DO+c7cdNcfn6GBhfPKMGe2SrsmkOZKMHu+Wrsoeyez9cXqXDlEi1uXG7ErctMuG2xDvsWqXH7Yg1u + X6rBvpVa3HqaBreczv9YV4zbKXesL8FdG7S4faMe+zZacNMGO67b5MS1Wzy4eosPV20txTVbY7jqvBh2 + nRHEpiUubFzgwnkL3LhgsR87Fgewe3kQFy0NYg/loiUhXLo0ht2L4lg7yGShvoTJmw7TO31MasKY1xnG + oqYyrGYg20CHuythwnUMWrcT7DyeLcFXmTC9MdWBXy104Le8jnfOsuHv5/vx0aVxHLutAbi3NU/+fr6D + 0oYjD+Rw6O4aHLglhX9dVop/XezFhxe58eHFdnxyhRMHrnLh2A0BYG8IuD4KXBHF0YvLcHBXKT7e7sfH + O8rw3nml+OUqB749y4yv9GrweF0hHkjmCeCH6Hi+kNbj+SYXnq634ktNNjyZs+I2OukL6axX0SHPouPp + ZXCso3HE6chk9aYAzfweaATR/0VcBOohuw5ZnwHdVO45EQ02VelxDRPHBxi4nu3X4/vTDPjtfCvePS2I + f55Tjn9tzeD9C6rwz+1V+MuOBvx0UwOeXZHCjSM+nCPEWUyLLjrjKhuNjL8dkaoLOlcXQZCdiYSNIEwI + YL84Yjr2PjqqM1KFuGXMhm9trMA7V6Xxwa3S6tcPPOEBHncDD7tx6E4H/nWtiTZgxp92WPD7LVb87Awd + fna6Br9eb8Lb59vw5x1WvLVTj3evsuCTO/04/Fgcx79SA3yvBfh1P47/eQRH/jKEg3/qx8HfdOPwj1px + 7OUaHHsijsN3eLD/OhMOXiMVwDaFAN5/G3/nbiv2PzRJADtx5HnKyw4c/6YL+L4X+Gkp8DPOq8iPQzj6 + RggHvlGGj18J4B/P0Gaf5Dk/bsS7j+Xln09a8NHTduz/ihcHvhbAsW/HgO9WA19vxeGnO/HnW5vxzOkB + XNZVhPXZApyZLcZ2AvPLpsRxxcwULp/IYvv0GE7vcWNegwFDTPpkJbYAvTqOpbTVrmEArOP8NnF8++kw + F5cXYmubBndOOPGt7Qn8+eZaHH6kCXi+GfhKFSUJPEvdfiqMg48Fsf/hAD66Vyo03Tj4UAjHv5gCXmoE + vtEJfJM6/yr1/0XawVMZHOG4Hd5rw4GrLfj0cisOXerC0Sup69Km/ibq+q0cl30cozv8OH6XF0fuoTyY + J4CPfYm+7LkIDj1PeYHj9pWQQgQffjGkyNGXIsDLHJ+vxhUC+PhTMRz+fBgf3e7FO5cZ8OaWkv8ggGUP + 4EK8dGahQv5+9ewihQB+fUsRfn6FGe/dF8InX0jj6IttOP61ERx8fgR/uLsVT58bwOVT1Eob5XnpAsxh + 8jynyYq5rSaCPC2Wcy7W9RVg61ABrp9XhM+tLsFzZ6rx2kYtvrVZj+9s0uKbm3R4/Tw9vnaeDl/drMGz + G4rw5PpiPLC6ENfMLSL4UmFhfTEGI/l2QeNM1M8dKsS956jww1tc+NcT5Tj0dAoHvlCJ9x6M4ic3efHF + 883YPV6ElS0EabUFGKouQQfBUAeTsR4mWgNMIGdkNFiUUWF9VSGuaC3Eg8OF+Br978/OFTsx4YPLzfjk + cjU+vKoAn1xfgIO3qPHJbVp8cLMJ711rxh8uM+OXu2x4Y6sD39jowEvrnXhunRVPn1aCp1YW4itrOLab + ivGLyyx462Yv/vpgGP96phIfvZrBR9/J4BNp7fyLOhz5XQ7H/kC9+CN15M/dwF/6/i1vdQFv0gZ/3IDj + 38ji8PMxHHiCOnZfGf5wZRm+c66PscqAvYNFuCBXgA0NOpyVc+GMhgBOI+BYXG7H0qgR6wiWdnX4cAnt + YQ+B927G1YvrdLiEfmcXweeFTMy2EyRtJ1AUAnhLlQobOGZrMiWYTx8qBPAAgcdAqBAj5VoMEuR30m8K + AdzM1+oJsGuZ0DUQcDRnzWgjkGyrc6CZQK2hUs/kVot6JgvVBH/pcKHS/lkIYHmck31+Ghzo4XlL8iv7 + ATcQiOVSBJPMAWSPkHa5ocPzGKyknrUVYOccI760OYQfXxXHn+4rx/u0h4+f9Snk74GXfDj4WhgHvlWJ + f7xWi98/34jvP9KORy9vwIWLQ4xhZuqCSgGVQgCLKARwmOdPYJongFXoipYo1QBTUybMrnFgZWcEq7qj + WNJeirlMxEblxhABiFTpTqecXs3z6mRsnmLEF5f48d0NSbx5fhp/uLAKv9uexq/PT+JXW8vx03OjeOOc + KJ5f4sH9U424sr0I2+qKcRb91SL6oxEm6F1M2podHFfGonbGprGMBXM5PhME7nMIguY0M+YI4ddUhImc + CnMZp+fUajGLoGNG1oBxAu1pFGlnN8Zxn8Jxn5HQYT6T5RVM5pal7ZgX0+XJX8osJrgSfxanrViadWER + k9NZTOSmlBGIeQrRwQS3mZLzMllnAi2t+fIEcLESL4UAdhGIiMhjqQiWhC7oKmKCJzew8u0E5Sgiiaa0 + UUoxd6idJIAZP3sJAoebjRht12K0Q4WRdiF+izDSeUL4mhC/p8qUfi2mDxpPtIHOy7QBE0Z6dejv0KCb + 49RWLyRwEXWrhELQz9jflDWigbovlb+ZKIF4NH9TWqSC+hyjTpRT50VHq6jbVcxxsrH8ooUM35e9r5Sb + EmXSmkyDXiboA8wx+kUamLjXmNBJ3Za2ZXUEOfL5WupWm6xiJUhv49wI8KmPFPNzOgzlzLx2EQLfFj5v + 1qKvgT6L/qm1ogAtcoOCx17GtsGaYgzVqnikbxP/VkcbbSzGrDYt5nYZMb/fisWjLsxnDidkclu2iACU + MU4qZHk+Ur0lN+6T1Hchf6U1YJSgQKnO5jwpN/woQgJ7mZO4BCAqRI/q5AphIR0mCWAd51wI4FPlP4ng + kwSwoVARuUlvtxXDoRCMRQSoBFQc7zKObbyc85EmWJSbAjkLGpscaGgguKBvSBJMxwiYhfT1cY58/I6f + IntZCQmcSKiQJvDOUp9SGa3yPBalnfM92ftKjjHOYZq+pIpjmWsoUgjd4SEtpozRTsaNmDnDhOnTaDdj + OgqPowaMjhgxMmzAyJARg30G9Hbr0cncoCXHfKGeOsC5aqrjXGcJbtNSCawiMFNTeJT/qSogQCtAN2PS + QHsBAVwRxkc0WDDTjOXML1ZMuLB4lhWzRjUYpJ7XVRYSLBUpIFNW6Vtpf0IAe+kj/PFiBKm3EYLqRKoI + Ffz9SupBTXMJ6lq1aOoyo6FdKoAJWE8lgJnjTBLAMociQv7mpUQRm5XC53bmmSJCACsk8AnxUny0a2XF + N/WlPKKjLhFwV5iQTeqRpb8XAriWc1BHW6uv0iiLejo4fx2NFnQyP+hmDt7DXFykt9muyFCnF8M9Qdpz + GNOG8gTw6CkEsFRwTxLAUt1d32BHDeNFZcaE8qQBiQozstUuNLeG0UWwXV1XCgdz6OKSAmX/25MEsFYD + k0UWE2SwYOF87L54F/bdeRvuuvfOk6IQwLffimtuuukkAXzZlfuwcdPlGJ9xJvVrFBp1BYoKylFSXElJ + Qa+tQqisH0OD67BmzcU47/xLseWC3ZRd2Lx1J87ZdD7O2rDpJAE8d+ECTJs1A0Njw+ju60auJYf6XJ0i + DU0NvL4aRGMhON02WK1GOB0WYo//CwGsLYLZpIHLaYbHZYHVnP/sqQSwjqLncwu/79bSdoz00TYNUh6C + drcRlR6OpduAch7DHr1CEgYI3KUFtKdU9u/VnSSAheidXBgihOtnhL7i/xcBzOuRo1QEa0wqflY+n68a + VvYNthSdJIG19EOTBPCkKDe1RISMpr7m/RZ/h/m93qxS2tRPEr3/m8jCFvlO/hrUsPFo9xCT+WXvND18 + HJNAyIrSsA2lESHIDXB4tcrnxabyrZnlKH6PY0/R0/fJAhgjz8FkkT2C1cpj5WYbPyeVwEoVMOfD5dQp + 9mimr/xPAlj8br6qOU8AT9qzXKeIsrCDeMZGe7VTnJwLF8XD8RDxc7yELJqsBA7S35cpRE+JUm0rhKD4 + nkniME8AC/lbQpEb27LPqFRHyGMhCelb6YdjjIlxYiqFCJbHlHLmiBUh+ilKJfMskZQIvyvEgix0KZff + LJPW8SbUMP+oSTvpRxyQdpHxoIHnK5238qTvZPXvZwjgE2Iyclw5XjL+sm99tJxxPudHU6uPNuamuGhf + TmQZnxPMK0M8J4khUukck/NhXK6pps+hNDDva2l0obvVTZ/swXC7E8NNFgw1GjBQp0V/NeM+41Qv/Xx3 + WoMuYovWSBEaef319NUN/E2FbOQYyFGeSwtiRfhcKuZq+F41jxlKJV+r5HsVPCb5vJwiN/yj8phjKPFa + 2u1HQ4zTyo3M/GIc8cdC6rnlZh+PIpOVwJPVvyIKkftfCGBp7y03B08lgeXxv59z/vlfUm0con6X0b6k + stfJuG+VuaCd2jgXTuq7nzYuejXZGlJECGD5rrSQTMek/aeNuZcTNQkrssw/KoLMRfgfSS/zctpXOe22 + 3FmISuppNXWyMaBCjuMi1YJtjIN9vJYFzFUXZqyYnTBijOPSwzFvK83j+RaOVUuMMTnGvI+xvoHxr576 + KHMi1b/KvFDkN4UUlP2AO/i9TuZy3cxL5Sj7BMs2UZ1SHUxcM1Rlx0iNm+LCMHPo/iwxS8bx3wlg+pjP + tICmBGivshdwlHqc8DFu8hqli066zMgxMKOSviQuJDt9qZ+f8/PzASGBOQZCvoelep/j6nOpOM+y72++ + +leqrD2O/Fgri7Nc9Ncn5qDUK0dZ1MHXJVc/oSdyw1uq/lwcSx/z8VJpLRqkj2c8F/EzZw8EpHMA55H+ + 3ss5kf/1Sp7GeZHfEL2SavGIX/Y7LUKauaxCAFfo0c6Y3FtrzRPAtRYM1powypxYqlTnd3own3Y0XqfB + FOLM8ZoTUluMacRB02QLGOZkw43MkZpln10t5vQYsaTfhjXDbqwZ8GBNrxfrh0PYNiuDLeNprO0LYk6N + EVOZ3w5xvrs4b630Xa3ePAHcw5xP9tht5zwr+z5zfsekwyTPcVGjFWuabdjY5sDWNisuID6+oMWIbW1G + bO0wYFO3ARv7TThn2IIzhk1YPqDFgr5iTPQXYU5/MeYMEjvxtblDBkwMWjFv0IV5Q17M7ffydV9eBn18 + 7sesHi/GuyjtXkwXgrLZhaF6OzqJgZqZzzUzJ+/JWjC1xYeZnWXKljGj9FXDDTZ+1s1xKMU85kcLBiNY + NBLHwuGYIhN8bZz4Xip5h3MOjp0FfdV6Yg/pzsVrJ84ZqLMq5OWwdBrKOZWWqlOavUphz1CDG13VDuIE + K5pTVuIjnpNUgdV60JihL640Ke08pVWq+BgRJ/NIIUzEr0SpB+W0zQqOuSy0GKS9LOI1rGj1Y2WzD8vo + Q+fzN2dWGDA9qsVYRItBYssOfzEa+b0q6mEFf1P2uZU2x5MLsyclzv9VMDrPoYnnIudZE9WgqkxFXTNT + R6IchxTm9ZVz3EKY1hrgmNFGq5hzVmjQGi/iUY2xnB3jbW5ev+wBTBxWbVDalTfxveYksVmlBu1SLSwt + 5DlO0kY+LzZiLAf9vR09ss0Vx6W7vhTNVX7GLyuEEJUxkfgk946lnbJPFj/ThpJRM2pSPrTUlKGluhSN + aZdCTKXo8yrpw1P0bSni4QyvJUtfXMW4WiUVwhJf6YOkI6W0lPfzN6XqWmJBgvEymzAQY0gbZRfacj4K + Y1yDh/k28+K0RSEvJS+Phumz6ReDAebs9PNSBSqkr3TSsPB3leN/iCyystBnybWIXwnS90hXh6Cbvp94 + UIkDjCVKXJCYohC/kyLkMOMT/ZuQv9KuWO5jS/v6mhTPsTaCRo5DTaUT6XJilIQeGekYVFHMc6b+EMs0 + 0Qd00f762y3E8Bb0tFvRRWzcWmdAPWOtbCshOD3NeJ2KqBXSSdrHNtf40d5IzNAcQWdLBB3NYbRTutti + mDJcg5GBKvR2JdDO95oaAozvQgC7FMnVB9DZGuP/xtGaK0NjnZ94w4pyzoVsUSRzmifEpU2wBomoUSE7 + ZX/kDPFHFfWomnhTqn5FapgPCPkr2+GIVCf4nLgtxVikbOnAoyzwmhR5no0WoZ6200SdbuU8NlZyHqXV + dFjDPEC2V5D5YHwnFndJF5kTBLBsDfKZKmCK5EbCYXhk4S7nTFnMzXzIRXsVAli4BAfnRbrzTC7YnMT1 + Crb/XwjgTEj2utcq936CjFUBysk8g+Mk4yW5Ux3PP8tYUE5/HKek6N+UMShXK9sFZJknSTfAFONulvGj + uozxgzpfz+/nyvW0SaNC7jZT5JhLWhQiPBuRIhLZSoLjGtYqx0rJH4KcE8ayhNybOkWU1ylxYhghacVf + CZEvc3ly8YMIx0qey30I6YAmW5TJllhR/pfkW7KvfjSozd8jUXKv/O8I+atU19IWRP9TtPfaSgcasy60 + 1PnQkStFP/VtuCOukMDDrVF0MGeQ62lkDlZH/NwQ06GF+LUjbUNXRuIBHyfp55JGtHIcminSRbFbFuv0 + RomPKzDUHSOe9qM2RdzLHKgqmf9fkaqEXSF55ZyE/HUrdpzP5fIEsF4hs+V6lK58PG/J7+V9WdQhuWE9 + 8+/GrFuRuhTzcPpsaScdp6+K8rMxiuTs8rq0cs4w/8kwd6+MSI5nUl5LlPF/Svk96k05cyi2N9wAAP/0 + SURBVPjJYzJkot1a+b4RZdQ/N/NGWUhYHrRg1mgbLty0CgWrq4twdpMWmzvNuKDXip39DlzM4HrZsBfX + jvpxw1ipQp4JAXzrsP4kAXw/5ZGpBfjasmL84Ew9frvVhb9dHMQnV0VxfG8KuKUKuK0OR/Zm8a+rkvjT + RVH8ansYb2z046un2fHUEgsenW/C52cb8bk5Fjw814b7Jqy4Z8KB+xd7cOdiL26aa8c1My24bpYV10w1 + 4IohDa7oLT5BABtwz3ieAL53wovb5zuxd64Fl4+rsWd6MXbNKMSFlJ2zi7BzThH2zC3GJXNVuHReMa5d + oMWtS4z8DyO/p6EU444FlMUq3L5cjX2rS3DbWhVuO4PP16lw53oN7t7Iz2404eZzeD5nWXHFOXZcsdGF + Szd4cNEGHy7ZUIZL1kewZZkbZ8w2Y+10I84ct2DrAj+2LQzgwsWl2EnZtTiIPUvCuGhpDDuFAB7xYEaT + jkmCGfOHQlg+JYnl/XGsaivD6bVubE6bcDGd3k2VJbgvVYSnG9T4OpOln8x04PdLXfjTaiv+tsGNf11Y + hk+vTOL4nU04/kA7jj/SCTzejaOPt+Pggznsv7san95UgX9c7Mc/d3nwwU4XPtzlwP5LXDh8hQe4Nghc + F+IxAlwRwrFLAzh0sQ+f7vLi4MUh7L8ojvfOC+M3a0rx3Vk2PN+hxiNVBXgwWYAH4gX4XEKFx+iQH87q + 8EC1EXdVGXEFHfNGgr+lBAjjBLG9VOR6gl4BHV4ai7IXgjV/g1KRE8TvpLgJ3GMuGm7QjCEGgoXlOmyr + M+FGBqzH+qx4ecSMn82y4O0lTrx/Rhgfb0rikwsy+GRnDT7eVYN/7MnhzfOb8OqZtbh3TgzbmXzOT+rR + V6pGLZP5ChudDh2yQgAT4NnorC10XHaFoCa4pkPupNOV1qNXdhvx4poo/nBJCv+8MYID9wWAx/wUjt3D + bhy7242P99rw3iVWvMNxfXu7C7/ZaMWv15vxu3Pt+NM2J/68w463LtThvcst2L9PqojjOP5sFvhWDvhF + N47/YRBH/tiPQ7/vxcFfdOHQG804/JUMDj8SxYHbXLQtI/ZfbcTh6/j9G2UPVRs+vtuCTx6QPYAdOPSU + A4efc5wggJ3AG27gJzzHn5bxyPn9YQhHv12K/a/68eGLHvztKZ7r40IAm/FXHv/6mAl/e8KCD5524pOv + BHDga9SH7ySB79UDX+/A4ad78c6tbXh2bRCXdhRhfboAG2pKsJtA4boZFbhxfjWuX1yDPbMSWD/kw5IW + JtnpEgwkCPY4/zkmWvVMOhs5zjkGtDYGhzEmndJW95JBI548PYyfX1WNf97TgONPtQBfo7xGP/K1cuDF + CI49E8ShJ/04+KgXnz7I8b7HgYNSrfsFqcKt5Tny8683A680As/ze0/SHu724tjNNhy+3oKDV5lx6Eon + jl/ty7d+viUM7OM13sG5vMunEMBH7/XhyEN+HHkiiKNf4n8+G8GR5yI4/HwIB58vwyE5PheklOLIV0I4 + Lvv/fiXKc+PxVAL4UtNnCWBlD+ACvHxmAV6ifPVsyno+PqcQr28twq+vseFfD8dx8Ms1PH+pZJ6OYy/P + xLufG8QLFyRw9bgBZxGozWfiJiTUnGYT5ncYsbxPj3VDamwaK8buqYW4aUEhPrdKhWdOL8Yr60vwrc0a + Sgle30y/sUWDl7ao8cJ5Knz53AI8vr4QdywrwMXjhVjbVoSZmUJ0M0lqZhAb4PG0tgLsXVmE165y4q8P + V+DAUzX49LEqvHtvOX5yvR9f3GzBzilFBB4FmMbz6ksVElxRYkVojxSijwnJ7MpiLOXr53KOr24uwMNC + AC/S4kdnG/C7rXr8Y7cBH1xUjPcvLcAHVxdg/80afHKrHh/cZMFfr7Xjt5fY8OPtdry+wYYXTxfi14bH + Vxjx+cVFeHhBAb60gjGI4/ij3Xr8+loH/nRXAH97Mo73X0ji/VcT+OA7KXz8oyztqQ6H38zh2G9baWft + wJ+6KT3A25TfSwXwCQL4W9U4+tUkDj4VwkcPRvDWlaX43rlePLXIhNtHGVs4TlubjTivzYdN7WGc2x7D + Wia4qwno1tdYsavTi11tNuzI6bGjQYNdtTrsrtLhQvrCbQRA2yvVuDCtxQVMsLdWa3BOjQanZUqwgD5m + KhO1YcpIpBhj9FNDCS0BdbHSQq0lXIRGSg2T8dpyDRrSBuSqzKgTIiBWgkoCm2Qpkz8CtmxUnhcyMSs4 + sQewismuSSGAuxqlVYsVTVl+nyCsOSUVkxSeW1eiGD1yHvTrK7oLcNUS+tjd5XjzlkrqYQU+eiaG/c/7 + ceBFxoSXAzjyegxHvpfFJ99pxF9ebsUvnurFMze2Y+fyMOZ3mvibxajw5YHmvwlgaUVDgEnA1E7pjesw + zERsasaKWXUuLGkPYTFj39wcwXs1QSCvuZvf66PvGOZvLUwU4JyGQuzpYoyeauX8h/CN9SnOURbfPTeN + b52T4PMYvsZ48JXTQnhghh3X9mhwXk0BVjNOLaBOis9pIWjKMqFPM4lP8XEjE62BSiNmM/mb2+zC7JwJ + s5v1mNUkrbaKMVdWzddSshqMc9ymVhJgM/EeoQwndRhJ6DCVIGsmk8l5FSYsyzqwTKkANmA2gYXILCa6 + QgAvIuBZRjC0mGBqDhO4qUwS+5nodjK5VwhgxqBaAr4qAryET62AgFMJYDkK8Ssir0ubWNn3ozzIxJwJ + dJzHGBPIeKlUAxEIlGtRR8DTLK36GJt7CPCGWkwYaed5d2gw3K5SiODhjmKMdJbweQlGO9X/Fo71SHcJ + pvYblOrf8SEzZgxbFRJ4bMCI4R7G1Hbqak5FAF5MAK5Ba40R7QT/omvNWSa6/P8aApN0LE8CS5WS3LQO + cy6kRbhUMEk1cCrK+eAcpaNS7SD7XvGznH+5cVslK1hjajRQ/xuZVzQJiKM00E5khavc2JVW43JjV/Z/ + as1a0UqQXkd9a6CNdFbxujmvw/SdIy0GDLdw/lr1GGhUo7O6EE3MZXL8/xbqSSdBci/9YX9VMfpoDyL9 + 1UIEF2K67A3cYcC8PjsWj3qxYNCDUY5nR7Wa9kiAJfs1Uh8qCaQqCDpktefk3nBCAIcImEopAV8JAgQF + fs6x1yMEcAksQioIqXEqSOQ8KwQwZbIK+H8jgKUFtNIG+gQBLMBVWnUqJKOrSLkx4aUdBTieYQLkeHkR + kpUE+RnOD+erptaKTJbgk9cQpR/383Nuzo+I7GPlk+9yrqKcnyQBd2VKq5DF8lmlWpjvKZXCfBwR8E17 + ndwPuDlXjM72YvT3qhTSd+oUPUZH1BgcKKHIUYuhQfq9QSGAmfP1mxUCuIu61do0SQCrkavTEPzT19F3 + 1aU5txmtQgLXSbWx3NigrXc0cc5OIYDnzzRhKbHFsrkOLJhhwszhEvS3FhMs8zx5TVJZYBOgyvE5lQAu + Ky9BhH5RCOAk9aGCOlDFcxECOEcfJwRwpl7/vxLAk3OYb08rooKJohDAPEob6FMJYBGlIpjflxsQQjyE + CB5jYakykL3GjEhT39NJuZmjVVrQ1VOv65h313MOW8XmGiiNVnQ0WNHTkid+RXqEAO7yE9zK6uYIpg/H + MG3kswSwrCJPJYuQlZssNQS7dTZkswSZ9I0R2lRE9Jn+q74hgJa2KOJJO4ymQoX8LVEXoEhIUBV1UKuB + xWJBOp3G/AX/nQC+/a47cNMkAXzdXlx65Y246NKbcNb6izA2tgbl5QNQFSdRWJBESVEWJcVV0GvqUB6b + jhnTz8e6M67ClvMvw5YLdlJ24LzzL8Q5m7aeJICXn3YaZs2fwIhU/g50o6mtCdV11chWZ5CpyaCqtor6 + nkEkUgqHwwKLWQ+n3UzsYYTZpPsfBLA81vAaJwlgp9MMN+UzBHAhP3OiAlhIYAPFrqL96GgbJjWSLhMq + 3GYkPRxTStxrRthjRKlPR5vUwxswwu03wOrV5tss02aF6J2sAJbW8J+RE0TkfyeADQoBrCfOEQJYSF4h + fosY90ROJYCL9VLlS7/j0MPslO/pFBJYRx3VWYqgpu/R0A9Z3Gqem0Y5PxtFqdj1ScWuGnYv/dcpN7jk + 5paaPknF/5oke+Xxqc+L+VgWthjp8yxOaSnNcxAfyGsWEtgfMqE0YkUwYldEnktVsFyrfE5aP08SwAbq + oezbq+Zvimh4rTrpikA/KFXBij805yuDpQJYCGAPx8jh4HjxdfGV/xsBrCceFDGckEki2MT3FCGelRu9 + NrnJwmt38DMiUjno43woVYMeqQzOE4p5USkt7qTCq4x2LpVMIeJjuUmktAOWOM54HmNuJyILuvKfLUAs + UIjysnyMj8n+hZS4tJcjxq7gZytCxLcikhdKJTF/pzxAvMt4E6M/SYYMSiu46koXqipcjFU25g9G+Khj + UpVk4vjpKQaKUgWs4zX/FwJYfJrg5WCE/qjGhZp6B23MxqNNOaarTSinnwozBgcYv8tCKsYO5ij0YbKY + pJz5UTImN6eZIzBPaKHP6ag1obtGj27mEZ1pFVrLC9HAvFghF5nX1ktOyzHI0L9mOR519N9NStvZQtQx + RtUy16zm+4rweZbvT+4DKQsSleo3vie5QozPoxSJAUKsS5s+aT0pN1glVpdJrOZcCTHuob3JDU0RIQcV + EpjzLjf/lHatnkJFJlt0yk1AaWEpeysLASx7CsvcCuEr1b+lPM/JG5uyCCAg46jogbSBlfaHeQJYbvBP + EsAW6qaDz08SwEIa0m4mRb4bpX0I6ZxNMJ4n6L+jJoUISQZUSvc1WYAfo33JXrlRnnvCIeNZjHqeUyPH + pIXnIt1oeqmbcxlvJuj7Z5QzVwqr0c73mzlWQurmGCebGPOaJWdivJSqxBznKcd5kveE/JXfa+Dv5XjN + zXzcyjFu43tCBLfxsRBTOb4u5HCXdHlJMD+lXvRVWtBXwfiVsqA7bf83ARyzniSApRW2h7o6SQB7OTZC + 6JbSDsO8vnKOhVxn3EX992tRKVUxfj3CQuDy2uW7Hn5Puuj4OZ9SQVfq1ipj66YdOGSuaeOTBLBXREhg + l5rznZc8AUzfLb6K35c9HEXcTto/v6/4BNEX2rYvKBW/BopUAevhlwUukvfRl7kpSvzneSkkCEXIP7mh + /G+bZ2wmfqqOEf8Ra8hWQN3Mr/tqpdLShv46q0Kijbe6MdEVwIS0J2aeNMD8azRTTCnCWFURRqsptcUY + qCPmqWeOmyvClFbiGslpeyxYOUg8O+THmsFSbBqvwK6FDbhgbh3WDUYxp95CrKNCH+e9jfMriwVaeezm + vPcR83dTOuU9zqcQ/FNSesyhPS9ptOD0FhvObbfj/E4bLuywUizY3mXG1m4jNvUa8wTwiAXrRs1YNaTD + kkHi4qESzB/WYN6oHvNGjFgwZsWCUScWjHgxf6QUE4MBzOF5TsrsgSBm9pZiencAUzv8GGv1YajRhd4a + O1qI06QFaiMxRGfGzJydn2kLYqTZg4EGJ/ror4Zzbox38Xf6wpg7EOV/JDBvuFw5zuFz+c3hJvksdZMY + p0266FD/Rdp4rfmKbJkPBwYbPcQaPow2lxJnBNHf6EMT9bqeOl4vFXxCAle7iOPdxA2004RJ8T1SOeei + TUrVnI26KeKlfkplapQYMUF9qKLNdPI6pGvVHMoEcc7clBmzpFKfOdqUqB5jESMGgzq0E0vW0y+l+f04 + /ZW0Og7xt4MUqXwN8/cEg0X5mxUB5sT8biNzvKaUnViKdkT7bSBOH8oFMbevArO64pjCsRtp8KCPGL0r + Rb9dLou6i5Q9RofrpeW1B4M8im5KK+m2ND/D8WkhXuhIGyj07/T30i2uT9qYy7YA/JxSiZex0d6d6KqT + 6mjZ8zKIqoRDabUuPljuG4uIDw7S5hJhCzIJFxqqgmirj6C1NoTGjBdVMeZZpcQnjHkVFOVYKqKmPyR2 + kQpTPo/6mOvTRsUPyH3pAMdEFlqVh9RIc55qMw401fnQ2lhK/CGEphvVxPayd34l348zNw+VqpQuHtLy + 3cOxnCR/heT9jNDniJx8jz5L4q34GL8sKmG+5mfeJd0mRCQvmFwcJgRSxC8toWWbJ50i0i1AKoAlDpXS + hyTDVoUAbq6LUiLEBF5UyjhI3k7/mqSeVjDHr6JPaKwtQXuTEd2t9LGUjmYrsYOZ+ih7KguJqEFNko+l + 81A5sQBz/castN4Noas5ht7WBDpbyom1Yvyu7PVbjinD9RgeqCVmS3KsyvgfQTTUBlBf4yNmEyLYx9dD + aGuKEs+F+HoAmUoH4y3zPOqpUhBGkUrgIHPKWNjI8+U4J6xIJQwK7slUliBbqUaWtpdN8nFSjQz1TxZd + C/GZoR4m6X/k/pdI/ITIIi8Rudcg98Rqk3rUM++o5hxW0O4kR4owBsq2D9KBQfy5+1QCWPJJipDAk3Iq + AexnHpzH8vTjnDMHY4CdcygLN6XyV1o/S84qubGO35HOMjrmrHrieCGAHcTpQSfnqNRwkgAOM1bLFl9K + xxEehQCWriFxnm8V7aSa8bEyLt1KGMspssVHlYxRXKMQ99I1ooJ5UdJfiEp/MdLMD/NSgkwZP0u9qC03 + oo6+p07IzaQFKeYrCepzjP8ji05izEmjlAgfhwWPMhcKU+SYl/zrZbxuaVddRglQL2UOpeJXSF/ZM1lE + 9F5wtpdjLIvgw7yOaESDMG0txBxF9sIWEfJXOmnIQgDJs5T8io9lMZTYg+SwKeqMLGJsrHKhtV72/w6i + ryWKkc5y9DeF0crX6xTyV49qzm0t/6sxLkQv8TFzi1ZecxulRSqdlWpnI9prbPl9rvvjmDpciaFu6jft + vkbGOaJTJE17EpF9ycUWZU4UApjXKSS9sliHr4u/UraHKNXTVqWyX3I6sWvOqeRg9E3VSQfqUh7UU2qS + LubgxNicpzDHp4x+t4y+OcR4EGPuJu2vpRV+ZSQv6biV82zj6/n9omPMbWL8nxjxY3kp7YZ+MRWmbZWa + 6FOoh9RV6SIT9RsxPtiM889ZgYKt7Qbs7LVgV78Nu/os2M3jxQMOXD7iwfXTynDzeAQ3jwVwywkC+M6R + Ytw7VoCHRgvwhekF+OYKFX52thF/3OrCP/YEsf/KGI7fkAFuqaXUYf/1Wbx3eRK/3R3Fj7eG8K31fjy3 + yo4nF5vx+XkmfH6OCY9M2PHIfCceWuDAffMcuHehC3cs8uQJ4FkWXDfbhmunm3H1iE5p/3hdb4lCAN97 + ggC+Z8KDffMduGHCgitm5AngHTy3Cyg7ZuTlolmFuHxWMa6eU4ybJjS4c6EB98w34O4JNe6aW4y75hfh + 7oUq3LmsBLevoqxVYd/pPK5T4871Otx9rhW3b7Lj+vU2XL7OiosouygXrLXi/DVOXLDGgwtW+3H2fDtO + m2bEimEdVvMcN85yY/OED+fP92P7ggB2LAxi56IQdi2O8rkQwF7MbNZjvM2CxWNhnDY9idOHYzizI4gN + TCIuyOpwZVaD27PF+Hx1Ib7apsb3Bg14k2Pz9ko33j3DiQ82B/DJ7ggOXJPC8XtacfxznTj+ZA+Of6kP + R77Qif2fy+GTe6rw8Y0J/G23D3+/wIl/bXPgo+12HNztwtFLfcCVpcBVQUoIuKIUxylHL/fh4CVeHL48 + iCNXxvHpniT+sSWJX68M4JtjJny5uRgPMZDcw6ByV7gAd8aLcVuiGDcS8F1DJ7Q9Vowz6IznMyGcRnDa + S6dTTyevEMA0FnF4QvRKmwVFBJiLWPJHD49Jtw6tEQum0nCX02HvbDBhHxPILw078Y1pVvxmwob3ljnx + 8ZlhHNicxMHtaRzaXYODe2rw4cU5/OHCFnz73BweXZrCJYN+LMkYMCDOgA65gv8dI0AvZUIvN1+t4qBp + mDaCBh+BbYxOuYWGPREpwIXNOjyxMIBfbK/A366L4eM7SnHs8wHgEQ/wkBu4x4ODt7jxj8vt+OseF/6y + w4e3trjxu01u/OE8N/60zY0/b3fgrW16vHexBQdu4vcfoK18mbbyjRzwU87Zbwdw5Pd9OPRmDw7y+cHv + NGH/synsfziMT2924qMrDPj0KgMOSdvcG2349FYbPrrLjI/ut+LAozYc/KINh56z4/BLdhz/huPfBPBP + OLc/5Ll+P4ij3/Bj/8sevP+cE+8+bsI7j5jwl8fMeRL4UTPefcyK97/kxscvBHFQ9rh9I8vvSXvlbhx+ + qg9v3dCELyzz4uLmQmxIF2BLvQaXDfhxy9wU9i2uwS1La3Dp7HJsol6vpE5LC9exCgP6CPoF+DUxOWqh + w2xjotTDhGkiXIhzG6gzMxx4aUsFfndTHT58uAF4ron/yeO3U8C3osBrZTj2oj+/z/HjThx42IpP77fh + AMf+8JNhHHshDXytDsdfrcXxr2Zx/OkE8GiY88IxuM2GI3vNOHStCYev5rhc6wX2Utdvoeyj3MExEgL4 + bg+O3kd9f9CHw4+X4sgXQwoBfOw5IYFDOPRsUJGDz5TiwDM8l+c4hy/yMy/w/WfC/5MAPq8E311DH7m6 + AK8LAUwRAvirpxDAcvzG+cX4/V4XPnmsEoefrQNe7eY1j/N65uDvj47hpR1ZXDvLhrNbCYjoAyYatJho + NWBRl57+Q48tM43YM6HH1RMl9JvF+NyKIjy9Ol9p/M3NKnxrC+UCLb6zy4DXdxvw8k4Nnt9WhCfPLcYt + ywqxnb58SQNBYiIP0HMMOj2cq4V1BbhsgQovXOzFH+7J4MNHG/Dxw3V4945K/PTqIL64wYqdQ0VYUlOA + KdI6tZxJJZMrkVZ+f4CgcH5lIdYRcO5upC/t1eBLM7V4fZkBPzxLj1+dq8Vft2nw9+2F+PvuArx/eQE+ + vUmDT24x4P29NrzDufrlLiu+tcmC508z4InFevp7PW6fSX84Tp8zqwCPLyvAixzP71ygxk8vM+N3t7rx + 9gNB/PXJIN7jXP3z1Rg++E4Sn/4wg4M/qcGRnzfi+K+oW79tzxO/IvL4V0IA1+PYt6tx9OVKHHg2io8/ + H8Xb1wTxw01ePL/Mgvum63BFlwoXthlxQYcXWzvLCF6jWN/kwzoCnXMIdLc2WXB+oxbbGjXYzuOOWh12 + 0IdvS2lwQZo+McPntIkLawzYVmvAOTVahQAWYnNcyEn60TEmp9JSeIAAryNIUFXK8QwXK1WzddESVPP1 + mgodqulnhSiThFbAW4R2lQqVKKvEhfiVla2SCFfx87LasYMgt6PBgTaCruaqPCBrS2vQmSpGBxPp7vJC + DPI85lIXNo6V4K6zffj2tSll7v/5eAX2PxfD/q/4ceCr9HUvB3D0dfqvH2Rx5IfN+Ne3uvCHrwzjpTt7 + cMnaGBZ0m9CeLFTIuCgTGZE8AVxCAK5BM5O+DkpvXI/BSjPGMlZMr3VhZoMP47VujGVtPBcmZAH6Cl5b + F0X8hZDkS6hr62oLsaNTh5umu/DwoiieWJHAkyvK8diyEJ/7cc9cJ/WEeUyPDlsaVFiV5HXxu1N4Dl2u + ItQw9sS1THD1TK6YlGboj1p4PsMEoFNrrZhRb8SsnB6zGtWYxe/PrivBjGo1xjmHUxP8XFyNfvq0Ps6H + 7Gs2wIR7jCB5RtKECcpiAsQlBNFCAM+NaDEnqsXsqAZz+XxxpR0rqr1YlvVgImHjNekxwLgoBLDSAprH + GiaAWSaMUsUgBLAAUxfjkZNAxM3zleey54jcFJCEUYhfae1Ywf9IcIzLywiCSosIhtQEOFoCHb3S+qit + moCP1zbQYsJwu56ixWC7kL+qE0c1htqF+NWeEI1CCouM9eqVql8hgYUAFpnCx6N9jKmdenTm1Gg+QQC3 + 1Ym+OdBR50B7rexFZ0VDpUEBlamYrGgUArhQ2d9KRKqYpJVlBfW/QghgAhkBaekQP0sdUKp1CMoFyCTl + Ob+bChYTKKmQIpCRVmYR+q3wpK4R5DQQoDelCGo4P/XlBLu0w4EGI4YIekdbjRhrN2FKhxDCOnTVFCn7 + U9Xx/xv4/0ICdzC36ckUobeqIC/ZQgxUU4d4neNtekz0OLB4JIAFgwFMabOji/bcmNYxoTcoq0UrYwRx + UbkBbOCcMCnnPEfKtArAUYhfubF8ovrXw/zD6VQp5K/cVM+TKCeIFOZK/+8JYL5G0VKvRZRVytQbIRll + j2GpRhEid5IEDtImZI/feLmQwJyfahsyWTOS9C8R+hYhfIU0VoTzJDc3pJIrSL8UjVDPCLjjlAjnU36r + lPMYpExWASfinCv6lCTHViqBG+lb2ls5jv0lGBqkDfUVo6uzEN2dxejuKkZ/D/0e9WyIejbYZ0ZvlwFd + 7cwBm1RoqhcSmCCuRqNU/8o+y7WfIYALP0MA9woB3JsngOfNoE2eIIAXzjCfJICznGe5uSr7PQlQFQJY + 9gA+SQAnhABWIUEfmUznCeBs7gQBTN2RFtBVjZzbdAlKI8xnObaT+6IaKQoBbBGi6N9ElYi0m7XZSjgv + zHUdcsNY9gDOVw86qAMuW6FyE9pPwChVg5GQVmkfXkEfk6TvSdEHyZ6aNbTp2oyeQiDPY0sdgW09/Xst + dV+q43NWdDcR1LY40NfuwuD/IIAjGBkoQ1ebAzUZXmeMtpOQ9uAlqKI+iE4kkqILGpQyfy+lXUVjBMH0 + zzV1XsRiFpiF6Cuh7hFcFhUWoLi4EDqthtdnR7aqCgsWLjxJAN99310n5fa7bseN+27B1XtvxGXXXI+L + L78eO3dfh7Vrt1MvliEU7ERxkRDAlVAXVUOtqoHZ0Ixseh4mZu/GWWdei43n7sGGzVvzcu4WnHXOuTjj + 7A1YtfYMLF25ErMm5mB4yhjaezrQ0NygEMBVNVlU1YpUobomjXA4oBDAVrMeLruZ2MMIi0kHvRDAJ0hd + IX/VFK1aSLFiWIxaYhYT58vMz2r4elGeJOZnhQBWSOAC2izFxNdtHB+PjsDeqkPcaUS5WwhgK+I+K8G+ + EQGvlramg8dngNOnV/baNVEvjI480StVpiJK+7jPSJ4wNfOzIhanhqL9LAFsKVH29M0TwIUo0uSlUE3h + eRUKAczX1Qb5DQO/b+RRD6NdA71VTR1WQU+dNFBXbR4tdVynVCg7eJ5yrsqevRRp22x1CjFL/yV6T70Q + nyV7/E4SvxqD+KxCpTJYRSmRG2n8jHxHzl/sRXyfXLNUF/tDFtqVLU8Ah21KNbDsB6wQwELAMo5P2pUQ + tgoBLEQzr0tkkgjWnhCzRQ3biT2A3Rz3SQLY/L8SwOJ/hfQt4hjkfbJSEczXlNfpW08VubkrfkSIYLkx + 6OR3pHWstJNV2ru75MZingSWikGp7JFW0NLecrLiR8jBfLWASmlBXKaQwvRFPPrlBpPEfLkpVEpb5Osx + IRvlyOdSiVFRJqJFkkep1igX4o8+JCbdRIQU88tiMT1SURuqki5UJVyMVUIAm+GlLll53UIAGziOOtF3 + Hk0cO5OR4y3kL8UsBLBCphcpVS6l4psy/D3G+ixz4QxzzEy1GSnmmYmMETFiwFBCi2hCR9EjHGccZB4Y + pE8pK+U5RnRI8TXZHqKekkuq0VKpQkuyGI30qzWMOQrpS/+a4VEq2SrpszM8yr6WjcwJ6pnvyP6zUumW + YQ4gkuJzIX6l4jfJx0L6CqER52OpeovwuYxl2Cc3F/k4kN+7N8bziZYJASyEjOy/x3mkTxa/7JRcTI70 + 73LzXURuzk4SudKWU7lhz7GXff/Lw9LSUAh9IYXzpL7s+SufnawgVlocUqSiq8zzbwJYWj1L5cYkASyE + gRDAUoEqFWNSfeqnzSmVqbQJ0SGlcirC+WX+kYkakQrr89U7JwjgKM8zwnOP8DrClHKee4bnLARwM8ex + nWPRyXPr47iMM97MTOoxI2HAGP1+D69BsJ0QwEp7Z8b59pjss6xClyz0ltbQstiOeXFnmJifOVoTf6ue + 19jI6xP8L0SwiDyu57kIQSykcptgHY5PixDN/K8O5sqdzKW7UjZ0VLnQknGhmjqbDBpR5tLAI7ZFe1P2 + /+W4eDhG0gZaqoAj9B9xjwoxxtAYba+ccyg31GP0s1L965M55GdlGxXlNzgGStcNhehlLkbfKiSO2K+L + NuHl/8lCjlKlW4OBNiuVwgaU+Y2Mz0bGaeqIm98VG1dieRFje54AtvC/HMzhPaXUefqvYBn9Pe3Py9xe + 2sdb+V82+j8b/0v+c5LgEj1T2oxzjCRHkarESub2VYzFtZyXppSR4yJEJON7PeN7nV0hgpUq1q6g0sp4 + vNmOsTojcQ1zrRTxXbYYg1XFGKhRoae2GD31Rehu5GvNGubEnGfmNIv73Vgx5Mdpw2XYNCuNC+bXY/PM + aqxhzjCnwY6RihJlz992no/cL2hnvtdNPehjztQTkzbfeYK/izKFucOcagOW1JuwttmCjW1W4mYLLuyx + YVevHTv6rDi/16QQwBv6TTh7yITTR4wKAbx0SI3FoxosHNVh0VQzFk2zYfE0JxZO8WD+iAdzeI6z+/0Y + 7wtgeq8f07t9mNrtZ07vJ67x8Zq86M95mNvb0UocUEd/ky1ToZpj2MLnQ82lGG4NoqdO9ra0oDVjQa/s + hdniIzYoxZROjl9vFLMHyzExXIEZfVGMtPnR2+hEZw3zLOZGDUI68XplayOlKlsITP5fb70bA408h5Yg + RlpCGG2Poi8X5NwJuaPn0YRaIS+o03Vp+uCknfZqRlxag9MWJ/XPTN1WFn1QR2XBb4R+KOkqRJY201TK + +QupMUwZod2M0a9Moa+ZEtJhLGLCWNiMgVJiPtpBHe2+kvoYpW0E+TtKu2P+fhn1S0jgCPGvEKGVpVIZ + ayRetKGB5yTdAuL8zyrGkva0A2MtEYw1h4mjfOivdqGLOLeNWCdHjNUQJvYjFhiopY5w3PsYC3o4Fh3V + VrRJG2WOeYvobNrE36Ioj4kT5d6EIvKazIMd7dVudNT7mb+G0NUURUM2QAxlhoc2qtgHr0P25I7QB6bi + zhOkZwTtjTHmvxHkqvyoSToY/5hvMe6VU+L0jcrxxHOJh1EhWIm3BUsLrhYSR4mxEl95zbI1Qm3Gzd8O + okUIzboA82Q30kn6obiJObkBYdq1kFXS7lZIe5eT/pq/IwSvtAg2CgY7IZ8hguU5fZaVRxfjqJd5iNdG + v8Z8y8v599J3SUcBaQWv5AjMCaL8r2gwT/4KoSR70ssCISGAg/Q/qbhLGYuG6jLUZ6lvFW4kwybEJaaF + iiHbRyRpp5mKItRVM8Y2GNCaM1HMaG0kbqizEEsZUE1sIa1nGzi/uawbTRkvmrIcY/5uW30M3c1J9LVl + iLHSfFxJvJVAB18bHagndqsnnkihsTaEhhoKj/XVQVSnfaii1PM3muo5p3yvNhMglnEy/luVWDbZIlt8 + n2yFEwkSf0TNxJBW4hJiauKeyiQxPyUtIriVcSfFuCMksGx3kQ4XKVs6yOIuZYEXfdRJ4XO57yBdUarK + dcw3ZKGUifmPARW0nXLGSVl8l+/SIguB1AoBbOKcSQvoSRJYqoHlKHOYJ4AZz6WLD2OMVAG7aMNCANs4 + h1bGImXxJudUclsjP6908+J3JV+Vo5CjTuqALGySBU4ZxokKvw5hWQggsUmE9iq6EGaeF2deIZXT2QoL + MaEQwIzrsliedigdotJ8LUV8nqS/S8jiQNp2OeO7kg8yX4zLPSMepX1whnmCbAlSk7Qiw3FOMl+QogJZ + CCG2EOB1KKSlHKVgjjYYEN2kSKdUEXnsoy4GGP+koE5yEcmRbJxHmVPjCRECWBZG+WiLZUJ2Ms+K8FpC + IcZWnpssApDOOLIViVT+Tm6lIDEwyHNStuTgGEg74zjtIC0EL/2StGXuzEXQ0xxDf0scvbkwWqu9qJVO + N7zGLPOtLH1kPf1vE6+zrYI+pkKO9DcVJjRXGplfmNFFv90vi4J6YxgdTGJQCOAcbSnDvFapwBWxMXe2 + KMSrVPb+TwJYtm1gvkcbFeJX2rpH/MwVmHsorbwl/+B4ib1m6btqK3wcey/SUUeeQJcckONYKuPJ35Nj + iK9FqVtSzVtBPyi5eybu4Nw5eB5m5rD8rxMS8xFflpqZK/A8w07ONf0mc3Uhfy3ERBGPbN/Wgq1nr0LB + DdO8uHlmKa6f7sNlQ1Zc3G/FHsplDLB7x6O4bWY5bptaphDAtw3rcddIMe4bK8CjUwvw7KwCvLFKhd+c + Y8Rftjjx/q5SHLyiHMevzwI31+PI3lp8cFUKb+8pxy+2R/DtjQG8croXTy2z4ZEFZjw016RU/z4634nH + F/vw6GIPHlzoxt0LnLh9oetkBfDVM8y4aqoRVw1rcc2ABnv7Nbh9zIT7ZjnxwIQX987z4nZ+Z+88G66e + rVNaQF94ggDeTtk5XoBLZxbyd4px0ywVbp+twX1zdXhwroHfV+P+Obym+ZSFaty9rAR3rlTjzrVq3HE6 + /2edDnesN+CuzQ7cvsWDa85x4aLTrdixxozNy/U4e5EG6xcZcc4iM85ZYMfpM61YxXNbPqhXqvPWDpux + ftyNzbO9OH8igO3zgpQyXDgvyucxrB6UCmAtprcy8RouxZqxCNaPhLGpO4DzcxbsqdPg+toS3FtXiC82 + FOAbPWr8dMyAPyy04d3T3Hj/LC8+3VaGQ5cmlP1/jz/YgeNP9OD4l/tx/PlBHPlyD/Y/2oyP763Gh3vL + 8bddHvx9qw3/2mzDJ1tsOLzdheO7fcBFlIv9wGWUy/n46lIcv8aPY1d7cfhKH45cFcLhK5L4dFcK75wT + wY/nO/Bynw4PZwqwjwnQjUwGrw8W4Go+vpROeCcd0YayQqykI57D96bQ6eYJYDogKrRPHIGZCS+DnZOA + XMRlVcNJZ+swq5jwqKi0hahwyT6YRoyXG3BaSo+LGo24q8uK56a48MYsO/64wIF/Lnfi0zM5BpviOLI9 + haO7q3B4TxU+vrgBb+9uwxvnNePJlWlcOSb7KhswEFKhls4saSVIkL10mNg7aZjKCh2FABaAUIwonXQ9 + jXoqr2FDjQb3TnfhextjeIc6/sEtHI8HAsDDLuABJ3CPF0f3+fCvK114b48Hf9kRwFtbffj9eX78YQtl + qwd/PN+B32/W4687Ldh/Hcf2riiOfykDfD0H/LgTx9/sw9Hf9OLQL7tw6EftOPh6Dh89lcSH9wfx0V4H + /nWpAR9focfBa8w4eJMdH99qxYd3mPDR/WZ8+nkLDnzBgkPPcU5fsuL46/Y8AfxjzqfIGz4c/7YXh77m + wccvOPH3pyx4+2Et/vSgDu98XohgK/7K33j38zb844tCAPP6XksCP2igtPEce3HgyT78/NJqPDjLgp21 + Bdicpm216HHNaBB3zE/hriVVuHVJFpfNDOO8QTtWNRswR/ZtpJMdVsBjEToYhLsYhHv5eEqkAGsyxbio + S4v7l/jxzV2V+NMdNfj48TrgJf7vN6uA75fz/0PAtwM4xnM//IwVh57ktX7egAMPmnFA2l8/WYbDzyVw + 7OU0jr6UwpHn+fgLIRx/mNd9jwPYZ6EvMuLQdQYcvsYGXO8BbqCO30S5lbLPC9zlPUEA8z8epM4/6sfh + J0px7Ok8CXz0uRBtKYjDTwdw6Et+HHjai4Nf9uHYC0Ecey7M9/47AfwdaVEsBLC0gD5BAAtheZIAPqsA + 395Wgj/e7MX+JzM8d173az289mnA12bjb49MwUsX1uC6OW5s6CAQqi3C/JwWC9sNWNqjxdnTdLhosRV7 + V9E/LTfiwRUaPLq8EF9aWYCXzijAt3gO39uhw4+vsOIXe7346U1evHG9A69dYcQzOw24bXUJtg4XYG61 + rOAlqOD8NDFZ6CPAm1PF+aU/fWpHCD+/pRp/ubse/7irHn++KY2fXBrCF9fZsbu/CEuytJFyzittX9qu + ycpvAYdTogVYwfd2dJQwdljwxdl2fGOlCz9YZ8NPNhrxy01avL1ZhXe3FOC9Cwvwj0sL8MkNGnx0kxF/ + v86Gty6303aNeGGNBo/QP985Xoyr+otxSWcRrugrwM3TGIeWFeB5juHr5xfhBxfp8Cbt5Lf7nPjD/fQN + jznwt6+U4v3Xo/jw20nsfyNNu6rBsZ9yjH/ZlK/6FeL3l83Az2mDP6pTCODDX6vEgRfi+PSJON7bG8Ev + twbw6mo7HpltxLU9Kuxs1WFbqx2b2zzY1OnFhlYX1jN5PrtGizPTKmyoKsLWxhJsz+lwYa0O26t0OD+j + xwVVBmyvMWJHjQk7GyzYVs+YcQoBPCdeiPEY7YK+c5jSw4RdVslLizSplm0RkBWXCl9px5Mn0pL0sbJ3 + WczL5NZTwOSxWJHPEMDlWoUAbm9worVukgC2KC3EOrM6dKXU6EqoCN45Z5UFWN5WiIsXcL52l+PHt1Xh + nc+l8cFTCXxKPVdaw3/VhYMvlyoEMH5I//XTZuz/YT/+8tpUvHpfH2NkBZYQzAuBJlWZMYJVESHypP1M + I31Ba1Sn3OTpjuvRmyRQZTI7TODXT1/RW25EF99rI6CVG0Nys0gqD2SvqX7RqxD1NVmA1XUlnAMjdvba + lXzlyjEPLh228bkB57epcW5TCdZxLpYmCzGTujnGsegNFKPJq0aaiWyUcabMwmSSPl7aYqUIdHNMFLvL + pW0aY06tHrMYf2dNkr/ZfOXvCMe+jzGki+Pczrgmrc56+HwwqsE0nvscAor5vKYFTBbnxXVKG+i5PEr1 + 7zy+tyTtxKpaP1ZU+zC/wolpIQMGfeqTBHADk91qJrkZnuepBLDcBBBREk0m0VJBEqGtSssYpdI3YWDy + z6SY56+0fyyT/V/UqCUYaKgwIFdJsFdtRGe9CX0tJgzQhwy2adHXqmLSq1KOAxy3wXYNhju1ioyIdAgh + rMGY7OPaZ2TyKHsAmzFOm54yYDlBAOvQQZ1v5HjnOE6tkwRwgwvtTKpba11oqrIy2SW4ERAXkRut0tqO + 1yA6wrkRSXBuk0IAl5coZLHsO1TJcU74Ccip30LwSjV5mGMlq9ZjBOpRirwmN8ZDHDv5TEJWsseNynVP + EsAtaY3S/nowp8co9WZ6t4Vixxgf99SqlApgIYDreA6N9F0ttMk8AVycl2wR+rKFGKpVYwp/Y06nA4sH + g1gwEMTUdje66qxoSptRl7IgW07QGjUioZC/Jl6rUVkNGg4K0FEpAMhLgCtt/6T1s+QfdgJECwGikBrS + QjUv/x8JYAJKITyEBBYRMuMzBDDHRhHak5v2JESwVOyGOR8VFXpks3ZksgSBnKdwmOfJ92UPn0kSWPbJ + 9fK7fs5HsLRY+UyEvklafEp76FLOZZA2KtW/sWgRyuMEnYwN5ZQKIYEZUxobC9DRXoiuLuYDPLY0F6Ct + pVAhhrupa73UpT6pKu82oafTgK42PVqb1GiqV6GRY19fRV2vKEQmWYSaSmkBnSeAG5hLCAGs7AMsFcCy + n/V/IYClBfScMS0G+V9V5YVKyze54aC0qOJjF8//3wSwGhFKQtrZKwRwIbKNqpMEcK6DOt1sQmU1wXp5 + sUIemwnaFAKYvzdJABs5p3kRMphgTAhg2ZvULsS/mmOsUcTlkEogEWlByTyZYFIWCZQF8yukQ7QFaaFa + wTiQOlEJXEWfVJ0SAtiAlno7musttEEj6tM6joWRNmijfbsIZv0Y6PJjuDeIsYEwpg7HMHUkguGBMnS2 + 2VF9ggCWKuAKjm2FkN/RYs4rz4Pg20df46eUlakQ4/9XVhJkVtqpE2qlXaxOCOCCAhQXFkCv1fJ1D3K5 + JixduhQXXXoR9t25D/fcf/dJuePuO3Djbbfg6utvwGVXXcvPXIsLL7waq1ZsRVfnAgR9rSguSpwkgHUl + dfA6e9DcsBxL5l+GTRtuxDkbdmH9hk15OWcTzl5/Ls48eyPWnL4OK1adpuwBPD5zJvqH+tDW2YbmtiY0 + tTYpx8bmRlRXp6m/gZOtn90nCGCr8QQBzGtR2jpL9S9Fr6ZNalWwGLSwWwwKCWwyqKEpyRPA6hPkrxzV + 8j2KtIIWEtiqKoRbW4yghbriMNCfWQnWbQoB7HdraZdquDw6hWSV6l+jQ9opy02jQpipRyJClIooekVR + bihRJp9bpJrVoc2TwE4d39NCZ1TRNxShRAjg/9iHt6iEcyYEsKYIal0xzDYDv58ngE12fp+YzExsZuX5 + OTxC+ApBbYDLz7HySTWuUWlZLeLy6SH7+Eolr5C5JlnMIsQx/dik3zLZhLhVQSs3wOQ1HmWfcyGz83ue + 569JfsMuFZAhCwJhq9ICOqAQwBb+t552qlYIYLGp/0YAF6konC9pTS7PhQgWAthq08Hh5Pl7eO5e8/8L + AlgIXzknFY8cZyG1ec7KDTw50ueeKvIb4m8tPC+58aVUtPCa5Ia+08H551Fu7AoBXObXQPYNjQS1PGqV + 53kCmHkJ3w/QX8ues9Lm0s+jn9hUKpXkhqC0KZTqYdnzNcLcISI3s3lMluqZ/xmUKpIEH8e9GsZIjbLn + aZSfDTOnUAhgvpfk2KajdkXkZpFCAHOurBIzJglgjqOBYyiVLhYT3zOXKGIzq2G1CHlVzFiiQlCqRhj3 + 0jUOZGptqGT+lKD/SaQMKM+akMhaEEszBqaMiCQNCDKH8jJvctOvSMWMtPyL079JO/4Ucyrp/FEXYT7E + uN0Ypb9l7phl3JH2p4owJqXpZzM8VntkwZyQxEXIckyk0q2S4yOSPPF5qfgV0ldy5Bhzhyi/I6RHiP9d + 5pabcXKTUyq/SvJVG2UGRHksC0iFp7T/ZfykHijCeZWjEOU2zrmdR2n/Jzdp5Qag3LzPV/MyvxGSnnms + kL5yfXKjuarShmTMiDIf55efl5us+UpPqWjj3DMvEPI3SCl1aZVKVwf/w8I5UVqG8r9L6SfCfhPPV8/P + aZWbrqX0H7KQQKpPhMSWG7kpad3Ix5X8/6QQ7d5iZaGctEmWvFcI4DjPWwjgBuZMncwXe5nLdjOO9zH2 + jzG+T6evH0/oieNNGGNe0MP5aCPuEOmMMS9iDBqs1GMobcAIccZYlsJcb2qVHUPMvzpLixTyt4HX2ci5 + EOJXjiJ1fL2O56NUCXN+6zkP9ZzHJp53S4QYgfl0R4WVWMWJ5pQLVREbczsjcz0hxjknHA83dVPIX+my + 4OUYlXKshOCW6t8Y/ZBInGNTzvGMyBjJYgxetyymnCSAZf6URVfUZw/FwTm087l043AqBLAWfq+etmrl + fNryErIjwmMoaOF7OvikKpl+yePMV/MqHUU4xtIdQO4peaQFvCxoKTPBG6Av5Twri3r4vlmEn1UWj5zw + G5KTSBWV2L0sTpAq/wrOo7StrYpqUSO47kSr3i7aXXetnUcLBupdGG8vxcLBOJZPqcC8niBGagzormD+ + yhypL8s5q1ahs7aEWKCY+UEJenLENI1ajDbLwkYnlg74sXK4DGdPr8BZ0yqxZjCKJd2lmMlcYiTFPJo4 + tSucr/btZr7ezXy5j/i1r5xYiI+7g4XoYT44Rt2Zw9xkSbUeqxuli5kBG5lvb++zYc+QC7sG7NjWa8a5 + PQas79XjjD4dThvQYeWgRiGAl07hd6casWTcSmHuNt2N+aNuzOx1YArz77F2F4banOjL2dAjHU94ft11 + NqWSq5UYV1l4Sh0U0lwWhUoFbZJ63pC0oL+pDP3NZWhKWZX3a4hFpSWs7AnaUZuX3iY/pvbEMWOgghgo + wnHyKQtaW078rlRjZ5j7ZqUzV0JIeStas7K/rw+9uVIMtEQx1BrDcHuC+CCIBH19gr5e9visTjpRXyn7 + tLqId5y0Vwv9eL6tu+idEGHih030w7IAxEVdD1OvEowFGdpMHa+lmdJF6eZrvdSTIeLFkVId7Za4jDGz + z8+c0KVCDb+XFHvnb8g+2X6K7HcrBHCINigYM8a4k6bfq4rm98uWavsU/Z/spV1Jv1hdpkdX1oMe4tau + ag+6aJPtFTbk6MvqqZO1zAubqZP9HDfZv7dLxjLLechYib1syl6izUK2JI3EWkbklMq7/ONJyRE359Ic + X6n4rytFRy6CvvZKtOdiqIw7aA9yf5g+l+cvpGmYuYgQwLXpAJoUAjiOFh6l/XEtx1Yq4yKMe1EhEzkO + EfGvtEXZ97tU4ipt3EsRAmdyMU8eW8tendLFifl9xofmujAlhNpsgDm3C4ko/QAxnWzrINX/bn5HiGkh + uOz0S7K/r8RMJS+mTOYV8poinAc5mjm/QgJLMZSLOUb+/rfEGvFH9GecV1kQUEq/XSYEMOcnFjIgRB1S + ulLwMwoBzKPsG59NeImJ/NQpHyqjTsYyM6L0NdIuWrpPCEmYlG2YZJ/cLHFTrQH1NXqK7KlronDuK4nR + y4kF6Xsb0k4o+ypXl6G5qgy5TAhN1TG0N1Sgt7UK/Z11ylGet9YniS/qMdjbiM6WLOqrI8RqEdRlw8Qn + QaTKvUgnfBzPEHI1cc5ZiM/9KA87ONYWxkCtElNFZAzEF5fJoh2pho0TT0ulbkKDZDnxz6TEJ6UE6bia + uUwJcxmpEOV4MM4owjgWZjwTAlgqgRPU0xTtPSOtjnmN2QozxUobNCuLpmK00TLGUOna4jqxB7DVyHxW + 5lHmk/YoC0GFBBYyP08AS0cv5go8Xz/zhZMEsNgx9evkwm7JJfl5Hee+hN+X3FRZmMj5l+uNMo4IAZwO + CgHMHITnEGQcEx0VkYVl0TLG94iBc2hDin4sIZ2ZlMVlHAfGhbSy+Jz5HW1S2RJMKnhlgYfcJ6Edh5mv + hXl+USXX0aIiIiQ4faBsBVJuV/IeL/2LxB9ZGC0566R4iUt91FPJSf5TJG4qws/IIirpniFjI3mwUgHM + 3xJCWO4n+OlTQqLLUQMizB2FABacKx2vZNGzotv83OR2G1IJLFXBkiMHJd/k55ROJ/y+bGPSXl+GvrYE + elvK0dMUpe+lL6gJoC5mRhXznzRzn3SgBHXMiXK81nbmEl0ZFzpSjBWV+b3OOxlDe5sCxMplGOqOYIB+ + v68zTt/DGFHloS14iKndil/JlHOsxF//NwKYPkbyyDD1IcScIcQ5DXmY87r1CBBr+Ij7ZQzlcTrK30uW + oiruo68yM79XoZQYqZR6F+BjP8cwwM+WOtQoYw4SZ+6TJAYSsjgbZ9zgMUEbD7l1yqI4+UzUZ2Z+zxw8 + 5FQkKjjHxFyDebyF+XzEzdystx1bz16DgvsmgnhwUQx3zQvhuikuXDZoxS4GZGkDfcN4BLfNKMetU4K4 + ZdiO24b0uGu4GA9I9e94AV6eV4CfrFbhrXP0eO88Bz7YGcDByxM4em0WR26ow8dXZ/HuxUm8eUEYb2wq + xctnuPDMCgceXWjBA3NNuG+2AQ/NseCR+S48ucSPJ5b48NAij0IAS0Xv3rl2XDVuwhVTDbhsRIPLB0oU + AvgmOY9xG3/Dg4fm+/HAQh/u5Pdu5veunzDhstla7JpRpJDAO3ieF48X4aoZKl5PMW6fqca9MzR4eJYO + j8ymzNHgc3NU/B01Hlyoxn3L1LhnpQZ3rdHijrUa3LZOj9vWG7FvsxO3bQ3g6o0+7DrdhvNXmRXy97S5 + RThtVglFg9XjeqwcM2HpoBGLenRY1KHDil4D1o05sHG6F+fNDuD8WaU4f3YZts6KYNPMCJb1uTClvgRj + TL4W9LqY/PixcTCAC3q92N1ixpWNatzaqMLnGgvwfFsR3hhU49fjRryzxIa/n+7CxxsDOLwzgmNXp3FU + 9v99tBfHnx7A8a8M4/jLYzjyQj/2P9GGj++vxQdCAO904++brfhgow37KUe2OHH8Ah+w3YNjO9zARZRL + Kdf4gev5+vUeHL3GjaNXl/I/4jh4SRJ/Py+KX61w4fUpJjxSXYhbmQReSyd7OR3sJUyGhPw9L6rGGUwC + l9LhzuJ7eQJYjQYacJzJiI8B0mYsonNVMdnWwGk7QQATXAr56zCqlBY9CTqUDgbiGXRyZxBQXlqvx71d + Zrw4xYEfzXbgnYUO/Gu5A/vPCODQRo7Dtgoc25nGkV1pfHJRLf60qxnf29yAJ5YncfmoFytqdMoemzU0 + 1HIC87ispJWbG0wOpO2YtFybJIAj/P8sjbqfQeS0yhLs7bfildND+N2eOP5xYxQH7g4A9zuBe22AtBq+ + vRQfXunBe3u8eJtj+ptNbvxqowdvnuulOPHrcy349Xot3jnfgk+v8OHovjDwBalcFZK1XWkDffRX3Tj0 + s3YceqMNB16pxz8fi+Ofd/vxr+tseP9iPT66VI/911hw8GY7Pr7tFAL4EbNCAB8+QQAfEwL4ey7gh17+ + tgf4Dufw63bsf9GO979swV8e1eN39xTjd3ep8Kf79XjnYRv++rAd737Ogb8/4cbHzwsBXMHvNwHf7wRe + 68Mnj/Xg+xdW4s5RPbZnC7A1w/nuMOOm6SHcuzCNe5dkccv8JC6Z6scmJvQr6kqY/BswzuA6xoA0FC7B + EPVjmAByWoUaC9IqbMqpsXfMjC+eEcIbl1XiL/dVY//T1fw/ynf4/z/mGP1Eqpc5vjz/w88bcegLOhx4 + RIMDD+lw8GErDj/px6FnIjj8YjkOfaUcB58J48jjfhx70IXj91hxfJ8RR/bqcOg6rVI9ffR6B45d78Sx + Gyg3UW7h5+6g3M0xmiSAP+fFgUd9OPIF6r2Qu8+GcOxpaQsdwJGn+H9f4vuUo8+W4ugzIRwRoviLPIfP + h04QwEb86jwVvr2mAK+vLsDX1xbga6cX4KV1eQL4xbPz8sr6AnxvuwZv3+bHwS9kcexFjvc3+oFvTQNe + mY2/PDiGr2yrwfVzfNjUZcTiumIsaNJiSZcBK+kLN8/R4erTHLj7LPrCM+x4cq0RX1xZjC+v4m+fWYgf + XGjAL65y4A/7gnjnoSTe/lwlfvNAFD+6M4BXr/PiXvq2rVMKMbsqT+A2EazL3qwDiWLM5Gubp+px/4Yy + fOPyLH5Bv/776zL4NX389y4I4PEVVuzpVWF5ugDTYwR9ZUIeF6CttABDfL6Q39/QUoDrR7V4bJ4DX1vp + wU83BPCrzS68uc2OX5+vx582FeMv550ggC8pwsecow9uMOPdq2349R4bXj1TjScWFeLuGfydYfrzNqk6 + F1KZz6cU4JEVBXiO4/j1rUX4/h4tz9GKX91EO7vDiN89aMJfv+zBP14O4l+vRfHJt5I4+D3Gph/UUqdo + cz9tVI7Hf8zHP6rH8R/U4Oi3q3Dw1Urs/2oc+2Xxxa3leOvCEL5zhhtfmGfG3j4VdjWXYEvOiI1NVqyn + j17fTMnpsa5KhTXJApzF8dhKUL29SYftdTpsq9bh/GoDzmeSva3WhAtqzbig3owtDaaTBPCiZCHmJ4sx + K1GCaeUa2oiaIJpzwfGcJIBbCTbr6QezTF5lT5ZkWCo+8hXACfpeEan6VFr+0d8qBHBZoUIA57IWtNUz + ma+zo7Va9h+yEJyZ0Z3Vo0cAPZPpXgL3GbTpM/qKsfc0N15mTHnzvhr87YkUPnwmhk+eC+CTF5wKAXzo + lTIc/YYQwJUKeX7op/147xtT8doDvbj+3AosZwzsShUgxXOIu/OS4rnVRjRojOrQEiXYjunQQb/QETeh + q9yC7gTPkclgC5PBpmAJGgnUlb3dCFxaAoVoo3RSt3pEvyKyT3UR5tMvL+b4rarVYk29lscSLMkUKYT6 + 3HgBZvOapvGzQ4xR/QQGbWVa1BAQldPnB5lUyepFqQYoZQIXoa+Xm4ctHL/BSgOmVhkwU0jgag3Gq7QY + zxBYV+gwyGvoZkLZLhUT3vwq+E6Ot5DCY7y2mXEj5sYMmGCSPiGkrxDAlDwBbMaStIvnGcDKGj8WVLow + HjFhiHGx012EJoKGBh5rmOROEsBhxqSTBPAJsKe0haNuSAtI2asoRfBTmzKhLmMkAJS24GpURUpQS12R + 9l2NBNuNUgXMa2qrN6K72YjeNgP6WngtTcXooU73NgsRXKIQwIPtQgSrMdwhBHC+EnisQ4PRbgPGeoyY + 0sfx6TdirI/nztd62zT83WKlCrM+XYKmGgNaa61oq3PySL2jNFfbUcdEO8sxrCRQS3A+ZA9DReg7hAAu + 5zwlI4V5Ajgh7Xb0TGJln5lihdgVkreMYxQkyBBgFORjaZMjEnQVKgRwSPTNX4wMdamWQFYq5uvkRnKF + Cp2cy/4GjdL6ebzHjBm9DkxlDOur1xAEFKKRfque+iKSo/50pYvRV61WpDerQl+GY0R9G6LdzmixY35P + AHN7SjHW6kZHjQ2NlWbUUI8rCarKCdTjBDnxMhNiPMpKcal2ChDIyH5BefJXgGIxbMxzpFpESB4DwaDB + UqyIkL+TopDA0uaUoPO/yWcJ4LycSgC7CUzcniI4OT5O6q2IVANL1W6Y/iWZJBDMOpHJOFBRYVHaM/mo + 4/+TAKY+Uvx8r5TzEiTwLJX2pLQDaYMmJHCEcT7OOS6PFyvkryK0yTR9QnVNARoaOL65AqUiuKGOj5nf + tuQK0dGqVvb87aQOdrVL+2f6hxb6BFlcUKtCHX1sDfUrxd+rjBeimj6gPkMdVwhgFZQ9gPl7Xc20985C + 6mfxvwlg4onl85z5NtDEFWPMzWvpc6W6xk2bklaNCgHM8RACOECfGEpqEE1OEsBFqKguQpbnUteqU1pA + N3Xa0NBmRZa+PMacxlPGeeRv5Ns/Uwj49ZxPIX4nRSGACfKsBIIOhxDAGnhcOkXcBM55EVKYQJr6ISvK + pWK8lDrt5/hGaO/l9CWVCQJgxopMUocq5lm1GZPi35vrpLLEhPqUHo2MO631VvS2ujDQ7Udflx+D1NmR + gRCmDEUxNhzG8EAQHUIAU7+F/BUSOE6JhguVFuDKXla8Hpl7WRAQZF4vCwYStE/Rl1ICcbmhJdWCQgAL + aWrU6REMBNHb24s1a0/DpZdfqhDAd91310m5467bsfeWG3HVddfj0iuvwZ6Lr8bWrZdi+dJzqQMTKPU2 + Q1UU528moC7KwKipQzw0SlC+FquWXYltW27l5y/Dli3b87J1O59vx3l8vOHczTjz7HNw2ulrsGTZMsyc + MxPDY8PoG+xFz0APeildPZ2orkojXDZJAJvhtlvgsBhhNegUsleIXIUALqIoBLAKBk0JTDq5WaWDzWKA + XquCWlV4kgA+KfI9HrV8Xc+jkWIuLoTboEXAqqdftyLitSHkMcIrlQb0AXbOu4Xzb6Z/yxPAeYJXbh5N + dgY4lfCdlLyPoG7ZhBgV0ShHvVkNrYHXoS9Cia4QxSX/hQCmqDR8X8v/43kJCWy26fj9PAFssUurZz3c + fhM8ATM8sqI8YOGRUip7FudFCGCpCBbi1uZWw+ouUY5CCsv1WHltDq8eDg9/2y6t0PNktlTMS8XvZMt0 + IXblN4ToFcJ3Uvwhq3J0Bwz53+R4nWpX0gJa2jwL2VukKkAh50uOcpNNfKG8Z7PrYHedIIA9nG8+PpUA + 1vNzIso+wv8PZ28ZbllxbQ3vs93d7ezj7n5Ou7vQDQ0t0DTejbu7u7sFlwQIEDyBEAIJ8YSb3LiQQAIJ + 3rT3+MaofXbT4c297/t8P8az1ra116qaNaVGzVl6zeua8SsCmEdhFwHMz/U9k8UxDj9fC5rQC1JfG0KH + ekDZXGY/UE02RzWp60QppyxTL+rpJ2hit6QFQtkyiac9AJVNIfJXmR/lDEWOP15LEBGsCexiwmGyRkop + t1n935gLlMG+qs9okQH/g75ODaHJxJLIYPoUKhenyaTGfNCgqRDie5RD6qYIn1/Eg79CAHNch/xVZiI0 + QZkQ4iLSKV9xEV6aXK4LoEFl8jojaO2KoKnDj5pm3lcj/6uVtrAziHr6m3XUS8Um9it9kxjthKpuxWXP + x0lsZeMqS1fVPjrpDwzKd6Xf208b08n3ROgKIneV4dtGm99Of0noSNEPIprpFzTSZxLq+b5QR7tXK0KW + 56Z8YaqMAts4t2uCVRP/2l/Ri9pCwGQflSf4qYspp5qkL6PshykzT8SMSGBN/skv0zV2ZQTTbmo/z/Ke + zk76AS76ZlEM9WTR05E0WVkiifO8J0GZI8oKEUTmCpqbyMkWcGxH+T8RylwyoolxH2o4FuuIGvabsku0 + b7D2w9S+cyKAG6vpZxW197NIYGWF047RjiiLsEAZylGGq3msp1y1Z2wY4v3Nag5iboPmSKxmseUcZXHW + MF5nPyxpDTImFAHoxwzanGnK9qOvOY+xxYJ2gsfFPTEs60tieX8Gew3m6D/HMZf9PYX/PYF+/GjOign0 + r8foL+h8kP3dT/urTOAetlcn76WHr/vp/w+W3BilL61MnVG222BTDB3VIdRTh+S0cIrjPUo5jREJymqc + SFJW82wnPZfJ/qXeMWBbNnCc1LB/RQDtIoDVd2wHES6GdKFOEkTAaeFGuZy79vR1I5/xG9K3rhQzqK+J + 00bGUV2M0C77aKvdxm7HeW+a+A9pkYB0HK8Roi5PUa7y0mXSlRyrEd6XJsV9lBeRAiolbzLgCE2cx/iZ + 9gNWFqAp+6mMci0i4FiQT6xqT93y7VsCGO2IYKxTRFvAZKHOHkhj+bRa7L+oDfvMqMWc3hAmNTswqcWG + SfSTJnUwnuwmGC+N9jKW6XNhIo8zBjxYOimGVdMzWDurgIPm1mLt9CL2GUthz+E4FjJ+ndvmwvRG+sL0 + 7UQEG9KX/oKOM+lPTa+rwjTGndM5flXNajn9p5VtTuzX5cBBvXYcPuzCSVNDOHtOHGfNiuGUaUEcM8WD + wye7cMgUJw6Y6sS6mfy+IYC92G9RAPstDWPfpXHsMz+KpdP5fMM+TOl1m6o7o930cxjD9vF/+ugT9VDn + dNYrs82JNsZqzfSXRJ7X0l9V1msNx1x3QxiTlV06UDQlYBs4RpsLLvqDAUKlUAPobqZ/1xnHzAn0k6Y1 + YdpINUa6k2a/3r7WsMkebOX1W9gPysxuo0/W0xTGQFuccU+W11dJ0gbMHG1kbNWAofasWaRTSx3cXFAm + WcJkfrU3JtBcG0Mt9XY+6THkSUS2nPpF5K/Z+9tNuaQNL4ZtqKf9aKHu7+SzDFDPjPE4gfIykfIynXI+ + h/Ht/OoIxy5j6pQPg5THTv6ugfJezWtqgYTJlOf3C/xtgdeqpnxqoVBbMYjOUpSIoK06iDbaiOYM9Qnt + TCMxxDE42prEmAHjuka2BWOdTsqlMuwGGnyY2pOC9u8dbYtgiHGE9uHsNxnFYcaijFEZ01XQw3i5gm5C + GdKKn3pbOd47sxjtr8H0ie2YPNqMVrZTiv6ySiaLJNRCGOnHRj5rZ3PaZL0O99Sgv7OInrasyZAr8pny + HO8F/i5Pf0FQdUft96uM6oTGPpHguY5Gd7NNVBWyhn5GS12sTC53i1SuZuyaRSP7qoY2UxUYVBUgRV9G + hLSqM2i7hJAqZfBcZKGbuknbhugoaEsFs63C+NH0LxGmbxKjDxILOngt2RreC+/DkGUc/8owFgFWW6QO + oq+gqkBaHKL7lu3RoqNa3m97vcipNOPPOO1CgLbDw2dxGV9CNqak+QLqc7NwlPFBdwfj43btqysizW/2 + Ou0UgcjYuYV+ifY57VPWLtugtzmPzoYcupqrGWs1MN5vxeShbkwcaMdQVyMGOhsxeaQHMyYOYMJQJ+OR + WnS2iOQtUL4ztHdJNNWm+R+17KsGdDQV0VBKoZihXxej72iIVqvhBcQBxOmL5OgHVucpf5SxRmXpMt4R + AWxQL9jMUQRwixbF1jo53mlvabuqaUcM6DcYApjv1ResaOJYbalTxREfVOK7nfLZ1RLhkb5LPf0U2s8C + fRrtxx6j3ye/J8L7CXrpm8o3ZH8p1tEWGSL6ZSPStC156fcs7TX9KxPXc1xFRP7y8yDHn/x3LVaUvnfx + t2ZxomRDMkM/M0kZreNYa86z/VXCl/2pBQzy8Sokq8kuzUvmtRVQmM+uLHQ3ipofydnRWOLvaTNVAUT+ + Rg3lRGRvtRaXESoZLqh0epG6SHMSDTUBjq0Y2poTbOOoeQbtX6+FSFEiJhso8FkSjFtTRJLtkgwT5vwL + xJXQR2gxQ4LPrEo4smeVShjyg1P0P5QtXdKi+Fr6Wezb6qL7CwKYbVchgMtbIWkMUP5z9I2p24ps32o+ + l3wdPWdnC3VSD2NN6trJQ1qcUI1JfSXawyx1TAgdvHYrbafQVXCjvy5odNek9iQmsN+VBawKBVN6k5gx + UsCMsWrKcAlTJ9Zi8lgdRmgjhroytAU56qQcZT+LzqY4dT/jN95Djve2OwFcHmsOo5vyjOkN4j7kKOOZ + iJu+h+BClj50W02GNqOEjroc/RKfydTNUAdkKHNCevw8yzgsF+UzU5/XM/Zq5fjuqEvR7tAXYTyWj/E+ + +HmBx5q07FmU/h7tSlEEcBipgAthxn5lAjiGhdOm4OQj18Ny3/IMHl5Ti/uIm/bI4uI5UZw5JYCzp8Zw + ufb/XVDCdXPTuGFOGDfN8uD22VbcP9+Cp5dZ8J1VFvzyICv+epQH758QxSdnZrH5wkZsvrQNn13Wgfcu + aMbvT6/BT47L4pUNCTy1Loivrgri/r39uHu5H3cs8eDeZUE8uHcMX1uTxld3I4BvXhHFNcvDuHSRHxfO + c+P8WQ5cNMOBK2a7ccP8IO5eFsd9e2fwwOo87t83i7v2y+DmNUlctzKMy/by4vxldpyztArn7WHDJXs4 + cfVSF25c4sBdPN6/xI1Hl7rxtT1c+NoyJx7Z046H9nbigVUO3LvWha8c4MadB3twyyFu3LjegxuO9OOG + 4+O48eQ8Lj8+j7PWx3DigSEcscaLA5bbsHaBFWvm2bB6th2r6LzsNdGJZUN0fAYcWDvZj0PnxHDUghSO + W5LDCUvyOGFxkccSjllYwsqJUczssGFmlw17TgjioGlxHDcjhbOnJXHRWADXDDlw55ANj41a8O1pDvx8 + rgt/XObHP/aP4EO26aYTCthxbgNwdRd23j4MPDYTeG4OdrwyH3htEba/PAefPzkJn93fh0+ub8I/z0rh + X8eH8cnREWw6Kortx8aBE9PYeWIS206OY8dZMeA8vndZgtdMAtcmsPOaJJHHzqtrse3SBnx4Wi3+sD6J + 7y8L4GsDVtxSa8GVVK7nU8meXbLjVDpCR1MRH0hHfzXf34MKeD4dsGl5FwYUoKgkFg142EdlT8Wq/dCk + ZM3qJ76O+m0G+k4DB9VY2oGlVNobWly4qIf9M8mPl+gI/nxZFO+uotytjWLTYRlsPaYaO09pxM4zW7H9 + rFZsPLcbfzqzD987rguP7FeLC2bHsK7bbUrTdnGg1lOp1XOQaqBG6STsTgBL2Vbz/5v1/1SGq2ttOG/M + i69TRt86tRb/uLoOG29lm9zB9rozCNzONrolj08uS+Pv56Twx5Pi+MXhIfzosBB+vCGMn6wP4GeUpf86 + zIm3jwvg0/PS2Hp9EXikBXipG3hTJWgnYNtbE7D5p6PY/P0RbHypF+89WIv3bsngX5eH8a9zPfj4Ai82 + Xh7Ephtj2HhLFJ/eEcKn94aw8dEwNj8Rxrbno9j2rQi2fzfKa7Iff8w+fJN9+VoUm78ZwCffCOC9r3nw + p3vt+OXNHL83WvC721z4y1eC+Nt9bM8H4nj/qyl8+mwJW7/Ne/vREPCDScAr0/HJQ5PxvZMbcAv1wGmt + FpzSrr2Rw7h1jxIe2LcD963txPXLSziH7Xz0qAP7dlRhOR3yJY1BLKKxXdTgxZImF5bT4VjZF8BBKpE7 + yYM79orjpRPq8V/XdOD9h7qw5YVO4PU2/m8tTAnrX/D+fxbH9u+FsOUlD7Z+3Y7Nj9jx+f1ObH4ggM1f + S2DzUzlsNvvzVmOTCNpH4tjGdtlxpw87buFvruN3r3Rg0xVeHlUOmtcitl4TZj+w3W5hm93O/7g7hW33 + U5YeSGHTgylsfTSDnV9nP32DsvUkx9rXc9j+RJb3kDYk8Lanc0QB2/TZE9XY+lDREMB/vciHX51kwxuH + Uk8ebMGrh1nwyvr/kwB+7QQrfsp+/est1J1PdADfohy8MduUgN7+zeX4w+2z8NRxHbh8SQrHTvRjlTKA + h5xYO9WLw+a7cNaaAG46IomHTsjhsWOSeOaIEJ491IkXDrPiu8c58etLk/jrrTX44JEOfPLMAD5+fhjv + Pt2DPzzWgp/c1YiHT0vhjOVO7NmnPWUsGKbzNIFO1kwGiku6LDh0ugtX7JvE48fX4bXT6vGjM2rwg5ML + eOXIBB6gHj9vMsc5ZWEJdcA0BnyTON5nMABc0WPHEfzswrl23LPCh+cOiOHNw5P47ckZ/OmMJP50TgJ/ + OMOPt0+0492Tq/DeWVZ8cKEdn1zlxYdXhfG3izm+TwvjmQOsuG8vC26izbl0ugWnUQ8e32/B6ROpcxZa + 8NABFjx7lAhgO37IdnzrsiB+dW0Qv7nFh9/fHcDbX4viH8+m8f5LBXzy7Vpser0VW9/sxM4f9XBs9GLn + D3uw4wfUnT/oxo43u7DtjQ5DAG98qQGbnmzG5tua8e55tGFHpvGNVSHcMMOOs4esOL7XiaP7vThiyI3D + B104grp+Q2cVDmNbHMFxcVKfE6cOeXBqnwendHtwUrcPJzJQPaHLjxM6fTiuy4Njezw40uwB7MSaZhtW + tjiwV4sHS5o95SzTot1kzJsS0Axih2uchkBtJ8oE8Pgebwy2VRK3WeRvXoGs3UwSiARurraOE8BhBvox + jPREDPk72hHCxM4gpvJeZlCvTqcTbfZs7rTg2DlO3H5kDm9c34m/PNKLD55so+yUqBO0MIR246UEtr5S + xI7XOT5/0gT8sh+bfzEVf//uPLx6zxRcfWw99qeOmMK2aKPu/4IAtpn7769xY6jGw+cpE8EjtX4iYDBY + 8qKfDltf3on+vB0DxBCfcYRB9ljRgQlFyiedeGXdTiE0ySB9Pq+6CvN4/8KcUnkv5Vn8bC5fz5ZsEpMZ + NPSrHF7eS53vQSLmNJM7mmiR86aV0c20C4NZG6ZTVy1o92Mp+22pyN8ODxa3MbBu8mImHe7JvL8KATzC + Z5xIuZ9GezeXny2iU7pHiXqu2oU9+byC9gDeg8cVdM73bYsZ8ldloEUA71EXxhze02Q6vyN0fAdp73oZ + gHQQFQJYe/2WM0/Kk4tmHznKhvYB1EIAZf32tTPY7g5jkPfdQz2rzNfeWvY9n2Ww0ccA3IOBdi+GeryY + OOjDpBEPJlGXTOy3YTLld+qgsoCdmDnG8T/mMJg9wYV51NHKAp4rQniyB7OVHTzZjblTPGb/3xkTPXS8 + HZQtleS1MMCzMYBn/zGgHOA9DbSHDQbbI4YA7mxWeUKnIYAb2G8ifQWRwBUCWPv5lEsZ+dDKNtWeNNoT + RdlPpuQQnd1yOSIrnWsF7JoMUGkggU5u2oqWaga2deU9snso331NVoy22zC1l8817MZC+hGLab9EAM+g + LZrcTRlrZp82VBkCWFnAE6kHZ3CsCtM6nJjWxnZqtfPchQUDYSwbS2LJWAozlXnJZ+tWUFli4JZjkKK+ + Y1BYw2BOq8lNOUkGaQp0svxMJLCyckXOKvtDRK3KJHl5LBMP5XKjuxPAeq9CQFRIiN0J4ArxWyEkRACL + jFCZ4VSKwVta+xNRjsaRFmFrCGAG1k1BdDAoam9j4NAcZYDm5X06OU44PhIMxBToEMrYEkxWqIhgEZNE + htfKsO2zvG6JY6FeJaLZ7soCrhDALc3UCZSRjg76YNQ1XdSVPTyKBB4eqMLYMMf4CMeWgRuTRj0Yox5V + 9m8ffeSeduqzFuo32qom9lF7fdX4PsBlAniINmuMtmzKCPXCZCsWUF+LAF6xxI/Ve0awbp+EIYHXLI+Y + Paz7qftqsnwOylCMiPDeKwRwvtGBUrMbdc0ch4YApm7lPbT3c1yNchxNDmJ4chSD9OG7h8No5NjK1brM + NSpkVqW/dieqhC8TwGlN/BEif5U9VCGCtbeU2rosM5R7tnEN9WE9/6dZ+0w3eNDepKyyALrbVfY5RvCe + qO9FAg90U6/2aX+vGIPZJIPaNGZMzmL29CLmzarBvNnVuwjg7k6nKf8sAriWbZunTlO2uDKjRV7tTgDX + 1LI9OD7b2+Om7JkmvNwOC2yGLK1C0MfgvlTCvLlzcfgR63H+Befi2huuwXU3XrcL115/NS674lKcd9HF + OOvcC3H66efjyCNPw8q912N0aCnSiT7YqqphtdTCaW1CwN2J1sYFmDP9UBx8wIU49eTrcdZZV+Kssy/Y + hbOJM886H6ecdgZOOOkUHHXsMThk/Xqs3ncNli5fakjgmXNmYtbcWZgxYxo629tQzOcQjYQRCQWRCIcQ + DQYQ8nrhcdh3EcA66rn0ntfhgM/p5P24EfT/+17B/0YA6ze7QeWgvVYrwvxdIkgbFA2hOhlGIeEzEyqh + EPUA447Kvr4+6oUKwVvOcv130leo6Ibyay0a4b0RIm51NNm/4+SvSjBXCN8vQwSw4Am4+TsP/CEXj64y + ARxzI6LFCdkA0vkwMoWwORooa3Qc2rtYEAkc1yQS7Vciq/LQXkPmpvOBcRI3MF4umrFfks/NuEsQCazn + 0LPH0h6TVbz79StEsN7X3sP6nhZT7D6uvH6r0X+aXKsQwNqbWrpQnwX5POGoFvzyPhN+xGMeRESYB9jW + +g5/K+xOAGv8qm3/o96V3O8GXaOy6EbYPQvYlJSVr7GLAPahXtUhaoM8hlBXDKKWdkKTSiW2jwg9s58a + dYAhgjUGeT1tn5SJ8BqUD+0Zp1X/ygAopbyoz4j4JdIB1KV8qE3S/rDvDEQU85qGLE7ptRelcWhiqRB3 + Ixm0UT557+Mw2b88RoJ2JNhu6ThlwMCPVNxLneBBtuBBbUPIEMDNtPfN9C0bOwJGd2oP9RL1RKnVj9qO + IGqok/J8nSzxf6gng2wTZUoq603ZzNpzroE6Rls+dNK/G6z3mooxvSIY+FmFAG6mPWpNqkKYlUcbWog2 + tlUzr9PE9mqgXAm1fF9QhptQ4mcqsacsDUP+0odIsS3lW5Un8Owma0MT/DWFcoaX7k3ZLJrk3x3KxhUB + rIV5Ig3UR6aUKPu4kg1c9tOUCewwhG8Pbetov8qJFtDWqAwSykH2i6xvk/mbVJ87DDQ3IWTGCU8R0CpT + XMoFzD02FMOoL4TM5L9KDdapZCb9D02MNpVoH8bJX/lQOjapNCHbQWVgRQIV+NwigDuyDozSD1/UnaCv + S5+Icfu8Ghtm04eexxhiIf1LEcDLuqJY3B3Bgs4Y5hnSN4LFXTEs5HFhW9icL+tLYcVAHnsPFogclvfy + mp1hzKW9mkl7NYv2StD5ZPrEw4xblAXcwXbTvs7d7N9e+hMDvN8R+lOjTSEMN0XQ3xAxmVFazJDRQgW2 + f0jkGGU0SsSIBJHl+FN2s/Y4ruf4EGrZlsoCFgFciNMXYn+p31QGWgRwpaysSKUYofGqcVsZu9oLUgRw + NXVfqRgxqKmOorY6hiLfy3L8qIKHyN8o7628AKRqV+aXdJUWyGTZZ+msn/rHZT4T8St/T36fsqR2J4Cl + L1ROWpPikiFlcxnk6FsRDfSJtc+39nHUXpaCFjz20dcfo789cyBF37aABaMZTO+hD9DqwWgzYwzGmSP0 + mQZp7we6HPQRHIwJnPQbbJjUR794QhR7Tc1g5bQsVk3LYcUE+rj9YSzoVilp+vxtmh9wYUYTY4RGm8G0 + evpbPM7i9WfS39MewTMoOwtrtajZjr2abNi7uQpr6Psd1GvDMRO8OHV6CKfNjODEaQEcxZjisAkOHDTJ + gXVTHNh/RiUDuEwAr10awZollK1Z2rrGg4nddgy2WhnT2NDVYKN8UxfQL1EM3EDUacxlyln+WuCncWhK + /bJNFSN0UJYmDJQw2legL+mnvhVpRP0hAoVjxUCkZEuYMVIRMyaotHCWsU0EnY0BtDf4GcP4GK84OQbp + 5xLav7ederC3Nc44LIux/iKmjjSYvVJHe2sYh8f539JzqsCgCkEJxjlptNQnOYbDvE+/yYJMhB30n2iP + qHf9Ttp9hxY62JH02JCjndJC5UbKVCvlRBUKRyg/IxwLY3w9LcEYjfI1rxjFzFwQE6nbB3i9tgBlht8p + Ul/leFQGcJa/zVG2c9Rtecqi7EMT9UpbIYJW6pRm2vsmynWDssqiWkghgjeO4eYUx2PCYKCe7UEb1sq2 + a6EO6WGbTOxKYVJ3GgPNYXRTp3TXBNBJG6ey153ae77o2YV2kTPUi0JLvqyftH1Bm0q3NrMdu4qYMtaG + iSMt4wSw3ZC/0r0ar1nek4jz9oaEIWp72/KGDG6tE6Gu9qT/zGdM0X6n6F9pIU2SejTJsWmqObAdKlCV + BR1TbFuV3heB2sI+6m7Jo19ZrC0FNNUmqXvDyLFd0/SLkvQdYhzvIbarKmZ4qY+0X776zsvXLuojpxah + 6Ugoc1TQZ4Kf54KygDXnXZn/NrpIvgJ1s7YfUAakSuPWFGlL6SNIJyjrWHZL5Z9VUraWflFTKY5G6aVs + iPLOe4yorLST9ojX4HdUdaKestpSr7jBaxZjl+GD9uFvN/vhluNXQeX2W2uihnBqqU5QbhNoLGbYP0X2 + Ty362hoo7/Xoaqoxr0f7OjBpuBfDfe20b0XGaFn6NSm2ZZx2LkYbmGI71qG7rc58VkxHqIu9CHvpB9JP + Dfv0/NShhNoiLVIrTb+Fz91QS5tW7/6CABbq6BOoEh6hUsgtIoAZH4nsVdUEA/oSmisp8T1lyTaUnOxH + r9knv6WestsQ5DgM8X4jvCf6KQU325exF9tLW1QaApj+j4h9lXwWsa/+1VG6WnNIGfpUBdpgkaeGQE3w + d2xzxU4mth/33yvxvYN9X/FNlUkc5vhM0cbUZjzQPvUG9JtFAGuBn+y/OAntC615hbo8Py8pxqI8KAuV + vpEWCNSzncz7jN31vrYZkb2rlGiWfyOoRLO2LSjw+rXVQbZrnPFcAnU1EfMspgIB7zXEsRKmD2zAsRNh + W4inqUBJe7sjxvdMAp9ZzCACWL/h87EdBLOQmH5Xnv9bqqafWksfiPqjSB/SxLj0TSTvgmS/4i/rfc2f + yGeWT6aMdpVBb+Dzq2x1v0qUd+cZ/+cx0JHBYHuG+ieOLrZFS9aJRo6XRsbRbdRR3dRBg9T/I81R6jD6 + FtoHuEUEcAozRqjrR0uYNlbC5NEaxs01lOUiY2ktgsgY8revNUMbUCGAORbZJ7sTwFnZbPlv1CFZ6ogs + 5TtDpMOMaRhTJYPU8YyzMmEv7VYWvU216KgroBgLIEH5F5KU/wpSRDrgNERwIUaZyFA3F+Noq0mhqRij + /+5HNkwZ4ed5+ugl2pH6bJRjN2FQm4oiHWScwzg1ZKdNTCawaPo0nHzE4bDcszCKh1cW8OCaWty+VxGX + zI3j9Il+nDoxhPOmp3DprBSupJG+bpYft8xy4c45VXh4kQ3PrbDhjTVW/OYAC/5+uAsfHB/Gp2dk8fl5 + 9fjk/Eb867wm/OXMevz8uBxeW5/A0+sC/B+VXfbi7j39uH2JBzcvcOKuxT7cqzLQK+N4eHUS9/N4194x + 3Lg8hKuWBnAxHYDzZjtw3kwnLpnlxtXzfLh5UcTs/Xv/yjQe3DeP+9ZmcffaNG5dm8SNa2K4aiV/t8KN + C5fbccmebly53IvriVuX8v8Xu/HIIg8eX+zB1xe78PUlNjy2RxUeXWHHw/s48MC+Lty7zo27DuL9HezC + tYc4cc0GD64+JoprTyjg8hOqcebhKRx/UBRH7BekY2LDytkWLJtqwdIJxLAVSwatmN9F56fTijUidWfE + sGFOAkctyOCYBVkij2MXVOPIeUUsHwxicoMFU5r42wEP1rHdj50SxXmTo7h8zIsbRmy4d7QKz0xie89y + 4pcLnXh7hQf/PCCET45MYespReDCFuC6Puy8ewLw5FzsfGkBtr+2CDu/twd2fGcBtjwzDZseHsTGm1rx + wdlZfHRsFBuPjGHLhhi2H5kAjklgx7ExbD0+gq2nRbD9rAh2XBQBrowCN8SBG9M85oHra7Hz6iZ8ek4d + /npMGj9dGcY3Jjpxe6MFV9DZO4eB22kM2o6nI7SeBn1tzo69c1YspvKdQ4e+QgA30mir9I5W0JpVNVSs + Ib8dESKsVPXxY5Kf1VHhjsSrsJhO3WF09C6hs3rfRC++NS+Ct5aG8d6qCDau5X2vz2D7MdXAqY3AmWyP + s1uw6bwu/PG0Lnz36DY8uLqA82YEsa7biZl0TjupiOqoXGqpXHMMKGIcsCJ/g1Q0IoBVjkF7ydTTKZCT + tYTPd0KvA/cui+AHxxfx18sp5zcWsfVWttWtPuy8OYadN2ax8dI03jsrjt8eG8IPDnTh1bVOvLq/9j11 + 4I39rPjpgQ788SgfPjwrgc+vymH7A43Y8VwH8PoAdv5oGFt+OozPf8i++u4gPnmuC+/eW8S7NyTwj0uC + eO9sJz4631POAL4pjs9vjeHzu6P4/IEoNj8ex9an2J+GnIli5+sx4PvED9iHr0ex/ZUgNj7vxb++7sbf + HrTjd3dY8LNriKst+OUNfH2rF3++O4S/3h/Hvx7P4dNn63idNuDNfuCNCdj5zan48P4JePXYEm6Y6mIz + W3B6uw1XTI/hrr1q8ei6bjx0QDeuWZLHmdODOHxAGY3a19SOxTS0S+lYLGsJYEWHD6v7/Fg3GsLhE3y4 + mA79w/vn8MbZrfjT7X346LEe7HhZ2b8in4vY8Ysktv8ygp1vhbHtBz4+hxNbn67C1q9VYfP9Vnx+nwcb + Hwlj4+MpbHw6g8+eSuPTr8Wx8YEgNt3tw7Y7XOwfB7Zeb8PGq6z47DIn4WU/+Qw+v8KPz68JYNMNAWy5 + hXJ0Rxzb7uG4ui+JLQ+ksO3BFHZ+LcdxVQBEBD+Rw47Hs9j+RNqQwFufyhBZbHsygx1fz2ProwV8cnsC + f73Ei1+eYsXrh1nw6iFl8vflcfL3hSPK+ObRFrx5uhP/dXEA79xO2XmiFXiFY/i7s4DvLOLzLMJPr5yA + Bw9poA6MYMOgm+3Hdh2wY900D45a7MUlB1MXnpTFU2eV8PypWbx4TBgvbXDj20c68MPTA3j7xhp89FAn + tj4/hu2vT8f2H8zCp69PxvsvD+N3jw/gqQtrcMGaAPYZrjI6aKiuChMYIE5vr8LCHgtWU/+cujCIW/dL + 4uuHpvHihgS+eVgMz6zTnrheXDjmwaHNVizjmJpJB2sWj4tb7DhkUgDnLo3iztVBPHNICN8/OoFfnZzG + X85O4m/nxvD2+VH88Uwv3j7VjvdOt9NeOPDRJW58fHUA/7wiij9fEMebJwTx6CorbltswVWzqF8mWXDS + iAXHDlDP8PzKJRY8eGAlA9iOH5zjxc8u8uOtK3347xs8+O0dXvyJcvC3x6P4+9NJfPBiAZ99uxFbXm/D + 9u93GsJ35/c6sOON9l3Y9t12UwJ640v12PxkI7bf1YZ/XVSPt45N4/n9IriFQenZwyoJb8URPQ4cwb5Y + P2DF+r4qHN5twRGdFhzdVYXje+04sd+Fk3pdOLHHg+N7vDi2042j2tw4otWBDQxeN3Q4sL7ThYO7qCsZ + kK9qdWOfjgCWtwWwsNGL2bVuTBXhWW3FMIPb/oINnUQrHXizmp/Bp1Yet4gAFMyqcAahCkRrXOX9U/l5 + Z713nABOYKRb5atUlkn7agUxozOA2a3aw9aKmSULVvAZTqZ9fPCkavz8jl784wmOyW8045NnC/j0uRgR + wqaXYtj2ah47Xi8BP6O+/VUPNv9iIv7++iy8eu8EXH1cCfuznUQAt1P3/zsB7EF/TZnk7a/2YIABdz8d + sn46rP10Xnv4frdWYtMJ7+WzKAtgiO0wVufBGANyYVQEMu3LML83nK0yJeW0b/UAofMROv0qQT6JOnua + VqZTV00ixprt6OC1VCIvRb1vylNSx2s/HmVWpGhrGmgT+lJVmMzvzW32YxH7YxF11pJ2Hxa3+TG/yc92 + 8hoCeCId7t0J4Km0UbMYfMwrOLGIz7okZ8NSBhwVLCaW83lXMTBe25E0paBXNEaxjEH0PDrDU+jUjhEj + eTcGCl50Edq3rEIAa2JRkJNpyjlRFrQIoLXOZUjVfvbnSB/7tzuEgbZxwrfBi+EGOryNvvLq+BYX+iiH + I31ujA64GLDZ+X2O+V6rKQc3dahMAlcwc8SOucoIHnVgpikR7TBZwioZPXMCj7T/U0aUQWDFEGVfBHBX + UxU6GjTJ4kQHg7Iu/r9gVtXTBnSyDVvrtIqVwZghgMtQJrCOTTW2clajSlHxN1qNrIkv42gziNIqyXSI + QW2kHBQp+NVeSPq8XEKxTARrP8SOOp8pmd5ZZ0NvI2WlhbLQZcX0fgfmjroxf4L2A/Zh9pAXM/o9mMax + KP03SLnpoy4b4XNM6/JiepcP0zv4ebu7XDKdmN0TwILBKOb0R82+Vr0MqluLLtRnGFjxfrIxG/KUs0La + Q2hPIZF4FZQJ4Bi/o8BI2WfC7sRDpQT07tD7u2N3MqKSASzoOoKuqYlIlZgWAZzOMMDgGFEWcIzjJU35 + VRZviWOxibLYwUCqvS2FZgaDCtBU2tDsY8nnMWRkktfh0WCcEK4goRW7CvB4LGjyjbqrnAXMAJ1tr32A + RQALrdINlJV29kcnj33UO0OUIWX6jg27DPkr4lcYoV/c320fJ3+tlAkrg9zygoHWGkt5scH/QAAvZNwg + AngvxhmrGFPsvyKOA1YmsZbH5fNjGOrwmsk7ZWppf+M4x7II4Az7v0B9UcPxUs/riwBupM6uEMA9Ix5D + AI9M4XibkkD/WAyt3UFUc5wl6OuaMtC79dfuJFUlA1iI0RcWRP6mEuXAO0p/0yxMoWzvancGryJgRQBr + tbdWfTdRr7fU+8wY6WQA293OQJi6vb8jymA4TkQw1BPEYB+D3P4QRgcjmDSaxJQJGcyYksesGcV/I4D7 + ut3o4HO2NFSx7ykbbA9lRSuTMaaJKEP2V40TwBxfXyKANfmlfXJ9DjufIYSGulrMmzMbhx5yAE4+5QSc + c+6ZOOucM3bhzLNPx8mnnoTjTjgBRx59PNZvOAb77bsBC+etQk/nTETDLbBYsrBVFeFy1CHga0Fz4wxM + n7IG+60+BcccfRFOOeUCnHLq2f+Gk085A8cefyKOPvY4bDjiKBx48KHYZ9VKLFyyGDNnz8K0GdMxfdYM + TJ0yBW0tLchlMggFgwj6/YgGgrQFQQTcHrhtDjirrLBbqszRwGqFS7DZ4LE74XU74bTbDPn7BVQOWt8v + k8C7yGCR4xbKAH8X8XqRCfqRiwWRjbj5v1VmrMoeST6+PO7/bwSwgZE1ZaqW4QlYTfZvhfy1uYjxrN/d + s4BF/Lq8dnN08uj2OahPdCwTyhUCWNm/2eoo8qWYOQoVUnYXSVshbIsib30GInxzpRCKdVFU18dRqI3w + 8wDiaTfHirKFHQhTd4sE1jP9/yWATclm7THsKRPAmmDTUZNslUUxIoH9msyLuBBmu2sv7mDAZkhf7WGt + ybgKAWxA/ap2rRDAFT3r4LWEir6tQL8VAVzR5yEiTP27iwQmtMBDk2zFvI9jOILmhiiatJcX26VBk2JF + H+r4jPWFgDmWsppkskN7wcZ5bRFW2h5JVapy1CGFmAfFuBfVSR9qEj76C16CR76n1xWU4m5ouyOVk1NG + lCqgmIVURDaiCSaOWz6bCODK3oQqURnx2wz5m0n6acO0V18ZuTTlIcv3lMnRGEFjW9iUeq5v5etW3kMz + /6+J/9co8B75fqGFcl/vQpy2P0D7IwJME6TK7ComyvsUa6/aVuo4s11IfQD9dQHjD7bRrjbRF6pAZG8j + Y/Umtk0j7X4zZaYxRX2dVLnrMkT4iVg2+6rF9cx2MxEunyFD+ZE/ocl2kQoidRPsn3yKbZULGYLVZHkp + c338O19GpfxzXr5Hqkzilo82gxJtgSkDPZ4B3N4Upu+Vx5gyD1tj7G+RtvRJCbOvoyH9XWYS0fg17KNi + iv5DUqWgaXOjdjNfUSGAm0pRkwHXUBQZzNc1IdoEIWAIqrZaTTK6/yMBrH1zM0Rt2Ipu/vdk3tvyoTz2 + GkxjWVcYS9h/86jnF9TRf232YRljhmU9cSztTWJJbxqLexJY3CXEsaA1jLlNQSzkcY/uJPYeyGPlUDVW + jwpFrBrNYc8+/la/5+/K4O8645hMO6Zytm28pw7amU6eawsUkf6D9P2G6v2UgyC6+WxNGcoR+1DEbVAE + CvVtkAhRv0Z4jHPMpym7IrYrBHAD5eo/EcAiT0xVHV7L9C8R4bhSvyqzy8QFoTIJIAJYWb75bGAXCtSH + 1XmOA54rQ1jZYhHqCo35ygIQ6WxTuYFypaoFKV4jzrEfZj+KDDD6hTAEMI/6bVlnlPVFhQDW5H5NVmUl + Vb6T9pm2uaSSnrTHjQUH2hkXCSYzmO3WxfhFJYondJb3pFWsN9ahErsuDDTSV2pWxSAHfQbGZB1s6w4b + +totGO2iXzzCPpyUwrJJSSwdiWMRfYfZHW5M5/dn0CeaSf94bquHcSPRLBK4ymB2iw1z6D/MbrRjhhbe + 0odYJNmpr8LSWguW8j1VZdqP/t76QQeOm+TDiVODOHayDxvGnDiYscYBjCnWTnVhv5kurJnjxn4L/F8Q + wIvjWKLtZkacGOmkzNKf7OB1m+kH1jHO1JYw2grGLBSlD6rS6lmR6PJdxqF+1xhtb4yZ7NKBrpwZg3nK + nMZrTc5BsK0FjtsWyt5gdwYTBqvZRknzWll2Zk9VZdhRTwkmy18EZq3f7Ofb25Gi71XExME6TBpqQG97 + nuOf+pK6P8cxXZNRZaAommuTpgRuMUNfO+Y1JIrmQZVd6KYs++z0Fx02RJwOxF3UCbTPRdq4Oj/9aern + LmKQY3iA3x/mcQr19Jwsx2I+galp+nxRH3pDHPtexov0A3L8XpbjQ8k1qrCYprwLsiNF2oG6FP1h3kuj + FhHxvI62v4a2oUi5LnEc9NbGGFPS36UdF3o4JtsYpzZSbzfQP+xgbDzSnsQon79bOoh6rSVPucx70Uwd + 0yxSMUs9vgvU4cpsJ+rY/tXU6yUeGwqMR2qCjCezmDDUjAnDIoBT1H/KEuUY4bPqKLK2yPtUxquIX2XA + NpYi7A8/Mhz3CdlMtlVMYFvJvkX520o1BfldgtmOkMc4faYU7aAyZ2uy1DelONobVFI5j9baLK8bpS32 + I0n/IU4/IkookUkkrpu+r6rEeET0su90Ln9QW6IY8FwLBQVDBqt/eRT0+y/IT5Fn1l0EsOIp7YUqkk8k + mKplqDS0WbSiPoxUGXthKlfkQ9QRPnP/yjJM8P7i9G/ivJ4IKm0roQVHDSVXmTBVDNEwDp43cSzUMDYt + SO9QVotxF0r0K0rJAKrjQfoK1HuJCGozCfZRxpDBQnN1ju1TRH9nC+1bJ/o6mjmusqjOxDmuYrSP9BmS + /F0+xbFXg5a6onk/ERL56+Dz07+l/xnysD29TraBy7RFgv6ddKAycmsZozbUUWYadsM4+dsk4lfPU1Oe + VxABrJhOMNsSZdV2HKuytbyOqq4IDdqmiWiuo+2sC9EW04/i86dilAXKTkX/l4lMEaFVRj9X9nKWXyd/ + TnFyMS+bQBtBJOiTiACu2AGj33k9+anyKysLFHcngJVBW03bXkv7L15C+9WLEK4QwPL/pL/kC1anpXvc + tD/0rdLUC+xXzS/UiNClX6nqMnn6P6omoIx3+TnybSpQRZOk8UN130HU1URRx/FcTZ2kbVGi44si/dQ1 + uyNAGQ37neNgHwW1FY6H8uWhLNKu8fMykS/IlpXbbBcBzLhW5bLVTjUl+iyMCeqoQ+QLa05Ei+1EvAvK + /tUY0FHvFzL0jfh8hgBmu4gENiWsawNoq4+ijX50h9kXN4IO9mU7/dJmyQ19s2r6AiVepz5RRd/SZYhh + ZQL300fqp480xBh6Wn8GM0dL4wRwLSaNlGgjihhQKenmJHWAyj+naXeSaON9N1Gf6x4072TKyPNey3NR + 7A/2VyZKOQo56a9zHBJxtlmcMh3zUb4p8yKBW6vz6G2qpx2rRoFjK+qmnLm04IdyR8Q8ZcSp9xOMx0T0 + VlP/1GcjaCrEafci9Oe9SNFmJIlchO0T1+f0C/NxIsmxyziNsWaMsWqIsWpNMolF02bg5MOPhOWWGcrC + TeLeldW4dUURl8xL4LSJfpwwEsDpEyM4d0oIl07z4dqZXtw624WvzLPh8aUOvLi3E99fY8fvD6zC+xtc + +PC4ED47I4dPzqrBe2eU8NfTavDbU2rwxuFJPLd/EA/v48K9e7pw5zIPbt/Di5sXOnE9r3XrQhfuXurH + gytCeHBlbJwAjuCmZUFctcSHi+a5DQF84WwPrpjnx/WLwrh1SRT3rkjhgVUpPLRfDvfvn8Vd+6dx2/5J + 3LQ2huv2DeHyfby4bC8Prl7B3+wZxK3L/fwfHx4W+bvQg6cXufH0QgeeXFyFry+14LEVVnx1Hwce3teF + B9Z5cPeBbtx0oBNXH2jH5Ye6cPlRYVxxXB6XHV/CWUflccKhKRyxNop9F9ux5wwLFo5aMKfPgrndRJeF + ThIdoGYrnd8QDpwax2Ezkzh8dhpHzsngqDk5HD23iCNmV9N5psEsWDBWsmABnbB9B1w4etSL80Z8uGrE + hVtHeV+TbPjWdBd+NNeJ3y5x4W/7ePCvg0L49Og0tp9WAi5uA24YwM57JgFPz8fOby3CjteXYOeby7Hz + u4uw9YXp2ProMDbd0o4Pz8nh42Ni+PzwOLYeGsP29UnsOCKB7SKEjw5jywkhbD09hB3nB4ErQsCNceDW + NJEDbqnh/zRh44V1+PtJafxy/wi+OdOHu9uqcAWdsLMzFpzIZzmyqOxfF1bSWd2TincRndTZVL7T8m4M + auXKOAGsIFMrabRHgp9CHqDiEPkbpKCHAvwO368jhjmwFlGRH1pThUu67Lh/ghsvzw3hrSUhvLcqjI1r + w9i6Po0dRxeBUxuAM5vLBPC5XfjDqR34zpHNuH9VFudN92NdNx1WOqYigOt53RoqyaxWvIgAZmAUorMd + VbCtlTJUmjVU8h1U3rP1/61VuH6OD69sKOD359fhw+uqsfnGKLbfFMBOlRK+NoNNl2Xw/plR/OpIH15b + Y8Wze1cRdjy3ogovrbDgzbUu/OZwH947LYZPL81g6z112P50K/DtHuB7/dj2Zj82v9GHz1/pxSdPtePd + O/J45+oY3r0ggHfPdOLD88oloLfcnMCm2xPYfF8CWx5l/z2VxrZnePxmElu/HcPON4g3RQJrP2D26bf8 + 2PisB/941IY/32PBr26y4AeX8X4useCnV1rxX9c58NtbvYYA/uDxAj57rh7bXqZcvd4LvDaKnc9Pxgf3 + jOKlw3O4eoINp9CRP6PdgWtmxXHPPnV44pA+PEZcsyhD/eHGYZ109unwLypasZgO8x7aG7PVj5WU9/0H + /DhoNIBjJntw7ZIYnj6iDj+7rAfvPzSKz5/uA17t5H03YscP+Uw/j2Drr4LY9ks/tv/Eg+3ftWPLcxZs + e8KCLQ9YsPEeOz6934PPvhrBZ09E8cljEXz8SBCfiRi+04ktdzqw/TYbttxgxcarqvDJZXZ8fKkDH13M + trzIjU8vc+OzK73YeK0Pm24KYfOtUWy5K44t9ySx7f4ktt+fws6HMsBjlH+2Cx7PYyfPtz+e4T2ksVVZ + wE+lDHY8mWVfcHzdEcPbl3rw1ilVZu/fVw624Fvj5Z+fJ549vIwXj6rCT9ifv74yhHfuyOCzx1uAb41R + FmZg2wuz8f6DM/HKGe24kbruhFEX1jJYW9Zswd79VhxAfXAC9eh1R8TwtTML+NaFDXjtnGq8clwY3z7S + jTeO8+Dn50Xw3t0cB08NsR9nAm8tBn6zDNvfWoDPfzgTf39pKl68uhmXrYti9UQLplJnDYkoa+NYZf/N + 67Fgz34LDp/iwvnzqLepQx9e6cPjq7z42goP7pjrxcUjQWxodGBPjvu5HP8LGZCt7HHghPkx3Lgui6eO + TOLNkxL49VlpvH1eBn+/II53zg/h7fP9+ONZTvz1TDveP0d94cHHlwfwyTVR/OOyGH57TgyvHunFvcur + cN1cCy6YYsHJIxYcP2zB0YMWnMLXV/KzBw6y4BtHWvDqKQ5DAP/kQh9lyYNfXevBf9/sxu/v9uHPDwXx + 18fCeP8bKXz6rRK2fKcB219vxs7XOe5eb6GO5Pl3dWzD9tfasU0E8IsNhgDecXc7Prm0Cb8+MYdvrovh + 9nkunEtdfwzbZkNPFQ5nX6xnG63vteAIvncU9f8xXVU4ttuGY3ucOK7Xacjf44iju1w4rNmGQxgsH8R2 + PqilCocaAthjCODVbR6s6gphr44IlrQEMa+RwW6tCxNrbBiiQ9tDR7Y9V8Vgykbj76AD4igH/DVOOhAu + dND57aQzY1Dn4WvXvxPAPdrPJYZhXn9EBHBHCDM6/eMEcBVm0Qat6qvCuXuG8PWzGvDb+4bxr6f68Olz + TdQHKv9MnfV8EJteimLbqznseIP69ueNwH/3YPNbIoBn4tX7xnD1cdVYN8eJqSJ4vkwAl9xmH47eogd9 + RS+6GUh389jFgK+L9kHlWjpoO/ReD/XGIJ3zIQaSYw0hjNUHiRBG6LgN0WkcKoUwwOv0pvn8dNhb6eAp + g6A3RTkuVGEC7cUUtvUUyvUox81ACwMFtmWewWaUDqWXTpuT+t0QZbRHMaKGur6bwdZEBvez2P4LRca3 + B7CEWNwawPzG4DgBzH75EgE8hX0zo2DFLNq6ebR58zJVmE/7tyBjxUK+tyBnxVI+n8pAr2qN8xjGMj7H + 4toQ5lYHMZUOvbY7GC36MMTX3XRgRQBXJzVZWZ68EFRaUBMO9So9xsCnrf4LAni0P4bR3giGOgJ8Xq10 + pHNLDPJZehvc6Gp0opv93dftMiv/B3ps5bK5PWUCeMqgA9NGBKfBjGEb5oyVieDpI9QLxNQhK6YOWzF9 + lK/H7Jg0ZON/Wsx1utnWHQ0WNFOWGqn7mwhTIo1QObauZk2Q+HnPHjRTbncngOvyFjTQj1BmcJkAVnmm + AL/n5WeaFNXqUgbtDCoSQQZEYUIBhZxuOuEKjExpo5SIYCsa2M/tHAvtNcqSKBPAg5SDCR3Udb02zByw + Yw59rDkjHswZ9hFBzB5QWXQPZa6KMqosYMpPR5kAntbpxVR+NqVNJLAL0/jerB4GDp0BtrFWtNvMJEi1 + AhjKkSbqzYSPMnqSmrhlwMUgTSV9DQFM30NBosoj+SiDgkgEyWOFdPgy4WNKQ+v98eN/IoBFgnj9ZZhJ + RQauIoDTHCeZLNuMMlshgDPpKhTyDijbt6khho62NNoY5DQ3MnAohEyAGOP/JOmzpXQNBWhs5xTbO8lg + SkjEy9DqXk1KKGBTJnBRmRg1dtQrQJdMiPgVKCOCCOA2vu5o5Zil7Az2VhkCWOTvxFEPJrBPJgx5MTpA + 2e5yoof2r4P6s63RZghglQyXnPW0ONBnsoBFAFf9rwSwyj+bLOAVHH+LkhhmH2ohjVaIK7s1QSR5XRHA + +SYbSs1O1LU6dhHATZ1WtPU50D1MX3ZSYBcBPDghgc6+CGqbg0ixPUNsD5WA9jD4VV+KqNod/4kAVgaR + JhQ0waCjymeZ7Ot4OeO6TABXoZhjm9Zw/DT4zITkLgK4TSXWywTwcA+frTeOIeoCEcADfdQH/dSfIwlM + Gktj6uQcZkwvYN6sMgE8aUKM3/Ghq72cBVxkG8T53yJ/hbgmodKUX+oykzFO365cAjqBHINgU/LORbl1 + WhDw0HePhdnvDKSnTMSqlXvioEP2w/oNB+Hgg9cS+xkcdNBarN1/X6xesxor9l6JZcv2xqKFKzBxbC4a + agcYA9TCYknAZs3A7SxSR9fyvvowODAPSxYdgP3XHoNDDhGOJI7AIYeWcfAh67Hf/geY0s+r9t0Xe+61 + AnPmz8PkqVMxOmEMo2NjGONxeHiYctlI/z+NgD/A6/sQ8voNfE43XFZlAO9GAFtsPLfCIVTZzOdupwMO + W3n/X7tVZaCFMgHs4Lmz6gs4eB3BY3Ug6OK48jFwD/uQDLpM+UCTPcq+1yTRl8f9/wsBrPLwnoB0Qhlm + j3Bl/xIVAlgk7+7kb4UAFunrcCtT2Gb2AtbvBBHJIoDDcbchgEX+FmriyAmGCA4bqAS0SFqda7/ebLXI + 2oBBthREibqlrjmJ+pYUahsTKNRFDTmcpM2LUg8qE1gkcHn/X4fJIk4XytfchV0EsM8QwCHGaP8TAWyn + HGqSrUIAV8pAG5J2nAQWgvotfyPyV+X4/hMBrHZVee3d9ayD1xEqxG8F+q0hgfkdQRkjIpMqJLAQp01I + jxPALY0xtDbF0dKQ4FiO0z8JU7cFqZPCaCKaNTHHZ89pMpv3akre8ppJ3kcqQLtHG6hV/8oMKCZ8tD1e + FCIuFKMengtelOIif318T2XiNCGoBVRWgySvkZA9JeLsb2W0igDWBLsmxDWRp0wPZfuK8C1mI+OIopAN + UxcEKQ/BcQI4ikb6mWaf32b6LU0u5IQGxtj1/O8mLzL0QZK0CTHaBh91io9to8lRZcAXaF+0P3Ez/cA2 + 2vueGh8G6Pf11VG30SdqpS/ULKKXNqiRaBLZG7eb8qR1ei/tQT3btY7vq9R1jcl2ZlsQpqxyTFt+UI+G + +dzsD2WDifhTSdEKoaAM22zSS3sQhPYlLKR9/5EAFnmg35mMMdo7kUq19N1EWoiEVSaRMnFFFJlSjLQJ + tUQDfVqVfx7qzaGrJWYmL5WxU1/tYT+zn0Rw8n4zkpGoMopFXosY9iJP+6B9ZvMp3Z+qipQJ4KYS217y + UgqjpS5iMpmUXawsxXbZB/pAbbQXIoFFwNSJEKfuEPmboMxXUwa6cz5Mb0ti5aR6rJlYwsrBFPbqDmFp + ixt7tHmxoiuCfUxmbwbL+7NY2pczWNydwsKOGOawn2bQV5/d6Meithj26s9j9UgN1k6qw7opDVg3tY7X + rcbK0SL2Hsc+YyWiBvO6Ehhm26j8czf9ti76UCKAu/leH/3lXrZND9uyQwsi2DZ5LY7ivfvtHGsWHokg + ESb+jQDm9erpq1QI4DrqmZLkgDKjLR9UTWdXRje/XyF9pYu1pYEWcITHs5iSUfpObHeRwBXkMn4DvW/K + PnN8VgjcysS/dLbJ9B3Xa4kk9R3vR6Sw0VfjMONg/P/LBHBZX6TpGygbrUC/rTrnhEqAavuXHJ9NBGee + 5yKCGyRbeT4nYxKVOjeZ9IwRFAP20+ceZqynrX/6OQa7OR47G+iPN9rp61UZP6yzrYryyLiJPtTMQcY8 + YwksHI1hXl8QszrdmNrE+IA+8dSGKsxstmO+qiG10Wem7zWL/sIsfj6HvplI4NlN5WpSc0QA19rM9lAL + 6UvPp4+1hMd9GPseSF/vyFE3jpnow1ETvTiUscZBIoAnOrH/NDf2m+XGvnO82G9hAGsXB7H/0ihWL0pg + ibacGWOMxNilu7kKbfTPm+ir1PDaIn4FVQTaFS+xDc3CWZ4bcEwpo7CNNmikv44+ZZbjSGWXRTJU0Ue3 + sr15HEctx28XYzWRAG1N2vuZeo19UcjYkWcb59nW5kjfqJDhGGcc21wfRkdLkj5rAcN9JQz21KC1Icn/ + 9RjyRQtXtYd3bUELfhKoUUZpwo8U9XOMcU2QdljVVLTthNdGu78bAZymb1X00i+lzWqknHZQV/cJHMeD + LsYqES9mUzfPySUwORnGMP2L7iDHPXV7jYfP5ua4J1L8fdmG8EiYMqOEbEQNdX1tivolTr1DW5LnPeVo + H4q0tV3VUfTVJqibRf7GGfMEDbErnVLLtmstMNZsTWO4PWP2OW5gzKHP6jn2ajn2pKdrOBaFWupyoZQq + Q6WozRYH7CNtgaAFMW2MQ4b7GjA62MTzNNvIabJ/NXcsnS1drn3SlUHdVp+kzYyaBTPaqzTK8SgSSnva + G+g3AttLr00FB7aBIYI5zlV6OR5gbMN2yNF2ljIhxqMx6tUk4+wUGgpJ5JMh2g23IelDbM8w2zWkjF/1 + V2Whn63cdzoX8WulXqqgQgbbqaec/E5lj30hxH6N0A8TARxnW4uAVJZvZQ9UsxcwZcxk//I9U56X+kLt + pYzD8uIh6iiRhfRtYry3KBFjX4sAl60SUSUdYvaJ1yJSxtaCFjU0UM+K/FVlEcmF2V+d/Z7mtdJBJ2XG + xWu6KC8eZCP0BeMR/hd9gHiY+ibJ9slShzSgv7MVnc317L8U7yuCHD/PxEKM3/m9HGPL2mrqqRT9Gfrb + bvphTvpgDsq5k3ER5TvspY4cJ4DVDsr6LvC+dhHA9a5x8P5r+bqWvoAhgL28tpvPJVtLGWIsl88oc5qg + XjRxLuWzhr5EbU0AtbK7PAoNJdoWyqsW2+WlpymHsgtGD1PGKgSwgfwivl+p1JDQ/APHdiHn5/+UCeA4 + 7U6E/fKfCGDpfTv72xDA9DsrBHAiTJ1i9nHVPvUaH2UfppryrX1jlcGukt8Z9o8y3+XTZDm2MiIgleVL + 2ygZML6CxoD8aPp6Md6vFjlVfBahXNqZ1zMLmwL0RSOoqWEsl4simQwgEnEzFmEc4aVvTDkXPNQvHsYG + iu+EoJd+e4BjIUi9FuIzUy6C+ozfC/L7GqNBjQ+OqzCffXcCWO1UUx1kjEidqsWhOfqG1MvKTJaOFkT+ + VuYT/iMBLJmgryjSXosma/Ne2jyVSKac0M+ppw6pFTGuNuMz5/j81TxvkJ7i551FD7rlW9A3GmwOYOpA + 1pC/0+mXVAjg4d48bUSK9lJ77sZ5TKK9LoFm+luN9EeqeU+ad9qdAM6wb9Rfyr5PBJwcRyJ9Oa45vqNs + vzBlPkiZj7L92koF9LU0GgK4qG2IGIupVHOYcZkQ0ZGyEtH3aReUDZyLsO1S9LMz7DPqo2zYbbYHEEG8 + iwDmZw20AQ0cg6UE47RgEHGPByG7dG7KEMAnbTgSlssn23HTgghu2TOL65fncdH8FE6ZHMRxw36cNBbE + GRM8uHCKB9fSIN82x4UHF7rw9HI3Xl7lwY/3d+NPB9sNAfyvowP44KQU3js5hz8dn8Wvjsngx0fl8OK6 + CL62jwf3LHPgzj2cuG2pBzcvceP6+XZcM7cKN8534I7FXty7zIcH947goZVxfIXHW5aLAPbi4nkuXDTH + icvn+XHtohBupiNwx7Io7ts7hQdXp/Dw2gwe2D+Duw5I47YDErh5XQw3rA3jmlU+XL23DzfuHcRte4b4 + /0E8tMSPry/04umFbjyz0IFnF1rxjcUWPL3Ugif3tuGJNU48ts6Lhw/w4e4D3LhhfzuuWGfDxQc7cckR + YVx6XA6XHF+Dc44p4aT1ORy5fxJrFrmwbBqdnQELprcTdKKmN1swtd6CGfVWrBwK4oBJcRw8LYlDpyZx + 2PQUjpiZxeHTczh4Ugbzm50YTNN45yyY3UDniI7YEb02nNvvxDWDDtw9asXT0xx4fbYHv1jgwp/29ODv + a7z44NAwPjsujR1n1gGXtQM3DmLnvZOAb8wHXl6CHW/sgZ0/WA68sRDbXpiO7V8dxeZbO/GxCOCj49h0 + WBxbD4ph2yFJbFufwNYNMWw6IoTPj/Zjyyl+7DzHD1weKBPAt2eAO3I81gC3NOHzy2rwj1MT+PVBYby2 + wI8Huqy4mg7fOXyG44n1OQf2o5O0Z9KGpXROF+wigD0YyjMw4gARAazSUlotpT0SVA5DZLBRHFIaNLAJ + vq7j+0McvIvo6B5Ch/KSTjvuH6P8zRkngFeyHfYLY+uhbIujisDJDcAZzcBZLdh4did+e1IbXtnQgK+s + SOEsyvH+XXbMoBNaIYBLdExMyQMqHmX/hqhQdZ6g8sxQIasMtEqtTKbBXcM+PX+SG0/tn8UvT6/DP6+s + w+brc9h+fRw7r0pix5UZbL0si/fPiOKtw9x4aS8LHlWZ2gU2PDjfgq8usuCbq5z4yaEevH1iCB9clMDn + d9Zg6+NNwEsdZt/bnd/pwbaXu7DluS58/mgL3rsxg3cvjeDdc3x49wwnPhgngLfenMCWu1LY9mAa2x7L + YOczvI8X0tj+chJbX41h+/fGCeDvhbH9OwFs+aYPG5/14t2Hq/D7uyz4xQ0WfP8SC757gQU/4PGnV9rw + yxtcePs+EcBFbHyuoUwAf6eL8jSArU+N4J1bevDswQlcMVKFk+jUn9nhxE3UF4+sbcIzRwziqQ2DuHZh + GqeOOHAwx8FyOuaLaIgXMwBeSsO8vMmNvdudWNvrxoGDLhxNZ/9m9ss3T2zGr68fwqdfn8Ln7sPOV1t5 + 37XY+v0Ytvw0iK2/4v3/0ovtP3dh+/dt2PKiBduetGDLQyKALfhEJPBDXnzyiA+fPOzFRw948Nk9Tmy8 + 04otd9qw7TYbNt9oxcZrrfj4Cjs+utSGf15kw3sX2PHBJQ58fJkbn17F9rkhgM9v5hi4LYLNd3FM3JPA + jvtS2Hk/5f8Ryv9X88BjBZMRvP0xtvvjKWx9MoFtT8WxndjxZBpbHknjoztj+PMVbrx1ugWvHWGh/BE8 + fktln4+y4PljLHjhWL4+oQo/u9iH31wXxDt3pvDxV5uw88UR7HhhMj59fBJ+f/MgHt+Qw0Uc+4d1VWFv + BmCLKIN79Vpw0HQ7TqcuuPeEDL51YR1+dHkLfnphLV4/LoTXjnLjhxzDv6E8fvy1Hmx5hXrh5wuAP64A + 3l4J/L5MAn/43Tl44/Y+3HRkHgfMcGAa9Zcy5EY6qjC5y4JZPRbswf9aN2TFcaNVuHi6DTfNs+GeRQ7c + S/15ywwvLh2J4ahGN1bmGdwxCFtB3XfYJDsuXBXHw8dX4/vnFvD7i3J457Ic3tPYuDSOdy8K4C8XuPGX + c+149zw7/nlhmfz99OooPr0+hXcvS+CXZ0Xx/KFO3LHEgstmWGiHyuSv9hQ+etSCU2dZcCV19gMHVeEb + R1bh26c48P2z+Nzn0S5d5MRbV3rwy+uc+O1tHvzhHj/+8nAQ/3g8go+fT2HLy+y/77Afv1MCXquljNcT + jUQLdn67jXLfgs0vNmLL11uw7Y42ykcLfntKNV45KIk7aTvO570c12fB4SKBeVxPbGA7HcXjMQxsj+mu + wtGdVhzFYProHieO7fHiGOLILsp9UxUOoJ5fRxzAtjq06wsCeE27B6u7Iti7K449WsNYQKdkVr0Hk2rt + hgDupkMrAlhE6hcEsMpB05mp1f45KnnrJ3ym9K0IYRHAHSoR1hrEUGfE7MM62BFhoB/BhPYQZnQwYBQB + zMB+Vq0F+w5YcQn77oXzW/H2wxPx2XPDbIsWfP58HhsNARzAppci2PZqBju+R337FnXXr/uw5a1J+Pvr + M/Cd+8dwzfElrJvj3kUANzCQFnTf3Qw6uqpFAHvRQ8dNZG8bg+Y22oY2TfzRKRO66JBrAlCr9AYbQhhW + yZaGKI9RDNXz/utiGNJq5NoQevM+dKTtZl8koZs2Z7DGjokNdkxp4rG5CkNs955GO+qKVaZcrQhgPx1p + B/W7JnRVzkcrg0u0NZ3U9aN0EKezDee1+LCAbbeYbbWYxy8IYPd/JICniQRmwDErRfuftGAmMZuYy/fm + Za3UhW7sxefZuzmGZbVBLCr4MY/tMIvtMYX/OZFO7Gi1H4MigItlAliEZmX1uiGANelDe6pA58sEsMkA + Jgbbgxho1QSq16Cf6KlTRqzKRdtMpl93mxW9lNOBziqM9tgxqc+ByfQ5lAVsSOBhhyGAZyr7d7hMAE8Z + pG4YqMKUIT6ryOBR278RwJ2NtJeUI5G5NWybWrZNHe2/0Mj+bxdR2ujjUWWgGax9iQBWFnBj9RcEcFuj + JkgZtLFtMrTJCvoVxGufIFOCaJwAVlCs4Fj7J5pyinTy6+iHtCobvmT/IgOYsiACeHIP77/Pipl81tki + gEeUCRzG3KEIpnb5DAHczXvpK1VhYqvbkL2CSqaLEJ7MsTpZZDDPJ7Wxndm2bez7WspOnv6C/Btlaykw + 0ApmBWkiqUX+lqE9Xh1mjyAFiIYw4PdFIvyvBLB57wv8TwSwnwGqoGuXCWAGJOMEcIrj4wsC2IoCx2Cp + 2oeG+iham5NobkyhnmNLWS7JOINx/k8yxgBU1+C4SSXL2b9JXkOloUVSCmafSwWWDLI0QZFj32sv4Loa + K69dJoA12ajyzx20NZ08trd+QQAPUIbKBDDbdNSHyWMhBmFBjA4E0Efd2U192tFkM/JbIYCbtJiPY7xc + BloEsPV/JYD32zOK/faKYvWyMJbNi1AXuqAy6iKAtd9tksck/cMKAVzdxEC8ReRvmQBu7KgQwK5/I4CH + JibRPRhHfWsIKfo7oYT6in3B9vh/IYCTDPITUb7H/hKZWiaN2Jb0UxPUaekU5VyTQOwv7SOt1evNDQEo + 0+vfCeDoOAGcwnB/CkP91AV9IfT1+dHX68fIcAwTxpKYPCmLqVNzmD2ziJkz8pg0MY7hwSC66NO1UFcW + OBbVnwHKlfYwVT+X5ZYBNdupWu1f5zR7RatMuJk8133z+2FNFiVCqK3J8j/bMH36GObOn4L5C6Zj9uxJ + mD1rIubM4nH2FMyYMQVTpk7iPY1hdJgYmYSOtgFk040IBvKwVcVgt8bhdqXh9eTZHrVoaOjH8NAMzJy1 + FPPm70HouIRYzP9ZhDnzFmD6zHKm71RibNIE9Pb1o62jA63tbWjnsUPnra28xxqkEwkEfH7aAC/8Lo+B + sntdVSKAy6Svjk6Lned6XYZeO+27E8Bl4nd3GOJ4HCKORSa7eO5zuBB0uxDVBIrPXi4ZSFQIYO+Xxv3/ + GwEsiKjUPuFlGCJ3tyxgh4v3/iUSuEIAuwQvn8lTLhv97wSwC4mM3xDA+VLckMAGJWUCh5HK+ZHOB5Gr + jux6r0zcKvs3aEjfhtY0mtoyaGjOoIY6plCr33kRy7AdqFfCCf2XFmcpM1gE8G7kbwX8D5WZ1nf03f+J + ABbp+58IYEGTWiKBBbW3l3Lr+r8RwLz+/18CWJkiofEJQzOmabO0Z5yyIFoa4mhrSqK1Udll1L21ZUKv + TOxRH9cmUJ8PQ5mgyk4K8z4jvMcY/yPBZ82ENSHkQj7mQSHqQT7iNhP5uTCvz/M8P6sWGazPTJk42/ik + P3/P+xKhrGsa6HwcsrNm4jBIfc/rZJI+5EUA5yIG1fkowXOVLhUB3BCmfoyYLOC6Fj+qGRMUG5zINYgA + 5v3U8xoNbqSoM+K0CRHaBh9thtpXRJvsuCaxtTdxC/25NvmH9I9U9re3LkKfMYhWZZClXWhJe02mr9nT + lba1lnapRPmpS3tQy1heUKnrSjZtIcVnp7yoDQ3py3aMsu2iHB+GIFD/8HlNWVF+lk14UTQEcBiFtMqI + /p8EsCkfyvFXKfunTBCRv10tKkWaRndrEh308aSfjf9Cna2qLcq+aqkLoas1QTsW4ech9nmQ3/HT9ykT + wAVDAGtfYl6bNqFA21DiM5uJ3YwXykqu5hhQFrCID2UACyKAW2nDO5qIZrYZdXOX9jeknVAllLYata2H + vjjbJmJHlnohSr2V43jo4Nie0Z7G6ilN2G9KHdaM5rCa9mxlbxhreNx/LId1k2qhjN49B/JY3JPFou4c + 5nckMYf/NZX3P5l9NpX/MYv+7aLOBPbqy2Pf0RqsndKA/ac2YC2xr64xud5gzZRG7DutGUsHC5hc70Nf + xoo++my9OTu6MowV2FadfN1Bv65dCwPY9yX2t0rXRiivPhEoFh6JEBGton/MMWxKQLO/ygQw/eSEsoDK + BLAm13P0u7QXt/yUCgEc4vcNcUsZ0GJQsxhHMhGwm0l/2WbZaFXpUNnzdMLDMeE15G+KulE+kn5vFnzo + OrymAeVkFwEsUor3EqbeUqUH46vxu4LZ9mP8N7sTwCl+V+Xiteensv9MthGfS6SmyADFAyKD5e+W97Tm + OOJryY72CVcpZMV//Yxfhrti6FcFHo7JFsYBjSqfSlvfwpjfLMhrsqCfPs7kXg9mD4UxZzBstj6Z0mLD + RPpDE+jXT+FRpZ4X0f9VZaT5jB3nNtvHYcMsXk+EsDKAtR3PYv7HIv5uLn2GWfQX53Pc78H319DnO5R+ + lPYD3jDmwcHDIoCdOHCyFwdO92L/2T6snRPA2oUh7L84jP2XxLF6QQJ7zAhj/qQgJvf7jO/W1cgYqGQr + E8CMuQzYBpl4OVtuV5Y328r4pYz58pQjlRMe7q9De3PavK7sNWlA37WcdUk/KCdiKcLvUQ/XBEyMkeX1 + tTezvmvKqvK/yiRMOQ6pLQb4mzh62vP0W4vobM2ithAyZL7IF5VGzVCOqrMhjuEocskAP9MeqCI36QtQ + hg2JSHn28FghgBMuxzgB7ECN344mL31hfreL6KGd63MwNgv7MTMTw6xsApPiYQzydQd9jEZ+t0YlpEX+ + uhkPeMqLKOIc+4Kyx1J+fk4bUaS+18Ih2RKRv9ITGX5WCNnRTt3fVYgzbo9RR0fQTHvcSJ1lKi1orFF/ + d2lvY7ZvE32CEmW+FLOZcVtN/VvNcVQU2BZF6rgC+0PlaQXtyy2bZEhNkX5JkXsqp13HvmpgLJgpE8C8 + b1OhgkcRwCJbRPrW5oL8jY86me2lMcjvaI7ZEFHj5wbUHWVyqnxUPCnSVYizHZJ8Zu3TWUj4KVcqpxzl + MUIdHOV9BRDzO/k7+vS8jrkWr/lvBPA4+bs7AVw1jl0EsPEXy/3s5W/1+yB9NPmC5j7Y1mUCmP1FWSzv + A6xFB9IH7CstuJUNImQrKtsFZNjGCdqwCPs0VLHpfD61VWWveukQ2SuVC1b2e7kKhTIq2d/sF/kG8jFC + vCfjbxiIkOIz26nnnLxHj5vtUF7EmAzSL4ypfVK0P7XobG7isYZxeJL3E0E6Sj8vQvnnsSaboc3K0xZH + 2HYOeOk7e+3yh6kjed2gx2kI4Mi/EcBl8q9MAKvy0W4wBLBA+0A911TjRn3JSXtrGyeAOd61WIP6M0/9 + WczTdtLOVnOMCtrmoaZIOc3TZ6FNLdA2qqqYIX+lh9UW1P+7IyrQ9ks/CxVSUySwiM0cx0Cc8q6tLSp2 + oEwAl/1UxVRacFjxS+UvVghg9Z+2pShENW44Xtin2uLDZJPyc20DISJYJc3lG8hvkk5TG2VV3YXfz9N/ + ycY9UEaxyGoTl0nOJe8VGDtFf5LXTMRlx+ini/xNBRmPBhAMueknM8ahvnCw3w2oX5w8ugkv4WMsEfTS + nlEOEiE/783H8UXbJjKfMUWQvy1zOfwfPneFANa8h6mAQ/2gLOAi2z7HGEBzC2m2mxY9mPLm+j7b938m + gCkT7M+SMqFVdY3jwmzvwThClQSqOUa0x7nI3ySfX8jyuZUJ3MDxpNLQHXknukrufyOAVf55Kv2WCYPK + aM+gs4m6rpa+mvzxmqg5qoR/XZYyQx9T/sR/IoBT1KUJZf1SX0cZU0Wod8Mqw6y2YRtFqMsb87w+x0pL + MU/9GEGUYyLsYJvZOX4N2FfUEUKY8hLndVTOuRBju8X91KGMu4IuxH1axPkFASxyuD5Hm5UVARynzxRG + wuvjtZ30j9OGAD5xwxGwnD3ViYvnhHH54hQuW5rHeQuyOGlKFMeOhnDihCBOn+jGhdPcuHaOG3fO9+DR + pT48v7cP390vgP86OIi/HObBuxvc+NsGL/68PoDfHxHFL9ZH8caBYXxr/zAeWyFy14nblzpwyxIn4cEN + i924Zp4dV86pwvU83r7Ig3uWevHwXmE8ulJ7+0ZxG8+vWeLD5fPchAfXLg7hJpG/e8Zw914xPLAqiUf2 + TeGR/dN4YF0Kdx+YxG0HxnDzARHcyP+9YbUfN+7jx+17B/n/ITy6JIQnF/rx7Hwvnp/vxHMLrHh+YRWe + X2zB88sseG6lA8+s8+AbhwTx2MEB3HOAG9fvZ8Nla2246CC20eFhXHxsFhceX4Ozjy7hpMNyOGK/BNYs + dJvyz7P76RzRiZKjNJEOz8SShc6wFSv6A1g3IU7HJo51YxEcPDGOw6elcejEFFb1hjC71lYuX6kJYzpG + ezVYsKHdgnN7bLiu344HJljxwgwnfjjHg/9mO72z0o9/rQvgY7bz5ydnsePceuDyDuCmQey4dyLw9Lwy + Afy6COA9gO/Ox47npmP7o6PYfHMnPjk7j0+OTmLzIQlsXRfDloMS2HIIXx8aw8b1QWw8wostJ3iBs3zA + peME8B0Z4O48cFcNcHsjPr+yiH+cHsVv2f/fW+zH13ifN/C+zy9acAIdvcPovK+mQ7oHB8MiOlHzszbM + plM/reD9ggDmYJThkwFUOQwRwWUSmMqDhjBEgY7xdQ2FfpCDdgGdrYN5/Yvb7bh/1I2XZ4fx1pIw/rF3 + CJ+sCWPLwSlsOyKPnSfUY8epjdhxehM+PaMNvzq2Gc8fVGOyxk8Zc2B1axWm8h4NAUwU6WSkGXDFNAFB + 5RFJ0ejwvQSVqQm+qDyaiSF+d49qC04ccOK+vVL44bF1+PuFTdhyTTN2XF2NnZdmsPOSDHZcksO/Tovi + 5wdSnpZYcOcUC65nH14zZsEtMyx4ZA8bXl5rx38f48W754Xx8S0FbHq4DnimGXixFXi+HTufbsWOr7Vh + 21ca8OEVCfz93CDePd2Nd09zmH2AKwTw9nvZ/4/ksP2JHPAcn/2bPH8lha3f0X65Uex8MzpOAAex9WU/ + Pn/ej78/YsPv7rbgFzeWCeDvnG/BGxda8MPLrPjZtQ78+StR/PNreUMAb3+Z9/NKG3a80IXPHu3Gb6+o + x9f3C+KyIQtOZn+f3e3EHUtzeHp9B751/CieO2qEYzuLU4cdJsNxTzrlS/NWLFZJ1KINizkeljVasard + iv26rdgwbMONeyfwzVOa8ftbRvD5N6Zhy3O92PKtBspvAVv4DJt/EigTwL/yYNtbDmz7oQ3bXrFg+9MW + bH2kCptEAH+lCp/ca8fH9znwEY8f3WPHZ19x4PO7ywTwVhHAt9iw6SYnPrvWhY8ud+AfF1nxzvlV+MeF + NnxwiRMfXeHBJ9f68OkNfnx6cwgbb+V/3xnDjntS2Hkv5f9BtvHDbONHC9jONt/6KMfMV/mdJ8LY+lQI + 25/id59MYfMjCd5PHG9f68Uvz63CmyexfU+swhsnWfHaSVV47RQrXj2jCq+fbceb59vx1lVe/J7/9497 + Mvjka43Y/twgNj85ivfu7cePL2rE3asDOG2sCgdQt+xJ3bKQ2LPHgkOmW3HB3h48e2YtfnFlG/5wdQd+ + d0kDfnCcH987xomfnx3B326vx6ZvTsDWH882pC/+vgb4B/GXvbDjvxfjszcX4pePTMNDZ7XjCOrXGV0W + DLeJAFaZVOqjbgZwvcoKVbDGPh+24NLJFtw8kzp7thM3TvXjspEkjm/yYx3H5irqvIP5vTOX2HHH0XG8 + dFEJv72+Hu9dX40Pri/gg2uy+NdVSfzjsiD+drEL717kwHvKxL7Mh8+uoT67IYWNN+XxzhVp/PT0CJ5c + Z8Mt1M8XTrPglAkce5OoX6hrT5pVhXOXO3DtWhceOsyB54524lsnO/HaqQ587ywnfsB2/eklbraLE/99 + kwe/u9OHv9wXwLuP+PDh035seTGEbS+HseOVBPBqFvhOkUfqtleasOObzdj2YhO2Psex/bVWfHpjM967 + qAn/fVIJLx+Uwu3U9+dNrDL7EB/JthHxu6G3CocTR/VZcWyfDUerPHRbFda38P1OO47q8eKIbg82dLlx + AAPkdRwbIoAP5OeHdrtwyO4EcGcU+3QnsLQ1ggVNQcyq92IyHdyhfBV6qbe6Cja0Fx1oyhMcV18QwCJ8 + lfXLY8mDdpG/1XSMOe5a6RB3NvrQ0xJEX3sYfW1hBvphjLQGMK3VhdltDsxusvK/LNh30IrLVnNMXtCJ + vz08Gdu+OYnowKYXCvj0+Qjhw6aX2H7fTpUJ4P+ijvj1ALb8Ygr+9p1pePW+EVx1XDXWznLtIoCbaQ+a + aQNaec8ddLY6GXhoH45O2oPWPB13ZXbkPSbzo4WftZX86KRj2MWAu7eO91wXQn8977lOq48jBoN1MYO+ + 2hC6eZ0uOnLtdPTbUpo4ok1lQDChwY1JTW6MNtowUK/V8Ap86ATyO0nq+AgdN2XoaRJSEz9a8Vqiw6ls + 4iE6lJN5rzMbPZhL+V7YqvJ2IcxrDGLGrgxg2xcEMK8rAnhqtgrT+d5U2vRJtBmTabem8Xwm39M2CAv5 + fHs2RLFXUwKLSwHM5bPPyDgwmRjjfY3wf4f4PD0MUto1WcdArUjHVhMN/zMB7KGT6kVve5DBchSDPWwn + 3m+vVvszSOqt02QqZYTf115Z2mO3ua4KbQ1V6GoTAWzHaK8Tk/rdmDxoxxTKwDTqZmG6jkNWHu2YyvPJ + A3ymgSpMG7VhxgQnpk3g90d47/1WDHap7LMFTdQD2m+nwPssJL+YmKlhO5VLVrsNAaz7btA+wMUqA0Ma + Ew3VVrSKKKZTrgnUuiKdWrZLKsogkT6BymWFGOBqIkXBjyZfinTma4oMCFRKkXJWk7XTAdYYsaO9ZEOX + CGDK+GibDRN5n5M5bqfyOWZUCOCxAObTP5s7XCaAB+vZNgULequrMNrE/lH5524GCV2BMgFMTGx3Y0Kr + G2Mi3+tcaGefaNIxR3mqEMAKCtLK5tEEkcA+FpIMQCIMhpRdqYlGL2XPw6OZFPRVwadAkUGe4A/rnH4R + 4edrZf9WjoagYEApuHmNyu93kY2a2OTv5dOk2UYigNNpG1+LBK5ChnJXYJtVV/tRW6uszRhqGeQURLQw + 8IyGGUQq8GQwqrLpafpH6bQdqbSVRwY97N8U+1lQxmicMi/iUISwSggXqbdqKW8igDXR2NVdhW62fY9A + +yISWGSw9gHupV0bHlT5Zz8mjQUxbVIckyfEMDwQ4ufUG61avEDZYN9UCOBG+mQdjXb0GALYsRsBXIWZ + kzneZjq+IICXBbHv8ghWMx7Ya6EXcyY70U2ZULkwEcDKbE3zmileM8P7zVNXVzexT5utZfK3QgD32ssE + 8MQARqaOE8CTkugZZsDVFkSGOjnMtvWxHcrkHAN/9dk41KdfJoCFaMSOIAN2P/uxQgCrLUUClwlgyjrb + vqhMnxo/muo4PqgfWzXBr4n+1ijbgTpRJaB70my3NIb64xjoC6G3128wNBjG6GgMkyakMHlyBtOm5TBt + ahaTGI+MjcTQQxvV0mJjYM6AOc7/p/zqmGZ/5zgGTQZwzmoyhKs5Tku0LVnq3Th1ZozyGY/a2fdu6tgA + aqrjqK9Po62tGp2dtegQOmrQRXR31qO7u5GvG9HaWofG+hIa62pNRm6pWMNnzrIdEnDaw3DawnC5ovB4 + EvD700gkq/nfjWhu6UJ7Zy86uoRunnehtaMdLe2taGppQkNTI+qb6lHDaxeKBWTzOeRyObZfgfJd4HPk + kc9meM8R+L0exh9uQ/x67G64bSKAVQJ6N1jscFicsBsi2M7XfM/Go80KZfs6rDxW8TtVtnHoO+MYJ4CV + AaxsYI/dDq/TzlhHqDKxj9kTjuPYkJkhyo/ANhX8PBd8HMv/hvHviTwwOsDP61MHmMUg4wSwSjm7eXTy + fxzu/5kA9pq9fz28jus/EsBRER/5ELJF6oeaOIq1KZRqE8hXR5HOBYggcoUIcvxc58mM3yCnUmn1lIXm + DJrasmhsybFfsqhpSCCTDyCpCbNkOTNOx0TKa/bJ1DVVUtqUlVaGca58vXjKQ9utPTTLWby+ANuBUMWD + LxPAyrQwE21utgnfFyo6sgyeq734ub7jJlSRahcBLN3KMenl9dWe0rEufl9tLOhau8OQx0SFANZYFgL8 + rSb+5GeI3ElyvOcyPjTWxsvEr7KXeN5YUlngKOoFtmNTMU67GUI6rLJxmoQtTwSJuNXEfUqT1UGOwcg4 + wtTRmrTn9ysQCSwoyysdoO3hvRjyl/erSeIAryfsmjAmIux7kaEJXS+qfXB9yKf8KOaUrRFGNftZ+6BW + V4dRqgmilnqonjqovjmIOvpLFQI4X+9Ert7Bo9uUfk7VUtfR1kfoDwWo1yoEsLYZyDHmrmcftxQDJnus + py6MnvoIuun3tVMGWnI+tGa8aMkGDIlZQ/+tSFRTbhTHq1SiJkyrKR8iTDUZqmvmRNYpg53yogzfsCbH + Nceg5/8SYmwflWItZvlcuYghgNNfIoC1yEm+iLJuNOGniUdloLTyXvu0/1x3Dv2dWZM50t4Uob+lbF3e + K33DEn2SRu2ZSR+whc8nNNOHbVIm0jgBrMl8TSiKEFEmcF4EN5+7RoSKME4AF/mMpXSA9iu0iwBuYVuJ + AO5uKS8GUkWInuYwuhr8aKvxGf+6Qb+L83/89IGt1O8cI00xDyZyPO45XIt9RgvYZyhlCOD9aNMOmJRl + vFmLQ2Y0YdVoNZZ0ZzC7OYYZjTFMa4hgCu99NOeh7+rikT43/2MK45DZDUEs6Uxi2UAWe49Um4zflWPV + WDGh1mCfiXU81mNhXw5T6FcPMJ4ZKLjQT/vWTV+lm75KG32VZvq+DUQd21qZyyn2gfb99VVRfiw8ivzl + c4j8zXN8VVOmSmy7WspXI30uLRSoT7lQQ5SzwB2UNxui1Jua4BdMpQuNUY1XykGFAA767QjTZsf4m1iU + +inqMvYtpRKrCeop6kSRw8r+NYs9iF2ZxMSXCWCjtzj2JffSIxUdUyGAlQUsPaH7iRC6zwzvWxPkRbat + ZCPF59LEuEguZTFLTsqEr0g0jm2+V9nTOp+iv894sKslhIGuuIn/Ols8aGl00SezobGRvlQz+7/JglZC + WbUjHfTpGa9O7/FhSquDcVSZ/J1QUyaAZzNuWNLuwh6dXizucGNRm8tgAb87h7GtElnm0U9b0mzHMmIp + vz+vyPfp/8/luF9Af2s5faz9Wqw4qMeKgwecOGiQGPXgkGlBHDQzgAPmhLBubggHzI9g/4URrF0Yx8q5 + cewxI4oFkyOYMRzGxL4gfT4v2qlXRACbWIN+V5F9nqWspNgWaqPKIg9B8UKW8iCCtr+7RB8qwXFM30tt + zXYU2RAnklp0R5nLK4O1mjqN+qhIGdeYFzmhBQT6viHo+N1KyVK9n08zrqmJoKMlQ581Z/5LGXkq6yvy + Jey38vrykWgb07STPI9Rz4b9NvoAtEmUbZGIhgDmMeCgLnaz3z0uZH2UA9rnxqAHrQHGUW7GXPx+N9Fj + Z6wS4NiLhxmDxjEpHsVAOIh2vweNPuoQ+hoZZZG5qQd5jNJOxagHBVV/EDIB2o4AdXaQet/vQEbveSiD + fL/Ie2xOU8ekI+aoUtENtMd1WlAiXUz51uKbBto1ZeJpQY6IrCJ1ZYFQiekCx0qefm+exyzbLsM+ksxK + 3ylDVTbJ9BPlPku9p/4Z7K7HcF8jdWmOss/xw/sWcasFPCLFRHTp+1qsJAK9QvaKSFe8aEhf2WQd9bry + 3rjtCxJhD9uDz1rOmHUY4kZ7dubjAYNczGdQLllMv4P9VMncVTzqtZf7q0IA20XyEjb6hf9OANPnIsqV + Yvh9QqWjPQ5ez615bxHR9Kfp11SyX1OUQxFgphIA9YAWhOi15FaLCpQ1KTuXZbymShoRtoshuPl8ynY2 + 54RI4CRlUJW0qmlnVJK8oejnUUR32V6q/LX6IKBn472pykJgHH6R1UYm6Q/R5xVpG3S52F4i3YO0U3Fe + T/sk13K80L9OJWhzI/QhQnyWgDkW0im+n+Qz+ukD29hm9Kl4LZ17HWxXyrlI4BD7IEz5056yKq9v9qot + Ua7qBNqwWo6xLxHAjTXUadUiiukL5JU1rPFbJs2zbLessjVpO/N8VvleWaIgP4FymuP4VPtpz2GNU/kC + hjg1umOc/OX7hgBm/Bal760KTeXXHDuqLEJ51bVFbqosdJj6d9dCIPodAf7eT58qJDtDefNS1rTg0K9y + yeMEcJrxdpaynGM/FijXZpsOPr8I4CQ/l38SD5ah8zB92Kj8SX5XiyP0DPJfMrTn2ktcz1FZ+GDGxW7y + 7+e4N9tvso1jEbfJ+g1HPLQ9Xvgo/y7qCDvl0ka9IlgJh+0LuOwigpUNrIWsfvapj9fenQCWTdTCKN4n + 7zcifcy20tZGCcp1mj5bjnIo+5ZOKqtd7agYkjpYNo76tLwdkua8JPsif+WbaT7IY2S4lNeewCK+qS+0 + EIe6WHolx9/n9TvqdfkLSiaMcZymeNT8TClG34C/0Z7AnfI7mgKY2l8mgKfQx5k0VMAQ/ZyuZvrnWqCn + 6iP0O4UGxiW1lJ1q2v6i/EvqsjTte5rPlqW+M9upECn65QnqXRHAIm4NAexkO7gEjm+v9GEEtckk9WbS + nKtMs/lc2fBsbxG/AdkAQgsyYtTdKb8WeVJ+2VdCiro6qcoF8vvHCeCajBauxHmfSUMA5yJh/i5AXe9B + XSaDhdOm4/gN62E5cYYPp82J4JwFaZy3KI8z5uVx3JQEjp0Yw4mTwzh9igcXz3Tjunke3L3Ah8eWBfHS + qhDeXBfBb9ZH8Zf1Afz5MA9+d5ALb+3vwE8P8OKNtQG8sI8Hjy934p5FKvNsw4083rDYiZuWenn04Jp5 + Dlw514brF9hxxxIv7t8jgK/tFcHjqxJ4aO8Y7lwRwQ1LA7h6gRfXLAzg5j2iuHN5AnfvHcf9KxN4eN8k + Hl2bxCPrknjggBjuPiiGWw+M4KYDw7hxXQg3rwng9pUB3L0ihIf2COGphSG8MN+PF/kcL82z48UFFryw + 0IJvLrXg5RUWfGtfF755iA8vHR7FU+tDuO8gD67fz45L97PhogPduGhDGBcencH5xxRx+uEFHHdAGoft + E8Hq+SKAqzC334KpreVSzqN0dsbyFkxmoLO8x4/9x+I4YEIU+w34ceBQGBsmp3DISBIr2ryYW7JiNGHB + MJ0XlSbeiw7W4S0WXNBtxc39Nnx1og0vz3TgJ3Pd+B3b6Z/7hfHxIRF8emwcm07LYccF9cAV7dh50wC2 + f0V7AM/BzhcXYsdrS4DvE6/Oxc5np2L7I8PYdGM7Pj2rgE+PTmHzwUls3j+GTQfEzfmmQ6L47NAAPtvg + wZZjPcAZXuDiIHB9DLgjDdxTIErYeUc9Nl5TwPtnhPE7ttcPlvrxjVEXbm+z4FI6iCfRuVuftmIVB9gS + GvUFHNTzMnbM4kCbxsCgTABzYFAZqfyFDKCDR+2H4JEhpXKSYtLewFGelyj0A1Ri8zmgDy5YcFGbHfeN + ePCtWRG8tTiCd/YK4sNVQWw8kM+zPodtx9Zg64n12HxKAz44pRk/O7weX1+Tw7Vz/Dim32r2IJnAtu7g + 9ep4j3kqoRQVUJxGVavQBZ1r8lMrhlVKqJEKpIfKZA6f7VA6x9fNjeLlg0v40xkt2HRFN7Zf0YIdF+Wx + 8/wMdl6Yx79OiuGnHAtfn2/BdYMWnNdZhTM6LbhkrAq3zLXg8b0t+OF6B/5whh/vX5fBJ/dUY/vj7Mcn + iScagIeJexrZpzX45Pwo/nGaF387yYF3TrHjX+e4dxHAeID/+dUCdjyZB15g/7xcwPZvp7HtOwls/14E + O9+MmBLQO74bxrZXAtj0YhD/fMKDP91nwy9vrsIPrrDgtQsseP1CC968tAo/ucaO398ZwnuPZLDxmVrs + +FYzdogMe7oZH97XjJ/z+R5d6TQE8BmU9QsHXbhv7wJeOLoHr548gccR3Lwkh9OHnTiEgcA+dMpXFOzY + o+jAwnwV5nNMLKKM78kAYSWDjoN7LLhyjyCeOaEOv75pEJ98fTI+f6Ybn79Qgy18ji1vRLH5x2UCeOuv + Pdj6Swe2/diK7d+pwo5nqrD9qzZsvc+Kz+624OO7q/DRXVX44M4qfMjjxrvt2HyPHVt53HqHHVtudxBe + bLrJi4+vduPdi6x4+zwL3jnfivcucuCfl7nwwVUefHStDx9fF8SnN4bw+S0RbLsriZ33ZID72cYPFrD1 + wTw2PcD2eTCGTx8K4rOv+rDpCR+2fT2KHV/nOHo0gU/vS+Aft3J8XObEW+fZ8fPzXPjZ+W785DziQg9+ + dqkXv7raj9/c4MMfbgnina8k8NGjJWx6shWbn+7Dx4/248+3tOHV0zLUe3acQN2ylu25nEGYMoD37qWO + mFmFK9f48N3zGvGnazrx3rWdeOfSBvz0OC9+eLwd/31xDP98qA1bvz8DW/97IXa+swL4cC3wAfHOPtjx + 2yX4/MeL8aenFuDpy4Zw4ooEZvcp+LNghLI6scuCacSC7jLhvJbnKnF87qgN10x146bpbtwwOYDLh1M4 + lcHlhjor1lMmTptuwY20BU+en8QPbyjh3bsa8NFtJXx8cwEf3ZDFB9em8P7VYfzjSg/ev9KFf13hwids + i89voh66NYeNt1bjr1dm8eYpIXx1bRVuWERdOMOCM3ndc2hHLljho04O4oYNtAXHJPDEcSG8dGIQ3zzZ + jZdPtuHV06343jk2/OBCJ356qRO/vNaD39zixZ/v8uOd+93412NObHrGia0vebD95QB2igT+dhZ4pRo7 + XqrH1mepO77RgE1fb2A/NuGdy2vx+zNr8KOj8nhm3xhunOPEWWNWHMc+OVr7/qoveq04gjiq14Zje+04 + qsuGDdThhzCgPqyN510qie7CIR1Ok/W7ju+LBD641YrDut04tNuLtQyg1zCYXdURwYrOGBY3hxlEBzCL + Du8UOrfDBSv6CypLa0dHkQ5v1m7282opukxpt3YG+W0ig/lZS8FBh8WOhqwN9eOZlyq3K9KtqzlABBno + M3hu9mIyA/TZ1Knau2kO72v1QBUu2SeOF8/pxNv3TsTWF4gXO/D58wV88lyY8OLzlzgev50sl4B+qw07 + fzmAz348Cb9/cSKev7UPF63PYvVUByZTHjo55ttzDrTlnWgruNBBB72DdqCz5DeZv015NxqzRJ5Bqkjg + og8t/Ky9FERHDe9VWRU60gnr4HudDMS7SyFDBvfXRUyZ5A62QwUigbtoawZrPBit92JCoxfD9U70M0ho + zWt/IQbodDYzdNziRIgOmyZo5Mxr5WsNg/r2OG1OxoEJbMupDCpm1Xkwr9mP+S1BzGnwYxqfQXsAT2CA + IQJYmJD5ggCexteTeI1RXmuMdkPn01MWzGafLaj2YXlTAns2JXkeYKDuwKQkrxNj/9Im9fK8xzyLG81Z + Jx04rW6mY6cysPxcKBPA5X18Wigb6ldl1fa0sk87I0QYPbzfDpGS7HdlgreLeK22mYxJ7Z3awGMT7XVH + M/+304GxXhcmDngwecBuCN5ymedylu/kQb4edmDKkB2TKPeTB6yYPsGBWZM9Zg/gaaNsi0E7A3Ub70Mk + b5kAztPOqlydytQJIoHrclZDAisTWARwY4kySrsuiAAuEfXVdjTzs7ZGPwM7H2ryCnoZ8LCP5DNo4ZiC + GU3mapJGpddE/jbU+BgEMkDkeSP7qJGOfSP7pL3Giu46G+Vd5K8TU/r4LP1VmD5UhRkjTlNSbu7EIOZP + iGDOcAhTujwYqK9iYEC7z7YarrdiQpsbU0UAdwcN+TuJGOOYHWkWvOhXFjbHnfaYyTPQ0f5ammg3pL0m + oxJ00AUGHakEg0cGKiJnlX2mIFATgRUSQcSESKAgAz5BRK5KBgqVjLfKUVlvFVSuoeMXv6UvxeAkThlK + 5RgEU7bSbK9EymogQjhfYIBdYCClSa5iEDkGVcmkAkL+L4PMCAPJWIy/V6BmsogZvGX1WxGSDLg4DgSd + KytY5YIT7G/tqVugHNRSzhopF23tVeijfPUPUuboF/VTlnpoU7poW7oJEcJDg26MjQQwiX0xfWoKkycm + MdgfQleHG62U1Za6KjTTDqpUuCkZTjlu30UAO8cJ4CpMGbZi5mSOtxn2cQLYj5X0NUQAr1waxLJ5KnFO + 2aC/Xc2xW837LPKaOd5rVqCPkqc+rG6qQi11dkML9eg4AdzaY0P3kAsDE/wYnRbH6NQkhicn0WsIYJW8 + dSFCefVzrH6RrflF1rafwb3I3zAD9ij1j9pWR7W3srU1YVDJFqwQwEZuiLSyANiPJeq9BpHA1I/NdQG0 + NYQ4lsPoaomipyOGgZ402y2Fgf4o+nqD6O0JGAywLYeHI5gwljCk7+RJQtqc673+PuoN2qmmRhuKbN8s + dVmR/V2kLixQV+eod7RndIFjQ8ix3XJ8raoKWWUnZNxmEqSaAXNtdYQyFSqTRKWoQZ1IrroEmhrSaG7K + orEhy/dSKObilBUhyeskKHMR+LwBuJw+uBx+uFx+uD1BeH0RhMIxRONxJNOZMqmrjIJCBulcGikGvUkG + v4lUBNFEGJF4EKGYn3rexzb3IxwKIBIsIxoKIh4JIRTwwet28H8IlXW2uQxcVpHAhI6E0xC6LjgsDgMR + xC6rSkHbDMFrUCF8vwzzuchfHs2knxVuh4jfL8jfCgHsC1BeNLaFEN8n/pMcGVnidyp6QOPeZKdSN1YI + YEP+Eh5ChK5KPFcI4MpewBUCOBhl+8QCCIR98PjZDoT2AA5GXYYADjEeiinjLRdCrjqK6roUauvTKNUm + DfGb4fvZfJjHMBJJL/tIlZU81BPUK+z72voUGpoyRM6gjjKQL4QNsZvQBDntcVLXT/vKBDCREQlMpLLU + SRkvYnEPdafIX94XdaAvYOez6/nL2J0A3kX+sl0r5O/uJPDu+E+fVUhic90KAfw/fLfyvnS5SOQKgbQ7 + ESxdryxvkUwx6uY026imILI3ZlBbjNDWcZzktYdhGNUiIbXXbozPHnQiwuuL/C3vEaZJe5G51MsB6vSQ + Jg/p14REAFNHU2dXUCGHU0FNHtlM5rAgAsBMELN9KpPFEcbe+p8Y5SXG7yaV/RvzIsd7FfKZAArZIIqF + IErFkBnfJfplJfpotdRDtbTZNQ0+VDeIAHahQN8rX0fdUUfdQX8kU0PbQ182mpJdYttQx4n0UmaI9rZt + yAfQomxfXreb/l1XbRhtvH4j+7+JaKVMiACu43e1n28hwWsLIvcStGWM2zWRbUphUp7SlNsU5SUh8o7j + pZIRY7LDiMrkuJnw1XNTnkR4FzNq/zIBrN+LANZksDL4RPqYrEzquuqs9qHzGiK3oymO3vYU+jrS6GtP + 0yYlDRlbIYBVOraJfqyI4raGGH8jcjhkCGFBJaCVUSLSVwvHKhklIv20v2OdJiEJTdZrn0c9q/Z6LKaU + PSwSWNnEbK/GMHpbY+jviJtqEL2tUZMFrIWVLfSv6/lblQTPBdyI2miviWqfHb1s2zltKukcxaIOP5Z1 + +RhrhrBmNI79JxWwdlIJy/oymN1E+8F7Hc56MEQMpl3o5T32xnkNYoD+dR99nCHawEn0w6bRZ57TFsX8 + rgQWdicxvztlsEBEMttqWnMUo6r2Q99E5K+OPbRxPWzbNtq7Rra3/HLtW1yprhKmHyji100EiBTlt8i+ + rY/a0MD2q4+VF/g30edqZF81sl1LycpkrSa8aW9pa5WZLwT4W7PnIce4z/sFAtSBIZEiHD/yg6JhylGE + esqQwNRV7IM4rxWWXFE+ygu3ytcU5LPtTgBX9KgWlXxRsYV6gb+TDjcLgAjdT4gQuZCmbGfZxiJBVOZT + iw80Ma5MYcmlCF+RvUnahwRfm4zX8fe1V6jKvbY2MOZrj9E3oCy0B9BBNLdwvDVZiSraewta6O90NNJH + 4+thZf22OjCRn49pzkxJLfSLptFfmkvfaGmbA3vST15OGVne5TdY2unFIr6/mLHkcn62D32J1X2UoU4n + ljbZsIi/X0ifYRF9hsX0ufai77YvY8S1nTYc0GfHQaNeHDo9jINnhXHQ3DAOIA6cF8H+PO43J4J9ZkZ3 + EcCzRqOYMhjGYCdjRfre1fRTlPmc5/Pm2f8ZkQzqA43r3aCs/Qz7oK7I8dpM34M+SoLfrZQBF6FeyRRO + 8To5ykyRekdjXW2v90X86nuCSN8vlyxVxYBa6saWhqSBzvWeyUrlPSgjzsgQx24y5mFfOgxJonlPU/pZ + 86H0EUQoinAL0E+Ie6jTvVq0QZ0T9KAlzLg4yj4NutHpoj/qZIzjsGLAy3gk6GNMGcPEJMd/lLom4EWj + fueh7PO7STfl2c0YhPpOC4mEChGcpH8gpGhbEvxOkrYm7aZvF2QbRzxoSIYY4wRRl6Ae0l7ztAnVbE9l + 9YrcLVHnVtOfLcR5zrbTe5XPCtTBWoCh/YazRHmRi0hc/i/bTvupi6QUAazMxiz1eCt9hKHeRoz0N7O/ + 8pR9d5nI0n1zfIj4EnGm/jMJRYoPaSNF/hoCmDAEGJ/t3whgwnzG7wtB+kFhPmuYdjXM51Wp1pj23QzQ + dhgos5Z96HMiyM9Fcon0rUCZ2uozB/tL2JXpS3/PZqlCFX0/Qa+/wBeEsctGX4P3oMxikwVMO6QsYGV2 + igTOiiwjCtRj+QpSkkmC7WTIS/pbaouyjdO1JP/j54TIwvL+xowfMowf6G9o4VA9bXm1ytpTpyVEKrJ9 + fXom3puPzyUSWNC53jPZzdS5OnptjFncKtlMXy0aRTGdZiyV5f2leD8x3k+Y4yrAPvWZYyoW5RgJsm/k + U8sn5nWs1IXyh7Uo0lUmgQNse5H50RD9Fj5bIUdfifarXLJZ+/d6UT9e7rkM7bHvgPbar2YcrpL5ubTa + jaBtMtmllMeMFjGyvbSARzo8Tdueom5PSq9zHEbHSdXdSVO1oSn5zHb9ggCmfAjU/eWjYnwRmrIJlBXq + aNmCXQQwbYuxMbQvIoBF9GtxkY99JBsTMYQ/+5pQlRaND23vobEi8jfNe0yw72IB3SPbRXaJ9yU5ll+i + ftdYyPC55K8JSbOoRHJQfhbBzzEiuRe0ZY/+X0S0XzGCOXfw6ICTMu5QjMB+V6nqCsyihnFoEYOL/e9x + 2Hhtjkvqp4CTz6R9yw0BLPJXtrH8fCLQTWULHjXfViHOy6COo71WtSmzlRSh2FcZ1uW98OVvifyVLi5X + QREZXJ2jH5Shf6tFOJprIUzlFCLLa2Wo05NsnzifNcpnT/CY5usCP6ujrWjN2NFBeelvDGAyfZvpo9WY + PFzEcG8a3c0RtFDe6nIeaCsR6S5B+2IXONbylB2zoEx+N2VAFWNz7Kcc211+d4p9lfSz37TfL9s0Jr1C + +dZiHunzJHV10kt58XHshWgjOD70fozf1VHfrWQDh00VCMoZf5v0UW6p05UJnApr0UYZ2vM7Qx2tygWl + NGOJTIxIoJp2QBn6aY67VMCPRsbMC2dMx/GHr4fl8GlhHDcrjlPm5XD6vAJOmJXDkZMSOHpyAidNjeCM + GX5cOteHG+b78JVFQXx9rwheXhPDjw5M4Nfr4/jj+hB+c7AHv1jrwA/W2PDaaideWuHGE3s4cP9CK26e + Y8G1sy0m2/fahS7cvDyAm/bwm/NrFjhx0yIX7l4WwMN7RvD1veN4alUKX90nhntWRHDLHiFcvziIG5ZE + cPueSdyzdxr3rUrioX3TeHT/JBHHQ/tHce+6EO44MISbiRsODOLGdQHcuq8fd+0TwH17hfDVJQE8uyCA + b83x4OU5Lrw814Zvzbfgmwst+PYyC76zqgrfWefGqxtC+PbRCTx7ZAwPHOrDjfs7cem+dlx0oAcXrY/i + wiPSOOfwLE46KIUjVkdxwBIfVs52YvlkKxYMWjCro+wkjdHJGctaMDlvwR4dHqwdjmDdcAiru93Yn07R + 4WMJHDaSwuqOABbX0UnWBDIxr2TBSjpbR9MpuqTXijsGbXhisg2vznbgF/M9+NMyPz46IIaNh8ex8cQE + Np2Vx/aL67HzyjbsuKkP2+8ew87HZmD7s3Ox45UFwHeJb88GnpmM7Q8PYNP1zfjs7KLZO/jzgxPYuDaG + z9ZGsZHX/OzAMD4+yIdPD3Vj89Fu4HQfcFEAuDYM3J4A7s0R1dh+Vw2vU8AH50Twp/V+/HhPtusMH+7v + seEqOoanFS3YsIsAtmBB3IZ5GQdm5soE8CADmEYFZFRKmsw1K6WoWJQJLOdHJLAx1FRGCnYrBPA8KoSD + C1W4gE7pPcNevERn8OeLovgLZef9vdku6+L49JAMNh5ZxGfHlvDx8TV494QGvHlICQ/tGcfFU1w4jP2z + iH0zzGu18d7qeG8K5NI0piJ9K0jQ2VaZHymdaiqKBjok7TxOZh+tarDinIk+PLYyi7eOa8JHF/diyyUd + 2HpeNbadncb2c/N47/gYfrjGga9R7i/ttuDERiuOoXN9er8Vl0+z4J6lFrxyoBW/ONGDv12exAe35bD5 + wRJ2PFICeMRXqoFb+PqqPD4+K4S/n+TC28fZ8PaJNvzzbDc2XhnClluThgDGY0XsfLIAvFgEXilix6sZ + bH8taQjgHT8ok8A734hg67eD2PJSCB89HcRfH3LjN7fb8ZNrLHjjonEC+BILfnKVDb++1Yd3H0jg06eK + 2PZiA7Y8U4uNj9XivTtL+NFZMTy0lxVXjFhwnsjbyT48vKaEF4/pxqsnj+L5Iwdw65I8zhp244gWOvaU + hX1rXNib2KOoPTAZABBLKOd7cpzsTzm/YK4Ljx6Rx0+v6sQ/Hh7Gx0924NNnitj4UgKbvxvBlh+FsP2X + QWz/nR/bfu3G9p/ZseMNO3Y+bweecGHHQ8r0teDjOyz46HYL27J8vukrNmy734Vt9zo5Lni8200EsPm2 + AD6+zot3Lrbiz+da8DbxzoU2/ONi4jIH/nmlBx9e7eV3/Pj0hhC/H+Pv09hB+d9+fx6f35fGJ/ck8OG9 + IfzrPh8+Ylt++lUPNj/GNn4sjk2PJrHxoTQ/T+JvN4bwh6sC+P1VUfz2akLHaxP440387M40/nFPCu/f + n8EnX602JPu2Zzrx2eNdeP/eTvzm6jq8eFwENy6uwvF9bEfqhWVssyUcY6sHLDhubhVuWhfEm+fV4+2r + 2/DBtW14/9JavHWCCz892Y7fXRHDv77axvabia2/X4Qd7+8NfHYA8Anx3mrs/OMybP7ZUvz1G4vx3BUj + OHVlEvOGqjDWWSaAJ3RR3nmcwzGzhNi7neOPxzOGXbiC/X7dFC+unRDCFUMpnNUewYltdpw6WIWr97Tj + kZOCePXaLH51ZzXeu4dj8c4CPrk9h49vyeCDG1P45/Vh/Os6Hz64ToS7i+0cwKbb49hyVzU+ua0af7oi + g++e6MdD+1lwzSLqwgUWXLbcjhsPol04qR4PndOKxy/pwrOXtuGb51bj1bNSeOX0AF4+1Y6XT7PgtTOt + +N65NvzwQid+foUb/329B3+gXL/9FTfee9iBz55yYMvzbux4yY+d34wTGZ6XsPXZOnz29Rr2Ry0+fKAG + 79xUjV+dncOPjs3hJerIB5f5cDl1/anU9Uf3WnAUdbQyfw+n7juSOKpXJZ/tOLLTvosAPrjFikPa7Tiw + jUFuqxVrmy3Yj8H2fuzHA5tFAHvGCWA3Vrf6sE9bCMvbIljQEMCcOu0B7DUE8AjHT3/Bip6i3RCqjSkb + 6olGnjcXnWjJO9GUs6NRpG+GQX+6ik4L9WeinHlZz9+KBG6t9xjCUOiud2JMezq1ODCnzYV5HI+rKFvn + L4/gG6e04re3DOGjxwfxKWXz02fYf98IjRPAfmx9tUwA7/xZO7b+tA/vvzaCnz02iEcua8FpayLYc7QK + E/icPdXaN8iDTkLkr7J/RQB3iAAuigD28BnoyBcYXBKN/EzQRJXQVvCZfYVUErAlzyPRUfSbsoC9dSF0 + 8vctbIeWtM04c8oA7sw5MVjyYqTeh9FGL4bYfn0lF5pNu1hRMEEBnS8GFjEGBTHqea1IlNNYS0e0LVGF + fgYQo2zPSQUbplU7MJvtNrex3B8ifyex3f8TATwtZzUE8FjcgiHajGFeU+dT+Z5s4Hw6lMtaEljWnMLc + Ip3OlBUjtJW9dHQ76ax28Lydz9DM4KU+ZUe1Vv3yflW2SaUGhVxSmbKUgZIHrdrjdpwA7m4JoLctjJ7W + ADrqVf7bZjLAWwp2tqX2460y5K8yJwWRZ231Nv7GjlH6JhP6PJjcr0xgq8kCVpln7fUrwnfKMN8fchgC + eAr9khkTXZgz1YvZkz2YPsGFifxsSMQY5d6UgOb1RaxVyF9BK/SrKZOSRWUuKxO4sZrPye+WYUUt71fB + XBODu2Y+W12Rzjb7VuXWFOiUV0uXAzNlOeTZRjUFyg/HijIhW+sDvDblps5vsuNFALdVVxkCeLDFjql9 + XswY9hAOzBq1G/J3Hu25ysrNnxTG7CE/9Z4b/XUWdLGtetlGgzwfbXFiSpcPU7r9mNDuxli7C8OtTgw1 + OzHcojLbblNKqIkyWE2/IsuA0AQFIn93J4AJBTsB9reIAZUeFXYnFnT+PxHAX7wuH/8TAaxzESSGJNEE + pIIrtlNaBF6eQQJlu0IAp3m/IoWzyi7hWMoyqBLRK0JSgatIjLACz90I4Gye8pin78S+KqjUFgMoQefZ + LAMxynqayNAHVqZoPduvhbquq8uO4RE3hkcdGBymXzdUJoH7qEvLBHAVhgY8mDAawuSJMcyYmsGksSQG + eoPopH5qog2UzBoZpm+tzN3/dwI4gJV7RLDv8jhWLQ1j+TwPZk5wcpxQR/I6tbxmDeW2mnq5IFBPC9XE + 7gRwQ3sVWrr5LINO9I1Rv+xGAPcMxdDUGUK+zot41okgg1JN/JoMzoj93/A/EcBC2EwyKECuYiBcRd1U + kR+bWSWt8uEF6sFas3rfxzbwmQyylvog2yKMztYoersS6OuJE2G2rR9dnT6DHspvmQSOYmw0jrGxMibw + fAKPw0Nh9Pb60NlBWW6wmz2cGzgO6zmeNAFTTR1u+pu6pMi2L5ijje87UeJn+k5dTRAN9WGOySjqqKeV + Wa6j0GT2PE2gtSWFtpYs2lqzaG5Koq46yutGTRmybDqEuIhIBrheBslejwceL+FTdqoXwZAfkUSIujtM + uRYiiCaDfC+AcNyDEOOLAANxX0gT7SIyVQaZ8FjhYVDtYSAt+DTR5OP3NOHBQNtMaBAeh7KAy3DbHIRI + YXuZ7B3PBBb+D/L3/wqObzNpwnHKoF6QLhMU8wia/DdEgEhdgXri/y8BbOAtZ/KqDPT/RgB7lA0YZ5uy + LXX0h938fyePlGNl3cR0pE7hMZbyIZUPo1ibQF1DxpDAheqYIX/T2SD1CvuHvwmG+X1CZLA+K5biqB0n + jevqy7/LF9nfqjaQLmcBiwhOpneH1yCREpnsNNcLBMefO/AF8ftlAlikr8jf/1cC+D+hQgALJpt6XL/+ + T9fRaxHA0udenhvwfUF61Oh6xrwi+kUCJNhG+VQAKjcsiGzU61zST/iQjfugLKRkQFk21A+MiaOU4bgm + ptmfKttpSncGNNlkMySwCGADttOXoe9oTz+Rv6pOIUS+BGVAiRiIc9wkdN1oeUIxm1CGDM9FrKZ9ZpGH + SljnGc8X6ccUqIeK9LmKtR4UaddF+BbqRP46kKf/pdc6ZumDpuiPxGl7RABrEZRQIYDreb2Wkkhf6jHq + j7ZikDbcixr6acooa8740cj/V8aZ9sITOVrOjnIyXufz05cTsnGRdHwGyqwmaCO0lYbw4/OLqBMRY6C5 + BkL+hKCsmqQyptUvmXIJ6N0JYJE8mlRWNqBKvWoBjohckb+dzQlD+FbQ3lgu8ay9gOsKIoo9tFNp9LZn + +V3qvwZleftNGcM6osZs98G+o743hB4hkkTPWMO2bjAZW0FzrnLQOT5niv2ajboNIay20/2I7FP270Bn + whDA3S28v1q2K/uoKV/OzCtGvEgrO8VB+0I9lKEuaOK1JtCWaNHj9BorZtVZMZ+2dUmHB8t6IkQMc5pD + mEB/q4dt3UnfQmhn37XzPtupn9qIdt63Aduqmzawj309TJ95lP7qGH2zsRrCHAPmfFDXo0/SRb9X6Kbv + KwK4l23SmaEdoj9VUjuwD1TOMa7+snIcWcoIU6/m2Jd17O9Wfl9o5nUa41Xl/aLpQ6tMrco/q7ynJss1 + cS87WymtX56g10T4v0OT88GgqqDQXnN8iayLaTKeYzcZ49ikbFTKP39Rutlqri1U/LYvE8DS7RV9IphK + A3z9BQHM3/Coa4lQUFaZyosW2M+KXZRFpf+SXJpy5OPQa2FXRiv9BxEhIk3amjmmGFt2dtAn6I6grcOP + BvqvDezjpka2FWNB+e5dRA99tsG6KozSPxIBrMqGk/j+DJ7Pp3+0B2OGFV1u7NMTwD59IYMV9NNW9NLP + 6g9g7VjMVD08eHICB9CfW93L73bYsTf9wL1qq7CM/tue9A1X8lprGDPsT9/voGE3DpkWwiGzwzh4ThnK + BN5vph+rp/uxYloQy6YxNjYEcIRxSQj9bYwL6aOo2pDJmDeoos60lbNJK2Ob54KIwhT9Le2h3VgT4zHA + dqO/xfeFSvslo4o5OLbY1iIiRbRJr+j93dtbRGW5DCvlikddS98r0aY11HB8l7RfOu2lfDxe38iI7k2y + RNsqeQpSJ8n2a+7TEMDyD7RITDJO2RYBnKAflKH/Uwh4UEP/pzUWRl+CY5y2ujfgRZ+H44XocTvRy++O + RMMYTSXQG6e/FaBu8FG3qHyoMs9o701JXzftCf93dyhLLjoOZdnHeVTJ6BxtSnXUh9qYn2OR+oeyr1LR + htTleMrxOfJENcdDhQA2e5ma12UUKPsiH5VYo+qKGospIsnxobY07WP6SIS6jTqY8X5jFkO9TRjpb0FH + c8EQwIbIog0tZwqXCWCdi/A1iUTyp3j+ZQLYgL+rkL8G/H6F3DTZrvytoKzgEBERIUufqXwsE1vK+q0Q + vrtDhL2d+shGWMch8nd3ArjyugJDgI5D/e4XCSwSmvZei5FMZifbThUsJIuykcpYrZBgghZmyTbreyKN + tZex9u7/MlRaWotfCgnZGi0Y0v7G2mIiQnvipx2hD8b/1JipkL1fJoArz2mynfl8LsLvoAy76bsFg4b0 + FZLjmb+RQIB96mUfUO/5vIYE1vku8ncc8ovdNsaz8sspowG2eZB+ToQ+SILyokzRYoG2kja3lnZM5aBr + Gd/XFmwGKvmsqmjFjEo+Mw5VvMt4KUUfQYs2lJErUlZbGZV9Ao29MsmudlbbqI0qZGlFPiq+gcjf3fV7 + lDKnayUpz7o/XV96OiuflbIvf8b4GZTpik4X9J5ZKCQCl6gsMorwHmI8JtTn1A8p+isGWrTHe0zwXOS0 + Fgdor2gtFND9SRZ1jyKP5bdkE/IdA8gTGWWs6zn5bJVM4ErWegXSOdqCUyWpXXztYhykUs829reV/S1U + sc8rqJC/u0hg9r/6z5D3ygZ2Mr4VIfxvBLAqZOh5x9tkHGZrFLZPZbGzKl5UFj1XyF/zmvpcOrVM+u5O + AJfP5ftpEYnR2/KZorQB/L2B3uN/VQhgHQ0BzO/VMJZuydpNRcW+pgAm9KYxZTiPCQM59LXHaVfol6ls + OP29DPszTZudIspk7+6+tV6X39N2LBUfvOyX00+gnyUYIpi6WeSusn/NkWNBSDC+FVJ+gjpeBK+I3sr3 + dRT03i4CmKiQvxnqZJG/GsMigKsZF5fSUSJuCOBCnHFWJMzPw/Svq7FkzkycdNThsBw8JYYNM1I4dk4R + x8+uxhFTMzh0QhRHTIrhxOlRnDk7hEvnB3DDwiDu2yOKp/aO4+U1SfzwwBTeOiSJXx0axM/WefHmage+ + s9KGF5Zb8cRiOx6Yb8Vtsyy4eroFl02z4KIZFly5wIlbV0Rxy4oIrl/qxXWLPbh1qQ/37hnB1/ZO4Ol9 + 0vjGqjQe2yeG+/YM4/Y9tOdvGLcti+ErK9J4YFUWD65J46v7pfC1dQk8sn8UD+wbwN1rvbiV93DTAX5c + f4CIWx9u29eHu/fx48E9g3hssR/Pz/fh5TlufHu2Hd+eU4WX51vw8iILXtvLgtf3rcLrB3vwxpFRfPf4 + NF44NomHNwRwywFuXLafAxcf4MUlh8Vw4YY0TuczH706hIOX+bDvXCedEiuWT7RiyXAV5ndbMJ0OzZQi + naWsxZQaXtLiwL79Qazt82Mlnab9Ol3YMMr2HU1iXU8Iy5scmK7vEovpYIkcOKHDgisGbLhn2I5vTLXj + 9bku/HKRD2/vFcSnhySw6WjilBQ2n1vA9ksbsOOqMgG8464R7HhkKrY/NRPbX5wDvDIXeHkW8I1J2PlQ + HzZf34jPzy5nAH/G63yyNoqP9wvxGMbH6wL4kM/7ycEObDrKhZ2neoELg8DVxC1RQwDvvK8a2+8uYctN + RXx8QRx/PTqIX+wdxOsLInhsxIXr6cidWbLgiEwV1sQtWBqjs5iwYg4d0Jk5J6YyuBAB3ERjJidek7kV + AthJhSMF5KYy8tIA+hmIigAuEn0csHN5rQOLVpzX6sRXRnx4cUYMP1kUw++W+vG3vfx4b20M71Mm/3VY + Fu8fnsffjyjgD0fV4NV1edy1KIQzh63Yl07s7JQF/XQSW6kcaqmoVQ4myaArkeQgI3SuiU4RwDK4JRqP + Ov5/MxXJIO9hHvv0yC47bl8Yw+vr6/DO2T349MIutmsJm87IYstZebxzTAzfX+XAg5T9s5otWF+owsHV + FhzdXoWzRyy4cY4FT6624HtHOvF7tuM/rs/g07sL2Mo23nF3FjtuS2PHdVlsvjiBD04L4J1jHfjT0VX4 + 83FV+Oc5Xnx+VQRbb0/tIoAhAviFMgG88zv8/XdT2PH96P9JAH8rjM+ei+LvXw3g93e78IsbrPjBpZT/ + Cyz4/kUW/PiKKvzqBif++pUIPn48i63P1uCzJ3L48MEs3r4phe+d4sODyzmmJ1pwOdvzljkRPLGuHt88 + tgffPnEYz63vxm2LszhvxIsT2q04rL4KhzR7sX+TFyvrnFjOoHIJx8ZiOv6LGQBoscNpU2y4+8AEvnth + E/54dw/e/2orPnm6Gp8+Rxn/TgTbfhTBjl8Rfwphx+982PkLyub3XcBLxJNu4BE3Nn+lCh/dZsGHtxI8 + fiIC+B4rtj/gxI4HPNhxn5ey68eOe8PYdHsIH17vxd8uKRPAwl8vqMLfLqzCO3zvvcuc+Oflbnx0tQ8f + XRPAxhvZdnckse2eHDazfz6+O4H374zh73cFCB/+ea+b7ePBZw+H8fmjUWx8OInPH87i04ey+OfdKfz9 + 1jTevaWAv91KubitgL/fWcK/7q3Fp4/U4/PH6rH5iXpsf7oZeL4TO57twcePtPE7zfjVZQW8cKQPtyy1 + 4ORBBkhN5eoAy3hcO8R2W2jFVw6L4scX1uOda1vx8fWt+NcVJfzqZBfeOo3ycnUcHz7ejm0/pS7402Ls + /GAlsPkgYBPxwb7A23ti238tw7vPLsWLV43ijNUpLBqpMsTvaJeVxypMoh6a1moxmaGLqZcUqJ044MFF + EwO4cqIfV40EcUV/Aud3RXBevxtXzHThgUPD+NYFGfz0tmr8+YEavH9/AR+z3T6lXH9yR5r9lMQHt0bx + 4c0BfHSzD5/c7MbG2yibX0lS/kv4J9vqN5cl8coJHty3nwXXU96u3YcyckQcT17Ygddun4rv3T8HP3xo + Hn76wEz88MZe/OCKenzvwhS+e64fL59hwyunVuG1s6x48zwHfnKJE7+8yovf3uDDn27z4J37nJRtDzY/ + G8S25ylfL6Sw7bk8tjwjWa/HPx8u4e9fqcZfbs7jVxcn8foxUbx4QBQPL/fixhk2nMu2P45tdLjAoFXk + 7+EifbtV6tmJo3scOLLTgQ2tVhzMNtOev+tarNi/uQr7sR3XqB0p96ul6xusWN/jw2GqEtHuwaoWL/Zq + CWJJUxBza72YWXJjRo0Hk2uchgDuy1ehi45uKx1crV5TGRMRmg3KBtV7KStqk1WoYTBcpP4tEHk6Q0W+ + LmVEljjo8Ctr1I1mop2B8zDvY1qjDbNaXZjbZmUgb8Hp8/149Iga/PTyTvzl7ja892gNPnwygw+fop14 + 1jeeAZzC9tdL2PaDNnz6Ri/++GwfvnNXJ247tQZH0d4u6rFguIa6tsaFvlo/umt96K4hlLFb9KK92ovW + Au+j4EVDvkz+1vF1fb6MBiGn7GCReISOGafZB06/71V5wNog2vh+Q6LKoIlo5fPvTgCPNHgMAdxb7dxF + ACujVgF92mQbifDyIEPnPU9bpTJzIoC1F9lwzoqxHMdB3sp+UCawG9PZfpNEDBMqAT2arRrfA7gKU/k9 + EcBT+VpVPQZoZwbZ/jrX4qEZeQfm1gSwR2sCe7SkMLPgM5/10xZ10BFupkPczHM9R33SipokAxo6nyI5 + c3yuLPuzTACzj8cJYBGdHY1lKLNb+751NvnovDrYplV0YHktooF2y5Bm49C5iLTWWiu6muwY6nBjrIfP + 1ieo1LMVkw0JPH4+5MDEwXJ2sAhgkb6zp/r+jQAe7rWjjzLUQbluKrGt+Z8iffOSw3Fookay2EhZbGab + av/Vet6noPMGyrpKOTVS9uuLbgZ0DOYo61ptr6BfAagC+zBtsjIeqrNONJR8aG0MQhmQnRw7nTxXxktL + SRnAfEY+Z1dtFQabbZg5HMLcsQDmjHkwh/c9b5IXC6cEsWhKmMco5gwHdhHAPbTZ/fzdEJ9ntIXP3unB + pC4PRttE+tp4PbZbs4Pg9+vdlHE3WjTRm6YsxdlvMRH3DETjCg4ZDFDGkjxXWV2RvyIGFHgpY0zkgUqQ + mjKkCtYY8FVIQkPmMnhVJsmXCWBlC4r8qRw1iajzcJSBF6Hf7E4A5znOlMEr8lcloFWKOpXmvY0jybER + YzAbZKBr7pH3FVK5qRg/1+R0hmNHZG/RjkLJjhL7sYZ9Vss+07HAYLycFVrF/6KcquR4oxXtbTb09jow + NsFDuDA8asUgfeZBylN/X5Uhf3u6+V6/BxNGwpgyKYHpU7KYOJpAf3cQ7S3sZ+qTigzX8D8qBLD2BO5u + ZRDX5sCg9rPu5XhTdvckG+ZPt2HxbCf2XOjHKsYRa/dMY82yBFYsDGMe5VclD+soHw3s73rq5lrauBra + vOo2opU6toWfEyKADcYJ4M4B6rWxcgbw2LTUeAYwg8buKKobA0ixncMJBsLstwCDx93J30C03K8VAnh3 + ErgCLUgxkxZEkrIkuRERHIuwzyhTyrStFjFCHVkrnUl92kT92qJs4EbqgPYIujuITo4L2pb2Nup7orPD + g17am4GBEIaHohgZjuyCSkNPIEZGouwTZV1r0lgIobkpgvq6EPtZK/HdKJWonzg2autoc2rtqKf8N1Df + NlMHtbSE0dYWRWsr26M5xvciPJbRxvc62hNEksjw/rLobEuhuSHKa0dQLIZQyAeQ1cRswotwxE0Z9iAY + JXjuD7sozx7E036DaEr7wfJ79NXLk+uUXcq79l9WGeXKnq2mZC/1huILbTljtp3h2PN6OW48VXDwteIQ + TSD63Q4zCaVsBK1u99iVnWCFsjTKE1cViMwtl3T+Arz2f0T5M03ylQngMgwBzHuqEMAmY7QyngXqvd0J + 4IoM7U4A67uVxR96ThHAlWN5718+n56RR7vbagjfCgksqCy0N+AyxG8yE0MiHWVb+g0JvDsBHBj/75Am + vTLa2zeKmjqVgS5nAJfJX/YHPw8Ey5m5voCNcu6mblF56BiK1QlU1yQNSrUpQxznCmGkMuxPxlzKAjaL + snTcDdG4xguf2zxr+Xl3J2gr5K/awOhS9u3uqBC2Feh7/xt2v7a57pcI4Iqu3v1aOq8QwKaqg6D3COlR + I2O0X5I9H19rUkxZGillE8YYh7Jt4yE+b5A6mDrXZKNoEo19pUnoqLKyfOVJpfLkUhnK+E3zWoYAZn+V + oYkpezmTZBxmAovXrJDAQozP9W/w8X98/Jz3oD3MKtkkmoAWVI5RZW9Vti+b5ntZL3W9j/BQ37uRq3ZR + Lmj/BPogedqEMtwoEDn6T+l82f6E6OtUCOAox2yW1xSJ2VxN/VETRbv2Q875Ddmbpx4VoVBPn60uQTvG + 1ybbg3oxLRubpO0ScWpI3/JkbyzMdgtZzaStsimVeRPkM+8ifwX20f9H21+H2VVk3QPwvbf7uru3u3s6 + 3XEPCRYIFogTSAju7u7uTnAbHGaAQQZGGXeBQQd3ia5vrbp9Og0v8/6+9/me74/11LnnHqlTtWvXrlq1 + d1mTvEJUZcOy0z7ARcpsgfKckp6mfSYPPnn6mf0IRf4qNHVD3JC/bQ0J49krb18RvoL2Vty6z6Js7hBt + pEoMdFWgQ3vt14SN/q6kvSBUaGFPSuS1QjzaDOQFbHkA17NsVD461p6XWfUTlBNNEMsbWMSwPIm1bUZ3 + SwT9HQmzILCd9lBLJf/ju+qY92peqxCvScpWgnot7SozBHANy6ab7x6gXTA+XXJKmMI+dib1/JwGD+ay + LxA53M//W1gejWwPTUSjjplXpfX83cBybWBaz1TQ3ElbnHY57+tkvXdZoO3RnS5DO8/L5m6hbSv7tyXB + /7K02WkfdxcDaMnQpmIfWKT+UzhHkVMBG9uUyAciTn1ayfptok3fVRlEJ9HGMYNIYBHATSzXesqWSCnt + GWoIP/bJ2hpD22tIrypEp1lIwzLwU04sWASwyF/ZQWqzYwlgeZaXFhZoUl8T1rS9BMkd8d8IYG3fYfom + ylxJ35Tg1/sJeSKLMBDxoHDxGY5TioqkUKBMst9LUR9qYYP2o5Scy5uqtNCBbZjHlueUiR7Csi1wPFOn + /pn2cUsLbeQOEcBBNDRx7NXAsQRtqMZa2jZVtKdoD7UWS4sfB2kXiQCeREzmWHEmf8+vt2GnlnLs1uXF + nr0h7DUQG0EUS2gDrZiQwD7TM9hvdh77z8ljzfQUVgyHsHzQh5V9bixvd2Ixn7EH7bk9+dwlTTYsp/23 + z6Abq6eFsXo2MSeMfeUBPCuIJVPc2H1COXahrb7z5DC200LNYdqI/SF0NzLvHBcr5KciOCnyjqDw+Nq7 + VHuYmigHLGPBjBuoG0SkaQ9tRQtQJKGxBLBF7KbYvjIqe5a1IkalabeVSN7vJ4B1fZrQvKEI5iraMRVZ + v7lX/+s9khWzGIWyFtaiA+ZzLPk7SgCPwMf+QoRk0sc8BKhDxxLAmQSGsimMT8YxEA6hL8Rxts+Ddg/b + TpA2XiKGzliEbZH3eKlD2Y+kXMw/05KnK/MjnWdB5cV3ad9JA75fpEnK66C+oH6K+Y0XcJG6o8A+Jh9m + H8P+JEOdmQlQh/BYYZ6rKOMKjWqgYwOO5aR3eGwt0pEnu8jfpGSW5f4tApj9lQjgRtoIvR116O9qoF7L + 8fwIAczykqemyF9BXq86L+9f4wHMfAtjSTyL3LPuN5C9R4jcHAvrvEUIW7C8fS0SdCxEiFrkr20ktaDf + 3z0nlNtokxHaQkQkqJ5fIoFF9qkf4Jgxyj6TuqZEArOfZbkUqA9MSmQTPvN/inrJkITUHdrmQOVjvFdH + oOelWW+FpLYaiHC8nUBjZRp1hTgq07S5RQAHqOsoFyqD7xLAglc28Njv5jd4aNvKEzjipf1GORSigYBB + 2OelPe3mmF2hgll3hKLffNc+/j4CWJCnrBbYyHtX3rXy+NS4p7LANmaiajgMKhTZLS0bgjYB9Z0ig6VM + Wx1Z1CEZM22W+ps6PCrbaoQYD1O+RbqPXRjwXdkZq9/VhhNawEB51j7wShXOWHnMsV5EDCvPIjvHkr+G + AGY9lMB3ErILtdBIW15G+DvONM7/E2xTJVAGRE6bOlU+RxYhMG+W97nyHaecpEX+pUOoVPQSoiITZl1z + LEo7TnaN2T6L18u728gxoTGIi3U8CuobjYPKmDpYL1Zq4fsIYAPKgOpV5K+B8qn6GyGAtehFtleA3yvP + Y0XCkQ0saMsFQ4yzfEQIm72VafdYxLD6MelehenW4geF0xcUvlt6XPsGq46NfcZ7tWguSzstyzTD8yKA + 43yfFrQoTfN3nteJAG7MaEs9F3rZL07oyRryd3x3Bh2NHOvmaFdpwTVtkiTzpW1TTFQ36u00bQETdcfY + 3BZoN8pmljduiLZykHUSFGk7kgaUisDVcYnQTXpFAJfI4CR1d466vRBhHx/leCnCMdYIdF7IhHyGJB4l + gOUFTJQIYD/bMO9PBA0BXJmOEhxzJWNEFAX2GTpur6vGzvPm4JiDD4Bt2aQsVk7NY79Z1Vg7swqrJqWx + cnwEayZGcfiMOE5kJ3zO/Aiu2CGKO3bL4uE9Mnh6rwx+tjyDX69MEWH8bIkfz+/uxlO7lOHB7W1Yt40N + 18224eKpNpw12YbTpthwyjQbzt3Ghev3TOPaRQlcsTCIyxcEcP3OEdy5W9I898lFeTy2RxoP7hLDugVh + 3LAghOt3jOGmnZNYt3sWd+2Vwz1LMrh/WRL3L0/g7mVh3LanBzfs5cZVS9y4fJkXlyzz4IolHly72Idb + dvfj7p0DzJMfT22jfWOdeGGWAy8wbz+eR2xrw8u72fCzZQ78fLUPvzg4gZ8emcPTh2dx3wExXL8qgAuW + unHOiiDO3TeJM1ZnccTiCPZd4MGSbcqx+3Q7FvL7Fg47sPNQOXbspaHcaMMMGlHTCvL4kceeA3t2+bCE + xtLuNHQWt2rv0wgOlBcwDabdW9yYw2tnEwtpDO3Na47psuHSwXLcPuzCU9Pd+MX8AP7Gsnh7jwi+XJPG + +kPT2HB8FhtOr8Smcxuw8aIRAvj6cdh8xyRsvn86Nj82E/gh8TTx8ATgjh5suKwB35xcxOcHp/AZv+eT + pRF8uFcQHy4mlnjxwVInPl5Zhq8OcGHTUV7gtBBwAXFlBLglhy3r+L6bq7D+mkp8cXYa/zksgj/uGcQv + F8Tx2FQ/rulw4BQaiAdmadQlbFhAbJO0YRYN8Zk0yKdyUDRQDKGBHZlWYsjQsQhghYHWAFmTNF4qD7+U + B48LRBcb7BwODpZXluPkFhduGh/EE5TNX26XwJ+2D+BV1vGbi+N4c3kSb6zM4N/7ZPGv1Tn8cU0Fntwz + gytn+3AEy3SBBjRszPK2aqZy0CbrMs4SHGAlBSpxQ/5yICECWMqlhgZdNd9fTwXQQaU0TENzLxqv50wL + 4LGlFfjrkR348OROfHZcLT4/pogvj6vEGwem8PLuLtwy1Y5DaESLDF/Ejmlv1u8R3WwHbA/rFtjwo73L + 8eeTknjrwhw+vjqHL69j3V6bxPrL4/jm/CQ+PTmM9470440DHPjX/ja8epANH5zsx1cXxrDhukyJAL7v + 2wQwXuS5lzLfTwA/G8VXTyXwwQMRvHqrD3++yolXzrPj5dPYBk634Vfn2PDHS8rw+g0BfHRPEl8/VMAn + dyfx3k1x/OOiMJ47uNwQwFewLV86uQy37JDEY/s04MeH9eC5Qwd43Ibrt83grPE+HN/pxKHN5TikI4T9 + 2sNY2cI20OzEbmwPO7JMFAZoIdNDxttx1Z5h/PD4Kvzh8ma8eVs9Pn6wAp89msSXP45i868SwF+I1+PA + q2HgT37glz7gGaaPEPf6sOEWR4kAvtqGT66xCGC7IYBxV4AIErz39ji+vj6Kjy8P4K2zy/DaCAH8+qk2 + vMEyePMMG945swz/OduFD8/z4sMLFA6abe6aFNbfXMBXtxTwwQ0pvH1tDG9eFyICePcmPz64xY+Pb43g + s3UxIo0v78zhizuL+HRdkeer8PEtdfjo1lp8zG/7/M4WrL+/HZse7cKWJzqJNuDJdtYffz/eg8/vasN7 + 1zfib+fk8fSBPty8ix0nDduM97oI2N1aKEdDNpy6oAx3HZTAb86uxTuXNeOzK5rx0YUV+NuxbvzlRCfe + uJRt/KE2bP79TGx5Y0fg0z2BDStL+GQv4O2F2PyXhXj3qR3x7MUTcPLiLHYYtgjgcgyzLU9opbw32DCV + A7/Z1GkKn35Qnw+nDLFP4IDuHA7Azu2O46zuCC6cEMQNO4Xw1FFFvHJxDf5xcy3eva8WH97NcmB5fL4u + i89vSeOzm6h3bozik+uD+PQ6Hz67zoNvbgpj47oMNtxehbcvT+P3p0fw1CFO3LTYhqv3suFG6ubHzm7C + b++ei9ef2ROvP78Ebzy/GG89vRv+cc9M/OWmfvz+iga8ckEWL5ziwTNH2/DccZTrk5z41eku/P4cH/5y + cQD/vMKP12/0UbbD+OqRJL55PEsUeVwifz++px5vUb/964o8/nhuCj89NoLHVgZw9y7UbbPLcIb2vmb5 + 7M86WN1GdNixtsuJtd0uHMD0wC4RwG4c0OHCfi1lZh9shXpW+O7FhPTGHtSPGvjuRtnfo8aBtRxA79cT + MgTwHs1e7NQQxLY1fsyscGN6hbNEOFa6MFjhMARwO43dphR1l4hd6rJK6leRmjU0ekX8ihSuJLT/hQbF + CoNiSOAUrys4UF/kgJnPqyfkFdrHwf7kGjumN4kA5iCbevKQKU7csCSJ59UmL6rE65T99+5N48MfRPDp + YwF89aMw9UkWm35Sg29easMHz3ThT/d24vGLm3DhfjmsmunFbJbRQIUd42qp8+vD6K0LoacmiO6qoCFw + Ww3560GjCOCiF3U8VqjfmpwL1Vknagxc/LZy1GacBvKIbcmXQkjL+1eQp2wtv0+o53dbBHD/CAE8OEIA + d4twtAhgPkuGpDxZslpRTyikUlXahbrkVgJ4IO8w5K6ieUytKGddODGlWI5JrINJ+TJMJiaMksRbCeDJ + IoBZ3hYBPJ71osk01efsmgB2bE1ix+Y0pvPbtaioU/0R+5haGsK1PNbeZZXsMyoUzixZzkFNGQopDsJ5 + LkuUCGDXCAHM8hT5OYogWmq9hkytYb4VGq2KkBe49snSOcEQwEUbmirtaKsrR3+rx3gBT+ohep2Y3M/v + 6ysznsAifeX9O9GEhy55B08dcmLOlLEEMGW0h89pL0dXE+upVp699m8RwJJHhWkzoaBZVg00vA0BzGN5 + /yo0dFOdF021mjjlAC9Lo5ploFB2Cg2mQYuH9oLCVSrMnfZ7EfnVVBtCR1MUnS1xdDcr/HXY7HnXzDpv + 4Lc2Ucbb2eb6m8owd0Ic8ydFSl6/k33YbloQO8yIYcHMJHaYnsKcwdAoAdzLewYM+evCcIv2AXZjWF6m + zWXob7BjoNFhSOWBJievd6GLctZaWVq4oD0JNWGtyVt5Jon8FQmsvQ41yLE8wyyiwMWBkOWxpglBkbuG + IKStpJCnkXiJzJVX3VgCWHvKihTRsQhg4z3I4yjfKURiYwlgt5mkz1J+DQHMOomzDOOUeSHBwU6ciNA2 + 0mDV7IdJyONulABWaC0RwCzbyhq2y1o36uv5zQ2sszq2oWoXqqrKUEHdIpKwvrYMLbQDOjuc6O/3YOKk + ACax3CdMdmNoAsutV56/tPE65AXMsjQEcAzTp2QwY2oBw4NJ9NCGaGnQXmxbZVje5YYAZt22jBDA3a2s + lxECeOIA29skB+ZOd2DbmeXYaZ72AE5g2S45LF2YxR47pLH9TIXKtKOefVsDdXMjdVYd+7wa6vYq9rdV + PK7m/7W6ptmOOva/IoCbuhxoNwRwcIQAzhgCuG8ohbbeJGpaoshXB5HIehAyhCTraYQ8MwQay3IrASzi + l3JBW9QgwYEgbdK0gdOQv4YMZjvQXkgaHGt1ufZizmfc0N7YVQoVLxK4QiHV/WwPAUPatrcQrQGWv5tw + GbS1ulkX1J8mHHQEAwOhUZRCQydMSOih8Un+H4NI5PaWGJoa48Z7t476pq6OOlvewXUsm3rC7CXIdtsU + QFsb39kRRVdXHB2dCbS3x/nO6AgiaG+LoaMjzmvirO80ejnY7u5ImXc0sI+oqwlRpog6Dl6rwmaPWIX/ + FZJ5HxKK1sOBf6bAwa9Clee9SPE4xfFFkkhkKcMZu9mDOUT5DlL2Ayw3s1eu2gnbnjXBbvZ9ZHnqnEg6 + N9ueJiRCfk3MOkxIRoVoNpOyIxMlGrNoksSAukipQv6NncyywgB+H75FAPO5/4MAZttX27PaskUA+9iX + CAG2e2HUCzgo4rOkM7SnZDmfIeK3nCijnhQcfL4Fi/wV9FsEsMvH54W8iCYjLO8UyzaJeDpCufUhGHEj + FC2RFgHqH+07LCI4zvFRplDa81ehn7Vvr4hf6asQ8+VjGXqYB5GnoTDlOsm+NhdFrhBHoSJhIDK4WMnj + YgzpbAiJlI+6jm3DtA+BbcUC3x0IiYzld6quRlAiT0oEsEXCCv//JoCNZzEx9lk6lr78FgFMaJGPJrw0 + vjX7AFJmdE4TYhG/JmxF9mqCj+c8/E7KnCYezSQfr9VefJqU1eSsJpZyYd+ol4GFrZNRlleCjstMCEEL + mXCJABYsAlgEYjIkwlegnmdeTOhn7ScW97H/CowSwAqXKMJLHi/SS0Y/aczMNmkiQ9BmErmbKZYhRzsp + x/F6nv1Egf16nv1isdrL+ua1IwRwhO1ylACmXaDIBgpxrFDGzVUxtFRFUc0xeE4TgGy/2huvKsF+h/KQ + 4W+FuzXhV5kXLZDRHvTxmAPa21VEmPZ21aSt5XEiwlcTkP8bAazrkyw3fWuR9qG8q0RGWASRJhs1AV1H + 3dTSkDTErzx5G6qou4p+VFMHaZ9fA/aVgjx/G6t9xiNYBHBfR954Dcvrt4L2q6K7CAWiRACzP+C3ycYZ + JYBZxiqbmrzfHBdZLiIzRdonqQNybDPaE6++srRthhYD9rbRJmqSPehDI/t+2dDVfFaFZEHhNZ12xMoc + yLrLUfByDMEyauX7ummn9bMsB6k/h2k7TmUfO4P2zcx6HyZXudBHe1bEbx3Lq45lWMcyE2S/1rAsqynb + VZTdSsq7IrjpfAN1WDOfK5JX0HEz67+FaZPAc/V8dw2f08C0g31bb2UIfTVRdFQEaLt7Uc1+UJO5msgN + UJeK/A0xTfN3NW2eVtrxPTUR9BKdGmOw7JvYTzZSrmpYb3nKRlqT95IP2jjaGiPAc1osFKSMWZEUrHDM + QpBtIRSi/mHbCrLdiDiQ91iJAGZfxLIsLS7YShD8vwlgp9Hd3yKABX6bFXp6lDDgOb0jLbInFyztu619 + 2NPsD9kODQk8AiusdZztQ4RwjN9oIoiwHtPsD7WNQ22N+m4fmmkbNLeKAPbTdqMNR3u9vpo2ucYEtKua + aWN18XiANvAQbeHJHPtPqbFhFo+3pa20M+3e3WknL+4LY+lgDEsG4wbLh5NYRVtozewsDphXwEHzi1g7 + O41Vk0LYeziANcTaQR/WdDuxgjaVFravpJ21T68D+w17ccDMMA6YE8HauSKAQ1g1w4fFE8uw66DmWZ3Y + aYIPO0wMYs6QQnb60a4FaLQFs7KLKHsKDy6IzNSeiRorGC9gnjNQebKutX+qCAQRvCIO/icBTH3LMrSI + YIXhHfXy5f0WFD5a0H8iikX+jpITxmtYnnm8RtfyeQoXLu9tjQFEfCgahCF/1Zcwv99HAId4TlEf5LFf + CHKcTP3fkqCcZ1OYUJHDxEIW49MJ9Mci6ApQ7r0etBGdYY6BgtQXLsq+FnrweXHaHXEXZZP9SZhQuF9B + BLDmW1VmQV4X4Hu176TxmqMdpD2ACxF+F/vyHPssi/hNUVYVzTHJa9LsTwqGAC6RvYK8foUK6ivBIoBV + /ioXQ9Cp3EfKXwSwCbOvPozPURj+lvo82hqLHPPGWD8c/7A+RdCJECsRwKX+U/caAo9l+r0EMFPLA9jy + ELYITov4HQvT946k1vFYD1jBhEIeg/8rAeywaY9gO8rsDmNLqs4D1MsigUVMxhSlgWUu4jsTkzyVInEI + 1qIs/SfIC7RE+o7I+ncgklH7kmpLiapMGPVFEcCpEQI4NEIAc1wyQgBb3/z/IoD13Ur95SJuR0IBj5C9 + AbcL8gz1OkseooJCXo+1l4XvI4ADAvMSYt0m2P5EsBoCkP2f9vbNZxxsaza2NRu03ZQWyGcIs0c3oXDs + kiV5h6uNl1LKPMvBhMaWXIzIhEX6WqTq/5Ad6g2j341tQbmXHFMn5+U5LTvBzCeVoqMoKoQWecjmMAs6 + icAI5Lmr/X8DfK7sfdmFIoF1LLnVYpUwU6tdRtiuBGOnSG5H8mjI2xF50T7WcdZbJh4wxG9NMc7xIMH6 + rWH7KST8xgvYfBOvN3JMmNDjxLfGKKzHsWGe/18YJYAJ1aOvnLLjZD16NH4qEfgRkcB8v+wto++YD7PY + hfnWIlxBdpkhglnGFgk8lgBWOzcLILQQQHpkBBn2gdLJis4iuTfbHvB6RVEREZzi/Un+F+c7LAJYNoT6 + i6oE+zvaoa0Jsu6kAAD/9ElEQVQVtDWaIpjQk8P43hz625NooQ2Vj8vuZN858owS+EzKkBZRlmxuLa6k + LGjRpRbEGHucbVPEbFALNbcSwLLd9d9oapG4I4RuNuRDMR5GZSKKqmTsW9A5/ZeL0h4PcTyse6jr0yKE + +Tsb5f0GAeY7iMpUhPo2wjRKPSzil/ezz6hKx9HZUItdtt0Gxx12EGyLJlZh8ZQqrJhRi5XTKrFsQgrL + ByPYd0IEh86I44S5UZw1P4ZLd4jjjkUF/GBRHk/tmcWLSzL46dIUXl4SwXOL/HhyFzd+sKAcd8x34PrZ + Nlw2w4azJ9lw8gQbTmR6whQbzpjjxDV7ZnD1ohSu2C2KKxdGcMtuKdy/KIcnFhXxo0UVeGxhEg8uiGDd + DiHctGMQN+8Yxbqdk7h79zTuX5LDg8szeGglr1kexT1LA7h1Tzeu37McVy524pIlLlyyzIXLmV63lw/r + dvfhvp0DeGg7L56a7cSz0+14YYYdP2H+Xpxvw092sOEXi2x4Ze9y/PqAAH59RBq/PLYCzx1TgYcOyeCW + NTE+z48LVkRx/r5pnLVPHgfzecvnlmHPaTbsyu/aZYIduw+XYY8Jbuw2zo0d28sxv96BbarsmFfpwM4N + ZVisMNDtbiyisbO4yY79+kI4ZDiFg8YnsLjNjW1pYG9baTP/r6UxdHKvDdcMu3HfZC+ene3Hb1kGr+4a + x/tL4vhm/yw2HZHD5pMK2HxmFTae24ANIoCv6MHmawew+dZh4K4pwA+mAY8RT07n8RCwjv9f2ogNp1Xh + i0Mz+GzfFD5aGsH7ewbwHsvqvcVuPr8MH61w4Mv9RQD7gNOCwAVh4IoIttyUxqZ1ldh4azXWX1uFr87L + 4oOjYvjr0iB+uzCOZ+aEcXOfE6fTODyQxuMSDhIMAUyIAJ7BAcjUqiDGVYRRx44szsaoDuRbBDCh1dFu + DoC9bhrOPBYB3EGlMJPPWc7B5EktbtwwPohHZkTx8rZx/Ha7IP7COvnnnnH8Y0kSf1uWxl9WZvCnVVm8 + sqqAh3ZN4uKpbhzEctU+wkNs0F1EEw2xIhttmoZInIODBCESOEUFo/3vzB7ANOaqeV01319NpaRVrl1M + tY/J4QMu3LxTBr/cvwVvH9uFj45uxCdH1uDTo2vx2tocXtzdjxunlGNt0Y6FfN8OHGTsUbCZ0MinjLfh + unkOPLLYhd8ck8Zr5+TxwWVZfHpVCl9eEcMXF4Xx6VkhvH+cH28d6sar+9nxzzU2/OtAO94/yYcvL4gZ + AnjLujxwb5H1WwCeYDqGAN4iAlj7//40jE0vRb5FAH/8UByvrwvib1d78NsLyvGz02wGr5xtwx8usuHV + q11477YwPr+XMnJ7DP+5PoK/nefHjw9y4N497LhlWztumOvEXSzbH65pxE8O68HzB/fhkeUtuH6bFM4f + 78OpPS4c1+HG0V1hHNIZxppWH1a0uLBnYxkWciCxA8tiAbGmx4YLd/LhoSMKeOWiJvzz+mq8d3cenz7M + snia3/BKGvhbCng9ScR4HAFeCfBbQ5Rv4n4/Nq5z4tPrSgSwYBHAm+/0sHx4zb1RIs52kcT6mxP47Mow + 3jnXidf4zRYB/DqP3zidYPrWmWV472wX3j/Ph48ujuOTK7L44vpKfHJDJd65NovXr0ri31fHiSjeui6M + d2+I4IMb4/j45iQ+vSWLzxUq+s5qfHlHDb68sx5f3dHItAlf392KDfd3YcvDPcBTA8AP+4ku4/2LJ5g+ + 1oNv7u7AJzc14dXzC3jxMD/u3asc51NnHdpvw6pOtqsOyhD1zjm7leH+w2P4zTmVePOSOnx8WR0+ujCP + f53oxj9Pc+OdK1P4/JE2bPnTLODtnYDP9wI2riCWA5/tCfxnIbb8bSHe/+EOeP7SCThtWRY7Dsvzl22k + oxzj28ow2GgvDQAp71oJvl2lHWu6fDhuIIYzBqM4szuMszsjOKc7gCumBnH3XnHKUT3+dm0T3r6rAR8/ + XItPHszjs/sy+PKeNL64M4nPb2d53hbBZ7cG8dktlOVbfdhwexSb7srg6zsK+NfFUfziJA8ePdiBW1bY + cNtaF35wUga/WjcR7728BF/8aS0++zPxpzX47Der8P5zu+KtR2bjn7f3449X1+Fltptnj7ObUNAvnejE + z09245XTffjjeSH85ZIQXr0mjPduZ9n8oAJfKbz5w3X49IF6fHBXPd65lXm/osgyTeLF44J4fK0f63Z1 + 4+q5Lpw9ZMORbdRtbL+rqadXtXDQ2kZd3uXCWpG+Xc4REngMAdxkw7IGefrajOfvnkx3p+zvKjKdsr9b + lYPlGRj1AN6jyYsda33YptKNaflylnkZplQ4MZl6b5B6RARwW9ZhPEQVmr5AvZKP0gCmoVJJ3SbSUKmI + Ya1wk5GjFXCGBOZ/VVl5g4qYK0ct0ZjXfrM2TGDfM6VeBLAbCzsdWD1gx/nbsu/cN4qfnEQdf2USb61L + 4P0Hwvj4kSC++mEMG5/PY+MLtfjiuTa8+VgHfnlLC+45rRon7xXDXhNcmFZnw0CxDOPrQhhsiBoSuKcm + ZFboi8BtNgSwDw3Frd6/IjKqaNhXsr+oZKpjecHWpMsNRAA3Z7WfsMd4//bWRtCQdJj9wWr4zSKBW1IO + tOec6K3wYFyNF4N1PsowB8P6XhGhaTuKfI5FAOdyARSyARNORqHxGpPlaOM7DQGcYxtgmYkEFsE7qejA + xJwdE9i/TRQBLDJYqGBdVaiuyg0JPJHXa0//fuZngOU+joOU8Xz3pIITM2lYbteawnYtabMlQi+vaWUd + yVOiiqjgsfYnEWmfi7MOk2U0ejUxqFXrCnmo/POb827jVWII4PoIETbkb2udH41VHrPXrshfDYyKfH8F + j0WaVTHvgiHSWPcNzG8T7ZRO1n9fS4kEntjtNCSwPIEn9fG7+5h3EcDjSgTwZJ6bPK4MMydqD2DK6pAL + E9kfGgK4w4nuZifa5FVQybrke0UCCyKwRQDruIrlWJJDB2pZthYB3NIQMARWNctfnr8y6LU3lAY/PtoJ + Xg5YNDDSBGmOBrzC37bw+zub4+huS6KnJcr3syxqWZeUvzq+v4FtrY0y3se+Z85wFNtMDBsCeP6UAHac + GcFOc5JYODeLnWZlDQE8ibZaX63deP+ObyrHRLbNiTyn84Ot/Ea2/x7Kd18922QD0VhOWSw3BHCbwkAX + vJThbxPA8tiQN2eUg5Mgv+d/EMCERQBrUlAedCIItYfmWAI4HFVY5zGhoTUxyQGpIYNDmsQU4SLy12kQ + 4UBIBHCcspNWmeY5UKQO0QR8jPURoaxFmCdBk6JRtiORYspbaTEe8xJ0fIsAVgjoIvVSVY0LjU0+tLQE + 0NwcQmOjH/V1bMu1buMVWlvrRFNDiXTs7mZ7HOfH5MlhTJ0WxLSZQUxh2kcZ6+ywo8ugHAN9PgwPxjB1 + UobIYbA/jq5WeVtRF7AfMjJMWLJcx7ptqStHR7ML3dS5/W0OjO8eIYAn2jF36lYCeI8FcSzbJY9luxaw + 1045LJgTx7iuMrSyn2ttoW5l39fcZUdjN+Wqh7JDXVhLnV9LXV9LXV7DetdxA/Pa2utCz1CJAJ4wPYPx + U9KGAO7oz6CRA8iqhhiyFUFEWP9jCWArjK7qVIiPIJHw0v4sLTyUt4+JTkD5kcyI8LX2RNKAWINjeQFn + KGOFjCb+XcaTrIY6VB5nhgRWOHS2pZZGL+vAieYml0ErbTB5AXd1+g0J3NsbGMVAfxhDwwlMnZrDpElZ + DI5je+qKo51tqqEuivpaeQGrnvlc2uFNLeUE65hl39rqR1t7EB209Tq7IqzvqEn1u53n9V9bewjtHWGe + 03/amziJvp6UCVXd3RlDW4u8k8J8lryTEmhuSaCWfUcV3ykUqesK1X4UagIo1vhQQV1XUetHJb+1soEp + v7eiTuFm2e5qnMhUliFNnZyijktSlyezZUixb0lR/yeJ0jHLVu1Acs92acpXE/hBtiP+FiGsCQqLBBZx + a0jckXSUCBZGjs2YxoI1QTLy20x26X7CTIIQmgA2XitsayKAjee9dITA8YaXeRr1BBZJMQYlgpLP4X3S + GyKAy5lfQ/7ymQrzbGdeLTgU3m0MRAQr/HMw6jeev8XKHAqVWeMJrJDa8rYOR+WF7UYwUmbeHwiVFqeI + BBZpq2PpH5HRQeoeeTC7vfZR4jUQpD6St1w6hHQ2YohgIT9CBitNZULUdb7/od8C1G2CX+Uw5jvHet+O + krRj/vv/lgD+vnOC9czRZ38PAVxOjL1XqSF8CU3sWbrdIoRFAJtJYMqA7jeTf/xPE39mUlsyIHmgbCjV + JJ2X1ysMaIkAdtGW89Hm8xPeUXw/AVwKS/ffCGBNYBmwLlO8T16kOh5LABe1T2yqRACXPJQV2lAEhsA2 + Jd1EmAXUKT4jwzbG9pRkn5vO8V3s1w0ZzDYoz+BClRsVtFmy/wsBXJX3U4dRx1SECXlCMC+se0OG8rpC + xIEc24G8MXTO7MFpRUegjhTxqwnEEGGRvBbpa7xPWM5mstHCmPIXNImYoIzrW619j0sEcMlL0IR3ZR7r + qyNork+iqSaG+ooA+yJ+W9pJe4u2Gr9tLKSb5RmssNC97VnjMaz9frW1hyK6KGShIHtGBLBsBk1cjiWA + tTewPHyrsrQteCwiJcVvFQGcYLvLsE50r8JJN1Z5jS2orUBaaf82sK+uYZ9fSVu5GGP56ft8tEWoD2Jl + dmSpAyopC7V8n0UA98luJYZoO06mbTa91oOZ9X5MrfEYm1ghnhtYB4qOVstU5HEVy6+SMlzkcwuU3TxR + wWPZtXW8vpF1ZchewRzb0cSxS4PAc9X85irWifLRRlnoYxmPYxl310TRVgiint+n8I0ipUJ8dpjtIso0 + x/fWUF+0sN/s4T19NWF0sw/sZH/YwvFCPcu5kraNFg2YMhuxdUJEgHnw890h2UmUtaDIWl4TYF6kf7VQ + yAoPLciTKRqmvMe0GIJ9N4/lWW7JmsJc6hp5C4eEEV02tu9XOpYAtvSHMJYAVj8g4kHkblKkTy6I6sqY + gfbhlie+wpnG+GxB7TLGbzCLNJQ/2mxJzWuxfFNJlpNkoEKRWtyoqw+goUlge6vjeKGaY6yKEplazzpv + YtrJ8UE/7eYhjlen0t7VmG4OsX2DA7uw35djy4rxCawcTmE5sdQQwPw9MYHVM9NYO1fIYPWMGPamvb1q + QgAHTgnjsKkRHD4phAP73diPNpa2UTqA44tDaI8fOieKQ7eJ4sC5QayZ7cOqaU4s5th7IccgO3FcutOQ + Ezsoes842uSdHjRXlrY6sgjgBMtS0QUVPTBE2ROJI0KlRICVIJJXhK3m90QeihiyCGAD/m88fCknlpdv + ycOXZSt9NHIspGUXjyBH3ZBnnWhsKXJCc4sifo0HIqF3mfCzrCeRSbItTNhV5nMUlGfZERY5YwhgntOe + vUlPOXJ+6oIQbbpEBD25NCZU5YkChvIZ9Cai6AhyPOTj2NpNu8xLfcA0x2ekbcwH+5IojyPl1JEqH5aL + yHHBEMD8bRHAfratUQKY/yvSRDbE/keLkHjtKPGrMh+BzhVoJ2wlgBV2XfCgkuWiRSsqc5WVyk5lO7bc + VQ8i25SK8JHezbDvkSejiGCFfxbBaZF1IvFEeiZoJ4wSwCP63Ox1KvBaS7db95k+lmVtQkXrWwlDcI4c + W1DZywvWgn5/i/wk/hsBrIVeSq1Qz/8tBLSusa5z6vl670ge5ekZ9oo8Y9tm2SdC1Pksg5QWn6h9KxIB + v1/7wooYjxpis1SG3weVl/p1hYqtoC1WV0iw70qiJh8bIYAD0H7HJtS1SGiReWPKI8C+QgSwIR5HysL6 + bssTWCTuWLJXx9+FJdsifS3bWceKruN10q41JDBTtxZg8t2sO7OwhW3PtDW2K3n4ytM3R72mLbGUqi9N + EbIJEuzHLJmy2n3YlIHKYoRQlWxIVsbKBb/Tsr8s2THlp/v5rFI+tPiNdgz7G80daWGO9LEiNBSyQf7H + MTuvU39g2YCWt6vCkIvU9hPm+/ifvtGMAySDei9h8jYGo/njNbILDYHLclMquzHKdplVeHa2k7rKJGor + WbdVaUPyq24tAtiqS+t+wcm6G0vkCt9H9n4fxt6jepRceCk3pbpjOVOWLG9n2VtWpANL31ljIJWDysci + gY0XsAF1hPTmiD4ohUPXApISEkZ/s0xVj3yGZTONEsDSLXxmlO9VVINRApj6WPOmdWkHmoscyzdHMdyT + w7iutNn7t6HCY7YU0P3CWAK4RAJbBLCbtjX1mkhgQ/5SLsLU/xG/STPG43crAazzst8L8tSNUm5iYYMK + eecSVamYIWlrM6zDMahJJ8x/IoHlEWxCRQshH5/rp/3O/sag5A1cTPCZye8jgBPoaqzDrtttg+MPPxi2 + hZMasNuUeuw5tQ57Ta7AXuOTWDYYwarhCA6cFsPRM6M4hR3y+fOjuGFhGvftnseje2Tx9KIMfrwogWd2 + D+OJXfx4YIEbd27rxA1zynD5dDvOm2LHKcM2HMvO+5gJTCfbcOKMcly0MIZLdk3i8t0SuHa3pAnr/IM9 + i3hqUSWe2a2IR7eP4v5tg7h9+wBuIW7bIYw7d07g/t1TeGRpDo+vzOCxvZN4aHkE9y3xY90IAXzFXk5c + vLgcFy914vIlTp7z4PbdPHhgZz8e3daNH8504NkpNvxkmg0/n23DL3aw4ZXd7PjtsnL8fo0Xfzw0ij8e + U8BvT6jBS8fX4bHDi7hj/wyuWhHFpSuTuHCfHM5eUcDBzNOy6Q4smmTD7hPs2HNCOZZM9GDZpACWDoew + Z38Qu7V7sbDJg4WNHuzR5Maydh+Wt3uwpLEMSxtp8HQHcfj4NA4bSmNvXUsDa+dqG5Y3l8KLnkVD5+ZJ + XjwyPYAXWe5/WpjEW3uk8enyLDYeVMSWo4mTK7HlrGpsOK8BGy5swebLurDpyj5sun4QEAl890TggcnA + Q8Q9PHdLD7ZcyuvOrMdXRxbx2doMPlqRwPtLQnhvsR/vLvbgvSXl+HBFGb5Y68LGI73AqYESAXx5BFtu + TGPjugpsvK0WG66rwfoL8vj0+DRe3zeBP+6RwIvbRXD7sBtnNNhwIA3HJVTKCgH9LQK4OoRxFRHUsrHE + pACkaAQqI6fAcy52PKVQbVQeVAx5His85gwq+KWVTpzY6sHVg5S3aSE8Py+KX20XxO92DuJPe8Txh72S + +P3SFH6zIo3f7J3BT/cu4P5dUrhwihcHttkwn3kapFLRXosNERozMh5i7FxHBrLxuIhgnpNioaLR6sAK + GhdVVEhFGv/VITuaeTyJz1nc7MDZ08N4emUj/nV4F/5zZAveO6we7xN/X1PEj3eL4bqpXhxUW4ad2CHN + 4Tdsz/JYwXo+hgbvFTOdlGk/fnJgAn89OYN3Lszi4ysy+OTiKD4+14/3T/XgP0e58fpB5fjnvjb8g/jX + ATa8d4IHn58XwYZrtC9tjnWbZz0zfYzpj5g+lwV+kgZejmHLTyPY9HIIG1+KYOPzIWx4Noqvn0rg04cT + eOv2MP5xtQ+/u9CFn5/GNnEq28NZNvz+Ar7rCgfevsGLT+6M4ePbInj3ugj+eWEIPzvagyf2ceEhysp9 + uwXw4F4p/Hj/Zvz08B68cFAPHtqrHtfPiuGCcW6c2e3CKV1eHNfhx2EtPuxT78SSqnJDeknedyyyPHKl + fYBP28aJ+w7J47eXtuMf19fhP3cV8ekjOXz5TAqbf50B/s7veSMJvJkA/hEDfh0EXogAjxP3+7HhdqfZ + 9/cjKwT0DTZ8fasDW+6iDN9P+X2A9z2QYlmlKL9pfHlNDO9e6MPrZ9gN+fvvEQJY0PGbPC9P4HfP9eHD + izJ4/5JKvH95Fd66vAL/ujSHv1+cxt8uSeFvlyXx2pVxvHlNkmXE9nRDFp/eXIHPb6vEN3fU4Zs7G7Dx + 7iZsvKeZaMWmezuw5YFutknisT5D+OKxLuCRDkJpD6/vwBc3N+MdvvO3x0fw1Govrl9QhpOpuw7st2Gf + HhsOn27DRYsceOjICH59dg6vXVDEBxdX4KMLsnj9FA/eONuLD65L44vHWrHlL7OAd3cCvtgT2LgM2LAU + +GwPnlvIcl2ID360HV68fBinrywRwNoDeLBNoU0d6K2xo6tgQ2/GhvGU+ZkZO/aqd1FHRXBSbwJndEdx + VkcQF/Qyj7P8eGTvFH53bgPeuLUZHz/UjC+frMVnD2fx+Q+S+OoHCXz5QAxf3BfFZ3eH8cXdQXxzTxAb + 749i430xrL+bcrkuhb9c5MMLJzrwyGE23HOwA4+eksDPbujAW8/tiK//vhobXz8QG944CBvfOgQb/n0w + vvnjKnz8k4V44+HJ+Mstrfj5BQm8cIobPz6+HC+d4MLLx1G+T/ThN2dG8Lvzo/gr6+zNm4r45J4G5qsV + n9zfgndvb8Cr1Gl/YR3//IwUnj0mhIf2c2LdXuW4dG4ZTh9yGPJ3bb0Nq6nf9iFWUVfv0+YwBPB+3W7s + P0IAH9DJYxHArWXmmhWN9pIHcJMNezXajAfwKAHMwevKFhdWqm9ocWOPRi92qPZgTqEcUzlYn8jynlQo + MwTjeKa9eQfasmVoTDlQpYkh6jFD8FKnGW9g6tpq6phKHosAzlBXpQgNjkW8af/V2lwZavmsmnwZ6rN2 + dHKgP1S0Y0qdF9u0+rFzRzlWdLG/Hi7DlTu48PjBHvz6/BD+dUME/7knjI8eDuHrHyax6YUKrH+uDh89 + 1YR/3NuEH19ei+sOT+LQ7TzYubsMkyspR0U3huqjJQK4VpMyQXQU/Wgr+tBUEFHmQ/0IakSaZTm4TZej + IlVmUmGUAM6UCOBG9iXNORc6Kv3orAygjoZeNb9vKwFcxjIqR3fBhb5KNwZrfeiv8qCD39tAOa6mHGvi + bSwBXKQRr3BgdTTom1JutKed6BklgB0YTz01gfU1gf3aMMtLHsHy/J1c4cSUSpcJize1yomp7J+mFMvM + fsDj+B5D/irle/uY9ifLMKXKh/mtaYMp/AZNtilEXg2N1CKRZz+h+lTYGe17m0k6oD3nCkSe3y5P4Aqm + IssVIrmlNoS2+ggRRptC/dVows+N6pzdeNpae+/q2JDAzLsgEk2ewbX8vlpeW8/yaaac9VEex3c6MaHH + hYm9/BbqG5HACgE9edBlPIMn9dr4n92EhJ40yLoedGK434lxPU70Ufa7+Yy2Bu3j60J1wcF6LYVoKqbl + 0VzKjwhgeaTXFJhS/mqJxuqtBHBFpgwpDeIovxq4aTCmla8aHEVliEumWZ6NNUG0NcZK3r8igFt53BRC + a43bkNu1/G6FgRYB3NvAOuvRHsB+zBlmPUwJYMGsKBbOTWGXbXLYeXYOc8aHMLHdhd46O3prqQ+b+c20 + 3yZ1eAwJPK6lHP1sz911NvSwLXcpbShDN6/toAzIA7hEANN2SNLGMINVJ+SllIhxgM58ayWwRQCLLBBE + UmwlgGn7cKAe4SBfBIu86rYSwEpLk4rytAuPpCJLSkQw38FzWwlguyGAYyk7EhkHUmwbKaYJ1kWU8imy + 13hCEiKDv48A1iSoCGBtj5Gl3BkCmHJfW0/5aw2jsyOG9rYoWlsjaGoMoKFBXiZe4xnc3OxFO8uvp9eH + cfKunhzF1BlhzJwdx4yZMYwf70Nfr5vwoLvLg75uP8b1hjF+IIrx/XH0dAbRSr1YX609nkZkWKD8CrU8 + 10Ibq72JcifP7FY7Bqm/DAFM+3zuFBHAZVgwz4fddohi2cIclu9axNKFeewyP4XplIPBAeqKvjL09DvQ + Pd6Nbp7rmhBAx5Af9Z2UTdooIn+rqf8VIrq+ne+krPeMD2BoagITZ2wlgDsHMmjpTKG+NYWKujjL3T1C + ABMRhfJWnZQ8JYW4gdd4SCZTHDCm/chQLylNUX7k0aZFA6oXhcWyBsYiPRT2NJ91oSIrrzMPqotetiWv + IYHra5j3Gg/qa11oqCtHc6M8gN0jBLDHeAGLBO7u9o2irzeI8UMxQwBPmZLD+MGkIWblTVytPT617yV1 + VnNTkNcHWGZB9A+EmIYx0B9DP+urt1f7C4bQ2Rkw9d7a5kVzq3sEHrTzvR38v7snit4+3tOrcNOEuTfG + 87yf/3X2UKa6Emhpi6OJctVIOatvCaK2mXrapPy+FsqaFge0h9FIO6SpM4QGvrOB76znu2rZdqsb3ahs + YJ9Sy/ZYw5RtVKHLC5UE9V2xogy5vB3atzpJfTsK6uU4y1uEsCYkNIEclB5ie1AIM0PWMjUhB6mTzIQi + YSZWCMszeHSCRMdEabKrdM23wkBbkyB8j2D2hCREQnjZJxgPZkJhob1sjz5CaYms5HOYunm/k3kS8WuR + vw4+3853jYXOCeVOB1yecgSC8rwVMauwzBWoqioim08hmY5SNoOIxfyUPw91F68NOAxCHDuFOIYS4au8 + WASox8djptJn5Xy/8uPzS29J3inj6eAoUukQMrkIyz5KPRdkHjzmuVr8IpJZhLKebT3feodF/o4lTr5F + APOd34XKxmDkvq2wj0L5NvknvH6R6xbBrjwoL1u9jKWny/h9Y4lokxIm5LOeMfJb71Wqe+ysf0MA8155 + nBsvCNX9SGrtLWiiXfBY5K88gDUpO5YALsR8BqMEMMtMYeksAjjHPkDIR12jyLCPsAjgUSJY97HMM6xL + HX+LAE4G2McGkOV7FAZZk3DyOCx5HbJPiDqgULpm7CwSlrZJXJEK2Mcn2N8naWekaSdlaG/m2V8IRdpk + 6j/+GwFcmfPRFmD7LgRQw+OsCBi2AdkBSrUHrMIAJyjzmuAtEcAio9nH8Xi0vRIWKaeJR7Vfi/Q1bXcE + o4TBCDTZG2cb07fKy0p7MSsEp/ZVlDdRmuVQmfOjrjLCPimGumKEtpSHdpkIIOoSIk+bbSxkqzXQVpWn + cFtDzIR+FmGsBW6ycTRhaU1aisQtEPotD2eLANbewBb5q+Mc+xB5ACcpkyLuM6wTbTtRlfOYycu2+gDf + RXuWtqlZDEiby0QEEhEa4nvZJhUKNu7ib7cdVfy+Op7XXr49rIuBpN1EpxlHDNN+m1bjxSzaZtPraQvR + zu2l/dDG/+StW8t81rBsRN5WsgwLlOM85TfPVL8rWfaKbKNrG2Xv8r5mfnsL7bfWjLx0XainjaJF9pV8 + hhbct7A8e6rCGFefQncNy22EAM6y3rVPqbx5RP5qj9I822c166sxxX6N/VRPlQUf2ljOdXxPgXmU/JgF + hfxGEcAmBDnzEpTMcnyRYD7ifEeM5Rjm/1p0YsLxU/+YcNAimYL8j+0kIdss5kUs7EKI7cia4Ff0CIW9 + lNew9JjRk4T6fu1LXyKAXfAzv2ZRCe+x9Icg8rcUFlTHzBtTeRIn5HGmsMIjBHBlIWK8z+RtluDzDKKa + z2I7Zt5yxjuN4xuOc1L8fhHAGba5Yp7yq/EB7YO6Bj9q67SlA/tIjlsqOB40EaVoF2qxbCfbryJEDXO8 + Oq3ejhkcy27bVIaFtCH2Yv+/cjCG/aYWsXZqBVZNzmDFcALLhkQCx7BqWhz7iPidFsbeU/z834e100I4 + fHYMx81N4sTZKRw3JYKjh704YsiNIyZ4cQztwqPnRXEEcfAcXj/TjVW035aO53iZ45Cd+mxYOL4MOw65 + MLuPY462cjRx3CAC2CyYZd1mWGcplpvlASzSQ/u5qv0bD0DWoUIxi8jNsKxEyso7UG1bEJGoVNcoVLhJ + 2c5KXsAiLkVKbiUgMqwXC9p3XASwQpVmeZyknT42vLSIStVRXHYg6166aJTwZWrA41EbQf0AISI24mS+ + XQ5kfbRhghxjxMPoyqYwriJnMMDjjljE7Pfb4HOj3lWOWlcZimVs37Q/kkSM0H7ZIpTlXCPyq0QA85vZ + /ym1iHORwEpLBLAID347keb7U7wnyesFEb/yrtM1aZ8DCg1dyX5cxG8lxy6joDwWWTa5pAhMEePsO9gm + I5Rvq+xF0kn/yktTYfgV0jgZoXyz/YjgNOFvpbOZR+lqkXkK52v2vWU5637zP//Tt42C55RKFka9J/l9 + sr0s718RniEiOIb0HEsA61hQ3/x9xK/gJMx8NjFK7NodBg5HCeU8tiDSd5QottvhLNM2IyU7wMe8+Fnf + ATfHdcaTknrHzzFd0EVwfEfIqzLiE6hzRLSxDiyy1/Ju/RZ4XmRxKuJhn6KtBGLsZxMmFcmei9MmC/vY + /7sR9XGc4qUdJjKWMiQEmD/fCLzK60g56Lut1MnvMN68I9umeMrLvoUSAcx7DbYSwCWZ1320mwwJzJT1 + bC2OVHtRZIVYSAQs+z32FyJ75fGbpc4y4LEhgKkLRACLDFR7t0hgqwwsGTFyRFjkqiUfgo63EsCSLYJ5 + iLGvVRvOUL5ztA1E+Ir8rchHiLA5lu6VjSSdYxaP6hv4HMEQwESQ7Sio8mW9icA1ZOiI3ClEs+VxPTZf + JnQzj0fHGpJFySnv1yKBtEK0ZyOorUigripJ+ySD+mISVZkI7afy0rN4vZ5r2gGPFVFtrNwKGq98H9n7 + fRgd3xCmDgl9h7FlVbaUSRHe+mbZW6ME8AhGIyGxnCwS2CKAtd2RWdREXZCQ7cl2npBOoC5OUH/HqE+1 + UFd6VOViyoH1LJsqS5s0q0U6kgH+r75A+mwsASznmRrarE0jBPBQd9Z4/7YpElWB/S2fo4V4Fgmcoo2U + km3Mssyy389SN+XYlgTt/Vs6LtnnlSJgE5QFtieRwJbXb5FtrCpJm5GoTkUNsfstZBKoHkMA11GvCzrW + +apkiQQ2nsPaKzjsZz5oB2hLD+oGIcM8FOKUSUMmJ6l/E9THvE+exaME8Dwcf9ghsG0/qQULJjVjl0n1 + 2HW4iN0Hklg8GMHeQ1GsnRzGoVNDOHZmCGfMCeLSeRHctnMa9y9M4dGFSTy2MIqHdwrgvh28uG1bJ66f + 68RlM8pw7mQHTh6249hBG44ctLODt+PISQ4cPaUMp88P4vyd4rhklySu3yODu/Ys4OFFFXhqtyKe3jmH + R+aFcN9cH+6c78W6+T7cvkMQ9yyM4aE9UnhiaRZP75PBD1cl8NiKEH6wNIC7Fntw415uQwBftKcDFy4u + w2WLmZc9nFi3qxMPLvDgiXnleHq6Dc9NsuFn02z4zTY2/GEXO/66vBx/3deLPx8QxF+PTOKvx1fi9yfW + 42cnNODJIypx9wF5XLcqiSv3zuLiFUWcvaSIw7YNY8WUcuzF79trYjmWT/Jg76lBGioRGjk0eiaksWIg + jqVdUSxtD2Npqx97dwSwqsOHlc0urGxw4kD+PmpcGkcNZbFfVwB71dmxqN6GfdttOLrXhgvHl+MOPvPJ + 2RH8dIck/rZ7Fu8uzuPLVUVsPqQKOLYSOKUaW86qxcbzmrDhvGZsuKgd6y/uwobLerH52nHYfMt44A55 + AzO9vR+4oRu4vB04l9eeUIsvDy7iE5blRyti+GBZCO8t8eG9pS58sKIcn61xYv1hbmw+2Q+cLwI4ik03 + ZLDxtgpsuq2ex8TFlfjylDzePySPvy1J4eUFUdwz2YOzm204qDhCAFMhz6EynjlCAE+rjmCgGEYNG06E + jVGKR52fNhfX3kgigV3sAAQ3Oz8RwFk2WK1KnUbjda9qJ45rc+PycR7cNcmHp+eE8LPtQ3hl5zB+vVsM + ryyK41dLU/jlijR+vncGL+5dgft2y+GimREc3F1uSMdxfFaLBizMQ5oDZ7MfB5WJEKFRYh1HpXSocHIc + YBXZwWrlW56Nv44D0h4qjnk0jA8f8OLBRbX4wwEdeO2QVrxxYANeJ/6wqgo/Yhu5ZloQh7a6sRPLYSaV + ziwqkV2zNhzYasf5lJvbF4TwxPIwfnVYDP86I4X3L87gg/NDeP9MD/5zohNvH1GOV/d34O972/D3fW34 + 5wE2vHOsEx+fHcD6K5PYeGMaW+4k7kkBD6WBx5PAj4jn4sBPItjyUhibfxLCxhdD2PR8GBufKRHAnz2c + wDt3hPHPq7z4/flO/OIUG35+sg2/Ot2G351rw98useHNa1345PYIPrs9ho9uSuCtKxL4y1kx/OzIMF44 + KI5n9k3hqVV5vHRwK34hAnj/DjywexWumhLEuT3lOLOdbb3DheNbXTi0vgwraajvTpnYgR31jvmSB7AI + 4EUNNhw3w4G72NZ+f0UPXrulFe/dV4cvnqjG18/nsfl3OeAf/LY3+V1vEa/GgN9SJl9i+ji/7z4vvr6t + DJ/cYMNH19lM+vnNNnxzu5Pl4gMeiAA/4H0P8hn3prHp9iy+uj6JDy8J4q1znHjzTEeJCD5thABmGSgU + 9Jtn2vD2WV7859w83jy3Bv88uwJ/PCOHX5+eYTkl8IszEvjlmTH88bwY/n5RCq9fzjZ6lfa6rcFX6+qw + /o5GbLq7GVvubWE+WvjuNoLt774OgukDTB9ger/A/3T8QCfrsxXf3NKET6+qxb/PzuHlwyO4b5kHF84v + w1HDNhwwjuU124bLF9vx6FEB/OqsFP5xTgr/OT+LD89L4u0zfHj3ggA+uTmLr59sBv4yA3h3R+Cz3YBv + 9gK+3hP4dFeeW8By3QkfPrMNXrp6PM7aN4cFExwY31oKlSoCpIPtpYWDqzbKbw/b8SQaV9tzkLhvfQDH + dCZxek8C51F/XTHowR3bBfHjA3L460UNePfOJnz1RAvWP12DLymTXz5KuSO+fDhMRPDlD4L4+sEANvEY + jyew8aEIvribOuiWEP5wsRPPURYfP9aOJ0724uVr6/D6D2fi6z8vxeY398Pmdw/AlvcPBj46Avj4KMrF + gfjmD0vx/o/n4V/3DeDXVxTxs7MieJH3vnicEy8cWY6fHO3Fz06K4OenxfCbc1P4+xVVeIdl/O4dbXjj + 5mb87coa/Pq8Al46LYsnjojg/v28uGkvGy7dwYbTJtpxeIcNa+psWFVbIn/3abJjdasDa7TXrwhgeQF3 + lhsSeL9O/ub5NRyc6ppVLWVY0ezAch4vbWGf0WDHHvICZtkKe9basbSJ/UmjE3s0eLBDpRuzcw5MYVvR + /rAiE0U2DuXL0JcvN+GNmzMc3MUdhgCWMaNBbwXrp5r1VMd7qnksAjhNA1Sr1iwCWGGgq/ns6myZQR1/ + d+g9hTJMrQtiflsYC1qc2KvFhv3bbDhzig3371uOl0/z4a9Xs73cEcGHP4jimx9lsemFanz1dB3eerAa + v725Eg+flcb5q7xYPcOO7Xj/pAo7hiv9mFAfw7jaCHorg+go+NCS9aBZk1RZDlJzbtTmvAaauJInmyHO + UiJ/RQY7S+QvUZt1opap9satJ1rybuMJXJ8oQy0NRRHBOm7lvW28tjNXjh4aduOqvXy3G205EcB2Eya7 + IikylYN0hezJBpAntGeTPICbeV4EcBfLp9+Qvw5T/hMrmBb4TfmtmFThNOTvtBpPiQSudGFyodyQxPL6 + HcwQPO5j2sXyb2ffM7HSi7ltGcxtzWJCRQCdCbsJj1fJesqN1KXCzmgQo8FMOkVDVkQPv12Q97L2ilN4 + ZIV9bawOork2hOa6gNn7rbnaR6Nfk4UlotXsu8vUEMCEIc5EoBEVKTuqCE0Oar/oqiTbfK0D/a3lGN/l + xhD1+HA367KX8jjowrQhD6YMODGh246hLhsGOm0Y32fDcH8ZxvU40NfFMqfO72xh3TS40KR9QSsVAtGJ + apZLFWXYIoOrKMtVLEORetUs12r2Dw3s35vr/Ey9hujWAE7krwbv1mBN3r9mlSf7YJVFS10YHU1xvjOG + rhbteRcz+wC3VLsMAVzP79UkUUe1PHUdGMf2OLnHjRnjtP+vv+QBPDuBneeksWBmBjPHBTDE7+9mW+9h + 2xxqYZ22+wgRwB6M57cNNFA/1tvRVa29heUNXGae30oZUVjzesmyvDNF/o6EjxP5qwGNyFUrLJRIVk3+ + WSSFRQB7OCgUARyL+6A9NeUFvDUENAf7TEfBQY5ghRo0//O3yN9S+FQOXIko6zbCOo6zvktgWfK3CGlr + El4EsCbzNTkqDxQrBLSOzb60moBlm1UI6ErKu7xHFM63pzuFrs6EOW5tCaOpKWi8ROURLM/Q9s4gevqC + GBgfxqRJUUydFsWs2SmDqQqhzLHGIMccPT0BdLf7DTpbvYQPbU3UFTWUH9ahQn2NyvGIDMuTvanGgXbq + z07q0V72X+MolxMol9OGHZgzxY550x3YcRsPFm4bxOIFaSzfpYAVHG/ssWMW284KY/o0H/PlxrgJToyf + xvqfEcX4mQkMTIuhubcc9fICbmT7YB9Q3VQKA93SVYaucT4MTo5hwow0xk9RCOgkOgdSaGV5NHVkUN2Y + RDLrQ4hlpz3/fCHVodN4/loEcIx1K2IskdQeqH6k0wFkiDSPE/qfdVny0iYo85KhBM+lkyUCOJtRWDS3 + mdityFPuiCra2jXUedUV1BFV1I/VDjRy3NHa4oH2AW5vEwHM8iW6OokOj0l7evwYzzqaMjmDycT4QdYp + +4RG6pYi9XWK765g/bc2hzDQH8HkSUlMmZox10+dnGOaNfdoj+E22n3NTU7Usa3UNTgM6hvL0NLqREcX + dXJ/yKC/r4Rx42MYP5zEwLgo+gZC6O4Po6s3ymujaO8Ks7zZpjluauzwo7mTKdtkM8dULbQ/WruDaGPe + 23t53OPlby/Ps5/ppIy2uVDPvNRx7FXbyPKoF9j/sc1W1xKUncpK9o+0R3OUpTxlykKGfUWakB42YeVU + /mwvmri0YCYvA2xjbMujk0uEJiRGvYU1UTMCM/GoCRJNwGjyY+RYqSGTea9FAI96AVNXBIIOA0MI87ch + ffk+izgQyWjpkDI+T3Dwmd+FxlrWcbkm6LxuhEJByloc+XwWNTVVqKmuQqGYRTafRCYTRSoZRoK6KBJ2 + mf3KSiiDn+Oh7xKvlg6Td6xDeSBcmgAKuhCOUNb5nFEkfEbuRTJHYl4Ew07zTHkMG8KV77GePRZ6j/Xd + FkbzMVIO/w1u5kX47m8L0r1en8LpKw+lfFh5ChJ6j/JgfZ9IbotYtvJi7gnqGSKQR+qK502Yf93Dsrf2 + obY8ICxoUs4nTxtep0k6TdZpHBxl3uIj+/+aMNAjE0+l/X9dMN68LC8RwSKAt3r+ykOhBJ23vH+3EsA8 + x3rNcDysY+0BLGgP4IIIYOomeQzJ+0KkqCExNGZWO4jYtxLB6t9EwrKtGLB/SVBPp9jfp9nvZ9lnCIUK + 9wgBrH6GbYbPEUQciwCuoC0oT1dDdKq/YX8mz19F/Eiq36f8y+YVmWfO8Rlp2n5jCWB5AI9CbVOTxyLv + eI+1D50FQw4QYwlgTRpvJYCpiymb8ZDDTC7q2xXaVQsGq4sh2lnUjQpLmGRZJ2ijKZV9ScijV9tUFPmt + CvfcWE1dWhVEXYW+Tx47I9/A7xdEAIvcFbIsT3mgZNh35/hckcIihy2COCsiiv2/qe+w6txhyF3ZzvXU + /wr73Ey7VNu91NCGLVKPaVFhhu9Jh+xmsYDCQMsTOOujHRamjuYzWvmMbmIcbek+vr+XGGBdTqHdOpN2 + 1Wzq/ukNPkygrdZD+6qVtoQ8eOt5Tx3LTdtlicStECjzCuksYreO7xbJ28BvbhT5yzJpo73fQRu2lXVe + R7tD11Xwfi24b+DvdspBd2UE7UXaEyzzan0vnynSNymwvjLMuxbpK1JbPctehG8HbbDeSh/6a4LoLNKe + pD2vsZIWDST4DsmJZC9MnR5muUQybAvMR6bCi0yBss4xSoz1F6JsmwgMvE96V2Sw2RM4KK9bD3UmbTNF + SGD7MQs+KEcicHWN7Lex8BsSWJEW3Ab67aU+NzqLZTWqO3hsQoLyWJDtZRZI0IbIZvyoKIRRWYyY1HgB + J2kzUI8KpbDUzD9RkadsFiK8NsgxjgdZlreQ59ioSPmoqKAMUz4qaScU2R4LHNcbbzqWSxXRyDq3COAJ + tHOnsf+ew7HhAtrAe7C/XTkYx9opeRw6tx6HzKnDmukF7EM7YMWEJJYNRbB8UgQrpwaxjHbV8ona29eH + g+dEcMz8BE7eLo3T52dwxtwkTp8VxcnTQjiRdteJsyM4bl4YR80L4dDZHhw4g2NojkH3nmDHItpzu/bb + TLTFnbX9DMcbwxxntnAMXUcbv5q6ppZjtgrKTU4kDdt5jDpT3nMigEUAmQUjbNcliGAs6TQTfp/lbBHE + JVKS9xNq92rzxvuM5VvyQKPuFQFEZOIKQyrIYcTCyGIZkVXE2GdpD2lBXuLGQ5D63dgEln0wglFPRB6L + AA4TImMzXn4j+4D6GG2eVAyd2SQ6Mgm0xyNoCgVQ5/OgxkN72ckxtJNlwfvSdupMG3UsYRHAZk9btp8S + +ct8GZQZT+Oom+dGYAhgN/Wrz4mEl+U2Qvomeb1gCGC1RR5Ln+T5bQX2JRWUx0rasEIV7dnKTJC6yW/K + TGVpPHZZzrKbVN6CZUNpH1t5+5b2tfVwvMf2pLY1kmcRneY+tjX9pxDJ2jNfRL5lg8nb1ZCiFniPRaRZ + NpiORfqGFBLbzfs9rBcRrjxnEcMqf3nCBp2aj2a/zv9UL2PJT8E6tsgwiyCzOxwl719HCWVE+QgsAljk + r6u8HB6XkzZjiTj1Koyui/YV4WP5B1gv8oot7Y3L/IhI5HcakpLQwmh9n9WPWePl7yJMfR8XSRTzsx+h + LqF9VyQK6Qj7mSDPh5CKcOwR8lJXeljGtA9dIg9F/LIMFeaZ+Qw4qb/4bS7mffSbCVMWIySwIXTLyr4F + EcAefSvhFolsnqF7JP9bCWBDIArMs2AWc1FG5ImrPj4me1x2OZHmOFa2epZjXBHCafZHIojlfa+2a/Xd + ImRHbXSVx0g5GWL0O9D5rbKm+0uQJ21S9hL1vtkag7Kdp2wXstLH4RIJTJtA+wDL5tAiUdl1liezWSBE + +yrKNixEaNOFPapr9jWUOcveE1SnVr1ZMHU9AmuMofLRoqOEiEjabMYLuCKJ+qoU6ospVGfizLPHfIue + L31ozanonaOOeCMYK7//L1h1X6r3kXpU+1K+zHfzuwgjq4RZNCvwWDCEMGGFgtY5EcDawsBsM6IF0lEX + YuwvTfQN6U/WqbXQTzJhnqV3EapfRRbIxlzIsQ5SrIOonqn/iDj/1xYBsiO1mLAq6UAD+/6uhijGtafR + 3ZxAc7WfNhPtLMqR2UdYz4uw/2SfocWWWnRZkaDdFy8txBQZrL1/db5IvVzJ8VIty1yoiCuKjbx9eT3/ + q05HUZ9j3XBsVZ9LEGnUjyF5a6nLa1JxVI/AIoatY4sINvsCRxTuOWyQ5phA4wMhw3FWgeeq2TfU5jim + y2YMEVxMxAwZ3NlQh4XbzsNxhx4C25wJ7Zg3sQ3bD9djwWAFdutPYk8OwlcOx7B6YggHTPTjsMk+nDjd + j3NnBXHNtjGs2y6Ge7eL4L7tQrh7vh+3buPBNbPLcen0cpwzyYFThhw4mp314QM2HDrowKFDZThsYhmO + mFyGE+YEcNYOMVy4MIFrd8/grkUFPLxbAU/unMFT2yfw6NwQ7p/jxV185u3zPLhrxyDu3yWGRxel8KPl + GTy3Oo1n9onjiRUhPLTMj3uWenHzYo8hgC9c5MAFezlwyV7lfHY5bl1Yjgd3cOLJbcrw7HQbfkJj4tcz + bfjzDjb8k9f8ex8vXjswjH8eGsM/js4aAvi3J9Th5ePr8OThlbh7bR43rsriqhV5XLy4iLP2KOCI+XHs + PdmNxfympRO0Qi1A4yaKNVPi2G9KCvtPzmG/oQxW9SWxd2cMe7eHsE9HEGva/di3xYt9G104qC2AYwbS + OHY4h0P6aCiJJGi14cAeG04cZ8flE124b2YYz2wTwy8WpPCPRXl8sLQCX+9bhS2HigCuBk6tAc6ux8bz + mrH+3GZ8dU4LviC+Pq8NGy/txqar+4Ab+4FbeoGbeoCrO4DL2oDz27DltGZ8c2QtPltbxKf7pvHxyhje + XxrA+8vc+HClk+fK8fUhLmw80QecF8aWK2LYeGMGG2+tNATw5hsb+Kw6bDi9Cp8cWYV/rszipztH8cAM + Py7oYH1X2bCUBtkCKuXZNCZnpMsxI+/BtKooBmi8VlNRyQixFI1FAFsksCGC1QmzwSrcSAufMZVG+h61 + ThzV5sJFAy7cOsGFx2YH8ML2Yfxspwh+umsML+8Rx0tL0niZcvIi8/Ts3pW4b1EVLpufxeGDQSystWOQ + HUYzG3QV86CVUMYYo7IRQhwYWXu3RDioknGRoiGZZaebogEkVPJ8MwdRkzI2rGp34ebti3h5ZTP+uLoR + f92nFn/Zpw6/XFqJx3bK4krKxSFtPpaDHTOoqKZR6Rgv4BobTulz4Vrm/56FPjyztw+/OyaC18+K4e0z + fXjn1HK8c0J5iQBeW4a/723HP1bb8a8DbXjj6HJ8eIYPX14awzfXJrDp1gQ23xnDlnuJH0Sw5THiRyHg + +SA2v1jCpheYPjeGAH4ojv/cHsI/rvTg9+eW4+cn2fAz4len2PC7s2z420U2vH2ty5C/X96Zxpd35PHR + jUW8dVkefz4tg98eV8Av2D5+enANfn1kB351eDeeX92C+3bK4eJxTpzRYsfpTXac0ebAic1lOLzWhn3z + NN7ZOW/HutyWgwvtAbwDjffdG204eroD6/bL4ZVLu/Dmnd34+OF2rH+mGRt/Wostv88D/8yUCOC3E8Cr + UeC3/D5DAIew8V43vrjFjo9vsOHj62345Eab+b3+Dhc23+vHFhHAD8aBB3i/PIDXZfDlDSl8fHnEeAG/ + c64Lb51djjfOYNmeTpypENBM+fvfp3rw6slZ/OmEKvzyqBxeOCyOHx0SwVOHBvHEYQE8dZgXLxztxysn + RfDnsxJ49YI0Pr2hHt/c0YwNdzZjy91CE7bc2QTwGHcRPG9wV8u3f+uaO1uw5Xbee0sTNtzQiE+uqMUf + T07jqbUhXLebF6dM10IaG06db8M1S2x4/CgPfnlmBH85K4q3zonj/XNj+M9ZXnx4aQhf3p7D+h/xuX+e + ArwzH/h0J+CrXYAviU94/J8dWK474qMfz8XPrh+P8/bLY6eJDgw229BT70B7pR3NlHGzt2rEZkJ+yXt+ + FuV3r6Ibh7XEcXpPEhf3BXHTZD8e3T2BV46uxmtXNOCjexrwzVMN2PRsJeUtjq+fjPB3BF89ES7hcT++ + ecyPzU+EsIX/rX84gI/u8uDNmz343SUOvHimHT8+04WfXJLAX+7vwae/Zn7f3Bt4dz/gw/35LQcDnx8O + fHEE8P6h2PLavvj6N3vg/adn4a83N+PXF2Xw09PDeP4YJ54+2IFnqcueOSKAHx8VxovHRVlmOfzhoir8 + 8dIavHJeBV46PYtnjmPfc1gM96wJ4CZtJbDAhtPZVxw94MDaFochf7WH9z5NDqxudWJthxtrOz0m/PPa + zhIBLIj8tQjgNW1l2LfNib15LCzn78W8f08+azcOrBcWOKhlumeNHXvWl2P3eneJAM46MIW6c4jtZQL1 + 6IScHUNEPwfqnZrcyWqv2jITAloh0XI0hrT3b4kctaOGx/+NAFYY6Kp0mUGdCD++YyjvwvS6KLZtjWGH + Bid2VXtluzx12IZ7Vznxk1P8+MuVYbx5exQfP5TAhqeL2PR8HT5/qgZ/vz2Dn1yewB3H+XHqnnbsM41t + m33ZlGoHJlUFMaE2gv6qMDrz3pFwbERaZG6J3K0yZKa82JhqAjAlD+AxBHCqjMZPmfEA1nEtv6+WeW5g + /pv4vEY+r4GGolJ5ErRl3GjPeVhOLvQUPRio8qFHoZLzZSa0WRXvLcpTQ/uHGBJYq+S1ktNHw8ptPIDb + +P4OlmVfxm4I4ImFMn6PE5Oryo33gzyyhws8XyzHlConptW4+T+h//ieYdbVYM5mPIcFedC3s/xb2I6G + mJc57RnMacvxOIgOGqBqXxUySAlNdmoFY5zXa4CTVqjXMQSw9i9WeWlvuVIY6FLI14ZqH5pq/WMIYPv3 + E8DMSynVZKEDlQlex/doBb08yJsrbehqLMMA+7bx3U4MddkxsceOqePdmD7sNQSwSGF5Wfa22dDP43H8 + X2lvZxm6253o0J6jtHOa673MF/NYpRDfblQXnIb4FXlt9sfLOwwBLCJYnsL1LMvGWuafbUDhrg0BTONd + gxULUcq0Jk0VMlHloPDPIoA7mqPoao6jlzLc1RhGW40HTRWUkaIDbdXl1GlODDQ7DQE8oaMM0/qdmD3s + wbZTQ9h+egTbs6/ebkoM0/t95prOapYD++lxvMeEgG4TAezFcKsX4xqd6JfXb7XdEMDd8kCtcpg9tRv5 + nXXy1KEcaeLWChVnJsk5INVktxXeTxN9FqEhfJcAjif8SGVEDPr+KwGs81u9g7/nHAfCIfa5huxlPSuN + UrdYBLBIRYtg1CS+SF5thxGmDSSC+r8RwJo8VAjBzs4Eeno4cOr6PgJYoYL9aKf929MbMgTwxIkRTJkq + AjiNOXMzmDkzh8kTUxgcx3rrDBhvX+3328z6aqrTvnSlhQIFyq1CfUmWTUjzEWihQ2N1mfE472gqQw91 + z0CHDcO9tBmH7Jg92YZt2G/uMNeNneb5sAfHHkt3zmLl7hVYsksRO24TxZyZfkyb5sHwFDeGZwQxPCuK + 8bPiGJgeQ/s4Nxo72Qe28F31JQK4jnLf3OVA5wBlYVIEw9OTGJxM2RtPOexPoKU7icaONKob40jnRQA7 + Dfnr5QBWntsWCWwQ8xokOKCMJ1nfIoFHoLDQMdUl5Ub1FKXMayGB9gTOUEdJLygMdJbIsT3lOWgtsn4M + GUz9VyywjWuRBdu0vIDlAdxG+VVIbnkBW57AnWMI4MHBMCZPSmMSMTgugdbmAGoqvchQZ2qCVBEJWli/ + Q4MJTJ+WxaxZ+REUWJdFc29fn7yEqadpb1dwLFDBtiRUsa000jZs75K3tRe9Az5e60U/j8cPhzE0SSRw + hHISRO9ggP+H0NVLHdlHuej1o41oEcHb4zNo6/Wgvc9n0MF228H6aO/nOQN+K23s1h4nWrooT+yjG9vZ + T7SWo4Htu4F2qQH74zr261XKI/NazbKyUEn71IBlKBSp1/PUq/m0ojLYCQeygiYqRELJG5Lt2/Js0YST + Ndlk7Tk3OkE3Ak1aWJPAmngykyO8T6SvtVDEkAEBu4FFJlrEgQVLf4iQHEv4fhcaa1koKxPh6eK4hzom + EWPbTqOqqgLV1ZUoVuRQYZCmXCWQpC4aSwD7fYLyI+JV2JoHecYKDn6XPI6VJ59fpIgb4YibbYDvHIFI + 4VDYA3/QSZQIV4sAHksufwssU6sMdI2FseVgwdKtFiyi97vnrf++jwA25O8IkaPfeo/1fcYLWPfynJUf + kb8BtnfdJy9ms08z2472aNbev9ZWR2MJYGuiUxNy/nLqXp4zE5EcB2tCWuE5ox6H2QsyaYjgElIaozKf + Zu9Lvluk7v+VALZIYKUx1quQ4HNF/v7fCGCm7GMEq49JKpJHjrqK+kjQHvTaK1gho7+PAC5mPdTpPup2 + 5llkKvtOE4qPY/YU32XsI9oFKd5jwP5NMAQw9aPZ+5fXKDXhA9mPGcjTT+N61oUIYcs7WBOG1qSwoGPp + OX3rdwlgkQ4iLuTBpgWE2jakwni2yQOY38b8mpR6WakI4FJoZ+rgrNuEfdY+wTW0hRWFRv/JlrEgAljE + tyDbQSEMdU7HJWJZpDxT859gEcCsy5AmKWXbUp9pkSj75+ZqEcDyAC5HkbZ+juUtAlihwE24cN6bY1rg + t1XTrhCJ28K0k+Xcx3LvZp46WNbyCJ5Y4cFM2lXbtMUwuy2MaU0+DNY40UV7VxF3WmmrN7NfaqAsaJG8 + Qj7XMD91/MY61o+iFjVyzGJS2u7NtGNbab+15bw8Zh75viq+q8iyr2Rawzw0JKiz0x7UMa1kHnPUMyJ9 + tX1YmmnWy/6F31DD+tA1jSwbPVeLZHtpcw7UhtDDMYgWnGpblQSfLZvSIoBDsodoVyRol+ZpNxdrAyhW + czxQ4aPcagEd2y7LwERjoN41C3H8ZYbgFQGcTEpv+hGlTtN5L/WHRQCr7Y/VGyJ8LRJYKNkDW3WchRL5 + W3rOKAHMPMspQdtCKMyoBS1czVA+RQILFgEsMlgkcV1VAnU1cVRVhGkTUJYVvYVjpgLLJ8+xQ55jSdkN + 2Yz6sZJNre2CtL1QA9uvCGCFgJ7I8el0jgnm017YvS+Epez7Vw2nsHZaAYdt04DD5zXiwDnV2H9GEasm + p7GMffjSCSJ/fVgqJxli9TQ3DtkmhGO3jeHk7ZI4fX4KZ89L4Zx5cZw1J4bT54Rx8uwQjpsbwFHz/Dh8 + Nq+fVY4DaLvtP6MMqyY6+Fw7lk52me325veVYSJtsi722c3so5uKtPUpo1p8WSWPXMp1gnrMhDUm1Ka1 + 36w8+MfiuwSwYMhFpqW9ge1sm+zbqTuT1IG6x3j8iuhluvU5Jf1odGRIpFMpLLH17NFj6lyFCRdEZskG + MP0+9b616Mf8lu7nsfHWJSKEvPWNB3DIw/ZC+zoeQkMshLoIbbSAB9U+thMPx4cejrFcZahwsl55X4Z9 + vUjgBKEQ0AqFaryiKa9jCeAYny2SVySwBb1TKJ2n7qeO/C4BnOA3aCFJmn18jt+nyIpFLUKgTFoEcFU2 + xPF8wOhUlZHKxNK9Ku+tUHlrcYy2H6CM8x6RbSKFjScm3ykSU6GgFfJYHq0Kjay5WpWvnmF0ONtjyTt2 + BLI/RETxu1W+pm/lcVTEr5djLZZdws/nMBUJLGJYfW+IZWj+139EmMcBF/tnluH3EcAWNJdt5rbtdrPt + g43HghUBxIDntf+vs4x2hscLv9dTIkhHiNKtoJ7gO0uesQJlhfk3BNuIzFgLBiwizDr/XQRV5yyLJO2u + bILlmwyxTkbAMUiGMpWOBg1S0QCS4QDL2cuyoy1Du0TEb8gtUthtyGARuFakG5GHJSLXAY+FseQvry+F + hS7BeAXzvEUWfx8BLHtYxOBof802Ywhg6u8E9dXoQnmOZbMcm5RIYNoc7ItS7ItMe5S9onbNey35MPMJ + lF3JwFiMlQ1d830EsOQzSR2e0qK5uEK9+4z+zaVHQkEbvUybgTpBeRYBWvKE5ft5v7x1o2zDQkze1n7a + wSL2eZ0QHoH1eyzkxWzZKmb8MAIRwNGQdFGJBK7Jx00o6Hra73W5pKnnWEB1x/o3bagE7TUtL2ArQpFF + 6I4lef83WNdb5K+LMihvZi+f6+W7tHjBhIJWvzgCs/CO5WI8d/kdFvE7SgCznky47yR1LMtVBLB4Gmt7 + BcPZUAasKC+6xxpfqW5lq2XZF+YTrBtdr2fyP4W9Vzho2cqW40wlZaWeNkhHbQTdTQl0NMRQV5ANRj2r + OVbKUZ72RYHPK8Rpl7KN1GTYt8p7PhtFJcu6FPqZ/8fY7ybC/C/B/ihjUJcVgRszqM3G0VhMo7U6j7bq + gvl/lADOpFCbTlJXlrx8rZDQ2vtXsMJDW57BlUm9m8gkaNtFafv5TYQghXA3IaB5rq6QQWNFEQ3FAqqz + GX5P3KCjvhY7z98Gxx5yMGzThzoxc6gN2ww2YLv+CuzSn8KeA7ESATwhjLXDPhw45MYxk/04Y3oQF88O + 47o5Idw8y49bZ/tw0ywfrprhxIWT7Throh0nDdpx9IAdh/bacFCfHQcNluOgIRcOnujEoZNcOHZ2EKfS + CDhnQRxX7prCHbvl8PDCLJ7YIY4n54Xx2JwAHpztwV1zXLhjvgf3Lgjh4d3ieGKvFJ7dO4MX1qTx3Oo4 + frgyhEeX+XDvUg9uGSGAz1/kwLl72HEhccUudty0wI77tnXgybl2PD/Dhl8Qf9rGhlcXluGtFV78Z/8I + /nN4Cm8cmcarxxTwl+Mq8etjq/GTY6rx+CFF3LE6ixtWZHDVkjwu3L2AMxbmceQ2Kewrw2a8C8uHvNh3 + cgj7TY1h7ZQEDpiSxsFT8jhwQh5rB9JY3RXH6o4I1rQHsbbdj/2avdiv0YVD24I4flwGJ/G6o4eSWNvt + Iuw4YpzCjZbhmilePESj6Plt43hl5zT+uWcRHy6rxjera7Dl0Grg2Brg1FrgnAZDAH99bhM+Pa0eH51S + i89ObTBk8PqL2rHlyi7geuK6TuCKNmy5qAVbzm0FzmjHpmOb8OVBVfh8bQGf7pPCRyvC+GC51xDAH61y + 4IsDy/DNcW7gvAi2XJHAxhuz2HBrBTbeWo8tNzUDVzZh8zn1+PL4Ovx73wJ+sWsMj8wN47J+J46qt2F5 + tuQBPJOKepoI4IIf06pjGCjGONjwGaPGrDih0tAkQZk6TEKro82ewOrsqIhTbNDaK2YSDdddaylDreU4 + h8bfDUPl+MFML57eLowXF0Tw/C5x/Hj3BH68mPKxLIdnVuTw1Moq3LdnHa5eUI1jJiawW5MLQxyANFG5 + VGhQG/NTkVCxUGEIISKi1SWCWVFGQ47KI0FDKEKjKkrjKscGVsPBljwid60vw4VTYnh812r8dEkNfrm4 + Ar8gnqesPLhDDpdRJg5sDWEHKpKpVDhTqXDm0AjdjWVzeAvvHXbjprlOPLhrGeXahT8f58VrJzrx+vF2 + vH18Od45woXX9nfhH6yPf61x4NUD7fj3EQ68d6obn14UxpdXRbHhxgg23hbGpjtC2HxvAJt/IGLNhy3P + +LDpOR82vuD/FgH8zVMJfP5gHO+uC+OfV3jw27Ps+OnxNoNfnmjDb0+14e8X2PDetR58dWcSG+7JE5X4 + +s56fHwD6/rCCvzjjBr86aR6/J4y9KfjevCbI7rx3KoG3LVtAud32XFKgw2nE2e3igR24vgGBw7iQGIp + B1vyht6Og4v5PN6+woY9mm04cnoZblyVwcvnteKtu/vx+WM92PgcZfQXjdj8+wLwr0zJ+/ftOPBqZIQA + jgKPBbD+rnJ8epOtRAAz/eRmG764zYH1d3uw6T6WxX0hbLmPMnxvDJvuiuObW5L44vokPr0yhg8vDeP9 + i/x473wP3j6nDG+zLN45x8HUYUJB//0EF35P/fDSAUU8uTKO+5f4cPteLqxb7MStS8qxbokDD6wsxzMH + efDzY4L402kxfHSNvH/bsPmuVkMAb7qjHpvW1WHT7XXYfFstweNba7HJpPXYfGsDthCbdXyL0gZsupnp + zY34+roGvHZ2Hj85PI47l4dx/rZOnDzLhnN2tOH6ZTY8fmQZfqH9bc/w499nBvHuOUG8d64Xn1wR4vcX + sOnZFuCPw9jy5ixs+Wg7bPl8R+DLBcAnOwDvbsty3Q4fvzAXv7plGBceVMTCyQ4MsN5EZjTlOXBnPRUp + rxqYN7Kz7SVmUO53YXvery6CUzoTbO9+3DEzgB+zvf399Eb859pGfHY/y+Cpamz6cR7rn4lhwzNhpmF8 + /XQI3wg/8mP9D/3YSGygrH7xkAvv3lmGV28qw+8uc+BnFzrxiyui+P26WrzzzGRs+PtuzO/ewIdrgM/2 + B5UT8NUh/JZD+S2HAe8ciC3/2Bvf/GIXvH3/IP5yVTV+dVYCzx3txhNrWU5ryvAw29dDq914eD8Pnjgs + hB8eGcFTR0Xw6KEhPHhQAHev8WDd3l7cwPq9ZKcynMZyPnqIfViXE6tb3Ni70UHYsabNhQO6/DioJ4gD + egKEFwd0urB/RznWdpRRz4scdlLnlxNMO1zYl+kq/l7RWoalTXZDAO/B9rAzB9g7UxfsWrBhUa0du9e5 + sWOlG3M4IJ/KdjJBEy8cmE/iNQo7PFAoQ1fBZYjUOhq7RepWhQxW+Oe6lAhRFxpT5aiJ2/8rAWwIFN1L + 1PI6EZNDNIBm1iawXUsC29e4sAsH1WuabDiLffpDa/z4+RlR/OPaFP5zdwafP5rD5h/XYOOP6/DRo5X4 + /Q1h/Oh8ltuh5Th+Fxv2ZR+7oIt6v6EcU2tDGF8VQk8hgDYaVA18p/JWrYmuRIl8LPCcJtILaYU31j5m + JWg/NUME879KGvXyTlUqD16FKBN53ZApQ3NW+3y50cKBf1vOh86CD11FP7qrfOir8mOg2sdjEcDl3yaA + kxzIawU3DXWzn0vKzfzwGhp8zcxjK8ulm+8azCnUswuz6r2Y0+hnGsD0Gq8hf0XMa1/gKZXlhvxVSGiF + 7J5QcGCY54cKdoxn3fay/lTOzWw74yo8mNWeIXIYVxVEu4h41l+R9agViQr7F+dvEcAJ4r8RwCJRq/Mu + s+9nbYWX8KChyoumaj/qea6K+db+v3l+g1JDmFHnKuzzWAK4gvWglY4lD2Cb2S+3vc6BHpGllOPx1OcT + eiiPFgE8zomh7pL3b08b0WFDn46J7jY7ulodaG8qR6tCzjb40FQnYjrAvPlMyGpDBOfdzJ/20mP95ssM + 5CFcW3Shjt+gbyrwW7WCVx6/2qvKDHyYigDWxK8mVavzXrRq/98mhX2OMs8x9LXF0dfMc/V+tFe70EF5 + 7mvyYYg22HCHD8PtLkxgW53W78LMQTdmT/COgHU7HDDewX1s523sm9rZRvvYd41vdhkMtXl5vx/jmj3o + b5SXcIkA7qgpQ1uVHc0VZYYArv1eAlhhM2VjcOBDPfq/E8AcKIVLBHA6q3CptFMolyJ0LQ9fC6OhnmMc + FFngtZE4bRhzDd9JeRpLAMdYz5qcN5P0LEd5bsnzN5l0IsO8a6/fGAc9mnhUHksEsCbtLQLYhWrtsdwc + QkcHy954/8ZKIaCbgiYEdF2d16BRhG6rH51dQfSPC40QwDHMmp3BnLl5zJhZwPCwCOQQmhtYdlXUX5Vl + qCWqK0rEW57yalZ4M+9GnvlbJLAwlgBua3Kgq8WGfsrkUI8NU8ZTD4kApk7annbWTvO82HX7EBbtmMAy + jjuW7VbAzhyLbDObbXqGF5OmuzE804+hWUEMzgyjf1oIXUPULz2s13bqHerEUQKY9nqHQkdP4LW0Afsn + RNA1EEFrTxSNLIu61jgqKZtp6iOFfNSEr0I++oOqW9ZJRB5GChHpMtAeqfKKFOmbSvoMAZxkmky4WTfl + pn4UZjXNOtLewIb8JdLUkSml1K8Z6kN5+OSoI/LUDzmWjTxZi2zT8gJuYptsbSkRwPIC/rYnsKdEAI+T + Z28akyZmMG4ggUbWZTHvRCLKfFMWpJN0bojjlpkz85g9t0AoLR1PnZbCuHE+tLXbUVPHd48hgCvZVupZ + fi38r7OH7ae/HD195ehjOY6fEMDQlBCGJrHPYJkO8PfAsB+9g5QdooPPFNpF8hId4wQPupgK3eMF/mab + NqC+Uto56ELnOKZEe58bHWzf7RxvtXWXE060drLfpJ0qD+8ajlsaaP80sv03NrHOG/kf23lTPUH5amBa + X+dkWRKS0yrqX0EhNdkmiiLhqbdECmdYXyKmtI+gPI9MmMn/AbuZsDATeuUjk0+aBFGbo54bSwBb3sDf + RwBbe94a8pfP+T7i18JYAlhwa2LP70E0GkIqnTCev5VVBVRVFlBTW0RDXQWqqzKUsSDCIjE0gSOSU/kj + RGCUyNpSPqS/lA+LIDWTnnqPh/cERPIqtDPB8ZUhSoMuc94rAsVfIlzlcVt65vcTwNb3C7rGglUWlh4V + LN1q4f9bAtjkdSS/InLURoOEjvXeUQ9gvYPvtPKlvIvwsdp1KMJjQiGtfSorfYPuYfmMEsD8bchfQpPO + mmiVLGjC1l8uzxCe4295METclCdNzPtKkKdbnHUSZ/knKE/Gs5Pvy1PnCAVNCP7/SABrAt4igOMcGwuj + BLAWPbCPKRHAPE/9YGD6GDuS1Esp6qQ0+/xMwU358iHH4/+NAK4giopswP6myL4tx+caj1jajSJFDdi2 + BIsATrEPSzIVGV0KHai0tFgmGWfeiQT7ME3KWqEDBbVBQYSC2qIhD9jO9K3fJYD1nyaQdaxtHQpphWNm + XlOC+zsoEcDy7NWCPtm2Cvss8reS35ZTfvnf9xHACvX8XQJ4K0plofDPBqrDoOSA76GeybMMqlnejbR5 + m6u9ZkGgtgSpYj0UWMbGq9gQwLSBWacVMdq9LJca2goiapv5zDb+38n/2/nMVn5vJ+tpiHU2oyGMeR1x + zOmIYgb79AnUif20sXpos8nm7pA9Rlu8md/aQjRSFzbxvc3MTytt1RbafC0sA23hIntdx00sC0XukQey + yN/CCHRcpJwWCHkoy+M3zvYg8lcewDm21WKgHHXsM5vSiixE0G5pYd/XyeeLAB5Xxz6c49T2YoBjDsq7 + bGvCEMC0xeX9G6N9ka52o6IuyL49jOr6EIrVQfbbbsow2zLryCKATfvWJPYIASydmE6HTHSEcGjr4pj/ + FwGsdCsBLC9g6bkSfNKTbH/WApsSAWyn7qUs0RZQeFELWcIsFkuWkIwzT/IG5nFFMcJ+KkH9nUR9TYL9 + VJjnfLQLRAKzrbOcBC0kS9MWNMQJy0RhlP8nAVyGGewHt6WdsNegQjwnsXwojlUTUzhgZhUOmVuHg7ep + NSTwmuk5rJwYxVL230smurFkkgPLJ5dh9TQnDp7rx7HbRnDytnGcMS+Gs+clcD6Pz9PxNlGcRNvrmJke + HDXHTbhwBG22I+aW44htXDh0rhv7z3Jj35kBLJsWwE7s22ew7x7fUIYe9sndHGd01oXQwvFmXVZ7INKO + ZdtQ+E+NGRQiOEX7Ocs2rXYt6Fjt3CJpLaiNawGXCCPTT/N/tXlBZJKIYIV3FqwFMSIox+qSEnRv6Znf + TwCLXBohddj/iNApkTyUMUIkUMzFZxJKU1624SDba8SH6qgf1SHqkgD1JM/n3Q7Cjpyb42gPr3MxdbKd + s883BDCR5HGMiLANybtXZKrIIBGkUUIEcFxewDxnIBJ4JA9xD8+r32FehSTlUwTw1t/UQ+zD0+pbCPU3 + BZHAIoAzbH+5MMesQVPuFiFnLbgpEb+l8jbev2xbBbatqnyUY0Ha0bkIbX/awuyjRGKVwLwGqc9pPxgC + mO0ppnJVeXL8JJJT+6LqfwNeE9U5wnwvUz0nGWTfFmabibANKZQqj2MigVmGYSLmZ1sJsw+MBgziQR/v + Z5tmeXvLaEeMEF9ueb0SHpGYIjOdZcbL10GMJYDN8RiU6x6XC+FggPBTBlyGODXEbzntIoHP+jZ4D3Wh + AetTqYk0M3I8FrIrx0JyZgjgsIftXX07vzvqG03TsSD7K/Z5oyRwiG0kyHrhOEaLBT3yJPXwOW4ERvb4 + FXErEliQV6+H5yyI9LUg8jfgcdPGpQ4kDBnM8x7dM4ISyT3iEUvIa7bkOVuConiYUNDq46mvFAFEJLC8 + frUvcJY6W3txKzy7Cdlu2S3S+2p/I21OYxlB9rZZhME+RcdKZYdZ57+PADagnMao32NhQTaFxkiaR6LN + RHkX0hy/RdQH8H4hpEUJlMWIZNEigIUgj3k+zPYnREdg/f42qD9GYPYyFvhskb+xsPY057fTXimyX1Lb + aajMopGozidM/cbVbtR+2HaEEHWHZOhbBDDT7xK9/w3WfQpj75Lss87ktR5gXsfCbJ1AqDxMVBbWRZDp + t4hglb3KnPUc12Ib6goRwAnqEt0XYr2FVQ/Sobxfz5EONcTySH1Kn8T5f5Z2b0HEPHWGbGRrr3OLANa8 + aJq6uYI2VS1trqaKIFpqw2jW9hy0VzQvWZF2oYq2XRXrsYr6qDrNPjUbQ2MhiebKDO9Jm995lqv2/i1Q + J4voFbHbXlM0aKnK8TpdmzHEbwfHU10NVeiqr0JLZQ51OT1DXtoje/wmIsZ7N2c8fL+NAv+rych7OI06 + or6QMSSvwjor5HNa4abZN+R4XJXl2L0yj+baKjTVVKK2kEdlOslnxNBaV4Od5s3F0YccBNukcT2YOtCB + mf2NmNdXhZ36sthzIImVw3GsnhDBfkN+rB3HzniCF6dMCeK8GSFcNiOAKye7cfVUFy6f6sYFk8px+ngb + Thiw4cheGw4hDui1Y38O7vdnR73/kAcHTHDjoEns3GcEcSI7+9O2j+GSnRNYt1MaD++QxBPbhvHk3AAe + nenFD2a4cM+sMtw9z42Hdo7gyUUJPLs0hRf3yeClNWm8uDqOZ/YO4/HlPty7ZCsBfN6iMpy9qw3n7WLD + pTvZcP12Ntw914YnZtnwk5k2/GaODf/YwYG3F3nwweowPj40jY+OLeCd4wp49dgi/nRsJX55VAVeOKoK + jx5UwG2r0riG7718UZ7PzOP0BXkcPSfDcglixTgvVoz3Yd+JIaydHMX+k+I4eEoah03N47BJFThoMIsD + ehJY28EybAti/zaWY5MX+ze4cVh7CCfw/9MmF3HSpAwOG+fHoQPlOH6CC+dPcuHG6X48Pi+On2yXwG8W + WgRwFb5ZXYsth9SMEMD12HJeEzZf0Iavz2nGRydV4z/M/4fHVeNT/vfVWQ3YeGErcHVXyfv30lZsPLcR + G85oxJbT2rHlhFasP4zXHVSJL/bL4dNVcXy0MoAPVsgL2I5P1zrw5dFOvsMigHNYf2sFNtxaD9zcAlzT + DFzUhI2nNeHtAyrwmz2TeIp1eu1EL45vtWNFoeTtOpPKWQTwdBrh02qSGNCm8+xswxzUWgTw2AmKMp0n + nOzoNDiOs7HWc8AzTKN+51o3Dmgpx2ndDlw1WIZ7ZngoNxE8u2MMTy9M4oe7pvDDRVk8tTSPJ4hHllXj + 7kX1uHbnehw/lXLNcp+Q96CRnUMhzs6enV2EijvEQbMFef4aUIkYpU+lFGY+/MxPgB1a0u+lEcaBDTuU + ufzGY7u9uGObLJ7cqYAfLcgwHzk8Tjm5e34eF05M44C2KLbnYHAKO67JVDgzeJ/2Rl5T7cAp3eW4ZIId + t86z4eFFNvxsfzv+fKQd/zjKhjePKcM7R7rx+gFe/HPfcry2H3FgGV473IZ3TnLi4/MD+OyyEL65Loj1 + NwZYL35svMOLjfd5sPFhNzY8STztwYbnfKME8KZnY1j/RAJfPBjHe+siePUKL145jW2D7/vJ0Tb8/Dgb + fn2CDX8/14b3r/Nhw705bH6wCpvvq8Gm+1vw9R1teO/Kerx1YSNeO6sFfz+1HX89oQe/PbwLz7Csb5sd + wHntdpxWb8M5TTZc3Mnv6/Xi7A4Pjmm0Y78qG/Zime3EgYUI4G15vKjFhsOmleGa5Sn8+PQmvH5HPz55 + rAdfP9uGDT9rxKbfVwCvZoG3UyMewBHgdyKAKZePB/DVnWX4ZIQA/uRWOz67zY4v7yjHxnv53ff5seEe + lsvdQWy8K4xvbg/jyxuj+Py6GD67Jo7PrqLMXx424aDfu9CFd8934f0L3Hj3nHK8eooNf6T8v7QmgceW + 5LBuQQhXzSvDpfPtuGS+DRdtazPp9dQzDyxz4On93fjF0SG8c2kNvr6N7evuDqIFG2+rxfpbKrFBuInt + 58YKrL+hgPXXFwmeu6EGG2+oZVrCphtrsdmghnVbg7cvyOM3J2Tw6H4pXLObH+dtz/dTx928UgSwDT89 + 2Ynfn+rEv053462zPHj/Qh8+uzaCTQ+w3J5vw5Y/DmLzG1Ow+f052PzJfODL7YFPtwPe24ZluS0+++k2 + +O0dk3DZYVXYbWo5+msVVsleIsvYdrVKKs/OsoYdawfTaVEHFnDAvrIigONawrisz01d7cVL++Tx+jkt + +PimZnz1IL/jhxXY9FyGshclKHvEhudDpb2onwtg47Osl2d8+OYJNz590IG31lE3X2/D76504JUrPPjj + rXm88Xg3PvvFbGx5dTfg/RXAJ6uZ//2Ar9YC34gEPhT44nD+dwjw+n7Y8qcl+ORHs/DvW9rxm/OzeP4Y + Px7eh/Wzwo67l7CdsY3dsqcd65aV4balZbhpsQPXLXLg6t3LcNmudly6swMXsHxPYV9x2CDbaIcNq1td + WNXiw94tTuzTxv6sO4BD+yI4pC+Mg3uDOLDHhwMV/rm9DGvb7FjbWkZdX/ICNp7AxOr2cqxqd2BFiwPL + 2C5EAC/iwHoh28B2LOMdOADfo5rn6tzYqcqJuRkHpieoL6gnJvG/ybxOoaAH83Z0F8rRki1572qv30oO + 2GuoH5uybhNKrSmlyZzvEMDUOdr/S14AIoJzPBa0j7CIyeGMDzOq4ti+KYkdaz3YvcaGg/jtF80pw1OH + xvGHi/J467ZqfPZwLb55qgZbnmvA+qdr8f5Defz6Ourgc+y45iAbjl5gw37sY3elHbAN9fS0ej/6C150 + Ztxo5rvlTa7JhQpNiDHvCjemSQftdZvVBKDyRwNeMPv0Us60Z2yB/xd5nfFS5bFIYIWBbsywLPjNrQUf + 2jUBVQyipzqI3uoQ+mpDlOUg+mv86BIBnJPnceleEcDyplAor5Sg0F4xvo+yXRNhWTJ/QgffNy5rx7Rq + N+a3hLBjJ8uoLY45DUFMqXCWwnPn7JjIehHxO5mQd7AhglmPEytdGCw60Et91876FAE8UMGybs9gZnsW + A1UBEwpP+xeLyJdBqlXq1upWTYp+HwFcCgOtfYCdqMzTSJXHb8FtiGB5A9cxrcxxEE7ZyfF7lSrscgXz + K8JsLAFcpAFciLOcmb8KQvsBt7Bv6mwoR19rOcZ1lmG4t2wrATzoMuSaSLbuNhu6WkdSopPHHdTn7U3a + k9VDyKMziNYGGtY0rhWuup7fL+JWk6EigSuYf6GqSPAbqooeVFJm5MmYYd40eSMvYMsTWL9L++Kx3Fjv + bXURdDVFDfpbYhjXkcQ41lFvUwi99T70Mw/DtMGm9MYxhW12AvuiCWyT0/o9Jgz01HHlmDJQZjybpwy4 + MdTpNPv6NrHOmtk/ddXajbevIOJ3uCOA8W0B9DVq0qkMnQo/XFOOVuMBXF4igCmT/5MA5kBR+wJx8Pr/ + JID5jfKOU3jUTC5kvIBNSOcRAtjy8BVGCeAx50rnywwicQcU6tB4+xKWZ5agfYBTbGeajBe5m+FAKF8I + IJdTaFaFhuUAnPkUERzXJPoIAVyo8KCmzo/G5jBaW8NoM/v/ljx/61nmtbTTqqudBnV1LjRSFtq0D3Bf + ABOGRQDHMXt2FnPmVmAy7bKe3hhqeV2eMinCssCyF/KUVXmmaHV3ihABbMmzIYB57bcI4EYHuppt6BtD + AM8QAUz7f7u55dh5vg+7bB/ErttHsBftxSW7ZbHrjnFsNz+MWbP9mDJTBLAXQ7P8GJwVxMB06hLasx39 + LrR0lbyAtQdwiQC2oa2fMsAxQP/EMHrGB9He6zf70Na1hlBN+SvUBJGkLGjfP4sAVt2acJIcwJZQIsJU + 3xEOWkUAi/jNsM4zKe0F7GUdabLZjRQHpBlFLuCx9ILCQKvuEimlrEtN4qYdhLyFqDtYRjmiwDKqqbKj + gWXc3EhdSDkW2lr5bWO8gEsEcBSTOSaZNJH6qT9h6lIeQlH2IRqka9JF5wbHJzBrTgFz5ws5g9nzspg6 + I47x2kOZ4z+RvZXs66pGoGPto1zH882so3aWYXe/Hb205ceznIenBjBxahATiCEej5/Csp1EuZnoR/cE + n0EXdZDQPcFDuNHHcakwwLGl0DeR54h+HvdP4vnJFlRPPgwwb/1DXvRSn/WO5zdTn7X30p7vsKOR+quV + aUdXOTq7XejscqG7S3tT833dfnR2lsqqTaHJaRO0NvvR0uhjmfrR3BBAQ60PNZXSX05UULcV2D9p33Yj + v3GLpOKxAX+LNGO5asLDTD4RZjKKOkETI6MEsHQF26Ag+REsMlTko0hIwSJdRzFmXGXhuwRwOcdaHo+I + Ci/7mzDbdwrFiiyqa4qob6hCR1s9GhuKlIGwGR9ZXmkWASyi1iJrLV0mHaa8aGGvNfkpUtjtFdkx8g38 + JqUifi3StUS8lsjf7xLAo/eNYCzxa8G61tKngkX4WqTv2OPvQuetvIiYLqFE5FgeyyJz9C5d/33evxbp + Y67Xnp9RN7S3cSTqYfmVl3S+3qd7VSYsK3lKWN4SATPOZDnwP3n0eFhHZl81ptqDMMh6DTtLE1qG3GCq + 4zh1SyLoYN/oRCZKe4H6W5AnlkUCZznW/b8SwDktQhpDAKsPK8FeAmXYIn+FCO0zIUZdFKd9IU/KVNaF + tPrzggcF2mk5jsH/NwJ4FLQb5QlsedXmBeo99atZpoIWWsjjx5DDhMIGlsD3EtKV0pnZtPRmyd5LUh+r + P47ze/RNQomU0AQx80/51rnvI4ANQcx6lre/9vkskb/fB4VpZrmo7yRKoaDLaXfpW6i7+e1q+/rvvxLA + vP+7BLB+ixg2+/+yf04yz1oAEGO+NFciO19kbwP1UAtt37a6INNAyatF0SJ0L+8TCVyIuWgPe1BL1Cdd + hoht5Hc1Uy5aKCNNlKsGQltm9bMuJtOmnt0Woe0awhT2HyKAB+u9GNcQwkBdFL208bppe3fSxhM6KmmX + KzXHfrTrdzGAtiJ1J9FCO7CeZSL7V6SvtkDRWFNIsY3EKf8irLTXb5htQOFrY5R/7UGa99NWZ5tqyYbR + VYigs8D+l+XWlmafTN3bX+nFYJ32EI7R/g+jTlEyZFfTdpR9bWwh2g+pSsq59sFtjrDfjqGuJYoq2qs5 + 5jWeFWGrdl2C2vhYAlg6MZ+Lsq8NlUJBq92r/f8fCGBfgPqE+kZ6R/B5RPxSB/D7DFguQV4nW0zRQDKs + K0GLVgUtFrNg2Q4ihQuFMO2vOPv8lCGBG+riqK4MGk9gtbOSzScbQm1FYy/KFWXn2wSwA/0VHN/UODGj + kWOgDi8WDSawF22E3WkrLOoNYOVwGmumFbH/rEocMKeKaRH7TE1g2aQAFk9wYfFEO5ZPdmD19DIcPNeL + 47YN4+TtYjhjXhhnz4/igm3jOH9eDOfMCeOEaS4cNaUMR80sxzG0147bzoMTd/DjhO39OG6HEI7aPopD + eP2+c6JYNCmIbQe8mKqoPG20F2jzj2tJoZv13VzBusyG2BbcRicK2vNX7bVAu6o4Ah2nYyJC2O5ZzmMJ + YAumzTM1eoEQcal9SA34XN0rvVHyqCtdP5bYtJ5pEcBRzS1qnpFtTCRwlNhKGBOsexF0ggjZJGGiPhDZ + QIn8rYr6jRdwXufYZ6TYh1hIsx/JesoMEaz/MmwvabafNNMk+w3tI6xIEnq28USk/Jl3MTXEE2Vw1COY + 12nBkbXoqAR+CyHvakFhtgUdixTWQhTNOZjIBOz/ipTHSpazCOAK7Y86QgCrLAzBZvRpqaxUtiKwchz3 + iPStr0qiuSaL+uoUx4pRFJIiJCnjYepwkV1ME6MQOazvYfmxDEcJ3pBIMa8hvxTxMaVjlqEIz2xchHSE + Oj5CncznEznaQCJ8Ff44TqSjAfY5vGYECpGcDHv5bI6PWM7yyN1KWrLdumkziNz0uOF2Omn3OGh3bQ0B + bcJBj4FLXrU+D/tS6pBomGXhZb9PW8iQvy4DH5/jc9J2EKFqQH0hu20UtBFYx4YApt0wFmPJX+MBzDK3 + COB0zMeyYdmFqA9UhrQBk2ER7f5REjgVCyMdj5g0HhYRHOD9ftabp0TmfpfE5W+fR99fgkX2CgG3m/Xs + NfeO3q+y0j0j8FNuAx7qSS9TIkSZEslX2sKhlCqSh1ngRRvaEMBEWgt8iCz7fO0znTfjb46X4iUvfS3E + VB+uRQKa1zftmrAIZsuT1gpZPEo8U7a1x7K8zccSwCKRDdT2+UzZ60qTfFeG8quQ0LlMEAnKaySo8MVs + XyznKMvYIn+/BcqUFRY6PoLRMNFjjkt7QJeg9hs2pLLIZ7YrObXJK5m2nuw2tZmmmhxaagtoqM5RvsNG + 7tUGVO9qFxHKsQhv48VNGFJX44L/I5xaDFHONsCxRMCrBQ2sa4HtL8zvU38ZJxK0RU1IZ9nG4l5Yt8aL + l2W/lQBmXfEb0lp8qIVNI2UoslvyUNKdJRiexvwekQ/WiaIBKIJAkfoiRxlPs/+N85kxA+ku2hZMtWCu + SBmpos1Vk5ODAu2kCt7HflEL7bS4rzbrRy37+foc+9JCCo0VaUPcdtSVCN6GQhry+tXevwW2F3n/tlbl + DcHb3ViNnsaaEuFL6Livpc6gp6HGXFfH+2s45qrKaJ9e6qA4x2Bqe2aP3xJSI2mWz9d1In6bqgq06yoM + yVubYx6ku9hGRf4WeVzL57bUVaK9sQ7tDXVorK5ETT5Lmz5GeajGgnlzcZQI4An9/Zjc14PpfS3YprcG + C3pzWDQuhRXDSayeEMV+QwFDAB/KwfLxEwM4k4Pz8zk4v4Cd+4UTy3HeRBdOH2Jn3WfD4V3ymLJh/247 + 9uspw+p+F9YMerCGA+41wx7sz0H5odOCOGZOBCep898+htu2S+AHNAAemxvEE7N9eJRGwEPTnbh/pgMP + znXhR7tE8cJeSfxseRq/3CeHX65J42erE3h27wgeX+HDPct8uGlJiQC+YI8ynLPQhvN2suGSHWy4Zhsb + 7pppwxPES7Nt+N18O17b1Y13lwXx8YEJfHZ0Dh+fVIn/nFiJvx9XxO+OKeLlI4p49vBK/GD/HG5ansJV + eyZx0a5ZnL0gi9O2L+DomRl+SwgrB/xYOejH6uEw1k6K4oCJMRw8OY0jphZw5OQKHDI+iwN7RQCHsV9r + gPCVCOBGDw7juRP4/+lTKnDa1ByOmxDBsSyj06f4cdlUP9bNCOKpeXH8lGXz24VJ/HNRFh8sq8DXq6ux + +VARwLXYcmoTcF47Np/XhS/PbMO7x1bjjcMKePvwYokEPrkWX53Fay7X3r8dwAUt2HBmA745uR6bT2oF + TmzHpiOasOGQGny9fxFf7JvGJyvD+FBewMvL8cm+5fjyCDe2nBsGrohj0015bLitChvXNQC3NgM3EJc1 + YfNZjfjwkCL+siyJ53eO4dbpfpzaWYYVRRu240BwBiECeBob19SaFAYqUmb1WpgdYynmfGmVlDVBMZYA + druo7NloFR5oHI367Wvc2KepDMd3OHDxQBlum+LGQ/OieHL7BB7fKYVHd0nj0T1yeGRxAQ8R9y+uwe27 + 1+GanRtx4oxKLO1OYnJVEE0pDuy04X0siCgNDhG+4RHo2NqjQwpfYQMUj990ymU87/UiE+DAicbKBA4i + 9q0vw+WT4rh9Thr3bJPEg9tmce+2edyyTR7nTsjggLYEtqcimcyOaxIxjUpnPg3spTSuD2sswylsL5dP + tmHd9pTTJTb88kAb/niEDf86xo43j3LhjYM8eG1NOV7f34nXDy7Dv0UAn1iOj8/24bOL/Pj6aj++uc6L + b27yYv1tHmy4y4P197vw9SMurH/KjY3PBrD5+RC2PBfB5mfjWP94El88EMP7t0Xw2hU+vHKyHS/ymS/y + nS8fbcMrx9vxj3Pt+PCGMDb/oAp4tAlbftCIzQ+2YdO93fj4uia8d1kz3jq/Df8+qxN/P6ELvzmkBT/a + K4dbZ3hwcQfbXzO/qcuOG8f7cPOkCK4ZCuPcXjeObS/Hfqw/7Xu6Y4UN21fasKiVOmOKA5ctjuGJE+vw + 15u78M6DHfjoqRZ8+VIjNv6mGvhnBfBWnsgA/4oDv4sCL8Wx5fEQvrjDiU9uduCTm0T+UmZvd+Gbu92G + /BW+uduHDXf6sf6OEL68JYDPrw/h8+ui+OKGBL66IYXPr43jk6si+PAyLz64xIePLg3i3fM8+OepZXjl + CC+eWKZFKhlcPMOPU4ZtOGGCDSdOsuEk4hTW24WzbLh5ZzseXObC8weH8Or5tfj0JrbLu7uAu9uw4ZYa + fHNjERtuKGL9tWxD1+TwzZUZfHNFtoQref7KSqy/ugYbrq3BputrsPkGtvPrKrD+mkq8f1Eefzsjj+cO + z+Ou5WFcvVsZrl9sx52rbfjhUayzE+z4Levwb6eW47UznXj/En7jLQlsfoTl9pN2bPnjADa/Pgmb3p2O + zR/PBT7fDvhkW+BdHr82H5//Yh5+d/cUXHlEDfac7kFfTYn8EMFohc1Ks7PUvk5tTKdwILUDB41Lc14c + 2ejHJb1O3DPHg5f3yeLNc5r57masf5Df8KMKyl0aW15iXlhXm1+mDnkpis0/iWHTCxFsei6Ejc8E8M0T + HnzygANv3GrD366l7F/jwB+u9+O1B2rwyYtD+OZ3c7DltYWgAmTe9wW+WgN8sxZYfwDw9SH8fRjw4cGU + DZ7750p8/bPt8Z8HB/H7y6rw4+NCuHelHesWURYXOnAF29ilxOU72nHxtjacO7cU5vk04lTW42nsI06a + zn5syIZ92mzYi2WxotmFla1ewol9O904qC+EwweiOLQ/jEP7gjio24sD5Pnb5sAayvKaFgfWtpZCQSs0 + tEUA793GgXCzHUsbthLAO6dLumB7DrYXVfN99S7sVFWOuRk7ZlC3TKHuVCjoKbxOIeeH8zb058vQkXWg + if/X8t46opGGb2vWg7asF42sm2qeK4RYbzR0xhLAhYTDpPICkFdwFc93xh2YmPVhdnUUC5rj2K3Zg+X8 + 9mNYBtcudOOFEwv41zUN+PiBVmz4USs2Pl1PXVKPb35Ujf88kMZvrnfjqXNtuO5gG45j33vwfBuWsI3s + 0OnArCYX+gvMb9qBZn6LJnrk6aq8aaJB4ei2GvD8zW+S14RFAOdphImYVJ4NdD/TmpS8f8tNCOhRApj9 + S0dFED21YfQr7HSdEEJvTQCdmgwTAcz7qhPydtUqUU0ecnAo0BhNcVCaC/H/sB2NLB+LAB6ftWFmrQc7 + dbJs+jPYpSuN7ZrDmFHlwgS2EwNeM1HewHkHJlc6MYX/TavzYnKND4MVTvRR17ezHlv4jQOVfkxtz2Bq + WxZ9Ck+X1v5l/G6WiQxSa4JKIQ2/TQBzYMNUqxILKRqn/P5Kfn9F3mmIUxHB8pxVSGgRwZXZMg6C7PxO + lhvTioz23mU7Zj7lCV7JOqngc+RhozA3lhdwNb+lqbIM7fXl6Gkpx0BHOYZ7yjGF9t+0CX5MGae9gUsk + m8jfToVhU0oY8pe6XwRwR4uX58P8P8rfEbTWazBCQ5oGdjXrrIryqrCI2lNUqOQ3iAgW8at9ALWfaT7N + AQ/7/7EEsFZwao/kAmWkruBlPsPoboqhuzmKgZY4hjqSGGpPYJDvHmwOYagthCk9CUwbSGH6QBwTO7yG + AJ7Sy+/pd2NCjx3DtFfl5TyB3znYVo52tsV6llUDy6K9SiSww6C3wYXxtOXG85k67qzTtSyrGieNecoj + 67q+6KJBrv0L3RyElMjfsQSwPDlEqFokiiEt+G0iEiyPNREJIg6SqeAoARxLiiAUEcEB0LeI3q0E8NgQ + 0CJ/tY9dlDJkJuVZtxYBLOJXUHjONOWqBA4aOQgqaM84QwCLsBhLAJcjpWtYL8VKL2rqAmhoDKG5mTLM + ci55/nKwxLZSVUW5rKB8ESKB66nXmls86Oz2Y2h8GJMniwDOYc6cCowbjKOpmYMb6jSFdVI4rwzl04B5 + LZFnBNMsf0uWjUe79pLO2s3+hiKA2xtLBHA3ZdAigKeOt2HWFBvmzXYYAninbb3YdQcRwGEs2imOvXbJ + YNedEthh+yjmzC0RwEO0YYZmst3OCmBgRgB9kyjHg260UU5EENby+SKAm2i3tfaVo4vtoWeQ+qfPi+Yu + F/9j2TT7UVHnN5PICerkcNxpwj9bBHCJLCrBIrvk8W3qPOk1E7jZbBDaX0r7lGdGkOZAtURklAjgFHVl + gu0gnnQQrFeVFcsnnXIYr54UIQJdpHp1pR31tU401XvQLK/sJo/ZE7jkBSwCeCQE9Lio8f6dMJxGf2+c + dcn38JnaT1MEcIJ6oqbGhQHW28w5BWyzbRFzafMKs+dRr82MYmiyH73j2Cd1UE+3bEVdE+9tIKgjmtpZ + fiKAx7G+hh0YP5ltcZofk1jmwkRiaLoPA1O96J/qQ98UL/p43DeFNgrRP1VwY/w0n8HQjBLGT/caWL8n + zPRjAuvSgOOqCdMCGOY4a/xkXst8DhJ9Q250DZSjo9eBngHqa9ZpP8etwiDHeIPj2eYpt+PGBQn2K30R + 9PVG0dsTQXdXGF0cz3W1h9HeyrZAm6i+xovaKi+q5XlXoH7VYhx5ZxM56t08dXHekMPlZuI9QX2vSWJr + UspMJqnd8ZxgSGCm8kQT2WhITukMwkl9ISLSgqP8v2BkfPVdAljnXPK28FO/RClv2WSJAK4torGxCn09 + rZSTauqEiCEiAszL/5kAJvQe4y3L/w1pyrybUM5exyjxKhjCRERJsNyQwSUPOau9bCV6reOxsNqW9ewS + /icBbOVBsBbdjOpeX5kJV20RwNb+v98lgPVsfY/5hjH5sUgfteVwzG0Wdci7X9EcolEvfF7eq3ezfMYS + wCJ+fJ4y+F28nwhoUpn1pn0hFV7SkMCE9iU0JDCfIeLXCnEqAjgZKkOGtozC3xVS8qKirh4hgHPMuybl + Rf6ORZL5tUhgIc7vFbQHcF573BHah/F/EsAOguPzaAlbCeBSfyPyN0Hb5n8SwPIALhHACtkcpr2j7Qek + x3K8psi+v6j+UzYAbYRK9kWCRQprv/O8yLyU4BwlgtXXZtnnKTpCKUKCiF/2wdSXeergAp+Rp50rr8ks + x/8ig0Wg5XlsvAETIhFKnmkiJ/S9Op+Td+UYAtiQO6zvBPvxlLysRSrxOWPJ30JS5/h+lYv6TkLkmuxa + kb956u0U2/xYAtjaA9gigBXq2SJ9TWjpEZiFi/xWEcDaz1Zhv0X+aiGAUnkAV7HMG2gDttYG0dlI+0u2 + V2XQTHJmo3w37xMJXEHbtybtpS3tN6GWFUK5gbZKI+WinnJaQ/msoWw1sEy6+P9QdRCTGwOY3EQdS9tn + UGiknqXtNdxCm6s5iXFNCfTxfb20v3vqqR/raJ/VhtBJdNQE0V4ZQhtt9Vbagc156knaoCIcsyzTHGF5 + ACf47hDlPUBo/9MQ24BIYBHAaX6rPIPrKdudRdp9NSn0VcbQUwyhizLSR7tQCy0Ha0IYVycCOEJbzmvG + ELKv5f0bYX8Zo32X0z64TSHUtsXQQNuxkahpjhiP4BTl1c/xgKV/lIoA1h7A8Rj792wUFcWEIYFTyYCZ + 4I6ENeFdIn3/GwEc0H86R5vATx0jfeP1UtcRfhEf0j/Ue/+DAKb9l6a8CSkLKbZP2gsifuOSYS1w4HFe + ewBX8ZtqSwRwY30StdVhVBT8bAd8BuUwxXZjxhdsN2o7GbbdPMunmuVjCOB8OcuxHBPY38+gvbBNuw8L + +6JY2BPE9s1l2I52/i5dQSymLbD35CzWzCxi7ewCVs9IYvlknh8hgJdNdmCf6Q4cNMeD47YNGQL49Plh + nLNtFBfMj+G8baI4g331sRMdOGLYjiOm2XHsnDKcuL0PZ+7CaxfGcPLCBE5cmMZRCzJYOz+JJdMiWDA+ + hFndIUzrimNqV4a2fQ7jWjK0y5NoqUqgJhtCLk6bSaQMbbA8y6qS9nQNZUYo0sbSGNAQQyKWiLH9sNXe + rTY/lgguEUmsE93DtEQA27dez3sNAcz/Sh7EgnSmswTqYkGeqwoXPQrKVowyESeSAY5Lg6yrEeTDPlTH + A6yfgPEETrEvUzuxvOIVijnJd2fYl4gEzgjs29P8X+fS/J004Y5LnrHWe0SUCsYjmM+0SF/BhIomtAd9 + iRTmN+u9lFOLBP42mA8iSZlNh6m/WP5FlTvLWqS7yDmLAFYZiTwXkW7pXeO9mAkb78Wm2izt+gq0NuTR + UJVGVS5Ofah9av3UnxbUP1lEpogzjodGyF9BBLBI4yzLTffpfhG5InuLmTjzleBzkwbV+RT7HLZn/p8d + CYUsQriYjo1C91n/JUIe2mkcJyk0dIDHRDTIfp4IB30I+Hy0J1y0EZwoc5UZOJ2uMSiRpfL8Tcaj7JMS + fGaINsAI8Vsucs6NgNtjyFNDLIsoNSRwiXgWRAJbBLAJnSybYgQmqswIAqpL6nWVi0hAlYvKLBqgDBpZ + UBmWSGAR35kR8jeTYN6EZJx9XpQ6NMK6CvK7+Y2jeaJd5C59j9/rHkXQw3yPIOihfuQ9IoGF4BgS2CLO + g/Iy9rFMfSpTizQV2DerzVCmYvK8Z/+coD7UQqykFjVxfKqoHCXyl/2n+n32werXzTwPx8WlhV6SDc3t + q82yTCiD3yaBRf5S77Kc9J/aREmeZBtoQVfpWPcaHUFdYBZrqt0zVf5EXOa1OIhIxf3GM3crvN+PiM+k + CaZjoXMijWMWxjxL5VIKJ009wfcIpWgttD2YVvD9hgCuK7ItFVCTT1DmJb+ltpAmRD4H+L1aRCAv3hKZ + uxXfJXr/G5zltOMpl37qlyDbgyG09V1smzG1V/aPipiRSZeQJmIxygLL0tSBKXvWB3WLzqkvLRHAAZaD + ykCywf/8koMSoV4i1bdCXsLyapZMq50XUyHaWhxHS0fwf9m6ceoZkb8iglO0uwqUj0rahJUZOSX4CNoJ + xu5ymnO17EMU7rmhwD60mEZzZdYQt531Vexnqoxnr7x+CzG+j3pBe/sqvLNF9g62N2FcWyMGWhswrrXR + HPe31o8SwPXFDGrz1G0cd4kA1n6+GS3AUGSCESSoV5TqfGU6bghgkb/tfH9zdZG/syUvYN1P3VWRSaCW + z22pr0RHUz06GuspB1XUqTleEzcE8E7zt8HRhx4M28S+QUzu7ceM3g7M7WnAjr1F7DEui+XD8nRNYO1Q + CPsPenEIB8VHD/lxKjv2MyYFcNqQi3DilPEunDDOhcM4mD+Ag/r9OOhf3VmGfbpcWNVHjPNi70EfVnEw + vXrYjQMm+XAEB+LHzY3gnG3CuHlOFPfPCuPhWSE8NsOPRyaX49EpDjxMg+Hx2U78dNc4frNXGn9clsOf + VxXxx9U5/GpVCs/vHcVjK4O4c2UANywXAVyOi3dz4MKdbLhoBxsum2/D1TNtuGuqDU9Ot+HleXb8ficX + /r04iHf3jeHjwzL49MQKfHBaJd48pQJ/Oi6HXxyZw7OH5PDI2gzWrUzimr0SuHS3JM5ZkMRp2yZxwuwM + jpiSxH7jo9inL4h9BkI8VpjsCA4gDp6U4v8FHDE5j0OG0ti/N4rV7UHs2xrAvm1erG71Yr9WPw7tieH4 + CQWcNr2ahk8Rp05J4YypcVw0I4brZoRxz6wInpmXxC+2S+APO0Xw2p4JfLg8hy/WVGDDodXYdEw9Np3a + hs1n9+DLUzrxwXEteP2QKvx1TRZ/W5PCGwcV8N7RVfj05HpsOK8Dm0QUn9mCjac2YePxjdh8XDNwbCtw + RDO2HFKPjWur8PU+WXy6LIoPl/jx4WIPPtnbh68ODWDLWVHg8ji23JzH5jtqsPnOOuCORuDmBuAqHp9d + jS8Pz+KNvRP41W4x3Ds7hDN7yrGiyob5CZvxZJvGAcn0iiCm0Bjtr0yhip1LhJ2h2UCecDi0SmpkkoCK + RCgRwDKyOCii8u5Jl2M2jdHFtXYc2mLHmd1luGbIjdunBXDf7Ah+sH0SD+yUxv27ZnH/ogLuW1TE3Ytq + cPPCOly5oBknzarF8r4MptVG0KyN2xMBdroBszIlRoUZpVFmEFZnw5TGuVb9hKmQgjSi3NqroIwdAzvu + BDunAv/r4qBtYc6G47uDuIR1eN2sHG6ZW8CNc3O4clYGZ0zMYm1bCttzkCUCeCKNnclUQLM4AFvIQeDe + xTIcXG/DaX02XDXLhnt2teH5/Rz49RE2/PU4G/59rANvHebEmwc48PbB5Xj7cKZH2vHeCeX4+Aw3Pjvf + gy8vd+Orq9z48jriJhe+vt2Lr+7m8YNurH/Mh81PR7Dl2RjwTAJbfpTE+kdT+OK+OD68NYbXLw/g1yc6 + 8MIhfC/xEt/7u1NdeP3SED6/owg8Thl5shObH2nFhgfbsP6eDnx0bQPevbQBb5/XhDfOaMe/jm/H7w9s + xI8XpXHXdCeu67fh+oEy3DXZg0fmJvHk9nk8NC+Hm6dHcdGkII4f78WaLif2bC3Drk02LOqgzphgw9kL + fbjn8Dx+dmkj/rKuEW893IRPnmvGlz+nrP+5Fvh3NfA68/SPHPCbFPBiChsfieLTdW58fLMLn97qxJd3 + eLD+bj823h/ElgdD2HRvAN/c6cX6dX58dWsAn93gxWfX+fHFDVETCnrDbVl8fXOav+P45JogPr4qhE+u + juPtiyL466l+vHxoFPdQ91zC7zhqnAf7Ur8tb7FhVRt1HfXdYay3UzhguWROOW7b3Y+nD0rhr+c04sPr + urDxrj7gLqY31eGbayuw8RriygI2XZbFxovTWH9hCl+fn8TXF2bw9SV5rL+8ApuuqsaWa2uw5boqbLmm + iE1XV+Dji7J47awsfnlMFo/uS323tBz37uPAowfa8dwxdrxMOXnlRBv+dIoDfz+jHP+5IozP78ph8w/r + seWn7djy53HY8toEbH5rMvDBLOCTecCH2wDv8PjVufj059vglTsm4YrD67B0VhB91TY0ZuyoTXIQEZFx + TkOfHXKRxn0bDfUpNL52TLuwhAPtw+q9uLDPjbvm+vHiyjT+fVo9y7eB5V8D/KgCeIl19bMMNv08jc3C + z1hvL6ex5YUktvyYOuXpKOUxgE/vc+GtW+z429U2/P0GJ167I4YPf9iEDb+aiE1/mYstry9g3hcDX+wD + fLMfsHF/YMOBhAjgg4FPeaz9gV9fgfV/WIgPn52OP93chB+dEsNtK524fAc7LpjrwJnTywxxf/IkO44f + tuGIcTYczDo8VJEr+PsYnj9sPOWxy4YlbJe7VNiwmIPcpW1OLG8vw+puDw7uD+HwcWEcPkD0BXBwpxv7 + a79fysU+lOd9iTXNDuzX6cT+hgB2sQ/QPsAOLG/mc+tKBLBCQO9C3bEgzbTgwOK6MixrcmOX/w97fwFt + V5F9C+PX/bjbPdfd3ZIbdxIgeIBggeAugUAS4u4uWHBtnO6maaBxa1waaNzdLZnfnHXuTi5pfs++N97/ + /cf4zhhz1Lazd8mqtVbtuVdVYRrGhZIwkgNw6c6hfiJIHcpjg6JJGMBr27gvclIkZRXTGl86av2ZqPJl + oJjOsNbQ0ksUrQ/sZ2oIYBePudmORJD7Wm+2iPqrxU/dHM/FPlVuTG710F5n4TT1x3GpuOZYG55aVIQP + ttfi+zvr8dt91fj1vhLseKAIP7J9P6AeeX5bFv62NAnbqTsWHJ6Eafsk4Xja3UldKZjQmIYelrWR5axi + eSwCWNHJIqAVyakXMh7CrHfrSaYDL+JSUa6JSFdNxRLRiwnWhYkEJgr9yShRlAPtSnkoExVhlj2qqIJc + 1Bfa0VzoQHMRUWxHQ0EuamNZqAilmajhQurdmF420skzAwM34VT0SypC1NGFHKiXU+6r+UxNAT2AdT6m + PBcHtwRweGcEhzDdt9aBUcWZGJyfgl6eHygSmG0iIrg3noYhRVkYUWHDkDI7ugqz0RJR+6SimmgptGFA + VQBdFX405OehNKDlCBJtZBHAmgJaa316mdfElK960ZlBpLMe9GJQBHAGnVVFm4lkyDLkaZypSGCzH9IL + D0WpJJkptrUfC/F/4TQT+WvIXx/rl/eLeFjnHtazV2vVsfz56agpyUBjZQZaaxXxm4nezlwM6rahl/LR + 2ZSCZupCEb91lGmhlvJfQ9mvJmorU9FQm4Pmeheaar2op2zVlLlQXmBHUTSXeecgn4M0IaKBGhFlO4aD + HLD5M8x+LJTDlAMI6hyLADYvujlYkPxq7ZZyRZeXsp0rPGgWAVzpRmeNG13VbvTUutBd48SAOieGNPsx + rC2A4e0+DKjPRRf7Yw/7Z1ddGtpZDqGLPquif1urUlHFvlnEflfMvqn1xWroy2iKZ0313FichcbSHNSz + /WsK03mtyN8MXpdBRzwNReF0OuNqpzQTAWQGqBYBTLhEAlPGfkcAs0wWGaFtvRgUaeDTQClk61sHmH6K + l76JJ0H2Ctq3IHLY5qCvQmjbzed7WZdu9hWL/BUUmeUNULbMy3nKPXV5wIB1H8pGOMJBVzALHg8HXOwP + uwlg6g0ej7CfxdmnRAAXl+aadX4Fkb+K/hU5mJ9PedLUzZEk5MfSUFycwWuyUFOXg7Y2G3p63Bg2LITh + w/NR3+Aw54PMk5N51xTD0gUWLPJXRLAIYcl0LJRCOUqnrKejlLJaTp1ZW56J+so0NFImW+vZntTrg6nH + RnMcsddo2qxxmdh3fBYO3MeOA/d24qB93Ji0fwAHTPRhwngnRozMRs9gyoMwJBOtQ9lvhd5sNHKsU9uc + IC1LiDL6LBUigJtTUNuSlogQbsxAGXV8YQXLX0pZLsyEn33TTVm2udIN+ZuZq5fJgkitBGEk8kztbZFG + fr9IXzvCipbQC8ywjamiskXO5fBcFutKL3DZduy/XpG/7LfW2ps+1RXb3M+6MttMQ5TjONukqJAySrkt + K8kiqDdFmleJ/FV0ay6amvLQ3sZ+0+Uz6/82sv/GopRd3lfEn6IXA9QbpbT7rR1uDB0ZwZgJMYwaH8So + vYIYwTHL4BEuDBhqR/fgXLT38LouRdwm0MQxZD39hdq2dDS0p6OpMw0tPSlo72VfHJqFAcNz0DsyD70j + 8jCQqYj49mFZaOO5NrZF+7AcdPShc3gekYOekbkGA0blJaBtYuAom8GgMXYM5jhzMNNBHHMOGulA73A7 + BnIMOnCYHT1E5yDmVdHD3Rlo7+a9e3LQNYB6gugZQH3da0fvIDcGDnQRHgzkuHhAj4+p3xDlnZ1etLVQ + BzW6qPfsqKt2UAfaqAvzzDT45SU5hhQupV0ojmvKaCELhZq5gXpbawoH3HpBzH5mwG1FOfSRbE5ua+r4 + XPbDLLZBFnWhRXCKALYigAXt74k0IV0f1+4mggWLBE7nuaxsfZySjWiE47OCMPtxhH02TnmoQ11tMfuy + 05AQiY9XqL8ou2YqaMkvoemNlTdrCmY9rz8BbMhmPl/Hd4HXWUSsRQI79LW/ouk4LrM7MncRJTn0QUUG + W1OmWtsW8SpIl5r+lZ1ApsD77kkAG7KXYzorn6oXpRncz87RNNQibzL4XJG96p/9CGBHggDWs8zUz306 + 3MqDRfqI+LUgXe712WjPbaw7kT0pfQQw78N8ZGcmyN9E9EQ6bFmEpuZWdFEq857M57D+hFzmVbAxrxa0 + RIKHutrf98I94tXUmwloKtQI86Bpof2sRx/L42ddijhUqkhfkb17ws9xsF4iJl4oZtCOpdM3STdRs24L + tG2uPliRwJpxQiSwmz6Wl36csTEinOirCCGltPM+ntOawSLjRAT7ZTNpz0VQxfuhIGajnrfRp+G2jvWR + wbuIYN4/zDQkMliQHdOHStSTCSTI3xjtWiySw+08IrcvVaSZnb6RDdFALv1PkUGa0jXNlDnEuksQ4HpJ + niAsLHJHfomuDdCeh9yy9yI6RNzqBaLaQAQw76X+zD4jXzcRzSuyTdGWai/6eTyvZT90XucsAlhpjOUQ + FAUtxM1xtqnKp+ktaS/VjvKJdkcAp6CAdVOWr+hfJ5oqfWio8KG6yEX/hLbEkZpY/85OW8W8lrIuKiI2 + VLEuKnnvctr9UspoIeUqxv6bTzkt5r1rfJlo4T07ihVZm44W+kPNhcloK8tGF/27AbV+dNcF0VUTQHuV + j76YN+GXEU30/RpKXahnfmron1dr5hv6vhX0JQppT8zHqqxXRQDHqeuEiGQzOw1m6lnmwUnZVySwpoIO + Mz/5lPdS+u7NcQ+6yyPorYhiUGUYPSUedBTY0EZZaWV+WwocqIvZUcqyhVnnhgCWraSN9EXoD5dRvugv + ltZ5UdEYoB0PoqzWQzvuRJj5tFG2E/070c8NAawX7l475cmLwoIAbavPRAP7vbnwuHPo4+njuQzT1/Oo + Qwy0r5fY1GmJqKhM6gnuM018aEI9J72Ty75vUhHBWm9YhDP1InWvIT4UzaZxC/t5gPIZDOTRJuea6F9F + Veldlof6Rh+QxWIuMw10cZEHpZoKutiNgnzmO8y6oP8QoO8fpA8R5rhCL7w1DsinjBbTR6wMpnB8kokO + +jHdxRkYzLHpyOpcTGiwYW/6cWPKUjG8iGOjsjSOh7JxCP2Go3sDOI5+3dThARzZa8Oh3Wk4rI8AnjIk + BScPT8d5Y/Iwc7wbc8a5sVDTPysd5cDM3gyc25GEMzgmP4tj9POHcaw+LgeLD/Jj0UEBzD4wiJkHhDBt + Yggn09eYPNSDfTudGNnkwtAGL4Y0hjCwPkL5C6OpIoi60gDHG172GfZz9ksRQyIgCyMulBX6DAqiLh4X + eUjdxj6vqUOdbGdD7BAWmWtFqpo1aOm7udguCaKWOtCQlyI0RTjSTvAa6zq9u0xcm9ApiXWENebMYppA + 4uMakZQahwoJItOvCE0i6NSLf7anbLMrDwWUuwI3+3FeBvsG78++4WKfcMsGMK9ePtvP40HaMSHEPhSi + bQ/nUk/mUTfashGwS6dbxKlFAsrmaJyl9527bUse76+1iJ20UU7eV+sAm7WAeT9vLuVR/VRgOROgXmQf + MWWmXyCbFKK8RimjquuAorJ5LAHWh+rE1D+v5zErcrG0wI/qsih9+kLUVsRRWUSfJOrjfdgvWQehXbAZ + GELLlQtF55roSebPxb6kSF2VMegW6SUC2kFd7zEkSdwQv37eN2Ag0qQgEjAkcDTg5rUujjfc5nqRxQl4 + zTFB6+V6HHlwO9jvnXkGPpfDwOOyw2m3sX/nsl9n0/fPNMjJydmFbEXD5uXwWochf8NBP8vggiM7mzKX + IH1t2SJMcwmlObDxP7lZvE8m/ZAMKxo4JRH9m8bxBH2GPPoXFmxsM8FOGRDUziKurfZXXTly0k1deUzU + M8edzLPfpSmgRQC7WE6W1eehnfUx9XFM5qEedcJlY/lE4mZThynNEbJhy2U++yAy1yYimNC2M293WRwm + EjhBANtZJkUFO1lXItCdrBdDiNIf9FGnahpg02/kj1CeArSx5mMY2l6/Poyh3QrK99HsB9SJ0SBtfSCH + +wTtnKaENtHAvEb9TB9fiNAVoSiyd3cEKn04U1+JcyJYzYcS1NVu+kWKljYfGVDm1bftvIedMq97aCpi + kZBe1mvQR9kkfJRLN/vxbvQRo3vAK9ll/w54WO+UawNueymzHt5v17XKex8SXAXzRZsSoH8ZJELePLYd + 64Z+S9hvYz+iHiwMo6wghJKYnzJPOWO+gry3T/elLrCz/XPZv7VubyZ90gzKkZAuv5h2tz/2XKrTOp5F + WVT0d24ObRrb0OnM4biF7ca+6dPzAppdiP0pzL5D6OMpH885ZPskqzlsB8JOOKjbNDW26tGqP0U/O6hv + nDznopzuJsSt+kvUkfq6PgxJRPZLvzNlPw1RjvysJ33caOlkBX2EaCsjvlwjI7ITMdoJRY7Lh8unT1jI + sXhRkHY07EEJ9UW5om9jIVTmhw0UFVysD0moV/LZZooAtgjgtpoydDdUo6u+ahcR3FpdhubKYhMRXM3r + yngvTeesKOC49IrXybyyDe0irVl+ltErIpjbmoI+n2VS1HAF/1tdlM80hlIt22P0ksqrD1uk25gv5a8g + hpJ4lHouyP6ga7zUqyXYd6+xmHbmGUga2NKDQS0dGN7chNFNldinpQAHt0dwVFcYxw8I4ORuJ07tzKVh + zsa5Xbm4aKANM3tsmN6ZiQs6MnA+B/XntmXhlIYUHF+bhKl1NPb1aZjSkIkjmzMxuTULhxOTWzNwTHsG + ju/JxOmDczGNA/H5HIhvHeLA9YNt+NNQJ+4YYsMdA9NwV28y7qHDcP/IdLx4oBdvHBrEO0dE8e6UON6Y + GsezWgt4igd3THHiqik2bDkmG+sPS0zjuXZiEhTptW5MEjYNScJ1g5Lw52FJeGRCKl6cZMfbx3rx8Wkh + fDk9ji/nFOGj+QV4c04Mz1zAe57lx50n+3DVkQ6sP8iOVQe6sXgfD2aNdeKC4S6cNcCF0ztdOInOztRm + O05oceKkdidOpiNycqcDp/f4cPbAEK8L4dQOL45vcOC4mjwcS8fp2JpsAxHCp7f6ML03jouHF2Hu8DgW + DItg1agINo8MYvsID/400ov7x/rx5F5uvLRvDt451I7Pjw7g6xPC+O7MAnx/Xil+mlmPHy9uwQdnVuLN + k0vwyrFRPHO4D08d5sDLx3jxzmlRfDqtGN/MKMcPMyvx00UV+GV6BXZOq8TOcyuAc6uAs4nTy7HjhEL8 + PCWMbyZ78AXr6ItDbfjmKBd+Ps0LzHEBazzAZRHgmiLsuK4IuK4EuLIY2JQPLAzht3O8+Gwq83qIC7eN + tmNxSyqOoXM41peEIcTgUAaG0PEcXBJASzyAQk29zAGu1jpIE/lL9I/8tSACWF/VRThYqaZjOjCQjP1j + yZhakoTp1SlY0pSB9W1p2NadjatGuHD1OB+u3ieAqw+M4JqD47jykGJs268Ma/euwowRJThyFwGcWNvI + 65HDTgVChSnnWQSw9WWNvvIRNJ2I1nuwFqtXJLCThtlPpVlG51xroh5dlIEL2/1YNrwQq0fkY/nQEBb2 + +jCjK4BjOfgaR+UykNf20Lns4SBiENPRLNMBvhQcFU3COew3SyinV+yXjL+elIEnzqOszkjCGxcl4YPz + UvDxWcn49JwUfMrtz6al4IuL0vHV7Ax8uyAD361Ix/fruL0pE99uy8T3V+bhu2ty8N1NOfj5djt2/NkN + 3Mt2/KsfO+8J4JfbA/jueh++vNyL99fa8c8ZKfjHGUl48PQkPHpuMl5d4sAnmqb41lr+p8Xgt7vq8dMt + Nfj2qgp8vL4AHywvxHvzi/DOrHK8fWE1Xjm1FI8eFsRt7K/X9ybhthGZuG9fNx6flI/njijD44eW4u79 + orhqQgArxrgxbWA2pnakYnJzEiY1JOGotiScNyoF645x4NaZITy0JoZXrinFB3dV4rP7y/HTM5TX18qx + 81+UvVcKsPOJMHbcG8D3NzjxxRVZ+OKybHwjkvdaG3bc7MLO2yivf3Lgt+vz8PPVOfjpilzWTQ6+2pSF + b7bk4PtLnfjlSh9+uyZs8NOVfnx7mQtfXeLC19uCeG9VAC9c7MHfTg1i84FhXNDrwuSqFOwdT8LwYGLq + 6sNKqeuqOVhpSsbsnjRsmujCn08vxAsLa/HJ5hb8ck0bdl7ThF+3leGnDXH8ui6OHavzsXM5874kiF8W + +vDDXBd+XODBj0v9+GVVFDt5DTaxjJsKTN/asSmOr5YH8e5cH5473437TszGXVPT8ZdT0vDgOal4dHoK + HpuehKcoJ89dnIIX56fh3Q0ufHtzAXbcX4Udj9cDL3cA/+7GzncGAh8NBT4dCXwyAnif22+MwBePjMGj + l/Vg9ZklOHq0G60c1JexnxX5Us0LDPUFD4201luqodPUy2P7+NNxeDgDZ5ZkYWFLFi4fkYM/H+rCS9Oi + +GJNIX65thD4C3XDo3G2VQy/PhnDb4S28QjxIHXJfUHgzwH8ehvze30uPrwsFW9sTMI7V2Tj81tD+OnB + GuA55vvNUcB7ewOfHQJ8e8zvCeBfT8fOH5l+fwrw1QnY+fHR+PmNg/HlU2Pw8s0NuGdRCFuPzcWcUck4 + vzsZ53Wk45TaFEJr+SaxbybhmEq2I/vfaa2a9jkVJ7Uk45iqJBxSnISJbO+DytnWNRzE6sOmJtqu1jyc + 3W7HOW12nN2ch9PrMnBydaohfqeUJeE4Xn98ZbKJ/j2FNvDE+kzeX1HEIniTcLhFABck4WDefxLTyaVp + OLoiA0dXZWNSUTr2CXNg7U+QwKMob6O4PzKShBH5QhoGhZLRSr1T70xCg4hKDuZrPemocCaj0JaEfOoX + raElklfryiraNsJzMTrK+bzOHOM1ZS6tU5uFceU2TG734tShXpw9IgszxtJ+HpaG285y4YU1Zfjsevb/ + P9fj179V4Le/s//9g/bib1F8dCPb/JJs/GN5Mm6kHK47PokD9SScPT4JJ4xi/+5Nxxj2787CJNSwHCUe + 5s2ur8yTEWLeAyyDop9EeCriNaAXZJQtvdiLBtM5SEvHrqmg/cy/L5lOltYDTkFRIBXFgTSU8JoSpmW0 + MRWRLBNZoGjg+ngeGgryzBR0WnusjNcrqr1Q5KmiMESq0snza1DxOwI4BRWslwbKf2uAujo/GXvXsH66 + QjhmYMwsj7F/vR17lWdhVInIc9o32qQBoQQBPDA/xRDAIyvtGFbhRE+xDS2s4zqWqSaYiaZCO9pLvWgq + dqE6mosif6r56l6kptYo0wuqBAksMowDaC8HOF4NcNKJNOZXLxDTzEvQeEQvRbMN8iOKoN0N1Z+IX0VV + K8osxjrYBZbf1KvIdhGVfE7i5WQKCkIpKMvPQDX7dkNlJlprM9HZlI3eThsGddkxkH5gR1OaWf9X662a + iN8+1FD2K4maPgK4pcGFxloP6ipcqCy2c4DNwVkw29R7gA65Imv0QiCBDJMq8kYvYjVwC9EZ19fzevmi + tYAV8eRlKrK8wJNq2luRJc1lLjSXO9BS5kB7uR0dFXZD/vbUODCwzoUhTT4Mo881tNWD7vpcE+Xbxj7a + WJZMRz0JLcx7Z10auuoy6ZzzvuxnBex/RWz/Mva7ipiQbFAeSSFSURnN4GAgHeUx9rt8+gKKwA6looCy + qAjzxDSNeuFIUJ4MAcz+56L+VBTwngSwISMIkSgiESwCWOSv1gAWAezxcQBDWFG/itK1jiny1yKAte2h + fHspc4rEclHuLWg/EZ3FgSrPa1pnRfYKIngFHVM+TR71QkyEFOtbBLGm8CwozENhsUjgHEP8JpBjCODC + wgQBHA6zj7M/RFlfOlZWlo1q+r+NLblo73Jh4OAgegdHUVmV+E80TBlX3qgjNP25BUMEUw9qhgCRwJLp + GK/VNOel8SwObjNRTv+rriILjdUZlMtktFHndNOnGDIwGWNHpGPCmAzsNyEHE4kD9rHjgL2dhAsH7cu+ + vI8XY0bnYvDgDLR2JaN5ANGbhsaBvNcgysPATDR2pRsCWNMWl9UnyF9NAV3dnExQFhpTUUa7oujg/DLq + quJ0BCkTPvY1lz8TuY40ZLIe07NFTHGgTZ8yEWmYiJ78TwLY0Y8A5uA1yIF9SFHBCXJeZL3aS+30HwQw + IfLXIoCVajrofMppYWEWSqibSooyDUpL2M8rc1BfS11Zb0NTow1trS60t7nR1KRpve2mXTQjgYlCJUKU + 8bKKHLR2ejBkRBijxkcwgn738LHsX/QfBo10oneEw2wbjPFg2Bgvho71YnAfATtgRJ5Za1nTbXcOzSCy + zPYA+hEDRd4S3SOpZ4Znom2YyHil2WgfnoMuXtM1QoSvvY/01Tb/MzrPoLcPg8aI/LVh8Fg7hox1GAwa + w+ePdqCX/+0daTMYyDHoAEUGD81D1+AcdPfmoWcQ78sxqTBwMK8f6jBTWw8Z6sFQ2sihg/0GIzhuG8Hx + 25AhEQzoDqCj3YO2ZtZfiw9tTR60NrrRTB3YRB3UQH1UL2JYpHBpbh/yUM5+VEx9m8961brmEfZRzfCg + j6CibOMQ+6giGT3U+w72bUUC57AdckRK9OkO8wEJdaPQn4xMIMWQlNYHJr+LFk5NQASwos+cTtqRmB+F + BWEUF0VQURFHa2sN6mqLEIk4zPP1UYgi0myUWyGP24KJUO7Li54jiPBNTk5MAW1FG5tn87gBt61rRcwm + COAcuL026r9cOLntYJ5EkphIOfqggsokQjiBRB+yopANKZyTgBVVbCFBAuvjYo0zk3eRvyZfTHUsK1v3 + T6fuS+c9ua1+ytRE9BIiga1nqa6t+rbyYEX87UkAe1gmvQyzi/DJpT7QyzYRvH3kryInTPRETgbtnaJg + eJ1I4DTmXWurMY+aEnpXNA/b04rqEUmh6DLZTpG/mnYzn/ZT0LZIYU3x7GU5vBxPiwS2Ur0QEwlsoT8B + vJuY4H85PtbUfVqbbdfH0rQRu0H7QjhFAhOagcLYoCBtTIj3CdOu0P/Rx0Yif708J5ti6S3NQiECOB7L + +x0KFLmab0MhtwtFAtPnUXSwCGAhzHtrSts9oeMWAZwggUX6igAWEcx7RG0oyFekmZv3dbKvUb/SLxEp + IajMCf8k2+wr4scihIw/wjZXlL4ir43vSN8lQf5aYL70cpp9RiSvIYBZLyZSuc/fCtI3EAksyF/QR4mG + 6GW+LRK4PwqZ78KwDXHagUSEcYLIN1MaEpp+VQRwIa8tow9cU0I9XhlEY0UA1UWKYrEhzLxqDbwQbU4R + 5UPkb2XMjpqInX6yDRUsQwnHfDHKVoh9Nsp+UcAyl7Ms9dEcs7Zuc2E6GguSUU+0lGSivdKJbhHA9UF0 + 1gTQJgKYaK708tkeNJRR95W6UFfsRDX93yr65ZVs03K1pwhIjkcUuai0kD5SIZ+laakLJceU3aDKSHlX + lGOAaZT5L+C1pZTH5nwPBlbEMLKxGONaSjGqPp8+twutkRw00keuj+ShmvVVpA8oWcce1rXkzaOPbujD + xemjF9d4UUI/VQRwdWMQFfUBlFR5kF/soM9EHSDdxro1BLBe9FMXBbyKppWuDFBG/ZQ3J/0XG22unfYy + B3a92M5N6A5BJK8gXaapMZ12feCSZfYtmPN5FtIMRDBoalF9BGQi79UH6R+L8DUzhdA3UKpjieXLeJ46 + R8RwJOykL+Zi/rTEhoc2v48A1od+ipTXWJAyZ8Zc7I+aDUjtURrkWD+WgcbCHHSW5KKL/lV3aQaGVmRj + VHUuxtG3H0N/a0hhCoZy/DqqJBUT6Nsd3ObAkb1eTBnqx+SBNhzSnYpDe1Jw5MAUHD0oBVMHp+IM2vkL + x7kwe5wXC+g3LNrLi/n0CS7oTsOZ9LFObUrCmZ1JOK83FReNyMbC/XxYeFAIcw6K4ML9gjh7nyBOHBvE + YYM8mNDmxPB62vRaN/18yp/5+CBkZL6uPIjKEpF6DuoJ6kDKk/p4YcTN42EDRZlqindLxym6b1dkH7GL + AKbcaT9B6ooopo5ge2nqYf3H2vew/RKRwInrElMr67ym3KXe0ziTz5JO0YclQoB2bhd4XFGZIn8N8dsP + FgEc99gRd9MfzOPzROhlUu8SJjKXsqkoXK3NG+CzhZCIXyJq5/+d1BtuBxRlpkhWRYspClDT/yqvIoDt + tEd5tE0WrA+OHNx28JyLNsmVxTLl8vm8b2JNUep6QfaEMMsIUGbdIsRkayiXQdpAlc/YEqNfqZ999HX7 + ZpiwSOHdBDD7YlmUfn0hx5Vx+vkhHlcEsAhg+sd92E0A6152+FlGRbFqnV4HbbmT9tTN/qaoVp0L8Jqw + z02Z8LIfeA0RbKJ/rQjgcIDH/eZ82C/5SED7Fqz9EO+TmB6Zz2W9WtMlC17Wscdlow9Dv8lp4xgg18Bu + z9sFWx59HKaK/g0FfAZ+l4t1lmuIVUXPOnLy4MqzGzhz6T/wPyJaFWmriNvE9Mt6N039lMb2YvvYc/4T + Dvo0DrUX68JE+TpF/osAVttnJOqJMuXivd25ItdyDXxOlsvJMnpFAnuZeqlf3HDZHXDabP2I3wQM6dsH + betYLv0ZIU9RvTlaS1jEb4L8tbEciiBWWRMEcI4hgF025k15VH9g3xASEaEiOpVqX1N587x5d6C+Jb2W + a/q0iGBD/updv1JC/T9CfRnk/+TPKKrYIT2rcRntXaZkXYQ5+5XW29X0yNbUzVbUrdXP1ecF/V8wU1Wr + 39NvNESkIXT7yEvq+v6Q7nfxGsEiMnWtZiQN+CjTitIltO312ChHrI++610ifvsgXb+LAPbmJepGgW2m + zvT+ROtoeynXRDiRxkIeyqfIX0X/8h60NZINyYjKnp1JWUpXNK8+UqSfnPp7WGOGXXxN33Eji4oApyzl + 5cm2sZ0J4/f67PTvnAga8pf9KqRod/YR9lk75VH+sD56EhKyqshm8TCC6kz57I/d8qmPLwQv+5o+xvAx + 9blEnluR69QX6l/s99IBWtPbST/bzTJ72X4JnZz4EEcfCGjaemsWnTDrMEqZi/K/MbaF1uctZN8X4ry/ + UMByiPyNsU6jLI/IYEX2NpYVmkhfi/xtrSpFU0URakvjqCmNobo4ikqOs8w6vv0J4L7ZBzQNfQIigWkn + qLt0XHpbeqokP4TSeMRAH6/og5Ug9aHKHNZ9mEfpJ+1LL3n1oYqmkvbQ/pWWYMK4sTj3jDOQ1NsyEINb + uzCiuQWjm2qwd0sxDmrPx1FdUUxVBGO3C6d22nB6Zy7O7rLjgh7BhrM7snBmaxbOaMnC6cSJjek4rj4V + U+rScHR9Bo5uyMbhTdk4pCkTBzal4+DmVExu5TVdGTh1UC7OG+7AXA6sN3PAfW2vDbcMceCOoTbc2ZuG + P/cm4+9DU/D46HS8fqAH700K4pPJUXxyTAHePa4QL0wJ4x9TfLj9ODeuPDZBAG88LBUbDkzCxolJ2DSB + 6agkbB6UhBsGJ+GvI5Pw6MQsvHKUF++cHMan58Xx9ewSfLWwDB8uLMS/5kTx+Pk+/PV0F246zoUtB+dg + +d5ZWLy3HbNH23H+kFycNSAPp7Tl4eQWO05qcuL4RidTN/fdPO4iHKwjD87q9uP0Dj9OanbiuFobplTn + ENkJ1OTg+Dpe1x7E9MEFuHhEggBePDyK9WOiuHRUCNeP9OFO4h9jfXhynB0v7ZOBdw/JxudHu/Hl8QF8 + eVoMX5xViK+nVeGLaQ3419RSPDs5hicP9uHR/V149IA8/PNwJ48H8C6v/eSsAnx5TjG+PqsI351ZjB1n + lgFnlQPnVANnVgGncHtqAX47OozvD/Pi64Od+OYQF348MogdpwaBWU5gFXEpt6/Jx47r4sANBcDV+cCW + ELDQy3s58fVUJ1471Im7xtiwtJVyUJwgMQb7RAArWsqBwSUhtOSLALbTOGdQ4aYijcbrv0UA59EB83MA + UMpBVJtL90zGYbEknFaSgpnVaVhUm4yVTWz77lxsoTxtG+PFZRMjuOKgQlxxSBm27leJVROqMH1YCSY3 + B/oIYBoKOtAedvAEAUzlLoNAx6Q/AZz40kcDcjrxMrJmKi4OANKo/GmwCqjw2zgwGM88Ta32YEZvEeb0 + xjGrO4Dp7S6cRfk4rNCBkbx/D8vQReeyk+XR9hAODsZyAHhgIAknVyZh3oAkXLpfGu491YanLszBS3PS + 8ObFSfh4ukjfZHx5fgq+Oj8VX1+Qhm8uysA3F2fg23kZ+G5JOr5bnY5v12fi2805+P5yB767hrjBjp9v + dWLHXR7gz2yje3zAXQH8eqsf313rw9eXefHRWjuen5mCR89KwiNnJOGJaal4Y4UPn28vx693tgL3dhKt + +PXuBAH89ZWl+HBdDO8vi+G9uTG8O6MA719YjjfPKMKzRwXwtwnpuGdcMh7cPwfPHOnHq8cV4K0TqvDK + cdV49KhS3H14AS6VMz8qB6eyjx/VkYRJTck4pCEJx9Lpn7F3GjadkIubLnLjwdURPL+9AG/fUYZvH6nF + zueqsOOfxcAzRdjxQAQ/3eZnPm34eGsmPrskh3mz4cfrKae3srx3srx/suO363Px85U5+OGybHy1ORNf + bEjH15uz8P2lNvx6lZeyTJm+IcY0gh+vCeC7q/z45ooo3uOz/zkjhNunhrCI/XBKUx7GaC0cynIr5bDX + m4S9FR1KGT+hKhnnUbet2suF204uxrML6vHRpjb8dFU7dlzVhJ83l+GnNQX4dTX7zAr2nSUR7JwfxC9z + PPh+ph0/zHbiR/ahX5aHsXNNFNhQCGzkdRvZ14ivl/nx3mwPXjrPgYdOysD9J6XjoTMz8eT0DDxzURrT + BAH87MWpeG5BOt7e5MK3t5Vgx4N12PF4A/ByO/BGF/BWN/BuL/DBEOD9QcC/e/Dbq0Pw8T9G4YGt3Vh2 + ajGOHMmBc0GKmSpXEXZ6oeRwcpBDJyZmTzcE8ABXCvbypeDQSBpOL8nA7IY0rO1Jw43jM/DY8U58vJht + s535v4d4tAg7n4zj16fi+I3AEyzbI6yHB6k77qXuuDOIX29xU15z8fElaXhrcxI+ZHt9c0cYOx6ifnpO + 5PVQ7HxvDHZ+uh/w9WHAj8cBP5+Inb+cjJ2/noIdP58E/HIi8P3x2Pnl0fjpvUPw1St74bW/tOKe1fnY + eIITF4xIpZ5WZC9tUxnlrjwZR5Qm4TC23+FMj65iH6QOObUtC8fTVh3J/ngQz+3Lwe0BPH9odRKOrGNb + GwI4B2e35uKcFtrDxlycVpeBkypTcFxZEqaUUI71YYAI4LpMnEIbeFK9IsczcUxVKo7U9M8igIsSBLCg + PIj8PbYqG8fQPhxWkmk+chkfSsJY87EBt/NTMI7tsldxGvYqysTIWDp6KIvShy1siyYO4GvZLuV5SSik + PhIBnM/tCBE15O8eBHDfOUUODy7Jw34NDkzt9eE8Dspn7J2J+fsnYduxqbhnuhuvavrnW+rwy7212PH3 + UuxU27ENf7s/is/Ydv+6NBePr0zF7ZTBS05OwvLJSbj4QPaJiek4aWwmDuhOxmDWZ300CeW0B3F7CvPC + gSnzLlLHED1MDQHsTaEDn24iOjRFZqyPADYIpiI/kEonKRWFPkKpQQplNdlMJScyWERwuYkIzkJNLNuk + FvlbJPKYcl3gy6BDR2dPRGTfoHRPAriRz1Sk9ZCCZOzXaMPRvSFMHRI1050d1GTHvmyrvSpFAutL+BQT + nW2mg2baa6ZMy8PwShcGFjvQEs1FXSALdeFsNMbtaCp0oUYvwLgfZ1nCbB+Rv4YAZnsJelHlYZt53akG + iamOuM1j+nJfEbL5kVzEI7yHpuXV9Iksu4jfiCF/Uzkg0LVJ/QhgXkdbnFhTj3XMZ+sFkIh3Icj60dTR + msa4qjgL9ZXZaK3NQSf1X2+nA4OIAe056GAfaapORoOifQlF/hr0EcDVfVNAN9baTSRcRVEuimOKaNFA + TQP9xJfZBrSx/eEivHoBTZvpd2s/8fJFBLDWntLLywjrSQRwKcspwr++MI9QmsO6zUKrolTK89BdmYcB + tU701nswqNGFXvpsnTUsU2UqGtkPFdlby77YxH7ZTl+iszYLzcy7IYDZv0QAl7AflrJdS8OUMcqDjiXI + 4TTzEUJROBXF1IWFlNfElNrJ5sWups53M59utaMIYJbbEMDOVEOo/lcEsKL6NO2oiAOtAezlwNXjo49C + mRV+RwD3I4X/gwAO8Dzr20M59oj4tbCLAM7YRQD7RCYShljkvl7MK48imX5HAFN+NIVnXAQw21TrAJew + rktKs3cRwFYEcChE2WNdhVl/8bjWAs5CJeWpnrLU2u5AZ48XnfSTysqzeJ6yGKZeCiabaLD+kG4wUxtz + W5BMR0NpKM7PQVlBDsqLslGujxUq2HZsv5baFLRrSu+OZAwdRH05Kgv7jMvCAfvYsP8E6roJdkwc78R+ + 413cdmP8GCeGDs5AZ2cKGlqpp+iH1PekoI42rZ5o6CY60lArsreP+K1qSsAigMvqKRu0IYXsA9GSZIQL + aTuj9BGDHFyznXKoW9LZxmlZiUhEQ0iJWKL/aJHAFgHs44Az4E+QvmYdYPOCN491mU3kJMh6tVkfLAJY + xPkuAlig/FpksKKr89n/Ctk/igs0PXGmQWmx1gTOQX21HQ31DjQRLRy3NDU6UMuxS3l5LsLUu5JhyUEe + +2KI8m4RwL3Dgxg2JojBo1y7iN+BI+wGQ0a7MGysB8NpUwxBPN5PeDBsL7chYweO4XWj2UdH5KBbxC6h + tHtENrpGZqNtWAZahqSheTB1DdE8JAOtwzLRIdJYkb9mWucEUSz00KcUBoxMoHcUddbvYOdxm4H+Z0Hk + 70COOwcQIoG1/rAwYDCvJwZyXCr0DnVj8BA3hg5hGYb4DEYO1zTmBRg5Mp/Ho+jp8aOr3Ytujv+6OwLo + avOho9WL9mYv2pq8aBEhXOdEY7WDYFrjop50GjK4VNOqR9KpJzPMxw3F1GslcQcKaS8KaCtCtBU+2kYX + bYGT/VtkrNEjTPPUPtQ1gs2ZArtTa9AKaYawzKP8ZedI9qhnRAT3wYrEFTmcm0v9687bRQCXFEdQVVmA + pqZy1FQXmDUlndRdhvz9A0ifmfVt+3SZYJHMSSn/SQCnCdy2rlWfENlqd2azjHnmxZHTlUv/Uy+SsviM + TD5DL5cyoHWDLWLFIl6FBAHMslJ/Cv3JX6E/AZwYbybyZCGVxzOz9D+RwGnso4k87UkAmyhePSsvQQJr + 20T7Ef8VASxC2+3No/7PNuRQNse2CQKY988S+ZuYMtGRkwV7buJFqImcyWAZ01g+1pUhfPsgYuI/CGAP + fQAf9XMg10QvCP0JYDfrRjbUk0190Qe9pNfaaP1JYAOWQXZaUb+GHBHx1IddBLBAWTSgD6M1fR20dYIi + gXeRwNJVQdkpbvOYm+fclGNFDOs/igLWWvSaGloRwP0Rz89DQYyIEhGWjfgPAph+zx8RwPp4wpoyXzMn + CNZ00Pm8XzyWmA62gLKtF8R6AWjK3QeVW8SN3gVY9S2SRNuGIOK2mZWE9RdgXUUUgUSf0ooAFgEcZF34 + WTcieA0BTJi1fQUeEzEsJAhgfehI+0kdLwJYa9PFWcb8PogALtLUvv9BACcbv0gzyERYr0Uh+rwxG2qK + PagvC6Cu1IeKuJPHqc85hhPZGqIsFNGuVEWcqBYBHLWjmvVQFbSj1MX8Z9KPYZ8Ns4/EeH2RIxXVrPcG + 6qnGwgw0FqSigWgqzkRLuc0sv9FeTR1X6UFTuQtNFS5D/NaWOpkP5UXkrw1VREVBHsqp00pFxNOvCFB3 + +Fif+lC1kPayyEsdGMxFWdhm0hjHoRqzBHhNiNDYppi6r8xFGx12oKc0hOH1BRjTWISRdTH0FLnRyrzW + 0z+qZvtXsK4KWFdB6kqLAPbRJgapa/PLWS/Md1G1y0QBVzUEUNkQQmm1D4XlbgQob3l8lkUA51CHKEpX + L69jEZ8hfxUBLAJYH28pqslFnaWX2Tn9dI+meTZTy+tlu166U5/pYxDNMmCRw39EAIv8NWvF9ieA3exL + lDGfP9cQvZry2cU60sc5dsqqm2N2rQksHyISsVF3O1FQ4KQtcXDMkMexgUhIyoHqhDJnEcBxHi9inzEf + Vhbkopljw84yGzro07UVcexfmoEh9LNGcuwzqjIXQ4rTMSjOMVJhCoaXcIxak4GDOEaYPMiDQwfacBD9 + p0PoSx0+IAWTB3Lc3ZOMExXpO9KBWWP9mD8uiAXjAphL3+H8rnScTt/q5PoknN6chHM6U3F+bya0VODs + /QKYtX8U0/YJ4tS9ApgyIoCDul1sbxsG0cfvrrCjk/LWWuZGI2Vd8l5d5kN5Mds1P0EAm5f79KPjYRft + LW0bURT1GBJSZKSZ3YB67w8JYPZxE9XLdnRKhxoCiPXvULQpZcGMWRLEkIjUBAFMO01oel1FCypyUM/Q + Gp0B9q9dBDDlaDdEhiZI4P+KANY0ozE3fUMRebRTbubJgM80a7cTWovXz3wIwVyWm+Mskb/6X77PZaYR + FYmg6Y81VWp/AjiP9jFXxG8f9NGRWTuWsNNeOWmvnFl8rghDgf8zdkWQLSFcrCsXU32wK/ukIJ4EAc46 + ov6RXVEZowE7ny+SkWMa1pFgpq4NOej7+FBVwnYqidHHjxjySmuYauplTU+8G6xDA/YFli9BANOGMo8K + 3NE6vSKCXSKsFeFqSCK7IUaEkMdBGXBSnyamhQ4p0pUQeWIg4lPXmWOEX0RoYl/HLQJY9xQSJLCD/rjW + 9M2jD2On32Sjj5Zn0J8AtttF7LH+PW5DsHrdTo4ZbayvbDM1coIAVjQsdcp/RQCnJgKpzBIR9GlyRABn + J4i0/hCp5qAcmDogRAIL2nbnsf3ZlqonO+8pn0NTMQuaslmEtMtao9ihpUDs9Bdzqd+yka180E+xoAhg + C/JnlE9FhgrZZppn6jxFihpkJKaO1vrG2lckMO/p0DMVRWoT0ce8qk942Nb0n34PfTTBPkOZ0XscyYHW + fg3znCGB6f9onW9Bs3xoto8oZUvkcYIAZr1Iz1Je+xPAipR2sD6cqhe9kxAfQFjBMIqidlNHSw84KPcG + 7HMigHdFqfYhQbyLKFb9E9L7hNbFFRTNKmi6Z0UA+33MX8CJcEDLClCOqBfc7P/W9Q72IwtaisDKn5/1 + oDpR6tEsAqwz7UfYZxQxr6jfiCJx9YESdYnyYqNc2ORz98mIiG/NQiOfVB8mJghgjl3/Jwjg7BwhA7mU + tVyWUx+VuhTFy7z4AuwbfqexkZryWuWRrdPHlvLrtb1bZinDrMuE7CbqUOSvg/1Y/cNloy9toI8Fctmv + eU/2HTf7lVIv5VWR+H5FsbvYT9m3PHbKVQ7rn/m0s58kPhBJ6OdEZDx1k3Q1ZcInP4n591Ov+9lPgtQr + moI5zD4shNh3hTCPa/1fC4XUIVojWGsAN1cUGxJYawHXFsfM9NGlsUAf/AYifoVCTQHdRwBrnXHpsf6Q + bjMfvfD+0ZCHfrDfzFZQEA3QH/ZSTzngo6wkyG+WmXrIR70jklzriqs+tba2x+FAaVEBxo0eiTNPPQVJ + va29GNzajeHNrRjVXIvxLaU4oL0AR3THcOzAME7o8eDkLgdO7bLhTKbn9DhxVrcdp7Rmmxfixzdm4gRi + alMWpjSK+M3EkQ3ZOKIhB5OY7s9z+zakYb+GFBzclIopXVk4hQNsEcBzhtuxqTcH1/Tm4pYhebhzeC7u + 5qD/3iEpeHhkGv45LhNvHOjE+5P8+GxyGJ8eU4APjivAS8dG8PBxftxhCOA8bD0mExsPTcamA5OweWIS + tkxgOioJW0UAD03CX8ck4YmD8vDG8UF8eFYcX1xUjO8XVuDbpRX4eEkRXp8XxSPnuXHXSXm45ohsrN83 + A4tGp2HeqCxcODgL53Zl4rS2HJzSlEsHhWWvd+GkOjdOafDitEYvHRYP4cKZbW6cxUH/adw/sdaB46vz + cFxlzi5MrcrDiXUunNUexkWDizBnRDHmD49j6fAQNo4K4fJRAdw00oN7Rrrx0Fg3nhyXjZcmpOLtg9Lx + yZE2fHacF5+eFMIHJ4fxwSkFeOfkUjw3OYYH93bh3jE5uH98Nh7eLxdPTbLh+SOdePVYL94+MYj3Twrj + w+ND+GxqCN8fH8VvpxQBZ1YCp1cAJxQDR/HYYQH8cKAL3+7vwPcHOPHb5CBwsh87L8rFzhXZ2LnNg51X + B7HjhghwYxS4Jgxs9QML3dh5nh1fn+DEa4eJAM7FstZkHLcnAcwByCARwPEgCiigmv4hIy0NqSKAU/9r + Alhz62tqkwI6ZnV0/AdxsDSR9z02PxnnlCZjZkUy5tUkY1FTBlZ0ZmPNUBc2j49g6wHFuPSgKmw+oAbL + J1Rj2rASHNYcxOAihyGAI3QI9aVk4ksaKlEHFYGNikBK1Sh4EcAa/PE8FUUu85aVRCNL5NLgumm4YlSS + dXSaejnw2p+D1JMbYzirJYozGnw4udqGKWW5mMjB2BAqlE4amXaWo53Xa7uXinc4/zfRm4QTK5Iwnw7y + 9oOy8Y+zvXhhthtvLMzBO/PT8PmsdHx1YSq+mZ6Gby9Mx3cXZeC7GZmGAP5mbga+XZiOb5el4+tVPLZe + 0xs78cNVHnx/vRM/3ezEjtudwJ19uN2DX29244drPfj2Mjc+WWvHy7NS8dQ5SXjyrCT88/x0vLUihK+u + rMKvt7cBf+4wEcC/3l2LX26pxHdXFuGTdWF8tIwyOI9yNZPpRfl497wYXjnBjUcOScXDh6TgmaNy8OqJ + Xrx1Wgzvn16JN0+txfMn1+DhE6tw41EFWDrBjrMGJ+GYjiS2SToOqEnFwbVJOH5AEmbuk4o1UzJx9TQH + 7l7sxbPbC/DJX6vx8yPV+O0hyirx2z1RfHudDx9uzsG769Lw8ZYs5jkXP9/oYhm9wN0e4JY8/HptJn66 + XJHRqfh8Qwo+XZuMLzemsY6y8dN2O3Zcw2slyzfmY8dNUfx8fRQ/XF2ID9bm46kLgrj2cA/O7c7BfsUZ + GOBNRrOdMkg57KQMjgkl4cAYy1CShDPqk7F0ZC5uOjYfT8+tw4cbWvHj9jb8ekUjfthQgh9WxvHzijh2 + LI1ix8Iwfpvjx48z2Nem5+FbkcDzPPhxSRC/rQxjJ5+9c33UYAfx9VI/3p/twavnOfH4KZl4+NRMPHle + Lp6dkYvnZmbi6enJeOZCRQCn4fkFGXh7kxvf31YGPNiAnSKAX2wG/sW2fKMdeFOEapfZ/u2VZnz/XDfe + /ssQ3LO2DXOPjeGggbloYr8q9ms6WJEWIoDphNFhEAFc7UxDjzsFYwPJmBRNxWnl6biI7baIA7fLqGv/ + dkg63p7lxffbmP87C4CH2V5PivyNYcdT+cATPPZoHHggBvwlhJ23+fDjtXn46opMfLw1Be9uTsLHIoBv + C2Dng9RNz7Zix+s9+OWdofjt47HY+cX+2Pn9ZOz88Rj8+tOx+O2X4/Drr1Oxc8dx2PnLFOC7o/DTp4fg + m7fG442H2nHv1kJsOdOL6XvRPrUk4ajaZBxenoTJ7G+HliXhEJGxTI9mGU5qycbJHXac2JaLo+tSMak8 + GfsVsY15zWGVfdfQlp3ZnI1zm3ISEAFcS/tHHTRFRDKvlzwcW5lK+8D70V6c1Ejdz+2jq9IxuSzZRP+K + AJ4kErgwsX1keSaOpa04pjYPk8tzcFBhGvaOJhMpmFiYjv1LszCxLAv7cbC7X6Ud4zkwHxpJR48/Fe2B + NDT70lDnTEaFXowQigIusCebaNuYIxFxG3GmcACZRqQiJILYnoLGcA5G1zgxqcOFU0b4cdFEH+YekIWl + k5JxxUnpuI9y98bWErZHDXbcX832LAUeUTsSD0XxzR0evHW5Hc+szMCfZybjylNoe49LxcojMzD3sGyc + t38ujhyazoF6qoksrwgkpneLciCsl18iKkT8Clpb0ifyzCviMg0hXisSU2umCfkigIl4IBUFPC7EKaf5 + /F/UzfK49dFCSoIINhHBmh46w6SazryIerZQEa68d4E3AzGvvvBLEMDmq2zqfxHA8bxklLHOaj2paAkk + YWhRMg5szcWxw4KYOjyMyd0eHNLqoF+Th71rczCuKgOjStMxtCAZA6NJ6IokoacgFYNKszGk3GkI4NZo + HhqC2agL56I+ZkNd3IYK1n1JIJMD+hQT0ZpYl422jqmbbag1kZzcdjEvgpttqalBvdzWl/uGAFY0i0g5 + 2teIXnqy3EGWVUS6X/XJehEJFPSlGoI4P5LDNJvXsex6Ocp67U8AiyyOsd6LImkmsrKWsthSk4vOJjt6 + O9wY1OlCT1seOuj3NVWnoo79qJr9p8oC+4AI4MqyFFRTN1SXJaIzNV2v7hty06ayjGZpBdpUBx1SDUD6 + w0wBxPMuyqfbrpcoiZcxhgCm7g2wTjSFeD7lJ848l7Ac5eF0VLCtNc13dSQVDbEMNBdloZ1t0F1tR4+i + gWtt6K7JQ1tlJhrpN9TEk1DB9qpkWs8+2VKRhvbqLDSWKaKX/Yd+ixUFXMhtIW6QWCtZRK8Qpy4skGyy + 3jWNdtDFOle7Mb+KEHIxryKARf462Qd3Tf/McxZhYk2bakXEiawR0eD2KBqO/oebg1Fr2mcfB5Ze+ieU + YRHAPvoyFgGcx7oVtC1y10/fQ5G+HvaJPfE7ArgPIoCV6sW8pnq1CGCRTR7KSUhyFs0yawDHC7JRUCTC + NxslxVkoFYlFFBdTzgwBzLZi/QVZf1HaikLKgaaBbmi0o4X9p6XNiaZmJ4pLMnmeMsh+rYhVrQfZHyII + FIGqaeKtqeI1TXxBJMsQZeWFOagQAVyVjWbq2dZ6+lotqejtSsWIIZkYPzoH+4zLwf572w35u+9eNuw9 + luk4JyaMdWFYbxa621PQ3JyEWtqxGtqJmo5kVHemoro9FTVEXVsa6ltTUc/71hC1rWkGNS0pqGpMNmsC + i/zNp/yHqNMDLL83RNmlrklM/0z/ln5fCts2QXols80tMjgBEwWsDyNcbDMvB33+HPh91E36Wp16yqv2 + NuAglVB7CG7KoGDIfaaGMJdepawq9fN4kDKQH8tGYSHbp8AigbNQrOhp9hFNWdzAcUljvchfJ+rrtLaz + yH29RKZfLIKRcqApiP1aHoK2qLndjZ4hPvQO86JHUz5z/Nal9XWHJtAjUlXk6ggHeke40DtKsGPgKAd6 + RrIvaornEdQtHPN1Ds1Bx9BsA0X8thCNg1jvvfSvB7LeiYbeVDT1ihDOQMvgTLP+r9YBbhuSYdA+NNOg + g20uaErp34P3H5JF5KCd/7PQOShnF7R2cVcv89WHzoEsi7YH2gjqkQE29PawDD0Og0EDFRGsqcyjGDE8 + ht7eEAZ0+QkfEaBc+dAlArjVgw5FBTe70droQgvHjy313OY4oYVjyIZqF2rKHagozkVVcR6qSxyoKnFT + p/pQUeZFGbfjBQ72vVxDBAfZrxMfa6SzD3NQTz2uKXcFjz/TfDSyG3lwcawjElgfG/wnIcoxDbcVgaZp + ihPTmgZRVhpFbU0RGhpKUFWVzz7thKaFt1MvJ6KALVgEcHJCn/GeFqlrEcAW+Zt4cZSAFYVrXas8iGwV + CSLCVy+N5HsKVqScRZJY06UKexLA/c8ZMpj4fXktAjiRDytfVt7UN9M57lT/zMhU39S9aavoI4jMNQSw + jeNB9tfE1NSKfla+FeXH/s4+LPQngBMkcG6CBDbRgZnmJZtFACvy13ppqjUFBU2VqIgYvYxVFLDIR4vw + tUhfpbmE7KOmDBfJkR/Mg9ZbtGARwIrqNS/o+T/BxXY30LaOUTZ2IYdgmQzs1DMsj0X+WjNlWdDHCOaD + BOpmB/WEPkDSRwk22mcHfTJFA7uN3VKdpFCn8zjPW9DU5vqvlrsI6gM2+jORfojSZxESvos+dJO/w3NB + +TwJAtiQvXsQwCJ/tb6pls/wUU9qunwhSPu2e11gRRQrIjKPfpAICubTKrcpu9IU+iqUK9Z9FuXYRMT1 + 1buIEU2PKhJY050qciTMtg576GOxzs3ao6wbzQRizQhion4JbSdAe0HovKaFttb8taZ9jrGPR/uQH1Rk + cB6PZ/PeLA/rTwSwj33PR59CPqSW9Ciib1gWc6C60IPqIo8hf4vDeZQF5knkPts7yPwWB2yojrkIJ2qi + TtRyuybiQrkvF1H2RRHAQZYvQvmKs69X8Pl18Rw0FtJPEglMm64lMZpKOG4sow0ptaGmKJfPzOGzc1BV + mI0K2poK2pyKglyU878JaDsPJRGOK1lmkdeCCOACyor8c0Unl1J+hUJu59OHiqh8Gt9QB5U4U1HGOqji + udY4bVGZHwNLA2YK6M58B5rpb9fSV6rkvUp4ncZBqp9dBDDtczCfssQ8F1S4EK90oLCKZa/zobIuiPLa + AMqqA8gvdFK+9cEH25951BSZInad1EmhoBuxqMcgGLBThumvsX/rxbbW8tX07gl9krD3QnYW9QnP5eVQ + XxCWjhI5LJ2ViITKoE6lLiH6E8CCeVelvkfZ8qhfs3+7mUova2aIXPZfpwhNHg8EKNeUcS0jEY0o8j0P + UX1IxvrwsD40pvCz/rWGtkUAF7NPVcVy0VBkQyvbtLPCgTa2cXM8BW2FKeguTsMg2v/BHBsMKs7AwEL6 + WkVpGMhx0hD61eObsnFgtx0HDcjDAT0ZOKg7DQd3p+CQ7iQc3pmEKV1pOH1wHqaP9GLeuDDmjw1jznAv + zu/Mwun1HGNrea26JJxFf+uc7gycSx9i2jg3zt87hDPHcww22o9DB7uxd5sdQ6uz0akPEOjXNBVyXFVg + Q1WBnbLlQAnbTeRvfsTG8Q/riX1bkYIxtpPWlhXiIaeJTPVIN7Kva1zSn/jtDzvbzoC6wMG+oSmGTcQk + 281ac1apzlnTQFtTQUt/WPrEfFjioG9OP8+A9u2PoGmfE8hKgDIVceUi4s4zqY920EM5skhXC2b6ZULT + MfsIzVQohB055n8xn4vjFS/HeFpT12dIIYsATtiWhK6zIALYzDwhvZfGMvG8ooQdtFuCU32B5ROspXq0 + JIGgKaTNf5mq/Ga9Y+kfynBQ0XXUPxFfIgJbkcKCPrqJ+tnno2769kGU6n1xRKQs25E+wW7SMvEBsUfE + uyHfs1mOHCLXbIv4VVksElgEp0jgxBTDOZR/kUSEnT6S/icCjjDHXP3Bfi1yV4QK4fcoTexrmmddb6aB + 5n0EbeuYy5kHJ/dtAvOTzTwLuXm7kce8aP1fl0PTReeZbbv8gEz6OIYspR7Iog8gUjRH/oAiarN3kb8i + VbUsYUYKdQt1dQbrOiudeiCDPgX1jJDXB5F7IvwSU2MnZNeCS/4G60f1ZBMZK0Kv7z5mbV6R0bnZLEeO + IX6zmZ/MzEykpaVRt6XST0rbBZG8FjLpu2TqXb4hEYk0TVdNv4d5ToDHUpT/xLbOiRQ2z1PEsN4P6D2B + CDm3plVWXyYoN2ERmwLlV9N6xwJOwkUbSV0e0qwebjO7R3G+GyVxj5nyvbSAvm2+lz6EEyE/+xD1ptaa + FYGq6YfNxz2sI7shHBOEraaA1vOV6uMaTR+sPm5B5PHvwbruV+/6oEIw9S+9r37GZ+yKeOWzBCdlWJHB + bvZRfVxkPiTitkO+r/xeXivYNE7sg9aItzE/ypchfVlHXqZawtJEK4s4py7xapvwECLUbdQHmipc011n + E5asCLsJYNkvtg3bJJ1tZcHylXct1dmHLMkjoQ8oMwS2W6axbywv61dLH2hGHxHC5sMnnpMd3AXWZS7R + v840LbWwu/5YB0YuMllniShzuyLKCfnL+lDB0QeXXf2S/VQR7C434WLZ2ceMT8176CMHyquNebWIe7Vt + Qp/RZ5W+ZruYqe7ZVwP2XIMg+4AQop4xYP8WgkSY+4oItgjgpvIi1JfG6QtFUK5p5ukvxCmjBZRRoZBy + Gtf00US+1hH2JqJ/fdQd+iAgAX0gw+fyuEjekCKE+YxIwEM/2Es/1kN/1sW2ZvlpL1z6aIL5sCB9Z2YT + Yt3lsj9JxxTEohg5bAhOOfF4iwDuwfCWNoxsqcNerWXYr7MIhw+IY8qgKE4Y6MeJPS6cTJzW4yTcOKXT + geOas3FkfTom16bhiNp0HNOYjaObc3BUUy4mN9lwaEMeDqzPwr4NmRhfl44JtSmYWJ+MKQNyccpQB84Z + 6cTsEXZs5MD7auLm4dm4Y1Q27h6RjvtGpuKRcZn45z45eP1gJ947LIBPjozgk2ML8d7xhXjx+CgeOiGI + O6Z6cOVxNmw9JgsbD03Bxn4E8JaRSdgmAnhEEv4yPtVMjfzOafn49IISfHVxOX5YUoXvVlbj05VleGNB + Ph4+14lbp2bh0gOTsWJsMmYPTsJFg1JxHh2Ys9oycRrLdWqDDafWuggvTq3x4fS6AM6oD+DMRj/hxdnN + PpzVzHN1LpxU7cBJVQ6cWGnDCRUJnFTp5DkvprXHMGtIKeYNL8PC4QUJAnh0CJfTublplBv3jHbgoXEO + PME6eH6vZLxxQCren2zDR8d58MHxfrx5rBevHePHi0eF8cj+Htw6OB3X08m6c3gKHpiYhUcPysZjB2fj + mUNz8NKRdrx2tAuvH+HA24c78PERHnx7bAQ7TioGTirBzmPi+PlgL37Yz4mvJ+Tiy/E5+HpvG3452Icd + rN9fLsjEz0vT8csWB369yodfbwwDN0WB65huCwCLeWyaC5+f6MQrhztx55gcLGtLxnGlSRgTTMJgkcCR + TAwpcGNwaRithWEU+dw0ODQi6ekJAphK5o8IYH2BIiXlpAMRpUNRSeesk07uGDrxh/LeJxck4ZziJFxQ + loSZNWmY05SBhT12rBoTwYaJxdh8YA02HNSAJfvW4tzhpZjUEqKzmogAjtIZ1FdADipLGzu75WjLEZIj + Z6bGouLy0mlwUylqoJedlEAO4UpJRZgKsZLHW5m3ERz4HVrsw5QKP44uceDweBYODKdhtCcVA2gYdI0I + 4LY+9PDYUJZlXx8d3uokykA6bjjCiSenR/GvRWG8v9yDj5fY8OW8PHwzKwffzuyPbB7LwtdzMvH1vEx8 + tTgTXy7PwVdrbPhmswc/bPfj++u8+OkmL379kxO/3WbHDoHbv97E89d48e3lPny6zol/zcnCs9NS8cy5 + 6Xj+wly8tzof31xdj19v78COu9qAv7Tit7vr8MufyvH9VQX4dH0AHy/344P5Prw3y4/3ZwTwwUUh/OtM + B546JgX/PC4Vr5yWh7fP9uD982L48LwavH1OE147pxnPnteCe06uxqZDQrhwVAamdqdickseDqrLw76V + qdQXCVL4vHHJWDI5HZeekYN7VwTxr+tK8cWfq/DDX8vwG/HDLfn4/HI/3lqVjdeXp+KDDSz/9jz8cosH + uJsyeY8XO2/JxU/XZOC7S9PwhYjFtUn4YFUSy5yMrzdn4PvLc/HzVW78cm0YO26IA7fEsePGIvxyfQU+ + XFeER8/zY9t+eTi+NhUjAyloYVvVUf6q2Y5tHAyPCCRjv2gyjqT8ncYBy+LhmbjhmAievLgG761twXeX + teGnyxrxzdpifLUshu+WxvDjogh+mhfEj7O8+Ga6E59Py8HnF+axHd34dlEAPy0Pm6mgf1mTwE9rwvhq + aQDvz/bhtWkePHWaDY+fYcc/p7vxwmwXnp+dh2empxEpeG5WBl6Yn423N3rx/W2VwIPN2PlYA/BcE/BK + C/BaK/Aq8XILfn2hET8+V4cvH2vF8zd24tq5NTj7ADdGN6ahLsIBNsurdQRdXjo/bhoVGpYInfYqdyoG + BtKxV0xrcWfizNosXFSfgnkctG3i4O6OfZLw8jl5+GpjhDJH/fKPUhP1+9vTMex4UhHAIoAJQwCz3m/z + 4qvLM/HJ1lR8uCUZ721OwcdXUt5vDWHnA1UQAfzzq5344a1e/PThCPz62d747dtD8Ov3k/HTD0fix5+O + wk+/HoPfdk7Bjh3HYOfPR+GXrw/FDx9OxDtP9+DBq8tw1cUxzD7YhuO6k3F4QzIOq06mzUrGoUwnVSWm + dz62JR2ndLtw+iA/Tu/14YQOO45uzMSkyhQcJAK4gnLJ6zSl89mNeZhmYMO5DXacXpOFqRUpOIrXHVGY + hKMoD1Mq03BiPe1cC21AM59NW3hUdQYOK0vBJJ6fVMxnlyTjEBHB3J5ckYVjau2YUu/AkdU2TCrNxn4F + aUQ6DqHdOIw2Z1KtmzbVj0Mag9ivxouxHKAPimWjK5SBVg7g61xJqLInoZy6scyVjBJFAri0frqI32S2 + X6qBSE59SV9E3dfKwfKEVh+OGuzH2XtHMPfQMBZPtmPNMZm49mw7HloSwb8vK8N3d9ayLauBx8sSbfiM + 2jGG7++iHriSsrgmD/fNog06PRlXnZaDbSc7seo4N+Ye7sFJ42zYrysHAysyUR1ON/mJudIQcjMffaSv + 15AXSSaKTWSwyEutXak1PzXlayQgAjOVjn2qIdvilE9BU0JrTWCtbyxSMMq0gP/VtMoigi0UiQC2QPkt + 9GUg7s+CpuxLTE2ViaAzDcE83iMnQaJXOhNrAA9hux7UkY3jRvhx3PAgjhzoxWGdLhzU6sBEysCEuhyM + rczEiJI0DIxRx4dpo5gOKMpEb6ndEMDt+XZDtosAro3mojqag9JAppmOOsrnmOgGWwIuPl9kp4Owc1sk + ogUnr9N0gkFvOvJ5P00BbV5+ivhlOUX8KqJaU2q7nQTrRHUaFIFupldMRNWYqREVNcO6COulqF6+EorI + DrMd4sEUDpzSUU05bK61obPZid5OPwZ1+dDT7kRHcy6a6PMp+reS9VNBmRaquF1VnozKsmSUF6dwwJXC + gZiiitmGak/KoZPlsNGm53FwkUcbL/veH7k6p5cIKrNssuqDEPnrZf2EJT9u3o9lUyRwvoP3530LWI9C + MfNfSRmpZ/5FAndU5KKTPlhnVQ46KlmeMvYV9rvKaBJKQ+wrTBUJ3FCahhaRw2WZqIjzXgHWA32XfJG9 + rFMhSkSIMKEI9jARZbm0prTWp9a05lrPT3k1a2ixHE7uaz1nRUkpYs8iVrN5LpO2xJC/TEWCpNCXEExE + Hgd4Dif9E/YVG/utXeSxXrZ76J/4ODDxK2qXA5NQjkmd7O+KBBS0rXUXgxEOAEPp8AU5gP4PZBhoDWAL + wWCmSfckgEXEatpOE2nFPhyJpiOan4l8+jiFhVkoLs5GWWmeQUlJJuJxTQGdIIAVgapoYB0rZd02t7jQ + 0upEA8cINdSdhUXUBWHKLetZZK+iTAU9XzAEAVN9DCFIpvXSMsoyFEYzUV6YjaqybDTV5KClPhttTeno + bs/A4J5MjB6ei/Fj8zBhr1zsO17krwMTuL/XqDyMH+PAWI5BRBY30n7XE1WEInwrW5NR0ZqKihb6d0RN + Sxoa25l36oHGzt1o4HMq6LMUVVJW6INGKVeBfNZVhO1N/WRnO+TY08zUz8ls1yQOnH8XCUkYAoztLdLf + tDn9UZdIYL2coF7S7DS/i7Sj/LuMPNE+qz9R7rS2s5nem/CyvgUf61461a++LfLAEMB5KP4dCZyJsuIs + 1HCc0sAxTWO926CGNkjTehfyGrW52t98sCDZ5r3jxRloYBt29nrROdiFjkF5aO/NNujgWK4/OofkEex/ + Bjw2jNcOzSHYVkMSaB2URWSihWgalIG63jTU9CSjmjZbqBG4X8e0fgD7dj809CTQOIBtRDT3JNAyIH0P + ZPA4dQLloqk7Yxe0b6G1i/npydkFs0+0st1bO7R+dSY6WjPR3ppl0NGWiy76DYPoNwwbGsXgwRxf9AQw + sNtPBNDT4aMsso7afAaJaGA3ZVTwcDtg0Eq73sxxYV2lA42VLjRVedFQFURDTRh1NSFUVwZQWuplX3Hs + QgFtdzxuQ5SI5OchLL1ORGJ2wtEHF+E008iLBBZ5aUWoav1JEZaaRlnbbm8Or7PTLrhMRFtFeT77RDHq + 64tRWRmh7HioH/QCJ6EbdvdP6TW9kEqB1scUYdp/umnJ+v8IAZz4GCJBAosIsUhfpYJmotGawIl1gZX3 + BPoTwII5rvOEFSWsewr/PQL4d3ns65/6j+7hYn90e7U+cWa/Okznczg2ZD3a6R8LDo0pRZLy+v5wexUF + oSWHRBApMkbTQCdeuOXp5WvfCy2XXlAbJAhgTemol7HZzEtijboE9GG0tW2jnvZQN2ia03iE8hF17oKi + gRWR6mMe9VGSRfxqTC2IvDTov817G7url/LUSSKBd08BvZsIViqbJNilu6kfcigTOfRTFI0uW2SjTbai + grUtmdEHUBakV6Tvpft99GHkk/SH1vgVoRvpI3rD4UxE/gDyZ/pD/w3Q3/N5UphP6kbaDC/h43hcy2ok + iGDaMNrPCG2pn2Vw0zeW32XBSXkWISRiRC/Y0znuV2qRIoq6yibyuK269VMewhwvRTy8J2UlrKhD2oAg + yx6kDg3IdhHyEQQ/oWMGPK9r9GGkpoeO0DfU8hxh5teCjmmd4YiX9pp+j4f152P9Wb5jkP5FvjcTxaFc + +jBuVBf6UJ7vQHE42xwPs4xBtqmmUw6zXUtDDtTGPaiJUecTDXGfQRWPxymjIcpcgGXTmrtaUqaMfrMI + 4IaiHDTSv20qoT9Vyu0S+rY8VhnPQEmU/nZEs6IkoP0S+guaVaZEy2bkZxkSWIRwqWaFUbvz/gGWQx9C + xlhX+fRxiljOcspyBWW4NGw3Uzhr7FBA/VPi5v14TSnrVmsW17G8TfSxm6N5RC5a6Bc3BrNRQ7tXxusK + +T9NL60psjUri3ziQIR1S/sWLclDrMxO2JBfbkdJtQcVtQFUNURQ0xhDSbkfXvpXkmutKZ7K+sigflB0 + rqZ7VuSv4PNSx9Jum7V9c9PZt6k/eO2eOkVrf+uciGATZcW2sD7CMR/A5IocYL+SLiESQQkE29vJ9rX0 + rYM+oZNjFul1B1ORv5rhQR/BSP/o459AiHYhLIgEzmFfoj3XR2S6F9vTTGEumWS/UPR5PvtEMftYTTyP + beqgv+xBVw3tVHkemui/NdC3aaZv3MGxaVcx/axCoiiBnpJ0DOCYdnh1KvZqycJE2s2J3Vkc+6Vj/44U + HNCRhEPaknBkeypO7MnGOUNdmD0migVj8zF3RAjnd9pwWl0qTqAvdVJ1Ek5vSsMZHRk4ozcXpw3jOHu0 + DyeN8ePwwW7sy2tH1HHsW5yGBspYDfVDZSgLZUQR85/PVFH++sgjGMhmv08zEaoe1qMiTssK/AYiGkU4 + ai1QM6U75fD3pG8/sI1M9H8fHNlsAwPqNgO2i4iKPQhUM5WyuV76lD4bn+VmPgwZarCbxDTTSvfBr+gz + ItAPYSf7visXIaYekUa0TYqyFbQGeH94chLRwFpDW2sFByhTAd437KLP4GH/9rvZ3vQPvIqapY0SUUO5 + 7J93wdJ1FkyZBMqzoPL2Xy9Y53N4naDrMxSZylR1KHsiYkUEsNpBkb4FYU2/zzzQzxURr3OKjNa54hh9 + HpG/imxkmUVUi7C0olVNBJ9IG4HHPLYs6sU82rpc2jD2JZHVTBXAo/Pmf7s+sBLpLYh85nFFHObwnjxm + 4zkLDls2+7TegdE2EyJVXHZuEzonMjlBsujeiahRHbPznI37OWynbN43vQ+ZIsb6oJlGROZahK7W9hXx + q2jY3chIkKJ9kbO6TqSqiLkEOUe71A8igbV+aybbQTB+g9pEbUv5tIu4p6xa9SG4BOVddcD7a1wuv0Ow + 8meieVk3Fvmbnp5uZu5M0Xt7+jFCmpk2WO/tEzAEYSrPUwYsiKxOZ2ohlTY1jdC2zmWzTDnpiWfL7zHT + WlPORWZGgvRp8r0oKvChOB40KC1ITIVbURRDZXE+qkriqC6Lo76yAA3VhWisKaRvXUQfu8SkdTxWVR5F + aVEQhXEvx0Ve+g9u8wGPZgNNzL7QB/YJkYNa29fGVOv82vV+QrLeB/lkv4Pqm/0iqw9am1mw2kE63yz7 + wTYwoHyaJUDk9/bpf/mw8n1z6LPJJmTxOgs5zIOFbOoVQcsSmHGjdJmNbcj+4GA/ExEsYtOQ0rvAe/D5 + Vv6MPSKymHfBIn8tIjiTbWHJmvBHPI3hajJ4HWF8a/Y7g77tdD5XM15ZZcmkPkr4/vT5mf8s1qlSYxcl + u5SZPZFNWRJy+Cyte601snP7QR9HCIqSFzwOJ7xOVx/560HA7TYRwW5bHuWcfbdPDyT6rOpN+iPxEY9g + uB+2QUDkLvt8xE1dScTcjj9E1KWZGRwoCrgNAawpoJssArggQh/Gh4KAkzrX8TuYmQe01rjXST9RszFQ + p/C5mvpaZL2CrzxOjs08NpaB8CjCV5HcDkMEayptP/0QfTxgZJZ92U4dZEH7+sBU7ZkYa+gjyhCGDe7F + CVOPRdKA5gEY2NyNIc2tGN5Ui9EtJdi7vQCH9OTjyN4ojh3gw3Ec5B7f7cQJXU5M7XJhSqsNkxuycHBV + KiaWJeGAihQcVp+Fw5vycBhxSKMNB9TnYp+6LOxVm4HR1WkYScM+tioJR/Xk4sQhDpw53ImZw2xYMygX + lw3OwTUjsnHTKJHAmfjr2Aw8uHc2ntjPhhcPceONw0J498h8vHdsMd44oQTPHB/HfSeGcfPxflx2rBMb + js7B2kPTsObAFKzbNwXrxydj/YgkbByUhKtHJuPufbLwxJF+vH1OOT6aUYXP5lTj6yV1+GplPT5ZU4PX + Fhbh72e7cd3RmVizdxLmDEvCeV1JOJNOy+mtqTilKQMnNeTgpHo7TqxxET6cWO3DyXQUT6kL4FQO4E9t + 8OL0Rh9OrfPghGoHjq+yYyoH9FPpVB5H51KYWu7kf704py2GiwaXYvawMswbXoCFw0JYMzqEbaP8uG6U + m3XgwP3j7Hh4bCaeGJeCF/ZLx+uH2vDWMR68PsWP545w4fFJDvzjQDfuGmvDJS1JWFfDsg5Iwp9Zb/dO + zMK9+6bj7/zfwwfxHpNy8dRB2Xh2/2y8eqAN7x7mxVdHR/HtMXF8PSmIjyfY8MHobLwzPB1vD0/D+2Oy + 8MW+Dnx9pBNfn5uFrxdl4ZtNbny7PYTvbyzALzcX45frCvHLJfn4ZSnvc34A75/oxbOHe3DLmDwsbE3B + kSVJGOFPwkA6273BTPTmOzGQSrc5P4i420nDnEXjkIbk5GQkUfHrJYGQys5uQYuQS5naqEB9PFfA7QYq + q4FUFntzsHREIAnHh5NwSiwJZxUn4ezKVJzflIu5g/1YNq4Qq/avwqqD6jF/3xqcMbwEBzYH6bTaOZCh + I6SIXzpgOVTuUjzWoDrx5Z4cQirQPH01TQUhY8jnWxHAgp3wEgVEFc+1U4mP9uVh37AN+3DAsJc7BSM5 + 2BhIR7uVeW5g3luo6Jr5nEbut/KZA+io7csynNaYhFUT7Lj1xBievrgcbywvwUdrCvDpijA+W+THF3Pc + +HK2C19e7MQXsxz4YqYdn82y49PZefiE+Hh+Lj5abMfHK134bEMAX18ew9fXsF1uiOD7m/2EFz8a+PED + j31zdQRfXBbDB2sD+Nd8N/55fh6emmbHszN9eHdtBb66ph0/3DoQP97ehV//0omf727GD3+qwVdXleGD + dTG8tyyCt+eF8ObMIP59URDvzIjg1XPdeObkLDx/Wi5eO8+Nt6cH8e5FhXj3wga8eUE7Xr+wEy/OHIj7 + zmnH5VPKMHcf9hP2/UOb3di/1o3x5dQTbMPRiopsYr9j/517cDK2n2vHA2uieOWqErx/Qyk+u7EU718a + xb9W8XlzM/DP+el4cw3r4Ao38xgF/lyIHfdE8dPNLnxzVR4+25qNDzak451Vqfj38lS8uzoDH2/Ixefb + KNvbA/j2qhh+uLYYP91Ygl9uqmTaiHfWleO+M/xYMSoDk5ifHg7+qtlm5WyzCqKZjvxQDpj2jlDvFSXh + xLokzBuRiWuOieKhi2rw+so2PrcTX21rwSerqHMWF7AdC/DF/Hx8NZt1PyOAT6Z58P65Nrx3vgMfzvLi + 0/lhfLk0H18vj+OblcSqOL5cEcMni6N4e3YYL00L4fEzvHjsbD+euSiC5+aE8ewcL56YnovHp2fhqZm5 + +Oc8G17fGMJXt9Xh1wc78MtjbfjlmXb8+nwnfnmxC7+8wLZ8th3fPd2Mr59oxAd/b8X9W+qw5kzq+qEZ + aI8nodSXRGOUeLFspwznOTnANAMQDrY5kO7lAH5vDvqPqLbh7BY7ZjSnYzbLv6Y9CdePTcLDx2fgg5VR + fHdTOX65vwq/PlGBH58uwc9PluGXJ8qx49Fy/PZAMX77SyF+ui2C97dk4t0NaXhnUwbe2pyF97a78cWt + +fj1gXrseLYb3700AF+/PgTfvDsaP3w8ET99cRh++PpofPvNFHzz3RR8+/Nx+HnHifht54nY+esJ+O27 + Y/DTp4fh/RdG45FbmnHTilosOjaE44dm4rCWVBzakIbJzRk4tDEVkxqScUSL1qW347ShIZw7Kk4U4Ixh + EfPR05GNWTiAeuxg2rgjabtOqOeAtCEXZzfk4ZwGG86qt+GU6kxMKUvB4ZSTSay/wykPR5WnY2od7VwT + 9X+TDcdwe3JlBg4uScWBPG/hgIJkpimYVJZpiN+j6kQAOzCJ9ZsggDNwOAfgRzQEcHhDkPmOsgz5OLAh + hL1K3Ricn4NODn6b3RwEcyBfQTktp84pY7vpq/dCZwpijkSEqYjfUF4yPNQ/buqiAkcG2qgL9+0M4tgR + YUzbP46FR8ax7Bgv1h/vwA3nB/HIijK8cXktvr6rGTsfagKeqAHYjvhnOfBYMb67K4YPr4rgxbU+3Hdx + Lq4/Ix3XnePGVWdHsOW0GJYcG8MZ+3oxaZATw+ryUBfLNPnROmRmbTTqcEX3Od0cICvlvqYSFGlmov4I + TfsaoDyGAykcsIv01csxyWiCgAux3EGW2089q6nkDCnI43qxlM//xolEmpyAN4376RwE6+WcvgzP4qAz + Az671k7ivdjPY+zjxblJqGFeetlO+7dm4ZihPhw1yI8jev04tNuDA9qc2JdtO55+zpiqLAwrSUd3NAlN + 1OdNwSR0xFLRVZiDrgKtAZyH2mA2qgLZqKQtLFckB9soyrxq7V8/n6Upgz18vl406Gtry0HX1I8avCnV + iwS9uPG50hDRR0y8p9+n6BzWl+qNdSGyzM5r8nhPG6FjXr083PVSJAcB2j9NuajImABlx+dKNlCEpaYr + DLHvx0LJKImno6EqF+2NDgxo82FghxddrU60sQ/UV6VzsJXMwVcSimh/hbICyl9xCspYZwWsiyjrIkx9 + IuieanOVQ+sV6eWpYAase0BTMcke57E+zIsYpnoprReeeokZIRTxokgWvcz0M7UQZJnjLLP0WHU01USp + aJ26lhKlaahjP61kXkuYt0LKkKJ8tc5vdUEK6nldXXEmSqOJKF8RviJ11UaSMcHXH8yDeWlLmOm7uS+y + WgPDxJpMibZw6SV4X+Sv1snM4HlNgWoICAsst9bKTKI/kax6YFkSU5ryPryneanOZxoimG3m9oi0UcQu + BwhM7exXOm+u4bbHL4I363fRgb+HjqeZKFILmmJWqUX4ZSkPkkmWza0PM9j3vH6mrLtgiP04yr6Un46C + eCaKi7KJXJj1fFnvmv5ZEaiaxlmRvYoILixMR1OTG43Ui1XVIo7Zl9kWXraBosD0zF0vRPlsAz5fZLmi + C4U8ERPqM7x3JJiKEuqUiuJEBHCTpoBuTENXewYGdScI4L1G52HcmJxEOioPY4bnYOTQbIwanodhg2yo + LWf70++ooI4v4xhF0bwltGfF9ckoYqrtyoYUNLSJAM5Fc1cuGjsTqG/PQkk19Usp80K5CrAsHpbTxbLb + mL8ctnkG82vIX7brH0JtTlkxU/GqnLzefJDoSDekmhVduYs0YfvaWH5B7WJjvQkiYBysa02nasDnS6/q + gxC/PjSJZCJOe1GYn01kGRSw7ooKslh21kOVG3XVLtRWO7mvdqSujkpPpJvnSAaz9Hw+J5yfgmrawBaO + C5u6bGjsEiGeYdDEem/qzuJxpv8BXtOTadDQnWFQ30Mo1TrLXWmo7KD+aGP/bU1A2xbKiQoeK++HCo59 + hCpuCyaCm6htS/kP1LQmE6mobmb++6B9C7UtivRmXvpQ10x9QXmqbeC5eqa1KayjZNYV72fA6+sz0dpm + R0+3FwOInk4Pujvc6G73oLPVbdDeImh9YEUAO9HS4KCcurjNY00+QwC31PvRWONGc7UbLTV+NNWE0FwX + QWNdmG0SZJv4UFzqQgntfmmZ16TFJS7Ei13IL3IhVuBALG5HfoG7HzwGoYgDWkdcZEH/qFQHfTs7bZ+2 + zXrjATu0jmUk4kKZ1t+rLURNTZzbQcqD2xAJkgXrwxBD3hnZTDbb6qfqu5Jl6TbpMUunmZSwCBEzBbQF + Xm8Rwfq/SFcrMk5kcOKFmAjfxLaJ8M1NwMhlP5jjOk9k5erFU4q5n6AXTppmP60vD4I17rTyt2ffVJ6U + j/4RwCbiNy/NQNta63PPCGC76rYftLax4HQkXjIqukLjW6V/FAEsMljRN3oJar1ElF3UVIWCXjZa2xq3 + ao1QrZ0fDdqQH6Ic9CGqdfIU5cK6MJFZvN5BaEwtyNfIYflFZOYI3NYx+RqGCKEN0jqkmiHLQSTWGd0N + E+1L5NLmylaZKcD533T+V9s6JttlraMqeyK9bul5q821hrSTukUzPAhmaRDCmiFGOsxE9FIfab1gC8E+ + BGjn+kNEr/wi+ZPGJyIclF3NZiBfSbNyeD30jb3p9DFZPulV5kvvGyzIV1EqEiO5TyaU6oW1YL281tJQ + Ij8UPe13aGrmbFPnAVcG/Sn6KvJ1+WxrdhczwwvrQql8Gh0XdI0hhplHCxZZbB0P0veTH6UPBeUTKXpb + awAL8kcirnTEfdn0YdiHY24UBHKMz+RnHzXX8Xon8xpgvyhiX1cEcGXYaVAb86A+34uqsIPjA475eJ2X + 8hBgG2nq5QL6iNXRbNQVCNThRbS7xTmo5XY5fQF9MKeP4zQLSoipEGFbRmn/47SJcc0eEU5HCW1RaSwH + ReEME/WrMYnJG58hIjjM8sU9tK2UZZHApZRjTQudz3IUOFJR5ExHEbeLKPNF9IeKCRG9Gp9WMK2mH1Ot + 6F8RybxGUcN+3ltEmT4slJx56TsEYhkIsizBwgRC9NfjpXaUVHpQVS8COI7S8iD9qGzKsD4e2S0Demek + SH6vJ5d+Ux77Qib7dTp9FOocnkvZU5f0QcdTWafSQYK2zT7lTGux6/8iAvaMAJb8Ku/Ss9K/xhfidh7L + p/4lvSY/Un0uj/pH0857/VpOIoc2nOMEP+VR5C99Uaf+x7rIZXn0kalIcR/bQR/lxllvFdFc+sl2tJZ7 + 0MHxZ1u5HfVxTQFOP5ntWMPxTR39nMZIMpo5zmmhD9hB3669MBndHC8PrkrGKNrNcW0ZhAjhJEwg9m1K + wiFNyTia/tlJ3Xk4f3gIF4/Ox8zhUZzd4cLxtWk4mn7YlIpks32Cxuad2ZjSnYOje+04YogL+7TnYHhd + BjpKaLuZh2L25TjzH6OvFaYc6EMKLZ2j6bK13IqIco2DDHHJOlIErtaYFUQ6anpis546z1mkp/b/A33n + FfUvQlPpntAMAWZMw3a2YMY5PK7z1r2tMY0Z17Ct+8MiINw5CYjotaDpSAMO2mqmzmyWi/ezM1/C7z7e + UR/PZjtrX9fw2U7aPkcm9QZtjSeHY4M83YeyQV0l8lnPtsq3Z5lMufrK9h/ls84R0pPpPNZfP6qvKFWd + WeUWAa6pnhWNbUjeqNasTEQCiyBXG4UovzqmqF8Pbb7qRHlMRPayjzCvpj5Z9gRE4LNseTnUq7Kd7BfM + v87ZsxJRwOa/IjUzUg0SH1YJyWasJvtq1j7l/S1kKRLSEGIJ7CJTstPo74hMS9xP9xBM9K3IS5Fn8jeY + R/lCSX2w/A4LIkWNTlDdmahYkXN8Zh8yFR3bB9VvGuu5P6G6J1L66lz3NPftq/8EwZpoy0S9cGzBOrKx + LJouW3WnZRktKAJXZLQiea3oziwey9J7+/R06qu+d/csg8Y3FqzIUCFF7/H78mShv3wI1nFt65xVfrWL + 8qvj8nEU0Rpjn62uyEd9TSFRggaisaaMvnI5Wuoq0dZQjc7mOnS11mNARz0GdTVicE8Thg5swojBrSYd + 0NWAjtYqNDeUor62CDXVxaiqLDT+rqbz11TEVkSqdLHeQ1i+lvG/mCerHwh71r9V3xas8ln7aj/BIuwt + OyBf0IDPSfjCCV911/uBPvQn+40s6F48Lr9KH2DKF1R+LT5DeU7nNSZCnJAfqXQXAc/tFMKySQq60ywX + JgKYqWQyLYV56cMf8TQWJM8ayxrw3rvsnv7Dczr/O1+77/kWLHm16qw/rPqTjBg5SUnbhQwiN0MfT8h3 + zqMOscPrcBkCWKnPkYgAVjSwpkBWZLCJ3DdQ1H7ftNkCdaH5AMep4JA887GMps0vDAT64EGBj34VEfdy + 7OURnIi5nYi67WYK6IpYEPXF+Wgoif+eAPbzOh99ct43Iril3xLErt+ZRz0nIls6hT619Dv1v4lCZ35M + Hs0HKIkZOQUvxxOaIlzkr5lxhP9T21k6KwH5Ixa4n0H/2OfFwJ5uTDn6SCTVlzeiobwezeWVaC8rRHdF + AIMrXRhVY8eEujzsR2O7f00qDqxJwYEc8O5flYp9aKTH09CPiSdhWDQJI/KTMI77E8pSMa4sBaNLUzC8 + OBlDipIwsCAJ3byuk9f1Mt23NgmHNqdiSkcGzuxIxxymKzrTsWZAOjb3pmH7kDTcMDwdfxqVgbvHZuHh + iW48vX8Izx0YxXOT4nhsciHuPSKGm46J4JKj/Vg6yYa5B2VhzsQ0zB6fjDmjkjB3WBLmDUzCos4kbByS + jOv2ysFfDw3g+TOr8OZFjXj74ga8O78B7yxuwJsrG/D03FLcdpoXmw/LwtwxSTijOwlH1yXhsKokTCqn + 01KawKTiNBxSkIWDC3KZ5uHQQhsOK8rDYSU5OLwkG4eXZvNYJg6KpxkcEEvDPnSYJvgS2DuQjIPys3BM + lQcnt0VxZlccZ3eHcW6nF7MGuLG4x4H1PTZcMSAbN/Vm4PZByfjL0CT8Y3QaHpuQicf2z8U/DrDhLxNz + cfv4HNw0KhdbOlJwMev4fDpny5jna0dl4/qxmbhuVCquZ13cRNw6JgW3j0zGPYoQZr0+uVceXtrXjdf2 + 9eHlsQ48M5jHBqTgcZb7iZ4kPNObiheGZ+DV/XLw1qk2vDvbg/fWxPD+thJ8eE01PruhHl9cVYsvtlTi + 86UVeG9aAV6eGsEDBwewTeslV1MeWO4mKqE6KqB6KqRaOmFVdEzjORwgswPvUg7/g5AS0P/CRCnRQgyl + whhPxbE/7z+JDvKhHGgcEUvCybVZOH+gHzNHF+Di8SU4b1QBjukJY3SlDbX+FPNFq6J4/+g5/7PIJTxE + lKgmWpmnVqbNRB1RQRQT+UQhUUTECUMcEyM5QDqhKQXLJ4bwp9Nr8NjcJry0ogFvranBO8tL8Pb8fLx7 + cRjvzQrhvZlBvDsjgLcv9OPf032UZTdev9CD12a68NocpgsDeH1FDG9vLMZbWwvw1mVxfHh1IT66No6P + r4njk2uK8fFV5fjo8gp8sLUab6wqxdO874Nne/HgOQE8cmEMr6xqwAfbB+GTG4fj45sG4/M7BuGzW3vw + yQ0dePfyRvxrdSVeW1yB1+ZW4KUZpXjhgkK8eEERnj4nikdP9+OJM0N49rwYXjy/AC9dUI6Xzm/Ec9M6 + 8OyFA/DEzCG446wubDqmChfuHcLkrjyMKtH60Blm/cw2tl8TnfleDjD2Zr87iv33ogOSsPUsG25f4Mc/ + VkXwNOXw4YVe3HtBLm47PRV/Pi8Ljy/04JXNMXx0QwW+u6se395ehS9uLMaH22N4fR1lfKUHLy1z4fkl + Lry83IvXVrKe1obx9pYCfHIlZfjqGnx2bTW+uL6BaQfrvxY3HevD9K5kjOUgVu0aINyEj1A7NtFQD+ag + aSJ1n8jBaUNysGVyAe48uxZPzG/Dq6u6WL+t+Nfiarw2rxRvzCnB6zML8cYFUbx+Xgj/OsuHl8704uVz + fHhlegivXxzDG/MK8e8FbLcFRXh7YQHenF+AN2bH8cpM1u95RfjH6QVspyK2UxkenVWEh2dG8ffz3Lj3 + HDv+Ns2O+2e48OzaArx/Swu+uq8Xnz8wEF8+OhhfPzkCXz1FPD0CXz45FB8/PBDv/b0TL97ajqvnFmDa + QbkYzvrWek92yq+c9T2NuIyuvgbvCKZgTFE6DqnUFMc2nNuUgenU6Qs4uNvQm4Qb2V7PzY7gnctr8Mnd + jfjykVZ89lgTvniUeXqkBd//oxXf/a0J395NHXJzBV5Z58TLq2x4da0LL23w4NVLI3jrhlJ8/pdWfPP4 + EHzx7Ch89vJ4fPrafvjircPw3ccn4tvPzsSXX5yNz748C198eza+++l8/PTL+fj1x2n4+euz8f2Hp+C9 + 5yfh8dtG4KaVXZh/HPv/oGzsW5OEfTi43I92bJ9K2iK22+GtWTiux40TB4dwxvB8nDY0hhMHBTCl04FJ + 9RnYqzAJe9FuTaQtkw3QOr5TBA5Aj6WNO4q69zDatgM5GN2PcnsA5fhg6qBJRck4tCgFB/H/+3N/Ao+P + pQ0Y0w+j2fd1bAL/ty/vMTGWgn0jHDBTd5pr/HpuLvYrtWO/cifz7cXEKj/2KndjeNyGrkAayqljC9lO + MbZPqA8Btp2PbeXicSf38wjpKek8y4HS8WJHMkbUOnDYQB9O3yuK2YfkY+FhAaw60o2rzojgvsU1eOmS + Tnx86yB8//eB+PGhdvz0aCN+eqIJPz3cgC/vqsGbl5fgieVR3HGhC5ednI3LTvfhkjPi2HR6KRYdV4gT + xzkwsTMLA0pTUcK+pLxo4Chnrr8e/a9gnD7JJGVTXxXrQxxrJgbrYxzdzyqXNUODoDJbZZftMOC9TF0w + 1Ys73d8apAq6l86rftTnFVk9gu1+QIsd+zbkYR9ifF0uRlVlYURZmiGIu9m+7Wz/BpavmE53EaH1mMuo + y0po9+K0NxHaqADL4KPe8Pb1M+VRz5NtUx7+qPx/BOVTLyblzMtp/qNr+kPXmJfFzINSM4Dg/81AhOet + sisPGnCpXnR/DdYLWC4Ru1VFaagqTkE55bkoQnmjbOpFn15gKmJZ0EtNTfGsF0p60aGXArp/Gp8vqJx/ + lL//USh/ypvavH+dWfkX9DzTfny2CGGtdS1CuKAP2tfLQC/rQR9CuJia9ed4XFHF+qDArcET8yuojSw5 + E3R/C3qeNZD9n2m//y1g3pIFllPpnufNcbazIWGUsqx/hP4vIzQANIO4Pe5l3U8vMzQINWQl6yiL7W1j + vRmCmLIgaBpQvZzUQFZyp3rR4E5fGuvaSDSFYJ1TfvQ/QxT9Qf7/e5A8aaArmfM5E/IYp44tlazSljVQ + t3e0JKGnow/t7KdEF4+101Z1NNOHpL8cpg6WzHqZdxf9Dxd1sYvy7WQeHYSH9j3EexZQ55fQZpi1fpkK + +Tzm4bU2/i+HeUhnXpKYJ9X3H+X5/wRMuxOSD7WliQJgW6nuDQFCP9mllDBTzDNNkOnJ5qOPMG2P9kWy + 6wWzoph+9wzeN4v/C7JeNO11AWHqw6oXpf3qSOfNNdZx2mAhzu0CIl8EOvfzuR0lgrzWz3q1EGBb9keQ + urg/Qhx3CmFuCxFuR4oTaZhpkPo5KHKebRigHRf8zLsFc9wCz4WJkNqcCFKvB9m+QcpVkHpQ05mHaJc1 + M8Uu8Fg+rysp1KwHyagoIfrScvoAQinPGRTooxpeS0hOy7hfXphupskvL8ziPtN4Biri2dzO4zEbr7Oh + KD/XTIEbiWSx72QTOWa91GA4A/5gJjyK2vcpGiyF0FS7aX0QESACMg25tmRDDljTzevlkvkAhe1r1h7n + OUWQ6Ut8TS2nqUW1dmRRoYepHX5fhone/J0s/H/4vwrSt7Lb1stxQ2DymHyM/+P26X8Rymf/vJqXfyyD + eUkqsEwi3/aE7Et/yD70v+9/BctG/dG5/xUovybPfbD8lP+RZ+gay59I74O1bx2zfF3du///9BxdI/83 + j/rfxTpx6EUuy6dr93y+jtl4nS8j2fij8kuD2bQBuckIUQfI/5W/o+v0PPld8oei1AFxkW4CbaY+uAzk + JJ6Xx/O6TnlUavxIHjNR0nyGSHJFmouYUpSiPkbQM6yyqQz6r8ogP93F/+gDPw//I1/NwWPKl+AgXH2p + /Hqlghmj8zo/y+bvu15jAD1H9zfl53EtyZDGfKfSLgppAssmO+7UR276+Il6VjOupDCf/euuP0zb8n5/ + dO7/p2CejM/W12cMpOv/4FqVQe2sulcba4YAfZQacyZDy0EVyj9g/fjZDl6e9xD6MEDTg2t96DivLWG9 + lVIeKnltNX2xRtrPdtpeoZO2rosYRIyljZ5IG38QfYOjm7JxfJsNU1tsOLw6A/vRTo+jnRXG0+5OoJ0c + Txs+jv8ZRds/qjoZ3byfyOcCyp2HeZCsWP3BtAWxZ/n2hEVq/o9c+38TLL2yS47/X8Kqr//T9SAZFAmp + GRbMdNgO+jA2EZEJGTQ6gLIqqLx/dI//D//7YMmV+pGlu9VG/zfVvfKi9W4rSiOory5CU10ZWhsrOI6r + 5ZiuHj2tDehpa0RvZ4vB4J4WDBvYhuGD2jFqSDvGDO9g2oYhva0Y2N2I7o5adLZWo6mxErU1Jagoj5lo + YM3u8EfP///w/x+QLktL4lgnJQ1ZqelEBnVN4mOGxNTqiSh7TS+uKZHN1NeZBHWPYH1Qoun+9dGJ36b1 + 13MRcTkQctrNdM+B3CwDf04mvNkZ8PA+gitTsy2kImzPRr7bhgKvIoJdKFSUr6Zx1pT1ORyX0b7q4x3N + HGN9UGD5P39UJkHn9jyv/f8V3S1Sv762BodPOgRJI4eOZccYjTFDh2LCkG7sO6QRBwytxMGDi3HY0AIc + NTSGo4eEMUUYHMExg2M4clCYiOCIgREc1hPFYQOiOILHjxoSx+RB+Ti0N4ZDBubjoAEx7N8dxcTuMCZ2 + hnBQdwhHDw3j5FFRnD0+jpn7FGHZfqVYt38Z1u9fgq0HFeGqQwpx46FFuOnQAtx+eDEenNqAx49vxRNT + 2/H4iR24/5RO3HNGB24+rwNXTGvDilOrA9QHzwAAKiFJREFUsPikciw5oQxLphRh8eRCLJkUw/KDYli9 + fwyXHlaCG6ZU455Tm/H07KF4feV4vLFmHN5YNwr/2jgCr10yCk+uG4Q75zThirOrsPq4Msw4MB+njg7j + +GFhHDsoiON6Q5g6MIypA+KY2l2CqT1lOL6nAicMKCfKiBKc2FtMFHG7GMd1Fxgc2xnHpLoADq7xGxxS + G8CUjiKcOrQW503owEX7d2PmAZ2YNbEF8/erx/J9a7BxYhW271uK6ycW4tb9YvjzwXE8cHgR7me5/nZU + Mf5yTCnuPLYMtx1dgZsOr8TGsTHMafdhZqsHq0aGcf0R1bjpmErccGQpbjy8ADdMiuJG1sfNB0VxO+vk + r5OK8NDh5XjsyCo8dUQNnji0Ag8dyGMHCIV4+MACPHJQIR6bVIinppbi1ZkNeGNlO968rBf/vn4E3rl9 + HN6/awI+uHUcPrh2FD68ZCT+vXQQXrioGw+e2o7LDq7C9KFRHNzkx/ASL0YWBTCqKIhhJSH0lsXQWpSP + ymgERbEYCuL5iEajCEfCRMggwm0hGgkiFg4iGgogFvSjMOBHVciPZm53cXtowIfxQR8ODnkxOd+LKWV+ + HF8TwInNQZw7pAizJ9Zh4WHtWHxUF+ZMbsdZ+zfi8GFlGNUSR2cN81AURTQcQIj3C/O+EW4LUT2Tz44y + L9EQ8xQIEEGEg0FEuB3xJxAmYoEQyoNh1ITCaAyG0BMKYij/P4IYznsMjvgxMOxHdzSAdm53cLsrEkAH + tzuJwfEAJnfEcdF+Ndh22iD8dcneeHrTRLx8xd5484oxeHPbILyxvhv/XtOOt1a1498r2/Dmila8vrwF + /1rajNeWNuDlJQ14aXktXlpVj5fWN+OlLR149YoevLS9Ey9e3YG3/jQI795G3DqYGI53bhmFd28Yi/eu + n4A3Lh+Dx5d14IG5zXhoQTseWzkAL1w2Dm/fcgjeu+dwvH3PJLz7l4O5fSDeu+MAvHnD3niF51/dvBf+ + tWFvvLpmL7ywfCT+uXgonl40CE8u7DXpPxcN5rHBeHbxMDy7aDSeWTwBTy/fH4+tOgR3zNsHl543Agun + duHUibU4sKcI+7QVYO+2KPZqCmF8ox/7NnlwcKcHx4324vzD/Vg7rQjXLqrEXWtqcf/6BvxlWSVun12C + my8owF1zKvHQulb888qBePO2kfj0vgn47L698MlfRuP924fi5cvb8cK2Dry4tRMvEC9t696F17YPxMd3 + jMGnd41mOgIf3T4S7906Hs9fMhp/mtaKBRNLcGRjDMNjYTSx7av9QdSzzTvDYYwqjODAuhhOHFKMc8aX + YOHkBmw/dwjumjcGj6zdG89u2QfPbxqHlzaOxEtrh+Dl1b1sp268uKAFL7C+X5rTiOeVLmrBi2yDl1ey + vVZ34eW1nXh5TRdeWduOV9Z0GiL55VWsyyVD8cT8oXh8yXA8vnIkHl01CI+s7MYDi5tw34I6/G1hNe5b + Vot/bu/BW38Zj48eOgAfPLw/Pn7qUHz6z6PwybNH47Pnphh88MThePPBA/DMHRNw1ZImzJySj/26PWiM + e1Ge70NpMftekR8hbkdiQTpGYZTEQmhhP57YWUh7UIpTR1Vgxt61WLBvFZZOKMKavePYckAU1x+bj8eX + tuLVa4fjrXvH4sMn98UHz+yDD56eiE+IL57YD18+sg++eGAvfHTPcLy8nXVwWQNeubIZL17Tgpdu7MBr + d/Ti3b+PxSdPHojPX2K+XzsRn7x2Kj5582x8+8k8fPv5Mnz5xXJ89sUyfPbVUnzz/Sr88OMq/PTdSvz0 + 5XJ898F8fPjSeXjx/hNw96UHYf30wThvUh2OHVmMKdQBU0dUYMrQIkwdHse0A+sxg3pi5mTpiS7MOLgN + 5x/QgPNYrlPHFePYYbR5QyI4dnAYJ9B2nTY0gjOHRHHmoCjOop07mzburO4YTu+izSBO687ndhSndMdx + UmcUx7XRblInHdkUxBENRGN4FyY3hnBUcxTHCK1ESwRHNdGWNkR4fT6Obi2kHSnHcQMrcfzgGkwd1kA0 + 0QbXY/LAGhzQVoaBcekSHzpjfrRFiVgATfkBtmUA9URdfhA18RBqmFYTlWzHynzu87qO0gAOHVaN0/Zv + wcVHdmHVST3YeHo7LjmrCTdd3IkHNozGyzdOwgd/ORJfPHIovnx8Ir56ai989cw4fPPUeHz+0Hi8dtNg + PLG1A39eVo/rZlXgmtmNuHpeN66irG6aMRDTj2b+94njgMH5GFwXoe4PoIiIM68x5tlCNOozsPbz+1BA + GSxiGUsKKJdxH8q4XxZLoHQPlBBlvEf5Hihj/VT0oVL7AstfRNmORxMooL7WukilIV5DPV1D29LA7eFV + YRwyoBBTx9bhmJHVOHJ4pcHhw8px6OAS7NeTj307otinnfqrJYreSj8G0Bb1VlDvl3nRUeRFa6EPLSxD + I1Gf72eb+FHN56suisMsM21ZlM+L8Xn5fLYQ4/EoUwPap5iOMf9xU3cBlMSZX6b5qkcin/frjwLKQJwo + 4HVx1mNxActbyOcxLaRcFBUEUUh5KGSdxVkfBryuSPXIOi5hXVcU015RJns7Y+hlGQe008a1UW4afWit + 86OpmuWp8KGmjCj1orqEKferifIiH4p5n8KoF/nMt8qmMlrlkV0XIrSZBn3217LBMbaJAdskSltpysjt + IqbFkgtCMlRA6Jg5TpTyeCXrt1Z1XexDE/PWyvy0V/rQVulFC9ukgflsIhqJhlKmZQFeE0Az266+nPkv + pB7kYLCKMlepemA5LJQa8DmE6qqAZStg/qKmfPQj+hBVmZkfqw0jvKY/VCYhwmv+E6wHljXM/wmhfgjz + vv0R6oPZ53/DvOeu82zTCPMbZRny2fZ/hDjlQSgsCO1CgdLCMFOB8kMZKuC1hbQJQlEx+wnrrLQiiKrK + EKqrQ6irTaDSTFfLOqEt0VSy+qq6iPJfrOko2RZ1dV7UN3hRy7SCbRKhfIS0Fhnz+4d1oeN9sOo0zrov + 5n3LKJ/V7Gv1VexftV60N/kwsMvHQT777SAPxo7yYu+9/NjHIGCw99ggxo8JYsKYEMaNCBtZbqz2oo6o + qqEMN3pR0+JDVSvv3eZHQ2cQrT0hdA0MoodjgS6OBTr70DYgiAb2h2r6LGW1LCNlJ8a6ibJ/qS2CbK8A + ZT1AeQgyDVK2Q0xDlHsLOp44lmjfiPqE+oGRE/qYlIUY9VSMfToB9oX+YB8X8tlGBgXsJ4TatIh2vKI8 + gurKKGqrIwb11eFdqKNuq2X7NdWF0Uob1EY01fNcDe0Dz1VWhE3bm7zoWazzfLVjNW0MdYHqoJvjQoNh + 2haCRKAvJQbzmDC0D8N5LdHVt9/J/3UOD6GD2+1EK/ebBgfRzP8KLTzWH6081x9tbJNd6KWfTbQOJAZw + rNDN/t3hQV07wfFRXSvbmajvh4a23dA1jTrWkkC9QF+0oYn7TBspt031mip7N5oaqF8odx2tPnS1U/d3 + 0OfvDKC3K4iBHQTlZ0BHgFBKGWrXcY6FOsMY1BXBYPoJQ3oKiCIM7irEkO5CDOUYc1B3GVHO+5RTpssx + oKsCPUR3dyU6uyvQ2VmG9o5StNEHaG4pQVNzERoaC1BbX/g71DWUEMWoqSuifMdRXhln342huCRqUFgc + RVEJx2NESWnUTP1cXVlopn9uaanA0MEt6B1QT/koYV+nPqAvEZfd7EN+fvh3iNFXjBpoLMdxk5F5ynnw + v41AH6z9EG1CmHbAGhPGOGa07huNEkoNEs/r/1xz3kJM/4tQl2iMqXuGzL0D9Of/WzD9U3nv67PhPn0c + pU2Ksty7oH0isgd+d41BX36YB9WLxpcx5inCMibAchIacxpwjBET+J98XidIF0SNPdxtExOQnmBK/SC/ + oExrOBNmmkTmpYgo5PPjfGacz8pnmQxYxoRfkcAuf6MP5rjuLT1EXyGffmM8Lp0guxAxaT7lwdI9er6x + P/zvnrbL2u9vAwVjA/vQ/3/RvrJJ1xdSlxUXh1BSRCj9AxRT1/VHEXWw/Efdo/8zIlY++hCm3Y7Idvft + yzcx9pvpLvC46sk6Fw6wTESEsK6JWdfqv/Jz+h/Tf/vDOt7vnOpavlwR81ws/4L1KRSzHILa1RxjO5Sy + Hcpon4tZ9/J/4vx/of7LtipjO5fzfKWu1THdu+9ZSgVdL59Fvm4VfYRqPrOGNqSe47uWkjAaWc81lLty + ymkxry0hivi/Uv6nnba+i/ais476uoY+IP2pmmLaTdqFCvoZxken31TehwodF+g3VNAfq+R2JX3iKvqH + FfLp+XzLbyvi/eWXlxMVRCVRQzmuKSSYtxr6JTUsl3znatZRDf+jvMuvr6IvJt++mtu1TOvpe9SrXOZa + 3ot1Vcb/y/+Ny5cpoW9cyjqn/yDEy7lPH7C0inVHG1jD8Vd1QxxlFeyXvI/6cIz1qr6n90WC0QsC+5Js + tey29EbY+LO/h3mf1AdzjKn0W4T/N6Dc7IJ1rD/YBv8hu8Qu34Hovx9k26ovSl8XF1FW1EcoMyX06Yok + NyxTPutJPnQh5UZjoRKijHWldqlm+9TTp2+p8qOVfrH86Fq2XQ39tSoD+nJs6xb6YO1l9IsoFz21QQxp + DGJokx8j2n0YQ19sTJcX42iD9yL27fDiyEEhjqVDmEqcNDwfJ42I4+QRBZg6NB9HDeRYi37Xgc1eHKR3 + QM1uHNjqwoHtLuzf4cIBA70Y3+XHMN6/rczDtvaa8VMByy2Zjkm3UteFiRDLFGT5Q6wH9dUw6zUmnUe5 + 1lhP0LjPtGdff7ag/T8E72Ft97/+j/+n+ybuLfyufQmr/+fvAeWxP/IpI/0Rt44x/4J0UNjPe+oZ/WDG + In3n+sMcM9dQ7xEhP+VE27xex/+jXPxPf1jlsbBnuQxYDsGUT+3SB+W3OE4fo4h9qzSOuoo4GqqL0VRT + iubaMrNdVVKAyuI4qorzqeOilFPaSf5PdaH7/eez2O+MHdN5pbyeyJfP0GdDzXiy73iM/U7vlc27ZcGM + P9kn9a43SNmR32H6b8Ie77LLEfoR/4HEvTV+DctnYX0EWZ8BH6FU4DED5vUPwTr1E0FeE9Lz5Xtwe7f8 + 9ME6J/9Iz/nvQNcJypdgjbNVB3HmW+uAFuTTD4zno7SAdV3Aei8qZP2rDYpRSVQQZcVEUQn1RzFRRJsf + p52P0T5HqW/CLAN9qX74vU+XyIvKaEEyFPwD7JIx5b0vNTLGNpXOLKK/UVdTjBHDujFh7FDst/coHHzA + Xph88H44ctL+OPKQPkw6AEcwPerQ/XH04QfgmMkH4LgjD8DUo5Xuj2OOOABHTeZ1h0/EEYfti4MOHI+9 + J4zAiBE9GNDTwnEPy1qkMtJfpLyZPt8Pe8rffxy3ZF/y2CezRm77YNmO/xL8T39Y/tOeflR/GJ3PZwfV + n1lnpj5Vd335sfKYwG6ZEHbZjj78sd2inPdB/rNg8TS7IF9W56lfQ+yvgrYtaOwblG20ysXtBHbnX7D6 + 8y5QpvojHGR+QnwWEWMfzI9EqcdjHIvkU57j9J3itHGF9DVKKcNlqC6rQG15FRpqqg3qq6v6UGFQx/Y2 + qNb04EWo19iHaKQuaq7jGKu+Gl2NtehpbkRXUz26GmrQUVuFttoKtFWVo6WS468K6i+hvIRpMdpry9FR + V4Gu+ir+rxa9+jihqQad3G+VnqsoQm1pPmpK8lFeGGPfi9Gn4ziMiJt++Z/QOaH/sUKOawri9MO1T70a + N2BdcD+f5zS+kJ6ydJj0WjTMsV68AKNHjMQ5Z56FpKu2X4urt1+Da7Zfgeu3b8YNV6zETVcswk2XXoyb + L7sIf7rsQtx22QX9cCFuvXQ6brv8IrN9G6+5Vbh8Fm7bPovbs3DLpTOIWbj5kpm48ZIZuHHbdNy45Xzc + su083H7pubh7+/n467UX4v7rZ+DRm2bh8RsvxhPXX4SnbpiOZ284By9efzZeuP5MvHz9Ofj3LTPw7i0X + 452b5uCdP83BG7fNxWt3z8VLf5uHZ/8+F4/8eQYeuvtCPCzccQEeuvUCPHzL+bzvBXj8+vPxz5suxAu3 + zcSrd8zEe3+djc8eXoTPH1uAzx6fjU+emIlPn5mB9566CK89MA3P//U8PHn3Rbj/xgtwz/Zzccf2abjt + Uub5kvNwx7bzccfWi3DH5jm4Y8s83Ll1IbGA0PYc3HXJbOJi3LltNs/PJGbh9s2zcOOa6bhhzQUE09Ws + t02zcfdli3Hv9Wtx380bcP/N6/H3G1fhwRuW4eHrFuKJa+bi2Stn4vkrL8DLV56Df117Nv7NOnnj+rPw + rxvOwqs3n4tXbp2GV/40HS/eNBOPX34B7l93Kv6+9kQ8evm5eOFPs/DSbTPwEuvgxRtZj9edjheuPR0v + Xn0aXr76dLx+zTl4i/XyNuv6HeHaaXiLz3nrqnPw9lXn4m2eN7j2LLz7p3PxyV8vwGf/mI7Pn7kIn780 + C1/+ay6+emM+vvrXbHz1/Ex8/fQsfPHgTHz011l4i89+5uoZ+NvW83HjpnOxfe15uHrtDFy9Zg62r5mP + y9cuxZbVy7Fh+VKsW7ECq1etwrJly7B46RIsWbrIYOnSxQbLuL1iCbF4HlYsnIO1C2Zj46LZ2LLwYlw6 + fyauWDgLVy+6CDcsolwtOx+3rb0Qd2y4CHetoWxtm4UHrpqLh25ciIdvXYwHib/cMJ+yORvXbFmAyzcv + x8Z1y7Bi6XwsWTQPSxbPx9Il8/nMBTy2kOBzly02z1+2cAGWLlxosGwBt+fx2j6smr8I6xcswUamm+cv + wCWLF+IK/v/KZfNx5dK5uGLJLFy+eCYuXXYxtjHdtoR5XzYblyydxXQWtq++mP1oER64eTme/esq/Pux + tfjwnyvx6fOU0Wdm4vMnz8Xnj55NnIUvHmb60FkGn/3jTHz64Bn49IFT8fH9p+DjB0/Cxw9z+/Ez8NHT + 5+CT56bhw+fOxgfPn4nPX53GNpuOL1+7kJiJL16dgy9fmo+vX1qML/45H+/+4wL8+2/n4J0Hz8d7T8zC + R88t4DXL8NWby/HFG0sJXvf6Yrb3Enz+wgJ8+vRCfPYEtx9bjs8eWY6PH1qMD+6fj/f/PhsfPDAXHzw4 + Dx8+MC+xfb/Acw8uxvsPr8C7j6/Dq/9Yg2fuXYF/3LEU91yzEDdcMh/Xbl2E67bNx3VbpSum4YYtZzA9 + A7dddQb+fPOZePSvZ+NZlvnlx87A60+ciddY1pf/fipevOdkvHrfGXjrifPx/vMz8NmrF+Gbty7Gt28T + b83ANyz3x0+fhY+eOBcfP3k+PhGeugAf8/qPnpiGT545H9+9cSG+f/N8fPv62fj6lbNYNxeyDubhlfvm + sj9ejNs3zqacXYytF8/ChovnYNPsebhkwXxctXIhbtq0APdctRj33bgYD9+2CM/fuxyvPbQCbz+5Eu8/ + tQTvPzGPz53DdpmJjx/lfR9ku9x7Bj78yxn4mPjo3rPwyf1nsQ6Zv4fPxUePEI+eY/Ax2/zjR87Bpw+f + h08fYf96YDY+vG+Oqd/3H2G7PTID7zx6Ad566By8ybp54x+n4Y1HT8OHL0zDF/+eg6/fYT99Zw6++WAh + vv1oObES33+8ltiArz9Yjc/fXoj3X5uDZx8+B3+//Uxcf+np7JvnYP3qGVi/bh5WrpuFxatmYNnKeVi1 + cjHWr5yPbWvn4MbL5lMvzsOfr5qHB65dgIevnYfHrqH+vuYiPH39NOras/HOw6zbFy/CZ29SP3wwG19/ + SF3x4Rx8++FcfEd8//5sfP/Ohfjm9XMp66dRXk/Fpy+eho9fIl45HZ/861x88dZ0fPP+xfjh0yX44fM1 + +O6z9fj28034+bur8PMP1+PHH67DDz9ci+9+vAY//XwjfvnlRvz60w34led+/vpKfPvJJfjsna14/dl1 + eOrvy/G3Py3BHVcvwe1XLsedV61kGai/r5yH+/+0Ag/evoZYh3/cthp/v2kp/nbDQvztujm4h7rsrivP + 53XU/bQFd9Fu3bN9Ov5yBUEb+JdLLsS926jviHu3ztqFv26ZgT9T99+1kfZiPW3kugtw6/rzces66int + W9hwIW6nPbiDUHrbxot5DbGWcrdhHo/Px51bmM9ti3HXZUtx5+UriFW447IVuO2SZbhl0yJctvQiXLJk + Oi5dznTZDFyyfBa2EltWzMLmlcIcbF6VwKaVF2PTcqYrBMr0qotxyxXL8OfrV+LBP63C43cuw9N3L8Cz + 98zCyw/OxVuU4U9fobz8exO+e28ZvmN7fP/hdOJ8/PjhRfjh/Rk8Pw3vPXM23njsLLx4/xl44YFz8fxD + s/D8IwvwzP1z8Pc/nYM7aU9uumImtm+ahw0r5mLtinlYzTysWjkbK1clsIL5FXRMWM28CWtWz8Ja6sm1 + TNcJq2ZhfX+wjL8D77En1rE+rO0N2mfZ11Ou11KmV69YQMzHmuULsHbpHKxfPAsbqas3LpyBTYsuxJVr + Z+MW1f01q3D7VSvwp+3Lcev2ZcQS3ELccOkCo8NuuGQerr+Edm7jdFyx/gJczva9lHZ/68rp2LL8Qmxd + MYNtMpP1PwObiY3M00bagLVLZmDVgguxchHTxcSSmVi1dCZtEOuD28Jy5mcFj63kMdXbatXhqnlYw3Q1 + y7OKWM227Y81q2f3gdeYeuT1u8D/96VrVs7kPWYYaHst+7zqWen6NbNwGf2cyy9ZjMu2LcSlW+fiEsr3 + tk0sD2V7C+V384bp2MTyblw3HRvWXIgN6y8yWE97vHb1hbzndKxi+VdQTlewfCtoA5cvmkPMNVhGm2mw + ZN4urKAdXrmcdphYuUz7c7nPci9nfln+NZRpky6fTVmib7BC6Wy262y2L9uOed9MPbZpzUXYvI71vu4i + bFs/A1vZJlvYFzevZbtwexuxlT7D1vW0zRvYZ5hu4rUb6KetZ7438v8bVxOrdmODwQyDtao3tuFq2vSV + tPUrFrGt+mDaj8dXLBUupp8zx2Ap94VllDVhqY4ZzN2N5fQv6EMsZbmX8prFvH5JH5ayzAnwPwb9jrEu + rGPLKOPLKBcrmM8VqyhTbMvfg/2MWE0ZEdasZh+wQF9t3Tr2B6ZrqfPN+TWUobUzDdauZV9azz60YQ42 + bpiLjRvnYTP7trBhw8X874WUuenEBbwf64n1KKxT3bK+N268EBs3sY4pO8tXTGdZL8Qy9olly2f+B5Yu + nWGwjFhOrGT7runTB+uZlw20U5s2sI3Z77ZtYb+jv779cuEsXH3V2biOuuf6a4XzErjmfB4TLsS11O+X + cUyyddM5lGPaPmLDlmnYuPUCbNjGPFK/b76UsnMZfbjLZxAzccnlF+/CNo51tlzC8nBcsH7zBVi7fjpW + UnevWD0HS1j/Cyjr8+g7zJnPdOFszF88BwuYLqA/u5B9YBHlf5FJicVzsZiyb/mhy9n+wgr28ZWCdKXB + rN9hBetCWMVnCqtZLwZs23Xr1D7z2S4LsHnjQkIp28kC227T+jnYunkBtm1dYrCFbbjJtOl8bFxPH3cV + +yhlfBnrfQXbcjXbcP0m2o5t9IMun4PLrpxNXEzMxGXbL+rDhf22+6DzwlXUKULf/qVXJXDJlbRfxLar + 2B859tkN9tF+2MZj/XHJ9t3YdsX5uITYdsU0bLt8GrZQFjZtOwcbhS3nGmzaymP9QX9zF7i/mePUTZSB + XdjMa7YksIXbWzb1xzTWHZ+7hfmiDFxCP+DSrSwXxx+Xc/x8uVLism06xjrqw+UcK15Be3HFpfOw/TKO + FwwWYTttSWJ7Ca64bFkflidw+WqDy4nLLhNW4ZJLV+LSS1dh2zZi6wps2bKc+V1BKE1g8+ZVLNNqg02b + V2L9xhVYt34Z+/ASrF23BKvXLk5gzWL27SXU3RwbbVyFTZtW8X5rcM1VW3HV9k3U+xy30S809oT6dxdW + 0372YdVKjp9WLGSfpvwyXcrx1eIlCyjf8wmlu7Hwv4B1fjFtwlKNB5ctwvLlS3jfpX1YzHtzfMb0d1ip + axLbOm/B+t+y5RpXcozJMd0i3nsBx3L/LZh8LGY+2B+XEEuXcexn+iPvSd/fQqKs/4n+1yTQl7/lzNcy + 7mt8SSzjeDEBbfPYkj4sZb6JlbzGgPlfwTxozGogu7h8N6QjVsmnWbWA9nuhwRpur2E7rDVgG/O5a6hb + VlPPCKs47l25lP/twwrZXgvaF3RvYhXvtZr3XL16EUHZoaysocysXrOQeodtT6zg82XLltBm7YmELUvY + M8Gyhwmb2C81tlH+4ByWSfJF+75mLnUZbdLa/xpr17Ls/cH/rJZvSZ9gBcffy2iLDcwz5rBs9EEMZhuY + /SUE9fBS+SdMjY+yeJ7BCunlRSzfwnlYMn8eFhNLF/Acr1khsC5/h131St1tkHimwWI+z4J5Nm0x87Za + fgx9t7W0t+uZf2EdtwVrfz39tvW00RvXLTTba+lHrqFvqHSt/NpVPN6HNfJr6U+s0vNZHmEVsZr7a/qw + jj7VevrjG+gLb1qzCFvWLMVmtutGysx65nXdItpZ5nPtwplYR5/mEtqNyzbPx6Wb52Lbxpn0peQn0q6v + oU9kUoLHLGyk/yVsoM+wgfZ6Pa9LgPeVDaePspa2Zb38t2W05yz/eo5V5J8LG1bNpz+2EBvXLmD+WG6W + eeNK2ifavI30azfSBm6QP72Sz6A/JmyiH7uJYwMD2sxNlINN+t8a3pP+/Bra6DW0jauJVRbWs15o99bR + Tq7fxPEudef6jct5rfQJ24jPVD9eJp1m3hn1f2/E4+xbsttLqDOWSHct+T30PsuCOWaluofkahd4P92T + fTAB2l+BbWH8RcpUf8hnEOQ/LDH70rlCwo9UfzW6fq3SRSy/9AP1uMYMrLc19LE0HlpLXb6Otn4962od + sZ71u4FttJl1s3ndbONHb5R/T794A322DSsuZJ3S76JfuI11dyn9hUs5hr1y68XEhbjqkvNx9aXTiHNx + 9SVn4ZptZ3F8dDZup32+k7jj8ulMOf4l7lBKH+HWyy/ATVvoq208EzdsOB03bDyN26fg+s2n4LrNp3Ks + dQ6uo02/krZ324ozsWHxOVi7mGMM1otkepV8Jsr8MmIJZXqxdNGS2Vi88GL2W7Yh62Q19feqPmhb/VTn + ltBHs6D9/xIL2AbEknn8j4G2+4NyQSxdwPo3SFy/jP8Vli9KYAV9QWEVdc7vwPz0x2rK2x+D+pjpcuVp + Pu+9IIHl9C2FFdRh2te5pfNYJqXmOh3XNdRtxFL9T+MwwpRrPuWoHxazTP1hlWcX+Kzfg89h+YRlKifL + ZGE122f96qUcY62g70m/hNi0cQ1997X0o9bTD1/HY/RT1q0016xfu4xjPbYV/2fsE+vLjBn5HAvWOFL6 + WVhFGyqsXrqE/6HdNDaV40hr24D2V+Dx5YvZJ4mli9gXBW0L9BMSoN9ALKctFlYs243lfIbusYx9Xv12 + Mdt7EWVi4ZyLsVApMZ91Pp91PI/tIcj3/x3mzsHcObqW9cvnL6HvsVgyxLQ/lDelixYStDsWrOcsYlv8 + DqwTYQnbWDB6hflUflU3a1csZ59nHa9eyX6+irp5Dfv4Wo4H1iewIYGN6zcYbNiwgWO+9dQnq2mbV9CH + Wc6+tQQLFi3C/IULd8Hy34QFtJULaScXsGwWFrFsC1lmC4ss8LgguyoskZ1l+ZRvvY9fu2YZxzFrcPWV + l+CG67bj5huvwW1/ugF33nYL7rrt5j7chDtvvRF36Pit1/Hcjbjz9utx9+034K47md5xPe6648bduPNG + 3Hrr9bjxhqtw5fYt9N8pf/R711P2VtJfWkq9+nvdTDBf/bG7fvvO9yGhwwlt9zuesBv/DbBP94el3y0s + oQ7bE4spV8Ii9r3FlLVFlDml8mP65ykB2ZvdkC3bbc94XjZJMr3LXiX8UgvynwWLp9mFZUtMuoT++iL2 + LUHbFhZxHLCQtk7jgd1jgt3Pt+R1z/xZ3MtuME+LllCW2ffkHy9dTju2grp8JeV5NW3bGqxbs5byTNld + t4H6ZCP1yyaO0TYbbN28KYFNGwy2UOckQD1EbN242mDbprW4ZMs6XLplE8dwm4mtxBZcvnUzLuOxSzdv + oL1bT39oPbZtWJfA+jVM1+AS6rJLNvO/TC/buhHbL9mCK7bxPlv5P95zq3TeeupAytmGNeyDa+hrrF5G + u7uU+o5+NbGW2/2xTueJ3x/ntdSnq4m1PKd09WrWx6pltG/UURw3SWep3Ywuo15bvoTPWLUa11x9Ne67 + 929Iwu9+vxBfEZ8Q7xJvEm8Q/+oH7b++Ryr8m3irD9p+e/f+Tt5nB6/d8QrxIo+9TOher/VtCy/wun8C + vz4C/PwPZuVBpg8BPz4KfP8E8N1T3H6ax5/hPZhC4DFw32w/2W//OeJ5XsftX3luJ9OfHwN++Dvw0994 + 7F6euxv47Q5edyvBdOddPMZz4HW6/2+6B/OLV3mO+dvB9DeW4Zd3iPd4jw/78D7ButrB4ztY1t9Y7l9Y + 3l+5baBzvH5n33X67w7+z9TzN33pZ8THhM7xGT+9RDzL/D7OMrMOTD2oPojfHua9WCe/8dxvrK9feO13 + vPYblv1n5nkHj+1kXZh65PU/ssw/3s86ZPod0+90jP//mf8Xvud13/CYBZ0Xvn+A92b6I+vqR9bPr7cx + f6qr24k7iT/xWbfwHky/5/73vO5rtpva6Qe1sdr/I+Jr4kfiZ+L/zW9nH34lrPt9xzyo7oQviE/5bLUR + 6/9nytZvbDMjo5JjyttvSnXdDuJ/48/K2q6fdn4jfiKsvGpbqfqYUuuY2v8DQn1Bcsy2xl94+ib+9doE + fiZ+up7b1yXwA/eF768mtnOb+JnbO3gMNxJsF9xA8FoDHbuZYFuZtqPs6xm/Mv1Zbcd2/VV9gcfAdsSf + +64RrOv/n3bsRbXRKooC8Pu/ggjeUHwFRfCJRGecDknaJLO+06yy+UnjlFFhmB5YnPv59177ljZr63zO + 8Kk7PhV77/gKv/otciR+dr9nP3h/gfEuvsRvV3wmzldcxR5HeYLt/g7wcImBp5zinDh0N++L0zM/pEfG + e3LzSTICPekbrs7h4/TzIy+Lt+zBDq+X8b3z4e78bfB15l8FP2aMh8h6jE3u48Pv/ggi4z6+t4v9DrWd + +JUr2U8+S85Z+Yee4eVI5l+ie2R7SNzsIuvbyPYm+Ct4Gxvdpd9FjkPkgoeMF7J+SL+P3djoXfh/E9zl + zX1sZO0hXBzDxYm9c3fZXI8TupkDzvBDLzlObw3YNjlgcY37u0B80K9jjU9bS4yt2pD4PsVGh3B0yN2D + /E33+MR609tkiR5nflm7dP59zn8TfJfxDxdkbfWx28JPwZQ/OXr5Zjg4RYfTr5Eu/C6dCv5rj47xuxVT + 6gvdxD5fS95YesjDfK75w5huyeUrb+Ak+fWpRpmL0+DEf+WUcAByTrE3T+5fiI/D/QUPeXviJEdecMz3 + D+n36kp6OEZOOJH3zyD59BRZHzLf2ye39cve0m+CDQt6d/z+MneP/viJXsfUErXlnJqrFq4+9WLxn1ha + NqrNxErtyg/VBrZPfhCzp8TAgtqsHojxmXvlyEJeBPsgz4O19tDcWXT9FuY5b/netWbdWX6OH/GNU3zh + 0rxr5Z1OYJ488VTL9WDNnjO9C8a1j7HvgXoxawaY661V/sLaNVRfZ/TlFay17/sFGdyfa52Tky6Nl+oM + 5YJPQXmpX1rzBvk/pbXYAh22c98op2Ds2+W9Mle+nnOmZ8kMXe+ZzmdslVu9b9dmk3M8t3XtJa26XbtX + 3betdidTfWuichbsMuG+nu3tl1dwf+raM2APz/jDczkr/1C/YIvy3De3qLyFb9BLTxZn2MI7arE8Jn/7 + rQfqspwtn/e3ICQ3r1yvdrsD5t6of5PfvJCDG9eNbXDWnAzkwRsZD7HMfZg0npzqr9nsWqv/4Hgbl1De + t/tdL2/W9GxRNKfZ8w3oHm63b1qrPb3NlvTGTWrRqqeA044L+yA3QufFPFt7gLcm5t4W7Nf63XHR+/1e + 5Zj2NWfjuTZlvAZntr5Qv+7YuvlEYwGfRfeaWxpr8OhPj+BDRfNC/USba9fazCe1O5g/55fsT0Z2n7L0 + nXn3Y337tb22beM703+M61u3MP1wixkn2+bu/91uyT1jG7Yx33OaXn5u/nfu32y+511960ehBsgHclTr + xawd2/zVetRa0tpS+X2juWXqOe1TvuSq8uK+91ufoHxAz/W93vGNiebAa82d5/Y+t4ZDuuCovJWn8oqP + 8lT0t8KsX7Vr7xpbV0PVxtZrf/uB//f4v878HVbMPb/Z/O+uf3/3f8Y9l7fW39neJtOtRl/6sP1zzd70 + hfrKNbR5d/rmP7Xe773n8NLmznx3tu5Nnf7rVjmuyfMlNDqLhZfw8Cl2+Zj3v6SGC3zWBsbtO77WkuNO + aodc9rk2uk2dX9tru9XO5w/tQZPD3m4CDwAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form1.Designer.cs b/Source/Krypton Components/TestForm/Form1.Designer.cs deleted file mode 100644 index abcc994c2..000000000 --- a/Source/Krypton Components/TestForm/Form1.Designer.cs +++ /dev/null @@ -1,431 +0,0 @@ -namespace TestForm -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); - this.kryptonButton7 = new Krypton.Toolkit.KryptonButton(); - this.kryptonButton6 = new Krypton.Toolkit.KryptonButton(); - this.kbtnExit = new Krypton.Toolkit.KryptonButton(); - this.kryptonButton5 = new Krypton.Toolkit.KryptonButton(); - this.kryptonButton4 = new Krypton.Toolkit.KryptonButton(); - this.kbtnVisualStudio2010Theme = new Krypton.Toolkit.KryptonButton(); - this.kchkUseProgressValueAsText = new Krypton.Toolkit.KryptonCheckBox(); - this.kryptonProgressBar1 = new Krypton.Toolkit.KryptonProgressBar(); - this.ktrkProgressValues = new Krypton.Toolkit.KryptonTrackBar(); - this.kryptonButton3 = new Krypton.Toolkit.KryptonButton(); - this.kbtnIntegratedToolbar = new Krypton.Toolkit.KryptonButton(); - this.kbtnTestMessagebox = new Krypton.Toolkit.KryptonButton(); - this.kryptonButton2 = new Krypton.Toolkit.KryptonButton(); - this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); - this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); - this.kryptonContextMenu1 = new Krypton.Toolkit.KryptonContextMenu(); - this.kryptonContextMenuItems1 = new Krypton.Toolkit.KryptonContextMenuItems(); - this.kryptonContextMenuItem1 = new Krypton.Toolkit.KryptonContextMenuItem(); - this.kryptonContextMenuItem2 = new Krypton.Toolkit.KryptonContextMenuItem(); - this.kryptonContextMenuItem3 = new Krypton.Toolkit.KryptonContextMenuItem(); - this.kryptonListBox1 = new Krypton.Toolkit.KryptonListBox(); - this.kryptonTextBox1 = new Krypton.Toolkit.KryptonTextBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.kryptonLanguageManager1 = new Krypton.Toolkit.KryptonLanguageManager(); - this.kryptonCustomPaletteBase1 = new Krypton.Toolkit.KryptonCustomPaletteBase(this.components); - this.kcmdMessageboxTest = new Krypton.Toolkit.KryptonCommand(); - this.buttonSpecAny1 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny2 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny3 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny4 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny5 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny6 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny7 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny8 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny9 = new Krypton.Toolkit.ButtonSpecAny(); - this.buttonSpecAny10 = new Krypton.Toolkit.ButtonSpecAny(); - this.kryptonIntegratedToolbarPrintCommand1 = new Krypton.Toolkit.KryptonIntegratedToolbarPrintCommand(); - this.kryptonManager1 = new Krypton.Toolkit.KryptonManager(this.components); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); - this.kryptonPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); - this.SuspendLayout(); - // - // kryptonPanel1 - // - this.kryptonPanel1.Controls.Add(this.kryptonButton7); - this.kryptonPanel1.Controls.Add(this.kryptonButton6); - this.kryptonPanel1.Controls.Add(this.kbtnExit); - this.kryptonPanel1.Controls.Add(this.kryptonButton5); - this.kryptonPanel1.Controls.Add(this.kryptonButton4); - this.kryptonPanel1.Controls.Add(this.kbtnVisualStudio2010Theme); - this.kryptonPanel1.Controls.Add(this.kchkUseProgressValueAsText); - this.kryptonPanel1.Controls.Add(this.kryptonProgressBar1); - this.kryptonPanel1.Controls.Add(this.ktrkProgressValues); - this.kryptonPanel1.Controls.Add(this.kryptonButton3); - this.kryptonPanel1.Controls.Add(this.kbtnIntegratedToolbar); - this.kryptonPanel1.Controls.Add(this.kbtnTestMessagebox); - this.kryptonPanel1.Controls.Add(this.kryptonButton2); - this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); - this.kryptonPanel1.Controls.Add(this.kryptonButton1); - this.kryptonPanel1.Controls.Add(this.kryptonListBox1); - this.kryptonPanel1.Controls.Add(this.kryptonTextBox1); - this.kryptonPanel1.Controls.Add(this.textBox1); - this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); - this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(2); - this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.Size = new System.Drawing.Size(600, 563); - this.kryptonPanel1.TabIndex = 0; - // - // kryptonButton7 - // - this.kryptonButton7.Location = new System.Drawing.Point(300, 456); - this.kryptonButton7.Name = "kryptonButton7"; - this.kryptonButton7.Size = new System.Drawing.Size(90, 25); - this.kryptonButton7.TabIndex = 17; - this.kryptonButton7.Values.Text = "Export"; - this.kryptonButton7.Click += new System.EventHandler(this.kryptonButton7_Click); - // - // kryptonButton6 - // - this.kryptonButton6.Location = new System.Drawing.Point(203, 456); - this.kryptonButton6.Name = "kryptonButton6"; - this.kryptonButton6.Size = new System.Drawing.Size(90, 25); - this.kryptonButton6.TabIndex = 16; - this.kryptonButton6.Values.Text = "Import"; - this.kryptonButton6.Click += new System.EventHandler(this.kryptonButton6_Click); - // - // kbtnExit - // - this.kbtnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.kbtnExit.Location = new System.Drawing.Point(498, 526); - this.kbtnExit.Name = "kbtnExit"; - this.kbtnExit.Size = new System.Drawing.Size(90, 25); - this.kbtnExit.TabIndex = 15; - this.kbtnExit.Values.Text = "Exit"; - this.kbtnExit.Click += new System.EventHandler(this.kbtnExit_Click); - // - // kryptonButton5 - // - this.kryptonButton5.Location = new System.Drawing.Point(14, 353); - this.kryptonButton5.Name = "kryptonButton5"; - this.kryptonButton5.Size = new System.Drawing.Size(183, 25); - this.kryptonButton5.TabIndex = 1; - this.kryptonButton5.Values.Text = "Powered by Control"; - this.kryptonButton5.Click += new System.EventHandler(this.kryptonButton5_Click); - // - // kryptonButton4 - // - this.kryptonButton4.Location = new System.Drawing.Point(13, 195); - this.kryptonButton4.Name = "kryptonButton4"; - this.kryptonButton4.Size = new System.Drawing.Size(185, 25); - this.kryptonButton4.TabIndex = 14; - this.kryptonButton4.Values.Text = "Form 4"; - // - // kbtnVisualStudio2010Theme - // - this.kbtnVisualStudio2010Theme.Location = new System.Drawing.Point(14, 322); - this.kbtnVisualStudio2010Theme.Name = "kbtnVisualStudio2010Theme"; - this.kbtnVisualStudio2010Theme.Size = new System.Drawing.Size(184, 25); - this.kbtnVisualStudio2010Theme.TabIndex = 13; - this.kbtnVisualStudio2010Theme.Values.Text = "Visual Studio 2010 Theme (Form5)"; - // - // kchkUseProgressValueAsText - // - this.kchkUseProgressValueAsText.Location = new System.Drawing.Point(202, 429); - this.kchkUseProgressValueAsText.Name = "kchkUseProgressValueAsText"; - this.kchkUseProgressValueAsText.Size = new System.Drawing.Size(165, 20); - this.kchkUseProgressValueAsText.TabIndex = 12; - this.kchkUseProgressValueAsText.Values.Text = "Use progress value as text"; - // - // kryptonProgressBar1 - // - this.kryptonProgressBar1.Location = new System.Drawing.Point(202, 396); - this.kryptonProgressBar1.Name = "kryptonProgressBar1"; - this.kryptonProgressBar1.Size = new System.Drawing.Size(388, 26); - this.kryptonProgressBar1.StateCommon.Back.Color1 = System.Drawing.Color.Green; - this.kryptonProgressBar1.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; - this.kryptonProgressBar1.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; - this.kryptonProgressBar1.TabIndex = 11; - this.kryptonProgressBar1.Text = "kryptonProgressBar1"; - this.kryptonProgressBar1.Values.Text = "kryptonProgressBar1"; - // - // ktrkProgressValues - // - this.ktrkProgressValues.Location = new System.Drawing.Point(202, 362); - this.ktrkProgressValues.Maximum = 100; - this.ktrkProgressValues.Name = "ktrkProgressValues"; - this.ktrkProgressValues.Size = new System.Drawing.Size(388, 33); - this.ktrkProgressValues.TabIndex = 10; - this.ktrkProgressValues.TickStyle = System.Windows.Forms.TickStyle.Both; - // - // kryptonButton3 - // - this.kryptonButton3.Location = new System.Drawing.Point(14, 290); - this.kryptonButton3.Name = "kryptonButton3"; - this.kryptonButton3.Size = new System.Drawing.Size(184, 25); - this.kryptonButton3.TabIndex = 9; - this.kryptonButton3.Values.Text = "ThemeBrowser Form"; - // - // kbtnIntegratedToolbar - // - this.kbtnIntegratedToolbar.Location = new System.Drawing.Point(14, 258); - this.kbtnIntegratedToolbar.Name = "kbtnIntegratedToolbar"; - this.kbtnIntegratedToolbar.Size = new System.Drawing.Size(184, 25); - this.kbtnIntegratedToolbar.TabIndex = 8; - this.kbtnIntegratedToolbar.Values.Text = "Integrated Toolbar (Form5)"; - // - // kbtnTestMessagebox - // - this.kbtnTestMessagebox.Location = new System.Drawing.Point(13, 227); - this.kbtnTestMessagebox.Name = "kbtnTestMessagebox"; - this.kbtnTestMessagebox.Size = new System.Drawing.Size(185, 25); - this.kbtnTestMessagebox.TabIndex = 7; - this.kbtnTestMessagebox.Values.Text = "Test Messagebox"; - // - // kryptonButton2 - // - this.kryptonButton2.Location = new System.Drawing.Point(13, 163); - this.kryptonButton2.Name = "kryptonButton2"; - this.kryptonButton2.Size = new System.Drawing.Size(185, 25); - this.kryptonButton2.TabIndex = 6; - this.kryptonButton2.Values.Text = "Ribbon (Form3)"; - this.kryptonButton2.Click += new System.EventHandler(this.kryptonButton2_Click); - // - // kryptonThemeComboBox1 - // - this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; - this.kryptonThemeComboBox1.DisplayMember = "Key"; - this.kryptonThemeComboBox1.DropDownWidth = 121; - this.kryptonThemeComboBox1.IntegralHeight = false; - this.kryptonThemeComboBox1.Location = new System.Drawing.Point(12, 12); - this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; - this.kryptonThemeComboBox1.Size = new System.Drawing.Size(185, 21); - this.kryptonThemeComboBox1.StateCommon.ComboBox.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) - | Krypton.Toolkit.PaletteDrawBorders.Left) - | Krypton.Toolkit.PaletteDrawBorders.Right))); - this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; - this.kryptonThemeComboBox1.TabIndex = 4; - this.kryptonThemeComboBox1.ValueMember = "Value"; - // - // kryptonButton1 - // - this.kryptonButton1.KryptonContextMenu = this.kryptonContextMenu1; - this.kryptonButton1.Location = new System.Drawing.Point(12, 132); - this.kryptonButton1.Name = "kryptonButton1"; - this.kryptonButton1.ShowSplitOption = true; - this.kryptonButton1.Size = new System.Drawing.Size(185, 25); - this.kryptonButton1.TabIndex = 5; - this.kryptonButton1.Values.Text = "Button (form2)"; - // - // kryptonContextMenu1 - // - this.kryptonContextMenu1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { - this.kryptonContextMenuItems1}); - // - // kryptonContextMenuItems1 - // - this.kryptonContextMenuItems1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { - this.kryptonContextMenuItem1, - this.kryptonContextMenuItem2, - this.kryptonContextMenuItem3}); - // - // kryptonContextMenuItem1 - // - this.kryptonContextMenuItem1.Text = "Menu Item 1"; - this.kryptonContextMenuItem1.ToolTipValues.Description = "Multi lin Description:\r\n- Match thing 1\r\n- Match thing 2\r\n\r\nPlacement mode: Right" + - ""; - this.kryptonContextMenuItem1.ToolTipValues.EnableToolTips = true; - this.kryptonContextMenuItem1.ToolTipValues.Heading = "Menu Tooltip Heading"; - this.kryptonContextMenuItem1.ToolTipValues.ToolTipPosition.PlacementMode = Krypton.Toolkit.PlacementMode.Right; - // - // kryptonContextMenuItem2 - // - this.kryptonContextMenuItem2.Text = "Menu Item 2"; - // - // kryptonContextMenuItem3 - // - this.kryptonContextMenuItem3.Text = "Menu Item 3"; - // - // kryptonListBox1 - // - this.kryptonListBox1.Location = new System.Drawing.Point(203, 9); - this.kryptonListBox1.Margin = new System.Windows.Forms.Padding(2); - this.kryptonListBox1.Name = "kryptonListBox1"; - this.kryptonListBox1.Size = new System.Drawing.Size(388, 346); - this.kryptonListBox1.TabIndex = 2; - // - // kryptonTextBox1 - // - this.kryptonTextBox1.Location = new System.Drawing.Point(58, 104); - this.kryptonTextBox1.Margin = new System.Windows.Forms.Padding(2); - this.kryptonTextBox1.Name = "kryptonTextBox1"; - this.kryptonTextBox1.Size = new System.Drawing.Size(75, 23); - this.kryptonTextBox1.TabIndex = 1; - this.kryptonTextBox1.Text = "kryptonTextBox1"; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(55, 49); - this.textBox1.Margin = new System.Windows.Forms.Padding(2); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(76, 20); - this.textBox1.TabIndex = 0; - // - // kryptonCustomPaletteBase1 - // - this.kryptonCustomPaletteBase1.BaseFont = new System.Drawing.Font("Segoe UI", 9F); - this.kryptonCustomPaletteBase1.BaseFontSize = 9F; - this.kryptonCustomPaletteBase1.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom; - this.kryptonCustomPaletteBase1.ThemeName = null; - this.kryptonCustomPaletteBase1.UseKryptonFileDialogs = true; - // - // kcmdMessageboxTest - // - this.kcmdMessageboxTest.Text = "kryptonCommand1"; - // - // buttonSpecAny1 - // - this.buttonSpecAny1.UniqueName = "dd7cce66eb3d4d97a9536f5d03a58dd5"; - // - // buttonSpecAny2 - // - this.buttonSpecAny2.UniqueName = "01c062f324854832b96667cacd7d1a77"; - // - // buttonSpecAny3 - // - this.buttonSpecAny3.UniqueName = "be5331ab7c484486a10d7094d39cd05e"; - // - // buttonSpecAny4 - // - this.buttonSpecAny4.UniqueName = "e8dbb053058c44ed9c8f2b7c51ec1261"; - // - // buttonSpecAny5 - // - this.buttonSpecAny5.UniqueName = "abaa2bdd24704458afca577b2da97ed2"; - // - // buttonSpecAny6 - // - this.buttonSpecAny6.UniqueName = "17c90049490f478399fdad972722b324"; - // - // buttonSpecAny7 - // - this.buttonSpecAny7.UniqueName = "8ec878c93ad347528009c3a5e4a71345"; - // - // buttonSpecAny8 - // - this.buttonSpecAny8.UniqueName = "1cd972225f3441b5ade70ac3c02d3949"; - // - // buttonSpecAny9 - // - this.buttonSpecAny9.UniqueName = "1d2714d06d564ef580dff961d56d525a"; - // - // buttonSpecAny10 - // - this.buttonSpecAny10.UniqueName = "8b3bf64a4cd7424d9479e809c7485ae7"; - // - // kryptonIntegratedToolbarPrintCommand1 - // - this.kryptonIntegratedToolbarPrintCommand1.Text = "Print"; - // - // kryptonManager1 - // - this.kryptonManager1.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.SparklePurpleLightMode; - // - // Form1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ButtonSpecs.Add(this.buttonSpecAny1); - this.ButtonSpecs.Add(this.buttonSpecAny2); - this.ButtonSpecs.Add(this.buttonSpecAny3); - this.ButtonSpecs.Add(this.buttonSpecAny4); - this.ButtonSpecs.Add(this.buttonSpecAny5); - this.ButtonSpecs.Add(this.buttonSpecAny6); - this.ButtonSpecs.Add(this.buttonSpecAny7); - this.ButtonSpecs.Add(this.buttonSpecAny8); - this.ButtonSpecs.Add(this.buttonSpecAny9); - this.ButtonSpecs.Add(this.buttonSpecAny10); - this.ClientSize = new System.Drawing.Size(600, 563); - this.Controls.Add(this.kryptonPanel1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; - this.FormTitleAlign = Krypton.Toolkit.PaletteRelativeAlign.Inherit; - this.Margin = new System.Windows.Forms.Padding(2); - this.Name = "Form1"; - this.Text = "Form1"; - this.WindowState = System.Windows.Forms.FormWindowState.Maximized; - this.Load += new System.EventHandler(this.Form1_Load); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); - this.kryptonPanel1.ResumeLayout(false); - this.kryptonPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private Krypton.Toolkit.KryptonPanel kryptonPanel1; - private Krypton.Toolkit.KryptonTextBox kryptonTextBox1; - private System.Windows.Forms.TextBox textBox1; - private Krypton.Toolkit.KryptonListBox kryptonListBox1; - private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; - private Krypton.Toolkit.KryptonButton kryptonButton1; - private Krypton.Toolkit.KryptonButton kryptonButton2; - private Krypton.Toolkit.KryptonLanguageManager kryptonLanguageManager1; - private Krypton.Toolkit.KryptonCustomPaletteBase kryptonCustomPaletteBase1; - private Krypton.Toolkit.KryptonCommand kcmdMessageboxTest; - private Krypton.Toolkit.KryptonButton kbtnTestMessagebox; - private Krypton.Toolkit.KryptonContextMenu kryptonContextMenu1; - private Krypton.Toolkit.KryptonContextMenuItems kryptonContextMenuItems1; - private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem1; - private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem2; - private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem3; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny1; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny2; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny3; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny4; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny5; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny6; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny7; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny8; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny9; - private Krypton.Toolkit.ButtonSpecAny buttonSpecAny10; - private Krypton.Toolkit.KryptonIntegratedToolbarPrintCommand kryptonIntegratedToolbarPrintCommand1; - private Krypton.Toolkit.KryptonButton kbtnIntegratedToolbar; - private Krypton.Toolkit.KryptonManager kryptonManager1; - private Krypton.Toolkit.KryptonButton kryptonButton3; - private Krypton.Toolkit.KryptonTrackBar ktrkProgressValues; - private Krypton.Toolkit.KryptonProgressBar kryptonProgressBar1; - private Krypton.Toolkit.KryptonCheckBox kchkUseProgressValueAsText; - private Krypton.Toolkit.KryptonButton kbtnVisualStudio2010Theme; - private Krypton.Toolkit.KryptonButton kryptonButton4; - private Krypton.Toolkit.KryptonButton kryptonButton5; - private Krypton.Toolkit.KryptonButton kbtnExit; - private Krypton.Toolkit.KryptonButton kryptonButton6; - private Krypton.Toolkit.KryptonButton kryptonButton7; - } -} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form1.cs b/Source/Krypton Components/TestForm/Form1.cs deleted file mode 100644 index 537bd0781..000000000 --- a/Source/Krypton Components/TestForm/Form1.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using System.ComponentModel; -using System.Diagnostics; -using System.Windows.Forms; - -using Krypton.Toolkit; - -namespace TestForm -{ - public partial class Form1 : KryptonForm - { - public Form1() - { - InitializeComponent(); - } - - private void AddEvent(string message) => kryptonListBox1.Items.Add(message); - - private void textBox1_Validated(object sender, EventArgs e) => AddEvent(nameof(textBox1_Validated)); - - private void kryptonTextBox1_Validated(object sender, EventArgs e) => AddEvent(nameof(kryptonTextBox1_Validated)); - - private void kryptonTextBox1_DoubleClick(object sender, EventArgs e) => AddEvent(nameof(kryptonTextBox1_DoubleClick)); - - private void kryptonTextBox1_MouseDoubleClick(object sender, MouseEventArgs e) => AddEvent(nameof(kryptonTextBox1_MouseDoubleClick)); - - private void kryptonTextBox1_MouseClick(object sender, MouseEventArgs e) => AddEvent(nameof(kryptonTextBox1_MouseClick)); - - private void kryptonTextBox1_Click(object sender, EventArgs e) => AddEvent(nameof(kryptonTextBox1_Click)); - - private void textBox1_MouseDoubleClick(object sender, MouseEventArgs e) => AddEvent(nameof(textBox1_MouseDoubleClick)); - - private void textBox1_MouseClick(object sender, MouseEventArgs e) => AddEvent(nameof(textBox1_MouseClick)); - - private void textBox1_DoubleClick(object sender, EventArgs e) => AddEvent(nameof(textBox1_DoubleClick)); - - private void textBox1_Click(object sender, EventArgs e) => AddEvent(nameof(textBox1_Click)); - - private void textBox1_Validating(object sender, CancelEventArgs e) => AddEvent(nameof(textBox1_Validating)); - - private void kryptonTextBox1_Validating(object sender, CancelEventArgs e) => AddEvent(nameof(kryptonTextBox1_Validating)); - - private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => AddEvent(nameof(textBox1_PreviewKeyDown)); - - private void kryptonTextBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => AddEvent(nameof(kryptonTextBox1_PreviewKeyDown)); - - private void kryptonTextBox1_KeyDown(object sender, KeyEventArgs e) => AddEvent(nameof(kryptonTextBox1_KeyDown)); - - private void kryptonTextBox1_KeyPress(object sender, KeyPressEventArgs e) => AddEvent(nameof(kryptonTextBox1_KeyPress)); - - private void kryptonTextBox1_KeyUp(object sender, KeyEventArgs e) => AddEvent(nameof(kryptonTextBox1_KeyUp)); - - private void textBox1_KeyDown(object sender, KeyEventArgs e) => AddEvent(nameof(textBox1_KeyDown)); - - private void textBox1_KeyPress(object sender, KeyPressEventArgs e) => AddEvent(nameof(textBox1_KeyPress)); - - private void textBox1_KeyUp(object sender, KeyEventArgs e) => AddEvent(nameof(textBox1_KeyUp)); - - private void kryptonButton1_Click(object sender, EventArgs e) - { - var form2 = new Form2(); - - form2.ShowDialog(); - } - - private void kryptonButton2_Click(object sender, EventArgs e) - { - var form3 = new Form3(); - - form3.ShowDialog(); - } - - private void kbtnTestMessagebox_Click(object sender, EventArgs e) => KryptonMessageBox.Show(@"This is a test!", @"Testing", KryptonMessageBoxButtons.OK, - KryptonMessageBoxIcon.Information, contentAreaType: MessageBoxContentAreaType.LinkLabel, - linkAreaCommand: kcmdMessageboxTest); - - private void kcmdMessageboxTest_Execute(object sender, EventArgs e) - { - try - { - Process.Start(@"C:\\Windows\\Notepad.exe"); - } - catch (Exception exception) - { - MessageBox.Show(exception.ToString()); - } - } - - private void kbtnIntegratedToolbar_Click(object sender, EventArgs e) - { - Form5 integratedToolBar = new Form5(); - - integratedToolBar.Show(); - } - - private void kryptonButton3_Click(object sender, EventArgs e) - { - KryptonThemeBrowserForm themeBrowser = new KryptonThemeBrowserForm(); - - themeBrowser.ShowDialog(); - } - - private void kchkUseProgressValueAsText_CheckedChanged(object sender, EventArgs e) - { - kryptonProgressBar1.UseValueAsText = kchkUseProgressValueAsText.Checked; - } - - private void ktrkProgressValues_ValueChanged(object sender, EventArgs e) - { - kryptonProgressBar1.Value = ktrkProgressValues.Value; - } - - private void kbtnVisualStudio2010Theme_Click(object sender, EventArgs e) - { - Form5 vsTheme = new Form5(); - - vsTheme.Show(); - } - - private void kryptonButton4_Click(object sender, EventArgs e) - { - new Form4().Show(); - } - - private void kryptonButton5_Click(object sender, EventArgs e) - { - Form6 poweredByControl = new Form6(); - - poweredByControl.Show(); - } - - private void Form1_Load(object sender, EventArgs e) - { - } - - private void kbtnExit_Click(object sender, EventArgs e) - { - Application.Exit(); - } - - private void kryptonButton6_Click(object sender, EventArgs e) - { - kryptonCustomPaletteBase1.Import(); - } - - private void kryptonButton7_Click(object sender, EventArgs e) - { - kryptonCustomPaletteBase1.Export(); - } - } -} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form2.cs b/Source/Krypton Components/TestForm/Form2.cs deleted file mode 100644 index 2cc5115f3..000000000 --- a/Source/Krypton Components/TestForm/Form2.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Krypton.Toolkit; - -namespace TestForm -{ - public partial class Form2 : KryptonForm - { - public Form2() - { - InitializeComponent(); - } - } -} diff --git a/Source/Krypton Components/TestForm/Form3.cs b/Source/Krypton Components/TestForm/Form3.cs deleted file mode 100644 index 732f14909..000000000 --- a/Source/Krypton Components/TestForm/Form3.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -using Krypton.Toolkit; - -namespace TestForm -{ - public partial class Form3 : KryptonForm - { - public Form3() - { - InitializeComponent(); - } - } -} diff --git a/Source/Krypton Components/TestForm/Form4.cs b/Source/Krypton Components/TestForm/Form4.cs deleted file mode 100644 index 5377d54f2..000000000 --- a/Source/Krypton Components/TestForm/Form4.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Krypton.Toolkit; - -namespace TestForm -{ - public partial class Form4 : KryptonForm - { - public Form4() - { - InitializeComponent(); - } - } -} diff --git a/Source/Krypton Components/TestForm/Form5.cs b/Source/Krypton Components/TestForm/Form5.cs deleted file mode 100644 index cdb324db1..000000000 --- a/Source/Krypton Components/TestForm/Form5.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; - -using Krypton.Toolkit; - -namespace TestForm -{ - public partial class Form5 : KryptonForm - { - public Form5() - { - InitializeComponent(); - } - - private void kbtnKMBTest_Click(object sender, EventArgs e) - { - KryptonMessageBox.Show(@"Can you read this text?", @"Test", KryptonMessageBoxButtons.YesNo, - KryptonMessageBoxIcon.Question); - } - - private void ktrkProgressValues_ValueChanged(object sender, EventArgs e) - { - kryptonProgressBarToolStripItem1.Value = ktrkProgressValues.Value; - toolStripProgressBar1.Value = ktrkProgressValues.Value; - } - } -} diff --git a/Source/Krypton Components/TestForm/Form6.Designer.cs b/Source/Krypton Components/TestForm/Form6.Designer.cs deleted file mode 100644 index 98aa5aab7..000000000 --- a/Source/Krypton Components/TestForm/Form6.Designer.cs +++ /dev/null @@ -1,117 +0,0 @@ -namespace TestForm -{ - partial class Form6 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); - this.kcmbToolkitType = new Krypton.Toolkit.KryptonComboBox(); - this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); - this.kcbThemeOptions = new Krypton.Toolkit.KryptonCheckBox(); - this.kryptonToolkitPoweredByControl1 = new Krypton.Toolkit.KryptonToolkitPoweredByControl(); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); - this.kryptonPanel1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.kcmbToolkitType)).BeginInit(); - this.SuspendLayout(); - // - // kryptonPanel1 - // - this.kryptonPanel1.Controls.Add(this.kryptonToolkitPoweredByControl1); - this.kryptonPanel1.Controls.Add(this.kcmbToolkitType); - this.kryptonPanel1.Controls.Add(this.kryptonLabel1); - this.kryptonPanel1.Controls.Add(this.kcbThemeOptions); - this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); - this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.Size = new System.Drawing.Size(800, 450); - this.kryptonPanel1.TabIndex = 0; - // - // kcmbToolkitType - // - this.kcmbToolkitType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.kcmbToolkitType.DropDownWidth = 121; - this.kcmbToolkitType.IntegralHeight = false; - this.kcmbToolkitType.Location = new System.Drawing.Point(296, 268); - this.kcmbToolkitType.Name = "kcmbToolkitType"; - this.kcmbToolkitType.Size = new System.Drawing.Size(121, 21); - this.kcmbToolkitType.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; - this.kcmbToolkitType.TabIndex = 4; - this.kcmbToolkitType.SelectedIndexChanged += new System.EventHandler(this.kcmbToolkitType_SelectedIndexChanged); - // - // kryptonLabel1 - // - this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; - this.kryptonLabel1.Location = new System.Drawing.Point(202, 268); - this.kryptonLabel1.Name = "kryptonLabel1"; - this.kryptonLabel1.Size = new System.Drawing.Size(87, 20); - this.kryptonLabel1.TabIndex = 3; - this.kryptonLabel1.Values.Text = "Toolkit Type:"; - // - // kcbThemeOptions - // - this.kcbThemeOptions.Location = new System.Drawing.Point(55, 268); - this.kcbThemeOptions.Name = "kcbThemeOptions"; - this.kcbThemeOptions.Size = new System.Drawing.Size(140, 20); - this.kcbThemeOptions.TabIndex = 2; - this.kcbThemeOptions.Values.Text = "Show &Theme Options"; - this.kcbThemeOptions.CheckedChanged += new System.EventHandler(this.kcbThemeOptions_CheckedChanged); - // - // kryptonToolkitPoweredByControl1 - // - this.kryptonToolkitPoweredByControl1.AutoSize = true; - this.kryptonToolkitPoweredByControl1.Location = new System.Drawing.Point(55, 12); - this.kryptonToolkitPoweredByControl1.Name = "kryptonToolkitPoweredByControl1"; - this.kryptonToolkitPoweredByControl1.Size = new System.Drawing.Size(659, 134); - this.kryptonToolkitPoweredByControl1.TabIndex = 5; - this.kryptonToolkitPoweredByControl1.ToolkitType = Krypton.Toolkit.ToolkitType.Stable; - // - // Form6 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.kryptonPanel1); - this.Name = "Form6"; - this.Text = "Form6"; - this.Load += new System.EventHandler(this.Form6_Load); - ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); - this.kryptonPanel1.ResumeLayout(false); - this.kryptonPanel1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.kcmbToolkitType)).EndInit(); - this.ResumeLayout(false); - - } - - #endregion - - private Krypton.Toolkit.KryptonPanel kryptonPanel1; - private Krypton.Toolkit.KryptonCheckBox kcbThemeOptions; - private Krypton.Toolkit.KryptonLabel kryptonLabel1; - private Krypton.Toolkit.KryptonComboBox kcmbToolkitType; - private Krypton.Toolkit.KryptonToolkitPoweredByControl kryptonToolkitPoweredByControl1; - } -} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form6.cs b/Source/Krypton Components/TestForm/Form6.cs deleted file mode 100644 index 9c6858cda..000000000 --- a/Source/Krypton Components/TestForm/Form6.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -using Krypton.Toolkit; - -namespace TestForm -{ - public partial class Form6 : KryptonForm - { - public Form6() - { - InitializeComponent(); - } - - private void kcbThemeOptions_CheckedChanged(object sender, EventArgs e) - { - kryptonToolkitPoweredByControl1.ShowThemeOption = kcbThemeOptions.Checked; - } - - private void kcmbToolkitType_SelectedIndexChanged(object sender, EventArgs e) - { - // kryptonToolkitPoweredByControl1.ToolkitType = (ToolkitType)Enum.Parse(typeof(ToolkitType), kcmbToolkitType.Text); - } - - private void Form6_Load(object sender, EventArgs e) - { - //foreach (string value in Enum.GetNames(typeof(ToolkitType))) - //{ - // kcmbToolkitType.Items.Add(value); - //} - } - } -} diff --git a/Source/Krypton Components/TestForm/FormBorderTest.Designer.cs b/Source/Krypton Components/TestForm/FormBorderTest.Designer.cs new file mode 100644 index 000000000..01bc9eba5 --- /dev/null +++ b/Source/Krypton Components/TestForm/FormBorderTest.Designer.cs @@ -0,0 +1,105 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class FormBorderTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnExit = new Krypton.Toolkit.KryptonButton(); + this.kcmbBorderStyle = new Krypton.Toolkit.KryptonComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbBorderStyle)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kcmbBorderStyle); + this.kryptonPanel1.Controls.Add(this.kbtnExit); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(804, 454); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnExit + // + this.kbtnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.kbtnExit.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnExit.Location = new System.Drawing.Point(702, 417); + this.kbtnExit.Name = "kbtnExit"; + this.kbtnExit.Size = new System.Drawing.Size(90, 25); + this.kbtnExit.TabIndex = 39; + this.kbtnExit.Values.Text = "Exit"; + this.kbtnExit.Click += new System.EventHandler(this.kbtnExit_Click); + // + // kcmbBorderStyle + // + this.kcmbBorderStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbBorderStyle.DropDownWidth = 121; + this.kcmbBorderStyle.IntegralHeight = false; + this.kcmbBorderStyle.Location = new System.Drawing.Point(159, 107); + this.kcmbBorderStyle.Name = "kcmbBorderStyle"; + this.kcmbBorderStyle.Size = new System.Drawing.Size(270, 21); + this.kcmbBorderStyle.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbBorderStyle.TabIndex = 40; + this.kcmbBorderStyle.SelectedIndexChanged += new System.EventHandler(this.kcmbBorderStyle_SelectedIndexChanged); + // + // FormBorderTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kbtnExit; + this.ClientSize = new System.Drawing.Size(804, 454); + this.Controls.Add(this.kryptonPanel1); + this.Name = "FormBorderTest"; + this.Text = "FormBorderTest"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.Load += new System.EventHandler(this.FormBorderTest_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kcmbBorderStyle)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonButton kbtnExit; + private Krypton.Toolkit.KryptonComboBox kcmbBorderStyle; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/FormBorderTest.cs b/Source/Krypton Components/TestForm/FormBorderTest.cs new file mode 100644 index 000000000..5250ca0b9 --- /dev/null +++ b/Source/Krypton Components/TestForm/FormBorderTest.cs @@ -0,0 +1,41 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class FormBorderTest : KryptonForm + { + public FormBorderTest() + { + InitializeComponent(); + } + + private void kbtnExit_Click(object sender, EventArgs e) + { + Close(); + } + + private void ChangeBorderStyle(FormBorderStyle borderStyle) => FormBorderStyle = borderStyle; + + private void FormBorderTest_Load(object sender, EventArgs e) + { + foreach (var value in Enum.GetValues(typeof(FormBorderStyle))) + { + kcmbBorderStyle.Items.Add(value); + } + + kcmbBorderStyle.SelectedIndex = 4; + } + + private void kcmbBorderStyle_SelectedIndexChanged(object sender, EventArgs e) + { + ChangeBorderStyle((FormBorderStyle)Enum.Parse(typeof(FormBorderStyle), kcmbBorderStyle.Text)); + } + } +} diff --git a/Source/Krypton Components/TestForm/FormBorderTest.resx b/Source/Krypton Components/TestForm/FormBorderTest.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/FormBorderTest.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/GlobalUsings.cs b/Source/Krypton Components/TestForm/GlobalUsings.cs new file mode 100644 index 000000000..bc21d0796 --- /dev/null +++ b/Source/Krypton Components/TestForm/GlobalUsings.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +// Global using directives + +global using System; +global using System.Collections; +global using System.ComponentModel; +global using System.Drawing; +global using System.Globalization; +global using System.Windows.Forms; + +global using Krypton.Toolkit; \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form4.Designer.cs b/Source/Krypton Components/TestForm/GroupBoxTest.Designer.cs similarity index 92% rename from Source/Krypton Components/TestForm/Form4.Designer.cs rename to Source/Krypton Components/TestForm/GroupBoxTest.Designer.cs index 8481bb249..8f9ec4e37 100644 --- a/Source/Krypton Components/TestForm/Form4.Designer.cs +++ b/Source/Krypton Components/TestForm/GroupBoxTest.Designer.cs @@ -1,6 +1,15 @@ -namespace TestForm +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm { - partial class Form4 + partial class GroupBoxTest { /// /// Required designer variable. @@ -28,6 +37,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.kryptonNavigator1 = new Krypton.Navigator.KryptonNavigator(); this.kryptonPage3 = new Krypton.Navigator.KryptonPage(); this.kryptonPage4 = new Krypton.Navigator.KryptonPage(); @@ -107,7 +117,7 @@ private void InitializeComponent() this.kryptonPage4.Margin = new System.Windows.Forms.Padding(4); this.kryptonPage4.MinimumSize = new System.Drawing.Size(200, 62); this.kryptonPage4.Name = "kryptonPage4"; - this.kryptonPage4.Size = new System.Drawing.Size(200, 123); + this.kryptonPage4.Size = new System.Drawing.Size(200, 122); this.kryptonPage4.Text = "kryptonPage4"; this.kryptonPage4.ToolTipTitle = "Page ToolTip"; this.kryptonPage4.UniqueName = "801c2ddef54f4384b79d26af7bf1e74a"; @@ -120,7 +130,7 @@ private void InitializeComponent() this.kryptonPage5.Margin = new System.Windows.Forms.Padding(4); this.kryptonPage5.MinimumSize = new System.Drawing.Size(200, 62); this.kryptonPage5.Name = "kryptonPage5"; - this.kryptonPage5.Size = new System.Drawing.Size(200, 123); + this.kryptonPage5.Size = new System.Drawing.Size(200, 122); this.kryptonPage5.Text = "kryptonPage5"; this.kryptonPage5.ToolTipTitle = "Page ToolTip"; this.kryptonPage5.UniqueName = "cb41c8b434b24d5cb168a330b0a8b375"; @@ -132,7 +142,7 @@ private void InitializeComponent() // kryptonGroupBox1 // this.kryptonGroupBox1.Location = new System.Drawing.Point(65, 66); - this.kryptonGroupBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.kryptonGroupBox1.Margin = new System.Windows.Forms.Padding(2); this.kryptonGroupBox1.Name = "kryptonGroupBox1"; // // kryptonGroupBox1.Panel @@ -140,7 +150,7 @@ private void InitializeComponent() this.kryptonGroupBox1.Panel.Controls.Add(this.kryptonThemeComboBox3); this.kryptonGroupBox1.Panel.Controls.Add(this.kryptonComboBox1); this.kryptonGroupBox1.Panel.Controls.Add(this.kryptonCheckBox1); - this.kryptonGroupBox1.Size = new System.Drawing.Size(277, 255); + this.kryptonGroupBox1.Size = new System.Drawing.Size(278, 255); this.kryptonGroupBox1.TabIndex = 1; // // kryptonThemeComboBox3 @@ -149,28 +159,27 @@ private void InitializeComponent() this.kryptonThemeComboBox3.DropDownWidth = 121; this.kryptonThemeComboBox3.IntegralHeight = false; this.kryptonThemeComboBox3.Location = new System.Drawing.Point(28, 174); + this.kryptonThemeComboBox3.Margin = new System.Windows.Forms.Padding(2); this.kryptonThemeComboBox3.Name = "kryptonThemeComboBox3"; this.kryptonThemeComboBox3.Size = new System.Drawing.Size(121, 25); - this.kryptonThemeComboBox3.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; this.kryptonThemeComboBox3.TabIndex = 2; this.kryptonThemeComboBox3.ValueMember = "Value"; // // kryptonComboBox1 // - this.kryptonComboBox1.DropDownWidth = 121; + this.kryptonComboBox1.DropDownWidth = 216; this.kryptonComboBox1.IntegralHeight = false; this.kryptonComboBox1.Location = new System.Drawing.Point(28, 98); - this.kryptonComboBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.kryptonComboBox1.Margin = new System.Windows.Forms.Padding(2); this.kryptonComboBox1.Name = "kryptonComboBox1"; - this.kryptonComboBox1.Size = new System.Drawing.Size(216, 32); - this.kryptonComboBox1.StateCommon.ComboBox.Content.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kryptonComboBox1.Size = new System.Drawing.Size(216, 25); this.kryptonComboBox1.TabIndex = 1; this.kryptonComboBox1.Text = "kryptonComboBox1"; // // kryptonCheckBox1 // - this.kryptonCheckBox1.Location = new System.Drawing.Point(45, 23); - this.kryptonCheckBox1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.kryptonCheckBox1.Location = new System.Drawing.Point(45, 22); + this.kryptonCheckBox1.Margin = new System.Windows.Forms.Padding(2); this.kryptonCheckBox1.Name = "kryptonCheckBox1"; this.kryptonCheckBox1.Size = new System.Drawing.Size(152, 24); this.kryptonCheckBox1.TabIndex = 0; @@ -192,26 +201,28 @@ private void InitializeComponent() // this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); this.kryptonPanel1.Location = new System.Drawing.Point(502, 254); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(2); this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.Size = new System.Drawing.Size(371, 207); + this.kryptonPanel1.Size = new System.Drawing.Size(371, 208); this.kryptonPanel1.TabIndex = 2; // // kryptonThemeComboBox1 // this.kryptonThemeComboBox1.DisplayMember = "Key"; - this.kryptonThemeComboBox1.DropDownWidth = 121; + this.kryptonThemeComboBox1.DropDownWidth = 250; this.kryptonThemeComboBox1.IntegralHeight = false; - this.kryptonThemeComboBox1.Location = new System.Drawing.Point(65, 93); + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(65, 92); + this.kryptonThemeComboBox1.Margin = new System.Windows.Forms.Padding(2); this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; - this.kryptonThemeComboBox1.Size = new System.Drawing.Size(250, 32); - this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(250, 25); this.kryptonThemeComboBox1.StateCommon.Item.Content.ShortText.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.kryptonThemeComboBox1.TabIndex = 0; this.kryptonThemeComboBox1.ValueMember = "Value"; // // kryptonGroupBox2 // - this.kryptonGroupBox2.Location = new System.Drawing.Point(83, 363); + this.kryptonGroupBox2.Location = new System.Drawing.Point(82, 362); + this.kryptonGroupBox2.Margin = new System.Windows.Forms.Padding(2); this.kryptonGroupBox2.Name = "kryptonGroupBox2"; // // kryptonGroupBox2.Panel @@ -225,34 +236,34 @@ private void InitializeComponent() this.kryptonThemeComboBox2.DisplayMember = "Key"; this.kryptonThemeComboBox2.DropDownWidth = 121; this.kryptonThemeComboBox2.IntegralHeight = false; - this.kryptonThemeComboBox2.Location = new System.Drawing.Point(27, 27); + this.kryptonThemeComboBox2.Location = new System.Drawing.Point(28, 28); + this.kryptonThemeComboBox2.Margin = new System.Windows.Forms.Padding(2); this.kryptonThemeComboBox2.Name = "kryptonThemeComboBox2"; this.kryptonThemeComboBox2.Size = new System.Drawing.Size(121, 25); - this.kryptonThemeComboBox2.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; this.kryptonThemeComboBox2.TabIndex = 0; this.kryptonThemeComboBox2.ValueMember = "Value"; // // kryptonGroup1 // this.kryptonGroup1.Location = new System.Drawing.Point(286, 385); + this.kryptonGroup1.Margin = new System.Windows.Forms.Padding(2); this.kryptonGroup1.Name = "kryptonGroup1"; this.kryptonGroup1.Size = new System.Drawing.Size(150, 150); this.kryptonGroup1.TabIndex = 4; // - // Form4 + // GroupBoxTest // this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(1067, 554); + this.ClientSize = new System.Drawing.Size(1070, 556); this.Controls.Add(this.kryptonGroup1); this.Controls.Add(this.kryptonGroupBox2); this.Controls.Add(this.kryptonPanel1); this.Controls.Add(this.kryptonGroupBox1); this.Controls.Add(this.kryptonNavigator1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Margin = new System.Windows.Forms.Padding(4); - this.Name = "Form4"; - this.Text = "Form4"; + this.Name = "GroupBoxTest"; + this.Text = "Group Box"; this.TopMost = true; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; ((System.ComponentModel.ISupportInitialize)(this.kryptonNavigator1)).EndInit(); @@ -286,8 +297,6 @@ private void InitializeComponent() #endregion private Krypton.Navigator.KryptonNavigator kryptonNavigator1; - private Krypton.Navigator.KryptonPage kryptonPage1; - private Krypton.Navigator.KryptonPage kryptonPage2; private Krypton.Toolkit.KryptonCommand kryptonCommand1; private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox1; private Krypton.Toolkit.KryptonComboBox kryptonComboBox1; diff --git a/Source/Krypton Components/TestForm/GroupBoxTest.cs b/Source/Krypton Components/TestForm/GroupBoxTest.cs new file mode 100644 index 000000000..9bfe57078 --- /dev/null +++ b/Source/Krypton Components/TestForm/GroupBoxTest.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class GroupBoxTest : KryptonForm + { + public GroupBoxTest() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/Form4.resx b/Source/Krypton Components/TestForm/GroupBoxTest.resx similarity index 100% rename from Source/Krypton Components/TestForm/Form4.resx rename to Source/Krypton Components/TestForm/GroupBoxTest.resx diff --git a/Source/Krypton Components/TestForm/Form3.Designer.cs b/Source/Krypton Components/TestForm/HeaderExamples.Designer.cs similarity index 57% rename from Source/Krypton Components/TestForm/Form3.Designer.cs rename to Source/Krypton Components/TestForm/HeaderExamples.Designer.cs index 6fc6e9793..083980cc3 100644 --- a/Source/Krypton Components/TestForm/Form3.Designer.cs +++ b/Source/Krypton Components/TestForm/HeaderExamples.Designer.cs @@ -1,6 +1,15 @@ -namespace TestForm +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm { - partial class Form3 + partial class HeaderExamples { /// /// Required designer variable. @@ -28,36 +37,31 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.kryptonRibbon1 = new Krypton.Ribbon.KryptonRibbon(); - ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon1)).BeginInit(); + this.kryptonHeader1 = new Krypton.Toolkit.KryptonHeader(); this.SuspendLayout(); // - // kryptonRibbon1 + // kryptonHeader1 // - this.kryptonRibbon1.AllowFormIntegrate = true; - this.kryptonRibbon1.InDesignHelperMode = true; - this.kryptonRibbon1.Name = "kryptonRibbon1"; - this.kryptonRibbon1.SelectedContext = null; - this.kryptonRibbon1.SelectedTab = null; - this.kryptonRibbon1.Size = new System.Drawing.Size(800, 143); - this.kryptonRibbon1.TabIndex = 0; + this.kryptonHeader1.Location = new System.Drawing.Point(13, 13); + this.kryptonHeader1.Name = "kryptonHeader1"; + this.kryptonHeader1.Size = new System.Drawing.Size(251, 31); + this.kryptonHeader1.TabIndex = 2; + this.kryptonHeader1.Values.Heading = "kryptonHeader1"; // - // Form3 + // HeaderExamples // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(800, 450); - this.Controls.Add(this.kryptonRibbon1); - this.Name = "Form3"; - this.Text = "Form3"; - ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon1)).EndInit(); + this.Controls.Add(this.kryptonHeader1); + this.Name = "HeaderExamples"; + this.Text = "HeaderExamples"; this.ResumeLayout(false); this.PerformLayout(); } #endregion - - private Krypton.Ribbon.KryptonRibbon kryptonRibbon1; + private KryptonHeader kryptonHeader1; } } \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/HeaderExamples.cs b/Source/Krypton Components/TestForm/HeaderExamples.cs new file mode 100644 index 000000000..df40937ad --- /dev/null +++ b/Source/Krypton Components/TestForm/HeaderExamples.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class HeaderExamples : /*Krypton*/Form + { + public HeaderExamples() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/HeaderExamples.resx b/Source/Krypton Components/TestForm/HeaderExamples.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/HeaderExamples.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/InputBoxTest.Designer.cs b/Source/Krypton Components/TestForm/InputBoxTest.Designer.cs new file mode 100644 index 000000000..6b538edd6 --- /dev/null +++ b/Source/Krypton Components/TestForm/InputBoxTest.Designer.cs @@ -0,0 +1,258 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class InputBoxTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InputBoxTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel(); + this.ktxtDefaultResponse = new Krypton.Toolkit.KryptonTextBox(); + this.krtxtPrompt = new Krypton.Toolkit.KryptonRichTextBox(); + this.ktxtCaption = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel(); + this.ktxtCueText = new Krypton.Toolkit.KryptonTextBox(); + this.kcbtnCueTextColor = new Krypton.Toolkit.KryptonColorButton(); + this.kcbUsePasswordOption = new Krypton.Toolkit.KryptonCheckBox(); + this.kcbUseRTLOption = new Krypton.Toolkit.KryptonCheckBox(); + this.kbtnCancel = new Krypton.Toolkit.KryptonButton(); + this.kbtnTest = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnTest); + this.kryptonPanel1.Controls.Add(this.kbtnCancel); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 256); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(579, 50); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 255); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(579, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.kcbUseRTLOption); + this.kryptonPanel2.Controls.Add(this.kcbUsePasswordOption); + this.kryptonPanel2.Controls.Add(this.kcbtnCueTextColor); + this.kryptonPanel2.Controls.Add(this.ktxtCueText); + this.kryptonPanel2.Controls.Add(this.kryptonLabel4); + this.kryptonPanel2.Controls.Add(this.ktxtCaption); + this.kryptonPanel2.Controls.Add(this.krtxtPrompt); + this.kryptonPanel2.Controls.Add(this.ktxtDefaultResponse); + this.kryptonPanel2.Controls.Add(this.kryptonLabel3); + this.kryptonPanel2.Controls.Add(this.kryptonLabel2); + this.kryptonPanel2.Controls.Add(this.kryptonLabel1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(579, 255); + this.kryptonPanel2.TabIndex = 2; + // + // kryptonLabel1 + // + this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kryptonLabel1.Location = new System.Drawing.Point(13, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(59, 20); + this.kryptonLabel1.TabIndex = 0; + this.kryptonLabel1.Values.Text = "Caption:"; + // + // kryptonLabel2 + // + this.kryptonLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kryptonLabel2.Location = new System.Drawing.Point(13, 127); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(123, 20); + this.kryptonLabel2.TabIndex = 1; + this.kryptonLabel2.Values.Text = "Default Respoonse:"; + // + // kryptonLabel3 + // + this.kryptonLabel3.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kryptonLabel3.Location = new System.Drawing.Point(13, 41); + this.kryptonLabel3.Name = "kryptonLabel3"; + this.kryptonLabel3.Size = new System.Drawing.Size(58, 20); + this.kryptonLabel3.TabIndex = 2; + this.kryptonLabel3.Values.Text = "Prompt:"; + // + // ktxtDefaultResponse + // + this.ktxtDefaultResponse.Location = new System.Drawing.Point(143, 127); + this.ktxtDefaultResponse.Name = "ktxtDefaultResponse"; + this.ktxtDefaultResponse.Size = new System.Drawing.Size(424, 23); + this.ktxtDefaultResponse.TabIndex = 3; + this.ktxtDefaultResponse.Text = "Default Response"; + // + // krtxtPrompt + // + this.krtxtPrompt.Location = new System.Drawing.Point(143, 41); + this.krtxtPrompt.Name = "krtxtPrompt"; + this.krtxtPrompt.Size = new System.Drawing.Size(423, 80); + this.krtxtPrompt.TabIndex = 4; + this.krtxtPrompt.Text = "Your prompt here..."; + // + // ktxtCaption + // + this.ktxtCaption.Location = new System.Drawing.Point(143, 13); + this.ktxtCaption.Name = "ktxtCaption"; + this.ktxtCaption.Size = new System.Drawing.Size(422, 23); + this.ktxtCaption.TabIndex = 5; + this.ktxtCaption.Text = "Caption"; + // + // kryptonLabel4 + // + this.kryptonLabel4.LabelStyle = Krypton.Toolkit.LabelStyle.BoldControl; + this.kryptonLabel4.Location = new System.Drawing.Point(71, 155); + this.kryptonLabel4.Name = "kryptonLabel4"; + this.kryptonLabel4.Size = new System.Drawing.Size(65, 20); + this.kryptonLabel4.TabIndex = 6; + this.kryptonLabel4.Values.Text = "Cue Text:"; + // + // ktxtCueText + // + this.ktxtCueText.Location = new System.Drawing.Point(143, 157); + this.ktxtCueText.Name = "ktxtCueText"; + this.ktxtCueText.Size = new System.Drawing.Size(424, 23); + this.ktxtCueText.TabIndex = 7; + // + // kcbtnCueTextColor + // + this.kcbtnCueTextColor.Location = new System.Drawing.Point(143, 187); + this.kcbtnCueTextColor.Name = "kcbtnCueTextColor"; + this.kcbtnCueTextColor.SelectedColor = System.Drawing.Color.Gray; + this.kcbtnCueTextColor.Size = new System.Drawing.Size(153, 25); + this.kcbtnCueTextColor.TabIndex = 8; + this.kcbtnCueTextColor.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonColorButton1.Values.Image"))); + this.kcbtnCueTextColor.Values.Text = "Cue Text Color"; + // + // kcbUsePasswordOption + // + this.kcbUsePasswordOption.Location = new System.Drawing.Point(143, 219); + this.kcbUsePasswordOption.Name = "kcbUsePasswordOption"; + this.kcbUsePasswordOption.Size = new System.Drawing.Size(140, 20); + this.kcbUsePasswordOption.TabIndex = 9; + this.kcbUsePasswordOption.Values.Text = "Use Password Option"; + // + // kcbUseRTLOption + // + this.kcbUseRTLOption.Location = new System.Drawing.Point(289, 219); + this.kcbUseRTLOption.Name = "kcbUseRTLOption"; + this.kcbUseRTLOption.Size = new System.Drawing.Size(108, 20); + this.kcbUseRTLOption.TabIndex = 10; + this.kcbUseRTLOption.Values.Text = "Use RTL Option"; + this.kcbUseRTLOption.CheckedChanged += new System.EventHandler(this.kcbUseRTLOption_CheckedChanged); + // + // kbtnCancel + // + this.kbtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnCancel.Location = new System.Drawing.Point(477, 13); + this.kbtnCancel.Name = "kbtnCancel"; + this.kbtnCancel.Size = new System.Drawing.Size(90, 25); + this.kbtnCancel.TabIndex = 0; + this.kbtnCancel.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnCancel.Values.Text = "Cance&l"; + this.kbtnCancel.Values.UseAsADialogButton = true; + // + // kbtnTest + // + this.kbtnTest.Location = new System.Drawing.Point(381, 13); + this.kbtnTest.Name = "kbtnTest"; + this.kbtnTest.Size = new System.Drawing.Size(90, 25); + this.kbtnTest.TabIndex = 1; + this.kbtnTest.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnTest.Values.Text = "&Test"; + this.kbtnTest.Click += new System.EventHandler(this.kbtnTest_Click); + // + // InputBoxTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(579, 306); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonBorderEdge1); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "InputBoxTest"; + this.Text = "InputBoxTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.kryptonPanel2.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private KryptonBorderEdge kryptonBorderEdge1; + private KryptonPanel kryptonPanel2; + private KryptonLabel kryptonLabel3; + private KryptonLabel kryptonLabel2; + private KryptonLabel kryptonLabel1; + private KryptonColorButton kcbtnCueTextColor; + private KryptonTextBox ktxtCueText; + private KryptonLabel kryptonLabel4; + private KryptonTextBox ktxtCaption; + private KryptonRichTextBox krtxtPrompt; + private KryptonTextBox ktxtDefaultResponse; + private KryptonCheckBox kcbUseRTLOption; + private KryptonCheckBox kcbUsePasswordOption; + private KryptonButton kbtnTest; + private KryptonButton kbtnCancel; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/InputBoxTest.cs b/Source/Krypton Components/TestForm/InputBoxTest.cs new file mode 100644 index 000000000..3b26cc0e2 --- /dev/null +++ b/Source/Krypton Components/TestForm/InputBoxTest.cs @@ -0,0 +1,44 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class InputBoxTest : KryptonForm + { + private KryptonUseRTLLayout _useRtlLayout = KryptonUseRTLLayout.No; + + public InputBoxTest() + { + InitializeComponent(); + } + + private void kbtnTest_Click(object sender, EventArgs e) + { + KryptonInputBoxData data = new KryptonInputBoxData() + { + Caption = ktxtCaption.Text, + CueColor = kcbtnCueTextColor.SelectedColor, + CueText = ktxtCueText.Text, + CueTypeface = null, + DefaultResponse = ktxtDefaultResponse.Text, + Owner = this, + Prompt = krtxtPrompt.Text, + UsePasswordOption = kcbUsePasswordOption.Checked, + UseRTLLayout = _useRtlLayout + }; + + KryptonInputBox.Show(data); + } + + private void kcbUseRTLOption_CheckedChanged(object sender, EventArgs e) + { + _useRtlLayout = kcbUseRTLOption.Checked ? KryptonUseRTLLayout.Yes : KryptonUseRTLLayout.No; + } + } +} diff --git a/Source/Krypton Components/TestForm/InputBoxTest.resx b/Source/Krypton Components/TestForm/InputBoxTest.resx new file mode 100644 index 000000000..efaa489ac --- /dev/null +++ b/Source/Krypton Components/TestForm/InputBoxTest.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + EAAACxABrSO9dQAAAAd0SU1FB9gBBwMpBNNjwEAAAADzSURBVDhPnZGhCoUwFIYHgiD4AlbB5AuYfAGT + SRBMZsFkMhlMJkEQBIPVahJsstc6lzPYcG4X7m74wvl3zrcdRiilX1nXFVzXheu6QHeOaENOmqZACIG6 + rs0FeKvv+0zgeR7c962VKAGnaRqoqgriOGaSvu/NBGEYwnEcMI4jE2Ct61MCZFkWiKJIDARBwCTzPCsS + qeAkSQJd14nmtm2ZANd59iFSgZznCbZts4E3lmXBvu+SRBpG8MvyPFduKoqCSbIs+y4YhgEcx4FpmhTB + tm3iFc/1RAPfk1OWpWh6nyGYSYJ/0YYmaEMTtKEJ2vB3KPkALW4yqONYazYAAAAASUVORK5CYII= + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/KryptonDialogExamples.Designer.cs b/Source/Krypton Components/TestForm/KryptonDialogExamples.Designer.cs new file mode 100644 index 000000000..1b86eedd1 --- /dev/null +++ b/Source/Krypton Components/TestForm/KryptonDialogExamples.Designer.cs @@ -0,0 +1,101 @@ +namespace TestForm +{ + partial class KryptonDialogExamples + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnColorDialog = new Krypton.Toolkit.KryptonButton(); + this.kbtnPrintDialog = new Krypton.Toolkit.KryptonButton(); + this.kbtnFontDialog = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnFontDialog); + this.kryptonPanel1.Controls.Add(this.kbtnPrintDialog); + this.kryptonPanel1.Controls.Add(this.kbtnColorDialog); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(230, 114); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnColorDialog + // + this.kbtnColorDialog.Location = new System.Drawing.Point(13, 13); + this.kbtnColorDialog.Name = "kbtnColorDialog"; + this.kbtnColorDialog.Size = new System.Drawing.Size(201, 25); + this.kbtnColorDialog.TabIndex = 0; + this.kbtnColorDialog.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnColorDialog.Values.Text = "Color Dialog"; + this.kbtnColorDialog.Click += new System.EventHandler(this.kbtnColorDialog_Click); + // + // kbtnPrintDialog + // + this.kbtnPrintDialog.Location = new System.Drawing.Point(13, 75); + this.kbtnPrintDialog.Name = "kbtnPrintDialog"; + this.kbtnPrintDialog.Size = new System.Drawing.Size(201, 25); + this.kbtnPrintDialog.TabIndex = 1; + this.kbtnPrintDialog.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnPrintDialog.Values.Text = "Print Dialog"; + this.kbtnPrintDialog.Click += new System.EventHandler(this.kbtnPrintDialog_Click); + // + // kbtnFontDialog + // + this.kbtnFontDialog.Location = new System.Drawing.Point(13, 44); + this.kbtnFontDialog.Name = "kbtnFontDialog"; + this.kbtnFontDialog.Size = new System.Drawing.Size(201, 25); + this.kbtnFontDialog.TabIndex = 2; + this.kbtnFontDialog.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnFontDialog.Values.Text = "Font Dialog"; + this.kbtnFontDialog.Click += new System.EventHandler(this.kbtnFontDialog_Click); + // + // KryptonDialogExamples + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(230, 114); + this.Controls.Add(this.kryptonPanel1); + this.Name = "KryptonDialogExamples"; + this.Text = "KryptonDialogExamples"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private KryptonButton kbtnColorDialog; + private KryptonButton kbtnFontDialog; + private KryptonButton kbtnPrintDialog; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/KryptonDialogExamples.cs b/Source/Krypton Components/TestForm/KryptonDialogExamples.cs new file mode 100644 index 000000000..04a3bc88c --- /dev/null +++ b/Source/Krypton Components/TestForm/KryptonDialogExamples.cs @@ -0,0 +1,40 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class KryptonDialogExamples: KryptonForm + { + public KryptonDialogExamples() + { + InitializeComponent(); + } + + private void kbtnColorDialog_Click(object sender, EventArgs e) + { + var kcd = new KryptonColorDialog(); + + kcd.ShowDialog(); + } + + private void kbtnFontDialog_Click(object sender, EventArgs e) + { + var kfd = new KryptonFontDialog(); + + kfd.ShowDialog(); + } + + private void kbtnPrintDialog_Click(object sender, EventArgs e) + { + var kpd = new KryptonPrintDialog(); + + kpd.ShowDialog(); + } + } +} diff --git a/Source/Krypton Components/TestForm/KryptonDialogExamples.resx b/Source/Krypton Components/TestForm/KryptonDialogExamples.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/KryptonDialogExamples.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/LabelsTest.Designer.cs b/Source/Krypton Components/TestForm/LabelsTest.Designer.cs new file mode 100644 index 000000000..fa29e3439 --- /dev/null +++ b/Source/Krypton Components/TestForm/LabelsTest.Designer.cs @@ -0,0 +1,131 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class LabelsTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLinkLabel1 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonLinkWrapLabel1 = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.kryptonLinkWrapLabel2 = new Krypton.Toolkit.KryptonLinkWrapLabel(); + this.kryptonWrapLabel1 = new Krypton.Toolkit.KryptonWrapLabel(); + this.kryptonWrapLabel2 = new Krypton.Toolkit.KryptonWrapLabel(); + this.SuspendLayout(); + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(13, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(88, 20); + this.kryptonLabel1.TabIndex = 0; + this.kryptonLabel1.Values.Text = "kryptonLabel1"; + // + // kryptonLinkLabel1 + // + this.kryptonLinkLabel1.Location = new System.Drawing.Point(13, 40); + this.kryptonLinkLabel1.Name = "kryptonLinkLabel1"; + this.kryptonLinkLabel1.Size = new System.Drawing.Size(110, 20); + this.kryptonLinkLabel1.TabIndex = 1; + this.kryptonLinkLabel1.Values.Text = "kryptonLinkLabel1"; + // + // kryptonLinkWrapLabel1 + // + this.kryptonLinkWrapLabel1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kryptonLinkWrapLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kryptonLinkWrapLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kryptonLinkWrapLabel1.Location = new System.Drawing.Point(13, 67); + this.kryptonLinkWrapLabel1.Name = "kryptonLinkWrapLabel1"; + this.kryptonLinkWrapLabel1.Size = new System.Drawing.Size(132, 15); + this.kryptonLinkWrapLabel1.Text = "kryptonLinkWrapLabel1"; + // + // kryptonLinkWrapLabel2 + // + this.kryptonLinkWrapLabel2.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kryptonLinkWrapLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kryptonLinkWrapLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kryptonLinkWrapLabel2.Location = new System.Drawing.Point(13, 86); + this.kryptonLinkWrapLabel2.Name = "kryptonLinkWrapLabel2"; + this.kryptonLinkWrapLabel2.Size = new System.Drawing.Size(132, 15); + this.kryptonLinkWrapLabel2.Text = "kryptonLinkWrapLabel2"; + // + // kryptonWrapLabel1 + // + this.kryptonWrapLabel1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kryptonWrapLabel1.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kryptonWrapLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kryptonWrapLabel1.Location = new System.Drawing.Point(13, 135); + this.kryptonWrapLabel1.Name = "kryptonWrapLabel1"; + this.kryptonWrapLabel1.Size = new System.Drawing.Size(110, 15); + this.kryptonWrapLabel1.Text = "kryptonWrapLabel1"; + // + // kryptonWrapLabel2 + // + this.kryptonWrapLabel2.Font = new System.Drawing.Font("Segoe UI", 9F); + this.kryptonWrapLabel2.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + this.kryptonWrapLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.AlternateControl; + this.kryptonWrapLabel2.Location = new System.Drawing.Point(13, 179); + this.kryptonWrapLabel2.Name = "kryptonWrapLabel2"; + this.kryptonWrapLabel2.Size = new System.Drawing.Size(149, 105); + this.kryptonWrapLabel2.Text = "This is a KryptonWrapLabel\r\n\r\nwith\r\n\r\nmultiple\r\n\r\nlines."; + // + // LabelsTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.kryptonWrapLabel2); + this.Controls.Add(this.kryptonWrapLabel1); + this.Controls.Add(this.kryptonLinkWrapLabel2); + this.Controls.Add(this.kryptonLinkWrapLabel1); + this.Controls.Add(this.kryptonLinkLabel1); + this.Controls.Add(this.kryptonLabel1); + this.Name = "LabelsTest"; + this.Text = "LabelsTest"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private KryptonLabel kryptonLabel1; + private KryptonLinkLabel kryptonLinkLabel1; + private KryptonLinkWrapLabel kryptonLinkWrapLabel1; + private KryptonLinkWrapLabel kryptonLinkWrapLabel2; + private KryptonWrapLabel kryptonWrapLabel1; + private KryptonWrapLabel kryptonWrapLabel2; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/LabelsTest.cs b/Source/Krypton Components/TestForm/LabelsTest.cs new file mode 100644 index 000000000..f80d3f21b --- /dev/null +++ b/Source/Krypton Components/TestForm/LabelsTest.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class LabelsTest : KryptonForm + { + public LabelsTest() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/LabelsTest.resx b/Source/Krypton Components/TestForm/LabelsTest.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/LabelsTest.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Main.Designer.cs b/Source/Krypton Components/TestForm/Main.Designer.cs new file mode 100644 index 000000000..be1adbeb9 --- /dev/null +++ b/Source/Krypton Components/TestForm/Main.Designer.cs @@ -0,0 +1,737 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class Main + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); + Krypton.Toolkit.KryptonInputBoxData kryptonInputBoxData1 = new Krypton.Toolkit.KryptonInputBoxData(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonComboBox1 = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonButton12 = new Krypton.Toolkit.KryptonButton(); + this.kryptonCheckBox1 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonButton11 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton10 = new Krypton.Toolkit.KryptonButton(); + this.kryptonColorButton1 = new Krypton.Toolkit.KryptonColorButton(); + this.kryptonButton9 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton5 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton8 = new Krypton.Toolkit.KryptonButton(); + this.kcbtnSizableToolWindow = new Krypton.Toolkit.KryptonCheckButton(); + this.kcbtnFixedToolWindow = new Krypton.Toolkit.KryptonCheckButton(); + this.kcbtnSizable = new Krypton.Toolkit.KryptonCheckButton(); + this.kcbtnFixedDialog = new Krypton.Toolkit.KryptonCheckButton(); + this.kcbtnFixed3D = new Krypton.Toolkit.KryptonCheckButton(); + this.kcbtnFixedSingle = new Krypton.Toolkit.KryptonCheckButton(); + this.kcbtnNone = new Krypton.Toolkit.KryptonCheckButton(); + this.kryptonButton7 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton6 = new Krypton.Toolkit.KryptonButton(); + this.kbtnExit = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton4 = new Krypton.Toolkit.KryptonButton(); + this.kbtnVisualStudio2010Theme = new Krypton.Toolkit.KryptonButton(); + this.kchkUseProgressValueAsText = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonProgressBar1 = new Krypton.Toolkit.KryptonProgressBar(); + this.ktrkProgressValues = new Krypton.Toolkit.KryptonTrackBar(); + this.kryptonButton3 = new Krypton.Toolkit.KryptonButton(); + this.kbtnIntegratedToolbar = new Krypton.Toolkit.KryptonButton(); + this.kbtnTestMessagebox = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton2 = new Krypton.Toolkit.KryptonButton(); + this.kryptonButton1 = new Krypton.Toolkit.KryptonButton(); + this.kryptonContextMenu1 = new Krypton.Toolkit.KryptonContextMenu(); + this.kryptonContextMenuItems1 = new Krypton.Toolkit.KryptonContextMenuItems(); + this.kryptonContextMenuItem1 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonContextMenuItem2 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonContextMenuItem3 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonListBox1 = new Krypton.Toolkit.KryptonListBox(); + this.kryptonTextBox1 = new Krypton.Toolkit.KryptonTextBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.kcmdMessageboxTest = new Krypton.Toolkit.KryptonCommand(); + this.buttonSpecAny1 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny2 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny3 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny4 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny5 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny6 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny7 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny8 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny9 = new Krypton.Toolkit.ButtonSpecAny(); + this.buttonSpecAny10 = new Krypton.Toolkit.ButtonSpecAny(); + this.kryptonIntegratedToolbarPrintCommand1 = new Krypton.Toolkit.KryptonIntegratedToolbarPrintCommand(); + this.kryptonManager1 = new Krypton.Toolkit.KryptonManager(this.components); + this.kryptonCheckSet1 = new Krypton.Toolkit.KryptonCheckSet(this.components); + this.kryptonTaskDialog1 = new Krypton.Toolkit.KryptonTaskDialog(); + this.kryptonInputBoxManager1 = new Krypton.Toolkit.KryptonInputBoxManager(); + this.kcmdOpenImage = new Krypton.Toolkit.KryptonCommand(); + this.kbtnDialogs = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonCheckSet1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnDialogs); + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Controls.Add(this.kryptonComboBox1); + this.kryptonPanel1.Controls.Add(this.kryptonButton12); + this.kryptonPanel1.Controls.Add(this.kryptonCheckBox1); + this.kryptonPanel1.Controls.Add(this.kryptonButton11); + this.kryptonPanel1.Controls.Add(this.kryptonButton10); + this.kryptonPanel1.Controls.Add(this.kryptonColorButton1); + this.kryptonPanel1.Controls.Add(this.kryptonButton9); + this.kryptonPanel1.Controls.Add(this.kryptonButton5); + this.kryptonPanel1.Controls.Add(this.kryptonButton8); + this.kryptonPanel1.Controls.Add(this.kcbtnSizableToolWindow); + this.kryptonPanel1.Controls.Add(this.kcbtnFixedToolWindow); + this.kryptonPanel1.Controls.Add(this.kcbtnSizable); + this.kryptonPanel1.Controls.Add(this.kcbtnFixedDialog); + this.kryptonPanel1.Controls.Add(this.kcbtnFixed3D); + this.kryptonPanel1.Controls.Add(this.kcbtnFixedSingle); + this.kryptonPanel1.Controls.Add(this.kcbtnNone); + this.kryptonPanel1.Controls.Add(this.kryptonButton7); + this.kryptonPanel1.Controls.Add(this.kryptonButton6); + this.kryptonPanel1.Controls.Add(this.kbtnExit); + this.kryptonPanel1.Controls.Add(this.kryptonButton4); + this.kryptonPanel1.Controls.Add(this.kbtnVisualStudio2010Theme); + this.kryptonPanel1.Controls.Add(this.kchkUseProgressValueAsText); + this.kryptonPanel1.Controls.Add(this.kryptonProgressBar1); + this.kryptonPanel1.Controls.Add(this.ktrkProgressValues); + this.kryptonPanel1.Controls.Add(this.kryptonButton3); + this.kryptonPanel1.Controls.Add(this.kbtnIntegratedToolbar); + this.kryptonPanel1.Controls.Add(this.kbtnTestMessagebox); + this.kryptonPanel1.Controls.Add(this.kryptonButton2); + this.kryptonPanel1.Controls.Add(this.kryptonButton1); + this.kryptonPanel1.Controls.Add(this.kryptonListBox1); + this.kryptonPanel1.Controls.Add(this.kryptonTextBox1); + this.kryptonPanel1.Controls.Add(this.textBox1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(1214, 853); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonThemeComboBox1.DropDownWidth = 581; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(13, 12); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(581, 22); + this.kryptonThemeComboBox1.TabIndex = 1; + // + // kryptonComboBox1 + // + this.kryptonComboBox1.DropDownWidth = 161; + this.kryptonComboBox1.IntegralHeight = false; + this.kryptonComboBox1.Location = new System.Drawing.Point(265, 49); + this.kryptonComboBox1.Name = "kryptonComboBox1"; + this.kryptonComboBox1.Size = new System.Drawing.Size(121, 22); + this.kryptonComboBox1.TabIndex = 44; + this.kryptonComboBox1.Text = "kryptonComboBox1"; + // + // kryptonButton12 + // + this.kryptonButton12.Location = new System.Drawing.Point(11, 384); + this.kryptonButton12.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton12.Name = "kryptonButton12"; + this.kryptonButton12.Size = new System.Drawing.Size(136, 20); + this.kryptonButton12.TabIndex = 39; + this.kryptonButton12.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton12.Values.Text = "Fading Test"; + this.kryptonButton12.Click += new System.EventHandler(this.kryptonButton12_Click); + // + // kryptonCheckBox1 + // + this.kryptonCheckBox1.Checked = true; + this.kryptonCheckBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.kryptonCheckBox1.Location = new System.Drawing.Point(342, 184); + this.kryptonCheckBox1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonCheckBox1.Name = "kryptonCheckBox1"; + this.kryptonCheckBox1.Size = new System.Drawing.Size(126, 20); + this.kryptonCheckBox1.TabIndex = 38; + this.kryptonCheckBox1.Values.Text = "Show Close Button"; + // + // kryptonButton11 + // + this.kryptonButton11.Location = new System.Drawing.Point(153, 184); + this.kryptonButton11.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton11.Name = "kryptonButton11"; + this.kryptonButton11.Size = new System.Drawing.Size(184, 20); + this.kryptonButton11.TabIndex = 37; + this.kryptonButton11.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton11.Values.Text = "Test Messagebox (no text)"; + this.kryptonButton11.Click += new System.EventHandler(this.kryptonButton11_Click); + // + // kryptonButton10 + // + this.kryptonButton10.Location = new System.Drawing.Point(11, 362); + this.kryptonButton10.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton10.Name = "kryptonButton10"; + this.kryptonButton10.Size = new System.Drawing.Size(136, 20); + this.kryptonButton10.TabIndex = 36; + this.kryptonButton10.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton10.Values.Text = "Toast"; + this.kryptonButton10.Click += new System.EventHandler(this.kryptonButton10_Click); + // + // kryptonColorButton1 + // + this.kryptonColorButton1.Location = new System.Drawing.Point(153, 107); + this.kryptonColorButton1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonColorButton1.Name = "kryptonColorButton1"; + this.kryptonColorButton1.Size = new System.Drawing.Size(246, 25); + this.kryptonColorButton1.TabIndex = 35; + this.kryptonColorButton1.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonColorButton1.Values.Image"))); + this.kryptonColorButton1.Values.Text = "Drop Down Arrow Color"; + this.kryptonColorButton1.SelectedColorChanged += new System.EventHandler(this.kryptonColorButton1_SelectedColorChanged); + // + // kryptonButton9 + // + this.kryptonButton9.Location = new System.Drawing.Point(11, 337); + this.kryptonButton9.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton9.Name = "kryptonButton9"; + this.kryptonButton9.Size = new System.Drawing.Size(137, 20); + this.kryptonButton9.TabIndex = 34; + this.kryptonButton9.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton9.Values.Text = "Command Links"; + this.kryptonButton9.Click += new System.EventHandler(this.kryptonButton9_Click); + // + // kryptonButton5 + // + this.kryptonButton5.Location = new System.Drawing.Point(11, 312); + this.kryptonButton5.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton5.Name = "kryptonButton5"; + this.kryptonButton5.Size = new System.Drawing.Size(137, 20); + this.kryptonButton5.TabIndex = 33; + this.kryptonButton5.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton5.Values.Text = "Task Dialog"; + this.kryptonButton5.Click += new System.EventHandler(this.kryptonButton5_Click); + // + // kryptonButton8 + // + this.kryptonButton8.Location = new System.Drawing.Point(11, 287); + this.kryptonButton8.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton8.Name = "kryptonButton8"; + this.kryptonButton8.Size = new System.Drawing.Size(137, 20); + this.kryptonButton8.TabIndex = 32; + this.kryptonButton8.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton8.Values.Text = "About Box"; + this.kryptonButton8.Click += new System.EventHandler(this.kryptonButton8_Click); + // + // kcbtnSizableToolWindow + // + this.kcbtnSizableToolWindow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kcbtnSizableToolWindow.AutoSize = true; + this.kcbtnSizableToolWindow.Location = new System.Drawing.Point(10, 660); + this.kcbtnSizableToolWindow.Margin = new System.Windows.Forms.Padding(2); + this.kcbtnSizableToolWindow.Name = "kcbtnSizableToolWindow"; + this.kcbtnSizableToolWindow.Size = new System.Drawing.Size(150, 24); + this.kcbtnSizableToolWindow.TabIndex = 31; + this.kcbtnSizableToolWindow.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kcbtnSizableToolWindow.Values.Text = "SizableToolWindow"; + this.kcbtnSizableToolWindow.Click += new System.EventHandler(this.kcbtnSizableToolWindow_Click); + // + // kcbtnFixedToolWindow + // + this.kcbtnFixedToolWindow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kcbtnFixedToolWindow.AutoSize = true; + this.kcbtnFixedToolWindow.Location = new System.Drawing.Point(231, 634); + this.kcbtnFixedToolWindow.Margin = new System.Windows.Forms.Padding(2); + this.kcbtnFixedToolWindow.Name = "kcbtnFixedToolWindow"; + this.kcbtnFixedToolWindow.Size = new System.Drawing.Size(134, 24); + this.kcbtnFixedToolWindow.TabIndex = 30; + this.kcbtnFixedToolWindow.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kcbtnFixedToolWindow.Values.Text = "FixedToolWindow"; + this.kcbtnFixedToolWindow.Click += new System.EventHandler(this.kcbtnFixedToolWindow_Click); + // + // kcbtnSizable + // + this.kcbtnSizable.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kcbtnSizable.Location = new System.Drawing.Point(121, 638); + this.kcbtnSizable.Margin = new System.Windows.Forms.Padding(2); + this.kcbtnSizable.Name = "kcbtnSizable"; + this.kcbtnSizable.Size = new System.Drawing.Size(106, 20); + this.kcbtnSizable.TabIndex = 29; + this.kcbtnSizable.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kcbtnSizable.Values.Text = "Sizable"; + this.kcbtnSizable.Click += new System.EventHandler(this.kcbtnSizable_Click); + // + // kcbtnFixedDialog + // + this.kcbtnFixedDialog.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kcbtnFixedDialog.Location = new System.Drawing.Point(10, 638); + this.kcbtnFixedDialog.Margin = new System.Windows.Forms.Padding(2); + this.kcbtnFixedDialog.Name = "kcbtnFixedDialog"; + this.kcbtnFixedDialog.Size = new System.Drawing.Size(106, 20); + this.kcbtnFixedDialog.TabIndex = 28; + this.kcbtnFixedDialog.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kcbtnFixedDialog.Values.Text = "FixedDialog"; + this.kcbtnFixedDialog.Click += new System.EventHandler(this.kcbtnFixedDialog_Click); + // + // kcbtnFixed3D + // + this.kcbtnFixed3D.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kcbtnFixed3D.Location = new System.Drawing.Point(231, 611); + this.kcbtnFixed3D.Margin = new System.Windows.Forms.Padding(2); + this.kcbtnFixed3D.Name = "kcbtnFixed3D"; + this.kcbtnFixed3D.Size = new System.Drawing.Size(106, 20); + this.kcbtnFixed3D.TabIndex = 27; + this.kcbtnFixed3D.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kcbtnFixed3D.Values.Text = "Fixed3D"; + this.kcbtnFixed3D.Click += new System.EventHandler(this.kcbtnFixed3D_Click); + // + // kcbtnFixedSingle + // + this.kcbtnFixedSingle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kcbtnFixedSingle.Location = new System.Drawing.Point(121, 611); + this.kcbtnFixedSingle.Margin = new System.Windows.Forms.Padding(2); + this.kcbtnFixedSingle.Name = "kcbtnFixedSingle"; + this.kcbtnFixedSingle.Size = new System.Drawing.Size(106, 20); + this.kcbtnFixedSingle.TabIndex = 26; + this.kcbtnFixedSingle.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kcbtnFixedSingle.Values.Text = "FixedSingle"; + this.kcbtnFixedSingle.Click += new System.EventHandler(this.kcbtnFixedSingle_Click); + // + // kcbtnNone + // + this.kcbtnNone.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kcbtnNone.Location = new System.Drawing.Point(10, 611); + this.kcbtnNone.Margin = new System.Windows.Forms.Padding(2); + this.kcbtnNone.Name = "kcbtnNone"; + this.kcbtnNone.Size = new System.Drawing.Size(106, 20); + this.kcbtnNone.TabIndex = 25; + this.kcbtnNone.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kcbtnNone.Values.Text = "None"; + this.kcbtnNone.Click += new System.EventHandler(this.kcbtnNone_Click); + // + // kryptonButton7 + // + this.kryptonButton7.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.kryptonButton7.Location = new System.Drawing.Point(685, 400); + this.kryptonButton7.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton7.Name = "kryptonButton7"; + this.kryptonButton7.Size = new System.Drawing.Size(68, 20); + this.kryptonButton7.TabIndex = 17; + this.kryptonButton7.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton7.Values.Text = "Export"; + // + // kryptonButton6 + // + this.kryptonButton6.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.kryptonButton6.Location = new System.Drawing.Point(613, 400); + this.kryptonButton6.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton6.Name = "kryptonButton6"; + this.kryptonButton6.Size = new System.Drawing.Size(68, 20); + this.kryptonButton6.TabIndex = 16; + this.kryptonButton6.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton6.Values.Text = "Import"; + // + // kbtnExit + // + this.kbtnExit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.kbtnExit.Location = new System.Drawing.Point(835, 664); + this.kbtnExit.Margin = new System.Windows.Forms.Padding(2); + this.kbtnExit.Name = "kbtnExit"; + this.kbtnExit.Size = new System.Drawing.Size(68, 20); + this.kbtnExit.TabIndex = 15; + this.kbtnExit.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnExit.Values.Text = "Exit"; + this.kbtnExit.Click += new System.EventHandler(this.kbtnExit_Click); + // + // kryptonButton4 + // + this.kryptonButton4.Location = new System.Drawing.Point(10, 158); + this.kryptonButton4.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton4.Name = "kryptonButton4"; + this.kryptonButton4.Size = new System.Drawing.Size(139, 20); + this.kryptonButton4.TabIndex = 14; + this.kryptonButton4.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton4.Values.Text = "Form 4"; + this.kryptonButton4.Click += new System.EventHandler(this.kryptonButton4_Click); + // + // kbtnVisualStudio2010Theme + // + this.kbtnVisualStudio2010Theme.Location = new System.Drawing.Point(10, 262); + this.kbtnVisualStudio2010Theme.Margin = new System.Windows.Forms.Padding(2); + this.kbtnVisualStudio2010Theme.Name = "kbtnVisualStudio2010Theme"; + this.kbtnVisualStudio2010Theme.Size = new System.Drawing.Size(227, 20); + this.kbtnVisualStudio2010Theme.TabIndex = 13; + this.kbtnVisualStudio2010Theme.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnVisualStudio2010Theme.Values.Text = "Visual Studio 2010 Theme (Form5)"; + this.kbtnVisualStudio2010Theme.Click += new System.EventHandler(this.kbtnVisualStudio2010Theme_Click); + // + // kchkUseProgressValueAsText + // + this.kchkUseProgressValueAsText.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.kchkUseProgressValueAsText.Location = new System.Drawing.Point(626, 348); + this.kchkUseProgressValueAsText.Margin = new System.Windows.Forms.Padding(2); + this.kchkUseProgressValueAsText.Name = "kchkUseProgressValueAsText"; + this.kchkUseProgressValueAsText.Size = new System.Drawing.Size(165, 20); + this.kchkUseProgressValueAsText.TabIndex = 12; + this.kchkUseProgressValueAsText.Values.Text = "Use progress value as text"; + this.kchkUseProgressValueAsText.CheckedChanged += new System.EventHandler(this.kchkUseProgressValueAsText_CheckedChanged); + // + // kryptonProgressBar1 + // + this.kryptonProgressBar1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.kryptonProgressBar1.Location = new System.Drawing.Point(613, 322); + this.kryptonProgressBar1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonProgressBar1.Name = "kryptonProgressBar1"; + this.kryptonProgressBar1.Size = new System.Drawing.Size(291, 21); + this.kryptonProgressBar1.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kryptonProgressBar1.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBar1.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBar1.TabIndex = 11; + this.kryptonProgressBar1.Text = "kryptonProgressBar1"; + this.kryptonProgressBar1.Values.Text = "kryptonProgressBar1"; + // + // ktrkProgressValues + // + this.ktrkProgressValues.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ktrkProgressValues.Location = new System.Drawing.Point(613, 294); + this.ktrkProgressValues.Margin = new System.Windows.Forms.Padding(2); + this.ktrkProgressValues.Maximum = 100; + this.ktrkProgressValues.Name = "ktrkProgressValues"; + this.ktrkProgressValues.Size = new System.Drawing.Size(291, 33); + this.ktrkProgressValues.TabIndex = 10; + this.ktrkProgressValues.TickStyle = System.Windows.Forms.TickStyle.Both; + this.ktrkProgressValues.ValueChanged += new System.EventHandler(this.ktrkProgressValues_ValueChanged); + // + // kryptonButton3 + // + this.kryptonButton3.Location = new System.Drawing.Point(10, 236); + this.kryptonButton3.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton3.Name = "kryptonButton3"; + this.kryptonButton3.Size = new System.Drawing.Size(138, 20); + this.kryptonButton3.TabIndex = 9; + this.kryptonButton3.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton3.Values.Text = "ThemeBrowser Form"; + this.kryptonButton3.Click += new System.EventHandler(this.kryptonButton3_Click); + // + // kbtnIntegratedToolbar + // + this.kbtnIntegratedToolbar.Location = new System.Drawing.Point(10, 210); + this.kbtnIntegratedToolbar.Margin = new System.Windows.Forms.Padding(2); + this.kbtnIntegratedToolbar.Name = "kbtnIntegratedToolbar"; + this.kbtnIntegratedToolbar.Size = new System.Drawing.Size(227, 20); + this.kbtnIntegratedToolbar.TabIndex = 8; + this.kbtnIntegratedToolbar.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnIntegratedToolbar.Values.Text = "Integrated Toolbar (Form5)"; + this.kbtnIntegratedToolbar.Click += new System.EventHandler(this.kbtnIntegratedToolbar_Click); + // + // kbtnTestMessagebox + // + this.kbtnTestMessagebox.Location = new System.Drawing.Point(10, 184); + this.kbtnTestMessagebox.Margin = new System.Windows.Forms.Padding(2); + this.kbtnTestMessagebox.Name = "kbtnTestMessagebox"; + this.kbtnTestMessagebox.Size = new System.Drawing.Size(139, 20); + this.kbtnTestMessagebox.TabIndex = 7; + this.kbtnTestMessagebox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnTestMessagebox.Values.Text = "Test Messagebox"; + this.kbtnTestMessagebox.Click += new System.EventHandler(this.kbtnTestMessagebox_Click); + // + // kryptonButton2 + // + this.kryptonButton2.Location = new System.Drawing.Point(10, 132); + this.kryptonButton2.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton2.Name = "kryptonButton2"; + this.kryptonButton2.Size = new System.Drawing.Size(139, 25); + this.kryptonButton2.TabIndex = 6; + this.kryptonButton2.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton2.Values.Image = ((System.Drawing.Image)(resources.GetObject("kryptonButton2.Values.Image"))); + this.kryptonButton2.Values.Text = "Ribbon (Form3)"; + this.kryptonButton2.Values.UseAsUACElevationButton = true; + this.kryptonButton2.Click += new System.EventHandler(this.kryptonButton2_Click); + // + // kryptonButton1 + // + this.kryptonButton1.KryptonContextMenu = this.kryptonContextMenu1; + this.kryptonButton1.Location = new System.Drawing.Point(9, 107); + this.kryptonButton1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonButton1.Name = "kryptonButton1"; + this.kryptonButton1.Size = new System.Drawing.Size(139, 20); + this.kryptonButton1.TabIndex = 5; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton1.Values.ShowSplitOption = true; + this.kryptonButton1.Values.Text = "Button (form2)"; + this.kryptonButton1.Click += new System.EventHandler(this.kryptonButton1_Click); + // + // kryptonContextMenu1 + // + this.kryptonContextMenu1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItems1}); + // + // kryptonContextMenuItems1 + // + this.kryptonContextMenuItems1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItem1, + this.kryptonContextMenuItem2, + this.kryptonContextMenuItem3}); + this.kryptonContextMenuItems1.Text = ""; + // + // kryptonContextMenuItem1 + // + this.kryptonContextMenuItem1.Text = "Menu Item 1"; + this.kryptonContextMenuItem1.ToolTipValues.Description = "Multi lin Description:\r\n- Match thing 1\r\n- Match thing 2\r\n\r\nPlacement mode: Right" + + ""; + this.kryptonContextMenuItem1.ToolTipValues.EnableToolTips = true; + this.kryptonContextMenuItem1.ToolTipValues.Heading = "Menu Tooltip Heading"; + this.kryptonContextMenuItem1.ToolTipValues.ToolTipPosition.PlacementMode = Krypton.Toolkit.PlacementMode.Right; + // + // kryptonContextMenuItem2 + // + this.kryptonContextMenuItem2.Text = "Menu Item 2"; + // + // kryptonContextMenuItem3 + // + this.kryptonContextMenuItem3.Text = "Menu Item 3"; + // + // kryptonListBox1 + // + this.kryptonListBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.kryptonListBox1.Location = new System.Drawing.Point(613, 7); + this.kryptonListBox1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonListBox1.Name = "kryptonListBox1"; + this.kryptonListBox1.Size = new System.Drawing.Size(291, 281); + this.kryptonListBox1.TabIndex = 2; + // + // kryptonTextBox1 + // + this.kryptonTextBox1.Location = new System.Drawing.Point(9, 84); + this.kryptonTextBox1.Margin = new System.Windows.Forms.Padding(2); + this.kryptonTextBox1.Name = "kryptonTextBox1"; + this.kryptonTextBox1.Size = new System.Drawing.Size(140, 23); + this.kryptonTextBox1.TabIndex = 1; + this.kryptonTextBox1.Text = "kryptonTextBox1"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(41, 40); + this.textBox1.Margin = new System.Windows.Forms.Padding(2); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(58, 20); + this.textBox1.TabIndex = 0; + // + // kcmdMessageboxTest + // + this.kcmdMessageboxTest.Text = "kryptonCommand1"; + this.kcmdMessageboxTest.Execute += new System.EventHandler(this.kcmdMessageboxTest_Execute); + // + // buttonSpecAny1 + // + this.buttonSpecAny1.UniqueName = "dd7cce66eb3d4d97a9536f5d03a58dd5"; + // + // buttonSpecAny2 + // + this.buttonSpecAny2.UniqueName = "01c062f324854832b96667cacd7d1a77"; + // + // buttonSpecAny3 + // + this.buttonSpecAny3.UniqueName = "be5331ab7c484486a10d7094d39cd05e"; + // + // buttonSpecAny4 + // + this.buttonSpecAny4.UniqueName = "e8dbb053058c44ed9c8f2b7c51ec1261"; + // + // buttonSpecAny5 + // + this.buttonSpecAny5.UniqueName = "abaa2bdd24704458afca577b2da97ed2"; + // + // buttonSpecAny6 + // + this.buttonSpecAny6.UniqueName = "17c90049490f478399fdad972722b324"; + // + // buttonSpecAny7 + // + this.buttonSpecAny7.UniqueName = "8ec878c93ad347528009c3a5e4a71345"; + // + // buttonSpecAny8 + // + this.buttonSpecAny8.UniqueName = "1cd972225f3441b5ade70ac3c02d3949"; + // + // buttonSpecAny9 + // + this.buttonSpecAny9.UniqueName = "1d2714d06d564ef580dff961d56d525a"; + // + // buttonSpecAny10 + // + this.buttonSpecAny10.UniqueName = "8b3bf64a4cd7424d9479e809c7485ae7"; + // + // kryptonIntegratedToolbarPrintCommand1 + // + this.kryptonIntegratedToolbarPrintCommand1.Text = "Print"; + // + // kryptonManager1 + // + this.kryptonManager1.BaseFont = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + // + // kryptonTaskDialog1 + // + this.kryptonTaskDialog1.CheckboxText = null; + this.kryptonTaskDialog1.Content = "Hello World"; + this.kryptonTaskDialog1.DefaultRadioButton = null; + this.kryptonTaskDialog1.FooterHyperlink = null; + this.kryptonTaskDialog1.FooterText = null; + this.kryptonTaskDialog1.Icon = Krypton.Toolkit.KryptonMessageBoxIcon.WindowsLogo; + this.kryptonTaskDialog1.MainInstruction = "This is a test"; + this.kryptonTaskDialog1.TextExtra = "Ctrl+C to copy"; + this.kryptonTaskDialog1.UseNativeOSIcons = false; + this.kryptonTaskDialog1.WindowTitle = null; + // + // kryptonInputBoxManager1 + // + kryptonInputBoxData1.Caption = null; + kryptonInputBoxData1.CueColor = null; + kryptonInputBoxData1.CueText = null; + kryptonInputBoxData1.CueTypeface = null; + kryptonInputBoxData1.DefaultResponse = null; + kryptonInputBoxData1.Owner = null; + kryptonInputBoxData1.Prompt = null; + kryptonInputBoxData1.UsePasswordOption = null; + kryptonInputBoxData1.UseRTLLayout = Krypton.Toolkit.KryptonUseRTLLayout.No; + this.kryptonInputBoxManager1.InputBoxData = kryptonInputBoxData1; + // + // kcmdOpenImage + // + this.kcmdOpenImage.Text = "&..."; + this.kcmdOpenImage.Execute += new System.EventHandler(this.kcmdOpenImage_Execute); + // + // kbtnDialogs + // + this.kbtnDialogs.Location = new System.Drawing.Point(13, 408); + this.kbtnDialogs.Margin = new System.Windows.Forms.Padding(2); + this.kbtnDialogs.Name = "kbtnDialogs"; + this.kbtnDialogs.Size = new System.Drawing.Size(136, 20); + this.kbtnDialogs.TabIndex = 45; + this.kbtnDialogs.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnDialogs.Values.Text = "Dialogs"; + this.kbtnDialogs.Click += new System.EventHandler(this.kbtnDialogs_Click); + // + // Main + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ButtonSpecs.Add(this.buttonSpecAny1); + this.ButtonSpecs.Add(this.buttonSpecAny2); + this.ButtonSpecs.Add(this.buttonSpecAny3); + this.ButtonSpecs.Add(this.buttonSpecAny4); + this.ButtonSpecs.Add(this.buttonSpecAny5); + this.ButtonSpecs.Add(this.buttonSpecAny6); + this.ButtonSpecs.Add(this.buttonSpecAny7); + this.ButtonSpecs.Add(this.buttonSpecAny8); + this.ButtonSpecs.Add(this.buttonSpecAny9); + this.ButtonSpecs.Add(this.buttonSpecAny10); + this.ClientSize = new System.Drawing.Size(1214, 853); + this.Controls.Add(this.kryptonPanel1); + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "Main"; + this.Text = "Form1"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonCheckSet1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonTextBox kryptonTextBox1; + private System.Windows.Forms.TextBox textBox1; + private Krypton.Toolkit.KryptonListBox kryptonListBox1; + private Krypton.Toolkit.KryptonButton kryptonButton1; + private Krypton.Toolkit.KryptonButton kryptonButton2; + private Krypton.Toolkit.KryptonCommand kcmdMessageboxTest; + private Krypton.Toolkit.KryptonButton kbtnTestMessagebox; + private Krypton.Toolkit.KryptonContextMenu kryptonContextMenu1; + private Krypton.Toolkit.KryptonContextMenuItems kryptonContextMenuItems1; + private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem1; + private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem2; + private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem3; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny1; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny2; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny3; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny4; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny5; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny6; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny7; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny8; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny9; + private Krypton.Toolkit.ButtonSpecAny buttonSpecAny10; + private Krypton.Toolkit.KryptonIntegratedToolbarPrintCommand kryptonIntegratedToolbarPrintCommand1; + private Krypton.Toolkit.KryptonButton kbtnIntegratedToolbar; + private Krypton.Toolkit.KryptonManager kryptonManager1; + private Krypton.Toolkit.KryptonButton kryptonButton3; + private Krypton.Toolkit.KryptonTrackBar ktrkProgressValues; + private Krypton.Toolkit.KryptonProgressBar kryptonProgressBar1; + private Krypton.Toolkit.KryptonCheckBox kchkUseProgressValueAsText; + private Krypton.Toolkit.KryptonButton kbtnVisualStudio2010Theme; + private Krypton.Toolkit.KryptonButton kryptonButton4; + private Krypton.Toolkit.KryptonButton kbtnExit; + private Krypton.Toolkit.KryptonButton kryptonButton6; + private Krypton.Toolkit.KryptonButton kryptonButton7; + private Krypton.Toolkit.KryptonCheckSet kryptonCheckSet1; + private Krypton.Toolkit.KryptonCheckButton kcbtnSizableToolWindow; + private Krypton.Toolkit.KryptonCheckButton kcbtnFixedToolWindow; + private Krypton.Toolkit.KryptonCheckButton kcbtnSizable; + private Krypton.Toolkit.KryptonCheckButton kcbtnFixedDialog; + private Krypton.Toolkit.KryptonCheckButton kcbtnFixed3D; + private Krypton.Toolkit.KryptonCheckButton kcbtnFixedSingle; + private Krypton.Toolkit.KryptonCheckButton kcbtnNone; + private Krypton.Toolkit.KryptonButton kryptonButton8; + private Krypton.Toolkit.KryptonButton kryptonButton5; + private Krypton.Toolkit.KryptonTaskDialog kryptonTaskDialog1; + private Krypton.Toolkit.KryptonButton kryptonButton9; + private Krypton.Toolkit.KryptonColorButton kryptonColorButton1; + private Krypton.Toolkit.KryptonButton kryptonButton10; + private Krypton.Toolkit.KryptonInputBoxManager kryptonInputBoxManager1; + private Krypton.Toolkit.KryptonButton kryptonButton11; + private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox1; + private Krypton.Toolkit.KryptonButton kryptonButton12; + private Krypton.Toolkit.KryptonCommand kcmdOpenImage; + private Krypton.Toolkit.KryptonComboBox kryptonComboBox1; + private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonButton kbtnDialogs; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Main.cs b/Source/Krypton Components/TestForm/Main.cs new file mode 100644 index 000000000..273fb0875 --- /dev/null +++ b/Source/Krypton Components/TestForm/Main.cs @@ -0,0 +1,366 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.Diagnostics; +using System.Reflection; + +namespace TestForm +{ + public partial class Main : KryptonForm + { + public Main() + { + InitializeComponent(); + } + + private void AddEvent(string message) => kryptonListBox1.Items.Add(message); + + private void textBox1_Validated(object sender, EventArgs e) => AddEvent(nameof(textBox1_Validated)); + + private void kryptonTextBox1_Validated(object sender, EventArgs e) => AddEvent(nameof(kryptonTextBox1_Validated)); + + private void kryptonTextBox1_DoubleClick(object sender, EventArgs e) => AddEvent(nameof(kryptonTextBox1_DoubleClick)); + + private void kryptonTextBox1_MouseDoubleClick(object sender, MouseEventArgs e) => AddEvent(nameof(kryptonTextBox1_MouseDoubleClick)); + + private void kryptonTextBox1_MouseClick(object sender, MouseEventArgs e) => AddEvent(nameof(kryptonTextBox1_MouseClick)); + + private void kryptonTextBox1_Click(object sender, EventArgs e) => AddEvent(nameof(kryptonTextBox1_Click)); + + private void textBox1_MouseDoubleClick(object sender, MouseEventArgs e) => AddEvent(nameof(textBox1_MouseDoubleClick)); + + private void textBox1_MouseClick(object sender, MouseEventArgs e) => AddEvent(nameof(textBox1_MouseClick)); + + private void textBox1_DoubleClick(object sender, EventArgs e) => AddEvent(nameof(textBox1_DoubleClick)); + + private void textBox1_Click(object sender, EventArgs e) => AddEvent(nameof(textBox1_Click)); + + private void textBox1_Validating(object sender, CancelEventArgs e) => AddEvent(nameof(textBox1_Validating)); + + private void kryptonTextBox1_Validating(object sender, CancelEventArgs e) => AddEvent(nameof(kryptonTextBox1_Validating)); + + private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => AddEvent(nameof(textBox1_PreviewKeyDown)); + + private void kryptonTextBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => AddEvent(nameof(kryptonTextBox1_PreviewKeyDown)); + + private void kryptonTextBox1_KeyDown(object sender, KeyEventArgs e) => AddEvent(nameof(kryptonTextBox1_KeyDown)); + + private void kryptonTextBox1_KeyPress(object sender, KeyPressEventArgs e) => AddEvent(nameof(kryptonTextBox1_KeyPress)); + + private void kryptonTextBox1_KeyUp(object sender, KeyEventArgs e) => AddEvent(nameof(kryptonTextBox1_KeyUp)); + + private void textBox1_KeyDown(object sender, KeyEventArgs e) => AddEvent(nameof(textBox1_KeyDown)); + + private void textBox1_KeyPress(object sender, KeyPressEventArgs e) => AddEvent(nameof(textBox1_KeyPress)); + + private void textBox1_KeyUp(object sender, KeyEventArgs e) => AddEvent(nameof(textBox1_KeyUp)); + + private void kryptonButton1_Click(object sender, EventArgs e) + { + var form2 = new BreadCrumbTest(); + + form2.ShowDialog(); + } + + private void kryptonButton2_Click(object sender, EventArgs e) + { + var form3 = new RibbonTest(); + + form3.ShowDialog(); + } + + private void kbtnTestMessagebox_Click(object sender, EventArgs e) + { + KryptonMessageBoxDep.Show(@"This is a test!", @"Testing", KryptonMessageBoxButtons.OK, + KryptonMessageBoxIcon.Information, contentAreaType: MessageBoxContentAreaType.LinkLabel, + linkAreaCommand: kcmdMessageboxTest, showCloseButton: kryptonCheckBox1.Checked); + + KryptonMessageBoxDep.Show(@"This is a test!", @"Testing", KryptonMessageBoxButtons.OK, + KryptonMessageBoxIcon.Information, options: MessageBoxOptions.RtlReading, contentAreaType: MessageBoxContentAreaType.LinkLabel, + linkAreaCommand: kcmdMessageboxTest, showCloseButton: kryptonCheckBox1.Checked); + } + + private void kcmdMessageboxTest_Execute(object sender, EventArgs e) + { + try + { + Process.Start(@"C:\\Windows\\Notepad.exe"); + } + catch (Exception exception) + { + MessageBox.Show(exception.ToString()); + } + } + + private void kbtnIntegratedToolbar_Click(object sender, EventArgs e) + { + var integratedToolBar = new ThemeTest(); + + integratedToolBar.Show(); + } + + private void kryptonButton3_Click(object sender, EventArgs e) + { + var data = new KryptonThemeBrowserData() + { + ShowImportButton = true, + ShowSilentOption = true, + StartIndex = GlobalStaticValues.GLOBAL_DEFAULT_THEME_INDEX, + StartPosition = FormStartPosition.CenterScreen, + WindowTitle = KryptonManager.Strings.MiscellaneousThemeStrings.ThemeBrowserWindowTitle + }; + + KryptonThemeBrowser.Show(data); + } + + private void kchkUseProgressValueAsText_CheckedChanged(object sender, EventArgs e) + { + kryptonProgressBar1.UseValueAsText = kchkUseProgressValueAsText.Checked; + } + + private void ktrkProgressValues_ValueChanged(object sender, EventArgs e) + { + kryptonProgressBar1.Value = ktrkProgressValues.Value; + } + + private void kbtnVisualStudio2010Theme_Click(object sender, EventArgs e) + { + var vsTheme = new ThemeTest(); + + vsTheme.Show(); + } + + private void kryptonButton4_Click(object sender, EventArgs e) + { + new GroupBoxTest().Show(); + } + + private void kbtnExit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + //private void kryptonButton6_Click(object sender, EventArgs e) + //{ + // kryptonCustomPaletteBase1.Import(); + //} + + //private void kryptonButton7_Click(object sender, EventArgs e) + //{ + // kryptonCustomPaletteBase1.Export(); + //} + + private void kryptonButton8_Click(object sender, EventArgs e) + { + var aboutBoxData = new KryptonAboutBoxData() + { + ApplicationName = @"TestForm", + CurrentAssembly = Assembly.GetExecutingAssembly(), + HeaderImage = null, + MainImage = null, + ShowToolkitInformation = true, + }; + + var aboutToolkitData = new KryptonAboutToolkitData(); + + KryptonAboutBox.Show(aboutBoxData, aboutToolkitData); + } + + private void kcbtnNone_Click(object sender, EventArgs e) => UpdateBorderStyle(FormBorderStyle.None); + + private void kcbtnFixedSingle_Click(object sender, EventArgs e) => UpdateBorderStyle(FormBorderStyle.FixedSingle); + + private void kcbtnFixed3D_Click(object sender, EventArgs e) => UpdateBorderStyle(FormBorderStyle.Fixed3D); + + private void kcbtnFixedDialog_Click(object sender, EventArgs e) => UpdateBorderStyle(FormBorderStyle.FixedDialog); + + private void kcbtnSizable_Click(object sender, EventArgs e) => UpdateBorderStyle(FormBorderStyle.Sizable); + + private void kcbtnFixedToolWindow_Click(object sender, EventArgs e) => UpdateBorderStyle(FormBorderStyle.FixedToolWindow); + + private void kcbtnSizableToolWindow_Click(object sender, EventArgs e) => UpdateBorderStyle(FormBorderStyle.SizableToolWindow); + + private void UpdateBorderStyle(FormBorderStyle borderStyle) + { + switch (borderStyle) + { + case FormBorderStyle.None: + FormBorderStyle = FormBorderStyle.None; + + kcbtnNone.Checked = true; + + kcbtnFixed3D.Checked = false; + + kcbtnFixedDialog.Checked = false; + + kcbtnFixedSingle.Checked = false; + + kcbtnFixedToolWindow.Checked = false; + + kcbtnSizable.Checked = false; + + kcbtnSizableToolWindow.Checked = false; + break; + + case FormBorderStyle.FixedSingle: + FormBorderStyle = FormBorderStyle.FixedSingle; + + kcbtnNone.Checked = false; + + kcbtnFixed3D.Checked = false; + + kcbtnFixedDialog.Checked = false; + + kcbtnFixedSingle.Checked = true; + + kcbtnFixedToolWindow.Checked = false; + + kcbtnSizable.Checked = false; + + kcbtnSizableToolWindow.Checked = false; + break; + case FormBorderStyle.Fixed3D: + FormBorderStyle = FormBorderStyle.Fixed3D; + + kcbtnNone.Checked = false; + + kcbtnFixed3D.Checked = true; + + kcbtnFixedDialog.Checked = false; + + kcbtnFixedSingle.Checked = false; + + kcbtnFixedToolWindow.Checked = false; + + kcbtnSizable.Checked = false; + + kcbtnSizableToolWindow.Checked = false; + break; + case FormBorderStyle.FixedDialog: + FormBorderStyle = FormBorderStyle.FixedDialog; + + kcbtnNone.Checked = false; + + kcbtnFixed3D.Checked = false; + + kcbtnFixedDialog.Checked = true; + + kcbtnFixedSingle.Checked = false; + + kcbtnFixedToolWindow.Checked = false; + + kcbtnSizable.Checked = false; + + kcbtnSizableToolWindow.Checked = false; + break; + case FormBorderStyle.Sizable: + FormBorderStyle = FormBorderStyle.Sizable; + + kcbtnNone.Checked = false; + + kcbtnFixed3D.Checked = false; + + kcbtnFixedDialog.Checked = false; + + kcbtnFixedSingle.Checked = false; + + kcbtnFixedToolWindow.Checked = false; + + kcbtnSizable.Checked = true; + + kcbtnSizableToolWindow.Checked = false; + break; + case FormBorderStyle.FixedToolWindow: + FormBorderStyle = FormBorderStyle.FixedToolWindow; + + kcbtnNone.Checked = false; + + kcbtnFixed3D.Checked = false; + + kcbtnFixedDialog.Checked = false; + + kcbtnFixedSingle.Checked = false; + + kcbtnFixedToolWindow.Checked = true; + + kcbtnSizable.Checked = false; + + kcbtnSizableToolWindow.Checked = false; + break; + case FormBorderStyle.SizableToolWindow: + FormBorderStyle = FormBorderStyle.SizableToolWindow; + + kcbtnNone.Checked = false; + + kcbtnFixed3D.Checked = false; + + kcbtnFixedDialog.Checked = false; + + kcbtnFixedSingle.Checked = false; + + kcbtnFixedToolWindow.Checked = false; + + kcbtnSizable.Checked = false; + + kcbtnSizableToolWindow.Checked = true; + break; + default: + throw new ArgumentOutOfRangeException(nameof(borderStyle), borderStyle, null); + } + } + + private void kryptonButton5_Click(object sender, EventArgs e) + { + kryptonTaskDialog1.ShowDialog(); + } + + private void kryptonButton9_Click(object sender, EventArgs e) + { + var commandLinks = new CommandLinkButtons(); + + commandLinks.ShowDialog(); + } + + private void kryptonColorButton1_SelectedColorChanged(object sender, ColorEventArgs e) + { + kryptonButton1.Values.DropDownArrowColor = e.Color; + } + + private void kryptonButton10_Click(object sender, EventArgs e) + { + var toastNotification = new ToastNotificationTestChoice(); + + toastNotification.Show(); + } + + private void kryptonButton11_Click(object sender, EventArgs e) + { + KryptonMessageBoxDep.Show(string.Empty, @"Test with no Text", showCloseButton: kryptonCheckBox1.Checked); + } + + private void kryptonButton12_Click(object sender, EventArgs e) + { + var fadeForm = new FadeFormTest(); + + fadeForm.ShowDialog(); + } + + private void kcmdOpenImage_Execute(object sender, EventArgs e) + { + + } + + private void kbtnDialogs_Click(object sender, EventArgs e) + { + var kde = new KryptonDialogExamples(); + + kde.ShowDialog(); + } + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Main.resx b/Source/Krypton Components/TestForm/Main.resx new file mode 100644 index 000000000..24bf18d0e --- /dev/null +++ b/Source/Krypton Components/TestForm/Main.resx @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBBwMpBNNjwEAAAADzSURBVDhPnZGhCoUwFIYHgiD4AlbB5AuYfAGT + SRBMZsFkMhlMJkEQBIPVahJsstc6lzPYcG4X7m74wvl3zrcdRiilX1nXFVzXheu6QHeOaENOmqZACIG6 + rs0FeKvv+0zgeR7c962VKAGnaRqoqgriOGaSvu/NBGEYwnEcMI4jE2Ct61MCZFkWiKJIDARBwCTzPCsS + qeAkSQJd14nmtm2ZANd59iFSgZznCbZts4E3lmXBvu+SRBpG8MvyPFduKoqCSbIs+y4YhgEcx4FpmhTB + tm3iFc/1RAPfk1OWpWh6nyGYSYJ/0YYmaEMTtKEJ2vB3KPkALW4yqONYazYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAK/SURBVDhPrZJbSNNRHMfPLrDmcpuFS21u5jTNwjShBwl8 + iMKHeojyyfcgetOox9HLSKdmoYE1N28tZqSUZgmW5W3et7Y551Jzw43N4X95hUT/387mIKioHvrAl3P7 + fb/8zuGQP3GtulrYb1AeiC3/nXy9/XKWMdhVaJoO+ayHAruzpGd1gFccO/6VQt1QfH7dlDK3YepqbrPb + mNPuh6p7DwVdS9j2JAAhgl0nB2tmTnugj3cl2CFQjbYScdRcpDYcONXkcuaYfOvZJj+yXm1B9TwEuXEV + ee2zYJw0wE2ABaplDvYcXHyzcTaZj1wXIte7dL0h7njT/KaKGtNNK0h76kdamx8pLSHkGp0IO6SAi4B1 + RsSJzuEl2BzhbvWrEw9GAzJ1c6tK0yqUrT5W0bIMRfMyZIYgTrbOgLHSgBlqthOWtXPA2mjAHMHGADfc + W05ENEAdp3jkDie1rUHWGGRluiASdQGIGxio9C5sWESAgwbYCAsrNX+imiXY7idMb/kRESkpKeHl1w+6 + ThjnkW1wIFtvR1ajDelPXCgwDMNrTkV4UoLwONVYRGJ8tUrg6ZHOqYsIP/qQX14fblp3JYCZkIIZl7LM + WHSEZ0SOM48HoKh3QFVvQXrdNI5RZercyLvb2RY1R9h4QS5gjLZG78dO0lYn6ThF2C2zEPKHdvC1QQir + vBBqvRDUBCDVuJF4493FmH2flQ5+M+xcYJy+tJlqlCA8KIaydgqCCg/iKz5DpF2E9L4P8rK3LTHbDyxq + iZTp5A3BFjFTDdOADxKkVk2Ar1mC8N4C4mv8SLrVN3y2VL3/iX7GqhXJgiZ+N0YjndCA92IkV4yDaPwQ + axaRXNb7JqekMilW/nseFGcI/AaeZruL7OwMSpBSZYfwtmX36M2XlcUZGYJY2d/x1ZJzDn3y6Ok7pgFZ + 6bPzse3/DSHfAf2EqkKNe37BAAAAAElFTkSuQmCC + + + + 336, 16 + + + 166, 16 + + + 510, 16 + + + 18, 16 + + + 786, 16 + + + 936, 16 + + + 17, 53 + + + + + + + + + + + + + + + + + + + + + + + + + + + No + + + 213, 53 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.Designer.cs b/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.Designer.cs new file mode 100644 index 000000000..e928b9b20 --- /dev/null +++ b/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.Designer.cs @@ -0,0 +1,636 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class MenuToolBarStatusStripTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MenuToolBarStatusStripTest)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); + this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.printToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.printPreviewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.redoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.cutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pasteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.selectAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.customizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.indexToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.searchToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.kryptonProgressBarToolStripItem1 = new Krypton.Toolkit.KryptonProgressBarToolStripItem(); + this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonThemeListBox1 = new Krypton.Toolkit.KryptonThemeListBox(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.newToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.saveToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.printToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.cutToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.copyToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.pasteToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.helpToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripComboBox1 = new System.Windows.Forms.ToolStripComboBox(); + this.kryptonToolStripComboBox1 = new Krypton.Toolkit.KryptonToolStripComboBox(); + this.menuStrip1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.toolStripContainer1.ContentPanel.SuspendLayout(); + this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); + this.toolStripContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonToolStripComboBox1.KryptonComboBoxControl)).BeginInit(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem, + this.toolsToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(804, 24); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.openToolStripMenuItem, + this.toolStripSeparator, + this.saveToolStripMenuItem, + this.saveAsToolStripMenuItem, + this.toolStripSeparator1, + this.printToolStripMenuItem, + this.printPreviewToolStripMenuItem, + this.toolStripSeparator2, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripMenuItem.Image"))); + this.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.newToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.newToolStripMenuItem.Text = "&New"; + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripMenuItem.Image"))); + this.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.openToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.openToolStripMenuItem.Text = "&Open"; + // + // toolStripSeparator + // + this.toolStripSeparator.Name = "toolStripSeparator"; + this.toolStripSeparator.Size = new System.Drawing.Size(143, 6); + // + // saveToolStripMenuItem + // + this.saveToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripMenuItem.Image"))); + this.saveToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.saveToolStripMenuItem.Text = "&Save"; + // + // saveAsToolStripMenuItem + // + this.saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; + this.saveAsToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.saveAsToolStripMenuItem.Text = "Save &As"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(143, 6); + // + // printToolStripMenuItem + // + this.printToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripMenuItem.Image"))); + this.printToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.printToolStripMenuItem.Name = "printToolStripMenuItem"; + this.printToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P))); + this.printToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.printToolStripMenuItem.Text = "&Print"; + // + // printPreviewToolStripMenuItem + // + this.printPreviewToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("printPreviewToolStripMenuItem.Image"))); + this.printPreviewToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.printPreviewToolStripMenuItem.Name = "printPreviewToolStripMenuItem"; + this.printPreviewToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.printPreviewToolStripMenuItem.Text = "Print Pre&view"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(143, 6); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(146, 22); + this.exitToolStripMenuItem.Text = "E&xit"; + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.undoToolStripMenuItem, + this.redoToolStripMenuItem, + this.toolStripSeparator3, + this.cutToolStripMenuItem, + this.copyToolStripMenuItem, + this.pasteToolStripMenuItem, + this.toolStripSeparator4, + this.selectAllToolStripMenuItem}); + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); + this.editToolStripMenuItem.Text = "&Edit"; + // + // undoToolStripMenuItem + // + this.undoToolStripMenuItem.Name = "undoToolStripMenuItem"; + this.undoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); + this.undoToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.undoToolStripMenuItem.Text = "&Undo"; + // + // redoToolStripMenuItem + // + this.redoToolStripMenuItem.Name = "redoToolStripMenuItem"; + this.redoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Y))); + this.redoToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.redoToolStripMenuItem.Text = "&Redo"; + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(141, 6); + // + // cutToolStripMenuItem + // + this.cutToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("cutToolStripMenuItem.Image"))); + this.cutToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.cutToolStripMenuItem.Name = "cutToolStripMenuItem"; + this.cutToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.cutToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.cutToolStripMenuItem.Text = "Cu&t"; + // + // copyToolStripMenuItem + // + this.copyToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("copyToolStripMenuItem.Image"))); + this.copyToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.copyToolStripMenuItem.Name = "copyToolStripMenuItem"; + this.copyToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C))); + this.copyToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.copyToolStripMenuItem.Text = "&Copy"; + // + // pasteToolStripMenuItem + // + this.pasteToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("pasteToolStripMenuItem.Image"))); + this.pasteToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.pasteToolStripMenuItem.Name = "pasteToolStripMenuItem"; + this.pasteToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.V))); + this.pasteToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.pasteToolStripMenuItem.Text = "&Paste"; + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(141, 6); + // + // selectAllToolStripMenuItem + // + this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; + this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.selectAllToolStripMenuItem.Text = "Select &All"; + // + // toolsToolStripMenuItem + // + this.toolsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.customizeToolStripMenuItem, + this.optionsToolStripMenuItem}); + this.toolsToolStripMenuItem.Name = "toolsToolStripMenuItem"; + this.toolsToolStripMenuItem.Size = new System.Drawing.Size(46, 20); + this.toolsToolStripMenuItem.Text = "&Tools"; + // + // customizeToolStripMenuItem + // + this.customizeToolStripMenuItem.Name = "customizeToolStripMenuItem"; + this.customizeToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.customizeToolStripMenuItem.Text = "&Customize"; + // + // optionsToolStripMenuItem + // + this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; + this.optionsToolStripMenuItem.Size = new System.Drawing.Size(130, 22); + this.optionsToolStripMenuItem.Text = "&Options"; + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contentsToolStripMenuItem, + this.indexToolStripMenuItem, + this.searchToolStripMenuItem, + this.toolStripSeparator5, + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "&Help"; + // + // contentsToolStripMenuItem + // + this.contentsToolStripMenuItem.Name = "contentsToolStripMenuItem"; + this.contentsToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.contentsToolStripMenuItem.Text = "&Contents"; + // + // indexToolStripMenuItem + // + this.indexToolStripMenuItem.Name = "indexToolStripMenuItem"; + this.indexToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.indexToolStripMenuItem.Text = "&Index"; + // + // searchToolStripMenuItem + // + this.searchToolStripMenuItem.Name = "searchToolStripMenuItem"; + this.searchToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.searchToolStripMenuItem.Text = "&Search"; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(119, 6); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(122, 22); + this.aboutToolStripMenuItem.Text = "&About..."; + // + // statusStrip1 + // + this.statusStrip1.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World); + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel1, + this.kryptonProgressBarToolStripItem1}); + this.statusStrip1.Location = new System.Drawing.Point(0, 430); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.ManagerRenderMode; + this.statusStrip1.Size = new System.Drawing.Size(804, 24); + this.statusStrip1.TabIndex = 1; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 19); + this.toolStripStatusLabel1.Text = "toolStripStatusLabel1"; + // + // kryptonProgressBarToolStripItem1 + // + this.kryptonProgressBarToolStripItem1.Name = "kryptonProgressBarToolStripItem1"; + this.kryptonProgressBarToolStripItem1.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kryptonProgressBarToolStripItem1.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBarToolStripItem1.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBarToolStripItem1.Value = 50; + this.kryptonProgressBarToolStripItem1.Values.Text = ""; + // + // toolStripContainer1 + // + // + // toolStripContainer1.ContentPanel + // + this.toolStripContainer1.ContentPanel.Controls.Add(this.kryptonPanel1); + this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(804, 381); + this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainer1.Location = new System.Drawing.Point(0, 24); + this.toolStripContainer1.Name = "toolStripContainer1"; + this.toolStripContainer1.Size = new System.Drawing.Size(804, 406); + this.toolStripContainer1.TabIndex = 2; + this.toolStripContainer1.Text = "toolStripContainer1"; + // + // toolStripContainer1.TopToolStripPanel + // + this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonThemeListBox1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(804, 381); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonThemeListBox1 + // + this.kryptonThemeListBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + this.kryptonThemeListBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonThemeListBox1.Location = new System.Drawing.Point(0, 0); + this.kryptonThemeListBox1.Margin = new System.Windows.Forms.Padding(5); + this.kryptonThemeListBox1.Name = "kryptonThemeListBox1"; + this.kryptonThemeListBox1.Size = new System.Drawing.Size(804, 381); + this.kryptonThemeListBox1.TabIndex = 0; + // + // toolStrip1 + // + this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None; + this.toolStrip1.Font = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.World); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripButton, + this.openToolStripButton, + this.saveToolStripButton, + this.printToolStripButton, + this.toolStripSeparator6, + this.cutToolStripButton, + this.copyToolStripButton, + this.pasteToolStripButton, + this.toolStripSeparator7, + this.helpToolStripButton, + this.toolStripComboBox1, + this.kryptonToolStripComboBox1}); + this.toolStrip1.Location = new System.Drawing.Point(3, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(483, 25); + this.toolStrip1.TabIndex = 0; + // + // newToolStripButton + // + this.newToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image"))); + this.newToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.newToolStripButton.Name = "newToolStripButton"; + this.newToolStripButton.Size = new System.Drawing.Size(23, 22); + this.newToolStripButton.Text = "&New"; + // + // openToolStripButton + // + this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image"))); + this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openToolStripButton.Name = "openToolStripButton"; + this.openToolStripButton.Size = new System.Drawing.Size(23, 22); + this.openToolStripButton.Text = "&Open"; + // + // saveToolStripButton + // + this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.saveToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripButton.Image"))); + this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.saveToolStripButton.Name = "saveToolStripButton"; + this.saveToolStripButton.Size = new System.Drawing.Size(23, 22); + this.saveToolStripButton.Text = "&Save"; + // + // printToolStripButton + // + this.printToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.printToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripButton.Image"))); + this.printToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.printToolStripButton.Name = "printToolStripButton"; + this.printToolStripButton.Size = new System.Drawing.Size(23, 22); + this.printToolStripButton.Text = "&Print"; + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(6, 25); + // + // cutToolStripButton + // + this.cutToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.cutToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("cutToolStripButton.Image"))); + this.cutToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.cutToolStripButton.Name = "cutToolStripButton"; + this.cutToolStripButton.Size = new System.Drawing.Size(23, 22); + this.cutToolStripButton.Text = "C&ut"; + // + // copyToolStripButton + // + this.copyToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.copyToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("copyToolStripButton.Image"))); + this.copyToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.copyToolStripButton.Name = "copyToolStripButton"; + this.copyToolStripButton.Size = new System.Drawing.Size(23, 22); + this.copyToolStripButton.Text = "&Copy"; + // + // pasteToolStripButton + // + this.pasteToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.pasteToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("pasteToolStripButton.Image"))); + this.pasteToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.pasteToolStripButton.Name = "pasteToolStripButton"; + this.pasteToolStripButton.Size = new System.Drawing.Size(23, 22); + this.pasteToolStripButton.Text = "&Paste"; + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(6, 25); + // + // helpToolStripButton + // + this.helpToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.helpToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("helpToolStripButton.Image"))); + this.helpToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.helpToolStripButton.Name = "helpToolStripButton"; + this.helpToolStripButton.Size = new System.Drawing.Size(23, 22); + this.helpToolStripButton.Text = "He&lp"; + // + // toolStripComboBox1 + // + this.toolStripComboBox1.BackColor = System.Drawing.Color.Fuchsia; + this.toolStripComboBox1.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.toolStripComboBox1.Name = "toolStripComboBox1"; + this.toolStripComboBox1.Size = new System.Drawing.Size(121, 25); + // + // kryptonToolStripComboBox1 + // + this.kryptonToolStripComboBox1.AutoSize = false; + // + // kryptonToolStripComboBox1 + // + this.kryptonToolStripComboBox1.KryptonComboBoxControl.AccessibleName = "kryptonToolStripComboBox1"; + this.kryptonToolStripComboBox1.KryptonComboBoxControl.DropDownWidth = 121; + this.kryptonToolStripComboBox1.KryptonComboBoxControl.IntegralHeight = false; + this.kryptonToolStripComboBox1.KryptonComboBoxControl.Items.AddRange(new object[] { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10"}); + this.kryptonToolStripComboBox1.KryptonComboBoxControl.Location = new System.Drawing.Point(328, 2); + this.kryptonToolStripComboBox1.KryptonComboBoxControl.Name = "kryptonToolStripComboBox1"; + this.kryptonToolStripComboBox1.KryptonComboBoxControl.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonToolStripComboBox1.KryptonComboBoxControl.TabIndex = 0; + this.kryptonToolStripComboBox1.KryptonComboBoxControl.Text = "kryptonToolStripComboBox1"; + this.kryptonToolStripComboBox1.Name = "kryptonToolStripComboBox1"; + this.kryptonToolStripComboBox1.Size = new System.Drawing.Size(121, 21); + this.kryptonToolStripComboBox1.Text = "kryptonToolStripComboBox1"; + // + // MenuToolBarStatusStripTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(804, 454); + this.Controls.Add(this.toolStripContainer1); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "MenuToolBarStatusStripTest"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Text = "Menu/ToolBar/Status Strip"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.toolStripContainer1.ContentPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false); + this.toolStripContainer1.TopToolStripPanel.PerformLayout(); + this.toolStripContainer1.ResumeLayout(false); + this.toolStripContainer1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonToolStripComboBox1.KryptonComboBoxControl)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveAsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem printToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem printPreviewToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem redoToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem toolsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem customizeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem optionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem contentsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem indexToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem searchToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private Krypton.Toolkit.KryptonProgressBarToolStripItem kryptonProgressBarToolStripItem1; + private System.Windows.Forms.ToolStripContainer toolStripContainer1; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton newToolStripButton; + private System.Windows.Forms.ToolStripButton openToolStripButton; + private System.Windows.Forms.ToolStripButton saveToolStripButton; + private System.Windows.Forms.ToolStripButton printToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripButton cutToolStripButton; + private System.Windows.Forms.ToolStripButton copyToolStripButton; + private System.Windows.Forms.ToolStripButton pasteToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripButton helpToolStripButton; + private ToolStripComboBox toolStripComboBox1; + private KryptonPanel kryptonPanel1; + private KryptonThemeListBox kryptonThemeListBox1; + private KryptonToolStripComboBox kryptonToolStripComboBox1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.cs b/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.cs new file mode 100644 index 000000000..81e48154d --- /dev/null +++ b/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class MenuToolBarStatusStripTest : KryptonForm + { + public MenuToolBarStatusStripTest() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.resx b/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.resx new file mode 100644 index 000000000..c2ef02a6b --- /dev/null +++ b/Source/Krypton Components/TestForm/MenuToolBarStatusStripTest.resx @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU + 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j + LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei + ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 + mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV + 2Mz2wxeg6/UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW + DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 + 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ + 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH + 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy + ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS + rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV + Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W + r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv + 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIpSURBVDhPtZL/T1JRGMb5p1itrVZbbRpqZbawnBENV1I0 + jGlByTSyJTXJwq2oKZQb1KAv6JCYWSxvBrkkZUq4CeQEiRABFeLL072Xa0zRra31bO8v57zP5znnPYf1 + X+TxhWF6O7VtGYcnwbSWijKPOLzYrPSvLPwLS3huGUMlT7o9wGD9grVUBj+icdid03S9tDmgNxNwTgVQ + J+rA8XNtWwM+uuZATMwxmQVRycuJFNyzIRitDlScugKzjSgFRGJJaIwEsrk8AsHIhnSL/Ssck37UNipQ + I5DjtuYV7uksRYhr2kebhx2eP6nrycFIEh5fBA/1Nvru8q5+PDaOovK0rABwfwugWzcErfkzHhjsePL6 + E7q1VrTdNUDcrgGvSYlDZHN5XTNOnL8BVe8AJAoNDtZfLgDu9L1BPJmikzcrk81hlRwodZJwdBXziwnI + OrVoaOkiT8C8hKLHBPO7CbywOaE1jeC+bhAd6meQdvZC1KoG/5IS3MZ2HObLUHZSggvkWq3wOvbWiAqA + VpWeyStVfCUNf3AZ4zNhfHCFMEDMgye+hYr6FrDLzxQAUuVTpr0ocn74mchg5vsKRt1RcHp2Qv9+kZ78 + UcE17KkWFgHNN/uQzgBkGKLJPBZiecyGchjzrmFwPIF++xJUbDbUQzEacIArLpopSRSP4CUN1Obf1Abz + uqob5KjiXwWH/GVl5HPt5zZh37GL2H1EiF1VZ7GDI6CNW5r/TSzWbwHYL0mKJ5czAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGCSURBVDhPnZK9S0JRGMb9F1xb2gqaq6mhwCGDtvYIIyLI + cJOE1paoIYpMKUjFRDH87lpoakGlIZF9DA2hZJEQhJXl1xPn3HPV29WQfvBwOfA+P95zuDJ39A6/4wyl + YOOSMHvOcHGThuwvSKEVRvsR+pQqWD3R1pK98DUbl7Jm5hA8SfESd6S5xH5wycalrO4E0D8yWQuriLH6 + E2xcSqlcoRJBxCpiTO5TNi4m/ZgDF4nDsOulsfujyGRzUsmWM8YqdcggKbveS3A88bEkslRye58RSzZt + IVarY/FFaPmlwp+fUaESYRNW5Vm3BPmpBpZNvppACDmTLbS6FbGAPFAj5OGI4PALOK/yZfIlAlk4j7n5 + xdaCarWKj0KRXmE2+UklJEJZZ/RCPTPdWvBdLOP1rYD41QNcgRiVkKJQ1mjGsa2VNxeQb2OWDC7sh47p + ddQLeoyOTSFiVAAFvVhChsmv2k6Uvd3Icx1UolMNiDdpl4nhLiohW/xb0tMph2JwCJxjAz9A30JI8zYA + tAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGDSURBVDhPrZFNSwJRGIX9NYGbFoUlFElY1EJQKEYhCJsi + LaVsERnRF5iCaSZJO1toCDVGFkgoFpWQWWRR2aIvUxm1BKN1wSnHCFw4TOCzue+9nPNw4eVVnav4Izzb + QfxeGZ5TWaxT/rK3irzmC7CsusvC1G4IkbNLboIiDieF4GGUKeTeClDpppF8eeEu2PIfwfrzizSdw3Hk + EnKlFpkMzV2wH77AosOFTV8A+vkl9CiHuJeLJNNZjM8tYWB0FkTvMAwmy/8ERTR6CwjlGAi1Ccence6C + 1NsXzN4PKIxJLLgeIJ2MoXvmFraNBKK3eXZRIveJPvs7FIYniEkXZENOdE+GIZ2Ko10TwLK7tJmKmL0F + EEYarYM+NMnt0C1sQzpx/lcSEnZ2gcKY/gs0dlmZuWvmjjmpwA1qxVp2AWFIMAF/OAGBzMjMI7ZrtJCb + 4Df3o4Zfxy7QrdxDRFKol5khkpR2H4qmIOzUQNBGwrsXYxccnNOQqNbQ0KGGZ+eEPVwdeLxvqqrf4wGh + TNAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHkSURBVDhPvZHfS1NhHIf3p5QypLr2D4goMwoMCi/qIugH + Xe1Cr7qKDIMkZixwNhfWLGWbnuki0kXKzLU023KubBNPJrbRdOzocm6e2dPOO21mMS+CHvjcvOf9PF++ + 79H9M+7RT2iRRsIi9sEAXe43yAvf2LpSHq28G9uAnytNT4jMLewtcQ2Ht2pF8ps/aOt+gccX5lxD694S + +1BQFD1RkN5DSFa4Z3uONKbgHE3h8KZ4OJTC1J8UiSzmfhd2uf1CoJHbyKOsZokl0kKwm+aeJaov+wjO + rpQkVqdXfOz0bWAcVLghfaXxkUz3y2VxvpMGSwL3uMKh+gHezSSLEnNhX23vtYzKUirDfGyFj/Iy1mdx + UWqR8iKhwtQLxjgH659y4EwvVXWPiwJt3/Ws+muywRrlqvkDdx3zQrCN8l1ldnEd3/QqFmkS/akHJYGS + zjLzOUEwEsMf+sLI2zmaOou/93pPGoM5zvk7UU7fnBKxSBPoT7SXBNW1F/9Io2lKCNTCeomUyrS8xnBA + wfUqyf1eP5U1ptJD/o1LzeNCsHPydtqdr6k4aiwvOHvNSya3ibU/QIdrEkvfhJislc32MfYfuV1eUGPw + FF7bIVJVZ0N/soPK421UHGstlFvYd/hWecF/Qqf7CR0A5wwgSQA2AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJSSURBVDhPtZJrSJNRGMdf6IN9KbpQn/pUEH2JIoLqQ0Zh + FqYZRmJG1iKmUqKyLB2pqSm6vC1Nm5GXoeatEsVJ0RASR3eNzegikRq5lrV3857Fr/d9ddlICoL+8OfA + Oef/e57zcIT/os7WLMw302muSGJ2689qqi7A44q8IzjtNYzarzHQm8tZtT8FmRqu6LToMxN+B8qhCbGR + KVcDE85ajKUaxoaryEuL4UVXIudPB5Ko2oy98xjDptXERuz3hsgAOTzlqqMk6yjdllzE90UM9Wp5azlB + S1kwkeG+1CSv4mmBQPThfd6Ahqq8GYB4A11yBKmaMLQxoZyLDkGjDiZOFUhUuB+FsWsUQFiArzegtlzH + pFjPpMPA2GA2jucx2KqWK7ZWLqO7dBGP9D5KWLbfto3eAKMhi3FHBeP9GYy9PMXos4OIrYvJrzSRbWjm + wuV6EnVG4tLLiEzSExGf4w0oL05nZEDPaK+akceBuO9v4uPtFUrYo6npbzhdE/QPOQmNSiPouHYOUpaf + gvgqA/dDf9wd63G1r2SgUlAqyyq/1anYUGfG2mdXwne7bOwJUc1AinOS+NxzBpd5HWLbUhyNPvRdF5S2 + v05/54tbqvzBifWNHUvPOwLC4/CXwrv2HsB3+w6EwosJOB5ESeElfGpayGD1AmwlArHSm+W2PR1clToo + MrbT0mFTVtlbN6xFuJQar3wQz5Q9VksD+7XyPctrJdx4p5s605M5gKz8lJPSDwtGFbKboJ1blAN52vKb + PdXm80/AfDokTVu+8DfPXv9XCcIPTvjvLQ8YoakAAAAASUVORK5CYII= + + + + 132, 17 + + + 247, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU + 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j + LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei + ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 + mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV + 2Mz2wxeg6/UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW + DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 + 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ + 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH + 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy + ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS + rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV + Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W + r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv + 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIpSURBVDhPtZL/T1JRGMb5p1itrVZbbRpqZbawnBENV1I0 + jGlByTSyJTXJwq2oKZQb1KAv6JCYWSxvBrkkZUq4CeQEiRABFeLL072Xa0zRra31bO8v57zP5znnPYf1 + X+TxhWF6O7VtGYcnwbSWijKPOLzYrPSvLPwLS3huGUMlT7o9wGD9grVUBj+icdid03S9tDmgNxNwTgVQ + J+rA8XNtWwM+uuZATMwxmQVRycuJFNyzIRitDlScugKzjSgFRGJJaIwEsrk8AsHIhnSL/Ssck37UNipQ + I5DjtuYV7uksRYhr2kebhx2eP6nrycFIEh5fBA/1Nvru8q5+PDaOovK0rABwfwugWzcErfkzHhjsePL6 + E7q1VrTdNUDcrgGvSYlDZHN5XTNOnL8BVe8AJAoNDtZfLgDu9L1BPJmikzcrk81hlRwodZJwdBXziwnI + OrVoaOkiT8C8hKLHBPO7CbywOaE1jeC+bhAd6meQdvZC1KoG/5IS3MZ2HObLUHZSggvkWq3wOvbWiAqA + VpWeyStVfCUNf3AZ4zNhfHCFMEDMgye+hYr6FrDLzxQAUuVTpr0ocn74mchg5vsKRt1RcHp2Qv9+kZ78 + UcE17KkWFgHNN/uQzgBkGKLJPBZiecyGchjzrmFwPIF++xJUbDbUQzEacIArLpopSRSP4CUN1Obf1Abz + uqob5KjiXwWH/GVl5HPt5zZh37GL2H1EiF1VZ7GDI6CNW5r/TSzWbwHYL0mKJ5czAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGDSURBVDhPrZFNSwJRGIX9NYGbFoUlFElY1EJQKEYhCJsi + LaVsERnRF5iCaSZJO1toCDVGFkgoFpWQWWRR2aIvUxm1BKN1wSnHCFw4TOCzue+9nPNw4eVVnav4Izzb + QfxeGZ5TWaxT/rK3irzmC7CsusvC1G4IkbNLboIiDieF4GGUKeTeClDpppF8eeEu2PIfwfrzizSdw3Hk + EnKlFpkMzV2wH77AosOFTV8A+vkl9CiHuJeLJNNZjM8tYWB0FkTvMAwmy/8ERTR6CwjlGAi1Ccence6C + 1NsXzN4PKIxJLLgeIJ2MoXvmFraNBKK3eXZRIveJPvs7FIYniEkXZENOdE+GIZ2Ko10TwLK7tJmKmL0F + EEYarYM+NMnt0C1sQzpx/lcSEnZ2gcKY/gs0dlmZuWvmjjmpwA1qxVp2AWFIMAF/OAGBzMjMI7ZrtJCb + 4Df3o4Zfxy7QrdxDRFKol5khkpR2H4qmIOzUQNBGwrsXYxccnNOQqNbQ0KGGZ+eEPVwdeLxvqqrf4wGh + TNAAAAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/MessageBoxTest.Designer.cs b/Source/Krypton Components/TestForm/MessageBoxTest.Designer.cs new file mode 100644 index 000000000..c7a0a59eb --- /dev/null +++ b/Source/Krypton Components/TestForm/MessageBoxTest.Designer.cs @@ -0,0 +1,135 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class MessageBoxTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonCheckBox1 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonButton11 = new Krypton.Toolkit.KryptonButton(); + this.kbtnTestMessagebox = new Krypton.Toolkit.KryptonButton(); + this.kcmdMessageboxTest = new Krypton.Toolkit.KryptonCommand(); + this.kbtnCustomMessageBox = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnCustomMessageBox); + this.kryptonPanel1.Controls.Add(this.kryptonCheckBox1); + this.kryptonPanel1.Controls.Add(this.kryptonButton11); + this.kryptonPanel1.Controls.Add(this.kbtnTestMessagebox); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(272, 142); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonCheckBox1 + // + this.kryptonCheckBox1.Checked = true; + this.kryptonCheckBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.kryptonCheckBox1.Location = new System.Drawing.Point(12, 105); + this.kryptonCheckBox1.Name = "kryptonCheckBox1"; + this.kryptonCheckBox1.Size = new System.Drawing.Size(126, 20); + this.kryptonCheckBox1.TabIndex = 41; + this.kryptonCheckBox1.Values.Text = "Show Close Button"; + // + // kryptonButton11 + // + this.kryptonButton11.Location = new System.Drawing.Point(12, 43); + this.kryptonButton11.Name = "kryptonButton11"; + this.kryptonButton11.Size = new System.Drawing.Size(245, 25); + this.kryptonButton11.TabIndex = 40; + this.kryptonButton11.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton11.Values.Text = "Test Messagebox (no text)"; + this.kryptonButton11.Click += new System.EventHandler(this.kryptonButton11_Click); + // + // kbtnTestMessagebox + // + this.kbtnTestMessagebox.Location = new System.Drawing.Point(12, 12); + this.kbtnTestMessagebox.Name = "kbtnTestMessagebox"; + this.kbtnTestMessagebox.Size = new System.Drawing.Size(245, 25); + this.kbtnTestMessagebox.TabIndex = 39; + this.kbtnTestMessagebox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnTestMessagebox.Values.Text = "Test Messagebox"; + this.kbtnTestMessagebox.Click += new System.EventHandler(this.kbtnTestMessagebox_Click); + // + // kcmdMessageboxTest + // + this.kcmdMessageboxTest.Text = "kryptonCommand1"; + this.kcmdMessageboxTest.Execute += new System.EventHandler(this.kcmdMessageboxTest_Execute); + // + // kbtnCustomMessageBox + // + this.kbtnCustomMessageBox.Location = new System.Drawing.Point(12, 74); + this.kbtnCustomMessageBox.Name = "kbtnCustomMessageBox"; + this.kbtnCustomMessageBox.Size = new System.Drawing.Size(245, 25); + this.kbtnCustomMessageBox.TabIndex = 42; + this.kbtnCustomMessageBox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnCustomMessageBox.Values.Text = "Test Messagebox (custom)"; + this.kbtnCustomMessageBox.Click += new System.EventHandler(this.kbtnCustomMessageBox_Click); + // + // MessageBoxTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(272, 142); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.Name = "MessageBoxTest"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "MessageBoxTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox1; + private Krypton.Toolkit.KryptonButton kryptonButton11; + private Krypton.Toolkit.KryptonButton kbtnTestMessagebox; + private Krypton.Toolkit.KryptonCommand kcmdMessageboxTest; + private KryptonButton kbtnCustomMessageBox; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/MessageBoxTest.cs b/Source/Krypton Components/TestForm/MessageBoxTest.cs new file mode 100644 index 000000000..8553463a5 --- /dev/null +++ b/Source/Krypton Components/TestForm/MessageBoxTest.cs @@ -0,0 +1,56 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.Diagnostics; + +namespace TestForm +{ + public partial class MessageBoxTest : KryptonForm + { + public MessageBoxTest() + { + InitializeComponent(); + } + + private void kbtnTestMessagebox_Click(object sender, EventArgs e) + { + KryptonMessageBox.Show(@"This is a test!", @"Testing", KryptonMessageBoxButtons.OK, + KryptonMessageBoxIcon.Error, showCloseButton: kryptonCheckBox1.Checked); + + KryptonMessageBoxDep.Show(@"This is a test!", @"Testing", KryptonMessageBoxButtons.OK, + KryptonMessageBoxIcon.Error, options: MessageBoxOptions.RtlReading, + contentAreaType: MessageBoxContentAreaType.LinkLabel, + linkAreaCommand: kcmdMessageboxTest, showCloseButton: kryptonCheckBox1.Checked); + } + + private void kryptonButton11_Click(object sender, EventArgs e) + { + KryptonMessageBox.Show(string.Empty, @"Test with no Text"); + } + + private void kcmdMessageboxTest_Execute(object sender, EventArgs e) + { + try + { + Process.Start(@"C:\\Windows\\Notepad.exe"); + } + catch (Exception exception) + { + MessageBox.Show(exception.ToString()); + } + } + + private void kbtnCustomMessageBox_Click(object sender, EventArgs e) + { + var customMessageBoxTest = new CustomMessageBoxTest(); + + customMessageBoxTest.Show(); + } + } +} diff --git a/Source/Krypton Components/TestForm/MessageBoxTest.resx b/Source/Krypton Components/TestForm/MessageBoxTest.resx new file mode 100644 index 000000000..fc6827c8f --- /dev/null +++ b/Source/Krypton Components/TestForm/MessageBoxTest.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 6, 15 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/OutlookGridPriceGroup.cs b/Source/Krypton Components/TestForm/OutlookGridPriceGroup.cs new file mode 100644 index 000000000..e3612c61d --- /dev/null +++ b/Source/Krypton Components/TestForm/OutlookGridPriceGroup.cs @@ -0,0 +1,154 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public class OutlookGridPriceGroup : OutlookGridDefaultGroup + { + private int _priceCode; + private string _currency; + private object _val; + private const int NO_PRICE = 999999; + + public OutlookGridPriceGroup() + { + AllowHiddenWhenGrouped = false; + _currency = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol; + } + + /// + /// Constructor. + /// + /// The parentGroup if any. + public OutlookGridPriceGroup(IOutlookGridGroup? parentGroup) : base(parentGroup) + { + AllowHiddenWhenGrouped = false; + _currency = CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol; + } + + /// + /// Gets or sets the displayed text. + /// + public override string Text => $"{Column.DataGridViewColumn.HeaderText}: {GetPriceString(_priceCode)} ({(ItemCount == 1 ? OneItemText : ItemCount.ToString() + XxxItemsText)})"; + + private int GetPriceCode(decimal price) + { + return price switch + { + 0 => 0, + > 0 and <= 100 => 100, + > 100 and <= 200 => 200, + > 200 and <= 300 => 300, + > 300 and <= 600 => 600, + > 600 and <= 1000 => 1000, + > 1000 and <= 5000 => 5000, + > 5000 and <= 10000 => 10000, + > 10000 => 20000, + _ => 999999 + }; + } + + private string GetPriceString(int priceCode) + { + switch (priceCode) + { + case 0: + return "Free"; + case 100: + return "Below 100 " + _currency; + case 200: + return "Between 100 and 200 " + _currency; + case 300: + return "Between 200 and 300 " + _currency; + case 600: + return "Between 300 and 600 " + _currency; + case 1000: + return "Between 600 and 1000 " + _currency; + case 5000: + return "Between 1000 and 5000 " + _currency; + case 10000: + return "Between 5000 and 10000 " + _currency; + case 20000: + return "Above 10000 " + _currency; + case 999999: + return "No price"; + default: + return ""; + } + } + + /// + /// Gets or sets the Alphabetic value + /// + public override object? Value + { + get => _val; + set + { + if (object.ReferenceEquals(value, DBNull.Value) || value == null) + { + _priceCode = NO_PRICE; + _val = _priceCode; + } + else + { + if (decimal.TryParse(value.ToString(), out var val)) + { + _priceCode = GetPriceCode(val); + _val = _priceCode; + } + } + } + } + + #region "ICloneable Members" + + /// + /// Overrides the Clone() function + /// + /// OutlookGridAlphabeticGroup + public override object Clone() + { + OutlookGridPriceGroup gr = new OutlookGridPriceGroup(this.ParentGroup); + + gr.Column = this.Column; + gr.Value = this._val; + gr.Collapsed = this.Collapsed; + gr.Height = this.Height; + gr.GroupImage = this.GroupImage; + gr.FormatStyle = this.FormatStyle; + gr.XxxItemsText = this.XxxItemsText; + gr.OneItemText = this.OneItemText; + gr.AllowHiddenWhenGrouped = this.AllowHiddenWhenGrouped; + gr.SortBySummaryCount = this.SortBySummaryCount; + gr._currency = _currency; + gr._priceCode = _priceCode; + return gr; + } + + #endregion + + #region "IComparable Members" + /// + /// override the CompareTo, so only the first character is compared, instead of the whole string + /// this will result in classifying each item into a letter of the Alphabet. + /// for instance, this is useful when grouping names, they will be categorized under the letters A, B, C etc. + /// + /// + /// + public override int CompareTo(object? obj) + { + int orderModifier = (Column.SortDirection == SortOrder.Ascending ? 1 : -1); + int priceOther = obj is OutlookGridPriceGroup group ? group._priceCode : NO_PRICE; + return _priceCode.CompareTo(priceOther) * orderModifier; + } + #endregion + } + +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/OutlookGridTest.Designer.cs b/Source/Krypton Components/TestForm/OutlookGridTest.Designer.cs new file mode 100644 index 000000000..63496db85 --- /dev/null +++ b/Source/Krypton Components/TestForm/OutlookGridTest.Designer.cs @@ -0,0 +1,156 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class OutlookGridTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + Krypton.Toolkit.OutlookGridGroupCollection outlookGridGroupCollection2 = new Krypton.Toolkit.OutlookGridGroupCollection(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonHeaderGroup1 = new Krypton.Toolkit.KryptonHeaderGroup(); + this.bsahgLoad = new Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.bsahgSave = new Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.bsahgToggle = new Krypton.Toolkit.ButtonSpecHeaderGroup(); + this.kryptonOutlookGrid1 = new Krypton.Toolkit.KryptonOutlookGrid(); + this.kryptonOutlookGridGroupBox1 = new Krypton.Toolkit.KryptonOutlookGridGroupBox(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1.Panel)).BeginInit(); + this.kryptonHeaderGroup1.Panel.SuspendLayout(); + this.kryptonHeaderGroup1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonOutlookGrid1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonHeaderGroup1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(834, 451); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonHeaderGroup1 + // + this.kryptonHeaderGroup1.ButtonSpecs.Add(this.bsahgLoad); + this.kryptonHeaderGroup1.ButtonSpecs.Add(this.bsahgSave); + this.kryptonHeaderGroup1.ButtonSpecs.Add(this.bsahgToggle); + this.kryptonHeaderGroup1.HeaderVisibleSecondary = false; + this.kryptonHeaderGroup1.Location = new System.Drawing.Point(12, 12); + this.kryptonHeaderGroup1.Name = "kryptonHeaderGroup1"; + // + // kryptonHeaderGroup1.Panel + // + this.kryptonHeaderGroup1.Panel.Controls.Add(this.kryptonOutlookGrid1); + this.kryptonHeaderGroup1.Panel.Controls.Add(this.kryptonOutlookGridGroupBox1); + this.kryptonHeaderGroup1.Size = new System.Drawing.Size(798, 415); + this.kryptonHeaderGroup1.TabIndex = 1; + this.kryptonHeaderGroup1.ValuesPrimary.Heading = "Outlook Grid Test"; + this.kryptonHeaderGroup1.ValuesPrimary.Image = null; + // + // bsahgLoad + // + this.bsahgLoad.Text = "Load Configuration"; + this.bsahgLoad.UniqueName = "1fed1aca43f5451fb5338a5e9b75a28a"; + this.bsahgLoad.Click += new System.EventHandler(this.bsahgLoad_Click); + // + // bsahgSave + // + this.bsahgSave.Text = "Save Configuration"; + this.bsahgSave.UniqueName = "45dd354dd9ef4a6b9cd6ec27f6106770"; + this.bsahgSave.Click += new System.EventHandler(this.bsahgSave_Click); + // + // bsahgToggle + // + this.bsahgToggle.Text = "Toggle all Nodes"; + this.bsahgToggle.UniqueName = "9e6b2c0dd34b42329857feecee3e1629"; + this.bsahgToggle.Click += new System.EventHandler(this.bsahgToggle_Click); + // + // kryptonOutlookGrid1 + // + this.kryptonOutlookGrid1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.kryptonOutlookGrid1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonOutlookGrid1.FillMode = Krypton.Toolkit.GridFillMode.GroupsOnly; + this.kryptonOutlookGrid1.GroupCollection = outlookGridGroupCollection2; + this.kryptonOutlookGrid1.Location = new System.Drawing.Point(0, 46); + this.kryptonOutlookGrid1.Name = "kryptonOutlookGrid1"; + this.kryptonOutlookGrid1.PreviousSelectedGroupRow = -1; + this.kryptonOutlookGrid1.ShowLines = false; + this.kryptonOutlookGrid1.Size = new System.Drawing.Size(796, 337); + this.kryptonOutlookGrid1.TabIndex = 1; + this.kryptonOutlookGrid1.GroupImageClick += new System.EventHandler(this.kryptonOutlookGrid1_GroupImageClick); + this.kryptonOutlookGrid1.Resize += new System.EventHandler(this.kryptonOutlookGrid1_Resize); + // + // kryptonOutlookGridGroupBox1 + // + this.kryptonOutlookGridGroupBox1.AllowDrop = true; + this.kryptonOutlookGridGroupBox1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonOutlookGridGroupBox1.Location = new System.Drawing.Point(0, 0); + this.kryptonOutlookGridGroupBox1.Name = "kryptonOutlookGridGroupBox1"; + this.kryptonOutlookGridGroupBox1.Size = new System.Drawing.Size(796, 46); + this.kryptonOutlookGridGroupBox1.TabIndex = 0; + // + // OutlookGridTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(834, 451); + this.Controls.Add(this.kryptonPanel1); + this.Name = "OutlookGridTest"; + this.Text = "OutlookGridTest"; + this.Load += new System.EventHandler(this.OutlookGridTest_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1.Panel)).EndInit(); + this.kryptonHeaderGroup1.Panel.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonHeaderGroup1)).EndInit(); + this.kryptonHeaderGroup1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonOutlookGrid1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonHeaderGroup kryptonHeaderGroup1; + private Krypton.Toolkit.KryptonOutlookGridGroupBox kryptonOutlookGridGroupBox1; + private Krypton.Toolkit.KryptonOutlookGrid kryptonOutlookGrid1; + private Krypton.Toolkit.ButtonSpecHeaderGroup bsahgLoad; + private Krypton.Toolkit.ButtonSpecHeaderGroup bsahgSave; + private Krypton.Toolkit.ButtonSpecHeaderGroup bsahgToggle; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/OutlookGridTest.cs b/Source/Krypton Components/TestForm/OutlookGridTest.cs new file mode 100644 index 000000000..e9a65655e --- /dev/null +++ b/Source/Krypton Components/TestForm/OutlookGridTest.cs @@ -0,0 +1,222 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.Collections.Generic; +using System.Xml; + +namespace TestForm +{ + public partial class OutlookGridTest : KryptonForm + { + private bool _expand = true; + private static Random _random = new Random(); + + public OutlookGridTest() + { + InitializeComponent(); + } + + DateTime GetRandomDate(DateTime dtStart, DateTime dtEnd) + { + int cdayRange = (dtEnd - dtStart).Days; + + return dtStart.AddDays(_random.NextDouble() * cdayRange); + } + + private void LoadData() + { + //Setup Rows + OutlookGridRow row = new OutlookGridRow(); + List l = new List(); + kryptonOutlookGrid1.SuspendLayout(); + kryptonOutlookGrid1.ClearInternalRows(); + kryptonOutlookGrid1.FillMode = GridFillMode.GroupsAndNodes; + + List tokensList = + [ + new Token("Best seller", Color.Orange, Color.Black), + new Token("New", Color.LightGreen, Color.Black) + ]; + + Random random = new Random(); + + // Returns a random number within the range specified in parentheses. + XmlDocument doc = new XmlDocument(); + doc.Load(@"invoices.xml"); + IFormatProvider culture = new CultureInfo("en-US", true); + foreach (XmlNode customer in doc.SelectNodes("//invoice")!) //TODO for instead foreach for perfs... + { + try + { + row = new OutlookGridRow(); + row.CreateCells(kryptonOutlookGrid1, new object[] { + customer["CustomerID"]!.InnerText, + customer["CustomerName"]!.InnerText, + customer["Address"]!.InnerText, + customer["City"]!.InnerText, + new TextAndImage(customer["Country"]!.InnerText,GetFlag(customer["Country"]!.InnerText)), + DateTime.Parse(customer["OrderDate"]!.InnerText,culture), + customer["ProductName"]!.InnerText, + double.Parse(customer["Price"]!.InnerText, CultureInfo.InvariantCulture), //We put a float the formatting in design does the rest + (double)random.Next(101) /100, + tokensList[random.Next(5)] + }); + if (random.Next(2) == 1) + { + //Sub row + OutlookGridRow row2 = new OutlookGridRow(); + row2.CreateCells(kryptonOutlookGrid1, new object[] { + customer["CustomerID"]!.InnerText + " 2", + customer["CustomerName"]!.InnerText + " 2", + customer["Address"]!.InnerText + "2", + customer["City"]!.InnerText + " 2", + new TextAndImage(customer["Country"]!.InnerText,GetFlag(customer["Country"]!.InnerText)), + DateTime.Now, + customer["ProductName"]!.InnerText + " 2", + (double)random.Next(1000), + (double)random.Next(101) /100, + tokensList[random.Next(5)] + }); + row.Nodes.Add(row2); + ((KryptonDataGridViewTreeTextCell)row2.Cells[1]).UpdateStyle(); //Important : after added to the parent node + } + l.Add(row); + ((KryptonDataGridViewTreeTextCell)row.Cells[1]).UpdateStyle(); //Important : after added to the rows list + } + catch (Exception ex) + { + KryptonMessageBox.Show("Gasp...Something went wrong ! " + ex.Message, "Error", KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Error); + } + } + + + + kryptonOutlookGrid1.ResumeLayout(); + kryptonOutlookGrid1.AssignRows(l); + kryptonOutlookGrid1.ForceRefreshGroupBox(); + kryptonOutlookGrid1.Fill(); + } + + private void OutlookGridTest_Load(object sender, EventArgs e) + { + kryptonOutlookGrid1.GroupBox = kryptonOutlookGridGroupBox1; + kryptonOutlookGrid1.RegisterGroupBoxEvents(); + + DataGridViewSetup setup = new DataGridViewSetup(); + setup.SetupDataGridView(this.kryptonOutlookGrid1, true); + + kryptonOutlookGrid1.ShowLines = true; + //LoadData(); + } + + private Image? GetFlag(string country) + { + //Icons from http://365icon.com/icon-styles/ethnic/classic2/ + + switch (country) + { + case "France": + return Properties.Resources.fr; + case "Germany": + return Properties.Resources.de; + case "Argentina": + return Properties.Resources.ar; + case "Austria": + return Properties.Resources.au; + case "Belgium": + return Properties.Resources.be; + case "Brazil": + return Properties.Resources.br; + case "Canada": + return Properties.Resources.ca; + case "Denmark": + return Properties.Resources.dk; + case "Finland": + return Properties.Resources.fi; + case "Ireland": + return Properties.Resources.ie; + case "Italy": + return Properties.Resources.it; + case "Mexico": + return Properties.Resources.mx; + case "Norway": + return Properties.Resources.no; + case "Poland": + return Properties.Resources.pl; + case "Portugal": + return Properties.Resources.pt; + case "Spain": + return Properties.Resources.es; + case "Sweden": + return Properties.Resources.se; + case "Switzerland": + return Properties.Resources.ch; + case "UK": + return Properties.Resources.gb; + case "USA": + return Properties.Resources.us; + case "Venezuela": + return Properties.Resources.ve; + default: + return null; + } + } + + private void kryptonOutlookGrid1_Resize(object sender, EventArgs e) + { + int preferredTotalWidth = 0; + //Calculate the total preferred width + foreach (DataGridViewColumn c in kryptonOutlookGrid1.Columns) + { + preferredTotalWidth += Math.Min(c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true), 250); + } + + if (kryptonOutlookGrid1.Width > preferredTotalWidth) + { + kryptonOutlookGrid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; + kryptonOutlookGrid1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells); + } + else + { + kryptonOutlookGrid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; + foreach (DataGridViewColumn c in kryptonOutlookGrid1.Columns) + { + c.Width = Math.Min(c.GetPreferredWidth(DataGridViewAutoSizeColumnMode.DisplayedCells, true), 250); + } + } + } + + private void kryptonOutlookGrid1_GroupImageClick(object sender, OutlookGridGroupImageEventArgs e) + { + KryptonMessageBox.Show("Group Image clicked for group row : " + e.Row.Group!.Text); + } + + private void bsahgLoad_Click(object sender, EventArgs e) + { + DataGridViewSetup setup = new DataGridViewSetup(); + setup.SetupDataGridView(kryptonOutlookGrid1, true); + LoadData(); + } + + private void bsahgSave_Click(object sender, EventArgs e) + { + kryptonOutlookGrid1.PersistConfiguration(Application.StartupPath + "/grid.xml", StaticInfos._GRIDCONFIG_VERSION.ToString()); + } + + private void bsahgToggle_Click(object sender, EventArgs e) + { + if (_expand) + kryptonOutlookGrid1.ExpandAllNodes(); + else + kryptonOutlookGrid1.CollapseAllNodes(); + + _expand = !_expand; + } + } +} diff --git a/Source/Krypton Components/TestForm/OutlookGridTest.resx b/Source/Krypton Components/TestForm/OutlookGridTest.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/OutlookGridTest.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Program.cs b/Source/Krypton Components/TestForm/Program.cs index a29e5d57c..443c95d5f 100644 --- a/Source/Krypton Components/TestForm/Program.cs +++ b/Source/Krypton Components/TestForm/Program.cs @@ -1,5 +1,11 @@ -using System; -using System.Windows.Forms; +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion namespace TestForm { @@ -12,6 +18,6 @@ internal static class Program static void Main() => // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. - Application.Run(new Form1()); + Application.Run(new StartScreen()); } } \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ProgressBarTest.Designer.cs b/Source/Krypton Components/TestForm/ProgressBarTest.Designer.cs new file mode 100644 index 000000000..8432717cb --- /dev/null +++ b/Source/Krypton Components/TestForm/ProgressBarTest.Designer.cs @@ -0,0 +1,163 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class ProgressBarTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressBarTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kcbtnProgressBarColour = new Krypton.Toolkit.KryptonColorButton(); + this.kcmbProgressBarStyle = new Krypton.Toolkit.KryptonComboBox(); + this.kchkUseProgressValueAsText = new Krypton.Toolkit.KryptonCheckBox(); + this.ktrkProgressValues = new Krypton.Toolkit.KryptonTrackBar(); + this.kryptonProgressBar2 = new Krypton.Toolkit.KryptonProgressBar(); + this.kryptonProgressBar1 = new Krypton.Toolkit.KryptonProgressBar(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbProgressBarStyle)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kcbtnProgressBarColour); + this.kryptonPanel1.Controls.Add(this.kcmbProgressBarStyle); + this.kryptonPanel1.Controls.Add(this.kchkUseProgressValueAsText); + this.kryptonPanel1.Controls.Add(this.ktrkProgressValues); + this.kryptonPanel1.Controls.Add(this.kryptonProgressBar2); + this.kryptonPanel1.Controls.Add(this.kryptonProgressBar1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(483, 183); + this.kryptonPanel1.TabIndex = 0; + // + // kcbtnProgressBarColour + // + this.kcbtnProgressBarColour.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcbtnProgressBarColour.Location = new System.Drawing.Point(13, 143); + this.kcbtnProgressBarColour.Name = "kcbtnProgressBarColour"; + this.kcbtnProgressBarColour.SelectedColor = System.Drawing.Color.Green; + this.kcbtnProgressBarColour.Size = new System.Drawing.Size(165, 25); + this.kcbtnProgressBarColour.TabIndex = 16; + this.kcbtnProgressBarColour.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnProgressBarColour.Values.Image"))); + this.kcbtnProgressBarColour.Values.RoundedCorners = 8; + this.kcbtnProgressBarColour.Values.Text = "ProgressBar Colour"; + this.kcbtnProgressBarColour.SelectedColorChanged += new System.EventHandler(this.kcbtnProgressBarColour_SelectedColorChanged); + // + // kcmbProgressBarStyle + // + this.kcmbProgressBarStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbProgressBarStyle.DropDownWidth = 261; + this.kcmbProgressBarStyle.IntegralHeight = false; + this.kcmbProgressBarStyle.Location = new System.Drawing.Point(208, 117); + this.kcmbProgressBarStyle.Name = "kcmbProgressBarStyle"; + this.kcmbProgressBarStyle.Size = new System.Drawing.Size(261, 21); + this.kcmbProgressBarStyle.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbProgressBarStyle.TabIndex = 15; + this.kcmbProgressBarStyle.SelectedIndexChanged += new System.EventHandler(this.kcmbProgressBarStyle_SelectedIndexChanged); + // + // kchkUseProgressValueAsText + // + this.kchkUseProgressValueAsText.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.kchkUseProgressValueAsText.Location = new System.Drawing.Point(15, 116); + this.kchkUseProgressValueAsText.Name = "kchkUseProgressValueAsText"; + this.kchkUseProgressValueAsText.Size = new System.Drawing.Size(165, 20); + this.kchkUseProgressValueAsText.TabIndex = 14; + this.kchkUseProgressValueAsText.Values.Text = "Use progress value as text"; + this.kchkUseProgressValueAsText.CheckedChanged += new System.EventHandler(this.kchkUseProgressValueAsText_CheckedChanged); + // + // ktrkProgressValues + // + this.ktrkProgressValues.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.ktrkProgressValues.Location = new System.Drawing.Point(15, 77); + this.ktrkProgressValues.Maximum = 100; + this.ktrkProgressValues.Name = "ktrkProgressValues"; + this.ktrkProgressValues.Size = new System.Drawing.Size(456, 33); + this.ktrkProgressValues.TabIndex = 13; + this.ktrkProgressValues.TickStyle = System.Windows.Forms.TickStyle.Both; + this.ktrkProgressValues.ValueChanged += new System.EventHandler(this.ktrkProgressValues_ValueChanged); + // + // kryptonProgressBar2 + // + this.kryptonProgressBar2.Enabled = false; + this.kryptonProgressBar2.Location = new System.Drawing.Point(13, 45); + this.kryptonProgressBar2.Name = "kryptonProgressBar2"; + this.kryptonProgressBar2.Size = new System.Drawing.Size(456, 26); + this.kryptonProgressBar2.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kryptonProgressBar2.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBar2.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBar2.TabIndex = 1; + this.kryptonProgressBar2.Values.Text = ""; + // + // kryptonProgressBar1 + // + this.kryptonProgressBar1.Location = new System.Drawing.Point(13, 13); + this.kryptonProgressBar1.Name = "kryptonProgressBar1"; + this.kryptonProgressBar1.Size = new System.Drawing.Size(456, 26); + this.kryptonProgressBar1.StateCommon.Back.Color1 = System.Drawing.Color.Green; + this.kryptonProgressBar1.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBar1.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; + this.kryptonProgressBar1.TabIndex = 0; + this.kryptonProgressBar1.Values.Text = ""; + // + // ProgressBarTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(483, 183); + this.Controls.Add(this.kryptonPanel1); + this.Name = "ProgressBarTest"; + this.Text = "ProgressBarTest"; + this.Load += new System.EventHandler(this.ProgressBarTest_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbProgressBarStyle)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonProgressBar kryptonProgressBar1; + private Krypton.Toolkit.KryptonProgressBar kryptonProgressBar2; + private Krypton.Toolkit.KryptonCheckBox kchkUseProgressValueAsText; + private Krypton.Toolkit.KryptonTrackBar ktrkProgressValues; + private Krypton.Toolkit.KryptonComboBox kcmbProgressBarStyle; + private Krypton.Toolkit.KryptonColorButton kcbtnProgressBarColour; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ProgressBarTest.cs b/Source/Krypton Components/TestForm/ProgressBarTest.cs new file mode 100644 index 000000000..9a8b92183 --- /dev/null +++ b/Source/Krypton Components/TestForm/ProgressBarTest.cs @@ -0,0 +1,59 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class ProgressBarTest : KryptonForm + { + public ProgressBarTest() + { + InitializeComponent(); + } + + private void ProgressBarTest_Load(object sender, EventArgs e) + { + foreach (var value in Enum.GetValues(typeof(ProgressBarStyle))) + { + kcmbProgressBarStyle.Items.Add(value); + } + + kcmbProgressBarStyle.SelectedIndex = 1; + } + + private void ktrkProgressValues_ValueChanged(object sender, EventArgs e) + { + kryptonProgressBar1.Value = ktrkProgressValues.Value; + + kryptonProgressBar2.Value = ktrkProgressValues.Value; + } + + private void kchkUseProgressValueAsText_CheckedChanged(object sender, EventArgs e) + { + kryptonProgressBar1.UseValueAsText = kchkUseProgressValueAsText.Checked; + + kryptonProgressBar2.UseValueAsText = kchkUseProgressValueAsText.Checked; + } + + private void kcmbProgressBarStyle_SelectedIndexChanged(object sender, EventArgs e) + { + kryptonProgressBar1.Style = + (ProgressBarStyle)Enum.Parse(typeof(ProgressBarStyle), kcmbProgressBarStyle.Text); + + kryptonProgressBar2.Style = + (ProgressBarStyle)Enum.Parse(typeof(ProgressBarStyle), kcmbProgressBarStyle.Text); + } + + private void kcbtnProgressBarColour_SelectedColorChanged(object sender, ColorEventArgs e) + { + kryptonProgressBar1.StateCommon.Back.Color1 = e.Color; + + kryptonProgressBar2.StateCommon.Back.Color1 = e.Color; + } + } +} diff --git a/Source/Krypton Components/TestForm/ProgressBarTest.resx b/Source/Krypton Components/TestForm/ProgressBarTest.resx new file mode 100644 index 000000000..996f96215 --- /dev/null +++ b/Source/Krypton Components/TestForm/ProgressBarTest.resx @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DwAACw8BkvkDpQAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Properties/Resources.Designer.cs b/Source/Krypton Components/TestForm/Properties/Resources.Designer.cs index 4b5f64dd4..968073a92 100644 --- a/Source/Krypton Components/TestForm/Properties/Resources.Designer.cs +++ b/Source/Krypton Components/TestForm/Properties/Resources.Designer.cs @@ -1,4 +1,13 @@ -//------------------------------------------------------------------------------ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +//------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 @@ -63,9 +72,9 @@ internal Resources() { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap Main_Icon_128_x_128_Nightly { + internal static System.Drawing.Bitmap _African_Union_OAS_ { get { - object obj = ResourceManager.GetObject("Main Icon 128 x 128 Nightly", resourceCulture); + object obj = ResourceManager.GetObject("_African Union(OAS)", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -73,9 +82,2739 @@ internal static System.Drawing.Bitmap Main_Icon_128_x_128_Nightly { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - internal static System.Drawing.Bitmap Main_Icon_16_x_16_Canary { + internal static System.Drawing.Bitmap _Arab_League { get { - object obj = ResourceManager.GetObject("Main Icon 16 x 16 Canary", resourceCulture); + object obj = ResourceManager.GetObject("_Arab League", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _as { + get { + object obj = ResourceManager.GetObject("as", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _ASEAN { + get { + object obj = ResourceManager.GetObject("_ASEAN", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _CARICOM { + get { + object obj = ResourceManager.GetObject("_CARICOM", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _CIS { + get { + object obj = ResourceManager.GetObject("_CIS", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Commonwealth { + get { + object obj = ResourceManager.GetObject("_Commonwealth", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _do { + get { + object obj = ResourceManager.GetObject("do", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _England { + get { + object obj = ResourceManager.GetObject("_England", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _European_Union { + get { + object obj = ResourceManager.GetObject("_European Union", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _in { + get { + object obj = ResourceManager.GetObject("in", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _is { + get { + object obj = ResourceManager.GetObject("is", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Islamic_Conference { + get { + object obj = ResourceManager.GetObject("_Islamic Conference", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Kosovo { + get { + object obj = ResourceManager.GetObject("_Kosovo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _NATO { + get { + object obj = ResourceManager.GetObject("_NATO", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Northern_Cyprus { + get { + object obj = ResourceManager.GetObject("_Northern Cyprus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Northern_Ireland { + get { + object obj = ResourceManager.GetObject("_Northern Ireland", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Olimpic_Movement { + get { + object obj = ResourceManager.GetObject("_Olimpic Movement", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _OPEC { + get { + object obj = ResourceManager.GetObject("_OPEC", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Red_Cross { + get { + object obj = ResourceManager.GetObject("_Red Cross", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Scotland { + get { + object obj = ResourceManager.GetObject("_Scotland", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Somaliland { + get { + object obj = ResourceManager.GetObject("_Somaliland", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _United_Nations { + get { + object obj = ResourceManager.GetObject("_United Nations", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap _Wales { + get { + object obj = ResourceManager.GetObject("_Wales", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ad { + get { + object obj = ResourceManager.GetObject("ad", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ae { + get { + object obj = ResourceManager.GetObject("ae", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap af { + get { + object obj = ResourceManager.GetObject("af", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ag { + get { + object obj = ResourceManager.GetObject("ag", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ai { + get { + object obj = ResourceManager.GetObject("ai", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap al { + get { + object obj = ResourceManager.GetObject("al", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap am { + get { + object obj = ResourceManager.GetObject("am", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap an { + get { + object obj = ResourceManager.GetObject("an", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ao { + get { + object obj = ResourceManager.GetObject("ao", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap aq { + get { + object obj = ResourceManager.GetObject("aq", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ar { + get { + object obj = ResourceManager.GetObject("ar", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap at { + get { + object obj = ResourceManager.GetObject("at", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap au { + get { + object obj = ResourceManager.GetObject("au", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap aw { + get { + object obj = ResourceManager.GetObject("aw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ax { + get { + object obj = ResourceManager.GetObject("ax", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap az { + get { + object obj = ResourceManager.GetObject("az", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ba { + get { + object obj = ResourceManager.GetObject("ba", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bb { + get { + object obj = ResourceManager.GetObject("bb", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bd { + get { + object obj = ResourceManager.GetObject("bd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap be { + get { + object obj = ResourceManager.GetObject("be", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bf { + get { + object obj = ResourceManager.GetObject("bf", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bg { + get { + object obj = ResourceManager.GetObject("bg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bh { + get { + object obj = ResourceManager.GetObject("bh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bi { + get { + object obj = ResourceManager.GetObject("bi", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bj { + get { + object obj = ResourceManager.GetObject("bj", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bm { + get { + object obj = ResourceManager.GetObject("bm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bn { + get { + object obj = ResourceManager.GetObject("bn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bo { + get { + object obj = ResourceManager.GetObject("bo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap br { + get { + object obj = ResourceManager.GetObject("br", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bs { + get { + object obj = ResourceManager.GetObject("bs", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bt { + get { + object obj = ResourceManager.GetObject("bt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bv { + get { + object obj = ResourceManager.GetObject("bv", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bw { + get { + object obj = ResourceManager.GetObject("bw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap by { + get { + object obj = ResourceManager.GetObject("by", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap bz { + get { + object obj = ResourceManager.GetObject("bz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ca { + get { + object obj = ResourceManager.GetObject("ca", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap catalonia { + get { + object obj = ResourceManager.GetObject("catalonia", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cc { + get { + object obj = ResourceManager.GetObject("cc", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cd { + get { + object obj = ResourceManager.GetObject("cd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cf { + get { + object obj = ResourceManager.GetObject("cf", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cg { + get { + object obj = ResourceManager.GetObject("cg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ch { + get { + object obj = ResourceManager.GetObject("ch", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ci { + get { + object obj = ResourceManager.GetObject("ci", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ck { + get { + object obj = ResourceManager.GetObject("ck", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cl { + get { + object obj = ResourceManager.GetObject("cl", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cm { + get { + object obj = ResourceManager.GetObject("cm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cn { + get { + object obj = ResourceManager.GetObject("cn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap co { + get { + object obj = ResourceManager.GetObject("co", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cr { + get { + object obj = ResourceManager.GetObject("cr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cs { + get { + object obj = ResourceManager.GetObject("cs", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cu { + get { + object obj = ResourceManager.GetObject("cu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cv { + get { + object obj = ResourceManager.GetObject("cv", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cx { + get { + object obj = ResourceManager.GetObject("cx", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cy { + get { + object obj = ResourceManager.GetObject("cy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cz { + get { + object obj = ResourceManager.GetObject("cz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap de { + get { + object obj = ResourceManager.GetObject("de", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap dj { + get { + object obj = ResourceManager.GetObject("dj", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap dk { + get { + object obj = ResourceManager.GetObject("dk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap dm { + get { + object obj = ResourceManager.GetObject("dm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap dz { + get { + object obj = ResourceManager.GetObject("dz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ec { + get { + object obj = ResourceManager.GetObject("ec", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ee { + get { + object obj = ResourceManager.GetObject("ee", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap eg { + get { + object obj = ResourceManager.GetObject("eg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap eh { + get { + object obj = ResourceManager.GetObject("eh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap england { + get { + object obj = ResourceManager.GetObject("england", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap er { + get { + object obj = ResourceManager.GetObject("er", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap es { + get { + object obj = ResourceManager.GetObject("es", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap et { + get { + object obj = ResourceManager.GetObject("et", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap europeanunion { + get { + object obj = ResourceManager.GetObject("europeanunion", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fam { + get { + object obj = ResourceManager.GetObject("fam", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fi { + get { + object obj = ResourceManager.GetObject("fi", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fj { + get { + object obj = ResourceManager.GetObject("fj", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fk { + get { + object obj = ResourceManager.GetObject("fk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap flag_france { + get { + object obj = ResourceManager.GetObject("flag_france", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap flag_germany { + get { + object obj = ResourceManager.GetObject("flag_germany", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fm { + get { + object obj = ResourceManager.GetObject("fm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fo { + get { + object obj = ResourceManager.GetObject("fo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap fr { + get { + object obj = ResourceManager.GetObject("fr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ga { + get { + object obj = ResourceManager.GetObject("ga", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gb { + get { + object obj = ResourceManager.GetObject("gb", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gd { + get { + object obj = ResourceManager.GetObject("gd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ge { + get { + object obj = ResourceManager.GetObject("ge", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gf { + get { + object obj = ResourceManager.GetObject("gf", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gg { + get { + object obj = ResourceManager.GetObject("gg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gh { + get { + object obj = ResourceManager.GetObject("gh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gi { + get { + object obj = ResourceManager.GetObject("gi", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gl { + get { + object obj = ResourceManager.GetObject("gl", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gm { + get { + object obj = ResourceManager.GetObject("gm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gn { + get { + object obj = ResourceManager.GetObject("gn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gp { + get { + object obj = ResourceManager.GetObject("gp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gq { + get { + object obj = ResourceManager.GetObject("gq", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gr { + get { + object obj = ResourceManager.GetObject("gr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gs { + get { + object obj = ResourceManager.GetObject("gs", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gt { + get { + object obj = ResourceManager.GetObject("gt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gu { + get { + object obj = ResourceManager.GetObject("gu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gw { + get { + object obj = ResourceManager.GetObject("gw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap gy { + get { + object obj = ResourceManager.GetObject("gy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap hk { + get { + object obj = ResourceManager.GetObject("hk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap hm { + get { + object obj = ResourceManager.GetObject("hm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap hn { + get { + object obj = ResourceManager.GetObject("hn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap hr { + get { + object obj = ResourceManager.GetObject("hr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ht { + get { + object obj = ResourceManager.GetObject("ht", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap hu { + get { + object obj = ResourceManager.GetObject("hu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap id { + get { + object obj = ResourceManager.GetObject("id", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ie { + get { + object obj = ResourceManager.GetObject("ie", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap il { + get { + object obj = ResourceManager.GetObject("il", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap im { + get { + object obj = ResourceManager.GetObject("im", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap io { + get { + object obj = ResourceManager.GetObject("io", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap iq { + get { + object obj = ResourceManager.GetObject("iq", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ir { + get { + object obj = ResourceManager.GetObject("ir", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap it { + get { + object obj = ResourceManager.GetObject("it", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap je { + get { + object obj = ResourceManager.GetObject("je", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap jm { + get { + object obj = ResourceManager.GetObject("jm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap jo { + get { + object obj = ResourceManager.GetObject("jo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap jp { + get { + object obj = ResourceManager.GetObject("jp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ke { + get { + object obj = ResourceManager.GetObject("ke", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap kg { + get { + object obj = ResourceManager.GetObject("kg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap kh { + get { + object obj = ResourceManager.GetObject("kh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ki { + get { + object obj = ResourceManager.GetObject("ki", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap km { + get { + object obj = ResourceManager.GetObject("km", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap kn { + get { + object obj = ResourceManager.GetObject("kn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap kp { + get { + object obj = ResourceManager.GetObject("kp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap kr { + get { + object obj = ResourceManager.GetObject("kr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap kw { + get { + object obj = ResourceManager.GetObject("kw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ky { + get { + object obj = ResourceManager.GetObject("ky", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap kz { + get { + object obj = ResourceManager.GetObject("kz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap la { + get { + object obj = ResourceManager.GetObject("la", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lb { + get { + object obj = ResourceManager.GetObject("lb", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lc { + get { + object obj = ResourceManager.GetObject("lc", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap li { + get { + object obj = ResourceManager.GetObject("li", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lk { + get { + object obj = ResourceManager.GetObject("lk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lr { + get { + object obj = ResourceManager.GetObject("lr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ls { + get { + object obj = ResourceManager.GetObject("ls", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lt { + get { + object obj = ResourceManager.GetObject("lt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lu { + get { + object obj = ResourceManager.GetObject("lu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap lv { + get { + object obj = ResourceManager.GetObject("lv", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ly { + get { + object obj = ResourceManager.GetObject("ly", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ma { + get { + object obj = ResourceManager.GetObject("ma", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Main_Icon_128_x_128_Nightly { + get { + object obj = ResourceManager.GetObject("Main Icon 128 x 128 Nightly", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap Main_Icon_16_x_16_Canary { + get { + object obj = ResourceManager.GetObject("Main Icon 16 x 16 Canary", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mc { + get { + object obj = ResourceManager.GetObject("mc", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap md { + get { + object obj = ResourceManager.GetObject("md", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap me { + get { + object obj = ResourceManager.GetObject("me", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mg { + get { + object obj = ResourceManager.GetObject("mg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mh { + get { + object obj = ResourceManager.GetObject("mh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mk { + get { + object obj = ResourceManager.GetObject("mk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ml { + get { + object obj = ResourceManager.GetObject("ml", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mm { + get { + object obj = ResourceManager.GetObject("mm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mn { + get { + object obj = ResourceManager.GetObject("mn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mo { + get { + object obj = ResourceManager.GetObject("mo", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mp { + get { + object obj = ResourceManager.GetObject("mp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mq { + get { + object obj = ResourceManager.GetObject("mq", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mr { + get { + object obj = ResourceManager.GetObject("mr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ms { + get { + object obj = ResourceManager.GetObject("ms", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mt { + get { + object obj = ResourceManager.GetObject("mt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mu { + get { + object obj = ResourceManager.GetObject("mu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mv { + get { + object obj = ResourceManager.GetObject("mv", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mw { + get { + object obj = ResourceManager.GetObject("mw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mx { + get { + object obj = ResourceManager.GetObject("mx", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap my { + get { + object obj = ResourceManager.GetObject("my", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap mz { + get { + object obj = ResourceManager.GetObject("mz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap na { + get { + object obj = ResourceManager.GetObject("na", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nc { + get { + object obj = ResourceManager.GetObject("nc", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ne { + get { + object obj = ResourceManager.GetObject("ne", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nf { + get { + object obj = ResourceManager.GetObject("nf", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ng { + get { + object obj = ResourceManager.GetObject("ng", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ni { + get { + object obj = ResourceManager.GetObject("ni", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nl { + get { + object obj = ResourceManager.GetObject("nl", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap no { + get { + object obj = ResourceManager.GetObject("no", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap np { + get { + object obj = ResourceManager.GetObject("np", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nr { + get { + object obj = ResourceManager.GetObject("nr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nu { + get { + object obj = ResourceManager.GetObject("nu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap nz { + get { + object obj = ResourceManager.GetObject("nz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap om { + get { + object obj = ResourceManager.GetObject("om", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pa { + get { + object obj = ResourceManager.GetObject("pa", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pe { + get { + object obj = ResourceManager.GetObject("pe", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pf { + get { + object obj = ResourceManager.GetObject("pf", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pg { + get { + object obj = ResourceManager.GetObject("pg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ph { + get { + object obj = ResourceManager.GetObject("ph", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pk { + get { + object obj = ResourceManager.GetObject("pk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pl { + get { + object obj = ResourceManager.GetObject("pl", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pm { + get { + object obj = ResourceManager.GetObject("pm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pn { + get { + object obj = ResourceManager.GetObject("pn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pr { + get { + object obj = ResourceManager.GetObject("pr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ps { + get { + object obj = ResourceManager.GetObject("ps", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pt { + get { + object obj = ResourceManager.GetObject("pt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap pw { + get { + object obj = ResourceManager.GetObject("pw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap py { + get { + object obj = ResourceManager.GetObject("py", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap qa { + get { + object obj = ResourceManager.GetObject("qa", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap re { + get { + object obj = ResourceManager.GetObject("re", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ro { + get { + object obj = ResourceManager.GetObject("ro", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap rs { + get { + object obj = ResourceManager.GetObject("rs", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ru { + get { + object obj = ResourceManager.GetObject("ru", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap rw { + get { + object obj = ResourceManager.GetObject("rw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sa { + get { + object obj = ResourceManager.GetObject("sa", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sb { + get { + object obj = ResourceManager.GetObject("sb", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sc { + get { + object obj = ResourceManager.GetObject("sc", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap scotland { + get { + object obj = ResourceManager.GetObject("scotland", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sd { + get { + object obj = ResourceManager.GetObject("sd", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap se { + get { + object obj = ResourceManager.GetObject("se", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sg { + get { + object obj = ResourceManager.GetObject("sg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sh { + get { + object obj = ResourceManager.GetObject("sh", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap si { + get { + object obj = ResourceManager.GetObject("si", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sj { + get { + object obj = ResourceManager.GetObject("sj", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sk { + get { + object obj = ResourceManager.GetObject("sk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sl { + get { + object obj = ResourceManager.GetObject("sl", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sm { + get { + object obj = ResourceManager.GetObject("sm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sn { + get { + object obj = ResourceManager.GetObject("sn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap so { + get { + object obj = ResourceManager.GetObject("so", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sr { + get { + object obj = ResourceManager.GetObject("sr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap st { + get { + object obj = ResourceManager.GetObject("st", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sv { + get { + object obj = ResourceManager.GetObject("sv", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sy { + get { + object obj = ResourceManager.GetObject("sy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap sz { + get { + object obj = ResourceManager.GetObject("sz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tc { + get { + object obj = ResourceManager.GetObject("tc", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap td { + get { + object obj = ResourceManager.GetObject("td", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tf { + get { + object obj = ResourceManager.GetObject("tf", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tg { + get { + object obj = ResourceManager.GetObject("tg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap th { + get { + object obj = ResourceManager.GetObject("th", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tj { + get { + object obj = ResourceManager.GetObject("tj", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tk { + get { + object obj = ResourceManager.GetObject("tk", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tl { + get { + object obj = ResourceManager.GetObject("tl", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tm { + get { + object obj = ResourceManager.GetObject("tm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tn { + get { + object obj = ResourceManager.GetObject("tn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap to { + get { + object obj = ResourceManager.GetObject("to", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tr { + get { + object obj = ResourceManager.GetObject("tr", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tt { + get { + object obj = ResourceManager.GetObject("tt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tv { + get { + object obj = ResourceManager.GetObject("tv", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tw { + get { + object obj = ResourceManager.GetObject("tw", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap tz { + get { + object obj = ResourceManager.GetObject("tz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ua { + get { + object obj = ResourceManager.GetObject("ua", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ug { + get { + object obj = ResourceManager.GetObject("ug", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap um { + get { + object obj = ResourceManager.GetObject("um", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap us { + get { + object obj = ResourceManager.GetObject("us", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap uy { + get { + object obj = ResourceManager.GetObject("uy", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap uz { + get { + object obj = ResourceManager.GetObject("uz", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap va { + get { + object obj = ResourceManager.GetObject("va", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap vc { + get { + object obj = ResourceManager.GetObject("vc", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ve { + get { + object obj = ResourceManager.GetObject("ve", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap vg { + get { + object obj = ResourceManager.GetObject("vg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap vi { + get { + object obj = ResourceManager.GetObject("vi", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap vn { + get { + object obj = ResourceManager.GetObject("vn", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap vu { + get { + object obj = ResourceManager.GetObject("vu", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap wales { + get { + object obj = ResourceManager.GetObject("wales", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap wf { + get { + object obj = ResourceManager.GetObject("wf", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ws { + get { + object obj = ResourceManager.GetObject("ws", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap ye { + get { + object obj = ResourceManager.GetObject("ye", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap yt { + get { + object obj = ResourceManager.GetObject("yt", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap za { + get { + object obj = ResourceManager.GetObject("za", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap zm { + get { + object obj = ResourceManager.GetObject("zm", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap zw { + get { + object obj = ResourceManager.GetObject("zw", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/Source/Krypton Components/TestForm/Properties/Resources.resx b/Source/Krypton Components/TestForm/Properties/Resources.resx index 707f422fb..2d6e94e0b 100644 --- a/Source/Krypton Components/TestForm/Properties/Resources.resx +++ b/Source/Krypton Components/TestForm/Properties/Resources.resx @@ -124,4 +124,823 @@ ..\Resources\Main Icon 128 x 128 Nightly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ad.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ae.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\af.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ag.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ai.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\al.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\am.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\an.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ao.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\aq.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ar.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\as.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\at.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\au.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\aw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ax.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\az.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ba.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bb.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\be.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bi.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bj.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\br.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bv.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\by.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\bz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ca.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\catalonia.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ch.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ci.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ck.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cl.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\co.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cv.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cx.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\de.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dj.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\do.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\dz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ec.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ee.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\eg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\eh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\england.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\er.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\es.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\et.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\europeanunion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fam.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fi.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fj.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\flag_france.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\flag_germany.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\fr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ga.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gb.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gi.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gl.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gq.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\hk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\hm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\hn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\hr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ht.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\hu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\id.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ie.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\il.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\im.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\in.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\io.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\iq.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ir.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\is.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\it.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\je.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\jm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\jo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\jp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ke.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\kg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\kh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ki.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\km.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\kn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\kp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\kr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\kw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ky.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\kz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\la.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lb.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\li.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ls.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\lv.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ly.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ma.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\md.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\me.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ml.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mq.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ms.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mv.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mx.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\my.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\mz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\na.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ne.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ng.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ni.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nl.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\no.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\np.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\om.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pa.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pe.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ph.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pl.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ps.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\pw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\py.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\qa.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\re.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ro.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\rs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ru.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\rw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sa.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sb.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\scotland.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sd.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\se.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sh.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\si.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sj.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sl.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\so.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\st.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sv.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\sz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\td.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\th.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tj.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tl.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\to.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tv.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\tz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ua.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ug.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\um.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\us.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\uy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\uz.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\va.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\vc.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ve.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\vg.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\vi.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\vn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\vu.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\wales.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\wf.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ws.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ye.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\yt.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\za.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\zm.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\zw.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_African Union(OAS).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Arab League.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_ASEAN.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_CARICOM.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_CIS.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Commonwealth.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_England.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_European Union.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Islamic Conference.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Kosovo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_NATO.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Northern Cyprus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Northern Ireland.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Olimpic Movement.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_OPEC.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Red Cross.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Scotland.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Somaliland.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_United Nations.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\_Wales.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/PropertyGridTest.Designer.cs b/Source/Krypton Components/TestForm/PropertyGridTest.Designer.cs new file mode 100644 index 000000000..aa87db477 --- /dev/null +++ b/Source/Krypton Components/TestForm/PropertyGridTest.Designer.cs @@ -0,0 +1,93 @@ +namespace TestForm +{ + partial class PropertyGridTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kpgExample = new Krypton.Toolkit.KryptonPropertyGrid(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Controls.Add(this.kpgExample); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(387, 535); + this.kryptonPanel1.TabIndex = 0; + // + // kpgExample + // + this.kpgExample.Location = new System.Drawing.Point(13, 41); + this.kpgExample.Name = "kpgExample"; + this.kpgExample.Padding = new System.Windows.Forms.Padding(1); + this.kpgExample.SelectedObject = this.kpgExample; + this.kpgExample.Size = new System.Drawing.Size(362, 485); + this.kpgExample.TabIndex = 0; + this.kpgExample.Text = "kryptonPropertyGrid1"; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonThemeComboBox1.DropDownWidth = 362; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(13, 13); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(362, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 1; + // + // PropertyGridTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(387, 535); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "PropertyGridTest"; + this.Text = "PropertyGrid"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private KryptonPropertyGrid kpgExample; + private KryptonThemeComboBox kryptonThemeComboBox1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/PropertyGridTest.cs b/Source/Krypton Components/TestForm/PropertyGridTest.cs new file mode 100644 index 000000000..f6a2938fe --- /dev/null +++ b/Source/Krypton Components/TestForm/PropertyGridTest.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class PropertyGridTest : KryptonForm + { + public PropertyGridTest() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/PropertyGridTest.resx b/Source/Krypton Components/TestForm/PropertyGridTest.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/PropertyGridTest.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Resources/_ASEAN.png b/Source/Krypton Components/TestForm/Resources/_ASEAN.png new file mode 100644 index 000000000..80fe303a2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_ASEAN.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_African Union(OAS).png b/Source/Krypton Components/TestForm/Resources/_African Union(OAS).png new file mode 100644 index 000000000..07bd29530 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_African Union(OAS).png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Arab League.png b/Source/Krypton Components/TestForm/Resources/_Arab League.png new file mode 100644 index 000000000..260700c0c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Arab League.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_CARICOM.png b/Source/Krypton Components/TestForm/Resources/_CARICOM.png new file mode 100644 index 000000000..53653e86a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_CARICOM.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_CIS.png b/Source/Krypton Components/TestForm/Resources/_CIS.png new file mode 100644 index 000000000..e4676fd22 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_CIS.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Commonwealth.png b/Source/Krypton Components/TestForm/Resources/_Commonwealth.png new file mode 100644 index 000000000..f7baf0153 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Commonwealth.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_England.png b/Source/Krypton Components/TestForm/Resources/_England.png new file mode 100644 index 000000000..454268681 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_England.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_European Union.png b/Source/Krypton Components/TestForm/Resources/_European Union.png new file mode 100644 index 000000000..43bdb4fae Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_European Union.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Islamic Conference.png b/Source/Krypton Components/TestForm/Resources/_Islamic Conference.png new file mode 100644 index 000000000..35711bca5 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Islamic Conference.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Kosovo.png b/Source/Krypton Components/TestForm/Resources/_Kosovo.png new file mode 100644 index 000000000..b6ff06f64 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Kosovo.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_NATO.png b/Source/Krypton Components/TestForm/Resources/_NATO.png new file mode 100644 index 000000000..a350da0c8 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_NATO.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Northern Cyprus.png b/Source/Krypton Components/TestForm/Resources/_Northern Cyprus.png new file mode 100644 index 000000000..788653098 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Northern Cyprus.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Northern Ireland.png b/Source/Krypton Components/TestForm/Resources/_Northern Ireland.png new file mode 100644 index 000000000..ade07d2bb Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Northern Ireland.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_OPEC.png b/Source/Krypton Components/TestForm/Resources/_OPEC.png new file mode 100644 index 000000000..0d09ad3d2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_OPEC.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Olimpic Movement.png b/Source/Krypton Components/TestForm/Resources/_Olimpic Movement.png new file mode 100644 index 000000000..ac3b659ea Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Olimpic Movement.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Red Cross.png b/Source/Krypton Components/TestForm/Resources/_Red Cross.png new file mode 100644 index 000000000..d64935592 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Red Cross.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Scotland.png b/Source/Krypton Components/TestForm/Resources/_Scotland.png new file mode 100644 index 000000000..cd139be86 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Scotland.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Somaliland.png b/Source/Krypton Components/TestForm/Resources/_Somaliland.png new file mode 100644 index 000000000..a839dc976 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Somaliland.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_United Nations.png b/Source/Krypton Components/TestForm/Resources/_United Nations.png new file mode 100644 index 000000000..3eeec7ebc Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_United Nations.png differ diff --git a/Source/Krypton Components/TestForm/Resources/_Wales.png b/Source/Krypton Components/TestForm/Resources/_Wales.png new file mode 100644 index 000000000..115179c5c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/_Wales.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ad.png b/Source/Krypton Components/TestForm/Resources/ad.png new file mode 100644 index 000000000..9031e278e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ad.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ae.png b/Source/Krypton Components/TestForm/Resources/ae.png new file mode 100644 index 000000000..a3724db6d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ae.png differ diff --git a/Source/Krypton Components/TestForm/Resources/af.png b/Source/Krypton Components/TestForm/Resources/af.png new file mode 100644 index 000000000..484c99101 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/af.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ag.png b/Source/Krypton Components/TestForm/Resources/ag.png new file mode 100644 index 000000000..a1f6da341 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ag.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ai.png b/Source/Krypton Components/TestForm/Resources/ai.png new file mode 100644 index 000000000..fc2c726d3 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ai.png differ diff --git a/Source/Krypton Components/TestForm/Resources/al.png b/Source/Krypton Components/TestForm/Resources/al.png new file mode 100644 index 000000000..68b61445a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/al.png differ diff --git a/Source/Krypton Components/TestForm/Resources/am.png b/Source/Krypton Components/TestForm/Resources/am.png new file mode 100644 index 000000000..5f7dc7b32 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/am.png differ diff --git a/Source/Krypton Components/TestForm/Resources/an.png b/Source/Krypton Components/TestForm/Resources/an.png new file mode 100644 index 000000000..163d33449 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/an.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ao.png b/Source/Krypton Components/TestForm/Resources/ao.png new file mode 100644 index 000000000..55dc94bd2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ao.png differ diff --git a/Source/Krypton Components/TestForm/Resources/aq.png b/Source/Krypton Components/TestForm/Resources/aq.png new file mode 100644 index 000000000..d62f32c36 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/aq.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ar.png b/Source/Krypton Components/TestForm/Resources/ar.png new file mode 100644 index 000000000..8acaf688a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ar.png differ diff --git a/Source/Krypton Components/TestForm/Resources/as.png b/Source/Krypton Components/TestForm/Resources/as.png new file mode 100644 index 000000000..a7c5cd707 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/as.png differ diff --git a/Source/Krypton Components/TestForm/Resources/at.png b/Source/Krypton Components/TestForm/Resources/at.png new file mode 100644 index 000000000..227589646 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/at.png differ diff --git a/Source/Krypton Components/TestForm/Resources/au.png b/Source/Krypton Components/TestForm/Resources/au.png new file mode 100644 index 000000000..a70c6b762 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/au.png differ diff --git a/Source/Krypton Components/TestForm/Resources/aw.png b/Source/Krypton Components/TestForm/Resources/aw.png new file mode 100644 index 000000000..3a0684b23 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/aw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ax.png b/Source/Krypton Components/TestForm/Resources/ax.png new file mode 100644 index 000000000..1eea80a7b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ax.png differ diff --git a/Source/Krypton Components/TestForm/Resources/az.png b/Source/Krypton Components/TestForm/Resources/az.png new file mode 100644 index 000000000..8e903896d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/az.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ba.png b/Source/Krypton Components/TestForm/Resources/ba.png new file mode 100644 index 000000000..040bacfbf Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ba.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bb.png b/Source/Krypton Components/TestForm/Resources/bb.png new file mode 100644 index 000000000..81ed98114 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bb.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bd.png b/Source/Krypton Components/TestForm/Resources/bd.png new file mode 100644 index 000000000..4781f69b9 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bd.png differ diff --git a/Source/Krypton Components/TestForm/Resources/be.png b/Source/Krypton Components/TestForm/Resources/be.png new file mode 100644 index 000000000..eebb0c4cb Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/be.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bf.png b/Source/Krypton Components/TestForm/Resources/bf.png new file mode 100644 index 000000000..c8739b08e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bf.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bg.png b/Source/Krypton Components/TestForm/Resources/bg.png new file mode 100644 index 000000000..4579f08a8 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bh.png b/Source/Krypton Components/TestForm/Resources/bh.png new file mode 100644 index 000000000..5e61b9c63 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bh.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bi.png b/Source/Krypton Components/TestForm/Resources/bi.png new file mode 100644 index 000000000..8beac2208 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bi.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bj.png b/Source/Krypton Components/TestForm/Resources/bj.png new file mode 100644 index 000000000..8ce754796 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bj.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bm.png b/Source/Krypton Components/TestForm/Resources/bm.png new file mode 100644 index 000000000..fa4699fa2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bn.png b/Source/Krypton Components/TestForm/Resources/bn.png new file mode 100644 index 000000000..8afbe1b24 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bo.png b/Source/Krypton Components/TestForm/Resources/bo.png new file mode 100644 index 000000000..d9b4a7861 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bo.png differ diff --git a/Source/Krypton Components/TestForm/Resources/br.png b/Source/Krypton Components/TestForm/Resources/br.png new file mode 100644 index 000000000..7daab394b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/br.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bs.png b/Source/Krypton Components/TestForm/Resources/bs.png new file mode 100644 index 000000000..4fa2c4bb1 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bs.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bt.png b/Source/Krypton Components/TestForm/Resources/bt.png new file mode 100644 index 000000000..71b9ff505 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bt.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bv.png b/Source/Krypton Components/TestForm/Resources/bv.png new file mode 100644 index 000000000..160b6b5b7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bv.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bw.png b/Source/Krypton Components/TestForm/Resources/bw.png new file mode 100644 index 000000000..551b48a74 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/by.png b/Source/Krypton Components/TestForm/Resources/by.png new file mode 100644 index 000000000..b5a2e3ce9 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/by.png differ diff --git a/Source/Krypton Components/TestForm/Resources/bz.png b/Source/Krypton Components/TestForm/Resources/bz.png new file mode 100644 index 000000000..e150f0f20 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/bz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ca.png b/Source/Krypton Components/TestForm/Resources/ca.png new file mode 100644 index 000000000..1b90bea77 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ca.png differ diff --git a/Source/Krypton Components/TestForm/Resources/catalonia.png b/Source/Krypton Components/TestForm/Resources/catalonia.png new file mode 100644 index 000000000..5041e308e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/catalonia.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cc.png b/Source/Krypton Components/TestForm/Resources/cc.png new file mode 100644 index 000000000..aed3d3b4e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cc.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cd.png b/Source/Krypton Components/TestForm/Resources/cd.png new file mode 100644 index 000000000..5ac78b2f9 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cd.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cf.png b/Source/Krypton Components/TestForm/Resources/cf.png new file mode 100644 index 000000000..ee3a68c1f Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cf.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cg.png b/Source/Krypton Components/TestForm/Resources/cg.png new file mode 100644 index 000000000..cb1a22eaa Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ch.png b/Source/Krypton Components/TestForm/Resources/ch.png new file mode 100644 index 000000000..c8dd942bd Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ch.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ci.png b/Source/Krypton Components/TestForm/Resources/ci.png new file mode 100644 index 000000000..b5f13a7fe Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ci.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ck.png b/Source/Krypton Components/TestForm/Resources/ck.png new file mode 100644 index 000000000..b24914b3f Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ck.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cl.png b/Source/Krypton Components/TestForm/Resources/cl.png new file mode 100644 index 000000000..4d9b548b2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cl.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cm.png b/Source/Krypton Components/TestForm/Resources/cm.png new file mode 100644 index 000000000..1ae42f2b9 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cn.png b/Source/Krypton Components/TestForm/Resources/cn.png new file mode 100644 index 000000000..173b18157 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/co.png b/Source/Krypton Components/TestForm/Resources/co.png new file mode 100644 index 000000000..30476c4b0 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/co.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cr.png b/Source/Krypton Components/TestForm/Resources/cr.png new file mode 100644 index 000000000..399b9c433 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cs.png b/Source/Krypton Components/TestForm/Resources/cs.png new file mode 100644 index 000000000..8254790ca Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cs.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cu.png b/Source/Krypton Components/TestForm/Resources/cu.png new file mode 100644 index 000000000..54ee2e59d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cu.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cv.png b/Source/Krypton Components/TestForm/Resources/cv.png new file mode 100644 index 000000000..fbf22df44 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cv.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cx.png b/Source/Krypton Components/TestForm/Resources/cx.png new file mode 100644 index 000000000..48e31adbf Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cx.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cy.png b/Source/Krypton Components/TestForm/Resources/cy.png new file mode 100644 index 000000000..9bbd09e4f Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cy.png differ diff --git a/Source/Krypton Components/TestForm/Resources/cz.png b/Source/Krypton Components/TestForm/Resources/cz.png new file mode 100644 index 000000000..3e855a504 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/cz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/de.png b/Source/Krypton Components/TestForm/Resources/de.png new file mode 100644 index 000000000..63b86fd6d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/de.png differ diff --git a/Source/Krypton Components/TestForm/Resources/dj.png b/Source/Krypton Components/TestForm/Resources/dj.png new file mode 100644 index 000000000..335575c32 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/dj.png differ diff --git a/Source/Krypton Components/TestForm/Resources/dk.png b/Source/Krypton Components/TestForm/Resources/dk.png new file mode 100644 index 000000000..63db11d17 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/dk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/dm.png b/Source/Krypton Components/TestForm/Resources/dm.png new file mode 100644 index 000000000..28291b767 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/dm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/do.png b/Source/Krypton Components/TestForm/Resources/do.png new file mode 100644 index 000000000..94340254c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/do.png differ diff --git a/Source/Krypton Components/TestForm/Resources/dz.png b/Source/Krypton Components/TestForm/Resources/dz.png new file mode 100644 index 000000000..0d08e5f7c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/dz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ec.png b/Source/Krypton Components/TestForm/Resources/ec.png new file mode 100644 index 000000000..fcb9e33c8 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ec.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ee.png b/Source/Krypton Components/TestForm/Resources/ee.png new file mode 100644 index 000000000..7cedf4a68 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ee.png differ diff --git a/Source/Krypton Components/TestForm/Resources/eg.png b/Source/Krypton Components/TestForm/Resources/eg.png new file mode 100644 index 000000000..ebde62581 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/eg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/eh.png b/Source/Krypton Components/TestForm/Resources/eh.png new file mode 100644 index 000000000..ea55ea947 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/eh.png differ diff --git a/Source/Krypton Components/TestForm/Resources/england.png b/Source/Krypton Components/TestForm/Resources/england.png new file mode 100644 index 000000000..3a7311d56 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/england.png differ diff --git a/Source/Krypton Components/TestForm/Resources/er.png b/Source/Krypton Components/TestForm/Resources/er.png new file mode 100644 index 000000000..af4d27cdd Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/er.png differ diff --git a/Source/Krypton Components/TestForm/Resources/es.png b/Source/Krypton Components/TestForm/Resources/es.png new file mode 100644 index 000000000..8d149a38f Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/es.png differ diff --git a/Source/Krypton Components/TestForm/Resources/et.png b/Source/Krypton Components/TestForm/Resources/et.png new file mode 100644 index 000000000..059cbe4fc Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/et.png differ diff --git a/Source/Krypton Components/TestForm/Resources/europeanunion.png b/Source/Krypton Components/TestForm/Resources/europeanunion.png new file mode 100644 index 000000000..d6d871158 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/europeanunion.png differ diff --git a/Source/Krypton Components/TestForm/Resources/fam.png b/Source/Krypton Components/TestForm/Resources/fam.png new file mode 100644 index 000000000..cf50c759e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/fam.png differ diff --git a/Source/Krypton Components/TestForm/Resources/fi.png b/Source/Krypton Components/TestForm/Resources/fi.png new file mode 100644 index 000000000..58ed9f656 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/fi.png differ diff --git a/Source/Krypton Components/TestForm/Resources/fj.png b/Source/Krypton Components/TestForm/Resources/fj.png new file mode 100644 index 000000000..c6fc3d33c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/fj.png differ diff --git a/Source/Krypton Components/TestForm/Resources/fk.png b/Source/Krypton Components/TestForm/Resources/fk.png new file mode 100644 index 000000000..ceaeb27de Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/fk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/flag_france.png b/Source/Krypton Components/TestForm/Resources/flag_france.png new file mode 100644 index 000000000..794da3de8 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/flag_france.png differ diff --git a/Source/Krypton Components/TestForm/Resources/flag_germany.png b/Source/Krypton Components/TestForm/Resources/flag_germany.png new file mode 100644 index 000000000..18c061c6a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/flag_germany.png differ diff --git a/Source/Krypton Components/TestForm/Resources/fm.png b/Source/Krypton Components/TestForm/Resources/fm.png new file mode 100644 index 000000000..66180a684 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/fm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/fo.png b/Source/Krypton Components/TestForm/Resources/fo.png new file mode 100644 index 000000000..b8de1071a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/fo.png differ diff --git a/Source/Krypton Components/TestForm/Resources/fr.png b/Source/Krypton Components/TestForm/Resources/fr.png new file mode 100644 index 000000000..3f16223cd Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/fr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ga.png b/Source/Krypton Components/TestForm/Resources/ga.png new file mode 100644 index 000000000..dfc55949c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ga.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gb.png b/Source/Krypton Components/TestForm/Resources/gb.png new file mode 100644 index 000000000..c7f7128c3 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gb.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gd.png b/Source/Krypton Components/TestForm/Resources/gd.png new file mode 100644 index 000000000..f1ebd7e1d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gd.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ge.png b/Source/Krypton Components/TestForm/Resources/ge.png new file mode 100644 index 000000000..168c0e303 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ge.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gf.png b/Source/Krypton Components/TestForm/Resources/gf.png new file mode 100644 index 000000000..8332c4ec2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gf.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gg.png b/Source/Krypton Components/TestForm/Resources/gg.png new file mode 100644 index 000000000..b42d0c7ac Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gh.png b/Source/Krypton Components/TestForm/Resources/gh.png new file mode 100644 index 000000000..077546468 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gh.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gi.png b/Source/Krypton Components/TestForm/Resources/gi.png new file mode 100644 index 000000000..2df779c22 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gi.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gl.png b/Source/Krypton Components/TestForm/Resources/gl.png new file mode 100644 index 000000000..aab099a41 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gl.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gm.png b/Source/Krypton Components/TestForm/Resources/gm.png new file mode 100644 index 000000000..a8f96f79a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gn.png b/Source/Krypton Components/TestForm/Resources/gn.png new file mode 100644 index 000000000..aaa42541b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gp.png b/Source/Krypton Components/TestForm/Resources/gp.png new file mode 100644 index 000000000..ca40788d4 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gp.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gq.png b/Source/Krypton Components/TestForm/Resources/gq.png new file mode 100644 index 000000000..7b99fbcc7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gq.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gr.png b/Source/Krypton Components/TestForm/Resources/gr.png new file mode 100644 index 000000000..d52e9bdb1 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gs.png b/Source/Krypton Components/TestForm/Resources/gs.png new file mode 100644 index 000000000..7ef0bf598 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gs.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gt.png b/Source/Krypton Components/TestForm/Resources/gt.png new file mode 100644 index 000000000..cc1f6e79c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gt.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gu.png b/Source/Krypton Components/TestForm/Resources/gu.png new file mode 100644 index 000000000..42fde748b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gu.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gw.png b/Source/Krypton Components/TestForm/Resources/gw.png new file mode 100644 index 000000000..6d2cedff6 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/gy.png b/Source/Krypton Components/TestForm/Resources/gy.png new file mode 100644 index 000000000..7b4ce14ba Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/gy.png differ diff --git a/Source/Krypton Components/TestForm/Resources/hk.png b/Source/Krypton Components/TestForm/Resources/hk.png new file mode 100644 index 000000000..5adfcedde Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/hk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/hm.png b/Source/Krypton Components/TestForm/Resources/hm.png new file mode 100644 index 000000000..a01389a74 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/hm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/hn.png b/Source/Krypton Components/TestForm/Resources/hn.png new file mode 100644 index 000000000..1d47eefeb Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/hn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/hr.png b/Source/Krypton Components/TestForm/Resources/hr.png new file mode 100644 index 000000000..31c06b4f6 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/hr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ht.png b/Source/Krypton Components/TestForm/Resources/ht.png new file mode 100644 index 000000000..a99c371f4 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ht.png differ diff --git a/Source/Krypton Components/TestForm/Resources/hu.png b/Source/Krypton Components/TestForm/Resources/hu.png new file mode 100644 index 000000000..c59f41f95 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/hu.png differ diff --git a/Source/Krypton Components/TestForm/Resources/id.png b/Source/Krypton Components/TestForm/Resources/id.png new file mode 100644 index 000000000..c66335fc7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/id.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ie.png b/Source/Krypton Components/TestForm/Resources/ie.png new file mode 100644 index 000000000..f3b94ac1b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ie.png differ diff --git a/Source/Krypton Components/TestForm/Resources/il.png b/Source/Krypton Components/TestForm/Resources/il.png new file mode 100644 index 000000000..cdf7c53d4 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/il.png differ diff --git a/Source/Krypton Components/TestForm/Resources/im.png b/Source/Krypton Components/TestForm/Resources/im.png new file mode 100644 index 000000000..34a95d1c6 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/im.png differ diff --git a/Source/Krypton Components/TestForm/Resources/in.png b/Source/Krypton Components/TestForm/Resources/in.png new file mode 100644 index 000000000..d90456d19 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/in.png differ diff --git a/Source/Krypton Components/TestForm/Resources/io.png b/Source/Krypton Components/TestForm/Resources/io.png new file mode 100644 index 000000000..3e74b6a31 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/io.png differ diff --git a/Source/Krypton Components/TestForm/Resources/iq.png b/Source/Krypton Components/TestForm/Resources/iq.png new file mode 100644 index 000000000..d5f361c3c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/iq.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ir.png b/Source/Krypton Components/TestForm/Resources/ir.png new file mode 100644 index 000000000..79801bf11 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ir.png differ diff --git a/Source/Krypton Components/TestForm/Resources/is.png b/Source/Krypton Components/TestForm/Resources/is.png new file mode 100644 index 000000000..7d7938942 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/is.png differ diff --git a/Source/Krypton Components/TestForm/Resources/it.png b/Source/Krypton Components/TestForm/Resources/it.png new file mode 100644 index 000000000..9d4ce40dc Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/it.png differ diff --git a/Source/Krypton Components/TestForm/Resources/je.png b/Source/Krypton Components/TestForm/Resources/je.png new file mode 100644 index 000000000..9c4e53e33 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/je.png differ diff --git a/Source/Krypton Components/TestForm/Resources/jm.png b/Source/Krypton Components/TestForm/Resources/jm.png new file mode 100644 index 000000000..6c5951898 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/jm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/jo.png b/Source/Krypton Components/TestForm/Resources/jo.png new file mode 100644 index 000000000..899a4a884 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/jo.png differ diff --git a/Source/Krypton Components/TestForm/Resources/jp.png b/Source/Krypton Components/TestForm/Resources/jp.png new file mode 100644 index 000000000..0ce0a47e7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/jp.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ke.png b/Source/Krypton Components/TestForm/Resources/ke.png new file mode 100644 index 000000000..92897f735 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ke.png differ diff --git a/Source/Krypton Components/TestForm/Resources/kg.png b/Source/Krypton Components/TestForm/Resources/kg.png new file mode 100644 index 000000000..8406fe31d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/kg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/kh.png b/Source/Krypton Components/TestForm/Resources/kh.png new file mode 100644 index 000000000..dc2e5570b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/kh.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ki.png b/Source/Krypton Components/TestForm/Resources/ki.png new file mode 100644 index 000000000..4423050fe Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ki.png differ diff --git a/Source/Krypton Components/TestForm/Resources/km.png b/Source/Krypton Components/TestForm/Resources/km.png new file mode 100644 index 000000000..d3fb7d920 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/km.png differ diff --git a/Source/Krypton Components/TestForm/Resources/kn.png b/Source/Krypton Components/TestForm/Resources/kn.png new file mode 100644 index 000000000..febac1327 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/kn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/kp.png b/Source/Krypton Components/TestForm/Resources/kp.png new file mode 100644 index 000000000..1bbe095a6 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/kp.png differ diff --git a/Source/Krypton Components/TestForm/Resources/kr.png b/Source/Krypton Components/TestForm/Resources/kr.png new file mode 100644 index 000000000..4a4f8fbea Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/kr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/kw.png b/Source/Krypton Components/TestForm/Resources/kw.png new file mode 100644 index 000000000..727c69b67 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/kw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ky.png b/Source/Krypton Components/TestForm/Resources/ky.png new file mode 100644 index 000000000..550f8151c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ky.png differ diff --git a/Source/Krypton Components/TestForm/Resources/kz.png b/Source/Krypton Components/TestForm/Resources/kz.png new file mode 100644 index 000000000..ca599c832 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/kz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/la.png b/Source/Krypton Components/TestForm/Resources/la.png new file mode 100644 index 000000000..4e3ce0b11 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/la.png differ diff --git a/Source/Krypton Components/TestForm/Resources/lb.png b/Source/Krypton Components/TestForm/Resources/lb.png new file mode 100644 index 000000000..08b6dd012 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/lb.png differ diff --git a/Source/Krypton Components/TestForm/Resources/lc.png b/Source/Krypton Components/TestForm/Resources/lc.png new file mode 100644 index 000000000..cf701b2b5 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/lc.png differ diff --git a/Source/Krypton Components/TestForm/Resources/li.png b/Source/Krypton Components/TestForm/Resources/li.png new file mode 100644 index 000000000..d99a12a93 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/li.png differ diff --git a/Source/Krypton Components/TestForm/Resources/lk.png b/Source/Krypton Components/TestForm/Resources/lk.png new file mode 100644 index 000000000..4a3aa6473 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/lk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/lr.png b/Source/Krypton Components/TestForm/Resources/lr.png new file mode 100644 index 000000000..026ebcbb1 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/lr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ls.png b/Source/Krypton Components/TestForm/Resources/ls.png new file mode 100644 index 000000000..5865b82ee Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ls.png differ diff --git a/Source/Krypton Components/TestForm/Resources/lt.png b/Source/Krypton Components/TestForm/Resources/lt.png new file mode 100644 index 000000000..714784d28 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/lt.png differ diff --git a/Source/Krypton Components/TestForm/Resources/lu.png b/Source/Krypton Components/TestForm/Resources/lu.png new file mode 100644 index 000000000..dcd2eda7e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/lu.png differ diff --git a/Source/Krypton Components/TestForm/Resources/lv.png b/Source/Krypton Components/TestForm/Resources/lv.png new file mode 100644 index 000000000..3b2c2c86e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/lv.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ly.png b/Source/Krypton Components/TestForm/Resources/ly.png new file mode 100644 index 000000000..dd7dbbb71 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ly.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ma.png b/Source/Krypton Components/TestForm/Resources/ma.png new file mode 100644 index 000000000..cccbe6d74 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ma.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mc.png b/Source/Krypton Components/TestForm/Resources/mc.png new file mode 100644 index 000000000..c66335fc7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mc.png differ diff --git a/Source/Krypton Components/TestForm/Resources/md.png b/Source/Krypton Components/TestForm/Resources/md.png new file mode 100644 index 000000000..92c934d36 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/md.png differ diff --git a/Source/Krypton Components/TestForm/Resources/me.png b/Source/Krypton Components/TestForm/Resources/me.png new file mode 100644 index 000000000..72a4780e7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/me.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mg.png b/Source/Krypton Components/TestForm/Resources/mg.png new file mode 100644 index 000000000..be1ce874c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mh.png b/Source/Krypton Components/TestForm/Resources/mh.png new file mode 100644 index 000000000..dcc39b16b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mh.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mk.png b/Source/Krypton Components/TestForm/Resources/mk.png new file mode 100644 index 000000000..253d929e2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ml.png b/Source/Krypton Components/TestForm/Resources/ml.png new file mode 100644 index 000000000..2642d9ef0 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ml.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mm.png b/Source/Krypton Components/TestForm/Resources/mm.png new file mode 100644 index 000000000..7e58eb743 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mn.png b/Source/Krypton Components/TestForm/Resources/mn.png new file mode 100644 index 000000000..920ede401 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mo.png b/Source/Krypton Components/TestForm/Resources/mo.png new file mode 100644 index 000000000..e47815482 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mo.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mp.png b/Source/Krypton Components/TestForm/Resources/mp.png new file mode 100644 index 000000000..298d588b1 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mp.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mq.png b/Source/Krypton Components/TestForm/Resources/mq.png new file mode 100644 index 000000000..44570c3f4 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mq.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mr.png b/Source/Krypton Components/TestForm/Resources/mr.png new file mode 100644 index 000000000..245ca355e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ms.png b/Source/Krypton Components/TestForm/Resources/ms.png new file mode 100644 index 000000000..679cdad97 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ms.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mt.png b/Source/Krypton Components/TestForm/Resources/mt.png new file mode 100644 index 000000000..d94b9e780 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mt.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mu.png b/Source/Krypton Components/TestForm/Resources/mu.png new file mode 100644 index 000000000..fa0aaa91b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mu.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mv.png b/Source/Krypton Components/TestForm/Resources/mv.png new file mode 100644 index 000000000..a29415938 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mv.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mw.png b/Source/Krypton Components/TestForm/Resources/mw.png new file mode 100644 index 000000000..51b5e3144 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mx.png b/Source/Krypton Components/TestForm/Resources/mx.png new file mode 100644 index 000000000..c1bd33b64 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mx.png differ diff --git a/Source/Krypton Components/TestForm/Resources/my.png b/Source/Krypton Components/TestForm/Resources/my.png new file mode 100644 index 000000000..44989608b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/my.png differ diff --git a/Source/Krypton Components/TestForm/Resources/mz.png b/Source/Krypton Components/TestForm/Resources/mz.png new file mode 100644 index 000000000..e8d9b6abc Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/mz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/na.png b/Source/Krypton Components/TestForm/Resources/na.png new file mode 100644 index 000000000..61cf1e071 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/na.png differ diff --git a/Source/Krypton Components/TestForm/Resources/nc.png b/Source/Krypton Components/TestForm/Resources/nc.png new file mode 100644 index 000000000..7dc765dea Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/nc.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ne.png b/Source/Krypton Components/TestForm/Resources/ne.png new file mode 100644 index 000000000..31b8e43c2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ne.png differ diff --git a/Source/Krypton Components/TestForm/Resources/nf.png b/Source/Krypton Components/TestForm/Resources/nf.png new file mode 100644 index 000000000..f9bcdda12 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/nf.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ng.png b/Source/Krypton Components/TestForm/Resources/ng.png new file mode 100644 index 000000000..7b30c22f7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ng.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ni.png b/Source/Krypton Components/TestForm/Resources/ni.png new file mode 100644 index 000000000..7247d8380 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ni.png differ diff --git a/Source/Krypton Components/TestForm/Resources/nl.png b/Source/Krypton Components/TestForm/Resources/nl.png new file mode 100644 index 000000000..10e8ea035 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/nl.png differ diff --git a/Source/Krypton Components/TestForm/Resources/no.png b/Source/Krypton Components/TestForm/Resources/no.png new file mode 100644 index 000000000..f629dc409 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/no.png differ diff --git a/Source/Krypton Components/TestForm/Resources/np.png b/Source/Krypton Components/TestForm/Resources/np.png new file mode 100644 index 000000000..6dfe9ea6b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/np.png differ diff --git a/Source/Krypton Components/TestForm/Resources/nr.png b/Source/Krypton Components/TestForm/Resources/nr.png new file mode 100644 index 000000000..8cffaca8d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/nr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/nu.png b/Source/Krypton Components/TestForm/Resources/nu.png new file mode 100644 index 000000000..c3ce4aedd Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/nu.png differ diff --git a/Source/Krypton Components/TestForm/Resources/nz.png b/Source/Krypton Components/TestForm/Resources/nz.png new file mode 100644 index 000000000..810c8bc46 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/nz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/om.png b/Source/Krypton Components/TestForm/Resources/om.png new file mode 100644 index 000000000..282aeeda5 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/om.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pa.png b/Source/Krypton Components/TestForm/Resources/pa.png new file mode 100644 index 000000000..81d3fd544 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pa.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pe.png b/Source/Krypton Components/TestForm/Resources/pe.png new file mode 100644 index 000000000..8d2691e77 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pe.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pf.png b/Source/Krypton Components/TestForm/Resources/pf.png new file mode 100644 index 000000000..5f55118c0 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pf.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pg.png b/Source/Krypton Components/TestForm/Resources/pg.png new file mode 100644 index 000000000..3f8143f61 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ph.png b/Source/Krypton Components/TestForm/Resources/ph.png new file mode 100644 index 000000000..2225029aa Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ph.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pk.png b/Source/Krypton Components/TestForm/Resources/pk.png new file mode 100644 index 000000000..e9192a6bb Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pl.png b/Source/Krypton Components/TestForm/Resources/pl.png new file mode 100644 index 000000000..079871b72 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pl.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pm.png b/Source/Krypton Components/TestForm/Resources/pm.png new file mode 100644 index 000000000..ba91d2c7a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pn.png b/Source/Krypton Components/TestForm/Resources/pn.png new file mode 100644 index 000000000..aa9344f57 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pr.png b/Source/Krypton Components/TestForm/Resources/pr.png new file mode 100644 index 000000000..2469b57dc Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ps.png b/Source/Krypton Components/TestForm/Resources/ps.png new file mode 100644 index 000000000..364ddf8a1 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ps.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pt.png b/Source/Krypton Components/TestForm/Resources/pt.png new file mode 100644 index 000000000..7a8ca65bd Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pt.png differ diff --git a/Source/Krypton Components/TestForm/Resources/pw.png b/Source/Krypton Components/TestForm/Resources/pw.png new file mode 100644 index 000000000..f4425f78e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/pw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/py.png b/Source/Krypton Components/TestForm/Resources/py.png new file mode 100644 index 000000000..21607d3ab Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/py.png differ diff --git a/Source/Krypton Components/TestForm/Resources/qa.png b/Source/Krypton Components/TestForm/Resources/qa.png new file mode 100644 index 000000000..6442606d8 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/qa.png differ diff --git a/Source/Krypton Components/TestForm/Resources/re.png b/Source/Krypton Components/TestForm/Resources/re.png new file mode 100644 index 000000000..129cbb5ca Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/re.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ro.png b/Source/Krypton Components/TestForm/Resources/ro.png new file mode 100644 index 000000000..b7a4b87c8 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ro.png differ diff --git a/Source/Krypton Components/TestForm/Resources/rs.png b/Source/Krypton Components/TestForm/Resources/rs.png new file mode 100644 index 000000000..ba8e9b5a9 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/rs.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ru.png b/Source/Krypton Components/TestForm/Resources/ru.png new file mode 100644 index 000000000..30459ae20 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ru.png differ diff --git a/Source/Krypton Components/TestForm/Resources/rw.png b/Source/Krypton Components/TestForm/Resources/rw.png new file mode 100644 index 000000000..f593964c3 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/rw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sa.png b/Source/Krypton Components/TestForm/Resources/sa.png new file mode 100644 index 000000000..1b49e613d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sa.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sb.png b/Source/Krypton Components/TestForm/Resources/sb.png new file mode 100644 index 000000000..833d9c982 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sb.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sc.png b/Source/Krypton Components/TestForm/Resources/sc.png new file mode 100644 index 000000000..c9c87a258 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sc.png differ diff --git a/Source/Krypton Components/TestForm/Resources/scotland.png b/Source/Krypton Components/TestForm/Resources/scotland.png new file mode 100644 index 000000000..a0e57b412 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/scotland.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sd.png b/Source/Krypton Components/TestForm/Resources/sd.png new file mode 100644 index 000000000..4a54678b3 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sd.png differ diff --git a/Source/Krypton Components/TestForm/Resources/se.png b/Source/Krypton Components/TestForm/Resources/se.png new file mode 100644 index 000000000..22f6e7eab Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/se.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sg.png b/Source/Krypton Components/TestForm/Resources/sg.png new file mode 100644 index 000000000..aceea6dff Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sh.png b/Source/Krypton Components/TestForm/Resources/sh.png new file mode 100644 index 000000000..4b1d2a291 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sh.png differ diff --git a/Source/Krypton Components/TestForm/Resources/si.png b/Source/Krypton Components/TestForm/Resources/si.png new file mode 100644 index 000000000..2bc05e1c5 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/si.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sj.png b/Source/Krypton Components/TestForm/Resources/sj.png new file mode 100644 index 000000000..160b6b5b7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sj.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sk.png b/Source/Krypton Components/TestForm/Resources/sk.png new file mode 100644 index 000000000..6c717be54 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sl.png b/Source/Krypton Components/TestForm/Resources/sl.png new file mode 100644 index 000000000..3daf48282 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sl.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sm.png b/Source/Krypton Components/TestForm/Resources/sm.png new file mode 100644 index 000000000..88cca4dde Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sn.png b/Source/Krypton Components/TestForm/Resources/sn.png new file mode 100644 index 000000000..ebd84c0eb Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/so.png b/Source/Krypton Components/TestForm/Resources/so.png new file mode 100644 index 000000000..b5cd16ed5 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/so.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sr.png b/Source/Krypton Components/TestForm/Resources/sr.png new file mode 100644 index 000000000..2f2a77be4 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/st.png b/Source/Krypton Components/TestForm/Resources/st.png new file mode 100644 index 000000000..9279a3738 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/st.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sv.png b/Source/Krypton Components/TestForm/Resources/sv.png new file mode 100644 index 000000000..ccb888236 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sv.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sy.png b/Source/Krypton Components/TestForm/Resources/sy.png new file mode 100644 index 000000000..0b765ccc8 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sy.png differ diff --git a/Source/Krypton Components/TestForm/Resources/sz.png b/Source/Krypton Components/TestForm/Resources/sz.png new file mode 100644 index 000000000..1ec4f63cd Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/sz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tc.png b/Source/Krypton Components/TestForm/Resources/tc.png new file mode 100644 index 000000000..e476d6952 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tc.png differ diff --git a/Source/Krypton Components/TestForm/Resources/td.png b/Source/Krypton Components/TestForm/Resources/td.png new file mode 100644 index 000000000..cace22f5c Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/td.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tf.png b/Source/Krypton Components/TestForm/Resources/tf.png new file mode 100644 index 000000000..80529a436 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tf.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tg.png b/Source/Krypton Components/TestForm/Resources/tg.png new file mode 100644 index 000000000..7e9fd2909 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/th.png b/Source/Krypton Components/TestForm/Resources/th.png new file mode 100644 index 000000000..643665a54 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/th.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tj.png b/Source/Krypton Components/TestForm/Resources/tj.png new file mode 100644 index 000000000..1270d4545 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tj.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tk.png b/Source/Krypton Components/TestForm/Resources/tk.png new file mode 100644 index 000000000..67b8c8cb5 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tk.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tl.png b/Source/Krypton Components/TestForm/Resources/tl.png new file mode 100644 index 000000000..bb5e4d1d7 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tl.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tm.png b/Source/Krypton Components/TestForm/Resources/tm.png new file mode 100644 index 000000000..0d9791e24 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tn.png b/Source/Krypton Components/TestForm/Resources/tn.png new file mode 100644 index 000000000..96549aeb2 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/to.png b/Source/Krypton Components/TestForm/Resources/to.png new file mode 100644 index 000000000..1914b391d Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/to.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tr.png b/Source/Krypton Components/TestForm/Resources/tr.png new file mode 100644 index 000000000..668f5f721 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tr.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tt.png b/Source/Krypton Components/TestForm/Resources/tt.png new file mode 100644 index 000000000..655e6eb31 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tt.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tv.png b/Source/Krypton Components/TestForm/Resources/tv.png new file mode 100644 index 000000000..e25dc16f1 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tv.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tw.png b/Source/Krypton Components/TestForm/Resources/tw.png new file mode 100644 index 000000000..30f98a153 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tw.png differ diff --git a/Source/Krypton Components/TestForm/Resources/tz.png b/Source/Krypton Components/TestForm/Resources/tz.png new file mode 100644 index 000000000..c7a2ec8a4 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/tz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ua.png b/Source/Krypton Components/TestForm/Resources/ua.png new file mode 100644 index 000000000..9b05e4cad Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ua.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ug.png b/Source/Krypton Components/TestForm/Resources/ug.png new file mode 100644 index 000000000..3fc5255d9 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ug.png differ diff --git a/Source/Krypton Components/TestForm/Resources/um.png b/Source/Krypton Components/TestForm/Resources/um.png new file mode 100644 index 000000000..c1dd9654b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/um.png differ diff --git a/Source/Krypton Components/TestForm/Resources/us.png b/Source/Krypton Components/TestForm/Resources/us.png new file mode 100644 index 000000000..09c94a0e1 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/us.png differ diff --git a/Source/Krypton Components/TestForm/Resources/uy.png b/Source/Krypton Components/TestForm/Resources/uy.png new file mode 100644 index 000000000..bbd1f1a1e Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/uy.png differ diff --git a/Source/Krypton Components/TestForm/Resources/uz.png b/Source/Krypton Components/TestForm/Resources/uz.png new file mode 100644 index 000000000..ff9e70b0a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/uz.png differ diff --git a/Source/Krypton Components/TestForm/Resources/va.png b/Source/Krypton Components/TestForm/Resources/va.png new file mode 100644 index 000000000..fef619475 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/va.png differ diff --git a/Source/Krypton Components/TestForm/Resources/vc.png b/Source/Krypton Components/TestForm/Resources/vc.png new file mode 100644 index 000000000..8de9ab8ec Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/vc.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ve.png b/Source/Krypton Components/TestForm/Resources/ve.png new file mode 100644 index 000000000..e8af8552f Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ve.png differ diff --git a/Source/Krypton Components/TestForm/Resources/vg.png b/Source/Krypton Components/TestForm/Resources/vg.png new file mode 100644 index 000000000..c751c258a Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/vg.png differ diff --git a/Source/Krypton Components/TestForm/Resources/vi.png b/Source/Krypton Components/TestForm/Resources/vi.png new file mode 100644 index 000000000..fe753341f Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/vi.png differ diff --git a/Source/Krypton Components/TestForm/Resources/vn.png b/Source/Krypton Components/TestForm/Resources/vn.png new file mode 100644 index 000000000..dedeb7570 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/vn.png differ diff --git a/Source/Krypton Components/TestForm/Resources/vu.png b/Source/Krypton Components/TestForm/Resources/vu.png new file mode 100644 index 000000000..0b26c4212 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/vu.png differ diff --git a/Source/Krypton Components/TestForm/Resources/wales.png b/Source/Krypton Components/TestForm/Resources/wales.png new file mode 100644 index 000000000..e0d7cee11 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/wales.png differ diff --git a/Source/Krypton Components/TestForm/Resources/wf.png b/Source/Krypton Components/TestForm/Resources/wf.png new file mode 100644 index 000000000..9f9558734 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/wf.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ws.png b/Source/Krypton Components/TestForm/Resources/ws.png new file mode 100644 index 000000000..e1d7730d0 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ws.png differ diff --git a/Source/Krypton Components/TestForm/Resources/ye.png b/Source/Krypton Components/TestForm/Resources/ye.png new file mode 100644 index 000000000..f2902a332 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/ye.png differ diff --git a/Source/Krypton Components/TestForm/Resources/yt.png b/Source/Krypton Components/TestForm/Resources/yt.png new file mode 100644 index 000000000..c298f378b Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/yt.png differ diff --git a/Source/Krypton Components/TestForm/Resources/za.png b/Source/Krypton Components/TestForm/Resources/za.png new file mode 100644 index 000000000..3ed5ce864 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/za.png differ diff --git a/Source/Krypton Components/TestForm/Resources/zm.png b/Source/Krypton Components/TestForm/Resources/zm.png new file mode 100644 index 000000000..918653fbe Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/zm.png differ diff --git a/Source/Krypton Components/TestForm/Resources/zw.png b/Source/Krypton Components/TestForm/Resources/zw.png new file mode 100644 index 000000000..ac356e062 Binary files /dev/null and b/Source/Krypton Components/TestForm/Resources/zw.png differ diff --git a/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.Designer.cs b/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.Designer.cs new file mode 100644 index 000000000..14ff55365 --- /dev/null +++ b/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.Designer.cs @@ -0,0 +1,1451 @@ +namespace TestForm +{ + partial class RibbonNavigatorWorkspaceTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RibbonNavigatorWorkspaceTest)); + this.radioSparkleOrange = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonManager = new Krypton.Toolkit.KryptonManager(this.components); + this.panelFill = new Krypton.Toolkit.KryptonPanel(); + this.kryptonWorkspace = new Krypton.Workspace.KryptonWorkspace(); + this.kryptonPage1 = new Krypton.Navigator.KryptonPage(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLinkLabel1 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonCheckBox2 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonCheckBox1 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonRadioButton3 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonRadioButton2 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonRadioButton1 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonWorkspaceCell1 = new Krypton.Workspace.KryptonWorkspaceCell(); + this.kryptonPage3 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage2 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage7 = new Krypton.Navigator.KryptonPage(); + this.kryptonWorkspaceSequence1 = new Krypton.Workspace.KryptonWorkspaceSequence(); + this.kryptonWorkspaceCell3 = new Krypton.Workspace.KryptonWorkspaceCell(); + this.kryptonPage4 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage5 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage10 = new Krypton.Navigator.KryptonPage(); + this.kryptonWorkspaceCell4 = new Krypton.Workspace.KryptonWorkspaceCell(); + this.kryptonPage6 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage11 = new Krypton.Navigator.KryptonPage(); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.navigatorOutlook = new Krypton.Navigator.KryptonNavigator(); + this.buttonSpecExpandCollapse = new Krypton.Navigator.ButtonSpecNavigator(); + this.pageGlobalPalettes = new Krypton.Navigator.KryptonPage(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.radioOffice2010Black = new Krypton.Toolkit.KryptonRadioButton(); + this.radioSparklePurple = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2010Blue = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2010Silver = new Krypton.Toolkit.KryptonRadioButton(); + this.radioSparkleBlue = new Krypton.Toolkit.KryptonRadioButton(); + this.radioSystem = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2003 = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2007Black = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2007Silver = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2007Blue = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonDisplayMode = new Krypton.Navigator.KryptonPage(); + this.buttonRibbonTabs = new Krypton.Toolkit.KryptonCheckButton(); + this.buttonStack = new Krypton.Toolkit.KryptonCheckButton(); + this.buttonHeaderBar = new Krypton.Toolkit.KryptonCheckButton(); + this.buttonHeaderGroup = new Krypton.Toolkit.KryptonCheckButton(); + this.buttonCheckButtons = new Krypton.Toolkit.KryptonCheckButton(); + this.buttonTabs = new Krypton.Toolkit.KryptonCheckButton(); + this.checkSetDocMode = new Krypton.Toolkit.KryptonCheckSet(this.components); + this.kryptonRibbon = new Krypton.Ribbon.KryptonRibbon(); + this.qatAlbania = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatAruba = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatBenin = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatBrunei = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatCapeVerde = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatEthiopia = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatGuam = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatHaiti = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatLaos = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatMali = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatMozambique = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatPanama = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.qatQatar = new Krypton.Ribbon.KryptonRibbonQATButton(); + this.kryptonContextMenuItem1 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonRibbonTab1 = new Krypton.Ribbon.KryptonRibbonTab(); + this.kryptonRibbonGroup1 = new Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple1 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton1 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupTriple4 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton2 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton3 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton10 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroup2 = new Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple2 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton4 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton5 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton6 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupSeparator1 = new Krypton.Ribbon.KryptonRibbonGroupSeparator(); + this.kryptonRibbonGroupTriple3 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton7 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton8 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton9 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupTriple9 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupThemeComboBox1 = new Krypton.Ribbon.KryptonRibbonGroupThemeComboBox(); + this.kryptonRibbonTab2 = new Krypton.Ribbon.KryptonRibbonTab(); + this.kryptonRibbonGroup3 = new Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple5 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton11 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton12 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton13 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroup5 = new Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple8 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton18 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupLines1 = new Krypton.Ribbon.KryptonRibbonGroupLines(); + this.kryptonRibbonGroupButton19 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton20 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroup4 = new Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple6 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton14 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupTriple7 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton15 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton16 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton17 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonPage8 = new Krypton.Navigator.KryptonPage(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLinkLabel2 = new Krypton.Toolkit.KryptonLinkLabel(); + this.kryptonRadioButton4 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonRadioButton5 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonRadioButton6 = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonCheckBox4 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonCheckBox5 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonCheckBox6 = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonPage9 = new Krypton.Navigator.KryptonPage(); + ((System.ComponentModel.ISupportInitialize)(this.panelFill)).BeginInit(); + this.panelFill.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspace)).BeginInit(); + this.kryptonWorkspace.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).BeginInit(); + this.kryptonPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell1)).BeginInit(); + this.kryptonWorkspaceCell1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage7)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell3)).BeginInit(); + this.kryptonWorkspaceCell3.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage4)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage5)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage10)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell4)).BeginInit(); + this.kryptonWorkspaceCell4.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage6)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage11)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.navigatorOutlook)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pageGlobalPalettes)).BeginInit(); + this.pageGlobalPalettes.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonDisplayMode)).BeginInit(); + this.kryptonDisplayMode.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.checkSetDocMode)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage8)).BeginInit(); + this.kryptonPage8.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage9)).BeginInit(); + this.SuspendLayout(); + // + // radioSparkleOrange + // + this.radioSparkleOrange.Location = new System.Drawing.Point(13, 230); + this.radioSparkleOrange.Name = "radioSparkleOrange"; + this.radioSparkleOrange.Size = new System.Drawing.Size(115, 20); + this.radioSparkleOrange.TabIndex = 8; + this.radioSparkleOrange.Values.Text = "Sparkle - Orange"; + this.radioSparkleOrange.CheckedChanged += new System.EventHandler(this.radioSparkleOrange_CheckedChanged); + // + // kryptonManager + // + this.kryptonManager.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.Office2007Silver; + // + // panelFill + // + this.panelFill.Controls.Add(this.kryptonWorkspace); + this.panelFill.Controls.Add(this.kryptonPanel1); + this.panelFill.Controls.Add(this.navigatorOutlook); + this.panelFill.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelFill.Location = new System.Drawing.Point(0, 142); + this.panelFill.Margin = new System.Windows.Forms.Padding(7); + this.panelFill.Name = "panelFill"; + this.panelFill.Padding = new System.Windows.Forms.Padding(9); + this.panelFill.Size = new System.Drawing.Size(683, 456); + this.panelFill.TabIndex = 1; + // + // kryptonWorkspace + // + this.kryptonWorkspace.ActivePage = this.kryptonPage1; + this.kryptonWorkspace.CompactFlags = ((Krypton.Workspace.CompactFlags)((((Krypton.Workspace.CompactFlags.RemoveEmptyCells | Krypton.Workspace.CompactFlags.RemoveEmptySequences) + | Krypton.Workspace.CompactFlags.PromoteLeafs) + | Krypton.Workspace.CompactFlags.AtLeastOneVisibleCell))); + this.kryptonWorkspace.ContainerBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelClient; + this.kryptonWorkspace.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonWorkspace.Location = new System.Drawing.Point(194, 9); + this.kryptonWorkspace.Name = "kryptonWorkspace"; + // + // + // + this.kryptonWorkspace.Root.Children.AddRange(new System.ComponentModel.Component[] { + this.kryptonWorkspaceCell1, + this.kryptonWorkspaceSequence1}); + this.kryptonWorkspace.Root.Orientation = System.Windows.Forms.Orientation.Vertical; + this.kryptonWorkspace.Root.UniqueName = "03CE3DB6856D4BE671B66A4FB4EF68C3"; + this.kryptonWorkspace.Root.WorkspaceControl = this.kryptonWorkspace; + this.kryptonWorkspace.SeparatorStyle = Krypton.Toolkit.SeparatorStyle.HighProfile; + this.kryptonWorkspace.Size = new System.Drawing.Size(480, 438); + this.kryptonWorkspace.SplitterWidth = 5; + this.kryptonWorkspace.TabIndex = 3; + this.kryptonWorkspace.TabStop = true; + this.kryptonWorkspace.WorkspaceCellAdding += new System.EventHandler(this.kryptonWorkspace_WorkspaceCellAdding); + // + // kryptonPage1 + // + this.kryptonPage1.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage1.Controls.Add(this.kryptonLabel1); + this.kryptonPage1.Controls.Add(this.kryptonLinkLabel1); + this.kryptonPage1.Controls.Add(this.kryptonCheckBox2); + this.kryptonPage1.Controls.Add(this.kryptonCheckBox1); + this.kryptonPage1.Controls.Add(this.kryptonRadioButton3); + this.kryptonPage1.Controls.Add(this.kryptonRadioButton2); + this.kryptonPage1.Controls.Add(this.kryptonRadioButton1); + this.kryptonPage1.Flags = 65534; + this.kryptonPage1.LastVisibleSet = true; + this.kryptonPage1.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage1.Name = "kryptonPage1"; + this.kryptonPage1.Size = new System.Drawing.Size(478, 189); + this.kryptonPage1.Text = "Page 1"; + this.kryptonPage1.TextDescription = "Page 1 Description"; + this.kryptonPage1.TextTitle = "Page 1 Title"; + this.kryptonPage1.ToolTipTitle = "Page ToolTip"; + this.kryptonPage1.UniqueName = "6BBD1FFBC4424D2F6BBD1FFBC4424D2F"; + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(180, 87); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(66, 20); + this.kryptonLabel1.TabIndex = 6; + this.kryptonLabel1.Values.Text = "Label Text"; + // + // kryptonLinkLabel1 + // + this.kryptonLinkLabel1.Location = new System.Drawing.Point(180, 63); + this.kryptonLinkLabel1.Name = "kryptonLinkLabel1"; + this.kryptonLinkLabel1.Size = new System.Drawing.Size(65, 20); + this.kryptonLinkLabel1.TabIndex = 5; + this.kryptonLinkLabel1.Values.Text = "Link Label"; + // + // kryptonCheckBox2 + // + this.kryptonCheckBox2.Location = new System.Drawing.Point(185, 15); + this.kryptonCheckBox2.Name = "kryptonCheckBox2"; + this.kryptonCheckBox2.Size = new System.Drawing.Size(87, 20); + this.kryptonCheckBox2.TabIndex = 3; + this.kryptonCheckBox2.Values.Text = "CheckBox 1"; + // + // kryptonCheckBox1 + // + this.kryptonCheckBox1.Location = new System.Drawing.Point(185, 39); + this.kryptonCheckBox1.Name = "kryptonCheckBox1"; + this.kryptonCheckBox1.Size = new System.Drawing.Size(87, 20); + this.kryptonCheckBox1.TabIndex = 4; + this.kryptonCheckBox1.Values.Text = "CheckBox 2"; + // + // kryptonRadioButton3 + // + this.kryptonRadioButton3.Location = new System.Drawing.Point(18, 63); + this.kryptonRadioButton3.Name = "kryptonRadioButton3"; + this.kryptonRadioButton3.Size = new System.Drawing.Size(104, 20); + this.kryptonRadioButton3.TabIndex = 2; + this.kryptonRadioButton3.Values.Text = "Radio Button 3"; + // + // kryptonRadioButton2 + // + this.kryptonRadioButton2.Location = new System.Drawing.Point(18, 39); + this.kryptonRadioButton2.Name = "kryptonRadioButton2"; + this.kryptonRadioButton2.Size = new System.Drawing.Size(104, 20); + this.kryptonRadioButton2.TabIndex = 1; + this.kryptonRadioButton2.Values.Text = "Radio Button 2"; + // + // kryptonRadioButton1 + // + this.kryptonRadioButton1.Location = new System.Drawing.Point(18, 15); + this.kryptonRadioButton1.Name = "kryptonRadioButton1"; + this.kryptonRadioButton1.Size = new System.Drawing.Size(104, 20); + this.kryptonRadioButton1.TabIndex = 0; + this.kryptonRadioButton1.Values.Text = "Radio Button 1"; + // + // kryptonWorkspaceCell1 + // + this.kryptonWorkspaceCell1.AllowPageDrag = true; + this.kryptonWorkspaceCell1.AllowTabFocus = false; + this.kryptonWorkspaceCell1.Button.ButtonDisplayLogic = Krypton.Navigator.ButtonDisplayLogic.Context; + this.kryptonWorkspaceCell1.Button.CloseButtonAction = Krypton.Navigator.CloseButtonAction.RemovePageAndDispose; + this.kryptonWorkspaceCell1.Button.CloseButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonWorkspaceCell1.Button.ContextButtonAction = Krypton.Navigator.ContextButtonAction.SelectPage; + this.kryptonWorkspaceCell1.Button.ContextButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonWorkspaceCell1.Button.ContextMenuMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonWorkspaceCell1.Button.ContextMenuMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonWorkspaceCell1.Button.NextButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell1.Button.NextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell1.Button.PreviousButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell1.Button.PreviousButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell1.ControlKryptonFormFeatures = false; + this.kryptonWorkspaceCell1.Name = "kryptonWorkspaceCell1"; + this.kryptonWorkspaceCell1.NavigatorMode = Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonWorkspaceCell1.Owner = null; + this.kryptonWorkspaceCell1.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.kryptonWorkspaceCell1.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.kryptonPage1, + this.kryptonPage3, + this.kryptonPage2, + this.kryptonPage7}); + this.kryptonWorkspaceCell1.SelectedIndex = 0; + this.kryptonWorkspaceCell1.UniqueName = "B6BB7B2230CD4B6CDBB3C3D3ECA3CE84"; + // + // kryptonPage3 + // + this.kryptonPage3.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage3.Flags = 65534; + this.kryptonPage3.LastVisibleSet = true; + this.kryptonPage3.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage3.Name = "kryptonPage3"; + this.kryptonPage3.Size = new System.Drawing.Size(604, 219); + this.kryptonPage3.Text = "Page 2"; + this.kryptonPage3.TextDescription = "Page 2 Description"; + this.kryptonPage3.TextTitle = "Page 2 Title"; + this.kryptonPage3.ToolTipTitle = "Page ToolTip"; + this.kryptonPage3.UniqueName = "A11EDA543BCD4892A11EDA543BCD4892"; + // + // kryptonPage2 + // + this.kryptonPage2.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage2.Flags = 65534; + this.kryptonPage2.LastVisibleSet = true; + this.kryptonPage2.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage2.Name = "kryptonPage2"; + this.kryptonPage2.Size = new System.Drawing.Size(604, 219); + this.kryptonPage2.Text = "Page 3"; + this.kryptonPage2.TextDescription = "Page 3 Description"; + this.kryptonPage2.TextTitle = "Page 3 Title"; + this.kryptonPage2.ToolTipTitle = "Page ToolTip"; + this.kryptonPage2.UniqueName = "2421DFC88D71464D2421DFC88D71464D"; + // + // kryptonPage7 + // + this.kryptonPage7.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage7.Flags = 65534; + this.kryptonPage7.LastVisibleSet = true; + this.kryptonPage7.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage7.Name = "kryptonPage7"; + this.kryptonPage7.Size = new System.Drawing.Size(604, 219); + this.kryptonPage7.Text = "Page 4"; + this.kryptonPage7.TextDescription = "Page 4 Description"; + this.kryptonPage7.TextTitle = "Page 4 Title"; + this.kryptonPage7.ToolTipTitle = "Page ToolTip"; + this.kryptonPage7.UniqueName = "07A8AEAF8A294D7307A8AEAF8A294D73"; + // + // kryptonWorkspaceSequence1 + // + this.kryptonWorkspaceSequence1.Children.AddRange(new System.ComponentModel.Component[] { + this.kryptonWorkspaceCell3, + this.kryptonWorkspaceCell4}); + this.kryptonWorkspaceSequence1.UniqueName = "E0BD868474F749821686DA2047A1B41C"; + this.kryptonWorkspaceSequence1.WorkspaceControl = null; + // + // kryptonWorkspaceCell3 + // + this.kryptonWorkspaceCell3.AllowPageDrag = true; + this.kryptonWorkspaceCell3.AllowTabFocus = false; + this.kryptonWorkspaceCell3.Button.ButtonDisplayLogic = Krypton.Navigator.ButtonDisplayLogic.Context; + this.kryptonWorkspaceCell3.Button.CloseButtonAction = Krypton.Navigator.CloseButtonAction.RemovePageAndDispose; + this.kryptonWorkspaceCell3.Button.CloseButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonWorkspaceCell3.Button.ContextButtonAction = Krypton.Navigator.ContextButtonAction.SelectPage; + this.kryptonWorkspaceCell3.Button.ContextButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonWorkspaceCell3.Button.ContextMenuMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonWorkspaceCell3.Button.ContextMenuMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonWorkspaceCell3.Button.NextButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell3.Button.NextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell3.Button.PreviousButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell3.Button.PreviousButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell3.ControlKryptonFormFeatures = false; + this.kryptonWorkspaceCell3.Name = "kryptonWorkspaceCell3"; + this.kryptonWorkspaceCell3.NavigatorMode = Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonWorkspaceCell3.Owner = null; + this.kryptonWorkspaceCell3.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.kryptonWorkspaceCell3.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.kryptonPage4, + this.kryptonPage5, + this.kryptonPage10}); + this.kryptonWorkspaceCell3.SelectedIndex = 0; + this.kryptonWorkspaceCell3.UniqueName = "D6C2C815C07F40DA9786E81899BDF116"; + // + // kryptonPage4 + // + this.kryptonPage4.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage4.Flags = 65534; + this.kryptonPage4.LastVisibleSet = true; + this.kryptonPage4.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage4.Name = "kryptonPage4"; + this.kryptonPage4.Size = new System.Drawing.Size(235, 190); + this.kryptonPage4.Text = "Page 5"; + this.kryptonPage4.TextDescription = "Page 5 Description"; + this.kryptonPage4.TextTitle = "Page 5 Title"; + this.kryptonPage4.ToolTipTitle = "Page ToolTip"; + this.kryptonPage4.UniqueName = "51BA9BE4E9B64B9E51BA9BE4E9B64B9E"; + // + // kryptonPage5 + // + this.kryptonPage5.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage5.Flags = 65534; + this.kryptonPage5.LastVisibleSet = true; + this.kryptonPage5.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage5.Name = "kryptonPage5"; + this.kryptonPage5.Size = new System.Drawing.Size(192, 148); + this.kryptonPage5.Text = "Page 6"; + this.kryptonPage5.TextDescription = "Page 6 Description"; + this.kryptonPage5.TextTitle = "Page 6 Title"; + this.kryptonPage5.ToolTipTitle = "Page ToolTip"; + this.kryptonPage5.UniqueName = "F0E8346BF896419DF0E8346BF896419D"; + // + // kryptonPage10 + // + this.kryptonPage10.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage10.Flags = 65534; + this.kryptonPage10.LastVisibleSet = true; + this.kryptonPage10.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage10.Name = "kryptonPage10"; + this.kryptonPage10.Size = new System.Drawing.Size(100, 100); + this.kryptonPage10.Text = "Page 7"; + this.kryptonPage10.TextDescription = "Page 7 Description"; + this.kryptonPage10.TextTitle = "Page 7 Title"; + this.kryptonPage10.ToolTipTitle = "Page ToolTip"; + this.kryptonPage10.UniqueName = "3A748AD5F777479F3A748AD5F777479F"; + // + // kryptonWorkspaceCell4 + // + this.kryptonWorkspaceCell4.AllowPageDrag = true; + this.kryptonWorkspaceCell4.AllowTabFocus = false; + this.kryptonWorkspaceCell4.Button.ButtonDisplayLogic = Krypton.Navigator.ButtonDisplayLogic.Context; + this.kryptonWorkspaceCell4.Button.CloseButtonAction = Krypton.Navigator.CloseButtonAction.RemovePageAndDispose; + this.kryptonWorkspaceCell4.Button.CloseButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonWorkspaceCell4.Button.ContextButtonAction = Krypton.Navigator.ContextButtonAction.SelectPage; + this.kryptonWorkspaceCell4.Button.ContextButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.kryptonWorkspaceCell4.Button.ContextMenuMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonWorkspaceCell4.Button.ContextMenuMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonWorkspaceCell4.Button.NextButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell4.Button.NextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell4.Button.PreviousButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell4.Button.PreviousButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell4.ControlKryptonFormFeatures = false; + this.kryptonWorkspaceCell4.Name = "kryptonWorkspaceCell4"; + this.kryptonWorkspaceCell4.NavigatorMode = Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonWorkspaceCell4.Owner = null; + this.kryptonWorkspaceCell4.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.kryptonWorkspaceCell4.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.kryptonPage6, + this.kryptonPage11}); + this.kryptonWorkspaceCell4.SelectedIndex = 0; + this.kryptonWorkspaceCell4.UniqueName = "60088AB11A8D41DC5DA877C07264119D"; + // + // kryptonPage6 + // + this.kryptonPage6.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage6.Flags = 65534; + this.kryptonPage6.LastVisibleSet = true; + this.kryptonPage6.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage6.Name = "kryptonPage6"; + this.kryptonPage6.Size = new System.Drawing.Size(236, 190); + this.kryptonPage6.Text = "Page 8"; + this.kryptonPage6.TextDescription = "Page 8 Description"; + this.kryptonPage6.TextTitle = "Page 8 Title"; + this.kryptonPage6.ToolTipTitle = "Page ToolTip"; + this.kryptonPage6.UniqueName = "15D511E80A1D4E9515D511E80A1D4E95"; + // + // kryptonPage11 + // + this.kryptonPage11.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage11.Flags = 65534; + this.kryptonPage11.LastVisibleSet = true; + this.kryptonPage11.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage11.Name = "kryptonPage11"; + this.kryptonPage11.Size = new System.Drawing.Size(100, 100); + this.kryptonPage11.Text = "Page 9"; + this.kryptonPage11.TextDescription = "Page 9 Description"; + this.kryptonPage11.TextTitle = "Page 9 Title"; + this.kryptonPage11.ToolTipTitle = "Page ToolTip"; + this.kryptonPage11.UniqueName = "6D99A7C237EA45C26D99A7C237EA45C2"; + // + // kryptonPanel1 + // + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Left; + this.kryptonPanel1.Location = new System.Drawing.Point(185, 9); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(9, 438); + this.kryptonPanel1.TabIndex = 2; + // + // navigatorOutlook + // + this.navigatorOutlook.AutoSize = true; + this.navigatorOutlook.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.navigatorOutlook.Button.ButtonDisplayLogic = Krypton.Navigator.ButtonDisplayLogic.None; + this.navigatorOutlook.Button.ButtonSpecs.Add(this.buttonSpecExpandCollapse); + this.navigatorOutlook.Button.CloseButtonAction = Krypton.Navigator.CloseButtonAction.RemovePageAndDispose; + this.navigatorOutlook.Button.CloseButtonDisplay = Krypton.Navigator.ButtonDisplay.Hide; + this.navigatorOutlook.Button.ContextButtonAction = Krypton.Navigator.ContextButtonAction.SelectPage; + this.navigatorOutlook.Button.ContextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.navigatorOutlook.Button.ContextMenuMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.navigatorOutlook.Button.ContextMenuMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.navigatorOutlook.Button.NextButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.navigatorOutlook.Button.NextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.navigatorOutlook.Button.PreviousButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.navigatorOutlook.Button.PreviousButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.navigatorOutlook.ControlKryptonFormFeatures = false; + this.navigatorOutlook.Dock = System.Windows.Forms.DockStyle.Left; + this.navigatorOutlook.Header.HeaderPositionBar = Krypton.Toolkit.VisualOrientation.Top; + this.navigatorOutlook.Header.HeaderPositionPrimary = Krypton.Toolkit.VisualOrientation.Top; + this.navigatorOutlook.Header.HeaderPositionSecondary = Krypton.Toolkit.VisualOrientation.Bottom; + this.navigatorOutlook.Header.HeaderStyleBar = Krypton.Toolkit.HeaderStyle.Secondary; + this.navigatorOutlook.Header.HeaderStylePrimary = Krypton.Toolkit.HeaderStyle.Primary; + this.navigatorOutlook.Header.HeaderStyleSecondary = Krypton.Toolkit.HeaderStyle.Secondary; + this.navigatorOutlook.Header.HeaderValuesPrimary.MapDescription = Krypton.Navigator.MapKryptonPageText.None; + this.navigatorOutlook.Header.HeaderValuesPrimary.MapHeading = Krypton.Navigator.MapKryptonPageText.TitleText; + this.navigatorOutlook.Header.HeaderValuesPrimary.MapImage = Krypton.Navigator.MapKryptonPageImage.None; + this.navigatorOutlook.Location = new System.Drawing.Point(9, 9); + this.navigatorOutlook.Name = "navigatorOutlook"; + this.navigatorOutlook.NavigatorMode = Krypton.Navigator.NavigatorMode.OutlookFull; + this.navigatorOutlook.Owner = null; + this.navigatorOutlook.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.navigatorOutlook.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.pageGlobalPalettes, + this.kryptonDisplayMode}); + this.navigatorOutlook.SelectedIndex = 0; + this.navigatorOutlook.Size = new System.Drawing.Size(176, 438); + this.navigatorOutlook.TabIndex = 0; + this.navigatorOutlook.Text = "kryptonNavigator1"; + // + // buttonSpecExpandCollapse + // + this.buttonSpecExpandCollapse.Type = Krypton.Toolkit.PaletteButtonSpecStyle.ArrowLeft; + this.buttonSpecExpandCollapse.TypeRestricted = Krypton.Navigator.PaletteNavButtonSpecStyle.ArrowLeft; + this.buttonSpecExpandCollapse.UniqueName = "22C3A3B1DC494B5F22C3A3B1DC494B5F"; + this.buttonSpecExpandCollapse.Click += new System.EventHandler(this.buttonSpecExpandCollapse_Click); + // + // pageGlobalPalettes + // + this.pageGlobalPalettes.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.pageGlobalPalettes.Controls.Add(this.kryptonThemeComboBox1); + this.pageGlobalPalettes.Controls.Add(this.radioOffice2010Black); + this.pageGlobalPalettes.Controls.Add(this.radioSparklePurple); + this.pageGlobalPalettes.Controls.Add(this.radioOffice2010Blue); + this.pageGlobalPalettes.Controls.Add(this.radioOffice2010Silver); + this.pageGlobalPalettes.Controls.Add(this.radioSparkleOrange); + this.pageGlobalPalettes.Controls.Add(this.radioSparkleBlue); + this.pageGlobalPalettes.Controls.Add(this.radioSystem); + this.pageGlobalPalettes.Controls.Add(this.radioOffice2003); + this.pageGlobalPalettes.Controls.Add(this.radioOffice2007Black); + this.pageGlobalPalettes.Controls.Add(this.radioOffice2007Silver); + this.pageGlobalPalettes.Controls.Add(this.radioOffice2007Blue); + this.pageGlobalPalettes.Flags = 65534; + this.pageGlobalPalettes.ImageSmall = ((System.Drawing.Bitmap)(resources.GetObject("pageGlobalPalettes.ImageSmall"))); + this.pageGlobalPalettes.LastVisibleSet = true; + this.pageGlobalPalettes.MinimumSize = new System.Drawing.Size(145, 50); + this.pageGlobalPalettes.Name = "pageGlobalPalettes"; + this.pageGlobalPalettes.Padding = new System.Windows.Forms.Padding(13, 12, 13, 12); + this.pageGlobalPalettes.Size = new System.Drawing.Size(156, 394); + this.pageGlobalPalettes.Text = "Palettes"; + this.pageGlobalPalettes.TextDescription = "Palettes"; + this.pageGlobalPalettes.TextTitle = "Palettes"; + this.pageGlobalPalettes.ToolTipTitle = "Page ToolTip"; + this.pageGlobalPalettes.UniqueName = "64378E1F7C03429B64378E1F7C03429B"; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Office2007Silver; + this.kryptonThemeComboBox1.DropDownWidth = 121; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(13, 311); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(121, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 11; + // + // radioOffice2010Black + // + this.radioOffice2010Black.Location = new System.Drawing.Point(13, 68); + this.radioOffice2010Black.Name = "radioOffice2010Black"; + this.radioOffice2010Black.Size = new System.Drawing.Size(125, 20); + this.radioOffice2010Black.TabIndex = 2; + this.radioOffice2010Black.Values.Text = "Office 2010 - Black"; + this.radioOffice2010Black.CheckedChanged += new System.EventHandler(this.radioOffice2010Black_CheckedChanged); + // + // radioSparklePurple + // + this.radioSparklePurple.Location = new System.Drawing.Point(13, 257); + this.radioSparklePurple.Name = "radioSparklePurple"; + this.radioSparklePurple.Size = new System.Drawing.Size(109, 20); + this.radioSparklePurple.TabIndex = 9; + this.radioSparklePurple.Values.Text = "Sparkle - Purple"; + this.radioSparklePurple.CheckedChanged += new System.EventHandler(this.radioSparklePurple_CheckedChanged); + // + // radioOffice2010Blue + // + this.radioOffice2010Blue.Location = new System.Drawing.Point(13, 14); + this.radioOffice2010Blue.Margin = new System.Windows.Forms.Padding(4); + this.radioOffice2010Blue.Name = "radioOffice2010Blue"; + this.radioOffice2010Blue.Size = new System.Drawing.Size(120, 20); + this.radioOffice2010Blue.TabIndex = 0; + this.radioOffice2010Blue.Values.Text = "Office 2010 - Blue"; + this.radioOffice2010Blue.CheckedChanged += new System.EventHandler(this.radioOffice2010Blue_CheckedChanged); + // + // radioOffice2010Silver + // + this.radioOffice2010Silver.Location = new System.Drawing.Point(13, 41); + this.radioOffice2010Silver.Name = "radioOffice2010Silver"; + this.radioOffice2010Silver.Size = new System.Drawing.Size(126, 20); + this.radioOffice2010Silver.TabIndex = 1; + this.radioOffice2010Silver.Values.Text = "Office 2010 - Silver"; + this.radioOffice2010Silver.CheckedChanged += new System.EventHandler(this.radioOffice2010Silver_CheckedChanged); + // + // radioSparkleBlue + // + this.radioSparkleBlue.Location = new System.Drawing.Point(13, 203); + this.radioSparkleBlue.Name = "radioSparkleBlue"; + this.radioSparkleBlue.Size = new System.Drawing.Size(98, 20); + this.radioSparkleBlue.TabIndex = 7; + this.radioSparkleBlue.Values.Text = "Sparkle - Blue"; + this.radioSparkleBlue.CheckedChanged += new System.EventHandler(this.radioSparkleBlue_CheckedChanged); + // + // radioSystem + // + this.radioSystem.Location = new System.Drawing.Point(13, 284); + this.radioSystem.Name = "radioSystem"; + this.radioSystem.Size = new System.Drawing.Size(62, 20); + this.radioSystem.TabIndex = 10; + this.radioSystem.Values.Text = "System"; + this.radioSystem.CheckedChanged += new System.EventHandler(this.radioSystem_CheckedChanged); + // + // radioOffice2003 + // + this.radioOffice2003.Location = new System.Drawing.Point(13, 176); + this.radioOffice2003.Name = "radioOffice2003"; + this.radioOffice2003.Size = new System.Drawing.Size(85, 20); + this.radioOffice2003.TabIndex = 6; + this.radioOffice2003.Values.Text = "Office 2003"; + this.radioOffice2003.CheckedChanged += new System.EventHandler(this.radioOffice2003_CheckedChanged); + // + // radioOffice2007Black + // + this.radioOffice2007Black.Location = new System.Drawing.Point(13, 149); + this.radioOffice2007Black.Name = "radioOffice2007Black"; + this.radioOffice2007Black.Size = new System.Drawing.Size(125, 20); + this.radioOffice2007Black.TabIndex = 5; + this.radioOffice2007Black.Values.Text = "Office 2007 - Black"; + this.radioOffice2007Black.CheckedChanged += new System.EventHandler(this.radioOffice2007Black_CheckedChanged); + // + // radioOffice2007Silver + // + this.radioOffice2007Silver.Checked = true; + this.radioOffice2007Silver.Location = new System.Drawing.Point(13, 122); + this.radioOffice2007Silver.Margin = new System.Windows.Forms.Padding(4); + this.radioOffice2007Silver.Name = "radioOffice2007Silver"; + this.radioOffice2007Silver.Size = new System.Drawing.Size(126, 20); + this.radioOffice2007Silver.TabIndex = 4; + this.radioOffice2007Silver.Values.Text = "Office 2007 - Silver"; + this.radioOffice2007Silver.CheckedChanged += new System.EventHandler(this.radioOffice2007Silver_CheckedChanged); + // + // radioOffice2007Blue + // + this.radioOffice2007Blue.Location = new System.Drawing.Point(13, 95); + this.radioOffice2007Blue.Name = "radioOffice2007Blue"; + this.radioOffice2007Blue.Size = new System.Drawing.Size(120, 20); + this.radioOffice2007Blue.TabIndex = 3; + this.radioOffice2007Blue.Values.Text = "Office 2007 - Blue"; + this.radioOffice2007Blue.CheckedChanged += new System.EventHandler(this.radioOffice2007Blue_CheckedChanged); + // + // kryptonDisplayMode + // + this.kryptonDisplayMode.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonDisplayMode.Controls.Add(this.buttonRibbonTabs); + this.kryptonDisplayMode.Controls.Add(this.buttonStack); + this.kryptonDisplayMode.Controls.Add(this.buttonHeaderBar); + this.kryptonDisplayMode.Controls.Add(this.buttonHeaderGroup); + this.kryptonDisplayMode.Controls.Add(this.buttonCheckButtons); + this.kryptonDisplayMode.Controls.Add(this.buttonTabs); + this.kryptonDisplayMode.Flags = 65534; + this.kryptonDisplayMode.ImageSmall = ((System.Drawing.Bitmap)(resources.GetObject("kryptonDisplayMode.ImageSmall"))); + this.kryptonDisplayMode.LastVisibleSet = true; + this.kryptonDisplayMode.MinimumSize = new System.Drawing.Size(145, 50); + this.kryptonDisplayMode.Name = "kryptonDisplayMode"; + this.kryptonDisplayMode.Padding = new System.Windows.Forms.Padding(10); + this.kryptonDisplayMode.Size = new System.Drawing.Size(151, 363); + this.kryptonDisplayMode.Text = "Display Mode"; + this.kryptonDisplayMode.TextDescription = "Display Mode"; + this.kryptonDisplayMode.TextTitle = "Display Mode"; + this.kryptonDisplayMode.ToolTipTitle = "Page ToolTip"; + this.kryptonDisplayMode.UniqueName = "24D4FC840D914CC024D4FC840D914CC0"; + // + // buttonRibbonTabs + // + this.buttonRibbonTabs.Location = new System.Drawing.Point(19, 41); + this.buttonRibbonTabs.Name = "buttonRibbonTabs"; + this.buttonRibbonTabs.Size = new System.Drawing.Size(108, 25); + this.buttonRibbonTabs.TabIndex = 14; + this.buttonRibbonTabs.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonRibbonTabs.Values.Text = "RibbonTabs"; + this.buttonRibbonTabs.Click += new System.EventHandler(this.buttonRibbonTabs_Click); + // + // buttonStack + // + this.buttonStack.Location = new System.Drawing.Point(19, 165); + this.buttonStack.Name = "buttonStack"; + this.buttonStack.Size = new System.Drawing.Size(108, 25); + this.buttonStack.TabIndex = 13; + this.buttonStack.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonStack.Values.Text = "Stack"; + this.buttonStack.Click += new System.EventHandler(this.buttonStack_Click); + // + // buttonHeaderBar + // + this.buttonHeaderBar.Location = new System.Drawing.Point(19, 134); + this.buttonHeaderBar.Name = "buttonHeaderBar"; + this.buttonHeaderBar.Size = new System.Drawing.Size(108, 25); + this.buttonHeaderBar.TabIndex = 12; + this.buttonHeaderBar.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonHeaderBar.Values.Text = "HeaderBar"; + this.buttonHeaderBar.Click += new System.EventHandler(this.buttonHeaderBar_Click); + // + // buttonHeaderGroup + // + this.buttonHeaderGroup.Location = new System.Drawing.Point(19, 103); + this.buttonHeaderGroup.Name = "buttonHeaderGroup"; + this.buttonHeaderGroup.Size = new System.Drawing.Size(108, 25); + this.buttonHeaderGroup.TabIndex = 11; + this.buttonHeaderGroup.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonHeaderGroup.Values.Text = "HeaderGroup"; + this.buttonHeaderGroup.Click += new System.EventHandler(this.buttonHeaderGroup_Click); + // + // buttonCheckButtons + // + this.buttonCheckButtons.Location = new System.Drawing.Point(19, 72); + this.buttonCheckButtons.Name = "buttonCheckButtons"; + this.buttonCheckButtons.Size = new System.Drawing.Size(108, 25); + this.buttonCheckButtons.TabIndex = 10; + this.buttonCheckButtons.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonCheckButtons.Values.Text = "CheckButtons"; + this.buttonCheckButtons.Click += new System.EventHandler(this.buttonCheckButtons_Click); + // + // buttonTabs + // + this.buttonTabs.Checked = true; + this.buttonTabs.Location = new System.Drawing.Point(19, 10); + this.buttonTabs.Name = "buttonTabs"; + this.buttonTabs.Size = new System.Drawing.Size(108, 25); + this.buttonTabs.TabIndex = 9; + this.buttonTabs.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonTabs.Values.Text = "Tabs"; + this.buttonTabs.Click += new System.EventHandler(this.buttonTabs_Click); + // + // checkSetDocMode + // + this.checkSetDocMode.CheckButtons.Add(this.buttonTabs); + this.checkSetDocMode.CheckButtons.Add(this.buttonCheckButtons); + this.checkSetDocMode.CheckButtons.Add(this.buttonHeaderGroup); + this.checkSetDocMode.CheckButtons.Add(this.buttonHeaderBar); + this.checkSetDocMode.CheckButtons.Add(this.buttonStack); + this.checkSetDocMode.CheckButtons.Add(this.buttonRibbonTabs); + this.checkSetDocMode.CheckedButton = this.buttonTabs; + this.checkSetDocMode.CheckedButtonChanged += new System.EventHandler(this.checkSetDocMode_CheckedButtonChanged); + // + // kryptonRibbon + // + this.kryptonRibbon.InDesignHelperMode = true; + this.kryptonRibbon.Name = "kryptonRibbon"; + this.kryptonRibbon.QATButtons.AddRange(new System.ComponentModel.Component[] { + this.qatAlbania, + this.qatAruba, + this.qatBenin, + this.qatBrunei, + this.qatCapeVerde, + this.qatEthiopia, + this.qatGuam, + this.qatHaiti, + this.qatLaos, + this.qatMali, + this.qatMozambique, + this.qatPanama, + this.qatQatar}); + this.kryptonRibbon.QATLocation = Krypton.Ribbon.QATLocation.Below; + this.kryptonRibbon.RibbonFileAppButton.AppButtonMenuItems.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItem1}); + this.kryptonRibbon.RibbonFileAppButton.AppButtonShowRecentDocs = false; + this.kryptonRibbon.RibbonTabs.AddRange(new Krypton.Ribbon.KryptonRibbonTab[] { + this.kryptonRibbonTab1, + this.kryptonRibbonTab2}); + this.kryptonRibbon.SelectedTab = this.kryptonRibbonTab1; + this.kryptonRibbon.Size = new System.Drawing.Size(683, 142); + this.kryptonRibbon.TabIndex = 0; + // + // qatAlbania + // + this.qatAlbania.Image = ((System.Drawing.Image)(resources.GetObject("qatAlbania.Image"))); + this.qatAlbania.Text = "Albania"; + // + // qatAruba + // + this.qatAruba.Image = ((System.Drawing.Image)(resources.GetObject("qatAruba.Image"))); + this.qatAruba.Text = "Aruba"; + // + // qatBenin + // + this.qatBenin.Image = ((System.Drawing.Image)(resources.GetObject("qatBenin.Image"))); + this.qatBenin.Text = "Benin"; + // + // qatBrunei + // + this.qatBrunei.Image = ((System.Drawing.Image)(resources.GetObject("qatBrunei.Image"))); + this.qatBrunei.Text = "Brunei"; + // + // qatCapeVerde + // + this.qatCapeVerde.Image = ((System.Drawing.Image)(resources.GetObject("qatCapeVerde.Image"))); + this.qatCapeVerde.Text = "Cape Verde"; + // + // qatEthiopia + // + this.qatEthiopia.Image = ((System.Drawing.Image)(resources.GetObject("qatEthiopia.Image"))); + this.qatEthiopia.Text = "Ethiopia"; + // + // qatGuam + // + this.qatGuam.Image = ((System.Drawing.Image)(resources.GetObject("qatGuam.Image"))); + this.qatGuam.Text = "Guam"; + // + // qatHaiti + // + this.qatHaiti.Image = ((System.Drawing.Image)(resources.GetObject("qatHaiti.Image"))); + this.qatHaiti.Text = "Haiti"; + // + // qatLaos + // + this.qatLaos.Image = ((System.Drawing.Image)(resources.GetObject("qatLaos.Image"))); + this.qatLaos.Text = "Laos"; + // + // qatMali + // + this.qatMali.Image = ((System.Drawing.Image)(resources.GetObject("qatMali.Image"))); + this.qatMali.Text = "Mali"; + // + // qatMozambique + // + this.qatMozambique.Image = ((System.Drawing.Image)(resources.GetObject("qatMozambique.Image"))); + this.qatMozambique.Text = "Mozambique"; + // + // qatPanama + // + this.qatPanama.Image = ((System.Drawing.Image)(resources.GetObject("qatPanama.Image"))); + this.qatPanama.Text = "Panama"; + // + // qatQatar + // + this.qatQatar.Image = ((System.Drawing.Image)(resources.GetObject("qatQatar.Image"))); + this.qatQatar.Text = "Qatar"; + // + // kryptonContextMenuItem1 + // + this.kryptonContextMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("kryptonContextMenuItem1.Image"))); + this.kryptonContextMenuItem1.Text = "E&xit"; + this.kryptonContextMenuItem1.Click += new System.EventHandler(this.exit_Click); + // + // kryptonRibbonTab1 + // + this.kryptonRibbonTab1.Groups.AddRange(new Krypton.Ribbon.KryptonRibbonGroup[] { + this.kryptonRibbonGroup1, + this.kryptonRibbonGroup2}); + this.kryptonRibbonTab1.KeyTip = "H"; + this.kryptonRibbonTab1.Text = "Home"; + // + // kryptonRibbonGroup1 + // + this.kryptonRibbonGroup1.Image = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroup1.Image"))); + this.kryptonRibbonGroup1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple1, + this.kryptonRibbonGroupTriple4}); + this.kryptonRibbonGroup1.KeyTipDialogLauncher = "LB"; + this.kryptonRibbonGroup1.KeyTipGroup = "B"; + this.kryptonRibbonGroup1.TextLine1 = "Bookmarks"; + // + // kryptonRibbonGroupTriple1 + // + this.kryptonRibbonGroupTriple1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton1}); + this.kryptonRibbonGroupTriple1.MinimumSize = Krypton.Ribbon.GroupItemSize.Large; + // + // kryptonRibbonGroupButton1 + // + this.kryptonRibbonGroupButton1.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton1.ImageLarge"))); + this.kryptonRibbonGroupButton1.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton1.ImageSmall"))); + this.kryptonRibbonGroupButton1.KeyTip = "BM"; + this.kryptonRibbonGroupButton1.TextLine1 = "Bookmarks"; + // + // kryptonRibbonGroupTriple4 + // + this.kryptonRibbonGroupTriple4.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton2, + this.kryptonRibbonGroupButton3, + this.kryptonRibbonGroupButton10}); + this.kryptonRibbonGroupTriple4.MaximumSize = Krypton.Ribbon.GroupItemSize.Medium; + // + // kryptonRibbonGroupButton2 + // + this.kryptonRibbonGroupButton2.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton2.ImageLarge"))); + this.kryptonRibbonGroupButton2.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton2.ImageSmall"))); + this.kryptonRibbonGroupButton2.KeyTip = "BA"; + this.kryptonRibbonGroupButton2.TextLine1 = "Add"; + // + // kryptonRibbonGroupButton3 + // + this.kryptonRibbonGroupButton3.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton3.ImageLarge"))); + this.kryptonRibbonGroupButton3.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton3.ImageSmall"))); + this.kryptonRibbonGroupButton3.KeyTip = "BD"; + this.kryptonRibbonGroupButton3.TextLine1 = "Delete"; + // + // kryptonRibbonGroupButton10 + // + this.kryptonRibbonGroupButton10.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton10.ImageLarge"))); + this.kryptonRibbonGroupButton10.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton10.ImageSmall"))); + this.kryptonRibbonGroupButton10.KeyTip = "BP"; + this.kryptonRibbonGroupButton10.TextLine1 = "Preference"; + // + // kryptonRibbonGroup2 + // + this.kryptonRibbonGroup2.Image = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroup2.Image"))); + this.kryptonRibbonGroup2.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple2, + this.kryptonRibbonGroupSeparator1, + this.kryptonRibbonGroupTriple3, + this.kryptonRibbonGroupTriple9}); + this.kryptonRibbonGroup2.KeyTipDialogLauncher = "LD"; + this.kryptonRibbonGroup2.KeyTipGroup = "D"; + this.kryptonRibbonGroup2.TextLine1 = "Data"; + // + // kryptonRibbonGroupTriple2 + // + this.kryptonRibbonGroupTriple2.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton4, + this.kryptonRibbonGroupButton5, + this.kryptonRibbonGroupButton6}); + // + // kryptonRibbonGroupButton4 + // + this.kryptonRibbonGroupButton4.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton4.ImageLarge"))); + this.kryptonRibbonGroupButton4.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton4.ImageSmall"))); + this.kryptonRibbonGroupButton4.KeyTip = "DC"; + this.kryptonRibbonGroupButton4.TextLine1 = "Data"; + this.kryptonRibbonGroupButton4.TextLine2 = "Copy"; + // + // kryptonRibbonGroupButton5 + // + this.kryptonRibbonGroupButton5.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton5.ImageLarge"))); + this.kryptonRibbonGroupButton5.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton5.ImageSmall"))); + this.kryptonRibbonGroupButton5.KeyTip = "DA"; + this.kryptonRibbonGroupButton5.TextLine1 = "Data"; + this.kryptonRibbonGroupButton5.TextLine2 = "Add"; + // + // kryptonRibbonGroupButton6 + // + this.kryptonRibbonGroupButton6.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton6.ImageLarge"))); + this.kryptonRibbonGroupButton6.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton6.ImageSmall"))); + this.kryptonRibbonGroupButton6.KeyTip = "DD"; + this.kryptonRibbonGroupButton6.TextLine1 = "Data"; + this.kryptonRibbonGroupButton6.TextLine2 = "Delete"; + // + // kryptonRibbonGroupTriple3 + // + this.kryptonRibbonGroupTriple3.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton7, + this.kryptonRibbonGroupButton8, + this.kryptonRibbonGroupButton9}); + // + // kryptonRibbonGroupButton7 + // + this.kryptonRibbonGroupButton7.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton7.ImageLarge"))); + this.kryptonRibbonGroupButton7.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton7.ImageSmall"))); + this.kryptonRibbonGroupButton7.KeyTip = "DF"; + this.kryptonRibbonGroupButton7.TextLine1 = "Data"; + this.kryptonRibbonGroupButton7.TextLine2 = "Find"; + // + // kryptonRibbonGroupButton8 + // + this.kryptonRibbonGroupButton8.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton8.ImageLarge"))); + this.kryptonRibbonGroupButton8.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton8.ImageSmall"))); + this.kryptonRibbonGroupButton8.KeyTip = "DE"; + this.kryptonRibbonGroupButton8.TextLine1 = "Data"; + this.kryptonRibbonGroupButton8.TextLine2 = "Edit"; + // + // kryptonRibbonGroupButton9 + // + this.kryptonRibbonGroupButton9.ButtonType = Krypton.Ribbon.GroupButtonType.Check; + this.kryptonRibbonGroupButton9.Checked = true; + this.kryptonRibbonGroupButton9.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton9.ImageLarge"))); + this.kryptonRibbonGroupButton9.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton9.ImageSmall"))); + this.kryptonRibbonGroupButton9.KeyTip = "DL"; + this.kryptonRibbonGroupButton9.TextLine1 = "Data"; + this.kryptonRibbonGroupButton9.TextLine2 = "Lock"; + // + // kryptonRibbonGroupTriple9 + // + this.kryptonRibbonGroupTriple9.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupThemeComboBox1}); + // + // kryptonRibbonGroupThemeComboBox1 + // + this.kryptonRibbonGroupThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Office2007Silver; + this.kryptonRibbonGroupThemeComboBox1.DropDownWidth = 200; + this.kryptonRibbonGroupThemeComboBox1.FormattingEnabled = false; + this.kryptonRibbonGroupThemeComboBox1.ItemHeight = 16; + // + // kryptonRibbonTab2 + // + this.kryptonRibbonTab2.Groups.AddRange(new Krypton.Ribbon.KryptonRibbonGroup[] { + this.kryptonRibbonGroup3, + this.kryptonRibbonGroup5, + this.kryptonRibbonGroup4}); + this.kryptonRibbonTab2.KeyTip = "O"; + this.kryptonRibbonTab2.Text = "Objects"; + // + // kryptonRibbonGroup3 + // + this.kryptonRibbonGroup3.Image = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroup3.Image"))); + this.kryptonRibbonGroup3.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple5}); + this.kryptonRibbonGroup3.KeyTipDialogLauncher = "LD"; + this.kryptonRibbonGroup3.KeyTipGroup = "D"; + this.kryptonRibbonGroup3.TextLine1 = "Disks"; + // + // kryptonRibbonGroupTriple5 + // + this.kryptonRibbonGroupTriple5.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton11, + this.kryptonRibbonGroupButton12, + this.kryptonRibbonGroupButton13}); + // + // kryptonRibbonGroupButton11 + // + this.kryptonRibbonGroupButton11.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton11.ImageLarge"))); + this.kryptonRibbonGroupButton11.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton11.ImageSmall"))); + this.kryptonRibbonGroupButton11.KeyTip = "DG"; + this.kryptonRibbonGroupButton11.TextLine1 = "Green"; + // + // kryptonRibbonGroupButton12 + // + this.kryptonRibbonGroupButton12.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton12.ImageLarge"))); + this.kryptonRibbonGroupButton12.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton12.ImageSmall"))); + this.kryptonRibbonGroupButton12.KeyTip = "DR"; + this.kryptonRibbonGroupButton12.TextLine1 = "Red"; + // + // kryptonRibbonGroupButton13 + // + this.kryptonRibbonGroupButton13.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton13.ImageLarge"))); + this.kryptonRibbonGroupButton13.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton13.ImageSmall"))); + this.kryptonRibbonGroupButton13.KeyTip = "DY"; + this.kryptonRibbonGroupButton13.TextLine1 = "Yellow"; + // + // kryptonRibbonGroup5 + // + this.kryptonRibbonGroup5.Image = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroup5.Image"))); + this.kryptonRibbonGroup5.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple8, + this.kryptonRibbonGroupLines1}); + this.kryptonRibbonGroup5.KeyTipDialogLauncher = "LB"; + this.kryptonRibbonGroup5.KeyTipGroup = "B"; + this.kryptonRibbonGroup5.TextLine1 = "Blocks"; + // + // kryptonRibbonGroupTriple8 + // + this.kryptonRibbonGroupTriple8.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton18}); + this.kryptonRibbonGroupTriple8.MinimumSize = Krypton.Ribbon.GroupItemSize.Large; + // + // kryptonRibbonGroupButton18 + // + this.kryptonRibbonGroupButton18.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton18.ImageLarge"))); + this.kryptonRibbonGroupButton18.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton18.ImageSmall"))); + this.kryptonRibbonGroupButton18.KeyTip = "S"; + this.kryptonRibbonGroupButton18.TextLine1 = "Blocks"; + // + // kryptonRibbonGroupLines1 + // + this.kryptonRibbonGroupLines1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton19, + this.kryptonRibbonGroupButton20}); + this.kryptonRibbonGroupLines1.MinimumSize = Krypton.Ribbon.GroupItemSize.Large; + // + // kryptonRibbonGroupButton19 + // + this.kryptonRibbonGroupButton19.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton19.ImageLarge"))); + this.kryptonRibbonGroupButton19.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton19.ImageSmall"))); + this.kryptonRibbonGroupButton19.TextLine1 = "Blue"; + this.kryptonRibbonGroupButton19.TextLine2 = "Block"; + // + // kryptonRibbonGroupButton20 + // + this.kryptonRibbonGroupButton20.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton20.ImageLarge"))); + this.kryptonRibbonGroupButton20.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton20.ImageSmall"))); + this.kryptonRibbonGroupButton20.KeyTip = "Y"; + this.kryptonRibbonGroupButton20.TextLine1 = "Yellow"; + this.kryptonRibbonGroupButton20.TextLine2 = "Block"; + // + // kryptonRibbonGroup4 + // + this.kryptonRibbonGroup4.Image = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroup4.Image"))); + this.kryptonRibbonGroup4.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple6, + this.kryptonRibbonGroupTriple7}); + this.kryptonRibbonGroup4.KeyTipDialogLauncher = "LCP"; + this.kryptonRibbonGroup4.KeyTipGroup = "CP"; + this.kryptonRibbonGroup4.TextLine1 = "Cups"; + // + // kryptonRibbonGroupTriple6 + // + this.kryptonRibbonGroupTriple6.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton14}); + this.kryptonRibbonGroupTriple6.MinimumSize = Krypton.Ribbon.GroupItemSize.Large; + // + // kryptonRibbonGroupButton14 + // + this.kryptonRibbonGroupButton14.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton14.ImageLarge"))); + this.kryptonRibbonGroupButton14.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton14.ImageSmall"))); + this.kryptonRibbonGroupButton14.KeyTip = "CR"; + this.kryptonRibbonGroupButton14.TextLine1 = "Red"; + // + // kryptonRibbonGroupTriple7 + // + this.kryptonRibbonGroupTriple7.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton15, + this.kryptonRibbonGroupButton16, + this.kryptonRibbonGroupButton17}); + // + // kryptonRibbonGroupButton15 + // + this.kryptonRibbonGroupButton15.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton15.ImageLarge"))); + this.kryptonRibbonGroupButton15.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton15.ImageSmall"))); + this.kryptonRibbonGroupButton15.KeyTip = "CG"; + this.kryptonRibbonGroupButton15.TextLine1 = "Green"; + // + // kryptonRibbonGroupButton16 + // + this.kryptonRibbonGroupButton16.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton16.ImageLarge"))); + this.kryptonRibbonGroupButton16.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton16.ImageSmall"))); + this.kryptonRibbonGroupButton16.KeyTip = "CB"; + this.kryptonRibbonGroupButton16.TextLine1 = "Blue"; + // + // kryptonRibbonGroupButton17 + // + this.kryptonRibbonGroupButton17.ImageLarge = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton17.ImageLarge"))); + this.kryptonRibbonGroupButton17.ImageSmall = ((System.Drawing.Image)(resources.GetObject("kryptonRibbonGroupButton17.ImageSmall"))); + this.kryptonRibbonGroupButton17.KeyTip = "CY"; + this.kryptonRibbonGroupButton17.TextLine1 = "Yellow"; + // + // kryptonPage8 + // + this.kryptonPage8.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage8.Controls.Add(this.kryptonLabel2); + this.kryptonPage8.Controls.Add(this.kryptonLinkLabel2); + this.kryptonPage8.Controls.Add(this.kryptonRadioButton4); + this.kryptonPage8.Controls.Add(this.kryptonRadioButton5); + this.kryptonPage8.Controls.Add(this.kryptonRadioButton6); + this.kryptonPage8.Controls.Add(this.kryptonCheckBox4); + this.kryptonPage8.Controls.Add(this.kryptonCheckBox5); + this.kryptonPage8.Controls.Add(this.kryptonCheckBox6); + this.kryptonPage8.Flags = 65534; + this.kryptonPage8.LastVisibleSet = true; + this.kryptonPage8.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage8.Name = "kryptonPage8"; + this.kryptonPage8.Size = new System.Drawing.Size(392, 147); + this.kryptonPage8.Text = "kryptonPage8"; + this.kryptonPage8.ToolTipTitle = "Page ToolTip"; + this.kryptonPage8.UniqueName = "3A56A17B0EAE42533A56A17B0EAE4253"; + // + // kryptonLabel2 + // + this.kryptonLabel2.Location = new System.Drawing.Point(166, 44); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(80, 20); + this.kryptonLabel2.TabIndex = 15; + this.kryptonLabel2.Values.Text = "Simple Label"; + // + // kryptonLinkLabel2 + // + this.kryptonLinkLabel2.Location = new System.Drawing.Point(166, 19); + this.kryptonLinkLabel2.Name = "kryptonLinkLabel2"; + this.kryptonLinkLabel2.Size = new System.Drawing.Size(65, 20); + this.kryptonLinkLabel2.TabIndex = 14; + this.kryptonLinkLabel2.Values.Text = "Link Label"; + // + // kryptonRadioButton4 + // + this.kryptonRadioButton4.Location = new System.Drawing.Point(13, 165); + this.kryptonRadioButton4.Name = "kryptonRadioButton4"; + this.kryptonRadioButton4.Size = new System.Drawing.Size(142, 20); + this.kryptonRadioButton4.TabIndex = 13; + this.kryptonRadioButton4.Values.Text = "RadioButton Option 3"; + // + // kryptonRadioButton5 + // + this.kryptonRadioButton5.Checked = true; + this.kryptonRadioButton5.Location = new System.Drawing.Point(13, 139); + this.kryptonRadioButton5.Name = "kryptonRadioButton5"; + this.kryptonRadioButton5.Size = new System.Drawing.Size(142, 20); + this.kryptonRadioButton5.TabIndex = 12; + this.kryptonRadioButton5.Values.Text = "RadioButton Option 2"; + // + // kryptonRadioButton6 + // + this.kryptonRadioButton6.Location = new System.Drawing.Point(13, 113); + this.kryptonRadioButton6.Name = "kryptonRadioButton6"; + this.kryptonRadioButton6.Size = new System.Drawing.Size(142, 20); + this.kryptonRadioButton6.TabIndex = 11; + this.kryptonRadioButton6.Values.Text = "RadioButton Option 1"; + // + // kryptonCheckBox4 + // + this.kryptonCheckBox4.Checked = true; + this.kryptonCheckBox4.CheckState = System.Windows.Forms.CheckState.Indeterminate; + this.kryptonCheckBox4.Location = new System.Drawing.Point(13, 71); + this.kryptonCheckBox4.Name = "kryptonCheckBox4"; + this.kryptonCheckBox4.Size = new System.Drawing.Size(128, 20); + this.kryptonCheckBox4.TabIndex = 10; + this.kryptonCheckBox4.Values.Text = "CheckBox Option 3"; + // + // kryptonCheckBox5 + // + this.kryptonCheckBox5.Checked = true; + this.kryptonCheckBox5.CheckState = System.Windows.Forms.CheckState.Checked; + this.kryptonCheckBox5.Location = new System.Drawing.Point(13, 45); + this.kryptonCheckBox5.Name = "kryptonCheckBox5"; + this.kryptonCheckBox5.Size = new System.Drawing.Size(128, 20); + this.kryptonCheckBox5.TabIndex = 9; + this.kryptonCheckBox5.Values.Text = "CheckBox Option 2"; + // + // kryptonCheckBox6 + // + this.kryptonCheckBox6.Location = new System.Drawing.Point(13, 19); + this.kryptonCheckBox6.Name = "kryptonCheckBox6"; + this.kryptonCheckBox6.Size = new System.Drawing.Size(128, 20); + this.kryptonCheckBox6.TabIndex = 8; + this.kryptonCheckBox6.Values.Text = "CheckBox Option 1"; + // + // kryptonPage9 + // + this.kryptonPage9.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage9.Flags = 65534; + this.kryptonPage9.LastVisibleSet = true; + this.kryptonPage9.MinimumSize = new System.Drawing.Size(50, 50); + this.kryptonPage9.Name = "kryptonPage9"; + this.kryptonPage9.Size = new System.Drawing.Size(100, 100); + this.kryptonPage9.Text = "kryptonPage9"; + this.kryptonPage9.ToolTipTitle = "Page ToolTip"; + this.kryptonPage9.UniqueName = "D7E39F0CF3924149D7E39F0CF3924149"; + // + // RibbonNavigatorWorkspaceTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(683, 598); + this.CloseBox = false; + this.Controls.Add(this.panelFill); + this.Controls.Add(this.kryptonRibbon); + this.MinimumSize = new System.Drawing.Size(399, 523); + this.Name = "RibbonNavigatorWorkspaceTest"; + this.StateCommon.Border.DrawBorders = ((Krypton.Toolkit.PaletteDrawBorders)((((Krypton.Toolkit.PaletteDrawBorders.Top | Krypton.Toolkit.PaletteDrawBorders.Bottom) + | Krypton.Toolkit.PaletteDrawBorders.Left) + | Krypton.Toolkit.PaletteDrawBorders.Right))); + this.StateCommon.Border.Width = 4; + this.Text = "Ribbon + Navigator + Workspace"; + this.UseThemeFormChromeBorderWidth = false; + ((System.ComponentModel.ISupportInitialize)(this.panelFill)).EndInit(); + this.panelFill.ResumeLayout(false); + this.panelFill.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspace)).EndInit(); + this.kryptonWorkspace.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).EndInit(); + this.kryptonPage1.ResumeLayout(false); + this.kryptonPage1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell1)).EndInit(); + this.kryptonWorkspaceCell1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage7)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell3)).EndInit(); + this.kryptonWorkspaceCell3.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage4)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage5)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage10)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell4)).EndInit(); + this.kryptonWorkspaceCell4.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage6)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage11)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.navigatorOutlook)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pageGlobalPalettes)).EndInit(); + this.pageGlobalPalettes.ResumeLayout(false); + this.pageGlobalPalettes.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonDisplayMode)).EndInit(); + this.kryptonDisplayMode.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.checkSetDocMode)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage8)).EndInit(); + this.kryptonPage8.ResumeLayout(false); + this.kryptonPage8.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage9)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Krypton.Toolkit.KryptonManager kryptonManager; + private Krypton.Ribbon.KryptonRibbon kryptonRibbon; + private Krypton.Toolkit.KryptonPanel panelFill; + private Krypton.Navigator.KryptonNavigator navigatorOutlook; + private Krypton.Navigator.KryptonPage pageGlobalPalettes; + private Krypton.Navigator.KryptonPage kryptonDisplayMode; + private Krypton.Ribbon.KryptonRibbonTab kryptonRibbonTab1; + private Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup1; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple1; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton1; + private Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup2; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple2; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton4; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton5; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton6; + private Krypton.Ribbon.KryptonRibbonGroupSeparator kryptonRibbonGroupSeparator1; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple3; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton7; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton8; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton9; + private Krypton.Ribbon.KryptonRibbonTab kryptonRibbonTab2; + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple4; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton2; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton3; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton10; + private Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup3; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple5; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton11; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton12; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton13; + private Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup4; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple6; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton14; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple7; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton15; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton16; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton17; + private Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup5; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple8; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton18; + private Krypton.Ribbon.KryptonRibbonGroupLines kryptonRibbonGroupLines1; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton19; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton20; + private Krypton.Toolkit.KryptonCheckButton buttonStack; + private Krypton.Toolkit.KryptonCheckButton buttonHeaderBar; + private Krypton.Toolkit.KryptonCheckButton buttonHeaderGroup; + private Krypton.Toolkit.KryptonCheckButton buttonCheckButtons; + private Krypton.Toolkit.KryptonCheckButton buttonTabs; + private Krypton.Toolkit.KryptonCheckSet checkSetDocMode; + private Krypton.Ribbon.KryptonRibbonQATButton qatAlbania; + private Krypton.Ribbon.KryptonRibbonQATButton qatAruba; + private Krypton.Ribbon.KryptonRibbonQATButton qatBenin; + private Krypton.Ribbon.KryptonRibbonQATButton qatBrunei; + private Krypton.Ribbon.KryptonRibbonQATButton qatCapeVerde; + private Krypton.Ribbon.KryptonRibbonQATButton qatEthiopia; + private Krypton.Ribbon.KryptonRibbonQATButton qatGuam; + private Krypton.Ribbon.KryptonRibbonQATButton qatHaiti; + private Krypton.Ribbon.KryptonRibbonQATButton qatLaos; + private Krypton.Ribbon.KryptonRibbonQATButton qatMali; + private Krypton.Ribbon.KryptonRibbonQATButton qatMozambique; + private Krypton.Ribbon.KryptonRibbonQATButton qatPanama; + private Krypton.Ribbon.KryptonRibbonQATButton qatQatar; + private Krypton.Toolkit.KryptonCheckButton buttonRibbonTabs; + private Krypton.Navigator.ButtonSpecNavigator buttonSpecExpandCollapse; + private Krypton.Toolkit.KryptonRadioButton radioOffice2007Blue; + private Krypton.Toolkit.KryptonRadioButton radioSystem; + private Krypton.Toolkit.KryptonRadioButton radioOffice2003; + private Krypton.Toolkit.KryptonRadioButton radioOffice2007Black; + private Krypton.Toolkit.KryptonRadioButton radioOffice2007Silver; + private Krypton.Toolkit.KryptonContextMenuItem kryptonContextMenuItem1; + private Krypton.Toolkit.KryptonRadioButton radioSparkleBlue; + private Krypton.Toolkit.KryptonRadioButton radioSparklePurple; + private Krypton.Toolkit.KryptonRadioButton radioSparkleOrange; + private Krypton.Workspace.KryptonWorkspace kryptonWorkspace; + private Krypton.Navigator.KryptonPage kryptonPage8; + private Krypton.Toolkit.KryptonLabel kryptonLabel2; + private Krypton.Toolkit.KryptonLinkLabel kryptonLinkLabel2; + private Krypton.Toolkit.KryptonRadioButton kryptonRadioButton4; + private Krypton.Toolkit.KryptonRadioButton kryptonRadioButton5; + private Krypton.Toolkit.KryptonRadioButton kryptonRadioButton6; + private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox4; + private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox5; + private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox6; + private Krypton.Navigator.KryptonPage kryptonPage9; + private Krypton.Workspace.KryptonWorkspaceCell kryptonWorkspaceCell1; + private Krypton.Navigator.KryptonPage kryptonPage1; + private Krypton.Navigator.KryptonPage kryptonPage3; + private Krypton.Workspace.KryptonWorkspaceSequence kryptonWorkspaceSequence1; + private Krypton.Workspace.KryptonWorkspaceCell kryptonWorkspaceCell3; + private Krypton.Navigator.KryptonPage kryptonPage4; + private Krypton.Navigator.KryptonPage kryptonPage5; + private Krypton.Workspace.KryptonWorkspaceCell kryptonWorkspaceCell4; + private Krypton.Navigator.KryptonPage kryptonPage6; + private Krypton.Navigator.KryptonPage kryptonPage2; + private Krypton.Navigator.KryptonPage kryptonPage7; + private Krypton.Navigator.KryptonPage kryptonPage10; + private Krypton.Navigator.KryptonPage kryptonPage11; + private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox2; + private Krypton.Toolkit.KryptonCheckBox kryptonCheckBox1; + private Krypton.Toolkit.KryptonRadioButton kryptonRadioButton3; + private Krypton.Toolkit.KryptonRadioButton kryptonRadioButton2; + private Krypton.Toolkit.KryptonRadioButton kryptonRadioButton1; + private Krypton.Toolkit.KryptonLabel kryptonLabel1; + private Krypton.Toolkit.KryptonLinkLabel kryptonLinkLabel1; + private Krypton.Toolkit.KryptonRadioButton radioOffice2010Black; + private Krypton.Toolkit.KryptonRadioButton radioOffice2010Blue; + private Krypton.Toolkit.KryptonRadioButton radioOffice2010Silver; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple9; + private Krypton.Ribbon.KryptonRibbonGroupThemeComboBox kryptonRibbonGroupThemeComboBox1; + private KryptonThemeComboBox kryptonThemeComboBox1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.cs b/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.cs new file mode 100644 index 000000000..f973e29e2 --- /dev/null +++ b/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.cs @@ -0,0 +1,248 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Krypton.Navigator; +using Krypton.Workspace; + +namespace TestForm +{ + public partial class RibbonNavigatorWorkspaceTest : KryptonForm + { + KryptonManager _manager = new KryptonManager(); + + public RibbonNavigatorWorkspaceTest() + { + InitializeComponent(); + } + + private void buttonSpecExpandCollapse_Click(object sender, EventArgs e) + { + // Are we currently showing fully expanded? + if (navigatorOutlook.NavigatorMode == NavigatorMode.OutlookFull) + { + // Switch to mini mode and reverse direction of arrow + navigatorOutlook.NavigatorMode = NavigatorMode.OutlookMini; + buttonSpecExpandCollapse.TypeRestricted = PaletteNavButtonSpecStyle.ArrowRight; + } + else + { + // Switch to full mode and reverse direction of arrow + navigatorOutlook.NavigatorMode = NavigatorMode.OutlookFull; + buttonSpecExpandCollapse.TypeRestricted = PaletteNavButtonSpecStyle.ArrowLeft; + } + } + + private void radioOffice2010Blue_CheckedChanged(object sender, EventArgs e) + { + if (radioOffice2010Blue.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.Office2010Blue; + } + } + + private void radioOffice2010Silver_CheckedChanged(object sender, EventArgs e) + { + if (radioOffice2010Silver.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.Office2010Silver; + } + } + + private void radioOffice2010Black_CheckedChanged(object sender, EventArgs e) + { + if (radioOffice2010Black.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.Office2010Black; + } + } + + private void radioOffice2007Blue_CheckedChanged(object sender, EventArgs e) + { + if (radioOffice2007Blue.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.Office2007Blue; + } + } + + private void radioOffice2007Silver_CheckedChanged(object sender, EventArgs e) + { + if (radioOffice2007Silver.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.Office2007Silver; + } + } + + private void radioOffice2007Black_CheckedChanged(object sender, EventArgs e) + { + if (radioOffice2007Black.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.Office2007Black; + } + } + + private void radioOffice2003_CheckedChanged(object sender, EventArgs e) + { + if (radioOffice2003.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.ProfessionalOffice2003; + } + } + + private void radioSparkleBlue_CheckedChanged(object sender, EventArgs e) + { + if (radioSparkleBlue.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.SparkleBlue; + } + } + + private void radioSparkleOrange_CheckedChanged(object sender, EventArgs e) + { + if (radioSparkleOrange.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.SparkleOrange; + } + } + + private void radioSparklePurple_CheckedChanged(object sender, EventArgs e) + { + if (radioSparklePurple.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.SparklePurple; + } + } + + private void radioSystem_CheckedChanged(object sender, EventArgs e) + { + if (radioSystem.Checked) + { + navigatorOutlook.DismissPopups(); + _manager.GlobalPaletteMode = PaletteMode.ProfessionalSystem; + } + } + + private void exit_Click(object sender, EventArgs e) + { + Close(); + } + + private void buttonTabs_Click(object sender, EventArgs e) + { + + } + + private void buttonRibbonTabs_Click(object sender, EventArgs e) + { + + } + + private void buttonCheckButtons_Click(object sender, EventArgs e) + { + + } + + private void buttonHeaderGroup_Click(object sender, EventArgs e) + { + + } + + private void buttonHeaderBar_Click(object sender, EventArgs e) + { + + } + + private void buttonStack_Click(object sender, EventArgs e) + { + + } + + private void kryptonWorkspace_WorkspaceCellAdding(object sender, WorkspaceCellEventArgs e) + { + // Remove the close and context menu buttons from the navigator cell + e.Cell.Button.CloseButtonDisplay = ButtonDisplay.Hide; + e.Cell.Button.ContextButtonDisplay = ButtonDisplay.Hide; + e.Cell.Button.CloseButtonAction = CloseButtonAction.None; + + // Update with currently requested mode + UpdateCell(e.Cell); + } + + private void UpdateCell(KryptonWorkspaceCell eCell) + { + NavigatorMode newMode = NavigatorMode.BarTabGroup; + + if (checkSetDocMode.CheckedButton == buttonTabs) + { + newMode = NavigatorMode.BarTabGroup; + } + else if (checkSetDocMode.CheckedButton == buttonRibbonTabs) + { + newMode = NavigatorMode.BarRibbonTabGroup; + } + else if (checkSetDocMode.CheckedButton == buttonCheckButtons) + { + newMode = NavigatorMode.BarCheckButtonGroupOutside; + } + else if (checkSetDocMode.CheckedButton == buttonHeaderGroup) + { + newMode = NavigatorMode.HeaderGroup; + } + else if (checkSetDocMode.CheckedButton == buttonHeaderBar) + { + newMode = NavigatorMode.HeaderBarCheckButtonHeaderGroup; + } + else if (checkSetDocMode.CheckedButton == buttonStack) + { + newMode = NavigatorMode.StackCheckButtonGroup; + } + + eCell.NavigatorMode = newMode; + + // Set mode specific properties + switch (newMode) + { + case NavigatorMode.BarRibbonTabGroup: + case NavigatorMode.BarRibbonTabOnly: + eCell.PageBackStyle = PaletteBackStyle.ControlRibbon; + eCell.Group.GroupBackStyle = PaletteBackStyle.ControlRibbon; + eCell.Group.GroupBorderStyle = PaletteBorderStyle.ControlRibbon; + break; + default: + eCell.PageBackStyle = PaletteBackStyle.ControlClient; + eCell.Group.GroupBackStyle = PaletteBackStyle.ControlClient; + eCell.Group.GroupBorderStyle = PaletteBorderStyle.ControlClient; + break; + } + } + + private void checkSetDocMode_CheckedButtonChanged(object sender, EventArgs e) + { + // Kill any showing outlook popup page + navigatorOutlook.DismissPopups(); + + // Update each workspace cell + KryptonWorkspaceCell? cell = kryptonWorkspace.FirstCell(); + while (cell != null) + { + UpdateCell(cell); + cell = kryptonWorkspace.NextCell(cell); + } + } + } +} diff --git a/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.resx b/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.resx new file mode 100644 index 000000000..fcc53765d --- /dev/null +++ b/Source/Krypton Components/TestForm/RibbonNavigatorWorkspaceTest.resx @@ -0,0 +1,1814 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACwElE + QVQ4T7VQa0iTYRR+p+Y955WQEs1cXnYRoc28VbI2cyMNYeQ0ZlLb+Jzu+3Taj34VFEKgUAoKQf3oprE2 + K8NKJxEU3aAgqPwTpWEIGkVpZuHT2bdpRfSz5+HhPd/3nuec8x72PyBxtjgPODnnY6fNuSTYhSWBE57w + LbyV7kICKf+AxWIJdwmuq+aDZtRdroP5hRnal1oUegvRwDXAoDMM5+TkRATT/0ab0HbC5DChc74TXcQm + YgVRRowkai1aJMYldgfT/wTP84nN1uav3FNONNuJeqLfHE5kxPQv6YhjcYuUnhJw/YZWvrVqj60KR3EY + +2CCFqXIQiZCECaaVyjXKUHpNQFXEO3trnyBd7yp3F8Dg+cMtrpvInOwD7mjpVBd34C+i9UYd2sxMLQJ + NY2VMDc0vtXp9QWiuaOjPUUQuPc6bQ8qqoepO7CexEi2/nPwnj9OEUfaLP4dN1XBbTAiQy6fiYmJWcc4 + ztZlNB6CIAB7d88je+yaaFa43cDCAkWAx6MVzc8mFHhXSHFeHniNxv+Uk6y1tem1Xu9DfT2wrQzYUnAH + 8bMT6PdeEc1+jNy6hOn5ZIzu1AHFpUB8PKaoCBWYpO3bvpeUvEJ5OSCTAVGRQFLsc3S7jsB3dwy++z70 + HDuLRzsqgF1GICODhmFYTkuDRCpdZi6XY0aheIDsbCA2VrwT5dZ5ATm1p/i2bASorgSUSiAiQkz45J8g + NHSOORz2C+XlvYiO/mX2y5g/AKwNFBjS24GyYiA5eTWhr6iIDjbIBIFXWK21i6mpD1fNoqJ+4LTMg3sl + N/ChtADYGBjdrymVCmuSkr5RgXwSY3q9rlajyV1Uq7tpwR9Bz4NSNQOlmoN9uxrTRgOQlYXPNLa/c9Bc + L5pXkJCQoKRjIDSUzUqlIcsSCZui717SKdJkiH9hYWFzFA+SAp0ZYz8BUUypRywzPsgAAAAASUVORK5C + YII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACHklE + QVQ4T32T32/SUBTHl/hnqn+E2cMeNHE+mKgx88UHkyVM94ONQZkb0vFjTLcyoFIGDEqbQmaJAhu6hCGs + tEC/npYaHij7Jt+cm5tzPrnnnnsX/suzvqNu+xl4fQysuLPLwBdgwAT3sLz8QltcerropLqLjSUwT+12 + G5tB1ny58v61kz6rcCTupM/KAnQHYwSjJ3j+6t3q40cPHzhlU7H3AFqtJv7c3KD5uwOGPcaTpWerTtlU + bGw+QFVV5ItFJL6eILgfwpu3K7pTNhUbnQI6nQ4ymQw4jkMqlUKS4tVVG7phYmQCbDQBp2yqQ9qcLxPG + aAzNGGFIgPBhbBYQiR/ZqaIoolQqoVwuQ5ZlVCoV8Px35PIF1H7UoY+BUMQNEJsArCJFUSBJkg0SxQoq + kgzhPI9fTWpjBByw8VlA7GgC4HnedjqdhpAVkKH1eeEC1UsVt30d2hDYD0fnAwxdx3A8woBiXxugd6ej + pxnoUry9G9qAz19cABHnJQpCDqfJJM7SGTKPFJ9F4hsHLpVF7PgUfQPYC7vdAY2RLhiyUoVcreFClFCW + FBTKEnLFCgRySb5ETzfBhCKzgDDdrDUi7ozHz+Y1uY164xq1egM1tYGq2oRSb+GvZiJw4Aagd2CdgEZt + j2pAvWq0tnru0wPq0dG7A9PeC4RcWlij7+z1BbG5HcCGbT/WvX58In/c2sUa2bNB3vLjg8erTqoWFv4B + 7zSQEKM6/vUAAAAASUVORK5CYII= + + + + 159, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACkElE + QVQ4T8WT2U4TcRjFJxGhUFokqVRWO0UlGIiIglSUsthSLJShFLqwtSGICISgMUajGBVXMg4FCQmiF175 + FigKUWKxM12BCNEQfYzjN5X4CvyTk7n6ne+ckwyz/+++zbQrOK3gHY3gORN4Wy14qxG8pRq8yQC+vhKC + 8QxeXijDS0MphKqT8FcUYab8OITaij/MrLsZsYlhiLcHIN70IjTWDWnYBWnQAam/FeE+K0KeRkQ6GxDv + t2Ojz4bt0R78utYFf54KzLTDkoAD470IjHoQGOpEcMAOydeCcHcTwi4TIo46xH0cor3NiHqasDXoQtxY + gumsZDD+NjPEG97/8HeC3/d3YravAw/cDky1WzFpa8TC5RpsEhxzmhGpO4VIsQZ+rQKM0FoHkWLLcEC+ + 7G3B2x47Btwu3Gq34aHXA2+XG3NODjtX3Yi1XkSwKBMRNh1z2lRK0FwDccRJcBvWCZa6LXg37MP1Djs4 + joPZYkGX4SzGSwsRInBdlwaR4Jh+z0BoqoZ4pR0Bnw3hsR5Eh5x4UX8O906fQAObj7IjGozmqDGUnUFX + lQgSHCJt6FWYTxiYDbQ2h9CIBytVLJbzk/CU1p0oOARjjgYVZHAnV41HuSpIunSECY6wKmzpM8ggjSpc + qkSUBvxwTImlo0n4pEvBsk6Br2wqFgvSMZmnpshKiv7vsgzHWDV+6NVY0CrBLHZYsFqejSVdEj4S/Jng + VdIaGayzcl9lQhLB4T14g/STEryWDfznS7BKl1fYFHwhaI1V4Js+FUE9wTRUSK9MDBanzpsEbdPlHfr+ + LszEG9ngbnHu7uPDB/Ak6yCey9ImY0qbAj4hBQTSDI0l6xV1lnvPEyjHf6ZJ2937I/btMcxfVcaRC60E + cmIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACl0lE + QVQ4T8WTaU9TURCG7z/0i19MjIkiINCyCAFFoIC0hk0hUFoo9/ZSKNSWHYFuQkuBsguyaKG0LKUFMRLR + mGhiHg/If2CSySTn5HnnnTk50u1HWoE+kVvRRnZZKzllRpGilrei0RnRiHONzoS20oy2qp3c6g7y9Bby + 9Z08rVXJKH2dkPLFhc13QJ8vguKNo3j2RRXpi2H1H6K+P6Rr+ghb8ITumRN6Z1P0zp/h3rxEo1eRtBVG + VF+cxTo9HqcPizuKZXKXTvcenUJMFkKKP446JYQCx9ciPfOnvPt4wRPhSMopb8OtDrJTVcxai1G4EQLX + cBTZ+x+23sC2mQTDK2eMrZ0jBxNoDTKSptwkgBg+xYnFExPdozfw1RgCFiP0h5MMLaYYWj5jaOkU85Wr + UJKixl7hQNeGLICOiT0BixQj9M0c4JpLMBC+yhR9swnMwo1RiJvEvpRQCsfqJSVNDqTsinbR8YB29z52 + YbMneEzTyB61AxEMrk/UOLeoH92nxZOgPfAF69w37IvfcW385nnLIFJdQwNTwSC+KS/9g3a63jbjGDEz + 4LEwFrAyHrLhDXfjX7ET2OgjuO1kbtfF0tEwdZ1VSPWVWtbnZSaHCgm6C1iYLibkLyXg0bEwV8byUgUr + a5VsRXSsbhvY3K9hI15P/EKPqecxklyfx+J4DsvDD1ibfMgH/yPWg+lshdPZXs1kZz2Tz9tZ7O5lEz3U + EEtqiZ/ncvKzAMV5B6nwlUqpfZfqwSMMo0kaJs5o8n3FOH1BR+gHSvgX3ct/cKz/pX8TRiMwEYXpEzCo + XqS7mWXJe0VG7j8z8vCFiTSx1IxKmayXinhnlfxaG4UNPRS/6aW02UF5mwudeYAaeYSSRiVx8yNuLSTp + H7/iQ1yoNlvKAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACn0lE + QVQ4T8WT60vTYRTHf2wI1TadltNZutUWXVxoQ/G6OU1sVGh5K5WVRGXmNJuhNsWJaVb0QogySe2CrrQi + cZciJZkup01lhGkW1ZvRC0HUbWkQ9O3ZjyjoH/DAh/Pq8z3nPPBQa1+ZFUqnqj4Debp0HNMdoMnSKaFv + jKfpaoxBV1MUuq9IoW+OgP6qBI+u70bPjR1orQ1zUqqGDDS91qBhQI36gRLUDRbh0uAZrI5k0Hish7Ay + qsR3WypWxhVYtcvwYyIOv6Zj0NvsA+oomVj3qhha82lUm0+iylwIjfk4XEP7aRYt+7A0nIRlayJco7Fw + j0XBY5fi56QYDy8zQWXr0qB9eQqVxkJcNKlQYSpAqSkPHouCZskiw/JIHFxvouG27YXnbSRW7DtJqA85 + iwHqSG0Kql6cgMZQgHJDHs4bc1FszIHbEk+zNByDZSK7bFIyPRwuayDmB5lkIwaetZCA9BoFLpjyUdaf + C3V/NkqN2SgyZmJ1PJLGPbYVi6M8LFjXY36YiQUbEx4HA5hjoO8OCThYm0CkHKj7snDOcBj5T2RQ9kgw + tHEdzQCPBQufBVswCxN8X0zxuXAE+2GW749bXBYJqIlDiSETql4FktpDkdDBR0JXKCbCiEAYF7FgF7Ex + JeLAIfLFO8K0yA+fxP5o47NBKbXRUD1NRmxbEGQdIUi6twVyvQBTAhbNP5nzV54VcfFZzCUBHFBp2igk + dwqQ2B4COZEVD0IhfyyEQ8CmmfxPniHyHOGrOADt3gB59S7I7ocQcTNSusOQqhci5fk2zAg5NO/FpIt9 + 8UHsh49k7S9kslf+tj0And4A6VmhM1wdAEnZJuwpD0SEhgdJZRBuBm6gaeGTTh7Ry21ysxfv6ncJ13hs + 558fsWZFUb8BnzW3CaWYqQkAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACwUlE + QVQ4T8WT/0/McRzHP3vrB/wQs8UPVuZLiGHYsLXUDxg2ZriwfkBLahpatSbLfMlVvlTubvNlGLqvJTck + NLJmchuirru2LmM5Xde56051dZGHN/M/eG2PvV6/PB97ba+9lP9fulP73WZNDsaKbIxVBzBWZmCq3Ifp + 0l5MVWmYNHvkvBuzVoVFswOLdjsW3VbuXt7CVXWKW6nRZPLDoSPcVknYfkFyjlFHKSMdJUQcpxntLGbM + WUSks4Cxrjx+dB1m3JUDX45Qey4a5c7tmwR6nXxzNRJw3CLUeprQ2zwGW/Nkz2Xw/VGG23IYas9m2J5J + 2JHOiHO/lOyi+swElGq9nkAgiMfro68/IAnS7+nB77bRb9PisebLYLrccBfD7SrCHSq5VSrBlhiMpQJF + rT5Lh92O1+uVogA+vx+fFLrft9J9tYpP17T0tXXgD7gI9jYQcpXjfbWEwZeCexVSkLpzJ8ePFVKQl0up + lFl1FdgaH+OsM+B5WEuf5EuNgR5bCy6ziZ6vPry+MINDI9QaL6Kkp22lMD+fQzm5kiNkHsxGtzmJi+sT + UM2fQ+66FB6mJfJiQyJdri4ikchffo7/wmq9j2IpS2LMlsrHhu1YzyeQpYrhfFw0V5KmUb9yCk8Sp3In + OQbDrBnEzp3HmtWryMo6yI3r11Gr1SiGklUMNG2i+/ZE+iyC748EoXqBc+MkurdNpjMlmg9rp5G8ZhGz + 41cwf8FyFi5cxqLFS4mNjUPRn1nOZ+N0PGZB/z3BtweCgSeC4DOB3xjFgDmKUZsAuxS/jqLZMBXNyZlk + pCWwZPE8lFvF8fhqZEgGQw2CoaeS54KRZkmLIPJG8POdYLxNSjolLkmPxC9o0v8544HpvdWFguoigb5Y + YDghMJ4SmEoE5jJBTbmg9oKkUlBXJU+nFVgvCx5cE9wsF+5/H/HfSlF+A4PZC2nn4nQQAAAAAElFTkSu + QmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACzElE + QVQ4T8XT+UvTARjH8e8/EfRDRVh5YZYH3RflDw4pOowKyZqax9QdzivLskOtNNd3S9O5fdeWotkBUUTn + UsLMTNzlpvNYy3Vh1A/RTwXvvlD/Qw+8eH564Hk+8Aj/v7JUZyL5lSLKcgPZegOHdQYOaQ0c1F4hU2Nk + r0Zkt9rELrWRnepWMtRXUWhaSdd1sP5oY0QoqDJhuhuk+eY4F3rHqe8Zp64rQO0NPzVyr3ZMoHdMonUE + 0ThmKJYVdoUo7v1InLIdQVlupKnHx/kbLursLmqvu6mxeaiU6SUvWslHqeRHJQUolCY5ZpsizzZLtmOO + qOw2hMNlIg1dXk5fd3HC5qJaclMheSizetFYfZRYxymyBiiwTpAnBcmRpsmxh9gmhojJMSNk6UTqHF5q + JBeVVjflMq3FS4nFh8rip0iWb/k7nGub4UDnDBtbgqw1vCP2WCdCZqnIcXlVndkjZ+Gkqa9fvnuEptv9 + 5JoDHOnws0f0s6PZT0qDn5XnJ0i+NM0aY4TofAlBX2+h+2WErhcueobCWAc+0/HiA8YnPk7dHUV/O0zl + vQg1Dz5T+3ieM85vnBv4wYXhXxxpvoNgVu4n3FJLuFGFK3MLb9PiGUtLxKeIZyIjlsn0JKYUSczI3qWn + 8F6Rypzs6851OFKiEUSxDbdnlkFnJw8fvebp81Gc/WO8HHAy/Oo+g0MBht8EGHkbZHRsGpc7hMcXJjD9 + hdZrdgSFykhSxSAL8gbINZhJqHpGXNUrctt7WX7ST/y5ACsvBlnVHCLZOEdq6yfWds6zyf6TuLJbCGkF + JqJKB4nWDRFTPkrGpadsahgh8ewkqRenWHN5lg2mOTa3fWKrZZ7ttu+kdf8g/c5vUqrlDJL2nYwszKhn + 0a5GFu9pYklmC0sPiizLElmRfZUY5TVi88zEF1pJKLaTqHawWtdNckUfCUXtkX8f8d9KEP4A2YIDgLmG + rHYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACwklE + QVQ4T8WT3UuTYRjGn1y6mikS0jRQ3ISik4IOKggiiCiKyiCoQPqwZmq5hi38Rs1St7mpy1I0EaLv7Iui + 6MMs3bvtfefcsjQjKyIjCiIxyOjk11P0P3TDj+vg5rru6+QW/38KaywTpV4bR5sOUeTJw+a2YG3M4aB7 + N/mubA44d7LfuYMc1zb2OLayy5FFtmMT2a6NbClfPSHKvEXcfHmWy886OR89xdlIC91DbjrCDtoG62gN + VdMSKsejleLS7DRoNuo1K/URKyurMhH2pgIuRNro1po5o7poD9ZzKlCLN1BFs78Et2LHoRyhTrFRqxyi + Rsmjyp9LRXA3S8tTEIXuXLrCLZwOOqWpjib/MTxKJU6lmpLAHUoDtznms1Ppy6fMl0exz4J9wELW/WUs + qUhDdLqz+RCu4Y1axrh6VKqNV6oVS/ATJyIv8ESfUxz6yqvwdt5GNjMeXsWoMpfRoJ7WRj3ismcb0+Fi + pqTxu1rAtLaPe9oZXFGNnpFbXB+5hndI5bG/jF/KTH4ogp+qgGHBTa9AXGzcyo/Bw0xq+UwN5jId2smV + J8dZ/2icjkAlXX47e/s+80jW/ukXci+JyIAxwY02GXCuegOTDwr4cjeHD+0Lee8WjHt0LL/+hgKljwp1 + gJK+b3zp1vPt/AwmL+mYuqpj+paOnvIYxMkt6xi17qXXHM/DFB2PU+PoT42ld0EyDlst7fY6gouMDKXM + JpKawHBqIqMpibyen0RbkgHRmrUG/4p0etN19GXE8TRDz4AkIBlMiyGcpmPIZCBqimfYNIcRUwJjpkTe + mpPoNMbLBmtX0J8eQ78pDp/Eb9KjmmYRypAXZauo2cBzqS/NcxgzJ/DanMg7af6YmUTXn4CKxZkTtckx + nJg3UxJLwx+MsTiNcTQa9XiMs2iWeI2z/9JqNHBaGjskDcmGiX8f8d9GiN/72NkH0GAP3AAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACxElE + QVQ4T8WTa0+SARTHn6/Qy7LMWuWSjCILu88u5rrXct1U8EpIKitBSgUTzbSFiuUFEHng0c3VuqmgUJtt + 1QLCZYGbrXxRvu0z/Hra+g7+t9/OOS/Of+f/4ggrrx5NxbKkr0OqNCBVVCOV65HKdEilVQS0lQQ0FQRK + yuVaRqC4VO61BIo08qzFcaFwWRjT1ZLyThAeiRAenmHGM820e4aQK0TQHWJqaJpJV5CJwSCvZV7JPB8K + kXgyjndPLsKoVsdLd4Rm/1es/nmafPPc9X3F4ktilqn3pbjlW8D4D/8iNeIiemkJ0RnEsy0bQSoq49nj + SSyeOSzuBGYZk2uO2655WgfeYx/4QI07yU1PEoMnRbV3AZ34kwdGDyM7dyAECosZc7zEOPAZY3+cuv7P + 1PTLRs6PVE9NYQ2/ob4vStVQkhvuFNefJFHZk9wxDONT70Lwn7+C2PEcvTOGvjeGri9OVd8cVu87bLNx + +mcTdLqj5NnjqO5GyWqIo2hNYb0tIu7dI19w5iKee+OUdseo7I6idcQosL7n2p1JbL4IlQ/forc8Y5Px + I4qGGErrF5Qd37E1jOI/qEYQC84x2DzG1a5PqI0R0komWVsWQlE6QVePgW+vt5Bb94at5ijbm+dQtckR + Hi1hb3pKIG+/bHD0JL1mP2s1U6wpniBdXs6oCpOhn+WSyc9lyxibTXGyGxPsbP3G7s5Fdjt/025/gZR/ + QI6QdwLD5R5WacKsLg+TpnvLuupZ1td+IP1WjA2mBJlN8yjsCyi7fpDT+4tdrj+0dQYZLTiEMJKbh7Rf + g/mUjcYzLTSdb8Va2I7tSgf3rndh1zpo1/XxoHaQh6ZhHI0S3W1PibQ4GT2bj3A/S7U8kL6ZwYxMXBsz + GdqUhWuLzFYFbkU2HqWS4RwVXnUOIwfUiEf2IR4/iP/0URzHDi///4gVkyD8BYu25y56xoZdAAAAAElF + TkSuQmCC + + + + + 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 + h98AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACw0lE + QVQ4T8WT608NYBzHnzeli46saKWTzjGzYWaz9YKWhhfR1k0lK8VZ6aJS6KImcRal27pQ67JUs5PmhbE5 + lMVRuR0q52BFpSbGZi6dThm2j+eY/6Hf9n35+fwuzx6x+JVYFDuTXZFMZnkSGRUa0i4coqQijq6qKHTV + keiqwtHVhtKWHUJjVCiNkcE0RQXTHLGbsqDtMyKr8jCdI3W0GatoNVbSYLyA4bmW36Y8Fkw5/DRn8Xs0 + gy+d6UyflMlP4X1OMp/zUrmodkOklcXT+LiU+gEttQPFVA8U0fsoF6sxndlnKViGkrCaNXxsOcR4pobx + jHgmjhxgOimaGnc7RNL5GOoGi6k0FFBuyKfUkIt+8KgUaJg1JmB5FofVFMPHhhjeHo5hPHkfEzKjm5XU + rnRAHCyJoPxBLuf6jlPSl8XZe5nc7JddH+9n9mkUFmME86YwPtSH8yZhL2ORuzBv9OC1yol6D0dErDYE + rYSKe49QdDeVQpnrhgTmn4TLCcKYe7ob67AfU/nrGFq7guHVDrxQLWVMpeCiTRB9JkiCyRT0JFLYm8jx + noN03ArAcseTr3oHvukFFoNgItGOIW/nf7DZJlC70GAT7D29gzwJndDHEqnzw6/VkzKdgrmbQgoE33sF + cw8Fkyn2jCidMUn4lcqFt+plUuCECCkK4Kg+msAWH/xbvdh2WUnlVVesNrhH8KNPyHsIplLtMSmX8lLC + r2Um1QoabYLgU1vZ07ke/xZPAtq88e/wperacuZvS/iuYPa+YN4omE6zx6xU/INH5f6TaleaPZwROws2 + 49/uRWD7KnZc8SGwS0XNDTf+3BMs9At+PRL8MQk+ZSxhzEchR1fwTsIf1rjSahNsSfWd2ZDuxsZMdzZl + rWDDMQ80J13o1gp0JYKuMkF3taBljx11bo7y6Zy4JMEmmVJ3p5n/P2LRSoi/sYnOGmfRmIAAAAAASUVO + RK5CYII= + + + + + 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 + AAAASUVORK5CYII= + + + + + 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 + LnTpHyBQUfkPUhhCFkYhtr0AAAAASUVORK5CYII= + + + + + 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 + LnTpHyBQUfkPUhhCFkYhtr0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAADF0lE + QVQ4T2MgFiQ4KAhUhGrktMZqHygPUvlS6Kf0syzWogUqjRtUxchL9qeb9vcm6X6elqb7vyVa7UZdhPKG + An+FFzl+ar8YqqJ0TvYVWnJC1TPUxRtcbE83WdyQbJzVnW26tDtF//ukVN3/bVEquzKcJMxAahwYGFiy + 3MVPFQZpHmWYXOG9eFaty/XqaJ1AkGRNurlqbZzB6vpYnYv10Vq/uhN1npR6S4cmFBQIFDROrK6pqqgM + NWBZn+en/i3Jz0QdpIexMdWyryPL4lZLkuHz7mzzg40Jek+aE/VfNUVp1pS4MXBnV1YKBycX3s9qn/t/ + wbwp/2cuWvA/trz3v5hnRibIADBoaHBgacrzNm6vSPaoijPXa2BgYAKJ57a1iQYk5j9cvP/K/zXnXvxf + evr1/1lHn/8Xdkz6LWibbA3WjAs0N/eKF9R3Pl91+Pr/zm03/688/RSMVXyz/0qb++VDlWEHlUDN7VMW + vJjq7fd//oHb/yfuvPl//pEH/7UD8v66RucWtQoLH4UqxQQOCaUSfulVzye7ef2/V1j4v1tL+/+6Uw/+ + l/XO/+cZX1DSKiLy7ZK///9mLi5MQxra+xUCkgtfda859n/NsTv/u9TU/9/Jyvrfq6D4P7O6s7RHTOz3 + BTe3/83c3N+gWhCgpmuiql9iweu6pQf/92+5+L922fH/U7Zf+t8rI/v/QVjY/wlCQv9um5n972Jh+Q3V + ggAgzd5x+W+L5+z5X7/8+P+aZcf+p83c/z+9cSrQ5o6yidzc/16bm/+fysn5D6oFARraerR84vM/pk3c + 8j931t7/ZQsO/s+dc/C/flDuf/f4vCqQjc+BNs/m5f33XVPz/2R2doQLoioyBb0SCj8GNK/9H9Cy9n/y + xK3/8+cc+K/ll/nfOTK7qoGR8dsVXd3/E6CaZnBy/n4pJ/e/g5kZEgYOXqESMjZhP9VDK/+bZU/671yx + 6L+0Q+x/KTP3lHpm5hMgzc1MTCgB1sXK+g1qCCQW2BSN9NiUTBrY5E2Pc6ha/+FSsqwVVnLiB8k1wxSh + gW5WVqA4AwMAA4ha39jpzfsAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAArpAAAK6QH9dc7TAAAHi0lE + QVRYR+1We1BTZx6lW7c6aluxPirFqsB2kfKICPJcxaKIloUqglWqqCsCYumKIBERrUhAWKEFeYeHRXlI + UVdKoVMFUVQiQoAQwiOEQEKQN/JQAZuz3w3Xdp3YnWGG/a9n5hsuyf1953fO79zvRuUPTAVrr75QWxPb + 7M+IERYZXmhqMY4V9hjGCZtM4kW563OGbenb/j/YWAB3iyTJCLOwF1dqR1HWOo4iwRjSOaM4WdgH21SJ + fMMNBNC3Ty9sfoK19UXZL7dbJvBAPIGYu6PwvjaIfVn92Hu5F3sye+FK/lrGto6b52AZXTZ9+FvOi8xk + zjBKSAM+N4YJ+RMcvjoAj9x+HMjuxd7MHtJEDzbGtsAs7clOumz6YJ4zVlzUOIbgmyM4+sMQjvz71QZc + L/fAlbiwProZZuw+B7ps+mCZNREffW8QzB9H4Zs/hH9eH4QXacCdNPAP0sA+Qr7rYhcMw/gyk+8xhy6b + PlgXYpV1sniM+eOIogFq/ofyBnDwSh/2Z5EGyLKMFGB1pNiVLpl+mLG7nY3O81/4F4zgS6Le8/t+uOX0 + EfU9pIE+GIfWgBFcZ6vyWf6bKrFNM3T8K2Z+dPzRb4v5cKZRKt6it3s9bK5iiWX2uO4neTC0ujJuYZ7x + dINF+pCdSUq/o154g5/1hYYXQUUjCvXuRD1lPzX/3Ze7sS1ZCqNgrtwyjDtheoY7YXKmUm4SXCk3J8si + pFJuxaqS6wY8/EXnVLMxTacM83hR947sDrjkdMA1R4oDuVJ45nXgcJ4UzHwZMqtGFbNXhI9Wv/tSN3aS + +TtffAzH1C6E3xpESfMz5FaPILHsCVg/D8Dveg88crrACKqEhk+ZPU2nDMOYpu4qiRy5tWPI4Y4hq2oM + Fx89R8KDZwj+eYQ085v11Oz3EPUu33VhRzohT+mEQ3IHNsVKsS5aAouodpidF2NNRCtWh4mwKqwFOgGV + 0PIu2U/TKUMvplla2jJOQkaCdv3J5PNOBY4OHaX8JTll/RcZ3ficKHdK7cRWtgx/TyQrqRO2CTJYhDfC + +CwfZuFCmEW2wShcjJUBVdDwKvGj6ZSh+02T6GbTc2LzoCLpVNi8aNXuuX1K5JT1TmmPsS1FBvukDtgn + d8KSEGt4l/ZrHeOlajEbWMt9qjkfHeXI9c8IoHmkXK7lV+tE0ylDN0rQWCR4Drcrk6SUYipsFPHk805O + vP8idybkL623J2tjTCuWHbrdsvy0SI3eUgHNAIn9Ch9eguYJmTv5943JT18D/fMC3jXeKPaSx4oipU45 + BXEWOemotJPAUTNX2P4ruQx2iVLYJcnACKwkKrkH6O2mDt3wuqqsymG4ZPQozndXWrGCOKNLoZoKHDVz + ynZKOUW+OV6CLaQBLe9SkvJqbXq7qUM/gl+eVj4M5/Ruhc0U6S6i+FfitE6Faipw1MztEibJbWLbsSmh + AxqexVDzrf+Q3m7q0A3j3Y0rG4AjsZcipBY15+1E8UtiB3aHIu2fEnLbOEJ+oR3W0W2wjpPiL4dvY6lX + tTm93dShG8orjijuI+omCSmbKdJtKdS8H2NrShchlmBTXDu2UA0kdpJXMHnuv22D1bft+Ni/AkvcHpyl + t1PGEfGb9NXr8XFobdHZn3rwaTxJNbHYgcx1K7sL6yObwTj1UK4deKdbK7CmXIPJL15xhFuv4XVnwuBE + FdaSg8c8UgyTf7VisUvh0PtuAgN6SwXm7L+76J3txSXztxUMqn5espf+WBkGLN6NgPwu2MRLsYU0QSXb + hMUjxA8LdKLqV6mo4JVHSO20ZJH6oYooTa9SuRUZxerwVuidqsOCHfnPVHcUZ851KmXN+qwoba5dXu+X + bAE0TjXiXdusBrpcGXqs6ryvcmVkpu0kWBKs/0YE3aBKjsrue//TuoX77mXtia/HqnMt0GMJoU+OXYsQ + Hpwia3E8uwWJ9wdgFyfGe358zNl4SUiXKcMghJt9MFNKLG3DJ8RWk9B66IcKT9Jf/y4WHSh3tAq8j8O5 + XdAkKv96ugGaQQ1YGijAYn8+VI/W4T1fHhb41GK2VXoNXaYM/ZDq775IbYPF+VasixLDmCWAfogwgv76 + dzFvd9mezWc4iLjViw8DyJF7UoAVgfXkmo8PmHV4/xgPC/14mO9dhVlr08rpMmUYsKrZDvGtWEPCZEre + YqbhIuic4Ig+OFY9m75FGdvFM991zOdFFnbAjbinThpYfqIeS4/zoeZPk/vWYj5Zbx+qwFtmySV0pTIM + Q2viN5AflkbnhDAOE5I3mAj6p2ux0vdBoXH663/NLPV4dNCUWQb37E6oMeuxjKhWD6gn13wsPkYCSaxX + JdbP8+FhtjsHM0zYBXSpMhgsbrRpeBMMQkRktYARKgLjnBja/hys/Fq4jr7tFah5PvJf4nEH6kHNZOaN + UCdzX0LIKcsX+NRg3ldchfI5nkT9rpv4k1FiLl2qDAar2pdxltuj/3XVkO7JiqfE/qfa/vdHtf3KCjU8 + GmfRt72Chc7lby/ceSNzgeNViap9dvu8zZnCd2wu1czdkMGZvS61bJYF+9afzdk/zFiTdO0No8TLKsZJ + LnTpHyBQUfkPUhhCFkYhtr0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAADAklE + QVQ4T43Ma0iTUQDG8bcQKYQopDSVNPO22qblnS4sjTKtNbVFaOp0bermZSOX23ydU9dmrhrTrmYiXiuz + BDUrjJIumqSlaJkFlq00xQ+SGd14cvKChAr94Hw55/kf4n/xWE4r5VyPlBMxmx5mRrhMSdnOP47HBGio + 58UpjziuNST6Gk4nML6eFzKgiXYbUB3e0CA54DSawnb7SSij6M/OSAOXU3tCFefVo0v0qVTzvUV6sW+1 + /qjn9yIBA9ool3tJQbZ+5g2LICxEe2w6pRG0J0SxPKyyJHvX66xoerj5kUz0d82O9arLiaH35ERv/KmP + p5tkYfZcnkSyUpJrzCKVcgXXy+JWGtt9OoHt425uluQKAs8UiAIGNQmbR/Ri/7ZcHtOUH+85lhdFIzN2 + E1ZihcI6ki8dEumuoLzsLC5VlCMm8zTW7E1KNn8wS61mWeSlhXnr5PwQZaw/U00QS833qVrtak58+ofK + B3240T06c8ZxvesLDFWNv5gHZVtn48UolSdsIo9KTVUP+nHy9hs0dH9Ga98oBO40ZFst/RVNEHHUdL70 + mXh7pHC4vLUXmoY+GO8OoPmlCUKpDGYfC+XItSKmqfm/WDyZLS0kznSxpQuFjb3Iv9mNqkfvQKY5Y/jV + Bai0BSituYYIe7shKpmj1hmcOHzpWH7tI5y70w9FTQdKWl8hS7wOU+NX8WckHM0VRxDMYU9RyRyy0OjK + jpeMq6rbYGjqAVnzFEW3e5GV4oCpsVp8ex+BFy1eUCTbfKKSOeY4LDZ94lhpK3Jq26Gr78SphufIFtnN + xpNv96OrkQEy2Xp+rNae2rgvLn1SaGxCasl9KCracPJmJ3JEHrPxxOtQdNyigRRZj1HJnCh58qpQnnSS + k18PjqYefGMzlJWPIcyQoUzlg96mneio8wCZtEBsxgrl2jpsO/TDnauAn7gIwfIKHCu8jB1BQYPF6mDo + BXZQCewmqPnCLNdvYVo6+6gtHX3bl7lu/c3YyS2lM73H3dxcSg8ErthDzRZAEH8BCY9wzaSzIPEAAAAA + SUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAADUklE + QVQ4T02T20/SYRjHf/NfaW111UVd11VurVo31txqZQdLrSDsAAICooj++AGK4oHEzJUgh5YKBXLQkRGi + 4iqVmIfhIZFSHIo1Sfn2amz0bO/evRffZ9/P83xf6qBElZV5SqbxvFLdoGVUDT4ZrV6lG1q25cqmtEzZ + nK5Ta7fFcuWqRK7wVYhrtKVc3nmKkuQdig9K09Tc73B5sLD4HSvr21hJ/MbS+g6iP1NYiG9hbi2JSCyJ + qcV1DI1Ng257iTvlT21ZOelVr85spHYRXdvA5OwyfJ9n4RmPwBmcwfvAFN59mobNT27ydgTDGPB/wdW7 + rExWTlFPxHIEI6tI7e5hLbGN5XgC3vEZ2D9OwuQKoLPPA1WXBZxKOQQ1DEzvh1FwowRZOUWV88V7/qko + fu1mENvcwVJ8E6+dATQaHBC3mcGp16NUWI9bj/hQtHbD5guh8Pb9/aycop6KazEwOIzhkVG4R4KYmJ5F + m8kB5uVbCDSvwJa3okxIgyWi0WkdhGssjMJbZTkHLH4VxuZi2Pr9B7FECpGFFRgGvNBb3qHVaENzjw2N + 3VbUaPQQyhug7bbgStG9XINnIun+6MwSNnf2yPRTmI7GYRgMoMnoRFW7GY8ZgiCgcZNdAamqDb2OEVwt + fphDeMAVwe72od85BLc/hMDXOfSQGWiMDkhIA46iAyX8OpRwpWjssqLvwyRBKM05KObwMD4Xx8ZOGtHY + OkbGv+KFxY4Okx26g2N2EBQ7mA4DZJoOKHWvCMJ/W+BUiPYD4UX82EpjnoQmGF4mCKOHCP8c6FEiqEMR + iwdetQov3rhw7R4rh8DmV8Prn4C53wGbdxRDE99IgyCaep2ofm7BM3UXWFUqlFXUQNlpQlf/EMnB3ZyD + R3xpJjQfRzyZRji6Crv3I/TGPuiMA2g/OL12tJBb8bwHIkULJGSQZI25JLK5kpCHZDyW/IOZ5QSJ8jwM + LuIguwUOTRCEdbjN5qNcQkPEtOJSYVEkK6cogZQ+IpQxIavdDV8ogg9fFmD2TEBrcaNKZ0U503m4hQIy + uLMXC3Am/0Lo4pXrR7Lyf1VbK8urVmjO8cS17WWPBVOlTyqTNx5yMwXF7Ez+5ZvJU6fzJ4+fOKk7euwE + +cpU9itT1F9yUXaOQcgtYAAAAABJRU5ErkJggg== + + + + + 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 + /x/24eT0T7mmeda51wVMAAAAAElFTkSuQmCC + + + + + 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 + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAAKzUlE + QVRYR81WeVAU9hUm03Ta5I9M0zRN4xhq0CCKKB6Imoga8SAmKDFqimcIotxELoFFFlhAdNnlWFiWYwWy + LIewHCqIityXByyHHMp97nIjIAaVr2+3aztOS0P/65t5w837fu993/ee2v9liMXiP/GjokzCBdFMHp+f + yA3jF/JjhI2xomRZvPjqUEJS2mS8OG0y9ufUoei4ZFmY4ErTJW5E4aUgniiAG84M4PBM3Pz9P1T9u4VH + bGzc4dCIiJKU1PRXJWVVqG9uQ0f/MGTjMxicnIX86SwGxp+jf+wX9I3OoHfsOXpHn6FnZAbt8knUtfWj + 6MEjpOcWgBMZ98rSiVFied77kOrf//eIS0hg59y8hbHJZ3g2O4fhyefokI2jfWAMbZStfSNo6R5Cc88w + mroH0dAlR32HDPXtckjbByB9QkkAqltlqHlC2TGI8oZO+IbEwNaVyVWVmT/iRUkvZl4C3fIxdAyMoK1v + GNLWPpTUtaFQ+gTFNa0ooo+FNW9mQc1jFFQ/xt2HLcrMp7zzoFmZd+n7ufeaYMe4+EpVZv7w5kTSi8cw + Oj6FbtkImrvpdW199LIeVDV2oJiK377fhNyqR8ipqEd2WS2ySmuRWSJFVrEUkuIaZCiSvpddVqf8XFL4 + EDHpeThl4wxVmfnDN1iAkvpO1HfKMf18FkMTU+gfHkfXwBBaOgfQ0N6LmsdduNfYjsqGVpTWUgeqm+iV + TfRaRTYip7wWcZI8eAfxEZOUheqWbvBFGQTAZSEAolBKM6vvUAB4CTkRb2B0ioA8w+DYFPKppZlF1Ui5 + XYmEGyWIzshHcFIOAoQSeATHwdqLjWNWrjhw1BwGu43hz41EVX0bQuKuwsx2AQC82LwXZY09SgBTBEA2 + NgMZAZCPTaJveAI3qfWJNysgkOSDk3gDfrESeIYnwZkTBwf/CNh4BcHawx+Wrt6wcmEiLi0XVY/awYlJ + UozgparM/MEXxA7cKn2Ipr5xTP8yh36S1wC9vH/4KXoGx3G9vA6JueUQpOcjSHQdrJh0ePDEcAq6AnsW + D1ael3DG1QenzzFg7uCOmJRrSu4IJXdwxtFDriozfwgSklBb34QzDm540tmLPurA0NPnyi70DE3gelk9 + xNSBKMldBFEHfKPT4B6WCEcCYOsbCkuPQJx2ZsLM7jx+tHNFbGoOKmikmURKa1evXx+BD82svnMQ8pEx + 1NU3wpN1GcLEVNwtrUJFTT0ixNfAS7wGTnwm/KJT4ckTUfvp9QEC2DC5NAI2HLy5cGcLwEnIIqU0kIwH + wPtZglNWjgtTQWlDF2rbZUoOjE/PYuzpM3T29qPxcTtixRkI4ieAzY8HKyQaAWFCBAtTEEYFoq/mICm3 + BBmF95GUUwDm5XBwIxMgySvGxYh4mNk4LUwFZQRA2ibD6BRZ7QhZ7BB5As2/SzZKBtOMPCJiNuk77e59 + ImQZIokPwWIaB18M18uRsHTzg4XTBZietgeLy8fVnEIEKAEsQAWeF0Mny0kFig6MEYCe4Wkq/pRccRSP + e4aQQYajIGEkcYAjyiESSsCISIYT97UK2ASABQvHC7AgIobFpSK3tAaXBCIctbCfVpWZP9LTJJN3KqrR + 0D2GsemXBOAZuuQTaOtXuOIgslQA/ilDUgGDZKhUgZ9KBS4+MP/JAz/an0dQlAjZd6sQd60Q55iBvw7g + coQQrZ3dsLB3RS1tQdnEC+WmU9hzU5cMmdT61wCCRDfAik6HO8nQkS0kFYThrMdFmDsxcYpM56TlOXBj + knFNZc/mBEhVZv7w5QpQQ/OXj0ygqLQCzp7+iE1MQ25hBUpoxYpzy0iGlYjOKgI3KRd+wgx4RqTAmUZg + p/SBy7BmBMItMAJRJMG7ZM33yAcE4kyc+clt4SqQtg3QCGYxSimjXfCwrhG3iyvgRz8nnuDCpXB4svlg + cqMRGClCWIIEoqx8XC+6h7zKWroHGhDIDgKDwYD2ymWwd3QEmydQAPgt5VtLlixRe/fdd5U13whWsGCu + /NE/VCCfmEHX0DQdGROqO2AQZeTrZXWKFdyCm5W0DUuqkZZfhfT8SngHBOJb42+wSW8tPv7oAzBcfkKG + JBXGRgY4uN8Idrb20Kef/eYttaFFH7xno6WlpfbOO++oKquCFyWcqGruRS0BUFxAXYNTykOkkbbjg+Yu + ZBQRB3LKwU8nJyQO+BIHLl7JhJvfZXxp8Dlu5d3CN18ZYvFH7+GE6QF4uTvi8IE9sLb4AVlZ1+BgZ4kP + //h7rNDUmPtCf+3xxYsXqyqrIk6cOldcWY37TT0YnHqh7EBr/zga6LJ50Nz9Bgk5BEChAh5tQ5MDxmBe + 8EBDQwN4YRzYnD0GdycrmB3/DvZWZrC3PAFPdwdkZlyFudn30N+gje1b9KR6enpqb7/9tqo6hTdZ8fDk + DFjsEGTcLEAHmVAXZVP3MO41dREAKRFRAYB8gGTIjs9CULQIRru+RF2dFCXFxbjAcIHt2aMQxYbh6s8x + SLoSDndnS3xttA35d27hvIs9DLaswdbNGxQgdN9//31VdQqFChROKKf9L6Wl5OTJgi+Hj7jU60i/Vap0 + vsQ8hQqKEZJ8E/y023BwdIH1WXO0t7UjK1MCG2sz/HD8IIQCDkTCSESGBdIo7LHHcBNKS4oRGkzj2raB + chOMdm/nampqqqpT+IVG4TUJB+jaHaIrWDbyFBXVtUjJzAWLwLj6BsGFxcV5vxCECZOx7fMtuJN3A/29 + vUhPS8bZ08exUnMRcWIdvDycYXr4axwxMYLPBWe0NBN5c7Ph4miFg8Y7sWubwQiV/dcMvIMFLyrIiqV0 + 1faSDXcMTtMFPKokZc2TPrpw21FeR4dpdQsdqC24kpSCQybG+PHkESxSX4y/fEKFt+thx9a1+HLrenz7 + jSEO7NuJHQb6iIoIxt4927BYYyn+ulQdh032wvSICfbt2mGsKq+m5nTBryifbjtp+6ByD3TKCUD3KB62 + 0K1P16+ShHQP8GkBXckqwK7de7Dj8/VYrm+IwzZeOHqOheVf7MM6HQ3lq7/YrIetWzbCxuIkNq7Xhu7e + 72FKv/OdDRMaupuxddNqaKh/UqQqT/dAUOhaZmDI1IOWHvSP/0IdmMKjLiJgc4/y7FbIUKRYRgQgkVav + vt5qrNHRxJ+3n4L+USdsPu4C9T0W2G5kjK/3GCAkIhLhglhlJz5eugKffmUJ/WPO0DN1woc7zWG8zxAa + Sxa9uSN8Qvlrvf2DWm4WVqKdADTTefbgcT/d/k/eACAmALo6WtTuDVA/6IztTmwYugVj+Q++cPdiYdUK + DTg4u+K0pXXXdurSOv2NWHbSG4buITBw5mCLHQfnbK2gs3LZvy8p25zQ34Xyoi0vcvlSQULqXMqNAmQX + PVTe+sl3Hih3Qdz1YuzctRuHyOUCeJFg0Nc+t++Bn5KNQwe+wirtz14dMT1mr6ur+4dVKzQnTp/6G3wE + CWDcKAaDHkCmh53EjU+XqJeryv7n8OdFaXqw2FaODJbQxtWrws6d1Wvt7jdzjsmGi5c/9Nbp4Kz5CQj5 + PDDdzuG7/Xuxbo323NrV2icUnq/IzRtXn1ivqz3HcHVEdHgInG3PYt+eHVi9cvmUjpaGjqrU/xYKB1NX + V1fT0dHS0fxsacVqba1ZKjqnpbmsRVd35X6FvhVer0jF5xt0dfevX6MtXaOzYk531cpZTc2lFYq/VVdX + V/s7MpGQKbFl/z8AAAAASUVORK5CYII= + + + + + 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 + AAAASUVORK5CYII= + + + + + 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 + 2Ag6/Trn36K3MDnHejE6AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAADPklE + QVQ4T1WTbU+SURjH7/Xab+HLvoBfodl80aq19aJWs9RKQU3yBr0hNeQplYd8SEypkHhoJWCAgA6VEBRL + UWIqQzGRUhyKlaT8u7lluq7tv3Ods/P/7TrnXIfIB5/PvyCRyEulnZ0q2fMuT5uoY0vS+eJAKFNk22TK + bHuH6oASyrYoocRDUq2qSg6nlHZdYMz5kCuVI7YxF6Lr37G5c4DN1G9s7Bwi9jODaHIfq9tpRBJphNZ3 + MB5YgrhnCOXsBkvBThCUqCO3mzlCbHsX8ytxeL6uwDUbgd2/jE++EEY/L8HipUd6bvOHYfYu4Oa96lzB + ThD1lBD+yBYyR8fYTh0gnkzBPbsM6/Q89GM+DHx04fmgEewmIbitUug/TeDqrQoU7ARRS/KPvaEYfh3l + kNg7xEZyD2/tPnQN20D1GMAWqVHJE+EOi4SkWwOLJ4gbdx+cFOwE8Zh6BrNjAhNTM3BO+TG3tIIevQ3S + oQ/gyt+gRtiNKp4Y1c1iDJgcGAuEceNO1XkF1aQAgdUE9n//RSKVQSS6iWGzG2rjKLp1Fii1FnRpTGiV + q8ETdkKlMeL67fvngIbmpyczyxvYOzymbz+DpVgSww4fFDo7BL0G1EnVYAk6wGmRQK19D/t0EKxG6qSo + qOgU8JDTDKvTgxH7OJzeIHyLq9DSdyDX2cCnAWxJP3jSHtRSIlQ1iRndqyVRXFx8CihnP8HsahK7h1nE + EjuYml3EK6MV/Xor+vIy2GCyTzJGef9rdGv0TF5SUnIKYDc2n/jC6/ixn8Ua3TT+cJw+wgxzhHwFjV0a + KAffMSaT2YFJ/wKTl5WVnQJqyBa4vXMwjNhgcc9gfO4bDfBD8c6OlpdGiAdMaG+/iaZndXj14jI0A1eY + nFt3UcsAWOTTXHAtiWQ6i3BsC1b3NNS6j+jTmdFL671jMr8ZfzKuM62EuMwaA6jhUEEX3eOJ9F8sx1N0 + K69heIyuoPAKSq31DBBfk+Hbl1osBirOAbwWcTGvVRo0WZ3wBCOYXIjC4JqDyuiEoM8ExVszszkaFjDG + gOcaozNAPvJfuk2quPSEauutquOGKuub0rcecXJXy2tyd1lkmqwv+ZU3/K+L8/8A/hqYbMwXzSsAAAAA + SUVORK5CYII= + + + + + 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 + QmCC + + + + + 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 + RK5CYII= + + + + + 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 + D8sb0dusTwAAAABJRU5ErkJggg== + + + + + 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 + if/3vxYMxn8ANXeeHuchmc0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAADSUlE + QVQ4T62Sb1DTdRyAfy/qwG0oMscYgWx5cEw7QLAAG5ShE5wiTAcIAVKYzTj5q17hnwgMmyJwbmOFZvPM + eiGR6cWuwzvilEWBemRdehnyx9K68mCDHAZPe7E3HW977j7vnudz9/3eR/hf0RitQcnGlh0a4/Gza8pt + 4yvfsPyjzHvnt9DNe64r1pd1LdEaT0u1FRk+fT4pu993bG8fJKP9Dkm2ERJafiL+6JB3rrGi1kHYy00s + Ti257dPnk7jL6rz6B1y8M8uZob851jfJW91/oXq1jRBdFUvSqxDHZf7o0+eTbDT3fj4M9psebINTNPdP + Y+p/jLLoOHJdNbKMakRxm2769PkkGi1fnf4BzIMeTM4p6nrd1PZ6iChuInhDJdL0CkTL1w349P9y9sxL + gamv1Q80D8zxnnOGg1+7qel2UdHtQVnoXeCNvR+IOGrNDWWKsMCXCcIHLWsT2o5p7Xbzhmln5/M0fjNL + 7RWovDzF6w4Xr3Q98j6hmWBvHJRWgapoMU+XSGaVxeLRsFy/I8KH5uzpsaEyfv9ey0hfPO1fnqD2Qg+l + nWNs+2IOwwWIKLARnmsgvv4pkswynmsLJqZ+EYqNfh7hXHvhDDM9PJ44j+uBhYc/V3P3ShrnGheyvmgh + MXXJrKyLI9UWTJpdxWpLKOq9EqL3iFHo/B8KH5mzJnB3MvPnSdz3T3jHxOi1EqyH5GzaGcizLXLS7VEU + dqWQf2k12lNRqPeJiD4QQGim/7hwslU3jsvOowetuH49zOS9/YwM5mE9KEdfJmWtPZLNHTFsd7zI3qEc + ss7HemMxyxskhGeLbgvWo9pbTFjx3GtgcuxNJkYrufttlndBCFvL5WR2xJJ3MYlixwvs6tGh/ywe9WER + sU0BLNVLbgjNDZoB3I3M3t/P1Hg5kyOlDPen03YohPxqBQVdGnb0aL3xRmr6csjpSOIZk5gVBxaxzCD9 + VLDUq0st76p/+cS6au5yRxq3+jIYdmpoqJSxap1oOrosaC7liIotHyey+6qe3EvJRNYsIGKrxCErkEt8 + 1yAIpn2R4W9XqfLLS0NtO/OCrhfppdZtGkEiM/gvDTP45YZtEbUuywn8TlUc4FFkP3FKSBCeFARB+BeC + D8sb0dusTwAAAABJRU5ErkJggg== + + + + + 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 + LnTpHyBQUfkPUhhCFkYhtr0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAADsUlE + QVQ4T3WTe0yTVxjGT7Is6YAM5TKqHyDMAYPEhM0LYxDDRjZAFIvI/aJ0wCaMYenageU6BIUCOkBBKAgE + WC2I0MlFLRIatiEOnMPFObK4i2bp16/QUqqAI8+OG/tzT3L+Ouf5Pe973nPIf8qUlDmUn5JHllZWn6lt + aJ7Jq+v668206jW+QPbIaZ9o1j5IOGrrH9dp4xdbbbUzSsLz3X+EeAZvJTL5eaFccWlO1jq0ntHyNSIa + 78K36g58SifhU3QTXnkj8BAPwC1bBecPO7AluR72hytgGyIF7w3BD+Rs52Wu7Ufg02sckpR/4L3Gn7C7 + 6jZ8iifgkXcNr4oH4f5JL7Zl9oBJU8AuphK2+wvwcthn4O2O0ZPKi/3L8ybgPvcM93TPMP1oDdfnLeie + XUTVzT8h6ptHouIOXNMVsI0swaaIImw+UIjNB4vA84vXk4KmPvN9Cph+vIrxh2sYfrAC1dwyOr83oXHa + iNpJCpo0wfPjDthFlcPxcDkcDp3EpqgK8PbEcaSsuc80YwA0v65C/fMKlPeeoHXWjPopIyq1iyge45Cn + MeD1nC/hlFADfpwcDrFy2MXVwsovQU9yzqpM44+BKzS5e+4pmmcs+GLKjIoJI2SaBeQOc8i6SgEiFbYm + 18GJLsekOvBTGmC1J4El6VVK41cPgU5qbpp9gtopC8q0SzhBzcdHDEgf1COln4O3pB+MsBl84QXwjzaC + SW2BtX8iS1JP9yx0PwDO02T5LQtKtcu0ZBOyRxfwwSCH+F4WAhUHL4kazEftcM5og0t6Gxg6Uuu3klgS + XdpjaLoLVH5jQcnEMiQ3zMgaMiF1wIAYajzQxSK4g4VH/ghcs3rgRsfpktkF5ywlBdAKQmWdXM13QCE1 + izVmHBteQsqAEdG9BoR36xHUrkNAKwuvfA3cj1+Gm6gPrjl0ia7Axj9ZR8KLutiSW0DumBkZo0tIHjQh + qncRoT0GvEOTA9t0eFuhg3fhOLbTNtzFagpR00ush9XOyEHikfD570K1Eek3VpFydQWRfRaEdJvwbgeH + vRdZBGwAnr/M16RD2C4dAXOkATZ+0RriGGJNnMPF+5gI6Zh7/KmnO3KV8Dt9G3tbWJpuRFCHAYHtHG1B + D58SLTxOXIfL0XOwDUhRE7dg3sY/3FBg4kuMQPL+loPSKkaQP7stuWbdM0cJ35PfYte53+BdrP3HbB+c + piRk14sbrv+XTdAxB6fQ7NhXQjJbnMJEvzCHCtadw7Iv0K0X/j3xXIT8DZQiTAX1+9RVAAAAAElFTkSu + QmCC + + + + + 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 + LnTpHyBQUfkPUhhCFkYhtr0AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAADn0lE + QVQ4T3WTa0yTVwCGvx/bD5Il2wSnTIajgGJhoGBdyJZdkoHTzN2ysDhiYKtjoOAA6dCiwIpDLjKwGREF + 0TIKSGGIUruJZWIxbKusAdeVgqVMCpRLb1/7tbS0vDup7Ofe5P13nifvycmh/kvRqfyNNZWCj7+vLqlr + ulQz0iPme0W1HI+wNNRQwQtRncre/HM+94WW3PSgc8fSn+flHHou7fMDAS9S9cKiw13t1eoBaZFv9F4G + ZlUfYkG1GzO/xUGv2ImJX2Oh6Y/GQ1kURnq3YbCNBWljCJrPbkJe+rMPqe5OoQnuK/Aav4FDn45l9X7M + KhMxPRSHyQE21Ld3YIzAqr7tGJZE4MbFEIiqNqOpPBgnMjaYqOuSCicwCayOAx41sPIAbloOxnwNtEEI + k5aPuVEuBtu342pVMK5UboGoOhTimpfAzySCnzpOE4EGa24l1phBrDlkcFu64TS3wbnUBGbhB7iM56Ho + jENb3VZ0CMPQeX4rJPV+gZkIyhzwjRBQDh/dB69VArdJBGaxAXZjLeyz34GZK8Hw9QT0NISTskjD0NcY + AX5WoJnqbs11YOUufLZeeC0dWDU1w71UD8Z4DvSsAPTMSdgNBVDeSID0ciRuNZOKInHnx0gUZwWaKEnL + Vw44b8JrFmN1uQmeRSE8xgows6WwPS6EdToHtD4DKmk85G07MOBvFBRdbJzODjJTnS1cGivtBL4Iz0It + 3PPlWDEUw/G4ALbpo7DovoBt6jOM3Y7H/a4YDHVHY7gnGsreWJQcCbRQ166m0HA1wrNcA7fxDIGL4Pon + nzxpFqy6NJgnU2CdeB9q+S4o+2Lx4Gacv6OynSjO2Wih2i8foNeYOnJvAVbmT8A18zWc+i/heHSIgJ/A + NL4fFm0ytHcTMPZLvH/JX/278GhwN0qPPRHYQJ+Be7EQrrlsOA1cMFOpYCY+glWzDyZNEszaJEwqOESy + B9pBDvRDHAy0spGTtkFK1QpijIwhE76lI1idP0wWHASj/wD2iX1EkEwE7/gXTN3fAx2pfvhV9IvZyOMG + DaS8ST1DlR1nvVfGC5dfOBvluiXmQHPvLTC6vXDr3oVdu5fAZMF4kl9g+CMRstYYFGRukqYmUgHr//BJ + DqaGBpTzwpIrT0ZUVZeE/9kiZPvudMRjXPEaLH+/jZnfOZCJXgH/6BZJbgL19Dr2/+FlBgd9e/zlTwUF + rEvlhSxdQ3mUrzRvW+Prb1BPrR8hoah/AXIrk4eekuepAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACSElE + QVQ4T82RW0iTARTHzze/fX6bs83dSqeu3FziVhlomspKMFq2RJQIy5AgK5UkBZOMAskgqmVSPST5ki92 + vxhhYGWw7hYriSSTrRtUVC9diIz+nc/5EET06h9+b//fOQcOTf1UGWnaFquhqs5i7G+eYf7emGz9VanX + DZdKUulk5e9sJlIHki3+PTZrb2dq0tcTbieuZrvR53HiuM2CTkM81qrFn0uIfJNKNLunm/L2J5oPd9mT + 3t/IykDY50WkrBhD3hxccaTgnF6HXjEGRwTCdiIUE92ZENs9HlfANev2BXc6Ropy8aW6HB/WrcSYbxFC + GWm4adBhUFThGkuDzGmmnSlVCT+ouWC+7dDi/DeRmjV419qI8KZqPCspwvDsNDyI02CItz3kcoh5yjxn + gsw+vmSFqPpG23Kyuh811OBVx16MNDXgvrcAwTgZt7h0l1HkJ4wivmBeM33MDrMJXqIB2jXP83G0tQWj + BwIILi9Bf1IiLquEiXOVTfcYZchjRhl4TCujxWrBMjFmfCFRIbWlpuC634+BinKczZqDU8kWnJQEnOfT + lU2XmItMl6zBVosZZXIs8onG8oiib6xPMHzqSbejO9OBow4bv0hGQEU4yFIH067RoM6UAF+shGyicC7R + etbECVlJuVbqaTNqsdOkQ5NOQj1vrmWxVpaxWm9AoaSGmygyl2gD19VR648UEc1cKtLbSkmFVbFqVGi1 + 8MfrsEAtwkn0ktnINSna/kc8RA63QGcyBfrsEmjcThRi+JD/iFMgRL8BX5rwPPIz/LEAAAAASUVORK5C + YII= + + + + + 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 + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACj0lE + QVQ4T82S60vTYRiGf59qeEK3qXnYZm7zkDZTc6lzVtrItE2FaViRtFFtLctULM1KO0lZkVqiCEnmAUwz + /OAUSjPkp2k5SpRamiYWzLmtBTWy7G6tgR/qD/CC+9t9vTw8z0usfg5kZ1MqKiqS8/Pz66whVSrVfF5e + HlleXi6yV/7lMItFOSfk77mcltzW8qjL3NnRDqPRAIvFArPZbEtVVdXP0tLSHXblL1eE0fwL22Jqrovi + jQ8zd2M0SwLNfgnmHvdAb5UMBgNMJhN0Oh2mpqagUChe28RLfB7npjBqsD09CWM5cmhzD2E4OQ4DYX4Y + 5TEwG8XGF81L6Bd00Gq10Gg0GBkZgVKpXCaKghje1fzQ+fni41i4eArj6YkgeUxMbAmAflc0LNIEfEsV + 4qM8A28nXoEkSfT39+NJXx9kMtkSUcL2qZ8uPgFTWQHebw3DbEIEjGIBlqSJ+CyOw4eEcIxbHyM5VDwb + eIre3h6ou9UYHHqOgzL5C6Iy0HvxR2MtzOJYLEiEmEsRQCuKxKRgA8Yi/TEQ7IVuNh0dnhS0PujEIDmE + dzNzuHrtxnJhYVEi0SYIx9eTcnxKicWkKApkbAh6eX7o4nqgaz0N7dY0s6hoZLpienoG95tbcfZ8memI + QlViW+CdMI5pJnMnhuM2Qr05AG0hTNz1d0cDi4Z7fjQ0BfmiJZyLmiwprPc3KVU5t6z/wckm/yGXQW/t + jglBRygTDdbybbYnKll01Acz0BQRiDKuL7JojoYML+ppxbEcil1bIdtjLefoOtfFao4XaoN9URvqj7pN + XJxh+0BKc9anujkUxROEs73+fyROa4LSqI7qfXSX73vdXX6J3ZzeJLk5FGwniJVRVykE8RsUXFO4ZPd2 + tQAAAABJRU5ErkJggg== + + + + + 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 + AAAAAElFTkSuQmCC + + + + + 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 + 6wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAAChUlE + QVQ4T82SX0hTcRTHLzXRrTtMp4lmOnOWNqkHwYUKmS7dLBNMLbSUFua9juXYdHPin7lKzWWYRbBJEViJ + f0KMcvqglsi1pBoKgZoihBFL55IgKbJvtzXwpd79wBd+D+cD53fOIbY+RUWFPmazOUOr1VrYMEqlckmj + 0TCNjY3HPCX/ICzZJyhDezquwNB9xVT3re9xL1ZXnVhfX8fa2po7bW1tP41Go9Rj/CU4Ux+/+6T+Ttip + utUY2gqxtgcJlY/wjJnG1y9OOJ1OuFwuOBwOzM/Pg6KoabcYlFkhCs2pGY+mLEg2DUDWNIRY2oKAnKvY + mWsGv7AdzMxHLH92YG5uDna7HZOTk6BpeoMQpBWHhOYal85Y34DusEOi74IgzwxBwU0Iy7qwv2oQIt1T + pJj6MftuCgzDYHR0FMMjI1AoFD8IQUpJe8ndl1D3ziJKb0OEuhfhl7oQUdbtfu+hOrDr3G1sP34ZYy+e + Y2hoELYBG8YnXuG84sJrQiDXrtwa+4SDTW8hNo5BVPEEIcX3IchvhR/bCT/LBJ7MACJJhc6ePowzE3i/ + +AHXmls2dDpDKrG3oAHZ1inE1AxDVN6P0Iv32H83g5dRDW6aDtxUNbjJpdiWRGFhYREdDztRU1fvKqGU + 1e4BBso1LkmtDWH0AwQrrPDPuw6evApcqRbcoyqQUjV85TpIz5aB3b+LVqpa2Xsg3fIfyLiczvDCG6zY + At/sBuyQG1hZA1Kuh39mNUhJPjjCeCcZJalUKUt9PNom3rEykfehrBV+ejnIE7XwzaqHHxteYhG8IhOX + OcI4AxFwgO8p/w/hidGcfUdsXuL0715i2S9OZMIMR3i4nAgUb7a6RSGI390aSe+b9PsfAAAAAElFTkSu + QmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAAG90lE + QVRYR+2Ua0xTaR7GK1e5CJYWkDvCjONMXD9sNmsyyezOfjBOnNmMMaPEVSPiutnZiRPWiYYYx8so4rC0 + 3IWWlSKokCqIcr8XSi3Incqd1gItLfRKCxSK9Nm3p83uh93N7mT9tOFJ/ulJzznv7/885/++tC393ykr + KysiOzv7T2w2u5rD4ahKSkpsPB7PRv6fS05Ofkjufex89N2JQH7G5XKvEmBPZWXl5uDgIJaWlmC1WrG2 + tkZdG41GSKVS8Pl8ezM5nZ2drs7Xf7py7+1npKd+mJDNOpj/oOTZdGOTwDY5OUkBbTYb9WsymbC4uAiV + SoWFhQVoNBqqCYvFgvb2dhuLxbrnXO6/U2FhVEA264OEjB/31PPyd1sFtTEY6/4IC1OnoZHfg8mog8m8 + Dp1OB7Va/XewVquFwWCgUtDr9dQ9exUVFdnu3r37G+fy/1pleTH0vKw9ZzNYsbVFnKh1QV005sb2YXHq + YygkByF9dQjT4k8g7d6P2aHdUM/xyOJmyrkdZofay96UUqmEXC6HPamRkRG8fPkSV65cqXSi/qHyCpo7 + Jyv2RG5mdE0xL2xd1LYLatlHMMx+CvXEUQI6BlnPEQL9FPL+/VCOxmJRFg7DPBMrBhrMpkwStZWK296I + QqGATCbD+Pg4JBIJ+vv70d3djd7eXty4ccPgxDpUUhh9KCcjbLq9OQC6+T1YNfwaJvVxaN+cgmLkJN70 + fU7gB0gTe6GaiIZ2NgRLGjosy954a3UjRYNlhUaiH8DsrJIaurGxMQwNDVHArq4uiEQidHR0QNjZaW/A + 5kTTaPcLIi49KWVuLuv2wWL6HcyaBOiVZ6Ca+gxzr3+O2eHdxG00FqThMCoDsaL3w4bFE5sbLrCubcOy + 0RV6tRvUMy6QTx7E6NgM7Luhp6cHYrEYZOrtw4fW1lY0NjaiTdBm/wSrDjg3Nr6Sz7BtrB4l8G9h1p2D + bu4A1NOBpAEGKSYWZAHQzvnDpPHG+qo73m5sw9qKC4w6V2gU7piXekI+uh1T/d4YFW9DT/crAu6CUCiE + QCBAS0sLBa6trUUNqYbGFiQmJgpp+WmxwZycsKV10xFYV9mwLJ2GcdEf+nkvaBW+0Mz5kPKGXuWJpUV3 + ErkrtPNu0CrdsTDrgblJT8iGvTDe4w2J0Bd9zTvQVeMJYUs62tqEaG5uRkNDAwWurqpCbV0dxN29KHn0 + GElJSd/QUm/vvtkvjsCm9TGslq+xaqZh2UBAWg8YFjzILLhTMPWMOxRTHpgZ9YR0iDgd8MJErzfGxD4Y + FOxAT70fXj7fCQGfjqZiPzQ8vYD6hhbU1NQQcDW5roegQ4gByQj6BiT44Vay9PLly1601JTwgVXjF9hY + Z1ORWi0uWDG7wKx3hc7+TeXumJvwwBvJdkz2euG1iADbHE7t0K5qfwjL6Wh5HIB6XiCq8oNQnklHRVE8 + gTegsakJHZ0i9A9KMDE9g9EJGTKyc83kSP4l9f0L8gLW3lpOw2I+gJUlGlZNDrhW5QaVzOF4mrgdFXtT + 4O5aP3RW7ET7EzpaS+loLGagpoCJytwg8NOZKEll4q+3fFHx8BJEXX0YGB7BpHQW41I5XlTXIS2NPZGV + l+eA28Ur8KGGz7joTcoxyZo5dyilBP7a6brTB/3EsfiFP9rKCPQBA3X3magmbp9lBaGUxcSDFAa4PzCQ + e42B9CQviDqqMT07j76h13hUxidHb7qIlZETx2az3Jxoh3IzgvXLuk+geuNKJtkDikkPzBLXssHt5Kj1 + xnCHD3qbdkBU6Y/Wx3TUFgTiOXH7NJOJ0jQmigiYc5OBnO8ZyLsZgoI7YeBlHIKwaxicgvuWNFb6Aw4n + /xdO3D/r9vXwBvnYh5BL/CAl0Mk+Lwpsdz3Q6otXdSTyZ/5oeURHDZdBgcuI4+IfGSi4FYD8m0xwb4eC + eycSrKRd+OYUA5cuJqjSs+59n5ubE+zE/HslX4s8V14chOn+WLKNfDAk8CVx+5IBI5FX+aHjKYE/pKO6 + IABPMhh49BeHa15KEIrTIlCYEoE73wXj3PFgHDkcrvzqcNTVzw77+zuX/8/688W9njcuR4x31Uagt55B + oP5U3MLynWjj7yRDRkcVNwB8Ch6IUnYo+JmRKEoNdYDjdtmOfxHZd/S3Mafj99E8nMv+NKVcidx//bso + XWNJGARlDDJoDDQ/JINWyMSL/EBUZAejIjcMz/KiUJIWgluJwTgfF7Zx8svoivi493/lXOZ/07Wk2L0X + /xDbx74aauNnOPZzNTcULzihBB5KIg/B9QshOH8iwnj2WGz670/FxDhffXeKO0FzvXD2va/+eCqm/MKZ + GGXi2VDbt/Ehm1+fjFbEH4t6nnAs+vyZzz/wcz6+pS1taUvvQDTa3wC0nzKhXXM1LAAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACgklE + QVQ4T82S7UtTARSHr7Gud9OlNpXSIKI+VARJQZ+SBMteiKJ3idCalFtTiRniQGslsXStbJqSWQgrR5mK + Vi5Tp8WauaRRTsxNnc6X3ObdbfYylPTXbQ38UH+AD5xv5+F3OOcQi5+UlFRKqVTuy87OvsuWUSKRjEml + UqNCodgVaPmXs+cISnF12QmVYtOTh9XPvPW1T+Hx0PD5fPB6vf5Sq9W/5HL5zoDyF+U1zjbVdV5Z+a0w + T0vDGlhNWzHecxwelx4u1zRomgbDMHA6nRgYGIBIJPrkF2+oiHWlxRxDU0MYbJYtoIeOwmHej1FLHDyO + aMx8JzDt1cPtcsJqtcJsNsNkMkEsFs8RuTIipqKMHKMnduAnnQqnLR4TfWvBfBFg1heMGd8SMM4gjPRv + Rn/vRxiNRrS3t6NNr4dQKJwlCi6R98aHj2D2RzIrcTE1zgUzSbISB+5REsO9XFjehqLrBQdvXnegufkl + dE06GDq7cEaY1k1UlHKmMJ/PphH45uHAObIUQxYKFkMIPrTyYWwMR4smEnVqHrQ19TAYO2GzO1BYpJrL + yZElEjVaik2Pw1d3ECbtJGxmrl/seLwcugeRqC2JQpVCgLL8UAwO2qF5pEX+5StMukiS519g+W0O43as + hr0nGH3veOh+xYdeG4G6kkhoCgWoLIjCHflKFMkPgL0/I5ZkFrP/EOqX/yC7QGrft8b4Uzsbw9BWHcGm + CqC9uQJVhbGQpgmweztF74kPzxWfz6QC2gJZ6cHr8rJCpp5XRqNNE42m+7GoLV0FeaYAh5N47qR4Spaw + geAH2v9P2jFy/elDIbqMU/yZjJP8+eS9vM8HE6mLCRuJhVEXKQTxG0Hxe8cTTHv+AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/RibbonTest.Designer.cs b/Source/Krypton Components/TestForm/RibbonTest.Designer.cs new file mode 100644 index 000000000..150187513 --- /dev/null +++ b/Source/Krypton Components/TestForm/RibbonTest.Designer.cs @@ -0,0 +1,553 @@ +namespace TestForm +{ + partial class RibbonTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RibbonTest)); + this.kryptonContextMenuItems1 = new Krypton.Toolkit.KryptonContextMenuItems(); + this.kryptonContextMenuItem1 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.kryptonRibbon = new Krypton.Ribbon.KryptonRibbon(); + this.contextDefRed = new Krypton.Ribbon.KryptonRibbonContext(); + this.contextDefGreen = new Krypton.Ribbon.KryptonRibbonContext(); + this.kryptonContextMenuItem2 = new Krypton.Toolkit.KryptonContextMenuItem(); + this.tabHome = new Krypton.Ribbon.KryptonRibbonTab(); + this.contextRed = new Krypton.Ribbon.KryptonRibbonTab(); + this.contextGreen1 = new Krypton.Ribbon.KryptonRibbonTab(); + this.contextGreen2 = new Krypton.Ribbon.KryptonRibbonTab(); + this.labelOffice2007Styles = new Krypton.Toolkit.KryptonPanel(); + this.groupOffice2007Styles = new Krypton.Toolkit.KryptonGroup(); + this.radioOffice2010Black = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2010Silver = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2010Blue = new Krypton.Toolkit.KryptonRadioButton(); + this.radioSparkleOrange = new Krypton.Toolkit.KryptonRadioButton(); + this.radioSparklePurple = new Krypton.Toolkit.KryptonRadioButton(); + this.radioSparkleBlue = new Krypton.Toolkit.KryptonRadioButton(); + this.radioSystem = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2003 = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2007Black = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2007Silver = new Krypton.Toolkit.KryptonRadioButton(); + this.radioOffice2007Blue = new Krypton.Toolkit.KryptonRadioButton(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.groupAddContext = new Krypton.Toolkit.KryptonGroup(); + this.buttonAddContext = new Krypton.Toolkit.KryptonButton(); + this.panelContextColor = new Krypton.Toolkit.KryptonPanel(); + this.buttonEditColor = new Krypton.Toolkit.KryptonButton(); + this.labelContextColor = new Krypton.Toolkit.KryptonLabel(); + this.textBoxContextTitle = new Krypton.Toolkit.KryptonTextBox(); + this.labelContextTitle = new Krypton.Toolkit.KryptonLabel(); + this.labelContextName = new Krypton.Toolkit.KryptonLabel(); + this.textBoxContextName = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.groupSelectedContexts = new Krypton.Toolkit.KryptonGroup(); + this.labelSelectedContexts = new Krypton.Toolkit.KryptonLabel(); + this.buttonSelectedApply = new Krypton.Toolkit.KryptonButton(); + this.textBoxSelectedContexts = new Krypton.Toolkit.KryptonTextBox(); + this.labelContextsInstructions = new Krypton.Toolkit.KryptonLabel(); + this.kryptonRibbonGroup1 = new Krypton.Ribbon.KryptonRibbonGroup(); + this.kryptonRibbonGroupTriple1 = new Krypton.Ribbon.KryptonRibbonGroupTriple(); + this.kryptonRibbonGroupButton1 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.kryptonRibbonGroupButton2 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + this.krgbtnTest1715 = new Krypton.Ribbon.KryptonRibbonGroupButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.labelOffice2007Styles)).BeginInit(); + this.labelOffice2007Styles.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupOffice2007Styles)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupOffice2007Styles.Panel)).BeginInit(); + this.groupOffice2007Styles.Panel.SuspendLayout(); + this.groupOffice2007Styles.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupAddContext)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupAddContext.Panel)).BeginInit(); + this.groupAddContext.Panel.SuspendLayout(); + this.groupAddContext.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.panelContextColor)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupSelectedContexts)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupSelectedContexts.Panel)).BeginInit(); + this.groupSelectedContexts.Panel.SuspendLayout(); + this.groupSelectedContexts.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonContextMenuItems1 + // + this.kryptonContextMenuItems1.Items.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItem1}); + this.kryptonContextMenuItems1.Text = ""; + // + // kryptonContextMenuItem1 + // + this.kryptonContextMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("kryptonContextMenuItem1.Image"))); + this.kryptonContextMenuItem1.Text = "Menu Item"; + // + // kryptonRibbon + // + this.kryptonRibbon.InDesignHelperMode = true; + this.kryptonRibbon.Name = "kryptonRibbon"; + this.kryptonRibbon.RibbonContexts.AddRange(new Krypton.Ribbon.KryptonRibbonContext[] { + this.contextDefRed, + this.contextDefGreen}); + this.kryptonRibbon.RibbonFileAppButton.AppButtonMenuItems.AddRange(new Krypton.Toolkit.KryptonContextMenuItemBase[] { + this.kryptonContextMenuItem2}); + this.kryptonRibbon.RibbonFileAppButton.AppButtonShowRecentDocs = false; + this.kryptonRibbon.RibbonTabs.AddRange(new Krypton.Ribbon.KryptonRibbonTab[] { + this.tabHome, + this.contextRed, + this.contextGreen1, + this.contextGreen2}); + this.kryptonRibbon.SelectedContext = "Red,Green"; + this.kryptonRibbon.SelectedTab = this.tabHome; + this.kryptonRibbon.Size = new System.Drawing.Size(922, 115); + this.kryptonRibbon.StateCommon.RibbonAppButton.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(0))))); + this.kryptonRibbon.StateCommon.RibbonAppButton.BackColor2 = System.Drawing.Color.Yellow; + this.kryptonRibbon.StateCommon.RibbonAppButton.BackColor3 = System.Drawing.Color.Lime; + this.kryptonRibbon.StateCommon.RibbonAppButton.BackColor4 = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(128)))), ((int)(((byte)(255))))); + this.kryptonRibbon.StateCommon.RibbonAppButton.BackColor5 = System.Drawing.Color.Fuchsia; + this.kryptonRibbon.TabIndex = 1; + // + // contextDefRed + // + this.contextDefRed.ContextName = "Red"; + this.contextDefRed.ContextTitle = "Red"; + // + // contextDefGreen + // + this.contextDefGreen.ContextColor = System.Drawing.Color.LimeGreen; + this.contextDefGreen.ContextName = "Green"; + this.contextDefGreen.ContextTitle = "Green"; + // + // kryptonContextMenuItem2 + // + this.kryptonContextMenuItem2.Image = ((System.Drawing.Image)(resources.GetObject("kryptonContextMenuItem2.Image"))); + this.kryptonContextMenuItem2.Text = "E&xit"; + // + // tabHome + // + this.tabHome.Groups.AddRange(new Krypton.Ribbon.KryptonRibbonGroup[] { + this.kryptonRibbonGroup1}); + this.tabHome.Text = "Home"; + // + // contextRed + // + this.contextRed.ContextName = "Red"; + this.contextRed.Text = "Red"; + // + // contextGreen1 + // + this.contextGreen1.ContextName = "Green"; + this.contextGreen1.Text = "Green1"; + // + // contextGreen2 + // + this.contextGreen2.ContextName = "Green"; + this.contextGreen2.Text = "Green2"; + // + // labelOffice2007Styles + // + this.labelOffice2007Styles.Controls.Add(this.groupOffice2007Styles); + this.labelOffice2007Styles.Controls.Add(this.groupAddContext); + this.labelOffice2007Styles.Controls.Add(this.groupSelectedContexts); + this.labelOffice2007Styles.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelOffice2007Styles.Location = new System.Drawing.Point(0, 115); + this.labelOffice2007Styles.Name = "labelOffice2007Styles"; + this.labelOffice2007Styles.Size = new System.Drawing.Size(922, 513); + this.labelOffice2007Styles.TabIndex = 2; + // + // groupOffice2007Styles + // + this.groupOffice2007Styles.GroupBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.groupOffice2007Styles.Location = new System.Drawing.Point(448, 16); + this.groupOffice2007Styles.Name = "groupOffice2007Styles"; + // + // groupOffice2007Styles.Panel + // + this.groupOffice2007Styles.Panel.Controls.Add(this.radioOffice2010Black); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioOffice2010Silver); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioOffice2010Blue); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioSparkleOrange); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioSparklePurple); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioSparkleBlue); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioSystem); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioOffice2003); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioOffice2007Black); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioOffice2007Silver); + this.groupOffice2007Styles.Panel.Controls.Add(this.radioOffice2007Blue); + this.groupOffice2007Styles.Panel.Controls.Add(this.kryptonLabel2); + this.groupOffice2007Styles.Size = new System.Drawing.Size(180, 305); + this.groupOffice2007Styles.TabIndex = 0; + // + // radioOffice2010Black + // + this.radioOffice2010Black.Location = new System.Drawing.Point(20, 84); + this.radioOffice2010Black.Name = "radioOffice2010Black"; + this.radioOffice2010Black.Size = new System.Drawing.Size(125, 20); + this.radioOffice2010Black.TabIndex = 3; + this.radioOffice2010Black.Values.Text = "Office 2010 - Black"; + // + // radioOffice2010Silver + // + this.radioOffice2010Silver.Location = new System.Drawing.Point(20, 61); + this.radioOffice2010Silver.Name = "radioOffice2010Silver"; + this.radioOffice2010Silver.Size = new System.Drawing.Size(126, 20); + this.radioOffice2010Silver.TabIndex = 2; + this.radioOffice2010Silver.Values.Text = "Office 2010 - Silver"; + // + // radioOffice2010Blue + // + this.radioOffice2010Blue.Location = new System.Drawing.Point(20, 38); + this.radioOffice2010Blue.Name = "radioOffice2010Blue"; + this.radioOffice2010Blue.Size = new System.Drawing.Size(120, 20); + this.radioOffice2010Blue.TabIndex = 1; + this.radioOffice2010Blue.Values.Text = "Office 2010 - Blue"; + // + // radioSparkleOrange + // + this.radioSparkleOrange.Location = new System.Drawing.Point(20, 222); + this.radioSparkleOrange.Name = "radioSparkleOrange"; + this.radioSparkleOrange.Size = new System.Drawing.Size(115, 20); + this.radioSparkleOrange.TabIndex = 9; + this.radioSparkleOrange.Values.Text = "Sparkle - Orange"; + // + // radioSparklePurple + // + this.radioSparklePurple.Location = new System.Drawing.Point(20, 245); + this.radioSparklePurple.Name = "radioSparklePurple"; + this.radioSparklePurple.Size = new System.Drawing.Size(109, 20); + this.radioSparklePurple.TabIndex = 10; + this.radioSparklePurple.Values.Text = "Sparkle - Purple"; + // + // radioSparkleBlue + // + this.radioSparkleBlue.Location = new System.Drawing.Point(20, 199); + this.radioSparkleBlue.Name = "radioSparkleBlue"; + this.radioSparkleBlue.Size = new System.Drawing.Size(98, 20); + this.radioSparkleBlue.TabIndex = 8; + this.radioSparkleBlue.Values.Text = "Sparkle - Blue"; + // + // radioSystem + // + this.radioSystem.Location = new System.Drawing.Point(21, 268); + this.radioSystem.Name = "radioSystem"; + this.radioSystem.Size = new System.Drawing.Size(62, 20); + this.radioSystem.TabIndex = 11; + this.radioSystem.Values.Text = "System"; + // + // radioOffice2003 + // + this.radioOffice2003.Location = new System.Drawing.Point(20, 176); + this.radioOffice2003.Name = "radioOffice2003"; + this.radioOffice2003.Size = new System.Drawing.Size(85, 20); + this.radioOffice2003.TabIndex = 7; + this.radioOffice2003.Values.Text = "Office 2003"; + // + // radioOffice2007Black + // + this.radioOffice2007Black.Location = new System.Drawing.Point(20, 153); + this.radioOffice2007Black.Name = "radioOffice2007Black"; + this.radioOffice2007Black.Size = new System.Drawing.Size(125, 20); + this.radioOffice2007Black.TabIndex = 6; + this.radioOffice2007Black.Values.Text = "Office 2007 - Black"; + // + // radioOffice2007Silver + // + this.radioOffice2007Silver.Checked = true; + this.radioOffice2007Silver.Location = new System.Drawing.Point(20, 130); + this.radioOffice2007Silver.Name = "radioOffice2007Silver"; + this.radioOffice2007Silver.Size = new System.Drawing.Size(126, 20); + this.radioOffice2007Silver.TabIndex = 5; + this.radioOffice2007Silver.Values.Text = "Office 2007 - Silver"; + // + // radioOffice2007Blue + // + this.radioOffice2007Blue.Location = new System.Drawing.Point(20, 107); + this.radioOffice2007Blue.Name = "radioOffice2007Blue"; + this.radioOffice2007Blue.Size = new System.Drawing.Size(120, 20); + this.radioOffice2007Blue.TabIndex = 4; + this.radioOffice2007Blue.Values.Text = "Office 2007 - Blue"; + // + // kryptonLabel2 + // + this.kryptonLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.TitlePanel; + this.kryptonLabel2.Location = new System.Drawing.Point(4, 4); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(135, 29); + this.kryptonLabel2.TabIndex = 0; + this.kryptonLabel2.Values.Text = "Global Palette"; + // + // groupAddContext + // + this.groupAddContext.GroupBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.groupAddContext.Location = new System.Drawing.Point(16, 160); + this.groupAddContext.Name = "groupAddContext"; + // + // groupAddContext.Panel + // + this.groupAddContext.Panel.Controls.Add(this.buttonAddContext); + this.groupAddContext.Panel.Controls.Add(this.panelContextColor); + this.groupAddContext.Panel.Controls.Add(this.buttonEditColor); + this.groupAddContext.Panel.Controls.Add(this.labelContextColor); + this.groupAddContext.Panel.Controls.Add(this.textBoxContextTitle); + this.groupAddContext.Panel.Controls.Add(this.labelContextTitle); + this.groupAddContext.Panel.Controls.Add(this.labelContextName); + this.groupAddContext.Panel.Controls.Add(this.textBoxContextName); + this.groupAddContext.Panel.Controls.Add(this.kryptonLabel1); + this.groupAddContext.Size = new System.Drawing.Size(411, 161); + this.groupAddContext.TabIndex = 5; + // + // buttonAddContext + // + this.buttonAddContext.AutoSize = true; + this.buttonAddContext.Location = new System.Drawing.Point(130, 120); + this.buttonAddContext.Name = "buttonAddContext"; + this.buttonAddContext.Size = new System.Drawing.Size(97, 28); + this.buttonAddContext.TabIndex = 10; + this.buttonAddContext.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonAddContext.Values.Text = "Add Context"; + // + // panelContextColor + // + this.panelContextColor.Location = new System.Drawing.Point(130, 86); + this.panelContextColor.Name = "panelContextColor"; + this.panelContextColor.Size = new System.Drawing.Size(94, 23); + this.panelContextColor.StateCommon.Color1 = System.Drawing.Color.DodgerBlue; + this.panelContextColor.TabIndex = 9; + // + // buttonEditColor + // + this.buttonEditColor.AutoSize = true; + this.buttonEditColor.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonEditColor.Location = new System.Drawing.Point(231, 81); + this.buttonEditColor.Name = "buttonEditColor"; + this.buttonEditColor.Size = new System.Drawing.Size(79, 24); + this.buttonEditColor.TabIndex = 8; + this.buttonEditColor.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonEditColor.Values.Text = "Define Color"; + // + // labelContextColor + // + this.labelContextColor.AutoSize = false; + this.labelContextColor.Location = new System.Drawing.Point(9, 88); + this.labelContextColor.Name = "labelContextColor"; + this.labelContextColor.Size = new System.Drawing.Size(115, 22); + this.labelContextColor.StateCommon.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.labelContextColor.TabIndex = 7; + this.labelContextColor.Values.Text = "Context Color"; + // + // textBoxContextTitle + // + this.textBoxContextTitle.Location = new System.Drawing.Point(130, 58); + this.textBoxContextTitle.Name = "textBoxContextTitle"; + this.textBoxContextTitle.Size = new System.Drawing.Size(95, 23); + this.textBoxContextTitle.TabIndex = 6; + this.textBoxContextTitle.Text = "Tools"; + // + // labelContextTitle + // + this.labelContextTitle.AutoSize = false; + this.labelContextTitle.Location = new System.Drawing.Point(9, 63); + this.labelContextTitle.Name = "labelContextTitle"; + this.labelContextTitle.Size = new System.Drawing.Size(115, 22); + this.labelContextTitle.StateCommon.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.labelContextTitle.TabIndex = 5; + this.labelContextTitle.Values.Text = "Context Title"; + // + // labelContextName + // + this.labelContextName.AutoSize = false; + this.labelContextName.Location = new System.Drawing.Point(9, 38); + this.labelContextName.Name = "labelContextName"; + this.labelContextName.Size = new System.Drawing.Size(115, 22); + this.labelContextName.StateCommon.ShortText.TextH = Krypton.Toolkit.PaletteRelativeAlign.Far; + this.labelContextName.TabIndex = 4; + this.labelContextName.Values.Text = "Context Name"; + // + // textBoxContextName + // + this.textBoxContextName.Location = new System.Drawing.Point(130, 33); + this.textBoxContextName.Name = "textBoxContextName"; + this.textBoxContextName.Size = new System.Drawing.Size(95, 23); + this.textBoxContextName.TabIndex = 3; + this.textBoxContextName.Text = "Blue"; + // + // kryptonLabel1 + // + this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.TitlePanel; + this.kryptonLabel1.Location = new System.Drawing.Point(4, 2); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(122, 29); + this.kryptonLabel1.TabIndex = 2; + this.kryptonLabel1.Values.Text = "Add Context"; + // + // groupSelectedContexts + // + this.groupSelectedContexts.GroupBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.groupSelectedContexts.Location = new System.Drawing.Point(16, 16); + this.groupSelectedContexts.Name = "groupSelectedContexts"; + // + // groupSelectedContexts.Panel + // + this.groupSelectedContexts.Panel.Controls.Add(this.labelSelectedContexts); + this.groupSelectedContexts.Panel.Controls.Add(this.buttonSelectedApply); + this.groupSelectedContexts.Panel.Controls.Add(this.textBoxSelectedContexts); + this.groupSelectedContexts.Panel.Controls.Add(this.labelContextsInstructions); + this.groupSelectedContexts.Size = new System.Drawing.Size(411, 129); + this.groupSelectedContexts.TabIndex = 4; + // + // labelSelectedContexts + // + this.labelSelectedContexts.LabelStyle = Krypton.Toolkit.LabelStyle.TitlePanel; + this.labelSelectedContexts.Location = new System.Drawing.Point(4, 2); + this.labelSelectedContexts.Name = "labelSelectedContexts"; + this.labelSelectedContexts.Size = new System.Drawing.Size(168, 29); + this.labelSelectedContexts.TabIndex = 1; + this.labelSelectedContexts.Values.Text = "Selected Contexts"; + // + // buttonSelectedApply + // + this.buttonSelectedApply.AutoSize = true; + this.buttonSelectedApply.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.buttonSelectedApply.Location = new System.Drawing.Point(311, 35); + this.buttonSelectedApply.Name = "buttonSelectedApply"; + this.buttonSelectedApply.Size = new System.Drawing.Size(42, 24); + this.buttonSelectedApply.TabIndex = 3; + this.buttonSelectedApply.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonSelectedApply.Values.Text = "Apply"; + // + // textBoxSelectedContexts + // + this.textBoxSelectedContexts.Location = new System.Drawing.Point(9, 36); + this.textBoxSelectedContexts.Name = "textBoxSelectedContexts"; + this.textBoxSelectedContexts.Size = new System.Drawing.Size(296, 23); + this.textBoxSelectedContexts.TabIndex = 0; + this.textBoxSelectedContexts.Text = "Red,Green"; + // + // labelContextsInstructions + // + this.labelContextsInstructions.Location = new System.Drawing.Point(5, 64); + this.labelContextsInstructions.Name = "labelContextsInstructions"; + this.labelContextsInstructions.Size = new System.Drawing.Size(318, 52); + this.labelContextsInstructions.TabIndex = 2; + this.labelContextsInstructions.Values.Text = "Use a common separated list of context names and then\r\npress the \'Apply\' button. " + + "To remove all contextual tabs\r\njust remove all the text and press \'Apply\'."; + // + // kryptonRibbonGroup1 + // + this.kryptonRibbonGroup1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupContainer[] { + this.kryptonRibbonGroupTriple1}); + // + // kryptonRibbonGroupTriple1 + // + this.kryptonRibbonGroupTriple1.Items.AddRange(new Krypton.Ribbon.KryptonRibbonGroupItem[] { + this.kryptonRibbonGroupButton1, + this.kryptonRibbonGroupButton2, + this.krgbtnTest1715}); + // + // krgbtnTest1715 + // + this.krgbtnTest1715.TextLine1 = "Test"; + this.krgbtnTest1715.TextLine2 = "#1715"; + this.krgbtnTest1715.Click += new System.EventHandler(this.krgbtnTest1715_Click); + // + // RibbonTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(922, 628); + this.CloseBox = false; + this.Controls.Add(this.labelOffice2007Styles); + this.Controls.Add(this.kryptonRibbon); + this.Name = "RibbonTest"; + this.Text = "RibbonTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonRibbon)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.labelOffice2007Styles)).EndInit(); + this.labelOffice2007Styles.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupOffice2007Styles.Panel)).EndInit(); + this.groupOffice2007Styles.Panel.ResumeLayout(false); + this.groupOffice2007Styles.Panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupOffice2007Styles)).EndInit(); + this.groupOffice2007Styles.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.groupAddContext.Panel)).EndInit(); + this.groupAddContext.Panel.ResumeLayout(false); + this.groupAddContext.Panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupAddContext)).EndInit(); + this.groupAddContext.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.panelContextColor)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.groupSelectedContexts.Panel)).EndInit(); + this.groupSelectedContexts.Panel.ResumeLayout(false); + this.groupSelectedContexts.Panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.groupSelectedContexts)).EndInit(); + this.groupSelectedContexts.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private KryptonContextMenuItems kryptonContextMenuItems1; + private KryptonContextMenuItem kryptonContextMenuItem1; + private Krypton.Ribbon.KryptonRibbon kryptonRibbon; + private Krypton.Ribbon.KryptonRibbonContext contextDefRed; + private Krypton.Ribbon.KryptonRibbonContext contextDefGreen; + private KryptonContextMenuItem kryptonContextMenuItem2; + private Krypton.Ribbon.KryptonRibbonTab tabHome; + private Krypton.Ribbon.KryptonRibbonTab contextRed; + private Krypton.Ribbon.KryptonRibbonTab contextGreen1; + private Krypton.Ribbon.KryptonRibbonTab contextGreen2; + private Krypton.Ribbon.KryptonRibbonGroup kryptonRibbonGroup1; + private Krypton.Ribbon.KryptonRibbonGroupTriple kryptonRibbonGroupTriple1; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton1; + private Krypton.Ribbon.KryptonRibbonGroupButton kryptonRibbonGroupButton2; + private Krypton.Ribbon.KryptonRibbonGroupButton krgbtnTest1715; + private KryptonPanel labelOffice2007Styles; + private KryptonGroup groupOffice2007Styles; + private KryptonRadioButton radioOffice2010Black; + private KryptonRadioButton radioOffice2010Silver; + private KryptonRadioButton radioOffice2010Blue; + private KryptonRadioButton radioSparkleOrange; + private KryptonRadioButton radioSparklePurple; + private KryptonRadioButton radioSparkleBlue; + private KryptonRadioButton radioSystem; + private KryptonRadioButton radioOffice2003; + private KryptonRadioButton radioOffice2007Black; + private KryptonRadioButton radioOffice2007Silver; + private KryptonRadioButton radioOffice2007Blue; + private KryptonLabel kryptonLabel2; + private KryptonGroup groupAddContext; + private KryptonButton buttonAddContext; + private KryptonPanel panelContextColor; + private KryptonButton buttonEditColor; + private KryptonLabel labelContextColor; + private KryptonTextBox textBoxContextTitle; + private KryptonLabel labelContextTitle; + private KryptonLabel labelContextName; + private KryptonTextBox textBoxContextName; + private KryptonLabel kryptonLabel1; + private KryptonGroup groupSelectedContexts; + private KryptonLabel labelSelectedContexts; + private KryptonButton buttonSelectedApply; + private KryptonTextBox textBoxSelectedContexts; + private KryptonLabel labelContextsInstructions; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/RibbonTest.cs b/Source/Krypton Components/TestForm/RibbonTest.cs new file mode 100644 index 000000000..9c6ccae00 --- /dev/null +++ b/Source/Krypton Components/TestForm/RibbonTest.cs @@ -0,0 +1,24 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class RibbonTest : KryptonForm + { + public RibbonTest() + { + InitializeComponent(); + } + + private void krgbtnTest1715_Click(object sender, EventArgs e) + { + kryptonRibbon.SelectedTab!.ContextName = @"Testing"; + } + } +} diff --git a/Source/Krypton Components/TestForm/RibbonTest.resx b/Source/Krypton Components/TestForm/RibbonTest.resx new file mode 100644 index 000000000..389719842 --- /dev/null +++ b/Source/Krypton Components/TestForm/RibbonTest.resx @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wQAADsEBuJFr7QAAA+hJREFUWEfNl8lSG1cUhgUBBAjNMyAGoSxSXtkhYBtjmVlDI12JUcaGYFclT5BN + 9nmDvEFYeuFFqrJJsGMnsoWNBpCQACEkhFDGrarO6uZc6CYQD1hyK8m/6eo+Vef7z3+Hqpb8b/TE3Vmb + DFhb+Neq6aW7Vf7QbqnhX0/0/URXTX7ZtlK4Zytml2yE/yy6kr5Wkpk2F3f95m8e9ulq+c9YCFjlDP7n + 5x/S4n0bZBd7RDexRcxkf8YMR/NmmvabiiGH8Xza2aUewuCCiYyIJhJehE8zuIlmpkwQnzS9vvc+QgUT + R/jcu2N9bxMJjwljN0FhzkT3/EbY5Ixv75m520OO7vXAH5/ZaGHZCunb3RWbiDM4TlyYMx7DN9wXwAWl + F7pJ4VMr/H7fSg8Xu2FnvrNsE5sYM4MWZo007TMg3FBej51AF8kvdsFvy100f6cTUjMd79yAxXwCN9A0 + MUDMVSZc0PZsBzlY6IBflzpo7rYFklPtFzbaYHCc+HCGwfUQdeorgwtKTltILmCBX+5aaHa+HRK+tjc2 + jGHMLO7DaT3d9YoAF5Twt5HsXBsUF9ro/mwrxD3mVxqzmFncx3CPDqIOkeCC4l68xdhFEjAfn2UWNV+S + xJwIx4kPp3R0B+GRCZ24cEEbbGcLx8pnhKjLwEUceo7FnWfwSR2EqwUXFMOzfBq1V1/CiUt5vxbhWgiP + a6sLFxRxGrhdjx7BOpr3aek2py2tj2k5vlx9rY/rOIy7xOAHRENTbk3pxYjm3zGAcIITAwNvIzjlUpdy + HhVNOVWwNqSq7hKchadcGmBTrw1ruKRDBVlOQbfGFRCyK6tj4uWYluDEcOBVI1wNayOaU1DolooweNYl + p4lROTwbVIhr4sWoluA6n8CdCB9WvwJ4flNJGDzjkNH4sAyCA3JxTBzDcWK2zizq18EFBW/ICYNnxpro + 5q1m+Oma7P1M4BoTNnFu8gQeGnozXNDP11vIhr0J9kakNHazEZ72N1dmAjcXSeLOzk0q6daEEp7jOvOl + C/X0qozEBhshPdRAozek8OMnTeWZCGHMbOIcx8Pt5R+vJ31NJDrQALv2Ohq5Xg+PP5a+Ww8W89aEcKyU + 8KwCuKDHvY0kcq0edgZrafhqHaxeaXh7LxYzmzjrVtDEmAKCuLP5UsV6dEVKwv0fwPZADV3H5yq+86Xz + YvAETpx141kWCS5o9XIDYXDBxKN/JvFdv7plY1RZZBdJHM9ycFD82+yHy9JTE2t9dcUHl5rlfEki+foj + U214SLESG5YXg2LfYmfEJmfwYG/9yhc6w/n/wy+Nmppve1V/u6qSHlyStXzVfua/8L+VRPIXlBf+oaoZ + a9MAAAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/StartScreen.Designer.cs b/Source/Krypton Components/TestForm/StartScreen.Designer.cs new file mode 100644 index 000000000..0a501ed64 --- /dev/null +++ b/Source/Krypton Components/TestForm/StartScreen.Designer.cs @@ -0,0 +1,470 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using Krypton.Toolkit; + +namespace TestForm +{ + partial class StartScreen + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(StartScreen)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnRibbonNavigatorWorkspace = new Krypton.Toolkit.KryptonButton(); + this.kbtnAbout = new Krypton.Toolkit.KryptonButton(); + this.kbtnInputBox = new Krypton.Toolkit.KryptonButton(); + this.kbtnHeaderExamples = new Krypton.Toolkit.KryptonButton(); + this.kbtnDataGrid = new Krypton.Toolkit.KryptonButton(); + this.kbtnControlsTest = new Krypton.Toolkit.KryptonButton(); + this.kbtnThemeControls = new Krypton.Toolkit.KryptonButton(); + this.kbtnWorkspace = new Krypton.Toolkit.KryptonButton(); + this.kbtnCalendar = new Krypton.Toolkit.KryptonButton(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kbtnOutlookGrid = new Krypton.Toolkit.KryptonButton(); + this.btnColourTestimonials = new Krypton.Toolkit.KryptonButton(); + this.kbtnTreeView = new Krypton.Toolkit.KryptonButton(); + this.kbtnExit = new Krypton.Toolkit.KryptonButton(); + this.kbtnFormBorder = new Krypton.Toolkit.KryptonButton(); + this.kbtnToast = new Krypton.Toolkit.KryptonButton(); + this.kbtnTheme = new Krypton.Toolkit.KryptonButton(); + this.kbtnTextBox = new Krypton.Toolkit.KryptonButton(); + this.kbtnRibbon = new Krypton.Toolkit.KryptonButton(); + this.kbtnProgressBar = new Krypton.Toolkit.KryptonButton(); + this.kbtnButtons = new Krypton.Toolkit.KryptonButton(); + this.kbtnAboutBox = new Krypton.Toolkit.KryptonButton(); + this.kbtnMessageBox = new Krypton.Toolkit.KryptonButton(); + this.kbtnMenuToolStatusStrips = new Krypton.Toolkit.KryptonButton(); + this.kbtnGroupBox = new Krypton.Toolkit.KryptonButton(); + this.kbtnFadeForm = new Krypton.Toolkit.KryptonButton(); + this.kbtnCommandLinkButtons = new Krypton.Toolkit.KryptonButton(); + this.kbtnBreadCrumb = new Krypton.Toolkit.KryptonButton(); + this.kryptonManager1 = new Krypton.Toolkit.KryptonManager(this.components); + this.kbtnPropertyGrid = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnPropertyGrid); + this.kryptonPanel1.Controls.Add(this.kbtnRibbonNavigatorWorkspace); + this.kryptonPanel1.Controls.Add(this.kbtnAbout); + this.kryptonPanel1.Controls.Add(this.kbtnInputBox); + this.kryptonPanel1.Controls.Add(this.kbtnHeaderExamples); + this.kryptonPanel1.Controls.Add(this.kbtnDataGrid); + this.kryptonPanel1.Controls.Add(this.kbtnControlsTest); + this.kryptonPanel1.Controls.Add(this.kbtnThemeControls); + this.kryptonPanel1.Controls.Add(this.kbtnWorkspace); + this.kryptonPanel1.Controls.Add(this.kbtnCalendar); + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Controls.Add(this.kbtnOutlookGrid); + this.kryptonPanel1.Controls.Add(this.btnColourTestimonials); + this.kryptonPanel1.Controls.Add(this.kbtnTreeView); + this.kryptonPanel1.Controls.Add(this.kbtnExit); + this.kryptonPanel1.Controls.Add(this.kbtnFormBorder); + this.kryptonPanel1.Controls.Add(this.kbtnToast); + this.kryptonPanel1.Controls.Add(this.kbtnTheme); + this.kryptonPanel1.Controls.Add(this.kbtnTextBox); + this.kryptonPanel1.Controls.Add(this.kbtnRibbon); + this.kryptonPanel1.Controls.Add(this.kbtnProgressBar); + this.kryptonPanel1.Controls.Add(this.kbtnButtons); + this.kryptonPanel1.Controls.Add(this.kbtnAboutBox); + this.kryptonPanel1.Controls.Add(this.kbtnMessageBox); + this.kryptonPanel1.Controls.Add(this.kbtnMenuToolStatusStrips); + this.kryptonPanel1.Controls.Add(this.kbtnGroupBox); + this.kryptonPanel1.Controls.Add(this.kbtnFadeForm); + this.kryptonPanel1.Controls.Add(this.kbtnCommandLinkButtons); + this.kryptonPanel1.Controls.Add(this.kbtnBreadCrumb); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(440, 480); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnRibbonNavigatorWorkspace + // + this.kbtnRibbonNavigatorWorkspace.Location = new System.Drawing.Point(13, 319); + this.kbtnRibbonNavigatorWorkspace.Name = "kbtnRibbonNavigatorWorkspace"; + this.kbtnRibbonNavigatorWorkspace.Size = new System.Drawing.Size(204, 25); + this.kbtnRibbonNavigatorWorkspace.TabIndex = 27; + this.kbtnRibbonNavigatorWorkspace.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnRibbonNavigatorWorkspace.Values.Text = "Ribbon/Navigator/Workspace"; + this.kbtnRibbonNavigatorWorkspace.Click += new System.EventHandler(this.kbtnRibbonNavigatorWorkspace_Click); + // + // kbtnAbout + // + this.kbtnAbout.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnAbout.Location = new System.Drawing.Point(12, 40); + this.kbtnAbout.Name = "kbtnAbout"; + this.kbtnAbout.Size = new System.Drawing.Size(204, 25); + this.kbtnAbout.TabIndex = 26; + this.kbtnAbout.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnAbout.Values.Text = "About Box"; + this.kbtnAbout.Click += new System.EventHandler(this.kbtnAbout_Click); + // + // kbtnInputBox + // + this.kbtnInputBox.Location = new System.Drawing.Point(223, 195); + this.kbtnInputBox.Name = "kbtnInputBox"; + this.kbtnInputBox.Size = new System.Drawing.Size(204, 25); + this.kbtnInputBox.TabIndex = 25; + this.kbtnInputBox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnInputBox.Values.Text = "Input Box"; + this.kbtnInputBox.Click += new System.EventHandler(this.kbtnInputBox_Click); + // + // kbtnHeaderExamples + // + this.kbtnHeaderExamples.Location = new System.Drawing.Point(13, 195); + this.kbtnHeaderExamples.Name = "kbtnHeaderExamples"; + this.kbtnHeaderExamples.Size = new System.Drawing.Size(204, 25); + this.kbtnHeaderExamples.TabIndex = 24; + this.kbtnHeaderExamples.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnHeaderExamples.Values.Text = "Header Examples"; + this.kbtnHeaderExamples.Click += new System.EventHandler(this.kbtnHeaderExamples_Click); + // + // kbtnDataGrid + // + this.kbtnDataGrid.Location = new System.Drawing.Point(13, 133); + this.kbtnDataGrid.Name = "kbtnDataGrid"; + this.kbtnDataGrid.Size = new System.Drawing.Size(204, 25); + this.kbtnDataGrid.TabIndex = 23; + this.kbtnDataGrid.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnDataGrid.Values.Text = "DataGrid"; + this.kbtnDataGrid.Click += new System.EventHandler(this.kbtnDataGrid_Click); + // + // kbtnControlsTest + // + this.kbtnControlsTest.Location = new System.Drawing.Point(223, 102); + this.kbtnControlsTest.Name = "kbtnControlsTest"; + this.kbtnControlsTest.Size = new System.Drawing.Size(204, 25); + this.kbtnControlsTest.TabIndex = 22; + this.kbtnControlsTest.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnControlsTest.Values.Text = "Controls Test"; + this.kbtnControlsTest.Click += new System.EventHandler(this.kbtnControlsTest_Click); + // + // kbtnThemeControls + // + this.kbtnThemeControls.Location = new System.Drawing.Point(223, 350); + this.kbtnThemeControls.Name = "kbtnThemeControls"; + this.kbtnThemeControls.Size = new System.Drawing.Size(204, 25); + this.kbtnThemeControls.TabIndex = 21; + this.kbtnThemeControls.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnThemeControls.Values.Text = "Theme Controls"; + this.kbtnThemeControls.Click += new System.EventHandler(this.kbtnThemeControls_Click); + // + // kbtnWorkspace + // + this.kbtnWorkspace.Location = new System.Drawing.Point(224, 412); + this.kbtnWorkspace.Name = "kbtnWorkspace"; + this.kbtnWorkspace.Size = new System.Drawing.Size(204, 25); + this.kbtnWorkspace.TabIndex = 20; + this.kbtnWorkspace.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnWorkspace.Values.Text = "Workspace"; + this.kbtnWorkspace.Click += new System.EventHandler(this.kbtnWorkspace_Click); + // + // kbtnCalendar + // + this.kbtnCalendar.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnCalendar.Location = new System.Drawing.Point(223, 71); + this.kbtnCalendar.Name = "kbtnCalendar"; + this.kbtnCalendar.Size = new System.Drawing.Size(204, 25); + this.kbtnCalendar.TabIndex = 19; + this.kbtnCalendar.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnCalendar.Values.Text = "Calendar"; + this.kbtnCalendar.Click += new System.EventHandler(this.kbtnCalendar_Click); + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonThemeComboBox1.DropDownWidth = 417; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(10, 11); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(417, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 18; + // + // kbtnOutlookGrid + // + this.kbtnOutlookGrid.Location = new System.Drawing.Point(12, 257); + this.kbtnOutlookGrid.Name = "kbtnOutlookGrid"; + this.kbtnOutlookGrid.Size = new System.Drawing.Size(204, 25); + this.kbtnOutlookGrid.TabIndex = 17; + this.kbtnOutlookGrid.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnOutlookGrid.Values.Text = "Outlook Grid"; + this.kbtnOutlookGrid.Click += new System.EventHandler(this.kbtnOutlookGrid_Click); + // + // btnColourTestimonials + // + this.btnColourTestimonials.Location = new System.Drawing.Point(13, 443); + this.btnColourTestimonials.Name = "btnColourTestimonials"; + this.btnColourTestimonials.Size = new System.Drawing.Size(204, 25); + this.btnColourTestimonials.TabIndex = 16; + this.btnColourTestimonials.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.btnColourTestimonials.Values.Text = "Colour Testimonials"; + this.btnColourTestimonials.Click += new System.EventHandler(this.btnColourTestimonials_Click); + // + // kbtnTreeView + // + this.kbtnTreeView.Location = new System.Drawing.Point(13, 412); + this.kbtnTreeView.Name = "kbtnTreeView"; + this.kbtnTreeView.Size = new System.Drawing.Size(204, 25); + this.kbtnTreeView.TabIndex = 16; + this.kbtnTreeView.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnTreeView.Values.Text = "TreeView"; + this.kbtnTreeView.Click += new System.EventHandler(this.kbtnTreeView_Click); + // + // kbtnExit + // + this.kbtnExit.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnExit.Location = new System.Drawing.Point(223, 443); + this.kbtnExit.Name = "kbtnExit"; + this.kbtnExit.Size = new System.Drawing.Size(204, 25); + this.kbtnExit.TabIndex = 15; + this.kbtnExit.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnExit.Values.Text = "Exit"; + this.kbtnExit.Click += new System.EventHandler(this.kbtnExit_Click); + // + // kbtnFormBorder + // + this.kbtnFormBorder.Location = new System.Drawing.Point(13, 164); + this.kbtnFormBorder.Name = "kbtnFormBorder"; + this.kbtnFormBorder.Size = new System.Drawing.Size(204, 25); + this.kbtnFormBorder.TabIndex = 14; + this.kbtnFormBorder.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnFormBorder.Values.Text = "Form Border"; + this.kbtnFormBorder.Click += new System.EventHandler(this.kbtnFormBorder_Click); + // + // kbtnToast + // + this.kbtnToast.Location = new System.Drawing.Point(224, 381); + this.kbtnToast.Name = "kbtnToast"; + this.kbtnToast.Size = new System.Drawing.Size(204, 25); + this.kbtnToast.TabIndex = 13; + this.kbtnToast.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnToast.Values.Text = "Toast"; + this.kbtnToast.Click += new System.EventHandler(this.kbtnToast_Click); + // + // kbtnTheme + // + this.kbtnTheme.Location = new System.Drawing.Point(12, 381); + this.kbtnTheme.Name = "kbtnTheme"; + this.kbtnTheme.Size = new System.Drawing.Size(204, 25); + this.kbtnTheme.TabIndex = 12; + this.kbtnTheme.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnTheme.Values.Text = "Theme"; + this.kbtnTheme.Click += new System.EventHandler(this.kbtnTheme_Click); + // + // kbtnTextBox + // + this.kbtnTextBox.Location = new System.Drawing.Point(13, 350); + this.kbtnTextBox.Name = "kbtnTextBox"; + this.kbtnTextBox.Size = new System.Drawing.Size(204, 25); + this.kbtnTextBox.TabIndex = 11; + this.kbtnTextBox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnTextBox.Values.Text = "TextBox"; + this.kbtnTextBox.Click += new System.EventHandler(this.kbtnTextBox_Click); + // + // kbtnRibbon + // + this.kbtnRibbon.Location = new System.Drawing.Point(223, 319); + this.kbtnRibbon.Name = "kbtnRibbon"; + this.kbtnRibbon.Size = new System.Drawing.Size(204, 25); + this.kbtnRibbon.TabIndex = 10; + this.kbtnRibbon.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnRibbon.Values.Text = "Ribbon"; + this.kbtnRibbon.Click += new System.EventHandler(this.kbtnRibbon_Click); + // + // kbtnProgressBar + // + this.kbtnProgressBar.Location = new System.Drawing.Point(12, 288); + this.kbtnProgressBar.Name = "kbtnProgressBar"; + this.kbtnProgressBar.Size = new System.Drawing.Size(204, 25); + this.kbtnProgressBar.TabIndex = 9; + this.kbtnProgressBar.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnProgressBar.Values.Text = "ProgressBar"; + this.kbtnProgressBar.Click += new System.EventHandler(this.kbtnProgressBar_Click); + // + // kbtnButtons + // + this.kbtnButtons.Location = new System.Drawing.Point(13, 71); + this.kbtnButtons.Name = "kbtnButtons"; + this.kbtnButtons.Size = new System.Drawing.Size(204, 25); + this.kbtnButtons.TabIndex = 8; + this.kbtnButtons.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnButtons.Values.Text = "Buttons"; + this.kbtnButtons.Click += new System.EventHandler(this.kbtnButtons_Click); + // + // kbtnAboutBox + // + this.kbtnAboutBox.Location = new System.Drawing.Point(224, 257); + this.kbtnAboutBox.Name = "kbtnAboutBox"; + this.kbtnAboutBox.Size = new System.Drawing.Size(204, 25); + this.kbtnAboutBox.TabIndex = 7; + this.kbtnAboutBox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnAboutBox.Values.Text = "Old Style Main: \"Fullscreen\""; + this.kbtnAboutBox.Click += new System.EventHandler(this.kbtnAboutBox_Click); + // + // kbtnMessageBox + // + this.kbtnMessageBox.Location = new System.Drawing.Point(223, 226); + this.kbtnMessageBox.Name = "kbtnMessageBox"; + this.kbtnMessageBox.Size = new System.Drawing.Size(204, 25); + this.kbtnMessageBox.TabIndex = 6; + this.kbtnMessageBox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnMessageBox.Values.Text = "MessageBox"; + this.kbtnMessageBox.Click += new System.EventHandler(this.kbtnMessageBox_Click); + // + // kbtnMenuToolStatusStrips + // + this.kbtnMenuToolStatusStrips.Location = new System.Drawing.Point(13, 226); + this.kbtnMenuToolStatusStrips.Name = "kbtnMenuToolStatusStrips"; + this.kbtnMenuToolStatusStrips.Size = new System.Drawing.Size(204, 25); + this.kbtnMenuToolStatusStrips.TabIndex = 5; + this.kbtnMenuToolStatusStrips.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnMenuToolStatusStrips.Values.Text = "Menu/Tool/Status Strips"; + this.kbtnMenuToolStatusStrips.Click += new System.EventHandler(this.kbtnMenuToolStatusStrips_Click); + // + // kbtnGroupBox + // + this.kbtnGroupBox.Location = new System.Drawing.Point(223, 164); + this.kbtnGroupBox.Name = "kbtnGroupBox"; + this.kbtnGroupBox.Size = new System.Drawing.Size(204, 25); + this.kbtnGroupBox.TabIndex = 4; + this.kbtnGroupBox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnGroupBox.Values.Text = "GroupBox"; + this.kbtnGroupBox.Click += new System.EventHandler(this.kbtnGroupBox_Click); + // + // kbtnFadeForm + // + this.kbtnFadeForm.Location = new System.Drawing.Point(223, 133); + this.kbtnFadeForm.Name = "kbtnFadeForm"; + this.kbtnFadeForm.Size = new System.Drawing.Size(204, 25); + this.kbtnFadeForm.TabIndex = 3; + this.kbtnFadeForm.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnFadeForm.Values.Text = "Fade Form"; + this.kbtnFadeForm.Click += new System.EventHandler(this.kbtnFadeForm_Click); + // + // kbtnCommandLinkButtons + // + this.kbtnCommandLinkButtons.Location = new System.Drawing.Point(13, 102); + this.kbtnCommandLinkButtons.Name = "kbtnCommandLinkButtons"; + this.kbtnCommandLinkButtons.Size = new System.Drawing.Size(204, 25); + this.kbtnCommandLinkButtons.TabIndex = 2; + this.kbtnCommandLinkButtons.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnCommandLinkButtons.Values.Text = "CommandLink Buttons"; + this.kbtnCommandLinkButtons.Click += new System.EventHandler(this.kbtnCommandLinkButtons_Click); + // + // kbtnBreadCrumb + // + this.kbtnBreadCrumb.Location = new System.Drawing.Point(223, 40); + this.kbtnBreadCrumb.Name = "kbtnBreadCrumb"; + this.kbtnBreadCrumb.Size = new System.Drawing.Size(204, 25); + this.kbtnBreadCrumb.TabIndex = 1; + this.kbtnBreadCrumb.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnBreadCrumb.Values.Text = "BreadCrumb"; + this.kbtnBreadCrumb.Click += new System.EventHandler(this.kbtnBreadCrumb_Click); + // + // kryptonManager1 + // + this.kryptonManager1.BaseFont = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + // + // kbtnPropertyGrid + // + this.kbtnPropertyGrid.Location = new System.Drawing.Point(224, 288); + this.kbtnPropertyGrid.Name = "kbtnPropertyGrid"; + this.kbtnPropertyGrid.Size = new System.Drawing.Size(204, 25); + this.kbtnPropertyGrid.TabIndex = 28; + this.kbtnPropertyGrid.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnPropertyGrid.Values.Text = "PropertyGrid"; + this.kbtnPropertyGrid.Click += new System.EventHandler(this.kbtnPropertyGrid_Click); + // + // StartScreen + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.kbtnExit; + this.ClientSize = new System.Drawing.Size(440, 480); + this.Controls.Add(this.kryptonPanel1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.Name = "StartScreen"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Welcome"; + this.Load += new System.EventHandler(this.StartScreen_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonButton kbtnMessageBox; + private Krypton.Toolkit.KryptonButton kbtnMenuToolStatusStrips; + private Krypton.Toolkit.KryptonButton kbtnGroupBox; + private Krypton.Toolkit.KryptonButton kbtnFadeForm; + private Krypton.Toolkit.KryptonButton kbtnCommandLinkButtons; + private Krypton.Toolkit.KryptonButton kbtnBreadCrumb; + private Krypton.Toolkit.KryptonButton kbtnAboutBox; + private Krypton.Toolkit.KryptonButton kbtnButtons; + private Krypton.Toolkit.KryptonButton kbtnRibbon; + private Krypton.Toolkit.KryptonButton kbtnProgressBar; + private Krypton.Toolkit.KryptonButton kbtnTheme; + private Krypton.Toolkit.KryptonButton kbtnTextBox; + private Krypton.Toolkit.KryptonButton kbtnFormBorder; + private Krypton.Toolkit.KryptonButton kbtnToast; + private Krypton.Toolkit.KryptonButton kbtnExit; + private Krypton.Toolkit.KryptonButton kbtnTreeView; + private Krypton.Toolkit.KryptonButton kbtnOutlookGrid; + private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonButton kbtnCalendar; + private KryptonManager kryptonManager1; + private KryptonButton kbtnWorkspace; + private KryptonButton kbtnThemeControls; + private KryptonButton kbtnControlsTest; + private KryptonButton kbtnDataGrid; + private KryptonButton kbtnInputBox; + private KryptonButton kbtnHeaderExamples; + private KryptonButton kbtnAbout; + private KryptonButton btnColourTestimonials; + private KryptonButton kbtnRibbonNavigatorWorkspace; + private KryptonButton kbtnPropertyGrid; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/StartScreen.cs b/Source/Krypton Components/TestForm/StartScreen.cs new file mode 100644 index 000000000..e1de329e0 --- /dev/null +++ b/Source/Krypton Components/TestForm/StartScreen.cs @@ -0,0 +1,213 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class StartScreen : KryptonForm + { + public StartScreen() + { + InitializeComponent(); + } + + private void StartScreen_Load(object sender, EventArgs e) + { + + } + + private void kbtnAboutBox_Click(object sender, EventArgs e) + { + var main = new Main(); + main.Show(); + } + + private void kbtnBreadCrumb_Click(object sender, EventArgs e) + { + var breadCrumb = new BreadCrumbTest(); + + breadCrumb.Show(); + } + + private void kbtnButtons_Click(object sender, EventArgs e) + { + var buttons = new ButtonsTest(); + + buttons.Show(); + } + + private void kbtnCommandLinkButtons_Click(object sender, EventArgs e) + { + var commandLinkButtons = new CommandLinkButtons(); + + commandLinkButtons.Show(); + } + + private void kbtnFadeForm_Click(object sender, EventArgs e) + { + var fadeForm = new FadeFormTest(); + + fadeForm.Show(); + } + + private void kbtnFormBorder_Click(object sender, EventArgs e) + { + var formBorder = new FormBorderTest(); + + formBorder.Show(); + } + + private void kbtnGroupBox_Click(object sender, EventArgs e) + { + var groupBox = new GroupBoxTest(); + + groupBox.Show(); + } + + private void kbtnMenuToolStatusStrips_Click(object sender, EventArgs e) + { + var menuToolBarStatusStrip = new MenuToolBarStatusStripTest(); + + menuToolBarStatusStrip.Show(); + } + + private void kbtnMessageBox_Click(object sender, EventArgs e) + { + var messageBox = new MessageBoxTest(); + + messageBox.Show(); + } + + private void kbtnProgressBar_Click(object sender, EventArgs e) + { + var progressBar = new ProgressBarTest(); + + progressBar.Show(); + } + + private void kbtnRibbon_Click(object sender, EventArgs e) + { + var ribbon = new RibbonTest(); + + ribbon.Show(); + } + + private void kbtnTextBox_Click(object sender, EventArgs e) + { + var textBoxEvent = new TextBoxEventTest(); + + textBoxEvent.Show(); + } + + private void kbtnTheme_Click(object sender, EventArgs e) + { + var theme = new ThemeTest(); + + theme.Show(); + } + + private void kbtnToast_Click(object sender, EventArgs e) + { + var toastNotification = new ToastNotificationTestChoice(); + + toastNotification.Show(); + } + + private void kbtnExit_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + + Close(); + } + + private void kbtnTreeView_Click(object sender, EventArgs e) + { + var treeViewExample = new TreeViewExample(); + + treeViewExample.Show(); + } + + private void kbtnOutlookGrid_Click(object sender, EventArgs e) + { + var outlookGridTest = new OutlookGridTest(); + + outlookGridTest.Show(); + } + + private void kbtnCalendar_Click(object sender, EventArgs e) + { + var calendarTest = new CalendarTest(); + + calendarTest.Show(); + } + + private void kbtnWorkspace_Click(object sender, EventArgs e) + { + var workspaceTest = new WorkspaceTest(); + + workspaceTest.Show(); + } + + private void kbtnThemeControls_Click(object sender, EventArgs e) + { + var themeControls = new ThemeControlExamples(); + + themeControls.Show(); + } + + private void kbtnControlsTest_Click(object sender, EventArgs e) + { + var controlsTest = new ControlsTest(); + + controlsTest.Show(); + } + + private void kbtnDataGrid_Click(object sender, EventArgs e) + { + var dataGrid = new DataGridViewTest(); + + dataGrid.Show(); + } + + private void kbtnHeaderExamples_Click(object sender, EventArgs e) + { + var headerExamples = new HeaderExamples(); + + headerExamples.Show(); + } + + private void kbtnInputBox_Click(object sender, EventArgs e) + { + var inputBox = new InputBoxTest(); + + inputBox.Show(); + } + + private void kbtnAbout_Click(object sender, EventArgs e) + { + var aboutBox = new AboutBoxTest(); + + aboutBox.Show(); + } + + private void btnColourTestimonials_Click(object sender, EventArgs e) + { + new ColorTestimonials().Show(); + } + + private void kbtnRibbonNavigatorWorkspace_Click(object sender, EventArgs e) + { + new RibbonNavigatorWorkspaceTest().Show(); + } + + private void kbtnPropertyGrid_Click(object sender, EventArgs e) + { + new PropertyGridTest().Show(); + } + } +} diff --git a/Source/Krypton Components/TestForm/StartScreen.resx b/Source/Krypton Components/TestForm/StartScreen.resx new file mode 100644 index 000000000..8855bb0c3 --- /dev/null +++ b/Source/Krypton Components/TestForm/StartScreen.resx @@ -0,0 +1,440 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + AAABAAUAMDAAAAEAIACoJQAAVgAAACAgAAABACAAqBAAAP4lAAAgIAAAAQAIAKgIAACmNgAAEBAAAAEA + IABoBAAATj8AABAQAAABAAgAaAUAALZDAAAoAAAAMAAAAGAAAAABACAAAAAAAABIAAAAAAAAAAAAAAAA + AAAAAAAAAAAAADMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMzMwozMzMKMzMzCjMz + MwozMzMKMzMzCioqKgYAAAAAs+SwWJHMj/+Qy47/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/kMuO/36xfO4qVSoG2P7WcKjspv93xXf/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+ + af9ovmn/aL5p/2i+af9ovmn/aL5p/2i+af9ovmn/b7Vv/5XRk/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + eP+R5Jr/dt13/3zff/+F4Yv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/bspv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/943nr/huGM/4fh + jf+O45f/luWg/3feeP+m6bT/sOzA/4zjlP+x7cH/heGL/3bdd/+N45X/heGL/4Hghf+L4pP/fN9//4Lg + h/+I4Y//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+A4IT/uvDM/7/x0/+X5aL/vfHQ/3bdd/+v7L//wfLU/4zjlP+98dD/w/PX/4nij/++8dH/i+KS/8Dy + 1P++8dH/n+is/6bptP+578v/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+A4IT/xfPa/7zwzv+a5qX/w/PY/7Ltw/+78M7/q+u6/5/nq//B8tX/w/PX/6fq + tf++8dH/jOKT/8Dx0//C8tb/neep/8Dy0/++8dH/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/9/34P/q+u6/7DswP+C4If/geCG/3/fg/+B4Ib/e95+/4Df + hP+D4Ij/ft+B/5Tlnv+p6rj/ft+C/3reff+B4IX/et58/4PgiP9833//dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/d954/3jeef943nn/eN55/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fe + eP943nn/eN55/3jeef933nj/dt13/3feeP943nn/eN55/3jeef943nn/eN55/3jeef943nn/eN55/3je + ef943nn/eN55/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/8/35f/h/fv/4f37/+H9+/+m6bT/dt13/6nquP/h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/n+er/+H9+//h/fv/4f37/9L46v933nj/dt13/6nquP/h/fv/4f37/+H9 + +//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/8Pz1/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/933nj/0fjo/+H9+//h/fv/4f37/5/nq/923Xf/dt13/6Tp + sf/Y+vD/2Prw/9j68P/b+/T/4f37/+H9+//h/fv/2vvz/9j68P/Y+vD/2Prw/7vwzv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+j6bD/4f37/+H9+//h/fv/zvbk/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3jeev/U+ez/4f37/+H9 + +//h/fv/mOWj/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6fq + tf/h/fv/4f37/+H9+//J9d7/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/et58/9f57//h/fv/4f37/+H9+/+R5Jr/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/2vvy/5jl + o/+A4IT/dt13/3bdd/923Xf/q+u7/+H9+//h/fv/4f37/8Pz2P923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/l+Wi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/4f37/+H9+//h/fv/0vjp/7Ltwv+F4Yr/2frx/+H9+//h/fv/3/35/4rikv923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/mual/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//g/fn/4f37/+H9+//h/fv/vvHR/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/ouiv/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/4f37/+H9 + +//e/Pf/heGL/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9 + +//h/fv/sOzA/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1/rv/47jlv+n6rX/yPTd/+H9 + +//h/fv/4f37/+H9+//W+e7/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/+p6rj/4f37/+H9+//h/fv/xfPZ/3bdd/923Xf/dt13/3bdd/923Xf/dt13/6LosP+s67z/rOu8/6Po + sf923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/5Tknf/U+Ov/4f37/+H9+//h/fv/yvXf/3feeP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/3fz2/33fgP923Xf/dt13/3bdd/923Xf/dt13/9P4 + 6v/h/fv/4f37/9D35v923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/9934H/zPbi/+H9+//h/fv/4f37/7Htwf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//h/fv/yfXe/7fuyP923Xf/dt13/3bd + d/923Xf/e95+/978+P/h/fv/4f37/8j03f923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/ft+C/9T57P/h/fv/4f37/978 + 9/+H4Y3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+p6rj/4f37/+H9+//g/fr/o+mw/+D9 + +v+w7cH/ed57/3bdd/923Xf/te7G/+H9+//h/fv/4f37/7jvyv923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5Xl + n//h/fv/4f37/+H9+/+/8dL/dt13/3bdd/923Xf/dt13/3bdd//F89r/3fz3/9389//f/fn/4f37/+H9 + +//Y+vD/geCF/9/9+f/h/fv/3Pv1/8/35v/W+e7/4f37/+H9+//h/fv/4f37/5flof923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd//E89n/4f37/+H9+//f/Pj/geCG/3bdd/923Xf/dt13/3bdd//I9N7/4f37/+H9 + +//h/fv/4f37/+H9+//N9uP/dt13/7nvy//h/fv/4f37/+H9+//h/fv/4f37/+H9+//h/fv/yvXg/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+U5Z7/4f37/+H9+//h/fv/reu8/3bdd/923Xf/dt13/3bd + d//I9N3/4f37/+H9+//h/fv/4f37/+H9+//B8tT/dt13/3jeev+78M3/4P36/+H9+//h/fv/4f37/+H9 + +//E89n/f9+D/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/1vnt/+H9+//h/fv/yvXg/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/guCH/57n + qv+l6bT/n+es/4Xhi/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/vfHQ/+H9 + +//h/fv/3vz3/3jeef923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/p+q1/+H9+//h/fv/4f37/5Djmf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/lOSd/+H9+//h/fv/4f37/6LosP923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9+//h/fv/1vnu/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/heGK/+H9+//h/fv/4f37/63svf923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/ue/M/+H9 + +//h/fv/1vnu/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/ft+B/+H9+//h/fv/4f37/7Lt + w/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/dt13/3bd + d/923Xf/fN9+/4Dghf+A4IX/f9+D/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt14/4Dg + hf+A4IX/gOCF/3vefv923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/b8pv/5HM + j/8zTDMK2P7WcK7urP963nv/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/et58/37fgv933nj/g+CI/3feeP923Xf/e95+/3bd + d/973n7/et58/3neev97337/dt13/3feeP+B4IX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/eN55/4Pg + iP923Xf/eN55/3/fg/923Xf/b8pv/5HMj/8zTDMK2P7WcK7urP963nv/w/PX/8Dy1P+Y5qP/reu8/7rw + zf923Xf/quu5/3bdd/+L4pL/rOu8/4Pgh/+478r/ouiw/7rwzP+378j/o+mw/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/kOSZ/6/sv/+y7cP/vPDP/7zwz/+V5Z//b8pv/5HMj/8zTDMK2P7WcK7urP963nv/uvDM/8Ly + 1v9834D/qeu4/6zru/923Xf/dt13/3jeev+B4Ib/u/DN/6Dorf+378n/vvHS/63svf/B8tT/keSa/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+e56r/w/PX/7zwz/+P45j/b8pv/5HMj/8zTDMK2P7WcK7u + rP963nv/vvHR/8Tz2P+N45T/uO/J/7fvyf923Xf/dt13/4PgiP/J9N//zfbj/6fqtv+78M7/su3C/7Pt + xP+/8dL/mOWi/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kuSb/7jvyv+t673/pemz/7nvy/963n3/b8pv/5HM + j/8zTDMK2P7WcK/urf+M4oz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/gdeB/5TQkv8zTDMK5f7lb6vuqf+177P/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/re6r/5rZmP9MZkwK////EPj++G/1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+ + 9XD1/vVw9f71cPX+9XD1/vVw9f71cPX+9XD1/vVw9f71cOf85FYAAAAA////////AACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAA + AAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAAB + AACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAP// + /////wAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAJrQmiGEuoRHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3 + gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4S3gUeEt4FHhLeBR4G1fUVvn28QvPC6jobN + hf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HA + cf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/ccBx/3HAcf9xwHH/e756/YW8 + gUXF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/et58/3vefv983n7/juOW/4Pg + iP+L4pP/eN16/3refP953Xv/et59/3fdef963Xz/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/92ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3vefv+t7Lz/m+an/6Pp + sP+e56v/sOzA/63svv+n6rX/peqz/5Pkm/+w7cD/l+Wi/6jpt/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/fN6A/7zw + 0P+c5qj/ruy+/6rruf+d56j/quu5/63svP+y7cP/kuOa/7DswP+a5qb/rey9/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/933Xn/g+CI/3vefv943Xr/eN16/3fdef953Xv/ed17/4Hfhf933Xn/eN16/3fdef933Xn/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd/+w7b//xvXa/6zsuv923Xf/dt13/3bdd/923Xf/dt13/4bhi//C89X/xvXa/6Tq + sf9/34P/vPHN/8b12v/G9dr/xvXa/8b12v/G9dr/xvXa/8Dz0/+E4In/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/uO/K/+H9 + +//Z+vL/ieKQ/4Hghv/R9+f/3vz4/9/8+f/h/fv/4f37/9/8+P/e/Pj/1vnv/4jhjv923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/47j + lv/e/Pf/4f37/77xz/943Xr/eN16/4vjkf+O5JX/q+u6/+H9+//h/fv/oOit/47klf+M45P/et58/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bd + d/953Xr/wvPV/+H9+//c+/X/iOGP/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+H9+/+O45f/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bd + d/923Xf/dt13/43jk//b+/T/4f37/6/tvv923Xf/dt13/3bdd/923Xf/dt13/5zmp//h/fv/4f37/47j + l/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9 + +//P9+X/nOin/4vjkf983n//wPHV/+H9+//V+e3/heGK/3bdd/923Xf/dt13/3bdd/923Xf/nOan/+H9 + +//h/fv/juOX/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bd + d//D8tf/4f37/+H9+//h/fv/2/v0/8z24P/f/Pn/4f37/7Puw/933Xj/dt13/3bdd/923Xf/dt13/3bd + d/+c5qf/4f37/+H9+/+V5J//dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fKd/+EvoRHxfjEk4fi + h/923Xf/dt13/8Py1//h/fv/2fry/9D35//c+/X/4f37/+H9+//c+/b/f9+E/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/5zmp//h/fv/4f37/6Xpsf923Xf/dt13/3bdd/943Xr/guCH/4Lgh/943Xr/d8p3/4S+ + hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/+/8tL/gN+E/5Hkmf/L9eD/4f37/978+P+m6rP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/nOan/+H9+//h/fv/wPLS/3bdeP923Xf/dt13/4rij//Q9ub/z/bm/4ni + jv93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3ndfP/B8tX/4Pz6/9f5 + 7/+K4pD/dt13/3bdd/923Xf/dt13/3bdd/+c5qf/4f37/+D9+v+/8dL/k+Wc/3bdd/923Xf/nuip/+D8 + +v/Z+fH/ieGO/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py1//h/fv/vvLQ/3bdd/923Xf/dt13/4Lg + h//R+Oj/4Pz6/7zwzv923Xf/dt13/3bdd/+i6a7/w/TX/8324//h/fv/2/r0/57oqv/X+u//wPLT/7zx + zv/Y+vH/4f37/9D35v+A34P/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/w/LX/+H9+/++8tD/dt13/3bd + d/923Xf/dt13/6fqtf/h/fv/3/z4/4bhjP923Xf/dt13/7Puw//h/fv/4f37/+H9+//P9ub/guCG/8v1 + 4f/g/fr/4f37/+H9+//b+/T/puqz/3bdd/93ynf/hL6ER8X4xJOH4of/dt13/3bdd//D8tf/4f37/77y + 0P923Xf/dt13/3bdd/923Xf/e95+/9r68v/h/fv/r+2+/3bdd/923Xf/heGK/5DlmP+Q5Zj/kOWY/4ri + kP923Xf/g+CH/57oqf+y7cP/quu5/43jlf933Xn/dt13/3fKd/+EvoRHxfjEk4fih/923Xf/dt13/8Py + 1//h/fv/vvLQ/3bdd/923Xf/dt13/3bdd/923Xf/wfLV/+H9+//G9Nn/d915/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/d8p3/4S+hEfF+MSTh+KH/3bd + d/923Xf/w/LX/+H9+/++8tD/dt13/3bdd/923Xf/dt13/3bdd/+q67j/4f37/8/25v9/3oP/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/93ynf/hL6ER8X4 + xJOH4of/dt13/3bdd//D8tf/4f37/77y0P923Xf/dt13/3bdd/923Xf/dt13/5rnpP/h/fv/1Pjr/4Pg + iP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3fK + d/+EvoRHxfjEk4fih/923Xf/dt13/47jlf+Y56L/jOOU/3bdd/923Xf/dt13/3bdd/923Xf/f9+E/5jn + ov+T5Z3/et58/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/d8p3/4S+hEfF+MSTh+KH/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/93ynf/hL6ER8X4xJOH4of/ed17/3fdef993oD/dt13/3jdev943Xr/eN16/3nd + e/923Xf/fN5+/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/ed16/3jdev943Xr/d915/3fKd/+EvoRHxfjEk4fih//A8dT/nOeo/67rvv+G4Iv/k+Sb/4Pf + if+l6bP/q+u7/6zrvP+478r/k+Wd/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/+S5Jz/reu9/73w0P+d5qn/d8p3/4S+hEfF+MSTh+KH/77w0f+W5qH/s+7E/4Xg + iv943Xr/qOu3/7/x0v+07cb/s+3E/7zwzv+N4pX/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/5Xkn/+s67z/r+zA/43jlf93ynf/hL6ER8f2xZOb55v/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bh + hv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/4bhhv+G4Yb/huGG/43Zjf+IwYhH4PfgQtj2 + 2JPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r4 + 2pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT2vjak9r42pPa+NqT0vTQjrnn + uSH/////AAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABgAAAASgAAAAgAAAAQAAAAAEACAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAB1wXX/est6/3bd + d/923Xj/d914/3jdef943Xr/eN56/3nee/953nz/et58/3veff97333/e95+/3zef/9833//fd+A/33f + gf9+34H/f9+D/4rQif+S25H/gOCE/4Hghv+C4If/g+CH/4ThiP+F4Yr/heGL/4bhiv+G4ov/huGM/4fh + jP+H4Y3/h+KM/4vji/+I4o7/ieKP/4zjjP+J4pD/iuOQ/4rjkf+L4pL/i+OS/4zilP+N45T/jeOV/47j + lf+P5Jb/j+SX/4/ll/+Q5Jf/kOSY/5HlmP+R5Zn/kuSa/5Lkm/+S5Zv/k+Wa/5Plm/+T5pz/lOWd/5Tl + nv+V5Z//luaf/5fnn/+W5aD/l+ag/5jmov+Z5qP/meej/5rmpf+a56X/m+el/5vnpv+c56j/muij/53o + qP+e6Kj/n+iq/5/oq/+f6av/n+is/6Dpn/+g6av/oOmt/6Horf+h6a3/oOqs/6HqrP+i6q7/pOmx/6Tp + sv+l6bL/pOqw/6Xqs/+m6rP/puuz/6jrtf+o67b/qeu3/6jstf+p7Lf/qeu4/6rruP+q67n/q+y5/63r + vf+s7Lr/rOy7/63su/+t7L3/ru29/6/sv/+v7b//sO6//7DtwP+x7sH/s+3D/7Luwv+z7sT/tO7F/7Tv + xf+378n/tvDG/7fwx/+38Mj/uPDJ/7nwyv+58Mv/ufHK/7rxy/+78M3/u/LM/7zwzv+98tD/vvHQ/77x + 0f+/8dL/vvPQ/7/z0f+/8tL/wPLT/8Dz0//A8tT/xPPY/8T02P/H9dv/xvTc/8f03P/H9dz/yvXf/8v1 + 4P/L9uD/y/bh/8z24f/M9uL/zvfj/8/35f/Q9+f/0ffo/9D45//U+ez/1vnt/9b57v/X+e//1/rv/9j6 + 8f/b+/P/2/v0/9z79f/d/Pb/3fz3/9789//e/Pj/3/z4/9/8+f/g/fn/4P36/+H9+/8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FRQAFBQA + FBQAFBQAFAAUFAAUFAAUFAAUFAAUABQUAABqFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFH0j + AgICAgICAgMJEhItIC8IDQsOCg4CAgICAgICBQAUfSMCBAICAgICDGhOTUdsbFRPP2xDWwICAgICAgIC + ARR9IwICAgICAgIMhk9kXUVeYnU6akxiAgICAgICAgYAFH0jAgICAgICAgUmEgoKBQoLGgUIBwgCAgIC + AgICAgEUfSMCAgICAgICAgICAgICAgICAgICAgICAgICAgIFABR9IwICAgICAgICAgICAgICAgICAgIC + AgICAgICAgIBFH0jAgICBQICAgICAgIEBQICBwQEBQUCAgQCAgICBgAUfSMCAm6LWQICAgICKoOIXhdz + iIiLiIuLfSMCAgIEARR9IwICk7N9AgICAgKMs6MwI5uvr7OzsaujMAICAgUAFH0jAgKTsX0CAgICKK2z + gAsLNUFus7NgQTwSAgICAgEUfSMEApOzfAICBAuIs6oaAgICBESzsysCAgICAgIFABR9IwICk7F9AgIC + OqizgAICAgICQ7OzLwICAgICAgIBFH0jBAKTs51hOhaVs54mAgICAgREs7EVAgICAgICBQAUfSMCApOx + s7Olk7GzcwoCAgICAkOxszoFAgICAgQCARR9IwIEla+imKizs68SAgICAgICRbOzWQICBAsgIxIAFH0j + AgKTsYUjU5ixsVMFBQICAgJTsbN9BQUFFZuYMwEUfSMCBJOxfAICBY+xozoCAgICAlOxsYxTAgVosaU6 + ABR9IwICk7F9AgICJp2xiAICAlOFk7GxZaN8faOxmyMAFH0jAgSTsX0CBAIFWbGxIwICbLGxsZ0jk7Gx + r6hOBQAUfSMCApOxfQICAgIMqLFiBQQjU1NTFQUjXn1zUwICARR9IwIFk7F8AgICAgWTsYUFAgIEAgIC + AgQCAgIEAgUAFH0jAgKTsX0EAgICAnOxmyMCAgICAgICAgICAgICAgEUfSMCApOxfAICAgIEXrOdJgUC + AgICAgICAgICAgQFABR9IwQCU1M1AgICAgIjU1MSAgICAgICAgQCAgICAgIBFH0jBAICBAQEAgQCAgIC + AgICAgICAgICAgICBAIFBQAUfSYMBRIFBQwMCwULAgUCAgICAgICAgICAgIFBQUFARR9JpFTdiYVI1Ni + c4UVAgICAgICBAICAgICAlNuhlYAFH0mjFN8JgVTjHx8hRUCBAQFAgQFAgQFAgUCU258UwEUhVMmJiYm + JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmFRSdk5OZk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5Obk5OMaP// + //8AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAA + AAGAAAABKAAAABAAAAAgAAAAAQAgAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAJHMj/+OyIz/jsiM/47I + jP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/47IjP+OyIz/jsiM/36wfO6u7qz/dt13/3bd + d/923Xf/dt13/4fhjf933nj/jOOU/3bdd/+B4IX/guCH/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/3bd + d/923Xf/dt13/3bdd/+w7MD/f9+D/4DfhP+U5Z7/et59/4PgiP923Xf/dt13/3bdd/923Xf/kcyP/67u + rP923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HM + j/+u7qz/dt13/3jeef923Xf/dt13/3bdd/933nj/eN55/3feeP943nn/eN55/3jeef933nj/dt13/3bd + d/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5/nq/+k6bH/2Prw/+H9+//Y+vD/u/DO/3bd + d/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/p+q1/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d/923Xf/dt13/5HMj/+u7qz/dt13/+H9+//h/fv/su3C/+H9+/+K4pL/dt13/3bdd/923Xf/4f37/3bd + d/923Xf/dt13/3bdd/+RzI//ru6s/3bdd//h/fv/juOW/+H9+//h/fv/dt13/3bdd/923Xf/dt13/+H9 + +/923Xf/dt13/6LosP+j6LH/kcyP/67urP923Xf/4f37/3bdd/923Xf/1Pns/9789/923Xf/dt13/3bd + d//h/fv/4P36/3bdd//h/fv/uO/K/5HMj/+u7qz/dt13/+H9+/923Xf/dt13/3bdd//h/fv/dt13/3bd + d//h/fv/4f37/3jeev/h/fv/4f37/3bdd/+RzI//ru6s/3bdd//h/fv/dt13/3bdd/923Xf/4f37/5Dj + mf923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/kcyP/67urP923Xf/4f37/3bdd/923Xf/dt13/+H9 + +/+y7cP/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/5HMj/+u7qz/dt13/3bdd/923Xf/dt13/3bd + d/923Xf/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/3bdd/+RzI//ru6s/8Ly1v+s67v/eN56/6Do + rf+t7L3/dt13/3bdd/923Xf/dt13/3bdd/923Xf/dt13/7fvyP+88M//kcyP/6vuqf+377b/t++2/7fv + tv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/7fvtv+377b/t++2/5rZmP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAA + AAAgAAAAAQAIAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAHbdd/933Xj/d915/3jdef943nr/et58/3ve + ff9/34L/gOCE/4HghP+B4IX/guCG/4Pgh/+H4Y3/h+KM/4jijf+I4o7/iuKR/4vjkf+L45L/jOOS/4zj + k/+N45T/juOV/4zkkv+Q5Jj/kOSZ/5Hlmf+U5pz/luae/5bmn/+X5qD/mOeh/5jmov+a56X/muik/5zo + p/+d6Kf/nuip/6DprP+h6q3/oumv/6TqsP+m67P/qey2/6nruP+q7bj/rO26/67tvP+u7b7/r+2//7bu + x/+28Mf/t/DI/7jwyP+98s//vvLQ/8Dz0//C89X/yPXd/8334//O9+T/0Pjn/9T46//V+e3/2Prw/9r7 + 8//f/Pn/4Pz5/+D9+v/h/fv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8XAwMDAwMDAwMDAwMDAwMGIwAAAAMb + FyUUFxQDAAAAAyMAAAEDIBkUHRQUAAADAwMjAAAAAAAAAAAAAAADAwMDIwAdCQABGB0PIyUhDQMDAyMA + Px0ABkErIDpEOCUDAQMjAD8dACxAAwAPRAcAAwMDIwA/PS9CKAEBD0QMAwAAAyMAPzY7RAkAAA9EGQMf + IQMjAD8dATg6AAcqRDYdPzAGJQA/HQAJRA8PNzYXOzgHBiMAPx0AAD0oAAABAAAAAAMjADYYAQAsJQAA + AAAAAwMDIwMDAwMDAAAAAAAAAAMABiMwJRIwNgkAAAAAAAAqLQM0KCooKigqKCooKigqKColAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/StaticInfos.cs b/Source/Krypton Components/TestForm/StaticInfos.cs new file mode 100644 index 000000000..8b15b759c --- /dev/null +++ b/Source/Krypton Components/TestForm/StaticInfos.cs @@ -0,0 +1,16 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public static class StaticInfos + { + public const int _GRIDCONFIG_VERSION = 1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/TestForm.csproj b/Source/Krypton Components/TestForm/TestForm.csproj index 69e5c7a82..f71ae5ef3 100644 --- a/Source/Krypton Components/TestForm/TestForm.csproj +++ b/Source/Krypton Components/TestForm/TestForm.csproj @@ -2,17 +2,21 @@ WinExe - - net48 + net462;net47;net471;net472;net48;net481;net8.0-windows;net9.0-windows enable + + 8 + latest true - preview + true + + @@ -30,4 +34,18 @@ + + + Always + + + + + + True + 4.0.0.0 + + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/TestForm.licenseheader b/Source/Krypton Components/TestForm/TestForm.licenseheader new file mode 100644 index 000000000..b7ab876ee --- /dev/null +++ b/Source/Krypton Components/TestForm/TestForm.licenseheader @@ -0,0 +1,9 @@ +extensions: .cs +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner (aka Wagnerp), Simon Coghlan (aka Smurf-IV), Giduac & Ahmed Abdelhameed et al. 2017 - 2024. All rights reserved. + * + */ +#endregion diff --git a/Source/Krypton Components/TestForm/TextBoxEventTest.Designer.cs b/Source/Krypton Components/TestForm/TextBoxEventTest.Designer.cs new file mode 100644 index 000000000..e1a320b69 --- /dev/null +++ b/Source/Krypton Components/TestForm/TextBoxEventTest.Designer.cs @@ -0,0 +1,162 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class TextBoxEventTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.txtNormalTextBox = new System.Windows.Forms.TextBox(); + this.ktxtKryptonTextBox = new Krypton.Toolkit.KryptonTextBox(); + this.lbNormalTextBoxEvents = new System.Windows.Forms.ListBox(); + this.klbKryptonTextBoxEvents = new Krypton.Toolkit.KryptonListBox(); + this.kbtnClearNormalEvents = new Krypton.Toolkit.KryptonButton(); + this.kbtnClearKryptonEvents = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnClearKryptonEvents); + this.kryptonPanel1.Controls.Add(this.kbtnClearNormalEvents); + this.kryptonPanel1.Controls.Add(this.klbKryptonTextBoxEvents); + this.kryptonPanel1.Controls.Add(this.lbNormalTextBoxEvents); + this.kryptonPanel1.Controls.Add(this.ktxtKryptonTextBox); + this.kryptonPanel1.Controls.Add(this.txtNormalTextBox); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(555, 311); + this.kryptonPanel1.TabIndex = 0; + // + // txtNormalTextBox + // + this.txtNormalTextBox.Location = new System.Drawing.Point(13, 13); + this.txtNormalTextBox.Name = "txtNormalTextBox"; + this.txtNormalTextBox.Size = new System.Drawing.Size(262, 20); + this.txtNormalTextBox.TabIndex = 0; + this.txtNormalTextBox.Click += new System.EventHandler(this.txtNormalTextBox_Click); + this.txtNormalTextBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.txtNormalTextBox_MouseClick); + this.txtNormalTextBox.DoubleClick += new System.EventHandler(this.txtNormalTextBox_DoubleClick); + this.txtNormalTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtNormalTextBox_KeyDown); + this.txtNormalTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtNormalTextBox_KeyPress); + this.txtNormalTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.txtNormalTextBox_KeyUp); + this.txtNormalTextBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.txtNormalTextBox_MouseDoubleClick); + this.txtNormalTextBox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.txtNormalTextBox_PreviewKeyDown); + this.txtNormalTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.txtNormalTextBox_Validating); + this.txtNormalTextBox.Validated += new System.EventHandler(this.txtNormalTextBox_Validated); + // + // ktxtKryptonTextBox + // + this.ktxtKryptonTextBox.Location = new System.Drawing.Point(281, 13); + this.ktxtKryptonTextBox.Name = "ktxtKryptonTextBox"; + this.ktxtKryptonTextBox.Size = new System.Drawing.Size(262, 23); + this.ktxtKryptonTextBox.TabIndex = 1; + this.ktxtKryptonTextBox.Click += new System.EventHandler(this.ktxtKryptonTextBox_Click); + this.ktxtKryptonTextBox.DoubleClick += new System.EventHandler(this.ktxtKryptonTextBox_DoubleClick); + this.ktxtKryptonTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.ktxtKryptonTextBox_KeyDown); + this.ktxtKryptonTextBox.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ktxtKryptonTextBox_KeyPress); + this.ktxtKryptonTextBox.KeyUp += new System.Windows.Forms.KeyEventHandler(this.ktxtKryptonTextBox_KeyUp); + this.ktxtKryptonTextBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.ktxtKryptonTextBox_MouseClick); + this.ktxtKryptonTextBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ktxtKryptonTextBox_MouseDoubleClick); + this.ktxtKryptonTextBox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.ktxtKryptonTextBox_PreviewKeyDown); + this.ktxtKryptonTextBox.Validating += new System.ComponentModel.CancelEventHandler(this.ktxtKryptonTextBox_Validating); + this.ktxtKryptonTextBox.Validated += new System.EventHandler(this.ktxtKryptonTextBox_Validated); + // + // lbNormalTextBoxEvents + // + this.lbNormalTextBoxEvents.FormattingEnabled = true; + this.lbNormalTextBoxEvents.Location = new System.Drawing.Point(13, 43); + this.lbNormalTextBoxEvents.Name = "lbNormalTextBoxEvents"; + this.lbNormalTextBoxEvents.Size = new System.Drawing.Size(262, 225); + this.lbNormalTextBoxEvents.TabIndex = 2; + // + // klbKryptonTextBoxEvents + // + this.klbKryptonTextBoxEvents.Location = new System.Drawing.Point(282, 43); + this.klbKryptonTextBoxEvents.Name = "klbKryptonTextBoxEvents"; + this.klbKryptonTextBoxEvents.Size = new System.Drawing.Size(261, 225); + this.klbKryptonTextBoxEvents.TabIndex = 3; + // + // kbtnClearNormalEvents + // + this.kbtnClearNormalEvents.Location = new System.Drawing.Point(13, 275); + this.kbtnClearNormalEvents.Name = "kbtnClearNormalEvents"; + this.kbtnClearNormalEvents.Size = new System.Drawing.Size(262, 25); + this.kbtnClearNormalEvents.TabIndex = 4; + this.kbtnClearNormalEvents.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnClearNormalEvents.Values.Text = "Clear Events"; + this.kbtnClearNormalEvents.Click += new System.EventHandler(this.kbtnClearNormalEvents_Click); + // + // kbtnClearKryptonEvents + // + this.kbtnClearKryptonEvents.Location = new System.Drawing.Point(281, 275); + this.kbtnClearKryptonEvents.Name = "kbtnClearKryptonEvents"; + this.kbtnClearKryptonEvents.Size = new System.Drawing.Size(262, 25); + this.kbtnClearKryptonEvents.TabIndex = 5; + this.kbtnClearKryptonEvents.Values.Text = "Clear Events"; + this.kbtnClearKryptonEvents.Click += new System.EventHandler(this.kbtnClearKryptonEvents_Click); + // + // TextBoxEventTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(555, 311); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "TextBoxEventTest"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.Text = "TextBoxEventTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private System.Windows.Forms.TextBox txtNormalTextBox; + private Krypton.Toolkit.KryptonTextBox ktxtKryptonTextBox; + private System.Windows.Forms.ListBox lbNormalTextBoxEvents; + private Krypton.Toolkit.KryptonListBox klbKryptonTextBoxEvents; + private Krypton.Toolkit.KryptonButton kbtnClearNormalEvents; + private Krypton.Toolkit.KryptonButton kbtnClearKryptonEvents; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/TextBoxEventTest.cs b/Source/Krypton Components/TestForm/TextBoxEventTest.cs new file mode 100644 index 000000000..233325eda --- /dev/null +++ b/Source/Krypton Components/TestForm/TextBoxEventTest.cs @@ -0,0 +1,77 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class TextBoxEventTest : KryptonForm + { + public TextBoxEventTest() + { + InitializeComponent(); + } + + private void AddNormalTextBoxEvent(string message) => lbNormalTextBoxEvents.Items.Add(message); + + private void AddKryptonTextBoxEvent(string message) => klbKryptonTextBoxEvents.Items.Add(message); + + private void txtNormalTextBox_Click(object sender, EventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_Click)); + + private void txtNormalTextBox_DoubleClick(object sender, EventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_DoubleClick)); + + private void txtNormalTextBox_KeyDown(object sender, KeyEventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_KeyDown)); + + private void txtNormalTextBox_KeyPress(object sender, KeyPressEventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_KeyPress)); + + private void txtNormalTextBox_KeyUp(object sender, KeyEventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_KeyUp)); + + private void txtNormalTextBox_MouseClick(object sender, MouseEventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_MouseClick)); + + private void txtNormalTextBox_MouseDoubleClick(object sender, MouseEventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_MouseDoubleClick)); + + private void txtNormalTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_PreviewKeyDown)); + + private void txtNormalTextBox_Validated(object sender, EventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_Validated)); + + private void txtNormalTextBox_Validating(object sender, CancelEventArgs e) => AddNormalTextBoxEvent(nameof(txtNormalTextBox_Validating)); + + private void ktxtKryptonTextBox_Click(object sender, EventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_Click)); + + private void ktxtKryptonTextBox_DoubleClick(object sender, EventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_DoubleClick)); + + private void ktxtKryptonTextBox_KeyDown(object sender, KeyEventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_KeyDown)); + + private void ktxtKryptonTextBox_KeyPress(object sender, KeyPressEventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_KeyPress)); + + private void ktxtKryptonTextBox_KeyUp(object sender, KeyEventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_KeyUp)); + + private void ktxtKryptonTextBox_MouseClick(object sender, MouseEventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_MouseClick)); + + private void ktxtKryptonTextBox_MouseDoubleClick(object sender, MouseEventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_MouseDoubleClick)); + + private void ktxtKryptonTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_PreviewKeyDown)); + + private void ktxtKryptonTextBox_Validated(object sender, EventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_Validated)); + + private void ktxtKryptonTextBox_Validating(object sender, CancelEventArgs e) => AddKryptonTextBoxEvent(nameof(ktxtKryptonTextBox_Validating)); + + private void kbtnClearNormalEvents_Click(object sender, EventArgs e) + { + lbNormalTextBoxEvents.Items.Clear(); + + //kbtnClearNormalEvents.Enabled = false; + } + + private void kbtnClearKryptonEvents_Click(object sender, EventArgs e) + { + klbKryptonTextBoxEvents.Items.Clear(); + + //kbtnClearKryptonEvents.Enabled = false; + } + } +} diff --git a/Source/Krypton Components/TestForm/TextBoxEventTest.resx b/Source/Krypton Components/TestForm/TextBoxEventTest.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/TextBoxEventTest.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ThemeControlExamples.Designer.cs b/Source/Krypton Components/TestForm/ThemeControlExamples.Designer.cs new file mode 100644 index 000000000..3604a8eec --- /dev/null +++ b/Source/Krypton Components/TestForm/ThemeControlExamples.Designer.cs @@ -0,0 +1,139 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class ThemeControlExamples + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnThemeBrowser = new Krypton.Toolkit.KryptonButton(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonThemeListBox1 = new Krypton.Toolkit.KryptonThemeListBox(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonThemeListBox1); + this.kryptonPanel1.Controls.Add(this.kbtnThemeBrowser); + this.kryptonPanel1.Controls.Add(this.kryptonLabel2); + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Controls.Add(this.kryptonLabel1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(800, 450); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnThemeBrowser + // + this.kbtnThemeBrowser.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.kbtnThemeBrowser.Location = new System.Drawing.Point(13, 413); + this.kbtnThemeBrowser.Name = "kbtnThemeBrowser"; + this.kbtnThemeBrowser.Size = new System.Drawing.Size(173, 25); + this.kbtnThemeBrowser.TabIndex = 3; + this.kbtnThemeBrowser.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnThemeBrowser.Values.Text = "Theme Browser"; + this.kbtnThemeBrowser.Click += new System.EventHandler(this.kbtnThemeBrowser_Click); + // + // kryptonLabel2 + // + this.kryptonLabel2.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel2.Location = new System.Drawing.Point(13, 40); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(99, 22); + this.kryptonLabel2.TabIndex = 2; + this.kryptonLabel2.Values.Text = "Theme ListBox:"; + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + this.kryptonThemeComboBox1.DropDownWidth = 334; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(141, 13); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(334, 21); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 1; + // + // kryptonLabel1 + // + this.kryptonLabel1.LabelStyle = Krypton.Toolkit.LabelStyle.BoldPanel; + this.kryptonLabel1.Location = new System.Drawing.Point(13, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(121, 22); + this.kryptonLabel1.TabIndex = 0; + this.kryptonLabel1.Values.Text = "Theme ComboBox:"; + // + // kryptonThemeListBox1 + // + this.kryptonThemeListBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.kryptonThemeListBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.ProfessionalSystem; + this.kryptonThemeListBox1.Location = new System.Drawing.Point(141, 40); + this.kryptonThemeListBox1.Name = "kryptonThemeListBox1"; + this.kryptonThemeListBox1.Size = new System.Drawing.Size(334, 356); + this.kryptonThemeListBox1.TabIndex = 4; + // + // ThemeControlExamples + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Controls.Add(this.kryptonPanel1); + this.Name = "ThemeControlExamples"; + this.Text = "ThemeControlExamples"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private KryptonPanel kryptonPanel1; + private KryptonLabel kryptonLabel1; + private KryptonThemeComboBox kryptonThemeComboBox1; + private KryptonLabel kryptonLabel2; + private KryptonButton kbtnThemeBrowser; + private KryptonThemeListBox kryptonThemeListBox1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ThemeControlExamples.cs b/Source/Krypton Components/TestForm/ThemeControlExamples.cs new file mode 100644 index 000000000..f1f0450c1 --- /dev/null +++ b/Source/Krypton Components/TestForm/ThemeControlExamples.cs @@ -0,0 +1,33 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class ThemeControlExamples : KryptonForm + { + public ThemeControlExamples() + { + InitializeComponent(); + } + + private void kbtnThemeBrowser_Click(object sender, EventArgs e) + { + var data = new KryptonThemeBrowserData() + { + ShowImportButton = true, + ShowSilentOption = true, + StartIndex = GlobalStaticValues.GLOBAL_DEFAULT_THEME_INDEX, + StartPosition = FormStartPosition.CenterScreen, + WindowTitle = KryptonManager.Strings.MiscellaneousThemeStrings.ThemeBrowserWindowTitle + }; + + KryptonThemeBrowser.Show(data); + } + } +} diff --git a/Source/Krypton Components/TestForm/ThemeControlExamples.resx b/Source/Krypton Components/TestForm/ThemeControlExamples.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/ThemeControlExamples.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Form5.Designer.cs b/Source/Krypton Components/TestForm/ThemeTest.Designer.cs similarity index 82% rename from Source/Krypton Components/TestForm/Form5.Designer.cs rename to Source/Krypton Components/TestForm/ThemeTest.Designer.cs index ef209d156..bd1e9c7d7 100644 --- a/Source/Krypton Components/TestForm/Form5.Designer.cs +++ b/Source/Krypton Components/TestForm/ThemeTest.Designer.cs @@ -1,6 +1,17 @@ -namespace TestForm +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.Drawing; + +namespace TestForm { - partial class Form5 + partial class ThemeTest { /// /// Required designer variable. @@ -29,8 +40,12 @@ protected override void Dispose(bool disposing) private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form5)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ThemeTest)); this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnCustomTheme = new Krypton.Toolkit.KryptonButton(); + this.kryptonTextBox1 = new Krypton.Toolkit.KryptonTextBox(); + this.bsaBrowse = new Krypton.Toolkit.ButtonSpecAny(); + this.kryptonRichTextBox1 = new Krypton.Toolkit.KryptonRichTextBox(); this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); this.ktrkProgressValues = new Krypton.Toolkit.KryptonTrackBar(); this.kbtnKMBTest = new Krypton.Toolkit.KryptonButton(); @@ -61,6 +76,9 @@ private void InitializeComponent() this.toolsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.customizeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.optionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.themeBrowserToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.leftToRightToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.rightToLeftToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.contentsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.indexToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -104,7 +122,8 @@ private void InitializeComponent() this.kryptonCommand14 = new Krypton.Toolkit.KryptonCommand(); this.buttonSpecAny15 = new Krypton.Toolkit.ButtonSpecAny(); this.kryptonCommand15 = new Krypton.Toolkit.KryptonCommand(); - this.kryptonRichTextBox1 = new Krypton.Toolkit.KryptonRichTextBox(); + this.kryptonCustomPaletteBase1 = new Krypton.Toolkit.KryptonCustomPaletteBase(this.components); + this.kryptonButton2 = new Krypton.Toolkit.KryptonButton(); ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); this.kryptonPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); @@ -116,6 +135,9 @@ private void InitializeComponent() // // kryptonPanel1 // + this.kryptonPanel1.Controls.Add(this.kryptonButton2); + this.kryptonPanel1.Controls.Add(this.kbtnCustomTheme); + this.kryptonPanel1.Controls.Add(this.kryptonTextBox1); this.kryptonPanel1.Controls.Add(this.kryptonRichTextBox1); this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); this.kryptonPanel1.Controls.Add(this.ktrkProgressValues); @@ -125,65 +147,106 @@ private void InitializeComponent() this.kryptonPanel1.Controls.Add(this.menuStrip1); this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Margin = new System.Windows.Forms.Padding(4); this.kryptonPanel1.Name = "kryptonPanel1"; - this.kryptonPanel1.Size = new System.Drawing.Size(800, 372); + this.kryptonPanel1.Size = new System.Drawing.Size(1051, 475); this.kryptonPanel1.TabIndex = 0; // + // kbtnCustomTheme + // + this.kbtnCustomTheme.Enabled = false; + this.kbtnCustomTheme.Location = new System.Drawing.Point(15, 333); + this.kbtnCustomTheme.Name = "kbtnCustomTheme"; + this.kbtnCustomTheme.Size = new System.Drawing.Size(181, 42); + this.kbtnCustomTheme.TabIndex = 15; + this.kbtnCustomTheme.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnCustomTheme.Values.Text = "Use Custom Theme"; + this.kbtnCustomTheme.Click += new System.EventHandler(this.kbtnCustomTheme_Click); + // + // kryptonTextBox1 + // + this.kryptonTextBox1.ButtonSpecs.Add(this.bsaBrowse); + this.kryptonTextBox1.Location = new System.Drawing.Point(15, 298); + this.kryptonTextBox1.Name = "kryptonTextBox1"; + this.kryptonTextBox1.Size = new System.Drawing.Size(452, 28); + this.kryptonTextBox1.TabIndex = 14; + this.kryptonTextBox1.TextChanged += new System.EventHandler(this.kryptonTextBox1_TextChanged); + // + // bsaBrowse + // + this.bsaBrowse.Text = "..."; + this.bsaBrowse.UniqueName = "b14f556c9144438bb5511ba3808af073"; + this.bsaBrowse.Click += new System.EventHandler(this.bsaBrowse_Click); + // + // kryptonRichTextBox1 + // + this.kryptonRichTextBox1.Location = new System.Drawing.Point(15, 211); + this.kryptonRichTextBox1.Margin = new System.Windows.Forms.Padding(4); + this.kryptonRichTextBox1.Name = "kryptonRichTextBox1"; + this.kryptonRichTextBox1.Size = new System.Drawing.Size(452, 79); + this.kryptonRichTextBox1.TabIndex = 13; + this.kryptonRichTextBox1.Text = "kryptonRichTextBox1"; + // // kryptonThemeComboBox1 // - this.kryptonThemeComboBox1.DropDownWidth = 201; + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Office2010Black; + this.kryptonThemeComboBox1.DropDownWidth = 452; this.kryptonThemeComboBox1.IntegralHeight = false; - this.kryptonThemeComboBox1.Location = new System.Drawing.Point(13, 135); + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(15, 176); + this.kryptonThemeComboBox1.Margin = new System.Windows.Forms.Padding(4); this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; - this.kryptonThemeComboBox1.Size = new System.Drawing.Size(201, 21); + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(452, 24); this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; this.kryptonThemeComboBox1.TabIndex = 12; // // ktrkProgressValues // - this.ktrkProgressValues.Location = new System.Drawing.Point(13, 333); + this.ktrkProgressValues.Location = new System.Drawing.Point(15, 436); + this.ktrkProgressValues.Margin = new System.Windows.Forms.Padding(4); this.ktrkProgressValues.Maximum = 100; this.ktrkProgressValues.Name = "ktrkProgressValues"; - this.ktrkProgressValues.Size = new System.Drawing.Size(388, 33); + this.ktrkProgressValues.Size = new System.Drawing.Size(452, 33); this.ktrkProgressValues.TabIndex = 11; this.ktrkProgressValues.TickStyle = System.Windows.Forms.TickStyle.Both; this.ktrkProgressValues.ValueChanged += new System.EventHandler(this.ktrkProgressValues_ValueChanged); // // kbtnKMBTest // - this.kbtnKMBTest.Location = new System.Drawing.Point(13, 103); + this.kbtnKMBTest.Location = new System.Drawing.Point(15, 135); + this.kbtnKMBTest.Margin = new System.Windows.Forms.Padding(4); this.kbtnKMBTest.Name = "kbtnKMBTest"; - this.kbtnKMBTest.Size = new System.Drawing.Size(201, 25); + this.kbtnKMBTest.Size = new System.Drawing.Size(234, 33); this.kbtnKMBTest.TabIndex = 4; + this.kbtnKMBTest.Values.DropDownArrowColor = System.Drawing.Color.Empty; this.kbtnKMBTest.Values.Text = "MessageBox Test"; this.kbtnKMBTest.Click += new System.EventHandler(this.kbtnKMBTest_Click); // // kryptonLabel1 // - this.kryptonLabel1.Location = new System.Drawing.Point(13, 63); + this.kryptonLabel1.Location = new System.Drawing.Point(15, 83); + this.kryptonLabel1.Margin = new System.Windows.Forms.Padding(4); this.kryptonLabel1.Name = "kryptonLabel1"; - this.kryptonLabel1.Size = new System.Drawing.Size(88, 20); + this.kryptonLabel1.Size = new System.Drawing.Size(97, 22); this.kryptonLabel1.TabIndex = 3; this.kryptonLabel1.Values.Text = "kryptonLabel1"; // // kryptonPropertyGrid1 // - this.kryptonPropertyGrid1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - this.kryptonPropertyGrid1.CategoryForeColor = System.Drawing.Color.White; - this.kryptonPropertyGrid1.CommandsBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - this.kryptonPropertyGrid1.CommandsForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - this.kryptonPropertyGrid1.DisabledItemForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(127)))), ((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - this.kryptonPropertyGrid1.Font = new System.Drawing.Font("Segoe UI", 9F); - this.kryptonPropertyGrid1.HelpBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - this.kryptonPropertyGrid1.HelpForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); - this.kryptonPropertyGrid1.LineColor = System.Drawing.Color.FromArgb(((int)(((byte)(179)))), ((int)(((byte)(196)))), ((int)(((byte)(216))))); - this.kryptonPropertyGrid1.Location = new System.Drawing.Point(455, 27); + this.kryptonPropertyGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.kryptonPropertyGrid1.Location = new System.Drawing.Point(531, 35); + this.kryptonPropertyGrid1.Margin = new System.Windows.Forms.Padding(4); this.kryptonPropertyGrid1.Name = "kryptonPropertyGrid1"; + this.kryptonPropertyGrid1.Padding = new System.Windows.Forms.Padding(1); this.kryptonPropertyGrid1.SelectedObject = this.kryptonManager1; - this.kryptonPropertyGrid1.Size = new System.Drawing.Size(333, 345); + this.kryptonPropertyGrid1.Size = new System.Drawing.Size(511, 425); this.kryptonPropertyGrid1.TabIndex = 2; - this.kryptonPropertyGrid1.ViewBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255))))); - this.kryptonPropertyGrid1.ViewForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(57)))), ((int)(((byte)(91))))); + // + // kryptonManager1 + // + this.kryptonManager1.BaseFont = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kryptonManager1.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.Office2010Black; // // menuStrip1 // @@ -197,7 +260,7 @@ private void InitializeComponent() this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 2, 0, 2); - this.menuStrip1.Size = new System.Drawing.Size(800, 24); + this.menuStrip1.Size = new System.Drawing.Size(1051, 24); this.menuStrip1.TabIndex = 1; this.menuStrip1.Text = "menuStrip1"; // @@ -378,10 +441,35 @@ private void InitializeComponent() // // optionsToolStripMenuItem // + this.optionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.themeBrowserToolStripMenuItem}); this.optionsToolStripMenuItem.Name = "optionsToolStripMenuItem"; this.optionsToolStripMenuItem.Size = new System.Drawing.Size(130, 22); this.optionsToolStripMenuItem.Text = "&Options"; // + // themeBrowserToolStripMenuItem + // + this.themeBrowserToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.leftToRightToolStripMenuItem, + this.rightToLeftToolStripMenuItem}); + this.themeBrowserToolStripMenuItem.Name = "themeBrowserToolStripMenuItem"; + this.themeBrowserToolStripMenuItem.Size = new System.Drawing.Size(155, 22); + this.themeBrowserToolStripMenuItem.Text = "Theme Browser"; + // + // leftToRightToolStripMenuItem + // + this.leftToRightToolStripMenuItem.Name = "leftToRightToolStripMenuItem"; + this.leftToRightToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.leftToRightToolStripMenuItem.Text = "Left to Right"; + this.leftToRightToolStripMenuItem.Click += new System.EventHandler(this.leftToRightToolStripMenuItem_Click); + // + // rightToLeftToolStripMenuItem + // + this.rightToLeftToolStripMenuItem.Name = "rightToLeftToolStripMenuItem"; + this.rightToLeftToolStripMenuItem.Size = new System.Drawing.Size(139, 22); + this.rightToLeftToolStripMenuItem.Text = "Right to Left"; + this.rightToLeftToolStripMenuItem.Click += new System.EventHandler(this.rightToLeftToolStripMenuItem_Click); + // // helpToolStripMenuItem // this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -425,29 +513,34 @@ private void InitializeComponent() // // kryptonButton1 // - this.kryptonButton1.Location = new System.Drawing.Point(698, 15); + this.kryptonButton1.Location = new System.Drawing.Point(815, 19); + this.kryptonButton1.Margin = new System.Windows.Forms.Padding(4); this.kryptonButton1.Name = "kryptonButton1"; - this.kryptonButton1.Size = new System.Drawing.Size(90, 25); + this.kryptonButton1.Size = new System.Drawing.Size(105, 33); this.kryptonButton1.TabIndex = 0; this.kryptonButton1.ToolTipValues.ToolTipStyle = Krypton.Toolkit.LabelStyle.ToolTip; + this.kryptonButton1.Values.DropDownArrowColor = System.Drawing.Color.Empty; this.kryptonButton1.Values.Text = "kryptonButton1"; + this.kryptonButton1.Click += new System.EventHandler(this.kryptonButton1_Click); // // kryptonPanel2 // this.kryptonPanel2.Controls.Add(this.kryptonLabel2); this.kryptonPanel2.Controls.Add(this.kryptonButton1); this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Bottom; - this.kryptonPanel2.Location = new System.Drawing.Point(0, 372); + this.kryptonPanel2.Location = new System.Drawing.Point(0, 475); + this.kryptonPanel2.Margin = new System.Windows.Forms.Padding(4); this.kryptonPanel2.Name = "kryptonPanel2"; this.kryptonPanel2.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; - this.kryptonPanel2.Size = new System.Drawing.Size(800, 50); + this.kryptonPanel2.Size = new System.Drawing.Size(1051, 66); this.kryptonPanel2.TabIndex = 1; // // kryptonLabel2 // - this.kryptonLabel2.Location = new System.Drawing.Point(13, 15); + this.kryptonLabel2.Location = new System.Drawing.Point(15, 19); + this.kryptonLabel2.Margin = new System.Windows.Forms.Padding(4); this.kryptonLabel2.Name = "kryptonLabel2"; - this.kryptonLabel2.Size = new System.Drawing.Size(88, 20); + this.kryptonLabel2.Size = new System.Drawing.Size(97, 22); this.kryptonLabel2.TabIndex = 1; this.kryptonLabel2.Values.Text = "kryptonLabel2"; // @@ -459,23 +552,26 @@ private void InitializeComponent() this.toolStripStatusLabel1, this.kryptonProgressBarToolStripItem1, this.toolStripProgressBar1}); - this.statusStrip1.Location = new System.Drawing.Point(0, 422); + this.statusStrip1.Location = new System.Drawing.Point(0, 541); this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 17, 0); this.statusStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.ManagerRenderMode; - this.statusStrip1.Size = new System.Drawing.Size(800, 28); + this.statusStrip1.Size = new System.Drawing.Size(1051, 36); this.statusStrip1.TabIndex = 2; this.statusStrip1.Text = "statusStrip1"; // // toolStripStatusLabel1 // + this.toolStripStatusLabel1.Font = new System.Drawing.Font("Segoe UI", 9F); this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; - this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 23); + this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 31); this.toolStripStatusLabel1.Text = "toolStripStatusLabel1"; // // kryptonProgressBarToolStripItem1 // + this.kryptonProgressBarToolStripItem1.Font = new System.Drawing.Font("Segoe UI", 9F); this.kryptonProgressBarToolStripItem1.Name = "kryptonProgressBarToolStripItem1"; - this.kryptonProgressBarToolStripItem1.Size = new System.Drawing.Size(100, 26); + this.kryptonProgressBarToolStripItem1.Size = new System.Drawing.Size(116, 34); this.kryptonProgressBarToolStripItem1.StateCommon.Back.Color1 = System.Drawing.Color.Green; this.kryptonProgressBarToolStripItem1.StateDisabled.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; this.kryptonProgressBarToolStripItem1.StateNormal.Back.ColorStyle = Krypton.Toolkit.PaletteColorStyle.OneNote; @@ -485,8 +581,9 @@ private void InitializeComponent() // // toolStripProgressBar1 // + this.toolStripProgressBar1.Font = new System.Drawing.Font("Segoe UI", 9F); this.toolStripProgressBar1.Name = "toolStripProgressBar1"; - this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 22); + this.toolStripProgressBar1.Size = new System.Drawing.Size(116, 30); // // buttonSpecAny1 // @@ -666,18 +763,27 @@ private void InitializeComponent() // this.kryptonCommand15.AssignedButtonSpec = this.buttonSpecAny15; // - // kryptonRichTextBox1 + // kryptonCustomPaletteBase1 // - this.kryptonRichTextBox1.Location = new System.Drawing.Point(13, 162); - this.kryptonRichTextBox1.Name = "kryptonRichTextBox1"; - this.kryptonRichTextBox1.Size = new System.Drawing.Size(388, 96); - this.kryptonRichTextBox1.TabIndex = 13; - this.kryptonRichTextBox1.Text = "kryptonRichTextBox1"; + this.kryptonCustomPaletteBase1.BaseFont = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.kryptonCustomPaletteBase1.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom; + this.kryptonCustomPaletteBase1.ThemeName = null; + this.kryptonCustomPaletteBase1.UseThemeFormChromeBorderWidth = Krypton.Toolkit.InheritBool.True; + // + // kryptonButton2 + // + this.kryptonButton2.Enabled = false; + this.kryptonButton2.Location = new System.Drawing.Point(202, 332); + this.kryptonButton2.Name = "kryptonButton2"; + this.kryptonButton2.Size = new System.Drawing.Size(181, 42); + this.kryptonButton2.TabIndex = 16; + this.kryptonButton2.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kryptonButton2.Values.Text = "Upgrade Custom Theme"; + this.kryptonButton2.Click += new System.EventHandler(this.kryptonButton2_Click); // - // Form5 + // ThemeTest // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.ButtonSpecs.Add(this.buttonSpecAny1); this.ButtonSpecs.Add(this.buttonSpecAny2); this.ButtonSpecs.Add(this.buttonSpecAny3); @@ -693,12 +799,15 @@ private void InitializeComponent() this.ButtonSpecs.Add(this.buttonSpecAny13); this.ButtonSpecs.Add(this.buttonSpecAny14); this.ButtonSpecs.Add(this.buttonSpecAny15); - this.ClientSize = new System.Drawing.Size(800, 450); + this.ClientSize = new System.Drawing.Size(1051, 577); this.Controls.Add(this.kryptonPanel1); this.Controls.Add(this.kryptonPanel2); this.Controls.Add(this.statusStrip1); - this.Name = "Form5"; + this.Font = new System.Drawing.Font("Segoe UI", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.Margin = new System.Windows.Forms.Padding(4); + this.Name = "ThemeTest"; this.Text = "Form5"; + this.UseThemeFormChromeBorderWidth = false; ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); this.kryptonPanel1.ResumeLayout(false); this.kryptonPanel1.PerformLayout(); @@ -792,5 +901,13 @@ private void InitializeComponent() private Krypton.Toolkit.KryptonCommand kryptonCommand15; private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; private Krypton.Toolkit.KryptonRichTextBox kryptonRichTextBox1; + private System.Windows.Forms.ToolStripMenuItem themeBrowserToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem leftToRightToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem rightToLeftToolStripMenuItem; + private Krypton.Toolkit.KryptonCustomPaletteBase kryptonCustomPaletteBase1; + private KryptonTextBox kryptonTextBox1; + private ButtonSpecAny bsaBrowse; + private KryptonButton kbtnCustomTheme; + private KryptonButton kryptonButton2; } } \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ThemeTest.cs b/Source/Krypton Components/TestForm/ThemeTest.cs new file mode 100644 index 000000000..0c797ca86 --- /dev/null +++ b/Source/Krypton Components/TestForm/ThemeTest.cs @@ -0,0 +1,114 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +using System.IO; + +namespace TestForm +{ + public partial class ThemeTest : KryptonForm + { + public ThemeTest() + { + InitializeComponent(); + } + + private void kbtnKMBTest_Click(object sender, EventArgs e) + { + KryptonMessageBox.Show(@"Can you read this text?", @"Test", KryptonMessageBoxButtons.YesNo, + KryptonMessageBoxIcon.Question); + } + + private void ktrkProgressValues_ValueChanged(object sender, EventArgs e) + { + kryptonProgressBarToolStripItem1.Value = ktrkProgressValues.Value; + toolStripProgressBar1.Value = ktrkProgressValues.Value; + } + + private void leftToRightToolStripMenuItem_Click(object sender, EventArgs e) + { + var data = new KryptonThemeBrowserData() + { + ShowImportButton = true, + ShowSilentOption = true, + StartIndex = GlobalStaticValues.GLOBAL_DEFAULT_THEME_INDEX, + StartPosition = FormStartPosition.CenterScreen, + WindowTitle = KryptonManager.Strings.MiscellaneousThemeStrings.ThemeBrowserWindowTitle + }; + + KryptonThemeBrowser.Show(data); + } + + private void rightToLeftToolStripMenuItem_Click(object sender, EventArgs e) + { + var data = new KryptonThemeBrowserData() + { + ShowImportButton = true, + ShowSilentOption = true, + StartIndex = GlobalStaticValues.GLOBAL_DEFAULT_THEME_INDEX, + StartPosition = FormStartPosition.CenterScreen, + WindowTitle = KryptonManager.Strings.MiscellaneousThemeStrings.ThemeBrowserWindowTitle + }; + + KryptonThemeBrowser.Show(data, Krypton.Toolkit.RightToLeftLayout.RightToLeft); + } + + private void kryptonButton1_Click(object sender, EventArgs e) + { + // Note: For ExceptionHandler testing + + //try + //{ + // throw new ArgumentOutOfRangeException(); + //} + //catch (Exception ex) + //{ + // ExceptionHandler.CaptureException(ex, showStackTrace: true); + //} + } + + private void bsaBrowse_Click(object sender, EventArgs e) + { + OpenFileDialog dlg = new OpenFileDialog() + { + Title = "Open a custom theme:", + Filter = "XML Files|*.xml" + }; + + if (dlg.ShowDialog() == DialogResult.OK) + { + kryptonTextBox1.Text = Path.GetFullPath(dlg.FileName); + } + } + + private void kryptonTextBox1_TextChanged(object sender, EventArgs e) + { + kryptonButton2.Enabled = !string.IsNullOrEmpty(kryptonTextBox1.Text); + kbtnCustomTheme.Enabled = !string.IsNullOrEmpty(kryptonTextBox1.Text); + } + + private void kbtnCustomTheme_Click(object sender, EventArgs e) + { + string themePath = kryptonTextBox1.Text; + + KryptonCustomPaletteBase palette = new KryptonCustomPaletteBase(); + + using (Stream stream = new FileStream(themePath, FileMode.Open)) + { + palette.ImportWithUpgrade(stream); + } + + //KryptonManager.CurrentGlobalPalette = palette; + } + + private void kryptonButton2_Click(object sender, EventArgs e) + { + kryptonCustomPaletteBase1.ImportWithUpgrade(kryptonTextBox1.Text); + } + } +} diff --git a/Source/Krypton Components/TestForm/Form5.resx b/Source/Krypton Components/TestForm/ThemeTest.resx similarity index 95% rename from Source/Krypton Components/TestForm/Form5.resx rename to Source/Krypton Components/TestForm/ThemeTest.resx index b46936c00..f53d02e2d 100644 --- a/Source/Krypton Components/TestForm/Form5.resx +++ b/Source/Krypton Components/TestForm/ThemeTest.resx @@ -250,7 +250,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAE1JREFUOE/tzMEJACAIhWFndgLnEp3NeOChoLRDx37wpH70LGaOatw98nQfjk5h + vAAADrwBlbxySQAAAE1JREFUOE/tzMEJACAIhWFndgLnEp3NeOChoLRDx37wpH70LGaOatw98nQfjk5h JyJhZmekAxAQVd0jHTBPvqxVwNwHPoBK4Hby5UVEA+6HCGkonwOPAAAAAElFTkSuQmCC @@ -260,7 +260,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAL5JREFUOE9jGBrg1cmp/18daoLj15dW/YdKEQavz879//HW1v/IAGQIVJqB4cWN + vAAADrwBlbxySQAAAL5JREFUOE9jGBrg1cmp/18daoLj15dW/YdKEQavz879//HW1v/IAGQIVJqB4cWN /f9fHW5FsQEZf7i64v//f/+gWiEAJA7VDnQekPPj9TWoFHEAwwBSAU4Dvj8/i9c76Pjl2QX/4Qb8/fmZ JM1gfLQLYcDXhwexK8KDX55dBDXg35//b070YVWEDz+/vhdiwI+Xl7EqIISfP7gKMeD9hXlYFeDDL4/2 QGICmyQx+MX5pZQZ8PzGAURaIB8wMAAACMNXsIST1ZEAAAAASUVORK5CYII= @@ -272,7 +272,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAE9JREFUOE9joArojFz9nxwM1Y4wgFgwagAeA05tuQlVghuA1OA0gFQM1U5lAwgB + vAAADrwBlbxySQAAAE9JREFUOE9joArojFz9nxwM1Y4wgFgwagAeA05tuQlVghuA1OA0gFQM1U5lAwgB ZLVQ7TQyAJ0PA8hqodqpYMCOBSdRJIjBID1Q7ZQABgYAthJxq+ZC3aYAAAAASUVORK5CYII= @@ -282,7 +282,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAHhJREFUOE9j6Ixc/Z8UzIAOsAqSAmAGINtCDAZrBgEYB0WQFIBuAIgmBeM0gBCA + vAAADrwBlbxySQAAAHhJREFUOE9j6Ixc/Z8UzIAOsAqSAmAGINtCDAZrBgEYB0WQFIBuAIgmBeM0gBCA qRvOBpzafgOqFBNcOXr/f1f0GvwGEIspNwAGYBxkSVwAWQ1YMwjAOMiSyIqRAbIasGZkgCyJrBgZIKuB akOA1b0HURTgx6v/AwD43jDuwHbn4AAAAABJRU5ErkJggg== @@ -293,7 +293,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAS9JREFUOE/VkLtLw1AchfP3iaOLi4OLi7MiolWwovhARHAQn1iqVISKotYKrdbW + vAAADrwBlbxySQAAAS9JREFUOE/VkLtLw1AchfP3iaOLi4OLi7MiolWwovhARHAQn1iqVISKotYKrdbW ivigDkq01dvbZEsgJGuO+V1voyG2FnHxwIHccL7vwlX+JJOdCfymEv8UtJp/LnAcB483ZVGJty6wbRtv jKN3IY32yB5iqbsPSV2QjZfkNBzLslDlNTy9MPTMnaBtKImOsYOgoFHPdu4FPLCcxfDauS+JeN8/Cgr7 D+AeTGO6lUoStcLCb0D9GtM0oWkaxmMXPkyNeuey2kTgui4MwxDwbOIyAE/E82AVjpX+VGNBHaYuJq99 @@ -307,7 +307,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAStJREFUOE+tkE1LhGAUhf2Xfaz6B5FZiLkRhqmFQqRTiwEN1xEuahaW0UbQRFoI + vAAADrwBlbxySQAAAStJREFUOE+tkE1LhGAUhf2Xfaz6B5FZiLkRhqmFQqRTiwEN1xEuahaW0UbQRFoI BRZCv+TGud3ehpy0oAMXznuec18/tH9VXdeUJAnJsScwdOTYV5qmZBgGFUXRK5VlyQwdifqqqop0XSfb tqltW1WERwaGjsSr5XkeF13XVUV4ZGAS/aymacg0TV6I45gHHhmY1IaVZRkvLQ8ywb9TFEVqOQzDvy13 XUeO46gL4JEJHlcQBLxoWZb6+77vD18wSyraPFrQ+vSKtg5OadfYozzPeeCRgaGDrqx9yL98oJ2zO8of @@ -321,7 +321,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAH5JREFUOE+9j8ENwCAMA5mv4/CmQ3UQvlmHyhWRIDiAqqon+eNGVxM+IcZYWHLO + vAAADrwBlbxySQAAAH5JREFUOE+9j8ENwCAMA5mv4/CmQ3UQvlmHyhWRIDiAqqon+eNGVxM+IcZYWHLO pZ7MwbEFXUppT8IEoH5eo4LjvJ4o6FmGVSgZrEc3PE0PdYGu8AQi0kvYIbBigK5NJ9hZ0DIILExsf7Al 8OgENq14ucBDBR7/CFapp28J4Qav4wj4Xtqk0wAAAABJRU5ErkJggg== @@ -332,7 +332,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAJpJREFUOE/NkNENgCAMRJ2ZCYgTMABhEAI/frOILlFzSpVgUYk/XnJR2rsncWjJ + vAAADrwBlbxySQAAAJpJREFUOE/NkNENgCAMRJ2ZCYgTMABhEAI/frOILlFzSpVgUYk/XnJR2rsncWjJ GENKKXLOUR71CQA8rbXPgDlZWqZxC/KXazMQOeTxfghDBkhldp09xMPLolIzVy7eOld3SQE4r58llWHs pH8RY3x/AxRK4ay1phDCCZHKMHYSAALEe79DpDLcApTuBpT6EWBO7hvgTgi1rWgFZkIMgpHdNjEAAAAA SUVORK5CYII= @@ -344,7 +344,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAPtJREFUOE9jGFxg76kb//0bN//3qt34P7xt6/8LN+7/h0oRBkfP3/of1LQFrNm3 + vAAADrwBlbxySQAAAPtJREFUOE9jGFxg76kb//0bN//3qt34P7xt6/8LN+7/h0oRBkfP3/of1LQFrNm3 ftP/g2dvEa/51OU7/0NbtoI1g/D6g5eJ1wxyJsi5MM3YMMjwzEl7/vetPoHprXPX7hE0ABmDvDd361lU Q0D+hwUeCK89gOkFUADXLzgMV7Pj+DVUNSAFINNBkj5AeuvRq1jDoXvlcbCa/Gl7MeVBgQfSDFIAMmwP 0FCoFBzcvv8ILA9yMVSINAAzIAQYsFAh0gDMC5VzD5JmwP4zN+GBCPLeSWDagUoRBiBNMBzZvu3/rhPX @@ -357,7 +357,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAPxJREFUOE/Nk7kKAkEQRPf7RDHWf1Ex0sBABCMRxEQEEQ80FfFiPRA08QI/ZfTN + vAAADrwBlbxySQAAAPxJREFUOE/Nk7kKAkEQRPf7RDHWf1Ex0sBABCMRxEQEEQ80FfFiPRA08QI/ZfTN TnvsjEYGFgzb3VVT23Tvev+J5f6i0rWJMqkXSXVV+FQHmwf/hkp/rWKZnhaZktOAY+gnCs2FJqJ3g2LL /2iAzlBPjDenx+XR+vgmkIvU4YnRGzpAtj7VRLmzstzFgBieGL0mBcn8UBO7w9UymG2D7ojhidFrUhAe 3DegQ2/SAN86eMXHDmQGrNGUnIBHZ81AthDP9tV0e3aaMAt4dNYWQL4x1ySrKrWXyr9/kdR5kssK0ekL @@ -370,7 +370,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAALxJREFUOE+NjzEOhCAQRTmzHQXcgVDQ0cgd7GlVek/D5rMOC6yAL5mgM39egC3L + vAAADrwBlbxySQAAALxJREFUOE+NjzEOhCAQRTmzHQXcgVDQ0cgd7GlVek/D5rMOC6yAL5mgM39egC3L Ekd1HEdkIxDqgZmUciyZCa7rikKIvmQmACTZ9/1fMhO0da/9QLPHHRlDgvM8o7U2hhDSP6B5W2mRQAOs 65oEOMG2bVlQ0hXQDbz3VeC1gEBPa52DONuivlIqVjdwzlVL+O6RMySgt5fDNzW8wagolwUEBsaYKlxS 9pF7FJQ8Ce7RF7K1xTnvPictJhj7AF/pIOqLp03fAAAAAElFTkSuQmCC @@ -382,7 +382,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAUNJREFUOE+NkrHrgkAUx39/s0igOEjZYBE4OodNKiFODbY1tEcgjlLppG4Owovv + vAAADrwBlbxySQAAAUNJREFUOE+NkrHrgkAUx39/s0igOEjZYBE4OodNKiFODbY1tEcgjlLppG4Owovv 486StH5fOM733vc+5929PylFUejbOJ1OJKzjgmlKqGma9h3yC3C9Xr9DfgGgy+VCuq6PQ94BXddRXddU liXd73eeEcMjh1j2kgS0bUu3243iOKbVakWqqvKMGHnUJwHYGTs6jsOm7XZLh8OBZ8TIoz4JaJqG9vs9 74pLEyUWYuRRF6mhAMBZ5/M57yjSA3mex3URDgXA4/Gg2WxGx+Nx1IQ86iIc6v0PdrvdqAn5xWIxDcBT @@ -396,7 +396,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAHBJREFUOE/dkcEKwCAMQ/vNIj35RR486fd1dDQyGLUbeBh7EDwkTaHSdlJKspLF + vAAADrwBlbxySQAAAHBJREFUOE/dkcEKwCAMQ/vNIj35RR486fd1dDQyGLUbeBh7EDwkTaHSdlJKspLF fDTk8dGCWqvknKep70rI6ExrTQjDMJ+APDNLuDHSHwquR4Q84OOQ5xF771JKeVWg0pkxxv3nogKL+Wwp WMliBtEBAprXlPZiTgwAAAAASUVORK5CYII= @@ -407,7 +407,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wAAADsABataJCQAAAUtJREFUOE+tUE1Lw1AQzM8V6kFjKKRESDyI3mxFET8KhdaGoJZio0FBsPgB3ooX + vAAADrwBlbxySQAAAUtJREFUOE+tUE1Lw1AQzM8V6kFjKKRESDyI3mxFET8KhdaGoJZio0FBsPgB3ooX SVBBhRhQIeJ9zG7z0iZtjYIDw763szPZPOk3aF6eYr5VxVR9hSvdY2kUsiyDqOs6DxntGhuzXIj6bMhC VVUQwjBE4+JkxLh0bOLxzecz6bFtABEQBAHU/a2Uec7awPvXJ2pX/WDSY9sAIsD3fRR2V7HZtXH78oDp 6Nx7vse520sCC40KJMuyoCgK/zcFiDdwXRelg+3IWMGd/4TX8INXpyARwBsIswgYxt71GQ/OmGscUmrt @@ -419,4 +419,7 @@ 509, 91 + + 673, 91 + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.Designer.cs b/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.Designer.cs new file mode 100644 index 000000000..b8f273324 --- /dev/null +++ b/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.Designer.cs @@ -0,0 +1,226 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class ToastNotificationQuickTestForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kryptonButton5 = new Krypton.Toolkit.KryptonButton(); + this.kbtnTextBoxNotificaton = new Krypton.Toolkit.KryptonButton(); + this.kbtnNumericUpDownNotificaton = new Krypton.Toolkit.KryptonButton(); + this.kbtnMaskedTextBoxNotificaton = new Krypton.Toolkit.KryptonButton(); + this.kbtnDomainUpDownNotificaton = new Krypton.Toolkit.KryptonButton(); + this.kbtnDateTimeNotificaton = new Krypton.Toolkit.KryptonButton(); + this.kbtnComboBoxNotificaton = new Krypton.Toolkit.KryptonButton(); + this.kbtnBasicNotificationWithProgressBarCheckState = new Krypton.Toolkit.KryptonButton(); + this.kbtnBasicNotificationWithProgressBarChecked = new Krypton.Toolkit.KryptonButton(); + this.kbtnBasicNotificationWithProgressBar = new Krypton.Toolkit.KryptonButton(); + this.kbtnBasicNotificationCheckState = new Krypton.Toolkit.KryptonButton(); + this.kbtnBasicNotificationChecked = new Krypton.Toolkit.KryptonButton(); + this.kbtnBasicNotification = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kryptonButton5); + this.kryptonPanel1.Controls.Add(this.kbtnTextBoxNotificaton); + this.kryptonPanel1.Controls.Add(this.kbtnNumericUpDownNotificaton); + this.kryptonPanel1.Controls.Add(this.kbtnMaskedTextBoxNotificaton); + this.kryptonPanel1.Controls.Add(this.kbtnDomainUpDownNotificaton); + this.kryptonPanel1.Controls.Add(this.kbtnDateTimeNotificaton); + this.kryptonPanel1.Controls.Add(this.kbtnComboBoxNotificaton); + this.kryptonPanel1.Controls.Add(this.kbtnBasicNotificationWithProgressBarCheckState); + this.kryptonPanel1.Controls.Add(this.kbtnBasicNotificationWithProgressBarChecked); + this.kryptonPanel1.Controls.Add(this.kbtnBasicNotificationWithProgressBar); + this.kryptonPanel1.Controls.Add(this.kbtnBasicNotificationCheckState); + this.kryptonPanel1.Controls.Add(this.kbtnBasicNotificationChecked); + this.kryptonPanel1.Controls.Add(this.kbtnBasicNotification); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(874, 470); + this.kryptonPanel1.TabIndex = 0; + // + // kryptonButton5 + // + this.kryptonButton5.Location = new System.Drawing.Point(437, 255); + this.kryptonButton5.Name = "kryptonButton5"; + this.kryptonButton5.Size = new System.Drawing.Size(273, 25); + this.kryptonButton5.TabIndex = 12; + this.kryptonButton5.Values.Text = "DateTime Notificaton"; + // + // kbtnTextBoxNotificaton + // + this.kbtnTextBoxNotificaton.Location = new System.Drawing.Point(571, 107); + this.kbtnTextBoxNotificaton.Name = "kbtnTextBoxNotificaton"; + this.kbtnTextBoxNotificaton.Size = new System.Drawing.Size(288, 25); + this.kbtnTextBoxNotificaton.TabIndex = 11; + this.kbtnTextBoxNotificaton.Values.Text = "TextBox Notificaton"; + this.kbtnTextBoxNotificaton.Click += new System.EventHandler(this.kbtnTextBoxNotificaton_Click); + // + // kbtnNumericUpDownNotificaton + // + this.kbtnNumericUpDownNotificaton.Location = new System.Drawing.Point(292, 107); + this.kbtnNumericUpDownNotificaton.Name = "kbtnNumericUpDownNotificaton"; + this.kbtnNumericUpDownNotificaton.Size = new System.Drawing.Size(273, 25); + this.kbtnNumericUpDownNotificaton.TabIndex = 10; + this.kbtnNumericUpDownNotificaton.Values.Text = "NumericUpDown Notificaton"; + this.kbtnNumericUpDownNotificaton.Click += new System.EventHandler(this.kbtnNumericUpDownNotificaton_Click); + // + // kbtnMaskedTextBoxNotificaton + // + this.kbtnMaskedTextBoxNotificaton.Location = new System.Drawing.Point(13, 107); + this.kbtnMaskedTextBoxNotificaton.Name = "kbtnMaskedTextBoxNotificaton"; + this.kbtnMaskedTextBoxNotificaton.Size = new System.Drawing.Size(273, 25); + this.kbtnMaskedTextBoxNotificaton.TabIndex = 9; + this.kbtnMaskedTextBoxNotificaton.Values.Text = "Masked TextBox Notificaton"; + this.kbtnMaskedTextBoxNotificaton.Click += new System.EventHandler(this.kbtnMaskedTextBoxNotificaton_Click); + // + // kbtnDomainUpDownNotificaton + // + this.kbtnDomainUpDownNotificaton.Location = new System.Drawing.Point(571, 76); + this.kbtnDomainUpDownNotificaton.Name = "kbtnDomainUpDownNotificaton"; + this.kbtnDomainUpDownNotificaton.Size = new System.Drawing.Size(288, 25); + this.kbtnDomainUpDownNotificaton.TabIndex = 8; + this.kbtnDomainUpDownNotificaton.Values.Text = "DomainUpDown Notificaton"; + this.kbtnDomainUpDownNotificaton.Click += new System.EventHandler(this.kbtnDomainUpDownNotificaton_Click); + // + // kbtnDateTimeNotificaton + // + this.kbtnDateTimeNotificaton.Location = new System.Drawing.Point(292, 76); + this.kbtnDateTimeNotificaton.Name = "kbtnDateTimeNotificaton"; + this.kbtnDateTimeNotificaton.Size = new System.Drawing.Size(273, 25); + this.kbtnDateTimeNotificaton.TabIndex = 7; + this.kbtnDateTimeNotificaton.Values.Text = "DateTime Notificaton"; + this.kbtnDateTimeNotificaton.Click += new System.EventHandler(this.kbtnDateTimeNotificaton_Click); + // + // kbtnComboBoxNotificaton + // + this.kbtnComboBoxNotificaton.Location = new System.Drawing.Point(13, 76); + this.kbtnComboBoxNotificaton.Name = "kbtnComboBoxNotificaton"; + this.kbtnComboBoxNotificaton.Size = new System.Drawing.Size(273, 25); + this.kbtnComboBoxNotificaton.TabIndex = 6; + this.kbtnComboBoxNotificaton.Values.Text = "ComboBox Notificaton"; + this.kbtnComboBoxNotificaton.Click += new System.EventHandler(this.kbtnComboBoxNotificaton_Click); + // + // kbtnBasicNotificationWithProgressBarCheckState + // + this.kbtnBasicNotificationWithProgressBarCheckState.Location = new System.Drawing.Point(571, 44); + this.kbtnBasicNotificationWithProgressBarCheckState.Name = "kbtnBasicNotificationWithProgressBarCheckState"; + this.kbtnBasicNotificationWithProgressBarCheckState.Size = new System.Drawing.Size(288, 25); + this.kbtnBasicNotificationWithProgressBarCheckState.TabIndex = 5; + this.kbtnBasicNotificationWithProgressBarCheckState.Values.Text = "Basic Notification with ProgressBar (CheckState)"; + this.kbtnBasicNotificationWithProgressBarCheckState.Click += new System.EventHandler(this.kbtnBasicNotificationWithProgressBarCheckState_Click); + // + // kbtnBasicNotificationWithProgressBarChecked + // + this.kbtnBasicNotificationWithProgressBarChecked.Location = new System.Drawing.Point(292, 44); + this.kbtnBasicNotificationWithProgressBarChecked.Name = "kbtnBasicNotificationWithProgressBarChecked"; + this.kbtnBasicNotificationWithProgressBarChecked.Size = new System.Drawing.Size(273, 25); + this.kbtnBasicNotificationWithProgressBarChecked.TabIndex = 4; + this.kbtnBasicNotificationWithProgressBarChecked.Values.Text = "Basic Notification with ProgressBar (Checked)"; + this.kbtnBasicNotificationWithProgressBarChecked.Click += new System.EventHandler(this.kbtnBasicNotificationWithProgressBarChecked_Click); + // + // kbtnBasicNotificationWithProgressBar + // + this.kbtnBasicNotificationWithProgressBar.Location = new System.Drawing.Point(13, 44); + this.kbtnBasicNotificationWithProgressBar.Name = "kbtnBasicNotificationWithProgressBar"; + this.kbtnBasicNotificationWithProgressBar.Size = new System.Drawing.Size(273, 25); + this.kbtnBasicNotificationWithProgressBar.TabIndex = 3; + this.kbtnBasicNotificationWithProgressBar.Values.Text = "Basic Notification with ProgressBar"; + this.kbtnBasicNotificationWithProgressBar.Click += new System.EventHandler(this.kbtnBasicNotificationWithProgressBar_Click); + // + // kbtnBasicNotificationCheckState + // + this.kbtnBasicNotificationCheckState.Location = new System.Drawing.Point(571, 13); + this.kbtnBasicNotificationCheckState.Name = "kbtnBasicNotificationCheckState"; + this.kbtnBasicNotificationCheckState.Size = new System.Drawing.Size(288, 25); + this.kbtnBasicNotificationCheckState.TabIndex = 2; + this.kbtnBasicNotificationCheckState.Values.Text = "Basic Notification (CheckState)"; + this.kbtnBasicNotificationCheckState.Click += new System.EventHandler(this.kbtnBasicNotificationCheckState_Click); + // + // kbtnBasicNotificationChecked + // + this.kbtnBasicNotificationChecked.Location = new System.Drawing.Point(292, 13); + this.kbtnBasicNotificationChecked.Name = "kbtnBasicNotificationChecked"; + this.kbtnBasicNotificationChecked.Size = new System.Drawing.Size(273, 25); + this.kbtnBasicNotificationChecked.TabIndex = 1; + this.kbtnBasicNotificationChecked.Values.Text = "Basic Notification (Checked)"; + this.kbtnBasicNotificationChecked.Click += new System.EventHandler(this.kbtnBasicNotificationChecked_Click); + // + // kbtnBasicNotification + // + this.kbtnBasicNotification.Location = new System.Drawing.Point(13, 13); + this.kbtnBasicNotification.Name = "kbtnBasicNotification"; + this.kbtnBasicNotification.Size = new System.Drawing.Size(273, 25); + this.kbtnBasicNotification.TabIndex = 0; + this.kbtnBasicNotification.Values.Text = "Basic Notification"; + this.kbtnBasicNotification.Click += new System.EventHandler(this.kbtnBasicNotification_Click); + // + // ToastNotificationQuickTestForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(874, 470); + this.Controls.Add(this.kryptonPanel1); + this.Name = "ToastNotificationQuickTestForm"; + this.Text = "ToastNotificationQuickTestForm"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonButton kbtnBasicNotification; + private Krypton.Toolkit.KryptonButton kbtnBasicNotificationCheckState; + private Krypton.Toolkit.KryptonButton kbtnBasicNotificationChecked; + private Krypton.Toolkit.KryptonButton kbtnBasicNotificationWithProgressBarCheckState; + private Krypton.Toolkit.KryptonButton kbtnBasicNotificationWithProgressBarChecked; + private Krypton.Toolkit.KryptonButton kbtnBasicNotificationWithProgressBar; + private KryptonButton kbtnComboBoxNotificaton; + private KryptonButton kbtnDateTimeNotificaton; + private KryptonButton kryptonButton5; + private KryptonButton kbtnTextBoxNotificaton; + private KryptonButton kbtnNumericUpDownNotificaton; + private KryptonButton kbtnMaskedTextBoxNotificaton; + private KryptonButton kbtnDomainUpDownNotificaton; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.cs b/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.cs new file mode 100644 index 000000000..f66372667 --- /dev/null +++ b/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.cs @@ -0,0 +1,239 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class ToastNotificationQuickTestForm : KryptonForm + { + public ToastNotificationQuickTestForm() + { + InitializeComponent(); + } + + private void kbtnBasicNotification_Click(object sender, EventArgs e) + { + KryptonBasicToastNotificationData data = new KryptonBasicToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + CountDownSeconds = 60 + }; + + KryptonToastNotification.ShowBasicNotification(data); + } + + private void kbtnBasicNotificationChecked_Click(object sender, EventArgs e) + { + KryptonBasicToastNotificationData data = new KryptonBasicToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + ShowDoNotShowAgainOption = true, + IsDoNotShowAgainOptionChecked = true, + CountDownSeconds = 60 + }; + + bool result = KryptonToastNotification.ShowBasicNotificationWithBooleanReturnValue(data); + + KryptonMessageBox.Show($"Result = {result}", string.Empty, KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Information); + } + + private void kbtnBasicNotificationCheckState_Click(object sender, EventArgs e) + { + KryptonBasicToastNotificationData data = new KryptonBasicToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + ShowDoNotShowAgainOption = true, + DoNotShowAgainOptionCheckState = CheckState.Checked, + UseDoNotShowAgainOptionThreeState = true, + CountDownSeconds = 60 + }; + + CheckState result = KryptonToastNotification.ShowBasicNotificationWithCheckStateReturnValue(data); + + KryptonMessageBox.Show($"Result = {result}", string.Empty, KryptonMessageBoxButtons.OK, KryptonMessageBoxIcon.Information); + } + + private void kbtnBasicNotificationWithProgressBar_Click(object sender, EventArgs e) + { + KryptonBasicToastNotificationData data = new KryptonBasicToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + CountDownSeconds = 60 + }; + + KryptonToastNotification.ShowBasicProgressBarNotification(data); + } + + private void kbtnBasicNotificationWithProgressBarChecked_Click(object sender, EventArgs e) + { + KryptonBasicToastNotificationData data = new KryptonBasicToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + ShowDoNotShowAgainOption = true, + IsDoNotShowAgainOptionChecked = true, + CountDownSeconds = 60 + }; + + bool result = KryptonToastNotification.ShowBasicProgressBarNotificationWithBooleanReturnValue(data); + + KryptonMessageBox.Show($"Result = {result}", string.Empty, KryptonMessageBoxButtons.OK, + KryptonMessageBoxIcon.Information); + } + + private void kbtnBasicNotificationWithProgressBarCheckState_Click(object sender, EventArgs e) + { + KryptonBasicToastNotificationData data = new KryptonBasicToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + ShowDoNotShowAgainOption = true, + DoNotShowAgainOptionCheckState = CheckState.Checked, + UseDoNotShowAgainOptionThreeState = true, + CountDownSeconds = 60 + }; + + CheckState result = + KryptonToastNotification.ShowBasicProgressBarNotificationWithCheckStateReturnValue(data); + + KryptonMessageBox.Show($"Result = {result}"); + } + + private void kbtnComboBoxNotificaton_Click(object sender, EventArgs e) + { + KryptonUserInputToastNotificationData comboBoxNotificationData = new KryptonUserInputToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + UserInputList = GetItems(), + NotificationInputAreaType = KryptonToastNotificationInputAreaType.ComboBox, + CountDownSeconds = 60 + }; + + string? result = KryptonToastNotification.ShowNotification(comboBoxNotificationData) as string; + + //string result = KryptonToastNotification.ShowNotificationWithComboBox(null, + // @"This is a simple test...", @"Hello World!", KryptonToastNotificationIcon.Exclamation, GetItems(), 1, + // ComboBoxStyle.DropDown, null, null, 60); + + KryptonMessageBox.Show($"Result = {result}"); + } + + private ArrayList GetItems() + { + ArrayList items = new ArrayList(); + + for (int i = 0; i < 10; i++) + { + items.Add(i); + } + + items.Add(@"Apples"); + items.Add(@"Bananas"); + items.Add(@"Pears"); + items.Add(@"Oranges"); + + return items; + } + + private void kbtnDateTimeNotificaton_Click(object sender, EventArgs e) + { + KryptonUserInputToastNotificationData dateTimeNotificationData = new KryptonUserInputToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + NotificationInputAreaType = KryptonToastNotificationInputAreaType.DateTime, + CountDownSeconds = 60 + }; + + DateTime result = (DateTime)KryptonToastNotification.ShowNotification(dateTimeNotificationData); + + KryptonMessageBox.Show($"Result = {result}"); + } + + private void kbtnDomainUpDownNotificaton_Click(object sender, EventArgs e) + { + KryptonUserInputToastNotificationData domainUpDownNotificationData = new KryptonUserInputToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + NotificationInputAreaType = KryptonToastNotificationInputAreaType.DomainUpDown, + UserInputList = GetItems(), + CountDownSeconds = 60 + }; + + string? result = KryptonToastNotification.ShowNotification(domainUpDownNotificationData) as string; + + KryptonMessageBox.Show($"Result = {result}"); + } + + private void kbtnMaskedTextBoxNotificaton_Click(object sender, EventArgs e) + { + KryptonUserInputToastNotificationData maskedTextBoxNotificationData = + new KryptonUserInputToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + NotificationInputAreaType = KryptonToastNotificationInputAreaType.MaskedTextBox, + CountDownSeconds = 60 + }; + + string? result = KryptonToastNotification.ShowNotification(maskedTextBoxNotificationData) as string; + + KryptonMessageBox.Show($"Result = {result}"); + } + + private void kbtnNumericUpDownNotificaton_Click(object sender, EventArgs e) + { + KryptonUserInputToastNotificationData numericUpDownNotificationData = + new KryptonUserInputToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + NotificationInputAreaType = KryptonToastNotificationInputAreaType.NumericUpDown, + CountDownSeconds = 60 + }; + + int result = (int)KryptonToastNotification.ShowNotification(numericUpDownNotificationData); + + KryptonMessageBox.Show($"Result = {result}"); + } + + private void kbtnTextBoxNotificaton_Click(object sender, EventArgs e) + { + KryptonUserInputToastNotificationData textBoxNotificationData = new KryptonUserInputToastNotificationData() + { + NotificationTitle = @"Hello World!", + NotificationContent = @"This is a simple test...", + NotificationIcon = KryptonToastNotificationIcon.Information, + NotificationInputAreaType = KryptonToastNotificationInputAreaType.TextBox, + ToastNotificationCueText = @"Type your response here...", + CountDownSeconds = 60 + }; + + string? result = KryptonToastNotification.ShowNotification(textBoxNotificationData) as string; + + KryptonMessageBox.Show($"Result = {result}"); + } + } +} diff --git a/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.resx b/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/ToastNotificationQuickTestForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ToastNotificationTestChoice.Designer.cs b/Source/Krypton Components/TestForm/ToastNotificationTestChoice.Designer.cs new file mode 100644 index 000000000..227654f6f --- /dev/null +++ b/Source/Krypton Components/TestForm/ToastNotificationTestChoice.Designer.cs @@ -0,0 +1,110 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class ToastNotificationTestChoice + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnQuickNotificationTest = new Krypton.Toolkit.KryptonButton(); + this.kbtnUserInputNotification = new Krypton.Toolkit.KryptonButton(); + this.kbtnBasicNotification = new Krypton.Toolkit.KryptonButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnQuickNotificationTest); + this.kryptonPanel1.Controls.Add(this.kbtnUserInputNotification); + this.kryptonPanel1.Controls.Add(this.kbtnBasicNotification); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(320, 229); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnQuickNotificationTest + // + this.kbtnQuickNotificationTest.Location = new System.Drawing.Point(13, 75); + this.kbtnQuickNotificationTest.Name = "kbtnQuickNotificationTest"; + this.kbtnQuickNotificationTest.Size = new System.Drawing.Size(291, 25); + this.kbtnQuickNotificationTest.TabIndex = 2; + this.kbtnQuickNotificationTest.Values.Text = "Quick Notification Test"; + this.kbtnQuickNotificationTest.Click += new System.EventHandler(this.kbtnQuickNotificationTest_Click); + // + // kbtnUserInputNotification + // + this.kbtnUserInputNotification.Location = new System.Drawing.Point(13, 44); + this.kbtnUserInputNotification.Name = "kbtnUserInputNotification"; + this.kbtnUserInputNotification.Size = new System.Drawing.Size(291, 25); + this.kbtnUserInputNotification.TabIndex = 1; + this.kbtnUserInputNotification.Values.Text = "User Input Notification"; + this.kbtnUserInputNotification.Click += new System.EventHandler(this.kbtnUserInputNotification_Click); + // + // kbtnBasicNotification + // + this.kbtnBasicNotification.Location = new System.Drawing.Point(13, 13); + this.kbtnBasicNotification.Name = "kbtnBasicNotification"; + this.kbtnBasicNotification.Size = new System.Drawing.Size(291, 25); + this.kbtnBasicNotification.TabIndex = 0; + this.kbtnBasicNotification.Values.Text = "Basic Notification"; + this.kbtnBasicNotification.Click += new System.EventHandler(this.kbtnBasicNotification_Click); + // + // ToastNotificationTestChoice + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(320, 229); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "ToastNotificationTestChoice"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "ToastNotificationTestChoice"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonButton kbtnBasicNotification; + private Krypton.Toolkit.KryptonButton kbtnUserInputNotification; + private Krypton.Toolkit.KryptonButton kbtnQuickNotificationTest; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ToastNotificationTestChoice.cs b/Source/Krypton Components/TestForm/ToastNotificationTestChoice.cs new file mode 100644 index 000000000..bbc8563dd --- /dev/null +++ b/Source/Krypton Components/TestForm/ToastNotificationTestChoice.cs @@ -0,0 +1,40 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class ToastNotificationTestChoice : KryptonForm + { + public ToastNotificationTestChoice() + { + InitializeComponent(); + } + + private void kbtnBasicNotification_Click(object sender, EventArgs e) + { + BasicToastNotificationTest basicToastNotification = new BasicToastNotificationTest(); + + basicToastNotification.Show(); + } + + private void kbtnUserInputNotification_Click(object sender, EventArgs e) + { + UserInputToastNotificationTest inputToastNotification = new UserInputToastNotificationTest(); + + inputToastNotification.Show(); + } + + private void kbtnQuickNotificationTest_Click(object sender, EventArgs e) + { + ToastNotificationQuickTestForm quickToastNotification = new ToastNotificationQuickTestForm(); + + quickToastNotification.Show(); + } + } +} diff --git a/Source/Krypton Components/TestForm/ToastNotificationTestChoice.resx b/Source/Krypton Components/TestForm/ToastNotificationTestChoice.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Source/Krypton Components/TestForm/ToastNotificationTestChoice.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ToolStripTest.Designer.cs b/Source/Krypton Components/TestForm/ToolStripTest.Designer.cs new file mode 100644 index 000000000..c049f82ce --- /dev/null +++ b/Source/Krypton Components/TestForm/ToolStripTest.Designer.cs @@ -0,0 +1,200 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class ToolStripTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ToolStripTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.newToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.saveToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.printToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); + this.cutToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.copyToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.pasteToolStripButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.helpToolStripButton = new System.Windows.Forms.ToolStripButton(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.toolStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(804, 454); + this.kryptonPanel1.TabIndex = 0; + // + // toolStrip1 + // + this.toolStrip1.Font = new System.Drawing.Font("Segoe UI", 9F); + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripButton, + this.openToolStripButton, + this.saveToolStripButton, + this.printToolStripButton, + this.toolStripSeparator, + this.cutToolStripButton, + this.copyToolStripButton, + this.pasteToolStripButton, + this.toolStripSeparator1, + this.helpToolStripButton}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(804, 25); + this.toolStrip1.TabIndex = 1; + this.toolStrip1.Text = "toolStrip1"; + // + // newToolStripButton + // + this.newToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.newToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripButton.Image"))); + this.newToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.newToolStripButton.Name = "newToolStripButton"; + this.newToolStripButton.Size = new System.Drawing.Size(23, 22); + this.newToolStripButton.Text = "&New"; + // + // openToolStripButton + // + this.openToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.openToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripButton.Image"))); + this.openToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openToolStripButton.Name = "openToolStripButton"; + this.openToolStripButton.Size = new System.Drawing.Size(23, 22); + this.openToolStripButton.Text = "&Open"; + // + // saveToolStripButton + // + this.saveToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.saveToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripButton.Image"))); + this.saveToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.saveToolStripButton.Name = "saveToolStripButton"; + this.saveToolStripButton.Size = new System.Drawing.Size(23, 22); + this.saveToolStripButton.Text = "&Save"; + // + // printToolStripButton + // + this.printToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.printToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("printToolStripButton.Image"))); + this.printToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.printToolStripButton.Name = "printToolStripButton"; + this.printToolStripButton.Size = new System.Drawing.Size(23, 22); + this.printToolStripButton.Text = "&Print"; + // + // toolStripSeparator + // + this.toolStripSeparator.Name = "toolStripSeparator"; + this.toolStripSeparator.Size = new System.Drawing.Size(6, 25); + // + // cutToolStripButton + // + this.cutToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.cutToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("cutToolStripButton.Image"))); + this.cutToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.cutToolStripButton.Name = "cutToolStripButton"; + this.cutToolStripButton.Size = new System.Drawing.Size(23, 22); + this.cutToolStripButton.Text = "C&ut"; + // + // copyToolStripButton + // + this.copyToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.copyToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("copyToolStripButton.Image"))); + this.copyToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.copyToolStripButton.Name = "copyToolStripButton"; + this.copyToolStripButton.Size = new System.Drawing.Size(23, 22); + this.copyToolStripButton.Text = "&Copy"; + // + // pasteToolStripButton + // + this.pasteToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.pasteToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("pasteToolStripButton.Image"))); + this.pasteToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.pasteToolStripButton.Name = "pasteToolStripButton"; + this.pasteToolStripButton.Size = new System.Drawing.Size(23, 22); + this.pasteToolStripButton.Text = "&Paste"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // helpToolStripButton + // + this.helpToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.helpToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("helpToolStripButton.Image"))); + this.helpToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.helpToolStripButton.Name = "helpToolStripButton"; + this.helpToolStripButton.Size = new System.Drawing.Size(23, 22); + this.helpToolStripButton.Text = "He&lp"; + // + // ToolStripTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(804, 454); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.kryptonPanel1); + this.Name = "ToolStripTest"; + this.Text = "Form6"; + this.Load += new System.EventHandler(this.Form6_Load); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton newToolStripButton; + private System.Windows.Forms.ToolStripButton openToolStripButton; + private System.Windows.Forms.ToolStripButton saveToolStripButton; + private System.Windows.Forms.ToolStripButton printToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator; + private System.Windows.Forms.ToolStripButton cutToolStripButton; + private System.Windows.Forms.ToolStripButton copyToolStripButton; + private System.Windows.Forms.ToolStripButton pasteToolStripButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripButton helpToolStripButton; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/ToolStripTest.cs b/Source/Krypton Components/TestForm/ToolStripTest.cs new file mode 100644 index 000000000..ce964d31c --- /dev/null +++ b/Source/Krypton Components/TestForm/ToolStripTest.cs @@ -0,0 +1,24 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class ToolStripTest : KryptonForm + { + public ToolStripTest() + { + InitializeComponent(); + } + + private void Form6_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/Source/Krypton Components/TestForm/ToolStripTest.resx b/Source/Krypton Components/TestForm/ToolStripTest.resx new file mode 100644 index 000000000..e83ff9893 --- /dev/null +++ b/Source/Krypton Components/TestForm/ToolStripTest.resx @@ -0,0 +1,240 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU + 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j + LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei + ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 + mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV + 2Mz2wxeg6/UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW + DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 + 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ + 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH + 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy + ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS + rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV + Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W + r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv + 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIpSURBVDhPtZL/T1JRGMb5p1itrVZbbRpqZbawnBENV1I0 + jGlByTSyJTXJwq2oKZQb1KAv6JCYWSxvBrkkZUq4CeQEiRABFeLL072Xa0zRra31bO8v57zP5znnPYf1 + X+TxhWF6O7VtGYcnwbSWijKPOLzYrPSvLPwLS3huGUMlT7o9wGD9grVUBj+icdid03S9tDmgNxNwTgVQ + J+rA8XNtWwM+uuZATMwxmQVRycuJFNyzIRitDlScugKzjSgFRGJJaIwEsrk8AsHIhnSL/Ssck37UNipQ + I5DjtuYV7uksRYhr2kebhx2eP6nrycFIEh5fBA/1Nvru8q5+PDaOovK0rABwfwugWzcErfkzHhjsePL6 + E7q1VrTdNUDcrgGvSYlDZHN5XTNOnL8BVe8AJAoNDtZfLgDu9L1BPJmikzcrk81hlRwodZJwdBXziwnI + OrVoaOkiT8C8hKLHBPO7CbywOaE1jeC+bhAd6meQdvZC1KoG/5IS3MZ2HObLUHZSggvkWq3wOvbWiAqA + VpWeyStVfCUNf3AZ4zNhfHCFMEDMgye+hYr6FrDLzxQAUuVTpr0ocn74mchg5vsKRt1RcHp2Qv9+kZ78 + UcE17KkWFgHNN/uQzgBkGKLJPBZiecyGchjzrmFwPIF++xJUbDbUQzEacIArLpopSRSP4CUN1Obf1Abz + uqob5KjiXwWH/GVl5HPt5zZh37GL2H1EiF1VZ7GDI6CNW5r/TSzWbwHYL0mKJ5czAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGDSURBVDhPrZFNSwJRGIX9NYGbFoUlFElY1EJQKEYhCJsi + LaVsERnRF5iCaSZJO1toCDVGFkgoFpWQWWRR2aIvUxm1BKN1wSnHCFw4TOCzue+9nPNw4eVVnav4Izzb + QfxeGZ5TWaxT/rK3irzmC7CsusvC1G4IkbNLboIiDieF4GGUKeTeClDpppF8eeEu2PIfwfrzizSdw3Hk + EnKlFpkMzV2wH77AosOFTV8A+vkl9CiHuJeLJNNZjM8tYWB0FkTvMAwmy/8ERTR6CwjlGAi1Ccence6C + 1NsXzN4PKIxJLLgeIJ2MoXvmFraNBKK3eXZRIveJPvs7FIYniEkXZENOdE+GIZ2Ko10TwLK7tJmKmL0F + EEYarYM+NMnt0C1sQzpx/lcSEnZ2gcKY/gs0dlmZuWvmjjmpwA1qxVp2AWFIMAF/OAGBzMjMI7ZrtJCb + 4Df3o4Zfxy7QrdxDRFKol5khkpR2H4qmIOzUQNBGwrsXYxccnNOQqNbQ0KGGZ+eEPVwdeLxvqqrf4wGh + TNAAAAAASUVORK5CYII= + + + + + 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 + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/TreeViewExample.Designer.cs b/Source/Krypton Components/TestForm/TreeViewExample.Designer.cs new file mode 100644 index 000000000..f7a03a6b0 --- /dev/null +++ b/Source/Krypton Components/TestForm/TreeViewExample.Designer.cs @@ -0,0 +1,237 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class TreeViewExample + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TreeViewExample)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnClose = new Krypton.Toolkit.KryptonButton(); + this.buttonAppend = new Krypton.Toolkit.KryptonButton(); + this.buttonInsert = new Krypton.Toolkit.KryptonButton(); + this.buttonClear = new Krypton.Toolkit.KryptonButton(); + this.buttonRemove = new Krypton.Toolkit.KryptonButton(); + this.kbtnToggleNodeCheckBox = new Krypton.Toolkit.KryptonButton(); + this.kryptonPropertyGrid1 = new Krypton.Toolkit.KryptonPropertyGrid(); + this.ktvTest = new Krypton.Toolkit.KryptonTreeView(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.kryptonThemeComboBox1 = new Krypton.Toolkit.KryptonThemeComboBox(); + this.kryptonCustomPaletteBase1 = new Krypton.Toolkit.KryptonCustomPaletteBase(this.components); + this.kryptonManager1 = new Krypton.Toolkit.KryptonManager(this.components); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnClose); + this.kryptonPanel1.Controls.Add(this.buttonAppend); + this.kryptonPanel1.Controls.Add(this.buttonInsert); + this.kryptonPanel1.Controls.Add(this.buttonClear); + this.kryptonPanel1.Controls.Add(this.buttonRemove); + this.kryptonPanel1.Controls.Add(this.kbtnToggleNodeCheckBox); + this.kryptonPanel1.Controls.Add(this.kryptonPropertyGrid1); + this.kryptonPanel1.Controls.Add(this.kryptonThemeComboBox1); + this.kryptonPanel1.Controls.Add(this.ktvTest); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.Size = new System.Drawing.Size(730, 637); + this.kryptonPanel1.TabIndex = 0; + // + // kbtnClose + // + this.kbtnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.kbtnClose.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.kbtnClose.Location = new System.Drawing.Point(584, 603); + this.kbtnClose.Name = "kbtnClose"; + this.kbtnClose.Size = new System.Drawing.Size(138, 25); + this.kbtnClose.TabIndex = 8; + this.kbtnClose.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnClose.Values.Text = "Close"; + this.kbtnClose.Click += new System.EventHandler(this.kbtnClose_Click); + // + // buttonAppend + // + this.buttonAppend.AutoSize = true; + this.buttonAppend.Location = new System.Drawing.Point(13, 492); + this.buttonAppend.Name = "buttonAppend"; + this.buttonAppend.Size = new System.Drawing.Size(314, 28); + this.buttonAppend.TabIndex = 4; + this.buttonAppend.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonAppend.Values.Text = "Append"; + this.buttonAppend.Click += new System.EventHandler(this.buttonAppend_Click); + // + // buttonInsert + // + this.buttonInsert.AutoSize = true; + this.buttonInsert.Location = new System.Drawing.Point(13, 524); + this.buttonInsert.Name = "buttonInsert"; + this.buttonInsert.Size = new System.Drawing.Size(314, 28); + this.buttonInsert.TabIndex = 5; + this.buttonInsert.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonInsert.Values.Text = "Insert"; + this.buttonInsert.Click += new System.EventHandler(this.buttonInsert_Click); + // + // buttonClear + // + this.buttonClear.AutoSize = true; + this.buttonClear.Location = new System.Drawing.Point(13, 588); + this.buttonClear.Name = "buttonClear"; + this.buttonClear.Size = new System.Drawing.Size(314, 28); + this.buttonClear.TabIndex = 7; + this.buttonClear.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonClear.Values.Text = "Clear"; + this.buttonClear.Click += new System.EventHandler(this.buttonClear_Click); + // + // buttonRemove + // + this.buttonRemove.AutoSize = true; + this.buttonRemove.Location = new System.Drawing.Point(13, 556); + this.buttonRemove.Name = "buttonRemove"; + this.buttonRemove.Size = new System.Drawing.Size(314, 28); + this.buttonRemove.TabIndex = 6; + this.buttonRemove.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.buttonRemove.Values.Text = "Remove"; + this.buttonRemove.Click += new System.EventHandler(this.buttonRemove_Click); + // + // kbtnToggleNodeCheckBox + // + this.kbtnToggleNodeCheckBox.Location = new System.Drawing.Point(13, 461); + this.kbtnToggleNodeCheckBox.Name = "kbtnToggleNodeCheckBox"; + this.kbtnToggleNodeCheckBox.Size = new System.Drawing.Size(314, 25); + this.kbtnToggleNodeCheckBox.TabIndex = 3; + this.kbtnToggleNodeCheckBox.Values.DropDownArrowColor = System.Drawing.Color.Empty; + this.kbtnToggleNodeCheckBox.Values.Text = "Toggle Node CheckBox"; + this.kbtnToggleNodeCheckBox.Click += new System.EventHandler(this.kbtnToggleNodeCheckBox_Click); + // + // kryptonPropertyGrid1 + // + this.kryptonPropertyGrid1.Location = new System.Drawing.Point(334, 41); + this.kryptonPropertyGrid1.Name = "kryptonPropertyGrid1"; + this.kryptonPropertyGrid1.Padding = new System.Windows.Forms.Padding(1); + this.kryptonPropertyGrid1.SelectedObject = this.ktvTest; + this.kryptonPropertyGrid1.Size = new System.Drawing.Size(377, 413); + this.kryptonPropertyGrid1.TabIndex = 2; + // + // ktvTest + // + this.ktvTest.CheckBoxes = true; + this.ktvTest.ImageIndex = 0; + this.ktvTest.ImageList = this.imageList; + this.ktvTest.Location = new System.Drawing.Point(13, 13); + this.ktvTest.MultiSelect = true; + this.ktvTest.Name = "ktvTest"; + this.ktvTest.SelectedImageIndex = 0; + this.ktvTest.Size = new System.Drawing.Size(314, 441); + this.ktvTest.TabIndex = 0; + this.ktvTest.BeforeCheck += new System.Windows.Forms.TreeViewCancelEventHandler(this.ktvTest_BeforeCheck); + // + // imageList + // + this.imageList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList.ImageStream"))); + this.imageList.TransparentColor = System.Drawing.Color.Transparent; + this.imageList.Images.SetKeyName(0, "flag_bahamas.png"); + this.imageList.Images.SetKeyName(1, "flag_china.png"); + this.imageList.Images.SetKeyName(2, "flag_ecuador.png"); + this.imageList.Images.SetKeyName(3, "flag_england.png"); + this.imageList.Images.SetKeyName(4, "flag_france.png"); + this.imageList.Images.SetKeyName(5, "flag_greece.png"); + this.imageList.Images.SetKeyName(6, "flag_netherlands.png"); + this.imageList.Images.SetKeyName(7, "flag_poland.png"); + // + // kryptonThemeComboBox1 + // + this.kryptonThemeComboBox1.DefaultPalette = Krypton.Toolkit.PaletteMode.Microsoft365Blue; + this.kryptonThemeComboBox1.DropDownWidth = 503; + this.kryptonThemeComboBox1.IntegralHeight = false; + this.kryptonThemeComboBox1.Location = new System.Drawing.Point(334, 13); + this.kryptonThemeComboBox1.Name = "kryptonThemeComboBox1"; + this.kryptonThemeComboBox1.Size = new System.Drawing.Size(377, 22); + this.kryptonThemeComboBox1.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kryptonThemeComboBox1.TabIndex = 1; + // + // kryptonCustomPaletteBase1 + // + this.kryptonCustomPaletteBase1.BasePaletteType = Krypton.Toolkit.BasePaletteType.Custom; + this.kryptonCustomPaletteBase1.ThemeName = null; + this.kryptonCustomPaletteBase1.UseThemeFormChromeBorderWidth = Krypton.Toolkit.InheritBool.True; + // + // kryptonManager1 + // + this.kryptonManager1.GlobalCustomPalette = this.kryptonCustomPaletteBase1; + this.kryptonManager1.GlobalPaletteMode = Krypton.Toolkit.PaletteMode.Custom; + this.kryptonManager1.ToolkitStrings.OutlookGridStrings.CustomFormatMinimumColorButtonText = null; + // + // TreeViewExample + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.kbtnClose; + this.ClientSize = new System.Drawing.Size(730, 637); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "TreeViewExample"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "TreeView Example"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonThemeComboBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonTreeView ktvTest; + private Krypton.Toolkit.KryptonThemeComboBox kryptonThemeComboBox1; + private Krypton.Toolkit.KryptonPropertyGrid kryptonPropertyGrid1; + private System.Windows.Forms.ImageList imageList; + private Krypton.Toolkit.KryptonButton kbtnToggleNodeCheckBox; + private Krypton.Toolkit.KryptonButton buttonAppend; + private Krypton.Toolkit.KryptonButton buttonInsert; + private Krypton.Toolkit.KryptonButton buttonClear; + private Krypton.Toolkit.KryptonButton buttonRemove; + private Krypton.Toolkit.KryptonButton kbtnClose; + private Krypton.Toolkit.KryptonCustomPaletteBase kryptonCustomPaletteBase1; + private Krypton.Toolkit.KryptonManager kryptonManager1; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/TreeViewExample.cs b/Source/Krypton Components/TestForm/TreeViewExample.cs new file mode 100644 index 000000000..39cecdd8d --- /dev/null +++ b/Source/Krypton Components/TestForm/TreeViewExample.cs @@ -0,0 +1,112 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class TreeViewExample : KryptonForm + { + private int _next = 1; + + private Random _random = new Random(); + + public TreeViewExample() + { + InitializeComponent(); + + buttonAppend_Click(this, EventArgs.Empty); + buttonInsert_Click(this, EventArgs.Empty); + buttonInsert_Click(this, EventArgs.Empty); + buttonInsert_Click(this, EventArgs.Empty); + ktvTest.SelectedNode = null; + buttonAppend_Click(this, EventArgs.Empty); + buttonInsert_Click(this, EventArgs.Empty); + buttonInsert_Click(this, EventArgs.Empty); + ktvTest.SelectedNode = null; + buttonAppend_Click(this, EventArgs.Empty); + buttonInsert_Click(this, EventArgs.Empty); + ktvTest.SelectedNode = null; + buttonAppend_Click(this, EventArgs.Empty); + buttonAppend_Click(this, EventArgs.Empty); + } + + private KryptonTreeNode CreateNewItem() + { + var item = new KryptonTreeNode + { + Text = $@"Item {_next++}", + ImageIndex = _random.Next(imageList.Images.Count - 1) + }; + item.SelectedImageIndex = item.ImageIndex; + return item; + } + + private void kbtnToggleNodeCheckBox_Click(object sender, EventArgs e) + { + if (ktvTest.SelectedNode is KryptonTreeNode node) + { + node.IsCheckBoxVisible = !node.IsCheckBoxVisible; + } + } + + private void ktvTest_BeforeCheck(object sender, TreeViewCancelEventArgs e) + { + if (ktvTest.SelectedNode is KryptonTreeNode node) + { + e.Cancel = !node.IsCheckBoxVisible; + } + } + + private void buttonAppend_Click(object sender, EventArgs e) + { + TreeNode node = CreateNewItem(); + + ktvTest.Nodes.Add(node); + + ktvTest.SelectedNode = node; + } + + private void buttonInsert_Click(object sender, EventArgs e) + { + if (ktvTest.SelectedNode != null) + { + ktvTest.SelectedNode.Nodes.Add(CreateNewItem()); + ktvTest.SelectedNode.Expand(); + } + else + { + buttonAppend_Click(sender, EventArgs.Empty); + } + } + + private void buttonRemove_Click(object sender, EventArgs e) + { + if (ktvTest.SelectedNode != null) + { + if (ktvTest.SelectedNode.Parent != null) + { + ktvTest.SelectedNode.Parent.Nodes.Remove(ktvTest.SelectedNode); + } + else + { + ktvTest.Nodes.Remove(ktvTest.SelectedNode); + } + } + } + + private void buttonClear_Click(object sender, EventArgs e) + { + ktvTest.Nodes.Clear(); + } + + private void kbtnClose_Click(object sender, EventArgs e) + { + Close(); + } + } +} diff --git a/Source/Krypton Components/TestForm/TreeViewExample.resx b/Source/Krypton Components/TestForm/TreeViewExample.resx new file mode 100644 index 000000000..c38b6a64f --- /dev/null +++ b/Source/Krypton Components/TestForm/TreeViewExample.resx @@ -0,0 +1,1872 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADS + lgEAAk1TRnQBSQFMAgEBCAEAAVABAAFQAQABQAEAAUABAAT/AREBAAj/AUIBTQE2BwABNgMAASgEAAEB + AgABwAMAAQEBAAEQBgABgAEB/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8AoQABvgF3Ab4BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewG9AXsBvQF7Ab0BewG9AXsBvQF7 + Ab0BewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvQF7 + Ab0BewG9AXsBvQF7Ad4BewHeAX8B/wF/Ab0BdwG9AXcBvQF3Ab0BdwG9AXMBvQFzAb0BcwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3 + Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3 + Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwHeAXsB/wF7Af8BfwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvgF3 + Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcB3gF7Af8BewH/AX8BvQF3 + Ab0BdwG9AXcBvQF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3 + AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3 + AbwBdwG8AXcBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7 + AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvQF7Ab0BewG9AXsBvQF7 + Ad4BewHeAX8B/wF/AVsBZwE7AWMBOgFjAToBXwEaAV8BGgFfARoBXwEaAV8BGgFfARoBXwEaAV8BOgFf + AToBXwE6AV8BOgFfAToBXwE6AV8BOgFfATsBYwE7AWMBWwFnAVsBZwFbAWsBewFvAXsBbwF7AW8BewFv + AXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BWgFvATkBbwE4AW8BGAFv + ARcBbwH3AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFu + AfcBbgH3AW4BFwFvARgBbwF7AXMBvQF7Ad4BfwE6AWMBOgFjARoBXwEaAV8BGgFbARoBWwEaAVsBGgFb + ARoBXwEaAV8BGgFfARoBXwEaAV8BGgFfARoBXwEaAV8BGgFfARoBXwEaAV8BGgFfARoBXwEaAV8BGgFf + ARoBXwEaAV8BGgFfARoBXwE6AV8BOgFfAToBXwE6AV8BOgFfAToBXwE6AV8BOwFfATsBXwE7AV8BOwFf + ATsBXwE7AV8BOwFfATsBXwE7AV8BOwFfATsBXwE7AV8BOwFfATsBXwE7AV8BOwFfATsBXwE7AV8BOwFf + ATsBXwFbAV8BWwFjAVsBYwFbAWMBWwFjAVsBYwFbAWcBnQFvAb4BdwH/AX8BGQFjARkBYwEaAWMBGgFj + ARoBYwEaAWMBGgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFj + AToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFj + AToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAVoBYwFaAWMBWgFj + AVoBYwFbAWMBWwFjAVsBYwFbAWMBWwFjAVsBYwFbAWMBWwFjAVsBYwFbAWMBWwFjAZ0BbwG+AXcB/wF7 + ARgBawEYAWsB9wFqAfcBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFq + AfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFq + AfYBagH2AWoB9gFqAfYBagH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFu + AfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfcBbgH3AW4BFwFv + ARgBbwF7AXMBvQF7Ad4BfwGXAU4BlwFKAXYBQgFWAT4BVgE6AVYBOgFWAToBVgE6AVYBOgFWAToBVgE6 + AVYBOgFWAToBVgE6AVYBOgFWAToBVgE6AXYBPgF3AUYBlwFKAZcBTgHXAVIB2AFaAfgBXgEYAWMBGAFj + ARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwE5AWMB9wFiAdUBYgGTAWIBUgFe + ATABXgEPAV4B7gFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFd + Ac0BXQHOAV0B7wFdAQ8BXgEwAV4B1gFqAXsBcwHeAXsBdgFKAXYBRgFVAT4BNQE6ARQBNgEUATYBFAE2 + ARQBNgE0AToBNQE6ATUBOgE1AToBNQE6ATUBOgE1AToBNQE6ATUBOgE1AToBNQE6ATUBOgE1AToBNQE6 + ATYBOgFWAToBVgE6AVYBOgFWAToBVgE6AVYBOgFWAToBVgE+AVYBPgFWAT4BVgE+AXcBPgF3AT4BdwE+ + AXcBPgF3AT4BdwE+AXcBPgF3AT4BdwE+AXcBPgF3AT4BlwE+AZcBPgGXAT4BlwE+AZgBPgGYAT4BmAE+ + AZgBPgGYAT4BmAFCAZgBQgGZAUIBuQFGAbkBRgHZAUoB2QFKATsBXwGdAW8B3gF7AVQBQgFUAUIBVAFC + AVQBQgFUAUIBVAFCAVQBQgFUAUIBVAFCAVQBQgFUAUIBVAFCAVQBQgFUAUIBVAFCAVQBQgFUAUIBVAFC + AVQBQgFUAUIBVAFGAVQBRgF0AUYBdAFGAXQBRgF1AUYBdQFGAXUBRgF1AUYBdQFGAXUBRgF1AUYBdQFG + AXUBRgF2AUYBdgFGAXYBRgGWAUYBlgFGAZYBRgGWAUYBlgFGAZYBRgGWAUYBlgFGAZYBRgGWAUYBlgFG + AZYBRgGWAUYBlwFGAZcBSgGXAUoBlwFKAZcBSgGXAUoBlwFKAbgBSgG4AUoBuAFKAbgBSgE7AV8BnQFv + Ad4BewFRAVoBMAFaAQ8BWgHuAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZ + Ac0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZ + Ac0BWQHNAVkBzQFZAc0BWQHNAVkBzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFd + Ac0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHuAV0BDwFe + ARABXgExAV4B9gFqAXsBcwHeAXsB0gEtAbIBJQFxARkBUQERATABCQEwAQkBMAEJATABCQEwAQ0BMAEN + ATEBDQFRAQ0BUQENAVEBDQFRAQ0BUQENAVEBDQFxARUBkgEdAbIBJQHSAS0BEwE2ATMBQgF0AUoBlAFS + AZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAbUBUgG1AVIBtQNSAQ8BUgGsAU0BSQFN + AQcBTQHEAUwBggFIAUABSAFAAUgBQAFIAUABSAFBAUgBQQFIAUEBTAFBAUwBQQFMAUEBTAFBAUwBQQFM + AUEBTAFiAUwBgwFMAaQBTAHmAUwBMAFeARgBbwG9AXsBkAElAVABHQEvARUB7gEMAc4BBAHOAQQBzgEE + Ac4BBAHuAQgB7gEIAe4BCAHvAQgB7wEIAe8BCAHvAQgBDwEJAQ8BCQEPAQkBDwEJAQ8BCQEPAQkBDwEJ + ARABCQEwAQkBMAENATABDQExAQ0BUQENAVEBDQFRAQ0BUQENAVEBDQFRAREBUQERAVIBEQFyAREBcgER + AXIBEQFyAREBkgERAZIBEQGSAREBkwERAZMBEQGTARUBkwEVAZMBFQGzARUBswEVAbMBFQG0ARUBtAEV + AbQBFQG0ARUBtQEVAdUBFQHVARkB1QEdAfUBIQEVASYBFQEqAdkBSgFbAWcBvgF3AS0BGQEtARkBLQEZ + AS4BGQEuARkBLgEZAS4BGQFOARkBTgEZAU4BGQFOARkBTgEZAU4BGQFOARkBTgEZAU4BGQFOARkBTgEZ + AU4BGQFOARkBTgEdAU4BHQFOAR0BbgEdAW4BHQFuAR0BbgEdAW8BHQFvAR0BbwEdAW8BHQGPASEBjwEh + AY8BIQGQASEBkAEhAZABIQGQASEBkAEhAbABIQGwASEBsAEhAbEBIQGxASEBsQEhAbEBIQGxASEB0QEh + AdEBIQHRASEB0gEhAdIBJQHSASUB0gElAdMBJQHTASUB0wElAdMBJQHUASUB9AElAfQBJQG4AUoBWwFj + Ab4BdwEoAUUB5gFEAaQBRAFiCUABYAFAAWABQAFgAUABYAFAAWABQAFgAUABYAFEAWABRAFgAUQBYAFE + AWABRAFgAUQBYQFEAWEBRAFhAUQBYQFEAWEBRAFhAUQBYQFEAWEBRAFhAUQBYQFEAWEBRAFhAUQBYQFE + AWEBRAFhAUgBYQFIAWEBSAFhAUgBYQFIAWEBSAFhAUgBYQFIAWEBSAFhAUgBYQFIAWEBSAFhAUgBYQFI + AWEBSAFhAUgBYQFIAWEBSAFhAUgBYQFIAWEBTAFhAUwBYQFMAYIBTAGkAUwB5QFMAQcBTQExAV4BGAFv + Ab0BewHSASkBsgEhAZIBGQFyAREBUgEJAVIBCQFSAQkBUgENAVIBDQFSAQ0BUwENAXMBDQFzAQ0BcwEN + AXMBDQFzAQ0BcwENAZMBFQG0ASEB9AEpARQBMgFVAT4BdgFKAbYBUgH3AV4B9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeARgBXwEYAV8BtAFaATEBWgHNAVkBagFVAScBVQHFAVQBggFU + AUABUAFAAVABQAFQAUABUAFBAVABQQFUAUEBVAFBAVQBQQFUAUEBVAFBAVQBQQFUAUEBVAFiAVQBgwFQ + AaQBUAGkAUwBDwFeARcBbwG9AXsBcAEhAVABHQEwARUBEAENAfABBAHwAQQB8AEEAfABCAEQAQkBEAEJ + ARABCQERAQkBEQEJAREBCQERAQkBMQEJATEBCQExAQkBMQEJATEBCQExAQkBMQENATIBDQFSAQ0BUgEN + AVIBDQFTAQ0BcwENAXMBDQFzAQ0BcwERAXMBEQFzAREBcwERAZQBEQGUAREBlAERAZQBEQG0AREBtAER + AbQBEQG1ARUBtQEVAbUBFQG1ARUB1QEVAdYBFQHWARUB1gEVAfYBFQH2ARUB9gEVAfcBFQH3ARkB9wEZ + ARcBGgEYARoBFwEeARYBIgEWASIBFQEmAdkBSgFbAWMBvgF3AS0BGQEuARkBLwEVAS8BFQEwARUBUAEV + AVABFQFQARUBUAEVAVABFQFQARUBcAEVAXEBFQFxARUBcQEVAXEBFQFxARUBcQEVAXEBGQFxARkBcQEZ + AXEBGQFxARkBcQEZAZEBGQGRARkBkQEZAZEBGQGSARkBkgEZAZIBHQGSAR0BsgEdAbIBHQGyAR0BsgEd + AbMBHQGzAR0BswEdAdMBHQHTAR0B0wEdAdMBHQHUAR0B1AEdAdQBHQHUAR0B9AEdAfQBIQH0ASEB9AEh + AfUBIQH1ASEB9QEhAfUBIQH2ASUBFgEmAfUBJQH1ASUB9AElAfQBJQG4AUoBWwFjAb4BdwEHAUUB5QFE + AaMBSAGBAUgBQAFIAUABSAFAAUgBYAFIAWABSAFgAUgBYAFIAWABSAFgAUgBYAFIAWABTAFgAUwBYAFM + AWABTAFgAUwBYAFMAWEBTAFhAUwBYQFMAWEBTAFhAUwBYQFMAWEBTAFhAUwBYQFMAWEBTAFhAUwBYQFM + AWEBTAFhAVABYQFQAWEBUAFhAVABYQFQAWEBUAFhAVABYQFQAWEBUAFhAVABYQFQAWEBUAFhAVABYQFQ + AWEBUAFhAVABYQFQAWEBUAFhAVABYQFQAWEBVAFhAVQBYQFUAWEBVAGCAVQBowFQAcQBUAHlAUwBEAFe + ARcBbwG9AXsBsgEpAbMBIQGTARkBlAERAXQBDQF0AQ0BdAENAXQBDQF0AQ0BdAENAXUBDQGVAREBlQER + AZUBEQGVAQ0BlQENAZUBDQG2ARkB9gEhARYBLgFXATYBlwFCAbgBTgH4AVoBOQFnATkBZwE5AWcBOQFn + ATkBZwE5AWcBOQFnATkBZwE5AWcBWgFnAVoBZwFaAWcBWgFnAfYBZgFzAWYBDwFiAYsBYQFIAWEB5gFc + AaMBXAFAAVwBQAFcAUABXAFgAVwBYQFcAWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFgAWEBYAFhAWABYgFc + AWIBVAGDAVABgwFMAe8BXQH3AW4BvQF7AXABIQFQARkBMQEVATEBDQESAQkBEgEJARIBCQEyAQkBMgEJ + ATIBCQEyAQkBMgENATMBDQEzAQ0BUwENAVMBDQFTAQ0BUwENAVMBDQFTAQ0BUwENAXMBDQF0AQ0BdAER + AXQBEQF0AREBdAERAZUBEQGVAREBlQERAZUBEQGVAREBlQEVAbUBFQG2ARUBtgEVAbYBFQHWARUB1gEV + AdcBFQH3ARUB9wEVAfcBGQH4ARkB+AEZAfgBGQEYARoBGAEaARgBGgEYARoBGQEaARkBGgE5ARoBOQEe + AToBHgE6AR4BWgEeATkBHgE4ASIBFwEiARUBIgHZAUYBWwFjAb4BdwEtARkBLgEZAVABFQFRARUBUwER + AVMBEQFTAREBcwEVAXMBFQFzARUBcwEVAXMBFQFzARUBcwEVAXMBFQFzARUBcwEVAZMBFQGTARUBkwEV + AZMBFQGTARUBkwEVAZQBGQGUARkBlAEZAZQBGQGUARkBlAEZAbQBGQG0ARkBtQEZAbUBGQHVARkB1QEd + AdUBHQHVAR0B1QEdAfUBHQH2AR0B9gEdAfYBHQH2AR0B9wEdAfcBHQH3AR0BFwEeARcBHgEXAR4BFwEe + ARcBIgEYASIBOAEiATgBIgE4ASIBOQEiATkBIgE3ASIBFgEmARUBJgH0ASUBuAFKAVsBYwG+AXcBBgFF + AeUBSAGjAUwBgQFMAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABUAFgAVQBYAFU + AWABVAFgAVQBYAFUAWABVAFhAVQBYQFUAWEBVAFhAVQBYQFUAWEBVAFhAVQBYQFUAWEBVAFhAVQBYQFU + AWEBWAFhAVgBYQFYAWEBWAFhAVgBYQFYAWEBWAFhAVgBYQFYAWEBWAFhAVgBYQFYAWEBXAFhAVwBYQFc + AWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFcAWEBYAFhAWABggFcAYIBVAGjAVABpAFM + AQ8BXgH3AW4BvQF7AbIBJQGzASEBtAEZAZUBFQGWAQ0BlgENAZYBDQGWAQ0BlgENAZcBEQGXAREBtwER + AbcBEQG3AREBtwERAbcBEQG3AQ0B+AEZARgBJgFZATIBeQE+AdoBSgEaAVcBWwFnAZsBcwGbAXMBmwFz + AXsBbwF7AW8BewFvAZwBcwGcAXMBnAFzAZwBcwGcAXMBvQFzAb0BcwE5AW8BtAFuATABbgHMA2kBBgFp + AaMBZAFAAWQBYAFkAWABZAFhAWQBYQFkAWEBZAFhAWQBYQFkAWEBZAFhAWQBYQFoAWEBaAFhAWgBYQFg + AWIBXAFiAVQBYgFMAc4BXQH3AW4BvQF7AVABHQFRARkBUgEVATMBDQEzAQkBMwEJATMBCQFTAQkBUwEJ + AVQBDQFUAQ0BVAENAXQBDQF0AQ0BdAENAXQBDQF0AQ0BdQENAXUBEQF1AREBlQERAZUBEQGWAREBlgER + AZYBEQGWAREBlgERAbYBEQG3AREBtwERAbcBFQG3ARUB1wEVAdgBFQHYARUB+AEVAfgBFQH4ARUB+QIZ + ARoBGQEaARkCGgEeARoBHgE6AR4BOgEeAToBHgE7AR4BWwEeAVsBHgFbAR4BWwEeAVsBHgF8AR4BfAEi + AXwBIgF9ASIBWwEiATkBHgEXAR4B9QEdAbkBRgFbAWMBvgF3AU0BGQFPARkBUQEVAVMBEQFVAQ0BdQER + AXUBEQF1AREBdQERAZUBEQGVAREBlgERAZYBEQGWAREBlgERAZYBEQGWAREBlgERAbYBEQG2AREBtgER + AbYBFQG2ARUBtgEVAbYBFQG3ARUBtwEVAbcBFQG3ARUBtwEVAdcBFQHXARUB1wEVAdgBGQH4ARkB+AEZ + AfgBGQH4ARkBGAEaARgBGgEZARoBGQEaARkBGgEZBRoBOgEeAToBHgE6AR4BOgEeAToBHgFaAR4BWwEe + AVsBHgFbASIBWwEiAXwBIgFaASIBOAEiARUBJgHzASUBuAFKAVsBYwG+AXcB5QFEAcQBSAGjAVABgQFU + AWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABXAFgAVwBYAFcAWABXAFgAVwBYAFc + AWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFgAWEBYAFhAWABYQFg + AWEBYAFhAWABYQFgAWEBYAFhAWABYQFgAWEBYAFhAWABYQFkAWEBZAFhAWQBYQFkAWEBZAFhAWQBYQFk + AWEBZAFhAWQBYQFkAWEBZAFhAWQBYQFoAWEBaAFhAWgBggFgAYIBXAGCAVQBggFMAe4BXQH3AW4BvQF7 + AbIBJQG0ASEBtQEZAbcBFQG4AREBuAERAbgBEQG4AREBuAERAbkBEQG5AREB2QERAdkBFQHZAREB2QER + AdkBEQHZAREBGgEeAVoBKgF7ATYBuwFCARwBUwFcAV8BnQFvAd0BewHdAXsB3QF7Ad0BewG9AXcB3gF7 + Ad4BewHeAXsB3gF7Af8BewH/AXsB/wF7Af8DewH2AXYBcgF2Ae0BcQGKAXEBJwFxAcQBcAFhAWwBYQFs + AWEBbAFhAWwBgQFsAYEBbAGBAWwBgQFsAYIBbAGCAXABggFwAYIBcAGCAXABYQFoAWEBYAFBAVQBQQFM + Ac0BXQH2AW4BvAF7AVABHQFRARkBUwEVAVQBEQFVAQ0BVQENAVUBDQF1AQ0BdQENAXUBDQF2AQ0BlgEN + AZYBEQGWAREBlgERAZYBEQGWAREBlgERAZcBEQG3AREBtwEVAbcBFQG4ARUBuAEVAbgBFQG4ARUBuAEV + AdgBFQHYARUB2QEVAdkBFQH5ARUB+QEZAfoBGQYaARsBGgE7ARoBOwEaATsBHgE8AR4BXAEeAVwBIgFc + ASIBXQEiAX0BIgF9ASIBfQEiAX0BIgGdASIBnQEiAZ0BIgGeASIBvgEiAb8BJgG/ASYBnQEiAVoBHgE4 + ARoB9QEZAbkBQgFbAWMBvgF3AU0BHQFQARkBUgEVAXUBEQF3AQ0BdwENAXcBDQGXAQ0BlwERAZcBEQGY + AREBuAERAbgBEQG4AREBuAERAbgBEQG4AREBuAERAbgBEQHYAREB2AERAdkBEQHZAREB2QERAdkBFQHZ + ARUB2QEVAdkBFQHZARUB2gEVAdoBFQH6ARUB+gEVAfoBFQEaARYBGgEWAhoBGwEaATsBGgE7ARoBOwEa + ATwBGgE8ARoBPAEaATwBGgE8ARoBXAEaAVwBGgFcAR4BXQEeAX0BHgF9AR4BfQEeAX4BHgGeAR4BngEi + AZ4BIgF8ASIBWQEiARYBJgHzASUBtwFKAVsBYwG+AXcB5QFEAcMBTAGiAVQBgQFcAYABYAGAAWABgAFg + AYABYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBggFsAYIBbAGCAWwBggFs + AYIBbAGCAXABggFwAYIBcAGCAXABYQFoAWEBYAFhAVQBYQFMAc0BXQH2AW4BvAF7AbIBJQG0ASEBtQEd + AbcBGQG4AREBuAERAbgBEQG4AREBuAERAbgBEQG5AREB2QERAdkBEQHZAREB2QERAdkBEQHZAREBGgEe + AToBKgF7ATYBuwFCAfwBTgFcAV8BnQFvAd0BewHdAXsB3QF7Ab0BdwG9AXcBvQF3Ad4BewHeAXsB3gF7 + Ad4BewH/AXsB/wF7Af8DewH2AXYBcgF2Ae0BcQGKAXEBJwFxAcQBbAFhAWwBYQFsAWEBbAFhAWwBgQFs + AYEBbAGBAWwBgQFsAYEBbAGBAXABgQFwAYIBcAGCAXABYQFoAWEBYAFBAVQBQQFMAc0BXQH2AW4BvAF7 + AZIBKQGzASUBtAElAdYBJQHXASUB1wElAfcBJQH3ASUB9wElAfcBJQEXASYBGAEmARgBKgEYASoBGAEq + ARgBKgEYASoBGAEqARgBKgE5ASoBOQEqATkBKgE5ASoBOQEqAToBKgE6ASoBOgEqAToBKgFaASoBWgEu + AVoBLgFaAS4BWgEuAXsBLgF7AS4BewEuAXsBLgF7AS4BmwEuAZwBMgGcATIBnAEyAZwBMgGdATYBvQE2 + Ab0BNgG9ATYBvQE2Ab0BNgHdATYB3QE2Ad0BNgHdATYB3gE2Af4BNgH/AToB/wE6Ab0BNgGbATIBWAEq + ATYBJgHZAUoBXAFnAb4BdwFNAR0BUAEZAXIBFQF0AREBdwENAXcBDQF3AQ0BlwENAZcBDQGXAQ0BmAER + AbgBEQG4AREBuAERAbgBEQG4AREBuAERAbgBEQG4AREB2AERAdgBEQHYAREB2QERAdkBEQHZAREB2QEV + AdkBFQHZARUB2QEVAdkBFQHaARUB+gEVAfoBFQH6ARUB+gEVARoBFgEaARYCGgEbARoBOwEaATsBGgE7 + ARoBPAEaATwBGgE8ARoBPAEaATwBGgFcARoBXAEeAVwBHgFdAR4BfQEeAX0BHgF9AR4BfgEeAZ4BHgGe + ASIBewEiATkBIgEWASYB8wElAbcBSgFbAWMBvgF3AeUBRAHEAUwBowFUAaEBWAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgQFgAYEBYAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYIBbAGC + AWwBggFsAYIBcAGCAXABggFwAWEBaAFhAWABYQFUAWEBTAHNAV0B9gFuAbwBewGyASUB1AEhAdUBHQHX + ARkB2AEVAdgBFQG4AREBuAERAbgBEQG4AREBuAERAbkBEQG5AREB2QERAdkBEQHZAREB2QERARkBHgE6 + ASoBegE2AbsBQgH7AU4BPAFfAZwBawHdAXsB3QF7Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF7Ad4BewHe + AXsB3gF7Af8BewH/AXsBegF3AfYBdgFxAXIBzQFxAWoBcQEnAW0BxAFsAWEBbAFhAWwBYQFsAWEBbAGB + AWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAXABgQFwAYIBcAFhAWgBYQFgAUEBVAFBAUwBzQFdAfYBbgG8 + AXsB9AExARUDNgFYAToBeQE6AXkBPgF5AT4BeQE+AXkBPgF5AT4BmQE+AZkBPgGZAUIBmQFCAZoBQgGa + AUIBmgFCAZoBQgGaAUIBugFCAboBQgG6AUIBuwFCAbsBQgG7AUIBuwFCAbsBQgG7AUIBuwFCAbsBQgG7 + AUIB2wFCAdsBRgHcAUYB3AFGAdwBRgHcAUYB3AFGAfwBRgH8AUYB/AFGAf0BRgH9AUoB/QFKAf0BSgH9 + AUoBHQFLAR0BSwEdAUsBHQFLAR0BSwEdAUsBHQFLAR4BSwE+AUsBPwFPAT8BTwH9AUYBuwFCAZkBOgFX + ATYB+gFSAXwBZwHeAXcBbQEhAXABHQFyARUBdAERAXYBDQF2AQ0BdgENAZcBDQGXAQ0BlwENAZcBDQGY + AREBmAERAbgBEQG4AREBuAERAbgBEQG4AREBuAERAbgBEQG4AREBuAERAbgBEQG5AREBuQERAdkBEQHZ + AREB2QEVAdkBFQHZARUB2QEVAdoBFQHaARUB+gEVAfoBFQH6ARUBGgEWARoBFgEaARYBGwEaATsBGgE7 + ARoBOwEaATsBGgE7ARoBPAEaATwBGgE8ARoBXAEeAVwBHgFcAR4BXQEeAX0BHgF9AR4BfQEeAX4BHgGe + AR4BWwEiATgBIgEVASIB0wElAbcBSgFbAWMBvgF3AeUBRAHEAUwBwwFQAaIBWAGhAWABgQFgAYEBYAGA + AWABgAFgAYABYAGAAWABgAFgAYEBYAGBAWABgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGC + AWwBggFsAYIBbAGCAXABggFwAWEBaAFhAWABYQFUAWEBTAHNAV0B9gFuAbwBewHSASkB1AElAdUBIQHX + AR0B2AEZAdgBFQHYARUBuAERAbcBEQG4AREBuAERAbgBEQG5AREBuQERAdkBEQHZAREB2QERARkBHgE6 + ASYBegEyAZsBPgH7AU4BPAFbAXwBawHdAXsBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BewHe + AXsB3gF7Ad4BewH/AXsBegF3AdYBdgFRAXIBzQFxAWoBbQEHAW0BxAFsAWEBbAFhAWwBYQFsAWEBbAGB + AWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFwAYIBcAFhAWgBYQFcAUEBVAFBAUwBzQFdAfYBbgG8 + AXsBVQE+AXcBRgGYAUoB2QFOAfsBUgH7AVYB+wFWAfsBVgH7AVYB+wFWARsBVwEbAVcBGwFXARsBVwEb + AVcBGwFXARwBVwEcAVcBHAFbATwBWwE8AVsBPAFbATwBWwE8AVsBPAFbATwBWwE8AVsBPAFbATwBWwE8 + AVsBPAFbATwBWwE8AVsBPAFbAT0BWwE9AVsBPQFbAT0BWwE9AVsBXQFbAV0BWwFdAVsBXQFfAV0BXwFd + AV8BXQFfAV0BXwFdAV8BXQFfAV0BXwFdAV8BXQFfAV0BXwFeAV8BfgFfAX4BXwF/AWMBPQFbAfsBUgG5 + AUoBmAFGARoBWwF8AWsB3gF3AW4BJQFwAR0BcgEZAXQBEQF2AQ0BdgENAXYBDQGWAQ0BlgENAZcBDQGX + AQ0BlwERAZcBEQGXAREBtwERAbcBEQG3AREBtwERAbcBEQG3AREBtwERAbgBEQG4AREBuAERAbkBEQG5 + AREB2QERAdkBFQHZARUB2QEVAdkBFQHZARUB2gEVAdoBFQH6ARUB+gEVAfoBFQH6ARUBGgEWAhoBGwEa + ARsBGgEbARoBGwEaARsBGgE7ARoBOwEaATsBGgE8AR4BXAEeAVwBHgFcAR4BXQEeAX0BHgF9AR4BfQEe + AX4BHgFbAR4BOAEiAfUBIQHSASUBtwFKAVsBYwG+AXcB5QFEAcUBTAHEAVABwwFYAaIBXAGhAVwBgQFc + AYABXAGAAVwBgAFgAYABYAGAAWABgQFgAYEBYAGBAWABgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFs + AYIBbAGCAWwBggFsAYIBbAGCAXABYQFoAWEBXAFhAVQBYQFMAc0BXQH2AW4BvAF7AdIBKQHUASUB1QEh + AfcBHQH4AR0B2AEZAdgBFQG3AREBtwERAbcBEQG4AREBuAERAbgBEQG4AREBuAERAdgBEQHYAREBGQEe + ATkBJgF6ATIBmgE+AfsBTgE7AVsBfAFrAbwBdwG8AXcBvAF3AbwBdwGcAXMBvQF3Ab0BdwG9AXcBvQF3 + Ad4BdwHeAXcB3gF3Ad4BdwFaAXcB1gFyAVEBcgHNAW0BagFtAQcBbQGkAWwBYQFoAWEBaAFhAWgBYQFo + AYEBaAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBggFsAWEBZAFhAVwBQQFUAUEBTAHNAV0B9gFu + AbwBewGXAUoB2QFSARoCWwFjAXwBawF8AW8BfAFvAXwBbwF8AW8BnAFvAZwBbwGcAW8BnAFvAZ0BbwGd + AW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGd + AW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAXMBnQFzAZ0BcwGd + AXMBnQFzAZ0BcwGdAXMBnQFzAZ0BcwGdAXMBnQFzAZ0BcwGeAXMBngFzAZ4BcwGeAXMBfQFrATsBYwH6 + AVoBuAFSAToBYwF8AW8B3gF7AY4BKQGQASEBcgEZAXMBEQF1AQ0BdQENAXYBDQGWAQ0BlgENAZYBDQGX + AQ0BlwENAZcBEQGXAREBlwERAbcBEQG3AREBtwERAbcBEQG3AREBtwERAbcBEQG4AREBuAERAbgBEQG4 + AREBuAERAdgBEQHYARUB2QEVAdkBFQHZARUB2QEVAdkBFQHZARUB+QEVAfkBFQH6ARUBGgEWARoBFgoa + ARsBGgE7ARoBOwEaATsBHgE8AR4BXAEeAVwBHgFcAR4BXQEeAX0BHgF9AR4BfQEeAVsBHgE4ASIB9QEh + AdIBJQGXAUoBWwFjAb4BdwHmAUQBxQFMAcQBUAHDAVgBwwFcAaIBXAGhAVwBgAFcAYABXAGAAVwBgAFg + AYABYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBggFoAYIBbAGCAWwBggFs + AYIBbAFhAWQBYQFcAWEBVAFhAUwBzQFdAfYBbgG8AXsB0gEpAfQBKQH1ASUBFwEmARkBJgH4ASEB+AEZ + AdgBFQG3AREBtwERAbgBEQG4AREBuAERAbgBEQG4AREBuAERAdgBEQH5AR0BOQEmAXoBMgGaAT4B+wFO + ATsBWwF8AWsBvAF3AbwBdwG8AXcBvAF3AZwBcwG9AXcBvQF3Ab0BdwG9AXcB3gF3Ad4BdwHeAXcB3gF3 + AVoBdwHWAXIBUQFyAc0BbQFqAW0BBwFtAaQBbAFgAWgBYAFoAWABaAFhAWgBgQFoAYEBbAGBAWwBgQFs + AYEBbAGBAWwBgQFsAYEBbAGBAWwBYQFkAWEBXAFBAVQBQQFMAc0BXQH2AW4BvAF7AVUBPgF3AUYBuAFO + AfoBVgEbAVsBGwFbAfsBWgH7AVYB+gFWAfoBVgH6AVYB+gFWARoBVwEbAVcBGwFXARsBVwEbAVcBGwFX + ARsBVwEbAVcBGwFXARsBVwEcAVcBHAFXARwBVwEcAVcBHAFXARwBVwEcAVcBHAFXARwBVwEcAVcBHAFX + ARwBVwEcAVcBPAFXATwBVwE8AVcBPAFXATwBVwE8AVcBPAFbAT0BWwE9AVsBPQFfAT0BXwE9AV8BPQFf + AT0BXwE9AV8BPQFfAV0BXwFdAV8BXQFfAV4BXwFeAV8BXgFfAR0BVwH7AVIBuQFKAXcBQgEaAVsBfAFr + Ad4BdwGOASkBkAEhAZIBHQGUARUBlgERAZYBEQGWAQ0BlgENAXYBCQF2AQ0BlgENAZcBDQGXAQ0BlwEN + AZcBDQGXAQ0BlwENAZcBDQG3AQ0BtwENAbcBDQG3AQ0BuAENAbgBDQG4AQ0BuAERAbgBEQG4AREB2AER + AdkBEQHZAREB2QERAdkBEQHZAREB2QERAdkBEQH5AREB+QEVAfoBFQH6ARUBGgEWARoBFgEaARYBGgEW + ARoBFgEbARYBGwEaATsBGgE7ARoBOwEaATwBGgFcARoBXAEaAVwBGgFdARoBfQEaAX0BGgFaAR4BGAEi + AfUBIQHSASUBlwFKAVsBYwG+AXcB5gFEAeUBTAHlAVAB5AFYAeQBYAHDAWABogFcAaEBXAGAAVwBgAFc + AYABYAGAAWABgAFgAYABYAGAAWABgQFgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFg + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFs + AYIBbAGCAWwBYQFkAWEBXAFhAVQBYQFMAc0BXQH2AW4BvAF7AdIBKQH0ASkBFgEqATgBLgFZAS4BGQEm + AfgBHQHYARkBtwERAbcBEQG4AREBuAERAZgBEQG4AREBuAERAbgBEQG4AREB+QEdATkBJgF6ATIBmgE+ + AdsBTgE7AVsBfAFrAbwBdwG8AXcBvAF3AbwBdwGcAXMBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXcB3gF3 + Ad4BdwFaAXcB1gFyAVEBcgHNAW0BagFtAQcBbQGjAWwBYAFoAWABaAFgAWgBYAFoAYEBaAGBAWgBgQFs + AYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAWEBZAFhAVwBQQFUAUEBTAHNAV0B9gFuAbwBewHzATEBNQE6 + AVYBPgGYAUYBugFKAZkBRgGZAUIBeQE+AVgBOgFYAToBWAE6AXgBOgF4AToBeAE6AXkBOgF5AToBeQE6 + AXkBOgF5AToBeQE6AXkBOgF5AToBegE6AZoBOgGaAToBmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmwE+AbsBPgG7AUIBuwFCAbsBQgG7AUIBuwFCAbwBQgG8AUIB3AFCAdwBRgHcAUYB3AFG + AdwBRgHcAUYB3QFGAf0BRgH9AUYB/QFGAf0BRgH9AUYBHgFHAR4BSwHcAUIBmgE+AXgCNgEyAdkBUgFc + AWcBvgF3AY4BKQGQASUBkgEhAbUBGQG3ARUBlgERAZYBEQF2AQ0BdQEJAXYBCQF2AQkBdgENAXcBDQGX + AQ0BlwENAZcBDQGXAQ0BlwENAZcBDQGXAQ0BlwENAZcBDQGYAQ0BmAENAZgBDQG4AQ0BuAENAbgBEQG4 + AREBuAERAbkBEQG5AREBuQERAdkBEQHZAREB2QERAdkBEQH5AREB+QERAfoBFQH6ARUB+gEVAfoBFQH6 + ARUBGgEWARoBFgEbARYBGwEWATsBGgE7ARoBOwEaATwBGgFcARoBXAEaAVwBGgFdARoBfQEaAToBHgEY + AR4B9QEhAbIBIQGXAUYBWwFjAb4BdwHmAUQBBgFNAQYBVQEFAV0BBQFhAeQBYAHDAWABoQFcAYABXAGA + AVwBgAFcAYABYAGAAWABgAFgAYABYAGAAWABgQFgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGB + AWABgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGB + AWwBgQFsAYIBbAFhAWQBYQFcAWEBVAFhAUwBzQFdAfYBbgG8AXsB0gEpAfQBLQEWAS4BWAEyAXoBNgE5 + AS4BGQEiAdgBGQG3AREBtwERAbcBEQGXAREBlwERAZgBEQG4AREBuAERAbgBEQH5AR0BOQEmAXoBMgGa + AT4B2wFOARsBWwF8AWsBvAF3AbwBdwG8AXcBvAF3AZwBcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BdwHe + AXcB3gF3AVoBdwHWAXIBUQFyAc0BbQFqAW0BBgFtAaMBbAFgAWgBYAFoAWABaAFgAWgBgQFoAYEBaAGB + AWgBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBYQFkAWEBXAFBAVQBQQFMAc0BXQH2AW4BvAF7AZEBKQHT + AS0B9QExATcBNgFZAToBOAE2ARcBLgH3ASkBtgEhAdYBIQHWASEB1gEdAdYBHQHWAR0B1gEhAdYBIQHX + ASEB1wEhAdcBIQHXASEB1wEhAfcBIQH4ASEB+AEhAfgBIQH4ASEBGAEiARgBJgEYASYBGAEmARgBJgEZ + ASYBGQEmARkBJgEZASYBOQEmAToBKgE6ASoBOgEqAToBKgFaASoBWwEqAVsBKgFbASoBWwEuAXsBLgF7 + AS4BfAEuAXwBLgF8AS4BnAEuAZ0BLgGdAS4BnQEyAb0BMgG9ATIBvgEyAZwBLgFZASoBNwEmAfUBIQG5 + AUYBWwFjAb4BdwGOASkBkAElAbMBIQG1AR0B2AEdAbcBFQGWAREBdQENAVUBCQF1AQkBdgEJAXYBCQF2 + AQkBdwEJAXcBCQF3AQkBdwEJAZcBCQGXAQkBlwENAZcBDQGXAQ0BlwENAZcBDQGXAQ0BmAENAbgBDQG4 + AQ0BuAENAbgBDQG4AQ0BuQENAbkBDQG5AQ0B2QERAdkBEQHZAREB2QERAdkBEQHZAREB2gERAfoBEQH6 + AREB+gERAfoBEQH6AREBGgEWARsBFgEbARYBOwEWATsBFgE7ARYBPAEWAVwBFgFcARoBXAEaAV0BGgE6 + ARoBFwEeAdUBIQGyASEBlwFGATsBYwG+AXcBBgFFAQYBTQEmAVUBJgFdAUcBZQEFAWEB4wFgAaIBXAGA + AVgBgAFcAYABXAGAAVwBgAFcAYABYAGAAWABgAFgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGB + AWABgQFgAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWwBgQFsAYEBbAGCAWwBYQFkAWEBXAFhAVQBYQFMAc0BXQH2AW4BvAF7AdIBKQEUAS4BNgEyAXgBOgGa + AT4BWgEyATkBJgH4AR0BtwERAbcBEQGXAREBlwERAZcBEQGXAREBmAERAbgBEQG4AREB+QEdATkBJgFa + ATIBmgE+AdsBTgEbAVsBXAFrAZwBdwGcAXcBnAF3AZwBdwGcAXMBnAFzAZwBcwGcAXMBnAFzAb0BdwG9 + AXcB3gF3Ad4BdwFaAXcB1gFyAVEBcgHNAW0BagFtAQYBbQGjAWwBYAFoAWABaAFgAWgBYAFoAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGBAWwBgQFsAWEBZAFhAVwBQQFUAUEBTAHNAV0B9gFuAbwBewFP + AR0BcQEdAZMBIQHVASUB9wEpAbYBIQGWARkBVQERATQBCQE0AQUBNAEFATQBBQE0AQUBNAEFATQBBQFU + AQUBVAEJAVQBCQFVAQkBVQEJAVUBCQFVAQkBVgEJAXYBCQF2AQkBdgEJAXYBCQGWAQkBlgENAZYBDQGX + AQ0BlwENAZcBDQGXAQ0BmAENAbgBDQG4AREBuQERAbkBEQHZAREB2QERAdoBEQHaAREB+gERAfoBFQH7 + ARUBGwEWARsBFgEbARYBHAEWATwBFgE8ARYBPAEaAV0BGgFdARoBfQEaAX0BHgFbARoBGQEWAdcBEQG0 + AREBmAE+ATsBXwG+AXcBjgEpAbEBJQGzASUB1gEhAfgBIQHXARkBlgEVAXUBDQFUAQkBVQEJAVUBCQF2 + AQkBdgEJAXYBCQF3AQkBdwEJAXcBCQF3AQkBdwEJAZcBCQGXAQ0BlwENAZcBDQGXAQ0BlwENAZcBDQGY + AQ0BuAENAbgBDQG4AQ0BuAENAbgBDQG4AQ0BuAENAbgBDQHYAQ0B2AERAdkBEQHZAREB2QERAdkBEQHa + AREB2gERAfoBEQH6AREB+gERARoBEgEaARIBGgEWARsBFgE7ARYBOwEWATsBFgE8ARYBXAEWAVwBFgFc + ARoBOgEaARcBHgHVAR0BsgEhAZcBRgE7AWMBvgF3AQYBRQEmAU0BJwFVAUcBXQFoAWUBJgFlAeQBYAGi + AVwBgQFYAYABWAGAAVwBgAFcAYABXAGAAVwBgAFgAYABYAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGB + AWABgQFgAYEBYAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFsAYEBbAGBAWwBggFsAWEBZAFhAVwBYQFUAWEBTAHNAV0B9gFuAbwBewHSASkBFAEuATYBMgF4 + AToBmgE+AXoBNgE5AS4BGQEmAfgBHQHYARkB2AEZAbgBFQG3ARUBuAERAbgBEQG4AREBuAENAfkCGQEm + AVoBMgGaAT4B2wFKARsBWwFcAWsBnAF3AZwBdwGcAXcBnAF3AZwBcwGcAXMBnAFzAZwBcwGcAXMBvQF3 + Ab0BdwHeAXcB3gF3AVoBdwHWAXIBUQFyAc0BbQFpAW0BBgFtAaMBbAFgAWgBYAFoAWABaAFgAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBYQFkAWEBXAFBAVQBQQFMAc0BXQH2AW4BvAF7 + AZEBJQGzASkB9QEtARYBMgFYATYBGAEyAfcBKQHXASEBtgEdAbYBHQG2ARkBtgEZAbYBGQG2ARkBtgEd + AdYBHQHWAR0B1gEdAdYBHQHXAR0B1wEdAdcBHQHXAR0B1wEdAdcBHQH4AR0B+AEhAfgBIQEYASIBGAEi + ARgBIgEYASIBGQEiARkBIgEZASIBGQEmARkBJgEZASYBGQEmAToBJgE6ASYBOgEmAToBJgE7ASYBWwEm + AVsBJgFbASYBWwEqAXwBKgF8ASoBfAEqAXwBKgF8ASoBnQEuAZ0BLgG9AS4BvQEuAZsBKgFZASYBFwEi + AfUBHQG5AUYBWwFjAb4BdwHQATUB8gE1ARUBNgFXATYBegE2AVkBMgE4AS4BFwEqAfYBJQH3ASEB9wEh + AfcBIQH3ASEB+AEhAfgBIQH4ASEB+AEhAfgBIQH4ASUBGAEmARgBJgEYASYBGAEmARgBJgEZASYBGQEm + ATkBJgE5ASYBOQEmATkBJgE5ASYBOQEmATkBJgE5ASoBOQEqAVkBKgFZASoBWgEqAVoBKgFaASoBWgEq + AVsBKgFbASoBWwEqAXsBKgF7AS4BewEuAXsBLgGbAS4BmwEuAZwBLgGcAS4BnAEuAbwBMgG9ATIBvQEy + Ab0BMgGaATIBeAEyATYBMgETATIB1wFOAVsBZwG+AXcBBgFFASYBTQEnAVUBSAFdAWgBZQFHAWUBBQFh + AeQBYAGiAVwBogFcAaIBXAGhAVwBgQFcAYEBXAGAAWABgA1gAYABYAGBAWABgQFgAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBYQFk + AWEBXAFhAVQBYQFMAc0BXQH2AW4BvAF7AdIBKQEUAS4BNgEyAXgBOgGaAT4BegE6AVoBMgFZAS4BOQEm + ARkBIgH4ASEB2AEdAbgBGQG4ARUBuAERAbgBEQGYAQ0B2AIZASYBWQEyAZoBOgHaAUoBGwFbAVwBawGc + AXcBnAF3AZwBdwGcAXcBnAFzAZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ad4BdwHeAXcBWgF3AdUBcgFR + AXIBzAFtAWkBbQEGAW0BowFsAWABaAFgAWgBYAFoAWABaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGB + AWwBgQFsAYEBbAFhAWQBYQFcAUEBVAFBAUwBzQFdAfYBbgG8AXsB0wEtARUCNgE6AXgBPgGZAUYBeQE+ + AVkBOgE4ATYBOAEyATgBMgE4ATIBOAEyATgBMgE4ATIBOAEyATgBNgFYATYBWAE2AVgBNgFYATYBWAE2 + AVgBNgFZATYBWQE2AVkBMgFZATYBeQE2AXkBNgF5ATYBeQE6AXoBOgF6AToBegE6AXoBOgF6AToBegE6 + AXoBNgF6ATYBegE2AZoBNgGaATYBmwE6AZsBOgGbAToBmwE6AZwBOgG8AToBvAE6AbwBPgG8AT4BvAE+ + AdwBPgHcAT4B3QE+Ad0BPgH9AT4B/QFCAdwBOgGaATYBWAEyATYBLgHZAU4BXAFnAb4BdwEyAUIBVAFC + AXYBRgG5AUoB2wFOAdoBSgG6AUYBmQFCAZgBQgGYAT4BeQE+AXkBPgF5AT4BeQE+AXkBPgF5AT4BeQE6 + AXkBPgF5AT4BeQE+AZkBQgGZAUIBmgFCAZoBQgGaAUIBmgFCAboBQgG6AUIBugFCAboBQgG6AUIBugFC + AboBQgG6AUIBugFGAdoBRgHaAUYB2wFGAdsBRgHbAUYB2wFGAdwBRgHcAUYB3AFGAdwBRgHcAUYB/AFK + AfwBSgH8AUoB/AFKARwBSwEdAUsBHQFLAR0BSwEdAUsBPQFLAT0BTwH7AUoBuQFGAZcBQgFUAUIB+AFa + AXsBawHeAXcBBgFFASYBTQEnAVUBSAFdAWgBZQFHAWUBJgFlAQUBYQHkAWAB5AFgAcMBYAGiAVwBogFc + AYEBXAGBAVwBgAFcAWABXAFgAVwKYAGAAWABgQFgAYEBYAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBYQFkAWEBXAFhAVQBYQFMAc0BXQH2 + AW4BvAF7AdIBKQEUAS4BNgEyAXgBOgGaAT4BmgE6AXoBOgF6ATYBWgEyATkBLgEZASoB+AEhAdgBHQHY + ARkBuAEVAbgBEQGXAQ0B2AIZASYBWQEuAXoBOgHaAUoBGwFbAVwBawGcAXcBnAF3AZwBdwGcAXcBnAFz + AZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ad4BdwHeAXcBWgF3AdUBcgFRAXIBzAFtAWkBbQEGAW0BowFs + AWABaAFgAWgBYAFoAWABaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAFhAWQBYQFc + AUEBVAFBAUwBzQFdAfYBbgG8AXsBNQE6AVYBPgGYAUYBuQFKAfoBUgHaAU4B2gFKAboBSgGaAUYBugFG + AboBRgG6AUYBugFKAboBSgG6AUoBugFKAboBTgG6AU4BugFOAboBTgG6AU4B2gFKAdoBSgHaAUoB2gFK + AdoBSgHbAUoB2wFOAfsBTgH7AU4B+wFOAfsBTgH7AVIB+wFOAdsBTgHbAU4B2wFKAdsBSgHbAUoB2wFK + AdsBSgH7AUoB+wFKAfwBTgH8AU4B/AFOAfwBTgEcAU8BHAFPARwBTwEcAVMBHAFTARwBUwEdAVMBPQFT + AT0BUwE9AVMBHAFPAdoBRgGZAUIBVwE6AfoBVgF8AWsB3gF3AXMBSgG2AVIB2AFaARoBXwFcAWcBXAFj + ATsBYwE7AV8BOgFbARoBWwEaAVsBGgFbAfoBWgH6AVoB+gFWAfoBVgHaAVYB+gFWAfoBVgH6AVoB+gFa + ARoBWwEbAVsBGwFfARsBXwE7AV8BOwFfATsBXwE7AV8BOwFfATsBXwE7AV8BOwFfATsBXwE7AV8BWwFj + AVsBYwFcAWMBXAFjAVwBYwFcAWMBXAFjAV0BYwFdAWMBXQFjAV0BYwFdAWMBfQFnAX0BZwF9AWcBfQFn + AX0BZwF+AWcBfgFnAZ4BZwGeAWcBngFnAVwBYwEaAVsB9wFWAbUBTgEZAWMBewFvAd4BewEGAUUBJgFN + AScBVQFIAV0BaQFlAUgBZQFHAWUBJwFlASYBZQEFAWEB5AFgAcMBYAGjAVwBogFcAYEBXAFhAVwBYAFc + AWABXAFgAVwBYAFcAWABXARgAYABYAGBAWABgQFgAYEBYAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAFhAWQBYQFcAWEBVAFhAUgBzQFdAfYBbgG8 + AXsB0gEpARQBLgE2ATIBeAE6AZoBPgGaAT4BmgE+AZoBPgGaAT4BegE2AVkBLgEZASoB+AEhAdgBHQG4 + ARUBtwERAZcBDQHYARUBGAEiATkBLgF5AToBugFKARsBWwFcAWsBnAF3AZwBdwGcAXcBnAF3AZwBcwGc + AXMBnAFzAZwBcwGcAXMBvQF3Ab0BdwHeAXcB3gF3AVoBdwHVAXIBUQFyAcwBbQFpAW0BBgFtAaMBbAFg + AWgBYAFoAWABaAFgAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBYQFkAWEBXAFB + AVQBQQFMAc0BXQH2AW4BvAF7AXcBQgG4AUoB2QFSARoBVwE7AV8BOwFfATsBXwE7AVsBGwFbATsBWwE7 + AV8BOwFfATsBXwE7AV8BOwFjATsBYwE7AWMBOwFjATsBYwE7AWMBOwFjATsBYwE7AWMBOwFfATsBXwFc + AV8BXAFjAVwBYwFcAWMBXAFnAVwBZwFcAWcBXAFnAVwBZwFcAWMBXAFjATsBXwE7AV8BOwFfATsBXwE7 + AV8BPAFfATwBXwE8AV8BPAFfAVwBXwFcAWMBXAFjAVwBYwFcAWMBXAFjAVwBYwFcAWMBfQFjAX0BYwF9 + AWMBfQFjAVwBXwEbAVcB2gFSAZgBSgEaAV8BfAFvAd4BewG1AVYB9wFiATkBawF7AXMBvQF7Ab0BewG9 + AXsBvQF7AbwBdwG8AXcBnAF3AZwBdwF7AXMBewFzAXsBcwF7AXMBWgFvAXsBcwF7AXMBewFzAXsBcwGc + AXcBnAF3AZwBdwGcAXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXsBvAF7AbwBewG8 + AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewHdAX8B3QF/Ad0BfwHdAX8B3gF/Ad4BfwHe + AX8B3gF/Af4BfwH+AX8B/gF/Af4BfwG8AXcBegFvATgBZwH2AV4BWQFrAZwBcwHeAXsBBgFFASYBTQEn + AVUBSAFdAWkBZQFpAWUBaAFlAWgBZQFoAWUBRwFlAQYBYQHlAWABxAFcAaMBXAGCAVwBYQFYAWABWAFg + AVgBYAFcAWABXAFgAVwBYAFcBGABgQFgAYEBYAGBAWABgQFgAYEBYAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBYQFkAWEBXAFhAVABYQFIAc0BXQH2AW4BvAF7 + AdIBKQEUAS4CNgF4AToBmgE+AZoBPgGaAT4BmgE+AZoBPgF6AToBWgEyATkBLgEZASoBGQEmAfgBIQH4 + AR0B2AEVAfgBIQE5ASoBWQE2AZoBPgHaAU4BGwFbAVwBawGcAXcBnAF3AZwBdwGcAXcBnAFzAZwBcwGc + AXMBnAFzAZwBcwG9AXcBvQF3Ad4BdwHeAXcBWgF3AdUBcgFRAXIBzAFtAWkBbQEGAW0BowFoAWABaAFg + AWgBYAFoAWABaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAFhAWQBYQFcAUEBVAFB + AUwBzQFdAfYBbgG8AXsBVgE+AXcBRgG4AU4B+gFSARsBWwEbAVsBGwFbARsBVwH7AVYBGwFbATsBXwE7 + AV8BXAFjATsBYwE7AWMBOwFfARsBXwEbAV8BGwFfARsBXwEbAV8BGwFbARsBWwEbAVcB+wFWAfsBVgEb + AVcBGwFXARsBVwEbAVsBGwFbARsBWwEbAVsBGwFbARsBVwH7AVYB+wFSAfsBUgH7AVYB+wFWARsBVwEb + AVcBGwFXARsBVwEcAVcBHAFXARwBVwEcAVcBPAFXATwBVwE8AVcBPAFXATwBVwE8AVsBPAFbAT0BWwFd + AVsBHAFTAdoBTgG5AUoBeAFGARoBWwF8AWsB3gF3AbUBVgH3AV4BOQFnAXsBcwG9AXsBvQF7Ab0BewG9 + AXcBvAF3AbwBdwGcAXcBnAF3AZwBcwF7AXMBewFzAXsBcwF7AXMBewFzAXsBcwF7AXMBnAFzAZwBdwGc + AXcBnAF3AZwBdwGcAXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBewG8 + AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7Ad0BewHdAX8B3QF/Ad0BfwHeAX8B3gF/Ad4BfwHe + AX8B3gF/Af4BfwH+AX8B/gF/AbwBdwF6AW8BOAFnAfYBXgFZAWsBnAFzAd4BewEFAUUBBgFNAScBVQFI + AV0BaQFlAWgBZQFoAWUBaAFlAWgBZQFHAWUBJgFlAQUBYQHkAWABxAFgAaMBXAGiAVwBgQFcAYEBXAGB + AVwBgQFcAYEBXAGBAWABgQFgAYEBYAGBAWABgQFgAYEBYAGACGABZAFgAWQBYAFkAWABZAFgAWQBYAFk + AWABZAFgAWQBYAFkAWABZAFgAWQBYAFkAWABZAFgAWQBYAFoAWABaAFgAWgBYAFoAWABaAFgAWgBYAFo + AWABaAFgAWwBYAFsAWABbAFgAWwBYAFkAWABXAFAAVABQAFIAc0BXQH2AW4BvAF7AdIBKQEUAS4CNgF4 + AToBmgE+AZoBPgGaAT4BmgE+AZoBPgGaAToBegE2AVoBMgFZAS4BOQEuATkBKgEZASYBGQEiATkBKgFa + ATIBmgE6AboBRgH7AVIBOwFfAXwBawGcAXcBnAF3AZwBdwGcAXcBnAFzAZwBcwGcAXMBnAFzAZwBcwG9 + AXcBvQF3Ad4BdwHeAXcBWQF3AdUBcgFQAXIBzAFtAWkBbQEGAW0BowFoAWABaAFgAWgBYAFoAWABaAGB + AWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAFhAWQBYQFcAUEBVAFBAUwBzQFdAfYBbgG8 + AXsBNAE+AVYBQgGXAUoB2QFOAfoBVgH6AVYB+gFSAfoBUgHaAVIB+wFWARsBXwE8AWMBXAFnAVwBYwE7 + AWMBGwFfAfoBWgH6AVYB+gFWAfoBVgH6AVYB+gFSAdoBTgHaAU4BugFKAboBSgG6AUoB2gFOAdoBTgHa + AU4B2gFOAdoBTgHaAU4B2gFKAboBSgG6AUoBugFKAboBSgG6AUoB2gFKAdoBSgHaAUoB2wFKAdsBSgHb + AUoB2wFKAdsBSgHbAU4B+wFOAfsBTgH7AU4B+wFOAfsBTgH8AU4B/AFOARwBTwEcAU8B2wFKAboBRgGY + AUIBVwE+AfoBVgF8AWsB3gF3AbUBVgH3AV4BOQFnAXsBbwG9AXcBvQF3Ab0BdwG9AXcBvAF3AbwBdwGc + AXcBnAF3AZwBcwGcAXMBnAFzAZwBcwF7AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBmwFzAZwBcwGcAXMBnAF3AZwBdwG8AXcBvAF3Ab0BdwG9 + AXcBvQF7Ab0BewG9AXsBvQF7Ad0BewHdAXsB3QF7Ad0BewHeAXsB3gF7Ad4BewHeAXsB3gF/Ad4BfwH+ + AX8B/gF/AbwBdwF6AW8BOAFnAfYBXgFZAWsBnAFzAd4BewHlAUQBBgFNAScBVQFIAV0BaAFlAWgBZQFo + AWUBSAFlAUcBZQFHAWUBJgFlAQYBZQEFAWEB5QFgAeQBYAHEAWABwwFgAaMBYAGiAWABogFgAaIBYAGi + AWABgQFgAYEBYAGBAWABgQFgAYEQYAFkAWABZAFgAWQBYAFkAWABZAFgAWQBYAFkAWABZAFgAWQBYAFk + AWABZAFgAWQBYAFoAWABaAFgAWgBYAFoAWABaAFgAWgBYAFoAWABaAFgAWwBYAFsAWABbAFAAWQBQAFY + AUABUAFAAUgBzQFdAfYBbgG8AXsB0gEtARQBMgI2AXgBOgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGa + AToBegE6AXoBNgF6ATYBegEyAVoBMgFaAS4BegE2AZoBPgG7AUIBuwFKAfsBVgE8AWMBfAFvAZwBdwGc + AXcBnAF3AZwBdwGcAXMBnAFzAZwBcwGcAXMBnAFzAb0BdwG9AXcBvQF3Ad4BdwFZAXMB1QFyAVABcgHM + AW0BaQFtAQYBaQGjAWgBYAFoAWABaAFgAWgBYAFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGB + AWwBgQFsAWEBZAFhAVwBQQFUAUEBSAHNAV0B9gFuAbwBewHzATkBNAE+AXYBRgG4AUoB2gFOAdoBTgHa + AU4BugFOAboBTgH6AVYBGwFfATwBZwF8AWsBXAFnATsBXwH6AVoB2gFSAdoBUgHaAVIB2gFOAdoBTgG6 + AUoBuQFGAZkBQgF5AUIBeQFCAXkBQgF5AUIBeQFCAXkBQgF5AUIBeQE+AXkBPgF5AT4BeQE+AXkBPgF5 + AT4BeQE+AZkBPgGaAT4BmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAboBQgG6AUIBugFCAboBQgG7 + AUIBuwFCAbsBQgG7AUIB3AFCAdwBRgG6AUIBmQE+AVcBOgI2AdkBUgFcAWsBvgF3AZQBUgH3AV4BOQFn + AXsBbwG9AXcBvQF3Ab0BdwG9AXcBvAF3AbwBdwGcAXcBnAF3AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBmwFzAXsBbwF7AW8BewFv + AXsBbwF7AXMBmwFzAZwBcwGcAXMBnAF3AbwBdwG9AXcBvQF3Ab0BdwG9AXsBvQF7Ad0BewHdAXsB3QF7 + Ad0BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAX8B/gF/AbwBdwF6AW8BOAFnAdYBWgE5AWcBnAFz + Ad4BewHlAUQBBgFNAScBVQFHAV0BaAFlAWgBZQFIAWUBRwFlAUcBZQFHAWUBJgFlASYBZQEmAWUBBgFl + AQUBZQEFAWUB5QFkAeQBYAHkAWABwwFgAcMBYAGiAWABogFgAaIBYAGBAWABgQFgAYEEYAFcAmABQAFg + AUABYAFAAWABQAFgAUABYAFAAWABQAFkAUABZAFAAWQBQAFkAUABZAFAAWQBQAFkAUABZAFAAWQBQAFk + AUABZAFAAWgBQAFoAUABaAFAAWgBQAFoAUABaAFAAWgBQAFoAUABbAFAAWwBQAFkAUABWAEgAVABIAFI + Aa0BXQHWAW4BnAF7AdIBLQEUATICNgF4AToBmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGa + AT4BmgE+AZoBOgGaAToBmgE6AbsBPgG7AUYB2wFKAdsBTgEcAVsBPAFjAXwBbwGcAXcBnAF3AZwBdwGc + AXcBnAFzAZwBcwGcAXMBnAFzAZwBcwG9AXMBvQFzAb0BcwG9AXMBWQFzAdUBcgFQAXIBzAFtAWkBbQEG + AWkBowFoAWABZAFgAWgBYAFoAWABaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAFh + AWQBYQFcAUEBUAFBAUgBzQFdAfYBbgG8AXsB0QE1ARMBOgFVAUIBdwFGAbkBSgG5AUoBuQFKAZkBSgGZ + AUoB2gFSARsBXwFcAWcBfAFvAVwBZwEbAV8B+gFWAbkBTgG5AU4BuQFKAbkBSgG5AUYBmQFCAXkBPgFZ + AToBOAE2ATgBNgE4ATYBOAE2ATgBNgE4ATYBOAEyATgBMgE4ATIBOAEyATgBMgE4ATIBOAEyATkBMgFZ + ATIBWQE2AVkBNgFZATYBWQE2AVkBNgFZATYBWQE2AXkBNgF5ATYBeQE2AXoBNgF6ATYBegE2AXoBNgF7 + ATYBmwE2AZsBOgGbAToBegE2AVgBNgE3ATIBFQEyAdkBTgFbAWcBvgF3AZQBUgHWAVoBGAFjAVoBawGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BWgFrAXsBbwF7 + AW8BewFvAXsBbwGcAXMBnAFzAZwBcwGcAXMBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcB3gF7Ad4BewHeAXsB3gF7AZwBcwFaAWsBGAFjAdYBWgE5AWcBnAFzAd4BewHl + AUQBBQFNASYBVQFHAV0BaAFlAWgBZQFHAWUBRwFlAUcBZQFHAWUBRwFlAUcBZQFHAWUBRwFlAScBZQEn + AWUBJwFlAQYBZQEFAWUB5AFkAeQBYAHDAWABwwFgAaIBYAGiAWABgQFgAYECYAFcAWABXAFAAVwBQAFc + AUABXAFAAVwBQAFcAUABYAFAAWABQAFgAUABYAFAAWABQAFgAUABYAFAAWQBQAFkAUABZAFAAWQBQAFk + AUABZAFAAWQBQAFkAUABaAFAAWgBQAFoAUABaAFAAWgBQAFoAUABaAFAAWgBIAFgASABWAEgAVABIAFI + Aa0BXQHWAW4BnAF7AdIBLQEUATICNgF4AToBmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGa + AT4BmgE+AZoBPgGaAToBmgE6AbsBQgG7AUYB2wFKAfsBUgEcAVsBXAFnAXwBbwG9AXsBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXcBWQFzAdUBcgFRAXIB7QFtAYoBbQEm + AWkBwwFoAWABZAFgAWgBYAFoAWABaAFgAWgBYAFoAYABaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAFh + AWQBYQFcAUEBUAFBAUgBzQFdAfYBbgG8AXsBsQExAfMBNQEVAToBVwE+AZkBQgF5AUIBeQFCAXkBQgF5 + AUIBugFOAfsBWgE8AWcBfAFvAVwBZwEbAVsB2gFSAZkBRgGZAUYBmQFCAZkBQgGZAT4BeQE+AXkBPgFZ + AToBWQE6AVkBOgFZAToBWQE+AXkBPgF5AT4BeQE+AXkBOgF5AToBeQE6AVkBOgFZAToBWQE6AXkBOgF5 + AToBegE6AXoBOgF6AToBegE6AXoBOgF6ATYBegE2AXoBNgF6ATYBegE2AXoBNgF6ATYBegE2AXoBNgGb + ATYBmwE6AZsBOgGbAToBegE6AVgCNgEyARUBLgHYAU4BWwFnAb4BdwGUAVIB9wFeATkBZwF7AW8BvQF3 + Ab0BdwG9AXcBvQF3AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwF7AW8BewFvAXsBbwF7AW8BewFv + AXsBbwGcAXMBnAFzAZwBcwGcAXMBnAFzAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ad4BewHeAXsB3gF7Ad4BewGcAXMBWgFrARgBYwHWAVoBOQFnAZwBcwHeAXsCSQFq + AVEBqwFZAcwBYQHtAWkB7QFpAe0BaQHtAWkB7AFpAewBaQHsAWkB7AFpAewBaQHsAWkBzAFpAcwBaQHM + AWkBzAFpAasBaQGrAWkBigFlAYoBZQGKAWUBaQFlAWkBZQFoAWUBSAFlAUgBZQFHAWUBJwFlAScBZQEn + AWUBJwFlAScBZQEnAWUBJwFlAScBZQEnAWUBJwFlAScBZQEnAWUBJwFlAScBaQEnAWkBJwFpAScBaQEn + AWkBJwFpAScBaQEnAWkBJwFtAScBbQEnAW0BJwFtAScBbQEnAW0BKAFtAQcBZQEGAV0B5gFUAcUBTAEQ + AV4BFwFvAb0BewHSAS0BFAEyAjYBeAE6AZoBQgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmgE+AZoBOgG7AUIB2wFGAfsBTgH7AVIBPAFfAVwBZwGdAXMBvQF7Ab0BewG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXcB3gF3AVoBdwH2A3IBDQFuAaoBbQFHAWkB5AFo + AYEBZAGAAWQBYAFoAWABaAFgAWgBYAFoAWABaAGAAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAFhAWQBYQFY + AUEBUAFBAUgBzQFdAfYBbgG8AXsBkAEpAbIBLQH0ATECNgFYAToBWAE6AVgBOgFYAToBWAE6AZkBSgH6 + AVYBOwFjAXwBbwE7AWMB+gFWAbkBTgF4AUIBeAE+AXgBPgF4AToBeAE2AXgBOgF5AToBeQE6AXkBPgF5 + AT4BeQFCAZoBQgGaAUYBmgFGAZoBRgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAT4BmgE+AZoBPgGa + AT4BmgE+AZoBPgF6AToBegE6AXoBOgF6AToBegE6AXoBNgF6ATYBegE2AZoBNgGaATYBmwE6AZsBOgGb + AToBuwE6AXoBOgFYATYBFgEyAfQBLQG4AU4BWwFnAb4BdwG1AVYB9wFeATkBZwF7AW8BvQF3Ab0BdwG9 + AXcBvQF3AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ad4BewHeAXsB3gF7Ad4BewGcAXMBWgFrARgBYwHWAVoBOQFnAZwBcwHeAXsBrAFJAe4BUQEw + AV4BcQFmAZMBbgGTAW4BkgFuAZIBbgGSAW4BkgFuAZIBbgGSAW4BkgFuAZIBbgFyAW4BcgFuAXIBbgFy + AW4BcQFuAVEBbgFRAWoBUAFqAVABagEwAWoBMAFqATABagEwAWoBLwFqAS8BagEPAWoBDwFqAQ8BagEP + AWoBDwFqAQ8BagEPAWoBDwFqAQ8BagEPAWoBDwFqAQ8BagEPAWoBDwFqAQ8BagEPAWoBDwFqAQ8BbgEP + AW4BDwFuAQ8BbgEPAW4BDwFyAQ8BcgEPAXIBDwFyAQ8BcgEwAXIB7gFpAc0BYQGsAVkBawFRAXMBYgE5 + AW8BvQF7AdIBLQEUATICNgF4AT4BmgFCAZoBQgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmgE+AbsBQgHbAUoB+wFOARsBVwE8AV8BfAFnAZ0BcwG9AXsBvQF7Ab0BewG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF3Ad4BdwHeAXcBegF3AfYBcgGSAXIBDgFuAasBbQFIAWkB5AFo + AYEBZAGBAWQBgAFkAWABaAFgAWgBYAFoAWABaAGAAWgBgQFoAYEBaAGBAWgBgQFsAYEBbAFhAWQBYQFY + AUEBUAFBAUgBzQFdAfYBbgG8AXsBbwElAZIBKQHUAS0B9gExATgBNgEYATYBGAE2ARgBNgEYATYBeQFC + AdoBUgE7AWMBfAFvATsBYwHaAVYBmQFGATgBOgE4ATYBOAE2ATgBMgE4ATIBWAE2AVgBNgF5AToBeQE+ + AZkBQgG6AUYBugFKAdsBTgHbAU4B2wFOAdsBSgHbAUoBuwFKAbsBSgG7AUYBuwFGAbsBRgG7AUYBuwFC + AbsBQgG7AUIBmgE+AZoBPgGaAToBmgE6AXoBOgF6AToBegE6AXoBOgGaAToBmgE6AZoBOgGbAToBmwE6 + AbsBOgG7AT4BeQE6AVcBNgEWAS4B1AEpAbgBTgFbAWcBvgF3AbUBVgH3AV4BOQFnAXsBbwG9AXcBvQF3 + Ab0BdwG9AXcBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcB3gF7Ad4BewHeAXsB3gF7AZwBcwFaAWsBGAFjAdYBWgE5AWcBnAFzAd4BewEwAU4BcgFW + AbQBXgH2AWYBOAFzATgBcwE4AXMBOAFzATgBcwE4AXMBOAFzATgBcwE4AXMBGAFzARgBcwEYAXMBGAFz + ARgBcwEXAXMBFwFvARcBbwEXAW8BFwFvAfcBbgH3AW4B9wFuAfcBbgH3AW4B9wFuAfcBbgH3AXIB9wFy + AfcBcgH3AXIB9wFyAfcBcgHXAW4B1wFuAdYBbgHWAW4B1gFuAdYBbgHWAW4B1gFuAdYBbgHWAW4B1gFu + AdYBbgHWAXIB9gFyAfYBcgH3AXIB9wF2AfcBdgEXAXcBFwF3ARcBdwHWAW4BlAFmAXIBXgExAVIB1gFi + AVoBbwG9AXsB0gEtARQBMgI2AXgBPgGaAUIBmgFCAZoBQgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGa + AT4BmgE+AZoBPgGaAT4BuwFGAdsBSgH7AVIBGwFXAVwBYwF8AWsBnQFzAb0BewG9AXsBvQF7Ab0BewG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BdwHeAXcB3gF3Ad4BdwF7AXcBFwFzAZMBcgEvAW4BzAFtAWgBaQEF + AWkBogFkAYEBZAGBAWQBYAFkAWABZAFgAWgBYAFoAWABaAGBAWgBgQFoAYEBaAGBAWgBgQFoAWEBYAFh + AVgBQQFQAUEBSAHNAV0B9gFuAbwBewFPASEBcQElAZMBJQHVASkB9wEtAfcBLQH3AS0B9wEtAfcBLQFZ + AT4BugFOARsBXwF8AW8BOwFfAdoBUgF5AUIBFwEyARcBLgEXAS4BFwEqARcBKgE4AS4BWAE2AXkBPgGZ + AUIBugFGAdoBTgHbAVIB+wFWAfsBVgH7AVYB+wFSAfsBUgH7AVIB+wFSAdsBTgHbAU4B2wFOAdsBSgHb + AUoB2wFGAdsBRgG7AUIBuwE+AZoBPgGaAT4BmgE6AXoBOgF6AToBegE6AZoBOgGaAToBmgE6AZsBOgG7 + AToBuwE+AbsBPgF5AToBVwEyARUBLgHTASkBlwFKAVsBZwG+AXcBtQFWAfcBXgE5AWcBewFvAb0BdwG9 + AXcBvQF3Ab0BdwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwF7AW8BnAFzAZwBcwGcAXMBnAFzAb0BdwG9 + AXcBvQF3Ab0BdwHeAXsB3gF7Ad4BewHeAXsBnAFzAVoBawEYAWMB1gFaATkBZwGcAXMB3gF7AZQBTgH3 + AVYBOQFjAXsBawG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9 + AXMBvQFzAb0BcwG9AXMBvQFzAb4BcwG+AXMBvgFzAb4BcwHeAXMB3gFzAd4BcwHeAXMB3gF3Ad4BdwHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ab4BcwG+AXMBvgFzAb4BcwG9AXMBvQFzAb0BcwG9AXMBvQFvAb0BcwG9 + AXMBvQFzAb0BcwHeAXcB3gF3Ad4BdwHeAXcB/wF7Af8BewH/AXsB/wF7Ab0BcwF7AWsBOQFjAdYBVgE5 + AWcBnAFvAd4BewHSAS0BFAEyAjYBeAE+AZoBQgGaAUIBmgFCAZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmgE+AZoBPgG7AUYB2wFKAfsBUgEbAVcBXAFjAXwBawGdAXMBvQF7Ab0BewG9AXsBvQF7 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF3Ad4BdwHeAXcB3gF3AXsBdwEXAXcBtAFyAVABcgHtAW0BigFt + AUcBaQHkAWgBwwFoAcMBaAGiAWgBogFoAYIBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBYQFg + AWEBWAFBAVABQQFIAc0BXQH2AW4BvAF7AW8BJQGRASUBswEpAfUBLQEXATIBFwEyARcBMgEXATIBFwEy + AXkBQgHaAVIBGwFfAXwBbwE7AWMB2gFSAZkBRgE3ATYBNwE2ATcBMgE3ATIBNwEuAVgBNgF5AT4BuQFG + AdoBSgHaAU4B+wFSARsBVwEcAVsBHAFbARwBWwEcAVsBHAFbARwBWwEcAVcBHAFXAfwBVgH8AVYB/AFS + AfwBUgH8AU4B+wFOAfsBTgHbAUoB2wFKAdsBSgHbAUYBuwFGAbsBRgG7AUYB2wFGAdsBRgHbAUYB2wFG + AfsBRgH8AUoB/AFKAboBRgF4AT4CNgEUATIB2AFOAVsBZwG+AXcBtQFWAfcBXgE5AWcBnAFvAd4BdwG9 + AXcBvQF3Ab0BdwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG+AXcBvgF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQFzAZwBcwGcAXMBnAFzAb0BcwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwHeAXcB3gF7Ad4BewHeAXsBvQFzAVoBawE5AWMB1gFaATkBZwGcAXMB3gF7AZQBTgHW + AVYBOQFjAXsBawG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9 + AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG+AXMBvgFzAb4BcwG+AXMB3gFzAd4BcwHeAXMB3gF3Ad4BdwHe + AXcB3gF3Ad4BdwHeAXcBvgF3Ab4BcwG+AXcBvgF3Ab4BdwG9AXcBvQF3Ab0BcwG9AXMBvQFzAb0BcwG9 + AXMBvQF3Ab0BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwH/AXsB/wF7Ab0BcwFaAWsBGAFfAdYBVgE5 + AWcBnAFvAd4BewHSAS0BFAEyAjYBeAE+AZoBQgGaAUIBmgFCAZoBQgGaAUIBmgE+AZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmgE+AZoBPgG7AUYB2wFKAfsBUgEbAVcBXAFfAXwBawGdAXMBvQF7Ab0BewG9AXsBvQF7 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF3Ad4BdwHeAXcB3gF3AZsBdwE4AXcB1AFyAXEBcgEOAXIBzAFt + AWkBbQEmAWkBBgFpAQUBaQHlAWgB5AFoAcQBaAHDAWgBogFoAYIBaAGBAWgBgQFoAYEBaAGBAWgBYQFg + AWEBWAFBAVABQQFIAc0BXQH2AW4BvAF7AXABJQGyASkB1AEtARYBMgE4ATYBOAE2ATgBNgE4ATYBOAE2 + AXkBRgHaAVIBOwFjAXwBbwE7AWMB2gFWAZkBRgFYAToBWAE6AVgBNgFYATYBWAEyAXkBPgGZAUYB2gFO + AfsBVgEbAVcBGwFbATwBXwE8AWMBPAFjATwBYwE8AV8BPAFfATwBXwE8AV8BPAFfATwBXwE8AVsBPAFb + ATwBWwE8AVsBPAFXARwBVwEcAVcBHAFXARwBVwEcAVMB/AFSAfsBUgH7AVIBGwFTARsBUwEbAVMBHAFT + ARwBUwE8AVcBPAFXAfsBTgG5AUoBdwFCATUBOgHZAVYBWwFrAb4BdwG1AVYB9wFeAVoBZwGcAW8B3gF3 + Ad4BdwG9AXcBvQF3Ab0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BdwG9AXcBvQF3 + Ab0BdwG+AXcBvgF3Ab4BdwG+AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3 + Ad4BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BcwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ad4BdwHeAXcB3gF7Ad4BewG9AXMBewFrATkBYwH3AloBZwGcAXMB3gF7AZQBTgHW + AVYBGAFjAXsBawG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9 + AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQFzAb0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXMBvQF3Ad4BdwHeAXcB3gF3AZwBbwFaAWcBGAFfAdYBVgE5 + AWcBnAFvAd4BewHSAS0BFAEyAjYBeAE+AZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmgE+AZoBPgG7AUYB2wFKAfsBUgEbAVcBXAFfAXwBZwGdAXMBvQF7Ab0BewG9AXsBvQF7 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF3Ad4BdwHeAXcB3gF3AZsBdwE4AXcB1QNyATABcgHtAXEBqwFt + AWkBbQFIAW0BSAFtAScBbQEnAW0BBQFtAeQBbAHDAWgBggFoAYIBaAGBAWgBgQFoAYEBaAFhAWABYQFY + AUEBUAFBAUgBzQFdAfYBbgG8AXsBkAEpAdIBLQH0ATEBNgE6AVgBPgFYAT4BWAE6ATgBOgE4AToBmQFG + AdoBVgE7AWMBfAFvATsBYwH6AVYBuQFKAVgBPgFYAT4BWAE6AVgBOgFYAToBmQFCAdoBSgH7AVYBPAFf + ATwBYwFcAWMBXAFnAVwBZwFcAWcBXAFnAVwBZwFcAWcBXAFnAVwBZwFcAWcBXAFnAVwBYwFcAWMBXAFj + AVwBYwFcAWMBXAFjAV0BYwFdAV8BPAFfATwBXwE8AV8BPAFfATwBXwE8AV8BPAFfAVwBWwFcAV8BXAFf + AV0BYwF9AWMBOwFbAfoBUgG4AUoBdgFCAfkBWgF8AWsB3gF3AbUBVgEYAV8BWgFnAZwBbwHeAXcB3gF3 + Ad4BdwG9AXcBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQF3Ab4BdwG+AXcBvgF3 + Ab4BdwG+AXcBvgF3Ab4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3 + Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3 + Ad4BdwG9AXcB3gF3Ad4BdwHeAXcB3gF7Ab0BcwF7AWsBOQFjAfcCWgFnAZwBcwHeAXsBcwFOAdYBVgEY + AWMBWgFrAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9 + AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQFzAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBnAFzAZwBcwG9AXMBvQFzAd4BdwHeAXcBnAFvAVoBZwEYAV8BtQFWATkBZwGc + AW8B3gF7AdIBLQEUATICNgF4AT4BmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmgE+AbsBRgHbAUoB+wFSARsBVwFcAV8BfAFnAZ0BbwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwHeAXcB3gF3Ad4BdwHeAXcBnAF3ATkBdwH2AXYBkwFyAVEBcgEvAXIB7QFx + AasBbQGKAW0BigFtAWkBbQFpAW0BJwFtAQYBbQHEAWwBowFoAYIBaAGCAWgBgQFoAYEBaAFhAWABYQFY + AUEBUAFBAUgBzQFdAfYBbgG8AXsBsAEtAdIBMQEUATYBVgE+AXgBQgF4AUIBeAFCAVgBPgFYAT4BmQFK + AfoBVgE7AWMBfAFvATsBZwH6AVoBuQFOAXgBQgF4AUIBeAFCAXgBPgF4AT4BuQFKAfoBUgE7AV8BXAFn + AXwBawF8AWsBfAFrAXwBawF8AWsBfAFrAXwBawF8AWsBfAFrAXwBawF8AWsBfAFrAXwBawF8AWsBfAFr + AXwBawF9AWsBfQFrAX0BawF9AWsBfQFrAX0BawF9AWsBfAFrAXwBawF8AWsBfAFrAXwBZwGdAWsBnQFr + AZ0BbwGdAW8BXAFnARoBXwHZAVIBlwFKARoBXwF8AW8B3gF7AbUBVgEYAV8BWgFnAZwBbwHeAXcB3gF3 + Ad4BdwHeAXcBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvQFzAb0BcwG9AXMBvgF3Ab4BdwG+AXcBvgF3 + Ab4BdwG+AXcBvgF3Ab4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3 + Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3wF3Ad8BdwHfAXcB3wF3Ad8BdwHfAXcB3wF3Ad4BdwHeAXcB3gF3 + Ad4BdwG9AXMB3gF3Ad4BdwHeAXcB3gF3Ab0BcwF7AWsBOQFjAfcCWgFnAZwBcwHeAXsBcwFOAbUBVgEY + AWMBWgFrAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwGcAXMBnAFzAXsBbwGcAXMBnAFzAb0BcwG9AXMBewFvATkBZwH3AV4BtQFWATkBZwF7 + AW8B3gF7AdIBLQEUATIBNgE6AXgBPgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgE+AZoBPgGa + AT4BmgE+AZoBPgGaAT4BuwFGAdsBSgH7AVIBGwFXAVwBXwF8AWcBnQFvAb0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BdwHeAXcB3gF3Ad4BdwGcAXcBOQF3AfYBdgGTAXIBUQFyAS8BcgHt + AXEBqwFtAaoBbQGKAW0BigFtAWkBbQFIAW0BJwFtAQYBbQHlAWwBxAFsAaMBaAGiAWgBgQFoAYEBYAFh + AVgBQQFQAUABSAHNAV0B9gFuAbwBewHRATEBEwE6AVUBQgGYAUYBugFOAboBTgG5AU4BuQFKAbkBSgH6 + AVYBGwFfAVwBZwGdAXMBXAFrATsBXwH6AVYBuQFOAbkBTgG5AU4BugFKAboBSgHaAVIB+wFWARsBWwE8 + AV8BPAFfATwBXwE7AV8BOwFbATsBWwE7AVsBOwFbATsBWwE7AVsBOwFbATsBWwE7AVsBOwFbATwBWwE8 + AVsBPAFbATwBWwE8AVsBPAFbATwBWwE8AVsBPAFbATwBWwE8AVsBPAFbATwBWwE8AVsBPAFbATwBWwE8 + AVsBPAFbAT0BWwH7AVIBuQFKAZcBQgFWAToB+QFWAXwBawHeAXcBcwFSAbUBWgH2AWIBOAFvAXoBdwFa + AXcBWgFzAVoBcwFZAXMBWQFzAVkBcwFZAXMBWQFzAVkBcwFZAXMBWQFzAVkBcwFZAXMBWQFzAVkBcwFa + AXcBWgF3AToBdwE6AXcBOgF3AVoBdwFaAXcBWgF3AVoBdwFaAXcBWgF3AVoBdwFaAXcBWQF3AVkBdwFZ + AXcBWQF3AVkBdwFZAXcBWQF3AVkBdwFZAXcBWgF3AVoBdwFaAXcBWgF3AVoBdwFZAXcBWQF3ATkBdwE5 + AXMBOAFzATgBcwE4AXMBOAFzATgBdwE4AXcB9gFuAbUBYgGUAVoCUgH3AWIBewFvAd4BewFzAU4BtQFW + ARgBYwFaAWsBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwGcAXMBnAFzAZwBcwG9AXMBvQFzAb0BcwF7AW8BOQFnAfcBXgG1AVYBGAFj + AXsBbwHeAXsB0gEtARQCNgE6AXgBPgGaAUYBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGa + AT4BmgE+AZoBPgGaAT4BuwFGAdsBSgH7AVIBGwFXAVwBXwF8AWcBnQFvAb0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BdwHeAXcB3gF3Ad4BdwGcAXcBOQF3AfYBdgGTAXIBUQFyAS8BcgHt + AXEBqwFtAasBbQGKAW0BigFtAYoBbQFpAW0BSAFtAUgBbQEnAW0BBQFtAeQBbAHDAWgBogFoAYEBYAFh + AVgBQAFQAUABSAHNAV0B9gFuAbwBewESATYBVAFCAZcBSgHZAVIBGwFbARsBWwEbAVsB+wFWAfoBVgE7 + AV8BXAFnAXwBbwGdAXMBfAFvAVwBZwE7AV8BGgFbARsBWwEbAVsBGwFbARsBWwEbAVsBGwFbAfsBVgH7 + AVYB+wFWAfsBUgHbAU4B2gFOAdoBTgHaAU4B2gFOAdoBTgHaAU4B2gFOAdoBTgHaAU4B2wFOAdsBTgHb + AU4B2wFOAdsBTgHbAU4B2wFOAdsBTgHbAU4B2wFOAfsBTgH7AU4B+wFOAfsBTgH7AU4B+wFOAfwBSgH8 + AUoB3AFGAdwBRgG6AT4BeAI2ATIB9AEpAbgBTgFbAWcBvgF3ATEBTgFyAVYBkwFiAbQBagH2AXIB9gFy + AdUBcgHVAXIB1QFuAdUBbgHVAW4B1QFuAdUBbgHVAW4B1QFuAdUBbgHVAW4B1QFyAdUBcgHVAXIB1QFy + AdUBcgG1AXIBtQFyAbUBcgG1AXIBtQFyAdUBcgHVAXIB1QFyAdUBcgHVAXIB1QFyAdUBcgG0AXIBtAFy + AbQBcgG0AXIBtAFyAbQBcgG0AXIBtAFyAbQBcgG1AXIBtQFyAbQBcgG0AXIBtAFyAbQBcgG0AXIBkwFy + AZMBcgGTAXIBkwVyAXEBcgEwAWYBDwFeAe4BVQGtAUkBlAFeAVkBbwG9AXsBcwFOAbUBVgEYAWMBWgFr + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3AZwBcwG9AXMBvQFzAb0BcwG9AXMBewFrATkBYwHWAVoBlAFSARgBYwF7AW8B3gF7 + AdIBMQEUAjYBOgF4AUIBmgFGAZoBRgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBPgGa + AT4BmgE+AbsBRgHbAUoB+wFSARsBVwFcAV8BfAFnAZ0BbwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwHeAXcB3gF3Ad4BdwHeAXcBnAF3ATkBdwH2AXYBkwFyAVEBcgEvAXIB7QFxAasBbQGr + AW0BqwFtAaoBbQGKAW0BigFtAYoBbQFpAW0BaQFtAUcBbQEFAW0B5AFsAaIBaAGCAWABYQFYAUABUAFA + AUgBzQFdAfYBbgG8AXsBMwE+AXUBRgHYAVIBGgFfAVwBZwFcAWcBXAFnAVwBYwFbAWMBfAFnAXwBbwGd + AXMBvQF3AZ0BcwGcAW8BfAFrAVsBZwFcAWcBXAFnAVwBZwFcAWcBPAFjARsBWwH7AVYB2gFOAboBSgGa + AUYBmgFCAXkBPgF5AT4BeQE+AXkBPgGZAT4BmQE+AZkBPgGZAT4BmQE+AZoBPgGaAT4BmgE+AZoBPgGa + AT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmwE+AZsBPgGbAToBmwE2AXsBMgF7 + AS4BWQEqARcBJgHVASEBkwEZAZcBQgE7AWMBvgF3Ae4BRQEPAVIBMAFeAVEBZgFxAXIBcQFyAXEBbgFx + AW4BcQFuAVEBbgFRAW4BUQFuAVABbgFQAW4BUAFuAVABbgFQAW4BUAFuAVABbgFQAW4BUAFuAVABbgEw + AW4BMAFuATABbgEwAW4BMAFuATABbgEwAW4BMAFuATABbgEwAW4BMAFuATABbgEvAW4BLwFuAS8BbgEv + AW4BLwFuAS8BbgEvAW4BLwFuAS8BbgEvAW4BLwFuAQ8BbgEPAW4BDgFuAQ4BbgEOAW4BDgFuAQ4BbgHu + AXEB7QFtAcwBbQGrAW0BqgFtAYoBYQFpAVkBSAFNASgBQQFRAVoBGAFrAb0BdwFzAU4BtQFWARgBYwFa + AWsBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BcwFaAWsBGAFjAdYBWgGUAVIBGAFjAXsBbwHe + AXsB0gExARQCNgE+AXgBQgGaAUYBmgFGAZoBRgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFC + AZoBPgGaAT4BuwFGAdsBSgH7AVIBGwFXAVwBXwF8AWcBnQFvAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ad4BdwHeAXcB3gF3Ad4BdwGcAXcBOQF3AfYBdgGTAXIBUQFyAS8BcgHtAXEBqwFt + AasBbQGrAW0BqwFtAasBbQGrAW0BqwFtAasBbQGrAW0BaQFtAScBbQEFAW0BwwFoAaIBYAGBAVgBYAFQ + AUABSAHNAV0B9gFuAbwBewFUAUIBtwFOAfkBWgFbAWcBnQFzAZ0BcwGdAXMBnQFzAZwBbwG9AXMBvQFz + Ab0BdwG9AXcBvQF3Ab0BcwG9AXMBnAFvAZ0BcwGdAXMBnQFzAZ0BcwFcAWsBGwFfAdoBUgGZAUYBeQFC + AVkBOgE5ATIBGAEuARgBLgE4AS4BOAEuATgBLgE4AS4BOAEuATgBLgE4AS4BOQEuATkBLgE5AS4BOQEu + ATkBLgE5AS4BOQEuATkBLgE5AS4BWQEuAVkBLgFZAS4BWgEuAVoBLgFaATIBWgEyAVoBKgE6ASYBOgEe + AhoB+AEVAbYBEQFzAQ0BUQENAVYCOgFfAb0BdwGsAUEBrAFNAcwBWQHNAWUB7QFtAe0BbQHtAW0B7QFt + Ae0BaQHtAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHLAWkBywFpAcsBaQHLAWkBqwFp + AasBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasBaQGrAWkBigFpAYoBaQGKAWkBigFp + AYoBaQGKAWkBigFpAYoBaQGKAWkBigFpAYoBaQGKCGkBbQFpAW0BaQFtAWkBbQFIAW0BJgFtAQUBbQHk + AWgBwwFcAaMBUAGDAUQBgwE4Ae4BUQH3AWoBvQF3AXMBTgG1AVYBGAFjAVoBawGcAXMBnAFzAZwBcwGc + AXMBewFvAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBnAFzAVoBawEYAWMBtQFWAXMBTgH3AV4BewFvAd4BewHSATEBFAI2AT4BeAFC + AZoBRgGaAUYBmgFGAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgE+AZoBPgG7AUYB2wFK + AfsBUgEbAVcBXAFfAXwBZwGdAW8BvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF3 + Ad4BdwHeAXcB3gF3AZwBdwE5AXcB9gF2AZMBcgFxAXIBLwFyAe0BcQGrAW0BqwFtAasBbQGrAW0BqwFt + AasBbQGrAW0BqwFtAasBbQGJAW0BSAFtASYBbQHkAWwBwwFkAYIBWAFhAVABQAFIAc0BXQH2AW4BvAF7 + ARMBOgF1AUYBtwFOAfoBWgE8AWMBPAFjATwBYwE7AWMBOwFfAVwBZwF8AWsBnQFzAb0BdwGdAXMBfAFr + AVwBZwE7AV8BOwFjATwBYwE8AWMBPAFjATwBXwEbAVsB+wFWAdoBUgHaAU4BugFGAZoBQgF6AT4BegE+ + AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+AZoBPgGaAT4BmgE+ + AZoBPgGaAT4BmgE+AboBPgG7AT4BuwE+AbsBQgG7AUIBmwE+AZsBOgGbATYBewEuAVkBKgEXASYB1QEh + AZMBHQGXAUYBOwFjAb4BdwGsAUEBzQFNAc0BWQHtAWUB7QFtAe0BbQHtAW0B7QFtAe0BaQHtAWkB7QFp + Ae0BaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcsBaQHLAWkBywFpAcsBaQGrAWkBqwFp + AasBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasBaQGKAWkBigFpAYoBaQGKAWkBigFp + AYoBaQGKAWkBigFpAYoBaQGKAWkBigFpAYoEaQFtAWkBbQFpAW0BaQFtAWgBbQFHAW0BJgFtAQUBbQHl + AWABxAFUAaQBRAGDATgB7wFVAfcBagG9AXcBcwFOAbUBVgEYAWMBWgFrAZwBcwGcAXMBnAFzAZwBcwF7 + AW8BnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBWgFrARgBYwHWAVoBcwFOAfcBXgF7AW8B3gF7AdIBMQEUAjYBPgF4AUIBugFG + AboBRgGaAUYBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAbsBRgHbAUoB+wFS + ARsBVwFcAV8BfAFnAZ0BbwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXcB3gF3 + Ad4BdwHeAXcBnAF3ATkBdwH2AXYBkwFyAXEBcgEvAXIB7QFxAasBbQGrAW0BqwFtAasBbQGrAW0BqwFt + AasBbQGrAW0BqwFtAYoBbQFpAW0BRwFtASYBbQHlAWQBowFcAWEBUAFAAUgBzQFdAfYBbgG8AXsB0gEx + ARQBOgFWAUIBmAFKAdoBUgHaAVIB2gFSAdoBUgHaAVIB+wFaATsBYwF8AWsBnQFzAXwBawE7AWMBGwFb + AdoBUgHaAVIB2gFSAdoBUgHaAVIB+wFSAfsBVgEbAVsBGwFbARsBVwH7AVYB+wFSAdsBTgHbAU4B+wFO + AfsBTgH7AU4B+wFOAfsBTgH7AU4B+wFOAfsBTgH7AU4B+wFOAfsBTgH7AU4B+wFOAfsBTgH7AU4B+wFO + AfsBTgH7AU4B+wFOAfwBTgH8AU4B/AFSAfwBUgH8AU4B/AFKAfwBSgHcAUYBugFCAXgBOgE2ATIB9AEt + AbgBTgFbAWcBvgF3AawBRQHNAU0B7QFZAe4BZQEOAW4BDgFuAQ4BbgEOAW4BDQFqAe0BaQHtAWkB7QFp + Ae0BaQHtAWkB7QFpAe0BaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFp + AcwBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasBaQGrAWkBqwFpAaoBaQGqAWkBqgFp + AaoBaQGqAWkBigFpAYoBaQGKAWkBigFpAYoBaQGKAW0BigFtAYkBbQGJAW0BaQFtAWgBbQFIAW0BRwFt + AScBYQHmAVQBxQFIAaQBOAHvAVUB9wFqAb0BdwFzAU4BtQFWARgBYwFaAWsBnAFzAZwBcwGcAXMBnAFz + AXsBbwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwF7AW8BGAFjAdYBWgFzAU4B9wFeAXsBbwHeAXsB0gExARQCNgE+AXgBQgG6 + AUYBugFGAboBRgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBuwFGAdsBTgH7 + AVIBGwFXAVwBXwF8AWcBnQFvAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BdwHe + AXcB3gF3Ad4BdwGcAXcBOQF3AfYBdgGTAXIBcQFyAS8BcgHuAXEBzAFtAcsBbQGrAW0BqwFtAasBbQGr + AW0BqwFtAasBbQGrAW0BigFtAYkBcQFpAXEBSAFxAQYBZQHEAVwBggFUAUABSAHNAV0B9gFuAbwBewGw + AS0B0gExARUBNgFXAT4BeQFCAXkBQgF5AUIBeQFCAVkBQgG6AU4B+wFaATwBZwGdAXMBXAFnARsBWwG6 + AU4BeQFCAXkBQgF5AUIBeQE+AXkBPgG6AUoB+wFSATwBWwFcAWcBXAFjAVwBYwFcAWMBPAFfATwBXwE8 + AV8BXAFfAVwBXwFcAV8BXAFfAVwBXwFcAV8BXAFfAVwBXwFcAV8BXAFfAVwBXwFcAV8BXAFfAVwBXwFc + AV8BXAFfAVwBXwFcAV8BXAFfAV0BXwFdAV8BXQFfAV0BXwFdAV8BPQFfAT0BXwH7AVYBuQFOAZcBRgFW + AT4B+QFWAXwBawHeAXcBzQFFAc0BUQHuAVkBDgFmAS4BbgEOAW4BDgFuAQ4BbgEOAWoBDgFqAQ4BagEO + AWoBDQFqAe0BaQHtAWkB7QFpAe0BaQHtAWkB7QFpAewBaQHsAWkB7AFpAewBaQHsAWkBzAFpAcwBaQHM + AWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHLAWkBqwFpAasBaQGrAWkBqwFpAasBaQGr + AWkBqwFpAasBaQGrAWkBqwFpAaoBaQGKAWkBigFpAYoBbQGKAW0BigFtAYoBbQGJAW0BiQFxAYkBcQFp + AXEBSAFlAQcBVQHmAUgBpQE8AQ8BVgH3AWoBvQF3AXMBTgG1AVYBGAFjAVoBawGcAXMBnAFzAZwBcwGc + AXMBewFvAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcB3gF7Ad4BewHeAXsB3gJ7AW8BOQFnAdYBWgFzAU4B9wFeAXsBbwHeAXsB0gExARQBNgFWAT4BeAFC + AboBRgG6AUYBugFGAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgG7AUYB2wFO + AfsBUgEbAVcBXAFfAXwBZwGdAW8BvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF3 + Ad4BdwHeAXcB3gF3AZwBdwE5AXcB9gF2AZMBcgFxAXIBMAFyAQ4BcgHMAW0BzAFtAasBbQGrAW0BqwFt + AasBbQGrAW0BqwFtAasBbQGrAXEBigFxAYoBcQGKAXEBJwFpAeUBXAGCAVQBQAFIAc0BXQH2AW4BvAF7 + AW8BJQGRASkBswEpAfUBLQEXATIBFwEyARcBMgH3ATEB9wExAVkBQgG6AVIBGwFfAXwBbwE7AV8B2gFS + AXkBQgEXATIBFwEyARcBLgEXAS4BFwEuAXkBPgHaAU4BPAFfAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFv + AZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFv + AZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFvAZ0BbwGdAW8BnQFzAZ0BcwGdAXMBnQFzAVwBawEaAWMB2QFW + AZcBTgEaAV8BfAFvAd4BewHNAUUB7QFRAQ4BWgEOAWYBLwFuAS8BbgEuAW4BDgFuAQ4BagEOAWoBDgFq + AQ4BagEOAWoBDgFqAQ0BagHtAWkB7QFpAe0BaQHtAWkB7QFpAe0BaQHtAWkB7QFpAe0BaQHtAWkB7QFp + AcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcwBaQHMAWkBzAFpAcsBaQHLAWkBywFp + AcsBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasBaQGrAWkBqwFtAaoBbQGqAW0BqgFtAaoBcQGqAXEBqwFx + AasBcQFqAWUBKAFZAQcBSQHGATwBEAFWARgBawG9AXcBcwFOAbUBVgEYAWMBWgFrAZwBcwGcAXMBnAFz + AZwBcwF7AW8BnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwHeAXsB3gF7Ad4BewHeAXsBnAFzATkBZwHWAVoBcwFOAfcBXgF7AW8B3gF7AdIBMQEUATYBVgE+ + AXkBQgG7AUYBuwFGAboBRgG6AUYBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBuwFG + AdsBTgH7AVIBHAFXAVwBYwF9AWsBnQFzAd4BewHeAXsB3gF7Ad4BewG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ad4BewHeAXsB3gF7Ad4BewGcAXcBOQF3AfYBdgGTA3IBMAFyAQ4BcgHMAW0BzAFtAcwBbQGrAW0BqwFt + AasBbQGrAW0BqwFxAasBcQGrAXEBqwFxAasBcQGKAXEBSAFpAeUBXAGjAVQBQAFIAc0BXQH2AW4BvAF7 + AW8BJQGRASkB0wEtAfUBLQEXATIBFwEyARcBMgH3ATEB9wExAVkBQgG6AVIBGwFfAZ0BbwE7AWMB2gFS + AXkBQgEXATIBFwEyARcBMgEXAS4BFwEuAVgBOgG6AUYB+wFWAVwBYwFcAWMBXAFjAVwBYwFcAWMBXAFj + AVwBYwFcAWMBXAFjAVwBYwFcAWMBXAFjAVwBYwFcAWMBXAFjAVwBYwFcAV8BXAFfAVwBXwFcAV8BXAFf + AVwBXwFcAV8BXAFfAVwBXwFcAV8BXAFfAVwBXwFcAV8BXAFjAVwBYwFcAWMBXAFnARsBWwHZAVIBlwFK + AVYBPgH5AVoBfAFrAd4BdwHNAUUB7gFRAQ4BWgEvAWYBLwFyAS8BbgEvAW4BLgFuAQ4BbgEOAW4BDgFu + AQ4BbgEOAW4BDgFuAQ4BbgEOAW4B7QFtAe0BbQHtAW0B7QFtAe0BbQHtAW0B7QFtAe0BbQHtAW0B7QFt + Ae0BbQHsAW0BzAFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BywFt + AcsBbQHLAW0BqwFtAasBbQGrAW0BqwFtAasBbQGrAW0BqwFtAasBbQGrAW0BqgFtAaoBcQGrAXEBqwFx + AasBcQFqAWUBSQFZAQgBTQHmATwBMAFWARgBawG9AXcBcwFOAbUBVgEYAWMBWgFrAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwHeAXsB3gF7Ad4BewHeAXsBnAFzATkBZwHWAVoBcwFOARgBYwF7AW8B3gF7AdIBMQEUATYBVgE+ + AXkBQgG7AUoBuwFGAbsBRgG6AUYBugFGAboBRgG6AUYBugFGAboBRgG6AUIBmgFCAZoBQgGaAUIBuwFG + AdsBTgH8AVIBHAFbAVwBYwF9AWsBvQFzAd4BewHeAXsB3gF7Ad4BewG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ad4BewHeAXsB3gF7Ad4BewGcAXsBWQF3AfYBdgG0A3IBMAFyAQ4BcgHMAW0BzAFtAcwBbQHMAW0BqwFt + AasBbQGrAXEBqwFxAasBcQGrAXEBqwFxAasBcQGrAXEBSAFpAQYBXQGjAVQBYQFIAc0BXQH2AW4BvAF7 + AXABJQGxASkB0wEtAfUBMQEXATIBFwEyARcBMgEXATIBFwEyAXkBQgHaAVIBPAFfAZ0BbwE8AWMB2gFS + AXkBQgE3ATIBFwEyARcBMgEXATIBFwEuAVgBOgF5AUIBugFKAfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFS + AfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFS + AfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFSAfsBUgH7AVIB+wFWAboBTgF4AUIBVgE6 + ARQBMgHYAU4BWwFnAb4BdwHNAUUB7gFRAQ8BXgEvAWYBUAFyAS8BcgEvAW4BLwFuAS4BbgEuAW4BLgFu + AS4BbgEuAW4BDgFuAQ4BbgEOAW4BDgFuAQ4BbgEOAW4BDgFuAQ0BbgENAW4BDQFuAQ0BbgENAW4B7QFt + Ae0BbQHtAW0B7AFtAewBbQHsAW0B7AFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFt + AcwBbQHMAW0BzAFtAasBbQGrAW0BqwFtAasBbQGrAW0BqwFtAasBbQGrAW0BqwFtAasBcQGrAXEBqwFx + AasBcQGKAWUBSQFZASgBTQEHAUEBMQFaARgBawG9AXcBcwFOAbUBVgEYAWMBWgFrAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwHeAXsB3gF7Ad4BewHeAXsBnAFzATkBZwHWAVoBlAFSARgBYwF7AW8B3gF7AdIBMQEUATYBVwE+ + AXkBQgG7AUoBuwFKAbsBRgG7AUYBugFGAboBRgG6AUYBugFGAboBRgG6AUYBugFCAZoBQgGaAUIBuwFK + AdsBTgH8AVYBHAFbAV0BYwF9AWsBvgFzAd4BewHeAXsB3gF7Ad4BewG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ad4BewHeAXsB3gF7Ad4BewGcAXsBWQF3AfcBdgG0A3IBMAFyAQ4BcgHMAW0BzAFtAcwBbQHMAW0BzAFt + AcwBcQHMAXEBzAFxAcwBcQHMAXEBzAFxAcsBcQGrAXECaQEGAV0BxAFUAWEBSAHtAV0B9gFuAbwBewGQ + ASkBsgEpAdQBLQH1ATEBFwE2ARcBNgEXATIBFwEyARcBMgF5AUIB2gFSATwBXwGdAW8BPAFjAfoBUgGZ + AUIBNwE2ATcBMgEXATIBFwEyARcBMgE4ATYBWAE6AXkBPgGaAUYBmgFGAZoBRgGaAUYBmgFGAZoBRgGa + AUYBmgFGAZoBRgGaAUYBmgFGAZoBRgGaAUYBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGa + AUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFCAZoBQgGaAUIBmgFGAboBRgF4AT4CNgH1ASkBswEh + AZcBRgE7AWMBvgF3Ae4BRQHuAVEBDwFeAS8BZgFQAXIBUAFyAS8BcgEvAW4BLwFuAS8BbgEvAW4BLwFu + AS8BbgEvAW4BLwFuAS8BbgEuAW4BDgFuAQ4BbgEOAW4BDgFuAQ4BbgEOAW4BDgFuAQ4BbgENAW4BDQFu + AQ0BbgENAW4B7QFtAe0BbQHtAW0B7QFtAe0BbQHtAW0B7QFtAe0BbQHtAW0B7QFtAewBbQHsAW0BzAFt + AcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFtAcsBbQHLAW0BywFxAasBcQGrAXEBqwFx + AYoBZQFpAVkBSQFNASgBQQFRAVoBGAFrAb0BdwFzAU4BtQFWARgBYwFaAWsBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAb0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ad4BewHeAXsB3gF7Ad4BewGcAXMBOQFnAfcBXgGUAVIBGAFjAXsBbwHeAXsB0gExARQBNgFXAT4BeQFG + AbsBSgG7AUoBuwFKAbsBRgG6AUYBugFGAboBRgG6AUYBugFGAboBRgG6AUYBmgFCAZoBQgG7AUoB2wFO + AfwBVgEcAVsBXQFjAX0BawG+AXMB3gF7Ad4BewHeAXsB3gF7Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF7 + Ad4BewHeAXsB3gF7AZwBewFZAXcBFwF3AbQDcgFQAXIBDgFyAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFx + AcwBcQHMAXEBzAFxAcwBcQHMAXEBzAFxAcwBcQJpAScBXQHEAVQBggFIAe4BXQH3AW4BvQF7AZABKQGy + AS0B1AEtAfUBMQEXATYBFwE2ARcBMgEXATIBFwEyAXkBQgHaAVIBPAFfAZ0BbwFcAWMB+gFSAZkBRgE3 + ATYBNwE2ATcBMgEXATIBFwEyARcBMgE4ATIBOAE2ATgBNgE4ATYBOAE2ATgBNgE4ATYBOAE2ATgBNgE4 + ATYBOAE2ATgBNgE4ATYBOAE2ATgBNgE4ATYBOAEyATgBMgE4ATIBOAEyATgBMgE4ATIBOAEyATgBMgE4 + ATIBOAEyATgBMgE5ATIBOQEyATkBMgE5ATIBOQEyAVkBMgFZATYBWQE2ARcBLgHVASUBswEdAXEBFQF2 + AT4BOgFfAb0BdwHuAUUBDgFSAS8BXgEwAWoBUAFyAVABcgFQAXIBLwFyAS8BbgEvAW4BLwFuAS8BbgEv + AW4BLwFuAS8BbgEvAW4BLwFuAS8BbgEuAW4BDgFuAQ4BbgEOAW4BDgFuAQ4BbgEOAW4BDgFuAQ0BbgEN + AW4BDQFuAQ0BbgENAW4B7QFtAe0BbQHtAW0B7QFtAe0BbQHtAW0B7QFtAe0BbQHtAW0B7QFtAe0BbQHM + AW0BzAFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFtAcwBbQHMAW0BzAFtAcwBcQGrAXEBqwFxAasBcQGK + AWUBagFZAWkBTQFJAUEBUgFaATgBawG9AXcBcwFOAbUBVgEYAWMBWgFrAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHe + AXsB3gF7Ad4BewHeAXsBnAFzATkBZwH3AV4BlAFSARgBYwF7AW8B3gF7AdIBMQEUAjYBPgFXAUIBeQFG + AXkBQgF5AUIBeAFCAXgBQgF4AUIBeAFCAXgBQgF4AUIBeAE+AXgBPgF4AT4BeAE+AZkBQgG5AUoBuQFO + AdoBUgEaAVsBOwFjAXsBawGcAXMBnAFzAZwBcwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BnAFz + AZwBcwGcAXMBWgFvARcBbwHVAW4BcgFqAVEBagEPAWoB7QFlAasBZQGrAWUBqwFlAasBZQGrAWUBqwFl + AasBaQGrAWkBqwFpAasBaQGrAWkBqwFpAasCaQFhAScBWQEGAVEBxAFIAQ8BXgEXAW8BvQF7AZABLQGy + AS0B0wEtAdQBMQH1ATEB9QExAfUBMQH1AS0B9QEtAVcBPgGYAUoB+gFaAVsBZwEaAVsBuAFOAVcBPgEV + ATIBFQEyAfUBMQH1AS0B9QEtAfYBLQH2ATEBFgEyARYBMgEWATIBFgEyARYBMgEWATIBFgEyARYBMgEW + ATIBFgEyARYBMgEWATIBFgEyARYBMgEWATIBFgEyARYBLgEXAS4BFwEuARcBLgEXAS4BFwEuARcBLgEX + AS4BFwEuARcBLgEXAS4BFwEuARcBLgEXAS4BFwEuARcBMgE3ATIBOAEyARYBLgHUASUBswEhAZEBHQF2 + AUIBOgFjAb4BdwHuAUUBDwFOAQ8BWgEvAWIBMAFqAS8BagEvAWYBLwFmAS8BZgEvAWYBLwFmAS8BZgEv + AWYBDwFmAQ8BZgEPAWYBDwFmAQ4BZgEOAWYBDgFmAQ4BZgEOAWYBDgFmAQ4BZgEOAWYBDgFmAQ0BZgEN + AWYBDQFmAe0BZQHtAWUB7QFlAc0BZQHNAWUBzQFlAc0BZQHNAWUBzQFlAc0BZQHNAWUBzQFlAc0BZQHM + AWUBzAFlAcwBZQHMAWUBzAFlAcwBZQHMAWUBzAFlAcwBZQHMAWUBrAFlAawBZQGsAWUBqwFlAasBaQGL + AV0BigFVAWoBTQFJAUUBcgFaATgBawG9AXcBcwFOAbUBVgH3AV4BGAFjAVoBawFaAWsBWgFrAVoBawFa + AWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFa + AWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7 + AW8BnAFzAZwBcwGcAXMBWgFrARgBYwHWAVoBlAFSARgBYwF7AW8B3gF7AfIBNQETATYBFAE6ATYBPgFX + AT4BVgE+AVYBPgFWAToBVgE6AVYBOgFWAToBVgE6AVYBOgE2AToBNgE6ATYBOgI2AVYBPgF3AUIBdwFG + AZcBTgG4AVIB+AFaARkBYwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFn + ATkBZwE5AWcB9wFmAbUBZgGTAWIBUQFiAQ8BYgHtAV0BrAFdAYoBXQGKAV0BigFdAYoBXQGKAV0BigFd + AYoBXQGKAWEBagFhAWoBYQFqAWEBagFhAWoBYQFpAVkBSAFVAScBUQEGAU0BMAFeARgBbwG9AXsBsQEt + AbEBLQHSAS0B0wEtAdQBLQHUAS0B1AEtAdQBLQG0ASkBFQE6AXcBRgG4AVIBGQFfAbgBUgF3AUYBNQE6 + AfQBLQHUAS0B1AEtAdQBLQHUASkB1AEtAdQBLQHUAS0B9AEtAfQBLQH0AS0B9AEtAfQBLQH0AS0B9AEt + AfQBLQH0AS0B9AEtAfQBLQH0AS0B9AEtAfQBLQH0AS0B9QEtAfUBKQH1ASkB9QEpAfUBKQH1ASkB9QEp + AfUBKQH1ASkB9QEpAfUBKQH1ASkB9QEpAfUBKQH1AS0B9QEtAfYBLQEWAS4B9QEpAdQBKQHTASUBsgEh + AZcBRgE7AWMBvgF3Ae4BSQHvAU0BDwFSAQ8BWgEvAV4BDwFeAQ8BXgEPAVoBDgFaAQ4BWgEOAVoBDgFa + AQ4BWgEOAVoBDgFaAQ4BWgEOAVoB7gFZAe4BWQHuAVkB7QFZAe0BWQHtAVkB7QFZAe0BWQHtAVkB7QFZ + Ae0BWQHtAVkB7QFZAe0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHMAVkBzAFZ + AcwBWQHMAVkBrAFZAawBWQGsAVkBrAFZAawBWQGsAVkBrAFZAawBWQGsAVkBrAFZAawBXQGsAV0BiwFd + AYsBVQGLAVEBagFNAWoBRQFyAVoBOQFrAb0BdwFzAU4BlAFSAbUBVgH3AV4BGAFjARgBYwEYAWMBGAFj + ARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFj + ARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFj + ARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjATkBZwE5AWcBOQFn + ATkBZwE5AWcBOQFnATkBZwEYAWMB9wFeAdYBWgGUAVIBGAFjAXsBbwHeAXsBEgE2ARMBNgETATYBFAE2 + ARQBNgEUATYBFAE2ARQBNgETATIBEwEyARMBMgETATIBEwEyARQBMgEUATIBFAEyARQBMgEUATYBNAE+ + AVUBQgFVAUYBdQFKAbYBUgHWAVYB9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4B9wFeAbUBWgFzAVoBUQFaAQ8BVgHtAVUBrAFVAYoBVQFpAVEBaQFRAWkBUQFpAVEBaQFR + AWkBVQFJAVUBSQFVAUkBVQFJAVUBSQFVAUkBVQFJAVUBSQFVAUkBUQFJAU0BSQFNAVIBXgE4AW8BvQF7 + AbEBMQGxATEBsQEtAbIBLQGyAS0BsgEpAbIBKQGSASkBkgEpAfMBMQE1AT4BdgFKAbcBUgF2AUoBNQE+ + AfMBNQGyASkBsgEpAbIBKQGyASkBsgEpAbIBKQGyASkBsgEpAbIBKQGyASkBsgEpAbIBKQGyASkBsgEp + AbIBKQGyASkBsgEpAbIBKQGyASkBsgEpAbIBKQGyASkBswEpAbMBKQGzASkBswEpAbMBKQGzASkBswEp + AbMBKQGzASkBswEpAbMBKQGzASkB0wEpAdMBKQHTASkB0wEpAdQBKQHUASkB1AEpAdMBKQHTASkB0gEp + AdIBKQGXAUoBWwFnAb4BdwHvAUkB7wFNAe8BTQEPAVIBDgFWAQ4BUgEOAVIBDgFSAe4BUQHuAVEB7gFR + Ae4BUQHuAVEB7gFRAe4BUQHuAVEB7gFRAe4BUQHuAVEB7QFRAc0BUQHNAVEBzQFRAc0BUQHNAVEBzQFR + Ac0BUQHNAVEBzQFRAc0BUQHNAVEBzQFRAa0BUQGtAVEBrQFRAa0BUQGtAVEBrQFRAa0BUQGsAVEBrAFR + AawBUQGsAVEBrAFRAawBUQGsAVEBrAFRAawBUQGsAVEBrAFRAawBUQGsAVEBjAFRAYwBUQGMAVEBjAFR + AYwBUQGLAU0BiwFNAYsBSQFqAUkBcwFeATkBbwG9AXsBcwFOAZQBUgGUAVIBtQFWAbUBVgG1AVYBtQFW + AbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFW + AbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1AVYB1gFaAdYBWgHWAVoB1gFaAdYBWgHWAVoB1gFa + AdYBWgHWAVoB1gFaAdYBWgHWAVoB1gFaAdYBWgHWAVoB1gFaAdYBWgHWAVoB1gFaAdYBWgHWAVoB1gFa + AfcBXgH3AV4B9wFeAfcBXgH3AV4B1gFaAbUBVgG1AVYBlAFSARgBYwF7AW8B3gF7ARIBOgESATYB8gE1 + AdIBMQHSATEB0gExAdIBLQHRAS0B0QEtAdEBLQHRAS0B0QEtAdEBLQHRAS0B0gEtAdIBLQHSAS0B0gEx + AfIBNQESAToBEgE+ATMBQgFTAUoBdAFOAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFS + AZQBUgGUAVIBlAFSAZQBUgFyAVIBMQFSAQ8BTgHNAU0BrAFNAYoBTQFpAUkBSAFJAUgBSQFIAUkBSAFJ + AUgBSQFIAUkBKAFNASgBTQEoAU0BKAFNASgBTQEoAU0BKAFNAUkBTQFJAU0BagFNAYsBTQFzAV4BOQFv + Ab0BewHRATUBsQExAbEBLQGQAS0BkAEpAZABKQFwASUBcAElAXABJQGxAS0B8wE1ATQBQgF1AUoBNAFC + ARMBNgHRAS0BkAElAZABJQGQASUBkAElAZABJQGQASUBkAElAZABJQGQASUBkAElAZABJQGQASUBkAEl + AZABJQGQASUBkAElAZABJQGQASUBkAElAZABJQGQASUBkAElAZEBJQGRASUBkQElAZEBJQGRASUBkQEl + AZEBJQGRASUBkQElAZEBJQGRASUBkQElAZEBJQGxASUBsQElAbEBJQGyASUBsgElAbIBJQGyASkB0gEp + AdIBLQHyATEBtwFOAVsBZwG+AXcB7wFJAe8BSQHuAUkB7gFJAe4BSQHuAUkB7gFJAe4BRQHuAUUB7gFF + Ae4BRQHuAUUB7gFFAe4BRQHOAUUBzgFFAc4BRQHOAUUBzQFFAc0BRQHNAUUBzQFFAc0BRQHNAUUBzQFF + Ac0BRQHNAUUBzQFFAc0BRQHNAUUBrQFFAa0BRQGtAUUBrQFFAa0BRQGtAUUBrQFFAa0BRQGsAUUBrAFF + AawBRQGsAUUBrAFFAawBRQGsAUUBrAFFAawBRQGsAUUBrAFFAawBRQGMAUUBjAFFAYwBRQGMAUUBjAFF + AYwBRQGMAUUBjAFFAYsBSQGLAUkBiwFJAXMBXgE5AW8BvQF7AXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFO + AXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFO + AXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFO + AXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BlAFS + AZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgEYAWMBewFvAd4BewHXAVIB1wFS + AbcBUgG3AVIBlwFOAZcBTgGXAU4BlgFOAZYBTgGWAU4BlgFOAZYBTgGWAU4BlgFOAZcBTgGXAU4BlwFO + AbcBTgG3AVIB1wFSAdcBVgHXAVoB+AFeARgBXwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFj + ARgBYwEYAWMBGAFjARgBYwEYAWMB9wFiAdYBYgHVAWIBlAFeAZMBXgFzAV4BcgFeAVEBXgFRAV4BUQFe + AVEBXgFRAV4BUQFeAVEBXgFRAV4BUQFeAVEBXgFRAV4BUQFeAVEBXgFSAV4BcgFeAXIBXgFzAV4BGAFr + AXsBcwHeAXsBlgFSAZYBUgGWAU4BlgFOAXYBSgF2AUoBdgFKAXYBSgF2AUoBlgFOAbcBUgHYAVoB+QFe + AdgBWgHXAVIBlgFOAXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFK + AXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFK + AXYBSgF2AUoBdgFKAXYBSgF2AUoBdgFKAZYBSgGWAUoBlgFKAZYBSgGWAUoBlwFKAZcBSgGXAUoBlwFK + AZcBTgG3AU4BtwFOAToBYwGcAW8B3gF7AbUBXgG1AV4BtQFeAbUBXgG0AV4BtAFeAbQBXgG0AVoBtAFa + AbQBWgG0AVoBtAFaAbQBWgG0AVoBtAFaAbQBWgGUAVoBlAFaAZQBWgGUAVoBlAFaAZQBWgGUAVoBlAFa + AZQBWgGUAVoBlAFaAZQBWgGUAVoBlAFaAZQBWgGUAVoBlAFaAZQBWgGUAVoBlAFaAZQBWgGUAVoBlAFa + AZQBWgGTAVoBkwFaAZMBWgGTAVoBkwFaAZMBWgGTAVoBkwFaAZMBWgGTAVoBkwFaAZMBWgFzAVoBcwFa + AXMBWgFzAVoBcwFaAXMBWgFzAV4BcwFeAXMBXgEYAWsBewFzAd4BewH3AV4B9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4BGAFj + ARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBewFvAb0BdwHeAXsBWwFr + AVsBawFbAWcBWwFnAVsBZwFbAWcBWwFnAVoBZwFaAWcBWgFnAVoBZwFaAWcBWgFnAVoBZwFbAWcBWwFn + AVsBZwFbAWcBWwFnAVsBawFbAWsBWwFrAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFv + AXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwFaAW8BWgFvAVkBbwE5AW8BOQFvATgBbwE4AW8BOAFv + ATgBbwE4AW8BOAFvATgBbwEYAW8BGAFvARgBbwEYAW8BGAFvARgBbwEYAW8BOAFvATgBbwE5AW8BOQFv + AXsBcwG9AXsB/wF/AVoBZwFaAWcBOgFnAToBZwE6AWcBOgFnAToBYwE6AWMBOgFjAToBZwFbAWsBWwFr + AXsBbwFbAWsBWwFrAVoBZwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFj + AToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFj + AToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjAToBYwE6AWMBOgFjATsBYwE7AWMBOwFj + AVsBZwFbAWcBWwFnAVsBZwGcAW8BvgF3Af8BfwFaAW8BWgFvAVoBbwFaAW8BWgFvAVoBbwFaAW8BWgFr + AVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWQFrAVkBawFZAWsBWQFr + AVkBawFZAWsBWQFrAVkBawFZAWsBWQFrAVkBawFZAWsBOQFrATkBawE5AWsBOQFrATkBawE5AWsBOQFr + ATkBawE5AWsBOQFrATkBawE5AWsBOQFrATkBawE5AWsBOQFrATkBawE5AWsBOQFrATkBawE5AWsBOQFr + ATkBawE5AWsBOQFrATkBawE5AWsBOQFvATkBbwE5AW8BewFzAb0BewH/AX8BewFvAXsBbwF7AW8BewFv + AXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFv + AXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFv + AXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFv + AXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAb0BdwHeAXsB/wF/ + Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG+AXcBvgF3 + Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsBvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7 + Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7 + Ab0BewHeAXsB/wF/Af8BfwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG+AXcBvgF3 + Ab4BdwHeAXsB3gF3Ab4BdwG+AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab4BdwG+AXcBvgF3 + Ab4BdwG+AXcBvgF3Ab4BdwG+AXcB3gF7Af8BfwH/AX8BvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7 + Ab0BewG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF7Ab0BewG9AXsBvQF7Ad4BewH/AX8B/wF/Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB/wF/ + Af8Bf/8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wAaAAG9 + AXcBvQF3Ab0BdwG+AXcB3gF3Ad4BdwHeAXcB3gF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+ + AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHe + AXcB3gF7Af8BfwH/AX8BvQF3Ab0BdwG9AXcBvQF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8 + AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8 + AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8 + AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8 + AXsBvQF7Ab0BewG9AXsBvQF7Ad4BewHeAX8B/wF/Ab0BewG9AXsBvQF3Ab0BdwG8AXcBvAF3AbwBdwG8 + AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8 + AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG8 + AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8AXsBvAF7AbwBewG8 + AXsBvAF7AbwBewG8AXsBvAF7Ab0BewG9AXsBvQF7Ab0BewHeAXsB3gF/Af8BfwHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsBvQF7Ab0BewG9AXcBvAF3AbwBdwG8AXcBvAF3AbwBdwG9 + AXsBvQF7Ab0BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Af8BfwH/ + AX8BOQFnAVoBYwFaAWMBWwFjAXsBYwF7AWMBewFjAVsBYwFbAWMBWwFjAVsBYwFbAWMBWwFjAVsBYwFb + AWMBWwFjAVsBYwFbAWMBWwFjAVsBZwFbAWcBWwFnAVsBZwFbAWcBWwFnAVsBZwF7AWcBewFnAXsBZwF7 + AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFrAXsBawF7 + AWsBewFrAXsBawF7AWsBewFrAXsBawF7AWsBewFrAXsBawF8AWsBfAFrAXwBawF8AWsBfAFrAXwBawF8 + AWsBewFrAZ0BcwHeAXcB/wF/ATgBawEYAWsBFwFrAfcBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2 + AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2 + AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2 + AWoB9gFqAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2 + AW4B9gFuAfcBbgH3AW4BFwFvARgBbwF7AXMBvQF7Ad4BfwE4AW8BGAFvARcBawH3AWoB9gFqAfYBagH2 + AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2 + AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2AWoB9gFqAfYBagH2 + AWoB9gFqAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH2 + AW4B9gFuAfYBbgH2AW4B9gFuAfYBbgH3AW4B9wFuARcBbwEYAW8BewFzAb0BewHeAX8BewFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAVoBbwE5AW8BGAFrAfYBagH2AWoB9gFqAfYBagH2 + AWoBGAFvATkBbwFaAW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBewFvAb0BdwHe + AXsB/wF/AXMBSgGVAUoBtgFGAdcBRgH4AUYB+AFGAfgBRgHYAUYB1wFGAdcBRgHXAUYB1wFGAdcBRgHY + AUYB2AFGAdgBSgHYAUoB2AFKAdgBSgHYAUoB2AFKAdgBSgHYAUoB2AFKAdgBSgHYAUoB+AFOAfgBTgH4 + AU4B+AFOAfgBTgH4AU4B+AFOAfgBTgH4AU4B+AFOAfgBTgH4AVIB+AFSAfgBUgH5AVIB+QFSAfkBUgH5 + AVIB+QFSAfkBVgH5AVYB+QFWAfkBVgH5AVYB+QFWAfkBVgH5AVYB+QFWAfkBWgH5AVoB+QFaAfkBWgH5 + AVoB+QFaAfkBWgFbAWsBnQFzAd4BewFRAVoBMAFaAQ8BWgHuAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHN + AVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHN + AVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHN + AVkBzQFZAc0BWQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHN + AV0BzQFdAc0BXQHOAV0B7wFdAQ8BXgEwAV4B1gFqAXsBcwHeAXsBUgFeATABXgEPAVoB7gFZAc0BWQHN + AVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHN + AVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHNAVkBzQFZAc0BWQHN + AVkBzQFZAc0BWQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHN + AV0BzQFdAc0BXQHNAV0BzQFdAc0BXQHNAV0BzgFdAe8BXQEPAV4BMAFeAdYBagF7AXMB3gF7AfcBXgH3 + AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3 + AV4B9wFeAfcBXgH3AV4B9wFeARgBXwEYAV8BGAFfARgBXwHVAV4BcwFeATABWgHtAVkB7QFZAe0BWQHt + AVkB7QFZATABXgGTAV4B1gFiATkBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBOQFnATkBZwE5 + AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwF7 + AW8BvQF3Ad4BewGMASkBrgElAfABIQEyAR4BVAEeAVQBHgFUAR4BMwEiATMBIgEzASIBMwEiATMBIgEz + ASIBMwEiATQBIgE0ASYBNAEmATQBJgE0ASYBNAEqATQBKgE0ASoBNAEqATQBKgE0ASoBNAEqAVQBKgFU + AS4BVAEuAVQBLgFUAS4BVAEyAVQBMgFUATIBVAEyAVQBMgFUATIBVAEyAVUBMgFVATYBVQE2AVUBNgFV + ATYBVQE6AVUBOgFVAToBdQE6AXUBPgF1AT4BdQE+AXUBPgF1AT4BdQE+AXUBPgF2AUIBdgFCAXYBQgF2 + AUIBdgFGAXUBRgF1AUYB+QFaAXsBawHeAXcBSAFFAQYBRQHEAUQBgiZAAUQBQAFEAUABRAFAAUQBQAFE + AUABRAFAAUQBQAFEAUABRAFAAUQBQAFEAUABRAFAAUQBQAFEAUABRAFAAUQBQAFEAUABRAFBAUQBQQFE + AUEBSAFBAUgBQQFIAUEBSAFBAUgBQQFIAUEBSAFBAUgBQQFIAUEBSAFBAUgBQQFIAUEBTAFBAUwBQQFM + AWIBTAGDAUwBpAFMAeYBTAEwAV4BGAFvAb0BewJJAQcBSQHEAUQBggFEHUABRAFAAUQBQAFEAUABRAFA + AUQBQAFEAUABRAFAAUQBQAFEAUABRAFAAUQBQAFEAUABRAFAAUQBQAFEAUABRAFAAUQBQAFEAUEBRAFB + AUQBQQFIAUEBSAFBAUgBQQFIAUEBSAFBAUgBQQFIAUEBSAFBAUgBQQFIAUEBSAFBAUgBQQFIAUEBSAFB + AUgBQQFIAUEBTAFBAUwBQQFMAWIBTAGDAUwBpAFMAeYBTAEwAV4BGAFvAb0BewFzAU4BcwFOAXMBTgFz + AU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFzAU4BcwFOAXMBTgFz + AU4BcwFOAXMBTgFzAU4BlAFOAZQBTgGUAU4BDwFKAYoBSQEFAUUBgQFAAYEBQAGBAUQBgQFEAYEBRAEG + AUkBiwFNATABTgG1AVIBtQFSAbUBUgGUAVIBlAFSAZQBUgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1 + AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgHWAVoB1gFaAdYBWgHWAVoB1gFaAbUBVgG1AVYBOQFnAXsBbwHe + AXsBSgElAYwBIQGuASEB8AEdARIBGgEzAR4BVAEeAXUBIgF2ASYBdgEmAXYBJgF2ASYBdgEmAXYBJgF2 + ASYBdgEmAXcBKgF3ASoBdwEqAXcBKgF3AS4BdwEuAXcBLgF3AS4BdwEuAZcBLgGXATIBlwEyAZcBMgGX + ATIBlwE2AZcBNgGXATYBlwE2AZcBNgGXATYBlwE2AZcBOgGXAToBmAE6AZgBOgGYAT4BmAE+AZgBPgGY + AUIBuAFCAbgBQgG4AUIBuAFGAbgBRgG4AUYBuAFGAbgBRgG4AUYB2AFKAdgBSgHZAUoBuAFKAbcBSgGW + AUYBdQFGARkBWwF8AWsB3gF3AScBRQHlAUQBowFIAYEBSAFAAUgBQAFIAUABSAFAAUgBQAFIAUABSAFA + AUgBQAFIAUABSAFAAUgBQAFIAUABSAFAAUgBQAFIAUABSAFAAUgBQAFIAUABSAFAAUwBQAFMAUABTAFA + AUwBQAFMAUABTAFAAUwBQAFMAUABTAFAAUwBQAFMAUABTAFAAUwBQAFMAUABTAFAAUwBQAFMAUABTAFB + AUwBQQFQAUEBUAFBAVABQQFQAUEBUAFBAVABQQFQAUEBUAFBAVABQQFQAUEBUAFBAVABQQFUAUEBVAFB + AVQBQQFUAWIBVAGDAVABpAFQAaQBTAEPAV4BFwFvAb0BewEoAUkBBgFJAcQBSAGCAUgBQAFIAUABSAFA + AUgBQAFIAUABSAFAAUgBQAFIAUABSAFAAUgBQAFIAUABSAFAAUgBQAFIAUABSAFAAUwBQAFMAUABTAFA + AUwBQAFMAUABTAFAAUwBQAFMAUABTAFAAUwBQAFMAUABTAFAAUwBQAFMAUABTAFAAUwBQAFMAUABTAFB + AUwBQQFQAUEBUAFBAVABQQFQAUEBUAFBAVABQQFQAUEBUAFBAVABQQFQAUEBUAFBAVABQQFQAUEBUAFB + AVABQQFQAUEBVAFBAVQBQQFUAUEBVAFiAVQBgwFQAaQBUAGkAUwBDwFeARcBbwG9AXsBcwFOAZQBUgGU + AVIBtQFWAbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1AVYBtQFWAbUBVgG1 + AVYBtQFWAbUBVgG1AVYB1gFWAdYBWgHWAVoB9wFaAVEBVgGsAVEBJgFNAYEBSAGBAUgBgQFMAYEBTAGB + AUwBJwFRAcwBVQFyAVoBGAFfARgBXwH3AV4B9wFeAfcBXgH3AV4B9wFeARgBYwEYAWMBGAFjARgBYwEY + AWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwE5AWcBGAFjAfcBXgHWAVoBtQFWATkBZwGc + AXMB3gF7ASkBIQFLASEBbAEdAa4BGQHQARkBEgEeAVQBIgGWASIB2QEmAdkBJgG5ASoBuAEqAbgBKgG4 + ASoBuQEqAbkBKgG5ASoBuQEuAbkBLgG5AS4BuQEuAbkBMgG5ATIB2QEyAdkBMgHZATYB2QE2AdkBNgHZ + ATYB2QE6AdkBOgHZAToB2QE+AdkBPgHZAT4B+QE+AfkBPgH6AT4B+gFCAfoBQgH6AUIB+gFCAfoBRgH6 + AUYB+gFGAfoBRgH6AUoB+gFKAfoBSgH6AUoBGgFLARoBSwEaAU8BGgFPARsBTwEbAVMBGwFTAfoBTgHY + AU4BtwFKAZYBRgEZAVsBfAFrAd4BdwEGAUUB5QFIAaMBTAGBAUwBQAFQAUABUAFAAVABYAFQAWABUAFg + AVABYAFQAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABVAFg + AVQBYAFUAWABVAFgAVQBYAFUAWABVAFgAVQBYAFUAWABVAFgAVQBYAFUAWABVAFgAVQBYAFUAWABVAFg + AVgBYQFYAWEBWAFhAVgBYQFYAWEBWAFhAVgBYQFYAWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFcAWEBXAFh + AVwBYQFgAWEBYAFiAVwBYgFUAYMBUAGDAUwB7wFdAfcBbgG9AXsBJwFJAeUBTAGjAUwBggFQAUABUAFA + AVABQAFQAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABUAFgAVABYAFQAWABVAFg + AVQBYAFUAWABVAFgAVQBYAFUAWABVAFgAVQBYAFUAWABVAFgAVQBYAFUAWABVAFgAVQBYAFUAWABVAFg + AVgBYQFYAWEBWAFhAVgBYQFYAWEBWAFhAVgBYQFYAWEBXAFhAVwBYQFcAWEBXAFhAVwBYQFcAWEBXAFh + AVwBYQFcAWEBXAFhAVwBYQFcAWEBYAFhAWABYgFcAWIBVAGDAVABgwFMAe8BXQH3AW4BvQF7AZQBUgG1 + AVYB1gFaAfcBXgEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEY + AWMBGAFjARgBYwEYAWMBGAFjARgBYwE5AWMBOQFjATkBYwGTAV4B7QFZAUcBVQGhAVABoQFQAaEBVAGh + AVQBoQFUAUcBWQEOAV4BtAFiAVoBZwFaAWcBWgFnAVoBZwE5AWcBWgFrAVoBawFaAWsBWgFrAVoBawFa + AWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAXsBbwF7AW8BewFvAVoBawEYAWMB9wFeAdYBWgE5 + AWcBnAFzAd4BewHnARwBCQEdAUoBGQFsARkBjQEVAfEBGQFUASIBuAEmARwBKwEbASsBGwEvAfsBLgH7 + AS4B+wEuAfsBLgH7AS4B+wEuAfsBLgH7ATIB+wEyAfsBMgH7ATYBGwE3ARsBNwEbATsBGwE7ARwBOwEc + AT8BHAE/ARwBPwEcAT8BHAFDARwBQwEcAUMBPAFDATwBQwE8AUcBPAFHATwBRwE9AUcBPQFLAT0BSwE9 + AUsBPQFLAT0BTwE9AU8BPQFPAT0BTwE9AVMBPQFTAV0BUwFdAVMBXQFTAV0BVwFdAVcBfQFbAX0BWwE7 + AVcB+gFSAdgBSgGWAUYBGQFbAXwBawHeAXcB5QFEAcQBSAGjAVABgQFUAUABWAFgAVgBYAFYAWABWAFg + AVQBYAFYAWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABWAFg + AVgBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAJg + AWEBYAFhAWABYQFgAWEBYAFhAWABYQFgAWEBYAFhAWQBYQFkAWEBZAFhAWQBYQFkAWEBZAFhAWQBYQFk + AWEBaAFhAWgBYQFoAWEBYAFiAVwBYgFUAWIBTAHOAV0B9wFuAb0BewEGAUkB5QFMAaMBUAGBAVQBQAFY + AWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABWAFgAVgBYAFYAWABWAFgAVgBYAFY + AWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwCYAFh + AWABYQFgAWEBYAFhAWABYQFgAWEBYAFhAWABYQFkAWEBZAFhAWQBYQFkAWEBZAFhAWQBYQFkAWEBZAFh + AWQBYQFkAWEBZAFhAWQBYQFoAWEBaAFhAWgBYQFgAWIBXAFiAVQBYgFMAc4BXQH3AW4BvQF7AZQBUgHW + AVoB9wFeATkBZwFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFaAWsBWgFrAVoBawFa + AWsBWgFrAVoBawFaAWsBWgFrAXsBawF7AWsBewFvAZwBbwHVAWoBLwFmAWgBXQGhAVgBoQFcAaEBXAGh + AVwBoQFcAWgBYQEvAWoB9gFuAb0BcwG9AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3AXsBbwFaAWsBGAFjAdYBWgE5 + AWcBnAFzAd4BewHGARwB5wEYAQgBGQEqARUBSwEVAdABGQFVASIB2gEmAV4BLwFeAS8BXgEvAV4BMwE9 + ATMBPQEzAT0BMwE9ATMBPQEzAT0BMwE9ATMBPQE3AT0BNwFdATcBXQE7AV0BOwFdAT8BXgE/AV4BQwFe + AUMBXgFDAV4BQwFeAUcBXgFHAV4BRwF+AUcBfgFLAX4BSwF+AUsBfwFLAX8BTwF/AU8BfwFPAX8BTwF/ + AVMBfwFTAX8BUwF/AVMBfwFXAX8BVwF/AVcBnwFXAZ8BWwGfAVsBnwFbAb8BXwG/AV8BvwFjAb8BYwF9 + AV8BOwFXAfkBTgGWAUYBGQFbAXwBawHeAXcB5QFEAcMBTAGiAVQBgQFcB2ABXAGAAVwBgAFcAYABYAGA + AWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGBAWABgAFgAYABYAGAAWABgAFgAYABZAGA + AWQBgAFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAXABgQFwAYEBcAGC + AXABYQFoAWEBYAFBAVQBQQFMAc0BXQH2AW4BvAF7AQYBSQHkAVABowFUAYEBXAhgAYABYAGAAWABgAFg + AYABYAGAAWABgAFgAYABYAGAAWABgQFgAYABYAGAAWABgAFgAYABYAGAAWQBgAFkAYABZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFo + AYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBggFsAYIBcAGCAXABggFw + AYIBcAFhAWgBYQFgAUEBVAFBAUwBzQFdAfYBbgG8AXsBlAFSAdYBWgEYAWMBWgFrAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBvQF3 + Ab0BdwHeAXcB3gF3ARcBcwFQAW4BiQFpAcIBYAHCAWQBwgFkAcIBZAHCAWQBiQFtAXEBcgE4AXcB/wF7 + Af8BewH/AXsB/wF7Ad4BewH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/ + Af8BfwH/AX8B/wF/Af8BfwH/AX8BvQF3AXsBbwE5AWcB1gFaATkBZwGcAXMB3gF7AcYBHAHnARgB6AEY + AQgBFQEJAREBjQEZAfEBHQFVASIBuQEmAdoBJgH7ASoBHAEvAT0BLwE9AS8BPQEzAT0BMwE9ATMBPQEz + AT0BMwE9ATMBPQE3AV0BNwFdATsBXQE7AV0BOwFdAT8BXgE/AV4BPwFeAUMBXgFDAV4BQwFeAUMBXgFH + AV4BRwF+AUcBfgFHAX4BSwF+AUsBfwFLAX8BTwF/AU8BfwFPAX8BTwF/AVMBfwFTAX8BUwF/AVMBfwFX + AX8BVwGfAVcBnwFXAZ8BWwGfAVsBnwFbAb8BXwG/AV8BvwFjAX0BWwE7AVMB2QFOAZYBRgEZAVsBfAFr + Ad4BdwHlAUQBxAFMAaMBVAGBAVwEYAGAAWABgAFcAYABXAGAAVwBgAFgAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFkAYABZAGAAWQBgAFkAYABZAGA + AWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAXABgQFwAYEBcAFhAWgBYQFgAUEBVAFB + AUwBzQFdAfYBbgG8AXsBBgFJAeUBUAHDAVQBogFcAYABZAGAAWQBgAFgAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGA + AWQBgAFkAYABZAGAAWQBgAFkAYABaAGAAWgBgAFoAYABaAGAAWgBgAFoAYABaAGAAWgBgAFoAYABaAGA + AWwBgAFsAYABbAGAAWwBgAFsAYABbAGAAWwBgAFsAYEBbAGBAWwBgQFwAYEBcAGBAXABgQFwAYEBcAGB + AXQBYQFoAWEBYAFBAVgBQAFMAc0BYQH2AW4BvAF7AZQBUgHWAVoBGAFjAVoBawGcAXMBnAFzAZwBcwGc + AXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAb0BdwG9 + AXcB3gF3Ad4BdwEXAXMBUAFuAYkBaQHBAWABwQFkAcEBZAHCAWQBwgFkAYkBaQFQAXIBOAF3Af8BewH/ + AXsB/wF7Ad4BewHeAXsB3gF7Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Af8BfwH/ + AX8B/wF/Af8BfwH/AX8B/wF/Ab0BdwF7AW8BOQFnAdYBWgE5AWcBnAFzAd4BewHnARwB5wEcAecBGAHn + ARQB5wEQASoBFQFtARkB0AEZARMBHgFVASIBmAEmAfoBKgE9AS8BPQEvAT0BLwE9AS8BPQEvAT0BMwE9 + ATMBPQEzAT0BMwE9ATcBXQE3AV0BOwFdATsBXQE7AV0BPwFeAT8BXgE/AV4BPwFeAUMBXgFDAV4BQwFe + AUMBXgFHAX4BRwF+AUcBfgFHAX4BSwF/AUsBfwFPAX8BTwF/AU8BfwFPAX8BUwF/AVMBfwFTAX8BUwF/ + AVcBfwFXAZ8BVwGfAVcBnwFbAZ8BWwGfAV8BvwFfAb8BXwF9AVsBGwFTAdkBSgGWAUYBGQFbAXwBawHe + AXcB5QFEAeQBTAHDAVQBogFcAYEBYAGBAWABgAFgAYABXAGAAVwBgAFcAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWQBgAFkAYABZAGA + AWQBgAFkAYABZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGB + AWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBcAGBAXABYQFoAWEBYAFB + AVQBQQFMAc0BXQH2AW4BvAF7AQcBSQHlAVAB5AFUAcMBXAGhAWQBgQFkAYABZAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGA + AWQBgAFkAYABZAGAAWQBgAFkAYABaAGAAWgBgAFoAYABaAGAAWgBgAFoAYABaAGAAWgBgAFoAYABaAGA + AWgBgAFsAYABbAGAAWwBgAFsAYABbAGAAWwBgAFsAYABbAGAAWwBgAFwAYABcAGBAXABgQFwAYEBcAGB + AXQBgQF0AWABbAJgAUABWAFAAVABzQFhAfYBbgG8AXsBlAFSAdYBWgEYAWMBWgFrAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBvQF3 + Ab0BdwHeAXcB3gF3ARcBcwFQAW4BiAFlAcEBYAHBAWABwQFkAcEBZAHCAWQBiQFpAVABbgE4AXcB/wF7 + Af8BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB/wF/Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/ + Af8BfwH/AX8B/wF/Af8BfwH/AX8BvQF3AXsBbwE5AWcB1gFaATkBZwGcAXMB3gF7AecBIAHnARwBxgEY + AcYBFAGlARAB5wEQAQkBEQErAREBbQEVAdEBGQFVASIBuQEmAT0BKwE9AS8BPQEvAT0BLwE9AS8BPQEv + AT0BMwE9ATMBPQEzAT0BNwE9ATcBXQE3AV0BNwFdATsBXQE7AV0BOwFeATsBXgE/AV4BPwFeAT8BXgE/ + AV4BQwFeAUMBXgFDAX4BRwF+AUcBfgFHAX4BSwF/AUsBfwFPAX8BTwF/AU8BfwFPAX8BUwF/AVMBfwFT + AX8BUwF/AVcBfwFXAZ8BVwGfAVcBnwFbAZ8BWwGfAVsBvwFfAV0BVwEbAVMB2QFKAXYBQgEZAVsBfAFr + Ad4BdwEFAUUB5QFMAcQBVAHDAVwBogFgAaEBYAGBAWABgAFcAYABXAGAAVwBgAFcAYABXAGAAVwBgAFc + AYABXAGAAVwBgAFcAYABXAGAAVwBgAFcAYABXAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWQBgAFk + AYABZAGAAWQBgAFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBgQFo + AYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBbAGBAWwBgQFsAYEBcAFhAWgBYQFc + AUEBVAFBAUwBzQFdAfYBbgG8AXsBJwFJAQYBUQHlAVgBwwFcAcIBZAGhAWQBoQFkAYABZAGAAWABgAFg + AYABYAGAAWABgAFgAYABZAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFk + AYABZAGAAWQBgAFkAYABZAGAAWgBgAFoAYABaAGAAWgBgAFoAYABaAGAAWgBgAFoAYABaAGAAWgBgAFo + AYABaAGAAWwBgAFsAYABbAGAAWwBgAFsAYABbAGAAWwBgAFsAYABcAGAAXABgAFwAYABcAGAAXABgAF0 + AYABdAGAAXQBYAFsAWABZAFgAVgBQAFQAc0BYQH2AW4BvAF7AZQBUgHWAVoBGAFjAVoBawGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + Ab0BdwG9AXcBvQF3Ad4BdwEWAXMBTwFuAYgBZQHBAWABwQFgAcEBYAHBAWQBwgFkAYkBaQFQAW4BNwFz + Af8BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB/wF/Af8BfwH/AX8B/wF/ + Af8BfwH/AX8B/wF/Af8BfwH/AX8B/wF/Ab0BdwF7AW8BOQFnAdYBWgE5AWcBnAFzAd4BewEIASEB5wEc + AcYBGAGlARQBhAEQAYQBDAGlAQwBpgEMAccBDAFMAREB8gEZAZcBIgEcASsBPAErATwBKwE8AS8BPAEv + ATwBLwE8AS8BPAEzATwBMwE8ATMBPAEzATwBNwE8ATcBPQE3AT0BNwE9ATsBPQE7AT0BOwE9ATsBPQE/ + AT0BPwFdAT8BXQFDAV0BQwFdAUMBXgFHAV4BRwFeAUsBXgFLAV4BSwFeAU8BXgFPAV4BTwF+AU8BfgFT + AX4BUwF+AVMBfwFTAX8BVwF/AVcBfwFXAZ8BVwGfAVsBnwFbAZ8BWwFdAVcBGwFPAbkBSgF2AUIB+QFa + AXwBawHeAXcBBgFFAeUBTAHkAVQBwwFcAcMBYAGiAWABoQFgAYABXAGAAVwBgAFcAYABXAGAAVwBgAFc + AYABXAGAAVwBgAFcAYABXAGAAVwBgAFcAYABXAGAAVwBgAFcAYABYAGAAWABgAFgAYABYAGAAWABgAFg + AYABYAGAAWABgAFgAYABYAGBAWABgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGBAWwBYQFk + AWEBXAFBAVQBQQFMAc0BXQH2AW4BvAF7ASgBSQEHAVEBBQFZAeQBYAHjAWQBwgFkAaEBZAGAAWQBgAFg + AYABYAGAAWABgAFgAYABYAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFkAYABZAGAAWQBgAFk + AYABZAGAAWQBgAFkAYABZAGAAWQBgAFoAYABaAGAAWgBgAFoAYABaAGAAWgBgAFoAYABaAGAAWgBgAFo + AYABaAGAAWgBgAFsAYABbAGAAWwBgAFsAYABbAGAAWwBgAFsAYABbAGAAXABgAFwAYABcAGAAXABgAF0 + AYABdAGAAXQBgAF0AWABbAFgAWQBYAFcAWABUAHNAWEB9gFuAbwBewGUAVIB1gFaARgBYwFaAWsBnAFz + AZwBcwGcAXMBnAFzAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAZwBcwGcAXMBnAFz + AZwBcwG9AXMBvQFzAb0BcwG9AXMBFgFvAU8BagGIAWUBwQFgAcEBYAHBAWABwQFgAcIBYAGJAWkBUAFu + ARcBcwHeAXcB3gF3Ad4BdwHeAXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Af8BfwH/AX8B/wF/Af8BfwG9AXcBewFvATkBZwHWAVoBOQFnAZwBcwHeAXsBCAEh + AecBHAHnARwBxgEYAaUBFAGlARQBpQEQAaUBDAGlAQgBCgERAY4BFQHyARkBdgEiAZcBIgHZASYB+gEq + ATwBLwE8AS8BPAEvAT0BLwE9ATMBPQEzAT0BMwE9ATMBPQE3AT0BNwE9ATcBPgE3AT4BOwE+ATsBPgE7 + AT4BOwE+AT8BXgE/AV4BPwFeAUMBXgFDAV4BQwFeAUcBXwFHAV8BSwFfAUsBXwFLAV8BSwFfAU8BfwFP + AX8BTwF/AU8BfwFTAX8BUwF/AVMBfwFTAX8BVwGfAVcBnwFXAZ8BWwGfAVsBXQFTARsBTwG5AUYBdgFC + AfkBWgF8AWsB3gF3AQYBRQEFAU0B5QFUAeUBXAHkAWQBwwFgAaIBYAGhAWABgAFcAYABXAGAAVwBYAFc + AWABXAFgAVwBgAFcAYABXAGAAVwBgAFcAYABXAGAAVwBgAFcAYABXAGAAWABgAFgAYABYAGAAWABgAFg + AYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABZAGAAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGBAWwBgQFs + AWEBZAFhAVwBQQFUAUEBTAHNAV0B9gFuAbwBewEqAUUBKQFJAQgBUQEIAVkBBwFdAeYBXAHFAVgBhAFU + AWMBUAFjAVABYwFQAWMBUAFjAVABYwFQAWQBUAFkAVQBZAFUAWQBVAFkAVQBZAFUAWQBVAFkAVQBZAFU + AWQBVAFkAVQBZAFUAWQBVAFkAVQBYwFUAWQBVAFkAVQBZAFYAWQBWAFkAVgBZAFYAWQBWAFkAVgBZAFY + AWQBWAFkAVgBZAFYAWQBWAFkAVgBZAFcAWQBXAFkAVwBZAFcAWQBXAFkAVwBZAFcAWQBXAFkAVwBZAFg + AWUBYAFlAWABZQFgAWUCZAFcAWQBVAFEAUwBQwFEAc8BWQH3AWoBvQF3AZQBUgHWAVoBGAFjAXsBbwG9 + AXcBnAFzAZwBcwGcAXMBewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BnAFzAZwBcwGc + AXMBnAFzAZwBcwG9AXMBvQFzAb0BcwEWAW8BTwFqAYgBZQHBAWABwQFgAcEBYAHBAWABwgFgAYkBaQFQ + AW4BFwFzAd4BdwHeAXcB3gF3Ad4BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB/wF/Af8BfwH/AX8B/wF/Ab0BdwF7AW8BGAFjAdYBWgE5AWcBnAFzAd4BewEI + ASEBCAEhAQgBIQHnARwB5wEcAccBGAGmARQBpQEMAYQBCAHHAQwBKgERAW0BFQGwARkBEgEeAXUBIgG4 + ASYBGwErARwBLwE8AS8BPQEvAT0BLwE9ATMBPQEzAT0BMwE9ATMBPgE3AT4BNwE+ATcBPgE3AT4BOwE+ + ATsBPgE7AT4BOwFeAT8BXgE/AV4BPwFeAUMBXwFDAV8BQwFfAUcBXwFHAV8BRwFfAUsBXwFLAV8BSwF/ + AUsBfwFPAX8BTwF/AU8BfwFPAX8BUwF/AVMBfwFTAZ8BVwGfAVcBnwFXAZ8BWwFdAVMBGwFPAbkBRgF3 + AUIB+gFaAXwBawHeAXcBBgFFAQYBTQEGAVUBBgFdAQYBZQHkAWABwwFgAaIBYAGAAVwBgAFcAWABXAFg + AVwBYAFcAWABXAFgAVwBgAFcAYABXAGAAVwBgAFcAYABXAGAAVwBgAFcAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABZAGAAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWwBgQFsAYEBbAGB + AWwBYQFkAWEBXAFBAVQBQQFMAc0BXQH2AW4BvAF7ASsBPQEsAUUBLAFJASwBUQEsAVUBCwFRAcoBTAGI + AUgBZwFEAUcBQAFHAUABRwFAAUcBQAFHAUABSAFAAUgBQAFIAUQBSAFEAUgBRAFIAUQBSAFEAUgBRAFI + AUQBSAFEAUgBRAFIAUQBSAFEAUgBRAFHAUQBSAFEAUgBRAFIAUQBSAFEAUgBRAFIAUQBSAFEDEgBSQFI + AUkBSAFJAUgBSQFIAUkBSAFJAUgBSQFIAUkBSAFJAUgBSQFMAUkBTAFJAUwBSgFMAUoBTAFKAVABSQJI + AUABSAE8AUcBNAHRAVEB+AFmAb0BdwGUAVIB1gFaATkBZwF7AW8BvQF3Ab0BdwGcAXMBnAFzAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwGcAXMBnAFzAZwBcwGcAXMBvQFzAb0BcwG9 + AXMBFgFvAU8BagGIAWUBwQFgAcEBYAHBAWABwQFgAcIBYAGJAWUBUAFuARcBcwHeAXcB3gF3Ad4BdwHe + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Af8BfwH/ + AX8B/wF/Af8BfwG9AXcBewFvARgBYwHWAVoBOQFnAZwBcwHeAXsBCAEhAQgBIQEIASEBKQElASkBJQHo + ARwBxgEUAYQBEAFjAQgBhAEIAaYBDAHoAQwBCQERAY0BFQESAR4BdgEmAfoBKgEbASsBHAEvAT0BLwE+ + AS8BPgEvAT4BMwE+ATMBPgEzAT4BMwE+ATcBPgE3AT4BNwE+ATcBPgE7AT4BOwE+ATsBXgE7AV8BPwFf + AT8BXwE/AV8BQwFfAUMBXwFDAV8BRwFfAUcBXwFHAV8BRwFfAUsBfwFLAX8BSwF/AUsBfwFPAX8BTwF/ + AU8BfwFPAX8BUwGfAVMBnwFXAZ8BVwGfAVcBXQFTARsBSwG5AUYBdwE+AfoBVgF8AWsB3gF3AQYBRQEG + AU0BJwFVAScBXQFHAWUBBgFlAeQBYAGiAWABgAFcAYABXAFgAVwBYAFcAWABXAFgAVwBYAFcAYABXAGA + AVwBgAFcAYABXAGAAVwBgAFcAYABXAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGBAWwBgQFsAWEBZAFhAVwBQQFUAUEBTAHN + AV0B9gFuAbwBewEtATUBLgE9AU8BQQFQAUkBcQFNAQ8BSQHOAUABjQE4AUsBNAFLATABKwEwASsBLAEr + ASwBKwIsATABLAEwASwBMAEsATABLAEwASwBMAEsATABLAEwASwBMAEtATABLQEwASwBMAEsATQBKwE0 + ASsBNAErATQBLAE0ASwBNAEtATABLQE0AS0BNAEtATQBLQE0AS0BNAEtATQBLQE0AS0BNAEtATQBLQE0 + AS0BNAEtATQBLQE0AS0BNAEtATQBLQE0AS4BOAEuATgBLgE4AS4BOAEuATgBLwE4AS8BOAEvATwBLgE0 + AS0BMAIsASoBJAGzAUkB2QFmAZ0BdwGUAVIB9wFeATkBZwF7AW8BvQF3Ab0BdwGcAXMBnAFzAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BnAFzAZwBcwGcAXMBvQFzAb0BcwG9 + AXMBFgFvAU8BagGIAWUBwQFgAcEBYAHBAWABwgFgAcIBYAGJAWUBUAFuARcBcwHeAXcB3gF3Ad4BdwHe + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Af8BfwH/ + AX8B/wF/Af8BfwG9AXcBWgFrARgBYwG1AVYBOQFnAZwBcwHeAXsBCAEhASkBJQEpASUBSgEpAWsBLQEp + ASUBxgEYAYQBEAFCAQgBQgEIAUIBCAFCAQgBYwEIAegBEAGOARkBNAEiAdkBKgH7ASoBHAErAT0BLwE+ + AS8BPgEvAT4BLwE+ATMBPgEzAT4BMwE+ATMBPgE3AT4BNwE+ATcBPgE3AT4BOwE+ATsBXwE7AV8BOwFf + AT8BXwE/AV8BPwFfAUMBXwFDAV8BQwFfAUMBXwFHAV8BRwFfAUcBfwFHAX8BSwF/AUsBfwFLAX8BSwF/ + AU8BfwFPAX8BTwGfAVMBnwFTAZ8BVwGfAVcBXQFTARsBSwG5AUYBdwE+AfoBVgF8AWsB3gF3AQYBRQEm + AU0BJwFVAUgBXQFpAWUBJwFlAeUBYAGjAWABgQFcAWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAGA + AVwBgAFcAYABXAGAAVwBgAFcAYABXAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFgAYEBYAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGBAWwBgQFsAWEBZAFhAVwBQQFUAUEBTAHN + AV0B9gFuAbwBewEvATEBUQE1AVIBPQF0AUEBlQFFATQBPQHyATQBkQEsAU8BJAEvASABLwEgAQ8BHAEP + ARwBDwEcARABHAEQASABMAEgATABIAEwASABMAEgATABIAEwASABMQEgATEBIAExASABMQEgATABIAEv + ASQBLwEkAS8BJAEwASABMQEgATEBIAExASABMQEgATEBJAExASQBMQEkATEBJAExASQBMQEkATEBJAEy + ASQBMgEkATIBJAEyASQBMgEkATIBJAEyASQBMgEkATMBJAEzASQBMwEkATMBJAE0ASQBNAEoATQBKAEz + ASQBMQEgATABHAEuARgBtAFBAdoBYgGdAXcBlAFSAfcBXgE5AWcBewFvAb0BdwG9AXcBnAFzAZwBcwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BnAFzAZwBcwG9 + AXMBvQFzARYBbwFQAWoBiQFlAcIBYAHCAWABwgFgAcIBYAHCAWABiQFlAVABagEXAW8B3gFzAd4BdwHe + AXcB3gF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BewHeAXsB3gF7Ad4BewH/ + AX8B/wF/Af8BfwH/AX8BvQF3AVoBawEYAWMBtQFWATkBZwF7AW8B3gF7AQgBIQEpASUBKQElAUoBKQFr + AS0BKQElAQgBIQHGARgBhAEQAYQBEAGEAQwBYwEMAWMBDAHnARABSwEVAc8BGQEzASIBdQEmAZYBKgHX + AS4B+AE2ARgBNwEYATsBGAE/ATgBQwE4AUMBOAFDATgBQwE4AUMBOAFDATgBRwE4AUcBOAFHATgBRwE4 + AUsBWQFLAVkBSwFZAUsBWQFPAVkBTwFZAU8BWQFPAVkBTwFZAVMBWQFTAVkBUwFZAVMBeQFTAXkBVwF5 + AVcBeQFXAXkBVwF5AVcBeQFbAZkBWwGZAV8BmQFfAVcBWwH2AVIBtAFKAXIBQgH3AVoBewFrAd4BdwEG + AUUBJwFNAScBVQFIAV0BaQFlAUcBZQEGAWUB5AFgAaMBYAGiAWABogFgAYEBYAGBAVwBgAFcAYABXAFg + AVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwBgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFkAYABZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBgQFsAYEBbAFhAWQBYQFcAUEBVAFB + AUwBzQFdAfYBbgG8AXsBMAEtAVIBMQFzATkBdQE9AZcBQQFWATkBFAE1AdMBLAGSASQBcgEkAVIBIAFS + ARwBMgEYATIBGAESARgBEgEYARIBGAESARgBEgEYARIBGAESARgBMgEYATIBHAFRASABcQEkAXABJAGQ + ASgBjwEsAa4BLAGPASgBcQEkATIBHAETARgBEwEYARMBGAETARgBEwEcARMBHAEUARwBFAEcARQBHAEU + ARwBFAEcARQBHAEVARwBFQEcARUBHAEVARwBFQEcARUBHAEVARwBFQEcARYBHAEWARwBFgEcARcBHAEX + ARwBFQEcARMBGAESARQCEAG2AT0B2gFeAZ0BdwGUAVIB9wFeATkBZwF7AW8B3gF7Ab0BdwG9AXcBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBbwGcAW8BnAFvAZwBbwGcAW8BnAFvAZwBbwGcAXMBvQFz + Ab0BcwHeAXMBFwFvAVABagGJAWUBwgFgAcIBYAHCAWABwgFgAcIBYAGJAWUBUAFqATcBbwH/AXMB3gF3 + Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF7Ad4BewH/AXsB/wF7 + Af8BfwH/AX8B/wF/Af8BfwG9AXcBWgFrARgBYwG1AVYBOQFnAZwBbwHeAXsBCAEhASkBJQFKASkBawEt + AWsBLQFKAikBJQEIASEBxgEYAcYBGAGlARQBhAEQAYQBEAHGARABCQERAUsBFQGNARUBzwEhATABKgFx + ATIBsgE6AdIBQgHyAUYBEgFLARIBUwESAVMBEgFTARIBUwESAVMBEgFTATIBUwEyAVMBMgFTATIBUwEy + AVcBMgFXATIBVwEyAVcBMgFXATIBWwEzAVsBMgFbAVIBWwFSAV8BUgFfAVIBXwFSAV8BUgFfAVMBXwFT + AV8BcwFjAXMBYwFzAWMBcwFjAXMBZwFzAWcBcwFnATEBXwHwAVYBrwFSAW0BSgH0AV4BegFvAd0BewEG + AUUBJwFNAUgBVQFoAV0BaQFlAUgBZQEnAWUBBgFlAeUBYAHkAWABwwFgAaIBYAGiAWABgQFgAYEBYAGA + AVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwCYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFg + AYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWQBgAFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFsAYEBbAGBAWwBYQFkAWEBXAFBAVQBQQFM + Ac0BXQH2AW4BvAF7ATEBKQFTAS0BdAE1AZYBOQGYAT0BeAE1AVcBMQEWAS0B9QEoAdUBJAGVASABdAEY + AVQBFAE0ARQBNAIUARABFAEQARQBEAEUARABFQEQARUBEAE0ARQBUwEcAZIBIAGxASQB0AEsAe8BMAEO + ATUBLQE5AfABLAGyASQBVAEYARYBEAEWARABFgEQARYBEAEWARABFgEQARYBEAEWARABFgEQARYBEAEX + ARABFwEQARcBEAEXARABFwEQARcBEAEXARABGAEQARgBEAEYARABGAEQARkBEAEZARABGQEUARkBFAEX + ARABFQEQARQBDAESAQwBtwE5AdsBXgGeAXcBlAFSAfcBXgE5AWcBnAFzAd4BewHeAXsBvQF3Ab0BdwGd + AXMBnQFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFvAZwBbwGcAW8BnAFvAZwBbwGcAW8BnAFzAb0BcwG9 + AXMB3gFzARcBbwFQAWoBiQFlAcIBYAHCAWABwgFgAcIBYAHCAWABiQFlAVABagE4AW8B/wFzAf8BdwHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Af8BewH/AXsB/wF7Af8BewH/ + AX8B/wF/Af8BfwH/AX8BvQF3AXsBawEYAWMB1gFWATkBZwGcAW8B3gF7AQgBIQEpASUBSgEpAWsBLQGM + ATEBawEtAUoCKQElASkBJQHnASABxgEcAaUBGAGEARQBpQEQAcYBEAHHAQwB6AEMAUkBGQGqASkBCwE2 + AWwBQgGMAUoBrAFSAesBWgELAV8BCwFfAQsBXwELAV8BCwFfAQsBXwELAV8BCwFfASsBXwErAV8BKwFj + ASsBYwErAWMBLAFjASwBYwEsAWMBLAFnASwBZwEsAWcBLAFnAUsBawFMAWsBTAFrAUwBawFMAWsBTAFr + AUwBawFMAWsBbAFrAWwBawFsAW8BbAFvAWwBbwErAWcB6gFeAakBVgFJAU4B8gFeAXgBbwHdAXsBBgFF + AScBTQFIAVUBaAFdAYkBZQFoAWUBSAFlAUcBZQEnAWUBBgFlAeUBYAHEAWABwwFgAaIBYAGBAWABgAFc + AWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAGAAVwBgAFcAYABYAGAAWABgAFgAYABYAGAAWABgAFg + AYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBbAGBAWwBYQFkAWEBWAFBAVABQQFI + Ac0BXQH2AW4BvAF7ATEBKQFTASkBdgEtAZgBMQG6ATUBmQE1AXkBMQFZAS0BOAEpARgBJQHXARwBlwEY + AXcBEAFXARABNwEMATYBCAEWAQgBFgEIARcBCAEXAQgBFwEIAVUBEAF0ARgBsgEgAfABKAEvATEBTwE1 + AY4BPQHNAUUBUAE1AfIBJAF1ARQBGAEIARgBCAEYAQgBGAEIARgBCAEYAQgBGAEIARkBCAEZAQgBGQEI + ARkBCAEaAQgBGgEIARoBCAEaAQgBGgEIARoBCAEaAQgBGgEIARsBCAEbAQgBGwEIARsBCAEcAQgBHAEI + ARoBCAEYAQgBFgEEARMBBAG4ATUB2wFaAZ4BcwGUAVIB9wFeATkBZwGcAXMB3gF7Ad4BewHeAXsBvgF3 + Ab4BdwG9AXcBvQF3AZ0BcwGcAXMBnAFzAZwBcwGcAXMBnAFvAZwBbwGcAW8BnAFvAZwBbwG9AXMBvQFz + Ad4BcwHeAXMBFwFvAVABagGJAWUBwgFcAcIBYAHCAWABwgFgAcIBYAGJAWUBUAFqATgBbwH/AXMB/wF3 + Af8BdwHeAXcB3gF3Ad4BdwHfAXcB3wF3Ad8BdwHfAXcB/wF3Af8BdwH/AXcB/wF7Af8BewH/AXsB/wF7 + Af8BfwH/AX8B/wF/Af8BfwG9AXcBewFrARgBYwHWAVYBOQFnAZwBbwHeAXsBCAEhASkBJQFKASkBawEt + AYwBMQGMATEBawEtAWsBLQFrAS0CKQEIASEBxgEcAaUBGAGEARABYwEMAUIBCAFCAQQBowEUASQBJQGl + ATkBJgFKAWUBUgGFAV4BxQFmAeUBbgHlAW4B5QFuAeUBbgHlAWoB5QFqAQUBawEFAWsBBQFrAQUBbwEF + AW8BBQFvAQUBbwEFAW8BBQFvAQUBbwEGAW8BJQFzASUBcwElAXMBJQFzASUBcwElAXMBJQFzASYBcwFG + AXMBRgFzAUYBcwFGAXMBRgF3AUYBdwFGAXcBRgF3AQUBbwHFAWYBhAFeAUQBUgHvAWIBdwFvAd0BewEH + AUUBJwFNAUgBVQFoAV0BiQFlAYkBZQFpAWUBaQFlAWkBZQFIAWUBJgFlAQUBZQHkAWABwwFgAaIBYAGB + AVwBYAFcAWABXAFgAVwBYAFcAWABXAFgAVwBYAFcAWABXAGAAVwBgAFcAYABYAGAAWABgAFgAYABYAGA + AWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgAFgAYABYAGAAWABgQFgAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAFhAWABYQFYAUEBUAFB + AUgBzQFdAfYBbgG8AXsBMgElAVQBKQF3ASkBmQEtAbsBMQG7ATEBmwEtAZsBLQGbAS0BWwElARoBHQHa + ARQBmQEQAXkBDAFZAQgBOQEEARgBAAEZAQABGQEAARkBAAEZAQABVwEIAZUBFAHyASABMAEtAW8BNQGu + AT0BDQFGAUwBTgGwATkBMwElAZcBEAEaAQABGgEAARoBAAEaAQABGgEAARsBAAEbAQABGwEAARsBAAEc + AQABHAEAARwBAAEcAQABHAEAARwBAAEcAQABHAEAAR0BAAEdAQABHQEAAR0BAAEeAQABHgEAAR4BAAEe + AQABHAEAARoBAAEYAQABFQEAAbkBNQHbAVoBngFzAZQBUgH3AV4BOQFnAZwBcwHeAXsB3gF7Ad4BewHe + AXsBvgF3Ab4BdwG9AXcBvQF3AZwBcwGcAXMBnAFzAZwBcwGcAW8BnAFvAZwBbwGcAW8BnAFvAb0BcwG9 + AXMB3gFzAd4BcwEXAW8BUAFqAYkBZQHCAVwBwgFcAcIBYAHCAWABwgFgAYkBZQFxAWoBOAFvAf8BcwH/ + AXcB/wF3Af8BdwHeAXcB3wF3Ad8BdwHfAXcB3wF3Af8BdwH/AXcB/wF3Af8BdwH/AXsB/wF7Af8BewH/ + AXsB/wF/Af8BfwH/AX8B/wF/Ab0BdwF7AWsBOQFjAdYBVgE5AWcBnAFvAd4BewEIASEBKQElAUoBKQFr + AS0BjAExAYwBMQGMATEBawEtAWsBLQFKAikBJQEIASEB5wEcAcYBGAGlARQBpQEQAYQBDAHkARgCJQGG + ATEBxgE9AQYBSgFFAVIBhQFeAaQBZgHEAWoBxAFqAeQBbgHjAW4B4wFuAeMBbgHjAW4BAwFvAQMBbwED + AW8BAwFzAQMBcwEEAXMBBAFzAQQBcwEEAXMBBAFzASQBdwEkAXcBIwF3ASQBdwEkAXcBJAF3ASQBdwEk + AXcBRAF3AUQBdwFEAXcBRAF3AUQBewFEAXsBRAF7AQQBcwHDAWYBgwFeAUMBVgHuAWIBdwFvAd0BewEH + AUUBJwFNAUgBVQFpAV0BiQFlAYkBZQGJAWUBaQFlAWkBZQFIAWUBJwFlASYBZQEFAWUB5AFgAcMBYAGi + AWABogFgAYEBYAGBAWABgQFgAYEBXAGBAVwBgQFcAYABXAGAAVwBgAFgAYABYAGAAWABgAFgAYABYAGA + D2ABgAFgAYABYAGBAWABgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGB + AWgBgQFoAYEBaAGBAWgBgQFoAWEBYAFhAVgBQQFQAUEBSAHNAV0B9gFuAbwBewEyASUBVQEpAXcBLQGZ + AS0BvAExAbwBMQGbATEBmwEtAZsBLQFbASkBOwEhAfoBHAHaARgBugEUAZoBEAF6AQwBWQEIAVkBCAFa + AQgBOgEEAToBBAF4AQwBtQEUAfMBIAERASkBUAExAY8BNQHOAT0BDQFGAZABMQETASEBlwEQARoBAAEa + AQABGgEAARoBAAEbAQABGwEAARsBAAEbAQABGwEAARwBAAEcAQABHAEAARwBAAEdAQABHQEAAR0BAAEd + AQABHQEAAR0BAAEdAQABHgEAAR4BAAEeAQABHgEAAR8BAAEcAQABGgEAARgBAAEVAQABuQE1AdwBWgGe + AXMCUgG0AVoB9gFmATkBbwN7AXcBewF3AXsBdwF7AXcBWgF3AVoBdwFZAXMBWQFzAVkBcwE5AXMBOQFv + ATkBbwE5AW8BOAFvATgBbwEYAW8BOAFvATgBbwE4AW8BOAFvAZMBagHtAWUBRwFhAaEBXAGhAVwBoQFg + AaEBYAGhAWABRwFlAewBaQGSAWoBOAFvATgBbwEXAXMBFwFzARcBcwEXAXMBFwFzARgBcwEYAXMBGAFz + ARgBcwE4AXMBOAFzATgBcwE4AXcBOAF3ATgBdwE4AXcBOAF3ATgBewE4AXsB9gFyAbQBZgFzAV4BUQFS + AfYBYgF6AW8B3QF7AQgBIQEpASUBSgEpAWsBLQGMATEBjAExAYwBMQGMATEBawEtAWsBLQFKAikBJQEI + ASUBCAEhAecBHAHnARgBxgEYAQYBHQEnASUBRwEtAYcBMQHGAT0BBgFKASUBVgFkAV4BhAFiAaMBagHD + AW4B4gFyAeIBcgHiAXIB4gFyAeIBbgHiAXIB4gFyAeIBcgHiAXIB4gF2AQIBdwEDAXcBAwF3AQMBdwEC + AXcBIgF3ASIBdwEiAXcBIgF3ASMBdwEjAXcBIwF7ASMBewFDAXsBQwF7AUMBewFDAXsBQwF7AUMBewEC + AXMBwgFqAYIBYgFCAVYB7gFmAXcBbwHdAXsBBwFFAScBTQFIAVUBaQFdAYkBZQGJAWUBiQFlAYkBZQFp + AWUBaAFlAUgBZQEnAWUBJgFlAQYBZQEFAWUB5AFgAeQBYAHDAWABwwFgAcMBYAGiAWABogFgAaIBYAGh + AWABoQFgAYEBYAGBAWABgAFgAYABYAGAE2ABgAFgAYEBYAGBAWABgQFkAYEBZAGBAWQBgQFkAYEBZAGB + AWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBgQFoAYEBaAGBAWgBYQFgAWEBWAFBAVABQQFIAc0BXQH2 + AW4BvAF7ATMBJQFVASkBdwEtAZoBMQG8ATEBvAExAZwBMQGbATEBmwEtAXsBLQFbASkBOwElARsBIQH7 + ARwB+wEcAdsBGAG6ARQBugEUAZoBEAF6AQwBegEMAZgBEAG2ARgB9AEcARIBJQExASkBcAEtAa8BNQHN + ATkBcQEpAfQBHAF3AQwBGgEAARoBAAEaAQABGwEAARsBAAEbAQABGwEAARsBAAEbAQABHAEAARwBAAEc + AQABHAEAAR0BAAEdAQABHQEAAR0BAAEdAQABHQEAAR4BAAEeAQABHgEAAR4BAAEfAQABHwEAAR0BAAEa + AQABGAEAARYBAAG5ATUB3AFaAZ4BcwEwAVIBcgFaAZMBYgHVAW4BFwF3ARcBdwEXAXcBFwF3ARcBcwEW + AXMB9gFyAfYBcgH2AXIB9gFyAfUBbgHVAW4B1QFuAdUBbgG0AW4BtAFqAZMBagGTAWoBkwFqAZIBagGS + AWoBDgFqAYoBZQElAWEBoQFcAaEBXAGhAVwBgQFcAYEBXAEEAWEBaAFlAewBZQFQAWoBUAFqAVABagFQ + AWoBUAFqAVABagFQAW4BUAFuAVABbgFQAW4BUAFuAVABbgFQAW4BUAFuAVABbgFQAW4BUAFuAVABcgFQ + AXIBUAFyAXABcgEvAWoBDgFiAc0BWQGrAU0BkwFiATkBbwG9AXsBCAEhASkBJQFKASkBawEtAYwBMQGM + ATEBjAExAYwBMQGMATEBawEtAWsBLQFrAS0BSgEpAUoCKQElASkBJQEpASEBKAElASgBJQEoASUBJwEp + AWYBMQGmAT0B5QFJASQBVgFDAV4BggFmAaIBbgHBAXYBwQFyAcEBcgHBAXIBwQFyAcEBcgHBAXIB4QF2 + AeEBdgHhAXYB4QF2AeEBdgHhAXoBAQF7AQEBewEBAXsBIQF7ASEBewEhAXsBIQF7ASEBewEhAXsBIQF7 + ASEBfwFBAX8BQQF/AUEBfwFBAX8BQQF/AQEBdwHBAWoBgQFiAUEBWgHtAWYBdgFzAdwBewEnAUUBJwFN + AUgBVQFpAV0BigFlAYkBZQGJAWUBiQFlAYkBZQFpAWUBaAFlAUgBZQFIAWUBRwFlAScBZQEmAWUBJgFl + AQUBZQEFAWEB5AFgAeMBYAHDAWABwwFgAcIBYAGiAWABoQFgAYEBYAGBAWABgAFgAYATYAGAAWABgQFg + AYEBYAGBAWABgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBgQFo + AYEBaAFhAWABYQFYAUEBUAFBAUgBzQFdAfYBbgG8AXsBMwElAVUBKQF4AS0BmgExAbwBNQG8ATEBnAEx + AZwBMQGbATEBewEtAXwBLQFcASkBXAEpATwBJQE8ASUBGwEhARsBIQH7ARwB2wEYAbsBFAGbARABuQEU + AdcBGAHVARwB8wEgATIBJQFRASkBbwEtAa4BLQExASEB1AEUAXcBDAEaAQABGgEAARoBAAEbAQABGwEA + ARsBAAEbAQABGwEAARsBAAEcAQABHAEAARwBAAEcAQABHQEAAR0BAAEdAQABHQEAAR0BAAEeAQABHgEA + AR4BAAEeAQABHwEAAR8BAAEfAQABHQEAARsBAAEYAQABFgEAAbkBNQHcAVoBngFzAe0BTQEPAVoBUAFi + AZIBagG0AXIBswFyAbMBcgGzAXIBswFyAbMBcgGTAXIBkgFyAZIBcgGSAW4BkgFuAXIBbgFyAW4BUQFq + AVABagEvAWoBDgFqAQ4BagHtAWkB7QFlAcwBZQGJAWUBRgFhAeQBYAGhAVwBoQFcAYABXAGAAVwBYAFc + AaIBXAHkAWABJgFhAWgBZQFoAWUBaAFlAWgBZQFoAWUBaAFlAWgBZQFoAWUBaAFpAWgBaQFoAWkBaAFp + AWgBaQFoAWkBaAFpAWgBaQFoAWkBiAFpAYgBaQGIAW0BiAFtAWgBZQFHAVkBJwFRAQYBSQEwAV4BGAFv + Ab0BewEIASEBKQElAUoBKQFrAS0BjAExAYwBMQGMATEBjAExAYwBMQGMATEBjAExAYwBMQGMATEBjAEx + AWsBLQFrAS0BawEtAUoCKQElAQkBIQHoARwBJwEpAWYBNQGlAUEB5AFNASMBWgJiAYEBbgHAAXYBwAF2 + AcABdgGgAXYBoAFyAaABdgHAAXYBwAF2AcABdgHAAXoB4AF6AeABegHgAXoB4AF6AQABewEAAXsBAAF7 + AQABewEAAXsBAAF7AQABewEgAX8BIAF/ASABfwEgAX8BQAF/AUABfwFAAX8BQAF/AQABdwHAAW4BgAFm + AUABWgHtAWYBdgFzAdwBewEnAUUBRwFNAUgBVQFpAV0BigFlAYoBZQGJAWUBiQFlAYkBZQGJAWUBaQFl + AWkBZQFpAWUBaQFlAWgBZQFoAWUBaAFlAUcBZQEmAWUBJQFlAQUBYQHkAWAB5AFgAcMBYAHDAWABogFg + AaIBYAGBAWABgRdgAYEBYAGBAWABgQFgAYEBYAGBAWABgQFkAYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWgBgQFoAYEBaAGBAWgBYQFgAWEBWAFBAVABQQFIAc0BXQH2AW4BvAF7ATMBJQFVASkBeAEt + AZoBMQG8ATUBvAE1AZwBMQGcATEBmwExAZwBMQGcATEBnAExAZwBMQGcATEBfAEtAXwBLQF8AS0BXAEp + ARwBIQH8ARwB2wEYAdoBGAHYARgB1gEYAfQBHAETAR0BMgEhAVABIQFvASUBEgEdAbQBEAFXAQgBGQEA + ARoBAAEaAQABGwEAARsBAAEbAQABGwEAARsBAAEbAQABHAEAARwBAAEcAQABHAEAAR0BAAEdAQABHQEA + AR0BAAEeAQABHgEAAR4BAAEeAQABHwEAAR8BAAEfAQABHwEAAR0BAAEbAQABGQEAARYBAAG5ATUB3AFa + AZ4BcwGrAU0BzAFVAQ0BXgEvAWYBUAFuAVABbgFQAW4BTwFuAU8BbgFPAW4BTwFuAS8BbgEvAW4BLwFu + AS4BbgEOAW4BDgFqAe0BaQHMAWkBqwFpAYoBZQFpAWUBSAFlAUcBZQEmAWEBBAFhAeMBYAHCAVwBoQFc + AYABXAGAAVwBYAFYAWABWAFgAVgBgAFcAYABXAGhAVwBoQFcAaEBXAGhAVwBoQFcAaEBXAGhAWABoQFg + AaEBYAGhAWABoQFgAaEBYAGhAWABoQFgAaEBYAGhAWABoQFgAaEBZAGhAWQBoQFkAcEBZAGhAVwBoQFU + AYEBTAGBAUQB7QFZAfYBagG8AXcBCAEhASkBJQFKASkBawEtAYwBMQGMATEBjAExAYwBMQGMATEBjAEx + AYwBMQGMATEBjAExAYwBMQFrAS0BawEtAWsBLQFKASkBKgElAQkBIQEJASEBSAEtAYcBOQHGAUUBBQFS + AUQBWgFkAWYBowFuAeIBegHiAXoB4gF2AcIBdgHCAXYBwgF2AcIBdgHhAXoB4QF6AeEBegHhAXoB4QF6 + AeEBegEAAXsBAAF7AQABewEAAXsBAAF7AQABewEAAXsBAAF7AQABewEgAX8BIAF/ASABfwEgAX8BQAF/ + AUABfwFAAX8BAAF3AcABbgGAAWIBQAFaAe0BZgF2AXMB3AF7AScBRQFHAU0BaAFVAWkBYQGKAWkBigFp + AYkBZQGJAWUBiQFlAYkBZQGJAWUBaQFlAWkBZQFpAWUBaAFlAWgBZQFoAWUBaAFlAUcBZQFGAWUBRgFl + ASUBZQEFAWUBBAFlAeQBZAHDAWQBwwFkAcMBZAGiAWQBogFkAaIBZAGBAWQBgQFkAYEBZAGBAWQBgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBYAGBAWABgQFgAYEBZAGBAWQBYQFkAWEBZAFhAWQBgQFk + AYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAWEBYAFhAVgBQQFQAUEBSAHNAV0B9gFuAbwBewFxATEBkwE5 + AdUBPQH3AUEBOQFKARkBRgEYAUYBGAFGARgBRgEYAUYBGAFGARgBRgEZAUYBGQFGAfgBQQH4AUEB+AFB + AdgBPQG4ATkBmAE1AXcBMQF2ATEBdQE1AZMBNQGSATUBsQE1AdABOQHPATkB7gE5AbABNQFyAS0BMwEl + AfUBIAH1ASAB9gEgAfYBIAH2ASAB9gEgAfYBIAH1ASAB9QEgAfUBIAH1ASAB9QEgAfUBIAH1ASAB9gEg + AfYBIAH2ASAB9gEgAfYBIAH3ASAB9wEgAfcBIAH3ASAB9wEgAfcBIAH2ARwB1AEcAdIBGAGxARQBFgFC + AfoBYgG9AXcBqwFNAcwBVQEOAV4BLwFqAVABcgFQAXIBUAFuAU8BbgFPAW4BTwFuAU8BbgFPAW4BLwFu + AS8BbgEvAW4BLgFuAQ4BbgENAWoB7QFpAcwBaQGrAWkBqgFpAYoBZQFpAWUBaAFlAUcBZQEmAWUBBQFh + AQQBYQHjAWAB4wFgAcMBXAGjAVwBwwFcAcMBXAHDAWAB4wFgAcIBYAHCAWABwgFgAcIBYAHCAWABoQFg + AaEBYAGhAWABoQFgAaEBYAGhAWABoQFgAaEBYAGhAWABoQFgAaEBYAGhAWQBoQFkAaEBZAGhAWQBoQFc + AaABVAGAAUwBgAFEAe0BWQH2AWoBvAF3AQgBIQEpASUBSgEpAWsBLQGMATEBjAExAYwBMQGMATEBjAEx + AYwBMQGMATEBjAExAYwBMQGMATEBawEtAWsBLQFrAS0BSgEpAUoBKQEqASUBKQElAWkBMQGoAT0B5wFF + AScBUgFmAV4BhgFmAcUBcgEEAXsBBAF7AQQBewHkAXoB5AF2AeQBegHjAXoB4wF6AeMBegHiAXoBAgF7 + AQIBewECAXsBAQF7AQEBewEAAXsBAAF7AQABewEAAXsBAAF7AQABewEAAXsBAAF7ASABfwEgAX8BIAF/ + ASABfwFAAX8BQAF/AQABdwHAAW4BgAFiAUABWgHtAWYBdgFzAdwBewEnAUkBRwFRAWgBWQGJAWEBigFp + AYoBaQGKAWkBiQFlAYkBZQGJAWUBiQFlAYkBZQFpAWUBaQFlAWkBZQFoAWUBaAFlAWgBZQFoAWkBiAFp + AYcBaQFnAWkBRgFlASYBZQEFAWUBBQFlAeQBZAHkAWQB5AFkAeMBZAHDAWQBwwFkAcMBZAGjAWQBogFk + AaIBZAGiAWQBogFkAaIBZAGiAWQBogFkAYEBZAGBAWQBgQFgAYEBYAGBAWABYQFkAWEBZAFhAWQBYQFk + AWEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAFhAWABYQFYAUEBUAFBAUgBzQFdAfYBbgG8AXsBrgFB + AfABRQEyAU4BdAFWAZUBWgGVAVoBlQFaAZQBWgGUAVoBlAFaAZQBWgGVAVoBlQFaAZUBWgF0AVYBdAFW + AXQBVgFUAVYBVAFSATQBTgE0AU4BMwFOATIBTgExAU4BMAFOAU8CTgFSAW4BUgGNAVICTgEvAUoB8AFF + AdEBQQHRAUEB0QFBAdEBQQHRAUEB0AFBAdABQQHPAUEBzwFBAc8BQQHPAUEBzgFBAc4BQQHOAUEBzgFB + Ac4BQQHPAUEBzwFBAc8BQQHPAUEB7wFBAe8BQQHvAUEB7wFBAfABQQHOAT0BrQE1AYwBMQFLAS0BcwFO + ATkBZwG9AXcBqwFNAc0BVQEOAWIBLwFqAXEBcgFQAXIBUAFyAVABbgFQAW4BUAFuAVABbgFQAW4BUAFu + AS8BbgEvAW4BLwFuAS4BbgEOAW4BDQFuAe0BaQHsAWkBzAFpAcsBaQGrAWkBqgFpAYkBaQGJAWUBaAFl + AUcBZQFHAWUBJgFlASYBYQEGAWEBBgFhAQUBYQEFAWEBBQFhAQQBYQEEAWEB5AFgAeMBYAHDAWABwgFg + AcIBYAGhAWABoQFgAaEBYAGhAWABoQFgAaEBYAGhAWABoQFgAaEBYAGhAWQBoQFkAaEBZAGhAWQBoAFc + AYABVAGAAUwBgAFEAe0BWQH2AWoBvAF3AQgBIQEpASUBSgEpAWsBLQGMATEBjAExAYwBMQGMATEBjAEx + AYwBMQGMATEBjAExAYwBMQGMATEBawEtAWsBLQFrAS0BawEtAUoBKQFKASkBSgEpAYoBNQHJAT0BCQFK + AUgBVgGIAV4BpwFqAecBcgEnAX8BBwF/AQcBewEHAXsBBwF7AQYBewEFAXsBBQF7AQQBewEEAXsBAwF7 + AQMBewEDAXsBAgF7AQIBewEBAXsB4AF6AeABegHgAXoB4AF6AeABegEAAXsBAAF7AQABewEgAX8BIAF/ + ASABfwEgAX8BQAF/AQABdwHAAWoBgAFiAUABVgHtAWYBdgFzAdwBewEnAUkBRwFRAWgBWQGJAWEBqgFp + AaoBaQGKAWkBigFpAYoBZQGJAWUBiQFlAYkBZQGJAWUBaQFlAWkBZQFpAWUBaQFlAYkBaQGJAWkBqQFp + AckBbQGoAWkBaAFpAUcBZQEnAWUBJgFlASYBZQEFAWUBBQFlAQUBZQEFAWUBBAFlAeQBZAHkAWQB5AFk + AcQBZAHDAWQBwwFkAaMBZAGiAWQBogFkAaIBZAGBAWQBgQFkAYEBYAGBAWABYQFgAWEBZAFhAWQBYQFk + AWEBZAGBAWQBgQFkAYEBaAGBAWgBgQFoAYEBaAFhAWABYQFYAUEBUAFBAUgBzQFdAfYBbgG8AXsBDAFO + AU0BVgGPAV4B0AFmARIBbwERAW8BEQFvAREBbwHxAW4B8QFuAfEBbgHxAW4B8QFuAfEBbgHwAWoB8AFq + AfABagHwAWoB8AFqAdABZgHQAWYBzwFmAc8BZgHOAWYBzQFmAe0BZgHtAWoBDAFrAQwBawHsAWYB7AFm + Ac0BYgGtAV4BrQFeAawBXgGsAV4BqwFeAasBXgGqAV4BqQFeAakBXgGoAV4BqAFeAacBXgGnAV4BpwFe + AacBXgGnAV4BpwFeAacBXgHHAV4BxwFeAccBXgHHAV4BxwFeAecBXgHoAV4BpwFaAWYBUgFGAU4BBQFG + AdABWgFXAWsBvQF3AawBTQHNAVUBDgFiATABagFxAXIBcQFyAVABcgFQAXIBUAFuAVABbgFQAW4BUAFu + AVABbgFQAW4BLwFuAS8BbgEvAW4BLgFuAQ4BbgEOAW4BDgFuAQ0BbgHtAW0B7QFtAe0BbQHsAWkBywFp + AcsBaQGqAWkBqgFlAYkBZQGJAWUBaQFlAWgBZQFoAWUBRwFlAUcBZQFGAWUBJgFlAQUBZQEEAWUB5AFg + AeMBYAHCAWABoQFcAaEBXAGhAVwBoQFcAaEBXAGhAWABoQFgAaEBYAGhAWABoQFkAaEBZAGhAWQBoQFk + AaABXAGAAVQBgAFMAYABRAHtAVkB9gFqAbwBdwEIASEBKQElAUoBKQFrAS0BjAExAYwBMQGMATEBjAEx + AYwBMQGMATEBjAExAYwBMQGMATEBjAExAWsBLQFrAS0BawEtAWsBLQFrAS0BawEtAWsBLQGrATUB6gFB + ASoBTgFqAVYBqgFiAckBagEJAXcBKQF/ASkBfwEpAX8BKQF/ASkBewEoAXsBJwF7ASYBewEGAXsBBQF7 + AQUBewEEAXsBBAF3AQMBdwECAXcB4QF2AeEBdgHgAXYB4AF2AeABdgHgAXYB4AF6AQABewEAAXsBAAF7 + ASABfwEgAX8BIAF/ASABfwEAAXcBwAFqAYABYgFAAVYB7QFmAXYBbwHcAXsBJwFJAUcBUQFoAVkBiQFh + AaoBaQGqAWkBigFpAYoBaQGKAWUBigFlAYkBZQGJAWUBiQFlAYkBZQFpAWUBaQFlAWkBZQGJAWkBqQFp + AeoBbQEKAW4B6QFtAakBaQFoAWkBSAFlAUgBZQFHAWUBRwFlAUcBZQFGAWUBJgFlASYBZQEmAWUBBQFl + AQUBZQHlAWQB5QFkAcQBZAHEAWQBwwFkAcMBZAGiAWQBogFkAYEBZAGBAWABYQFgAWEBYAFhAWABYQFg + AWEBZAFhAWQBYQFkAYEBZAGBAWgBgQFoAYEBaAGBAWgBYQFgAWEBWAFBAVABQQFIAc0BXQH2AW4BvAF7 + AUoBWgGLAWYB7AFuAS0BdwFuAX8BbgF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbAF/ + AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFrAX8BawF/AWsBfwGLAX8BiwF/AYsBfwGLAX8BigF/ + AYoBfwGJAX8BiQF/AYgBfwGHAX8BhgF/AYYBfwGFAX8BhAF/AYMBfwGDAX8BggF/AYEBfwGAAX8BgAF/ + AYABfwGAAX8BgAF/AYABfwGgAX8BoAF/AaABfwGgAX8BwAF/AcABfwHAAX8BwAF/AYABdwFAAW8BAAFn + AaABXgEtAWsBdgFzAdwBewGsAU0BzQFVAQ8BYgFQAWoBcQFyAXEBcgFxAXIBUAFyAVABbgFQAW4BUAFu + AVABbgFQAW4BUAFuAVABbgEvAW4BLwFuAS8BbgEvAW4BLwFuAS8BbgEvAW4BLwFuAS8BbgEvAW4BLgFu + AS4BbgENAW4BDQFqAQ0BagHsAWkBzAFpAcwBaQGrAWkBqgFpAYoBaQGJAWUBaAFlAUcBZQFGAWUBJgFl + AQUBZQHkAWABwwFgAcIBXAGhAVwBoQFcAaEBXAGhAVwBoQFcAaEBYAGhAWABoQFgAaEBZAGhAWQBoQFk + AaEBZAGAAVwBgAFUAYABTAGAAUQB7QFZAfYBagG8AXcBCAEhASkBJQFKASkBawEtAYwBMQGMATEBjAEx + AYwBMQGMATEBjAExAYwBMQGMATEBjAExAYwBMQGMAS0BawEtAWsBLQGLATEBiwExAasBNQGsATkB6wFB + ASsBSgFrAVYBqwFeAcsBZgHqAW4BCgF3ASoBewEqAXsBKgF7ASoBewEqAXsBKQF7ASkBewEoAXsBKAF7 + AScBewEnAXsBJgF3ASYBdwElAXcBBQF3AQQBdwEEAXcBAwF3AQMBdwEDAXcBAgF3AQIBdwECAXcBAQF7 + AQEBewEhAXsBIQF7ASEBewEhAXsB4QFyAcEBagGBAV4BQQFWAe0BZgF2AW8B3AF7AScBSQFIAVEBaQFZ + AYkBYQGqAWkBqgFpAaoBaQGqAWkBqgFpAaoBaQGqAWkBqQFpAakBaQGJAWkBiQFlAWkBZQFpAWUBiQFp + AakBaQHJAWkB6gFtAckBbQGpAWkBiQFpAWgBaQFoAWkBSAFpAUcBZQFHAWUBRwFlASYBZQEmAWUBJgFl + ASYBZQEGAWUBBQFlAeUBZAHlAWQB5AFkAeQBZAHDAWQBwwFkAcMBZAGiAWQBogFkAYIBZAGCAWQBgQFk + AYEBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBgQFoAWEBYAFhAVgBQQFQAUEBSAHNAV0B9gFu + AbwBewFKAVoBiwFmAewBbgEtAXcBbgF/AW4BfwFuAX8BbgF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbQF/ + AW0BfwFtAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFrAX8BawF/AYsBfwGLAX8BiwF/ + AYsBfwGKAX8BigF/AYoBfwGJAX8BiAF/AYgBfwGHAX8BhgF/AYYBfwGFAX8BhQF/AYQBfwGDAX8BgwF/ + AYIBfwGCAX8BggF/AYIBfwGCAX8BoQF/AaEBfwGgAX8BoAF/AaABfwGgAX8BwAF/AcABfwGAAXcBIAFv + AeABZgGgAV4BLQFrAXYBcwHcAXsB7gFNATABWgFxAWIBkwFuAdQBdgHUAXYB1AFyAbQBcgG0AXIBtAFy + AbQBcgG0AXIBtAFyAbMBcgGzAXIBswFyAZMBcgGTAXIBkwFyAZMBcgGTAXIBkwFyAbMBcgGzAXIBswFy + AZIBcgFwAW4BLwFuAQ0BbgENAW4B7QFtAe0BbQHMAW0B7QFtAQ4BagEOAWoBLgFqAQ4BagENAWoB7QFp + AcwBaQHLAWkBqwFpAaoBZQGJAWUBiQFlAYkBZQGIAWUBaAFlAWgBZQFoAWUBaAFlAWgBZQFoAWkBaAFp + AWgBaQFoAWkBRwFhAUcBWQEmAVEBBQFJATABXgEXAW8BvQF7AQgBIQEpASUBSgEpAWsBLQGMATEBjAEx + AYwBMQGMATEBjAExAYwBMQGMATEBjAExAYwBMQGMATEBjAEtAYwBLQFrAS0BrAExAcwBOQHsAT0BDAFG + AUwBTgFsAVYBrAFeAcwBZgHsAWoBCwFvASsBcwErAXcBKwF3ASsBdwErAXcBKwF3ASsBdwEqAXcBKgF3 + ASkBdwEpAXcBKQF3ASkBdwEoAXcBKAF3ASgBdwEnAXcBJwF3ASYBdwEmAXcBBgF3AQUBdwEFAXcBBAF3 + AQMBdwEDAXcBAwF3ASIBdwEiAXcBIgF3AeIBbgGiAWYBggFeAUIBVgHuAWIBdwFvAd0BewEnAUkBSAFR + AWkBWQGKAWEBqgFpAaoBaQGqAWkBqgFpAaoBaQGqAWkBqgFpAaoBaQGpAWkBqQFpAYkCaQFlAWkBZQGJ + AWkBiQFpAakBaQHJAWkByQFpAakBaQGpAWkBiQFpAYgBaQFoAWkBSAFpAUcBZQFHAWUBRwFlASYBZQEm + AWUBJgFlASYBZQEGAWUBBgFlAQUBZQEFAWUB5QFkAeQBZAHkAWQB5AFkAcMBZAHDAWQBwwFkAaMBZAGi + AWQBogFkAYIBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAGBAWgBYQFgAWEBWAFBAVABQQFIAc0BXQH2 + AW4BvAF7AUoBWgGMAWYB7QFuAS4BdwFvAX8BbwF/AW8BfwFuAX8BbgF/AW4BfwFuAX8BbgF/AW4BfwFu + AX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/AYwBfwGL + AX8BiwF/AYsBfwGLAX8BigF/AYoBfwGJAX8BiQF/AYgBfwGIAX8BiAF/AYcBfwGHAX8BhgF/AYYBfwGF + AX8BhQF/AYQBfwGEAX8BhAF/AYQBfwGDAX8BggF/AYEBfwGAAX8BoAF/AaABfwGgAX8BoAF/AWABdwEg + AW8B4AFmAaABXgENAWsBdgFzAdwBewExAVIBcgFaAbQBZgH2AW4BOAF3ATgBdwE4AXcBFwF3ARcBcwEX + AXMBFwFzARcBcwEXAXMBFwFzARcBcwEXAXMBFwFzARcBcwEXAXMBFwFzARcBcwEXAXMBFwFzARcBcwEX + AXMB1QFyAZMBcgFwAW4BLgFuAQ4BbgENAW4B7QFtAe0BbQEvAW4BUQFuAZIBbgHUAW4BtAFuAbMBbgGT + AW4BkwFuAXIBbgFyAW4BcQFuAXEBbgFQAW4BUAFuAVABagFQAWoBUAFqAVABagEvAWoBLwFqAS8BbgEv + AW4BLwFuAVABbgEOAWYB7QFdAcwBVQGLAU0BkwFiATkBbwG9AXsBKQElASkBJQFKASkBawEtAYwBMQGM + ATEBjAExAYwBMQGMATEBjAExAYwBMQGMATEBjAExAYwBMQGMAS0BjAEtAYwBLQGsATUB7AE9AS0BRgFt + AU4BjQFWAa0BXgHtAWYBDQFvAQ0BbwEsAXMBLAFzASwBcwEsAXMBLAFzASwBcwEsAXMBLAFzASwBdwEr + AXcBKwF3ASsBdwErAXcBSwF3AUsBdwFKAXcBSgF3AUoBdwFKAXcBKQF3ASkBdwEoAXcBKAF3AScBdwEm + AXMBBQFzAQQBcwEEAXMBBAFzASQBcwEjAXMB4wFqAaMBYgGDAVoBQwFSAe4BYgF3AW8B3QF7ASgBRQFI + AU0BaQFVAYoBYQGrAWkBqwFpAcsBaQHLAWkBywFpAcoBaQHKAWkBygFpAcoBaQGpAWkBqQFpAYkCaQFl + AWkBZQGJAWkBiQFpAakBaQGpAWkBqQFpAckBbQHJAW0BqQFpAYgBaQFoAWkBSAFlAUcBZQFHAWUBRwFl + AUYBZQEmAWUBJgFlASYBZQEGAWUBBgFlAQYBZQEFAWUBBQFlAQUBZQHlAWQB5QFkAeQBZAHkAWQBxAFk + AcMBZAHDAWQBogFkAaIBZAGBAWQBgQFkAYEBZAGBAWQBgQFoAYEBaAFhAWABYQFYAUEBUAFBAUgBzQFd + AfYBbgG8AXsBSwFaAYwBZgHtAW4BLgF3AXABfwFvAX8BbwF/AW8BfwFuAX8BbgF/AW4BfwFuAX8BbgF/ + AW4BfwFuAX8BbgF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFsAX8BbAF/AWwBfwFsAX8BbAF/ + AYwBfwGMAX8BiwF/AYsBfwGLAX8BiwF/AYoBfwGKAX8BigF/AYkBfwGJAX8BiQF/AYkBfwGIAX8BiAF/ + AYgBfwGHAX8BhwF/AYcBfwGGAX8BhgF/AYQBfwGDAX8BggF/AYABfwGAAX8BgAF/AaABfwGgAX8BYAF3 + ASABbwHgAWYBgAFaAQ0BZwF2AXMB3AF7AXMBUgG1AVoB9wFmAVkBbwGbAXsBmwJ7AXcBewF3AXsBdwF7 + AXcBewF3AXsBdwF7AXcBewF3AXsBdwF7AXcBewF3AXsBdwF7AXcBewF3AXsBdwF7AXcBewF3AZsBdwGb + AXcBOAFzAdUBcgGSAXIBLgFuAS4BbgEOAW4BDgFuAQ0BbgFRAW4BtAFyARcBcwF6AXMBWgFzAVkBcwE5 + AXMBOQFzATkBcwE5AXcBOAF3ATgBdwE4AXMBOAFzATgBcwE4AXMBFwFzARcBcwEXAXMB9gFuAfYBcgEX + AXMBFwFzARcBcwHVAWoBlAFiAXIBWgExAVIB1gFiAVoBbwG9AXsBKQElAUoBKQFKASkBawEtAYwBMQGM + ATEBjAExAYwBMQGMATEBjAExAYwBMQGMATEBjAExAYwBMQGMAS0BjAEtAYwBLQHMATkBLQFGAW0BTgGu + AVoBzgFiAe4BZgEOAW8BLgFzAS4BcwEtAXMBLQFzAS0BbwEtAW8BLQFvAS0BbwEtAW8BLQFzAS0BcwEt + AXMBLQFzAU0BcwFNAXMBTQFzAU0BcwFNAXMBTQFzAU0BcwFNAXMBTAFzAUwBcwFLAXMBKwFzASoBcwEo + AXMBJwFzAQYBbwEFAW8BBQFvAQUBbwEFAW8B5AFqAaQBYgGEAVoBRAFSAe8BYgF3AW8B3QF7ASgBRQFJ + AU0BaQFVAYoBXQGrAWUBqwFpAcsBaQHLAWkB6wFpAesBaQHqAWkB6gFpAeoBaQHKAWkBqQFpAYkCaQFl + AWkBZQFpAWUBiQFlAYkBZQGpAWkBqQFpAcoBbQHqAW0ByQFtAYkBaQFoAWkBSAFlAUgBZQFHAWUBRwFl + AUcBZQFHAWUBJwFlAScBZQEnAWUBJgFlASYBZQEmAWUBJgFlASYBZQEGAWUBBgFlAQYBZQEFAWUB5QFk + AeQBZAHkAWQBwwFkAaIBZAGBAWQBgQFkAYEBZAGBAWQBgQFkAYEBZAFhAWABYQFYAUEBUAFBAUgBzQFd + AfYBbgG8AXsBSwFaAYwBZgHtAW4BLwF3AXABfwFwAX8BcAF/AW8BfwFPAX8BTwF/AU8BfwFPAX8BTwF/ + AU8BfwFOAX8BTgF/AU4BfwFOAX8BTQF/AU0BfwFNAX8BTQF/AU0BfwFNAX8BTQF/AW0BfwFsAX8BbAF/ + AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWsBfwFrAX8BawF/AWsBfwFrAX8BawF/AWsBfwGLAX8BigF/ + AYoBfwGKAX8BiQF/AYkBfwGIAX8BiAF/AYYBfwGEAX8BggF/AWEBfwGAAX8BgAF/AYABfwGAAX8BQAF3 + AQABbwHAAWYBgAFaAQ0BZwF2AXMB3AF7AbUBUgEYAV8BWgFnAZwBcwHeAXsB3gF7Ad4BewHeAXsB3gF3 + Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Af8BdwH/AXcB/wF3 + Af8BdwGbAXcBFwFzAbMBcgEvAW4BLwFuAS4BbgEOAW4BDgFuAZIBcgEXAXMBmwF3Af8BdwH/AXcB/wF3 + Af8BdwHfAXcB/wF7Af8BewH/AXsB/wF7Af8BewH/AXsB/wF7Af8BdwH/AXcB3gF3Ad4BdwG9AXMB3gF3 + Ad4BdwHeAXcB3gF3AZwBbwFaAWcBGAFfAbYBVgE5AWcBfAFvAd4BewEpASUBSgEpAWsBLQFrAS0BjAEx + AYwBMQGMATEBjAExAYwBMQGMATEBjAExAYwBMQGMATEBrQExAc4BMQHvATEB8AExATABOgFxAUIBsQFK + AdIBUgHyAVoBEgFfATIBYwFSAWcBUgFnAVIBZwFRAWMBUQFjAVEBYwFRAWMBUQFjAVEBZwFRAWcBUQFn + AVEBZwFRAWsBUQFrAVEBawFRAWsBcQFrAXEBawFxAWsBcgFrAXIBawFRAWsBUQFrAVABawFQAWsBTwFr + AS4BawEtAWcBLAFnASwBZwEsAWcBKwFnASsBZwHqAV4BqgFWAYkBUgFIAUoB8QFeAXgBbwHdAXsBKAFF + AUkBTQFpAVUBigFhAasBaQHLAWkBDAFqASwBbgFMAW4BTAFuAUwBbgFLAXIBSwFyASsBbgHqAWkBqgJp + AWUBaQFlAYkBZQGJAWUBiQFlAakBaQGpAWkByQFtAcoBbQGpAW0BiQFpAWgBaQFIAWUBSAFlAUcBZQFH + AWUBRwFlAUcBZQEnAWUBJwFlAScBZQEmAWUBJgFlASYBZQEmAWUBJgFlAQYBZQEGAWUBBgFlAQUBZQHl + AWQB5QFkAeQBZAHEAWQBwwFkAaIBZAGiAWQBoQFkAYEBZAGBAWQBgQFkAWEBYAFhAVgBQAFQAUABSAHN + AV0B9gFuAbwBewFLAVoBjAFmAe4BbgEvAXcBcAF/AXABfwFwAX8BbwF/AU8BfwFPAX8BTwF/AU8BfwFP + AX8BTwF/AU8BfwFOAX8BTgF/AU4BfwFOAX8BTgF/AU0BfwFNAX8BTQF/AU0BfwFNAX8BbQF/AW0BfwFs + AX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWsBfwFrAX8BawF/AWsBfwFrAX8BawF/AYsBfwGL + AX8BigF/AYoBfwGKAX8BiQF/AYkBfwGJAX8BhwF/AYYBfwGFAX8BgwF/AYIBfwGCAX8BgQF/AYABfwFA + AXcBAAFvAcABZgGAAVoBDQFnAXYBcwHcAXsBtQFSAfcBXgFaAWcBnAFzAd4BewHeAXsB3gF7Ad4BewHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Af8BdwH/ + AXcB/wF3AZsBdwEXAXMBswFyAS8BbgEvAW4BLwFuAS4BbgEOAW4BkgFyARcBcwF7AXcB/wF3Af8BdwH/ + AXcB3wF3Ad8BdwHfAXsB/wF7Af8BewH/AXsB/wF7Af8BewH/AXsB/wF3Af8BdwHeAXcB3gF3Ab0BdwHe + AXcB3gF3Ad4BdwHeAXcBnAFvAToBZwH4AV4BtQFWARkBYwF8AW8B3gF7ASkBJQFKASkBawEtAYwBMQGM + ATEBjAExAYwBMQGMATEBjAExAYwBMQGMATEBjAExAYwBMQHOATEBEAMyAXQBMgGUAToBtQFCAfUBRgEW + AU8BFgFPATYBUwE2AVcBVgFbAVYBWwFWAVcBVgFXAVYBVwFWAVcBVgFXAVYBWwFWAVsBVgFbAVYBWwFW + AV8BVgFfAVYBXwF2AV8BdgFfAXYBXwF2AV8BdgFfAXYBXwF2AV8BdgFfAXYBXwFVAV8BVQFfAVUBXwFU + AV8BUwFfAVMBXwFSAV8BUgFbATIBWwEyAVsB8AFSAa8BTgGOAUYBTAFCAfQBWgF5AWsB3QF3ASgCSQFR + AWoBWQGLAWEBqwFpAewBaQEtAW4BbQFyAa4BcgGuAXYBrQF2Aa0BdgHMAXYBbAFyASsBbgHKAWkBiQFl + AYkBZQGJAWUBiQFlAYkBZQGJAWkBqQFpAakBaQHJAW0BqQFpAYkBaQFoAWkBSAFlAUgBZQFIAWUBRwFl + AUcBZQFHAWUBRwFlAScBZQEnAWUBJgFlASYBZQEmAWUBJgFlASYBZQEGAWUBBgFlAQYBZQEFAWUBBQFl + AeUBZAHlAWQB5AFkAeQBZAHDAWQBwwFkAaIBZAGiAWQBoQFkAYEBZAGBAVwBYQFUAUABUAFAAUgBzQFd + AfYBbgG8AXsBSwFaAY0BZgHuAW4BLwF3AXEBfwFwAX8BcAF/AXABfwFQAX8BUAF/AVABfwFQAX8BUAF/ + AU8BfwFPAX8BTwF/AU4BfwFOAX8BTgF/AU4BfwFOAX8BTgF/AU4BfwFOAX8BTQF/AW0BfwFtAX8BbQF/ + AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFsAX8BawF/AWsBfwFrAX8BawF/AWsBfwFrAX8BiwF/ + AYsBfwGKAX8BigF/AYoBfwGKAX8BiQF/AYgBfwGIAX8BhwF/AYYBfwGEAX8BgwF/AYIBfwGBAX8BQAF3 + AQABbwHAAWYBgAFaAQ0BZwF2AXMB3AF7AbUBUgH3AV4BWgFnAZwBcwHeAXsB3gF7Ad4BewHeAXsB3gF3 + Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB/wF3 + Af8BdwF7AXcBFwFzAbMBcgEvAW4BLwFuAS8BbgEvAW4BLgFuAZMBcgEXAXMBewF3Af8BdwH/AXcB3wF3 + Ad8BdwHeAXcB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BdwHeAXcB3gF3Ad4BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3AXsBbwE5AWcB9wFaAZUBUgEYAWMBewFvAd4BewEpASUBSgEpAWsBLQGMATEBrQE1 + Aa0BNQGMATEBjAExAYwBMQGMATEBjAExAa0BMQGtATEB7wExATIBNgGVATYB1wE2AfgBOgEZAT8BGQFD + AToBRwE6AUcBWgFLAVoBSwFaAUsBWgFLAVoBSwFaAUsBWgFLAVoBSwFaAU8BWgFPAVoBTwFaAU8BWgFP + AXoBUwF6AVMBegFTAXoBUwF6AVMBegFTAXoBUwF6AVMBewFTAXsBVwF7AVcBewFXAXoBVwF6AVcBegFX + AXoBVwF5AVcBeQFXAVkBVwFZAVMBWAFPAVgBTwEWAUsB1AFCAZMBPgExATYB1gFSAVoBZwHdAXcBSAFJ + AWkBUQGKAVkBqwFhAcwBaQENAm4BcgGvAXYB8AF2AQ8BewEPAXsBLgF7AS4BewHNAXYBbAFyAQsBbgGK + AWUBiQFlAYkBZQGJAWUBiQFlAYkBaQGpAWkBqQFpAakBbQGpAWkBiAFpAWgBaQFoAWUBSAFlAUgBZQFI + AWUBSAFlAUcBZQFHAWUBRwFlAUcBZQEmAWUBJgFlASYBZQEmAWUBJgFlAQYBZQEGAWUBBgFlAQYBZQEF + AWUBBQFlAQUBZQHlAWQB5AFkAeQBZAHkAWQBwwFkAcMBZAGiAWQBgQFkAYEBXAFhAVQBQAFMAUABRAHN + AVkB9gFqAbwBewFMAVoBjQFmAe4BbgEwAXcBcQF/AXEBfwFwAX8BcAF/AVABfwFQAX8BUAF/AVABfwFQ + AX8BUAF/AU8BfwFPAX8BTwF/AU8BfwFPAX8BTwF/AU4BfwFOAX8BTgF/AU4BfwFOAX8BbQF/AW0BfwFt + AX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWsBfwFr + AX8BiwF/AYsBfwGKAX8BigF/AYoBfwGKAX8BigF/AYkBfwGJAX8BiAF/AYcBfwGFAX8BgwF/AYEBfwFB + AXcBAAFvAcABZgFgAVoBDQFnAXYBcwHcAXsBlAFSAfcBXgE5AWcBnAFzAd4BewHeAXsB3gF7Ad4BewHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHe + AXcB/wF3AXsBdwEXAXMBswFyAS8BbgEvAW4BLwFuAS8BbgEvAW4BkwFyARcBcwF7AXcB/wF3Ad8BdwHe + AXcB3gF3Ad4BdwHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF3Ad4BdwHeAXcB3gF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBewFrARgBYwHWAVoBlAFSARgBYwF7AW8B3gF7ASkBJQFKASkBawEtAYwBMQGt + ATUBrQE1AYwBMQGMATEBjAExAYwBMQGMATEBrQExAa0BMQERATIBdAE2AdgBNgI7AVwBOwFcATsBXQE/ + AV0BPwFdAT8BXQE/AV0BPwFdAT8BXgE/AV4BPwFeAT8BXgE/AV4BPwFeAUMBXgFDAV4BQwF+AUMBfgFH + AX4BRwF+AUcBfgFHAX4BRwF+AUcBfgFHAX8BRwF/AUsBfwFLAX8BSwF/AUsBfwFLAX8BSwF/AUsBfwFL + AX8BTwF/AU8BfwFPAX8BSwF/AUsBfwFHAV4BQwEcAT8B2gE2AXgBMgE1AS4B2QFOAVsBZwG+AXcBSAFJ + AWkBUQGKAVkBqwFhAcwBaQEtAW4BjwFyAfABdgFRAXsBcQF/AXABfwGPAX8BjwF/AS4BewGsAXIBKwFu + AaoBZQGqAWUBiQFlAYkBZQGJAWUBiQFpAYkBaQGpAWkBqQFpAYkBaQGIAWkBaAFpAWgBZQFoAWUBSAFl + AUgBZQFIAWUBSAFlAUcBZQFHAWUBRwFlAUYBZQEmAWUBJgFlASYBZQEmAWUBBgFlAQYBZQEGAWUBBgFl + AQYBZQEGAWUBBgFlAQUBZQEFAWUBBQFlAQUBZQHkAWQBwwFkAaIBZAGiAWQBgQFcAWEBVAFAAUwBQAFE + Ac0BWQH2AWoBvAF3AUwBWgGNAWYB7wFuATABdwFxAX8BcQF/AXEBfwFwAX8BUAF/AVABfwFQAX8BUAF/ + AVABfwFQAX8BUAF/AU8BfwFPAX8BTwF/AU8BfwFPAX8BTwF/AU8BfwFOAX8BTgF/AU4BfwFuAX8BbQF/ + AW0BfwFtAX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/ + AWsBfwFrAX8BawF/AYsBfwGLAX8BiwF/AYsBfwGLAX8BiwF/AYsBfwGLAX8BiQF/AYYBfwGEAX8BggF/ + AUEBdwEBAW8BoAFmAWABWgHtAWYBdgFzAdwBewGUAVIB9wFeATkBZwGcAXMB3gF7Ad4BewHeAXsB3gF7 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXcB3gF3 + Ad4BdwHeAXcBewF3ARcBcwGTAXIBLwFuAS8BbgEvAW4BLwFuAS8BbgGTAXIBFwFzAXsBdwHeAXcB3gF3 + Ad4BdwHeAXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3AZwBcwFaAWsBGAFjAbUBVgFzAU4B9wFeAXsBbwHeAXsBKQElAUoBKQFrAS0BjAEx + Aa0BNQGtATUBrQE1Aa0BMQGtATEBzgExAe8BMQHwATEBEQEyAXQBNgG2ATYB+QE6AVwBOwFcATsBXAE/ + AV0BPwFdAT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFeAT8BXgE/AV4BPwFeAT8BXgFDAV4BQwFeAUMBfgFD + AX4BRwF+AUcBfgFHAX4BRwF+AUcBfgFHAX4BRwF+AUcBfwFLAX8BSwF/AUsBfwFLAX8BSwF/AUsBfwFL + AX8BSwF/AU8BfwFPAX8BTwF/AU8BfwFLAX8BSwF+AUcBHAFDAdoBOgGXATIBNQEuAdgBTgFbAWcBvgF3 + AUgBSQFpAVEBigFZAasBYQHMAWkBDQJuAXIBrwFyAfABdgEPAXcBDwF7AS8BewFOAXsBzQF2AWwBcgEL + AW4BqgFlAaoBZQGqAWUBqQFpAakBaQGpAWkBqQFpAakBaQGpAWkBqQFpAYkBaQFoAWkBaAFlAWgBZQFI + AWUBSAFlAUgBZQFIAWUBRwFlAUcBZQFHAWUBRwFlASYBZQEmAWUBJgFlASYBZQEmAWUBBgFlAQYBZQEG + AWUBBgFlAQYBZQEGAWUBBgFlAQUBZQEFAWUBBQFlAeQBZAHkAWQBwwFoAaIBaAGCAWABYQFUAUABTAFA + AUQBzQFZAfYBagG8AXcBTAFaAY0BZgHvAW4BMAF3AXEBfwFxAX8BcQF/AXEBfwFQAX8BUAF/AVABfwFQ + AX8BUAF/AVABfwFQAX8BTwF/AU8BfwFPAX8BTwF/AW8BfwFvAX8BbwF/AW8BfwFuAX8BbgF/AW4BfwFu + AX8BbgF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFsAX8BbAF/AWwBfwFsAX8BbAF/AWwBfwFs + AX8BbAF/AWsBfwFrAX8BiwF/AYsBfwGLAX8BiwF/AYsBfwGLAX8BiwF/AYsBfwGpAX8BpwF/AaUBfwGk + AX8BQwF3AQIBbwHBAWYBYAFaAe0BZgF2AXMB3AF7AZQBUgH3AV4BOQFnAZwBcwHeAXsB3gF7Ad4BewHe + AXsBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BdwHe + AXcB3gF3Ad4BdwF7AXcBFwFzAbMBcgEvAW4BLwFuAS8BbgEvAW4BLwFuAZMBcgEXAXMBewF3Ad4BdwHe + AXcB3gF3Ad4BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3AVoBawEYAWMB1gFaAXMBTgH3AV4BewFvAd4BewEpASUBSgEpAWsBLQGM + ATEBrQE1Aa0BNQGuATUBrgE1Aa4BMQHwATUBMQE2AVMBNgGVATYBtwE2AfgBOgEaATsBXAE7AVwBPwFc + AT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFdAT8BXQFDAV4BQwFeAUMBXgFDAV4BQwFe + AUMBfgFHAX4BRwF+AUcBfgFHAX4BRwF+AUcBfgFHAX4BRwF+AUsBfgFLAX4BSwF+AUsBfgFLAX4BSwF+ + AUsBfgFLAX4BTwF+AU8BfgFPAX4BTwF+AU8BfgFLAX4BSwEcAUMB2QE6AZcBMgE0ASoB2AFOAVsBZwG+ + AXcBSAFJAWkBUQGKAVkBqwFhAcwBaQENAW4BLQJuAXIBjwFyAa4BcgHOAXYBzgF2Ae4BdgGNAXIBTAFu + AesBaQGKAWUBqgFlAaoBaQHKAWkBygFpAcoBaQHKAWkByQFpAakBaQGpAWkBiQNpAWgBZQFoAWUBaAFl + AUgBZQFIAWUBSAFlAUgBZQFHAWUBRwFlAUcBZQFHAWUBJgFlASYBZQEmAWUBJgFlASYBZQEGAWUBBgFl + AQYBZQEGAWUBBgFlAQYBZQEFAWUBBQFlAQUBZQHlAWQB5AFoAcQBaAHDAWgBogFgAYEBVAFgAUwBQAFE + Ac0BWQH2AWoBvAF3AUwBWgGNAWYB7wFuATABdwFyAX8BcQF/AXEBfwFxAX8BUQF/AVEBfwFRAX8BUQF/ + AVEBfwFQAX8BUAF/AVABfwFQAX8BUAF/AXABfwFwAX8BcAF/AW8BfwFvAX8BbwF/AW4BfwFuAX8BbgF/ + AW4BfwFuAX8BbgF/AW4BfwFuAX8BbQF/AW0BfwFtAX8BbQF/AWwBfwFsAX8BbAF/AWwBfwFsAX8BbAF/ + AWwBfwFsAX8BawF/AYsBfwGLAX8BiwF/AYsBfwGLAX8BiwF/AYsBfwGLAX8BqgF/AagBfwGnAX8BpgF/ + AUQBdwEDAW8BwQFmAWABWgHtAWYBdgFzAdwBewGUAVIB9wFeATkBZwGcAXMB3gF7Ad4BewHeAXsB3gF7 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXcB3gF3 + Ad4BdwHeAXcBewF3ARcBcwGzAXIBUAFuAS8BbgEvAW4BLwFuAS8BbgGTAXIBFwFzAXsBdwHeAXcB3gF3 + Ad4BdwHeAXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwF7AW8BGAFjAdYBWgFzAU4B9wFeAXsBbwHeAXsBKQElAUoBKQFrAS0BjAEx + Aa0BNQGtATUBzgE1Ac8BNQHPATUBEQE2AXQBNgG2ATYB+QE2ARkBOwE6AzsBXAE/AVwBPwFcAT8BXQE/ + AV0BPwFdAT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFdAUMBXQFDAV0BQwFdAUMBXgFDAV4BQwFeAUMBXgFH + AX4BRwF+AUcBfgFHAX4BRwF+AUcBfgFHAX4BRwF+AUsBfgFLAX4BSwF+AUsBfgFLAX4BSwF+AUsBfgFL + AX4BTwF+AU8BfgFPAX4BTwF+AU8BfgFPAX4BTwE8AUcB2QE+AZYBMgE0ASoB2AFOAVsBZwG+AXcCSQFp + AVEBigFZAcsBYQHsAWkB7AFpAQ0BagENAW4BLQFuAU0BbgFtAW4BbQFyAY0BcgFNAXIBDAFuAcsBaQGK + AWUBqgFpAcoBaQHKAWkB6gFpAeoBaQHKAWkBygFpAcoBaQGpAWkBiQFpAYkCaQFlAWgBZQFoAWUBaAFl + AWgBZQFIAWUBSAFlAUgBZQFIAWUBRwFlAUcBZQFHAWUBRgFlASYBZQEmAWUBJgFlASYBZQEmAWUBJgFl + ASYBZQEmAWUBBgFlAQYBZQEGAWUBBQFlAeUBaAHlAWgB5AFoAcQBaAGjAWABggFYAWEBTAFAAUQBzQFZ + AfYBagG8AXcBTAFaAY0BZgHvAW4BMAF3AXIBfwFyAX8BcQF/AXEBfwFRAX8BUQF/AVEBfwFRAX8BUQF/ + AVEBfwFQAX8BUAF/AVABfwFwAX8BcAF/AXABfwFwAX8BcAF/AW8BfwFvAX8BbwF/AW8BfwFvAX8BbwF/ + AW4BfwFuAX8BbgF/AW4BfwFuAX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFsAX8BbAF/ + AWwBfwFsAX8BjAF/AYwBfwGMAX8BjAF/AYsBfwGLAX8BiwF/AYsBfwGqAX8BqQF/AakBfwGoAX8BZgF3 + AQQBbwHCAWYBYAFaAe0BZgF2AXMB3AF7AZQBUgH3AV4BOQFnAZwBcwHeAXsB3gF7Ad4BewHeAXsBvQF3 + Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BdwHeAXcB3gF3 + Ad4BdwF7AXcBFwFzAbMBcgFQAW4BUAFuAS8BbgEvAW4BLwFuAZMBcgEXAXMBewF3Ad4BdwHeAXcB3gF3 + Ad4BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcB3gF7 + Ad4BewHeAXsB3gJ7AW8BOQFnAdYBWgFzAU4B9wFeAXsBbwHeAXsBKQElAUoBKQFrAS0BjAExAa0BNQGu + ATUBzwE1Ac8BNQHwATUBUwE2AbYBNgH5AToBXAE7AVwBOwFcATsBXAE/AVwBPwFcAT8BXAE/AVwBPwFc + AT8BXAE/AVwBPwFcAT8BXAE/AVwBPwFcAUMBXAFDAVwBQwFdAUMBXQFDAV0BQwFdAUMBXQFDAV0BRwFd + AUcBXQFHAV0BRwFdAUcBXQFHAV0BRwF9AUcBfQFLAX0BSwF9AUsBfQFLAX0BSwF9AUsBfQFLAX0BSwF9 + AU8BfQFPAX0BTwF+AU8BfgFTAX4BUwF+AVMBPAFLAdkBPgGWATIBMwEqAdcBSgFbAWcBvgF3AkkBagFR + AYoBWQHLAWEB7AFpAewBaQHMAWkBzAFpAcwBZQHsAWkBDAFqAQ0BbgEtAW4BDAFuAesBaQGrAWkBigFl + AaoBaQHKAWkB6wFpAQsBagELAWoB6gFpAcoBaQHKAWkBqgFpAYkBaQGJAmkBZQFpAWUBaAFlAWgBZQFo + AWUBaAFlAUgBZQFIAWUBSAFlAUgBZQFHAWUBRwFlAUcBZQFGAWUBJgFlASYBZQEmAWUBJgFlASYBZQEm + AWUBJgFlASYBZQEGAWUBBgFlAQYBZQEFAWkB5QFoAeUBaAHlAWgBowFgAYIBWAFhAUwBQAFEAc0BWQH2 + AWoBvAF3AUwBWgGNAWYB7wFuATEBdwFyAX8BcgF/AXIBfwFxAX8BUQF/AVEBfwFRAX8BUQF/AVEBfwFR + AX8BUQF/AVABfwFQAX8BcAF/AXABfwFwAX8BcAF/AXABfwFwAX8BbwF/AW8BfwFvAX8BbwF/AW8BfwFv + AX8BbwF/AW4BfwFuAX8BbgF/AW4BfwFtAX8BbQF/AW0BfwFtAX8BbQF/AW0BfwFtAX8BbQF/AWwBfwFs + AX8BbAF/AYwBfwGMAX8BjAF/AYwBfwGMAX8BiwF/AYsBfwGLAX8BqwF/AaoBfwGqAX8BqgF/AWcBdwEF + AW8BwgFmAWABWgHtAWYBdgFzAdwBewGUAVIB9wFeATkBZwGcAXMB3gF7Ad4BewHeAXsB3gF7Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwHeAXcB3gF3Ad4BdwHe + AXcBewF3ARcBcwG0AXIBUAFuAVABbgFQAW4BLwFuAS8BbgGTAXIBFwFzAXsBdwHeAXcB3gF3Ad4BdwHe + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ad4BewHe + AXsB3gF7Ad4BewGcAXMBOQFnAdYBWgFzAU4B9wFeAXsBbwHeAXsBKQElAUoBKQGMAS0BrQExAc4BNQHw + ATUBEQE2ATIBNgFTATYBlgE2AdgBOgEaATsBXQE7AV0BOwFdATsBXQE/AV0BPwFdAT8BXQE/AV0BPwFd + AT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFdAUMBfQFDAX0BQwF9AUMBfQFDAX0BQwF9AUMBfQFDAX0BRwF9 + AUcBfQFHAX0BRwF9AUcBfQFHAX0BRwF+AUcBfgFLAX4BSwF+AUsBfgFLAX4BSwF+AUsBfgFLAX4BSwF+ + AU8BfgFPAX4BTwF+AU8BfgFTAZ4BUwGfAVMBPAFLAdkBPgGWATYBMwEqAdgBTgFbAWcB3gF3AkkBagFR + AasBWQHLAWEB7AFpAewBaQHsAWkBzAFpAcwBaQHsAWkB7AFpAQ0BbgENAW4B7AFtAcsBaQGrAWkBigFp + AaoBaQHKAWkB6wFpAQsBagHrAWkB6gFpAcoBaQGqAWkBqgFpAYkBaQGJBWkBaAFpAWgBaQFoAWkBaAFp + AUgBaQFIAWkBSAFpAUgBaQFHAWkBRwFpAUcBaQFHAWkBJgFpASYBaQEmAWkBJgFpASYBaQEmAWkBJgFp + ASYBaQEGAWkBBgFpAQYBaQEGAWkBBQFpAeUBaAHlAWgBxAFgAYIBWAFhAUwBQAFEAc0BWQH2AWoBvAF3 + AUwBWgGOAWYB7wFuATEBdwFyAX8BcgF/AXIBfwFyAX8BcQF/AXEBfwFxAX8BcQF/AXEBfwFxAX8BcQF/ + AXEBfwFxAX8BcQF/AXABfwFwAX8BcAF/AXABfwFwAX8BbwF/AW8BfwFvAX8BbwF/AW8BfwFvAX8BbwF/ + AW8BfwFuAX8BbgF/AW4BfwFuAX8BjgF/AY0BfwGNAX8BjQF/AY0BfwGNAX8BjQF/AY0BfwGNAX8BjAF/ + AYwBfwGMAX8BjAF/AYwBfwGMAX8BjAF/AYwBfwGLAX8BqwF/AasBfwGrAX8BqwF/AWgBdwEFAW8BwwFm + AWABWgHtAWYBdgFzAdwBewGUAVIB9wFeATkBZwGcAXMB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAnsBdwEX + AXcBtAFyAVABcgFQAXIBUAFyAU8BcgEvAXIBswFyARcBdwF7AXcB3wF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsBnAFzATkBZwHWAVoBcwFOARgBYwF7AW8B3gF7ASkBJQFrASkBjAEtAc4BMQEQATYBMgE2AVMBNgGV + ATYBtwE2AdgBOgEaAzsBXQE7AV0BOwFdATsBXQE/AV0BPwFdAT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFd + AT8BXQE/AV0BPwF9AUMBfQFDAX0BQwF9AUMBfQFDAX0BQwF9AUMBfQFDAX0BRwF9AUcBfQFHAX0BRwF9 + AUcBfQFHAX0BRwF+AUcBfgFLAX4BSwF+AUsBfgFLAX4BSwF+AUsBfgFLAX4BSwF+AU8BfgFPAX4BTwF+ + AU8BngFTAZ8BUwGfAVMBPAFLAfkBPgGXATYBVAEqAfgBTgF7AWcB3gF3AkkBagFRAasBWQHMAWEB7AFp + AewBaQHsAWkB7AFpAcwBaQHsAWkB7AFpAewBbQEMAW4B7AFtAcsBaQHLAWkBqgFpAcoBaQHLAWkB6wFp + AQsBagHrAWkBygFpAcoBaQGqAWkBqgFpAYkBaQGJB2kBaAFpAWgBaQFoAWkBaAFpAUgBaQFIAWkBSAFp + AUgBaQFHAWkBRwFpAUcBaQFHAWkBJgFpASYBaQEmAWkBJgFpASYBaQEmAWkBJgFpASYBaQEGAWkBBgFp + AQYBaQEFAWkBBQFpAeUBaAHEAWABowFYAWEBTAFAAUQBzQFZAfYBagG8AXcBTAFaAY4BZgHwAW4BMQF3 + AXMBfwFyAX8BcgF/AXIBfwFyAX8BcgF/AXIBfwFyAX8BcgF/AXEBfwFxAX8BcQF/AXEBfwFxAX8BcQF/ + AXEBfwFxAX8BcAF/AXABfwFwAX8BcAF/AXABfwFwAX8BcAF/AXABfwFvAX8BbwF/AW8BfwFuAX8BbgF/ + AY4BfwGOAX8BjgF/AY4BfwGOAX8BjgF/AY0BfwGNAX8BjQF/AY0BfwGNAX8BjQF/AY0BfwGNAX8BjAF/ + AYwBfwGMAX8BjAF/AYwBfwGsAX8BrAF/AawBfwGrAX8BaQF3AQYBbwHDAWYBYAFaAe0BZgF2AXMB3AF7 + AbUBVgH3AV4BWgFrAZwBcwHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4CewF3ATgBdwHUAXIBcQFyAVABcgFQ + AXIBUAFyAVABcgGzAXIBFwF3AXsBdwHfAXsB3wF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewGcAXMBOQFnAdYBWgGU + AVIBGAFjAXsBbwHeAXsBKQElAWsBKQGtAS0B7wE1ATIBOgF0AToBtgE6AdgBOgEaAzsBPAE7AVwBOwFd + ATsBXQE7AV0BOwFdAT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFdAT8BfQE/AX0BQwF9 + AUMBfQFDAX0BQwF9AUMBfQFDAX0BQwF9AUMBfQFHAX0BRwF9AUcBfQFHAX0BRwF9AUcBfQFHAX4BRwF+ + AUsBfgFLAX4BSwF+AUsBfgFLAX4BSwF+AUsBfgFLAX4BTwF+AU8BfgFPAZ4BTwGfAVMBnwFTAZ8BUwFc + AUsB+gE+AZcBNgFUAS4B+AFOAXsBZwHeAXcBaQFJAYoBUQGrAVkBzAFhAe0BaQHtAWkB7AFpAewBaQHs + AWkB7AFpAewBaQHsAWkB7AFtAcwBaQHLAWkBywFpAasBaQHLAWkBywFpAesBaQHrAWkB6wFpAcoBaQGq + AWkBigFpAYoBaQGJAWkBiQFpAYkJaQFoAWkBaAFpAWgBaQFoAWkBSAFpAUgBaQFIAWkBSAFpAUcBaQFH + AWkBRwFpAUYBaQEmAWkBJgFpASYBaQEmAWkBJgFpASYBaQEmAWkBJgFpAQYBaQEGAWkBBgFpAQUBaQHE + AWABowFYAYIBTAFAAUQBzQFZAfYBagG8AXcBTQFaAY4BZgHwAW4BMQF3AXMBfwFzAX8BcgF/AXIBfwFy + AX8BcgF/AXIBfwFyAX8BcgF/AXIBfwFyAX8BcgF/AXIBfwFxAX8BcQF/AXEBfwFxAX8BcQF/AXABfwFw + AX8BcAF/AXABfwFwAX8BcAF/AXABfwFwAX8BbwF/AW8BfwFvAX8BjwF/AY8BfwGPAX8BjgF/AY4BfwGO + AX8BjgF/AY4BfwGOAX8BjgF/AY4BfwGNAX8BjQF/AY0BfwGNAX8BjQF/AY0BfwGNAX8BjAF/AYwBfwGs + AX8BrAF/AawBfwGsAX8BaQF3AQYBbwHDAWYBYAFaAe0BZgF2AXMB3AF7AbUBVgH3AV4BWgFrAZwBcwHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewGbAXsBOAF3AdQBdgFxAXIBcQFyAVABcgFQAXIBUAFyAbQBdgEY + AXcCewHfAXsB3wF7Ad8BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7 + Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewGcAXMBOQFnAfcBXgGUAVIBGAFjAXsBbwHeAXsBKQEl + AWsBKQGuAS0BEQE2AVMBOgGWAToB+AE6AjsBfQE7AX0BOwF9ATsBfQE7AV0BOwFdATsBXQE7AV0BPwFd + AT8BXQE/AV0BPwFdAT8BXQE/AV0BPwFdAT8BXQE/AV0BPwF9AT8BfQFDAX0BQwF9AUMBfQFDAX0BQwF9 + AUMBfQFDAX0BQwF9AUcBfQFHAX0BRwF9AUcBfQFHAX0BRwF9AUcBfgFHAX4BSwF+AUsBfgFLAX4BSwF+ + AUsBfgFLAX4BSwF+AUsBfgFPAX4BTwF+AU8BnwFPAZ8BUwGfAVMBnwFTAV0BSwH6AUIBtwE2AVQBLgH4 + AU4BewFnAd4BdwFpAUkBigFRAasBWQHMAWEB7QFpAe0BaQHsAWkB7AFpAewBaQHsAWkBzAFpAcwBaQHM + AWkBzAFpAcsBaQHLAWkBywFpAcsBaQHLAWkB6wFpAesBaQHLAWkBqgFpAaoBaQGKAWkBigFpAYkBaQGJ + AWkBiQFpAYkJaQFoAWkBaAFpAWgBaQFoAWkBSAFpAUgBaQFIAWkBSAFpAUcBaQFHAWkBRwFpAUcBaQEn + AWkBJwFpAScBaQEmAWkBJgFpASYBaQEmAWkBJgFpAQYBaQEGAWkBBgFpAeQBYAGjAVgBggFMAWEBRAHN + AVkB9gFqAbwBdwFNAVoBjgFmAfABbgEyAXcBcwF/AXMBfwFzAX8BcgF/AXIBfwFyAX8BcgF/AXIBfwFy + AX8BcgF/AXIBfwFyAX8BcgF/AXIBfwFyAX8BcQF/AXEBfwFxAX8BcQF/AXABfwFwAX8BcAF/AXABfwFw + AX8BcAF/AXABfwFwAX8BbwF/AW8BfwGPAX8BjwF/AY8BfwGPAX8BjwF/AY4BfwGOAX8BjgF/AY4BfwGO + AX8BjgF/AY4BfwGOAX8BjQF/AY0BfwGNAX8BjQF/AY0BfwGNAX8BjQF/Aa0BfwGtAX8BrQF/Aa0BfwFq + AXcBBwFvAcQBZgFhAVoB7QFmAXYBcwHcAXsBtQFWARgBYwFaAWsBnAFzAd4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7AZsBewE4AXcB1AF2AXEBcgFxAXIBcQFyAVABcgFQAXIBtAF2ARgBdwF8AXsB3wF7Ad8BewHf + AXsB3wF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsBnAFzATkBZwH3AV4BlAFSARgBYwF7AW8B3gF7AUoBKQGMASkBzwEtAREBMgFT + ATYBlQE2AbcBNgH5ATYBOwE3ATsBNwEbATcBGwE3ARsBNwEbATcBGwE3ARsBNwEbATsBGwE7ARsBOwEb + ATsBGwE7ARsBOwEbATsBGwE7ARsBOwEbBjsBPwE7AT8BOwE/ATsBPwE7AT8BOwE/ATsBPwE7AT8BOwFD + ATsBQwE7AUMBOwFDATsBQwE7AUMBPAFDATwBQwE8AUcBPAFHATwBRwE8AUcBPAFHATwBRwE8AUcBPAFH + ATwBRwE8AUsBPAFLAVwBSwFdAUsBGwFHAdgBPgGWAToBVAEyAfgBTgF7AWcB3gF3AWoBSQGKAVEBqwFV + AasBXQHMAWEBzAFhAcsBYQHLAWEBywFhAasBYQGrAWEBqwFhAasBYQGrAWEBqwFhAaoBYQGqAWEBqgFh + AaoBYQGqAWEBqgFhAaoBYQGJAWEBiQFhAWkBYQFpAWEBaQFhAWgBYQFoAWEBaAFhAWgBYQFIAWEBSAFh + AUgBYQFIAWEBRwFhAUcBYQFHAWEBJwFhAScBYQEnAWEBJwFhAScBYQEmAWEBJgFhASYBYQEmAWEBBgFh + AQYBYQEGAWEBBgFhAQUBYQEFAWEBBQFhAQUBYQHlAWAB5QFgAeUBWAHEAVQBowFMAYIBRAHuAVkB9wFq + Ab0BewFNAVoBjgFiAdABagHxAW4BMgF3ATEBdwExAXcBMQF3ATEBdwExAXcBMQF3ATEBdwExAXcBMQF3 + ATEBdwExAXcBMQF3ATABdwEwAXcBMAF3ATABdwEwAXcBLwF3AS8BdwEvAXcBLwF3AS8BdwEvAXcBLwF3 + AS8BdwEuAXcBLgF3AS4BdwEuAXcBLgF3AU4BdwFOAXcBTgF3AU0BdwFNAXcBTQF3AU0BdwFNAXcBTQF3 + AU0BdwFNAXcBTAF3AUwBdwFMAXcBTAF3AUwBdwFMAXcBTAF3AUwBdwFMAXcBbAF3AWwBdwEqAW8B6AFq + AaYBYgFjAVoB7wFmAXcBcwHdAXsBtQFWAfcBXgEYAWMBWgFrAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + ATkBbwH2AW4BkwFuAVABagEwAWoBLwFqAS8BagEvAWoBcgFqAdYBbgE5AW8BnQFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFzAZwBcwGcAXMBnAFz + AZwBcwGcAXMBWgFrARgBYwHWAVoBlAFSARgBYwF7AW8B3gF7AWsBKQGuAS0B8AEtARIBLgFUAS4BdQEu + AZYBLgG3AS4B2AEuAdgBLgHYAS4B2AEuAdgBLgHYATIB2AEyAdgBMgHYATIB2AEyAdgBMgHYATIB2AEy + AdgBMgHYATIB2AEyAdgBMgHYATYB2AE2AfgBNgH4ATYB+AE2AfgBNgH4ATYB+AE2AfgBOgH4AToB+AE6 + AfgBOgH4AToB+QE6AfkBOgH5AToB+QE6AfkBPgH5AT4B+QE+AfkBPgH5AT4B+QE+AfkBPgH5AT4B+QE+ + AfkBPgH5AUIB+QFCAfoBQgH6AUIB+gFGAdgBQgG3AT4BlgE6AXQBNgH4AVIBewFnAd4BdwGKAUkBiwFN + AYsBUQGrAVUBqwFZAasBWQGqAVkBqgFZAYoBWQGKAVkBigFZAYoBWQGKAVkBigFZAYoBWQGJAVkBaQFZ + AYkBWQGJAVkBiQFZAYkBWQGJAVkBaQFZAWgBWQFIAVkBSAFZAUgBWQFIAVkBSAFZAUgBWQFIAVkBJwFZ + AScBWQEnAVkBJwFZAScBWQEnAVkBJwFZAScBWQEGAVkBBgFZAQYBWQEGAVkBBgFZAQYBWQEGAVkBBgFZ + AQYBWQHmAVgB5QFYAeUBWAHlAVgB5QFYAeUBWAHlAVgB5QFYAeUBWAHlAVQB5QFQAcQBTAHEAUgBDwFe + ARcBbwG9AXsBbgFaAY4BXgGvAWIB0AFqAfABbgHwAW4B8AFuAfABagHwAWoB7wFqAe8BagHvAWoB7wFq + Ae8BagHvAWoB7wFqAe8BagHvAWoB7wFqAe8BagHvAWoB7gFqAe4BagHuAWoB7gFqAe4BagHuAWoB7gFq + Ae0BagHtAWoB7QFqAe0BagHtAWoB7QFqAe0BagHtAWoB7QFqAe0BagEMAWsBDAFrAQwBawEMAWsBDAFr + AQwBawEMAWsBDAFrAQsBawELAWsBCwFrAQsBawELAWsBCwFrAQsBawELAWsBCwFvAQsBbwELAW8B6gFq + AckBYgGHAV4BZgFaAfABZgF4AXMB3QF7AbUBVgHWAVoB9wFeARgBYwE5AWcBOQFnATkBZwE5AWcBOQFn + ATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFn + ATkBZwH3AWYBtAFmAVEBYgEPAWIBDgFiAQ4BYgHuAV0B7QFdAVEBYgGUAWIB9wFmAToBZwE6AWcBOgFn + ATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFnATkBZwE5AWcBOQFn + ATkBZwE5AWcBOQFnARgBYwH3AV4B1gFaAZQBUgEYAWMBewFvAd4BewGtAS0BzwEtAfABLQEyASoBVAEq + AVQBKgF1ASoBdQEqAZYBKgGWASoBlgEqAXYBKgF2ASoBdgEqAXYBLgF2AS4BdgEuAZYBLgGWAS4BlgEu + AZYBLgGWAS4BlgEuAZYBLgGWAS4BlgEuAZYBLgGWAS4BlgEuAZYBMgGWATIBlgEyAZYBMgGWATIBlgEy + AZYBMgGWATIBlgEyAZYBMgGWATIBlwEyAZcBNgGXATYBlwE2AZcBNgGXATYBlwE2AZcBNgGXATYBlwE6 + AZcBOgGXAToBlwE6AZcBOgG3AToBtwE+AbcBPgGWAT4BlgE6AXUBOgF0AToB+AFSAXsBawHeAXcBiwFJ + AYsBSQGLAU0BigFNAYoBTQGKAU0BaQFNAWkBTQFpAU0BaQFNAWkBTQFpAU0BaQFNAWkBTQFJAU0BSQFN + AUkBTQFIAU0BSAFNAUgBTQFIAU0BSAFNAUgBTQFIAU0BRwFNAScBTQEnAU0BJwFNAScBTQEnAU0BJwFN + AScBTQEmAU0BBgFNAQYBTQEGAU0BBgFNAQYBTQEGAU0BBgFNAeUBTAHlAUwB5QFMAeUBTAHlAUwB5QFM + AeUBTAHlAUwBxQFMAcUBTAHFAUwBxAFMAcQBTAHEAUwBxAFMAcQBTAHEAUwB5QFMAeUBTAEGAUkBBgFJ + ATABXgEYAW8BvQF7AW4BVgFuAVoBjgFeAY4BYgGOAWYBjgFiAY4BYgGOAWIBjgFiAY4BYgGOAWIBjgFi + AY0BYgGNAWIBjQFiAY0BYgGNAWIBjQFiAY0BYgGNAWIBjQFiAY0BYgGNAWIBjQFiAY0BYgGNAWIBjQFi + AYwBYgGMAWIBjAFiAYwBYgGMAWIBjAFiAYwBYgGsAWIBrAFiAawBYgGsAWIBqwFiAasBYgGrAWIBqwFi + AasBYgGrAWIBqwFiAasBYgGqAWIBqgFiAaoBYgGqAWIBqgFiAaoBYgGqAWIBqgFiAcoBYgHKAWIBygFm + AaoBYgGKAV4BiQFaAWkBVgHyAWYBeAFzAd0BewGUAVIBtQFWAdYBWgHWAVoB9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4BtAFaAXIBWgEwAVoBzQFVAc0BVQHNAVUBzAFVAawBVQEPAVYBUgFaAZQBWgH3AV4B9wFe + AfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFeAfcBXgH3AV4B9wFe + AfcBXgH3AV4B9wFeAfcBXgHWAVoBtQFWAbUBVgGUAVIBGAFjAXsBbwHeAXsBzgExAfABLQERASoBMwEq + AVQBJgFUASYBVAEmATMBJgEzASYBMwEmATMBJgEzASYBMwEmATMBJgEzASYBMwEqATMBKgEzASoBUwEq + AVMBKgFTASoBUwEqAVMBKgFTASoBUwEqAVMBKgFTASoBUwEqAVMBKgFTASoBUwEqAVMBLgFTAS4BUwEu + AVMBLgFTAS4BUwEuAVMBLgFUAS4BVAEuAVQBLgFUAS4BVAEuAVQBMgFUATIBVAEyAVQBMgFUATIBVAEy + AVQBMgFUATIBVAEyAVQBMgFUATIBVAEyAVQBNgFUATYBVAE2AXQBOgF0AToBdAE+AfgBVgF7AWsB3gF3 + AawBSQGLAUkBigFJAWoBRQFpAUUBaQFFAUgBRQFIAUUBSAFFAUgBRQFIAUUBSAFFAUgBRQFIAUUBKAFF + ASgBRQEoAUUBKAFFAScBRQEnAUUBJwFFAScBRQEnAUUBJwFFAScBRQEnAUUBBwFFAQcBRQEHAUUBBgFF + AQYBRQEGAUUBBgFFAQYBRQHmAUQB5gFEAeYBRAHlAUQB5QFEAeUBRAHlAUQB5QFEAeUBRAHlAUQB5QFE + AcUBRAHFAUQBxQFEAcUBRAHEAUQBxAFEAcQBRAHEAUQBxAFEAcQBRAHEAUQBxAFEAeUBRAEGAUkBJwFJ + AUgBSQFRAV4BOAFvAb0BewFvAVYBbgFWAW4BWgFNAVoBTQFaAU0BWgFNAVoBTQFWAU0BVgFNAVYBTAFW + AUwBVgFMAVYBTAFWAUwBVgFMAVYBTAFWAUwBVgFMAVYBTAFWAUwBVgFMAVYBTAFWAUwBVgFMAVYBTAFW + AUsBVgFLAVYBSwFWAUsBVgFLAVYBSwFWAUsBVgFLAVYBSwFWAUsBVgFLAVYBSwFWAWoBVgFqAVYBagFW + AWoBVgFqAVYBagFWAWoBVgFqAVYBaQFWAWkBVgFpAVYBaQFWAWkBVgFpAVYBaQFWAWkBVgFpAVoBaQFa + AWkBWgFqAVoBagFaAWsBVgFsAVYB8wFmAXkBbwHdAXsBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFS + AZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFS + AZQBUgGUAVIBlANSATABUgHuAU0BrAFNAawBTQGLAU0BiwFJAYsBSQHNAU0BEAFOAlIBlAFSAZQBUgGU + AVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGU + AVIBlAFSAZQBUgGUAVIBlAFSAZQBUgGUAVIBlAFSARgBYwF7AW8B3gF7AZQBTgG2AU4B1gFOAdcBSgH4 + AUoB+AFKAfgBSgHYAUoB1wFKAdcBSgHXAUoB1wFKAdcBSgHXAUoB1wFKAdcBSgHXAUoB1wFKAfcBSgH3 + AUoB9wFKAfcBSgH3AUoB9wFKAfcBSgH3AUoB9wFKAfcBSgH3AUoB9wFKAfcBTgH3AU4B9wFOAfcBTgH3 + AU4B9wFOAfcBTgH4AU4B+AFOAfgBTgH4AU4B+AFOAfgBTgH4AU4B+AFOAfgBTgH4AU4B+AFOAfgBTgH4 + AU4B+AFOAfgBTgH4AU4B+AFSAfgBUgH4AVIB+AFSAfgBUgH4AVIB+AFWAfgBVgFbAWcBnQFzAd4BewGT + AV4BkwFeAXMBXgFyAVoBcgFaAXIBWgFxAVoBUQFaAVEBWgFRAVoBUQFaAVEBWgFRAVoBUQFaAVEBWgFR + AVoBUQFaAVEBWgFRAVoBUQFaAVEBWgFRAVoBUQFaAVEBWgFRAVoBUQFaATEBWgExAVoBMQFaATABWgEw + AVoBMAFaATABWgEwAVoBMAFaATABWgEwAVoBMAFaATABWgEvAVoBLwFaAS8BWgEvAVoBLwFaAS8BWgEP + AVoBDwFaAQ8BWgEPAVoBDwFaAQ8BWgEPAVoBDwFaAQ8BWgEPAVoBDwFaAQ8BWgEvAVoBMAFeAVEBXgFR + AV4B9wFqAXsBcwHeAXsB9QFmAfUBZgH0AWYB9AFmAfQBZgH0AWYB9AFmAfQBZgH0AWYB9AFmAfQBZgH0 + AWYB8wFmAfMBZgHzAWYB8wFmAfMBZgHzAWYB8wFmAfMBZgHzAWYB8wFmAfMBZgHzAWYB8wFmAfMBZgHz + AWYB8wFmAfMBZgHzAWYB8wFmAfMBZgHzAWYB8wFmAfMBZgHzAWYB8wFmAfMBZgHzAWYB8gFmAfIBZgHy + AWYB8gFmAfIBZgHyAWYB8gFmAfIBZgHyAWYB8gFmAfIBZgHyAWYB8gFmAfIBZgHyAWYB8gFmAfIBZgHy + AWYB8gFmAfMBZgHzAWYB8wFmAVgBbwGbAXcB3gF7ARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEY + AWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEY + AWMBGAFjARgBYwH3AWIB1gFiAbUBYgGTAV4BkwFeAZMBXgGTAV4BcwFeAbQBXgHWAWIB9wFiARgBYwEY + AWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwEY + AWMBGAFjARgBYwEYAWMBGAFjARgBYwEYAWMBGAFjARgBYwF7AW8BvQF3Ad4BewFaAWcBWgFnAVoBZwFb + AWcBewFjAXsBYwF7AWMBWwFjAVsBYwFbAWMBWwFjAVsBYwFbAWMBWwFjAVsBYwFbAWcBWwFnAVsBZwF7 + AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7 + AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7 + AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWcBewFnAXsBZwF7AWsBewFrAXsBawF7AWsBnQFzAd4BdwH/ + AX8BOQFvATkBbwE5AW8BOQFrATgBawE4AWsBOAFrATgBawE4AWsBOAFrATgBawE4AWsBOAFrATgBawEY + AWsBGAFrARgBawEYAWsBGAFrARgBawEYAWsBGAFrARgBawEYAWsBGAFrARgBawEYAWsBGAFrARgBawEY + AWsBGAFrARgBawEYAWsBGAFrARgBawEYAWsBGAFrARgBawEXAWsBFwFrARcBawEXAWsBFwFrARcBawEX + AWsBFwFrARcBawEXAWsBFwFrARcBawEXAWsBFwFrARcBawEXAWsBFwFrARcBawEXAWsBFwFrARgBbwEY + AW8BOAFvAXsBcwG9AXsB/gF/AXoBbwF6AXMBegFzAXoBcwF5AXMBeQFzAXkBcwF5AXMBeQFvAXkBbwF5 + AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5 + AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF5 + AW8BeQFvAXkBbwF5AW8BeQFvAXkBbwF4AW8BeAFvAXgBbwF4AW8BeAFvAXgBbwF4AW8BeAFzAXgBcwF4 + AXMBeAFzAXkBcwF5AXMBeQFzAXkBbwGbAXcB3QF7Af8BfwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAVoBbwFaAW8BOQFvATkBbwE5AW8BOQFvATkBbwFZAW8BWgFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7 + AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BewFvAXsBbwF7AW8BvQF3Ad4BewH/AX8BvQF3Ab0BdwG9 + AXcBvgF3Ad4BdwHeAXcB3gF3Ad4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwG+AXcBvgF3Ab4BdwHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHe + AXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BdwHeAXcB3gF3Ad4BewH/ + AX8B/wF/Ab0BewG9AXsBvQF7Ab0BewG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9 + AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BdwG9AXcBvQF3Ab0BewG9 + AXsBvQF7Ab0BewHeAXsB3gF/Af8BfwHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHd + AXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHd + AXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHd + AXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHd + AXsB3QF7Ad0BewHdAXsB3QF7Ad0BewHdAXsB3gF7Af8BfwH/AX8B3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewG9AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewG9AXsBvQF7Ab0BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHe + AXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewHeAXsB3gF7Ad4BewH/AX8B/wF//wD/AP8A + /wD/AP8A/wD/AP8A/wAKAAFCAU0BPgcAAT4DAAEoBAABAQIAAcADAAEBAQABAQYAARgWAAP//wD/AP8A + /wD/AP8A/wD/AAkA//8B//8A/wD/AP8A/wD/AGYA//+h//8A/wD/AP8A/wD/AGYAoP8L + + + + 141, 17 + + + 385, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/UserInputToastNotificationTest.Designer.cs b/Source/Krypton Components/TestForm/UserInputToastNotificationTest.Designer.cs new file mode 100644 index 000000000..b3e3198ba --- /dev/null +++ b/Source/Krypton Components/TestForm/UserInputToastNotificationTest.Designer.cs @@ -0,0 +1,585 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class UserInputToastNotificationTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(UserInputToastNotificationTest)); + this.kryptonPanel1 = new Krypton.Toolkit.KryptonPanel(); + this.kbtnShow = new Krypton.Toolkit.KryptonButton(); + this.kryptonBorderEdge1 = new Krypton.Toolkit.KryptonBorderEdge(); + this.kryptonPanel2 = new Krypton.Toolkit.KryptonPanel(); + this.kchkShowDoNotShowAgain = new Krypton.Toolkit.KryptonCheckBox(); + this.ktxtUserInputCue = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonLabel7 = new Krypton.Toolkit.KryptonLabel(); + this.kcmbUserInputType = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonLabel6 = new Krypton.Toolkit.KryptonLabel(); + this.kchkUseRTL = new Krypton.Toolkit.KryptonCheckBox(); + this.kcbtnBorderColor2 = new Krypton.Toolkit.KryptonColorButton(); + this.kcbtnBorderColor1 = new Krypton.Toolkit.KryptonColorButton(); + this.kchkReportLocation = new Krypton.Toolkit.KryptonCheckBox(); + this.kryptonGroupBox1 = new Krypton.Toolkit.KryptonGroupBox(); + this.klblStartLocationX = new Krypton.Toolkit.KryptonLabel(); + this.kchkSetDefaultLocation = new Krypton.Toolkit.KryptonCheckBox(); + this.klblStartLocation = new Krypton.Toolkit.KryptonLabel(); + this.knudStartLocationY = new Krypton.Toolkit.KryptonNumericUpDown(); + this.knudStartLocationX = new Krypton.Toolkit.KryptonNumericUpDown(); + this.klblStartLocationY = new Krypton.Toolkit.KryptonLabel(); + this.kchkShowProgressBar = new Krypton.Toolkit.KryptonCheckBox(); + this.kcmbToastTitleAlignment = new Krypton.Toolkit.KryptonComboBox(); + this.knudCountdownSeconds = new Krypton.Toolkit.KryptonNumericUpDown(); + this.kryptonLabel5 = new Krypton.Toolkit.KryptonLabel(); + this.kbtnTitleFont = new Krypton.Toolkit.KryptonButton(); + this.kbtnContentFont = new Krypton.Toolkit.KryptonButton(); + this.kryptonLabel4 = new Krypton.Toolkit.KryptonLabel(); + this.kchkShowCloseBox = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkTopMost = new Krypton.Toolkit.KryptonCheckBox(); + this.kchkUseFade = new Krypton.Toolkit.KryptonCheckBox(); + this.ktxtCustomToastIconPath = new Krypton.Toolkit.KryptonTextBox(); + this.kcmbToastIcon = new Krypton.Toolkit.KryptonComboBox(); + this.kryptonLabel3 = new Krypton.Toolkit.KryptonLabel(); + this.ktxtToastContent = new Krypton.Toolkit.KryptonTextBox(); + this.ktxtToastTitle = new Krypton.Toolkit.KryptonTextBox(); + this.kryptonLabel2 = new Krypton.Toolkit.KryptonLabel(); + this.kryptonLabel1 = new Krypton.Toolkit.KryptonLabel(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).BeginInit(); + this.kryptonPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).BeginInit(); + this.kryptonPanel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInputType)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).BeginInit(); + this.kryptonGroupBox1.Panel.SuspendLayout(); + this.kryptonGroupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastTitleAlignment)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastIcon)).BeginInit(); + this.SuspendLayout(); + // + // kryptonPanel1 + // + this.kryptonPanel1.Controls.Add(this.kbtnShow); + this.kryptonPanel1.Controls.Add(this.kryptonBorderEdge1); + this.kryptonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.kryptonPanel1.Location = new System.Drawing.Point(0, 406); + this.kryptonPanel1.Name = "kryptonPanel1"; + this.kryptonPanel1.PanelBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelAlternate; + this.kryptonPanel1.Size = new System.Drawing.Size(820, 50); + this.kryptonPanel1.TabIndex = 1; + // + // kbtnShow + // + this.kbtnShow.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.kbtnShow.Location = new System.Drawing.Point(718, 13); + this.kbtnShow.Name = "kbtnShow"; + this.kbtnShow.Size = new System.Drawing.Size(90, 25); + this.kbtnShow.TabIndex = 1; + this.kbtnShow.Values.Text = "Show"; + this.kbtnShow.Click += new System.EventHandler(this.kbtnShow_Click); + // + // kryptonBorderEdge1 + // + this.kryptonBorderEdge1.BorderStyle = Krypton.Toolkit.PaletteBorderStyle.HeaderPrimary; + this.kryptonBorderEdge1.Dock = System.Windows.Forms.DockStyle.Top; + this.kryptonBorderEdge1.Location = new System.Drawing.Point(0, 0); + this.kryptonBorderEdge1.Name = "kryptonBorderEdge1"; + this.kryptonBorderEdge1.Size = new System.Drawing.Size(820, 1); + this.kryptonBorderEdge1.Text = "kryptonBorderEdge1"; + // + // kryptonPanel2 + // + this.kryptonPanel2.Controls.Add(this.kchkShowDoNotShowAgain); + this.kryptonPanel2.Controls.Add(this.ktxtUserInputCue); + this.kryptonPanel2.Controls.Add(this.kryptonLabel7); + this.kryptonPanel2.Controls.Add(this.kcmbUserInputType); + this.kryptonPanel2.Controls.Add(this.kryptonLabel6); + this.kryptonPanel2.Controls.Add(this.kchkUseRTL); + this.kryptonPanel2.Controls.Add(this.kcbtnBorderColor2); + this.kryptonPanel2.Controls.Add(this.kcbtnBorderColor1); + this.kryptonPanel2.Controls.Add(this.kchkReportLocation); + this.kryptonPanel2.Controls.Add(this.kryptonGroupBox1); + this.kryptonPanel2.Controls.Add(this.kchkShowProgressBar); + this.kryptonPanel2.Controls.Add(this.kcmbToastTitleAlignment); + this.kryptonPanel2.Controls.Add(this.knudCountdownSeconds); + this.kryptonPanel2.Controls.Add(this.kryptonLabel5); + this.kryptonPanel2.Controls.Add(this.kbtnTitleFont); + this.kryptonPanel2.Controls.Add(this.kbtnContentFont); + this.kryptonPanel2.Controls.Add(this.kryptonLabel4); + this.kryptonPanel2.Controls.Add(this.kchkShowCloseBox); + this.kryptonPanel2.Controls.Add(this.kchkTopMost); + this.kryptonPanel2.Controls.Add(this.kchkUseFade); + this.kryptonPanel2.Controls.Add(this.ktxtCustomToastIconPath); + this.kryptonPanel2.Controls.Add(this.kcmbToastIcon); + this.kryptonPanel2.Controls.Add(this.kryptonLabel3); + this.kryptonPanel2.Controls.Add(this.ktxtToastContent); + this.kryptonPanel2.Controls.Add(this.ktxtToastTitle); + this.kryptonPanel2.Controls.Add(this.kryptonLabel2); + this.kryptonPanel2.Controls.Add(this.kryptonLabel1); + this.kryptonPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonPanel2.Location = new System.Drawing.Point(0, 0); + this.kryptonPanel2.Name = "kryptonPanel2"; + this.kryptonPanel2.Size = new System.Drawing.Size(820, 406); + this.kryptonPanel2.TabIndex = 2; + // + // kchkShowDoNotShowAgain + // + this.kchkShowDoNotShowAgain.Location = new System.Drawing.Point(438, 197); + this.kchkShowDoNotShowAgain.Name = "kchkShowDoNotShowAgain"; + this.kchkShowDoNotShowAgain.Size = new System.Drawing.Size(204, 20); + this.kchkShowDoNotShowAgain.TabIndex = 31; + this.kchkShowDoNotShowAgain.Values.Text = "Show \'Do not show again\' option"; + // + // ktxtUserInputCue + // + this.ktxtUserInputCue.Location = new System.Drawing.Point(470, 250); + this.ktxtUserInputCue.Name = "ktxtUserInputCue"; + this.ktxtUserInputCue.Size = new System.Drawing.Size(274, 23); + this.ktxtUserInputCue.TabIndex = 30; + // + // kryptonLabel7 + // + this.kryptonLabel7.Location = new System.Drawing.Point(365, 250); + this.kryptonLabel7.Name = "kryptonLabel7"; + this.kryptonLabel7.Size = new System.Drawing.Size(94, 20); + this.kryptonLabel7.TabIndex = 29; + this.kryptonLabel7.Values.Text = "User Input Cue:"; + // + // kcmbUserInputType + // + this.kcmbUserInputType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbUserInputType.DropDownWidth = 274; + this.kcmbUserInputType.IntegralHeight = false; + this.kcmbUserInputType.Location = new System.Drawing.Point(470, 223); + this.kcmbUserInputType.Name = "kcmbUserInputType"; + this.kcmbUserInputType.Size = new System.Drawing.Size(274, 21); + this.kcmbUserInputType.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbUserInputType.TabIndex = 28; + this.kcmbUserInputType.SelectedIndexChanged += new System.EventHandler(this.kcmbUserInputType_SelectedIndexChanged); + // + // kryptonLabel6 + // + this.kryptonLabel6.Location = new System.Drawing.Point(365, 223); + this.kryptonLabel6.Name = "kryptonLabel6"; + this.kryptonLabel6.Size = new System.Drawing.Size(99, 20); + this.kryptonLabel6.TabIndex = 27; + this.kryptonLabel6.Values.Text = "User Input Type:"; + // + // kchkUseRTL + // + this.kchkUseRTL.Location = new System.Drawing.Point(365, 197); + this.kchkUseRTL.Name = "kchkUseRTL"; + this.kchkUseRTL.Size = new System.Drawing.Size(67, 20); + this.kchkUseRTL.TabIndex = 26; + this.kchkUseRTL.Values.Text = "Use RTL"; + this.kchkUseRTL.CheckedChanged += new System.EventHandler(this.kchkUseRTL_CheckedChanged); + // + // kcbtnBorderColor2 + // + this.kcbtnBorderColor2.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcbtnBorderColor2.Location = new System.Drawing.Point(537, 166); + this.kcbtnBorderColor2.Name = "kcbtnBorderColor2"; + this.kcbtnBorderColor2.SelectedColor = System.Drawing.Color.Transparent; + this.kcbtnBorderColor2.Size = new System.Drawing.Size(166, 25); + this.kcbtnBorderColor2.TabIndex = 25; + this.kcbtnBorderColor2.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnBorderColor2.Values.Image"))); + this.kcbtnBorderColor2.Values.RoundedCorners = 8; + this.kcbtnBorderColor2.Values.Text = "Border Color 2"; + // + // kcbtnBorderColor1 + // + this.kcbtnBorderColor1.CustomColorPreviewShape = Krypton.Toolkit.KryptonColorButtonCustomColorPreviewShape.Circle; + this.kcbtnBorderColor1.Location = new System.Drawing.Point(365, 166); + this.kcbtnBorderColor1.Name = "kcbtnBorderColor1"; + this.kcbtnBorderColor1.SelectedColor = System.Drawing.Color.Transparent; + this.kcbtnBorderColor1.Size = new System.Drawing.Size(166, 25); + this.kcbtnBorderColor1.TabIndex = 24; + this.kcbtnBorderColor1.Values.Image = ((System.Drawing.Image)(resources.GetObject("kcbtnBorderColor1.Values.Image"))); + this.kcbtnBorderColor1.Values.RoundedCorners = 8; + this.kcbtnBorderColor1.Values.Text = "Border Color 1"; + // + // kchkReportLocation + // + this.kchkReportLocation.Location = new System.Drawing.Point(187, 248); + this.kchkReportLocation.Name = "kchkReportLocation"; + this.kchkReportLocation.Size = new System.Drawing.Size(110, 20); + this.kchkReportLocation.TabIndex = 23; + this.kchkReportLocation.Values.Text = "Report Location"; + // + // kryptonGroupBox1 + // + this.kryptonGroupBox1.Location = new System.Drawing.Point(365, 13); + this.kryptonGroupBox1.Name = "kryptonGroupBox1"; + // + // kryptonGroupBox1.Panel + // + this.kryptonGroupBox1.Panel.Controls.Add(this.klblStartLocationX); + this.kryptonGroupBox1.Panel.Controls.Add(this.kchkSetDefaultLocation); + this.kryptonGroupBox1.Panel.Controls.Add(this.klblStartLocation); + this.kryptonGroupBox1.Panel.Controls.Add(this.knudStartLocationY); + this.kryptonGroupBox1.Panel.Controls.Add(this.knudStartLocationX); + this.kryptonGroupBox1.Panel.Controls.Add(this.klblStartLocationY); + this.kryptonGroupBox1.Size = new System.Drawing.Size(443, 146); + this.kryptonGroupBox1.TabIndex = 22; + // + // klblStartLocationX + // + this.klblStartLocationX.Enabled = false; + this.klblStartLocationX.Location = new System.Drawing.Point(12, 73); + this.klblStartLocationX.Name = "klblStartLocationX"; + this.klblStartLocationX.Size = new System.Drawing.Size(20, 20); + this.klblStartLocationX.TabIndex = 23; + this.klblStartLocationX.Values.Text = "X:"; + // + // kchkSetDefaultLocation + // + this.kchkSetDefaultLocation.Location = new System.Drawing.Point(12, 11); + this.kchkSetDefaultLocation.Name = "kchkSetDefaultLocation"; + this.kchkSetDefaultLocation.Size = new System.Drawing.Size(133, 20); + this.kchkSetDefaultLocation.TabIndex = 22; + this.kchkSetDefaultLocation.Values.Text = "Set Default Location"; + // + // klblStartLocation + // + this.klblStartLocation.Enabled = false; + this.klblStartLocation.Location = new System.Drawing.Point(12, 47); + this.klblStartLocation.Name = "klblStartLocation"; + this.klblStartLocation.Size = new System.Drawing.Size(89, 20); + this.klblStartLocation.TabIndex = 18; + this.klblStartLocation.Values.Text = "Start Location:"; + // + // knudStartLocationY + // + this.knudStartLocationY.Enabled = false; + this.knudStartLocationY.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudStartLocationY.Location = new System.Drawing.Point(193, 73); + this.knudStartLocationY.Maximum = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.knudStartLocationY.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.knudStartLocationY.Name = "knudStartLocationY"; + this.knudStartLocationY.Size = new System.Drawing.Size(120, 22); + this.knudStartLocationY.TabIndex = 21; + this.knudStartLocationY.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + // + // knudStartLocationX + // + this.knudStartLocationX.Enabled = false; + this.knudStartLocationX.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudStartLocationX.Location = new System.Drawing.Point(38, 73); + this.knudStartLocationX.Maximum = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.knudStartLocationX.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.knudStartLocationX.Name = "knudStartLocationX"; + this.knudStartLocationX.Size = new System.Drawing.Size(120, 22); + this.knudStartLocationX.TabIndex = 19; + this.knudStartLocationX.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + // + // klblStartLocationY + // + this.klblStartLocationY.Enabled = false; + this.klblStartLocationY.Location = new System.Drawing.Point(164, 73); + this.klblStartLocationY.Name = "klblStartLocationY"; + this.klblStartLocationY.Size = new System.Drawing.Size(23, 20); + this.klblStartLocationY.TabIndex = 20; + this.klblStartLocationY.Values.Text = " Y:"; + // + // kchkShowProgressBar + // + this.kchkShowProgressBar.Location = new System.Drawing.Point(187, 221); + this.kchkShowProgressBar.Name = "kchkShowProgressBar"; + this.kchkShowProgressBar.Size = new System.Drawing.Size(125, 20); + this.kchkShowProgressBar.TabIndex = 17; + this.kchkShowProgressBar.Values.Text = "Show Progress Bar"; + this.kchkShowProgressBar.CheckedChanged += new System.EventHandler(this.kchkShowProgressBar_CheckedChanged); + // + // kcmbToastTitleAlignment + // + this.kcmbToastTitleAlignment.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbToastTitleAlignment.DropDownWidth = 274; + this.kcmbToastTitleAlignment.IntegralHeight = false; + this.kcmbToastTitleAlignment.Location = new System.Drawing.Point(173, 298); + this.kcmbToastTitleAlignment.Name = "kcmbToastTitleAlignment"; + this.kcmbToastTitleAlignment.Size = new System.Drawing.Size(274, 21); + this.kcmbToastTitleAlignment.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbToastTitleAlignment.TabIndex = 16; + // + // knudCountdownSeconds + // + this.knudCountdownSeconds.Increment = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.knudCountdownSeconds.Location = new System.Drawing.Point(192, 366); + this.knudCountdownSeconds.Maximum = new decimal(new int[] { + 180, + 0, + 0, + 0}); + this.knudCountdownSeconds.Minimum = new decimal(new int[] { + 5, + 0, + 0, + 0}); + this.knudCountdownSeconds.Name = "knudCountdownSeconds"; + this.knudCountdownSeconds.Size = new System.Drawing.Size(120, 22); + this.knudCountdownSeconds.TabIndex = 15; + this.knudCountdownSeconds.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + // + // kryptonLabel5 + // + this.kryptonLabel5.Location = new System.Drawing.Point(13, 366); + this.kryptonLabel5.Name = "kryptonLabel5"; + this.kryptonLabel5.Size = new System.Drawing.Size(126, 20); + this.kryptonLabel5.TabIndex = 14; + this.kryptonLabel5.Values.Text = "Countdown Seconds:"; + // + // kbtnTitleFont + // + this.kbtnTitleFont.AutoSize = true; + this.kbtnTitleFont.Location = new System.Drawing.Point(208, 335); + this.kbtnTitleFont.Name = "kbtnTitleFont"; + this.kbtnTitleFont.Size = new System.Drawing.Size(117, 25); + this.kbtnTitleFont.TabIndex = 13; + this.kbtnTitleFont.Values.Text = "Title Font"; + // + // kbtnContentFont + // + this.kbtnContentFont.AutoSize = true; + this.kbtnContentFont.Location = new System.Drawing.Point(85, 335); + this.kbtnContentFont.Name = "kbtnContentFont"; + this.kbtnContentFont.Size = new System.Drawing.Size(117, 25); + this.kbtnContentFont.TabIndex = 12; + this.kbtnContentFont.Values.Text = "Content Font"; + // + // kryptonLabel4 + // + this.kryptonLabel4.Location = new System.Drawing.Point(13, 298); + this.kryptonLabel4.Name = "kryptonLabel4"; + this.kryptonLabel4.Size = new System.Drawing.Size(96, 20); + this.kryptonLabel4.TabIndex = 10; + this.kryptonLabel4.Values.Text = "Title Alignment:"; + // + // kchkShowCloseBox + // + this.kchkShowCloseBox.Location = new System.Drawing.Point(85, 273); + this.kchkShowCloseBox.Name = "kchkShowCloseBox"; + this.kchkShowCloseBox.Size = new System.Drawing.Size(110, 20); + this.kchkShowCloseBox.TabIndex = 9; + this.kchkShowCloseBox.Values.Text = "Show Close Box"; + // + // kchkTopMost + // + this.kchkTopMost.Checked = true; + this.kchkTopMost.CheckState = System.Windows.Forms.CheckState.Checked; + this.kchkTopMost.Location = new System.Drawing.Point(85, 247); + this.kchkTopMost.Name = "kchkTopMost"; + this.kchkTopMost.Size = new System.Drawing.Size(76, 20); + this.kchkTopMost.TabIndex = 8; + this.kchkTopMost.Values.Text = "Top Most"; + // + // kchkUseFade + // + this.kchkUseFade.Location = new System.Drawing.Point(85, 221); + this.kchkUseFade.Name = "kchkUseFade"; + this.kchkUseFade.Size = new System.Drawing.Size(73, 20); + this.kchkUseFade.TabIndex = 7; + this.kchkUseFade.Values.Text = "Use Fade"; + // + // ktxtCustomToastIconPath + // + this.ktxtCustomToastIconPath.Enabled = false; + this.ktxtCustomToastIconPath.Location = new System.Drawing.Point(85, 191); + this.ktxtCustomToastIconPath.Name = "ktxtCustomToastIconPath"; + this.ktxtCustomToastIconPath.ShowEllipsisButton = true; + this.ktxtCustomToastIconPath.Size = new System.Drawing.Size(274, 24); + this.ktxtCustomToastIconPath.TabIndex = 6; + // + // kcmbToastIcon + // + this.kcmbToastIcon.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.kcmbToastIcon.DropDownWidth = 274; + this.kcmbToastIcon.IntegralHeight = false; + this.kcmbToastIcon.Location = new System.Drawing.Point(85, 165); + this.kcmbToastIcon.Name = "kcmbToastIcon"; + this.kcmbToastIcon.Size = new System.Drawing.Size(274, 21); + this.kcmbToastIcon.StateCommon.ComboBox.Content.TextH = Krypton.Toolkit.PaletteRelativeAlign.Near; + this.kcmbToastIcon.TabIndex = 5; + this.kcmbToastIcon.SelectedIndexChanged += new System.EventHandler(this.kcmbToastIcon_SelectedIndexChanged); + // + // kryptonLabel3 + // + this.kryptonLabel3.Location = new System.Drawing.Point(13, 165); + this.kryptonLabel3.Name = "kryptonLabel3"; + this.kryptonLabel3.Size = new System.Drawing.Size(36, 20); + this.kryptonLabel3.TabIndex = 4; + this.kryptonLabel3.Values.Text = "Icon:"; + // + // ktxtToastContent + // + this.ktxtToastContent.Location = new System.Drawing.Point(85, 41); + this.ktxtToastContent.Multiline = true; + this.ktxtToastContent.Name = "ktxtToastContent"; + this.ktxtToastContent.Size = new System.Drawing.Size(274, 118); + this.ktxtToastContent.TabIndex = 3; + this.ktxtToastContent.Text = "Put your message here..."; + // + // ktxtToastTitle + // + this.ktxtToastTitle.Location = new System.Drawing.Point(85, 13); + this.ktxtToastTitle.Name = "ktxtToastTitle"; + this.ktxtToastTitle.Size = new System.Drawing.Size(274, 23); + this.ktxtToastTitle.TabIndex = 2; + this.ktxtToastTitle.Text = "This is a test"; + // + // kryptonLabel2 + // + this.kryptonLabel2.Location = new System.Drawing.Point(13, 39); + this.kryptonLabel2.Name = "kryptonLabel2"; + this.kryptonLabel2.Size = new System.Drawing.Size(36, 20); + this.kryptonLabel2.TabIndex = 1; + this.kryptonLabel2.Values.Text = "Text:"; + // + // kryptonLabel1 + // + this.kryptonLabel1.Location = new System.Drawing.Point(13, 13); + this.kryptonLabel1.Name = "kryptonLabel1"; + this.kryptonLabel1.Size = new System.Drawing.Size(36, 20); + this.kryptonLabel1.TabIndex = 0; + this.kryptonLabel1.Values.Text = "Title:"; + // + // UserInputToastNotificationTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(820, 456); + this.Controls.Add(this.kryptonPanel2); + this.Controls.Add(this.kryptonPanel1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.Name = "UserInputToastNotificationTest"; + this.Text = "UserInputToastNotificationTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel1)).EndInit(); + this.kryptonPanel1.ResumeLayout(false); + this.kryptonPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPanel2)).EndInit(); + this.kryptonPanel2.ResumeLayout(false); + this.kryptonPanel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbUserInputType)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1.Panel)).EndInit(); + this.kryptonGroupBox1.Panel.ResumeLayout(false); + this.kryptonGroupBox1.Panel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonGroupBox1)).EndInit(); + this.kryptonGroupBox1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastTitleAlignment)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kcmbToastIcon)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private Krypton.Toolkit.KryptonPanel kryptonPanel1; + private Krypton.Toolkit.KryptonButton kbtnShow; + private Krypton.Toolkit.KryptonBorderEdge kryptonBorderEdge1; + private Krypton.Toolkit.KryptonPanel kryptonPanel2; + private Krypton.Toolkit.KryptonCheckBox kchkUseRTL; + private Krypton.Toolkit.KryptonColorButton kcbtnBorderColor2; + private Krypton.Toolkit.KryptonColorButton kcbtnBorderColor1; + private Krypton.Toolkit.KryptonCheckBox kchkReportLocation; + private Krypton.Toolkit.KryptonGroupBox kryptonGroupBox1; + private Krypton.Toolkit.KryptonLabel klblStartLocationX; + private Krypton.Toolkit.KryptonCheckBox kchkSetDefaultLocation; + private Krypton.Toolkit.KryptonLabel klblStartLocation; + private Krypton.Toolkit.KryptonNumericUpDown knudStartLocationY; + private Krypton.Toolkit.KryptonNumericUpDown knudStartLocationX; + private Krypton.Toolkit.KryptonLabel klblStartLocationY; + private Krypton.Toolkit.KryptonCheckBox kchkShowProgressBar; + private Krypton.Toolkit.KryptonComboBox kcmbToastTitleAlignment; + private Krypton.Toolkit.KryptonNumericUpDown knudCountdownSeconds; + private Krypton.Toolkit.KryptonLabel kryptonLabel5; + private Krypton.Toolkit.KryptonButton kbtnTitleFont; + private Krypton.Toolkit.KryptonButton kbtnContentFont; + private Krypton.Toolkit.KryptonLabel kryptonLabel4; + private Krypton.Toolkit.KryptonCheckBox kchkShowCloseBox; + private Krypton.Toolkit.KryptonCheckBox kchkTopMost; + private Krypton.Toolkit.KryptonCheckBox kchkUseFade; + private Krypton.Toolkit.KryptonTextBox ktxtCustomToastIconPath; + private Krypton.Toolkit.KryptonComboBox kcmbToastIcon; + private Krypton.Toolkit.KryptonLabel kryptonLabel3; + private Krypton.Toolkit.KryptonTextBox ktxtToastContent; + private Krypton.Toolkit.KryptonTextBox ktxtToastTitle; + private Krypton.Toolkit.KryptonLabel kryptonLabel2; + private Krypton.Toolkit.KryptonLabel kryptonLabel1; + private Krypton.Toolkit.KryptonLabel kryptonLabel6; + private Krypton.Toolkit.KryptonComboBox kcmbUserInputType; + private Krypton.Toolkit.KryptonLabel kryptonLabel7; + private Krypton.Toolkit.KryptonTextBox ktxtUserInputCue; + private Krypton.Toolkit.KryptonCheckBox kchkShowDoNotShowAgain; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/UserInputToastNotificationTest.cs b/Source/Krypton Components/TestForm/UserInputToastNotificationTest.cs new file mode 100644 index 000000000..02b687145 --- /dev/null +++ b/Source/Krypton Components/TestForm/UserInputToastNotificationTest.cs @@ -0,0 +1,180 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class UserInputToastNotificationTest : KryptonForm + { + #region Instance Fields + + private bool _useProgressBar; + + private bool _useRTLReading; + + private string? _stringResult; + + private int _integerResult; + + private KryptonToastNotificationInputAreaType _toastNotificationInputAreaType; + + private KryptonToastNotificationIcon _toastNotificationIcon; + + #endregion + + public UserInputToastNotificationTest() + { + InitializeComponent(); + + foreach (var value in Enum.GetValues(typeof(KryptonToastNotificationInputAreaType))) + { + kcmbUserInputType.Items.Add(value.ToString()); + } + + kcmbUserInputType.SelectedIndex = 0; + + foreach (var value in Enum.GetValues(typeof(KryptonToastNotificationIcon))) + { + kcmbToastIcon.Items.Add(value.ToString()); + } + + kcmbToastIcon.SelectedIndex = 0; + } + + private void kbtnShow_Click(object sender, EventArgs e) + { + var data = new KryptonUserInputToastNotificationData() + { + BorderColor1 = kcbtnBorderColor1.SelectedColor, + BorderColor2 = kcbtnBorderColor2.SelectedColor, + CountDownSeconds = (int)knudCountdownSeconds.Value, + CountDownTimerInterval = 1000, + CustomImage = null, + DoNotShowAgainOptionCheckState = GetDoNotShowAgainOptionCheckState(), + ShowDoNotShowAgainOption = kchkShowDoNotShowAgain.Checked, + DoNotShowAgainOptionChecked = false, + FocusOnUserInputArea = true, + NotificationContent = ktxtToastContent.Text, + NotificationTitle = ktxtToastTitle.Text, + NotificationIcon = GetNotificationIcon(), + NotificationContentFont = null, + //UserInputItemCollection = new ComboBox.ObjectCollection() + UserInputList = TemporaryArrayList() + }; + + if (_useProgressBar) + { + switch (GetInputAreaType()) + { + case KryptonToastNotificationInputAreaType.ComboBox: + _stringResult = (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + case KryptonToastNotificationInputAreaType.DomainUpDown: + _stringResult = + (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + case KryptonToastNotificationInputAreaType.NumericUpDown: + _integerResult = + (int)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_integerResult}"); + break; + case KryptonToastNotificationInputAreaType.MaskedTextBox: + _stringResult = + (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + case KryptonToastNotificationInputAreaType.TextBox: + _stringResult = + (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + default: + throw new InvalidEnumArgumentException(@"InputAreaType()"); + } + } + else + { + switch (GetInputAreaType()) + { + case KryptonToastNotificationInputAreaType.ComboBox: + _stringResult = + (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + case KryptonToastNotificationInputAreaType.DomainUpDown: + _stringResult = + (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + case KryptonToastNotificationInputAreaType.NumericUpDown: + _integerResult = + (int)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_integerResult}"); + break; + case KryptonToastNotificationInputAreaType.MaskedTextBox: + _stringResult = + (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + case KryptonToastNotificationInputAreaType.TextBox: + _stringResult = + (string)KryptonToastNotification.ShowNotification(data); + + KryptonMessageBox.Show($"Result = {_stringResult}"); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + } + + private void SetNotificationIcon(KryptonToastNotificationIcon icon) => _toastNotificationIcon = icon; + + private KryptonToastNotificationIcon? GetNotificationIcon() => _toastNotificationIcon; + + private CheckState GetDoNotShowAgainOptionCheckState() => kchkShowDoNotShowAgain.CheckState; + + private void kchkShowProgressBar_CheckedChanged(object sender, EventArgs e) => _useProgressBar = kchkShowProgressBar.Checked; + + private void kchkUseRTL_CheckedChanged(object sender, EventArgs e) => _useRTLReading = kchkUseRTL.Checked; + + private void SetInputType(KryptonToastNotificationInputAreaType inputAreaType) => + _toastNotificationInputAreaType = inputAreaType; + + private KryptonToastNotificationInputAreaType GetInputAreaType() => _toastNotificationInputAreaType; + + private void kcmbToastIcon_SelectedIndexChanged(object sender, EventArgs e) => SetNotificationIcon((KryptonToastNotificationIcon)Enum.Parse(typeof(KryptonToastNotificationIcon), kcmbToastIcon.Text)); + + private void kcmbUserInputType_SelectedIndexChanged(object sender, EventArgs e) => SetInputType((KryptonToastNotificationInputAreaType)Enum.Parse(typeof(KryptonToastNotificationInputAreaType), kcmbUserInputType.Text)); + + private ArrayList TemporaryArrayList() + { + ArrayList tempList; + + tempList = new ArrayList(); + + for (int i = 0; i < 10; i++) + { + tempList.Add(i); + } + + return tempList; + } + } +} diff --git a/Source/Krypton Components/TestForm/UserInputToastNotificationTest.resx b/Source/Krypton Components/TestForm/UserInputToastNotificationTest.resx new file mode 100644 index 000000000..85104d505 --- /dev/null +++ b/Source/Krypton Components/TestForm/UserInputToastNotificationTest.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL + DAAACwwBP0AiyAAAAAd0SU1FB9gBEgI0L+a2mIYAAAATSURBVDhPYxgFo2AUjAIwYGAAAAQQAAGnRHxj + AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Workspace.Designer.cs b/Source/Krypton Components/TestForm/Workspace.Designer.cs new file mode 100644 index 000000000..65ba071a1 --- /dev/null +++ b/Source/Krypton Components/TestForm/Workspace.Designer.cs @@ -0,0 +1,257 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + partial class WorkspaceTest + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.kryptonDockingManager1 = new Krypton.Docking.KryptonDockingManager(); + this.kryptonDockableWorkspace1 = new Krypton.Docking.KryptonDockableWorkspace(); + this.kryptonWorkspaceSequence1 = new Krypton.Workspace.KryptonWorkspaceSequence(); + this.kryptonWorkspaceCell1 = new Krypton.Workspace.KryptonWorkspaceCell(); + this.kryptonPage1 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage2 = new Krypton.Navigator.KryptonPage(); + this.kryptonWorkspaceSequence2 = new Krypton.Workspace.KryptonWorkspaceSequence(); + this.kryptonWorkspaceSequence3 = new Krypton.Workspace.KryptonWorkspaceSequence(); + this.kryptonWorkspaceCell2 = new Krypton.Workspace.KryptonWorkspaceCell(); + this.kryptonPage3 = new Krypton.Navigator.KryptonPage(); + this.kryptonPage4 = new Krypton.Navigator.KryptonPage(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonDockableWorkspace1)).BeginInit(); + this.kryptonDockableWorkspace1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell1)).BeginInit(); + this.kryptonWorkspaceCell1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell2)).BeginInit(); + this.kryptonWorkspaceCell2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage4)).BeginInit(); + this.SuspendLayout(); + // + // kryptonDockableWorkspace1 + // + this.kryptonDockableWorkspace1.ActivePage = this.kryptonPage1; + this.kryptonDockableWorkspace1.AutoHiddenHost = false; + this.kryptonDockableWorkspace1.CompactFlags = ((Krypton.Workspace.CompactFlags)(((Krypton.Workspace.CompactFlags.RemoveEmptyCells | Krypton.Workspace.CompactFlags.RemoveEmptySequences) + | Krypton.Workspace.CompactFlags.PromoteLeafs))); + this.kryptonDockableWorkspace1.ContainerBackStyle = Krypton.Toolkit.PaletteBackStyle.PanelClient; + this.kryptonDockableWorkspace1.Dock = System.Windows.Forms.DockStyle.Fill; + this.kryptonDockableWorkspace1.Location = new System.Drawing.Point(0, 0); + this.kryptonDockableWorkspace1.Name = "kryptonDockableWorkspace1"; + // + // + // + this.kryptonDockableWorkspace1.Root.Children.AddRange(new System.ComponentModel.Component[] { + this.kryptonWorkspaceSequence1}); + this.kryptonDockableWorkspace1.Root.UniqueName = "3bba19bd9f52455e8801b87dcecf970a"; + this.kryptonDockableWorkspace1.Root.WorkspaceControl = this.kryptonDockableWorkspace1; + this.kryptonDockableWorkspace1.SeparatorStyle = Krypton.Toolkit.SeparatorStyle.LowProfile; + this.kryptonDockableWorkspace1.ShowMaximizeButton = false; + this.kryptonDockableWorkspace1.Size = new System.Drawing.Size(845, 586); + this.kryptonDockableWorkspace1.SplitterWidth = 5; + this.kryptonDockableWorkspace1.TabIndex = 0; + this.kryptonDockableWorkspace1.TabStop = true; + // + // kryptonWorkspaceSequence1 + // + this.kryptonWorkspaceSequence1.Children.AddRange(new System.ComponentModel.Component[] { + this.kryptonWorkspaceCell1, + this.kryptonWorkspaceSequence2}); + this.kryptonWorkspaceSequence1.UniqueName = "56bf4046ffc64fbdb34e12d9892234e1"; + this.kryptonWorkspaceSequence1.WorkspaceControl = null; + // + // kryptonWorkspaceCell1 + // + this.kryptonWorkspaceCell1.AllowPageDrag = true; + this.kryptonWorkspaceCell1.AllowTabFocus = false; + this.kryptonWorkspaceCell1.Button.ButtonDisplayLogic = Krypton.Navigator.ButtonDisplayLogic.Context; + this.kryptonWorkspaceCell1.Button.CloseButtonAction = Krypton.Navigator.CloseButtonAction.RemovePageAndDispose; + this.kryptonWorkspaceCell1.Button.CloseButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell1.Button.ContextButtonAction = Krypton.Navigator.ContextButtonAction.SelectPage; + this.kryptonWorkspaceCell1.Button.ContextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell1.Button.ContextMenuMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonWorkspaceCell1.Button.ContextMenuMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonWorkspaceCell1.Button.NextButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell1.Button.NextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell1.Button.PreviousButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell1.Button.PreviousButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell1.ControlKryptonFormFeatures = false; + this.kryptonWorkspaceCell1.Name = "kryptonWorkspaceCell1"; + this.kryptonWorkspaceCell1.NavigatorMode = Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonWorkspaceCell1.Owner = null; + this.kryptonWorkspaceCell1.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.kryptonWorkspaceCell1.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.kryptonPage1, + this.kryptonPage2}); + this.kryptonWorkspaceCell1.SelectedIndex = 0; + this.kryptonWorkspaceCell1.UniqueName = "c66ca1b58b53431aa35b098cb777fb70"; + // + // kryptonPage1 + // + this.kryptonPage1.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage1.Flags = 65534; + this.kryptonPage1.LastVisibleSet = true; + this.kryptonPage1.MinimumSize = new System.Drawing.Size(150, 50); + this.kryptonPage1.Name = "kryptonPage1"; + this.kryptonPage1.Size = new System.Drawing.Size(418, 559); + this.kryptonPage1.Text = "kryptonPage1"; + this.kryptonPage1.ToolTipTitle = "Page ToolTip"; + this.kryptonPage1.UniqueName = "e1f713e6c5884788a36712d3eba40f28"; + // + // kryptonPage2 + // + this.kryptonPage2.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage2.Flags = 65534; + this.kryptonPage2.LastVisibleSet = true; + this.kryptonPage2.MinimumSize = new System.Drawing.Size(150, 50); + this.kryptonPage2.Name = "kryptonPage2"; + this.kryptonPage2.Size = new System.Drawing.Size(150, 100); + this.kryptonPage2.Text = "kryptonPage2"; + this.kryptonPage2.ToolTipTitle = "Page ToolTip"; + this.kryptonPage2.UniqueName = "34a964eb4dac405bad0e1dc2db8b6508"; + // + // kryptonWorkspaceSequence2 + // + this.kryptonWorkspaceSequence2.Children.AddRange(new System.ComponentModel.Component[] { + this.kryptonWorkspaceSequence3}); + this.kryptonWorkspaceSequence2.UniqueName = "ffa7511205344d81973af3f2ecd65a1c"; + this.kryptonWorkspaceSequence2.WorkspaceControl = null; + // + // kryptonWorkspaceSequence3 + // + this.kryptonWorkspaceSequence3.Children.AddRange(new System.ComponentModel.Component[] { + this.kryptonWorkspaceCell2}); + this.kryptonWorkspaceSequence3.UniqueName = "8cc0fdcfade147acbb56c490621a4d85"; + this.kryptonWorkspaceSequence3.WorkspaceControl = null; + // + // kryptonWorkspaceCell2 + // + this.kryptonWorkspaceCell2.AllowPageDrag = true; + this.kryptonWorkspaceCell2.AllowTabFocus = false; + this.kryptonWorkspaceCell2.Bar.BarMapExtraText = Krypton.Navigator.MapKryptonPageText.None; + this.kryptonWorkspaceCell2.Bar.BarMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonWorkspaceCell2.Bar.BarMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonWorkspaceCell2.Bar.BarMultiline = Krypton.Navigator.BarMultiline.Singleline; + this.kryptonWorkspaceCell2.Bar.BarOrientation = Krypton.Toolkit.VisualOrientation.Top; + this.kryptonWorkspaceCell2.Bar.CheckButtonStyle = Krypton.Toolkit.ButtonStyle.Standalone; + this.kryptonWorkspaceCell2.Bar.ItemAlignment = Krypton.Toolkit.RelativePositionAlign.Near; + this.kryptonWorkspaceCell2.Bar.ItemMaximumSize = new System.Drawing.Size(200, 200); + this.kryptonWorkspaceCell2.Bar.ItemMinimumSize = new System.Drawing.Size(20, 20); + this.kryptonWorkspaceCell2.Bar.ItemOrientation = Krypton.Toolkit.ButtonOrientation.Auto; + this.kryptonWorkspaceCell2.Bar.ItemSizing = Krypton.Navigator.BarItemSizing.SameHeight; + this.kryptonWorkspaceCell2.Bar.TabBorderStyle = Krypton.Toolkit.TabBorderStyle.RoundedOutsizeMedium; + this.kryptonWorkspaceCell2.Bar.TabStyle = Krypton.Toolkit.TabStyle.StandardProfile; + this.kryptonWorkspaceCell2.Button.ButtonDisplayLogic = Krypton.Navigator.ButtonDisplayLogic.Context; + this.kryptonWorkspaceCell2.Button.CloseButtonAction = Krypton.Navigator.CloseButtonAction.RemovePageAndDispose; + this.kryptonWorkspaceCell2.Button.CloseButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell2.Button.ContextButtonAction = Krypton.Navigator.ContextButtonAction.SelectPage; + this.kryptonWorkspaceCell2.Button.ContextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell2.Button.ContextMenuMapImage = Krypton.Navigator.MapKryptonPageImage.Small; + this.kryptonWorkspaceCell2.Button.ContextMenuMapText = Krypton.Navigator.MapKryptonPageText.TextTitle; + this.kryptonWorkspaceCell2.Button.NextButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell2.Button.NextButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell2.Button.PreviousButtonAction = Krypton.Navigator.DirectionButtonAction.ModeAppropriateAction; + this.kryptonWorkspaceCell2.Button.PreviousButtonDisplay = Krypton.Navigator.ButtonDisplay.Logic; + this.kryptonWorkspaceCell2.ControlKryptonFormFeatures = false; + this.kryptonWorkspaceCell2.Name = "kryptonWorkspaceCell2"; + this.kryptonWorkspaceCell2.NavigatorMode = Krypton.Navigator.NavigatorMode.BarTabGroup; + this.kryptonWorkspaceCell2.Owner = null; + this.kryptonWorkspaceCell2.PageBackStyle = Krypton.Toolkit.PaletteBackStyle.ControlClient; + this.kryptonWorkspaceCell2.Pages.AddRange(new Krypton.Navigator.KryptonPage[] { + this.kryptonPage3, + this.kryptonPage4}); + this.kryptonWorkspaceCell2.SelectedIndex = 0; + this.kryptonWorkspaceCell2.UniqueName = "4c6fde8fd3c647e28a0497ed56cb1304"; + // + // kryptonPage3 + // + this.kryptonPage3.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage3.Flags = 65534; + this.kryptonPage3.LastVisibleSet = true; + this.kryptonPage3.MinimumSize = new System.Drawing.Size(150, 50); + this.kryptonPage3.Name = "kryptonPage3"; + this.kryptonPage3.Size = new System.Drawing.Size(418, 559); + this.kryptonPage3.Text = "kryptonPage3"; + this.kryptonPage3.ToolTipTitle = "Page ToolTip"; + this.kryptonPage3.UniqueName = "2fc64becd9ec4effa7706414f5619894"; + // + // kryptonPage4 + // + this.kryptonPage4.AutoHiddenSlideSize = new System.Drawing.Size(200, 200); + this.kryptonPage4.Flags = 65534; + this.kryptonPage4.LastVisibleSet = true; + this.kryptonPage4.MinimumSize = new System.Drawing.Size(150, 50); + this.kryptonPage4.Name = "kryptonPage4"; + this.kryptonPage4.Size = new System.Drawing.Size(150, 100); + this.kryptonPage4.Text = "kryptonPage4"; + this.kryptonPage4.ToolTipTitle = "Page ToolTip"; + this.kryptonPage4.UniqueName = "1648a27e023f4a108b96f5839d47e532"; + // + // WorkspaceTest + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(845, 586); + this.Controls.Add(this.kryptonDockableWorkspace1); + this.Name = "WorkspaceTest"; + this.Text = "WorkspaceTest"; + ((System.ComponentModel.ISupportInitialize)(this.kryptonDockableWorkspace1)).EndInit(); + this.kryptonDockableWorkspace1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell1)).EndInit(); + this.kryptonWorkspaceCell1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonWorkspaceCell2)).EndInit(); + this.kryptonWorkspaceCell2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.kryptonPage4)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + private Krypton.Docking.KryptonDockingManager kryptonDockingManager1; + private Krypton.Docking.KryptonDockableWorkspace kryptonDockableWorkspace1; + private Krypton.Navigator.KryptonPage kryptonPage1; + private Krypton.Workspace.KryptonWorkspaceSequence kryptonWorkspaceSequence1; + private Krypton.Workspace.KryptonWorkspaceCell kryptonWorkspaceCell1; + private Krypton.Navigator.KryptonPage kryptonPage2; + private Krypton.Workspace.KryptonWorkspaceSequence kryptonWorkspaceSequence2; + private Krypton.Workspace.KryptonWorkspaceSequence kryptonWorkspaceSequence3; + private Krypton.Workspace.KryptonWorkspaceCell kryptonWorkspaceCell2; + private Krypton.Navigator.KryptonPage kryptonPage3; + private Krypton.Navigator.KryptonPage kryptonPage4; + } +} \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/Workspace.cs b/Source/Krypton Components/TestForm/Workspace.cs new file mode 100644 index 000000000..85326f83b --- /dev/null +++ b/Source/Krypton Components/TestForm/Workspace.cs @@ -0,0 +1,19 @@ +#region BSD License +/* + * + * New BSD 3-Clause License (https://github.com/Krypton-Suite/Standard-Toolkit/blob/master/LICENSE) + * Modifications by Peter Wagner(aka Wagnerp) & Simon Coghlan(aka Smurf-IV), et al. 2024 - 2024. All rights reserved. + * + */ +#endregion + +namespace TestForm +{ + public partial class WorkspaceTest : KryptonForm + { + public WorkspaceTest() + { + InitializeComponent(); + } + } +} diff --git a/Source/Krypton Components/TestForm/Workspace.resx b/Source/Krypton Components/TestForm/Workspace.resx new file mode 100644 index 000000000..c6bb6b12a --- /dev/null +++ b/Source/Krypton Components/TestForm/Workspace.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/Source/Krypton Components/TestForm/invoices.xml b/Source/Krypton Components/TestForm/invoices.xml new file mode 100644 index 000000000..8f705169e --- /dev/null +++ b/Source/Krypton Components/TestForm/invoices.xml @@ -0,0 +1,21553 @@ + + + + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 7/4/1996 + Queso Cabrales + 168 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 7/4/1996 + Singaporean Hokkien Fried Mee + 98 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 7/4/1996 + Mozzarella di Giovanni + 174 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 7/5/1996 + Tofu + 167.4 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 7/5/1996 + Manjimup Dried Apples + 1696 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 7/8/1996 + Jack's New England Clam Chowder + 77 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 7/8/1996 + Manjimup Dried Apples + 1261.4 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 7/8/1996 + Louisiana Fiery Hot Pepper Sauce + 214.2 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 7/8/1996 + Gustaf's Knckebrd + 95.76 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 7/8/1996 + Ravioli Angelo + 222.3 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 7/8/1996 + Louisiana Fiery Hot Pepper Sauce + 336 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 7/9/1996 + Sir Rodney's Marmalade + 2462.4 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 7/9/1996 + Geitost + 47.5 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 7/9/1996 + Camembert Pierrot + 1088 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 7/10/1996 + Gorgonzola Telino + 200 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 7/10/1996 + Chartreuse verte + 604.8 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 7/10/1996 + Maxilaku + 640 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 7/11/1996 + Guaran Fantstica + 45.9 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 7/11/1996 + Pt chinois + 342.72 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 7/11/1996 + Longlife Tofu + 168 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 7/12/1996 + Chang + 304 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 7/12/1996 + Pavlova + 486.5 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 7/12/1996 + Inlagd Sill + 380 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 7/12/1996 + Raclette Courdavault + 1320 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 7/15/1996 + Perth Pasties + 393 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 7/15/1996 + Original Frankfurter grne Soe + 124.8 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 7/16/1996 + Schoggi Schokolade + 877.5 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 7/16/1996 + Chartreuse verte + 86.4 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 7/16/1996 + Original Frankfurter grne Soe + 156 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/17/1996 + Chang + 608 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/17/1996 + Chef Anton's Gumbo Mix + 884 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/17/1996 + Mascarpone Fabioli + 122.88 +
+ + CENTC + Centro comercial Moctezuma +
Sierras de Granada 9993
+ Mxico D.F. + Mexico + 7/18/1996 + Sir Rodney's Scones + 80 +
+ + CENTC + Centro comercial Moctezuma +
Sierras de Granada 9993
+ Mxico D.F. + Mexico + 7/18/1996 + Gravad lax + 20.8 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 7/19/1996 + Jack's New England Clam Chowder + 92.4 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 7/19/1996 + Ravioli Angelo + 780 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 7/19/1996 + Tarte au sucre + 443.25 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 7/19/1996 + Outback Lager + 189 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 7/19/1996 + Sir Rodney's Scones + 160 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 7/19/1996 + Steeleye Stout + 288 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 7/22/1996 + Chef Anton's Gumbo Mix + 163.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 7/22/1996 + Uncle Bob's Organic Dried Pears + 360 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 7/22/1996 + Gnocchi di nonna Alice + 60.8 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/23/1996 + Pavlova + 625.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/23/1996 + Guaran Fantstica + 100.8 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/23/1996 + Nord-Ost Matjeshering + 931.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/23/1996 + Longlife Tofu + 216 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 7/24/1996 + Chang + 532 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 7/24/1996 + Jack's New England Clam Chowder + 163.63 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 7/25/1996 + Alice Mutton + 936 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 7/25/1996 + Outback Lager + 240 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 7/26/1996 + Queso Manchego La Pastora + 346.56 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 7/29/1996 + Boston Crab Meat + 735 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 7/29/1996 + Raclette Courdavault + 2618 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 7/29/1996 + Lakkalikri + 183.6 +
+ + GROSR + GROSELLA-Restaurante +
5 Ave. Los Palos Grandes
+ Caracas + Venezuela + 7/30/1996 + Thringer Rostbratwurst + 990 +
+ + GROSR + GROSELLA-Restaurante +
5 Ave. Los Palos Grandes
+ Caracas + Venezuela + 7/30/1996 + Mozzarella di Giovanni + 111.2 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 7/31/1996 + Geitost + 114 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 7/31/1996 + Mozzarella di Giovanni + 528.2 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 8/1/1996 + Inlagd Sill + 456 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 8/1/1996 + Ipoh Coffee + 920 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 8/1/1996 + Geitost + 48 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/2/1996 + Sir Rodney's Marmalade + 388.8 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/2/1996 + Gorgonzola Telino + 400 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/2/1996 + Mozzarella di Giovanni + 667.2 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/5/1996 + Ikura + 565.44 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/5/1996 + Gorgonzola Telino + 142.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/5/1996 + Geitost + 40 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/5/1996 + Boston Crab Meat + 837.9 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/5/1996 + Lakkalikri + 451.44 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 8/6/1996 + Flotemysost + 344 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 8/6/1996 + Mozzarella di Giovanni + 194.6 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 8/7/1996 + Guaran Fantstica + 41.04 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 8/7/1996 + Raclette Courdavault + 250.8 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 8/8/1996 + Ikura + 372 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 8/8/1996 + Konbu + 48 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 8/9/1996 + Rssle Sauerkraut + 728 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 8/9/1996 + Tarte au sucre + 472.8 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/12/1996 + Gula Malacca + 248 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/12/1996 + Raclette Courdavault + 660 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/12/1996 + Vegie-spread + 280.8 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/12/1996 + Rd Kaviar + 300 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 8/13/1996 + Alice Mutton + 351 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/14/1996 + Guaran Fantstica + 43.2 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/14/1996 + Pt chinois + 384 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/14/1996 + Rhnbru Klosterbier + 186 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 8/14/1996 + Teatime Chocolate Biscuits + 7.3 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 8/14/1996 + Guaran Fantstica + 21.6 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 8/14/1996 + Steeleye Stout + 57.6 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 8/15/1996 + Nord-Ost Matjeshering + 124.2 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 8/15/1996 + Ravioli Angelo + 31.2 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 8/16/1996 + Genen Shouyu + 248 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 8/16/1996 + Teatime Chocolate Biscuits + 131.4 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 8/16/1996 + Camembert Pierrot + 952 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 8/16/1996 + Mozzarella di Giovanni + 83.4 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 8/19/1996 + Schoggi Schokolade + 394.88 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 8/19/1996 + Gula Malacca + 325.5 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 8/19/1996 + Camembert Pierrot + 408 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 8/19/1996 + Laughing Lumberjack Lager + 42 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/20/1996 + Chai + 518.4 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/20/1996 + Boston Crab Meat + 470.4 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/20/1996 + Perth Pasties + 754.56 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/21/1996 + Steeleye Stout + 1440 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 8/21/1996 + Tarte au sucre + 1576 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 8/22/1996 + Pavlova + 472.6 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 8/22/1996 + Sasquatch Ale + 224 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 8/22/1996 + Spegesild + 122.4 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 8/23/1996 + Tourtire + 53.1 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 8/23/1996 + Scottish Longbreads + 27 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 8/26/1996 + Aniseed Syrup + 240 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 8/26/1996 + Wimmers gute Semmelkndel + 239.4 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 8/27/1996 + Chef Anton's Gumbo Mix + 340 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 8/27/1996 + Thringer Rostbratwurst + 1485 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 8/27/1996 + Maxilaku + 240 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 8/27/1996 + Original Frankfurter grne Soe + 104 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 8/27/1996 + Konbu + 86.4 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 8/27/1996 + Gula Malacca + 334.8 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 8/27/1996 + Manjimup Dried Apples + 76.32 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 8/28/1996 + Sir Rodney's Marmalade + 1296 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 8/29/1996 + Carnarvon Tigers + 600 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 8/29/1996 + Guaran Fantstica + 36 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 8/29/1996 + Vegie-spread + 175.5 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 8/29/1996 + Rhnbru Klosterbier + 37.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/30/1996 + Chai + 259.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/30/1996 + Alice Mutton + 468 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/30/1996 + Ipoh Coffee + 552 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/30/1996 + Camembert Pierrot + 571.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 8/30/1996 + Rhnbru Klosterbier + 37.2 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 9/2/1996 + Gnocchi di nonna Alice + 121.6 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 9/3/1996 + Queso Cabrales + 201.6 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 9/3/1996 + Pavlova + 417 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 9/3/1996 + Gudbrandsdalsost + 432 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 9/4/1996 + Chartreuse verte + 864 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 9/4/1996 + Mozzarella di Giovanni + 556 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/5/1996 + Chang + 608 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/5/1996 + Inlagd Sill + 456 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/5/1996 + Raclette Courdavault + 990 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/5/1996 + Tarte au sucre + 591 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 9/6/1996 + Teatime Chocolate Biscuits + 109.5 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 9/6/1996 + Outback Lager + 240 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 9/9/1996 + Louisiana Hot Spiced Okra + 408 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 9/9/1996 + Scottish Longbreads + 200 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/9/1996 + Boston Crab Meat + 147 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/9/1996 + Gnocchi di nonna Alice + 608 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 9/10/1996 + Alice Mutton + 1248 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 9/10/1996 + Rssle Sauerkraut + 1019.2 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 9/10/1996 + Ipoh Coffee + 441.6 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 9/11/1996 + Boston Crab Meat + 529.2 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 9/11/1996 + Louisiana Fiery Hot Pepper Sauce + 453.6 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 9/11/1996 + Scottish Longbreads + 135 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 9/12/1996 + Maxilaku + 480 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 9/12/1996 + Raclette Courdavault + 440 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 9/12/1996 + Flotemysost + 34.4 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 9/13/1996 + Carnarvon Tigers + 1125 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 9/13/1996 + Thringer Rostbratwurst + 2227.5 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 9/13/1996 + Chartreuse verte + 388.8 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 9/16/1996 + Nord-Ost Matjeshering + 207 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 9/16/1996 + Perth Pasties + 262 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 9/16/1996 + Tourtire + 29.5 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 9/17/1996 + Tarte au sucre + 394 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 9/17/1996 + Scottish Longbreads + 30 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 9/18/1996 + Gudbrandsdalsost + 28.8 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 9/18/1996 + Outback Lager + 60 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/19/1996 + Chef Anton's Cajun Seasoning + 352 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/19/1996 + Grandma's Boysenberry Spread + 600 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/19/1996 + Singaporean Hokkien Fried Mee + 22.4 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/19/1996 + Ipoh Coffee + 736 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/19/1996 + Flotemysost + 51.6 +
+ + THEBI + The Big Cheese +
89 Jefferson Way Suite 2
+ Portland + USA + 9/20/1996 + Pavlova + 139 +
+ + THEBI + The Big Cheese +
89 Jefferson Way Suite 2
+ Portland + USA + 9/20/1996 + Tarte au sucre + 197 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 9/20/1996 + Singaporean Hokkien Fried Mee + 67.2 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 9/20/1996 + Gudbrandsdalsost + 201.6 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/23/1996 + Rssle Sauerkraut + 145.6 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/23/1996 + Ipoh Coffee + 883.2 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/23/1996 + Perth Pasties + 524 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/23/1996 + Rhnbru Klosterbier + 62 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 9/24/1996 + Inlagd Sill + 182.4 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 9/25/1996 + Mascarpone Fabioli + 921.6 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 9/25/1996 + Escargots de Bourgogne + 286.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 9/25/1996 + Tarte au sucre + 886.5 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 9/26/1996 + Sasquatch Ale + 156.8 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 9/26/1996 + Outback Lager + 360 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 9/27/1996 + Jack's New England Clam Chowder + 77 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 9/27/1996 + Tarte au sucre + 2758 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 9/30/1996 + Chai + 288 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 10/1/1996 + Jack's New England Clam Chowder + 154 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 10/1/1996 + Lakkalikri + 86.4 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 10/2/1996 + Alice Mutton + 249.6 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 10/2/1996 + Rssle Sauerkraut + 509.6 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 10/2/1996 + Lakkalikri + 432 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 10/3/1996 + Flotemysost + 516 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 10/3/1996 + Steeleye Stout + 144 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 10/4/1996 + Filo Mix + 112 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/7/1996 + Genen Shouyu + 62 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/7/1996 + NuNuCa Nu-Nougat-Creme + 44.8 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/7/1996 + Chartreuse verte + 57.6 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/8/1996 + Pavlova + 248.12 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/8/1996 + Steeleye Stout + 856.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/8/1996 + Spegesild + 288 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/8/1996 + Raclette Courdavault + 1496 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/8/1996 + Vegie-spread + 2386.8 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/9/1996 + Grandma's Boysenberry Spread + 120 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/9/1996 + Konbu + 57.6 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/9/1996 + Tofu + 167.4 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/9/1996 + Gorgonzola Telino + 40 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/9/1996 + Mozzarella di Giovanni + 1112 +
+ + BOLID + Blido Comidas preparadas +
"C/ Araquil, 67"
+ Madrid + Spain + 10/10/1996 + Chef Anton's Cajun Seasoning + 422.4 +
+ + BOLID + Blido Comidas preparadas +
"C/ Araquil, 67"
+ Madrid + Spain + 10/10/1996 + Ravioli Angelo + 249.6 +
+ + BOLID + Blido Comidas preparadas +
"C/ Araquil, 67"
+ Madrid + Spain + 10/10/1996 + Rhnbru Klosterbier + 310 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 10/11/1996 + Chang + 304 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 10/11/1996 + Queso Cabrales + 672 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 10/11/1996 + Nord-Ost Matjeshering + 579.6 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 10/11/1996 + Escargots de Bourgogne + 254.4 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 10/14/1996 + Raclette Courdavault + 396 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 10/14/1996 + Louisiana Fiery Hot Pepper Sauce + 672 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 10/14/1996 + Scottish Longbreads + 100 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 10/15/1996 + Teatime Chocolate Biscuits + 69.35 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 10/15/1996 + Nord-Ost Matjeshering + 157.32 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 10/15/1996 + Cte de Blaye + 4005.2 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 10/15/1996 + Gnocchi di nonna Alice + 346.56 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 10/16/1996 + Gumbr Gummibrchen + 1058.25 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 10/16/1996 + Mozzarella di Giovanni + 590.75 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 10/16/1996 + Tourtire + 88.5 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/17/1996 + Carnarvon Tigers + 1600 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/17/1996 + Singaporean Hokkien Fried Mee + 89.6 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/17/1996 + Zaanse koeken + 97.28 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 10/18/1996 + Tofu + 186 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 10/18/1996 + Sir Rodney's Scones + 72 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 10/18/1996 + Flotemysost + 619.2 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 10/21/1996 + Filo Mix + 44.8 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 10/21/1996 + Scottish Longbreads + 100 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/22/1996 + Chang + 85.12 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/22/1996 + Gorgonzola Telino + 200 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/22/1996 + Mascarpone Fabioli + 122.88 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/22/1996 + Manjimup Dried Apples + 1628.16 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 10/23/1996 + Chef Anton's Cajun Seasoning + 285.12 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1996 + Tunnbrd + 288 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1996 + Gumbr Gummibrchen + 597.6 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1996 + Inlagd Sill + 304 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1996 + Gravad lax + 582.4 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1996 + Mozzarella di Giovanni + 695 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 10/25/1996 + Alice Mutton + 624 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 10/25/1996 + Nord-Ost Matjeshering + 310.5 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/28/1996 + Chef Anton's Cajun Seasoning + 176 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/28/1996 + Alice Mutton + 2074.8 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/28/1996 + Tarte au sucre + 1103.2 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 10/29/1996 + Carnarvon Tigers + 950 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 10/29/1996 + Jack's New England Clam Chowder + 87.78 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 10/29/1996 + Ipoh Coffee + 1398.4 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 10/29/1996 + Geitost + 16 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 10/29/1996 + Raclette Courdavault + 336.6 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/30/1996 + Chang + 291.84 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/30/1996 + Gorgonzola Telino + 448 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/30/1996 + Inlagd Sill + 486.4 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/30/1996 + Pt chinois + 614.4 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 10/31/1996 + Wimmers gute Semmelkndel + 1330 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 10/31/1996 + Scottish Longbreads + 38 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 10/31/1996 + Lakkalikri + 216 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 11/1/1996 + Chef Anton's Cajun Seasoning + 616 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 11/1/1996 + Northwoods Cranberry Sauce + 1680 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/4/1996 + Northwoods Cranberry Sauce + 2240 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/4/1996 + Teatime Chocolate Biscuits + 584 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/4/1996 + Singaporean Hokkien Fried Mee + 100.8 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 11/5/1996 + Alice Mutton + 1010.88 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 11/5/1996 + Gnocchi di nonna Alice + 608 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 11/6/1996 + NuNuCa Nu-Nougat-Creme + 112 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 11/6/1996 + Chartreuse verte + 612 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 11/6/1996 + Boston Crab Meat + 58.8 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 11/6/1996 + Rhnbru Klosterbier + 31.62 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 11/7/1996 + Chai + 183.6 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 11/7/1996 + Tunnbrd + 180 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 11/8/1996 + Tourtire + 141.6 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 11/11/1996 + Valkoinen suklaa + 175.5 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 11/11/1996 + Gudbrandsdalsost + 466.56 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/11/1996 + Cte de Blaye + 4005.2 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/11/1996 + Jack's New England Clam Chowder + 100.1 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/11/1996 + Gula Malacca + 1133.82 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/11/1996 + Louisiana Fiery Hot Pepper Sauce + 159.6 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 11/12/1996 + Guaran Fantstica + 36 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 11/12/1996 + Tourtire + 100.3 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 11/13/1996 + Queso Cabrales + 161.28 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 11/13/1996 + Cte de Blaye + 8432 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 11/14/1996 + Chai + 172.8 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 11/14/1996 + Thringer Rostbratwurst + 396 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 11/15/1996 + Guaran Fantstica + 90 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 11/15/1996 + Ravioli Angelo + 390 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 11/18/1996 + Gorgonzola Telino + 300 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 11/18/1996 + Pt chinois + 230.4 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 11/18/1996 + Gudbrandsdalsost + 576 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 11/19/1996 + Ikura + 595.2 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 11/19/1996 + Gumbr Gummibrchen + 398.4 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 11/19/1996 + Camembert Pierrot + 174.08 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 11/20/1996 + Guaran Fantstica + 34.2 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 11/20/1996 + Sasquatch Ale + 106.4 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 11/20/1996 + Inlagd Sill + 288.8 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 11/21/1996 + Pavlova + 739.48 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 11/21/1996 + Gorgonzola Telino + 665 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 11/21/1996 + Camembert Pierrot + 2067.2 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 11/22/1996 + Rssle Sauerkraut + 1092 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 11/22/1996 + Thringer Rostbratwurst + 3465 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 11/22/1996 + Cte de Blaye + 2108 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 11/22/1996 + Maxilaku + 560 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 11/22/1996 + Tourtire + 165.2 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/22/1996 + Chartreuse verte + 699.84 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/22/1996 + Camembert Pierrot + 1346.4 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/25/1996 + NuNuCa Nu-Nougat-Creme + 560 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/25/1996 + Manjimup Dried Apples + 848 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/25/1996 + Tourtire + 141.6 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 11/26/1996 + Gorgonzola Telino + 200 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 11/26/1996 + Rhnbru Klosterbier + 74.4 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 11/26/1996 + Lakkalikri + 172.8 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 11/26/1996 + Gudbrandsdalsost + 864 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 11/26/1996 + Flotemysost + 86 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 11/27/1996 + Queso Cabrales + 403.2 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 11/28/1996 + Louisiana Fiery Hot Pepper Sauce + 84 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 11/28/1996 + Original Frankfurter grne Soe + 52 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 11/28/1996 + Sasquatch Ale + 403.2 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 11/28/1996 + Tourtire + 106.2 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 11/28/1996 + Louisiana Fiery Hot Pepper Sauce + 252 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 11/28/1996 + Original Frankfurter grne Soe + 72.8 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/29/1996 + Sir Rodney's Scones + 36 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/29/1996 + Rssle Sauerkraut + 425.88 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/29/1996 + Ravioli Angelo + 390 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 11/29/1996 + Wimmers gute Semmelkndel + 837.9 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 12/2/1996 + Thringer Rostbratwurst + 1980 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 12/2/1996 + Gnocchi di nonna Alice + 410.4 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 12/3/1996 + Chai + 183.6 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 12/3/1996 + Wimmers gute Semmelkndel + 798 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 12/3/1996 + Longlife Tofu + 136 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 12/3/1996 + Inlagd Sill + 72.96 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 12/4/1996 + Sir Rodney's Marmalade + 583.2 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 12/4/1996 + Cte de Blaye + 6324 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 12/4/1996 + Camembert Pierrot + 1428 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 12/4/1996 + Mozzarella di Giovanni + 875.7 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 12/5/1996 + Escargots de Bourgogne + 678.4 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 12/5/1996 + Flotemysost + 688 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 12/5/1996 + Gorgonzola Telino + 300 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 12/5/1996 + Escargots de Bourgogne + 159 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 12/6/1996 + Tofu + 279 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 12/6/1996 + Tourtire + 59 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 12/9/1996 + Gorgonzola Telino + 399 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/9/1996 + Rssle Sauerkraut + 618.8 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/9/1996 + Chartreuse verte + 244.8 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 12/10/1996 + Flotemysost + 103.2 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 12/11/1996 + Jack's New England Clam Chowder + 55.44 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 12/11/1996 + Vegie-spread + 505.44 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 12/11/1996 + Louisiana Fiery Hot Pepper Sauce + 302.4 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 12/12/1996 + Nord-Ost Matjeshering + 335.34 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 12/12/1996 + Perth Pasties + 471.6 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 12/12/1996 + Camembert Pierrot + 146.88 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 12/12/1996 + Outback Lager + 360 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 12/12/1996 + Longlife Tofu + 112 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/13/1996 + Chef Anton's Gumbo Mix + 544 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/13/1996 + Carnarvon Tigers + 450 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/13/1996 + Thringer Rostbratwurst + 1386 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/13/1996 + Geitost + 120 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/13/1996 + Longlife Tofu + 400 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/16/1996 + Konbu + 96 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/16/1996 + Valkoinen suklaa + 195 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/16/1996 + Gnocchi di nonna Alice + 608 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 12/16/1996 + Sir Rodney's Marmalade + 1814.4 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 12/16/1996 + Camembert Pierrot + 408 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 12/17/1996 + Uncle Bob's Organic Dried Pears + 192 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 12/17/1996 + Camembert Pierrot + 435.2 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 12/17/1996 + Scottish Longbreads + 64 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 12/18/1996 + Guaran Fantstica + 54 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 12/18/1996 + Sasquatch Ale + 112 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 12/18/1996 + Guaran Fantstica + 54 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 12/18/1996 + Rssle Sauerkraut + 218.4 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 12/18/1996 + Raclette Courdavault + 528 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 12/18/1996 + Flotemysost + 258 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/19/1996 + Rogede sild + 91.2 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/19/1996 + Filo Mix + 89.6 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/19/1996 + Perth Pasties + 1048 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 12/20/1996 + Ikura + 396.8 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 12/20/1996 + Pt chinois + 288 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 12/20/1996 + Tarte au sucre + 788 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 12/20/1996 + Outback Lager + 360 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/23/1996 + Gorgonzola Telino + 540 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/23/1996 + Steeleye Stout + 518.4 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/23/1996 + Spegesild + 432 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/23/1996 + Mozzarella di Giovanni + 600.48 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 12/23/1996 + Konbu + 86.4 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 12/24/1996 + Gudbrandsdalsost + 1440 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 12/25/1996 + Chang + 285 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 12/25/1996 + Tofu + 585.9 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 12/25/1996 + NuNuCa Nu-Nougat-Creme + 58.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 12/25/1996 + Gumbr Gummibrchen + 1307.25 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 12/25/1996 + Gorgonzola Telino + 320 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 12/25/1996 + Konbu + 48 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 12/25/1996 + Tarte au sucre + 394 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 12/26/1996 + Spegesild + 241.92 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 12/26/1996 + Perth Pasties + 1650.6 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 12/26/1996 + Gudbrandsdalsost + 230.4 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 12/27/1996 + Tunnbrd + 288 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 12/27/1996 + Flotemysost + 1032 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 12/27/1996 + Mozzarella di Giovanni + 583.8 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 12/27/1996 + Sir Rodney's Scones + 68 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 12/27/1996 + Manjimup Dried Apples + 648.72 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 12/30/1996 + Steeleye Stout + 432 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 12/30/1996 + Pt chinois + 2073.6 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/31/1996 + Scottish Longbreads + 600 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/31/1996 + Flotemysost + 516 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/31/1996 + Lakkalikri + 504 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/31/1996 + Original Frankfurter grne Soe + 145.6 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 1/1/1997 + Thringer Rostbratwurst + 2079 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 1/1/1997 + Steeleye Stout + 504 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 1/1/1997 + Maxilaku + 480 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/1/1997 + Nord-Ost Matjeshering + 372.6 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/1/1997 + Gnocchi di nonna Alice + 2128 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/1/1997 + Louisiana Fiery Hot Pepper Sauce + 336 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/1/1997 + Flotemysost + 1032 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/2/1997 + Tunnbrd + 432 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/2/1997 + Vegie-spread + 2281.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/3/1997 + Pavlova + 248.12 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/3/1997 + Chocolade + 606.9 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 1/3/1997 + Gumbr Gummibrchen + 709.65 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 1/3/1997 + Singaporean Hokkien Fried Mee + 425.6 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 1/3/1997 + Maxilaku + 456 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/6/1997 + Aniseed Syrup + 400 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 1/7/1997 + Chai + 144 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 1/7/1997 + Sir Rodney's Scones + 216 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 1/7/1997 + Rssle Sauerkraut + 1375.92 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 1/7/1997 + Inlagd Sill + 68.4 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 1/7/1997 + Boston Crab Meat + 26.46 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 1/7/1997 + Queso Cabrales + 504 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 1/7/1997 + Gudbrandsdalsost + 432 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 1/7/1997 + Flotemysost + 258 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 1/8/1997 + Gravad lax + 208 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 1/8/1997 + Tourtire + 35.4 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 1/8/1997 + Tarte au sucre + 1379 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 1/9/1997 + Tofu + 223.2 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 1/9/1997 + Sir Rodney's Scones + 96 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/10/1997 + Geitost + 98 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/10/1997 + Raclette Courdavault + 704 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/10/1997 + Jack's New England Clam Chowder + 154 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/10/1997 + Gula Malacca + 496 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/10/1997 + Raclette Courdavault + 316.8 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 1/13/1997 + Tofu + 334.8 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/14/1997 + Chai + 345.6 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/14/1997 + Tarte au sucre + 1576 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/14/1997 + Lakkalikri + 201.6 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 1/14/1997 + Teatime Chocolate Biscuits + 124.83 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 1/14/1997 + Geitost + 100 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 1/15/1997 + Alice Mutton + 62.4 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 1/15/1997 + Geitost + 40 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 1/16/1997 + Teatime Chocolate Biscuits + 146 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 1/16/1997 + Perth Pasties + 262 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 1/16/1997 + Ravioli Angelo + 312 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 1/16/1997 + Cte de Blaye + 10540 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 1/16/1997 + Spegesild + 14.4 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 1/16/1997 + Scottish Longbreads + 270 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 1/16/1997 + Original Frankfurter grne Soe + 364 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/17/1997 + Chang + 912 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/17/1997 + Zaanse koeken + 418 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/17/1997 + Sirop d'rable + 364.8 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/17/1997 + Longlife Tofu + 120 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 1/20/1997 + Camembert Pierrot + 1550.4 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 1/20/1997 + Gudbrandsdalsost + 547.2 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 1/21/1997 + Mishi Kobe Niku + 1396.8 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 1/21/1997 + Konbu + 8.64 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 1/21/1997 + Outback Lager + 86.4 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 1/21/1997 + Rd Kaviar + 216 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 1/21/1997 + Teatime Chocolate Biscuits + 24.82 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 1/21/1997 + Gumbr Gummibrchen + 747 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 1/21/1997 + Perth Pasties + 334.05 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 1/21/1997 + Original Frankfurter grne Soe + 88.4 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 1/22/1997 + Gumbr Gummibrchen + 49.8 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 1/23/1997 + Gorgonzola Telino + 140 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 1/23/1997 + Raclette Courdavault + 880 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 1/23/1997 + Steeleye Stout + 691.2 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 1/23/1997 + Cte de Blaye + 8263.36 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 1/23/1997 + Scottish Longbreads + 240 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/24/1997 + Pt chinois + 144 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/24/1997 + Lakkalikri + 216 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 1/27/1997 + Gnocchi di nonna Alice + 152 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 1/27/1997 + Wimmers gute Semmelkndel + 186.2 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 1/27/1997 + Tofu + 651 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 1/28/1997 + Spegesild + 192 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 1/29/1997 + Valkoinen suklaa + 520 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 1/29/1997 + Vegie-spread + 921.37 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/30/1997 + Alice Mutton + 1123.2 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/30/1997 + Sir Rodney's Scones + 400 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/30/1997 + Gnocchi di nonna Alice + 912 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/30/1997 + Raclette Courdavault + 2464 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/30/1997 + Alice Mutton + 1170 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/30/1997 + Boston Crab Meat + 551.25 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 1/30/1997 + Zaanse koeken + 171 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 1/31/1997 + Gumbr Gummibrchen + 249 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 1/31/1997 + Tourtire + 236 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 2/3/1997 + Gnocchi di nonna Alice + 851.2 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/3/1997 + Queso Cabrales + 100.8 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/3/1997 + Lakkalikri + 220.32 +
+ + CONSH + Consolidated Holdings +
Berkeley Gardens 12 Brewery
+ London + UK + 2/4/1997 + Chang + 152 +
+ + CONSH + Consolidated Holdings +
Berkeley Gardens 12 Brewery
+ London + UK + 2/4/1997 + Gustaf's Knckebrd + 201.6 +
+ + CONSH + Consolidated Holdings +
Berkeley Gardens 12 Brewery
+ London + UK + 2/4/1997 + Mozzarella di Giovanni + 278 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 2/5/1997 + Spegesild + 48 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 2/5/1997 + Gnocchi di nonna Alice + 1094.4 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 2/5/1997 + Wimmers gute Semmelkndel + 718.2 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 2/5/1997 + Rhnbru Klosterbier + 133.92 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 2/5/1997 + Perth Pasties + 393 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 2/6/1997 + Teatime Chocolate Biscuits + 87.6 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 2/6/1997 + Sasquatch Ale + 179.2 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 2/6/1997 + Ravioli Angelo + 187.2 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 2/7/1997 + Queso Manchego La Pastora + 456 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 2/7/1997 + Pavlova + 222.4 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 2/7/1997 + Wimmers gute Semmelkndel + 159.6 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 2/7/1997 + Longlife Tofu + 240 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/10/1997 + Chang + 581.4 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/10/1997 + Pavlova + 578.94 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/10/1997 + Thringer Rostbratwurst + 2019.6 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/10/1997 + Sirop d'rable + 1744.2 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 2/10/1997 + Schoggi Schokolade + 1755 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 2/11/1997 + Queso Cabrales + 504 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 2/11/1997 + Tourtire + 472 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 2/11/1997 + Louisiana Hot Spiced Okra + 816 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 2/12/1997 + Queso Cabrales + 80.64 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 2/12/1997 + Rssle Sauerkraut + 436.8 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/12/1997 + Alice Mutton + 312 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/12/1997 + Gumbr Gummibrchen + 373.5 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/12/1997 + Steeleye Stout + 115.2 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/12/1997 + Jack's New England Clam Chowder + 231 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/13/1997 + Chartreuse verte + 86.4 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/13/1997 + Tourtire + 88.5 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 2/14/1997 + Teatime Chocolate Biscuits + 78.84 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 2/14/1997 + Guaran Fantstica + 64.8 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 2/14/1997 + Gorgonzola Telino + 27 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 2/14/1997 + Filo Mix + 75.6 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 2/14/1997 + Teatime Chocolate Biscuits + 292 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 2/14/1997 + Louisiana Fiery Hot Pepper Sauce + 588 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 2/14/1997 + Flotemysost + 34.4 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 2/17/1997 + Gumbr Gummibrchen + 149.4 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 2/17/1997 + Boston Crab Meat + 294 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 2/18/1997 + Ikura + 347.2 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 2/18/1997 + Filo Mix + 112 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 2/18/1997 + Tarte au sucre + 1379 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 2/19/1997 + Ikura + 396.8 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 2/19/1997 + Tourtire + 28.32 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 2/19/1997 + Pt chinois + 2073.6 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 2/19/1997 + Wimmers gute Semmelkndel + 837.9 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 2/19/1997 + Louisiana Fiery Hot Pepper Sauce + 423.36 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 2/19/1997 + Original Frankfurter grne Soe + 514.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/20/1997 + Rssle Sauerkraut + 546 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/20/1997 + Gula Malacca + 1472.5 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 2/21/1997 + Chocolade + 137.7 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 2/21/1997 + Outback Lager + 270 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 2/21/1997 + Pavlova + 222.4 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 2/21/1997 + Geitost + 32 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 2/21/1997 + Spegesild + 76.8 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 2/24/1997 + Chartreuse verte + 288 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 2/24/1997 + Perth Pasties + 1310 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 2/24/1997 + Sirop d'rable + 570 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 2/24/1997 + Flotemysost + 516 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/25/1997 + Sir Rodney's Scones + 272 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/25/1997 + Maxilaku + 285.6 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/25/1997 + Raclette Courdavault + 1584 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/26/1997 + Gumbr Gummibrchen + 747 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/26/1997 + Rssle Sauerkraut + 1092 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/26/1997 + Ipoh Coffee + 736 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/26/1997 + Gnocchi di nonna Alice + 456 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/26/1997 + Flotemysost + 860 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 2/27/1997 + Uncle Bob's Organic Dried Pears + 364.8 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 2/27/1997 + Spegesild + 182.4 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 2/27/1997 + Mozzarella di Giovanni + 1112 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/28/1997 + Scottish Longbreads + 157.5 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/28/1997 + Rhnbru Klosterbier + 18.6 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 2/28/1997 + Sir Rodney's Scones + 240 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 2/28/1997 + Nord-Ost Matjeshering + 434.7 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 2/28/1997 + Pt chinois + 864 +
+ + CONSH + Consolidated Holdings +
Berkeley Gardens 12 Brewery
+ London + UK + 3/3/1997 + Konbu + 4.8 +
+ + CONSH + Consolidated Holdings +
Berkeley Gardens 12 Brewery
+ London + UK + 3/3/1997 + Tunnbrd + 151.2 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/4/1997 + Teatime Chocolate Biscuits + 153.3 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/4/1997 + Singaporean Hokkien Fried Mee + 560 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 3/4/1997 + Chef Anton's Cajun Seasoning + 225.28 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 3/4/1997 + Ipoh Coffee + 110.4 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 3/4/1997 + Gnocchi di nonna Alice + 729.6 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 3/4/1997 + Camembert Pierrot + 544 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/5/1997 + Guaran Fantstica + 90 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/5/1997 + Thringer Rostbratwurst + 1603.8 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/5/1997 + Boston Crab Meat + 294 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/5/1997 + Rogede sild + 205.2 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/5/1997 + Valkoinen suklaa + 325 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 3/6/1997 + Queso Cabrales + 168 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 3/6/1997 + Spegesild + 48 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 3/6/1997 + Guaran Fantstica + 100.8 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 3/6/1997 + NuNuCa Nu-Nougat-Creme + 134.4 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 3/7/1997 + Nord-Ost Matjeshering + 165.6 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 3/7/1997 + Ipoh Coffee + 552 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 3/10/1997 + Chang + 516.8 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 3/10/1997 + Pavlova + 413.53 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 3/10/1997 + Gula Malacca + 26.35 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/11/1997 + Carnarvon Tigers + 1500 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/11/1997 + Tunnbrd + 108 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/11/1997 + Wimmers gute Semmelkndel + 212.8 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/11/1997 + Uncle Bob's Organic Dried Pears + 720 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/11/1997 + Gnocchi di nonna Alice + 608 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 3/12/1997 + Guaran Fantstica + 273.6 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 3/12/1997 + Manjimup Dried Apples + 763.2 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 3/13/1997 + Geitost + 24 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 3/13/1997 + Flotemysost + 206.4 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 3/13/1997 + Tofu + 223.2 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 3/13/1997 + Rssle Sauerkraut + 655.2 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 3/13/1997 + Boston Crab Meat + 308.7 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 3/13/1997 + Rhnbru Klosterbier + 62 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/14/1997 + Gorgonzola Telino + 297.5 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/14/1997 + Louisiana Hot Spiced Okra + 693.6 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/14/1997 + Lakkalikri + 514.08 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/17/1997 + Pt chinois + 36.48 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/17/1997 + Outback Lager + 144 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 3/17/1997 + Chai + 216 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 3/17/1997 + Sir Rodney's Scones + 126 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 3/17/1997 + Chartreuse verte + 216 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 3/18/1997 + Ikura + 471.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 3/19/1997 + Cte de Blaye + 6324 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 3/19/1997 + Perth Pasties + 733.6 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 3/19/1997 + Raclette Courdavault + 2640 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 3/19/1997 + Wimmers gute Semmelkndel + 798 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 3/20/1997 + Zaanse koeken + 228 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 3/20/1997 + Raclette Courdavault + 528 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 3/20/1997 + Maxilaku + 384 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 3/20/1997 + Camembert Pierrot + 1088 +
+ + LAZYK + Lazy K Kountry Store +
12 Orchestra Terrace
+ Walla Walla + USA + 3/21/1997 + Boston Crab Meat + 147 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 3/24/1997 + Sasquatch Ale + 372.4 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 3/24/1997 + Original Frankfurter grne Soe + 296.4 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/24/1997 + Sir Rodney's Scones + 112 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/24/1997 + Boston Crab Meat + 147 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/24/1997 + Manjimup Dried Apples + 127.2 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/25/1997 + Chang + 273.6 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/25/1997 + Aniseed Syrup + 144 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/25/1997 + Pt chinois + 518.4 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/25/1997 + Outback Lager + 648 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/26/1997 + Queso Cabrales + 84 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/26/1997 + Manjimup Dried Apples + 1060 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/26/1997 + Longlife Tofu + 128 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 3/26/1997 + Teatime Chocolate Biscuits + 36.5 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 3/26/1997 + Gumbr Gummibrchen + 747 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 3/26/1997 + Tourtire + 106.2 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 3/27/1997 + Raclette Courdavault + 1320 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 3/27/1997 + Rd Kaviar + 192 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 3/28/1997 + Queso Cabrales + 189 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 3/28/1997 + Pavlova + 250.2 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/31/1997 + Raclette Courdavault + 2640 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/31/1997 + Scottish Longbreads + 300 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/31/1997 + Rhnbru Klosterbier + 223.2 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 3/31/1997 + Gula Malacca + 197.63 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 3/31/1997 + Original Frankfurter grne Soe + 61.88 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 4/1/1997 + NuNuCa Nu-Nougat-Creme + 638.4 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 4/1/1997 + Singaporean Hokkien Fried Mee + 212.8 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 4/2/1997 + Louisiana Fiery Hot Pepper Sauce + 226.8 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 4/2/1997 + Louisiana Hot Spiced Okra + 122.4 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 4/2/1997 + Gudbrandsdalsost + 259.2 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 4/2/1997 + Gnocchi di nonna Alice + 912 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 4/3/1997 + Tunnbrd + 72 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 4/3/1997 + Jack's New England Clam Chowder + 154 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 4/3/1997 + Original Frankfurter grne Soe + 52 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 4/4/1997 + Gorgonzola Telino + 190 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 4/4/1997 + Gnocchi di nonna Alice + 425.6 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 4/4/1997 + Mozzarella di Giovanni + 695 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 4/4/1997 + Original Frankfurter grne Soe + 260 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 4/7/1997 + Guaran Fantstica + 63 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 4/7/1997 + Boston Crab Meat + 92 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 4/7/1997 + Singaporean Hokkien Fried Mee + 420 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 4/8/1997 + Rssle Sauerkraut + 912 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 4/8/1997 + Maxilaku + 500 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 4/9/1997 + Genen Shouyu + 176.7 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 4/9/1997 + Rssle Sauerkraut + 346.56 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 4/9/1997 + Tourtire + 149 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 4/10/1997 + Rogede sild + 199.5 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 4/10/1997 + Perth Pasties + 196.8 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 4/10/1997 + Laughing Lumberjack Lager + 420 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/11/1997 + Tofu + 1627.5 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/11/1997 + Louisiana Fiery Hot Pepper Sauce + 421 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 4/11/1997 + Chang + 228 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 4/11/1997 + Sir Rodney's Scones + 120 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 4/11/1997 + Perth Pasties + 328 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 4/11/1997 + Sirop d'rable + 712.5 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 4/14/1997 + Tarte au sucre + 147.9 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 4/15/1997 + NuNuCa Nu-Nougat-Creme + 226.8 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 4/15/1997 + Outback Lager + 189 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 4/15/1997 + Ipoh Coffee + 586.5 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 4/15/1997 + Chocolade + 162.56 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 4/16/1997 + Konbu + 60 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 4/16/1997 + Chartreuse verte + 180 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 4/17/1997 + Rssle Sauerkraut + 136.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/18/1997 + Thringer Rostbratwurst + 4456.44 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/18/1997 + Rhnbru Klosterbier + 251.1 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 4/18/1997 + Chef Anton's Cajun Seasoning + 935 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 4/18/1997 + Uncle Bob's Organic Dried Pears + 1275 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 4/18/1997 + Northwoods Cranberry Sauce + 340 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 4/21/1997 + Guaran Fantstica + 38.25 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 4/21/1997 + Spegesild + 91.8 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 4/21/1997 + Zaanse koeken + 48.45 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 4/21/1997 + Camembert Pierrot + 346.8 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 4/22/1997 + Sir Rodney's Scones + 320 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 4/22/1997 + Mascarpone Fabioli + 1280 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 4/22/1997 + Sirop d'rable + 342 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/22/1997 + Sir Rodney's Marmalade + 3159 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/22/1997 + Rssle Sauerkraut + 1596 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/22/1997 + Gnocchi di nonna Alice + 2660 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/22/1997 + Louisiana Fiery Hot Pepper Sauce + 820.95 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/22/1997 + Rhnbru Klosterbier + 387.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/23/1997 + Mishi Kobe Niku + 1319.2 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/23/1997 + Pavlova + 872.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/23/1997 + Schoggi Schokolade + 5268 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/23/1997 + Geitost + 34 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/23/1997 + Camembert Pierrot + 2427.6 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/24/1997 + Carnarvon Tigers + 1406.25 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/24/1997 + Jack's New England Clam Chowder + 694.8 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/24/1997 + Singaporean Hokkien Fried Mee + 280 +
+ + NORTS + North/South +
South House 300 Queensbridge
+ London + UK + 4/24/1997 + Filo Mix + 42 +
+ + NORTS + North/South +
South House 300 Queensbridge
+ London + UK + 4/24/1997 + Raclette Courdavault + 220 +
+ + NORTS + North/South +
South House 300 Queensbridge
+ London + UK + 4/24/1997 + Outback Lager + 90 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 4/25/1997 + Guaran Fantstica + 22.5 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 4/25/1997 + Cte de Blaye + 3952.5 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 4/25/1997 + Gula Malacca + 175.05 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 4/28/1997 + Ikura + 471.2 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 4/28/1997 + Gnocchi di nonna Alice + 1520 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 4/28/1997 + Camembert Pierrot + 323 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 4/29/1997 + Guaran Fantstica + 36 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 4/29/1997 + Perth Pasties + 164 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 4/29/1997 + Steeleye Stout + 54 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 4/29/1997 + Jack's New England Clam Chowder + 96.5 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 4/29/1997 + Scottish Longbreads + 75 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 4/30/1997 + Chai + 576 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 4/30/1997 + Northwoods Cranberry Sauce + 960 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 4/30/1997 + Nord-Ost Matjeshering + 414.24 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 4/30/1997 + Boston Crab Meat + 368 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 5/1/1997 + Alice Mutton + 877.5 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 5/1/1997 + Sir Rodney's Marmalade + 1093.5 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 5/1/1997 + Gravad lax + 421.2 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 5/1/1997 + Jack's New England Clam Chowder + 52.11 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 5/1/1997 + Ikura + 62 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 5/1/1997 + Nord-Ost Matjeshering + 258.9 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 5/1/1997 + Ipoh Coffee + 2760 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 5/1/1997 + Tourtire + 111.75 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 5/2/1997 + Inlagd Sill + 570 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 5/2/1997 + Boston Crab Meat + 248.4 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/5/1997 + Chai + 122.4 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/5/1997 + Konbu + 60 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/5/1997 + Gnocchi di nonna Alice + 969 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/5/1997 + Chef Anton's Cajun Seasoning + 990 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/5/1997 + Inlagd Sill + 513 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 5/6/1997 + Queso Cabrales + 63 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 5/6/1997 + Geitost + 16 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 5/6/1997 + Mozzarella di Giovanni + 313.2 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 5/7/1997 + Pt chinois + 336 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 5/7/1997 + Scottish Longbreads + 250 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 5/7/1997 + Gudbrandsdalsost + 360 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 5/8/1997 + Alice Mutton + 1560 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 5/8/1997 + Ipoh Coffee + 1150 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 5/8/1997 + Sirop d'rable + 570 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 5/8/1997 + Lakkalikri + 900 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 5/8/1997 + Raclette Courdavault + 110 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 5/9/1997 + Nord-Ost Matjeshering + 388.35 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 5/9/1997 + Louisiana Hot Spiced Okra + 408 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 5/12/1997 + Chef Anton's Cajun Seasoning + 1045 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 5/12/1997 + Mozzarella di Giovanni + 835.2 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 5/12/1997 + Rd Kaviar + 342 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/12/1997 + Nord-Ost Matjeshering + 258.9 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/12/1997 + Boston Crab Meat + 147.2 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/12/1997 + Tourtire + 59.6 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 5/13/1997 + Queso Cabrales + 945 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 5/13/1997 + Boston Crab Meat + 165.6 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 5/13/1997 + Ravioli Angelo + 87.75 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 5/13/1997 + Raclette Courdavault + 742.5 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/14/1997 + Queso Manchego La Pastora + 427.5 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/14/1997 + Gorgonzola Telino + 250 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/14/1997 + Geitost + 75 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/14/1997 + Camembert Pierrot + 892.5 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/14/1997 + Gorgonzola Telino + 375 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/14/1997 + Manjimup Dried Apples + 318 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/14/1997 + Escargots de Bourgogne + 265 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/14/1997 + Mozzarella di Giovanni + 730.8 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/14/1997 + Rd Kaviar + 135 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 5/15/1997 + Outback Lager + 105 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 5/15/1997 + Mozzarella di Giovanni + 34.8 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 5/16/1997 + Konbu + 48 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 5/16/1997 + Sir Rodney's Scones + 150 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 5/16/1997 + Geitost + 37.5 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 5/16/1997 + Maxilaku + 120 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/19/1997 + Aniseed Syrup + 600 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/19/1997 + Gumbr Gummibrchen + 1249.2 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/19/1997 + Cte de Blaye + 7905 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/19/1997 + Scottish Longbreads + 437.5 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 5/19/1997 + Guaran Fantstica + 141.75 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 5/19/1997 + Cte de Blaye + 948.6 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 5/19/1997 + Louisiana Fiery Hot Pepper Sauce + 682.02 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 5/19/1997 + Flotemysost + 174.15 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 5/20/1997 + Queso Cabrales + 299.25 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 5/20/1997 + Tourtire + 169.86 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 5/21/1997 + Queso Manchego La Pastora + 969 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 5/21/1997 + Tunnbrd + 535.5 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 5/21/1997 + Rssle Sauerkraut + 319.2 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 5/21/1997 + Laughing Lumberjack Lager + 98 +
+ + LAZYK + Lazy K Kountry Store +
12 Orchestra Terrace
+ Walla Walla + USA + 5/22/1997 + Queso Cabrales + 210 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 5/23/1997 + Uncle Bob's Organic Dried Pears + 300 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 5/23/1997 + Steeleye Stout + 540 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 5/23/1997 + Tarte au sucre + 1972 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 5/23/1997 + Mascarpone Fabioli + 652.8 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 5/23/1997 + Inlagd Sill + 1140 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 5/26/1997 + Sasquatch Ale + 105 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 5/26/1997 + Jack's New England Clam Chowder + 135.1 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/27/1997 + Gorgonzola Telino + 584.38 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/27/1997 + Rogede sild + 807.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 5/27/1997 + Manjimup Dried Apples + 2162.4 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 5/28/1997 + Alice Mutton + 280.8 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 5/28/1997 + Teatime Chocolate Biscuits + 92 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 5/28/1997 + Sir Rodney's Scones + 54 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 5/28/1997 + Sirop d'rable + 256.5 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 5/28/1997 + Pavlova + 593.3 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 5/28/1997 + Steeleye Stout + 306 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 5/28/1997 + Gula Malacca + 778 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 5/29/1997 + Gudbrandsdalsost + 648 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 5/29/1997 + Rhnbru Klosterbier + 232.5 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/30/1997 + Queso Cabrales + 315 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/30/1997 + Pavlova + 244.3 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/30/1997 + Gustaf's Knckebrd + 504 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/30/1997 + Gorgonzola Telino + 375 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 5/30/1997 + Steeleye Stout + 108 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 5/30/1997 + Pavlova + 497.32 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 5/30/1997 + Tunnbrd + 171 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 5/30/1997 + Tarte au sucre + 936.7 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 5/30/1997 + Original Frankfurter grne Soe + 123.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 6/2/1997 + Tofu + 558 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 6/2/1997 + Teatime Chocolate Biscuits + 257.6 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 6/2/1997 + Guaran Fantstica + 64.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 6/2/1997 + Manjimup Dried Apples + 848 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 6/2/1997 + Gnocchi di nonna Alice + 1216 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 6/3/1997 + Mozzarella di Giovanni + 835.2 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 6/3/1997 + Wimmers gute Semmelkndel + 997.5 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 6/3/1997 + Rhnbru Klosterbier + 155 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 6/4/1997 + Zaanse koeken + 237.5 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 6/4/1997 + Manjimup Dried Apples + 1060 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 6/4/1997 + Filo Mix + 210 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 6/4/1997 + Perth Pasties + 590.4 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 6/4/1997 + Rd Kaviar + 45 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 6/5/1997 + Jack's New England Clam Chowder + 110.01 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 6/5/1997 + Pt chinois + 410.4 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 6/6/1997 + Nord-Ost Matjeshering + 517.8 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 6/6/1997 + Tarte au sucre + 554.62 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 6/6/1997 + Gula Malacca + 194.5 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 6/6/1997 + Manjimup Dried Apples + 2650 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 6/9/1997 + Geitost + 45 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 6/9/1997 + Tarte au sucre + 443.7 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 6/10/1997 + Inlagd Sill + 475 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 6/10/1997 + Filo Mix + 490 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 6/10/1997 + Alice Mutton + 592.8 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 6/10/1997 + Gorgonzola Telino + 71.25 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 6/10/1997 + Pt chinois + 570 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 6/11/1997 + Guaran Fantstica + 101.25 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 6/11/1997 + Wimmers gute Semmelkndel + 538.65 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 6/12/1997 + Queso Cabrales + 624.75 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 6/12/1997 + Carnarvon Tigers + 956.25 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 6/12/1997 + Lakkalikri + 180 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 6/12/1997 + Gorgonzola Telino + 600 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 6/12/1997 + Manjimup Dried Apples + 159 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 6/12/1997 + Raclette Courdavault + 1760 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 6/13/1997 + Ikura + 155 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 6/16/1997 + Gorgonzola Telino + 350 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 6/16/1997 + Lakkalikri + 540 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 6/17/1997 + Queso Cabrales + 299.25 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 6/17/1997 + Gnocchi di nonna Alice + 2166 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 6/17/1997 + Tofu + 217.39 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 6/17/1997 + Singaporean Hokkien Fried Mee + 333.2 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 6/18/1997 + Pavlova + 188.46 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 6/18/1997 + Mascarpone Fabioli + 288 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 6/18/1997 + Boston Crab Meat + 920 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 6/18/1997 + Rhnbru Klosterbier + 104.62 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 6/19/1997 + Alice Mutton + 702 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 6/19/1997 + Sasquatch Ale + 560 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 6/19/1997 + Perth Pasties + 820 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 6/19/1997 + Geitost + 35 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 6/19/1997 + Boston Crab Meat + 36.8 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 6/19/1997 + Tarte au sucre + 493 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 6/19/1997 + Wimmers gute Semmelkndel + 199.5 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 6/20/1997 + Raclette Courdavault + 660 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 6/20/1997 + Vegie-spread + 263.4 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 6/20/1997 + Mozzarella di Giovanni + 1044 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 6/20/1997 + Lakkalikri + 180 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 6/23/1997 + Chai + 180 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 6/23/1997 + Gorgonzola Telino + 250 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 6/23/1997 + Gula Malacca + 408.45 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 6/23/1997 + Chartreuse verte + 180 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 6/23/1997 + Rhnbru Klosterbier + 155 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 6/23/1997 + Original Frankfurter grne Soe + 234 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 6/24/1997 + Steeleye Stout + 360 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 6/24/1997 + Ravioli Angelo + 117 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 6/25/1997 + Genen Shouyu + 155 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 6/25/1997 + Rhnbru Klosterbier + 162.75 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 6/26/1997 + Tofu + 331.31 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 6/26/1997 + Jack's New England Clam Chowder + 82.51 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 6/26/1997 + Louisiana Fiery Hot Pepper Sauce + 599.92 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 6/26/1997 + Rhnbru Klosterbier + 310 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 6/27/1997 + Ravioli Angelo + 78 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 6/27/1997 + Lakkalikri + 252 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 6/30/1997 + Thringer Rostbratwurst + 1237.9 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 6/30/1997 + Camembert Pierrot + 693.6 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 6/30/1997 + Gudbrandsdalsost + 306 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 6/30/1997 + Gorgonzola Telino + 593.75 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 7/1/1997 + Zaanse koeken + 142.5 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 7/2/1997 + Filo Mix + 23.8 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 7/2/1997 + Gumbr Gummibrchen + 187.38 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 7/2/1997 + Steeleye Stout + 360 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 7/2/1997 + Original Frankfurter grne Soe + 260 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 7/3/1997 + Carnarvon Tigers + 2000 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 7/3/1997 + Singaporean Hokkien Fried Mee + 1120 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 7/4/1997 + Steeleye Stout + 72 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 7/7/1997 + Chai + 360 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 7/7/1997 + Original Frankfurter grne Soe + 741 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 7/7/1997 + Aniseed Syrup + 140 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 7/7/1997 + Uncle Bob's Organic Dried Pears + 300 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 7/7/1997 + Tourtire + 372.5 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 7/8/1997 + Genen Shouyu + 368.13 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 7/8/1997 + Gumbr Gummibrchen + 148.34 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 7/9/1997 + Sir Rodney's Marmalade + 1360.8 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 7/9/1997 + Gudbrandsdalsost + 576 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 7/9/1997 + Lakkalikri + 57.6 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 7/9/1997 + Filo Mix + 168 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 7/9/1997 + Escargots de Bourgogne + 397.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/10/1997 + Steeleye Stout + 405 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/10/1997 + Sirop d'rable + 2565 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 7/10/1997 + Gudbrandsdalsost + 1755 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 7/11/1997 + Gnocchi di nonna Alice + 152 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 7/11/1997 + Vegie-spread + 842.88 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 7/11/1997 + Rhnbru Klosterbier + 186 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 7/11/1997 + Guaran Fantstica + 126 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 7/11/1997 + Ravioli Angelo + 390 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 7/11/1997 + Louisiana Fiery Hot Pepper Sauce + 202.08 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 7/14/1997 + Schoggi Schokolade + 2195 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 7/14/1997 + Flotemysost + 193.5 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 7/15/1997 + Tarte au sucre + 493 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 7/16/1997 + Tourtire + 29.8 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 7/16/1997 + Rd Kaviar + 450 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 7/16/1997 + Konbu + 360 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 7/16/1997 + Raclette Courdavault + 1925 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 7/17/1997 + Original Frankfurter grne Soe + 48.75 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/18/1997 + Gustaf's Knckebrd + 1008 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/18/1997 + Maxilaku + 475 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 7/18/1997 + Chocolade + 68.85 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 7/18/1997 + Lakkalikri + 162 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 7/21/1997 + Pavlova + 497.32 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 7/21/1997 + Raclette Courdavault + 1045 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 7/21/1997 + Camembert Pierrot + 2261 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 7/21/1997 + Flotemysost + 306.38 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 7/22/1997 + Chef Anton's Cajun Seasoning + 352 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 7/22/1997 + Pt chinois + 384 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 7/22/1997 + Tarte au sucre + 394.4 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/22/1997 + Uncle Bob's Organic Dried Pears + 1350 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/22/1997 + Alice Mutton + 3900 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/22/1997 + Geitost + 35 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/22/1997 + Boston Crab Meat + 772.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/22/1997 + Mozzarella di Giovanni + 417.6 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 7/23/1997 + Gnocchi di nonna Alice + 1064 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 7/24/1997 + Chai + 54 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 7/24/1997 + Ikura + 310 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 7/24/1997 + Sir Rodney's Scones + 60 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 7/25/1997 + Inlagd Sill + 299.25 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 7/25/1997 + Chai + 108 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 7/25/1997 + Chang + 190 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 7/25/1997 + Camembert Pierrot + 510 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/28/1997 + Ikura + 2170 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/28/1997 + Inlagd Sill + 1045 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/28/1997 + Maxilaku + 360 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/28/1997 + Camembert Pierrot + 1360 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 7/28/1997 + Lakkalikri + 1440 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 7/29/1997 + Konbu + 43.2 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 7/29/1997 + Rhnbru Klosterbier + 310 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 7/29/1997 + Queso Cabrales + 294 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 7/29/1997 + Sir Rodney's Scones + 80 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 7/29/1997 + Chartreuse verte + 90 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 7/30/1997 + Pt chinois + 120 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 7/31/1997 + Cte de Blaye + 3754.88 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 7/31/1997 + Gnocchi di nonna Alice + 532 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 7/31/1997 + Outback Lager + 213.75 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 7/31/1997 + Flotemysost + 306.38 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 7/31/1997 + Raclette Courdavault + 1402.5 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 8/1/1997 + Grandma's Boysenberry Spread + 1750 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 8/1/1997 + Gnocchi di nonna Alice + 760 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 8/1/1997 + Scottish Longbreads + 187.5 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 8/4/1997 + Sir Rodney's Scones + 420 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 8/4/1997 + Gustaf's Knckebrd + 840 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 8/5/1997 + Guaran Fantstica + 22.5 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 8/5/1997 + Filo Mix + 35 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 8/5/1997 + Teatime Chocolate Biscuits + 46 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 8/5/1997 + Tunnbrd + 90 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 8/5/1997 + Outback Lager + 300 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 8/5/1997 + Flotemysost + 322.5 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 8/6/1997 + Chang + 380 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 8/6/1997 + Scottish Longbreads + 180 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 8/7/1997 + Tofu + 488.25 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 8/7/1997 + Teatime Chocolate Biscuits + 124.2 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 8/7/1997 + Sir Rodney's Scones + 225 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 8/7/1997 + Guaran Fantstica + 13.5 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 8/7/1997 + Steeleye Stout + 486 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 8/7/1997 + Rssle Sauerkraut + 456 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 8/7/1997 + Thringer Rostbratwurst + 742.74 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 8/7/1997 + Gula Malacca + 194.5 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 8/8/1997 + Tofu + 69.75 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 8/8/1997 + Singaporean Hokkien Fried Mee + 70 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 8/8/1997 + Camembert Pierrot + 340 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/11/1997 + Perth Pasties + 393.6 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/11/1997 + Camembert Pierrot + 680 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 8/11/1997 + Flotemysost + 430 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 8/11/1997 + Tarte au sucre + 739.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 8/11/1997 + Rd Kaviar + 446.25 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 8/12/1997 + Chai + 450 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 8/12/1997 + Thringer Rostbratwurst + 2475.8 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 8/12/1997 + Wimmers gute Semmelkndel + 299.25 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 8/13/1997 + Pt chinois + 273.6 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 8/13/1997 + Lakkalikri + 630 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 8/14/1997 + Rhnbru Klosterbier + 55.8 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 8/14/1997 + Chang + 541.5 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 8/14/1997 + Geitost + 47.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 8/15/1997 + Queso Manchego La Pastora + 1162.8 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 8/15/1997 + Konbu + 66.3 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 8/15/1997 + Gumbr Gummibrchen + 929.09 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 8/15/1997 + Tarte au sucre + 3352.4 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 8/15/1997 + Uncle Bob's Organic Dried Pears + 1050 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 8/15/1997 + Carnarvon Tigers + 3125 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 8/15/1997 + Manjimup Dried Apples + 795 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 8/15/1997 + Rhnbru Klosterbier + 15.5 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 8/18/1997 + Chef Anton's Cajun Seasoning + 198 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 8/18/1997 + Chef Anton's Gumbo Mix + 288.23 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 8/18/1997 + Gustaf's Knckebrd + 840 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 8/19/1997 + Chef Anton's Cajun Seasoning + 550 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 8/19/1997 + Escargots de Bourgogne + 79.5 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 8/19/1997 + Queso Cabrales + 210 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 8/19/1997 + Valkoinen suklaa + 385.94 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 8/19/1997 + Gnocchi di nonna Alice + 2166 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 8/20/1997 + Rogede sild + 190 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 8/20/1997 + Louisiana Fiery Hot Pepper Sauce + 442.05 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 8/20/1997 + Mozzarella di Giovanni + 2088 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 8/20/1997 + Carnarvon Tigers + 500 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 8/21/1997 + Gudbrandsdalsost + 540 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 8/21/1997 + Outback Lager + 168.75 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 8/22/1997 + Chang + 950 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 8/22/1997 + Boston Crab Meat + 1104 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 8/22/1997 + Sir Rodney's Scones + 240 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 8/22/1997 + Sirop d'rable + 456 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 8/25/1997 + Rssle Sauerkraut + 513 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 8/25/1997 + Chartreuse verte + 283.5 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 8/25/1997 + Spegesild + 18 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 8/25/1997 + Carnarvon Tigers + 225 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 8/25/1997 + Ipoh Coffee + 920 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 8/25/1997 + Spegesild + 226.8 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 8/26/1997 + Carnarvon Tigers + 1250 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 8/26/1997 + Inlagd Sill + 285 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 8/27/1997 + Chai + 202.5 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 8/27/1997 + Ikura + 418.5 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 8/27/1997 + Flotemysost + 483.75 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 8/27/1997 + Original Frankfurter grne Soe + 341.25 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 8/27/1997 + Teatime Chocolate Biscuits + 276 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 8/27/1997 + Chartreuse verte + 360 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 8/28/1997 + Gustaf's Knckebrd + 315 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 8/28/1997 + Guaran Fantstica + 57.38 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 8/28/1997 + Rssle Sauerkraut + 912 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 8/28/1997 + Mozzarella di Giovanni + 522 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 8/29/1997 + Nord-Ost Matjeshering + 776.7 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 8/29/1997 + Perth Pasties + 779 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 8/29/1997 + Tourtire + 223.5 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/1/1997 + Teatime Chocolate Biscuits + 82.8 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/1/1997 + Gustaf's Knckebrd + 315 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 9/1/1997 + Nord-Ost Matjeshering + 38.83 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 9/1/1997 + Singaporean Hokkien Fried Mee + 280 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/2/1997 + Pavlova + 471.15 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/2/1997 + Camembert Pierrot + 612 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 9/2/1997 + Chef Anton's Cajun Seasoning + 237.6 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 9/2/1997 + Chartreuse verte + 324 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 9/2/1997 + Tourtire + 40.23 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 9/3/1997 + Jack's New England Clam Chowder + 154.4 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 9/4/1997 + Tofu + 62.77 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 9/4/1997 + Gula Malacca + 490.14 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 9/4/1997 + Zaanse koeken + 51.3 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/4/1997 + Genen Shouyu + 775 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/4/1997 + Jack's New England Clam Chowder + 231.6 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/4/1997 + Spegesild + 540 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/4/1997 + Zaanse koeken + 95 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/4/1997 + Gnocchi di nonna Alice + 1710 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/4/1997 + Camembert Pierrot + 1020 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 9/5/1997 + Sir Rodney's Scones + 600 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 9/5/1997 + Boston Crab Meat + 1223.6 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 9/5/1997 + Camembert Pierrot + 1776.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 9/5/1997 + Original Frankfurter grne Soe + 864.5 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 9/5/1997 + Gorgonzola Telino + 237.5 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 9/5/1997 + Boston Crab Meat + 419.52 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 9/5/1997 + Outback Lager + 570 +
+ + HUNGC + Hungry Coyote Import Store +
City Center Plaza 516 Main St.
+ Elgin + USA + 9/8/1997 + Sir Rodney's Marmalade + 1701 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/9/1997 + Chartreuse verte + 43.2 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/9/1997 + Escargots de Bourgogne + 519.4 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 9/9/1997 + Scottish Longbreads + 125 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 9/10/1997 + Boston Crab Meat + 524.4 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 9/10/1997 + Singaporean Hokkien Fried Mee + 399 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 9/10/1997 + Manjimup Dried Apples + 1007 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 9/10/1997 + Ikura + 632.4 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 9/10/1997 + Gnocchi di nonna Alice + 387.6 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 9/10/1997 + Louisiana Fiery Hot Pepper Sauce + 268.39 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 9/11/1997 + Manjimup Dried Apples + 1060 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 9/11/1997 + Raclette Courdavault + 55 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 9/11/1997 + Lakkalikri + 180 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 9/12/1997 + Thringer Rostbratwurst + 4456.44 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 9/12/1997 + Louisiana Fiery Hot Pepper Sauce + 210.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 9/12/1997 + Gudbrandsdalsost + 1296 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 9/12/1997 + Flotemysost + 240.8 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/15/1997 + Gorgonzola Telino + 90 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/15/1997 + Pt chinois + 86.4 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 9/15/1997 + Wimmers gute Semmelkndel + 448.87 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 9/15/1997 + Inlagd Sill + 570 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/16/1997 + Tunnbrd + 288 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/16/1997 + Spegesild + 720 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/16/1997 + Laughing Lumberjack Lager + 350 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/16/1997 + Rd Kaviar + 750 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/16/1997 + Rhnbru Klosterbier + 193.75 +
+ + FRANR + France restauration +
"54, rue Royale"
+ Nantes + France + 9/17/1997 + Pavlova + 174.5 +
+ + FRANR + France restauration +
"54, rue Royale"
+ Nantes + France + 9/17/1997 + Tarte au sucre + 493 +
+ + FRANR + France restauration +
"54, rue Royale"
+ Nantes + France + 9/17/1997 + Louisiana Fiery Hot Pepper Sauce + 252.6 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 9/17/1997 + Cte de Blaye + 3557.25 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 9/17/1997 + Flotemysost + 258 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 9/18/1997 + Pavlova + 52.35 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 9/18/1997 + Singaporean Hokkien Fried Mee + 84 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 9/18/1997 + Ipoh Coffee + 276 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 9/18/1997 + Tunnbrd + 45 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/19/1997 + Tofu + 697.5 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/19/1997 + Perth Pasties + 328 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 9/19/1997 + Escargots de Bourgogne + 397.5 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 9/22/1997 + Ikura + 62 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 9/22/1997 + Teatime Chocolate Biscuits + 64.4 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 9/22/1997 + Gula Malacca + 408.45 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 9/22/1997 + Gumbr Gummibrchen + 796.37 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 9/22/1997 + Geitost + 17 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/23/1997 + Queso Manchego La Pastora + 3800 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/23/1997 + Geitost + 75 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/23/1997 + Jack's New England Clam Chowder + 1158 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 9/23/1997 + Tourtire + 223.5 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 9/23/1997 + Raclette Courdavault + 660 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 9/24/1997 + Pavlova + 654.37 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 9/24/1997 + Gorgonzola Telino + 187.5 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 9/24/1997 + Singaporean Hokkien Fried Mee + 420 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 9/25/1997 + Teatime Chocolate Biscuits + 248.4 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 9/25/1997 + Sir Rodney's Scones + 108 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 9/25/1997 + Wimmers gute Semmelkndel + 931 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 9/25/1997 + Geitost + 75 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 9/25/1997 + Louisiana Hot Spiced Okra + 68 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 9/25/1997 + Rhnbru Klosterbier + 232.5 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 9/26/1997 + Filo Mix + 63 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 9/26/1997 + Boston Crab Meat + 368 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 9/26/1997 + Zaanse koeken + 380 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 9/26/1997 + Camembert Pierrot + 1020 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 9/29/1997 + Ikura + 620 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 9/29/1997 + Jack's New England Clam Chowder + 38.6 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 9/29/1997 + Zaanse koeken + 142.5 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 9/30/1997 + Alice Mutton + 936 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 9/30/1997 + Gumbr Gummibrchen + 468.45 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/30/1997 + Mishi Kobe Niku + 3637.5 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/30/1997 + Thringer Rostbratwurst + 1237.9 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 9/30/1997 + Inlagd Sill + 85.5 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 10/1/1997 + Ikura + 502.2 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 10/1/1997 + Rssle Sauerkraut + 2462.4 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 10/1/1997 + Sasquatch Ale + 196 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 10/1/1997 + Chai + 472.5 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 10/2/1997 + Gnocchi di nonna Alice + 570 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 10/2/1997 + Original Frankfurter grne Soe + 292.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/3/1997 + Chai + 540 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/3/1997 + Thringer Rostbratwurst + 4951.6 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/3/1997 + Ipoh Coffee + 1840 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/3/1997 + Gula Malacca + 466.8 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/3/1997 + Tarte au sucre + 2366.4 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 10/3/1997 + Vegie-spread + 878 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 10/6/1997 + Mishi Kobe Niku + 582 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 10/6/1997 + Tourtire + 379.95 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 10/6/1997 + Gudbrandsdalsost + 918 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 10/6/1997 + Rd Kaviar + 191.25 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/6/1997 + Uncle Bob's Organic Dried Pears + 2700 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/6/1997 + Raclette Courdavault + 1375 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/6/1997 + Outback Lager + 750 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 10/7/1997 + Northwoods Cranberry Sauce + 400 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 10/7/1997 + Queso Manchego La Pastora + 152 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 10/7/1997 + Guaran Fantstica + 90 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 10/8/1997 + Alice Mutton + 780 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 10/8/1997 + Spegesild + 216 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 10/8/1997 + Teatime Chocolate Biscuits + 48.3 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 10/8/1997 + Steeleye Stout + 121.5 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 10/8/1997 + Escargots de Bourgogne + 298.13 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 10/8/1997 + Outback Lager + 337.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 10/9/1997 + Queso Cabrales + 315 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 10/9/1997 + Alice Mutton + 296.4 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 10/9/1997 + Thringer Rostbratwurst + 1411.21 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 10/9/1997 + Louisiana Fiery Hot Pepper Sauce + 1299.84 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 10/9/1997 + Outback Lager + 114 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 10/9/1997 + Zaanse koeken + 114 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/10/1997 + Chai + 72 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/10/1997 + Sasquatch Ale + 134.4 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/10/1997 + Scottish Longbreads + 400 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/10/1997 + Flotemysost + 1032 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/13/1997 + Raclette Courdavault + 1963.5 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/13/1997 + Flotemysost + 365.5 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/13/1997 + Lakkalikri + 535.5 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 10/13/1997 + Aniseed Syrup + 60 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 10/13/1997 + Lakkalikri + 270 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 10/14/1997 + Chang + 95 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 10/14/1997 + Raclette Courdavault + 1925 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 10/14/1997 + Rd Kaviar + 525 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 10/14/1997 + Chef Anton's Cajun Seasoning + 132 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 10/14/1997 + Guaran Fantstica + 157.5 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 10/14/1997 + Chocolade + 306 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 10/15/1997 + Gorgonzola Telino + 250 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 10/15/1997 + Mascarpone Fabioli + 128 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 10/16/1997 + Pavlova + 349 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 10/16/1997 + Ipoh Coffee + 1104 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 10/16/1997 + Raclette Courdavault + 440 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 10/16/1997 + Pt chinois + 504 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 10/16/1997 + Ravioli Angelo + 780 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 10/16/1997 + Outback Lager + 357 +
+ + THEBI + The Big Cheese +
89 Jefferson Way Suite 2
+ Portland + USA + 10/17/1997 + Chef Anton's Gumbo Mix + 85.4 +
+ + THEBI + The Big Cheese +
89 Jefferson Way Suite 2
+ Portland + USA + 10/17/1997 + Inlagd Sill + 95 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 10/17/1997 + Northwoods Cranberry Sauce + 1600 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 10/17/1997 + Manjimup Dried Apples + 1484 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 10/17/1997 + Camembert Pierrot + 340 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 10/20/1997 + Teatime Chocolate Biscuits + 46 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 10/20/1997 + Zaanse koeken + 47.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/21/1997 + Teatime Chocolate Biscuits + 110.4 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/21/1997 + Jack's New England Clam Chowder + 405.3 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/21/1997 + Perth Pasties + 3936 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/21/1997 + Perth Pasties + 93.48 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 10/21/1997 + Gnocchi di nonna Alice + 1140 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Ikura + 558 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Gumbr Gummibrchen + 936.9 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Rogede sild + 1045 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Spegesild + 288 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Chang + 427.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Alice Mutton + 789.75 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Zaanse koeken + 356.25 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Gnocchi di nonna Alice + 513 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/22/1997 + Escargots de Bourgogne + 119.25 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 10/23/1997 + Ikura + 651 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 10/23/1997 + Flotemysost + 645 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 10/24/1997 + Sir Rodney's Scones + 50 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 10/24/1997 + Manjimup Dried Apples + 371 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 10/24/1997 + Sirop d'rable + 285 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1997 + Sir Rodney's Scones + 304 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1997 + Tourtire + 111.75 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 10/24/1997 + Gudbrandsdalsost + 855 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/27/1997 + Queso Manchego La Pastora + 1368 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/27/1997 + Pavlova + 349 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/27/1997 + Inlagd Sill + 760 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 10/27/1997 + Tarte au sucre + 986 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 10/27/1997 + Carnarvon Tigers + 562.5 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 10/27/1997 + Nord-Ost Matjeshering + 58.25 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 10/27/1997 + Tourtire + 223.5 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 10/28/1997 + Steeleye Stout + 378 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 10/28/1997 + Flotemysost + 172 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 10/29/1997 + Gula Malacca + 923.88 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/29/1997 + Chang + 57 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/29/1997 + Gorgonzola Telino + 625 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/29/1997 + Scottish Longbreads + 562.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 10/29/1997 + Rhnbru Klosterbier + 325.5 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 10/30/1997 + Gumbr Gummibrchen + 468.45 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/30/1997 + Ikura + 496 +
+ + MEREP + Mre Paillarde +
43 rue St. Laurent
+ Montral + Canada + 10/30/1997 + Sirop d'rable + 142.5 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 10/31/1997 + Jack's New England Clam Chowder + 115.8 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 10/31/1997 + Filo Mix + 28 +
+ + FAMIA + Familia Arquibaldo +
"Rua Ors, 92"
+ Sao Paulo + Brazil + 10/31/1997 + Pt chinois + 144 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 11/3/1997 + Chef Anton's Cajun Seasoning + 550 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 11/3/1997 + Queso Cabrales + 105 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 11/3/1997 + Alice Mutton + 741 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 11/3/1997 + Gnocchi di nonna Alice + 361 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 11/3/1997 + Raclette Courdavault + 522.5 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 11/4/1997 + Nord-Ost Matjeshering + 388.35 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 11/4/1997 + Boston Crab Meat + 110.4 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 11/4/1997 + Pt chinois + 288 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 11/4/1997 + Camembert Pierrot + 510 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 11/4/1997 + Chai + 900 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 11/4/1997 + Sir Rodney's Scones + 300 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 11/4/1997 + Valkoinen suklaa + 650 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/5/1997 + Pavlova + 248.66 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/5/1997 + Gorgonzola Telino + 35.62 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/5/1997 + Louisiana Fiery Hot Pepper Sauce + 199.97 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 11/6/1997 + Sir Rodney's Scones + 380 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 11/6/1997 + Manjimup Dried Apples + 1510.5 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/6/1997 + Lakkalikri + 360 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 11/7/1997 + Tofu + 372 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 11/7/1997 + Rssle Sauerkraut + 912 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 11/7/1997 + Filo Mix + 175 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 11/7/1997 + Grandma's Boysenberry Spread + 750 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 11/7/1997 + Nord-Ost Matjeshering + 388.35 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 11/7/1997 + Lakkalikri + 360 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 11/10/1997 + Sirop d'rable + 513 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 11/10/1997 + Original Frankfurter grne Soe + 23.4 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 11/11/1997 + Louisiana Fiery Hot Pepper Sauce + 842 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 11/11/1997 + Rhnbru Klosterbier + 155 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 11/11/1997 + Konbu + 24 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 11/11/1997 + Jack's New England Clam Chowder + 115.8 +
+ + SPECD + Spcialits du monde +
"25, rue Lauriston"
+ Paris + France + 11/12/1997 + Pavlova + 52.35 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 11/12/1997 + Inlagd Sill + 114 +
+ + VINET + Vins et alcools Chevalier +
59 rue de l'Abbaye
+ Reims + France + 11/12/1997 + Filo Mix + 126 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 11/13/1997 + Rssle Sauerkraut + 182.4 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 11/13/1997 + Steeleye Stout + 504 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 11/13/1997 + Rogede sild + 304 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 11/13/1997 + Gnocchi di nonna Alice + 425.6 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 11/14/1997 + Chang + 228 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 11/14/1997 + Aniseed Syrup + 200 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 11/14/1997 + Camembert Pierrot + 1700 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 11/14/1997 + Mozzarella di Giovanni + 1218 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 11/17/1997 + Spegesild + 319.2 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 11/17/1997 + Boston Crab Meat + 736 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/18/1997 + Carnarvon Tigers + 1500 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/18/1997 + Gula Malacca + 311.2 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/18/1997 + Raclette Courdavault + 2475 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 11/18/1997 + Mozzarella di Giovanni + 243.6 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 11/19/1997 + Konbu + 36 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 11/19/1997 + Singaporean Hokkien Fried Mee + 392 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 11/19/1997 + Tarte au sucre + 443.7 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 11/19/1997 + Gudbrandsdalsost + 1440 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 11/19/1997 + Gorgonzola Telino + 100 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 11/19/1997 + Jack's New England Clam Chowder + 337.75 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 11/19/1997 + Vegie-spread + 395.1 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 11/19/1997 + Gudbrandsdalsost + 1080 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 11/20/1997 + Tunnbrd + 396 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 11/20/1997 + Boston Crab Meat + 736 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 11/20/1997 + Gnocchi di nonna Alice + 1064 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 11/20/1997 + Gnocchi di nonna Alice + 570 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 11/20/1997 + Raclette Courdavault + 330 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 11/20/1997 + Lakkalikri + 180 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 11/21/1997 + Tofu + 98.81 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 11/21/1997 + Rogede sild + 323 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 11/21/1997 + Raclette Courdavault + 1168.75 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 11/24/1997 + Gumbr Gummibrchen + 337.28 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 11/24/1997 + Nord-Ost Matjeshering + 776.7 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 11/24/1997 + Valkoinen suklaa + 292.5 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 11/24/1997 + Rd Kaviar + 225 +
+ + NORTS + North/South +
South House 300 Queensbridge
+ London + UK + 11/24/1997 + Chai + 144 +
+ + NORTS + North/South +
South House 300 Queensbridge
+ London + UK + 11/24/1997 + Gudbrandsdalsost + 108 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 11/25/1997 + Rogede sild + 38 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 11/25/1997 + Longlife Tofu + 50 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 11/25/1997 + Boston Crab Meat + 55.2 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/26/1997 + Zaanse koeken + 213.75 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/26/1997 + Gnocchi di nonna Alice + 855 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/26/1997 + Ravioli Angelo + 204.75 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 11/26/1997 + Gudbrandsdalsost + 675 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 11/27/1997 + Carnarvon Tigers + 1050 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 11/27/1997 + Inlagd Sill + 304 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 11/27/1997 + Scottish Longbreads + 60 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 11/27/1997 + Gudbrandsdalsost + 576 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 11/27/1997 + Sasquatch Ale + 420 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 11/27/1997 + Raclette Courdavault + 385 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 11/27/1997 + Tarte au sucre + 1479 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 11/27/1997 + Wimmers gute Semmelkndel + 798 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 11/28/1997 + Gumbr Gummibrchen + 624.6 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 11/28/1997 + Filo Mix + 420 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 11/28/1997 + Outback Lager + 600 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 11/28/1997 + Mascarpone Fabioli + 320 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 12/1/1997 + NuNuCa Nu-Nougat-Creme + 126 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 12/1/1997 + Schoggi Schokolade + 1756 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 12/1/1997 + Ipoh Coffee + 1035 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 12/2/1997 + NuNuCa Nu-Nougat-Creme + 367.5 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 12/2/1997 + Rhnbru Klosterbier + 139.5 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 12/2/1997 + Chartreuse verte + 288 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 12/2/1997 + Zaanse koeken + 285 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 12/2/1997 + Manjimup Dried Apples + 1484 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 12/2/1997 + Gnocchi di nonna Alice + 2280 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 12/3/1997 + Sir Rodney's Scones + 400 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 12/3/1997 + Gustaf's Knckebrd + 126 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 12/3/1997 + Guaran Fantstica + 90 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/3/1997 + Aniseed Syrup + 180 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/3/1997 + Chartreuse verte + 2106 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 12/4/1997 + Louisiana Fiery Hot Pepper Sauce + 1515.6 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 12/5/1997 + Chang + 760 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 12/5/1997 + Uncle Bob's Organic Dried Pears + 1050 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 12/5/1997 + Scottish Longbreads + 500 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 12/5/1997 + Singaporean Hokkien Fried Mee + 28 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/8/1997 + Gustaf's Knckebrd + 84 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/8/1997 + Gorgonzola Telino + 625 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/8/1997 + Camembert Pierrot + 510 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/8/1997 + Flotemysost + 258 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/8/1997 + Jack's New England Clam Chowder + 275.02 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/8/1997 + Filo Mix + 99.75 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/8/1997 + Sirop d'rable + 570 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 12/8/1997 + Tarte au sucre + 739.5 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 12/9/1997 + Queso Cabrales + 236.25 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/10/1997 + Flotemysost + 344 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 12/10/1997 + Thringer Rostbratwurst + 2228.22 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 12/10/1997 + Raclette Courdavault + 1375 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/11/1997 + Alice Mutton + 1287 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/11/1997 + Gorgonzola Telino + 700 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/11/1997 + Rhnbru Klosterbier + 43.4 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 12/11/1997 + Gorgonzola Telino + 18.75 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 12/11/1997 + Louisiana Hot Spiced Okra + 850 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 12/12/1997 + Ikura + 186 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 12/12/1997 + Laughing Lumberjack Lager + 42 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/15/1997 + Gorgonzola Telino + 190 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/15/1997 + Singaporean Hokkien Fried Mee + 159.6 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/15/1997 + Rogede sild + 243.67 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/15/1997 + Manjimup Dried Apples + 6042 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 12/15/1997 + Singaporean Hokkien Fried Mee + 224 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 12/16/1997 + Jack's New England Clam Chowder + 96.5 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 12/16/1997 + Pavlova + 349 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 12/16/1997 + Tarte au sucre + 986 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 12/16/1997 + Outback Lager + 525 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 12/16/1997 + Original Frankfurter grne Soe + 195 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 12/17/1997 + Tourtire + 17.88 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 12/17/1997 + Gnocchi di nonna Alice + 608 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 12/17/1997 + Longlife Tofu + 350 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 12/17/1997 + Gorgonzola Telino + 12.5 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 12/18/1997 + Gorgonzola Telino + 125 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 12/18/1997 + Cte de Blaye + 1317.5 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 12/18/1997 + Inlagd Sill + 570 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 12/18/1997 + Chartreuse verte + 30.6 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 12/18/1997 + Mozzarella di Giovanni + 887.4 +
+ + GROSR + GROSELLA-Restaurante +
5 Ave. Los Palos Grandes
+ Caracas + Venezuela + 12/18/1997 + Ikura + 310 +
+ + GROSR + GROSELLA-Restaurante +
5 Ave. Los Palos Grandes
+ Caracas + Venezuela + 12/18/1997 + Rhnbru Klosterbier + 77.5 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 12/19/1997 + Northwoods Cranberry Sauce + 960 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 12/19/1997 + Nord-Ost Matjeshering + 310.68 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 12/19/1997 + Rhnbru Klosterbier + 260.4 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 12/19/1997 + Chang + 270.75 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 12/19/1997 + Thringer Rostbratwurst + 2352.01 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 12/22/1997 + Teatime Chocolate Biscuits + 437 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 12/22/1997 + Rhnbru Klosterbier + 294.5 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 12/22/1997 + Carnarvon Tigers + 1875 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 12/22/1997 + Steeleye Stout + 270 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 12/22/1997 + Vegie-spread + 1317 +
+ + FOLIG + Folies gourmandes +
"184, chausse de Tournai"
+ Lille + France + 12/22/1997 + Scottish Longbreads + 225 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 12/22/1997 + Uncle Bob's Organic Dried Pears + 76.5 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 12/22/1997 + Gnocchi di nonna Alice + 646 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 12/23/1997 + Thringer Rostbratwurst + 1646.41 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 12/23/1997 + Jack's New England Clam Chowder + 183.35 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 12/23/1997 + Chang + 190 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 12/23/1997 + Tourtire + 22.35 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 12/23/1997 + Scottish Longbreads + 187.5 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/24/1997 + Jack's New England Clam Chowder + 135.1 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 12/24/1997 + Filo Mix + 56 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 12/24/1997 + Tofu + 279 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 12/24/1997 + Tourtire + 35.76 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/24/1997 + Pavlova + 1134.25 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 12/24/1997 + Alice Mutton + 1023.75 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 12/25/1997 + Gumbr Gummibrchen + 524.66 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 12/25/1997 + Gula Malacca + 194.5 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 12/25/1997 + Wimmers gute Semmelkndel + 931 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 12/25/1997 + Gudbrandsdalsost + 691.2 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 12/25/1997 + Queso Cabrales + 420 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 12/26/1997 + Tarte au sucre + 98.6 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 12/26/1997 + Mozzarella di Giovanni + 348 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 12/26/1997 + Konbu + 102 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 12/26/1997 + Guaran Fantstica + 76.5 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 12/26/1997 + Raclette Courdavault + 1375 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/26/1997 + Queso Cabrales + 945 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/26/1997 + Manjimup Dried Apples + 477 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/26/1997 + Tourtire + 46.94 +
+ + BOLID + Blido Comidas preparadas +
"C/ Araquil, 67"
+ Madrid + Spain + 12/29/1997 + Alice Mutton + 1170 +
+ + BOLID + Blido Comidas preparadas +
"C/ Araquil, 67"
+ Madrid + Spain + 12/29/1997 + Thringer Rostbratwurst + 1856.85 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 12/29/1997 + Nord-Ost Matjeshering + 485.44 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 12/29/1997 + Manjimup Dried Apples + 1192.5 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 12/29/1997 + Pt chinois + 1080 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 12/29/1997 + Tarte au sucre + 184.87 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 12/30/1997 + Teatime Chocolate Biscuits + 209.76 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 12/30/1997 + NuNuCa Nu-Nougat-Creme + 199.5 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 12/30/1997 + Raclette Courdavault + 783.75 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/30/1997 + Ikura + 1116 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/30/1997 + Rssle Sauerkraut + 1094.4 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 12/30/1997 + Maxilaku + 68 +
+ + THEBI + The Big Cheese +
89 Jefferson Way Suite 2
+ Portland + USA + 12/30/1997 + Sasquatch Ale + 140 +
+ + THEBI + The Big Cheese +
89 Jefferson Way Suite 2
+ Portland + USA + 12/30/1997 + Cte de Blaye + 2635 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 12/31/1997 + Chang + 285 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 12/31/1997 + Louisiana Fiery Hot Pepper Sauce + 42.1 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 12/31/1997 + Longlife Tofu + 112.5 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 12/31/1997 + Boston Crab Meat + 18.4 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 1/1/1998 + Gnocchi di nonna Alice + 646 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 1/1/1998 + Lakkalikri + 765 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 1/1/1998 + Filo Mix + 140 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 1/1/1998 + Konbu + 42 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 1/1/1998 + NuNuCa Nu-Nougat-Creme + 70 +
+ + LAUGB + Laughing Bacchus Wine Cellars +
1900 Oak St.
+ Vancouver + Canada + 1/1/1998 + Outback Lager + 75 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/2/1998 + Teatime Chocolate Biscuits + 138 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/2/1998 + Tunnbrd + 162 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/2/1998 + Boston Crab Meat + 552 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 1/2/1998 + Gorgonzola Telino + 180 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 1/2/1998 + Mozzarella di Giovanni + 1252.8 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 1/2/1998 + Original Frankfurter grne Soe + 260 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 1/5/1998 + Chang + 182.4 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 1/5/1998 + Spegesild + 420 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/5/1998 + Jack's New England Clam Chowder + 193 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/5/1998 + Ipoh Coffee + 782 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/5/1998 + Chocolade + 86.7 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/5/1998 + Sirop d'rable + 726.75 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 1/5/1998 + Geitost + 40 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 1/6/1998 + Cte de Blaye + 7509.75 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 1/6/1998 + Tarte au sucre + 936.7 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 1/6/1998 + Gumbr Gummibrchen + 1061.82 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 1/6/1998 + Cte de Blaye + 7905 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 1/6/1998 + Boston Crab Meat + 938.4 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 1/6/1998 + Tarte au sucre + 1047.62 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 1/7/1998 + Mascarpone Fabioli + 640 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 1/7/1998 + Jack's New England Clam Chowder + 193 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 1/7/1998 + Ipoh Coffee + 322 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 1/7/1998 + Rhnbru Klosterbier + 155 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/7/1998 + Gnocchi di nonna Alice + 1140 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 1/8/1998 + Steeleye Stout + 360 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 1/8/1998 + Manjimup Dried Apples + 318 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 1/8/1998 + Tarte au sucre + 147.9 +
+ + TRAIH + Trail's Head Gourmet Provisioners +
722 DaVinci Blvd.
+ Kirkland + USA + 1/8/1998 + Outback Lager + 90 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 1/9/1998 + Queso Cabrales + 378 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 1/9/1998 + Ravioli Angelo + 292.5 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 1/9/1998 + Raclette Courdavault + 1980 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 1/9/1998 + Original Frankfurter grne Soe + 175.5 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 1/9/1998 + Jack's New England Clam Chowder + 115.8 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 1/9/1998 + Outback Lager + 135 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 1/9/1998 + Gumbr Gummibrchen + 374.76 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 1/9/1998 + Perth Pasties + 656 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 1/12/1998 + Gorgonzola Telino + 437.5 +
+ + BLONP + Blondesddsl pre et fils +
"24, place Klber"
+ Strasbourg + France + 1/12/1998 + Ravioli Angelo + 292.5 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 1/12/1998 + Ikura + 465 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 1/12/1998 + Chartreuse verte + 378 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 1/13/1998 + Sir Rodney's Marmalade + 405 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 1/13/1998 + Cte de Blaye + 527 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 1/13/1998 + Chang + 190 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 1/13/1998 + Northwoods Cranberry Sauce + 800 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 1/13/1998 + Konbu + 60 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 1/13/1998 + Camembert Pierrot + 714 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/13/1998 + Grandma's Boysenberry Spread + 150 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/13/1998 + Chartreuse verte + 504 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/13/1998 + Camembert Pierrot + 1020 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/13/1998 + Scottish Longbreads + 300 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 1/14/1998 + Teatime Chocolate Biscuits + 18.4 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 1/14/1998 + Steeleye Stout + 144 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 1/14/1998 + Cte de Blaye + 2108 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 1/14/1998 + Ipoh Coffee + 414 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/14/1998 + Konbu + 14.4 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/14/1998 + NuNuCa Nu-Nougat-Creme + 112 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/14/1998 + Gula Malacca + 248.96 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 1/14/1998 + Wimmers gute Semmelkndel + 99.75 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 1/15/1998 + Uncle Bob's Organic Dried Pears + 540 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 1/15/1998 + Gorgonzola Telino + 101.25 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 1/15/1998 + Perth Pasties + 265.68 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/15/1998 + Thringer Rostbratwurst + 940.8 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/15/1998 + Nord-Ost Matjeshering + 491.91 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 1/15/1998 + Raclette Courdavault + 825 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 1/15/1998 + Original Frankfurter grne Soe + 20.8 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/16/1998 + Gustaf's Knckebrd + 1092 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/16/1998 + Steeleye Stout + 108 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/16/1998 + Ravioli Angelo + 468 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/16/1998 + Camembert Pierrot + 2040 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/16/1998 + Wimmers gute Semmelkndel + 997.5 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 1/16/1998 + Konbu + 36 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 1/16/1998 + Boston Crab Meat + 460 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 1/16/1998 + Zaanse koeken + 285 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 1/16/1998 + Lakkalikri + 283.5 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/19/1998 + Chai + 54 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/19/1998 + Carnarvon Tigers + 1171.88 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/19/1998 + Inlagd Sill + 712.5 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/19/1998 + Escargots de Bourgogne + 357.75 +
+ + TRADH + Tradio Hipermercados +
"Av. Ins de Castro, 414"
+ Sao Paulo + Brazil + 1/19/1998 + Mozzarella di Giovanni + 469.8 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/19/1998 + NuNuCa Nu-Nougat-Creme + 67.2 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 1/19/1998 + Chartreuse verte + 144 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 1/20/1998 + Ikura + 496 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 1/20/1998 + Gnocchi di nonna Alice + 1140 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 1/20/1998 + Raclette Courdavault + 2750 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 1/20/1998 + Original Frankfurter grne Soe + 195 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 1/20/1998 + Queso Cabrales + 315 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 1/20/1998 + Ipoh Coffee + 230 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 1/20/1998 + Scottish Longbreads + 250 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 1/20/1998 + Outback Lager + 180 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/21/1998 + Manjimup Dried Apples + 159 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 1/21/1998 + Gustaf's Knckebrd + 735 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/21/1998 + Tunnbrd + 567 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/21/1998 + Steeleye Stout + 405 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/21/1998 + Singaporean Hokkien Fried Mee + 529.2 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/21/1998 + Escargots de Bourgogne + 715.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 1/21/1998 + Wimmers gute Semmelkndel + 1596 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 1/22/1998 + Chef Anton's Cajun Seasoning + 462 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 1/22/1998 + Outback Lager + 450 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 1/22/1998 + Longlife Tofu + 200 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 1/22/1998 + Chai + 1152 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 1/22/1998 + Teatime Chocolate Biscuits + 88.32 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 1/22/1998 + Gravad lax + 1248 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 1/22/1998 + Rogede sild + 273.6 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 1/22/1998 + Camembert Pierrot + 1224 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 1/22/1998 + Flotemysost + 946 +
+ + CONSH + Consolidated Holdings +
Berkeley Gardens 12 Brewery
+ London + UK + 1/23/1998 + Chef Anton's Gumbo Mix + 640.5 +
+ + CONSH + Consolidated Holdings +
Berkeley Gardens 12 Brewery
+ London + UK + 1/23/1998 + Mishi Kobe Niku + 291 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 1/23/1998 + Aniseed Syrup + 490 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 1/23/1998 + Gumbr Gummibrchen + 477.82 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/23/1998 + NuNuCa Nu-Nougat-Creme + 238 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/23/1998 + Geitost + 8.5 +
+ + VICTE + Victuailles en stock +
"2, rue du Commerce"
+ Lyon + France + 1/23/1998 + Outback Lager + 382.5 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 1/26/1998 + Chang + 90.25 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 1/26/1998 + NuNuCa Nu-Nougat-Creme + 133 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 1/26/1998 + Ravioli Angelo + 185.25 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 1/26/1998 + Raclette Courdavault + 2194.5 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/26/1998 + Chang + 285 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/26/1998 + Alice Mutton + 234 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 1/26/1998 + Tarte au sucre + 2465 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 1/27/1998 + Carnarvon Tigers + 625 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/27/1998 + Ikura + 2635 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 1/27/1998 + Konbu + 331.5 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 1/27/1998 + Pavlova + 872.5 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 1/27/1998 + Gorgonzola Telino + 175 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 1/27/1998 + Gnocchi di nonna Alice + 912 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 1/27/1998 + Louisiana Fiery Hot Pepper Sauce + 268.39 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 1/28/1998 + Chang + 380 +
+ + ANTON + Antonio Moreno Taquera +
Mataderos 2312
+ Mxico D.F. + Mexico + 1/28/1998 + Singaporean Hokkien Fried Mee + 280 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 1/28/1998 + Aniseed Syrup + 300 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 1/28/1998 + Gumbr Gummibrchen + 819.79 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 1/28/1998 + Thringer Rostbratwurst + 928.43 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 1/29/1998 + Uncle Bob's Organic Dried Pears + 150 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 1/29/1998 + Schoggi Schokolade + 439 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 1/29/1998 + Outback Lager + 60 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 1/29/1998 + Guaran Fantstica + 135 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 1/29/1998 + Tourtire + 195.56 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 1/29/1998 + Wimmers gute Semmelkndel + 748.12 +
+ + FRANR + France restauration +
"54, rue Royale"
+ Nantes + France + 1/29/1998 + Manjimup Dried Apples + 159 +
+ + FRANR + France restauration +
"54, rue Royale"
+ Nantes + France + 1/29/1998 + Lakkalikri + 360 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 1/30/1998 + Alice Mutton + 1638 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 1/30/1998 + Carnarvon Tigers + 1250 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 1/30/1998 + Sir Rodney's Scones + 400 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 1/30/1998 + Geitost + 87.5 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 1/30/1998 + Tarte au sucre + 147.9 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 1/30/1998 + Queso Cabrales + 525 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 1/30/1998 + Filo Mix + 56 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 2/2/1998 + Chai + 306 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 2/2/1998 + Escargots de Bourgogne + 135.15 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 2/2/1998 + Steeleye Stout + 72 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 2/2/1998 + Laughing Lumberjack Lager + 210 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 2/2/1998 + Cte de Blaye + 15019.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 2/2/1998 + Chartreuse verte + 1368 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/3/1998 + Chang + 299.25 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/3/1998 + Guaran Fantstica + 20.25 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/3/1998 + Nord-Ost Matjeshering + 776.7 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 2/3/1998 + Perth Pasties + 98.4 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 2/4/1998 + Gumbr Gummibrchen + 624.6 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 2/4/1998 + Steeleye Stout + 540 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 2/4/1998 + Maxilaku + 756 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 2/4/1998 + Chai + 720 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 2/4/1998 + Queso Cabrales + 210 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 2/4/1998 + Tunnbrd + 450 +
+ + SEVES + Seven Seas Imports +
90 Wadhurst Rd.
+ London + UK + 2/4/1998 + Scottish Longbreads + 250 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 2/4/1998 + Steeleye Stout + 54 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 2/4/1998 + Manjimup Dried Apples + 106 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 2/5/1998 + Grandma's Boysenberry Spread + 1187.5 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 2/5/1998 + Pavlova + 198.93 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 2/5/1998 + Alice Mutton + 592.8 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/5/1998 + Pt chinois + 228 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/5/1998 + Tarte au sucre + 936.7 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/5/1998 + Wimmers gute Semmelkndel + 473.81 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/5/1998 + Louisiana Fiery Hot Pepper Sauce + 419.95 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/6/1998 + Sir Rodney's Scones + 200 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/6/1998 + Rssle Sauerkraut + 136.8 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/6/1998 + Ikura + 310 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/6/1998 + Teatime Chocolate Biscuits + 230 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/6/1998 + Zaanse koeken + 179.55 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 2/6/1998 + Maxilaku + 300 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 2/9/1998 + Spegesild + 252 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 2/9/1998 + Wimmers gute Semmelkndel + 665 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 2/9/1998 + Pavlova + 392.62 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 2/9/1998 + Carnarvon Tigers + 1562.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 2/10/1998 + Sir Rodney's Marmalade + 1539 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/10/1998 + Boston Crab Meat + 220.8 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/10/1998 + Louisiana Fiery Hot Pepper Sauce + 210.5 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/10/1998 + Lakkalikri + 180 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/10/1998 + Tunnbrd + 216 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/10/1998 + Sirop d'rable + 684 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/10/1998 + Outback Lager + 600 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 2/11/1998 + Rd Kaviar + 150 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/11/1998 + Singaporean Hokkien Fried Mee + 350 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/11/1998 + Maxilaku + 340 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/11/1998 + Tourtire + 202.64 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 2/12/1998 + Guaran Fantstica + 36 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 2/12/1998 + Sir Rodney's Scones + 380 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 2/12/1998 + Gnocchi di nonna Alice + 758.1 +
+ + LETSS + Let's Stop N Shop +
87 Polk St. Suite 5
+ San Francisco + USA + 2/12/1998 + Louisiana Fiery Hot Pepper Sauce + 239.97 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/12/1998 + Chang + 380 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/12/1998 + Guaran Fantstica + 54 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/12/1998 + Outback Lager + 450 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 2/12/1998 + Original Frankfurter grne Soe + 325 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 2/13/1998 + Ikura + 2170 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 2/13/1998 + Gorgonzola Telino + 437.5 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 2/13/1998 + Original Frankfurter grne Soe + 520 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 2/13/1998 + NuNuCa Nu-Nougat-Creme + 70 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/16/1998 + Chang + 380 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/16/1998 + Scottish Longbreads + 225 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 2/16/1998 + Queso Cabrales + 840 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 2/16/1998 + Cte de Blaye + 10540 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 2/16/1998 + Alice Mutton + 585 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 2/16/1998 + Sasquatch Ale + 140 +
+ + DUMON + Du monde entier +
"67, rue des Cinquante Otages"
+ Nantes + France + 2/16/1998 + Jack's New England Clam Chowder + 135.1 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 2/17/1998 + Nord-Ost Matjeshering + 368.93 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 2/17/1998 + Raclette Courdavault + 2090 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/18/1998 + Northwoods Cranberry Sauce + 1200 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/18/1998 + Guaran Fantstica + 45 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/18/1998 + Thringer Rostbratwurst + 2970.96 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/18/1998 + Nord-Ost Matjeshering + 906.15 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 2/18/1998 + Inlagd Sill + 380 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/18/1998 + Konbu + 159.6 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/18/1998 + Gudbrandsdalsost + 1710 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 2/18/1998 + Rhnbru Klosterbier + 883.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 2/18/1998 + Guaran Fantstica + 495 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 2/18/1998 + Chartreuse verte + 810 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 2/18/1998 + Boston Crab Meat + 1674.4 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 2/18/1998 + Camembert Pierrot + 3400 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 2/19/1998 + Rogede sild + 142.5 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 2/19/1998 + Gnocchi di nonna Alice + 608 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 2/19/1998 + Thringer Rostbratwurst + 9903.2 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 2/19/1998 + Nord-Ost Matjeshering + 932.04 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 2/20/1998 + Konbu + 30 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 2/20/1998 + Chartreuse verte + 122.4 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 2/20/1998 + Outback Lager + 33.75 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 2/23/1998 + Jack's New England Clam Chowder + 289.5 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 2/23/1998 + Flotemysost + 645 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/23/1998 + Pt chinois + 612 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 2/23/1998 + Tarte au sucre + 251.43 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 2/24/1998 + Konbu + 240 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 2/24/1998 + Louisiana Fiery Hot Pepper Sauce + 442.05 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 2/24/1998 + Scottish Longbreads + 250 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 2/24/1998 + Escargots de Bourgogne + 198.75 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 2/24/1998 + Tarte au sucre + 1725.5 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 2/24/1998 + Chai + 342 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 2/25/1998 + Sirop d'rable + 427.5 +
+ + SPECD + Spcialits du monde +
"25, rue Lauriston"
+ Paris + France + 2/25/1998 + Rhnbru Klosterbier + 108.5 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 2/26/1998 + Uncle Bob's Organic Dried Pears + 570 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 2/26/1998 + Filo Mix + 93.1 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 2/26/1998 + Uncle Bob's Organic Dried Pears + 360 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 2/26/1998 + Pavlova + 261.75 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 2/26/1998 + Jack's New England Clam Chowder + 48.25 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/26/1998 + Teatime Chocolate Biscuits + 110.4 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/26/1998 + Maxilaku + 200 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 2/26/1998 + Sirop d'rable + 142.5 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/26/1998 + Chai + 180 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/26/1998 + Alice Mutton + 468 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 2/26/1998 + Laughing Lumberjack Lager + 210 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 2/26/1998 + Queso Cabrales + 630 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 2/26/1998 + Thringer Rostbratwurst + 5570.55 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 2/26/1998 + Chef Anton's Cajun Seasoning + 495 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 2/26/1998 + Geitost + 75 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 2/26/1998 + Escargots de Bourgogne + 198.75 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 2/27/1998 + Flotemysost + 537.5 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 2/27/1998 + Alice Mutton + 390 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 2/27/1998 + Geitost + 75 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 2/27/1998 + Tourtire + 74.5 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 2/27/1998 + Pavlova + 104.7 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 2/27/1998 + Mascarpone Fabioli + 192 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 2/27/1998 + Ravioli Angelo + 390 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 3/2/1998 + Nord-Ost Matjeshering + 25.89 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 3/2/1998 + Camembert Pierrot + 340 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/2/1998 + Chai + 810 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/2/1998 + Camembert Pierrot + 637.5 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/2/1998 + Pavlova + 418.8 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/2/1998 + NuNuCa Nu-Nougat-Creme + 336 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/2/1998 + Boston Crab Meat + 368 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 3/3/1998 + Valkoinen suklaa + 390 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/3/1998 + Steeleye Stout + 180 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/3/1998 + Vegie-spread + 1756 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 3/3/1998 + Alice Mutton + 585 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 3/3/1998 + Guaran Fantstica + 157.5 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 3/3/1998 + Singaporean Hokkien Fried Mee + 112 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 3/3/1998 + Ipoh Coffee + 368 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 3/3/1998 + Laughing Lumberjack Lager + 268.8 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 3/4/1998 + Ikura + 558 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 3/4/1998 + Rssle Sauerkraut + 1231.2 +
+ + BERGS + Berglunds snabbkp +
Berguvsvgen 8
+ Lule + Sweden + 3/4/1998 + Rhnbru Klosterbier + 46.5 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 3/4/1998 + Inlagd Sill + 403.75 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 3/4/1998 + Filo Mix + 71.4 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 3/4/1998 + Queso Cabrales + 42 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 3/4/1998 + Konbu + 60 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 3/4/1998 + Teatime Chocolate Biscuits + 64.4 +
+ + ANATR + Ana Trujillo Emparedados y helados +
Avda. de la Constitucin 2222
+ Mxico D.F. + Mexico + 3/4/1998 + Mozzarella di Giovanni + 348 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/5/1998 + Sir Rodney's Marmalade + 405 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/5/1998 + Filo Mix + 35 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/5/1998 + Lakkalikri + 360 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 3/5/1998 + Zaanse koeken + 47.5 +
+ + GALED + Galera del gastrnomo +
"Rambla de Catalua, 23"
+ Barcelona + Spain + 3/5/1998 + Lakkalikri + 90 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 3/5/1998 + Sir Rodney's Scones + 600 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 3/5/1998 + Rhnbru Klosterbier + 379.75 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 3/5/1998 + Original Frankfurter grne Soe + 195 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/6/1998 + Sir Rodney's Scones + 360 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/6/1998 + Schoggi Schokolade + 1097.5 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/6/1998 + Pt chinois + 480 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 3/6/1998 + Escargots de Bourgogne + 318 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 3/6/1998 + Konbu + 214.2 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 3/6/1998 + Ravioli Angelo + 585 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/6/1998 + Pavlova + 471.15 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/6/1998 + Tarte au sucre + 621.18 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/6/1998 + Mozzarella di Giovanni + 556.8 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/6/1998 + Rhnbru Klosterbier + 139.5 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 3/6/1998 + Perth Pasties + 65.6 +
+ + ISLAT + Island Trading +
Garden House Crowther Way
+ Cowes + UK + 3/6/1998 + Sirop d'rable + 855 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 3/9/1998 + Grandma's Boysenberry Spread + 500 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 3/9/1998 + Chai + 378 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 3/9/1998 + Carnarvon Tigers + 187.5 +
+ + WELLI + Wellington Importadora +
"Rua do Mercado, 12"
+ Resende + Brazil + 3/9/1998 + Tunnbrd + 54 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 3/9/1998 + Inlagd Sill + 456 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 3/10/1998 + Rssle Sauerkraut + 364.8 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 3/10/1998 + Sasquatch Ale + 280 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/10/1998 + Konbu + 90 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/10/1998 + Ipoh Coffee + 828 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/10/1998 + Camembert Pierrot + 1249.5 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/10/1998 + Flotemysost + 564.38 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 3/10/1998 + Chang + 161.5 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 3/10/1998 + Laughing Lumberjack Lager + 476 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/11/1998 + Uncle Bob's Organic Dried Pears + 240 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 3/11/1998 + Konbu + 120 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/11/1998 + Gorgonzola Telino + 412.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/11/1998 + Tarte au sucre + 1109.25 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/11/1998 + Scottish Longbreads + 750 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/11/1998 + Mozzarella di Giovanni + 1740 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 3/11/1998 + Maxilaku + 560 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/11/1998 + Konbu + 90 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/11/1998 + Gustaf's Knckebrd + 441 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/11/1998 + Spegesild + 180 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/12/1998 + Queso Cabrales + 78.75 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/12/1998 + Gula Malacca + 262.58 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/12/1998 + Gnocchi di nonna Alice + 684 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 3/12/1998 + Konbu + 120 +
+ + MORGK + Morgenstern Gesundkost +
Heerstr. 22
+ Leipzig + Germany + 3/12/1998 + Gorgonzola Telino + 125 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/12/1998 + Ikura + 775 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/12/1998 + Guaran Fantstica + 112.5 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 3/12/1998 + Original Frankfurter grne Soe + 520 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 3/13/1998 + Raclette Courdavault + 220 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 3/13/1998 + Valkoinen suklaa + 146.25 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 3/13/1998 + Manjimup Dried Apples + 2120 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 3/13/1998 + Pt chinois + 96 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/13/1998 + Grandma's Boysenberry Spread + 300 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/13/1998 + Ikura + 930 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/13/1998 + Alice Mutton + 234 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/13/1998 + Tarte au sucre + 2958 +
+ + MAGAA + Magazzini Alimentari Riuniti +
Via Ludovico il Moro 22
+ Bergamo + Italy + 3/16/1998 + Chef Anton's Cajun Seasoning + 110 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 3/16/1998 + Geitost + 35.62 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 3/16/1998 + Jack's New England Clam Chowder + 55.01 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 3/16/1998 + Rhnbru Klosterbier + 368.13 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 3/16/1998 + Grandma's Boysenberry Spread + 380 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 3/16/1998 + Rssle Sauerkraut + 91.2 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 3/16/1998 + Sir Rodney's Marmalade + 3847.5 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 3/16/1998 + Gorgonzola Telino + 593.75 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/17/1998 + Pavlova + 415.31 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/17/1998 + Gorgonzola Telino + 265.63 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/17/1998 + Rogede sild + 285 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 3/17/1998 + Camembert Pierrot + 693.6 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 3/17/1998 + Rhnbru Klosterbier + 74.4 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 3/17/1998 + Sir Rodney's Scones + 120 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 3/17/1998 + Zaanse koeken + 133 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 3/17/1998 + Manjimup Dried Apples + 424 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/18/1998 + Nord-Ost Matjeshering + 776.7 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/18/1998 + Steeleye Stout + 720 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/18/1998 + Wimmers gute Semmelkndel + 266 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 3/18/1998 + Chef Anton's Gumbo Mix + 427 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 3/18/1998 + Uncle Bob's Organic Dried Pears + 180 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 3/18/1998 + Mozzarella di Giovanni + 174 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 3/18/1998 + Rhnbru Klosterbier + 131.75 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/19/1998 + Guaran Fantstica + 33.75 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/19/1998 + Jack's New England Clam Chowder + 231.6 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 3/19/1998 + Filo Mix + 39.9 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 3/19/1998 + Lakkalikri + 1080 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/19/1998 + Uncle Bob's Organic Dried Pears + 1350 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/19/1998 + Konbu + 462 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/19/1998 + Perth Pasties + 656 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/19/1998 + Gudbrandsdalsost + 324 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 3/19/1998 + Lakkalikri + 792 +
+ + FURIB + Furia Bacalhau e Frutos do Mar +
Jardim das rosas n. 32
+ Lisboa + Portugal + 3/19/1998 + Camembert Pierrot + 57.8 +
+ + SPECD + Spcialits du monde +
"25, rue Lauriston"
+ Paris + France + 3/20/1998 + Carnarvon Tigers + 375 +
+ + SPECD + Spcialits du monde +
"25, rue Lauriston"
+ Paris + France + 3/20/1998 + Cte de Blaye + 1317.5 +
+ + SPECD + Spcialits du monde +
"25, rue Lauriston"
+ Paris + France + 3/20/1998 + Gudbrandsdalsost + 360 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 3/20/1998 + Manjimup Dried Apples + 848 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 3/20/1998 + Gravad lax + 208 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 3/20/1998 + Gnocchi di nonna Alice + 387.6 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 3/20/1998 + Tarte au sucre + 502.86 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 3/23/1998 + Teatime Chocolate Biscuits + 110.4 +
+ + TOMSP + Toms Spezialitten +
Luisenstr. 48
+ Mnster + Germany + 3/23/1998 + Maxilaku + 800 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/23/1998 + Queso Manchego La Pastora + 1140 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/23/1998 + Guaran Fantstica + 135 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/23/1998 + Wimmers gute Semmelkndel + 133 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 3/23/1998 + Spegesild + 108 +
+ + BOLID + Blido Comidas preparadas +
"C/ Araquil, 67"
+ Madrid + Spain + 3/24/1998 + Filo Mix + 224 +
+ + FRANR + France restauration +
"54, rue Royale"
+ Nantes + France + 3/24/1998 + Thringer Rostbratwurst + 1733.06 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/24/1998 + Alice Mutton + 234 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/24/1998 + Geitost + 17.5 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/24/1998 + Gumbr Gummibrchen + 156.15 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/24/1998 + Jack's New England Clam Chowder + 57.9 +
+ + LACOR + La corne d'abondance +
"67, avenue de l'Europe"
+ Versailles + France + 3/24/1998 + Rhnbru Klosterbier + 77.5 +
+ + SPLIR + Split Rail Beer & Ale +
P.O. Box 555
+ Lander + USA + 3/25/1998 + Vegie-spread + 439 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/25/1998 + Northwoods Cranberry Sauce + 640 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/25/1998 + Rhnbru Klosterbier + 77.5 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 3/25/1998 + Rssle Sauerkraut + 912 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 3/26/1998 + Chartreuse verte + 540 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 3/26/1998 + Zaanse koeken + 285 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 3/26/1998 + Manjimup Dried Apples + 530 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 3/26/1998 + Vegie-spread + 878 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 3/26/1998 + Northwoods Cranberry Sauce + 680 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 3/26/1998 + Sir Rodney's Scones + 340 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 3/26/1998 + Boston Crab Meat + 184 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 3/26/1998 + Gula Malacca + 99.19 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/26/1998 + Uncle Bob's Organic Dried Pears + 540 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/26/1998 + Queso Manchego La Pastora + 760 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/26/1998 + Guaran Fantstica + 360 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/26/1998 + Schoggi Schokolade + 1317 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/26/1998 + Gorgonzola Telino + 300 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 3/26/1998 + Vegie-spread + 1536.5 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 3/27/1998 + Rhnbru Klosterbier + 248 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 3/27/1998 + Cte de Blaye + 15810 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/27/1998 + Uncle Bob's Organic Dried Pears + 600 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 3/27/1998 + Ipoh Coffee + 414 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/27/1998 + Konbu + 428.4 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/27/1998 + Ravioli Angelo + 292.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/30/1998 + Pavlova + 959.75 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/30/1998 + Guaran Fantstica + 90 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 3/30/1998 + Inlagd Sill + 760 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 3/30/1998 + Pavlova + 565.38 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 3/30/1998 + Carnarvon Tigers + 450 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 3/30/1998 + Mascarpone Fabioli + 1008 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 3/30/1998 + Queso Cabrales + 630 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 3/30/1998 + Sir Rodney's Marmalade + 1215 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 3/30/1998 + Lakkalikri + 180 +
+ + OCEAN + Ocano Atlntico Ltda. +
Ing. Gustavo Moncada 8585 Piso 20-A
+ Buenos Aires + Argentina + 3/30/1998 + Original Frankfurter grne Soe + 195 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 3/31/1998 + Uncle Bob's Organic Dried Pears + 1800 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 3/31/1998 + Ipoh Coffee + 276 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 3/31/1998 + Mozzarella di Giovanni + 696 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 3/31/1998 + Uncle Bob's Organic Dried Pears + 1800 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 3/31/1998 + Tarte au sucre + 1774.8 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 3/31/1998 + Grandma's Boysenberry Spread + 1000 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 3/31/1998 + Queso Cabrales + 315 +
+ + QUEDE + Que Delcia +
"Rua da Panificadora, 12"
+ Rio de Janeiro + Brazil + 3/31/1998 + Jack's New England Clam Chowder + 38.6 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/1/1998 + Sir Rodney's Scones + 650 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/1/1998 + Sasquatch Ale + 714 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/1/1998 + Pt chinois + 1326 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/1/1998 + Sirop d'rable + 1598.85 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/1/1998 + Chang + 760 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/1/1998 + Outback Lager + 240 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/1/1998 + Lakkalikri + 1296 +
+ + THEBI + The Big Cheese +
89 Jefferson Way Suite 2
+ Portland + USA + 4/1/1998 + Mozzarella di Giovanni + 69.6 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 4/1/1998 + Thringer Rostbratwurst + 4642.12 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 4/1/1998 + Jack's New England Clam Chowder + 253.31 +
+ + VAFFE + Vaffeljernet +
Smagsloget 45
+ rhus + Denmark + 4/2/1998 + Raclette Courdavault + 940.5 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 4/2/1998 + Manjimup Dried Apples + 1060 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 4/2/1998 + Camembert Pierrot + 136 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/2/1998 + Singaporean Hokkien Fried Mee + 560 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 4/3/1998 + Mascarpone Fabioli + 1600 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 4/3/1998 + Spegesild + 180 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 4/3/1998 + Filo Mix + 105 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 4/3/1998 + Guaran Fantstica + 54 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 4/3/1998 + Sirop d'rable + 199.5 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 4/3/1998 + Longlife Tofu + 200 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 4/3/1998 + Rhnbru Klosterbier + 232.5 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 4/3/1998 + Jack's New England Clam Chowder + 183.35 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 4/3/1998 + Manjimup Dried Apples + 755.25 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 4/3/1998 + Original Frankfurter grne Soe + 259.35 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 4/6/1998 + Chef Anton's Cajun Seasoning + 412.5 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 4/6/1998 + Guaran Fantstica + 101.25 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 4/6/1998 + Original Frankfurter grne Soe + 390 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 4/6/1998 + Uncle Bob's Organic Dried Pears + 1800 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 4/6/1998 + Gustaf's Knckebrd + 525 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 4/6/1998 + Spegesild + 300 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 4/6/1998 + Pt chinois + 144 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/6/1998 + Konbu + 336 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/6/1998 + Steeleye Stout + 229.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/6/1998 + Singaporean Hokkien Fried Mee + 285.6 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/6/1998 + Pt chinois + 960 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 4/6/1998 + Chai + 72 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 4/6/1998 + Boston Crab Meat + 184 +
+ + THECR + The Cracker Box +
55 Grizzly Peak Rd.
+ Butte + USA + 4/6/1998 + Filo Mix + 70 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 4/7/1998 + Gumbr Gummibrchen + 187.38 +
+ + MAISD + Maison Dewey +
Rue Joseph-Bens 532
+ Bruxelles + Belgium + 4/7/1998 + Lakkalikri + 108 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 4/7/1998 + Chai + 36 +
+ + WILMK + Wilman Kala +
Keskuskatu 45
+ Helsinki + Finland + 4/7/1998 + Raclette Courdavault + 550 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 4/7/1998 + Chai + 144 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 4/7/1998 + Thringer Rostbratwurst + 185.69 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 4/8/1998 + Northwoods Cranberry Sauce + 1200 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 4/8/1998 + Thringer Rostbratwurst + 1237.9 +
+ + PRINI + Princesa Isabel Vinhos +
Estrada da sade n. 58
+ Lisboa + Portugal + 4/8/1998 + Singaporean Hokkien Fried Mee + 196 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/8/1998 + Rssle Sauerkraut + 3032.4 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/8/1998 + Sasquatch Ale + 1197 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/8/1998 + Flotemysost + 451.5 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 4/8/1998 + Guaran Fantstica + 54 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 4/8/1998 + Inlagd Sill + 256.5 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 4/8/1998 + Camembert Pierrot + 306 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 4/9/1998 + Uncle Bob's Organic Dried Pears + 600 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 4/9/1998 + Guaran Fantstica + 45 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 4/9/1998 + Escargots de Bourgogne + 503.5 +
+ + ALFKI + Alfreds Futterkiste +
Obere Str. 57
+ Berlin + Germany + 4/9/1998 + Flotemysost + 430 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 4/9/1998 + Teatime Chocolate Biscuits + 437 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 4/9/1998 + Camembert Pierrot + 1162.8 +
+ + FRANK + Frankenversand +
Berliner Platz 43
+ Mnchen + Germany + 4/9/1998 + Flotemysost + 1225.5 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 4/9/1998 + Tunnbrd + 90 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 4/9/1998 + Singaporean Hokkien Fried Mee + 56 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 4/9/1998 + Rogede sild + 190 +
+ + ROMEY + Romero y tomillo +
"Gran Va, 1"
+ Madrid + Spain + 4/9/1998 + Scottish Longbreads + 25 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 4/10/1998 + Jack's New England Clam Chowder + 243.18 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 4/10/1998 + Nord-Ost Matjeshering + 388.35 +
+ + SANTG + Sant Gourmet +
Erling Skakkes gate 78
+ Stavern + Norway + 4/10/1998 + Original Frankfurter grne Soe + 234 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 4/10/1998 + Gorgonzola Telino + 187.5 +
+ + AROUT + Around the Horn +
120 Hanover Sq.
+ London + UK + 4/10/1998 + Inlagd Sill + 304 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/13/1998 + Aniseed Syrup + 250 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/13/1998 + Raclette Courdavault + 6050 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 4/13/1998 + Outback Lager + 450 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 4/13/1998 + Queso Manchego La Pastora + 760 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 4/13/1998 + Carnarvon Tigers + 625 +
+ + LONEP + Lonesome Pine Restaurant +
89 Chiaroscuro Rd.
+ Portland + USA + 4/13/1998 + Gnocchi di nonna Alice + 190 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 4/13/1998 + Spegesild + 36 +
+ + RANCH + Rancho grande +
Av. del Libertador 900
+ Buenos Aires + Argentina + 4/13/1998 + Maxilaku + 40 +
+ + OTTIK + Ottilies Kseladen +
Mehrheimerstr. 369
+ Kln + Germany + 4/14/1998 + Ikura + 632.4 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/14/1998 + Chang + 156.75 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/14/1998 + Sir Rodney's Marmalade + 1215 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/14/1998 + Gumbr Gummibrchen + 1967.49 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/14/1998 + Manjimup Dried Apples + 1749 +
+ + QUICK + QUICK-Stop +
Taucherstrae 10
+ Cunewalde + Germany + 4/14/1998 + Mozzarella di Giovanni + 1218 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 4/14/1998 + Teatime Chocolate Biscuits + 322 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 4/14/1998 + Gudbrandsdalsost + 1080 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 4/14/1998 + Uncle Bob's Organic Dried Pears + 120 +
+ + BSBEV + B's Beverages +
Fauntleroy Circus
+ London + UK + 4/14/1998 + Ipoh Coffee + 1380 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/15/1998 + Gumbr Gummibrchen + 374.76 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/15/1998 + Geitost + 75 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/15/1998 + Louisiana Fiery Hot Pepper Sauce + 442.05 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/15/1998 + Flotemysost + 1075 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 4/15/1998 + Chai + 162 +
+ + WARTH + Wartian Herkku +
Torikatu 38
+ Oulu + Finland + 4/15/1998 + Konbu + 108 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 4/15/1998 + Carnarvon Tigers + 500 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 4/15/1998 + Manjimup Dried Apples + 530 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 4/16/1998 + Guaran Fantstica + 101.25 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 4/16/1998 + Tarte au sucre + 776.48 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 4/16/1998 + Pt chinois + 840 +
+ + KOENE + Kniglich Essen +
Maubelstr. 90
+ Brandenburg + Germany + 4/16/1998 + Raclette Courdavault + 1320 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 4/16/1998 + Gnocchi di nonna Alice + 760 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 4/16/1998 + Vegie-spread + 526.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Chang + 1425 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Chef Anton's Gumbo Mix + 1494.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Thringer Rostbratwurst + 5570.55 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Raclette Courdavault + 4125 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Chai + 810 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Konbu + 480 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Guaran Fantstica + 94.5 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Wimmers gute Semmelkndel + 665 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 4/17/1998 + Flotemysost + 344 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 4/17/1998 + Inlagd Sill + 665 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 4/17/1998 + Cte de Blaye + 6587.5 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 4/17/1998 + Raclette Courdavault + 1650 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 4/17/1998 + Perth Pasties + 2066.4 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 4/17/1998 + Gudbrandsdalsost + 1166.4 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 4/20/1998 + Sir Rodney's Scones + 135 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 4/20/1998 + Gula Malacca + 233.4 +
+ + OLDWO + Old World Delicatessen +
2743 Bering St.
+ Anchorage + USA + 4/20/1998 + Sirop d'rable + 171 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 4/20/1998 + Chai + 180 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 4/20/1998 + Steeleye Stout + 1080 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 4/20/1998 + Singaporean Hokkien Fried Mee + 420 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 4/20/1998 + Tourtire + 74.5 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 4/20/1998 + Konbu + 42 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 4/20/1998 + Raclette Courdavault + 1650 +
+ + GODOS + Godos Cocina Tpica +
"C/ Romero, 33"
+ Sevilla + Spain + 4/21/1998 + Outback Lager + 60 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 4/21/1998 + Boston Crab Meat + 73.6 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 4/21/1998 + Filo Mix + 14 +
+ + SUPRD + Suprmes dlices +
"Boulevard Tirou, 255"
+ Charleroi + Belgium + 4/21/1998 + Flotemysost + 645 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 4/21/1998 + Rssle Sauerkraut + 912 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 4/21/1998 + Steeleye Stout + 432 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 4/21/1998 + Maxilaku + 1200 +
+ + LINOD + LINO-Delicateses +
Ave. 5 de Mayo Porlamar
+ I. de Margarita + Venezuela + 4/21/1998 + Ravioli Angelo + 546 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 4/22/1998 + Sir Rodney's Scones + 200 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 4/22/1998 + Chang + 456 +
+ + CHOPS + Chop-suey Chinese +
Hauptstr. 29
+ Bern + Switzerland + 4/22/1998 + Vegie-spread + 1317 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 4/22/1998 + Gula Malacca + 291.75 +
+ + COMMI + Comrcio Mineiro +
"Av. dos Lusadas, 23"
+ Sao Paulo + Brazil + 4/22/1998 + Sirop d'rable + 114 +
+ + SPECD + Spcialits du monde +
"25, rue Lauriston"
+ Paris + France + 4/22/1998 + Queso Cabrales + 210 +
+ + WOLZA + Wolski Zajazd +
ul. Filtrowa 68
+ Warszawa + Poland + 4/23/1998 + Tarte au sucre + 591.6 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 4/23/1998 + Geitost + 37.5 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 4/23/1998 + Manjimup Dried Apples + 1272 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 4/23/1998 + Queso Manchego La Pastora + 722 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 4/23/1998 + Mascarpone Fabioli + 456 +
+ + WANDK + Die Wandernde Kuh +
Adenauerallee 900
+ Stuttgart + Germany + 4/23/1998 + Steeleye Stout + 307.8 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/24/1998 + Chai + 337.5 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/24/1998 + Chef Anton's Gumbo Mix + 480.38 +
+ + BOTTM + Bottom-Dollar Markets +
23 Tsawassen Blvd.
+ Tsawassen + Canada + 4/24/1998 + Scottish Longbreads + 525 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 4/24/1998 + Chang + 152 +
+ + GOURL + Gourmet Lanchonetes +
"Av. Brasil, 442"
+ Campinas + Brazil + 4/24/1998 + Queso Manchego La Pastora + 121.6 +
+ + FOLKO + Folk och f HB +
kergatan 24
+ Brcke + Sweden + 4/27/1998 + Lakkalikri + 810 +
+ + LAMAI + La maison d'Asie +
1 rue Alsace-Lorraine
+ Toulouse + France + 4/27/1998 + Guaran Fantstica + 36 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 4/27/1998 + Ipoh Coffee + 1104 +
+ + HANAR + Hanari Carnes +
"Rua do Pao, 67"
+ Rio de Janeiro + Brazil + 4/27/1998 + Sirop d'rable + 228 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 4/27/1998 + Carnarvon Tigers + 1750 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 4/27/1998 + Mascarpone Fabioli + 640 +
+ + PICCO + Piccolo und mehr +
Geislweg 14
+ Salzburg + Austria + 4/27/1998 + Wimmers gute Semmelkndel + 665 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 4/28/1998 + Geitost + 25 +
+ + CACTU + Cactus Comidas para llevar +
Cerrito 333
+ Buenos Aires + Argentina + 4/28/1998 + Laughing Lumberjack Lager + 280 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 4/28/1998 + Guaran Fantstica + 67.5 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 4/28/1998 + NuNuCa Nu-Nougat-Creme + 210 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 4/28/1998 + Manjimup Dried Apples + 1060 +
+ + HILAA + HILARION-Abastos +
Carrera 22 con Ave. Carlos Soublette #8-35
+ San Cristbal + Venezuela + 4/28/1998 + Ravioli Angelo + 390 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/28/1998 + Uncle Bob's Organic Dried Pears + 1200 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/28/1998 + Pt chinois + 840 +
+ + EASTC + Eastern Connection +
35 King George
+ London + UK + 4/28/1998 + Camembert Pierrot + 1700 +
+ + NORTS + North/South +
South House 300 Queensbridge
+ London + UK + 4/29/1998 + Outback Lager + 45 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 4/29/1998 + Sir Rodney's Scones + 30 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 4/29/1998 + Camembert Pierrot + 714 +
+ + BLAUS + Blauer See Delikatessen +
Forsterstr. 57
+ Mannheim + Germany + 4/29/1998 + Sirop d'rable + 114 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 4/29/1998 + Konbu + 180 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 4/29/1998 + Alice Mutton + 468 +
+ + RICAR + Ricardo Adocicados +
"Av. Copacabana, 267"
+ Rio de Janeiro + Brazil + 4/29/1998 + Camembert Pierrot + 1190 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 4/30/1998 + Camembert Pierrot + 136 +
+ + FRANS + Franchi S.p.A. +
Via Monte Bianco 34
+ Torino + Italy + 4/30/1998 + Original Frankfurter grne Soe + 130 +
+ + GREAL + Great Lakes Food Market +
2732 Baker Blvd.
+ Eugene + USA + 4/30/1998 + Camembert Pierrot + 510 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 4/30/1998 + Perth Pasties + 262.4 +
+ + REGGC + Reggiani Caseifici +
Strada Provinciale 124
+ Reggio Emilia + Italy + 4/30/1998 + Outback Lager + 144 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/30/1998 + Sasquatch Ale + 420 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/30/1998 + Boston Crab Meat + 662.4 +
+ + HUNGO + Hungry Owl All-Night Grocers +
8 Johnstown Road
+ Cork + Ireland + 4/30/1998 + Jack's New England Clam Chowder + 260.55 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 5/1/1998 + Alice Mutton + 2702.7 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 5/1/1998 + Jack's New England Clam Chowder + 115.8 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 5/1/1998 + Perth Pasties + 738 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 5/1/1998 + Pt chinois + 86.4 +
+ + SAVEA + Save-a-lot Markets +
187 Suffolk Ln.
+ Boise + USA + 5/1/1998 + Scottish Longbreads + 687.5 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 5/1/1998 + Nord-Ost Matjeshering + 77.67 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 5/1/1998 + Tourtire + 111.75 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 5/1/1998 + Pavlova + 52.35 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 5/1/1998 + Teatime Chocolate Biscuits + 386.4 +
+ + WHITC + White Clover Markets +
305 - 14th Ave. S. Suite 3B
+ Seattle + USA + 5/1/1998 + Sasquatch Ale + 490 +
+ + DRACD + Drachenblut Delikatessen +
Walserweg 21
+ Aachen + Germany + 5/4/1998 + Jack's New England Clam Chowder + 86.85 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 5/4/1998 + Rssle Sauerkraut + 310.08 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 5/4/1998 + Ipoh Coffee + 1407.6 +
+ + QUEEN + Queen Cozinha +
"Alameda dos Canrios, 891"
+ Sao Paulo + Brazil + 5/4/1998 + Original Frankfurter grne Soe + 309.4 +
+ + TORTU + Tortuga Restaurante +
Avda. Azteca 123
+ Mxico D.F. + Mexico + 5/4/1998 + Chartreuse verte + 360 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/5/1998 + Chai + 612 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/5/1998 + Chang + 323 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/5/1998 + Pavlova + 444.97 +
+ + LEHMS + Lehmanns Marktstand +
Magazinweg 7
+ Frankfurt a.M. + Germany + 5/5/1998 + Gorgonzola Telino + 250 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 5/5/1998 + Uncle Bob's Organic Dried Pears + 427.5 +
+ + LILAS + LILA-Supermercado +
Carrera 52 con Ave. Bolvar #65-98 Llano Largo
+ Barquisimeto + Venezuela + 5/5/1998 + Konbu + 57 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 5/5/1998 + Chang + 152 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 5/5/1998 + Jack's New England Clam Chowder + 386 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 5/5/1998 + Valkoinen suklaa + 357.5 +
+ + ERNSH + Ernst Handel +
Kirchgasse 6
+ Graz + Austria + 5/5/1998 + Wimmers gute Semmelkndel + 4322.5 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 5/5/1998 + Queso Cabrales + 210 +
+ + PERIC + Pericles Comidas clsicas +
Calle Dr. Jorge Cash 321
+ Mxico D.F. + Mexico + 5/5/1998 + Guaran Fantstica + 90 +
+ + SIMOB + Simons bistro +
Vinbltet 34
+ Kobenhavn + Denmark + 5/6/1998 + Pavlova + 232.09 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/6/1998 + Chang + 161.5 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/6/1998 + Spegesild + 306 +
+ + RICSU + Richter Supermarkt +
Grenzacherweg 237
+ Genve + Switzerland + 5/6/1998 + Lakkalikri + 30.6 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 5/6/1998 + Grandma's Boysenberry Spread + 375 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 5/6/1998 + Tofu + 348.75 +
+ + BONAP + Bon app' +
"12, rue des Bouchers"
+ Marseille + France + 5/6/1998 + Teatime Chocolate Biscuits + 69 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Chang + 364.8 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Aniseed Syrup + 40 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Chef Anton's Cajun Seasoning + 22 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Grandma's Boysenberry Spread + 24.5 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Uncle Bob's Organic Dried Pears + 28.5 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Northwoods Cranberry Sauce + 72 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Ikura + 31 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Queso Manchego La Pastora + 72.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Konbu + 24 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Tofu + 22.55 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Pavlova + 33.85 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Sir Rodney's Marmalade + 77.76 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Tunnbrd + 18 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Mascarpone Fabioli + 32 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Chartreuse verte + 34.2 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Jack's New England Clam Chowder + 28.95 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Spegesild + 35.28 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Filo Mix + 14 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Pt chinois + 48 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Camembert Pierrot + 63.92 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Wimmers gute Semmelkndel + 64.51 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Louisiana Hot Spiced Okra + 17 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Rd Kaviar + 29.7 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Rhnbru Klosterbier + 31 +
+ + RATTC + Rattlesnake Canyon Grocery +
2817 Milton Dr.
+ Albuquerque + USA + 5/6/1998 + Original Frankfurter grne Soe + 26 +
+
\ No newline at end of file diff --git a/run.cmd b/run.cmd index aa8419720..cf31c1ee6 100644 --- a/run.cmd +++ b/run.cmd @@ -1,4 +1,4 @@ -:: Last updated: Monday 28th August, 2023 @ 18:00 +:: Last updated: Wednesday 21st August, 2024 @ 19:00 @echo off @@ -6,28 +6,27 @@ title Krypton Toolkit Build System cls -@echo Welcome to the Krypton Toolkit Build system, version: 1.9. Please select an option below. - +@echo Welcome to the Krypton Toolkit Build system, version: 2.4. Please select an option below. +echo: @echo ============================================================================================== - +echo: echo 1. Clean project echo 2. Build Krypton Toolkit echo 3. Create NuGet packages -::echo 4. Rebuild project -::echo 4. Clean, Build and create NuGet packages -echo 4. Debug project -echo 5. NuGet Tools -echo 6. End - -set /p answer="Enter number (1 - 6): " +echo 4. Build and Pack Toolkit +echo 5. Debug project +echo 6. NuGet Tools +::echo 7. Miscellaneous tasks +echo 7. End +echo: +set /p answer="Enter number (1 - 7): " if %answer%==1 (goto cleanproject) if %answer%==2 (goto buildproject) if %answer%==3 (goto createnugetpackages) -::if %answer%==4 (goto rebuildproject) -::if %answer%==4 (goto buildandcreatenugetpackages) -if %answer%==4 (goto debugproject) -if %answer%==5 (goto nugettools) -if %answer%==6 (goto exitbuildsystem) +if %answer%==4 (goto buildandpacktoolkit) +if %answer%==5 (goto debugproject) +if %answer%==6 (goto nugettools) +if %answer%==7 (goto exitbuildsystem) @echo Invalid input, please try again. @@ -44,21 +43,21 @@ cls echo 1. Clean project echo 2. Build Krypton Toolkit echo 3. Create NuGet packages -::echo 4. Rebuild project -::echo 4. Clean, Build and create NuGet packages -echo 4. Debug project -echo 5. NuGet Tools -echo 6. End - -set /p answer="Enter number (1 - 6): " +echo 4. Build and Pack Toolkit +echo 5. Debug project +echo 6. NuGet Tools +::echo 7. Miscellaneous tasks +echo 7. End +echo: +set /p answer="Enter number (1 - 8): " if %answer%==1 (goto cleanproject) if %answer%==2 (goto buildproject) if %answer%==3 (goto createnugetpackages) -::if %answer%==4 (goto rebuildproject) -::if %answer%==4 (goto buildandcreatenugetpackages) -if %answer%==4 (goto debugproject) -if %answer%==5 (goto nugettools) -if %answer%==6 (goto exitbuildsystem) +if %answer%==4 (goto buildandpacktoolkit) +if %answer%==5 (goto debugproject) +if %answer%==6 (goto nugettools) +::if %answer%==7 (goto miscellaneoustasks) +if %answer%==7 (goto exitbuildsystem) @echo Invalid input, please try again. @@ -74,7 +73,7 @@ echo a. Rebuild project echo 2. Build canary version echo 3. Build stable version echo 4. Go back to main menu - +echo: set /p answer="Enter number or letter (1 - 4, a - *): " if %answer%==1 (goto buildnightly) if %answer%==a (goto rebuildproject) @@ -95,7 +94,7 @@ echo 1. Pack nightly version echo 2. Pack canary version echo 3. Pack stable version echo 4. Go back to main menu - +echo: set /p answer="Enter number (1 - 4): " if %answer%==1 (goto packnightly) if %answer%==2 (goto packcanary) @@ -113,7 +112,7 @@ cls echo 1. Debug echo 2. Go back to main mainmenu - +echo: set /p answer="Enter number (1 - 2): " if %answer%==1 (goto debug) if %answer%==2 (goto mainmenu) @@ -124,6 +123,46 @@ pause goto debugmenu +:buildandpacktoolkitmenu + +cls + +echo 1. Build and pack nightly +echo 2. Build and pack canary +echo 3. Build and pack stable +echo 4. Go to main mainmenu +echo: +set /p answer="Enter number (1 - 4): " +if %answer%==1 (goto buildandpacknightly) +if %answer%==2 (goto buildandpackcanary) +if %answer%==3 (goto buildandpackstable) +if %answer%==4 (goto mainmenu) + +@echo Invalid input, please try again. + +pause + +goto buildandpacktoolkitmenu + +:miscellaneoustasksmenu + +cls + +echo 1. Install prerequisites +echo 2. Update prerequisites +echo 3. Go to main menu +echo: +set /p answer="Enter number (1 - 3): " +if %answer%==1 (goto installprerequisites) +if %answer%==2 (goto updateprerequisites) +if %answer%==3 (goto mainmenu) + +@echo Invalid input, please try again. + +pause + +goto miscellaneoustasksmenu + :: =================================================================================================== :clearscreen @@ -153,14 +192,36 @@ echo Deleted the 'Krypton.Toolkit\obj' folder echo Deleting the 'Krypton.Workspace\obj' folder rd /s /q "Source\Krypton Components\Krypton.Workspace\obj" echo Deleted the 'Krypton.Workspace\obj' folder -echo Deleting the 'build.log' file -del /f build.log -echo Deleted the 'build.log' file +echo Deleting the 'Logs' folder +del /f "Logs" pause goto mainmenu +:clearproject + +echo Deleting the 'Bin' folder +rd /s /q "Bin" +echo Deleted the 'Bin' folder +echo Deleting the 'Krypton.Docking\obj' folder +rd /s /q "Source\Krypton Components\Krypton.Docking\obj" +echo Deleted the 'Krypton.Docking\obj' folder +echo Deleting the 'Krypton.Navigator\obj' folder +rd /s /q "Source\Krypton Components\Krypton.Navigator\obj" +echo Deleted the 'Krypton.Navigator\obj' folder +echo Deleting the 'Krypton.Ribbon\obj' folder +rd /s /q "Source\Krypton Components\Krypton.Ribbon\obj" +echo Deleted the 'Krypton.Ribbon\obj' folder +echo Deleting the 'Krypton.Toolkit\obj' folder +rd /s /q "Source\Krypton Components\Krypton.Toolkit\obj" +echo Deleted the 'Krypton.Toolkit\obj' folder +echo Deleting the 'Krypton.Workspace\obj' folder +rd /s /q "Source\Krypton Components\Krypton.Workspace\obj" +echo Deleted the 'Krypton.Workspace\obj' folder +echo Deleting the 'Logs' folder +del /f "Logs" + :: =================================================================================================== :cleanproject @@ -178,6 +239,12 @@ goto debugmenu :nugettools goto nugettools +:buildandpacktoolkit +goto buildandpacktoolkitmenu + +:miscellaneoustasks +goto miscellaneoustasksmenu + :exitbuildsystem @echo Exiting the build system, have a good day. Bye! @@ -256,7 +323,7 @@ echo 1. Produce 'Lite' stable packages echo 2. Produce 'full' stable packages echo 3. Produce 'full/lite' stable packages echo 4. Go back to main menu - +echo: set /p answer="Enter number (1 - 4): " if %answer%==1 (goto packstablelite) if %answer%==2 (goto packstablefull) @@ -344,7 +411,7 @@ echo 2. Build canary packages echo 3. Build stable packages echo 4. Build stable (lite) packages echo 5. Go back to main menu - +echo: set /p answer="Enter number (1 - 5): " if %answer%==1 (goto buildnightlypackages) @@ -415,5 +482,33 @@ rebuild-build-nightly.cmd :: =================================================================================================== +:buildandpacknightly +cls + +:: goto clearproject + +cd Scripts + +:: build-nightly.cmd + +build-nightly.cmd Pack + +:buildandpackcanary +cls + +cd Scripts + +build-canary.cmd Pack + +:buildandpackstable +cls + +cd Scripts + +build-stable.cmd Pack + +:: =================================================================================================== + +:clearlogfiles -:: =================================================================================================== \ No newline at end of file +:clearbinaries \ No newline at end of file